From 6c56233edcd2f02b3943ad8edc1a3030c1e28119 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 20 Nov 2023 21:57:10 -0500 Subject: [PATCH 001/515] define install abstract base class --- invokeai/app/services/events/__init__.py | 1 + invokeai/app/services/events/events_base.py | 54 +++++ .../app/services/model_install/__init__.py | 1 + .../model_install/model_install_base.py | 228 ++++++++++++++++++ .../model_install/model_install_default.py | 78 ++++++ 5 files changed, 362 insertions(+) create mode 100644 invokeai/app/services/model_install/__init__.py create mode 100644 invokeai/app/services/model_install/model_install_base.py create mode 100644 invokeai/app/services/model_install/model_install_default.py diff --git a/invokeai/app/services/events/__init__.py b/invokeai/app/services/events/__init__.py index e69de29bb2..17407d3b72 100644 --- a/invokeai/app/services/events/__init__.py +++ b/invokeai/app/services/events/__init__.py @@ -0,0 +1 @@ +from .events_base import EventServiceBase # noqa F401 diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index dd4152e609..bfb982b4c0 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -1,5 +1,7 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) +import traceback + from typing import Any, Optional from invokeai.app.services.invocation_processor.invocation_processor_common import ProgressImage @@ -313,3 +315,55 @@ class EventServiceBase: event_name="queue_cleared", payload={"queue_id": queue_id}, ) + + def emit_model_install_started(self, source: str) -> None: + """ + Emitted when an install job is started. + + :param source: Source of the model; local path, repo_id or url + """ + self.__emit_queue_event( + event_name="model_install_started", + payload={"source": source}, + ) + + def emit_model_install_completed(self, source: str, dest: str) -> None: + """ + Emitted when an install job is completed successfully. + + :param source: Source of the model; local path, repo_id or url + :param dest: Destination of the model files; always a local path + """ + self.__emit_queue_event( + event_name="model_install_completed", + payload={ + "source": source, + "dest": dest, + }, + ) + + def emit_model_install_error(self, + source:str, + exception: Exception, + ) -> None: + """ + Emitted when an install job encounters an exception. + + :param source: Source of the model + :param exception: The exception that raised the error + """ + + # Revisit: + # it makes more sense to receive an exception and break it out + # into error_type and error here, rather than at the caller's side + error_type = exception.__class__.__name__, + error = traceback.format_exc(), + + self.__emit_queue_event( + event_name="model_install_error", + payload={ + "source": source, + "error_type": error_type, + "error": error, + }, + ) diff --git a/invokeai/app/services/model_install/__init__.py b/invokeai/app/services/model_install/__init__.py new file mode 100644 index 0000000000..772cd9a9f0 --- /dev/null +++ b/invokeai/app/services/model_install/__init__.py @@ -0,0 +1 @@ +from .model_install_default import ModelInstallService # noqa F401 diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py new file mode 100644 index 0000000000..fcf3ab9d17 --- /dev/null +++ b/invokeai/app/services/model_install/model_install_base.py @@ -0,0 +1,228 @@ +from abc import ABC, abstractmethod +from enum import Enum +from pathlib import Path +from typing import Dict, Optional, Union +from pydantic import BaseModel, Field +from pydantic.networks import AnyHttpUrl + +from invokeai.app.services.model_records import ModelRecordServiceBase +from invokeai.app.services.config import InvokeAIAppConfig +from invokeai.app.services.events import EventServiceBase + + +class InstallStatus(str, Enum): + """State of an install job running in the background.""" + + WAITING = "waiting" # waiting to be dequeued + COMPLETED = "completed" # finished running + ERROR = "error" # terminated with an error message + + +class ModelInstallStatus(BaseModel): + status: InstallStatus = Field(default=InstallStatus.WAITING, description="Current status of install process") # noqa #501 + error: Optional[Exception] = Field(default=None, description="Exception that led to status==ERROR") # noqa #501 + + +class ModelInstallServiceBase(ABC): + """Abstract base class for InvokeAI model installation.""" + + @abstractmethod + def __init__( + self, + config: InvokeAIAppConfig, + store: ModelRecordServiceBase, + event_bus: Optional["EventServiceBase"] = None, + ): + """ + Create ModelInstallService object. + + :param config: Systemwide InvokeAIAppConfig. + :param store: Systemwide ModelConfigStore + :param event_bus: InvokeAI event bus for reporting events to. + """ + pass + + @property + @abstractmethod + def config(self) -> InvokeAIAppConfig: + """Return the app_config used by the installer.""" + pass + + @property + @abstractmethod + def store(self) -> ModelRecordServiceBase: + """Return the storage backend used by the installer.""" + pass + + @abstractmethod + def register_path( + self, + model_path: Union[Path, str], + name: Optional[str] = None, + description: Optional[str] = None, + metadata: Optional[Dict[str, str]] = None, + ) -> str: + """ + Probe and register the model at model_path. + + This keeps the model in its current location. + + :param model_path: Filesystem Path to the model. + :param name: Name for the model (optional) + :param description: Description for the model (optional) + :param metadata: Dict of attributes that will override probed values. + :returns id: The string ID of the registered model. + """ + pass + + @abstractmethod + def install_path( + self, + model_path: Union[Path, str], + name: Optional[str] = None, + description: Optional[str] = None, + metadata: Optional[Dict[str, str]] = None, + )-> str: + """ + Probe, register and install the model in the models directory. + + This moves the model from its current location into + the models directory handled by InvokeAI. + + :param model_path: Filesystem Path to the model. + :param name: Name for the model (optional) + :param description: Description for the model (optional) + :param metadata: Dict of attributes that will override probed values. + :returns id: The string ID of the registered model. + """ + pass + + @abstractmethod + def install_model( + self, + source: Union[str, Path, AnyHttpUrl], + inplace: bool = True, + name: Optional[str] = None, + description: Optional[str] = None, + variant: Optional[str] = None, + subfolder: Optional[str] = None, + metadata: Optional[Dict[str, str]] = None, + access_token: Optional[str] = None, + ) -> ModelInstallStatus: + """Install the indicated model. + + :param source: Either a URL or a HuggingFace repo_id. + + :param inplace: If True, local paths will not be moved into + the models directory, but registered in place (the default). + + :param variant: For HuggingFace models, this optional parameter + specifies which variant to download (e.g. 'fp16') + + :param subfolder: When downloading HF repo_ids this can be used to + specify a subfolder of the HF repository to download from. + + :param metadata: Optional dict. Any fields in this dict + will override corresponding probe fields. Use it to override + `base_type`, `model_type`, `format`, `prediction_type`, `image_size`, + and `ztsnr_training`. + + :param access_token: Access token for use in downloading remote + models. + + This will download the model located at `source`, + probe it, and install it into the models directory. + This call is executed asynchronously in a separate + thread and will issue the following events on the event bus: + + - model_install_started + - model_install_error + - model_install_completed + + The `inplace` flag does not affect the behavior of downloaded + models, which are always moved into the `models` directory. + + The call returns a ModelInstallStatus object which can be + polled to learn the current status and/or error message. + + Variants recognized by HuggingFace currently are: + 1. onnx + 2. openvino + 3. fp16 + 4. None (usually returns fp32 model) + + """ + pass + + @abstractmethod + def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], Optional[str]]: + """ + Wait for all pending installs to complete. + + This will block until all pending downloads have + completed, been cancelled, or errored out. It will + block indefinitely if one or more jobs are in the + paused state. + + It will return a dict that maps the source model + path, URL or repo_id to the ID of the installed model. + """ + pass + + @abstractmethod + def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: + """ + Recursively scan directory for new models and register or install them. + + :param scan_dir: Path to the directory to scan. + :param install: Install if True, otherwise register in place. + :returns list of IDs: Returns list of IDs of models registered/installed + """ + pass + + @abstractmethod + def sync_to_config(self): + """Synchronize models on disk to those in memory.""" + pass + + @abstractmethod + def hash(self, model_path: Union[Path, str]) -> str: + """ + Compute and return the fast hash of the model. + + :param model_path: Path to the model on disk. + :return str: FastHash of the model for use as an ID. + """ + pass + + # The following are internal methods + @abstractmethod + def _create_name(self, model_path: Union[Path, str]) -> str: + """ + Creates a default name for the model. + + :param model_path: Path to the model on disk. + :return str: Model name + """ + pass + + @abstractmethod + def _create_description(self, model_path: Union[Path, str]) -> str: + """ + Creates a default description for the model. + + :param model_path: Path to the model on disk. + :return str: Model description + """ + pass + + @abstractmethod + def _create_id(self, model_path: Union[Path, str], name: Optional[str] = None) -> str: + """ + Creates a unique ID for the model for use with the model records module. # noqa E501 + + :param model_path: Path to the model on disk. + :param name: (optional) non-default name for the model + :return str: Unique ID + """ + pass diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py new file mode 100644 index 0000000000..8ed61b8b36 --- /dev/null +++ b/invokeai/app/services/model_install/model_install_default.py @@ -0,0 +1,78 @@ +from pathlib import Path +from typing import Dict, Optional, Union +from pydantic import BaseModel, Field +from queue import Queue +from pydantic.networks import AnyHttpUrl + +from .model_install_base import InstallStatus, ModelInstallStatus, ModelInstallServiceBase +from invokeai.app.services.config import InvokeAIAppConfig +from invokeai.app.services.model_records import ModelRecordServiceBase +from invokeai.app.services.events import EventServiceBase + +class ModelInstallService(ModelInstallBase, BaseModel): + """class for InvokeAI model installation.""" + + config: InvokeAIAppConfig + store: ModelRecordServiceBase + event_bus: Optional[EventServiceBase] = Field(default=None) + install_queue: Queue = Field(default_factory=Queue) + + def register_path( + self, + model_path: Union[Path, str], + name: Optional[str] = None, + description: Optional[str] = None, + metadata: Optional[Dict[str, str]] = None, + ) -> str: + raise NotImplementedError + + def install_path( + self, + model_path: Union[Path, str], + name: Optional[str] = None, + description: Optional[str] = None, + metadata: Optional[Dict[str, str]] = None, + ) -> str: + raise NotImplementedError + + def install_model( + self, + source: Union[str, Path, AnyHttpUrl], + inplace: bool = True, + name: Optional[str] = None, + description: Optional[str] = None, + variant: Optional[str] = None, + subfolder: Optional[str] = None, + metadata: Optional[Dict[str, str]] = None, + access_token: Optional[str] = None, + ) -> ModelInstallStatus: + raise NotImplementedError + + def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], Optional[str]]: + raise NotImplementedError + + def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: + raise NotImplementedError + + def sync_to_config(self): + raise NotImplementedError + + def hash(self, model_path: Union[Path, str]) -> str: + raise NotImplementedError + + # The following are internal methods + def _create_name(self, model_path: Union[Path, str]) -> str: + model_path = Path(model_path) + if model_path.suffix in {'.safetensors', '.bin', '.pt', '.ckpt'}: + return model_path.stem + else: + return model_path.name + + def _create_description(self, model_path: Union[Path, str]) -> str: + info: ModelProbeInfo = ModelProbe.probe(Path(model_path)) + name: str = name or self._create_name(model_path) + return f"a {info.model_type} model based on {info.base_type}" + + def _create_id(self, model_path: Union[Path, str], name: Optional[str] = None) -> str: + name: str = name or self._create_name(model_path) + raise NotImplementedError From 9ea312611858f95efb295cdd4670a9578d44d4d8 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 20 Nov 2023 23:02:30 -0500 Subject: [PATCH 002/515] start implementation of installer --- invokeai/app/services/events/events_base.py | 10 +-- .../model_install/model_install_base.py | 71 +++++------------ .../model_install/model_install_default.py | 78 ++++++++++++++++--- invokeai/backend/model_manager/config.py | 3 + 4 files changed, 93 insertions(+), 69 deletions(-) diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index bfb982b4c0..3682ec0c6b 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -344,7 +344,8 @@ class EventServiceBase: def emit_model_install_error(self, source:str, - exception: Exception, + error_type: str, + error: str, ) -> None: """ Emitted when an install job encounters an exception. @@ -352,13 +353,6 @@ class EventServiceBase: :param source: Source of the model :param exception: The exception that raised the error """ - - # Revisit: - # it makes more sense to receive an exception and break it out - # into error_type and error here, rather than at the caller's side - error_type = exception.__class__.__name__, - error = traceback.format_exc(), - self.__emit_queue_event( event_name="model_install_error", payload={ diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index fcf3ab9d17..0b5e5cb650 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -1,11 +1,13 @@ +import traceback + from abc import ABC, abstractmethod from enum import Enum from pathlib import Path -from typing import Dict, Optional, Union +from typing import Dict, Optional, Union, List from pydantic import BaseModel, Field from pydantic.networks import AnyHttpUrl -from invokeai.app.services.model_records import ModelRecordServiceBase +from invokeai.app.services.model_records import ModelRecordServiceBase from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events import EventServiceBase @@ -14,13 +16,25 @@ class InstallStatus(str, Enum): """State of an install job running in the background.""" WAITING = "waiting" # waiting to be dequeued + RUNNING = "running" # being processed COMPLETED = "completed" # finished running ERROR = "error" # terminated with an error message -class ModelInstallStatus(BaseModel): - status: InstallStatus = Field(default=InstallStatus.WAITING, description="Current status of install process") # noqa #501 - error: Optional[Exception] = Field(default=None, description="Exception that led to status==ERROR") # noqa #501 +class ModelInstallJob(BaseModel): + """Object that tracks the current status of an install request.""" + + source: Union[str, Path, AnyHttpUrl] = Field(description="Source (URL, repo_id, or local path) of model") + status: InstallStatus = Field(default=InstallStatus.WAITING, description="Current status of install process") + local_path: Optional[Path] = Field(default=None, description="Path to locally-downloaded model") + error_type: Optional[str] = Field(default=None, description="Class name of the exception that led to status==ERROR") + error: Optional[str] = Field(default=None, description="Error traceback") # noqa #501 + + def set_error(self, e: Exception) -> None: + """Record the error and traceback from an exception.""" + self.error_type = e.__class__.__name__ + self.error = traceback.format_exc() + self.status = InstallStatus.ERROR class ModelInstallServiceBase(ABC): @@ -42,18 +56,6 @@ class ModelInstallServiceBase(ABC): """ pass - @property - @abstractmethod - def config(self) -> InvokeAIAppConfig: - """Return the app_config used by the installer.""" - pass - - @property - @abstractmethod - def store(self) -> ModelRecordServiceBase: - """Return the storage backend used by the installer.""" - pass - @abstractmethod def register_path( self, @@ -108,7 +110,7 @@ class ModelInstallServiceBase(ABC): subfolder: Optional[str] = None, metadata: Optional[Dict[str, str]] = None, access_token: Optional[str] = None, - ) -> ModelInstallStatus: + ) -> ModelInstallJob: """Install the indicated model. :param source: Either a URL or a HuggingFace repo_id. @@ -142,7 +144,7 @@ class ModelInstallServiceBase(ABC): The `inplace` flag does not affect the behavior of downloaded models, which are always moved into the `models` directory. - The call returns a ModelInstallStatus object which can be + The call returns a ModelInstallJob object which can be polled to learn the current status and/or error message. Variants recognized by HuggingFace currently are: @@ -195,34 +197,3 @@ class ModelInstallServiceBase(ABC): """ pass - # The following are internal methods - @abstractmethod - def _create_name(self, model_path: Union[Path, str]) -> str: - """ - Creates a default name for the model. - - :param model_path: Path to the model on disk. - :return str: Model name - """ - pass - - @abstractmethod - def _create_description(self, model_path: Union[Path, str]) -> str: - """ - Creates a default description for the model. - - :param model_path: Path to the model on disk. - :return str: Model description - """ - pass - - @abstractmethod - def _create_id(self, model_path: Union[Path, str], name: Optional[str] = None) -> str: - """ - Creates a unique ID for the model for use with the model records module. # noqa E501 - - :param model_path: Path to the model on disk. - :param name: (optional) non-default name for the model - :return str: Unique ID - """ - pass diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 8ed61b8b36..11ca0feaf2 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -1,21 +1,77 @@ +"""Model installation class.""" + +import threading + from pathlib import Path -from typing import Dict, Optional, Union -from pydantic import BaseModel, Field +from typing import Dict, Optional, Union, List from queue import Queue from pydantic.networks import AnyHttpUrl -from .model_install_base import InstallStatus, ModelInstallStatus, ModelInstallServiceBase +from .model_install_base import InstallStatus, ModelInstallJob, ModelInstallServiceBase + +from invokeai.backend.model_management.model_probe import ModelProbeInfo, ModelProbe +from invokeai.backend.model_manager.config import InvalidModelConfigException, DuplicateModelException + from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.model_records import ModelRecordServiceBase from invokeai.app.services.events import EventServiceBase +from invokeai.backend.util.logging import InvokeAILogger -class ModelInstallService(ModelInstallBase, BaseModel): +# marker that the queue is done and that thread should exit +STOP_JOB = ModelInstallJob(source="stop") + + +class ModelInstallService(ModelInstallServiceBase): """class for InvokeAI model installation.""" config: InvokeAIAppConfig store: ModelRecordServiceBase - event_bus: Optional[EventServiceBase] = Field(default=None) - install_queue: Queue = Field(default_factory=Queue) + _event_bus: Optional[EventServiceBase] = None + _install_queue: Queue + + def __init__(self, + config: InvokeAIAppConfig, + store: ModelRecordServiceBase, + install_queue: Optional[Queue] = None, + event_bus: Optional[EventServiceBase] = None + ): + self.config = config + self.store = store + self._install_queue = install_queue or Queue() + self._event_bus = event_bus + self._start_installer_thread() + + def _start_installer_thread(self): + threading.Thread(target=self._install_next_item, daemon=True).start() + + def _install_next_item(self): + done = False + while not done: + job = self._install_queue.get() + if job == STOP_JOB: + done = True + elif job.status == InstallStatus.WAITING: + try: + self._signal_job_running(job) + self.register_path(job.path) + self._signal_job_completed(job) + except (OSError, DuplicateModelException, InvalidModelConfigException) as e: + self._signal_job_errored(job, e) + + def _signal_job_running(self, job: ModelInstallJob): + job.status = InstallStatus.RUNNING + if self._event_bus: + self._event_bus.emit_model_install_started(job.source) + + def _signal_job_completed(self, job: ModelInstallJob): + job.status = InstallStatus.COMPLETED + if self._event_bus: + self._event_bus.emit_model_install_completed(job.source, job.dest) + + def _signal_job_errored(self, job: ModelInstallJob, e: Exception): + job.set_error(e) + if self._event_bus: + self._event_bus.emit_model_install_error(job.source, job.error_type, job.error) def register_path( self, @@ -45,7 +101,7 @@ class ModelInstallService(ModelInstallBase, BaseModel): subfolder: Optional[str] = None, metadata: Optional[Dict[str, str]] = None, access_token: Optional[str] = None, - ) -> ModelInstallStatus: + ) -> ModelInstallJob: raise NotImplementedError def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], Optional[str]]: @@ -68,10 +124,10 @@ class ModelInstallService(ModelInstallBase, BaseModel): else: return model_path.name - def _create_description(self, model_path: Union[Path, str]) -> str: - info: ModelProbeInfo = ModelProbe.probe(Path(model_path)) - name: str = name or self._create_name(model_path) - return f"a {info.model_type} model based on {info.base_type}" + def _create_description(self, model_path: Union[Path, str], info: Optional[ModelProbeInfo] = None) -> str: + info = info or ModelProbe.probe(Path(model_path)) + name: str = self._create_name(model_path) + return f"a {info.model_type} model {name} based on {info.base_type}" def _create_id(self, model_path: Union[Path, str], name: Optional[str] = None) -> str: name: str = name or self._create_name(model_path) diff --git a/invokeai/backend/model_manager/config.py b/invokeai/backend/model_manager/config.py index 457e6b0823..d5fcbf0cd2 100644 --- a/invokeai/backend/model_manager/config.py +++ b/invokeai/backend/model_manager/config.py @@ -29,6 +29,9 @@ from typing_extensions import Annotated class InvalidModelConfigException(Exception): """Exception for when config parser doesn't recognized this combination of model type and format.""" +class DuplicateModelException(Exception): + """Exception for when a duplicate model is detected during installation.""" + class BaseModelType(str, Enum): """Base model type.""" From 4aab728590d3be7f2b3473f2f2558734c2248f94 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Wed, 22 Nov 2023 22:29:02 -0500 Subject: [PATCH 003/515] move name/description logic into model_probe.py --- .../services/model_install/model_install_default.py | 9 ++++++--- invokeai/backend/model_management/model_probe.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 11ca0feaf2..4c21759c76 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -16,6 +16,7 @@ from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.model_records import ModelRecordServiceBase from invokeai.app.services.events import EventServiceBase from invokeai.backend.util.logging import InvokeAILogger +from invokeai.backend.model_manager.hash import FastModelHash # marker that the queue is done and that thread should exit STOP_JOB = ModelInstallJob(source="stop") @@ -80,7 +81,9 @@ class ModelInstallService(ModelInstallServiceBase): description: Optional[str] = None, metadata: Optional[Dict[str, str]] = None, ) -> str: - raise NotImplementedError + model_path = Path(model_path) + info: ModelProbeInfo = self._probe_model(model_path, metadata) + return self._register(model_path, info) def install_path( self, @@ -105,7 +108,7 @@ class ModelInstallService(ModelInstallServiceBase): raise NotImplementedError def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], Optional[str]]: - raise NotImplementedError + self._install_queue.join() def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: raise NotImplementedError @@ -114,7 +117,7 @@ class ModelInstallService(ModelInstallServiceBase): raise NotImplementedError def hash(self, model_path: Union[Path, str]) -> str: - raise NotImplementedError + return FastModelHash.hash(model_path) # The following are internal methods def _create_name(self, model_path: Union[Path, str]) -> str: diff --git a/invokeai/backend/model_management/model_probe.py b/invokeai/backend/model_management/model_probe.py index 83d3d610c3..c5b5732fd7 100644 --- a/invokeai/backend/model_management/model_probe.py +++ b/invokeai/backend/model_management/model_probe.py @@ -32,6 +32,8 @@ class ModelProbeInfo(object): upcast_attention: bool format: Literal["diffusers", "checkpoint", "lycoris", "olive", "onnx"] image_size: int + name: Optional[str] = None + description: Optional[str] = None class ProbeBase(object): @@ -112,12 +114,16 @@ class ModelProbe(object): base_type = probe.get_base_type() variant_type = probe.get_variant_type() prediction_type = probe.get_scheduler_prediction_type() + name = cls.get_model_name(model_path) + description = f"{base_type.value} {model_type.value} model {name}" format = probe.get_format() model_info = ModelProbeInfo( model_type=model_type, base_type=base_type, variant_type=variant_type, prediction_type=prediction_type, + name = name, + description = description, upcast_attention=( base_type == BaseModelType.StableDiffusion2 and prediction_type == SchedulerPredictionType.VPrediction @@ -141,6 +147,13 @@ class ModelProbe(object): return model_info + @classmethod + def get_model_name(cls, model_path: Path) -> str: + if model_path.suffix in {'.safetensors', '.bin', '.pt', '.ckpt'}: + return model_path.stem + else: + return model_path.name + @classmethod def get_model_type_from_checkpoint(cls, model_path: Path, checkpoint: dict) -> ModelType: if model_path.suffix not in (".bin", ".pt", ".ckpt", ".safetensors", ".pth"): From 80bc9be3abf56765b9dec1c921f367ab17638221 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Thu, 23 Nov 2023 23:15:32 -0500 Subject: [PATCH 004/515] make install_path and register_path work; refactor model probing --- .../app/services/config/config_default.py | 8 +- invokeai/app/services/events/events_base.py | 3 +- .../app/services/model_install/__init__.py | 1 + .../model_install/model_install_base.py | 90 ++- .../model_install/model_install_default.py | 214 ++++-- .../app/services/model_records/__init__.py | 8 + invokeai/backend/model_manager/config.py | 6 +- invokeai/backend/model_manager/probe.py | 645 ++++++++++++++++++ pyproject.toml | 2 + scripts/probe-model.py | 2 +- .../model_install/test_model_install.py | 89 +++ .../stable-diffusion/v1-inference.yaml | 79 +++ .../root/models/placeholder | 1 + .../test_embedding.safetensors | Bin 0 -> 15440 bytes 14 files changed, 1027 insertions(+), 121 deletions(-) create mode 100644 invokeai/backend/model_manager/probe.py create mode 100644 tests/app/services/model_install/test_model_install.py create mode 100644 tests/app/services/model_install/test_model_install/root/configs/stable-diffusion/v1-inference.yaml create mode 100644 tests/app/services/model_install/test_model_install/root/models/placeholder create mode 100644 tests/app/services/model_install/test_model_install/test_embedding.safetensors diff --git a/invokeai/app/services/config/config_default.py b/invokeai/app/services/config/config_default.py index 30c6694ddb..b8a3c3d7a3 100644 --- a/invokeai/app/services/config/config_default.py +++ b/invokeai/app/services/config/config_default.py @@ -173,7 +173,7 @@ from __future__ import annotations import os from pathlib import Path -from typing import ClassVar, Dict, List, Literal, Optional, Union, get_type_hints +from typing import Any, ClassVar, Dict, List, Literal, Optional, Union, get_type_hints from omegaconf import DictConfig, OmegaConf from pydantic import Field, TypeAdapter @@ -336,10 +336,8 @@ class InvokeAIAppConfig(InvokeAISettings): ) @classmethod - def get_config(cls, **kwargs) -> InvokeAIAppConfig: - """ - This returns a singleton InvokeAIAppConfig configuration object. - """ + def get_config(cls, **kwargs: Dict[str, Any]) -> InvokeAIAppConfig: + """Return a singleton InvokeAIAppConfig configuration object.""" if ( cls.singleton_config is None or type(cls.singleton_config) is not cls diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index 3682ec0c6b..d55b12138d 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -1,6 +1,5 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) -import traceback from typing import Any, Optional @@ -343,7 +342,7 @@ class EventServiceBase: ) def emit_model_install_error(self, - source:str, + source: str, error_type: str, error: str, ) -> None: diff --git a/invokeai/app/services/model_install/__init__.py b/invokeai/app/services/model_install/__init__.py index 772cd9a9f0..22e96fd2a0 100644 --- a/invokeai/app/services/model_install/__init__.py +++ b/invokeai/app/services/model_install/__init__.py @@ -1 +1,2 @@ +from .model_install_base import ModelInstallServiceBase # noqa F401 from .model_install_default import ModelInstallService # noqa F401 diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 0b5e5cb650..06e2f926fb 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -1,15 +1,15 @@ import traceback - from abc import ABC, abstractmethod from enum import Enum from pathlib import Path -from typing import Dict, Optional, Union, List +from typing import Any, Dict, List, Optional, Union + from pydantic import BaseModel, Field from pydantic.networks import AnyHttpUrl -from invokeai.app.services.model_records import ModelRecordServiceBase from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events import EventServiceBase +from invokeai.app.services.model_records import ModelRecordServiceBase class InstallStatus(str, Enum): @@ -27,8 +27,8 @@ class ModelInstallJob(BaseModel): source: Union[str, Path, AnyHttpUrl] = Field(description="Source (URL, repo_id, or local path) of model") status: InstallStatus = Field(default=InstallStatus.WAITING, description="Current status of install process") local_path: Optional[Path] = Field(default=None, description="Path to locally-downloaded model") - error_type: Optional[str] = Field(default=None, description="Class name of the exception that led to status==ERROR") - error: Optional[str] = Field(default=None, description="Error traceback") # noqa #501 + error_type: str = Field(default="", description="Class name of the exception that led to status==ERROR") + error: str = Field(default="", description="Error traceback") # noqa #501 def set_error(self, e: Exception) -> None: """Record the error and traceback from an exception.""" @@ -43,8 +43,8 @@ class ModelInstallServiceBase(ABC): @abstractmethod def __init__( self, - config: InvokeAIAppConfig, - store: ModelRecordServiceBase, + app_config: InvokeAIAppConfig, + record_store: ModelRecordServiceBase, event_bus: Optional["EventServiceBase"] = None, ): """ @@ -54,15 +54,22 @@ class ModelInstallServiceBase(ABC): :param store: Systemwide ModelConfigStore :param event_bus: InvokeAI event bus for reporting events to. """ - pass + + @property + @abstractmethod + def app_config(self) -> InvokeAIAppConfig: + """Return the appConfig object associated with the installer.""" + + @property + @abstractmethod + def record_store(self) -> ModelRecordServiceBase: + """Return the ModelRecoreService object associated with the installer.""" @abstractmethod def register_path( self, model_path: Union[Path, str], - name: Optional[str] = None, - description: Optional[str] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[Dict[str, Any]] = None, ) -> str: """ Probe and register the model at model_path. @@ -70,21 +77,32 @@ class ModelInstallServiceBase(ABC): This keeps the model in its current location. :param model_path: Filesystem Path to the model. - :param name: Name for the model (optional) - :param description: Description for the model (optional) - :param metadata: Dict of attributes that will override probed values. + :param metadata: Dict of attributes that will override autoassigned values. :returns id: The string ID of the registered model. """ - pass + + @abstractmethod + def unregister(self, key: str) -> None: + """Remove model with indicated key from the database.""" + + @abstractmethod + def delete(self, key: str) -> None: + """Remove model with indicated key from the database and delete weight files from disk.""" + + @abstractmethod + def conditionally_delete(self, key: str) -> None: + """ + Remove model with indicated key from the database + and conditeionally delete weight files from disk + if they reside within InvokeAI's models directory. + """ @abstractmethod def install_path( self, model_path: Union[Path, str], - name: Optional[str] = None, - description: Optional[str] = None, - metadata: Optional[Dict[str, str]] = None, - )-> str: + metadata: Optional[Dict[str, Any]] = None, + ) -> str: """ Probe, register and install the model in the models directory. @@ -92,20 +110,15 @@ class ModelInstallServiceBase(ABC): the models directory handled by InvokeAI. :param model_path: Filesystem Path to the model. - :param name: Name for the model (optional) - :param description: Description for the model (optional) - :param metadata: Dict of attributes that will override probed values. + :param metadata: Dict of attributes that will override autoassigned values. :returns id: The string ID of the registered model. """ - pass @abstractmethod - def install_model( + def import_model( self, source: Union[str, Path, AnyHttpUrl], inplace: bool = True, - name: Optional[str] = None, - description: Optional[str] = None, variant: Optional[str] = None, subfolder: Optional[str] = None, metadata: Optional[Dict[str, str]] = None, @@ -125,9 +138,9 @@ class ModelInstallServiceBase(ABC): specify a subfolder of the HF repository to download from. :param metadata: Optional dict. Any fields in this dict - will override corresponding probe fields. Use it to override - `base_type`, `model_type`, `format`, `prediction_type`, `image_size`, - and `ztsnr_training`. + will override corresponding autoassigned probe fields. Use it to override + `name`, `description`, `base_type`, `model_type`, `format`, + `prediction_type`, `image_size`, and/or `ztsnr_training`. :param access_token: Access token for use in downloading remote models. @@ -154,10 +167,9 @@ class ModelInstallServiceBase(ABC): 4. None (usually returns fp32 model) """ - pass @abstractmethod - def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], Optional[str]]: + def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], ModelInstallJob]: """ Wait for all pending installs to complete. @@ -169,7 +181,6 @@ class ModelInstallServiceBase(ABC): It will return a dict that maps the source model path, URL or repo_id to the ID of the installed model. """ - pass @abstractmethod def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: @@ -180,20 +191,7 @@ class ModelInstallServiceBase(ABC): :param install: Install if True, otherwise register in place. :returns list of IDs: Returns list of IDs of models registered/installed """ - pass @abstractmethod - def sync_to_config(self): + def sync_to_config(self) -> None: """Synchronize models on disk to those in memory.""" - pass - - @abstractmethod - def hash(self, model_path: Union[Path, str]) -> str: - """ - Compute and return the fast hash of the model. - - :param model_path: Path to the model on disk. - :return str: FastHash of the model for use as an ID. - """ - pass - diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 4c21759c76..45ad441903 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -1,22 +1,28 @@ """Model installation class.""" import threading - +from hashlib import sha256 from pathlib import Path -from typing import Dict, Optional, Union, List from queue import Queue +from random import randbytes +from shutil import move, rmtree +from typing import Any, Dict, List, Optional, Union + from pydantic.networks import AnyHttpUrl -from .model_install_base import InstallStatus, ModelInstallJob, ModelInstallServiceBase - -from invokeai.backend.model_management.model_probe import ModelProbeInfo, ModelProbe -from invokeai.backend.model_manager.config import InvalidModelConfigException, DuplicateModelException - from invokeai.app.services.config import InvokeAIAppConfig -from invokeai.app.services.model_records import ModelRecordServiceBase from invokeai.app.services.events import EventServiceBase -from invokeai.backend.util.logging import InvokeAILogger +from invokeai.app.services.model_records import ModelRecordServiceBase +from invokeai.backend.model_manager.config import ( + AnyModelConfig, + DuplicateModelException, + InvalidModelConfigException, +) from invokeai.backend.model_manager.hash import FastModelHash +from invokeai.backend.model_manager.probe import ModelProbe +from invokeai.backend.util.logging import InvokeAILogger + +from .model_install_base import InstallStatus, ModelInstallJob, ModelInstallServiceBase # marker that the queue is done and that thread should exit STOP_JOB = ModelInstallJob(source="stop") @@ -25,113 +31,195 @@ STOP_JOB = ModelInstallJob(source="stop") class ModelInstallService(ModelInstallServiceBase): """class for InvokeAI model installation.""" - config: InvokeAIAppConfig - store: ModelRecordServiceBase + _app_config: InvokeAIAppConfig + _record_store: ModelRecordServiceBase _event_bus: Optional[EventServiceBase] = None - _install_queue: Queue + _install_queue: Queue[ModelInstallJob] + _install_jobs: Dict[Union[str, Path, AnyHttpUrl], ModelInstallJob] + _logger: InvokeAILogger def __init__(self, - config: InvokeAIAppConfig, - store: ModelRecordServiceBase, - install_queue: Optional[Queue] = None, + app_config: InvokeAIAppConfig, + record_store: ModelRecordServiceBase, event_bus: Optional[EventServiceBase] = None ): - self.config = config - self.store = store - self._install_queue = install_queue or Queue() + """ + Initialize the installer object. + + :param app_config: InvokeAIAppConfig object + :param record_store: Previously-opened ModelRecordService database + :param event_bus: Optional EventService object + """ + self._app_config = app_config + self._record_store = record_store + self._install_queue = Queue() self._event_bus = event_bus + self._logger = InvokeAILogger.get_logger(name=self.__class__.__name__) self._start_installer_thread() - def _start_installer_thread(self): + @property + def app_config(self) -> InvokeAIAppConfig: # noqa D102 + return self._app_config + + @property + def record_store(self) -> ModelRecordServiceBase: # noqa D102 + return self._record_store + + def _start_installer_thread(self) -> None: threading.Thread(target=self._install_next_item, daemon=True).start() - def _install_next_item(self): + def _install_next_item(self) -> None: done = False while not done: job = self._install_queue.get() if job == STOP_JOB: done = True elif job.status == InstallStatus.WAITING: + assert job.local_path is not None try: self._signal_job_running(job) - self.register_path(job.path) + self.register_path(job.local_path) self._signal_job_completed(job) - except (OSError, DuplicateModelException, InvalidModelConfigException) as e: - self._signal_job_errored(job, e) + except (OSError, DuplicateModelException, InvalidModelConfigException) as excp: + self._signal_job_errored(job, excp) - def _signal_job_running(self, job: ModelInstallJob): + def _signal_job_running(self, job: ModelInstallJob) -> None: job.status = InstallStatus.RUNNING if self._event_bus: - self._event_bus.emit_model_install_started(job.source) + self._event_bus.emit_model_install_started(str(job.source)) - def _signal_job_completed(self, job: ModelInstallJob): + def _signal_job_completed(self, job: ModelInstallJob) -> None: job.status = InstallStatus.COMPLETED if self._event_bus: - self._event_bus.emit_model_install_completed(job.source, job.dest) + assert job.local_path is not None + self._event_bus.emit_model_install_completed(str(job.source), job.local_path.as_posix()) - def _signal_job_errored(self, job: ModelInstallJob, e: Exception): - job.set_error(e) + def _signal_job_errored(self, job: ModelInstallJob, excp: Exception) -> None: + job.set_error(excp) if self._event_bus: - self._event_bus.emit_model_install_error(job.source, job.error_type, job.error) + self._event_bus.emit_model_install_error(str(job.source), job.error_type, job.error) def register_path( self, model_path: Union[Path, str], - name: Optional[str] = None, - description: Optional[str] = None, - metadata: Optional[Dict[str, str]] = None, - ) -> str: + metadata: Optional[Dict[str, Any]] = None, + ) -> str: # noqa D102 model_path = Path(model_path) - info: ModelProbeInfo = self._probe_model(model_path, metadata) - return self._register(model_path, info) + metadata = metadata or {} + if metadata.get('source') is None: + metadata['source'] = model_path.as_posix() + return self._register(model_path, metadata) def install_path( self, model_path: Union[Path, str], - name: Optional[str] = None, - description: Optional[str] = None, - metadata: Optional[Dict[str, str]] = None, - ) -> str: - raise NotImplementedError + metadata: Optional[Dict[str, Any]] = None, + ) -> str: # noqa D102 + model_path = Path(model_path) + metadata = metadata or {} + if metadata.get('source') is None: + metadata['source'] = model_path.as_posix() - def install_model( + info: AnyModelConfig = self._probe_model(Path(model_path), metadata) + + old_hash = info.original_hash + dest_path = self.app_config.models_path / info.base.value / info.type.value / model_path.name + new_path = self._move_model(model_path, dest_path) + new_hash = FastModelHash.hash(new_path) + assert new_hash == old_hash, f"{model_path}: Model hash changed during installation, possibly corrupted." + + return self._register( + new_path, + metadata, + info, + ) + + def import_model( self, source: Union[str, Path, AnyHttpUrl], inplace: bool = True, - name: Optional[str] = None, - description: Optional[str] = None, variant: Optional[str] = None, subfolder: Optional[str] = None, metadata: Optional[Dict[str, str]] = None, access_token: Optional[str] = None, - ) -> ModelInstallJob: + ) -> ModelInstallJob: # noqa D102 raise NotImplementedError - def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], Optional[str]]: + def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], ModelInstallJob]: # noqa D102 self._install_queue.join() + return self._install_jobs - def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: + def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: # noqa D102 raise NotImplementedError - def sync_to_config(self): + def sync_to_config(self) -> None: # noqa D102 raise NotImplementedError - def hash(self, model_path: Union[Path, str]) -> str: - return FastModelHash.hash(model_path) + def unregister(self, key: str) -> None: # noqa D102 + self.record_store.del_model(key) - # The following are internal methods - def _create_name(self, model_path: Union[Path, str]) -> str: - model_path = Path(model_path) - if model_path.suffix in {'.safetensors', '.bin', '.pt', '.ckpt'}: - return model_path.stem + def delete(self, key: str) -> None: # noqa D102 + model = self.record_store.get_model(key) + path = self.app_config.models_path / model.path + if path.is_dir(): + rmtree(path) else: - return model_path.name + path.unlink() + self.unregister(key) - def _create_description(self, model_path: Union[Path, str], info: Optional[ModelProbeInfo] = None) -> str: - info = info or ModelProbe.probe(Path(model_path)) - name: str = self._create_name(model_path) - return f"a {info.model_type} model {name} based on {info.base_type}" + def conditionally_delete(self, key: str) -> None: # noqa D102 + """Unregister the model. Delete its files only if they are within our models directory.""" + model = self.record_store.get_model(key) + models_dir = self.app_config.models_path + model_path = models_dir / model.path + if model_path.is_relative_to(models_dir): + self.delete(key) + else: + self.unregister(key) - def _create_id(self, model_path: Union[Path, str], name: Optional[str] = None) -> str: - name: str = name or self._create_name(model_path) - raise NotImplementedError + def _move_model(self, old_path: Path, new_path: Path) -> Path: + if old_path == new_path: + return old_path + + new_path.parent.mkdir(parents=True, exist_ok=True) + + # if path already exists then we jigger the name to make it unique + counter: int = 1 + while new_path.exists(): + path = new_path.with_stem(new_path.stem + f"_{counter:02d}") + if not path.exists(): + new_path = path + counter += 1 + move(old_path, new_path) + return new_path + + def _probe_model(self, model_path: Path, metadata: Optional[Dict[str, Any]] = None) -> AnyModelConfig: + info: AnyModelConfig = ModelProbe.probe(Path(model_path)) + if metadata: # used to override probe fields + for key, value in metadata.items(): + setattr(info, key, value) + return info + + def _create_key(self) -> str: + return sha256(randbytes(100)).hexdigest()[0:32] + + def _register(self, + model_path: Path, + metadata: Optional[Dict[str, Any]] = None, + info: Optional[AnyModelConfig] = None) -> str: + + info = info or ModelProbe.probe(model_path, metadata) + key = self._create_key() + + model_path = model_path.absolute() + if model_path.is_relative_to(self.app_config.models_path): + model_path = model_path.relative_to(self.app_config.models_path) + + info.path = model_path.as_posix() + + # add 'main' specific fields + if hasattr(info, 'config'): + # make config relative to our root + info.config = self.app_config.legacy_conf_dir / info.config + self.record_store.add_model(key, info) + return key diff --git a/invokeai/app/services/model_records/__init__.py b/invokeai/app/services/model_records/__init__.py index 05005d4227..a7ebacee67 100644 --- a/invokeai/app/services/model_records/__init__.py +++ b/invokeai/app/services/model_records/__init__.py @@ -6,3 +6,11 @@ from .model_records_base import ( # noqa F401 UnknownModelException, ) from .model_records_sql import ModelRecordServiceSQL # noqa F401 + +__all__ = [ + 'ModelRecordServiceBase', + 'ModelRecordServiceSQL', + 'DuplicateModelException', + 'InvalidModelException', + 'UnknownModelException', +] diff --git a/invokeai/backend/model_manager/config.py b/invokeai/backend/model_manager/config.py index d5fcbf0cd2..646d82edf3 100644 --- a/invokeai/backend/model_manager/config.py +++ b/invokeai/backend/model_manager/config.py @@ -23,7 +23,7 @@ from enum import Enum from typing import Literal, Optional, Type, Union from pydantic import BaseModel, ConfigDict, Field, TypeAdapter -from typing_extensions import Annotated +from typing_extensions import Annotated, Any, Dict class InvalidModelConfigException(Exception): @@ -125,7 +125,7 @@ class ModelConfigBase(BaseModel): validate_assignment=True, ) - def update(self, attributes: dict): + def update(self, attributes: Dict[str, Any]) -> None: """Update the object with fields in dict.""" for key, value in attributes.items(): setattr(self, key, value) # may raise a validation error @@ -198,8 +198,6 @@ class MainCheckpointConfig(_CheckpointConfig, _MainConfig): """Model config for main checkpoint models.""" type: Literal[ModelType.Main] = ModelType.Main - # Note that we do not need prediction_type or upcast_attention here - # because they are provided in the checkpoint's own config file. class MainDiffusersConfig(_DiffusersConfig, _MainConfig): diff --git a/invokeai/backend/model_manager/probe.py b/invokeai/backend/model_manager/probe.py new file mode 100644 index 0000000000..87aefe87c0 --- /dev/null +++ b/invokeai/backend/model_manager/probe.py @@ -0,0 +1,645 @@ +import json +import re +from pathlib import Path +from typing import Any, Dict, Literal, Optional, Union + +import safetensors.torch +import torch +from picklescan.scanner import scan_file_path + +from invokeai.backend.model_management.models.base import read_checkpoint_meta +from invokeai.backend.model_management.models.ip_adapter import IPAdapterModelFormat +from invokeai.backend.model_management.util import lora_token_vector_length +from invokeai.backend.util.util import SilenceWarnings + +from .config import ( + AnyModelConfig, + BaseModelType, + InvalidModelConfigException, + ModelConfigFactory, + ModelFormat, + ModelType, + ModelVariantType, + SchedulerPredictionType, +) +from .hash import FastModelHash + +CkptType = Dict[str, Any] + +LEGACY_CONFIGS: Dict[BaseModelType, Dict[ModelVariantType, Union[str, Dict[SchedulerPredictionType, str]]]] = { + BaseModelType.StableDiffusion1: { + ModelVariantType.Normal: "v1-inference.yaml", + ModelVariantType.Inpaint: "v1-inpainting-inference.yaml", + }, + BaseModelType.StableDiffusion2: { + ModelVariantType.Normal: { + SchedulerPredictionType.Epsilon: "v2-inference.yaml", + SchedulerPredictionType.VPrediction: "v2-inference-v.yaml", + }, + ModelVariantType.Inpaint: { + SchedulerPredictionType.Epsilon: "v2-inpainting-inference.yaml", + SchedulerPredictionType.VPrediction: "v2-inpainting-inference-v.yaml", + }, + }, + BaseModelType.StableDiffusionXL: { + ModelVariantType.Normal: "sd_xl_base.yaml", + }, + BaseModelType.StableDiffusionXLRefiner: { + ModelVariantType.Normal: "sd_xl_refiner.yaml", + }, +} + +class ProbeBase(object): + """Base class for probes.""" + + def __init__(self, model_path: Path): + self.model_path = model_path + + def get_base_type(self) -> BaseModelType: + """Get model base type.""" + raise NotImplementedError + + def get_format(self) -> ModelFormat: + """Get model file format.""" + raise NotImplementedError + + def get_variant_type(self) -> Optional[ModelVariantType]: + """Get model variant type.""" + return None + + def get_scheduler_prediction_type(self) -> Optional[SchedulerPredictionType]: + """Get model scheduler prediction type.""" + return None + +class ModelProbe(object): + PROBES: Dict[str, Dict[ModelType, type[ProbeBase]]] = { + "diffusers": {}, + "checkpoint": {}, + "onnx": {}, + } + + CLASS2TYPE = { + "StableDiffusionPipeline": ModelType.Main, + "StableDiffusionInpaintPipeline": ModelType.Main, + "StableDiffusionXLPipeline": ModelType.Main, + "StableDiffusionXLImg2ImgPipeline": ModelType.Main, + "StableDiffusionXLInpaintPipeline": ModelType.Main, + "LatentConsistencyModelPipeline": ModelType.Main, + "AutoencoderKL": ModelType.Vae, + "AutoencoderTiny": ModelType.Vae, + "ControlNetModel": ModelType.ControlNet, + "CLIPVisionModelWithProjection": ModelType.CLIPVision, + "T2IAdapter": ModelType.T2IAdapter, + } + + @classmethod + def register_probe( + cls, format: Literal["diffusers", "checkpoint", "onnx"], model_type: ModelType, probe_class: type[ProbeBase] + ) -> None: + cls.PROBES[format][model_type] = probe_class + + @classmethod + def heuristic_probe( + cls, + model_path: Path, + fields: Optional[Dict[str, Any]] = None, + ) -> AnyModelConfig: + return cls.probe(model_path, fields) + + @classmethod + def probe( + cls, + model_path: Path, + fields: Optional[Dict[str, Any]] = None, + ) -> AnyModelConfig: + """ + Probe the model at model_path and return sufficient information about it + to place it somewhere in the models directory hierarchy. If the model is + already loaded into memory, you may provide it as model in order to avoid + opening it a second time. The prediction_type_helper callable is a function that receives + the path to the model and returns the SchedulerPredictionType. + """ + if fields is None: + fields = {} + + format_type = ModelFormat.Diffusers if model_path.is_dir() else ModelFormat.Checkpoint + model_info = None + model_type = None + if format_type == "diffusers": + model_type = cls.get_model_type_from_folder(model_path) + else: + model_type = cls.get_model_type_from_checkpoint(model_path) + print(f'DEBUG: model_type={model_type}') + format_type = ModelFormat.Onnx if model_type == ModelType.ONNX else format_type + + probe_class = cls.PROBES[format_type].get(model_type) + if not probe_class: + raise InvalidModelConfigException(f"Unhandled combination of {format_type} and {model_type}") + + hash = FastModelHash.hash(model_path) + probe = probe_class(model_path) + + fields['path'] = model_path.as_posix() + fields['type'] = fields.get('type') or model_type + fields['base'] = fields.get('base') or probe.get_base_type() + fields['variant'] = fields.get('variant') or probe.get_variant_type() + fields['prediction_type'] = fields.get('prediction_type') or probe.get_scheduler_prediction_type() + fields['name'] = fields.get('name') or cls.get_model_name(model_path) + fields['description'] = fields.get('description') or f"{fields['base'].value} {fields['type'].value} model {fields['name']}" + fields['format'] = fields.get('format') or probe.get_format() + fields['original_hash'] = fields.get('original_hash') or hash + fields['current_hash'] = fields.get('current_hash') or hash + + # additional work for main models + if fields['type'] == ModelType.Main: + if fields['format'] == ModelFormat.Checkpoint: + fields['config'] = cls._get_config_path(model_path, fields['base'], fields['variant'], fields['prediction_type']).as_posix() + elif fields['format'] in [ModelFormat.Onnx, ModelFormat.Olive, ModelFormat.Diffusers]: + fields['upcast_attention'] = fields.get('upcast_attention') or ( + fields['base'] == BaseModelType.StableDiffusion2 and fields['prediction_type'] == SchedulerPredictionType.VPrediction + ) + + model_info = ModelConfigFactory.make_config(fields) + return model_info + + @classmethod + def get_model_name(cls, model_path: Path) -> str: + if model_path.suffix in {'.safetensors', '.bin', '.pt', '.ckpt'}: + return model_path.stem + else: + return model_path.name + + @classmethod + def get_model_type_from_checkpoint(cls, model_path: Path, checkpoint: Optional[CkptType] = None) -> ModelType: + if model_path.suffix not in (".bin", ".pt", ".ckpt", ".safetensors", ".pth"): + raise InvalidModelConfigException(f"{model_path}: unrecognized suffix") + + if model_path.name == "learned_embeds.bin": + return ModelType.TextualInversion + + ckpt = checkpoint if checkpoint else read_checkpoint_meta(model_path, scan=True) + ckpt = ckpt.get("state_dict", ckpt) + + for key in ckpt.keys(): + if any(key.startswith(v) for v in {"cond_stage_model.", "first_stage_model.", "model.diffusion_model."}): + return ModelType.Main + elif any(key.startswith(v) for v in {"encoder.conv_in", "decoder.conv_in"}): + return ModelType.Vae + elif any(key.startswith(v) for v in {"lora_te_", "lora_unet_"}): + return ModelType.Lora + elif any(key.endswith(v) for v in {"to_k_lora.up.weight", "to_q_lora.down.weight"}): + return ModelType.Lora + elif any(key.startswith(v) for v in {"control_model", "input_blocks"}): + return ModelType.ControlNet + elif key in {"emb_params", "string_to_param"}: + return ModelType.TextualInversion + + else: + # diffusers-ti + if len(ckpt) < 10 and all(isinstance(v, torch.Tensor) for v in ckpt.values()): + return ModelType.TextualInversion + + raise InvalidModelConfigException(f"Unable to determine model type for {model_path}") + + @classmethod + def get_model_type_from_folder(cls, folder_path: Path) -> ModelType: + """Get the model type of a hugging-face style folder.""" + class_name = None + error_hint = None + for suffix in ["bin", "safetensors"]: + if (folder_path / f"learned_embeds.{suffix}").exists(): + return ModelType.TextualInversion + if (folder_path / f"pytorch_lora_weights.{suffix}").exists(): + return ModelType.Lora + if (folder_path / "unet/model.onnx").exists(): + return ModelType.ONNX + if (folder_path / "image_encoder.txt").exists(): + return ModelType.IPAdapter + + i = folder_path / "model_index.json" + c = folder_path / "config.json" + config_path = i if i.exists() else c if c.exists() else None + + if config_path: + with open(config_path, "r") as file: + conf = json.load(file) + if "_class_name" in conf: + class_name = conf["_class_name"] + elif "architectures" in conf: + class_name = conf["architectures"][0] + else: + class_name = None + else: + error_hint = f"No model_index.json or config.json found in {folder_path}." + + if class_name and (type := cls.CLASS2TYPE.get(class_name)): + return type + else: + error_hint = f"class {class_name} is not one of the supported classes [{', '.join(cls.CLASS2TYPE.keys())}]" + + # give up + raise InvalidModelConfigException( + f"Unable to determine model type for {folder_path}" + (f"; {error_hint}" if error_hint else "") + ) + + @classmethod + def _get_config_path(cls, + model_path: Path, + base_type: BaseModelType, + variant: ModelVariantType, + prediction_type: SchedulerPredictionType) -> Path: + # look for a YAML file adjacent to the model file first + possible_conf = model_path.with_suffix(".yaml") + if possible_conf.exists(): + return possible_conf.absolute() + config_file = LEGACY_CONFIGS[base_type][variant] + if isinstance(config_file, dict): # need another tier for sd-2.x models + config_file = config_file[prediction_type] + return Path(config_file) + + @classmethod + def _scan_and_load_checkpoint(cls, model_path: Path) -> CkptType: + with SilenceWarnings(): + if model_path.suffix.endswith((".ckpt", ".pt", ".bin")): + cls._scan_model(model_path.name, model_path) + model = torch.load(model_path) + assert isinstance(model, dict) + return model + else: + return safetensors.torch.load_file(model_path) + + @classmethod + def _scan_model(cls, model_name: str, checkpoint: Path) -> None: + """ + Apply picklescanner to the indicated checkpoint and issue a warning + and option to exit if an infected file is identified. + """ + # scan model + scan_result = scan_file_path(checkpoint) + if scan_result.infected_files != 0: + raise Exception("The model {model_name} is potentially infected by malware. Aborting import.") + + +# ##################################################3 +# Checkpoint probing +# ##################################################3 + +class CheckpointProbeBase(ProbeBase): + def __init__(self, model_path: Path): + super().__init__(model_path) + self.checkpoint = ModelProbe._scan_and_load_checkpoint(model_path) + + def get_format(self) -> ModelFormat: + return ModelFormat("checkpoint") + + def get_variant_type(self) -> ModelVariantType: + model_type = ModelProbe.get_model_type_from_checkpoint(self.model_path, self.checkpoint) + if model_type != ModelType.Main: + return ModelVariantType.Normal + state_dict = self.checkpoint.get("state_dict") or self.checkpoint + in_channels = state_dict["model.diffusion_model.input_blocks.0.0.weight"].shape[1] + if in_channels == 9: + return ModelVariantType.Inpaint + elif in_channels == 5: + return ModelVariantType.Depth + elif in_channels == 4: + return ModelVariantType.Normal + else: + raise InvalidModelConfigException( + f"Cannot determine variant type (in_channels={in_channels}) at {self.model_path}" + ) + + +class PipelineCheckpointProbe(CheckpointProbeBase): + def get_base_type(self) -> BaseModelType: + checkpoint = self.checkpoint + state_dict = self.checkpoint.get("state_dict") or checkpoint + key_name = "model.diffusion_model.input_blocks.2.1.transformer_blocks.0.attn2.to_k.weight" + if key_name in state_dict and state_dict[key_name].shape[-1] == 768: + return BaseModelType.StableDiffusion1 + if key_name in state_dict and state_dict[key_name].shape[-1] == 1024: + return BaseModelType.StableDiffusion2 + key_name = "model.diffusion_model.input_blocks.4.1.transformer_blocks.0.attn2.to_k.weight" + if key_name in state_dict and state_dict[key_name].shape[-1] == 2048: + return BaseModelType.StableDiffusionXL + elif key_name in state_dict and state_dict[key_name].shape[-1] == 1280: + return BaseModelType.StableDiffusionXLRefiner + else: + raise InvalidModelConfigException("Cannot determine base type") + + def get_scheduler_prediction_type(self) -> SchedulerPredictionType: + """Return model prediction type.""" + type = self.get_base_type() + if type == BaseModelType.StableDiffusion2: + checkpoint = self.checkpoint + state_dict = self.checkpoint.get("state_dict") or checkpoint + key_name = "model.diffusion_model.input_blocks.2.1.transformer_blocks.0.attn2.to_k.weight" + if key_name in state_dict and state_dict[key_name].shape[-1] == 1024: + if "global_step" in checkpoint: + if checkpoint["global_step"] == 220000: + return SchedulerPredictionType.Epsilon + elif checkpoint["global_step"] == 110000: + return SchedulerPredictionType.VPrediction + return SchedulerPredictionType.VPrediction # a guess for sd2 ckpts + + elif type == BaseModelType.StableDiffusion1: + return SchedulerPredictionType.Epsilon # a reasonable guess for sd1 ckpts + else: + return SchedulerPredictionType.Epsilon + + +class VaeCheckpointProbe(CheckpointProbeBase): + def get_base_type(self) -> BaseModelType: + # I can't find any standalone 2.X VAEs to test with! + return BaseModelType.StableDiffusion1 + + +class LoRACheckpointProbe(CheckpointProbeBase): + """Class for LoRA checkpoints.""" + + def get_format(self) -> ModelFormat: + return ModelFormat("lycoris") + + def get_base_type(self) -> BaseModelType: + checkpoint = self.checkpoint + token_vector_length = lora_token_vector_length(checkpoint) + + if token_vector_length == 768: + return BaseModelType.StableDiffusion1 + elif token_vector_length == 1024: + return BaseModelType.StableDiffusion2 + elif token_vector_length == 2048: + return BaseModelType.StableDiffusionXL + else: + raise InvalidModelConfigException(f"Unknown LoRA type: {self.model_path}") + + +class TextualInversionCheckpointProbe(CheckpointProbeBase): + """Class for probing embeddings.""" + + def get_format(self) -> ModelFormat: + return ModelFormat.EmbeddingFile + + def get_base_type(self) -> BaseModelType: + checkpoint = self.checkpoint + if "string_to_token" in checkpoint: + token_dim = list(checkpoint["string_to_param"].values())[0].shape[-1] + elif "emb_params" in checkpoint: + token_dim = checkpoint["emb_params"].shape[-1] + else: + token_dim = list(checkpoint.values())[0].shape[0] + if token_dim == 768: + return BaseModelType.StableDiffusion1 + elif token_dim == 1024: + return BaseModelType.StableDiffusion2 + else: + raise InvalidModelConfigException("Could not determine base type") + + +class ControlNetCheckpointProbe(CheckpointProbeBase): + """Class for probing controlnets.""" + + def get_base_type(self) -> BaseModelType: + checkpoint = self.checkpoint + for key_name in ( + "control_model.input_blocks.2.1.transformer_blocks.0.attn2.to_k.weight", + "input_blocks.2.1.transformer_blocks.0.attn2.to_k.weight", + ): + if key_name not in checkpoint: + continue + if checkpoint[key_name].shape[-1] == 768: + return BaseModelType.StableDiffusion1 + elif checkpoint[key_name].shape[-1] == 1024: + return BaseModelType.StableDiffusion2 + raise InvalidModelConfigException("Unable to determine base type for {self.checkpoint_path}") + + +class IPAdapterCheckpointProbe(CheckpointProbeBase): + def get_base_type(self) -> BaseModelType: + raise NotImplementedError() + + +class CLIPVisionCheckpointProbe(CheckpointProbeBase): + def get_base_type(self) -> BaseModelType: + raise NotImplementedError() + + +class T2IAdapterCheckpointProbe(CheckpointProbeBase): + def get_base_type(self) -> BaseModelType: + raise NotImplementedError() + + +######################################################## +# classes for probing folders +####################################################### +class FolderProbeBase(ProbeBase): + + def get_variant_type(self) -> ModelVariantType: + return ModelVariantType.Normal + + def get_format(self) -> ModelFormat: + return ModelFormat("diffusers") + + +class PipelineFolderProbe(FolderProbeBase): + def get_base_type(self) -> BaseModelType: + with open(self.model_path / "unet" / "config.json", "r") as file: + unet_conf = json.load(file) + if unet_conf["cross_attention_dim"] == 768: + return BaseModelType.StableDiffusion1 + elif unet_conf["cross_attention_dim"] == 1024: + return BaseModelType.StableDiffusion2 + elif unet_conf["cross_attention_dim"] == 1280: + return BaseModelType.StableDiffusionXLRefiner + elif unet_conf["cross_attention_dim"] == 2048: + return BaseModelType.StableDiffusionXL + else: + raise InvalidModelConfigException(f"Unknown base model for {self.model_path}") + + def get_scheduler_prediction_type(self) -> SchedulerPredictionType: + with open(self.model_path / "scheduler" / "scheduler_config.json", "r") as file: + scheduler_conf = json.load(file) + if scheduler_conf["prediction_type"] == "v_prediction": + return SchedulerPredictionType.VPrediction + elif scheduler_conf["prediction_type"] == "epsilon": + return SchedulerPredictionType.Epsilon + else: + raise InvalidModelConfigException("Unknown scheduler prediction type: {scheduler_conf['prediction_type']}") + + def get_variant_type(self) -> ModelVariantType: + # This only works for pipelines! Any kind of + # exception results in our returning the + # "normal" variant type + try: + config_file = self.model_path / "unet" / "config.json" + with open(config_file, "r") as file: + conf = json.load(file) + + in_channels = conf["in_channels"] + if in_channels == 9: + return ModelVariantType.Inpaint + elif in_channels == 5: + return ModelVariantType.Depth + elif in_channels == 4: + return ModelVariantType.Normal + except Exception: + pass + return ModelVariantType.Normal + + +class VaeFolderProbe(FolderProbeBase): + def get_base_type(self) -> BaseModelType: + if self._config_looks_like_sdxl(): + return BaseModelType.StableDiffusionXL + elif self._name_looks_like_sdxl(): + # but SD and SDXL VAE are the same shape (3-channel RGB to 4-channel float scaled down + # by a factor of 8), we can't necessarily tell them apart by config hyperparameters. + return BaseModelType.StableDiffusionXL + else: + return BaseModelType.StableDiffusion1 + + def _config_looks_like_sdxl(self) -> bool: + # config values that distinguish Stability's SD 1.x VAE from their SDXL VAE. + config_file = self.model_path / "config.json" + if not config_file.exists(): + raise InvalidModelConfigException(f"Cannot determine base type for {self.model_path}") + with open(config_file, "r") as file: + config = json.load(file) + return config.get("scaling_factor", 0) == 0.13025 and config.get("sample_size") in [512, 1024] + + def _name_looks_like_sdxl(self) -> bool: + return bool(re.search(r"xl\b", self._guess_name(), re.IGNORECASE)) + + def _guess_name(self) -> str: + name = self.model_path.name + if name == "vae": + name = self.model_path.parent.name + return name + + +class TextualInversionFolderProbe(FolderProbeBase): + def get_format(self) -> ModelFormat: + return ModelFormat.EmbeddingFolder + + def get_base_type(self) -> BaseModelType: + path = self.model_path / "learned_embeds.bin" + if not path.exists(): + raise InvalidModelConfigException(f"{self.model_path.as_posix()} does not contain expected 'learned_embeds.bin' file") + return TextualInversionCheckpointProbe(path).get_base_type() + + +class ONNXFolderProbe(FolderProbeBase): + def get_format(self) -> ModelFormat: + return ModelFormat("onnx") + + def get_base_type(self) -> BaseModelType: + return BaseModelType.StableDiffusion1 + + def get_variant_type(self) -> ModelVariantType: + return ModelVariantType.Normal + + +class ControlNetFolderProbe(FolderProbeBase): + def get_base_type(self) -> BaseModelType: + config_file = self.model_path / "config.json" + if not config_file.exists(): + raise InvalidModelConfigException(f"Cannot determine base type for {self.model_path}") + with open(config_file, "r") as file: + config = json.load(file) + # no obvious way to distinguish between sd2-base and sd2-768 + dimension = config["cross_attention_dim"] + base_model = ( + BaseModelType.StableDiffusion1 + if dimension == 768 + else ( + BaseModelType.StableDiffusion2 + if dimension == 1024 + else BaseModelType.StableDiffusionXL + if dimension == 2048 + else None + ) + ) + if not base_model: + raise InvalidModelConfigException(f"Unable to determine model base for {self.model_path}") + return base_model + + +class LoRAFolderProbe(FolderProbeBase): + def get_base_type(self) -> BaseModelType: + model_file = None + for suffix in ["safetensors", "bin"]: + base_file = self.model_path / f"pytorch_lora_weights.{suffix}" + if base_file.exists(): + model_file = base_file + break + if not model_file: + raise InvalidModelConfigException("Unknown LoRA format encountered") + return LoRACheckpointProbe(model_file).get_base_type() + + +class IPAdapterFolderProbe(FolderProbeBase): + def get_format(self) -> IPAdapterModelFormat: + return IPAdapterModelFormat.InvokeAI.value + + def get_base_type(self) -> BaseModelType: + model_file = self.model_path / "ip_adapter.bin" + if not model_file.exists(): + raise InvalidModelConfigException("Unknown IP-Adapter model format.") + + state_dict = torch.load(model_file, map_location="cpu") + cross_attention_dim = state_dict["ip_adapter"]["1.to_k_ip.weight"].shape[-1] + if cross_attention_dim == 768: + return BaseModelType.StableDiffusion1 + elif cross_attention_dim == 1024: + return BaseModelType.StableDiffusion2 + elif cross_attention_dim == 2048: + return BaseModelType.StableDiffusionXL + else: + raise InvalidModelConfigException(f"IP-Adapter had unexpected cross-attention dimension: {cross_attention_dim}.") + + +class CLIPVisionFolderProbe(FolderProbeBase): + def get_base_type(self) -> BaseModelType: + return BaseModelType.Any + + +class T2IAdapterFolderProbe(FolderProbeBase): + def get_base_type(self) -> BaseModelType: + config_file = self.model_path / "config.json" + if not config_file.exists(): + raise InvalidModelConfigException(f"Cannot determine base type for {self.model_path}") + with open(config_file, "r") as file: + config = json.load(file) + + adapter_type = config.get("adapter_type", None) + if adapter_type == "full_adapter_xl": + return BaseModelType.StableDiffusionXL + elif adapter_type == "full_adapter" or "light_adapter": + # I haven't seen any T2I adapter models for SD2, so assume that this is an SD1 adapter. + return BaseModelType.StableDiffusion1 + else: + raise InvalidModelConfigException( + f"Unable to determine base model for '{self.model_path}' (adapter_type = {adapter_type})." + ) + + +############## register probe classes ###### +ModelProbe.register_probe("diffusers", ModelType.Main, PipelineFolderProbe) +ModelProbe.register_probe("diffusers", ModelType.Vae, VaeFolderProbe) +ModelProbe.register_probe("diffusers", ModelType.Lora, LoRAFolderProbe) +ModelProbe.register_probe("diffusers", ModelType.TextualInversion, TextualInversionFolderProbe) +ModelProbe.register_probe("diffusers", ModelType.ControlNet, ControlNetFolderProbe) +ModelProbe.register_probe("diffusers", ModelType.IPAdapter, IPAdapterFolderProbe) +ModelProbe.register_probe("diffusers", ModelType.CLIPVision, CLIPVisionFolderProbe) +ModelProbe.register_probe("diffusers", ModelType.T2IAdapter, T2IAdapterFolderProbe) + +ModelProbe.register_probe("checkpoint", ModelType.Main, PipelineCheckpointProbe) +ModelProbe.register_probe("checkpoint", ModelType.Vae, VaeCheckpointProbe) +ModelProbe.register_probe("checkpoint", ModelType.Lora, LoRACheckpointProbe) +ModelProbe.register_probe("checkpoint", ModelType.TextualInversion, TextualInversionCheckpointProbe) +ModelProbe.register_probe("checkpoint", ModelType.ControlNet, ControlNetCheckpointProbe) +ModelProbe.register_probe("checkpoint", ModelType.IPAdapter, IPAdapterCheckpointProbe) +ModelProbe.register_probe("checkpoint", ModelType.CLIPVision, CLIPVisionCheckpointProbe) +ModelProbe.register_probe("checkpoint", ModelType.T2IAdapter, T2IAdapterCheckpointProbe) + +ModelProbe.register_probe("onnx", ModelType.ONNX, ONNXFolderProbe) diff --git a/pyproject.toml b/pyproject.toml index d8b26a86ae..80e5413530 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -219,6 +219,8 @@ exclude = [ # global mypy config [tool.mypy] ignore_missing_imports = true # ignores missing types in third-party libraries +strict = true +exclude = ["tests/*"] # overrides for specific modules [[tool.mypy.overrides]] diff --git a/scripts/probe-model.py b/scripts/probe-model.py index 05741de806..d8db2c4bcb 100755 --- a/scripts/probe-model.py +++ b/scripts/probe-model.py @@ -3,7 +3,7 @@ import argparse from pathlib import Path -from invokeai.backend.model_management.model_probe import ModelProbe +from invokeai.backend.model_manager.probe import ModelProbe parser = argparse.ArgumentParser(description="Probe model type") parser.add_argument( diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py new file mode 100644 index 0000000000..a26a1d86cd --- /dev/null +++ b/tests/app/services/model_install/test_model_install.py @@ -0,0 +1,89 @@ +""" +Test the model installer +""" + +import pytest +from pathlib import Path +from pydantic import ValidationError +from invokeai.backend.util.logging import InvokeAILogger +from invokeai.backend.model_manager.config import ModelType, BaseModelType +from invokeai.app.services.config import InvokeAIAppConfig +from invokeai.app.services.model_records import ModelRecordServiceSQL, ModelRecordServiceBase +from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.model_install import ModelInstallService, ModelInstallServiceBase + +@pytest.fixture +def test_file(datadir: Path) -> Path: + return datadir / "test_embedding.safetensors" + + +@pytest.fixture +def app_config(datadir: Path) -> InvokeAIAppConfig: + return InvokeAIAppConfig( + root=datadir / "root", + models_dir=datadir / "root/models", + ) + + +@pytest.fixture +def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: + database = SqliteDatabase(app_config, InvokeAILogger.get_logger(config=app_config)) + store: ModelRecordServiceBase = ModelRecordServiceSQL(database) + return store + + +@pytest.fixture +def installer(app_config: InvokeAIAppConfig, + store: ModelRecordServiceBase) -> ModelInstallServiceBase: + return ModelInstallService(app_config=app_config, + record_store=store + ) + + +def test_registration(installer: ModelInstallServiceBase, test_file: Path) -> None: + store = installer.record_store + matches = store.search_by_attr(model_name="test_embedding") + assert len(matches) == 0 + key = installer.register_path(test_file) + assert key is not None + assert len(key) == 32 + +def test_registration_meta(installer: ModelInstallServiceBase, test_file: Path) -> None: + store = installer.record_store + key = installer.register_path(test_file) + model_record = store.get_model(key) + assert model_record is not None + assert model_record.name == "test_embedding" + assert model_record.type == ModelType.TextualInversion + assert Path(model_record.path) == test_file + assert model_record.base == BaseModelType('sd-1') + assert model_record.description is not None + assert model_record.source is not None + assert Path(model_record.source) == test_file + +def test_registration_meta_override_fail(installer: ModelInstallServiceBase, test_file: Path) -> None: + key = None + with pytest.raises(ValidationError): + key = installer.register_path(test_file, {"name": "banana_sushi", "type": ModelType("lora")}) + assert key is None + +def test_registration_meta_override_succeed(installer: ModelInstallServiceBase, test_file: Path) -> None: + store = installer.record_store + key = installer.register_path(test_file, + { + "name": "banana_sushi", + "source": "fake/repo_id", + "current_hash": "New Hash" + } + ) + model_record = store.get_model(key) + assert model_record.name == "banana_sushi" + assert model_record.source == "fake/repo_id" + assert model_record.current_hash == "New Hash" + +def test_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig) -> None: + store = installer.record_store + key = installer.install_path(test_file) + model_record = store.get_model(key) + assert model_record.path == "sd-1/embedding/test_embedding.safetensors" + assert model_record.source == test_file.as_posix() diff --git a/tests/app/services/model_install/test_model_install/root/configs/stable-diffusion/v1-inference.yaml b/tests/app/services/model_install/test_model_install/root/configs/stable-diffusion/v1-inference.yaml new file mode 100644 index 0000000000..7bcfe28f53 --- /dev/null +++ b/tests/app/services/model_install/test_model_install/root/configs/stable-diffusion/v1-inference.yaml @@ -0,0 +1,79 @@ +model: + base_learning_rate: 1.0e-04 + target: invokeai.backend.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False + + scheduler_config: # 10000 warmup steps + target: invokeai.backend.stable_diffusion.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 10000 ] + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + personalization_config: + target: invokeai.backend.stable_diffusion.embedding_manager.EmbeddingManager + params: + placeholder_strings: ["*"] + initializer_words: ['sculpture'] + per_image_tokens: false + num_vectors_per_token: 1 + progressive_words: False + + unet_config: + target: invokeai.backend.stable_diffusion.diffusionmodules.openaimodel.UNetModel + params: + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: invokeai.backend.stable_diffusion.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: invokeai.backend.stable_diffusion.encoders.modules.WeightedFrozenCLIPEmbedder diff --git a/tests/app/services/model_install/test_model_install/root/models/placeholder b/tests/app/services/model_install/test_model_install/root/models/placeholder new file mode 100644 index 0000000000..5ad00c798e --- /dev/null +++ b/tests/app/services/model_install/test_model_install/root/models/placeholder @@ -0,0 +1 @@ +Dummy file to establish git path. diff --git a/tests/app/services/model_install/test_model_install/test_embedding.safetensors b/tests/app/services/model_install/test_model_install/test_embedding.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..ebd6a044b575659a085a359cb2777edd613775a7 GIT binary patch literal 15440 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 Date: Fri, 24 Nov 2023 19:37:46 -0500 Subject: [PATCH 005/515] all backend features in place; config scanning is failing on controlnet --- invokeai/app/services/config/__init__.py | 9 +- invokeai/app/services/events/events_base.py | 10 +- .../app/services/model_install/__init__.py | 8 +- .../model_install/model_install_base.py | 48 ++-- .../model_install/model_install_default.py | 214 +++++++++++++++--- invokeai/backend/util/__init__.py | 3 + .../model_install/test_model_install.py | 115 +++++++++- 7 files changed, 342 insertions(+), 65 deletions(-) diff --git a/invokeai/app/services/config/__init__.py b/invokeai/app/services/config/__init__.py index b9a92b03d2..e0b4168c6f 100644 --- a/invokeai/app/services/config/__init__.py +++ b/invokeai/app/services/config/__init__.py @@ -1,6 +1,5 @@ -""" -Init file for InvokeAI configure package -""" +"""Init file for InvokeAI configure package.""" -from .config_base import PagingArgumentParser # noqa F401 -from .config_default import InvokeAIAppConfig, get_invokeai_config # noqa F401 +from .config_default import InvokeAIAppConfig, get_invokeai_config + +__all__ = ['InvokeAIAppConfig', 'get_invokeai_config'] diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index d55b12138d..3dd9490abd 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -323,21 +323,23 @@ class EventServiceBase: """ self.__emit_queue_event( event_name="model_install_started", - payload={"source": source}, + payload={ + "source": source + }, ) - def emit_model_install_completed(self, source: str, dest: str) -> None: + def emit_model_install_completed(self, source: str, key: str) -> None: """ Emitted when an install job is completed successfully. :param source: Source of the model; local path, repo_id or url - :param dest: Destination of the model files; always a local path + :param key: Model config record key """ self.__emit_queue_event( event_name="model_install_completed", payload={ "source": source, - "dest": dest, + "key": key, }, ) diff --git a/invokeai/app/services/model_install/__init__.py b/invokeai/app/services/model_install/__init__.py index 22e96fd2a0..e2bcaa31c8 100644 --- a/invokeai/app/services/model_install/__init__.py +++ b/invokeai/app/services/model_install/__init__.py @@ -1,2 +1,6 @@ -from .model_install_base import ModelInstallServiceBase # noqa F401 -from .model_install_default import ModelInstallService # noqa F401 +"""Initialization file for model install service package.""" + +from .model_install_base import InstallStatus, ModelInstallServiceBase, ModelInstallJob, UnknownInstallJobException +from .model_install_default import ModelInstallService + +__all__ = ['ModelInstallServiceBase', 'ModelInstallService', 'InstallStatus', 'ModelInstallJob', 'UnknownInstallJobException'] diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 06e2f926fb..1159a03d9d 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -21,12 +21,21 @@ class InstallStatus(str, Enum): ERROR = "error" # terminated with an error message +class UnknownInstallJobException(Exception): + """Raised when the status of an unknown job is requested.""" + + +ModelSource = Union[str, Path, AnyHttpUrl] + + class ModelInstallJob(BaseModel): """Object that tracks the current status of an install request.""" - - source: Union[str, Path, AnyHttpUrl] = Field(description="Source (URL, repo_id, or local path) of model") status: InstallStatus = Field(default=InstallStatus.WAITING, description="Current status of install process") - local_path: Optional[Path] = Field(default=None, description="Path to locally-downloaded model") + metadata: Dict[str, Any] = Field(default_factory=dict, description="Configuration metadata to apply to model before installing it") + inplace: bool = Field(default=False, description="Leave model in its current location; otherwise install under models directory") + source: ModelSource = Field(description="Source (URL, repo_id, or local path) of model") + local_path: Path = Field(description="Path to locally-downloaded model; may be the same as the source") + key: Optional[str] = Field(default=None, description="After model is installed, this is its config record key") error_type: str = Field(default="", description="Class name of the exception that led to status==ERROR") error: str = Field(default="", description="Error traceback") # noqa #501 @@ -65,6 +74,11 @@ class ModelInstallServiceBase(ABC): def record_store(self) -> ModelRecordServiceBase: """Return the ModelRecoreService object associated with the installer.""" + @property + @abstractmethod + def event_bus(self) -> Optional[EventServiceBase]: + """Return the event service base object associated with the installer.""" + @abstractmethod def register_path( self, @@ -86,16 +100,12 @@ class ModelInstallServiceBase(ABC): """Remove model with indicated key from the database.""" @abstractmethod - def delete(self, key: str) -> None: - """Remove model with indicated key from the database and delete weight files from disk.""" + def delete(self, key: str) -> None: # noqa D102 + """Remove model with indicated key from the database. Delete its files only if they are within our models directory.""" @abstractmethod - def conditionally_delete(self, key: str) -> None: - """ - Remove model with indicated key from the database - and conditeionally delete weight files from disk - if they reside within InvokeAI's models directory. - """ + def unconditionally_delete(self, key: str) -> None: + """Remove model with indicated key from the database and unconditionally delete weight files from disk.""" @abstractmethod def install_path( @@ -121,7 +131,7 @@ class ModelInstallServiceBase(ABC): inplace: bool = True, variant: Optional[str] = None, subfolder: Optional[str] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[Dict[str, Any]] = None, access_token: Optional[str] = None, ) -> ModelInstallJob: """Install the indicated model. @@ -168,6 +178,18 @@ class ModelInstallServiceBase(ABC): """ + @abstractmethod + def get_job(self, source: ModelSource) -> ModelInstallJob: + """Return the ModelInstallJob corresponding to the provided source.""" + + @abstractmethod + def get_jobs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 + """Return a dict in which keys are model sources and values are corresponding model install jobs.""" + + @abstractmethod + def prune_jobs(self) -> None: + """Prune all completed and errored jobs.""" + @abstractmethod def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], ModelInstallJob]: """ @@ -194,4 +216,4 @@ class ModelInstallServiceBase(ABC): @abstractmethod def sync_to_config(self) -> None: - """Synchronize models on disk to those in memory.""" + """Synchronize models on disk to those in the model record database.""" diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 45ad441903..57c5948792 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -6,7 +6,7 @@ from pathlib import Path from queue import Queue from random import randbytes from shutil import move, rmtree -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List, Set, Optional, Union from pydantic.networks import AnyHttpUrl @@ -18,14 +18,16 @@ from invokeai.backend.model_manager.config import ( DuplicateModelException, InvalidModelConfigException, ) +from invokeai.backend.model_manager.config import ModelType, BaseModelType from invokeai.backend.model_manager.hash import FastModelHash from invokeai.backend.model_manager.probe import ModelProbe -from invokeai.backend.util.logging import InvokeAILogger +from invokeai.backend.model_manager.search import ModelSearch +from invokeai.backend.util import Chdir, InvokeAILogger -from .model_install_base import InstallStatus, ModelInstallJob, ModelInstallServiceBase +from .model_install_base import ModelSource, InstallStatus, ModelInstallJob, ModelInstallServiceBase, UnknownInstallJobException # marker that the queue is done and that thread should exit -STOP_JOB = ModelInstallJob(source="stop") +STOP_JOB = ModelInstallJob(source="stop", local_path=Path("/dev/null")) class ModelInstallService(ModelInstallServiceBase): @@ -35,8 +37,10 @@ class ModelInstallService(ModelInstallServiceBase): _record_store: ModelRecordServiceBase _event_bus: Optional[EventServiceBase] = None _install_queue: Queue[ModelInstallJob] - _install_jobs: Dict[Union[str, Path, AnyHttpUrl], ModelInstallJob] + _install_jobs: Dict[ModelSource, ModelInstallJob] _logger: InvokeAILogger + _cached_model_paths: Set[Path] + _models_installed: Set[str] def __init__(self, app_config: InvokeAIAppConfig, @@ -52,9 +56,12 @@ class ModelInstallService(ModelInstallServiceBase): """ self._app_config = app_config self._record_store = record_store - self._install_queue = Queue() self._event_bus = event_bus self._logger = InvokeAILogger.get_logger(name=self.__class__.__name__) + self._install_jobs = {} + self._install_queue = Queue() + self._cached_model_paths = set() + self._models_installed = set() self._start_installer_thread() @property @@ -65,6 +72,13 @@ class ModelInstallService(ModelInstallServiceBase): def record_store(self) -> ModelRecordServiceBase: # noqa D102 return self._record_store + @property + def event_bus(self) -> Optional[EventServiceBase]: # noqa D102 + return self._event_bus + + def get_jobs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 + return self._install_jobs + def _start_installer_thread(self) -> None: threading.Thread(target=self._install_next_item, daemon=True).start() @@ -74,14 +88,20 @@ class ModelInstallService(ModelInstallServiceBase): job = self._install_queue.get() if job == STOP_JOB: done = True - elif job.status == InstallStatus.WAITING: - assert job.local_path is not None - try: - self._signal_job_running(job) - self.register_path(job.local_path) - self._signal_job_completed(job) - except (OSError, DuplicateModelException, InvalidModelConfigException) as excp: - self._signal_job_errored(job, excp) + continue + + assert job.local_path is not None + try: + self._signal_job_running(job) + if job.inplace: + job.key = self.register_path(job.local_path, job.metadata) + else: + job.key = self.install_path(job.local_path, job.metadata) + self._signal_job_completed(job) + except (OSError, DuplicateModelException, InvalidModelConfigException) as excp: + self._signal_job_errored(job, excp) + finally: + self._install_queue.task_done() def _signal_job_running(self, job: ModelInstallJob) -> None: job.status = InstallStatus.RUNNING @@ -92,7 +112,7 @@ class ModelInstallService(ModelInstallServiceBase): job.status = InstallStatus.COMPLETED if self._event_bus: assert job.local_path is not None - self._event_bus.emit_model_install_completed(str(job.source), job.local_path.as_posix()) + self._event_bus.emit_model_install_completed(str(job.source), job.key) def _signal_job_errored(self, job: ModelInstallJob, excp: Exception) -> None: job.set_error(excp) @@ -136,29 +156,165 @@ class ModelInstallService(ModelInstallServiceBase): def import_model( self, - source: Union[str, Path, AnyHttpUrl], + source: ModelSource, inplace: bool = True, variant: Optional[str] = None, subfolder: Optional[str] = None, - metadata: Optional[Dict[str, str]] = None, + metadata: Optional[Dict[str, Any]] = None, access_token: Optional[str] = None, ) -> ModelInstallJob: # noqa D102 - raise NotImplementedError + # Clean up a common source of error. Doesn't work with Paths. + if isinstance(source, str): + source = source.strip() - def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], ModelInstallJob]: # noqa D102 + if not metadata: + metadata = {} + + # Installing a local path + if isinstance(source, (str, Path)) and Path(source).exists(): # a path that is already on disk + job = ModelInstallJob(metadata=metadata, + source=source, + inplace=inplace, + local_path=Path(source), + ) + self._install_jobs[source] = job + self._install_queue.put(job) + return job + + else: # waiting for download queue implementation + raise NotImplementedError + + def get_job(self, source: ModelSource) -> ModelInstallJob: # noqa D102 + try: + return self._install_jobs[source] + except KeyError: + raise UnknownInstallJobException(f'{source}: unknown install job') + + def wait_for_installs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 self._install_queue.join() return self._install_jobs - def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: # noqa D102 - raise NotImplementedError + def prune_jobs(self) -> None: + """Prune all completed and errored jobs.""" + finished_jobs = [source for source in self._install_jobs + if self._install_jobs[source].status in [InstallStatus.COMPLETED, InstallStatus.ERROR] + ] + for source in finished_jobs: + del self._install_jobs[source] - def sync_to_config(self) -> None: # noqa D102 - raise NotImplementedError + def sync_to_config(self) -> None: + """Synchronize models on disk to those in the config record store database.""" + self._scan_models_directory() + if autoimport := self._app_config.autoimport_dir: + self._logger.info("Scanning autoimport directory for new models") + self.scan_directory(self._app_config.root_path / autoimport) + + def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: # noqa D102 + self._cached_model_paths = {Path(x.path) for x in self.record_store.all_models()} + callback = self._scan_install if install else self._scan_register + search = ModelSearch(on_model_found=callback) + self._models_installed: Set[str] = set() + search.search(scan_dir) + return list(self._models_installed) + + def _scan_models_directory(self) -> None: + """ + Scan the models directory for new and missing models. + + New models will be added to the storage backend. Missing models + will be deleted. + """ + defunct_models = set() + installed = set() + + with Chdir(self._app_config.models_path): + self._logger.info("Checking for models that have been moved or deleted from disk") + for model_config in self.record_store.all_models(): + path = Path(model_config.path) + if not path.exists(): + self._logger.info(f"{model_config.name}: path {path.as_posix()} no longer exists. Unregistering") + defunct_models.add(model_config.key) + for key in defunct_models: + self.unregister(key) + + self._logger.info(f"Scanning {self._app_config.models_path} for new models") + for cur_base_model in BaseModelType: + for cur_model_type in ModelType: + models_dir = Path(cur_base_model.value, cur_model_type.value) + installed.update(self.scan_directory(models_dir)) + self._logger.info(f"{len(installed)} new models registered; {len(defunct_models)} unregistered") + + def _sync_model_path(self, key: str, ignore_hash_change: bool = False) -> AnyModelConfig: + """ + Move model into the location indicated by its basetype, type and name. + + Call this after updating a model's attributes in order to move + the model's path into the location indicated by its basetype, type and + name. Applies only to models whose paths are within the root `models_dir` + directory. + + May raise an UnknownModelException. + """ + model = self.record_store.get_model(key) + old_path = Path(model.path) + models_dir = self.app_config.models_path + + if not old_path.is_relative_to(models_dir): + return model + + new_path = models_dir / model.base.value / model.type.value / model.name + self._logger.info(f"Moving {model.name} to {new_path}.") + new_path = self._move_model(old_path, new_path) + new_hash = FastModelHash.hash(new_path) + model.path = new_path.relative_to(models_dir).as_posix() + if model.current_hash != new_hash: + assert ( + ignore_hash_change + ), f"{model.name}: Model hash changed during installation, model is possibly corrupted" + model.current_hash = new_hash + self._logger.info(f"Model has new hash {model.current_hash}, but will continue to be identified by {key}") + self.record_store.update_model(key, model) + return model + + + def _scan_register(self, model: Path) -> bool: + if model in self._cached_model_paths: + return True + try: + id = self.register_path(model) + self._sync_model_path(id) # possibly move it to right place in `models` + self._logger.info(f"Registered {model.name} with id {id}") + self._models_installed.add(id) + except DuplicateModelException: + pass + return True + + + def _scan_install(self, model: Path) -> bool: + if model in self._cached_model_paths: + return True + try: + id = self.install_path(model) + self._logger.info(f"Installed {model} with id {id}") + self._models_installed.add(id) + except DuplicateModelException: + pass + return True def unregister(self, key: str) -> None: # noqa D102 self.record_store.del_model(key) - def delete(self, key: str) -> None: # noqa D102 + def delete(self, key: str) -> None: # noqa D102 + """Unregister the model. Delete its files only if they are within our models directory.""" + model = self.record_store.get_model(key) + models_dir = self.app_config.models_path + model_path = models_dir / model.path + if model_path.is_relative_to(models_dir): + self.unconditionally_delete(key) + else: + self.unregister(key) + + def unconditionally_delete(self, key: str) -> None: # noqa D102 model = self.record_store.get_model(key) path = self.app_config.models_path / model.path if path.is_dir(): @@ -167,16 +323,6 @@ class ModelInstallService(ModelInstallServiceBase): path.unlink() self.unregister(key) - def conditionally_delete(self, key: str) -> None: # noqa D102 - """Unregister the model. Delete its files only if they are within our models directory.""" - model = self.record_store.get_model(key) - models_dir = self.app_config.models_path - model_path = models_dir / model.path - if model_path.is_relative_to(models_dir): - self.delete(key) - else: - self.unregister(key) - def _move_model(self, old_path: Path, new_path: Path) -> Path: if old_path == new_path: return old_path diff --git a/invokeai/backend/util/__init__.py b/invokeai/backend/util/__init__.py index 601aab00cb..ac303b6b3d 100644 --- a/invokeai/backend/util/__init__.py +++ b/invokeai/backend/util/__init__.py @@ -12,3 +12,6 @@ from .devices import ( # noqa: F401 torch_dtype, ) from .util import Chdir, ask_user, download_with_resume, instantiate_from_config, url_attachment_name # noqa: F401 +from .logging import InvokeAILogger + +__all__ = ['Chdir', 'InvokeAILogger', 'choose_precision', 'choose_torch_device'] diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index a26a1d86cd..304b8e34c1 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -2,15 +2,26 @@ Test the model installer """ -import pytest from pathlib import Path -from pydantic import ValidationError -from invokeai.backend.util.logging import InvokeAILogger -from invokeai.backend.model_manager.config import ModelType, BaseModelType +from typing import List, Any, Dict + +import pytest +from pydantic import ValidationError, BaseModel + from invokeai.app.services.config import InvokeAIAppConfig -from invokeai.app.services.model_records import ModelRecordServiceSQL, ModelRecordServiceBase +from invokeai.app.services.events.events_base import EventServiceBase +from invokeai.app.services.model_install import ( + ModelInstallService, + ModelInstallServiceBase, + InstallStatus, + ModelInstallJob, + UnknownInstallJobException, +) +from invokeai.app.services.model_records import ModelRecordServiceBase, ModelRecordServiceSQL, UnknownModelException from invokeai.app.services.shared.sqlite import SqliteDatabase -from invokeai.app.services.model_install import ModelInstallService, ModelInstallServiceBase +from invokeai.backend.model_manager.config import BaseModelType, ModelType +from invokeai.backend.util.logging import InvokeAILogger + @pytest.fixture def test_file(datadir: Path) -> Path: @@ -36,10 +47,34 @@ def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: def installer(app_config: InvokeAIAppConfig, store: ModelRecordServiceBase) -> ModelInstallServiceBase: return ModelInstallService(app_config=app_config, - record_store=store + record_store=store, + event_bus=DummyEventService(), ) +class DummyEvent(BaseModel): + """Dummy Event to use with Dummy Event service.""" + + event_name: str + payload: Dict[str, Any] + + +class DummyEventService(EventServiceBase): + """Dummy event service for testing.""" + + events: List[DummyEvent] + + def __init__(self) -> None: + super().__init__() + self.events = [] + + def dispatch(self, event_name: str, payload: Any) -> None: + """Dispatch an event by appending it to self.events.""" + self.events.append( + DummyEvent(event_name=payload['event'], + payload=payload['data']) + ) + def test_registration(installer: ModelInstallServiceBase, test_file: Path) -> None: store = installer.record_store matches = store.search_by_attr(model_name="test_embedding") @@ -87,3 +122,69 @@ def test_install(installer: ModelInstallServiceBase, test_file: Path, app_config model_record = store.get_model(key) assert model_record.path == "sd-1/embedding/test_embedding.safetensors" assert model_record.source == test_file.as_posix() + +def test_background_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig) -> None: + """Note: may want to break this down into several smaller unit tests.""" + source = test_file + description = "Test of metadata assignment" + job = installer.import_model(source, inplace=False, metadata={"description": description}) + assert job is not None + assert isinstance(job, ModelInstallJob) + + # See if job is registered properly + assert installer.get_job(source) == job + + # test that the job object tracked installation correctly + jobs = installer.wait_for_installs() + assert jobs[source] is not None + assert jobs[source] == job + assert jobs[source].status == InstallStatus.COMPLETED + + # test that the expected events were issued + bus = installer.event_bus + assert bus is not None # sigh - ruff is a stickler for type checking + assert isinstance(bus, DummyEventService) + assert len(bus.events) == 2 + event_names = [x.event_name for x in bus.events] + assert "model_install_started" in event_names + assert "model_install_completed" in event_names + assert bus.events[0].payload["source"] == source.as_posix() + assert bus.events[1].payload["source"] == source.as_posix() + key = bus.events[1].payload["key"] + assert key is not None + + # see if the thing actually got installed at the expected location + model_record = installer.record_store.get_model(key) + assert model_record is not None + assert model_record.path == "sd-1/embedding/test_embedding.safetensors" + assert Path(app_config.models_dir / model_record.path).exists() + + # see if metadata was properly passed through + assert model_record.description == description + + # see if prune works properly + installer.prune_jobs() + with pytest.raises(UnknownInstallJobException): + assert installer.get_job(source) + +def test_delete_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig): + store = installer.record_store + key = installer.install_path(test_file) + model_record = store.get_model(key) + assert Path(app_config.models_dir / model_record.path).exists() + assert not test_file.exists() # original should not still be there after installation + installer.delete(key) + assert not Path(app_config.models_dir / model_record.path).exists() # but installed copy should not! + with pytest.raises(UnknownModelException): + store.get_model(key) + +def test_delete_register(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig): + store = installer.record_store + key = installer.register_path(test_file) + model_record = store.get_model(key) + assert Path(app_config.models_dir / model_record.path).exists() + assert test_file.exists() # original should still be there after installation + installer.delete(key) + assert Path(app_config.models_dir / model_record.path).exists() + with pytest.raises(UnknownModelException): + store.get_model(key) From ec510d34b5f4ec7c6d00cf471c6174daaf5c36ea Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sat, 25 Nov 2023 15:53:22 -0500 Subject: [PATCH 006/515] fix model probing for controlnet checkpoint legacy config files --- .../model_install/model_install_default.py | 7 +- invokeai/backend/model_manager/__init__.py | 30 +++ invokeai/backend/model_manager/probe.py | 47 +++-- invokeai/backend/model_manager/search.py | 195 ++++++++++++++++++ scripts/probe-model.py | 13 +- 5 files changed, 269 insertions(+), 23 deletions(-) create mode 100644 invokeai/backend/model_manager/__init__.py create mode 100644 invokeai/backend/model_manager/search.py diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 57c5948792..485a40f8e9 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -127,7 +127,7 @@ class ModelInstallService(ModelInstallServiceBase): model_path = Path(model_path) metadata = metadata or {} if metadata.get('source') is None: - metadata['source'] = model_path.as_posix() + metadata['source'] = model_path.resolve().as_posix() return self._register(model_path, metadata) def install_path( @@ -138,7 +138,7 @@ class ModelInstallService(ModelInstallServiceBase): model_path = Path(model_path) metadata = metadata or {} if metadata.get('source') is None: - metadata['source'] = model_path.as_posix() + metadata['source'] = model_path.resolve().as_posix() info: AnyModelConfig = self._probe_model(Path(model_path), metadata) @@ -366,6 +366,7 @@ class ModelInstallService(ModelInstallServiceBase): # add 'main' specific fields if hasattr(info, 'config'): # make config relative to our root - info.config = self.app_config.legacy_conf_dir / info.config + legacy_conf = (self.app_config.root_dir / self.app_config.legacy_conf_dir / info.config).resolve() + info.config = legacy_conf.relative_to(self.app_config.root_dir).as_posix() self.record_store.add_model(key, info) return key diff --git a/invokeai/backend/model_manager/__init__.py b/invokeai/backend/model_manager/__init__.py new file mode 100644 index 0000000000..126216b742 --- /dev/null +++ b/invokeai/backend/model_manager/__init__.py @@ -0,0 +1,30 @@ +"""Re-export frequently-used symbols from the Model Manager backend.""" + +from .probe import ModelProbe +from .config import ( + InvalidModelConfigException, + DuplicateModelException, + ModelConfigFactory, + BaseModelType, + ModelType, + SubModelType, + ModelVariantType, + ModelFormat, + SchedulerPredictionType, + AnyModelConfig, +) +from .search import ModelSearch + +__all__ = ['ModelProbe', 'ModelSearch', + 'InvalidModelConfigException', + 'DuplicateModelException', + 'ModelConfigFactory', + 'BaseModelType', + 'ModelType', + 'SubModelType', + 'ModelVariantType', + 'ModelFormat', + 'SchedulerPredictionType', + 'AnyModelConfig', + ] + diff --git a/invokeai/backend/model_manager/probe.py b/invokeai/backend/model_manager/probe.py index 87aefe87c0..0caa191f3e 100644 --- a/invokeai/backend/model_manager/probe.py +++ b/invokeai/backend/model_manager/probe.py @@ -129,7 +129,6 @@ class ModelProbe(object): model_type = cls.get_model_type_from_folder(model_path) else: model_type = cls.get_model_type_from_checkpoint(model_path) - print(f'DEBUG: model_type={model_type}') format_type = ModelFormat.Onnx if model_type == ModelType.ONNX else format_type probe_class = cls.PROBES[format_type].get(model_type) @@ -150,14 +149,19 @@ class ModelProbe(object): fields['original_hash'] = fields.get('original_hash') or hash fields['current_hash'] = fields.get('current_hash') or hash - # additional work for main models - if fields['type'] == ModelType.Main: - if fields['format'] == ModelFormat.Checkpoint: - fields['config'] = cls._get_config_path(model_path, fields['base'], fields['variant'], fields['prediction_type']).as_posix() - elif fields['format'] in [ModelFormat.Onnx, ModelFormat.Olive, ModelFormat.Diffusers]: - fields['upcast_attention'] = fields.get('upcast_attention') or ( - fields['base'] == BaseModelType.StableDiffusion2 and fields['prediction_type'] == SchedulerPredictionType.VPrediction - ) + # additional fields needed for main and controlnet models + if fields['type'] in [ModelType.Main, ModelType.ControlNet] and fields['format'] == ModelFormat.Checkpoint: + fields['config'] = cls._get_checkpoint_config_path(model_path, + model_type=fields['type'], + base_type=fields['base'], + variant_type=fields['variant'], + prediction_type=fields['prediction_type']).as_posix() + + # additional fields needed for main non-checkpoint models + elif fields['type'] == ModelType.Main and fields['format'] in [ModelFormat.Onnx, ModelFormat.Olive, ModelFormat.Diffusers]: + fields['upcast_attention'] = fields.get('upcast_attention') or ( + fields['base'] == BaseModelType.StableDiffusion2 and fields['prediction_type'] == SchedulerPredictionType.VPrediction + ) model_info = ModelConfigFactory.make_config(fields) return model_info @@ -243,18 +247,27 @@ class ModelProbe(object): ) @classmethod - def _get_config_path(cls, - model_path: Path, - base_type: BaseModelType, - variant: ModelVariantType, - prediction_type: SchedulerPredictionType) -> Path: + def _get_checkpoint_config_path(cls, + model_path: Path, + model_type: ModelType, + base_type: BaseModelType, + variant_type: ModelVariantType, + prediction_type: SchedulerPredictionType) -> Path: + # look for a YAML file adjacent to the model file first possible_conf = model_path.with_suffix(".yaml") if possible_conf.exists(): return possible_conf.absolute() - config_file = LEGACY_CONFIGS[base_type][variant] - if isinstance(config_file, dict): # need another tier for sd-2.x models - config_file = config_file[prediction_type] + + if model_type == ModelType.Main: + config_file = LEGACY_CONFIGS[base_type][variant_type] + if isinstance(config_file, dict): # need another tier for sd-2.x models + config_file = config_file[prediction_type] + elif model_type == ModelType.ControlNet: + config_file = "../controlnet/cldm_v15.yaml" if base_type == BaseModelType("sd-1") else "../controlnet/cldm_v21.yaml" + else: + raise InvalidModelConfigException(f"{model_path}: Unrecognized combination of model_type={model_type}, base_type={base_type}") + assert isinstance(config_file, str) return Path(config_file) @classmethod diff --git a/invokeai/backend/model_manager/search.py b/invokeai/backend/model_manager/search.py new file mode 100644 index 0000000000..06d138fc9f --- /dev/null +++ b/invokeai/backend/model_manager/search.py @@ -0,0 +1,195 @@ +# Copyright 2023, Lincoln D. Stein and the InvokeAI Team +""" +Abstract base class and implementation for recursive directory search for models. + +Example usage: +``` + from invokeai.backend.model_manager import ModelSearch, ModelProbe + + def find_main_models(model: Path) -> bool: + info = ModelProbe.probe(model) + if info.model_type == 'main' and info.base_type == 'sd-1': + return True + else: + return False + + search = ModelSearch(on_model_found=report_it) + found = search.search('/tmp/models') + print(found) # list of matching model paths + print(search.stats) # search stats +``` +""" + +import os +from abc import ABC, abstractmethod +from pathlib import Path +from typing import Callable, Optional, Set, Union + +from pydantic import BaseModel, Field + +from invokeai.backend.util.logging import InvokeAILogger + +default_logger = InvokeAILogger.get_logger() + + +class SearchStats(BaseModel): + items_scanned: int = 0 + models_found: int = 0 + models_filtered: int = 0 + + +class ModelSearchBase(ABC, BaseModel): + """ + Abstract directory traversal model search class + + Usage: + search = ModelSearchBase( + on_search_started = search_started_callback, + on_search_completed = search_completed_callback, + on_model_found = model_found_callback, + ) + models_found = search.search('/path/to/directory') + """ + + # fmt: off + on_search_started : Optional[Callable[[Path], None]] = Field(default=None, description="Called just before the search starts.") # noqa E221 + on_model_found : Optional[Callable[[Path], bool]] = Field(default=None, description="Called when a model is found.") # noqa E221 + on_search_completed : Optional[Callable[[Set[Path]], None]] = Field(default=None, description="Called when search is complete.") # noqa E221 + stats : SearchStats = Field(default_factory=SearchStats, description="Summary statistics after search") # noqa E221 + logger : InvokeAILogger = Field(default=default_logger, description="Logger instance.") # noqa E221 + # fmt: on + + class Config: + arbitrary_types_allowed = True + + @abstractmethod + def search_started(self) -> None: + """ + Called before the scan starts. + + Passes the root search directory to the Callable `on_search_started`. + """ + pass + + @abstractmethod + def model_found(self, model: Path) -> None: + """ + Called when a model is found during search. + + :param model: Model to process - could be a directory or checkpoint. + + Passes the model's Path to the Callable `on_model_found`. + This Callable receives the path to the model and returns a boolean + to indicate whether the model should be returned in the search + results. + """ + pass + + @abstractmethod + def search_completed(self) -> None: + """ + Called before the scan starts. + + Passes the Set of found model Paths to the Callable `on_search_completed`. + """ + pass + + @abstractmethod + def search(self, directory: Union[Path, str]) -> Set[Path]: + """ + Recursively search for models in `directory` and return a set of model paths. + + If provided, the `on_search_started`, `on_model_found` and `on_search_completed` + Callables will be invoked during the search. + """ + pass + + +class ModelSearch(ModelSearchBase): + """ + Implementation of ModelSearch with callbacks. + Usage: + search = ModelSearch() + search.model_found = lambda path : 'anime' in path.as_posix() + found = search.list_models(['/tmp/models1','/tmp/models2']) + # returns all models that have 'anime' in the path + """ + + directory: Path = Field(default=None) + models_found: Set[Path] = Field(default=None) + scanned_dirs: Set[Path] = Field(default=None) + pruned_paths: Set[Path] = Field(default=None) + + def search_started(self) -> None: + self.models_found = set() + self.scanned_dirs = set() + self.pruned_paths = set() + if self.on_search_started: + self.on_search_started(self._directory) + + def model_found(self, model: Path) -> None: + self.stats.models_found += 1 + if not self.on_model_found: + self.stats.models_filtered += 1 + self.models_found.add(model) + return + if self.on_model_found(model): + self.stats.models_filtered += 1 + self.models_found.add(model) + + def search_completed(self) -> None: + if self.on_search_completed: + self.on_search_completed(self._models_found) + + def search(self, directory: Union[Path, str]) -> Set[Path]: + self._directory = Path(directory) + self.stats = SearchStats() # zero out + self.search_started() # This will initialize _models_found to empty + self._walk_directory(directory) + self.search_completed() + return self.models_found + + def _walk_directory(self, path: Union[Path, str]) -> None: + for root, dirs, files in os.walk(path, followlinks=True): + # don't descend into directories that start with a "." + # to avoid the Mac .DS_STORE issue. + if str(Path(root).name).startswith("."): + self.pruned_paths.add(Path(root)) + if any(Path(root).is_relative_to(x) for x in self.pruned_paths): + continue + + self.stats.items_scanned += len(dirs) + len(files) + for d in dirs: + path = Path(root) / d + if path.parent in self.scanned_dirs: + self.scanned_dirs.add(path) + continue + if any( + (path / x).exists() + for x in [ + "config.json", + "model_index.json", + "learned_embeds.bin", + "pytorch_lora_weights.bin", + "image_encoder.txt", + ] + ): + self.scanned_dirs.add(path) + try: + self.model_found(path) + except KeyboardInterrupt: + raise + except Exception as e: + self.logger.warning(str(e)) + + for f in files: + path = Path(root) / f + if path.parent in self.scanned_dirs: + continue + if path.suffix in {".ckpt", ".bin", ".pth", ".safetensors", ".pt"}: + try: + self.model_found(path) + except KeyboardInterrupt: + raise + except Exception as e: + self.logger.warning(str(e)) diff --git a/scripts/probe-model.py b/scripts/probe-model.py index d8db2c4bcb..c8b6324302 100755 --- a/scripts/probe-model.py +++ b/scripts/probe-model.py @@ -1,9 +1,13 @@ #!/bin/env python +"""Little command-line utility for probing a model on disk.""" + import argparse from pathlib import Path -from invokeai.backend.model_manager.probe import ModelProbe +from invokeai.backend.model_manager import ModelProbe, InvalidModelConfigException + + parser = argparse.ArgumentParser(description="Probe model type") parser.add_argument( @@ -14,5 +18,8 @@ parser.add_argument( args = parser.parse_args() for path in args.model_path: - info = ModelProbe().probe(path) - print(f"{path}: {info}") + try: + info = ModelProbe.probe(path) + print(f"{path}:{info.model_dump_json(indent=4)}") + except InvalidModelConfigException as exc: + print(exc) From 8aefe2cefe843688d704c5d59181d57661076581 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sat, 25 Nov 2023 21:45:59 -0500 Subject: [PATCH 007/515] import_model and list_install_jobs router APIs written --- invokeai/app/api/dependencies.py | 3 + invokeai/app/api/routers/model_records.py | 95 ++++++++++++++++++- invokeai/app/api/sockets.py | 12 ++- invokeai/app/services/events/events_base.py | 14 ++- invokeai/app/services/invocation_services.py | 4 + .../app/services/model_install/__init__.py | 10 +- .../model_install/model_install_base.py | 8 +- .../model_install/model_install_default.py | 14 ++- invokeai/backend/model_manager/__init__.py | 2 - invokeai/backend/model_manager/config.py | 3 - 10 files changed, 145 insertions(+), 20 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index b739327368..1a4b574f75 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -25,6 +25,7 @@ from ..services.latents_storage.latents_storage_disk import DiskLatentsStorage from ..services.latents_storage.latents_storage_forward_cache import ForwardCacheLatentsStorage from ..services.model_manager.model_manager_default import ModelManagerService from ..services.model_records import ModelRecordServiceSQL +from ..services.model_install import ModelInstallService from ..services.names.names_default import SimpleNameService from ..services.session_processor.session_processor_default import DefaultSessionProcessor from ..services.session_queue.session_queue_sqlite import SqliteSessionQueue @@ -87,6 +88,7 @@ class ApiDependencies: latents = ForwardCacheLatentsStorage(DiskLatentsStorage(f"{output_folder}/latents")) model_manager = ModelManagerService(config, logger) model_record_service = ModelRecordServiceSQL(db=db) + model_install_service = ModelInstallService(app_config=config, record_store=model_record_service, event_bus=events) names = SimpleNameService() performance_statistics = InvocationStatsService() processor = DefaultInvocationProcessor() @@ -114,6 +116,7 @@ class ApiDependencies: logger=logger, model_manager=model_manager, model_records=model_record_service, + model_install=model_install_service, names=names, performance_statistics=performance_statistics, processor=processor, diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index cffca25d9f..1de5b47d24 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -4,7 +4,7 @@ from hashlib import sha1 from random import randbytes -from typing import List, Optional +from typing import List, Optional, Any, Dict from fastapi import Body, Path, Query, Response from fastapi.routing import APIRouter @@ -22,6 +22,7 @@ from invokeai.backend.model_manager.config import ( BaseModelType, ModelType, ) +from invokeai.app.services.model_install import ModelInstallJob, ModelSource from ..dependencies import ApiDependencies @@ -162,3 +163,95 @@ async def add_model_record( # now fetch it out return record_store.get_model(config.key) + + +@model_records_router.post( + "/import", + operation_id="import_model_record", + responses={ + 201: {"description": "The model imported successfully"}, + 404: {"description": "The model could not be found"}, + 415: {"description": "Unrecognized file/folder format"}, + 424: {"description": "The model appeared to import successfully, but could not be found in the model manager"}, + 409: {"description": "There is already a model corresponding to this path or repo_id"}, + }, + status_code=201, +) +async def import_model( + source: ModelSource = Body( + description="A model path, repo_id or URL to import. NOTE: only model path is implemented currently!" + ), + metadata: Optional[Dict[str, Any]] = Body( + description="Dict of fields that override auto-probed values, such as name, description and prediction_type ", + default=None, + ), + variant: Optional[str] = Body( + description="When fetching a repo_id, force variant type to fetch such as 'fp16'", + default=None, + ), + subfolder: Optional[str] = Body( + description="When fetching a repo_id, specify subfolder to fetch model from", + default=None, + ), + access_token: Optional[str] = Body( + description="When fetching a repo_id or URL, access token for web access", + default=None, + ), +) -> ModelInstallJob: + """Add a model using its local path, repo_id, or remote URL. + + Models will be downloaded, probed, configured and installed in a + series of background threads. The return object has `status` attribute + that can be used to monitor progress. + + The model's configuration record will be probed and filled in + automatically. To override the default guesses, pass "metadata" + with a Dict containing the attributes you wish to override. + + Listen on the event bus for the following events: + "model_install_started", "model_install_completed", and "model_install_error." + On successful completion, the event's payload will contain the field "key" + containing the installed ID of the model. On an error, the event's payload + will contain the fields "error_type" and "error" describing the nature of the + error and its traceback, respectively. + + """ + logger = ApiDependencies.invoker.services.logger + + try: + installer = ApiDependencies.invoker.services.model_install + result: ModelInstallJob = installer.import_model( + source, + metadata=metadata, + variant=variant, + subfolder=subfolder, + access_token=access_token, + ) + except UnknownModelException as e: + logger.error(str(e)) + raise HTTPException(status_code=404, detail=str(e)) + except InvalidModelException as e: + logger.error(str(e)) + raise HTTPException(status_code=415) + except ValueError as e: + logger.error(str(e)) + raise HTTPException(status_code=409, detail=str(e)) + return result + +@model_records_router.get( + "/import", + operation_id="list_model_install_jobs", +) +async def list_install_jobs( + source: Optional[str] = Query(description="Filter list by install source, partial string match.", + default=None, + ) +) -> List[ModelInstallJob]: + """ + Return list of model install jobs. + + If the optional 'source' argument is provided, then the list will be filtered + for partial string matches against the install source. + """ + jobs: List[ModelInstallJob] = ApiDependencies.invoker.services.model_install.list_jobs(source) + return jobs diff --git a/invokeai/app/api/sockets.py b/invokeai/app/api/sockets.py index 1d5de61fd6..ff3957507d 100644 --- a/invokeai/app/api/sockets.py +++ b/invokeai/app/api/sockets.py @@ -20,6 +20,7 @@ class SocketIO: self.__sio.on("subscribe_queue", handler=self._handle_sub_queue) self.__sio.on("unsubscribe_queue", handler=self._handle_unsub_queue) local_handler.register(event_name=EventServiceBase.queue_event, _func=self._handle_queue_event) + local_handler.register(event_name=EventServiceBase.model_event, _func=self._handle_model_event) async def _handle_queue_event(self, event: Event): await self.__sio.emit( @@ -28,10 +29,17 @@ class SocketIO: room=event[1]["data"]["queue_id"], ) - async def _handle_sub_queue(self, sid, data, *args, **kwargs): + async def _handle_sub_queue(self, sid, data, *args, **kwargs) -> None: if "queue_id" in data: await self.__sio.enter_room(sid, data["queue_id"]) - async def _handle_unsub_queue(self, sid, data, *args, **kwargs): + async def _handle_unsub_queue(self, sid, data, *args, **kwargs) -> None: if "queue_id" in data: await self.__sio.leave_room(sid, data["queue_id"]) + + + async def _handle_model_event(self, event: Event) -> None: + await self.__sio.emit( + event=event[1]["event"], + data=event[1]["data"] + ) diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index 3dd9490abd..39ce598929 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -17,6 +17,7 @@ from invokeai.backend.model_management.models.base import BaseModelType, ModelTy class EventServiceBase: queue_event: str = "queue_event" + model_event: str = "model_event" """Basic event bus, to have an empty stand-in when not needed""" @@ -31,6 +32,13 @@ class EventServiceBase: payload={"event": event_name, "data": payload}, ) + def __emit_model_event(self, event_name: str, payload: dict) -> None: + payload["timestamp"] = get_timestamp() + self.dispatch( + event_name=EventServiceBase.model_event, + payload={"event": event_name, "data": payload}, + ) + # Define events here for every event in the system. # This will make them easier to integrate until we find a schema generator. def emit_generator_progress( @@ -321,7 +329,7 @@ class EventServiceBase: :param source: Source of the model; local path, repo_id or url """ - self.__emit_queue_event( + self.__emit_model_event( event_name="model_install_started", payload={ "source": source @@ -335,7 +343,7 @@ class EventServiceBase: :param source: Source of the model; local path, repo_id or url :param key: Model config record key """ - self.__emit_queue_event( + self.__emit_model_event( event_name="model_install_completed", payload={ "source": source, @@ -354,7 +362,7 @@ class EventServiceBase: :param source: Source of the model :param exception: The exception that raised the error """ - self.__emit_queue_event( + self.__emit_model_event( event_name="model_install_error", payload={ "source": source, diff --git a/invokeai/app/services/invocation_services.py b/invokeai/app/services/invocation_services.py index 366e2d0f2b..21bbd61679 100644 --- a/invokeai/app/services/invocation_services.py +++ b/invokeai/app/services/invocation_services.py @@ -23,6 +23,7 @@ if TYPE_CHECKING: from .latents_storage.latents_storage_base import LatentsStorageBase from .model_manager.model_manager_base import ModelManagerServiceBase from .model_records import ModelRecordServiceBase + from .model_install import ModelInstallServiceBase from .names.names_base import NameServiceBase from .session_processor.session_processor_base import SessionProcessorBase from .session_queue.session_queue_base import SessionQueueBase @@ -51,6 +52,7 @@ class InvocationServices: logger: "Logger" model_manager: "ModelManagerServiceBase" model_records: "ModelRecordServiceBase" + model_install: "ModelRecordInstallServiceBase" processor: "InvocationProcessorABC" performance_statistics: "InvocationStatsServiceBase" queue: "InvocationQueueABC" @@ -79,6 +81,7 @@ class InvocationServices: logger: "Logger", model_manager: "ModelManagerServiceBase", model_records: "ModelRecordServiceBase", + model_install: "ModelInstallServiceBase", processor: "InvocationProcessorABC", performance_statistics: "InvocationStatsServiceBase", queue: "InvocationQueueABC", @@ -105,6 +108,7 @@ class InvocationServices: self.logger = logger self.model_manager = model_manager self.model_records = model_records + self.model_install = model_install self.processor = processor self.performance_statistics = performance_statistics self.queue = queue diff --git a/invokeai/app/services/model_install/__init__.py b/invokeai/app/services/model_install/__init__.py index e2bcaa31c8..0706c8cf68 100644 --- a/invokeai/app/services/model_install/__init__.py +++ b/invokeai/app/services/model_install/__init__.py @@ -1,6 +1,12 @@ """Initialization file for model install service package.""" -from .model_install_base import InstallStatus, ModelInstallServiceBase, ModelInstallJob, UnknownInstallJobException +from .model_install_base import InstallStatus, ModelInstallServiceBase, ModelInstallJob, UnknownInstallJobException, ModelSource from .model_install_default import ModelInstallService -__all__ = ['ModelInstallServiceBase', 'ModelInstallService', 'InstallStatus', 'ModelInstallJob', 'UnknownInstallJobException'] +__all__ = ['ModelInstallServiceBase', + 'ModelInstallService', + 'InstallStatus', + 'ModelInstallJob', + 'UnknownInstallJobException', + 'ModelSource', + ] diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 1159a03d9d..61cea44763 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -183,8 +183,12 @@ class ModelInstallServiceBase(ABC): """Return the ModelInstallJob corresponding to the provided source.""" @abstractmethod - def get_jobs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 - """Return a dict in which keys are model sources and values are corresponding model install jobs.""" + def list_jobs(self, source: Optional[ModelSource]=None) -> List[ModelInstallJob]: # noqa D102 + """ + List active and complete install jobs. + + :param source: Filter by jobs whose sources are a partial match to the argument. + """ @abstractmethod def prune_jobs(self) -> None: diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 485a40f8e9..5d2afaaf08 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -12,10 +12,9 @@ from pydantic.networks import AnyHttpUrl from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events import EventServiceBase -from invokeai.app.services.model_records import ModelRecordServiceBase +from invokeai.app.services.model_records import ModelRecordServiceBase, DuplicateModelException from invokeai.backend.model_manager.config import ( AnyModelConfig, - DuplicateModelException, InvalidModelConfigException, ) from invokeai.backend.model_manager.config import ModelType, BaseModelType @@ -26,6 +25,7 @@ from invokeai.backend.util import Chdir, InvokeAILogger from .model_install_base import ModelSource, InstallStatus, ModelInstallJob, ModelInstallServiceBase, UnknownInstallJobException + # marker that the queue is done and that thread should exit STOP_JOB = ModelInstallJob(source="stop", local_path=Path("/dev/null")) @@ -76,9 +76,6 @@ class ModelInstallService(ModelInstallServiceBase): def event_bus(self) -> Optional[EventServiceBase]: # noqa D102 return self._event_bus - def get_jobs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 - return self._install_jobs - def _start_installer_thread(self) -> None: threading.Thread(target=self._install_next_item, daemon=True).start() @@ -184,6 +181,13 @@ class ModelInstallService(ModelInstallServiceBase): else: # waiting for download queue implementation raise NotImplementedError + def list_jobs(self, source: Optional[ModelSource]=None) -> List[ModelInstallJob]: # noqa D102 + jobs = self._install_jobs + if not source: + return jobs.values() + else: + return [jobs[x] for x in jobs if source in str(x)] + def get_job(self, source: ModelSource) -> ModelInstallJob: # noqa D102 try: return self._install_jobs[source] diff --git a/invokeai/backend/model_manager/__init__.py b/invokeai/backend/model_manager/__init__.py index 126216b742..10b8d2d32a 100644 --- a/invokeai/backend/model_manager/__init__.py +++ b/invokeai/backend/model_manager/__init__.py @@ -3,7 +3,6 @@ from .probe import ModelProbe from .config import ( InvalidModelConfigException, - DuplicateModelException, ModelConfigFactory, BaseModelType, ModelType, @@ -17,7 +16,6 @@ from .search import ModelSearch __all__ = ['ModelProbe', 'ModelSearch', 'InvalidModelConfigException', - 'DuplicateModelException', 'ModelConfigFactory', 'BaseModelType', 'ModelType', diff --git a/invokeai/backend/model_manager/config.py b/invokeai/backend/model_manager/config.py index 646d82edf3..4499fee254 100644 --- a/invokeai/backend/model_manager/config.py +++ b/invokeai/backend/model_manager/config.py @@ -29,9 +29,6 @@ from typing_extensions import Annotated, Any, Dict class InvalidModelConfigException(Exception): """Exception for when config parser doesn't recognized this combination of model type and format.""" -class DuplicateModelException(Exception): - """Exception for when a duplicate model is detected during installation.""" - class BaseModelType(str, Enum): """Base model type.""" From dc5c452ef92070988999460287c38106532a9fda Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 26 Nov 2023 09:38:30 -0500 Subject: [PATCH 008/515] rename test/nodes to test/aa_nodes to ensure these tests run first --- invokeai/app/services/model_install/model_install_base.py | 2 +- invokeai/app/services/model_install/model_install_default.py | 5 +++-- tests/{nodes => aa_nodes}/__init__.py | 0 tests/{nodes => aa_nodes}/test_graph_execution_state.py | 1 + tests/{nodes => aa_nodes}/test_invoker.py | 1 + tests/{nodes => aa_nodes}/test_node_graph.py | 0 tests/{nodes => aa_nodes}/test_nodes.py | 0 tests/{nodes => aa_nodes}/test_session_queue.py | 2 +- tests/{nodes => aa_nodes}/test_sqlite.py | 0 9 files changed, 7 insertions(+), 4 deletions(-) rename tests/{nodes => aa_nodes}/__init__.py (100%) rename tests/{nodes => aa_nodes}/test_graph_execution_state.py (99%) rename tests/{nodes => aa_nodes}/test_invoker.py (99%) rename tests/{nodes => aa_nodes}/test_node_graph.py (100%) rename tests/{nodes => aa_nodes}/test_nodes.py (100%) rename tests/{nodes => aa_nodes}/test_session_queue.py (99%) rename tests/{nodes => aa_nodes}/test_sqlite.py (100%) diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 61cea44763..c333639bda 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -35,7 +35,7 @@ class ModelInstallJob(BaseModel): inplace: bool = Field(default=False, description="Leave model in its current location; otherwise install under models directory") source: ModelSource = Field(description="Source (URL, repo_id, or local path) of model") local_path: Path = Field(description="Path to locally-downloaded model; may be the same as the source") - key: Optional[str] = Field(default=None, description="After model is installed, this is its config record key") + key: str = Field(default="", description="After model is installed, this is its config record key") error_type: str = Field(default="", description="Class name of the exception that led to status==ERROR") error: str = Field(default="", description="Error traceback") # noqa #501 diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 5d2afaaf08..0036ea6aa5 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -178,14 +178,15 @@ class ModelInstallService(ModelInstallServiceBase): self._install_queue.put(job) return job - else: # waiting for download queue implementation + else: # here is where we'd download a URL or repo_id. Implementation pending download queue. raise NotImplementedError def list_jobs(self, source: Optional[ModelSource]=None) -> List[ModelInstallJob]: # noqa D102 jobs = self._install_jobs if not source: - return jobs.values() + return list(jobs.values()) else: + source = str(source) return [jobs[x] for x in jobs if source in str(x)] def get_job(self, source: ModelSource) -> ModelInstallJob: # noqa D102 diff --git a/tests/nodes/__init__.py b/tests/aa_nodes/__init__.py similarity index 100% rename from tests/nodes/__init__.py rename to tests/aa_nodes/__init__.py diff --git a/tests/nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py similarity index 99% rename from tests/nodes/test_graph_execution_state.py rename to tests/aa_nodes/test_graph_execution_state.py index cc40970ace..395bb46977 100644 --- a/tests/nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -69,6 +69,7 @@ def mock_services() -> InvocationServices: logger=logging, # type: ignore model_manager=None, # type: ignore model_records=None, # type: ignore + model_install=None, # type: ignore names=None, # type: ignore performance_statistics=InvocationStatsService(), processor=DefaultInvocationProcessor(), diff --git a/tests/nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py similarity index 99% rename from tests/nodes/test_invoker.py rename to tests/aa_nodes/test_invoker.py index c775fb93f2..7a12b81940 100644 --- a/tests/nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -74,6 +74,7 @@ def mock_services() -> InvocationServices: logger=logging, # type: ignore model_manager=None, # type: ignore model_records=None, # type: ignore + model_install=None, # type: ignore names=None, # type: ignore performance_statistics=InvocationStatsService(), processor=DefaultInvocationProcessor(), diff --git a/tests/nodes/test_node_graph.py b/tests/aa_nodes/test_node_graph.py similarity index 100% rename from tests/nodes/test_node_graph.py rename to tests/aa_nodes/test_node_graph.py diff --git a/tests/nodes/test_nodes.py b/tests/aa_nodes/test_nodes.py similarity index 100% rename from tests/nodes/test_nodes.py rename to tests/aa_nodes/test_nodes.py diff --git a/tests/nodes/test_session_queue.py b/tests/aa_nodes/test_session_queue.py similarity index 99% rename from tests/nodes/test_session_queue.py rename to tests/aa_nodes/test_session_queue.py index 768b09898d..b15bb9df36 100644 --- a/tests/nodes/test_session_queue.py +++ b/tests/aa_nodes/test_session_queue.py @@ -12,7 +12,7 @@ from invokeai.app.services.session_queue.session_queue_common import ( prepare_values_to_insert, ) from invokeai.app.services.shared.graph import Graph, GraphExecutionState, GraphInvocation -from tests.nodes.test_nodes import PromptTestInvocation +from tests.aa_nodes.test_nodes import PromptTestInvocation @pytest.fixture diff --git a/tests/nodes/test_sqlite.py b/tests/aa_nodes/test_sqlite.py similarity index 100% rename from tests/nodes/test_sqlite.py rename to tests/aa_nodes/test_sqlite.py From 8695ad6f59899dc25f884bcbffbb0510737d53b1 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 26 Nov 2023 13:18:21 -0500 Subject: [PATCH 009/515] all features implemented, docs updated, ready for review --- docs/contributing/MODEL_MANAGER.md | 749 +++++++++--------- invokeai/app/api/dependencies.py | 2 +- invokeai/app/api/routers/model_records.py | 75 +- invokeai/app/services/events/events_base.py | 23 + invokeai/app/services/invocation_services.py | 4 +- .../app/services/model_install/__init__.py | 8 +- .../model_install/model_install_base.py | 30 +- .../model_install/model_install_default.py | 98 ++- invokeai/backend/model_manager/__init__.py | 12 +- invokeai/backend/util/__init__.py | 2 +- mkdocs.yml | 1 + .../model_install/test_model_install.py | 7 +- 12 files changed, 542 insertions(+), 469 deletions(-) diff --git a/docs/contributing/MODEL_MANAGER.md b/docs/contributing/MODEL_MANAGER.md index 9d06366a23..f5c6b2846e 100644 --- a/docs/contributing/MODEL_MANAGER.md +++ b/docs/contributing/MODEL_MANAGER.md @@ -10,40 +10,36 @@ model. These are the: tracks the type of the model, its provenance, and where it can be found on disk. -* _ModelLoadServiceBase_ Responsible for loading a model from disk - into RAM and VRAM and getting it ready for inference. - -* _DownloadQueueServiceBase_ A multithreaded downloader responsible - for downloading models from a remote source to disk. The download - queue has special methods for downloading repo_id folders from - Hugging Face, as well as discriminating among model versions in - Civitai, but can be used for arbitrary content. - * _ModelInstallServiceBase_ A service for installing models to disk. It uses `DownloadQueueServiceBase` to download models and their metadata, and `ModelRecordServiceBase` to store that information. It is also responsible for managing the InvokeAI `models` directory and its contents. +* _DownloadQueueServiceBase_ (**CURRENTLY UNDER DEVELOPMENT - NOT IMPLEMENTED**) + A multithreaded downloader responsible + for downloading models from a remote source to disk. The download + queue has special methods for downloading repo_id folders from + Hugging Face, as well as discriminating among model versions in + Civitai, but can be used for arbitrary content. + + * _ModelLoadServiceBase_ (**CURRENTLY UNDER DEVELOPMENT - NOT IMPLEMENTED**) + Responsible for loading a model from disk + into RAM and VRAM and getting it ready for inference. + + ## Location of the Code All four of these services can be found in `invokeai/app/services` in the following directories: * `invokeai/app/services/model_records/` -* `invokeai/app/services/downloads/` -* `invokeai/app/services/model_loader/` * `invokeai/app/services/model_install/` - -With the exception of the install service, each of these is a thin -shell around a corresponding implementation located in -`invokeai/backend/model_manager`. The main difference between the -modules found in app services and those in the backend folder is that -the former add support for event reporting and are more tied to the -needs of the InvokeAI API. +* `invokeai/app/services/model_loader/` (**under development**) +* `invokeai/app/services/downloads/`(**under development**) Code related to the FastAPI web API can be found in -`invokeai/app/api/routers/models.py`. +`invokeai/app/api/routers/model_records.py`. *** @@ -165,10 +161,6 @@ of the fields, including `name`, `model_type` and `base_model`, are shared between `ModelConfigBase` and `ModelBase`, and this is a potential source of confusion. -** TO DO: ** The `ModelBase` code needs to be revised to reduce the -duplication of similar classes and to support using the `key` as the -primary model identifier. - ## Reading and Writing Model Configuration Records The `ModelRecordService` provides the ability to retrieve model @@ -362,7 +354,7 @@ model and pass its key to `get_model()`. Several methods allow you to create and update stored model config records. -#### add_model(key, config) -> ModelConfigBase: +#### add_model(key, config) -> AnyModelConfig: Given a key and a configuration, this will add the model's configuration record to the database. `config` can either be a subclass of @@ -386,27 +378,350 @@ fields to be updated. This will return an `AnyModelConfig` on success, or raise `InvalidModelConfigException` or `UnknownModelException` exceptions on failure. -***TO DO:*** Investigate why `update_model()` returns an -`AnyModelConfig` while `add_model()` returns a `ModelConfigBase`. - -### rename_model(key, new_name) -> ModelConfigBase: - -This is a special case of `update_model()` for the use case of -changing the model's name. It is broken out because there are cases in -which the InvokeAI application wants to synchronize the model's name -with its path in the `models` directory after changing the name, type -or base. However, when using the ModelRecordService directly, the call -is equivalent to: - -``` -store.rename_model(key, {'name': 'new_name'}) -``` - -***TO DO:*** Investigate why `rename_model()` is returning a -`ModelConfigBase` while `update_model()` returns a `AnyModelConfig`. - *** +## Model installation + +The `ModelInstallService` class implements the +`ModelInstallServiceBase` abstract base class, and provides a one-stop +shop for all your model install needs. It provides the following +functionality: + +- Registering a model config record for a model already located on the + local filesystem, without moving it or changing its path. + +- Installing a model alreadiy located on the local filesystem, by + moving it into the InvokeAI root directory under the + `models` folder (or wherever config parameter `models_dir` + specifies). + +- Probing of models to determine their type, base type and other key + information. + +- Interface with the InvokeAI event bus to provide status updates on + the download, installation and registration process. + +- Downloading a model from an arbitrary URL and installing it in + `models_dir` (_implementation pending_). + +- Special handling for Civitai model URLs which allow the user to + paste in a model page's URL or download link (_implementation pending_). + + +- Special handling for HuggingFace repo_ids to recursively download + the contents of the repository, paying attention to alternative + variants such as fp16. (_implementation pending_) + +### Initializing the installer + +A default installer is created at InvokeAI api startup time and stored +in `ApiDependencies.invoker.services.model_install` and can +also be retrieved from an invocation's `context` argument with +`context.services.model_install`. + +In the event you wish to create a new installer, you may use the +following initialization pattern: + +``` +from invokeai.app.services.config import InvokeAIAppConfig +from invokeai.app.services.model_records import ModelRecordServiceSQL +from invokeai.app.services.model_install import ModelInstallService +from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.backend.util.logging import InvokeAILogger + +config = InvokeAIAppConfig.get_config() +config.parse_args() +logger = InvokeAILogger.get_logger(config=config) +db = SqliteDatabase(config, logger) + +store = ModelRecordServiceSQL(db) +installer = ModelInstallService(config, store) +``` + +The full form of `ModelInstallService()` takes the following +required parameters: + +| **Argument** | **Type** | **Description** | +|------------------|------------------------------|------------------------------| +| `config` | InvokeAIAppConfig | InvokeAI app configuration object | +| `record_store` | ModelRecordServiceBase | Config record storage database | +| `event_bus` | EventServiceBase | Optional event bus to send download/install progress events to | + +Once initialized, the installer will provide the following methods: + +#### install_job = installer.import_model() + +The `import_model()` method is the core of the installer. The +following illustrates basic usage: + +``` +sources = [ + Path('/opt/models/sushi.safetensors'), # a local safetensors file + Path('/opt/models/sushi_diffusers/'), # a local diffusers folder + 'runwayml/stable-diffusion-v1-5', # a repo_id + 'runwayml/stable-diffusion-v1-5:vae', # a subfolder within a repo_id + 'https://civitai.com/api/download/models/63006', # a civitai direct download link + 'https://civitai.com/models/8765?modelVersionId=10638', # civitai model page + 'https://s3.amazon.com/fjacks/sd-3.safetensors', # arbitrary URL +] + +for source in sources: + install_job = installer.install_model(source) + +source2job = installer.wait_for_installs() +for source in sources: + job = source2job[source] + if job.status == "completed": + model_config = job.config_out + model_key = model_config.key + print(f"{source} installed as {model_key}") + elif job.status == "error": + print(f"{source}: {job.error_type}.\nStack trace:\n{job.error}") + +``` + +As shown here, the `import_model()` method accepts a variety of +sources, including local safetensors files, local diffusers folders, +HuggingFace repo_ids with and without a subfolder designation, +Civitai model URLs and arbitrary URLs that point to checkpoint files +(but not to folders). + +Each call to `import_model()` return a `ModelInstallJob` job, +an object which tracks the progress of the install. + +If a remote model is requested, the model's files are downloaded in +parallel across a multiple set of threads using the download +queue. During the download process, the `ModelInstallJob` is updated +to provide status and progress information. After the files (if any) +are downloaded, the remainder of the installation runs in a single +serialized background thread. These are the model probing, file +copying, and config record database update steps. + +Multiple install jobs can be queued up. You may block until all +install jobs are completed (or errored) by calling the +`wait_for_installs()` method as shown in the code +example. `wait_for_installs()` will return a `dict` that maps the +requested source to its job. This object can be interrogated +to determine its status. If the job errored out, then the error type +and details can be recovered from `job.error_type` and `job.error`. + +The full list of arguments to `import_model()` is as follows: + +| **Argument** | **Type** | **Default** | **Description** | +|------------------|------------------------------|-------------|-------------------------------------------| +| `source` | Union[str, Path, AnyHttpUrl] | | The source of the model, Path, URL or repo_id | +| `inplace` | bool | True | Leave a local model in its current location | +| `variant` | str | None | Desired variant, such as 'fp16' or 'onnx' (HuggingFace only) | +| `subfolder` | str | None | Repository subfolder (HuggingFace only) | +| `config` | Dict[str, Any] | None | Override all or a portion of model's probed attributes | +| `access_token` | str | None | Provide authorization information needed to download | + + +The `inplace` field controls how local model Paths are handled. If +True (the default), then the model is simply registered in its current +location by the installer's `ModelConfigRecordService`. Otherwise, a +copy of the model put into the location specified by the `models_dir` +application configuration parameter. + +The `variant` field is used for HuggingFace repo_ids only. If +provided, the repo_id download handler will look for and download +tensors files that follow the convention for the selected variant: + +- "fp16" will select files named "*model.fp16.{safetensors,bin}" +- "onnx" will select files ending with the suffix ".onnx" +- "openvino" will select files beginning with "openvino_model" + +In the special case of the "fp16" variant, the installer will select +the 32-bit version of the files if the 16-bit version is unavailable. + +`subfolder` is used for HuggingFace repo_ids only. If provided, the +model will be downloaded from the designated subfolder rather than the +top-level repository folder. If a subfolder is attached to the repo_id +using the format `repo_owner/repo_name:subfolder`, then the subfolder +specified by the repo_id will override the subfolder argument. + +`config` can be used to override all or a portion of the configuration +attributes returned by the model prober. See the section below for +details. + +`access_token` is passed to the download queue and used to access +repositories that require it. + +#### Monitoring the install job process + +When you create an install job with `import_model()`, it launches the +download and installation process in the background and returns a +`ModelInstallJob` object for monitoring the process. + +The `ModelInstallJob` class has the following structure: + +| **Attribute** | **Type** | **Description** | +|----------------|-----------------|------------------| +| `status` | `InstallStatus` | An enum of ["waiting", "running", "completed" and "error" | +| `config_in` | `dict` | Overriding configuration values provided by the caller | +| `config_out` | `AnyModelConfig`| After successful completion, contains the configuration record written to the database | +| `inplace` | `boolean` | True if the caller asked to install the model in place using its local path | +| `source` | `ModelSource` | The local path, remote URL or repo_id of the model to be installed | +| `local_path` | `Path` | If a remote model, holds the path of the model after it is downloaded; if a local model, same as `source` | +| `error_type` | `str` | Name of the exception that led to an error status | +| `error` | `str` | Traceback of the error | + + +If the `event_bus` argument was provided, events will also be +broadcast to the InvokeAI event bus. The events will appear on the bus +as an event of type `EventServiceBase.model_event`, a timestamp and +the following event names: + +- `model_install_started` + +The payload will contain the keys `timestamp` and `source`. The latter +indicates the requested model source for installation. + +- `model_install_progress` + +Emitted at regular intervals when downloading a remote model, the +payload will contain the keys `timestamp`, `source`, `current_bytes` +and `total_bytes`. These events are _not_ emitted when a local model +already on the filesystem is imported. + +- `model_install_completed` + +Issued once at the end of a successful installation. The payload will +contain the keys `timestamp`, `source` and `key`, where `key` is the +ID under which the model has been registered. + +- `model_install_error` + +Emitted if the installation process fails for some reason. The payload +will contain the keys `timestamp`, `source`, `error_type` and +`error`. `error_type` is a short message indicating the nature of the +error, and `error` is the long traceback to help debug the problem. + +#### Model confguration and probing + +The install service uses the `invokeai.backend.model_manager.probe` +module during import to determine the model's type, base type, and +other configuration parameters. Among other things, it assigns a +default name and description for the model based on probed +fields. + +When downloading remote models is implemented, additional +configuration information, such as list of trigger terms, will be +retrieved from the HuggingFace and Civitai model repositories. + +The probed values can be overriden by providing a dictionary in the +optional `config` argument passed to `import_model()`. You may provide +overriding values for any of the model's configuration +attributes. Here is an example of setting the +`SchedulerPredictionType` and `name` for an sd-2 model: + +This is typically used to set +the model's name and description, but can also be used to overcome +cases in which automatic probing is unable to (correctly) determine +the model's attribute. The most common situation is the +`prediction_type` field for sd-2 (and rare sd-1) models. Here is an +example of how it works: + +``` +install_job = installer.import_model( + source='stabilityai/stable-diffusion-2-1', + variant='fp16', + config=dict( + prediction_type=SchedulerPredictionType('v_prediction') + name='stable diffusion 2 base model', + ) + ) +``` + +### Other installer methods + +This section describes additional methods provided by the installer class. + +#### source2job = installer.wait_for_installs() + +Block until all pending installs are completed or errored and return a +dictionary that maps the model `source` to the completed +`ModelInstallJob`. + +#### jobs = installer.list_jobs([source]) + +Return a list of all active and complete `ModelInstallJobs`. An +optional `source` argument allows you to filter the returned list by a +model source string pattern using a partial string match. + +#### job = installer.get_job(source) + +Return the `ModelInstallJob` corresponding to the indicated model source. + +#### installer.prune_jobs + +Remove non-pending jobs (completed or errored) from the job list +returned by `list_jobs()` and `get_job()`. + +#### installer.app_config, installer.record_store, +installer.event_bus + +Properties that provide access to the installer's `InvokeAIAppConfig`, +`ModelRecordServiceBase` and `EventServiceBase` objects. + +#### key = installer.register_path(model_path, config), key = installer.install_path(model_path, config) + +These methods bypass the download queue and directly register or +install the model at the indicated path, returning the unique ID for +the installed model. + +Both methods accept a Path object corresponding to a checkpoint or +diffusers folder, and an optional dict of config attributes to use to +override the values derived from model probing. + +The difference between `register_path()` and `install_path()` is that +the former creates a model configuration record without changing the +location of the model in the filesystem. The latter makes a copy of +the model inside the InvokeAI models directory before registering +it. + +#### installer.unregister(key) + +This will remove the model config record for the model at key, and is +equivalent to `installer.record_store.del_model(key)` + +#### installer.delete(key) + +This is similar to `unregister()` but has the additional effect of +conditionally deleting the underlying model file(s) if they reside +within the InvokeAI models directory + +#### installer.unconditionally_delete(key) + +This method is similar to `unregister()`, but also unconditionally +deletes the corresponding model weights file(s), regardless of whether +they are inside or outside the InvokeAI models hierarchy. + +#### List[str]=installer.scan_directory(scan_dir: Path, install: bool) + +This method will recursively scan the directory indicated in +`scan_dir` for new models and either install them in the models +directory or register them in place, depending on the setting of +`install` (default False). + +The return value is the list of keys of the new installed/registered +models. + +#### installer.sync_to_config() + +This method synchronizes models in the models directory and autoimport +directory to those in the `ModelConfigRecordService` database. New +models are registered and orphan models are unregistered. + +#### installer.start(invoker) + +The `start` method is called by the API intialization routines when +the API starts up. Its effect is to call `sync_to_config()` to +synchronize the model record store database with what's currently on +disk. + +# The remainder of this documentation is provisional, pending implementation of the Download and Load services + ## Let's get loaded, the lowdown on ModelLoadService The `ModelLoadService` is responsible for loading a named model into @@ -863,351 +1178,3 @@ other resources that it might have been using. This will start/pause/cancel all jobs that have been submitted to the queue and have not yet reached a terminal state. -## Model installation - -The `ModelInstallService` class implements the -`ModelInstallServiceBase` abstract base class, and provides a one-stop -shop for all your model install needs. It provides the following -functionality: - -- Registering a model config record for a model already located on the - local filesystem, without moving it or changing its path. - -- Installing a model alreadiy located on the local filesystem, by - moving it into the InvokeAI root directory under the - `models` folder (or wherever config parameter `models_dir` - specifies). - -- Downloading a model from an arbitrary URL and installing it in - `models_dir`. - -- Special handling for Civitai model URLs which allow the user to - paste in a model page's URL or download link. Any metadata provided - by Civitai, such as trigger terms, are captured and placed in the - model config record. - -- Special handling for HuggingFace repo_ids to recursively download - the contents of the repository, paying attention to alternative - variants such as fp16. - -- Probing of models to determine their type, base type and other key - information. - -- Interface with the InvokeAI event bus to provide status updates on - the download, installation and registration process. - -### Initializing the installer - -A default installer is created at InvokeAI api startup time and stored -in `ApiDependencies.invoker.services.model_install_service` and can -also be retrieved from an invocation's `context` argument with -`context.services.model_install_service`. - -In the event you wish to create a new installer, you may use the -following initialization pattern: - -``` -from invokeai.app.services.config import InvokeAIAppConfig -from invokeai.app.services.download_manager import DownloadQueueServive -from invokeai.app.services.model_record_service import ModelRecordServiceBase - -config = InvokeAI.get_config() -queue = DownloadQueueService() -store = ModelRecordServiceBase.open(config) -installer = ModelInstallService(config=config, queue=queue, store=store) -``` - -The full form of `ModelInstallService()` takes the following -parameters. Each parameter will default to a reasonable value, but it -is recommended that you set them explicitly as shown in the above example. - -| **Argument** | **Type** | **Default** | **Description** | -|------------------|------------------------------|-------------|-------------------------------------------| -| `config` | InvokeAIAppConfig | Use system-wide config | InvokeAI app configuration object | -| `queue` | DownloadQueueServiceBase | Create a new download queue for internal use | Download queue | -| `store` | ModelRecordServiceBase | Use config to select the database to open | Config storage database | -| `event_bus` | EventServiceBase | None | An event bus to send download/install progress events to | -| `event_handlers` | List[DownloadEventHandler] | None | Event handlers for the download queue | - -Note that if `store` is not provided, then the class will use -`ModelRecordServiceBase.open(config)` to select the database to use. - -Once initialized, the installer will provide the following methods: - -#### install_job = installer.install_model() - -The `install_model()` method is the core of the installer. The -following illustrates basic usage: - -``` -sources = [ - Path('/opt/models/sushi.safetensors'), # a local safetensors file - Path('/opt/models/sushi_diffusers/'), # a local diffusers folder - 'runwayml/stable-diffusion-v1-5', # a repo_id - 'runwayml/stable-diffusion-v1-5:vae', # a subfolder within a repo_id - 'https://civitai.com/api/download/models/63006', # a civitai direct download link - 'https://civitai.com/models/8765?modelVersionId=10638', # civitai model page - 'https://s3.amazon.com/fjacks/sd-3.safetensors', # arbitrary URL -] - -for source in sources: - install_job = installer.install_model(source) - -source2key = installer.wait_for_installs() -for source in sources: - model_key = source2key[source] - print(f"{source} installed as {model_key}") -``` - -As shown here, the `install_model()` method accepts a variety of -sources, including local safetensors files, local diffusers folders, -HuggingFace repo_ids with and without a subfolder designation, -Civitai model URLs and arbitrary URLs that point to checkpoint files -(but not to folders). - -Each call to `install_model()` will return a `ModelInstallJob` job, a -subclass of `DownloadJobBase`. The install job has additional -install-specific fields described in the next section. - -Each install job will run in a series of background threads using -the object's download queue. You may block until all install jobs are -completed (or errored) by calling the `wait_for_installs()` method as -shown in the code example. `wait_for_installs()` will return a `dict` -that maps the requested source to the key of the installed model. In -the case that a model fails to download or install, its value in the -dict will be None. The actual cause of the error will be reported in -the corresponding job's `error` field. - -Alternatively you may install event handlers and/or listen for events -on the InvokeAI event bus in order to monitor the progress of the -requested installs. - -The full list of arguments to `model_install()` is as follows: - -| **Argument** | **Type** | **Default** | **Description** | -|------------------|------------------------------|-------------|-------------------------------------------| -| `source` | Union[str, Path, AnyHttpUrl] | | The source of the model, Path, URL or repo_id | -| `inplace` | bool | True | Leave a local model in its current location | -| `variant` | str | None | Desired variant, such as 'fp16' or 'onnx' (HuggingFace only) | -| `subfolder` | str | None | Repository subfolder (HuggingFace only) | -| `probe_override` | Dict[str, Any] | None | Override all or a portion of model's probed attributes | -| `metadata` | ModelSourceMetadata | None | Provide metadata that will be added to model's config | -| `access_token` | str | None | Provide authorization information needed to download | -| `priority` | int | 10 | Download queue priority for the job | - - -The `inplace` field controls how local model Paths are handled. If -True (the default), then the model is simply registered in its current -location by the installer's `ModelConfigRecordService`. Otherwise, the -model will be moved into the location specified by the `models_dir` -application configuration parameter. - -The `variant` field is used for HuggingFace repo_ids only. If -provided, the repo_id download handler will look for and download -tensors files that follow the convention for the selected variant: - -- "fp16" will select files named "*model.fp16.{safetensors,bin}" -- "onnx" will select files ending with the suffix ".onnx" -- "openvino" will select files beginning with "openvino_model" - -In the special case of the "fp16" variant, the installer will select -the 32-bit version of the files if the 16-bit version is unavailable. - -`subfolder` is used for HuggingFace repo_ids only. If provided, the -model will be downloaded from the designated subfolder rather than the -top-level repository folder. If a subfolder is attached to the repo_id -using the format `repo_owner/repo_name:subfolder`, then the subfolder -specified by the repo_id will override the subfolder argument. - -`probe_override` can be used to override all or a portion of the -attributes returned by the model prober. This can be used to overcome -cases in which automatic probing is unable to (correctly) determine -the model's attribute. The most common situation is the -`prediction_type` field for sd-2 (and rare sd-1) models. Here is an -example of how it works: - -``` -install_job = installer.install_model( - source='stabilityai/stable-diffusion-2-1', - variant='fp16', - probe_override=dict( - prediction_type=SchedulerPredictionType('v_prediction') - ) - ) -``` - -`metadata` allows you to attach custom metadata to the installed -model. See the next section for details. - -`priority` and `access_token` are passed to the download queue and -have the same effect as they do for the DownloadQueueServiceBase. - -#### Monitoring the install job process - -When you create an install job with `model_install()`, events will be -passed to the list of `DownloadEventHandlers` provided at installer -initialization time. Event handlers can also be added to individual -model install jobs by calling their `add_handler()` method as -described earlier for the `DownloadQueueService`. - -If the `event_bus` argument was provided, events will also be -broadcast to the InvokeAI event bus. The events will appear on the bus -as a singular event type named `model_event` with a payload of -`job`. You can then retrieve the job and check its status. - -** TO DO: ** consider breaking `model_event` into -`model_install_started`, `model_install_completed`, etc. The event bus -features have not yet been tested with FastAPI/websockets, and it may -turn out that the job object is not serializable. - -#### Model metadata and probing - -The install service has special handling for HuggingFace and Civitai -URLs that capture metadata from the source and include it in the model -configuration record. For example, fetching the Civitai model 8765 -will produce a config record similar to this (using YAML -representation): - -``` -5abc3ef8600b6c1cc058480eaae3091e: - path: sd-1/lora/to8contrast-1-5.safetensors - name: to8contrast-1-5 - base_model: sd-1 - model_type: lora - model_format: lycoris - key: 5abc3ef8600b6c1cc058480eaae3091e - hash: 5abc3ef8600b6c1cc058480eaae3091e - description: 'Trigger terms: to8contrast style' - author: theovercomer8 - license: allowCommercialUse=Sell; allowDerivatives=True; allowNoCredit=True - source: https://civitai.com/models/8765?modelVersionId=10638 - thumbnail_url: null - tags: - - model - - style - - portraits -``` - -For sources that do not provide model metadata, you can attach custom -fields by providing a `metadata` argument to `model_install()` using -an initialized `ModelSourceMetadata` object (available for import from -`model_install_service.py`): - -``` -from invokeai.app.services.model_install_service import ModelSourceMetadata -meta = ModelSourceMetadata( - name="my model", - author="Sushi Chef", - description="Highly customized model; trigger with 'sushi'," - license="mit", - thumbnail_url="http://s3.amazon.com/ljack/pics/sushi.png", - tags=list('sfw', 'food') - ) -install_job = installer.install_model( - source='sushi_chef/model3', - variant='fp16', - metadata=meta, - ) -``` - -It is not currently recommended to provide custom metadata when -installing from Civitai or HuggingFace source, as the metadata -provided by the source will overwrite the fields you provide. Instead, -after the model is installed you can use -`ModelRecordService.update_model()` to change the desired fields. - -** TO DO: ** Change the logic so that the caller's metadata fields take -precedence over those provided by the source. - - -#### Other installer methods - -This section describes additional, less-frequently-used attributes and -methods provided by the installer class. - -##### installer.wait_for_installs() - -This is equivalent to the `DownloadQueue` `join()` method. It will -block until all the active jobs in the install queue have reached a -terminal state (completed, errored or cancelled). - -##### installer.queue, installer.store, installer.config - -These attributes provide access to the `DownloadQueueServiceBase`, -`ModelConfigRecordServiceBase`, and `InvokeAIAppConfig` objects that -the installer uses. - -For example, to temporarily pause all pending installations, you can -do this: - -``` -installer.queue.pause_all_jobs() -``` -##### key = installer.register_path(model_path, overrides), key = installer.install_path(model_path, overrides) - -These methods bypass the download queue and directly register or -install the model at the indicated path, returning the unique ID for -the installed model. - -Both methods accept a Path object corresponding to a checkpoint or -diffusers folder, and an optional dict of attributes to use to -override the values derived from model probing. - -The difference between `register_path()` and `install_path()` is that -the former will not move the model from its current position, while -the latter will move it into the `models_dir` hierarchy. - -##### installer.unregister(key) - -This will remove the model config record for the model at key, and is -equivalent to `installer.store.unregister(key)` - -##### installer.delete(key) - -This is similar to `unregister()` but has the additional effect of -deleting the underlying model file(s) -- even if they were outside the -`models_dir` directory! - -##### installer.conditionally_delete(key) - -This method will call `unregister()` if the model identified by `key` -is outside the `models_dir` hierarchy, and call `delete()` if the -model is inside. - -#### List[str]=installer.scan_directory(scan_dir: Path, install: bool) - -This method will recursively scan the directory indicated in -`scan_dir` for new models and either install them in the models -directory or register them in place, depending on the setting of -`install` (default False). - -The return value is the list of keys of the new installed/registered -models. - -#### installer.scan_models_directory() - -This method scans the models directory for new models and registers -them in place. Models that are present in the -`ModelConfigRecordService` database whose paths are not found will be -unregistered. - -#### installer.sync_to_config() - -This method synchronizes models in the models directory and autoimport -directory to those in the `ModelConfigRecordService` database. New -models are registered and orphan models are unregistered. - -#### hash=installer.hash(model_path) - -This method is calls the fasthash algorithm on a model's Path -(either a file or a folder) to generate a unique ID based on the -contents of the model. - -##### installer.start(invoker) - -The `start` method is called by the API intialization routines when -the API starts up. Its effect is to call `sync_to_config()` to -synchronize the model record store database with what's currently on -disk. - -This method should not ordinarily be called manually. diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 1a4b574f75..9ba6a42554 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -23,9 +23,9 @@ from ..services.invoker import Invoker from ..services.item_storage.item_storage_sqlite import SqliteItemStorage from ..services.latents_storage.latents_storage_disk import DiskLatentsStorage from ..services.latents_storage.latents_storage_forward_cache import ForwardCacheLatentsStorage +from ..services.model_install import ModelInstallService from ..services.model_manager.model_manager_default import ModelManagerService from ..services.model_records import ModelRecordServiceSQL -from ..services.model_install import ModelInstallService from ..services.names.names_default import SimpleNameService from ..services.session_processor.session_processor_default import DefaultSessionProcessor from ..services.session_queue.session_queue_sqlite import SqliteSessionQueue diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 1de5b47d24..505d998bc2 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -4,7 +4,7 @@ from hashlib import sha1 from random import randbytes -from typing import List, Optional, Any, Dict +from typing import Any, Dict, List, Optional from fastapi import Body, Path, Query, Response from fastapi.routing import APIRouter @@ -12,6 +12,7 @@ from pydantic import BaseModel, ConfigDict from starlette.exceptions import HTTPException from typing_extensions import Annotated +from invokeai.app.services.model_install import ModelInstallJob, ModelSource from invokeai.app.services.model_records import ( DuplicateModelException, InvalidModelException, @@ -22,11 +23,10 @@ from invokeai.backend.model_manager.config import ( BaseModelType, ModelType, ) -from invokeai.app.services.model_install import ModelInstallJob, ModelSource from ..dependencies import ApiDependencies -model_records_router = APIRouter(prefix="/v1/model/record", tags=["models"]) +model_records_router = APIRouter(prefix="/v1/model/record", tags=["model_manager_v2"]) class ModelsList(BaseModel): @@ -44,15 +44,16 @@ class ModelsList(BaseModel): async def list_model_records( base_models: Optional[List[BaseModelType]] = Query(default=None, description="Base models to include"), model_type: Optional[ModelType] = Query(default=None, description="The type of model to get"), + model_name: Optional[str] = Query(default=None, description="Exact match on the name of the model"), ) -> ModelsList: """Get a list of models.""" record_store = ApiDependencies.invoker.services.model_records found_models: list[AnyModelConfig] = [] if base_models: for base_model in base_models: - found_models.extend(record_store.search_by_attr(base_model=base_model, model_type=model_type)) + found_models.extend(record_store.search_by_attr(base_model=base_model, model_type=model_type, model_name=model_name)) else: - found_models.extend(record_store.search_by_attr(model_type=model_type)) + found_models.extend(record_store.search_by_attr(model_type=model_type, model_name=model_name)) return ModelsList(models=found_models) @@ -118,12 +119,17 @@ async def update_model_record( async def del_model_record( key: str = Path(description="Unique key of model to remove from model registry."), ) -> Response: - """Delete Model""" + """ + Delete model record from database. + + The configuration record will be removed. The corresponding weights files will be + deleted as well if they reside within the InvokeAI "models" directory. + """ logger = ApiDependencies.invoker.services.logger try: - record_store = ApiDependencies.invoker.services.model_records - record_store.del_model(key) + installer = ApiDependencies.invoker.services.model_install + installer.delete(key) logger.info(f"Deleted model: {key}") return Response(status_code=204) except UnknownModelException as e: @@ -181,8 +187,8 @@ async def import_model( source: ModelSource = Body( description="A model path, repo_id or URL to import. NOTE: only model path is implemented currently!" ), - metadata: Optional[Dict[str, Any]] = Body( - description="Dict of fields that override auto-probed values, such as name, description and prediction_type ", + config: Optional[Dict[str, Any]] = Body( + description="Dict of fields that override auto-probed values in the model config record, such as name, description and prediction_type ", default=None, ), variant: Optional[str] = Body( @@ -208,9 +214,14 @@ async def import_model( automatically. To override the default guesses, pass "metadata" with a Dict containing the attributes you wish to override. - Listen on the event bus for the following events: - "model_install_started", "model_install_completed", and "model_install_error." - On successful completion, the event's payload will contain the field "key" + Installation occurs in the background. Either use list_model_install_jobs() + to poll for completion, or listen on the event bus for the following events: + + "model_install_started" + "model_install_completed" + "model_install_error" + + On successful completion, the event's payload will contain the field "key" containing the installed ID of the model. On an error, the event's payload will contain the fields "error_type" and "error" describing the nature of the error and its traceback, respectively. @@ -222,11 +233,12 @@ async def import_model( installer = ApiDependencies.invoker.services.model_install result: ModelInstallJob = installer.import_model( source, - metadata=metadata, + config=config, variant=variant, subfolder=subfolder, access_token=access_token, ) + logger.info(f"Started installation of {source}") except UnknownModelException as e: logger.error(str(e)) raise HTTPException(status_code=404, detail=str(e)) @@ -242,7 +254,7 @@ async def import_model( "/import", operation_id="list_model_install_jobs", ) -async def list_install_jobs( +async def list_model_install_jobs( source: Optional[str] = Query(description="Filter list by install source, partial string match.", default=None, ) @@ -255,3 +267,36 @@ async def list_install_jobs( """ jobs: List[ModelInstallJob] = ApiDependencies.invoker.services.model_install.list_jobs(source) return jobs + +@model_records_router.patch( + "/import", + operation_id="prune_model_install_jobs", + responses={ + 204: {"description": "All completed and errored jobs have been pruned"}, + 400: {"description": "Bad request"}, + }, +) +async def prune_model_install_jobs( +) -> Response: + """ + Prune all completed and errored jobs from the install job list. + """ + ApiDependencies.invoker.services.model_install.prune_jobs() + return Response(status_code=204) + +@model_records_router.patch( + "/sync", + operation_id="sync_models_to_config", + responses={ + 204: {"description": "Model config record database resynced with files on disk"}, + 400: {"description": "Bad request"}, + }, +) +async def sync_models_to_config( +) -> Response: + """ + Traverse the models and autoimport directories. Model files without a corresponding + record in the database are added. Orphan records without a models file are deleted. + """ + ApiDependencies.invoker.services.model_install.sync_to_config() + return Response(status_code=204) diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index 39ce598929..e46c30e755 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -351,6 +351,29 @@ class EventServiceBase: }, ) + def emit_model_install_progress(self, + source: str, + current_bytes: int, + total_bytes: int, + ) -> None: + """ + Emitted while the install job is in progress. + (Downloaded models only) + + :param source: Source of the model + :param current_bytes: Number of bytes downloaded so far + :param total_bytes: Total bytes to download + """ + self.__emit_model_event( + event_name="model_install_progress", + payload={ + "source": source, + "current_bytes": int, + "total_bytes": int, + }, + ) + + def emit_model_install_error(self, source: str, error_type: str, diff --git a/invokeai/app/services/invocation_services.py b/invokeai/app/services/invocation_services.py index 21bbd61679..77e1461888 100644 --- a/invokeai/app/services/invocation_services.py +++ b/invokeai/app/services/invocation_services.py @@ -21,9 +21,9 @@ if TYPE_CHECKING: from .invocation_stats.invocation_stats_base import InvocationStatsServiceBase from .item_storage.item_storage_base import ItemStorageABC from .latents_storage.latents_storage_base import LatentsStorageBase + from .model_install import ModelInstallServiceBase from .model_manager.model_manager_base import ModelManagerServiceBase from .model_records import ModelRecordServiceBase - from .model_install import ModelInstallServiceBase from .names.names_base import NameServiceBase from .session_processor.session_processor_base import SessionProcessorBase from .session_queue.session_queue_base import SessionQueueBase @@ -52,7 +52,7 @@ class InvocationServices: logger: "Logger" model_manager: "ModelManagerServiceBase" model_records: "ModelRecordServiceBase" - model_install: "ModelRecordInstallServiceBase" + model_install: "ModelInstallServiceBase" processor: "InvocationProcessorABC" performance_statistics: "InvocationStatsServiceBase" queue: "InvocationQueueABC" diff --git a/invokeai/app/services/model_install/__init__.py b/invokeai/app/services/model_install/__init__.py index 0706c8cf68..e45a15f503 100644 --- a/invokeai/app/services/model_install/__init__.py +++ b/invokeai/app/services/model_install/__init__.py @@ -1,6 +1,12 @@ """Initialization file for model install service package.""" -from .model_install_base import InstallStatus, ModelInstallServiceBase, ModelInstallJob, UnknownInstallJobException, ModelSource +from .model_install_base import ( + InstallStatus, + ModelInstallJob, + ModelInstallServiceBase, + ModelSource, + UnknownInstallJobException, +) from .model_install_default import ModelInstallService __all__ = ['ModelInstallServiceBase', diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index c333639bda..5212443b68 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -9,7 +9,9 @@ from pydantic.networks import AnyHttpUrl from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events import EventServiceBase +from invokeai.app.services.invoker import Invoker from invokeai.app.services.model_records import ModelRecordServiceBase +from invokeai.backend.model_manager import AnyModelConfig class InstallStatus(str, Enum): @@ -31,13 +33,13 @@ ModelSource = Union[str, Path, AnyHttpUrl] class ModelInstallJob(BaseModel): """Object that tracks the current status of an install request.""" status: InstallStatus = Field(default=InstallStatus.WAITING, description="Current status of install process") - metadata: Dict[str, Any] = Field(default_factory=dict, description="Configuration metadata to apply to model before installing it") + config_in: Dict[str, Any] = Field(default_factory=dict, description="Configuration information (e.g. 'description') to apply to model.") + config_out: Optional[AnyModelConfig] = Field(default=None, description="After successful installation, this will hold the configuration object.") inplace: bool = Field(default=False, description="Leave model in its current location; otherwise install under models directory") source: ModelSource = Field(description="Source (URL, repo_id, or local path) of model") local_path: Path = Field(description="Path to locally-downloaded model; may be the same as the source") - key: str = Field(default="", description="After model is installed, this is its config record key") - error_type: str = Field(default="", description="Class name of the exception that led to status==ERROR") - error: str = Field(default="", description="Error traceback") # noqa #501 + error_type: Optional[str] = Field(default=None, description="Class name of the exception that led to status==ERROR") + error: Optional[str] = Field(default=None, description="Error traceback") # noqa #501 def set_error(self, e: Exception) -> None: """Record the error and traceback from an exception.""" @@ -64,6 +66,9 @@ class ModelInstallServiceBase(ABC): :param event_bus: InvokeAI event bus for reporting events to. """ + def start(self, invoker: Invoker) -> None: + self.sync_to_config() + @property @abstractmethod def app_config(self) -> InvokeAIAppConfig: @@ -83,7 +88,7 @@ class ModelInstallServiceBase(ABC): def register_path( self, model_path: Union[Path, str], - metadata: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, ) -> str: """ Probe and register the model at model_path. @@ -91,7 +96,7 @@ class ModelInstallServiceBase(ABC): This keeps the model in its current location. :param model_path: Filesystem Path to the model. - :param metadata: Dict of attributes that will override autoassigned values. + :param config: Dict of attributes that will override autoassigned values. :returns id: The string ID of the registered model. """ @@ -111,7 +116,7 @@ class ModelInstallServiceBase(ABC): def install_path( self, model_path: Union[Path, str], - metadata: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, ) -> str: """ Probe, register and install the model in the models directory. @@ -120,7 +125,7 @@ class ModelInstallServiceBase(ABC): the models directory handled by InvokeAI. :param model_path: Filesystem Path to the model. - :param metadata: Dict of attributes that will override autoassigned values. + :param config: Dict of attributes that will override autoassigned values. :returns id: The string ID of the registered model. """ @@ -128,10 +133,10 @@ class ModelInstallServiceBase(ABC): def import_model( self, source: Union[str, Path, AnyHttpUrl], - inplace: bool = True, + inplace: bool = False, variant: Optional[str] = None, subfolder: Optional[str] = None, - metadata: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, access_token: Optional[str] = None, ) -> ModelInstallJob: """Install the indicated model. @@ -147,8 +152,9 @@ class ModelInstallServiceBase(ABC): :param subfolder: When downloading HF repo_ids this can be used to specify a subfolder of the HF repository to download from. - :param metadata: Optional dict. Any fields in this dict - will override corresponding autoassigned probe fields. Use it to override + :param config: Optional dict. Any fields in this dict + will override corresponding autoassigned probe fields in the + model's config record. Use it to override `name`, `description`, `base_type`, `model_type`, `format`, `prediction_type`, `image_size`, and/or `ztsnr_training`. diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 0036ea6aa5..c67b8feb59 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -5,26 +5,30 @@ from hashlib import sha256 from pathlib import Path from queue import Queue from random import randbytes -from shutil import move, rmtree -from typing import Any, Dict, List, Set, Optional, Union - -from pydantic.networks import AnyHttpUrl +from shutil import copyfile, copytree, move, rmtree +from typing import Any, Dict, List, Optional, Set, Union from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events import EventServiceBase -from invokeai.app.services.model_records import ModelRecordServiceBase, DuplicateModelException +from invokeai.app.services.model_records import DuplicateModelException, ModelRecordServiceBase, UnknownModelException from invokeai.backend.model_manager.config import ( AnyModelConfig, + BaseModelType, InvalidModelConfigException, + ModelType, ) -from invokeai.backend.model_manager.config import ModelType, BaseModelType from invokeai.backend.model_manager.hash import FastModelHash from invokeai.backend.model_manager.probe import ModelProbe from invokeai.backend.model_manager.search import ModelSearch from invokeai.backend.util import Chdir, InvokeAILogger -from .model_install_base import ModelSource, InstallStatus, ModelInstallJob, ModelInstallServiceBase, UnknownInstallJobException - +from .model_install_base import ( + InstallStatus, + ModelInstallJob, + ModelInstallServiceBase, + ModelSource, + UnknownInstallJobException, +) # marker that the queue is done and that thread should exit STOP_JOB = ModelInstallJob(source="stop", local_path=Path("/dev/null")) @@ -91,10 +95,12 @@ class ModelInstallService(ModelInstallServiceBase): try: self._signal_job_running(job) if job.inplace: - job.key = self.register_path(job.local_path, job.metadata) + key = self.register_path(job.local_path, job.config_in) else: - job.key = self.install_path(job.local_path, job.metadata) + key = self.install_path(job.local_path, job.config_in) + job.config_out = self.record_store.get_model(key) self._signal_job_completed(job) + except (OSError, DuplicateModelException, InvalidModelConfigException) as excp: self._signal_job_errored(job, excp) finally: @@ -109,67 +115,73 @@ class ModelInstallService(ModelInstallServiceBase): job.status = InstallStatus.COMPLETED if self._event_bus: assert job.local_path is not None - self._event_bus.emit_model_install_completed(str(job.source), job.key) + assert job.config_out is not None + key = job.config_out.key + self._event_bus.emit_model_install_completed(str(job.source), key) def _signal_job_errored(self, job: ModelInstallJob, excp: Exception) -> None: job.set_error(excp) if self._event_bus: - self._event_bus.emit_model_install_error(str(job.source), job.error_type, job.error) + error_type = job.error_type + error = job.error + assert error_type is not None + assert error is not None + self._event_bus.emit_model_install_error(str(job.source), error_type, error) def register_path( self, model_path: Union[Path, str], - metadata: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, ) -> str: # noqa D102 model_path = Path(model_path) - metadata = metadata or {} - if metadata.get('source') is None: - metadata['source'] = model_path.resolve().as_posix() - return self._register(model_path, metadata) + config = config or {} + if config.get('source') is None: + config['source'] = model_path.resolve().as_posix() + return self._register(model_path, config) def install_path( self, model_path: Union[Path, str], - metadata: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, ) -> str: # noqa D102 model_path = Path(model_path) - metadata = metadata or {} - if metadata.get('source') is None: - metadata['source'] = model_path.resolve().as_posix() + config = config or {} + if config.get('source') is None: + config['source'] = model_path.resolve().as_posix() - info: AnyModelConfig = self._probe_model(Path(model_path), metadata) + info: AnyModelConfig = self._probe_model(Path(model_path), config) old_hash = info.original_hash dest_path = self.app_config.models_path / info.base.value / info.type.value / model_path.name - new_path = self._move_model(model_path, dest_path) + new_path = self._copy_model(model_path, dest_path) new_hash = FastModelHash.hash(new_path) assert new_hash == old_hash, f"{model_path}: Model hash changed during installation, possibly corrupted." return self._register( new_path, - metadata, + config, info, ) def import_model( self, source: ModelSource, - inplace: bool = True, + inplace: bool = False, variant: Optional[str] = None, subfolder: Optional[str] = None, - metadata: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, access_token: Optional[str] = None, ) -> ModelInstallJob: # noqa D102 # Clean up a common source of error. Doesn't work with Paths. if isinstance(source, str): source = source.strip() - if not metadata: - metadata = {} + if not config: + config = {} # Installing a local path if isinstance(source, (str, Path)) and Path(source).exists(): # a path that is already on disk - job = ModelInstallJob(metadata=metadata, + job = ModelInstallJob(config_in=config, source=source, inplace=inplace, local_path=Path(source), @@ -179,7 +191,7 @@ class ModelInstallService(ModelInstallServiceBase): return job else: # here is where we'd download a URL or repo_id. Implementation pending download queue. - raise NotImplementedError + raise UnknownModelException("File or directory not found") def list_jobs(self, source: Optional[ModelSource]=None) -> List[ModelInstallJob]: # noqa D102 jobs = self._install_jobs @@ -212,7 +224,9 @@ class ModelInstallService(ModelInstallServiceBase): self._scan_models_directory() if autoimport := self._app_config.autoimport_dir: self._logger.info("Scanning autoimport directory for new models") - self.scan_directory(self._app_config.root_path / autoimport) + installed = self.scan_directory(self._app_config.root_path / autoimport) + self._logger.info(f"{len(installed)} new models registered") + self._logger.info("Model installer (re)initialized") def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: # noqa D102 self._cached_model_paths = {Path(x.path) for x in self.record_store.all_models()} @@ -242,7 +256,7 @@ class ModelInstallService(ModelInstallServiceBase): for key in defunct_models: self.unregister(key) - self._logger.info(f"Scanning {self._app_config.models_path} for new models") + self._logger.info(f"Scanning {self._app_config.models_path} for new and orphaned models") for cur_base_model in BaseModelType: for cur_model_type in ModelType: models_dir = Path(cur_base_model.value, cur_model_type.value) @@ -328,6 +342,16 @@ class ModelInstallService(ModelInstallServiceBase): path.unlink() self.unregister(key) + def _copy_model(self, old_path: Path, new_path: Path) -> Path: + if old_path == new_path: + return old_path + new_path.parent.mkdir(parents=True, exist_ok=True) + if old_path.is_dir(): + copytree(old_path, new_path) + else: + copyfile(old_path, new_path) + return new_path + def _move_model(self, old_path: Path, new_path: Path) -> Path: if old_path == new_path: return old_path @@ -344,10 +368,10 @@ class ModelInstallService(ModelInstallServiceBase): move(old_path, new_path) return new_path - def _probe_model(self, model_path: Path, metadata: Optional[Dict[str, Any]] = None) -> AnyModelConfig: + def _probe_model(self, model_path: Path, config: Optional[Dict[str, Any]] = None) -> AnyModelConfig: info: AnyModelConfig = ModelProbe.probe(Path(model_path)) - if metadata: # used to override probe fields - for key, value in metadata.items(): + if config: # used to override probe fields + for key, value in config.items(): setattr(info, key, value) return info @@ -356,10 +380,10 @@ class ModelInstallService(ModelInstallServiceBase): def _register(self, model_path: Path, - metadata: Optional[Dict[str, Any]] = None, + config: Optional[Dict[str, Any]] = None, info: Optional[AnyModelConfig] = None) -> str: - info = info or ModelProbe.probe(model_path, metadata) + info = info or ModelProbe.probe(model_path, config) key = self._create_key() model_path = model_path.absolute() diff --git a/invokeai/backend/model_manager/__init__.py b/invokeai/backend/model_manager/__init__.py index 10b8d2d32a..5988dfb686 100644 --- a/invokeai/backend/model_manager/__init__.py +++ b/invokeai/backend/model_manager/__init__.py @@ -1,17 +1,17 @@ """Re-export frequently-used symbols from the Model Manager backend.""" -from .probe import ModelProbe from .config import ( + AnyModelConfig, + BaseModelType, InvalidModelConfigException, ModelConfigFactory, - BaseModelType, - ModelType, - SubModelType, - ModelVariantType, ModelFormat, + ModelType, + ModelVariantType, SchedulerPredictionType, - AnyModelConfig, + SubModelType, ) +from .probe import ModelProbe from .search import ModelSearch __all__ = ['ModelProbe', 'ModelSearch', diff --git a/invokeai/backend/util/__init__.py b/invokeai/backend/util/__init__.py index ac303b6b3d..800a10614c 100644 --- a/invokeai/backend/util/__init__.py +++ b/invokeai/backend/util/__init__.py @@ -11,7 +11,7 @@ from .devices import ( # noqa: F401 normalize_device, torch_dtype, ) -from .util import Chdir, ask_user, download_with_resume, instantiate_from_config, url_attachment_name # noqa: F401 from .logging import InvokeAILogger +from .util import Chdir, ask_user, download_with_resume, instantiate_from_config, url_attachment_name # noqa: F401 __all__ = ['Chdir', 'InvokeAILogger', 'choose_precision', 'choose_torch_device'] diff --git a/mkdocs.yml b/mkdocs.yml index bb6d6b16dc..d030e3d6fc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -164,6 +164,7 @@ nav: - Overview: 'contributing/contribution_guides/development.md' - New Contributors: 'contributing/contribution_guides/newContributorChecklist.md' - InvokeAI Architecture: 'contributing/ARCHITECTURE.md' + - Model Manager v2: 'contributing/MODEL_MANAGER.md' - Frontend Documentation: 'contributing/contribution_guides/contributingToFrontend.md' - Local Development: 'contributing/LOCAL_DEVELOPMENT.md' - Adding Tests: 'contributing/TESTS.md' diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 304b8e34c1..7fefe4ed3a 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -127,7 +127,7 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, """Note: may want to break this down into several smaller unit tests.""" source = test_file description = "Test of metadata assignment" - job = installer.import_model(source, inplace=False, metadata={"description": description}) + job = installer.import_model(source, inplace=False, config={"description": description}) assert job is not None assert isinstance(job, ModelInstallJob) @@ -172,9 +172,10 @@ def test_delete_install(installer: ModelInstallServiceBase, test_file: Path, app key = installer.install_path(test_file) model_record = store.get_model(key) assert Path(app_config.models_dir / model_record.path).exists() - assert not test_file.exists() # original should not still be there after installation + assert test_file.exists() # original should still be there after installation installer.delete(key) - assert not Path(app_config.models_dir / model_record.path).exists() # but installed copy should not! + assert not Path(app_config.models_dir / model_record.path).exists() # after deletion, installed copy should not exist + assert test_file.exists() # but original should still be there with pytest.raises(UnknownModelException): store.get_model(key) From 8f4f4d48d5b76eac2f34b104d6aea45275d2b6ba Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 26 Nov 2023 13:37:47 -0500 Subject: [PATCH 010/515] fix import unsorted import block issues in the tests --- scripts/probe-model.py | 4 +--- tests/app/services/model_install/test_model_install.py | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/scripts/probe-model.py b/scripts/probe-model.py index c8b6324302..8518b76437 100755 --- a/scripts/probe-model.py +++ b/scripts/probe-model.py @@ -5,9 +5,7 @@ import argparse from pathlib import Path -from invokeai.backend.model_manager import ModelProbe, InvalidModelConfigException - - +from invokeai.backend.model_manager import InvalidModelConfigException, ModelProbe parser = argparse.ArgumentParser(description="Probe model type") parser.add_argument( diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 7fefe4ed3a..67278a2a0b 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -3,18 +3,18 @@ Test the model installer """ from pathlib import Path -from typing import List, Any, Dict +from typing import Any, Dict, List import pytest -from pydantic import ValidationError, BaseModel +from pydantic import BaseModel, ValidationError from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events.events_base import EventServiceBase from invokeai.app.services.model_install import ( - ModelInstallService, - ModelInstallServiceBase, InstallStatus, ModelInstallJob, + ModelInstallService, + ModelInstallServiceBase, UnknownInstallJobException, ) from invokeai.app.services.model_records import ModelRecordServiceBase, ModelRecordServiceSQL, UnknownModelException From 8ef596eac78039672ef03dd92e90568a015a84aa Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 26 Nov 2023 17:13:31 -0500 Subject: [PATCH 011/515] further changes for ruff --- invokeai/app/api/dependencies.py | 4 +- invokeai/app/api/routers/model_records.py | 58 ++++++----- invokeai/app/api/sockets.py | 6 +- invokeai/app/services/config/__init__.py | 2 +- invokeai/app/services/events/events_base.py | 27 +++-- .../app/services/model_install/__init__.py | 15 +-- .../model_install/model_install_base.py | 55 ++++++----- .../model_install/model_install_default.py | 98 +++++++++---------- .../app/services/model_records/__init__.py | 10 +- .../backend/model_management/model_probe.py | 6 +- invokeai/backend/model_manager/__init__.py | 25 ++--- invokeai/backend/model_manager/probe.py | 90 ++++++++++------- invokeai/backend/model_manager/search.py | 16 +-- invokeai/backend/util/__init__.py | 2 +- .../model_install/test_model_install.py | 43 ++++---- 15 files changed, 245 insertions(+), 212 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 9ba6a42554..e59b88dc7c 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -88,7 +88,9 @@ class ApiDependencies: latents = ForwardCacheLatentsStorage(DiskLatentsStorage(f"{output_folder}/latents")) model_manager = ModelManagerService(config, logger) model_record_service = ModelRecordServiceSQL(db=db) - model_install_service = ModelInstallService(app_config=config, record_store=model_record_service, event_bus=events) + model_install_service = ModelInstallService( + app_config=config, record_store=model_record_service, event_bus=events + ) names = SimpleNameService() performance_statistics = InvocationStatsService() processor = DefaultInvocationProcessor() diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 505d998bc2..90c58db3a1 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -51,7 +51,9 @@ async def list_model_records( found_models: list[AnyModelConfig] = [] if base_models: for base_model in base_models: - found_models.extend(record_store.search_by_attr(base_model=base_model, model_type=model_type, model_name=model_name)) + found_models.extend( + record_store.search_by_attr(base_model=base_model, model_type=model_type, model_name=model_name) + ) else: found_models.extend(record_store.search_by_attr(model_type=model_type, model_name=model_name)) return ModelsList(models=found_models) @@ -184,25 +186,25 @@ async def add_model_record( status_code=201, ) async def import_model( - source: ModelSource = Body( - description="A model path, repo_id or URL to import. NOTE: only model path is implemented currently!" - ), - config: Optional[Dict[str, Any]] = Body( - description="Dict of fields that override auto-probed values in the model config record, such as name, description and prediction_type ", - default=None, - ), - variant: Optional[str] = Body( - description="When fetching a repo_id, force variant type to fetch such as 'fp16'", - default=None, - ), - subfolder: Optional[str] = Body( - description="When fetching a repo_id, specify subfolder to fetch model from", - default=None, - ), - access_token: Optional[str] = Body( - description="When fetching a repo_id or URL, access token for web access", - default=None, - ), + source: ModelSource = Body( + description="A model path, repo_id or URL to import. NOTE: only model path is implemented currently!" + ), + config: Optional[Dict[str, Any]] = Body( + description="Dict of fields that override auto-probed values in the model config record, such as name, description and prediction_type ", + default=None, + ), + variant: Optional[str] = Body( + description="When fetching a repo_id, force variant type to fetch such as 'fp16'", + default=None, + ), + subfolder: Optional[str] = Body( + description="When fetching a repo_id, specify subfolder to fetch model from", + default=None, + ), + access_token: Optional[str] = Body( + description="When fetching a repo_id or URL, access token for web access", + default=None, + ), ) -> ModelInstallJob: """Add a model using its local path, repo_id, or remote URL. @@ -250,14 +252,16 @@ async def import_model( raise HTTPException(status_code=409, detail=str(e)) return result + @model_records_router.get( "/import", operation_id="list_model_install_jobs", ) async def list_model_install_jobs( - source: Optional[str] = Query(description="Filter list by install source, partial string match.", - default=None, - ) + source: Optional[str] = Query( + description="Filter list by install source, partial string match.", + default=None, + ), ) -> List[ModelInstallJob]: """ Return list of model install jobs. @@ -268,6 +272,7 @@ async def list_model_install_jobs( jobs: List[ModelInstallJob] = ApiDependencies.invoker.services.model_install.list_jobs(source) return jobs + @model_records_router.patch( "/import", operation_id="prune_model_install_jobs", @@ -276,14 +281,14 @@ async def list_model_install_jobs( 400: {"description": "Bad request"}, }, ) -async def prune_model_install_jobs( -) -> Response: +async def prune_model_install_jobs() -> Response: """ Prune all completed and errored jobs from the install job list. """ ApiDependencies.invoker.services.model_install.prune_jobs() return Response(status_code=204) + @model_records_router.patch( "/sync", operation_id="sync_models_to_config", @@ -292,8 +297,7 @@ async def prune_model_install_jobs( 400: {"description": "Bad request"}, }, ) -async def sync_models_to_config( -) -> Response: +async def sync_models_to_config() -> Response: """ Traverse the models and autoimport directories. Model files without a corresponding record in the database are added. Orphan records without a models file are deleted. diff --git a/invokeai/app/api/sockets.py b/invokeai/app/api/sockets.py index ff3957507d..c63297fa55 100644 --- a/invokeai/app/api/sockets.py +++ b/invokeai/app/api/sockets.py @@ -37,9 +37,5 @@ class SocketIO: if "queue_id" in data: await self.__sio.leave_room(sid, data["queue_id"]) - async def _handle_model_event(self, event: Event) -> None: - await self.__sio.emit( - event=event[1]["event"], - data=event[1]["data"] - ) + await self.__sio.emit(event=event[1]["event"], data=event[1]["data"]) diff --git a/invokeai/app/services/config/__init__.py b/invokeai/app/services/config/__init__.py index e0b4168c6f..4cc6ecc298 100644 --- a/invokeai/app/services/config/__init__.py +++ b/invokeai/app/services/config/__init__.py @@ -2,4 +2,4 @@ from .config_default import InvokeAIAppConfig, get_invokeai_config -__all__ = ['InvokeAIAppConfig', 'get_invokeai_config'] +__all__ = ["InvokeAIAppConfig", "get_invokeai_config"] diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index e46c30e755..93b84afaf1 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -331,9 +331,7 @@ class EventServiceBase: """ self.__emit_model_event( event_name="model_install_started", - payload={ - "source": source - }, + payload={"source": source}, ) def emit_model_install_completed(self, source: str, key: str) -> None: @@ -351,11 +349,12 @@ class EventServiceBase: }, ) - def emit_model_install_progress(self, - source: str, - current_bytes: int, - total_bytes: int, - ) -> None: + def emit_model_install_progress( + self, + source: str, + current_bytes: int, + total_bytes: int, + ) -> None: """ Emitted while the install job is in progress. (Downloaded models only) @@ -373,12 +372,12 @@ class EventServiceBase: }, ) - - def emit_model_install_error(self, - source: str, - error_type: str, - error: str, - ) -> None: + def emit_model_install_error( + self, + source: str, + error_type: str, + error: str, + ) -> None: """ Emitted when an install job encounters an exception. diff --git a/invokeai/app/services/model_install/__init__.py b/invokeai/app/services/model_install/__init__.py index e45a15f503..e86e18863d 100644 --- a/invokeai/app/services/model_install/__init__.py +++ b/invokeai/app/services/model_install/__init__.py @@ -9,10 +9,11 @@ from .model_install_base import ( ) from .model_install_default import ModelInstallService -__all__ = ['ModelInstallServiceBase', - 'ModelInstallService', - 'InstallStatus', - 'ModelInstallJob', - 'UnknownInstallJobException', - 'ModelSource', - ] +__all__ = [ + "ModelInstallServiceBase", + "ModelInstallService", + "InstallStatus", + "ModelInstallJob", + "UnknownInstallJobException", + "ModelSource", +] diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 5212443b68..0a4c17559c 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -17,10 +17,10 @@ from invokeai.backend.model_manager import AnyModelConfig class InstallStatus(str, Enum): """State of an install job running in the background.""" - WAITING = "waiting" # waiting to be dequeued - RUNNING = "running" # being processed + WAITING = "waiting" # waiting to be dequeued + RUNNING = "running" # being processed COMPLETED = "completed" # finished running - ERROR = "error" # terminated with an error message + ERROR = "error" # terminated with an error message class UnknownInstallJobException(Exception): @@ -32,10 +32,17 @@ ModelSource = Union[str, Path, AnyHttpUrl] class ModelInstallJob(BaseModel): """Object that tracks the current status of an install request.""" + status: InstallStatus = Field(default=InstallStatus.WAITING, description="Current status of install process") - config_in: Dict[str, Any] = Field(default_factory=dict, description="Configuration information (e.g. 'description') to apply to model.") - config_out: Optional[AnyModelConfig] = Field(default=None, description="After successful installation, this will hold the configuration object.") - inplace: bool = Field(default=False, description="Leave model in its current location; otherwise install under models directory") + config_in: Dict[str, Any] = Field( + default_factory=dict, description="Configuration information (e.g. 'description') to apply to model." + ) + config_out: Optional[AnyModelConfig] = Field( + default=None, description="After successful installation, this will hold the configuration object." + ) + inplace: bool = Field( + default=False, description="Leave model in its current location; otherwise install under models directory" + ) source: ModelSource = Field(description="Source (URL, repo_id, or local path) of model") local_path: Path = Field(description="Path to locally-downloaded model; may be the same as the source") error_type: Optional[str] = Field(default=None, description="Class name of the exception that led to status==ERROR") @@ -53,10 +60,10 @@ class ModelInstallServiceBase(ABC): @abstractmethod def __init__( - self, - app_config: InvokeAIAppConfig, - record_store: ModelRecordServiceBase, - event_bus: Optional["EventServiceBase"] = None, + self, + app_config: InvokeAIAppConfig, + record_store: ModelRecordServiceBase, + event_bus: Optional["EventServiceBase"] = None, ): """ Create ModelInstallService object. @@ -86,9 +93,9 @@ class ModelInstallServiceBase(ABC): @abstractmethod def register_path( - self, - model_path: Union[Path, str], - config: Optional[Dict[str, Any]] = None, + self, + model_path: Union[Path, str], + config: Optional[Dict[str, Any]] = None, ) -> str: """ Probe and register the model at model_path. @@ -114,9 +121,9 @@ class ModelInstallServiceBase(ABC): @abstractmethod def install_path( - self, - model_path: Union[Path, str], - config: Optional[Dict[str, Any]] = None, + self, + model_path: Union[Path, str], + config: Optional[Dict[str, Any]] = None, ) -> str: """ Probe, register and install the model in the models directory. @@ -131,13 +138,13 @@ class ModelInstallServiceBase(ABC): @abstractmethod def import_model( - self, - source: Union[str, Path, AnyHttpUrl], - inplace: bool = False, - variant: Optional[str] = None, - subfolder: Optional[str] = None, - config: Optional[Dict[str, Any]] = None, - access_token: Optional[str] = None, + self, + source: Union[str, Path, AnyHttpUrl], + inplace: bool = False, + variant: Optional[str] = None, + subfolder: Optional[str] = None, + config: Optional[Dict[str, Any]] = None, + access_token: Optional[str] = None, ) -> ModelInstallJob: """Install the indicated model. @@ -189,7 +196,7 @@ class ModelInstallServiceBase(ABC): """Return the ModelInstallJob corresponding to the provided source.""" @abstractmethod - def list_jobs(self, source: Optional[ModelSource]=None) -> List[ModelInstallJob]: # noqa D102 + def list_jobs(self, source: Optional[ModelSource] = None) -> List[ModelInstallJob]: # noqa D102 """ List active and complete install jobs. diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index c67b8feb59..17a0fca7bf 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -46,11 +46,12 @@ class ModelInstallService(ModelInstallServiceBase): _cached_model_paths: Set[Path] _models_installed: Set[str] - def __init__(self, - app_config: InvokeAIAppConfig, - record_store: ModelRecordServiceBase, - event_bus: Optional[EventServiceBase] = None - ): + def __init__( + self, + app_config: InvokeAIAppConfig, + record_store: ModelRecordServiceBase, + event_bus: Optional[EventServiceBase] = None, + ): """ Initialize the installer object. @@ -73,11 +74,11 @@ class ModelInstallService(ModelInstallServiceBase): return self._app_config @property - def record_store(self) -> ModelRecordServiceBase: # noqa D102 + def record_store(self) -> ModelRecordServiceBase: # noqa D102 return self._record_store @property - def event_bus(self) -> Optional[EventServiceBase]: # noqa D102 + def event_bus(self) -> Optional[EventServiceBase]: # noqa D102 return self._event_bus def _start_installer_thread(self) -> None: @@ -129,25 +130,25 @@ class ModelInstallService(ModelInstallServiceBase): self._event_bus.emit_model_install_error(str(job.source), error_type, error) def register_path( - self, - model_path: Union[Path, str], - config: Optional[Dict[str, Any]] = None, - ) -> str: # noqa D102 + self, + model_path: Union[Path, str], + config: Optional[Dict[str, Any]] = None, + ) -> str: # noqa D102 model_path = Path(model_path) config = config or {} - if config.get('source') is None: - config['source'] = model_path.resolve().as_posix() + if config.get("source") is None: + config["source"] = model_path.resolve().as_posix() return self._register(model_path, config) def install_path( - self, - model_path: Union[Path, str], - config: Optional[Dict[str, Any]] = None, - ) -> str: # noqa D102 + self, + model_path: Union[Path, str], + config: Optional[Dict[str, Any]] = None, + ) -> str: # noqa D102 model_path = Path(model_path) config = config or {} - if config.get('source') is None: - config['source'] = model_path.resolve().as_posix() + if config.get("source") is None: + config["source"] = model_path.resolve().as_posix() info: AnyModelConfig = self._probe_model(Path(model_path), config) @@ -164,14 +165,14 @@ class ModelInstallService(ModelInstallServiceBase): ) def import_model( - self, - source: ModelSource, - inplace: bool = False, - variant: Optional[str] = None, - subfolder: Optional[str] = None, - config: Optional[Dict[str, Any]] = None, - access_token: Optional[str] = None, - ) -> ModelInstallJob: # noqa D102 + self, + source: ModelSource, + inplace: bool = False, + variant: Optional[str] = None, + subfolder: Optional[str] = None, + config: Optional[Dict[str, Any]] = None, + access_token: Optional[str] = None, + ) -> ModelInstallJob: # noqa D102 # Clean up a common source of error. Doesn't work with Paths. if isinstance(source, str): source = source.strip() @@ -181,11 +182,12 @@ class ModelInstallService(ModelInstallServiceBase): # Installing a local path if isinstance(source, (str, Path)) and Path(source).exists(): # a path that is already on disk - job = ModelInstallJob(config_in=config, - source=source, - inplace=inplace, - local_path=Path(source), - ) + job = ModelInstallJob( + config_in=config, + source=source, + inplace=inplace, + local_path=Path(source), + ) self._install_jobs[source] = job self._install_queue.put(job) return job @@ -193,7 +195,7 @@ class ModelInstallService(ModelInstallServiceBase): else: # here is where we'd download a URL or repo_id. Implementation pending download queue. raise UnknownModelException("File or directory not found") - def list_jobs(self, source: Optional[ModelSource]=None) -> List[ModelInstallJob]: # noqa D102 + def list_jobs(self, source: Optional[ModelSource] = None) -> List[ModelInstallJob]: # noqa D102 jobs = self._install_jobs if not source: return list(jobs.values()) @@ -205,17 +207,19 @@ class ModelInstallService(ModelInstallServiceBase): try: return self._install_jobs[source] except KeyError: - raise UnknownInstallJobException(f'{source}: unknown install job') + raise UnknownInstallJobException(f"{source}: unknown install job") - def wait_for_installs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 + def wait_for_installs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 self._install_queue.join() return self._install_jobs def prune_jobs(self) -> None: """Prune all completed and errored jobs.""" - finished_jobs = [source for source in self._install_jobs - if self._install_jobs[source].status in [InstallStatus.COMPLETED, InstallStatus.ERROR] - ] + finished_jobs = [ + source + for source in self._install_jobs + if self._install_jobs[source].status in [InstallStatus.COMPLETED, InstallStatus.ERROR] + ] for source in finished_jobs: del self._install_jobs[source] @@ -228,7 +232,7 @@ class ModelInstallService(ModelInstallServiceBase): self._logger.info(f"{len(installed)} new models registered") self._logger.info("Model installer (re)initialized") - def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: # noqa D102 + def scan_directory(self, scan_dir: Path, install: bool = False) -> List[str]: # noqa D102 self._cached_model_paths = {Path(x.path) for x in self.record_store.all_models()} callback = self._scan_install if install else self._scan_register search = ModelSearch(on_model_found=callback) @@ -295,7 +299,6 @@ class ModelInstallService(ModelInstallServiceBase): self.record_store.update_model(key, model) return model - def _scan_register(self, model: Path) -> bool: if model in self._cached_model_paths: return True @@ -308,7 +311,6 @@ class ModelInstallService(ModelInstallServiceBase): pass return True - def _scan_install(self, model: Path) -> bool: if model in self._cached_model_paths: return True @@ -320,7 +322,7 @@ class ModelInstallService(ModelInstallServiceBase): pass return True - def unregister(self, key: str) -> None: # noqa D102 + def unregister(self, key: str) -> None: # noqa D102 self.record_store.del_model(key) def delete(self, key: str) -> None: # noqa D102 @@ -333,7 +335,7 @@ class ModelInstallService(ModelInstallServiceBase): else: self.unregister(key) - def unconditionally_delete(self, key: str) -> None: # noqa D102 + def unconditionally_delete(self, key: str) -> None: # noqa D102 model = self.record_store.get_model(key) path = self.app_config.models_path / model.path if path.is_dir(): @@ -378,11 +380,9 @@ class ModelInstallService(ModelInstallServiceBase): def _create_key(self) -> str: return sha256(randbytes(100)).hexdigest()[0:32] - def _register(self, - model_path: Path, - config: Optional[Dict[str, Any]] = None, - info: Optional[AnyModelConfig] = None) -> str: - + def _register( + self, model_path: Path, config: Optional[Dict[str, Any]] = None, info: Optional[AnyModelConfig] = None + ) -> str: info = info or ModelProbe.probe(model_path, config) key = self._create_key() @@ -393,7 +393,7 @@ class ModelInstallService(ModelInstallServiceBase): info.path = model_path.as_posix() # add 'main' specific fields - if hasattr(info, 'config'): + if hasattr(info, "config"): # make config relative to our root legacy_conf = (self.app_config.root_dir / self.app_config.legacy_conf_dir / info.config).resolve() info.config = legacy_conf.relative_to(self.app_config.root_dir).as_posix() diff --git a/invokeai/app/services/model_records/__init__.py b/invokeai/app/services/model_records/__init__.py index a7ebacee67..160608fd5d 100644 --- a/invokeai/app/services/model_records/__init__.py +++ b/invokeai/app/services/model_records/__init__.py @@ -8,9 +8,9 @@ from .model_records_base import ( # noqa F401 from .model_records_sql import ModelRecordServiceSQL # noqa F401 __all__ = [ - 'ModelRecordServiceBase', - 'ModelRecordServiceSQL', - 'DuplicateModelException', - 'InvalidModelException', - 'UnknownModelException', + "ModelRecordServiceBase", + "ModelRecordServiceSQL", + "DuplicateModelException", + "InvalidModelException", + "UnknownModelException", ] diff --git a/invokeai/backend/model_management/model_probe.py b/invokeai/backend/model_management/model_probe.py index 1601b45f57..775d3404cb 100644 --- a/invokeai/backend/model_management/model_probe.py +++ b/invokeai/backend/model_management/model_probe.py @@ -123,8 +123,8 @@ class ModelProbe(object): base_type=base_type, variant_type=variant_type, prediction_type=prediction_type, - name = name, - description = description, + name=name, + description=description, upcast_attention=( base_type == BaseModelType.StableDiffusion2 and prediction_type == SchedulerPredictionType.VPrediction @@ -150,7 +150,7 @@ class ModelProbe(object): @classmethod def get_model_name(cls, model_path: Path) -> str: - if model_path.suffix in {'.safetensors', '.bin', '.pt', '.ckpt'}: + if model_path.suffix in {".safetensors", ".bin", ".pt", ".ckpt"}: return model_path.stem else: return model_path.name diff --git a/invokeai/backend/model_manager/__init__.py b/invokeai/backend/model_manager/__init__.py index 5988dfb686..bd2828312a 100644 --- a/invokeai/backend/model_manager/__init__.py +++ b/invokeai/backend/model_manager/__init__.py @@ -14,15 +14,16 @@ from .config import ( from .probe import ModelProbe from .search import ModelSearch -__all__ = ['ModelProbe', 'ModelSearch', - 'InvalidModelConfigException', - 'ModelConfigFactory', - 'BaseModelType', - 'ModelType', - 'SubModelType', - 'ModelVariantType', - 'ModelFormat', - 'SchedulerPredictionType', - 'AnyModelConfig', - ] - +__all__ = [ + "ModelProbe", + "ModelSearch", + "InvalidModelConfigException", + "ModelConfigFactory", + "BaseModelType", + "ModelType", + "SubModelType", + "ModelVariantType", + "ModelFormat", + "SchedulerPredictionType", + "AnyModelConfig", +] diff --git a/invokeai/backend/model_manager/probe.py b/invokeai/backend/model_manager/probe.py index 0caa191f3e..22c67742d8 100644 --- a/invokeai/backend/model_manager/probe.py +++ b/invokeai/backend/model_manager/probe.py @@ -49,6 +49,7 @@ LEGACY_CONFIGS: Dict[BaseModelType, Dict[ModelVariantType, Union[str, Dict[Sched }, } + class ProbeBase(object): """Base class for probes.""" @@ -71,6 +72,7 @@ class ProbeBase(object): """Get model scheduler prediction type.""" return None + class ModelProbe(object): PROBES: Dict[str, Dict[ModelType, type[ProbeBase]]] = { "diffusers": {}, @@ -100,9 +102,9 @@ class ModelProbe(object): @classmethod def heuristic_probe( - cls, - model_path: Path, - fields: Optional[Dict[str, Any]] = None, + cls, + model_path: Path, + fields: Optional[Dict[str, Any]] = None, ) -> AnyModelConfig: return cls.probe(model_path, fields) @@ -138,29 +140,38 @@ class ModelProbe(object): hash = FastModelHash.hash(model_path) probe = probe_class(model_path) - fields['path'] = model_path.as_posix() - fields['type'] = fields.get('type') or model_type - fields['base'] = fields.get('base') or probe.get_base_type() - fields['variant'] = fields.get('variant') or probe.get_variant_type() - fields['prediction_type'] = fields.get('prediction_type') or probe.get_scheduler_prediction_type() - fields['name'] = fields.get('name') or cls.get_model_name(model_path) - fields['description'] = fields.get('description') or f"{fields['base'].value} {fields['type'].value} model {fields['name']}" - fields['format'] = fields.get('format') or probe.get_format() - fields['original_hash'] = fields.get('original_hash') or hash - fields['current_hash'] = fields.get('current_hash') or hash + fields["path"] = model_path.as_posix() + fields["type"] = fields.get("type") or model_type + fields["base"] = fields.get("base") or probe.get_base_type() + fields["variant"] = fields.get("variant") or probe.get_variant_type() + fields["prediction_type"] = fields.get("prediction_type") or probe.get_scheduler_prediction_type() + fields["name"] = fields.get("name") or cls.get_model_name(model_path) + fields["description"] = ( + fields.get("description") or f"{fields['base'].value} {fields['type'].value} model {fields['name']}" + ) + fields["format"] = fields.get("format") or probe.get_format() + fields["original_hash"] = fields.get("original_hash") or hash + fields["current_hash"] = fields.get("current_hash") or hash # additional fields needed for main and controlnet models - if fields['type'] in [ModelType.Main, ModelType.ControlNet] and fields['format'] == ModelFormat.Checkpoint: - fields['config'] = cls._get_checkpoint_config_path(model_path, - model_type=fields['type'], - base_type=fields['base'], - variant_type=fields['variant'], - prediction_type=fields['prediction_type']).as_posix() + if fields["type"] in [ModelType.Main, ModelType.ControlNet] and fields["format"] == ModelFormat.Checkpoint: + fields["config"] = cls._get_checkpoint_config_path( + model_path, + model_type=fields["type"], + base_type=fields["base"], + variant_type=fields["variant"], + prediction_type=fields["prediction_type"], + ).as_posix() # additional fields needed for main non-checkpoint models - elif fields['type'] == ModelType.Main and fields['format'] in [ModelFormat.Onnx, ModelFormat.Olive, ModelFormat.Diffusers]: - fields['upcast_attention'] = fields.get('upcast_attention') or ( - fields['base'] == BaseModelType.StableDiffusion2 and fields['prediction_type'] == SchedulerPredictionType.VPrediction + elif fields["type"] == ModelType.Main and fields["format"] in [ + ModelFormat.Onnx, + ModelFormat.Olive, + ModelFormat.Diffusers, + ]: + fields["upcast_attention"] = fields.get("upcast_attention") or ( + fields["base"] == BaseModelType.StableDiffusion2 + and fields["prediction_type"] == SchedulerPredictionType.VPrediction ) model_info = ModelConfigFactory.make_config(fields) @@ -168,7 +179,7 @@ class ModelProbe(object): @classmethod def get_model_name(cls, model_path: Path) -> str: - if model_path.suffix in {'.safetensors', '.bin', '.pt', '.ckpt'}: + if model_path.suffix in {".safetensors", ".bin", ".pt", ".ckpt"}: return model_path.stem else: return model_path.name @@ -247,13 +258,14 @@ class ModelProbe(object): ) @classmethod - def _get_checkpoint_config_path(cls, - model_path: Path, - model_type: ModelType, - base_type: BaseModelType, - variant_type: ModelVariantType, - prediction_type: SchedulerPredictionType) -> Path: - + def _get_checkpoint_config_path( + cls, + model_path: Path, + model_type: ModelType, + base_type: BaseModelType, + variant_type: ModelVariantType, + prediction_type: SchedulerPredictionType, + ) -> Path: # look for a YAML file adjacent to the model file first possible_conf = model_path.with_suffix(".yaml") if possible_conf.exists(): @@ -264,9 +276,13 @@ class ModelProbe(object): if isinstance(config_file, dict): # need another tier for sd-2.x models config_file = config_file[prediction_type] elif model_type == ModelType.ControlNet: - config_file = "../controlnet/cldm_v15.yaml" if base_type == BaseModelType("sd-1") else "../controlnet/cldm_v21.yaml" + config_file = ( + "../controlnet/cldm_v15.yaml" if base_type == BaseModelType("sd-1") else "../controlnet/cldm_v21.yaml" + ) else: - raise InvalidModelConfigException(f"{model_path}: Unrecognized combination of model_type={model_type}, base_type={base_type}") + raise InvalidModelConfigException( + f"{model_path}: Unrecognized combination of model_type={model_type}, base_type={base_type}" + ) assert isinstance(config_file, str) return Path(config_file) @@ -297,6 +313,7 @@ class ModelProbe(object): # Checkpoint probing # ##################################################3 + class CheckpointProbeBase(ProbeBase): def __init__(self, model_path: Path): super().__init__(model_path) @@ -446,7 +463,6 @@ class T2IAdapterCheckpointProbe(CheckpointProbeBase): # classes for probing folders ####################################################### class FolderProbeBase(ProbeBase): - def get_variant_type(self) -> ModelVariantType: return ModelVariantType.Normal @@ -537,7 +553,9 @@ class TextualInversionFolderProbe(FolderProbeBase): def get_base_type(self) -> BaseModelType: path = self.model_path / "learned_embeds.bin" if not path.exists(): - raise InvalidModelConfigException(f"{self.model_path.as_posix()} does not contain expected 'learned_embeds.bin' file") + raise InvalidModelConfigException( + f"{self.model_path.as_posix()} does not contain expected 'learned_embeds.bin' file" + ) return TextualInversionCheckpointProbe(path).get_base_type() @@ -608,7 +626,9 @@ class IPAdapterFolderProbe(FolderProbeBase): elif cross_attention_dim == 2048: return BaseModelType.StableDiffusionXL else: - raise InvalidModelConfigException(f"IP-Adapter had unexpected cross-attention dimension: {cross_attention_dim}.") + raise InvalidModelConfigException( + f"IP-Adapter had unexpected cross-attention dimension: {cross_attention_dim}." + ) class CLIPVisionFolderProbe(FolderProbeBase): diff --git a/invokeai/backend/model_manager/search.py b/invokeai/backend/model_manager/search.py index 06d138fc9f..7492e471d3 100644 --- a/invokeai/backend/model_manager/search.py +++ b/invokeai/backend/model_manager/search.py @@ -165,14 +165,14 @@ class ModelSearch(ModelSearchBase): self.scanned_dirs.add(path) continue if any( - (path / x).exists() - for x in [ - "config.json", - "model_index.json", - "learned_embeds.bin", - "pytorch_lora_weights.bin", - "image_encoder.txt", - ] + (path / x).exists() + for x in [ + "config.json", + "model_index.json", + "learned_embeds.bin", + "pytorch_lora_weights.bin", + "image_encoder.txt", + ] ): self.scanned_dirs.add(path) try: diff --git a/invokeai/backend/util/__init__.py b/invokeai/backend/util/__init__.py index 800a10614c..87ae1480f5 100644 --- a/invokeai/backend/util/__init__.py +++ b/invokeai/backend/util/__init__.py @@ -14,4 +14,4 @@ from .devices import ( # noqa: F401 from .logging import InvokeAILogger from .util import Chdir, ask_user, download_with_resume, instantiate_from_config, url_attachment_name # noqa: F401 -__all__ = ['Chdir', 'InvokeAILogger', 'choose_precision', 'choose_torch_device'] +__all__ = ["Chdir", "InvokeAILogger", "choose_precision", "choose_torch_device"] diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 67278a2a0b..75069b37eb 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -44,12 +44,12 @@ def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: @pytest.fixture -def installer(app_config: InvokeAIAppConfig, - store: ModelRecordServiceBase) -> ModelInstallServiceBase: - return ModelInstallService(app_config=app_config, - record_store=store, - event_bus=DummyEventService(), - ) +def installer(app_config: InvokeAIAppConfig, store: ModelRecordServiceBase) -> ModelInstallServiceBase: + return ModelInstallService( + app_config=app_config, + record_store=store, + event_bus=DummyEventService(), + ) class DummyEvent(BaseModel): @@ -70,10 +70,8 @@ class DummyEventService(EventServiceBase): def dispatch(self, event_name: str, payload: Any) -> None: """Dispatch an event by appending it to self.events.""" - self.events.append( - DummyEvent(event_name=payload['event'], - payload=payload['data']) - ) + self.events.append(DummyEvent(event_name=payload["event"], payload=payload["data"])) + def test_registration(installer: ModelInstallServiceBase, test_file: Path) -> None: store = installer.record_store @@ -83,6 +81,7 @@ def test_registration(installer: ModelInstallServiceBase, test_file: Path) -> No assert key is not None assert len(key) == 32 + def test_registration_meta(installer: ModelInstallServiceBase, test_file: Path) -> None: store = installer.record_store key = installer.register_path(test_file) @@ -91,31 +90,30 @@ def test_registration_meta(installer: ModelInstallServiceBase, test_file: Path) assert model_record.name == "test_embedding" assert model_record.type == ModelType.TextualInversion assert Path(model_record.path) == test_file - assert model_record.base == BaseModelType('sd-1') + assert model_record.base == BaseModelType("sd-1") assert model_record.description is not None assert model_record.source is not None assert Path(model_record.source) == test_file + def test_registration_meta_override_fail(installer: ModelInstallServiceBase, test_file: Path) -> None: key = None with pytest.raises(ValidationError): key = installer.register_path(test_file, {"name": "banana_sushi", "type": ModelType("lora")}) assert key is None + def test_registration_meta_override_succeed(installer: ModelInstallServiceBase, test_file: Path) -> None: store = installer.record_store - key = installer.register_path(test_file, - { - "name": "banana_sushi", - "source": "fake/repo_id", - "current_hash": "New Hash" - } - ) + key = installer.register_path( + test_file, {"name": "banana_sushi", "source": "fake/repo_id", "current_hash": "New Hash"} + ) model_record = store.get_model(key) assert model_record.name == "banana_sushi" assert model_record.source == "fake/repo_id" assert model_record.current_hash == "New Hash" + def test_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig) -> None: store = installer.record_store key = installer.install_path(test_file) @@ -123,6 +121,7 @@ def test_install(installer: ModelInstallServiceBase, test_file: Path, app_config assert model_record.path == "sd-1/embedding/test_embedding.safetensors" assert model_record.source == test_file.as_posix() + def test_background_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig) -> None: """Note: may want to break this down into several smaller unit tests.""" source = test_file @@ -142,7 +141,7 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, # test that the expected events were issued bus = installer.event_bus - assert bus is not None # sigh - ruff is a stickler for type checking + assert bus is not None # sigh - ruff is a stickler for type checking assert isinstance(bus, DummyEventService) assert len(bus.events) == 2 event_names = [x.event_name for x in bus.events] @@ -167,6 +166,7 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, with pytest.raises(UnknownInstallJobException): assert installer.get_job(source) + def test_delete_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig): store = installer.record_store key = installer.install_path(test_file) @@ -174,11 +174,14 @@ def test_delete_install(installer: ModelInstallServiceBase, test_file: Path, app assert Path(app_config.models_dir / model_record.path).exists() assert test_file.exists() # original should still be there after installation installer.delete(key) - assert not Path(app_config.models_dir / model_record.path).exists() # after deletion, installed copy should not exist + assert not Path( + app_config.models_dir / model_record.path + ).exists() # after deletion, installed copy should not exist assert test_file.exists() # but original should still be there with pytest.raises(UnknownModelException): store.get_model(key) + def test_delete_register(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig): store = installer.record_store key = installer.register_path(test_file) From 6da508f147fb1bd891e0416609398909545c3b48 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 26 Nov 2023 18:40:22 -0500 Subject: [PATCH 012/515] make test file path comparison work on windows systems --- tests/app/services/model_install/test_model_install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 75069b37eb..4a05edc4dc 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -148,7 +148,7 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, assert "model_install_started" in event_names assert "model_install_completed" in event_names assert bus.events[0].payload["source"] == source.as_posix() - assert bus.events[1].payload["source"] == source.as_posix() + assert Path(bus.events[1].payload["source"]) == Path(source) key = bus.events[1].payload["key"] assert key is not None From dbd0151c0edd1126b5d9241c26af89e007e13e74 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 26 Nov 2023 18:52:25 -0500 Subject: [PATCH 013/515] make test file path comparison work on windows systems (another fix) --- tests/app/services/model_install/test_model_install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 4a05edc4dc..75d79b04d9 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -147,7 +147,7 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, event_names = [x.event_name for x in bus.events] assert "model_install_started" in event_names assert "model_install_completed" in event_names - assert bus.events[0].payload["source"] == source.as_posix() + assert Path(bus.events[0].payload["source"]) == Path(source) assert Path(bus.events[1].payload["source"]) == Path(source) key = bus.events[1].payload["key"] assert key is not None From d742479810f692a0f0dd4015b5efc01abfa3f670 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Fri, 17 Nov 2023 18:36:28 -0500 Subject: [PATCH 014/515] Add nodes for tile splitting and merging. The main motivation for these nodes is for use in tiled upscaling workflows. --- invokeai/app/invocations/tiles.py | 162 +++++++++++++++++++++++++++++ invokeai/backend/tiles/__init__.py | 0 invokeai/backend/tiles/tiles.py | 155 +++++++++++++++++++++++++++ invokeai/backend/tiles/utils.py | 36 +++++++ 4 files changed, 353 insertions(+) create mode 100644 invokeai/app/invocations/tiles.py create mode 100644 invokeai/backend/tiles/__init__.py create mode 100644 invokeai/backend/tiles/tiles.py create mode 100644 invokeai/backend/tiles/utils.py diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py new file mode 100644 index 0000000000..acc87a7864 --- /dev/null +++ b/invokeai/app/invocations/tiles.py @@ -0,0 +1,162 @@ +import numpy as np +from PIL import Image +from pydantic import BaseModel + +from invokeai.app.invocations.baseinvocation import ( + BaseInvocation, + BaseInvocationOutput, + InputField, + InvocationContext, + OutputField, + WithMetadata, + WithWorkflow, + invocation, + invocation_output, +) +from invokeai.app.invocations.primitives import ImageField, ImageOutput +from invokeai.app.services.image_records.image_records_common import ImageCategory, ResourceOrigin +from invokeai.backend.tiles.tiles import calc_tiles, merge_tiles_with_linear_blending +from invokeai.backend.tiles.utils import Tile + +# TODO(ryand): Is this important? +_DIMENSION_MULTIPLE_OF = 8 + + +class TileWithImage(BaseModel): + tile: Tile + image: ImageField + + +@invocation_output("calc_tiles_output") +class CalcTilesOutput(BaseInvocationOutput): + # TODO(ryand): Add description from FieldDescriptions. + tiles: list[Tile] = OutputField(description="") + + +@invocation("calculate_tiles", title="Calculate Tiles", tags=["tiles"], category="tiles", version="1.0.0") +class CalcTiles(BaseInvocation): + """TODO(ryand)""" + + # Inputs + image_height: int = InputField(ge=1) + image_width: int = InputField(ge=1) + tile_height: int = InputField(ge=1, multiple_of=_DIMENSION_MULTIPLE_OF, default=576) + tile_width: int = InputField(ge=1, multiple_of=_DIMENSION_MULTIPLE_OF, default=576) + overlap: int = InputField(ge=0, multiple_of=_DIMENSION_MULTIPLE_OF, default=64) + + def invoke(self, context: InvocationContext) -> CalcTilesOutput: + tiles = calc_tiles( + image_height=self.image_height, + image_width=self.image_width, + tile_height=self.tile_height, + tile_width=self.tile_width, + overlap=self.overlap, + ) + return CalcTilesOutput(tiles=tiles) + + +@invocation_output("tile_to_properties_output") +class TileToPropertiesOutput(BaseInvocationOutput): + # TODO(ryand): Add descriptions. + coords_top: int = OutputField(description="") + coords_bottom: int = OutputField(description="") + coords_left: int = OutputField(description="") + coords_right: int = OutputField(description="") + + overlap_top: int = OutputField(description="") + overlap_bottom: int = OutputField(description="") + overlap_left: int = OutputField(description="") + overlap_right: int = OutputField(description="") + + +@invocation("tile_to_properties") +class TileToProperties(BaseInvocation): + """Split a Tile into its individual properties.""" + + tile: Tile = InputField() + + def invoke(self, context: InvocationContext) -> TileToPropertiesOutput: + return TileToPropertiesOutput( + coords_top=self.tile.coords.top, + coords_bottom=self.tile.coords.bottom, + coords_left=self.tile.coords.left, + coords_right=self.tile.coords.right, + overlap_top=self.tile.overlap.top, + overlap_bottom=self.tile.overlap.bottom, + overlap_left=self.tile.overlap.left, + overlap_right=self.tile.overlap.right, + ) + + +# HACK(ryand): The only reason that PairTileImage is needed is because the iterate/collect nodes don't preserve order. +# Can this be fixed? + + +@invocation_output("pair_tile_image_output") +class PairTileImageOutput(BaseInvocationOutput): + tile_with_image: TileWithImage = OutputField(description="") + + +@invocation("pair_tile_image", title="Pair Tile with Image", tags=["tiles"], category="tiles", version="1.0.0") +class PairTileImage(BaseInvocation): + image: ImageField = InputField() + tile: Tile = InputField() + + def invoke(self, context: InvocationContext) -> PairTileImageOutput: + return PairTileImageOutput( + tile_with_image=TileWithImage( + tile=self.tile, + image=self.image, + ) + ) + + +@invocation("merge_tiles_to_image", title="Merge Tiles To Image", tags=["tiles"], category="tiles", version="1.0.0") +class MergeTilesToImage(BaseInvocation, WithMetadata, WithWorkflow): + """TODO(ryand)""" + + # Inputs + image_height: int = InputField(ge=1) + image_width: int = InputField(ge=1) + tiles_with_images: list[TileWithImage] = InputField() + blend_amount: int = InputField(ge=0) + + def invoke(self, context: InvocationContext) -> ImageOutput: + images = [twi.image for twi in self.tiles_with_images] + tiles = [twi.tile for twi in self.tiles_with_images] + + # Get all tile images for processing. + # TODO(ryand): It pains me that we spend time PNG decoding each tile from disk when they almost certainly + # existed in memory at an earlier point in the graph. + tile_np_images: list[np.ndarray] = [] + for image in images: + pil_image = context.services.images.get_pil_image(image.image_name) + pil_image = pil_image.convert("RGB") + tile_np_images.append(np.array(pil_image)) + + # Prepare the output image buffer. + # Check the first tile to determine how many image channels are expected in the output. + channels = tile_np_images[0].shape[-1] + dtype = tile_np_images[0].dtype + np_image = np.zeros(shape=(self.image_height, self.image_width, channels), dtype=dtype) + + merge_tiles_with_linear_blending( + dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount + ) + pil_image = Image.fromarray(np_image) + + image_dto = context.services.images.create( + image=pil_image, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.GENERAL, + node_id=self.id, + session_id=context.graph_execution_state_id, + is_intermediate=self.is_intermediate, + metadata=self.metadata, + workflow=self.workflow, + ) + return ImageOutput( + image=ImageField(image_name=image_dto.image_name), + width=image_dto.width, + height=image_dto.height, + ) diff --git a/invokeai/backend/tiles/__init__.py b/invokeai/backend/tiles/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py new file mode 100644 index 0000000000..566381d1ff --- /dev/null +++ b/invokeai/backend/tiles/tiles.py @@ -0,0 +1,155 @@ +import math + +import numpy as np + +from invokeai.backend.tiles.utils import TBLR, Tile, paste + +# TODO(ryand) +# Test the following: +# - Tile too big in x, y +# - Overlap too big in x, y +# - Single tile fits +# - Multiple tiles fit perfectly +# - Not evenly divisible by tile size(with overlap) + + +def calc_tiles_with_overlap( + image_height: int, image_width: int, tile_height: int, tile_width: int, overlap: int = 0 +) -> list[Tile]: + """Calculate the tile coordinates for a given image shape under a simple tiling scheme with overlaps. + + Args: + image_height (int): The image height in px. + image_width (int): The image width in px. + tile_height (int): The tile height in px. All tiles will have this height. + tile_width (int): The tile width in px. All tiles will have this width. + overlap (int, optional): The target overlap between adjacent tiles. If the tiles do not evenly cover the image + shape, then the last row/column of tiles will overlap more than this. Defaults to 0. + + Returns: + list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. + """ + assert image_height >= tile_height + assert image_width >= tile_width + assert overlap < tile_height + assert overlap < tile_width + + non_overlap_per_tile_height = tile_height - overlap + non_overlap_per_tile_width = tile_width - overlap + + num_tiles_y = math.ceil((image_height - overlap) / non_overlap_per_tile_height) + num_tiles_x = math.ceil((image_width - overlap) / non_overlap_per_tile_width) + + # Calculate tile coordinates and overlaps. + tiles: list[Tile] = [] + for tile_idx_y in range(num_tiles_y): + for tile_idx_x in range(num_tiles_x): + tile = Tile( + coords=TBLR( + top=tile_idx_y * non_overlap_per_tile_height, + bottom=tile_idx_y * non_overlap_per_tile_height + tile_height, + left=tile_idx_x * non_overlap_per_tile_width, + right=tile_idx_x * non_overlap_per_tile_width + tile_width, + ), + overlap=TBLR( + top=0 if tile_idx_y == 0 else overlap, + bottom=overlap, + left=0 if tile_idx_x == 0 else overlap, + right=overlap, + ), + ) + + if tile.coords.bottom > image_height: + # If this tile would go off the bottom of the image, shift it so that it is aligned with the bottom + # of the image. + tile.coords.bottom = image_height + tile.coords.top = image_height - tile_height + tile.overlap.bottom = 0 + # Note that this could result in a large overlap between this tile and the one above it. + top_neighbor_bottom = (tile_idx_y - 1) * non_overlap_per_tile_height + tile_height + tile.overlap.top = top_neighbor_bottom - tile.coords.top + + if tile.coords.right > image_width: + # If this tile would go off the right edge of the image, shift it so that it is aligned with the + # right edge of the image. + tile.coords.right = image_width + tile.coords.left = image_width - tile_width + tile.overlap.right = 0 + # Note that this could result in a large overlap between this tile and the one to its left. + left_neighbor_right = (tile_idx_x - 1) * non_overlap_per_tile_width + tile_width + tile.overlap.left = left_neighbor_right - tile.coords.left + + tiles.append(tile) + + return tiles + + +# TODO(ryand): +# - Test with blend_amount=0 +# - Test tiles that go off of the dst_image. +# - Test mismatched tiles and tile_images lengths. +# - Test mismatched + + +def merge_tiles_with_linear_blending( + dst_image: np.ndarray, tiles: list[Tile], tile_images: list[np.ndarray], blend_amount: int +): + """Merge a set of image tiles into `dst_image` with linear blending between the tiles. + + We expect every tile edge to either: + 1) have an overlap of 0, because it is aligned with the image edge, or + 2) have an overlap >= blend_amount. + If neither of these conditions are satisfied, we raise an exception. + + The linear blending is centered at the halfway point of the overlap between adjacent tiles. + + Args: + dst_image (np.ndarray): The destination image. Shape: (H, W, C). + tiles (list[Tile]): The list of tiles describing the locations of the respective `tile_images`. + tile_images (list[np.ndarray]): The tile images to merge into `dst_image`. + blend_amount (int): The amount of blending (in px) between adjacent overlapping tiles. + """ + # Sort tiles and images first by left x coordinate, then by top y coordinate. During tile processing, we want to + # iterate over tiles left-to-right, top-to-bottom. + tiles_and_images = list(zip(tiles, tile_images, strict=True)) + tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.left) + tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.top) + + # Prepare 1D linear gradients for blending. + gradient_left_x = np.linspace(start=0.0, stop=1.0, num=blend_amount) + gradient_top_y = np.linspace(start=0.0, stop=1.0, num=blend_amount) + # Convert shape: (blend_amount, ) -> (blend_amount, 1). The extra dimension enables the gradient to be applied + # to a 2D image via broadcasting. Note that no additional dimension is needed on gradient_left_x for + # broadcasting to work correctly. + gradient_top_y = np.expand_dims(gradient_top_y, axis=1) + + for tile, tile_image in tiles_and_images: + # We expect tiles to be written left-to-right, top-to-bottom. We construct a mask that applies linear blending + # to the top and to the left of the current tile. The inverse linear blending is automatically applied to the + # bottom/right of the tiles that have already been pasted by the paste(...) operation. + tile_height, tile_width, _ = tile_image.shape + mask = np.ones(shape=(tile_height, tile_width), dtype=np.float64) + # Top blending: + if tile.overlap.top > 0: + assert tile.overlap.top >= blend_amount + # Center the blending gradient in the middle of the overlap. + blend_start_top = tile.overlap.top // 2 - blend_amount // 2 + # The region above the blending region is masked completely. + mask[:blend_start_top, :] = 0.0 + # Apply the blend gradient to the mask. Note that we use `*=` rather than `=` to achieve more natural + # behavior on the corners where vertical and horizontal blending gradients overlap. + mask[blend_start_top : blend_start_top + blend_amount, :] *= gradient_top_y + # HACK(ryand): For debugging + # tile_image[blend_start_top : blend_start_top + blend_amount, :] = 0 + + # Left blending: + # (See comments under 'top blending' for an explanation of the logic.) + if tile.overlap.left > 0: + assert tile.overlap.left >= blend_amount + blend_start_left = tile.overlap.left // 2 - blend_amount // 2 + mask[:, :blend_start_left] = 0.0 + mask[:, blend_start_left : blend_start_left + blend_amount] *= gradient_left_x + # HACK(ryand): For debugging + # tile_image[:, blend_start_left : blend_start_left + blend_amount] = 0 + + paste(dst_image=dst_image, src_image=tile_image, box=tile.coords, mask=mask) diff --git a/invokeai/backend/tiles/utils.py b/invokeai/backend/tiles/utils.py new file mode 100644 index 0000000000..cf8e926aa5 --- /dev/null +++ b/invokeai/backend/tiles/utils.py @@ -0,0 +1,36 @@ +from typing import Optional + +import numpy as np +from pydantic import BaseModel, Field + + +class TBLR(BaseModel): + top: int + bottom: int + left: int + right: int + + +class Tile(BaseModel): + coords: TBLR = Field(description="The coordinates of this tile relative to its parent image.") + overlap: TBLR = Field(description="The amount of overlap with adjacent tiles on each side of this tile.") + + +def paste(dst_image: np.ndarray, src_image: np.ndarray, box: TBLR, mask: Optional[np.ndarray] = None): + """Paste a source image into a destination image. + + Args: + dst_image (torch.Tensor): The destination image to paste into. Shape: (H, W, C). + src_image (torch.Tensor): The source image to paste. Shape: (H, W, C). H and W must be compatible with 'box'. + box (TBLR): Box defining the region in the 'dst_image' where 'src_image' will be pasted. + mask (Optional[torch.Tensor]): A mask that defines the blending between 'src_image' and 'dst_image'. + Range: [0.0, 1.0], Shape: (H, W). The output is calculate per-pixel according to + `src * mask + dst * (1 - mask)`. + """ + + if mask is None: + dst_image[box.top : box.bottom, box.left : box.right] = src_image + else: + mask = np.expand_dims(mask, -1) + dst_image_box = dst_image[box.top : box.bottom, box.left : box.right] + dst_image[box.top : box.bottom, box.left : box.right] = src_image * mask + dst_image_box * (1.0 - mask) From caf47dee099903e70330e2083f27d2a0f5568c45 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 20 Nov 2023 11:53:40 -0500 Subject: [PATCH 015/515] Add unit tests for tile paste(...) util function. --- tests/backend/tiles/test_utils.py | 101 ++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 tests/backend/tiles/test_utils.py diff --git a/tests/backend/tiles/test_utils.py b/tests/backend/tiles/test_utils.py new file mode 100644 index 0000000000..bbef233ca5 --- /dev/null +++ b/tests/backend/tiles/test_utils.py @@ -0,0 +1,101 @@ +import numpy as np +import pytest + +from invokeai.backend.tiles.utils import TBLR, paste + + +def test_paste_no_mask_success(): + """Test successful paste with mask=None.""" + dst_image = np.zeros((5, 5, 3), dtype=np.uint8) + + # Create src_image with a pattern that can be used to validate that it was pasted correctly. + src_image = np.zeros((3, 3, 3), dtype=np.uint8) + src_image[0, :, 0] = 1 # Row of 1s in channel 0. + src_image[:, 0, 1] = 2 # Column of 2s in channel 1. + + # Paste in bottom-center of dst_image. + box = TBLR(top=2, bottom=5, left=1, right=4) + + # Construct expected output image. + expected_output = np.zeros((5, 5, 3), dtype=np.uint8) + expected_output[2, 1:4, 0] = 1 + expected_output[2:5, 1, 1] = 2 + + paste(dst_image=dst_image, src_image=src_image, box=box) + + np.testing.assert_array_equal(dst_image, expected_output, strict=True) + + +def test_paste_with_mask_success(): + """Test successful paste with a mask.""" + dst_image = np.zeros((5, 5, 3), dtype=np.uint8) + + # Create src_image with a pattern that can be used to validate that it was pasted correctly. + src_image = np.zeros((3, 3, 3), dtype=np.uint8) + src_image[0, :, 0] = 64 # Row of 64s in channel 0. + src_image[:, 0, 1] = 128 # Column of 128s in channel 1. + + # Paste in bottom-center of dst_image. + box = TBLR(top=2, bottom=5, left=1, right=4) + + # Create a mask that blends the top-left corner of 'src_image' at 50%, and ignores the rest of src_image. + mask = np.zeros((3, 3)) + mask[0, 0] = 0.5 + + # Construct expected output image. + expected_output = np.zeros((5, 5, 3), dtype=np.uint8) + expected_output[2, 1, 0] = 32 + expected_output[2, 1, 1] = 64 + + paste(dst_image=dst_image, src_image=src_image, box=box, mask=mask) + + np.testing.assert_array_equal(dst_image, expected_output, strict=True) + + +@pytest.mark.parametrize("use_mask", [True, False]) +def test_paste_box_overflows_dst_image(use_mask: bool): + """Test that an exception is raised if 'box' overflows the 'dst_image'.""" + dst_image = np.zeros((5, 5, 3), dtype=np.uint8) + src_image = np.zeros((3, 3, 3), dtype=np.uint8) + mask = None + if use_mask: + mask = np.zeros((3, 3)) + + # Construct box that overflows bottom of dst_image. + top = 3 + left = 0 + box = TBLR(top=top, bottom=top + src_image.shape[0], left=left, right=left + src_image.shape[1]) + + with pytest.raises(ValueError): + paste(dst_image=dst_image, src_image=src_image, box=box, mask=mask) + + +@pytest.mark.parametrize("use_mask", [True, False]) +def test_paste_src_image_does_not_match_box(use_mask: bool): + """Test that an exception is raised if the 'src_image' shape does not match the 'box' dimensions.""" + dst_image = np.zeros((5, 5, 3), dtype=np.uint8) + src_image = np.zeros((3, 3, 3), dtype=np.uint8) + mask = None + if use_mask: + mask = np.zeros((3, 3)) + + # Construct box that is smaller than src_image. + box = TBLR(top=0, bottom=src_image.shape[0] - 1, left=0, right=src_image.shape[1]) + + with pytest.raises(ValueError): + paste(dst_image=dst_image, src_image=src_image, box=box, mask=mask) + + +def test_paste_mask_does_not_match_src_image(): + """Test that an exception is raised if the 'mask' shape is different than the 'src_image' shape.""" + dst_image = np.zeros((5, 5, 3), dtype=np.uint8) + src_image = np.zeros((3, 3, 3), dtype=np.uint8) + + # Construct mask that is smaller than the src_image. + mask = np.zeros((src_image.shape[0] - 1, src_image.shape[1])) + + # Construct box that matches src_image shape. + box = TBLR(top=0, bottom=src_image.shape[0], left=0, right=src_image.shape[1]) + + with pytest.raises(ValueError): + paste(dst_image=dst_image, src_image=src_image, box=box, mask=mask) From 1f63fa8236daab3f3792f3145bae5a12bc7cef12 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 20 Nov 2023 14:23:49 -0500 Subject: [PATCH 016/515] Add unit tests for calc_tiles_with_overlap(...) and fix a bug in its implementation. --- invokeai/backend/tiles/tiles.py | 52 ++++++++++--------- invokeai/backend/tiles/utils.py | 11 ++++ tests/backend/tiles/test_tiles.py | 84 +++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 23 deletions(-) create mode 100644 tests/backend/tiles/test_tiles.py diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 566381d1ff..5e5c4b7050 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -1,17 +1,10 @@ import math +from typing import Union import numpy as np from invokeai.backend.tiles.utils import TBLR, Tile, paste -# TODO(ryand) -# Test the following: -# - Tile too big in x, y -# - Overlap too big in x, y -# - Single tile fits -# - Multiple tiles fit perfectly -# - Not evenly divisible by tile size(with overlap) - def calc_tiles_with_overlap( image_height: int, image_width: int, tile_height: int, tile_width: int, overlap: int = 0 @@ -40,8 +33,10 @@ def calc_tiles_with_overlap( num_tiles_y = math.ceil((image_height - overlap) / non_overlap_per_tile_height) num_tiles_x = math.ceil((image_width - overlap) / non_overlap_per_tile_width) - # Calculate tile coordinates and overlaps. + # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. tiles: list[Tile] = [] + + # Calculate tile coordinates. (Ignore overlap values for now.) for tile_idx_y in range(num_tiles_y): for tile_idx_x in range(num_tiles_x): tile = Tile( @@ -51,12 +46,7 @@ def calc_tiles_with_overlap( left=tile_idx_x * non_overlap_per_tile_width, right=tile_idx_x * non_overlap_per_tile_width + tile_width, ), - overlap=TBLR( - top=0 if tile_idx_y == 0 else overlap, - bottom=overlap, - left=0 if tile_idx_x == 0 else overlap, - right=overlap, - ), + overlap=TBLR(top=0, bottom=0, left=0, right=0), ) if tile.coords.bottom > image_height: @@ -64,23 +54,39 @@ def calc_tiles_with_overlap( # of the image. tile.coords.bottom = image_height tile.coords.top = image_height - tile_height - tile.overlap.bottom = 0 - # Note that this could result in a large overlap between this tile and the one above it. - top_neighbor_bottom = (tile_idx_y - 1) * non_overlap_per_tile_height + tile_height - tile.overlap.top = top_neighbor_bottom - tile.coords.top if tile.coords.right > image_width: # If this tile would go off the right edge of the image, shift it so that it is aligned with the # right edge of the image. tile.coords.right = image_width tile.coords.left = image_width - tile_width - tile.overlap.right = 0 - # Note that this could result in a large overlap between this tile and the one to its left. - left_neighbor_right = (tile_idx_x - 1) * non_overlap_per_tile_width + tile_width - tile.overlap.left = left_neighbor_right - tile.coords.left tiles.append(tile) + def get_tile_or_none(idx_y: int, idx_x: int) -> Union[Tile, None]: + if idx_y < 0 or idx_y > num_tiles_y or idx_x < 0 or idx_x > num_tiles_x: + return None + return tiles[idx_y * num_tiles_x + idx_x] + + # Iterate over tiles again and calculate overlaps. + for tile_idx_y in range(num_tiles_y): + for tile_idx_x in range(num_tiles_x): + cur_tile = get_tile_or_none(tile_idx_y, tile_idx_x) + top_neighbor_tile = get_tile_or_none(tile_idx_y - 1, tile_idx_x) + left_neighbor_tile = get_tile_or_none(tile_idx_y, tile_idx_x - 1) + + assert cur_tile is not None + + # Update cur_tile top-overlap and corresponding top-neighbor bottom-overlap. + if top_neighbor_tile is not None: + cur_tile.overlap.top = max(0, top_neighbor_tile.coords.bottom - cur_tile.coords.top) + top_neighbor_tile.overlap.bottom = cur_tile.overlap.top + + # Update cur_tile left-overlap and corresponding left-neighbor right-overlap. + if left_neighbor_tile is not None: + cur_tile.overlap.left = max(0, left_neighbor_tile.coords.right - cur_tile.coords.left) + left_neighbor_tile.overlap.right = cur_tile.overlap.left + return tiles diff --git a/invokeai/backend/tiles/utils.py b/invokeai/backend/tiles/utils.py index cf8e926aa5..4ad40ffa35 100644 --- a/invokeai/backend/tiles/utils.py +++ b/invokeai/backend/tiles/utils.py @@ -10,11 +10,22 @@ class TBLR(BaseModel): left: int right: int + def __eq__(self, other): + return ( + self.top == other.top + and self.bottom == other.bottom + and self.left == other.left + and self.right == other.right + ) + class Tile(BaseModel): coords: TBLR = Field(description="The coordinates of this tile relative to its parent image.") overlap: TBLR = Field(description="The amount of overlap with adjacent tiles on each side of this tile.") + def __eq__(self, other): + return self.coords == other.coords and self.overlap == other.overlap + def paste(dst_image: np.ndarray, src_image: np.ndarray, box: TBLR, mask: Optional[np.ndarray] = None): """Paste a source image into a destination image. diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py new file mode 100644 index 0000000000..332ab15005 --- /dev/null +++ b/tests/backend/tiles/test_tiles.py @@ -0,0 +1,84 @@ +import pytest + +from invokeai.backend.tiles.tiles import calc_tiles_with_overlap +from invokeai.backend.tiles.utils import TBLR, Tile + +#################################### +# Test calc_tiles_with_overlap(...) +#################################### + + +def test_calc_tiles_with_overlap_single_tile(): + """Test calc_tiles_with_overlap() behavior when a single tile covers the image.""" + tiles = calc_tiles_with_overlap(image_height=512, image_width=1024, tile_height=512, tile_width=1024, overlap=64) + + expected_tiles = [ + Tile(coords=TBLR(top=0, bottom=512, left=0, right=1024), overlap=TBLR(top=0, bottom=0, left=0, right=0)) + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_with_overlap_evenly_divisible(): + """Test calc_tiles_with_overlap() behavior when the image is evenly covered by multiple tiles.""" + # Parameters chosen so that image is evenly covered by 2 rows, 3 columns of tiles. + tiles = calc_tiles_with_overlap(image_height=576, image_width=1600, tile_height=320, tile_width=576, overlap=64) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=320, left=0, right=576), overlap=TBLR(top=0, bottom=64, left=0, right=64)), + Tile(coords=TBLR(top=0, bottom=320, left=512, right=1088), overlap=TBLR(top=0, bottom=64, left=64, right=64)), + Tile(coords=TBLR(top=0, bottom=320, left=1024, right=1600), overlap=TBLR(top=0, bottom=64, left=64, right=0)), + # Row 1 + Tile(coords=TBLR(top=256, bottom=576, left=0, right=576), overlap=TBLR(top=64, bottom=0, left=0, right=64)), + Tile(coords=TBLR(top=256, bottom=576, left=512, right=1088), overlap=TBLR(top=64, bottom=0, left=64, right=64)), + Tile(coords=TBLR(top=256, bottom=576, left=1024, right=1600), overlap=TBLR(top=64, bottom=0, left=64, right=0)), + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_with_overlap_not_evenly_divisible(): + """Test calc_tiles_with_overlap() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" + # Parameters chosen so that image is covered by 2 rows and 3 columns of tiles, with uneven overlaps. + tiles = calc_tiles_with_overlap(image_height=400, image_width=1200, tile_height=256, tile_width=512, overlap=64) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=256, left=0, right=512), overlap=TBLR(top=0, bottom=112, left=0, right=64)), + Tile(coords=TBLR(top=0, bottom=256, left=448, right=960), overlap=TBLR(top=0, bottom=112, left=64, right=272)), + Tile(coords=TBLR(top=0, bottom=256, left=688, right=1200), overlap=TBLR(top=0, bottom=112, left=272, right=0)), + # Row 1 + Tile(coords=TBLR(top=144, bottom=400, left=0, right=512), overlap=TBLR(top=112, bottom=0, left=0, right=64)), + Tile( + coords=TBLR(top=144, bottom=400, left=448, right=960), overlap=TBLR(top=112, bottom=0, left=64, right=272) + ), + Tile( + coords=TBLR(top=144, bottom=400, left=688, right=1200), overlap=TBLR(top=112, bottom=0, left=272, right=0) + ), + ] + + assert tiles == expected_tiles + + +@pytest.mark.parametrize( + ["image_height", "image_width", "tile_height", "tile_width", "overlap", "raises"], + [ + (128, 128, 128, 128, 127, False), # OK + (128, 128, 128, 128, 0, False), # OK + (128, 128, 64, 64, 0, False), # OK + (128, 128, 129, 128, 0, True), # tile_height exceeds image_height. + (128, 128, 128, 129, 0, True), # tile_width exceeds image_width. + (128, 128, 64, 128, 64, True), # overlap equals tile_height. + (128, 128, 128, 64, 64, True), # overlap equals tile_width. + ], +) +def test_calc_tiles_with_overlap_input_validation( + image_height: int, image_width: int, tile_height: int, tile_width: int, overlap: int, raises: bool +): + """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" + if raises: + with pytest.raises(AssertionError): + calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) + else: + calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) From 1d0dc7eeabfe58bc6190f03d38c4dd27ed63e603 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 20 Nov 2023 15:42:23 -0500 Subject: [PATCH 017/515] Add unit tests for merge_tiles_with_linear_blending(...). --- invokeai/backend/tiles/tiles.py | 11 +-- tests/backend/tiles/test_tiles.py | 142 +++++++++++++++++++++++++++++- 2 files changed, 143 insertions(+), 10 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 5e5c4b7050..3d64e3e145 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -90,13 +90,6 @@ def calc_tiles_with_overlap( return tiles -# TODO(ryand): -# - Test with blend_amount=0 -# - Test tiles that go off of the dst_image. -# - Test mismatched tiles and tile_images lengths. -# - Test mismatched - - def merge_tiles_with_linear_blending( dst_image: np.ndarray, tiles: list[Tile], tile_images: list[np.ndarray], blend_amount: int ): @@ -145,7 +138,7 @@ def merge_tiles_with_linear_blending( # Apply the blend gradient to the mask. Note that we use `*=` rather than `=` to achieve more natural # behavior on the corners where vertical and horizontal blending gradients overlap. mask[blend_start_top : blend_start_top + blend_amount, :] *= gradient_top_y - # HACK(ryand): For debugging + # For visual debugging: # tile_image[blend_start_top : blend_start_top + blend_amount, :] = 0 # Left blending: @@ -155,7 +148,7 @@ def merge_tiles_with_linear_blending( blend_start_left = tile.overlap.left // 2 - blend_amount // 2 mask[:, :blend_start_left] = 0.0 mask[:, blend_start_left : blend_start_left + blend_amount] *= gradient_left_x - # HACK(ryand): For debugging + # For visual debugging: # tile_image[:, blend_start_left : blend_start_left + blend_amount] = 0 paste(dst_image=dst_image, src_image=tile_image, box=tile.coords, mask=mask) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 332ab15005..353e65d336 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -1,6 +1,7 @@ +import numpy as np import pytest -from invokeai.backend.tiles.tiles import calc_tiles_with_overlap +from invokeai.backend.tiles.tiles import calc_tiles_with_overlap, merge_tiles_with_linear_blending from invokeai.backend.tiles.utils import TBLR, Tile #################################### @@ -82,3 +83,142 @@ def test_calc_tiles_with_overlap_input_validation( calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) else: calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) + + +############################################# +# Test merge_tiles_with_linear_blending(...) +############################################# + + +@pytest.mark.parametrize("blend_amount", [0, 32]) +def test_merge_tiles_with_linear_blending_horizontal(blend_amount: int): + """Test merge_tiles_with_linear_blending(...) behavior when merging horizontally.""" + # Initialize 2 tiles side-by-side. + tiles = [ + Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=64)), + Tile(coords=TBLR(top=0, bottom=512, left=448, right=960), overlap=TBLR(top=0, bottom=0, left=64, right=0)), + ] + + dst_image = np.zeros((512, 960, 3), dtype=np.uint8) + + # Prepare tile_images that match tiles. Pixel values are set based on the tile index. + tile_images = [ + np.zeros((512, 512, 3)) + 64, + np.zeros((512, 512, 3)) + 128, + ] + + # Calculate expected output. + expected_output = np.zeros((512, 960, 3), dtype=np.uint8) + expected_output[:, : 480 - (blend_amount // 2), :] = 64 + if blend_amount > 0: + gradient = np.linspace(start=64, stop=128, num=blend_amount, dtype=np.uint8).reshape((1, blend_amount, 1)) + expected_output[:, 480 - (blend_amount // 2) : 480 + (blend_amount // 2), :] = gradient + expected_output[:, 480 + (blend_amount // 2) :, :] = 128 + + merge_tiles_with_linear_blending( + dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=blend_amount + ) + + np.testing.assert_array_equal(dst_image, expected_output, strict=True) + + +@pytest.mark.parametrize("blend_amount", [0, 32]) +def test_merge_tiles_with_linear_blending_vertical(blend_amount: int): + """Test merge_tiles_with_linear_blending(...) behavior when merging vertically.""" + # Initialize 2 tiles stacked vertically. + tiles = [ + Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=64, left=0, right=0)), + Tile(coords=TBLR(top=448, bottom=960, left=0, right=512), overlap=TBLR(top=64, bottom=0, left=0, right=0)), + ] + + dst_image = np.zeros((960, 512, 3), dtype=np.uint8) + + # Prepare tile_images that match tiles. Pixel values are set based on the tile index. + tile_images = [ + np.zeros((512, 512, 3)) + 64, + np.zeros((512, 512, 3)) + 128, + ] + + # Calculate expected output. + expected_output = np.zeros((960, 512, 3), dtype=np.uint8) + expected_output[: 480 - (blend_amount // 2), :, :] = 64 + if blend_amount > 0: + gradient = np.linspace(start=64, stop=128, num=blend_amount, dtype=np.uint8).reshape((blend_amount, 1, 1)) + expected_output[480 - (blend_amount // 2) : 480 + (blend_amount // 2), :, :] = gradient + expected_output[480 + (blend_amount // 2) :, :, :] = 128 + + merge_tiles_with_linear_blending( + dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=blend_amount + ) + + np.testing.assert_array_equal(dst_image, expected_output, strict=True) + + +def test_merge_tiles_with_linear_blending_blend_amount_exceeds_vertical_overlap(): + """Test that merge_tiles_with_linear_blending(...) raises an exception if 'blend_amount' exceeds the overlap between + any vertically adjacent tiles. + """ + # Initialize 2 tiles stacked vertically. + tiles = [ + Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=64, left=0, right=0)), + Tile(coords=TBLR(top=448, bottom=960, left=0, right=512), overlap=TBLR(top=64, bottom=0, left=0, right=0)), + ] + + dst_image = np.zeros((960, 512, 3), dtype=np.uint8) + + # Prepare tile_images that match tiles. + tile_images = [np.zeros((512, 512, 3)), np.zeros((512, 512, 3))] + + # blend_amount=128 exceeds overlap of 64, so should raise exception. + with pytest.raises(AssertionError): + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128) + + +def test_merge_tiles_with_linear_blending_blend_amount_exceeds_horizontal_overlap(): + """Test that merge_tiles_with_linear_blending(...) raises an exception if 'blend_amount' exceeds the overlap between + any horizontally adjacent tiles. + """ + # Initialize 2 tiles side-by-side. + tiles = [ + Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=64)), + Tile(coords=TBLR(top=0, bottom=512, left=448, right=960), overlap=TBLR(top=0, bottom=0, left=64, right=0)), + ] + + dst_image = np.zeros((512, 960, 3), dtype=np.uint8) + + # Prepare tile_images that match tiles. + tile_images = [np.zeros((512, 512, 3)), np.zeros((512, 512, 3))] + + # blend_amount=128 exceeds overlap of 64, so should raise exception. + with pytest.raises(AssertionError): + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128) + + +def test_merge_tiles_with_linear_blending_tiles_overflow_dst_image(): + """Test that merge_tiles_with_linear_blending(...) raises an exception if any of the tiles overflows the + dst_image. + """ + tiles = [Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=0))] + + dst_image = np.zeros((256, 512, 3), dtype=np.uint8) + + # Prepare tile_images that match tiles. + tile_images = [np.zeros((512, 512, 3))] + + with pytest.raises(ValueError): + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0) + + +def test_merge_tiles_with_linear_blending_mismatched_list_lengths(): + """Test that merge_tiles_with_linear_blending(...) raises an exception if the lengths of 'tiles' and 'tile_images' + do not match. + """ + tiles = [Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=0))] + + dst_image = np.zeros((256, 512, 3), dtype=np.uint8) + + # tile_images is longer than tiles, so should cause an exception. + tile_images = [np.zeros((512, 512, 3)), np.zeros((512, 512, 3))] + + with pytest.raises(ValueError): + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0) From 3980f79ed539c8250120a2224915861a26debfa2 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 20 Nov 2023 17:18:13 -0500 Subject: [PATCH 018/515] Tidy up tiles invocations, add documentation. --- invokeai/app/invocations/tiles.py | 92 ++++++++++++++++--------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index acc87a7864..c6499c45d6 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -15,65 +15,65 @@ from invokeai.app.invocations.baseinvocation import ( ) from invokeai.app.invocations.primitives import ImageField, ImageOutput from invokeai.app.services.image_records.image_records_common import ImageCategory, ResourceOrigin -from invokeai.backend.tiles.tiles import calc_tiles, merge_tiles_with_linear_blending +from invokeai.backend.tiles.tiles import calc_tiles_with_overlap, merge_tiles_with_linear_blending from invokeai.backend.tiles.utils import Tile -# TODO(ryand): Is this important? -_DIMENSION_MULTIPLE_OF = 8 - class TileWithImage(BaseModel): tile: Tile image: ImageField -@invocation_output("calc_tiles_output") -class CalcTilesOutput(BaseInvocationOutput): - # TODO(ryand): Add description from FieldDescriptions. - tiles: list[Tile] = OutputField(description="") +@invocation_output("calculate_image_tiles_output") +class CalculateImageTilesOutput(BaseInvocationOutput): + tiles: list[Tile] = OutputField(description="The tiles coordinates that cover a particular image shape.") -@invocation("calculate_tiles", title="Calculate Tiles", tags=["tiles"], category="tiles", version="1.0.0") -class CalcTiles(BaseInvocation): - """TODO(ryand)""" +@invocation("calculate_image_tiles", title="Calculate Image Tiles", tags=["tiles"], category="tiles", version="1.0.0") +class CalculateImageTiles(BaseInvocation): + """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" - # Inputs - image_height: int = InputField(ge=1) - image_width: int = InputField(ge=1) - tile_height: int = InputField(ge=1, multiple_of=_DIMENSION_MULTIPLE_OF, default=576) - tile_width: int = InputField(ge=1, multiple_of=_DIMENSION_MULTIPLE_OF, default=576) - overlap: int = InputField(ge=0, multiple_of=_DIMENSION_MULTIPLE_OF, default=64) + image_height: int = InputField( + ge=1, default=1024, description="The image height, in pixels, to calculate tiles for." + ) + image_width: int = InputField(ge=1, default=1024, description="The image width, in pixels, to calculate tiles for.") + tile_height: int = InputField(ge=1, default=576, description="The tile height, in pixels.") + tile_width: int = InputField(ge=1, default=576, description="The tile width, in pixels.") + overlap: int = InputField( + ge=0, + default=128, + description="The target overlap, in pixels, between adjacent tiles. Adjacent tiles will overlap by at least this amount", + ) - def invoke(self, context: InvocationContext) -> CalcTilesOutput: - tiles = calc_tiles( + def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput: + tiles = calc_tiles_with_overlap( image_height=self.image_height, image_width=self.image_width, tile_height=self.tile_height, tile_width=self.tile_width, overlap=self.overlap, ) - return CalcTilesOutput(tiles=tiles) + return CalculateImageTilesOutput(tiles=tiles) @invocation_output("tile_to_properties_output") class TileToPropertiesOutput(BaseInvocationOutput): - # TODO(ryand): Add descriptions. - coords_top: int = OutputField(description="") - coords_bottom: int = OutputField(description="") - coords_left: int = OutputField(description="") - coords_right: int = OutputField(description="") + coords_top: int = OutputField(description="Top coordinate of the tile relative to its parent image.") + coords_bottom: int = OutputField(description="Bottom coordinate of the tile relative to its parent image.") + coords_left: int = OutputField(description="Left coordinate of the tile relative to its parent image.") + coords_right: int = OutputField(description="Right coordinate of the tile relative to its parent image.") - overlap_top: int = OutputField(description="") - overlap_bottom: int = OutputField(description="") - overlap_left: int = OutputField(description="") - overlap_right: int = OutputField(description="") + overlap_top: int = OutputField(description="Overlap between this tile and its top neighbor.") + overlap_bottom: int = OutputField(description="Overlap between this tile and its bottom neighbor.") + overlap_left: int = OutputField(description="Overlap between this tile and its left neighbor.") + overlap_right: int = OutputField(description="Overlap between this tile and its right neighbor.") -@invocation("tile_to_properties") +@invocation("tile_to_properties", title="Tile to Properties", tags=["tiles"], category="tiles", version="1.0.0") class TileToProperties(BaseInvocation): """Split a Tile into its individual properties.""" - tile: Tile = InputField() + tile: Tile = InputField(description="The tile to split into properties.") def invoke(self, context: InvocationContext) -> TileToPropertiesOutput: return TileToPropertiesOutput( @@ -88,19 +88,20 @@ class TileToProperties(BaseInvocation): ) -# HACK(ryand): The only reason that PairTileImage is needed is because the iterate/collect nodes don't preserve order. -# Can this be fixed? - - @invocation_output("pair_tile_image_output") class PairTileImageOutput(BaseInvocationOutput): - tile_with_image: TileWithImage = OutputField(description="") + tile_with_image: TileWithImage = OutputField(description="A tile description with its corresponding image.") @invocation("pair_tile_image", title="Pair Tile with Image", tags=["tiles"], category="tiles", version="1.0.0") class PairTileImage(BaseInvocation): - image: ImageField = InputField() - tile: Tile = InputField() + """Pair an image with its tile properties.""" + + # TODO(ryand): The only reason that PairTileImage is needed is because the iterate/collect nodes don't preserve + # order. Can this be fixed? + + image: ImageField = InputField(description="The tile image.") + tile: Tile = InputField(description="The tile properties.") def invoke(self, context: InvocationContext) -> PairTileImageOutput: return PairTileImageOutput( @@ -111,15 +112,18 @@ class PairTileImage(BaseInvocation): ) -@invocation("merge_tiles_to_image", title="Merge Tiles To Image", tags=["tiles"], category="tiles", version="1.0.0") +@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.0.0") class MergeTilesToImage(BaseInvocation, WithMetadata, WithWorkflow): - """TODO(ryand)""" + """Merge multiple tile images into a single image.""" # Inputs - image_height: int = InputField(ge=1) - image_width: int = InputField(ge=1) - tiles_with_images: list[TileWithImage] = InputField() - blend_amount: int = InputField(ge=0) + image_height: int = InputField(ge=1, description="The height of the output image, in pixels.") + image_width: int = InputField(ge=1, description="The width of the output image, in pixels.") + tiles_with_images: list[TileWithImage] = InputField(description="A list of tile images with tile properties.") + blend_amount: int = InputField( + ge=0, + description="The amount to blend adjacent tiles in pixels. Must be <= the amount of overlap between adjacent tiles.", + ) def invoke(self, context: InvocationContext) -> ImageOutput: images = [twi.image for twi in self.tiles_with_images] From 436560da3901e507a588800c2e6ba2cace66be94 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Thu, 23 Nov 2023 10:52:03 -0500 Subject: [PATCH 019/515] (minor) Add 'Invocation' suffix to all tiling node classes. --- invokeai/app/invocations/tiles.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index c6499c45d6..927e99be64 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -30,7 +30,7 @@ class CalculateImageTilesOutput(BaseInvocationOutput): @invocation("calculate_image_tiles", title="Calculate Image Tiles", tags=["tiles"], category="tiles", version="1.0.0") -class CalculateImageTiles(BaseInvocation): +class CalculateImageTilesInvocation(BaseInvocation): """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" image_height: int = InputField( @@ -70,7 +70,7 @@ class TileToPropertiesOutput(BaseInvocationOutput): @invocation("tile_to_properties", title="Tile to Properties", tags=["tiles"], category="tiles", version="1.0.0") -class TileToProperties(BaseInvocation): +class TileToPropertiesInvocation(BaseInvocation): """Split a Tile into its individual properties.""" tile: Tile = InputField(description="The tile to split into properties.") @@ -94,7 +94,7 @@ class PairTileImageOutput(BaseInvocationOutput): @invocation("pair_tile_image", title="Pair Tile with Image", tags=["tiles"], category="tiles", version="1.0.0") -class PairTileImage(BaseInvocation): +class PairTileImageInvocation(BaseInvocation): """Pair an image with its tile properties.""" # TODO(ryand): The only reason that PairTileImage is needed is because the iterate/collect nodes don't preserve @@ -113,7 +113,7 @@ class PairTileImage(BaseInvocation): @invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.0.0") -class MergeTilesToImage(BaseInvocation, WithMetadata, WithWorkflow): +class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): """Merge multiple tile images into a single image.""" # Inputs From 121b930abfdc9f7e365b0c4f3fd024e05f35c631 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 11:02:10 -0500 Subject: [PATCH 020/515] Copy CropLatentsInvocation from https://github.com/skunkworxdark/XYGrid_nodes/blob/74647fa9c1fa57d317a94bd43ca689af7f0aae5e/images_to_grids.py#L1117C1-L1167C80. --- invokeai/app/invocations/latent.py | 53 ++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index d438bcae02..c143eb891c 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -1162,3 +1162,56 @@ class BlendLatentsInvocation(BaseInvocation): # context.services.latents.set(name, resized_latents) context.services.latents.save(name, blended_latents) return build_latents_output(latents_name=name, latents=blended_latents) + + +@invocation( + "lcrop", + title="Crop Latents", + tags=["latents", "crop"], + category="latents", + version="1.0.0", +) +class CropLatentsInvocation(BaseInvocation): + """Crops latents""" + + latents: LatentsField = InputField( + description=FieldDescriptions.latents, + input=Input.Connection, + ) + width: int = InputField( + ge=64, + multiple_of=_downsampling_factor, + description=FieldDescriptions.width, + ) + height: int = InputField( + ge=64, + multiple_of=_downsampling_factor, + description=FieldDescriptions.width, + ) + x_offset: int = InputField( + ge=0, + multiple_of=_downsampling_factor, + description="x-coordinate", + ) + y_offset: int = InputField( + ge=0, + multiple_of=_downsampling_factor, + description="y-coordinate", + ) + + def invoke(self, context: InvocationContext) -> LatentsOutput: + latents = context.services.latents.get(self.latents.latents_name) + + x1 = self.x_offset // _downsampling_factor + y1 = self.y_offset // _downsampling_factor + x2 = x1 + (self.width // _downsampling_factor) + y2 = y1 + (self.height // _downsampling_factor) + + cropped_latents = latents[:, :, y1:y2, x1:x2] + + # resized_latents = resized_latents.to("cpu") + + name = f"{context.graph_execution_state_id}__{self.id}" + context.services.latents.save(name, cropped_latents) + + return build_latents_output(latents_name=name, latents=cropped_latents) From e1c53a2465583869126833704b5b5a0b1d42f062 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 11:12:15 -0500 Subject: [PATCH 021/515] Use LATENT_SCALE_FACTOR = 8 constant in CropLatentsInvocation. --- invokeai/app/invocations/latent.py | 34 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index c143eb891c..b5c9c876c8 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -79,6 +79,12 @@ DEFAULT_PRECISION = choose_precision(choose_torch_device()) SAMPLER_NAME_VALUES = Literal[tuple(SCHEDULER_MAP.keys())] +# HACK: Many nodes are currently hard-coded to use a fixed latent scale factor of 8. This is fragile, and will need to +# be addressed if future models use a different latent scale factor. Also, note that there may be places where the scale +# factor is hard-coded to a literal '8' rather than using this constant. +# The ratio of image:latent dimensions is LATENT_SCALE_FACTOR:1, or 8:1. +LATENT_SCALE_FACTOR = 8 + @invocation_output("scheduler_output") class SchedulerOutput(BaseInvocationOutput): @@ -390,9 +396,9 @@ class DenoiseLatentsInvocation(BaseInvocation): exit_stack: ExitStack, do_classifier_free_guidance: bool = True, ) -> List[ControlNetData]: - # assuming fixed dimensional scaling of 8:1 for image:latents - control_height_resize = latents_shape[2] * 8 - control_width_resize = latents_shape[3] * 8 + # Assuming fixed dimensional scaling of LATENT_SCALE_FACTOR. + control_height_resize = latents_shape[2] * LATENT_SCALE_FACTOR + control_width_resize = latents_shape[3] * LATENT_SCALE_FACTOR if control_input is None: control_list = None elif isinstance(control_input, list) and len(control_input) == 0: @@ -905,12 +911,12 @@ class ResizeLatentsInvocation(BaseInvocation): ) width: int = InputField( ge=64, - multiple_of=8, + multiple_of=LATENT_SCALE_FACTOR, description=FieldDescriptions.width, ) height: int = InputField( ge=64, - multiple_of=8, + multiple_of=LATENT_SCALE_FACTOR, description=FieldDescriptions.width, ) mode: LATENTS_INTERPOLATION_MODE = InputField(default="bilinear", description=FieldDescriptions.interp_mode) @@ -924,7 +930,7 @@ class ResizeLatentsInvocation(BaseInvocation): resized_latents = torch.nn.functional.interpolate( latents.to(device), - size=(self.height // 8, self.width // 8), + size=(self.height // LATENT_SCALE_FACTOR, self.width // LATENT_SCALE_FACTOR), mode=self.mode, antialias=self.antialias if self.mode in ["bilinear", "bicubic"] else False, ) @@ -1180,32 +1186,32 @@ class CropLatentsInvocation(BaseInvocation): ) width: int = InputField( ge=64, - multiple_of=_downsampling_factor, + multiple_of=LATENT_SCALE_FACTOR, description=FieldDescriptions.width, ) height: int = InputField( ge=64, - multiple_of=_downsampling_factor, + multiple_of=LATENT_SCALE_FACTOR, description=FieldDescriptions.width, ) x_offset: int = InputField( ge=0, - multiple_of=_downsampling_factor, + multiple_of=LATENT_SCALE_FACTOR, description="x-coordinate", ) y_offset: int = InputField( ge=0, - multiple_of=_downsampling_factor, + multiple_of=LATENT_SCALE_FACTOR, description="y-coordinate", ) def invoke(self, context: InvocationContext) -> LatentsOutput: latents = context.services.latents.get(self.latents.latents_name) - x1 = self.x_offset // _downsampling_factor - y1 = self.y_offset // _downsampling_factor - x2 = x1 + (self.width // _downsampling_factor) - y2 = y1 + (self.height // _downsampling_factor) + x1 = self.x_offset // LATENT_SCALE_FACTOR + y1 = self.y_offset // LATENT_SCALE_FACTOR + x2 = x1 + (self.width // LATENT_SCALE_FACTOR) + y2 = y1 + (self.height // LATENT_SCALE_FACTOR) cropped_latents = latents[:, :, y1:y2, x1:x2] From 9b4e6da22618ca927affee83c9870422d7c8d38a Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 11:30:00 -0500 Subject: [PATCH 022/515] Improve documentation of CropLatentsInvocation. --- invokeai/app/invocations/latent.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index b5c9c876c8..ae0497eea7 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -1178,31 +1178,33 @@ class BlendLatentsInvocation(BaseInvocation): version="1.0.0", ) class CropLatentsInvocation(BaseInvocation): - """Crops latents""" + """Crops a latent-space tensor to a box specified in image-space. The box dimensions and coordinates must be + divisible by the latent scale factor of 8. + """ latents: LatentsField = InputField( description=FieldDescriptions.latents, input=Input.Connection, ) width: int = InputField( - ge=64, + ge=1, multiple_of=LATENT_SCALE_FACTOR, - description=FieldDescriptions.width, + description="The width (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", ) height: int = InputField( - ge=64, + ge=1, multiple_of=LATENT_SCALE_FACTOR, - description=FieldDescriptions.width, + description="The height (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", ) x_offset: int = InputField( ge=0, multiple_of=LATENT_SCALE_FACTOR, - description="x-coordinate", + description="The left x coordinate (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", ) y_offset: int = InputField( ge=0, multiple_of=LATENT_SCALE_FACTOR, - description="y-coordinate", + description="The top y coordinate (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", ) def invoke(self, context: InvocationContext) -> LatentsOutput: From 04e0fefdeeff60f639afcd652bd4921f4c77d2f0 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 12:05:55 -0500 Subject: [PATCH 023/515] Rename CropLatentsInvocation -> CropLatentsCoreInvocation to prevent conflict with custom node. And other minor tidying. --- invokeai/app/invocations/latent.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index ae0497eea7..ff9cc1dcf6 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -1170,14 +1170,18 @@ class BlendLatentsInvocation(BaseInvocation): return build_latents_output(latents_name=name, latents=blended_latents) +# The Crop Latents node was copied from @skunkworxdark's implementation here: +# https://github.com/skunkworxdark/XYGrid_nodes/blob/74647fa9c1fa57d317a94bd43ca689af7f0aae5e/images_to_grids.py#L1117C1-L1167C80 @invocation( - "lcrop", + "crop_latents", title="Crop Latents", tags=["latents", "crop"], category="latents", version="1.0.0", ) -class CropLatentsInvocation(BaseInvocation): +# TODO(ryand): Named `CropLatentsCoreInvocation` to prevent a conflict with custom node `CropLatentsInvocation`. +# Currently, if the class names conflict then 'GET /openapi.json' fails. +class CropLatentsCoreInvocation(BaseInvocation): """Crops a latent-space tensor to a box specified in image-space. The box dimensions and coordinates must be divisible by the latent scale factor of 8. """ @@ -1215,9 +1219,7 @@ class CropLatentsInvocation(BaseInvocation): x2 = x1 + (self.width // LATENT_SCALE_FACTOR) y2 = y1 + (self.height // LATENT_SCALE_FACTOR) - cropped_latents = latents[:, :, y1:y2, x1:x2] - - # resized_latents = resized_latents.to("cpu") + cropped_latents = latents[..., y1:y2, x1:x2] name = f"{context.graph_execution_state_id}__{self.id}" context.services.latents.save(name, cropped_latents) From 7e4a6893707d96a63c81cab60ed8357de5f0fd87 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 12:30:10 -0500 Subject: [PATCH 024/515] Update tiling nodes to use width-before-height field ordering convention. --- invokeai/app/invocations/tiles.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index 927e99be64..350141a2f3 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -33,12 +33,12 @@ class CalculateImageTilesOutput(BaseInvocationOutput): class CalculateImageTilesInvocation(BaseInvocation): """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" + image_width: int = InputField(ge=1, default=1024, description="The image width, in pixels, to calculate tiles for.") image_height: int = InputField( ge=1, default=1024, description="The image height, in pixels, to calculate tiles for." ) - image_width: int = InputField(ge=1, default=1024, description="The image width, in pixels, to calculate tiles for.") - tile_height: int = InputField(ge=1, default=576, description="The tile height, in pixels.") tile_width: int = InputField(ge=1, default=576, description="The tile width, in pixels.") + tile_height: int = InputField(ge=1, default=576, description="The tile height, in pixels.") overlap: int = InputField( ge=0, default=128, @@ -117,8 +117,8 @@ class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): """Merge multiple tile images into a single image.""" # Inputs - image_height: int = InputField(ge=1, description="The height of the output image, in pixels.") image_width: int = InputField(ge=1, description="The width of the output image, in pixels.") + image_height: int = InputField(ge=1, description="The height of the output image, in pixels.") tiles_with_images: list[TileWithImage] = InputField(description="A list of tile images with tile properties.") blend_amount: int = InputField( ge=0, From 303791d5c6e43370d24a6b2f90ac3be2d9edb0ad Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 13:49:33 -0500 Subject: [PATCH 025/515] Add width and height fields to TileToPropertiesInvocation output to avoid having to calculate them with math nodes. --- invokeai/app/invocations/tiles.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index 350141a2f3..934861f008 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -63,6 +63,14 @@ class TileToPropertiesOutput(BaseInvocationOutput): coords_left: int = OutputField(description="Left coordinate of the tile relative to its parent image.") coords_right: int = OutputField(description="Right coordinate of the tile relative to its parent image.") + # HACK: The width and height fields are 'meta' fields that can easily be calculated from the other fields on this + # object. Including redundant fields that can cheaply/easily be re-calculated goes against conventional API design + # principles. These fields are included, because 1) they are often useful in tiled workflows, and 2) they are + # difficult to calculate in a workflow (even though it's just a couple of subtraction nodes the graph gets + # surprisingly complicated). + width: int = OutputField(description="The width of the tile. Equal to coords_right - coords_left.") + height: int = OutputField(description="The height of the tile. Equal to coords_bottom - coords_top.") + overlap_top: int = OutputField(description="Overlap between this tile and its top neighbor.") overlap_bottom: int = OutputField(description="Overlap between this tile and its bottom neighbor.") overlap_left: int = OutputField(description="Overlap between this tile and its left neighbor.") @@ -81,6 +89,8 @@ class TileToPropertiesInvocation(BaseInvocation): coords_bottom=self.tile.coords.bottom, coords_left=self.tile.coords.left, coords_right=self.tile.coords.right, + width=self.tile.coords.right - self.tile.coords.left, + height=self.tile.coords.bottom - self.tile.coords.top, overlap_top=self.tile.overlap.top, overlap_bottom=self.tile.overlap.bottom, overlap_left=self.tile.overlap.left, From 932de08fc0d6acf694d918ffbe085d1746754d34 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 14:07:38 -0500 Subject: [PATCH 026/515] Infer a tight-fitting output image size from the passed tiles in MergeTilesToImageInvocation. --- invokeai/app/invocations/tiles.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index 934861f008..d1b51a43f0 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -127,8 +127,6 @@ class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): """Merge multiple tile images into a single image.""" # Inputs - image_width: int = InputField(ge=1, description="The width of the output image, in pixels.") - image_height: int = InputField(ge=1, description="The height of the output image, in pixels.") tiles_with_images: list[TileWithImage] = InputField(description="A list of tile images with tile properties.") blend_amount: int = InputField( ge=0, @@ -139,6 +137,13 @@ class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): images = [twi.image for twi in self.tiles_with_images] tiles = [twi.tile for twi in self.tiles_with_images] + # Infer the output image dimensions from the max/min tile limits. + height = 0 + width = 0 + for tile in tiles: + height = max(height, tile.coords.bottom) + width = max(width, tile.coords.right) + # Get all tile images for processing. # TODO(ryand): It pains me that we spend time PNG decoding each tile from disk when they almost certainly # existed in memory at an earlier point in the graph. @@ -152,7 +157,7 @@ class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): # Check the first tile to determine how many image channels are expected in the output. channels = tile_np_images[0].shape[-1] dtype = tile_np_images[0].dtype - np_image = np.zeros(shape=(self.image_height, self.image_width, channels), dtype=dtype) + np_image = np.zeros(shape=(height, width, channels), dtype=dtype) merge_tiles_with_linear_blending( dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount From 049b0239da4353086580793752e8f8321e19e9fb Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Mon, 27 Nov 2023 23:34:45 -0500 Subject: [PATCH 027/515] Re-organize merge_tiles_with_linear_blending(...) to merge rows horizontally first and then vertically. This change achieves slightly more natural blending on the corners where 4 tiles overlap. --- invokeai/backend/tiles/tiles.py | 101 +++++++++++++++++++++++--------- 1 file changed, 74 insertions(+), 27 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 3d64e3e145..3a678d825e 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -114,6 +114,24 @@ def merge_tiles_with_linear_blending( tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.left) tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.top) + # Organize tiles into rows. + tile_and_image_rows: list[list[tuple[Tile, np.ndarray]]] = [] + cur_tile_and_image_row: list[tuple[Tile, np.ndarray]] = [] + first_tile_in_cur_row, _ = tiles_and_images[0] + for tile_and_image in tiles_and_images: + tile, _ = tile_and_image + if not ( + tile.coords.top == first_tile_in_cur_row.coords.top + and tile.coords.bottom == first_tile_in_cur_row.coords.bottom + ): + # Store the previous row, and start a new one. + tile_and_image_rows.append(cur_tile_and_image_row) + cur_tile_and_image_row = [] + first_tile_in_cur_row, _ = tile_and_image + + cur_tile_and_image_row.append(tile_and_image) + tile_and_image_rows.append(cur_tile_and_image_row) + # Prepare 1D linear gradients for blending. gradient_left_x = np.linspace(start=0.0, stop=1.0, num=blend_amount) gradient_top_y = np.linspace(start=0.0, stop=1.0, num=blend_amount) @@ -122,33 +140,62 @@ def merge_tiles_with_linear_blending( # broadcasting to work correctly. gradient_top_y = np.expand_dims(gradient_top_y, axis=1) - for tile, tile_image in tiles_and_images: - # We expect tiles to be written left-to-right, top-to-bottom. We construct a mask that applies linear blending - # to the top and to the left of the current tile. The inverse linear blending is automatically applied to the - # bottom/right of the tiles that have already been pasted by the paste(...) operation. - tile_height, tile_width, _ = tile_image.shape - mask = np.ones(shape=(tile_height, tile_width), dtype=np.float64) + for tile_and_image_row in tile_and_image_rows: + first_tile_in_row, _ = tile_and_image_row[0] + row_height = first_tile_in_row.coords.bottom - first_tile_in_row.coords.top + row_image = np.zeros((row_height, dst_image.shape[1], dst_image.shape[2]), dtype=dst_image.dtype) + + # Blend the tiles in the row horizontally. + for tile, tile_image in tile_and_image_row: + # We expect the tiles to be ordered left-to-right. For each tile, we construct a mask that applies linear + # blending to the left of the current tile. The inverse linear blending is automatically applied to the + # right of the tiles that have already been pasted by the paste(...) operation. + tile_height, tile_width, _ = tile_image.shape + mask = np.ones(shape=(tile_height, tile_width), dtype=np.float64) + + # Left blending: + if tile.overlap.left > 0: + assert tile.overlap.left >= blend_amount + # Center the blending gradient in the middle of the overlap. + blend_start_left = tile.overlap.left // 2 - blend_amount // 2 + # The region left of the blending region is masked completely. + mask[:, :blend_start_left] = 0.0 + # Apply the blend gradient to the mask. + mask[:, blend_start_left : blend_start_left + blend_amount] = gradient_left_x + # For visual debugging: + # tile_image[:, blend_start_left : blend_start_left + blend_amount] = 0 + + paste( + dst_image=row_image, + src_image=tile_image, + box=TBLR( + top=0, bottom=tile.coords.bottom - tile.coords.top, left=tile.coords.left, right=tile.coords.right + ), + mask=mask, + ) + + # Blend the row into the dst_image vertically. + # We construct a mask that applies linear blending to the top of the current row. The inverse linear blending is + # automatically applied to the bottom of the tiles that have already been pasted by the paste(...) operation. + mask = np.ones(shape=(row_image.shape[0], row_image.shape[1]), dtype=np.float64) # Top blending: - if tile.overlap.top > 0: - assert tile.overlap.top >= blend_amount - # Center the blending gradient in the middle of the overlap. - blend_start_top = tile.overlap.top // 2 - blend_amount // 2 - # The region above the blending region is masked completely. + # (See comments under 'Left blending' for an explanation of the logic.) + # We assume that the entire row has the same vertical overlaps as the first_tile_in_row. + if first_tile_in_row.overlap.top > 0: + assert first_tile_in_row.overlap.top >= blend_amount + blend_start_top = first_tile_in_row.overlap.top // 2 - blend_amount // 2 mask[:blend_start_top, :] = 0.0 - # Apply the blend gradient to the mask. Note that we use `*=` rather than `=` to achieve more natural - # behavior on the corners where vertical and horizontal blending gradients overlap. - mask[blend_start_top : blend_start_top + blend_amount, :] *= gradient_top_y + mask[blend_start_top : blend_start_top + blend_amount, :] = gradient_top_y # For visual debugging: - # tile_image[blend_start_top : blend_start_top + blend_amount, :] = 0 - - # Left blending: - # (See comments under 'top blending' for an explanation of the logic.) - if tile.overlap.left > 0: - assert tile.overlap.left >= blend_amount - blend_start_left = tile.overlap.left // 2 - blend_amount // 2 - mask[:, :blend_start_left] = 0.0 - mask[:, blend_start_left : blend_start_left + blend_amount] *= gradient_left_x - # For visual debugging: - # tile_image[:, blend_start_left : blend_start_left + blend_amount] = 0 - - paste(dst_image=dst_image, src_image=tile_image, box=tile.coords, mask=mask) + # row_image[blend_start_top : blend_start_top + blend_amount, :] = 0 + paste( + dst_image=dst_image, + src_image=row_image, + box=TBLR( + top=first_tile_in_row.coords.top, + bottom=first_tile_in_row.coords.bottom, + left=0, + right=row_image.shape[1], + ), + mask=mask, + ) From bb87c988cbc97dd4dac9c785d5fd19d43cadd75d Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Wed, 29 Nov 2023 10:23:55 -0500 Subject: [PATCH 028/515] Change input field ordering of CropLatentsCoreInvocation to match ImageCropInvocation. --- invokeai/app/invocations/latent.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index ff9cc1dcf6..46a9c6a270 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -1190,16 +1190,6 @@ class CropLatentsCoreInvocation(BaseInvocation): description=FieldDescriptions.latents, input=Input.Connection, ) - width: int = InputField( - ge=1, - multiple_of=LATENT_SCALE_FACTOR, - description="The width (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", - ) - height: int = InputField( - ge=1, - multiple_of=LATENT_SCALE_FACTOR, - description="The height (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", - ) x_offset: int = InputField( ge=0, multiple_of=LATENT_SCALE_FACTOR, @@ -1210,6 +1200,16 @@ class CropLatentsCoreInvocation(BaseInvocation): multiple_of=LATENT_SCALE_FACTOR, description="The top y coordinate (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", ) + width: int = InputField( + ge=1, + multiple_of=LATENT_SCALE_FACTOR, + description="The width (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", + ) + height: int = InputField( + ge=1, + multiple_of=LATENT_SCALE_FACTOR, + description="The height (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space.", + ) def invoke(self, context: InvocationContext) -> LatentsOutput: latents = context.services.latents.get(self.latents.latents_name) From e46ac45741bd23c91268534c57debaac5f5e1dae Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 1 Dec 2023 09:19:24 -0500 Subject: [PATCH 029/515] port probing changes from main model_probe.py to refactored probe.py --- invokeai/backend/model_manager/probe.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/invokeai/backend/model_manager/probe.py b/invokeai/backend/model_manager/probe.py index 22c67742d8..b5f9227af2 100644 --- a/invokeai/backend/model_manager/probe.py +++ b/invokeai/backend/model_manager/probe.py @@ -422,6 +422,8 @@ class TextualInversionCheckpointProbe(CheckpointProbeBase): return BaseModelType.StableDiffusion1 elif token_dim == 1024: return BaseModelType.StableDiffusion2 + elif token_dim == 1280: + return BaseModelType.StableDiffusionXL else: raise InvalidModelConfigException("Could not determine base type") From 620b2d477a3346c524096fd809ea2277e0bf22c7 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 4 Dec 2023 17:08:33 -0500 Subject: [PATCH 030/515] implement suggestions from first review by @psychedelicious --- docs/contributing/MODEL_MANAGER.md | 26 ++-- invokeai/app/api/routers/model_records.py | 53 ++++++--- .../app/services/config/config_default.py | 6 +- .../app/services/model_install/__init__.py | 8 ++ .../model_install/model_install_base.py | 112 ++++++++++++++---- .../model_install/model_install_default.py | 40 ++++--- .../model_install/test_model_install.py | 10 +- 7 files changed, 177 insertions(+), 78 deletions(-) diff --git a/docs/contributing/MODEL_MANAGER.md b/docs/contributing/MODEL_MANAGER.md index f5c6b2846e..c230979361 100644 --- a/docs/contributing/MODEL_MANAGER.md +++ b/docs/contributing/MODEL_MANAGER.md @@ -455,17 +455,23 @@ The `import_model()` method is the core of the installer. The following illustrates basic usage: ``` -sources = [ - Path('/opt/models/sushi.safetensors'), # a local safetensors file - Path('/opt/models/sushi_diffusers/'), # a local diffusers folder - 'runwayml/stable-diffusion-v1-5', # a repo_id - 'runwayml/stable-diffusion-v1-5:vae', # a subfolder within a repo_id - 'https://civitai.com/api/download/models/63006', # a civitai direct download link - 'https://civitai.com/models/8765?modelVersionId=10638', # civitai model page - 'https://s3.amazon.com/fjacks/sd-3.safetensors', # arbitrary URL -] +from invokeai.app.services.model_install import ( + LocalModelSource, + HFModelSource, + URLModelSource, +) -for source in sources: +source1 = LocalModelSource(path='/opt/models/sushi.safetensors') # a local safetensors file +source2 = LocalModelSource(path='/opt/models/sushi_diffusers') # a local diffusers folder + +source3 = HFModelSource(repo_id='runwayml/stable-diffusion-v1-5') # a repo_id +source4 = HFModelSource(repo_id='runwayml/stable-diffusion-v1-5', subfolder='vae') # a subfolder within a repo_id +source5 = HFModelSource(repo_id='runwayml/stable-diffusion-v1-5', variant='fp16') # a named variant of a HF model + +source6 = URLModelSource(url='https://civitai.com/api/download/models/63006') # model located at a URL +source7 = URLModelSource(url='https://civitai.com/api/download/models/63006', access_token='letmein') # with an access token + +for source in [source1, source2, source3, source4, source5, source6, source7]: install_job = installer.install_model(source) source2job = installer.wait_for_installs() diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 90c58db3a1..9cae5e44ce 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -186,25 +186,11 @@ async def add_model_record( status_code=201, ) async def import_model( - source: ModelSource = Body( - description="A model path, repo_id or URL to import. NOTE: only model path is implemented currently!" - ), + source: ModelSource, config: Optional[Dict[str, Any]] = Body( description="Dict of fields that override auto-probed values in the model config record, such as name, description and prediction_type ", default=None, ), - variant: Optional[str] = Body( - description="When fetching a repo_id, force variant type to fetch such as 'fp16'", - default=None, - ), - subfolder: Optional[str] = Body( - description="When fetching a repo_id, specify subfolder to fetch model from", - default=None, - ), - access_token: Optional[str] = Body( - description="When fetching a repo_id or URL, access token for web access", - default=None, - ), ) -> ModelInstallJob: """Add a model using its local path, repo_id, or remote URL. @@ -212,6 +198,38 @@ async def import_model( series of background threads. The return object has `status` attribute that can be used to monitor progress. + The source object is a discriminated Union of LocalModelSource, + HFModelSource and URLModelSource. Set the "type" field to the + appropriate value: + + * To install a local path using LocalModelSource, pass a source of form: + `{ + "type": "local", + "path": "/path/to/model", + "inplace": false + }` + The "inplace" flag, if true, will register the model in place in its + current filesystem location. Otherwise, the model will be copied + into the InvokeAI models directory. + + * To install a HuggingFace repo_id using HFModelSource, pass a source of form: + `{ + "type": "hf", + "repo_id": "stabilityai/stable-diffusion-2.0", + "variant": "fp16", + "subfolder": "vae", + "access_token": "f5820a918aaf01" + }` + The `variant`, `subfolder` and `access_token` fields are optional. + + * To install a remote model using an arbitrary URL, pass: + `{ + "type": "url", + "url": "http://www.civitai.com/models/123456", + "access_token": "f5820a918aaf01" + }` + The `access_token` field is optonal + The model's configuration record will be probed and filled in automatically. To override the default guesses, pass "metadata" with a Dict containing the attributes you wish to override. @@ -234,11 +252,8 @@ async def import_model( try: installer = ApiDependencies.invoker.services.model_install result: ModelInstallJob = installer.import_model( - source, + source=source, config=config, - variant=variant, - subfolder=subfolder, - access_token=access_token, ) logger.info(f"Started installation of {source}") except UnknownModelException as e: diff --git a/invokeai/app/services/config/config_default.py b/invokeai/app/services/config/config_default.py index c298e3fb8f..f712640d9c 100644 --- a/invokeai/app/services/config/config_default.py +++ b/invokeai/app/services/config/config_default.py @@ -383,17 +383,17 @@ class InvokeAIAppConfig(InvokeAISettings): return db_dir / DB_FILE @property - def model_conf_path(self) -> Optional[Path]: + def model_conf_path(self) -> Path: """Path to models configuration file.""" return self._resolve(self.conf_path) @property - def legacy_conf_path(self) -> Optional[Path]: + def legacy_conf_path(self) -> Path: """Path to directory of legacy configuration files (e.g. v1-inference.yaml).""" return self._resolve(self.legacy_conf_dir) @property - def models_path(self) -> Optional[Path]: + def models_path(self) -> Path: """Path to the models directory.""" return self._resolve(self.models_dir) diff --git a/invokeai/app/services/model_install/__init__.py b/invokeai/app/services/model_install/__init__.py index e86e18863d..79cd748243 100644 --- a/invokeai/app/services/model_install/__init__.py +++ b/invokeai/app/services/model_install/__init__.py @@ -1,11 +1,15 @@ """Initialization file for model install service package.""" from .model_install_base import ( + HFModelSource, InstallStatus, + LocalModelSource, ModelInstallJob, ModelInstallServiceBase, ModelSource, + ModelSourceValidator, UnknownInstallJobException, + URLModelSource, ) from .model_install_default import ModelInstallService @@ -16,4 +20,8 @@ __all__ = [ "ModelInstallJob", "UnknownInstallJobException", "ModelSource", + "ModelSourceValidator", + "LocalModelSource", + "HFModelSource", + "URLModelSource", ] diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 0a4c17559c..baed791e61 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -1,11 +1,14 @@ +import re import traceback from abc import ABC, abstractmethod from enum import Enum from pathlib import Path -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List, Literal, Optional, Union -from pydantic import BaseModel, Field +from fastapi import Body +from pydantic import BaseModel, Field, TypeAdapter, field_validator from pydantic.networks import AnyHttpUrl +from typing_extensions import Annotated from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events import EventServiceBase @@ -27,7 +30,74 @@ class UnknownInstallJobException(Exception): """Raised when the status of an unknown job is requested.""" -ModelSource = Union[str, Path, AnyHttpUrl] +class StringLikeSource(BaseModel): + """Base class for model sources, implements functions that lets the source be sorted and indexed.""" + + def __hash__(self) -> int: + """Return hash of the path field, for indexing.""" + return hash(str(self)) + + def __lt__(self, other: Any) -> int: + """Return comparison of the stringified version, for sorting.""" + return str(self) < str(other) + + def __eq__(self, other: Any) -> bool: + """Return equality on the stringified version.""" + return str(self) == str(other) + + +class LocalModelSource(StringLikeSource): + """A local file or directory path.""" + + path: str | Path + inplace: Optional[bool] = False + type: Literal["local"] = "local" + + # these methods allow the source to be used in a string-like way, + # for example as an index into a dict + def __str__(self) -> str: + """Return string version of path when string rep needed.""" + return Path(self.path).as_posix() + + +class HFModelSource(StringLikeSource): + """A HuggingFace repo_id, with optional variant and sub-folder.""" + + repo_id: str + variant: Optional[str] = None + subfolder: Optional[str | Path] = None + access_token: Optional[str] = None + type: Literal["hf"] = "hf" + + @field_validator("repo_id") + @classmethod + def proper_repo_id(cls, v: str) -> str: # noqa D102 + if not re.match(r"^([.\w-]+/[.\w-]+)$", v): + raise ValueError(f"{v}: invalid repo_id format") + return v + + def __str__(self) -> str: + """Return string version of repoid when string rep needed.""" + base: str = self.repo_id + base += f":{self.subfolder}" if self.subfolder else "" + base += f" ({self.variant})" if self.variant else "" + return base + + +class URLModelSource(StringLikeSource): + """A generic URL point to a checkpoint file.""" + + url: AnyHttpUrl + access_token: Optional[str] = None + type: Literal["generic_url"] = "generic_url" + + def __str__(self) -> str: + """Return string version of the url when string rep needed.""" + return str(self.url) + + +ModelSource = Annotated[Union[LocalModelSource, HFModelSource, URLModelSource], Body(discriminator="type")] +ModelSourceValidator = TypeAdapter(ModelSource) class ModelInstallJob(BaseModel): @@ -74,6 +144,7 @@ class ModelInstallServiceBase(ABC): """ def start(self, invoker: Invoker) -> None: + """Call at InvokeAI startup time.""" self.sync_to_config() @property @@ -139,25 +210,12 @@ class ModelInstallServiceBase(ABC): @abstractmethod def import_model( self, - source: Union[str, Path, AnyHttpUrl], - inplace: bool = False, - variant: Optional[str] = None, - subfolder: Optional[str] = None, + source: ModelSource, config: Optional[Dict[str, Any]] = None, - access_token: Optional[str] = None, ) -> ModelInstallJob: """Install the indicated model. - :param source: Either a URL or a HuggingFace repo_id. - - :param inplace: If True, local paths will not be moved into - the models directory, but registered in place (the default). - - :param variant: For HuggingFace models, this optional parameter - specifies which variant to download (e.g. 'fp16') - - :param subfolder: When downloading HF repo_ids this can be used to - specify a subfolder of the HF repository to download from. + :param source: ModelSource object :param config: Optional dict. Any fields in this dict will override corresponding autoassigned probe fields in the @@ -165,9 +223,6 @@ class ModelInstallServiceBase(ABC): `name`, `description`, `base_type`, `model_type`, `format`, `prediction_type`, `image_size`, and/or `ztsnr_training`. - :param access_token: Access token for use in downloading remote - models. - This will download the model located at `source`, probe it, and install it into the models directory. This call is executed asynchronously in a separate @@ -196,7 +251,7 @@ class ModelInstallServiceBase(ABC): """Return the ModelInstallJob corresponding to the provided source.""" @abstractmethod - def list_jobs(self, source: Optional[ModelSource] = None) -> List[ModelInstallJob]: # noqa D102 + def list_jobs(self, source: Optional[ModelSource | str] = None) -> List[ModelInstallJob]: # noqa D102 """ List active and complete install jobs. @@ -208,11 +263,11 @@ class ModelInstallServiceBase(ABC): """Prune all completed and errored jobs.""" @abstractmethod - def wait_for_installs(self) -> Dict[Union[str, Path, AnyHttpUrl], ModelInstallJob]: + def wait_for_installs(self) -> Dict[ModelSource, ModelInstallJob]: """ Wait for all pending installs to complete. - This will block until all pending downloads have + This will block until all pending installs have completed, been cancelled, or errored out. It will block indefinitely if one or more jobs are in the paused state. @@ -234,3 +289,12 @@ class ModelInstallServiceBase(ABC): @abstractmethod def sync_to_config(self) -> None: """Synchronize models on disk to those in the model record database.""" + + @abstractmethod + def release(self) -> None: + """ + Signal the install thread to exit. + + This is useful if you are done with the installer and wish to + release its resources. + """ diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 17a0fca7bf..657e4aa293 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -2,6 +2,7 @@ import threading from hashlib import sha256 +from logging import Logger from pathlib import Path from queue import Queue from random import randbytes @@ -24,6 +25,7 @@ from invokeai.backend.util import Chdir, InvokeAILogger from .model_install_base import ( InstallStatus, + LocalModelSource, ModelInstallJob, ModelInstallServiceBase, ModelSource, @@ -31,7 +33,10 @@ from .model_install_base import ( ) # marker that the queue is done and that thread should exit -STOP_JOB = ModelInstallJob(source="stop", local_path=Path("/dev/null")) +STOP_JOB = ModelInstallJob( + source=LocalModelSource(path="stop"), + local_path=Path("/dev/null"), +) class ModelInstallService(ModelInstallServiceBase): @@ -42,7 +47,7 @@ class ModelInstallService(ModelInstallServiceBase): _event_bus: Optional[EventServiceBase] = None _install_queue: Queue[ModelInstallJob] _install_jobs: Dict[ModelSource, ModelInstallJob] - _logger: InvokeAILogger + _logger: Logger _cached_model_paths: Set[Path] _models_installed: Set[str] @@ -109,11 +114,16 @@ class ModelInstallService(ModelInstallServiceBase): def _signal_job_running(self, job: ModelInstallJob) -> None: job.status = InstallStatus.RUNNING + self._logger.info(f"{job.source}: model installation started") if self._event_bus: self._event_bus.emit_model_install_started(str(job.source)) def _signal_job_completed(self, job: ModelInstallJob) -> None: job.status = InstallStatus.COMPLETED + assert job.config_out + self._logger.info( + f"{job.source}: model installation completed. {job.local_path} registered key {job.config_out.key}" + ) if self._event_bus: assert job.local_path is not None assert job.config_out is not None @@ -122,6 +132,7 @@ class ModelInstallService(ModelInstallServiceBase): def _signal_job_errored(self, job: ModelInstallJob, excp: Exception) -> None: job.set_error(excp) + self._logger.info(f"{job.source}: model installation encountered an exception: {job.error_type}") if self._event_bus: error_type = job.error_type error = job.error @@ -151,7 +162,6 @@ class ModelInstallService(ModelInstallServiceBase): config["source"] = model_path.resolve().as_posix() info: AnyModelConfig = self._probe_model(Path(model_path), config) - old_hash = info.original_hash dest_path = self.app_config.models_path / info.base.value / info.type.value / model_path.name new_path = self._copy_model(model_path, dest_path) @@ -167,26 +177,17 @@ class ModelInstallService(ModelInstallServiceBase): def import_model( self, source: ModelSource, - inplace: bool = False, - variant: Optional[str] = None, - subfolder: Optional[str] = None, config: Optional[Dict[str, Any]] = None, - access_token: Optional[str] = None, ) -> ModelInstallJob: # noqa D102 - # Clean up a common source of error. Doesn't work with Paths. - if isinstance(source, str): - source = source.strip() - if not config: config = {} # Installing a local path - if isinstance(source, (str, Path)) and Path(source).exists(): # a path that is already on disk + if isinstance(source, LocalModelSource) and Path(source.path).exists(): # a path that is already on disk job = ModelInstallJob( - config_in=config, source=source, - inplace=inplace, - local_path=Path(source), + config_in=config, + local_path=Path(source.path), ) self._install_jobs[source] = job self._install_queue.put(job) @@ -195,13 +196,12 @@ class ModelInstallService(ModelInstallServiceBase): else: # here is where we'd download a URL or repo_id. Implementation pending download queue. raise UnknownModelException("File or directory not found") - def list_jobs(self, source: Optional[ModelSource] = None) -> List[ModelInstallJob]: # noqa D102 + def list_jobs(self, source: Optional[ModelSource | str] = None) -> List[ModelInstallJob]: # noqa D102 jobs = self._install_jobs if not source: return list(jobs.values()) else: - source = str(source) - return [jobs[x] for x in jobs if source in str(x)] + return [jobs[x] for x in jobs if str(source) in str(x)] def get_job(self, source: ModelSource) -> ModelInstallJob: # noqa D102 try: @@ -344,6 +344,10 @@ class ModelInstallService(ModelInstallServiceBase): path.unlink() self.unregister(key) + def release(self) -> None: + """Stop the install thread and release its resources.""" + self._install_queue.put(STOP_JOB) + def _copy_model(self, old_path: Path, new_path: Path) -> Path: if old_path == new_path: return old_path diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 75d79b04d9..7d6656f23e 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -12,6 +12,7 @@ from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events.events_base import EventServiceBase from invokeai.app.services.model_install import ( InstallStatus, + LocalModelSource, ModelInstallJob, ModelInstallService, ModelInstallServiceBase, @@ -124,9 +125,10 @@ def test_install(installer: ModelInstallServiceBase, test_file: Path, app_config def test_background_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig) -> None: """Note: may want to break this down into several smaller unit tests.""" - source = test_file + path = test_file description = "Test of metadata assignment" - job = installer.import_model(source, inplace=False, config={"description": description}) + source = LocalModelSource(path=path, inplace=False) + job = installer.import_model(source, config={"description": description}) assert job is not None assert isinstance(job, ModelInstallJob) @@ -147,8 +149,8 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, event_names = [x.event_name for x in bus.events] assert "model_install_started" in event_names assert "model_install_completed" in event_names - assert Path(bus.events[0].payload["source"]) == Path(source) - assert Path(bus.events[1].payload["source"]) == Path(source) + assert Path(bus.events[0].payload["source"]) == source + assert Path(bus.events[1].payload["source"]) == source key = bus.events[1].payload["key"] assert key is not None From 018ccebd6f1ac7cdb1017bb4866e776e3c02adba Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 4 Dec 2023 19:07:25 -0500 Subject: [PATCH 031/515] make ModelLocalSource comparisons work across platforms --- .../model_install/model_install_base.py | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index baed791e61..7f359772b3 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -31,19 +31,35 @@ class UnknownInstallJobException(Exception): class StringLikeSource(BaseModel): - """Base class for model sources, implements functions that lets the source be sorted and indexed.""" + """ + Base class for model sources, implements functions that lets the source be sorted and indexed. + + These shenanigans let this stuff work: + + source1 = LocalModelSource(path='C:/users/mort/foo.safetensors') + mydict = {source1: 'model 1'} + assert mydict['C:/users/mort/foo.safetensors'] == 'model 1' + assert mydict[LocalModelSource(path='C:/users/mort/foo.safetensors')] == 'model 1' + + source2 = LocalModelSource(path=Path('C:/users/mort/foo.safetensors')) + assert source1 == source2 + assert source1 == 'C:/users/mort/foo.safetensors' + """ def __hash__(self) -> int: """Return hash of the path field, for indexing.""" return hash(str(self)) - def __lt__(self, other: Any) -> int: + def __lt__(self, other: object) -> int: """Return comparison of the stringified version, for sorting.""" return str(self) < str(other) - def __eq__(self, other: Any) -> bool: + def __eq__(self, other: object) -> bool: """Return equality on the stringified version.""" - return str(self) == str(other) + if isinstance(other, Path): + return str(self) == other.as_posix() + else: + return str(self) == str(other) class LocalModelSource(StringLikeSource): From 6f46d15c05a81f2de3a0737460b4720d103b90b7 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 4 Dec 2023 20:09:41 -0500 Subject: [PATCH 032/515] Update invokeai/app/services/model_install/model_install_base.py Co-authored-by: Ryan Dick --- invokeai/app/services/model_install/model_install_base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 7f359772b3..b058e5c960 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -199,7 +199,7 @@ class ModelInstallServiceBase(ABC): """Remove model with indicated key from the database.""" @abstractmethod - def delete(self, key: str) -> None: # noqa D102 + def delete(self, key: str) -> None: """Remove model with indicated key from the database. Delete its files only if they are within our models directory.""" @abstractmethod From 2b583ffcdf8e37c54c04731e9a6d2a19e5d85efb Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 4 Dec 2023 21:12:10 -0500 Subject: [PATCH 033/515] implement review suggestions from @RyanjDick --- docs/contributing/MODEL_MANAGER.md | 12 +++--- invokeai/app/api/routers/model_records.py | 3 +- .../model_install/model_install_base.py | 28 +++++++------- .../model_install/model_install_default.py | 37 ++++++++----------- invokeai/backend/model_manager/search.py | 1 - .../model_install/test_model_install.py | 14 +++---- .../model_install/test_model_install/README | 1 + 7 files changed, 43 insertions(+), 53 deletions(-) create mode 100644 tests/app/services/model_install/test_model_install/README diff --git a/docs/contributing/MODEL_MANAGER.md b/docs/contributing/MODEL_MANAGER.md index c230979361..ce55a4d0ad 100644 --- a/docs/contributing/MODEL_MANAGER.md +++ b/docs/contributing/MODEL_MANAGER.md @@ -643,11 +643,10 @@ install_job = installer.import_model( This section describes additional methods provided by the installer class. -#### source2job = installer.wait_for_installs() +#### jobs = installer.wait_for_installs() -Block until all pending installs are completed or errored and return a -dictionary that maps the model `source` to the completed -`ModelInstallJob`. +Block until all pending installs are completed or errored and then +returns a list of completed jobs. #### jobs = installer.list_jobs([source]) @@ -655,9 +654,10 @@ Return a list of all active and complete `ModelInstallJobs`. An optional `source` argument allows you to filter the returned list by a model source string pattern using a partial string match. -#### job = installer.get_job(source) +#### jobs = installer.get_job(source) -Return the `ModelInstallJob` corresponding to the indicated model source. +Return a list of `ModelInstallJob` corresponding to the indicated +model source. #### installer.prune_jobs diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 9cae5e44ce..0efd539476 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -178,7 +178,6 @@ async def add_model_record( operation_id="import_model_record", responses={ 201: {"description": "The model imported successfully"}, - 404: {"description": "The model could not be found"}, 415: {"description": "Unrecognized file/folder format"}, 424: {"description": "The model appeared to import successfully, but could not be found in the model manager"}, 409: {"description": "There is already a model corresponding to this path or repo_id"}, @@ -258,7 +257,7 @@ async def import_model( logger.info(f"Started installation of {source}") except UnknownModelException as e: logger.error(str(e)) - raise HTTPException(status_code=404, detail=str(e)) + raise HTTPException(status_code=424, detail=str(e)) except InvalidModelException as e: logger.error(str(e)) raise HTTPException(status_code=415) diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 7f359772b3..1f62f2a740 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -112,6 +112,16 @@ class URLModelSource(StringLikeSource): return str(self.url) +# Body() is being applied here rather than Field() because otherwise FastAPI will +# refuse to generate a schema. Relevant links: +# +# "Model Manager Refactor Phase 1 - SQL-based config storage +# https://github.com/invoke-ai/InvokeAI/pull/5039#discussion_r1389752119 (comment) +# Param: xyz can only be a request body, using Body() when using discriminated unions +# https://github.com/tiangolo/fastapi/discussions/9761 +# Body parameter cannot be a pydantic union anymore sinve v0.95 +# https://github.com/tiangolo/fastapi/discussions/9287 + ModelSource = Annotated[Union[LocalModelSource, HFModelSource, URLModelSource], Body(discriminator="type")] ModelSourceValidator = TypeAdapter(ModelSource) @@ -263,8 +273,8 @@ class ModelInstallServiceBase(ABC): """ @abstractmethod - def get_job(self, source: ModelSource) -> ModelInstallJob: - """Return the ModelInstallJob corresponding to the provided source.""" + def get_job(self, source: ModelSource) -> List[ModelInstallJob]: + """Return the ModelInstallJob(s) corresponding to the provided source.""" @abstractmethod def list_jobs(self, source: Optional[ModelSource | str] = None) -> List[ModelInstallJob]: # noqa D102 @@ -279,7 +289,7 @@ class ModelInstallServiceBase(ABC): """Prune all completed and errored jobs.""" @abstractmethod - def wait_for_installs(self) -> Dict[ModelSource, ModelInstallJob]: + def wait_for_installs(self) -> List[ModelInstallJob]: """ Wait for all pending installs to complete. @@ -288,8 +298,7 @@ class ModelInstallServiceBase(ABC): block indefinitely if one or more jobs are in the paused state. - It will return a dict that maps the source model - path, URL or repo_id to the ID of the installed model. + It will return the current list of jobs. """ @abstractmethod @@ -305,12 +314,3 @@ class ModelInstallServiceBase(ABC): @abstractmethod def sync_to_config(self) -> None: """Synchronize models on disk to those in the model record database.""" - - @abstractmethod - def release(self) -> None: - """ - Signal the install thread to exit. - - This is useful if you are done with the installer and wish to - release its resources. - """ diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 657e4aa293..9ae1ee50c3 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -29,7 +29,6 @@ from .model_install_base import ( ModelInstallJob, ModelInstallServiceBase, ModelSource, - UnknownInstallJobException, ) # marker that the queue is done and that thread should exit @@ -46,7 +45,7 @@ class ModelInstallService(ModelInstallServiceBase): _record_store: ModelRecordServiceBase _event_bus: Optional[EventServiceBase] = None _install_queue: Queue[ModelInstallJob] - _install_jobs: Dict[ModelSource, ModelInstallJob] + _install_jobs: List[ModelInstallJob] _logger: Logger _cached_model_paths: Set[Path] _models_installed: Set[str] @@ -68,12 +67,16 @@ class ModelInstallService(ModelInstallServiceBase): self._record_store = record_store self._event_bus = event_bus self._logger = InvokeAILogger.get_logger(name=self.__class__.__name__) - self._install_jobs = {} + self._install_jobs = [] self._install_queue = Queue() self._cached_model_paths = set() self._models_installed = set() self._start_installer_thread() + def __del__(self) -> None: + """At GC time, we stop the install thread and release its resources.""" + self._install_queue.put(STOP_JOB) + @property def app_config(self) -> InvokeAIAppConfig: # noqa D102 return self._app_config @@ -189,7 +192,7 @@ class ModelInstallService(ModelInstallServiceBase): config_in=config, local_path=Path(source.path), ) - self._install_jobs[source] = job + self._install_jobs.append(job) self._install_queue.put(job) return job @@ -199,29 +202,23 @@ class ModelInstallService(ModelInstallServiceBase): def list_jobs(self, source: Optional[ModelSource | str] = None) -> List[ModelInstallJob]: # noqa D102 jobs = self._install_jobs if not source: - return list(jobs.values()) + return jobs else: - return [jobs[x] for x in jobs if str(source) in str(x)] + return [x for x in jobs if str(source) in str(x)] - def get_job(self, source: ModelSource) -> ModelInstallJob: # noqa D102 - try: - return self._install_jobs[source] - except KeyError: - raise UnknownInstallJobException(f"{source}: unknown install job") + def get_job(self, source: ModelSource) -> List[ModelInstallJob]: # noqa D102 + return [x for x in self._install_jobs if x.source == source] - def wait_for_installs(self) -> Dict[ModelSource, ModelInstallJob]: # noqa D102 + def wait_for_installs(self) -> List[ModelInstallJob]: # noqa D102 self._install_queue.join() return self._install_jobs def prune_jobs(self) -> None: """Prune all completed and errored jobs.""" - finished_jobs = [ - source - for source in self._install_jobs - if self._install_jobs[source].status in [InstallStatus.COMPLETED, InstallStatus.ERROR] + unfinished_jobs = [ + x for x in self._install_jobs if x.status not in [InstallStatus.COMPLETED, InstallStatus.ERROR] ] - for source in finished_jobs: - del self._install_jobs[source] + self._install_jobs = unfinished_jobs def sync_to_config(self) -> None: """Synchronize models on disk to those in the config record store database.""" @@ -344,10 +341,6 @@ class ModelInstallService(ModelInstallServiceBase): path.unlink() self.unregister(key) - def release(self) -> None: - """Stop the install thread and release its resources.""" - self._install_queue.put(STOP_JOB) - def _copy_model(self, old_path: Path, new_path: Path) -> Path: if old_path == new_path: return old_path diff --git a/invokeai/backend/model_manager/search.py b/invokeai/backend/model_manager/search.py index 7492e471d3..45019bb103 100644 --- a/invokeai/backend/model_manager/search.py +++ b/invokeai/backend/model_manager/search.py @@ -115,7 +115,6 @@ class ModelSearch(ModelSearchBase): # returns all models that have 'anime' in the path """ - directory: Path = Field(default=None) models_found: Set[Path] = Field(default=None) scanned_dirs: Set[Path] = Field(default=None) pruned_paths: Set[Path] = Field(default=None) diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 7d6656f23e..849d21188d 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -16,7 +16,6 @@ from invokeai.app.services.model_install import ( ModelInstallJob, ModelInstallService, ModelInstallServiceBase, - UnknownInstallJobException, ) from invokeai.app.services.model_records import ModelRecordServiceBase, ModelRecordServiceSQL, UnknownModelException from invokeai.app.services.shared.sqlite import SqliteDatabase @@ -133,13 +132,14 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, assert isinstance(job, ModelInstallJob) # See if job is registered properly - assert installer.get_job(source) == job + assert job in installer.get_job(source) # test that the job object tracked installation correctly jobs = installer.wait_for_installs() - assert jobs[source] is not None - assert jobs[source] == job - assert jobs[source].status == InstallStatus.COMPLETED + assert len(jobs) > 0 + my_job = [x for x in jobs if x.source == source] + assert len(my_job) == 1 + assert my_job[0].status == InstallStatus.COMPLETED # test that the expected events were issued bus = installer.event_bus @@ -165,9 +165,7 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, # see if prune works properly installer.prune_jobs() - with pytest.raises(UnknownInstallJobException): - assert installer.get_job(source) - + assert not installer.get_job(source) def test_delete_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig): store = installer.record_store diff --git a/tests/app/services/model_install/test_model_install/README b/tests/app/services/model_install/test_model_install/README new file mode 100644 index 0000000000..af555d18a3 --- /dev/null +++ b/tests/app/services/model_install/test_model_install/README @@ -0,0 +1 @@ +This directory is used by pytest-datadir. From 7c9f48b84d63c15fc6fd87b6ae342e1552008544 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 4 Dec 2023 21:14:02 -0500 Subject: [PATCH 034/515] fix ruff check --- tests/app/services/model_install/test_model_install.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 849d21188d..607337fe85 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -167,6 +167,7 @@ def test_background_install(installer: ModelInstallServiceBase, test_file: Path, installer.prune_jobs() assert not installer.get_job(source) + def test_delete_install(installer: ModelInstallServiceBase, test_file: Path, app_config: InvokeAIAppConfig): store = installer.record_store key = installer.install_path(test_file) From 3b06cc678240094f0dfcab2e2059344780faa5f3 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 4 Dec 2023 21:15:56 -0500 Subject: [PATCH 035/515] reformatted using newer version of ruff --- invokeai/app/api/routers/model_records.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 0efd539476..8cfb80d758 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -150,7 +150,7 @@ async def del_model_record( status_code=201, ) async def add_model_record( - config: Annotated[AnyModelConfig, Body(description="Model config", discriminator="type")] + config: Annotated[AnyModelConfig, Body(description="Model config", discriminator="type")], ) -> AnyModelConfig: """ Add a model using the configuration information appropriate for its type. From 14254e8be8056ad7ff5a615cb2145cbb607fdc68 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 5 Dec 2023 12:29:55 +0000 Subject: [PATCH 036/515] First check-in of new tile nodes - calc_tiles_even_split - calc_tiles_min_overlap - merge_tiles_with_seam_blending Update MergeTilesToImageInvocation with seam blending --- invokeai/app/invocations/tiles.py | 114 +++++++++++++++- invokeai/backend/tiles/tiles.py | 213 +++++++++++++++++++++++++++--- invokeai/backend/tiles/utils.py | 132 +++++++++++++++++- 3 files changed, 433 insertions(+), 26 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index d1b51a43f0..f21ee1bf5c 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -1,3 +1,5 @@ +from typing import Literal + import numpy as np from PIL import Image from pydantic import BaseModel @@ -5,6 +7,7 @@ from pydantic import BaseModel from invokeai.app.invocations.baseinvocation import ( BaseInvocation, BaseInvocationOutput, + Input, InputField, InvocationContext, OutputField, @@ -15,7 +18,13 @@ from invokeai.app.invocations.baseinvocation import ( ) from invokeai.app.invocations.primitives import ImageField, ImageOutput from invokeai.app.services.image_records.image_records_common import ImageCategory, ResourceOrigin -from invokeai.backend.tiles.tiles import calc_tiles_with_overlap, merge_tiles_with_linear_blending +from invokeai.backend.tiles.tiles import ( + calc_tiles_even_split, + calc_tiles_min_overlap, + calc_tiles_with_overlap, + merge_tiles_with_linear_blending, + merge_tiles_with_seam_blending, +) from invokeai.backend.tiles.utils import Tile @@ -56,6 +65,86 @@ class CalculateImageTilesInvocation(BaseInvocation): return CalculateImageTilesOutput(tiles=tiles) +@invocation( + "calculate_image_tiles_Even_Split", + title="Calculate Image Tiles Even Split", + tags=["tiles"], + category="tiles", + version="1.0.0", +) +class CalculateImageTilesEvenSplitInvocation(BaseInvocation): + """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" + + image_width: int = InputField(ge=1, default=1024, description="The image width, in pixels, to calculate tiles for.") + image_height: int = InputField( + ge=1, default=1024, description="The image height, in pixels, to calculate tiles for." + ) + num_tiles_x: int = InputField( + default=2, + ge=1, + description="Number of tiles to divide image into on the x axis", + ) + num_tiles_y: int = InputField( + default=2, + ge=1, + description="Number of tiles to divide image into on the y axis", + ) + overlap: float = InputField( + default=0.25, + ge=0, + lt=1, + description="Overlap amount of tile size (0-1)", + ) + + def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput: + tiles = calc_tiles_even_split( + image_height=self.image_height, + image_width=self.image_width, + num_tiles_x=self.num_tiles_x, + num_tiles_y=self.num_tiles_y, + overlap=self.overlap, + ) + return CalculateImageTilesOutput(tiles=tiles) + + +@invocation( + "calculate_image_tiles_min_overlap", + title="Calculate Image Tiles Minimum Overlap", + tags=["tiles"], + category="tiles", + version="1.0.0", +) +class CalculateImageTilesMinimumOverlapInvocation(BaseInvocation): + """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" + + image_width: int = InputField(ge=1, default=1024, description="The image width, in pixels, to calculate tiles for.") + image_height: int = InputField( + ge=1, default=1024, description="The image height, in pixels, to calculate tiles for." + ) + tile_width: int = InputField(ge=1, default=576, description="The tile width, in pixels.") + tile_height: int = InputField(ge=1, default=576, description="The tile height, in pixels.") + min_overlap: int = InputField( + default=128, + ge=0, + description="minimum tile overlap size (must be a multiple of 8)", + ) + round_to_8: bool = InputField( + default=False, + description="Round outputs down to the nearest 8 (for pulling from a large noise field)", + ) + + def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput: + tiles = calc_tiles_min_overlap( + image_height=self.image_height, + image_width=self.image_width, + tile_height=self.tile_height, + tile_width=self.tile_width, + min_overlap=self.min_overlap, + round_to_8=self.round_to_8, + ) + return CalculateImageTilesOutput(tiles=tiles) + + @invocation_output("tile_to_properties_output") class TileToPropertiesOutput(BaseInvocationOutput): coords_top: int = OutputField(description="Top coordinate of the tile relative to its parent image.") @@ -122,13 +211,22 @@ class PairTileImageInvocation(BaseInvocation): ) -@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.0.0") +BLEND_MODES = Literal["Linear", "Seam"] + + +@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.1.0") class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): """Merge multiple tile images into a single image.""" # Inputs tiles_with_images: list[TileWithImage] = InputField(description="A list of tile images with tile properties.") + blend_mode: BLEND_MODES = InputField( + default="Seam", + description="blending type Linear or Seam", + input=Input.Direct, + ) blend_amount: int = InputField( + default=32, ge=0, description="The amount to blend adjacent tiles in pixels. Must be <= the amount of overlap between adjacent tiles.", ) @@ -158,10 +256,16 @@ class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): channels = tile_np_images[0].shape[-1] dtype = tile_np_images[0].dtype np_image = np.zeros(shape=(height, width, channels), dtype=dtype) + if self.blend_mode == "Linear": + merge_tiles_with_linear_blending( + dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount + ) + else: + merge_tiles_with_seam_blending( + dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount + ) - merge_tiles_with_linear_blending( - dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount - ) + # Convert into a PIL image and save pil_image = Image.fromarray(np_image) image_dto = context.services.images.create( diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 3a678d825e..18584350a5 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -1,9 +1,8 @@ import math -from typing import Union import numpy as np -from invokeai.backend.tiles.utils import TBLR, Tile, paste +from invokeai.backend.tiles.utils import TBLR, Tile, calc_overlap, paste, seam_blend def calc_tiles_with_overlap( @@ -63,31 +62,117 @@ def calc_tiles_with_overlap( tiles.append(tile) - def get_tile_or_none(idx_y: int, idx_x: int) -> Union[Tile, None]: - if idx_y < 0 or idx_y > num_tiles_y or idx_x < 0 or idx_x > num_tiles_x: - return None - return tiles[idx_y * num_tiles_x + idx_x] + return calc_overlap(tiles, num_tiles_x, num_tiles_y) - # Iterate over tiles again and calculate overlaps. + +def calc_tiles_even_split( + image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap: float = 0 +) -> list[Tile]: + """Calculate the tile coordinates for a given image shape with the number of tiles requested. + + Args: + image_height (int): The image height in px. + image_width (int): The image width in px. + num_x_tiles (int): The number of tile to split the image into on the X-axis. + num_y_tiles (int): The number of tile to split the image into on the Y-axis. + overlap (int, optional): The target overlap amount of the tiles size. Defaults to 0. + + Returns: + list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. + """ + + # Ensure tile size is divisible by 8 + if image_width % 8 != 0 or image_height % 8 != 0: + raise ValueError(f"image size (({image_width}, {image_height})) must be divisible by 8") + + # Calculate the overlap size based on the percentage and adjust it to be divisible by 8 (rounding up) + overlap_x = 8 * math.ceil(int((image_width / num_tiles_x) * overlap) / 8) + overlap_y = 8 * math.ceil(int((image_height / num_tiles_y) * overlap) / 8) + + # Calculate the tile size based on the number of tiles and overlap, and ensure it's divisible by 8 (rounding down) + tile_size_x = 8 * math.floor(((image_width + overlap_x * (num_tiles_x - 1)) // num_tiles_x) / 8) + tile_size_y = 8 * math.floor(((image_height + overlap_y * (num_tiles_y - 1)) // num_tiles_y) / 8) + + # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. + tiles: list[Tile] = [] + + # Calculate tile coordinates. (Ignore overlap values for now.) for tile_idx_y in range(num_tiles_y): + # Calculate the top and bottom of the row + top = tile_idx_y * (tile_size_y - overlap_y) + bottom = min(top + tile_size_y, image_height) + # For the last row adjust bottom to be the height of the image + if tile_idx_y == num_tiles_y - 1: + bottom = image_height + for tile_idx_x in range(num_tiles_x): - cur_tile = get_tile_or_none(tile_idx_y, tile_idx_x) - top_neighbor_tile = get_tile_or_none(tile_idx_y - 1, tile_idx_x) - left_neighbor_tile = get_tile_or_none(tile_idx_y, tile_idx_x - 1) + # Calculate the left & right coordinate of each tile + left = tile_idx_x * (tile_size_x - overlap_x) + right = min(left + tile_size_x, image_width) + # For the last tile in the row adjust right to be the width of the image + if tile_idx_x == num_tiles_x - 1: + right = image_width - assert cur_tile is not None + tile = Tile( + coords=TBLR(top=top, bottom=bottom, left=left, right=right), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) - # Update cur_tile top-overlap and corresponding top-neighbor bottom-overlap. - if top_neighbor_tile is not None: - cur_tile.overlap.top = max(0, top_neighbor_tile.coords.bottom - cur_tile.coords.top) - top_neighbor_tile.overlap.bottom = cur_tile.overlap.top + tiles.append(tile) - # Update cur_tile left-overlap and corresponding left-neighbor right-overlap. - if left_neighbor_tile is not None: - cur_tile.overlap.left = max(0, left_neighbor_tile.coords.right - cur_tile.coords.left) - left_neighbor_tile.overlap.right = cur_tile.overlap.left + return calc_overlap(tiles, num_tiles_x, num_tiles_y) - return tiles + +def calc_tiles_min_overlap( + image_height: int, image_width: int, tile_height: int, tile_width: int, min_overlap: int, round_to_8: bool +) -> list[Tile]: + """Calculate the tile coordinates for a given image shape under a simple tiling scheme with overlaps. + + Args: + image_height (int): The image height in px. + image_width (int): The image width in px. + tile_height (int): The tile height in px. All tiles will have this height. + tile_width (int): The tile width in px. All tiles will have this width. + min_overlap (int): The target minimum overlap between adjacent tiles. If the tiles do not evenly cover the image + shape, then the overlap will be spread between the tiles. + + Returns: + list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. + """ + assert image_height >= tile_height + assert image_width >= tile_width + assert min_overlap < tile_height + assert min_overlap < tile_width + + num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 + num_tiles_y = ( + math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1 + ) + + # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. + tiles: list[Tile] = [] + + # Calculate tile coordinates. (Ignore overlap values for now.) + for tile_idx_y in range(num_tiles_y): + top = (tile_idx_y * (image_height - tile_height)) // (num_tiles_y - 1) if num_tiles_y > 1 else 0 + if round_to_8: + top = 8 * (top // 8) + bottom = top + tile_height + + for tile_idx_x in range(num_tiles_x): + left = (tile_idx_x * (image_width - tile_width)) // (num_tiles_x - 1) if num_tiles_x > 1 else 0 + if round_to_8: + left = 8 * (left // 8) + right = left + tile_width + + tile = Tile( + coords=TBLR(top=top, bottom=bottom, left=left, right=right), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) + + tiles.append(tile) + + return calc_overlap(tiles, num_tiles_x, num_tiles_y) def merge_tiles_with_linear_blending( @@ -199,3 +284,91 @@ def merge_tiles_with_linear_blending( ), mask=mask, ) + + +def merge_tiles_with_seam_blending( + dst_image: np.ndarray, tiles: list[Tile], tile_images: list[np.ndarray], blend_amount: int +): + """Merge a set of image tiles into `dst_image` with seam blending between the tiles. + + We expect every tile edge to either: + 1) have an overlap of 0, because it is aligned with the image edge, or + 2) have an overlap >= blend_amount. + If neither of these conditions are satisfied, we raise an exception. + + The seam blending is centered on a seam of least energy of the overlap between adjacent tiles. + + Args: + dst_image (np.ndarray): The destination image. Shape: (H, W, C). + tiles (list[Tile]): The list of tiles describing the locations of the respective `tile_images`. + tile_images (list[np.ndarray]): The tile images to merge into `dst_image`. + blend_amount (int): The amount of blending (in px) between adjacent overlapping tiles. + """ + # Sort tiles and images first by left x coordinate, then by top y coordinate. During tile processing, we want to + # iterate over tiles left-to-right, top-to-bottom. + tiles_and_images = list(zip(tiles, tile_images, strict=True)) + tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.left) + tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.top) + + # Organize tiles into rows. + tile_and_image_rows: list[list[tuple[Tile, np.ndarray]]] = [] + cur_tile_and_image_row: list[tuple[Tile, np.ndarray]] = [] + first_tile_in_cur_row, _ = tiles_and_images[0] + for tile_and_image in tiles_and_images: + tile, _ = tile_and_image + if not ( + tile.coords.top == first_tile_in_cur_row.coords.top + and tile.coords.bottom == first_tile_in_cur_row.coords.bottom + ): + # Store the previous row, and start a new one. + tile_and_image_rows.append(cur_tile_and_image_row) + cur_tile_and_image_row = [] + first_tile_in_cur_row, _ = tile_and_image + + cur_tile_and_image_row.append(tile_and_image) + tile_and_image_rows.append(cur_tile_and_image_row) + + for tile_and_image_row in tile_and_image_rows: + first_tile_in_row, _ = tile_and_image_row[0] + row_height = first_tile_in_row.coords.bottom - first_tile_in_row.coords.top + row_image = np.zeros((row_height, dst_image.shape[1], dst_image.shape[2]), dtype=dst_image.dtype) + + # Blend the tiles in the row horizontally. + for tile, tile_image in tile_and_image_row: + # We expect the tiles to be ordered left-to-right. + # For each tile: + # - extract the overlap regions and pass to seam_blend() + # - apply blended region to the row_image + # - apply the un-blended region to the row_image + tile_height, tile_width, _ = tile_image.shape + overlap_size = tile.overlap.left + # Left blending: + if overlap_size > 0: + assert overlap_size >= blend_amount + + overlap_coord_right = tile.coords.left + overlap_size + src_overlap = row_image[:, tile.coords.left : overlap_coord_right] + dst_overlap = tile_image[:, :overlap_size] + blended_overlap = seam_blend(src_overlap, dst_overlap, blend_amount, x_seam=False) + row_image[:, tile.coords.left : overlap_coord_right] = blended_overlap + row_image[:, overlap_coord_right : tile.coords.right] = tile_image[:, overlap_size:] + else: + # no overlap just paste the tile + row_image[:, tile.coords.left : tile.coords.right] = tile_image + + # Blend the row into the dst_image + # We assume that the entire row has the same vertical overlaps as the first_tile_in_row. + # Rows are processed in the same way as tiles (extract overlap, blend, apply) + row_overlap_size = first_tile_in_row.overlap.top + if row_overlap_size > 0: + assert row_overlap_size >= blend_amount + + overlap_coords_bottom = first_tile_in_row.coords.top + row_overlap_size + src_overlap = dst_image[first_tile_in_row.coords.top : overlap_coords_bottom, :] + dst_overlap = row_image[:row_overlap_size, :] + blended_overlap = seam_blend(src_overlap, dst_overlap, blend_amount, x_seam=True) + dst_image[first_tile_in_row.coords.top : overlap_coords_bottom, :] = blended_overlap + dst_image[overlap_coords_bottom : first_tile_in_row.coords.bottom, :] = row_image[row_overlap_size:, :] + else: + # no overlap just paste the row + row_image[first_tile_in_row.coords.top:first_tile_in_row.coords.bottom, :] = row_image diff --git a/invokeai/backend/tiles/utils.py b/invokeai/backend/tiles/utils.py index 4ad40ffa35..34bb28aebb 100644 --- a/invokeai/backend/tiles/utils.py +++ b/invokeai/backend/tiles/utils.py @@ -1,6 +1,9 @@ -from typing import Optional +import math +from typing import Optional, Union +import cv2 import numpy as np +#from PIL import Image from pydantic import BaseModel, Field @@ -45,3 +48,130 @@ def paste(dst_image: np.ndarray, src_image: np.ndarray, box: TBLR, mask: Optiona mask = np.expand_dims(mask, -1) dst_image_box = dst_image[box.top : box.bottom, box.left : box.right] dst_image[box.top : box.bottom, box.left : box.right] = src_image * mask + dst_image_box * (1.0 - mask) + + +def calc_overlap(tiles: list[Tile], num_tiles_x, num_tiles_y) -> list[Tile]: + """Calculate and update the overlap of a list of tiles. + + Args: + tiles (list[Tile]): The list of tiles describing the locations of the respective `tile_images`. + num_tiles_x: the number of tiles on the x axis. + num_tiles_y: the number of tiles on the y axis. + """ + def get_tile_or_none(idx_y: int, idx_x: int) -> Union[Tile, None]: + if idx_y < 0 or idx_y > num_tiles_y or idx_x < 0 or idx_x > num_tiles_x: + return None + return tiles[idx_y * num_tiles_x + idx_x] + + for tile_idx_y in range(num_tiles_y): + for tile_idx_x in range(num_tiles_x): + cur_tile = get_tile_or_none(tile_idx_y, tile_idx_x) + top_neighbor_tile = get_tile_or_none(tile_idx_y - 1, tile_idx_x) + left_neighbor_tile = get_tile_or_none(tile_idx_y, tile_idx_x - 1) + + assert cur_tile is not None + + # Update cur_tile top-overlap and corresponding top-neighbor bottom-overlap. + if top_neighbor_tile is not None: + cur_tile.overlap.top = max(0, top_neighbor_tile.coords.bottom - cur_tile.coords.top) + top_neighbor_tile.overlap.bottom = cur_tile.overlap.top + + # Update cur_tile left-overlap and corresponding left-neighbor right-overlap. + if left_neighbor_tile is not None: + cur_tile.overlap.left = max(0, left_neighbor_tile.coords.right - cur_tile.coords.left) + left_neighbor_tile.overlap.right = cur_tile.overlap.left + return tiles + + +def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool,) -> np.ndarray: + """Blend two overlapping tile sections using a seams to find a path. + + It is assumed that input images will be RGB np arrays and are the same size. + + Args: + ia1 (torch.Tensor): Image array 1 Shape: (H, W, C). + ia2 (torch.Tensor): Image array 2 Shape: (H, W, C). + x_seam (bool): If the images should be blended on the x axis or not. + blend_amount (int): The size of the blur to use on the seam. Half of this value will be used to avoid the edges of the image. + """ + + def shift(arr, num, fill_value=255.0): + result = np.full_like(arr, fill_value) + if num > 0: + result[num:] = arr[:-num] + elif num < 0: + result[:num] = arr[-num:] + else: + result[:] = arr + return result + + # Assume RGB and convert to grey + iag1 = np.dot(ia1, [0.2989, 0.5870, 0.1140]) + iag2 = np.dot(ia2, [0.2989, 0.5870, 0.1140]) + + # Calc Difference between the images + ia = iag2 - iag1 + + # If the seam is on the X-axis rotate the array so we can treat it like a vertical seam + if x_seam: + ia = np.rot90(ia, 1) + + # Calc max and min X & Y limits + # gutter is used to avoid the blur hitting the edge of the image + gutter = math.ceil(blend_amount / 2) if blend_amount > 0 else 0 + max_y, max_x = ia.shape + max_x -= gutter + min_x = gutter + + # Calc the energy in the difference + energy = np.abs(np.gradient(ia, axis=0)) + np.abs(np.gradient(ia, axis=1)) + + #Find the starting position of the seam + res = np.copy(energy) + for y in range(1, max_y): + row = res[y, :] + rowl = shift(row, -1) + rowr = shift(row, 1) + res[y, :] = res[y - 1, :] + np.min([row, rowl, rowr], axis=0) + + # create an array max_y long + lowest_energy_line = np.empty([max_y], dtype="uint16") + lowest_energy_line[max_y - 1] = np.argmin(res[max_y - 1, min_x : max_x - 1]) + + #Calc the path of the seam + for ypos in range(max_y - 2, -1, -1): + lowest_pos = lowest_energy_line[ypos + 1] + lpos = lowest_pos - 1 + rpos = lowest_pos + 1 + lpos = np.clip(lpos, min_x, max_x - 1) + rpos = np.clip(rpos, min_x, max_x - 1) + lowest_energy_line[ypos] = np.argmin(energy[ypos, lpos : rpos + 1]) + lpos + + # Draw the mask + mask = np.zeros_like(ia) + for ypos in range(0, max_y): + to_fill = lowest_energy_line[ypos] + mask[ypos, :to_fill] = 1 + + # If the seam is on the X-axis rotate the array back + if x_seam: + mask = np.rot90(mask, 3) + + # blur the seam mask if required + if blend_amount > 0: + mask = cv2.blur(mask, (blend_amount, blend_amount)) + + # copy ia2 over ia1 while applying the seam mask + mask = np.expand_dims(mask, -1) + blended_image = ia1 * mask + ia2 * (1.0 - mask) + + # for debugging to see the final blended overlap image + #image = Image.fromarray((mask * 255.0).astype("uint8")) + #i1 = Image.fromarray(ia1.astype("uint8")) + #i2 = Image.fromarray(ia2.astype("uint8")) + #bimage = Image.fromarray(blended_image.astype("uint8")) + + #print(f"{ia1.shape}, {ia2.shape}, {mask.shape}, {blended_image.shape}") + #print(f"{i1.size}, {i2.size}, {image.size}, {bimage.size}") + + return blended_image From 674d9796d079f981a34569756c97d68ba6507381 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 5 Dec 2023 21:03:16 +0000 Subject: [PATCH 037/515] First check-in of new tile nodes - calc_tiles_even_split - calc_tiles_min_overlap - merge_tiles_with_seam_blending Update MergeTilesToImageInvocation with seam blending --- invokeai/app/invocations/tiles.py | 114 +++++++++++++- invokeai/backend/tiles/tiles.py | 245 +++++++++++++++++++++++++++--- invokeai/backend/tiles/utils.py | 100 ++++++++++++ 3 files changed, 435 insertions(+), 24 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index 3055c1baae..609b539610 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -1,3 +1,5 @@ +from typing import Literal + import numpy as np from PIL import Image from pydantic import BaseModel @@ -5,6 +7,7 @@ from pydantic import BaseModel from invokeai.app.invocations.baseinvocation import ( BaseInvocation, BaseInvocationOutput, + Input, InputField, InvocationContext, OutputField, @@ -15,7 +18,13 @@ from invokeai.app.invocations.baseinvocation import ( ) from invokeai.app.invocations.primitives import ImageField, ImageOutput from invokeai.app.services.image_records.image_records_common import ImageCategory, ResourceOrigin -from invokeai.backend.tiles.tiles import calc_tiles_with_overlap, merge_tiles_with_linear_blending +from invokeai.backend.tiles.tiles import ( + calc_tiles_even_split, + calc_tiles_min_overlap, + calc_tiles_with_overlap, + merge_tiles_with_linear_blending, + merge_tiles_with_seam_blending, +) from invokeai.backend.tiles.utils import Tile @@ -56,6 +65,86 @@ class CalculateImageTilesInvocation(BaseInvocation): return CalculateImageTilesOutput(tiles=tiles) +@invocation( + "calculate_image_tiles_Even_Split", + title="Calculate Image Tiles Even Split", + tags=["tiles"], + category="tiles", + version="1.0.0", +) +class CalculateImageTilesEvenSplitInvocation(BaseInvocation): + """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" + + image_width: int = InputField(ge=1, default=1024, description="The image width, in pixels, to calculate tiles for.") + image_height: int = InputField( + ge=1, default=1024, description="The image height, in pixels, to calculate tiles for." + ) + num_tiles_x: int = InputField( + default=2, + ge=1, + description="Number of tiles to divide image into on the x axis", + ) + num_tiles_y: int = InputField( + default=2, + ge=1, + description="Number of tiles to divide image into on the y axis", + ) + overlap: float = InputField( + default=0.25, + ge=0, + lt=1, + description="Overlap amount of tile size (0-1)", + ) + + def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput: + tiles = calc_tiles_even_split( + image_height=self.image_height, + image_width=self.image_width, + num_tiles_x=self.num_tiles_x, + num_tiles_y=self.num_tiles_y, + overlap=self.overlap, + ) + return CalculateImageTilesOutput(tiles=tiles) + + +@invocation( + "calculate_image_tiles_min_overlap", + title="Calculate Image Tiles Minimum Overlap", + tags=["tiles"], + category="tiles", + version="1.0.0", +) +class CalculateImageTilesMinimumOverlapInvocation(BaseInvocation): + """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" + + image_width: int = InputField(ge=1, default=1024, description="The image width, in pixels, to calculate tiles for.") + image_height: int = InputField( + ge=1, default=1024, description="The image height, in pixels, to calculate tiles for." + ) + tile_width: int = InputField(ge=1, default=576, description="The tile width, in pixels.") + tile_height: int = InputField(ge=1, default=576, description="The tile height, in pixels.") + min_overlap: int = InputField( + default=128, + ge=0, + description="minimum tile overlap size (must be a multiple of 8)", + ) + round_to_8: bool = InputField( + default=False, + description="Round outputs down to the nearest 8 (for pulling from a large noise field)", + ) + + def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput: + tiles = calc_tiles_min_overlap( + image_height=self.image_height, + image_width=self.image_width, + tile_height=self.tile_height, + tile_width=self.tile_width, + min_overlap=self.min_overlap, + round_to_8=self.round_to_8, + ) + return CalculateImageTilesOutput(tiles=tiles) + + @invocation_output("tile_to_properties_output") class TileToPropertiesOutput(BaseInvocationOutput): coords_left: int = OutputField(description="Left coordinate of the tile relative to its parent image.") @@ -122,13 +211,22 @@ class PairTileImageInvocation(BaseInvocation): ) -@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.0.0") +BLEND_MODES = Literal["Linear", "Seam"] + + +@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.1.0") class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): """Merge multiple tile images into a single image.""" # Inputs tiles_with_images: list[TileWithImage] = InputField(description="A list of tile images with tile properties.") + blend_mode: BLEND_MODES = InputField( + default="Seam", + description="blending type Linear or Seam", + input=Input.Direct, + ) blend_amount: int = InputField( + default=32, ge=0, description="The amount to blend adjacent tiles in pixels. Must be <= the amount of overlap between adjacent tiles.", ) @@ -158,10 +256,16 @@ class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): channels = tile_np_images[0].shape[-1] dtype = tile_np_images[0].dtype np_image = np.zeros(shape=(height, width, channels), dtype=dtype) + if self.blend_mode == "Linear": + merge_tiles_with_linear_blending( + dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount + ) + else: + merge_tiles_with_seam_blending( + dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount + ) - merge_tiles_with_linear_blending( - dst_image=np_image, tiles=tiles, tile_images=tile_np_images, blend_amount=self.blend_amount - ) + # Convert into a PIL image and save pil_image = Image.fromarray(np_image) image_dto = context.services.images.create( diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 3a678d825e..33c5f5c445 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -3,7 +3,40 @@ from typing import Union import numpy as np -from invokeai.backend.tiles.utils import TBLR, Tile, paste +from invokeai.backend.tiles.utils import TBLR, Tile, paste, seam_blend + + +def calc_overlap(tiles: list[Tile], num_tiles_x, num_tiles_y) -> list[Tile]: + """Calculate and update the overlap of a list of tiles. + + Args: + tiles (list[Tile]): The list of tiles describing the locations of the respective `tile_images`. + num_tiles_x: the number of tiles on the x axis. + num_tiles_y: the number of tiles on the y axis. + """ + def get_tile_or_none(idx_y: int, idx_x: int) -> Union[Tile, None]: + if idx_y < 0 or idx_y > num_tiles_y or idx_x < 0 or idx_x > num_tiles_x: + return None + return tiles[idx_y * num_tiles_x + idx_x] + + for tile_idx_y in range(num_tiles_y): + for tile_idx_x in range(num_tiles_x): + cur_tile = get_tile_or_none(tile_idx_y, tile_idx_x) + top_neighbor_tile = get_tile_or_none(tile_idx_y - 1, tile_idx_x) + left_neighbor_tile = get_tile_or_none(tile_idx_y, tile_idx_x - 1) + + assert cur_tile is not None + + # Update cur_tile top-overlap and corresponding top-neighbor bottom-overlap. + if top_neighbor_tile is not None: + cur_tile.overlap.top = max(0, top_neighbor_tile.coords.bottom - cur_tile.coords.top) + top_neighbor_tile.overlap.bottom = cur_tile.overlap.top + + # Update cur_tile left-overlap and corresponding left-neighbor right-overlap. + if left_neighbor_tile is not None: + cur_tile.overlap.left = max(0, left_neighbor_tile.coords.right - cur_tile.coords.left) + left_neighbor_tile.overlap.right = cur_tile.overlap.left + return tiles def calc_tiles_with_overlap( @@ -63,31 +96,117 @@ def calc_tiles_with_overlap( tiles.append(tile) - def get_tile_or_none(idx_y: int, idx_x: int) -> Union[Tile, None]: - if idx_y < 0 or idx_y > num_tiles_y or idx_x < 0 or idx_x > num_tiles_x: - return None - return tiles[idx_y * num_tiles_x + idx_x] + return calc_overlap(tiles, num_tiles_x, num_tiles_y) - # Iterate over tiles again and calculate overlaps. + +def calc_tiles_even_split( + image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap: float = 0 +) -> list[Tile]: + """Calculate the tile coordinates for a given image shape with the number of tiles requested. + + Args: + image_height (int): The image height in px. + image_width (int): The image width in px. + num_x_tiles (int): The number of tile to split the image into on the X-axis. + num_y_tiles (int): The number of tile to split the image into on the Y-axis. + overlap (int, optional): The target overlap amount of the tiles size. Defaults to 0. + + Returns: + list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. + """ + + # Ensure tile size is divisible by 8 + if image_width % 8 != 0 or image_height % 8 != 0: + raise ValueError(f"image size (({image_width}, {image_height})) must be divisible by 8") + + # Calculate the overlap size based on the percentage and adjust it to be divisible by 8 (rounding up) + overlap_x = 8 * math.ceil(int((image_width / num_tiles_x) * overlap) / 8) + overlap_y = 8 * math.ceil(int((image_height / num_tiles_y) * overlap) / 8) + + # Calculate the tile size based on the number of tiles and overlap, and ensure it's divisible by 8 (rounding down) + tile_size_x = 8 * math.floor(((image_width + overlap_x * (num_tiles_x - 1)) // num_tiles_x) / 8) + tile_size_y = 8 * math.floor(((image_height + overlap_y * (num_tiles_y - 1)) // num_tiles_y) / 8) + + # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. + tiles: list[Tile] = [] + + # Calculate tile coordinates. (Ignore overlap values for now.) for tile_idx_y in range(num_tiles_y): + # Calculate the top and bottom of the row + top = tile_idx_y * (tile_size_y - overlap_y) + bottom = min(top + tile_size_y, image_height) + # For the last row adjust bottom to be the height of the image + if tile_idx_y == num_tiles_y - 1: + bottom = image_height + for tile_idx_x in range(num_tiles_x): - cur_tile = get_tile_or_none(tile_idx_y, tile_idx_x) - top_neighbor_tile = get_tile_or_none(tile_idx_y - 1, tile_idx_x) - left_neighbor_tile = get_tile_or_none(tile_idx_y, tile_idx_x - 1) + # Calculate the left & right coordinate of each tile + left = tile_idx_x * (tile_size_x - overlap_x) + right = min(left + tile_size_x, image_width) + # For the last tile in the row adjust right to be the width of the image + if tile_idx_x == num_tiles_x - 1: + right = image_width - assert cur_tile is not None + tile = Tile( + coords=TBLR(top=top, bottom=bottom, left=left, right=right), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) - # Update cur_tile top-overlap and corresponding top-neighbor bottom-overlap. - if top_neighbor_tile is not None: - cur_tile.overlap.top = max(0, top_neighbor_tile.coords.bottom - cur_tile.coords.top) - top_neighbor_tile.overlap.bottom = cur_tile.overlap.top + tiles.append(tile) - # Update cur_tile left-overlap and corresponding left-neighbor right-overlap. - if left_neighbor_tile is not None: - cur_tile.overlap.left = max(0, left_neighbor_tile.coords.right - cur_tile.coords.left) - left_neighbor_tile.overlap.right = cur_tile.overlap.left + return calc_overlap(tiles, num_tiles_x, num_tiles_y) - return tiles + +def calc_tiles_min_overlap( + image_height: int, image_width: int, tile_height: int, tile_width: int, min_overlap: int, round_to_8: bool +) -> list[Tile]: + """Calculate the tile coordinates for a given image shape under a simple tiling scheme with overlaps. + + Args: + image_height (int): The image height in px. + image_width (int): The image width in px. + tile_height (int): The tile height in px. All tiles will have this height. + tile_width (int): The tile width in px. All tiles will have this width. + min_overlap (int): The target minimum overlap between adjacent tiles. If the tiles do not evenly cover the image + shape, then the overlap will be spread between the tiles. + + Returns: + list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. + """ + assert image_height >= tile_height + assert image_width >= tile_width + assert min_overlap < tile_height + assert min_overlap < tile_width + + num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 + num_tiles_y = ( + math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1 + ) + + # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. + tiles: list[Tile] = [] + + # Calculate tile coordinates. (Ignore overlap values for now.) + for tile_idx_y in range(num_tiles_y): + top = (tile_idx_y * (image_height - tile_height)) // (num_tiles_y - 1) if num_tiles_y > 1 else 0 + if round_to_8: + top = 8 * (top // 8) + bottom = top + tile_height + + for tile_idx_x in range(num_tiles_x): + left = (tile_idx_x * (image_width - tile_width)) // (num_tiles_x - 1) if num_tiles_x > 1 else 0 + if round_to_8: + left = 8 * (left // 8) + right = left + tile_width + + tile = Tile( + coords=TBLR(top=top, bottom=bottom, left=left, right=right), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) + + tiles.append(tile) + + return calc_overlap(tiles, num_tiles_x, num_tiles_y) def merge_tiles_with_linear_blending( @@ -199,3 +318,91 @@ def merge_tiles_with_linear_blending( ), mask=mask, ) + + +def merge_tiles_with_seam_blending( + dst_image: np.ndarray, tiles: list[Tile], tile_images: list[np.ndarray], blend_amount: int +): + """Merge a set of image tiles into `dst_image` with seam blending between the tiles. + + We expect every tile edge to either: + 1) have an overlap of 0, because it is aligned with the image edge, or + 2) have an overlap >= blend_amount. + If neither of these conditions are satisfied, we raise an exception. + + The seam blending is centered on a seam of least energy of the overlap between adjacent tiles. + + Args: + dst_image (np.ndarray): The destination image. Shape: (H, W, C). + tiles (list[Tile]): The list of tiles describing the locations of the respective `tile_images`. + tile_images (list[np.ndarray]): The tile images to merge into `dst_image`. + blend_amount (int): The amount of blending (in px) between adjacent overlapping tiles. + """ + # Sort tiles and images first by left x coordinate, then by top y coordinate. During tile processing, we want to + # iterate over tiles left-to-right, top-to-bottom. + tiles_and_images = list(zip(tiles, tile_images, strict=True)) + tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.left) + tiles_and_images = sorted(tiles_and_images, key=lambda x: x[0].coords.top) + + # Organize tiles into rows. + tile_and_image_rows: list[list[tuple[Tile, np.ndarray]]] = [] + cur_tile_and_image_row: list[tuple[Tile, np.ndarray]] = [] + first_tile_in_cur_row, _ = tiles_and_images[0] + for tile_and_image in tiles_and_images: + tile, _ = tile_and_image + if not ( + tile.coords.top == first_tile_in_cur_row.coords.top + and tile.coords.bottom == first_tile_in_cur_row.coords.bottom + ): + # Store the previous row, and start a new one. + tile_and_image_rows.append(cur_tile_and_image_row) + cur_tile_and_image_row = [] + first_tile_in_cur_row, _ = tile_and_image + + cur_tile_and_image_row.append(tile_and_image) + tile_and_image_rows.append(cur_tile_and_image_row) + + for tile_and_image_row in tile_and_image_rows: + first_tile_in_row, _ = tile_and_image_row[0] + row_height = first_tile_in_row.coords.bottom - first_tile_in_row.coords.top + row_image = np.zeros((row_height, dst_image.shape[1], dst_image.shape[2]), dtype=dst_image.dtype) + + # Blend the tiles in the row horizontally. + for tile, tile_image in tile_and_image_row: + # We expect the tiles to be ordered left-to-right. + # For each tile: + # - extract the overlap regions and pass to seam_blend() + # - apply blended region to the row_image + # - apply the un-blended region to the row_image + tile_height, tile_width, _ = tile_image.shape + overlap_size = tile.overlap.left + # Left blending: + if overlap_size > 0: + assert overlap_size >= blend_amount + + overlap_coord_right = tile.coords.left + overlap_size + src_overlap = row_image[:, tile.coords.left : overlap_coord_right] + dst_overlap = tile_image[:, :overlap_size] + blended_overlap = seam_blend(src_overlap, dst_overlap, blend_amount, x_seam=False) + row_image[:, tile.coords.left : overlap_coord_right] = blended_overlap + row_image[:, overlap_coord_right : tile.coords.right] = tile_image[:, overlap_size:] + else: + # no overlap just paste the tile + row_image[:, tile.coords.left : tile.coords.right] = tile_image + + # Blend the row into the dst_image + # We assume that the entire row has the same vertical overlaps as the first_tile_in_row. + # Rows are processed in the same way as tiles (extract overlap, blend, apply) + row_overlap_size = first_tile_in_row.overlap.top + if row_overlap_size > 0: + assert row_overlap_size >= blend_amount + + overlap_coords_bottom = first_tile_in_row.coords.top + row_overlap_size + src_overlap = dst_image[first_tile_in_row.coords.top : overlap_coords_bottom, :] + dst_overlap = row_image[:row_overlap_size, :] + blended_overlap = seam_blend(src_overlap, dst_overlap, blend_amount, x_seam=True) + dst_image[first_tile_in_row.coords.top : overlap_coords_bottom, :] = blended_overlap + dst_image[overlap_coords_bottom : first_tile_in_row.coords.bottom, :] = row_image[row_overlap_size:, :] + else: + # no overlap just paste the row + dst_image[first_tile_in_row.coords.top:first_tile_in_row.coords.bottom, :] = row_image diff --git a/invokeai/backend/tiles/utils.py b/invokeai/backend/tiles/utils.py index 4ad40ffa35..9df63a601e 100644 --- a/invokeai/backend/tiles/utils.py +++ b/invokeai/backend/tiles/utils.py @@ -1,5 +1,7 @@ +import math from typing import Optional +import cv2 import numpy as np from pydantic import BaseModel, Field @@ -45,3 +47,101 @@ def paste(dst_image: np.ndarray, src_image: np.ndarray, box: TBLR, mask: Optiona mask = np.expand_dims(mask, -1) dst_image_box = dst_image[box.top : box.bottom, box.left : box.right] dst_image[box.top : box.bottom, box.left : box.right] = src_image * mask + dst_image_box * (1.0 - mask) + + +def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool,) -> np.ndarray: + """Blend two overlapping tile sections using a seams to find a path. + + It is assumed that input images will be RGB np arrays and are the same size. + + Args: + ia1 (torch.Tensor): Image array 1 Shape: (H, W, C). + ia2 (torch.Tensor): Image array 2 Shape: (H, W, C). + x_seam (bool): If the images should be blended on the x axis or not. + blend_amount (int): The size of the blur to use on the seam. Half of this value will be used to avoid the edges of the image. + """ + assert ia1.shape == ia2.shape + assert ia2.size == ia2.size + + def shift(arr, num, fill_value=255.0): + result = np.full_like(arr, fill_value) + if num > 0: + result[num:] = arr[:-num] + elif num < 0: + result[:num] = arr[-num:] + else: + result[:] = arr + return result + + # Assume RGB and convert to grey + iag1 = np.dot(ia1, [0.2989, 0.5870, 0.1140]) + iag2 = np.dot(ia2, [0.2989, 0.5870, 0.1140]) + + # Calc Difference between the images + ia = iag2 - iag1 + + # If the seam is on the X-axis rotate the array so we can treat it like a vertical seam + if x_seam: + ia = np.rot90(ia, 1) + + # Calc max and min X & Y limits + # gutter is used to avoid the blur hitting the edge of the image + gutter = math.ceil(blend_amount / 2) if blend_amount > 0 else 0 + max_y, max_x = ia.shape + max_x -= gutter + min_x = gutter + + # Calc the energy in the difference + energy = np.abs(np.gradient(ia, axis=0)) + np.abs(np.gradient(ia, axis=1)) + + #Find the starting position of the seam + res = np.copy(energy) + for y in range(1, max_y): + row = res[y, :] + rowl = shift(row, -1) + rowr = shift(row, 1) + res[y, :] = res[y - 1, :] + np.min([row, rowl, rowr], axis=0) + + # create an array max_y long + lowest_energy_line = np.empty([max_y], dtype="uint16") + lowest_energy_line[max_y - 1] = np.argmin(res[max_y - 1, min_x : max_x - 1]) + + #Calc the path of the seam + for ypos in range(max_y - 2, -1, -1): + lowest_pos = lowest_energy_line[ypos + 1] + lpos = lowest_pos - 1 + rpos = lowest_pos + 1 + lpos = np.clip(lpos, min_x, max_x - 1) + rpos = np.clip(rpos, min_x, max_x - 1) + lowest_energy_line[ypos] = np.argmin(energy[ypos, lpos : rpos + 1]) + lpos + + # Draw the mask + mask = np.zeros_like(ia) + for ypos in range(0, max_y): + to_fill = lowest_energy_line[ypos] + mask[ypos, :to_fill] = 1 + + # If the seam is on the X-axis rotate the array back + if x_seam: + mask = np.rot90(mask, 3) + + # blur the seam mask if required + if blend_amount > 0: + mask = cv2.blur(mask, (blend_amount, blend_amount)) + + # for visual debugging + #from PIL import Image + #m_image = Image.fromarray((mask * 255.0).astype("uint8")) + + # copy ia2 over ia1 while applying the seam mask + mask = np.expand_dims(mask, -1) + blended_image = ia1 * mask + ia2 * (1.0 - mask) + + # for visual debugging + #i1 = Image.fromarray(ia1.astype("uint8")) + #i2 = Image.fromarray(ia2.astype("uint8")) + #b_image = Image.fromarray(blended_image.astype("uint8")) + #print(f"{ia1.shape}, {ia2.shape}, {mask.shape}, {blended_image.shape}") + #print(f"{i1.size}, {i2.size}, {m_image.size}, {b_image.size}") + + return blended_image From cd15d8b7a9ada59cf46abf011081393be7e0b69b Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Wed, 6 Dec 2023 08:10:22 +0000 Subject: [PATCH 038/515] ruff formatting reformatted due to ruff errors --- invokeai/backend/tiles/tiles.py | 3 ++- invokeai/backend/tiles/utils.py | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 33c5f5c445..2ae62e241d 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -14,6 +14,7 @@ def calc_overlap(tiles: list[Tile], num_tiles_x, num_tiles_y) -> list[Tile]: num_tiles_x: the number of tiles on the x axis. num_tiles_y: the number of tiles on the y axis. """ + def get_tile_or_none(idx_y: int, idx_x: int) -> Union[Tile, None]: if idx_y < 0 or idx_y > num_tiles_y or idx_x < 0 or idx_x > num_tiles_x: return None @@ -405,4 +406,4 @@ def merge_tiles_with_seam_blending( dst_image[overlap_coords_bottom : first_tile_in_row.coords.bottom, :] = row_image[row_overlap_size:, :] else: # no overlap just paste the row - dst_image[first_tile_in_row.coords.top:first_tile_in_row.coords.bottom, :] = row_image + dst_image[first_tile_in_row.coords.top : first_tile_in_row.coords.bottom, :] = row_image diff --git a/invokeai/backend/tiles/utils.py b/invokeai/backend/tiles/utils.py index 9df63a601e..c906983587 100644 --- a/invokeai/backend/tiles/utils.py +++ b/invokeai/backend/tiles/utils.py @@ -49,7 +49,7 @@ def paste(dst_image: np.ndarray, src_image: np.ndarray, box: TBLR, mask: Optiona dst_image[box.top : box.bottom, box.left : box.right] = src_image * mask + dst_image_box * (1.0 - mask) -def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool,) -> np.ndarray: +def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool) -> np.ndarray: """Blend two overlapping tile sections using a seams to find a path. It is assumed that input images will be RGB np arrays and are the same size. @@ -94,7 +94,7 @@ def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool # Calc the energy in the difference energy = np.abs(np.gradient(ia, axis=0)) + np.abs(np.gradient(ia, axis=1)) - #Find the starting position of the seam + # Find the starting position of the seam res = np.copy(energy) for y in range(1, max_y): row = res[y, :] @@ -106,7 +106,7 @@ def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool lowest_energy_line = np.empty([max_y], dtype="uint16") lowest_energy_line[max_y - 1] = np.argmin(res[max_y - 1, min_x : max_x - 1]) - #Calc the path of the seam + # Calc the path of the seam for ypos in range(max_y - 2, -1, -1): lowest_pos = lowest_energy_line[ypos + 1] lpos = lowest_pos - 1 @@ -130,18 +130,18 @@ def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool mask = cv2.blur(mask, (blend_amount, blend_amount)) # for visual debugging - #from PIL import Image - #m_image = Image.fromarray((mask * 255.0).astype("uint8")) + # from PIL import Image + # m_image = Image.fromarray((mask * 255.0).astype("uint8")) # copy ia2 over ia1 while applying the seam mask mask = np.expand_dims(mask, -1) blended_image = ia1 * mask + ia2 * (1.0 - mask) # for visual debugging - #i1 = Image.fromarray(ia1.astype("uint8")) - #i2 = Image.fromarray(ia2.astype("uint8")) - #b_image = Image.fromarray(blended_image.astype("uint8")) - #print(f"{ia1.shape}, {ia2.shape}, {mask.shape}, {blended_image.shape}") - #print(f"{i1.size}, {i2.size}, {m_image.size}, {b_image.size}") + # i1 = Image.fromarray(ia1.astype("uint8")) + # i2 = Image.fromarray(ia2.astype("uint8")) + # b_image = Image.fromarray(blended_image.astype("uint8")) + # print(f"{ia1.shape}, {ia2.shape}, {mask.shape}, {blended_image.shape}") + # print(f"{i1.size}, {i2.size}, {m_image.size}, {b_image.size}") return blended_image From 6e1e67aa7213d3fdfbd5ac851a01bae113651e76 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Wed, 6 Dec 2023 22:23:08 -0500 Subject: [PATCH 039/515] remove source filtering from list_models() --- invokeai/app/api/routers/model_records.py | 9 ++------- .../app/services/model_install/model_install_base.py | 4 +--- .../app/services/model_install/model_install_default.py | 8 ++------ 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 8cfb80d758..997f76a185 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -271,19 +271,14 @@ async def import_model( "/import", operation_id="list_model_install_jobs", ) -async def list_model_install_jobs( - source: Optional[str] = Query( - description="Filter list by install source, partial string match.", - default=None, - ), -) -> List[ModelInstallJob]: +async def list_model_install_jobs() -> List[ModelInstallJob]: """ Return list of model install jobs. If the optional 'source' argument is provided, then the list will be filtered for partial string matches against the install source. """ - jobs: List[ModelInstallJob] = ApiDependencies.invoker.services.model_install.list_jobs(source) + jobs: List[ModelInstallJob] = ApiDependencies.invoker.services.model_install.list_jobs() return jobs diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 46b5641188..3a796bb5da 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -277,11 +277,9 @@ class ModelInstallServiceBase(ABC): """Return the ModelInstallJob(s) corresponding to the provided source.""" @abstractmethod - def list_jobs(self, source: Optional[ModelSource | str] = None) -> List[ModelInstallJob]: # noqa D102 + def list_jobs(self) -> List[ModelInstallJob]: # noqa D102 """ List active and complete install jobs. - - :param source: Filter by jobs whose sources are a partial match to the argument. """ @abstractmethod diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 9ae1ee50c3..fa32c3a491 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -199,12 +199,8 @@ class ModelInstallService(ModelInstallServiceBase): else: # here is where we'd download a URL or repo_id. Implementation pending download queue. raise UnknownModelException("File or directory not found") - def list_jobs(self, source: Optional[ModelSource | str] = None) -> List[ModelInstallJob]: # noqa D102 - jobs = self._install_jobs - if not source: - return jobs - else: - return [x for x in jobs if str(source) in str(x)] + def list_jobs(self) -> List[ModelInstallJob]: # noqa D102 + return self._install_jobs def get_job(self, source: ModelSource) -> List[ModelInstallJob]: # noqa D102 return [x for x in self._install_jobs if x.source == source] From b519b6e1e071df15c3ae82cb83544d1be0415b8e Mon Sep 17 00:00:00 2001 From: Mary Hipp Rogers Date: Thu, 7 Dec 2023 19:26:15 -0500 Subject: [PATCH 040/515] add middleware to handle 403 errors (#5245) * add middleware to handle 403 errors * remove log * add logic to warn the user if not all requested images could be deleted * lint * fix copy * feat(ui): simplify batchEnqueuedListener error toast logic * feat(ui): use translations for error messages * chore(ui): lint --------- Co-authored-by: Mary Hipp Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com> --- invokeai/frontend/web/public/locales/en.json | 5 ++- .../listeners/batchEnqueued.ts | 17 ++------- .../listeners/controlNetImageProcessed.ts | 11 ------ .../listeners/upscaleRequested.ts | 37 +++++++------------ invokeai/frontend/web/src/app/store/store.ts | 2 + .../src/services/api/authToastMiddleware.ts | 26 +++++++++++++ .../web/src/services/api/endpoints/images.ts | 12 ++++++ 7 files changed, 60 insertions(+), 50 deletions(-) create mode 100644 invokeai/frontend/web/src/services/api/authToastMiddleware.ts diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index 8663815adb..948f24093b 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -161,6 +161,7 @@ "txt2img": "Text To Image", "unifiedCanvas": "Unified Canvas", "unknown": "Unknown", + "unknownError": "Unknown Error", "upload": "Upload" }, "controlnet": { @@ -384,7 +385,9 @@ "deleteSelection": "Delete Selection", "downloadSelection": "Download Selection", "preparingDownload": "Preparing Download", - "preparingDownloadFailed": "Problem Preparing Download" + "preparingDownloadFailed": "Problem Preparing Download", + "problemDeletingImages": "Problem Deleting Images", + "problemDeletingImagesDesc": "One or more images could not be deleted" }, "hotkeys": { "acceptStagingImage": { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts index 62a661756b..99756cbadb 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts @@ -3,7 +3,7 @@ import { logger } from 'app/logging/logger'; import { parseify } from 'common/util/serialize'; import { zPydanticValidationError } from 'features/system/store/zodSchemas'; import { t } from 'i18next'; -import { get, truncate, upperFirst } from 'lodash-es'; +import { truncate, upperFirst } from 'lodash-es'; import { queueApi } from 'services/api/endpoints/queue'; import { TOAST_OPTIONS, theme } from 'theme/theme'; import { startAppListening } from '..'; @@ -74,22 +74,11 @@ export const addBatchEnqueuedListener = () => { ), }); }); - } else { - let detail = 'Unknown Error'; - let duration = undefined; - if (response.status === 403 && 'body' in response) { - detail = get(response, 'body.detail', 'Unknown Error'); - } else if (response.status === 403 && 'error' in response) { - detail = get(response, 'error.detail', 'Unknown Error'); - } else if (response.status === 403 && 'data' in response) { - detail = get(response, 'data.detail', 'Unknown Error'); - duration = 15000; - } + } else if (response.status !== 403) { toast({ title: t('queue.batchFailedToQueue'), + description: t('common.unknownError'), status: 'error', - description: detail, - ...(duration ? { duration } : {}), }); } logger('queue').error( diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts index 0966a8c86b..3d35caebf6 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts @@ -109,20 +109,9 @@ export const addControlNetImageProcessedListener = () => { t('queue.graphFailedToQueue') ); - // handle usage-related errors if (error instanceof Object) { if ('data' in error && 'status' in error) { if (error.status === 403) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const detail = (error.data as any)?.detail || 'Unknown Error'; - dispatch( - addToast({ - title: t('queue.graphFailedToQueue'), - status: 'error', - description: detail, - duration: 15000, - }) - ); dispatch(pendingControlImagesCleared()); dispatch(controlAdapterImageChanged({ id, controlImage: null })); return; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts index 7dbb7d9fb1..1b4211087a 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts @@ -75,31 +75,20 @@ export const addUpscaleRequestedListener = () => { t('queue.graphFailedToQueue') ); - // handle usage-related errors - if (error instanceof Object) { - if ('data' in error && 'status' in error) { - if (error.status === 403) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const detail = (error.data as any)?.detail || 'Unknown Error'; - dispatch( - addToast({ - title: t('queue.graphFailedToQueue'), - status: 'error', - description: detail, - duration: 15000, - }) - ); - return; - } - } + if ( + error instanceof Object && + 'status' in error && + error.status === 403 + ) { + return; + } else { + dispatch( + addToast({ + title: t('queue.graphFailedToQueue'), + status: 'error', + }) + ); } - - dispatch( - addToast({ - title: t('queue.graphFailedToQueue'), - status: 'error', - }) - ); } }, }); diff --git a/invokeai/frontend/web/src/app/store/store.ts b/invokeai/frontend/web/src/app/store/store.ts index 0e3634468b..0ea3829c66 100644 --- a/invokeai/frontend/web/src/app/store/store.ts +++ b/invokeai/frontend/web/src/app/store/store.ts @@ -33,6 +33,7 @@ import { actionsDenylist } from './middleware/devtools/actionsDenylist'; import { stateSanitizer } from './middleware/devtools/stateSanitizer'; import { listenerMiddleware } from './middleware/listenerMiddleware'; import { createStore as createIDBKeyValStore, get, set } from 'idb-keyval'; +import { authToastMiddleware } from 'services/api/authToastMiddleware'; const allReducers = { canvas: canvasReducer, @@ -107,6 +108,7 @@ export const createStore = (uniqueStoreKey?: string) => }) .concat(api.middleware) .concat(dynamicMiddlewares) + .concat(authToastMiddleware) .prepend(listenerMiddleware.middleware), devTools: { actionSanitizer, diff --git a/invokeai/frontend/web/src/services/api/authToastMiddleware.ts b/invokeai/frontend/web/src/services/api/authToastMiddleware.ts new file mode 100644 index 0000000000..0a8e257cc5 --- /dev/null +++ b/invokeai/frontend/web/src/services/api/authToastMiddleware.ts @@ -0,0 +1,26 @@ +import { isRejectedWithValue } from '@reduxjs/toolkit'; +import type { MiddlewareAPI, Middleware } from '@reduxjs/toolkit'; +import { addToast } from 'features/system/store/systemSlice'; +import { t } from 'i18next'; + +export const authToastMiddleware: Middleware = + (api: MiddlewareAPI) => (next) => (action) => { + if (isRejectedWithValue(action)) { + if (action.payload.status === 403) { + const { dispatch } = api; + const customMessage = + action.payload.data.detail !== 'Forbidden' + ? action.payload.data.detail + : undefined; + dispatch( + addToast({ + title: t('common.somethingWentWrong'), + status: 'error', + description: customMessage, + }) + ); + } + } + + return next(action); + }; diff --git a/invokeai/frontend/web/src/services/api/endpoints/images.ts b/invokeai/frontend/web/src/services/api/endpoints/images.ts index 75b1bb771d..e261402837 100644 --- a/invokeai/frontend/web/src/services/api/endpoints/images.ts +++ b/invokeai/frontend/web/src/services/api/endpoints/images.ts @@ -27,6 +27,8 @@ import { imagesSelectors, } from 'services/api/util'; import { boardsApi } from './boards'; +import { addToast } from 'features/system/store/systemSlice'; +import { t } from 'i18next'; export const imagesApi = api.injectEndpoints({ endpoints: (build) => ({ @@ -208,6 +210,16 @@ export const imagesApi = api.injectEndpoints({ try { const { data } = await queryFulfilled; + if (data.deleted_images.length < imageDTOs.length) { + dispatch( + addToast({ + title: t('gallery.problemDeletingImages'), + description: t('gallery.problemDeletingImagesDesc'), + status: 'warning', + }) + ); + } + // convert to an object so we can access the successfully delete image DTOs by name const groupedImageDTOs = keyBy(imageDTOs, 'image_name'); From 8648c2c42ea922117c721d2244f9fef7af041050 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Fri, 8 Dec 2023 17:35:49 +1100 Subject: [PATCH 041/515] Update communityNodes.md with VeyDlin's nodes --- docs/nodes/communityNodes.md | 112 +++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/docs/nodes/communityNodes.md b/docs/nodes/communityNodes.md index f3b8af0425..46615e5ebd 100644 --- a/docs/nodes/communityNodes.md +++ b/docs/nodes/communityNodes.md @@ -14,6 +14,10 @@ To use a community workflow, download the the `.json` node graph file and load i - Community Nodes + [Average Images](#average-images) + + [Clean Image Artifacts After Cut](#clean-image-artifacts-after-cut) + + [Close Color Mask](#close-color-mask) + + [Clothing Mask](#clothing-mask) + + [Contrast Limited Adaptive Histogram Equalization](#contrast-limited-adaptive-histogram-equalization) + [Depth Map from Wavefront OBJ](#depth-map-from-wavefront-obj) + [Film Grain](#film-grain) + [Generative Grammar-Based Prompt Nodes](#generative-grammar-based-prompt-nodes) @@ -22,16 +26,22 @@ To use a community workflow, download the the `.json` node graph file and load i + [Halftone](#halftone) + [Ideal Size](#ideal-size) + [Image and Mask Composition Pack](#image-and-mask-composition-pack) + + [Image Dominant Color](#image-dominant-color) + [Image to Character Art Image Nodes](#image-to-character-art-image-nodes) + [Image Picker](#image-picker) + + [Image Resize Plus](#image-resize-plus) + [Load Video Frame](#load-video-frame) + [Make 3D](#make-3d) + + [Mask Operations](#mask-operations) + [Match Histogram](#match-histogram) + + [Negative Image](#negative-image) + [Oobabooga](#oobabooga) + [Prompt Tools](#prompt-tools) + [Remote Image](#remote-image) + + [Remove Background](#remove-background) + [Retroize](#retroize) + [Size Stepper Nodes](#size-stepper-nodes) + + [Simple Skin Detection](#simple-skin-detection) + [Text font to Image](#text-font-to-image) + [Thresholding](#thresholding) + [Unsharp Mask](#unsharp-mask) @@ -48,6 +58,46 @@ To use a community workflow, download the the `.json` node graph file and load i **Node Link:** https://github.com/JPPhoto/average-images-node +-------------------------------- +### Clean Image Artifacts After Cut + +Description: Removes residual artifacts after an image is separated from its background. + +Node Link: https://github.com/VeyDlin/clean-artifact-after-cut-node + +View: +
+ +-------------------------------- +### Close Color Mask + +Description: Generates a mask for images based on a closely matching color, useful for color-based selections. + +Node Link: https://github.com/VeyDlin/close-color-mask-node + +View: +
+ +-------------------------------- +### Clothing Mask + +Description: Employs a U2NET neural network trained for the segmentation of clothing items in images. + +Node Link: https://github.com/VeyDlin/clothing-mask-node + +View: +
+ +-------------------------------- +### Contrast Limited Adaptive Histogram Equalization + +Description: Enhances local image contrast using adaptive histogram equalization with contrast limiting. + +Node Link: https://github.com/VeyDlin/clahe-node + +View: +
+ -------------------------------- ### Depth Map from Wavefront OBJ @@ -164,6 +214,16 @@ This includes 15 Nodes:
+-------------------------------- +### Image Dominant Color + +Description: Identifies and extracts the dominant color from an image using k-means clustering. + +Node Link: https://github.com/VeyDlin/image-dominant-color-node + +View: +
+ -------------------------------- ### Image to Character Art Image Nodes @@ -185,6 +245,17 @@ This includes 15 Nodes: **Node Link:** https://github.com/JPPhoto/image-picker-node +-------------------------------- +### Image Resize Plus + +Description: Provides various image resizing options such as fill, stretch, fit, center, and crop. + +Node Link: https://github.com/VeyDlin/image-resize-plus-node + +View: +
+ + -------------------------------- ### Load Video Frame @@ -209,6 +280,16 @@ This includes 15 Nodes: +-------------------------------- +### Mask Operations + +Description: Offers logical operations (OR, SUB, AND) for combining and manipulating image masks. + +Node Link: https://github.com/VeyDlin/mask-operations-node + +View: +
+ -------------------------------- ### Match Histogram @@ -226,6 +307,16 @@ See full docs here: https://github.com/skunkworxdark/Prompt-tools-nodes/edit/mai +-------------------------------- +### Negative Image + +Description: Creates a negative version of an image, effective for visual effects and mask inversion. + +Node Link: https://github.com/VeyDlin/negative-image-node + +View: +
+ -------------------------------- ### Oobabooga @@ -289,6 +380,15 @@ See full docs here: https://github.com/skunkworxdark/Prompt-tools-nodes/edit/mai **Node Link:** https://github.com/fieldOfView/InvokeAI-remote_image +-------------------------------- +### Remove Background + +Description: An integration of the rembg package to remove backgrounds from images using multiple U2NET models. + +Node Link: https://github.com/VeyDlin/remove-background-node + +View: +
-------------------------------- ### Retroize @@ -301,6 +401,17 @@ See full docs here: https://github.com/skunkworxdark/Prompt-tools-nodes/edit/mai +-------------------------------- +### Simple Skin Detection + +Description: Detects skin in images based on predefined color thresholds. + +Node Link: https://github.com/VeyDlin/simple-skin-detection-node + +View: +
+ + -------------------------------- ### Size Stepper Nodes @@ -386,6 +497,7 @@ See full docs here: https://github.com/skunkworxdark/XYGrid_nodes/edit/main/READ + -------------------------------- ### Example Node Template From 9ba57527704c7417e756170adf231981228252e3 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Thu, 7 Dec 2023 11:58:32 -0500 Subject: [PATCH 042/515] fix link to xpuct/deliberate --- invokeai/configs/INITIAL_MODELS.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/invokeai/configs/INITIAL_MODELS.yaml b/invokeai/configs/INITIAL_MODELS.yaml index 67fcad4055..c230665e3a 100644 --- a/invokeai/configs/INITIAL_MODELS.yaml +++ b/invokeai/configs/INITIAL_MODELS.yaml @@ -32,9 +32,9 @@ sd-1/main/Analog-Diffusion: description: An SD-1.5 model trained on diverse analog photographs (2.13 GB) repo_id: wavymulder/Analog-Diffusion recommended: False -sd-1/main/Deliberate: +sd-1/main/Deliberate_v5: description: Versatile model that produces detailed images up to 768px (4.27 GB) - repo_id: XpucT/Deliberate + path: https://huggingface.co/XpucT/Deliberate/resolve/main/Deliberate_v5.safetensors recommended: False sd-1/main/Dungeons-and-Diffusion: description: Dungeons & Dragons characters (2.13 GB) From fed2bdafeb6599078cecf200390e2c7cc45654ef Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Fri, 8 Dec 2023 18:16:13 +0000 Subject: [PATCH 043/515] Added Defaults to calc_tiles_min_overlap for overlap and round Added tests for min_overlap and even_split tile gen --- invokeai/backend/tiles/tiles.py | 2 +- tests/backend/tiles/test_tiles.py | 238 +++++++++++++++++++++++++++++- 2 files changed, 238 insertions(+), 2 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 2ae62e241d..9715fc4950 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -159,7 +159,7 @@ def calc_tiles_even_split( def calc_tiles_min_overlap( - image_height: int, image_width: int, tile_height: int, tile_width: int, min_overlap: int, round_to_8: bool + image_height: int, image_width: int, tile_height: int, tile_width: int, min_overlap: int = 0, round_to_8: bool = False ) -> list[Tile]: """Calculate the tile coordinates for a given image shape under a simple tiling scheme with overlaps. diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 353e65d336..a930f2f829 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -1,7 +1,12 @@ import numpy as np import pytest -from invokeai.backend.tiles.tiles import calc_tiles_with_overlap, merge_tiles_with_linear_blending +from invokeai.backend.tiles.tiles import ( + calc_tiles_even_split, + calc_tiles_min_overlap, + calc_tiles_with_overlap, + merge_tiles_with_linear_blending, +) from invokeai.backend.tiles.utils import TBLR, Tile #################################### @@ -85,6 +90,237 @@ def test_calc_tiles_with_overlap_input_validation( calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) +#################################### +# Test calc_tiles_min_overlap(...) +#################################### + + +def test_calc_tiles_min_overlap_single_tile(): + """Test calc_tiles_min_overlap() behavior when a single tile covers the image.""" + tiles = calc_tiles_min_overlap( + image_height=512, image_width=1024, tile_height=512, tile_width=1024, min_overlap=64, round_to_8=False + ) + + expected_tiles = [ + Tile(coords=TBLR(top=0, bottom=512, left=0, right=1024), overlap=TBLR(top=0, bottom=0, left=0, right=0)) + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_min_overlap_evenly_divisible(): + """Test calc_tiles_min_overlap() behavior when the image is evenly covered by multiple tiles.""" + # Parameters mimic roughly the same output as the original tile generations of the same test name + tiles = calc_tiles_min_overlap( + image_height=576, image_width=1600, tile_height=320, tile_width=576, min_overlap=64, round_to_8=False + ) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=320, left=0, right=576), overlap=TBLR(top=0, bottom=64, left=0, right=64)), + Tile(coords=TBLR(top=0, bottom=320, left=512, right=1088), overlap=TBLR(top=0, bottom=64, left=64, right=64)), + Tile(coords=TBLR(top=0, bottom=320, left=1024, right=1600), overlap=TBLR(top=0, bottom=64, left=64, right=0)), + # Row 1 + Tile(coords=TBLR(top=256, bottom=576, left=0, right=576), overlap=TBLR(top=64, bottom=0, left=0, right=64)), + Tile(coords=TBLR(top=256, bottom=576, left=512, right=1088), overlap=TBLR(top=64, bottom=0, left=64, right=64)), + Tile(coords=TBLR(top=256, bottom=576, left=1024, right=1600), overlap=TBLR(top=64, bottom=0, left=64, right=0)), + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_min_overlap_not_evenly_divisible(): + """Test calc_tiles_min_overlap() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" + # Parameters mimic roughly the same output as the original tile generations of the same test name + tiles = calc_tiles_min_overlap( + image_height=400, image_width=1200, tile_height=256, tile_width=512, min_overlap=64, round_to_8=False + ) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=256, left=0, right=512), overlap=TBLR(top=0, bottom=112, left=0, right=168)), + Tile(coords=TBLR(top=0, bottom=256, left=344, right=856), overlap=TBLR(top=0, bottom=112, left=168, right=168)), + Tile(coords=TBLR(top=0, bottom=256, left=688, right=1200), overlap=TBLR(top=0, bottom=112, left=168, right=0)), + # Row 1 + Tile(coords=TBLR(top=144, bottom=400, left=0, right=512), overlap=TBLR(top=112, bottom=0, left=0, right=168)), + Tile( + coords=TBLR(top=144, bottom=400, left=448, right=960), overlap=TBLR(top=112, bottom=0, left=168, right=168) + ), + Tile( + coords=TBLR(top=144, bottom=400, left=688, right=1200), overlap=TBLR(top=112, bottom=0, left=168, right=0) + ), + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_min_overlap_difficult_size(): + """Test calc_tiles_min_overlap() behavior when the image is a difficult size to spilt evenly and keep div8.""" + # Parameters are a difficult size for other tile gen routines to calculate + tiles = calc_tiles_min_overlap( + image_height=1000, image_width=1000, tile_height=256, tile_width=512, min_overlap=64, round_to_8=False + ) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=268, left=0, right=268)), + Tile(coords=TBLR(top=0, bottom=512, left=244, right=756), overlap=TBLR(top=0, bottom=268, left=268, right=268)), + Tile(coords=TBLR(top=0, bottom=512, left=488, right=1000), overlap=TBLR(top=0, bottom=268, left=268, right=0)), + # Row 1 + Tile(coords=TBLR(top=244, bottom=756, left=0, right=512), overlap=TBLR(top=268, bottom=268, left=0, right=0)), + Tile(coords=TBLR(top=244, bottom=756, left=244, right=756),overlap=TBLR(top=268, bottom=268, left=268, right=268)), + Tile(coords=TBLR(top=244, bottom=756, left=488, right=1000), overlap=TBLR(top=268, bottom=268, left=268, right=0)), + # Row 2 + Tile(coords=TBLR(top=488, bottom=1000, left=0, right=512), overlap=TBLR(top=268, bottom=0, left=0, right=268)), + Tile(coords=TBLR(top=488, bottom=1000, left=244, right=756),overlap=TBLR(top=268, bottom=0, left=268, right=268)), + Tile(coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=268, bottom=0, left=268, right=0)), + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_min_overlap_difficult_size_div8(): + """Test calc_tiles_min_overlap() behavior when the image is a difficult size to spilt evenly and keep div8.""" + # Parameters are a difficult size for other tile gen routines to calculate + tiles = calc_tiles_min_overlap( + image_height=1000, image_width=1000, tile_height=256, tile_width=512, min_overlap=64, round_to_8=True + ) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=512, left=0, right=560), overlap=TBLR(top=0, bottom=272, left=0, right=272)), + Tile(coords=TBLR(top=0, bottom=512, left=240, right=752), overlap=TBLR(top=0, bottom=272, left=272, right=264)), + Tile(coords=TBLR(top=0, bottom=512, left=488, right=1000), overlap=TBLR(top=0, bottom=272, left=264, right=0)), + # Row 1 + Tile(coords=TBLR(top=240, bottom=752, left=0, right=512), overlap=TBLR(top=272, bottom=264, left=0, right=272)), + Tile(coords=TBLR(top=240, bottom=752, left=240, right=752),overlap=TBLR(top=272, bottom=264, left=272, right=264)), + Tile(coords=TBLR(top=240, bottom=752, left=488, right=1000), overlap=TBLR(top=272, bottom=264, left=264, right=0)), + # Row 2 + Tile(coords=TBLR(top=488, bottom=1000, left=0, right=512), overlap=TBLR(top=264, bottom=0, left=0, right=272)), + Tile(coords=TBLR(top=488, bottom=1000, left=240, right=752),overlap=TBLR(top=264, bottom=0, left=272, right=264)), + Tile(coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=264, bottom=0, left=264, right=0)), + ] + + assert tiles == expected_tiles + + +@pytest.mark.parametrize( + ["image_height", "image_width", "tile_height", "tile_width", "overlap", "raises"], + [ + (128, 128, 128, 128, 127, False), # OK + (128, 128, 128, 128, 0, False), # OK + (128, 128, 64, 64, 0, False), # OK + (128, 128, 129, 128, 0, True), # tile_height exceeds image_height. + (128, 128, 128, 129, 0, True), # tile_width exceeds image_width. + (128, 128, 64, 128, 64, True), # overlap equals tile_height. + (128, 128, 128, 64, 64, True), # overlap equals tile_width. + ], +) +def test_calc_tiles_min_overlap_input_validation( + image_height: int, image_width: int, tile_height: int, tile_width: int, min_overlap: int, round_to_8: bool , raises: bool +): + """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" + if raises: + with pytest.raises(AssertionError): + calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap, round_to_8) + else: + calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap, round_to_8) + +#################################### +# Test calc_tiles_even_split(...) +#################################### + + +def test_calc_tiles_even_split_single_tile(): + """Test calc_tiles_even_split() behavior when a single tile covers the image.""" + tiles = calc_tiles_even_split(image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap=0.25) + + expected_tiles = [ + Tile(coords=TBLR(top=0, bottom=512, left=0, right=1024), overlap=TBLR(top=0, bottom=0, left=0, right=0)) + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_even_split_evenly_divisible(): + """Test calc_tiles_even_split() behavior when the image is evenly covered by multiple tiles.""" + # Parameters mimic roughly the same output as the original tile generations of the same test name + tiles = calc_tiles_even_split(image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap=0.25) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=320, left=0, right=624), overlap=TBLR(top=0, bottom=72, left=0, right=136)), + Tile(coords=TBLR(top=0, bottom=320, left=488, right=1112), overlap=TBLR(top=0, bottom=72, left=136, right=136)), + Tile(coords=TBLR(top=0, bottom=320, left=976, right=1600), overlap=TBLR(top=0, bottom=72, left=136, right=0)), + # Row 1 + Tile(coords=TBLR(top=248, bottom=576, left=0, right=624), overlap=TBLR(top=72, bottom=0, left=0, right=136)), + Tile( + coords=TBLR(top=248, bottom=576, left=488, right=1112), overlap=TBLR(top=72, bottom=0, left=136, right=136) + ), + Tile(coords=TBLR(top=248, bottom=576, left=976, right=1600), overlap=TBLR(top=72, bottom=0, left=136, right=0)), + ] + assert tiles == expected_tiles + + +def test_calc_tiles_even_split_not_evenly_divisible(): + """Test calc_tiles_even_split() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" + # Parameters mimic roughly the same output as the original tile generations of the same test name + tiles = calc_tiles_even_split(image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap=0.25) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=224, left=0, right=464), overlap=TBLR(top=0, bottom=56, left=0, right=104)), + Tile(coords=TBLR(top=0, bottom=224, left=360, right=824), overlap=TBLR(top=0, bottom=56, left=104, right=104)), + Tile(coords=TBLR(top=0, bottom=224, left=720, right=1200), overlap=TBLR(top=0, bottom=56, left=104, right=0)), + # Row 1 + Tile(coords=TBLR(top=168, bottom=400, left=0, right=464), overlap=TBLR(top=56, bottom=0, left=0, right=104)), + Tile( + coords=TBLR(top=168, bottom=400, left=360, right=824), overlap=TBLR(top=56, bottom=0, left=104, right=104) + ), + Tile(coords=TBLR(top=168, bottom=400, left=720, right=1200), overlap=TBLR(top=56, bottom=0, left=104, right=0)), + ] + + assert tiles == expected_tiles + + +def test_calc_tiles_even_split_difficult_size(): + """Test calc_tiles_even_split() behavior when the image is a difficult size to spilt evenly and keep div8.""" + # Parameters are a difficult size for other tile gen routines to calculate + tiles = calc_tiles_even_split(image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap=0.25) + + expected_tiles = [ + # Row 0 + Tile(coords=TBLR(top=0, bottom=560, left=0, right=560), overlap=TBLR(top=0, bottom=128, left=0, right=128)), + Tile(coords=TBLR(top=0, bottom=560, left=432, right=1000), overlap=TBLR(top=0, bottom=128, left=128, right=0)), + # Row 1 + Tile(coords=TBLR(top=432, bottom=1000, left=0, right=560), overlap=TBLR(top=128, bottom=0, left=0, right=128)), + Tile( + coords=TBLR(top=432, bottom=1000, left=432, right=1000), overlap=TBLR(top=128, bottom=0, left=128, right=0) + ), + ] + + assert tiles == expected_tiles + +@pytest.mark.parametrize( + ["image_height", "image_width", "num_tiles_x", "num_tiles_y", "overlap", "raises"], + [ + (128, 128, 1, 1, 0.25, False), # OK + (128, 128, 1, 1, 0, False), # OK + (128, 128, 2, 1, 0, False), # OK + (127, 127, 1, 1, 0, True), # image size must be drivable by 8 + ], +) +def test_calc_tiles_even_split_input_validation( + image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap: float, raises: bool +): + """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" + if raises: + with pytest.raises(AssertionError): + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) + else: + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) + + ############################################# # Test merge_tiles_with_linear_blending(...) ############################################# From 8cda42ab0a8fa0cf20c5e2cdd5fbb919726e0d91 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Fri, 8 Dec 2023 18:17:40 +0000 Subject: [PATCH 044/515] ruff formatting --- tests/backend/tiles/test_tiles.py | 44 ++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index a930f2f829..0f8998f7ed 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -168,12 +168,21 @@ def test_calc_tiles_min_overlap_difficult_size(): Tile(coords=TBLR(top=0, bottom=512, left=488, right=1000), overlap=TBLR(top=0, bottom=268, left=268, right=0)), # Row 1 Tile(coords=TBLR(top=244, bottom=756, left=0, right=512), overlap=TBLR(top=268, bottom=268, left=0, right=0)), - Tile(coords=TBLR(top=244, bottom=756, left=244, right=756),overlap=TBLR(top=268, bottom=268, left=268, right=268)), - Tile(coords=TBLR(top=244, bottom=756, left=488, right=1000), overlap=TBLR(top=268, bottom=268, left=268, right=0)), + Tile( + coords=TBLR(top=244, bottom=756, left=244, right=756), + overlap=TBLR(top=268, bottom=268, left=268, right=268), + ), + Tile( + coords=TBLR(top=244, bottom=756, left=488, right=1000), overlap=TBLR(top=268, bottom=268, left=268, right=0) + ), # Row 2 Tile(coords=TBLR(top=488, bottom=1000, left=0, right=512), overlap=TBLR(top=268, bottom=0, left=0, right=268)), - Tile(coords=TBLR(top=488, bottom=1000, left=244, right=756),overlap=TBLR(top=268, bottom=0, left=268, right=268)), - Tile(coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=268, bottom=0, left=268, right=0)), + Tile( + coords=TBLR(top=488, bottom=1000, left=244, right=756), overlap=TBLR(top=268, bottom=0, left=268, right=268) + ), + Tile( + coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=268, bottom=0, left=268, right=0) + ), ] assert tiles == expected_tiles @@ -193,12 +202,21 @@ def test_calc_tiles_min_overlap_difficult_size_div8(): Tile(coords=TBLR(top=0, bottom=512, left=488, right=1000), overlap=TBLR(top=0, bottom=272, left=264, right=0)), # Row 1 Tile(coords=TBLR(top=240, bottom=752, left=0, right=512), overlap=TBLR(top=272, bottom=264, left=0, right=272)), - Tile(coords=TBLR(top=240, bottom=752, left=240, right=752),overlap=TBLR(top=272, bottom=264, left=272, right=264)), - Tile(coords=TBLR(top=240, bottom=752, left=488, right=1000), overlap=TBLR(top=272, bottom=264, left=264, right=0)), + Tile( + coords=TBLR(top=240, bottom=752, left=240, right=752), + overlap=TBLR(top=272, bottom=264, left=272, right=264), + ), + Tile( + coords=TBLR(top=240, bottom=752, left=488, right=1000), overlap=TBLR(top=272, bottom=264, left=264, right=0) + ), # Row 2 Tile(coords=TBLR(top=488, bottom=1000, left=0, right=512), overlap=TBLR(top=264, bottom=0, left=0, right=272)), - Tile(coords=TBLR(top=488, bottom=1000, left=240, right=752),overlap=TBLR(top=264, bottom=0, left=272, right=264)), - Tile(coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=264, bottom=0, left=264, right=0)), + Tile( + coords=TBLR(top=488, bottom=1000, left=240, right=752), overlap=TBLR(top=264, bottom=0, left=272, right=264) + ), + Tile( + coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=264, bottom=0, left=264, right=0) + ), ] assert tiles == expected_tiles @@ -217,7 +235,13 @@ def test_calc_tiles_min_overlap_difficult_size_div8(): ], ) def test_calc_tiles_min_overlap_input_validation( - image_height: int, image_width: int, tile_height: int, tile_width: int, min_overlap: int, round_to_8: bool , raises: bool + image_height: int, + image_width: int, + tile_height: int, + tile_width: int, + min_overlap: int, + round_to_8: bool, + raises: bool, ): """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" if raises: @@ -226,6 +250,7 @@ def test_calc_tiles_min_overlap_input_validation( else: calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap, round_to_8) + #################################### # Test calc_tiles_even_split(...) #################################### @@ -301,6 +326,7 @@ def test_calc_tiles_even_split_difficult_size(): assert tiles == expected_tiles + @pytest.mark.parametrize( ["image_height", "image_width", "num_tiles_x", "num_tiles_y", "overlap", "raises"], [ From d3ad356c6ac3a15b4314f8f8a684f304f26b8dc0 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Fri, 8 Dec 2023 18:31:33 +0000 Subject: [PATCH 045/515] Ruff Formatting Fix pyTest issues --- invokeai/backend/tiles/tiles.py | 7 ++++++- tests/backend/tiles/test_tiles.py | 13 ++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 9715fc4950..166e45d57c 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -159,7 +159,12 @@ def calc_tiles_even_split( def calc_tiles_min_overlap( - image_height: int, image_width: int, tile_height: int, tile_width: int, min_overlap: int = 0, round_to_8: bool = False + image_height: int, + image_width: int, + tile_height: int, + tile_width: int, + min_overlap: int = 0, + round_to_8: bool = False, ) -> list[Tile]: """Calculate the tile coordinates for a given image shape under a simple tiling scheme with overlaps. diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 0f8998f7ed..5757105982 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -223,7 +223,7 @@ def test_calc_tiles_min_overlap_difficult_size_div8(): @pytest.mark.parametrize( - ["image_height", "image_width", "tile_height", "tile_width", "overlap", "raises"], + ["image_height", "image_width", "tile_height", "tile_width", "min_overlap", "raises"], [ (128, 128, 128, 128, 127, False), # OK (128, 128, 128, 128, 0, False), # OK @@ -240,15 +240,14 @@ def test_calc_tiles_min_overlap_input_validation( tile_height: int, tile_width: int, min_overlap: int, - round_to_8: bool, raises: bool, ): - """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" + """Test that calc_tiles_min_overlap() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(AssertionError): - calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap, round_to_8) + calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap) else: - calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap, round_to_8) + calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap) #################################### @@ -333,13 +332,13 @@ def test_calc_tiles_even_split_difficult_size(): (128, 128, 1, 1, 0.25, False), # OK (128, 128, 1, 1, 0, False), # OK (128, 128, 2, 1, 0, False), # OK - (127, 127, 1, 1, 0, True), # image size must be drivable by 8 + (127, 127, 1, 1, 0, True), # image size must be dividable by 8 ], ) def test_calc_tiles_even_split_input_validation( image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap: float, raises: bool ): - """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" + """Test that calc_tiles_even_split() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(AssertionError): calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) From b7ba426249252e0e1197387459b63b47e6a85540 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Fri, 8 Dec 2023 18:53:28 +0000 Subject: [PATCH 046/515] Fixed some params on tile gen tests on tests --- tests/backend/tiles/test_tiles.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 5757105982..519ca8586e 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -133,7 +133,7 @@ def test_calc_tiles_min_overlap_not_evenly_divisible(): """Test calc_tiles_min_overlap() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters mimic roughly the same output as the original tile generations of the same test name tiles = calc_tiles_min_overlap( - image_height=400, image_width=1200, tile_height=256, tile_width=512, min_overlap=64, round_to_8=False + image_height=400, image_width=1200, tile_height=512, tile_width=512, min_overlap=64, round_to_8=False ) expected_tiles = [ @@ -144,7 +144,7 @@ def test_calc_tiles_min_overlap_not_evenly_divisible(): # Row 1 Tile(coords=TBLR(top=144, bottom=400, left=0, right=512), overlap=TBLR(top=112, bottom=0, left=0, right=168)), Tile( - coords=TBLR(top=144, bottom=400, left=448, right=960), overlap=TBLR(top=112, bottom=0, left=168, right=168) + coords=TBLR(top=144, bottom=400, left=344, right=856), overlap=TBLR(top=112, bottom=0, left=168, right=168) ), Tile( coords=TBLR(top=144, bottom=400, left=688, right=1200), overlap=TBLR(top=112, bottom=0, left=168, right=0) @@ -158,7 +158,7 @@ def test_calc_tiles_min_overlap_difficult_size(): """Test calc_tiles_min_overlap() behavior when the image is a difficult size to spilt evenly and keep div8.""" # Parameters are a difficult size for other tile gen routines to calculate tiles = calc_tiles_min_overlap( - image_height=1000, image_width=1000, tile_height=256, tile_width=512, min_overlap=64, round_to_8=False + image_height=1000, image_width=1000, tile_height=512, tile_width=512, min_overlap=64, round_to_8=False ) expected_tiles = [ @@ -340,7 +340,7 @@ def test_calc_tiles_even_split_input_validation( ): """Test that calc_tiles_even_split() raises an exception if the inputs are invalid.""" if raises: - with pytest.raises(AssertionError): + with pytest.raises(ValueError): calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) else: calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) From 375a91db3257474499f915c1a6bbea8a52c13899 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Fri, 8 Dec 2023 19:38:16 +0000 Subject: [PATCH 047/515] further updated tests --- tests/backend/tiles/test_tiles.py | 485 +++++++++++++++++++++++------- 1 file changed, 380 insertions(+), 105 deletions(-) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 519ca8586e..850d6ca6ca 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -16,10 +16,15 @@ from invokeai.backend.tiles.utils import TBLR, Tile def test_calc_tiles_with_overlap_single_tile(): """Test calc_tiles_with_overlap() behavior when a single tile covers the image.""" - tiles = calc_tiles_with_overlap(image_height=512, image_width=1024, tile_height=512, tile_width=1024, overlap=64) + tiles = calc_tiles_with_overlap( + image_height=512, image_width=1024, tile_height=512, tile_width=1024, overlap=64 + ) expected_tiles = [ - Tile(coords=TBLR(top=0, bottom=512, left=0, right=1024), overlap=TBLR(top=0, bottom=0, left=0, right=0)) + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=1024), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) ] assert tiles == expected_tiles @@ -28,17 +33,37 @@ def test_calc_tiles_with_overlap_single_tile(): def test_calc_tiles_with_overlap_evenly_divisible(): """Test calc_tiles_with_overlap() behavior when the image is evenly covered by multiple tiles.""" # Parameters chosen so that image is evenly covered by 2 rows, 3 columns of tiles. - tiles = calc_tiles_with_overlap(image_height=576, image_width=1600, tile_height=320, tile_width=576, overlap=64) + tiles = calc_tiles_with_overlap( + image_height=576, image_width=1600, tile_height=320, tile_width=576, overlap=64 + ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=320, left=0, right=576), overlap=TBLR(top=0, bottom=64, left=0, right=64)), - Tile(coords=TBLR(top=0, bottom=320, left=512, right=1088), overlap=TBLR(top=0, bottom=64, left=64, right=64)), - Tile(coords=TBLR(top=0, bottom=320, left=1024, right=1600), overlap=TBLR(top=0, bottom=64, left=64, right=0)), + Tile( + coords=TBLR(top=0, bottom=320, left=0, right=576), + overlap=TBLR(top=0, bottom=64, left=0, right=64), + ), + Tile( + coords=TBLR(top=0, bottom=320, left=512, right=1088), + overlap=TBLR(top=0, bottom=64, left=64, right=64), + ), + Tile( + coords=TBLR(top=0, bottom=320, left=1024, right=1600), + overlap=TBLR(top=0, bottom=64, left=64, right=0), + ), # Row 1 - Tile(coords=TBLR(top=256, bottom=576, left=0, right=576), overlap=TBLR(top=64, bottom=0, left=0, right=64)), - Tile(coords=TBLR(top=256, bottom=576, left=512, right=1088), overlap=TBLR(top=64, bottom=0, left=64, right=64)), - Tile(coords=TBLR(top=256, bottom=576, left=1024, right=1600), overlap=TBLR(top=64, bottom=0, left=64, right=0)), + Tile( + coords=TBLR(top=256, bottom=576, left=0, right=576), + overlap=TBLR(top=64, bottom=0, left=0, right=64), + ), + Tile( + coords=TBLR(top=256, bottom=576, left=512, right=1088), + overlap=TBLR(top=64, bottom=0, left=64, right=64), + ), + Tile( + coords=TBLR(top=256, bottom=576, left=1024, right=1600), + overlap=TBLR(top=64, bottom=0, left=64, right=0), + ), ] assert tiles == expected_tiles @@ -47,20 +72,36 @@ def test_calc_tiles_with_overlap_evenly_divisible(): def test_calc_tiles_with_overlap_not_evenly_divisible(): """Test calc_tiles_with_overlap() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters chosen so that image is covered by 2 rows and 3 columns of tiles, with uneven overlaps. - tiles = calc_tiles_with_overlap(image_height=400, image_width=1200, tile_height=256, tile_width=512, overlap=64) + tiles = calc_tiles_with_overlap( + image_height=400, image_width=1200, tile_height=256, tile_width=512, overlap=64 + ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=256, left=0, right=512), overlap=TBLR(top=0, bottom=112, left=0, right=64)), - Tile(coords=TBLR(top=0, bottom=256, left=448, right=960), overlap=TBLR(top=0, bottom=112, left=64, right=272)), - Tile(coords=TBLR(top=0, bottom=256, left=688, right=1200), overlap=TBLR(top=0, bottom=112, left=272, right=0)), - # Row 1 - Tile(coords=TBLR(top=144, bottom=400, left=0, right=512), overlap=TBLR(top=112, bottom=0, left=0, right=64)), Tile( - coords=TBLR(top=144, bottom=400, left=448, right=960), overlap=TBLR(top=112, bottom=0, left=64, right=272) + coords=TBLR(top=0, bottom=256, left=0, right=512), + overlap=TBLR(top=0, bottom=112, left=0, right=64), ), Tile( - coords=TBLR(top=144, bottom=400, left=688, right=1200), overlap=TBLR(top=112, bottom=0, left=272, right=0) + coords=TBLR(top=0, bottom=256, left=448, right=960), + overlap=TBLR(top=0, bottom=112, left=64, right=272), + ), + Tile( + coords=TBLR(top=0, bottom=256, left=688, right=1200), + overlap=TBLR(top=0, bottom=112, left=272, right=0), + ), + # Row 1 + Tile( + coords=TBLR(top=144, bottom=400, left=0, right=512), + overlap=TBLR(top=112, bottom=0, left=0, right=64), + ), + Tile( + coords=TBLR(top=144, bottom=400, left=448, right=960), + overlap=TBLR(top=112, bottom=0, left=64, right=272), + ), + Tile( + coords=TBLR(top=144, bottom=400, left=688, right=1200), + overlap=TBLR(top=112, bottom=0, left=272, right=0), ), ] @@ -80,14 +121,23 @@ def test_calc_tiles_with_overlap_not_evenly_divisible(): ], ) def test_calc_tiles_with_overlap_input_validation( - image_height: int, image_width: int, tile_height: int, tile_width: int, overlap: int, raises: bool + image_height: int, + image_width: int, + tile_height: int, + tile_width: int, + overlap: int, + raises: bool, ): """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(AssertionError): - calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) + calc_tiles_with_overlap( + image_height, image_width, tile_height, tile_width, overlap + ) else: - calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) + calc_tiles_with_overlap( + image_height, image_width, tile_height, tile_width, overlap + ) #################################### @@ -98,11 +148,19 @@ def test_calc_tiles_with_overlap_input_validation( def test_calc_tiles_min_overlap_single_tile(): """Test calc_tiles_min_overlap() behavior when a single tile covers the image.""" tiles = calc_tiles_min_overlap( - image_height=512, image_width=1024, tile_height=512, tile_width=1024, min_overlap=64, round_to_8=False + image_height=512, + image_width=1024, + tile_height=512, + tile_width=1024, + min_overlap=64, + round_to_8=False, ) expected_tiles = [ - Tile(coords=TBLR(top=0, bottom=512, left=0, right=1024), overlap=TBLR(top=0, bottom=0, left=0, right=0)) + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=1024), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) ] assert tiles == expected_tiles @@ -112,18 +170,41 @@ def test_calc_tiles_min_overlap_evenly_divisible(): """Test calc_tiles_min_overlap() behavior when the image is evenly covered by multiple tiles.""" # Parameters mimic roughly the same output as the original tile generations of the same test name tiles = calc_tiles_min_overlap( - image_height=576, image_width=1600, tile_height=320, tile_width=576, min_overlap=64, round_to_8=False + image_height=576, + image_width=1600, + tile_height=320, + tile_width=576, + min_overlap=64, + round_to_8=False, ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=320, left=0, right=576), overlap=TBLR(top=0, bottom=64, left=0, right=64)), - Tile(coords=TBLR(top=0, bottom=320, left=512, right=1088), overlap=TBLR(top=0, bottom=64, left=64, right=64)), - Tile(coords=TBLR(top=0, bottom=320, left=1024, right=1600), overlap=TBLR(top=0, bottom=64, left=64, right=0)), + Tile( + coords=TBLR(top=0, bottom=320, left=0, right=576), + overlap=TBLR(top=0, bottom=64, left=0, right=64), + ), + Tile( + coords=TBLR(top=0, bottom=320, left=512, right=1088), + overlap=TBLR(top=0, bottom=64, left=64, right=64), + ), + Tile( + coords=TBLR(top=0, bottom=320, left=1024, right=1600), + overlap=TBLR(top=0, bottom=64, left=64, right=0), + ), # Row 1 - Tile(coords=TBLR(top=256, bottom=576, left=0, right=576), overlap=TBLR(top=64, bottom=0, left=0, right=64)), - Tile(coords=TBLR(top=256, bottom=576, left=512, right=1088), overlap=TBLR(top=64, bottom=0, left=64, right=64)), - Tile(coords=TBLR(top=256, bottom=576, left=1024, right=1600), overlap=TBLR(top=64, bottom=0, left=64, right=0)), + Tile( + coords=TBLR(top=256, bottom=576, left=0, right=576), + overlap=TBLR(top=64, bottom=0, left=0, right=64), + ), + Tile( + coords=TBLR(top=256, bottom=576, left=512, right=1088), + overlap=TBLR(top=64, bottom=0, left=64, right=64), + ), + Tile( + coords=TBLR(top=256, bottom=576, left=1024, right=1600), + overlap=TBLR(top=64, bottom=0, left=64, right=0), + ), ] assert tiles == expected_tiles @@ -133,21 +214,40 @@ def test_calc_tiles_min_overlap_not_evenly_divisible(): """Test calc_tiles_min_overlap() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters mimic roughly the same output as the original tile generations of the same test name tiles = calc_tiles_min_overlap( - image_height=400, image_width=1200, tile_height=512, tile_width=512, min_overlap=64, round_to_8=False + image_height=400, + image_width=1200, + tile_height=256, + tile_width=512, + min_overlap=64, + round_to_8=False, ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=256, left=0, right=512), overlap=TBLR(top=0, bottom=112, left=0, right=168)), - Tile(coords=TBLR(top=0, bottom=256, left=344, right=856), overlap=TBLR(top=0, bottom=112, left=168, right=168)), - Tile(coords=TBLR(top=0, bottom=256, left=688, right=1200), overlap=TBLR(top=0, bottom=112, left=168, right=0)), - # Row 1 - Tile(coords=TBLR(top=144, bottom=400, left=0, right=512), overlap=TBLR(top=112, bottom=0, left=0, right=168)), Tile( - coords=TBLR(top=144, bottom=400, left=344, right=856), overlap=TBLR(top=112, bottom=0, left=168, right=168) + coords=TBLR(top=0, bottom=256, left=0, right=512), + overlap=TBLR(top=0, bottom=112, left=0, right=168), ), Tile( - coords=TBLR(top=144, bottom=400, left=688, right=1200), overlap=TBLR(top=112, bottom=0, left=168, right=0) + coords=TBLR(top=0, bottom=256, left=344, right=856), + overlap=TBLR(top=0, bottom=112, left=168, right=168), + ), + Tile( + coords=TBLR(top=0, bottom=256, left=688, right=1200), + overlap=TBLR(top=0, bottom=112, left=168, right=0), + ), + # Row 1 + Tile( + coords=TBLR(top=144, bottom=400, left=0, right=512), + overlap=TBLR(top=112, bottom=0, left=0, right=168), + ), + Tile( + coords=TBLR(top=144, bottom=400, left=344, right=856), + overlap=TBLR(top=112, bottom=0, left=168, right=168), + ), + Tile( + coords=TBLR(top=144, bottom=400, left=688, right=1200), + overlap=TBLR(top=112, bottom=0, left=168, right=0), ), ] @@ -158,30 +258,53 @@ def test_calc_tiles_min_overlap_difficult_size(): """Test calc_tiles_min_overlap() behavior when the image is a difficult size to spilt evenly and keep div8.""" # Parameters are a difficult size for other tile gen routines to calculate tiles = calc_tiles_min_overlap( - image_height=1000, image_width=1000, tile_height=512, tile_width=512, min_overlap=64, round_to_8=False + image_height=1000, + image_width=1000, + tile_height=512, + tile_width=512, + min_overlap=64, + round_to_8=False, ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=268, left=0, right=268)), - Tile(coords=TBLR(top=0, bottom=512, left=244, right=756), overlap=TBLR(top=0, bottom=268, left=268, right=268)), - Tile(coords=TBLR(top=0, bottom=512, left=488, right=1000), overlap=TBLR(top=0, bottom=268, left=268, right=0)), + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=268, left=0, right=268), + ), + Tile( + coords=TBLR(top=0, bottom=512, left=244, right=756), + overlap=TBLR(top=0, bottom=268, left=268, right=268), + ), + Tile( + coords=TBLR(top=0, bottom=512, left=488, right=1000), + overlap=TBLR(top=0, bottom=268, left=268, right=0), + ), # Row 1 - Tile(coords=TBLR(top=244, bottom=756, left=0, right=512), overlap=TBLR(top=268, bottom=268, left=0, right=0)), + Tile( + coords=TBLR(top=244, bottom=756, left=0, right=512), + overlap=TBLR(top=268, bottom=268, left=0, right=268), + ), Tile( coords=TBLR(top=244, bottom=756, left=244, right=756), overlap=TBLR(top=268, bottom=268, left=268, right=268), ), Tile( - coords=TBLR(top=244, bottom=756, left=488, right=1000), overlap=TBLR(top=268, bottom=268, left=268, right=0) + coords=TBLR(top=244, bottom=756, left=488, right=1000), + overlap=TBLR(top=268, bottom=268, left=268, right=0), ), # Row 2 - Tile(coords=TBLR(top=488, bottom=1000, left=0, right=512), overlap=TBLR(top=268, bottom=0, left=0, right=268)), Tile( - coords=TBLR(top=488, bottom=1000, left=244, right=756), overlap=TBLR(top=268, bottom=0, left=268, right=268) + coords=TBLR(top=488, bottom=1000, left=0, right=512), + overlap=TBLR(top=268, bottom=0, left=0, right=268), ), Tile( - coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=268, bottom=0, left=268, right=0) + coords=TBLR(top=488, bottom=1000, left=244, right=756), + overlap=TBLR(top=268, bottom=0, left=268, right=268), + ), + Tile( + coords=TBLR(top=488, bottom=1000, left=488, right=1000), + overlap=TBLR(top=268, bottom=0, left=268, right=0), ), ] @@ -192,30 +315,53 @@ def test_calc_tiles_min_overlap_difficult_size_div8(): """Test calc_tiles_min_overlap() behavior when the image is a difficult size to spilt evenly and keep div8.""" # Parameters are a difficult size for other tile gen routines to calculate tiles = calc_tiles_min_overlap( - image_height=1000, image_width=1000, tile_height=256, tile_width=512, min_overlap=64, round_to_8=True + image_height=1000, + image_width=1000, + tile_height=512, + tile_width=512, + min_overlap=64, + round_to_8=True, ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=512, left=0, right=560), overlap=TBLR(top=0, bottom=272, left=0, right=272)), - Tile(coords=TBLR(top=0, bottom=512, left=240, right=752), overlap=TBLR(top=0, bottom=272, left=272, right=264)), - Tile(coords=TBLR(top=0, bottom=512, left=488, right=1000), overlap=TBLR(top=0, bottom=272, left=264, right=0)), + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=272, left=0, right=272), + ), + Tile( + coords=TBLR(top=0, bottom=512, left=240, right=752), + overlap=TBLR(top=0, bottom=272, left=272, right=264), + ), + Tile( + coords=TBLR(top=0, bottom=512, left=488, right=1000), + overlap=TBLR(top=0, bottom=272, left=264, right=0), + ), # Row 1 - Tile(coords=TBLR(top=240, bottom=752, left=0, right=512), overlap=TBLR(top=272, bottom=264, left=0, right=272)), + Tile( + coords=TBLR(top=240, bottom=752, left=0, right=512), + overlap=TBLR(top=272, bottom=264, left=0, right=272), + ), Tile( coords=TBLR(top=240, bottom=752, left=240, right=752), overlap=TBLR(top=272, bottom=264, left=272, right=264), ), Tile( - coords=TBLR(top=240, bottom=752, left=488, right=1000), overlap=TBLR(top=272, bottom=264, left=264, right=0) + coords=TBLR(top=240, bottom=752, left=488, right=1000), + overlap=TBLR(top=272, bottom=264, left=264, right=0), ), # Row 2 - Tile(coords=TBLR(top=488, bottom=1000, left=0, right=512), overlap=TBLR(top=264, bottom=0, left=0, right=272)), Tile( - coords=TBLR(top=488, bottom=1000, left=240, right=752), overlap=TBLR(top=264, bottom=0, left=272, right=264) + coords=TBLR(top=488, bottom=1000, left=0, right=512), + overlap=TBLR(top=264, bottom=0, left=0, right=272), ), Tile( - coords=TBLR(top=488, bottom=1000, left=488, right=1000), overlap=TBLR(top=264, bottom=0, left=264, right=0) + coords=TBLR(top=488, bottom=1000, left=240, right=752), + overlap=TBLR(top=264, bottom=0, left=272, right=264), + ), + Tile( + coords=TBLR(top=488, bottom=1000, left=488, right=1000), + overlap=TBLR(top=264, bottom=0, left=264, right=0), ), ] @@ -223,7 +369,14 @@ def test_calc_tiles_min_overlap_difficult_size_div8(): @pytest.mark.parametrize( - ["image_height", "image_width", "tile_height", "tile_width", "min_overlap", "raises"], + [ + "image_height", + "image_width", + "tile_height", + "tile_width", + "min_overlap", + "raises", + ], [ (128, 128, 128, 128, 127, False), # OK (128, 128, 128, 128, 0, False), # OK @@ -245,9 +398,13 @@ def test_calc_tiles_min_overlap_input_validation( """Test that calc_tiles_min_overlap() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(AssertionError): - calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap) + calc_tiles_min_overlap( + image_height, image_width, tile_height, tile_width, min_overlap + ) else: - calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap) + calc_tiles_min_overlap( + image_height, image_width, tile_height, tile_width, min_overlap + ) #################################### @@ -257,10 +414,15 @@ def test_calc_tiles_min_overlap_input_validation( def test_calc_tiles_even_split_single_tile(): """Test calc_tiles_even_split() behavior when a single tile covers the image.""" - tiles = calc_tiles_even_split(image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap=0.25 + ) expected_tiles = [ - Tile(coords=TBLR(top=0, bottom=512, left=0, right=1024), overlap=TBLR(top=0, bottom=0, left=0, right=0)) + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=1024), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) ] assert tiles == expected_tiles @@ -269,19 +431,37 @@ def test_calc_tiles_even_split_single_tile(): def test_calc_tiles_even_split_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image is evenly covered by multiple tiles.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split(image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap=0.25 + ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=320, left=0, right=624), overlap=TBLR(top=0, bottom=72, left=0, right=136)), - Tile(coords=TBLR(top=0, bottom=320, left=488, right=1112), overlap=TBLR(top=0, bottom=72, left=136, right=136)), - Tile(coords=TBLR(top=0, bottom=320, left=976, right=1600), overlap=TBLR(top=0, bottom=72, left=136, right=0)), - # Row 1 - Tile(coords=TBLR(top=248, bottom=576, left=0, right=624), overlap=TBLR(top=72, bottom=0, left=0, right=136)), Tile( - coords=TBLR(top=248, bottom=576, left=488, right=1112), overlap=TBLR(top=72, bottom=0, left=136, right=136) + coords=TBLR(top=0, bottom=320, left=0, right=624), + overlap=TBLR(top=0, bottom=72, left=0, right=136), + ), + Tile( + coords=TBLR(top=0, bottom=320, left=488, right=1112), + overlap=TBLR(top=0, bottom=72, left=136, right=136), + ), + Tile( + coords=TBLR(top=0, bottom=320, left=976, right=1600), + overlap=TBLR(top=0, bottom=72, left=136, right=0), + ), + # Row 1 + Tile( + coords=TBLR(top=248, bottom=576, left=0, right=624), + overlap=TBLR(top=72, bottom=0, left=0, right=136), + ), + Tile( + coords=TBLR(top=248, bottom=576, left=488, right=1112), + overlap=TBLR(top=72, bottom=0, left=136, right=136), + ), + Tile( + coords=TBLR(top=248, bottom=576, left=976, right=1600), + overlap=TBLR(top=72, bottom=0, left=136, right=0), ), - Tile(coords=TBLR(top=248, bottom=576, left=976, right=1600), overlap=TBLR(top=72, bottom=0, left=136, right=0)), ] assert tiles == expected_tiles @@ -289,19 +469,37 @@ def test_calc_tiles_even_split_evenly_divisible(): def test_calc_tiles_even_split_not_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split(image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap=0.25 + ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=224, left=0, right=464), overlap=TBLR(top=0, bottom=56, left=0, right=104)), - Tile(coords=TBLR(top=0, bottom=224, left=360, right=824), overlap=TBLR(top=0, bottom=56, left=104, right=104)), - Tile(coords=TBLR(top=0, bottom=224, left=720, right=1200), overlap=TBLR(top=0, bottom=56, left=104, right=0)), - # Row 1 - Tile(coords=TBLR(top=168, bottom=400, left=0, right=464), overlap=TBLR(top=56, bottom=0, left=0, right=104)), Tile( - coords=TBLR(top=168, bottom=400, left=360, right=824), overlap=TBLR(top=56, bottom=0, left=104, right=104) + coords=TBLR(top=0, bottom=224, left=0, right=464), + overlap=TBLR(top=0, bottom=56, left=0, right=104), + ), + Tile( + coords=TBLR(top=0, bottom=224, left=360, right=824), + overlap=TBLR(top=0, bottom=56, left=104, right=104), + ), + Tile( + coords=TBLR(top=0, bottom=224, left=720, right=1200), + overlap=TBLR(top=0, bottom=56, left=104, right=0), + ), + # Row 1 + Tile( + coords=TBLR(top=168, bottom=400, left=0, right=464), + overlap=TBLR(top=56, bottom=0, left=0, right=104), + ), + Tile( + coords=TBLR(top=168, bottom=400, left=360, right=824), + overlap=TBLR(top=56, bottom=0, left=104, right=104), + ), + Tile( + coords=TBLR(top=168, bottom=400, left=720, right=1200), + overlap=TBLR(top=56, bottom=0, left=104, right=0), ), - Tile(coords=TBLR(top=168, bottom=400, left=720, right=1200), overlap=TBLR(top=56, bottom=0, left=104, right=0)), ] assert tiles == expected_tiles @@ -310,16 +508,28 @@ def test_calc_tiles_even_split_not_evenly_divisible(): def test_calc_tiles_even_split_difficult_size(): """Test calc_tiles_even_split() behavior when the image is a difficult size to spilt evenly and keep div8.""" # Parameters are a difficult size for other tile gen routines to calculate - tiles = calc_tiles_even_split(image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap=0.25 + ) expected_tiles = [ # Row 0 - Tile(coords=TBLR(top=0, bottom=560, left=0, right=560), overlap=TBLR(top=0, bottom=128, left=0, right=128)), - Tile(coords=TBLR(top=0, bottom=560, left=432, right=1000), overlap=TBLR(top=0, bottom=128, left=128, right=0)), - # Row 1 - Tile(coords=TBLR(top=432, bottom=1000, left=0, right=560), overlap=TBLR(top=128, bottom=0, left=0, right=128)), Tile( - coords=TBLR(top=432, bottom=1000, left=432, right=1000), overlap=TBLR(top=128, bottom=0, left=128, right=0) + coords=TBLR(top=0, bottom=560, left=0, right=560), + overlap=TBLR(top=0, bottom=128, left=0, right=128), + ), + Tile( + coords=TBLR(top=0, bottom=560, left=432, right=1000), + overlap=TBLR(top=0, bottom=128, left=128, right=0), + ), + # Row 1 + Tile( + coords=TBLR(top=432, bottom=1000, left=0, right=560), + overlap=TBLR(top=128, bottom=0, left=0, right=128), + ), + Tile( + coords=TBLR(top=432, bottom=1000, left=432, right=1000), + overlap=TBLR(top=128, bottom=0, left=128, right=0), ), ] @@ -336,14 +546,23 @@ def test_calc_tiles_even_split_difficult_size(): ], ) def test_calc_tiles_even_split_input_validation( - image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap: float, raises: bool + image_height: int, + image_width: int, + num_tiles_x: int, + num_tiles_y: int, + overlap: float, + raises: bool, ): """Test that calc_tiles_even_split() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(ValueError): - calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) + calc_tiles_even_split( + image_height, image_width, num_tiles_x, num_tiles_y, overlap + ) else: - calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) + calc_tiles_even_split( + image_height, image_width, num_tiles_x, num_tiles_y, overlap + ) ############################################# @@ -356,8 +575,14 @@ def test_merge_tiles_with_linear_blending_horizontal(blend_amount: int): """Test merge_tiles_with_linear_blending(...) behavior when merging horizontally.""" # Initialize 2 tiles side-by-side. tiles = [ - Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=64)), - Tile(coords=TBLR(top=0, bottom=512, left=448, right=960), overlap=TBLR(top=0, bottom=0, left=64, right=0)), + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=0, left=0, right=64), + ), + Tile( + coords=TBLR(top=0, bottom=512, left=448, right=960), + overlap=TBLR(top=0, bottom=0, left=64, right=0), + ), ] dst_image = np.zeros((512, 960, 3), dtype=np.uint8) @@ -372,12 +597,19 @@ def test_merge_tiles_with_linear_blending_horizontal(blend_amount: int): expected_output = np.zeros((512, 960, 3), dtype=np.uint8) expected_output[:, : 480 - (blend_amount // 2), :] = 64 if blend_amount > 0: - gradient = np.linspace(start=64, stop=128, num=blend_amount, dtype=np.uint8).reshape((1, blend_amount, 1)) - expected_output[:, 480 - (blend_amount // 2) : 480 + (blend_amount // 2), :] = gradient + gradient = np.linspace( + start=64, stop=128, num=blend_amount, dtype=np.uint8 + ).reshape((1, blend_amount, 1)) + expected_output[ + :, 480 - (blend_amount // 2) : 480 + (blend_amount // 2), : + ] = gradient expected_output[:, 480 + (blend_amount // 2) :, :] = 128 merge_tiles_with_linear_blending( - dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=blend_amount + dst_image=dst_image, + tiles=tiles, + tile_images=tile_images, + blend_amount=blend_amount, ) np.testing.assert_array_equal(dst_image, expected_output, strict=True) @@ -388,8 +620,14 @@ def test_merge_tiles_with_linear_blending_vertical(blend_amount: int): """Test merge_tiles_with_linear_blending(...) behavior when merging vertically.""" # Initialize 2 tiles stacked vertically. tiles = [ - Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=64, left=0, right=0)), - Tile(coords=TBLR(top=448, bottom=960, left=0, right=512), overlap=TBLR(top=64, bottom=0, left=0, right=0)), + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=64, left=0, right=0), + ), + Tile( + coords=TBLR(top=448, bottom=960, left=0, right=512), + overlap=TBLR(top=64, bottom=0, left=0, right=0), + ), ] dst_image = np.zeros((960, 512, 3), dtype=np.uint8) @@ -404,12 +642,19 @@ def test_merge_tiles_with_linear_blending_vertical(blend_amount: int): expected_output = np.zeros((960, 512, 3), dtype=np.uint8) expected_output[: 480 - (blend_amount // 2), :, :] = 64 if blend_amount > 0: - gradient = np.linspace(start=64, stop=128, num=blend_amount, dtype=np.uint8).reshape((blend_amount, 1, 1)) - expected_output[480 - (blend_amount // 2) : 480 + (blend_amount // 2), :, :] = gradient + gradient = np.linspace( + start=64, stop=128, num=blend_amount, dtype=np.uint8 + ).reshape((blend_amount, 1, 1)) + expected_output[ + 480 - (blend_amount // 2) : 480 + (blend_amount // 2), :, : + ] = gradient expected_output[480 + (blend_amount // 2) :, :, :] = 128 merge_tiles_with_linear_blending( - dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=blend_amount + dst_image=dst_image, + tiles=tiles, + tile_images=tile_images, + blend_amount=blend_amount, ) np.testing.assert_array_equal(dst_image, expected_output, strict=True) @@ -421,8 +666,14 @@ def test_merge_tiles_with_linear_blending_blend_amount_exceeds_vertical_overlap( """ # Initialize 2 tiles stacked vertically. tiles = [ - Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=64, left=0, right=0)), - Tile(coords=TBLR(top=448, bottom=960, left=0, right=512), overlap=TBLR(top=64, bottom=0, left=0, right=0)), + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=64, left=0, right=0), + ), + Tile( + coords=TBLR(top=448, bottom=960, left=0, right=512), + overlap=TBLR(top=64, bottom=0, left=0, right=0), + ), ] dst_image = np.zeros((960, 512, 3), dtype=np.uint8) @@ -432,7 +683,9 @@ def test_merge_tiles_with_linear_blending_blend_amount_exceeds_vertical_overlap( # blend_amount=128 exceeds overlap of 64, so should raise exception. with pytest.raises(AssertionError): - merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128) + merge_tiles_with_linear_blending( + dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128 + ) def test_merge_tiles_with_linear_blending_blend_amount_exceeds_horizontal_overlap(): @@ -441,8 +694,14 @@ def test_merge_tiles_with_linear_blending_blend_amount_exceeds_horizontal_overla """ # Initialize 2 tiles side-by-side. tiles = [ - Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=64)), - Tile(coords=TBLR(top=0, bottom=512, left=448, right=960), overlap=TBLR(top=0, bottom=0, left=64, right=0)), + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=0, left=0, right=64), + ), + Tile( + coords=TBLR(top=0, bottom=512, left=448, right=960), + overlap=TBLR(top=0, bottom=0, left=64, right=0), + ), ] dst_image = np.zeros((512, 960, 3), dtype=np.uint8) @@ -452,14 +711,21 @@ def test_merge_tiles_with_linear_blending_blend_amount_exceeds_horizontal_overla # blend_amount=128 exceeds overlap of 64, so should raise exception. with pytest.raises(AssertionError): - merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128) + merge_tiles_with_linear_blending( + dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128 + ) def test_merge_tiles_with_linear_blending_tiles_overflow_dst_image(): """Test that merge_tiles_with_linear_blending(...) raises an exception if any of the tiles overflows the dst_image. """ - tiles = [Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=0))] + tiles = [ + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) + ] dst_image = np.zeros((256, 512, 3), dtype=np.uint8) @@ -467,14 +733,21 @@ def test_merge_tiles_with_linear_blending_tiles_overflow_dst_image(): tile_images = [np.zeros((512, 512, 3))] with pytest.raises(ValueError): - merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0) + merge_tiles_with_linear_blending( + dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0 + ) def test_merge_tiles_with_linear_blending_mismatched_list_lengths(): """Test that merge_tiles_with_linear_blending(...) raises an exception if the lengths of 'tiles' and 'tile_images' do not match. """ - tiles = [Tile(coords=TBLR(top=0, bottom=512, left=0, right=512), overlap=TBLR(top=0, bottom=0, left=0, right=0))] + tiles = [ + Tile( + coords=TBLR(top=0, bottom=512, left=0, right=512), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ) + ] dst_image = np.zeros((256, 512, 3), dtype=np.uint8) @@ -482,4 +755,6 @@ def test_merge_tiles_with_linear_blending_mismatched_list_lengths(): tile_images = [np.zeros((512, 512, 3)), np.zeros((512, 512, 3))] with pytest.raises(ValueError): - merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0) + merge_tiles_with_linear_blending( + dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0 + ) From 5f371769383098196af439c3b5aa59d5a0c94e7b Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Fri, 8 Dec 2023 19:40:10 +0000 Subject: [PATCH 048/515] ruff formatting --- tests/backend/tiles/test_tiles.py | 84 ++++++++----------------------- 1 file changed, 21 insertions(+), 63 deletions(-) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 850d6ca6ca..87700f8d09 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -16,9 +16,7 @@ from invokeai.backend.tiles.utils import TBLR, Tile def test_calc_tiles_with_overlap_single_tile(): """Test calc_tiles_with_overlap() behavior when a single tile covers the image.""" - tiles = calc_tiles_with_overlap( - image_height=512, image_width=1024, tile_height=512, tile_width=1024, overlap=64 - ) + tiles = calc_tiles_with_overlap(image_height=512, image_width=1024, tile_height=512, tile_width=1024, overlap=64) expected_tiles = [ Tile( @@ -33,9 +31,7 @@ def test_calc_tiles_with_overlap_single_tile(): def test_calc_tiles_with_overlap_evenly_divisible(): """Test calc_tiles_with_overlap() behavior when the image is evenly covered by multiple tiles.""" # Parameters chosen so that image is evenly covered by 2 rows, 3 columns of tiles. - tiles = calc_tiles_with_overlap( - image_height=576, image_width=1600, tile_height=320, tile_width=576, overlap=64 - ) + tiles = calc_tiles_with_overlap(image_height=576, image_width=1600, tile_height=320, tile_width=576, overlap=64) expected_tiles = [ # Row 0 @@ -72,9 +68,7 @@ def test_calc_tiles_with_overlap_evenly_divisible(): def test_calc_tiles_with_overlap_not_evenly_divisible(): """Test calc_tiles_with_overlap() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters chosen so that image is covered by 2 rows and 3 columns of tiles, with uneven overlaps. - tiles = calc_tiles_with_overlap( - image_height=400, image_width=1200, tile_height=256, tile_width=512, overlap=64 - ) + tiles = calc_tiles_with_overlap(image_height=400, image_width=1200, tile_height=256, tile_width=512, overlap=64) expected_tiles = [ # Row 0 @@ -131,13 +125,9 @@ def test_calc_tiles_with_overlap_input_validation( """Test that calc_tiles_with_overlap() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(AssertionError): - calc_tiles_with_overlap( - image_height, image_width, tile_height, tile_width, overlap - ) + calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) else: - calc_tiles_with_overlap( - image_height, image_width, tile_height, tile_width, overlap - ) + calc_tiles_with_overlap(image_height, image_width, tile_height, tile_width, overlap) #################################### @@ -398,13 +388,9 @@ def test_calc_tiles_min_overlap_input_validation( """Test that calc_tiles_min_overlap() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(AssertionError): - calc_tiles_min_overlap( - image_height, image_width, tile_height, tile_width, min_overlap - ) + calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap) else: - calc_tiles_min_overlap( - image_height, image_width, tile_height, tile_width, min_overlap - ) + calc_tiles_min_overlap(image_height, image_width, tile_height, tile_width, min_overlap) #################################### @@ -414,9 +400,7 @@ def test_calc_tiles_min_overlap_input_validation( def test_calc_tiles_even_split_single_tile(): """Test calc_tiles_even_split() behavior when a single tile covers the image.""" - tiles = calc_tiles_even_split( - image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap=0.25 - ) + tiles = calc_tiles_even_split(image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap=0.25) expected_tiles = [ Tile( @@ -431,9 +415,7 @@ def test_calc_tiles_even_split_single_tile(): def test_calc_tiles_even_split_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image is evenly covered by multiple tiles.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split( - image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap=0.25 - ) + tiles = calc_tiles_even_split(image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap=0.25) expected_tiles = [ # Row 0 @@ -469,9 +451,7 @@ def test_calc_tiles_even_split_evenly_divisible(): def test_calc_tiles_even_split_not_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split( - image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap=0.25 - ) + tiles = calc_tiles_even_split(image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap=0.25) expected_tiles = [ # Row 0 @@ -508,9 +488,7 @@ def test_calc_tiles_even_split_not_evenly_divisible(): def test_calc_tiles_even_split_difficult_size(): """Test calc_tiles_even_split() behavior when the image is a difficult size to spilt evenly and keep div8.""" # Parameters are a difficult size for other tile gen routines to calculate - tiles = calc_tiles_even_split( - image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap=0.25 - ) + tiles = calc_tiles_even_split(image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap=0.25) expected_tiles = [ # Row 0 @@ -556,13 +534,9 @@ def test_calc_tiles_even_split_input_validation( """Test that calc_tiles_even_split() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(ValueError): - calc_tiles_even_split( - image_height, image_width, num_tiles_x, num_tiles_y, overlap - ) + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) else: - calc_tiles_even_split( - image_height, image_width, num_tiles_x, num_tiles_y, overlap - ) + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) ############################################# @@ -597,12 +571,8 @@ def test_merge_tiles_with_linear_blending_horizontal(blend_amount: int): expected_output = np.zeros((512, 960, 3), dtype=np.uint8) expected_output[:, : 480 - (blend_amount // 2), :] = 64 if blend_amount > 0: - gradient = np.linspace( - start=64, stop=128, num=blend_amount, dtype=np.uint8 - ).reshape((1, blend_amount, 1)) - expected_output[ - :, 480 - (blend_amount // 2) : 480 + (blend_amount // 2), : - ] = gradient + gradient = np.linspace(start=64, stop=128, num=blend_amount, dtype=np.uint8).reshape((1, blend_amount, 1)) + expected_output[:, 480 - (blend_amount // 2) : 480 + (blend_amount // 2), :] = gradient expected_output[:, 480 + (blend_amount // 2) :, :] = 128 merge_tiles_with_linear_blending( @@ -642,12 +612,8 @@ def test_merge_tiles_with_linear_blending_vertical(blend_amount: int): expected_output = np.zeros((960, 512, 3), dtype=np.uint8) expected_output[: 480 - (blend_amount // 2), :, :] = 64 if blend_amount > 0: - gradient = np.linspace( - start=64, stop=128, num=blend_amount, dtype=np.uint8 - ).reshape((blend_amount, 1, 1)) - expected_output[ - 480 - (blend_amount // 2) : 480 + (blend_amount // 2), :, : - ] = gradient + gradient = np.linspace(start=64, stop=128, num=blend_amount, dtype=np.uint8).reshape((blend_amount, 1, 1)) + expected_output[480 - (blend_amount // 2) : 480 + (blend_amount // 2), :, :] = gradient expected_output[480 + (blend_amount // 2) :, :, :] = 128 merge_tiles_with_linear_blending( @@ -683,9 +649,7 @@ def test_merge_tiles_with_linear_blending_blend_amount_exceeds_vertical_overlap( # blend_amount=128 exceeds overlap of 64, so should raise exception. with pytest.raises(AssertionError): - merge_tiles_with_linear_blending( - dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128 - ) + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128) def test_merge_tiles_with_linear_blending_blend_amount_exceeds_horizontal_overlap(): @@ -711,9 +675,7 @@ def test_merge_tiles_with_linear_blending_blend_amount_exceeds_horizontal_overla # blend_amount=128 exceeds overlap of 64, so should raise exception. with pytest.raises(AssertionError): - merge_tiles_with_linear_blending( - dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128 - ) + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=128) def test_merge_tiles_with_linear_blending_tiles_overflow_dst_image(): @@ -733,9 +695,7 @@ def test_merge_tiles_with_linear_blending_tiles_overflow_dst_image(): tile_images = [np.zeros((512, 512, 3))] with pytest.raises(ValueError): - merge_tiles_with_linear_blending( - dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0 - ) + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0) def test_merge_tiles_with_linear_blending_mismatched_list_lengths(): @@ -755,6 +715,4 @@ def test_merge_tiles_with_linear_blending_mismatched_list_lengths(): tile_images = [np.zeros((512, 512, 3)), np.zeros((512, 512, 3))] with pytest.raises(ValueError): - merge_tiles_with_linear_blending( - dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0 - ) + merge_tiles_with_linear_blending(dst_image=dst_image, tiles=tiles, tile_images=tile_images, blend_amount=0) From c42d692ea6cd45853ffa12f5fa9f77dc2afa52bc Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 9 Dec 2023 09:48:38 +1100 Subject: [PATCH 049/515] feat: workflow library (#5148) * chore: bump pydantic to 2.5.2 This release fixes pydantic/pydantic#8175 and allows us to use `JsonValue` * fix(ui): exclude public/en.json from prettier config * fix(workflow_records): fix SQLite workflow insertion to ignore duplicates * feat(backend): update workflows handling Update workflows handling for Workflow Library. **Updated Workflow Storage** "Embedded Workflows" are workflows associated with images, and are now only stored in the image files. "Library Workflows" are not associated with images, and are stored only in DB. This works out nicely. We have always saved workflows to files, but recently began saving them to the DB in addition to in image files. When that happened, we stopped reading workflows from files, so all the workflows that only existed in images were inaccessible. With this change, access to those workflows is restored, and no workflows are lost. **Updated Workflow Handling in Nodes** Prior to this change, workflows were embedded in images by passing the whole workflow JSON to a special workflow field on a node. In the node's `invoke()` function, the node was able to access this workflow and save it with the image. This (inaccurately) models workflows as a property of an image and is rather awkward technically. A workflow is now a property of a batch/session queue item. It is available in the InvocationContext and therefore available to all nodes during `invoke()`. **Database Migrations** Added a `SQLiteMigrator` class to handle database migrations. Migrations were needed to accomodate the DB-related changes in this PR. See the code for details. The `images`, `workflows` and `session_queue` tables required migrations for this PR, and are using the new migrator. Other tables/services are still creating tables themselves. A followup PR will adapt them to use the migrator. **Other/Support Changes** - Add a `has_workflow` column to `images` table to indicate that the image has an embedded workflow. - Add handling for retrieving the workflow from an image in python. The image file must be fetched, the workflow extracted, and then sent to client, avoiding needing the browser to parse the image file. With the `has_workflow` column, the UI knows if there is a workflow to be fetched, and only fetches when the user requests to load the workflow. - Add route to get the workflow from an image - Add CRUD service/routes for the library workflows - `workflow_images` table and services removed (no longer needed now that embedded workflows are not in the DB) * feat(ui): updated workflow handling (WIP) Clientside updates for the backend workflow changes. Includes roughed-out workflow library UI. * feat: revert SQLiteMigrator class Will pursue this in a separate PR. * feat(nodes): do not overwrite custom node module names Use a different, simpler method to detect if a node is custom. * feat(nodes): restore WithWorkflow as no-op class This class is deprecated and no longer needed. Set its workflow attr value to None (meaning it is now a no-op), and issue a warning when an invocation subclasses it. * fix(nodes): fix get_workflow from queue item dict func * feat(backend): add WorkflowRecordListItemDTO This is the id, name, description, created at and updated at workflow columns/attrs. Used to display lists of workflowsl * chore(ui): typegen * feat(ui): add workflow loading, deleting to workflow library UI * feat(ui): workflow library pagination button styles * wip * feat: workflow library WIP - Save to library - Duplicate - Filter/sort - UI/queries * feat: workflow library - system graphs - wip * feat(backend): sync system workflows to db * fix: merge conflicts * feat: simplify default workflows - Rename "system" -> "default" - Simplify syncing logic - Update UI to match * feat(workflows): update default workflows - Update TextToImage_SD15 - Add TextToImage_SDXL - Add README * feat(ui): refine workflow list UI * fix(workflow_records): typo * fix(tests): fix tests * feat(ui): clean up workflow library hooks * fix(db): fix mis-ordered db cleanup step It was happening before pruning queue items - should happen afterwards, else you have to restart the app again to free disk space made available by the pruning. * feat(ui): tweak reset workflow editor translations * feat(ui): split out workflow redux state The `nodes` slice is a rather complicated slice. Removing `workflow` makes it a bit more reasonable. Also helps to flatten state out a bit. * docs: update default workflows README * fix: tidy up unused files, unrelated changes * fix(backend): revert unrelated service organisational changes * feat(backend): workflow_records.get_many arg "filter_text" -> "query" * feat(ui): use custom hook in current image buttons Already in use elsewhere, forgot to use it here. * fix(ui): remove commented out property * fix(ui): fix workflow loading - Different handling for loading from library vs external - Fix bug where only nodes and edges loaded * fix(ui): fix save/save-as workflow naming * fix(ui): fix circular dependency * fix(db): fix bug with releasing without lock in db.clean() * fix(db): remove extraneous lock * chore: bump ruff * fix(workflow_records): default `category` to `WorkflowCategory.User` This allows old workflows to validate when reading them from the db or image files. * hide workflow library buttons if feature is disabled --------- Co-authored-by: Mary Hipp --- invokeai/app/api/dependencies.py | 6 +- invokeai/app/api/routers/images.py | 17 +- invokeai/app/api/routers/workflows.py | 87 +- invokeai/app/invocations/baseinvocation.py | 38 +- .../controlnet_image_processors.py | 37 +- invokeai/app/invocations/custom_nodes/init.py | 3 +- invokeai/app/invocations/cv.py | 8 +- invokeai/app/invocations/facetools.py | 19 +- invokeai/app/invocations/image.py | 234 ++- invokeai/app/invocations/infill.py | 32 +- invokeai/app/invocations/latent.py | 7 +- invokeai/app/invocations/onnx.py | 7 +- invokeai/app/invocations/tiles.py | 7 +- invokeai/app/invocations/upscale.py | 8 +- .../board_image_records_sqlite.py | 2 +- .../board_records/board_records_sqlite.py | 2 +- .../services/image_files/image_files_base.py | 10 +- .../services/image_files/image_files_disk.py | 23 +- .../image_records/image_records_base.py | 1 + .../image_records/image_records_common.py | 4 + .../image_records/image_records_sqlite.py | 19 +- invokeai/app/services/images/images_base.py | 10 +- invokeai/app/services/images/images_common.py | 7 - .../app/services/images/images_default.py | 33 +- .../invocation_processor_default.py | 2 + .../invocation_queue_common.py | 4 + invokeai/app/services/invocation_services.py | 4 - invokeai/app/services/invoker.py | 4 + .../item_storage/item_storage_sqlite.py | 2 +- .../model_records/model_records_sql.py | 2 +- .../session_processor_default.py | 1 + .../session_queue/session_queue_common.py | 28 +- .../session_queue/session_queue_sqlite.py | 15 +- .../sqlite}/__init__.py | 0 .../services/shared/sqlite/sqlite_common.py | 10 + .../{sqlite.py => sqlite/sqlite_database.py} | 33 +- .../workflow_image_records_base.py | 23 - .../workflow_image_records_sqlite.py | 122 -- .../default_workflows/README.md | 17 + .../default_workflows/TextToImage_SD15.json | 798 ++++++++++ .../default_workflows/TextToImage_SDXL.json | 1320 +++++++++++++++++ .../workflow_records/workflow_records_base.py | 39 +- .../workflow_records_common.py | 103 ++ .../workflow_records_sqlite.py | 273 +++- .../backend/model_manager/migrate_to_db.py | 2 +- invokeai/frontend/web/.prettierignore | 1 + invokeai/frontend/web/public/locales/en.json | 53 +- .../listeners/enqueueRequestedNodes.ts | 9 + .../listeners/imageDropped.ts | 6 +- .../listeners/workflowLoadRequested.ts | 11 +- .../web/src/app/store/nanostores/store.ts | 7 +- invokeai/frontend/web/src/app/store/store.ts | 7 +- .../frontend/web/src/app/types/invokeai.ts | 3 +- .../common/components/IAIMantineSelect.tsx | 20 +- .../web/src/common/components/Nbsp.tsx | 1 + .../CurrentImage/CurrentImageButtons.tsx | 24 +- .../SingleSelectionMenuItems.tsx | 40 +- .../ImageMetadataViewer.tsx | 13 +- .../ImageMetadataWorkflowTabContent.tsx | 23 + .../Invocation/EmbedWorkflowCheckbox.tsx | 45 - .../nodes/Invocation/InvocationNodeFooter.tsx | 4 +- .../Invocation/fields/FieldContextMenu.tsx | 6 +- .../Invocation/fields/LinearViewField.tsx | 2 +- .../panels/TopCenterPanel/TopCenterPanel.tsx | 22 +- .../panels/TopRightPanel/TopRightPanel.tsx | 8 +- .../inspector/InspectorDetailsTab.tsx | 11 +- .../sidePanel/workflow/WorkflowGeneralTab.tsx | 8 +- .../sidePanel/workflow/WorkflowLinearTab.tsx | 4 +- .../nodes/hooks/useDownloadWorkflow.ts | 17 + .../features/nodes/hooks/useEmbedWorkflow.ts | 27 - .../features/nodes/hooks/useWithWorkflow.ts | 31 - .../src/features/nodes/hooks/useWorkflow.ts | 16 +- .../web/src/features/nodes/store/actions.ts | 12 +- .../src/features/nodes/store/nodesSlice.ts | 197 +-- .../web/src/features/nodes/store/types.ts | 3 +- .../src/features/nodes/store/workflowSlice.ts | 99 ++ .../src/features/nodes/types/invocation.ts | 2 - .../web/src/features/nodes/types/workflow.ts | 5 + .../nodes/util/graph/buildNodesGraph.ts | 16 +- .../nodes/util/node/buildInvocationNode.ts | 1 - .../features/nodes/util/node/nodeUpdate.ts | 16 +- .../features/nodes/util/schema/parseSchema.ts | 8 - .../nodes/util/workflow/buildWorkflow.ts | 38 +- .../nodes/util/workflow/migrations.ts | 36 +- .../nodes/util/workflow/validateWorkflow.ts | 7 + .../components}/DownloadWorkflowButton.tsx | 4 +- .../LoadWorkflowFromFileButton.tsx} | 12 +- .../components}/ResetWorkflowButton.tsx | 14 +- .../components/SaveWorkflowAsButton.tsx | 89 ++ .../components/SaveWorkflowButton.tsx | 21 + .../components/WorkflowLibraryButton.tsx | 26 + .../components/WorkflowLibraryContent.tsx | 13 + .../components/WorkflowLibraryList.tsx | 242 +++ .../components/WorkflowLibraryListItem.tsx | 94 ++ .../components/WorkflowLibraryListWrapper.tsx | 21 + .../components/WorkflowLibraryModal.tsx | 40 + .../components/WorkflowLibraryPagination.tsx | 87 ++ .../context/WorkflowLibraryModalContext.ts | 5 + .../context/useWorkflowLibraryModalContext.ts | 12 + .../hooks/useDeleteLibraryWorkflow.ts | 48 + .../hooks/useGetAndLoadEmbeddedWorkflow.ts | 54 + .../hooks/useGetAndLoadLibraryWorkflow.ts | 52 + .../hooks/useLoadWorkflowFromFile.tsx | 45 +- .../workflowLibrary/hooks/useSaveWorkflow.ts | 61 + .../hooks/useSaveWorkflowAs.ts | 58 + .../util/getWorkflowCopyName.ts | 2 + .../web/src/services/api/endpoints/images.ts | 14 +- .../src/services/api/endpoints/workflows.ts | 89 +- .../api/hooks/useDebouncedWorkflow.ts | 21 - .../frontend/web/src/services/api/index.ts | 2 + .../frontend/web/src/services/api/schema.d.ts | 938 ++++++++++-- .../frontend/web/src/services/api/types.ts | 4 + pyproject.toml | 15 +- .../model_records/test_model_records_sql.py | 2 +- tests/nodes/test_graph_execution_state.py | 4 +- tests/nodes/test_invoker.py | 3 +- tests/nodes/test_sqlite.py | 2 +- tests/test_config.py | 6 +- 118 files changed, 5319 insertions(+), 1063 deletions(-) rename invokeai/app/services/{workflow_image_records => shared/sqlite}/__init__.py (100%) create mode 100644 invokeai/app/services/shared/sqlite/sqlite_common.py rename invokeai/app/services/shared/{sqlite.py => sqlite/sqlite_database.py} (56%) delete mode 100644 invokeai/app/services/workflow_image_records/workflow_image_records_base.py delete mode 100644 invokeai/app/services/workflow_image_records/workflow_image_records_sqlite.py create mode 100644 invokeai/app/services/workflow_records/default_workflows/README.md create mode 100644 invokeai/app/services/workflow_records/default_workflows/TextToImage_SD15.json create mode 100644 invokeai/app/services/workflow_records/default_workflows/TextToImage_SDXL.json create mode 100644 invokeai/frontend/web/src/common/components/Nbsp.tsx create mode 100644 invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataWorkflowTabContent.tsx delete mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/EmbedWorkflowCheckbox.tsx create mode 100644 invokeai/frontend/web/src/features/nodes/hooks/useDownloadWorkflow.ts delete mode 100644 invokeai/frontend/web/src/features/nodes/hooks/useEmbedWorkflow.ts delete mode 100644 invokeai/frontend/web/src/features/nodes/hooks/useWithWorkflow.ts create mode 100644 invokeai/frontend/web/src/features/nodes/store/workflowSlice.ts rename invokeai/frontend/web/src/features/{nodes/components/flow/panels/TopCenterPanel => workflowLibrary/components}/DownloadWorkflowButton.tsx (89%) rename invokeai/frontend/web/src/features/{nodes/components/flow/panels/TopCenterPanel/LoadWorkflowButton.tsx => workflowLibrary/components/LoadWorkflowFromFileButton.tsx} (62%) rename invokeai/frontend/web/src/features/{nodes/components/flow/panels/TopCenterPanel => workflowLibrary/components}/ResetWorkflowButton.tsx (85%) create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowAsButton.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryContent.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryList.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListWrapper.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryModal.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryPagination.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/context/WorkflowLibraryModalContext.ts create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/context/useWorkflowLibraryModalContext.ts create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/hooks/useDeleteLibraryWorkflow.ts create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadEmbeddedWorkflow.ts create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadLibraryWorkflow.ts rename invokeai/frontend/web/src/features/{nodes => workflowLibrary}/hooks/useLoadWorkflowFromFile.tsx (60%) create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/util/getWorkflowCopyName.ts delete mode 100644 invokeai/frontend/web/src/services/api/hooks/useDebouncedWorkflow.ts diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index b739327368..b7b6477937 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -2,7 +2,6 @@ from logging import Logger -from invokeai.app.services.workflow_image_records.workflow_image_records_sqlite import SqliteWorkflowImageRecordsStorage from invokeai.backend.util.logging import InvokeAILogger from invokeai.version.invokeai_version import __version__ @@ -30,7 +29,7 @@ from ..services.session_processor.session_processor_default import DefaultSessio from ..services.session_queue.session_queue_sqlite import SqliteSessionQueue from ..services.shared.default_graphs import create_system_graphs from ..services.shared.graph import GraphExecutionState, LibraryGraph -from ..services.shared.sqlite import SqliteDatabase +from ..services.shared.sqlite.sqlite_database import SqliteDatabase from ..services.urls.urls_default import LocalUrlService from ..services.workflow_records.workflow_records_sqlite import SqliteWorkflowRecordsStorage from .events import FastAPIEventService @@ -94,7 +93,6 @@ class ApiDependencies: session_processor = DefaultSessionProcessor() session_queue = SqliteSessionQueue(db=db) urls = LocalUrlService() - workflow_image_records = SqliteWorkflowImageRecordsStorage(db=db) workflow_records = SqliteWorkflowRecordsStorage(db=db) services = InvocationServices( @@ -121,14 +119,12 @@ class ApiDependencies: session_processor=session_processor, session_queue=session_queue, urls=urls, - workflow_image_records=workflow_image_records, workflow_records=workflow_records, ) create_system_graphs(services.graph_library) ApiDependencies.invoker = Invoker(services) - db.clean() @staticmethod diff --git a/invokeai/app/api/routers/images.py b/invokeai/app/api/routers/images.py index e8c8c693b3..125896b8d3 100644 --- a/invokeai/app/api/routers/images.py +++ b/invokeai/app/api/routers/images.py @@ -8,10 +8,11 @@ from fastapi.routing import APIRouter from PIL import Image from pydantic import BaseModel, Field, ValidationError -from invokeai.app.invocations.baseinvocation import MetadataField, MetadataFieldValidator, WorkflowFieldValidator +from invokeai.app.invocations.baseinvocation import MetadataField, MetadataFieldValidator from invokeai.app.services.image_records.image_records_common import ImageCategory, ImageRecordChanges, ResourceOrigin from invokeai.app.services.images.images_common import ImageDTO, ImageUrlsDTO from invokeai.app.services.shared.pagination import OffsetPaginatedResults +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID, WorkflowWithoutIDValidator from ..dependencies import ApiDependencies @@ -73,7 +74,7 @@ async def upload_image( workflow_raw = pil_image.info.get("invokeai_workflow", None) if workflow_raw is not None: try: - workflow = WorkflowFieldValidator.validate_json(workflow_raw) + workflow = WorkflowWithoutIDValidator.validate_json(workflow_raw) except ValidationError: ApiDependencies.invoker.services.logger.warn("Failed to parse metadata for uploaded image") pass @@ -184,6 +185,18 @@ async def get_image_metadata( raise HTTPException(status_code=404) +@images_router.get( + "/i/{image_name}/workflow", operation_id="get_image_workflow", response_model=Optional[WorkflowWithoutID] +) +async def get_image_workflow( + image_name: str = Path(description="The name of image whose workflow to get"), +) -> Optional[WorkflowWithoutID]: + try: + return ApiDependencies.invoker.services.images.get_workflow(image_name) + except Exception: + raise HTTPException(status_code=404) + + @images_router.api_route( "/i/{image_name}/full", methods=["GET", "HEAD"], diff --git a/invokeai/app/api/routers/workflows.py b/invokeai/app/api/routers/workflows.py index 36de31fb51..6e93d6d0ce 100644 --- a/invokeai/app/api/routers/workflows.py +++ b/invokeai/app/api/routers/workflows.py @@ -1,7 +1,19 @@ -from fastapi import APIRouter, Path +from typing import Optional + +from fastapi import APIRouter, Body, HTTPException, Path, Query from invokeai.app.api.dependencies import ApiDependencies -from invokeai.app.invocations.baseinvocation import WorkflowField +from invokeai.app.services.shared.pagination import PaginatedResults +from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection +from invokeai.app.services.workflow_records.workflow_records_common import ( + Workflow, + WorkflowCategory, + WorkflowNotFoundError, + WorkflowRecordDTO, + WorkflowRecordListItemDTO, + WorkflowRecordOrderBy, + WorkflowWithoutID, +) workflows_router = APIRouter(prefix="/v1/workflows", tags=["workflows"]) @@ -10,11 +22,76 @@ workflows_router = APIRouter(prefix="/v1/workflows", tags=["workflows"]) "/i/{workflow_id}", operation_id="get_workflow", responses={ - 200: {"model": WorkflowField}, + 200: {"model": WorkflowRecordDTO}, }, ) async def get_workflow( workflow_id: str = Path(description="The workflow to get"), -) -> WorkflowField: +) -> WorkflowRecordDTO: """Gets a workflow""" - return ApiDependencies.invoker.services.workflow_records.get(workflow_id) + try: + return ApiDependencies.invoker.services.workflow_records.get(workflow_id) + except WorkflowNotFoundError: + raise HTTPException(status_code=404, detail="Workflow not found") + + +@workflows_router.patch( + "/i/{workflow_id}", + operation_id="update_workflow", + responses={ + 200: {"model": WorkflowRecordDTO}, + }, +) +async def update_workflow( + workflow: Workflow = Body(description="The updated workflow", embed=True), +) -> WorkflowRecordDTO: + """Updates a workflow""" + return ApiDependencies.invoker.services.workflow_records.update(workflow=workflow) + + +@workflows_router.delete( + "/i/{workflow_id}", + operation_id="delete_workflow", +) +async def delete_workflow( + workflow_id: str = Path(description="The workflow to delete"), +) -> None: + """Deletes a workflow""" + ApiDependencies.invoker.services.workflow_records.delete(workflow_id) + + +@workflows_router.post( + "/", + operation_id="create_workflow", + responses={ + 200: {"model": WorkflowRecordDTO}, + }, +) +async def create_workflow( + workflow: WorkflowWithoutID = Body(description="The workflow to create", embed=True), +) -> WorkflowRecordDTO: + """Creates a workflow""" + return ApiDependencies.invoker.services.workflow_records.create(workflow=workflow) + + +@workflows_router.get( + "/", + operation_id="list_workflows", + responses={ + 200: {"model": PaginatedResults[WorkflowRecordListItemDTO]}, + }, +) +async def list_workflows( + page: int = Query(default=0, description="The page to get"), + per_page: int = Query(default=10, description="The number of workflows per page"), + order_by: WorkflowRecordOrderBy = Query( + default=WorkflowRecordOrderBy.Name, description="The attribute to order by" + ), + direction: SQLiteDirection = Query(default=SQLiteDirection.Ascending, description="The direction to order by"), + category: WorkflowCategory = Query(default=WorkflowCategory.User, description="The category of workflow to get"), + query: Optional[str] = Query(default=None, description="The text to query by (matches name and description)"), +) -> PaginatedResults[WorkflowRecordListItemDTO]: + """Gets a page of workflows""" + return ApiDependencies.invoker.services.workflow_records.get_many( + page=page, per_page=per_page, order_by=order_by, direction=direction, query=query, category=category + ) diff --git a/invokeai/app/invocations/baseinvocation.py b/invokeai/app/invocations/baseinvocation.py index b93e4f922f..5e1d86994d 100644 --- a/invokeai/app/invocations/baseinvocation.py +++ b/invokeai/app/invocations/baseinvocation.py @@ -16,6 +16,7 @@ from pydantic.fields import FieldInfo, _Unset from pydantic_core import PydanticUndefined from invokeai.app.services.config.config_default import InvokeAIAppConfig +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID from invokeai.app.shared.fields import FieldDescriptions from invokeai.app.util.metaenum import MetaEnum from invokeai.app.util.misc import uuid_string @@ -452,6 +453,7 @@ class InvocationContext: queue_id: str queue_item_id: int queue_batch_id: str + workflow: Optional[WorkflowWithoutID] def __init__( self, @@ -460,12 +462,14 @@ class InvocationContext: queue_item_id: int, queue_batch_id: str, graph_execution_state_id: str, + workflow: Optional[WorkflowWithoutID], ): self.services = services self.graph_execution_state_id = graph_execution_state_id self.queue_id = queue_id self.queue_item_id = queue_item_id self.queue_batch_id = queue_batch_id + self.workflow = workflow class BaseInvocationOutput(BaseModel): @@ -807,9 +811,9 @@ def invocation( cls.UIConfig.category = category # Grab the node pack's name from the module name, if it's a custom node - module_name = cls.__module__.split(".")[0] - if module_name.endswith(CUSTOM_NODE_PACK_SUFFIX): - cls.UIConfig.node_pack = module_name.split(CUSTOM_NODE_PACK_SUFFIX)[0] + is_custom_node = cls.__module__.rsplit(".", 1)[0] == "invokeai.app.invocations" + if is_custom_node: + cls.UIConfig.node_pack = cls.__module__.split(".")[0] else: cls.UIConfig.node_pack = None @@ -903,24 +907,6 @@ def invocation_output( return wrapper -class WorkflowField(RootModel): - """ - Pydantic model for workflows with custom root of type dict[str, Any]. - Workflows are stored without a strict schema. - """ - - root: dict[str, Any] = Field(description="The workflow") - - -WorkflowFieldValidator = TypeAdapter(WorkflowField) - - -class WithWorkflow(BaseModel): - workflow: Optional[WorkflowField] = Field( - default=None, description=FieldDescriptions.workflow, json_schema_extra={"field_kind": FieldKind.NodeAttribute} - ) - - class MetadataField(RootModel): """ Pydantic model for metadata with custom root of type dict[str, Any]. @@ -943,3 +929,13 @@ class WithMetadata(BaseModel): orig_required=False, ).model_dump(exclude_none=True), ) + + +class WithWorkflow: + workflow = None + + def __init_subclass__(cls) -> None: + logger.warn( + f"{cls.__module__.split('.')[0]}.{cls.__name__}: WithWorkflow is deprecated. Use `context.workflow` to access the workflow." + ) + super().__init_subclass__() diff --git a/invokeai/app/invocations/controlnet_image_processors.py b/invokeai/app/invocations/controlnet_image_processors.py index d57de57a37..5c112242d9 100644 --- a/invokeai/app/invocations/controlnet_image_processors.py +++ b/invokeai/app/invocations/controlnet_image_processors.py @@ -39,7 +39,6 @@ from .baseinvocation import ( InvocationContext, OutputField, WithMetadata, - WithWorkflow, invocation, invocation_output, ) @@ -129,7 +128,7 @@ class ControlNetInvocation(BaseInvocation): # This invocation exists for other invocations to subclass it - do not register with @invocation! -class ImageProcessorInvocation(BaseInvocation, WithMetadata, WithWorkflow): +class ImageProcessorInvocation(BaseInvocation, WithMetadata): """Base class for invocations that preprocess images for ControlNet""" image: ImageField = InputField(description="The image to process") @@ -153,7 +152,7 @@ class ImageProcessorInvocation(BaseInvocation, WithMetadata, WithWorkflow): node_id=self.id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) """Builds an ImageOutput and its ImageField""" @@ -173,7 +172,7 @@ class ImageProcessorInvocation(BaseInvocation, WithMetadata, WithWorkflow): title="Canny Processor", tags=["controlnet", "canny"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class CannyImageProcessorInvocation(ImageProcessorInvocation): """Canny edge detection for ControlNet""" @@ -196,7 +195,7 @@ class CannyImageProcessorInvocation(ImageProcessorInvocation): title="HED (softedge) Processor", tags=["controlnet", "hed", "softedge"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class HedImageProcessorInvocation(ImageProcessorInvocation): """Applies HED edge detection to image""" @@ -225,7 +224,7 @@ class HedImageProcessorInvocation(ImageProcessorInvocation): title="Lineart Processor", tags=["controlnet", "lineart"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class LineartImageProcessorInvocation(ImageProcessorInvocation): """Applies line art processing to image""" @@ -247,7 +246,7 @@ class LineartImageProcessorInvocation(ImageProcessorInvocation): title="Lineart Anime Processor", tags=["controlnet", "lineart", "anime"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class LineartAnimeImageProcessorInvocation(ImageProcessorInvocation): """Applies line art anime processing to image""" @@ -270,7 +269,7 @@ class LineartAnimeImageProcessorInvocation(ImageProcessorInvocation): title="Openpose Processor", tags=["controlnet", "openpose", "pose"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class OpenposeImageProcessorInvocation(ImageProcessorInvocation): """Applies Openpose processing to image""" @@ -295,7 +294,7 @@ class OpenposeImageProcessorInvocation(ImageProcessorInvocation): title="Midas Depth Processor", tags=["controlnet", "midas"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class MidasDepthImageProcessorInvocation(ImageProcessorInvocation): """Applies Midas depth processing to image""" @@ -322,7 +321,7 @@ class MidasDepthImageProcessorInvocation(ImageProcessorInvocation): title="Normal BAE Processor", tags=["controlnet"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class NormalbaeImageProcessorInvocation(ImageProcessorInvocation): """Applies NormalBae processing to image""" @@ -339,7 +338,7 @@ class NormalbaeImageProcessorInvocation(ImageProcessorInvocation): @invocation( - "mlsd_image_processor", title="MLSD Processor", tags=["controlnet", "mlsd"], category="controlnet", version="1.1.0" + "mlsd_image_processor", title="MLSD Processor", tags=["controlnet", "mlsd"], category="controlnet", version="1.2.0" ) class MlsdImageProcessorInvocation(ImageProcessorInvocation): """Applies MLSD processing to image""" @@ -362,7 +361,7 @@ class MlsdImageProcessorInvocation(ImageProcessorInvocation): @invocation( - "pidi_image_processor", title="PIDI Processor", tags=["controlnet", "pidi"], category="controlnet", version="1.1.0" + "pidi_image_processor", title="PIDI Processor", tags=["controlnet", "pidi"], category="controlnet", version="1.2.0" ) class PidiImageProcessorInvocation(ImageProcessorInvocation): """Applies PIDI processing to image""" @@ -389,7 +388,7 @@ class PidiImageProcessorInvocation(ImageProcessorInvocation): title="Content Shuffle Processor", tags=["controlnet", "contentshuffle"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class ContentShuffleImageProcessorInvocation(ImageProcessorInvocation): """Applies content shuffle processing to image""" @@ -419,7 +418,7 @@ class ContentShuffleImageProcessorInvocation(ImageProcessorInvocation): title="Zoe (Depth) Processor", tags=["controlnet", "zoe", "depth"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class ZoeDepthImageProcessorInvocation(ImageProcessorInvocation): """Applies Zoe depth processing to image""" @@ -435,7 +434,7 @@ class ZoeDepthImageProcessorInvocation(ImageProcessorInvocation): title="Mediapipe Face Processor", tags=["controlnet", "mediapipe", "face"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class MediapipeFaceProcessorInvocation(ImageProcessorInvocation): """Applies mediapipe face processing to image""" @@ -458,7 +457,7 @@ class MediapipeFaceProcessorInvocation(ImageProcessorInvocation): title="Leres (Depth) Processor", tags=["controlnet", "leres", "depth"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class LeresImageProcessorInvocation(ImageProcessorInvocation): """Applies leres processing to image""" @@ -487,7 +486,7 @@ class LeresImageProcessorInvocation(ImageProcessorInvocation): title="Tile Resample Processor", tags=["controlnet", "tile"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class TileResamplerProcessorInvocation(ImageProcessorInvocation): """Tile resampler processor""" @@ -527,7 +526,7 @@ class TileResamplerProcessorInvocation(ImageProcessorInvocation): title="Segment Anything Processor", tags=["controlnet", "segmentanything"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class SegmentAnythingProcessorInvocation(ImageProcessorInvocation): """Applies segment anything processing to image""" @@ -569,7 +568,7 @@ class SamDetectorReproducibleColors(SamDetector): title="Color Map Processor", tags=["controlnet"], category="controlnet", - version="1.1.0", + version="1.2.0", ) class ColorMapImageProcessorInvocation(ImageProcessorInvocation): """Generates a color map from the provided image""" diff --git a/invokeai/app/invocations/custom_nodes/init.py b/invokeai/app/invocations/custom_nodes/init.py index e26bdaf568..e0c174013f 100644 --- a/invokeai/app/invocations/custom_nodes/init.py +++ b/invokeai/app/invocations/custom_nodes/init.py @@ -6,7 +6,6 @@ import sys from importlib.util import module_from_spec, spec_from_file_location from pathlib import Path -from invokeai.app.invocations.baseinvocation import CUSTOM_NODE_PACK_SUFFIX from invokeai.backend.util.logging import InvokeAILogger logger = InvokeAILogger.get_logger() @@ -34,7 +33,7 @@ for d in Path(__file__).parent.iterdir(): continue # load the module, appending adding a suffix to identify it as a custom node pack - spec = spec_from_file_location(f"{module_name}{CUSTOM_NODE_PACK_SUFFIX}", init.absolute()) + spec = spec_from_file_location(module_name, init.absolute()) if spec is None or spec.loader is None: logger.warn(f"Could not load {init}") diff --git a/invokeai/app/invocations/cv.py b/invokeai/app/invocations/cv.py index b9764285f5..cb6828d21a 100644 --- a/invokeai/app/invocations/cv.py +++ b/invokeai/app/invocations/cv.py @@ -8,11 +8,11 @@ from PIL import Image, ImageOps from invokeai.app.invocations.primitives import ImageField, ImageOutput from invokeai.app.services.image_records.image_records_common import ImageCategory, ResourceOrigin -from .baseinvocation import BaseInvocation, InputField, InvocationContext, WithMetadata, WithWorkflow, invocation +from .baseinvocation import BaseInvocation, InputField, InvocationContext, WithMetadata, invocation -@invocation("cv_inpaint", title="OpenCV Inpaint", tags=["opencv", "inpaint"], category="inpaint", version="1.1.0") -class CvInpaintInvocation(BaseInvocation, WithMetadata, WithWorkflow): +@invocation("cv_inpaint", title="OpenCV Inpaint", tags=["opencv", "inpaint"], category="inpaint", version="1.2.0") +class CvInpaintInvocation(BaseInvocation, WithMetadata): """Simple inpaint using opencv.""" image: ImageField = InputField(description="The image to inpaint") @@ -41,7 +41,7 @@ class CvInpaintInvocation(BaseInvocation, WithMetadata, WithWorkflow): node_id=self.id, session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( diff --git a/invokeai/app/invocations/facetools.py b/invokeai/app/invocations/facetools.py index ef3d0aa9a1..e0c89b4de5 100644 --- a/invokeai/app/invocations/facetools.py +++ b/invokeai/app/invocations/facetools.py @@ -17,7 +17,6 @@ from invokeai.app.invocations.baseinvocation import ( InvocationContext, OutputField, WithMetadata, - WithWorkflow, invocation, invocation_output, ) @@ -438,8 +437,8 @@ def get_faces_list( return all_faces -@invocation("face_off", title="FaceOff", tags=["image", "faceoff", "face", "mask"], category="image", version="1.1.0") -class FaceOffInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation("face_off", title="FaceOff", tags=["image", "faceoff", "face", "mask"], category="image", version="1.2.0") +class FaceOffInvocation(BaseInvocation, WithMetadata): """Bound, extract, and mask a face from an image using MediaPipe detection""" image: ImageField = InputField(description="Image for face detection") @@ -508,7 +507,7 @@ class FaceOffInvocation(BaseInvocation, WithWorkflow, WithMetadata): node_id=self.id, session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, - workflow=self.workflow, + workflow=context.workflow, ) mask_dto = context.services.images.create( @@ -532,8 +531,8 @@ class FaceOffInvocation(BaseInvocation, WithWorkflow, WithMetadata): return output -@invocation("face_mask_detection", title="FaceMask", tags=["image", "face", "mask"], category="image", version="1.1.0") -class FaceMaskInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation("face_mask_detection", title="FaceMask", tags=["image", "face", "mask"], category="image", version="1.2.0") +class FaceMaskInvocation(BaseInvocation, WithMetadata): """Face mask creation using mediapipe face detection""" image: ImageField = InputField(description="Image to face detect") @@ -627,7 +626,7 @@ class FaceMaskInvocation(BaseInvocation, WithWorkflow, WithMetadata): node_id=self.id, session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, - workflow=self.workflow, + workflow=context.workflow, ) mask_dto = context.services.images.create( @@ -650,9 +649,9 @@ class FaceMaskInvocation(BaseInvocation, WithWorkflow, WithMetadata): @invocation( - "face_identifier", title="FaceIdentifier", tags=["image", "face", "identifier"], category="image", version="1.1.0" + "face_identifier", title="FaceIdentifier", tags=["image", "face", "identifier"], category="image", version="1.2.0" ) -class FaceIdentifierInvocation(BaseInvocation, WithWorkflow, WithMetadata): +class FaceIdentifierInvocation(BaseInvocation, WithMetadata): """Outputs an image with detected face IDs printed on each face. For use with other FaceTools.""" image: ImageField = InputField(description="Image to face detect") @@ -716,7 +715,7 @@ class FaceIdentifierInvocation(BaseInvocation, WithWorkflow, WithMetadata): node_id=self.id, session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index ad3b3aec71..9f37aca13f 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -13,7 +13,7 @@ from invokeai.app.shared.fields import FieldDescriptions from invokeai.backend.image_util.invisible_watermark import InvisibleWatermark from invokeai.backend.image_util.safety_checker import SafetyChecker -from .baseinvocation import BaseInvocation, Input, InputField, InvocationContext, WithMetadata, WithWorkflow, invocation +from .baseinvocation import BaseInvocation, Input, InputField, InvocationContext, WithMetadata, invocation @invocation("show_image", title="Show Image", tags=["image"], category="image", version="1.0.0") @@ -36,8 +36,14 @@ class ShowImageInvocation(BaseInvocation): ) -@invocation("blank_image", title="Blank Image", tags=["image"], category="image", version="1.1.0") -class BlankImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): +@invocation( + "blank_image", + title="Blank Image", + tags=["image"], + category="image", + version="1.2.0", +) +class BlankImageInvocation(BaseInvocation, WithMetadata): """Creates a blank image and forwards it to the pipeline""" width: int = InputField(default=512, description="The width of the image") @@ -56,7 +62,7 @@ class BlankImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -66,8 +72,14 @@ class BlankImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): ) -@invocation("img_crop", title="Crop Image", tags=["image", "crop"], category="image", version="1.1.0") -class ImageCropInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_crop", + title="Crop Image", + tags=["image", "crop"], + category="image", + version="1.2.0", +) +class ImageCropInvocation(BaseInvocation, WithMetadata): """Crops an image to a specified box. The box can be outside of the image.""" image: ImageField = InputField(description="The image to crop") @@ -90,7 +102,7 @@ class ImageCropInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -101,11 +113,11 @@ class ImageCropInvocation(BaseInvocation, WithWorkflow, WithMetadata): @invocation( - invocation_type="img_pad_crop", - title="Center Pad or Crop Image", + "img_paste", + title="Paste Image", + tags=["image", "paste"], category="image", - tags=["image", "pad", "crop"], - version="1.0.0", + version="1.2.0", ) class CenterPadCropInvocation(BaseInvocation): """Pad or crop an image's sides from the center by specified pixels. Positive values are outside of the image.""" @@ -155,8 +167,14 @@ class CenterPadCropInvocation(BaseInvocation): ) -@invocation("img_paste", title="Paste Image", tags=["image", "paste"], category="image", version="1.1.0") -class ImagePasteInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + invocation_type="img_pad_crop", + title="Center Pad or Crop Image", + category="image", + tags=["image", "pad", "crop"], + version="1.0.0", +) +class ImagePasteInvocation(BaseInvocation, WithMetadata): """Pastes an image into another image.""" base_image: ImageField = InputField(description="The base image") @@ -199,7 +217,7 @@ class ImagePasteInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -209,8 +227,14 @@ class ImagePasteInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("tomask", title="Mask from Alpha", tags=["image", "mask"], category="image", version="1.1.0") -class MaskFromAlphaInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "tomask", + title="Mask from Alpha", + tags=["image", "mask"], + category="image", + version="1.2.0", +) +class MaskFromAlphaInvocation(BaseInvocation, WithMetadata): """Extracts the alpha channel of an image as a mask.""" image: ImageField = InputField(description="The image to create the mask from") @@ -231,7 +255,7 @@ class MaskFromAlphaInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -241,8 +265,14 @@ class MaskFromAlphaInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("img_mul", title="Multiply Images", tags=["image", "multiply"], category="image", version="1.1.0") -class ImageMultiplyInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_mul", + title="Multiply Images", + tags=["image", "multiply"], + category="image", + version="1.2.0", +) +class ImageMultiplyInvocation(BaseInvocation, WithMetadata): """Multiplies two images together using `PIL.ImageChops.multiply()`.""" image1: ImageField = InputField(description="The first image to multiply") @@ -262,7 +292,7 @@ class ImageMultiplyInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -275,8 +305,14 @@ class ImageMultiplyInvocation(BaseInvocation, WithWorkflow, WithMetadata): IMAGE_CHANNELS = Literal["A", "R", "G", "B"] -@invocation("img_chan", title="Extract Image Channel", tags=["image", "channel"], category="image", version="1.1.0") -class ImageChannelInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_chan", + title="Extract Image Channel", + tags=["image", "channel"], + category="image", + version="1.2.0", +) +class ImageChannelInvocation(BaseInvocation, WithMetadata): """Gets a channel from an image.""" image: ImageField = InputField(description="The image to get the channel from") @@ -295,7 +331,7 @@ class ImageChannelInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -308,8 +344,14 @@ class ImageChannelInvocation(BaseInvocation, WithWorkflow, WithMetadata): IMAGE_MODES = Literal["L", "RGB", "RGBA", "CMYK", "YCbCr", "LAB", "HSV", "I", "F"] -@invocation("img_conv", title="Convert Image Mode", tags=["image", "convert"], category="image", version="1.1.0") -class ImageConvertInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_conv", + title="Convert Image Mode", + tags=["image", "convert"], + category="image", + version="1.2.0", +) +class ImageConvertInvocation(BaseInvocation, WithMetadata): """Converts an image to a different mode.""" image: ImageField = InputField(description="The image to convert") @@ -328,7 +370,7 @@ class ImageConvertInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -338,8 +380,14 @@ class ImageConvertInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("img_blur", title="Blur Image", tags=["image", "blur"], category="image", version="1.1.0") -class ImageBlurInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_blur", + title="Blur Image", + tags=["image", "blur"], + category="image", + version="1.2.0", +) +class ImageBlurInvocation(BaseInvocation, WithMetadata): """Blurs an image""" image: ImageField = InputField(description="The image to blur") @@ -363,7 +411,7 @@ class ImageBlurInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -393,8 +441,14 @@ PIL_RESAMPLING_MAP = { } -@invocation("img_resize", title="Resize Image", tags=["image", "resize"], category="image", version="1.1.0") -class ImageResizeInvocation(BaseInvocation, WithMetadata, WithWorkflow): +@invocation( + "img_resize", + title="Resize Image", + tags=["image", "resize"], + category="image", + version="1.2.0", +) +class ImageResizeInvocation(BaseInvocation, WithMetadata): """Resizes an image to specific dimensions""" image: ImageField = InputField(description="The image to resize") @@ -420,7 +474,7 @@ class ImageResizeInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -430,8 +484,14 @@ class ImageResizeInvocation(BaseInvocation, WithMetadata, WithWorkflow): ) -@invocation("img_scale", title="Scale Image", tags=["image", "scale"], category="image", version="1.1.0") -class ImageScaleInvocation(BaseInvocation, WithMetadata, WithWorkflow): +@invocation( + "img_scale", + title="Scale Image", + tags=["image", "scale"], + category="image", + version="1.2.0", +) +class ImageScaleInvocation(BaseInvocation, WithMetadata): """Scales an image by a factor""" image: ImageField = InputField(description="The image to scale") @@ -462,7 +522,7 @@ class ImageScaleInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -472,8 +532,14 @@ class ImageScaleInvocation(BaseInvocation, WithMetadata, WithWorkflow): ) -@invocation("img_lerp", title="Lerp Image", tags=["image", "lerp"], category="image", version="1.1.0") -class ImageLerpInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_lerp", + title="Lerp Image", + tags=["image", "lerp"], + category="image", + version="1.2.0", +) +class ImageLerpInvocation(BaseInvocation, WithMetadata): """Linear interpolation of all pixels of an image""" image: ImageField = InputField(description="The image to lerp") @@ -496,7 +562,7 @@ class ImageLerpInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -506,8 +572,14 @@ class ImageLerpInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("img_ilerp", title="Inverse Lerp Image", tags=["image", "ilerp"], category="image", version="1.1.0") -class ImageInverseLerpInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_ilerp", + title="Inverse Lerp Image", + tags=["image", "ilerp"], + category="image", + version="1.2.0", +) +class ImageInverseLerpInvocation(BaseInvocation, WithMetadata): """Inverse linear interpolation of all pixels of an image""" image: ImageField = InputField(description="The image to lerp") @@ -530,7 +602,7 @@ class ImageInverseLerpInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -540,8 +612,14 @@ class ImageInverseLerpInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("img_nsfw", title="Blur NSFW Image", tags=["image", "nsfw"], category="image", version="1.1.0") -class ImageNSFWBlurInvocation(BaseInvocation, WithMetadata, WithWorkflow): +@invocation( + "img_nsfw", + title="Blur NSFW Image", + tags=["image", "nsfw"], + category="image", + version="1.2.0", +) +class ImageNSFWBlurInvocation(BaseInvocation, WithMetadata): """Add blur to NSFW-flagged images""" image: ImageField = InputField(description="The image to check") @@ -566,7 +644,7 @@ class ImageNSFWBlurInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -587,9 +665,9 @@ class ImageNSFWBlurInvocation(BaseInvocation, WithMetadata, WithWorkflow): title="Add Invisible Watermark", tags=["image", "watermark"], category="image", - version="1.1.0", + version="1.2.0", ) -class ImageWatermarkInvocation(BaseInvocation, WithMetadata, WithWorkflow): +class ImageWatermarkInvocation(BaseInvocation, WithMetadata): """Add an invisible watermark to an image""" image: ImageField = InputField(description="The image to check") @@ -606,7 +684,7 @@ class ImageWatermarkInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -616,8 +694,14 @@ class ImageWatermarkInvocation(BaseInvocation, WithMetadata, WithWorkflow): ) -@invocation("mask_edge", title="Mask Edge", tags=["image", "mask", "inpaint"], category="image", version="1.1.0") -class MaskEdgeInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "mask_edge", + title="Mask Edge", + tags=["image", "mask", "inpaint"], + category="image", + version="1.2.0", +) +class MaskEdgeInvocation(BaseInvocation, WithMetadata): """Applies an edge mask to an image""" image: ImageField = InputField(description="The image to apply the mask to") @@ -652,7 +736,7 @@ class MaskEdgeInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -667,9 +751,9 @@ class MaskEdgeInvocation(BaseInvocation, WithWorkflow, WithMetadata): title="Combine Masks", tags=["image", "mask", "multiply"], category="image", - version="1.1.0", + version="1.2.0", ) -class MaskCombineInvocation(BaseInvocation, WithWorkflow, WithMetadata): +class MaskCombineInvocation(BaseInvocation, WithMetadata): """Combine two masks together by multiplying them using `PIL.ImageChops.multiply()`.""" mask1: ImageField = InputField(description="The first mask to combine") @@ -689,7 +773,7 @@ class MaskCombineInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -699,8 +783,14 @@ class MaskCombineInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("color_correct", title="Color Correct", tags=["image", "color"], category="image", version="1.1.0") -class ColorCorrectInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "color_correct", + title="Color Correct", + tags=["image", "color"], + category="image", + version="1.2.0", +) +class ColorCorrectInvocation(BaseInvocation, WithMetadata): """ Shifts the colors of a target image to match the reference image, optionally using a mask to only color-correct certain regions of the target image. @@ -800,7 +890,7 @@ class ColorCorrectInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -810,8 +900,14 @@ class ColorCorrectInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("img_hue_adjust", title="Adjust Image Hue", tags=["image", "hue"], category="image", version="1.1.0") -class ImageHueAdjustmentInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation( + "img_hue_adjust", + title="Adjust Image Hue", + tags=["image", "hue"], + category="image", + version="1.2.0", +) +class ImageHueAdjustmentInvocation(BaseInvocation, WithMetadata): """Adjusts the Hue of an image.""" image: ImageField = InputField(description="The image to adjust") @@ -840,7 +936,7 @@ class ImageHueAdjustmentInvocation(BaseInvocation, WithWorkflow, WithMetadata): is_intermediate=self.is_intermediate, session_id=context.graph_execution_state_id, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -913,9 +1009,9 @@ CHANNEL_FORMATS = { "value", ], category="image", - version="1.1.0", + version="1.2.0", ) -class ImageChannelOffsetInvocation(BaseInvocation, WithWorkflow, WithMetadata): +class ImageChannelOffsetInvocation(BaseInvocation, WithMetadata): """Add or subtract a value from a specific color channel of an image.""" image: ImageField = InputField(description="The image to adjust") @@ -950,7 +1046,7 @@ class ImageChannelOffsetInvocation(BaseInvocation, WithWorkflow, WithMetadata): is_intermediate=self.is_intermediate, session_id=context.graph_execution_state_id, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -984,9 +1080,9 @@ class ImageChannelOffsetInvocation(BaseInvocation, WithWorkflow, WithMetadata): "value", ], category="image", - version="1.1.0", + version="1.2.0", ) -class ImageChannelMultiplyInvocation(BaseInvocation, WithWorkflow, WithMetadata): +class ImageChannelMultiplyInvocation(BaseInvocation, WithMetadata): """Scale a specific color channel of an image.""" image: ImageField = InputField(description="The image to adjust") @@ -1025,7 +1121,7 @@ class ImageChannelMultiplyInvocation(BaseInvocation, WithWorkflow, WithMetadata) node_id=self.id, is_intermediate=self.is_intermediate, session_id=context.graph_execution_state_id, - workflow=self.workflow, + workflow=context.workflow, metadata=self.metadata, ) @@ -1043,10 +1139,10 @@ class ImageChannelMultiplyInvocation(BaseInvocation, WithWorkflow, WithMetadata) title="Save Image", tags=["primitives", "image"], category="primitives", - version="1.1.0", + version="1.2.0", use_cache=False, ) -class SaveImageInvocation(BaseInvocation, WithWorkflow, WithMetadata): +class SaveImageInvocation(BaseInvocation, WithMetadata): """Saves an image. Unlike an image primitive, this invocation stores a copy of the image.""" image: ImageField = InputField(description=FieldDescriptions.image) @@ -1064,7 +1160,7 @@ class SaveImageInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -1082,7 +1178,7 @@ class SaveImageInvocation(BaseInvocation, WithWorkflow, WithMetadata): version="1.0.1", use_cache=False, ) -class LinearUIOutputInvocation(BaseInvocation, WithWorkflow, WithMetadata): +class LinearUIOutputInvocation(BaseInvocation, WithMetadata): """Handles Linear UI Image Outputting tasks.""" image: ImageField = InputField(description=FieldDescriptions.image) diff --git a/invokeai/app/invocations/infill.py b/invokeai/app/invocations/infill.py index 0822a4ce2d..c3d00bb133 100644 --- a/invokeai/app/invocations/infill.py +++ b/invokeai/app/invocations/infill.py @@ -13,7 +13,7 @@ from invokeai.backend.image_util.cv2_inpaint import cv2_inpaint from invokeai.backend.image_util.lama import LaMA from invokeai.backend.image_util.patchmatch import PatchMatch -from .baseinvocation import BaseInvocation, InputField, InvocationContext, WithMetadata, WithWorkflow, invocation +from .baseinvocation import BaseInvocation, InputField, InvocationContext, WithMetadata, invocation from .image import PIL_RESAMPLING_MAP, PIL_RESAMPLING_MODES @@ -118,8 +118,8 @@ def tile_fill_missing(im: Image.Image, tile_size: int = 16, seed: Optional[int] return si -@invocation("infill_rgba", title="Solid Color Infill", tags=["image", "inpaint"], category="inpaint", version="1.1.0") -class InfillColorInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation("infill_rgba", title="Solid Color Infill", tags=["image", "inpaint"], category="inpaint", version="1.2.0") +class InfillColorInvocation(BaseInvocation, WithMetadata): """Infills transparent areas of an image with a solid color""" image: ImageField = InputField(description="The image to infill") @@ -144,7 +144,7 @@ class InfillColorInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -154,8 +154,8 @@ class InfillColorInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("infill_tile", title="Tile Infill", tags=["image", "inpaint"], category="inpaint", version="1.1.1") -class InfillTileInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation("infill_tile", title="Tile Infill", tags=["image", "inpaint"], category="inpaint", version="1.2.1") +class InfillTileInvocation(BaseInvocation, WithMetadata): """Infills transparent areas of an image with tiles of the image""" image: ImageField = InputField(description="The image to infill") @@ -181,7 +181,7 @@ class InfillTileInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -192,9 +192,9 @@ class InfillTileInvocation(BaseInvocation, WithWorkflow, WithMetadata): @invocation( - "infill_patchmatch", title="PatchMatch Infill", tags=["image", "inpaint"], category="inpaint", version="1.1.0" + "infill_patchmatch", title="PatchMatch Infill", tags=["image", "inpaint"], category="inpaint", version="1.2.0" ) -class InfillPatchMatchInvocation(BaseInvocation, WithWorkflow, WithMetadata): +class InfillPatchMatchInvocation(BaseInvocation, WithMetadata): """Infills transparent areas of an image using the PatchMatch algorithm""" image: ImageField = InputField(description="The image to infill") @@ -235,7 +235,7 @@ class InfillPatchMatchInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -245,8 +245,8 @@ class InfillPatchMatchInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("infill_lama", title="LaMa Infill", tags=["image", "inpaint"], category="inpaint", version="1.1.0") -class LaMaInfillInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation("infill_lama", title="LaMa Infill", tags=["image", "inpaint"], category="inpaint", version="1.2.0") +class LaMaInfillInvocation(BaseInvocation, WithMetadata): """Infills transparent areas of an image using the LaMa model""" image: ImageField = InputField(description="The image to infill") @@ -264,7 +264,7 @@ class LaMaInfillInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( @@ -274,8 +274,8 @@ class LaMaInfillInvocation(BaseInvocation, WithWorkflow, WithMetadata): ) -@invocation("infill_cv2", title="CV2 Infill", tags=["image", "inpaint"], category="inpaint", version="1.1.0") -class CV2InfillInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation("infill_cv2", title="CV2 Infill", tags=["image", "inpaint"], category="inpaint", version="1.2.0") +class CV2InfillInvocation(BaseInvocation, WithMetadata): """Infills transparent areas of an image using OpenCV Inpainting""" image: ImageField = InputField(description="The image to infill") @@ -293,7 +293,7 @@ class CV2InfillInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index 218e05a986..796ef82dcd 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -64,7 +64,6 @@ from .baseinvocation import ( OutputField, UIType, WithMetadata, - WithWorkflow, invocation, invocation_output, ) @@ -802,9 +801,9 @@ class DenoiseLatentsInvocation(BaseInvocation): title="Latents to Image", tags=["latents", "image", "vae", "l2i"], category="latents", - version="1.1.0", + version="1.2.0", ) -class LatentsToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): +class LatentsToImageInvocation(BaseInvocation, WithMetadata): """Generates an image from latents.""" latents: LatentsField = InputField( @@ -886,7 +885,7 @@ class LatentsToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( diff --git a/invokeai/app/invocations/onnx.py b/invokeai/app/invocations/onnx.py index 37b63fe692..9eca5e083e 100644 --- a/invokeai/app/invocations/onnx.py +++ b/invokeai/app/invocations/onnx.py @@ -31,7 +31,6 @@ from .baseinvocation import ( UIComponent, UIType, WithMetadata, - WithWorkflow, invocation, invocation_output, ) @@ -326,9 +325,9 @@ class ONNXTextToLatentsInvocation(BaseInvocation): title="ONNX Latents to Image", tags=["latents", "image", "vae", "onnx"], category="image", - version="1.1.0", + version="1.2.0", ) -class ONNXLatentsToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): +class ONNXLatentsToImageInvocation(BaseInvocation, WithMetadata): """Generates an image from latents.""" latents: LatentsField = InputField( @@ -378,7 +377,7 @@ class ONNXLatentsToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index 3055c1baae..e59a0530ee 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -9,7 +9,6 @@ from invokeai.app.invocations.baseinvocation import ( InvocationContext, OutputField, WithMetadata, - WithWorkflow, invocation, invocation_output, ) @@ -122,8 +121,8 @@ class PairTileImageInvocation(BaseInvocation): ) -@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.0.0") -class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): +@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.1.0") +class MergeTilesToImageInvocation(BaseInvocation, WithMetadata): """Merge multiple tile images into a single image.""" # Inputs @@ -172,7 +171,7 @@ class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithWorkflow): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( image=ImageField(image_name=image_dto.image_name), diff --git a/invokeai/app/invocations/upscale.py b/invokeai/app/invocations/upscale.py index 0f699b2d15..fa86dead55 100644 --- a/invokeai/app/invocations/upscale.py +++ b/invokeai/app/invocations/upscale.py @@ -14,7 +14,7 @@ from invokeai.app.services.image_records.image_records_common import ImageCatego from invokeai.backend.image_util.realesrgan.realesrgan import RealESRGAN from invokeai.backend.util.devices import choose_torch_device -from .baseinvocation import BaseInvocation, InputField, InvocationContext, WithMetadata, WithWorkflow, invocation +from .baseinvocation import BaseInvocation, InputField, InvocationContext, WithMetadata, invocation # TODO: Populate this from disk? # TODO: Use model manager to load? @@ -29,8 +29,8 @@ if choose_torch_device() == torch.device("mps"): from torch import mps -@invocation("esrgan", title="Upscale (RealESRGAN)", tags=["esrgan", "upscale"], category="esrgan", version="1.2.0") -class ESRGANInvocation(BaseInvocation, WithWorkflow, WithMetadata): +@invocation("esrgan", title="Upscale (RealESRGAN)", tags=["esrgan", "upscale"], category="esrgan", version="1.3.0") +class ESRGANInvocation(BaseInvocation, WithMetadata): """Upscales an image using RealESRGAN.""" image: ImageField = InputField(description="The input image") @@ -118,7 +118,7 @@ class ESRGANInvocation(BaseInvocation, WithWorkflow, WithMetadata): session_id=context.graph_execution_state_id, is_intermediate=self.is_intermediate, metadata=self.metadata, - workflow=self.workflow, + workflow=context.workflow, ) return ImageOutput( diff --git a/invokeai/app/services/board_image_records/board_image_records_sqlite.py b/invokeai/app/services/board_image_records/board_image_records_sqlite.py index 02bafd00ec..54d9a0af04 100644 --- a/invokeai/app/services/board_image_records/board_image_records_sqlite.py +++ b/invokeai/app/services/board_image_records/board_image_records_sqlite.py @@ -4,7 +4,7 @@ from typing import Optional, cast from invokeai.app.services.image_records.image_records_common import ImageRecord, deserialize_image_record from invokeai.app.services.shared.pagination import OffsetPaginatedResults -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from .board_image_records_base import BoardImageRecordStorageBase diff --git a/invokeai/app/services/board_records/board_records_sqlite.py b/invokeai/app/services/board_records/board_records_sqlite.py index ef507def2a..165ce8df0c 100644 --- a/invokeai/app/services/board_records/board_records_sqlite.py +++ b/invokeai/app/services/board_records/board_records_sqlite.py @@ -3,7 +3,7 @@ import threading from typing import Union, cast from invokeai.app.services.shared.pagination import OffsetPaginatedResults -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.util.misc import uuid_string from .board_records_base import BoardRecordStorageBase diff --git a/invokeai/app/services/image_files/image_files_base.py b/invokeai/app/services/image_files/image_files_base.py index 91e18f30fc..27dd67531f 100644 --- a/invokeai/app/services/image_files/image_files_base.py +++ b/invokeai/app/services/image_files/image_files_base.py @@ -4,7 +4,8 @@ from typing import Optional from PIL.Image import Image as PILImageType -from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField +from invokeai.app.invocations.baseinvocation import MetadataField +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID class ImageFileStorageBase(ABC): @@ -33,7 +34,7 @@ class ImageFileStorageBase(ABC): image: PILImageType, image_name: str, metadata: Optional[MetadataField] = None, - workflow: Optional[WorkflowField] = None, + workflow: Optional[WorkflowWithoutID] = None, thumbnail_size: int = 256, ) -> None: """Saves an image and a 256x256 WEBP thumbnail. Returns a tuple of the image name, thumbnail name, and created timestamp.""" @@ -43,3 +44,8 @@ class ImageFileStorageBase(ABC): def delete(self, image_name: str) -> None: """Deletes an image and its thumbnail (if one exists).""" pass + + @abstractmethod + def get_workflow(self, image_name: str) -> Optional[WorkflowWithoutID]: + """Gets the workflow of an image.""" + pass diff --git a/invokeai/app/services/image_files/image_files_disk.py b/invokeai/app/services/image_files/image_files_disk.py index cffcb702c9..0844821672 100644 --- a/invokeai/app/services/image_files/image_files_disk.py +++ b/invokeai/app/services/image_files/image_files_disk.py @@ -7,8 +7,9 @@ from PIL import Image, PngImagePlugin from PIL.Image import Image as PILImageType from send2trash import send2trash -from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField +from invokeai.app.invocations.baseinvocation import MetadataField from invokeai.app.services.invoker import Invoker +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID from invokeai.app.util.thumbnails import get_thumbnail_name, make_thumbnail from .image_files_base import ImageFileStorageBase @@ -56,7 +57,7 @@ class DiskImageFileStorage(ImageFileStorageBase): image: PILImageType, image_name: str, metadata: Optional[MetadataField] = None, - workflow: Optional[WorkflowField] = None, + workflow: Optional[WorkflowWithoutID] = None, thumbnail_size: int = 256, ) -> None: try: @@ -64,12 +65,19 @@ class DiskImageFileStorage(ImageFileStorageBase): image_path = self.get_path(image_name) pnginfo = PngImagePlugin.PngInfo() + info_dict = {} if metadata is not None: - pnginfo.add_text("invokeai_metadata", metadata.model_dump_json()) + metadata_json = metadata.model_dump_json() + info_dict["invokeai_metadata"] = metadata_json + pnginfo.add_text("invokeai_metadata", metadata_json) if workflow is not None: - pnginfo.add_text("invokeai_workflow", workflow.model_dump_json()) + workflow_json = workflow.model_dump_json() + info_dict["invokeai_workflow"] = workflow_json + pnginfo.add_text("invokeai_workflow", workflow_json) + # When saving the image, the image object's info field is not populated. We need to set it + image.info = info_dict image.save( image_path, "PNG", @@ -121,6 +129,13 @@ class DiskImageFileStorage(ImageFileStorageBase): path = path if isinstance(path, Path) else Path(path) return path.exists() + def get_workflow(self, image_name: str) -> WorkflowWithoutID | None: + image = self.get(image_name) + workflow = image.info.get("invokeai_workflow", None) + if workflow is not None: + return WorkflowWithoutID.model_validate_json(workflow) + return None + def __validate_storage_folders(self) -> None: """Checks if the required output folders exist and create them if they don't""" folders: list[Path] = [self.__output_folder, self.__thumbnails_folder] diff --git a/invokeai/app/services/image_records/image_records_base.py b/invokeai/app/services/image_records/image_records_base.py index 655e4b4fb8..727f4977fb 100644 --- a/invokeai/app/services/image_records/image_records_base.py +++ b/invokeai/app/services/image_records/image_records_base.py @@ -75,6 +75,7 @@ class ImageRecordStorageBase(ABC): image_category: ImageCategory, width: int, height: int, + has_workflow: bool, is_intermediate: Optional[bool] = False, starred: Optional[bool] = False, session_id: Optional[str] = None, diff --git a/invokeai/app/services/image_records/image_records_common.py b/invokeai/app/services/image_records/image_records_common.py index 61b97c6032..af681e90e1 100644 --- a/invokeai/app/services/image_records/image_records_common.py +++ b/invokeai/app/services/image_records/image_records_common.py @@ -100,6 +100,7 @@ IMAGE_DTO_COLS = ", ".join( "height", "session_id", "node_id", + "has_workflow", "is_intermediate", "created_at", "updated_at", @@ -145,6 +146,7 @@ class ImageRecord(BaseModelExcludeNull): """The node ID that generated this image, if it is a generated image.""" starred: bool = Field(description="Whether this image is starred.") """Whether this image is starred.""" + has_workflow: bool = Field(description="Whether this image has a workflow.") class ImageRecordChanges(BaseModelExcludeNull, extra="allow"): @@ -188,6 +190,7 @@ def deserialize_image_record(image_dict: dict) -> ImageRecord: deleted_at = image_dict.get("deleted_at", get_iso_timestamp()) is_intermediate = image_dict.get("is_intermediate", False) starred = image_dict.get("starred", False) + has_workflow = image_dict.get("has_workflow", False) return ImageRecord( image_name=image_name, @@ -202,4 +205,5 @@ def deserialize_image_record(image_dict: dict) -> ImageRecord: deleted_at=deleted_at, is_intermediate=is_intermediate, starred=starred, + has_workflow=has_workflow, ) diff --git a/invokeai/app/services/image_records/image_records_sqlite.py b/invokeai/app/services/image_records/image_records_sqlite.py index e0dabf1657..b14c322f50 100644 --- a/invokeai/app/services/image_records/image_records_sqlite.py +++ b/invokeai/app/services/image_records/image_records_sqlite.py @@ -5,7 +5,7 @@ from typing import Optional, Union, cast from invokeai.app.invocations.baseinvocation import MetadataField, MetadataFieldValidator from invokeai.app.services.shared.pagination import OffsetPaginatedResults -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from .image_records_base import ImageRecordStorageBase from .image_records_common import ( @@ -117,6 +117,16 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): """ ) + self._cursor.execute("PRAGMA table_info(images)") + columns = [column[1] for column in self._cursor.fetchall()] + if "has_workflow" not in columns: + self._cursor.execute( + """--sql + ALTER TABLE images + ADD COLUMN has_workflow BOOLEAN DEFAULT FALSE; + """ + ) + def get(self, image_name: str) -> ImageRecord: try: self._lock.acquire() @@ -408,6 +418,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): image_category: ImageCategory, width: int, height: int, + has_workflow: bool, is_intermediate: Optional[bool] = False, starred: Optional[bool] = False, session_id: Optional[str] = None, @@ -429,9 +440,10 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): session_id, metadata, is_intermediate, - starred + starred, + has_workflow ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?); + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); """, ( image_name, @@ -444,6 +456,7 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): metadata_json, is_intermediate, starred, + has_workflow, ), ) self._conn.commit() diff --git a/invokeai/app/services/images/images_base.py b/invokeai/app/services/images/images_base.py index b3990d08f5..df71dadb5b 100644 --- a/invokeai/app/services/images/images_base.py +++ b/invokeai/app/services/images/images_base.py @@ -3,7 +3,7 @@ from typing import Callable, Optional from PIL.Image import Image as PILImageType -from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField +from invokeai.app.invocations.baseinvocation import MetadataField from invokeai.app.services.image_records.image_records_common import ( ImageCategory, ImageRecord, @@ -12,6 +12,7 @@ from invokeai.app.services.image_records.image_records_common import ( ) from invokeai.app.services.images.images_common import ImageDTO from invokeai.app.services.shared.pagination import OffsetPaginatedResults +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID class ImageServiceABC(ABC): @@ -51,7 +52,7 @@ class ImageServiceABC(ABC): board_id: Optional[str] = None, is_intermediate: Optional[bool] = False, metadata: Optional[MetadataField] = None, - workflow: Optional[WorkflowField] = None, + workflow: Optional[WorkflowWithoutID] = None, ) -> ImageDTO: """Creates an image, storing the file and its metadata.""" pass @@ -85,6 +86,11 @@ class ImageServiceABC(ABC): """Gets an image's metadata.""" pass + @abstractmethod + def get_workflow(self, image_name: str) -> Optional[WorkflowWithoutID]: + """Gets an image's workflow.""" + pass + @abstractmethod def get_path(self, image_name: str, thumbnail: bool = False) -> str: """Gets an image's path.""" diff --git a/invokeai/app/services/images/images_common.py b/invokeai/app/services/images/images_common.py index 198c26c3a2..0464244b94 100644 --- a/invokeai/app/services/images/images_common.py +++ b/invokeai/app/services/images/images_common.py @@ -24,11 +24,6 @@ class ImageDTO(ImageRecord, ImageUrlsDTO): default=None, description="The id of the board the image belongs to, if one exists." ) """The id of the board the image belongs to, if one exists.""" - workflow_id: Optional[str] = Field( - default=None, - description="The workflow that generated this image.", - ) - """The workflow that generated this image.""" def image_record_to_dto( @@ -36,7 +31,6 @@ def image_record_to_dto( image_url: str, thumbnail_url: str, board_id: Optional[str], - workflow_id: Optional[str], ) -> ImageDTO: """Converts an image record to an image DTO.""" return ImageDTO( @@ -44,5 +38,4 @@ def image_record_to_dto( image_url=image_url, thumbnail_url=thumbnail_url, board_id=board_id, - workflow_id=workflow_id, ) diff --git a/invokeai/app/services/images/images_default.py b/invokeai/app/services/images/images_default.py index 63fa78d6c8..74aeeccca5 100644 --- a/invokeai/app/services/images/images_default.py +++ b/invokeai/app/services/images/images_default.py @@ -2,9 +2,10 @@ from typing import Optional from PIL.Image import Image as PILImageType -from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField +from invokeai.app.invocations.baseinvocation import MetadataField from invokeai.app.services.invoker import Invoker from invokeai.app.services.shared.pagination import OffsetPaginatedResults +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID from ..image_files.image_files_common import ( ImageFileDeleteException, @@ -42,7 +43,7 @@ class ImageService(ImageServiceABC): board_id: Optional[str] = None, is_intermediate: Optional[bool] = False, metadata: Optional[MetadataField] = None, - workflow: Optional[WorkflowField] = None, + workflow: Optional[WorkflowWithoutID] = None, ) -> ImageDTO: if image_origin not in ResourceOrigin: raise InvalidOriginException @@ -55,12 +56,6 @@ class ImageService(ImageServiceABC): (width, height) = image.size try: - if workflow is not None: - created_workflow = self.__invoker.services.workflow_records.create(workflow) - workflow_id = created_workflow.model_dump()["id"] - else: - workflow_id = None - # TODO: Consider using a transaction here to ensure consistency between storage and database self.__invoker.services.image_records.save( # Non-nullable fields @@ -69,6 +64,7 @@ class ImageService(ImageServiceABC): image_category=image_category, width=width, height=height, + has_workflow=workflow is not None, # Meta fields is_intermediate=is_intermediate, # Nullable fields @@ -78,8 +74,6 @@ class ImageService(ImageServiceABC): ) if board_id is not None: self.__invoker.services.board_image_records.add_image_to_board(board_id=board_id, image_name=image_name) - if workflow_id is not None: - self.__invoker.services.workflow_image_records.create(workflow_id=workflow_id, image_name=image_name) self.__invoker.services.image_files.save( image_name=image_name, image=image, metadata=metadata, workflow=workflow ) @@ -143,7 +137,6 @@ class ImageService(ImageServiceABC): image_url=self.__invoker.services.urls.get_image_url(image_name), thumbnail_url=self.__invoker.services.urls.get_image_url(image_name, True), board_id=self.__invoker.services.board_image_records.get_board_for_image(image_name), - workflow_id=self.__invoker.services.workflow_image_records.get_workflow_for_image(image_name), ) return image_dto @@ -164,18 +157,15 @@ class ImageService(ImageServiceABC): self.__invoker.services.logger.error("Problem getting image DTO") raise e - def get_workflow(self, image_name: str) -> Optional[WorkflowField]: + def get_workflow(self, image_name: str) -> Optional[WorkflowWithoutID]: try: - workflow_id = self.__invoker.services.workflow_image_records.get_workflow_for_image(image_name) - if workflow_id is None: - return None - return self.__invoker.services.workflow_records.get(workflow_id) - except ImageRecordNotFoundException: - self.__invoker.services.logger.error("Image record not found") + return self.__invoker.services.image_files.get_workflow(image_name) + except ImageFileNotFoundException: + self.__invoker.services.logger.error("Image file not found") + raise + except Exception: + self.__invoker.services.logger.error("Problem getting image workflow") raise - except Exception as e: - self.__invoker.services.logger.error("Problem getting image DTO") - raise e def get_path(self, image_name: str, thumbnail: bool = False) -> str: try: @@ -223,7 +213,6 @@ class ImageService(ImageServiceABC): image_url=self.__invoker.services.urls.get_image_url(r.image_name), thumbnail_url=self.__invoker.services.urls.get_image_url(r.image_name, True), board_id=self.__invoker.services.board_image_records.get_board_for_image(r.image_name), - workflow_id=self.__invoker.services.workflow_image_records.get_workflow_for_image(r.image_name), ) for r in results.items ] diff --git a/invokeai/app/services/invocation_processor/invocation_processor_default.py b/invokeai/app/services/invocation_processor/invocation_processor_default.py index 6e0d3075ea..50657b0984 100644 --- a/invokeai/app/services/invocation_processor/invocation_processor_default.py +++ b/invokeai/app/services/invocation_processor/invocation_processor_default.py @@ -108,6 +108,7 @@ class DefaultInvocationProcessor(InvocationProcessorABC): queue_item_id=queue_item.session_queue_item_id, queue_id=queue_item.session_queue_id, queue_batch_id=queue_item.session_queue_batch_id, + workflow=queue_item.workflow, ) ) @@ -178,6 +179,7 @@ class DefaultInvocationProcessor(InvocationProcessorABC): session_queue_item_id=queue_item.session_queue_item_id, session_queue_id=queue_item.session_queue_id, graph_execution_state=graph_execution_state, + workflow=queue_item.workflow, invoke_all=True, ) except Exception as e: diff --git a/invokeai/app/services/invocation_queue/invocation_queue_common.py b/invokeai/app/services/invocation_queue/invocation_queue_common.py index 88e72886f7..696f6a981d 100644 --- a/invokeai/app/services/invocation_queue/invocation_queue_common.py +++ b/invokeai/app/services/invocation_queue/invocation_queue_common.py @@ -1,9 +1,12 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) import time +from typing import Optional from pydantic import BaseModel, Field +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID + class InvocationQueueItem(BaseModel): graph_execution_state_id: str = Field(description="The ID of the graph execution state") @@ -15,5 +18,6 @@ class InvocationQueueItem(BaseModel): session_queue_batch_id: str = Field( description="The ID of the session batch from which this invocation queue item came" ) + workflow: Optional[WorkflowWithoutID] = Field(description="The workflow associated with this queue item") invoke_all: bool = Field(default=False) timestamp: float = Field(default_factory=time.time) diff --git a/invokeai/app/services/invocation_services.py b/invokeai/app/services/invocation_services.py index 366e2d0f2b..86299c5a6b 100644 --- a/invokeai/app/services/invocation_services.py +++ b/invokeai/app/services/invocation_services.py @@ -28,7 +28,6 @@ if TYPE_CHECKING: from .session_queue.session_queue_base import SessionQueueBase from .shared.graph import GraphExecutionState, LibraryGraph from .urls.urls_base import UrlServiceBase - from .workflow_image_records.workflow_image_records_base import WorkflowImageRecordsStorageBase from .workflow_records.workflow_records_base import WorkflowRecordsStorageBase @@ -59,7 +58,6 @@ class InvocationServices: invocation_cache: "InvocationCacheBase" names: "NameServiceBase" urls: "UrlServiceBase" - workflow_image_records: "WorkflowImageRecordsStorageBase" workflow_records: "WorkflowRecordsStorageBase" def __init__( @@ -87,7 +85,6 @@ class InvocationServices: invocation_cache: "InvocationCacheBase", names: "NameServiceBase", urls: "UrlServiceBase", - workflow_image_records: "WorkflowImageRecordsStorageBase", workflow_records: "WorkflowRecordsStorageBase", ): self.board_images = board_images @@ -113,5 +110,4 @@ class InvocationServices: self.invocation_cache = invocation_cache self.names = names self.urls = urls - self.workflow_image_records = workflow_image_records self.workflow_records = workflow_records diff --git a/invokeai/app/services/invoker.py b/invokeai/app/services/invoker.py index 134bec2693..a04c6f2059 100644 --- a/invokeai/app/services/invoker.py +++ b/invokeai/app/services/invoker.py @@ -2,6 +2,8 @@ from typing import Optional +from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID + from .invocation_queue.invocation_queue_common import InvocationQueueItem from .invocation_services import InvocationServices from .shared.graph import Graph, GraphExecutionState @@ -22,6 +24,7 @@ class Invoker: session_queue_item_id: int, session_queue_batch_id: str, graph_execution_state: GraphExecutionState, + workflow: Optional[WorkflowWithoutID] = None, invoke_all: bool = False, ) -> Optional[str]: """Determines the next node to invoke and enqueues it, preparing if needed. @@ -43,6 +46,7 @@ class Invoker: session_queue_batch_id=session_queue_batch_id, graph_execution_state_id=graph_execution_state.id, invocation_id=invocation.id, + workflow=workflow, invoke_all=invoke_all, ) ) diff --git a/invokeai/app/services/item_storage/item_storage_sqlite.py b/invokeai/app/services/item_storage/item_storage_sqlite.py index d5a1b7f730..e02d3bdbb2 100644 --- a/invokeai/app/services/item_storage/item_storage_sqlite.py +++ b/invokeai/app/services/item_storage/item_storage_sqlite.py @@ -5,7 +5,7 @@ from typing import Generic, Optional, TypeVar, get_args from pydantic import BaseModel, TypeAdapter from invokeai.app.services.shared.pagination import PaginatedResults -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from .item_storage_base import ItemStorageABC diff --git a/invokeai/app/services/model_records/model_records_sql.py b/invokeai/app/services/model_records/model_records_sql.py index d05e1418d8..69ac0e158f 100644 --- a/invokeai/app/services/model_records/model_records_sql.py +++ b/invokeai/app/services/model_records/model_records_sql.py @@ -52,7 +52,7 @@ from invokeai.backend.model_manager.config import ( ModelType, ) -from ..shared.sqlite import SqliteDatabase +from ..shared.sqlite.sqlite_database import SqliteDatabase from .model_records_base import ( CONFIG_FILE_VERSION, DuplicateModelException, diff --git a/invokeai/app/services/session_processor/session_processor_default.py b/invokeai/app/services/session_processor/session_processor_default.py index 028f91fec3..32e94a305d 100644 --- a/invokeai/app/services/session_processor/session_processor_default.py +++ b/invokeai/app/services/session_processor/session_processor_default.py @@ -114,6 +114,7 @@ class DefaultSessionProcessor(SessionProcessorBase): session_queue_id=queue_item.queue_id, session_queue_item_id=queue_item.item_id, graph_execution_state=queue_item.session, + workflow=queue_item.workflow, invoke_all=True, ) queue_item = None diff --git a/invokeai/app/services/session_queue/session_queue_common.py b/invokeai/app/services/session_queue/session_queue_common.py index e7d7cdda46..94db6999c2 100644 --- a/invokeai/app/services/session_queue/session_queue_common.py +++ b/invokeai/app/services/session_queue/session_queue_common.py @@ -8,6 +8,10 @@ from pydantic_core import to_jsonable_python from invokeai.app.invocations.baseinvocation import BaseInvocation from invokeai.app.services.shared.graph import Graph, GraphExecutionState, NodeNotFoundError +from invokeai.app.services.workflow_records.workflow_records_common import ( + WorkflowWithoutID, + WorkflowWithoutIDValidator, +) from invokeai.app.util.misc import uuid_string # region Errors @@ -66,6 +70,9 @@ class Batch(BaseModel): batch_id: str = Field(default_factory=uuid_string, description="The ID of the batch") data: Optional[BatchDataCollection] = Field(default=None, description="The batch data collection.") graph: Graph = Field(description="The graph to initialize the session with") + workflow: Optional[WorkflowWithoutID] = Field( + default=None, description="The workflow to initialize the session with" + ) runs: int = Field( default=1, ge=1, description="Int stating how many times to iterate through all possible batch indices" ) @@ -164,6 +171,14 @@ def get_session(queue_item_dict: dict) -> GraphExecutionState: return session +def get_workflow(queue_item_dict: dict) -> Optional[WorkflowWithoutID]: + workflow_raw = queue_item_dict.get("workflow", None) + if workflow_raw is not None: + workflow = WorkflowWithoutIDValidator.validate_json(workflow_raw, strict=False) + return workflow + return None + + class SessionQueueItemWithoutGraph(BaseModel): """Session queue item without the full graph. Used for serialization.""" @@ -213,12 +228,16 @@ class SessionQueueItemDTO(SessionQueueItemWithoutGraph): class SessionQueueItem(SessionQueueItemWithoutGraph): session: GraphExecutionState = Field(description="The fully-populated session to be executed") + workflow: Optional[WorkflowWithoutID] = Field( + default=None, description="The workflow associated with this queue item" + ) @classmethod def queue_item_from_dict(cls, queue_item_dict: dict) -> "SessionQueueItem": # must parse these manually queue_item_dict["field_values"] = get_field_values(queue_item_dict) queue_item_dict["session"] = get_session(queue_item_dict) + queue_item_dict["workflow"] = get_workflow(queue_item_dict) return SessionQueueItem(**queue_item_dict) model_config = ConfigDict( @@ -334,7 +353,7 @@ def populate_graph(graph: Graph, node_field_values: Iterable[NodeFieldValue]) -> def create_session_nfv_tuples( batch: Batch, maximum: int -) -> Generator[tuple[GraphExecutionState, list[NodeFieldValue]], None, None]: +) -> Generator[tuple[GraphExecutionState, list[NodeFieldValue], Optional[WorkflowWithoutID]], None, None]: """ Create all graph permutations from the given batch data and graph. Yields tuples of the form (graph, batch_data_items) where batch_data_items is the list of BatchDataItems @@ -365,7 +384,7 @@ def create_session_nfv_tuples( return flat_node_field_values = list(chain.from_iterable(d)) graph = populate_graph(batch.graph, flat_node_field_values) - yield (GraphExecutionState(graph=graph), flat_node_field_values) + yield (GraphExecutionState(graph=graph), flat_node_field_values, batch.workflow) count += 1 @@ -391,12 +410,14 @@ def calc_session_count(batch: Batch) -> int: class SessionQueueValueToInsert(NamedTuple): """A tuple of values to insert into the session_queue table""" + # Careful with the ordering of this - it must match the insert statement queue_id: str # queue_id session: str # session json session_id: str # session_id batch_id: str # batch_id field_values: Optional[str] # field_values json priority: int # priority + workflow: Optional[str] # workflow json ValuesToInsert: TypeAlias = list[SessionQueueValueToInsert] @@ -404,7 +425,7 @@ ValuesToInsert: TypeAlias = list[SessionQueueValueToInsert] def prepare_values_to_insert(queue_id: str, batch: Batch, priority: int, max_new_queue_items: int) -> ValuesToInsert: values_to_insert: ValuesToInsert = [] - for session, field_values in create_session_nfv_tuples(batch, max_new_queue_items): + for session, field_values, workflow in create_session_nfv_tuples(batch, max_new_queue_items): # sessions must have unique id session.id = uuid_string() values_to_insert.append( @@ -416,6 +437,7 @@ def prepare_values_to_insert(queue_id: str, batch: Batch, priority: int, max_new # must use pydantic_encoder bc field_values is a list of models json.dumps(field_values, default=to_jsonable_python) if field_values else None, # field_values (json) priority, # priority + json.dumps(workflow, default=to_jsonable_python) if workflow else None, # workflow (json) ) ) return values_to_insert diff --git a/invokeai/app/services/session_queue/session_queue_sqlite.py b/invokeai/app/services/session_queue/session_queue_sqlite.py index 58d9d461ec..71f28c102b 100644 --- a/invokeai/app/services/session_queue/session_queue_sqlite.py +++ b/invokeai/app/services/session_queue/session_queue_sqlite.py @@ -28,7 +28,7 @@ from invokeai.app.services.session_queue.session_queue_common import ( prepare_values_to_insert, ) from invokeai.app.services.shared.pagination import CursorPaginatedResults -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase class SqliteSessionQueue(SessionQueueBase): @@ -199,6 +199,15 @@ class SqliteSessionQueue(SessionQueueBase): """ ) + self.__cursor.execute("PRAGMA table_info(session_queue)") + columns = [column[1] for column in self.__cursor.fetchall()] + if "workflow" not in columns: + self.__cursor.execute( + """--sql + ALTER TABLE session_queue ADD COLUMN workflow TEXT; + """ + ) + self.__conn.commit() except Exception: self.__conn.rollback() @@ -281,8 +290,8 @@ class SqliteSessionQueue(SessionQueueBase): self.__cursor.executemany( """--sql - INSERT INTO session_queue (queue_id, session, session_id, batch_id, field_values, priority) - VALUES (?, ?, ?, ?, ?, ?) + INSERT INTO session_queue (queue_id, session, session_id, batch_id, field_values, priority, workflow) + VALUES (?, ?, ?, ?, ?, ?, ?) """, values_to_insert, ) diff --git a/invokeai/app/services/workflow_image_records/__init__.py b/invokeai/app/services/shared/sqlite/__init__.py similarity index 100% rename from invokeai/app/services/workflow_image_records/__init__.py rename to invokeai/app/services/shared/sqlite/__init__.py diff --git a/invokeai/app/services/shared/sqlite/sqlite_common.py b/invokeai/app/services/shared/sqlite/sqlite_common.py new file mode 100644 index 0000000000..2520695201 --- /dev/null +++ b/invokeai/app/services/shared/sqlite/sqlite_common.py @@ -0,0 +1,10 @@ +from enum import Enum + +from invokeai.app.util.metaenum import MetaEnum + +sqlite_memory = ":memory:" + + +class SQLiteDirection(str, Enum, metaclass=MetaEnum): + Ascending = "ASC" + Descending = "DESC" diff --git a/invokeai/app/services/shared/sqlite.py b/invokeai/app/services/shared/sqlite/sqlite_database.py similarity index 56% rename from invokeai/app/services/shared/sqlite.py rename to invokeai/app/services/shared/sqlite/sqlite_database.py index 9cddb2b926..006eb61cbd 100644 --- a/invokeai/app/services/shared/sqlite.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -4,8 +4,7 @@ from logging import Logger from pathlib import Path from invokeai.app.services.config import InvokeAIAppConfig - -sqlite_memory = ":memory:" +from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory class SqliteDatabase: @@ -32,19 +31,17 @@ class SqliteDatabase: self.conn.execute("PRAGMA foreign_keys = ON;") def clean(self) -> None: - try: - if self.db_path == sqlite_memory: - return - initial_db_size = Path(self.db_path).stat().st_size - self.lock.acquire() - self.conn.execute("VACUUM;") - self.conn.commit() - final_db_size = Path(self.db_path).stat().st_size - freed_space_in_mb = round((initial_db_size - final_db_size) / 1024 / 1024, 2) - if freed_space_in_mb > 0: - self._logger.info(f"Cleaned database (freed {freed_space_in_mb}MB)") - except Exception as e: - self._logger.error(f"Error cleaning database: {e}") - raise e - finally: - self.lock.release() + with self.lock: + try: + if self.db_path == sqlite_memory: + return + initial_db_size = Path(self.db_path).stat().st_size + self.conn.execute("VACUUM;") + self.conn.commit() + final_db_size = Path(self.db_path).stat().st_size + freed_space_in_mb = round((initial_db_size - final_db_size) / 1024 / 1024, 2) + if freed_space_in_mb > 0: + self._logger.info(f"Cleaned database (freed {freed_space_in_mb}MB)") + except Exception as e: + self._logger.error(f"Error cleaning database: {e}") + raise diff --git a/invokeai/app/services/workflow_image_records/workflow_image_records_base.py b/invokeai/app/services/workflow_image_records/workflow_image_records_base.py deleted file mode 100644 index d99a2ba106..0000000000 --- a/invokeai/app/services/workflow_image_records/workflow_image_records_base.py +++ /dev/null @@ -1,23 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Optional - - -class WorkflowImageRecordsStorageBase(ABC): - """Abstract base class for the one-to-many workflow-image relationship record storage.""" - - @abstractmethod - def create( - self, - workflow_id: str, - image_name: str, - ) -> None: - """Creates a workflow-image record.""" - pass - - @abstractmethod - def get_workflow_for_image( - self, - image_name: str, - ) -> Optional[str]: - """Gets an image's workflow id, if it has one.""" - pass diff --git a/invokeai/app/services/workflow_image_records/workflow_image_records_sqlite.py b/invokeai/app/services/workflow_image_records/workflow_image_records_sqlite.py deleted file mode 100644 index ec7a73f1d5..0000000000 --- a/invokeai/app/services/workflow_image_records/workflow_image_records_sqlite.py +++ /dev/null @@ -1,122 +0,0 @@ -import sqlite3 -import threading -from typing import Optional, cast - -from invokeai.app.services.shared.sqlite import SqliteDatabase -from invokeai.app.services.workflow_image_records.workflow_image_records_base import WorkflowImageRecordsStorageBase - - -class SqliteWorkflowImageRecordsStorage(WorkflowImageRecordsStorageBase): - """SQLite implementation of WorkflowImageRecordsStorageBase.""" - - _conn: sqlite3.Connection - _cursor: sqlite3.Cursor - _lock: threading.RLock - - def __init__(self, db: SqliteDatabase) -> None: - super().__init__() - self._lock = db.lock - self._conn = db.conn - self._cursor = self._conn.cursor() - - try: - self._lock.acquire() - self._create_tables() - self._conn.commit() - finally: - self._lock.release() - - def _create_tables(self) -> None: - # Create the `workflow_images` junction table. - self._cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS workflow_images ( - workflow_id TEXT NOT NULL, - image_name TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME, - -- enforce one-to-many relationship between workflows and images using PK - -- (we can extend this to many-to-many later) - PRIMARY KEY (image_name), - FOREIGN KEY (workflow_id) REFERENCES workflows (workflow_id) ON DELETE CASCADE, - FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE - ); - """ - ) - - # Add index for workflow id - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id ON workflow_images (workflow_id); - """ - ) - - # Add index for workflow id, sorted by created_at - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id_created_at ON workflow_images (workflow_id, created_at); - """ - ) - - # Add trigger for `updated_at`. - self._cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_workflow_images_updated_at - AFTER UPDATE - ON workflow_images FOR EACH ROW - BEGIN - UPDATE workflow_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE workflow_id = old.workflow_id AND image_name = old.image_name; - END; - """ - ) - - def create( - self, - workflow_id: str, - image_name: str, - ) -> None: - """Creates a workflow-image record.""" - try: - self._lock.acquire() - self._cursor.execute( - """--sql - INSERT INTO workflow_images (workflow_id, image_name) - VALUES (?, ?); - """, - (workflow_id, image_name), - ) - self._conn.commit() - except sqlite3.Error as e: - self._conn.rollback() - raise e - finally: - self._lock.release() - - def get_workflow_for_image( - self, - image_name: str, - ) -> Optional[str]: - """Gets an image's workflow id, if it has one.""" - try: - self._lock.acquire() - self._cursor.execute( - """--sql - SELECT workflow_id - FROM workflow_images - WHERE image_name = ?; - """, - (image_name,), - ) - result = self._cursor.fetchone() - if result is None: - return None - return cast(str, result[0]) - except sqlite3.Error as e: - self._conn.rollback() - raise e - finally: - self._lock.release() diff --git a/invokeai/app/services/workflow_records/default_workflows/README.md b/invokeai/app/services/workflow_records/default_workflows/README.md new file mode 100644 index 0000000000..3901ead1cd --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/README.md @@ -0,0 +1,17 @@ +# Default Workflows + +Workflows placed in this directory will be synced to the `workflow_library` as +_default workflows_ on app startup. + +- Default workflows are not editable by users. If they are loaded and saved, + they will save as a copy of the default workflow. +- Default workflows must have the `meta.category` property set to `"default"`. + An exception will be raised during sync if this is not set correctly. +- Default workflows appear on the "Default Workflows" tab of the Workflow + Library. + +After adding or updating default workflows, you **must** start the app up and +load them to ensure: + +- The workflow loads without warning or errors +- The workflow runs successfully diff --git a/invokeai/app/services/workflow_records/default_workflows/TextToImage_SD15.json b/invokeai/app/services/workflow_records/default_workflows/TextToImage_SD15.json new file mode 100644 index 0000000000..1e42df6e07 --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/TextToImage_SD15.json @@ -0,0 +1,798 @@ +{ + "name": "Text to Image - SD1.5", + "author": "InvokeAI", + "description": "Sample text to image workflow for Stable Diffusion 1.5/2", + "version": "1.1.0", + "contact": "invoke@invoke.ai", + "tags": "text2image, SD1.5, SD2, default", + "notes": "", + "exposedFields": [ + { + "nodeId": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "fieldName": "model" + }, + { + "nodeId": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "fieldName": "prompt" + }, + { + "nodeId": "93dc02a4-d05b-48ed-b99c-c9b616af3402", + "fieldName": "prompt" + }, + { + "nodeId": "55705012-79b9-4aac-9f26-c0b10309785b", + "fieldName": "width" + }, + { + "nodeId": "55705012-79b9-4aac-9f26-c0b10309785b", + "fieldName": "height" + } + ], + "meta": { + "category": "default", + "version": "2.0.0" + }, + "nodes": [ + { + "id": "93dc02a4-d05b-48ed-b99c-c9b616af3402", + "type": "invocation", + "data": { + "id": "93dc02a4-d05b-48ed-b99c-c9b616af3402", + "type": "compel", + "label": "Negative Compel Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "7739aff6-26cb-4016-8897-5a1fb2305e4e", + "name": "prompt", + "fieldKind": "input", + "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "48d23dce-a6ae-472a-9f8c-22a714ea5ce0", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "37cf3a9d-f6b7-4b64-8ff6-2558c5ecc447", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 259, + "position": { + "x": 1000, + "y": 350 + } + }, + { + "id": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "invocation", + "data": { + "id": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "noise", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", + "inputs": { + "seed": { + "id": "6431737c-918a-425d-a3b4-5d57e2f35d4d", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "38fc5b66-fe6e-47c8-bba9-daf58e454ed7", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "16298330-e2bf-4872-a514-d6923df53cbb", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "c7c436d3-7a7a-4e76-91e4-c6deb271623c", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "50f650dc-0184-4e23-a927-0497a96fe954", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "bb8a452b-133d-42d1-ae4a-3843d7e4109a", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "35cfaa12-3b8b-4b7a-a884-327ff3abddd9", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 388, + "position": { + "x": 600, + "y": 325 + } + }, + { + "id": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "type": "invocation", + "data": { + "id": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "model": { + "id": "993eabd2-40fd-44fe-bce7-5d0c7075ddab", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, + "value": { + "model_name": "stable-diffusion-v1-5", + "base_model": "sd-1", + "model_type": "main" + } + } + }, + "outputs": { + "unet": { + "id": "5c18c9db-328d-46d0-8cb9-143391c410be", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "6effcac0-ec2f-4bf5-a49e-a2c29cf921f4", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "vae": { + "id": "57683ba3-f5f5-4f58-b9a2-4b83dacad4a1", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } + }, + "width": 320, + "height": 226, + "position": { + "x": 600, + "y": 25 + } + }, + { + "id": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "type": "invocation", + "data": { + "id": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "type": "compel", + "label": "Positive Compel Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "7739aff6-26cb-4016-8897-5a1fb2305e4e", + "name": "prompt", + "fieldKind": "input", + "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "Super cute tiger cub, national geographic award-winning photograph" + }, + "clip": { + "id": "48d23dce-a6ae-472a-9f8c-22a714ea5ce0", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "37cf3a9d-f6b7-4b64-8ff6-2558c5ecc447", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 259, + "position": { + "x": 1000, + "y": 25 + } + }, + { + "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "type": "invocation", + "data": { + "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "type": "rand_int", + "label": "Random Seed", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "low": { + "id": "3ec65a37-60ba-4b6c-a0b2-553dd7a84b84", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "085f853a-1a5f-494d-8bec-e4ba29a3f2d1", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "812ade4d-7699-4261-b9fc-a6c9d2ab55ee", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 600, + "y": 275 + } + }, + { + "id": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "invocation", + "data": { + "id": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", + "inputs": { + "positive_conditioning": { + "id": "90b7f4f8-ada7-4028-8100-d2e54f192052", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "9393779e-796c-4f64-b740-902a1177bf53", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "8e17f1e5-4f98-40b1-b7f4-86aeeb4554c1", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "9b63302d-6bd2-42c9-ac13-9b1afb51af88", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 50 + }, + "cfg_scale": { + "id": "87dd04d3-870e-49e1-98bf-af003a810109", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 7.5 + }, + "denoising_start": { + "id": "f369d80f-4931-4740-9bcd-9f0620719fab", + "name": "denoising_start", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "denoising_end": { + "id": "747d10e5-6f02-445c-994c-0604d814de8c", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "1de84a4e-3a24-4ec8-862b-16ce49633b9b", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "unipc" + }, + "unet": { + "id": "ffa6fef4-3ce2-4bdb-9296-9a834849489b", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "077b64cb-34be-4fcc-83f2-e399807a02bd", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "1d6948f7-3a65-4a65-a20c-768b287251aa", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "75e67b09-952f-4083-aaf4-6b804d690412", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "9101f0a6-5fe0-4826-b7b3-47e5d506826c", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "334d4ba3-5a99-4195-82c5-86fb3f4f7d43", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "0d3dbdbf-b014-4e95-8b18-ff2ff9cb0bfa", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "70fa5bbc-0c38-41bb-861a-74d6d78d2f38", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "98ee0e6c-82aa-4e8f-8be5-dc5f00ee47f0", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "e8cb184a-5e1a-47c8-9695-4b8979564f5d", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 703, + "position": { + "x": 1400, + "y": 25 + } + }, + { + "id": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", + "type": "invocation", + "data": { + "id": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "ab375f12-0042-4410-9182-29e30db82c85", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "3a7e7efd-bff5-47d7-9d48-615127afee78", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "a1f5f7a1-0795-4d58-b036-7820c0b0ef2b", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "da52059a-0cee-4668-942f-519aa794d739", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "c4841df3-b24e-4140-be3b-ccd454c2522c", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "image": { + "id": "72d667d0-cf85-459d-abf2-28bd8b823fe7", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "c8c907d8-1066-49d1-b9a6-83bdcd53addc", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "230f359c-b4ea-436c-b372-332d7dcdca85", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 266, + "position": { + "x": 1800, + "y": 25 + } + } + ], + "edges": [ + { + "id": "reactflow__edge-ea94bc37-d995-4a83-aa99-4af42479f2f2value-55705012-79b9-4aac-9f26-c0b10309785bseed", + "source": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "target": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8clip-7d8bf987-284f-413a-b2fd-d825445a5d6cclip", + "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "target": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8clip-93dc02a4-d05b-48ed-b99c-c9b616af3402clip", + "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "target": "93dc02a4-d05b-48ed-b99c-c9b616af3402", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-55705012-79b9-4aac-9f26-c0b10309785bnoise-eea2702a-19fb-45b5-9d75-56b4211ec03cnoise", + "source": "55705012-79b9-4aac-9f26-c0b10309785b", + "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-7d8bf987-284f-413a-b2fd-d825445a5d6cconditioning-eea2702a-19fb-45b5-9d75-56b4211ec03cpositive_conditioning", + "source": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-93dc02a4-d05b-48ed-b99c-c9b616af3402conditioning-eea2702a-19fb-45b5-9d75-56b4211ec03cnegative_conditioning", + "source": "93dc02a4-d05b-48ed-b99c-c9b616af3402", + "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8unet-eea2702a-19fb-45b5-9d75-56b4211ec03cunet", + "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-eea2702a-19fb-45b5-9d75-56b4211ec03clatents-58c957f5-0d01-41fc-a803-b2bbf0413d4flatents", + "source": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "target": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8vae-58c957f5-0d01-41fc-a803-b2bbf0413d4fvae", + "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "target": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + } + ] +} diff --git a/invokeai/app/services/workflow_records/default_workflows/TextToImage_SDXL.json b/invokeai/app/services/workflow_records/default_workflows/TextToImage_SDXL.json new file mode 100644 index 0000000000..ef7810c153 --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/TextToImage_SDXL.json @@ -0,0 +1,1320 @@ +{ + "name": "SDXL Text to Image", + "author": "InvokeAI", + "description": "Sample text to image workflow for SDXL", + "version": "1.0.1", + "contact": "invoke@invoke.ai", + "tags": "text2image, SDXL, default", + "notes": "", + "exposedFields": [ + { + "nodeId": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "fieldName": "value" + }, + { + "nodeId": "719dabe8-8297-4749-aea1-37be301cd425", + "fieldName": "value" + }, + { + "nodeId": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "fieldName": "model" + }, + { + "nodeId": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "fieldName": "vae_model" + } + ], + "meta": { + "category": "default", + "version": "2.0.0" + }, + "nodes": [ + { + "id": "3774ec24-a69e-4254-864c-097d07a6256f", + "type": "invocation", + "data": { + "id": "3774ec24-a69e-4254-864c-097d07a6256f", + "type": "string_join", + "label": "Positive Style Concat", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "string_left": { + "id": "8d84be5c-4a96-46ad-a92c-eaf6fcae4a69", + "name": "string_left", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "string_right": { + "id": "c8e2a881-f675-4c6b-865b-a0892473b750", + "name": "string_right", + "fieldKind": "input", + "label": "Positive Style Concat", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + } + }, + "outputs": { + "value": { + "id": "196fad08-73ea-4fe5-8cc3-b55fd3cf40e5", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 750, + "y": -225 + } + }, + { + "id": "719dabe8-8297-4749-aea1-37be301cd425", + "type": "invocation", + "data": { + "id": "719dabe8-8297-4749-aea1-37be301cd425", + "type": "string", + "label": "Negative Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "744a5f7c-6e3a-4fbc-ac66-ba0cf8559eeb", + "name": "value", + "fieldKind": "input", + "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "photograph" + } + }, + "outputs": { + "value": { + "id": "3e0ddf7a-a5de-4dad-b726-5d0cb4e0baa6", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 258, + "position": { + "x": 750, + "y": -125 + } + }, + { + "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "invocation", + "data": { + "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "sdxl_compel_prompt", + "label": "SDXL Negative Compel Prompt", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "5a6889e6-95cb-462f-8f4a-6b93ae7afaec", + "name": "prompt", + "fieldKind": "input", + "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "style": { + "id": "f240d0e6-3a1c-4320-af23-20ebb707c276", + "name": "style", + "fieldKind": "input", + "label": "Negative Style", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "original_width": { + "id": "05af07b0-99a0-4a68-8ad2-697bbdb7fc7e", + "name": "original_width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "original_height": { + "id": "2c771996-a998-43b7-9dd3-3792664d4e5b", + "name": "original_height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "crop_top": { + "id": "66519dca-a151-4e3e-ae1f-88f1f9877bde", + "name": "crop_top", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "crop_left": { + "id": "349cf2e9-f3d0-4e16-9ae2-7097d25b6a51", + "name": "crop_left", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "target_width": { + "id": "44499347-7bd6-4a73-99d6-5a982786db05", + "name": "target_width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "target_height": { + "id": "fda359b0-ab80-4f3c-805b-c9f61319d7d2", + "name": "target_height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "clip": { + "id": "b447adaf-a649-4a76-a827-046a9fc8d89b", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "clip2": { + "id": "86ee4e32-08f9-4baa-9163-31d93f5c0187", + "name": "clip2", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "7c10118e-7b4e-4911-b98e-d3ba6347dfd0", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 750, + "y": 200 + } + }, + { + "id": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "invocation", + "data": { + "id": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "noise", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", + "inputs": { + "seed": { + "id": "6431737c-918a-425d-a3b4-5d57e2f35d4d", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "38fc5b66-fe6e-47c8-bba9-daf58e454ed7", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "height": { + "id": "16298330-e2bf-4872-a514-d6923df53cbb", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "use_cpu": { + "id": "c7c436d3-7a7a-4e76-91e4-c6deb271623c", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "50f650dc-0184-4e23-a927-0497a96fe954", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "bb8a452b-133d-42d1-ae4a-3843d7e4109a", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "35cfaa12-3b8b-4b7a-a884-327ff3abddd9", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 388, + "position": { + "x": 375, + "y": 0 + } + }, + { + "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "type": "invocation", + "data": { + "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "type": "rand_int", + "label": "Random Seed", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "low": { + "id": "3ec65a37-60ba-4b6c-a0b2-553dd7a84b84", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "085f853a-1a5f-494d-8bec-e4ba29a3f2d1", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "812ade4d-7699-4261-b9fc-a6c9d2ab55ee", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 375, + "y": -50 + } + }, + { + "id": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "type": "invocation", + "data": { + "id": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "type": "sdxl_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "model": { + "id": "39f9e799-bc95-4318-a200-30eed9e60c42", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SDXLMainModelField" + }, + "value": null + } + }, + "outputs": { + "unet": { + "id": "2626a45e-59aa-4609-b131-2d45c5eaed69", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "7c9c42fa-93d5-4639-ab8b-c4d9b0559baf", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "clip2": { + "id": "0dafddcf-a472-49c1-a47c-7b8fab4c8bc9", + "name": "clip2", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "vae": { + "id": "ee6a6997-1b3c-4ff3-99ce-1e7bfba2750c", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } + }, + "width": 320, + "height": 257, + "position": { + "x": 375, + "y": -500 + } + }, + { + "id": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "invocation", + "data": { + "id": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "sdxl_compel_prompt", + "label": "SDXL Positive Compel Prompt", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "5a6889e6-95cb-462f-8f4a-6b93ae7afaec", + "name": "prompt", + "fieldKind": "input", + "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "style": { + "id": "f240d0e6-3a1c-4320-af23-20ebb707c276", + "name": "style", + "fieldKind": "input", + "label": "Positive Style", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "original_width": { + "id": "05af07b0-99a0-4a68-8ad2-697bbdb7fc7e", + "name": "original_width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "original_height": { + "id": "2c771996-a998-43b7-9dd3-3792664d4e5b", + "name": "original_height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "crop_top": { + "id": "66519dca-a151-4e3e-ae1f-88f1f9877bde", + "name": "crop_top", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "crop_left": { + "id": "349cf2e9-f3d0-4e16-9ae2-7097d25b6a51", + "name": "crop_left", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "target_width": { + "id": "44499347-7bd6-4a73-99d6-5a982786db05", + "name": "target_width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "target_height": { + "id": "fda359b0-ab80-4f3c-805b-c9f61319d7d2", + "name": "target_height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "clip": { + "id": "b447adaf-a649-4a76-a827-046a9fc8d89b", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "clip2": { + "id": "86ee4e32-08f9-4baa-9163-31d93f5c0187", + "name": "clip2", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "7c10118e-7b4e-4911-b98e-d3ba6347dfd0", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 750, + "y": -175 + } + }, + { + "id": "63e91020-83b2-4f35-b174-ad9692aabb48", + "type": "invocation", + "data": { + "id": "63e91020-83b2-4f35-b174-ad9692aabb48", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": false, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "88971324-3fdb-442d-b8b7-7612478a8622", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "da0e40cb-c49f-4fa5-9856-338b91a65f6b", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "ae5164ce-1710-4ec5-a83a-6113a0d1b5c0", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "2ccfd535-1a7b-4ecf-84db-9430a64fb3d7", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "64f07d5a-54a2-429c-8c5b-0c2a3a8e5cd5", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "9b281eaa-6504-407d-a5ca-1e5e8020a4bf", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "98e545f3-b53b-490d-b94d-bed9418ccc75", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "4a74bd43-d7f7-4c7f-bb3b-d09bb2992c46", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 266, + "position": { + "x": 1475, + "y": -500 + } + }, + { + "id": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "invocation", + "data": { + "id": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", + "inputs": { + "positive_conditioning": { + "id": "29b73dfa-a06e-4b4a-a844-515b9eb93a81", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "a81e6f5b-f4de-4919-b483-b6e2f067465a", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "4ba06bb7-eb45-4fb9-9984-31001b545587", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "36ee8a45-ca69-44bc-9bc3-aa881e6045c0", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 32 + }, + "cfg_scale": { + "id": "2a2024e0-a736-46ec-933c-c1c1ebe96943", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 6 + }, + "denoising_start": { + "id": "be219d5e-41b7-430a-8fb5-bc21a31ad219", + "name": "denoising_start", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "denoising_end": { + "id": "3adfb7ae-c9f7-4a40-b6e0-4c2050bd1a99", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "14423e0d-7215-4ee0-b065-f9e95eaa8d7d", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "dpmpp_2m_sde_k" + }, + "unet": { + "id": "e73bbf98-6489-492b-b83c-faed215febac", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "dab351b3-0c86-4ea5-9782-4e8edbfb0607", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "192daea0-a90a-43cc-a2ee-0114a8e90318", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "ee386a55-d4c7-48c1-ac57-7bc4e3aada7a", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "106bbe8d-e641-4034-9a39-d4e82c298da1", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "3a922c6a-3d8c-4c9e-b3ec-2f4d81cda077", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "cd7ce032-835f-495f-8b45-d57272f33132", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "6260b84f-8361-470a-98d8-5b22a45c2d8c", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "aede0ecf-25b6-46be-aa30-b77f79715deb", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "519abf62-d475-48ef-ab8f-66136bc0e499", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 702, + "position": { + "x": 1125, + "y": -500 + } + }, + { + "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "type": "invocation", + "data": { + "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "type": "vae_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "vae_model": { + "id": "28a17000-b629-49c6-b945-77c591cf7440", + "name": "vae_model", + "fieldKind": "input", + "label": "VAE (use the FP16 model)", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VAEModelField" + }, + "value": null + } + }, + "outputs": { + "vae": { + "id": "a34892b6-ba6d-44eb-8a68-af1f40a84186", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } + }, + "width": 320, + "height": 161, + "position": { + "x": 375, + "y": -225 + } + }, + { + "id": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "type": "invocation", + "data": { + "id": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "type": "string", + "label": "Positive Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "744a5f7c-6e3a-4fbc-ac66-ba0cf8559eeb", + "name": "value", + "fieldKind": "input", + "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "Super cute tiger cub, fierce, traditional chinese watercolor" + } + }, + "outputs": { + "value": { + "id": "3e0ddf7a-a5de-4dad-b726-5d0cb4e0baa6", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 258, + "position": { + "x": 750, + "y": -500 + } + }, + { + "id": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "type": "invocation", + "data": { + "id": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "type": "string_join", + "label": "Negative Style Concat", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "string_left": { + "id": "8d84be5c-4a96-46ad-a92c-eaf6fcae4a69", + "name": "string_left", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "string_right": { + "id": "c8e2a881-f675-4c6b-865b-a0892473b750", + "name": "string_right", + "fieldKind": "input", + "label": "Negative Style Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + } + }, + "outputs": { + "value": { + "id": "196fad08-73ea-4fe5-8cc3-b55fd3cf40e5", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 750, + "y": 150 + } + } + ], + "edges": [ + { + "id": "3774ec24-a69e-4254-864c-097d07a6256f-faf965a4-7530-427b-b1f3-4ba6505c2a08-collapsed", + "source": "3774ec24-a69e-4254-864c-097d07a6256f", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "collapsed" + }, + { + "id": "ad8fa655-3a76-43d0-9c02-4d7644dea650-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204-collapsed", + "source": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "collapsed" + }, + { + "id": "reactflow__edge-ea94bc37-d995-4a83-aa99-4af42479f2f2value-55705012-79b9-4aac-9f26-c0b10309785bseed", + "source": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "target": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip-faf965a4-7530-427b-b1f3-4ba6505c2a08clip", + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip2-faf965a4-7530-427b-b1f3-4ba6505c2a08clip2", + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "default", + "sourceHandle": "clip2", + "targetHandle": "clip2" + }, + { + "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204clip", + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip2-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204clip2", + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "default", + "sourceHandle": "clip2", + "targetHandle": "clip2" + }, + { + "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22unet-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbunet", + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-faf965a4-7530-427b-b1f3-4ba6505c2a08conditioning-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbpositive_conditioning", + "source": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204conditioning-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbnegative_conditioning", + "source": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-55705012-79b9-4aac-9f26-c0b10309785bnoise-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbnoise", + "source": "55705012-79b9-4aac-9f26-c0b10309785b", + "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfblatents-63e91020-83b2-4f35-b174-ad9692aabb48latents", + "source": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "target": "63e91020-83b2-4f35-b174-ad9692aabb48", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-0093692f-9cf4-454d-a5b8-62f0e3eb3bb8vae-63e91020-83b2-4f35-b174-ad9692aabb48vae", + "source": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "target": "63e91020-83b2-4f35-b174-ad9692aabb48", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-ade2c0d3-0384-4157-b39b-29ce429cfa15value-faf965a4-7530-427b-b1f3-4ba6505c2a08prompt", + "source": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "default", + "sourceHandle": "value", + "targetHandle": "prompt" + }, + { + "id": "reactflow__edge-719dabe8-8297-4749-aea1-37be301cd425value-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204prompt", + "source": "719dabe8-8297-4749-aea1-37be301cd425", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "default", + "sourceHandle": "value", + "targetHandle": "prompt" + }, + { + "id": "reactflow__edge-719dabe8-8297-4749-aea1-37be301cd425value-ad8fa655-3a76-43d0-9c02-4d7644dea650string_left", + "source": "719dabe8-8297-4749-aea1-37be301cd425", + "target": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "type": "default", + "sourceHandle": "value", + "targetHandle": "string_left" + }, + { + "id": "reactflow__edge-ad8fa655-3a76-43d0-9c02-4d7644dea650value-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204style", + "source": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "default", + "sourceHandle": "value", + "targetHandle": "style" + }, + { + "id": "reactflow__edge-ade2c0d3-0384-4157-b39b-29ce429cfa15value-3774ec24-a69e-4254-864c-097d07a6256fstring_left", + "source": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "target": "3774ec24-a69e-4254-864c-097d07a6256f", + "type": "default", + "sourceHandle": "value", + "targetHandle": "string_left" + }, + { + "id": "reactflow__edge-3774ec24-a69e-4254-864c-097d07a6256fvalue-faf965a4-7530-427b-b1f3-4ba6505c2a08style", + "source": "3774ec24-a69e-4254-864c-097d07a6256f", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "default", + "sourceHandle": "value", + "targetHandle": "style" + } + ] +} diff --git a/invokeai/app/services/workflow_records/workflow_records_base.py b/invokeai/app/services/workflow_records/workflow_records_base.py index d5a4b25ce4..499b0f005d 100644 --- a/invokeai/app/services/workflow_records/workflow_records_base.py +++ b/invokeai/app/services/workflow_records/workflow_records_base.py @@ -1,17 +1,50 @@ from abc import ABC, abstractmethod +from typing import Optional -from invokeai.app.invocations.baseinvocation import WorkflowField +from invokeai.app.services.shared.pagination import PaginatedResults +from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection +from invokeai.app.services.workflow_records.workflow_records_common import ( + Workflow, + WorkflowCategory, + WorkflowRecordDTO, + WorkflowRecordListItemDTO, + WorkflowRecordOrderBy, + WorkflowWithoutID, +) class WorkflowRecordsStorageBase(ABC): """Base class for workflow storage services.""" @abstractmethod - def get(self, workflow_id: str) -> WorkflowField: + def get(self, workflow_id: str) -> WorkflowRecordDTO: """Get workflow by id.""" pass @abstractmethod - def create(self, workflow: WorkflowField) -> WorkflowField: + def create(self, workflow: WorkflowWithoutID) -> WorkflowRecordDTO: """Creates a workflow.""" pass + + @abstractmethod + def update(self, workflow: Workflow) -> WorkflowRecordDTO: + """Updates a workflow.""" + pass + + @abstractmethod + def delete(self, workflow_id: str) -> None: + """Deletes a workflow.""" + pass + + @abstractmethod + def get_many( + self, + page: int, + per_page: int, + order_by: WorkflowRecordOrderBy, + direction: SQLiteDirection, + category: WorkflowCategory, + query: Optional[str], + ) -> PaginatedResults[WorkflowRecordListItemDTO]: + """Gets many workflows.""" + pass diff --git a/invokeai/app/services/workflow_records/workflow_records_common.py b/invokeai/app/services/workflow_records/workflow_records_common.py index 3a2b13f565..599d2750c2 100644 --- a/invokeai/app/services/workflow_records/workflow_records_common.py +++ b/invokeai/app/services/workflow_records/workflow_records_common.py @@ -1,2 +1,105 @@ +import datetime +from enum import Enum +from typing import Any, Union + +import semver +from pydantic import BaseModel, Field, JsonValue, TypeAdapter, field_validator + +from invokeai.app.util.metaenum import MetaEnum +from invokeai.app.util.misc import uuid_string + +__workflow_meta_version__ = semver.Version.parse("1.0.0") + + +class ExposedField(BaseModel): + nodeId: str + fieldName: str + + class WorkflowNotFoundError(Exception): """Raised when a workflow is not found""" + + +class WorkflowRecordOrderBy(str, Enum, metaclass=MetaEnum): + """The order by options for workflow records""" + + CreatedAt = "created_at" + UpdatedAt = "updated_at" + OpenedAt = "opened_at" + Name = "name" + + +class WorkflowCategory(str, Enum, metaclass=MetaEnum): + User = "user" + Default = "default" + + +class WorkflowMeta(BaseModel): + version: str = Field(description="The version of the workflow schema.") + category: WorkflowCategory = Field( + default=WorkflowCategory.User, description="The category of the workflow (user or default)." + ) + + @field_validator("version") + def validate_version(cls, version: str): + try: + semver.Version.parse(version) + return version + except Exception: + raise ValueError(f"Invalid workflow meta version: {version}") + + def to_semver(self) -> semver.Version: + return semver.Version.parse(self.version) + + +class WorkflowWithoutID(BaseModel): + name: str = Field(description="The name of the workflow.") + author: str = Field(description="The author of the workflow.") + description: str = Field(description="The description of the workflow.") + version: str = Field(description="The version of the workflow.") + contact: str = Field(description="The contact of the workflow.") + tags: str = Field(description="The tags of the workflow.") + notes: str = Field(description="The notes of the workflow.") + exposedFields: list[ExposedField] = Field(description="The exposed fields of the workflow.") + meta: WorkflowMeta = Field(description="The meta of the workflow.") + # TODO: nodes and edges are very loosely typed + nodes: list[dict[str, JsonValue]] = Field(description="The nodes of the workflow.") + edges: list[dict[str, JsonValue]] = Field(description="The edges of the workflow.") + + +WorkflowWithoutIDValidator = TypeAdapter(WorkflowWithoutID) + + +class Workflow(WorkflowWithoutID): + id: str = Field(default_factory=uuid_string, description="The id of the workflow.") + + +WorkflowValidator = TypeAdapter(Workflow) + + +class WorkflowRecordDTOBase(BaseModel): + workflow_id: str = Field(description="The id of the workflow.") + name: str = Field(description="The name of the workflow.") + created_at: Union[datetime.datetime, str] = Field(description="The created timestamp of the workflow.") + updated_at: Union[datetime.datetime, str] = Field(description="The updated timestamp of the workflow.") + opened_at: Union[datetime.datetime, str] = Field(description="The opened timestamp of the workflow.") + + +class WorkflowRecordDTO(WorkflowRecordDTOBase): + workflow: Workflow = Field(description="The workflow.") + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> "WorkflowRecordDTO": + data["workflow"] = WorkflowValidator.validate_json(data.get("workflow", "")) + return WorkflowRecordDTOValidator.validate_python(data) + + +WorkflowRecordDTOValidator = TypeAdapter(WorkflowRecordDTO) + + +class WorkflowRecordListItemDTO(WorkflowRecordDTOBase): + description: str = Field(description="The description of the workflow.") + category: WorkflowCategory = Field(description="The description of the workflow.") + + +WorkflowRecordListItemDTOValidator = TypeAdapter(WorkflowRecordListItemDTO) diff --git a/invokeai/app/services/workflow_records/workflow_records_sqlite.py b/invokeai/app/services/workflow_records/workflow_records_sqlite.py index b0952e8234..c28a7a2d92 100644 --- a/invokeai/app/services/workflow_records/workflow_records_sqlite.py +++ b/invokeai/app/services/workflow_records/workflow_records_sqlite.py @@ -1,20 +1,25 @@ -import sqlite3 -import threading +from pathlib import Path +from typing import Optional -from invokeai.app.invocations.baseinvocation import WorkflowField, WorkflowFieldValidator from invokeai.app.services.invoker import Invoker -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.pagination import PaginatedResults +from invokeai.app.services.shared.sqlite.sqlite_common import SQLiteDirection +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.workflow_records.workflow_records_base import WorkflowRecordsStorageBase -from invokeai.app.services.workflow_records.workflow_records_common import WorkflowNotFoundError -from invokeai.app.util.misc import uuid_string +from invokeai.app.services.workflow_records.workflow_records_common import ( + Workflow, + WorkflowCategory, + WorkflowNotFoundError, + WorkflowRecordDTO, + WorkflowRecordListItemDTO, + WorkflowRecordListItemDTOValidator, + WorkflowRecordOrderBy, + WorkflowValidator, + WorkflowWithoutID, +) class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): - _invoker: Invoker - _conn: sqlite3.Connection - _cursor: sqlite3.Cursor - _lock: threading.RLock - def __init__(self, db: SqliteDatabase) -> None: super().__init__() self._lock = db.lock @@ -24,14 +29,25 @@ class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): def start(self, invoker: Invoker) -> None: self._invoker = invoker + self._sync_default_workflows() - def get(self, workflow_id: str) -> WorkflowField: + def get(self, workflow_id: str) -> WorkflowRecordDTO: + """Gets a workflow by ID. Updates the opened_at column.""" try: self._lock.acquire() self._cursor.execute( """--sql - SELECT workflow - FROM workflows + UPDATE workflow_library + SET opened_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE workflow_id = ?; + """, + (workflow_id,), + ) + self._conn.commit() + self._cursor.execute( + """--sql + SELECT workflow_id, workflow, name, created_at, updated_at, opened_at + FROM workflow_library WHERE workflow_id = ?; """, (workflow_id,), @@ -39,25 +55,28 @@ class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): row = self._cursor.fetchone() if row is None: raise WorkflowNotFoundError(f"Workflow with id {workflow_id} not found") - return WorkflowFieldValidator.validate_json(row[0]) + return WorkflowRecordDTO.from_dict(dict(row)) except Exception: self._conn.rollback() raise finally: self._lock.release() - def create(self, workflow: WorkflowField) -> WorkflowField: + def create(self, workflow: WorkflowWithoutID) -> WorkflowRecordDTO: try: - # workflows do not have ids until they are saved - workflow_id = uuid_string() - workflow.root["id"] = workflow_id + # Only user workflows may be created by this method + assert workflow.meta.category is WorkflowCategory.User + workflow_with_id = WorkflowValidator.validate_python(workflow.model_dump()) self._lock.acquire() self._cursor.execute( """--sql - INSERT INTO workflows(workflow) - VALUES (?); + INSERT OR IGNORE INTO workflow_library ( + workflow_id, + workflow + ) + VALUES (?, ?); """, - (workflow.model_dump_json(),), + (workflow_with_id.id, workflow_with_id.model_dump_json()), ) self._conn.commit() except Exception: @@ -65,35 +84,231 @@ class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): raise finally: self._lock.release() - return self.get(workflow_id) + return self.get(workflow_with_id.id) + + def update(self, workflow: Workflow) -> WorkflowRecordDTO: + try: + self._lock.acquire() + self._cursor.execute( + """--sql + UPDATE workflow_library + SET workflow = ? + WHERE workflow_id = ? AND category = 'user'; + """, + (workflow.model_dump_json(), workflow.id), + ) + self._conn.commit() + except Exception: + self._conn.rollback() + raise + finally: + self._lock.release() + return self.get(workflow.id) + + def delete(self, workflow_id: str) -> None: + try: + self._lock.acquire() + self._cursor.execute( + """--sql + DELETE from workflow_library + WHERE workflow_id = ? AND category = 'user'; + """, + (workflow_id,), + ) + self._conn.commit() + except Exception: + self._conn.rollback() + raise + finally: + self._lock.release() + return None + + def get_many( + self, + page: int, + per_page: int, + order_by: WorkflowRecordOrderBy, + direction: SQLiteDirection, + category: WorkflowCategory, + query: Optional[str] = None, + ) -> PaginatedResults[WorkflowRecordListItemDTO]: + try: + self._lock.acquire() + # sanitize! + assert order_by in WorkflowRecordOrderBy + assert direction in SQLiteDirection + assert category in WorkflowCategory + count_query = "SELECT COUNT(*) FROM workflow_library WHERE category = ?" + main_query = """ + SELECT + workflow_id, + category, + name, + description, + created_at, + updated_at, + opened_at + FROM workflow_library + WHERE category = ? + """ + main_params: list[int | str] = [category.value] + count_params: list[int | str] = [category.value] + stripped_query = query.strip() if query else None + if stripped_query: + wildcard_query = "%" + stripped_query + "%" + main_query += " AND name LIKE ? OR description LIKE ? " + count_query += " AND name LIKE ? OR description LIKE ?;" + main_params.extend([wildcard_query, wildcard_query]) + count_params.extend([wildcard_query, wildcard_query]) + + main_query += f" ORDER BY {order_by.value} {direction.value} LIMIT ? OFFSET ?;" + main_params.extend([per_page, page * per_page]) + self._cursor.execute(main_query, main_params) + rows = self._cursor.fetchall() + workflows = [WorkflowRecordListItemDTOValidator.validate_python(dict(row)) for row in rows] + + self._cursor.execute(count_query, count_params) + total = self._cursor.fetchone()[0] + pages = int(total / per_page) + 1 + + return PaginatedResults( + items=workflows, + page=page, + per_page=per_page, + pages=pages, + total=total, + ) + except Exception: + self._conn.rollback() + raise + finally: + self._lock.release() + + def _sync_default_workflows(self) -> None: + """Syncs default workflows to the database. Internal use only.""" + + """ + An enhancement might be to only update workflows that have changed. This would require stable + default workflow IDs, and properly incrementing the workflow version. + + It's much simpler to just replace them all with whichever workflows are in the directory. + + The downside is that the `updated_at` and `opened_at` timestamps for default workflows are + meaningless, as they are overwritten every time the server starts. + """ + + try: + self._lock.acquire() + workflows: list[Workflow] = [] + workflows_dir = Path(__file__).parent / Path("default_workflows") + workflow_paths = workflows_dir.glob("*.json") + for path in workflow_paths: + bytes_ = path.read_bytes() + workflow = WorkflowValidator.validate_json(bytes_) + workflows.append(workflow) + # Only default workflows may be managed by this method + assert all(w.meta.category is WorkflowCategory.Default for w in workflows) + self._cursor.execute( + """--sql + DELETE FROM workflow_library + WHERE category = 'default'; + """ + ) + for w in workflows: + self._cursor.execute( + """--sql + INSERT OR REPLACE INTO workflow_library ( + workflow_id, + workflow + ) + VALUES (?, ?); + """, + (w.id, w.model_dump_json()), + ) + self._conn.commit() + except Exception: + self._conn.rollback() + raise + finally: + self._lock.release() def _create_tables(self) -> None: try: self._lock.acquire() self._cursor.execute( """--sql - CREATE TABLE IF NOT EXISTS workflows ( + CREATE TABLE IF NOT EXISTS workflow_library ( + workflow_id TEXT NOT NULL PRIMARY KEY, workflow TEXT NOT NULL, - workflow_id TEXT GENERATED ALWAYS AS (json_extract(workflow, '$.id')) VIRTUAL NOT NULL UNIQUE, -- gets implicit index created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) -- updated via trigger + -- updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated manually when retrieving workflow + opened_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Generated columns, needed for indexing and searching + category TEXT GENERATED ALWAYS as (json_extract(workflow, '$.meta.category')) VIRTUAL NOT NULL, + name TEXT GENERATED ALWAYS as (json_extract(workflow, '$.name')) VIRTUAL NOT NULL, + description TEXT GENERATED ALWAYS as (json_extract(workflow, '$.description')) VIRTUAL NOT NULL ); """ ) self._cursor.execute( """--sql - CREATE TRIGGER IF NOT EXISTS tg_workflows_updated_at + CREATE TRIGGER IF NOT EXISTS tg_workflow_library_updated_at AFTER UPDATE - ON workflows FOR EACH ROW + ON workflow_library FOR EACH ROW BEGIN - UPDATE workflows + UPDATE workflow_library SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE workflow_id = old.workflow_id; END; """ ) + self._cursor.execute( + """--sql + CREATE INDEX IF NOT EXISTS idx_workflow_library_created_at ON workflow_library(created_at); + """ + ) + self._cursor.execute( + """--sql + CREATE INDEX IF NOT EXISTS idx_workflow_library_updated_at ON workflow_library(updated_at); + """ + ) + self._cursor.execute( + """--sql + CREATE INDEX IF NOT EXISTS idx_workflow_library_opened_at ON workflow_library(opened_at); + """ + ) + self._cursor.execute( + """--sql + CREATE INDEX IF NOT EXISTS idx_workflow_library_category ON workflow_library(category); + """ + ) + self._cursor.execute( + """--sql + CREATE INDEX IF NOT EXISTS idx_workflow_library_name ON workflow_library(name); + """ + ) + self._cursor.execute( + """--sql + CREATE INDEX IF NOT EXISTS idx_workflow_library_description ON workflow_library(description); + """ + ) + + # We do not need the original `workflows` table or `workflow_images` junction table. + self._cursor.execute( + """--sql + DROP TABLE IF EXISTS workflow_images; + """ + ) + self._cursor.execute( + """--sql + DROP TABLE IF EXISTS workflows; + """ + ) + self._conn.commit() except Exception: self._conn.rollback() diff --git a/invokeai/backend/model_manager/migrate_to_db.py b/invokeai/backend/model_manager/migrate_to_db.py index e962a7c28b..eac25a44a0 100644 --- a/invokeai/backend/model_manager/migrate_to_db.py +++ b/invokeai/backend/model_manager/migrate_to_db.py @@ -11,7 +11,7 @@ from invokeai.app.services.model_records import ( DuplicateModelException, ModelRecordServiceSQL, ) -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.backend.model_manager.config import ( AnyModelConfig, BaseModelType, diff --git a/invokeai/frontend/web/.prettierignore b/invokeai/frontend/web/.prettierignore index 05782f1f53..6a981045b0 100644 --- a/invokeai/frontend/web/.prettierignore +++ b/invokeai/frontend/web/.prettierignore @@ -1,5 +1,6 @@ dist/ public/locales/*.json +!public/locales/en.json .husky/ node_modules/ patches/ diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index 948f24093b..f45b9973ce 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -67,7 +67,9 @@ "controlNet": "ControlNet", "controlAdapter": "Control Adapter", "data": "Data", + "delete": "Delete", "details": "Details", + "direction": "Direction", "ipAdapter": "IP Adapter", "t2iAdapter": "T2I Adapter", "darkMode": "Dark Mode", @@ -115,6 +117,7 @@ "nodesDesc": "A node based system for the generation of images is under development currently. Stay tuned for updates about this amazing feature.", "notInstalled": "Not $t(common.installed)", "openInNewTab": "Open in New Tab", + "orderBy": "Order By", "outpaint": "outpaint", "outputs": "Outputs", "postProcessDesc1": "Invoke AI offers a wide variety of post processing features. Image Upscaling and Face Restoration are already available in the WebUI. You can access them from the Advanced Options menu of the Text To Image and Image To Image tabs. You can also process images directly, using the image action buttons above the current image display or in the viewer.", @@ -125,6 +128,8 @@ "random": "Random", "reportBugLabel": "Report Bug", "safetensors": "Safetensors", + "save": "Save", + "saveAs": "Save As", "settingsLabel": "Settings", "simple": "Simple", "somethingWentWrong": "Something went wrong", @@ -161,8 +166,12 @@ "txt2img": "Text To Image", "unifiedCanvas": "Unified Canvas", "unknown": "Unknown", - "unknownError": "Unknown Error", - "upload": "Upload" + "upload": "Upload", + "updated": "Updated", + "created": "Created", + "prevPage": "Previous Page", + "nextPage": "Next Page", + "unknownError": "Unknown Error" }, "controlnet": { "controlAdapter_one": "Control Adapter", @@ -940,9 +949,9 @@ "problemSettingTitle": "Problem Setting Title", "reloadNodeTemplates": "Reload Node Templates", "removeLinearView": "Remove from Linear View", - "resetWorkflow": "Reset Workflow", - "resetWorkflowDesc": "Are you sure you want to reset this workflow?", - "resetWorkflowDesc2": "Resetting the workflow will clear all nodes, edges and workflow details.", + "resetWorkflow": "Reset Workflow Editor", + "resetWorkflowDesc": "Are you sure you want to reset the Workflow Editor?", + "resetWorkflowDesc2": "Resetting the Workflow Editor will clear all nodes, edges and workflow details. Saved workflows will not be affected.", "scheduler": "Scheduler", "schedulerDescription": "TODO", "sDXLMainModelField": "SDXL Model", @@ -1269,7 +1278,6 @@ "modelAddedSimple": "Model Added", "modelAddFailed": "Model Add Failed", "nodesBrokenConnections": "Cannot load. Some connections are broken.", - "nodesCleared": "Nodes Cleared", "nodesCorruptedGraph": "Cannot load. Graph seems to be corrupted.", "nodesLoaded": "Nodes Loaded", "nodesLoadedFailed": "Failed To Load Nodes", @@ -1318,7 +1326,10 @@ "uploadFailedInvalidUploadDesc": "Must be single PNG or JPEG image", "uploadFailedUnableToLoadDesc": "Unable to load file", "upscalingFailed": "Upscaling Failed", - "workflowLoaded": "Workflow Loaded" + "workflowLoaded": "Workflow Loaded", + "problemRetrievingWorkflow": "Problem Retrieving Workflow", + "workflowDeleted": "Workflow Deleted", + "problemDeletingWorkflow": "Problem Deleting Workflow" }, "tooltip": { "feature": { @@ -1613,5 +1624,33 @@ "showIntermediates": "Show Intermediates", "snapToGrid": "Snap to Grid", "undo": "Undo" + }, + "workflows": { + "workflows": "Workflows", + "workflowLibrary": "Workflow Library", + "userWorkflows": "My Workflows", + "defaultWorkflows": "Default Workflows", + "openWorkflow": "Open Workflow", + "uploadWorkflow": "Upload Workflow", + "deleteWorkflow": "Delete Workflow", + "unnamedWorkflow": "Unnamed Workflow", + "downloadWorkflow": "Download Workflow", + "saveWorkflow": "Save Workflow", + "saveWorkflowAs": "Save Workflow As", + "problemSavingWorkflow": "Problem Saving Workflow", + "workflowSaved": "Workflow Saved", + "noRecentWorkflows": "No Recent Workflows", + "noUserWorkflows": "No User Workflows", + "noSystemWorkflows": "No System Workflows", + "problemLoading": "Problem Loading Workflows", + "loading": "Loading Workflows", + "noDescription": "No description", + "searchWorkflows": "Search Workflows", + "clearWorkflowSearchFilter": "Clear Workflow Search Filter", + "workflowName": "Workflow Name", + "workflowEditorReset": "Workflow Editor Reset" + }, + "app": { + "storeNotInitialized": "Store is not initialized" } } diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts index b9b1060f18..dce4835418 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts @@ -3,6 +3,7 @@ import { buildNodesGraph } from 'features/nodes/util/graph/buildNodesGraph'; import { queueApi } from 'services/api/endpoints/queue'; import { BatchConfig } from 'services/api/types'; import { startAppListening } from '..'; +import { buildWorkflow } from 'features/nodes/util/workflow/buildWorkflow'; export const addEnqueueRequestedNodes = () => { startAppListening({ @@ -10,10 +11,18 @@ export const addEnqueueRequestedNodes = () => { enqueueRequested.match(action) && action.payload.tabName === 'nodes', effect: async (action, { getState, dispatch }) => { const state = getState(); + const { nodes, edges } = state.nodes; + const workflow = state.workflow; const graph = buildNodesGraph(state.nodes); + const builtWorkflow = buildWorkflow({ + nodes, + edges, + workflow, + }); const batchConfig: BatchConfig = { batch: { graph, + workflow: builtWorkflow, runs: state.generation.iterations, }, prepend: action.payload.prepend, diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts index 584ec18f26..0ea5caf1d6 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts @@ -11,13 +11,11 @@ import { TypesafeDroppableData, } from 'features/dnd/types'; import { imageSelected } from 'features/gallery/store/gallerySlice'; -import { - fieldImageValueChanged, - workflowExposedFieldAdded, -} from 'features/nodes/store/nodesSlice'; +import { fieldImageValueChanged } from 'features/nodes/store/nodesSlice'; import { initialImageChanged } from 'features/parameters/store/generationSlice'; import { imagesApi } from 'services/api/endpoints/images'; import { startAppListening } from '../'; +import { workflowExposedFieldAdded } from 'features/nodes/store/workflowSlice'; export const dndDropped = createAction<{ overData: TypesafeDroppableData; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts index bd677ca6f1..3dff9a906b 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts @@ -1,7 +1,7 @@ import { logger } from 'app/logging/logger'; import { parseify } from 'common/util/serialize'; import { workflowLoadRequested } from 'features/nodes/store/actions'; -import { workflowLoaded } from 'features/nodes/store/nodesSlice'; +import { workflowLoaded } from 'features/nodes/store/actions'; import { $flow } from 'features/nodes/store/reactFlowInstance'; import { WorkflowMigrationError, @@ -21,7 +21,7 @@ export const addWorkflowLoadRequestedListener = () => { actionCreator: workflowLoadRequested, effect: (action, { dispatch, getState }) => { const log = logger('nodes'); - const workflow = action.payload; + const { workflow, asCopy } = action.payload; const nodeTemplates = getState().nodes.nodeTemplates; try { @@ -29,6 +29,12 @@ export const addWorkflowLoadRequestedListener = () => { workflow, nodeTemplates ); + + if (asCopy) { + // If we're loading a copy, we need to remove the ID so that the backend will create a new workflow + delete validatedWorkflow.id; + } + dispatch(workflowLoaded(validatedWorkflow)); if (!warnings.length) { dispatch( @@ -99,7 +105,6 @@ export const addWorkflowLoadRequestedListener = () => { ); } else { // Some other error occurred - console.log(e); log.error( { error: parseify(e) }, t('nodes.unknownErrorValidatingWorkflow') diff --git a/invokeai/frontend/web/src/app/store/nanostores/store.ts b/invokeai/frontend/web/src/app/store/nanostores/store.ts index c9f041fa5d..4e16245c6c 100644 --- a/invokeai/frontend/web/src/app/store/nanostores/store.ts +++ b/invokeai/frontend/web/src/app/store/nanostores/store.ts @@ -1,5 +1,6 @@ -import { Store } from '@reduxjs/toolkit'; +import { createStore } from 'app/store/store'; import { atom } from 'nanostores'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const $store = atom | undefined>(); +export const $store = atom< + Readonly> | undefined +>(); diff --git a/invokeai/frontend/web/src/app/store/store.ts b/invokeai/frontend/web/src/app/store/store.ts index 0ea3829c66..3134d914e8 100644 --- a/invokeai/frontend/web/src/app/store/store.ts +++ b/invokeai/frontend/web/src/app/store/store.ts @@ -14,6 +14,7 @@ import galleryReducer from 'features/gallery/store/gallerySlice'; import loraReducer from 'features/lora/store/loraSlice'; import modelmanagerReducer from 'features/modelManager/store/modelManagerSlice'; import nodesReducer from 'features/nodes/store/nodesSlice'; +import workflowReducer from 'features/nodes/store/workflowSlice'; import generationReducer from 'features/parameters/store/generationSlice'; import postprocessingReducer from 'features/parameters/store/postprocessingSlice'; import queueReducer from 'features/queue/store/queueSlice'; @@ -22,9 +23,11 @@ import configReducer from 'features/system/store/configSlice'; import systemReducer from 'features/system/store/systemSlice'; import hotkeysReducer from 'features/ui/store/hotkeysSlice'; import uiReducer from 'features/ui/store/uiSlice'; +import { createStore as createIDBKeyValStore, get, set } from 'idb-keyval'; import dynamicMiddlewares from 'redux-dynamic-middlewares'; import { Driver, rememberEnhancer, rememberReducer } from 'redux-remember'; import { api } from 'services/api'; +import { authToastMiddleware } from 'services/api/authToastMiddleware'; import { STORAGE_PREFIX } from './constants'; import { serialize } from './enhancers/reduxRemember/serialize'; import { unserialize } from './enhancers/reduxRemember/unserialize'; @@ -32,8 +35,6 @@ import { actionSanitizer } from './middleware/devtools/actionSanitizer'; import { actionsDenylist } from './middleware/devtools/actionsDenylist'; import { stateSanitizer } from './middleware/devtools/stateSanitizer'; import { listenerMiddleware } from './middleware/listenerMiddleware'; -import { createStore as createIDBKeyValStore, get, set } from 'idb-keyval'; -import { authToastMiddleware } from 'services/api/authToastMiddleware'; const allReducers = { canvas: canvasReducer, @@ -53,6 +54,7 @@ const allReducers = { modelmanager: modelmanagerReducer, sdxl: sdxlReducer, queue: queueReducer, + workflow: workflowReducer, [api.reducerPath]: api.reducer, }; @@ -66,6 +68,7 @@ const rememberedKeys: (keyof typeof allReducers)[] = [ 'generation', 'sdxl', 'nodes', + 'workflow', 'postprocessing', 'system', 'ui', diff --git a/invokeai/frontend/web/src/app/types/invokeai.ts b/invokeai/frontend/web/src/app/types/invokeai.ts index 0fe7a36052..7e4cfb39aa 100644 --- a/invokeai/frontend/web/src/app/types/invokeai.ts +++ b/invokeai/frontend/web/src/app/types/invokeai.ts @@ -23,7 +23,8 @@ export type AppFeature = | 'resumeQueue' | 'prependQueue' | 'invocationCache' - | 'bulkDownload'; + | 'bulkDownload' + | 'workflowLibrary'; /** * A disable-able Stable Diffusion feature diff --git a/invokeai/frontend/web/src/common/components/IAIMantineSelect.tsx b/invokeai/frontend/web/src/common/components/IAIMantineSelect.tsx index 9541015b65..c79a85a0c4 100644 --- a/invokeai/frontend/web/src/common/components/IAIMantineSelect.tsx +++ b/invokeai/frontend/web/src/common/components/IAIMantineSelect.tsx @@ -1,4 +1,10 @@ -import { FormControl, FormLabel, Tooltip, forwardRef } from '@chakra-ui/react'; +import { + FormControl, + FormControlProps, + FormLabel, + Tooltip, + forwardRef, +} from '@chakra-ui/react'; import { Select, SelectProps } from '@mantine/core'; import { useMantineSelectStyles } from 'mantine-theme/hooks/useMantineSelectStyles'; import { RefObject, memo } from 'react'; @@ -13,10 +19,19 @@ export type IAISelectProps = Omit & { tooltip?: string | null; inputRef?: RefObject; label?: string; + formControlProps?: FormControlProps; }; const IAIMantineSelect = forwardRef((props: IAISelectProps, ref) => { - const { tooltip, inputRef, label, disabled, required, ...rest } = props; + const { + tooltip, + formControlProps, + inputRef, + label, + disabled, + required, + ...rest + } = props; const styles = useMantineSelectStyles(); @@ -28,6 +43,7 @@ const IAIMantineSelect = forwardRef((props: IAISelectProps, ref) => { isDisabled={disabled} position="static" data-testid={`select-${label || props.placeholder}`} + {...formControlProps} > {label} + + + + + {t('common.cancel')} + + {t('common.saveAs')} + + + + + + + ); +}; + +export default memo(SaveWorkflowAsButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx new file mode 100644 index 0000000000..2665b9ff07 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx @@ -0,0 +1,21 @@ +import IAIIconButton from 'common/components/IAIIconButton'; +import { useSaveLibraryWorkflow } from 'features/workflowLibrary/hooks/useSaveWorkflow'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaSave } from 'react-icons/fa'; + +const SaveLibraryWorkflowButton = () => { + const { t } = useTranslation(); + const { saveWorkflow, isLoading } = useSaveLibraryWorkflow(); + return ( + } + onClick={saveWorkflow} + isLoading={isLoading} + tooltip={t('workflows.saveWorkflow')} + aria-label={t('workflows.saveWorkflow')} + /> + ); +}; + +export default memo(SaveLibraryWorkflowButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx new file mode 100644 index 0000000000..ee0a8314a0 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx @@ -0,0 +1,26 @@ +import { useDisclosure } from '@chakra-ui/react'; +import IAIIconButton from 'common/components/IAIIconButton'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaFolderOpen } from 'react-icons/fa'; +import WorkflowLibraryModal from './WorkflowLibraryModal'; +import { WorkflowLibraryModalContext } from 'features/workflowLibrary/context/WorkflowLibraryModalContext'; + +const WorkflowLibraryButton = () => { + const { t } = useTranslation(); + const disclosure = useDisclosure(); + + return ( + + } + onClick={disclosure.onOpen} + tooltip={t('workflows.workflowLibrary')} + aria-label={t('workflows.workflowLibrary')} + /> + + + ); +}; + +export default memo(WorkflowLibraryButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryContent.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryContent.tsx new file mode 100644 index 0000000000..cd3dccc464 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryContent.tsx @@ -0,0 +1,13 @@ +import WorkflowLibraryList from 'features/workflowLibrary/components/WorkflowLibraryList'; +import WorkflowLibraryListWrapper from 'features/workflowLibrary/components/WorkflowLibraryListWrapper'; +import { memo } from 'react'; + +const WorkflowLibraryContent = () => { + return ( + + + + ); +}; + +export default memo(WorkflowLibraryContent); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryList.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryList.tsx new file mode 100644 index 0000000000..02f642a099 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryList.tsx @@ -0,0 +1,242 @@ +import { CloseIcon } from '@chakra-ui/icons'; +import { + ButtonGroup, + Divider, + Flex, + IconButton, + Input, + InputGroup, + InputRightElement, + Spacer, +} from '@chakra-ui/react'; +import { SelectItem } from '@mantine/core'; +import IAIButton from 'common/components/IAIButton'; +import { + IAINoContentFallback, + IAINoContentFallbackWithSpinner, +} from 'common/components/IAIImageFallback'; +import IAIMantineSelect from 'common/components/IAIMantineSelect'; +import ScrollableContent from 'features/nodes/components/sidePanel/ScrollableContent'; +import { WorkflowCategory } from 'features/nodes/types/workflow'; +import WorkflowLibraryListItem from 'features/workflowLibrary/components/WorkflowLibraryListItem'; +import WorkflowLibraryPagination from 'features/workflowLibrary/components/WorkflowLibraryPagination'; +import { + ChangeEvent, + KeyboardEvent, + memo, + useCallback, + useMemo, + useState, +} from 'react'; +import { useTranslation } from 'react-i18next'; +import { useListWorkflowsQuery } from 'services/api/endpoints/workflows'; +import { SQLiteDirection, WorkflowRecordOrderBy } from 'services/api/types'; +import { useDebounce } from 'use-debounce'; + +const PER_PAGE = 10; + +const ORDER_BY_DATA: SelectItem[] = [ + { value: 'opened_at', label: 'Opened' }, + { value: 'created_at', label: 'Created' }, + { value: 'updated_at', label: 'Updated' }, + { value: 'name', label: 'Name' }, +]; + +const DIRECTION_DATA: SelectItem[] = [ + { value: 'ASC', label: 'Ascending' }, + { value: 'DESC', label: 'Descending' }, +]; + +const WorkflowLibraryList = () => { + const { t } = useTranslation(); + const [category, setCategory] = useState('user'); + const [page, setPage] = useState(0); + const [query, setQuery] = useState(''); + const [order_by, setOrderBy] = useState('opened_at'); + const [direction, setDirection] = useState('ASC'); + const [debouncedQuery] = useDebounce(query, 500); + + const queryArg = useMemo[0]>(() => { + if (category === 'user') { + return { + page, + per_page: PER_PAGE, + order_by, + direction, + category, + query: debouncedQuery, + }; + } + return { + page, + per_page: PER_PAGE, + order_by: 'name' as const, + direction: 'ASC' as const, + category, + query: debouncedQuery, + }; + }, [category, debouncedQuery, direction, order_by, page]); + + const { data, isLoading, isError, isFetching } = + useListWorkflowsQuery(queryArg); + + const handleChangeOrderBy = useCallback( + (value: string | null) => { + if (!value || value === order_by) { + return; + } + setOrderBy(value as WorkflowRecordOrderBy); + setPage(0); + }, + [order_by] + ); + + const handleChangeDirection = useCallback( + (value: string | null) => { + if (!value || value === direction) { + return; + } + setDirection(value as SQLiteDirection); + setPage(0); + }, + [direction] + ); + + const resetFilterText = useCallback(() => { + setQuery(''); + setPage(0); + }, []); + + const handleKeydownFilterText = useCallback( + (e: KeyboardEvent) => { + // exit search mode on escape + if (e.key === 'Escape') { + resetFilterText(); + e.preventDefault(); + setPage(0); + } + }, + [resetFilterText] + ); + + const handleChangeFilterText = useCallback( + (e: ChangeEvent) => { + setQuery(e.target.value); + setPage(0); + }, + [] + ); + + const handleSetUserCategory = useCallback(() => { + setCategory('user'); + setPage(0); + }, []); + + const handleSetDefaultCategory = useCallback(() => { + setCategory('default'); + setPage(0); + }, []); + + return ( + <> + + + + {t('workflows.userWorkflows')} + + + {t('workflows.defaultWorkflows')} + + + + {category === 'user' && ( + <> + + + + )} + + + {query.trim().length && ( + + } + /> + + )} + + + + {isLoading ? ( + + ) : !data || isError ? ( + + ) : data.items.length ? ( + + + {data.items.map((w) => ( + + ))} + + + ) : ( + + )} + + {data && ( + + + + )} + + ); +}; + +export default memo(WorkflowLibraryList); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx new file mode 100644 index 0000000000..f8481ded83 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx @@ -0,0 +1,94 @@ +import { Flex, Heading, Spacer, Text } from '@chakra-ui/react'; +import IAIButton from 'common/components/IAIButton'; +import dateFormat, { masks } from 'dateformat'; +import { useDeleteLibraryWorkflow } from 'features/workflowLibrary/hooks/useDeleteLibraryWorkflow'; +import { useGetAndLoadLibraryWorkflow } from 'features/workflowLibrary/hooks/useGetAndLoadLibraryWorkflow'; +import { useWorkflowLibraryModalContext } from 'features/workflowLibrary/context/useWorkflowLibraryModalContext'; +import { memo, useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { WorkflowRecordListItemDTO } from 'services/api/types'; + +type Props = { + workflowDTO: WorkflowRecordListItemDTO; +}; + +const WorkflowLibraryListItem = ({ workflowDTO }: Props) => { + const { t } = useTranslation(); + const { onClose } = useWorkflowLibraryModalContext(); + const { deleteWorkflow, deleteWorkflowResult } = useDeleteLibraryWorkflow({}); + const { getAndLoadWorkflow, getAndLoadWorkflowResult } = + useGetAndLoadLibraryWorkflow({ onSuccess: onClose }); + + const handleDeleteWorkflow = useCallback(() => { + deleteWorkflow(workflowDTO.workflow_id); + }, [deleteWorkflow, workflowDTO.workflow_id]); + + const handleGetAndLoadWorkflow = useCallback(() => { + getAndLoadWorkflow(workflowDTO.workflow_id); + }, [getAndLoadWorkflow, workflowDTO.workflow_id]); + + return ( + + + + + + {workflowDTO.name || t('workflows.unnamedWorkflow')} + + + {workflowDTO.category === 'user' && ( + + {t('common.updated')}:{' '} + {dateFormat(workflowDTO.updated_at, masks.shortDate)}{' '} + {dateFormat(workflowDTO.updated_at, masks.shortTime)} + + )} + + + {workflowDTO.description ? ( + + {workflowDTO.description} + + ) : ( + + {t('workflows.noDescription')} + + )} + + {workflowDTO.category === 'user' && ( + + {t('common.created')}:{' '} + {dateFormat(workflowDTO.created_at, masks.shortDate)}{' '} + {dateFormat(workflowDTO.created_at, masks.shortTime)} + + )} + + + + {t('common.load')} + + {workflowDTO.category === 'user' && ( + + {t('common.delete')} + + )} + + + ); +}; + +export default memo(WorkflowLibraryListItem); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListWrapper.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListWrapper.tsx new file mode 100644 index 0000000000..7dfdac9c4c --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListWrapper.tsx @@ -0,0 +1,21 @@ +import { Flex } from '@chakra-ui/react'; +import { PropsWithChildren, memo } from 'react'; + +const WorkflowLibraryListWrapper = (props: PropsWithChildren) => { + return ( + + {props.children} + + ); +}; + +export default memo(WorkflowLibraryListWrapper); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryModal.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryModal.tsx new file mode 100644 index 0000000000..cd0c905788 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryModal.tsx @@ -0,0 +1,40 @@ +import { + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, +} from '@chakra-ui/react'; +import WorkflowLibraryContent from 'features/workflowLibrary/components/WorkflowLibraryContent'; +import { useWorkflowLibraryModalContext } from 'features/workflowLibrary/context/useWorkflowLibraryModalContext'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; + +const WorkflowLibraryModal = () => { + const { t } = useTranslation(); + const { isOpen, onClose } = useWorkflowLibraryModalContext(); + return ( + + + + {t('workflows.workflowLibrary')} + + + + + + + + ); +}; + +export default memo(WorkflowLibraryModal); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryPagination.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryPagination.tsx new file mode 100644 index 0000000000..57ad04bb36 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryPagination.tsx @@ -0,0 +1,87 @@ +import { ButtonGroup } from '@chakra-ui/react'; +import IAIButton from 'common/components/IAIButton'; +import IAIIconButton from 'common/components/IAIIconButton'; +import { Dispatch, SetStateAction, memo, useCallback, useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaChevronLeft, FaChevronRight } from 'react-icons/fa'; +import { paths } from 'services/api/schema'; + +const PAGES_TO_DISPLAY = 7; + +type PageData = { + page: number; + onClick: () => void; +}; + +type Props = { + page: number; + setPage: Dispatch>; + data: paths['/api/v1/workflows/']['get']['responses']['200']['content']['application/json']; +}; + +const WorkflowLibraryPagination = ({ page, setPage, data }: Props) => { + const { t } = useTranslation(); + + const handlePrevPage = useCallback(() => { + setPage((p) => Math.max(p - 1, 0)); + }, [setPage]); + + const handleNextPage = useCallback(() => { + setPage((p) => Math.min(p + 1, data.pages - 1)); + }, [data.pages, setPage]); + + const pages: PageData[] = useMemo(() => { + const pages = []; + let first = + data.pages > PAGES_TO_DISPLAY + ? Math.max(0, page - Math.floor(PAGES_TO_DISPLAY / 2)) + : 0; + const last = + data.pages > PAGES_TO_DISPLAY + ? Math.min(data.pages, first + PAGES_TO_DISPLAY) + : data.pages; + if (last - first < PAGES_TO_DISPLAY && data.pages > PAGES_TO_DISPLAY) { + first = last - PAGES_TO_DISPLAY; + } + for (let i = first; i < last; i++) { + pages.push({ + page: i, + onClick: () => setPage(i), + }); + } + return pages; + }, [data.pages, page, setPage]); + + return ( + + } + /> + {pages.map((p) => ( + + {p.page + 1} + + ))} + } + /> + + ); +}; + +export default memo(WorkflowLibraryPagination); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/context/WorkflowLibraryModalContext.ts b/invokeai/frontend/web/src/features/workflowLibrary/context/WorkflowLibraryModalContext.ts new file mode 100644 index 0000000000..88c1f565ee --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/context/WorkflowLibraryModalContext.ts @@ -0,0 +1,5 @@ +import { UseDisclosureReturn } from '@chakra-ui/react'; +import { createContext } from 'react'; + +export const WorkflowLibraryModalContext = + createContext(null); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/context/useWorkflowLibraryModalContext.ts b/invokeai/frontend/web/src/features/workflowLibrary/context/useWorkflowLibraryModalContext.ts new file mode 100644 index 0000000000..11b0771643 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/context/useWorkflowLibraryModalContext.ts @@ -0,0 +1,12 @@ +import { WorkflowLibraryModalContext } from 'features/workflowLibrary/context/WorkflowLibraryModalContext'; +import { useContext } from 'react'; + +export const useWorkflowLibraryModalContext = () => { + const context = useContext(WorkflowLibraryModalContext); + if (!context) { + throw new Error( + 'useWorkflowLibraryContext must be used within a WorkflowLibraryContext.Provider' + ); + } + return context; +}; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useDeleteLibraryWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useDeleteLibraryWorkflow.ts new file mode 100644 index 0000000000..bf518fe409 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useDeleteLibraryWorkflow.ts @@ -0,0 +1,48 @@ +import { useAppToaster } from 'app/components/Toaster'; +import { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useDeleteWorkflowMutation } from 'services/api/endpoints/workflows'; + +type UseDeleteLibraryWorkflowOptions = { + onSuccess?: () => void; + onError?: () => void; +}; + +type UseDeleteLibraryWorkflowReturn = { + deleteWorkflow: (workflow_id: string) => Promise; + deleteWorkflowResult: ReturnType[1]; +}; + +type UseDeleteLibraryWorkflow = ( + arg: UseDeleteLibraryWorkflowOptions +) => UseDeleteLibraryWorkflowReturn; + +export const useDeleteLibraryWorkflow: UseDeleteLibraryWorkflow = ({ + onSuccess, + onError, +}) => { + const toaster = useAppToaster(); + const { t } = useTranslation(); + const [_deleteWorkflow, deleteWorkflowResult] = useDeleteWorkflowMutation(); + + const deleteWorkflow = useCallback( + async (workflow_id: string) => { + try { + await _deleteWorkflow(workflow_id).unwrap(); + toaster({ + title: t('toast.workflowDeleted'), + }); + onSuccess && onSuccess(); + } catch { + toaster({ + title: t('toast.problemDeletingWorkflow'), + status: 'error', + }); + onError && onError(); + } + }, + [_deleteWorkflow, toaster, t, onSuccess, onError] + ); + + return { deleteWorkflow, deleteWorkflowResult }; +}; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadEmbeddedWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadEmbeddedWorkflow.ts new file mode 100644 index 0000000000..a1292fce55 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadEmbeddedWorkflow.ts @@ -0,0 +1,54 @@ +import { useAppToaster } from 'app/components/Toaster'; +import { useAppDispatch } from 'app/store/storeHooks'; +import { workflowLoadRequested } from 'features/nodes/store/actions'; +import { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useLazyGetImageWorkflowQuery } from 'services/api/endpoints/images'; + +type UseGetAndLoadEmbeddedWorkflowOptions = { + onSuccess?: () => void; + onError?: () => void; +}; + +type UseGetAndLoadEmbeddedWorkflowReturn = { + getAndLoadEmbeddedWorkflow: (imageName: string) => Promise; + getAndLoadEmbeddedWorkflowResult: ReturnType< + typeof useLazyGetImageWorkflowQuery + >[1]; +}; + +type UseGetAndLoadEmbeddedWorkflow = ( + options: UseGetAndLoadEmbeddedWorkflowOptions +) => UseGetAndLoadEmbeddedWorkflowReturn; + +export const useGetAndLoadEmbeddedWorkflow: UseGetAndLoadEmbeddedWorkflow = ({ + onSuccess, + onError, +}) => { + const dispatch = useAppDispatch(); + const toaster = useAppToaster(); + const { t } = useTranslation(); + const [_getAndLoadEmbeddedWorkflow, getAndLoadEmbeddedWorkflowResult] = + useLazyGetImageWorkflowQuery(); + const getAndLoadEmbeddedWorkflow = useCallback( + async (imageName: string) => { + try { + const workflow = await _getAndLoadEmbeddedWorkflow(imageName); + dispatch( + workflowLoadRequested({ workflow: workflow.data, asCopy: true }) + ); + // No toast - the listener for this action does that after the workflow is loaded + onSuccess && onSuccess(); + } catch { + toaster({ + title: t('toast.problemRetrievingWorkflow'), + status: 'error', + }); + onError && onError(); + } + }, + [_getAndLoadEmbeddedWorkflow, dispatch, onSuccess, toaster, t, onError] + ); + + return { getAndLoadEmbeddedWorkflow, getAndLoadEmbeddedWorkflowResult }; +}; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadLibraryWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadLibraryWorkflow.ts new file mode 100644 index 0000000000..27de12789a --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useGetAndLoadLibraryWorkflow.ts @@ -0,0 +1,52 @@ +import { useAppToaster } from 'app/components/Toaster'; +import { useAppDispatch } from 'app/store/storeHooks'; +import { workflowLoadRequested } from 'features/nodes/store/actions'; +import { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useLazyGetWorkflowQuery } from 'services/api/endpoints/workflows'; + +type UseGetAndLoadLibraryWorkflowOptions = { + onSuccess?: () => void; + onError?: () => void; +}; + +type UseGetAndLoadLibraryWorkflowReturn = { + getAndLoadWorkflow: (workflow_id: string) => Promise; + getAndLoadWorkflowResult: ReturnType[1]; +}; + +type UseGetAndLoadLibraryWorkflow = ( + arg: UseGetAndLoadLibraryWorkflowOptions +) => UseGetAndLoadLibraryWorkflowReturn; + +export const useGetAndLoadLibraryWorkflow: UseGetAndLoadLibraryWorkflow = ({ + onSuccess, + onError, +}) => { + const dispatch = useAppDispatch(); + const toaster = useAppToaster(); + const { t } = useTranslation(); + const [_getAndLoadWorkflow, getAndLoadWorkflowResult] = + useLazyGetWorkflowQuery(); + const getAndLoadWorkflow = useCallback( + async (workflow_id: string) => { + try { + const data = await _getAndLoadWorkflow(workflow_id).unwrap(); + dispatch( + workflowLoadRequested({ workflow: data.workflow, asCopy: false }) + ); + // No toast - the listener for this action does that after the workflow is loaded + onSuccess && onSuccess(); + } catch { + toaster({ + title: t('toast.problemRetrievingWorkflow'), + status: 'error', + }); + onError && onError(); + } + }, + [_getAndLoadWorkflow, dispatch, onSuccess, toaster, t, onError] + ); + + return { getAndLoadWorkflow, getAndLoadWorkflowResult }; +}; diff --git a/invokeai/frontend/web/src/features/nodes/hooks/useLoadWorkflowFromFile.tsx b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useLoadWorkflowFromFile.tsx similarity index 60% rename from invokeai/frontend/web/src/features/nodes/hooks/useLoadWorkflowFromFile.tsx rename to invokeai/frontend/web/src/features/workflowLibrary/hooks/useLoadWorkflowFromFile.tsx index 03a7f5e824..43369d9b4f 100644 --- a/invokeai/frontend/web/src/features/nodes/hooks/useLoadWorkflowFromFile.tsx +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useLoadWorkflowFromFile.tsx @@ -1,15 +1,22 @@ -import { ListItem, Text, UnorderedList } from '@chakra-ui/react'; import { useLogger } from 'app/logging/useLogger'; import { useAppDispatch } from 'app/store/storeHooks'; +import { workflowLoadRequested } from 'features/nodes/store/actions'; import { addToast } from 'features/system/store/systemSlice'; import { makeToast } from 'features/system/util/makeToast'; -import { RefObject, memo, useCallback } from 'react'; +import { RefObject, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; -import { ZodError } from 'zod'; -import { fromZodIssue } from 'zod-validation-error'; -import { workflowLoadRequested } from 'features/nodes/store/actions'; -export const useLoadWorkflowFromFile = (resetRef: RefObject<() => void>) => { +type useLoadWorkflowFromFileOptions = { + resetRef: RefObject<() => void>; +}; + +type UseLoadWorkflowFromFile = ( + options: useLoadWorkflowFromFileOptions +) => (file: File | null) => void; + +export const useLoadWorkflowFromFile: UseLoadWorkflowFromFile = ({ + resetRef, +}) => { const dispatch = useAppDispatch(); const logger = useLogger('nodes'); const { t } = useTranslation(); @@ -24,7 +31,9 @@ export const useLoadWorkflowFromFile = (resetRef: RefObject<() => void>) => { try { const parsedJSON = JSON.parse(String(rawJSON)); - dispatch(workflowLoadRequested(parsedJSON)); + dispatch( + workflowLoadRequested({ workflow: parsedJSON, asCopy: true }) + ); } catch (e) { // There was a problem reading the file logger.error(t('nodes.unableToLoadWorkflow')); @@ -41,6 +50,7 @@ export const useLoadWorkflowFromFile = (resetRef: RefObject<() => void>) => { }; reader.readAsText(file); + // Reset the file picker internal state so that the same file can be loaded again resetRef.current?.(); }, @@ -49,24 +59,3 @@ export const useLoadWorkflowFromFile = (resetRef: RefObject<() => void>) => { return loadWorkflowFromFile; }; - -const WorkflowValidationErrorContent = memo((props: { error: ZodError }) => { - if (props.error.issues[0]) { - return ( - - {fromZodIssue(props.error.issues[0], { prefix: null }).toString()} - - ); - } - return ( - - {props.error.issues.map((issue, i) => ( - - {fromZodIssue(issue, { prefix: null }).toString()} - - ))} - - ); -}); - -WorkflowValidationErrorContent.displayName = 'WorkflowValidationErrorContent'; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts new file mode 100644 index 0000000000..a177706f0d --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts @@ -0,0 +1,61 @@ +import { useAppToaster } from 'app/components/Toaster'; +import { useAppDispatch } from 'app/store/storeHooks'; +import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; +import { workflowLoaded } from 'features/nodes/store/actions'; +import { zWorkflowV2 } from 'features/nodes/types/workflow'; +import { getWorkflowCopyName } from 'features/workflowLibrary/util/getWorkflowCopyName'; +import { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { + useCreateWorkflowMutation, + useUpdateWorkflowMutation, +} from 'services/api/endpoints/workflows'; + +type UseSaveLibraryWorkflowReturn = { + saveWorkflow: () => Promise; + isLoading: boolean; + isError: boolean; +}; + +type UseSaveLibraryWorkflow = () => UseSaveLibraryWorkflowReturn; + +export const useSaveLibraryWorkflow: UseSaveLibraryWorkflow = () => { + const { t } = useTranslation(); + const dispatch = useAppDispatch(); + const workflow = useWorkflow(); + const [updateWorkflow, updateWorkflowResult] = useUpdateWorkflowMutation(); + const [createWorkflow, createWorkflowResult] = useCreateWorkflowMutation(); + const toaster = useAppToaster(); + const saveWorkflow = useCallback(async () => { + try { + if (workflow.id) { + const data = await updateWorkflow(workflow).unwrap(); + const updatedWorkflow = zWorkflowV2.parse(data.workflow); + dispatch(workflowLoaded(updatedWorkflow)); + toaster({ + title: t('workflows.workflowSaved'), + status: 'success', + }); + } else { + const data = await createWorkflow(workflow).unwrap(); + const createdWorkflow = zWorkflowV2.parse(data.workflow); + createdWorkflow.name = getWorkflowCopyName(createdWorkflow.name); + dispatch(workflowLoaded(createdWorkflow)); + toaster({ + title: t('workflows.workflowSaved'), + status: 'success', + }); + } + } catch (e) { + toaster({ + title: t('workflows.problemSavingWorkflow'), + status: 'error', + }); + } + }, [workflow, updateWorkflow, dispatch, toaster, t, createWorkflow]); + return { + saveWorkflow, + isLoading: updateWorkflowResult.isLoading || createWorkflowResult.isLoading, + isError: updateWorkflowResult.isError || createWorkflowResult.isError, + }; +}; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts new file mode 100644 index 0000000000..e0b08ed985 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts @@ -0,0 +1,58 @@ +import { useAppToaster } from 'app/components/Toaster'; +import { useAppDispatch } from 'app/store/storeHooks'; +import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; +import { workflowLoaded } from 'features/nodes/store/actions'; +import { zWorkflowV2 } from 'features/nodes/types/workflow'; +import { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useCreateWorkflowMutation } from 'services/api/endpoints/workflows'; + +type SaveWorkflowAsArg = { + name: string; + onSuccess?: () => void; + onError?: () => void; +}; + +type UseSaveWorkflowAsReturn = { + saveWorkflowAs: (arg: SaveWorkflowAsArg) => Promise; + isLoading: boolean; + isError: boolean; +}; + +type UseSaveWorkflowAs = () => UseSaveWorkflowAsReturn; + +export const useSaveWorkflowAs: UseSaveWorkflowAs = () => { + const { t } = useTranslation(); + const dispatch = useAppDispatch(); + const workflow = useWorkflow(); + const [createWorkflow, createWorkflowResult] = useCreateWorkflowMutation(); + const toaster = useAppToaster(); + const saveWorkflowAs = useCallback( + async ({ name: newName, onSuccess, onError }: SaveWorkflowAsArg) => { + try { + workflow.id = undefined; + workflow.name = newName; + const data = await createWorkflow(workflow).unwrap(); + const createdWorkflow = zWorkflowV2.parse(data.workflow); + dispatch(workflowLoaded(createdWorkflow)); + onSuccess && onSuccess(); + toaster({ + title: t('workflows.workflowSaved'), + status: 'success', + }); + } catch (e) { + onError && onError(); + toaster({ + title: t('workflows.problemSavingWorkflow'), + status: 'error', + }); + } + }, + [workflow, dispatch, toaster, t, createWorkflow] + ); + return { + saveWorkflowAs, + isLoading: createWorkflowResult.isLoading, + isError: createWorkflowResult.isError, + }; +}; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/util/getWorkflowCopyName.ts b/invokeai/frontend/web/src/features/workflowLibrary/util/getWorkflowCopyName.ts new file mode 100644 index 0000000000..b5d990bb49 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/util/getWorkflowCopyName.ts @@ -0,0 +1,2 @@ +export const getWorkflowCopyName = (name: string): string => + `${name.trim()} (copy)`; diff --git a/invokeai/frontend/web/src/services/api/endpoints/images.ts b/invokeai/frontend/web/src/services/api/endpoints/images.ts index e261402837..f98bfd2c4a 100644 --- a/invokeai/frontend/web/src/services/api/endpoints/images.ts +++ b/invokeai/frontend/web/src/services/api/endpoints/images.ts @@ -9,7 +9,6 @@ import { } from 'features/gallery/store/types'; import { CoreMetadata, zCoreMetadata } from 'features/nodes/types/metadata'; import { keyBy } from 'lodash-es'; -import { ApiTagDescription, LIST_TAG, api } from '..'; import { components, paths } from 'services/api/schema'; import { DeleteBoardResult, @@ -26,6 +25,7 @@ import { imagesAdapter, imagesSelectors, } from 'services/api/util'; +import { ApiTagDescription, LIST_TAG, api } from '..'; import { boardsApi } from './boards'; import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; @@ -130,6 +130,16 @@ export const imagesApi = api.injectEndpoints({ }, keepUnusedDataFor: 86400, // 24 hours }), + getImageWorkflow: build.query< + paths['/api/v1/images/i/{image_name}/workflow']['get']['responses']['200']['content']['application/json'], + string + >({ + query: (image_name) => ({ url: `images/i/${image_name}/workflow` }), + providesTags: (result, error, image_name) => [ + { type: 'ImageWorkflow', id: image_name }, + ], + keepUnusedDataFor: 86400, // 24 hours + }), deleteImage: build.mutation({ query: ({ image_name }) => ({ url: `images/i/${image_name}`, @@ -1572,6 +1582,8 @@ export const { useLazyListImagesQuery, useGetImageDTOQuery, useGetImageMetadataQuery, + useGetImageWorkflowQuery, + useLazyGetImageWorkflowQuery, useDeleteImageMutation, useDeleteImagesMutation, useUploadImageMutation, diff --git a/invokeai/frontend/web/src/services/api/endpoints/workflows.ts b/invokeai/frontend/web/src/services/api/endpoints/workflows.ts index e056d63119..53552b78b1 100644 --- a/invokeai/frontend/web/src/services/api/endpoints/workflows.ts +++ b/invokeai/frontend/web/src/services/api/endpoints/workflows.ts @@ -1,30 +1,87 @@ -import { logger } from 'app/logging/logger'; -import { WorkflowV2, zWorkflowV2 } from 'features/nodes/types/workflow'; -import { api } from '..'; import { paths } from 'services/api/schema'; +import { LIST_TAG, api } from '..'; export const workflowsApi = api.injectEndpoints({ endpoints: (build) => ({ - getWorkflow: build.query({ + getWorkflow: build.query< + paths['/api/v1/workflows/i/{workflow_id}']['get']['responses']['200']['content']['application/json'], + string + >({ query: (workflow_id) => `workflows/i/${workflow_id}`, providesTags: (result, error, workflow_id) => [ { type: 'Workflow', id: workflow_id }, ], - transformResponse: ( - response: paths['/api/v1/workflows/i/{workflow_id}']['get']['responses']['200']['content']['application/json'] - ) => { - if (response) { - const result = zWorkflowV2.safeParse(response); - if (result.success) { - return result.data; - } else { - logger('images').warn('Problem parsing workflow'); - } + onQueryStarted: async (arg, api) => { + const { dispatch, queryFulfilled } = api; + try { + await queryFulfilled; + dispatch( + workflowsApi.util.invalidateTags([ + { type: 'WorkflowsRecent', id: LIST_TAG }, + ]) + ); + } catch { + // no-op } - return; }, }), + deleteWorkflow: build.mutation({ + query: (workflow_id) => ({ + url: `workflows/i/${workflow_id}`, + method: 'DELETE', + }), + invalidatesTags: (result, error, workflow_id) => [ + { type: 'Workflow', id: LIST_TAG }, + { type: 'Workflow', id: workflow_id }, + { type: 'WorkflowsRecent', id: LIST_TAG }, + ], + }), + createWorkflow: build.mutation< + paths['/api/v1/workflows/']['post']['responses']['200']['content']['application/json'], + paths['/api/v1/workflows/']['post']['requestBody']['content']['application/json']['workflow'] + >({ + query: (workflow) => ({ + url: 'workflows/', + method: 'POST', + body: { workflow }, + }), + invalidatesTags: [ + { type: 'Workflow', id: LIST_TAG }, + { type: 'WorkflowsRecent', id: LIST_TAG }, + ], + }), + updateWorkflow: build.mutation< + paths['/api/v1/workflows/i/{workflow_id}']['patch']['responses']['200']['content']['application/json'], + paths['/api/v1/workflows/i/{workflow_id}']['patch']['requestBody']['content']['application/json']['workflow'] + >({ + query: (workflow) => ({ + url: `workflows/i/${workflow.id}`, + method: 'PATCH', + body: { workflow }, + }), + invalidatesTags: (response, error, workflow) => [ + { type: 'WorkflowsRecent', id: LIST_TAG }, + { type: 'Workflow', id: LIST_TAG }, + { type: 'Workflow', id: workflow.id }, + ], + }), + listWorkflows: build.query< + paths['/api/v1/workflows/']['get']['responses']['200']['content']['application/json'], + NonNullable + >({ + query: (params) => ({ + url: 'workflows/', + params, + }), + providesTags: [{ type: 'Workflow', id: LIST_TAG }], + }), }), }); -export const { useGetWorkflowQuery } = workflowsApi; +export const { + useLazyGetWorkflowQuery, + useCreateWorkflowMutation, + useDeleteWorkflowMutation, + useUpdateWorkflowMutation, + useListWorkflowsQuery, +} = workflowsApi; diff --git a/invokeai/frontend/web/src/services/api/hooks/useDebouncedWorkflow.ts b/invokeai/frontend/web/src/services/api/hooks/useDebouncedWorkflow.ts deleted file mode 100644 index 20c6d2d6c6..0000000000 --- a/invokeai/frontend/web/src/services/api/hooks/useDebouncedWorkflow.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { skipToken } from '@reduxjs/toolkit/query'; -import { useAppSelector } from 'app/store/storeHooks'; -import { useDebounce } from 'use-debounce'; -import { useGetWorkflowQuery } from 'services/api/endpoints/workflows'; - -export const useDebouncedWorkflow = (workflowId?: string | null) => { - const workflowFetchDebounce = useAppSelector( - (state) => state.config.workflowFetchDebounce - ); - - const [debouncedWorkflowID] = useDebounce( - workflowId, - workflowFetchDebounce ?? 0 - ); - - const { data: workflow, isLoading } = useGetWorkflowQuery( - debouncedWorkflowID ?? skipToken - ); - - return { workflow, isLoading }; -}; diff --git a/invokeai/frontend/web/src/services/api/index.ts b/invokeai/frontend/web/src/services/api/index.ts index f824afed1f..83d5232963 100644 --- a/invokeai/frontend/web/src/services/api/index.ts +++ b/invokeai/frontend/web/src/services/api/index.ts @@ -20,6 +20,7 @@ export const tagTypes = [ 'ImageNameList', 'ImageList', 'ImageMetadata', + 'ImageWorkflow', 'ImageMetadataFromFile', 'IntermediatesCount', 'SessionQueueItem', @@ -40,6 +41,7 @@ export const tagTypes = [ 'LoRAModel', 'SDXLRefinerModel', 'Workflow', + 'WorkflowsRecent', ] as const; export type ApiTagDescription = TagDescription<(typeof tagTypes)[number]>; export const LIST_TAG = 'LIST'; diff --git a/invokeai/frontend/web/src/services/api/schema.d.ts b/invokeai/frontend/web/src/services/api/schema.d.ts index b6b6a0e8be..a0af5e7d1e 100644 --- a/invokeai/frontend/web/src/services/api/schema.d.ts +++ b/invokeai/frontend/web/src/services/api/schema.d.ts @@ -159,6 +159,10 @@ export type paths = { */ get: operations["get_image_metadata"]; }; + "/api/v1/images/i/{image_name}/workflow": { + /** Get Image Workflow */ + get: operations["get_image_workflow"]; + }; "/api/v1/images/i/{image_name}/full": { /** * Get Image Full @@ -415,6 +419,28 @@ export type paths = { * @description Gets a workflow */ get: operations["get_workflow"]; + /** + * Delete Workflow + * @description Deletes a workflow + */ + delete: operations["delete_workflow"]; + /** + * Update Workflow + * @description Updates a workflow + */ + patch: operations["update_workflow"]; + }; + "/api/v1/workflows/": { + /** + * List Workflows + * @description Gets a page of workflows + */ + get: operations["list_workflows"]; + /** + * Create Workflow + * @description Creates a workflow + */ + post: operations["create_workflow"]; }; }; @@ -527,6 +553,8 @@ export type components = { data?: components["schemas"]["BatchDatum"][][] | null; /** @description The graph to initialize the session with */ graph: components["schemas"]["Graph"]; + /** @description The workflow to initialize the session with */ + workflow?: components["schemas"]["WorkflowWithoutID"] | null; /** * Runs * @description Int stating how many times to iterate through all possible batch indices @@ -600,8 +628,6 @@ export type components = { * @description Creates a blank image and forwards it to the pipeline */ BlankImageInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -795,6 +821,11 @@ export type components = { */ batch_ids: string[]; }; + /** Body_create_workflow */ + Body_create_workflow: { + /** @description The workflow to create */ + workflow: components["schemas"]["WorkflowWithoutID"]; + }; /** Body_delete_images_from_list */ Body_delete_images_from_list: { /** @@ -897,6 +928,11 @@ export type components = { */ image_names: string[]; }; + /** Body_update_workflow */ + Body_update_workflow: { + /** @description The updated workflow */ + workflow: components["schemas"]["Workflow"]; + }; /** Body_upload_image */ Body_upload_image: { /** @@ -1110,8 +1146,6 @@ export type components = { CV2InfillInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -1138,6 +1172,79 @@ export type components = { */ type: "infill_cv2"; }; + /** + * Calculate Image Tiles + * @description Calculate the coordinates and overlaps of tiles that cover a target image shape. + */ + CalculateImageTilesInvocation: { + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** + * Image Width + * @description The image width, in pixels, to calculate tiles for. + * @default 1024 + */ + image_width?: number; + /** + * Image Height + * @description The image height, in pixels, to calculate tiles for. + * @default 1024 + */ + image_height?: number; + /** + * Tile Width + * @description The tile width, in pixels. + * @default 576 + */ + tile_width?: number; + /** + * Tile Height + * @description The tile height, in pixels. + * @default 576 + */ + tile_height?: number; + /** + * Overlap + * @description The target overlap, in pixels, between adjacent tiles. Adjacent tiles will overlap by at least this amount + * @default 128 + */ + overlap?: number; + /** + * type + * @default calculate_image_tiles + * @constant + */ + type: "calculate_image_tiles"; + }; + /** CalculateImageTilesOutput */ + CalculateImageTilesOutput: { + /** + * Tiles + * @description The tiles coordinates that cover a particular image shape. + */ + tiles: components["schemas"]["Tile"][]; + /** + * type + * @default calculate_image_tiles_output + * @constant + */ + type: "calculate_image_tiles_output"; + }; /** * CancelByBatchIDsResult * @description Result of canceling by list of batch ids @@ -1154,8 +1261,6 @@ export type components = { * @description Canny edge detection for ControlNet */ CannyImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -1197,7 +1302,7 @@ export type components = { type: "canny_image_processor"; }; /** - * Center Pad or Crop Image + * Paste Image * @description Pad or crop an image's sides from the center by specified pixels. Positive values are outside of the image. */ CenterPadCropInvocation: { @@ -1246,10 +1351,10 @@ export type components = { bottom?: number; /** * type - * @default img_pad_crop + * @default img_paste * @constant */ - type: "img_pad_crop"; + type: "img_paste"; }; /** * ClearResult @@ -1415,8 +1520,6 @@ export type components = { ColorCorrectInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -1523,8 +1626,6 @@ export type components = { * @description Generates a color map from the provided image */ ColorMapImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -1726,8 +1827,6 @@ export type components = { * @description Applies content shuffle processing to image */ ContentShuffleImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -2298,6 +2397,58 @@ export type components = { */ type: "create_denoise_mask"; }; + /** + * Crop Latents + * @description Crops a latent-space tensor to a box specified in image-space. The box dimensions and coordinates must be + * divisible by the latent scale factor of 8. + */ + CropLatentsCoreInvocation: { + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** @description Latents tensor */ + latents?: components["schemas"]["LatentsField"]; + /** + * X + * @description The left x coordinate (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space. + */ + x?: number; + /** + * Y + * @description The top y coordinate (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space. + */ + y?: number; + /** + * Width + * @description The width (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space. + */ + width?: number; + /** + * Height + * @description The height (in px) of the crop rectangle in image space. This value will be converted to a dimension in latent space. + */ + height?: number; + /** + * type + * @default crop_latents + * @constant + */ + type: "crop_latents"; + }; /** CursorPaginatedResults[SessionQueueItemDTO] */ CursorPaginatedResults_SessionQueueItemDTO_: { /** @@ -2321,8 +2472,6 @@ export type components = { * @description Simple inpaint using opencv. */ CvInpaintInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -2600,8 +2749,6 @@ export type components = { ESRGANInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -2686,6 +2833,13 @@ export type components = { */ priority: number; }; + /** ExposedField */ + ExposedField: { + /** Nodeid */ + nodeId: string; + /** Fieldname */ + fieldName: string; + }; /** * FaceIdentifier * @description Outputs an image with detected face IDs printed on each face. For use with other FaceTools. @@ -2693,8 +2847,6 @@ export type components = { FaceIdentifierInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -2740,8 +2892,6 @@ export type components = { FaceMaskInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -2837,8 +2987,6 @@ export type components = { FaceOffInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -3286,7 +3434,7 @@ export type components = { * @description The nodes in this graph */ nodes?: { - [key: string]: components["schemas"]["BlankImageInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SaveImageInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["MaskCombineInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["LinearUIOutputInvocation"] | components["schemas"]["SchedulerInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["FaceOffInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["StringJoinInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["SDXLLoraLoaderInvocation"] | components["schemas"]["LineartImageProcessorInvocation"]; + [key: string]: components["schemas"]["SaveImageInvocation"] | components["schemas"]["StringJoinInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["BlankImageInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["SDXLLoraLoaderInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["MaskCombineInvocation"] | components["schemas"]["FaceOffInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["SchedulerInvocation"] | components["schemas"]["MergeTilesToImageInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["CropLatentsCoreInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["TileToPropertiesInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["PairTileImageInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["CalculateImageTilesInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["LinearUIOutputInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["CannyImageProcessorInvocation"]; }; /** * Edges @@ -3323,7 +3471,7 @@ export type components = { * @description The results of node executions */ results: { - [key: string]: components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["SDXLLoraLoaderOutput"] | components["schemas"]["ONNXModelLoaderOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["String2Output"] | components["schemas"]["ConditioningCollectionOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["VAEOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["IntegerOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["ImageOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["ColorOutput"] | components["schemas"]["UNetOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["T2IAdapterOutput"]; + [key: string]: components["schemas"]["IntegerOutput"] | components["schemas"]["ColorOutput"] | components["schemas"]["T2IAdapterOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["VAEOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["TileToPropertiesOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["UNetOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["String2Output"] | components["schemas"]["PairTileImageOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["ConditioningCollectionOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["ONNXModelLoaderOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["SDXLLoraLoaderOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["ImageOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["CalculateImageTilesOutput"]; }; /** * Errors @@ -3397,8 +3545,6 @@ export type components = { * @description Applies HED edge detection to image */ HedImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -3655,8 +3801,6 @@ export type components = { ImageBlurInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -3715,8 +3859,6 @@ export type components = { ImageChannelInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -3757,8 +3899,6 @@ export type components = { ImageChannelMultiplyInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -3810,8 +3950,6 @@ export type components = { ImageChannelOffsetInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -3908,8 +4046,6 @@ export type components = { ImageConvertInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -3950,8 +4086,6 @@ export type components = { ImageCropInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4071,16 +4205,16 @@ export type components = { * @description Whether this image is starred. */ starred: boolean; + /** + * Has Workflow + * @description Whether this image has a workflow. + */ + has_workflow: boolean; /** * Board Id * @description The id of the board the image belongs to, if one exists. */ board_id?: string | null; - /** - * Workflow Id - * @description The workflow that generated this image. - */ - workflow_id?: string | null; }; /** * ImageField @@ -4100,8 +4234,6 @@ export type components = { ImageHueAdjustmentInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4141,8 +4273,6 @@ export type components = { ImageInverseLerpInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4219,8 +4349,6 @@ export type components = { ImageLerpInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4266,8 +4394,6 @@ export type components = { ImageMultiplyInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4301,8 +4427,6 @@ export type components = { * @description Add blur to NSFW-flagged images */ ImageNSFWBlurInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -4356,14 +4480,12 @@ export type components = { type: "image_output"; }; /** - * Paste Image + * Center Pad or Crop Image * @description Pastes an image into another image. */ ImagePasteInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4407,10 +4529,10 @@ export type components = { crop?: boolean; /** * type - * @default img_paste + * @default img_pad_crop * @constant */ - type: "img_paste"; + type: "img_pad_crop"; }; /** * ImageRecordChanges @@ -4447,8 +4569,6 @@ export type components = { * @description Resizes an image to specific dimensions */ ImageResizeInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -4501,8 +4621,6 @@ export type components = { * @description Scales an image by a factor */ ImageScaleInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -4615,8 +4733,6 @@ export type components = { * @description Add an invisible watermark to an image */ ImageWatermarkInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -4674,8 +4790,6 @@ export type components = { InfillColorInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4719,8 +4833,6 @@ export type components = { InfillPatchMatchInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -4767,8 +4879,6 @@ export type components = { InfillTileInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -5045,6 +5155,7 @@ export type components = { */ type: "iterate_output"; }; + JsonValue: unknown; /** * LaMa Infill * @description Infills transparent areas of an image using the LaMa model @@ -5052,8 +5163,6 @@ export type components = { LaMaInfillInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -5207,8 +5316,6 @@ export type components = { * @description Generates an image from latents. */ LatentsToImageInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -5256,8 +5363,6 @@ export type components = { * @description Applies leres processing to image */ LeresImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -5323,8 +5428,6 @@ export type components = { LinearUIOutputInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -5358,8 +5461,6 @@ export type components = { * @description Applies line art anime processing to image */ LineartAnimeImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -5405,8 +5506,6 @@ export type components = { * @description Applies line art processing to image */ LineartImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -5818,8 +5917,6 @@ export type components = { MaskCombineInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -5855,8 +5952,6 @@ export type components = { MaskEdgeInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -5910,8 +6005,6 @@ export type components = { MaskFromAlphaInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -5949,8 +6042,6 @@ export type components = { * @description Applies mediapipe face processing to image */ MediapipeFaceProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -6062,6 +6153,47 @@ export type components = { */ merge_dest_directory?: string | null; }; + /** + * Merge Tiles to Image + * @description Merge multiple tile images into a single image. + */ + MergeTilesToImageInvocation: { + /** @description Optional metadata to be saved with the image */ + metadata?: components["schemas"]["MetadataField"] | null; + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** + * Tiles With Images + * @description A list of tile images with tile properties. + */ + tiles_with_images?: components["schemas"]["TileWithImage"][]; + /** + * Blend Amount + * @description The amount to blend adjacent tiles in pixels. Must be <= the amount of overlap between adjacent tiles. + */ + blend_amount?: number; + /** + * type + * @default merge_tiles_to_image + * @constant + */ + type: "merge_tiles_to_image"; + }; /** * MetadataField * @description Pydantic model for metadata with custom root of type dict[str, Any]. @@ -6184,8 +6316,6 @@ export type components = { * @description Applies Midas depth processing to image */ MidasDepthImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -6231,8 +6361,6 @@ export type components = { * @description Applies MLSD processing to image */ MlsdImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -6472,8 +6600,6 @@ export type components = { * @description Applies NormalBae processing to image */ NormalbaeImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -6519,8 +6645,6 @@ export type components = { * @description Generates an image from latents. */ ONNXLatentsToImageInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -6963,8 +7087,6 @@ export type components = { * @description Applies Openpose processing to image */ OpenposeImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -7011,13 +7133,83 @@ export type components = { */ type: "openpose_image_processor"; }; + /** PaginatedResults[WorkflowRecordListItemDTO] */ + PaginatedResults_WorkflowRecordListItemDTO_: { + /** + * Page + * @description Current Page + */ + page: number; + /** + * Pages + * @description Total number of pages + */ + pages: number; + /** + * Per Page + * @description Number of items per page + */ + per_page: number; + /** + * Total + * @description Total number of items in result + */ + total: number; + /** + * Items + * @description Items + */ + items: components["schemas"]["WorkflowRecordListItemDTO"][]; + }; + /** + * Pair Tile with Image + * @description Pair an image with its tile properties. + */ + PairTileImageInvocation: { + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** @description The tile image. */ + image?: components["schemas"]["ImageField"]; + /** @description The tile properties. */ + tile?: components["schemas"]["Tile"]; + /** + * type + * @default pair_tile_image + * @constant + */ + type: "pair_tile_image"; + }; + /** PairTileImageOutput */ + PairTileImageOutput: { + /** @description A tile description with its corresponding image. */ + tile_with_image: components["schemas"]["TileWithImage"]; + /** + * type + * @default pair_tile_image_output + * @constant + */ + type: "pair_tile_image_output"; + }; /** * PIDI Processor * @description Applies PIDI processing to image */ PidiImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -7832,6 +8024,11 @@ export type components = { */ type: "sdxl_refiner_model_loader_output"; }; + /** + * SQLiteDirection + * @enum {string} + */ + SQLiteDirection: "ASC" | "DESC"; /** * Save Image * @description Saves an image. Unlike an image primitive, this invocation stores a copy of the image. @@ -7839,8 +8036,6 @@ export type components = { SaveImageInvocation: { /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** * Id * @description The id of this instance of an invocation. Must be unique among all instances of invocations. @@ -8047,8 +8242,6 @@ export type components = { * @description Applies segment anything processing to image */ SegmentAnythingProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -8165,6 +8358,8 @@ export type components = { field_values?: components["schemas"]["NodeFieldValue"][] | null; /** @description The fully-populated session to be executed */ session: components["schemas"]["GraphExecutionState"]; + /** @description The workflow associated with this queue item */ + workflow?: components["schemas"]["WorkflowWithoutID"] | null; }; /** SessionQueueItemDTO */ SessionQueueItemDTO: { @@ -9155,6 +9350,17 @@ export type components = { */ source?: string | null; }; + /** TBLR */ + TBLR: { + /** Top */ + top: number; + /** Bottom */ + bottom: number; + /** Left */ + left: number; + /** Right */ + right: number; + }; /** * TextualInversionConfig * @description Model config for textual inversion embeddings. @@ -9219,13 +9425,18 @@ export type components = { model_format: null; error?: components["schemas"]["ModelError"] | null; }; + /** Tile */ + Tile: { + /** @description The coordinates of this tile relative to its parent image. */ + coords: components["schemas"]["TBLR"]; + /** @description The amount of overlap with adjacent tiles on each side of this tile. */ + overlap: components["schemas"]["TBLR"]; + }; /** * Tile Resample Processor * @description Tile resampler processor */ TileResamplerProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -9260,6 +9471,101 @@ export type components = { */ type: "tile_image_processor"; }; + /** + * Tile to Properties + * @description Split a Tile into its individual properties. + */ + TileToPropertiesInvocation: { + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** @description The tile to split into properties. */ + tile?: components["schemas"]["Tile"]; + /** + * type + * @default tile_to_properties + * @constant + */ + type: "tile_to_properties"; + }; + /** TileToPropertiesOutput */ + TileToPropertiesOutput: { + /** + * Coords Left + * @description Left coordinate of the tile relative to its parent image. + */ + coords_left: number; + /** + * Coords Right + * @description Right coordinate of the tile relative to its parent image. + */ + coords_right: number; + /** + * Coords Top + * @description Top coordinate of the tile relative to its parent image. + */ + coords_top: number; + /** + * Coords Bottom + * @description Bottom coordinate of the tile relative to its parent image. + */ + coords_bottom: number; + /** + * Width + * @description The width of the tile. Equal to coords_right - coords_left. + */ + width: number; + /** + * Height + * @description The height of the tile. Equal to coords_bottom - coords_top. + */ + height: number; + /** + * Overlap Top + * @description Overlap between this tile and its top neighbor. + */ + overlap_top: number; + /** + * Overlap Bottom + * @description Overlap between this tile and its bottom neighbor. + */ + overlap_bottom: number; + /** + * Overlap Left + * @description Overlap between this tile and its left neighbor. + */ + overlap_left: number; + /** + * Overlap Right + * @description Overlap between this tile and its right neighbor. + */ + overlap_right: number; + /** + * type + * @default tile_to_properties_output + * @constant + */ + type: "tile_to_properties_output"; + }; + /** TileWithImage */ + TileWithImage: { + tile: components["schemas"]["Tile"]; + image: components["schemas"]["ImageField"]; + }; /** UNetField */ UNetField: { /** @description Info to load unet submodel */ @@ -9507,19 +9813,220 @@ export type components = { /** Error Type */ type: string; }; + /** Workflow */ + Workflow: { + /** + * Name + * @description The name of the workflow. + */ + name: string; + /** + * Author + * @description The author of the workflow. + */ + author: string; + /** + * Description + * @description The description of the workflow. + */ + description: string; + /** + * Version + * @description The version of the workflow. + */ + version: string; + /** + * Contact + * @description The contact of the workflow. + */ + contact: string; + /** + * Tags + * @description The tags of the workflow. + */ + tags: string; + /** + * Notes + * @description The notes of the workflow. + */ + notes: string; + /** + * Exposedfields + * @description The exposed fields of the workflow. + */ + exposedFields: components["schemas"]["ExposedField"][]; + /** @description The meta of the workflow. */ + meta: components["schemas"]["WorkflowMeta"]; + /** + * Nodes + * @description The nodes of the workflow. + */ + nodes: { + [key: string]: components["schemas"]["JsonValue"]; + }[]; + /** + * Edges + * @description The edges of the workflow. + */ + edges: { + [key: string]: components["schemas"]["JsonValue"]; + }[]; + /** + * Id + * @description The id of the workflow. + */ + id?: string; + }; /** - * WorkflowField - * @description Pydantic model for workflows with custom root of type dict[str, Any]. - * Workflows are stored without a strict schema. + * WorkflowCategory + * @enum {string} */ - WorkflowField: Record; + WorkflowCategory: "user" | "default"; + /** WorkflowMeta */ + WorkflowMeta: { + /** + * Version + * @description The version of the workflow schema. + */ + version: string; + /** @description The category of the workflow (user or default). */ + category: components["schemas"]["WorkflowCategory"]; + }; + /** WorkflowRecordDTO */ + WorkflowRecordDTO: { + /** + * Workflow Id + * @description The id of the workflow. + */ + workflow_id: string; + /** + * Name + * @description The name of the workflow. + */ + name: string; + /** + * Created At + * @description The created timestamp of the workflow. + */ + created_at: string; + /** + * Updated At + * @description The updated timestamp of the workflow. + */ + updated_at: string; + /** + * Opened At + * @description The opened timestamp of the workflow. + */ + opened_at: string; + /** @description The workflow. */ + workflow: components["schemas"]["Workflow"]; + }; + /** WorkflowRecordListItemDTO */ + WorkflowRecordListItemDTO: { + /** + * Workflow Id + * @description The id of the workflow. + */ + workflow_id: string; + /** + * Name + * @description The name of the workflow. + */ + name: string; + /** + * Created At + * @description The created timestamp of the workflow. + */ + created_at: string; + /** + * Updated At + * @description The updated timestamp of the workflow. + */ + updated_at: string; + /** + * Opened At + * @description The opened timestamp of the workflow. + */ + opened_at: string; + /** + * Description + * @description The description of the workflow. + */ + description: string; + /** @description The description of the workflow. */ + category: components["schemas"]["WorkflowCategory"]; + }; + /** + * WorkflowRecordOrderBy + * @description The order by options for workflow records + * @enum {string} + */ + WorkflowRecordOrderBy: "created_at" | "updated_at" | "opened_at" | "name"; + /** WorkflowWithoutID */ + WorkflowWithoutID: { + /** + * Name + * @description The name of the workflow. + */ + name: string; + /** + * Author + * @description The author of the workflow. + */ + author: string; + /** + * Description + * @description The description of the workflow. + */ + description: string; + /** + * Version + * @description The version of the workflow. + */ + version: string; + /** + * Contact + * @description The contact of the workflow. + */ + contact: string; + /** + * Tags + * @description The tags of the workflow. + */ + tags: string; + /** + * Notes + * @description The notes of the workflow. + */ + notes: string; + /** + * Exposedfields + * @description The exposed fields of the workflow. + */ + exposedFields: components["schemas"]["ExposedField"][]; + /** @description The meta of the workflow. */ + meta: components["schemas"]["WorkflowMeta"]; + /** + * Nodes + * @description The nodes of the workflow. + */ + nodes: { + [key: string]: components["schemas"]["JsonValue"]; + }[]; + /** + * Edges + * @description The edges of the workflow. + */ + edges: { + [key: string]: components["schemas"]["JsonValue"]; + }[]; + }; /** * Zoe (Depth) Processor * @description Applies Zoe depth processing to image */ ZoeDepthImageProcessorInvocation: { - /** @description Optional workflow to be saved with the image */ - workflow?: components["schemas"]["WorkflowField"] | null; /** @description Optional metadata to be saved with the image */ metadata?: components["schemas"]["MetadataField"] | null; /** @@ -9757,54 +10264,54 @@ export type components = { * @enum {string} */ UIType: "SDXLMainModelField" | "SDXLRefinerModelField" | "ONNXModelField" | "VAEModelField" | "LoRAModelField" | "ControlNetModelField" | "IPAdapterModelField" | "SchedulerField" | "AnyField" | "CollectionField" | "CollectionItemField" | "DEPRECATED_Boolean" | "DEPRECATED_Color" | "DEPRECATED_Conditioning" | "DEPRECATED_Control" | "DEPRECATED_Float" | "DEPRECATED_Image" | "DEPRECATED_Integer" | "DEPRECATED_Latents" | "DEPRECATED_String" | "DEPRECATED_BooleanCollection" | "DEPRECATED_ColorCollection" | "DEPRECATED_ConditioningCollection" | "DEPRECATED_ControlCollection" | "DEPRECATED_FloatCollection" | "DEPRECATED_ImageCollection" | "DEPRECATED_IntegerCollection" | "DEPRECATED_LatentsCollection" | "DEPRECATED_StringCollection" | "DEPRECATED_BooleanPolymorphic" | "DEPRECATED_ColorPolymorphic" | "DEPRECATED_ConditioningPolymorphic" | "DEPRECATED_ControlPolymorphic" | "DEPRECATED_FloatPolymorphic" | "DEPRECATED_ImagePolymorphic" | "DEPRECATED_IntegerPolymorphic" | "DEPRECATED_LatentsPolymorphic" | "DEPRECATED_StringPolymorphic" | "DEPRECATED_MainModel" | "DEPRECATED_UNet" | "DEPRECATED_Vae" | "DEPRECATED_CLIP" | "DEPRECATED_Collection" | "DEPRECATED_CollectionItem" | "DEPRECATED_Enum" | "DEPRECATED_WorkflowField" | "DEPRECATED_IsIntermediate" | "DEPRECATED_BoardField" | "DEPRECATED_MetadataItem" | "DEPRECATED_MetadataItemCollection" | "DEPRECATED_MetadataItemPolymorphic" | "DEPRECATED_MetadataDict"; - /** - * StableDiffusionOnnxModelFormat - * @description An enumeration. - * @enum {string} - */ - StableDiffusionOnnxModelFormat: "olive" | "onnx"; - /** - * CLIPVisionModelFormat - * @description An enumeration. - * @enum {string} - */ - CLIPVisionModelFormat: "diffusers"; /** * StableDiffusion1ModelFormat * @description An enumeration. * @enum {string} */ StableDiffusion1ModelFormat: "checkpoint" | "diffusers"; - /** - * StableDiffusionXLModelFormat - * @description An enumeration. - * @enum {string} - */ - StableDiffusionXLModelFormat: "checkpoint" | "diffusers"; - /** - * StableDiffusion2ModelFormat - * @description An enumeration. - * @enum {string} - */ - StableDiffusion2ModelFormat: "checkpoint" | "diffusers"; - /** - * T2IAdapterModelFormat - * @description An enumeration. - * @enum {string} - */ - T2IAdapterModelFormat: "diffusers"; /** * IPAdapterModelFormat * @description An enumeration. * @enum {string} */ IPAdapterModelFormat: "invokeai"; + /** + * T2IAdapterModelFormat + * @description An enumeration. + * @enum {string} + */ + T2IAdapterModelFormat: "diffusers"; + /** + * StableDiffusionOnnxModelFormat + * @description An enumeration. + * @enum {string} + */ + StableDiffusionOnnxModelFormat: "olive" | "onnx"; /** * ControlNetModelFormat * @description An enumeration. * @enum {string} */ ControlNetModelFormat: "checkpoint" | "diffusers"; + /** + * StableDiffusion2ModelFormat + * @description An enumeration. + * @enum {string} + */ + StableDiffusion2ModelFormat: "checkpoint" | "diffusers"; + /** + * StableDiffusionXLModelFormat + * @description An enumeration. + * @enum {string} + */ + StableDiffusionXLModelFormat: "checkpoint" | "diffusers"; + /** + * CLIPVisionModelFormat + * @description An enumeration. + * @enum {string} + */ + CLIPVisionModelFormat: "diffusers"; }; responses: never; parameters: never; @@ -10542,6 +11049,29 @@ export type operations = { }; }; }; + /** Get Image Workflow */ + get_image_workflow: { + parameters: { + path: { + /** @description The name of image whose workflow to get */ + image_name: string; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": components["schemas"]["WorkflowWithoutID"] | null; + }; + }; + /** @description Validation Error */ + 422: { + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; /** * Get Image Full * @description Gets a full-resolution image file @@ -11523,7 +12053,119 @@ export type operations = { /** @description Successful Response */ 200: { content: { - "application/json": components["schemas"]["WorkflowField"]; + "application/json": components["schemas"]["WorkflowRecordDTO"]; + }; + }; + /** @description Validation Error */ + 422: { + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + /** + * Delete Workflow + * @description Deletes a workflow + */ + delete_workflow: { + parameters: { + path: { + /** @description The workflow to delete */ + workflow_id: string; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + /** + * Update Workflow + * @description Updates a workflow + */ + update_workflow: { + requestBody: { + content: { + "application/json": components["schemas"]["Body_update_workflow"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": components["schemas"]["WorkflowRecordDTO"]; + }; + }; + /** @description Validation Error */ + 422: { + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + /** + * List Workflows + * @description Gets a page of workflows + */ + list_workflows: { + parameters: { + query?: { + /** @description The page to get */ + page?: number; + /** @description The number of workflows per page */ + per_page?: number; + /** @description The order by */ + order_by?: components["schemas"]["WorkflowRecordOrderBy"]; + /** @description The order by */ + direction?: components["schemas"]["SQLiteDirection"]; + /** @description The category to get */ + category?: components["schemas"]["WorkflowCategory"]; + /** @description The text to filter by, matches name and description */ + query?: string | null; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": components["schemas"]["PaginatedResults_WorkflowRecordListItemDTO_"]; + }; + }; + /** @description Validation Error */ + 422: { + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + /** + * Create Workflow + * @description Creates a workflow + */ + create_workflow: { + requestBody: { + content: { + "application/json": components["schemas"]["Body_create_workflow"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": components["schemas"]["WorkflowRecordDTO"]; }; }; /** @description Validation Error */ diff --git a/invokeai/frontend/web/src/services/api/types.ts b/invokeai/frontend/web/src/services/api/types.ts index 9b6e531d93..91da86d58c 100644 --- a/invokeai/frontend/web/src/services/api/types.ts +++ b/invokeai/frontend/web/src/services/api/types.ts @@ -114,6 +114,10 @@ export type GraphExecutionState = s['GraphExecutionState']; export type Batch = s['Batch']; export type SessionQueueItemDTO = s['SessionQueueItemDTO']; export type SessionQueueItem = s['SessionQueueItem']; +export type WorkflowRecordOrderBy = s['WorkflowRecordOrderBy']; +export type SQLiteDirection = s['SQLiteDirection']; +export type WorkflowDTO = s['WorkflowRecordDTO']; +export type WorkflowRecordListItemDTO = s['WorkflowRecordListItemDTO']; // General nodes export type CollectInvocation = s['CollectInvocation']; diff --git a/pyproject.toml b/pyproject.toml index 961a8335e8..bb8b7a361b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,10 +36,10 @@ dependencies = [ "albumentations", "basicsr", "click", - "clip_anytorch", # replacing "clip @ https://github.com/openai/CLIP/archive/eaa22acb90a5876642d0507623e859909230a52d.zip", + "clip_anytorch", # replacing "clip @ https://github.com/openai/CLIP/archive/eaa22acb90a5876642d0507623e859909230a52d.zip", "compel~=2.0.2", "controlnet-aux>=0.0.6", - "timm==0.6.13", # needed to override timm latest in controlnet_aux, see https://github.com/isl-org/ZoeDepth/issues/26 + "timm==0.6.13", # needed to override timm latest in controlnet_aux, see https://github.com/isl-org/ZoeDepth/issues/26 "datasets", "diffusers[torch]~=0.23.0", "dnspython~=2.4.0", @@ -51,9 +51,9 @@ dependencies = [ "fastapi-events~=0.9.1", "huggingface-hub~=0.16.4", "imohash", - "invisible-watermark~=0.2.0", # needed to install SDXL base and refiner using their repo_ids - "matplotlib", # needed for plotting of Penner easing functions - "mediapipe", # needed for "mediapipeface" controlnet model + "invisible-watermark~=0.2.0", # needed to install SDXL base and refiner using their repo_ids + "matplotlib", # needed for plotting of Penner easing functions + "mediapipe", # needed for "mediapipeface" controlnet model # Minimum numpy version of 1.24.0 is needed to use the 'strict' argument to np.testing.assert_array_equal(). "numpy>=1.24.0", "npyscreen", @@ -61,7 +61,7 @@ dependencies = [ "onnx", "onnxruntime", "opencv-python~=4.8.1.1", - "pydantic~=2.5.0", + "pydantic~=2.5.2", "pydantic-settings~=2.0.3", "picklescan", "pillow", @@ -98,7 +98,7 @@ dependencies = [ ] "dev" = ["jurigged", "pudb"] "test" = [ - "ruff", + "ruff==0.1.7", "ruff-lsp", "mypy", "pre-commit", @@ -166,6 +166,7 @@ version = { attr = "invokeai.version.__version__" } [tool.setuptools.package-data] "invokeai.app.assets" = ["**/*.png"] +"invokeai.app.services.workflow_records.default_workflows" = ["*.json"] "invokeai.assets.fonts" = ["**/*.ttf"] "invokeai.backend" = ["**.png"] "invokeai.configs" = ["*.example", "**/*.yaml", "*.txt"] diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index 002c3e2c07..5c8bbb4048 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -13,7 +13,7 @@ from invokeai.app.services.model_records import ( ModelRecordServiceSQL, UnknownModelException, ) -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.backend.model_manager.config import ( BaseModelType, MainCheckpointConfig, diff --git a/tests/nodes/test_graph_execution_state.py b/tests/nodes/test_graph_execution_state.py index cc40970ace..203c470469 100644 --- a/tests/nodes/test_graph_execution_state.py +++ b/tests/nodes/test_graph_execution_state.py @@ -28,7 +28,7 @@ from invokeai.app.services.shared.graph import ( IterateInvocation, LibraryGraph, ) -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.backend.util.logging import InvokeAILogger from .test_invoker import create_edge @@ -77,7 +77,6 @@ def mock_services() -> InvocationServices: session_queue=None, # type: ignore urls=None, # type: ignore workflow_records=None, # type: ignore - workflow_image_records=None, # type: ignore ) @@ -94,6 +93,7 @@ def invoke_next(g: GraphExecutionState, services: InvocationServices) -> tuple[B queue_id=DEFAULT_QUEUE_ID, services=services, graph_execution_state_id="1", + workflow=None, ) ) g.complete(n.id, o) diff --git a/tests/nodes/test_invoker.py b/tests/nodes/test_invoker.py index c775fb93f2..88186d5448 100644 --- a/tests/nodes/test_invoker.py +++ b/tests/nodes/test_invoker.py @@ -24,7 +24,7 @@ from invokeai.app.services.invoker import Invoker from invokeai.app.services.item_storage.item_storage_sqlite import SqliteItemStorage from invokeai.app.services.session_queue.session_queue_common import DEFAULT_QUEUE_ID from invokeai.app.services.shared.graph import Graph, GraphExecutionState, GraphInvocation, LibraryGraph -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase @pytest.fixture @@ -82,7 +82,6 @@ def mock_services() -> InvocationServices: session_queue=None, # type: ignore urls=None, # type: ignore workflow_records=None, # type: ignore - workflow_image_records=None, # type: ignore ) diff --git a/tests/nodes/test_sqlite.py b/tests/nodes/test_sqlite.py index 818f9d048f..9d2d6d5cd3 100644 --- a/tests/nodes/test_sqlite.py +++ b/tests/nodes/test_sqlite.py @@ -3,7 +3,7 @@ from pydantic import BaseModel, Field from invokeai.app.services.config.config_default import InvokeAIAppConfig from invokeai.app.services.item_storage.item_storage_sqlite import SqliteItemStorage -from invokeai.app.services.shared.sqlite import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.backend.util.logging import InvokeAILogger diff --git a/tests/test_config.py b/tests/test_config.py index 6d76872a0d..740a4866dd 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -206,9 +206,9 @@ def test_deny_nodes(patch_rootdir): # confirm invocations union will not have denied nodes all_invocations = BaseInvocation.get_invocations() - has_integer = len([i for i in all_invocations if i.__fields__.get("type").default == "integer"]) == 1 - has_string = len([i for i in all_invocations if i.__fields__.get("type").default == "string"]) == 1 - has_float = len([i for i in all_invocations if i.__fields__.get("type").default == "float"]) == 1 + has_integer = len([i for i in all_invocations if i.model_fields.get("type").default == "integer"]) == 1 + has_string = len([i for i in all_invocations if i.model_fields.get("type").default == "string"]) == 1 + has_float = len([i for i in all_invocations if i.model_fields.get("type").default == "float"]) == 1 assert has_integer assert has_string From fd8d1e13a0c79dec99209226ed6f5f2438a541c0 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 17:47:51 +1100 Subject: [PATCH 050/515] feat(ui): clarify workflow building node filter --- .../web/src/features/nodes/util/workflow/buildWorkflow.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts b/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts index ff57c2d2b1..9f1e9f7294 100644 --- a/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts +++ b/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts @@ -1,6 +1,7 @@ import { logger } from 'app/logging/logger'; import { parseify } from 'common/util/serialize'; import { NodesState } from 'features/nodes/store/types'; +import { isInvocationNode, isNotesNode } from 'features/nodes/types/invocation'; import { WorkflowV2, zWorkflowEdge, @@ -34,9 +35,7 @@ export const buildWorkflow: BuildWorkflowFunction = ({ }; clonedNodes - .filter((n) => - ['invocation', 'notes'].includes(n.type ?? '__UNKNOWN_NODE_TYPE__') - ) + .filter((n) => isInvocationNode(n) || isNotesNode(n)) // Workflows only contain invocation and notes nodes .forEach((node) => { const result = zWorkflowNode.safeParse(node); if (!result.success) { From 3423b5848f4ff388d8153b35e1c7cc6d1fad20dc Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 18:07:45 +1100 Subject: [PATCH 051/515] fix(ui): do not disable the metadata and workflow tabs in viewer Disabling these introduces an issue where, if you were on an image with a workflow/metadata, then switch to one without, you can end up on a disabled tab. This could potentially cause a runtime error. --- .../components/ImageMetadataViewer/ImageMetadataViewer.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx index 217fc973af..3295cc3117 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataViewer.tsx @@ -63,12 +63,13 @@ const ImageMetadataViewer = ({ image }: ImageMetadataViewerProps) => { w: 'full', h: 'full', }} + isLazy={true} > {t('metadata.recallParameters')} - {t('metadata.metadata')} + {t('metadata.metadata')} {t('metadata.imageDetails')} - {t('metadata.workflow')} + {t('metadata.workflow')} From 61060f032a1fa88bf0f971b348225e74625744ce Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 18:54:23 +1100 Subject: [PATCH 052/515] feat(ui): abstract out the global menu close trigger This logic is moved into a hook. This is needed for our context menus to close when the user clicks something in reactflow. It needed to be extended to support menus also. --- .../src/common/components/IAIContextMenu.tsx | 11 +++----- .../common/hooks/useGlobalMenuCloseTrigger.ts | 25 +++++++++++++++++++ .../features/nodes/components/flow/Flow.tsx | 4 +-- .../flow/nodes/common/NodeWrapper.tsx | 4 +-- .../features/system/components/SiteHeader.tsx | 6 ++++- .../web/src/features/ui/store/uiSlice.ts | 8 +++--- .../web/src/features/ui/store/uiTypes.ts | 2 +- 7 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 invokeai/frontend/web/src/common/hooks/useGlobalMenuCloseTrigger.ts diff --git a/invokeai/frontend/web/src/common/components/IAIContextMenu.tsx b/invokeai/frontend/web/src/common/components/IAIContextMenu.tsx index 757faca866..9fb6f1b835 100644 --- a/invokeai/frontend/web/src/common/components/IAIContextMenu.tsx +++ b/invokeai/frontend/web/src/common/components/IAIContextMenu.tsx @@ -22,7 +22,7 @@ import { PortalProps, useEventListener, } from '@chakra-ui/react'; -import { useAppSelector } from 'app/store/storeHooks'; +import { useGlobalMenuCloseTrigger } from 'common/hooks/useGlobalMenuCloseTrigger'; import * as React from 'react'; import { MutableRefObject, @@ -49,10 +49,6 @@ export function IAIContextMenu( const [position, setPosition] = useState<[number, number]>([0, 0]); const targetRef = useRef(null); - const globalContextMenuCloseTrigger = useAppSelector( - (state) => state.ui.globalContextMenuCloseTrigger - ); - useEffect(() => { if (isOpen) { setTimeout(() => { @@ -70,11 +66,12 @@ export function IAIContextMenu( } }, [isOpen]); - useEffect(() => { + const onClose = useCallback(() => { setIsOpen(false); setIsDeferredOpen(false); setIsRendered(false); - }, [globalContextMenuCloseTrigger]); + }, []); + useGlobalMenuCloseTrigger(onClose); useEventListener('contextmenu', (e) => { if ( diff --git a/invokeai/frontend/web/src/common/hooks/useGlobalMenuCloseTrigger.ts b/invokeai/frontend/web/src/common/hooks/useGlobalMenuCloseTrigger.ts new file mode 100644 index 0000000000..0fd404fdc3 --- /dev/null +++ b/invokeai/frontend/web/src/common/hooks/useGlobalMenuCloseTrigger.ts @@ -0,0 +1,25 @@ +import { useAppSelector } from 'app/store/storeHooks'; +import { useEffect } from 'react'; + +/** + * The reactflow background element somehow prevents the chakra `useOutsideClick()` hook from working. + * With a menu open, clicking on the reactflow background element doesn't close the menu. + * + * Reactflow does provide an `onPaneClick` to handle clicks on the background element, but it is not + * straightforward to programatically close the menu. + * + * As a (hopefully temporary) workaround, we will use a dirty hack: + * - create `globalMenuCloseTrigger: number` in `ui` slice + * - increment it in `onPaneClick` + * - `useEffect()` to close the menu when `globalMenuCloseTrigger` changes + */ + +export const useGlobalMenuCloseTrigger = (onClose: () => void) => { + const globalMenuCloseTrigger = useAppSelector( + (state) => state.ui.globalMenuCloseTrigger + ); + + useEffect(() => { + onClose(); + }, [globalMenuCloseTrigger, onClose]); +}; diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx index ea83a540a9..2f0695f03a 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx @@ -4,7 +4,7 @@ import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; import { $flow } from 'features/nodes/store/reactFlowInstance'; -import { contextMenusClosed } from 'features/ui/store/uiSlice'; +import { bumpGlobalMenuCloseTrigger } from 'features/ui/store/uiSlice'; import { MouseEvent, useCallback, useRef } from 'react'; import { useHotkeys } from 'react-hotkeys-hook'; import { @@ -153,7 +153,7 @@ export const Flow = () => { ); const handlePaneClick = useCallback(() => { - dispatch(contextMenusClosed()); + dispatch(bumpGlobalMenuCloseTrigger()); }, [dispatch]); const onInit: OnInit = useCallback((flow) => { diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/common/NodeWrapper.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/common/NodeWrapper.tsx index b6ccd4ae9f..155e95da94 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/common/NodeWrapper.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/common/NodeWrapper.tsx @@ -15,7 +15,7 @@ import { NODE_WIDTH, } from 'features/nodes/types/constants'; import { zNodeStatus } from 'features/nodes/types/invocation'; -import { contextMenusClosed } from 'features/ui/store/uiSlice'; +import { bumpGlobalMenuCloseTrigger } from 'features/ui/store/uiSlice'; import { MouseEvent, PropsWithChildren, @@ -70,7 +70,7 @@ const NodeWrapper = (props: NodeWrapperProps) => { if (!e.ctrlKey && !e.altKey && !e.metaKey && !e.shiftKey) { dispatch(nodeExclusivelySelected(nodeId)); } - dispatch(contextMenusClosed()); + dispatch(bumpGlobalMenuCloseTrigger()); }, [dispatch, nodeId] ); diff --git a/invokeai/frontend/web/src/features/system/components/SiteHeader.tsx b/invokeai/frontend/web/src/features/system/components/SiteHeader.tsx index 5057af8dab..6bc8ae6f59 100644 --- a/invokeai/frontend/web/src/features/system/components/SiteHeader.tsx +++ b/invokeai/frontend/web/src/features/system/components/SiteHeader.tsx @@ -6,6 +6,7 @@ import { MenuItem, MenuList, Spacer, + useDisclosure, } from '@chakra-ui/react'; import IAIIconButton from 'common/components/IAIIconButton'; import { memo } from 'react'; @@ -24,9 +25,12 @@ import HotkeysModal from './HotkeysModal/HotkeysModal'; import InvokeAILogoComponent from './InvokeAILogoComponent'; import SettingsModal from './SettingsModal/SettingsModal'; import StatusIndicator from './StatusIndicator'; +import { useGlobalMenuCloseTrigger } from 'common/hooks/useGlobalMenuCloseTrigger'; const SiteHeader = () => { const { t } = useTranslation(); + const { isOpen, onOpen, onClose } = useDisclosure(); + useGlobalMenuCloseTrigger(onClose); const isBugLinkEnabled = useFeatureStatus('bugLink').isFeatureEnabled; const isDiscordLinkEnabled = useFeatureStatus('discordLink').isFeatureEnabled; @@ -46,7 +50,7 @@ const SiteHeader = () => { -
+ ) => { state.shouldAutoChangeDimensions = action.payload; }, - contextMenusClosed: (state) => { - state.globalContextMenuCloseTrigger += 1; + bumpGlobalMenuCloseTrigger: (state) => { + state.globalMenuCloseTrigger += 1; }, panelsChanged: ( state, @@ -88,7 +88,7 @@ export const { favoriteSchedulersChanged, toggleEmbeddingPicker, setShouldAutoChangeDimensions, - contextMenusClosed, + bumpGlobalMenuCloseTrigger, panelsChanged, } = uiSlice.actions; diff --git a/invokeai/frontend/web/src/features/ui/store/uiTypes.ts b/invokeai/frontend/web/src/features/ui/store/uiTypes.ts index b532043054..1a25d4d3d6 100644 --- a/invokeai/frontend/web/src/features/ui/store/uiTypes.ts +++ b/invokeai/frontend/web/src/features/ui/store/uiTypes.ts @@ -24,6 +24,6 @@ export interface UIState { shouldShowEmbeddingPicker: boolean; shouldAutoChangeDimensions: boolean; favoriteSchedulers: ParameterScheduler[]; - globalContextMenuCloseTrigger: number; + globalMenuCloseTrigger: number; panels: Record; } From 5b5a71d40c811517f0d73d85df3c09a541c20171 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 19:01:55 +1100 Subject: [PATCH 053/515] fix(ui): do not append "(copy)" to workflow name when saving --- .../web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts index a177706f0d..33c95fd92f 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts @@ -3,7 +3,6 @@ import { useAppDispatch } from 'app/store/storeHooks'; import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; import { workflowLoaded } from 'features/nodes/store/actions'; import { zWorkflowV2 } from 'features/nodes/types/workflow'; -import { getWorkflowCopyName } from 'features/workflowLibrary/util/getWorkflowCopyName'; import { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { @@ -39,7 +38,6 @@ export const useSaveLibraryWorkflow: UseSaveLibraryWorkflow = () => { } else { const data = await createWorkflow(workflow).unwrap(); const createdWorkflow = zWorkflowV2.parse(data.workflow); - createdWorkflow.name = getWorkflowCopyName(createdWorkflow.name); dispatch(workflowLoaded(createdWorkflow)); toaster({ title: t('workflows.workflowSaved'), From 283bb73418b7c91531b45ad4085e0bcab55797b7 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 19:27:33 +1100 Subject: [PATCH 054/515] feat(ui): improve save/as workflow hook Use a persistent updating toast to indicate saving progress. --- .../workflowLibrary/hooks/useSaveWorkflow.ts | 33 +++++++++++-------- .../hooks/useSaveWorkflowAs.ts | 23 +++++++++---- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts index 33c95fd92f..427d473396 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts @@ -1,9 +1,9 @@ -import { useAppToaster } from 'app/components/Toaster'; +import { ToastId, useToast } from '@chakra-ui/react'; import { useAppDispatch } from 'app/store/storeHooks'; import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; import { workflowLoaded } from 'features/nodes/store/actions'; import { zWorkflowV2 } from 'features/nodes/types/workflow'; -import { useCallback } from 'react'; +import { useCallback, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { useCreateWorkflowMutation, @@ -24,33 +24,40 @@ export const useSaveLibraryWorkflow: UseSaveLibraryWorkflow = () => { const workflow = useWorkflow(); const [updateWorkflow, updateWorkflowResult] = useUpdateWorkflowMutation(); const [createWorkflow, createWorkflowResult] = useCreateWorkflowMutation(); - const toaster = useAppToaster(); + const toast = useToast(); + const toastRef = useRef(); const saveWorkflow = useCallback(async () => { + toastRef.current = toast({ + title: t('workflows.savingWorkflow'), + status: 'loading', + duration: null, + isClosable: false, + }); try { if (workflow.id) { const data = await updateWorkflow(workflow).unwrap(); const updatedWorkflow = zWorkflowV2.parse(data.workflow); dispatch(workflowLoaded(updatedWorkflow)); - toaster({ - title: t('workflows.workflowSaved'), - status: 'success', - }); } else { const data = await createWorkflow(workflow).unwrap(); const createdWorkflow = zWorkflowV2.parse(data.workflow); dispatch(workflowLoaded(createdWorkflow)); - toaster({ - title: t('workflows.workflowSaved'), - status: 'success', - }); } + toast.update(toastRef.current, { + title: t('workflows.workflowSaved'), + status: 'success', + duration: 1000, + isClosable: true, + }); } catch (e) { - toaster({ + toast.update(toastRef.current, { title: t('workflows.problemSavingWorkflow'), status: 'error', + duration: 1000, + isClosable: true, }); } - }, [workflow, updateWorkflow, dispatch, toaster, t, createWorkflow]); + }, [workflow, updateWorkflow, dispatch, toast, t, createWorkflow]); return { saveWorkflow, isLoading: updateWorkflowResult.isLoading || createWorkflowResult.isLoading, diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts index e0b08ed985..9565d036c4 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts @@ -1,9 +1,9 @@ -import { useAppToaster } from 'app/components/Toaster'; +import { ToastId, useToast } from '@chakra-ui/react'; import { useAppDispatch } from 'app/store/storeHooks'; import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; import { workflowLoaded } from 'features/nodes/store/actions'; import { zWorkflowV2 } from 'features/nodes/types/workflow'; -import { useCallback } from 'react'; +import { useCallback, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { useCreateWorkflowMutation } from 'services/api/endpoints/workflows'; @@ -26,9 +26,16 @@ export const useSaveWorkflowAs: UseSaveWorkflowAs = () => { const dispatch = useAppDispatch(); const workflow = useWorkflow(); const [createWorkflow, createWorkflowResult] = useCreateWorkflowMutation(); - const toaster = useAppToaster(); + const toast = useToast(); + const toastRef = useRef(); const saveWorkflowAs = useCallback( async ({ name: newName, onSuccess, onError }: SaveWorkflowAsArg) => { + toastRef.current = toast({ + title: t('workflows.savingWorkflow'), + status: 'loading', + duration: null, + isClosable: false, + }); try { workflow.id = undefined; workflow.name = newName; @@ -36,19 +43,23 @@ export const useSaveWorkflowAs: UseSaveWorkflowAs = () => { const createdWorkflow = zWorkflowV2.parse(data.workflow); dispatch(workflowLoaded(createdWorkflow)); onSuccess && onSuccess(); - toaster({ + toast.update(toastRef.current, { title: t('workflows.workflowSaved'), status: 'success', + duration: 1000, + isClosable: true, }); } catch (e) { onError && onError(); - toaster({ + toast.update(toastRef.current, { title: t('workflows.problemSavingWorkflow'), status: 'error', + duration: 1000, + isClosable: true, }); } }, - [workflow, dispatch, toaster, t, createWorkflow] + [toast, workflow, createWorkflow, dispatch, t] ); return { saveWorkflowAs, From e4f67628c095a33c0974b7924d51e0590be2a1ac Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 20:15:26 +1100 Subject: [PATCH 055/515] feat(ui): revise workflow editor buttons - Add menu to top-right of editor, save/saveas/download/upload/reset/settings moved in here - Add workflow name to top-center --- invokeai/frontend/web/public/locales/en.json | 6 +- .../features/nodes/components/NodeEditor.tsx | 8 +- .../features/nodes/components/flow/Flow.tsx | 38 ++++---- .../panels/TopCenterPanel/TopCenterPanel.tsx | 22 ++++- .../flow/panels/TopPanel/AddNodeButton.tsx | 26 ++++++ .../flow/panels/TopPanel/TopPanel.tsx | 37 ++++++++ .../panels/TopPanel/UpdateNodesButton.tsx | 32 +++++++ .../flow/panels/TopPanel/WorkflowName.tsx | 25 ++++++ .../panels/TopRightPanel/TopRightPanel.tsx | 4 +- .../TopRightPanel/WorkflowEditorSettings.tsx | 26 +++--- .../components/WorkflowLibraryButton.tsx | 15 ++-- .../DownloadWorkflowMenuItem.tsx | 18 ++++ .../ResetWorkflowEditorMenuItem.tsx | 88 +++++++++++++++++++ .../SaveWorkflowAsMenuItem.tsx | 85 ++++++++++++++++++ .../SaveWorkflowMenuItem.tsx | 17 ++++ .../WorkflowLibraryMenu/SettingsMenuItem.tsx | 21 +++++ .../UploadWorkflowMenuItem.tsx | 27 ++++++ .../WorkflowLibraryMenu.tsx | 50 +++++++++++ .../hooks/useDownloadWorkflow.ts | 17 ++++ .../frontend/web/src/theme/components/menu.ts | 3 + 20 files changed, 511 insertions(+), 54 deletions(-) create mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx create mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/TopPanel.tsx create mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/UpdateNodesButton.tsx create mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx create mode 100644 invokeai/frontend/web/src/features/workflowLibrary/hooks/useDownloadWorkflow.ts diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index f45b9973ce..a7ad34bfc7 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -1627,7 +1627,7 @@ }, "workflows": { "workflows": "Workflows", - "workflowLibrary": "Workflow Library", + "workflowLibrary": "Library", "userWorkflows": "My Workflows", "defaultWorkflows": "Default Workflows", "openWorkflow": "Open Workflow", @@ -1637,6 +1637,7 @@ "downloadWorkflow": "Download Workflow", "saveWorkflow": "Save Workflow", "saveWorkflowAs": "Save Workflow As", + "savingWorkflow": "Saving Workflow...", "problemSavingWorkflow": "Problem Saving Workflow", "workflowSaved": "Workflow Saved", "noRecentWorkflows": "No Recent Workflows", @@ -1648,7 +1649,8 @@ "searchWorkflows": "Search Workflows", "clearWorkflowSearchFilter": "Clear Workflow Search Filter", "workflowName": "Workflow Name", - "workflowEditorReset": "Workflow Editor Reset" + "workflowEditorReset": "Workflow Editor Reset", + "workflowEditorMenu": "Workflow Editor Menu" }, "app": { "storeNotInitialized": "Store is not initialized" diff --git a/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx b/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx index 3675dd9af9..8d3ad1a16f 100644 --- a/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/NodeEditor.tsx @@ -7,12 +7,10 @@ import { MdDeviceHub } from 'react-icons/md'; import 'reactflow/dist/style.css'; import AddNodePopover from './flow/AddNodePopover/AddNodePopover'; import { Flow } from './flow/Flow'; -import TopLeftPanel from './flow/panels/TopLeftPanel/TopLeftPanel'; -import TopCenterPanel from './flow/panels/TopCenterPanel/TopCenterPanel'; -import TopRightPanel from './flow/panels/TopRightPanel/TopRightPanel'; import BottomLeftPanel from './flow/panels/BottomLeftPanel/BottomLeftPanel'; import MinimapPanel from './flow/panels/MinimapPanel/MinimapPanel'; import { useTranslation } from 'react-i18next'; +import TopPanel from 'features/nodes/components/flow/panels/TopPanel/TopPanel'; const NodeEditor = () => { const isReady = useAppSelector((state) => state.nodes.isReady); @@ -47,9 +45,7 @@ const NodeEditor = () => { > - - - + diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx index 2f0695f03a..5ba0015c60 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx @@ -3,6 +3,25 @@ import { createSelector } from '@reduxjs/toolkit'; import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import { useIsValidConnection } from 'features/nodes/hooks/useIsValidConnection'; +import { + connectionEnded, + connectionMade, + connectionStarted, + edgeAdded, + edgeChangeStarted, + edgeDeleted, + edgesChanged, + edgesDeleted, + nodesChanged, + nodesDeleted, + selectedAll, + selectedEdgesChanged, + selectedNodesChanged, + selectionCopied, + selectionPasted, + viewportChanged, +} from 'features/nodes/store/nodesSlice'; import { $flow } from 'features/nodes/store/reactFlowInstance'; import { bumpGlobalMenuCloseTrigger } from 'features/ui/store/uiSlice'; import { MouseEvent, useCallback, useRef } from 'react'; @@ -25,25 +44,6 @@ import { ReactFlowProps, XYPosition, } from 'reactflow'; -import { useIsValidConnection } from 'features/nodes/hooks/useIsValidConnection'; -import { - connectionEnded, - connectionMade, - connectionStarted, - edgeAdded, - edgeChangeStarted, - edgeDeleted, - edgesChanged, - edgesDeleted, - nodesChanged, - nodesDeleted, - selectedAll, - selectedEdgesChanged, - selectedNodesChanged, - selectionCopied, - selectionPasted, - viewportChanged, -} from 'features/nodes/store/nodesSlice'; import CustomConnectionLine from './connectionLines/CustomConnectionLine'; import InvocationCollapsedEdge from './edges/InvocationCollapsedEdge'; import InvocationDefaultEdge from './edges/InvocationDefaultEdge'; diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx index 4b515bcd0a..e6d366b0f3 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx @@ -1,4 +1,4 @@ -import { Flex } from '@chakra-ui/layout'; +import { Flex, Heading } from '@chakra-ui/layout'; import { memo } from 'react'; import DownloadWorkflowButton from 'features/workflowLibrary/components/DownloadWorkflowButton'; import UploadWorkflowButton from 'features/workflowLibrary/components/LoadWorkflowFromFileButton'; @@ -6,10 +6,14 @@ import ResetWorkflowEditorButton from 'features/workflowLibrary/components/Reset import SaveWorkflowButton from 'features/workflowLibrary/components/SaveWorkflowButton'; import SaveWorkflowAsButton from 'features/workflowLibrary/components/SaveWorkflowAsButton'; import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; +import { useAppSelector } from 'app/store/storeHooks'; const TopCenterPanel = () => { const isWorkflowLibraryEnabled = useFeatureStatus('workflowLibrary').isFeatureEnabled; + const name = useAppSelector( + (state) => state.workflow.name || 'Untitled Workflow' + ); return ( { top: 2, insetInlineStart: '50%', transform: 'translate(-50%)', + alignItems: 'center', }} > - + + {name} + + {/* {isWorkflowLibraryEnabled && ( <> @@ -29,7 +45,7 @@ const TopCenterPanel = () => { )} - + */} ); }; diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx new file mode 100644 index 0000000000..266d711337 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx @@ -0,0 +1,26 @@ +import { useAppDispatch } from 'app/store/storeHooks'; +import IAIIconButton from 'common/components/IAIIconButton'; +import { addNodePopoverOpened } from 'features/nodes/store/nodesSlice'; +import { memo, useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaPlus } from 'react-icons/fa'; + +const AddNodeButton = () => { + const dispatch = useAppDispatch(); + const { t } = useTranslation(); + const handleOpenAddNodePopover = useCallback(() => { + dispatch(addNodePopoverOpened()); + }, [dispatch]); + + return ( + } + onClick={handleOpenAddNodePopover} + pointerEvents="auto" + /> + ); +}; + +export default memo(AddNodeButton); diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/TopPanel.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/TopPanel.tsx new file mode 100644 index 0000000000..2e79ea9763 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/TopPanel.tsx @@ -0,0 +1,37 @@ +import { Flex, Spacer } from '@chakra-ui/layout'; +import AddNodeButton from 'features/nodes/components/flow/panels/TopPanel/AddNodeButton'; +import UpdateNodesButton from 'features/nodes/components/flow/panels/TopPanel/UpdateNodesButton'; +import WorkflowName from 'features/nodes/components/flow/panels/TopPanel/WorkflowName'; +import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; +import WorkflowLibraryButton from 'features/workflowLibrary/components/WorkflowLibraryButton'; +import WorkflowLibraryMenu from 'features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu'; +import { memo } from 'react'; + +const TopCenterPanel = () => { + const isWorkflowLibraryEnabled = + useFeatureStatus('workflowLibrary').isFeatureEnabled; + + return ( + + + + + + + {isWorkflowLibraryEnabled && } + + + ); +}; + +export default memo(TopCenterPanel); diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/UpdateNodesButton.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/UpdateNodesButton.tsx new file mode 100644 index 0000000000..6d82cc5b9d --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/UpdateNodesButton.tsx @@ -0,0 +1,32 @@ +import { useAppDispatch } from 'app/store/storeHooks'; +import IAIButton from 'common/components/IAIButton'; +import { useGetNodesNeedUpdate } from 'features/nodes/hooks/useGetNodesNeedUpdate'; +import { updateAllNodesRequested } from 'features/nodes/store/actions'; +import { memo, useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaExclamationTriangle } from 'react-icons/fa'; + +const UpdateNodesButton = () => { + const dispatch = useAppDispatch(); + const { t } = useTranslation(); + const nodesNeedUpdate = useGetNodesNeedUpdate(); + const handleClickUpdateNodes = useCallback(() => { + dispatch(updateAllNodesRequested()); + }, [dispatch]); + + if (!nodesNeedUpdate) { + return null; + } + + return ( + } + onClick={handleClickUpdateNodes} + pointerEvents="auto" + > + {t('nodes.updateAllNodes')} + + ); +}; + +export default memo(UpdateNodesButton); diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx new file mode 100644 index 0000000000..58fc3bb5b8 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx @@ -0,0 +1,25 @@ +import { Text } from '@chakra-ui/layout'; +import { useAppSelector } from 'app/store/storeHooks'; +import { memo } from 'react'; + +const TopCenterPanel = () => { + const name = useAppSelector( + (state) => state.workflow.name || 'Untitled Workflow' + ); + + return ( + + {name} + + ); +}; + +export default memo(TopCenterPanel); diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/TopRightPanel.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/TopRightPanel.tsx index a06b4a7656..944ec15c42 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/TopRightPanel.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/TopRightPanel.tsx @@ -1,8 +1,8 @@ import { Flex } from '@chakra-ui/react'; import WorkflowLibraryButton from 'features/workflowLibrary/components/WorkflowLibraryButton'; import { memo } from 'react'; -import WorkflowEditorSettings from './WorkflowEditorSettings'; import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; +import WorkflowLibraryMenu from 'features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu'; const TopRightPanel = () => { const isWorkflowLibraryEnabled = @@ -11,7 +11,7 @@ const TopRightPanel = () => { return ( {isWorkflowLibraryEnabled && } - + ); }; diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/WorkflowEditorSettings.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/WorkflowEditorSettings.tsx index 1ca671a222..66a55b20c7 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/WorkflowEditorSettings.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/WorkflowEditorSettings.tsx @@ -9,15 +9,14 @@ import { ModalContent, ModalHeader, ModalOverlay, - forwardRef, useDisclosure, } from '@chakra-ui/react'; import { createSelector } from '@reduxjs/toolkit'; import { stateSelector } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import IAIIconButton from 'common/components/IAIIconButton'; import IAISwitch from 'common/components/IAISwitch'; +import ReloadNodeTemplatesButton from 'features/nodes/components/flow/panels/TopCenterPanel/ReloadSchemaButton'; import { selectionModeChanged, shouldAnimateEdgesChanged, @@ -25,11 +24,9 @@ import { shouldSnapToGridChanged, shouldValidateGraphChanged, } from 'features/nodes/store/nodesSlice'; -import { ChangeEvent, memo, useCallback } from 'react'; -import { FaCog } from 'react-icons/fa'; -import { SelectionMode } from 'reactflow'; -import ReloadNodeTemplatesButton from 'features/nodes/components/flow/panels/TopCenterPanel/ReloadSchemaButton'; +import { ChangeEvent, ReactNode, memo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; +import { SelectionMode } from 'reactflow'; const formLabelProps: FormLabelProps = { fontWeight: 600, @@ -56,7 +53,11 @@ const selector = createSelector( defaultSelectorOptions ); -const WorkflowEditorSettings = forwardRef((_, ref) => { +type Props = { + children: (props: { onOpen: () => void }) => ReactNode; +}; + +const WorkflowEditorSettings = ({ children }: Props) => { const { isOpen, onOpen, onClose } = useDisclosure(); const dispatch = useAppDispatch(); const { @@ -106,13 +107,7 @@ const WorkflowEditorSettings = forwardRef((_, ref) => { return ( <> - } - onClick={onOpen} - /> + {children({ onOpen })} @@ -151,6 +146,7 @@ const WorkflowEditorSettings = forwardRef((_, ref) => { label={t('nodes.colorCodeEdges')} helperText={t('nodes.colorCodeEdgesHelp')} /> + { ); -}); +}; export default memo(WorkflowEditorSettings); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx index ee0a8314a0..2848aea49d 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx @@ -1,10 +1,10 @@ import { useDisclosure } from '@chakra-ui/react'; -import IAIIconButton from 'common/components/IAIIconButton'; +import IAIButton from 'common/components/IAIButton'; +import { WorkflowLibraryModalContext } from 'features/workflowLibrary/context/WorkflowLibraryModalContext'; import { memo } from 'react'; import { useTranslation } from 'react-i18next'; import { FaFolderOpen } from 'react-icons/fa'; import WorkflowLibraryModal from './WorkflowLibraryModal'; -import { WorkflowLibraryModalContext } from 'features/workflowLibrary/context/WorkflowLibraryModalContext'; const WorkflowLibraryButton = () => { const { t } = useTranslation(); @@ -12,12 +12,13 @@ const WorkflowLibraryButton = () => { return ( - } + } onClick={disclosure.onOpen} - tooltip={t('workflows.workflowLibrary')} - aria-label={t('workflows.workflowLibrary')} - /> + pointerEvents="auto" + > + {t('workflows.workflowLibrary')} + ); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx new file mode 100644 index 0000000000..1a04b11594 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx @@ -0,0 +1,18 @@ +import { MenuItem } from '@chakra-ui/react'; +import { useDownloadWorkflow } from 'features/nodes/hooks/useDownloadWorkflow'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaDownload } from 'react-icons/fa'; + +const DownloadWorkflowMenuItem = () => { + const { t } = useTranslation(); + const downloadWorkflow = useDownloadWorkflow(); + + return ( + } onClick={downloadWorkflow}> + {t('workflows.downloadWorkflow')} + + ); +}; + +export default memo(DownloadWorkflowMenuItem); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem.tsx new file mode 100644 index 0000000000..5d7e58e198 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem.tsx @@ -0,0 +1,88 @@ +import { + AlertDialog, + AlertDialogBody, + AlertDialogContent, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, + Button, + Flex, + MenuItem, + Text, + useDisclosure, +} from '@chakra-ui/react'; +import { useAppDispatch } from 'app/store/storeHooks'; +import { nodeEditorReset } from 'features/nodes/store/nodesSlice'; +import { addToast } from 'features/system/store/systemSlice'; +import { makeToast } from 'features/system/util/makeToast'; +import { memo, useCallback, useRef } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaTrash } from 'react-icons/fa'; + +const ResetWorkflowEditorMenuItem = () => { + const { t } = useTranslation(); + const dispatch = useAppDispatch(); + const { isOpen, onOpen, onClose } = useDisclosure(); + const cancelRef = useRef(null); + + const handleConfirmClear = useCallback(() => { + dispatch(nodeEditorReset()); + + dispatch( + addToast( + makeToast({ + title: t('workflows.workflowEditorReset'), + status: 'success', + }) + ) + ); + + onClose(); + }, [dispatch, t, onClose]); + + return ( + <> + } + sx={{ color: 'error.600', _dark: { color: 'error.300' } }} + onClick={onOpen} + > + {t('nodes.resetWorkflow')} + + + + + + + + {t('nodes.resetWorkflow')} + + + + + {t('nodes.resetWorkflowDesc')} + {t('nodes.resetWorkflowDesc2')} + + + + + + + + + + + ); +}; + +export default memo(ResetWorkflowEditorMenuItem); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx new file mode 100644 index 0000000000..dbcf7edd9d --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx @@ -0,0 +1,85 @@ +import { + AlertDialog, + AlertDialogBody, + AlertDialogContent, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, + FormControl, + FormLabel, + Input, + MenuItem, + useDisclosure, +} from '@chakra-ui/react'; +import { useAppSelector } from 'app/store/storeHooks'; +import IAIButton from 'common/components/IAIButton'; +import { useSaveWorkflowAs } from 'features/workflowLibrary/hooks/useSaveWorkflowAs'; +import { getWorkflowCopyName } from 'features/workflowLibrary/util/getWorkflowCopyName'; +import { ChangeEvent, memo, useCallback, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaClone } from 'react-icons/fa'; + +const SaveWorkflowAsButton = () => { + const currentName = useAppSelector((state) => state.workflow.name); + const { t } = useTranslation(); + const { saveWorkflowAs } = useSaveWorkflowAs(); + const [name, setName] = useState(getWorkflowCopyName(currentName)); + const { isOpen, onOpen, onClose } = useDisclosure(); + const inputRef = useRef(null); + + const onOpenCallback = useCallback(() => { + setName(getWorkflowCopyName(currentName)); + onOpen(); + }, [currentName, onOpen]); + + const onSave = useCallback(async () => { + saveWorkflowAs({ name, onSuccess: onClose, onError: onClose }); + }, [name, onClose, saveWorkflowAs]); + + const onChange = useCallback((e: ChangeEvent) => { + setName(e.target.value); + }, []); + + return ( + <> + } onClick={onOpenCallback}> + {t('workflows.saveWorkflowAs')} + + + + + + {t('workflows.saveWorkflowAs')} + + + + + {t('workflows.workflowName')} + + + + + + {t('common.cancel')} + + {t('common.saveAs')} + + + + + + + ); +}; + +export default memo(SaveWorkflowAsButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx new file mode 100644 index 0000000000..15ca98b69e --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx @@ -0,0 +1,17 @@ +import { MenuItem } from '@chakra-ui/react'; +import { useSaveLibraryWorkflow } from 'features/workflowLibrary/hooks/useSaveWorkflow'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaSave } from 'react-icons/fa'; + +const SaveLibraryWorkflowMenuItem = () => { + const { t } = useTranslation(); + const { saveWorkflow } = useSaveLibraryWorkflow(); + return ( + } onClick={saveWorkflow}> + {t('workflows.saveWorkflow')} + + ); +}; + +export default memo(SaveLibraryWorkflowMenuItem); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx new file mode 100644 index 0000000000..0a9bbdeb2c --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx @@ -0,0 +1,21 @@ +import { MenuItem } from '@chakra-ui/react'; +import WorkflowEditorSettings from 'features/nodes/components/flow/panels/TopRightPanel/WorkflowEditorSettings'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaCog } from 'react-icons/fa'; + +const DownloadWorkflowMenuItem = () => { + const { t } = useTranslation(); + + return ( + + {({ onOpen }) => ( + } onClick={onOpen}> + {t('nodes.workflowSettings')} + + )} + + ); +}; + +export default memo(DownloadWorkflowMenuItem); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx new file mode 100644 index 0000000000..d217a652bc --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx @@ -0,0 +1,27 @@ +import { MenuItem } from '@chakra-ui/react'; +import { FileButton } from '@mantine/core'; +import { useLoadWorkflowFromFile } from 'features/workflowLibrary/hooks/useLoadWorkflowFromFile'; +import { memo, useRef } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaUpload } from 'react-icons/fa'; + +const UploadWorkflowMenuItem = () => { + const { t } = useTranslation(); + const resetRef = useRef<() => void>(null); + const loadWorkflowFromFile = useLoadWorkflowFromFile({ resetRef }); + return ( + + {(props) => ( + } {...props}> + {t('workflows.uploadWorkflow')} + + )} + + ); +}; + +export default memo(UploadWorkflowMenuItem); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx new file mode 100644 index 0000000000..a19b9cd6b5 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx @@ -0,0 +1,50 @@ +import { + Menu, + MenuButton, + MenuDivider, + MenuList, + useDisclosure, +} from '@chakra-ui/react'; +import IAIIconButton from 'common/components/IAIIconButton'; +import { useGlobalMenuCloseTrigger } from 'common/hooks/useGlobalMenuCloseTrigger'; +import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; +import DownloadWorkflowMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem'; +import ResetWorkflowEditorMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem'; +import SaveWorkflowAsMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem'; +import SaveWorkflowMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem'; +import SettingsMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem'; +import UploadWorkflowMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaEllipsis } from 'react-icons/fa6'; +import { menuListMotionProps } from 'theme/components/menu'; + +const WorkflowLibraryMenu = () => { + const { t } = useTranslation(); + const { isOpen, onOpen, onClose } = useDisclosure(); + useGlobalMenuCloseTrigger(onClose); + const isWorkflowLibraryEnabled = + useFeatureStatus('workflowLibrary').isFeatureEnabled; + + return ( + + } + pointerEvents="auto" + /> + + {isWorkflowLibraryEnabled && } + {isWorkflowLibraryEnabled && } + + + + + + + + ); +}; + +export default memo(WorkflowLibraryMenu); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useDownloadWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useDownloadWorkflow.ts new file mode 100644 index 0000000000..8b0a640ef9 --- /dev/null +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useDownloadWorkflow.ts @@ -0,0 +1,17 @@ +import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; +import { useCallback } from 'react'; + +export const useDownloadWorkflow = () => { + const workflow = useWorkflow(); + const downloadWorkflow = useCallback(() => { + const blob = new Blob([JSON.stringify(workflow, null, 2)]); + const a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = `${workflow.name || 'My Workflow'}.json`; + document.body.appendChild(a); + a.click(); + a.remove(); + }, [workflow]); + + return downloadWorkflow; +}; diff --git a/invokeai/frontend/web/src/theme/components/menu.ts b/invokeai/frontend/web/src/theme/components/menu.ts index 4ab323bdb5..04a456daa1 100644 --- a/invokeai/frontend/web/src/theme/components/menu.ts +++ b/invokeai/frontend/web/src/theme/components/menu.ts @@ -45,6 +45,9 @@ const invokeAI = definePartsStyle((props) => ({ fontSize: 14, }, }, + divider: { + borderColor: mode('base.400', 'base.700')(props), + }, })); export const menuTheme = defineMultiStyleConfig({ From 13c9f8ffb763499abbf1ece9de18c9bc27bfedf5 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 20:23:02 +1100 Subject: [PATCH 056/515] fix(nodes): fix mismatched invocation decorator This got messed up during a merge commit --- invokeai/app/invocations/image.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index 9f37aca13f..89209fed41 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -113,11 +113,11 @@ class ImageCropInvocation(BaseInvocation, WithMetadata): @invocation( - "img_paste", - title="Paste Image", - tags=["image", "paste"], + invocation_type="img_pad_crop", + title="Center Pad or Crop Image", category="image", - version="1.2.0", + tags=["image", "pad", "crop"], + version="1.0.0", ) class CenterPadCropInvocation(BaseInvocation): """Pad or crop an image's sides from the center by specified pixels. Positive values are outside of the image.""" @@ -168,11 +168,11 @@ class CenterPadCropInvocation(BaseInvocation): @invocation( - invocation_type="img_pad_crop", - title="Center Pad or Crop Image", + "img_paste", + title="Paste Image", + tags=["image", "paste"], category="image", - tags=["image", "pad", "crop"], - version="1.0.0", + version="1.2.0", ) class ImagePasteInvocation(BaseInvocation, WithMetadata): """Pastes an image into another image.""" From db4763a742d62e6c3ab61b946896f79bed9edf59 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 20:42:34 +1100 Subject: [PATCH 057/515] feat(ui): use templates for edge validation of workflows This addresses an edge case where: 1. the workflow references fields that are present on the workflow's nodes, but not on the invocation templates for those nodes and 2. The invocation template for that type does exist This should be a fairly obscure edge case, but could happen if a user fiddled around with the workflow manually. I ran into it as a result of two nodes having accidentally mixed up their invocation types, a problem introduced with a wonky merge commit. --- .../nodes/util/workflow/validateWorkflow.ts | 61 ++++++++++++------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/util/workflow/validateWorkflow.ts b/invokeai/frontend/web/src/features/nodes/util/workflow/validateWorkflow.ts index 326774fcb1..8e7f13b112 100644 --- a/invokeai/frontend/web/src/features/nodes/util/workflow/validateWorkflow.ts +++ b/invokeai/frontend/web/src/features/nodes/util/workflow/validateWorkflow.ts @@ -86,6 +86,12 @@ export const validateWorkflow = ( // Validate each edge. If the edge is invalid, we must remove it to prevent runtime errors with reactflow. const sourceNode = keyedNodes[edge.source]; const targetNode = keyedNodes[edge.target]; + const sourceTemplate = sourceNode + ? invocationTemplates[sourceNode.data.type] + : undefined; + const targetTemplate = targetNode + ? invocationTemplates[targetNode.data.type] + : undefined; const issues: string[] = []; if (!sourceNode) { @@ -95,9 +101,23 @@ export const validateWorkflow = ( node: edge.source, }) ); - } else if ( + } + + if (!sourceTemplate) { + // The edge's source/output node template does not exist + issues.push( + t('nodes.missingTemplate', { + node: edge.source, + type: sourceNode?.data.type, + }) + ); + } + + if ( + sourceNode && + sourceTemplate && edge.type === 'default' && - !(edge.sourceHandle in sourceNode.data.outputs) + !(edge.sourceHandle in sourceTemplate.outputs) ) { // The edge's source/output node field does not exist issues.push( @@ -115,9 +135,23 @@ export const validateWorkflow = ( node: edge.target, }) ); - } else if ( + } + + if (!targetTemplate) { + // The edge's target/input node template does not exist + issues.push( + t('nodes.missingTemplate', { + node: edge.target, + type: targetNode?.data.type, + }) + ); + } + + if ( + targetNode && + targetTemplate && edge.type === 'default' && - !(edge.targetHandle in targetNode.data.inputs) + !(edge.targetHandle in targetTemplate.inputs) ) { // The edge's target/input node field does not exist issues.push( @@ -128,25 +162,6 @@ export const validateWorkflow = ( ); } - if (!sourceNode?.data.type || !invocationTemplates[sourceNode.data.type]) { - // The edge's source/output node template does not exist - issues.push( - t('nodes.missingTemplate', { - node: edge.source, - type: sourceNode?.data.type, - }) - ); - } - if (!targetNode?.data.type || !invocationTemplates[targetNode?.data.type]) { - // The edge's target/input node template does not exist - issues.push( - t('nodes.missingTemplate', { - node: edge.target, - type: targetNode?.data.type, - }) - ); - } - if (issues.length) { // This edge has some issues. Remove it. delete edges[i]; From d75d3885c3dbf42cd21edba761f262923bd6e56d Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 22:04:12 +1100 Subject: [PATCH 058/515] fix(ui): fix typo in uiPersistDenylist --- .../frontend/web/src/features/ui/store/uiPersistDenylist.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/frontend/web/src/features/ui/store/uiPersistDenylist.ts b/invokeai/frontend/web/src/features/ui/store/uiPersistDenylist.ts index ec26c26d0c..0f7b418d0f 100644 --- a/invokeai/frontend/web/src/features/ui/store/uiPersistDenylist.ts +++ b/invokeai/frontend/web/src/features/ui/store/uiPersistDenylist.ts @@ -5,6 +5,6 @@ import { UIState } from './uiTypes'; */ export const uiPersistDenylist: (keyof UIState)[] = [ 'shouldShowImageDetails', - 'globalContextMenuCloseTrigger', + 'globalMenuCloseTrigger', 'panels', ]; From 7436aa8e3a76c4aea7b050c6f7bbcff957b06e48 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:33:01 +1100 Subject: [PATCH 059/515] feat(workflow_records): do not use default_factory for workflow id Using default_factory to autogenerate UUIDs doesn't make sense here, and results awkward typescript types. Remove the default factory and instead manually create a UUID for workflow id. There are only two places where this needs to happen so it's not a big change. --- .../services/workflow_records/workflow_records_common.py | 7 ++++--- .../services/workflow_records/workflow_records_sqlite.py | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/invokeai/app/services/workflow_records/workflow_records_common.py b/invokeai/app/services/workflow_records/workflow_records_common.py index 599d2750c2..ffc98bb786 100644 --- a/invokeai/app/services/workflow_records/workflow_records_common.py +++ b/invokeai/app/services/workflow_records/workflow_records_common.py @@ -3,10 +3,9 @@ from enum import Enum from typing import Any, Union import semver -from pydantic import BaseModel, Field, JsonValue, TypeAdapter, field_validator +from pydantic import BaseModel, ConfigDict, Field, JsonValue, TypeAdapter, field_validator from invokeai.app.util.metaenum import MetaEnum -from invokeai.app.util.misc import uuid_string __workflow_meta_version__ = semver.Version.parse("1.0.0") @@ -66,12 +65,14 @@ class WorkflowWithoutID(BaseModel): nodes: list[dict[str, JsonValue]] = Field(description="The nodes of the workflow.") edges: list[dict[str, JsonValue]] = Field(description="The edges of the workflow.") + model_config = ConfigDict(extra="forbid") + WorkflowWithoutIDValidator = TypeAdapter(WorkflowWithoutID) class Workflow(WorkflowWithoutID): - id: str = Field(default_factory=uuid_string, description="The id of the workflow.") + id: str = Field(description="The id of the workflow.") WorkflowValidator = TypeAdapter(Workflow) diff --git a/invokeai/app/services/workflow_records/workflow_records_sqlite.py b/invokeai/app/services/workflow_records/workflow_records_sqlite.py index c28a7a2d92..ecbe7c0c9b 100644 --- a/invokeai/app/services/workflow_records/workflow_records_sqlite.py +++ b/invokeai/app/services/workflow_records/workflow_records_sqlite.py @@ -14,9 +14,10 @@ from invokeai.app.services.workflow_records.workflow_records_common import ( WorkflowRecordListItemDTO, WorkflowRecordListItemDTOValidator, WorkflowRecordOrderBy, - WorkflowValidator, WorkflowWithoutID, + WorkflowWithoutIDValidator, ) +from invokeai.app.util.misc import uuid_string class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): @@ -66,7 +67,7 @@ class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): try: # Only user workflows may be created by this method assert workflow.meta.category is WorkflowCategory.User - workflow_with_id = WorkflowValidator.validate_python(workflow.model_dump()) + workflow_with_id = Workflow(**workflow.model_dump(), id=uuid_string()) self._lock.acquire() self._cursor.execute( """--sql @@ -204,7 +205,8 @@ class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): workflow_paths = workflows_dir.glob("*.json") for path in workflow_paths: bytes_ = path.read_bytes() - workflow = WorkflowValidator.validate_json(bytes_) + workflow_without_id = WorkflowWithoutIDValidator.validate_json(bytes_) + workflow = Workflow(**workflow_without_id.model_dump(), id=uuid_string()) workflows.append(workflow) # Only default workflows may be managed by this method assert all(w.meta.category is WorkflowCategory.Default for w in workflows) From d9a0efb20b9c223745ead663e51aef665aebe796 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:33:54 +1100 Subject: [PATCH 060/515] chore)ui): typegen --- .../frontend/web/src/services/api/schema.d.ts | 173 ++++++++++++++---- 1 file changed, 136 insertions(+), 37 deletions(-) diff --git a/invokeai/frontend/web/src/services/api/schema.d.ts b/invokeai/frontend/web/src/services/api/schema.d.ts index a0af5e7d1e..5a99f39e4e 100644 --- a/invokeai/frontend/web/src/services/api/schema.d.ts +++ b/invokeai/frontend/web/src/services/api/schema.d.ts @@ -278,6 +278,10 @@ export type paths = { /** Get Version */ get: operations["app_version"]; }; + "/api/v1/app/app_deps": { + /** Get App Deps */ + get: operations["get_app_deps"]; + }; "/api/v1/app/config": { /** Get Config */ get: operations["get_config"]; @@ -528,6 +532,77 @@ export type components = { */ watermarking_methods: string[]; }; + /** + * AppDependencyVersions + * @description App depencency Versions Response + */ + AppDependencyVersions: { + /** + * Accelerate + * @description accelerate version + */ + accelerate: string; + /** + * Compel + * @description compel version + */ + compel: string; + /** + * Cuda + * @description CUDA version + */ + cuda: string | null; + /** + * Diffusers + * @description diffusers version + */ + diffusers: string; + /** + * Numpy + * @description Numpy version + */ + numpy: string; + /** + * Opencv + * @description OpenCV version + */ + opencv: string; + /** + * Onnx + * @description ONNX version + */ + onnx: string; + /** + * Pillow + * @description Pillow (PIL) version + */ + pillow: string; + /** + * Python + * @description Python version + */ + python: string; + /** + * Torch + * @description PyTorch version + */ + torch: string; + /** + * Torchvision + * @description PyTorch Vision version + */ + torchvision: string; + /** + * Transformers + * @description transformers version + */ + transformers: string; + /** + * Xformers + * @description xformers version + */ + xformers: string | null; + }; /** * AppVersion * @description App Version Response @@ -1302,7 +1377,7 @@ export type components = { type: "canny_image_processor"; }; /** - * Paste Image + * Center Pad or Crop Image * @description Pad or crop an image's sides from the center by specified pixels. Positive values are outside of the image. */ CenterPadCropInvocation: { @@ -1351,10 +1426,10 @@ export type components = { bottom?: number; /** * type - * @default img_paste + * @default img_pad_crop * @constant */ - type: "img_paste"; + type: "img_pad_crop"; }; /** * ClearResult @@ -3434,7 +3509,7 @@ export type components = { * @description The nodes in this graph */ nodes?: { - [key: string]: components["schemas"]["SaveImageInvocation"] | components["schemas"]["StringJoinInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["BlankImageInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["SDXLLoraLoaderInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["MaskCombineInvocation"] | components["schemas"]["FaceOffInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["SchedulerInvocation"] | components["schemas"]["MergeTilesToImageInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["CropLatentsCoreInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["TileToPropertiesInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["PairTileImageInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["CalculateImageTilesInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["LinearUIOutputInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["CannyImageProcessorInvocation"]; + [key: string]: components["schemas"]["SchedulerInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["BlankImageInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["CalculateImageTilesInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["FaceOffInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["MergeTilesToImageInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["TileToPropertiesInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["PairTileImageInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["SDXLLoraLoaderInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["LinearUIOutputInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["SaveImageInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["StringJoinInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["CropLatentsCoreInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["MaskCombineInvocation"]; }; /** * Edges @@ -3471,7 +3546,7 @@ export type components = { * @description The results of node executions */ results: { - [key: string]: components["schemas"]["IntegerOutput"] | components["schemas"]["ColorOutput"] | components["schemas"]["T2IAdapterOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["VAEOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["TileToPropertiesOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["UNetOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["String2Output"] | components["schemas"]["PairTileImageOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["ConditioningCollectionOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["ONNXModelLoaderOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["SDXLLoraLoaderOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["ImageOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["CalculateImageTilesOutput"]; + [key: string]: components["schemas"]["ModelLoaderOutput"] | components["schemas"]["VAEOutput"] | components["schemas"]["IntegerOutput"] | components["schemas"]["T2IAdapterOutput"] | components["schemas"]["String2Output"] | components["schemas"]["ColorOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["UNetOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["TileToPropertiesOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["SDXLLoraLoaderOutput"] | components["schemas"]["PairTileImageOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["ONNXModelLoaderOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["ImageOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["CalculateImageTilesOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["ConditioningCollectionOutput"]; }; /** * Errors @@ -4480,7 +4555,7 @@ export type components = { type: "image_output"; }; /** - * Center Pad or Crop Image + * Paste Image * @description Pastes an image into another image. */ ImagePasteInvocation: { @@ -4529,10 +4604,10 @@ export type components = { crop?: boolean; /** * type - * @default img_pad_crop + * @default img_paste * @constant */ - type: "img_pad_crop"; + type: "img_paste"; }; /** * ImageRecordChanges @@ -5148,6 +5223,16 @@ export type components = { * @description The item being iterated over */ item: unknown; + /** + * Index + * @description The index of the item + */ + index: number; + /** + * Total + * @description The total number of items + */ + total: number; /** * type * @default iterate_output @@ -9875,7 +9960,7 @@ export type components = { * Id * @description The id of the workflow. */ - id?: string; + id: string; }; /** * WorkflowCategory @@ -9889,8 +9974,11 @@ export type components = { * @description The version of the workflow schema. */ version: string; - /** @description The category of the workflow (user or default). */ - category: components["schemas"]["WorkflowCategory"]; + /** + * @description The category of the workflow (user or default). + * @default user + */ + category?: components["schemas"]["WorkflowCategory"]; }; /** WorkflowRecordDTO */ WorkflowRecordDTO: { @@ -10265,41 +10353,41 @@ export type components = { */ UIType: "SDXLMainModelField" | "SDXLRefinerModelField" | "ONNXModelField" | "VAEModelField" | "LoRAModelField" | "ControlNetModelField" | "IPAdapterModelField" | "SchedulerField" | "AnyField" | "CollectionField" | "CollectionItemField" | "DEPRECATED_Boolean" | "DEPRECATED_Color" | "DEPRECATED_Conditioning" | "DEPRECATED_Control" | "DEPRECATED_Float" | "DEPRECATED_Image" | "DEPRECATED_Integer" | "DEPRECATED_Latents" | "DEPRECATED_String" | "DEPRECATED_BooleanCollection" | "DEPRECATED_ColorCollection" | "DEPRECATED_ConditioningCollection" | "DEPRECATED_ControlCollection" | "DEPRECATED_FloatCollection" | "DEPRECATED_ImageCollection" | "DEPRECATED_IntegerCollection" | "DEPRECATED_LatentsCollection" | "DEPRECATED_StringCollection" | "DEPRECATED_BooleanPolymorphic" | "DEPRECATED_ColorPolymorphic" | "DEPRECATED_ConditioningPolymorphic" | "DEPRECATED_ControlPolymorphic" | "DEPRECATED_FloatPolymorphic" | "DEPRECATED_ImagePolymorphic" | "DEPRECATED_IntegerPolymorphic" | "DEPRECATED_LatentsPolymorphic" | "DEPRECATED_StringPolymorphic" | "DEPRECATED_MainModel" | "DEPRECATED_UNet" | "DEPRECATED_Vae" | "DEPRECATED_CLIP" | "DEPRECATED_Collection" | "DEPRECATED_CollectionItem" | "DEPRECATED_Enum" | "DEPRECATED_WorkflowField" | "DEPRECATED_IsIntermediate" | "DEPRECATED_BoardField" | "DEPRECATED_MetadataItem" | "DEPRECATED_MetadataItemCollection" | "DEPRECATED_MetadataItemPolymorphic" | "DEPRECATED_MetadataDict"; /** - * StableDiffusion1ModelFormat + * StableDiffusionOnnxModelFormat * @description An enumeration. * @enum {string} */ - StableDiffusion1ModelFormat: "checkpoint" | "diffusers"; - /** - * IPAdapterModelFormat - * @description An enumeration. - * @enum {string} - */ - IPAdapterModelFormat: "invokeai"; + StableDiffusionOnnxModelFormat: "olive" | "onnx"; /** * T2IAdapterModelFormat * @description An enumeration. * @enum {string} */ T2IAdapterModelFormat: "diffusers"; - /** - * StableDiffusionOnnxModelFormat - * @description An enumeration. - * @enum {string} - */ - StableDiffusionOnnxModelFormat: "olive" | "onnx"; - /** - * ControlNetModelFormat - * @description An enumeration. - * @enum {string} - */ - ControlNetModelFormat: "checkpoint" | "diffusers"; /** * StableDiffusion2ModelFormat * @description An enumeration. * @enum {string} */ StableDiffusion2ModelFormat: "checkpoint" | "diffusers"; + /** + * StableDiffusion1ModelFormat + * @description An enumeration. + * @enum {string} + */ + StableDiffusion1ModelFormat: "checkpoint" | "diffusers"; + /** + * CLIPVisionModelFormat + * @description An enumeration. + * @enum {string} + */ + CLIPVisionModelFormat: "diffusers"; + /** + * IPAdapterModelFormat + * @description An enumeration. + * @enum {string} + */ + IPAdapterModelFormat: "invokeai"; /** * StableDiffusionXLModelFormat * @description An enumeration. @@ -10307,11 +10395,11 @@ export type components = { */ StableDiffusionXLModelFormat: "checkpoint" | "diffusers"; /** - * CLIPVisionModelFormat + * ControlNetModelFormat * @description An enumeration. * @enum {string} */ - CLIPVisionModelFormat: "diffusers"; + ControlNetModelFormat: "checkpoint" | "diffusers"; }; responses: never; parameters: never; @@ -11562,6 +11650,17 @@ export type operations = { }; }; }; + /** Get App Deps */ + get_app_deps: { + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": components["schemas"]["AppDependencyVersions"]; + }; + }; + }; + }; /** Get Config */ get_config: { responses: { @@ -12126,13 +12225,13 @@ export type operations = { page?: number; /** @description The number of workflows per page */ per_page?: number; - /** @description The order by */ + /** @description The attribute to order by */ order_by?: components["schemas"]["WorkflowRecordOrderBy"]; - /** @description The order by */ + /** @description The direction to order by */ direction?: components["schemas"]["SQLiteDirection"]; - /** @description The category to get */ + /** @description The category of workflow to get */ category?: components["schemas"]["WorkflowCategory"]; - /** @description The text to filter by, matches name and description */ + /** @description The text to query by (matches name and description) */ query?: string | null; }; }; From 4627a7c75f704e5fea1a750c0fb75597a33b0f3d Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:35:51 +1100 Subject: [PATCH 061/515] tidy(ui): remove unused components --- .../panels/TopCenterPanel/TopCenterPanel.tsx | 53 ----------- .../components/DownloadWorkflowButton.tsx | 29 ------ .../components/LoadWorkflowFromFileButton.tsx | 30 ------- .../components/ResetWorkflowButton.tsx | 87 ------------------ .../components/SaveWorkflowAsButton.tsx | 89 ------------------- .../components/SaveWorkflowButton.tsx | 21 ----- 6 files changed, 309 deletions(-) delete mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx delete mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/DownloadWorkflowButton.tsx delete mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/LoadWorkflowFromFileButton.tsx delete mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/ResetWorkflowButton.tsx delete mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowAsButton.tsx delete mode 100644 invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx deleted file mode 100644 index e6d366b0f3..0000000000 --- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopCenterPanel/TopCenterPanel.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { Flex, Heading } from '@chakra-ui/layout'; -import { memo } from 'react'; -import DownloadWorkflowButton from 'features/workflowLibrary/components/DownloadWorkflowButton'; -import UploadWorkflowButton from 'features/workflowLibrary/components/LoadWorkflowFromFileButton'; -import ResetWorkflowEditorButton from 'features/workflowLibrary/components/ResetWorkflowButton'; -import SaveWorkflowButton from 'features/workflowLibrary/components/SaveWorkflowButton'; -import SaveWorkflowAsButton from 'features/workflowLibrary/components/SaveWorkflowAsButton'; -import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; -import { useAppSelector } from 'app/store/storeHooks'; - -const TopCenterPanel = () => { - const isWorkflowLibraryEnabled = - useFeatureStatus('workflowLibrary').isFeatureEnabled; - const name = useAppSelector( - (state) => state.workflow.name || 'Untitled Workflow' - ); - - return ( - - - {name} - - {/* - - {isWorkflowLibraryEnabled && ( - <> - - - - )} - */} - - ); -}; - -export default memo(TopCenterPanel); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/DownloadWorkflowButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/DownloadWorkflowButton.tsx deleted file mode 100644 index bfddbd57d9..0000000000 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/DownloadWorkflowButton.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import IAIIconButton from 'common/components/IAIIconButton'; -import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; -import { memo, useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; -import { FaDownload } from 'react-icons/fa'; - -const DownloadWorkflowButton = () => { - const { t } = useTranslation(); - const workflow = useWorkflow(); - const handleDownload = useCallback(() => { - const blob = new Blob([JSON.stringify(workflow, null, 2)]); - const a = document.createElement('a'); - a.href = URL.createObjectURL(blob); - a.download = `${workflow.name || 'My Workflow'}.json`; - document.body.appendChild(a); - a.click(); - a.remove(); - }, [workflow]); - return ( - } - tooltip={t('workflows.downloadWorkflow')} - aria-label={t('workflows.downloadWorkflow')} - onClick={handleDownload} - /> - ); -}; - -export default memo(DownloadWorkflowButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/LoadWorkflowFromFileButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/LoadWorkflowFromFileButton.tsx deleted file mode 100644 index 1d8abac774..0000000000 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/LoadWorkflowFromFileButton.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { FileButton } from '@mantine/core'; -import IAIIconButton from 'common/components/IAIIconButton'; -import { useLoadWorkflowFromFile } from 'features/workflowLibrary/hooks/useLoadWorkflowFromFile'; -import { memo, useRef } from 'react'; -import { useTranslation } from 'react-i18next'; -import { FaUpload } from 'react-icons/fa'; - -const UploadWorkflowButton = () => { - const { t } = useTranslation(); - const resetRef = useRef<() => void>(null); - const loadWorkflowFromFile = useLoadWorkflowFromFile({ resetRef }); - return ( - - {(props) => ( - } - tooltip={t('workflows.uploadWorkflow')} - aria-label={t('workflows.uploadWorkflow')} - {...props} - /> - )} - - ); -}; - -export default memo(UploadWorkflowButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/ResetWorkflowButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/ResetWorkflowButton.tsx deleted file mode 100644 index 468f7bc9a8..0000000000 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/ResetWorkflowButton.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { - AlertDialog, - AlertDialogBody, - AlertDialogContent, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogOverlay, - Button, - Flex, - Text, - useDisclosure, -} from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import IAIIconButton from 'common/components/IAIIconButton'; -import { nodeEditorReset } from 'features/nodes/store/nodesSlice'; -import { addToast } from 'features/system/store/systemSlice'; -import { makeToast } from 'features/system/util/makeToast'; -import { memo, useCallback, useRef } from 'react'; -import { useTranslation } from 'react-i18next'; -import { FaTrash } from 'react-icons/fa'; - -const ResetWorkflowEditorButton = () => { - const { t } = useTranslation(); - const dispatch = useAppDispatch(); - const { isOpen, onOpen, onClose } = useDisclosure(); - const cancelRef = useRef(null); - - const handleConfirmClear = useCallback(() => { - dispatch(nodeEditorReset()); - - dispatch( - addToast( - makeToast({ - title: t('workflows.workflowEditorReset'), - status: 'success', - }) - ) - ); - - onClose(); - }, [dispatch, t, onClose]); - - return ( - <> - } - tooltip={t('nodes.resetWorkflow')} - aria-label={t('nodes.resetWorkflow')} - onClick={onOpen} - colorScheme="error" - /> - - - - - - - {t('nodes.resetWorkflow')} - - - - - {t('nodes.resetWorkflowDesc')} - {t('nodes.resetWorkflowDesc2')} - - - - - - - - - - - ); -}; - -export default memo(ResetWorkflowEditorButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowAsButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowAsButton.tsx deleted file mode 100644 index 875a2e74fd..0000000000 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowAsButton.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { - AlertDialog, - AlertDialogBody, - AlertDialogContent, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogOverlay, - FormControl, - FormLabel, - Input, - useDisclosure, -} from '@chakra-ui/react'; -import { useAppSelector } from 'app/store/storeHooks'; -import IAIButton from 'common/components/IAIButton'; -import IAIIconButton from 'common/components/IAIIconButton'; -import { useSaveWorkflowAs } from 'features/workflowLibrary/hooks/useSaveWorkflowAs'; -import { getWorkflowCopyName } from 'features/workflowLibrary/util/getWorkflowCopyName'; -import { ChangeEvent, memo, useCallback, useRef, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { FaClone } from 'react-icons/fa'; - -const SaveWorkflowAsButton = () => { - const currentName = useAppSelector((state) => state.workflow.name); - const { t } = useTranslation(); - const { saveWorkflowAs, isLoading } = useSaveWorkflowAs(); - const [name, setName] = useState(getWorkflowCopyName(currentName)); - const { isOpen, onOpen, onClose } = useDisclosure(); - const inputRef = useRef(null); - - const onOpenCallback = useCallback(() => { - setName(getWorkflowCopyName(currentName)); - onOpen(); - }, [currentName, onOpen]); - - const onSave = useCallback(async () => { - saveWorkflowAs({ name, onSuccess: onClose, onError: onClose }); - }, [name, onClose, saveWorkflowAs]); - - const onChange = useCallback((e: ChangeEvent) => { - setName(e.target.value); - }, []); - - return ( - <> - } - onClick={onOpenCallback} - isLoading={isLoading} - tooltip={t('workflows.saveWorkflowAs')} - aria-label={t('workflows.saveWorkflowAs')} - /> - - - - - {t('workflows.saveWorkflowAs')} - - - - - {t('workflows.workflowName')} - - - - - - {t('common.cancel')} - - {t('common.saveAs')} - - - - - - - ); -}; - -export default memo(SaveWorkflowAsButton); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx deleted file mode 100644 index 2665b9ff07..0000000000 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/SaveWorkflowButton.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import IAIIconButton from 'common/components/IAIIconButton'; -import { useSaveLibraryWorkflow } from 'features/workflowLibrary/hooks/useSaveWorkflow'; -import { memo } from 'react'; -import { useTranslation } from 'react-i18next'; -import { FaSave } from 'react-icons/fa'; - -const SaveLibraryWorkflowButton = () => { - const { t } = useTranslation(); - const { saveWorkflow, isLoading } = useSaveLibraryWorkflow(); - return ( - } - onClick={saveWorkflow} - isLoading={isLoading} - tooltip={t('workflows.saveWorkflow')} - aria-label={t('workflows.saveWorkflow')} - /> - ); -}; - -export default memo(SaveLibraryWorkflowButton); From 6d176601cc3dcd05405979308c0f2a2629ae134b Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:44:00 +1100 Subject: [PATCH 062/515] feat(ui): track & indicate workflow saved status --- invokeai/frontend/web/public/locales/en.json | 3 +- .../flow/panels/TopPanel/WorkflowName.tsx | 4 ++ .../src/features/nodes/hooks/useWorkflow.ts | 11 ++--- .../src/features/nodes/store/nodesSlice.ts | 40 ++++++++++++++++++- .../web/src/features/nodes/store/types.ts | 4 +- .../src/features/nodes/store/workflowSlice.ts | 28 +++++++++++-- .../workflowLibrary/hooks/useSaveWorkflow.ts | 22 ++++++---- .../hooks/useSaveWorkflowAs.ts | 12 ++++-- 8 files changed, 101 insertions(+), 23 deletions(-) diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index a7ad34bfc7..ee7972c564 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -171,7 +171,8 @@ "created": "Created", "prevPage": "Previous Page", "nextPage": "Next Page", - "unknownError": "Unknown Error" + "unknownError": "Unknown Error", + "unsaved": "Unsaved" }, "controlnet": { "controlAdapter_one": "Control Adapter", diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx index 58fc3bb5b8..bc05af70f2 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx @@ -1,11 +1,14 @@ import { Text } from '@chakra-ui/layout'; import { useAppSelector } from 'app/store/storeHooks'; import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; const TopCenterPanel = () => { + const { t } = useTranslation(); const name = useAppSelector( (state) => state.workflow.name || 'Untitled Workflow' ); + const isTouched = useAppSelector((state) => state.workflow.isTouched); return ( { opacity={0.8} > {name} + {isTouched ? ` (${t('common.unsaved')})` : ''} ); }; diff --git a/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts b/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts index d90d2a824c..5ad9bb675f 100644 --- a/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts +++ b/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts @@ -1,18 +1,19 @@ -import { RootState } from 'app/store/store'; import { useAppSelector } from 'app/store/storeHooks'; import { buildWorkflow } from 'features/nodes/util/workflow/buildWorkflow'; +import { omit } from 'lodash-es'; import { useMemo } from 'react'; import { useDebounce } from 'use-debounce'; export const useWorkflow = () => { - const nodes_ = useAppSelector((state: RootState) => state.nodes.nodes); - const edges_ = useAppSelector((state: RootState) => state.nodes.edges); - const workflow_ = useAppSelector((state: RootState) => state.workflow); + const nodes_ = useAppSelector((state) => state.nodes.nodes); + const edges_ = useAppSelector((state) => state.nodes.edges); + const workflow_ = useAppSelector((state) => state.workflow); const [nodes] = useDebounce(nodes_, 300); const [edges] = useDebounce(edges_, 300); const [workflow] = useDebounce(workflow_, 300); const builtWorkflow = useMemo( - () => buildWorkflow({ nodes, edges, workflow }), + () => + buildWorkflow({ nodes, edges, workflow: omit(workflow, 'isTouched') }), [nodes, edges, workflow] ); diff --git a/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts b/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts index 12058cd68f..8b79753dbc 100644 --- a/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts +++ b/invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts @@ -1,4 +1,4 @@ -import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import { createSlice, isAnyOf, PayloadAction } from '@reduxjs/toolkit'; import { workflowLoaded } from 'features/nodes/store/actions'; import { SHARED_NODE_PROPERTIES } from 'features/nodes/types/constants'; import { @@ -936,4 +936,42 @@ export const { edgeAdded, } = nodesSlice.actions; +// This is used for tracking `state.workflow.isTouched` +export const isAnyNodeOrEdgeMutation = isAnyOf( + connectionEnded, + connectionMade, + edgeDeleted, + edgesChanged, + edgesDeleted, + edgeUpdated, + fieldBoardValueChanged, + fieldBooleanValueChanged, + fieldColorValueChanged, + fieldControlNetModelValueChanged, + fieldEnumModelValueChanged, + fieldImageValueChanged, + fieldIPAdapterModelValueChanged, + fieldT2IAdapterModelValueChanged, + fieldLabelChanged, + fieldLoRAModelValueChanged, + fieldMainModelValueChanged, + fieldNumberValueChanged, + fieldRefinerModelValueChanged, + fieldSchedulerValueChanged, + fieldStringValueChanged, + fieldVaeModelValueChanged, + nodeAdded, + nodeReplaced, + nodeIsIntermediateChanged, + nodeIsOpenChanged, + nodeLabelChanged, + nodeNotesChanged, + nodesChanged, + nodesDeleted, + nodeUseCacheChanged, + notesNodeValueChanged, + selectionPasted, + edgeAdded +); + export default nodesSlice.reducer; diff --git a/invokeai/frontend/web/src/features/nodes/store/types.ts b/invokeai/frontend/web/src/features/nodes/store/types.ts index bba93e270a..feae557633 100644 --- a/invokeai/frontend/web/src/features/nodes/store/types.ts +++ b/invokeai/frontend/web/src/features/nodes/store/types.ts @@ -41,4 +41,6 @@ export type NodesState = { selectionMode: SelectionMode; }; -export type WorkflowsState = Omit; +export type WorkflowsState = Omit & { + isTouched: boolean; +}; diff --git a/invokeai/frontend/web/src/features/nodes/store/workflowSlice.ts b/invokeai/frontend/web/src/features/nodes/store/workflowSlice.ts index 9d207b9ca7..f3f6e42e34 100644 --- a/invokeai/frontend/web/src/features/nodes/store/workflowSlice.ts +++ b/invokeai/frontend/web/src/features/nodes/store/workflowSlice.ts @@ -1,6 +1,10 @@ import { PayloadAction, createSlice } from '@reduxjs/toolkit'; import { workflowLoaded } from 'features/nodes/store/actions'; -import { nodeEditorReset, nodesDeleted } from 'features/nodes/store/nodesSlice'; +import { + nodeEditorReset, + nodesDeleted, + isAnyNodeOrEdgeMutation, +} from 'features/nodes/store/nodesSlice'; import { WorkflowsState as WorkflowState } from 'features/nodes/store/types'; import { FieldIdentifier } from 'features/nodes/types/field'; import { cloneDeep, isEqual, uniqBy } from 'lodash-es'; @@ -15,6 +19,7 @@ export const initialWorkflowState: WorkflowState = { notes: '', exposedFields: [], meta: { version: '2.0.0', category: 'user' }, + isTouched: true, }; const workflowSlice = createSlice({ @@ -29,6 +34,7 @@ const workflowSlice = createSlice({ state.exposedFields.concat(action.payload), (field) => `${field.nodeId}-${field.fieldName}` ); + state.isTouched = true; }, workflowExposedFieldRemoved: ( state, @@ -37,37 +43,48 @@ const workflowSlice = createSlice({ state.exposedFields = state.exposedFields.filter( (field) => !isEqual(field, action.payload) ); + state.isTouched = true; }, workflowNameChanged: (state, action: PayloadAction) => { state.name = action.payload; + state.isTouched = true; }, workflowDescriptionChanged: (state, action: PayloadAction) => { state.description = action.payload; + state.isTouched = true; }, workflowTagsChanged: (state, action: PayloadAction) => { state.tags = action.payload; + state.isTouched = true; }, workflowAuthorChanged: (state, action: PayloadAction) => { state.author = action.payload; + state.isTouched = true; }, workflowNotesChanged: (state, action: PayloadAction) => { state.notes = action.payload; + state.isTouched = true; }, workflowVersionChanged: (state, action: PayloadAction) => { state.version = action.payload; + state.isTouched = true; }, workflowContactChanged: (state, action: PayloadAction) => { state.contact = action.payload; + state.isTouched = true; }, workflowIDChanged: (state, action: PayloadAction) => { state.id = action.payload; }, workflowReset: () => cloneDeep(initialWorkflowState), + workflowSaved: (state) => { + state.isTouched = false; + }, }, extraReducers: (builder) => { builder.addCase(workflowLoaded, (state, action) => { - const { nodes: _nodes, edges: _edges, ...workflow } = action.payload; - return cloneDeep(workflow); + const { nodes: _nodes, edges: _edges, ...workflowExtra } = action.payload; + return { ...cloneDeep(workflowExtra), isTouched: true }; }); builder.addCase(nodesDeleted, (state, action) => { @@ -79,6 +96,10 @@ const workflowSlice = createSlice({ }); builder.addCase(nodeEditorReset, () => cloneDeep(initialWorkflowState)); + + builder.addMatcher(isAnyNodeOrEdgeMutation, (state) => { + state.isTouched = true; + }); }, }); @@ -94,6 +115,7 @@ export const { workflowContactChanged, workflowIDChanged, workflowReset, + workflowSaved, } = workflowSlice.actions; export default workflowSlice.reducer; diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts index 427d473396..59bcf9d89c 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflow.ts @@ -1,14 +1,18 @@ import { ToastId, useToast } from '@chakra-ui/react'; import { useAppDispatch } from 'app/store/storeHooks'; import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; -import { workflowLoaded } from 'features/nodes/store/actions'; -import { zWorkflowV2 } from 'features/nodes/types/workflow'; +import { + workflowIDChanged, + workflowSaved, +} from 'features/nodes/store/workflowSlice'; +import { WorkflowV2 } from 'features/nodes/types/workflow'; import { useCallback, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { useCreateWorkflowMutation, useUpdateWorkflowMutation, } from 'services/api/endpoints/workflows'; +import { O } from 'ts-toolbelt'; type UseSaveLibraryWorkflowReturn = { saveWorkflow: () => Promise; @@ -18,6 +22,10 @@ type UseSaveLibraryWorkflowReturn = { type UseSaveLibraryWorkflow = () => UseSaveLibraryWorkflowReturn; +const isWorkflowWithID = ( + workflow: WorkflowV2 +): workflow is O.Required => Boolean(workflow.id); + export const useSaveLibraryWorkflow: UseSaveLibraryWorkflow = () => { const { t } = useTranslation(); const dispatch = useAppDispatch(); @@ -34,15 +42,13 @@ export const useSaveLibraryWorkflow: UseSaveLibraryWorkflow = () => { isClosable: false, }); try { - if (workflow.id) { - const data = await updateWorkflow(workflow).unwrap(); - const updatedWorkflow = zWorkflowV2.parse(data.workflow); - dispatch(workflowLoaded(updatedWorkflow)); + if (isWorkflowWithID(workflow)) { + await updateWorkflow(workflow).unwrap(); } else { const data = await createWorkflow(workflow).unwrap(); - const createdWorkflow = zWorkflowV2.parse(data.workflow); - dispatch(workflowLoaded(createdWorkflow)); + dispatch(workflowIDChanged(data.workflow.id)); } + dispatch(workflowSaved()); toast.update(toastRef.current, { title: t('workflows.workflowSaved'), status: 'success', diff --git a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts index 9565d036c4..cdfbaef0f2 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts +++ b/invokeai/frontend/web/src/features/workflowLibrary/hooks/useSaveWorkflowAs.ts @@ -1,8 +1,11 @@ import { ToastId, useToast } from '@chakra-ui/react'; import { useAppDispatch } from 'app/store/storeHooks'; import { useWorkflow } from 'features/nodes/hooks/useWorkflow'; -import { workflowLoaded } from 'features/nodes/store/actions'; -import { zWorkflowV2 } from 'features/nodes/types/workflow'; +import { + workflowIDChanged, + workflowNameChanged, + workflowSaved, +} from 'features/nodes/store/workflowSlice'; import { useCallback, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { useCreateWorkflowMutation } from 'services/api/endpoints/workflows'; @@ -40,8 +43,9 @@ export const useSaveWorkflowAs: UseSaveWorkflowAs = () => { workflow.id = undefined; workflow.name = newName; const data = await createWorkflow(workflow).unwrap(); - const createdWorkflow = zWorkflowV2.parse(data.workflow); - dispatch(workflowLoaded(createdWorkflow)); + dispatch(workflowIDChanged(data.workflow.id)); + dispatch(workflowNameChanged(data.workflow.name)); + dispatch(workflowSaved()); onSuccess && onSuccess(); toast.update(toastRef.current, { title: t('workflows.workflowSaved'), From 6e028d691a40e4b564b196d2e80ce39848917a69 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:48:12 +1100 Subject: [PATCH 063/515] fix(ui): use translation for unnamed workflows --- .../nodes/components/flow/panels/TopPanel/WorkflowName.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx index bc05af70f2..97432ae865 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx @@ -5,9 +5,7 @@ import { useTranslation } from 'react-i18next'; const TopCenterPanel = () => { const { t } = useTranslation(); - const name = useAppSelector( - (state) => state.workflow.name || 'Untitled Workflow' - ); + const name = useAppSelector((state) => state.workflow.name); const isTouched = useAppSelector((state) => state.workflow.isTouched); return ( @@ -20,7 +18,7 @@ const TopCenterPanel = () => { fontWeight={600} opacity={0.8} > - {name} + {name || t('workflows.unnamedWorkflow')} {isTouched ? ` (${t('common.unsaved')})` : ''} ); From 06104f3851416d64764cf2cb7c19efa184c7fca8 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 6 Dec 2023 23:55:13 +1100 Subject: [PATCH 064/515] fix(ui): disallow loading/deleting workflow if already open --- invokeai/frontend/web/public/locales/en.json | 3 ++- .../components/WorkflowLibraryListItem.tsx | 13 +++++++++++-- .../frontend/web/src/theme/components/heading.ts | 12 ++++++++++++ invokeai/frontend/web/src/theme/theme.ts | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 invokeai/frontend/web/src/theme/components/heading.ts diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index ee7972c564..c948311c29 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -1651,7 +1651,8 @@ "clearWorkflowSearchFilter": "Clear Workflow Search Filter", "workflowName": "Workflow Name", "workflowEditorReset": "Workflow Editor Reset", - "workflowEditorMenu": "Workflow Editor Menu" + "workflowEditorMenu": "Workflow Editor Menu", + "workflowIsOpen": "Workflow is Open" }, "app": { "storeNotInitialized": "Store is not initialized" diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx index f8481ded83..49784c56d9 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryListItem.tsx @@ -4,9 +4,10 @@ import dateFormat, { masks } from 'dateformat'; import { useDeleteLibraryWorkflow } from 'features/workflowLibrary/hooks/useDeleteLibraryWorkflow'; import { useGetAndLoadLibraryWorkflow } from 'features/workflowLibrary/hooks/useGetAndLoadLibraryWorkflow'; import { useWorkflowLibraryModalContext } from 'features/workflowLibrary/context/useWorkflowLibraryModalContext'; -import { memo, useCallback } from 'react'; +import { memo, useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { WorkflowRecordListItemDTO } from 'services/api/types'; +import { useAppSelector } from 'app/store/storeHooks'; type Props = { workflowDTO: WorkflowRecordListItemDTO; @@ -14,6 +15,7 @@ type Props = { const WorkflowLibraryListItem = ({ workflowDTO }: Props) => { const { t } = useTranslation(); + const workflowId = useAppSelector((state) => state.workflow.id); const { onClose } = useWorkflowLibraryModalContext(); const { deleteWorkflow, deleteWorkflowResult } = useDeleteLibraryWorkflow({}); const { getAndLoadWorkflow, getAndLoadWorkflowResult } = @@ -27,12 +29,17 @@ const WorkflowLibraryListItem = ({ workflowDTO }: Props) => { getAndLoadWorkflow(workflowDTO.workflow_id); }, [getAndLoadWorkflow, workflowDTO.workflow_id]); + const isOpen = useMemo( + () => workflowId === workflowDTO.workflow_id, + [workflowId, workflowDTO.workflow_id] + ); + return ( - + {workflowDTO.name || t('workflows.unnamedWorkflow')} @@ -70,6 +77,7 @@ const WorkflowLibraryListItem = ({ workflowDTO }: Props) => { { {workflowDTO.category === 'user' && ( ({ + color: mode('accent.500', 'accent.300')(props), +})); + +export const headingTheme = defineStyleConfig({ + variants: { + accent, + }, +}); diff --git a/invokeai/frontend/web/src/theme/theme.ts b/invokeai/frontend/web/src/theme/theme.ts index d51fae5ab7..65ad8b446d 100644 --- a/invokeai/frontend/web/src/theme/theme.ts +++ b/invokeai/frontend/web/src/theme/theme.ts @@ -21,6 +21,7 @@ import { textTheme } from './components/text'; import { textareaTheme } from './components/textarea'; import { tooltipTheme } from './components/tooltip'; import { reactflowStyles } from './custom/reactflow'; +import { headingTheme } from 'theme/components/heading'; export const theme: ThemeOverride = { config: { @@ -146,6 +147,7 @@ export const theme: ThemeOverride = { Menu: menuTheme, Text: textTheme, Tooltip: tooltipTheme, + Heading: headingTheme, }, }; From fc6cebb9754400fce88b2215fc34dbe36598be60 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 9 Dec 2023 10:57:36 +1100 Subject: [PATCH 065/515] fix(ui): fix extra attrs added to workflow payload --- .../frontend/web/src/features/nodes/hooks/useWorkflow.ts | 4 +--- .../web/src/features/nodes/util/workflow/buildWorkflow.ts | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts b/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts index 5ad9bb675f..fecb15c2e9 100644 --- a/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts +++ b/invokeai/frontend/web/src/features/nodes/hooks/useWorkflow.ts @@ -1,6 +1,5 @@ import { useAppSelector } from 'app/store/storeHooks'; import { buildWorkflow } from 'features/nodes/util/workflow/buildWorkflow'; -import { omit } from 'lodash-es'; import { useMemo } from 'react'; import { useDebounce } from 'use-debounce'; @@ -12,8 +11,7 @@ export const useWorkflow = () => { const [edges] = useDebounce(edges_, 300); const [workflow] = useDebounce(workflow_, 300); const builtWorkflow = useMemo( - () => - buildWorkflow({ nodes, edges, workflow: omit(workflow, 'isTouched') }), + () => buildWorkflow({ nodes, edges, workflow }), [nodes, edges, workflow] ); diff --git a/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts b/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts index 9f1e9f7294..26cf7ada4e 100644 --- a/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts +++ b/invokeai/frontend/web/src/features/nodes/util/workflow/buildWorkflow.ts @@ -1,6 +1,6 @@ import { logger } from 'app/logging/logger'; import { parseify } from 'common/util/serialize'; -import { NodesState } from 'features/nodes/store/types'; +import { NodesState, WorkflowsState } from 'features/nodes/store/types'; import { isInvocationNode, isNotesNode } from 'features/nodes/types/invocation'; import { WorkflowV2, @@ -8,13 +8,13 @@ import { zWorkflowNode, } from 'features/nodes/types/workflow'; import i18n from 'i18next'; -import { cloneDeep } from 'lodash-es'; +import { cloneDeep, omit } from 'lodash-es'; import { fromZodError } from 'zod-validation-error'; type BuildWorkflowArg = { nodes: NodesState['nodes']; edges: NodesState['edges']; - workflow: Omit; + workflow: WorkflowsState; }; type BuildWorkflowFunction = (arg: BuildWorkflowArg) => WorkflowV2; @@ -29,7 +29,7 @@ export const buildWorkflow: BuildWorkflowFunction = ({ const clonedEdges = cloneDeep(edges); const newWorkflow: WorkflowV2 = { - ...clonedWorkflow, + ...omit(clonedWorkflow, 'isTouched', 'id'), nodes: [], edges: [], }; From 73dbb8792ecddaffa382771d57787040341a503b Mon Sep 17 00:00:00 2001 From: Riccardo Giovanetti Date: Fri, 8 Dec 2023 23:48:45 +0100 Subject: [PATCH 066/515] translationBot(ui): update translation (Italian) Currently translated at 97.2% (1287 of 1324 strings) Co-authored-by: Riccardo Giovanetti Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/it.json | 66 +++++++++++++++----- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/invokeai/frontend/web/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json index 3f76e80a52..bd3b68db55 100644 --- a/invokeai/frontend/web/public/locales/it.json +++ b/invokeai/frontend/web/public/locales/it.json @@ -103,7 +103,8 @@ "somethingWentWrong": "Qualcosa è andato storto", "copyError": "$t(gallery.copy) Errore", "input": "Ingresso", - "notInstalled": "Non $t(common.installed)" + "notInstalled": "Non $t(common.installed)", + "unknownError": "Errore sconosciuto" }, "gallery": { "generations": "Generazioni", @@ -141,7 +142,9 @@ "unstarImage": "Rimuovi preferenza immagine", "dropOrUpload": "$t(gallery.drop) o carica", "starImage": "Immagine preferita", - "dropToUpload": "$t(gallery.drop) per aggiornare" + "dropToUpload": "$t(gallery.drop) per aggiornare", + "problemDeletingImagesDesc": "Impossibile eliminare una o più immagini", + "problemDeletingImages": "Problema durante l'eliminazione delle immagini" }, "hotkeys": { "keyboardShortcuts": "Tasti rapidi", @@ -626,7 +629,10 @@ "imageActions": "Azioni Immagine", "aspectRatioFree": "Libere", "maskEdge": "Maschera i bordi", - "unmasked": "No maschera" + "unmasked": "No maschera", + "cfgRescaleMultiplier": "Moltiplicatore riscala CFG", + "cfgRescale": "Riscala CFG", + "useSize": "Usa Dimensioni" }, "settings": { "models": "Modelli", @@ -670,7 +676,8 @@ "clearIntermediatesDisabled": "La coda deve essere vuota per cancellare le immagini intermedie", "enableNSFWChecker": "Abilita controllo NSFW", "enableInvisibleWatermark": "Abilita filigrana invisibile", - "enableInformationalPopovers": "Abilita testo informativo a comparsa" + "enableInformationalPopovers": "Abilita testo informativo a comparsa", + "reloadingIn": "Ricaricando in" }, "toast": { "tempFoldersEmptied": "Cartella temporanea svuotata", @@ -752,11 +759,12 @@ "setNodeField": "Imposta come campo nodo", "problemSavingMask": "Problema nel salvataggio della maschera", "problemSavingCanvasDesc": "Impossibile salvare la tela", - "setCanvasInitialImage": "Imposta come immagine iniziale della tela", + "setCanvasInitialImage": "Imposta l'immagine iniziale della tela", "workflowLoaded": "Flusso di lavoro caricato", "setIPAdapterImage": "Imposta come immagine per l'Adattatore IP", "problemSavingMaskDesc": "Impossibile salvare la maschera", - "setAsCanvasInitialImage": "Imposta come immagine iniziale della tela" + "setAsCanvasInitialImage": "Imposta come immagine iniziale della tela", + "invalidUpload": "Caricamento non valido" }, "tooltip": { "feature": { @@ -780,7 +788,7 @@ "maskingOptions": "Opzioni di mascheramento", "enableMask": "Abilita maschera", "preserveMaskedArea": "Mantieni area mascherata", - "clearMask": "Elimina la maschera", + "clearMask": "Cancella maschera (Shift+C)", "brush": "Pennello", "eraser": "Cancellino", "fillBoundingBox": "Riempi rettangolo di selezione", @@ -833,7 +841,8 @@ "betaPreserveMasked": "Conserva quanto mascherato", "antialiasing": "Anti aliasing", "showResultsOn": "Mostra i risultati (attivato)", - "showResultsOff": "Mostra i risultati (disattivato)" + "showResultsOff": "Mostra i risultati (disattivato)", + "saveMask": "Salva $t(unifiedCanvas.mask)" }, "accessibility": { "modelSelect": "Seleziona modello", @@ -859,7 +868,8 @@ "showGalleryPanel": "Mostra il pannello Galleria", "loadMore": "Carica altro", "mode": "Modalità", - "resetUI": "$t(accessibility.reset) l'Interfaccia Utente" + "resetUI": "$t(accessibility.reset) l'Interfaccia Utente", + "createIssue": "Segnala un problema" }, "ui": { "hideProgressImages": "Nascondi avanzamento immagini", @@ -940,7 +950,7 @@ "unknownNode": "Nodo sconosciuto", "vaeFieldDescription": "Sotto modello VAE.", "booleanPolymorphicDescription": "Una raccolta di booleani.", - "missingTemplate": "Modello mancante", + "missingTemplate": "Nodo non valido: nodo {{node}} di tipo {{type}} modello mancante (non installato?)", "outputSchemaNotFound": "Schema di output non trovato", "colorFieldDescription": "Un colore RGBA.", "maybeIncompatible": "Potrebbe essere incompatibile con quello installato", @@ -979,7 +989,7 @@ "cannotConnectOutputToOutput": "Impossibile collegare Output ad Output", "booleanCollection": "Raccolta booleana", "cannotConnectToSelf": "Impossibile connettersi a se stesso", - "mismatchedVersion": "Ha una versione non corrispondente", + "mismatchedVersion": "Nodo non valido: il nodo {{node}} di tipo {{type}} ha una versione non corrispondente (provare ad aggiornare?)", "outputNode": "Nodo di Output", "loadingNodes": "Caricamento nodi...", "oNNXModelFieldDescription": "Campo del modello ONNX.", @@ -1058,7 +1068,7 @@ "latentsCollectionDescription": "Le immagini latenti possono essere passate tra i nodi.", "imageCollection": "Raccolta Immagini", "loRAModelField": "LoRA", - "updateAllNodes": "Aggiorna tutti i nodi", + "updateAllNodes": "Aggiorna i nodi", "unableToUpdateNodes_one": "Impossibile aggiornare {{count}} nodo", "unableToUpdateNodes_many": "Impossibile aggiornare {{count}} nodi", "unableToUpdateNodes_other": "Impossibile aggiornare {{count}} nodi", @@ -1069,7 +1079,27 @@ "unknownErrorValidatingWorkflow": "Errore sconosciuto durante la convalida del flusso di lavoro", "collectionFieldType": "{{name}} Raccolta", "collectionOrScalarFieldType": "{{name}} Raccolta|Scalare", - "nodeVersion": "Versione Nodo" + "nodeVersion": "Versione Nodo", + "inputFieldTypeParseError": "Impossibile analizzare il tipo di campo di input {{node}}.{{field}} ({{message}})", + "unsupportedArrayItemType": "tipo di elemento dell'array non supportato \"{{type}}\"", + "targetNodeFieldDoesNotExist": "Connessione non valida: il campo di destinazione/input {{node}}.{{field}} non esiste", + "unsupportedMismatchedUnion": "tipo CollectionOrScalar non corrispondente con tipi di base {{firstType}} e {{secondType}}", + "allNodesUpdated": "Tutti i nodi sono aggiornati", + "sourceNodeDoesNotExist": "Connessione non valida: il nodo di origine/output {{node}} non esiste", + "unableToExtractEnumOptions": "impossibile estrarre le opzioni enum", + "unableToParseFieldType": "impossibile analizzare il tipo di campo", + "unrecognizedWorkflowVersion": "Versione dello schema del flusso di lavoro non riconosciuta {{version}}", + "outputFieldTypeParseError": "Impossibile analizzare il tipo di campo di output {{node}}.{{field}} ({{message}})", + "sourceNodeFieldDoesNotExist": "Connessione non valida: il campo di origine/output {{node}}.{{field}} non esiste", + "unableToGetWorkflowVersion": "Impossibile ottenere la versione dello schema del flusso di lavoro", + "nodePack": "Pacchetto di nodi", + "unableToExtractSchemaNameFromRef": "impossibile estrarre il nome dello schema dal riferimento", + "unknownOutput": "Output sconosciuto: {{name}}", + "unknownNodeType": "Tipo di nodo sconosciuto", + "targetNodeDoesNotExist": "Connessione non valida: il nodo di destinazione/input {{node}} non esiste", + "unknownFieldType": "$t(nodes.unknownField) tipo: {{type}}", + "deletedInvalidEdge": "Eliminata connessione non valida {{source}} -> {{target}}", + "unknownInput": "Input sconosciuto: {{name}}" }, "boards": { "autoAddBoard": "Aggiungi automaticamente bacheca", @@ -1088,9 +1118,9 @@ "selectBoard": "Seleziona una Bacheca", "uncategorized": "Non categorizzato", "downloadBoard": "Scarica la bacheca", - "deleteBoardOnly": "Elimina solo la Bacheca", + "deleteBoardOnly": "solo la Bacheca", "deleteBoard": "Elimina Bacheca", - "deleteBoardAndImages": "Elimina Bacheca e Immagini", + "deleteBoardAndImages": "Bacheca e Immagini", "deletedBoardsCannotbeRestored": "Le bacheche eliminate non possono essere ripristinate", "movingImagesToBoard_one": "Spostare {{count}} immagine nella bacheca:", "movingImagesToBoard_many": "Spostare {{count}} immagini nella bacheca:", @@ -1499,6 +1529,12 @@ "ControlNet fornisce una guida al processo di generazione, aiutando a creare immagini con composizione, struttura o stile controllati, a seconda del modello selezionato." ], "heading": "ControlNet" + }, + "paramCFGRescaleMultiplier": { + "heading": "Moltiplicatore di riscala CFG", + "paragraphs": [ + "Moltiplicatore di riscala per la guida CFG, utilizzato per modelli addestrati utilizzando SNR a terminale zero (ztsnr). Valore suggerito 0.7." + ] } }, "sdxl": { From 5b9d25f57eedfd6a78dfc3eff1cb2f1da200cedc Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 8 Dec 2023 23:48:45 +0100 Subject: [PATCH 067/515] translationBot(ui): update translation files Updated by "Cleanup translation files" hook in Weblate. Co-authored-by: Hosted Weblate Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/es.json | 1 - invokeai/frontend/web/public/locales/it.json | 1 - invokeai/frontend/web/public/locales/nl.json | 1 - invokeai/frontend/web/public/locales/ru.json | 1 - invokeai/frontend/web/public/locales/zh_CN.json | 1 - 5 files changed, 5 deletions(-) diff --git a/invokeai/frontend/web/public/locales/es.json b/invokeai/frontend/web/public/locales/es.json index cb56a4d2f0..20c15f2698 100644 --- a/invokeai/frontend/web/public/locales/es.json +++ b/invokeai/frontend/web/public/locales/es.json @@ -605,7 +605,6 @@ "nodesSaved": "Nodos guardados", "nodesLoadedFailed": "Error al cargar los nodos", "nodesLoaded": "Nodos cargados", - "nodesCleared": "Nodos borrados", "problemCopyingImage": "No se puede copiar la imagen", "nodesNotValidJSON": "JSON no válido", "nodesCorruptedGraph": "No se puede cargar. El gráfico parece estar dañado.", diff --git a/invokeai/frontend/web/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json index bd3b68db55..31eea70368 100644 --- a/invokeai/frontend/web/public/locales/it.json +++ b/invokeai/frontend/web/public/locales/it.json @@ -720,7 +720,6 @@ "nodesLoadedFailed": "Impossibile caricare i nodi", "nodesSaved": "Nodi salvati", "nodesLoaded": "Nodi caricati", - "nodesCleared": "Nodi cancellati", "problemCopyingImage": "Impossibile copiare l'immagine", "nodesNotValidGraph": "Grafico del nodo InvokeAI non valido", "nodesCorruptedGraph": "Impossibile caricare. Il grafico sembra essere danneggiato.", diff --git a/invokeai/frontend/web/public/locales/nl.json b/invokeai/frontend/web/public/locales/nl.json index 3aa21cc77a..dfdfb54bd0 100644 --- a/invokeai/frontend/web/public/locales/nl.json +++ b/invokeai/frontend/web/public/locales/nl.json @@ -682,7 +682,6 @@ "parameterSet": "Instellen parameters", "nodesSaved": "Knooppunten bewaard", "nodesLoaded": "Knooppunten geladen", - "nodesCleared": "Knooppunten weggehaald", "nodesLoadedFailed": "Laden knooppunten mislukt", "problemCopyingImage": "Kan Afbeelding Niet Kopiëren", "nodesNotValidJSON": "Ongeldige JSON", diff --git a/invokeai/frontend/web/public/locales/ru.json b/invokeai/frontend/web/public/locales/ru.json index 1c83286dec..22df944086 100644 --- a/invokeai/frontend/web/public/locales/ru.json +++ b/invokeai/frontend/web/public/locales/ru.json @@ -606,7 +606,6 @@ "nodesLoaded": "Узлы загружены", "problemCopyingImage": "Не удается скопировать изображение", "nodesLoadedFailed": "Не удалось загрузить Узлы", - "nodesCleared": "Узлы очищены", "nodesBrokenConnections": "Не удается загрузить. Некоторые соединения повреждены.", "nodesUnrecognizedTypes": "Не удается загрузить. Граф имеет нераспознанные типы", "nodesNotValidJSON": "Недопустимый JSON", diff --git a/invokeai/frontend/web/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json index 40d4630861..ac03603923 100644 --- a/invokeai/frontend/web/public/locales/zh_CN.json +++ b/invokeai/frontend/web/public/locales/zh_CN.json @@ -723,7 +723,6 @@ "nodesUnrecognizedTypes": "无法加载。节点图有无法识别的节点类型", "nodesNotValidJSON": "无效的 JSON", "nodesNotValidGraph": "无效的 InvokeAi 节点图", - "nodesCleared": "节点已清空", "nodesLoadedFailed": "节点图加载失败", "modelAddedSimple": "已添加模型", "modelAdded": "已添加模型: {{modelName}}", From f17b3d006880a126a5c92970290f62759bd3c125 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Fri, 8 Dec 2023 23:47:01 +1100 Subject: [PATCH 068/515] feat(ui): migrate to pnpm - update all scripts - update the frontend GH action - remove yarn-related files - update ignores Yarn classic + storybook has some weird module resolution issue due to how it hoists dependencies. See https://github.com/storybookjs/storybook/issues/22431#issuecomment-1630086092 When I did the `package.json` solution in this thread, it broke vite. Next option is to upgrade to yarn 3 or pnpm. I chose pnpm. --- .github/workflows/lint-frontend.yml | 18 +- README.md | 4 +- invokeai/frontend/web/.prettierignore | 1 + .../web/.yarn/releases/yarn-1.22.19.cjs | 193957 --------------- invokeai/frontend/web/.yarnrc | 5 - invokeai/frontend/web/.yarnrc.yml | 1 - invokeai/frontend/web/docs/README.md | 14 +- invokeai/frontend/web/package.json | 21 +- invokeai/frontend/web/pnpm-lock.yaml | 7797 + invokeai/frontend/web/yarn.lock | 6549 - 10 files changed, 7828 insertions(+), 200539 deletions(-) delete mode 100644 invokeai/frontend/web/.yarn/releases/yarn-1.22.19.cjs delete mode 100644 invokeai/frontend/web/.yarnrc delete mode 100644 invokeai/frontend/web/.yarnrc.yml create mode 100644 invokeai/frontend/web/pnpm-lock.yaml delete mode 100644 invokeai/frontend/web/yarn.lock diff --git a/.github/workflows/lint-frontend.yml b/.github/workflows/lint-frontend.yml index de1e8866b2..0b7a8821ef 100644 --- a/.github/workflows/lint-frontend.yml +++ b/.github/workflows/lint-frontend.yml @@ -21,13 +21,13 @@ jobs: if: github.event.pull_request.draft == false runs-on: ubuntu-22.04 steps: - - name: Setup Node 18 - uses: actions/setup-node@v3 + - name: Setup Node 20 + uses: actions/setup-node@v4 with: - node-version: '18' - - uses: actions/checkout@v3 - - run: 'yarn install --frozen-lockfile' - - run: 'yarn run lint:tsc' - - run: 'yarn run lint:madge' - - run: 'yarn run lint:eslint' - - run: 'yarn run lint:prettier' + node-version: '20' + - uses: actions/checkout@v4 + - run: 'pnpm install --prefer-frozen-lockfile' + - run: 'pnpm run lint:tsc' + - run: 'pnpm run lint:madge' + - run: 'pnpm run lint:eslint' + - run: 'pnpm run lint:prettier' diff --git a/README.md b/README.md index 582fb718b3..2bdced1f18 100644 --- a/README.md +++ b/README.md @@ -125,8 +125,8 @@ and go to http://localhost:9090. You must have Python 3.10 through 3.11 installed on your machine. Earlier or later versions are not supported. -Node.js also needs to be installed along with yarn (can be installed with -the command `npm install -g yarn` if needed) +Node.js also needs to be installed along with `pnpm` (can be installed with +the command `npm install -g pnpm` if needed) 1. Open a command-line window on your machine. The PowerShell is recommended for Windows. 2. Create a directory to install InvokeAI into. You'll need at least 15 GB of free space: diff --git a/invokeai/frontend/web/.prettierignore b/invokeai/frontend/web/.prettierignore index 6a981045b0..253908a6a8 100644 --- a/invokeai/frontend/web/.prettierignore +++ b/invokeai/frontend/web/.prettierignore @@ -12,3 +12,4 @@ index.html src/services/api/schema.d.ts static/ src/theme/css/overlayscrollbars.css +pnpm-lock.yaml diff --git a/invokeai/frontend/web/.yarn/releases/yarn-1.22.19.cjs b/invokeai/frontend/web/.yarn/releases/yarn-1.22.19.cjs deleted file mode 100644 index e36f0e36c2..0000000000 --- a/invokeai/frontend/web/.yarn/releases/yarn-1.22.19.cjs +++ /dev/null @@ -1,193957 +0,0 @@ -#!/usr/bin/env node -module.exports = /******/ (function (modules) { - // webpackBootstrap - /******/ // The module cache - /******/ var installedModules = {}; - /******/ - /******/ // The require function - /******/ function __webpack_require__(moduleId) { - /******/ - /******/ // Check if module is in cache - /******/ if (installedModules[moduleId]) { - /******/ return installedModules[moduleId].exports; - /******/ - } - /******/ // Create a new module (and put it into the cache) - /******/ var module = (installedModules[moduleId] = { - /******/ i: moduleId, - /******/ l: false, - /******/ exports: {}, - /******/ - }); - /******/ - /******/ // Execute the module function - /******/ modules[moduleId].call( - module.exports, - module, - module.exports, - __webpack_require__ - ); - /******/ - /******/ // Flag the module as loaded - /******/ module.l = true; - /******/ - /******/ // Return the exports of the module - /******/ return module.exports; - /******/ - } - /******/ - /******/ - /******/ // expose the modules object (__webpack_modules__) - /******/ __webpack_require__.m = modules; - /******/ - /******/ // expose the module cache - /******/ __webpack_require__.c = installedModules; - /******/ - /******/ // identity function for calling harmony imports with the correct context - /******/ __webpack_require__.i = function (value) { - return value; - }; - /******/ - /******/ // define getter function for harmony exports - /******/ __webpack_require__.d = function (exports, name, getter) { - /******/ if (!__webpack_require__.o(exports, name)) { - /******/ Object.defineProperty(exports, name, { - /******/ configurable: false, - /******/ enumerable: true, - /******/ get: getter, - /******/ - }); - /******/ - } - /******/ - }; - /******/ - /******/ // getDefaultExport function for compatibility with non-harmony modules - /******/ __webpack_require__.n = function (module) { - /******/ var getter = - module && module.__esModule - ? /******/ function getDefault() { - return module['default']; - } - : /******/ function getModuleExports() { - return module; - }; - /******/ __webpack_require__.d(getter, 'a', getter); - /******/ return getter; - /******/ - }; - /******/ - /******/ // Object.prototype.hasOwnProperty.call - /******/ __webpack_require__.o = function (object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }; - /******/ - /******/ // __webpack_public_path__ - /******/ __webpack_require__.p = ''; - /******/ - /******/ // Load entry module and return exports - /******/ return __webpack_require__((__webpack_require__.s = 517)); - /******/ -})( - /************************************************************************/ - /******/ [ - /* 0 */ - /***/ function (module, exports) { - module.exports = require('path'); - - /***/ - }, - /* 1 */ - /***/ function (module, __webpack_exports__, __webpack_require__) { - 'use strict'; - /* harmony export (immutable) */ __webpack_exports__['a'] = __extends; - /* unused harmony export __assign */ - /* unused harmony export __rest */ - /* unused harmony export __decorate */ - /* unused harmony export __param */ - /* unused harmony export __metadata */ - /* unused harmony export __awaiter */ - /* unused harmony export __generator */ - /* unused harmony export __exportStar */ - /* unused harmony export __values */ - /* unused harmony export __read */ - /* unused harmony export __spread */ - /* unused harmony export __await */ - /* unused harmony export __asyncGenerator */ - /* unused harmony export __asyncDelegator */ - /* unused harmony export __asyncValues */ - /* unused harmony export __makeTemplateObject */ - /* unused harmony export __importStar */ - /* unused harmony export __importDefault */ - /*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ - /* global Reflect, Promise */ - - var extendStatics = function (d, b) { - extendStatics = - Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && - function (d, b) { - d.__proto__ = b; - }) || - function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - }; - return extendStatics(d, b); - }; - - function __extends(d, b) { - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = - b === null - ? Object.create(b) - : ((__.prototype = b.prototype), new __()); - } - - var __assign = function () { - __assign = - Object.assign || - function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __rest(s, e) { - var t = {}; - for (var p in s) - if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === 'function') - for ( - var i = 0, p = Object.getOwnPropertySymbols(s); - i < p.length; - i++ - ) - if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]]; - return t; - } - - function __decorate(decorators, target, key, desc) { - var c = arguments.length, - r = - c < 3 - ? target - : desc === null - ? (desc = Object.getOwnPropertyDescriptor(target, key)) - : desc, - d; - if ( - typeof Reflect === 'object' && - typeof Reflect.decorate === 'function' - ) - r = Reflect.decorate(decorators, target, key, desc); - else - for (var i = decorators.length - 1; i >= 0; i--) - if ((d = decorators[i])) - r = - (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || - r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - } - - function __param(paramIndex, decorator) { - return function (target, key) { - decorator(target, key, paramIndex); - }; - } - - function __metadata(metadataKey, metadataValue) { - if ( - typeof Reflect === 'object' && - typeof Reflect.metadata === 'function' - ) - return Reflect.metadata(metadataKey, metadataValue); - } - - function __awaiter(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator['throw'](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done - ? resolve(result.value) - : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - - function __generator(thisArg, body) { - var _ = { - label: 0, - sent: function () { - if (t[0] & 1) throw t[1]; - return t[1]; - }, - trys: [], - ops: [], - }, - f, - y, - t, - g; - return ( - (g = { next: verb(0), throw: verb(1), return: verb(2) }), - typeof Symbol === 'function' && - (g[Symbol.iterator] = function () { - return this; - }), - g - ); - function verb(n) { - return function (v) { - return step([n, v]); - }; - } - function step(op) { - if (f) throw new TypeError('Generator is already executing.'); - while (_) - try { - if ( - ((f = 1), - y && - (t = - op[0] & 2 - ? y['return'] - : op[0] - ? y['throw'] || ((t = y['return']) && t.call(y), 0) - : y.next) && - !(t = t.call(y, op[1])).done) - ) - return t; - if (((y = 0), t)) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: - case 1: - t = op; - break; - case 4: - _.label++; - return { value: op[1], done: false }; - case 5: - _.label++; - y = op[1]; - op = [0]; - continue; - case 7: - op = _.ops.pop(); - _.trys.pop(); - continue; - default: - if ( - !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && - (op[0] === 6 || op[0] === 2) - ) { - _ = 0; - continue; - } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { - _.label = op[1]; - break; - } - if (op[0] === 6 && _.label < t[1]) { - _.label = t[1]; - t = op; - break; - } - if (t && _.label < t[2]) { - _.label = t[2]; - _.ops.push(op); - break; - } - if (t[2]) _.ops.pop(); - _.trys.pop(); - continue; - } - op = body.call(thisArg, _); - } catch (e) { - op = [6, e]; - y = 0; - } finally { - f = t = 0; - } - if (op[0] & 5) throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - } - - function __exportStar(m, exports) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; - } - - function __values(o) { - var m = typeof Symbol === 'function' && o[Symbol.iterator], - i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - }, - }; - } - - function __read(o, n) { - var m = typeof Symbol === 'function' && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), - r, - ar = [], - e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) - ar.push(r.value); - } catch (error) { - e = { error: error }; - } finally { - try { - if (r && !r.done && (m = i['return'])) m.call(i); - } finally { - if (e) throw e.error; - } - } - return ar; - } - - function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - } - - function __await(v) { - return this instanceof __await ? ((this.v = v), this) : new __await(v); - } - - function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) - throw new TypeError('Symbol.asyncIterator is not defined.'); - var g = generator.apply(thisArg, _arguments || []), - i, - q = []; - return ( - (i = {}), - verb('next'), - verb('throw'), - verb('return'), - (i[Symbol.asyncIterator] = function () { - return this; - }), - i - ); - function verb(n) { - if (g[n]) - i[n] = function (v) { - return new Promise(function (a, b) { - q.push([n, v, a, b]) > 1 || resume(n, v); - }); - }; - } - function resume(n, v) { - try { - step(g[n](v)); - } catch (e) { - settle(q[0][3], e); - } - } - function step(r) { - r.value instanceof __await - ? Promise.resolve(r.value.v).then(fulfill, reject) - : settle(q[0][2], r); - } - function fulfill(value) { - resume('next', value); - } - function reject(value) { - resume('throw', value); - } - function settle(f, v) { - if ((f(v), q.shift(), q.length)) resume(q[0][0], q[0][1]); - } - } - - function __asyncDelegator(o) { - var i, p; - return ( - (i = {}), - verb('next'), - verb('throw', function (e) { - throw e; - }), - verb('return'), - (i[Symbol.iterator] = function () { - return this; - }), - i - ); - function verb(n, f) { - i[n] = o[n] - ? function (v) { - return (p = !p) - ? { value: __await(o[n](v)), done: n === 'return' } - : f - ? f(v) - : v; - } - : f; - } - } - - function __asyncValues(o) { - if (!Symbol.asyncIterator) - throw new TypeError('Symbol.asyncIterator is not defined.'); - var m = o[Symbol.asyncIterator], - i; - return m - ? m.call(o) - : ((o = - typeof __values === 'function' - ? __values(o) - : o[Symbol.iterator]()), - (i = {}), - verb('next'), - verb('throw'), - verb('return'), - (i[Symbol.asyncIterator] = function () { - return this; - }), - i); - function verb(n) { - i[n] = - o[n] && - function (v) { - return new Promise(function (resolve, reject) { - (v = o[n](v)), settle(resolve, reject, v.done, v.value); - }); - }; - } - function settle(resolve, reject, d, v) { - Promise.resolve(v).then(function (v) { - resolve({ value: v, done: d }); - }, reject); - } - } - - function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, 'raw', { value: raw }); - } else { - cooked.raw = raw; - } - return cooked; - } - - function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) - for (var k in mod) - if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result.default = mod; - return result; - } - - function __importDefault(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - } - - /***/ - }, - /* 2 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - exports.__esModule = true; - - var _promise = __webpack_require__(224); - - var _promise2 = _interopRequireDefault(_promise); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - exports.default = function (fn) { - return function () { - var gen = fn.apply(this, arguments); - return new _promise2.default(function (resolve, reject) { - function step(key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } - - if (info.done) { - resolve(value); - } else { - return _promise2.default.resolve(value).then( - function (value) { - step('next', value); - }, - function (err) { - step('throw', err); - } - ); - } - } - - return step('next'); - }); - }; - }; - - /***/ - }, - /* 3 */ - /***/ function (module, exports) { - module.exports = require('util'); - - /***/ - }, - /* 4 */ - /***/ function (module, exports) { - module.exports = require('fs'); - - /***/ - }, - /* 5 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - exports.getFirstSuitableFolder = - exports.readFirstAvailableStream = - exports.makeTempDir = - exports.hardlinksWork = - exports.writeFilePreservingEol = - exports.getFileSizeOnDisk = - exports.walk = - exports.symlink = - exports.find = - exports.readJsonAndFile = - exports.readJson = - exports.readFileAny = - exports.hardlinkBulk = - exports.copyBulk = - exports.unlink = - exports.glob = - exports.link = - exports.chmod = - exports.lstat = - exports.exists = - exports.mkdirp = - exports.stat = - exports.access = - exports.rename = - exports.readdir = - exports.realpath = - exports.readlink = - exports.writeFile = - exports.open = - exports.readFileBuffer = - exports.lockQueue = - exports.constants = - undefined; - - var _asyncToGenerator2; - - function _load_asyncToGenerator() { - return (_asyncToGenerator2 = _interopRequireDefault( - __webpack_require__(2) - )); - } - - let buildActionsForCopy = (() => { - var _ref = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - queue, - events, - possibleExtraneous, - reporter - ) { - // - let build = (() => { - var _ref5 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* (data) { - const src = data.src, - dest = data.dest, - type = data.type; - - const onFresh = data.onFresh || noop; - const onDone = data.onDone || noop; - - // TODO https://github.com/yarnpkg/yarn/issues/3751 - // related to bundled dependencies handling - if (files.has(dest.toLowerCase())) { - reporter.verbose( - `The case-insensitive file ${dest} shouldn't be copied twice in one bulk copy` - ); - } else { - files.add(dest.toLowerCase()); - } - - if (type === 'symlink') { - yield mkdirp((_path || _load_path()).default.dirname(dest)); - onFresh(); - actions.symlink.push({ - dest, - linkname: src, - }); - onDone(); - return; - } - - if ( - events.ignoreBasenames.indexOf( - (_path || _load_path()).default.basename(src) - ) >= 0 - ) { - // ignored file - return; - } - - const srcStat = yield lstat(src); - let srcFiles; - - if (srcStat.isDirectory()) { - srcFiles = yield readdir(src); - } - - let destStat; - try { - // try accessing the destination - destStat = yield lstat(dest); - } catch (e) { - // proceed if destination doesn't exist, otherwise error - if (e.code !== 'ENOENT') { - throw e; - } - } - - // if destination exists - if (destStat) { - const bothSymlinks = - srcStat.isSymbolicLink() && destStat.isSymbolicLink(); - const bothFolders = - srcStat.isDirectory() && destStat.isDirectory(); - const bothFiles = srcStat.isFile() && destStat.isFile(); - - // EINVAL access errors sometimes happen which shouldn't because node shouldn't be giving - // us modes that aren't valid. investigate this, it's generally safe to proceed. - - /* if (srcStat.mode !== destStat.mode) { - try { - await access(dest, srcStat.mode); - } catch (err) {} - } */ - - if (bothFiles && artifactFiles.has(dest)) { - // this file gets changed during build, likely by a custom install script. Don't bother checking it. - onDone(); - reporter.verbose( - reporter.lang('verboseFileSkipArtifact', src) - ); - return; - } - - if ( - bothFiles && - srcStat.size === destStat.size && - (0, (_fsNormalized || _load_fsNormalized()).fileDatesEqual)( - srcStat.mtime, - destStat.mtime - ) - ) { - // we can safely assume this is the same file - onDone(); - reporter.verbose( - reporter.lang( - 'verboseFileSkip', - src, - dest, - srcStat.size, - +srcStat.mtime - ) - ); - return; - } - - if (bothSymlinks) { - const srcReallink = yield readlink(src); - if (srcReallink === (yield readlink(dest))) { - // if both symlinks are the same then we can continue on - onDone(); - reporter.verbose( - reporter.lang( - 'verboseFileSkipSymlink', - src, - dest, - srcReallink - ) - ); - return; - } - } - - if (bothFolders) { - // mark files that aren't in this folder as possibly extraneous - const destFiles = yield readdir(dest); - invariant(srcFiles, 'src files not initialised'); - - for ( - var _iterator4 = destFiles, - _isArray4 = Array.isArray(_iterator4), - _i4 = 0, - _iterator4 = _isArray4 - ? _iterator4 - : _iterator4[Symbol.iterator](); - ; - - ) { - var _ref6; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref6 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref6 = _i4.value; - } - - const file = _ref6; - - if (srcFiles.indexOf(file) < 0) { - const loc = (_path || _load_path()).default.join( - dest, - file - ); - possibleExtraneous.add(loc); - - if ((yield lstat(loc)).isDirectory()) { - for ( - var _iterator5 = yield readdir(loc), - _isArray5 = Array.isArray(_iterator5), - _i5 = 0, - _iterator5 = _isArray5 - ? _iterator5 - : _iterator5[Symbol.iterator](); - ; - - ) { - var _ref7; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref7 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref7 = _i5.value; - } - - const file = _ref7; - - possibleExtraneous.add( - (_path || _load_path()).default.join(loc, file) - ); - } - } - } - } - } - } - - if (destStat && destStat.isSymbolicLink()) { - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)( - dest - ); - destStat = null; - } - - if (srcStat.isSymbolicLink()) { - onFresh(); - const linkname = yield readlink(src); - actions.symlink.push({ - dest, - linkname, - }); - onDone(); - } else if (srcStat.isDirectory()) { - if (!destStat) { - reporter.verbose(reporter.lang('verboseFileFolder', dest)); - yield mkdirp(dest); - } - - const destParts = dest.split( - (_path || _load_path()).default.sep - ); - while (destParts.length) { - files.add( - destParts - .join((_path || _load_path()).default.sep) - .toLowerCase() - ); - destParts.pop(); - } - - // push all files to queue - invariant(srcFiles, 'src files not initialised'); - let remaining = srcFiles.length; - if (!remaining) { - onDone(); - } - for ( - var _iterator6 = srcFiles, - _isArray6 = Array.isArray(_iterator6), - _i6 = 0, - _iterator6 = _isArray6 - ? _iterator6 - : _iterator6[Symbol.iterator](); - ; - - ) { - var _ref8; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref8 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref8 = _i6.value; - } - - const file = _ref8; - - queue.push({ - dest: (_path || _load_path()).default.join(dest, file), - onFresh, - onDone: (function (_onDone) { - function onDone() { - return _onDone.apply(this, arguments); - } - - onDone.toString = function () { - return _onDone.toString(); - }; - - return onDone; - })(function () { - if (--remaining === 0) { - onDone(); - } - }), - src: (_path || _load_path()).default.join(src, file), - }); - } - } else if (srcStat.isFile()) { - onFresh(); - actions.file.push({ - src, - dest, - atime: srcStat.atime, - mtime: srcStat.mtime, - mode: srcStat.mode, - }); - onDone(); - } else { - throw new Error(`unsure how to copy this: ${src}`); - } - } - ); - - return function build(_x5) { - return _ref5.apply(this, arguments); - }; - })(); - - const artifactFiles = new Set(events.artifactFiles || []); - const files = new Set(); - - // initialise events - for ( - var _iterator = queue, - _isArray = Array.isArray(_iterator), - _i = 0, - _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); - ; - - ) { - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - const item = _ref2; - - const onDone = item.onDone; - item.onDone = function () { - events.onProgress(item.dest); - if (onDone) { - onDone(); - } - }; - } - events.onStart(queue.length); - - // start building actions - const actions = { - file: [], - symlink: [], - link: [], - }; - - // custom concurrency logic as we're always executing stacks of CONCURRENT_QUEUE_ITEMS queue items - // at a time due to the requirement to push items onto the queue - while (queue.length) { - const items = queue.splice(0, CONCURRENT_QUEUE_ITEMS); - yield Promise.all(items.map(build)); - } - - // simulate the existence of some files to prevent considering them extraneous - for ( - var _iterator2 = artifactFiles, - _isArray2 = Array.isArray(_iterator2), - _i2 = 0, - _iterator2 = _isArray2 - ? _iterator2 - : _iterator2[Symbol.iterator](); - ; - - ) { - var _ref3; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } - - const file = _ref3; - - if (possibleExtraneous.has(file)) { - reporter.verbose( - reporter.lang('verboseFilePhantomExtraneous', file) - ); - possibleExtraneous.delete(file); - } - } - - for ( - var _iterator3 = possibleExtraneous, - _isArray3 = Array.isArray(_iterator3), - _i3 = 0, - _iterator3 = _isArray3 - ? _iterator3 - : _iterator3[Symbol.iterator](); - ; - - ) { - var _ref4; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref4 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref4 = _i3.value; - } - - const loc = _ref4; - - if (files.has(loc.toLowerCase())) { - possibleExtraneous.delete(loc); - } - } - - return actions; - }); - - return function buildActionsForCopy(_x, _x2, _x3, _x4) { - return _ref.apply(this, arguments); - }; - })(); - - let buildActionsForHardlink = (() => { - var _ref9 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - queue, - events, - possibleExtraneous, - reporter - ) { - // - let build = (() => { - var _ref13 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* (data) { - const src = data.src, - dest = data.dest; - - const onFresh = data.onFresh || noop; - const onDone = data.onDone || noop; - if (files.has(dest.toLowerCase())) { - // Fixes issue https://github.com/yarnpkg/yarn/issues/2734 - // When bulk hardlinking we have A -> B structure that we want to hardlink to A1 -> B1, - // package-linker passes that modules A1 and B1 need to be hardlinked, - // the recursive linking algorithm of A1 ends up scheduling files in B1 to be linked twice which will case - // an exception. - onDone(); - return; - } - files.add(dest.toLowerCase()); - - if ( - events.ignoreBasenames.indexOf( - (_path || _load_path()).default.basename(src) - ) >= 0 - ) { - // ignored file - return; - } - - const srcStat = yield lstat(src); - let srcFiles; - - if (srcStat.isDirectory()) { - srcFiles = yield readdir(src); - } - - const destExists = yield exists(dest); - if (destExists) { - const destStat = yield lstat(dest); - - const bothSymlinks = - srcStat.isSymbolicLink() && destStat.isSymbolicLink(); - const bothFolders = - srcStat.isDirectory() && destStat.isDirectory(); - const bothFiles = srcStat.isFile() && destStat.isFile(); - - if (srcStat.mode !== destStat.mode) { - try { - yield access(dest, srcStat.mode); - } catch (err) { - // EINVAL access errors sometimes happen which shouldn't because node shouldn't be giving - // us modes that aren't valid. investigate this, it's generally safe to proceed. - reporter.verbose(err); - } - } - - if (bothFiles && artifactFiles.has(dest)) { - // this file gets changed during build, likely by a custom install script. Don't bother checking it. - onDone(); - reporter.verbose( - reporter.lang('verboseFileSkipArtifact', src) - ); - return; - } - - // correct hardlink - if ( - bothFiles && - srcStat.ino !== null && - srcStat.ino === destStat.ino - ) { - onDone(); - reporter.verbose( - reporter.lang('verboseFileSkip', src, dest, srcStat.ino) - ); - return; - } - - if (bothSymlinks) { - const srcReallink = yield readlink(src); - if (srcReallink === (yield readlink(dest))) { - // if both symlinks are the same then we can continue on - onDone(); - reporter.verbose( - reporter.lang( - 'verboseFileSkipSymlink', - src, - dest, - srcReallink - ) - ); - return; - } - } - - if (bothFolders) { - // mark files that aren't in this folder as possibly extraneous - const destFiles = yield readdir(dest); - invariant(srcFiles, 'src files not initialised'); - - for ( - var _iterator10 = destFiles, - _isArray10 = Array.isArray(_iterator10), - _i10 = 0, - _iterator10 = _isArray10 - ? _iterator10 - : _iterator10[Symbol.iterator](); - ; - - ) { - var _ref14; - - if (_isArray10) { - if (_i10 >= _iterator10.length) break; - _ref14 = _iterator10[_i10++]; - } else { - _i10 = _iterator10.next(); - if (_i10.done) break; - _ref14 = _i10.value; - } - - const file = _ref14; - - if (srcFiles.indexOf(file) < 0) { - const loc = (_path || _load_path()).default.join( - dest, - file - ); - possibleExtraneous.add(loc); - - if ((yield lstat(loc)).isDirectory()) { - for ( - var _iterator11 = yield readdir(loc), - _isArray11 = Array.isArray(_iterator11), - _i11 = 0, - _iterator11 = _isArray11 - ? _iterator11 - : _iterator11[Symbol.iterator](); - ; - - ) { - var _ref15; - - if (_isArray11) { - if (_i11 >= _iterator11.length) break; - _ref15 = _iterator11[_i11++]; - } else { - _i11 = _iterator11.next(); - if (_i11.done) break; - _ref15 = _i11.value; - } - - const file = _ref15; - - possibleExtraneous.add( - (_path || _load_path()).default.join(loc, file) - ); - } - } - } - } - } - } - - if (srcStat.isSymbolicLink()) { - onFresh(); - const linkname = yield readlink(src); - actions.symlink.push({ - dest, - linkname, - }); - onDone(); - } else if (srcStat.isDirectory()) { - reporter.verbose(reporter.lang('verboseFileFolder', dest)); - yield mkdirp(dest); - - const destParts = dest.split( - (_path || _load_path()).default.sep - ); - while (destParts.length) { - files.add( - destParts - .join((_path || _load_path()).default.sep) - .toLowerCase() - ); - destParts.pop(); - } - - // push all files to queue - invariant(srcFiles, 'src files not initialised'); - let remaining = srcFiles.length; - if (!remaining) { - onDone(); - } - for ( - var _iterator12 = srcFiles, - _isArray12 = Array.isArray(_iterator12), - _i12 = 0, - _iterator12 = _isArray12 - ? _iterator12 - : _iterator12[Symbol.iterator](); - ; - - ) { - var _ref16; - - if (_isArray12) { - if (_i12 >= _iterator12.length) break; - _ref16 = _iterator12[_i12++]; - } else { - _i12 = _iterator12.next(); - if (_i12.done) break; - _ref16 = _i12.value; - } - - const file = _ref16; - - queue.push({ - onFresh, - src: (_path || _load_path()).default.join(src, file), - dest: (_path || _load_path()).default.join(dest, file), - onDone: (function (_onDone2) { - function onDone() { - return _onDone2.apply(this, arguments); - } - - onDone.toString = function () { - return _onDone2.toString(); - }; - - return onDone; - })(function () { - if (--remaining === 0) { - onDone(); - } - }), - }); - } - } else if (srcStat.isFile()) { - onFresh(); - actions.link.push({ - src, - dest, - removeDest: destExists, - }); - onDone(); - } else { - throw new Error(`unsure how to copy this: ${src}`); - } - } - ); - - return function build(_x10) { - return _ref13.apply(this, arguments); - }; - })(); - - const artifactFiles = new Set(events.artifactFiles || []); - const files = new Set(); - - // initialise events - for ( - var _iterator7 = queue, - _isArray7 = Array.isArray(_iterator7), - _i7 = 0, - _iterator7 = _isArray7 - ? _iterator7 - : _iterator7[Symbol.iterator](); - ; - - ) { - var _ref10; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref10 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref10 = _i7.value; - } - - const item = _ref10; - - const onDone = item.onDone || noop; - item.onDone = function () { - events.onProgress(item.dest); - onDone(); - }; - } - events.onStart(queue.length); - - // start building actions - const actions = { - file: [], - symlink: [], - link: [], - }; - - // custom concurrency logic as we're always executing stacks of CONCURRENT_QUEUE_ITEMS queue items - // at a time due to the requirement to push items onto the queue - while (queue.length) { - const items = queue.splice(0, CONCURRENT_QUEUE_ITEMS); - yield Promise.all(items.map(build)); - } - - // simulate the existence of some files to prevent considering them extraneous - for ( - var _iterator8 = artifactFiles, - _isArray8 = Array.isArray(_iterator8), - _i8 = 0, - _iterator8 = _isArray8 - ? _iterator8 - : _iterator8[Symbol.iterator](); - ; - - ) { - var _ref11; - - if (_isArray8) { - if (_i8 >= _iterator8.length) break; - _ref11 = _iterator8[_i8++]; - } else { - _i8 = _iterator8.next(); - if (_i8.done) break; - _ref11 = _i8.value; - } - - const file = _ref11; - - if (possibleExtraneous.has(file)) { - reporter.verbose( - reporter.lang('verboseFilePhantomExtraneous', file) - ); - possibleExtraneous.delete(file); - } - } - - for ( - var _iterator9 = possibleExtraneous, - _isArray9 = Array.isArray(_iterator9), - _i9 = 0, - _iterator9 = _isArray9 - ? _iterator9 - : _iterator9[Symbol.iterator](); - ; - - ) { - var _ref12; - - if (_isArray9) { - if (_i9 >= _iterator9.length) break; - _ref12 = _iterator9[_i9++]; - } else { - _i9 = _iterator9.next(); - if (_i9.done) break; - _ref12 = _i9.value; - } - - const loc = _ref12; - - if (files.has(loc.toLowerCase())) { - possibleExtraneous.delete(loc); - } - } - - return actions; - }); - - return function buildActionsForHardlink(_x6, _x7, _x8, _x9) { - return _ref9.apply(this, arguments); - }; - })(); - - let copyBulk = (exports.copyBulk = (() => { - var _ref17 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - queue, - reporter, - _events - ) { - const events = { - onStart: (_events && _events.onStart) || noop, - onProgress: (_events && _events.onProgress) || noop, - possibleExtraneous: _events - ? _events.possibleExtraneous - : new Set(), - ignoreBasenames: (_events && _events.ignoreBasenames) || [], - artifactFiles: (_events && _events.artifactFiles) || [], - }; - - const actions = yield buildActionsForCopy( - queue, - events, - events.possibleExtraneous, - reporter - ); - events.onStart( - actions.file.length + actions.symlink.length + actions.link.length - ); - - const fileActions = actions.file; - - const currentlyWriting = new Map(); - - yield (_promise || _load_promise()).queue( - fileActions, - (() => { - var _ref18 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* (data) { - let writePromise; - while ((writePromise = currentlyWriting.get(data.dest))) { - yield writePromise; - } - - reporter.verbose( - reporter.lang('verboseFileCopy', data.src, data.dest) - ); - const copier = (0, - (_fsNormalized || _load_fsNormalized()).copyFile)( - data, - function () { - return currentlyWriting.delete(data.dest); - } - ); - currentlyWriting.set(data.dest, copier); - events.onProgress(data.dest); - return copier; - } - ); - - return function (_x14) { - return _ref18.apply(this, arguments); - }; - })(), - CONCURRENT_QUEUE_ITEMS - ); - - // we need to copy symlinks last as they could reference files we were copying - const symlinkActions = actions.symlink; - yield (_promise || _load_promise()).queue( - symlinkActions, - function (data) { - const linkname = (_path || _load_path()).default.resolve( - (_path || _load_path()).default.dirname(data.dest), - data.linkname - ); - reporter.verbose( - reporter.lang('verboseFileSymlink', data.dest, linkname) - ); - return symlink(linkname, data.dest); - } - ); - }); - - return function copyBulk(_x11, _x12, _x13) { - return _ref17.apply(this, arguments); - }; - })()); - - let hardlinkBulk = (exports.hardlinkBulk = (() => { - var _ref19 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - queue, - reporter, - _events - ) { - const events = { - onStart: (_events && _events.onStart) || noop, - onProgress: (_events && _events.onProgress) || noop, - possibleExtraneous: _events - ? _events.possibleExtraneous - : new Set(), - artifactFiles: (_events && _events.artifactFiles) || [], - ignoreBasenames: [], - }; - - const actions = yield buildActionsForHardlink( - queue, - events, - events.possibleExtraneous, - reporter - ); - events.onStart( - actions.file.length + actions.symlink.length + actions.link.length - ); - - const fileActions = actions.link; - - yield (_promise || _load_promise()).queue( - fileActions, - (() => { - var _ref20 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* (data) { - reporter.verbose( - reporter.lang('verboseFileLink', data.src, data.dest) - ); - if (data.removeDest) { - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)( - data.dest - ); - } - yield link(data.src, data.dest); - } - ); - - return function (_x18) { - return _ref20.apply(this, arguments); - }; - })(), - CONCURRENT_QUEUE_ITEMS - ); - - // we need to copy symlinks last as they could reference files we were copying - const symlinkActions = actions.symlink; - yield (_promise || _load_promise()).queue( - symlinkActions, - function (data) { - const linkname = (_path || _load_path()).default.resolve( - (_path || _load_path()).default.dirname(data.dest), - data.linkname - ); - reporter.verbose( - reporter.lang('verboseFileSymlink', data.dest, linkname) - ); - return symlink(linkname, data.dest); - } - ); - }); - - return function hardlinkBulk(_x15, _x16, _x17) { - return _ref19.apply(this, arguments); - }; - })()); - - let readFileAny = (exports.readFileAny = (() => { - var _ref21 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - files - ) { - for ( - var _iterator13 = files, - _isArray13 = Array.isArray(_iterator13), - _i13 = 0, - _iterator13 = _isArray13 - ? _iterator13 - : _iterator13[Symbol.iterator](); - ; - - ) { - var _ref22; - - if (_isArray13) { - if (_i13 >= _iterator13.length) break; - _ref22 = _iterator13[_i13++]; - } else { - _i13 = _iterator13.next(); - if (_i13.done) break; - _ref22 = _i13.value; - } - - const file = _ref22; - - if (yield exists(file)) { - return readFile(file); - } - } - return null; - }); - - return function readFileAny(_x19) { - return _ref21.apply(this, arguments); - }; - })()); - - let readJson = (exports.readJson = (() => { - var _ref23 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - loc - ) { - return (yield readJsonAndFile(loc)).object; - }); - - return function readJson(_x20) { - return _ref23.apply(this, arguments); - }; - })()); - - let readJsonAndFile = (exports.readJsonAndFile = (() => { - var _ref24 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - loc - ) { - const file = yield readFile(loc); - try { - return { - object: (0, (_map || _load_map()).default)( - JSON.parse(stripBOM(file)) - ), - content: file, - }; - } catch (err) { - err.message = `${loc}: ${err.message}`; - throw err; - } - }); - - return function readJsonAndFile(_x21) { - return _ref24.apply(this, arguments); - }; - })()); - - let find = (exports.find = (() => { - var _ref25 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - filename, - dir - ) { - const parts = dir.split((_path || _load_path()).default.sep); - - while (parts.length) { - const loc = parts - .concat(filename) - .join((_path || _load_path()).default.sep); - - if (yield exists(loc)) { - return loc; - } else { - parts.pop(); - } - } - - return false; - }); - - return function find(_x22, _x23) { - return _ref25.apply(this, arguments); - }; - })()); - - let symlink = (exports.symlink = (() => { - var _ref26 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - src, - dest - ) { - if (process.platform !== 'win32') { - // use relative paths otherwise which will be retained if the directory is moved - src = (_path || _load_path()).default.relative( - (_path || _load_path()).default.dirname(dest), - src - ); - // When path.relative returns an empty string for the current directory, we should instead use - // '.', which is a valid fs.symlink target. - src = src || '.'; - } - - try { - const stats = yield lstat(dest); - if (stats.isSymbolicLink()) { - const resolved = dest; - if (resolved === src) { - return; - } - } - } catch (err) { - if (err.code !== 'ENOENT') { - throw err; - } - } - - // We use rimraf for unlink which never throws an ENOENT on missing target - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dest); - - if (process.platform === 'win32') { - // use directory junctions if possible on win32, this requires absolute paths - yield fsSymlink(src, dest, 'junction'); - } else { - yield fsSymlink(src, dest); - } - }); - - return function symlink(_x24, _x25) { - return _ref26.apply(this, arguments); - }; - })()); - - let walk = (exports.walk = (() => { - var _ref27 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - dir, - relativeDir, - ignoreBasenames = new Set() - ) { - let files = []; - - let filenames = yield readdir(dir); - if (ignoreBasenames.size) { - filenames = filenames.filter(function (name) { - return !ignoreBasenames.has(name); - }); - } - - for ( - var _iterator14 = filenames, - _isArray14 = Array.isArray(_iterator14), - _i14 = 0, - _iterator14 = _isArray14 - ? _iterator14 - : _iterator14[Symbol.iterator](); - ; - - ) { - var _ref28; - - if (_isArray14) { - if (_i14 >= _iterator14.length) break; - _ref28 = _iterator14[_i14++]; - } else { - _i14 = _iterator14.next(); - if (_i14.done) break; - _ref28 = _i14.value; - } - - const name = _ref28; - - const relative = relativeDir - ? (_path || _load_path()).default.join(relativeDir, name) - : name; - const loc = (_path || _load_path()).default.join(dir, name); - const stat = yield lstat(loc); - - files.push({ - relative, - basename: name, - absolute: loc, - mtime: +stat.mtime, - }); - - if (stat.isDirectory()) { - files = files.concat(yield walk(loc, relative, ignoreBasenames)); - } - } - - return files; - }); - - return function walk(_x26, _x27) { - return _ref27.apply(this, arguments); - }; - })()); - - let getFileSizeOnDisk = (exports.getFileSizeOnDisk = (() => { - var _ref29 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - loc - ) { - const stat = yield lstat(loc); - const size = stat.size, - blockSize = stat.blksize; - - return Math.ceil(size / blockSize) * blockSize; - }); - - return function getFileSizeOnDisk(_x28) { - return _ref29.apply(this, arguments); - }; - })()); - - let getEolFromFile = (() => { - var _ref30 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - path - ) { - if (!(yield exists(path))) { - return undefined; - } - - const buffer = yield readFileBuffer(path); - - for (let i = 0; i < buffer.length; ++i) { - if (buffer[i] === cr) { - return '\r\n'; - } - if (buffer[i] === lf) { - return '\n'; - } - } - return undefined; - }); - - return function getEolFromFile(_x29) { - return _ref30.apply(this, arguments); - }; - })(); - - let writeFilePreservingEol = (exports.writeFilePreservingEol = (() => { - var _ref31 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - path, - data - ) { - const eol = - (yield getEolFromFile(path)) || (_os || _load_os()).default.EOL; - if (eol !== '\n') { - data = data.replace(/\n/g, eol); - } - yield writeFile(path, data); - }); - - return function writeFilePreservingEol(_x30, _x31) { - return _ref31.apply(this, arguments); - }; - })()); - - let hardlinksWork = (exports.hardlinksWork = (() => { - var _ref32 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - dir - ) { - const filename = 'test-file' + Math.random(); - const file = (_path || _load_path()).default.join(dir, filename); - const fileLink = (_path || _load_path()).default.join( - dir, - filename + '-link' - ); - try { - yield writeFile(file, 'test'); - yield link(file, fileLink); - } catch (err) { - return false; - } finally { - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(file); - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(fileLink); - } - return true; - }); - - return function hardlinksWork(_x32) { - return _ref32.apply(this, arguments); - }; - })()); - - // not a strict polyfill for Node's fs.mkdtemp - - let makeTempDir = (exports.makeTempDir = (() => { - var _ref33 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - prefix - ) { - const dir = (_path || _load_path()).default.join( - (_os || _load_os()).default.tmpdir(), - `yarn-${prefix || ''}-${Date.now()}-${Math.random()}` - ); - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dir); - yield mkdirp(dir); - return dir; - }); - - return function makeTempDir(_x33) { - return _ref33.apply(this, arguments); - }; - })()); - - let readFirstAvailableStream = (exports.readFirstAvailableStream = - (() => { - var _ref34 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - paths - ) { - for ( - var _iterator15 = paths, - _isArray15 = Array.isArray(_iterator15), - _i15 = 0, - _iterator15 = _isArray15 - ? _iterator15 - : _iterator15[Symbol.iterator](); - ; - - ) { - var _ref35; - - if (_isArray15) { - if (_i15 >= _iterator15.length) break; - _ref35 = _iterator15[_i15++]; - } else { - _i15 = _iterator15.next(); - if (_i15.done) break; - _ref35 = _i15.value; - } - - const path = _ref35; - - try { - const fd = yield open(path, 'r'); - return (_fs || _load_fs()).default.createReadStream(path, { - fd, - }); - } catch (err) { - // Try the next one - } - } - return null; - }); - - return function readFirstAvailableStream(_x34) { - return _ref34.apply(this, arguments); - }; - })()); - - let getFirstSuitableFolder = (exports.getFirstSuitableFolder = (() => { - var _ref36 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - paths, - mode = constants.W_OK | constants.X_OK - ) { - const result = { - skipped: [], - folder: null, - }; - - for ( - var _iterator16 = paths, - _isArray16 = Array.isArray(_iterator16), - _i16 = 0, - _iterator16 = _isArray16 - ? _iterator16 - : _iterator16[Symbol.iterator](); - ; - - ) { - var _ref37; - - if (_isArray16) { - if (_i16 >= _iterator16.length) break; - _ref37 = _iterator16[_i16++]; - } else { - _i16 = _iterator16.next(); - if (_i16.done) break; - _ref37 = _i16.value; - } - - const folder = _ref37; - - try { - yield mkdirp(folder); - yield access(folder, mode); - - result.folder = folder; - - return result; - } catch (error) { - result.skipped.push({ - error, - folder, - }); - } - } - return result; - }); - - return function getFirstSuitableFolder(_x35) { - return _ref36.apply(this, arguments); - }; - })()); - - exports.copy = copy; - exports.readFile = readFile; - exports.readFileRaw = readFileRaw; - exports.normalizeOS = normalizeOS; - - var _fs; - - function _load_fs() { - return (_fs = _interopRequireDefault(__webpack_require__(4))); - } - - var _glob; - - function _load_glob() { - return (_glob = _interopRequireDefault(__webpack_require__(99))); - } - - var _os; - - function _load_os() { - return (_os = _interopRequireDefault(__webpack_require__(46))); - } - - var _path; - - function _load_path() { - return (_path = _interopRequireDefault(__webpack_require__(0))); - } - - var _blockingQueue; - - function _load_blockingQueue() { - return (_blockingQueue = _interopRequireDefault( - __webpack_require__(110) - )); - } - - var _promise; - - function _load_promise() { - return (_promise = _interopRequireWildcard(__webpack_require__(51))); - } - - var _promise2; - - function _load_promise2() { - return (_promise2 = __webpack_require__(51)); - } - - var _map; - - function _load_map() { - return (_map = _interopRequireDefault(__webpack_require__(29))); - } - - var _fsNormalized; - - function _load_fsNormalized() { - return (_fsNormalized = __webpack_require__(216)); - } - - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } else { - var newObj = {}; - if (obj != null) { - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) - newObj[key] = obj[key]; - } - } - newObj.default = obj; - return newObj; - } - } - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - const constants = (exports.constants = - typeof (_fs || _load_fs()).default.constants !== 'undefined' - ? (_fs || _load_fs()).default.constants - : { - R_OK: (_fs || _load_fs()).default.R_OK, - W_OK: (_fs || _load_fs()).default.W_OK, - X_OK: (_fs || _load_fs()).default.X_OK, - }); - - const lockQueue = (exports.lockQueue = new ( - _blockingQueue || _load_blockingQueue() - ).default('fs lock')); - - const readFileBuffer = (exports.readFileBuffer = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.readFile - )); - const open = (exports.open = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.open - )); - const writeFile = (exports.writeFile = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.writeFile - )); - const readlink = (exports.readlink = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.readlink - )); - const realpath = (exports.realpath = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.realpath - )); - const readdir = (exports.readdir = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.readdir - )); - const rename = (exports.rename = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.rename - )); - const access = (exports.access = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.access - )); - const stat = (exports.stat = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.stat - )); - const mkdirp = (exports.mkdirp = (0, - (_promise2 || _load_promise2()).promisify)(__webpack_require__(145))); - const exists = (exports.exists = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.exists, - true - )); - const lstat = (exports.lstat = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.lstat - )); - const chmod = (exports.chmod = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.chmod - )); - const link = (exports.link = (0, - (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.link - )); - const glob = (exports.glob = (0, - (_promise2 || _load_promise2()).promisify)( - (_glob || _load_glob()).default - )); - exports.unlink = (_fsNormalized || _load_fsNormalized()).unlink; - - // fs.copyFile uses the native file copying instructions on the system, performing much better - // than any JS-based solution and consumes fewer resources. Repeated testing to fine tune the - // concurrency level revealed 128 as the sweet spot on a quad-core, 16 CPU Intel system with SSD. - - const CONCURRENT_QUEUE_ITEMS = (_fs || _load_fs()).default.copyFile - ? 128 - : 4; - - const fsSymlink = (0, (_promise2 || _load_promise2()).promisify)( - (_fs || _load_fs()).default.symlink - ); - const invariant = __webpack_require__(9); - const stripBOM = __webpack_require__(160); - - const noop = () => {}; - - function copy(src, dest, reporter) { - return copyBulk([{ src, dest }], reporter); - } - - function _readFile(loc, encoding) { - return new Promise((resolve, reject) => { - (_fs || _load_fs()).default.readFile( - loc, - encoding, - function (err, content) { - if (err) { - reject(err); - } else { - resolve(content); - } - } - ); - }); - } - - function readFile(loc) { - return _readFile(loc, 'utf8').then(normalizeOS); - } - - function readFileRaw(loc) { - return _readFile(loc, 'binary'); - } - - function normalizeOS(body) { - return body.replace(/\r\n/g, '\n'); - } - - const cr = '\r'.charCodeAt(0); - const lf = '\n'.charCodeAt(0); - - /***/ - }, - /* 6 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - class MessageError extends Error { - constructor(msg, code) { - super(msg); - this.code = code; - } - } - - exports.MessageError = MessageError; - class ProcessSpawnError extends MessageError { - constructor(msg, code, process) { - super(msg, code); - this.process = process; - } - } - - exports.ProcessSpawnError = ProcessSpawnError; - class SecurityError extends MessageError {} - - exports.SecurityError = SecurityError; - class ProcessTermError extends MessageError {} - - exports.ProcessTermError = ProcessTermError; - class ResponseError extends Error { - constructor(msg, responseCode) { - super(msg); - this.responseCode = responseCode; - } - } - - exports.ResponseError = ResponseError; - class OneTimePasswordError extends Error { - constructor(notice) { - super(); - this.notice = notice; - } - } - exports.OneTimePasswordError = OneTimePasswordError; - - /***/ - }, - /* 7 */ - /***/ function (module, __webpack_exports__, __webpack_require__) { - 'use strict'; - /* harmony export (binding) */ __webpack_require__.d( - __webpack_exports__, - 'a', - function () { - return Subscriber; - } - ); - /* unused harmony export SafeSubscriber */ - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = - __webpack_require__(1); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_isFunction__ = - __webpack_require__(154); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Observer__ = - __webpack_require__(420); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Subscription__ = - __webpack_require__(25); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__internal_symbol_rxSubscriber__ = - __webpack_require__(321); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config__ = - __webpack_require__(186); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__util_hostReportError__ = - __webpack_require__(323); - /** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */ - - var Subscriber = /*@__PURE__*/ (function (_super) { - __WEBPACK_IMPORTED_MODULE_0_tslib__['a' /* __extends */]( - Subscriber, - _super - ); - function Subscriber(destinationOrNext, error, complete) { - var _this = _super.call(this) || this; - _this.syncErrorValue = null; - _this.syncErrorThrown = false; - _this.syncErrorThrowable = false; - _this.isStopped = false; - _this._parentSubscription = null; - switch (arguments.length) { - case 0: - _this.destination = - __WEBPACK_IMPORTED_MODULE_2__Observer__['a' /* empty */]; - break; - case 1: - if (!destinationOrNext) { - _this.destination = - __WEBPACK_IMPORTED_MODULE_2__Observer__['a' /* empty */]; - break; - } - if (typeof destinationOrNext === 'object') { - if (destinationOrNext instanceof Subscriber) { - _this.syncErrorThrowable = - destinationOrNext.syncErrorThrowable; - _this.destination = destinationOrNext; - destinationOrNext.add(_this); - } else { - _this.syncErrorThrowable = true; - _this.destination = new SafeSubscriber( - _this, - destinationOrNext - ); - } - break; - } - default: - _this.syncErrorThrowable = true; - _this.destination = new SafeSubscriber( - _this, - destinationOrNext, - error, - complete - ); - break; - } - return _this; - } - Subscriber.prototype[ - __WEBPACK_IMPORTED_MODULE_4__internal_symbol_rxSubscriber__[ - 'a' /* rxSubscriber */ - ] - ] = function () { - return this; - }; - Subscriber.create = function (next, error, complete) { - var subscriber = new Subscriber(next, error, complete); - subscriber.syncErrorThrowable = false; - return subscriber; - }; - Subscriber.prototype.next = function (value) { - if (!this.isStopped) { - this._next(value); - } - }; - Subscriber.prototype.error = function (err) { - if (!this.isStopped) { - this.isStopped = true; - this._error(err); - } - }; - Subscriber.prototype.complete = function () { - if (!this.isStopped) { - this.isStopped = true; - this._complete(); - } - }; - Subscriber.prototype.unsubscribe = function () { - if (this.closed) { - return; - } - this.isStopped = true; - _super.prototype.unsubscribe.call(this); - }; - Subscriber.prototype._next = function (value) { - this.destination.next(value); - }; - Subscriber.prototype._error = function (err) { - this.destination.error(err); - this.unsubscribe(); - }; - Subscriber.prototype._complete = function () { - this.destination.complete(); - this.unsubscribe(); - }; - Subscriber.prototype._unsubscribeAndRecycle = function () { - var _a = this, - _parent = _a._parent, - _parents = _a._parents; - this._parent = null; - this._parents = null; - this.unsubscribe(); - this.closed = false; - this.isStopped = false; - this._parent = _parent; - this._parents = _parents; - this._parentSubscription = null; - return this; - }; - return Subscriber; - })(__WEBPACK_IMPORTED_MODULE_3__Subscription__['a' /* Subscription */]); - - var SafeSubscriber = /*@__PURE__*/ (function (_super) { - __WEBPACK_IMPORTED_MODULE_0_tslib__['a' /* __extends */]( - SafeSubscriber, - _super - ); - function SafeSubscriber( - _parentSubscriber, - observerOrNext, - error, - complete - ) { - var _this = _super.call(this) || this; - _this._parentSubscriber = _parentSubscriber; - var next; - var context = _this; - if ( - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_1__util_isFunction__[ - 'a' /* isFunction */ - ] - )(observerOrNext) - ) { - next = observerOrNext; - } else if (observerOrNext) { - next = observerOrNext.next; - error = observerOrNext.error; - complete = observerOrNext.complete; - if ( - observerOrNext !== - __WEBPACK_IMPORTED_MODULE_2__Observer__['a' /* empty */] - ) { - context = Object.create(observerOrNext); - if ( - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_1__util_isFunction__[ - 'a' /* isFunction */ - ] - )(context.unsubscribe) - ) { - _this.add(context.unsubscribe.bind(context)); - } - context.unsubscribe = _this.unsubscribe.bind(_this); - } - } - _this._context = context; - _this._next = next; - _this._error = error; - _this._complete = complete; - return _this; - } - SafeSubscriber.prototype.next = function (value) { - if (!this.isStopped && this._next) { - var _parentSubscriber = this._parentSubscriber; - if ( - !__WEBPACK_IMPORTED_MODULE_5__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling || - !_parentSubscriber.syncErrorThrowable - ) { - this.__tryOrUnsub(this._next, value); - } else if ( - this.__tryOrSetError(_parentSubscriber, this._next, value) - ) { - this.unsubscribe(); - } - } - }; - SafeSubscriber.prototype.error = function (err) { - if (!this.isStopped) { - var _parentSubscriber = this._parentSubscriber; - var useDeprecatedSynchronousErrorHandling = - __WEBPACK_IMPORTED_MODULE_5__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling; - if (this._error) { - if ( - !useDeprecatedSynchronousErrorHandling || - !_parentSubscriber.syncErrorThrowable - ) { - this.__tryOrUnsub(this._error, err); - this.unsubscribe(); - } else { - this.__tryOrSetError(_parentSubscriber, this._error, err); - this.unsubscribe(); - } - } else if (!_parentSubscriber.syncErrorThrowable) { - this.unsubscribe(); - if (useDeprecatedSynchronousErrorHandling) { - throw err; - } - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_6__util_hostReportError__[ - 'a' /* hostReportError */ - ] - )(err); - } else { - if (useDeprecatedSynchronousErrorHandling) { - _parentSubscriber.syncErrorValue = err; - _parentSubscriber.syncErrorThrown = true; - } else { - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_6__util_hostReportError__[ - 'a' /* hostReportError */ - ] - )(err); - } - this.unsubscribe(); - } - } - }; - SafeSubscriber.prototype.complete = function () { - var _this = this; - if (!this.isStopped) { - var _parentSubscriber = this._parentSubscriber; - if (this._complete) { - var wrappedComplete = function () { - return _this._complete.call(_this._context); - }; - if ( - !__WEBPACK_IMPORTED_MODULE_5__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling || - !_parentSubscriber.syncErrorThrowable - ) { - this.__tryOrUnsub(wrappedComplete); - this.unsubscribe(); - } else { - this.__tryOrSetError(_parentSubscriber, wrappedComplete); - this.unsubscribe(); - } - } else { - this.unsubscribe(); - } - } - }; - SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) { - try { - fn.call(this._context, value); - } catch (err) { - this.unsubscribe(); - if ( - __WEBPACK_IMPORTED_MODULE_5__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling - ) { - throw err; - } else { - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_6__util_hostReportError__[ - 'a' /* hostReportError */ - ] - )(err); - } - } - }; - SafeSubscriber.prototype.__tryOrSetError = function ( - parent, - fn, - value - ) { - if ( - !__WEBPACK_IMPORTED_MODULE_5__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling - ) { - throw new Error('bad call'); - } - try { - fn.call(this._context, value); - } catch (err) { - if ( - __WEBPACK_IMPORTED_MODULE_5__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling - ) { - parent.syncErrorValue = err; - parent.syncErrorThrown = true; - return true; - } else { - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_6__util_hostReportError__[ - 'a' /* hostReportError */ - ] - )(err); - return true; - } - } - return false; - }; - SafeSubscriber.prototype._unsubscribe = function () { - var _parentSubscriber = this._parentSubscriber; - this._context = null; - this._parentSubscriber = null; - _parentSubscriber.unsubscribe(); - }; - return SafeSubscriber; - })(Subscriber); - - //# sourceMappingURL=Subscriber.js.map - - /***/ - }, - /* 8 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - exports.getPathKey = getPathKey; - const os = __webpack_require__(46); - const path = __webpack_require__(0); - const userHome = __webpack_require__(67).default; - - var _require = __webpack_require__(222); - - const getCacheDir = _require.getCacheDir, - getConfigDir = _require.getConfigDir, - getDataDir = _require.getDataDir; - - const isWebpackBundle = __webpack_require__(278); - - const DEPENDENCY_TYPES = (exports.DEPENDENCY_TYPES = [ - 'devDependencies', - 'dependencies', - 'optionalDependencies', - 'peerDependencies', - ]); - const OWNED_DEPENDENCY_TYPES = (exports.OWNED_DEPENDENCY_TYPES = [ - 'devDependencies', - 'dependencies', - 'optionalDependencies', - ]); - - const RESOLUTIONS = (exports.RESOLUTIONS = 'resolutions'); - const MANIFEST_FIELDS = (exports.MANIFEST_FIELDS = [ - RESOLUTIONS, - ...DEPENDENCY_TYPES, - ]); - - const SUPPORTED_NODE_VERSIONS = (exports.SUPPORTED_NODE_VERSIONS = - '^4.8.0 || ^5.7.0 || ^6.2.2 || >=8.0.0'); - - const YARN_REGISTRY = (exports.YARN_REGISTRY = - 'https://registry.yarnpkg.com'); - const NPM_REGISTRY_RE = (exports.NPM_REGISTRY_RE = - /https?:\/\/registry\.npmjs\.org/g); - - const YARN_DOCS = (exports.YARN_DOCS = - 'https://yarnpkg.com/en/docs/cli/'); - const YARN_INSTALLER_SH = (exports.YARN_INSTALLER_SH = - 'https://yarnpkg.com/install.sh'); - const YARN_INSTALLER_MSI = (exports.YARN_INSTALLER_MSI = - 'https://yarnpkg.com/latest.msi'); - - const SELF_UPDATE_VERSION_URL = (exports.SELF_UPDATE_VERSION_URL = - 'https://yarnpkg.com/latest-version'); - - // cache version, bump whenever we make backwards incompatible changes - const CACHE_VERSION = (exports.CACHE_VERSION = 6); - - // lockfile version, bump whenever we make backwards incompatible changes - const LOCKFILE_VERSION = (exports.LOCKFILE_VERSION = 1); - - // max amount of network requests to perform concurrently - const NETWORK_CONCURRENCY = (exports.NETWORK_CONCURRENCY = 8); - - // HTTP timeout used when downloading packages - const NETWORK_TIMEOUT = (exports.NETWORK_TIMEOUT = 30 * 1000); // in milliseconds - - // max amount of child processes to execute concurrently - const CHILD_CONCURRENCY = (exports.CHILD_CONCURRENCY = 5); - - const REQUIRED_PACKAGE_KEYS = (exports.REQUIRED_PACKAGE_KEYS = [ - 'name', - 'version', - '_uid', - ]); - - function getPreferredCacheDirectories() { - const preferredCacheDirectories = [getCacheDir()]; - - if (process.getuid) { - // $FlowFixMe: process.getuid exists, dammit - preferredCacheDirectories.push( - path.join(os.tmpdir(), `.yarn-cache-${process.getuid()}`) - ); - } - - preferredCacheDirectories.push(path.join(os.tmpdir(), `.yarn-cache`)); - - return preferredCacheDirectories; - } - - const PREFERRED_MODULE_CACHE_DIRECTORIES = - (exports.PREFERRED_MODULE_CACHE_DIRECTORIES = - getPreferredCacheDirectories()); - const CONFIG_DIRECTORY = (exports.CONFIG_DIRECTORY = getConfigDir()); - const DATA_DIRECTORY = (exports.DATA_DIRECTORY = getDataDir()); - const LINK_REGISTRY_DIRECTORY = (exports.LINK_REGISTRY_DIRECTORY = - path.join(DATA_DIRECTORY, 'link')); - const GLOBAL_MODULE_DIRECTORY = (exports.GLOBAL_MODULE_DIRECTORY = - path.join(DATA_DIRECTORY, 'global')); - - const NODE_BIN_PATH = (exports.NODE_BIN_PATH = process.execPath); - const YARN_BIN_PATH = (exports.YARN_BIN_PATH = getYarnBinPath()); - - // Webpack needs to be configured with node.__dirname/__filename = false - function getYarnBinPath() { - if (isWebpackBundle) { - return __filename; - } else { - return path.join(__dirname, '..', 'bin', 'yarn.js'); - } - } - - const NODE_MODULES_FOLDER = (exports.NODE_MODULES_FOLDER = - 'node_modules'); - const NODE_PACKAGE_JSON = (exports.NODE_PACKAGE_JSON = 'package.json'); - - const PNP_FILENAME = (exports.PNP_FILENAME = '.pnp.js'); - - const POSIX_GLOBAL_PREFIX = (exports.POSIX_GLOBAL_PREFIX = `${ - process.env.DESTDIR || '' - }/usr/local`); - const FALLBACK_GLOBAL_PREFIX = (exports.FALLBACK_GLOBAL_PREFIX = - path.join(userHome, '.yarn')); - - const META_FOLDER = (exports.META_FOLDER = '.yarn-meta'); - const INTEGRITY_FILENAME = (exports.INTEGRITY_FILENAME = - '.yarn-integrity'); - const LOCKFILE_FILENAME = (exports.LOCKFILE_FILENAME = 'yarn.lock'); - const METADATA_FILENAME = (exports.METADATA_FILENAME = - '.yarn-metadata.json'); - const TARBALL_FILENAME = (exports.TARBALL_FILENAME = '.yarn-tarball.tgz'); - const CLEAN_FILENAME = (exports.CLEAN_FILENAME = '.yarnclean'); - - const NPM_LOCK_FILENAME = (exports.NPM_LOCK_FILENAME = - 'package-lock.json'); - const NPM_SHRINKWRAP_FILENAME = (exports.NPM_SHRINKWRAP_FILENAME = - 'npm-shrinkwrap.json'); - - const DEFAULT_INDENT = (exports.DEFAULT_INDENT = ' '); - const SINGLE_INSTANCE_PORT = (exports.SINGLE_INSTANCE_PORT = 31997); - const SINGLE_INSTANCE_FILENAME = (exports.SINGLE_INSTANCE_FILENAME = - '.yarn-single-instance'); - - const ENV_PATH_KEY = (exports.ENV_PATH_KEY = getPathKey( - process.platform, - process.env - )); - - function getPathKey(platform, env) { - let pathKey = 'PATH'; - - // windows calls its path "Path" usually, but this is not guaranteed. - if (platform === 'win32') { - pathKey = 'Path'; - - for (const key in env) { - if (key.toLowerCase() === 'path') { - pathKey = key; - } - } - } - - return pathKey; - } - - const VERSION_COLOR_SCHEME = (exports.VERSION_COLOR_SCHEME = { - major: 'red', - premajor: 'red', - minor: 'yellow', - preminor: 'yellow', - patch: 'green', - prepatch: 'green', - prerelease: 'red', - unchanged: 'white', - unknown: 'red', - }); - - /***/ - }, - /* 9 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - /** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - - var NODE_ENV = process.env.NODE_ENV; - - var invariant = function (condition, format, a, b, c, d, e, f) { - if (NODE_ENV !== 'production') { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - - if (!condition) { - var error; - if (format === undefined) { - error = new Error( - 'Minified exception occurred; use the non-minified dev environment ' + - 'for the full error message and additional helpful warnings.' - ); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error( - format.replace(/%s/g, function () { - return args[argIndex++]; - }) - ); - error.name = 'Invariant Violation'; - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } - }; - - module.exports = invariant; - - /***/ - }, - /* 10 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - var YAMLException = __webpack_require__(55); - - var TYPE_CONSTRUCTOR_OPTIONS = [ - 'kind', - 'resolve', - 'construct', - 'instanceOf', - 'predicate', - 'represent', - 'defaultStyle', - 'styleAliases', - ]; - - var YAML_NODE_KINDS = ['scalar', 'sequence', 'mapping']; - - function compileStyleAliases(map) { - var result = {}; - - if (map !== null) { - Object.keys(map).forEach(function (style) { - map[style].forEach(function (alias) { - result[String(alias)] = style; - }); - }); - } - - return result; - } - - function Type(tag, options) { - options = options || {}; - - Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new YAMLException( - 'Unknown option "' + - name + - '" is met in definition of "' + - tag + - '" YAML type.' - ); - } - }); - - // TODO: Add tag format check. - this.tag = tag; - this.kind = options['kind'] || null; - this.resolve = - options['resolve'] || - function () { - return true; - }; - this.construct = - options['construct'] || - function (data) { - return data; - }; - this.instanceOf = options['instanceOf'] || null; - this.predicate = options['predicate'] || null; - this.represent = options['represent'] || null; - this.defaultStyle = options['defaultStyle'] || null; - this.styleAliases = compileStyleAliases( - options['styleAliases'] || null - ); - - if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { - throw new YAMLException( - 'Unknown kind "' + - this.kind + - '" is specified for "' + - tag + - '" YAML type.' - ); - } - } - - module.exports = Type; - - /***/ - }, - /* 11 */ - /***/ function (module, exports) { - module.exports = require('crypto'); - - /***/ - }, - /* 12 */ - /***/ function (module, __webpack_exports__, __webpack_require__) { - 'use strict'; - /* harmony export (binding) */ __webpack_require__.d( - __webpack_exports__, - 'a', - function () { - return Observable; - } - ); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_canReportError__ = - __webpack_require__(322); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_toSubscriber__ = - __webpack_require__(932); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__internal_symbol_observable__ = - __webpack_require__(118); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_pipe__ = - __webpack_require__(324); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__config__ = - __webpack_require__(186); - /** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_internal_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */ - - var Observable = /*@__PURE__*/ (function () { - function Observable(subscribe) { - this._isScalar = false; - if (subscribe) { - this._subscribe = subscribe; - } - } - Observable.prototype.lift = function (operator) { - var observable = new Observable(); - observable.source = this; - observable.operator = operator; - return observable; - }; - Observable.prototype.subscribe = function ( - observerOrNext, - error, - complete - ) { - var operator = this.operator; - var sink = __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_1__util_toSubscriber__[ - 'a' /* toSubscriber */ - ] - )(observerOrNext, error, complete); - if (operator) { - operator.call(sink, this.source); - } else { - sink.add( - this.source || - (__WEBPACK_IMPORTED_MODULE_4__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling && - !sink.syncErrorThrowable) - ? this._subscribe(sink) - : this._trySubscribe(sink) - ); - } - if ( - __WEBPACK_IMPORTED_MODULE_4__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling - ) { - if (sink.syncErrorThrowable) { - sink.syncErrorThrowable = false; - if (sink.syncErrorThrown) { - throw sink.syncErrorValue; - } - } - } - return sink; - }; - Observable.prototype._trySubscribe = function (sink) { - try { - return this._subscribe(sink); - } catch (err) { - if ( - __WEBPACK_IMPORTED_MODULE_4__config__['a' /* config */] - .useDeprecatedSynchronousErrorHandling - ) { - sink.syncErrorThrown = true; - sink.syncErrorValue = err; - } - if ( - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_0__util_canReportError__[ - 'a' /* canReportError */ - ] - )(sink) - ) { - sink.error(err); - } else { - console.warn(err); - } - } - }; - Observable.prototype.forEach = function (next, promiseCtor) { - var _this = this; - promiseCtor = getPromiseCtor(promiseCtor); - return new promiseCtor(function (resolve, reject) { - var subscription; - subscription = _this.subscribe( - function (value) { - try { - next(value); - } catch (err) { - reject(err); - if (subscription) { - subscription.unsubscribe(); - } - } - }, - reject, - resolve - ); - }); - }; - Observable.prototype._subscribe = function (subscriber) { - var source = this.source; - return source && source.subscribe(subscriber); - }; - Observable.prototype[ - __WEBPACK_IMPORTED_MODULE_2__internal_symbol_observable__[ - 'a' /* observable */ - ] - ] = function () { - return this; - }; - Observable.prototype.pipe = function () { - var operations = []; - for (var _i = 0; _i < arguments.length; _i++) { - operations[_i] = arguments[_i]; - } - if (operations.length === 0) { - return this; - } - return __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_3__util_pipe__['b' /* pipeFromArray */] - )(operations)(this); - }; - Observable.prototype.toPromise = function (promiseCtor) { - var _this = this; - promiseCtor = getPromiseCtor(promiseCtor); - return new promiseCtor(function (resolve, reject) { - var value; - _this.subscribe( - function (x) { - return (value = x); - }, - function (err) { - return reject(err); - }, - function () { - return resolve(value); - } - ); - }); - }; - Observable.create = function (subscribe) { - return new Observable(subscribe); - }; - return Observable; - })(); - - function getPromiseCtor(promiseCtor) { - if (!promiseCtor) { - promiseCtor = - __WEBPACK_IMPORTED_MODULE_4__config__['a' /* config */].Promise || - Promise; - } - if (!promiseCtor) { - throw new Error('no Promise impl found'); - } - return promiseCtor; - } - //# sourceMappingURL=Observable.js.map - - /***/ - }, - /* 13 */ - /***/ function (module, __webpack_exports__, __webpack_require__) { - 'use strict'; - /* harmony export (binding) */ __webpack_require__.d( - __webpack_exports__, - 'a', - function () { - return OuterSubscriber; - } - ); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = - __webpack_require__(1); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Subscriber__ = - __webpack_require__(7); - /** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */ - - var OuterSubscriber = /*@__PURE__*/ (function (_super) { - __WEBPACK_IMPORTED_MODULE_0_tslib__['a' /* __extends */]( - OuterSubscriber, - _super - ); - function OuterSubscriber() { - return (_super !== null && _super.apply(this, arguments)) || this; - } - OuterSubscriber.prototype.notifyNext = function ( - outerValue, - innerValue, - outerIndex, - innerIndex, - innerSub - ) { - this.destination.next(innerValue); - }; - OuterSubscriber.prototype.notifyError = function (error, innerSub) { - this.destination.error(error); - }; - OuterSubscriber.prototype.notifyComplete = function (innerSub) { - this.destination.complete(); - }; - return OuterSubscriber; - })(__WEBPACK_IMPORTED_MODULE_1__Subscriber__['a' /* Subscriber */]); - - //# sourceMappingURL=OuterSubscriber.js.map - - /***/ - }, - /* 14 */ - /***/ function (module, __webpack_exports__, __webpack_require__) { - 'use strict'; - /* harmony export (immutable) */ __webpack_exports__['a'] = - subscribeToResult; - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__InnerSubscriber__ = - __webpack_require__(84); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__subscribeTo__ = - __webpack_require__(446); - /** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo PURE_IMPORTS_END */ - - function subscribeToResult( - outerSubscriber, - result, - outerValue, - outerIndex, - destination - ) { - if (destination === void 0) { - destination = new __WEBPACK_IMPORTED_MODULE_0__InnerSubscriber__[ - 'a' /* InnerSubscriber */ - ](outerSubscriber, outerValue, outerIndex); - } - if (destination.closed) { - return; - } - return __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_1__subscribeTo__['a' /* subscribeTo */] - )(result)(destination); - } - //# sourceMappingURL=subscribeToResult.js.map - - /***/ - }, - /* 15 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - /* eslint-disable node/no-deprecated-api */ - - var buffer = __webpack_require__(64); - var Buffer = buffer.Buffer; - - var safer = {}; - - var key; - - for (key in buffer) { - if (!buffer.hasOwnProperty(key)) continue; - if (key === 'SlowBuffer' || key === 'Buffer') continue; - safer[key] = buffer[key]; - } - - var Safer = (safer.Buffer = {}); - for (key in Buffer) { - if (!Buffer.hasOwnProperty(key)) continue; - if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue; - Safer[key] = Buffer[key]; - } - - safer.Buffer.prototype = Buffer.prototype; - - if (!Safer.from || Safer.from === Uint8Array.from) { - Safer.from = function (value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError( - 'The "value" argument must not be of type number. Received type ' + - typeof value - ); - } - if (value && typeof value.length === 'undefined') { - throw new TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + - typeof value - ); - } - return Buffer(value, encodingOrOffset, length); - }; - } - - if (!Safer.alloc) { - Safer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError( - 'The "size" argument must be of type number. Received type ' + - typeof size - ); - } - if (size < 0 || size >= 2 * (1 << 30)) { - throw new RangeError( - 'The value "' + size + '" is invalid for option "size"' - ); - } - var buf = Buffer(size); - if (!fill || fill.length === 0) { - buf.fill(0); - } else if (typeof encoding === 'string') { - buf.fill(fill, encoding); - } else { - buf.fill(fill); - } - return buf; - }; - } - - if (!safer.kStringMaxLength) { - try { - safer.kStringMaxLength = process.binding('buffer').kStringMaxLength; - } catch (e) { - // we can't determine kStringMaxLength in environments where process.binding - // is unsupported, so let's not set it - } - } - - if (!safer.constants) { - safer.constants = { - MAX_LENGTH: safer.kMaxLength, - }; - if (safer.kStringMaxLength) { - safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength; - } - } - - module.exports = safer; - - /***/ - }, - /* 16 */ - /***/ function (module, exports, __webpack_require__) { - // Copyright (c) 2012, Mark Cavage. All rights reserved. - // Copyright 2015 Joyent, Inc. - - var assert = __webpack_require__(28); - var Stream = __webpack_require__(23).Stream; - var util = __webpack_require__(3); - - ///--- Globals - - /* JSSTYLED */ - var UUID_REGEXP = - /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; - - ///--- Internal - - function _capitalize(str) { - return str.charAt(0).toUpperCase() + str.slice(1); - } - - function _toss(name, expected, oper, arg, actual) { - throw new assert.AssertionError({ - message: util.format('%s (%s) is required', name, expected), - actual: actual === undefined ? typeof arg : actual(arg), - expected: expected, - operator: oper || '===', - stackStartFunction: _toss.caller, - }); - } - - function _getClass(arg) { - return Object.prototype.toString.call(arg).slice(8, -1); - } - - function noop() { - // Why even bother with asserts? - } - - ///--- Exports - - var types = { - bool: { - check: function (arg) { - return typeof arg === 'boolean'; - }, - }, - func: { - check: function (arg) { - return typeof arg === 'function'; - }, - }, - string: { - check: function (arg) { - return typeof arg === 'string'; - }, - }, - object: { - check: function (arg) { - return typeof arg === 'object' && arg !== null; - }, - }, - number: { - check: function (arg) { - return typeof arg === 'number' && !isNaN(arg); - }, - }, - finite: { - check: function (arg) { - return typeof arg === 'number' && !isNaN(arg) && isFinite(arg); - }, - }, - buffer: { - check: function (arg) { - return Buffer.isBuffer(arg); - }, - operator: 'Buffer.isBuffer', - }, - array: { - check: function (arg) { - return Array.isArray(arg); - }, - operator: 'Array.isArray', - }, - stream: { - check: function (arg) { - return arg instanceof Stream; - }, - operator: 'instanceof', - actual: _getClass, - }, - date: { - check: function (arg) { - return arg instanceof Date; - }, - operator: 'instanceof', - actual: _getClass, - }, - regexp: { - check: function (arg) { - return arg instanceof RegExp; - }, - operator: 'instanceof', - actual: _getClass, - }, - uuid: { - check: function (arg) { - return typeof arg === 'string' && UUID_REGEXP.test(arg); - }, - operator: 'isUUID', - }, - }; - - function _setExports(ndebug) { - var keys = Object.keys(types); - var out; - - /* re-export standard assert */ - if (process.env.NODE_NDEBUG) { - out = noop; - } else { - out = function (arg, msg) { - if (!arg) { - _toss(msg, 'true', arg); - } - }; - } - - /* standard checks */ - keys.forEach(function (k) { - if (ndebug) { - out[k] = noop; - return; - } - var type = types[k]; - out[k] = function (arg, msg) { - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* optional checks */ - keys.forEach(function (k) { - var name = 'optional' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* arrayOf checks */ - keys.forEach(function (k) { - var name = 'arrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* optionalArrayOf checks */ - keys.forEach(function (k) { - var name = 'optionalArrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* re-export built-in assertions */ - Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - out[k] = assert[k]; - return; - } - if (ndebug) { - out[k] = noop; - return; - } - out[k] = assert[k]; - }); - - /* export ourselves (for unit tests _only_) */ - out._setExports = _setExports; - - return out; - } - - module.exports = _setExports(process.env.NODE_NDEBUG); - - /***/ - }, - /* 17 */ - /***/ function (module, exports) { - // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 - var global = (module.exports = - typeof window != 'undefined' && window.Math == Math - ? window - : typeof self != 'undefined' && self.Math == Math - ? self - : // eslint-disable-next-line no-new-func - Function('return this')()); - if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - - /***/ - }, - /* 18 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - exports.sortAlpha = sortAlpha; - exports.sortOptionsByFlags = sortOptionsByFlags; - exports.entries = entries; - exports.removePrefix = removePrefix; - exports.removeSuffix = removeSuffix; - exports.addSuffix = addSuffix; - exports.hyphenate = hyphenate; - exports.camelCase = camelCase; - exports.compareSortedArrays = compareSortedArrays; - exports.sleep = sleep; - const _camelCase = __webpack_require__(227); - - function sortAlpha(a, b) { - // sort alphabetically in a deterministic way - const shortLen = Math.min(a.length, b.length); - for (let i = 0; i < shortLen; i++) { - const aChar = a.charCodeAt(i); - const bChar = b.charCodeAt(i); - if (aChar !== bChar) { - return aChar - bChar; - } - } - return a.length - b.length; - } - - function sortOptionsByFlags(a, b) { - const aOpt = a.flags.replace(/-/g, ''); - const bOpt = b.flags.replace(/-/g, ''); - return sortAlpha(aOpt, bOpt); - } - - function entries(obj) { - const entries = []; - if (obj) { - for (const key in obj) { - entries.push([key, obj[key]]); - } - } - return entries; - } - - function removePrefix(pattern, prefix) { - if (pattern.startsWith(prefix)) { - pattern = pattern.slice(prefix.length); - } - - return pattern; - } - - function removeSuffix(pattern, suffix) { - if (pattern.endsWith(suffix)) { - return pattern.slice(0, -suffix.length); - } - - return pattern; - } - - function addSuffix(pattern, suffix) { - if (!pattern.endsWith(suffix)) { - return pattern + suffix; - } - - return pattern; - } - - function hyphenate(str) { - return str.replace(/[A-Z]/g, (match) => { - return '-' + match.charAt(0).toLowerCase(); - }); - } - - function camelCase(str) { - if (/[A-Z]/.test(str)) { - return null; - } else { - return _camelCase(str); - } - } - - function compareSortedArrays(array1, array2) { - if (array1.length !== array2.length) { - return false; - } - for (let i = 0, len = array1.length; i < len; i++) { - if (array1[i] !== array2[i]) { - return false; - } - } - return true; - } - - function sleep(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); - } - - /***/ - }, - /* 19 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - exports.stringify = exports.parse = undefined; - - var _asyncToGenerator2; - - function _load_asyncToGenerator() { - return (_asyncToGenerator2 = _interopRequireDefault( - __webpack_require__(2) - )); - } - - var _parse; - - function _load_parse() { - return (_parse = __webpack_require__(106)); - } - - Object.defineProperty(exports, 'parse', { - enumerable: true, - get: function get() { - return _interopRequireDefault(_parse || _load_parse()).default; - }, - }); - - var _stringify; - - function _load_stringify() { - return (_stringify = __webpack_require__(200)); - } - - Object.defineProperty(exports, 'stringify', { - enumerable: true, - get: function get() { - return _interopRequireDefault(_stringify || _load_stringify()) - .default; - }, - }); - exports.implodeEntry = implodeEntry; - exports.explodeEntry = explodeEntry; - - var _misc; - - function _load_misc() { - return (_misc = __webpack_require__(18)); - } - - var _normalizePattern; - - function _load_normalizePattern() { - return (_normalizePattern = __webpack_require__(37)); - } - - var _parse2; - - function _load_parse2() { - return (_parse2 = _interopRequireDefault(__webpack_require__(106))); - } - - var _constants; - - function _load_constants() { - return (_constants = __webpack_require__(8)); - } - - var _fs; - - function _load_fs() { - return (_fs = _interopRequireWildcard(__webpack_require__(5))); - } - - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } else { - var newObj = {}; - if (obj != null) { - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) - newObj[key] = obj[key]; - } - } - newObj.default = obj; - return newObj; - } - } - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - const invariant = __webpack_require__(9); - - const path = __webpack_require__(0); - const ssri = __webpack_require__(65); - - function getName(pattern) { - return (0, - (_normalizePattern || _load_normalizePattern()).normalizePattern)( - pattern - ).name; - } - - function blankObjectUndefined(obj) { - return obj && Object.keys(obj).length ? obj : undefined; - } - - function keyForRemote(remote) { - return ( - remote.resolved || - (remote.reference && remote.hash - ? `${remote.reference}#${remote.hash}` - : null) - ); - } - - function serializeIntegrity(integrity) { - // We need this because `Integrity.toString()` does not use sorting to ensure a stable string output - // See https://git.io/vx2Hy - return integrity.toString().split(' ').sort().join(' '); - } - - function implodeEntry(pattern, obj) { - const inferredName = getName(pattern); - const integrity = obj.integrity - ? serializeIntegrity(obj.integrity) - : ''; - const imploded = { - name: inferredName === obj.name ? undefined : obj.name, - version: obj.version, - uid: obj.uid === obj.version ? undefined : obj.uid, - resolved: obj.resolved, - registry: obj.registry === 'npm' ? undefined : obj.registry, - dependencies: blankObjectUndefined(obj.dependencies), - optionalDependencies: blankObjectUndefined(obj.optionalDependencies), - permissions: blankObjectUndefined(obj.permissions), - prebuiltVariants: blankObjectUndefined(obj.prebuiltVariants), - }; - if (integrity) { - imploded.integrity = integrity; - } - return imploded; - } - - function explodeEntry(pattern, obj) { - obj.optionalDependencies = obj.optionalDependencies || {}; - obj.dependencies = obj.dependencies || {}; - obj.uid = obj.uid || obj.version; - obj.permissions = obj.permissions || {}; - obj.registry = obj.registry || 'npm'; - obj.name = obj.name || getName(pattern); - const integrity = obj.integrity; - if (integrity && integrity.isIntegrity) { - obj.integrity = ssri.parse(integrity); - } - return obj; - } - - class Lockfile { - constructor({ cache, source, parseResultType } = {}) { - this.source = source || ''; - this.cache = cache; - this.parseResultType = parseResultType; - } - - // source string if the `cache` was parsed - - // if true, we're parsing an old yarn file and need to update integrity fields - hasEntriesExistWithoutIntegrity() { - if (!this.cache) { - return false; - } - - for (const key in this.cache) { - // $FlowFixMe - `this.cache` is clearly defined at this point - if ( - !/^.*@(file:|http)/.test(key) && - this.cache[key] && - !this.cache[key].integrity - ) { - return true; - } - } - - return false; - } - - static fromDirectory(dir, reporter) { - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - // read the manifest in this directory - const lockfileLoc = path.join( - dir, - (_constants || _load_constants()).LOCKFILE_FILENAME - ); - - let lockfile; - let rawLockfile = ''; - let parseResult; - - if (yield (_fs || _load_fs()).exists(lockfileLoc)) { - rawLockfile = yield (_fs || _load_fs()).readFile(lockfileLoc); - parseResult = (0, (_parse2 || _load_parse2()).default)( - rawLockfile, - lockfileLoc - ); - - if (reporter) { - if (parseResult.type === 'merge') { - reporter.info(reporter.lang('lockfileMerged')); - } else if (parseResult.type === 'conflict') { - reporter.warn(reporter.lang('lockfileConflict')); - } - } - - lockfile = parseResult.object; - } else if (reporter) { - reporter.info(reporter.lang('noLockfileFound')); - } - - if (lockfile && lockfile.__metadata) { - const lockfilev2 = lockfile; - lockfile = {}; - } - - return new Lockfile({ - cache: lockfile, - source: rawLockfile, - parseResultType: parseResult && parseResult.type, - }); - } - )(); - } - - getLocked(pattern) { - const cache = this.cache; - if (!cache) { - return undefined; - } - - const shrunk = pattern in cache && cache[pattern]; - - if (typeof shrunk === 'string') { - return this.getLocked(shrunk); - } else if (shrunk) { - explodeEntry(pattern, shrunk); - return shrunk; - } - - return undefined; - } - - removePattern(pattern) { - const cache = this.cache; - if (!cache) { - return; - } - delete cache[pattern]; - } - - getLockfile(patterns) { - const lockfile = {}; - const seen = new Map(); - - // order by name so that lockfile manifest is assigned to the first dependency with this manifest - // the others that have the same remoteKey will just refer to the first - // ordering allows for consistency in lockfile when it is serialized - const sortedPatternsKeys = Object.keys(patterns).sort( - (_misc || _load_misc()).sortAlpha - ); - - for ( - var _iterator = sortedPatternsKeys, - _isArray = Array.isArray(_iterator), - _i = 0, - _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); - ; - - ) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - const pattern = _ref; - - const pkg = patterns[pattern]; - const remote = pkg._remote, - ref = pkg._reference; - - invariant(ref, 'Package is missing a reference'); - invariant(remote, 'Package is missing a remote'); - - const remoteKey = keyForRemote(remote); - const seenPattern = remoteKey && seen.get(remoteKey); - if (seenPattern) { - // no point in duplicating it - lockfile[pattern] = seenPattern; - - // if we're relying on our name being inferred and two of the patterns have - // different inferred names then we need to set it - if (!seenPattern.name && getName(pattern) !== pkg.name) { - seenPattern.name = pkg.name; - } - continue; - } - const obj = implodeEntry(pattern, { - name: pkg.name, - version: pkg.version, - uid: pkg._uid, - resolved: remote.resolved, - integrity: remote.integrity, - registry: remote.registry, - dependencies: pkg.dependencies, - peerDependencies: pkg.peerDependencies, - optionalDependencies: pkg.optionalDependencies, - permissions: ref.permissions, - prebuiltVariants: pkg.prebuiltVariants, - }); - - lockfile[pattern] = obj; - - if (remoteKey) { - seen.set(remoteKey, obj); - } - } - - return lockfile; - } - } - exports.default = Lockfile; - - /***/ - }, - /* 20 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - exports.__esModule = true; - - var _assign = __webpack_require__(559); - - var _assign2 = _interopRequireDefault(_assign); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - exports.default = - _assign2.default || - function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - /***/ - }, - /* 21 */ - /***/ function (module, exports, __webpack_require__) { - var store = __webpack_require__(133)('wks'); - var uid = __webpack_require__(137); - var Symbol = __webpack_require__(17).Symbol; - var USE_SYMBOL = typeof Symbol == 'function'; - - var $exports = (module.exports = function (name) { - return ( - store[name] || - (store[name] = - (USE_SYMBOL && Symbol[name]) || - (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)) - ); - }); - - $exports.store = store; - - /***/ - }, - /* 22 */ - /***/ function (module, exports) { - exports = module.exports = SemVer; - - // The debug function is excluded entirely from the minified version. - /* nomin */ var debug; - /* nomin */ if ( - typeof process === 'object' && - /* nomin */ process.env && - /* nomin */ process.env.NODE_DEBUG && - /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG) - ) - /* nomin */ debug = function () { - /* nomin */ var args = Array.prototype.slice.call(arguments, 0); - /* nomin */ args.unshift('SEMVER'); - /* nomin */ console.log.apply(console, args); - /* nomin */ - }; - /* nomin */ - /* nomin */ else debug = function () {}; - - // Note: this is the semver.org version of the spec that it implements - // Not necessarily the package version of this code. - exports.SEMVER_SPEC_VERSION = '2.0.0'; - - var MAX_LENGTH = 256; - var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; - - // Max safe segment length for coercion. - var MAX_SAFE_COMPONENT_LENGTH = 16; - - // The actual regexps go on exports.re - var re = (exports.re = []); - var src = (exports.src = []); - var R = 0; - - // The following Regular Expressions can be used for tokenizing, - // validating, and parsing SemVer version strings. - - // ## Numeric Identifier - // A single `0`, or a non-zero digit followed by zero or more digits. - - var NUMERICIDENTIFIER = R++; - src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; - var NUMERICIDENTIFIERLOOSE = R++; - src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; - - // ## Non-numeric Identifier - // Zero or more digits, followed by a letter or hyphen, and then zero or - // more letters, digits, or hyphens. - - var NONNUMERICIDENTIFIER = R++; - src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; - - // ## Main Version - // Three dot-separated numeric identifiers. - - var MAINVERSION = R++; - src[MAINVERSION] = - '(' + - src[NUMERICIDENTIFIER] + - ')\\.' + - '(' + - src[NUMERICIDENTIFIER] + - ')\\.' + - '(' + - src[NUMERICIDENTIFIER] + - ')'; - - var MAINVERSIONLOOSE = R++; - src[MAINVERSIONLOOSE] = - '(' + - src[NUMERICIDENTIFIERLOOSE] + - ')\\.' + - '(' + - src[NUMERICIDENTIFIERLOOSE] + - ')\\.' + - '(' + - src[NUMERICIDENTIFIERLOOSE] + - ')'; - - // ## Pre-release Version Identifier - // A numeric identifier, or a non-numeric identifier. - - var PRERELEASEIDENTIFIER = R++; - src[PRERELEASEIDENTIFIER] = - '(?:' + src[NUMERICIDENTIFIER] + '|' + src[NONNUMERICIDENTIFIER] + ')'; - - var PRERELEASEIDENTIFIERLOOSE = R++; - src[PRERELEASEIDENTIFIERLOOSE] = - '(?:' + - src[NUMERICIDENTIFIERLOOSE] + - '|' + - src[NONNUMERICIDENTIFIER] + - ')'; - - // ## Pre-release Version - // Hyphen, followed by one or more dot-separated pre-release version - // identifiers. - - var PRERELEASE = R++; - src[PRERELEASE] = - '(?:-(' + - src[PRERELEASEIDENTIFIER] + - '(?:\\.' + - src[PRERELEASEIDENTIFIER] + - ')*))'; - - var PRERELEASELOOSE = R++; - src[PRERELEASELOOSE] = - '(?:-?(' + - src[PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + - src[PRERELEASEIDENTIFIERLOOSE] + - ')*))'; - - // ## Build Metadata Identifier - // Any combination of digits, letters, or hyphens. - - var BUILDIDENTIFIER = R++; - src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; - - // ## Build Metadata - // Plus sign, followed by one or more period-separated build metadata - // identifiers. - - var BUILD = R++; - src[BUILD] = - '(?:\\+(' + - src[BUILDIDENTIFIER] + - '(?:\\.' + - src[BUILDIDENTIFIER] + - ')*))'; - - // ## Full Version String - // A main version, followed optionally by a pre-release version and - // build metadata. - - // Note that the only major, minor, patch, and pre-release sections of - // the version string are capturing groups. The build metadata is not a - // capturing group, because it should not ever be used in version - // comparison. - - var FULL = R++; - var FULLPLAIN = - 'v?' + src[MAINVERSION] + src[PRERELEASE] + '?' + src[BUILD] + '?'; - - src[FULL] = '^' + FULLPLAIN + '$'; - - // like full, but allows v1.2.3 and =1.2.3, which people do sometimes. - // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty - // common in the npm registry. - var LOOSEPLAIN = - '[v=\\s]*' + - src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + - '?' + - src[BUILD] + - '?'; - - var LOOSE = R++; - src[LOOSE] = '^' + LOOSEPLAIN + '$'; - - var GTLT = R++; - src[GTLT] = '((?:<|>)?=?)'; - - // Something like "2.*" or "1.2.x". - // Note that "x.x" is a valid xRange identifer, meaning "any version" - // Only the first item is strictly required. - var XRANGEIDENTIFIERLOOSE = R++; - src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; - var XRANGEIDENTIFIER = R++; - src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; - - var XRANGEPLAIN = R++; - src[XRANGEPLAIN] = - '[v=\\s]*(' + - src[XRANGEIDENTIFIER] + - ')' + - '(?:\\.(' + - src[XRANGEIDENTIFIER] + - ')' + - '(?:\\.(' + - src[XRANGEIDENTIFIER] + - ')' + - '(?:' + - src[PRERELEASE] + - ')?' + - src[BUILD] + - '?' + - ')?)?'; - - var XRANGEPLAINLOOSE = R++; - src[XRANGEPLAINLOOSE] = - '[v=\\s]*(' + - src[XRANGEIDENTIFIERLOOSE] + - ')' + - '(?:\\.(' + - src[XRANGEIDENTIFIERLOOSE] + - ')' + - '(?:\\.(' + - src[XRANGEIDENTIFIERLOOSE] + - ')' + - '(?:' + - src[PRERELEASELOOSE] + - ')?' + - src[BUILD] + - '?' + - ')?)?'; - - var XRANGE = R++; - src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; - var XRANGELOOSE = R++; - src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; - - // Coercion. - // Extract anything that could conceivably be a part of a valid semver - var COERCE = R++; - src[COERCE] = - '(?:^|[^\\d])' + - '(\\d{1,' + - MAX_SAFE_COMPONENT_LENGTH + - '})' + - '(?:\\.(\\d{1,' + - MAX_SAFE_COMPONENT_LENGTH + - '}))?' + - '(?:\\.(\\d{1,' + - MAX_SAFE_COMPONENT_LENGTH + - '}))?' + - '(?:$|[^\\d])'; - - // Tilde ranges. - // Meaning is "reasonably at or greater than" - var LONETILDE = R++; - src[LONETILDE] = '(?:~>?)'; - - var TILDETRIM = R++; - src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; - re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); - var tildeTrimReplace = '$1~'; - - var TILDE = R++; - src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; - var TILDELOOSE = R++; - src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; - - // Caret ranges. - // Meaning is "at least and backwards compatible with" - var LONECARET = R++; - src[LONECARET] = '(?:\\^)'; - - var CARETTRIM = R++; - src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; - re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); - var caretTrimReplace = '$1^'; - - var CARET = R++; - src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; - var CARETLOOSE = R++; - src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; - - // A simple gt/lt/eq thing, or just "" to indicate "any version" - var COMPARATORLOOSE = R++; - src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; - var COMPARATOR = R++; - src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; - - // An expression to strip any whitespace between the gtlt and the thing - // it modifies, so that `> 1.2.3` ==> `>1.2.3` - var COMPARATORTRIM = R++; - src[COMPARATORTRIM] = - '(\\s*)' + - src[GTLT] + - '\\s*(' + - LOOSEPLAIN + - '|' + - src[XRANGEPLAIN] + - ')'; - - // this one has to use the /g flag - re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); - var comparatorTrimReplace = '$1$2$3'; - - // Something like `1.2.3 - 1.2.4` - // Note that these all use the loose form, because they'll be - // checked against either the strict or loose comparator form - // later. - var HYPHENRANGE = R++; - src[HYPHENRANGE] = - '^\\s*(' + - src[XRANGEPLAIN] + - ')' + - '\\s+-\\s+' + - '(' + - src[XRANGEPLAIN] + - ')' + - '\\s*$'; - - var HYPHENRANGELOOSE = R++; - src[HYPHENRANGELOOSE] = - '^\\s*(' + - src[XRANGEPLAINLOOSE] + - ')' + - '\\s+-\\s+' + - '(' + - src[XRANGEPLAINLOOSE] + - ')' + - '\\s*$'; - - // Star ranges basically just allow anything at all. - var STAR = R++; - src[STAR] = '(<|>)?=?\\s*\\*'; - - // Compile to actual regexp objects. - // All are flag-free, unless they were created above with a flag. - for (var i = 0; i < R; i++) { - debug(i, src[i]); - if (!re[i]) re[i] = new RegExp(src[i]); - } - - exports.parse = parse; - function parse(version, loose) { - if (version instanceof SemVer) return version; - - if (typeof version !== 'string') return null; - - if (version.length > MAX_LENGTH) return null; - - var r = loose ? re[LOOSE] : re[FULL]; - if (!r.test(version)) return null; - - try { - return new SemVer(version, loose); - } catch (er) { - return null; - } - } - - exports.valid = valid; - function valid(version, loose) { - var v = parse(version, loose); - return v ? v.version : null; - } - - exports.clean = clean; - function clean(version, loose) { - var s = parse(version.trim().replace(/^[=v]+/, ''), loose); - return s ? s.version : null; - } - - exports.SemVer = SemVer; - - function SemVer(version, loose) { - if (version instanceof SemVer) { - if (version.loose === loose) return version; - else version = version.version; - } else if (typeof version !== 'string') { - throw new TypeError('Invalid Version: ' + version); - } - - if (version.length > MAX_LENGTH) - throw new TypeError( - 'version is longer than ' + MAX_LENGTH + ' characters' - ); - - if (!(this instanceof SemVer)) return new SemVer(version, loose); - - debug('SemVer', version, loose); - this.loose = loose; - var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); - - if (!m) throw new TypeError('Invalid Version: ' + version); - - this.raw = version; - - // these are actually numbers - this.major = +m[1]; - this.minor = +m[2]; - this.patch = +m[3]; - - if (this.major > MAX_SAFE_INTEGER || this.major < 0) - throw new TypeError('Invalid major version'); - - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) - throw new TypeError('Invalid minor version'); - - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) - throw new TypeError('Invalid patch version'); - - // numberify any prerelease numeric ids - if (!m[4]) this.prerelease = []; - else - this.prerelease = m[4].split('.').map(function (id) { - if (/^[0-9]+$/.test(id)) { - var num = +id; - if (num >= 0 && num < MAX_SAFE_INTEGER) return num; - } - return id; - }); - - this.build = m[5] ? m[5].split('.') : []; - this.format(); - } - - SemVer.prototype.format = function () { - this.version = this.major + '.' + this.minor + '.' + this.patch; - if (this.prerelease.length) - this.version += '-' + this.prerelease.join('.'); - return this.version; - }; - - SemVer.prototype.toString = function () { - return this.version; - }; - - SemVer.prototype.compare = function (other) { - debug('SemVer.compare', this.version, this.loose, other); - if (!(other instanceof SemVer)) other = new SemVer(other, this.loose); - - return this.compareMain(other) || this.comparePre(other); - }; - - SemVer.prototype.compareMain = function (other) { - if (!(other instanceof SemVer)) other = new SemVer(other, this.loose); - - return ( - compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) - ); - }; - - SemVer.prototype.comparePre = function (other) { - if (!(other instanceof SemVer)) other = new SemVer(other, this.loose); - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) return -1; - else if (!this.prerelease.length && other.prerelease.length) return 1; - else if (!this.prerelease.length && !other.prerelease.length) return 0; - - var i = 0; - do { - var a = this.prerelease[i]; - var b = other.prerelease[i]; - debug('prerelease compare', i, a, b); - if (a === undefined && b === undefined) return 0; - else if (b === undefined) return 1; - else if (a === undefined) return -1; - else if (a === b) continue; - else return compareIdentifiers(a, b); - } while (++i); - }; - - // preminor will bump the version up to the next minor release, and immediately - // down to pre-release. premajor and prepatch work the same way. - SemVer.prototype.inc = function (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0; - this.patch = 0; - this.minor = 0; - this.major++; - this.inc('pre', identifier); - break; - case 'preminor': - this.prerelease.length = 0; - this.patch = 0; - this.minor++; - this.inc('pre', identifier); - break; - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0; - this.inc('patch', identifier); - this.inc('pre', identifier); - break; - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) this.inc('patch', identifier); - this.inc('pre', identifier); - break; - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) - this.major++; - this.minor = 0; - this.patch = 0; - this.prerelease = []; - break; - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) this.minor++; - this.patch = 0; - this.prerelease = []; - break; - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) this.patch++; - this.prerelease = []; - break; - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) this.prerelease = [0]; - else { - var i = this.prerelease.length; - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++; - i = -2; - } - } - if (i === -1) - // didn't increment anything - this.prerelease.push(0); - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) - this.prerelease = [identifier, 0]; - } else this.prerelease = [identifier, 0]; - } - break; - - default: - throw new Error('invalid increment argument: ' + release); - } - this.format(); - this.raw = this.version; - return this; - }; - - exports.inc = inc; - function inc(version, release, loose, identifier) { - if (typeof loose === 'string') { - identifier = loose; - loose = undefined; - } - - try { - return new SemVer(version, loose).inc(release, identifier).version; - } catch (er) { - return null; - } - } - - exports.diff = diff; - function diff(version1, version2) { - if (eq(version1, version2)) { - return null; - } else { - var v1 = parse(version1); - var v2 = parse(version2); - if (v1.prerelease.length || v2.prerelease.length) { - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return 'pre' + key; - } - } - } - return 'prerelease'; - } - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return key; - } - } - } - } - } - - exports.compareIdentifiers = compareIdentifiers; - - var numeric = /^[0-9]+$/; - function compareIdentifiers(a, b) { - var anum = numeric.test(a); - var bnum = numeric.test(b); - - if (anum && bnum) { - a = +a; - b = +b; - } - - return anum && !bnum - ? -1 - : bnum && !anum - ? 1 - : a < b - ? -1 - : a > b - ? 1 - : 0; - } - - exports.rcompareIdentifiers = rcompareIdentifiers; - function rcompareIdentifiers(a, b) { - return compareIdentifiers(b, a); - } - - exports.major = major; - function major(a, loose) { - return new SemVer(a, loose).major; - } - - exports.minor = minor; - function minor(a, loose) { - return new SemVer(a, loose).minor; - } - - exports.patch = patch; - function patch(a, loose) { - return new SemVer(a, loose).patch; - } - - exports.compare = compare; - function compare(a, b, loose) { - return new SemVer(a, loose).compare(new SemVer(b, loose)); - } - - exports.compareLoose = compareLoose; - function compareLoose(a, b) { - return compare(a, b, true); - } - - exports.rcompare = rcompare; - function rcompare(a, b, loose) { - return compare(b, a, loose); - } - - exports.sort = sort; - function sort(list, loose) { - return list.sort(function (a, b) { - return exports.compare(a, b, loose); - }); - } - - exports.rsort = rsort; - function rsort(list, loose) { - return list.sort(function (a, b) { - return exports.rcompare(a, b, loose); - }); - } - - exports.gt = gt; - function gt(a, b, loose) { - return compare(a, b, loose) > 0; - } - - exports.lt = lt; - function lt(a, b, loose) { - return compare(a, b, loose) < 0; - } - - exports.eq = eq; - function eq(a, b, loose) { - return compare(a, b, loose) === 0; - } - - exports.neq = neq; - function neq(a, b, loose) { - return compare(a, b, loose) !== 0; - } - - exports.gte = gte; - function gte(a, b, loose) { - return compare(a, b, loose) >= 0; - } - - exports.lte = lte; - function lte(a, b, loose) { - return compare(a, b, loose) <= 0; - } - - exports.cmp = cmp; - function cmp(a, op, b, loose) { - var ret; - switch (op) { - case '===': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; - ret = a === b; - break; - case '!==': - if (typeof a === 'object') a = a.version; - if (typeof b === 'object') b = b.version; - ret = a !== b; - break; - case '': - case '=': - case '==': - ret = eq(a, b, loose); - break; - case '!=': - ret = neq(a, b, loose); - break; - case '>': - ret = gt(a, b, loose); - break; - case '>=': - ret = gte(a, b, loose); - break; - case '<': - ret = lt(a, b, loose); - break; - case '<=': - ret = lte(a, b, loose); - break; - default: - throw new TypeError('Invalid operator: ' + op); - } - return ret; - } - - exports.Comparator = Comparator; - function Comparator(comp, loose) { - if (comp instanceof Comparator) { - if (comp.loose === loose) return comp; - else comp = comp.value; - } - - if (!(this instanceof Comparator)) return new Comparator(comp, loose); - - debug('comparator', comp, loose); - this.loose = loose; - this.parse(comp); - - if (this.semver === ANY) this.value = ''; - else this.value = this.operator + this.semver.version; - - debug('comp', this); - } - - var ANY = {}; - Comparator.prototype.parse = function (comp) { - var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - var m = comp.match(r); - - if (!m) throw new TypeError('Invalid comparator: ' + comp); - - this.operator = m[1]; - if (this.operator === '=') this.operator = ''; - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) this.semver = ANY; - else this.semver = new SemVer(m[2], this.loose); - }; - - Comparator.prototype.toString = function () { - return this.value; - }; - - Comparator.prototype.test = function (version) { - debug('Comparator.test', version, this.loose); - - if (this.semver === ANY) return true; - - if (typeof version === 'string') - version = new SemVer(version, this.loose); - - return cmp(version, this.operator, this.semver, this.loose); - }; - - Comparator.prototype.intersects = function (comp, loose) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required'); - } - - var rangeTmp; - - if (this.operator === '') { - rangeTmp = new Range(comp.value, loose); - return satisfies(this.value, rangeTmp, loose); - } else if (comp.operator === '') { - rangeTmp = new Range(this.value, loose); - return satisfies(comp.semver, rangeTmp, loose); - } - - var sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>'); - var sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<'); - var sameSemVer = this.semver.version === comp.semver.version; - var differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<='); - var oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, loose) && - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<'); - var oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, loose) && - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>'); - - return ( - sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan - ); - }; - - exports.Range = Range; - function Range(range, loose) { - if (range instanceof Range) { - if (range.loose === loose) { - return range; - } else { - return new Range(range.raw, loose); - } - } - - if (range instanceof Comparator) { - return new Range(range.value, loose); - } - - if (!(this instanceof Range)) return new Range(range, loose); - - this.loose = loose; - - // First, split based on boolean or || - this.raw = range; - this.set = range - .split(/\s*\|\|\s*/) - .map(function (range) { - return this.parseRange(range.trim()); - }, this) - .filter(function (c) { - // throw out any that are not relevant for whatever reason - return c.length; - }); - - if (!this.set.length) { - throw new TypeError('Invalid SemVer Range: ' + range); - } - - this.format(); - } - - Range.prototype.format = function () { - this.range = this.set - .map(function (comps) { - return comps.join(' ').trim(); - }) - .join('||') - .trim(); - return this.range; - }; - - Range.prototype.toString = function () { - return this.range; - }; - - Range.prototype.parseRange = function (range) { - var loose = this.loose; - range = range.trim(); - debug('range', range, loose); - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; - range = range.replace(hr, hyphenReplace); - debug('hyphen replace', range); - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); - debug('comparator trim', range, re[COMPARATORTRIM]); - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[TILDETRIM], tildeTrimReplace); - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[CARETTRIM], caretTrimReplace); - - // normalize spaces - range = range.split(/\s+/).join(' '); - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; - var set = range - .split(' ') - .map(function (comp) { - return parseComparator(comp, loose); - }) - .join(' ') - .split(/\s+/); - if (this.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter(function (comp) { - return !!comp.match(compRe); - }); - } - set = set.map(function (comp) { - return new Comparator(comp, loose); - }); - - return set; - }; - - Range.prototype.intersects = function (range, loose) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required'); - } - - return this.set.some(function (thisComparators) { - return thisComparators.every(function (thisComparator) { - return range.set.some(function (rangeComparators) { - return rangeComparators.every(function (rangeComparator) { - return thisComparator.intersects(rangeComparator, loose); - }); - }); - }); - }); - }; - - // Mostly just for testing and legacy API reasons - exports.toComparators = toComparators; - function toComparators(range, loose) { - return new Range(range, loose).set.map(function (comp) { - return comp - .map(function (c) { - return c.value; - }) - .join(' ') - .trim() - .split(' '); - }); - } - - // comprised of xranges, tildes, stars, and gtlt's at this point. - // already replaced the hyphen ranges - // turn into a set of JUST comparators. - function parseComparator(comp, loose) { - debug('comp', comp); - comp = replaceCarets(comp, loose); - debug('caret', comp); - comp = replaceTildes(comp, loose); - debug('tildes', comp); - comp = replaceXRanges(comp, loose); - debug('xrange', comp); - comp = replaceStars(comp, loose); - debug('stars', comp); - return comp; - } - - function isX(id) { - return !id || id.toLowerCase() === 'x' || id === '*'; - } - - // ~, ~> --> * (any, kinda silly) - // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 - // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 - // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 - // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 - // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 - function replaceTildes(comp, loose) { - return comp - .trim() - .split(/\s+/) - .map(function (comp) { - return replaceTilde(comp, loose); - }) - .join(' '); - } - - function replaceTilde(comp, loose) { - var r = loose ? re[TILDELOOSE] : re[TILDE]; - return comp.replace(r, function (_, M, m, p, pr) { - debug('tilde', comp, _, M, m, p, pr); - var ret; - - if (isX(M)) ret = ''; - else if (isX(m)) ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - else if (isX(p)) - // ~1.2 == >=1.2.0 <1.3.0 - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - else if (pr) { - debug('replaceTilde pr', pr); - if (pr.charAt(0) !== '-') pr = '-' + pr; - ret = - '>=' + - M + - '.' + - m + - '.' + - p + - pr + - ' <' + - M + - '.' + - (+m + 1) + - '.0'; - } - // ~1.2.3 == >=1.2.3 <1.3.0 - else - ret = - '>=' + M + '.' + m + '.' + p + ' <' + M + '.' + (+m + 1) + '.0'; - - debug('tilde return', ret); - return ret; - }); - } - - // ^ --> * (any, kinda silly) - // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 - // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 - // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 - // ^1.2.3 --> >=1.2.3 <2.0.0 - // ^1.2.0 --> >=1.2.0 <2.0.0 - function replaceCarets(comp, loose) { - return comp - .trim() - .split(/\s+/) - .map(function (comp) { - return replaceCaret(comp, loose); - }) - .join(' '); - } - - function replaceCaret(comp, loose) { - debug('caret', comp, loose); - var r = loose ? re[CARETLOOSE] : re[CARET]; - return comp.replace(r, function (_, M, m, p, pr) { - debug('caret', comp, _, M, m, p, pr); - var ret; - - if (isX(M)) ret = ''; - else if (isX(m)) ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - else if (isX(p)) { - if (M === '0') - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - else ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; - } else if (pr) { - debug('replaceCaret pr', pr); - if (pr.charAt(0) !== '-') pr = '-' + pr; - if (M === '0') { - if (m === '0') - ret = - '>=' + - M + - '.' + - m + - '.' + - p + - pr + - ' <' + - M + - '.' + - m + - '.' + - (+p + 1); - else - ret = - '>=' + - M + - '.' + - m + - '.' + - p + - pr + - ' <' + - M + - '.' + - (+m + 1) + - '.0'; - } else - ret = - '>=' + M + '.' + m + '.' + p + pr + ' <' + (+M + 1) + '.0.0'; - } else { - debug('no pr'); - if (M === '0') { - if (m === '0') - ret = - '>=' + - M + - '.' + - m + - '.' + - p + - ' <' + - M + - '.' + - m + - '.' + - (+p + 1); - else - ret = - '>=' + - M + - '.' + - m + - '.' + - p + - ' <' + - M + - '.' + - (+m + 1) + - '.0'; - } else - ret = '>=' + M + '.' + m + '.' + p + ' <' + (+M + 1) + '.0.0'; - } - - debug('caret return', ret); - return ret; - }); - } - - function replaceXRanges(comp, loose) { - debug('replaceXRanges', comp, loose); - return comp - .split(/\s+/) - .map(function (comp) { - return replaceXRange(comp, loose); - }) - .join(' '); - } - - function replaceXRange(comp, loose) { - comp = comp.trim(); - var r = loose ? re[XRANGELOOSE] : re[XRANGE]; - return comp.replace(r, function (ret, gtlt, M, m, p, pr) { - debug('xRange', comp, ret, gtlt, M, m, p, pr); - var xM = isX(M); - var xm = xM || isX(m); - var xp = xm || isX(p); - var anyX = xp; - - if (gtlt === '=' && anyX) gtlt = ''; - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0'; - } else { - // nothing is forbidden - ret = '*'; - } - } else if (gtlt && anyX) { - // replace X with 0 - if (xm) m = 0; - if (xp) p = 0; - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = '>='; - if (xm) { - M = +M + 1; - m = 0; - p = 0; - } else if (xp) { - m = +m + 1; - p = 0; - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<'; - if (xm) M = +M + 1; - else m = +m + 1; - } - - ret = gtlt + M + '.' + m + '.' + p; - } else if (xm) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; - } else if (xp) { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; - } - - debug('xRange return', ret); - - return ret; - }); - } - - // Because * is AND-ed with everything else in the comparator, - // and '' means "any version", just remove the *s entirely. - function replaceStars(comp, loose) { - debug('replaceStars', comp, loose); - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[STAR], ''); - } - - // This function is passed to string.replace(re[HYPHENRANGE]) - // M, m, patch, prerelease, build - // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 - // 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do - // 1.2 - 3.4 => >=1.2.0 <3.5.0 - function hyphenReplace( - $0, - from, - fM, - fm, - fp, - fpr, - fb, - to, - tM, - tm, - tp, - tpr, - tb - ) { - if (isX(fM)) from = ''; - else if (isX(fm)) from = '>=' + fM + '.0.0'; - else if (isX(fp)) from = '>=' + fM + '.' + fm + '.0'; - else from = '>=' + from; - - if (isX(tM)) to = ''; - else if (isX(tm)) to = '<' + (+tM + 1) + '.0.0'; - else if (isX(tp)) to = '<' + tM + '.' + (+tm + 1) + '.0'; - else if (tpr) to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; - else to = '<=' + to; - - return (from + ' ' + to).trim(); - } - - // if ANY of the sets match ALL of its comparators, then pass - Range.prototype.test = function (version) { - if (!version) return false; - - if (typeof version === 'string') - version = new SemVer(version, this.loose); - - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version)) return true; - } - return false; - }; - - function testSet(set, version) { - for (var i = 0; i < set.length; i++) { - if (!set[i].test(version)) return false; - } - - if (version.prerelease.length) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (var i = 0; i < set.length; i++) { - debug(set[i].semver); - if (set[i].semver === ANY) continue; - - if (set[i].semver.prerelease.length > 0) { - var allowed = set[i].semver; - if ( - allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch - ) - return true; - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false; - } - - return true; - } - - exports.satisfies = satisfies; - function satisfies(version, range, loose) { - try { - range = new Range(range, loose); - } catch (er) { - return false; - } - return range.test(version); - } - - exports.maxSatisfying = maxSatisfying; - function maxSatisfying(versions, range, loose) { - var max = null; - var maxSV = null; - try { - var rangeObj = new Range(range, loose); - } catch (er) { - return null; - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, loose) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v; - maxSV = new SemVer(max, loose); - } - } - }); - return max; - } - - exports.minSatisfying = minSatisfying; - function minSatisfying(versions, range, loose) { - var min = null; - var minSV = null; - try { - var rangeObj = new Range(range, loose); - } catch (er) { - return null; - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, loose) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v; - minSV = new SemVer(min, loose); - } - } - }); - return min; - } - - exports.validRange = validRange; - function validRange(range, loose) { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, loose).range || '*'; - } catch (er) { - return null; - } - } - - // Determine if version is less than all the versions possible in the range - exports.ltr = ltr; - function ltr(version, range, loose) { - return outside(version, range, '<', loose); - } - - // Determine if version is greater than all the versions possible in the range. - exports.gtr = gtr; - function gtr(version, range, loose) { - return outside(version, range, '>', loose); - } - - exports.outside = outside; - function outside(version, range, hilo, loose) { - version = new SemVer(version, loose); - range = new Range(range, loose); - - var gtfn, ltefn, ltfn, comp, ecomp; - switch (hilo) { - case '>': - gtfn = gt; - ltefn = lte; - ltfn = lt; - comp = '>'; - ecomp = '>='; - break; - case '<': - gtfn = lt; - ltefn = gte; - ltfn = gt; - comp = '<'; - ecomp = '<='; - break; - default: - throw new TypeError('Must provide a hilo val of "<" or ">"'); - } - - // If it satisifes the range it is not outside - if (satisfies(version, range, loose)) { - return false; - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i]; - - var high = null; - var low = null; - - comparators.forEach(function (comparator) { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0'); - } - high = high || comparator; - low = low || comparator; - if (gtfn(comparator.semver, high.semver, loose)) { - high = comparator; - } else if (ltfn(comparator.semver, low.semver, loose)) { - low = comparator; - } - }); - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false; - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ( - (!low.operator || low.operator === comp) && - ltefn(version, low.semver) - ) { - return false; - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false; - } - } - return true; - } - - exports.prerelease = prerelease; - function prerelease(version, loose) { - var parsed = parse(version, loose); - return parsed && parsed.prerelease.length ? parsed.prerelease : null; - } - - exports.intersects = intersects; - function intersects(r1, r2, loose) { - r1 = new Range(r1, loose); - r2 = new Range(r2, loose); - return r1.intersects(r2); - } - - exports.coerce = coerce; - function coerce(version) { - if (version instanceof SemVer) return version; - - if (typeof version !== 'string') return null; - - var match = version.match(re[COERCE]); - - if (match == null) return null; - - return parse( - (match[1] || '0') + '.' + (match[2] || '0') + '.' + (match[3] || '0') - ); - } - - /***/ - }, - /* 23 */ - /***/ function (module, exports) { - module.exports = require('stream'); - - /***/ - }, - /* 24 */ - /***/ function (module, exports) { - module.exports = require('url'); - - /***/ - }, - /* 25 */ - /***/ function (module, __webpack_exports__, __webpack_require__) { - 'use strict'; - /* harmony export (binding) */ __webpack_require__.d( - __webpack_exports__, - 'a', - function () { - return Subscription; - } - ); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_isArray__ = - __webpack_require__(41); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_isObject__ = - __webpack_require__(444); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_isFunction__ = - __webpack_require__(154); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_tryCatch__ = - __webpack_require__(57); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_errorObject__ = - __webpack_require__(48); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_UnsubscriptionError__ = - __webpack_require__(441); - /** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_tryCatch,_util_errorObject,_util_UnsubscriptionError PURE_IMPORTS_END */ - - var Subscription = /*@__PURE__*/ (function () { - function Subscription(unsubscribe) { - this.closed = false; - this._parent = null; - this._parents = null; - this._subscriptions = null; - if (unsubscribe) { - this._unsubscribe = unsubscribe; - } - } - Subscription.prototype.unsubscribe = function () { - var hasErrors = false; - var errors; - if (this.closed) { - return; - } - var _a = this, - _parent = _a._parent, - _parents = _a._parents, - _unsubscribe = _a._unsubscribe, - _subscriptions = _a._subscriptions; - this.closed = true; - this._parent = null; - this._parents = null; - this._subscriptions = null; - var index = -1; - var len = _parents ? _parents.length : 0; - while (_parent) { - _parent.remove(this); - _parent = (++index < len && _parents[index]) || null; - } - if ( - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_2__util_isFunction__[ - 'a' /* isFunction */ - ] - )(_unsubscribe) - ) { - var trial = __webpack_require__ - .i( - __WEBPACK_IMPORTED_MODULE_3__util_tryCatch__['a' /* tryCatch */] - )(_unsubscribe) - .call(this); - if ( - trial === - __WEBPACK_IMPORTED_MODULE_4__util_errorObject__[ - 'a' /* errorObject */ - ] - ) { - hasErrors = true; - errors = - errors || - (__WEBPACK_IMPORTED_MODULE_4__util_errorObject__[ - 'a' /* errorObject */ - ].e instanceof - __WEBPACK_IMPORTED_MODULE_5__util_UnsubscriptionError__[ - 'a' /* UnsubscriptionError */ - ] - ? flattenUnsubscriptionErrors( - __WEBPACK_IMPORTED_MODULE_4__util_errorObject__[ - 'a' /* errorObject */ - ].e.errors - ) - : [ - __WEBPACK_IMPORTED_MODULE_4__util_errorObject__[ - 'a' /* errorObject */ - ].e, - ]); - } - } - if ( - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_0__util_isArray__['a' /* isArray */] - )(_subscriptions) - ) { - index = -1; - len = _subscriptions.length; - while (++index < len) { - var sub = _subscriptions[index]; - if ( - __webpack_require__.i( - __WEBPACK_IMPORTED_MODULE_1__util_isObject__[ - 'a' /* isObject */ - ] - )(sub) - ) { - var trial = __webpack_require__ - .i( - __WEBPACK_IMPORTED_MODULE_3__util_tryCatch__[ - 'a' /* tryCatch */ - ] - )(sub.unsubscribe) - .call(sub); - if ( - trial === - __WEBPACK_IMPORTED_MODULE_4__util_errorObject__[ - 'a' /* errorObject */ - ] - ) { - hasErrors = true; - errors = errors || []; - var err = - __WEBPACK_IMPORTED_MODULE_4__util_errorObject__[ - 'a' /* errorObject */ - ].e; - if ( - err instanceof - __WEBPACK_IMPORTED_MODULE_5__util_UnsubscriptionError__[ - 'a' /* UnsubscriptionError */ - ] - ) { - errors = errors.concat( - flattenUnsubscriptionErrors(err.errors) - ); - } else { - errors.push(err); - } - } - } - } - } - if (hasErrors) { - throw new __WEBPACK_IMPORTED_MODULE_5__util_UnsubscriptionError__[ - 'a' /* UnsubscriptionError */ - ](errors); - } - }; - Subscription.prototype.add = function (teardown) { - if (!teardown || teardown === Subscription.EMPTY) { - return Subscription.EMPTY; - } - if (teardown === this) { - return this; - } - var subscription = teardown; - switch (typeof teardown) { - case 'function': - subscription = new Subscription(teardown); - case 'object': - if ( - subscription.closed || - typeof subscription.unsubscribe !== 'function' - ) { - return subscription; - } else if (this.closed) { - subscription.unsubscribe(); - return subscription; - } else if (typeof subscription._addParent !== 'function') { - var tmp = subscription; - subscription = new Subscription(); - subscription._subscriptions = [tmp]; - } - break; - default: - throw new Error( - 'unrecognized teardown ' + teardown + ' added to Subscription.' - ); - } - var subscriptions = this._subscriptions || (this._subscriptions = []); - subscriptions.push(subscription); - subscription._addParent(this); - return subscription; - }; - Subscription.prototype.remove = function (subscription) { - var subscriptions = this._subscriptions; - if (subscriptions) { - var subscriptionIndex = subscriptions.indexOf(subscription); - if (subscriptionIndex !== -1) { - subscriptions.splice(subscriptionIndex, 1); - } - } - }; - Subscription.prototype._addParent = function (parent) { - var _a = this, - _parent = _a._parent, - _parents = _a._parents; - if (!_parent || _parent === parent) { - this._parent = parent; - } else if (!_parents) { - this._parents = [parent]; - } else if (_parents.indexOf(parent) === -1) { - _parents.push(parent); - } - }; - Subscription.EMPTY = (function (empty) { - empty.closed = true; - return empty; - })(new Subscription()); - return Subscription; - })(); - - function flattenUnsubscriptionErrors(errors) { - return errors.reduce(function (errs, err) { - return errs.concat( - err instanceof - __WEBPACK_IMPORTED_MODULE_5__util_UnsubscriptionError__[ - 'a' /* UnsubscriptionError */ - ] - ? err.errors - : err - ); - }, []); - } - //# sourceMappingURL=Subscription.js.map - - /***/ - }, - /* 26 */ - /***/ function (module, exports, __webpack_require__) { - // Copyright 2015 Joyent, Inc. - - module.exports = { - bufferSplit: bufferSplit, - addRSAMissing: addRSAMissing, - calculateDSAPublic: calculateDSAPublic, - calculateED25519Public: calculateED25519Public, - calculateX25519Public: calculateX25519Public, - mpNormalize: mpNormalize, - mpDenormalize: mpDenormalize, - ecNormalize: ecNormalize, - countZeros: countZeros, - assertCompatible: assertCompatible, - isCompatible: isCompatible, - opensslKeyDeriv: opensslKeyDeriv, - opensshCipherInfo: opensshCipherInfo, - publicFromPrivateECDSA: publicFromPrivateECDSA, - zeroPadToLength: zeroPadToLength, - writeBitString: writeBitString, - readBitString: readBitString, - }; - - var assert = __webpack_require__(16); - var Buffer = __webpack_require__(15).Buffer; - var PrivateKey = __webpack_require__(33); - var Key = __webpack_require__(27); - var crypto = __webpack_require__(11); - var algs = __webpack_require__(32); - var asn1 = __webpack_require__(66); - - var ec, jsbn; - var nacl; - - var MAX_CLASS_DEPTH = 3; - - function isCompatible(obj, klass, needVer) { - if (obj === null || typeof obj !== 'object') return false; - if (needVer === undefined) needVer = klass.prototype._sshpkApiVersion; - if ( - obj instanceof klass && - klass.prototype._sshpkApiVersion[0] == needVer[0] - ) - return true; - var proto = Object.getPrototypeOf(obj); - var depth = 0; - while (proto.constructor.name !== klass.name) { - proto = Object.getPrototypeOf(proto); - if (!proto || ++depth > MAX_CLASS_DEPTH) return false; - } - if (proto.constructor.name !== klass.name) return false; - var ver = proto._sshpkApiVersion; - if (ver === undefined) ver = klass._oldVersionDetect(obj); - if (ver[0] != needVer[0] || ver[1] < needVer[1]) return false; - return true; - } - - function assertCompatible(obj, klass, needVer, name) { - if (name === undefined) name = 'object'; - assert.ok(obj, name + ' must not be null'); - assert.object(obj, name + ' must be an object'); - if (needVer === undefined) needVer = klass.prototype._sshpkApiVersion; - if ( - obj instanceof klass && - klass.prototype._sshpkApiVersion[0] == needVer[0] - ) - return; - var proto = Object.getPrototypeOf(obj); - var depth = 0; - while (proto.constructor.name !== klass.name) { - proto = Object.getPrototypeOf(proto); - assert.ok( - proto && ++depth <= MAX_CLASS_DEPTH, - name + ' must be a ' + klass.name + ' instance' - ); - } - assert.strictEqual( - proto.constructor.name, - klass.name, - name + ' must be a ' + klass.name + ' instance' - ); - var ver = proto._sshpkApiVersion; - if (ver === undefined) ver = klass._oldVersionDetect(obj); - assert.ok( - ver[0] == needVer[0] && ver[1] >= needVer[1], - name + - ' must be compatible with ' + - klass.name + - ' klass ' + - 'version ' + - needVer[0] + - '.' + - needVer[1] - ); - } - - var CIPHER_LEN = { - 'des-ede3-cbc': { key: 7, iv: 8 }, - 'aes-128-cbc': { key: 16, iv: 16 }, - }; - var PKCS5_SALT_LEN = 8; - - function opensslKeyDeriv(cipher, salt, passphrase, count) { - assert.buffer(salt, 'salt'); - assert.buffer(passphrase, 'passphrase'); - assert.number(count, 'iteration count'); - - var clen = CIPHER_LEN[cipher]; - assert.object(clen, 'supported cipher'); - - salt = salt.slice(0, PKCS5_SALT_LEN); - - var D, D_prev, bufs; - var material = Buffer.alloc(0); - while (material.length < clen.key + clen.iv) { - bufs = []; - if (D_prev) bufs.push(D_prev); - bufs.push(passphrase); - bufs.push(salt); - D = Buffer.concat(bufs); - for (var j = 0; j < count; ++j) - D = crypto.createHash('md5').update(D).digest(); - material = Buffer.concat([material, D]); - D_prev = D; - } - - return { - key: material.slice(0, clen.key), - iv: material.slice(clen.key, clen.key + clen.iv), - }; - } - - /* Count leading zero bits on a buffer */ - function countZeros(buf) { - var o = 0, - obit = 8; - while (o < buf.length) { - var mask = 1 << obit; - if ((buf[o] & mask) === mask) break; - obit--; - if (obit < 0) { - o++; - obit = 8; - } - } - return o * 8 + (8 - obit) - 1; - } - - function bufferSplit(buf, chr) { - assert.buffer(buf); - assert.string(chr); - - var parts = []; - var lastPart = 0; - var matches = 0; - for (var i = 0; i < buf.length; ++i) { - if (buf[i] === chr.charCodeAt(matches)) ++matches; - else if (buf[i] === chr.charCodeAt(0)) matches = 1; - else matches = 0; - - if (matches >= chr.length) { - var newPart = i + 1; - parts.push(buf.slice(lastPart, newPart - matches)); - lastPart = newPart; - matches = 0; - } - } - if (lastPart <= buf.length) parts.push(buf.slice(lastPart, buf.length)); - - return parts; - } - - function ecNormalize(buf, addZero) { - assert.buffer(buf); - if (buf[0] === 0x00 && buf[1] === 0x04) { - if (addZero) return buf; - return buf.slice(1); - } else if (buf[0] === 0x04) { - if (!addZero) return buf; - } else { - while (buf[0] === 0x00) buf = buf.slice(1); - if (buf[0] === 0x02 || buf[0] === 0x03) - throw new Error( - 'Compressed elliptic curve points ' + 'are not supported' - ); - if (buf[0] !== 0x04) - throw new Error('Not a valid elliptic curve point'); - if (!addZero) return buf; - } - var b = Buffer.alloc(buf.length + 1); - b[0] = 0x0; - buf.copy(b, 1); - return b; - } - - function readBitString(der, tag) { - if (tag === undefined) tag = asn1.Ber.BitString; - var buf = der.readString(tag, true); - assert.strictEqual( - buf[0], - 0x00, - 'bit strings with unused bits are ' + - 'not supported (0x' + - buf[0].toString(16) + - ')' - ); - return buf.slice(1); - } - - function writeBitString(der, buf, tag) { - if (tag === undefined) tag = asn1.Ber.BitString; - var b = Buffer.alloc(buf.length + 1); - b[0] = 0x00; - buf.copy(b, 1); - der.writeBuffer(b, tag); - } - - function mpNormalize(buf) { - assert.buffer(buf); - while (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00) - buf = buf.slice(1); - if ((buf[0] & 0x80) === 0x80) { - var b = Buffer.alloc(buf.length + 1); - b[0] = 0x00; - buf.copy(b, 1); - buf = b; - } - return buf; - } - - function mpDenormalize(buf) { - assert.buffer(buf); - while (buf.length > 1 && buf[0] === 0x00) buf = buf.slice(1); - return buf; - } - - function zeroPadToLength(buf, len) { - assert.buffer(buf); - assert.number(len); - while (buf.length > len) { - assert.equal(buf[0], 0x00); - buf = buf.slice(1); - } - while (buf.length < len) { - var b = Buffer.alloc(buf.length + 1); - b[0] = 0x00; - buf.copy(b, 1); - buf = b; - } - return buf; - } - - function bigintToMpBuf(bigint) { - var buf = Buffer.from(bigint.toByteArray()); - buf = mpNormalize(buf); - return buf; - } - - function calculateDSAPublic(g, p, x) { - assert.buffer(g); - assert.buffer(p); - assert.buffer(x); - try { - var bigInt = __webpack_require__(81).BigInteger; - } catch (e) { - throw new Error( - 'To load a PKCS#8 format DSA private key, ' + - 'the node jsbn library is required.' - ); - } - g = new bigInt(g); - p = new bigInt(p); - x = new bigInt(x); - var y = g.modPow(x, p); - var ybuf = bigintToMpBuf(y); - return ybuf; - } - - function calculateED25519Public(k) { - assert.buffer(k); - - if (nacl === undefined) nacl = __webpack_require__(76); - - var kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k)); - return Buffer.from(kp.publicKey); - } - - function calculateX25519Public(k) { - assert.buffer(k); - - if (nacl === undefined) nacl = __webpack_require__(76); - - var kp = nacl.box.keyPair.fromSeed(new Uint8Array(k)); - return Buffer.from(kp.publicKey); - } - - function addRSAMissing(key) { - assert.object(key); - assertCompatible(key, PrivateKey, [1, 1]); - try { - var bigInt = __webpack_require__(81).BigInteger; - } catch (e) { - throw new Error( - 'To write a PEM private key from ' + - 'this source, the node jsbn lib is required.' - ); - } - - var d = new bigInt(key.part.d.data); - var buf; - - if (!key.part.dmodp) { - var p = new bigInt(key.part.p.data); - var dmodp = d.mod(p.subtract(1)); - - buf = bigintToMpBuf(dmodp); - key.part.dmodp = { name: 'dmodp', data: buf }; - key.parts.push(key.part.dmodp); - } - if (!key.part.dmodq) { - var q = new bigInt(key.part.q.data); - var dmodq = d.mod(q.subtract(1)); - - buf = bigintToMpBuf(dmodq); - key.part.dmodq = { name: 'dmodq', data: buf }; - key.parts.push(key.part.dmodq); - } - } - - function publicFromPrivateECDSA(curveName, priv) { - assert.string(curveName, 'curveName'); - assert.buffer(priv); - if (ec === undefined) ec = __webpack_require__(139); - if (jsbn === undefined) jsbn = __webpack_require__(81).BigInteger; - var params = algs.curves[curveName]; - var p = new jsbn(params.p); - var a = new jsbn(params.a); - var b = new jsbn(params.b); - var curve = new ec.ECCurveFp(p, a, b); - var G = curve.decodePointHex(params.G.toString('hex')); - - var d = new jsbn(mpNormalize(priv)); - var pub = G.multiply(d); - pub = Buffer.from(curve.encodePointHex(pub), 'hex'); - - var parts = []; - parts.push({ name: 'curve', data: Buffer.from(curveName) }); - parts.push({ name: 'Q', data: pub }); - - var key = new Key({ type: 'ecdsa', curve: curve, parts: parts }); - return key; - } - - function opensshCipherInfo(cipher) { - var inf = {}; - switch (cipher) { - case '3des-cbc': - inf.keySize = 24; - inf.blockSize = 8; - inf.opensslName = 'des-ede3-cbc'; - break; - case 'blowfish-cbc': - inf.keySize = 16; - inf.blockSize = 8; - inf.opensslName = 'bf-cbc'; - break; - case 'aes128-cbc': - case 'aes128-ctr': - case 'aes128-gcm@openssh.com': - inf.keySize = 16; - inf.blockSize = 16; - inf.opensslName = 'aes-128-' + cipher.slice(7, 10); - break; - case 'aes192-cbc': - case 'aes192-ctr': - case 'aes192-gcm@openssh.com': - inf.keySize = 24; - inf.blockSize = 16; - inf.opensslName = 'aes-192-' + cipher.slice(7, 10); - break; - case 'aes256-cbc': - case 'aes256-ctr': - case 'aes256-gcm@openssh.com': - inf.keySize = 32; - inf.blockSize = 16; - inf.opensslName = 'aes-256-' + cipher.slice(7, 10); - break; - default: - throw new Error('Unsupported openssl cipher "' + cipher + '"'); - } - return inf; - } - - /***/ - }, - /* 27 */ - /***/ function (module, exports, __webpack_require__) { - // Copyright 2017 Joyent, Inc. - - module.exports = Key; - - var assert = __webpack_require__(16); - var algs = __webpack_require__(32); - var crypto = __webpack_require__(11); - var Fingerprint = __webpack_require__(156); - var Signature = __webpack_require__(75); - var DiffieHellman = __webpack_require__(325).DiffieHellman; - var errs = __webpack_require__(74); - var utils = __webpack_require__(26); - var PrivateKey = __webpack_require__(33); - var edCompat; - - try { - edCompat = __webpack_require__(454); - } catch (e) { - /* Just continue through, and bail out if we try to use it. */ - } - - var InvalidAlgorithmError = errs.InvalidAlgorithmError; - var KeyParseError = errs.KeyParseError; - - var formats = {}; - formats['auto'] = __webpack_require__(455); - formats['pem'] = __webpack_require__(86); - formats['pkcs1'] = __webpack_require__(327); - formats['pkcs8'] = __webpack_require__(157); - formats['rfc4253'] = __webpack_require__(103); - formats['ssh'] = __webpack_require__(456); - formats['ssh-private'] = __webpack_require__(193); - formats['openssh'] = formats['ssh-private']; - formats['dnssec'] = __webpack_require__(326); - - function Key(opts) { - assert.object(opts, 'options'); - assert.arrayOfObject(opts.parts, 'options.parts'); - assert.string(opts.type, 'options.type'); - assert.optionalString(opts.comment, 'options.comment'); - - var algInfo = algs.info[opts.type]; - if (typeof algInfo !== 'object') - throw new InvalidAlgorithmError(opts.type); - - var partLookup = {}; - for (var i = 0; i < opts.parts.length; ++i) { - var part = opts.parts[i]; - partLookup[part.name] = part; - } - - this.type = opts.type; - this.parts = opts.parts; - this.part = partLookup; - this.comment = undefined; - this.source = opts.source; - - /* for speeding up hashing/fingerprint operations */ - this._rfc4253Cache = opts._rfc4253Cache; - this._hashCache = {}; - - var sz; - this.curve = undefined; - if (this.type === 'ecdsa') { - var curve = this.part.curve.data.toString(); - this.curve = curve; - sz = algs.curves[curve].size; - } else if (this.type === 'ed25519' || this.type === 'curve25519') { - sz = 256; - this.curve = 'curve25519'; - } else { - var szPart = this.part[algInfo.sizePart]; - sz = szPart.data.length; - sz = sz * 8 - utils.countZeros(szPart.data); - } - this.size = sz; - } - - Key.formats = formats; - - Key.prototype.toBuffer = function (format, options) { - if (format === undefined) format = 'ssh'; - assert.string(format, 'format'); - assert.object(formats[format], 'formats[format]'); - assert.optionalObject(options, 'options'); - - if (format === 'rfc4253') { - if (this._rfc4253Cache === undefined) - this._rfc4253Cache = formats['rfc4253'].write(this); - return this._rfc4253Cache; - } - - return formats[format].write(this, options); - }; - - Key.prototype.toString = function (format, options) { - return this.toBuffer(format, options).toString(); - }; - - Key.prototype.hash = function (algo) { - assert.string(algo, 'algorithm'); - algo = algo.toLowerCase(); - if (algs.hashAlgs[algo] === undefined) - throw new InvalidAlgorithmError(algo); - - if (this._hashCache[algo]) return this._hashCache[algo]; - var hash = crypto - .createHash(algo) - .update(this.toBuffer('rfc4253')) - .digest(); - this._hashCache[algo] = hash; - return hash; - }; - - Key.prototype.fingerprint = function (algo) { - if (algo === undefined) algo = 'sha256'; - assert.string(algo, 'algorithm'); - var opts = { - type: 'key', - hash: this.hash(algo), - algorithm: algo, - }; - return new Fingerprint(opts); - }; - - Key.prototype.defaultHashAlgorithm = function () { - var hashAlgo = 'sha1'; - if (this.type === 'rsa') hashAlgo = 'sha256'; - if (this.type === 'dsa' && this.size > 1024) hashAlgo = 'sha256'; - if (this.type === 'ed25519') hashAlgo = 'sha512'; - if (this.type === 'ecdsa') { - if (this.size <= 256) hashAlgo = 'sha256'; - else if (this.size <= 384) hashAlgo = 'sha384'; - else hashAlgo = 'sha512'; - } - return hashAlgo; - }; - - Key.prototype.createVerify = function (hashAlgo) { - if (hashAlgo === undefined) hashAlgo = this.defaultHashAlgorithm(); - assert.string(hashAlgo, 'hash algorithm'); - - /* ED25519 is not supported by OpenSSL, use a javascript impl. */ - if (this.type === 'ed25519' && edCompat !== undefined) - return new edCompat.Verifier(this, hashAlgo); - if (this.type === 'curve25519') - throw new Error( - 'Curve25519 keys are not suitable for ' + 'signing or verification' - ); - - var v, nm, err; - try { - nm = hashAlgo.toUpperCase(); - v = crypto.createVerify(nm); - } catch (e) { - err = e; - } - if ( - v === undefined || - (err instanceof Error && err.message.match(/Unknown message digest/)) - ) { - nm = 'RSA-'; - nm += hashAlgo.toUpperCase(); - v = crypto.createVerify(nm); - } - assert.ok(v, 'failed to create verifier'); - var oldVerify = v.verify.bind(v); - var key = this.toBuffer('pkcs8'); - var curve = this.curve; - var self = this; - v.verify = function (signature, fmt) { - if (Signature.isSignature(signature, [2, 0])) { - if (signature.type !== self.type) return false; - if (signature.hashAlgorithm && signature.hashAlgorithm !== hashAlgo) - return false; - if ( - signature.curve && - self.type === 'ecdsa' && - signature.curve !== curve - ) - return false; - return oldVerify(key, signature.toBuffer('asn1')); - } else if ( - typeof signature === 'string' || - Buffer.isBuffer(signature) - ) { - return oldVerify(key, signature, fmt); - - /* - * Avoid doing this on valid arguments, walking the prototype - * chain can be quite slow. - */ - } else if (Signature.isSignature(signature, [1, 0])) { - throw new Error( - 'signature was created by too old ' + - 'a version of sshpk and cannot be verified' - ); - } else { - throw new TypeError( - 'signature must be a string, ' + 'Buffer, or Signature object' - ); - } - }; - return v; - }; - - Key.prototype.createDiffieHellman = function () { - if (this.type === 'rsa') - throw new Error('RSA keys do not support Diffie-Hellman'); - - return new DiffieHellman(this); - }; - Key.prototype.createDH = Key.prototype.createDiffieHellman; - - Key.parse = function (data, format, options) { - if (typeof data !== 'string') assert.buffer(data, 'data'); - if (format === undefined) format = 'auto'; - assert.string(format, 'format'); - if (typeof options === 'string') options = { filename: options }; - assert.optionalObject(options, 'options'); - if (options === undefined) options = {}; - assert.optionalString(options.filename, 'options.filename'); - if (options.filename === undefined) options.filename = '(unnamed)'; - - assert.object(formats[format], 'formats[format]'); - - try { - var k = formats[format].read(data, options); - if (k instanceof PrivateKey) k = k.toPublic(); - if (!k.comment) k.comment = options.filename; - return k; - } catch (e) { - if (e.name === 'KeyEncryptedError') throw e; - throw new KeyParseError(options.filename, format, e); - } - }; - - Key.isKey = function (obj, ver) { - return utils.isCompatible(obj, Key, ver); - }; - - /* - * API versions for Key: - * [1,0] -- initial ver, may take Signature for createVerify or may not - * [1,1] -- added pkcs1, pkcs8 formats - * [1,2] -- added auto, ssh-private, openssh formats - * [1,3] -- added defaultHashAlgorithm - * [1,4] -- added ed support, createDH - * [1,5] -- first explicitly tagged version - * [1,6] -- changed ed25519 part names - */ - Key.prototype._sshpkApiVersion = [1, 6]; - - Key._oldVersionDetect = function (obj) { - assert.func(obj.toBuffer); - assert.func(obj.fingerprint); - if (obj.createDH) return [1, 4]; - if (obj.defaultHashAlgorithm) return [1, 3]; - if (obj.formats['auto']) return [1, 2]; - if (obj.formats['pkcs1']) return [1, 1]; - return [1, 0]; - }; - - /***/ - }, - /* 28 */ - /***/ function (module, exports) { - module.exports = require('assert'); - - /***/ - }, - /* 29 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - exports.default = nullify; - function nullify(obj = {}) { - if (Array.isArray(obj)) { - for ( - var _iterator = obj, - _isArray = Array.isArray(_iterator), - _i = 0, - _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); - ; - - ) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - const item = _ref; - - nullify(item); - } - } else if ( - (obj !== null && typeof obj === 'object') || - typeof obj === 'function' - ) { - Object.setPrototypeOf(obj, null); - - // for..in can only be applied to 'object', not 'function' - if (typeof obj === 'object') { - for (const key in obj) { - nullify(obj[key]); - } - } - } - - return obj; - } - - /***/ - }, - /* 30 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - const escapeStringRegexp = __webpack_require__(382); - const ansiStyles = __webpack_require__(474); - const stdoutColor = __webpack_require__(566).stdout; - - const template = __webpack_require__(567); - - const isSimpleWindowsTerm = - process.platform === 'win32' && - !(process.env.TERM || '').toLowerCase().startsWith('xterm'); - - // `supportsColor.level` → `ansiStyles.color[name]` mapping - const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; - - // `color-convert` models to exclude from the Chalk API due to conflicts and such - const skipModels = new Set(['gray']); - - const styles = Object.create(null); - - function applyOptions(obj, options) { - options = options || {}; - - // Detect level if not set manually - const scLevel = stdoutColor ? stdoutColor.level : 0; - obj.level = options.level === undefined ? scLevel : options.level; - obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; - } - - function Chalk(options) { - // We check for this.template here since calling `chalk.constructor()` - // by itself will have a `this` of a previously constructed chalk object - if (!this || !(this instanceof Chalk) || this.template) { - const chalk = {}; - applyOptions(chalk, options); - - chalk.template = function () { - const args = [].slice.call(arguments); - return chalkTag.apply(null, [chalk.template].concat(args)); - }; - - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); - - chalk.template.constructor = Chalk; - - return chalk.template; - } - - applyOptions(this, options); - } - - // Use bright blue on Windows as the normal blue color is illegible - if (isSimpleWindowsTerm) { - ansiStyles.blue.open = '\u001B[94m'; - } - - for (const key of Object.keys(ansiStyles)) { - ansiStyles[key].closeRe = new RegExp( - escapeStringRegexp(ansiStyles[key].close), - 'g' - ); - - styles[key] = { - get() { - const codes = ansiStyles[key]; - return build.call( - this, - this._styles ? this._styles.concat(codes) : [codes], - this._empty, - key - ); - }, - }; - } - - styles.visible = { - get() { - return build.call(this, this._styles || [], true, 'visible'); - }, - }; - - ansiStyles.color.closeRe = new RegExp( - escapeStringRegexp(ansiStyles.color.close), - 'g' - ); - for (const model of Object.keys(ansiStyles.color.ansi)) { - if (skipModels.has(model)) { - continue; - } - - styles[model] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.color[levelMapping[level]][model].apply( - null, - arguments - ); - const codes = { - open, - close: ansiStyles.color.close, - closeRe: ansiStyles.color.closeRe, - }; - return build.call( - this, - this._styles ? this._styles.concat(codes) : [codes], - this._empty, - model - ); - }; - }, - }; - } - - ansiStyles.bgColor.closeRe = new RegExp( - escapeStringRegexp(ansiStyles.bgColor.close), - 'g' - ); - for (const model of Object.keys(ansiStyles.bgColor.ansi)) { - if (skipModels.has(model)) { - continue; - } - - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.bgColor[levelMapping[level]][model].apply( - null, - arguments - ); - const codes = { - open, - close: ansiStyles.bgColor.close, - closeRe: ansiStyles.bgColor.closeRe, - }; - return build.call( - this, - this._styles ? this._styles.concat(codes) : [codes], - this._empty, - model - ); - }; - }, - }; - } - - const proto = Object.defineProperties(() => {}, styles); - - function build(_styles, _empty, key) { - const builder = function () { - return applyStyle.apply(builder, arguments); - }; - - builder._styles = _styles; - builder._empty = _empty; - - const self = this; - - Object.defineProperty(builder, 'level', { - enumerable: true, - get() { - return self.level; - }, - set(level) { - self.level = level; - }, - }); - - Object.defineProperty(builder, 'enabled', { - enumerable: true, - get() { - return self.enabled; - }, - set(enabled) { - self.enabled = enabled; - }, - }); - - // See below for fix regarding invisible grey/dim combination on Windows - builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; - - // `__proto__` is used because we must return a function, but there is - // no way to create a function with a different prototype - builder.__proto__ = proto; // eslint-disable-line no-proto - - return builder; - } - - function applyStyle() { - // Support varags, but simply cast to string in case there's only one arg - const args = arguments; - const argsLen = args.length; - let str = String(arguments[0]); - - if (argsLen === 0) { - return ''; - } - - if (argsLen > 1) { - // Don't slice `arguments`, it prevents V8 optimizations - for (let a = 1; a < argsLen; a++) { - str += ' ' + args[a]; - } - } - - if (!this.enabled || this.level <= 0 || !str) { - return this._empty ? '' : str; - } - - // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, - // see https://github.com/chalk/chalk/issues/58 - // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. - const originalDim = ansiStyles.dim.open; - if (isSimpleWindowsTerm && this.hasGrey) { - ansiStyles.dim.open = ''; - } - - for (const code of this._styles.slice().reverse()) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - str = code.open + str.replace(code.closeRe, code.open) + code.close; - - // Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS - // https://github.com/chalk/chalk/pull/92 - str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); - } - - // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue - ansiStyles.dim.open = originalDim; - - return str; - } - - function chalkTag(chalk, strings) { - if (!Array.isArray(strings)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return [].slice.call(arguments, 1).join(' '); - } - - const args = [].slice.call(arguments, 2); - const parts = [strings.raw[0]]; - - for (let i = 1; i < strings.length; i++) { - parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); - parts.push(String(strings.raw[i])); - } - - return template(chalk, parts.join('')); - } - - Object.defineProperties(Chalk.prototype, styles); - - module.exports = Chalk(); // eslint-disable-line new-cap - module.exports.supportsColor = stdoutColor; - module.exports.default = module.exports; // For TypeScript - - /***/ - }, - /* 31 */ - /***/ function (module, exports) { - var core = (module.exports = { version: '2.5.7' }); - if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - - /***/ - }, - /* 32 */ - /***/ function (module, exports, __webpack_require__) { - // Copyright 2015 Joyent, Inc. - - var Buffer = __webpack_require__(15).Buffer; - - var algInfo = { - dsa: { - parts: ['p', 'q', 'g', 'y'], - sizePart: 'p', - }, - rsa: { - parts: ['e', 'n'], - sizePart: 'n', - }, - ecdsa: { - parts: ['curve', 'Q'], - sizePart: 'Q', - }, - ed25519: { - parts: ['A'], - sizePart: 'A', - }, - }; - algInfo['curve25519'] = algInfo['ed25519']; - - var algPrivInfo = { - dsa: { - parts: ['p', 'q', 'g', 'y', 'x'], - }, - rsa: { - parts: ['n', 'e', 'd', 'iqmp', 'p', 'q'], - }, - ecdsa: { - parts: ['curve', 'Q', 'd'], - }, - ed25519: { - parts: ['A', 'k'], - }, - }; - algPrivInfo['curve25519'] = algPrivInfo['ed25519']; - - var hashAlgs = { - md5: true, - sha1: true, - sha256: true, - sha384: true, - sha512: true, - }; - - /* - * Taken from - * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf - */ - var curves = { - nistp256: { - size: 256, - pkcs8oid: '1.2.840.10045.3.1.7', - p: Buffer.from( - ( - '00' + - 'ffffffff 00000001 00000000 00000000' + - '00000000 ffffffff ffffffff ffffffff' - ).replace(/ /g, ''), - 'hex' - ), - a: Buffer.from( - ( - '00' + - 'FFFFFFFF 00000001 00000000 00000000' + - '00000000 FFFFFFFF FFFFFFFF FFFFFFFC' - ).replace(/ /g, ''), - 'hex' - ), - b: Buffer.from( - ( - '5ac635d8 aa3a93e7 b3ebbd55 769886bc' + - '651d06b0 cc53b0f6 3bce3c3e 27d2604b' - ).replace(/ /g, ''), - 'hex' - ), - s: Buffer.from( - ('00' + 'c49d3608 86e70493 6a6678e1 139d26b7' + '819f7e90').replace( - / /g, - '' - ), - 'hex' - ), - n: Buffer.from( - ( - '00' + - 'ffffffff 00000000 ffffffff ffffffff' + - 'bce6faad a7179e84 f3b9cac2 fc632551' - ).replace(/ /g, ''), - 'hex' - ), - G: Buffer.from( - ( - '04' + - '6b17d1f2 e12c4247 f8bce6e5 63a440f2' + - '77037d81 2deb33a0 f4a13945 d898c296' + - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16' + - '2bce3357 6b315ece cbb64068 37bf51f5' - ).replace(/ /g, ''), - 'hex' - ), - }, - nistp384: { - size: 384, - pkcs8oid: '1.3.132.0.34', - p: Buffer.from( - ( - '00' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff fffffffe' + - 'ffffffff 00000000 00000000 ffffffff' - ).replace(/ /g, ''), - 'hex' - ), - a: Buffer.from( - ( - '00' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE' + - 'FFFFFFFF 00000000 00000000 FFFFFFFC' - ).replace(/ /g, ''), - 'hex' - ), - b: Buffer.from( - ( - 'b3312fa7 e23ee7e4 988e056b e3f82d19' + - '181d9c6e fe814112 0314088f 5013875a' + - 'c656398d 8a2ed19d 2a85c8ed d3ec2aef' - ).replace(/ /g, ''), - 'hex' - ), - s: Buffer.from( - ('00' + 'a335926a a319a27a 1d00896a 6773a482' + '7acdac73').replace( - / /g, - '' - ), - 'hex' - ), - n: Buffer.from( - ( - '00' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff c7634d81 f4372ddf' + - '581a0db2 48b0a77a ecec196a ccc52973' - ).replace(/ /g, ''), - 'hex' - ), - G: Buffer.from( - ( - '04' + - 'aa87ca22 be8b0537 8eb1c71e f320ad74' + - '6e1d3b62 8ba79b98 59f741e0 82542a38' + - '5502f25d bf55296c 3a545e38 72760ab7' + - '3617de4a 96262c6f 5d9e98bf 9292dc29' + - 'f8f41dbd 289a147c e9da3113 b5f0b8c0' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' - ).replace(/ /g, ''), - 'hex' - ), - }, - nistp521: { - size: 521, - pkcs8oid: '1.3.132.0.35', - p: Buffer.from( - ( - '01ffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffff' - ).replace(/ /g, ''), - 'hex' - ), - a: Buffer.from( - ( - '01FF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF' + - 'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC' - ).replace(/ /g, ''), - 'hex' - ), - b: Buffer.from( - ( - '51' + - '953eb961 8e1c9a1f 929a21a0 b68540ee' + - 'a2da725b 99b315f3 b8b48991 8ef109e1' + - '56193951 ec7e937b 1652c0bd 3bb1bf07' + - '3573df88 3d2c34f1 ef451fd4 6b503f00' - ).replace(/ /g, ''), - 'hex' - ), - s: Buffer.from( - ('00' + 'd09e8800 291cb853 96cc6717 393284aa' + 'a0da64ba').replace( - / /g, - '' - ), - 'hex' - ), - n: Buffer.from( - ( - '01ff' + - 'ffffffff ffffffff ffffffff ffffffff' + - 'ffffffff ffffffff ffffffff fffffffa' + - '51868783 bf2f966b 7fcc0148 f709a5d0' + - '3bb5c9b8 899c47ae bb6fb71e 91386409' - ).replace(/ /g, ''), - 'hex' - ), - G: Buffer.from( - ( - '04' + - '00c6 858e06b7 0404e9cd 9e3ecb66 2395b442' + - '9c648139 053fb521 f828af60 6b4d3dba' + - 'a14b5e77 efe75928 fe1dc127 a2ffa8de' + - '3348b3c1 856a429b f97e7e31 c2e5bd66' + - '0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9' + - '98f54449 579b4468 17afbd17 273e662c' + - '97ee7299 5ef42640 c550b901 3fad0761' + - '353c7086 a272c240 88be9476 9fd16650' - ).replace(/ /g, ''), - 'hex' - ), - }, - }; - - module.exports = { - info: algInfo, - privInfo: algPrivInfo, - hashAlgs: hashAlgs, - curves: curves, - }; - - /***/ - }, - /* 33 */ - /***/ function (module, exports, __webpack_require__) { - // Copyright 2017 Joyent, Inc. - - module.exports = PrivateKey; - - var assert = __webpack_require__(16); - var Buffer = __webpack_require__(15).Buffer; - var algs = __webpack_require__(32); - var crypto = __webpack_require__(11); - var Fingerprint = __webpack_require__(156); - var Signature = __webpack_require__(75); - var errs = __webpack_require__(74); - var util = __webpack_require__(3); - var utils = __webpack_require__(26); - var dhe = __webpack_require__(325); - var generateECDSA = dhe.generateECDSA; - var generateED25519 = dhe.generateED25519; - var edCompat; - var nacl; - - try { - edCompat = __webpack_require__(454); - } catch (e) { - /* Just continue through, and bail out if we try to use it. */ - } - - var Key = __webpack_require__(27); - - var InvalidAlgorithmError = errs.InvalidAlgorithmError; - var KeyParseError = errs.KeyParseError; - var KeyEncryptedError = errs.KeyEncryptedError; - - var formats = {}; - formats['auto'] = __webpack_require__(455); - formats['pem'] = __webpack_require__(86); - formats['pkcs1'] = __webpack_require__(327); - formats['pkcs8'] = __webpack_require__(157); - formats['rfc4253'] = __webpack_require__(103); - formats['ssh-private'] = __webpack_require__(193); - formats['openssh'] = formats['ssh-private']; - formats['ssh'] = formats['ssh-private']; - formats['dnssec'] = __webpack_require__(326); - - function PrivateKey(opts) { - assert.object(opts, 'options'); - Key.call(this, opts); - - this._pubCache = undefined; - } - util.inherits(PrivateKey, Key); - - PrivateKey.formats = formats; - - PrivateKey.prototype.toBuffer = function (format, options) { - if (format === undefined) format = 'pkcs1'; - assert.string(format, 'format'); - assert.object(formats[format], 'formats[format]'); - assert.optionalObject(options, 'options'); - - return formats[format].write(this, options); - }; - - PrivateKey.prototype.hash = function (algo) { - return this.toPublic().hash(algo); - }; - - PrivateKey.prototype.toPublic = function () { - if (this._pubCache) return this._pubCache; - - var algInfo = algs.info[this.type]; - var pubParts = []; - for (var i = 0; i < algInfo.parts.length; ++i) { - var p = algInfo.parts[i]; - pubParts.push(this.part[p]); - } - - this._pubCache = new Key({ - type: this.type, - source: this, - parts: pubParts, - }); - if (this.comment) this._pubCache.comment = this.comment; - return this._pubCache; - }; - - PrivateKey.prototype.derive = function (newType) { - assert.string(newType, 'type'); - var priv, pub, pair; - - if (this.type === 'ed25519' && newType === 'curve25519') { - if (nacl === undefined) nacl = __webpack_require__(76); - - priv = this.part.k.data; - if (priv[0] === 0x00) priv = priv.slice(1); - - pair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv)); - pub = Buffer.from(pair.publicKey); - - return new PrivateKey({ - type: 'curve25519', - parts: [ - { name: 'A', data: utils.mpNormalize(pub) }, - { name: 'k', data: utils.mpNormalize(priv) }, - ], - }); - } else if (this.type === 'curve25519' && newType === 'ed25519') { - if (nacl === undefined) nacl = __webpack_require__(76); - - priv = this.part.k.data; - if (priv[0] === 0x00) priv = priv.slice(1); - - pair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv)); - pub = Buffer.from(pair.publicKey); - - return new PrivateKey({ - type: 'ed25519', - parts: [ - { name: 'A', data: utils.mpNormalize(pub) }, - { name: 'k', data: utils.mpNormalize(priv) }, - ], - }); - } - throw new Error( - 'Key derivation not supported from ' + this.type + ' to ' + newType - ); - }; - - PrivateKey.prototype.createVerify = function (hashAlgo) { - return this.toPublic().createVerify(hashAlgo); - }; - - PrivateKey.prototype.createSign = function (hashAlgo) { - if (hashAlgo === undefined) hashAlgo = this.defaultHashAlgorithm(); - assert.string(hashAlgo, 'hash algorithm'); - - /* ED25519 is not supported by OpenSSL, use a javascript impl. */ - if (this.type === 'ed25519' && edCompat !== undefined) - return new edCompat.Signer(this, hashAlgo); - if (this.type === 'curve25519') - throw new Error( - 'Curve25519 keys are not suitable for ' + 'signing or verification' - ); - - var v, nm, err; - try { - nm = hashAlgo.toUpperCase(); - v = crypto.createSign(nm); - } catch (e) { - err = e; - } - if ( - v === undefined || - (err instanceof Error && err.message.match(/Unknown message digest/)) - ) { - nm = 'RSA-'; - nm += hashAlgo.toUpperCase(); - v = crypto.createSign(nm); - } - assert.ok(v, 'failed to create verifier'); - var oldSign = v.sign.bind(v); - var key = this.toBuffer('pkcs1'); - var type = this.type; - var curve = this.curve; - v.sign = function () { - var sig = oldSign(key); - if (typeof sig === 'string') sig = Buffer.from(sig, 'binary'); - sig = Signature.parse(sig, type, 'asn1'); - sig.hashAlgorithm = hashAlgo; - sig.curve = curve; - return sig; - }; - return v; - }; - - PrivateKey.parse = function (data, format, options) { - if (typeof data !== 'string') assert.buffer(data, 'data'); - if (format === undefined) format = 'auto'; - assert.string(format, 'format'); - if (typeof options === 'string') options = { filename: options }; - assert.optionalObject(options, 'options'); - if (options === undefined) options = {}; - assert.optionalString(options.filename, 'options.filename'); - if (options.filename === undefined) options.filename = '(unnamed)'; - - assert.object(formats[format], 'formats[format]'); - - try { - var k = formats[format].read(data, options); - assert.ok(k instanceof PrivateKey, 'key is not a private key'); - if (!k.comment) k.comment = options.filename; - return k; - } catch (e) { - if (e.name === 'KeyEncryptedError') throw e; - throw new KeyParseError(options.filename, format, e); - } - }; - - PrivateKey.isPrivateKey = function (obj, ver) { - return utils.isCompatible(obj, PrivateKey, ver); - }; - - PrivateKey.generate = function (type, options) { - if (options === undefined) options = {}; - assert.object(options, 'options'); - - switch (type) { - case 'ecdsa': - if (options.curve === undefined) options.curve = 'nistp256'; - assert.string(options.curve, 'options.curve'); - return generateECDSA(options.curve); - case 'ed25519': - return generateED25519(); - default: - throw new Error( - 'Key generation not supported with key ' + 'type "' + type + '"' - ); - } - }; - - /* - * API versions for PrivateKey: - * [1,0] -- initial ver - * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats - * [1,2] -- added defaultHashAlgorithm - * [1,3] -- added derive, ed, createDH - * [1,4] -- first tagged version - * [1,5] -- changed ed25519 part names and format - */ - PrivateKey.prototype._sshpkApiVersion = [1, 5]; - - PrivateKey._oldVersionDetect = function (obj) { - assert.func(obj.toPublic); - assert.func(obj.createSign); - if (obj.derive) return [1, 3]; - if (obj.defaultHashAlgorithm) return [1, 2]; - if (obj.formats['auto']) return [1, 1]; - return [1, 0]; - }; - - /***/ - }, - /* 34 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - exports.wrapLifecycle = - exports.run = - exports.install = - exports.Install = - undefined; - - var _extends2; - - function _load_extends() { - return (_extends2 = _interopRequireDefault(__webpack_require__(20))); - } - - var _asyncToGenerator2; - - function _load_asyncToGenerator() { - return (_asyncToGenerator2 = _interopRequireDefault( - __webpack_require__(2) - )); - } - - let install = (exports.install = (() => { - var _ref29 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - config, - reporter, - flags, - lockfile - ) { - yield wrapLifecycle( - config, - flags, - (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - const install = new Install(flags, config, reporter, lockfile); - yield install.init(); - } - ) - ); - }); - - return function install(_x7, _x8, _x9, _x10) { - return _ref29.apply(this, arguments); - }; - })()); - - let run = (exports.run = (() => { - var _ref31 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - config, - reporter, - flags, - args - ) { - let lockfile; - let error = 'installCommandRenamed'; - if (flags.lockfile === false) { - lockfile = new (_lockfile || _load_lockfile()).default(); - } else { - lockfile = yield ( - _lockfile || _load_lockfile() - ).default.fromDirectory(config.lockfileFolder, reporter); - } - - if (args.length) { - const exampleArgs = args.slice(); - - if (flags.saveDev) { - exampleArgs.push('--dev'); - } - if (flags.savePeer) { - exampleArgs.push('--peer'); - } - if (flags.saveOptional) { - exampleArgs.push('--optional'); - } - if (flags.saveExact) { - exampleArgs.push('--exact'); - } - if (flags.saveTilde) { - exampleArgs.push('--tilde'); - } - let command = 'add'; - if (flags.global) { - error = 'globalFlagRemoved'; - command = 'global add'; - } - throw new (_errors || _load_errors()).MessageError( - reporter.lang(error, `yarn ${command} ${exampleArgs.join(' ')}`) - ); - } - - yield install(config, reporter, flags, lockfile); - }); - - return function run(_x11, _x12, _x13, _x14) { - return _ref31.apply(this, arguments); - }; - })()); - - let wrapLifecycle = (exports.wrapLifecycle = (() => { - var _ref32 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* ( - config, - flags, - factory - ) { - yield config.executeLifecycleScript('preinstall'); - - yield factory(); - - // npm behaviour, seems kinda funky but yay compatibility - yield config.executeLifecycleScript('install'); - yield config.executeLifecycleScript('postinstall'); - - if (!config.production) { - if (!config.disablePrepublish) { - yield config.executeLifecycleScript('prepublish'); - } - yield config.executeLifecycleScript('prepare'); - } - }); - - return function wrapLifecycle(_x15, _x16, _x17) { - return _ref32.apply(this, arguments); - }; - })()); - - exports.hasWrapper = hasWrapper; - exports.setFlags = setFlags; - - var _objectPath; - - function _load_objectPath() { - return (_objectPath = _interopRequireDefault(__webpack_require__(304))); - } - - var _hooks; - - function _load_hooks() { - return (_hooks = __webpack_require__(368)); - } - - var _index; - - function _load_index() { - return (_index = _interopRequireDefault(__webpack_require__(218))); - } - - var _errors; - - function _load_errors() { - return (_errors = __webpack_require__(6)); - } - - var _integrityChecker; - - function _load_integrityChecker() { - return (_integrityChecker = _interopRequireDefault( - __webpack_require__(206) - )); - } - - var _lockfile; - - function _load_lockfile() { - return (_lockfile = _interopRequireDefault(__webpack_require__(19))); - } - - var _lockfile2; - - function _load_lockfile2() { - return (_lockfile2 = __webpack_require__(19)); - } - - var _packageFetcher; - - function _load_packageFetcher() { - return (_packageFetcher = _interopRequireWildcard( - __webpack_require__(208) - )); - } - - var _packageInstallScripts; - - function _load_packageInstallScripts() { - return (_packageInstallScripts = _interopRequireDefault( - __webpack_require__(525) - )); - } - - var _packageCompatibility; - - function _load_packageCompatibility() { - return (_packageCompatibility = _interopRequireWildcard( - __webpack_require__(207) - )); - } - - var _packageResolver; - - function _load_packageResolver() { - return (_packageResolver = _interopRequireDefault( - __webpack_require__(360) - )); - } - - var _packageLinker; - - function _load_packageLinker() { - return (_packageLinker = _interopRequireDefault( - __webpack_require__(209) - )); - } - - var _index2; - - function _load_index2() { - return (_index2 = __webpack_require__(58)); - } - - var _index3; - - function _load_index3() { - return (_index3 = __webpack_require__(78)); - } - - var _autoclean; - - function _load_autoclean() { - return (_autoclean = __webpack_require__(348)); - } - - var _constants; - - function _load_constants() { - return (_constants = _interopRequireWildcard(__webpack_require__(8))); - } - - var _normalizePattern; - - function _load_normalizePattern() { - return (_normalizePattern = __webpack_require__(37)); - } - - var _fs; - - function _load_fs() { - return (_fs = _interopRequireWildcard(__webpack_require__(5))); - } - - var _map; - - function _load_map() { - return (_map = _interopRequireDefault(__webpack_require__(29))); - } - - var _yarnVersion; - - function _load_yarnVersion() { - return (_yarnVersion = __webpack_require__(105)); - } - - var _generatePnpMap; - - function _load_generatePnpMap() { - return (_generatePnpMap = __webpack_require__(547)); - } - - var _workspaceLayout; - - function _load_workspaceLayout() { - return (_workspaceLayout = _interopRequireDefault( - __webpack_require__(90) - )); - } - - var _resolutionMap; - - function _load_resolutionMap() { - return (_resolutionMap = _interopRequireDefault( - __webpack_require__(212) - )); - } - - var _guessName; - - function _load_guessName() { - return (_guessName = _interopRequireDefault(__webpack_require__(169))); - } - - var _audit; - - function _load_audit() { - return (_audit = _interopRequireDefault(__webpack_require__(347))); - } - - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } else { - var newObj = {}; - if (obj != null) { - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) - newObj[key] = obj[key]; - } - } - newObj.default = obj; - return newObj; - } - } - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - - const deepEqual = __webpack_require__(599); - - const emoji = __webpack_require__(302); - const invariant = __webpack_require__(9); - const path = __webpack_require__(0); - const semver = __webpack_require__(22); - const uuid = __webpack_require__(120); - const ssri = __webpack_require__(65); - - const ONE_DAY = 1000 * 60 * 60 * 24; - - /** - * Try and detect the installation method for Yarn and provide a command to update it with. - */ - - function getUpdateCommand(installationMethod) { - if (installationMethod === 'tar') { - return `curl --compressed -o- -L ${ - (_constants || _load_constants()).YARN_INSTALLER_SH - } | bash`; - } - - if (installationMethod === 'homebrew') { - return 'brew upgrade yarn'; - } - - if (installationMethod === 'deb') { - return 'sudo apt-get update && sudo apt-get install yarn'; - } - - if (installationMethod === 'rpm') { - return 'sudo yum install yarn'; - } - - if (installationMethod === 'npm') { - return 'npm install --global yarn'; - } - - if (installationMethod === 'chocolatey') { - return 'choco upgrade yarn'; - } - - if (installationMethod === 'apk') { - return 'apk update && apk add -u yarn'; - } - - if (installationMethod === 'portage') { - return 'sudo emerge --sync && sudo emerge -au sys-apps/yarn'; - } - - return null; - } - - function getUpdateInstaller(installationMethod) { - // Windows - if (installationMethod === 'msi') { - return (_constants || _load_constants()).YARN_INSTALLER_MSI; - } - - return null; - } - - function normalizeFlags(config, rawFlags) { - const flags = { - // install - har: !!rawFlags.har, - ignorePlatform: !!rawFlags.ignorePlatform, - ignoreEngines: !!rawFlags.ignoreEngines, - ignoreScripts: !!rawFlags.ignoreScripts, - ignoreOptional: !!rawFlags.ignoreOptional, - force: !!rawFlags.force, - flat: !!rawFlags.flat, - lockfile: rawFlags.lockfile !== false, - pureLockfile: !!rawFlags.pureLockfile, - updateChecksums: !!rawFlags.updateChecksums, - skipIntegrityCheck: !!rawFlags.skipIntegrityCheck, - frozenLockfile: !!rawFlags.frozenLockfile, - linkDuplicates: !!rawFlags.linkDuplicates, - checkFiles: !!rawFlags.checkFiles, - audit: !!rawFlags.audit, - - // add - peer: !!rawFlags.peer, - dev: !!rawFlags.dev, - optional: !!rawFlags.optional, - exact: !!rawFlags.exact, - tilde: !!rawFlags.tilde, - ignoreWorkspaceRootCheck: !!rawFlags.ignoreWorkspaceRootCheck, - - // outdated, update-interactive - includeWorkspaceDeps: !!rawFlags.includeWorkspaceDeps, - - // add, remove, update - workspaceRootIsCwd: rawFlags.workspaceRootIsCwd !== false, - }; - - if (config.getOption('ignore-scripts')) { - flags.ignoreScripts = true; - } - - if (config.getOption('ignore-platform')) { - flags.ignorePlatform = true; - } - - if (config.getOption('ignore-engines')) { - flags.ignoreEngines = true; - } - - if (config.getOption('ignore-optional')) { - flags.ignoreOptional = true; - } - - if (config.getOption('force')) { - flags.force = true; - } - - return flags; - } - - class Install { - constructor(flags, config, reporter, lockfile) { - this.rootManifestRegistries = []; - this.rootPatternsToOrigin = (0, (_map || _load_map()).default)(); - this.lockfile = lockfile; - this.reporter = reporter; - this.config = config; - this.flags = normalizeFlags(config, flags); - this.resolutions = (0, (_map || _load_map()).default)(); // Legacy resolutions field used for flat install mode - this.resolutionMap = new ( - _resolutionMap || _load_resolutionMap() - ).default(config); // Selective resolutions for nested dependencies - this.resolver = new ( - _packageResolver || _load_packageResolver() - ).default(config, lockfile, this.resolutionMap); - this.integrityChecker = new ( - _integrityChecker || _load_integrityChecker() - ).default(config); - this.linker = new (_packageLinker || _load_packageLinker()).default( - config, - this.resolver - ); - this.scripts = new ( - _packageInstallScripts || _load_packageInstallScripts() - ).default(config, this.resolver, this.flags.force); - } - - /** - * Create a list of dependency requests from the current directories manifests. - */ - - fetchRequestFromCwd( - excludePatterns = [], - ignoreUnusedPatterns = false - ) { - var _this = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - const patterns = []; - const deps = []; - let resolutionDeps = []; - const manifest = {}; - - const ignorePatterns = []; - const usedPatterns = []; - let workspaceLayout; - - // some commands should always run in the context of the entire workspace - const cwd = - _this.flags.includeWorkspaceDeps || - _this.flags.workspaceRootIsCwd - ? _this.config.lockfileFolder - : _this.config.cwd; - - // non-workspaces are always root, otherwise check for workspace root - const cwdIsRoot = - !_this.config.workspaceRootFolder || - _this.config.lockfileFolder === cwd; - - // exclude package names that are in install args - const excludeNames = []; - for ( - var _iterator = excludePatterns, - _isArray = Array.isArray(_iterator), - _i = 0, - _iterator = _isArray - ? _iterator - : _iterator[Symbol.iterator](); - ; - - ) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - const pattern = _ref; - - if ( - (0, (_index3 || _load_index3()).getExoticResolver)(pattern) - ) { - excludeNames.push( - (0, (_guessName || _load_guessName()).default)(pattern) - ); - } else { - // extract the name - const parts = (0, - (_normalizePattern || _load_normalizePattern()) - .normalizePattern)(pattern); - excludeNames.push(parts.name); - } - } - - const stripExcluded = function stripExcluded(manifest) { - for ( - var _iterator2 = excludeNames, - _isArray2 = Array.isArray(_iterator2), - _i2 = 0, - _iterator2 = _isArray2 - ? _iterator2 - : _iterator2[Symbol.iterator](); - ; - - ) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - const exclude = _ref2; - - if (manifest.dependencies && manifest.dependencies[exclude]) { - delete manifest.dependencies[exclude]; - } - if ( - manifest.devDependencies && - manifest.devDependencies[exclude] - ) { - delete manifest.devDependencies[exclude]; - } - if ( - manifest.optionalDependencies && - manifest.optionalDependencies[exclude] - ) { - delete manifest.optionalDependencies[exclude]; - } - } - }; - - for ( - var _iterator3 = Object.keys( - (_index2 || _load_index2()).registries - ), - _isArray3 = Array.isArray(_iterator3), - _i3 = 0, - _iterator3 = _isArray3 - ? _iterator3 - : _iterator3[Symbol.iterator](); - ; - - ) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - const registry = _ref3; - - const filename = (_index2 || _load_index2()).registries[ - registry - ].filename; - - const loc = path.join(cwd, filename); - if (!(yield (_fs || _load_fs()).exists(loc))) { - continue; - } - - _this.rootManifestRegistries.push(registry); - - const projectManifestJson = yield _this.config.readJson(loc); - yield (0, (_index || _load_index()).default)( - projectManifestJson, - cwd, - _this.config, - cwdIsRoot - ); - - Object.assign( - _this.resolutions, - projectManifestJson.resolutions - ); - Object.assign(manifest, projectManifestJson); - - _this.resolutionMap.init(_this.resolutions); - for ( - var _iterator4 = Object.keys( - _this.resolutionMap.resolutionsByPackage - ), - _isArray4 = Array.isArray(_iterator4), - _i4 = 0, - _iterator4 = _isArray4 - ? _iterator4 - : _iterator4[Symbol.iterator](); - ; - - ) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - const packageName = _ref4; - - const optional = - (_objectPath || _load_objectPath()).default.has( - manifest.optionalDependencies, - packageName - ) && _this.flags.ignoreOptional; - for ( - var _iterator8 = - _this.resolutionMap.resolutionsByPackage[packageName], - _isArray8 = Array.isArray(_iterator8), - _i8 = 0, - _iterator8 = _isArray8 - ? _iterator8 - : _iterator8[Symbol.iterator](); - ; - - ) { - var _ref9; - - if (_isArray8) { - if (_i8 >= _iterator8.length) break; - _ref9 = _iterator8[_i8++]; - } else { - _i8 = _iterator8.next(); - if (_i8.done) break; - _ref9 = _i8.value; - } - - const _ref8 = _ref9; - const pattern = _ref8.pattern; - - resolutionDeps = [ - ...resolutionDeps, - { registry, pattern, optional, hint: 'resolution' }, - ]; - } - } - - const pushDeps = function pushDeps( - depType, - manifest, - { hint, optional }, - isUsed - ) { - if (ignoreUnusedPatterns && !isUsed) { - return; - } - // We only take unused dependencies into consideration to get deterministic hoisting. - // Since flat mode doesn't care about hoisting and everything is top level and specified then we can safely - // leave these out. - if (_this.flags.flat && !isUsed) { - return; - } - const depMap = manifest[depType]; - for (const name in depMap) { - if (excludeNames.indexOf(name) >= 0) { - continue; - } - - let pattern = name; - if (!_this.lockfile.getLocked(pattern)) { - // when we use --save we save the dependency to the lockfile with just the name rather than the - // version combo - pattern += '@' + depMap[name]; - } - - // normalization made sure packages are mentioned only once - if (isUsed) { - usedPatterns.push(pattern); - } else { - ignorePatterns.push(pattern); - } - - _this.rootPatternsToOrigin[pattern] = depType; - patterns.push(pattern); - deps.push({ - pattern, - registry, - hint, - optional, - workspaceName: manifest.name, - workspaceLoc: manifest._loc, - }); - } - }; - - if (cwdIsRoot) { - pushDeps( - 'dependencies', - projectManifestJson, - { hint: null, optional: false }, - true - ); - pushDeps( - 'devDependencies', - projectManifestJson, - { hint: 'dev', optional: false }, - !_this.config.production - ); - pushDeps( - 'optionalDependencies', - projectManifestJson, - { hint: 'optional', optional: true }, - true - ); - } - - if (_this.config.workspaceRootFolder) { - const workspaceLoc = cwdIsRoot - ? loc - : path.join(_this.config.lockfileFolder, filename); - const workspacesRoot = path.dirname(workspaceLoc); - - let workspaceManifestJson = projectManifestJson; - if (!cwdIsRoot) { - // the manifest we read before was a child workspace, so get the root - workspaceManifestJson = yield _this.config.readJson( - workspaceLoc - ); - yield (0, (_index || _load_index()).default)( - workspaceManifestJson, - workspacesRoot, - _this.config, - true - ); - } - - const workspaces = yield _this.config.resolveWorkspaces( - workspacesRoot, - workspaceManifestJson - ); - workspaceLayout = new ( - _workspaceLayout || _load_workspaceLayout() - ).default(workspaces, _this.config); - - // add virtual manifest that depends on all workspaces, this way package hoisters and resolvers will work fine - const workspaceDependencies = (0, - (_extends2 || _load_extends()).default)( - {}, - workspaceManifestJson.dependencies - ); - for ( - var _iterator5 = Object.keys(workspaces), - _isArray5 = Array.isArray(_iterator5), - _i5 = 0, - _iterator5 = _isArray5 - ? _iterator5 - : _iterator5[Symbol.iterator](); - ; - - ) { - var _ref5; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref5 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref5 = _i5.value; - } - - const workspaceName = _ref5; - - const workspaceManifest = - workspaces[workspaceName].manifest; - workspaceDependencies[workspaceName] = - workspaceManifest.version; - - // include dependencies from all workspaces - if (_this.flags.includeWorkspaceDeps) { - pushDeps( - 'dependencies', - workspaceManifest, - { hint: null, optional: false }, - true - ); - pushDeps( - 'devDependencies', - workspaceManifest, - { hint: 'dev', optional: false }, - !_this.config.production - ); - pushDeps( - 'optionalDependencies', - workspaceManifest, - { hint: 'optional', optional: true }, - true - ); - } - } - const virtualDependencyManifest = { - _uid: '', - name: `workspace-aggregator-${uuid.v4()}`, - version: '1.0.0', - _registry: 'npm', - _loc: workspacesRoot, - dependencies: workspaceDependencies, - devDependencies: (0, - (_extends2 || _load_extends()).default)( - {}, - workspaceManifestJson.devDependencies - ), - optionalDependencies: (0, - (_extends2 || _load_extends()).default)( - {}, - workspaceManifestJson.optionalDependencies - ), - private: workspaceManifestJson.private, - workspaces: workspaceManifestJson.workspaces, - }; - workspaceLayout.virtualManifestName = - virtualDependencyManifest.name; - const virtualDep = {}; - virtualDep[virtualDependencyManifest.name] = - virtualDependencyManifest.version; - workspaces[virtualDependencyManifest.name] = { - loc: workspacesRoot, - manifest: virtualDependencyManifest, - }; - - // ensure dependencies that should be excluded are stripped from the correct manifest - stripExcluded( - cwdIsRoot - ? virtualDependencyManifest - : workspaces[projectManifestJson.name].manifest - ); - - pushDeps( - 'workspaces', - { workspaces: virtualDep }, - { hint: 'workspaces', optional: false }, - true - ); - - const implicitWorkspaceDependencies = (0, - (_extends2 || _load_extends()).default)( - {}, - workspaceDependencies - ); - - for ( - var _iterator6 = (_constants || _load_constants()) - .OWNED_DEPENDENCY_TYPES, - _isArray6 = Array.isArray(_iterator6), - _i6 = 0, - _iterator6 = _isArray6 - ? _iterator6 - : _iterator6[Symbol.iterator](); - ; - - ) { - var _ref6; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref6 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref6 = _i6.value; - } - - const type = _ref6; - - for ( - var _iterator7 = Object.keys( - projectManifestJson[type] || {} - ), - _isArray7 = Array.isArray(_iterator7), - _i7 = 0, - _iterator7 = _isArray7 - ? _iterator7 - : _iterator7[Symbol.iterator](); - ; - - ) { - var _ref7; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref7 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref7 = _i7.value; - } - - const dependencyName = _ref7; - - delete implicitWorkspaceDependencies[dependencyName]; - } - } - - pushDeps( - 'dependencies', - { dependencies: implicitWorkspaceDependencies }, - { hint: 'workspaces', optional: false }, - true - ); - } - - break; - } - - // inherit root flat flag - if (manifest.flat) { - _this.flags.flat = true; - } - - return { - requests: [...resolutionDeps, ...deps], - patterns, - manifest, - usedPatterns, - ignorePatterns, - workspaceLayout, - }; - } - )(); - } - - /** - * TODO description - */ - - prepareRequests(requests) { - return requests; - } - - preparePatterns(patterns) { - return patterns; - } - preparePatternsForLinking(patterns, cwdManifest, cwdIsRoot) { - return patterns; - } - - prepareManifests() { - var _this2 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - const manifests = yield _this2.config.getRootManifests(); - return manifests; - } - )(); - } - - bailout(patterns, workspaceLayout) { - var _this3 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - // We don't want to skip the audit - it could yield important errors - if (_this3.flags.audit) { - return false; - } - // PNP is so fast that the integrity check isn't pertinent - if (_this3.config.plugnplayEnabled) { - return false; - } - if (_this3.flags.skipIntegrityCheck || _this3.flags.force) { - return false; - } - const lockfileCache = _this3.lockfile.cache; - if (!lockfileCache) { - return false; - } - const lockfileClean = - _this3.lockfile.parseResultType === 'success'; - const match = yield _this3.integrityChecker.check( - patterns, - lockfileCache, - _this3.flags, - workspaceLayout - ); - if ( - _this3.flags.frozenLockfile && - (!lockfileClean || match.missingPatterns.length > 0) - ) { - throw new (_errors || _load_errors()).MessageError( - _this3.reporter.lang('frozenLockfileError') - ); - } - - const haveLockfile = yield (_fs || _load_fs()).exists( - path.join( - _this3.config.lockfileFolder, - (_constants || _load_constants()).LOCKFILE_FILENAME - ) - ); - - const lockfileIntegrityPresent = - !_this3.lockfile.hasEntriesExistWithoutIntegrity(); - const integrityBailout = - lockfileIntegrityPresent || !_this3.config.autoAddIntegrity; - - if ( - match.integrityMatches && - haveLockfile && - lockfileClean && - integrityBailout - ) { - _this3.reporter.success(_this3.reporter.lang('upToDate')); - return true; - } - - if (match.integrityFileMissing && haveLockfile) { - // Integrity file missing, force script installations - _this3.scripts.setForce(true); - return false; - } - - if (match.hardRefreshRequired) { - // e.g. node version doesn't match, force script installations - _this3.scripts.setForce(true); - return false; - } - - if (!patterns.length && !match.integrityFileMissing) { - _this3.reporter.success( - _this3.reporter.lang('nothingToInstall') - ); - yield _this3.createEmptyManifestFolders(); - yield _this3.saveLockfileAndIntegrity( - patterns, - workspaceLayout - ); - return true; - } - - return false; - } - )(); - } - - /** - * Produce empty folders for all used root manifests. - */ - - createEmptyManifestFolders() { - var _this4 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - if (_this4.config.modulesFolder) { - // already created - return; - } - - for ( - var _iterator9 = _this4.rootManifestRegistries, - _isArray9 = Array.isArray(_iterator9), - _i9 = 0, - _iterator9 = _isArray9 - ? _iterator9 - : _iterator9[Symbol.iterator](); - ; - - ) { - var _ref10; - - if (_isArray9) { - if (_i9 >= _iterator9.length) break; - _ref10 = _iterator9[_i9++]; - } else { - _i9 = _iterator9.next(); - if (_i9.done) break; - _ref10 = _i9.value; - } - - const registryName = _ref10; - const folder = _this4.config.registries[registryName].folder; - - yield (_fs || _load_fs()).mkdirp( - path.join(_this4.config.lockfileFolder, folder) - ); - } - } - )(); - } - - /** - * TODO description - */ - - markIgnored(patterns) { - for ( - var _iterator10 = patterns, - _isArray10 = Array.isArray(_iterator10), - _i10 = 0, - _iterator10 = _isArray10 - ? _iterator10 - : _iterator10[Symbol.iterator](); - ; - - ) { - var _ref11; - - if (_isArray10) { - if (_i10 >= _iterator10.length) break; - _ref11 = _iterator10[_i10++]; - } else { - _i10 = _iterator10.next(); - if (_i10.done) break; - _ref11 = _i10.value; - } - - const pattern = _ref11; - - const manifest = this.resolver.getStrictResolvedPattern(pattern); - const ref = manifest._reference; - invariant(ref, 'expected package reference'); - - // just mark the package as ignored. if the package is used by a required package, the hoister - // will take care of that. - ref.ignore = true; - } - } - - /** - * helper method that gets only recent manifests - * used by global.ls command - */ - getFlattenedDeps() { - var _this5 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - var _ref12 = yield _this5.fetchRequestFromCwd(); - - const depRequests = _ref12.requests, - rawPatterns = _ref12.patterns; - - yield _this5.resolver.init(depRequests, {}); - - const manifests = yield ( - _packageFetcher || _load_packageFetcher() - ).fetch(_this5.resolver.getManifests(), _this5.config); - _this5.resolver.updateManifests(manifests); - - return _this5.flatten(rawPatterns); - } - )(); - } - - /** - * TODO description - */ - - init() { - var _this6 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - _this6.checkUpdate(); - - // warn if we have a shrinkwrap - if ( - yield (_fs || _load_fs()).exists( - path.join( - _this6.config.lockfileFolder, - (_constants || _load_constants()).NPM_SHRINKWRAP_FILENAME - ) - ) - ) { - _this6.reporter.warn(_this6.reporter.lang('shrinkwrapWarning')); - } - - // warn if we have an npm lockfile - if ( - yield (_fs || _load_fs()).exists( - path.join( - _this6.config.lockfileFolder, - (_constants || _load_constants()).NPM_LOCK_FILENAME - ) - ) - ) { - _this6.reporter.warn( - _this6.reporter.lang('npmLockfileWarning') - ); - } - - if (_this6.config.plugnplayEnabled) { - _this6.reporter.info( - _this6.reporter.lang('plugnplaySuggestV2L1') - ); - _this6.reporter.info( - _this6.reporter.lang('plugnplaySuggestV2L2') - ); - } - - let flattenedTopLevelPatterns = []; - const steps = []; - - var _ref13 = yield _this6.fetchRequestFromCwd(); - - const depRequests = _ref13.requests, - rawPatterns = _ref13.patterns, - ignorePatterns = _ref13.ignorePatterns, - workspaceLayout = _ref13.workspaceLayout, - manifest = _ref13.manifest; - - let topLevelPatterns = []; - - const artifacts = yield _this6.integrityChecker.getArtifacts(); - if (artifacts) { - _this6.linker.setArtifacts(artifacts); - _this6.scripts.setArtifacts(artifacts); - } - - if ( - ( - _packageCompatibility || _load_packageCompatibility() - ).shouldCheck(manifest, _this6.flags) - ) { - steps.push( - (() => { - var _ref14 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* (curr, total) { - _this6.reporter.step( - curr, - total, - _this6.reporter.lang('checkingManifest'), - emoji.get('mag') - ); - yield _this6.checkCompatibility(); - } - ); - - return function (_x, _x2) { - return _ref14.apply(this, arguments); - }; - })() - ); - } - - const audit = new (_audit || _load_audit()).default( - _this6.config, - _this6.reporter, - { - groups: (_constants || _load_constants()) - .OWNED_DEPENDENCY_TYPES, - } - ); - let auditFoundProblems = false; - - steps.push(function (curr, total) { - return (0, (_hooks || _load_hooks()).callThroughHook)( - 'resolveStep', - (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - _this6.reporter.step( - curr, - total, - _this6.reporter.lang('resolvingPackages'), - emoji.get('mag') - ); - yield _this6.resolver.init( - _this6.prepareRequests(depRequests), - { - isFlat: _this6.flags.flat, - isFrozen: _this6.flags.frozenLockfile, - workspaceLayout, - } - ); - topLevelPatterns = _this6.preparePatterns(rawPatterns); - flattenedTopLevelPatterns = yield _this6.flatten( - topLevelPatterns - ); - return { - bailout: - !_this6.flags.audit && - (yield _this6.bailout( - topLevelPatterns, - workspaceLayout - )), - }; - } - ) - ); - }); - - if (_this6.flags.audit) { - steps.push(function (curr, total) { - return (0, (_hooks || _load_hooks()).callThroughHook)( - 'auditStep', - (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - _this6.reporter.step( - curr, - total, - _this6.reporter.lang('auditRunning'), - emoji.get('mag') - ); - if (_this6.flags.offline) { - _this6.reporter.warn( - _this6.reporter.lang('auditOffline') - ); - return { bailout: false }; - } - const preparedManifests = - yield _this6.prepareManifests(); - // $FlowFixMe - Flow considers `m` in the map operation to be "mixed", so does not recognize `m.object` - const mergedManifest = Object.assign( - {}, - ...Object.values(preparedManifests).map(function (m) { - return m.object; - }) - ); - const auditVulnerabilityCounts = - yield audit.performAudit( - mergedManifest, - _this6.lockfile, - _this6.resolver, - _this6.linker, - topLevelPatterns - ); - auditFoundProblems = - auditVulnerabilityCounts.info || - auditVulnerabilityCounts.low || - auditVulnerabilityCounts.moderate || - auditVulnerabilityCounts.high || - auditVulnerabilityCounts.critical; - return { - bailout: yield _this6.bailout( - topLevelPatterns, - workspaceLayout - ), - }; - } - ) - ); - }); - } - - steps.push(function (curr, total) { - return (0, (_hooks || _load_hooks()).callThroughHook)( - 'fetchStep', - (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - _this6.markIgnored(ignorePatterns); - _this6.reporter.step( - curr, - total, - _this6.reporter.lang('fetchingPackages'), - emoji.get('truck') - ); - const manifests = yield ( - _packageFetcher || _load_packageFetcher() - ).fetch(_this6.resolver.getManifests(), _this6.config); - _this6.resolver.updateManifests(manifests); - yield ( - _packageCompatibility || _load_packageCompatibility() - ).check( - _this6.resolver.getManifests(), - _this6.config, - _this6.flags.ignoreEngines - ); - } - ) - ); - }); - - steps.push(function (curr, total) { - return (0, (_hooks || _load_hooks()).callThroughHook)( - 'linkStep', - (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - // remove integrity hash to make this operation atomic - yield _this6.integrityChecker.removeIntegrityFile(); - _this6.reporter.step( - curr, - total, - _this6.reporter.lang('linkingDependencies'), - emoji.get('link') - ); - flattenedTopLevelPatterns = - _this6.preparePatternsForLinking( - flattenedTopLevelPatterns, - manifest, - _this6.config.lockfileFolder === _this6.config.cwd - ); - yield _this6.linker.init( - flattenedTopLevelPatterns, - workspaceLayout, - { - linkDuplicates: _this6.flags.linkDuplicates, - ignoreOptional: _this6.flags.ignoreOptional, - } - ); - } - ) - ); - }); - - if (_this6.config.plugnplayEnabled) { - steps.push(function (curr, total) { - return (0, (_hooks || _load_hooks()).callThroughHook)( - 'pnpStep', - (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - const pnpPath = `${_this6.config.lockfileFolder}/${ - (_constants || _load_constants()).PNP_FILENAME - }`; - - const code = yield (0, - (_generatePnpMap || _load_generatePnpMap()) - .generatePnpMap)( - _this6.config, - flattenedTopLevelPatterns, - { - resolver: _this6.resolver, - reporter: _this6.reporter, - targetPath: pnpPath, - workspaceLayout, - } - ); - - try { - const file = yield (_fs || _load_fs()).readFile( - pnpPath - ); - if (file === code) { - return; - } - } catch (error) {} - - yield (_fs || _load_fs()).writeFile(pnpPath, code); - yield (_fs || _load_fs()).chmod(pnpPath, 0o755); - } - ) - ); - }); - } - - steps.push(function (curr, total) { - return (0, (_hooks || _load_hooks()).callThroughHook)( - 'buildStep', - (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - _this6.reporter.step( - curr, - total, - _this6.flags.force - ? _this6.reporter.lang('rebuildingPackages') - : _this6.reporter.lang('buildingFreshPackages'), - emoji.get('hammer') - ); - - if (_this6.config.ignoreScripts) { - _this6.reporter.warn( - _this6.reporter.lang('ignoredScripts') - ); - } else { - yield _this6.scripts.init(flattenedTopLevelPatterns); - } - } - ) - ); - }); - - if (_this6.flags.har) { - steps.push( - (() => { - var _ref21 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* (curr, total) { - const formattedDate = new Date() - .toISOString() - .replace(/:/g, '-'); - const filename = `yarn-install_${formattedDate}.har`; - _this6.reporter.step( - curr, - total, - _this6.reporter.lang('savingHar', filename), - emoji.get('black_circle_for_record') - ); - yield _this6.config.requestManager.saveHar(filename); - } - ); - - return function (_x3, _x4) { - return _ref21.apply(this, arguments); - }; - })() - ); - } - - if (yield _this6.shouldClean()) { - steps.push( - (() => { - var _ref22 = (0, - (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* (curr, total) { - _this6.reporter.step( - curr, - total, - _this6.reporter.lang('cleaningModules'), - emoji.get('recycle') - ); - yield (0, (_autoclean || _load_autoclean()).clean)( - _this6.config, - _this6.reporter - ); - } - ); - - return function (_x5, _x6) { - return _ref22.apply(this, arguments); - }; - })() - ); - } - - let currentStep = 0; - for ( - var _iterator11 = steps, - _isArray11 = Array.isArray(_iterator11), - _i11 = 0, - _iterator11 = _isArray11 - ? _iterator11 - : _iterator11[Symbol.iterator](); - ; - - ) { - var _ref23; - - if (_isArray11) { - if (_i11 >= _iterator11.length) break; - _ref23 = _iterator11[_i11++]; - } else { - _i11 = _iterator11.next(); - if (_i11.done) break; - _ref23 = _i11.value; - } - - const step = _ref23; - - const stepResult = yield step(++currentStep, steps.length); - if (stepResult && stepResult.bailout) { - if (_this6.flags.audit) { - audit.summary(); - } - if (auditFoundProblems) { - _this6.reporter.warn( - _this6.reporter.lang('auditRunAuditForDetails') - ); - } - _this6.maybeOutputUpdate(); - return flattenedTopLevelPatterns; - } - } - - // fin! - if (_this6.flags.audit) { - audit.summary(); - } - if (auditFoundProblems) { - _this6.reporter.warn( - _this6.reporter.lang('auditRunAuditForDetails') - ); - } - yield _this6.saveLockfileAndIntegrity( - topLevelPatterns, - workspaceLayout - ); - yield _this6.persistChanges(); - _this6.maybeOutputUpdate(); - _this6.config.requestManager.clearCache(); - return flattenedTopLevelPatterns; - } - )(); - } - - checkCompatibility() { - var _this7 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - var _ref24 = yield _this7.fetchRequestFromCwd(); - - const manifest = _ref24.manifest; - - yield ( - _packageCompatibility || _load_packageCompatibility() - ).checkOne(manifest, _this7.config, _this7.flags.ignoreEngines); - } - )(); - } - - persistChanges() { - var _this8 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - // get all the different registry manifests in this folder - const manifests = yield _this8.config.getRootManifests(); - - if (yield _this8.applyChanges(manifests)) { - yield _this8.config.saveRootManifests(manifests); - } - } - )(); - } - - applyChanges(manifests) { - let hasChanged = false; - - if (this.config.plugnplayPersist) { - const object = manifests.npm.object; - - if (typeof object.installConfig !== 'object') { - object.installConfig = {}; - } - - if ( - this.config.plugnplayEnabled && - object.installConfig.pnp !== true - ) { - object.installConfig.pnp = true; - hasChanged = true; - } else if ( - !this.config.plugnplayEnabled && - typeof object.installConfig.pnp !== 'undefined' - ) { - delete object.installConfig.pnp; - hasChanged = true; - } - - if (Object.keys(object.installConfig).length === 0) { - delete object.installConfig; - } - } - - return Promise.resolve(hasChanged); - } - - /** - * Check if we should run the cleaning step. - */ - - shouldClean() { - return (_fs || _load_fs()).exists( - path.join( - this.config.lockfileFolder, - (_constants || _load_constants()).CLEAN_FILENAME - ) - ); - } - - /** - * TODO - */ - - flatten(patterns) { - var _this9 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - if (!_this9.flags.flat) { - return patterns; - } - - const flattenedPatterns = []; - - for ( - var _iterator12 = - _this9.resolver.getAllDependencyNamesByLevelOrder(patterns), - _isArray12 = Array.isArray(_iterator12), - _i12 = 0, - _iterator12 = _isArray12 - ? _iterator12 - : _iterator12[Symbol.iterator](); - ; - - ) { - var _ref25; - - if (_isArray12) { - if (_i12 >= _iterator12.length) break; - _ref25 = _iterator12[_i12++]; - } else { - _i12 = _iterator12.next(); - if (_i12.done) break; - _ref25 = _i12.value; - } - - const name = _ref25; - - const infos = _this9.resolver - .getAllInfoForPackageName(name) - .filter(function (manifest) { - const ref = manifest._reference; - invariant(ref, 'expected package reference'); - return !ref.ignore; - }); - - if (infos.length === 0) { - continue; - } - - if (infos.length === 1) { - // single version of this package - // take out a single pattern as multiple patterns may have resolved to this package - flattenedPatterns.push( - _this9.resolver.patternsByPackage[name][0] - ); - continue; - } - - const options = infos.map(function (info) { - const ref = info._reference; - invariant(ref, 'expected reference'); - return { - // TODO `and is required by {PARENT}`, - name: _this9.reporter.lang( - 'manualVersionResolutionOption', - ref.patterns.join(', '), - info.version - ), - - value: info.version, - }; - }); - const versions = infos.map(function (info) { - return info.version; - }); - let version; - - const resolutionVersion = _this9.resolutions[name]; - if ( - resolutionVersion && - versions.indexOf(resolutionVersion) >= 0 - ) { - // use json `resolution` version - version = resolutionVersion; - } else { - version = yield _this9.reporter.select( - _this9.reporter.lang('manualVersionResolution', name), - _this9.reporter.lang('answer'), - options - ); - _this9.resolutions[name] = version; - } - - flattenedPatterns.push( - _this9.resolver.collapseAllVersionsOfPackage(name, version) - ); - } - - // save resolutions to their appropriate root manifest - if (Object.keys(_this9.resolutions).length) { - const manifests = yield _this9.config.getRootManifests(); - - for (const name in _this9.resolutions) { - const version = _this9.resolutions[name]; - - const patterns = _this9.resolver.patternsByPackage[name]; - if (!patterns) { - continue; - } - - let manifest; - for ( - var _iterator13 = patterns, - _isArray13 = Array.isArray(_iterator13), - _i13 = 0, - _iterator13 = _isArray13 - ? _iterator13 - : _iterator13[Symbol.iterator](); - ; - - ) { - var _ref26; - - if (_isArray13) { - if (_i13 >= _iterator13.length) break; - _ref26 = _iterator13[_i13++]; - } else { - _i13 = _iterator13.next(); - if (_i13.done) break; - _ref26 = _i13.value; - } - - const pattern = _ref26; - - manifest = _this9.resolver.getResolvedPattern(pattern); - if (manifest) { - break; - } - } - invariant(manifest, 'expected manifest'); - - const ref = manifest._reference; - invariant(ref, 'expected reference'); - - const object = manifests[ref.registry].object; - object.resolutions = object.resolutions || {}; - object.resolutions[name] = version; - } - - yield _this9.config.saveRootManifests(manifests); - } - - return flattenedPatterns; - } - )(); - } - - /** - * Remove offline tarballs that are no longer required - */ - - pruneOfflineMirror(lockfile) { - var _this10 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - const mirror = _this10.config.getOfflineMirrorPath(); - if (!mirror) { - return; - } - - const requiredTarballs = new Set(); - for (const dependency in lockfile) { - const resolved = lockfile[dependency].resolved; - if (resolved) { - const basename = path.basename(resolved.split('#')[0]); - if (dependency[0] === '@' && basename[0] !== '@') { - requiredTarballs.add( - `${dependency.split('/')[0]}-${basename}` - ); - } - requiredTarballs.add(basename); - } - } - - const mirrorFiles = yield (_fs || _load_fs()).walk(mirror); - for ( - var _iterator14 = mirrorFiles, - _isArray14 = Array.isArray(_iterator14), - _i14 = 0, - _iterator14 = _isArray14 - ? _iterator14 - : _iterator14[Symbol.iterator](); - ; - - ) { - var _ref27; - - if (_isArray14) { - if (_i14 >= _iterator14.length) break; - _ref27 = _iterator14[_i14++]; - } else { - _i14 = _iterator14.next(); - if (_i14.done) break; - _ref27 = _i14.value; - } - - const file = _ref27; - - const isTarball = path.extname(file.basename) === '.tgz'; - // if using experimental-pack-script-packages-in-mirror flag, don't unlink prebuilt packages - const hasPrebuiltPackage = - file.relative.startsWith('prebuilt/'); - if ( - isTarball && - !hasPrebuiltPackage && - !requiredTarballs.has(file.basename) - ) { - yield (_fs || _load_fs()).unlink(file.absolute); - } - } - } - )(); - } - - /** - * Save updated integrity and lockfiles. - */ - - saveLockfileAndIntegrity(patterns, workspaceLayout) { - var _this11 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - const resolvedPatterns = {}; - Object.keys(_this11.resolver.patterns).forEach(function ( - pattern - ) { - if ( - !workspaceLayout || - !workspaceLayout.getManifestByPattern(pattern) - ) { - resolvedPatterns[pattern] = - _this11.resolver.patterns[pattern]; - } - }); - - // TODO this code is duplicated in a few places, need a common way to filter out workspace patterns from lockfile - patterns = patterns.filter(function (p) { - return ( - !workspaceLayout || !workspaceLayout.getManifestByPattern(p) - ); - }); - - const lockfileBasedOnResolver = - _this11.lockfile.getLockfile(resolvedPatterns); - - if (_this11.config.pruneOfflineMirror) { - yield _this11.pruneOfflineMirror(lockfileBasedOnResolver); - } - - // write integrity hash - if (!_this11.config.plugnplayEnabled) { - yield _this11.integrityChecker.save( - patterns, - lockfileBasedOnResolver, - _this11.flags, - workspaceLayout, - _this11.scripts.getArtifacts() - ); - } - - // --no-lockfile or --pure-lockfile or --frozen-lockfile - if ( - _this11.flags.lockfile === false || - _this11.flags.pureLockfile || - _this11.flags.frozenLockfile - ) { - return; - } - - const lockFileHasAllPatterns = patterns.every(function (p) { - return _this11.lockfile.getLocked(p); - }); - const lockfilePatternsMatch = Object.keys( - _this11.lockfile.cache || {} - ).every(function (p) { - return lockfileBasedOnResolver[p]; - }); - const resolverPatternsAreSameAsInLockfile = Object.keys( - lockfileBasedOnResolver - ).every(function (pattern) { - const manifest = _this11.lockfile.getLocked(pattern); - return ( - manifest && - manifest.resolved === - lockfileBasedOnResolver[pattern].resolved && - deepEqual( - manifest.prebuiltVariants, - lockfileBasedOnResolver[pattern].prebuiltVariants - ) - ); - }); - const integrityPatternsAreSameAsInLockfile = Object.keys( - lockfileBasedOnResolver - ).every(function (pattern) { - const existingIntegrityInfo = - lockfileBasedOnResolver[pattern].integrity; - if (!existingIntegrityInfo) { - // if this entry does not have an integrity, no need to re-write the lockfile because of it - return true; - } - const manifest = _this11.lockfile.getLocked(pattern); - if (manifest && manifest.integrity) { - const manifestIntegrity = ssri.stringify(manifest.integrity); - return manifestIntegrity === existingIntegrityInfo; - } - return false; - }); - - // remove command is followed by install with force, lockfile will be rewritten in any case then - if ( - !_this11.flags.force && - _this11.lockfile.parseResultType === 'success' && - lockFileHasAllPatterns && - lockfilePatternsMatch && - resolverPatternsAreSameAsInLockfile && - integrityPatternsAreSameAsInLockfile && - patterns.length - ) { - return; - } - - // build lockfile location - const loc = path.join( - _this11.config.lockfileFolder, - (_constants || _load_constants()).LOCKFILE_FILENAME - ); - - // write lockfile - const lockSource = (0, - (_lockfile2 || _load_lockfile2()).stringify)( - lockfileBasedOnResolver, - false, - _this11.config.enableLockfileVersions - ); - yield (_fs || _load_fs()).writeFilePreservingEol(loc, lockSource); - - _this11._logSuccessSaveLockfile(); - } - )(); - } - - _logSuccessSaveLockfile() { - this.reporter.success(this.reporter.lang('savedLockfile')); - } - - /** - * Load the dependency graph of the current install. Only does package resolving and wont write to the cwd. - */ - hydrate(ignoreUnusedPatterns) { - var _this12 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - const request = yield _this12.fetchRequestFromCwd( - [], - ignoreUnusedPatterns - ); - const depRequests = request.requests, - rawPatterns = request.patterns, - ignorePatterns = request.ignorePatterns, - workspaceLayout = request.workspaceLayout; - - yield _this12.resolver.init(depRequests, { - isFlat: _this12.flags.flat, - isFrozen: _this12.flags.frozenLockfile, - workspaceLayout, - }); - yield _this12.flatten(rawPatterns); - _this12.markIgnored(ignorePatterns); - - // fetch packages, should hit cache most of the time - const manifests = yield ( - _packageFetcher || _load_packageFetcher() - ).fetch(_this12.resolver.getManifests(), _this12.config); - _this12.resolver.updateManifests(manifests); - yield ( - _packageCompatibility || _load_packageCompatibility() - ).check( - _this12.resolver.getManifests(), - _this12.config, - _this12.flags.ignoreEngines - ); - - // expand minimal manifests - for ( - var _iterator15 = _this12.resolver.getManifests(), - _isArray15 = Array.isArray(_iterator15), - _i15 = 0, - _iterator15 = _isArray15 - ? _iterator15 - : _iterator15[Symbol.iterator](); - ; - - ) { - var _ref28; - - if (_isArray15) { - if (_i15 >= _iterator15.length) break; - _ref28 = _iterator15[_i15++]; - } else { - _i15 = _iterator15.next(); - if (_i15.done) break; - _ref28 = _i15.value; - } - - const manifest = _ref28; - - const ref = manifest._reference; - invariant(ref, 'expected reference'); - const type = ref.remote.type; - // link specifier won't ever hit cache - - let loc = ''; - if (type === 'link') { - continue; - } else if (type === 'workspace') { - if (!ref.remote.reference) { - continue; - } - loc = ref.remote.reference; - } else { - loc = _this12.config.generateModuleCachePath(ref); - } - const newPkg = yield _this12.config.readManifest(loc); - yield _this12.resolver.updateManifest(ref, newPkg); - } - - return request; - } - )(); - } - - /** - * Check for updates every day and output a nag message if there's a newer version. - */ - - checkUpdate() { - if (this.config.nonInteractive) { - // don't show upgrade dialog on CI or non-TTY terminals - return; - } - - // don't check if disabled - if (this.config.getOption('disable-self-update-check')) { - return; - } - - // only check for updates once a day - const lastUpdateCheck = - Number(this.config.getOption('lastUpdateCheck')) || 0; - if (lastUpdateCheck && Date.now() - lastUpdateCheck < ONE_DAY) { - return; - } - - // don't bug for updates on tagged releases - if ((_yarnVersion || _load_yarnVersion()).version.indexOf('-') >= 0) { - return; - } - - this._checkUpdate().catch(() => { - // swallow errors - }); - } - - _checkUpdate() { - var _this13 = this; - - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( - function* () { - let latestVersion = yield _this13.config.requestManager.request({ - url: (_constants || _load_constants()).SELF_UPDATE_VERSION_URL, - }); - invariant(typeof latestVersion === 'string', 'expected string'); - latestVersion = latestVersion.trim(); - if (!semver.valid(latestVersion)) { - return; - } - - // ensure we only check for updates periodically - _this13.config.registries.yarn.saveHomeConfig({ - lastUpdateCheck: Date.now(), - }); - - if ( - semver.gt( - latestVersion, - (_yarnVersion || _load_yarnVersion()).version - ) - ) { - const installationMethod = yield (0, - (_yarnVersion || _load_yarnVersion()).getInstallationMethod)(); - _this13.maybeOutputUpdate = function () { - _this13.reporter.warn( - _this13.reporter.lang( - 'yarnOutdated', - latestVersion, - (_yarnVersion || _load_yarnVersion()).version - ) - ); - - const command = getUpdateCommand(installationMethod); - if (command) { - _this13.reporter.info( - _this13.reporter.lang('yarnOutdatedCommand') - ); - _this13.reporter.command(command); - } else { - const installer = getUpdateInstaller(installationMethod); - if (installer) { - _this13.reporter.info( - _this13.reporter.lang( - 'yarnOutdatedInstaller', - installer - ) - ); - } - } - }; - } - } - )(); - } - - /** - * Method to override with a possible upgrade message. - */ - - maybeOutputUpdate() {} - } - - exports.Install = Install; - function hasWrapper(commander, args) { - return true; - } - - function setFlags(commander) { - commander.description( - 'Yarn install is used to install all dependencies for a project.' - ); - commander.usage('install [flags]'); - commander.option( - '-A, --audit', - 'Run vulnerability audit on installed packages' - ); - commander.option('-g, --global', 'DEPRECATED'); - commander.option( - '-S, --save', - 'DEPRECATED - save package to your `dependencies`' - ); - commander.option( - '-D, --save-dev', - 'DEPRECATED - save package to your `devDependencies`' - ); - commander.option( - '-P, --save-peer', - 'DEPRECATED - save package to your `peerDependencies`' - ); - commander.option( - '-O, --save-optional', - 'DEPRECATED - save package to your `optionalDependencies`' - ); - commander.option('-E, --save-exact', 'DEPRECATED'); - commander.option('-T, --save-tilde', 'DEPRECATED'); - } - - /***/ - }, - /* 35 */ - /***/ function (module, exports, __webpack_require__) { - var isObject = __webpack_require__(53); - module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; - }; - - /***/ - }, - /* 36 */ - /***/ function (module, __webpack_exports__, __webpack_require__) { - 'use strict'; - /* harmony export (binding) */ __webpack_require__.d( - __webpack_exports__, - 'b', - function () { - return SubjectSubscriber; - } - ); - /* harmony export (binding) */ __webpack_require__.d( - __webpack_exports__, - 'a', - function () { - return Subject; - } - ); - /* unused harmony export AnonymousSubject */ - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = - __webpack_require__(1); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Observable__ = - __webpack_require__(12); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Subscriber__ = - __webpack_require__(7); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Subscription__ = - __webpack_require__(25); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_ObjectUnsubscribedError__ = - __webpack_require__(190); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__SubjectSubscription__ = - __webpack_require__(422); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__internal_symbol_rxSubscriber__ = - __webpack_require__(321); - /** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */ - - var SubjectSubscriber = /*@__PURE__*/ (function (_super) { - __WEBPACK_IMPORTED_MODULE_0_tslib__['a' /* __extends */]( - SubjectSubscriber, - _super - ); - function SubjectSubscriber(destination) { - var _this = _super.call(this, destination) || this; - _this.destination = destination; - return _this; - } - return SubjectSubscriber; - })(__WEBPACK_IMPORTED_MODULE_2__Subscriber__['a' /* Subscriber */]); - - var Subject = /*@__PURE__*/ (function (_super) { - __WEBPACK_IMPORTED_MODULE_0_tslib__['a' /* __extends */]( - Subject, - _super - ); - function Subject() { - var _this = _super.call(this) || this; - _this.observers = []; - _this.closed = false; - _this.isStopped = false; - _this.hasError = false; - _this.thrownError = null; - return _this; - } - Subject.prototype[ - __WEBPACK_IMPORTED_MODULE_6__internal_symbol_rxSubscriber__[ - 'a' /* rxSubscriber */ - ] - ] = function () { - return new SubjectSubscriber(this); - }; - Subject.prototype.lift = function (operator) { - var subject = new AnonymousSubject(this, this); - subject.operator = operator; - return subject; - }; - Subject.prototype.next = function (value) { - if (this.closed) { - throw new __WEBPACK_IMPORTED_MODULE_4__util_ObjectUnsubscribedError__[ - 'a' /* ObjectUnsubscribedError */ - ](); - } - if (!this.isStopped) { - var observers = this.observers; - var len = observers.length; - var copy = observers.slice(); - for (var i = 0; i < len; i++) { - copy[i].next(value); - } - } - }; - Subject.prototype.error = function (err) { - if (this.closed) { - throw new __WEBPACK_IMPORTED_MODULE_4__util_ObjectUnsubscribedError__[ - 'a' /* ObjectUnsubscribedError */ - ](); - } - this.hasError = true; - this.thrownError = err; - this.isStopped = true; - var observers = this.observers; - var len = observers.length; - var copy = observers.slice(); - for (var i = 0; i < len; i++) { - copy[i].error(err); - } - this.observers.length = 0; - }; - Subject.prototype.complete = function () { - if (this.closed) { - throw new __WEBPACK_IMPORTED_MODULE_4__util_ObjectUnsubscribedError__[ - 'a' /* ObjectUnsubscribedError */ - ](); - } - this.isStopped = true; - var observers = this.observers; - var len = observers.length; - var copy = observers.slice(); - for (var i = 0; i < len; i++) { - copy[i].complete(); - } - this.observers.length = 0; - }; - Subject.prototype.unsubscribe = function () { - this.isStopped = true; - this.closed = true; - this.observers = null; - }; - Subject.prototype._trySubscribe = function (subscriber) { - if (this.closed) { - throw new __WEBPACK_IMPORTED_MODULE_4__util_ObjectUnsubscribedError__[ - 'a' /* ObjectUnsubscribedError */ - ](); - } else { - return _super.prototype._trySubscribe.call(this, subscriber); - } - }; - Subject.prototype._subscribe = function (subscriber) { - if (this.closed) { - throw new __WEBPACK_IMPORTED_MODULE_4__util_ObjectUnsubscribedError__[ - 'a' /* ObjectUnsubscribedError */ - ](); - } else if (this.hasError) { - subscriber.error(this.thrownError); - return __WEBPACK_IMPORTED_MODULE_3__Subscription__[ - 'a' /* Subscription */ - ].EMPTY; - } else if (this.isStopped) { - subscriber.complete(); - return __WEBPACK_IMPORTED_MODULE_3__Subscription__[ - 'a' /* Subscription */ - ].EMPTY; - } else { - this.observers.push(subscriber); - return new __WEBPACK_IMPORTED_MODULE_5__SubjectSubscription__[ - 'a' /* SubjectSubscription */ - ](this, subscriber); - } - }; - Subject.prototype.asObservable = function () { - var observable = new __WEBPACK_IMPORTED_MODULE_1__Observable__[ - 'a' /* Observable */ - ](); - observable.source = this; - return observable; - }; - Subject.create = function (destination, source) { - return new AnonymousSubject(destination, source); - }; - return Subject; - })(__WEBPACK_IMPORTED_MODULE_1__Observable__['a' /* Observable */]); - - var AnonymousSubject = /*@__PURE__*/ (function (_super) { - __WEBPACK_IMPORTED_MODULE_0_tslib__['a' /* __extends */]( - AnonymousSubject, - _super - ); - function AnonymousSubject(destination, source) { - var _this = _super.call(this) || this; - _this.destination = destination; - _this.source = source; - return _this; - } - AnonymousSubject.prototype.next = function (value) { - var destination = this.destination; - if (destination && destination.next) { - destination.next(value); - } - }; - AnonymousSubject.prototype.error = function (err) { - var destination = this.destination; - if (destination && destination.error) { - this.destination.error(err); - } - }; - AnonymousSubject.prototype.complete = function () { - var destination = this.destination; - if (destination && destination.complete) { - this.destination.complete(); - } - }; - AnonymousSubject.prototype._subscribe = function (subscriber) { - var source = this.source; - if (source) { - return this.source.subscribe(subscriber); - } else { - return __WEBPACK_IMPORTED_MODULE_3__Subscription__[ - 'a' /* Subscription */ - ].EMPTY; - } - }; - return AnonymousSubject; - })(Subject); - - //# sourceMappingURL=Subject.js.map - - /***/ - }, - /* 37 */ - /***/ function (module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, '__esModule', { - value: true, - }); - exports.normalizePattern = normalizePattern; - - /** - * Explode and normalize a pattern into its name and range. - */ - - function normalizePattern(pattern) { - let hasVersion = false; - let range = 'latest'; - let name = pattern; - - // if we're a scope then remove the @ and add it back later - let isScoped = false; - if (name[0] === '@') { - isScoped = true; - name = name.slice(1); - } - - // take first part as the name - const parts = name.split('@'); - if (parts.length > 1) { - name = parts.shift(); - range = parts.join('@'); - - if (range) { - hasVersion = true; - } else { - range = '*'; - } - } - - // add back @ scope suffix - if (isScoped) { - name = `@${name}`; - } - - return { name, range, hasVersion }; - } - - /***/ - }, - /* 38 */ - /***/ function (module, exports, __webpack_require__) { - /* WEBPACK VAR INJECTION */ (function (module) { - var __WEBPACK_AMD_DEFINE_RESULT__; - /** - * @license - * Lodash - * Copyright JS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - (function () { - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.17.10'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Error message constants. */ - var CORE_ERROR_TEXT = - 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', - FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for cloning. */ - var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG], - ]; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - domExcTag = '[object DOMException]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = - /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g, - reTrimStart = /^\s+/, - reTrimEnd = /\s+$/; - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = - rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = - ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = - rsMathOpRange + - rsNonCharRange + - rsPunctuationRange + - rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = - '[^' + - rsAstralRange + - rsBreakRange + - rsDigits + - rsDingbatRange + - rsLowerRange + - rsUpperRange + - ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = - '(?:' + - rsZWJ + - '(?:' + - [rsNonAstral, rsRegional, rsSurrPair].join('|') + - ')' + - rsOptVar + - reOptMod + - ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = - '(?:' + - [rsDingbat, rsRegional, rsSurrPair].join('|') + - ')' + - rsSeq, - rsSymbol = - '(?:' + - [ - rsNonAstral + rsCombo + '?', - rsCombo, - rsRegional, - rsSurrPair, - rsAstral, - ].join('|') + - ')'; - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp( - rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, - 'g' - ); - - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp( - [ - rsUpper + - '?' + - rsLower + - '+' + - rsOptContrLower + - '(?=' + - [rsBreak, rsUpper, '$'].join('|') + - ')', - rsMiscUpper + - '+' + - rsOptContrUpper + - '(?=' + - [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + - ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji, - ].join('|'), - 'g' - ); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp( - '[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']' - ); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = - /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', - 'Buffer', - 'DataView', - 'Date', - 'Error', - 'Float32Array', - 'Float64Array', - 'Function', - 'Int8Array', - 'Int16Array', - 'Int32Array', - 'Map', - 'Math', - 'Object', - 'Promise', - 'RegExp', - 'Set', - 'String', - 'Symbol', - 'TypeError', - 'Uint8Array', - 'Uint8ClampedArray', - 'Uint16Array', - 'Uint32Array', - 'WeakMap', - '_', - 'clearTimeout', - 'isFinite', - 'parseInt', - 'setTimeout', - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = - typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = - typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = - typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = - typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = - true; - typedArrayTags[argsTag] = - typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = - typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = - typedArrayTags[dateTag] = - typedArrayTags[errorTag] = - typedArrayTags[funcTag] = - typedArrayTags[mapTag] = - typedArrayTags[numberTag] = - typedArrayTags[objectTag] = - typedArrayTags[regexpTag] = - typedArrayTags[setTag] = - typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = - false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = - cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = - cloneableTags[dataViewTag] = - cloneableTags[boolTag] = - cloneableTags[dateTag] = - cloneableTags[float32Tag] = - cloneableTags[float64Tag] = - cloneableTags[int8Tag] = - cloneableTags[int16Tag] = - cloneableTags[int32Tag] = - cloneableTags[mapTag] = - cloneableTags[numberTag] = - cloneableTags[objectTag] = - cloneableTags[regexpTag] = - cloneableTags[setTag] = - cloneableTags[stringTag] = - cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = - cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = - cloneableTags[uint32Tag] = - true; - cloneableTags[errorTag] = - cloneableTags[funcTag] = - cloneableTags[weakMapTag] = - false; - - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', - '\xc1': 'A', - '\xc2': 'A', - '\xc3': 'A', - '\xc4': 'A', - '\xc5': 'A', - '\xe0': 'a', - '\xe1': 'a', - '\xe2': 'a', - '\xe3': 'a', - '\xe4': 'a', - '\xe5': 'a', - '\xc7': 'C', - '\xe7': 'c', - '\xd0': 'D', - '\xf0': 'd', - '\xc8': 'E', - '\xc9': 'E', - '\xca': 'E', - '\xcb': 'E', - '\xe8': 'e', - '\xe9': 'e', - '\xea': 'e', - '\xeb': 'e', - '\xcc': 'I', - '\xcd': 'I', - '\xce': 'I', - '\xcf': 'I', - '\xec': 'i', - '\xed': 'i', - '\xee': 'i', - '\xef': 'i', - '\xd1': 'N', - '\xf1': 'n', - '\xd2': 'O', - '\xd3': 'O', - '\xd4': 'O', - '\xd5': 'O', - '\xd6': 'O', - '\xd8': 'O', - '\xf2': 'o', - '\xf3': 'o', - '\xf4': 'o', - '\xf5': 'o', - '\xf6': 'o', - '\xf8': 'o', - '\xd9': 'U', - '\xda': 'U', - '\xdb': 'U', - '\xdc': 'U', - '\xf9': 'u', - '\xfa': 'u', - '\xfb': 'u', - '\xfc': 'u', - '\xdd': 'Y', - '\xfd': 'y', - '\xff': 'y', - '\xc6': 'Ae', - '\xe6': 'ae', - '\xde': 'Th', - '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', - '\u0102': 'A', - '\u0104': 'A', - '\u0101': 'a', - '\u0103': 'a', - '\u0105': 'a', - '\u0106': 'C', - '\u0108': 'C', - '\u010a': 'C', - '\u010c': 'C', - '\u0107': 'c', - '\u0109': 'c', - '\u010b': 'c', - '\u010d': 'c', - '\u010e': 'D', - '\u0110': 'D', - '\u010f': 'd', - '\u0111': 'd', - '\u0112': 'E', - '\u0114': 'E', - '\u0116': 'E', - '\u0118': 'E', - '\u011a': 'E', - '\u0113': 'e', - '\u0115': 'e', - '\u0117': 'e', - '\u0119': 'e', - '\u011b': 'e', - '\u011c': 'G', - '\u011e': 'G', - '\u0120': 'G', - '\u0122': 'G', - '\u011d': 'g', - '\u011f': 'g', - '\u0121': 'g', - '\u0123': 'g', - '\u0124': 'H', - '\u0126': 'H', - '\u0125': 'h', - '\u0127': 'h', - '\u0128': 'I', - '\u012a': 'I', - '\u012c': 'I', - '\u012e': 'I', - '\u0130': 'I', - '\u0129': 'i', - '\u012b': 'i', - '\u012d': 'i', - '\u012f': 'i', - '\u0131': 'i', - '\u0134': 'J', - '\u0135': 'j', - '\u0136': 'K', - '\u0137': 'k', - '\u0138': 'k', - '\u0139': 'L', - '\u013b': 'L', - '\u013d': 'L', - '\u013f': 'L', - '\u0141': 'L', - '\u013a': 'l', - '\u013c': 'l', - '\u013e': 'l', - '\u0140': 'l', - '\u0142': 'l', - '\u0143': 'N', - '\u0145': 'N', - '\u0147': 'N', - '\u014a': 'N', - '\u0144': 'n', - '\u0146': 'n', - '\u0148': 'n', - '\u014b': 'n', - '\u014c': 'O', - '\u014e': 'O', - '\u0150': 'O', - '\u014d': 'o', - '\u014f': 'o', - '\u0151': 'o', - '\u0154': 'R', - '\u0156': 'R', - '\u0158': 'R', - '\u0155': 'r', - '\u0157': 'r', - '\u0159': 'r', - '\u015a': 'S', - '\u015c': 'S', - '\u015e': 'S', - '\u0160': 'S', - '\u015b': 's', - '\u015d': 's', - '\u015f': 's', - '\u0161': 's', - '\u0162': 'T', - '\u0164': 'T', - '\u0166': 'T', - '\u0163': 't', - '\u0165': 't', - '\u0167': 't', - '\u0168': 'U', - '\u016a': 'U', - '\u016c': 'U', - '\u016e': 'U', - '\u0170': 'U', - '\u0172': 'U', - '\u0169': 'u', - '\u016b': 'u', - '\u016d': 'u', - '\u016f': 'u', - '\u0171': 'u', - '\u0173': 'u', - '\u0174': 'W', - '\u0175': 'w', - '\u0176': 'Y', - '\u0177': 'y', - '\u0178': 'Y', - '\u0179': 'Z', - '\u017b': 'Z', - '\u017d': 'Z', - '\u017a': 'z', - '\u017c': 'z', - '\u017e': 'z', - '\u0132': 'IJ', - '\u0133': 'ij', - '\u0152': 'Oe', - '\u0153': 'oe', - '\u0149': "'n", - '\u017f': 's', - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'", - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029', - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = - typeof global == 'object' && - global && - global.Object === Object && - global; - - /** Detect free variable `self`. */ - var freeSelf = - typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = - typeof exports == 'object' && - exports && - !exports.nodeType && - exports; - - /** Detect free variable `module`. */ - var freeModule = - freeExports && - typeof module == 'object' && - module && - !module.nodeType && - module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function () { - try { - // Use `util.types` for Node.js 10+. - var types = - freeModule && - freeModule.require && - freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return ( - freeProcess && - freeProcess.binding && - freeProcess.binding('util') - ); - } catch (e) {} - })(); - - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /*--------------------------------------------------------------------------*/ - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: - return func.call(thisArg); - case 1: - return func.call(thisArg, args[0]); - case 2: - return func.call(thisArg, args[0], args[1]); - case 3: - return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function (value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while (fromRight ? index-- : ++index < length) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); - } - - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; - } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? baseSum(array, iteratee) / length : NAN; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function (object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function (key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce( - collection, - iteratee, - accumulator, - initAccum, - eachFunc - ) { - eachFunc(collection, function (value, index, collection) { - accumulator = initAccum - ? ((initAccum = false), value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : result + current; - } - } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function (key) { - return [key, object[key]]; - }); - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function (value) { - return func(value); - }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function (key) { - return object[key]; - }); - } - - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while ( - ++index < length && - baseIndexOf(chrSymbols, strSymbols[index], 0) > -1 - ) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while ( - index-- && - baseIndexOf(chrSymbols, strSymbols[index], 0) > -1 - ) {} - return index; - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters); - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function (value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function (arg) { - return func(transform(arg)); - }; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - - /** - * Gets the value at `key`, unless `key` is "__proto__". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function safeGet(object, key) { - return key == '__proto__' ? undefined : object[key]; - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function (value) { - result[++index] = value; - }); - return result; - } - - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function (value) { - result[++index] = [value, value]; - }); - return result; - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = (reUnicode.lastIndex = 0); - while (reUnicode.test(string)) { - ++result; - } - return result; - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = function runInContext(context) { - context = - context == null - ? root - : _.defaults( - root.Object(), - context, - _.pick(root, contextProps) - ); - - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function () { - var uid = /[^.]+$/.exec( - (coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO) || - '' - ); - return uid ? 'Symbol(src)_1.' + uid : ''; - })(); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp( - '^' + - funcToString - .call(hasOwnProperty) - .replace(reRegExpChar, '\\$&') - .replace( - /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, - '$1.*?' - ) + - '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, - symIterator = Symbol ? Symbol.iterator : undefined, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; - - var defineProperty = (function () { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - })(); - - /** Mocked built-ins. */ - var ctxClearTimeout = - context.clearTimeout !== root.clearTimeout && - context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = - context.setTimeout !== root.setTimeout && context.setTimeout; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap(); - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if ( - isObjectLike(value) && - !isArray(value) && - !(value instanceof LazyWrapper) - ) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function () { - function object() {} - return function (proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object(); - object.prototype = undefined; - return result; - }; - })(); - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB) as well as ES2015 template strings. Change the - * following template settings to use alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - escape: reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - evaluate: reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - interpolate: reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - variable: '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - imports: { - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - _: lodash, - }, - }; - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : start - 1, - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if ( - !isArr || - (!isRight && arrLength == length && takeCount == length) - ) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate - ? data[key] !== undefined - : hasOwnProperty.call(data, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = - nativeCreate && value === undefined ? HASH_UNDEFINED : value; - return this; - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - hash: new Hash(), - map: new (Map || ListCache)(), - string: new Hash(), - }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache(); - while (++index < length) { - this.add(values[index]); - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = (this.__data__ = new ListCache(entries)); - this.size = data.size; - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache(); - this.size = 0; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ( - (inherited || hasOwnProperty.call(value, key)) && - !( - skipIndexes && - // Safari 9 has enumerable `arguments.length` in strict mode. - (key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && - (key == 'buffer' || - key == 'byteLength' || - key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length)) - ) - ) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf( - copyArray(array), - baseClamp(n, 0, array.length) - ); - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ( - (value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object)) - ) { - baseAssignValue(object, key, value); - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if ( - !(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object)) - ) { - baseAssignValue(object, key, value); - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function (value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - configurable: true, - enumerable: true, - value: value, - writable: true, - }); - } else { - object[key] = value; - } - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object - ? customizer(value, key, object, stack) - : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = isFlat || isFunc ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack()); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (isSet(value)) { - value.forEach(function (subValue) { - result.add( - baseClone( - subValue, - bitmask, - customizer, - subValue, - value, - stack - ) - ); - }); - - return result; - } - - if (isMap(value)) { - value.forEach(function (subValue, key) { - result.set( - key, - baseClone(subValue, bitmask, customizer, key, value, stack) - ); - }); - - return result; - } - - var keysFunc = isFull - ? isFlat - ? getAllKeysIn - : getAllKeys - : isFlat - ? keysIn - : keys; - - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function (subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue( - result, - key, - baseClone(subValue, bitmask, customizer, key, value, stack) - ); - }); - return result; - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source); - return function (object) { - return baseConformsTo(object, source, props); - }; - } - - /** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ( - (value === undefined && !(key in object)) || - !predicate(value) - ) { - return false; - } - } - return true; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function () { - func.apply(undefined, args); - }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function (value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if ( - current != null && - (computed === undefined - ? current === current && !isSymbol(current) - : comparator(current, computed)) - ) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end === undefined || end > length ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function (value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function (key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return index && index == length ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) - ? result - : arrayPush(result, symbolsFunc(object)); - } - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object(value) - ? getRawTag(value) - : objectToString(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return ( - number >= nativeMin(start, end) && - number < nativeMax(start, end) - ); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = - !comparator && - (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = comparator || value !== 0 ? value : 0; - if ( - !(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator)) - ) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if ( - !(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function (value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } - - /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if ( - value == null || - other == null || - (!isObjectLike(value) && !isObjectLike(other)) - ) { - return value !== value && other !== other; - } - return baseIsEqualDeep( - value, - other, - bitmask, - customizer, - baseIsEqual, - stack - ); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack()); - return objIsArr || isTypedArray(object) - ? equalArrays( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ) - : equalByTag( - object, - other, - objTag, - bitmask, - customizer, - equalFunc, - stack - ); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = - objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = - othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack()); - return equalFunc( - objUnwrapped, - othUnwrapped, - bitmask, - customizer, - stack - ); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack()); - return equalObjects( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ); - } - - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ( - noCustomizer && data[2] - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack(); - if (customizer) { - var result = customizer( - objValue, - srcValue, - key, - object, - source, - stack - ); - } - if ( - !(result === undefined - ? baseIsEqual( - srcValue, - objValue, - COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, - customizer, - stack - ) - : result) - ) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return ( - isObjectLike(value) && - isLength(value.length) && - !!typedArrayTags[baseGetTag(value)] - ); - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if ( - !( - key == 'constructor' && - (isProto || !hasOwnProperty.call(object, key)) - ) - ) { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) - ? Array(collection.length) - : []; - - baseEach(collection, function (value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable( - matchData[0][0], - matchData[0][1] - ); - } - return function (object) { - return ( - object === source || baseIsMatch(object, source, matchData) - ); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function (object) { - var objValue = get(object, path); - return objValue === undefined && objValue === srcValue - ? hasIn(object, path) - : baseIsEqual( - srcValue, - objValue, - COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG - ); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor( - source, - function (srcValue, key) { - if (isObject(srcValue)) { - stack || (stack = new Stack()); - baseMergeDeep( - object, - source, - key, - srcIndex, - baseMerge, - customizer, - stack - ); - } else { - var newValue = customizer - ? customizer( - safeGet(object, key), - srcValue, - key + '', - object, - source, - stack - ) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, - keysIn - ); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep( - object, - source, - key, - srcIndex, - mergeFunc, - customizer, - stack - ) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer( - objValue, - srcValue, - key + '', - object, - source, - stack - ) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } else { - newValue = []; - } - } else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } else if ( - !isObject(objValue) || - (srcIndex && isFunction(objValue)) - ) { - newValue = initCloneObject(srcValue); - } - } else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap( - iteratees.length ? iteratees : [identity], - baseUnary(getIteratee()) - ); - - var result = baseMap( - collection, - function (value, key, collection) { - var criteria = arrayMap(iteratees, function (iteratee) { - return iteratee(value); - }); - return { criteria: criteria, index: ++index, value: value }; - } - ); - - return baseSortBy(result, function (object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, paths) { - return basePickBy(object, paths, function (value, path) { - return hasIn(object, path); - }); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function (object) { - return baseGet(object, path); - }; - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ( - (fromIndex = indexOf(seen, computed, fromIndex, comparator)) > - -1 - ) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values(collection)); - } - - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer - ? customizer(objValue, key, nested) - : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : isIndex(path[index + 1]) - ? [] - : {}; - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap - ? identity - : function (func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty - ? identity - : function (func, string) { - return defineProperty(func, 'toString', { - configurable: true, - enumerable: false, - value: constant(string), - writable: true, - }); - }; - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : (end - start) >>> 0; - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function (value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length; - - if ( - typeof value == 'number' && - value === value && - high <= HALF_MAX_ARRAY_LENGTH - ) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if ( - computed !== null && - !isSymbol(computed) && - (retHighest ? computed <= value : computed < value) - ) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array == null ? 0 : array.length, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = - othIsReflexive && - othIsDefined && - (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = - othIsReflexive && - othIsDefined && - !othIsNull && - (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? computed <= value : computed < value; - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } - - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = value + ''; - return result == '0' && 1 / value == -INFINITY ? '-0' : result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache(); - } else { - seen = iteratee ? [] : result; - } - outer: while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; - } - - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet( - object, - path, - updater(baseGet(object, path)), - customizer - ); - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ( - (fromRight ? index-- : ++index < length) && - predicate(array[index], index, array) - ) {} - - return isDrop - ? baseSlice( - array, - fromRight ? 0 : index, - fromRight ? index + 1 : length - ) - : baseSlice( - array, - fromRight ? index + 1 : 0, - fromRight ? length : index - ); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce( - actions, - function (result, action) { - return action.func.apply( - action.thisArg, - arrayPush([result], action.args) - ); - }, - result - ); - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, - result = Array(length); - - while (++index < length) { - var array = arrays[index], - othIndex = -1; - - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference( - result[index] || array, - arrays[othIndex], - iteratee, - comparator - ); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) - ? [value] - : stringToPath(toString(value)); - } - - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest; - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return !start && end >= length - ? array - : baseSlice(array, start, end); - } - - /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). - * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. - */ - var clearTimeout = - ctxClearTimeout || - function (id) { - return root.clearTimeout(id); - }; - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe - ? allocUnsafe(length) - : new buffer.constructor(length); - - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep - ? cloneArrayBuffer(dataView.buffer) - : dataView.buffer; - return new dataView.constructor( - buffer, - dataView.byteOffset, - dataView.byteLength - ); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor( - regexp.source, - reFlags.exec(regexp) - ); - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep - ? cloneArrayBuffer(typedArray.buffer) - : typedArray.buffer; - return new typedArray.constructor( - buffer, - typedArray.byteOffset, - typedArray.length - ); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ( - (!othIsNull && - !othIsSymbol && - !valIsSymbol && - value > other) || - (valIsSymbol && - othIsDefined && - othIsReflexive && - !othIsNull && - !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive - ) { - return 1; - } - if ( - (!valIsNull && - !valIsSymbol && - !othIsSymbol && - value < other) || - (othIsSymbol && - valIsDefined && - valIsReflexive && - !valIsNull && - !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive - ) { - return -1; - } - } - return 0; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending( - objCriteria[index], - othCriteria[index] - ); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function (collection, iteratee) { - var func = isArray(collection) - ? arrayAggregator - : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func( - collection, - setter, - getIteratee(iteratee, 2), - accumulator - ); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function (object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = - assigner.length > 3 && typeof customizer == 'function' - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function (collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while (fromRight ? index-- : ++index < length) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function (object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = - this && this !== root && this instanceof wrapper - ? Ctor - : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function (string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols ? strSymbols[0] : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function (string) { - return arrayReduce( - words(deburr(string).replace(reApos, '')), - callback, - '' - ); - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function () { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: - return new Ctor(); - case 1: - return new Ctor(args[0]); - case 2: - return new Ctor(args[0], args[1]); - case 3: - return new Ctor(args[0], args[1], args[2]); - case 4: - return new Ctor(args[0], args[1], args[2], args[3]); - case 5: - return new Ctor( - args[0], - args[1], - args[2], - args[3], - args[4] - ); - case 6: - return new Ctor( - args[0], - args[1], - args[2], - args[3], - args[4], - args[5] - ); - case 7: - return new Ctor( - args[0], - args[1], - args[2], - args[3], - args[4], - args[5], - args[6] - ); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = - length < 3 && - args[0] !== placeholder && - args[length - 1] !== placeholder - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, - bitmask, - createHybrid, - wrapper.placeholder, - undefined, - args, - holders, - undefined, - undefined, - arity - length - ); - } - var fn = - this && this !== root && this instanceof wrapper - ? Ctor - : func; - return apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function (collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function (key) { - return iteratee(iterable[key], key, iterable); - }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 - ? iterable[iteratee ? collection[index] : index] - : undefined; - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return flatRest(function (funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if ( - data && - isLaziable(data[0]) && - data[1] == - (WRAP_ARY_FLAG | - WRAP_CURRY_FLAG | - WRAP_PARTIAL_FLAG | - WRAP_REARG_FLAG) && - !data[4].length && - data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply( - wrapper, - data[3] - ); - } else { - wrapper = - func.length == 1 && isLaziable(func) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function () { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid( - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary, - arity - ) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight( - args, - partialsRight, - holdersRight, - isCurried - ); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, - bitmask, - createHybrid, - wrapper.placeholder, - thisArg, - args, - newHolders, - argPos, - ary, - arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function (object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator, defaultValue) { - return function (value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return flatRest(function (iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function (args) { - var thisArg = this; - return arrayFunc(iteratees, function (iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat( - chars, - nativeCeil(length / stringSize(chars)) - ); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = - this && this !== root && this instanceof wrapper - ? Ctor - : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function (start, end, step) { - if ( - step && - typeof step != 'number' && - isIterateeCall(start, end, step) - ) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = - step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function (value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry( - func, - bitmask, - wrapFunc, - placeholder, - thisArg, - partials, - holders, - argPos, - ary, - arity - ) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG; - bitmask &= ~(isCurry - ? WRAP_PARTIAL_RIGHT_FLAG - : WRAP_PARTIAL_FLAG); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, - bitmask, - thisArg, - newPartials, - newHolders, - newPartialsRight, - newHoldersRight, - argPos, - ary, - arity, - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function (number, precision) { - number = toNumber(number); - precision = - precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } - - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !( - Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY - ) - ? noop - : function (values) { - return new Set(values); - }; - - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function (object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap( - func, - bitmask, - thisArg, - partials, - holders, - argPos, - ary, - arity - ) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary, - arity, - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = - newData[9] === undefined - ? isBindKey - ? 0 - : func.length - : nativeMax(newData[9] - length, 0); - - if ( - !arity && - bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG) - ) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if ( - bitmask == WRAP_CURRY_FLAG || - bitmask == WRAP_CURRY_RIGHT_FLAG - ) { - result = createCurry(func, bitmask, arity); - } else if ( - (bitmask == WRAP_PARTIAL_FLAG || - bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && - !holders.length - ) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } - - /** - * Used by `_.defaults` to customize its `_.assignIn` use to assign properties - * of source objects to the destination object for all destination properties - * that resolve to `undefined`. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if ( - objValue === undefined || - (eq(objValue, objectProto[key]) && - !hasOwnProperty.call(object, key)) - ) { - return srcValue; - } - return objValue; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source - * objects into destination objects that are passed thru. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function customDefaultsMerge( - objValue, - srcValue, - key, - object, - source, - stack - ) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge( - objValue, - srcValue, - undefined, - customDefaultsMerge, - stack - ); - stack['delete'](srcValue); - } - return objValue; - } - - /** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. - * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. - */ - function customOmitClone(value) { - return isPlainObject(value) ? undefined : value; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays( - array, - other, - bitmask, - customizer, - equalFunc, - stack - ) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if ( - arrLength != othLength && - !(isPartial && othLength > arrLength) - ) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = - bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer( - arrValue, - othValue, - index, - array, - other, - stack - ); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if ( - !arraySome(other, function (othValue, othIndex) { - if ( - !cacheHas(seen, othIndex) && - (arrValue === othValue || - equalFunc( - arrValue, - othValue, - bitmask, - customizer, - stack - )) - ) { - return seen.push(othIndex); - } - }) - ) { - result = false; - break; - } - } else if ( - !( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - ) - ) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag( - object, - other, - tag, - bitmask, - customizer, - equalFunc, - stack - ) { - switch (tag) { - case dataViewTag: - if ( - object.byteLength != other.byteLength || - object.byteOffset != other.byteOffset - ) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ( - object.byteLength != other.byteLength || - !equalFunc(new Uint8Array(object), new Uint8Array(other)) - ) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return ( - object.name == other.name && object.message == other.message - ); - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == other + ''; - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays( - convert(object), - convert(other), - bitmask, - customizer, - equalFunc, - stack - ); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return ( - symbolValueOf.call(object) == symbolValueOf.call(other) - ); - } - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects( - object, - other, - bitmask, - customizer, - equalFunc, - stack - ) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if ( - !(isPartial ? key in other : hasOwnProperty.call(other, key)) - ) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if ( - !(compared === undefined - ? objValue === othValue || - equalFunc(objValue, othValue, bitmask, customizer, stack) - : compared) - ) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if ( - objCtor != othCtor && - 'constructor' in object && - 'constructor' in other && - !( - typeof objCtor == 'function' && - objCtor instanceof objCtor && - typeof othCtor == 'function' && - othCtor instanceof othCtor - ) - ) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap - ? noop - : function (func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = func.name + '', - array = realNames[result], - length = hasOwnProperty.call(realNames, result) - ? array.length - : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') - ? lodash - : func; - return object.placeholder; - } - - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length - ? result(arguments[0], arguments[1]) - : result; - } - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; - } - - /** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = !nativeGetSymbols - ? stubArray - : function (object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter( - nativeGetSymbols(object), - function (symbol) { - return propertyIsEnumerable.call(object, symbol); - } - ); - }; - - /** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols - ? stubArray - : function (object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag; - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ( - (DataView && - getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map()) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set()) != setTag) || - (WeakMap && getTag(new WeakMap()) != weakMapTag) - ) { - getTag = function (value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: - return dataViewTag; - case mapCtorString: - return mapTag; - case promiseCtorString: - return promiseTag; - case setCtorString: - return setTag; - case weakMapCtorString: - return weakMapTag; - } - } - return result; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': - start += size; - break; - case 'dropRight': - end -= size; - break; - case 'take': - end = nativeMin(end, start + size); - break; - case 'takeRight': - start = nativeMax(start, end - size); - break; - } - } - return { start: start, end: end }; - } - - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return ( - !!length && - isLength(length) && - isIndex(key, length) && - (isArray(object) || isArguments(object)) - ); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if ( - length && - typeof array[0] == 'string' && - hasOwnProperty.call(array, 'index') - ) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return typeof object.constructor == 'function' && - !isPrototype(object) - ? baseCreate(getPrototype(object)) - : {}; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: - case float64Tag: - case int8Tag: - case int16Tag: - case int32Tag: - case uint8Tag: - case uint8ClampedTag: - case uint16Tag: - case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return new Ctor(); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return new Ctor(); - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = - (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace( - reWrapComment, - '{\n/* [wrapped with ' + details + '] */\n' - ); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return ( - isArray(value) || - isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]) - ); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return ( - !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - value > -1 && - value % 1 == 0 && - value < length - ); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if ( - type == 'number' - ? isArrayLike(object) && isIndex(index, object.length) - : type == 'string' && index in object - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if ( - type == 'number' || - type == 'symbol' || - type == 'boolean' || - value == null || - isSymbol(value) - ) { - return true; - } - return ( - reIsPlainProp.test(value) || - !reIsDeepProp.test(value) || - (object != null && value in Object(object)) - ); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return type == 'string' || - type == 'number' || - type == 'symbol' || - type == 'boolean' - ? value !== '__proto__' - : value === null; - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if ( - typeof other != 'function' || - !(funcName in LazyWrapper.prototype) - ) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && maskSrcKey in func; - } - - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = - (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function (object) { - if (object == null) { - return false; - } - return ( - object[key] === srcValue && - (srcValue !== undefined || key in Object(object)) - ); - }; - } - - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function (key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = - newBitmask < - (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - - var isCombo = - (srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG) || - (srcBitmask == WRAP_ARY_FLAG && - bitmask == WRAP_REARG_FLAG && - data[7].length <= source[8]) || - (srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && - source[7].length <= source[8] && - bitmask == WRAP_CURRY_FLAG); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= - bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials - ? composeArgs(partials, value, source[4]) - : value; - data[4] = partials - ? replaceHolders(data[3], PLACEHOLDER) - : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials - ? composeArgsRight(partials, value, source[6]) - : value; - data[6] = partials - ? replaceHolders(data[5], PLACEHOLDER) - : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = - data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax( - start === undefined ? func.length - 1 : start, - 0 - ); - return function () { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length < 2 - ? object - : baseGet(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) - ? oldArray[index] - : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData); - - /** - * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @returns {number|Object} Returns the timer id or timeout object. - */ - var setTimeout = - ctxSetTimeout || - function (func, wait) { - return root.setTimeout(func, wait); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = reference + ''; - return setToString( - wrapper, - insertWrapDetails( - source, - updateWrapDetails(getWrapDetails(source), bitmask) - ) - ); - } - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function () { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function (string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace( - rePropName, - function (match, number, quote, subString) { - result.push( - quote - ? subString.replace(reEscapeChar, '$1') - : number || match - ); - } - ); - return result; - }); - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = value + ''; - return result == '0' && 1 / value == -INFINITY ? '-0' : result; - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return func + ''; - } catch (e) {} - } - return ''; - } - - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function (pair) { - var value = '_.' + pair[0]; - if (bitmask & pair[1] && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper( - wrapper.__wrapped__, - wrapper.__chain__ - ); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if ( - guard ? isIterateeCall(array, size, guard) : size === undefined - ) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush( - isArray(array) ? copyArray(array) : [array], - baseFlatten(args, 1) - ); - } - - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function (array, values) { - return isArrayLikeObject(array) - ? baseDifference( - array, - baseFlatten(values, 1, isArrayLikeObject, true) - ) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = baseRest(function (array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference( - array, - baseFlatten(values, 1, isArrayLikeObject, true), - getIteratee(iteratee, 2) - ) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = baseRest(function (array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference( - array, - baseFlatten(values, 1, isArrayLikeObject, true), - undefined, - comparator - ) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === undefined ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === undefined ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if ( - start && - typeof start != 'number' && - isIterateeCall(array, value, start) - ) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = - fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex( - array, - getIteratee(predicate, 3), - index, - true - ); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs == null ? 0 : pairs.length, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return array && array.length ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function (arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return mapped.length && mapped[0] === arrays[0] - ? baseIntersection(mapped) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = baseRest(function (arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] - ? baseIntersection(mapped, getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = baseRest(function (arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - comparator = - typeof comparator == 'function' ? comparator : undefined; - if (comparator) { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] - ? baseIntersection(mapped, undefined, comparator) - : []; - }); - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array == null ? '' : nativeJoin.call(array, separator); - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = - index < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); - } - - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return array && array.length - ? baseNth(array, toInteger(n)) - : undefined; - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = baseRest(pullAll); - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return array && array.length && values && values.length - ? basePullAll(array, values) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return array && array.length && values && values.length - ? basePullAll(array, values, getIteratee(iteratee, 2)) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return array && array.length && values && values.length - ? basePullAll(array, values, undefined, comparator) - : array; - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = flatRest(function (array, indexes) { - var length = array == null ? 0 : array.length, - result = baseAt(array, indexes); - - basePullAt( - array, - arrayMap(indexes, function (index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending) - ); - - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if ( - end && - typeof end != 'number' && - isIterateeCall(array, start, end) - ) { - start = 0; - end = length; - } else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy( - array, - value, - getIteratee(iteratee, 2), - true - ); - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return array && array.length ? baseSortedUniq(array) : []; - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return array && array.length - ? baseSortedUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 1, length) : []; - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = guard || n === undefined ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === undefined ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return array && array.length - ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function (arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = baseRest(function (arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq( - baseFlatten(arrays, 1, isArrayLikeObject, true), - getIteratee(iteratee, 2) - ); - }); - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. Result values are chosen from - * the first array in which the value occurs. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = baseRest(function (arrays) { - var comparator = last(arrays); - comparator = - typeof comparator == 'function' ? comparator : undefined; - return baseUniq( - baseFlatten(arrays, 1, isArrayLikeObject, true), - undefined, - comparator - ); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return array && array.length ? baseUniq(array) : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return array && array.length - ? baseUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The order of result values is - * determined by the order they occur in the array.The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - comparator = - typeof comparator == 'function' ? comparator : undefined; - return array && array.length - ? baseUniq(array, undefined, comparator) - : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function (group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function (index) { - return arrayMap(array, baseProperty(index)); - }); - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function (group) { - return apply(iteratee, undefined, group); - }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function (array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = baseRest(function (arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The order of result values is determined - * by the order they occur in the arrays. The iteratee is invoked with one - * argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = baseRest(function (arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor( - arrayFilter(arrays, isArrayLikeObject), - getIteratee(iteratee, 2) - ); - }); - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The order of result values is - * determined by the order they occur in the arrays. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = baseRest(function (arrays) { - var comparator = last(arrays); - comparator = - typeof comparator == 'function' ? comparator : undefined; - return baseXor( - arrayFilter(arrays, isArrayLikeObject), - undefined, - comparator - ); - }); - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine - * grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = baseRest(function (arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; - - iteratee = - typeof iteratee == 'function' - ? (arrays.pop(), iteratee) - : undefined; - return unzipWith(arrays, iteratee); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function (paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function (object) { - return baseAt(object, paths); - }; - - if ( - length > 1 || - this.__actions__.length || - !(value instanceof LazyWrapper) || - !isIndex(start) - ) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - func: thru, - args: [interceptor], - thisArg: undefined, - }); - return new LodashWrapper(value, this.__chain__).thru(function ( - array - ) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { done: done, value: value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - func: thru, - args: [reverse], - thisArg: undefined, - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function (result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex); - - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function (result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); - - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) - ? collection - : values(collection); - fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? fromIndex <= length && - collection.indexOf(value, fromIndex) > -1 - : !!length && baseIndexOf(collection, value, fromIndex) > -1; - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = baseRest(function (collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - result = isArrayLike(collection) - ? Array(collection.length) - : []; - - baseEach(collection, function (value) { - result[++index] = isFunc - ? apply(path, value, args) - : baseInvoke(value, path, args); - }); - return result; - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function (result, value, key) { - baseAssignValue(result, key, value); - }); - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator( - function (result, value, key) { - result[key ? 0 : 1].push(value); - }, - function () { - return [[], []]; - } - ); - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func( - collection, - getIteratee(iteratee, 4), - accumulator, - initAccum, - baseEach - ); - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; - - return func( - collection, - getIteratee(iteratee, 4), - accumulator, - initAccum, - baseEachRight - ); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if ( - guard ? isIterateeCall(collection, n, guard) : n === undefined - ) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) - ? stringSize(collection) - : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - var sortBy = baseRest(function (collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if ( - length > 1 && - isIterateeCall(collection, iteratees[0], iteratees[1]) - ) { - iteratees = []; - } else if ( - length > 2 && - isIterateeCall(iteratees[0], iteratees[1], iteratees[2]) - ) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = - ctxNow || - function () { - return root.Date.now(); - }; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function () { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = func && n == null ? func.length : n; - return createWrap( - func, - WRAP_ARY_FLAG, - undefined, - undefined, - undefined, - undefined, - n - ); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function () { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function (func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = baseRest(function (object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap( - func, - WRAP_CURRY_FLAG, - undefined, - undefined, - undefined, - undefined, - undefined, - arity - ); - result.placeholder = curry.placeholder; - return result; - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap( - func, - WRAP_CURRY_RIGHT_FLAG, - undefined, - undefined, - undefined, - undefined, - undefined, - arity - ); - result.placeholder = curryRight.placeholder; - return result; - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing - ? nativeMax(toNumber(options.maxWait) || 0, wait) - : maxWait; - trailing = - 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; - - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return ( - lastCallTime === undefined || - timeSinceLastCall >= wait || - timeSinceLastCall < 0 || - (maxing && timeSinceLastInvoke >= maxWait) - ); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function (func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function (func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if ( - typeof func != 'function' || - (resolver != null && typeof resolver != 'function') - ) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function () { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache)(); - return memoized; - } - - // Expose `MapCache`. - memoize.Cache = MapCache; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function () { - var args = arguments; - switch (args.length) { - case 0: - return !predicate.call(this); - case 1: - return !predicate.call(this, args[0]); - case 2: - return !predicate.call(this, args[0], args[1]); - case 3: - return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with its arguments transformed. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms=[_.identity]] - * The argument transforms. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = castRest(function (func, transforms) { - transforms = - transforms.length == 1 && isArray(transforms[0]) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap( - baseFlatten(transforms, 1), - baseUnary(getIteratee()) - ); - - var funcsLength = transforms.length; - return baseRest(function (args) { - var index = -1, - length = nativeMin(args.length, funcsLength); - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = baseRest(function (func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap( - func, - WRAP_PARTIAL_FLAG, - undefined, - partials, - holders - ); - }); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = baseRest(function (func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap( - func, - WRAP_PARTIAL_RIGHT_FLAG, - undefined, - partials, - holders - ); - }); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = flatRest(function (func, indexes) { - return createWrap( - func, - WRAP_REARG_FLAG, - undefined, - undefined, - undefined, - indexes - ); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? start : toInteger(start); - return baseRest(func, start); - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start == null ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function (args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); - - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = - 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - leading: leading, - maxWait: wait, - trailing: trailing, - }); - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } - - /** - * Creates a function that provides `value` to `wrapper` as its first - * argument. Any additional arguments provided to the function are appended - * to those provided to the `wrapper`. The wrapper is invoked with the `this` - * binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - customizer = - typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - customizer = - typeof customizer == 'function' ? customizer : undefined; - return baseClone( - value, - CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, - customizer - ); - } - - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return ( - source == null || baseConformsTo(object, source, keys(source)) - ); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function (value, other) { - return value >= other; - }); - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments( - (function () { - return arguments; - })() - ) - ? baseIsArguments - : function (value) { - return ( - isObjectLike(value) && - hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee') - ); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer - ? baseUnary(nodeIsArrayBuffer) - : baseIsArrayBuffer; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return ( - value != null && isLength(value.length) && !isFunction(value) - ); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return ( - value === true || - value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag) - ); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return ( - isObjectLike(value) && - value.nodeType === 1 && - !isPlainObject(value) - ); - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true; - } - if ( - isArrayLike(value) && - (isArray(value) || - typeof value == 'string' || - typeof value.splice == 'function' || - isBuffer(value) || - isTypedArray(value) || - isArguments(value)) - ) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = - typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined - ? baseIsEqual(value, other, undefined, customizer) - : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return ( - tag == errorTag || - tag == domExcTag || - (typeof value.message == 'string' && - typeof value.name == 'string' && - !isPlainObject(value)) - ); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return ( - tag == funcTag || - tag == genTag || - tag == asyncTag || - tag == proxyTag - ); - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return ( - typeof value == 'number' && - value > -1 && - value % 1 == 0 && - value <= MAX_SAFE_INTEGER - ); - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return ( - object === source || - baseIsMatch(object, source, getMatchData(source)) - ); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = - typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch( - object, - source, - getMatchData(source), - customizer - ); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return ( - typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag) - ); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = - hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return ( - typeof Ctor == 'function' && - Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString - ); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp - ? baseUnary(nodeIsRegExp) - : baseIsRegExp; - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return ( - isInteger(value) && - value >= -MAX_SAFE_INTEGER && - value <= MAX_SAFE_INTEGER - ); - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return ( - typeof value == 'string' || - (!isArray(value) && - isObjectLike(value) && - baseGetTag(value) == stringTag) - ); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return ( - typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag) - ); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray - ? baseUnary(nodeIsTypedArray) - : baseIsTypedArray; - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function (value, other) { - return value <= other; - }); - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) - ? stringToArray(value) - : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), - func = - tag == mapTag - ? mapToArray - : tag == setTag - ? setToArray - : values; - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = value < 0 ? -1 : 1; - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result - ? remainder - ? result - remainder - : result - : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value - ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) - : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = - typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? other + '' : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return isBinary || reIsOctal.test(value) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : reIsBadHex.test(value) - ? NAN - : +value; - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return value - ? baseClamp( - toInteger(value), - -MAX_SAFE_INTEGER, - MAX_SAFE_INTEGER - ) - : value === 0 - ? value - : 0; - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function (object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function (object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function ( - object, - source, - srcIndex, - customizer - ) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function ( - object, - source, - srcIndex, - customizer - ) { - copyObject(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null - ? result - : baseAssign(result, properties); - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function (object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if ( - value === undefined || - (eq(value, objectProto[key]) && - !hasOwnProperty.call(object, key)) - ) { - object[key] = source[key]; - } - } - } - - return object; - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function (args) { - args.push(undefined, customDefaultsMerge); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey( - object, - getIteratee(predicate, 3), - baseForOwnRight - ); - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return ( - object && baseForOwnRight(object, getIteratee(iteratee, 3)) - ); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null - ? [] - : baseFunctions(object, keysIn(object)); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function (result, value, key) { - if (value != null && typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function (result, value, key) { - if (value != null && typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) - ? arrayLikeKeys(object) - : baseKeys(object); - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) - ? arrayLikeKeys(object, true) - : baseKeysIn(object); - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function (value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value); - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function (value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); - }); - return result; - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function (object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function ( - object, - source, - srcIndex, - customizer - ) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function (object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function (path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone( - result, - CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, - customOmitClone - ); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function (object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function (prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object, props, function (value, path) { - return predicate(value, path[0]); - }); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = castPath(path, object); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - length = 1; - object = undefined; - } - while (++index < length) { - var value = - object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = - typeof customizer == 'function' ? customizer : undefined; - return object == null - ? object - : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); - - iteratee = getIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor() : []; - } else if (isObject(object)) { - accumulator = isFunction(Ctor) - ? baseCreate(getPrototype(object)) - : {}; - } else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)( - object, - function (value, index, object) { - return iteratee(accumulator, value, index, object); - } - ); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null - ? object - : baseUpdate(object, path, castFunction(updater)); - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = - typeof customizer == 'function' ? customizer : undefined; - return object == null - ? object - : baseUpdate(object, path, castFunction(updater), customizer); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if ( - floating && - typeof floating != 'boolean' && - isIterateeCall(lower, upper, floating) - ) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin( - lower + - rand * - (upper - - lower + - freeParseFloat('1e-' + ((rand + '').length - 1))), - upper - ); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function (result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return ( - string && - string.replace(reLatin, deburrLetter).replace(reComboMark, '') - ); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = - position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return string && reHasUnescapedHtml.test(string) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return string && reHasRegExpChar.test(string) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function (result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function (result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return length && strLength < length - ? string + createPadding(length - strLength, chars) - : string; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return length && strLength < length - ? createPadding(length - strLength, chars) + string - : string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt( - toString(string).replace(reTrimStart, ''), - radix || 0 - ); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if (guard ? isIterateeCall(string, n, guard) : n === undefined) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 - ? string - : string.replace(args[1], args[2]); - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function (result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if ( - limit && - typeof limit != 'number' && - isIterateeCall(string, separator, limit) - ) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if ( - string && - (typeof separator == 'string' || - (separator != null && !isRegExp(separator))) - ) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function (result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = - position == null - ? 0 - : baseClamp(toInteger(position), 0, string.length); - - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' - - - -
- - - diff --git a/invokeai/frontend/web/dist/locales/ar.json b/invokeai/frontend/web/dist/locales/ar.json deleted file mode 100644 index 7354b21ea0..0000000000 --- a/invokeai/frontend/web/dist/locales/ar.json +++ /dev/null @@ -1,504 +0,0 @@ -{ - "common": { - "hotkeysLabel": "مفاتيح الأختصار", - "languagePickerLabel": "منتقي اللغة", - "reportBugLabel": "بلغ عن خطأ", - "settingsLabel": "إعدادات", - "img2img": "صورة إلى صورة", - "unifiedCanvas": "لوحة موحدة", - "nodes": "عقد", - "langArabic": "العربية", - "nodesDesc": "نظام مبني على العقد لإنتاج الصور قيد التطوير حاليًا. تبقى على اتصال مع تحديثات حول هذه الميزة المذهلة.", - "postProcessing": "معالجة بعد الإصدار", - "postProcessDesc1": "Invoke AI توفر مجموعة واسعة من ميزات المعالجة بعد الإصدار. تحسين الصور واستعادة الوجوه متاحين بالفعل في واجهة الويب. يمكنك الوصول إليهم من الخيارات المتقدمة في قائمة الخيارات في علامة التبويب Text To Image و Image To Image. يمكن أيضًا معالجة الصور مباشرةً باستخدام أزرار الإجراء على الصورة فوق عرض الصورة الحالي أو في العارض.", - "postProcessDesc2": "سيتم إصدار واجهة رسومية مخصصة قريبًا لتسهيل عمليات المعالجة بعد الإصدار المتقدمة.", - "postProcessDesc3": "واجهة سطر الأوامر Invoke AI توفر ميزات أخرى عديدة بما في ذلك Embiggen.", - "training": "تدريب", - "trainingDesc1": "تدفق خاص مخصص لتدريب تضميناتك الخاصة ونقاط التحقق باستخدام العكس النصي و دريم بوث من واجهة الويب.", - "trainingDesc2": " استحضر الذكاء الصناعي يدعم بالفعل تدريب تضمينات مخصصة باستخدام العكس النصي باستخدام السكريبت الرئيسي.", - "upload": "رفع", - "close": "إغلاق", - "load": "تحميل", - "back": "الى الخلف", - "statusConnected": "متصل", - "statusDisconnected": "غير متصل", - "statusError": "خطأ", - "statusPreparing": "جاري التحضير", - "statusProcessingCanceled": "تم إلغاء المعالجة", - "statusProcessingComplete": "اكتمال المعالجة", - "statusGenerating": "جاري التوليد", - "statusGeneratingTextToImage": "جاري توليد النص إلى الصورة", - "statusGeneratingImageToImage": "جاري توليد الصورة إلى الصورة", - "statusGeneratingInpainting": "جاري توليد Inpainting", - "statusGeneratingOutpainting": "جاري توليد Outpainting", - "statusGenerationComplete": "اكتمال التوليد", - "statusIterationComplete": "اكتمال التكرار", - "statusSavingImage": "جاري حفظ الصورة", - "statusRestoringFaces": "جاري استعادة الوجوه", - "statusRestoringFacesGFPGAN": "تحسيت الوجوه (جي إف بي جان)", - "statusRestoringFacesCodeFormer": "تحسين الوجوه (كود فورمر)", - "statusUpscaling": "تحسين الحجم", - "statusUpscalingESRGAN": "تحسين الحجم (إي إس آر جان)", - "statusLoadingModel": "تحميل النموذج", - "statusModelChanged": "تغير النموذج" - }, - "gallery": { - "generations": "الأجيال", - "showGenerations": "عرض الأجيال", - "uploads": "التحميلات", - "showUploads": "عرض التحميلات", - "galleryImageSize": "حجم الصورة", - "galleryImageResetSize": "إعادة ضبط الحجم", - "gallerySettings": "إعدادات المعرض", - "maintainAspectRatio": "الحفاظ على نسبة الأبعاد", - "autoSwitchNewImages": "التبديل التلقائي إلى الصور الجديدة", - "singleColumnLayout": "تخطيط عمود واحد", - "allImagesLoaded": "تم تحميل جميع الصور", - "loadMore": "تحميل المزيد", - "noImagesInGallery": "لا توجد صور في المعرض" - }, - "hotkeys": { - "keyboardShortcuts": "مفاتيح الأزرار المختصرة", - "appHotkeys": "مفاتيح التطبيق", - "generalHotkeys": "مفاتيح عامة", - "galleryHotkeys": "مفاتيح المعرض", - "unifiedCanvasHotkeys": "مفاتيح اللوحةالموحدة ", - "invoke": { - "title": "أدعو", - "desc": "إنشاء صورة" - }, - "cancel": { - "title": "إلغاء", - "desc": "إلغاء إنشاء الصورة" - }, - "focusPrompt": { - "title": "تركيز الإشعار", - "desc": "تركيز منطقة الإدخال الإشعار" - }, - "toggleOptions": { - "title": "تبديل الخيارات", - "desc": "فتح وإغلاق لوحة الخيارات" - }, - "pinOptions": { - "title": "خيارات التثبيت", - "desc": "ثبت لوحة الخيارات" - }, - "toggleViewer": { - "title": "تبديل العارض", - "desc": "فتح وإغلاق مشاهد الصور" - }, - "toggleGallery": { - "title": "تبديل المعرض", - "desc": "فتح وإغلاق درابزين المعرض" - }, - "maximizeWorkSpace": { - "title": "تكبير مساحة العمل", - "desc": "إغلاق اللوحات وتكبير مساحة العمل" - }, - "changeTabs": { - "title": "تغيير الألسنة", - "desc": "التبديل إلى مساحة عمل أخرى" - }, - "consoleToggle": { - "title": "تبديل الطرفية", - "desc": "فتح وإغلاق الطرفية" - }, - "setPrompt": { - "title": "ضبط التشعب", - "desc": "استخدم تشعب الصورة الحالية" - }, - "setSeed": { - "title": "ضبط البذور", - "desc": "استخدم بذور الصورة الحالية" - }, - "setParameters": { - "title": "ضبط المعلمات", - "desc": "استخدم جميع المعلمات الخاصة بالصورة الحالية" - }, - "restoreFaces": { - "title": "استعادة الوجوه", - "desc": "استعادة الصورة الحالية" - }, - "upscale": { - "title": "تحسين الحجم", - "desc": "تحسين حجم الصورة الحالية" - }, - "showInfo": { - "title": "عرض المعلومات", - "desc": "عرض معلومات البيانات الخاصة بالصورة الحالية" - }, - "sendToImageToImage": { - "title": "أرسل إلى صورة إلى صورة", - "desc": "أرسل الصورة الحالية إلى صورة إلى صورة" - }, - "deleteImage": { - "title": "حذف الصورة", - "desc": "حذف الصورة الحالية" - }, - "closePanels": { - "title": "أغلق اللوحات", - "desc": "يغلق اللوحات المفتوحة" - }, - "previousImage": { - "title": "الصورة السابقة", - "desc": "عرض الصورة السابقة في الصالة" - }, - "nextImage": { - "title": "الصورة التالية", - "desc": "عرض الصورة التالية في الصالة" - }, - "toggleGalleryPin": { - "title": "تبديل تثبيت الصالة", - "desc": "يثبت ويفتح تثبيت الصالة على الواجهة الرسومية" - }, - "increaseGalleryThumbSize": { - "title": "زيادة حجم صورة الصالة", - "desc": "يزيد حجم الصور المصغرة في الصالة" - }, - "decreaseGalleryThumbSize": { - "title": "انقاص حجم صورة الصالة", - "desc": "ينقص حجم الصور المصغرة في الصالة" - }, - "selectBrush": { - "title": "تحديد الفرشاة", - "desc": "يحدد الفرشاة على اللوحة" - }, - "selectEraser": { - "title": "تحديد الممحاة", - "desc": "يحدد الممحاة على اللوحة" - }, - "decreaseBrushSize": { - "title": "تصغير حجم الفرشاة", - "desc": "يصغر حجم الفرشاة/الممحاة على اللوحة" - }, - "increaseBrushSize": { - "title": "زيادة حجم الفرشاة", - "desc": "يزيد حجم فرشة اللوحة / الممحاة" - }, - "decreaseBrushOpacity": { - "title": "تخفيض شفافية الفرشاة", - "desc": "يخفض شفافية فرشة اللوحة" - }, - "increaseBrushOpacity": { - "title": "زيادة شفافية الفرشاة", - "desc": "يزيد شفافية فرشة اللوحة" - }, - "moveTool": { - "title": "أداة التحريك", - "desc": "يتيح التحرك في اللوحة" - }, - "fillBoundingBox": { - "title": "ملء الصندوق المحدد", - "desc": "يملأ الصندوق المحدد بلون الفرشاة" - }, - "eraseBoundingBox": { - "title": "محو الصندوق المحدد", - "desc": "يمحو منطقة الصندوق المحدد" - }, - "colorPicker": { - "title": "اختيار منتقي اللون", - "desc": "يختار منتقي اللون الخاص باللوحة" - }, - "toggleSnap": { - "title": "تبديل التأكيد", - "desc": "يبديل تأكيد الشبكة" - }, - "quickToggleMove": { - "title": "تبديل سريع للتحريك", - "desc": "يبديل مؤقتا وضع التحريك" - }, - "toggleLayer": { - "title": "تبديل الطبقة", - "desc": "يبديل إختيار الطبقة القناع / الأساسية" - }, - "clearMask": { - "title": "مسح القناع", - "desc": "مسح القناع بأكمله" - }, - "hideMask": { - "title": "إخفاء الكمامة", - "desc": "إخفاء وإظهار الكمامة" - }, - "showHideBoundingBox": { - "title": "إظهار / إخفاء علبة التحديد", - "desc": "تبديل ظهور علبة التحديد" - }, - "mergeVisible": { - "title": "دمج الطبقات الظاهرة", - "desc": "دمج جميع الطبقات الظاهرة في اللوحة" - }, - "saveToGallery": { - "title": "حفظ إلى صالة الأزياء", - "desc": "حفظ اللوحة الحالية إلى صالة الأزياء" - }, - "copyToClipboard": { - "title": "نسخ إلى الحافظة", - "desc": "نسخ اللوحة الحالية إلى الحافظة" - }, - "downloadImage": { - "title": "تنزيل الصورة", - "desc": "تنزيل اللوحة الحالية" - }, - "undoStroke": { - "title": "تراجع عن الخط", - "desc": "تراجع عن خط الفرشاة" - }, - "redoStroke": { - "title": "إعادة الخط", - "desc": "إعادة خط الفرشاة" - }, - "resetView": { - "title": "إعادة تعيين العرض", - "desc": "إعادة تعيين عرض اللوحة" - }, - "previousStagingImage": { - "title": "الصورة السابقة في المرحلة التجريبية", - "desc": "الصورة السابقة في منطقة المرحلة التجريبية" - }, - "nextStagingImage": { - "title": "الصورة التالية في المرحلة التجريبية", - "desc": "الصورة التالية في منطقة المرحلة التجريبية" - }, - "acceptStagingImage": { - "title": "قبول الصورة في المرحلة التجريبية", - "desc": "قبول الصورة الحالية في منطقة المرحلة التجريبية" - } - }, - "modelManager": { - "modelManager": "مدير النموذج", - "model": "نموذج", - "allModels": "جميع النماذج", - "checkpointModels": "نقاط التحقق", - "diffusersModels": "المصادر المتعددة", - "safetensorModels": "التنسورات الآمنة", - "modelAdded": "تمت إضافة النموذج", - "modelUpdated": "تم تحديث النموذج", - "modelEntryDeleted": "تم حذف مدخل النموذج", - "cannotUseSpaces": "لا يمكن استخدام المساحات", - "addNew": "إضافة جديد", - "addNewModel": "إضافة نموذج جديد", - "addCheckpointModel": "إضافة نقطة تحقق / نموذج التنسور الآمن", - "addDiffuserModel": "إضافة مصادر متعددة", - "addManually": "إضافة يدويًا", - "manual": "يدوي", - "name": "الاسم", - "nameValidationMsg": "أدخل اسما لنموذجك", - "description": "الوصف", - "descriptionValidationMsg": "أضف وصفا لنموذجك", - "config": "تكوين", - "configValidationMsg": "مسار الملف الإعدادي لنموذجك.", - "modelLocation": "موقع النموذج", - "modelLocationValidationMsg": "موقع النموذج على الجهاز الخاص بك.", - "repo_id": "معرف المستودع", - "repoIDValidationMsg": "المستودع الإلكتروني لنموذجك", - "vaeLocation": "موقع فاي إي", - "vaeLocationValidationMsg": "موقع فاي إي على الجهاز الخاص بك.", - "vaeRepoID": "معرف مستودع فاي إي", - "vaeRepoIDValidationMsg": "المستودع الإلكتروني فاي إي", - "width": "عرض", - "widthValidationMsg": "عرض افتراضي لنموذجك.", - "height": "ارتفاع", - "heightValidationMsg": "ارتفاع افتراضي لنموذجك.", - "addModel": "أضف نموذج", - "updateModel": "تحديث النموذج", - "availableModels": "النماذج المتاحة", - "search": "بحث", - "load": "تحميل", - "active": "نشط", - "notLoaded": "غير محمل", - "cached": "مخبأ", - "checkpointFolder": "مجلد التدقيق", - "clearCheckpointFolder": "مسح مجلد التدقيق", - "findModels": "إيجاد النماذج", - "scanAgain": "فحص مرة أخرى", - "modelsFound": "النماذج الموجودة", - "selectFolder": "حدد المجلد", - "selected": "تم التحديد", - "selectAll": "حدد الكل", - "deselectAll": "إلغاء تحديد الكل", - "showExisting": "إظهار الموجود", - "addSelected": "أضف المحدد", - "modelExists": "النموذج موجود", - "selectAndAdd": "حدد وأضف النماذج المدرجة أدناه", - "noModelsFound": "لم يتم العثور على نماذج", - "delete": "حذف", - "deleteModel": "حذف النموذج", - "deleteConfig": "حذف التكوين", - "deleteMsg1": "هل أنت متأكد من رغبتك في حذف إدخال النموذج هذا من استحضر الذكاء الصناعي", - "deleteMsg2": "هذا لن يحذف ملف نقطة التحكم للنموذج من القرص الخاص بك. يمكنك إعادة إضافتهم إذا كنت ترغب في ذلك.", - "formMessageDiffusersModelLocation": "موقع النموذج للمصعد", - "formMessageDiffusersModelLocationDesc": "يرجى إدخال واحد على الأقل.", - "formMessageDiffusersVAELocation": "موقع فاي إي", - "formMessageDiffusersVAELocationDesc": "إذا لم يتم توفيره، سيبحث استحضر الذكاء الصناعي عن ملف فاي إي داخل موقع النموذج المعطى أعلاه." - }, - "parameters": { - "images": "الصور", - "steps": "الخطوات", - "cfgScale": "مقياس الإعداد الذاتي للجملة", - "width": "عرض", - "height": "ارتفاع", - "seed": "بذرة", - "randomizeSeed": "تبديل بذرة", - "shuffle": "تشغيل", - "noiseThreshold": "عتبة الضوضاء", - "perlinNoise": "ضجيج برلين", - "variations": "تباينات", - "variationAmount": "كمية التباين", - "seedWeights": "أوزان البذور", - "faceRestoration": "استعادة الوجه", - "restoreFaces": "استعادة الوجوه", - "type": "نوع", - "strength": "قوة", - "upscaling": "تصغير", - "upscale": "تصغير", - "upscaleImage": "تصغير الصورة", - "scale": "مقياس", - "otherOptions": "خيارات أخرى", - "seamlessTiling": "تجهيز بلاستيكي بدون تشققات", - "hiresOptim": "تحسين الدقة العالية", - "imageFit": "ملائمة الصورة الأولية لحجم الخرج", - "codeformerFidelity": "الوثوقية", - "scaleBeforeProcessing": "تحجيم قبل المعالجة", - "scaledWidth": "العرض المحجوب", - "scaledHeight": "الارتفاع المحجوب", - "infillMethod": "طريقة التعبئة", - "tileSize": "حجم البلاطة", - "boundingBoxHeader": "صندوق التحديد", - "seamCorrectionHeader": "تصحيح التشقق", - "infillScalingHeader": "التعبئة والتحجيم", - "img2imgStrength": "قوة صورة إلى صورة", - "toggleLoopback": "تبديل الإعادة", - "sendTo": "أرسل إلى", - "sendToImg2Img": "أرسل إلى صورة إلى صورة", - "sendToUnifiedCanvas": "أرسل إلى الخطوط الموحدة", - "copyImage": "نسخ الصورة", - "copyImageToLink": "نسخ الصورة إلى الرابط", - "downloadImage": "تحميل الصورة", - "openInViewer": "فتح في العارض", - "closeViewer": "إغلاق العارض", - "usePrompt": "استخدم المحث", - "useSeed": "استخدام البذور", - "useAll": "استخدام الكل", - "useInitImg": "استخدام الصورة الأولية", - "info": "معلومات", - "initialImage": "الصورة الأولية", - "showOptionsPanel": "إظهار لوحة الخيارات" - }, - "settings": { - "models": "موديلات", - "displayInProgress": "عرض الصور المؤرشفة", - "saveSteps": "حفظ الصور كل n خطوات", - "confirmOnDelete": "تأكيد عند الحذف", - "displayHelpIcons": "عرض أيقونات المساعدة", - "enableImageDebugging": "تمكين التصحيح عند التصوير", - "resetWebUI": "إعادة تعيين واجهة الويب", - "resetWebUIDesc1": "إعادة تعيين واجهة الويب يعيد فقط ذاكرة التخزين المؤقت للمتصفح لصورك وإعداداتك المذكورة. لا يحذف أي صور من القرص.", - "resetWebUIDesc2": "إذا لم تظهر الصور في الصالة أو إذا كان شيء آخر غير ناجح، يرجى المحاولة إعادة تعيين قبل تقديم مشكلة على جيت هب.", - "resetComplete": "تم إعادة تعيين واجهة الويب. تحديث الصفحة لإعادة التحميل." - }, - "toast": { - "tempFoldersEmptied": "تم تفريغ مجلد المؤقت", - "uploadFailed": "فشل التحميل", - "uploadFailedUnableToLoadDesc": "تعذر تحميل الملف", - "downloadImageStarted": "بدأ تنزيل الصورة", - "imageCopied": "تم نسخ الصورة", - "imageLinkCopied": "تم نسخ رابط الصورة", - "imageNotLoaded": "لم يتم تحميل أي صورة", - "imageNotLoadedDesc": "لم يتم العثور على صورة لإرسالها إلى وحدة الصورة", - "imageSavedToGallery": "تم حفظ الصورة في المعرض", - "canvasMerged": "تم دمج الخط", - "sentToImageToImage": "تم إرسال إلى صورة إلى صورة", - "sentToUnifiedCanvas": "تم إرسال إلى لوحة موحدة", - "parametersSet": "تم تعيين المعلمات", - "parametersNotSet": "لم يتم تعيين المعلمات", - "parametersNotSetDesc": "لم يتم العثور على معلمات بيانية لهذه الصورة.", - "parametersFailed": "حدث مشكلة في تحميل المعلمات", - "parametersFailedDesc": "تعذر تحميل صورة البدء.", - "seedSet": "تم تعيين البذرة", - "seedNotSet": "لم يتم تعيين البذرة", - "seedNotSetDesc": "تعذر العثور على البذرة لهذه الصورة.", - "promptSet": "تم تعيين الإشعار", - "promptNotSet": "Prompt Not Set", - "promptNotSetDesc": "تعذر العثور على الإشعار لهذه الصورة.", - "upscalingFailed": "فشل التحسين", - "faceRestoreFailed": "فشل استعادة الوجه", - "metadataLoadFailed": "فشل تحميل البيانات الوصفية", - "initialImageSet": "تم تعيين الصورة الأولية", - "initialImageNotSet": "لم يتم تعيين الصورة الأولية", - "initialImageNotSetDesc": "تعذر تحميل الصورة الأولية" - }, - "tooltip": { - "feature": { - "prompt": "هذا هو حقل التحذير. يشمل التحذير عناصر الإنتاج والمصطلحات الأسلوبية. يمكنك إضافة الأوزان (أهمية الرمز) في التحذير أيضًا، ولكن أوامر CLI والمعلمات لن تعمل.", - "gallery": "تعرض Gallery منتجات من مجلد الإخراج عندما يتم إنشاؤها. تخزن الإعدادات داخل الملفات ويتم الوصول إليها عن طريق قائمة السياق.", - "other": "ستمكن هذه الخيارات من وضع عمليات معالجة بديلة لـاستحضر الذكاء الصناعي. سيؤدي 'الزخرفة بلا جدران' إلى إنشاء أنماط تكرارية في الإخراج. 'دقة عالية' هي الإنتاج خلال خطوتين عبر صورة إلى صورة: استخدم هذا الإعداد عندما ترغب في توليد صورة أكبر وأكثر تجانبًا دون العيوب. ستستغرق الأشياء وقتًا أطول من نص إلى صورة المعتاد.", - "seed": "يؤثر قيمة البذور على الضوضاء الأولي الذي يتم تكوين الصورة منه. يمكنك استخدام البذور الخاصة بالصور السابقة. 'عتبة الضوضاء' يتم استخدامها لتخفيف العناصر الخللية في قيم CFG العالية (جرب مدى 0-10), و Perlin لإضافة ضوضاء Perlin أثناء الإنتاج: كلا منهما يعملان على إضافة التنوع إلى النتائج الخاصة بك.", - "variations": "جرب التغيير مع قيمة بين 0.1 و 1.0 لتغيير النتائج لبذور معينة. التغييرات المثيرة للاهتمام للبذور تكون بين 0.1 و 0.3.", - "upscale": "استخدم إي إس آر جان لتكبير الصورة على الفور بعد الإنتاج.", - "faceCorrection": "تصحيح الوجه باستخدام جي إف بي جان أو كود فورمر: يكتشف الخوارزمية الوجوه في الصورة وتصحح أي عيوب. قيمة عالية ستغير الصورة أكثر، مما يؤدي إلى وجوه أكثر جمالا. كود فورمر بدقة أعلى يحتفظ بالصورة الأصلية على حساب تصحيح وجه أكثر قوة.", - "imageToImage": "تحميل صورة إلى صورة أي صورة كأولية، والتي يتم استخدامها لإنشاء صورة جديدة مع التشعيب. كلما كانت القيمة أعلى، كلما تغيرت نتيجة الصورة. من الممكن أن تكون القيم بين 0.0 و 1.0، وتوصي النطاق الموصى به هو .25-.75", - "boundingBox": "مربع الحدود هو نفس الإعدادات العرض والارتفاع لنص إلى صورة أو صورة إلى صورة. فقط المنطقة في المربع سيتم معالجتها.", - "seamCorrection": "يتحكم بالتعامل مع الخطوط المرئية التي تحدث بين الصور المولدة في سطح اللوحة.", - "infillAndScaling": "إدارة أساليب التعبئة (المستخدمة على المناطق المخفية أو الممحوة في سطح اللوحة) والزيادة في الحجم (مفيدة لحجوزات الإطارات الصغيرة)." - } - }, - "unifiedCanvas": { - "layer": "طبقة", - "base": "قاعدة", - "mask": "قناع", - "maskingOptions": "خيارات القناع", - "enableMask": "مكن القناع", - "preserveMaskedArea": "الحفاظ على المنطقة المقنعة", - "clearMask": "مسح القناع", - "brush": "فرشاة", - "eraser": "ممحاة", - "fillBoundingBox": "ملئ إطار الحدود", - "eraseBoundingBox": "مسح إطار الحدود", - "colorPicker": "اختيار اللون", - "brushOptions": "خيارات الفرشاة", - "brushSize": "الحجم", - "move": "تحريك", - "resetView": "إعادة تعيين العرض", - "mergeVisible": "دمج الظاهر", - "saveToGallery": "حفظ إلى المعرض", - "copyToClipboard": "نسخ إلى الحافظة", - "downloadAsImage": "تنزيل على شكل صورة", - "undo": "تراجع", - "redo": "إعادة", - "clearCanvas": "مسح سبيكة الكاملة", - "canvasSettings": "إعدادات سبيكة الكاملة", - "showIntermediates": "إظهار الوسطاء", - "showGrid": "إظهار الشبكة", - "snapToGrid": "الالتفاف إلى الشبكة", - "darkenOutsideSelection": "تعمية خارج التحديد", - "autoSaveToGallery": "حفظ تلقائي إلى المعرض", - "saveBoxRegionOnly": "حفظ منطقة الصندوق فقط", - "limitStrokesToBox": "تحديد عدد الخطوط إلى الصندوق", - "showCanvasDebugInfo": "إظهار معلومات تصحيح سبيكة الكاملة", - "clearCanvasHistory": "مسح تاريخ سبيكة الكاملة", - "clearHistory": "مسح التاريخ", - "clearCanvasHistoryMessage": "مسح تاريخ اللوحة تترك اللوحة الحالية عائمة، ولكن تمسح بشكل غير قابل للتراجع تاريخ التراجع والإعادة.", - "clearCanvasHistoryConfirm": "هل أنت متأكد من رغبتك في مسح تاريخ اللوحة؟", - "emptyTempImageFolder": "إفراغ مجلد الصور المؤقتة", - "emptyFolder": "إفراغ المجلد", - "emptyTempImagesFolderMessage": "إفراغ مجلد الصور المؤقتة يؤدي أيضًا إلى إعادة تعيين اللوحة الموحدة بشكل كامل. وهذا يشمل كل تاريخ التراجع / الإعادة والصور في منطقة التخزين وطبقة الأساس لللوحة.", - "emptyTempImagesFolderConfirm": "هل أنت متأكد من رغبتك في إفراغ مجلد الصور المؤقتة؟", - "activeLayer": "الطبقة النشطة", - "canvasScale": "مقياس اللوحة", - "boundingBox": "صندوق الحدود", - "scaledBoundingBox": "صندوق الحدود المكبر", - "boundingBoxPosition": "موضع صندوق الحدود", - "canvasDimensions": "أبعاد اللوحة", - "canvasPosition": "موضع اللوحة", - "cursorPosition": "موضع المؤشر", - "previous": "السابق", - "next": "التالي", - "accept": "قبول", - "showHide": "إظهار/إخفاء", - "discardAll": "تجاهل الكل", - "betaClear": "مسح", - "betaDarkenOutside": "ظل الخارج", - "betaLimitToBox": "تحديد إلى الصندوق", - "betaPreserveMasked": "المحافظة على المخفية" - } -} diff --git a/invokeai/frontend/web/dist/locales/de.json b/invokeai/frontend/web/dist/locales/de.json deleted file mode 100644 index ee5b4f10d3..0000000000 --- a/invokeai/frontend/web/dist/locales/de.json +++ /dev/null @@ -1,973 +0,0 @@ -{ - "common": { - "languagePickerLabel": "Sprachauswahl", - "reportBugLabel": "Fehler melden", - "settingsLabel": "Einstellungen", - "img2img": "Bild zu Bild", - "nodes": "Knoten Editor", - "langGerman": "Deutsch", - "nodesDesc": "Ein knotenbasiertes System, für die Erzeugung von Bildern, ist derzeit in der Entwicklung. Bleiben Sie gespannt auf Updates zu dieser fantastischen Funktion.", - "postProcessing": "Nachbearbeitung", - "postProcessDesc1": "InvokeAI bietet eine breite Palette von Nachbearbeitungsfunktionen. Bildhochskalierung und Gesichtsrekonstruktion sind bereits in der WebUI verfügbar. Sie können sie über das Menü Erweiterte Optionen der Reiter Text in Bild und Bild in Bild aufrufen. Sie können Bilder auch direkt bearbeiten, indem Sie die Schaltflächen für Bildaktionen oberhalb der aktuellen Bildanzeige oder im Viewer verwenden.", - "postProcessDesc2": "Eine spezielle Benutzeroberfläche wird in Kürze veröffentlicht, um erweiterte Nachbearbeitungs-Workflows zu erleichtern.", - "postProcessDesc3": "Die InvokeAI Kommandozeilen-Schnittstelle bietet verschiedene andere Funktionen, darunter Embiggen.", - "training": "trainieren", - "trainingDesc1": "Ein spezieller Arbeitsablauf zum Trainieren Ihrer eigenen Embeddings und Checkpoints mit Textual Inversion und Dreambooth über die Weboberfläche.", - "trainingDesc2": "InvokeAI unterstützt bereits das Training von benutzerdefinierten Embeddings mit Textual Inversion unter Verwendung des Hauptskripts.", - "upload": "Hochladen", - "close": "Schließen", - "load": "Laden", - "statusConnected": "Verbunden", - "statusDisconnected": "Getrennt", - "statusError": "Fehler", - "statusPreparing": "Vorbereiten", - "statusProcessingCanceled": "Verarbeitung abgebrochen", - "statusProcessingComplete": "Verarbeitung komplett", - "statusGenerating": "Generieren", - "statusGeneratingTextToImage": "Erzeugen von Text zu Bild", - "statusGeneratingImageToImage": "Erzeugen von Bild zu Bild", - "statusGeneratingInpainting": "Erzeuge Inpainting", - "statusGeneratingOutpainting": "Erzeuge Outpainting", - "statusGenerationComplete": "Generierung abgeschlossen", - "statusIterationComplete": "Iteration abgeschlossen", - "statusSavingImage": "Speichere Bild", - "statusRestoringFaces": "Gesichter restaurieren", - "statusRestoringFacesGFPGAN": "Gesichter restaurieren (GFPGAN)", - "statusRestoringFacesCodeFormer": "Gesichter restaurieren (CodeFormer)", - "statusUpscaling": "Hochskalierung", - "statusUpscalingESRGAN": "Hochskalierung (ESRGAN)", - "statusLoadingModel": "Laden des Modells", - "statusModelChanged": "Modell Geändert", - "cancel": "Abbrechen", - "accept": "Annehmen", - "back": "Zurück", - "langEnglish": "Englisch", - "langDutch": "Niederländisch", - "langFrench": "Französisch", - "langItalian": "Italienisch", - "langPortuguese": "Portugiesisch", - "langRussian": "Russisch", - "langUkranian": "Ukrainisch", - "hotkeysLabel": "Tastenkombinationen", - "githubLabel": "Github", - "discordLabel": "Discord", - "txt2img": "Text zu Bild", - "postprocessing": "Nachbearbeitung", - "langPolish": "Polnisch", - "langJapanese": "Japanisch", - "langArabic": "Arabisch", - "langKorean": "Koreanisch", - "langHebrew": "Hebräisch", - "langSpanish": "Spanisch", - "t2iAdapter": "T2I Adapter", - "communityLabel": "Gemeinschaft", - "dontAskMeAgain": "Frag mich nicht nochmal", - "loadingInvokeAI": "Lade Invoke AI", - "statusMergedModels": "Modelle zusammengeführt", - "areYouSure": "Bist du dir sicher?", - "statusConvertingModel": "Model konvertieren", - "on": "An", - "nodeEditor": "Knoten Editor", - "statusMergingModels": "Modelle zusammenführen", - "langSimplifiedChinese": "Vereinfachtes Chinesisch", - "ipAdapter": "IP Adapter", - "controlAdapter": "Control Adapter", - "auto": "Automatisch", - "controlNet": "ControlNet", - "imageFailedToLoad": "Kann Bild nicht laden", - "statusModelConverted": "Model konvertiert", - "modelManager": "Model Manager", - "lightMode": "Heller Modus", - "generate": "Erstellen", - "learnMore": "Mehr lernen", - "darkMode": "Dunkler Modus", - "loading": "Lade", - "random": "Zufall", - "batch": "Stapel-Manager", - "advanced": "Erweitert", - "langBrPortuguese": "Portugiesisch (Brasilien)", - "unifiedCanvas": "Einheitliche Leinwand", - "openInNewTab": "In einem neuem Tab öffnen", - "statusProcessing": "wird bearbeitet", - "linear": "Linear", - "imagePrompt": "Bild Prompt" - }, - "gallery": { - "generations": "Erzeugungen", - "showGenerations": "Zeige Erzeugnisse", - "uploads": "Uploads", - "showUploads": "Zeige Uploads", - "galleryImageSize": "Bildgröße", - "galleryImageResetSize": "Größe zurücksetzen", - "gallerySettings": "Galerie-Einstellungen", - "maintainAspectRatio": "Seitenverhältnis beibehalten", - "autoSwitchNewImages": "Automatisch zu neuen Bildern wechseln", - "singleColumnLayout": "Einspaltiges Layout", - "allImagesLoaded": "Alle Bilder geladen", - "loadMore": "Mehr laden", - "noImagesInGallery": "Keine Bilder in der Galerie", - "loading": "Lade", - "preparingDownload": "bereite Download vor", - "preparingDownloadFailed": "Problem beim Download vorbereiten", - "deleteImage": "Lösche Bild", - "images": "Bilder", - "copy": "Kopieren", - "download": "Runterladen", - "setCurrentImage": "Setze aktuelle Bild", - "featuresWillReset": "Wenn Sie dieses Bild löschen, werden diese Funktionen sofort zurückgesetzt.", - "deleteImageBin": "Gelöschte Bilder werden an den Papierkorb Ihres Betriebssystems gesendet.", - "unableToLoad": "Galerie kann nicht geladen werden", - "downloadSelection": "Auswahl herunterladen", - "currentlyInUse": "Dieses Bild wird derzeit in den folgenden Funktionen verwendet:", - "deleteImagePermanent": "Gelöschte Bilder können nicht wiederhergestellt werden.", - "autoAssignBoardOnClick": "Board per Klick automatisch zuweisen" - }, - "hotkeys": { - "keyboardShortcuts": "Tastenkürzel", - "appHotkeys": "App-Tastenkombinationen", - "generalHotkeys": "Allgemeine Tastenkürzel", - "galleryHotkeys": "Galerie Tastenkürzel", - "unifiedCanvasHotkeys": "Unified Canvas Tastenkürzel", - "invoke": { - "desc": "Ein Bild erzeugen", - "title": "Invoke" - }, - "cancel": { - "title": "Abbrechen", - "desc": "Bilderzeugung abbrechen" - }, - "focusPrompt": { - "title": "Fokussiere Prompt", - "desc": "Fokussieren des Eingabefeldes für den Prompt" - }, - "toggleOptions": { - "title": "Optionen umschalten", - "desc": "Öffnen und Schließen des Optionsfeldes" - }, - "pinOptions": { - "title": "Optionen anheften", - "desc": "Anheften des Optionsfeldes" - }, - "toggleViewer": { - "title": "Bildbetrachter umschalten", - "desc": "Bildbetrachter öffnen und schließen" - }, - "toggleGallery": { - "title": "Galerie umschalten", - "desc": "Öffnen und Schließen des Galerie-Schubfachs" - }, - "maximizeWorkSpace": { - "title": "Arbeitsbereich maximieren", - "desc": "Schließen Sie die Panels und maximieren Sie den Arbeitsbereich" - }, - "changeTabs": { - "title": "Tabs wechseln", - "desc": "Zu einem anderen Arbeitsbereich wechseln" - }, - "consoleToggle": { - "title": "Konsole Umschalten", - "desc": "Konsole öffnen und schließen" - }, - "setPrompt": { - "title": "Prompt setzen", - "desc": "Verwende den Prompt des aktuellen Bildes" - }, - "setSeed": { - "title": "Seed setzen", - "desc": "Verwende den Seed des aktuellen Bildes" - }, - "setParameters": { - "title": "Parameter setzen", - "desc": "Alle Parameter des aktuellen Bildes verwenden" - }, - "restoreFaces": { - "title": "Gesicht restaurieren", - "desc": "Das aktuelle Bild restaurieren" - }, - "upscale": { - "title": "Hochskalieren", - "desc": "Das aktuelle Bild hochskalieren" - }, - "showInfo": { - "title": "Info anzeigen", - "desc": "Metadaten des aktuellen Bildes anzeigen" - }, - "sendToImageToImage": { - "title": "An Bild zu Bild senden", - "desc": "Aktuelles Bild an Bild zu Bild senden" - }, - "deleteImage": { - "title": "Bild löschen", - "desc": "Aktuelles Bild löschen" - }, - "closePanels": { - "title": "Panels schließen", - "desc": "Schließt offene Panels" - }, - "previousImage": { - "title": "Vorheriges Bild", - "desc": "Vorheriges Bild in der Galerie anzeigen" - }, - "nextImage": { - "title": "Nächstes Bild", - "desc": "Nächstes Bild in Galerie anzeigen" - }, - "toggleGalleryPin": { - "title": "Galerie anheften umschalten", - "desc": "Heftet die Galerie an die Benutzeroberfläche bzw. löst die sie" - }, - "increaseGalleryThumbSize": { - "title": "Größe der Galeriebilder erhöhen", - "desc": "Vergrößert die Galerie-Miniaturansichten" - }, - "decreaseGalleryThumbSize": { - "title": "Größe der Galeriebilder verringern", - "desc": "Verringert die Größe der Galerie-Miniaturansichten" - }, - "selectBrush": { - "title": "Pinsel auswählen", - "desc": "Wählt den Leinwandpinsel aus" - }, - "selectEraser": { - "title": "Radiergummi auswählen", - "desc": "Wählt den Radiergummi für die Leinwand aus" - }, - "decreaseBrushSize": { - "title": "Pinselgröße verkleinern", - "desc": "Verringert die Größe des Pinsels/Radiergummis" - }, - "increaseBrushSize": { - "title": "Pinselgröße erhöhen", - "desc": "Erhöht die Größe des Pinsels/Radiergummis" - }, - "decreaseBrushOpacity": { - "title": "Deckkraft des Pinsels vermindern", - "desc": "Verringert die Deckkraft des Pinsels" - }, - "increaseBrushOpacity": { - "title": "Deckkraft des Pinsels erhöhen", - "desc": "Erhöht die Deckkraft des Pinsels" - }, - "moveTool": { - "title": "Verschieben Werkzeug", - "desc": "Ermöglicht die Navigation auf der Leinwand" - }, - "fillBoundingBox": { - "title": "Begrenzungsrahmen füllen", - "desc": "Füllt den Begrenzungsrahmen mit Pinselfarbe" - }, - "eraseBoundingBox": { - "title": "Begrenzungsrahmen löschen", - "desc": "Löscht den Bereich des Begrenzungsrahmens" - }, - "colorPicker": { - "title": "Farbpipette", - "desc": "Farben aus dem Bild aufnehmen" - }, - "toggleSnap": { - "title": "Einrasten umschalten", - "desc": "Schaltet Einrasten am Raster ein und aus" - }, - "quickToggleMove": { - "title": "Schnell Verschiebemodus", - "desc": "Schaltet vorübergehend den Verschiebemodus um" - }, - "toggleLayer": { - "title": "Ebene umschalten", - "desc": "Schaltet die Auswahl von Maske/Basisebene um" - }, - "clearMask": { - "title": "Lösche Maske", - "desc": "Die gesamte Maske löschen" - }, - "hideMask": { - "title": "Maske ausblenden", - "desc": "Maske aus- und einblenden" - }, - "showHideBoundingBox": { - "title": "Begrenzungsrahmen ein-/ausblenden", - "desc": "Sichtbarkeit des Begrenzungsrahmens ein- und ausschalten" - }, - "mergeVisible": { - "title": "Sichtbares Zusammenführen", - "desc": "Alle sichtbaren Ebenen der Leinwand zusammenführen" - }, - "saveToGallery": { - "title": "In Galerie speichern", - "desc": "Aktuelle Leinwand in Galerie speichern" - }, - "copyToClipboard": { - "title": "In die Zwischenablage kopieren", - "desc": "Aktuelle Leinwand in die Zwischenablage kopieren" - }, - "downloadImage": { - "title": "Bild herunterladen", - "desc": "Aktuelle Leinwand herunterladen" - }, - "undoStroke": { - "title": "Pinselstrich rückgängig machen", - "desc": "Einen Pinselstrich rückgängig machen" - }, - "redoStroke": { - "title": "Pinselstrich wiederherstellen", - "desc": "Einen Pinselstrich wiederherstellen" - }, - "resetView": { - "title": "Ansicht zurücksetzen", - "desc": "Leinwandansicht zurücksetzen" - }, - "previousStagingImage": { - "title": "Vorheriges Staging-Bild", - "desc": "Bild des vorherigen Staging-Bereichs" - }, - "nextStagingImage": { - "title": "Nächstes Staging-Bild", - "desc": "Bild des nächsten Staging-Bereichs" - }, - "acceptStagingImage": { - "title": "Staging-Bild akzeptieren", - "desc": "Akzeptieren Sie das aktuelle Bild des Staging-Bereichs" - }, - "nodesHotkeys": "Knoten Tastenkürzel", - "addNodes": { - "title": "Knotenpunkt hinzufügen", - "desc": "Öffnet das Menü zum Hinzufügen von Knoten" - } - }, - "modelManager": { - "modelAdded": "Model hinzugefügt", - "modelUpdated": "Model aktualisiert", - "modelEntryDeleted": "Modelleintrag gelöscht", - "cannotUseSpaces": "Leerzeichen können nicht verwendet werden", - "addNew": "Neue hinzufügen", - "addNewModel": "Neues Model hinzufügen", - "addManually": "Manuell hinzufügen", - "nameValidationMsg": "Geben Sie einen Namen für Ihr Model ein", - "description": "Beschreibung", - "descriptionValidationMsg": "Fügen Sie eine Beschreibung für Ihr Model hinzu", - "config": "Konfiguration", - "configValidationMsg": "Pfad zur Konfigurationsdatei Ihres Models.", - "modelLocation": "Ort des Models", - "modelLocationValidationMsg": "Pfad zum Speicherort Ihres Models", - "vaeLocation": "VAE Ort", - "vaeLocationValidationMsg": "Pfad zum Speicherort Ihres VAE.", - "width": "Breite", - "widthValidationMsg": "Standardbreite Ihres Models.", - "height": "Höhe", - "heightValidationMsg": "Standardbhöhe Ihres Models.", - "addModel": "Model hinzufügen", - "updateModel": "Model aktualisieren", - "availableModels": "Verfügbare Models", - "search": "Suche", - "load": "Laden", - "active": "Aktiv", - "notLoaded": "nicht geladen", - "cached": "zwischengespeichert", - "checkpointFolder": "Checkpoint-Ordner", - "clearCheckpointFolder": "Checkpoint-Ordner löschen", - "findModels": "Models finden", - "scanAgain": "Erneut scannen", - "modelsFound": "Models gefunden", - "selectFolder": "Ordner auswählen", - "selected": "Ausgewählt", - "selectAll": "Alles auswählen", - "deselectAll": "Alle abwählen", - "showExisting": "Vorhandene anzeigen", - "addSelected": "Auswahl hinzufügen", - "modelExists": "Model existiert", - "selectAndAdd": "Unten aufgeführte Models auswählen und hinzufügen", - "noModelsFound": "Keine Models gefunden", - "delete": "Löschen", - "deleteModel": "Model löschen", - "deleteConfig": "Konfiguration löschen", - "deleteMsg1": "Möchten Sie diesen Model-Eintrag wirklich aus InvokeAI löschen?", - "deleteMsg2": "Dadurch WIRD das Modell von der Festplatte gelöscht WENN es im InvokeAI Root Ordner liegt. Wenn es in einem anderem Ordner liegt wird das Modell NICHT von der Festplatte gelöscht.", - "customConfig": "Benutzerdefinierte Konfiguration", - "invokeRoot": "InvokeAI Ordner", - "formMessageDiffusersVAELocationDesc": "Falls nicht angegeben, sucht InvokeAI nach der VAE-Datei innerhalb des oben angegebenen Modell Speicherortes.", - "checkpointModels": "Kontrollpunkte", - "convert": "Umwandeln", - "addCheckpointModel": "Kontrollpunkt / SafeTensors Modell hinzufügen", - "allModels": "Alle Modelle", - "alpha": "Alpha", - "addDifference": "Unterschied hinzufügen", - "convertToDiffusersHelpText2": "Bei diesem Vorgang wird Ihr Eintrag im Modell-Manager durch die Diffusor-Version desselben Modells ersetzt.", - "convertToDiffusersHelpText5": "Bitte stellen Sie sicher, dass Sie über genügend Speicherplatz verfügen. Die Modelle sind in der Regel zwischen 2 GB und 7 GB groß.", - "convertToDiffusersHelpText3": "Ihre Kontrollpunktdatei auf der Festplatte wird NICHT gelöscht oder in irgendeiner Weise verändert. Sie können Ihren Kontrollpunkt dem Modell-Manager wieder hinzufügen, wenn Sie dies wünschen.", - "convertToDiffusersHelpText4": "Dies ist ein einmaliger Vorgang. Er kann je nach den Spezifikationen Ihres Computers etwa 30-60 Sekunden dauern.", - "convertToDiffusersHelpText6": "Möchten Sie dieses Modell konvertieren?", - "custom": "Benutzerdefiniert", - "modelConverted": "Modell umgewandelt", - "inverseSigmoid": "Inverses Sigmoid", - "invokeAIFolder": "Invoke AI Ordner", - "formMessageDiffusersModelLocationDesc": "Bitte geben Sie mindestens einen an.", - "customSaveLocation": "Benutzerdefinierter Speicherort", - "formMessageDiffusersVAELocation": "VAE Speicherort", - "mergedModelCustomSaveLocation": "Benutzerdefinierter Pfad", - "modelMergeHeaderHelp2": "Nur Diffusers sind für die Zusammenführung verfügbar. Wenn Sie ein Kontrollpunktmodell zusammenführen möchten, konvertieren Sie es bitte zuerst in Diffusers.", - "manual": "Manuell", - "modelManager": "Modell Manager", - "modelMergeAlphaHelp": "Alpha steuert die Überblendungsstärke für die Modelle. Niedrigere Alphawerte führen zu einem geringeren Einfluss des zweiten Modells.", - "modelMergeHeaderHelp1": "Sie können bis zu drei verschiedene Modelle miteinander kombinieren, um eine Mischung zu erstellen, die Ihren Bedürfnissen entspricht.", - "ignoreMismatch": "Unstimmigkeiten zwischen ausgewählten Modellen ignorieren", - "model": "Modell", - "convertToDiffusersSaveLocation": "Speicherort", - "pathToCustomConfig": "Pfad zur benutzerdefinierten Konfiguration", - "v1": "v1", - "modelMergeInterpAddDifferenceHelp": "In diesem Modus wird zunächst Modell 3 von Modell 2 subtrahiert. Die resultierende Version wird mit Modell 1 mit dem oben eingestellten Alphasatz gemischt.", - "modelTwo": "Modell 2", - "modelOne": "Modell 1", - "v2_base": "v2 (512px)", - "scanForModels": "Nach Modellen suchen", - "name": "Name", - "safetensorModels": "SafeTensors", - "pickModelType": "Modell Typ auswählen", - "sameFolder": "Gleicher Ordner", - "modelThree": "Modell 3", - "v2_768": "v2 (768px)", - "none": "Nix", - "repoIDValidationMsg": "Online Repo Ihres Modells", - "vaeRepoIDValidationMsg": "Online Repo Ihrer VAE", - "importModels": "Importiere Modelle", - "merge": "Zusammenführen", - "addDiffuserModel": "Diffusers hinzufügen", - "advanced": "Erweitert", - "closeAdvanced": "Schließe Erweitert", - "convertingModelBegin": "Konvertiere Modell. Bitte warten.", - "customConfigFileLocation": "Benutzerdefinierte Konfiguration Datei Speicherort", - "baseModel": "Basis Modell", - "convertToDiffusers": "Konvertiere zu Diffusers", - "diffusersModels": "Diffusers", - "noCustomLocationProvided": "Kein benutzerdefinierter Standort angegeben", - "onnxModels": "Onnx", - "vaeRepoID": "VAE-Repo-ID", - "weightedSum": "Gewichtete Summe", - "syncModelsDesc": "Wenn Ihre Modelle nicht mit dem Backend synchronisiert sind, können Sie sie mit dieser Option aktualisieren. Dies ist im Allgemeinen praktisch, wenn Sie Ihre models.yaml-Datei manuell aktualisieren oder Modelle zum InvokeAI-Stammordner hinzufügen, nachdem die Anwendung gestartet wurde.", - "vae": "VAE", - "noModels": "Keine Modelle gefunden", - "statusConverting": "Konvertieren", - "sigmoid": "Sigmoid", - "predictionType": "Vorhersagetyp (für Stable Diffusion 2.x-Modelle und gelegentliche Stable Diffusion 1.x-Modelle)", - "selectModel": "Wählen Sie Modell aus", - "repo_id": "Repo-ID", - "modelSyncFailed": "Modellsynchronisierung fehlgeschlagen", - "quickAdd": "Schnell hinzufügen", - "simpleModelDesc": "Geben Sie einen Pfad zu einem lokalen Diffusers-Modell, einem lokalen Checkpoint-/Safetensors-Modell, einer HuggingFace-Repo-ID oder einer Checkpoint-/Diffusers-Modell-URL an.", - "modelDeleted": "Modell gelöscht", - "inpainting": "v1 Ausmalen", - "modelUpdateFailed": "Modellaktualisierung fehlgeschlagen", - "useCustomConfig": "Benutzerdefinierte Konfiguration verwenden", - "settings": "Einstellungen", - "modelConversionFailed": "Modellkonvertierung fehlgeschlagen", - "syncModels": "Modelle synchronisieren", - "mergedModelSaveLocation": "Speicherort", - "modelType": "Modelltyp", - "modelsMerged": "Modelle zusammengeführt", - "modelsMergeFailed": "Modellzusammenführung fehlgeschlagen", - "convertToDiffusersHelpText1": "Dieses Modell wird in das 🧨 Diffusers-Format konvertiert.", - "modelsSynced": "Modelle synchronisiert", - "vaePrecision": "VAE-Präzision", - "mergeModels": "Modelle zusammenführen", - "interpolationType": "Interpolationstyp", - "oliveModels": "Olives", - "variant": "Variante", - "loraModels": "LoRAs", - "modelDeleteFailed": "Modell konnte nicht gelöscht werden", - "mergedModelName": "Zusammengeführter Modellname" - }, - "parameters": { - "images": "Bilder", - "steps": "Schritte", - "cfgScale": "CFG-Skala", - "width": "Breite", - "height": "Höhe", - "randomizeSeed": "Zufälliger Seed", - "shuffle": "Mischen", - "noiseThreshold": "Rausch-Schwellenwert", - "perlinNoise": "Perlin-Rauschen", - "variations": "Variationen", - "variationAmount": "Höhe der Abweichung", - "seedWeights": "Seed-Gewichte", - "faceRestoration": "Gesichtsrestaurierung", - "restoreFaces": "Gesichter wiederherstellen", - "type": "Art", - "strength": "Stärke", - "upscaling": "Hochskalierung", - "upscale": "Hochskalieren (Shift + U)", - "upscaleImage": "Bild hochskalieren", - "scale": "Maßstab", - "otherOptions": "Andere Optionen", - "seamlessTiling": "Nahtlose Kacheln", - "hiresOptim": "High-Res-Optimierung", - "imageFit": "Ausgangsbild an Ausgabegröße anpassen", - "codeformerFidelity": "Glaubwürdigkeit", - "scaleBeforeProcessing": "Skalieren vor der Verarbeitung", - "scaledWidth": "Skaliert W", - "scaledHeight": "Skaliert H", - "infillMethod": "Infill-Methode", - "tileSize": "Kachelgröße", - "boundingBoxHeader": "Begrenzungsrahmen", - "seamCorrectionHeader": "Nahtkorrektur", - "infillScalingHeader": "Infill und Skalierung", - "img2imgStrength": "Bild-zu-Bild-Stärke", - "toggleLoopback": "Loopback umschalten", - "sendTo": "Senden an", - "sendToImg2Img": "Senden an Bild zu Bild", - "sendToUnifiedCanvas": "Senden an Unified Canvas", - "copyImageToLink": "Bild-Link kopieren", - "downloadImage": "Bild herunterladen", - "openInViewer": "Im Viewer öffnen", - "closeViewer": "Viewer schließen", - "usePrompt": "Prompt verwenden", - "useSeed": "Seed verwenden", - "useAll": "Alle verwenden", - "useInitImg": "Ausgangsbild verwenden", - "initialImage": "Ursprüngliches Bild", - "showOptionsPanel": "Optionsleiste zeigen", - "cancel": { - "setType": "Abbruchart festlegen", - "immediate": "Sofort abbrechen", - "schedule": "Abbrechen nach der aktuellen Iteration", - "isScheduled": "Abbrechen" - }, - "copyImage": "Bild kopieren", - "denoisingStrength": "Stärke der Entrauschung", - "symmetry": "Symmetrie", - "imageToImage": "Bild zu Bild", - "info": "Information", - "general": "Allgemein", - "hiresStrength": "High Res Stärke", - "hidePreview": "Verstecke Vorschau", - "showPreview": "Zeige Vorschau" - }, - "settings": { - "displayInProgress": "Bilder in Bearbeitung anzeigen", - "saveSteps": "Speichern der Bilder alle n Schritte", - "confirmOnDelete": "Bestätigen beim Löschen", - "displayHelpIcons": "Hilfesymbole anzeigen", - "enableImageDebugging": "Bild-Debugging aktivieren", - "resetWebUI": "Web-Oberfläche zurücksetzen", - "resetWebUIDesc1": "Das Zurücksetzen der Web-Oberfläche setzt nur den lokalen Cache des Browsers mit Ihren Bildern und gespeicherten Einstellungen zurück. Es werden keine Bilder von der Festplatte gelöscht.", - "resetWebUIDesc2": "Wenn die Bilder nicht in der Galerie angezeigt werden oder etwas anderes nicht funktioniert, versuchen Sie bitte, die Einstellungen zurückzusetzen, bevor Sie einen Fehler auf GitHub melden.", - "resetComplete": "Die Web-Oberfläche wurde zurückgesetzt.", - "models": "Modelle", - "useSlidersForAll": "Schieberegler für alle Optionen verwenden" - }, - "toast": { - "tempFoldersEmptied": "Temp-Ordner geleert", - "uploadFailed": "Hochladen fehlgeschlagen", - "uploadFailedUnableToLoadDesc": "Datei kann nicht geladen werden", - "downloadImageStarted": "Bild wird heruntergeladen", - "imageCopied": "Bild kopiert", - "imageLinkCopied": "Bildlink kopiert", - "imageNotLoaded": "Kein Bild geladen", - "imageNotLoadedDesc": "Konnte kein Bild finden", - "imageSavedToGallery": "Bild in die Galerie gespeichert", - "canvasMerged": "Leinwand zusammengeführt", - "sentToImageToImage": "Gesendet an Bild zu Bild", - "sentToUnifiedCanvas": "Gesendet an Unified Canvas", - "parametersSet": "Parameter festlegen", - "parametersNotSet": "Parameter nicht festgelegt", - "parametersNotSetDesc": "Keine Metadaten für dieses Bild gefunden.", - "parametersFailed": "Problem beim Laden der Parameter", - "parametersFailedDesc": "Ausgangsbild kann nicht geladen werden.", - "seedSet": "Seed festlegen", - "seedNotSet": "Saatgut nicht festgelegt", - "seedNotSetDesc": "Für dieses Bild wurde kein Seed gefunden.", - "promptSet": "Prompt festgelegt", - "promptNotSet": "Prompt nicht festgelegt", - "promptNotSetDesc": "Für dieses Bild wurde kein Prompt gefunden.", - "upscalingFailed": "Hochskalierung fehlgeschlagen", - "faceRestoreFailed": "Gesichtswiederherstellung fehlgeschlagen", - "metadataLoadFailed": "Metadaten konnten nicht geladen werden", - "initialImageSet": "Ausgangsbild festgelegt", - "initialImageNotSet": "Ausgangsbild nicht festgelegt", - "initialImageNotSetDesc": "Ausgangsbild konnte nicht geladen werden" - }, - "tooltip": { - "feature": { - "prompt": "Dies ist das Prompt-Feld. Ein Prompt enthält Generierungsobjekte und stilistische Begriffe. Sie können auch Gewichtungen (Token-Bedeutung) dem Prompt hinzufügen, aber CLI-Befehle und Parameter funktionieren nicht.", - "gallery": "Die Galerie zeigt erzeugte Bilder aus dem Ausgabeordner an, sobald sie erstellt wurden. Die Einstellungen werden in den Dateien gespeichert und können über das Kontextmenü aufgerufen werden.", - "other": "Mit diesen Optionen werden alternative Verarbeitungsmodi für InvokeAI aktiviert. 'Nahtlose Kachelung' erzeugt sich wiederholende Muster in der Ausgabe. 'Hohe Auflösungen' werden in zwei Schritten mit img2img erzeugt: Verwenden Sie diese Einstellung, wenn Sie ein größeres und kohärenteres Bild ohne Artefakte wünschen. Es dauert länger als das normale txt2img.", - "seed": "Der Seed-Wert beeinflusst das Ausgangsrauschen, aus dem das Bild erstellt wird. Sie können die bereits vorhandenen Seeds von früheren Bildern verwenden. 'Der Rauschschwellenwert' wird verwendet, um Artefakte bei hohen CFG-Werten abzuschwächen (versuchen Sie es im Bereich 0-10), und Perlin, um während der Erzeugung Perlin-Rauschen hinzuzufügen: Beide dienen dazu, Ihre Ergebnisse zu variieren.", - "variations": "Versuchen Sie eine Variation mit einem Wert zwischen 0,1 und 1,0, um das Ergebnis für ein bestimmtes Seed zu ändern. Interessante Variationen des Seeds liegen zwischen 0,1 und 0,3.", - "upscale": "Verwenden Sie ESRGAN, um das Bild unmittelbar nach der Erzeugung zu vergrößern.", - "faceCorrection": "Gesichtskorrektur mit GFPGAN oder Codeformer: Der Algorithmus erkennt Gesichter im Bild und korrigiert alle Fehler. Ein hoher Wert verändert das Bild stärker, was zu attraktiveren Gesichtern führt. Codeformer mit einer höheren Genauigkeit bewahrt das Originalbild auf Kosten einer stärkeren Gesichtskorrektur.", - "imageToImage": "Bild zu Bild lädt ein beliebiges Bild als Ausgangsbild, aus dem dann zusammen mit dem Prompt ein neues Bild erzeugt wird. Je höher der Wert ist, desto stärker wird das Ergebnisbild verändert. Werte von 0,0 bis 1,0 sind möglich, der empfohlene Bereich ist .25-.75", - "boundingBox": "Der Begrenzungsrahmen ist derselbe wie die Einstellungen für Breite und Höhe bei Text zu Bild oder Bild zu Bild. Es wird nur der Bereich innerhalb des Rahmens verarbeitet.", - "seamCorrection": "Steuert die Behandlung von sichtbaren Übergängen, die zwischen den erzeugten Bildern auf der Leinwand auftreten.", - "infillAndScaling": "Verwalten Sie Infill-Methoden (für maskierte oder gelöschte Bereiche der Leinwand) und Skalierung (nützlich für kleine Begrenzungsrahmengrößen)." - } - }, - "unifiedCanvas": { - "layer": "Ebene", - "base": "Basis", - "mask": "Maske", - "maskingOptions": "Maskierungsoptionen", - "enableMask": "Maske aktivieren", - "preserveMaskedArea": "Maskierten Bereich bewahren", - "clearMask": "Maske löschen", - "brush": "Pinsel", - "eraser": "Radierer", - "fillBoundingBox": "Begrenzungsrahmen füllen", - "eraseBoundingBox": "Begrenzungsrahmen löschen", - "colorPicker": "Farbpipette", - "brushOptions": "Pinseloptionen", - "brushSize": "Größe", - "move": "Bewegen", - "resetView": "Ansicht zurücksetzen", - "mergeVisible": "Sichtbare Zusammenführen", - "saveToGallery": "In Galerie speichern", - "copyToClipboard": "In Zwischenablage kopieren", - "downloadAsImage": "Als Bild herunterladen", - "undo": "Rückgängig", - "redo": "Wiederherstellen", - "clearCanvas": "Leinwand löschen", - "canvasSettings": "Leinwand-Einstellungen", - "showIntermediates": "Zwischenprodukte anzeigen", - "showGrid": "Gitternetz anzeigen", - "snapToGrid": "Am Gitternetz einrasten", - "darkenOutsideSelection": "Außerhalb der Auswahl verdunkeln", - "autoSaveToGallery": "Automatisch in Galerie speichern", - "saveBoxRegionOnly": "Nur Auswahlbox speichern", - "limitStrokesToBox": "Striche auf Box beschränken", - "showCanvasDebugInfo": "Zusätzliche Informationen zur Leinwand anzeigen", - "clearCanvasHistory": "Leinwand-Verlauf löschen", - "clearHistory": "Verlauf löschen", - "clearCanvasHistoryMessage": "Wenn Sie den Verlauf der Leinwand löschen, bleibt die aktuelle Leinwand intakt, aber der Verlauf der Rückgängig- und Wiederherstellung wird unwiderruflich gelöscht.", - "clearCanvasHistoryConfirm": "Sind Sie sicher, dass Sie den Verlauf der Leinwand löschen möchten?", - "emptyTempImageFolder": "Temp-Image Ordner leeren", - "emptyFolder": "Leerer Ordner", - "emptyTempImagesFolderMessage": "Wenn Sie den Ordner für temporäre Bilder leeren, wird auch der Unified Canvas vollständig zurückgesetzt. Dies umfasst den gesamten Verlauf der Rückgängig-/Wiederherstellungsvorgänge, die Bilder im Bereitstellungsbereich und die Leinwand-Basisebene.", - "emptyTempImagesFolderConfirm": "Sind Sie sicher, dass Sie den temporären Ordner leeren wollen?", - "activeLayer": "Aktive Ebene", - "canvasScale": "Leinwand Maßstab", - "boundingBox": "Begrenzungsrahmen", - "scaledBoundingBox": "Skalierter Begrenzungsrahmen", - "boundingBoxPosition": "Begrenzungsrahmen Position", - "canvasDimensions": "Maße der Leinwand", - "canvasPosition": "Leinwandposition", - "cursorPosition": "Position des Cursors", - "previous": "Vorherige", - "next": "Nächste", - "accept": "Akzeptieren", - "showHide": "Einblenden/Ausblenden", - "discardAll": "Alles verwerfen", - "betaClear": "Löschen", - "betaDarkenOutside": "Außen abdunkeln", - "betaLimitToBox": "Begrenzung auf das Feld", - "betaPreserveMasked": "Maskiertes bewahren", - "antialiasing": "Kantenglättung", - "showResultsOn": "Zeige Ergebnisse (An)", - "showResultsOff": "Zeige Ergebnisse (Aus)" - }, - "accessibility": { - "modelSelect": "Model Auswahl", - "uploadImage": "Bild hochladen", - "previousImage": "Voriges Bild", - "useThisParameter": "Benutze diesen Parameter", - "copyMetadataJson": "Kopiere Metadaten JSON", - "zoomIn": "Vergrößern", - "rotateClockwise": "Im Uhrzeigersinn drehen", - "flipHorizontally": "Horizontal drehen", - "flipVertically": "Vertikal drehen", - "modifyConfig": "Optionen einstellen", - "toggleAutoscroll": "Auroscroll ein/ausschalten", - "toggleLogViewer": "Log Betrachter ein/ausschalten", - "showOptionsPanel": "Zeige Optionen", - "reset": "Zurücksetzten", - "nextImage": "Nächstes Bild", - "zoomOut": "Verkleinern", - "rotateCounterClockwise": "Gegen den Uhrzeigersinn verdrehen", - "showGalleryPanel": "Galeriefenster anzeigen", - "exitViewer": "Betrachten beenden", - "menu": "Menü", - "loadMore": "Mehr laden", - "invokeProgressBar": "Invoke Fortschrittsanzeige" - }, - "boards": { - "autoAddBoard": "Automatisches Hinzufügen zum Ordner", - "topMessage": "Dieser Ordner enthält Bilder die in den folgenden Funktionen verwendet werden:", - "move": "Bewegen", - "menuItemAutoAdd": "Automatisches Hinzufügen zu diesem Ordner", - "myBoard": "Meine Ordner", - "searchBoard": "Ordner durchsuchen...", - "noMatching": "Keine passenden Ordner", - "selectBoard": "Ordner aussuchen", - "cancel": "Abbrechen", - "addBoard": "Ordner hinzufügen", - "uncategorized": "Nicht kategorisiert", - "downloadBoard": "Ordner runterladen", - "changeBoard": "Ordner wechseln", - "loading": "Laden...", - "clearSearch": "Suche leeren", - "bottomMessage": "Durch das Löschen dieses Ordners und seiner Bilder werden alle Funktionen zurückgesetzt, die sie derzeit verwenden." - }, - "controlnet": { - "showAdvanced": "Zeige Erweitert", - "contentShuffleDescription": "Mischt den Inhalt von einem Bild", - "addT2IAdapter": "$t(common.t2iAdapter) hinzufügen", - "importImageFromCanvas": "Importieren Bild von Zeichenfläche", - "lineartDescription": "Konvertiere Bild zu Lineart", - "importMaskFromCanvas": "Importiere Maske von Zeichenfläche", - "hed": "HED", - "hideAdvanced": "Verstecke Erweitert", - "contentShuffle": "Inhalt mischen", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) ist aktiv, $t(common.t2iAdapter) ist deaktiviert", - "ipAdapterModel": "Adapter Modell", - "beginEndStepPercent": "Start / Ende Step Prozent", - "duplicate": "Kopieren", - "f": "F", - "h": "H", - "depthMidasDescription": "Tiefenmap erstellen mit Midas", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ist aktiv, $t(common.controlNet) ist deaktiviert", - "weight": "Breite", - "selectModel": "Wähle ein Modell", - "depthMidas": "Tiefe (Midas)", - "w": "W", - "addControlNet": "$t(common.controlNet) hinzufügen", - "none": "Kein", - "incompatibleBaseModel": "Inkompatibles Basismodell:", - "enableControlnet": "Aktiviere ControlNet", - "detectResolution": "Auflösung erkennen", - "controlNetT2IMutexDesc": "$t(common.controlNet) und $t(common.t2iAdapter) zur gleichen Zeit wird nicht unterstützt.", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "fill": "Füllen", - "addIPAdapter": "$t(common.ipAdapter) hinzufügen", - "colorMapDescription": "Erstelle eine Farbkarte von diesem Bild", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "imageResolution": "Bild Auflösung", - "depthZoe": "Tiefe (Zoe)", - "colorMap": "Farbe", - "lowThreshold": "Niedrige Schwelle", - "highThreshold": "Hohe Schwelle", - "toggleControlNet": "Schalten ControlNet um", - "delete": "Löschen", - "controlAdapter_one": "Control Adapter", - "controlAdapter_other": "Control Adapters", - "colorMapTileSize": "Tile Größe", - "depthZoeDescription": "Tiefenmap erstellen mit Zoe", - "setControlImageDimensions": "Setze Control Bild Auflösung auf Breite/Höhe", - "handAndFace": "Hand und Gesicht", - "enableIPAdapter": "Aktiviere IP Adapter", - "resize": "Größe ändern", - "resetControlImage": "Zurücksetzen vom Referenz Bild", - "balanced": "Ausgewogen", - "prompt": "Prompt", - "resizeMode": "Größenänderungsmodus", - "processor": "Prozessor", - "saveControlImage": "Speichere Referenz Bild", - "safe": "Speichern", - "ipAdapterImageFallback": "Kein IP Adapter Bild ausgewählt", - "resetIPAdapterImage": "Zurücksetzen vom IP Adapter Bild", - "pidi": "PIDI", - "normalBae": "Normales BAE", - "mlsdDescription": "Minimalistischer Liniensegmentdetektor", - "openPoseDescription": "Schätzung der menschlichen Pose mit Openpose", - "control": "Kontrolle", - "coarse": "Coarse", - "crop": "Zuschneiden", - "pidiDescription": "PIDI-Bildverarbeitung", - "mediapipeFace": "Mediapipe Gesichter", - "mlsd": "M-LSD", - "controlMode": "Steuermodus", - "cannyDescription": "Canny Ecken Erkennung", - "lineart": "Lineart", - "lineartAnimeDescription": "Lineart-Verarbeitung im Anime-Stil", - "minConfidence": "Minimales Vertrauen", - "megaControl": "Mega-Kontrolle", - "autoConfigure": "Prozessor automatisch konfigurieren", - "normalBaeDescription": "Normale BAE-Verarbeitung", - "noneDescription": "Es wurde keine Verarbeitung angewendet", - "openPose": "Openpose", - "lineartAnime": "Lineart Anime", - "mediapipeFaceDescription": "Gesichtserkennung mit Mediapipe", - "canny": "Canny", - "hedDescription": "Ganzheitlich verschachtelte Kantenerkennung", - "scribble": "Scribble", - "maxFaces": "Maximal Anzahl Gesichter" - }, - "queue": { - "status": "Status", - "cancelTooltip": "Aktuellen Aufgabe abbrechen", - "queueEmpty": "Warteschlange leer", - "in_progress": "In Arbeit", - "queueFront": "An den Anfang der Warteschlange tun", - "completed": "Fertig", - "queueBack": "In die Warteschlange", - "clearFailed": "Probleme beim leeren der Warteschlange", - "clearSucceeded": "Warteschlange geleert", - "pause": "Pause", - "cancelSucceeded": "Auftrag abgebrochen", - "queue": "Warteschlange", - "batch": "Stapel", - "pending": "Ausstehend", - "clear": "Leeren", - "prune": "Leeren", - "total": "Gesamt", - "canceled": "Abgebrochen", - "clearTooltip": "Abbrechen und alle Aufträge leeren", - "current": "Aktuell", - "failed": "Fehler", - "cancelItem": "Abbruch Auftrag", - "next": "Nächste", - "cancel": "Abbruch", - "session": "Sitzung", - "queueTotal": "{{total}} Gesamt", - "resume": "Wieder aufnehmen", - "item": "Auftrag", - "notReady": "Warteschlange noch nicht bereit", - "batchValues": "Stapel Werte", - "queueCountPrediction": "{{predicted}} zur Warteschlange hinzufügen", - "queuedCount": "{{pending}} wartenden Elemente", - "clearQueueAlertDialog": "Die Warteschlange leeren, stoppt den aktuellen Prozess und leert die Warteschlange komplett.", - "completedIn": "Fertig in", - "cancelBatchSucceeded": "Stapel abgebrochen", - "cancelBatch": "Stapel stoppen", - "enqueueing": "Stapel in der Warteschlange", - "queueMaxExceeded": "Maximum von {{max_queue_size}} Elementen erreicht, würde {{skip}} Elemente überspringen", - "cancelBatchFailed": "Problem beim Abbruch vom Stapel", - "clearQueueAlertDialog2": "bist du sicher die Warteschlange zu leeren?", - "pruneSucceeded": "{{item_count}} abgeschlossene Elemente aus der Warteschlange entfernt", - "pauseSucceeded": "Prozessor angehalten", - "cancelFailed": "Problem beim Stornieren des Auftrags", - "pauseFailed": "Problem beim Anhalten des Prozessors", - "front": "Vorne", - "pruneTooltip": "Bereinigen Sie {{item_count}} abgeschlossene Aufträge", - "resumeFailed": "Problem beim wieder aufnehmen von Prozessor", - "pruneFailed": "Problem beim leeren der Warteschlange", - "pauseTooltip": "Pause von Prozessor", - "back": "Hinten", - "resumeSucceeded": "Prozessor wieder aufgenommen", - "resumeTooltip": "Prozessor wieder aufnehmen" - }, - "metadata": { - "negativePrompt": "Negativ Beschreibung", - "metadata": "Meta-Data", - "strength": "Bild zu Bild stärke", - "imageDetails": "Bild Details", - "model": "Modell", - "noImageDetails": "Keine Bild Details gefunden", - "cfgScale": "CFG-Skala", - "fit": "Bild zu Bild passen", - "height": "Höhe", - "noMetaData": "Keine Meta-Data gefunden", - "width": "Breite", - "createdBy": "Erstellt von", - "steps": "Schritte", - "seamless": "Nahtlos", - "positivePrompt": "Positiver Prompt", - "generationMode": "Generierungsmodus", - "Threshold": "Noise Schwelle", - "seed": "Samen", - "perlin": "Perlin Noise", - "hiresFix": "Optimierung für hohe Auflösungen", - "initImage": "Erstes Bild", - "variations": "Samengewichtspaare", - "vae": "VAE", - "workflow": "Arbeitsablauf", - "scheduler": "Scheduler", - "noRecallParameters": "Es wurden keine Parameter zum Abrufen gefunden" - }, - "popovers": { - "noiseUseCPU": { - "heading": "Nutze Prozessor rauschen" - }, - "paramModel": { - "heading": "Modell" - }, - "paramIterations": { - "heading": "Iterationen" - }, - "paramCFGScale": { - "heading": "CFG-Skala" - }, - "paramSteps": { - "heading": "Schritte" - }, - "lora": { - "heading": "LoRA Gewichte" - }, - "infillMethod": { - "heading": "Füllmethode" - }, - "paramVAE": { - "heading": "VAE" - } - }, - "ui": { - "lockRatio": "Verhältnis sperren", - "hideProgressImages": "Verstecke Prozess Bild", - "showProgressImages": "Zeige Prozess Bild" - }, - "invocationCache": { - "disable": "Deaktivieren", - "misses": "Cache Nötig", - "hits": "Cache Treffer", - "enable": "Aktivieren", - "clear": "Leeren", - "maxCacheSize": "Maximale Cache Größe", - "cacheSize": "Cache Größe" - }, - "embedding": { - "noMatchingEmbedding": "Keine passenden Embeddings", - "addEmbedding": "Embedding hinzufügen", - "incompatibleModel": "Inkompatibles Basismodell:" - }, - "nodes": { - "booleanPolymorphicDescription": "Eine Sammlung boolescher Werte.", - "colorFieldDescription": "Eine RGBA-Farbe.", - "conditioningCollection": "Konditionierungssammlung", - "addNode": "Knoten hinzufügen", - "conditioningCollectionDescription": "Konditionierung kann zwischen Knoten weitergegeben werden.", - "colorPolymorphic": "Farbpolymorph", - "colorCodeEdgesHelp": "Farbkodieren Sie Kanten entsprechend ihren verbundenen Feldern", - "animatedEdges": "Animierte Kanten", - "booleanCollectionDescription": "Eine Sammlung boolescher Werte.", - "colorField": "Farbe", - "collectionItem": "Objekt in Sammlung", - "animatedEdgesHelp": "Animieren Sie ausgewählte Kanten und Kanten, die mit ausgewählten Knoten verbunden sind", - "cannotDuplicateConnection": "Es können keine doppelten Verbindungen erstellt werden", - "booleanPolymorphic": "Boolesche Polymorphie", - "colorPolymorphicDescription": "Eine Sammlung von Farben.", - "clipFieldDescription": "Tokenizer- und text_encoder-Untermodelle.", - "clipField": "Clip", - "colorCollection": "Eine Sammlung von Farben.", - "boolean": "Boolesche Werte", - "currentImage": "Aktuelles Bild", - "booleanDescription": "Boolesche Werte sind wahr oder falsch.", - "collection": "Sammlung", - "cannotConnectInputToInput": "Eingang kann nicht mit Eingang verbunden werden", - "conditioningField": "Konditionierung", - "cannotConnectOutputToOutput": "Ausgang kann nicht mit Ausgang verbunden werden", - "booleanCollection": "Boolesche Werte Sammlung", - "cannotConnectToSelf": "Es kann keine Verbindung zu sich selbst hergestellt werden", - "colorCodeEdges": "Farbkodierte Kanten", - "addNodeToolTip": "Knoten hinzufügen (Umschalt+A, Leertaste)" - }, - "hrf": { - "enableHrf": "Aktivieren Sie die Korrektur für hohe Auflösungen", - "upscaleMethod": "Vergrößerungsmethoden", - "enableHrfTooltip": "Generieren Sie mit einer niedrigeren Anfangsauflösung, skalieren Sie auf die Basisauflösung hoch und führen Sie dann Image-to-Image aus.", - "metadata": { - "strength": "Hochauflösender Fix Stärke", - "enabled": "Hochauflösender Fix aktiviert", - "method": "Hochauflösender Fix Methode" - }, - "hrf": "Hochauflösender Fix", - "hrfStrength": "Hochauflösende Fix Stärke", - "strengthTooltip": "Niedrigere Werte führen zu weniger Details, wodurch potenzielle Artefakte reduziert werden können." - }, - "models": { - "noMatchingModels": "Keine passenden Modelle", - "loading": "lade", - "noMatchingLoRAs": "Keine passenden LoRAs", - "noLoRAsAvailable": "Keine LoRAs verfügbar", - "noModelsAvailable": "Keine Modelle verfügbar", - "selectModel": "Wählen ein Modell aus", - "noRefinerModelsInstalled": "Keine SDXL Refiner-Modelle installiert", - "noLoRAsInstalled": "Keine LoRAs installiert", - "selectLoRA": "Wählen ein LoRA aus" - } -} diff --git a/invokeai/frontend/web/dist/locales/en.json b/invokeai/frontend/web/dist/locales/en.json deleted file mode 100644 index e3dd84bf5c..0000000000 --- a/invokeai/frontend/web/dist/locales/en.json +++ /dev/null @@ -1,1558 +0,0 @@ -{ - "accessibility": { - "copyMetadataJson": "Copy metadata JSON", - "exitViewer": "Exit Viewer", - "flipHorizontally": "Flip Horizontally", - "flipVertically": "Flip Vertically", - "invokeProgressBar": "Invoke progress bar", - "menu": "Menu", - "mode": "Mode", - "modelSelect": "Model Select", - "modifyConfig": "Modify Config", - "nextImage": "Next Image", - "previousImage": "Previous Image", - "reset": "Reset", - "rotateClockwise": "Rotate Clockwise", - "rotateCounterClockwise": "Rotate Counter-Clockwise", - "showGalleryPanel": "Show Gallery Panel", - "showOptionsPanel": "Show Side Panel", - "toggleAutoscroll": "Toggle autoscroll", - "toggleLogViewer": "Toggle Log Viewer", - "uploadImage": "Upload Image", - "useThisParameter": "Use this parameter", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "loadMore": "Load More" - }, - "boards": { - "addBoard": "Add Board", - "autoAddBoard": "Auto-Add Board", - "bottomMessage": "Deleting this board and its images will reset any features currently using them.", - "cancel": "Cancel", - "changeBoard": "Change Board", - "clearSearch": "Clear Search", - "deleteBoard": "Delete Board", - "deleteBoardAndImages": "Delete Board and Images", - "deleteBoardOnly": "Delete Board Only", - "deletedBoardsCannotbeRestored": "Deleted boards cannot be restored", - "loading": "Loading...", - "menuItemAutoAdd": "Auto-add to this Board", - "move": "Move", - "myBoard": "My Board", - "noMatching": "No matching Boards", - "searchBoard": "Search Boards...", - "selectBoard": "Select a Board", - "topMessage": "This board contains images used in the following features:", - "uncategorized": "Uncategorized", - "downloadBoard": "Download Board" - }, - "common": { - "accept": "Accept", - "advanced": "Advanced", - "areYouSure": "Are you sure?", - "auto": "Auto", - "back": "Back", - "batch": "Batch Manager", - "cancel": "Cancel", - "close": "Close", - "on": "On", - "checkpoint": "Checkpoint", - "communityLabel": "Community", - "controlNet": "ControlNet", - "controlAdapter": "Control Adapter", - "data": "Data", - "details": "Details", - "ipAdapter": "IP Adapter", - "t2iAdapter": "T2I Adapter", - "darkMode": "Dark Mode", - "discordLabel": "Discord", - "dontAskMeAgain": "Don't ask me again", - "generate": "Generate", - "githubLabel": "Github", - "hotkeysLabel": "Hotkeys", - "imagePrompt": "Image Prompt", - "imageFailedToLoad": "Unable to Load Image", - "img2img": "Image To Image", - "inpaint": "inpaint", - "langArabic": "العربية", - "langBrPortuguese": "Português do Brasil", - "langDutch": "Nederlands", - "langEnglish": "English", - "langFrench": "Français", - "langGerman": "German", - "langHebrew": "Hebrew", - "langItalian": "Italiano", - "langJapanese": "日本語", - "langKorean": "한국어", - "langPolish": "Polski", - "langPortuguese": "Português", - "langRussian": "Русский", - "langSimplifiedChinese": "简体中文", - "langSpanish": "Español", - "languagePickerLabel": "Language", - "langUkranian": "Украї́нська", - "lightMode": "Light Mode", - "linear": "Linear", - "load": "Load", - "loading": "Loading", - "loadingInvokeAI": "Loading Invoke AI", - "learnMore": "Learn More", - "modelManager": "Model Manager", - "nodeEditor": "Node Editor", - "nodes": "Workflow Editor", - "nodesDesc": "A node based system for the generation of images is under development currently. Stay tuned for updates about this amazing feature.", - "openInNewTab": "Open in New Tab", - "outpaint": "outpaint", - "outputs": "Outputs", - "postProcessDesc1": "Invoke AI offers a wide variety of post processing features. Image Upscaling and Face Restoration are already available in the WebUI. You can access them from the Advanced Options menu of the Text To Image and Image To Image tabs. You can also process images directly, using the image action buttons above the current image display or in the viewer.", - "postProcessDesc2": "A dedicated UI will be released soon to facilitate more advanced post processing workflows.", - "postProcessDesc3": "The Invoke AI Command Line Interface offers various other features including Embiggen.", - "postprocessing": "Post Processing", - "postProcessing": "Post Processing", - "random": "Random", - "reportBugLabel": "Report Bug", - "safetensors": "Safetensors", - "settingsLabel": "Settings", - "simple": "Simple", - "statusConnected": "Connected", - "statusConvertingModel": "Converting Model", - "statusDisconnected": "Disconnected", - "statusError": "Error", - "statusGenerating": "Generating", - "statusGeneratingImageToImage": "Generating Image To Image", - "statusGeneratingInpainting": "Generating Inpainting", - "statusGeneratingOutpainting": "Generating Outpainting", - "statusGeneratingTextToImage": "Generating Text To Image", - "statusGenerationComplete": "Generation Complete", - "statusIterationComplete": "Iteration Complete", - "statusLoadingModel": "Loading Model", - "statusMergedModels": "Models Merged", - "statusMergingModels": "Merging Models", - "statusModelChanged": "Model Changed", - "statusModelConverted": "Model Converted", - "statusPreparing": "Preparing", - "statusProcessing": "Processing", - "statusProcessingCanceled": "Processing Canceled", - "statusProcessingComplete": "Processing Complete", - "statusRestoringFaces": "Restoring Faces", - "statusRestoringFacesCodeFormer": "Restoring Faces (CodeFormer)", - "statusRestoringFacesGFPGAN": "Restoring Faces (GFPGAN)", - "statusSavingImage": "Saving Image", - "statusUpscaling": "Upscaling", - "statusUpscalingESRGAN": "Upscaling (ESRGAN)", - "template": "Template", - "training": "Training", - "trainingDesc1": "A dedicated workflow for training your own embeddings and checkpoints using Textual Inversion and Dreambooth from the web interface.", - "trainingDesc2": "InvokeAI already supports training custom embeddourings using Textual Inversion using the main script.", - "txt2img": "Text To Image", - "unifiedCanvas": "Unified Canvas", - "upload": "Upload" - }, - "controlnet": { - "controlAdapter_one": "Control Adapter", - "controlAdapter_other": "Control Adapters", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "addControlNet": "Add $t(common.controlNet)", - "addIPAdapter": "Add $t(common.ipAdapter)", - "addT2IAdapter": "Add $t(common.t2iAdapter)", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) enabled, $t(common.t2iAdapter)s disabled", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) enabled, $t(common.controlNet)s disabled", - "controlNetT2IMutexDesc": "$t(common.controlNet) and $t(common.t2iAdapter) at same time is currently unsupported.", - "amult": "a_mult", - "autoConfigure": "Auto configure processor", - "balanced": "Balanced", - "beginEndStepPercent": "Begin / End Step Percentage", - "bgth": "bg_th", - "canny": "Canny", - "cannyDescription": "Canny edge detection", - "colorMap": "Color", - "colorMapDescription": "Generates a color map from the image", - "coarse": "Coarse", - "contentShuffle": "Content Shuffle", - "contentShuffleDescription": "Shuffles the content in an image", - "control": "Control", - "controlMode": "Control Mode", - "crop": "Crop", - "delete": "Delete", - "depthMidas": "Depth (Midas)", - "depthMidasDescription": "Depth map generation using Midas", - "depthZoe": "Depth (Zoe)", - "depthZoeDescription": "Depth map generation using Zoe", - "detectResolution": "Detect Resolution", - "duplicate": "Duplicate", - "enableControlnet": "Enable ControlNet", - "f": "F", - "fill": "Fill", - "h": "H", - "handAndFace": "Hand and Face", - "hed": "HED", - "hedDescription": "Holistically-Nested Edge Detection", - "hideAdvanced": "Hide Advanced", - "highThreshold": "High Threshold", - "imageResolution": "Image Resolution", - "colorMapTileSize": "Tile Size", - "importImageFromCanvas": "Import Image From Canvas", - "importMaskFromCanvas": "Import Mask From Canvas", - "incompatibleBaseModel": "Incompatible base model:", - "lineart": "Lineart", - "lineartAnime": "Lineart Anime", - "lineartAnimeDescription": "Anime-style lineart processing", - "lineartDescription": "Converts image to lineart", - "lowThreshold": "Low Threshold", - "maxFaces": "Max Faces", - "mediapipeFace": "Mediapipe Face", - "mediapipeFaceDescription": "Face detection using Mediapipe", - "megaControl": "Mega Control", - "minConfidence": "Min Confidence", - "mlsd": "M-LSD", - "mlsdDescription": "Minimalist Line Segment Detector", - "none": "None", - "noneDescription": "No processing applied", - "normalBae": "Normal BAE", - "normalBaeDescription": "Normal BAE processing", - "openPose": "Openpose", - "openPoseDescription": "Human pose estimation using Openpose", - "pidi": "PIDI", - "pidiDescription": "PIDI image processing", - "processor": "Processor", - "prompt": "Prompt", - "resetControlImage": "Reset Control Image", - "resize": "Resize", - "resizeMode": "Resize Mode", - "safe": "Safe", - "saveControlImage": "Save Control Image", - "scribble": "scribble", - "selectModel": "Select a model", - "setControlImageDimensions": "Set Control Image Dimensions To W/H", - "showAdvanced": "Show Advanced", - "toggleControlNet": "Toggle this ControlNet", - "unstarImage": "Unstar Image", - "w": "W", - "weight": "Weight", - "enableIPAdapter": "Enable IP Adapter", - "ipAdapterModel": "Adapter Model", - "resetIPAdapterImage": "Reset IP Adapter Image", - "ipAdapterImageFallback": "No IP Adapter Image Selected" - }, - "hrf": { - "hrf": "High Resolution Fix", - "enableHrf": "Enable High Resolution Fix", - "enableHrfTooltip": "Generate with a lower initial resolution, upscale to the base resolution, then run Image-to-Image.", - "upscaleMethod": "Upscale Method", - "hrfStrength": "High Resolution Fix Strength", - "strengthTooltip": "Lower values result in fewer details, which may reduce potential artifacts.", - "metadata": { - "enabled": "High Resolution Fix Enabled", - "strength": "High Resolution Fix Strength", - "method": "High Resolution Fix Method" - } - }, - "embedding": { - "addEmbedding": "Add Embedding", - "incompatibleModel": "Incompatible base model:", - "noMatchingEmbedding": "No matching Embeddings" - }, - "queue": { - "queue": "Queue", - "queueFront": "Add to Front of Queue", - "queueBack": "Add to Queue", - "queueCountPrediction": "Add {{predicted}} to Queue", - "queueMaxExceeded": "Max of {{max_queue_size}} exceeded, would skip {{skip}}", - "queuedCount": "{{pending}} Pending", - "queueTotal": "{{total}} Total", - "queueEmpty": "Queue Empty", - "enqueueing": "Queueing Batch", - "resume": "Resume", - "resumeTooltip": "Resume Processor", - "resumeSucceeded": "Processor Resumed", - "resumeFailed": "Problem Resuming Processor", - "pause": "Pause", - "pauseTooltip": "Pause Processor", - "pauseSucceeded": "Processor Paused", - "pauseFailed": "Problem Pausing Processor", - "cancel": "Cancel", - "cancelTooltip": "Cancel Current Item", - "cancelSucceeded": "Item Canceled", - "cancelFailed": "Problem Canceling Item", - "prune": "Prune", - "pruneTooltip": "Prune {{item_count}} Completed Items", - "pruneSucceeded": "Pruned {{item_count}} Completed Items from Queue", - "pruneFailed": "Problem Pruning Queue", - "clear": "Clear", - "clearTooltip": "Cancel and Clear All Items", - "clearSucceeded": "Queue Cleared", - "clearFailed": "Problem Clearing Queue", - "cancelBatch": "Cancel Batch", - "cancelItem": "Cancel Item", - "cancelBatchSucceeded": "Batch Canceled", - "cancelBatchFailed": "Problem Canceling Batch", - "clearQueueAlertDialog": "Clearing the queue immediately cancels any processing items and clears the queue entirely.", - "clearQueueAlertDialog2": "Are you sure you want to clear the queue?", - "current": "Current", - "next": "Next", - "status": "Status", - "total": "Total", - "time": "Time", - "pending": "Pending", - "in_progress": "In Progress", - "completed": "Completed", - "failed": "Failed", - "canceled": "Canceled", - "completedIn": "Completed in", - "batch": "Batch", - "batchFieldValues": "Batch Field Values", - "item": "Item", - "session": "Session", - "batchValues": "Batch Values", - "notReady": "Unable to Queue", - "batchQueued": "Batch Queued", - "batchQueuedDesc_one": "Added {{count}} sessions to {{direction}} of queue", - "batchQueuedDesc_other": "Added {{count}} sessions to {{direction}} of queue", - "front": "front", - "back": "back", - "batchFailedToQueue": "Failed to Queue Batch", - "graphQueued": "Graph queued", - "graphFailedToQueue": "Failed to queue graph" - }, - "invocationCache": { - "invocationCache": "Invocation Cache", - "cacheSize": "Cache Size", - "maxCacheSize": "Max Cache Size", - "hits": "Cache Hits", - "misses": "Cache Misses", - "clear": "Clear", - "clearSucceeded": "Invocation Cache Cleared", - "clearFailed": "Problem Clearing Invocation Cache", - "enable": "Enable", - "enableSucceeded": "Invocation Cache Enabled", - "enableFailed": "Problem Enabling Invocation Cache", - "disable": "Disable", - "disableSucceeded": "Invocation Cache Disabled", - "disableFailed": "Problem Disabling Invocation Cache" - }, - "gallery": { - "allImagesLoaded": "All Images Loaded", - "assets": "Assets", - "autoAssignBoardOnClick": "Auto-Assign Board on Click", - "autoSwitchNewImages": "Auto-Switch to New Images", - "copy": "Copy", - "currentlyInUse": "This image is currently in use in the following features:", - "deleteImage": "Delete Image", - "deleteImageBin": "Deleted images will be sent to your operating system's Bin.", - "deleteImagePermanent": "Deleted images cannot be restored.", - "download": "Download", - "featuresWillReset": "If you delete this image, those features will immediately be reset.", - "galleryImageResetSize": "Reset Size", - "galleryImageSize": "Image Size", - "gallerySettings": "Gallery Settings", - "generations": "Generations", - "images": "Images", - "loading": "Loading", - "loadMore": "Load More", - "maintainAspectRatio": "Maintain Aspect Ratio", - "noImageSelected": "No Image Selected", - "noImagesInGallery": "No Images to Display", - "setCurrentImage": "Set as Current Image", - "showGenerations": "Show Generations", - "showUploads": "Show Uploads", - "singleColumnLayout": "Single Column Layout", - "unableToLoad": "Unable to load Gallery", - "uploads": "Uploads", - "downloadSelection": "Download Selection", - "preparingDownload": "Preparing Download", - "preparingDownloadFailed": "Problem Preparing Download" - }, - "hotkeys": { - "acceptStagingImage": { - "desc": "Accept Current Staging Area Image", - "title": "Accept Staging Image" - }, - "addNodes": { - "desc": "Opens the add node menu", - "title": "Add Nodes" - }, - "appHotkeys": "App Hotkeys", - "cancel": { - "desc": "Cancel image generation", - "title": "Cancel" - }, - "changeTabs": { - "desc": "Switch to another workspace", - "title": "Change Tabs" - }, - "clearMask": { - "desc": "Clear the entire mask", - "title": "Clear Mask" - }, - "closePanels": { - "desc": "Closes open panels", - "title": "Close Panels" - }, - "colorPicker": { - "desc": "Selects the canvas color picker", - "title": "Select Color Picker" - }, - "consoleToggle": { - "desc": "Open and close console", - "title": "Console Toggle" - }, - "copyToClipboard": { - "desc": "Copy current canvas to clipboard", - "title": "Copy to Clipboard" - }, - "decreaseBrushOpacity": { - "desc": "Decreases the opacity of the canvas brush", - "title": "Decrease Brush Opacity" - }, - "decreaseBrushSize": { - "desc": "Decreases the size of the canvas brush/eraser", - "title": "Decrease Brush Size" - }, - "decreaseGalleryThumbSize": { - "desc": "Decreases gallery thumbnails size", - "title": "Decrease Gallery Image Size" - }, - "deleteImage": { - "desc": "Delete the current image", - "title": "Delete Image" - }, - "downloadImage": { - "desc": "Download current canvas", - "title": "Download Image" - }, - "eraseBoundingBox": { - "desc": "Erases the bounding box area", - "title": "Erase Bounding Box" - }, - "fillBoundingBox": { - "desc": "Fills the bounding box with brush color", - "title": "Fill Bounding Box" - }, - "focusPrompt": { - "desc": "Focus the prompt input area", - "title": "Focus Prompt" - }, - "galleryHotkeys": "Gallery Hotkeys", - "generalHotkeys": "General Hotkeys", - "hideMask": { - "desc": "Hide and unhide mask", - "title": "Hide Mask" - }, - "increaseBrushOpacity": { - "desc": "Increases the opacity of the canvas brush", - "title": "Increase Brush Opacity" - }, - "increaseBrushSize": { - "desc": "Increases the size of the canvas brush/eraser", - "title": "Increase Brush Size" - }, - "increaseGalleryThumbSize": { - "desc": "Increases gallery thumbnails size", - "title": "Increase Gallery Image Size" - }, - "invoke": { - "desc": "Generate an image", - "title": "Invoke" - }, - "keyboardShortcuts": "Keyboard Shortcuts", - "maximizeWorkSpace": { - "desc": "Close panels and maximize work area", - "title": "Maximize Workspace" - }, - "mergeVisible": { - "desc": "Merge all visible layers of canvas", - "title": "Merge Visible" - }, - "moveTool": { - "desc": "Allows canvas navigation", - "title": "Move Tool" - }, - "nextImage": { - "desc": "Display the next image in gallery", - "title": "Next Image" - }, - "nextStagingImage": { - "desc": "Next Staging Area Image", - "title": "Next Staging Image" - }, - "nodesHotkeys": "Nodes Hotkeys", - "pinOptions": { - "desc": "Pin the options panel", - "title": "Pin Options" - }, - "previousImage": { - "desc": "Display the previous image in gallery", - "title": "Previous Image" - }, - "previousStagingImage": { - "desc": "Previous Staging Area Image", - "title": "Previous Staging Image" - }, - "quickToggleMove": { - "desc": "Temporarily toggles Move mode", - "title": "Quick Toggle Move" - }, - "redoStroke": { - "desc": "Redo a brush stroke", - "title": "Redo Stroke" - }, - "resetView": { - "desc": "Reset Canvas View", - "title": "Reset View" - }, - "restoreFaces": { - "desc": "Restore the current image", - "title": "Restore Faces" - }, - "saveToGallery": { - "desc": "Save current canvas to gallery", - "title": "Save To Gallery" - }, - "selectBrush": { - "desc": "Selects the canvas brush", - "title": "Select Brush" - }, - "selectEraser": { - "desc": "Selects the canvas eraser", - "title": "Select Eraser" - }, - "sendToImageToImage": { - "desc": "Send current image to Image to Image", - "title": "Send To Image To Image" - }, - "setParameters": { - "desc": "Use all parameters of the current image", - "title": "Set Parameters" - }, - "setPrompt": { - "desc": "Use the prompt of the current image", - "title": "Set Prompt" - }, - "setSeed": { - "desc": "Use the seed of the current image", - "title": "Set Seed" - }, - "showHideBoundingBox": { - "desc": "Toggle visibility of bounding box", - "title": "Show/Hide Bounding Box" - }, - "showInfo": { - "desc": "Show metadata info of the current image", - "title": "Show Info" - }, - "toggleGallery": { - "desc": "Open and close the gallery drawer", - "title": "Toggle Gallery" - }, - "toggleGalleryPin": { - "desc": "Pins and unpins the gallery to the UI", - "title": "Toggle Gallery Pin" - }, - "toggleLayer": { - "desc": "Toggles mask/base layer selection", - "title": "Toggle Layer" - }, - "toggleOptions": { - "desc": "Open and close the options panel", - "title": "Toggle Options" - }, - "toggleSnap": { - "desc": "Toggles Snap to Grid", - "title": "Toggle Snap" - }, - "toggleViewer": { - "desc": "Open and close Image Viewer", - "title": "Toggle Viewer" - }, - "undoStroke": { - "desc": "Undo a brush stroke", - "title": "Undo Stroke" - }, - "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", - "upscale": { - "desc": "Upscale the current image", - "title": "Upscale" - } - }, - "metadata": { - "cfgScale": "CFG scale", - "createdBy": "Created By", - "fit": "Image to image fit", - "generationMode": "Generation Mode", - "height": "Height", - "hiresFix": "High Resolution Optimization", - "imageDetails": "Image Details", - "initImage": "Initial image", - "metadata": "Metadata", - "model": "Model", - "negativePrompt": "Negative Prompt", - "noImageDetails": "No image details found", - "noMetaData": "No metadata found", - "noRecallParameters": "No parameters to recall found", - "perlin": "Perlin Noise", - "positivePrompt": "Positive Prompt", - "recallParameters": "Recall Parameters", - "scheduler": "Scheduler", - "seamless": "Seamless", - "seed": "Seed", - "steps": "Steps", - "strength": "Image to image strength", - "Threshold": "Noise Threshold", - "variations": "Seed-weight pairs", - "vae": "VAE", - "width": "Width", - "workflow": "Workflow" - }, - "modelManager": { - "active": "active", - "addCheckpointModel": "Add Checkpoint / Safetensor Model", - "addDifference": "Add Difference", - "addDiffuserModel": "Add Diffusers", - "addManually": "Add Manually", - "addModel": "Add Model", - "addNew": "Add New", - "addNewModel": "Add New Model", - "addSelected": "Add Selected", - "advanced": "Advanced", - "allModels": "All Models", - "alpha": "Alpha", - "availableModels": "Available Models", - "baseModel": "Base Model", - "cached": "cached", - "cannotUseSpaces": "Cannot Use Spaces", - "checkpointFolder": "Checkpoint Folder", - "checkpointModels": "Checkpoints", - "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", - "clearCheckpointFolder": "Clear Checkpoint Folder", - "closeAdvanced": "Close Advanced", - "config": "Config", - "configValidationMsg": "Path to the config file of your model.", - "convert": "Convert", - "convertingModelBegin": "Converting Model. Please wait.", - "convertToDiffusers": "Convert To Diffusers", - "convertToDiffusersHelpText1": "This model will be converted to the 🧨 Diffusers format.", - "convertToDiffusersHelpText2": "This process will replace your Model Manager entry with the Diffusers version of the same model.", - "convertToDiffusersHelpText3": "Your checkpoint file on disk WILL be deleted if it is in InvokeAI root folder. If it is in a custom location, then it WILL NOT be deleted.", - "convertToDiffusersHelpText4": "This is a one time process only. It might take around 30s-60s depending on the specifications of your computer.", - "convertToDiffusersHelpText5": "Please make sure you have enough disk space. Models generally vary between 2GB-7GB in size.", - "convertToDiffusersHelpText6": "Do you wish to convert this model?", - "convertToDiffusersSaveLocation": "Save Location", - "custom": "Custom", - "customConfig": "Custom Config", - "customConfigFileLocation": "Custom Config File Location", - "customSaveLocation": "Custom Save Location", - "delete": "Delete", - "deleteConfig": "Delete Config", - "deleteModel": "Delete Model", - "deleteMsg1": "Are you sure you want to delete this model from InvokeAI?", - "deleteMsg2": "This WILL delete the model from disk if it is in the InvokeAI root folder. If you are using a custom location, then the model WILL NOT be deleted from disk.", - "description": "Description", - "descriptionValidationMsg": "Add a description for your model", - "deselectAll": "Deselect All", - "diffusersModels": "Diffusers", - "findModels": "Find Models", - "formMessageDiffusersModelLocation": "Diffusers Model Location", - "formMessageDiffusersModelLocationDesc": "Please enter at least one.", - "formMessageDiffusersVAELocation": "VAE Location", - "formMessageDiffusersVAELocationDesc": "If not provided, InvokeAI will look for the VAE file inside the model location given above.", - "height": "Height", - "heightValidationMsg": "Default height of your model.", - "ignoreMismatch": "Ignore Mismatches Between Selected Models", - "importModels": "Import Models", - "inpainting": "v1 Inpainting", - "interpolationType": "Interpolation Type", - "inverseSigmoid": "Inverse Sigmoid", - "invokeAIFolder": "Invoke AI Folder", - "invokeRoot": "InvokeAI folder", - "load": "Load", - "loraModels": "LoRAs", - "manual": "Manual", - "merge": "Merge", - "mergedModelCustomSaveLocation": "Custom Path", - "mergedModelName": "Merged Model Name", - "mergedModelSaveLocation": "Save Location", - "mergeModels": "Merge Models", - "model": "Model", - "modelAdded": "Model Added", - "modelConversionFailed": "Model Conversion Failed", - "modelConverted": "Model Converted", - "modelDeleted": "Model Deleted", - "modelDeleteFailed": "Failed to delete model", - "modelEntryDeleted": "Model Entry Deleted", - "modelExists": "Model Exists", - "modelLocation": "Model Location", - "modelLocationValidationMsg": "Provide the path to a local folder where your Diffusers Model is stored", - "modelManager": "Model Manager", - "modelMergeAlphaHelp": "Alpha controls blend strength for the models. Lower alpha values lead to lower influence of the second model.", - "modelMergeHeaderHelp1": "You can merge up to three different models to create a blend that suits your needs.", - "modelMergeHeaderHelp2": "Only Diffusers are available for merging. If you want to merge a checkpoint model, please convert it to Diffusers first.", - "modelMergeInterpAddDifferenceHelp": "In this mode, Model 3 is first subtracted from Model 2. The resulting version is blended with Model 1 with the alpha rate set above.", - "modelOne": "Model 1", - "modelsFound": "Models Found", - "modelsMerged": "Models Merged", - "modelsMergeFailed": "Model Merge Failed", - "modelsSynced": "Models Synced", - "modelSyncFailed": "Model Sync Failed", - "modelThree": "Model 3", - "modelTwo": "Model 2", - "modelType": "Model Type", - "modelUpdated": "Model Updated", - "modelUpdateFailed": "Model Update Failed", - "name": "Name", - "nameValidationMsg": "Enter a name for your model", - "noCustomLocationProvided": "No Custom Location Provided", - "noModels": "No Models Found", - "noModelSelected": "No Model Selected", - "noModelsFound": "No Models Found", - "none": "none", - "notLoaded": "not loaded", - "oliveModels": "Olives", - "onnxModels": "Onnx", - "pathToCustomConfig": "Path To Custom Config", - "pickModelType": "Pick Model Type", - "predictionType": "Prediction Type (for Stable Diffusion 2.x Models and occasional Stable Diffusion 1.x Models)", - "quickAdd": "Quick Add", - "repo_id": "Repo ID", - "repoIDValidationMsg": "Online repository of your model", - "safetensorModels": "SafeTensors", - "sameFolder": "Same folder", - "scanAgain": "Scan Again", - "scanForModels": "Scan For Models", - "search": "Search", - "selectAll": "Select All", - "selectAndAdd": "Select and Add Models Listed Below", - "selected": "Selected", - "selectFolder": "Select Folder", - "selectModel": "Select Model", - "settings": "Settings", - "showExisting": "Show Existing", - "sigmoid": "Sigmoid", - "simpleModelDesc": "Provide a path to a local Diffusers model, local checkpoint / safetensors model a HuggingFace Repo ID, or a checkpoint/diffusers model URL.", - "statusConverting": "Converting", - "syncModels": "Sync Models", - "syncModelsDesc": "If your models are out of sync with the backend, you can refresh them up using this option. This is generally handy in cases where you manually update your models.yaml file or add models to the InvokeAI root folder after the application has booted.", - "updateModel": "Update Model", - "useCustomConfig": "Use Custom Config", - "v1": "v1", - "v2_768": "v2 (768px)", - "v2_base": "v2 (512px)", - "vae": "VAE", - "vaeLocation": "VAE Location", - "vaeLocationValidationMsg": "Path to where your VAE is located.", - "vaePrecision": "VAE Precision", - "vaeRepoID": "VAE Repo ID", - "vaeRepoIDValidationMsg": "Online repository of your VAE", - "variant": "Variant", - "weightedSum": "Weighted Sum", - "width": "Width", - "widthValidationMsg": "Default width of your model." - }, - "models": { - "addLora": "Add LoRA", - "esrganModel": "ESRGAN Model", - "loading": "loading", - "noLoRAsAvailable": "No LoRAs available", - "noMatchingLoRAs": "No matching LoRAs", - "noMatchingModels": "No matching Models", - "noModelsAvailable": "No models available", - "selectLoRA": "Select a LoRA", - "selectModel": "Select a Model", - "noLoRAsInstalled": "No LoRAs installed", - "noRefinerModelsInstalled": "No SDXL Refiner models installed" - }, - "nodes": { - "addNode": "Add Node", - "addNodeToolTip": "Add Node (Shift+A, Space)", - "animatedEdges": "Animated Edges", - "animatedEdgesHelp": "Animate selected edges and edges connected to selected nodes", - "boardField": "Board", - "boardFieldDescription": "A gallery board", - "boolean": "Booleans", - "booleanCollection": "Boolean Collection", - "booleanCollectionDescription": "A collection of booleans.", - "booleanDescription": "Booleans are true or false.", - "booleanPolymorphic": "Boolean Polymorphic", - "booleanPolymorphicDescription": "A collection of booleans.", - "cannotConnectInputToInput": "Cannot connect input to input", - "cannotConnectOutputToOutput": "Cannot connect output to output", - "cannotConnectToSelf": "Cannot connect to self", - "cannotDuplicateConnection": "Cannot create duplicate connections", - "clipField": "Clip", - "clipFieldDescription": "Tokenizer and text_encoder submodels.", - "collection": "Collection", - "collectionDescription": "TODO", - "collectionItem": "Collection Item", - "collectionItemDescription": "TODO", - "colorCodeEdges": "Color-Code Edges", - "colorCodeEdgesHelp": "Color-code edges according to their connected fields", - "colorCollection": "A collection of colors.", - "colorCollectionDescription": "TODO", - "colorField": "Color", - "colorFieldDescription": "A RGBA color.", - "colorPolymorphic": "Color Polymorphic", - "colorPolymorphicDescription": "A collection of colors.", - "conditioningCollection": "Conditioning Collection", - "conditioningCollectionDescription": "Conditioning may be passed between nodes.", - "conditioningField": "Conditioning", - "conditioningFieldDescription": "Conditioning may be passed between nodes.", - "conditioningPolymorphic": "Conditioning Polymorphic", - "conditioningPolymorphicDescription": "Conditioning may be passed between nodes.", - "connectionWouldCreateCycle": "Connection would create a cycle", - "controlCollection": "Control Collection", - "controlCollectionDescription": "Control info passed between nodes.", - "controlField": "Control", - "controlFieldDescription": "Control info passed between nodes.", - "currentImage": "Current Image", - "currentImageDescription": "Displays the current image in the Node Editor", - "denoiseMaskField": "Denoise Mask", - "denoiseMaskFieldDescription": "Denoise Mask may be passed between nodes", - "doesNotExist": "does not exist", - "downloadWorkflow": "Download Workflow JSON", - "edge": "Edge", - "enum": "Enum", - "enumDescription": "Enums are values that may be one of a number of options.", - "executionStateCompleted": "Completed", - "executionStateError": "Error", - "executionStateInProgress": "In Progress", - "fieldTypesMustMatch": "Field types must match", - "fitViewportNodes": "Fit View", - "float": "Float", - "floatCollection": "Float Collection", - "floatCollectionDescription": "A collection of floats.", - "floatDescription": "Floats are numbers with a decimal point.", - "floatPolymorphic": "Float Polymorphic", - "floatPolymorphicDescription": "A collection of floats.", - "fullyContainNodes": "Fully Contain Nodes to Select", - "fullyContainNodesHelp": "Nodes must be fully inside the selection box to be selected", - "hideGraphNodes": "Hide Graph Overlay", - "hideLegendNodes": "Hide Field Type Legend", - "hideMinimapnodes": "Hide MiniMap", - "imageCollection": "Image Collection", - "imageCollectionDescription": "A collection of images.", - "imageField": "Image", - "imageFieldDescription": "Images may be passed between nodes.", - "imagePolymorphic": "Image Polymorphic", - "imagePolymorphicDescription": "A collection of images.", - "inputField": "Input Field", - "inputFields": "Input Fields", - "inputMayOnlyHaveOneConnection": "Input may only have one connection", - "inputNode": "Input Node", - "integer": "Integer", - "integerCollection": "Integer Collection", - "integerCollectionDescription": "A collection of integers.", - "integerDescription": "Integers are whole numbers, without a decimal point.", - "integerPolymorphic": "Integer Polymorphic", - "integerPolymorphicDescription": "A collection of integers.", - "invalidOutputSchema": "Invalid output schema", - "ipAdapter": "IP-Adapter", - "ipAdapterCollection": "IP-Adapters Collection", - "ipAdapterCollectionDescription": "A collection of IP-Adapters.", - "ipAdapterDescription": "An Image Prompt Adapter (IP-Adapter).", - "ipAdapterModel": "IP-Adapter Model", - "ipAdapterModelDescription": "IP-Adapter Model Field", - "ipAdapterPolymorphic": "IP-Adapter Polymorphic", - "ipAdapterPolymorphicDescription": "A collection of IP-Adapters.", - "latentsCollection": "Latents Collection", - "latentsCollectionDescription": "Latents may be passed between nodes.", - "latentsField": "Latents", - "latentsFieldDescription": "Latents may be passed between nodes.", - "latentsPolymorphic": "Latents Polymorphic", - "latentsPolymorphicDescription": "Latents may be passed between nodes.", - "loadingNodes": "Loading Nodes...", - "loadWorkflow": "Load Workflow", - "noWorkflow": "No Workflow", - "loRAModelField": "LoRA", - "loRAModelFieldDescription": "TODO", - "mainModelField": "Model", - "mainModelFieldDescription": "TODO", - "maybeIncompatible": "May be Incompatible With Installed", - "mismatchedVersion": "Has Mismatched Version", - "missingCanvaInitImage": "Missing canvas init image", - "missingCanvaInitMaskImages": "Missing canvas init and mask images", - "missingTemplate": "Missing Template", - "noConnectionData": "No connection data", - "noConnectionInProgress": "No connection in progress", - "node": "Node", - "nodeOutputs": "Node Outputs", - "nodeSearch": "Search for nodes", - "nodeTemplate": "Node Template", - "nodeType": "Node Type", - "noFieldsLinearview": "No fields added to Linear View", - "noFieldType": "No field type", - "noImageFoundState": "No initial image found in state", - "noMatchingNodes": "No matching nodes", - "noNodeSelected": "No node selected", - "nodeOpacity": "Node Opacity", - "noOutputRecorded": "No outputs recorded", - "noOutputSchemaName": "No output schema name found in ref object", - "notes": "Notes", - "notesDescription": "Add notes about your workflow", - "oNNXModelField": "ONNX Model", - "oNNXModelFieldDescription": "ONNX model field.", - "outputField": "Output Field", - "outputFields": "Output Fields", - "outputNode": "Output node", - "outputSchemaNotFound": "Output schema not found", - "pickOne": "Pick One", - "problemReadingMetadata": "Problem reading metadata from image", - "problemReadingWorkflow": "Problem reading workflow from image", - "problemSettingTitle": "Problem Setting Title", - "reloadNodeTemplates": "Reload Node Templates", - "removeLinearView": "Remove from Linear View", - "resetWorkflow": "Reset Workflow", - "resetWorkflowDesc": "Are you sure you want to reset this workflow?", - "resetWorkflowDesc2": "Resetting the workflow will clear all nodes, edges and workflow details.", - "scheduler": "Scheduler", - "schedulerDescription": "TODO", - "sDXLMainModelField": "SDXL Model", - "sDXLMainModelFieldDescription": "SDXL model field.", - "sDXLRefinerModelField": "Refiner Model", - "sDXLRefinerModelFieldDescription": "TODO", - "showGraphNodes": "Show Graph Overlay", - "showLegendNodes": "Show Field Type Legend", - "showMinimapnodes": "Show MiniMap", - "skipped": "Skipped", - "skippedReservedInput": "Skipped reserved input field", - "skippedReservedOutput": "Skipped reserved output field", - "skippingInputNoTemplate": "Skipping input field with no template", - "skippingReservedFieldType": "Skipping reserved field type", - "skippingUnknownInputType": "Skipping unknown input field type", - "skippingUnknownOutputType": "Skipping unknown output field type", - "snapToGrid": "Snap to Grid", - "snapToGridHelp": "Snap nodes to grid when moved", - "sourceNode": "Source node", - "string": "String", - "stringCollection": "String Collection", - "stringCollectionDescription": "A collection of strings.", - "stringDescription": "Strings are text.", - "stringPolymorphic": "String Polymorphic", - "stringPolymorphicDescription": "A collection of strings.", - "unableToLoadWorkflow": "Unable to Validate Workflow", - "unableToParseEdge": "Unable to parse edge", - "unableToParseNode": "Unable to parse node", - "unableToValidateWorkflow": "Unable to Validate Workflow", - "uNetField": "UNet", - "uNetFieldDescription": "UNet submodel.", - "unhandledInputProperty": "Unhandled input property", - "unhandledOutputProperty": "Unhandled output property", - "unknownField": "Unknown Field", - "unknownNode": "Unknown Node", - "unknownTemplate": "Unknown Template", - "unkownInvocation": "Unknown Invocation type", - "updateNode": "Update Node", - "updateAllNodes": "Update All Nodes", - "updateApp": "Update App", - "unableToUpdateNodes_one": "Unable to update {{count}} node", - "unableToUpdateNodes_other": "Unable to update {{count}} nodes", - "vaeField": "Vae", - "vaeFieldDescription": "Vae submodel.", - "vaeModelField": "VAE", - "vaeModelFieldDescription": "TODO", - "validateConnections": "Validate Connections and Graph", - "validateConnectionsHelp": "Prevent invalid connections from being made, and invalid graphs from being invoked", - "version": "Version", - "versionUnknown": " Version Unknown", - "workflow": "Workflow", - "workflowAuthor": "Author", - "workflowContact": "Contact", - "workflowDescription": "Short Description", - "workflowName": "Name", - "workflowNotes": "Notes", - "workflowSettings": "Workflow Editor Settings", - "workflowTags": "Tags", - "workflowValidation": "Workflow Validation Error", - "workflowVersion": "Version", - "zoomInNodes": "Zoom In", - "zoomOutNodes": "Zoom Out" - }, - "parameters": { - "aspectRatio": "Aspect Ratio", - "aspectRatioFree": "Free", - "boundingBoxHeader": "Bounding Box", - "boundingBoxHeight": "Bounding Box Height", - "boundingBoxWidth": "Bounding Box Width", - "cancel": { - "cancel": "Cancel", - "immediate": "Cancel immediately", - "isScheduled": "Canceling", - "schedule": "Cancel after current iteration", - "setType": "Set cancel type" - }, - "cfgScale": "CFG Scale", - "clipSkip": "CLIP Skip", - "clipSkipWithLayerCount": "CLIP Skip {{layerCount}}", - "closeViewer": "Close Viewer", - "codeformerFidelity": "Fidelity", - "coherenceMode": "Mode", - "coherencePassHeader": "Coherence Pass", - "coherenceSteps": "Steps", - "coherenceStrength": "Strength", - "compositingSettingsHeader": "Compositing Settings", - "controlNetControlMode": "Control Mode", - "copyImage": "Copy Image", - "copyImageToLink": "Copy Image To Link", - "denoisingStrength": "Denoising Strength", - "downloadImage": "Download Image", - "enableNoiseSettings": "Enable Noise Settings", - "faceRestoration": "Face Restoration", - "general": "General", - "height": "Height", - "hidePreview": "Hide Preview", - "hiresOptim": "High Res Optimization", - "hiresStrength": "High Res Strength", - "hSymmetryStep": "H Symmetry Step", - "imageFit": "Fit Initial Image To Output Size", - "images": "Images", - "imageToImage": "Image to Image", - "img2imgStrength": "Image To Image Strength", - "infillMethod": "Infill Method", - "infillScalingHeader": "Infill and Scaling", - "info": "Info", - "initialImage": "Initial Image", - "invoke": { - "addingImagesTo": "Adding images to", - "invoke": "Invoke", - "missingFieldTemplate": "Missing field template", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} missing input", - "missingNodeTemplate": "Missing node template", - "noControlImageForControlAdapter": "Control Adapter #{{number}} has no control image", - "noInitialImageSelected": "No initial image selected", - "noModelForControlAdapter": "Control Adapter #{{number}} has no model selected.", - "incompatibleBaseModelForControlAdapter": "Control Adapter #{{number}} model is invalid with main model.", - "noModelSelected": "No model selected", - "noPrompts": "No prompts generated", - "noNodesInGraph": "No nodes in graph", - "readyToInvoke": "Ready to Invoke", - "systemBusy": "System busy", - "systemDisconnected": "System disconnected", - "unableToInvoke": "Unable to Invoke" - }, - "maskAdjustmentsHeader": "Mask Adjustments", - "maskBlur": "Blur", - "maskBlurMethod": "Blur Method", - "maskEdge": "Mask Edge", - "negativePromptPlaceholder": "Negative Prompt", - "noiseSettings": "Noise", - "noiseThreshold": "Noise Threshold", - "openInViewer": "Open In Viewer", - "otherOptions": "Other Options", - "patchmatchDownScaleSize": "Downscale", - "perlinNoise": "Perlin Noise", - "positivePromptPlaceholder": "Positive Prompt", - "randomizeSeed": "Randomize Seed", - "manualSeed": "Manual Seed", - "randomSeed": "Random Seed", - "restoreFaces": "Restore Faces", - "iterations": "Iterations", - "iterationsWithCount_one": "{{count}} Iteration", - "iterationsWithCount_other": "{{count}} Iterations", - "scale": "Scale", - "scaleBeforeProcessing": "Scale Before Processing", - "scaledHeight": "Scaled H", - "scaledWidth": "Scaled W", - "scheduler": "Scheduler", - "seamCorrectionHeader": "Seam Correction", - "seamHighThreshold": "High", - "seamlessTiling": "Seamless Tiling", - "seamlessXAxis": "X Axis", - "seamlessYAxis": "Y Axis", - "seamlessX": "Seamless X", - "seamlessY": "Seamless Y", - "seamlessX&Y": "Seamless X & Y", - "seamLowThreshold": "Low", - "seed": "Seed", - "seedWeights": "Seed Weights", - "imageActions": "Image Actions", - "sendTo": "Send to", - "sendToImg2Img": "Send to Image to Image", - "sendToUnifiedCanvas": "Send To Unified Canvas", - "showOptionsPanel": "Show Side Panel (O or T)", - "showPreview": "Show Preview", - "shuffle": "Shuffle Seed", - "steps": "Steps", - "strength": "Strength", - "symmetry": "Symmetry", - "tileSize": "Tile Size", - "toggleLoopback": "Toggle Loopback", - "type": "Type", - "upscale": "Upscale (Shift + U)", - "upscaleImage": "Upscale Image", - "upscaling": "Upscaling", - "unmasked": "Unmasked", - "useAll": "Use All", - "useCpuNoise": "Use CPU Noise", - "cpuNoise": "CPU Noise", - "gpuNoise": "GPU Noise", - "useInitImg": "Use Initial Image", - "usePrompt": "Use Prompt", - "useSeed": "Use Seed", - "variationAmount": "Variation Amount", - "variations": "Variations", - "vSymmetryStep": "V Symmetry Step", - "width": "Width", - "isAllowedToUpscale": { - "useX2Model": "Image is too large to upscale with x4 model, use x2 model", - "tooLarge": "Image is too large to upscale, select smaller image" - } - }, - "dynamicPrompts": { - "combinatorial": "Combinatorial Generation", - "dynamicPrompts": "Dynamic Prompts", - "enableDynamicPrompts": "Enable Dynamic Prompts", - "maxPrompts": "Max Prompts", - "promptsPreview": "Prompts Preview", - "promptsWithCount_one": "{{count}} Prompt", - "promptsWithCount_other": "{{count}} Prompts", - "seedBehaviour": { - "label": "Seed Behaviour", - "perIterationLabel": "Seed per Iteration", - "perIterationDesc": "Use a different seed for each iteration", - "perPromptLabel": "Seed per Image", - "perPromptDesc": "Use a different seed for each image" - } - }, - "sdxl": { - "cfgScale": "CFG Scale", - "concatPromptStyle": "Concatenate Prompt & Style", - "denoisingStrength": "Denoising Strength", - "loading": "Loading...", - "negAestheticScore": "Negative Aesthetic Score", - "negStylePrompt": "Negative Style Prompt", - "noModelsAvailable": "No models available", - "posAestheticScore": "Positive Aesthetic Score", - "posStylePrompt": "Positive Style Prompt", - "refiner": "Refiner", - "refinermodel": "Refiner Model", - "refinerStart": "Refiner Start", - "scheduler": "Scheduler", - "selectAModel": "Select a model", - "steps": "Steps", - "useRefiner": "Use Refiner" - }, - "settings": { - "alternateCanvasLayout": "Alternate Canvas Layout", - "antialiasProgressImages": "Antialias Progress Images", - "autoChangeDimensions": "Update W/H To Model Defaults On Change", - "beta": "Beta", - "confirmOnDelete": "Confirm On Delete", - "consoleLogLevel": "Log Level", - "developer": "Developer", - "displayHelpIcons": "Display Help Icons", - "displayInProgress": "Display Progress Images", - "enableImageDebugging": "Enable Image Debugging", - "enableInformationalPopovers": "Enable Informational Popovers", - "enableInvisibleWatermark": "Enable Invisible Watermark", - "enableNodesEditor": "Enable Nodes Editor", - "enableNSFWChecker": "Enable NSFW Checker", - "experimental": "Experimental", - "favoriteSchedulers": "Favorite Schedulers", - "favoriteSchedulersPlaceholder": "No schedulers favorited", - "general": "General", - "generation": "Generation", - "models": "Models", - "resetComplete": "Web UI has been reset.", - "resetWebUI": "Reset Web UI", - "resetWebUIDesc1": "Resetting the web UI only resets the browser's local cache of your images and remembered settings. It does not delete any images from disk.", - "resetWebUIDesc2": "If images aren't showing up in the gallery or something else isn't working, please try resetting before submitting an issue on GitHub.", - "saveSteps": "Save images every n steps", - "shouldLogToConsole": "Console Logging", - "showAdvancedOptions": "Show Advanced Options", - "showProgressInViewer": "Show Progress Images in Viewer", - "ui": "User Interface", - "useSlidersForAll": "Use Sliders For All Options", - "clearIntermediatesDisabled": "Queue must be empty to clear intermediates", - "clearIntermediatesDesc1": "Clearing intermediates will reset your Canvas and ControlNet state.", - "clearIntermediatesDesc2": "Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space.", - "clearIntermediatesDesc3": "Your gallery images will not be deleted.", - "clearIntermediates": "Clear Intermediates", - "clearIntermediatesWithCount_one": "Clear {{count}} Intermediate", - "clearIntermediatesWithCount_other": "Clear {{count}} Intermediates", - "intermediatesCleared_one": "Cleared {{count}} Intermediate", - "intermediatesCleared_other": "Cleared {{count}} Intermediates", - "intermediatesClearedFailed": "Problem Clearing Intermediates" - }, - "toast": { - "addedToBoard": "Added to board", - "baseModelChangedCleared_one": "Base model changed, cleared or disabled {{count}} incompatible submodel", - "baseModelChangedCleared_other": "Base model changed, cleared or disabled {{count}} incompatible submodels", - "canceled": "Processing Canceled", - "canvasCopiedClipboard": "Canvas Copied to Clipboard", - "canvasDownloaded": "Canvas Downloaded", - "canvasMerged": "Canvas Merged", - "canvasSavedGallery": "Canvas Saved to Gallery", - "canvasSentControlnetAssets": "Canvas Sent to ControlNet & Assets", - "connected": "Connected to Server", - "disconnected": "Disconnected from Server", - "downloadImageStarted": "Image Download Started", - "faceRestoreFailed": "Face Restoration Failed", - "imageCopied": "Image Copied", - "imageLinkCopied": "Image Link Copied", - "imageNotLoaded": "No Image Loaded", - "imageNotLoadedDesc": "Could not find image", - "imageSaved": "Image Saved", - "imageSavedToGallery": "Image Saved to Gallery", - "imageSavingFailed": "Image Saving Failed", - "imageUploaded": "Image Uploaded", - "imageUploadFailed": "Image Upload Failed", - "initialImageNotSet": "Initial Image Not Set", - "initialImageNotSetDesc": "Could not load initial image", - "initialImageSet": "Initial Image Set", - "loadedWithWarnings": "Workflow Loaded with Warnings", - "maskSavedAssets": "Mask Saved to Assets", - "maskSentControlnetAssets": "Mask Sent to ControlNet & Assets", - "metadataLoadFailed": "Failed to load metadata", - "modelAdded": "Model Added: {{modelName}}", - "modelAddedSimple": "Model Added", - "modelAddFailed": "Model Add Failed", - "nodesBrokenConnections": "Cannot load. Some connections are broken.", - "nodesCleared": "Nodes Cleared", - "nodesCorruptedGraph": "Cannot load. Graph seems to be corrupted.", - "nodesLoaded": "Nodes Loaded", - "nodesLoadedFailed": "Failed To Load Nodes", - "nodesNotValidGraph": "Not a valid InvokeAI Node Graph", - "nodesNotValidJSON": "Not a valid JSON", - "nodesSaved": "Nodes Saved", - "nodesUnrecognizedTypes": "Cannot load. Graph has unrecognized types", - "parameterNotSet": "Parameter not set", - "parameterSet": "Parameter set", - "parametersFailed": "Problem loading parameters", - "parametersFailedDesc": "Unable to load init image.", - "parametersNotSet": "Parameters Not Set", - "parametersNotSetDesc": "No metadata found for this image.", - "parametersSet": "Parameters Set", - "problemCopyingCanvas": "Problem Copying Canvas", - "problemCopyingCanvasDesc": "Unable to export base layer", - "problemCopyingImage": "Unable to Copy Image", - "problemCopyingImageLink": "Unable to Copy Image Link", - "problemDownloadingCanvas": "Problem Downloading Canvas", - "problemDownloadingCanvasDesc": "Unable to export base layer", - "problemImportingMask": "Problem Importing Mask", - "problemImportingMaskDesc": "Unable to export mask", - "problemMergingCanvas": "Problem Merging Canvas", - "problemMergingCanvasDesc": "Unable to export base layer", - "problemSavingCanvas": "Problem Saving Canvas", - "problemSavingCanvasDesc": "Unable to export base layer", - "problemSavingMask": "Problem Saving Mask", - "problemSavingMaskDesc": "Unable to export mask", - "promptNotSet": "Prompt Not Set", - "promptNotSetDesc": "Could not find prompt for this image.", - "promptSet": "Prompt Set", - "seedNotSet": "Seed Not Set", - "seedNotSetDesc": "Could not find seed for this image.", - "seedSet": "Seed Set", - "sentToImageToImage": "Sent To Image To Image", - "sentToUnifiedCanvas": "Sent to Unified Canvas", - "serverError": "Server Error", - "setAsCanvasInitialImage": "Set as canvas initial image", - "setCanvasInitialImage": "Set canvas initial image", - "setControlImage": "Set as control image", - "setIPAdapterImage": "Set as IP Adapter Image", - "setInitialImage": "Set as initial image", - "setNodeField": "Set as node field", - "tempFoldersEmptied": "Temp Folder Emptied", - "uploadFailed": "Upload failed", - "uploadFailedInvalidUploadDesc": "Must be single PNG or JPEG image", - "uploadFailedUnableToLoadDesc": "Unable to load file", - "upscalingFailed": "Upscaling Failed", - "workflowLoaded": "Workflow Loaded" - }, - "tooltip": { - "feature": { - "boundingBox": "The bounding box is the same as the Width and Height settings for Text to Image or Image to Image. Only the area in the box will be processed.", - "faceCorrection": "Face correction with GFPGAN or Codeformer: the algorithm detects faces in the image and corrects any defects. High value will change the image more, resulting in more attractive faces. Codeformer with a higher fidelity preserves the original image at the expense of stronger face correction.", - "gallery": "Gallery displays generations from the outputs folder as they're created. Settings are stored within files and accesed by context menu.", - "imageToImage": "Image to Image loads any image as initial, which is then used to generate a new one along with the prompt. The higher the value, the more the result image will change. Values from 0.0 to 1.0 are possible, the recommended range is .25-.75", - "infillAndScaling": "Manage infill methods (used on masked or erased areas of the canvas) and scaling (useful for small bounding box sizes).", - "other": "These options will enable alternative processing modes for Invoke. 'Seamless tiling' will create repeating patterns in the output. 'High resolution' is generation in two steps with img2img: use this setting when you want a larger and more coherent image without artifacts. It will take longer than usual txt2img.", - "prompt": "This is the prompt field. Prompt includes generation objects and stylistic terms. You can add weight (token importance) in the prompt as well, but CLI commands and parameters will not work.", - "seamCorrection": "Controls the handling of visible seams that occur between generated images on the canvas.", - "seed": "Seed value affects the initial noise from which the image is formed. You can use the already existing seeds from previous images. 'Noise Threshold' is used to mitigate artifacts at high CFG values (try the 0-10 range), and Perlin to add Perlin noise during generation: both serve to add variation to your outputs.", - "upscale": "Use ESRGAN to enlarge the image immediately after generation.", - "variations": "Try a variation with a value between 0.1 and 1.0 to change the result for a given seed. Interesting variations of the seed are between 0.1 and 0.3." - } - }, - "popovers": { - "clipSkip": { - "heading": "CLIP Skip", - "paragraphs": [ - "Choose how many layers of the CLIP model to skip.", - "Some models work better with certain CLIP Skip settings.", - "A higher value typically results in a less detailed image." - ] - }, - "paramNegativeConditioning": { - "heading": "Negative Prompt", - "paragraphs": [ - "The generation process avoids the concepts in the negative prompt. Use this to exclude qualities or objects from the output.", - "Supports Compel syntax and embeddings." - ] - }, - "paramPositiveConditioning": { - "heading": "Positive Prompt", - "paragraphs": [ - "Guides the generation process. You may use any words or phrases.", - "Compel and Dynamic Prompts syntaxes and embeddings." - ] - }, - "paramScheduler": { - "heading": "Scheduler", - "paragraphs": [ - "Scheduler defines how to iteratively add noise to an image or how to update a sample based on a model's output." - ] - }, - "compositingBlur": { - "heading": "Blur", - "paragraphs": [ - "The blur radius of the mask." - ] - }, - "compositingBlurMethod": { - "heading": "Blur Method", - "paragraphs": [ - "The method of blur applied to the masked area." - ] - }, - "compositingCoherencePass": { - "heading": "Coherence Pass", - "paragraphs": [ - "A second round of denoising helps to composite the Inpainted/Outpainted image." - ] - }, - "compositingCoherenceMode": { - "heading": "Mode", - "paragraphs": [ - "The mode of the Coherence Pass." - ] - }, - "compositingCoherenceSteps": { - "heading": "Steps", - "paragraphs": [ - "Number of denoising steps used in the Coherence Pass.", - "Same as the main Steps parameter." - ] - }, - "compositingStrength": { - "heading": "Strength", - "paragraphs": [ - "Denoising strength for the Coherence Pass.", - "Same as the Image to Image Denoising Strength parameter." - ] - }, - "compositingMaskAdjustments": { - "heading": "Mask Adjustments", - "paragraphs": [ - "Adjust the mask." - ] - }, - "controlNetBeginEnd": { - "heading": "Begin / End Step Percentage", - "paragraphs": [ - "Which steps of the denoising process will have the ControlNet applied.", - "ControlNets applied at the beginning of the process guide composition, and ControlNets applied at the end guide details." - ] - }, - "controlNetControlMode": { - "heading": "Control Mode", - "paragraphs": [ - "Lends more weight to either the prompt or ControlNet." - ] - }, - "controlNetResizeMode": { - "heading": "Resize Mode", - "paragraphs": [ - "How the ControlNet image will be fit to the image output size." - ] - }, - "controlNet": { - "heading": "ControlNet", - "paragraphs": [ - "ControlNets provide guidance to the generation process, helping create images with controlled composition, structure, or style, depending on the model selected." - ] - }, - "controlNetWeight": { - "heading": "Weight", - "paragraphs": [ - "How strongly the ControlNet will impact the generated image." - ] - }, - "dynamicPrompts": { - "heading": "Dynamic Prompts", - "paragraphs": [ - "Dynamic Prompts parses a single prompt into many.", - "The basic syntax is \"a {red|green|blue} ball\". This will produce three prompts: \"a red ball\", \"a green ball\" and \"a blue ball\".", - "You can use the syntax as many times as you like in a single prompt, but be sure to keep the number of prompts generated in check with the Max Prompts setting." - ] - }, - "dynamicPromptsMaxPrompts": { - "heading": "Max Prompts", - "paragraphs": [ - "Limits the number of prompts that can be generated by Dynamic Prompts." - ] - }, - "dynamicPromptsSeedBehaviour": { - "heading": "Seed Behaviour", - "paragraphs": [ - "Controls how the seed is used when generating prompts.", - "Per Iteration will use a unique seed for each iteration. Use this to explore prompt variations on a single seed.", - "For example, if you have 5 prompts, each image will use the same seed.", - "Per Image will use a unique seed for each image. This provides more variation." - ] - }, - "infillMethod": { - "heading": "Infill Method", - "paragraphs": [ - "Method to infill the selected area." - ] - }, - "lora": { - "heading": "LoRA Weight", - "paragraphs": [ - "Higher LoRA weight will lead to larger impacts on the final image." - ] - }, - "noiseUseCPU": { - "heading": "Use CPU Noise", - "paragraphs": [ - "Controls whether noise is generated on the CPU or GPU.", - "With CPU Noise enabled, a particular seed will produce the same image on any machine.", - "There is no performance impact to enabling CPU Noise." - ] - }, - "paramCFGScale": { - "heading": "CFG Scale", - "paragraphs": [ - "Controls how much your prompt influences the generation process." - ] - }, - "paramDenoisingStrength": { - "heading": "Denoising Strength", - "paragraphs": [ - "How much noise is added to the input image.", - "0 will result in an identical image, while 1 will result in a completely new image." - ] - }, - "paramIterations": { - "heading": "Iterations", - "paragraphs": [ - "The number of images to generate.", - "If Dynamic Prompts is enabled, each of the prompts will be generated this many times." - ] - }, - "paramModel": { - "heading": "Model", - "paragraphs": [ - "Model used for the denoising steps.", - "Different models are typically trained to specialize in producing particular aesthetic results and content." - ] - }, - "paramRatio": { - "heading": "Aspect Ratio", - "paragraphs": [ - "The aspect ratio of the dimensions of the image generated.", - "An image size (in number of pixels) equivalent to 512x512 is recommended for SD1.5 models and a size equivalent to 1024x1024 is recommended for SDXL models." - ] - }, - "paramSeed": { - "heading": "Seed", - "paragraphs": [ - "Controls the starting noise used for generation.", - "Disable “Random Seed” to produce identical results with the same generation settings." - ] - }, - "paramSteps": { - "heading": "Steps", - "paragraphs": [ - "Number of steps that will be performed in each generation.", - "Higher step counts will typically create better images but will require more generation time." - ] - }, - "paramVAE": { - "heading": "VAE", - "paragraphs": [ - "Model used for translating AI output into the final image." - ] - }, - "paramVAEPrecision": { - "heading": "VAE Precision", - "paragraphs": [ - "The precision used during VAE encoding and decoding. FP16/half precision is more efficient, at the expense of minor image variations." - ] - }, - "scaleBeforeProcessing": { - "heading": "Scale Before Processing", - "paragraphs": [ - "Scales the selected area to the size best suited for the model before the image generation process." - ] - } - }, - "ui": { - "hideProgressImages": "Hide Progress Images", - "lockRatio": "Lock Ratio", - "showProgressImages": "Show Progress Images", - "swapSizes": "Swap Sizes" - }, - "unifiedCanvas": { - "accept": "Accept", - "activeLayer": "Active Layer", - "antialiasing": "Antialiasing", - "autoSaveToGallery": "Auto Save to Gallery", - "base": "Base", - "betaClear": "Clear", - "betaDarkenOutside": "Darken Outside", - "betaLimitToBox": "Limit To Box", - "betaPreserveMasked": "Preserve Masked", - "boundingBox": "Bounding Box", - "boundingBoxPosition": "Bounding Box Position", - "brush": "Brush", - "brushOptions": "Brush Options", - "brushSize": "Size", - "canvasDimensions": "Canvas Dimensions", - "canvasPosition": "Canvas Position", - "canvasScale": "Canvas Scale", - "canvasSettings": "Canvas Settings", - "clearCanvas": "Clear Canvas", - "clearCanvasHistory": "Clear Canvas History", - "clearCanvasHistoryConfirm": "Are you sure you want to clear the canvas history?", - "clearCanvasHistoryMessage": "Clearing the canvas history leaves your current canvas intact, but irreversibly clears the undo and redo history.", - "clearHistory": "Clear History", - "clearMask": "Clear Mask", - "colorPicker": "Color Picker", - "copyToClipboard": "Copy to Clipboard", - "cursorPosition": "Cursor Position", - "darkenOutsideSelection": "Darken Outside Selection", - "discardAll": "Discard All", - "downloadAsImage": "Download As Image", - "emptyFolder": "Empty Folder", - "emptyTempImageFolder": "Empty Temp Image Folder", - "emptyTempImagesFolderConfirm": "Are you sure you want to empty the temp folder?", - "emptyTempImagesFolderMessage": "Emptying the temp image folder also fully resets the Unified Canvas. This includes all undo/redo history, images in the staging area, and the canvas base layer.", - "enableMask": "Enable Mask", - "eraseBoundingBox": "Erase Bounding Box", - "eraser": "Eraser", - "fillBoundingBox": "Fill Bounding Box", - "layer": "Layer", - "limitStrokesToBox": "Limit Strokes to Box", - "mask": "Mask", - "maskingOptions": "Masking Options", - "mergeVisible": "Merge Visible", - "move": "Move", - "next": "Next", - "preserveMaskedArea": "Preserve Masked Area", - "previous": "Previous", - "redo": "Redo", - "resetView": "Reset View", - "saveBoxRegionOnly": "Save Box Region Only", - "saveToGallery": "Save To Gallery", - "scaledBoundingBox": "Scaled Bounding Box", - "showCanvasDebugInfo": "Show Additional Canvas Info", - "showGrid": "Show Grid", - "showHide": "Show/Hide", - "showResultsOn": "Show Results (On)", - "showResultsOff": "Show Results (Off)", - "showIntermediates": "Show Intermediates", - "snapToGrid": "Snap to Grid", - "undo": "Undo" - } -} diff --git a/invokeai/frontend/web/dist/locales/es.json b/invokeai/frontend/web/dist/locales/es.json deleted file mode 100644 index 8ff4c53165..0000000000 --- a/invokeai/frontend/web/dist/locales/es.json +++ /dev/null @@ -1,737 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Atajos de teclado", - "languagePickerLabel": "Selector de idioma", - "reportBugLabel": "Reportar errores", - "settingsLabel": "Ajustes", - "img2img": "Imagen a Imagen", - "unifiedCanvas": "Lienzo Unificado", - "nodes": "Editor del flujo de trabajo", - "langSpanish": "Español", - "nodesDesc": "Un sistema de generación de imágenes basado en nodos, actualmente se encuentra en desarrollo. Mantente pendiente a nuestras actualizaciones acerca de esta fabulosa funcionalidad.", - "postProcessing": "Post-procesamiento", - "postProcessDesc1": "Invoke AI ofrece una gran variedad de funciones de post-procesamiento, El aumento de tamaño y Restauración de Rostros ya se encuentran disponibles en la interfaz web, puedes acceder desde el menú de Opciones Avanzadas en las pestañas de Texto a Imagen y de Imagen a Imagen. También puedes acceder a estas funciones directamente mediante el botón de acciones en el menú superior de la imagen actual o en el visualizador.", - "postProcessDesc2": "Una interfaz de usuario dedicada se lanzará pronto para facilitar flujos de trabajo de postprocesamiento más avanzado.", - "postProcessDesc3": "La Interfaz de Línea de Comandos de Invoke AI ofrece muchas otras características, incluyendo -Embiggen-.", - "training": "Entrenamiento", - "trainingDesc1": "Un flujo de trabajo dedicado para el entrenamiento de sus propios -embeddings- y puntos de control utilizando Inversión Textual y Dreambooth desde la interfaz web.", - "trainingDesc2": "InvokeAI ya admite el entrenamiento de incrustaciones personalizadas mediante la inversión textual mediante el script principal.", - "upload": "Subir imagen", - "close": "Cerrar", - "load": "Cargar", - "statusConnected": "Conectado", - "statusDisconnected": "Desconectado", - "statusError": "Error", - "statusPreparing": "Preparando", - "statusProcessingCanceled": "Procesamiento Cancelado", - "statusProcessingComplete": "Procesamiento Completo", - "statusGenerating": "Generando", - "statusGeneratingTextToImage": "Generando Texto a Imagen", - "statusGeneratingImageToImage": "Generando Imagen a Imagen", - "statusGeneratingInpainting": "Generando pintura interior", - "statusGeneratingOutpainting": "Generando pintura exterior", - "statusGenerationComplete": "Generación Completa", - "statusIterationComplete": "Iteración Completa", - "statusSavingImage": "Guardando Imagen", - "statusRestoringFaces": "Restaurando Rostros", - "statusRestoringFacesGFPGAN": "Restaurando Rostros (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restaurando Rostros (CodeFormer)", - "statusUpscaling": "Aumentando Tamaño", - "statusUpscalingESRGAN": "Restaurando Rostros(ESRGAN)", - "statusLoadingModel": "Cargando Modelo", - "statusModelChanged": "Modelo cambiado", - "statusMergedModels": "Modelos combinados", - "githubLabel": "Github", - "discordLabel": "Discord", - "langEnglish": "Inglés", - "langDutch": "Holandés", - "langFrench": "Francés", - "langGerman": "Alemán", - "langItalian": "Italiano", - "langArabic": "Árabe", - "langJapanese": "Japones", - "langPolish": "Polaco", - "langBrPortuguese": "Portugués brasileño", - "langRussian": "Ruso", - "langSimplifiedChinese": "Chino simplificado", - "langUkranian": "Ucraniano", - "back": "Atrás", - "statusConvertingModel": "Convertir el modelo", - "statusModelConverted": "Modelo adaptado", - "statusMergingModels": "Fusionar modelos", - "langPortuguese": "Portugués", - "langKorean": "Coreano", - "langHebrew": "Hebreo", - "loading": "Cargando", - "loadingInvokeAI": "Cargando invocar a la IA", - "postprocessing": "Tratamiento posterior", - "txt2img": "De texto a imagen", - "accept": "Aceptar", - "cancel": "Cancelar", - "linear": "Lineal", - "random": "Aleatorio", - "generate": "Generar", - "openInNewTab": "Abrir en una nueva pestaña", - "dontAskMeAgain": "No me preguntes de nuevo", - "areYouSure": "¿Estas seguro?", - "imagePrompt": "Indicación de imagen", - "batch": "Administrador de lotes", - "darkMode": "Modo oscuro", - "lightMode": "Modo claro", - "modelManager": "Administrador de modelos", - "communityLabel": "Comunidad" - }, - "gallery": { - "generations": "Generaciones", - "showGenerations": "Mostrar Generaciones", - "uploads": "Subidas de archivos", - "showUploads": "Mostar Subidas", - "galleryImageSize": "Tamaño de la imagen", - "galleryImageResetSize": "Restablecer tamaño de la imagen", - "gallerySettings": "Ajustes de la galería", - "maintainAspectRatio": "Mantener relación de aspecto", - "autoSwitchNewImages": "Auto seleccionar Imágenes nuevas", - "singleColumnLayout": "Diseño de una columna", - "allImagesLoaded": "Todas las imágenes cargadas", - "loadMore": "Cargar más", - "noImagesInGallery": "No hay imágenes para mostrar", - "deleteImage": "Eliminar Imagen", - "deleteImageBin": "Las imágenes eliminadas se enviarán a la papelera de tu sistema operativo.", - "deleteImagePermanent": "Las imágenes eliminadas no se pueden restaurar.", - "images": "Imágenes", - "assets": "Activos", - "autoAssignBoardOnClick": "Asignación automática de tableros al hacer clic" - }, - "hotkeys": { - "keyboardShortcuts": "Atajos de teclado", - "appHotkeys": "Atajos de applicación", - "generalHotkeys": "Atajos generales", - "galleryHotkeys": "Atajos de galería", - "unifiedCanvasHotkeys": "Atajos de lienzo unificado", - "invoke": { - "title": "Invocar", - "desc": "Generar una imagen" - }, - "cancel": { - "title": "Cancelar", - "desc": "Cancelar el proceso de generación de imagen" - }, - "focusPrompt": { - "title": "Mover foco a Entrada de texto", - "desc": "Mover foco hacia el campo de texto de la Entrada" - }, - "toggleOptions": { - "title": "Alternar opciones", - "desc": "Mostar y ocultar el panel de opciones" - }, - "pinOptions": { - "title": "Fijar opciones", - "desc": "Fijar el panel de opciones" - }, - "toggleViewer": { - "title": "Alternar visor", - "desc": "Mostar y ocultar el visor de imágenes" - }, - "toggleGallery": { - "title": "Alternar galería", - "desc": "Mostar y ocultar la galería de imágenes" - }, - "maximizeWorkSpace": { - "title": "Maximizar espacio de trabajo", - "desc": "Cerrar otros páneles y maximizar el espacio de trabajo" - }, - "changeTabs": { - "title": "Cambiar", - "desc": "Cambiar entre áreas de trabajo" - }, - "consoleToggle": { - "title": "Alternar consola", - "desc": "Mostar y ocultar la consola" - }, - "setPrompt": { - "title": "Establecer Entrada", - "desc": "Usar el texto de entrada de la imagen actual" - }, - "setSeed": { - "title": "Establecer semilla", - "desc": "Usar la semilla de la imagen actual" - }, - "setParameters": { - "title": "Establecer parámetros", - "desc": "Usar todos los parámetros de la imagen actual" - }, - "restoreFaces": { - "title": "Restaurar rostros", - "desc": "Restaurar rostros en la imagen actual" - }, - "upscale": { - "title": "Aumentar resolución", - "desc": "Aumentar la resolución de la imagen actual" - }, - "showInfo": { - "title": "Mostrar información", - "desc": "Mostar metadatos de la imagen actual" - }, - "sendToImageToImage": { - "title": "Enviar hacia Imagen a Imagen", - "desc": "Enviar imagen actual hacia Imagen a Imagen" - }, - "deleteImage": { - "title": "Eliminar imagen", - "desc": "Eliminar imagen actual" - }, - "closePanels": { - "title": "Cerrar páneles", - "desc": "Cerrar los páneles abiertos" - }, - "previousImage": { - "title": "Imagen anterior", - "desc": "Muetra la imagen anterior en la galería" - }, - "nextImage": { - "title": "Imagen siguiente", - "desc": "Muetra la imagen siguiente en la galería" - }, - "toggleGalleryPin": { - "title": "Alternar fijado de galería", - "desc": "Fijar o desfijar la galería en la interfaz" - }, - "increaseGalleryThumbSize": { - "title": "Aumentar imagen en galería", - "desc": "Aumenta el tamaño de las miniaturas de la galería" - }, - "decreaseGalleryThumbSize": { - "title": "Reducir imagen en galería", - "desc": "Reduce el tamaño de las miniaturas de la galería" - }, - "selectBrush": { - "title": "Seleccionar pincel", - "desc": "Selecciona el pincel en el lienzo" - }, - "selectEraser": { - "title": "Seleccionar borrador", - "desc": "Selecciona el borrador en el lienzo" - }, - "decreaseBrushSize": { - "title": "Disminuir tamaño de herramienta", - "desc": "Disminuye el tamaño del pincel/borrador en el lienzo" - }, - "increaseBrushSize": { - "title": "Aumentar tamaño del pincel", - "desc": "Aumenta el tamaño del pincel en el lienzo" - }, - "decreaseBrushOpacity": { - "title": "Disminuir opacidad del pincel", - "desc": "Disminuye la opacidad del pincel en el lienzo" - }, - "increaseBrushOpacity": { - "title": "Aumentar opacidad del pincel", - "desc": "Aumenta la opacidad del pincel en el lienzo" - }, - "moveTool": { - "title": "Herramienta de movimiento", - "desc": "Permite navegar por el lienzo" - }, - "fillBoundingBox": { - "title": "Rellenar Caja contenedora", - "desc": "Rellena la caja contenedora con el color seleccionado" - }, - "eraseBoundingBox": { - "title": "Borrar Caja contenedora", - "desc": "Borra el contenido dentro de la caja contenedora" - }, - "colorPicker": { - "title": "Selector de color", - "desc": "Selecciona un color del lienzo" - }, - "toggleSnap": { - "title": "Alternar ajuste de cuadrícula", - "desc": "Activa o desactiva el ajuste automático a la cuadrícula" - }, - "quickToggleMove": { - "title": "Alternar movimiento rápido", - "desc": "Activa momentáneamente la herramienta de movimiento" - }, - "toggleLayer": { - "title": "Alternar capa", - "desc": "Alterna entre las capas de máscara y base" - }, - "clearMask": { - "title": "Limpiar máscara", - "desc": "Limpia toda la máscara actual" - }, - "hideMask": { - "title": "Ocultar máscara", - "desc": "Oculta o muetre la máscara actual" - }, - "showHideBoundingBox": { - "title": "Alternar caja contenedora", - "desc": "Muestra u oculta la caja contenedora" - }, - "mergeVisible": { - "title": "Consolida capas visibles", - "desc": "Consolida todas las capas visibles en una sola" - }, - "saveToGallery": { - "title": "Guardar en galería", - "desc": "Guardar la imagen actual del lienzo en la galería" - }, - "copyToClipboard": { - "title": "Copiar al portapapeles", - "desc": "Copiar el lienzo actual al portapapeles" - }, - "downloadImage": { - "title": "Descargar imagen", - "desc": "Descargar la imagen actual del lienzo" - }, - "undoStroke": { - "title": "Deshar trazo", - "desc": "Desahacer el último trazo del pincel" - }, - "redoStroke": { - "title": "Rehacer trazo", - "desc": "Rehacer el último trazo del pincel" - }, - "resetView": { - "title": "Restablecer vista", - "desc": "Restablecer la vista del lienzo" - }, - "previousStagingImage": { - "title": "Imagen anterior", - "desc": "Imagen anterior en el área de preparación" - }, - "nextStagingImage": { - "title": "Imagen siguiente", - "desc": "Siguiente imagen en el área de preparación" - }, - "acceptStagingImage": { - "title": "Aceptar imagen", - "desc": "Aceptar la imagen actual en el área de preparación" - }, - "addNodes": { - "title": "Añadir Nodos", - "desc": "Abre el menú para añadir nodos" - }, - "nodesHotkeys": "Teclas de acceso rápido a los nodos" - }, - "modelManager": { - "modelManager": "Gestor de Modelos", - "model": "Modelo", - "modelAdded": "Modelo añadido", - "modelUpdated": "Modelo actualizado", - "modelEntryDeleted": "Endrada de Modelo eliminada", - "cannotUseSpaces": "No se pueden usar Spaces", - "addNew": "Añadir nuevo", - "addNewModel": "Añadir nuevo modelo", - "addManually": "Añadir manualmente", - "manual": "Manual", - "name": "Nombre", - "nameValidationMsg": "Introduce un nombre para tu modelo", - "description": "Descripción", - "descriptionValidationMsg": "Introduce una descripción para tu modelo", - "config": "Configurar", - "configValidationMsg": "Ruta del archivo de configuración del modelo.", - "modelLocation": "Ubicación del Modelo", - "modelLocationValidationMsg": "Ruta del archivo de modelo.", - "vaeLocation": "Ubicación VAE", - "vaeLocationValidationMsg": "Ruta del archivo VAE.", - "width": "Ancho", - "widthValidationMsg": "Ancho predeterminado de tu modelo.", - "height": "Alto", - "heightValidationMsg": "Alto predeterminado de tu modelo.", - "addModel": "Añadir Modelo", - "updateModel": "Actualizar Modelo", - "availableModels": "Modelos disponibles", - "search": "Búsqueda", - "load": "Cargar", - "active": "activo", - "notLoaded": "no cargado", - "cached": "en caché", - "checkpointFolder": "Directorio de Checkpoint", - "clearCheckpointFolder": "Limpiar directorio de checkpoint", - "findModels": "Buscar modelos", - "scanAgain": "Escanear de nuevo", - "modelsFound": "Modelos encontrados", - "selectFolder": "Selecciona un directorio", - "selected": "Seleccionado", - "selectAll": "Seleccionar todo", - "deselectAll": "Deseleccionar todo", - "showExisting": "Mostrar existentes", - "addSelected": "Añadir seleccionados", - "modelExists": "Modelo existente", - "selectAndAdd": "Selecciona de la lista un modelo para añadir", - "noModelsFound": "No se encontró ningún modelo", - "delete": "Eliminar", - "deleteModel": "Eliminar Modelo", - "deleteConfig": "Eliminar Configuración", - "deleteMsg1": "¿Estás seguro de que deseas eliminar este modelo de InvokeAI?", - "deleteMsg2": "Esto eliminará el modelo del disco si está en la carpeta raíz de InvokeAI. Si está utilizando una ubicación personalizada, el modelo NO se eliminará del disco.", - "safetensorModels": "SafeTensors", - "addDiffuserModel": "Añadir difusores", - "inpainting": "v1 Repintado", - "repoIDValidationMsg": "Repositorio en línea de tu modelo", - "checkpointModels": "Puntos de control", - "convertToDiffusersHelpText4": "Este proceso se realiza una sola vez. Puede tardar entre 30 y 60 segundos dependiendo de las especificaciones de tu ordenador.", - "diffusersModels": "Difusores", - "addCheckpointModel": "Agregar modelo de punto de control/Modelo Safetensor", - "vaeRepoID": "Identificador del repositorio de VAE", - "vaeRepoIDValidationMsg": "Repositorio en línea de tú VAE", - "formMessageDiffusersModelLocation": "Difusores Modelo Ubicación", - "formMessageDiffusersModelLocationDesc": "Por favor, introduzca al menos uno.", - "formMessageDiffusersVAELocation": "Ubicación VAE", - "formMessageDiffusersVAELocationDesc": "Si no se proporciona, InvokeAI buscará el archivo VAE dentro de la ubicación del modelo indicada anteriormente.", - "convert": "Convertir", - "convertToDiffusers": "Convertir en difusores", - "convertToDiffusersHelpText1": "Este modelo se convertirá al formato 🧨 Difusores.", - "convertToDiffusersHelpText2": "Este proceso sustituirá su entrada del Gestor de Modelos por la versión de Difusores del mismo modelo.", - "convertToDiffusersHelpText3": "Tu archivo del punto de control en el disco se eliminará si está en la carpeta raíz de InvokeAI. Si está en una ubicación personalizada, NO se eliminará.", - "convertToDiffusersHelpText5": "Por favor, asegúrate de tener suficiente espacio en el disco. Los modelos generalmente varían entre 2 GB y 7 GB de tamaño.", - "convertToDiffusersHelpText6": "¿Desea transformar este modelo?", - "convertToDiffusersSaveLocation": "Guardar ubicación", - "v1": "v1", - "statusConverting": "Adaptar", - "modelConverted": "Modelo adaptado", - "sameFolder": "La misma carpeta", - "invokeRoot": "Carpeta InvokeAI", - "custom": "Personalizado", - "customSaveLocation": "Ubicación personalizada para guardar", - "merge": "Fusión", - "modelsMerged": "Modelos fusionados", - "mergeModels": "Combinar modelos", - "modelOne": "Modelo 1", - "modelTwo": "Modelo 2", - "modelThree": "Modelo 3", - "mergedModelName": "Nombre del modelo combinado", - "alpha": "Alfa", - "interpolationType": "Tipo de interpolación", - "mergedModelSaveLocation": "Guardar ubicación", - "mergedModelCustomSaveLocation": "Ruta personalizada", - "invokeAIFolder": "Invocar carpeta de la inteligencia artificial", - "modelMergeHeaderHelp2": "Sólo se pueden fusionar difusores. Si desea fusionar un modelo de punto de control, conviértalo primero en difusores.", - "modelMergeAlphaHelp": "Alfa controla la fuerza de mezcla de los modelos. Los valores alfa más bajos reducen la influencia del segundo modelo.", - "modelMergeInterpAddDifferenceHelp": "En este modo, el Modelo 3 se sustrae primero del Modelo 2. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente.", - "ignoreMismatch": "Ignorar discrepancias entre modelos seleccionados", - "modelMergeHeaderHelp1": "Puede unir hasta tres modelos diferentes para crear una combinación que se adapte a sus necesidades.", - "inverseSigmoid": "Sigmoideo inverso", - "weightedSum": "Modelo de suma ponderada", - "sigmoid": "Función sigmoide", - "allModels": "Todos los modelos", - "repo_id": "Identificador del repositorio", - "pathToCustomConfig": "Ruta a la configuración personalizada", - "customConfig": "Configuración personalizada", - "v2_base": "v2 (512px)", - "none": "ninguno", - "pickModelType": "Elige el tipo de modelo", - "v2_768": "v2 (768px)", - "addDifference": "Añadir una diferencia", - "scanForModels": "Buscar modelos", - "vae": "VAE", - "variant": "Variante", - "baseModel": "Modelo básico", - "modelConversionFailed": "Conversión al modelo fallida", - "selectModel": "Seleccionar un modelo", - "modelUpdateFailed": "Error al actualizar el modelo", - "modelsMergeFailed": "Fusión del modelo fallida", - "convertingModelBegin": "Convirtiendo el modelo. Por favor, espere.", - "modelDeleted": "Modelo eliminado", - "modelDeleteFailed": "Error al borrar el modelo", - "noCustomLocationProvided": "‐No se proporcionó una ubicación personalizada", - "importModels": "Importar los modelos", - "settings": "Ajustes", - "syncModels": "Sincronizar las plantillas", - "syncModelsDesc": "Si tus plantillas no están sincronizados con el backend, puedes actualizarlas usando esta opción. Esto suele ser útil en los casos en los que actualizas manualmente tu archivo models.yaml o añades plantillas a la carpeta raíz de InvokeAI después de que la aplicación haya arrancado.", - "modelsSynced": "Plantillas sincronizadas", - "modelSyncFailed": "La sincronización de la plantilla falló", - "loraModels": "LoRA", - "onnxModels": "Onnx", - "oliveModels": "Olives" - }, - "parameters": { - "images": "Imágenes", - "steps": "Pasos", - "cfgScale": "Escala CFG", - "width": "Ancho", - "height": "Alto", - "seed": "Semilla", - "randomizeSeed": "Semilla aleatoria", - "shuffle": "Semilla aleatoria", - "noiseThreshold": "Umbral de Ruido", - "perlinNoise": "Ruido Perlin", - "variations": "Variaciones", - "variationAmount": "Cantidad de Variación", - "seedWeights": "Peso de las semillas", - "faceRestoration": "Restauración de Rostros", - "restoreFaces": "Restaurar rostros", - "type": "Tipo", - "strength": "Fuerza", - "upscaling": "Aumento de resolución", - "upscale": "Aumentar resolución", - "upscaleImage": "Aumentar la resolución de la imagen", - "scale": "Escala", - "otherOptions": "Otras opciones", - "seamlessTiling": "Mosaicos sin parches", - "hiresOptim": "Optimización de Alta Resolución", - "imageFit": "Ajuste tamaño de imagen inicial al tamaño objetivo", - "codeformerFidelity": "Fidelidad", - "scaleBeforeProcessing": "Redimensionar antes de procesar", - "scaledWidth": "Ancho escalado", - "scaledHeight": "Alto escalado", - "infillMethod": "Método de relleno", - "tileSize": "Tamaño del mosaico", - "boundingBoxHeader": "Caja contenedora", - "seamCorrectionHeader": "Corrección de parches", - "infillScalingHeader": "Remplazo y escalado", - "img2imgStrength": "Peso de Imagen a Imagen", - "toggleLoopback": "Alternar Retroalimentación", - "sendTo": "Enviar a", - "sendToImg2Img": "Enviar a Imagen a Imagen", - "sendToUnifiedCanvas": "Enviar a Lienzo Unificado", - "copyImageToLink": "Copiar imagen a enlace", - "downloadImage": "Descargar imagen", - "openInViewer": "Abrir en Visor", - "closeViewer": "Cerrar Visor", - "usePrompt": "Usar Entrada", - "useSeed": "Usar Semilla", - "useAll": "Usar Todo", - "useInitImg": "Usar Imagen Inicial", - "info": "Información", - "initialImage": "Imagen Inicial", - "showOptionsPanel": "Mostrar panel de opciones", - "symmetry": "Simetría", - "vSymmetryStep": "Paso de simetría V", - "hSymmetryStep": "Paso de simetría H", - "cancel": { - "immediate": "Cancelar inmediatamente", - "schedule": "Cancelar tras la iteración actual", - "isScheduled": "Cancelando", - "setType": "Tipo de cancelación" - }, - "copyImage": "Copiar la imagen", - "general": "General", - "imageToImage": "Imagen a imagen", - "denoisingStrength": "Intensidad de la eliminación del ruido", - "hiresStrength": "Alta resistencia", - "showPreview": "Mostrar la vista previa", - "hidePreview": "Ocultar la vista previa", - "noiseSettings": "Ruido", - "seamlessXAxis": "Eje x", - "seamlessYAxis": "Eje y", - "scheduler": "Programador", - "boundingBoxWidth": "Anchura del recuadro", - "boundingBoxHeight": "Altura del recuadro", - "positivePromptPlaceholder": "Prompt Positivo", - "negativePromptPlaceholder": "Prompt Negativo", - "controlNetControlMode": "Modo de control", - "clipSkip": "Omitir el CLIP", - "aspectRatio": "Relación", - "maskAdjustmentsHeader": "Ajustes de la máscara", - "maskBlur": "Difuminar", - "maskBlurMethod": "Método del desenfoque", - "seamHighThreshold": "Alto", - "seamLowThreshold": "Bajo", - "coherencePassHeader": "Parámetros de la coherencia", - "compositingSettingsHeader": "Ajustes de la composición", - "coherenceSteps": "Pasos", - "coherenceStrength": "Fuerza", - "patchmatchDownScaleSize": "Reducir a escala", - "coherenceMode": "Modo" - }, - "settings": { - "models": "Modelos", - "displayInProgress": "Mostrar las imágenes del progreso", - "saveSteps": "Guardar imágenes cada n pasos", - "confirmOnDelete": "Confirmar antes de eliminar", - "displayHelpIcons": "Mostrar iconos de ayuda", - "enableImageDebugging": "Habilitar depuración de imágenes", - "resetWebUI": "Restablecer interfaz web", - "resetWebUIDesc1": "Al restablecer la interfaz web, solo se restablece la caché local del navegador de sus imágenes y la configuración guardada. No se elimina ninguna imagen de su disco duro.", - "resetWebUIDesc2": "Si las imágenes no se muestran en la galería o algo más no funciona, intente restablecer antes de reportar un incidente en GitHub.", - "resetComplete": "Se ha restablecido la interfaz web.", - "useSlidersForAll": "Utilice controles deslizantes para todas las opciones", - "general": "General", - "consoleLogLevel": "Nivel del registro", - "shouldLogToConsole": "Registro de la consola", - "developer": "Desarrollador", - "antialiasProgressImages": "Imágenes del progreso de Antialias", - "showProgressInViewer": "Mostrar las imágenes del progreso en el visor", - "ui": "Interfaz del usuario", - "generation": "Generación", - "favoriteSchedulers": "Programadores favoritos", - "favoriteSchedulersPlaceholder": "No hay programadores favoritos", - "showAdvancedOptions": "Mostrar las opciones avanzadas", - "alternateCanvasLayout": "Diseño alternativo del lienzo", - "beta": "Beta", - "enableNodesEditor": "Activar el editor de nodos", - "experimental": "Experimental", - "autoChangeDimensions": "Actualiza W/H a los valores predeterminados del modelo cuando se modifica" - }, - "toast": { - "tempFoldersEmptied": "Directorio temporal vaciado", - "uploadFailed": "Error al subir archivo", - "uploadFailedUnableToLoadDesc": "No se pudo cargar la imágen", - "downloadImageStarted": "Descargando imágen", - "imageCopied": "Imágen copiada", - "imageLinkCopied": "Enlace de imágen copiado", - "imageNotLoaded": "No se cargó la imágen", - "imageNotLoadedDesc": "No se pudo encontrar la imagen", - "imageSavedToGallery": "Imágen guardada en la galería", - "canvasMerged": "Lienzo consolidado", - "sentToImageToImage": "Enviar hacia Imagen a Imagen", - "sentToUnifiedCanvas": "Enviar hacia Lienzo Consolidado", - "parametersSet": "Parámetros establecidos", - "parametersNotSet": "Parámetros no establecidos", - "parametersNotSetDesc": "No se encontraron metadatos para esta imágen.", - "parametersFailed": "Error cargando parámetros", - "parametersFailedDesc": "No fue posible cargar la imagen inicial.", - "seedSet": "Semilla establecida", - "seedNotSet": "Semilla no establecida", - "seedNotSetDesc": "No se encontró una semilla para esta imágen.", - "promptSet": "Entrada establecida", - "promptNotSet": "Entrada no establecida", - "promptNotSetDesc": "No se encontró una entrada para esta imágen.", - "upscalingFailed": "Error al aumentar tamaño de imagn", - "faceRestoreFailed": "Restauración de rostro fallida", - "metadataLoadFailed": "Error al cargar metadatos", - "initialImageSet": "Imágen inicial establecida", - "initialImageNotSet": "Imagen inicial no establecida", - "initialImageNotSetDesc": "Error al establecer la imágen inicial", - "serverError": "Error en el servidor", - "disconnected": "Desconectado del servidor", - "canceled": "Procesando la cancelación", - "connected": "Conectado al servidor", - "problemCopyingImageLink": "No se puede copiar el enlace de la imagen", - "uploadFailedInvalidUploadDesc": "Debe ser una sola imagen PNG o JPEG", - "parameterSet": "Conjunto de parámetros", - "parameterNotSet": "Parámetro no configurado", - "nodesSaved": "Nodos guardados", - "nodesLoadedFailed": "Error al cargar los nodos", - "nodesLoaded": "Nodos cargados", - "nodesCleared": "Nodos borrados", - "problemCopyingImage": "No se puede copiar la imagen", - "nodesNotValidJSON": "JSON no válido", - "nodesCorruptedGraph": "No se puede cargar. El gráfico parece estar dañado.", - "nodesUnrecognizedTypes": "No se puede cargar. El gráfico tiene tipos no reconocidos", - "nodesNotValidGraph": "Gráfico del nodo InvokeAI no válido", - "nodesBrokenConnections": "No se puede cargar. Algunas conexiones están rotas." - }, - "tooltip": { - "feature": { - "prompt": "Este campo tomará todo el texto de entrada, incluidos tanto los términos de contenido como los estilísticos. Si bien se pueden incluir pesos en la solicitud, los comandos/parámetros estándar de línea de comandos no funcionarán.", - "gallery": "Conforme se generan nuevas invocaciones, los archivos del directorio de salida se mostrarán aquí. Las generaciones tienen opciones adicionales para configurar nuevas generaciones.", - "other": "Estas opciones habilitarán modos de procesamiento alternativos para Invoke. 'Seamless mosaico' creará patrones repetitivos en la salida. 'Alta resolución' es la generación en dos pasos con img2img: use esta configuración cuando desee una imagen más grande y más coherente sin artefactos. tomar más tiempo de lo habitual txt2img.", - "seed": "Los valores de semilla proporcionan un conjunto inicial de ruido que guían el proceso de eliminación de ruido y se pueden aleatorizar o rellenar con una semilla de una invocación anterior. La función Umbral se puede usar para mitigar resultados indeseables a valores CFG más altos (intente entre 0-10), y Perlin se puede usar para agregar ruido Perlin al proceso de eliminación de ruido. Ambos sirven para agregar variación a sus salidas.", - "variations": "Pruebe una variación con una cantidad entre 0 y 1 para cambiar la imagen de salida para la semilla establecida. Se encuentran variaciones interesantes en la semilla entre 0.1 y 0.3.", - "upscale": "Usando ESRGAN, puede aumentar la resolución de salida sin requerir un ancho/alto más alto en la generación inicial.", - "faceCorrection": "Usando GFPGAN o Codeformer, la corrección de rostros intentará identificar rostros en las salidas y corregir cualquier defecto/anormalidad. Los valores de fuerza más altos aplicarán una presión correctiva más fuerte en las salidas, lo que resultará en rostros más atractivos. Con Codeformer, una mayor fidelidad intentará preservar la imagen original, a expensas de la fuerza de corrección de rostros.", - "imageToImage": "Imagen a Imagen permite cargar una imagen inicial, que InvokeAI usará para guiar el proceso de generación, junto con una solicitud. Un valor más bajo para esta configuración se parecerá más a la imagen original. Se aceptan valores entre 0-1, y se recomienda un rango de .25-.75", - "boundingBox": "La caja delimitadora es análoga a las configuraciones de Ancho y Alto para Texto a Imagen o Imagen a Imagen. Solo se procesará el área en la caja.", - "seamCorrection": "Controla el manejo de parches visibles que pueden ocurrir cuando se pega una imagen generada de nuevo en el lienzo.", - "infillAndScaling": "Administra los métodos de relleno (utilizados en áreas enmascaradas o borradas del lienzo) y la escala (útil para tamaños de caja delimitadora pequeños)." - } - }, - "unifiedCanvas": { - "layer": "Capa", - "base": "Base", - "mask": "Máscara", - "maskingOptions": "Opciones de máscara", - "enableMask": "Habilitar Máscara", - "preserveMaskedArea": "Preservar área enmascarada", - "clearMask": "Limpiar máscara", - "brush": "Pincel", - "eraser": "Borrador", - "fillBoundingBox": "Rellenar Caja Contenedora", - "eraseBoundingBox": "Eliminar Caja Contenedora", - "colorPicker": "Selector de color", - "brushOptions": "Opciones de pincel", - "brushSize": "Tamaño", - "move": "Mover", - "resetView": "Restablecer vista", - "mergeVisible": "Consolidar vista", - "saveToGallery": "Guardar en galería", - "copyToClipboard": "Copiar al portapapeles", - "downloadAsImage": "Descargar como imagen", - "undo": "Deshacer", - "redo": "Rehacer", - "clearCanvas": "Limpiar lienzo", - "canvasSettings": "Ajustes de lienzo", - "showIntermediates": "Mostrar intermedios", - "showGrid": "Mostrar cuadrícula", - "snapToGrid": "Ajustar a cuadrícula", - "darkenOutsideSelection": "Oscurecer fuera de la selección", - "autoSaveToGallery": "Guardar automáticamente en galería", - "saveBoxRegionOnly": "Guardar solo región dentro de la caja", - "limitStrokesToBox": "Limitar trazos a la caja", - "showCanvasDebugInfo": "Mostrar la información adicional del lienzo", - "clearCanvasHistory": "Limpiar historial de lienzo", - "clearHistory": "Limpiar historial", - "clearCanvasHistoryMessage": "Limpiar el historial de lienzo también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", - "clearCanvasHistoryConfirm": "¿Está seguro de que desea limpiar el historial del lienzo?", - "emptyTempImageFolder": "Vaciar directorio de imágenes temporales", - "emptyFolder": "Vaciar directorio", - "emptyTempImagesFolderMessage": "Vaciar el directorio de imágenes temporales también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", - "emptyTempImagesFolderConfirm": "¿Está seguro de que desea vaciar el directorio temporal?", - "activeLayer": "Capa activa", - "canvasScale": "Escala de lienzo", - "boundingBox": "Caja contenedora", - "scaledBoundingBox": "Caja contenedora escalada", - "boundingBoxPosition": "Posición de caja contenedora", - "canvasDimensions": "Dimensiones de lienzo", - "canvasPosition": "Posición de lienzo", - "cursorPosition": "Posición del cursor", - "previous": "Anterior", - "next": "Siguiente", - "accept": "Aceptar", - "showHide": "Mostrar/Ocultar", - "discardAll": "Descartar todo", - "betaClear": "Limpiar", - "betaDarkenOutside": "Oscurecer fuera", - "betaLimitToBox": "Limitar a caja", - "betaPreserveMasked": "Preservar área enmascarada", - "antialiasing": "Suavizado" - }, - "accessibility": { - "invokeProgressBar": "Activar la barra de progreso", - "modelSelect": "Seleccionar modelo", - "reset": "Reiniciar", - "uploadImage": "Cargar imagen", - "previousImage": "Imagen anterior", - "nextImage": "Siguiente imagen", - "useThisParameter": "Utiliza este parámetro", - "copyMetadataJson": "Copiar los metadatos JSON", - "exitViewer": "Salir del visor", - "zoomIn": "Acercar", - "zoomOut": "Alejar", - "rotateCounterClockwise": "Girar en sentido antihorario", - "rotateClockwise": "Girar en sentido horario", - "flipHorizontally": "Voltear horizontalmente", - "flipVertically": "Voltear verticalmente", - "modifyConfig": "Modificar la configuración", - "toggleAutoscroll": "Activar el autodesplazamiento", - "toggleLogViewer": "Alternar el visor de registros", - "showOptionsPanel": "Mostrar el panel lateral", - "menu": "Menú" - }, - "ui": { - "hideProgressImages": "Ocultar el progreso de la imagen", - "showProgressImages": "Mostrar el progreso de la imagen", - "swapSizes": "Cambiar los tamaños", - "lockRatio": "Proporción del bloqueo" - }, - "nodes": { - "showGraphNodes": "Mostrar la superposición de los gráficos", - "zoomInNodes": "Acercar", - "hideMinimapnodes": "Ocultar el minimapa", - "fitViewportNodes": "Ajustar la vista", - "zoomOutNodes": "Alejar", - "hideGraphNodes": "Ocultar la superposición de los gráficos", - "hideLegendNodes": "Ocultar la leyenda del tipo de campo", - "showLegendNodes": "Mostrar la leyenda del tipo de campo", - "showMinimapnodes": "Mostrar el minimapa", - "reloadNodeTemplates": "Recargar las plantillas de nodos", - "loadWorkflow": "Cargar el flujo de trabajo", - "resetWorkflow": "Reiniciar e flujo de trabajo", - "resetWorkflowDesc": "¿Está seguro de que deseas restablecer este flujo de trabajo?", - "resetWorkflowDesc2": "Al reiniciar el flujo de trabajo se borrarán todos los nodos, aristas y detalles del flujo de trabajo.", - "downloadWorkflow": "Descargar el flujo de trabajo en un archivo JSON" - } -} diff --git a/invokeai/frontend/web/dist/locales/fi.json b/invokeai/frontend/web/dist/locales/fi.json deleted file mode 100644 index cf7fc6701b..0000000000 --- a/invokeai/frontend/web/dist/locales/fi.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "accessibility": { - "reset": "Resetoi", - "useThisParameter": "Käytä tätä parametria", - "modelSelect": "Mallin Valinta", - "exitViewer": "Poistu katselimesta", - "uploadImage": "Lataa kuva", - "copyMetadataJson": "Kopioi metadata JSON:iin", - "invokeProgressBar": "Invoken edistymispalkki", - "nextImage": "Seuraava kuva", - "previousImage": "Edellinen kuva", - "zoomIn": "Lähennä", - "flipHorizontally": "Käännä vaakasuoraan", - "zoomOut": "Loitonna", - "rotateCounterClockwise": "Kierrä vastapäivään", - "rotateClockwise": "Kierrä myötäpäivään", - "flipVertically": "Käännä pystysuoraan", - "modifyConfig": "Muokkaa konfiguraatiota", - "toggleAutoscroll": "Kytke automaattinen vieritys", - "toggleLogViewer": "Kytke lokin katselutila", - "showOptionsPanel": "Näytä asetukset" - }, - "common": { - "postProcessDesc2": "Erillinen käyttöliittymä tullaan julkaisemaan helpottaaksemme työnkulkua jälkikäsittelyssä.", - "training": "Kouluta", - "statusLoadingModel": "Ladataan mallia", - "statusModelChanged": "Malli vaihdettu", - "statusConvertingModel": "Muunnetaan mallia", - "statusModelConverted": "Malli muunnettu", - "langFrench": "Ranska", - "langItalian": "Italia", - "languagePickerLabel": "Kielen valinta", - "hotkeysLabel": "Pikanäppäimet", - "reportBugLabel": "Raportoi Bugista", - "langPolish": "Puola", - "langDutch": "Hollanti", - "settingsLabel": "Asetukset", - "githubLabel": "Github", - "langGerman": "Saksa", - "langPortuguese": "Portugali", - "discordLabel": "Discord", - "langEnglish": "Englanti", - "langRussian": "Venäjä", - "langUkranian": "Ukraina", - "langSpanish": "Espanja", - "upload": "Lataa", - "statusMergedModels": "Mallit yhdistelty", - "img2img": "Kuva kuvaksi", - "nodes": "Solmut", - "nodesDesc": "Solmupohjainen järjestelmä kuvien generoimiseen on parhaillaan kehitteillä. Pysy kuulolla päivityksistä tähän uskomattomaan ominaisuuteen liittyen.", - "postProcessDesc1": "Invoke AI tarjoaa monenlaisia jälkikäsittelyominaisuukisa. Kuvan laadun skaalaus sekä kasvojen korjaus ovat jo saatavilla WebUI:ssä. Voit ottaa ne käyttöön lisäasetusten valikosta teksti kuvaksi sekä kuva kuvaksi -välilehdiltä. Voit myös suoraan prosessoida kuvia käyttämällä kuvan toimintapainikkeita nykyisen kuvan yläpuolella tai tarkastelussa.", - "postprocessing": "Jälkikäsitellään", - "postProcessing": "Jälkikäsitellään", - "cancel": "Peruuta", - "close": "Sulje", - "accept": "Hyväksy", - "statusConnected": "Yhdistetty", - "statusError": "Virhe", - "statusProcessingComplete": "Prosessointi valmis", - "load": "Lataa", - "back": "Takaisin", - "statusGeneratingTextToImage": "Generoidaan tekstiä kuvaksi", - "trainingDesc2": "InvokeAI tukee jo mukautettujen upotusten kouluttamista tekstin inversiolla käyttäen pääskriptiä.", - "statusDisconnected": "Yhteys katkaistu", - "statusPreparing": "Valmistellaan", - "statusIterationComplete": "Iteraatio valmis", - "statusMergingModels": "Yhdistellään malleja", - "statusProcessingCanceled": "Valmistelu peruutettu", - "statusSavingImage": "Tallennetaan kuvaa", - "statusGeneratingImageToImage": "Generoidaan kuvaa kuvaksi", - "statusRestoringFacesGFPGAN": "Korjataan kasvoja (GFPGAN)", - "statusRestoringFacesCodeFormer": "Korjataan kasvoja (CodeFormer)", - "statusGeneratingInpainting": "Generoidaan sisällemaalausta", - "statusGeneratingOutpainting": "Generoidaan ulosmaalausta", - "statusRestoringFaces": "Korjataan kasvoja", - "loadingInvokeAI": "Ladataan Invoke AI:ta", - "loading": "Ladataan", - "statusGenerating": "Generoidaan", - "txt2img": "Teksti kuvaksi", - "trainingDesc1": "Erillinen työnkulku omien upotusten ja tarkastuspisteiden kouluttamiseksi käyttäen tekstin inversiota ja dreamboothia selaimen käyttöliittymässä.", - "postProcessDesc3": "Invoke AI:n komentorivi tarjoaa paljon muita ominaisuuksia, kuten esimerkiksi Embiggenin.", - "unifiedCanvas": "Yhdistetty kanvas", - "statusGenerationComplete": "Generointi valmis" - }, - "gallery": { - "uploads": "Lataukset", - "showUploads": "Näytä lataukset", - "galleryImageResetSize": "Resetoi koko", - "maintainAspectRatio": "Säilytä kuvasuhde", - "galleryImageSize": "Kuvan koko", - "showGenerations": "Näytä generaatiot", - "singleColumnLayout": "Yhden sarakkeen asettelu", - "generations": "Generoinnit", - "gallerySettings": "Gallerian asetukset", - "autoSwitchNewImages": "Vaihda uusiin kuviin automaattisesti", - "allImagesLoaded": "Kaikki kuvat ladattu", - "noImagesInGallery": "Ei kuvia galleriassa", - "loadMore": "Lataa lisää" - }, - "hotkeys": { - "keyboardShortcuts": "näppäimistön pikavalinnat", - "appHotkeys": "Sovelluksen pikanäppäimet", - "generalHotkeys": "Yleiset pikanäppäimet", - "galleryHotkeys": "Gallerian pikanäppäimet", - "unifiedCanvasHotkeys": "Yhdistetyn kanvaan pikanäppäimet", - "cancel": { - "desc": "Peruuta kuvan luominen", - "title": "Peruuta" - }, - "invoke": { - "desc": "Luo kuva" - } - } -} diff --git a/invokeai/frontend/web/dist/locales/fr.json b/invokeai/frontend/web/dist/locales/fr.json deleted file mode 100644 index b7ab932fcc..0000000000 --- a/invokeai/frontend/web/dist/locales/fr.json +++ /dev/null @@ -1,531 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Raccourcis clavier", - "languagePickerLabel": "Sélecteur de langue", - "reportBugLabel": "Signaler un bug", - "settingsLabel": "Paramètres", - "img2img": "Image en image", - "unifiedCanvas": "Canvas unifié", - "nodes": "Nœuds", - "langFrench": "Français", - "nodesDesc": "Un système basé sur les nœuds pour la génération d'images est actuellement en développement. Restez à l'écoute pour des mises à jour à ce sujet.", - "postProcessing": "Post-traitement", - "postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu 'Options avancées' des onglets 'Texte vers image' et 'Image vers image'. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image au-dessus de l'affichage d'image actuel ou dans le visualiseur.", - "postProcessDesc2": "Une interface dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.", - "postProcessDesc3": "L'interface en ligne de commande d'Invoke AI offre diverses autres fonctionnalités, notamment Embiggen.", - "training": "Formation", - "trainingDesc1": "Un workflow dédié pour former vos propres embeddings et checkpoints en utilisant Textual Inversion et Dreambooth depuis l'interface web.", - "trainingDesc2": "InvokeAI prend déjà en charge la formation d'embeddings personnalisés en utilisant Textual Inversion en utilisant le script principal.", - "upload": "Télécharger", - "close": "Fermer", - "load": "Charger", - "back": "Retour", - "statusConnected": "En ligne", - "statusDisconnected": "Hors ligne", - "statusError": "Erreur", - "statusPreparing": "Préparation", - "statusProcessingCanceled": "Traitement annulé", - "statusProcessingComplete": "Traitement terminé", - "statusGenerating": "Génération", - "statusGeneratingTextToImage": "Génération Texte vers Image", - "statusGeneratingImageToImage": "Génération Image vers Image", - "statusGeneratingInpainting": "Génération de réparation", - "statusGeneratingOutpainting": "Génération de complétion", - "statusGenerationComplete": "Génération terminée", - "statusIterationComplete": "Itération terminée", - "statusSavingImage": "Sauvegarde de l'image", - "statusRestoringFaces": "Restauration des visages", - "statusRestoringFacesGFPGAN": "Restauration des visages (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restauration des visages (CodeFormer)", - "statusUpscaling": "Mise à échelle", - "statusUpscalingESRGAN": "Mise à échelle (ESRGAN)", - "statusLoadingModel": "Chargement du modèle", - "statusModelChanged": "Modèle changé", - "discordLabel": "Discord", - "githubLabel": "Github", - "accept": "Accepter", - "statusMergingModels": "Mélange des modèles", - "loadingInvokeAI": "Chargement de Invoke AI", - "cancel": "Annuler", - "langEnglish": "Anglais", - "statusConvertingModel": "Conversion du modèle", - "statusModelConverted": "Modèle converti", - "loading": "Chargement", - "statusMergedModels": "Modèles mélangés", - "txt2img": "Texte vers image", - "postprocessing": "Post-Traitement" - }, - "gallery": { - "generations": "Générations", - "showGenerations": "Afficher les générations", - "uploads": "Téléchargements", - "showUploads": "Afficher les téléchargements", - "galleryImageSize": "Taille de l'image", - "galleryImageResetSize": "Réinitialiser la taille", - "gallerySettings": "Paramètres de la galerie", - "maintainAspectRatio": "Maintenir le rapport d'aspect", - "autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images", - "singleColumnLayout": "Mise en page en colonne unique", - "allImagesLoaded": "Toutes les images chargées", - "loadMore": "Charger plus", - "noImagesInGallery": "Aucune image dans la galerie" - }, - "hotkeys": { - "keyboardShortcuts": "Raccourcis clavier", - "appHotkeys": "Raccourcis de l'application", - "generalHotkeys": "Raccourcis généraux", - "galleryHotkeys": "Raccourcis de la galerie", - "unifiedCanvasHotkeys": "Raccourcis du canvas unifié", - "invoke": { - "title": "Invoquer", - "desc": "Générer une image" - }, - "cancel": { - "title": "Annuler", - "desc": "Annuler la génération d'image" - }, - "focusPrompt": { - "title": "Prompt de focus", - "desc": "Mettre en focus la zone de saisie de la commande" - }, - "toggleOptions": { - "title": "Affichage des options", - "desc": "Afficher et masquer le panneau d'options" - }, - "pinOptions": { - "title": "Epinglage des options", - "desc": "Epingler le panneau d'options" - }, - "toggleViewer": { - "title": "Affichage de la visionneuse", - "desc": "Afficher et masquer la visionneuse d'image" - }, - "toggleGallery": { - "title": "Affichage de la galerie", - "desc": "Afficher et masquer la galerie" - }, - "maximizeWorkSpace": { - "title": "Maximiser la zone de travail", - "desc": "Fermer les panneaux et maximiser la zone de travail" - }, - "changeTabs": { - "title": "Changer d'onglet", - "desc": "Passer à un autre espace de travail" - }, - "consoleToggle": { - "title": "Affichage de la console", - "desc": "Afficher et masquer la console" - }, - "setPrompt": { - "title": "Définir le prompt", - "desc": "Utiliser le prompt de l'image actuelle" - }, - "setSeed": { - "title": "Définir la graine", - "desc": "Utiliser la graine de l'image actuelle" - }, - "setParameters": { - "title": "Définir les paramètres", - "desc": "Utiliser tous les paramètres de l'image actuelle" - }, - "restoreFaces": { - "title": "Restaurer les visages", - "desc": "Restaurer l'image actuelle" - }, - "upscale": { - "title": "Agrandir", - "desc": "Agrandir l'image actuelle" - }, - "showInfo": { - "title": "Afficher les informations", - "desc": "Afficher les informations de métadonnées de l'image actuelle" - }, - "sendToImageToImage": { - "title": "Envoyer à l'image à l'image", - "desc": "Envoyer l'image actuelle à l'image à l'image" - }, - "deleteImage": { - "title": "Supprimer l'image", - "desc": "Supprimer l'image actuelle" - }, - "closePanels": { - "title": "Fermer les panneaux", - "desc": "Fermer les panneaux ouverts" - }, - "previousImage": { - "title": "Image précédente", - "desc": "Afficher l'image précédente dans la galerie" - }, - "nextImage": { - "title": "Image suivante", - "desc": "Afficher l'image suivante dans la galerie" - }, - "toggleGalleryPin": { - "title": "Activer/désactiver l'épinglage de la galerie", - "desc": "Épingle ou dépingle la galerie à l'interface" - }, - "increaseGalleryThumbSize": { - "title": "Augmenter la taille des miniatures de la galerie", - "desc": "Augmente la taille des miniatures de la galerie" - }, - "decreaseGalleryThumbSize": { - "title": "Diminuer la taille des miniatures de la galerie", - "desc": "Diminue la taille des miniatures de la galerie" - }, - "selectBrush": { - "title": "Sélectionner un pinceau", - "desc": "Sélectionne le pinceau de la toile" - }, - "selectEraser": { - "title": "Sélectionner un gomme", - "desc": "Sélectionne la gomme de la toile" - }, - "decreaseBrushSize": { - "title": "Diminuer la taille du pinceau", - "desc": "Diminue la taille du pinceau/gomme de la toile" - }, - "increaseBrushSize": { - "title": "Augmenter la taille du pinceau", - "desc": "Augmente la taille du pinceau/gomme de la toile" - }, - "decreaseBrushOpacity": { - "title": "Diminuer l'opacité du pinceau", - "desc": "Diminue l'opacité du pinceau de la toile" - }, - "increaseBrushOpacity": { - "title": "Augmenter l'opacité du pinceau", - "desc": "Augmente l'opacité du pinceau de la toile" - }, - "moveTool": { - "title": "Outil de déplacement", - "desc": "Permet la navigation sur la toile" - }, - "fillBoundingBox": { - "title": "Remplir la boîte englobante", - "desc": "Remplit la boîte englobante avec la couleur du pinceau" - }, - "eraseBoundingBox": { - "title": "Effacer la boîte englobante", - "desc": "Efface la zone de la boîte englobante" - }, - "colorPicker": { - "title": "Sélectionnez le sélecteur de couleur", - "desc": "Sélectionne le sélecteur de couleur de la toile" - }, - "toggleSnap": { - "title": "Basculer Snap", - "desc": "Basculer Snap à la grille" - }, - "quickToggleMove": { - "title": "Basculer rapidement déplacer", - "desc": "Basculer temporairement le mode Déplacer" - }, - "toggleLayer": { - "title": "Basculer la couche", - "desc": "Basculer la sélection de la couche masque/base" - }, - "clearMask": { - "title": "Effacer le masque", - "desc": "Effacer entièrement le masque" - }, - "hideMask": { - "title": "Masquer le masque", - "desc": "Masquer et démasquer le masque" - }, - "showHideBoundingBox": { - "title": "Afficher/Masquer la boîte englobante", - "desc": "Basculer la visibilité de la boîte englobante" - }, - "mergeVisible": { - "title": "Fusionner visible", - "desc": "Fusionner toutes les couches visibles de la toile" - }, - "saveToGallery": { - "title": "Enregistrer dans la galerie", - "desc": "Enregistrer la toile actuelle dans la galerie" - }, - "copyToClipboard": { - "title": "Copier dans le presse-papiers", - "desc": "Copier la toile actuelle dans le presse-papiers" - }, - "downloadImage": { - "title": "Télécharger l'image", - "desc": "Télécharger la toile actuelle" - }, - "undoStroke": { - "title": "Annuler le trait", - "desc": "Annuler un coup de pinceau" - }, - "redoStroke": { - "title": "Rétablir le trait", - "desc": "Rétablir un coup de pinceau" - }, - "resetView": { - "title": "Réinitialiser la vue", - "desc": "Réinitialiser la vue de la toile" - }, - "previousStagingImage": { - "title": "Image de mise en scène précédente", - "desc": "Image précédente de la zone de mise en scène" - }, - "nextStagingImage": { - "title": "Image de mise en scène suivante", - "desc": "Image suivante de la zone de mise en scène" - }, - "acceptStagingImage": { - "title": "Accepter l'image de mise en scène", - "desc": "Accepter l'image actuelle de la zone de mise en scène" - } - }, - "modelManager": { - "modelManager": "Gestionnaire de modèle", - "model": "Modèle", - "allModels": "Tous les modèles", - "checkpointModels": "Points de contrôle", - "diffusersModels": "Diffuseurs", - "safetensorModels": "SafeTensors", - "modelAdded": "Modèle ajouté", - "modelUpdated": "Modèle mis à jour", - "modelEntryDeleted": "Entrée de modèle supprimée", - "cannotUseSpaces": "Ne peut pas utiliser d'espaces", - "addNew": "Ajouter un nouveau", - "addNewModel": "Ajouter un nouveau modèle", - "addCheckpointModel": "Ajouter un modèle de point de contrôle / SafeTensor", - "addDiffuserModel": "Ajouter des diffuseurs", - "addManually": "Ajouter manuellement", - "manual": "Manuel", - "name": "Nom", - "nameValidationMsg": "Entrez un nom pour votre modèle", - "description": "Description", - "descriptionValidationMsg": "Ajoutez une description pour votre modèle", - "config": "Config", - "configValidationMsg": "Chemin vers le fichier de configuration de votre modèle.", - "modelLocation": "Emplacement du modèle", - "modelLocationValidationMsg": "Chemin vers où votre modèle est situé localement.", - "repo_id": "ID de dépôt", - "repoIDValidationMsg": "Dépôt en ligne de votre modèle", - "vaeLocation": "Emplacement VAE", - "vaeLocationValidationMsg": "Chemin vers où votre VAE est situé.", - "vaeRepoID": "ID de dépôt VAE", - "vaeRepoIDValidationMsg": "Dépôt en ligne de votre VAE", - "width": "Largeur", - "widthValidationMsg": "Largeur par défaut de votre modèle.", - "height": "Hauteur", - "heightValidationMsg": "Hauteur par défaut de votre modèle.", - "addModel": "Ajouter un modèle", - "updateModel": "Mettre à jour le modèle", - "availableModels": "Modèles disponibles", - "search": "Rechercher", - "load": "Charger", - "active": "actif", - "notLoaded": "non chargé", - "cached": "en cache", - "checkpointFolder": "Dossier de point de contrôle", - "clearCheckpointFolder": "Effacer le dossier de point de contrôle", - "findModels": "Trouver des modèles", - "scanAgain": "Scanner à nouveau", - "modelsFound": "Modèles trouvés", - "selectFolder": "Sélectionner un dossier", - "selected": "Sélectionné", - "selectAll": "Tout sélectionner", - "deselectAll": "Tout désélectionner", - "showExisting": "Afficher existant", - "addSelected": "Ajouter sélectionné", - "modelExists": "Modèle existant", - "selectAndAdd": "Sélectionner et ajouter les modèles listés ci-dessous", - "noModelsFound": "Aucun modèle trouvé", - "delete": "Supprimer", - "deleteModel": "Supprimer le modèle", - "deleteConfig": "Supprimer la configuration", - "deleteMsg1": "Voulez-vous vraiment supprimer cette entrée de modèle dans InvokeAI ?", - "deleteMsg2": "Cela n'effacera pas le fichier de point de contrôle du modèle de votre disque. Vous pouvez les réajouter si vous le souhaitez.", - "formMessageDiffusersModelLocation": "Emplacement du modèle de diffuseurs", - "formMessageDiffusersModelLocationDesc": "Veuillez en entrer au moins un.", - "formMessageDiffusersVAELocation": "Emplacement VAE", - "formMessageDiffusersVAELocationDesc": "Si non fourni, InvokeAI recherchera le fichier VAE à l'emplacement du modèle donné ci-dessus." - }, - "parameters": { - "images": "Images", - "steps": "Etapes", - "cfgScale": "CFG Echelle", - "width": "Largeur", - "height": "Hauteur", - "seed": "Graine", - "randomizeSeed": "Graine Aléatoire", - "shuffle": "Mélanger", - "noiseThreshold": "Seuil de Bruit", - "perlinNoise": "Bruit de Perlin", - "variations": "Variations", - "variationAmount": "Montant de Variation", - "seedWeights": "Poids des Graines", - "faceRestoration": "Restauration de Visage", - "restoreFaces": "Restaurer les Visages", - "type": "Type", - "strength": "Force", - "upscaling": "Agrandissement", - "upscale": "Agrandir", - "upscaleImage": "Image en Agrandissement", - "scale": "Echelle", - "otherOptions": "Autres Options", - "seamlessTiling": "Carreau Sans Joint", - "hiresOptim": "Optimisation Haute Résolution", - "imageFit": "Ajuster Image Initiale à la Taille de Sortie", - "codeformerFidelity": "Fidélité", - "scaleBeforeProcessing": "Echelle Avant Traitement", - "scaledWidth": "Larg. Échelle", - "scaledHeight": "Haut. Échelle", - "infillMethod": "Méthode de Remplissage", - "tileSize": "Taille des Tuiles", - "boundingBoxHeader": "Boîte Englobante", - "seamCorrectionHeader": "Correction des Joints", - "infillScalingHeader": "Remplissage et Mise à l'Échelle", - "img2imgStrength": "Force de l'Image à l'Image", - "toggleLoopback": "Activer/Désactiver la Boucle", - "sendTo": "Envoyer à", - "sendToImg2Img": "Envoyer à Image à Image", - "sendToUnifiedCanvas": "Envoyer au Canvas Unifié", - "copyImage": "Copier Image", - "copyImageToLink": "Copier l'Image en Lien", - "downloadImage": "Télécharger Image", - "openInViewer": "Ouvrir dans le visualiseur", - "closeViewer": "Fermer le visualiseur", - "usePrompt": "Utiliser la suggestion", - "useSeed": "Utiliser la graine", - "useAll": "Tout utiliser", - "useInitImg": "Utiliser l'image initiale", - "info": "Info", - "initialImage": "Image initiale", - "showOptionsPanel": "Afficher le panneau d'options" - }, - "settings": { - "models": "Modèles", - "displayInProgress": "Afficher les images en cours", - "saveSteps": "Enregistrer les images tous les n étapes", - "confirmOnDelete": "Confirmer la suppression", - "displayHelpIcons": "Afficher les icônes d'aide", - "enableImageDebugging": "Activer le débogage d'image", - "resetWebUI": "Réinitialiser l'interface Web", - "resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.", - "resetWebUIDesc2": "Si les images ne s'affichent pas dans la galerie ou si quelque chose d'autre ne fonctionne pas, veuillez essayer de réinitialiser avant de soumettre une demande sur GitHub.", - "resetComplete": "L'interface Web a été réinitialisée. Rafraîchissez la page pour recharger." - }, - "toast": { - "tempFoldersEmptied": "Dossiers temporaires vidés", - "uploadFailed": "Téléchargement échoué", - "uploadFailedUnableToLoadDesc": "Impossible de charger le fichier", - "downloadImageStarted": "Téléchargement de l'image démarré", - "imageCopied": "Image copiée", - "imageLinkCopied": "Lien d'image copié", - "imageNotLoaded": "Aucune image chargée", - "imageNotLoadedDesc": "Aucune image trouvée pour envoyer à module d'image", - "imageSavedToGallery": "Image enregistrée dans la galerie", - "canvasMerged": "Canvas fusionné", - "sentToImageToImage": "Envoyé à Image à Image", - "sentToUnifiedCanvas": "Envoyé à Canvas unifié", - "parametersSet": "Paramètres définis", - "parametersNotSet": "Paramètres non définis", - "parametersNotSetDesc": "Aucune métadonnée trouvée pour cette image.", - "parametersFailed": "Problème de chargement des paramètres", - "parametersFailedDesc": "Impossible de charger l'image d'initiation.", - "seedSet": "Graine définie", - "seedNotSet": "Graine non définie", - "seedNotSetDesc": "Impossible de trouver la graine pour cette image.", - "promptSet": "Invite définie", - "promptNotSet": "Invite non définie", - "promptNotSetDesc": "Impossible de trouver l'invite pour cette image.", - "upscalingFailed": "Échec de la mise à l'échelle", - "faceRestoreFailed": "Échec de la restauration du visage", - "metadataLoadFailed": "Échec du chargement des métadonnées", - "initialImageSet": "Image initiale définie", - "initialImageNotSet": "Image initiale non définie", - "initialImageNotSetDesc": "Impossible de charger l'image initiale" - }, - "tooltip": { - "feature": { - "prompt": "Ceci est le champ prompt. Le prompt inclut des objets de génération et des termes stylistiques. Vous pouvez également ajouter un poids (importance du jeton) dans le prompt, mais les commandes CLI et les paramètres ne fonctionneront pas.", - "gallery": "La galerie affiche les générations à partir du dossier de sortie à mesure qu'elles sont créées. Les paramètres sont stockés dans des fichiers et accessibles via le menu contextuel.", - "other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img : utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.", - "seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération : les deux servent à ajouter de la variété à vos sorties.", - "variations": "Essayez une variation avec une valeur comprise entre 0,1 et 1,0 pour changer le résultat pour une graine donnée. Des variations intéressantes de la graine sont entre 0,1 et 0,3.", - "upscale": "Utilisez ESRGAN pour agrandir l'image immédiatement après la génération.", - "faceCorrection": "Correction de visage avec GFPGAN ou Codeformer : l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.", - "imageToImage": "Image to Image charge n'importe quelle image en tant qu'initiale, qui est ensuite utilisée pour générer une nouvelle avec le prompt. Plus la valeur est élevée, plus l'image de résultat changera. Des valeurs de 0,0 à 1,0 sont possibles, la plage recommandée est de 0,25 à 0,75", - "boundingBox": "La boîte englobante est la même que les paramètres Largeur et Hauteur pour Texte à Image ou Image à Image. Seulement la zone dans la boîte sera traitée.", - "seamCorrection": "Contrôle la gestion des coutures visibles qui se produisent entre les images générées sur la toile.", - "infillAndScaling": "Gérer les méthodes de remplissage (utilisées sur les zones masquées ou effacées de la toile) et le redimensionnement (utile pour les petites tailles de boîte englobante)." - } - }, - "unifiedCanvas": { - "layer": "Couche", - "base": "Base", - "mask": "Masque", - "maskingOptions": "Options de masquage", - "enableMask": "Activer le masque", - "preserveMaskedArea": "Préserver la zone masquée", - "clearMask": "Effacer le masque", - "brush": "Pinceau", - "eraser": "Gomme", - "fillBoundingBox": "Remplir la boîte englobante", - "eraseBoundingBox": "Effacer la boîte englobante", - "colorPicker": "Sélecteur de couleur", - "brushOptions": "Options de pinceau", - "brushSize": "Taille", - "move": "Déplacer", - "resetView": "Réinitialiser la vue", - "mergeVisible": "Fusionner les visibles", - "saveToGallery": "Enregistrer dans la galerie", - "copyToClipboard": "Copier dans le presse-papiers", - "downloadAsImage": "Télécharger en tant qu'image", - "undo": "Annuler", - "redo": "Refaire", - "clearCanvas": "Effacer le canvas", - "canvasSettings": "Paramètres du canvas", - "showIntermediates": "Afficher les intermédiaires", - "showGrid": "Afficher la grille", - "snapToGrid": "Aligner sur la grille", - "darkenOutsideSelection": "Assombrir à l'extérieur de la sélection", - "autoSaveToGallery": "Enregistrement automatique dans la galerie", - "saveBoxRegionOnly": "Enregistrer uniquement la région de la boîte", - "limitStrokesToBox": "Limiter les traits à la boîte", - "showCanvasDebugInfo": "Afficher les informations de débogage du canvas", - "clearCanvasHistory": "Effacer l'historique du canvas", - "clearHistory": "Effacer l'historique", - "clearCanvasHistoryMessage": "Effacer l'historique du canvas laisse votre canvas actuel intact, mais efface de manière irréversible l'historique annuler et refaire.", - "clearCanvasHistoryConfirm": "Voulez-vous vraiment effacer l'historique du canvas ?", - "emptyTempImageFolder": "Vider le dossier d'images temporaires", - "emptyFolder": "Vider le dossier", - "emptyTempImagesFolderMessage": "Vider le dossier d'images temporaires réinitialise également complètement le canvas unifié. Cela inclut tout l'historique annuler/refaire, les images dans la zone de mise en attente et la couche de base du canvas.", - "emptyTempImagesFolderConfirm": "Voulez-vous vraiment vider le dossier temporaire ?", - "activeLayer": "Calque actif", - "canvasScale": "Échelle du canevas", - "boundingBox": "Boîte englobante", - "scaledBoundingBox": "Boîte englobante mise à l'échelle", - "boundingBoxPosition": "Position de la boîte englobante", - "canvasDimensions": "Dimensions du canevas", - "canvasPosition": "Position du canevas", - "cursorPosition": "Position du curseur", - "previous": "Précédent", - "next": "Suivant", - "accept": "Accepter", - "showHide": "Afficher/Masquer", - "discardAll": "Tout abandonner", - "betaClear": "Effacer", - "betaDarkenOutside": "Assombrir à l'extérieur", - "betaLimitToBox": "Limiter à la boîte", - "betaPreserveMasked": "Conserver masqué" - }, - "accessibility": { - "uploadImage": "Charger une image", - "reset": "Réinitialiser", - "nextImage": "Image suivante", - "previousImage": "Image précédente", - "useThisParameter": "Utiliser ce paramètre", - "zoomIn": "Zoom avant", - "zoomOut": "Zoom arrière", - "showOptionsPanel": "Montrer la page d'options", - "modelSelect": "Choix du modèle", - "invokeProgressBar": "Barre de Progression Invoke", - "copyMetadataJson": "Copie des métadonnées JSON", - "menu": "Menu" - } -} diff --git a/invokeai/frontend/web/dist/locales/he.json b/invokeai/frontend/web/dist/locales/he.json deleted file mode 100644 index dfb5ea0360..0000000000 --- a/invokeai/frontend/web/dist/locales/he.json +++ /dev/null @@ -1,575 +0,0 @@ -{ - "modelManager": { - "cannotUseSpaces": "לא ניתן להשתמש ברווחים", - "addNew": "הוסף חדש", - "vaeLocationValidationMsg": "נתיב למקום שבו ממוקם ה- VAE שלך.", - "height": "גובה", - "load": "טען", - "search": "חיפוש", - "heightValidationMsg": "גובה ברירת המחדל של המודל שלך.", - "addNewModel": "הוסף מודל חדש", - "allModels": "כל המודלים", - "checkpointModels": "נקודות ביקורת", - "diffusersModels": "מפזרים", - "safetensorModels": "טנסורים בטוחים", - "modelAdded": "מודל התווסף", - "modelUpdated": "מודל עודכן", - "modelEntryDeleted": "רשומת המודל נמחקה", - "addCheckpointModel": "הוסף נקודת ביקורת / מודל טנסור בטוח", - "addDiffuserModel": "הוסף מפזרים", - "addManually": "הוספה ידנית", - "manual": "ידני", - "name": "שם", - "description": "תיאור", - "descriptionValidationMsg": "הוסף תיאור למודל שלך", - "config": "תצורה", - "configValidationMsg": "נתיב לקובץ התצורה של המודל שלך.", - "modelLocation": "מיקום המודל", - "modelLocationValidationMsg": "נתיב למקום שבו המודל שלך ממוקם באופן מקומי.", - "repo_id": "מזהה מאגר", - "repoIDValidationMsg": "מאגר מקוון של המודל שלך", - "vaeLocation": "מיקום VAE", - "vaeRepoIDValidationMsg": "המאגר המקוון של VAE שלך", - "width": "רוחב", - "widthValidationMsg": "רוחב ברירת המחדל של המודל שלך.", - "addModel": "הוסף מודל", - "updateModel": "עדכן מודל", - "active": "פעיל", - "modelsFound": "מודלים נמצאו", - "cached": "נשמר במטמון", - "checkpointFolder": "תיקיית נקודות ביקורת", - "findModels": "מצא מודלים", - "scanAgain": "סרוק מחדש", - "selectFolder": "בחירת תיקייה", - "selected": "נבחר", - "selectAll": "בחר הכל", - "deselectAll": "ביטול בחירת הכל", - "showExisting": "הצג קיים", - "addSelected": "הוסף פריטים שנבחרו", - "modelExists": "המודל קיים", - "selectAndAdd": "בחר והוסך מודלים המפורטים להלן", - "deleteModel": "מחיקת מודל", - "deleteConfig": "מחיקת תצורה", - "formMessageDiffusersModelLocation": "מיקום מפזרי המודל", - "formMessageDiffusersModelLocationDesc": "נא להזין לפחות אחד.", - "convertToDiffusersHelpText5": "אנא ודא/י שיש לך מספיק מקום בדיסק. גדלי מודלים בדרך כלל הינם בין 4GB-7GB.", - "convertToDiffusersHelpText1": "מודל זה יומר לפורמט 🧨 המפזרים.", - "convertToDiffusersHelpText2": "תהליך זה יחליף את הרשומה של מנהל המודלים שלך בגרסת המפזרים של אותו המודל.", - "convertToDiffusersHelpText6": "האם ברצונך להמיר מודל זה?", - "convertToDiffusersSaveLocation": "שמירת מיקום", - "inpainting": "v1 צביעת תוך", - "statusConverting": "ממיר", - "modelConverted": "מודל הומר", - "sameFolder": "אותה תיקיה", - "custom": "התאמה אישית", - "merge": "מזג", - "modelsMerged": "מודלים מוזגו", - "mergeModels": "מזג מודלים", - "modelOne": "מודל 1", - "customSaveLocation": "מיקום שמירה מותאם אישית", - "alpha": "אלפא", - "mergedModelSaveLocation": "שמירת מיקום", - "mergedModelCustomSaveLocation": "נתיב מותאם אישית", - "ignoreMismatch": "התעלמות מאי-התאמות בין מודלים שנבחרו", - "modelMergeHeaderHelp1": "ניתן למזג עד שלושה מודלים שונים כדי ליצור שילוב שמתאים לצרכים שלכם.", - "modelMergeAlphaHelp": "אלפא שולט בחוזק מיזוג עבור המודלים. ערכי אלפא נמוכים יותר מובילים להשפעה נמוכה יותר של המודל השני.", - "nameValidationMsg": "הכנס שם למודל שלך", - "vaeRepoID": "מזהה מאגר ה VAE", - "modelManager": "מנהל המודלים", - "model": "מודל", - "availableModels": "מודלים זמינים", - "notLoaded": "לא נטען", - "clearCheckpointFolder": "נקה את תיקיית נקודות הביקורת", - "noModelsFound": "לא נמצאו מודלים", - "delete": "מחיקה", - "deleteMsg1": "האם אתה בטוח שברצונך למחוק רשומת מודל זו מ- InvokeAI?", - "deleteMsg2": "פעולה זו לא תמחק את קובץ נקודת הביקורת מהדיסק שלך. ניתן לקרוא אותם מחדש במידת הצורך.", - "formMessageDiffusersVAELocation": "מיקום VAE", - "formMessageDiffusersVAELocationDesc": "במידה ולא מסופק, InvokeAI תחפש את קובץ ה-VAE במיקום המודל המופיע לעיל.", - "convertToDiffusers": "המרה למפזרים", - "convert": "המרה", - "modelTwo": "מודל 2", - "modelThree": "מודל 3", - "mergedModelName": "שם מודל ממוזג", - "v1": "v1", - "invokeRoot": "תיקיית InvokeAI", - "customConfig": "תצורה מותאמת אישית", - "pathToCustomConfig": "נתיב לתצורה מותאמת אישית", - "interpolationType": "סוג אינטרפולציה", - "invokeAIFolder": "תיקיית InvokeAI", - "sigmoid": "סיגמואיד", - "weightedSum": "סכום משוקלל", - "modelMergeHeaderHelp2": "רק מפזרים זמינים למיזוג. אם ברצונך למזג מודל של נקודת ביקורת, המר אותו תחילה למפזרים.", - "inverseSigmoid": "הפוך סיגמואיד", - "convertToDiffusersHelpText3": "קובץ נקודת הביקורת שלך בדיסק לא יימחק או ישונה בכל מקרה. אתה יכול להוסיף את נקודת הביקורת שלך למנהל המודלים שוב אם תרצה בכך.", - "convertToDiffusersHelpText4": "זהו תהליך חד פעמי בלבד. התהליך עשוי לקחת בסביבות 30-60 שניות, תלוי במפרט המחשב שלך.", - "modelMergeInterpAddDifferenceHelp": "במצב זה, מודל 3 מופחת תחילה ממודל 2. הגרסה המתקבלת משולבת עם מודל 1 עם קצב האלפא שנקבע לעיל." - }, - "common": { - "nodesDesc": "מערכת מבוססת צמתים עבור יצירת תמונות עדיין תחת פיתוח. השארו קשובים לעדכונים עבור הפיצ׳ר המדהים הזה.", - "languagePickerLabel": "בחירת שפה", - "githubLabel": "גיטהאב", - "discordLabel": "דיסקורד", - "settingsLabel": "הגדרות", - "langEnglish": "אנגלית", - "langDutch": "הולנדית", - "langArabic": "ערבית", - "langFrench": "צרפתית", - "langGerman": "גרמנית", - "langJapanese": "יפנית", - "langBrPortuguese": "פורטוגזית", - "langRussian": "רוסית", - "langSimplifiedChinese": "סינית", - "langUkranian": "אוקראינית", - "langSpanish": "ספרדית", - "img2img": "תמונה לתמונה", - "unifiedCanvas": "קנבס מאוחד", - "nodes": "צמתים", - "postProcessing": "לאחר עיבוד", - "postProcessDesc2": "תצוגה ייעודית תשוחרר בקרוב על מנת לתמוך בתהליכים ועיבודים מורכבים.", - "postProcessDesc3": "ממשק שורת הפקודה של Invoke AI מציע תכונות שונות אחרות כולל Embiggen.", - "close": "סגירה", - "statusConnected": "מחובר", - "statusDisconnected": "מנותק", - "statusError": "שגיאה", - "statusPreparing": "בהכנה", - "statusProcessingCanceled": "עיבוד בוטל", - "statusProcessingComplete": "עיבוד הסתיים", - "statusGenerating": "מייצר", - "statusGeneratingTextToImage": "מייצר טקסט לתמונה", - "statusGeneratingImageToImage": "מייצר תמונה לתמונה", - "statusGeneratingInpainting": "מייצר ציור לתוך", - "statusGeneratingOutpainting": "מייצר ציור החוצה", - "statusIterationComplete": "איטרציה הסתיימה", - "statusRestoringFaces": "משחזר פרצופים", - "statusRestoringFacesCodeFormer": "משחזר פרצופים (CodeFormer)", - "statusUpscaling": "העלאת קנה מידה", - "statusUpscalingESRGAN": "העלאת קנה מידה (ESRGAN)", - "statusModelChanged": "מודל השתנה", - "statusConvertingModel": "ממיר מודל", - "statusModelConverted": "מודל הומר", - "statusMergingModels": "מיזוג מודלים", - "statusMergedModels": "מודלים מוזגו", - "hotkeysLabel": "מקשים חמים", - "reportBugLabel": "דווח באג", - "langItalian": "איטלקית", - "upload": "העלאה", - "langPolish": "פולנית", - "training": "אימון", - "load": "טעינה", - "back": "אחורה", - "statusSavingImage": "שומר תמונה", - "statusGenerationComplete": "ייצור הסתיים", - "statusRestoringFacesGFPGAN": "משחזר פרצופים (GFPGAN)", - "statusLoadingModel": "טוען מודל", - "trainingDesc2": "InvokeAI כבר תומך באימון הטמעות מותאמות אישית באמצעות היפוך טקסט באמצעות הסקריפט הראשי.", - "postProcessDesc1": "InvokeAI מציעה מגוון רחב של תכונות עיבוד שלאחר. העלאת קנה מידה של תמונה ושחזור פנים כבר זמינים בממשק המשתמש. ניתן לגשת אליהם מתפריט 'אפשרויות מתקדמות' בכרטיסיות 'טקסט לתמונה' ו'תמונה לתמונה'. ניתן גם לעבד תמונות ישירות, באמצעות לחצני הפעולה של התמונה מעל תצוגת התמונה הנוכחית או בתוך המציג.", - "trainingDesc1": "תהליך עבודה ייעודי לאימון ההטמעות ונקודות הביקורת שלך באמצעות היפוך טקסט ו-Dreambooth מממשק המשתמש." - }, - "hotkeys": { - "toggleGallery": { - "desc": "פתח וסגור את מגירת הגלריה", - "title": "הצג את הגלריה" - }, - "keyboardShortcuts": "קיצורי מקלדת", - "appHotkeys": "קיצורי אפליקציה", - "generalHotkeys": "קיצורי דרך כלליים", - "galleryHotkeys": "קיצורי דרך של הגלריה", - "unifiedCanvasHotkeys": "קיצורי דרך לקנבס המאוחד", - "invoke": { - "title": "הפעל", - "desc": "צור תמונה" - }, - "focusPrompt": { - "title": "התמקדות על הבקשה", - "desc": "התמקדות על איזור הקלדת הבקשה" - }, - "toggleOptions": { - "desc": "פתח וסגור את פאנל ההגדרות", - "title": "הצג הגדרות" - }, - "pinOptions": { - "title": "הצמד הגדרות", - "desc": "הצמד את פאנל ההגדרות" - }, - "toggleViewer": { - "title": "הצג את חלון ההצגה", - "desc": "פתח וסגור את מציג התמונות" - }, - "changeTabs": { - "title": "החלף לשוניות", - "desc": "החלף לאיזור עבודה אחר" - }, - "consoleToggle": { - "desc": "פתח וסגור את הקונסול", - "title": "הצג קונסול" - }, - "setPrompt": { - "title": "הגדרת בקשה", - "desc": "שימוש בבקשה של התמונה הנוכחית" - }, - "restoreFaces": { - "desc": "שחזור התמונה הנוכחית", - "title": "שחזור פרצופים" - }, - "upscale": { - "title": "הגדלת קנה מידה", - "desc": "הגדל את התמונה הנוכחית" - }, - "showInfo": { - "title": "הצג מידע", - "desc": "הצגת פרטי מטא-נתונים של התמונה הנוכחית" - }, - "sendToImageToImage": { - "title": "שלח לתמונה לתמונה", - "desc": "שלח תמונה נוכחית לתמונה לתמונה" - }, - "deleteImage": { - "title": "מחק תמונה", - "desc": "מחק את התמונה הנוכחית" - }, - "closePanels": { - "title": "סגור לוחות", - "desc": "סוגר לוחות פתוחים" - }, - "previousImage": { - "title": "תמונה קודמת", - "desc": "הצג את התמונה הקודמת בגלריה" - }, - "toggleGalleryPin": { - "title": "הצג את מצמיד הגלריה", - "desc": "הצמדה וביטול הצמדה של הגלריה לממשק המשתמש" - }, - "decreaseGalleryThumbSize": { - "title": "הקטנת גודל תמונת גלריה", - "desc": "מקטין את גודל התמונות הממוזערות של הגלריה" - }, - "selectBrush": { - "desc": "בוחר את מברשת הקנבס", - "title": "בחר מברשת" - }, - "selectEraser": { - "title": "בחר מחק", - "desc": "בוחר את מחק הקנבס" - }, - "decreaseBrushSize": { - "title": "הקטנת גודל המברשת", - "desc": "מקטין את גודל מברשת הקנבס/מחק" - }, - "increaseBrushSize": { - "desc": "מגדיל את גודל מברשת הקנבס/מחק", - "title": "הגדלת גודל המברשת" - }, - "decreaseBrushOpacity": { - "title": "הפחת את אטימות המברשת", - "desc": "מקטין את האטימות של מברשת הקנבס" - }, - "increaseBrushOpacity": { - "title": "הגדל את אטימות המברשת", - "desc": "מגביר את האטימות של מברשת הקנבס" - }, - "moveTool": { - "title": "כלי הזזה", - "desc": "מאפשר ניווט על קנבס" - }, - "fillBoundingBox": { - "desc": "ממלא את התיבה התוחמת בצבע מברשת", - "title": "מילוי תיבה תוחמת" - }, - "eraseBoundingBox": { - "desc": "מוחק את אזור התיבה התוחמת", - "title": "מחק תיבה תוחמת" - }, - "colorPicker": { - "title": "בחר בבורר צבעים", - "desc": "בוחר את בורר צבעי הקנבס" - }, - "toggleSnap": { - "title": "הפעל הצמדה", - "desc": "מפעיל הצמדה לרשת" - }, - "quickToggleMove": { - "title": "הפעלה מהירה להזזה", - "desc": "מפעיל זמנית את מצב ההזזה" - }, - "toggleLayer": { - "title": "הפעל שכבה", - "desc": "הפעל בחירת שכבת בסיס/מסיכה" - }, - "clearMask": { - "title": "נקה מסיכה", - "desc": "נקה את כל המסכה" - }, - "hideMask": { - "desc": "הסתרה והצגה של מסיכה", - "title": "הסתר מסיכה" - }, - "showHideBoundingBox": { - "title": "הצגה/הסתרה של תיבה תוחמת", - "desc": "הפעל תצוגה של התיבה התוחמת" - }, - "mergeVisible": { - "title": "מיזוג תוכן גלוי", - "desc": "מיזוג כל השכבות הגלויות של הקנבס" - }, - "saveToGallery": { - "title": "שמור לגלריה", - "desc": "שמור את הקנבס הנוכחי בגלריה" - }, - "copyToClipboard": { - "title": "העתק ללוח ההדבקה", - "desc": "העתק את הקנבס הנוכחי ללוח ההדבקה" - }, - "downloadImage": { - "title": "הורד תמונה", - "desc": "הורד את הקנבס הנוכחי" - }, - "undoStroke": { - "title": "בטל משיכה", - "desc": "בטל משיכת מברשת" - }, - "redoStroke": { - "title": "בצע שוב משיכה", - "desc": "ביצוע מחדש של משיכת מברשת" - }, - "resetView": { - "title": "איפוס תצוגה", - "desc": "אפס תצוגת קנבס" - }, - "previousStagingImage": { - "desc": "תמונת אזור ההערכות הקודמת", - "title": "תמונת הערכות קודמת" - }, - "nextStagingImage": { - "title": "תמנות הערכות הבאה", - "desc": "תמונת אזור ההערכות הבאה" - }, - "acceptStagingImage": { - "desc": "אשר את תמונת איזור ההערכות הנוכחית", - "title": "אשר תמונת הערכות" - }, - "cancel": { - "desc": "ביטול יצירת תמונה", - "title": "ביטול" - }, - "maximizeWorkSpace": { - "title": "מקסם את איזור העבודה", - "desc": "סגור פאנלים ומקסם את איזור העבודה" - }, - "setSeed": { - "title": "הגדר זרע", - "desc": "השתמש בזרע התמונה הנוכחית" - }, - "setParameters": { - "title": "הגדרת פרמטרים", - "desc": "שימוש בכל הפרמטרים של התמונה הנוכחית" - }, - "increaseGalleryThumbSize": { - "title": "הגדל את גודל תמונת הגלריה", - "desc": "מגדיל את התמונות הממוזערות של הגלריה" - }, - "nextImage": { - "title": "תמונה הבאה", - "desc": "הצג את התמונה הבאה בגלריה" - } - }, - "gallery": { - "uploads": "העלאות", - "galleryImageSize": "גודל תמונה", - "gallerySettings": "הגדרות גלריה", - "maintainAspectRatio": "שמור על יחס רוחב-גובה", - "autoSwitchNewImages": "החלף אוטומטית לתמונות חדשות", - "singleColumnLayout": "תצוגת עמודה אחת", - "allImagesLoaded": "כל התמונות נטענו", - "loadMore": "טען עוד", - "noImagesInGallery": "אין תמונות בגלריה", - "galleryImageResetSize": "איפוס גודל", - "generations": "דורות", - "showGenerations": "הצג דורות", - "showUploads": "הצג העלאות" - }, - "parameters": { - "images": "תמונות", - "steps": "צעדים", - "cfgScale": "סולם CFG", - "width": "רוחב", - "height": "גובה", - "seed": "זרע", - "imageToImage": "תמונה לתמונה", - "randomizeSeed": "זרע אקראי", - "variationAmount": "כמות וריאציה", - "seedWeights": "משקלי זרע", - "faceRestoration": "שחזור פנים", - "restoreFaces": "שחזר פנים", - "type": "סוג", - "strength": "חוזק", - "upscale": "הגדלת קנה מידה", - "upscaleImage": "הגדלת קנה מידת התמונה", - "denoisingStrength": "חוזק מנטרל הרעש", - "otherOptions": "אפשרויות אחרות", - "hiresOptim": "אופטימיזצית רזולוציה גבוהה", - "hiresStrength": "חוזק רזולוציה גבוהה", - "codeformerFidelity": "דבקות", - "scaleBeforeProcessing": "שנה קנה מידה לפני עיבוד", - "scaledWidth": "קנה מידה לאחר שינוי W", - "scaledHeight": "קנה מידה לאחר שינוי H", - "infillMethod": "שיטת מילוי", - "tileSize": "גודל אריח", - "boundingBoxHeader": "תיבה תוחמת", - "seamCorrectionHeader": "תיקון תפר", - "infillScalingHeader": "מילוי וקנה מידה", - "toggleLoopback": "הפעל לולאה חוזרת", - "symmetry": "סימטריה", - "vSymmetryStep": "צעד סימטריה V", - "hSymmetryStep": "צעד סימטריה H", - "cancel": { - "schedule": "ביטול לאחר האיטרציה הנוכחית", - "isScheduled": "מבטל", - "immediate": "ביטול מיידי", - "setType": "הגדר סוג ביטול" - }, - "sendTo": "שליחה אל", - "copyImage": "העתקת תמונה", - "downloadImage": "הורדת תמונה", - "sendToImg2Img": "שליחה לתמונה לתמונה", - "sendToUnifiedCanvas": "שליחה אל קנבס מאוחד", - "openInViewer": "פתח במציג", - "closeViewer": "סגור מציג", - "usePrompt": "שימוש בבקשה", - "useSeed": "שימוש בזרע", - "useAll": "שימוש בהכל", - "useInitImg": "שימוש בתמונה ראשונית", - "info": "פרטים", - "showOptionsPanel": "הצג חלונית אפשרויות", - "shuffle": "ערבוב", - "noiseThreshold": "סף רעש", - "perlinNoise": "רעש פרלין", - "variations": "וריאציות", - "imageFit": "התאמת תמונה ראשונית לגודל הפלט", - "general": "כללי", - "upscaling": "מגדיל את קנה מידה", - "scale": "סולם", - "seamlessTiling": "ריצוף חלק", - "img2imgStrength": "חוזק תמונה לתמונה", - "initialImage": "תמונה ראשונית", - "copyImageToLink": "העתקת תמונה לקישור" - }, - "settings": { - "models": "מודלים", - "displayInProgress": "הצגת תמונות בתהליך", - "confirmOnDelete": "אישור בעת המחיקה", - "useSlidersForAll": "שימוש במחוונים לכל האפשרויות", - "resetWebUI": "איפוס ממשק משתמש", - "resetWebUIDesc1": "איפוס ממשק המשתמש האינטרנטי מאפס רק את המטמון המקומי של הדפדפן של התמונות וההגדרות שנשמרו. זה לא מוחק תמונות מהדיסק.", - "resetComplete": "ממשק המשתמש אופס. יש לבצע רענון דף בכדי לטעון אותו מחדש.", - "enableImageDebugging": "הפעלת איתור באגים בתמונה", - "displayHelpIcons": "הצג סמלי עזרה", - "saveSteps": "שמירת תמונות כל n צעדים", - "resetWebUIDesc2": "אם תמונות לא מופיעות בגלריה או שמשהו אחר לא עובד, נא לנסות איפוס /או אתחול לפני שליחת תקלה ב-GitHub." - }, - "toast": { - "uploadFailed": "העלאה נכשלה", - "imageCopied": "התמונה הועתקה", - "imageLinkCopied": "קישור תמונה הועתק", - "imageNotLoadedDesc": "לא נמצאה תמונה לשליחה למודול תמונה לתמונה", - "imageSavedToGallery": "התמונה נשמרה בגלריה", - "canvasMerged": "קנבס מוזג", - "sentToImageToImage": "נשלח לתמונה לתמונה", - "sentToUnifiedCanvas": "נשלח אל קנבס מאוחד", - "parametersSet": "הגדרת פרמטרים", - "parametersNotSet": "פרמטרים לא הוגדרו", - "parametersNotSetDesc": "לא נמצאו מטא-נתונים עבור תמונה זו.", - "parametersFailedDesc": "לא ניתן לטעון תמונת התחלה.", - "seedSet": "זרע הוגדר", - "seedNotSetDesc": "לא ניתן היה למצוא זרע לתמונה זו.", - "promptNotSetDesc": "לא היתה אפשרות למצוא בקשה עבור תמונה זו.", - "metadataLoadFailed": "טעינת מטא-נתונים נכשלה", - "initialImageSet": "סט תמונה ראשוני", - "initialImageNotSet": "התמונה הראשונית לא הוגדרה", - "initialImageNotSetDesc": "לא ניתן היה לטעון את התמונה הראשונית", - "uploadFailedUnableToLoadDesc": "לא ניתן לטעון את הקובץ", - "tempFoldersEmptied": "התיקייה הזמנית רוקנה", - "downloadImageStarted": "הורדת התמונה החלה", - "imageNotLoaded": "לא נטענה תמונה", - "parametersFailed": "בעיה בטעינת פרמטרים", - "promptNotSet": "בקשה לא הוגדרה", - "upscalingFailed": "העלאת קנה המידה נכשלה", - "faceRestoreFailed": "שחזור הפנים נכשל", - "seedNotSet": "זרע לא הוגדר", - "promptSet": "בקשה הוגדרה" - }, - "tooltip": { - "feature": { - "gallery": "הגלריה מציגה יצירות מתיקיית הפלטים בעת יצירתם. ההגדרות מאוחסנות בתוך קבצים ונגישות באמצעות תפריט הקשר.", - "upscale": "השתמש ב-ESRGAN כדי להגדיל את התמונה מיד לאחר היצירה.", - "imageToImage": "תמונה לתמונה טוענת כל תמונה כראשונית, המשמשת לאחר מכן ליצירת תמונה חדשה יחד עם הבקשה. ככל שהערך גבוה יותר, כך תמונת התוצאה תשתנה יותר. ערכים מ- 0.0 עד 1.0 אפשריים, הטווח המומלץ הוא .25-.75", - "seamCorrection": "שליטה בטיפול בתפרים גלויים המתרחשים בין תמונות שנוצרו על בד הציור.", - "prompt": "זהו שדה הבקשה. הבקשה כוללת אובייקטי יצירה ומונחים סגנוניים. באפשרותך להוסיף משקל (חשיבות אסימון) גם בשורת הפקודה, אך פקודות ופרמטרים של CLI לא יפעלו.", - "variations": "נסה וריאציה עם ערך בין 0.1 ל- 1.0 כדי לשנות את התוצאה עבור זרע נתון. וריאציות מעניינות של הזרע הן בין 0.1 ל -0.3.", - "other": "אפשרויות אלה יאפשרו מצבי עיבוד חלופיים עבור ההרצה. 'ריצוף חלק' ייצור תבניות חוזרות בפלט. 'רזולוציה גבוהה' נוצר בשני שלבים עם img2img: השתמש בהגדרה זו כאשר אתה רוצה תמונה גדולה וקוהרנטית יותר ללא חפצים. פעולה זאת תקח יותר זמן מפעולת טקסט לתמונה רגילה.", - "faceCorrection": "תיקון פנים עם GFPGAN או Codeformer: האלגוריתם מזהה פרצופים בתמונה ומתקן כל פגם. ערך גבוה ישנה את התמונה יותר, וכתוצאה מכך הפרצופים יהיו אטרקטיביים יותר. Codeformer עם נאמנות גבוהה יותר משמר את התמונה המקורית על חשבון תיקון פנים חזק יותר.", - "seed": "ערך הזרע משפיע על הרעש הראשוני שממנו נוצרת התמונה. אתה יכול להשתמש בזרעים שכבר קיימים מתמונות קודמות. 'סף רעש' משמש להפחתת חפצים בערכי CFG גבוהים (נסה את טווח 0-10), ופרלין כדי להוסיף רעשי פרלין במהלך היצירה: שניהם משמשים להוספת וריאציה לתפוקות שלך.", - "infillAndScaling": "נהל שיטות מילוי (המשמשות באזורים עם מסיכה או אזורים שנמחקו בבד הציור) ושינוי קנה מידה (שימושי לגדלים קטנים של תיבות תוחמות).", - "boundingBox": "התיבה התוחמת זהה להגדרות 'רוחב' ו'גובה' עבור 'טקסט לתמונה' או 'תמונה לתמונה'. רק האזור בתיבה יעובד." - } - }, - "unifiedCanvas": { - "layer": "שכבה", - "base": "בסיס", - "maskingOptions": "אפשרויות מסכות", - "enableMask": "הפעלת מסיכה", - "colorPicker": "בוחר הצבעים", - "preserveMaskedArea": "שימור איזור ממוסך", - "clearMask": "ניקוי מסיכה", - "brush": "מברשת", - "eraser": "מחק", - "fillBoundingBox": "מילוי תיבה תוחמת", - "eraseBoundingBox": "מחק תיבה תוחמת", - "copyToClipboard": "העתק ללוח ההדבקה", - "downloadAsImage": "הורדה כתמונה", - "undo": "ביטול", - "redo": "ביצוע מחדש", - "clearCanvas": "ניקוי קנבס", - "showGrid": "הצגת רשת", - "snapToGrid": "הצמדה לרשת", - "darkenOutsideSelection": "הכהיית בחירה חיצונית", - "saveBoxRegionOnly": "שמירת איזור תיבה בלבד", - "limitStrokesToBox": "הגבלת משיכות לקופסא", - "showCanvasDebugInfo": "הצגת מידע איתור באגים בקנבס", - "clearCanvasHistory": "ניקוי הסטוריית קנבס", - "clearHistory": "ניקוי היסטוריה", - "clearCanvasHistoryConfirm": "האם את/ה בטוח/ה שברצונך לנקות את היסטוריית הקנבס?", - "emptyFolder": "ריקון תיקייה", - "emptyTempImagesFolderConfirm": "האם את/ה בטוח/ה שברצונך לרוקן את התיקיה הזמנית?", - "activeLayer": "שכבה פעילה", - "canvasScale": "קנה מידה של קנבס", - "betaLimitToBox": "הגבל לקופסא", - "betaDarkenOutside": "הכההת הבחוץ", - "canvasDimensions": "מידות קנבס", - "previous": "הקודם", - "next": "הבא", - "accept": "אישור", - "showHide": "הצג/הסתר", - "discardAll": "בטל הכל", - "betaClear": "איפוס", - "boundingBox": "תיבה תוחמת", - "scaledBoundingBox": "תיבה תוחמת לאחר שינוי קנה מידה", - "betaPreserveMasked": "שמר מסיכה", - "brushOptions": "אפשרויות מברשת", - "brushSize": "גודל", - "mergeVisible": "מיזוג תוכן גלוי", - "move": "הזזה", - "resetView": "איפוס תצוגה", - "saveToGallery": "שמור לגלריה", - "canvasSettings": "הגדרות קנבס", - "showIntermediates": "הצגת מתווכים", - "autoSaveToGallery": "שמירה אוטומטית בגלריה", - "emptyTempImageFolder": "ריקון תיקיית תמונות זמניות", - "clearCanvasHistoryMessage": "ניקוי היסטוריית הקנבס משאיר את הקנבס הנוכחי ללא שינוי, אך מנקה באופן בלתי הפיך את היסטוריית הביטול והביצוע מחדש.", - "emptyTempImagesFolderMessage": "ריקון תיקיית התמונה הזמנית גם מאפס באופן מלא את הקנבס המאוחד. זה כולל את כל היסטוריית הביטול/ביצוע מחדש, תמונות באזור ההערכות ושכבת הבסיס של בד הציור.", - "boundingBoxPosition": "מיקום תיבה תוחמת", - "canvasPosition": "מיקום קנבס", - "cursorPosition": "מיקום הסמן", - "mask": "מסכה" - } -} diff --git a/invokeai/frontend/web/dist/locales/it.json b/invokeai/frontend/web/dist/locales/it.json deleted file mode 100644 index 53b0339ae4..0000000000 --- a/invokeai/frontend/web/dist/locales/it.json +++ /dev/null @@ -1,1504 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Tasti di scelta rapida", - "languagePickerLabel": "Lingua", - "reportBugLabel": "Segnala un errore", - "settingsLabel": "Impostazioni", - "img2img": "Immagine a Immagine", - "unifiedCanvas": "Tela unificata", - "nodes": "Editor del flusso di lavoro", - "langItalian": "Italiano", - "nodesDesc": "Attualmente è in fase di sviluppo un sistema basato su nodi per la generazione di immagini. Resta sintonizzato per gli aggiornamenti su questa fantastica funzionalità.", - "postProcessing": "Post-elaborazione", - "postProcessDesc1": "Invoke AI offre un'ampia varietà di funzionalità di post-elaborazione. Ampliamento Immagine e Restaura Volti sono già disponibili nell'interfaccia Web. È possibile accedervi dal menu 'Opzioni avanzate' delle schede 'Testo a Immagine' e 'Immagine a Immagine'. È inoltre possibile elaborare le immagini direttamente, utilizzando i pulsanti di azione dell'immagine sopra la visualizzazione dell'immagine corrente o nel visualizzatore.", - "postProcessDesc2": "Presto verrà rilasciata un'interfaccia utente dedicata per facilitare flussi di lavoro di post-elaborazione più avanzati.", - "postProcessDesc3": "L'interfaccia da riga di comando di 'Invoke AI' offre varie altre funzionalità tra cui Embiggen.", - "training": "Addestramento", - "trainingDesc1": "Un flusso di lavoro dedicato per addestrare i tuoi Incorporamenti e Checkpoint utilizzando Inversione Testuale e Dreambooth dall'interfaccia web.", - "trainingDesc2": "InvokeAI supporta già l'addestramento di incorporamenti personalizzati utilizzando l'inversione testuale tramite lo script principale.", - "upload": "Caricamento", - "close": "Chiudi", - "load": "Carica", - "back": "Indietro", - "statusConnected": "Collegato", - "statusDisconnected": "Disconnesso", - "statusError": "Errore", - "statusPreparing": "Preparazione", - "statusProcessingCanceled": "Elaborazione annullata", - "statusProcessingComplete": "Elaborazione completata", - "statusGenerating": "Generazione in corso", - "statusGeneratingTextToImage": "Generazione Testo a Immagine", - "statusGeneratingImageToImage": "Generazione da Immagine a Immagine", - "statusGeneratingInpainting": "Generazione Inpainting", - "statusGeneratingOutpainting": "Generazione Outpainting", - "statusGenerationComplete": "Generazione completata", - "statusIterationComplete": "Iterazione completata", - "statusSavingImage": "Salvataggio dell'immagine", - "statusRestoringFaces": "Restaura volti", - "statusRestoringFacesGFPGAN": "Restaura volti (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restaura volti (CodeFormer)", - "statusUpscaling": "Ampliamento", - "statusUpscalingESRGAN": "Ampliamento (ESRGAN)", - "statusLoadingModel": "Caricamento del modello", - "statusModelChanged": "Modello cambiato", - "githubLabel": "GitHub", - "discordLabel": "Discord", - "langArabic": "Arabo", - "langEnglish": "Inglese", - "langFrench": "Francese", - "langGerman": "Tedesco", - "langJapanese": "Giapponese", - "langPolish": "Polacco", - "langBrPortuguese": "Portoghese Basiliano", - "langRussian": "Russo", - "langUkranian": "Ucraino", - "langSpanish": "Spagnolo", - "statusMergingModels": "Fusione Modelli", - "statusMergedModels": "Modelli fusi", - "langSimplifiedChinese": "Cinese semplificato", - "langDutch": "Olandese", - "statusModelConverted": "Modello Convertito", - "statusConvertingModel": "Conversione Modello", - "langKorean": "Coreano", - "langPortuguese": "Portoghese", - "loading": "Caricamento in corso", - "langHebrew": "Ebraico", - "loadingInvokeAI": "Caricamento Invoke AI", - "postprocessing": "Post Elaborazione", - "txt2img": "Testo a Immagine", - "accept": "Accetta", - "cancel": "Annulla", - "linear": "Lineare", - "generate": "Genera", - "random": "Casuale", - "openInNewTab": "Apri in una nuova scheda", - "areYouSure": "Sei sicuro?", - "dontAskMeAgain": "Non chiedermelo più", - "imagePrompt": "Prompt Immagine", - "darkMode": "Modalità scura", - "lightMode": "Modalità chiara", - "batch": "Gestione Lotto", - "modelManager": "Gestore modello", - "communityLabel": "Comunità", - "nodeEditor": "Editor dei nodi", - "statusProcessing": "Elaborazione in corso", - "advanced": "Avanzate", - "imageFailedToLoad": "Impossibile caricare l'immagine", - "learnMore": "Per saperne di più", - "ipAdapter": "Adattatore IP", - "t2iAdapter": "Adattatore T2I", - "controlAdapter": "Adattatore di Controllo", - "controlNet": "ControlNet", - "auto": "Automatico" - }, - "gallery": { - "generations": "Generazioni", - "showGenerations": "Mostra Generazioni", - "uploads": "Caricamenti", - "showUploads": "Mostra caricamenti", - "galleryImageSize": "Dimensione dell'immagine", - "galleryImageResetSize": "Ripristina dimensioni", - "gallerySettings": "Impostazioni della galleria", - "maintainAspectRatio": "Mantenere le proporzioni", - "autoSwitchNewImages": "Passaggio automatico a nuove immagini", - "singleColumnLayout": "Layout a colonna singola", - "allImagesLoaded": "Tutte le immagini caricate", - "loadMore": "Carica altro", - "noImagesInGallery": "Nessuna immagine da visualizzare", - "deleteImage": "Elimina l'immagine", - "deleteImagePermanent": "Le immagini eliminate non possono essere ripristinate.", - "deleteImageBin": "Le immagini eliminate verranno spostate nel Cestino del tuo sistema operativo.", - "images": "Immagini", - "assets": "Risorse", - "autoAssignBoardOnClick": "Assegna automaticamente la bacheca al clic", - "featuresWillReset": "Se elimini questa immagine, quelle funzionalità verranno immediatamente ripristinate.", - "loading": "Caricamento in corso", - "unableToLoad": "Impossibile caricare la Galleria", - "currentlyInUse": "Questa immagine è attualmente utilizzata nelle seguenti funzionalità:", - "copy": "Copia", - "download": "Scarica", - "setCurrentImage": "Imposta come immagine corrente", - "preparingDownload": "Preparazione del download", - "preparingDownloadFailed": "Problema durante la preparazione del download", - "downloadSelection": "Scarica gli elementi selezionati" - }, - "hotkeys": { - "keyboardShortcuts": "Tasti rapidi", - "appHotkeys": "Tasti di scelta rapida dell'applicazione", - "generalHotkeys": "Tasti di scelta rapida generali", - "galleryHotkeys": "Tasti di scelta rapida della galleria", - "unifiedCanvasHotkeys": "Tasti di scelta rapida Tela Unificata", - "invoke": { - "title": "Invoke", - "desc": "Genera un'immagine" - }, - "cancel": { - "title": "Annulla", - "desc": "Annulla la generazione dell'immagine" - }, - "focusPrompt": { - "title": "Metti a fuoco il Prompt", - "desc": "Mette a fuoco l'area di immissione del prompt" - }, - "toggleOptions": { - "title": "Attiva/disattiva le opzioni", - "desc": "Apre e chiude il pannello delle opzioni" - }, - "pinOptions": { - "title": "Appunta le opzioni", - "desc": "Blocca il pannello delle opzioni" - }, - "toggleViewer": { - "title": "Attiva/disattiva visualizzatore", - "desc": "Apre e chiude il visualizzatore immagini" - }, - "toggleGallery": { - "title": "Attiva/disattiva Galleria", - "desc": "Apre e chiude il pannello della galleria" - }, - "maximizeWorkSpace": { - "title": "Massimizza lo spazio di lavoro", - "desc": "Chiude i pannelli e massimizza l'area di lavoro" - }, - "changeTabs": { - "title": "Cambia scheda", - "desc": "Passa a un'altra area di lavoro" - }, - "consoleToggle": { - "title": "Attiva/disattiva console", - "desc": "Apre e chiude la console" - }, - "setPrompt": { - "title": "Imposta Prompt", - "desc": "Usa il prompt dell'immagine corrente" - }, - "setSeed": { - "title": "Imposta seme", - "desc": "Usa il seme dell'immagine corrente" - }, - "setParameters": { - "title": "Imposta parametri", - "desc": "Utilizza tutti i parametri dell'immagine corrente" - }, - "restoreFaces": { - "title": "Restaura volti", - "desc": "Restaura l'immagine corrente" - }, - "upscale": { - "title": "Amplia", - "desc": "Amplia l'immagine corrente" - }, - "showInfo": { - "title": "Mostra informazioni", - "desc": "Mostra le informazioni sui metadati dell'immagine corrente" - }, - "sendToImageToImage": { - "title": "Invia a Immagine a Immagine", - "desc": "Invia l'immagine corrente a da Immagine a Immagine" - }, - "deleteImage": { - "title": "Elimina immagine", - "desc": "Elimina l'immagine corrente" - }, - "closePanels": { - "title": "Chiudi pannelli", - "desc": "Chiude i pannelli aperti" - }, - "previousImage": { - "title": "Immagine precedente", - "desc": "Visualizza l'immagine precedente nella galleria" - }, - "nextImage": { - "title": "Immagine successiva", - "desc": "Visualizza l'immagine successiva nella galleria" - }, - "toggleGalleryPin": { - "title": "Attiva/disattiva il blocco della galleria", - "desc": "Blocca/sblocca la galleria dall'interfaccia utente" - }, - "increaseGalleryThumbSize": { - "title": "Aumenta dimensione immagini nella galleria", - "desc": "Aumenta la dimensione delle miniature della galleria" - }, - "decreaseGalleryThumbSize": { - "title": "Riduci dimensione immagini nella galleria", - "desc": "Riduce le dimensioni delle miniature della galleria" - }, - "selectBrush": { - "title": "Seleziona Pennello", - "desc": "Seleziona il pennello della tela" - }, - "selectEraser": { - "title": "Seleziona Cancellino", - "desc": "Seleziona il cancellino della tela" - }, - "decreaseBrushSize": { - "title": "Riduci la dimensione del pennello", - "desc": "Riduce la dimensione del pennello/cancellino della tela" - }, - "increaseBrushSize": { - "title": "Aumenta la dimensione del pennello", - "desc": "Aumenta la dimensione del pennello/cancellino della tela" - }, - "decreaseBrushOpacity": { - "title": "Riduci l'opacità del pennello", - "desc": "Diminuisce l'opacità del pennello della tela" - }, - "increaseBrushOpacity": { - "title": "Aumenta l'opacità del pennello", - "desc": "Aumenta l'opacità del pennello della tela" - }, - "moveTool": { - "title": "Strumento Sposta", - "desc": "Consente la navigazione nella tela" - }, - "fillBoundingBox": { - "title": "Riempi riquadro di selezione", - "desc": "Riempie il riquadro di selezione con il colore del pennello" - }, - "eraseBoundingBox": { - "title": "Cancella riquadro di selezione", - "desc": "Cancella l'area del riquadro di selezione" - }, - "colorPicker": { - "title": "Seleziona Selettore colore", - "desc": "Seleziona il selettore colore della tela" - }, - "toggleSnap": { - "title": "Attiva/disattiva Aggancia", - "desc": "Attiva/disattiva Aggancia alla griglia" - }, - "quickToggleMove": { - "title": "Attiva/disattiva Sposta rapido", - "desc": "Attiva/disattiva temporaneamente la modalità Sposta" - }, - "toggleLayer": { - "title": "Attiva/disattiva livello", - "desc": "Attiva/disattiva la selezione del livello base/maschera" - }, - "clearMask": { - "title": "Cancella maschera", - "desc": "Cancella l'intera maschera" - }, - "hideMask": { - "title": "Nascondi maschera", - "desc": "Nasconde e mostra la maschera" - }, - "showHideBoundingBox": { - "title": "Mostra/Nascondi riquadro di selezione", - "desc": "Attiva/disattiva la visibilità del riquadro di selezione" - }, - "mergeVisible": { - "title": "Fondi il visibile", - "desc": "Fonde tutti gli strati visibili della tela" - }, - "saveToGallery": { - "title": "Salva nella galleria", - "desc": "Salva la tela corrente nella galleria" - }, - "copyToClipboard": { - "title": "Copia negli appunti", - "desc": "Copia la tela corrente negli appunti" - }, - "downloadImage": { - "title": "Scarica l'immagine", - "desc": "Scarica la tela corrente" - }, - "undoStroke": { - "title": "Annulla tratto", - "desc": "Annulla una pennellata" - }, - "redoStroke": { - "title": "Ripeti tratto", - "desc": "Ripeti una pennellata" - }, - "resetView": { - "title": "Reimposta vista", - "desc": "Ripristina la visualizzazione della tela" - }, - "previousStagingImage": { - "title": "Immagine della sessione precedente", - "desc": "Immagine dell'area della sessione precedente" - }, - "nextStagingImage": { - "title": "Immagine della sessione successivo", - "desc": "Immagine dell'area della sessione successiva" - }, - "acceptStagingImage": { - "title": "Accetta l'immagine della sessione", - "desc": "Accetta l'immagine dell'area della sessione corrente" - }, - "nodesHotkeys": "Tasti di scelta rapida dei Nodi", - "addNodes": { - "title": "Aggiungi Nodi", - "desc": "Apre il menu Aggiungi Nodi" - } - }, - "modelManager": { - "modelManager": "Gestione Modelli", - "model": "Modello", - "allModels": "Tutti i Modelli", - "checkpointModels": "Checkpoint", - "diffusersModels": "Diffusori", - "safetensorModels": "SafeTensor", - "modelAdded": "Modello Aggiunto", - "modelUpdated": "Modello Aggiornato", - "modelEntryDeleted": "Voce del modello eliminata", - "cannotUseSpaces": "Impossibile utilizzare gli spazi", - "addNew": "Aggiungi nuovo", - "addNewModel": "Aggiungi nuovo Modello", - "addCheckpointModel": "Aggiungi modello Checkpoint / Safetensor", - "addDiffuserModel": "Aggiungi Diffusori", - "addManually": "Aggiungi manualmente", - "manual": "Manuale", - "name": "Nome", - "nameValidationMsg": "Inserisci un nome per il modello", - "description": "Descrizione", - "descriptionValidationMsg": "Aggiungi una descrizione per il modello", - "config": "Configurazione", - "configValidationMsg": "Percorso del file di configurazione del modello.", - "modelLocation": "Posizione del modello", - "modelLocationValidationMsg": "Fornisci il percorso di una cartella locale in cui è archiviato il tuo modello di diffusori", - "repo_id": "Repo ID", - "repoIDValidationMsg": "Repository online del modello", - "vaeLocation": "Posizione file VAE", - "vaeLocationValidationMsg": "Percorso dove si trova il file VAE.", - "vaeRepoID": "VAE Repo ID", - "vaeRepoIDValidationMsg": "Repository online del file VAE", - "width": "Larghezza", - "widthValidationMsg": "Larghezza predefinita del modello.", - "height": "Altezza", - "heightValidationMsg": "Altezza predefinita del modello.", - "addModel": "Aggiungi modello", - "updateModel": "Aggiorna modello", - "availableModels": "Modelli disponibili", - "search": "Ricerca", - "load": "Carica", - "active": "attivo", - "notLoaded": "non caricato", - "cached": "memorizzato nella cache", - "checkpointFolder": "Cartella Checkpoint", - "clearCheckpointFolder": "Svuota cartella checkpoint", - "findModels": "Trova modelli", - "scanAgain": "Scansiona nuovamente", - "modelsFound": "Modelli trovati", - "selectFolder": "Seleziona cartella", - "selected": "Selezionato", - "selectAll": "Seleziona tutto", - "deselectAll": "Deseleziona tutto", - "showExisting": "Mostra esistenti", - "addSelected": "Aggiungi selezionato", - "modelExists": "Il modello esiste", - "selectAndAdd": "Seleziona e aggiungi i modelli elencati", - "noModelsFound": "Nessun modello trovato", - "delete": "Elimina", - "deleteModel": "Elimina modello", - "deleteConfig": "Elimina configurazione", - "deleteMsg1": "Sei sicuro di voler eliminare questo modello da InvokeAI?", - "deleteMsg2": "Questo eliminerà il modello dal disco se si trova nella cartella principale di InvokeAI. Se utilizzi una cartella personalizzata, il modello NON verrà eliminato dal disco.", - "formMessageDiffusersModelLocation": "Ubicazione modelli diffusori", - "formMessageDiffusersModelLocationDesc": "Inseriscine almeno uno.", - "formMessageDiffusersVAELocation": "Ubicazione file VAE", - "formMessageDiffusersVAELocationDesc": "Se non fornito, InvokeAI cercherà il file VAE all'interno dell'ubicazione del modello sopra indicata.", - "convert": "Converti", - "convertToDiffusers": "Converti in Diffusori", - "convertToDiffusersHelpText2": "Questo processo sostituirà la voce in Gestione Modelli con la versione Diffusori dello stesso modello.", - "convertToDiffusersHelpText4": "Questo è un processo una tantum. Potrebbero essere necessari circa 30-60 secondi a seconda delle specifiche del tuo computer.", - "convertToDiffusersHelpText5": "Assicurati di avere spazio su disco sufficiente. I modelli generalmente variano tra 2 GB e 7 GB di dimensioni.", - "convertToDiffusersHelpText6": "Vuoi convertire questo modello?", - "convertToDiffusersSaveLocation": "Ubicazione salvataggio", - "inpainting": "v1 Inpainting", - "customConfig": "Configurazione personalizzata", - "statusConverting": "Conversione in corso", - "modelConverted": "Modello convertito", - "sameFolder": "Stessa cartella", - "invokeRoot": "Cartella InvokeAI", - "merge": "Unisci", - "modelsMerged": "Modelli uniti", - "mergeModels": "Unisci Modelli", - "modelOne": "Modello 1", - "modelTwo": "Modello 2", - "mergedModelName": "Nome del modello unito", - "alpha": "Alpha", - "interpolationType": "Tipo di interpolazione", - "mergedModelCustomSaveLocation": "Percorso personalizzato", - "invokeAIFolder": "Cartella Invoke AI", - "ignoreMismatch": "Ignora le discrepanze tra i modelli selezionati", - "modelMergeHeaderHelp2": "Solo i diffusori sono disponibili per l'unione. Se desideri unire un modello Checkpoint, convertilo prima in Diffusori.", - "modelMergeInterpAddDifferenceHelp": "In questa modalità, il Modello 3 viene prima sottratto dal Modello 2. La versione risultante viene unita al Modello 1 con il tasso Alpha impostato sopra.", - "mergedModelSaveLocation": "Ubicazione salvataggio", - "convertToDiffusersHelpText1": "Questo modello verrà convertito nel formato 🧨 Diffusore.", - "custom": "Personalizzata", - "convertToDiffusersHelpText3": "Il file checkpoint su disco SARÀ eliminato se si trova nella cartella principale di InvokeAI. Se si trova in una posizione personalizzata, NON verrà eliminato.", - "v1": "v1", - "pathToCustomConfig": "Percorso alla configurazione personalizzata", - "modelThree": "Modello 3", - "modelMergeHeaderHelp1": "Puoi unire fino a tre diversi modelli per creare una miscela adatta alle tue esigenze.", - "modelMergeAlphaHelp": "Il valore Alpha controlla la forza di miscelazione dei modelli. Valori Alpha più bassi attenuano l'influenza del secondo modello.", - "customSaveLocation": "Ubicazione salvataggio personalizzata", - "weightedSum": "Somma pesata", - "sigmoid": "Sigmoide", - "inverseSigmoid": "Sigmoide inverso", - "v2_base": "v2 (512px)", - "v2_768": "v2 (768px)", - "none": "nessuno", - "addDifference": "Aggiungi differenza", - "pickModelType": "Scegli il tipo di modello", - "scanForModels": "Cerca modelli", - "variant": "Variante", - "baseModel": "Modello Base", - "vae": "VAE", - "modelUpdateFailed": "Aggiornamento del modello non riuscito", - "modelConversionFailed": "Conversione del modello non riuscita", - "modelsMergeFailed": "Unione modelli non riuscita", - "selectModel": "Seleziona Modello", - "modelDeleted": "Modello eliminato", - "modelDeleteFailed": "Impossibile eliminare il modello", - "noCustomLocationProvided": "Nessuna posizione personalizzata fornita", - "convertingModelBegin": "Conversione del modello. Attendere prego.", - "importModels": "Importa modelli", - "modelsSynced": "Modelli sincronizzati", - "modelSyncFailed": "Sincronizzazione modello non riuscita", - "settings": "Impostazioni", - "syncModels": "Sincronizza Modelli", - "syncModelsDesc": "Se i tuoi modelli non sono sincronizzati con il back-end, puoi aggiornarli utilizzando questa opzione. Questo è generalmente utile nei casi in cui aggiorni manualmente il tuo file models.yaml o aggiungi modelli alla cartella principale di InvokeAI dopo l'avvio dell'applicazione.", - "loraModels": "LoRA", - "oliveModels": "Olive", - "onnxModels": "ONNX", - "noModels": "Nessun modello trovato", - "predictionType": "Tipo di previsione (per modelli Stable Diffusion 2.x ed alcuni modelli Stable Diffusion 1.x)", - "quickAdd": "Aggiunta rapida", - "simpleModelDesc": "Fornire un percorso a un modello diffusori locale, un modello checkpoint/safetensor locale, un ID repository HuggingFace o un URL del modello checkpoint/diffusori.", - "advanced": "Avanzate", - "useCustomConfig": "Utilizza configurazione personalizzata", - "closeAdvanced": "Chiudi Avanzate", - "modelType": "Tipo di modello", - "customConfigFileLocation": "Posizione del file di configurazione personalizzato", - "vaePrecision": "Precisione VAE" - }, - "parameters": { - "images": "Immagini", - "steps": "Passi", - "cfgScale": "Scala CFG", - "width": "Larghezza", - "height": "Altezza", - "seed": "Seme", - "randomizeSeed": "Seme randomizzato", - "shuffle": "Mescola il seme", - "noiseThreshold": "Soglia del rumore", - "perlinNoise": "Rumore Perlin", - "variations": "Variazioni", - "variationAmount": "Quantità di variazione", - "seedWeights": "Pesi dei semi", - "faceRestoration": "Restauro volti", - "restoreFaces": "Restaura volti", - "type": "Tipo", - "strength": "Forza", - "upscaling": "Ampliamento", - "upscale": "Amplia (Shift + U)", - "upscaleImage": "Amplia Immagine", - "scale": "Scala", - "otherOptions": "Altre opzioni", - "seamlessTiling": "Piastrella senza cuciture", - "hiresOptim": "Ottimizzazione alta risoluzione", - "imageFit": "Adatta l'immagine iniziale alle dimensioni di output", - "codeformerFidelity": "Fedeltà", - "scaleBeforeProcessing": "Scala prima dell'elaborazione", - "scaledWidth": "Larghezza ridimensionata", - "scaledHeight": "Altezza ridimensionata", - "infillMethod": "Metodo di riempimento", - "tileSize": "Dimensione piastrella", - "boundingBoxHeader": "Rettangolo di selezione", - "seamCorrectionHeader": "Correzione della cucitura", - "infillScalingHeader": "Riempimento e ridimensionamento", - "img2imgStrength": "Forza da Immagine a Immagine", - "toggleLoopback": "Attiva/disattiva elaborazione ricorsiva", - "sendTo": "Invia a", - "sendToImg2Img": "Invia a Immagine a Immagine", - "sendToUnifiedCanvas": "Invia a Tela Unificata", - "copyImageToLink": "Copia l'immagine nel collegamento", - "downloadImage": "Scarica l'immagine", - "openInViewer": "Apri nel visualizzatore", - "closeViewer": "Chiudi visualizzatore", - "usePrompt": "Usa Prompt", - "useSeed": "Usa Seme", - "useAll": "Usa Tutto", - "useInitImg": "Usa l'immagine iniziale", - "info": "Informazioni", - "initialImage": "Immagine iniziale", - "showOptionsPanel": "Mostra il pannello laterale (O o T)", - "general": "Generale", - "denoisingStrength": "Forza di riduzione del rumore", - "copyImage": "Copia immagine", - "hiresStrength": "Forza Alta Risoluzione", - "imageToImage": "Immagine a Immagine", - "cancel": { - "schedule": "Annulla dopo l'iterazione corrente", - "isScheduled": "Annullamento", - "setType": "Imposta il tipo di annullamento", - "immediate": "Annulla immediatamente", - "cancel": "Annulla" - }, - "hSymmetryStep": "Passi Simmetria Orizzontale", - "vSymmetryStep": "Passi Simmetria Verticale", - "symmetry": "Simmetria", - "hidePreview": "Nascondi l'anteprima", - "showPreview": "Mostra l'anteprima", - "noiseSettings": "Rumore", - "seamlessXAxis": "Asse X", - "seamlessYAxis": "Asse Y", - "scheduler": "Campionatore", - "boundingBoxWidth": "Larghezza riquadro di delimitazione", - "boundingBoxHeight": "Altezza riquadro di delimitazione", - "positivePromptPlaceholder": "Prompt Positivo", - "negativePromptPlaceholder": "Prompt Negativo", - "controlNetControlMode": "Modalità di controllo", - "clipSkip": "CLIP Skip", - "aspectRatio": "Proporzioni", - "maskAdjustmentsHeader": "Regolazioni della maschera", - "maskBlur": "Sfocatura", - "maskBlurMethod": "Metodo di sfocatura", - "seamLowThreshold": "Basso", - "seamHighThreshold": "Alto", - "coherencePassHeader": "Passaggio di coerenza", - "coherenceSteps": "Passi", - "coherenceStrength": "Forza", - "compositingSettingsHeader": "Impostazioni di composizione", - "patchmatchDownScaleSize": "Ridimensiona", - "coherenceMode": "Modalità", - "invoke": { - "noNodesInGraph": "Nessun nodo nel grafico", - "noModelSelected": "Nessun modello selezionato", - "noPrompts": "Nessun prompt generato", - "noInitialImageSelected": "Nessuna immagine iniziale selezionata", - "readyToInvoke": "Pronto per invocare", - "addingImagesTo": "Aggiungi immagini a", - "systemBusy": "Sistema occupato", - "unableToInvoke": "Impossibile invocare", - "systemDisconnected": "Sistema disconnesso", - "noControlImageForControlAdapter": "L'adattatore di controllo #{{number}} non ha un'immagine di controllo", - "noModelForControlAdapter": "Nessun modello selezionato per l'adattatore di controllo #{{number}}.", - "incompatibleBaseModelForControlAdapter": "Il modello dell'adattatore di controllo #{{number}} non è compatibile con il modello principale.", - "missingNodeTemplate": "Modello di nodo mancante", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} ingresso mancante", - "missingFieldTemplate": "Modello di campo mancante" - }, - "enableNoiseSettings": "Abilita le impostazioni del rumore", - "cpuNoise": "Rumore CPU", - "gpuNoise": "Rumore GPU", - "useCpuNoise": "Usa la CPU per generare rumore", - "manualSeed": "Seme manuale", - "randomSeed": "Seme casuale", - "iterations": "Iterazioni", - "iterationsWithCount_one": "{{count}} Iterazione", - "iterationsWithCount_many": "{{count}} Iterazioni", - "iterationsWithCount_other": "{{count}} Iterazioni", - "seamlessX&Y": "Senza cuciture X & Y", - "isAllowedToUpscale": { - "useX2Model": "L'immagine è troppo grande per l'ampliamento con il modello x4, utilizza il modello x2", - "tooLarge": "L'immagine è troppo grande per l'ampliamento, seleziona un'immagine più piccola" - }, - "seamlessX": "Senza cuciture X", - "seamlessY": "Senza cuciture Y", - "imageActions": "Azioni Immagine", - "aspectRatioFree": "Libere" - }, - "settings": { - "models": "Modelli", - "displayInProgress": "Visualizza le immagini di avanzamento", - "saveSteps": "Salva le immagini ogni n passaggi", - "confirmOnDelete": "Conferma l'eliminazione", - "displayHelpIcons": "Visualizza le icone della Guida", - "enableImageDebugging": "Abilita il debug dell'immagine", - "resetWebUI": "Reimposta l'interfaccia utente Web", - "resetWebUIDesc1": "Il ripristino dell'interfaccia utente Web reimposta solo la cache locale del browser delle immagini e le impostazioni memorizzate. Non cancella alcuna immagine dal disco.", - "resetWebUIDesc2": "Se le immagini non vengono visualizzate nella galleria o qualcos'altro non funziona, prova a reimpostare prima di segnalare un problema su GitHub.", - "resetComplete": "L'interfaccia utente Web è stata reimpostata.", - "useSlidersForAll": "Usa i cursori per tutte le opzioni", - "general": "Generale", - "consoleLogLevel": "Livello del registro", - "shouldLogToConsole": "Registrazione della console", - "developer": "Sviluppatore", - "antialiasProgressImages": "Anti aliasing delle immagini di avanzamento", - "showProgressInViewer": "Mostra le immagini di avanzamento nel visualizzatore", - "generation": "Generazione", - "ui": "Interfaccia Utente", - "favoriteSchedulersPlaceholder": "Nessun campionatore preferito", - "favoriteSchedulers": "Campionatori preferiti", - "showAdvancedOptions": "Mostra Opzioni Avanzate", - "alternateCanvasLayout": "Layout alternativo della tela", - "beta": "Beta", - "enableNodesEditor": "Abilita l'editor dei nodi", - "experimental": "Sperimentale", - "autoChangeDimensions": "Aggiorna L/A alle impostazioni predefinite del modello in caso di modifica", - "clearIntermediates": "Cancella le immagini intermedie", - "clearIntermediatesDesc3": "Le immagini della galleria non verranno eliminate.", - "clearIntermediatesDesc2": "Le immagini intermedie sono sottoprodotti della generazione, diversi dalle immagini risultanti nella galleria. La cancellazione degli intermedi libererà spazio su disco.", - "intermediatesCleared_one": "Cancellata {{count}} immagine intermedia", - "intermediatesCleared_many": "Cancellate {{count}} immagini intermedie", - "intermediatesCleared_other": "Cancellate {{count}} immagini intermedie", - "clearIntermediatesDesc1": "La cancellazione delle immagini intermedie ripristinerà lo stato di Tela Unificata e ControlNet.", - "intermediatesClearedFailed": "Problema con la cancellazione delle immagini intermedie", - "clearIntermediatesWithCount_one": "Cancella {{count}} immagine intermedia", - "clearIntermediatesWithCount_many": "Cancella {{count}} immagini intermedie", - "clearIntermediatesWithCount_other": "Cancella {{count}} immagini intermedie", - "clearIntermediatesDisabled": "La coda deve essere vuota per cancellare le immagini intermedie" - }, - "toast": { - "tempFoldersEmptied": "Cartella temporanea svuotata", - "uploadFailed": "Caricamento fallito", - "uploadFailedUnableToLoadDesc": "Impossibile caricare il file", - "downloadImageStarted": "Download dell'immagine avviato", - "imageCopied": "Immagine copiata", - "imageLinkCopied": "Collegamento immagine copiato", - "imageNotLoaded": "Nessuna immagine caricata", - "imageNotLoadedDesc": "Impossibile trovare l'immagine", - "imageSavedToGallery": "Immagine salvata nella Galleria", - "canvasMerged": "Tela unita", - "sentToImageToImage": "Inviato a Immagine a Immagine", - "sentToUnifiedCanvas": "Inviato a Tela Unificata", - "parametersSet": "Parametri impostati", - "parametersNotSet": "Parametri non impostati", - "parametersNotSetDesc": "Nessun metadato trovato per questa immagine.", - "parametersFailed": "Problema durante il caricamento dei parametri", - "parametersFailedDesc": "Impossibile caricare l'immagine iniziale.", - "seedSet": "Seme impostato", - "seedNotSet": "Seme non impostato", - "seedNotSetDesc": "Impossibile trovare il seme per questa immagine.", - "promptSet": "Prompt impostato", - "promptNotSet": "Prompt non impostato", - "promptNotSetDesc": "Impossibile trovare il prompt per questa immagine.", - "upscalingFailed": "Ampliamento non riuscito", - "faceRestoreFailed": "Restauro facciale non riuscito", - "metadataLoadFailed": "Impossibile caricare i metadati", - "initialImageSet": "Immagine iniziale impostata", - "initialImageNotSet": "Immagine iniziale non impostata", - "initialImageNotSetDesc": "Impossibile caricare l'immagine iniziale", - "serverError": "Errore del Server", - "disconnected": "Disconnesso dal Server", - "connected": "Connesso al Server", - "canceled": "Elaborazione annullata", - "problemCopyingImageLink": "Impossibile copiare il collegamento dell'immagine", - "uploadFailedInvalidUploadDesc": "Deve essere una singola immagine PNG o JPEG", - "parameterSet": "Parametro impostato", - "parameterNotSet": "Parametro non impostato", - "nodesLoadedFailed": "Impossibile caricare i nodi", - "nodesSaved": "Nodi salvati", - "nodesLoaded": "Nodi caricati", - "nodesCleared": "Nodi cancellati", - "problemCopyingImage": "Impossibile copiare l'immagine", - "nodesNotValidGraph": "Grafico del nodo InvokeAI non valido", - "nodesCorruptedGraph": "Impossibile caricare. Il grafico sembra essere danneggiato.", - "nodesUnrecognizedTypes": "Impossibile caricare. Il grafico ha tipi di dati non riconosciuti", - "nodesNotValidJSON": "JSON non valido", - "nodesBrokenConnections": "Impossibile caricare. Alcune connessioni sono interrotte.", - "baseModelChangedCleared_one": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modello incompatibile", - "baseModelChangedCleared_many": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", - "baseModelChangedCleared_other": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", - "imageSavingFailed": "Salvataggio dell'immagine non riuscito", - "canvasSentControlnetAssets": "Tela inviata a ControlNet & Risorse", - "problemCopyingCanvasDesc": "Impossibile copiare la tela", - "loadedWithWarnings": "Flusso di lavoro caricato con avvisi", - "canvasCopiedClipboard": "Tela copiata negli appunti", - "maskSavedAssets": "Maschera salvata nelle risorse", - "modelAddFailed": "Aggiunta del modello non riuscita", - "problemDownloadingCanvas": "Problema durante il download della tela", - "problemMergingCanvas": "Problema nell'unione delle tele", - "imageUploaded": "Immagine caricata", - "addedToBoard": "Aggiunto alla bacheca", - "modelAddedSimple": "Modello aggiunto", - "problemImportingMaskDesc": "Impossibile importare la maschera", - "problemCopyingCanvas": "Problema durante la copia della tela", - "problemSavingCanvas": "Problema nel salvataggio della tela", - "canvasDownloaded": "Tela scaricata", - "problemMergingCanvasDesc": "Impossibile unire le tele", - "problemDownloadingCanvasDesc": "Impossibile scaricare la tela", - "imageSaved": "Immagine salvata", - "maskSentControlnetAssets": "Maschera inviata a ControlNet & Risorse", - "canvasSavedGallery": "Tela salvata nella Galleria", - "imageUploadFailed": "Caricamento immagine non riuscito", - "modelAdded": "Modello aggiunto: {{modelName}}", - "problemImportingMask": "Problema durante l'importazione della maschera", - "setInitialImage": "Imposta come immagine iniziale", - "setControlImage": "Imposta come immagine di controllo", - "setNodeField": "Imposta come campo nodo", - "problemSavingMask": "Problema nel salvataggio della maschera", - "problemSavingCanvasDesc": "Impossibile salvare la tela", - "setCanvasInitialImage": "Imposta come immagine iniziale della tela", - "workflowLoaded": "Flusso di lavoro caricato", - "setIPAdapterImage": "Imposta come immagine per l'Adattatore IP", - "problemSavingMaskDesc": "Impossibile salvare la maschera" - }, - "tooltip": { - "feature": { - "prompt": "Questo è il campo del prompt. Il prompt include oggetti di generazione e termini stilistici. Puoi anche aggiungere il peso (importanza del token) nel prompt, ma i comandi e i parametri dell'interfaccia a linea di comando non funzioneranno.", - "gallery": "Galleria visualizza le generazioni dalla cartella degli output man mano che vengono create. Le impostazioni sono memorizzate all'interno di file e accessibili dal menu contestuale.", - "other": "Queste opzioni abiliteranno modalità di elaborazione alternative per Invoke. 'Piastrella senza cuciture' creerà modelli ripetuti nell'output. 'Ottimizzazione Alta risoluzione' è la generazione in due passaggi con 'Immagine a Immagine': usa questa impostazione quando vuoi un'immagine più grande e più coerente senza artefatti. Ci vorrà più tempo del solito 'Testo a Immagine'.", - "seed": "Il valore del Seme influenza il rumore iniziale da cui è formata l'immagine. Puoi usare i semi già esistenti dalle immagini precedenti. 'Soglia del rumore' viene utilizzato per mitigare gli artefatti a valori CFG elevati (provare l'intervallo 0-10) e Perlin per aggiungere il rumore Perlin durante la generazione: entrambi servono per aggiungere variazioni ai risultati.", - "variations": "Prova una variazione con un valore compreso tra 0.1 e 1.0 per modificare il risultato per un dato seme. Variazioni interessanti del seme sono comprese tra 0.1 e 0.3.", - "upscale": "Utilizza ESRGAN per ingrandire l'immagine subito dopo la generazione.", - "faceCorrection": "Correzione del volto con GFPGAN o Codeformer: l'algoritmo rileva i volti nell'immagine e corregge eventuali difetti. Un valore alto cambierà maggiormente l'immagine, dando luogo a volti più attraenti. Codeformer con una maggiore fedeltà preserva l'immagine originale a scapito di una correzione facciale più forte.", - "imageToImage": "Da Immagine a Immagine carica qualsiasi immagine come iniziale, che viene quindi utilizzata per generarne una nuova in base al prompt. Più alto è il valore, più cambierà l'immagine risultante. Sono possibili valori da 0.0 a 1.0, l'intervallo consigliato è 0.25-0.75", - "boundingBox": "Il riquadro di selezione è lo stesso delle impostazioni Larghezza e Altezza per da Testo a Immagine o da Immagine a Immagine. Verrà elaborata solo l'area nella casella.", - "seamCorrection": "Controlla la gestione delle giunzioni visibili che si verificano tra le immagini generate sulla tela.", - "infillAndScaling": "Gestisce i metodi di riempimento (utilizzati su aree mascherate o cancellate dell'area di disegno) e il ridimensionamento (utile per i riquadri di selezione di piccole dimensioni)." - } - }, - "unifiedCanvas": { - "layer": "Livello", - "base": "Base", - "mask": "Maschera", - "maskingOptions": "Opzioni di mascheramento", - "enableMask": "Abilita maschera", - "preserveMaskedArea": "Mantieni area mascherata", - "clearMask": "Elimina la maschera", - "brush": "Pennello", - "eraser": "Cancellino", - "fillBoundingBox": "Riempi rettangolo di selezione", - "eraseBoundingBox": "Cancella rettangolo di selezione", - "colorPicker": "Selettore Colore", - "brushOptions": "Opzioni pennello", - "brushSize": "Dimensioni", - "move": "Sposta", - "resetView": "Reimposta vista", - "mergeVisible": "Fondi il visibile", - "saveToGallery": "Salva nella galleria", - "copyToClipboard": "Copia negli appunti", - "downloadAsImage": "Scarica come immagine", - "undo": "Annulla", - "redo": "Ripeti", - "clearCanvas": "Cancella la Tela", - "canvasSettings": "Impostazioni Tela", - "showIntermediates": "Mostra intermedi", - "showGrid": "Mostra griglia", - "snapToGrid": "Aggancia alla griglia", - "darkenOutsideSelection": "Scurisci l'esterno della selezione", - "autoSaveToGallery": "Salvataggio automatico nella Galleria", - "saveBoxRegionOnly": "Salva solo l'area di selezione", - "limitStrokesToBox": "Limita i tratti all'area di selezione", - "showCanvasDebugInfo": "Mostra ulteriori informazioni sulla Tela", - "clearCanvasHistory": "Cancella cronologia Tela", - "clearHistory": "Cancella la cronologia", - "clearCanvasHistoryMessage": "La cancellazione della cronologia della tela lascia intatta la tela corrente, ma cancella in modo irreversibile la cronologia degli annullamenti e dei ripristini.", - "clearCanvasHistoryConfirm": "Sei sicuro di voler cancellare la cronologia della Tela?", - "emptyTempImageFolder": "Svuota la cartella delle immagini temporanee", - "emptyFolder": "Svuota la cartella", - "emptyTempImagesFolderMessage": "Lo svuotamento della cartella delle immagini temporanee ripristina completamente anche la Tela Unificata. Ciò include tutta la cronologia di annullamento/ripristino, le immagini nell'area di staging e il livello di base della tela.", - "emptyTempImagesFolderConfirm": "Sei sicuro di voler svuotare la cartella temporanea?", - "activeLayer": "Livello attivo", - "canvasScale": "Scala della Tela", - "boundingBox": "Rettangolo di selezione", - "scaledBoundingBox": "Rettangolo di selezione scalato", - "boundingBoxPosition": "Posizione del Rettangolo di selezione", - "canvasDimensions": "Dimensioni della Tela", - "canvasPosition": "Posizione Tela", - "cursorPosition": "Posizione del cursore", - "previous": "Precedente", - "next": "Successivo", - "accept": "Accetta", - "showHide": "Mostra/nascondi", - "discardAll": "Scarta tutto", - "betaClear": "Svuota", - "betaDarkenOutside": "Oscura all'esterno", - "betaLimitToBox": "Limita al rettangolo", - "betaPreserveMasked": "Conserva quanto mascherato", - "antialiasing": "Anti aliasing", - "showResultsOn": "Mostra i risultati (attivato)", - "showResultsOff": "Mostra i risultati (disattivato)" - }, - "accessibility": { - "modelSelect": "Seleziona modello", - "invokeProgressBar": "Barra di avanzamento generazione", - "uploadImage": "Carica immagine", - "previousImage": "Immagine precedente", - "nextImage": "Immagine successiva", - "useThisParameter": "Usa questo parametro", - "reset": "Reimposta", - "copyMetadataJson": "Copia i metadati JSON", - "exitViewer": "Esci dal visualizzatore", - "zoomIn": "Zoom avanti", - "zoomOut": "Zoom indietro", - "rotateCounterClockwise": "Ruotare in senso antiorario", - "rotateClockwise": "Ruotare in senso orario", - "flipHorizontally": "Capovolgi orizzontalmente", - "toggleLogViewer": "Attiva/disattiva visualizzatore registro", - "showOptionsPanel": "Mostra il pannello laterale", - "flipVertically": "Capovolgi verticalmente", - "toggleAutoscroll": "Attiva/disattiva lo scorrimento automatico", - "modifyConfig": "Modifica configurazione", - "menu": "Menu", - "showGalleryPanel": "Mostra il pannello Galleria", - "loadMore": "Carica altro" - }, - "ui": { - "hideProgressImages": "Nascondi avanzamento immagini", - "showProgressImages": "Mostra avanzamento immagini", - "swapSizes": "Scambia dimensioni", - "lockRatio": "Blocca le proporzioni" - }, - "nodes": { - "zoomOutNodes": "Rimpicciolire", - "hideGraphNodes": "Nascondi sovrapposizione grafico", - "hideLegendNodes": "Nascondi la legenda del tipo di campo", - "showLegendNodes": "Mostra legenda del tipo di campo", - "hideMinimapnodes": "Nascondi minimappa", - "showMinimapnodes": "Mostra minimappa", - "zoomInNodes": "Ingrandire", - "fitViewportNodes": "Adatta vista", - "showGraphNodes": "Mostra sovrapposizione grafico", - "resetWorkflowDesc2": "Reimpostare il flusso di lavoro cancellerà tutti i nodi, i bordi e i dettagli del flusso di lavoro.", - "reloadNodeTemplates": "Ricarica i modelli di nodo", - "loadWorkflow": "Importa flusso di lavoro JSON", - "resetWorkflow": "Reimposta flusso di lavoro", - "resetWorkflowDesc": "Sei sicuro di voler reimpostare questo flusso di lavoro?", - "downloadWorkflow": "Esporta flusso di lavoro JSON", - "scheduler": "Campionatore", - "addNode": "Aggiungi nodo", - "sDXLMainModelFieldDescription": "Campo del modello SDXL.", - "boardField": "Bacheca", - "animatedEdgesHelp": "Anima i bordi selezionati e i bordi collegati ai nodi selezionati", - "sDXLMainModelField": "Modello SDXL", - "executionStateInProgress": "In corso", - "executionStateError": "Errore", - "executionStateCompleted": "Completato", - "boardFieldDescription": "Una bacheca della galleria", - "addNodeToolTip": "Aggiungi nodo (Shift+A, Space)", - "sDXLRefinerModelField": "Modello Refiner", - "problemReadingMetadata": "Problema durante la lettura dei metadati dall'immagine", - "colorCodeEdgesHelp": "Bordi con codice colore in base ai campi collegati", - "animatedEdges": "Bordi animati", - "snapToGrid": "Aggancia alla griglia", - "validateConnections": "Convalida connessioni e grafico", - "validateConnectionsHelp": "Impedisce che vengano effettuate connessioni non valide e che vengano \"invocati\" grafici non validi", - "fullyContainNodesHelp": "I nodi devono essere completamente all'interno della casella di selezione per essere selezionati", - "fullyContainNodes": "Contenere completamente i nodi da selezionare", - "snapToGridHelp": "Aggancia i nodi alla griglia quando vengono spostati", - "workflowSettings": "Impostazioni Editor del flusso di lavoro", - "colorCodeEdges": "Bordi con codice colore", - "mainModelField": "Modello", - "noOutputRecorded": "Nessun output registrato", - "noFieldsLinearview": "Nessun campo aggiunto alla vista lineare", - "removeLinearView": "Rimuovi dalla vista lineare", - "workflowDescription": "Breve descrizione", - "workflowContact": "Contatto", - "workflowVersion": "Versione", - "workflow": "Flusso di lavoro", - "noWorkflow": "Nessun flusso di lavoro", - "workflowTags": "Tag", - "workflowValidation": "Errore di convalida del flusso di lavoro", - "workflowAuthor": "Autore", - "workflowName": "Nome", - "workflowNotes": "Note", - "unhandledInputProperty": "Proprietà di input non gestita", - "versionUnknown": " Versione sconosciuta", - "unableToValidateWorkflow": "Impossibile convalidare il flusso di lavoro", - "updateApp": "Aggiorna App", - "problemReadingWorkflow": "Problema durante la lettura del flusso di lavoro dall'immagine", - "unableToLoadWorkflow": "Impossibile caricare il flusso di lavoro", - "updateNode": "Aggiorna nodo", - "version": "Versione", - "notes": "Note", - "problemSettingTitle": "Problema nell'impostazione del titolo", - "unkownInvocation": "Tipo di invocazione sconosciuta", - "unknownTemplate": "Modello sconosciuto", - "nodeType": "Tipo di nodo", - "vaeField": "VAE", - "unhandledOutputProperty": "Proprietà di output non gestita", - "notesDescription": "Aggiunge note sul tuo flusso di lavoro", - "unknownField": "Campo sconosciuto", - "unknownNode": "Nodo sconosciuto", - "vaeFieldDescription": "Sotto modello VAE.", - "booleanPolymorphicDescription": "Una raccolta di booleani.", - "missingTemplate": "Modello mancante", - "outputSchemaNotFound": "Schema di output non trovato", - "colorFieldDescription": "Un colore RGBA.", - "maybeIncompatible": "Potrebbe essere incompatibile con quello installato", - "noNodeSelected": "Nessun nodo selezionato", - "colorPolymorphic": "Colore polimorfico", - "booleanCollectionDescription": "Una raccolta di booleani.", - "colorField": "Colore", - "nodeTemplate": "Modello di nodo", - "nodeOpacity": "Opacità del nodo", - "pickOne": "Sceglierne uno", - "outputField": "Campo di output", - "nodeSearch": "Cerca nodi", - "nodeOutputs": "Uscite del nodo", - "collectionItem": "Oggetto della raccolta", - "noConnectionInProgress": "Nessuna connessione in corso", - "noConnectionData": "Nessun dato di connessione", - "outputFields": "Campi di output", - "cannotDuplicateConnection": "Impossibile creare connessioni duplicate", - "booleanPolymorphic": "Polimorfico booleano", - "colorPolymorphicDescription": "Una collezione di colori polimorfici.", - "missingCanvaInitImage": "Immagine iniziale della tela mancante", - "clipFieldDescription": "Sottomodelli di tokenizzatore e codificatore di testo.", - "noImageFoundState": "Nessuna immagine iniziale trovata nello stato", - "clipField": "CLIP", - "noMatchingNodes": "Nessun nodo corrispondente", - "noFieldType": "Nessun tipo di campo", - "colorCollection": "Una collezione di colori.", - "noOutputSchemaName": "Nessun nome dello schema di output trovato nell'oggetto di riferimento", - "boolean": "Booleani", - "missingCanvaInitMaskImages": "Immagini di inizializzazione e maschera della tela mancanti", - "oNNXModelField": "Modello ONNX", - "node": "Nodo", - "booleanDescription": "I booleani sono veri o falsi.", - "collection": "Raccolta", - "cannotConnectInputToInput": "Impossibile collegare Input a Input", - "cannotConnectOutputToOutput": "Impossibile collegare Output ad Output", - "booleanCollection": "Raccolta booleana", - "cannotConnectToSelf": "Impossibile connettersi a se stesso", - "mismatchedVersion": "Ha una versione non corrispondente", - "outputNode": "Nodo di Output", - "loadingNodes": "Caricamento nodi...", - "oNNXModelFieldDescription": "Campo del modello ONNX.", - "denoiseMaskFieldDescription": "La maschera di riduzione del rumore può essere passata tra i nodi", - "floatCollectionDescription": "Una raccolta di numeri virgola mobile.", - "enum": "Enumeratore", - "float": "In virgola mobile", - "doesNotExist": "non esiste", - "currentImageDescription": "Visualizza l'immagine corrente nell'editor dei nodi", - "fieldTypesMustMatch": "I tipi di campo devono corrispondere", - "edge": "Bordo", - "enumDescription": "Gli enumeratori sono valori che possono essere una delle diverse opzioni.", - "denoiseMaskField": "Maschera riduzione rumore", - "currentImage": "Immagine corrente", - "floatCollection": "Raccolta in virgola mobile", - "inputField": "Campo di Input", - "controlFieldDescription": "Informazioni di controllo passate tra i nodi.", - "skippingUnknownOutputType": "Tipo di campo di output sconosciuto saltato", - "latentsFieldDescription": "Le immagini latenti possono essere passate tra i nodi.", - "ipAdapterPolymorphicDescription": "Una raccolta di adattatori IP.", - "latentsPolymorphicDescription": "Le immagini latenti possono essere passate tra i nodi.", - "ipAdapterCollection": "Raccolta Adattatori IP", - "conditioningCollection": "Raccolta condizionamenti", - "ipAdapterPolymorphic": "Adattatore IP Polimorfico", - "integerPolymorphicDescription": "Una raccolta di numeri interi.", - "conditioningCollectionDescription": "Il condizionamento può essere passato tra i nodi.", - "skippingReservedFieldType": "Tipo di campo riservato saltato", - "conditioningPolymorphic": "Condizionamento Polimorfico", - "integer": "Numero Intero", - "latentsCollection": "Raccolta Latenti", - "sourceNode": "Nodo di origine", - "integerDescription": "Gli interi sono numeri senza punto decimale.", - "stringPolymorphic": "Stringa polimorfica", - "conditioningPolymorphicDescription": "Il condizionamento può essere passato tra i nodi.", - "skipped": "Saltato", - "imagePolymorphic": "Immagine Polimorfica", - "imagePolymorphicDescription": "Una raccolta di immagini.", - "floatPolymorphic": "Numeri in virgola mobile Polimorfici", - "ipAdapterCollectionDescription": "Una raccolta di adattatori IP.", - "stringCollectionDescription": "Una raccolta di stringhe.", - "unableToParseNode": "Impossibile analizzare il nodo", - "controlCollection": "Raccolta di Controllo", - "stringCollection": "Raccolta di stringhe", - "inputMayOnlyHaveOneConnection": "L'ingresso può avere solo una connessione", - "ipAdapter": "Adattatore IP", - "integerCollection": "Raccolta di numeri interi", - "controlCollectionDescription": "Informazioni di controllo passate tra i nodi.", - "skippedReservedInput": "Campo di input riservato saltato", - "inputNode": "Nodo di Input", - "imageField": "Immagine", - "skippedReservedOutput": "Campo di output riservato saltato", - "integerCollectionDescription": "Una raccolta di numeri interi.", - "conditioningFieldDescription": "Il condizionamento può essere passato tra i nodi.", - "stringDescription": "Le stringhe sono testo.", - "integerPolymorphic": "Numero intero Polimorfico", - "ipAdapterModel": "Modello Adattatore IP", - "latentsPolymorphic": "Latenti polimorfici", - "skippingInputNoTemplate": "Campo di input senza modello saltato", - "ipAdapterDescription": "Un adattatore di prompt di immagini (Adattatore IP).", - "stringPolymorphicDescription": "Una raccolta di stringhe.", - "skippingUnknownInputType": "Tipo di campo di input sconosciuto saltato", - "controlField": "Controllo", - "ipAdapterModelDescription": "Campo Modello adattatore IP", - "invalidOutputSchema": "Schema di output non valido", - "floatDescription": "I numeri in virgola mobile sono numeri con un punto decimale.", - "floatPolymorphicDescription": "Una raccolta di numeri in virgola mobile.", - "conditioningField": "Condizionamento", - "string": "Stringa", - "latentsField": "Latenti", - "connectionWouldCreateCycle": "La connessione creerebbe un ciclo", - "inputFields": "Campi di Input", - "uNetFieldDescription": "Sub-modello UNet.", - "imageCollectionDescription": "Una raccolta di immagini.", - "imageFieldDescription": "Le immagini possono essere passate tra i nodi.", - "unableToParseEdge": "Impossibile analizzare il bordo", - "latentsCollectionDescription": "Le immagini latenti possono essere passate tra i nodi.", - "imageCollection": "Raccolta Immagini", - "loRAModelField": "LoRA" - }, - "boards": { - "autoAddBoard": "Aggiungi automaticamente bacheca", - "menuItemAutoAdd": "Aggiungi automaticamente a questa Bacheca", - "cancel": "Annulla", - "addBoard": "Aggiungi Bacheca", - "bottomMessage": "L'eliminazione di questa bacheca e delle sue immagini ripristinerà tutte le funzionalità che le stanno attualmente utilizzando.", - "changeBoard": "Cambia Bacheca", - "loading": "Caricamento in corso ...", - "clearSearch": "Cancella Ricerca", - "topMessage": "Questa bacheca contiene immagini utilizzate nelle seguenti funzionalità:", - "move": "Sposta", - "myBoard": "Bacheca", - "searchBoard": "Cerca bacheche ...", - "noMatching": "Nessuna bacheca corrispondente", - "selectBoard": "Seleziona una Bacheca", - "uncategorized": "Non categorizzato", - "downloadBoard": "Scarica la bacheca" - }, - "controlnet": { - "contentShuffleDescription": "Rimescola il contenuto di un'immagine", - "contentShuffle": "Rimescola contenuto", - "beginEndStepPercent": "Percentuale passi Inizio / Fine", - "duplicate": "Duplica", - "balanced": "Bilanciato", - "depthMidasDescription": "Generazione di mappe di profondità usando Midas", - "control": "ControlNet", - "crop": "Ritaglia", - "depthMidas": "Profondità (Midas)", - "enableControlnet": "Abilita ControlNet", - "detectResolution": "Rileva risoluzione", - "controlMode": "Modalità Controllo", - "cannyDescription": "Canny rilevamento bordi", - "depthZoe": "Profondità (Zoe)", - "autoConfigure": "Configura automaticamente il processore", - "delete": "Elimina", - "depthZoeDescription": "Generazione di mappe di profondità usando Zoe", - "resize": "Ridimensiona", - "showAdvanced": "Mostra opzioni Avanzate", - "bgth": "Soglia rimozione sfondo", - "importImageFromCanvas": "Importa immagine dalla Tela", - "lineartDescription": "Converte l'immagine in lineart", - "importMaskFromCanvas": "Importa maschera dalla Tela", - "hideAdvanced": "Nascondi opzioni avanzate", - "ipAdapterModel": "Modello Adattatore", - "resetControlImage": "Reimposta immagine di controllo", - "f": "F", - "h": "H", - "prompt": "Prompt", - "openPoseDescription": "Stima della posa umana utilizzando Openpose", - "resizeMode": "Modalità ridimensionamento", - "weight": "Peso", - "selectModel": "Seleziona un modello", - "w": "W", - "processor": "Processore", - "none": "Nessuno", - "incompatibleBaseModel": "Modello base incompatibile:", - "pidiDescription": "Elaborazione immagini PIDI", - "fill": "Riempire", - "colorMapDescription": "Genera una mappa dei colori dall'immagine", - "lineartAnimeDescription": "Elaborazione lineart in stile anime", - "imageResolution": "Risoluzione dell'immagine", - "colorMap": "Colore", - "lowThreshold": "Soglia inferiore", - "highThreshold": "Soglia superiore", - "normalBaeDescription": "Elaborazione BAE normale", - "noneDescription": "Nessuna elaborazione applicata", - "saveControlImage": "Salva immagine di controllo", - "toggleControlNet": "Attiva/disattiva questo ControlNet", - "safe": "Sicuro", - "colorMapTileSize": "Dimensione piastrella", - "ipAdapterImageFallback": "Nessuna immagine dell'Adattatore IP selezionata", - "mediapipeFaceDescription": "Rilevamento dei volti tramite Mediapipe", - "hedDescription": "Rilevamento dei bordi nidificati olisticamente", - "setControlImageDimensions": "Imposta le dimensioni dell'immagine di controllo su L/A", - "resetIPAdapterImage": "Reimposta immagine Adattatore IP", - "handAndFace": "Mano e faccia", - "enableIPAdapter": "Abilita Adattatore IP", - "maxFaces": "Numero massimo di volti", - "addT2IAdapter": "Aggiungi $t(common.t2iAdapter)", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) abilitato, $t(common.t2iAdapter) disabilitati", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) abilitato, $t(common.controlNet) disabilitati", - "addControlNet": "Aggiungi $t(common.controlNet)", - "controlNetT2IMutexDesc": "$t(common.controlNet) e $t(common.t2iAdapter) contemporaneamente non sono attualmente supportati.", - "addIPAdapter": "Aggiungi $t(common.ipAdapter)", - "controlAdapter_one": "Adattatore di Controllo", - "controlAdapter_many": "Adattatori di Controllo", - "controlAdapter_other": "Adattatori di Controllo", - "megaControl": "Mega ControlNet", - "minConfidence": "Confidenza minima", - "scribble": "Scribble", - "amult": "Angolo di illuminazione" - }, - "queue": { - "queueFront": "Aggiungi all'inizio della coda", - "queueBack": "Aggiungi alla coda", - "queueCountPrediction": "Aggiungi {{predicted}} alla coda", - "queue": "Coda", - "status": "Stato", - "pruneSucceeded": "Rimossi {{item_count}} elementi completati dalla coda", - "cancelTooltip": "Annulla l'elemento corrente", - "queueEmpty": "Coda vuota", - "pauseSucceeded": "Elaborazione sospesa", - "in_progress": "In corso", - "notReady": "Impossibile mettere in coda", - "batchFailedToQueue": "Impossibile mettere in coda il lotto", - "completed": "Completati", - "batchValues": "Valori del lotto", - "cancelFailed": "Problema durante l'annullamento dell'elemento", - "batchQueued": "Lotto aggiunto alla coda", - "pauseFailed": "Problema durante la sospensione dell'elaborazione", - "clearFailed": "Problema nella cancellazione della coda", - "queuedCount": "{{pending}} In attesa", - "front": "inizio", - "clearSucceeded": "Coda cancellata", - "pause": "Sospendi", - "pruneTooltip": "Rimuovi {{item_count}} elementi completati", - "cancelSucceeded": "Elemento annullato", - "batchQueuedDesc_one": "Aggiunta {{count}} sessione a {{direction}} della coda", - "batchQueuedDesc_many": "Aggiunte {{count}} sessioni a {{direction}} della coda", - "batchQueuedDesc_other": "Aggiunte {{count}} sessioni a {{direction}} della coda", - "graphQueued": "Grafico in coda", - "batch": "Lotto", - "clearQueueAlertDialog": "Lo svuotamento della coda annulla immediatamente tutti gli elementi in elaborazione e cancella completamente la coda.", - "pending": "In attesa", - "completedIn": "Completato in", - "resumeFailed": "Problema nel riavvio dell'elaborazione", - "clear": "Cancella", - "prune": "Rimuovi", - "total": "Totale", - "canceled": "Annullati", - "pruneFailed": "Problema nel rimuovere la coda", - "cancelBatchSucceeded": "Lotto annullato", - "clearTooltip": "Annulla e cancella tutti gli elementi", - "current": "Attuale", - "pauseTooltip": "Sospende l'elaborazione", - "failed": "Falliti", - "cancelItem": "Annulla l'elemento", - "next": "Prossimo", - "cancelBatch": "Annulla lotto", - "back": "fine", - "cancel": "Annulla", - "session": "Sessione", - "queueTotal": "{{total}} Totale", - "resumeSucceeded": "Elaborazione ripresa", - "enqueueing": "Lotto in coda", - "resumeTooltip": "Riprendi l'elaborazione", - "resume": "Riprendi", - "cancelBatchFailed": "Problema durante l'annullamento del lotto", - "clearQueueAlertDialog2": "Sei sicuro di voler cancellare la coda?", - "item": "Elemento", - "graphFailedToQueue": "Impossibile mettere in coda il grafico", - "queueMaxExceeded": "È stato superato il limite massimo di {{max_queue_size}} e {{skip}} elementi verrebbero saltati" - }, - "embedding": { - "noMatchingEmbedding": "Nessun Incorporamento corrispondente", - "addEmbedding": "Aggiungi Incorporamento", - "incompatibleModel": "Modello base incompatibile:" - }, - "models": { - "noMatchingModels": "Nessun modello corrispondente", - "loading": "caricamento", - "noMatchingLoRAs": "Nessun LoRA corrispondente", - "noLoRAsAvailable": "Nessun LoRA disponibile", - "noModelsAvailable": "Nessun modello disponibile", - "selectModel": "Seleziona un modello", - "selectLoRA": "Seleziona un LoRA", - "noRefinerModelsInstalled": "Nessun modello SDXL Refiner installato", - "noLoRAsInstalled": "Nessun LoRA installato" - }, - "invocationCache": { - "disable": "Disabilita", - "misses": "Non trovati in cache", - "enableFailed": "Problema nell'abilitazione della cache delle invocazioni", - "invocationCache": "Cache delle invocazioni", - "clearSucceeded": "Cache delle invocazioni svuotata", - "enableSucceeded": "Cache delle invocazioni abilitata", - "clearFailed": "Problema durante lo svuotamento della cache delle invocazioni", - "hits": "Trovati in cache", - "disableSucceeded": "Cache delle invocazioni disabilitata", - "disableFailed": "Problema durante la disabilitazione della cache delle invocazioni", - "enable": "Abilita", - "clear": "Svuota", - "maxCacheSize": "Dimensione max cache", - "cacheSize": "Dimensione cache" - }, - "dynamicPrompts": { - "seedBehaviour": { - "perPromptDesc": "Utilizza un seme diverso per ogni immagine", - "perIterationLabel": "Per iterazione", - "perIterationDesc": "Utilizza un seme diverso per ogni iterazione", - "perPromptLabel": "Per immagine", - "label": "Comportamento del seme" - }, - "enableDynamicPrompts": "Abilita prompt dinamici", - "combinatorial": "Generazione combinatoria", - "maxPrompts": "Numero massimo di prompt", - "promptsWithCount_one": "{{count}} Prompt", - "promptsWithCount_many": "{{count}} Prompt", - "promptsWithCount_other": "{{count}} Prompt", - "dynamicPrompts": "Prompt dinamici" - }, - "popovers": { - "paramScheduler": { - "paragraphs": [ - "Il campionatore definisce come aggiungere in modo iterativo il rumore a un'immagine o come aggiornare un campione in base all'output di un modello." - ], - "heading": "Campionatore" - }, - "compositingMaskAdjustments": { - "heading": "Regolazioni della maschera", - "paragraphs": [ - "Regola la maschera." - ] - }, - "compositingCoherenceSteps": { - "heading": "Passi", - "paragraphs": [ - "Numero di passi di riduzione del rumore utilizzati nel Passaggio di Coerenza.", - "Uguale al parametro principale Passi." - ] - }, - "compositingBlur": { - "heading": "Sfocatura", - "paragraphs": [ - "Il raggio di sfocatura della maschera." - ] - }, - "compositingCoherenceMode": { - "heading": "Modalità", - "paragraphs": [ - "La modalità del Passaggio di Coerenza." - ] - }, - "clipSkip": { - "paragraphs": [ - "Scegli quanti livelli del modello CLIP saltare.", - "Alcuni modelli funzionano meglio con determinate impostazioni di CLIP Skip.", - "Un valore più alto in genere produce un'immagine meno dettagliata." - ] - }, - "compositingCoherencePass": { - "heading": "Passaggio di Coerenza", - "paragraphs": [ - "Un secondo ciclo di riduzione del rumore aiuta a comporre l'immagine Inpaint/Outpaint." - ] - }, - "compositingStrength": { - "heading": "Forza", - "paragraphs": [ - "Intensità di riduzione del rumore per il passaggio di coerenza.", - "Uguale al parametro intensità di riduzione del rumore da immagine a immagine." - ] - }, - "paramNegativeConditioning": { - "paragraphs": [ - "Il processo di generazione evita i concetti nel prompt negativo. Utilizzatelo per escludere qualità o oggetti dall'output.", - "Supporta la sintassi e gli incorporamenti di Compel." - ], - "heading": "Prompt negativo" - }, - "compositingBlurMethod": { - "heading": "Metodo di sfocatura", - "paragraphs": [ - "Il metodo di sfocatura applicato all'area mascherata." - ] - }, - "paramPositiveConditioning": { - "heading": "Prompt positivo", - "paragraphs": [ - "Guida il processo di generazione. Puoi usare qualsiasi parola o frase.", - "Supporta sintassi e incorporamenti di Compel e Prompt Dinamici." - ] - }, - "controlNetBeginEnd": { - "heading": "Percentuale passi Inizio / Fine", - "paragraphs": [ - "A quali passi del processo di rimozione del rumore verrà applicato ControlNet.", - "I ControlNet applicati all'inizio del processo guidano la composizione, mentre i ControlNet applicati alla fine guidano i dettagli." - ] - }, - "noiseUseCPU": { - "paragraphs": [ - "Controlla se viene generato rumore sulla CPU o sulla GPU.", - "Con il rumore della CPU abilitato, un seme particolare produrrà la stessa immagine su qualsiasi macchina.", - "Non vi è alcun impatto sulle prestazioni nell'abilitare il rumore della CPU." - ], - "heading": "Usa la CPU per generare rumore" - }, - "scaleBeforeProcessing": { - "paragraphs": [ - "Ridimensiona l'area selezionata alla dimensione più adatta al modello prima del processo di generazione dell'immagine." - ], - "heading": "Scala prima dell'elaborazione" - }, - "paramRatio": { - "heading": "Proporzioni", - "paragraphs": [ - "Le proporzioni delle dimensioni dell'immagine generata.", - "Per i modelli SD1.5 si consiglia una dimensione dell'immagine (in numero di pixel) equivalente a 512x512 mentre per i modelli SDXL si consiglia una dimensione equivalente a 1024x1024." - ] - }, - "dynamicPrompts": { - "paragraphs": [ - "Prompt Dinamici crea molte variazioni a partire da un singolo prompt.", - "La sintassi di base è \"a {red|green|blue} ball\". Ciò produrrà tre prompt: \"a red ball\", \"a green ball\" e \"a blue ball\".", - "Puoi utilizzare la sintassi quante volte vuoi in un singolo prompt, ma assicurati di tenere sotto controllo il numero di prompt generati con l'impostazione \"Numero massimo di prompt\"." - ], - "heading": "Prompt Dinamici" - }, - "paramVAE": { - "paragraphs": [ - "Modello utilizzato per tradurre l'output dell'intelligenza artificiale nell'immagine finale." - ], - "heading": "VAE" - }, - "paramIterations": { - "paragraphs": [ - "Il numero di immagini da generare.", - "Se i prompt dinamici sono abilitati, ciascuno dei prompt verrà generato questo numero di volte." - ], - "heading": "Iterazioni" - }, - "paramVAEPrecision": { - "heading": "Precisione VAE", - "paragraphs": [ - "La precisione utilizzata durante la codifica e decodifica VAE. FP16/mezza precisione è più efficiente, a scapito di minori variazioni dell'immagine." - ] - }, - "paramSeed": { - "paragraphs": [ - "Controlla il rumore iniziale utilizzato per la generazione.", - "Disabilita seme \"Casuale\" per produrre risultati identici con le stesse impostazioni di generazione." - ], - "heading": "Seme" - }, - "controlNetResizeMode": { - "heading": "Modalità ridimensionamento", - "paragraphs": [ - "Come l'immagine ControlNet verrà adattata alle dimensioni di output dell'immagine." - ] - }, - "dynamicPromptsSeedBehaviour": { - "paragraphs": [ - "Controlla il modo in cui viene utilizzato il seme durante la generazione dei prompt.", - "Per iterazione utilizzerà un seme univoco per ogni iterazione. Usalo per esplorare variazioni del prompt su un singolo seme.", - "Ad esempio, se hai 5 prompt, ogni immagine utilizzerà lo stesso seme.", - "Per immagine utilizzerà un seme univoco per ogni immagine. Ciò fornisce più variazione." - ], - "heading": "Comportamento del seme" - }, - "paramModel": { - "heading": "Modello", - "paragraphs": [ - "Modello utilizzato per i passaggi di riduzione del rumore.", - "Diversi modelli sono generalmente addestrati per specializzarsi nella produzione di particolari risultati e contenuti estetici." - ] - }, - "paramDenoisingStrength": { - "paragraphs": [ - "Quanto rumore viene aggiunto all'immagine in ingresso.", - "0 risulterà in un'immagine identica, mentre 1 risulterà in un'immagine completamente nuova." - ], - "heading": "Forza di riduzione del rumore" - }, - "dynamicPromptsMaxPrompts": { - "heading": "Numero massimo di prompt", - "paragraphs": [ - "Limita il numero di prompt che possono essere generati da Prompt Dinamici." - ] - }, - "infillMethod": { - "paragraphs": [ - "Metodo per riempire l'area selezionata." - ], - "heading": "Metodo di riempimento" - }, - "controlNetWeight": { - "heading": "Peso", - "paragraphs": [ - "Quanto forte sarà l'impatto di ControlNet sull'immagine generata." - ] - }, - "paramCFGScale": { - "heading": "Scala CFG", - "paragraphs": [ - "Controlla quanto il tuo prompt influenza il processo di generazione." - ] - }, - "controlNetControlMode": { - "paragraphs": [ - "Attribuisce più peso al prompt o a ControlNet." - ], - "heading": "Modalità di controllo" - }, - "paramSteps": { - "heading": "Passi", - "paragraphs": [ - "Numero di passi che verranno eseguiti in ogni generazione.", - "Un numero di passi più elevato generalmente creerà immagini migliori ma richiederà più tempo di generazione." - ] - }, - "lora": { - "heading": "Peso LoRA", - "paragraphs": [ - "Un peso LoRA più elevato porterà a impatti maggiori sull'immagine finale." - ] - }, - "controlNet": { - "paragraphs": [ - "ControlNet fornisce una guida al processo di generazione, aiutando a creare immagini con composizione, struttura o stile controllati, a seconda del modello selezionato." - ], - "heading": "ControlNet" - } - }, - "sdxl": { - "selectAModel": "Seleziona un modello", - "scheduler": "Campionatore", - "noModelsAvailable": "Nessun modello disponibile", - "denoisingStrength": "Forza di riduzione del rumore", - "concatPromptStyle": "Concatena Prompt & Stile", - "loading": "Caricamento...", - "steps": "Passi", - "refinerStart": "Inizio Affinamento", - "cfgScale": "Scala CFG", - "negStylePrompt": "Prompt Stile negativo", - "refiner": "Affinatore", - "negAestheticScore": "Punteggio estetico negativo", - "useRefiner": "Utilizza l'affinatore", - "refinermodel": "Modello Affinatore", - "posAestheticScore": "Punteggio estetico positivo", - "posStylePrompt": "Prompt Stile positivo" - }, - "metadata": { - "initImage": "Immagine iniziale", - "seamless": "Senza giunture", - "positivePrompt": "Prompt positivo", - "negativePrompt": "Prompt negativo", - "generationMode": "Modalità generazione", - "Threshold": "Livello di soglia del rumore", - "metadata": "Metadati", - "strength": "Forza Immagine a Immagine", - "seed": "Seme", - "imageDetails": "Dettagli dell'immagine", - "perlin": "Rumore Perlin", - "model": "Modello", - "noImageDetails": "Nessun dettaglio dell'immagine trovato", - "hiresFix": "Ottimizzazione Alta Risoluzione", - "cfgScale": "Scala CFG", - "fit": "Adatta Immagine a Immagine", - "height": "Altezza", - "variations": "Coppie Peso-Seme", - "noMetaData": "Nessun metadato trovato", - "width": "Larghezza", - "createdBy": "Creato da", - "workflow": "Flusso di lavoro", - "steps": "Passi", - "scheduler": "Campionatore", - "recallParameters": "Richiama i parametri", - "noRecallParameters": "Nessun parametro da richiamare trovato" - }, - "hrf": { - "enableHrf": "Abilita Correzione Alta Risoluzione", - "upscaleMethod": "Metodo di ampliamento", - "enableHrfTooltip": "Genera con una risoluzione iniziale inferiore, esegue l'ampliamento alla risoluzione di base, quindi esegue Immagine a Immagine.", - "metadata": { - "strength": "Forza della Correzione Alta Risoluzione", - "enabled": "Correzione Alta Risoluzione Abilitata", - "method": "Metodo della Correzione Alta Risoluzione" - }, - "hrf": "Correzione Alta Risoluzione", - "hrfStrength": "Forza della Correzione Alta Risoluzione", - "strengthTooltip": "Valori più bassi comportano meno dettagli, il che può ridurre potenziali artefatti." - } -} diff --git a/invokeai/frontend/web/dist/locales/ja.json b/invokeai/frontend/web/dist/locales/ja.json deleted file mode 100644 index c7718e7b7c..0000000000 --- a/invokeai/frontend/web/dist/locales/ja.json +++ /dev/null @@ -1,816 +0,0 @@ -{ - "common": { - "languagePickerLabel": "言語", - "reportBugLabel": "バグ報告", - "settingsLabel": "設定", - "langJapanese": "日本語", - "nodesDesc": "現在、画像生成のためのノードベースシステムを開発中です。機能についてのアップデートにご期待ください。", - "postProcessing": "後処理", - "postProcessDesc1": "Invoke AIは、多彩な後処理の機能を備えています。アップスケーリングと顔修復は、すでにWebUI上で利用可能です。これらは、[Text To Image]および[Image To Image]タブの[詳細オプション]メニューからアクセスできます。また、現在の画像表示の上やビューア内の画像アクションボタンを使って、画像を直接処理することもできます。", - "postProcessDesc2": "より高度な後処理の機能を実現するための専用UIを近日中にリリース予定です。", - "postProcessDesc3": "Invoke AI CLIでは、この他にもEmbiggenをはじめとする様々な機能を利用することができます。", - "training": "追加学習", - "trainingDesc1": "Textual InversionとDreamboothを使って、WebUIから独自のEmbeddingとチェックポイントを追加学習するための専用ワークフローです。", - "trainingDesc2": "InvokeAIは、すでにメインスクリプトを使ったTextual Inversionによるカスタム埋め込み追加学習にも対応しています。", - "upload": "アップロード", - "close": "閉じる", - "load": "ロード", - "back": "戻る", - "statusConnected": "接続済", - "statusDisconnected": "切断済", - "statusError": "エラー", - "statusPreparing": "準備中", - "statusProcessingCanceled": "処理をキャンセル", - "statusProcessingComplete": "処理完了", - "statusGenerating": "生成中", - "statusGeneratingTextToImage": "Text To Imageで生成中", - "statusGeneratingImageToImage": "Image To Imageで生成中", - "statusGenerationComplete": "生成完了", - "statusSavingImage": "画像を保存", - "statusRestoringFaces": "顔の修復", - "statusRestoringFacesGFPGAN": "顔の修復 (GFPGAN)", - "statusRestoringFacesCodeFormer": "顔の修復 (CodeFormer)", - "statusUpscaling": "アップスケーリング", - "statusUpscalingESRGAN": "アップスケーリング (ESRGAN)", - "statusLoadingModel": "モデルを読み込む", - "statusModelChanged": "モデルを変更", - "cancel": "キャンセル", - "accept": "同意", - "langBrPortuguese": "Português do Brasil", - "langRussian": "Русский", - "langSimplifiedChinese": "简体中文", - "langUkranian": "Украї́нська", - "langSpanish": "Español", - "img2img": "img2img", - "unifiedCanvas": "Unified Canvas", - "statusMergingModels": "モデルのマージ", - "statusModelConverted": "変換済モデル", - "statusGeneratingInpainting": "Inpaintingを生成", - "statusIterationComplete": "Iteration Complete", - "statusGeneratingOutpainting": "Outpaintingを生成", - "loading": "ロード中", - "loadingInvokeAI": "Invoke AIをロード中", - "statusConvertingModel": "モデルの変換", - "statusMergedModels": "マージ済モデル", - "githubLabel": "Github", - "hotkeysLabel": "ホットキー", - "langHebrew": "עברית", - "discordLabel": "Discord", - "langItalian": "Italiano", - "langEnglish": "English", - "langArabic": "アラビア語", - "langDutch": "Nederlands", - "langFrench": "Français", - "langGerman": "Deutsch", - "langPortuguese": "Português", - "nodes": "ワークフローエディター", - "langKorean": "한국어", - "langPolish": "Polski", - "txt2img": "txt2img", - "postprocessing": "Post Processing", - "t2iAdapter": "T2I アダプター", - "communityLabel": "コミュニティ", - "dontAskMeAgain": "次回から確認しない", - "areYouSure": "本当によろしいですか?", - "on": "オン", - "nodeEditor": "ノードエディター", - "ipAdapter": "IPアダプター", - "controlAdapter": "コントロールアダプター", - "auto": "自動", - "openInNewTab": "新しいタブで開く", - "controlNet": "コントロールネット", - "statusProcessing": "処理中", - "linear": "リニア", - "imageFailedToLoad": "画像が読み込めません", - "imagePrompt": "画像プロンプト", - "modelManager": "モデルマネージャー", - "lightMode": "ライトモード", - "generate": "生成", - "learnMore": "もっと学ぶ", - "darkMode": "ダークモード", - "random": "ランダム", - "batch": "バッチマネージャー", - "advanced": "高度な設定" - }, - "gallery": { - "uploads": "アップロード", - "showUploads": "アップロードした画像を見る", - "galleryImageSize": "画像のサイズ", - "galleryImageResetSize": "サイズをリセット", - "gallerySettings": "ギャラリーの設定", - "maintainAspectRatio": "アスペクト比を維持", - "singleColumnLayout": "1カラムレイアウト", - "allImagesLoaded": "すべての画像を読み込む", - "loadMore": "さらに読み込む", - "noImagesInGallery": "ギャラリーに画像がありません", - "generations": "生成", - "showGenerations": "生成過程を見る", - "autoSwitchNewImages": "新しい画像に自動切替" - }, - "hotkeys": { - "keyboardShortcuts": "キーボードショートカット", - "appHotkeys": "アプリのホットキー", - "generalHotkeys": "Generalのホットキー", - "galleryHotkeys": "ギャラリーのホットキー", - "unifiedCanvasHotkeys": "Unified Canvasのホットキー", - "invoke": { - "desc": "画像を生成", - "title": "Invoke" - }, - "cancel": { - "title": "キャンセル", - "desc": "画像の生成をキャンセル" - }, - "focusPrompt": { - "desc": "プロンプトテキストボックスにフォーカス", - "title": "プロジェクトにフォーカス" - }, - "toggleOptions": { - "title": "オプションパネルのトグル", - "desc": "オプションパネルの開閉" - }, - "pinOptions": { - "title": "ピン", - "desc": "オプションパネルを固定" - }, - "toggleViewer": { - "title": "ビュワーのトグル", - "desc": "ビュワーを開閉" - }, - "toggleGallery": { - "title": "ギャラリーのトグル", - "desc": "ギャラリードロワーの開閉" - }, - "maximizeWorkSpace": { - "title": "作業領域の最大化", - "desc": "パネルを閉じて、作業領域を最大に" - }, - "changeTabs": { - "title": "タブの切替", - "desc": "他の作業領域と切替" - }, - "consoleToggle": { - "title": "コンソールのトグル", - "desc": "コンソールの開閉" - }, - "setPrompt": { - "title": "プロンプトをセット", - "desc": "現在の画像のプロンプトを使用" - }, - "setSeed": { - "title": "シード値をセット", - "desc": "現在の画像のシード値を使用" - }, - "setParameters": { - "title": "パラメータをセット", - "desc": "現在の画像のすべてのパラメータを使用" - }, - "restoreFaces": { - "title": "顔の修復", - "desc": "現在の画像を修復" - }, - "upscale": { - "title": "アップスケール", - "desc": "現在の画像をアップスケール" - }, - "showInfo": { - "title": "情報を見る", - "desc": "現在の画像のメタデータ情報を表示" - }, - "sendToImageToImage": { - "title": "Image To Imageに転送", - "desc": "現在の画像をImage to Imageに転送" - }, - "deleteImage": { - "title": "画像を削除", - "desc": "現在の画像を削除" - }, - "closePanels": { - "title": "パネルを閉じる", - "desc": "開いているパネルを閉じる" - }, - "previousImage": { - "title": "前の画像", - "desc": "ギャラリー内の1つ前の画像を表示" - }, - "nextImage": { - "title": "次の画像", - "desc": "ギャラリー内の1つ後の画像を表示" - }, - "toggleGalleryPin": { - "title": "ギャラリードロワーの固定", - "desc": "ギャラリーをUIにピン留め/解除" - }, - "increaseGalleryThumbSize": { - "title": "ギャラリーの画像を拡大", - "desc": "ギャラリーのサムネイル画像を拡大" - }, - "decreaseGalleryThumbSize": { - "title": "ギャラリーの画像サイズを縮小", - "desc": "ギャラリーのサムネイル画像を縮小" - }, - "selectBrush": { - "title": "ブラシを選択", - "desc": "ブラシを選択" - }, - "selectEraser": { - "title": "消しゴムを選択", - "desc": "消しゴムを選択" - }, - "decreaseBrushSize": { - "title": "ブラシサイズを縮小", - "desc": "ブラシ/消しゴムのサイズを縮小" - }, - "increaseBrushSize": { - "title": "ブラシサイズを拡大", - "desc": "ブラシ/消しゴムのサイズを拡大" - }, - "decreaseBrushOpacity": { - "title": "ブラシの不透明度を下げる", - "desc": "キャンバスブラシの不透明度を下げる" - }, - "increaseBrushOpacity": { - "title": "ブラシの不透明度を上げる", - "desc": "キャンバスブラシの不透明度を上げる" - }, - "fillBoundingBox": { - "title": "バウンディングボックスを塗りつぶす", - "desc": "ブラシの色でバウンディングボックス領域を塗りつぶす" - }, - "eraseBoundingBox": { - "title": "バウンディングボックスを消す", - "desc": "バウンディングボックス領域を消す" - }, - "colorPicker": { - "title": "カラーピッカーを選択", - "desc": "カラーピッカーを選択" - }, - "toggleLayer": { - "title": "レイヤーを切替", - "desc": "マスク/ベースレイヤの選択を切替" - }, - "clearMask": { - "title": "マスクを消す", - "desc": "マスク全体を消す" - }, - "hideMask": { - "title": "マスクを非表示", - "desc": "マスクを表示/非表示" - }, - "showHideBoundingBox": { - "title": "バウンディングボックスを表示/非表示", - "desc": "バウンディングボックスの表示/非表示を切替" - }, - "saveToGallery": { - "title": "ギャラリーに保存", - "desc": "現在のキャンバスをギャラリーに保存" - }, - "copyToClipboard": { - "title": "クリップボードにコピー", - "desc": "現在のキャンバスをクリップボードにコピー" - }, - "downloadImage": { - "title": "画像をダウンロード", - "desc": "現在の画像をダウンロード" - }, - "resetView": { - "title": "キャンバスをリセット", - "desc": "キャンバスをリセット" - } - }, - "modelManager": { - "modelManager": "モデルマネージャ", - "model": "モデル", - "allModels": "すべてのモデル", - "modelAdded": "モデルを追加", - "modelUpdated": "モデルをアップデート", - "addNew": "新規に追加", - "addNewModel": "新規モデル追加", - "addCheckpointModel": "Checkpointを追加 / Safetensorモデル", - "addDiffuserModel": "Diffusersを追加", - "addManually": "手動で追加", - "manual": "手動", - "name": "名前", - "nameValidationMsg": "モデルの名前を入力", - "description": "概要", - "descriptionValidationMsg": "モデルの概要を入力", - "config": "Config", - "configValidationMsg": "モデルの設定ファイルへのパス", - "modelLocation": "モデルの場所", - "modelLocationValidationMsg": "ディフューザーモデルのあるローカルフォルダーのパスを入力してください", - "repo_id": "Repo ID", - "repoIDValidationMsg": "モデルのリモートリポジトリ", - "vaeLocation": "VAEの場所", - "vaeLocationValidationMsg": "Vaeが配置されている場所へのパス", - "vaeRepoIDValidationMsg": "Vaeのリモートリポジトリ", - "width": "幅", - "widthValidationMsg": "モデルのデフォルトの幅", - "height": "高さ", - "heightValidationMsg": "モデルのデフォルトの高さ", - "addModel": "モデルを追加", - "updateModel": "モデルをアップデート", - "availableModels": "モデルを有効化", - "search": "検索", - "load": "Load", - "active": "active", - "notLoaded": "読み込まれていません", - "cached": "キャッシュ済", - "checkpointFolder": "Checkpointフォルダ", - "clearCheckpointFolder": "Checkpointフォルダ内を削除", - "findModels": "モデルを見つける", - "scanAgain": "再度スキャン", - "modelsFound": "モデルを発見", - "selectFolder": "フォルダを選択", - "selected": "選択済", - "selectAll": "すべて選択", - "deselectAll": "すべて選択解除", - "showExisting": "既存を表示", - "addSelected": "選択済を追加", - "modelExists": "モデルの有無", - "selectAndAdd": "以下のモデルを選択し、追加できます。", - "noModelsFound": "モデルが見つかりません。", - "delete": "削除", - "deleteModel": "モデルを削除", - "deleteConfig": "設定を削除", - "deleteMsg1": "InvokeAIからこのモデルを削除してよろしいですか?", - "deleteMsg2": "これは、モデルがInvokeAIルートフォルダ内にある場合、ディスクからモデルを削除します。カスタム保存場所を使用している場合、モデルはディスクから削除されません。", - "formMessageDiffusersModelLocation": "Diffusersモデルの場所", - "formMessageDiffusersModelLocationDesc": "最低でも1つは入力してください。", - "formMessageDiffusersVAELocation": "VAEの場所s", - "formMessageDiffusersVAELocationDesc": "指定しない場合、InvokeAIは上記のモデルの場所にあるVAEファイルを探します。", - "importModels": "モデルをインポート", - "custom": "カスタム", - "none": "なし", - "convert": "変換", - "statusConverting": "変換中", - "cannotUseSpaces": "スペースは使えません", - "convertToDiffusersHelpText6": "このモデルを変換しますか?", - "checkpointModels": "チェックポイント", - "settings": "設定", - "convertingModelBegin": "モデルを変換しています...", - "baseModel": "ベースモデル", - "modelDeleteFailed": "モデルの削除ができませんでした", - "convertToDiffusers": "ディフューザーに変換", - "alpha": "アルファ", - "diffusersModels": "ディフューザー", - "pathToCustomConfig": "カスタム設定のパス", - "noCustomLocationProvided": "カスタムロケーションが指定されていません", - "modelConverted": "モデル変換が完了しました", - "weightedSum": "重み付け総和", - "inverseSigmoid": "逆シグモイド", - "invokeAIFolder": "Invoke AI フォルダ", - "syncModelsDesc": "モデルがバックエンドと同期していない場合、このオプションを使用してモデルを更新できます。通常、モデル.yamlファイルを手動で更新したり、アプリケーションの起動後にモデルをInvokeAIルートフォルダに追加した場合に便利です。", - "noModels": "モデルが見つかりません", - "sigmoid": "シグモイド", - "merge": "マージ", - "modelMergeInterpAddDifferenceHelp": "このモードでは、モデル3がまずモデル2から減算されます。その結果得られたバージョンが、上記で設定されたアルファ率でモデル1とブレンドされます。", - "customConfig": "カスタム設定", - "predictionType": "予測タイプ(安定したディフュージョン 2.x モデルおよび一部の安定したディフュージョン 1.x モデル用)", - "selectModel": "モデルを選択", - "modelSyncFailed": "モデルの同期に失敗しました", - "quickAdd": "クイック追加", - "simpleModelDesc": "ローカルのDiffusersモデル、ローカルのチェックポイント/safetensorsモデル、HuggingFaceリポジトリのID、またはチェックポイント/ DiffusersモデルのURLへのパスを指定してください。", - "customSaveLocation": "カスタム保存場所", - "advanced": "高度な設定", - "modelDeleted": "モデルが削除されました", - "convertToDiffusersHelpText2": "このプロセスでは、モデルマネージャーのエントリーを同じモデルのディフューザーバージョンに置き換えます。", - "modelUpdateFailed": "モデル更新が失敗しました", - "useCustomConfig": "カスタム設定を使用する", - "convertToDiffusersHelpText5": "十分なディスク空き容量があることを確認してください。モデルは一般的に2GBから7GBのサイズがあります。", - "modelConversionFailed": "モデル変換が失敗しました", - "modelEntryDeleted": "モデルエントリーが削除されました", - "syncModels": "モデルを同期", - "mergedModelSaveLocation": "保存場所", - "closeAdvanced": "高度な設定を閉じる", - "modelType": "モデルタイプ", - "modelsMerged": "モデルマージ完了", - "modelsMergeFailed": "モデルマージ失敗", - "scanForModels": "モデルをスキャン", - "customConfigFileLocation": "カスタム設定ファイルの場所", - "convertToDiffusersHelpText1": "このモデルは 🧨 Diffusers フォーマットに変換されます。", - "modelsSynced": "モデルが同期されました", - "invokeRoot": "InvokeAIフォルダ", - "mergedModelCustomSaveLocation": "カスタムパス", - "mergeModels": "マージモデル", - "interpolationType": "補間タイプ", - "modelMergeHeaderHelp2": "マージできるのはDiffusersのみです。チェックポイントモデルをマージしたい場合は、まずDiffusersに変換してください。", - "convertToDiffusersSaveLocation": "保存場所", - "pickModelType": "モデルタイプを選択", - "sameFolder": "同じフォルダ", - "convertToDiffusersHelpText3": "チェックポイントファイルは、InvokeAIルートフォルダ内にある場合、ディスクから削除されます。カスタムロケーションにある場合は、削除されません。", - "loraModels": "LoRA", - "modelMergeAlphaHelp": "アルファはモデルのブレンド強度を制御します。アルファ値が低いと、2番目のモデルの影響が低くなります。", - "addDifference": "差分を追加", - "modelMergeHeaderHelp1": "あなたのニーズに適したブレンドを作成するために、異なるモデルを最大3つまでマージすることができます。", - "ignoreMismatch": "選択されたモデル間の不一致を無視する", - "convertToDiffusersHelpText4": "これは一回限りのプロセスです。コンピュータの仕様によっては、約30秒から60秒かかる可能性があります。", - "mergedModelName": "マージされたモデル名" - }, - "parameters": { - "images": "画像", - "steps": "ステップ数", - "width": "幅", - "height": "高さ", - "seed": "シード値", - "randomizeSeed": "ランダムなシード値", - "shuffle": "シャッフル", - "seedWeights": "シード値の重み", - "faceRestoration": "顔の修復", - "restoreFaces": "顔の修復", - "strength": "強度", - "upscaling": "アップスケーリング", - "upscale": "アップスケール", - "upscaleImage": "画像をアップスケール", - "scale": "Scale", - "otherOptions": "その他のオプション", - "scaleBeforeProcessing": "処理前のスケール", - "scaledWidth": "幅のスケール", - "scaledHeight": "高さのスケール", - "boundingBoxHeader": "バウンディングボックス", - "img2imgStrength": "Image To Imageの強度", - "sendTo": "転送", - "sendToImg2Img": "Image to Imageに転送", - "sendToUnifiedCanvas": "Unified Canvasに転送", - "downloadImage": "画像をダウンロード", - "openInViewer": "ビュワーを開く", - "closeViewer": "ビュワーを閉じる", - "usePrompt": "プロンプトを使用", - "useSeed": "シード値を使用", - "useAll": "すべてを使用", - "info": "情報", - "showOptionsPanel": "オプションパネルを表示" - }, - "settings": { - "models": "モデル", - "displayInProgress": "生成中の画像を表示する", - "saveSteps": "nステップごとに画像を保存", - "confirmOnDelete": "削除時に確認", - "displayHelpIcons": "ヘルプアイコンを表示", - "enableImageDebugging": "画像のデバッグを有効化", - "resetWebUI": "WebUIをリセット", - "resetWebUIDesc1": "WebUIのリセットは、画像と保存された設定のキャッシュをリセットするだけです。画像を削除するわけではありません。", - "resetWebUIDesc2": "もしギャラリーに画像が表示されないなど、何か問題が発生した場合はGitHubにissueを提出する前にリセットを試してください。", - "resetComplete": "WebUIはリセットされました。F5を押して再読み込みしてください。" - }, - "toast": { - "uploadFailed": "アップロード失敗", - "uploadFailedUnableToLoadDesc": "ファイルを読み込むことができません。", - "downloadImageStarted": "画像ダウンロード開始", - "imageCopied": "画像をコピー", - "imageLinkCopied": "画像のURLをコピー", - "imageNotLoaded": "画像を読み込めません。", - "imageNotLoadedDesc": "Image To Imageに転送する画像が見つかりません。", - "imageSavedToGallery": "画像をギャラリーに保存する", - "canvasMerged": "Canvas Merged", - "sentToImageToImage": "Image To Imageに転送", - "sentToUnifiedCanvas": "Unified Canvasに転送", - "parametersNotSetDesc": "この画像にはメタデータがありません。", - "parametersFailed": "パラメータ読み込みの不具合", - "parametersFailedDesc": "initイメージを読み込めません。", - "seedNotSetDesc": "この画像のシード値が見つかりません。", - "promptNotSetDesc": "この画像のプロンプトが見つかりませんでした。", - "upscalingFailed": "アップスケーリング失敗", - "faceRestoreFailed": "顔の修復に失敗", - "metadataLoadFailed": "メタデータの読み込みに失敗。" - }, - "tooltip": { - "feature": { - "prompt": "これはプロンプトフィールドです。プロンプトには生成オブジェクトや文法用語が含まれます。プロンプトにも重み(Tokenの重要度)を付けることができますが、CLIコマンドやパラメータは機能しません。", - "gallery": "ギャラリーは、出力先フォルダから生成物を表示します。設定はファイル内に保存され、コンテキストメニューからアクセスできます。.", - "seed": "シード値は、画像が形成される際の初期ノイズに影響します。以前の画像から既に存在するシードを使用することができます。ノイズしきい値は高いCFG値でのアーティファクトを軽減するために使用され、Perlinは生成中にPerlinノイズを追加します(0-10の範囲を試してみてください): どちらも出力にバリエーションを追加するのに役立ちます。", - "variations": "0.1から1.0の間の値で試し、付与されたシードに対する結果を変えてみてください。面白いバリュエーションは0.1〜0.3の間です。", - "upscale": "生成直後の画像をアップスケールするには、ESRGANを使用します。", - "faceCorrection": "GFPGANまたはCodeformerによる顔の修復: 画像内の顔を検出し不具合を修正するアルゴリズムです。高い値を設定すると画像がより変化し、より魅力的な顔になります。Codeformerは顔の修復を犠牲にして、元の画像をできる限り保持します。", - "imageToImage": "Image To Imageは任意の画像を初期値として読み込み、プロンプトとともに新しい画像を生成するために使用されます。値が高いほど結果画像はより変化します。0.0から1.0までの値が可能で、推奨範囲は0.25から0.75です。", - "boundingBox": "バウンディングボックスは、Text To ImageまたはImage To Imageの幅/高さの設定と同じです。ボックス内の領域のみが処理されます。", - "seamCorrection": "キャンバス上の生成された画像間に発生する可視可能な境界の処理を制御します。" - } - }, - "unifiedCanvas": { - "mask": "マスク", - "maskingOptions": "マスクのオプション", - "enableMask": "マスクを有効化", - "preserveMaskedArea": "マスク領域の保存", - "clearMask": "マスクを解除", - "brush": "ブラシ", - "eraser": "消しゴム", - "fillBoundingBox": "バウンディングボックスの塗りつぶし", - "eraseBoundingBox": "バウンディングボックスの消去", - "colorPicker": "カラーピッカー", - "brushOptions": "ブラシオプション", - "brushSize": "サイズ", - "saveToGallery": "ギャラリーに保存", - "copyToClipboard": "クリップボードにコピー", - "downloadAsImage": "画像としてダウンロード", - "undo": "取り消し", - "redo": "やり直し", - "clearCanvas": "キャンバスを片付ける", - "canvasSettings": "キャンバスの設定", - "showGrid": "グリッドを表示", - "darkenOutsideSelection": "外周を暗くする", - "autoSaveToGallery": "ギャラリーに自動保存", - "saveBoxRegionOnly": "ボックス領域のみ保存", - "showCanvasDebugInfo": "キャンバスのデバッグ情報を表示", - "clearCanvasHistory": "キャンバスの履歴を削除", - "clearHistory": "履歴を削除", - "clearCanvasHistoryMessage": "履歴を消去すると現在のキャンバスは残りますが、取り消しややり直しの履歴は不可逆的に消去されます。", - "clearCanvasHistoryConfirm": "履歴を削除しますか?", - "emptyTempImageFolder": "Empty Temp Image Folde", - "emptyFolder": "空のフォルダ", - "emptyTempImagesFolderMessage": "一時フォルダを空にすると、Unified Canvasも完全にリセットされます。これには、すべての取り消し/やり直しの履歴、ステージング領域の画像、およびキャンバスのベースレイヤーが含まれます。", - "emptyTempImagesFolderConfirm": "一時フォルダを削除しますか?", - "activeLayer": "Active Layer", - "canvasScale": "Canvas Scale", - "boundingBox": "バウンディングボックス", - "boundingBoxPosition": "バウンディングボックスの位置", - "canvasDimensions": "キャンバスの大きさ", - "canvasPosition": "キャンバスの位置", - "cursorPosition": "カーソルの位置", - "previous": "前", - "next": "次", - "accept": "同意", - "showHide": "表示/非表示", - "discardAll": "すべて破棄", - "snapToGrid": "グリッドにスナップ" - }, - "accessibility": { - "modelSelect": "モデルを選択", - "invokeProgressBar": "進捗バー", - "reset": "リセット", - "uploadImage": "画像をアップロード", - "previousImage": "前の画像", - "nextImage": "次の画像", - "useThisParameter": "このパラメータを使用する", - "copyMetadataJson": "メタデータをコピー(JSON)", - "zoomIn": "ズームイン", - "exitViewer": "ビューアーを終了", - "zoomOut": "ズームアウト", - "rotateCounterClockwise": "反時計回りに回転", - "rotateClockwise": "時計回りに回転", - "flipHorizontally": "水平方向に反転", - "flipVertically": "垂直方向に反転", - "toggleAutoscroll": "自動スクロールの切替", - "modifyConfig": "Modify Config", - "toggleLogViewer": "Log Viewerの切替", - "showOptionsPanel": "サイドパネルを表示", - "showGalleryPanel": "ギャラリーパネルを表示", - "menu": "メニュー", - "loadMore": "さらに読み込む" - }, - "controlnet": { - "resize": "リサイズ", - "showAdvanced": "高度な設定を表示", - "addT2IAdapter": "$t(common.t2iAdapter)を追加", - "importImageFromCanvas": "キャンバスから画像をインポート", - "lineartDescription": "画像を線画に変換", - "importMaskFromCanvas": "キャンバスからマスクをインポート", - "hideAdvanced": "高度な設定を非表示", - "ipAdapterModel": "アダプターモデル", - "resetControlImage": "コントロール画像をリセット", - "beginEndStepPercent": "開始 / 終了ステップパーセンテージ", - "duplicate": "複製", - "balanced": "バランス", - "prompt": "プロンプト", - "depthMidasDescription": "Midasを使用して深度マップを生成", - "openPoseDescription": "Openposeを使用してポーズを推定", - "control": "コントロール", - "resizeMode": "リサイズモード", - "weight": "重み", - "selectModel": "モデルを選択", - "crop": "切り抜き", - "w": "幅", - "processor": "プロセッサー", - "addControlNet": "$t(common.controlNet)を追加", - "none": "なし", - "incompatibleBaseModel": "互換性のないベースモデル:", - "enableControlnet": "コントロールネットを有効化", - "detectResolution": "検出解像度", - "controlNetT2IMutexDesc": "$t(common.controlNet)と$t(common.t2iAdapter)の同時使用は現在サポートされていません。", - "pidiDescription": "PIDI画像処理", - "controlMode": "コントロールモード", - "fill": "塗りつぶし", - "cannyDescription": "Canny 境界検出", - "addIPAdapter": "$t(common.ipAdapter)を追加", - "colorMapDescription": "画像からカラーマップを生成", - "lineartAnimeDescription": "アニメスタイルの線画処理", - "imageResolution": "画像解像度", - "megaControl": "メガコントロール", - "lowThreshold": "最低閾値", - "autoConfigure": "プロセッサーを自動設定", - "highThreshold": "最大閾値", - "saveControlImage": "コントロール画像を保存", - "toggleControlNet": "このコントロールネットを切り替え", - "delete": "削除", - "controlAdapter_other": "コントロールアダプター", - "colorMapTileSize": "タイルサイズ", - "ipAdapterImageFallback": "IP Adapterの画像が選択されていません", - "mediapipeFaceDescription": "Mediapipeを使用して顔を検出", - "depthZoeDescription": "Zoeを使用して深度マップを生成", - "setControlImageDimensions": "コントロール画像のサイズを幅と高さにセット", - "resetIPAdapterImage": "IP Adapterの画像をリセット", - "handAndFace": "手と顔", - "enableIPAdapter": "IP Adapterを有効化", - "amult": "a_mult", - "contentShuffleDescription": "画像の内容をシャッフルします", - "bgth": "bg_th", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) が有効化され、$t(common.t2iAdapter)s が無効化されました", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) が有効化され、$t(common.controlNet)s が無効化されました", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "minConfidence": "最小確信度", - "colorMap": "Color", - "noneDescription": "処理は行われていません", - "canny": "Canny", - "hedDescription": "階層的エッジ検出", - "maxFaces": "顔の最大数" - }, - "metadata": { - "seamless": "シームレス", - "Threshold": "ノイズ閾値", - "seed": "シード", - "width": "幅", - "workflow": "ワークフロー", - "steps": "ステップ", - "scheduler": "スケジューラー", - "positivePrompt": "ポジティブプロンプト", - "strength": "Image to Image 強度", - "perlin": "パーリンノイズ", - "recallParameters": "パラメータを呼び出す" - }, - "queue": { - "queueEmpty": "キューが空です", - "pauseSucceeded": "処理が一時停止されました", - "queueFront": "キューの先頭へ追加", - "queueBack": "キューに追加", - "queueCountPrediction": "{{predicted}}をキューに追加", - "queuedCount": "保留中 {{pending}}", - "pause": "一時停止", - "queue": "キュー", - "pauseTooltip": "処理を一時停止", - "cancel": "キャンセル", - "queueTotal": "合計 {{total}}", - "resumeSucceeded": "処理が再開されました", - "resumeTooltip": "処理を再開", - "resume": "再会", - "status": "ステータス", - "pruneSucceeded": "キューから完了アイテム{{item_count}}件を削除しました", - "cancelTooltip": "現在のアイテムをキャンセル", - "in_progress": "進行中", - "notReady": "キューに追加できません", - "batchFailedToQueue": "バッチをキューに追加できませんでした", - "completed": "完了", - "batchValues": "バッチの値", - "cancelFailed": "アイテムのキャンセルに問題があります", - "batchQueued": "バッチをキューに追加しました", - "pauseFailed": "処理の一時停止に問題があります", - "clearFailed": "キューのクリアに問題があります", - "front": "先頭", - "clearSucceeded": "キューがクリアされました", - "pruneTooltip": "{{item_count}} の完了アイテムを削除", - "cancelSucceeded": "アイテムがキャンセルされました", - "batchQueuedDesc_other": "{{count}} セッションをキューの{{direction}}に追加しました", - "graphQueued": "グラフをキューに追加しました", - "batch": "バッチ", - "clearQueueAlertDialog": "キューをクリアすると、処理中のアイテムは直ちにキャンセルされ、キューは完全にクリアされます。", - "pending": "保留中", - "resumeFailed": "処理の再開に問題があります", - "clear": "クリア", - "total": "合計", - "canceled": "キャンセル", - "pruneFailed": "キューの削除に問題があります", - "cancelBatchSucceeded": "バッチがキャンセルされました", - "clearTooltip": "全てのアイテムをキャンセルしてクリア", - "current": "現在", - "failed": "失敗", - "cancelItem": "項目をキャンセル", - "next": "次", - "cancelBatch": "バッチをキャンセル", - "session": "セッション", - "enqueueing": "バッチをキューに追加", - "queueMaxExceeded": "{{max_queue_size}} の最大値を超えたため、{{skip}} をスキップします", - "cancelBatchFailed": "バッチのキャンセルに問題があります", - "clearQueueAlertDialog2": "キューをクリアしてもよろしいですか?", - "item": "アイテム", - "graphFailedToQueue": "グラフをキューに追加できませんでした" - }, - "models": { - "noMatchingModels": "一致するモデルがありません", - "loading": "読み込み中", - "noMatchingLoRAs": "一致するLoRAがありません", - "noLoRAsAvailable": "使用可能なLoRAがありません", - "noModelsAvailable": "使用可能なモデルがありません", - "selectModel": "モデルを選択してください", - "selectLoRA": "LoRAを選択してください" - }, - "nodes": { - "addNode": "ノードを追加", - "boardField": "ボード", - "boolean": "ブーリアン", - "boardFieldDescription": "ギャラリーボード", - "addNodeToolTip": "ノードを追加 (Shift+A, Space)", - "booleanPolymorphicDescription": "ブーリアンのコレクション。", - "inputField": "入力フィールド", - "latentsFieldDescription": "潜在空間はノード間で伝達できます。", - "floatCollectionDescription": "浮動小数点のコレクション。", - "missingTemplate": "テンプレートが見つかりません", - "ipAdapterPolymorphicDescription": "IP-Adaptersのコレクション。", - "latentsPolymorphicDescription": "潜在空間はノード間で伝達できます。", - "colorFieldDescription": "RGBAカラー。", - "ipAdapterCollection": "IP-Adapterコレクション", - "conditioningCollection": "条件付きコレクション", - "hideGraphNodes": "グラフオーバーレイを非表示", - "loadWorkflow": "ワークフローを読み込み", - "integerPolymorphicDescription": "整数のコレクション。", - "hideLegendNodes": "フィールドタイプの凡例を非表示", - "float": "浮動小数点", - "booleanCollectionDescription": "ブーリアンのコレクション。", - "integer": "整数", - "colorField": "カラー", - "nodeTemplate": "ノードテンプレート", - "integerDescription": "整数は小数点を持たない数値です。", - "imagePolymorphicDescription": "画像のコレクション。", - "doesNotExist": "存在しません", - "ipAdapterCollectionDescription": "IP-Adaptersのコレクション。", - "inputMayOnlyHaveOneConnection": "入力は1つの接続しか持つことができません", - "nodeOutputs": "ノード出力", - "currentImageDescription": "ノードエディタ内の現在の画像を表示", - "downloadWorkflow": "ワークフローのJSONをダウンロード", - "integerCollection": "整数コレクション", - "collectionItem": "コレクションアイテム", - "fieldTypesMustMatch": "フィールドタイプが一致している必要があります", - "edge": "輪郭", - "inputNode": "入力ノード", - "imageField": "画像", - "animatedEdgesHelp": "選択したエッジおよび選択したノードに接続されたエッジをアニメーション化します", - "cannotDuplicateConnection": "重複した接続は作れません", - "noWorkflow": "ワークフローがありません", - "integerCollectionDescription": "整数のコレクション。", - "colorPolymorphicDescription": "カラーのコレクション。", - "missingCanvaInitImage": "キャンバスの初期画像が見つかりません", - "clipFieldDescription": "トークナイザーとテキストエンコーダーサブモデル。", - "fullyContainNodesHelp": "ノードは選択ボックス内に完全に存在する必要があります", - "clipField": "クリップ", - "nodeType": "ノードタイプ", - "executionStateInProgress": "処理中", - "executionStateError": "エラー", - "ipAdapterModel": "IP-Adapterモデル", - "ipAdapterDescription": "イメージプロンプトアダプター(IP-Adapter)。", - "missingCanvaInitMaskImages": "キャンバスの初期画像およびマスクが見つかりません", - "hideMinimapnodes": "ミニマップを非表示", - "fitViewportNodes": "全体を表示", - "executionStateCompleted": "完了", - "node": "ノード", - "currentImage": "現在の画像", - "controlField": "コントロール", - "booleanDescription": "ブーリアンはtrueかfalseです。", - "collection": "コレクション", - "ipAdapterModelDescription": "IP-Adapterモデルフィールド", - "cannotConnectInputToInput": "入力から入力には接続できません", - "invalidOutputSchema": "無効な出力スキーマ", - "floatDescription": "浮動小数点は、小数点を持つ数値です。", - "floatPolymorphicDescription": "浮動小数点のコレクション。", - "floatCollection": "浮動小数点コレクション", - "latentsField": "潜在空間", - "cannotConnectOutputToOutput": "出力から出力には接続できません", - "booleanCollection": "ブーリアンコレクション", - "cannotConnectToSelf": "自身のノードには接続できません", - "inputFields": "入力フィールド(複数)", - "colorCodeEdges": "カラー-Code Edges", - "imageCollectionDescription": "画像のコレクション。", - "loadingNodes": "ノードを読み込み中...", - "imageCollection": "画像コレクション" - }, - "boards": { - "autoAddBoard": "自動追加するボード", - "move": "移動", - "menuItemAutoAdd": "このボードに自動追加", - "myBoard": "マイボード", - "searchBoard": "ボードを検索...", - "noMatching": "一致するボードがありません", - "selectBoard": "ボードを選択", - "cancel": "キャンセル", - "addBoard": "ボードを追加", - "uncategorized": "未分類", - "downloadBoard": "ボードをダウンロード", - "changeBoard": "ボードを変更", - "loading": "ロード中...", - "topMessage": "このボードには、以下の機能で使用されている画像が含まれています:", - "bottomMessage": "このボードおよび画像を削除すると、現在これらを利用している機能はリセットされます。", - "clearSearch": "検索をクリア" - }, - "embedding": { - "noMatchingEmbedding": "一致する埋め込みがありません", - "addEmbedding": "埋め込みを追加", - "incompatibleModel": "互換性のないベースモデル:" - }, - "invocationCache": { - "invocationCache": "呼び出しキャッシュ", - "clearSucceeded": "呼び出しキャッシュをクリアしました", - "clearFailed": "呼び出しキャッシュのクリアに問題があります", - "enable": "有効", - "clear": "クリア", - "maxCacheSize": "最大キャッシュサイズ", - "cacheSize": "キャッシュサイズ" - } -} diff --git a/invokeai/frontend/web/dist/locales/ko.json b/invokeai/frontend/web/dist/locales/ko.json deleted file mode 100644 index 8baab54ac9..0000000000 --- a/invokeai/frontend/web/dist/locales/ko.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "common": { - "languagePickerLabel": "언어 설정", - "reportBugLabel": "버그 리포트", - "githubLabel": "Github", - "settingsLabel": "설정", - "langArabic": "العربية", - "langEnglish": "English", - "langDutch": "Nederlands", - "unifiedCanvas": "통합 캔버스", - "langFrench": "Français", - "langGerman": "Deutsch", - "langItalian": "Italiano", - "langJapanese": "日本語", - "langBrPortuguese": "Português do Brasil", - "langRussian": "Русский", - "langSpanish": "Español", - "nodes": "노드", - "nodesDesc": "이미지 생성을 위한 노드 기반 시스템은 현재 개발 중입니다. 이 놀라운 기능에 대한 업데이트를 계속 지켜봐 주세요.", - "postProcessing": "후처리", - "postProcessDesc2": "보다 진보된 후처리 작업을 위한 전용 UI가 곧 출시될 예정입니다.", - "postProcessDesc3": "Invoke AI CLI는 Embiggen을 비롯한 다양한 기능을 제공합니다.", - "training": "학습", - "trainingDesc1": "Textual Inversion과 Dreambooth를 이용해 Web UI에서 나만의 embedding 및 checkpoint를 교육하기 위한 전용 워크플로우입니다.", - "trainingDesc2": "InvokeAI는 이미 메인 스크립트를 사용한 Textual Inversion를 이용한 Custom embedding 학습을 지원하고 있습니다.", - "upload": "업로드", - "close": "닫기", - "load": "로드", - "back": "뒤로 가기", - "statusConnected": "연결됨", - "statusDisconnected": "연결 끊김", - "statusError": "에러", - "statusPreparing": "준비 중", - "langSimplifiedChinese": "简体中文", - "statusGenerating": "생성 중", - "statusGeneratingTextToImage": "텍스트->이미지 생성", - "statusGeneratingInpainting": "인페인팅 생성", - "statusGeneratingOutpainting": "아웃페인팅 생성", - "statusGenerationComplete": "생성 완료", - "statusRestoringFaces": "얼굴 복원", - "statusRestoringFacesGFPGAN": "얼굴 복원 (GFPGAN)", - "statusRestoringFacesCodeFormer": "얼굴 복원 (CodeFormer)", - "statusUpscaling": "업스케일링", - "statusUpscalingESRGAN": "업스케일링 (ESRGAN)", - "statusLoadingModel": "모델 로딩중", - "statusModelChanged": "모델 변경됨", - "statusConvertingModel": "모델 컨버팅", - "statusModelConverted": "모델 컨버팅됨", - "statusMergedModels": "모델 병합됨", - "statusMergingModels": "모델 병합중", - "hotkeysLabel": "단축키 설정", - "img2img": "이미지->이미지", - "discordLabel": "Discord", - "langPolish": "Polski", - "postProcessDesc1": "Invoke AI는 다양한 후처리 기능을 제공합니다. 이미지 업스케일링 및 얼굴 복원은 이미 Web UI에서 사용할 수 있습니다. 텍스트->이미지 또는 이미지->이미지 탭의 고급 옵션 메뉴에서 사용할 수 있습니다. 또한 현재 이미지 표시 위, 또는 뷰어에서 액션 버튼을 사용하여 이미지를 직접 처리할 수도 있습니다.", - "langUkranian": "Украї́нська", - "statusProcessingCanceled": "처리 취소됨", - "statusGeneratingImageToImage": "이미지->이미지 생성", - "statusProcessingComplete": "처리 완료", - "statusIterationComplete": "반복(Iteration) 완료", - "statusSavingImage": "이미지 저장" - }, - "gallery": { - "showGenerations": "생성된 이미지 보기", - "generations": "생성된 이미지", - "uploads": "업로드된 이미지", - "showUploads": "업로드된 이미지 보기", - "galleryImageSize": "이미지 크기", - "galleryImageResetSize": "사이즈 리셋", - "gallerySettings": "갤러리 설정", - "maintainAspectRatio": "종횡비 유지" - }, - "unifiedCanvas": { - "betaPreserveMasked": "마스크 레이어 유지" - } -} diff --git a/invokeai/frontend/web/dist/locales/mn.json b/invokeai/frontend/web/dist/locales/mn.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/invokeai/frontend/web/dist/locales/mn.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/invokeai/frontend/web/dist/locales/nl.json b/invokeai/frontend/web/dist/locales/nl.json deleted file mode 100644 index 2d50a602d1..0000000000 --- a/invokeai/frontend/web/dist/locales/nl.json +++ /dev/null @@ -1,1509 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Sneltoetsen", - "languagePickerLabel": "Taal", - "reportBugLabel": "Meld bug", - "settingsLabel": "Instellingen", - "img2img": "Afbeelding naar afbeelding", - "unifiedCanvas": "Centraal canvas", - "nodes": "Werkstroom-editor", - "langDutch": "Nederlands", - "nodesDesc": "Een op knooppunten gebaseerd systeem voor het genereren van afbeeldingen is momenteel in ontwikkeling. Blijf op de hoogte voor nieuws over deze verbluffende functie.", - "postProcessing": "Naverwerking", - "postProcessDesc1": "Invoke AI biedt een breed scala aan naverwerkingsfuncties. Afbeeldingsopschaling en Gezichtsherstel zijn al beschikbaar in de web-UI. Je kunt ze openen via het menu Uitgebreide opties in de tabbladen Tekst naar afbeelding en Afbeelding naar afbeelding. Je kunt een afbeelding ook direct verwerken via de afbeeldingsactieknoppen boven de weergave van de huidigde afbeelding of in de Viewer.", - "postProcessDesc2": "Een individuele gebruikersinterface voor uitgebreidere naverwerkingsworkflows.", - "postProcessDesc3": "De opdrachtregelinterface van InvokeAI biedt diverse andere functies, waaronder Embiggen.", - "trainingDesc1": "Een individuele workflow in de webinterface voor het trainen van je eigen embeddings en checkpoints via Textual Inversion en Dreambooth.", - "trainingDesc2": "InvokeAI ondersteunt al het trainen van eigen embeddings via Textual Inversion via het hoofdscript.", - "upload": "Upload", - "close": "Sluit", - "load": "Laad", - "statusConnected": "Verbonden", - "statusDisconnected": "Niet verbonden", - "statusError": "Fout", - "statusPreparing": "Voorbereiden", - "statusProcessingCanceled": "Verwerking geannuleerd", - "statusProcessingComplete": "Verwerking voltooid", - "statusGenerating": "Genereren", - "statusGeneratingTextToImage": "Genereren van tekst naar afbeelding", - "statusGeneratingImageToImage": "Genereren van afbeelding naar afbeelding", - "statusGeneratingInpainting": "Genereren van Inpainting", - "statusGeneratingOutpainting": "Genereren van Outpainting", - "statusGenerationComplete": "Genereren voltooid", - "statusIterationComplete": "Iteratie voltooid", - "statusSavingImage": "Afbeelding bewaren", - "statusRestoringFaces": "Gezichten herstellen", - "statusRestoringFacesGFPGAN": "Gezichten herstellen (GFPGAN)", - "statusRestoringFacesCodeFormer": "Gezichten herstellen (CodeFormer)", - "statusUpscaling": "Opschaling", - "statusUpscalingESRGAN": "Opschaling (ESRGAN)", - "statusLoadingModel": "Laden van model", - "statusModelChanged": "Model gewijzigd", - "githubLabel": "Github", - "discordLabel": "Discord", - "langArabic": "Arabisch", - "langEnglish": "Engels", - "langFrench": "Frans", - "langGerman": "Duits", - "langItalian": "Italiaans", - "langJapanese": "Japans", - "langPolish": "Pools", - "langBrPortuguese": "Portugees (Brazilië)", - "langRussian": "Russisch", - "langSimplifiedChinese": "Chinees (vereenvoudigd)", - "langUkranian": "Oekraïens", - "langSpanish": "Spaans", - "training": "Training", - "back": "Terug", - "statusConvertingModel": "Omzetten van model", - "statusModelConverted": "Model omgezet", - "statusMergingModels": "Samenvoegen van modellen", - "statusMergedModels": "Modellen samengevoegd", - "cancel": "Annuleer", - "accept": "Akkoord", - "langPortuguese": "Portugees", - "loading": "Bezig met laden", - "loadingInvokeAI": "Bezig met laden van Invoke AI", - "langHebrew": "עברית", - "langKorean": "한국어", - "txt2img": "Tekst naar afbeelding", - "postprocessing": "Naverwerking", - "dontAskMeAgain": "Vraag niet opnieuw", - "imagePrompt": "Afbeeldingsprompt", - "random": "Willekeurig", - "generate": "Genereer", - "openInNewTab": "Open in nieuw tabblad", - "areYouSure": "Weet je het zeker?", - "linear": "Lineair", - "batch": "Seriebeheer", - "modelManager": "Modelbeheer", - "darkMode": "Donkere modus", - "lightMode": "Lichte modus", - "communityLabel": "Gemeenschap", - "t2iAdapter": "T2I-adapter", - "on": "Aan", - "nodeEditor": "Knooppunteditor", - "ipAdapter": "IP-adapter", - "controlAdapter": "Control-adapter", - "auto": "Autom.", - "controlNet": "ControlNet", - "statusProcessing": "Bezig met verwerken", - "imageFailedToLoad": "Kan afbeelding niet laden", - "learnMore": "Meer informatie", - "advanced": "Uitgebreid" - }, - "gallery": { - "generations": "Gegenereerde afbeeldingen", - "showGenerations": "Toon gegenereerde afbeeldingen", - "uploads": "Uploads", - "showUploads": "Toon uploads", - "galleryImageSize": "Afbeeldingsgrootte", - "galleryImageResetSize": "Herstel grootte", - "gallerySettings": "Instellingen galerij", - "maintainAspectRatio": "Behoud beeldverhoiding", - "autoSwitchNewImages": "Wissel autom. naar nieuwe afbeeldingen", - "singleColumnLayout": "Eenkolomsindeling", - "allImagesLoaded": "Alle afbeeldingen geladen", - "loadMore": "Laad meer", - "noImagesInGallery": "Geen afbeeldingen om te tonen", - "deleteImage": "Verwijder afbeelding", - "deleteImageBin": "Verwijderde afbeeldingen worden naar de prullenbak van je besturingssysteem gestuurd.", - "deleteImagePermanent": "Verwijderde afbeeldingen kunnen niet worden hersteld.", - "assets": "Eigen onderdelen", - "images": "Afbeeldingen", - "autoAssignBoardOnClick": "Ken automatisch bord toe bij klikken", - "featuresWillReset": "Als je deze afbeelding verwijdert, dan worden deze functies onmiddellijk teruggezet.", - "loading": "Bezig met laden", - "unableToLoad": "Kan galerij niet laden", - "preparingDownload": "Bezig met voorbereiden van download", - "preparingDownloadFailed": "Fout bij voorbereiden van download", - "downloadSelection": "Download selectie", - "currentlyInUse": "Deze afbeelding is momenteel in gebruik door de volgende functies:", - "copy": "Kopieer", - "download": "Download", - "setCurrentImage": "Stel in als huidige afbeelding" - }, - "hotkeys": { - "keyboardShortcuts": "Sneltoetsen", - "appHotkeys": "Appsneltoetsen", - "generalHotkeys": "Algemene sneltoetsen", - "galleryHotkeys": "Sneltoetsen galerij", - "unifiedCanvasHotkeys": "Sneltoetsen centraal canvas", - "invoke": { - "title": "Genereer", - "desc": "Genereert een afbeelding" - }, - "cancel": { - "title": "Annuleer", - "desc": "Annuleert het genereren van een afbeelding" - }, - "focusPrompt": { - "title": "Focus op invoer", - "desc": "Legt de focus op het invoertekstvak" - }, - "toggleOptions": { - "title": "Open/sluit Opties", - "desc": "Opent of sluit het deelscherm Opties" - }, - "pinOptions": { - "title": "Zet Opties vast", - "desc": "Zet het deelscherm Opties vast" - }, - "toggleViewer": { - "title": "Zet Viewer vast", - "desc": "Opent of sluit Afbeeldingsviewer" - }, - "toggleGallery": { - "title": "Zet Galerij vast", - "desc": "Opent of sluit het deelscherm Galerij" - }, - "maximizeWorkSpace": { - "title": "Maximaliseer werkgebied", - "desc": "Sluit deelschermen en maximaliseer het werkgebied" - }, - "changeTabs": { - "title": "Wissel van tabblad", - "desc": "Wissel naar een ander werkgebied" - }, - "consoleToggle": { - "title": "Open/sluit console", - "desc": "Opent of sluit de console" - }, - "setPrompt": { - "title": "Stel invoertekst in", - "desc": "Gebruikt de invoertekst van de huidige afbeelding" - }, - "setSeed": { - "title": "Stel seed in", - "desc": "Gebruikt de seed van de huidige afbeelding" - }, - "setParameters": { - "title": "Stel parameters in", - "desc": "Gebruikt alle parameters van de huidige afbeelding" - }, - "restoreFaces": { - "title": "Herstel gezichten", - "desc": "Herstelt de huidige afbeelding" - }, - "upscale": { - "title": "Schaal op", - "desc": "Schaalt de huidige afbeelding op" - }, - "showInfo": { - "title": "Toon info", - "desc": "Toont de metagegevens van de huidige afbeelding" - }, - "sendToImageToImage": { - "title": "Stuur naar Afbeelding naar afbeelding", - "desc": "Stuurt de huidige afbeelding naar Afbeelding naar afbeelding" - }, - "deleteImage": { - "title": "Verwijder afbeelding", - "desc": "Verwijdert de huidige afbeelding" - }, - "closePanels": { - "title": "Sluit deelschermen", - "desc": "Sluit geopende deelschermen" - }, - "previousImage": { - "title": "Vorige afbeelding", - "desc": "Toont de vorige afbeelding in de galerij" - }, - "nextImage": { - "title": "Volgende afbeelding", - "desc": "Toont de volgende afbeelding in de galerij" - }, - "toggleGalleryPin": { - "title": "Zet galerij vast/los", - "desc": "Zet de galerij vast of los aan de gebruikersinterface" - }, - "increaseGalleryThumbSize": { - "title": "Vergroot afbeeldingsgrootte galerij", - "desc": "Vergroot de grootte van de galerijminiaturen" - }, - "decreaseGalleryThumbSize": { - "title": "Verklein afbeeldingsgrootte galerij", - "desc": "Verkleint de grootte van de galerijminiaturen" - }, - "selectBrush": { - "title": "Kies penseel", - "desc": "Kiest de penseel op het canvas" - }, - "selectEraser": { - "title": "Kies gum", - "desc": "Kiest de gum op het canvas" - }, - "decreaseBrushSize": { - "title": "Verklein penseelgrootte", - "desc": "Verkleint de grootte van het penseel/gum op het canvas" - }, - "increaseBrushSize": { - "title": "Vergroot penseelgrootte", - "desc": "Vergroot de grootte van het penseel/gum op het canvas" - }, - "decreaseBrushOpacity": { - "title": "Verlaag ondoorzichtigheid penseel", - "desc": "Verlaagt de ondoorzichtigheid van de penseel op het canvas" - }, - "increaseBrushOpacity": { - "title": "Verhoog ondoorzichtigheid penseel", - "desc": "Verhoogt de ondoorzichtigheid van de penseel op het canvas" - }, - "moveTool": { - "title": "Verplaats canvas", - "desc": "Maakt canvasnavigatie mogelijk" - }, - "fillBoundingBox": { - "title": "Vul tekenvak", - "desc": "Vult het tekenvak met de penseelkleur" - }, - "eraseBoundingBox": { - "title": "Wis tekenvak", - "desc": "Wist het gebied van het tekenvak" - }, - "colorPicker": { - "title": "Kleurkiezer", - "desc": "Opent de kleurkiezer op het canvas" - }, - "toggleSnap": { - "title": "Zet uitlijnen aan/uit", - "desc": "Zet uitlijnen op raster aan/uit" - }, - "quickToggleMove": { - "title": "Verplaats canvas even", - "desc": "Verplaats kortstondig het canvas" - }, - "toggleLayer": { - "title": "Zet laag aan/uit", - "desc": "Wisselt tussen de masker- en basislaag" - }, - "clearMask": { - "title": "Wis masker", - "desc": "Wist het volledig masker" - }, - "hideMask": { - "title": "Toon/verberg masker", - "desc": "Toont of verbegt het masker" - }, - "showHideBoundingBox": { - "title": "Toon/verberg tekenvak", - "desc": "Wisselt de zichtbaarheid van het tekenvak" - }, - "mergeVisible": { - "title": "Voeg lagen samen", - "desc": "Voegt alle zichtbare lagen op het canvas samen" - }, - "saveToGallery": { - "title": "Bewaar in galerij", - "desc": "Bewaart het huidige canvas in de galerij" - }, - "copyToClipboard": { - "title": "Kopieer naar klembord", - "desc": "Kopieert het huidige canvas op het klembord" - }, - "downloadImage": { - "title": "Download afbeelding", - "desc": "Downloadt het huidige canvas" - }, - "undoStroke": { - "title": "Maak streek ongedaan", - "desc": "Maakt een penseelstreek ongedaan" - }, - "redoStroke": { - "title": "Herhaal streek", - "desc": "Voert een ongedaan gemaakte penseelstreek opnieuw uit" - }, - "resetView": { - "title": "Herstel weergave", - "desc": "Herstelt de canvasweergave" - }, - "previousStagingImage": { - "title": "Vorige sessie-afbeelding", - "desc": "Bladert terug naar de vorige afbeelding in het sessiegebied" - }, - "nextStagingImage": { - "title": "Volgende sessie-afbeelding", - "desc": "Bladert vooruit naar de volgende afbeelding in het sessiegebied" - }, - "acceptStagingImage": { - "title": "Accepteer sessie-afbeelding", - "desc": "Accepteert de huidige sessie-afbeelding" - }, - "addNodes": { - "title": "Voeg knooppunten toe", - "desc": "Opent het menu Voeg knooppunt toe" - }, - "nodesHotkeys": "Sneltoetsen knooppunten" - }, - "modelManager": { - "modelManager": "Modelonderhoud", - "model": "Model", - "modelAdded": "Model toegevoegd", - "modelUpdated": "Model bijgewerkt", - "modelEntryDeleted": "Modelregel verwijderd", - "cannotUseSpaces": "Spaties zijn niet toegestaan", - "addNew": "Voeg nieuwe toe", - "addNewModel": "Voeg nieuw model toe", - "addManually": "Voeg handmatig toe", - "manual": "Handmatig", - "name": "Naam", - "nameValidationMsg": "Geef een naam voor je model", - "description": "Beschrijving", - "descriptionValidationMsg": "Voeg een beschrijving toe voor je model", - "config": "Configuratie", - "configValidationMsg": "Pad naar het configuratiebestand van je model.", - "modelLocation": "Locatie model", - "modelLocationValidationMsg": "Geef het pad naar een lokale map waar je Diffusers-model wordt bewaard", - "vaeLocation": "Locatie VAE", - "vaeLocationValidationMsg": "Pad naar waar je VAE zich bevindt.", - "width": "Breedte", - "widthValidationMsg": "Standaardbreedte van je model.", - "height": "Hoogte", - "heightValidationMsg": "Standaardhoogte van je model.", - "addModel": "Voeg model toe", - "updateModel": "Werk model bij", - "availableModels": "Beschikbare modellen", - "search": "Zoek", - "load": "Laad", - "active": "actief", - "notLoaded": "niet geladen", - "cached": "gecachet", - "checkpointFolder": "Checkpointmap", - "clearCheckpointFolder": "Wis checkpointmap", - "findModels": "Zoek modellen", - "scanAgain": "Kijk opnieuw", - "modelsFound": "Gevonden modellen", - "selectFolder": "Kies map", - "selected": "Gekozen", - "selectAll": "Kies alles", - "deselectAll": "Kies niets", - "showExisting": "Toon bestaande", - "addSelected": "Voeg gekozen toe", - "modelExists": "Model bestaat", - "selectAndAdd": "Kies en voeg de hieronder opgesomde modellen toe", - "noModelsFound": "Geen modellen gevonden", - "delete": "Verwijder", - "deleteModel": "Verwijder model", - "deleteConfig": "Verwijder configuratie", - "deleteMsg1": "Weet je zeker dat je dit model wilt verwijderen uit InvokeAI?", - "deleteMsg2": "Hiermee ZAL het model van schijf worden verwijderd als het zich bevindt in de beginmap van InvokeAI. Als je het model vanaf een eigen locatie gebruikt, dan ZAL het model NIET van schijf worden verwijderd.", - "formMessageDiffusersVAELocationDesc": "Indien niet opgegeven, dan zal InvokeAI kijken naar het VAE-bestand in de hierboven gegeven modellocatie.", - "repoIDValidationMsg": "Online repository van je model", - "formMessageDiffusersModelLocation": "Locatie Diffusers-model", - "convertToDiffusersHelpText3": "Je checkpoint-bestand op de schijf ZAL worden verwijderd als het zich in de beginmap van InvokeAI bevindt. Het ZAL NIET worden verwijderd als het zich in een andere locatie bevindt.", - "convertToDiffusersHelpText6": "Wil je dit model omzetten?", - "allModels": "Alle modellen", - "checkpointModels": "Checkpoints", - "safetensorModels": "SafeTensors", - "addCheckpointModel": "Voeg Checkpoint-/SafeTensor-model toe", - "addDiffuserModel": "Voeg Diffusers-model toe", - "diffusersModels": "Diffusers", - "repo_id": "Repo-id", - "vaeRepoID": "Repo-id VAE", - "vaeRepoIDValidationMsg": "Online repository van je VAE", - "formMessageDiffusersModelLocationDesc": "Voer er minimaal een in.", - "formMessageDiffusersVAELocation": "Locatie VAE", - "convert": "Omzetten", - "convertToDiffusers": "Omzetten naar Diffusers", - "convertToDiffusersHelpText1": "Dit model wordt omgezet naar de🧨 Diffusers-indeling.", - "convertToDiffusersHelpText2": "Dit proces vervangt het onderdeel in Modelonderhoud met de Diffusers-versie van hetzelfde model.", - "convertToDiffusersHelpText4": "Dit is een eenmalig proces. Dit neemt ongeveer 30 tot 60 sec. in beslag, afhankelijk van de specificaties van je computer.", - "convertToDiffusersHelpText5": "Zorg ervoor dat je genoeg schijfruimte hebt. Modellen nemen gewoonlijk ongeveer 2 tot 7 GB ruimte in beslag.", - "convertToDiffusersSaveLocation": "Bewaarlocatie", - "v1": "v1", - "inpainting": "v1-inpainting", - "customConfig": "Eigen configuratie", - "pathToCustomConfig": "Pad naar eigen configuratie", - "statusConverting": "Omzetten", - "modelConverted": "Model omgezet", - "sameFolder": "Dezelfde map", - "invokeRoot": "InvokeAI-map", - "custom": "Eigen", - "customSaveLocation": "Eigen bewaarlocatie", - "merge": "Samenvoegen", - "modelsMerged": "Modellen samengevoegd", - "mergeModels": "Voeg modellen samen", - "modelOne": "Model 1", - "modelTwo": "Model 2", - "modelThree": "Model 3", - "mergedModelName": "Samengevoegde modelnaam", - "alpha": "Alfa", - "interpolationType": "Soort interpolatie", - "mergedModelSaveLocation": "Bewaarlocatie", - "mergedModelCustomSaveLocation": "Eigen pad", - "invokeAIFolder": "InvokeAI-map", - "ignoreMismatch": "Negeer discrepanties tussen gekozen modellen", - "modelMergeHeaderHelp1": "Je kunt tot drie verschillende modellen samenvoegen om een mengvorm te maken die aan je behoeften voldoet.", - "modelMergeHeaderHelp2": "Alleen Diffusers kunnen worden samengevoegd. Als je een Checkpointmodel wilt samenvoegen, zet deze eerst om naar Diffusers.", - "modelMergeAlphaHelp": "Alfa stuurt de mengsterkte aan voor de modellen. Lagere alfawaarden leiden tot een kleinere invloed op het tweede model.", - "modelMergeInterpAddDifferenceHelp": "In deze stand wordt model 3 eerst van model 2 afgehaald. Wat daar uitkomt wordt gemengd met model 1, gebruikmakend van de hierboven ingestelde alfawaarde.", - "inverseSigmoid": "Keer Sigmoid om", - "sigmoid": "Sigmoid", - "weightedSum": "Gewogen som", - "v2_base": "v2 (512px)", - "v2_768": "v2 (768px)", - "none": "geen", - "addDifference": "Voeg verschil toe", - "scanForModels": "Scan naar modellen", - "pickModelType": "Kies modelsoort", - "baseModel": "Basismodel", - "vae": "VAE", - "variant": "Variant", - "modelConversionFailed": "Omzetten model mislukt", - "modelUpdateFailed": "Bijwerken model mislukt", - "modelsMergeFailed": "Samenvoegen model mislukt", - "selectModel": "Kies model", - "settings": "Instellingen", - "modelDeleted": "Model verwijderd", - "noCustomLocationProvided": "Geen Aangepaste Locatie Opgegeven", - "syncModels": "Synchroniseer Modellen", - "modelsSynced": "Modellen Gesynchroniseerd", - "modelSyncFailed": "Synchronisatie modellen mislukt", - "modelDeleteFailed": "Model kon niet verwijderd worden", - "convertingModelBegin": "Model aan het converteren. Even geduld.", - "importModels": "Importeer Modellen", - "syncModelsDesc": "Als je modellen niet meer synchroon zijn met de backend, kan je ze met deze optie vernieuwen. Dit wordt meestal gebruikt in het geval je het bestand models.yaml met de hand bewerkt of als je modellen aan de beginmap van InvokeAI toevoegt nadat de applicatie gestart is.", - "loraModels": "LoRA's", - "onnxModels": "Onnx", - "oliveModels": "Olives", - "noModels": "Geen modellen gevonden", - "predictionType": "Soort voorspelling (voor Stable Diffusion 2.x-modellen en incidentele Stable Diffusion 1.x-modellen)", - "quickAdd": "Voeg snel toe", - "simpleModelDesc": "Geef een pad naar een lokaal Diffusers-model, lokale-checkpoint- / safetensors-model, een HuggingFace-repo-ID of een url naar een checkpoint- / Diffusers-model.", - "advanced": "Uitgebreid", - "useCustomConfig": "Gebruik eigen configuratie", - "closeAdvanced": "Sluit uitgebreid", - "modelType": "Soort model", - "customConfigFileLocation": "Locatie eigen configuratiebestand", - "vaePrecision": "Nauwkeurigheid VAE" - }, - "parameters": { - "images": "Afbeeldingen", - "steps": "Stappen", - "cfgScale": "CFG-schaal", - "width": "Breedte", - "height": "Hoogte", - "seed": "Seed", - "randomizeSeed": "Willekeurige seed", - "shuffle": "Mengseed", - "noiseThreshold": "Drempelwaarde ruis", - "perlinNoise": "Perlinruis", - "variations": "Variaties", - "variationAmount": "Hoeveelheid variatie", - "seedWeights": "Gewicht seed", - "faceRestoration": "Gezichtsherstel", - "restoreFaces": "Herstel gezichten", - "type": "Soort", - "strength": "Sterkte", - "upscaling": "Opschalen", - "upscale": "Vergroot (Shift + U)", - "upscaleImage": "Schaal afbeelding op", - "scale": "Schaal", - "otherOptions": "Andere opties", - "seamlessTiling": "Naadloze tegels", - "hiresOptim": "Hogeresolutie-optimalisatie", - "imageFit": "Pas initiële afbeelding in uitvoergrootte", - "codeformerFidelity": "Getrouwheid", - "scaleBeforeProcessing": "Schalen voor verwerking", - "scaledWidth": "Geschaalde B", - "scaledHeight": "Geschaalde H", - "infillMethod": "Infill-methode", - "tileSize": "Grootte tegel", - "boundingBoxHeader": "Tekenvak", - "seamCorrectionHeader": "Correctie naad", - "infillScalingHeader": "Infill en schaling", - "img2imgStrength": "Sterkte Afbeelding naar afbeelding", - "toggleLoopback": "Zet recursieve verwerking aan/uit", - "sendTo": "Stuur naar", - "sendToImg2Img": "Stuur naar Afbeelding naar afbeelding", - "sendToUnifiedCanvas": "Stuur naar Centraal canvas", - "copyImageToLink": "Stuur afbeelding naar koppeling", - "downloadImage": "Download afbeelding", - "openInViewer": "Open in Viewer", - "closeViewer": "Sluit Viewer", - "usePrompt": "Hergebruik invoertekst", - "useSeed": "Hergebruik seed", - "useAll": "Hergebruik alles", - "useInitImg": "Gebruik initiële afbeelding", - "info": "Info", - "initialImage": "Initiële afbeelding", - "showOptionsPanel": "Toon deelscherm Opties (O of T)", - "symmetry": "Symmetrie", - "hSymmetryStep": "Stap horiz. symmetrie", - "vSymmetryStep": "Stap vert. symmetrie", - "cancel": { - "immediate": "Annuleer direct", - "isScheduled": "Annuleren", - "setType": "Stel annuleervorm in", - "schedule": "Annuleer na huidige iteratie", - "cancel": "Annuleer" - }, - "general": "Algemeen", - "copyImage": "Kopieer afbeelding", - "imageToImage": "Afbeelding naar afbeelding", - "denoisingStrength": "Sterkte ontruisen", - "hiresStrength": "Sterkte hogere resolutie", - "scheduler": "Planner", - "noiseSettings": "Ruis", - "seamlessXAxis": "X-as", - "seamlessYAxis": "Y-as", - "hidePreview": "Verberg voorvertoning", - "showPreview": "Toon voorvertoning", - "boundingBoxWidth": "Tekenvak breedte", - "boundingBoxHeight": "Tekenvak hoogte", - "clipSkip": "Overslaan CLIP", - "aspectRatio": "Beeldverhouding", - "negativePromptPlaceholder": "Negatieve prompt", - "controlNetControlMode": "Aansturingsmodus", - "positivePromptPlaceholder": "Positieve prompt", - "maskAdjustmentsHeader": "Maskeraanpassingen", - "compositingSettingsHeader": "Instellingen afbeeldingsopbouw", - "coherencePassHeader": "Coherentiestap", - "maskBlur": "Vervaag", - "maskBlurMethod": "Vervagingsmethode", - "coherenceSteps": "Stappen", - "coherenceStrength": "Sterkte", - "seamHighThreshold": "Hoog", - "seamLowThreshold": "Laag", - "invoke": { - "noNodesInGraph": "Geen knooppunten in graaf", - "noModelSelected": "Geen model ingesteld", - "invoke": "Start", - "noPrompts": "Geen prompts gegenereerd", - "systemBusy": "Systeem is bezig", - "noInitialImageSelected": "Geen initiële afbeelding gekozen", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} invoer ontbreekt", - "noControlImageForControlAdapter": "Controle-adapter #{{number}} heeft geen controle-afbeelding", - "noModelForControlAdapter": "Control-adapter #{{number}} heeft geen model ingesteld staan.", - "unableToInvoke": "Kan niet starten", - "incompatibleBaseModelForControlAdapter": "Model van controle-adapter #{{number}} is ongeldig in combinatie met het hoofdmodel.", - "systemDisconnected": "Systeem is niet verbonden", - "missingNodeTemplate": "Knooppuntsjabloon ontbreekt", - "readyToInvoke": "Klaar om te starten", - "missingFieldTemplate": "Veldsjabloon ontbreekt", - "addingImagesTo": "Bezig met toevoegen van afbeeldingen aan" - }, - "seamlessX&Y": "Naadloos X en Y", - "isAllowedToUpscale": { - "useX2Model": "Afbeelding is te groot om te vergroten met het x4-model. Gebruik hiervoor het x2-model", - "tooLarge": "Afbeelding is te groot om te vergoten. Kies een kleinere afbeelding" - }, - "aspectRatioFree": "Vrij", - "cpuNoise": "CPU-ruis", - "patchmatchDownScaleSize": "Verklein", - "gpuNoise": "GPU-ruis", - "seamlessX": "Naadloos X", - "useCpuNoise": "Gebruik CPU-ruis", - "clipSkipWithLayerCount": "Overslaan CLIP {{layerCount}}", - "seamlessY": "Naadloos Y", - "manualSeed": "Handmatige seedwaarde", - "imageActions": "Afbeeldingshandeling", - "randomSeed": "Willekeurige seedwaarde", - "iterations": "Iteraties", - "iterationsWithCount_one": "{{count}} iteratie", - "iterationsWithCount_other": "{{count}} iteraties", - "enableNoiseSettings": "Schakel ruisinstellingen in", - "coherenceMode": "Modus" - }, - "settings": { - "models": "Modellen", - "displayInProgress": "Toon voortgangsafbeeldingen", - "saveSteps": "Bewaar afbeeldingen elke n stappen", - "confirmOnDelete": "Bevestig bij verwijderen", - "displayHelpIcons": "Toon hulppictogrammen", - "enableImageDebugging": "Schakel foutopsporing afbeelding in", - "resetWebUI": "Herstel web-UI", - "resetWebUIDesc1": "Herstel web-UI herstelt alleen de lokale afbeeldingscache en de onthouden instellingen van je browser. Het verwijdert geen afbeeldingen van schijf.", - "resetWebUIDesc2": "Als afbeeldingen niet getoond worden in de galerij of iets anders werkt niet, probeer dan eerst deze herstelfunctie voordat je een fout aanmeldt op GitHub.", - "resetComplete": "Webinterface is hersteld.", - "useSlidersForAll": "Gebruik schuifbalken voor alle opties", - "consoleLogLevel": "Niveau logboek", - "shouldLogToConsole": "Schrijf logboek naar console", - "developer": "Ontwikkelaar", - "general": "Algemeen", - "showProgressInViewer": "Toon voortgangsafbeeldingen in viewer", - "generation": "Genereren", - "ui": "Gebruikersinterface", - "antialiasProgressImages": "Voer anti-aliasing uit op voortgangsafbeeldingen", - "showAdvancedOptions": "Toon uitgebreide opties", - "favoriteSchedulers": "Favoriete planners", - "favoriteSchedulersPlaceholder": "Geen favoriete planners ingesteld", - "beta": "Bèta", - "experimental": "Experimenteel", - "alternateCanvasLayout": "Omwisselen Canvas Layout", - "enableNodesEditor": "Schakel Knooppunteditor in", - "autoChangeDimensions": "Werk B/H bij naar modelstandaard bij wijziging", - "clearIntermediates": "Wis tussentijdse afbeeldingen", - "clearIntermediatesDesc3": "Je galerijafbeeldingen zullen niet worden verwijderd.", - "clearIntermediatesWithCount_one": "Wis {{count}} tussentijdse afbeelding", - "clearIntermediatesWithCount_other": "Wis {{count}} tussentijdse afbeeldingen", - "clearIntermediatesDesc2": "Tussentijdse afbeeldingen zijn nevenproducten bij het genereren. Deze wijken af van de uitvoerafbeeldingen in de galerij. Als je tussentijdse afbeeldingen wist, wordt schijfruimte vrijgemaakt.", - "intermediatesCleared_one": "{{count}} tussentijdse afbeelding gewist", - "intermediatesCleared_other": "{{count}} tussentijdse afbeeldingen gewist", - "clearIntermediatesDesc1": "Als je tussentijdse afbeeldingen wist, dan wordt de staat hersteld van je canvas en van ControlNet.", - "intermediatesClearedFailed": "Fout bij wissen van tussentijdse afbeeldingen" - }, - "toast": { - "tempFoldersEmptied": "Tijdelijke map geleegd", - "uploadFailed": "Upload mislukt", - "uploadFailedUnableToLoadDesc": "Kan bestand niet laden", - "downloadImageStarted": "Afbeeldingsdownload gestart", - "imageCopied": "Afbeelding gekopieerd", - "imageLinkCopied": "Afbeeldingskoppeling gekopieerd", - "imageNotLoaded": "Geen afbeelding geladen", - "imageNotLoadedDesc": "Geen afbeeldingen gevonden", - "imageSavedToGallery": "Afbeelding opgeslagen naar galerij", - "canvasMerged": "Canvas samengevoegd", - "sentToImageToImage": "Gestuurd naar Afbeelding naar afbeelding", - "sentToUnifiedCanvas": "Gestuurd naar Centraal canvas", - "parametersSet": "Parameters ingesteld", - "parametersNotSet": "Parameters niet ingesteld", - "parametersNotSetDesc": "Geen metagegevens gevonden voor deze afbeelding.", - "parametersFailed": "Fout bij laden van parameters", - "parametersFailedDesc": "Kan initiële afbeelding niet laden.", - "seedSet": "Seed ingesteld", - "seedNotSet": "Seed niet ingesteld", - "seedNotSetDesc": "Kan seed niet vinden voor deze afbeelding.", - "promptSet": "Invoertekst ingesteld", - "promptNotSet": "Invoertekst niet ingesteld", - "promptNotSetDesc": "Kan invoertekst niet vinden voor deze afbeelding.", - "upscalingFailed": "Opschalen mislukt", - "faceRestoreFailed": "Gezichtsherstel mislukt", - "metadataLoadFailed": "Fout bij laden metagegevens", - "initialImageSet": "Initiële afbeelding ingesteld", - "initialImageNotSet": "Initiële afbeelding niet ingesteld", - "initialImageNotSetDesc": "Kan initiële afbeelding niet laden", - "serverError": "Serverfout", - "disconnected": "Verbinding met server verbroken", - "connected": "Verbonden met server", - "canceled": "Verwerking geannuleerd", - "uploadFailedInvalidUploadDesc": "Moet een enkele PNG- of JPEG-afbeelding zijn", - "problemCopyingImageLink": "Kan afbeeldingslink niet kopiëren", - "parameterNotSet": "Parameter niet ingesteld", - "parameterSet": "Instellen parameters", - "nodesSaved": "Knooppunten bewaard", - "nodesLoaded": "Knooppunten geladen", - "nodesCleared": "Knooppunten weggehaald", - "nodesLoadedFailed": "Laden knooppunten mislukt", - "problemCopyingImage": "Kan Afbeelding Niet Kopiëren", - "nodesNotValidJSON": "Ongeldige JSON", - "nodesCorruptedGraph": "Kan niet laden. Graph lijkt corrupt.", - "nodesUnrecognizedTypes": "Laden mislukt. Graph heeft onherkenbare types", - "nodesBrokenConnections": "Laden mislukt. Sommige verbindingen zijn verbroken.", - "nodesNotValidGraph": "Geen geldige knooppunten graph", - "baseModelChangedCleared_one": "Basismodel is gewijzigd: {{count}} niet-compatibel submodel weggehaald of uitgeschakeld", - "baseModelChangedCleared_other": "Basismodel is gewijzigd: {{count}} niet-compatibele submodellen weggehaald of uitgeschakeld", - "imageSavingFailed": "Fout bij bewaren afbeelding", - "canvasSentControlnetAssets": "Canvas gestuurd naar ControlNet en Assets", - "problemCopyingCanvasDesc": "Kan basislaag niet exporteren", - "loadedWithWarnings": "Werkstroom geladen met waarschuwingen", - "setInitialImage": "Ingesteld als initiële afbeelding", - "canvasCopiedClipboard": "Canvas gekopieerd naar klembord", - "setControlImage": "Ingesteld als controle-afbeelding", - "setNodeField": "Ingesteld als knooppuntveld", - "problemSavingMask": "Fout bij bewaren masker", - "problemSavingCanvasDesc": "Kan basislaag niet exporteren", - "maskSavedAssets": "Masker bewaard in Assets", - "modelAddFailed": "Fout bij toevoegen model", - "problemDownloadingCanvas": "Fout bij downloaden van canvas", - "problemMergingCanvas": "Fout bij samenvoegen canvas", - "setCanvasInitialImage": "Ingesteld als initiële canvasafbeelding", - "imageUploaded": "Afbeelding geüpload", - "addedToBoard": "Toegevoegd aan bord", - "workflowLoaded": "Werkstroom geladen", - "modelAddedSimple": "Model toegevoegd", - "problemImportingMaskDesc": "Kan masker niet exporteren", - "problemCopyingCanvas": "Fout bij kopiëren canvas", - "problemSavingCanvas": "Fout bij bewaren canvas", - "canvasDownloaded": "Canvas gedownload", - "setIPAdapterImage": "Ingesteld als IP-adapterafbeelding", - "problemMergingCanvasDesc": "Kan basislaag niet exporteren", - "problemDownloadingCanvasDesc": "Kan basislaag niet exporteren", - "problemSavingMaskDesc": "Kan masker niet exporteren", - "imageSaved": "Afbeelding bewaard", - "maskSentControlnetAssets": "Masker gestuurd naar ControlNet en Assets", - "canvasSavedGallery": "Canvas bewaard in galerij", - "imageUploadFailed": "Fout bij uploaden afbeelding", - "modelAdded": "Model toegevoegd: {{modelName}}", - "problemImportingMask": "Fout bij importeren masker" - }, - "tooltip": { - "feature": { - "prompt": "Dit is het invoertekstvak. De invoertekst bevat de te genereren voorwerpen en stylistische termen. Je kunt hiernaast in de invoertekst ook het gewicht (het belang van een trefwoord) toekennen. Opdrachten en parameters voor op de opdrachtregelinterface werken hier niet.", - "gallery": "De galerij toont gegenereerde afbeeldingen uit de uitvoermap nadat ze gegenereerd zijn. Instellingen worden opgeslagen binnen de bestanden zelf en zijn toegankelijk via het contextmenu.", - "other": "Deze opties maken alternative werkingsstanden voor Invoke mogelijk. De optie 'Naadloze tegels' maakt herhalende patronen in de uitvoer. 'Hoge resolutie' genereert in twee stappen via Afbeelding naar afbeelding: gebruik dit als je een grotere en coherentere afbeelding wilt zonder artifacten. Dit zal meer tijd in beslag nemen t.o.v. Tekst naar afbeelding.", - "seed": "Seedwaarden hebben invloed op de initiële ruis op basis waarvan de afbeelding wordt gevormd. Je kunt de al bestaande seeds van eerdere afbeeldingen gebruiken. De waarde 'Drempelwaarde ruis' wordt gebruikt om de hoeveelheid artifacten te verkleinen bij hoge CFG-waarden (beperk je tot 0 - 10). De Perlinruiswaarde wordt gebruikt om Perlinruis toe te voegen bij het genereren: beide dienen als variatie op de uitvoer.", - "variations": "Probeer een variatie met een waarden tussen 0,1 en 1,0 om het resultaat voor een bepaalde seed te beïnvloeden. Interessante seedvariaties ontstaan bij waarden tussen 0,1 en 0,3.", - "upscale": "Gebruik ESRGAN om de afbeelding direct na het genereren te vergroten.", - "faceCorrection": "Gezichtsherstel via GFPGAN of Codeformer: het algoritme herkent gezichten die voorkomen in de afbeelding en herstelt onvolkomenheden. Een hogere waarde heeft meer invloed op de afbeelding, wat leidt tot aantrekkelijkere gezichten. Codeformer met een hogere getrouwheid behoudt de oorspronkelijke afbeelding ten koste van een sterkere gezichtsherstel.", - "imageToImage": "Afbeelding naar afbeelding laadt een afbeelding als initiële afbeelding, welke vervolgens gebruikt wordt om een nieuwe afbeelding mee te maken i.c.m. de invoertekst. Hoe hoger de waarde, des te meer invloed dit heeft op de uiteindelijke afbeelding. Waarden tussen 0,1 en 1,0 zijn mogelijk. Aanbevolen waarden zijn 0,25 - 0,75", - "boundingBox": "Het tekenvak is gelijk aan de instellingen Breedte en Hoogte voor de functies Tekst naar afbeelding en Afbeelding naar afbeelding. Alleen het gebied in het tekenvak wordt verwerkt.", - "seamCorrection": "Heeft invloed op hoe wordt omgegaan met zichtbare naden die voorkomen tussen gegenereerde afbeeldingen op het canvas.", - "infillAndScaling": "Onderhoud van infillmethodes (gebruikt op gemaskeerde of gewiste gebieden op het canvas) en opschaling (nuttig bij kleine tekenvakken)." - } - }, - "unifiedCanvas": { - "layer": "Laag", - "base": "Basis", - "mask": "Masker", - "maskingOptions": "Maskeropties", - "enableMask": "Schakel masker in", - "preserveMaskedArea": "Behoud gemaskeerd gebied", - "clearMask": "Wis masker", - "brush": "Penseel", - "eraser": "Gum", - "fillBoundingBox": "Vul tekenvak", - "eraseBoundingBox": "Wis tekenvak", - "colorPicker": "Kleurenkiezer", - "brushOptions": "Penseelopties", - "brushSize": "Grootte", - "move": "Verplaats", - "resetView": "Herstel weergave", - "mergeVisible": "Voeg lagen samen", - "saveToGallery": "Bewaar in galerij", - "copyToClipboard": "Kopieer naar klembord", - "downloadAsImage": "Download als afbeelding", - "undo": "Maak ongedaan", - "redo": "Herhaal", - "clearCanvas": "Wis canvas", - "canvasSettings": "Canvasinstellingen", - "showIntermediates": "Toon tussenafbeeldingen", - "showGrid": "Toon raster", - "snapToGrid": "Lijn uit op raster", - "darkenOutsideSelection": "Verduister buiten selectie", - "autoSaveToGallery": "Bewaar automatisch naar galerij", - "saveBoxRegionOnly": "Bewaar alleen tekengebied", - "limitStrokesToBox": "Beperk streken tot tekenvak", - "showCanvasDebugInfo": "Toon aanvullende canvasgegevens", - "clearCanvasHistory": "Wis canvasgeschiedenis", - "clearHistory": "Wis geschiedenis", - "clearCanvasHistoryMessage": "Het wissen van de canvasgeschiedenis laat het huidige canvas ongemoeid, maar wist onherstelbaar de geschiedenis voor het ongedaan maken en herhalen.", - "clearCanvasHistoryConfirm": "Weet je zeker dat je de canvasgeschiedenis wilt wissen?", - "emptyTempImageFolder": "Leeg tijdelijke afbeeldingenmap", - "emptyFolder": "Leeg map", - "emptyTempImagesFolderMessage": "Het legen van de tijdelijke afbeeldingenmap herstelt ook volledig het Centraal canvas. Hieronder valt de geschiedenis voor het ongedaan maken en herhalen, de afbeeldingen in het sessiegebied en de basislaag van het canvas.", - "emptyTempImagesFolderConfirm": "Weet je zeker dat je de tijdelijke afbeeldingenmap wilt legen?", - "activeLayer": "Actieve laag", - "canvasScale": "Schaal canvas", - "boundingBox": "Tekenvak", - "scaledBoundingBox": "Geschaalde tekenvak", - "boundingBoxPosition": "Positie tekenvak", - "canvasDimensions": "Afmetingen canvas", - "canvasPosition": "Positie canvas", - "cursorPosition": "Positie cursor", - "previous": "Vorige", - "next": "Volgende", - "accept": "Accepteer", - "showHide": "Toon/verberg", - "discardAll": "Gooi alles weg", - "betaClear": "Wis", - "betaDarkenOutside": "Verduister buiten tekenvak", - "betaLimitToBox": "Beperk tot tekenvak", - "betaPreserveMasked": "Behoud masker", - "antialiasing": "Anti-aliasing", - "showResultsOn": "Toon resultaten (aan)", - "showResultsOff": "Toon resultaten (uit)" - }, - "accessibility": { - "exitViewer": "Stop viewer", - "zoomIn": "Zoom in", - "rotateCounterClockwise": "Draai tegen de klok in", - "modelSelect": "Modelkeuze", - "invokeProgressBar": "Voortgangsbalk Invoke", - "reset": "Herstel", - "uploadImage": "Upload afbeelding", - "previousImage": "Vorige afbeelding", - "nextImage": "Volgende afbeelding", - "useThisParameter": "Gebruik deze parameter", - "copyMetadataJson": "Kopieer metagegevens-JSON", - "zoomOut": "Zoom uit", - "rotateClockwise": "Draai met de klok mee", - "flipHorizontally": "Spiegel horizontaal", - "flipVertically": "Spiegel verticaal", - "modifyConfig": "Wijzig configuratie", - "toggleAutoscroll": "Autom. scrollen aan/uit", - "toggleLogViewer": "Logboekviewer aan/uit", - "showOptionsPanel": "Toon zijscherm", - "menu": "Menu", - "showGalleryPanel": "Toon deelscherm Galerij", - "loadMore": "Laad meer" - }, - "ui": { - "showProgressImages": "Toon voortgangsafbeeldingen", - "hideProgressImages": "Verberg voortgangsafbeeldingen", - "swapSizes": "Wissel afmetingen om", - "lockRatio": "Zet verhouding vast" - }, - "nodes": { - "zoomOutNodes": "Uitzoomen", - "fitViewportNodes": "Aanpassen aan beeld", - "hideMinimapnodes": "Minimap verbergen", - "showLegendNodes": "Typelegende veld tonen", - "zoomInNodes": "Inzoomen", - "hideGraphNodes": "Graph overlay verbergen", - "showGraphNodes": "Graph overlay tonen", - "showMinimapnodes": "Minimap tonen", - "hideLegendNodes": "Typelegende veld verbergen", - "reloadNodeTemplates": "Herlaad knooppuntsjablonen", - "loadWorkflow": "Laad werkstroom", - "resetWorkflow": "Herstel werkstroom", - "resetWorkflowDesc": "Weet je zeker dat je deze werkstroom wilt herstellen?", - "resetWorkflowDesc2": "Herstel van een werkstroom haalt alle knooppunten, randen en werkstroomdetails weg.", - "downloadWorkflow": "Download JSON van werkstroom", - "booleanPolymorphicDescription": "Een verzameling Booleanse waarden.", - "scheduler": "Planner", - "inputField": "Invoerveld", - "controlFieldDescription": "Controlegegevens doorgegeven tussen knooppunten.", - "skippingUnknownOutputType": "Overslaan van onbekend soort uitvoerveld", - "latentsFieldDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", - "denoiseMaskFieldDescription": "Ontruisingsmasker kan worden doorgegeven tussen knooppunten", - "floatCollectionDescription": "Een verzameling zwevende-kommagetallen.", - "missingTemplate": "Ontbrekende sjabloon", - "outputSchemaNotFound": "Uitvoerschema niet gevonden", - "ipAdapterPolymorphicDescription": "Een verzameling IP-adapters.", - "workflowDescription": "Korte beschrijving", - "latentsPolymorphicDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", - "colorFieldDescription": "Een RGBA-kleur.", - "mainModelField": "Model", - "unhandledInputProperty": "Onverwerkt invoerkenmerk", - "versionUnknown": " Versie onbekend", - "ipAdapterCollection": "Verzameling IP-adapters", - "conditioningCollection": "Verzameling conditionering", - "maybeIncompatible": "Is mogelijk niet compatibel met geïnstalleerde knooppunten", - "ipAdapterPolymorphic": "Polymorfisme IP-adapter", - "noNodeSelected": "Geen knooppunt gekozen", - "addNode": "Voeg knooppunt toe", - "unableToValidateWorkflow": "Kan werkstroom niet valideren", - "enum": "Enumeratie", - "integerPolymorphicDescription": "Een verzameling gehele getallen.", - "noOutputRecorded": "Geen uitvoer opgenomen", - "updateApp": "Werk app bij", - "conditioningCollectionDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", - "colorPolymorphic": "Polymorfisme kleur", - "colorCodeEdgesHelp": "Kleurgecodeerde randen op basis van hun verbonden velden", - "collectionDescription": "TODO", - "float": "Zwevende-kommagetal", - "workflowContact": "Contactpersoon", - "skippingReservedFieldType": "Overslaan van gereserveerd veldsoort", - "animatedEdges": "Geanimeerde randen", - "booleanCollectionDescription": "Een verzameling van Booleanse waarden.", - "sDXLMainModelFieldDescription": "SDXL-modelveld.", - "conditioningPolymorphic": "Polymorfisme conditionering", - "integer": "Geheel getal", - "colorField": "Kleur", - "boardField": "Bord", - "nodeTemplate": "Sjabloon knooppunt", - "latentsCollection": "Verzameling latents", - "problemReadingWorkflow": "Fout bij lezen van werkstroom uit afbeelding", - "sourceNode": "Bronknooppunt", - "nodeOpacity": "Dekking knooppunt", - "pickOne": "Kies er een", - "collectionItemDescription": "TODO", - "integerDescription": "Gehele getallen zijn getallen zonder een decimaalteken.", - "outputField": "Uitvoerveld", - "unableToLoadWorkflow": "Kan werkstroom niet valideren", - "snapToGrid": "Lijn uit op raster", - "stringPolymorphic": "Polymorfisme tekenreeks", - "conditioningPolymorphicDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", - "noFieldsLinearview": "Geen velden toegevoegd aan lineaire weergave", - "skipped": "Overgeslagen", - "imagePolymorphic": "Polymorfisme afbeelding", - "nodeSearch": "Zoek naar knooppunten", - "updateNode": "Werk knooppunt bij", - "sDXLRefinerModelFieldDescription": "Beschrijving", - "imagePolymorphicDescription": "Een verzameling afbeeldingen.", - "floatPolymorphic": "Polymorfisme zwevende-kommagetal", - "version": "Versie", - "doesNotExist": "bestaat niet", - "ipAdapterCollectionDescription": "Een verzameling van IP-adapters.", - "stringCollectionDescription": "Een verzameling tekenreeksen.", - "unableToParseNode": "Kan knooppunt niet inlezen", - "controlCollection": "Controle-verzameling", - "validateConnections": "Valideer verbindingen en graaf", - "stringCollection": "Verzameling tekenreeksen", - "inputMayOnlyHaveOneConnection": "Invoer mag slechts een enkele verbinding hebben", - "notes": "Opmerkingen", - "uNetField": "UNet", - "nodeOutputs": "Uitvoer knooppunt", - "currentImageDescription": "Toont de huidige afbeelding in de knooppunteditor", - "validateConnectionsHelp": "Voorkom dat er ongeldige verbindingen worden gelegd en dat er ongeldige grafen worden aangeroepen", - "problemSettingTitle": "Fout bij instellen titel", - "ipAdapter": "IP-adapter", - "integerCollection": "Verzameling gehele getallen", - "collectionItem": "Verzamelingsonderdeel", - "noConnectionInProgress": "Geen verbinding bezig te maken", - "vaeModelField": "VAE", - "controlCollectionDescription": "Controlegegevens doorgegeven tussen knooppunten.", - "skippedReservedInput": "Overgeslagen gereserveerd invoerveld", - "workflowVersion": "Versie", - "noConnectionData": "Geen verbindingsgegevens", - "outputFields": "Uitvoervelden", - "fieldTypesMustMatch": "Veldsoorten moeten overeenkomen", - "workflow": "Werkstroom", - "edge": "Rand", - "inputNode": "Invoerknooppunt", - "enumDescription": "Enumeraties zijn waarden die uit een aantal opties moeten worden gekozen.", - "unkownInvocation": "Onbekende aanroepsoort", - "loRAModelFieldDescription": "TODO", - "imageField": "Afbeelding", - "skippedReservedOutput": "Overgeslagen gereserveerd uitvoerveld", - "animatedEdgesHelp": "Animeer gekozen randen en randen verbonden met de gekozen knooppunten", - "cannotDuplicateConnection": "Kan geen dubbele verbindingen maken", - "booleanPolymorphic": "Polymorfisme Booleaanse waarden", - "unknownTemplate": "Onbekend sjabloon", - "noWorkflow": "Geen werkstroom", - "removeLinearView": "Verwijder uit lineaire weergave", - "colorCollectionDescription": "TODO", - "integerCollectionDescription": "Een verzameling gehele getallen.", - "colorPolymorphicDescription": "Een verzameling kleuren.", - "sDXLMainModelField": "SDXL-model", - "workflowTags": "Labels", - "denoiseMaskField": "Ontruisingsmasker", - "schedulerDescription": "Beschrijving", - "missingCanvaInitImage": "Ontbrekende initialisatie-afbeelding voor canvas", - "conditioningFieldDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", - "clipFieldDescription": "Submodellen voor tokenizer en text_encoder.", - "fullyContainNodesHelp": "Knooppunten moeten zich volledig binnen het keuzevak bevinden om te worden gekozen", - "noImageFoundState": "Geen initiële afbeelding gevonden in de staat", - "workflowValidation": "Validatiefout werkstroom", - "clipField": "Clip", - "stringDescription": "Tekenreeksen zijn tekst.", - "nodeType": "Soort knooppunt", - "noMatchingNodes": "Geen overeenkomende knooppunten", - "fullyContainNodes": "Omvat knooppunten volledig om ze te kiezen", - "integerPolymorphic": "Polymorfisme geheel getal", - "executionStateInProgress": "Bezig", - "noFieldType": "Geen soort veld", - "colorCollection": "Een verzameling kleuren.", - "executionStateError": "Fout", - "noOutputSchemaName": "Geen naam voor uitvoerschema gevonden in referentieobject", - "ipAdapterModel": "Model IP-adapter", - "latentsPolymorphic": "Polymorfisme latents", - "vaeModelFieldDescription": "Beschrijving", - "skippingInputNoTemplate": "Overslaan van invoerveld zonder sjabloon", - "ipAdapterDescription": "Een Afbeeldingsprompt-adapter (IP-adapter).", - "boolean": "Booleaanse waarden", - "missingCanvaInitMaskImages": "Ontbrekende initialisatie- en maskerafbeeldingen voor canvas", - "problemReadingMetadata": "Fout bij lezen van metagegevens uit afbeelding", - "stringPolymorphicDescription": "Een verzameling tekenreeksen.", - "oNNXModelField": "ONNX-model", - "executionStateCompleted": "Voltooid", - "node": "Knooppunt", - "skippingUnknownInputType": "Overslaan van onbekend soort invoerveld", - "workflowAuthor": "Auteur", - "currentImage": "Huidige afbeelding", - "controlField": "Controle", - "workflowName": "Naam", - "booleanDescription": "Booleanse waarden zijn waar en onwaar.", - "collection": "Verzameling", - "ipAdapterModelDescription": "Modelveld IP-adapter", - "cannotConnectInputToInput": "Kan invoer niet aan invoer verbinden", - "invalidOutputSchema": "Ongeldig uitvoerschema", - "boardFieldDescription": "Een galerijbord", - "floatDescription": "Zwevende-kommagetallen zijn getallen met een decimaalteken.", - "floatPolymorphicDescription": "Een verzameling zwevende-kommagetallen.", - "vaeField": "Vae", - "conditioningField": "Conditionering", - "unhandledOutputProperty": "Onverwerkt uitvoerkenmerk", - "workflowNotes": "Opmerkingen", - "string": "Tekenreeks", - "floatCollection": "Verzameling zwevende-kommagetallen", - "latentsField": "Latents", - "cannotConnectOutputToOutput": "Kan uitvoer niet aan uitvoer verbinden", - "booleanCollection": "Verzameling Booleaanse waarden", - "connectionWouldCreateCycle": "Verbinding zou cyclisch worden", - "cannotConnectToSelf": "Kan niet aan zichzelf verbinden", - "notesDescription": "Voeg opmerkingen toe aan je werkstroom", - "unknownField": "Onbekend veld", - "inputFields": "Invoervelden", - "colorCodeEdges": "Kleurgecodeerde randen", - "uNetFieldDescription": "UNet-submodel.", - "unknownNode": "Onbekend knooppunt", - "imageCollectionDescription": "Een verzameling afbeeldingen.", - "mismatchedVersion": "Heeft niet-overeenkomende versie", - "vaeFieldDescription": "Vae-submodel.", - "imageFieldDescription": "Afbeeldingen kunnen worden doorgegeven tussen knooppunten.", - "outputNode": "Uitvoerknooppunt", - "addNodeToolTip": "Voeg knooppunt toe (Shift+A, spatie)", - "loadingNodes": "Bezig met laden van knooppunten...", - "snapToGridHelp": "Lijn knooppunten uit op raster bij verplaatsing", - "workflowSettings": "Instellingen werkstroomeditor", - "mainModelFieldDescription": "TODO", - "sDXLRefinerModelField": "Verfijningsmodel", - "loRAModelField": "LoRA", - "unableToParseEdge": "Kan rand niet inlezen", - "latentsCollectionDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", - "oNNXModelFieldDescription": "ONNX-modelveld.", - "imageCollection": "Afbeeldingsverzameling" - }, - "controlnet": { - "amult": "a_mult", - "resize": "Schaal", - "showAdvanced": "Toon uitgebreide opties", - "contentShuffleDescription": "Verschuift het materiaal in de afbeelding", - "bgth": "bg_th", - "addT2IAdapter": "Voeg $t(common.t2iAdapter) toe", - "pidi": "PIDI", - "importImageFromCanvas": "Importeer afbeelding uit canvas", - "lineartDescription": "Zet afbeelding om naar line-art", - "normalBae": "Normale BAE", - "importMaskFromCanvas": "Importeer masker uit canvas", - "hed": "HED", - "hideAdvanced": "Verberg uitgebreid", - "contentShuffle": "Verschuif materiaal", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) ingeschakeld, $t(common.t2iAdapter)s uitgeschakeld", - "ipAdapterModel": "Adaptermodel", - "resetControlImage": "Herstel controle-afbeelding", - "beginEndStepPercent": "Percentage begin-/eindstap", - "mlsdDescription": "Minimalistische herkenning lijnsegmenten", - "duplicate": "Maak kopie", - "balanced": "Gebalanceerd", - "f": "F", - "h": "H", - "prompt": "Prompt", - "depthMidasDescription": "Genereer diepteblad via Midas", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "openPoseDescription": "Menselijke pose-benadering via Openpose", - "control": "Controle", - "resizeMode": "Modus schaling", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ingeschakeld, $t(common.controlNet)s uitgeschakeld", - "coarse": "Grof", - "weight": "Gewicht", - "selectModel": "Kies een model", - "crop": "Snij bij", - "depthMidas": "Diepte (Midas)", - "w": "B", - "processor": "Verwerker", - "addControlNet": "Voeg $t(common.controlNet) toe", - "none": "Geen", - "incompatibleBaseModel": "Niet-compatibel basismodel:", - "enableControlnet": "Schakel ControlNet in", - "detectResolution": "Herken resolutie", - "controlNetT2IMutexDesc": "Gelijktijdig gebruik van $t(common.controlNet) en $t(common.t2iAdapter) wordt op dit moment niet ondersteund.", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "pidiDescription": "PIDI-afbeeldingsverwerking", - "mediapipeFace": "Mediapipe - Gezicht", - "mlsd": "M-LSD", - "controlMode": "Controlemodus", - "fill": "Vul", - "cannyDescription": "Herkenning Canny-rand", - "addIPAdapter": "Voeg $t(common.ipAdapter) toe", - "lineart": "Line-art", - "colorMapDescription": "Genereert een kleurenblad van de afbeelding", - "lineartAnimeDescription": "Lineartverwerking in anime-stijl", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "minConfidence": "Min. vertrouwensniveau", - "imageResolution": "Resolutie afbeelding", - "megaControl": "Zeer veel controle", - "depthZoe": "Diepte (Zoe)", - "colorMap": "Kleur", - "lowThreshold": "Lage drempelwaarde", - "autoConfigure": "Configureer verwerker automatisch", - "highThreshold": "Hoge drempelwaarde", - "normalBaeDescription": "Normale BAE-verwerking", - "noneDescription": "Geen verwerking toegepast", - "saveControlImage": "Bewaar controle-afbeelding", - "openPose": "Openpose", - "toggleControlNet": "Zet deze ControlNet aan/uit", - "delete": "Verwijder", - "controlAdapter_one": "Control-adapter", - "controlAdapter_other": "Control-adapters", - "safe": "Veilig", - "colorMapTileSize": "Grootte tegel", - "lineartAnime": "Line-art voor anime", - "ipAdapterImageFallback": "Geen IP-adapterafbeelding gekozen", - "mediapipeFaceDescription": "Gezichtsherkenning met Mediapipe", - "canny": "Canny", - "depthZoeDescription": "Genereer diepteblad via Zoe", - "hedDescription": "Herkenning van holistisch-geneste randen", - "setControlImageDimensions": "Stel afmetingen controle-afbeelding in op B/H", - "scribble": "Krabbel", - "resetIPAdapterImage": "Herstel IP-adapterafbeelding", - "handAndFace": "Hand en gezicht", - "enableIPAdapter": "Schakel IP-adapter in", - "maxFaces": "Max. gezichten" - }, - "dynamicPrompts": { - "seedBehaviour": { - "perPromptDesc": "Gebruik een verschillende seedwaarde per afbeelding", - "perIterationLabel": "Seedwaarde per iteratie", - "perIterationDesc": "Gebruik een verschillende seedwaarde per iteratie", - "perPromptLabel": "Seedwaarde per afbeelding", - "label": "Gedrag seedwaarde" - }, - "enableDynamicPrompts": "Schakel dynamische prompts in", - "combinatorial": "Combinatorisch genereren", - "maxPrompts": "Max. prompts", - "promptsWithCount_one": "{{count}} prompt", - "promptsWithCount_other": "{{count}} prompts", - "dynamicPrompts": "Dynamische prompts" - }, - "popovers": { - "noiseUseCPU": { - "paragraphs": [ - "Bepaalt of ruis wordt gegenereerd op de CPU of de GPU.", - "Met CPU-ruis ingeschakeld zal een bepaalde seedwaarde dezelfde afbeelding opleveren op welke machine dan ook.", - "Er is geen prestatieverschil bij het inschakelen van CPU-ruis." - ], - "heading": "Gebruik CPU-ruis" - }, - "paramScheduler": { - "paragraphs": [ - "De planner bepaalt hoe ruis per iteratie wordt toegevoegd aan een afbeelding of hoe een monster wordt bijgewerkt op basis van de uitvoer van een model." - ], - "heading": "Planner" - }, - "scaleBeforeProcessing": { - "paragraphs": [ - "Schaalt het gekozen gebied naar de grootte die het meest geschikt is voor het model, vooraf aan het proces van het afbeeldingen genereren." - ], - "heading": "Schaal vooraf aan verwerking" - }, - "compositingMaskAdjustments": { - "heading": "Aanpassingen masker", - "paragraphs": [ - "Pas het masker aan." - ] - }, - "paramRatio": { - "heading": "Beeldverhouding", - "paragraphs": [ - "De beeldverhouding van de afmetingen van de afbeelding die wordt gegenereerd.", - "Een afbeeldingsgrootte (in aantal pixels) equivalent aan 512x512 wordt aanbevolen voor SD1.5-modellen. Een grootte-equivalent van 1024x1024 wordt aanbevolen voor SDXL-modellen." - ] - }, - "compositingCoherenceSteps": { - "heading": "Stappen", - "paragraphs": [ - "Het aantal te gebruiken ontruisingsstappen in de coherentiefase.", - "Gelijk aan de hoofdparameter Stappen." - ] - }, - "dynamicPrompts": { - "paragraphs": [ - "Dynamische prompts vormt een enkele prompt om in vele.", - "De basissyntax is \"a {red|green|blue} ball\". Dit zal de volgende drie prompts geven: \"a red ball\", \"a green ball\" en \"a blue ball\".", - "Gebruik de syntax zo vaak als je wilt in een enkele prompt, maar zorg ervoor dat het aantal gegenereerde prompts in lijn ligt met de instelling Max. prompts." - ], - "heading": "Dynamische prompts" - }, - "paramVAE": { - "paragraphs": [ - "Het model gebruikt voor het vertalen van AI-uitvoer naar de uiteindelijke afbeelding." - ], - "heading": "VAE" - }, - "compositingBlur": { - "heading": "Vervaging", - "paragraphs": [ - "De vervagingsstraal van het masker." - ] - }, - "paramIterations": { - "paragraphs": [ - "Het aantal te genereren afbeeldingen.", - "Als dynamische prompts is ingeschakeld, dan zal elke prompt dit aantal keer gegenereerd worden." - ], - "heading": "Iteraties" - }, - "paramVAEPrecision": { - "heading": "Nauwkeurigheid VAE", - "paragraphs": [ - "De nauwkeurigheid gebruikt tijdens de VAE-codering en -decodering. FP16/halve nauwkeurig is efficiënter, ten koste van kleine afbeeldingsvariaties." - ] - }, - "compositingCoherenceMode": { - "heading": "Modus", - "paragraphs": [ - "De modus van de coherentiefase." - ] - }, - "paramSeed": { - "paragraphs": [ - "Bepaalt de startruis die gebruikt wordt bij het genereren.", - "Schakel \"Willekeurige seedwaarde\" uit om identieke resultaten te krijgen met dezelfde genereer-instellingen." - ], - "heading": "Seedwaarde" - }, - "controlNetResizeMode": { - "heading": "Schaalmodus", - "paragraphs": [ - "Hoe de ControlNet-afbeelding zal worden geschaald aan de uitvoergrootte van de afbeelding." - ] - }, - "controlNetBeginEnd": { - "paragraphs": [ - "Op welke stappen van het ontruisingsproces ControlNet worden toegepast.", - "ControlNets die worden toegepast aan het begin begeleiden het compositieproces. ControlNets die worden toegepast aan het eind zorgen voor details." - ], - "heading": "Percentage begin- / eindstap" - }, - "dynamicPromptsSeedBehaviour": { - "paragraphs": [ - "Bepaalt hoe de seedwaarde wordt gebruikt bij het genereren van prompts.", - "Per iteratie zal een unieke seedwaarde worden gebruikt voor elke iteratie. Gebruik dit om de promptvariaties binnen een enkele seedwaarde te verkennen.", - "Bijvoorbeeld: als je vijf prompts heb, dan zal voor elke afbeelding dezelfde seedwaarde gebruikt worden.", - "De optie Per afbeelding zal een unieke seedwaarde voor elke afbeelding gebruiken. Dit biedt meer variatie." - ], - "heading": "Gedrag seedwaarde" - }, - "clipSkip": { - "paragraphs": [ - "Kies hoeveel CLIP-modellagen je wilt overslaan.", - "Bepaalde modellen werken beter met bepaalde Overslaan CLIP-instellingen.", - "Een hogere waarde geeft meestal een minder gedetailleerde afbeelding." - ], - "heading": "Overslaan CLIP" - }, - "paramModel": { - "heading": "Model", - "paragraphs": [ - "Model gebruikt voor de ontruisingsstappen.", - "Verschillende modellen zijn meestal getraind om zich te specialiseren in het maken van bepaalde esthetische resultaten en materiaal." - ] - }, - "compositingCoherencePass": { - "heading": "Coherentiefase", - "paragraphs": [ - "Een tweede ronde ontruising helpt bij het samenstellen van de erin- of eruitgetekende afbeelding." - ] - }, - "paramDenoisingStrength": { - "paragraphs": [ - "Hoeveel ruis wordt toegevoegd aan de invoerafbeelding.", - "0 levert een identieke afbeelding op, waarbij 1 een volledig nieuwe afbeelding oplevert." - ], - "heading": "Ontruisingssterkte" - }, - "compositingStrength": { - "heading": "Sterkte", - "paragraphs": [ - "Ontruisingssterkte voor de coherentiefase.", - "Gelijk aan de parameter Ontruisingssterkte Afbeelding naar afbeelding." - ] - }, - "paramNegativeConditioning": { - "paragraphs": [ - "Het genereerproces voorkomt de gegeven begrippen in de negatieve prompt. Gebruik dit om bepaalde zaken of voorwerpen uit te sluiten van de uitvoerafbeelding.", - "Ondersteunt Compel-syntax en -embeddingen." - ], - "heading": "Negatieve prompt" - }, - "compositingBlurMethod": { - "heading": "Vervagingsmethode", - "paragraphs": [ - "De methode van de vervaging die wordt toegepast op het gemaskeerd gebied." - ] - }, - "dynamicPromptsMaxPrompts": { - "heading": "Max. prompts", - "paragraphs": [ - "Beperkt het aantal prompts die kunnen worden gegenereerd door dynamische prompts." - ] - }, - "infillMethod": { - "paragraphs": [ - "Methode om een gekozen gebied in te vullen." - ], - "heading": "Invulmethode" - }, - "controlNetWeight": { - "heading": "Gewicht", - "paragraphs": [ - "Hoe sterk ControlNet effect heeft op de gegeneerde afbeelding." - ] - }, - "controlNet": { - "heading": "ControlNet", - "paragraphs": [ - "ControlNets begeleidt het genereerproces, waarbij geholpen wordt bij het maken van afbeeldingen met aangestuurde compositie, structuur of stijl, afhankelijk van het gekozen model." - ] - }, - "paramCFGScale": { - "heading": "CFG-schaal", - "paragraphs": [ - "Bepaalt hoeveel je prompt invloed heeft op het genereerproces." - ] - }, - "controlNetControlMode": { - "paragraphs": [ - "Geeft meer gewicht aan ofwel de prompt danwel ControlNet." - ], - "heading": "Controlemodus" - }, - "paramSteps": { - "heading": "Stappen", - "paragraphs": [ - "Het aantal uit te voeren stappen tijdens elke generatie.", - "Een hoger aantal stappen geven meestal betere afbeeldingen, ten koste van een hogere benodigde tijd om te genereren." - ] - }, - "paramPositiveConditioning": { - "heading": "Positieve prompt", - "paragraphs": [ - "Begeleidt het generartieproces. Gebruik een woord of frase naar keuze.", - "Syntaxes en embeddings voor Compel en dynamische prompts." - ] - }, - "lora": { - "heading": "Gewicht LoRA", - "paragraphs": [ - "Een hogere LoRA-gewicht zal leiden tot een groter effect op de uiteindelijke afbeelding." - ] - } - }, - "metadata": { - "seamless": "Naadloos", - "positivePrompt": "Positieve prompt", - "negativePrompt": "Negatieve prompt", - "generationMode": "Genereermodus", - "Threshold": "Drempelwaarde ruis", - "metadata": "Metagegevens", - "strength": "Sterkte Afbeelding naar afbeelding", - "seed": "Seedwaarde", - "imageDetails": "Afbeeldingsdetails", - "perlin": "Perlin-ruis", - "model": "Model", - "noImageDetails": "Geen afbeeldingsdetails gevonden", - "hiresFix": "Optimalisatie voor hoge resolutie", - "cfgScale": "CFG-schaal", - "fit": "Schaal aanpassen in Afbeelding naar afbeelding", - "initImage": "Initiële afbeelding", - "recallParameters": "Opnieuw aan te roepen parameters", - "height": "Hoogte", - "variations": "Paren seedwaarde-gewicht", - "noMetaData": "Geen metagegevens gevonden", - "width": "Breedte", - "createdBy": "Gemaakt door", - "workflow": "Werkstroom", - "steps": "Stappen", - "scheduler": "Planner", - "noRecallParameters": "Geen opnieuw uit te voeren parameters gevonden" - }, - "queue": { - "status": "Status", - "pruneSucceeded": "{{item_count}} voltooide onderdelen uit wachtrij opgeruimd", - "cancelTooltip": "Annuleer huidig onderdeel", - "queueEmpty": "Wachtrij leeg", - "pauseSucceeded": "Verwerker onderbroken", - "in_progress": "Bezig", - "queueFront": "Voeg vooraan toe in wachtrij", - "notReady": "Fout bij plaatsen in wachtrij", - "batchFailedToQueue": "Fout bij reeks in wachtrij plaatsen", - "completed": "Voltooid", - "queueBack": "Voeg toe aan wachtrij", - "batchValues": "Reekswaarden", - "cancelFailed": "Fout bij annuleren onderdeel", - "queueCountPrediction": "Voeg {{predicted}} toe aan wachtrij", - "batchQueued": "Reeks in wachtrij geplaatst", - "pauseFailed": "Fout bij onderbreken verwerker", - "clearFailed": "Fout bij wissen van wachtrij", - "queuedCount": "{{pending}} wachtend", - "front": "begin", - "clearSucceeded": "Wachtrij gewist", - "pause": "Onderbreek", - "pruneTooltip": "Ruim {{item_count}} voltooide onderdelen op", - "cancelSucceeded": "Onderdeel geannuleerd", - "batchQueuedDesc_one": "Voeg {{count}} sessie toe aan het {{direction}} van de wachtrij", - "batchQueuedDesc_other": "Voeg {{count}} sessies toe aan het {{direction}} van de wachtrij", - "graphQueued": "Graaf in wachtrij geplaatst", - "queue": "Wachtrij", - "batch": "Reeks", - "clearQueueAlertDialog": "Als je de wachtrij onmiddellijk wist, dan worden alle onderdelen die bezig zijn geannuleerd en wordt de wachtrij volledig gewist.", - "pending": "Wachtend", - "completedIn": "Voltooid na", - "resumeFailed": "Fout bij hervatten verwerker", - "clear": "Wis", - "prune": "Ruim op", - "total": "Totaal", - "canceled": "Geannuleerd", - "pruneFailed": "Fout bij opruimen van wachtrij", - "cancelBatchSucceeded": "Reeks geannuleerd", - "clearTooltip": "Annuleer en wis alle onderdelen", - "current": "Huidig", - "pauseTooltip": "Onderbreek verwerker", - "failed": "Mislukt", - "cancelItem": "Annuleer onderdeel", - "next": "Volgende", - "cancelBatch": "Annuleer reeks", - "back": "eind", - "cancel": "Annuleer", - "session": "Sessie", - "queueTotal": "Totaal {{total}}", - "resumeSucceeded": "Verwerker hervat", - "enqueueing": "Bezig met toevoegen van reeks aan wachtrij", - "resumeTooltip": "Hervat verwerker", - "queueMaxExceeded": "Max. aantal van {{max_queue_size}} overschreden, {{skip}} worden overgeslagen", - "resume": "Hervat", - "cancelBatchFailed": "Fout bij annuleren van reeks", - "clearQueueAlertDialog2": "Weet je zeker dat je de wachtrij wilt wissen?", - "item": "Onderdeel", - "graphFailedToQueue": "Fout bij toevoegen graaf aan wachtrij" - }, - "sdxl": { - "refinerStart": "Startwaarde verfijning", - "selectAModel": "Kies een model", - "scheduler": "Planner", - "cfgScale": "CFG-schaal", - "negStylePrompt": "Negatieve-stijlprompt", - "noModelsAvailable": "Geen modellen beschikbaar", - "refiner": "Verfijning", - "negAestheticScore": "Negatieve esthetische score", - "useRefiner": "Gebruik verfijning", - "denoisingStrength": "Sterkte ontruising", - "refinermodel": "Verfijningsmodel", - "posAestheticScore": "Positieve esthetische score", - "concatPromptStyle": "Plak prompt- en stijltekst aan elkaar", - "loading": "Bezig met laden...", - "steps": "Stappen", - "posStylePrompt": "Positieve-stijlprompt" - }, - "models": { - "noMatchingModels": "Geen overeenkomend modellen", - "loading": "bezig met laden", - "noMatchingLoRAs": "Geen overeenkomende LoRA's", - "noLoRAsAvailable": "Geen LoRA's beschikbaar", - "noModelsAvailable": "Geen modellen beschikbaar", - "selectModel": "Kies een model", - "selectLoRA": "Kies een LoRA" - }, - "boards": { - "autoAddBoard": "Voeg automatisch bord toe", - "topMessage": "Dit bord bevat afbeeldingen die in gebruik zijn door de volgende functies:", - "move": "Verplaats", - "menuItemAutoAdd": "Voeg dit automatisch toe aan bord", - "myBoard": "Mijn bord", - "searchBoard": "Zoek borden...", - "noMatching": "Geen overeenkomende borden", - "selectBoard": "Kies een bord", - "cancel": "Annuleer", - "addBoard": "Voeg bord toe", - "bottomMessage": "Als je dit bord en alle afbeeldingen erop verwijdert, dan worden alle functies teruggezet die ervan gebruik maken.", - "uncategorized": "Zonder categorie", - "downloadBoard": "Download bord", - "changeBoard": "Wijzig bord", - "loading": "Bezig met laden...", - "clearSearch": "Maak zoekopdracht leeg" - }, - "invocationCache": { - "disable": "Schakel uit", - "misses": "Mislukt cacheverzoek", - "enableFailed": "Fout bij inschakelen aanroepcache", - "invocationCache": "Aanroepcache", - "clearSucceeded": "Aanroepcache gewist", - "enableSucceeded": "Aanroepcache ingeschakeld", - "clearFailed": "Fout bij wissen aanroepcache", - "hits": "Gelukt cacheverzoek", - "disableSucceeded": "Aanroepcache uitgeschakeld", - "disableFailed": "Fout bij uitschakelen aanroepcache", - "enable": "Schakel in", - "clear": "Wis", - "maxCacheSize": "Max. grootte cache", - "cacheSize": "Grootte cache" - }, - "embedding": { - "noMatchingEmbedding": "Geen overeenkomende embeddings", - "addEmbedding": "Voeg embedding toe", - "incompatibleModel": "Niet-compatibel basismodel:" - } -} diff --git a/invokeai/frontend/web/dist/locales/pl.json b/invokeai/frontend/web/dist/locales/pl.json deleted file mode 100644 index f77c0c4710..0000000000 --- a/invokeai/frontend/web/dist/locales/pl.json +++ /dev/null @@ -1,461 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Skróty klawiszowe", - "languagePickerLabel": "Wybór języka", - "reportBugLabel": "Zgłoś błąd", - "settingsLabel": "Ustawienia", - "img2img": "Obraz na obraz", - "unifiedCanvas": "Tryb uniwersalny", - "nodes": "Węzły", - "langPolish": "Polski", - "nodesDesc": "W tym miejscu powstanie graficzny system generowania obrazów oparty na węzłach. Jest na co czekać!", - "postProcessing": "Przetwarzanie końcowe", - "postProcessDesc1": "Invoke AI oferuje wiele opcji przetwarzania końcowego. Z poziomu przeglądarki dostępne jest już zwiększanie rozdzielczości oraz poprawianie twarzy. Znajdziesz je wśród ustawień w trybach \"Tekst na obraz\" oraz \"Obraz na obraz\". Są również obecne w pasku menu wyświetlanym nad podglądem wygenerowanego obrazu.", - "postProcessDesc2": "Niedługo zostanie udostępniony specjalny interfejs, który będzie oferował jeszcze więcej możliwości.", - "postProcessDesc3": "Z poziomu linii poleceń już teraz dostępne są inne opcje, takie jak skalowanie obrazu metodą Embiggen.", - "training": "Trenowanie", - "trainingDesc1": "W tym miejscu dostępny będzie system przeznaczony do tworzenia własnych zanurzeń (ang. embeddings) i punktów kontrolnych przy użyciu metod w rodzaju inwersji tekstowej lub Dreambooth.", - "trainingDesc2": "Obecnie jest możliwe tworzenie własnych zanurzeń przy użyciu skryptów wywoływanych z linii poleceń.", - "upload": "Prześlij", - "close": "Zamknij", - "load": "Załaduj", - "statusConnected": "Połączono z serwerem", - "statusDisconnected": "Odłączono od serwera", - "statusError": "Błąd", - "statusPreparing": "Przygotowywanie", - "statusProcessingCanceled": "Anulowano przetwarzanie", - "statusProcessingComplete": "Zakończono przetwarzanie", - "statusGenerating": "Przetwarzanie", - "statusGeneratingTextToImage": "Przetwarzanie tekstu na obraz", - "statusGeneratingImageToImage": "Przetwarzanie obrazu na obraz", - "statusGeneratingInpainting": "Przemalowywanie", - "statusGeneratingOutpainting": "Domalowywanie", - "statusGenerationComplete": "Zakończono generowanie", - "statusIterationComplete": "Zakończono iterację", - "statusSavingImage": "Zapisywanie obrazu", - "statusRestoringFaces": "Poprawianie twarzy", - "statusRestoringFacesGFPGAN": "Poprawianie twarzy (GFPGAN)", - "statusRestoringFacesCodeFormer": "Poprawianie twarzy (CodeFormer)", - "statusUpscaling": "Powiększanie obrazu", - "statusUpscalingESRGAN": "Powiększanie (ESRGAN)", - "statusLoadingModel": "Wczytywanie modelu", - "statusModelChanged": "Zmieniono model", - "githubLabel": "GitHub", - "discordLabel": "Discord", - "darkMode": "Tryb ciemny", - "lightMode": "Tryb jasny" - }, - "gallery": { - "generations": "Wygenerowane", - "showGenerations": "Pokaż wygenerowane obrazy", - "uploads": "Przesłane", - "showUploads": "Pokaż przesłane obrazy", - "galleryImageSize": "Rozmiar obrazów", - "galleryImageResetSize": "Resetuj rozmiar", - "gallerySettings": "Ustawienia galerii", - "maintainAspectRatio": "Zachowaj proporcje", - "autoSwitchNewImages": "Przełączaj na nowe obrazy", - "singleColumnLayout": "Układ jednokolumnowy", - "allImagesLoaded": "Koniec listy", - "loadMore": "Wczytaj więcej", - "noImagesInGallery": "Brak obrazów w galerii" - }, - "hotkeys": { - "keyboardShortcuts": "Skróty klawiszowe", - "appHotkeys": "Podstawowe", - "generalHotkeys": "Pomocnicze", - "galleryHotkeys": "Galeria", - "unifiedCanvasHotkeys": "Tryb uniwersalny", - "invoke": { - "title": "Wywołaj", - "desc": "Generuje nowy obraz" - }, - "cancel": { - "title": "Anuluj", - "desc": "Zatrzymuje generowanie obrazu" - }, - "focusPrompt": { - "title": "Aktywuj pole tekstowe", - "desc": "Aktywuje pole wprowadzania sugestii" - }, - "toggleOptions": { - "title": "Przełącz panel opcji", - "desc": "Wysuwa lub chowa panel opcji" - }, - "pinOptions": { - "title": "Przypnij opcje", - "desc": "Przypina panel opcji" - }, - "toggleViewer": { - "title": "Przełącz podgląd", - "desc": "Otwiera lub zamyka widok podglądu" - }, - "toggleGallery": { - "title": "Przełącz galerię", - "desc": "Wysuwa lub chowa galerię" - }, - "maximizeWorkSpace": { - "title": "Powiększ obraz roboczy", - "desc": "Chowa wszystkie panele, zostawia tylko podgląd obrazu" - }, - "changeTabs": { - "title": "Przełącznie trybu", - "desc": "Przełącza na n-ty tryb pracy" - }, - "consoleToggle": { - "title": "Przełącz konsolę", - "desc": "Otwiera lub chowa widok konsoli" - }, - "setPrompt": { - "title": "Skopiuj sugestie", - "desc": "Kopiuje sugestie z aktywnego obrazu" - }, - "setSeed": { - "title": "Skopiuj inicjator", - "desc": "Kopiuje inicjator z aktywnego obrazu" - }, - "setParameters": { - "title": "Skopiuj wszystko", - "desc": "Kopiuje wszystkie parametry z aktualnie aktywnego obrazu" - }, - "restoreFaces": { - "title": "Popraw twarze", - "desc": "Uruchamia proces poprawiania twarzy dla aktywnego obrazu" - }, - "upscale": { - "title": "Powiększ", - "desc": "Uruchamia proces powiększania aktywnego obrazu" - }, - "showInfo": { - "title": "Pokaż informacje", - "desc": "Pokazuje metadane zapisane w aktywnym obrazie" - }, - "sendToImageToImage": { - "title": "Użyj w trybie \"Obraz na obraz\"", - "desc": "Ustawia aktywny obraz jako źródło w trybie \"Obraz na obraz\"" - }, - "deleteImage": { - "title": "Usuń obraz", - "desc": "Usuwa aktywny obraz" - }, - "closePanels": { - "title": "Zamknij panele", - "desc": "Zamyka wszystkie otwarte panele" - }, - "previousImage": { - "title": "Poprzedni obraz", - "desc": "Aktywuje poprzedni obraz z galerii" - }, - "nextImage": { - "title": "Następny obraz", - "desc": "Aktywuje następny obraz z galerii" - }, - "toggleGalleryPin": { - "title": "Przypnij galerię", - "desc": "Przypina lub odpina widok galerii" - }, - "increaseGalleryThumbSize": { - "title": "Powiększ obrazy", - "desc": "Powiększa rozmiar obrazów w galerii" - }, - "decreaseGalleryThumbSize": { - "title": "Pomniejsz obrazy", - "desc": "Pomniejsza rozmiar obrazów w galerii" - }, - "selectBrush": { - "title": "Aktywuj pędzel", - "desc": "Aktywuje narzędzie malowania" - }, - "selectEraser": { - "title": "Aktywuj gumkę", - "desc": "Aktywuje narzędzie usuwania" - }, - "decreaseBrushSize": { - "title": "Zmniejsz rozmiar narzędzia", - "desc": "Zmniejsza rozmiar aktywnego narzędzia" - }, - "increaseBrushSize": { - "title": "Zwiększ rozmiar narzędzia", - "desc": "Zwiększa rozmiar aktywnego narzędzia" - }, - "decreaseBrushOpacity": { - "title": "Zmniejsz krycie", - "desc": "Zmniejsza poziom krycia pędzla" - }, - "increaseBrushOpacity": { - "title": "Zwiększ", - "desc": "Zwiększa poziom krycia pędzla" - }, - "moveTool": { - "title": "Aktywuj przesunięcie", - "desc": "Włącza narzędzie przesuwania" - }, - "fillBoundingBox": { - "title": "Wypełnij zaznaczenie", - "desc": "Wypełnia zaznaczony obszar aktualnym kolorem pędzla" - }, - "eraseBoundingBox": { - "title": "Wyczyść zaznaczenia", - "desc": "Usuwa całą zawartość zaznaczonego obszaru" - }, - "colorPicker": { - "title": "Aktywuj pipetę", - "desc": "Włącza narzędzie kopiowania koloru" - }, - "toggleSnap": { - "title": "Przyciąganie do siatki", - "desc": "Włącza lub wyłącza opcje przyciągania do siatki" - }, - "quickToggleMove": { - "title": "Szybkie przesunięcie", - "desc": "Tymczasowo włącza tryb przesuwania obszaru roboczego" - }, - "toggleLayer": { - "title": "Przełącz wartwę", - "desc": "Przełącza pomiędzy warstwą bazową i maskowania" - }, - "clearMask": { - "title": "Wyczyść maskę", - "desc": "Usuwa całą zawartość warstwy maskowania" - }, - "hideMask": { - "title": "Przełącz maskę", - "desc": "Pokazuje lub ukrywa podgląd maski" - }, - "showHideBoundingBox": { - "title": "Przełącz zaznaczenie", - "desc": "Pokazuje lub ukrywa podgląd zaznaczenia" - }, - "mergeVisible": { - "title": "Połącz widoczne", - "desc": "Łączy wszystkie widoczne maski w jeden obraz" - }, - "saveToGallery": { - "title": "Zapisz w galerii", - "desc": "Zapisuje całą zawartość płótna w galerii" - }, - "copyToClipboard": { - "title": "Skopiuj do schowka", - "desc": "Zapisuje zawartość płótna w schowku systemowym" - }, - "downloadImage": { - "title": "Pobierz obraz", - "desc": "Zapisuje zawartość płótna do pliku obrazu" - }, - "undoStroke": { - "title": "Cofnij", - "desc": "Cofa ostatnie pociągnięcie pędzlem" - }, - "redoStroke": { - "title": "Ponawia", - "desc": "Ponawia cofnięte pociągnięcie pędzlem" - }, - "resetView": { - "title": "Resetuj widok", - "desc": "Centruje widok płótna" - }, - "previousStagingImage": { - "title": "Poprzedni obraz tymczasowy", - "desc": "Pokazuje poprzedni obraz tymczasowy" - }, - "nextStagingImage": { - "title": "Następny obraz tymczasowy", - "desc": "Pokazuje następny obraz tymczasowy" - }, - "acceptStagingImage": { - "title": "Akceptuj obraz tymczasowy", - "desc": "Akceptuje aktualnie wybrany obraz tymczasowy" - } - }, - "parameters": { - "images": "L. obrazów", - "steps": "L. kroków", - "cfgScale": "Skala CFG", - "width": "Szerokość", - "height": "Wysokość", - "seed": "Inicjator", - "randomizeSeed": "Losowy inicjator", - "shuffle": "Losuj", - "noiseThreshold": "Poziom szumu", - "perlinNoise": "Szum Perlina", - "variations": "Wariacje", - "variationAmount": "Poziom zróżnicowania", - "seedWeights": "Wariacje inicjatora", - "faceRestoration": "Poprawianie twarzy", - "restoreFaces": "Popraw twarze", - "type": "Metoda", - "strength": "Siła", - "upscaling": "Powiększanie", - "upscale": "Powiększ", - "upscaleImage": "Powiększ obraz", - "scale": "Skala", - "otherOptions": "Pozostałe opcje", - "seamlessTiling": "Płynne scalanie", - "hiresOptim": "Optymalizacja wys. rozdzielczości", - "imageFit": "Przeskaluj oryginalny obraz", - "codeformerFidelity": "Dokładność", - "scaleBeforeProcessing": "Tryb skalowania", - "scaledWidth": "Sk. do szer.", - "scaledHeight": "Sk. do wys.", - "infillMethod": "Metoda wypełniania", - "tileSize": "Rozmiar kafelka", - "boundingBoxHeader": "Zaznaczony obszar", - "seamCorrectionHeader": "Scalanie", - "infillScalingHeader": "Wypełnienie i skalowanie", - "img2imgStrength": "Wpływ sugestii na obraz", - "toggleLoopback": "Wł/wył sprzężenie zwrotne", - "sendTo": "Wyślij do", - "sendToImg2Img": "Użyj w trybie \"Obraz na obraz\"", - "sendToUnifiedCanvas": "Użyj w trybie uniwersalnym", - "copyImageToLink": "Skopiuj adres obrazu", - "downloadImage": "Pobierz obraz", - "openInViewer": "Otwórz podgląd", - "closeViewer": "Zamknij podgląd", - "usePrompt": "Skopiuj sugestie", - "useSeed": "Skopiuj inicjator", - "useAll": "Skopiuj wszystko", - "useInitImg": "Użyj oryginalnego obrazu", - "info": "Informacje", - "initialImage": "Oryginalny obraz", - "showOptionsPanel": "Pokaż panel ustawień" - }, - "settings": { - "models": "Modele", - "displayInProgress": "Podgląd generowanego obrazu", - "saveSteps": "Zapisuj obrazy co X kroków", - "confirmOnDelete": "Potwierdzaj usuwanie", - "displayHelpIcons": "Wyświetlaj ikony pomocy", - "enableImageDebugging": "Włącz debugowanie obrazu", - "resetWebUI": "Zresetuj interfejs", - "resetWebUIDesc1": "Resetowanie interfejsu wyczyści jedynie dane i ustawienia zapisane w pamięci przeglądarki. Nie usunie żadnych obrazów z dysku.", - "resetWebUIDesc2": "Jeśli obrazy nie są poprawnie wyświetlane w galerii lub doświadczasz innych problemów, przed zgłoszeniem błędu spróbuj zresetować interfejs.", - "resetComplete": "Interfejs został zresetowany. Odśwież stronę, aby załadować ponownie." - }, - "toast": { - "tempFoldersEmptied": "Wyczyszczono folder tymczasowy", - "uploadFailed": "Błąd przesyłania obrazu", - "uploadFailedUnableToLoadDesc": "Błąd wczytywania obrazu", - "downloadImageStarted": "Rozpoczęto pobieranie", - "imageCopied": "Skopiowano obraz", - "imageLinkCopied": "Skopiowano link do obrazu", - "imageNotLoaded": "Nie wczytano obrazu", - "imageNotLoadedDesc": "Nie znaleziono obrazu, który można użyć w Obraz na obraz", - "imageSavedToGallery": "Zapisano obraz w galerii", - "canvasMerged": "Scalono widoczne warstwy", - "sentToImageToImage": "Wysłano do Obraz na obraz", - "sentToUnifiedCanvas": "Wysłano do trybu uniwersalnego", - "parametersSet": "Ustawiono parametry", - "parametersNotSet": "Nie ustawiono parametrów", - "parametersNotSetDesc": "Nie znaleziono metadanych dla wybranego obrazu", - "parametersFailed": "Problem z wczytaniem parametrów", - "parametersFailedDesc": "Problem z wczytaniem oryginalnego obrazu", - "seedSet": "Ustawiono inicjator", - "seedNotSet": "Nie ustawiono inicjatora", - "seedNotSetDesc": "Nie znaleziono inicjatora dla wybranego obrazu", - "promptSet": "Ustawiono sugestie", - "promptNotSet": "Nie ustawiono sugestii", - "promptNotSetDesc": "Nie znaleziono zapytania dla wybranego obrazu", - "upscalingFailed": "Błąd powiększania obrazu", - "faceRestoreFailed": "Błąd poprawiania twarzy", - "metadataLoadFailed": "Błąd wczytywania metadanych", - "initialImageSet": "Ustawiono oryginalny obraz", - "initialImageNotSet": "Nie ustawiono oryginalnego obrazu", - "initialImageNotSetDesc": "Błąd wczytywania oryginalnego obrazu" - }, - "tooltip": { - "feature": { - "prompt": "To pole musi zawierać cały tekst sugestii, w tym zarówno opis oczekiwanej zawartości, jak i terminy stylistyczne. Chociaż wagi mogą być zawarte w sugestiach, inne parametry znane z linii poleceń nie będą działać.", - "gallery": "W miarę generowania nowych wywołań w tym miejscu będą wyświetlane pliki z katalogu wyjściowego. Obrazy mają dodatkowo opcje konfiguracji nowych wywołań.", - "other": "Opcje umożliwią alternatywne tryby przetwarzania. Płynne scalanie będzie pomocne przy generowaniu powtarzających się wzorów. Optymalizacja wysokiej rozdzielczości wykonuje dwuetapowy cykl generowania i powinna być używana przy wyższych rozdzielczościach, gdy potrzebny jest bardziej spójny obraz/kompozycja.", - "seed": "Inicjator określa początkowy zestaw szumów, który kieruje procesem odszumiania i może być losowy lub pobrany z poprzedniego wywołania. Funkcja \"Poziom szumu\" może być użyta do złagodzenia saturacji przy wyższych wartościach CFG (spróbuj między 0-10), a Perlin może być użyty w celu dodania wariacji do twoich wyników.", - "variations": "Poziom zróżnicowania przyjmuje wartości od 0 do 1 i pozwala zmienić obraz wyjściowy dla ustawionego inicjatora. Interesujące wyniki uzyskuje się zwykle między 0,1 a 0,3.", - "upscale": "Korzystając z ESRGAN, możesz zwiększyć rozdzielczość obrazu wyjściowego bez konieczności zwiększania szerokości/wysokości w ustawieniach początkowych.", - "faceCorrection": "Poprawianie twarzy próbuje identyfikować twarze na obrazie wyjściowym i korygować wszelkie defekty/nieprawidłowości. W GFPGAN im większa siła, tym mocniejszy efekt. W metodzie Codeformer wyższa wartość oznacza bardziej wierne odtworzenie oryginalnej twarzy, nawet kosztem siły korekcji.", - "imageToImage": "Tryb \"Obraz na obraz\" pozwala na załadowanie obrazu wzorca, który obok wprowadzonych sugestii zostanie użyty porzez InvokeAI do wygenerowania nowego obrazu. Niższa wartość tego ustawienia będzie bardziej przypominać oryginalny obraz. Akceptowane są wartości od 0 do 1, a zalecany jest zakres od 0,25 do 0,75.", - "boundingBox": "Zaznaczony obszar odpowiada ustawieniom wysokości i szerokości w trybach Tekst na obraz i Obraz na obraz. Jedynie piksele znajdujące się w obszarze zaznaczenia zostaną uwzględnione podczas wywoływania nowego obrazu.", - "seamCorrection": "Opcje wpływające na poziom widoczności szwów, które mogą wystąpić, gdy wygenerowany obraz jest ponownie wklejany na płótno.", - "infillAndScaling": "Zarządzaj metodami wypełniania (używanymi na zamaskowanych lub wymazanych obszarach płótna) i skalowaniem (przydatne w przypadku zaznaczonego obszaru o b. małych rozmiarach)." - } - }, - "unifiedCanvas": { - "layer": "Warstwa", - "base": "Główna", - "mask": "Maska", - "maskingOptions": "Opcje maski", - "enableMask": "Włącz maskę", - "preserveMaskedArea": "Zachowaj obszar", - "clearMask": "Wyczyść maskę", - "brush": "Pędzel", - "eraser": "Gumka", - "fillBoundingBox": "Wypełnij zaznaczenie", - "eraseBoundingBox": "Wyczyść zaznaczenie", - "colorPicker": "Pipeta", - "brushOptions": "Ustawienia pędzla", - "brushSize": "Rozmiar", - "move": "Przesunięcie", - "resetView": "Resetuj widok", - "mergeVisible": "Scal warstwy", - "saveToGallery": "Zapisz w galerii", - "copyToClipboard": "Skopiuj do schowka", - "downloadAsImage": "Zapisz do pliku", - "undo": "Cofnij", - "redo": "Ponów", - "clearCanvas": "Wyczyść obraz", - "canvasSettings": "Ustawienia obrazu", - "showIntermediates": "Pokazuj stany pośrednie", - "showGrid": "Pokazuj siatkę", - "snapToGrid": "Przyciągaj do siatki", - "darkenOutsideSelection": "Przyciemnij poza zaznaczeniem", - "autoSaveToGallery": "Zapisuj automatycznie do galerii", - "saveBoxRegionOnly": "Zapisuj tylko zaznaczony obszar", - "limitStrokesToBox": "Rysuj tylko wewnątrz zaznaczenia", - "showCanvasDebugInfo": "Informacje dla developera", - "clearCanvasHistory": "Wyczyść historię operacji", - "clearHistory": "Wyczyść historię", - "clearCanvasHistoryMessage": "Wyczyszczenie historii nie będzie miało wpływu na sam obraz, ale niemożliwe będzie cofnięcie i otworzenie wszystkich wykonanych do tej pory operacji.", - "clearCanvasHistoryConfirm": "Czy na pewno chcesz wyczyścić historię operacji?", - "emptyTempImageFolder": "Wyczyść folder tymczasowy", - "emptyFolder": "Wyczyść", - "emptyTempImagesFolderMessage": "Wyczyszczenie folderu tymczasowego spowoduje usunięcie obrazu i maski w trybie uniwersalnym, historii operacji, oraz wszystkich wygenerowanych ale niezapisanych obrazów.", - "emptyTempImagesFolderConfirm": "Czy na pewno chcesz wyczyścić folder tymczasowy?", - "activeLayer": "Warstwa aktywna", - "canvasScale": "Poziom powiększenia", - "boundingBox": "Rozmiar zaznaczenia", - "scaledBoundingBox": "Rozmiar po skalowaniu", - "boundingBoxPosition": "Pozycja zaznaczenia", - "canvasDimensions": "Rozmiar płótna", - "canvasPosition": "Pozycja płótna", - "cursorPosition": "Pozycja kursora", - "previous": "Poprzedni", - "next": "Następny", - "accept": "Zaakceptuj", - "showHide": "Pokaż/Ukryj", - "discardAll": "Odrzuć wszystkie", - "betaClear": "Wyczyść", - "betaDarkenOutside": "Przyciemnienie", - "betaLimitToBox": "Ogranicz do zaznaczenia", - "betaPreserveMasked": "Zachowaj obszar" - }, - "accessibility": { - "zoomIn": "Przybliż", - "exitViewer": "Wyjdź z podglądu", - "modelSelect": "Wybór modelu", - "invokeProgressBar": "Pasek postępu", - "reset": "Zerowanie", - "useThisParameter": "Użyj tego parametru", - "copyMetadataJson": "Kopiuj metadane JSON", - "uploadImage": "Wgrywanie obrazu", - "previousImage": "Poprzedni obraz", - "nextImage": "Następny obraz", - "zoomOut": "Oddal", - "rotateClockwise": "Obróć zgodnie ze wskazówkami zegara", - "rotateCounterClockwise": "Obróć przeciwnie do wskazówek zegara", - "flipHorizontally": "Odwróć horyzontalnie", - "flipVertically": "Odwróć wertykalnie", - "modifyConfig": "Modyfikuj ustawienia", - "toggleAutoscroll": "Przełącz autoprzewijanie", - "toggleLogViewer": "Przełącz podgląd logów", - "showOptionsPanel": "Pokaż panel opcji", - "menu": "Menu" - } -} diff --git a/invokeai/frontend/web/dist/locales/pt.json b/invokeai/frontend/web/dist/locales/pt.json deleted file mode 100644 index ac9dd50b4d..0000000000 --- a/invokeai/frontend/web/dist/locales/pt.json +++ /dev/null @@ -1,602 +0,0 @@ -{ - "common": { - "langArabic": "العربية", - "reportBugLabel": "Reportar Bug", - "settingsLabel": "Configurações", - "langBrPortuguese": "Português do Brasil", - "languagePickerLabel": "Seletor de Idioma", - "langDutch": "Nederlands", - "langEnglish": "English", - "hotkeysLabel": "Hotkeys", - "langPolish": "Polski", - "langFrench": "Français", - "langGerman": "Deutsch", - "langItalian": "Italiano", - "langJapanese": "日本語", - "langSimplifiedChinese": "简体中文", - "langSpanish": "Espanhol", - "langRussian": "Русский", - "langUkranian": "Украї́нська", - "img2img": "Imagem para Imagem", - "unifiedCanvas": "Tela Unificada", - "nodes": "Nós", - "nodesDesc": "Um sistema baseado em nós para a geração de imagens está em desenvolvimento atualmente. Fique atento para atualizações sobre este recurso incrível.", - "postProcessDesc3": "A Interface de Linha de Comando do Invoke AI oferece vários outros recursos, incluindo o Embiggen.", - "postProcessing": "Pós Processamento", - "postProcessDesc1": "O Invoke AI oferece uma ampla variedade de recursos de pós-processamento. O aumento de resolução de imagem e a restauração de rosto já estão disponíveis na interface do usuário da Web. Você pode acessá-los no menu Opções Avançadas das guias Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da exibição da imagem atual ou no visualizador.", - "postProcessDesc2": "Em breve, uma interface do usuário dedicada será lançada para facilitar fluxos de trabalho de pós-processamento mais avançados.", - "trainingDesc1": "Um fluxo de trabalho dedicado para treinar seus próprios embeddings e checkpoints usando Textual Inversion e Dreambooth da interface da web.", - "trainingDesc2": "O InvokeAI já oferece suporte ao treinamento de embeddings personalizados usando a Inversão Textual por meio do script principal.", - "upload": "Upload", - "statusError": "Erro", - "statusGeneratingTextToImage": "Gerando Texto para Imagem", - "close": "Fechar", - "load": "Abrir", - "back": "Voltar", - "statusConnected": "Conectado", - "statusDisconnected": "Desconectado", - "statusPreparing": "Preparando", - "statusGenerating": "Gerando", - "statusProcessingCanceled": "Processamento Cancelado", - "statusProcessingComplete": "Processamento Completo", - "statusGeneratingImageToImage": "Gerando Imagem para Imagem", - "statusGeneratingInpainting": "Geração de Preenchimento de Lacunas", - "statusIterationComplete": "Iteração Completa", - "statusSavingImage": "Salvando Imagem", - "statusRestoringFacesGFPGAN": "Restaurando Faces (GFPGAN)", - "statusRestoringFaces": "Restaurando Faces", - "statusRestoringFacesCodeFormer": "Restaurando Faces (CodeFormer)", - "statusUpscaling": "Ampliando", - "statusUpscalingESRGAN": "Ampliando (ESRGAN)", - "statusConvertingModel": "Convertendo Modelo", - "statusModelConverted": "Modelo Convertido", - "statusLoadingModel": "Carregando Modelo", - "statusModelChanged": "Modelo Alterado", - "githubLabel": "Github", - "discordLabel": "Discord", - "training": "Treinando", - "statusGeneratingOutpainting": "Geração de Ampliação", - "statusGenerationComplete": "Geração Completa", - "statusMergingModels": "Mesclando Modelos", - "statusMergedModels": "Modelos Mesclados", - "loading": "A carregar", - "loadingInvokeAI": "A carregar Invoke AI", - "langPortuguese": "Português" - }, - "gallery": { - "galleryImageResetSize": "Resetar Imagem", - "gallerySettings": "Configurações de Galeria", - "maintainAspectRatio": "Mater Proporções", - "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", - "singleColumnLayout": "Disposição em Coluna Única", - "allImagesLoaded": "Todas as Imagens Carregadas", - "loadMore": "Carregar Mais", - "noImagesInGallery": "Sem Imagens na Galeria", - "generations": "Gerações", - "showGenerations": "Mostrar Gerações", - "uploads": "Enviados", - "showUploads": "Mostrar Enviados", - "galleryImageSize": "Tamanho da Imagem" - }, - "hotkeys": { - "generalHotkeys": "Atalhos Gerais", - "galleryHotkeys": "Atalhos da Galeria", - "toggleViewer": { - "title": "Ativar Visualizador", - "desc": "Abrir e fechar o Visualizador de Imagens" - }, - "maximizeWorkSpace": { - "desc": "Fechar painéis e maximixar área de trabalho", - "title": "Maximizar a Área de Trabalho" - }, - "changeTabs": { - "title": "Mudar Guias", - "desc": "Trocar para outra área de trabalho" - }, - "consoleToggle": { - "desc": "Abrir e fechar console", - "title": "Ativar Console" - }, - "setPrompt": { - "title": "Definir Prompt", - "desc": "Usar o prompt da imagem atual" - }, - "sendToImageToImage": { - "desc": "Manda a imagem atual para Imagem Para Imagem", - "title": "Mandar para Imagem Para Imagem" - }, - "previousImage": { - "desc": "Mostra a imagem anterior na galeria", - "title": "Imagem Anterior" - }, - "nextImage": { - "title": "Próxima Imagem", - "desc": "Mostra a próxima imagem na galeria" - }, - "decreaseGalleryThumbSize": { - "desc": "Diminui o tamanho das thumbs na galeria", - "title": "Diminuir Tamanho da Galeria de Imagem" - }, - "selectBrush": { - "title": "Selecionar Pincel", - "desc": "Seleciona o pincel" - }, - "selectEraser": { - "title": "Selecionar Apagador", - "desc": "Seleciona o apagador" - }, - "decreaseBrushSize": { - "title": "Diminuir Tamanho do Pincel", - "desc": "Diminui o tamanho do pincel/apagador" - }, - "increaseBrushOpacity": { - "desc": "Aumenta a opacidade do pincel", - "title": "Aumentar Opacidade do Pincel" - }, - "moveTool": { - "title": "Ferramenta Mover", - "desc": "Permite navegar pela tela" - }, - "decreaseBrushOpacity": { - "desc": "Diminui a opacidade do pincel", - "title": "Diminuir Opacidade do Pincel" - }, - "toggleSnap": { - "title": "Ativar Encaixe", - "desc": "Ativa Encaixar na Grade" - }, - "quickToggleMove": { - "title": "Ativar Mover Rapidamente", - "desc": "Temporariamente ativa o modo Mover" - }, - "toggleLayer": { - "title": "Ativar Camada", - "desc": "Ativa a seleção de camada de máscara/base" - }, - "clearMask": { - "title": "Limpar Máscara", - "desc": "Limpa toda a máscara" - }, - "hideMask": { - "title": "Esconder Máscara", - "desc": "Esconde e Revela a máscara" - }, - "mergeVisible": { - "title": "Fundir Visível", - "desc": "Fundir todas as camadas visíveis das telas" - }, - "downloadImage": { - "desc": "Descarregar a tela atual", - "title": "Descarregar Imagem" - }, - "undoStroke": { - "title": "Desfazer Traço", - "desc": "Desfaz um traço de pincel" - }, - "redoStroke": { - "title": "Refazer Traço", - "desc": "Refaz o traço de pincel" - }, - "keyboardShortcuts": "Atalhos de Teclado", - "appHotkeys": "Atalhos do app", - "invoke": { - "title": "Invocar", - "desc": "Gerar uma imagem" - }, - "cancel": { - "title": "Cancelar", - "desc": "Cancelar geração de imagem" - }, - "focusPrompt": { - "title": "Foco do Prompt", - "desc": "Foco da área de texto do prompt" - }, - "toggleOptions": { - "title": "Ativar Opções", - "desc": "Abrir e fechar o painel de opções" - }, - "pinOptions": { - "title": "Fixar Opções", - "desc": "Fixar o painel de opções" - }, - "closePanels": { - "title": "Fechar Painéis", - "desc": "Fecha os painéis abertos" - }, - "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", - "toggleGallery": { - "title": "Ativar Galeria", - "desc": "Abrir e fechar a gaveta da galeria" - }, - "setSeed": { - "title": "Definir Seed", - "desc": "Usar seed da imagem atual" - }, - "setParameters": { - "title": "Definir Parâmetros", - "desc": "Usar todos os parâmetros da imagem atual" - }, - "restoreFaces": { - "title": "Restaurar Rostos", - "desc": "Restaurar a imagem atual" - }, - "upscale": { - "title": "Redimensionar", - "desc": "Redimensionar a imagem atual" - }, - "showInfo": { - "title": "Mostrar Informações", - "desc": "Mostrar metadados de informações da imagem atual" - }, - "deleteImage": { - "title": "Apagar Imagem", - "desc": "Apaga a imagem atual" - }, - "toggleGalleryPin": { - "title": "Ativar Fixar Galeria", - "desc": "Fixa e desafixa a galeria na interface" - }, - "increaseGalleryThumbSize": { - "title": "Aumentar Tamanho da Galeria de Imagem", - "desc": "Aumenta o tamanho das thumbs na galeria" - }, - "increaseBrushSize": { - "title": "Aumentar Tamanho do Pincel", - "desc": "Aumenta o tamanho do pincel/apagador" - }, - "fillBoundingBox": { - "title": "Preencher Caixa Delimitadora", - "desc": "Preenche a caixa delimitadora com a cor do pincel" - }, - "eraseBoundingBox": { - "title": "Apagar Caixa Delimitadora", - "desc": "Apaga a área da caixa delimitadora" - }, - "colorPicker": { - "title": "Selecionar Seletor de Cor", - "desc": "Seleciona o seletor de cores" - }, - "showHideBoundingBox": { - "title": "Mostrar/Esconder Caixa Delimitadora", - "desc": "Ativa a visibilidade da caixa delimitadora" - }, - "saveToGallery": { - "title": "Gravara Na Galeria", - "desc": "Grava a tela atual na galeria" - }, - "copyToClipboard": { - "title": "Copiar para a Área de Transferência", - "desc": "Copia a tela atual para a área de transferência" - }, - "resetView": { - "title": "Resetar Visualização", - "desc": "Reseta Visualização da Tela" - }, - "previousStagingImage": { - "title": "Imagem de Preparação Anterior", - "desc": "Área de Imagem de Preparação Anterior" - }, - "nextStagingImage": { - "title": "Próxima Imagem de Preparação Anterior", - "desc": "Próxima Área de Imagem de Preparação Anterior" - }, - "acceptStagingImage": { - "title": "Aceitar Imagem de Preparação Anterior", - "desc": "Aceitar Área de Imagem de Preparação Anterior" - } - }, - "modelManager": { - "modelAdded": "Modelo Adicionado", - "modelUpdated": "Modelo Atualizado", - "modelEntryDeleted": "Entrada de modelo excluída", - "description": "Descrição", - "modelLocationValidationMsg": "Caminho para onde o seu modelo está localizado.", - "repo_id": "Repo ID", - "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", - "width": "Largura", - "widthValidationMsg": "Largura padrão do seu modelo.", - "height": "Altura", - "heightValidationMsg": "Altura padrão do seu modelo.", - "findModels": "Encontrar Modelos", - "scanAgain": "Digitalize Novamente", - "deselectAll": "Deselecionar Tudo", - "showExisting": "Mostrar Existente", - "deleteConfig": "Apagar Config", - "convertToDiffusersHelpText6": "Deseja converter este modelo?", - "mergedModelName": "Nome do modelo mesclado", - "alpha": "Alpha", - "interpolationType": "Tipo de Interpolação", - "modelMergeHeaderHelp1": "Pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", - "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro.", - "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", - "nameValidationMsg": "Insira um nome para o seu modelo", - "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", - "config": "Configuração", - "modelExists": "Modelo Existe", - "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", - "noModelsFound": "Nenhum Modelo Encontrado", - "v2_768": "v2 (768px)", - "inpainting": "v1 Inpainting", - "customConfig": "Configuração personalizada", - "pathToCustomConfig": "Caminho para configuração personalizada", - "statusConverting": "A converter", - "modelConverted": "Modelo Convertido", - "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", - "addDifference": "Adicionar diferença", - "pickModelType": "Escolha o tipo de modelo", - "safetensorModels": "SafeTensors", - "cannotUseSpaces": "Não pode usar espaços", - "addNew": "Adicionar Novo", - "addManually": "Adicionar Manualmente", - "manual": "Manual", - "name": "Nome", - "configValidationMsg": "Caminho para o ficheiro de configuração do seu modelo.", - "modelLocation": "Localização do modelo", - "repoIDValidationMsg": "Repositório Online do seu Modelo", - "updateModel": "Atualizar Modelo", - "availableModels": "Modelos Disponíveis", - "load": "Carregar", - "active": "Ativado", - "notLoaded": "Não carregado", - "deleteModel": "Apagar modelo", - "deleteMsg1": "Tem certeza de que deseja apagar esta entrada do modelo de InvokeAI?", - "deleteMsg2": "Isso não vai apagar o ficheiro de modelo checkpoint do seu disco. Pode lê-los, se desejar.", - "convertToDiffusers": "Converter para Diffusers", - "convertToDiffusersHelpText1": "Este modelo será convertido ao formato 🧨 Diffusers.", - "convertToDiffusersHelpText2": "Este processo irá substituir a sua entrada de Gestor de Modelos por uma versão Diffusers do mesmo modelo.", - "convertToDiffusersHelpText3": "O seu ficheiro de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Pode adicionar o seu ponto de verificação ao Gestor de modelos novamente, se desejar.", - "convertToDiffusersSaveLocation": "Local para Gravar", - "v2_base": "v2 (512px)", - "mergeModels": "Mesclar modelos", - "modelOne": "Modelo 1", - "modelTwo": "Modelo 2", - "modelThree": "Modelo 3", - "mergedModelSaveLocation": "Local de Salvamento", - "merge": "Mesclar", - "modelsMerged": "Modelos mesclados", - "mergedModelCustomSaveLocation": "Caminho Personalizado", - "invokeAIFolder": "Pasta Invoke AI", - "inverseSigmoid": "Sigmóide Inversa", - "none": "nenhum", - "modelManager": "Gerente de Modelo", - "model": "Modelo", - "allModels": "Todos os Modelos", - "checkpointModels": "Checkpoints", - "diffusersModels": "Diffusers", - "addNewModel": "Adicionar Novo modelo", - "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", - "addDiffuserModel": "Adicionar Diffusers", - "vaeLocation": "Localização VAE", - "vaeLocationValidationMsg": "Caminho para onde o seu VAE está localizado.", - "vaeRepoID": "VAE Repo ID", - "addModel": "Adicionar Modelo", - "search": "Procurar", - "cached": "Em cache", - "checkpointFolder": "Pasta de Checkpoint", - "clearCheckpointFolder": "Apagar Pasta de Checkpoint", - "modelsFound": "Modelos Encontrados", - "selectFolder": "Selecione a Pasta", - "selected": "Selecionada", - "selectAll": "Selecionar Tudo", - "addSelected": "Adicione Selecionado", - "delete": "Apagar", - "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", - "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", - "formMessageDiffusersVAELocation": "Localização do VAE", - "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo ficheiro VAE dentro do local do modelo.", - "convert": "Converter", - "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, a depender das especificações do seu computador.", - "convertToDiffusersHelpText5": "Por favor, certifique-se de que tenha espaço suficiente no disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", - "v1": "v1", - "sameFolder": "Mesma pasta", - "invokeRoot": "Pasta do InvokeAI", - "custom": "Personalizado", - "customSaveLocation": "Local de salvamento personalizado", - "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam numa influência menor do segundo modelo.", - "sigmoid": "Sigmóide", - "weightedSum": "Soma Ponderada" - }, - "parameters": { - "width": "Largura", - "seed": "Seed", - "hiresStrength": "Força da Alta Resolução", - "general": "Geral", - "randomizeSeed": "Seed Aleatório", - "shuffle": "Embaralhar", - "noiseThreshold": "Limite de Ruído", - "perlinNoise": "Ruído de Perlin", - "variations": "Variatções", - "seedWeights": "Pesos da Seed", - "restoreFaces": "Restaurar Rostos", - "faceRestoration": "Restauração de Rosto", - "type": "Tipo", - "denoisingStrength": "A força de remoção de ruído", - "scale": "Escala", - "otherOptions": "Outras Opções", - "seamlessTiling": "Ladrilho Sem Fronteira", - "hiresOptim": "Otimização de Alta Res", - "imageFit": "Caber Imagem Inicial No Tamanho de Saída", - "codeformerFidelity": "Fidelidade", - "tileSize": "Tamanho do Ladrilho", - "boundingBoxHeader": "Caixa Delimitadora", - "seamCorrectionHeader": "Correção de Fronteira", - "infillScalingHeader": "Preencimento e Escala", - "img2imgStrength": "Força de Imagem Para Imagem", - "toggleLoopback": "Ativar Loopback", - "symmetry": "Simetria", - "sendTo": "Mandar para", - "openInViewer": "Abrir No Visualizador", - "closeViewer": "Fechar Visualizador", - "usePrompt": "Usar Prompt", - "initialImage": "Imagem inicial", - "showOptionsPanel": "Mostrar Painel de Opções", - "strength": "Força", - "upscaling": "Redimensionando", - "upscale": "Redimensionar", - "upscaleImage": "Redimensionar Imagem", - "scaleBeforeProcessing": "Escala Antes do Processamento", - "images": "Imagems", - "steps": "Passos", - "cfgScale": "Escala CFG", - "height": "Altura", - "imageToImage": "Imagem para Imagem", - "variationAmount": "Quntidade de Variatções", - "scaledWidth": "L Escalada", - "scaledHeight": "A Escalada", - "infillMethod": "Método de Preenchimento", - "hSymmetryStep": "H Passo de Simetria", - "vSymmetryStep": "V Passo de Simetria", - "cancel": { - "immediate": "Cancelar imediatamente", - "schedule": "Cancelar após a iteração atual", - "isScheduled": "A cancelar", - "setType": "Definir tipo de cancelamento" - }, - "sendToImg2Img": "Mandar para Imagem Para Imagem", - "sendToUnifiedCanvas": "Mandar para Tela Unificada", - "copyImage": "Copiar imagem", - "copyImageToLink": "Copiar Imagem Para a Ligação", - "downloadImage": "Descarregar Imagem", - "useSeed": "Usar Seed", - "useAll": "Usar Todos", - "useInitImg": "Usar Imagem Inicial", - "info": "Informações" - }, - "settings": { - "confirmOnDelete": "Confirmar Antes de Apagar", - "displayHelpIcons": "Mostrar Ícones de Ajuda", - "enableImageDebugging": "Ativar Depuração de Imagem", - "useSlidersForAll": "Usar deslizadores para todas as opções", - "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", - "models": "Modelos", - "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", - "saveSteps": "Gravar imagens a cada n passos", - "resetWebUI": "Reiniciar Interface", - "resetWebUIDesc2": "Se as imagens não estão a aparecer na galeria ou algo mais não está a funcionar, favor tentar reiniciar antes de postar um problema no GitHub.", - "resetComplete": "A interface foi reiniciada. Atualize a página para carregar." - }, - "toast": { - "uploadFailed": "Envio Falhou", - "uploadFailedUnableToLoadDesc": "Não foj possível carregar o ficheiro", - "downloadImageStarted": "Download de Imagem Começou", - "imageNotLoadedDesc": "Nenhuma imagem encontrada a enviar para o módulo de imagem para imagem", - "imageLinkCopied": "Ligação de Imagem Copiada", - "imageNotLoaded": "Nenhuma Imagem Carregada", - "parametersFailed": "Problema ao carregar parâmetros", - "parametersFailedDesc": "Não foi possível carregar imagem incial.", - "seedSet": "Seed Definida", - "upscalingFailed": "Redimensionamento Falhou", - "promptNotSet": "Prompt Não Definido", - "tempFoldersEmptied": "Pasta de Ficheiros Temporários Esvaziada", - "imageCopied": "Imagem Copiada", - "imageSavedToGallery": "Imagem Salva na Galeria", - "canvasMerged": "Tela Fundida", - "sentToImageToImage": "Mandar Para Imagem Para Imagem", - "sentToUnifiedCanvas": "Enviada para a Tela Unificada", - "parametersSet": "Parâmetros Definidos", - "parametersNotSet": "Parâmetros Não Definidos", - "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", - "seedNotSet": "Seed Não Definida", - "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", - "promptSet": "Prompt Definido", - "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", - "faceRestoreFailed": "Restauração de Rosto Falhou", - "metadataLoadFailed": "Falha ao tentar carregar metadados", - "initialImageSet": "Imagem Inicial Definida", - "initialImageNotSet": "Imagem Inicial Não Definida", - "initialImageNotSetDesc": "Não foi possível carregar imagem incial" - }, - "tooltip": { - "feature": { - "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", - "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", - "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10) e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", - "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", - "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, a resultar em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", - "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", - "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em ficheiros e acessadas pelo menu de contexto.", - "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3.", - "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", - "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", - "infillAndScaling": "Gira os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos)." - } - }, - "unifiedCanvas": { - "emptyTempImagesFolderMessage": "Esvaziar a pasta de ficheiros de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", - "scaledBoundingBox": "Caixa Delimitadora Escalada", - "boundingBoxPosition": "Posição da Caixa Delimitadora", - "next": "Próximo", - "accept": "Aceitar", - "showHide": "Mostrar/Esconder", - "discardAll": "Descartar Todos", - "betaClear": "Limpar", - "betaDarkenOutside": "Escurecer Externamente", - "base": "Base", - "brush": "Pincel", - "showIntermediates": "Mostrar Intermediários", - "showGrid": "Mostrar Grade", - "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", - "boundingBox": "Caixa Delimitadora", - "canvasDimensions": "Dimensões da Tela", - "canvasPosition": "Posição da Tela", - "cursorPosition": "Posição do cursor", - "previous": "Anterior", - "betaLimitToBox": "Limitar á Caixa", - "layer": "Camada", - "mask": "Máscara", - "maskingOptions": "Opções de Mascaramento", - "enableMask": "Ativar Máscara", - "preserveMaskedArea": "Preservar Área da Máscara", - "clearMask": "Limpar Máscara", - "eraser": "Apagador", - "fillBoundingBox": "Preencher Caixa Delimitadora", - "eraseBoundingBox": "Apagar Caixa Delimitadora", - "colorPicker": "Seletor de Cor", - "brushOptions": "Opções de Pincel", - "brushSize": "Tamanho", - "move": "Mover", - "resetView": "Resetar Visualização", - "mergeVisible": "Fundir Visível", - "saveToGallery": "Gravar na Galeria", - "copyToClipboard": "Copiar para a Área de Transferência", - "downloadAsImage": "Descarregar Como Imagem", - "undo": "Desfazer", - "redo": "Refazer", - "clearCanvas": "Limpar Tela", - "canvasSettings": "Configurações de Tela", - "snapToGrid": "Encaixar na Grade", - "darkenOutsideSelection": "Escurecer Seleção Externa", - "autoSaveToGallery": "Gravar Automaticamente na Galeria", - "saveBoxRegionOnly": "Gravar Apenas a Região da Caixa", - "limitStrokesToBox": "Limitar Traços à Caixa", - "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", - "clearCanvasHistory": "Limpar o Histórico da Tela", - "clearHistory": "Limpar Históprico", - "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa a sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", - "emptyTempImageFolder": "Esvaziar a Pasta de Ficheiros de Imagem Temporários", - "emptyFolder": "Esvaziar Pasta", - "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de ficheiros de imagem temporários?", - "activeLayer": "Camada Ativa", - "canvasScale": "Escala da Tela", - "betaPreserveMasked": "Preservar Máscarado" - }, - "accessibility": { - "invokeProgressBar": "Invocar barra de progresso", - "reset": "Repôr", - "nextImage": "Próxima imagem", - "useThisParameter": "Usar este parâmetro", - "copyMetadataJson": "Copiar metadados JSON", - "zoomIn": "Ampliar", - "zoomOut": "Reduzir", - "rotateCounterClockwise": "Girar no sentido anti-horário", - "rotateClockwise": "Girar no sentido horário", - "flipVertically": "Espelhar verticalmente", - "modifyConfig": "Modificar config", - "toggleAutoscroll": "Alternar rolagem automática", - "showOptionsPanel": "Mostrar painel de opções", - "uploadImage": "Enviar imagem", - "previousImage": "Imagem anterior", - "flipHorizontally": "Espelhar horizontalmente", - "toggleLogViewer": "Alternar visualizador de registo" - } -} diff --git a/invokeai/frontend/web/dist/locales/pt_BR.json b/invokeai/frontend/web/dist/locales/pt_BR.json deleted file mode 100644 index 3b45dbbbf3..0000000000 --- a/invokeai/frontend/web/dist/locales/pt_BR.json +++ /dev/null @@ -1,577 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Teclas de atalho", - "languagePickerLabel": "Seletor de Idioma", - "reportBugLabel": "Relatar Bug", - "settingsLabel": "Configurações", - "img2img": "Imagem Para Imagem", - "unifiedCanvas": "Tela Unificada", - "nodes": "Nódulos", - "langBrPortuguese": "Português do Brasil", - "nodesDesc": "Um sistema baseado em nódulos para geração de imagens está em contrução. Fique ligado para atualizações sobre essa funcionalidade incrível.", - "postProcessing": "Pós-processamento", - "postProcessDesc1": "Invoke AI oferece uma variedade e funcionalidades de pós-processamento. Redimensionador de Imagem e Restauração Facial já estão disponíveis na interface. Você pode acessar elas no menu de Opções Avançadas na aba de Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da atual tela de imagens ou visualizador.", - "postProcessDesc2": "Uma interface dedicada será lançada em breve para facilitar fluxos de trabalho com opções mais avançadas de pós-processamento.", - "postProcessDesc3": "A interface do comando de linha da Invoke oferece várias funcionalidades incluindo Ampliação.", - "training": "Treinando", - "trainingDesc1": "Um fluxo de trabalho dedicado para treinar suas próprias incorporações e chockpoints usando Inversão Textual e Dreambooth na interface web.", - "trainingDesc2": "InvokeAI já suporta treinar incorporações personalizadas usando Inversão Textual com o script principal.", - "upload": "Enviar", - "close": "Fechar", - "load": "Carregar", - "statusConnected": "Conectado", - "statusDisconnected": "Disconectado", - "statusError": "Erro", - "statusPreparing": "Preparando", - "statusProcessingCanceled": "Processamento Canceledo", - "statusProcessingComplete": "Processamento Completo", - "statusGenerating": "Gerando", - "statusGeneratingTextToImage": "Gerando Texto Para Imagem", - "statusGeneratingImageToImage": "Gerando Imagem Para Imagem", - "statusGeneratingInpainting": "Gerando Inpainting", - "statusGeneratingOutpainting": "Gerando Outpainting", - "statusGenerationComplete": "Geração Completa", - "statusIterationComplete": "Iteração Completa", - "statusSavingImage": "Salvando Imagem", - "statusRestoringFaces": "Restaurando Rostos", - "statusRestoringFacesGFPGAN": "Restaurando Rostos (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restaurando Rostos (CodeFormer)", - "statusUpscaling": "Redimensinando", - "statusUpscalingESRGAN": "Redimensinando (ESRGAN)", - "statusLoadingModel": "Carregando Modelo", - "statusModelChanged": "Modelo Alterado", - "githubLabel": "Github", - "discordLabel": "Discord", - "langArabic": "Árabe", - "langEnglish": "Inglês", - "langDutch": "Holandês", - "langFrench": "Francês", - "langGerman": "Alemão", - "langItalian": "Italiano", - "langJapanese": "Japonês", - "langPolish": "Polonês", - "langSimplifiedChinese": "Chinês", - "langUkranian": "Ucraniano", - "back": "Voltar", - "statusConvertingModel": "Convertendo Modelo", - "statusModelConverted": "Modelo Convertido", - "statusMergingModels": "Mesclando Modelos", - "statusMergedModels": "Modelos Mesclados", - "langRussian": "Russo", - "langSpanish": "Espanhol", - "loadingInvokeAI": "Carregando Invoke AI", - "loading": "Carregando" - }, - "gallery": { - "generations": "Gerações", - "showGenerations": "Mostrar Gerações", - "uploads": "Enviados", - "showUploads": "Mostrar Enviados", - "galleryImageSize": "Tamanho da Imagem", - "galleryImageResetSize": "Resetar Imagem", - "gallerySettings": "Configurações de Galeria", - "maintainAspectRatio": "Mater Proporções", - "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", - "singleColumnLayout": "Disposição em Coluna Única", - "allImagesLoaded": "Todas as Imagens Carregadas", - "loadMore": "Carregar Mais", - "noImagesInGallery": "Sem Imagens na Galeria" - }, - "hotkeys": { - "keyboardShortcuts": "Atalhos de Teclado", - "appHotkeys": "Atalhos do app", - "generalHotkeys": "Atalhos Gerais", - "galleryHotkeys": "Atalhos da Galeria", - "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", - "invoke": { - "title": "Invoke", - "desc": "Gerar uma imagem" - }, - "cancel": { - "title": "Cancelar", - "desc": "Cancelar geração de imagem" - }, - "focusPrompt": { - "title": "Foco do Prompt", - "desc": "Foco da área de texto do prompt" - }, - "toggleOptions": { - "title": "Ativar Opções", - "desc": "Abrir e fechar o painel de opções" - }, - "pinOptions": { - "title": "Fixar Opções", - "desc": "Fixar o painel de opções" - }, - "toggleViewer": { - "title": "Ativar Visualizador", - "desc": "Abrir e fechar o Visualizador de Imagens" - }, - "toggleGallery": { - "title": "Ativar Galeria", - "desc": "Abrir e fechar a gaveta da galeria" - }, - "maximizeWorkSpace": { - "title": "Maximizar a Área de Trabalho", - "desc": "Fechar painéis e maximixar área de trabalho" - }, - "changeTabs": { - "title": "Mudar Abas", - "desc": "Trocar para outra área de trabalho" - }, - "consoleToggle": { - "title": "Ativar Console", - "desc": "Abrir e fechar console" - }, - "setPrompt": { - "title": "Definir Prompt", - "desc": "Usar o prompt da imagem atual" - }, - "setSeed": { - "title": "Definir Seed", - "desc": "Usar seed da imagem atual" - }, - "setParameters": { - "title": "Definir Parâmetros", - "desc": "Usar todos os parâmetros da imagem atual" - }, - "restoreFaces": { - "title": "Restaurar Rostos", - "desc": "Restaurar a imagem atual" - }, - "upscale": { - "title": "Redimensionar", - "desc": "Redimensionar a imagem atual" - }, - "showInfo": { - "title": "Mostrar Informações", - "desc": "Mostrar metadados de informações da imagem atual" - }, - "sendToImageToImage": { - "title": "Mandar para Imagem Para Imagem", - "desc": "Manda a imagem atual para Imagem Para Imagem" - }, - "deleteImage": { - "title": "Apagar Imagem", - "desc": "Apaga a imagem atual" - }, - "closePanels": { - "title": "Fechar Painéis", - "desc": "Fecha os painéis abertos" - }, - "previousImage": { - "title": "Imagem Anterior", - "desc": "Mostra a imagem anterior na galeria" - }, - "nextImage": { - "title": "Próxima Imagem", - "desc": "Mostra a próxima imagem na galeria" - }, - "toggleGalleryPin": { - "title": "Ativar Fixar Galeria", - "desc": "Fixa e desafixa a galeria na interface" - }, - "increaseGalleryThumbSize": { - "title": "Aumentar Tamanho da Galeria de Imagem", - "desc": "Aumenta o tamanho das thumbs na galeria" - }, - "decreaseGalleryThumbSize": { - "title": "Diminuir Tamanho da Galeria de Imagem", - "desc": "Diminui o tamanho das thumbs na galeria" - }, - "selectBrush": { - "title": "Selecionar Pincel", - "desc": "Seleciona o pincel" - }, - "selectEraser": { - "title": "Selecionar Apagador", - "desc": "Seleciona o apagador" - }, - "decreaseBrushSize": { - "title": "Diminuir Tamanho do Pincel", - "desc": "Diminui o tamanho do pincel/apagador" - }, - "increaseBrushSize": { - "title": "Aumentar Tamanho do Pincel", - "desc": "Aumenta o tamanho do pincel/apagador" - }, - "decreaseBrushOpacity": { - "title": "Diminuir Opacidade do Pincel", - "desc": "Diminui a opacidade do pincel" - }, - "increaseBrushOpacity": { - "title": "Aumentar Opacidade do Pincel", - "desc": "Aumenta a opacidade do pincel" - }, - "moveTool": { - "title": "Ferramenta Mover", - "desc": "Permite navegar pela tela" - }, - "fillBoundingBox": { - "title": "Preencher Caixa Delimitadora", - "desc": "Preenche a caixa delimitadora com a cor do pincel" - }, - "eraseBoundingBox": { - "title": "Apagar Caixa Delimitadora", - "desc": "Apaga a área da caixa delimitadora" - }, - "colorPicker": { - "title": "Selecionar Seletor de Cor", - "desc": "Seleciona o seletor de cores" - }, - "toggleSnap": { - "title": "Ativar Encaixe", - "desc": "Ativa Encaixar na Grade" - }, - "quickToggleMove": { - "title": "Ativar Mover Rapidamente", - "desc": "Temporariamente ativa o modo Mover" - }, - "toggleLayer": { - "title": "Ativar Camada", - "desc": "Ativa a seleção de camada de máscara/base" - }, - "clearMask": { - "title": "Limpar Máscara", - "desc": "Limpa toda a máscara" - }, - "hideMask": { - "title": "Esconder Máscara", - "desc": "Esconde e Revela a máscara" - }, - "showHideBoundingBox": { - "title": "Mostrar/Esconder Caixa Delimitadora", - "desc": "Ativa a visibilidade da caixa delimitadora" - }, - "mergeVisible": { - "title": "Fundir Visível", - "desc": "Fundir todas as camadas visíveis em tela" - }, - "saveToGallery": { - "title": "Salvara Na Galeria", - "desc": "Salva a tela atual na galeria" - }, - "copyToClipboard": { - "title": "Copiar para a Área de Transferência", - "desc": "Copia a tela atual para a área de transferência" - }, - "downloadImage": { - "title": "Baixar Imagem", - "desc": "Baixa a tela atual" - }, - "undoStroke": { - "title": "Desfazer Traço", - "desc": "Desfaz um traço de pincel" - }, - "redoStroke": { - "title": "Refazer Traço", - "desc": "Refaz o traço de pincel" - }, - "resetView": { - "title": "Resetar Visualização", - "desc": "Reseta Visualização da Tela" - }, - "previousStagingImage": { - "title": "Imagem de Preparação Anterior", - "desc": "Área de Imagem de Preparação Anterior" - }, - "nextStagingImage": { - "title": "Próxima Imagem de Preparação Anterior", - "desc": "Próxima Área de Imagem de Preparação Anterior" - }, - "acceptStagingImage": { - "title": "Aceitar Imagem de Preparação Anterior", - "desc": "Aceitar Área de Imagem de Preparação Anterior" - } - }, - "modelManager": { - "modelManager": "Gerente de Modelo", - "model": "Modelo", - "modelAdded": "Modelo Adicionado", - "modelUpdated": "Modelo Atualizado", - "modelEntryDeleted": "Entrada de modelo excluída", - "cannotUseSpaces": "Não pode usar espaços", - "addNew": "Adicionar Novo", - "addNewModel": "Adicionar Novo modelo", - "addManually": "Adicionar Manualmente", - "manual": "Manual", - "name": "Nome", - "nameValidationMsg": "Insira um nome para o seu modelo", - "description": "Descrição", - "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", - "config": "Configuração", - "configValidationMsg": "Caminho para o arquivo de configuração do seu modelo.", - "modelLocation": "Localização do modelo", - "modelLocationValidationMsg": "Caminho para onde seu modelo está localizado.", - "vaeLocation": "Localização VAE", - "vaeLocationValidationMsg": "Caminho para onde seu VAE está localizado.", - "width": "Largura", - "widthValidationMsg": "Largura padrão do seu modelo.", - "height": "Altura", - "heightValidationMsg": "Altura padrão do seu modelo.", - "addModel": "Adicionar Modelo", - "updateModel": "Atualizar Modelo", - "availableModels": "Modelos Disponíveis", - "search": "Procurar", - "load": "Carregar", - "active": "Ativado", - "notLoaded": "Não carregado", - "cached": "Em cache", - "checkpointFolder": "Pasta de Checkpoint", - "clearCheckpointFolder": "Apagar Pasta de Checkpoint", - "findModels": "Encontrar Modelos", - "modelsFound": "Modelos Encontrados", - "selectFolder": "Selecione a Pasta", - "selected": "Selecionada", - "selectAll": "Selecionar Tudo", - "deselectAll": "Deselecionar Tudo", - "showExisting": "Mostrar Existente", - "addSelected": "Adicione Selecionado", - "modelExists": "Modelo Existe", - "delete": "Excluir", - "deleteModel": "Excluir modelo", - "deleteConfig": "Excluir Config", - "deleteMsg1": "Tem certeza de que deseja excluir esta entrada do modelo de InvokeAI?", - "deleteMsg2": "Isso não vai excluir o arquivo de modelo checkpoint do seu disco. Você pode lê-los, se desejar.", - "checkpointModels": "Checkpoints", - "diffusersModels": "Diffusers", - "safetensorModels": "SafeTensors", - "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", - "addDiffuserModel": "Adicionar Diffusers", - "repo_id": "Repo ID", - "vaeRepoID": "VAE Repo ID", - "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", - "scanAgain": "Digitalize Novamente", - "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", - "noModelsFound": "Nenhum Modelo Encontrado", - "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", - "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", - "formMessageDiffusersVAELocation": "Localização do VAE", - "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo arquivo VAE dentro do local do modelo.", - "convertToDiffusers": "Converter para Diffusers", - "convertToDiffusersHelpText1": "Este modelo será convertido para o formato 🧨 Diffusers.", - "convertToDiffusersHelpText5": "Por favor, certifique-se de que você tenha espaço suficiente em disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", - "convertToDiffusersHelpText6": "Você deseja converter este modelo?", - "convertToDiffusersSaveLocation": "Local para Salvar", - "v1": "v1", - "inpainting": "v1 Inpainting", - "customConfig": "Configuração personalizada", - "pathToCustomConfig": "Caminho para configuração personalizada", - "convertToDiffusersHelpText3": "Seu arquivo de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Você pode adicionar seu ponto de verificação ao Gerenciador de modelos novamente, se desejar.", - "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, dependendo das especificações do seu computador.", - "merge": "Mesclar", - "modelsMerged": "Modelos mesclados", - "mergeModels": "Mesclar modelos", - "modelOne": "Modelo 1", - "modelTwo": "Modelo 2", - "modelThree": "Modelo 3", - "statusConverting": "Convertendo", - "modelConverted": "Modelo Convertido", - "sameFolder": "Mesma pasta", - "invokeRoot": "Pasta do InvokeAI", - "custom": "Personalizado", - "customSaveLocation": "Local de salvamento personalizado", - "mergedModelName": "Nome do modelo mesclado", - "alpha": "Alpha", - "allModels": "Todos os Modelos", - "repoIDValidationMsg": "Repositório Online do seu Modelo", - "convert": "Converter", - "convertToDiffusersHelpText2": "Este processo irá substituir sua entrada de Gerenciador de Modelos por uma versão Diffusers do mesmo modelo.", - "mergedModelCustomSaveLocation": "Caminho Personalizado", - "mergedModelSaveLocation": "Local de Salvamento", - "interpolationType": "Tipo de Interpolação", - "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", - "invokeAIFolder": "Pasta Invoke AI", - "weightedSum": "Soma Ponderada", - "sigmoid": "Sigmóide", - "inverseSigmoid": "Sigmóide Inversa", - "modelMergeHeaderHelp1": "Você pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", - "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", - "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam em uma influência menor do segundo modelo.", - "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se você deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro." - }, - "parameters": { - "images": "Imagems", - "steps": "Passos", - "cfgScale": "Escala CFG", - "width": "Largura", - "height": "Altura", - "seed": "Seed", - "randomizeSeed": "Seed Aleatório", - "shuffle": "Embaralhar", - "noiseThreshold": "Limite de Ruído", - "perlinNoise": "Ruído de Perlin", - "variations": "Variatções", - "variationAmount": "Quntidade de Variatções", - "seedWeights": "Pesos da Seed", - "faceRestoration": "Restauração de Rosto", - "restoreFaces": "Restaurar Rostos", - "type": "Tipo", - "strength": "Força", - "upscaling": "Redimensionando", - "upscale": "Redimensionar", - "upscaleImage": "Redimensionar Imagem", - "scale": "Escala", - "otherOptions": "Outras Opções", - "seamlessTiling": "Ladrilho Sem Fronteira", - "hiresOptim": "Otimização de Alta Res", - "imageFit": "Caber Imagem Inicial No Tamanho de Saída", - "codeformerFidelity": "Fidelidade", - "scaleBeforeProcessing": "Escala Antes do Processamento", - "scaledWidth": "L Escalada", - "scaledHeight": "A Escalada", - "infillMethod": "Método de Preenchimento", - "tileSize": "Tamanho do Ladrilho", - "boundingBoxHeader": "Caixa Delimitadora", - "seamCorrectionHeader": "Correção de Fronteira", - "infillScalingHeader": "Preencimento e Escala", - "img2imgStrength": "Força de Imagem Para Imagem", - "toggleLoopback": "Ativar Loopback", - "sendTo": "Mandar para", - "sendToImg2Img": "Mandar para Imagem Para Imagem", - "sendToUnifiedCanvas": "Mandar para Tela Unificada", - "copyImageToLink": "Copiar Imagem Para Link", - "downloadImage": "Baixar Imagem", - "openInViewer": "Abrir No Visualizador", - "closeViewer": "Fechar Visualizador", - "usePrompt": "Usar Prompt", - "useSeed": "Usar Seed", - "useAll": "Usar Todos", - "useInitImg": "Usar Imagem Inicial", - "info": "Informações", - "initialImage": "Imagem inicial", - "showOptionsPanel": "Mostrar Painel de Opções", - "vSymmetryStep": "V Passo de Simetria", - "hSymmetryStep": "H Passo de Simetria", - "symmetry": "Simetria", - "copyImage": "Copiar imagem", - "hiresStrength": "Força da Alta Resolução", - "denoisingStrength": "A força de remoção de ruído", - "imageToImage": "Imagem para Imagem", - "cancel": { - "setType": "Definir tipo de cancelamento", - "isScheduled": "Cancelando", - "schedule": "Cancelar após a iteração atual", - "immediate": "Cancelar imediatamente" - }, - "general": "Geral" - }, - "settings": { - "models": "Modelos", - "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", - "saveSteps": "Salvar imagens a cada n passos", - "confirmOnDelete": "Confirmar Antes de Apagar", - "displayHelpIcons": "Mostrar Ícones de Ajuda", - "enableImageDebugging": "Ativar Depuração de Imagem", - "resetWebUI": "Reiniciar Interface", - "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", - "resetWebUIDesc2": "Se as imagens não estão aparecendo na galeria ou algo mais não está funcionando, favor tentar reiniciar antes de postar um problema no GitHub.", - "resetComplete": "A interface foi reiniciada. Atualize a página para carregar.", - "useSlidersForAll": "Usar deslizadores para todas as opções" - }, - "toast": { - "tempFoldersEmptied": "Pasta de Arquivos Temporários Esvaziada", - "uploadFailed": "Envio Falhou", - "uploadFailedUnableToLoadDesc": "Não foj possível carregar o arquivo", - "downloadImageStarted": "Download de Imagem Começou", - "imageCopied": "Imagem Copiada", - "imageLinkCopied": "Link de Imagem Copiada", - "imageNotLoaded": "Nenhuma Imagem Carregada", - "imageNotLoadedDesc": "Nenhuma imagem encontrar para mandar para o módulo de imagem para imagem", - "imageSavedToGallery": "Imagem Salva na Galeria", - "canvasMerged": "Tela Fundida", - "sentToImageToImage": "Mandar Para Imagem Para Imagem", - "sentToUnifiedCanvas": "Enviada para a Tela Unificada", - "parametersSet": "Parâmetros Definidos", - "parametersNotSet": "Parâmetros Não Definidos", - "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", - "parametersFailed": "Problema ao carregar parâmetros", - "parametersFailedDesc": "Não foi possível carregar imagem incial.", - "seedSet": "Seed Definida", - "seedNotSet": "Seed Não Definida", - "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", - "promptSet": "Prompt Definido", - "promptNotSet": "Prompt Não Definido", - "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", - "upscalingFailed": "Redimensionamento Falhou", - "faceRestoreFailed": "Restauração de Rosto Falhou", - "metadataLoadFailed": "Falha ao tentar carregar metadados", - "initialImageSet": "Imagem Inicial Definida", - "initialImageNotSet": "Imagem Inicial Não Definida", - "initialImageNotSetDesc": "Não foi possível carregar imagem incial" - }, - "unifiedCanvas": { - "layer": "Camada", - "base": "Base", - "mask": "Máscara", - "maskingOptions": "Opções de Mascaramento", - "enableMask": "Ativar Máscara", - "preserveMaskedArea": "Preservar Área da Máscara", - "clearMask": "Limpar Máscara", - "brush": "Pincel", - "eraser": "Apagador", - "fillBoundingBox": "Preencher Caixa Delimitadora", - "eraseBoundingBox": "Apagar Caixa Delimitadora", - "colorPicker": "Seletor de Cor", - "brushOptions": "Opções de Pincel", - "brushSize": "Tamanho", - "move": "Mover", - "resetView": "Resetar Visualização", - "mergeVisible": "Fundir Visível", - "saveToGallery": "Salvar na Galeria", - "copyToClipboard": "Copiar para a Área de Transferência", - "downloadAsImage": "Baixar Como Imagem", - "undo": "Desfazer", - "redo": "Refazer", - "clearCanvas": "Limpar Tela", - "canvasSettings": "Configurações de Tela", - "showIntermediates": "Mostrar Intermediários", - "showGrid": "Mostrar Grade", - "snapToGrid": "Encaixar na Grade", - "darkenOutsideSelection": "Escurecer Seleção Externa", - "autoSaveToGallery": "Salvar Automaticamente na Galeria", - "saveBoxRegionOnly": "Salvar Apenas a Região da Caixa", - "limitStrokesToBox": "Limitar Traços para a Caixa", - "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", - "clearCanvasHistory": "Limpar o Histórico da Tela", - "clearHistory": "Limpar Históprico", - "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", - "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", - "emptyTempImageFolder": "Esvaziar a Pasta de Arquivos de Imagem Temporários", - "emptyFolder": "Esvaziar Pasta", - "emptyTempImagesFolderMessage": "Esvaziar a pasta de arquivos de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", - "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de arquivos de imagem temporários?", - "activeLayer": "Camada Ativa", - "canvasScale": "Escala da Tela", - "boundingBox": "Caixa Delimitadora", - "scaledBoundingBox": "Caixa Delimitadora Escalada", - "boundingBoxPosition": "Posição da Caixa Delimitadora", - "canvasDimensions": "Dimensões da Tela", - "canvasPosition": "Posição da Tela", - "cursorPosition": "Posição do cursor", - "previous": "Anterior", - "next": "Próximo", - "accept": "Aceitar", - "showHide": "Mostrar/Esconder", - "discardAll": "Descartar Todos", - "betaClear": "Limpar", - "betaDarkenOutside": "Escurecer Externamente", - "betaLimitToBox": "Limitar Para a Caixa", - "betaPreserveMasked": "Preservar Máscarado" - }, - "tooltip": { - "feature": { - "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Você pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10), e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", - "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em arquivos e acessadas pelo menu de contexto.", - "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", - "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", - "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", - "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", - "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, resultando em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", - "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Você também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", - "infillAndScaling": "Gerencie os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos).", - "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", - "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3." - } - } -} diff --git a/invokeai/frontend/web/dist/locales/ro.json b/invokeai/frontend/web/dist/locales/ro.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/invokeai/frontend/web/dist/locales/ro.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/invokeai/frontend/web/dist/locales/ru.json b/invokeai/frontend/web/dist/locales/ru.json deleted file mode 100644 index 808db9e803..0000000000 --- a/invokeai/frontend/web/dist/locales/ru.json +++ /dev/null @@ -1,779 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Горячие клавиши", - "languagePickerLabel": "Язык", - "reportBugLabel": "Сообщить об ошибке", - "settingsLabel": "Настройки", - "img2img": "Изображение в изображение (img2img)", - "unifiedCanvas": "Единый холст", - "nodes": "Редактор рабочего процесса", - "langRussian": "Русский", - "nodesDesc": "Cистема генерации изображений на основе нодов (узлов) уже разрабатывается. Следите за новостями об этой замечательной функции.", - "postProcessing": "Постобработка", - "postProcessDesc1": "Invoke AI предлагает широкий спектр функций постобработки. Увеличение изображения (upscale) и восстановление лиц уже доступны в интерфейсе. Получите доступ к ним из меню 'Дополнительные параметры' на вкладках 'Текст в изображение' и 'Изображение в изображение'. Обрабатывайте изображения напрямую, используя кнопки действий с изображениями над текущим изображением или в режиме просмотра.", - "postProcessDesc2": "В ближайшее время будет выпущен специальный интерфейс для более продвинутых процессов постобработки.", - "postProcessDesc3": "Интерфейс командной строки Invoke AI предлагает различные другие функции, включая Embiggen.", - "training": "Обучение", - "trainingDesc1": "Специальный интерфейс для обучения собственных моделей с использованием Textual Inversion и Dreambooth.", - "trainingDesc2": "InvokeAI уже поддерживает обучение моделей с помощью TI, через интерфейс командной строки.", - "upload": "Загрузить", - "close": "Закрыть", - "load": "Загрузить", - "statusConnected": "Подключен", - "statusDisconnected": "Отключен", - "statusError": "Ошибка", - "statusPreparing": "Подготовка", - "statusProcessingCanceled": "Обработка прервана", - "statusProcessingComplete": "Обработка завершена", - "statusGenerating": "Генерация", - "statusGeneratingTextToImage": "Создаем изображение из текста", - "statusGeneratingImageToImage": "Создаем изображение из изображения", - "statusGeneratingInpainting": "Дополняем внутри", - "statusGeneratingOutpainting": "Дорисовываем снаружи", - "statusGenerationComplete": "Генерация завершена", - "statusIterationComplete": "Итерация завершена", - "statusSavingImage": "Сохранение изображения", - "statusRestoringFaces": "Восстановление лиц", - "statusRestoringFacesGFPGAN": "Восстановление лиц (GFPGAN)", - "statusRestoringFacesCodeFormer": "Восстановление лиц (CodeFormer)", - "statusUpscaling": "Увеличение", - "statusUpscalingESRGAN": "Увеличение (ESRGAN)", - "statusLoadingModel": "Загрузка модели", - "statusModelChanged": "Модель изменена", - "githubLabel": "Github", - "discordLabel": "Discord", - "statusMergingModels": "Слияние моделей", - "statusModelConverted": "Модель сконвертирована", - "statusMergedModels": "Модели объединены", - "loading": "Загрузка", - "loadingInvokeAI": "Загрузка Invoke AI", - "back": "Назад", - "statusConvertingModel": "Конвертация модели", - "cancel": "Отменить", - "accept": "Принять", - "langUkranian": "Украинский", - "langEnglish": "Английский", - "postprocessing": "Постобработка", - "langArabic": "Арабский", - "langSpanish": "Испанский", - "langSimplifiedChinese": "Китайский (упрощенный)", - "langDutch": "Нидерландский", - "langFrench": "Французский", - "langGerman": "Немецкий", - "langHebrew": "Иврит", - "langItalian": "Итальянский", - "langJapanese": "Японский", - "langKorean": "Корейский", - "langPolish": "Польский", - "langPortuguese": "Португальский", - "txt2img": "Текст в изображение (txt2img)", - "langBrPortuguese": "Португальский (Бразилия)", - "linear": "Линейная обработка", - "dontAskMeAgain": "Больше не спрашивать", - "areYouSure": "Вы уверены?", - "random": "Случайное", - "generate": "Сгенерировать", - "openInNewTab": "Открыть в новой вкладке", - "imagePrompt": "Запрос", - "communityLabel": "Сообщество", - "lightMode": "Светлая тема", - "batch": "Пакетный менеджер", - "modelManager": "Менеджер моделей", - "darkMode": "Темная тема", - "nodeEditor": "Редактор Нодов (Узлов)", - "controlNet": "Controlnet", - "advanced": "Расширенные" - }, - "gallery": { - "generations": "Генерации", - "showGenerations": "Показывать генерации", - "uploads": "Загрузки", - "showUploads": "Показывать загрузки", - "galleryImageSize": "Размер изображений", - "galleryImageResetSize": "Размер по умолчанию", - "gallerySettings": "Настройка галереи", - "maintainAspectRatio": "Сохранять пропорции", - "autoSwitchNewImages": "Автоматически выбирать новые", - "singleColumnLayout": "Одна колонка", - "allImagesLoaded": "Все изображения загружены", - "loadMore": "Показать больше", - "noImagesInGallery": "Изображений нет", - "deleteImagePermanent": "Удаленные изображения невозможно восстановить.", - "deleteImageBin": "Удаленные изображения будут отправлены в корзину вашей операционной системы.", - "deleteImage": "Удалить изображение", - "images": "Изображения", - "assets": "Ресурсы", - "autoAssignBoardOnClick": "Авто-назначение доски по клику" - }, - "hotkeys": { - "keyboardShortcuts": "Горячие клавиши", - "appHotkeys": "Горячие клавиши приложения", - "generalHotkeys": "Общие горячие клавиши", - "galleryHotkeys": "Горячие клавиши галереи", - "unifiedCanvasHotkeys": "Горячие клавиши Единого холста", - "invoke": { - "title": "Invoke", - "desc": "Сгенерировать изображение" - }, - "cancel": { - "title": "Отменить", - "desc": "Отменить генерацию изображения" - }, - "focusPrompt": { - "title": "Переключиться на ввод запроса", - "desc": "Переключение на область ввода запроса" - }, - "toggleOptions": { - "title": "Показать/скрыть параметры", - "desc": "Открывать и закрывать панель параметров" - }, - "pinOptions": { - "title": "Закрепить параметры", - "desc": "Закрепить панель параметров" - }, - "toggleViewer": { - "title": "Показать просмотр", - "desc": "Открывать и закрывать просмотрщик изображений" - }, - "toggleGallery": { - "title": "Показать галерею", - "desc": "Открывать и закрывать ящик галереи" - }, - "maximizeWorkSpace": { - "title": "Максимизировать рабочее пространство", - "desc": "Скрыть панели и максимизировать рабочую область" - }, - "changeTabs": { - "title": "Переключить вкладку", - "desc": "Переключиться на другую рабочую область" - }, - "consoleToggle": { - "title": "Показать консоль", - "desc": "Открывать и закрывать консоль" - }, - "setPrompt": { - "title": "Использовать запрос", - "desc": "Использовать запрос из текущего изображения" - }, - "setSeed": { - "title": "Использовать сид", - "desc": "Использовать сид текущего изображения" - }, - "setParameters": { - "title": "Использовать все параметры", - "desc": "Использовать все параметры текущего изображения" - }, - "restoreFaces": { - "title": "Восстановить лица", - "desc": "Восстановить лица на текущем изображении" - }, - "upscale": { - "title": "Увеличение", - "desc": "Увеличить текущеее изображение" - }, - "showInfo": { - "title": "Показать метаданные", - "desc": "Показать метаданные из текущего изображения" - }, - "sendToImageToImage": { - "title": "Отправить в img2img", - "desc": "Отправить текущее изображение в Image To Image" - }, - "deleteImage": { - "title": "Удалить изображение", - "desc": "Удалить текущее изображение" - }, - "closePanels": { - "title": "Закрыть панели", - "desc": "Закрывает открытые панели" - }, - "previousImage": { - "title": "Предыдущее изображение", - "desc": "Отображать предыдущее изображение в галерее" - }, - "nextImage": { - "title": "Следующее изображение", - "desc": "Отображение следующего изображения в галерее" - }, - "toggleGalleryPin": { - "title": "Закрепить галерею", - "desc": "Закрепляет и открепляет галерею" - }, - "increaseGalleryThumbSize": { - "title": "Увеличить размер миниатюр галереи", - "desc": "Увеличивает размер миниатюр галереи" - }, - "decreaseGalleryThumbSize": { - "title": "Уменьшает размер миниатюр галереи", - "desc": "Уменьшает размер миниатюр галереи" - }, - "selectBrush": { - "title": "Выбрать кисть", - "desc": "Выбирает кисть для холста" - }, - "selectEraser": { - "title": "Выбрать ластик", - "desc": "Выбирает ластик для холста" - }, - "decreaseBrushSize": { - "title": "Уменьшить размер кисти", - "desc": "Уменьшает размер кисти/ластика холста" - }, - "increaseBrushSize": { - "title": "Увеличить размер кисти", - "desc": "Увеличивает размер кисти/ластика холста" - }, - "decreaseBrushOpacity": { - "title": "Уменьшить непрозрачность кисти", - "desc": "Уменьшает непрозрачность кисти холста" - }, - "increaseBrushOpacity": { - "title": "Увеличить непрозрачность кисти", - "desc": "Увеличивает непрозрачность кисти холста" - }, - "moveTool": { - "title": "Инструмент перемещения", - "desc": "Позволяет перемещаться по холсту" - }, - "fillBoundingBox": { - "title": "Заполнить ограничивающую рамку", - "desc": "Заполняет ограничивающую рамку цветом кисти" - }, - "eraseBoundingBox": { - "title": "Стереть ограничивающую рамку", - "desc": "Стирает область ограничивающей рамки" - }, - "colorPicker": { - "title": "Выбрать цвет", - "desc": "Выбирает средство выбора цвета холста" - }, - "toggleSnap": { - "title": "Включить привязку", - "desc": "Включает/выключает привязку к сетке" - }, - "quickToggleMove": { - "title": "Быстрое переключение перемещения", - "desc": "Временно переключает режим перемещения" - }, - "toggleLayer": { - "title": "Переключить слой", - "desc": "Переключение маски/базового слоя" - }, - "clearMask": { - "title": "Очистить маску", - "desc": "Очистить всю маску" - }, - "hideMask": { - "title": "Скрыть маску", - "desc": "Скрывает/показывает маску" - }, - "showHideBoundingBox": { - "title": "Показать/скрыть ограничивающую рамку", - "desc": "Переключить видимость ограничивающей рамки" - }, - "mergeVisible": { - "title": "Объединить видимые", - "desc": "Объединить все видимые слои холста" - }, - "saveToGallery": { - "title": "Сохранить в галерею", - "desc": "Сохранить текущий холст в галерею" - }, - "copyToClipboard": { - "title": "Копировать в буфер обмена", - "desc": "Копировать текущий холст в буфер обмена" - }, - "downloadImage": { - "title": "Скачать изображение", - "desc": "Скачать содержимое холста" - }, - "undoStroke": { - "title": "Отменить кисть", - "desc": "Отменить мазок кисти" - }, - "redoStroke": { - "title": "Повторить кисть", - "desc": "Повторить мазок кисти" - }, - "resetView": { - "title": "Вид по умолчанию", - "desc": "Сбросить вид холста" - }, - "previousStagingImage": { - "title": "Предыдущее изображение", - "desc": "Предыдущая область изображения" - }, - "nextStagingImage": { - "title": "Следующее изображение", - "desc": "Следующая область изображения" - }, - "acceptStagingImage": { - "title": "Принять изображение", - "desc": "Принять текущее изображение" - }, - "addNodes": { - "desc": "Открывает меню добавления узла", - "title": "Добавление узлов" - }, - "nodesHotkeys": "Горячие клавиши узлов" - }, - "modelManager": { - "modelManager": "Менеджер моделей", - "model": "Модель", - "modelAdded": "Модель добавлена", - "modelUpdated": "Модель обновлена", - "modelEntryDeleted": "Запись о модели удалена", - "cannotUseSpaces": "Нельзя использовать пробелы", - "addNew": "Добавить новую", - "addNewModel": "Добавить новую модель", - "addManually": "Добавить вручную", - "manual": "Ручное", - "name": "Название", - "nameValidationMsg": "Введите название модели", - "description": "Описание", - "descriptionValidationMsg": "Введите описание модели", - "config": "Файл конфигурации", - "configValidationMsg": "Путь до файла конфигурации.", - "modelLocation": "Расположение модели", - "modelLocationValidationMsg": "Путь до файла с моделью.", - "vaeLocation": "Расположение VAE", - "vaeLocationValidationMsg": "Путь до файла VAE.", - "width": "Ширина", - "widthValidationMsg": "Исходная ширина изображений модели.", - "height": "Высота", - "heightValidationMsg": "Исходная высота изображений модели.", - "addModel": "Добавить модель", - "updateModel": "Обновить модель", - "availableModels": "Доступные модели", - "search": "Искать", - "load": "Загрузить", - "active": "активна", - "notLoaded": "не загружена", - "cached": "кэширована", - "checkpointFolder": "Папка с моделями", - "clearCheckpointFolder": "Очистить папку с моделями", - "findModels": "Найти модели", - "scanAgain": "Сканировать снова", - "modelsFound": "Найденные модели", - "selectFolder": "Выбрать папку", - "selected": "Выбраны", - "selectAll": "Выбрать все", - "deselectAll": "Снять выделение", - "showExisting": "Показывать добавленные", - "addSelected": "Добавить выбранные", - "modelExists": "Модель уже добавлена", - "selectAndAdd": "Выберите и добавьте модели из списка", - "noModelsFound": "Модели не найдены", - "delete": "Удалить", - "deleteModel": "Удалить модель", - "deleteConfig": "Удалить конфигурацию", - "deleteMsg1": "Вы точно хотите удалить модель из InvokeAI?", - "deleteMsg2": "Это приведет К УДАЛЕНИЮ модели С ДИСКА, если она находится в корневой папке Invoke. Если вы используете пользовательское расположение, то модель НЕ будет удалена с диска.", - "repoIDValidationMsg": "Онлайн-репозиторий модели", - "convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 2–7 Гб.", - "invokeAIFolder": "Каталог InvokeAI", - "ignoreMismatch": "Игнорировать несоответствия между выбранными моделями", - "addCheckpointModel": "Добавить модель Checkpoint/Safetensor", - "formMessageDiffusersModelLocationDesc": "Укажите хотя бы одно.", - "convertToDiffusersHelpText3": "Ваш файл контрольной точки НА ДИСКЕ будет УДАЛЕН, если он находится в корневой папке InvokeAI. Если он находится в пользовательском расположении, то он НЕ будет удален.", - "vaeRepoID": "ID репозитория VAE", - "mergedModelName": "Название объединенной модели", - "checkpointModels": "Checkpoints", - "allModels": "Все модели", - "addDiffuserModel": "Добавить Diffusers", - "repo_id": "ID репозитория", - "formMessageDiffusersVAELocationDesc": "Если не указано, InvokeAI будет искать файл VAE рядом с моделью.", - "convert": "Преобразовать", - "convertToDiffusers": "Преобразовать в Diffusers", - "convertToDiffusersHelpText1": "Модель будет преобразована в формат 🧨 Diffusers.", - "convertToDiffusersHelpText4": "Это единоразовое действие. Оно может занять 30—60 секунд в зависимости от характеристик вашего компьютера.", - "convertToDiffusersHelpText6": "Вы хотите преобразовать эту модель?", - "statusConverting": "Преобразование", - "modelConverted": "Модель преобразована", - "invokeRoot": "Каталог InvokeAI", - "modelsMerged": "Модели объединены", - "mergeModels": "Объединить модели", - "scanForModels": "Просканировать модели", - "sigmoid": "Сигмоид", - "formMessageDiffusersModelLocation": "Расположение Diffusers-модели", - "modelThree": "Модель 3", - "modelMergeHeaderHelp2": "Только Diffusers-модели доступны для объединения. Если вы хотите объединить checkpoint-модели, сначала преобразуйте их в Diffusers.", - "pickModelType": "Выбрать тип модели", - "formMessageDiffusersVAELocation": "Расположение VAE", - "v1": "v1", - "convertToDiffusersSaveLocation": "Путь сохранения", - "customSaveLocation": "Пользовательский путь сохранения", - "alpha": "Альфа", - "diffusersModels": "Diffusers", - "customConfig": "Пользовательский конфиг", - "pathToCustomConfig": "Путь к пользовательскому конфигу", - "inpainting": "v1 Inpainting", - "sameFolder": "В ту же папку", - "modelOne": "Модель 1", - "mergedModelCustomSaveLocation": "Пользовательский путь", - "none": "пусто", - "addDifference": "Добавить разницу", - "vaeRepoIDValidationMsg": "Онлайн репозиторий VAE", - "convertToDiffusersHelpText2": "Этот процесс заменит вашу запись в Model Manager на версию той же модели в Diffusers.", - "custom": "Пользовательский", - "modelTwo": "Модель 2", - "mergedModelSaveLocation": "Путь сохранения", - "merge": "Объединить", - "interpolationType": "Тип интерполяции", - "modelMergeInterpAddDifferenceHelp": "В этом режиме Модель 3 сначала вычитается из Модели 2. Результирующая версия смешивается с Моделью 1 с установленным выше коэффициентом Альфа.", - "modelMergeHeaderHelp1": "Вы можете объединить до трех разных моделей, чтобы создать смешанную, соответствующую вашим потребностям.", - "modelMergeAlphaHelp": "Альфа влияет на силу смешивания моделей. Более низкие значения альфа приводят к меньшему влиянию второй модели.", - "inverseSigmoid": "Обратный Сигмоид", - "weightedSum": "Взвешенная сумма", - "safetensorModels": "SafeTensors", - "v2_768": "v2 (768px)", - "v2_base": "v2 (512px)", - "modelDeleted": "Модель удалена", - "importModels": "Импорт Моделей", - "variant": "Вариант", - "baseModel": "Базовая модель", - "modelsSynced": "Модели синхронизированы", - "modelSyncFailed": "Не удалось синхронизировать модели", - "vae": "VAE", - "modelDeleteFailed": "Не удалось удалить модель", - "noCustomLocationProvided": "Пользовательское местоположение не указано", - "convertingModelBegin": "Конвертация модели. Пожалуйста, подождите.", - "settings": "Настройки", - "selectModel": "Выберите модель", - "syncModels": "Синхронизация моделей", - "syncModelsDesc": "Если ваши модели не синхронизированы с серверной частью, вы можете обновить их, используя эту опцию. Обычно это удобно в тех случаях, когда вы вручную обновляете свой файл \"models.yaml\" или добавляете модели в корневую папку InvokeAI после загрузки приложения.", - "modelUpdateFailed": "Не удалось обновить модель", - "modelConversionFailed": "Не удалось сконвертировать модель", - "modelsMergeFailed": "Не удалось выполнить слияние моделей", - "loraModels": "LoRAs", - "onnxModels": "Onnx", - "oliveModels": "Olives" - }, - "parameters": { - "images": "Изображения", - "steps": "Шаги", - "cfgScale": "Уровень CFG", - "width": "Ширина", - "height": "Высота", - "seed": "Сид", - "randomizeSeed": "Случайный сид", - "shuffle": "Обновить сид", - "noiseThreshold": "Порог шума", - "perlinNoise": "Шум Перлина", - "variations": "Вариации", - "variationAmount": "Кол-во вариаций", - "seedWeights": "Вес сида", - "faceRestoration": "Восстановление лиц", - "restoreFaces": "Восстановить лица", - "type": "Тип", - "strength": "Сила", - "upscaling": "Увеличение", - "upscale": "Увеличить", - "upscaleImage": "Увеличить изображение", - "scale": "Масштаб", - "otherOptions": "Другие параметры", - "seamlessTiling": "Бесшовный узор", - "hiresOptim": "Оптимизация High Res", - "imageFit": "Уместить изображение", - "codeformerFidelity": "Точность", - "scaleBeforeProcessing": "Масштабировать", - "scaledWidth": "Масштаб Ш", - "scaledHeight": "Масштаб В", - "infillMethod": "Способ заполнения", - "tileSize": "Размер области", - "boundingBoxHeader": "Ограничивающая рамка", - "seamCorrectionHeader": "Настройка шва", - "infillScalingHeader": "Заполнение и масштабирование", - "img2imgStrength": "Сила обработки img2img", - "toggleLoopback": "Зациклить обработку", - "sendTo": "Отправить", - "sendToImg2Img": "Отправить в img2img", - "sendToUnifiedCanvas": "Отправить на Единый холст", - "copyImageToLink": "Скопировать ссылку", - "downloadImage": "Скачать", - "openInViewer": "Открыть в просмотрщике", - "closeViewer": "Закрыть просмотрщик", - "usePrompt": "Использовать запрос", - "useSeed": "Использовать сид", - "useAll": "Использовать все", - "useInitImg": "Использовать как исходное", - "info": "Метаданные", - "initialImage": "Исходное изображение", - "showOptionsPanel": "Показать панель настроек", - "vSymmetryStep": "Шаг верт. симметрии", - "cancel": { - "immediate": "Отменить немедленно", - "schedule": "Отменить после текущей итерации", - "isScheduled": "Отмена", - "setType": "Установить тип отмены" - }, - "general": "Основное", - "hiresStrength": "Сила High Res", - "symmetry": "Симметрия", - "hSymmetryStep": "Шаг гор. симметрии", - "hidePreview": "Скрыть предпросмотр", - "imageToImage": "Изображение в изображение", - "denoisingStrength": "Сила шумоподавления", - "copyImage": "Скопировать изображение", - "showPreview": "Показать предпросмотр", - "noiseSettings": "Шум", - "seamlessXAxis": "Ось X", - "seamlessYAxis": "Ось Y", - "scheduler": "Планировщик", - "boundingBoxWidth": "Ширина ограничивающей рамки", - "boundingBoxHeight": "Высота ограничивающей рамки", - "positivePromptPlaceholder": "Запрос", - "negativePromptPlaceholder": "Исключающий запрос", - "controlNetControlMode": "Режим управления", - "clipSkip": "CLIP Пропуск", - "aspectRatio": "Соотношение", - "maskAdjustmentsHeader": "Настройка маски", - "maskBlur": "Размытие", - "maskBlurMethod": "Метод размытия", - "seamLowThreshold": "Низкий", - "seamHighThreshold": "Высокий", - "coherenceSteps": "Шагов", - "coherencePassHeader": "Порог Coherence", - "coherenceStrength": "Сила", - "compositingSettingsHeader": "Настройки компоновки" - }, - "settings": { - "models": "Модели", - "displayInProgress": "Показывать процесс генерации", - "saveSteps": "Сохранять каждые n щагов", - "confirmOnDelete": "Подтверждать удаление", - "displayHelpIcons": "Показывать значки подсказок", - "enableImageDebugging": "Включить отладку", - "resetWebUI": "Сброс настроек Web UI", - "resetWebUIDesc1": "Сброс настроек веб-интерфейса удаляет только локальный кэш браузера с вашими изображениями и настройками. Он не удаляет изображения с диска.", - "resetWebUIDesc2": "Если изображения не отображаются в галерее или не работает что-то еще, пожалуйста, попробуйте сбросить настройки, прежде чем сообщать о проблеме на GitHub.", - "resetComplete": "Настройки веб-интерфейса были сброшены.", - "useSlidersForAll": "Использовать ползунки для всех параметров", - "consoleLogLevel": "Уровень логирования", - "shouldLogToConsole": "Логи в консоль", - "developer": "Разработчик", - "general": "Основное", - "showProgressInViewer": "Показывать процесс генерации в Просмотрщике", - "antialiasProgressImages": "Сглаживать предпоказ процесса генерации", - "generation": "Поколение", - "ui": "Пользовательский интерфейс", - "favoriteSchedulers": "Избранные планировщики", - "favoriteSchedulersPlaceholder": "Нет избранных планировщиков", - "enableNodesEditor": "Включить редактор узлов", - "experimental": "Экспериментальные", - "beta": "Бета", - "alternateCanvasLayout": "Альтернативный слой холста", - "showAdvancedOptions": "Показать доп. параметры", - "autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении" - }, - "toast": { - "tempFoldersEmptied": "Временная папка очищена", - "uploadFailed": "Загрузка не удалась", - "uploadFailedUnableToLoadDesc": "Невозможно загрузить файл", - "downloadImageStarted": "Скачивание изображения началось", - "imageCopied": "Изображение скопировано", - "imageLinkCopied": "Ссылка на изображение скопирована", - "imageNotLoaded": "Изображение не загружено", - "imageNotLoadedDesc": "Не удалось найти изображение", - "imageSavedToGallery": "Изображение сохранено в галерею", - "canvasMerged": "Холст объединен", - "sentToImageToImage": "Отправить в img2img", - "sentToUnifiedCanvas": "Отправлено на Единый холст", - "parametersSet": "Параметры заданы", - "parametersNotSet": "Параметры не заданы", - "parametersNotSetDesc": "Не найдены метаданные изображения.", - "parametersFailed": "Проблема с загрузкой параметров", - "parametersFailedDesc": "Невозможно загрузить исходное изображение.", - "seedSet": "Сид задан", - "seedNotSet": "Сид не задан", - "seedNotSetDesc": "Не удалось найти сид для изображения.", - "promptSet": "Запрос задан", - "promptNotSet": "Запрос не задан", - "promptNotSetDesc": "Не удалось найти запрос для изображения.", - "upscalingFailed": "Увеличение не удалось", - "faceRestoreFailed": "Восстановление лиц не удалось", - "metadataLoadFailed": "Не удалось загрузить метаданные", - "initialImageSet": "Исходное изображение задано", - "initialImageNotSet": "Исходное изображение не задано", - "initialImageNotSetDesc": "Не получилось загрузить исходное изображение", - "serverError": "Ошибка сервера", - "disconnected": "Отключено от сервера", - "connected": "Подключено к серверу", - "canceled": "Обработка отменена", - "problemCopyingImageLink": "Не удалось скопировать ссылку на изображение", - "uploadFailedInvalidUploadDesc": "Должно быть одно изображение в формате PNG или JPEG", - "parameterNotSet": "Параметр не задан", - "parameterSet": "Параметр задан", - "nodesLoaded": "Узлы загружены", - "problemCopyingImage": "Не удается скопировать изображение", - "nodesLoadedFailed": "Не удалось загрузить Узлы", - "nodesCleared": "Узлы очищены", - "nodesBrokenConnections": "Не удается загрузить. Некоторые соединения повреждены.", - "nodesUnrecognizedTypes": "Не удается загрузить. Граф имеет нераспознанные типы", - "nodesNotValidJSON": "Недопустимый JSON", - "nodesCorruptedGraph": "Не удается загрузить. Граф, похоже, поврежден.", - "nodesSaved": "Узлы сохранены", - "nodesNotValidGraph": "Недопустимый граф узлов InvokeAI" - }, - "tooltip": { - "feature": { - "prompt": "Это поле для текста запроса, включая объекты генерации и стилистические термины. В запрос можно включить и коэффициенты веса (значимости токена), но консольные команды и параметры не будут работать.", - "gallery": "Здесь отображаются генерации из папки outputs по мере их появления.", - "other": "Эти опции включают альтернативные режимы обработки для Invoke. 'Бесшовный узор' создаст повторяющиеся узоры на выходе. 'Высокое разрешение' это генерация в два этапа с помощью img2img: используйте эту настройку, когда хотите получить цельное изображение большего размера без артефактов.", - "seed": "Значение сида влияет на начальный шум, из которого сформируется изображение. Можно использовать уже имеющийся сид из предыдущих изображений. 'Порог шума' используется для смягчения артефактов при высоких значениях CFG (попробуйте в диапазоне 0-10), а Перлин для добавления шума Перлина в процессе генерации: оба параметра служат для большей вариативности результатов.", - "variations": "Попробуйте вариацию со значением от 0.1 до 1.0, чтобы изменить результат для заданного сида. Интересные вариации сида находятся между 0.1 и 0.3.", - "upscale": "Используйте ESRGAN, чтобы увеличить изображение сразу после генерации.", - "faceCorrection": "Коррекция лиц с помощью GFPGAN или Codeformer: алгоритм определяет лица в готовом изображении и исправляет любые дефекты. Высокие значение силы меняет изображение сильнее, в результате лица будут выглядеть привлекательнее. У Codeformer более высокая точность сохранит исходное изображение в ущерб коррекции лица.", - "imageToImage": "'Изображение в изображение' загружает любое изображение, которое затем используется для генерации вместе с запросом. Чем больше значение, тем сильнее изменится изображение в результате. Возможны значения от 0 до 1, рекомендуется диапазон .25-.75", - "boundingBox": "'Ограничительная рамка' аналогична настройкам Ширина и Высота для 'Избражения из текста' или 'Изображения в изображение'. Будет обработана только область в рамке.", - "seamCorrection": "Управление обработкой видимых швов, возникающих между изображениями на холсте.", - "infillAndScaling": "Управление методами заполнения (используется для масок или стертых областей холста) и масштабирования (полезно для малых размеров ограничивающей рамки)." - } - }, - "unifiedCanvas": { - "layer": "Слой", - "base": "Базовый", - "mask": "Маска", - "maskingOptions": "Параметры маски", - "enableMask": "Включить маску", - "preserveMaskedArea": "Сохранять маскируемую область", - "clearMask": "Очистить маску", - "brush": "Кисть", - "eraser": "Ластик", - "fillBoundingBox": "Заполнить ограничивающую рамку", - "eraseBoundingBox": "Стереть ограничивающую рамку", - "colorPicker": "Пипетка", - "brushOptions": "Параметры кисти", - "brushSize": "Размер", - "move": "Переместить", - "resetView": "Сбросить вид", - "mergeVisible": "Объединить видимые", - "saveToGallery": "Сохранить в галерею", - "copyToClipboard": "Копировать в буфер обмена", - "downloadAsImage": "Скачать как изображение", - "undo": "Отменить", - "redo": "Повторить", - "clearCanvas": "Очистить холст", - "canvasSettings": "Настройки холста", - "showIntermediates": "Показывать процесс", - "showGrid": "Показать сетку", - "snapToGrid": "Привязать к сетке", - "darkenOutsideSelection": "Затемнить холст снаружи", - "autoSaveToGallery": "Автосохранение в галерее", - "saveBoxRegionOnly": "Сохранять только выделение", - "limitStrokesToBox": "Ограничить штрихи выделением", - "showCanvasDebugInfo": "Показать доп. информацию о холсте", - "clearCanvasHistory": "Очистить историю холста", - "clearHistory": "Очистить историю", - "clearCanvasHistoryMessage": "Очистка истории холста оставляет текущий холст нетронутым, но удаляет историю отмен и повторов.", - "clearCanvasHistoryConfirm": "Вы уверены, что хотите очистить историю холста?", - "emptyTempImageFolder": "Очистить временную папку", - "emptyFolder": "Очистить папку", - "emptyTempImagesFolderMessage": "Очищение папки временных изображений также полностью сбрасывает холст, включая всю историю отмены/повтора, размещаемые изображения и базовый слой холста.", - "emptyTempImagesFolderConfirm": "Вы уверены, что хотите очистить временную папку?", - "activeLayer": "Активный слой", - "canvasScale": "Масштаб холста", - "boundingBox": "Ограничивающая рамка", - "scaledBoundingBox": "Масштабирование рамки", - "boundingBoxPosition": "Позиция ограничивающей рамки", - "canvasDimensions": "Размеры холста", - "canvasPosition": "Положение холста", - "cursorPosition": "Положение курсора", - "previous": "Предыдущее", - "next": "Следующее", - "accept": "Принять", - "showHide": "Показать/Скрыть", - "discardAll": "Отменить все", - "betaClear": "Очистить", - "betaDarkenOutside": "Затемнить снаружи", - "betaLimitToBox": "Ограничить выделением", - "betaPreserveMasked": "Сохранять маскируемую область", - "antialiasing": "Не удалось скопировать ссылку на изображение" - }, - "accessibility": { - "modelSelect": "Выбор модели", - "uploadImage": "Загрузить изображение", - "nextImage": "Следующее изображение", - "previousImage": "Предыдущее изображение", - "zoomIn": "Приблизить", - "zoomOut": "Отдалить", - "rotateClockwise": "Повернуть по часовой стрелке", - "rotateCounterClockwise": "Повернуть против часовой стрелки", - "flipVertically": "Перевернуть вертикально", - "flipHorizontally": "Отразить горизонтально", - "toggleAutoscroll": "Включить автопрокрутку", - "toggleLogViewer": "Показать или скрыть просмотрщик логов", - "showOptionsPanel": "Показать боковую панель", - "invokeProgressBar": "Индикатор выполнения", - "reset": "Сброс", - "modifyConfig": "Изменить конфиг", - "useThisParameter": "Использовать этот параметр", - "copyMetadataJson": "Скопировать метаданные JSON", - "exitViewer": "Закрыть просмотрщик", - "menu": "Меню" - }, - "ui": { - "showProgressImages": "Показывать промежуточный итог", - "hideProgressImages": "Не показывать промежуточный итог", - "swapSizes": "Поменять местами размеры", - "lockRatio": "Зафиксировать пропорции" - }, - "nodes": { - "zoomInNodes": "Увеличьте масштаб", - "zoomOutNodes": "Уменьшите масштаб", - "fitViewportNodes": "Уместить вид", - "hideGraphNodes": "Скрыть оверлей графа", - "showGraphNodes": "Показать оверлей графа", - "showLegendNodes": "Показать тип поля", - "hideMinimapnodes": "Скрыть миникарту", - "hideLegendNodes": "Скрыть тип поля", - "showMinimapnodes": "Показать миникарту", - "loadWorkflow": "Загрузить рабочий процесс", - "resetWorkflowDesc2": "Сброс рабочего процесса очистит все узлы, ребра и детали рабочего процесса.", - "resetWorkflow": "Сбросить рабочий процесс", - "resetWorkflowDesc": "Вы уверены, что хотите сбросить этот рабочий процесс?", - "reloadNodeTemplates": "Перезагрузить шаблоны узлов", - "downloadWorkflow": "Скачать JSON рабочего процесса" - }, - "controlnet": { - "amult": "a_mult", - "contentShuffleDescription": "Перетасовывает содержимое изображения", - "bgth": "bg_th", - "contentShuffle": "Перетасовка содержимого", - "beginEndStepPercent": "Процент начала/конца шага", - "duplicate": "Дублировать", - "balanced": "Сбалансированный", - "f": "F", - "depthMidasDescription": "Генерация карты глубины с использованием Midas", - "control": "Контроль", - "coarse": "Грубость обработки", - "crop": "Обрезка", - "depthMidas": "Глубина (Midas)", - "enableControlnet": "Включить ControlNet", - "detectResolution": "Определить разрешение", - "controlMode": "Режим контроля", - "cannyDescription": "Детектор границ Canny", - "depthZoe": "Глубина (Zoe)", - "autoConfigure": "Автонастройка процессора", - "delete": "Удалить", - "canny": "Canny", - "depthZoeDescription": "Генерация карты глубины с использованием Zoe" - }, - "boards": { - "autoAddBoard": "Авто добавление Доски", - "topMessage": "Эта доска содержит изображения, используемые в следующих функциях:", - "move": "Перемещение", - "menuItemAutoAdd": "Авто добавление на эту доску", - "myBoard": "Моя Доска", - "searchBoard": "Поиск Доски...", - "noMatching": "Нет подходящих Досок", - "selectBoard": "Выбрать Доску", - "cancel": "Отменить", - "addBoard": "Добавить Доску", - "bottomMessage": "Удаление этой доски и ее изображений приведет к сбросу всех функций, использующихся их в данный момент.", - "uncategorized": "Без категории", - "changeBoard": "Изменить Доску", - "loading": "Загрузка...", - "clearSearch": "Очистить поиск" - } -} diff --git a/invokeai/frontend/web/dist/locales/sv.json b/invokeai/frontend/web/dist/locales/sv.json deleted file mode 100644 index eef46c4513..0000000000 --- a/invokeai/frontend/web/dist/locales/sv.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "accessibility": { - "copyMetadataJson": "Kopiera metadata JSON", - "zoomIn": "Zooma in", - "exitViewer": "Avslutningsvisare", - "modelSelect": "Välj modell", - "uploadImage": "Ladda upp bild", - "invokeProgressBar": "Invoke förloppsmätare", - "nextImage": "Nästa bild", - "toggleAutoscroll": "Växla automatisk rullning", - "flipHorizontally": "Vänd vågrätt", - "flipVertically": "Vänd lodrätt", - "zoomOut": "Zooma ut", - "toggleLogViewer": "Växla logvisare", - "reset": "Starta om", - "previousImage": "Föregående bild", - "useThisParameter": "Använd denna parametern", - "rotateCounterClockwise": "Rotera moturs", - "rotateClockwise": "Rotera medurs", - "modifyConfig": "Ändra konfiguration", - "showOptionsPanel": "Visa inställningspanelen" - }, - "common": { - "hotkeysLabel": "Snabbtangenter", - "reportBugLabel": "Rapportera bugg", - "githubLabel": "Github", - "discordLabel": "Discord", - "settingsLabel": "Inställningar", - "langEnglish": "Engelska", - "langDutch": "Nederländska", - "langFrench": "Franska", - "langGerman": "Tyska", - "langItalian": "Italienska", - "langArabic": "العربية", - "langHebrew": "עברית", - "langPolish": "Polski", - "langPortuguese": "Português", - "langBrPortuguese": "Português do Brasil", - "langSimplifiedChinese": "简体中文", - "langJapanese": "日本語", - "langKorean": "한국어", - "langRussian": "Русский", - "unifiedCanvas": "Förenad kanvas", - "nodesDesc": "Ett nodbaserat system för bildgenerering är under utveckling. Håll utkik för uppdateringar om denna fantastiska funktion.", - "langUkranian": "Украї́нська", - "langSpanish": "Español", - "postProcessDesc2": "Ett dedikerat användargränssnitt kommer snart att släppas för att underlätta mer avancerade arbetsflöden av efterbehandling.", - "trainingDesc1": "Ett dedikerat arbetsflöde för träning av dina egna inbäddningar och kontrollpunkter genom Textual Inversion eller Dreambooth från webbgränssnittet.", - "trainingDesc2": "InvokeAI stöder redan träning av anpassade inbäddningar med hjälp av Textual Inversion genom huvudscriptet.", - "upload": "Ladda upp", - "close": "Stäng", - "cancel": "Avbryt", - "accept": "Acceptera", - "statusDisconnected": "Frånkopplad", - "statusGeneratingTextToImage": "Genererar text till bild", - "statusGeneratingImageToImage": "Genererar Bild till bild", - "statusGeneratingInpainting": "Genererar Måla i", - "statusGenerationComplete": "Generering klar", - "statusModelConverted": "Modell konverterad", - "statusMergingModels": "Sammanfogar modeller", - "loading": "Laddar", - "loadingInvokeAI": "Laddar Invoke AI", - "statusRestoringFaces": "Återskapar ansikten", - "languagePickerLabel": "Språkväljare", - "txt2img": "Text till bild", - "nodes": "Noder", - "img2img": "Bild till bild", - "postprocessing": "Efterbehandling", - "postProcessing": "Efterbehandling", - "load": "Ladda", - "training": "Träning", - "postProcessDesc1": "Invoke AI erbjuder ett brett utbud av efterbehandlingsfunktioner. Uppskalning och ansiktsåterställning finns redan tillgängligt i webbgränssnittet. Du kommer åt dem ifrån Avancerade inställningar-menyn under Bild till bild-fliken. Du kan också behandla bilder direkt genom att använda knappen bildåtgärder ovanför nuvarande bild eller i bildvisaren.", - "postProcessDesc3": "Invoke AI's kommandotolk erbjuder många olika funktioner, bland annat \"Förstora\".", - "statusGenerating": "Genererar", - "statusError": "Fel", - "back": "Bakåt", - "statusConnected": "Ansluten", - "statusPreparing": "Förbereder", - "statusProcessingCanceled": "Bearbetning avbruten", - "statusProcessingComplete": "Bearbetning färdig", - "statusGeneratingOutpainting": "Genererar Fyll ut", - "statusIterationComplete": "Itterering klar", - "statusSavingImage": "Sparar bild", - "statusRestoringFacesGFPGAN": "Återskapar ansikten (GFPGAN)", - "statusRestoringFacesCodeFormer": "Återskapar ansikten (CodeFormer)", - "statusUpscaling": "Skala upp", - "statusUpscalingESRGAN": "Uppskalning (ESRGAN)", - "statusModelChanged": "Modell ändrad", - "statusLoadingModel": "Laddar modell", - "statusConvertingModel": "Konverterar modell", - "statusMergedModels": "Modeller sammanfogade" - }, - "gallery": { - "generations": "Generationer", - "showGenerations": "Visa generationer", - "uploads": "Uppladdningar", - "showUploads": "Visa uppladdningar", - "galleryImageSize": "Bildstorlek", - "allImagesLoaded": "Alla bilder laddade", - "loadMore": "Ladda mer", - "galleryImageResetSize": "Återställ storlek", - "gallerySettings": "Galleriinställningar", - "maintainAspectRatio": "Behåll bildförhållande", - "noImagesInGallery": "Inga bilder i galleriet", - "autoSwitchNewImages": "Ändra automatiskt till nya bilder", - "singleColumnLayout": "Enkolumnslayout" - }, - "hotkeys": { - "generalHotkeys": "Allmänna snabbtangenter", - "galleryHotkeys": "Gallerisnabbtangenter", - "unifiedCanvasHotkeys": "Snabbtangenter för sammanslagskanvas", - "invoke": { - "title": "Anropa", - "desc": "Genererar en bild" - }, - "cancel": { - "title": "Avbryt", - "desc": "Avbryt bildgenerering" - }, - "focusPrompt": { - "desc": "Fokusera området för promptinmatning", - "title": "Fokusprompt" - }, - "pinOptions": { - "desc": "Nåla fast alternativpanelen", - "title": "Nåla fast alternativ" - }, - "toggleOptions": { - "title": "Växla inställningar", - "desc": "Öppna och stäng alternativpanelen" - }, - "toggleViewer": { - "title": "Växla visaren", - "desc": "Öppna och stäng bildvisaren" - }, - "toggleGallery": { - "title": "Växla galleri", - "desc": "Öppna eller stäng galleribyrån" - }, - "maximizeWorkSpace": { - "title": "Maximera arbetsyta", - "desc": "Stäng paneler och maximera arbetsyta" - }, - "changeTabs": { - "title": "Växla flik", - "desc": "Byt till en annan arbetsyta" - }, - "consoleToggle": { - "title": "Växla konsol", - "desc": "Öppna och stäng konsol" - }, - "setSeed": { - "desc": "Använd seed för nuvarande bild", - "title": "välj seed" - }, - "setParameters": { - "title": "Välj parametrar", - "desc": "Använd alla parametrar från nuvarande bild" - }, - "setPrompt": { - "desc": "Använd prompt för nuvarande bild", - "title": "Välj prompt" - }, - "restoreFaces": { - "title": "Återskapa ansikten", - "desc": "Återskapa nuvarande bild" - }, - "upscale": { - "title": "Skala upp", - "desc": "Skala upp nuvarande bild" - }, - "showInfo": { - "title": "Visa info", - "desc": "Visa metadata för nuvarande bild" - }, - "sendToImageToImage": { - "title": "Skicka till Bild till bild", - "desc": "Skicka nuvarande bild till Bild till bild" - }, - "deleteImage": { - "title": "Radera bild", - "desc": "Radera nuvarande bild" - }, - "closePanels": { - "title": "Stäng paneler", - "desc": "Stäng öppna paneler" - }, - "previousImage": { - "title": "Föregående bild", - "desc": "Visa föregående bild" - }, - "nextImage": { - "title": "Nästa bild", - "desc": "Visa nästa bild" - }, - "toggleGalleryPin": { - "title": "Växla gallerinål", - "desc": "Nålar fast eller nålar av galleriet i gränssnittet" - }, - "increaseGalleryThumbSize": { - "title": "Förstora galleriets bildstorlek", - "desc": "Förstora miniatyrbildernas storlek" - }, - "decreaseGalleryThumbSize": { - "title": "Minska gelleriets bildstorlek", - "desc": "Minska miniatyrbildernas storlek i galleriet" - }, - "decreaseBrushSize": { - "desc": "Förminska storleken på kanvas- pensel eller suddgummi", - "title": "Minska penselstorlek" - }, - "increaseBrushSize": { - "title": "Öka penselstorlek", - "desc": "Öka stoleken på kanvas- pensel eller suddgummi" - }, - "increaseBrushOpacity": { - "title": "Öka penselns opacitet", - "desc": "Öka opaciteten för kanvaspensel" - }, - "decreaseBrushOpacity": { - "desc": "Minska kanvaspenselns opacitet", - "title": "Minska penselns opacitet" - }, - "moveTool": { - "title": "Flytta", - "desc": "Tillåt kanvasnavigation" - }, - "fillBoundingBox": { - "title": "Fyll ram", - "desc": "Fyller ramen med pensels färg" - }, - "keyboardShortcuts": "Snabbtangenter", - "appHotkeys": "Appsnabbtangenter", - "selectBrush": { - "desc": "Välj kanvaspensel", - "title": "Välj pensel" - }, - "selectEraser": { - "desc": "Välj kanvassuddgummi", - "title": "Välj suddgummi" - }, - "eraseBoundingBox": { - "title": "Ta bort ram" - } - } -} diff --git a/invokeai/frontend/web/dist/locales/tr.json b/invokeai/frontend/web/dist/locales/tr.json deleted file mode 100644 index 0c222eecf7..0000000000 --- a/invokeai/frontend/web/dist/locales/tr.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "accessibility": { - "invokeProgressBar": "Invoke ilerleme durumu", - "nextImage": "Sonraki Resim", - "useThisParameter": "Kullanıcı parametreleri", - "copyMetadataJson": "Metadata verilerini kopyala (JSON)", - "exitViewer": "Görüntüleme Modundan Çık", - "zoomIn": "Yakınlaştır", - "zoomOut": "Uzaklaştır", - "rotateCounterClockwise": "Döndür (Saat yönünün tersine)", - "rotateClockwise": "Döndür (Saat yönünde)", - "flipHorizontally": "Yatay Çevir", - "flipVertically": "Dikey Çevir", - "modifyConfig": "Ayarları Değiştir", - "toggleAutoscroll": "Otomatik kaydırmayı aç/kapat", - "toggleLogViewer": "Günlük Görüntüleyici Aç/Kapa", - "showOptionsPanel": "Ayarlar Panelini Göster", - "modelSelect": "Model Seçin", - "reset": "Sıfırla", - "uploadImage": "Resim Yükle", - "previousImage": "Önceki Resim", - "menu": "Menü" - }, - "common": { - "hotkeysLabel": "Kısayol Tuşları", - "languagePickerLabel": "Dil Seçimi", - "reportBugLabel": "Hata Bildir", - "githubLabel": "Github", - "discordLabel": "Discord", - "settingsLabel": "Ayarlar", - "langArabic": "Arapça", - "langEnglish": "İngilizce", - "langDutch": "Hollandaca", - "langFrench": "Fransızca", - "langGerman": "Almanca", - "langItalian": "İtalyanca", - "langJapanese": "Japonca", - "langPolish": "Lehçe", - "langPortuguese": "Portekizce", - "langBrPortuguese": "Portekizcr (Brezilya)", - "langRussian": "Rusça", - "langSimplifiedChinese": "Çince (Basit)", - "langUkranian": "Ukraynaca", - "langSpanish": "İspanyolca", - "txt2img": "Metinden Resime", - "img2img": "Resimden Metine", - "linear": "Çizgisel", - "nodes": "Düğümler", - "postprocessing": "İşlem Sonrası", - "postProcessing": "İşlem Sonrası", - "postProcessDesc2": "Daha gelişmiş özellikler için ve iş akışını kolaylaştırmak için özel bir kullanıcı arayüzü çok yakında yayınlanacaktır.", - "postProcessDesc3": "Invoke AI komut satırı arayüzü, bir çok yeni özellik sunmaktadır.", - "langKorean": "Korece", - "unifiedCanvas": "Akıllı Tuval", - "nodesDesc": "Görüntülerin oluşturulmasında hazırladığımız yeni bir sistem geliştirme aşamasındadır. Bu harika özellikler ve çok daha fazlası için bizi takip etmeye devam edin.", - "postProcessDesc1": "Invoke AI son kullanıcıya yönelik bir çok özellik sunar. Görüntü kalitesi yükseltme, yüz restorasyonu WebUI üzerinden kullanılabilir. Metinden resime ve resimden metne araçlarına gelişmiş seçenekler menüsünden ulaşabilirsiniz. İsterseniz mevcut görüntü ekranının üzerindeki veya görüntüleyicideki görüntüyü doğrudan düzenleyebilirsiniz." - } -} diff --git a/invokeai/frontend/web/dist/locales/uk.json b/invokeai/frontend/web/dist/locales/uk.json deleted file mode 100644 index a85faee727..0000000000 --- a/invokeai/frontend/web/dist/locales/uk.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Гарячi клавіші", - "languagePickerLabel": "Мова", - "reportBugLabel": "Повідомити про помилку", - "settingsLabel": "Налаштування", - "img2img": "Зображення із зображення (img2img)", - "unifiedCanvas": "Універсальне полотно", - "nodes": "Вузли", - "langUkranian": "Украї́нська", - "nodesDesc": "Система генерації зображень на основі нодів (вузлів) вже розробляється. Слідкуйте за новинами про цю чудову функцію.", - "postProcessing": "Постобробка", - "postProcessDesc1": "Invoke AI пропонує широкий спектр функцій постобробки. Збільшення зображення (upscale) та відновлення облич вже доступні в інтерфейсі. Отримайте доступ до них з меню 'Додаткові параметри' на вкладках 'Зображення із тексту' та 'Зображення із зображення'. Обробляйте зображення безпосередньо, використовуючи кнопки дій із зображеннями над поточним зображенням або в режимі перегляду.", - "postProcessDesc2": "Найближчим часом буде випущено спеціальний інтерфейс для більш сучасних процесів постобробки.", - "postProcessDesc3": "Інтерфейс командного рядка Invoke AI пропонує різні інші функції, включаючи збільшення Embiggen.", - "training": "Навчання", - "trainingDesc1": "Спеціальний інтерфейс для навчання власних моделей з використанням Textual Inversion та Dreambooth.", - "trainingDesc2": "InvokeAI вже підтримує навчання моделей за допомогою TI, через інтерфейс командного рядка.", - "upload": "Завантажити", - "close": "Закрити", - "load": "Завантажити", - "statusConnected": "Підключено", - "statusDisconnected": "Відключено", - "statusError": "Помилка", - "statusPreparing": "Підготування", - "statusProcessingCanceled": "Обробка перервана", - "statusProcessingComplete": "Обробка завершена", - "statusGenerating": "Генерація", - "statusGeneratingTextToImage": "Генерація зображення із тексту", - "statusGeneratingImageToImage": "Генерація зображення із зображення", - "statusGeneratingInpainting": "Домальовка всередині", - "statusGeneratingOutpainting": "Домальовка зовні", - "statusGenerationComplete": "Генерація завершена", - "statusIterationComplete": "Iтерація завершена", - "statusSavingImage": "Збереження зображення", - "statusRestoringFaces": "Відновлення облич", - "statusRestoringFacesGFPGAN": "Відновлення облич (GFPGAN)", - "statusRestoringFacesCodeFormer": "Відновлення облич (CodeFormer)", - "statusUpscaling": "Збільшення", - "statusUpscalingESRGAN": "Збільшення (ESRGAN)", - "statusLoadingModel": "Завантаження моделі", - "statusModelChanged": "Модель змінено", - "cancel": "Скасувати", - "accept": "Підтвердити", - "back": "Назад", - "postprocessing": "Постобробка", - "statusModelConverted": "Модель сконвертована", - "statusMergingModels": "Злиття моделей", - "loading": "Завантаження", - "loadingInvokeAI": "Завантаження Invoke AI", - "langHebrew": "Іврит", - "langKorean": "Корейська", - "langPortuguese": "Португальська", - "langArabic": "Арабська", - "langSimplifiedChinese": "Китайська (спрощена)", - "langSpanish": "Іспанська", - "langEnglish": "Англійська", - "langGerman": "Німецька", - "langItalian": "Італійська", - "langJapanese": "Японська", - "langPolish": "Польська", - "langBrPortuguese": "Португальська (Бразилія)", - "langRussian": "Російська", - "githubLabel": "Github", - "txt2img": "Текст в зображення (txt2img)", - "discordLabel": "Discord", - "langDutch": "Голландська", - "langFrench": "Французька", - "statusMergedModels": "Моделі об'єднані", - "statusConvertingModel": "Конвертація моделі", - "linear": "Лінійна обробка" - }, - "gallery": { - "generations": "Генерації", - "showGenerations": "Показувати генерації", - "uploads": "Завантаження", - "showUploads": "Показувати завантаження", - "galleryImageSize": "Розмір зображень", - "galleryImageResetSize": "Аатоматичний розмір", - "gallerySettings": "Налаштування галереї", - "maintainAspectRatio": "Зберігати пропорції", - "autoSwitchNewImages": "Автоматично вибирати нові", - "singleColumnLayout": "Одна колонка", - "allImagesLoaded": "Всі зображення завантажені", - "loadMore": "Завантажити більше", - "noImagesInGallery": "Зображень немає" - }, - "hotkeys": { - "keyboardShortcuts": "Клавіатурні скорочення", - "appHotkeys": "Гарячі клавіші програми", - "generalHotkeys": "Загальні гарячі клавіші", - "galleryHotkeys": "Гарячі клавіші галереї", - "unifiedCanvasHotkeys": "Гарячі клавіші універсального полотна", - "invoke": { - "title": "Invoke", - "desc": "Згенерувати зображення" - }, - "cancel": { - "title": "Скасувати", - "desc": "Скасувати генерацію зображення" - }, - "focusPrompt": { - "title": "Переключитися на введення запиту", - "desc": "Перемикання на область введення запиту" - }, - "toggleOptions": { - "title": "Показати/приховати параметри", - "desc": "Відкривати і закривати панель параметрів" - }, - "pinOptions": { - "title": "Закріпити параметри", - "desc": "Закріпити панель параметрів" - }, - "toggleViewer": { - "title": "Показати перегляд", - "desc": "Відкривати і закривати переглядач зображень" - }, - "toggleGallery": { - "title": "Показати галерею", - "desc": "Відкривати і закривати скриньку галереї" - }, - "maximizeWorkSpace": { - "title": "Максимізувати робочий простір", - "desc": "Приховати панелі і максимізувати робочу область" - }, - "changeTabs": { - "title": "Переключити вкладку", - "desc": "Переключитися на іншу робочу область" - }, - "consoleToggle": { - "title": "Показати консоль", - "desc": "Відкривати і закривати консоль" - }, - "setPrompt": { - "title": "Використовувати запит", - "desc": "Використати запит із поточного зображення" - }, - "setSeed": { - "title": "Використовувати сід", - "desc": "Використовувати сід поточного зображення" - }, - "setParameters": { - "title": "Використовувати всі параметри", - "desc": "Використовувати всі параметри поточного зображення" - }, - "restoreFaces": { - "title": "Відновити обличчя", - "desc": "Відновити обличчя на поточному зображенні" - }, - "upscale": { - "title": "Збільшення", - "desc": "Збільшити поточне зображення" - }, - "showInfo": { - "title": "Показати метадані", - "desc": "Показати метадані з поточного зображення" - }, - "sendToImageToImage": { - "title": "Відправити в img2img", - "desc": "Надіслати поточне зображення в Image To Image" - }, - "deleteImage": { - "title": "Видалити зображення", - "desc": "Видалити поточне зображення" - }, - "closePanels": { - "title": "Закрити панелі", - "desc": "Закриває відкриті панелі" - }, - "previousImage": { - "title": "Попереднє зображення", - "desc": "Відображати попереднє зображення в галереї" - }, - "nextImage": { - "title": "Наступне зображення", - "desc": "Відображення наступного зображення в галереї" - }, - "toggleGalleryPin": { - "title": "Закріпити галерею", - "desc": "Закріплює і відкріплює галерею" - }, - "increaseGalleryThumbSize": { - "title": "Збільшити розмір мініатюр галереї", - "desc": "Збільшує розмір мініатюр галереї" - }, - "decreaseGalleryThumbSize": { - "title": "Зменшує розмір мініатюр галереї", - "desc": "Зменшує розмір мініатюр галереї" - }, - "selectBrush": { - "title": "Вибрати пензель", - "desc": "Вибирає пензель для полотна" - }, - "selectEraser": { - "title": "Вибрати ластик", - "desc": "Вибирає ластик для полотна" - }, - "decreaseBrushSize": { - "title": "Зменшити розмір пензля", - "desc": "Зменшує розмір пензля/ластика полотна" - }, - "increaseBrushSize": { - "title": "Збільшити розмір пензля", - "desc": "Збільшує розмір пензля/ластика полотна" - }, - "decreaseBrushOpacity": { - "title": "Зменшити непрозорість пензля", - "desc": "Зменшує непрозорість пензля полотна" - }, - "increaseBrushOpacity": { - "title": "Збільшити непрозорість пензля", - "desc": "Збільшує непрозорість пензля полотна" - }, - "moveTool": { - "title": "Інструмент переміщення", - "desc": "Дозволяє переміщатися по полотну" - }, - "fillBoundingBox": { - "title": "Заповнити обмежувальну рамку", - "desc": "Заповнює обмежувальну рамку кольором пензля" - }, - "eraseBoundingBox": { - "title": "Стерти обмежувальну рамку", - "desc": "Стирає область обмежувальної рамки" - }, - "colorPicker": { - "title": "Вибрати колір", - "desc": "Вибирає засіб вибору кольору полотна" - }, - "toggleSnap": { - "title": "Увімкнути прив'язку", - "desc": "Вмикає/вимикає прив'язку до сітки" - }, - "quickToggleMove": { - "title": "Швидке перемикання переміщення", - "desc": "Тимчасово перемикає режим переміщення" - }, - "toggleLayer": { - "title": "Переключити шар", - "desc": "Перемикання маски/базового шару" - }, - "clearMask": { - "title": "Очистити маску", - "desc": "Очистити всю маску" - }, - "hideMask": { - "title": "Приховати маску", - "desc": "Приховує/показує маску" - }, - "showHideBoundingBox": { - "title": "Показати/приховати обмежувальну рамку", - "desc": "Переключити видимість обмежувальної рамки" - }, - "mergeVisible": { - "title": "Об'єднати видимі", - "desc": "Об'єднати всі видимі шари полотна" - }, - "saveToGallery": { - "title": "Зберегти в галерею", - "desc": "Зберегти поточне полотно в галерею" - }, - "copyToClipboard": { - "title": "Копіювати в буфер обміну", - "desc": "Копіювати поточне полотно в буфер обміну" - }, - "downloadImage": { - "title": "Завантажити зображення", - "desc": "Завантажити вміст полотна" - }, - "undoStroke": { - "title": "Скасувати пензель", - "desc": "Скасувати мазок пензля" - }, - "redoStroke": { - "title": "Повторити мазок пензля", - "desc": "Повторити мазок пензля" - }, - "resetView": { - "title": "Вид за замовчуванням", - "desc": "Скинути вид полотна" - }, - "previousStagingImage": { - "title": "Попереднє зображення", - "desc": "Попереднє зображення" - }, - "nextStagingImage": { - "title": "Наступне зображення", - "desc": "Наступне зображення" - }, - "acceptStagingImage": { - "title": "Прийняти зображення", - "desc": "Прийняти поточне зображення" - } - }, - "modelManager": { - "modelManager": "Менеджер моделей", - "model": "Модель", - "modelAdded": "Модель додана", - "modelUpdated": "Модель оновлена", - "modelEntryDeleted": "Запис про модель видалено", - "cannotUseSpaces": "Не можна використовувати пробіли", - "addNew": "Додати нову", - "addNewModel": "Додати нову модель", - "addManually": "Додати вручну", - "manual": "Ручне", - "name": "Назва", - "nameValidationMsg": "Введіть назву моделі", - "description": "Опис", - "descriptionValidationMsg": "Введіть опис моделі", - "config": "Файл конфігурації", - "configValidationMsg": "Шлях до файлу конфігурації.", - "modelLocation": "Розташування моделі", - "modelLocationValidationMsg": "Шлях до файлу з моделлю.", - "vaeLocation": "Розтышування VAE", - "vaeLocationValidationMsg": "Шлях до VAE.", - "width": "Ширина", - "widthValidationMsg": "Початкова ширина зображень.", - "height": "Висота", - "heightValidationMsg": "Початкова висота зображень.", - "addModel": "Додати модель", - "updateModel": "Оновити модель", - "availableModels": "Доступні моделі", - "search": "Шукати", - "load": "Завантажити", - "active": "активна", - "notLoaded": "не завантажена", - "cached": "кешована", - "checkpointFolder": "Папка з моделями", - "clearCheckpointFolder": "Очистити папку з моделями", - "findModels": "Знайти моделі", - "scanAgain": "Сканувати знову", - "modelsFound": "Знайдені моделі", - "selectFolder": "Обрати папку", - "selected": "Обрані", - "selectAll": "Обрати всі", - "deselectAll": "Зняти выділення", - "showExisting": "Показувати додані", - "addSelected": "Додати обрані", - "modelExists": "Модель вже додана", - "selectAndAdd": "Оберіть і додайте моделі із списку", - "noModelsFound": "Моделі не знайдені", - "delete": "Видалити", - "deleteModel": "Видалити модель", - "deleteConfig": "Видалити конфігурацію", - "deleteMsg1": "Ви точно хочете видалити модель із InvokeAI?", - "deleteMsg2": "Це не призведе до видалення файлу моделі з диску. Позніше ви можете додати його знову.", - "allModels": "Усі моделі", - "diffusersModels": "Diffusers", - "scanForModels": "Сканувати моделі", - "convert": "Конвертувати", - "convertToDiffusers": "Конвертувати в Diffusers", - "formMessageDiffusersVAELocationDesc": "Якщо не надано, InvokeAI буде шукати файл VAE в розташуванні моделі, вказаній вище.", - "convertToDiffusersHelpText3": "Файл моделі на диску НЕ буде видалено або змінено. Ви можете знову додати його в Model Manager, якщо потрібно.", - "customConfig": "Користувальницький конфіг", - "invokeRoot": "Каталог InvokeAI", - "custom": "Користувальницький", - "modelTwo": "Модель 2", - "modelThree": "Модель 3", - "mergedModelName": "Назва об'єднаної моделі", - "alpha": "Альфа", - "interpolationType": "Тип інтерполяції", - "mergedModelSaveLocation": "Шлях збереження", - "mergedModelCustomSaveLocation": "Користувальницький шлях", - "invokeAIFolder": "Каталог InvokeAI", - "ignoreMismatch": "Ігнорувати невідповідності між вибраними моделями", - "modelMergeHeaderHelp2": "Тільки Diffusers-моделі доступні для об'єднання. Якщо ви хочете об'єднати checkpoint-моделі, спочатку перетворіть їх на Diffusers.", - "checkpointModels": "Checkpoints", - "repo_id": "ID репозиторію", - "v2_base": "v2 (512px)", - "repoIDValidationMsg": "Онлайн-репозиторій моделі", - "formMessageDiffusersModelLocationDesc": "Вкажіть хоча б одне.", - "formMessageDiffusersModelLocation": "Шлях до Diffusers-моделі", - "v2_768": "v2 (768px)", - "formMessageDiffusersVAELocation": "Шлях до VAE", - "convertToDiffusersHelpText5": "Переконайтеся, що у вас достатньо місця на диску. Моделі зазвичай займають від 4 до 7 Гб.", - "convertToDiffusersSaveLocation": "Шлях збереження", - "v1": "v1", - "convertToDiffusersHelpText6": "Ви хочете перетворити цю модель?", - "inpainting": "v1 Inpainting", - "modelConverted": "Модель перетворено", - "sameFolder": "У ту ж папку", - "statusConverting": "Перетворення", - "merge": "Об'єднати", - "mergeModels": "Об'єднати моделі", - "modelOne": "Модель 1", - "sigmoid": "Сігмоїд", - "weightedSum": "Зважена сума", - "none": "пусто", - "addDifference": "Додати різницю", - "pickModelType": "Вибрати тип моделі", - "convertToDiffusersHelpText4": "Це одноразова дія. Вона може зайняти від 30 до 60 секунд в залежності від характеристик вашого комп'ютера.", - "pathToCustomConfig": "Шлях до конфігу користувача", - "safetensorModels": "SafeTensors", - "addCheckpointModel": "Додати модель Checkpoint/Safetensor", - "addDiffuserModel": "Додати Diffusers", - "vaeRepoID": "ID репозиторію VAE", - "vaeRepoIDValidationMsg": "Онлайн-репозиторій VAE", - "modelMergeInterpAddDifferenceHelp": "У цьому режимі Модель 3 спочатку віднімається з Моделі 2. Результуюча версія змішується з Моделью 1 із встановленим вище коефіцієнтом Альфа.", - "customSaveLocation": "Користувальницький шлях збереження", - "modelMergeAlphaHelp": "Альфа впливає силу змішування моделей. Нижчі значення альфа призводять до меншого впливу другої моделі.", - "convertToDiffusersHelpText1": "Ця модель буде конвертована в формат 🧨 Diffusers.", - "convertToDiffusersHelpText2": "Цей процес замінить ваш запис в Model Manager на версію тієї ж моделі в Diffusers.", - "modelsMerged": "Моделі об'єднані", - "modelMergeHeaderHelp1": "Ви можете об'єднати до трьох різних моделей, щоб створити змішану, що відповідає вашим потребам.", - "inverseSigmoid": "Зворотній Сігмоїд" - }, - "parameters": { - "images": "Зображення", - "steps": "Кроки", - "cfgScale": "Рівень CFG", - "width": "Ширина", - "height": "Висота", - "seed": "Сід", - "randomizeSeed": "Випадковий сид", - "shuffle": "Оновити", - "noiseThreshold": "Поріг шуму", - "perlinNoise": "Шум Перліна", - "variations": "Варіації", - "variationAmount": "Кількість варіацій", - "seedWeights": "Вага сіду", - "faceRestoration": "Відновлення облич", - "restoreFaces": "Відновити обличчя", - "type": "Тип", - "strength": "Сила", - "upscaling": "Збільшення", - "upscale": "Збільшити", - "upscaleImage": "Збільшити зображення", - "scale": "Масштаб", - "otherOptions": "інші параметри", - "seamlessTiling": "Безшовний узор", - "hiresOptim": "Оптимізація High Res", - "imageFit": "Вмістити зображення", - "codeformerFidelity": "Точність", - "scaleBeforeProcessing": "Масштабувати", - "scaledWidth": "Масштаб Ш", - "scaledHeight": "Масштаб В", - "infillMethod": "Засіб заповнення", - "tileSize": "Розмір області", - "boundingBoxHeader": "Обмежуюча рамка", - "seamCorrectionHeader": "Налаштування шву", - "infillScalingHeader": "Заповнення і масштабування", - "img2imgStrength": "Сила обробки img2img", - "toggleLoopback": "Зациклити обробку", - "sendTo": "Надіслати", - "sendToImg2Img": "Надіслати у img2img", - "sendToUnifiedCanvas": "Надіслати на полотно", - "copyImageToLink": "Скопіювати посилання", - "downloadImage": "Завантажити", - "openInViewer": "Відкрити у переглядачі", - "closeViewer": "Закрити переглядач", - "usePrompt": "Використати запит", - "useSeed": "Використати сід", - "useAll": "Використати все", - "useInitImg": "Використати як початкове", - "info": "Метадані", - "initialImage": "Початкове зображення", - "showOptionsPanel": "Показати панель налаштувань", - "general": "Основне", - "cancel": { - "immediate": "Скасувати негайно", - "schedule": "Скасувати після поточної ітерації", - "isScheduled": "Відміна", - "setType": "Встановити тип скасування" - }, - "vSymmetryStep": "Крок верт. симетрії", - "hiresStrength": "Сила High Res", - "hidePreview": "Сховати попередній перегляд", - "showPreview": "Показати попередній перегляд", - "imageToImage": "Зображення до зображення", - "denoisingStrength": "Сила шумоподавлення", - "copyImage": "Копіювати зображення", - "symmetry": "Симетрія", - "hSymmetryStep": "Крок гор. симетрії" - }, - "settings": { - "models": "Моделі", - "displayInProgress": "Показувати процес генерації", - "saveSteps": "Зберігати кожні n кроків", - "confirmOnDelete": "Підтверджувати видалення", - "displayHelpIcons": "Показувати значки підказок", - "enableImageDebugging": "Увімкнути налагодження", - "resetWebUI": "Повернути початкові", - "resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.", - "resetWebUIDesc2": "Якщо зображення не відображаються в галереї або не працює ще щось, спробуйте скинути налаштування, перш ніж повідомляти про проблему на GitHub.", - "resetComplete": "Інтерфейс скинуто. Оновіть цю сторінку.", - "useSlidersForAll": "Використовувати повзунки для всіх параметрів" - }, - "toast": { - "tempFoldersEmptied": "Тимчасова папка очищена", - "uploadFailed": "Не вдалося завантажити", - "uploadFailedUnableToLoadDesc": "Неможливо завантажити файл", - "downloadImageStarted": "Завантаження зображення почалося", - "imageCopied": "Зображення скопійоване", - "imageLinkCopied": "Посилання на зображення скопійовано", - "imageNotLoaded": "Зображення не завантажено", - "imageNotLoadedDesc": "Не знайдено зображення для надсилання до img2img", - "imageSavedToGallery": "Зображення збережено в галерею", - "canvasMerged": "Полотно об'єднане", - "sentToImageToImage": "Надіслати до img2img", - "sentToUnifiedCanvas": "Надіслати на полотно", - "parametersSet": "Параметри задані", - "parametersNotSet": "Параметри не задані", - "parametersNotSetDesc": "Не знайдені метадані цього зображення.", - "parametersFailed": "Проблема із завантаженням параметрів", - "parametersFailedDesc": "Неможливо завантажити початкове зображення.", - "seedSet": "Сід заданий", - "seedNotSet": "Сід не заданий", - "seedNotSetDesc": "Не вдалося знайти сід для зображення.", - "promptSet": "Запит заданий", - "promptNotSet": "Запит не заданий", - "promptNotSetDesc": "Не вдалося знайти запит для зображення.", - "upscalingFailed": "Збільшення не вдалося", - "faceRestoreFailed": "Відновлення облич не вдалося", - "metadataLoadFailed": "Не вдалося завантажити метадані", - "initialImageSet": "Початкове зображення задане", - "initialImageNotSet": "Початкове зображення не задане", - "initialImageNotSetDesc": "Не вдалося завантажити початкове зображення", - "serverError": "Помилка сервера", - "disconnected": "Відключено від сервера", - "connected": "Підключено до сервера", - "canceled": "Обробку скасовано" - }, - "tooltip": { - "feature": { - "prompt": "Це поле для тексту запиту, включаючи об'єкти генерації та стилістичні терміни. У запит можна включити і коефіцієнти ваги (значущості токена), але консольні команди та параметри не працюватимуть.", - "gallery": "Тут відображаються генерації з папки outputs у міру їх появи.", - "other": "Ці опції включають альтернативні режими обробки для Invoke. 'Безшовний узор' створить на виході узори, що повторюються. 'Висока роздільна здатність' - це генерація у два етапи за допомогою img2img: використовуйте це налаштування, коли хочете отримати цільне зображення більшого розміру без артефактів.", - "seed": "Значення сіду впливає на початковий шум, з якого сформується зображення. Можна використовувати вже наявний сід із попередніх зображень. 'Поріг шуму' використовується для пом'якшення артефактів при високих значеннях CFG (спробуйте в діапазоні 0-10), а 'Перлін' - для додавання шуму Перліна в процесі генерації: обидва параметри служать для більшої варіативності результатів.", - "variations": "Спробуйте варіацію зі значенням від 0.1 до 1.0, щоб змінити результат для заданого сиду. Цікаві варіації сиду знаходяться між 0.1 і 0.3.", - "upscale": "Використовуйте ESRGAN, щоб збільшити зображення відразу після генерації.", - "faceCorrection": "Корекція облич за допомогою GFPGAN або Codeformer: алгоритм визначає обличчя у готовому зображенні та виправляє будь-які дефекти. Високі значення сили змінюють зображення сильніше, в результаті обличчя будуть виглядати привабливіше. У Codeformer більш висока точність збереже вихідне зображення на шкоду корекції обличчя.", - "imageToImage": "'Зображення до зображення' завантажує будь-яке зображення, яке потім використовується для генерації разом із запитом. Чим більше значення, тим сильніше зміниться зображення в результаті. Можливі значення від 0 до 1, рекомендується діапазон 0.25-0.75", - "boundingBox": "'Обмежуюча рамка' аналогічна налаштуванням 'Ширина' і 'Висота' для 'Зображення з тексту' або 'Зображення до зображення'. Буде оброблена тільки область у рамці.", - "seamCorrection": "Керування обробкою видимих швів, що виникають між зображеннями на полотні.", - "infillAndScaling": "Керування методами заповнення (використовується для масок або стертих частин полотна) та масштабування (корисно для малих розмірів обмежуючої рамки)." - } - }, - "unifiedCanvas": { - "layer": "Шар", - "base": "Базовий", - "mask": "Маска", - "maskingOptions": "Параметри маски", - "enableMask": "Увiмкнути маску", - "preserveMaskedArea": "Зберiгати замасковану область", - "clearMask": "Очистити маску", - "brush": "Пензель", - "eraser": "Гумка", - "fillBoundingBox": "Заповнити обмежуючу рамку", - "eraseBoundingBox": "Стерти обмежуючу рамку", - "colorPicker": "Пiпетка", - "brushOptions": "Параметри пензля", - "brushSize": "Розмiр", - "move": "Перемiстити", - "resetView": "Скинути вигляд", - "mergeVisible": "Об'єднати видимi", - "saveToGallery": "Зберегти до галереї", - "copyToClipboard": "Копiювати до буферу обмiну", - "downloadAsImage": "Завантажити як зображення", - "undo": "Вiдмiнити", - "redo": "Повторити", - "clearCanvas": "Очистити полотно", - "canvasSettings": "Налаштування полотна", - "showIntermediates": "Показувати процес", - "showGrid": "Показувати сiтку", - "snapToGrid": "Прив'язати до сітки", - "darkenOutsideSelection": "Затемнити полотно зовні", - "autoSaveToGallery": "Автозбереження до галереї", - "saveBoxRegionOnly": "Зберiгати тiльки видiлення", - "limitStrokesToBox": "Обмежити штрихи виділенням", - "showCanvasDebugInfo": "Показати дод. інформацію про полотно", - "clearCanvasHistory": "Очистити iсторiю полотна", - "clearHistory": "Очистити iсторiю", - "clearCanvasHistoryMessage": "Очищення історії полотна залишає поточне полотно незайманим, але видаляє історію скасування та повтору.", - "clearCanvasHistoryConfirm": "Ви впевнені, що хочете очистити історію полотна?", - "emptyTempImageFolder": "Очистити тимчасову папку", - "emptyFolder": "Очистити папку", - "emptyTempImagesFolderMessage": "Очищення папки тимчасових зображень також повністю скидає полотно, включаючи всю історію скасування/повтору, зображення та базовий шар полотна, що розміщуються.", - "emptyTempImagesFolderConfirm": "Ви впевнені, що хочете очистити тимчасову папку?", - "activeLayer": "Активний шар", - "canvasScale": "Масштаб полотна", - "boundingBox": "Обмежуюча рамка", - "scaledBoundingBox": "Масштабування рамки", - "boundingBoxPosition": "Позиція обмежуючої рамки", - "canvasDimensions": "Разміри полотна", - "canvasPosition": "Розташування полотна", - "cursorPosition": "Розташування курсора", - "previous": "Попереднє", - "next": "Наступне", - "accept": "Приняти", - "showHide": "Показати/Сховати", - "discardAll": "Відмінити все", - "betaClear": "Очистити", - "betaDarkenOutside": "Затемнити зовні", - "betaLimitToBox": "Обмежити виділенням", - "betaPreserveMasked": "Зберiгати замасковану область" - }, - "accessibility": { - "nextImage": "Наступне зображення", - "modelSelect": "Вибір моделі", - "invokeProgressBar": "Індикатор виконання", - "reset": "Скинути", - "uploadImage": "Завантажити зображення", - "useThisParameter": "Використовувати цей параметр", - "exitViewer": "Вийти з переглядача", - "zoomIn": "Збільшити", - "zoomOut": "Зменшити", - "rotateCounterClockwise": "Обертати проти годинникової стрілки", - "rotateClockwise": "Обертати за годинниковою стрілкою", - "toggleAutoscroll": "Увімкнути автопрокручування", - "toggleLogViewer": "Показати або приховати переглядач журналів", - "previousImage": "Попереднє зображення", - "copyMetadataJson": "Скопіювати метадані JSON", - "flipVertically": "Перевернути по вертикалі", - "flipHorizontally": "Відобразити по горизонталі", - "showOptionsPanel": "Показати опції", - "modifyConfig": "Змінити конфігурацію", - "menu": "Меню" - } -} diff --git a/invokeai/frontend/web/dist/locales/vi.json b/invokeai/frontend/web/dist/locales/vi.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/invokeai/frontend/web/dist/locales/vi.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/invokeai/frontend/web/dist/locales/zh_CN.json b/invokeai/frontend/web/dist/locales/zh_CN.json deleted file mode 100644 index 130fdfb182..0000000000 --- a/invokeai/frontend/web/dist/locales/zh_CN.json +++ /dev/null @@ -1,1519 +0,0 @@ -{ - "common": { - "hotkeysLabel": "快捷键", - "languagePickerLabel": "语言", - "reportBugLabel": "反馈错误", - "settingsLabel": "设置", - "img2img": "图生图", - "unifiedCanvas": "统一画布", - "nodes": "工作流编辑器", - "langSimplifiedChinese": "简体中文", - "nodesDesc": "一个基于节点的图像生成系统目前正在开发中。请持续关注关于这一功能的更新。", - "postProcessing": "后期处理", - "postProcessDesc1": "Invoke AI 提供各种各样的后期处理功能。图像放大和面部修复在网页界面中已经可用。你可以从文生图和图生图页面的高级选项菜单中访问它们。你也可以直接使用图像显示上方或查看器中的图像操作按钮处理图像。", - "postProcessDesc2": "一个专门的界面将很快发布,新的界面能够处理更复杂的后期处理流程。", - "postProcessDesc3": "Invoke AI 命令行界面提供例如 Embiggen 的各种其他功能。", - "training": "训练", - "trainingDesc1": "一个专门用于从 Web UI 使用 Textual Inversion 和 Dreambooth 训练自己的 Embedding 和 checkpoint 的工作流。", - "trainingDesc2": "InvokeAI 已经支持使用主脚本中的 Textual Inversion 来训练自定义 embeddouring。", - "upload": "上传", - "close": "关闭", - "load": "加载", - "statusConnected": "已连接", - "statusDisconnected": "未连接", - "statusError": "错误", - "statusPreparing": "准备中", - "statusProcessingCanceled": "处理已取消", - "statusProcessingComplete": "处理完成", - "statusGenerating": "生成中", - "statusGeneratingTextToImage": "文生图生成中", - "statusGeneratingImageToImage": "图生图生成中", - "statusGeneratingInpainting": "(Inpainting) 内补生成中", - "statusGeneratingOutpainting": "(Outpainting) 外扩生成中", - "statusGenerationComplete": "生成完成", - "statusIterationComplete": "迭代完成", - "statusSavingImage": "图像保存中", - "statusRestoringFaces": "面部修复中", - "statusRestoringFacesGFPGAN": "面部修复中 (GFPGAN)", - "statusRestoringFacesCodeFormer": "面部修复中 (CodeFormer)", - "statusUpscaling": "放大中", - "statusUpscalingESRGAN": "放大中 (ESRGAN)", - "statusLoadingModel": "模型加载中", - "statusModelChanged": "模型已切换", - "accept": "同意", - "cancel": "取消", - "dontAskMeAgain": "不要再次询问", - "areYouSure": "你确认吗?", - "imagePrompt": "图片提示词", - "langKorean": "朝鲜语", - "langPortuguese": "葡萄牙语", - "random": "随机", - "generate": "生成", - "openInNewTab": "在新的标签页打开", - "langUkranian": "乌克兰语", - "back": "返回", - "statusMergedModels": "模型已合并", - "statusConvertingModel": "转换模型中", - "statusModelConverted": "模型转换完成", - "statusMergingModels": "合并模型", - "githubLabel": "GitHub", - "discordLabel": "Discord", - "langPolish": "波兰语", - "langBrPortuguese": "葡萄牙语(巴西)", - "langDutch": "荷兰语", - "langFrench": "法语", - "langRussian": "俄语", - "langGerman": "德语", - "langHebrew": "希伯来语", - "langItalian": "意大利语", - "langJapanese": "日语", - "langSpanish": "西班牙语", - "langEnglish": "英语", - "langArabic": "阿拉伯语", - "txt2img": "文生图", - "postprocessing": "后期处理", - "loading": "加载中", - "loadingInvokeAI": "Invoke AI 加载中", - "linear": "线性的", - "batch": "批次管理器", - "communityLabel": "社区", - "modelManager": "模型管理器", - "nodeEditor": "节点编辑器", - "statusProcessing": "处理中", - "imageFailedToLoad": "无法加载图像", - "lightMode": "浅色模式", - "learnMore": "了解更多", - "darkMode": "深色模式", - "advanced": "高级", - "t2iAdapter": "T2I Adapter", - "ipAdapter": "IP Adapter", - "controlAdapter": "Control Adapter", - "controlNet": "ControlNet", - "on": "开", - "auto": "自动" - }, - "gallery": { - "generations": "生成的图像", - "showGenerations": "显示生成的图像", - "uploads": "上传的图像", - "showUploads": "显示上传的图像", - "galleryImageSize": "预览大小", - "galleryImageResetSize": "重置预览大小", - "gallerySettings": "预览设置", - "maintainAspectRatio": "保持纵横比", - "autoSwitchNewImages": "自动切换到新图像", - "singleColumnLayout": "单列布局", - "allImagesLoaded": "所有图像已加载", - "loadMore": "加载更多", - "noImagesInGallery": "无图像可用于显示", - "deleteImage": "删除图片", - "deleteImageBin": "被删除的图片会发送到你操作系统的回收站。", - "deleteImagePermanent": "删除的图片无法被恢复。", - "images": "图片", - "assets": "素材", - "autoAssignBoardOnClick": "点击后自动分配面板", - "featuresWillReset": "如果您删除该图像,这些功能会立即被重置。", - "loading": "加载中", - "unableToLoad": "无法加载图库", - "currentlyInUse": "该图像目前在以下功能中使用:", - "copy": "复制", - "download": "下载", - "setCurrentImage": "设为当前图像", - "preparingDownload": "准备下载", - "preparingDownloadFailed": "准备下载时出现问题", - "downloadSelection": "下载所选内容" - }, - "hotkeys": { - "keyboardShortcuts": "键盘快捷键", - "appHotkeys": "应用快捷键", - "generalHotkeys": "一般快捷键", - "galleryHotkeys": "图库快捷键", - "unifiedCanvasHotkeys": "统一画布快捷键", - "invoke": { - "title": "Invoke", - "desc": "生成图像" - }, - "cancel": { - "title": "取消", - "desc": "取消图像生成" - }, - "focusPrompt": { - "title": "打开提示词框", - "desc": "打开提示词文本框" - }, - "toggleOptions": { - "title": "切换选项卡", - "desc": "打开或关闭选项浮窗" - }, - "pinOptions": { - "title": "常开选项卡", - "desc": "保持选项浮窗常开" - }, - "toggleViewer": { - "title": "切换图像查看器", - "desc": "打开或关闭图像查看器" - }, - "toggleGallery": { - "title": "切换图库", - "desc": "打开或关闭图库" - }, - "maximizeWorkSpace": { - "title": "工作区最大化", - "desc": "关闭所有浮窗,将工作区域最大化" - }, - "changeTabs": { - "title": "切换选项卡", - "desc": "切换到另一个工作区" - }, - "consoleToggle": { - "title": "切换命令行", - "desc": "打开或关闭命令行" - }, - "setPrompt": { - "title": "使用当前提示词", - "desc": "使用当前图像的提示词" - }, - "setSeed": { - "title": "使用种子", - "desc": "使用当前图像的种子" - }, - "setParameters": { - "title": "使用当前参数", - "desc": "使用当前图像的所有参数" - }, - "restoreFaces": { - "title": "面部修复", - "desc": "对当前图像进行面部修复" - }, - "upscale": { - "title": "放大", - "desc": "对当前图像进行放大" - }, - "showInfo": { - "title": "显示信息", - "desc": "显示当前图像的元数据" - }, - "sendToImageToImage": { - "title": "发送到图生图", - "desc": "发送当前图像到图生图" - }, - "deleteImage": { - "title": "删除图像", - "desc": "删除当前图像" - }, - "closePanels": { - "title": "关闭浮窗", - "desc": "关闭目前打开的浮窗" - }, - "previousImage": { - "title": "上一张图像", - "desc": "显示图库中的上一张图像" - }, - "nextImage": { - "title": "下一张图像", - "desc": "显示图库中的下一张图像" - }, - "toggleGalleryPin": { - "title": "切换图库常开", - "desc": "开关图库在界面中的常开模式" - }, - "increaseGalleryThumbSize": { - "title": "增大预览尺寸", - "desc": "增大图库中预览的尺寸" - }, - "decreaseGalleryThumbSize": { - "title": "缩小预览尺寸", - "desc": "缩小图库中预览的尺寸" - }, - "selectBrush": { - "title": "选择刷子", - "desc": "选择统一画布上的刷子" - }, - "selectEraser": { - "title": "选择橡皮擦", - "desc": "选择统一画布上的橡皮擦" - }, - "decreaseBrushSize": { - "title": "减小刷子大小", - "desc": "减小统一画布上的刷子或橡皮擦的大小" - }, - "increaseBrushSize": { - "title": "增大刷子大小", - "desc": "增大统一画布上的刷子或橡皮擦的大小" - }, - "decreaseBrushOpacity": { - "title": "减小刷子不透明度", - "desc": "减小统一画布上的刷子的不透明度" - }, - "increaseBrushOpacity": { - "title": "增大刷子不透明度", - "desc": "增大统一画布上的刷子的不透明度" - }, - "moveTool": { - "title": "移动工具", - "desc": "画布允许导航" - }, - "fillBoundingBox": { - "title": "填充选择区域", - "desc": "在选择区域中填充刷子颜色" - }, - "eraseBoundingBox": { - "title": "擦除选择框", - "desc": "将选择区域擦除" - }, - "colorPicker": { - "title": "选择颜色拾取工具", - "desc": "选择画布颜色拾取工具" - }, - "toggleSnap": { - "title": "切换网格对齐", - "desc": "打开或关闭网格对齐" - }, - "quickToggleMove": { - "title": "快速切换移动模式", - "desc": "临时性地切换移动模式" - }, - "toggleLayer": { - "title": "切换图层", - "desc": "切换遮罩/基础层的选择" - }, - "clearMask": { - "title": "清除遮罩", - "desc": "清除整个遮罩" - }, - "hideMask": { - "title": "隐藏遮罩", - "desc": "隐藏或显示遮罩" - }, - "showHideBoundingBox": { - "title": "显示/隐藏框选区", - "desc": "切换框选区的的显示状态" - }, - "mergeVisible": { - "title": "合并可见层", - "desc": "将画板上可见层合并" - }, - "saveToGallery": { - "title": "保存至图库", - "desc": "将画布当前内容保存至图库" - }, - "copyToClipboard": { - "title": "复制到剪贴板", - "desc": "将画板当前内容复制到剪贴板" - }, - "downloadImage": { - "title": "下载图像", - "desc": "下载画板当前内容" - }, - "undoStroke": { - "title": "撤销画笔", - "desc": "撤销上一笔刷子的动作" - }, - "redoStroke": { - "title": "重做画笔", - "desc": "重做上一笔刷子的动作" - }, - "resetView": { - "title": "重置视图", - "desc": "重置画布视图" - }, - "previousStagingImage": { - "title": "上一张暂存图像", - "desc": "上一张暂存区中的图像" - }, - "nextStagingImage": { - "title": "下一张暂存图像", - "desc": "下一张暂存区中的图像" - }, - "acceptStagingImage": { - "title": "接受暂存图像", - "desc": "接受当前暂存区中的图像" - }, - "nodesHotkeys": "节点快捷键", - "addNodes": { - "title": "添加节点", - "desc": "打开添加节点菜单" - } - }, - "modelManager": { - "modelManager": "模型管理器", - "model": "模型", - "modelAdded": "已添加模型", - "modelUpdated": "模型已更新", - "modelEntryDeleted": "模型已删除", - "cannotUseSpaces": "不能使用空格", - "addNew": "添加", - "addNewModel": "添加新模型", - "addManually": "手动添加", - "manual": "手动", - "name": "名称", - "nameValidationMsg": "输入模型的名称", - "description": "描述", - "descriptionValidationMsg": "添加模型的描述", - "config": "配置", - "configValidationMsg": "模型配置文件的路径。", - "modelLocation": "模型位置", - "modelLocationValidationMsg": "提供 Diffusers 模型文件的本地存储路径", - "vaeLocation": "VAE 位置", - "vaeLocationValidationMsg": "VAE 文件的路径。", - "width": "宽度", - "widthValidationMsg": "模型的默认宽度。", - "height": "高度", - "heightValidationMsg": "模型的默认高度。", - "addModel": "添加模型", - "updateModel": "更新模型", - "availableModels": "可用模型", - "search": "检索", - "load": "加载", - "active": "活跃", - "notLoaded": "未加载", - "cached": "缓存", - "checkpointFolder": "模型检查点文件夹", - "clearCheckpointFolder": "清除 Checkpoint 模型文件夹", - "findModels": "寻找模型", - "modelsFound": "找到的模型", - "selectFolder": "选择文件夹", - "selected": "已选择", - "selectAll": "全选", - "deselectAll": "取消选择所有", - "showExisting": "显示已存在", - "addSelected": "添加选择", - "modelExists": "模型已存在", - "delete": "删除", - "deleteModel": "删除模型", - "deleteConfig": "删除配置", - "deleteMsg1": "您确定要将该模型从 InvokeAI 删除吗?", - "deleteMsg2": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除。若你正在使用自定义目录,则不会从磁盘中删除他们。", - "convertToDiffusersHelpText1": "模型会被转换成 🧨 Diffusers 格式。", - "convertToDiffusersHelpText2": "这个过程会替换你的模型管理器的入口中相同 Diffusers 版本的模型。", - "mergedModelSaveLocation": "保存路径", - "mergedModelCustomSaveLocation": "自定义路径", - "checkpointModels": "Checkpoints", - "formMessageDiffusersVAELocation": "VAE 路径", - "convertToDiffusersHelpText4": "这是一次性的处理过程。根据你电脑的配置不同耗时 30 - 60 秒。", - "convertToDiffusersHelpText6": "你希望转换这个模型吗?", - "interpolationType": "插值类型", - "modelTwo": "模型 2", - "modelThree": "模型 3", - "v2_768": "v2 (768px)", - "mergedModelName": "合并的模型名称", - "allModels": "全部模型", - "convertToDiffusers": "转换为 Diffusers", - "formMessageDiffusersModelLocation": "Diffusers 模型路径", - "custom": "自定义", - "formMessageDiffusersVAELocationDesc": "如果没有特别指定,InvokeAI 会从上面指定的模型路径中寻找 VAE 文件。", - "safetensorModels": "SafeTensors", - "modelsMerged": "模型合并完成", - "mergeModels": "合并模型", - "modelOne": "模型 1", - "diffusersModels": "Diffusers", - "scanForModels": "扫描模型", - "repo_id": "项目 ID", - "repoIDValidationMsg": "你的模型的在线项目地址", - "v1": "v1", - "invokeRoot": "InvokeAI 文件夹", - "inpainting": "v1 Inpainting", - "customSaveLocation": "自定义保存路径", - "scanAgain": "重新扫描", - "customConfig": "个性化配置", - "pathToCustomConfig": "个性化配置路径", - "modelConverted": "模型已转换", - "statusConverting": "转换中", - "sameFolder": "相同文件夹", - "invokeAIFolder": "Invoke AI 文件夹", - "ignoreMismatch": "忽略所选模型之间的不匹配", - "modelMergeHeaderHelp1": "您可以合并最多三种不同的模型,以创建符合您需求的混合模型。", - "modelMergeHeaderHelp2": "只有扩散器(Diffusers)可以用于模型合并。如果您想要合并一个检查点模型,请先将其转换为扩散器。", - "addCheckpointModel": "添加 Checkpoint / Safetensor 模型", - "addDiffuserModel": "添加 Diffusers 模型", - "vaeRepoID": "VAE 项目 ID", - "vaeRepoIDValidationMsg": "VAE 模型在线仓库地址", - "selectAndAdd": "选择下表中的模型并添加", - "noModelsFound": "未有找到模型", - "formMessageDiffusersModelLocationDesc": "请至少输入一个。", - "convertToDiffusersSaveLocation": "保存路径", - "convertToDiffusersHelpText3": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除. 若位于自定义目录, 则不会受影响.", - "v2_base": "v2 (512px)", - "convertToDiffusersHelpText5": "请确认你有足够的磁盘空间,模型大小通常在 2 GB - 7 GB 之间。", - "convert": "转换", - "merge": "合并", - "pickModelType": "选择模型类型", - "addDifference": "增加差异", - "none": "无", - "inverseSigmoid": "反 Sigmoid 函数", - "weightedSum": "加权求和", - "modelMergeAlphaHelp": "Alpha 参数控制模型的混合强度。较低的 Alpha 值会导致第二个模型的影响减弱。", - "sigmoid": "Sigmoid 函数", - "modelMergeInterpAddDifferenceHelp": "在这种模式下,首先从模型 2 中减去模型 3,得到的版本再用上述的 Alpha 值与模型1进行混合。", - "modelsSynced": "模型已同步", - "modelSyncFailed": "模型同步失败", - "modelDeleteFailed": "模型删除失败", - "syncModelsDesc": "如果您的模型与后端不同步,您可以使用此选项刷新它们。便于您在应用程序启动的情况下手动更新 models.yaml 文件或将模型添加到 InvokeAI 根文件夹。", - "selectModel": "选择模型", - "importModels": "导入模型", - "settings": "设置", - "syncModels": "同步模型", - "noCustomLocationProvided": "未提供自定义路径", - "modelDeleted": "模型已删除", - "modelUpdateFailed": "模型更新失败", - "modelConversionFailed": "模型转换失败", - "modelsMergeFailed": "模型融合失败", - "baseModel": "基底模型", - "convertingModelBegin": "模型转换中. 请稍候.", - "noModels": "未找到模型", - "predictionType": "预测类型(适用于 Stable Diffusion 2.x 模型和部分 Stable Diffusion 1.x 模型)", - "quickAdd": "快速添加", - "simpleModelDesc": "提供一个指向本地 Diffusers 模型的路径,本地 checkpoint / safetensors 模型或一个HuggingFace 项目 ID,又或者一个 checkpoint/diffusers 模型链接。", - "advanced": "高级", - "useCustomConfig": "使用自定义配置", - "closeAdvanced": "关闭高级", - "modelType": "模型类别", - "customConfigFileLocation": "自定义配置文件目录", - "variant": "变体", - "onnxModels": "Onnx", - "vae": "VAE", - "oliveModels": "Olive", - "loraModels": "LoRA", - "alpha": "Alpha", - "vaePrecision": "VAE 精度" - }, - "parameters": { - "images": "图像", - "steps": "步数", - "cfgScale": "CFG 等级", - "width": "宽度", - "height": "高度", - "seed": "种子", - "randomizeSeed": "随机化种子", - "shuffle": "随机生成种子", - "noiseThreshold": "噪声阈值", - "perlinNoise": "Perlin 噪声", - "variations": "变种", - "variationAmount": "变种数量", - "seedWeights": "种子权重", - "faceRestoration": "面部修复", - "restoreFaces": "修复面部", - "type": "种类", - "strength": "强度", - "upscaling": "放大", - "upscale": "放大 (Shift + U)", - "upscaleImage": "放大图像", - "scale": "等级", - "otherOptions": "其他选项", - "seamlessTiling": "无缝拼贴", - "hiresOptim": "高分辨率优化", - "imageFit": "使生成图像长宽适配初始图像", - "codeformerFidelity": "保真度", - "scaleBeforeProcessing": "处理前缩放", - "scaledWidth": "缩放宽度", - "scaledHeight": "缩放长度", - "infillMethod": "填充方法", - "tileSize": "方格尺寸", - "boundingBoxHeader": "选择区域", - "seamCorrectionHeader": "接缝修正", - "infillScalingHeader": "内填充和缩放", - "img2imgStrength": "图生图强度", - "toggleLoopback": "切换环回", - "sendTo": "发送到", - "sendToImg2Img": "发送到图生图", - "sendToUnifiedCanvas": "发送到统一画布", - "copyImageToLink": "复制图像链接", - "downloadImage": "下载图像", - "openInViewer": "在查看器中打开", - "closeViewer": "关闭查看器", - "usePrompt": "使用提示", - "useSeed": "使用种子", - "useAll": "使用所有参数", - "useInitImg": "使用初始图像", - "info": "信息", - "initialImage": "初始图像", - "showOptionsPanel": "显示侧栏浮窗 (O 或 T)", - "seamlessYAxis": "Y 轴", - "seamlessXAxis": "X 轴", - "boundingBoxWidth": "边界框宽度", - "boundingBoxHeight": "边界框高度", - "denoisingStrength": "去噪强度", - "vSymmetryStep": "纵向对称步数", - "cancel": { - "immediate": "立即取消", - "isScheduled": "取消中", - "schedule": "当前迭代后取消", - "setType": "设定取消类型", - "cancel": "取消" - }, - "copyImage": "复制图片", - "showPreview": "显示预览", - "symmetry": "对称性", - "positivePromptPlaceholder": "正向提示词", - "negativePromptPlaceholder": "负向提示词", - "scheduler": "调度器", - "general": "通用", - "hiresStrength": "高分辨强度", - "hidePreview": "隐藏预览", - "hSymmetryStep": "横向对称步数", - "imageToImage": "图生图", - "noiseSettings": "噪音", - "controlNetControlMode": "控制模式", - "maskAdjustmentsHeader": "遮罩调整", - "maskBlur": "模糊", - "maskBlurMethod": "模糊方式", - "aspectRatio": "纵横比", - "seamLowThreshold": "降低", - "seamHighThreshold": "提升", - "invoke": { - "noNodesInGraph": "节点图中无节点", - "noModelSelected": "无已选中的模型", - "invoke": "调用", - "systemBusy": "系统繁忙", - "noInitialImageSelected": "无选中的初始图像", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} 缺失输入", - "unableToInvoke": "无法调用", - "systemDisconnected": "系统已断开连接", - "missingNodeTemplate": "缺失节点模板", - "missingFieldTemplate": "缺失模板", - "addingImagesTo": "添加图像到", - "noPrompts": "没有已生成的提示词", - "readyToInvoke": "准备调用", - "noControlImageForControlAdapter": "有 #{{number}} 个 Control Adapter 缺失控制图像", - "noModelForControlAdapter": "有 #{{number}} 个 Control Adapter 没有选择模型。", - "incompatibleBaseModelForControlAdapter": "有 #{{number}} 个 Control Adapter 模型与主模型不匹配。" - }, - "patchmatchDownScaleSize": "缩小", - "coherenceSteps": "步数", - "clipSkip": "CLIP 跳过层", - "compositingSettingsHeader": "合成设置", - "useCpuNoise": "使用 CPU 噪声", - "coherenceStrength": "强度", - "enableNoiseSettings": "启用噪声设置", - "coherenceMode": "模式", - "cpuNoise": "CPU 噪声", - "gpuNoise": "GPU 噪声", - "clipSkipWithLayerCount": "CLIP 跳过 {{layerCount}} 层", - "coherencePassHeader": "一致性层", - "manualSeed": "手动设定种子", - "imageActions": "图像操作", - "randomSeed": "随机种子", - "iterations": "迭代数", - "isAllowedToUpscale": { - "useX2Model": "图像太大,无法使用 x4 模型,使用 x2 模型作为替代", - "tooLarge": "图像太大无法进行放大,请选择更小的图像" - }, - "iterationsWithCount_other": "{{count}} 次迭代生成", - "seamlessX&Y": "无缝 X & Y", - "aspectRatioFree": "自由", - "seamlessX": "无缝 X", - "seamlessY": "无缝 Y" - }, - "settings": { - "models": "模型", - "displayInProgress": "显示处理中的图像", - "saveSteps": "每n步保存图像", - "confirmOnDelete": "删除时确认", - "displayHelpIcons": "显示帮助按钮", - "enableImageDebugging": "开启图像调试", - "resetWebUI": "重置网页界面", - "resetWebUIDesc1": "重置网页只会重置浏览器中缓存的图像和设置,不会删除任何图像。", - "resetWebUIDesc2": "如果图像没有显示在图库中,或者其他东西不工作,请在GitHub上提交问题之前尝试重置。", - "resetComplete": "网页界面已重置。", - "showProgressInViewer": "在查看器中展示过程图片", - "antialiasProgressImages": "对过程图像应用抗锯齿", - "generation": "生成", - "ui": "用户界面", - "useSlidersForAll": "对所有参数使用滑动条设置", - "general": "通用", - "consoleLogLevel": "日志等级", - "shouldLogToConsole": "终端日志", - "developer": "开发者", - "alternateCanvasLayout": "切换统一画布布局", - "enableNodesEditor": "启用节点编辑器", - "favoriteSchedulersPlaceholder": "没有偏好的采样算法", - "showAdvancedOptions": "显示进阶选项", - "favoriteSchedulers": "采样算法偏好", - "autoChangeDimensions": "更改时将宽/高更新为模型默认值", - "experimental": "实验性", - "beta": "Beta", - "clearIntermediates": "清除中间产物", - "clearIntermediatesDesc3": "您图库中的图像不会被删除。", - "clearIntermediatesDesc2": "中间产物图像是生成过程中产生的副产品,与图库中的结果图像不同。清除中间产物可释放磁盘空间。", - "intermediatesCleared_other": "已清除 {{count}} 个中间产物", - "clearIntermediatesDesc1": "清除中间产物会重置您的画布和 ControlNet 状态。", - "intermediatesClearedFailed": "清除中间产物时出现问题", - "clearIntermediatesWithCount_other": "清除 {{count}} 个中间产物", - "clearIntermediatesDisabled": "队列为空才能清理中间产物" - }, - "toast": { - "tempFoldersEmptied": "临时文件夹已清空", - "uploadFailed": "上传失败", - "uploadFailedUnableToLoadDesc": "无法加载文件", - "downloadImageStarted": "图像已开始下载", - "imageCopied": "图像已复制", - "imageLinkCopied": "图像链接已复制", - "imageNotLoaded": "没有加载图像", - "imageNotLoadedDesc": "找不到图片", - "imageSavedToGallery": "图像已保存到图库", - "canvasMerged": "画布已合并", - "sentToImageToImage": "已发送到图生图", - "sentToUnifiedCanvas": "已发送到统一画布", - "parametersSet": "参数已设定", - "parametersNotSet": "参数未设定", - "parametersNotSetDesc": "此图像不存在元数据。", - "parametersFailed": "加载参数失败", - "parametersFailedDesc": "加载初始图像失败。", - "seedSet": "种子已设定", - "seedNotSet": "种子未设定", - "seedNotSetDesc": "无法找到该图像的种子。", - "promptSet": "提示词已设定", - "promptNotSet": "提示词未设定", - "promptNotSetDesc": "无法找到该图像的提示词。", - "upscalingFailed": "放大失败", - "faceRestoreFailed": "面部修复失败", - "metadataLoadFailed": "加载元数据失败", - "initialImageSet": "初始图像已设定", - "initialImageNotSet": "初始图像未设定", - "initialImageNotSetDesc": "无法加载初始图像", - "problemCopyingImageLink": "无法复制图片链接", - "uploadFailedInvalidUploadDesc": "必须是单张的 PNG 或 JPEG 图片", - "disconnected": "服务器断开", - "connected": "服务器连接", - "parameterSet": "参数已设定", - "parameterNotSet": "参数未设定", - "serverError": "服务器错误", - "canceled": "处理取消", - "nodesLoaded": "节点已加载", - "nodesSaved": "节点已保存", - "problemCopyingImage": "无法复制图像", - "nodesCorruptedGraph": "无法加载。节点图似乎已损坏。", - "nodesBrokenConnections": "无法加载。部分连接已断开。", - "nodesUnrecognizedTypes": "无法加载。节点图有无法识别的节点类型", - "nodesNotValidJSON": "无效的 JSON", - "nodesNotValidGraph": "无效的 InvokeAi 节点图", - "nodesCleared": "节点已清空", - "nodesLoadedFailed": "节点图加载失败", - "modelAddedSimple": "已添加模型", - "modelAdded": "已添加模型: {{modelName}}", - "imageSavingFailed": "图像保存失败", - "canvasSentControlnetAssets": "画布已发送到 ControlNet & 素材", - "problemCopyingCanvasDesc": "无法导出基础层", - "loadedWithWarnings": "已加载带有警告的工作流", - "setInitialImage": "设为初始图像", - "canvasCopiedClipboard": "画布已复制到剪贴板", - "setControlImage": "设为控制图像", - "setNodeField": "设为节点字段", - "problemSavingMask": "保存遮罩时出现问题", - "problemSavingCanvasDesc": "无法导出基础层", - "maskSavedAssets": "遮罩已保存到素材", - "modelAddFailed": "模型添加失败", - "problemDownloadingCanvas": "下载画布时出现问题", - "problemMergingCanvas": "合并画布时出现问题", - "setCanvasInitialImage": "设为画布初始图像", - "imageUploaded": "图像已上传", - "addedToBoard": "已添加到面板", - "workflowLoaded": "工作流已加载", - "problemImportingMaskDesc": "无法导出遮罩", - "problemCopyingCanvas": "复制画布时出现问题", - "problemSavingCanvas": "保存画布时出现问题", - "canvasDownloaded": "画布已下载", - "setIPAdapterImage": "设为 IP Adapter 图像", - "problemMergingCanvasDesc": "无法导出基础层", - "problemDownloadingCanvasDesc": "无法导出基础层", - "problemSavingMaskDesc": "无法导出遮罩", - "imageSaved": "图像已保存", - "maskSentControlnetAssets": "遮罩已发送到 ControlNet & 素材", - "canvasSavedGallery": "画布已保存到图库", - "imageUploadFailed": "图像上传失败", - "problemImportingMask": "导入遮罩时出现问题", - "baseModelChangedCleared_other": "基础模型已更改, 已清除或禁用 {{count}} 个不兼容的子模型" - }, - "unifiedCanvas": { - "layer": "图层", - "base": "基础层", - "mask": "遮罩", - "maskingOptions": "遮罩选项", - "enableMask": "启用遮罩", - "preserveMaskedArea": "保留遮罩区域", - "clearMask": "清除遮罩", - "brush": "刷子", - "eraser": "橡皮擦", - "fillBoundingBox": "填充选择区域", - "eraseBoundingBox": "取消选择区域", - "colorPicker": "颜色提取", - "brushOptions": "刷子选项", - "brushSize": "大小", - "move": "移动", - "resetView": "重置视图", - "mergeVisible": "合并可见层", - "saveToGallery": "保存至图库", - "copyToClipboard": "复制到剪贴板", - "downloadAsImage": "下载图像", - "undo": "撤销", - "redo": "重做", - "clearCanvas": "清除画布", - "canvasSettings": "画布设置", - "showIntermediates": "显示中间产物", - "showGrid": "显示网格", - "snapToGrid": "切换网格对齐", - "darkenOutsideSelection": "暗化外部区域", - "autoSaveToGallery": "自动保存至图库", - "saveBoxRegionOnly": "只保存框内区域", - "limitStrokesToBox": "限制画笔在框内", - "showCanvasDebugInfo": "显示附加画布信息", - "clearCanvasHistory": "清除画布历史", - "clearHistory": "清除历史", - "clearCanvasHistoryMessage": "清除画布历史不会影响当前画布,但会不可撤销地清除所有撤销/重做历史。", - "clearCanvasHistoryConfirm": "确认清除所有画布历史?", - "emptyTempImageFolder": "清除临时文件夹", - "emptyFolder": "清除文件夹", - "emptyTempImagesFolderMessage": "清空临时图像文件夹会完全重置统一画布。这包括所有的撤销/重做历史、暂存区的图像和画布基础层。", - "emptyTempImagesFolderConfirm": "确认清除临时文件夹?", - "activeLayer": "活跃图层", - "canvasScale": "画布缩放", - "boundingBox": "选择区域", - "scaledBoundingBox": "缩放选择区域", - "boundingBoxPosition": "选择区域位置", - "canvasDimensions": "画布长宽", - "canvasPosition": "画布位置", - "cursorPosition": "光标位置", - "previous": "上一张", - "next": "下一张", - "accept": "接受", - "showHide": "显示 / 隐藏", - "discardAll": "放弃所有", - "betaClear": "清除", - "betaDarkenOutside": "暗化外部区域", - "betaLimitToBox": "限制在框内", - "betaPreserveMasked": "保留遮罩层", - "antialiasing": "抗锯齿", - "showResultsOn": "显示结果 (开)", - "showResultsOff": "显示结果 (关)" - }, - "accessibility": { - "modelSelect": "模型选择", - "invokeProgressBar": "Invoke 进度条", - "reset": "重置", - "nextImage": "下一张图片", - "useThisParameter": "使用此参数", - "uploadImage": "上传图片", - "previousImage": "上一张图片", - "copyMetadataJson": "复制 JSON 元数据", - "exitViewer": "退出查看器", - "zoomIn": "放大", - "zoomOut": "缩小", - "rotateCounterClockwise": "逆时针旋转", - "rotateClockwise": "顺时针旋转", - "flipHorizontally": "水平翻转", - "flipVertically": "垂直翻转", - "showOptionsPanel": "显示侧栏浮窗", - "toggleLogViewer": "切换日志查看器", - "modifyConfig": "修改配置", - "toggleAutoscroll": "切换自动缩放", - "menu": "菜单", - "showGalleryPanel": "显示图库浮窗", - "loadMore": "加载更多" - }, - "ui": { - "showProgressImages": "显示处理中的图片", - "hideProgressImages": "隐藏处理中的图片", - "swapSizes": "XY 尺寸互换", - "lockRatio": "锁定纵横比" - }, - "tooltip": { - "feature": { - "prompt": "这是提示词区域。提示词包括生成对象和风格术语。您也可以在提示词中添加权重(Token 的重要性),但命令行命令和参数不起作用。", - "imageToImage": "图生图模式加载任何图像作为初始图像,然后与提示词一起用于生成新图像。值越高,结果图像的变化就越大。可能的值为 0.0 到 1.0,建议的范围是 0.25 到 0.75", - "upscale": "使用 ESRGAN 可以在图片生成后立即放大图片。", - "variations": "尝试将变化值设置在 0.1 到 1.0 之间,以更改给定种子的结果。种子的变化在 0.1 到 0.3 之间会很有趣。", - "boundingBox": "边界框的高和宽的设定对文生图和图生图模式是一样的,只有边界框中的区域会被处理。", - "other": "这些选项将为 Invoke 启用替代处理模式。 \"无缝拼贴\" 将在输出中创建重复图案。\"高分辨率\" 是通过图生图进行两步生成:当您想要更大、更连贯且不带伪影的图像时,请使用此设置。这将比通常的文生图需要更长的时间。", - "faceCorrection": "使用 GFPGAN 或 Codeformer 进行人脸校正:该算法会检测图像中的人脸并纠正任何缺陷。较高的值将更改图像,并产生更有吸引力的人脸。在保留较高保真度的情况下使用 Codeformer 将导致更强的人脸校正,同时也会保留原始图像。", - "gallery": "图片库展示输出文件夹中的图片,设置和文件一起储存,可以通过内容菜单访问。", - "seed": "种子值影响形成图像的初始噪声。您可以使用以前图像中已存在的种子。 “噪声阈值”用于减轻在高 CFG 等级(尝试 0 - 10 范围)下的伪像,并使用 Perlin 在生成过程中添加 Perlin 噪声:这两者都可以为您的输出添加变化。", - "seamCorrection": "控制在画布上生成的图像之间出现的可见接缝的处理方式。", - "infillAndScaling": "管理填充方法(用于画布的遮罩或擦除区域)和缩放(对于较小的边界框大小非常有用)。" - } - }, - "nodes": { - "zoomInNodes": "放大", - "resetWorkflowDesc": "是否确定要清空节点图?", - "resetWorkflow": "清空节点图", - "loadWorkflow": "读取节点图", - "zoomOutNodes": "缩小", - "resetWorkflowDesc2": "重置节点图将清除所有节点、边际和节点图详情.", - "reloadNodeTemplates": "重载节点模板", - "hideGraphNodes": "隐藏节点图信息", - "fitViewportNodes": "自适应视图", - "showMinimapnodes": "显示缩略图", - "hideMinimapnodes": "隐藏缩略图", - "showLegendNodes": "显示字段类型图例", - "hideLegendNodes": "隐藏字段类型图例", - "showGraphNodes": "显示节点图信息", - "downloadWorkflow": "下载节点图 JSON", - "workflowDescription": "简述", - "versionUnknown": " 未知版本", - "noNodeSelected": "无选中的节点", - "addNode": "添加节点", - "unableToValidateWorkflow": "无法验证工作流", - "noOutputRecorded": "无已记录输出", - "updateApp": "升级 App", - "colorCodeEdgesHelp": "根据连接区域对边缘编码颜色", - "workflowContact": "联系", - "animatedEdges": "边缘动效", - "nodeTemplate": "节点模板", - "pickOne": "选择一个", - "unableToLoadWorkflow": "无法验证工作流", - "snapToGrid": "对齐网格", - "noFieldsLinearview": "线性视图中未添加任何字段", - "nodeSearch": "检索节点", - "version": "版本", - "validateConnections": "验证连接和节点图", - "inputMayOnlyHaveOneConnection": "输入仅能有一个连接", - "notes": "注释", - "nodeOutputs": "节点输出", - "currentImageDescription": "在节点编辑器中显示当前图像", - "validateConnectionsHelp": "防止建立无效连接和调用无效节点图", - "problemSettingTitle": "设定标题时出现问题", - "noConnectionInProgress": "没有正在进行的连接", - "workflowVersion": "版本", - "noConnectionData": "无连接数据", - "fieldTypesMustMatch": "类型必须匹配", - "workflow": "工作流", - "unkownInvocation": "未知调用类型", - "animatedEdgesHelp": "为选中边缘和其连接的选中节点的边缘添加动画", - "unknownTemplate": "未知模板", - "removeLinearView": "从线性视图中移除", - "workflowTags": "标签", - "fullyContainNodesHelp": "节点必须完全位于选择框中才能被选中", - "workflowValidation": "工作流验证错误", - "noMatchingNodes": "无相匹配的节点", - "executionStateInProgress": "处理中", - "noFieldType": "无字段类型", - "executionStateError": "错误", - "executionStateCompleted": "已完成", - "workflowAuthor": "作者", - "currentImage": "当前图像", - "workflowName": "名称", - "cannotConnectInputToInput": "无法将输入连接到输入", - "workflowNotes": "注释", - "cannotConnectOutputToOutput": "无法将输出连接到输出", - "connectionWouldCreateCycle": "连接将创建一个循环", - "cannotConnectToSelf": "无法连接自己", - "notesDescription": "添加有关您的工作流的注释", - "unknownField": "未知", - "colorCodeEdges": "边缘颜色编码", - "unknownNode": "未知节点", - "addNodeToolTip": "添加节点 (Shift+A, Space)", - "loadingNodes": "加载节点中...", - "snapToGridHelp": "移动时将节点与网格对齐", - "workflowSettings": "工作流编辑器设置", - "booleanPolymorphicDescription": "一个布尔值合集。", - "scheduler": "调度器", - "inputField": "输入", - "controlFieldDescription": "节点间传递的控制信息。", - "skippingUnknownOutputType": "跳过未知类型的输出", - "latentsFieldDescription": "Latents 可以在节点间传递。", - "denoiseMaskFieldDescription": "去噪遮罩可以在节点间传递", - "missingTemplate": "缺失模板", - "outputSchemaNotFound": "未找到输出模式", - "latentsPolymorphicDescription": "Latents 可以在节点间传递。", - "colorFieldDescription": "一种 RGBA 颜色。", - "mainModelField": "模型", - "unhandledInputProperty": "未处理的输入属性", - "maybeIncompatible": "可能与已安装的不兼容", - "collectionDescription": "待办事项", - "skippingReservedFieldType": "跳过保留类型", - "booleanCollectionDescription": "一个布尔值合集。", - "sDXLMainModelFieldDescription": "SDXL 模型。", - "boardField": "面板", - "problemReadingWorkflow": "从图像读取工作流时出现问题", - "sourceNode": "源节点", - "nodeOpacity": "节点不透明度", - "collectionItemDescription": "待办事项", - "integerDescription": "整数是没有与小数点的数字。", - "outputField": "输出", - "skipped": "跳过", - "updateNode": "更新节点", - "sDXLRefinerModelFieldDescription": "待办事项", - "imagePolymorphicDescription": "一个图像合集。", - "doesNotExist": "不存在", - "unableToParseNode": "无法解析节点", - "controlCollection": "控制合集", - "collectionItem": "项目合集", - "controlCollectionDescription": "节点间传递的控制信息。", - "skippedReservedInput": "跳过保留的输入", - "outputFields": "输出", - "edge": "边缘", - "inputNode": "输入节点", - "enumDescription": "枚举 (Enums) 可能是多个选项的一个数值。", - "loRAModelFieldDescription": "待办事项", - "imageField": "图像", - "skippedReservedOutput": "跳过保留的输出", - "noWorkflow": "无工作流", - "colorCollectionDescription": "待办事项", - "colorPolymorphicDescription": "一个颜色合集。", - "sDXLMainModelField": "SDXL 模型", - "denoiseMaskField": "去噪遮罩", - "schedulerDescription": "待办事项", - "missingCanvaInitImage": "缺失画布初始图像", - "clipFieldDescription": "词元分析器和文本编码器的子模型。", - "noImageFoundState": "状态中未发现初始图像", - "nodeType": "节点类型", - "fullyContainNodes": "完全包含节点来进行选择", - "noOutputSchemaName": "在 ref 对象中找不到输出模式名称", - "vaeModelFieldDescription": "待办事项", - "skippingInputNoTemplate": "跳过无模板的输入", - "missingCanvaInitMaskImages": "缺失初始化画布和遮罩图像", - "problemReadingMetadata": "从图像读取元数据时出现问题", - "oNNXModelField": "ONNX 模型", - "node": "节点", - "skippingUnknownInputType": "跳过未知类型的输入", - "booleanDescription": "布尔值为真或为假。", - "collection": "合集", - "invalidOutputSchema": "无效的输出模式", - "boardFieldDescription": "图库面板", - "floatDescription": "浮点数是带小数点的数字。", - "unhandledOutputProperty": "未处理的输出属性", - "string": "字符串", - "inputFields": "输入", - "uNetFieldDescription": "UNet 子模型。", - "mismatchedVersion": "不匹配的版本", - "vaeFieldDescription": "Vae 子模型。", - "imageFieldDescription": "图像可以在节点间传递。", - "outputNode": "输出节点", - "mainModelFieldDescription": "待办事项", - "sDXLRefinerModelField": "Refiner 模型", - "unableToParseEdge": "无法解析边缘", - "latentsCollectionDescription": "Latents 可以在节点间传递。", - "oNNXModelFieldDescription": "ONNX 模型。", - "cannotDuplicateConnection": "无法创建重复的连接", - "ipAdapterModel": "IP-Adapter 模型", - "ipAdapterDescription": "图像提示词自适应 (IP-Adapter)。", - "ipAdapterModelDescription": "IP-Adapter 模型", - "floatCollectionDescription": "一个浮点数合集。", - "enum": "Enum (枚举)", - "integerPolymorphicDescription": "一个整数值合集。", - "float": "浮点", - "integer": "整数", - "colorField": "颜色", - "stringCollectionDescription": "一个字符串合集。", - "stringCollection": "字符串合集", - "uNetField": "UNet", - "integerCollection": "整数合集", - "vaeModelField": "VAE", - "integerCollectionDescription": "一个整数值合集。", - "clipField": "Clip", - "stringDescription": "字符串是指文本。", - "colorCollection": "一个颜色合集。", - "boolean": "布尔值", - "stringPolymorphicDescription": "一个字符串合集。", - "controlField": "控制信息", - "floatPolymorphicDescription": "一个浮点数合集。", - "vaeField": "Vae", - "floatCollection": "浮点合集", - "booleanCollection": "布尔值合集", - "imageCollectionDescription": "一个图像合集。", - "loRAModelField": "LoRA", - "imageCollection": "图像合集", - "ipAdapterPolymorphicDescription": "一个 IP-Adapters Collection 合集。", - "ipAdapterCollection": "IP-Adapters 合集", - "conditioningCollection": "条件合集", - "ipAdapterPolymorphic": "IP-Adapters 多态", - "conditioningCollectionDescription": "条件可以在节点间传递。", - "colorPolymorphic": "颜色多态", - "conditioningPolymorphic": "条件多态", - "latentsCollection": "Latents 合集", - "stringPolymorphic": "字符多态", - "conditioningPolymorphicDescription": "条件可以在节点间传递。", - "imagePolymorphic": "图像多态", - "floatPolymorphic": "浮点多态", - "ipAdapterCollectionDescription": "一个 IP-Adapters Collection 合集。", - "ipAdapter": "IP-Adapter", - "booleanPolymorphic": "布尔多态", - "conditioningFieldDescription": "条件可以在节点间传递。", - "integerPolymorphic": "整数多态", - "latentsPolymorphic": "Latents 多态", - "conditioningField": "条件", - "latentsField": "Latents" - }, - "controlnet": { - "resize": "直接缩放", - "showAdvanced": "显示高级", - "contentShuffleDescription": "随机打乱图像内容", - "importImageFromCanvas": "从画布导入图像", - "lineartDescription": "将图像转换为线稿", - "importMaskFromCanvas": "从画布导入遮罩", - "hideAdvanced": "隐藏高级", - "ipAdapterModel": "Adapter 模型", - "resetControlImage": "重置控制图像", - "beginEndStepPercent": "开始 / 结束步数百分比", - "mlsdDescription": "简洁的分割线段(直线)检测器", - "duplicate": "复制", - "balanced": "平衡", - "prompt": "Prompt (提示词控制)", - "depthMidasDescription": "使用 Midas 生成深度图", - "openPoseDescription": "使用 Openpose 进行人体姿态估计", - "resizeMode": "缩放模式", - "weight": "权重", - "selectModel": "选择一个模型", - "crop": "裁剪", - "processor": "处理器", - "none": "无", - "incompatibleBaseModel": "不兼容的基础模型:", - "enableControlnet": "启用 ControlNet", - "detectResolution": "检测分辨率", - "pidiDescription": "像素差分 (PIDI) 图像处理", - "controlMode": "控制模式", - "fill": "填充", - "cannyDescription": "Canny 边缘检测", - "colorMapDescription": "从图像生成一张颜色图", - "imageResolution": "图像分辨率", - "autoConfigure": "自动配置处理器", - "normalBaeDescription": "法线 BAE 处理", - "noneDescription": "不应用任何处理", - "saveControlImage": "保存控制图像", - "toggleControlNet": "开关此 ControlNet", - "delete": "删除", - "colorMapTileSize": "分块大小", - "ipAdapterImageFallback": "无已选择的 IP Adapter 图像", - "mediapipeFaceDescription": "使用 Mediapipe 检测面部", - "depthZoeDescription": "使用 Zoe 生成深度图", - "hedDescription": "整体嵌套边缘检测", - "setControlImageDimensions": "设定控制图像尺寸宽/高为", - "resetIPAdapterImage": "重置 IP Adapter 图像", - "handAndFace": "手部和面部", - "enableIPAdapter": "启用 IP Adapter", - "amult": "角度倍率 (a_mult)", - "bgth": "背景移除阈值 (bg_th)", - "lineartAnimeDescription": "动漫风格线稿处理", - "minConfidence": "最小置信度", - "lowThreshold": "弱判断阈值", - "highThreshold": "强判断阈值", - "addT2IAdapter": "添加 $t(common.t2iAdapter)", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) 已启用, $t(common.t2iAdapter) 已禁用", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 已启用, $t(common.controlNet) 已禁用", - "addControlNet": "添加 $t(common.controlNet)", - "controlNetT2IMutexDesc": "$t(common.controlNet) 和 $t(common.t2iAdapter) 目前不支持同时启用。", - "addIPAdapter": "添加 $t(common.ipAdapter)", - "safe": "保守模式", - "scribble": "草绘 (scribble)", - "maxFaces": "最大面部数", - "pidi": "PIDI", - "normalBae": "Normal BAE", - "hed": "HED", - "contentShuffle": "Content Shuffle", - "f": "F", - "h": "H", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "control": "Control (普通控制)", - "coarse": "Coarse", - "depthMidas": "Depth (Midas)", - "w": "W", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "mediapipeFace": "Mediapipe Face", - "mlsd": "M-LSD", - "lineart": "Lineart", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "megaControl": "Mega Control (超级控制)", - "depthZoe": "Depth (Zoe)", - "colorMap": "Color", - "openPose": "Openpose", - "controlAdapter_other": "Control Adapters", - "lineartAnime": "Lineart Anime", - "canny": "Canny" - }, - "queue": { - "status": "状态", - "cancelTooltip": "取消当前项目", - "queueEmpty": "队列为空", - "pauseSucceeded": "处理器已暂停", - "in_progress": "处理中", - "queueFront": "添加到队列前", - "completed": "已完成", - "queueBack": "添加到队列", - "cancelFailed": "取消项目时出现问题", - "pauseFailed": "暂停处理器时出现问题", - "clearFailed": "清除队列时出现问题", - "clearSucceeded": "队列已清除", - "pause": "暂停", - "cancelSucceeded": "项目已取消", - "queue": "队列", - "batch": "批处理", - "clearQueueAlertDialog": "清除队列时会立即取消所有处理中的项目并且会完全清除队列。", - "pending": "待定", - "completedIn": "完成于", - "resumeFailed": "恢复处理器时出现问题", - "clear": "清除", - "prune": "修剪", - "total": "总计", - "canceled": "已取消", - "pruneFailed": "修剪队列时出现问题", - "cancelBatchSucceeded": "批处理已取消", - "clearTooltip": "取消并清除所有项目", - "current": "当前", - "pauseTooltip": "暂停处理器", - "failed": "已失败", - "cancelItem": "取消项目", - "next": "下一个", - "cancelBatch": "取消批处理", - "cancel": "取消", - "resumeSucceeded": "处理器已恢复", - "resumeTooltip": "恢复处理器", - "resume": "恢复", - "cancelBatchFailed": "取消批处理时出现问题", - "clearQueueAlertDialog2": "您确定要清除队列吗?", - "item": "项目", - "pruneSucceeded": "从队列修剪 {{item_count}} 个已完成的项目", - "notReady": "无法排队", - "batchFailedToQueue": "批次加入队列失败", - "batchValues": "批次数", - "queueCountPrediction": "添加 {{predicted}} 到队列", - "batchQueued": "加入队列的批次", - "queuedCount": "{{pending}} 待处理", - "front": "前", - "pruneTooltip": "修剪 {{item_count}} 个已完成的项目", - "batchQueuedDesc_other": "在队列的 {{direction}} 中添加了 {{count}} 个会话", - "graphQueued": "节点图已加入队列", - "back": "后", - "session": "会话", - "queueTotal": "总计 {{total}}", - "enqueueing": "队列中的批次", - "queueMaxExceeded": "超出最大值 {{max_queue_size}},将跳过 {{skip}}", - "graphFailedToQueue": "节点图加入队列失败" - }, - "sdxl": { - "refinerStart": "Refiner 开始作用时机", - "selectAModel": "选择一个模型", - "scheduler": "调度器", - "cfgScale": "CFG 等级", - "negStylePrompt": "负向样式提示词", - "noModelsAvailable": "无可用模型", - "negAestheticScore": "负向美学评分", - "useRefiner": "启用 Refiner", - "denoisingStrength": "去噪强度", - "refinermodel": "Refiner 模型", - "posAestheticScore": "正向美学评分", - "concatPromptStyle": "连接提示词 & 样式", - "loading": "加载中...", - "steps": "步数", - "posStylePrompt": "正向样式提示词", - "refiner": "Refiner" - }, - "metadata": { - "positivePrompt": "正向提示词", - "negativePrompt": "负向提示词", - "generationMode": "生成模式", - "Threshold": "噪声阈值", - "metadata": "元数据", - "strength": "图生图强度", - "seed": "种子", - "imageDetails": "图像详细信息", - "perlin": "Perlin 噪声", - "model": "模型", - "noImageDetails": "未找到图像详细信息", - "hiresFix": "高分辨率优化", - "cfgScale": "CFG 等级", - "initImage": "初始图像", - "height": "高度", - "variations": "(成对/第二)种子权重", - "noMetaData": "未找到元数据", - "width": "宽度", - "createdBy": "创建者是", - "workflow": "工作流", - "steps": "步数", - "scheduler": "调度器", - "seamless": "无缝", - "fit": "图生图匹配", - "recallParameters": "召回参数", - "noRecallParameters": "未找到要召回的参数", - "vae": "VAE" - }, - "models": { - "noMatchingModels": "无相匹配的模型", - "loading": "加载中", - "noMatchingLoRAs": "无相匹配的 LoRA", - "noLoRAsAvailable": "无可用 LoRA", - "noModelsAvailable": "无可用模型", - "selectModel": "选择一个模型", - "selectLoRA": "选择一个 LoRA", - "noRefinerModelsInstalled": "无已安装的 SDXL Refiner 模型", - "noLoRAsInstalled": "无已安装的 LoRA" - }, - "boards": { - "autoAddBoard": "自动添加面板", - "topMessage": "该面板包含的图像正使用以下功能:", - "move": "移动", - "menuItemAutoAdd": "自动添加到该面板", - "myBoard": "我的面板", - "searchBoard": "检索面板...", - "noMatching": "没有相匹配的面板", - "selectBoard": "选择一个面板", - "cancel": "取消", - "addBoard": "添加面板", - "bottomMessage": "删除该面板并且将其对应的图像将重置当前使用该面板的所有功能。", - "uncategorized": "未分类", - "changeBoard": "更改面板", - "loading": "加载中...", - "clearSearch": "清除检索", - "downloadBoard": "下载面板" - }, - "embedding": { - "noMatchingEmbedding": "不匹配的 Embedding", - "addEmbedding": "添加 Embedding", - "incompatibleModel": "不兼容的基础模型:" - }, - "dynamicPrompts": { - "seedBehaviour": { - "perPromptDesc": "每次生成图像使用不同的种子", - "perIterationLabel": "每次迭代的种子", - "perIterationDesc": "每次迭代使用不同的种子", - "perPromptLabel": "每张图像的种子", - "label": "种子行为" - }, - "enableDynamicPrompts": "启用动态提示词", - "combinatorial": "组合生成", - "maxPrompts": "最大提示词数", - "dynamicPrompts": "动态提示词", - "promptsWithCount_other": "{{count}} 个提示词" - }, - "popovers": { - "compositingMaskAdjustments": { - "heading": "遮罩调整", - "paragraphs": [ - "调整遮罩。" - ] - }, - "paramRatio": { - "heading": "纵横比", - "paragraphs": [ - "生成图像的尺寸纵横比。", - "图像尺寸(单位:像素)建议 SD 1.5 模型使用等效 512x512 的尺寸,SDXL 模型使用等效 1024x1024 的尺寸。" - ] - }, - "compositingCoherenceSteps": { - "heading": "步数", - "paragraphs": [ - "一致性层中使用的去噪步数。", - "与主参数中的步数相同。" - ] - }, - "compositingBlur": { - "heading": "模糊", - "paragraphs": [ - "遮罩模糊半径。" - ] - }, - "noiseUseCPU": { - "heading": "使用 CPU 噪声", - "paragraphs": [ - "选择由 CPU 或 GPU 生成噪声。", - "启用 CPU 噪声后,特定的种子将会在不同的设备上产生下相同的图像。", - "启用 CPU 噪声不会对性能造成影响。" - ] - }, - "paramVAEPrecision": { - "heading": "VAE 精度", - "paragraphs": [ - "VAE 编解码过程种使用的精度。FP16/半精度以微小的图像变化为代价提高效率。" - ] - }, - "compositingCoherenceMode": { - "heading": "模式", - "paragraphs": [ - "一致性层模式。" - ] - }, - "controlNetResizeMode": { - "heading": "缩放模式", - "paragraphs": [ - "ControlNet 输入图像适应输出图像大小的方法。" - ] - }, - "clipSkip": { - "paragraphs": [ - "选择要跳过 CLIP 模型多少层。", - "部分模型跳过特定数值的层时效果会更好。", - "较高的数值通常会导致图像细节更少。" - ], - "heading": "CLIP 跳过层" - }, - "paramModel": { - "heading": "模型", - "paragraphs": [ - "用于去噪过程的模型。", - "不同的模型一般会通过接受训练来专门产生特定的美学内容和结果。" - ] - }, - "paramIterations": { - "heading": "迭代数", - "paragraphs": [ - "生成图像的数量。", - "若启用动态提示词,每种提示词都会生成这么多次。" - ] - }, - "compositingCoherencePass": { - "heading": "一致性层", - "paragraphs": [ - "第二轮去噪有助于合成内补/外扩图像。" - ] - }, - "compositingStrength": { - "heading": "强度", - "paragraphs": [ - "一致性层使用的去噪强度。", - "去噪强度与图生图的参数相同。" - ] - }, - "paramNegativeConditioning": { - "paragraphs": [ - "生成过程会避免生成负向提示词中的概念。使用此选项来使输出排除部分质量或对象。", - "支持 Compel 语法 和 embeddings。" - ], - "heading": "负向提示词" - }, - "compositingBlurMethod": { - "heading": "模糊方式", - "paragraphs": [ - "应用于遮罩区域的模糊方法。" - ] - }, - "paramScheduler": { - "heading": "调度器", - "paragraphs": [ - "调度器 (采样器) 定义如何在图像迭代过程中添加噪声,或者定义如何根据一个模型的输出来更新采样。" - ] - }, - "controlNetWeight": { - "heading": "权重", - "paragraphs": [ - "ControlNet 对生成图像的影响强度。" - ] - }, - "paramCFGScale": { - "heading": "CFG 等级", - "paragraphs": [ - "控制提示词对生成过程的影响程度。" - ] - }, - "paramSteps": { - "heading": "步数", - "paragraphs": [ - "每次生成迭代执行的步数。", - "通常情况下步数越多结果越好,但需要更多生成时间。" - ] - }, - "paramPositiveConditioning": { - "heading": "正向提示词", - "paragraphs": [ - "引导生成过程。您可以使用任何单词或短语。", - "Compel 语法、动态提示词语法和 embeddings。" - ] - }, - "lora": { - "heading": "LoRA 权重", - "paragraphs": [ - "更高的 LoRA 权重会对最终图像产生更大的影响。" - ] - }, - "infillMethod": { - "heading": "填充方法", - "paragraphs": [ - "填充选定区域的方式。" - ] - }, - "controlNetBeginEnd": { - "heading": "开始 / 结束步数百分比", - "paragraphs": [ - "去噪过程中在哪部分步数应用 ControlNet。", - "在组合处理开始阶段应用 ControlNet,且在引导细节生成的结束阶段应用 ControlNet。" - ] - }, - "scaleBeforeProcessing": { - "heading": "处理前缩放", - "paragraphs": [ - "生成图像前将所选区域缩放为最适合模型的大小。" - ] - }, - "paramDenoisingStrength": { - "heading": "去噪强度", - "paragraphs": [ - "为输入图像添加的噪声量。", - "输入 0 会导致结果图像和输入完全相同,输入 1 则会生成全新的图像。" - ] - }, - "paramSeed": { - "heading": "种子", - "paragraphs": [ - "控制用于生成的起始噪声。", - "禁用 “随机种子” 来以相同设置生成相同的结果。" - ] - }, - "controlNetControlMode": { - "heading": "控制模式", - "paragraphs": [ - "给提示词或 ControlNet 增加更大的权重。" - ] - }, - "dynamicPrompts": { - "paragraphs": [ - "动态提示词可将单个提示词解析为多个。", - "基本语法示例:\"a {red|green|blue} ball\"。这会产生三种提示词:\"a red ball\", \"a green ball\" 和 \"a blue ball\"。", - "可以在单个提示词中多次使用该语法,但务必请使用最大提示词设置来控制生成的提示词数量。" - ], - "heading": "动态提示词" - }, - "paramVAE": { - "paragraphs": [ - "用于将 AI 输出转换成最终图像的模型。" - ], - "heading": "VAE" - }, - "dynamicPromptsSeedBehaviour": { - "paragraphs": [ - "控制生成提示词时种子的使用方式。", - "每次迭代过程都会使用一个唯一的种子。使用本选项来探索单个种子的提示词变化。", - "例如,如果你有 5 种提示词,则生成的每个图像都会使用相同种子。", - "为每张图像使用独立的唯一种子。这可以提供更多变化。" - ], - "heading": "种子行为" - }, - "dynamicPromptsMaxPrompts": { - "heading": "最大提示词数量", - "paragraphs": [ - "限制动态提示词可生成的提示词数量。" - ] - }, - "controlNet": { - "paragraphs": [ - "ControlNet 为生成过程提供引导,为生成具有受控构图、结构、样式的图像提供帮助,具体的功能由所选的模型决定。" - ], - "heading": "ControlNet" - } - }, - "invocationCache": { - "disable": "禁用", - "misses": "缓存未中", - "enableFailed": "启用调用缓存时出现问题", - "invocationCache": "调用缓存", - "clearSucceeded": "调用缓存已清除", - "enableSucceeded": "调用缓存已启用", - "clearFailed": "清除调用缓存时出现问题", - "hits": "缓存命中", - "disableSucceeded": "调用缓存已禁用", - "disableFailed": "禁用调用缓存时出现问题", - "enable": "启用", - "clear": "清除", - "maxCacheSize": "最大缓存大小", - "cacheSize": "缓存大小" - }, - "hrf": { - "enableHrf": "启用高分辨率修复", - "upscaleMethod": "放大方法", - "enableHrfTooltip": "使用较低的分辨率进行初始生成,放大到基础分辨率后进行图生图。", - "metadata": { - "strength": "高分辨率修复强度", - "enabled": "高分辨率修复已启用", - "method": "高分辨率修复方法" - }, - "hrf": "高分辨率修复", - "hrfStrength": "高分辨率修复强度", - "strengthTooltip": "值越低细节越少,但可以减少部分潜在的伪影。" - } -} diff --git a/invokeai/frontend/web/dist/locales/zh_Hant.json b/invokeai/frontend/web/dist/locales/zh_Hant.json deleted file mode 100644 index fe51856117..0000000000 --- a/invokeai/frontend/web/dist/locales/zh_Hant.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "common": { - "nodes": "節點", - "img2img": "圖片轉圖片", - "langSimplifiedChinese": "簡體中文", - "statusError": "錯誤", - "statusDisconnected": "已中斷連線", - "statusConnected": "已連線", - "back": "返回", - "load": "載入", - "close": "關閉", - "langEnglish": "英語", - "settingsLabel": "設定", - "upload": "上傳", - "langArabic": "阿拉伯語", - "discordLabel": "Discord", - "nodesDesc": "使用Node生成圖像的系統正在開發中。敬請期待有關於這項功能的更新。", - "reportBugLabel": "回報錯誤", - "githubLabel": "GitHub", - "langKorean": "韓語", - "langPortuguese": "葡萄牙語", - "hotkeysLabel": "快捷鍵", - "languagePickerLabel": "切換語言", - "langDutch": "荷蘭語", - "langFrench": "法語", - "langGerman": "德語", - "langItalian": "義大利語", - "langJapanese": "日語", - "langPolish": "波蘭語", - "langBrPortuguese": "巴西葡萄牙語", - "langRussian": "俄語", - "langSpanish": "西班牙語", - "unifiedCanvas": "統一畫布", - "cancel": "取消", - "langHebrew": "希伯來語", - "txt2img": "文字轉圖片" - }, - "accessibility": { - "modelSelect": "選擇模型", - "invokeProgressBar": "Invoke 進度條", - "uploadImage": "上傳圖片", - "reset": "重設", - "nextImage": "下一張圖片", - "previousImage": "上一張圖片", - "flipHorizontally": "水平翻轉", - "useThisParameter": "使用此參數", - "zoomIn": "放大", - "zoomOut": "縮小", - "flipVertically": "垂直翻轉", - "modifyConfig": "修改配置", - "menu": "選單" - } -} From daf00efa4de1c294dc480e46d2ed3c27661ef9a5 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 9 Dec 2023 13:46:17 +1100 Subject: [PATCH 093/515] fix(api): only attempt to serve UI build if it exists --- invokeai/app/api_app.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/invokeai/app/api_app.py b/invokeai/app/api_app.py index 79c7740485..13fd541139 100644 --- a/invokeai/app/api_app.py +++ b/invokeai/app/api_app.py @@ -219,18 +219,19 @@ def overridden_redoc() -> HTMLResponse: web_root_path = Path(list(web_dir.__path__)[0]) +# Only serve the UI if we it has a build +if (web_root_path / "dist").exists(): + # Cannot add headers to StaticFiles, so we must serve index.html with a custom route + # Add cache-control: no-store header to prevent caching of index.html, which leads to broken UIs at release + @app.get("/", include_in_schema=False, name="ui_root") + def get_index() -> FileResponse: + return FileResponse(Path(web_root_path, "dist/index.html"), headers={"Cache-Control": "no-store"}) -# Cannot add headers to StaticFiles, so we must serve index.html with a custom route -# Add cache-control: no-store header to prevent caching of index.html, which leads to broken UIs at release -@app.get("/", include_in_schema=False, name="ui_root") -def get_index() -> FileResponse: - return FileResponse(Path(web_root_path, "dist/index.html"), headers={"Cache-Control": "no-store"}) + # # Must mount *after* the other routes else it borks em + app.mount("/assets", StaticFiles(directory=Path(web_root_path, "dist/assets/")), name="assets") + app.mount("/locales", StaticFiles(directory=Path(web_root_path, "dist/locales/")), name="locales") - -# # Must mount *after* the other routes else it borks em app.mount("/static", StaticFiles(directory=Path(web_root_path, "static/")), name="static") # docs favicon is in here -app.mount("/assets", StaticFiles(directory=Path(web_root_path, "dist/assets/")), name="assets") -app.mount("/locales", StaticFiles(directory=Path(web_root_path, "dist/locales/")), name="locales") def invoke_api() -> None: From 0a15f3fc3528f3262b09002f6fce648a63d29486 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 9 Dec 2023 14:19:06 +1100 Subject: [PATCH 094/515] fix(tests): remove test for frontend build --- tests/test_path.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/test_path.py b/tests/test_path.py index 4c502acdcc..2f2e3779c7 100644 --- a/tests/test_path.py +++ b/tests/test_path.py @@ -10,7 +10,6 @@ from PIL import Image import invokeai.app.assets.images as image_assets import invokeai.configs as configs -import invokeai.frontend.web.dist as frontend class ConfigsTestCase(unittest.TestCase): @@ -21,20 +20,11 @@ class ConfigsTestCase(unittest.TestCase): configs_path = pathlib.Path(configs.__path__[0]) return configs_path - def get_frontend_path(self) -> pathlib.Path: - """Get the path of the frontend dist folder""" - return pathlib.Path(frontend.__path__[0]) - def test_configs_path(self): """Test that the configs path is correct""" TEST_PATH = str(self.get_configs_path()) assert TEST_PATH.endswith(str(osp.join("invokeai", "configs"))) - def test_frontend_path(self): - """Test that the frontend path is correct""" - FRONTEND_PATH = str(self.get_frontend_path()) - assert FRONTEND_PATH.endswith(osp.join("invokeai", "frontend", "web", "dist")) - def test_caution_img(self): """Verify the caution image""" caution_img = Image.open(osp.join(image_assets.__path__[0], "caution.png")) From 1feab3da37ebbda674c3bea75c11123f0355141d Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 9 Dec 2023 16:49:41 +1100 Subject: [PATCH 095/515] fix(installer): update msg in create_installer More accurate/clearer messages --- installer/create_installer.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index 6b7a8b6d7c..c5fc9ea734 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -8,6 +8,8 @@ function is_bin_in_path { builtin type -P "$1" &>/dev/null } +# Some machines only have `python3`, others have `python` - make an alias. +# We can use a function to approximate an alias within a non-interactive shell. if ! is_bin_in_path python && is_bin_in_path python3; then echo "Aliasing python3 to python..." function python { @@ -31,14 +33,14 @@ VERSION="v${VERSION}${PATCH}" LATEST_TAG="v3-latest" echo Building installer for version $VERSION -echo "Be certain that you're in the 'installer' directory before continuing." -echo "Currently in '$(pwd)'" +echo "Be certain that you're in the 'installer' directory before continuing. Currently in '$(pwd)'." read -p "Press any key to continue, or CTRL-C to exit..." -read -e -p "Tag this repo with '${VERSION}' and '${LATEST_TAG}'? Immediately pushes! [n]: " input +read -e -p "Tag this repo with '${VERSION}' and '${LATEST_TAG}'? Immediately deletes the existing tags! [n]: " input RESPONSE=${input:='n'} if [ "$RESPONSE" == 'y' ]; then + echo "Deleting '$VERSION' and '$LATEST_TAG' tags..." git push origin :refs/tags/$VERSION if ! git tag -fa $VERSION; then echo "Existing/invalid tag" @@ -48,7 +50,7 @@ if [ "$RESPONSE" == 'y' ]; then git push origin :refs/tags/$LATEST_TAG git tag -fa $LATEST_TAG - echo "remember to push --tags!" + echo "Remember to push --tags!" fi # ---------------------- FRONTEND ---------------------- @@ -61,6 +63,7 @@ function build_frontend { popd } +# Build frontend if needed - offer to rebuild if there is already a build if [ -d ../invokeai/frontend/web/dist ]; then read -e -p "Frontend build exists. Rebuild? [n]: " input RESPONSE=${input:='n'} From 179bc6449087ee9f41adc4a7c6411e70da1a33fd Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 9 Dec 2023 20:33:17 +1100 Subject: [PATCH 096/515] feat(create_installer): remove extraneous conditional Using `-f` is functionally equivalent to first checking if the dir exists before removing it. We just want to ensure the build dir doesn't exists. --- installer/create_installer.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index c5fc9ea734..d36e3f1887 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -84,9 +84,7 @@ if [[ $(python -c 'from importlib.util import find_spec; print(find_spec("build" pip install --user build fi -if [ -d ../build ]; then - rm -Rf ../build -fi +rm -rf ../build python -m build --wheel --outdir dist/ ../. From 49b74d189e4e0ff2fe0db89c047840876963387d Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 13:08:23 +1100 Subject: [PATCH 097/515] feat(installer): improve messages, simplify script - Color outputs - Clarify messages - Do not offer to use existing frontend build (insurance - prevents accidentally using old build) --- installer/create_installer.sh | 92 +++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 30 deletions(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index d36e3f1887..278a7ed94a 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -2,16 +2,36 @@ set -e -cd "$(dirname "$0")" +BCYAN="\e[1;36m" +BBLUE="\e[1;34m" +BYELLOW="\e[1;33m" +BGREEN="\e[1;32m" +RED="\e[31m" +RESET="\e[0m" function is_bin_in_path { builtin type -P "$1" &>/dev/null } +function git_show_ref { + git show-ref --dereference $1 --abbrev 7 +} + +function git_show { + git show -s --format='%h %s' $1 +} + +cd "$(dirname "$0")" + +echo -e "${BYELLOW}This script must be run from the installer directory!${RESET}" +echo "The current working directory is $(pwd)" +read -p "If that looks right, press any key to proceed, or CTRL-C to exit..." +echo + # Some machines only have `python3`, others have `python` - make an alias. # We can use a function to approximate an alias within a non-interactive shell. if ! is_bin_in_path python && is_bin_in_path python3; then - echo "Aliasing python3 to python..." + echo -e "Aliasing ${BBLUE}python3${RESET} to ${BBLUE}python${RESET}..." function python { python3 "$@" } @@ -20,7 +40,7 @@ fi if [[ -v "VIRTUAL_ENV" ]]; then # we can't just call 'deactivate' because this function is not exported # to the environment of this script from the bash process that runs the script - echo "A virtual environment is activated. Please deactivate it before proceeding". + echo -e "${BYELLOW}A virtual environment is activated. Please deactivate it before proceeding.${RESET}" exit -1 fi @@ -32,51 +52,61 @@ PATCH="" VERSION="v${VERSION}${PATCH}" LATEST_TAG="v3-latest" -echo Building installer for version $VERSION -echo "Be certain that you're in the 'installer' directory before continuing. Currently in '$(pwd)'." -read -p "Press any key to continue, or CTRL-C to exit..." +echo "Building installer for version $VERSION..." +echo -read -e -p "Tag this repo with '${VERSION}' and '${LATEST_TAG}'? Immediately deletes the existing tags! [n]: " input +echo -e "${BCYAN}$VERSION${RESET}" +git_show_ref tags/$VERSION +echo +echo -e "${BCYAN}$LATEST_TAG${RESET}" +git_show_ref tags/$LATEST_TAG +echo +echo -e "${BGREEN}HEAD${RESET}" +git_show +echo + +echo -e -n "Tag ${BGREEN}HEAD${RESET} with ${BCYAN}${VERSION}${RESET} and ${BCYAN}${LATEST_TAG}${RESET}, ${RED}deleting existing tags on remote${RESET}? " +read -e -p 'y/n [n]: ' input RESPONSE=${input:='n'} if [ "$RESPONSE" == 'y' ]; then - - echo "Deleting '$VERSION' and '$LATEST_TAG' tags..." + echo + echo -e "Deleting ${BCYAN}${VERSION}${RESET} tag on remote..." git push origin :refs/tags/$VERSION + + echo -e "Tagging ${BGREEN}HEAD${RESET} with ${BCYAN}${VERSION}${RESET} locally..." if ! git tag -fa $VERSION; then echo "Existing/invalid tag" exit -1 fi + echo -e "Deleting ${BCYAN}${LATEST_TAG}${RESET} tag on remote..." git push origin :refs/tags/$LATEST_TAG + + echo -e "Tagging ${BGREEN}HEAD${RESET} with ${BCYAN}${LATEST_TAG}${RESET} locally..." git tag -fa $LATEST_TAG - echo "Remember to push --tags!" + echo + echo -e "${BYELLOW}Remember to 'git push origin --tags'!${RESET}" fi # ---------------------- FRONTEND ---------------------- -function build_frontend { - echo Building frontend - pushd ../invokeai/frontend/web - pnpm i --frozen-lockfile - pnpm build - popd -} - -# Build frontend if needed - offer to rebuild if there is already a build -if [ -d ../invokeai/frontend/web/dist ]; then - read -e -p "Frontend build exists. Rebuild? [n]: " input - RESPONSE=${input:='n'} - if [ "$RESPONSE" == 'y' ]; then - build_frontend - fi -else - build_frontend -fi +pushd ../invokeai/frontend/web >/dev/null +echo +echo "Installing frontend dependencies..." +echo +pnpm i --frozen-lockfile +echo +echo "Building frontend..." +echo +pnpm build +popd # ---------------------- BACKEND ---------------------- -echo Building the wheel +echo +echo "Building wheel..." +echo # install the 'build' package in the user site packages, if needed # could be improved by using a temporary venv, but it's tiny and harmless @@ -90,7 +120,9 @@ python -m build --wheel --outdir dist/ ../. # ---------------------- -echo Building installer zip files for InvokeAI $VERSION +echo +echo "Building installer zip files for InvokeAI ${VERSION}..." +echo # get rid of any old ones rm -f *.zip From e9d7e6bdd5d3986dbd77b887f30ab54e34a98274 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 13:11:44 +1100 Subject: [PATCH 098/515] feat(installer): make active venv error red instead of yellow --- installer/create_installer.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index 278a7ed94a..0368624e87 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -6,6 +6,7 @@ BCYAN="\e[1;36m" BBLUE="\e[1;34m" BYELLOW="\e[1;33m" BGREEN="\e[1;32m" +BRED="\e[1;31m" RED="\e[31m" RESET="\e[0m" @@ -40,7 +41,7 @@ fi if [[ -v "VIRTUAL_ENV" ]]; then # we can't just call 'deactivate' because this function is not exported # to the environment of this script from the bash process that runs the script - echo -e "${BYELLOW}A virtual environment is activated. Please deactivate it before proceeding.${RESET}" + echo -e "${BRED}A virtual environment is activated. Please deactivate it before proceeding.${RESET}" exit -1 fi From 41ad13c282c17e937e75f4fba304a863273a5364 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 14:02:25 +1100 Subject: [PATCH 099/515] feat(installer): do not print when aliasing python Potentially confusing and not useful --- installer/create_installer.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index 0368624e87..34c9adb39e 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -3,7 +3,6 @@ set -e BCYAN="\e[1;36m" -BBLUE="\e[1;34m" BYELLOW="\e[1;33m" BGREEN="\e[1;32m" BRED="\e[1;31m" @@ -29,10 +28,9 @@ echo "The current working directory is $(pwd)" read -p "If that looks right, press any key to proceed, or CTRL-C to exit..." echo -# Some machines only have `python3`, others have `python` - make an alias. +# Some machines only have `python3` in PATH, others have `python` - make an alias. # We can use a function to approximate an alias within a non-interactive shell. if ! is_bin_in_path python && is_bin_in_path python3; then - echo -e "Aliasing ${BBLUE}python3${RESET} to ${BBLUE}python${RESET}..." function python { python3 "$@" } From c5c975c7a9a134b2642c61bcfb4bf2f5731cb112 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 14:29:01 +1100 Subject: [PATCH 100/515] fix(installer): fix exit on new version --- installer/create_installer.sh | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index 34c9adb39e..ef489af751 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -13,6 +13,10 @@ function is_bin_in_path { builtin type -P "$1" &>/dev/null } +function does_tag_exist { + git rev-parse --quiet --verify "refs/tags/$1" >/dev/null +} + function git_show_ref { git show-ref --dereference $1 --abbrev 7 } @@ -54,17 +58,22 @@ LATEST_TAG="v3-latest" echo "Building installer for version $VERSION..." echo -echo -e "${BCYAN}$VERSION${RESET}" -git_show_ref tags/$VERSION -echo -echo -e "${BCYAN}$LATEST_TAG${RESET}" -git_show_ref tags/$LATEST_TAG -echo -echo -e "${BGREEN}HEAD${RESET}" +if does_tag_exist $VERSION; then + echo -e "${BCYAN}${VERSION}${RESET} already exists:" + git_show_ref tags/$VERSION + echo +fi +if does_tag_exist $LATEST_TAG; then + echo -e "${BCYAN}${LATEST_TAG}${RESET} already exists:" + git_show_ref tags/$LATEST_TAG + echo +fi + +echo -e "${BGREEN}HEAD${RESET}:" git_show echo -echo -e -n "Tag ${BGREEN}HEAD${RESET} with ${BCYAN}${VERSION}${RESET} and ${BCYAN}${LATEST_TAG}${RESET}, ${RED}deleting existing tags on remote${RESET}? " +echo -e -n "Create tags ${BCYAN}${VERSION}${RESET} and ${BCYAN}${LATEST_TAG}${RESET} @ ${BGREEN}HEAD${RESET}, ${RED}deleting existing tags on remote${RESET}? " read -e -p 'y/n [n]: ' input RESPONSE=${input:='n'} if [ "$RESPONSE" == 'y' ]; then From 36043bf38b710b8be378d9c890cc7feb697fa608 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 10 Dec 2023 21:33:54 -0500 Subject: [PATCH 101/515] fixed docstring in probe module --- invokeai/backend/model_manager/probe.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/invokeai/backend/model_manager/probe.py b/invokeai/backend/model_manager/probe.py index 1fda6e376b..3ba62fa6ff 100644 --- a/invokeai/backend/model_manager/probe.py +++ b/invokeai/backend/model_manager/probe.py @@ -115,11 +115,13 @@ class ModelProbe(object): fields: Optional[Dict[str, Any]] = None, ) -> AnyModelConfig: """ - Probe the model at model_path and return sufficient information about it - to place it somewhere in the models directory hierarchy. If the model is - already loaded into memory, you may provide it as model in order to avoid - opening it a second time. The prediction_type_helper callable is a function that receives - the path to the model and returns the SchedulerPredictionType. + Probe the model at model_path and return its configuration record. + + :param model_path: Path to the model file (checkpoint) or directory (diffusers). + :param fields: An optional dictionary that can be used to override probed + fields. Typically used for fields that don't probe well, such as prediction_type. + + Returns: The appropriate model configuration derived from ModelConfigBase. """ if fields is None: fields = {} From f2c6819d68fb6e4b2377c8534f6475fec6dbf141 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 4 Dec 2023 23:38:56 +1100 Subject: [PATCH 102/515] feat(db): add SQLiteMigrator to perform db migrations --- .../board_image_records_sqlite.py | 57 --- .../board_records/board_records_sqlite.py | 46 --- .../image_records/image_records_sqlite.py | 95 ----- .../model_records/model_records_base.py | 9 - .../model_records/model_records_sql.py | 96 ----- .../session_queue/session_queue_sqlite.py | 118 ------ .../shared/sqlite/migrations/__init__.py | 0 .../shared/sqlite/migrations/migration_1.py | 370 ++++++++++++++++++ .../shared/sqlite/migrations/migration_2.py | 97 +++++ .../services/shared/sqlite/sqlite_database.py | 28 +- .../services/shared/sqlite/sqlite_migrator.py | 210 ++++++++++ .../workflow_records_sqlite.py | 85 ---- tests/test_sqlite_migrator.py | 173 ++++++++ 13 files changed, 868 insertions(+), 516 deletions(-) create mode 100644 invokeai/app/services/shared/sqlite/migrations/__init__.py create mode 100644 invokeai/app/services/shared/sqlite/migrations/migration_1.py create mode 100644 invokeai/app/services/shared/sqlite/migrations/migration_2.py create mode 100644 invokeai/app/services/shared/sqlite/sqlite_migrator.py create mode 100644 tests/test_sqlite_migrator.py diff --git a/invokeai/app/services/board_image_records/board_image_records_sqlite.py b/invokeai/app/services/board_image_records/board_image_records_sqlite.py index 54d9a0af04..cde810a739 100644 --- a/invokeai/app/services/board_image_records/board_image_records_sqlite.py +++ b/invokeai/app/services/board_image_records/board_image_records_sqlite.py @@ -20,63 +20,6 @@ class SqliteBoardImageRecordStorage(BoardImageRecordStorageBase): self._conn = db.conn self._cursor = self._conn.cursor() - try: - self._lock.acquire() - self._create_tables() - self._conn.commit() - finally: - self._lock.release() - - def _create_tables(self) -> None: - """Creates the `board_images` junction table.""" - - # Create the `board_images` junction table. - self._cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS board_images ( - board_id TEXT NOT NULL, - image_name TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME, - -- enforce one-to-many relationship between boards and images using PK - -- (we can extend this to many-to-many later) - PRIMARY KEY (image_name), - FOREIGN KEY (board_id) REFERENCES boards (board_id) ON DELETE CASCADE, - FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE - ); - """ - ) - - # Add index for board id - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_board_images_board_id ON board_images (board_id); - """ - ) - - # Add index for board id, sorted by created_at - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_board_images_board_id_created_at ON board_images (board_id, created_at); - """ - ) - - # Add trigger for `updated_at`. - self._cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_board_images_updated_at - AFTER UPDATE - ON board_images FOR EACH ROW - BEGIN - UPDATE board_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE board_id = old.board_id AND image_name = old.image_name; - END; - """ - ) - def add_image_to_board( self, board_id: str, diff --git a/invokeai/app/services/board_records/board_records_sqlite.py b/invokeai/app/services/board_records/board_records_sqlite.py index 165ce8df0c..a3836cb6c7 100644 --- a/invokeai/app/services/board_records/board_records_sqlite.py +++ b/invokeai/app/services/board_records/board_records_sqlite.py @@ -28,52 +28,6 @@ class SqliteBoardRecordStorage(BoardRecordStorageBase): self._conn = db.conn self._cursor = self._conn.cursor() - try: - self._lock.acquire() - self._create_tables() - self._conn.commit() - finally: - self._lock.release() - - def _create_tables(self) -> None: - """Creates the `boards` table and `board_images` junction table.""" - - # Create the `boards` table. - self._cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS boards ( - board_id TEXT NOT NULL PRIMARY KEY, - board_name TEXT NOT NULL, - cover_image_name TEXT, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME, - FOREIGN KEY (cover_image_name) REFERENCES images (image_name) ON DELETE SET NULL - ); - """ - ) - - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_boards_created_at ON boards (created_at); - """ - ) - - # Add trigger for `updated_at`. - self._cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_boards_updated_at - AFTER UPDATE - ON boards FOR EACH ROW - BEGIN - UPDATE boards SET updated_at = current_timestamp - WHERE board_id = old.board_id; - END; - """ - ) - def delete(self, board_id: str) -> None: try: self._lock.acquire() diff --git a/invokeai/app/services/image_records/image_records_sqlite.py b/invokeai/app/services/image_records/image_records_sqlite.py index b14c322f50..74f82e7d84 100644 --- a/invokeai/app/services/image_records/image_records_sqlite.py +++ b/invokeai/app/services/image_records/image_records_sqlite.py @@ -32,101 +32,6 @@ class SqliteImageRecordStorage(ImageRecordStorageBase): self._conn = db.conn self._cursor = self._conn.cursor() - try: - self._lock.acquire() - self._create_tables() - self._conn.commit() - finally: - self._lock.release() - - def _create_tables(self) -> None: - """Creates the `images` table.""" - - # Create the `images` table. - self._cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS images ( - image_name TEXT NOT NULL PRIMARY KEY, - -- This is an enum in python, unrestricted string here for flexibility - image_origin TEXT NOT NULL, - -- This is an enum in python, unrestricted string here for flexibility - image_category TEXT NOT NULL, - width INTEGER NOT NULL, - height INTEGER NOT NULL, - session_id TEXT, - node_id TEXT, - metadata TEXT, - is_intermediate BOOLEAN DEFAULT FALSE, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME - ); - """ - ) - - self._cursor.execute("PRAGMA table_info(images)") - columns = [column[1] for column in self._cursor.fetchall()] - - if "starred" not in columns: - self._cursor.execute( - """--sql - ALTER TABLE images ADD COLUMN starred BOOLEAN DEFAULT FALSE; - """ - ) - - # Create the `images` table indices. - self._cursor.execute( - """--sql - CREATE UNIQUE INDEX IF NOT EXISTS idx_images_image_name ON images(image_name); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_images_image_origin ON images(image_origin); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_images_image_category ON images(image_category); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_images_created_at ON images(created_at); - """ - ) - - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_images_starred ON images(starred); - """ - ) - - # Add trigger for `updated_at`. - self._cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_images_updated_at - AFTER UPDATE - ON images FOR EACH ROW - BEGIN - UPDATE images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE image_name = old.image_name; - END; - """ - ) - - self._cursor.execute("PRAGMA table_info(images)") - columns = [column[1] for column in self._cursor.fetchall()] - if "has_workflow" not in columns: - self._cursor.execute( - """--sql - ALTER TABLE images - ADD COLUMN has_workflow BOOLEAN DEFAULT FALSE; - """ - ) - def get(self, image_name: str) -> ImageRecord: try: self._lock.acquire() diff --git a/invokeai/app/services/model_records/model_records_base.py b/invokeai/app/services/model_records/model_records_base.py index 9b0612a846..679d05fccd 100644 --- a/invokeai/app/services/model_records/model_records_base.py +++ b/invokeai/app/services/model_records/model_records_base.py @@ -9,9 +9,6 @@ from typing import List, Optional, Union from invokeai.backend.model_manager.config import AnyModelConfig, BaseModelType, ModelType -# should match the InvokeAI version when this is first released. -CONFIG_FILE_VERSION = "3.2.0" - class DuplicateModelException(Exception): """Raised on an attempt to add a model with the same key twice.""" @@ -32,12 +29,6 @@ class ConfigFileVersionMismatchException(Exception): class ModelRecordServiceBase(ABC): """Abstract base class for storage and retrieval of model configs.""" - @property - @abstractmethod - def version(self) -> str: - """Return the config file/database schema version.""" - pass - @abstractmethod def add_model(self, key: str, config: Union[dict, AnyModelConfig]) -> AnyModelConfig: """ diff --git a/invokeai/app/services/model_records/model_records_sql.py b/invokeai/app/services/model_records/model_records_sql.py index 69ac0e158f..83b4d5b627 100644 --- a/invokeai/app/services/model_records/model_records_sql.py +++ b/invokeai/app/services/model_records/model_records_sql.py @@ -54,7 +54,6 @@ from invokeai.backend.model_manager.config import ( from ..shared.sqlite.sqlite_database import SqliteDatabase from .model_records_base import ( - CONFIG_FILE_VERSION, DuplicateModelException, ModelRecordServiceBase, UnknownModelException, @@ -78,85 +77,6 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): self._db = db self._cursor = self._db.conn.cursor() - with self._db.lock: - # Enable foreign keys - self._db.conn.execute("PRAGMA foreign_keys = ON;") - self._create_tables() - self._db.conn.commit() - assert ( - str(self.version) == CONFIG_FILE_VERSION - ), f"Model config version {self.version} does not match expected version {CONFIG_FILE_VERSION}" - - def _create_tables(self) -> None: - """Create sqlite3 tables.""" - # model_config table breaks out the fields that are common to all config objects - # and puts class-specific ones in a serialized json object - self._cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS model_config ( - id TEXT NOT NULL PRIMARY KEY, - -- The next 3 fields are enums in python, unrestricted string here - base TEXT NOT NULL, - type TEXT NOT NULL, - name TEXT NOT NULL, - path TEXT NOT NULL, - original_hash TEXT, -- could be null - -- Serialized JSON representation of the whole config object, - -- which will contain additional fields from subclasses - config TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- unique constraint on combo of name, base and type - UNIQUE(name, base, type) - ); - """ - ) - - # metadata table - self._cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS model_manager_metadata ( - metadata_key TEXT NOT NULL PRIMARY KEY, - metadata_value TEXT NOT NULL - ); - """ - ) - - # Add trigger for `updated_at`. - self._cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS model_config_updated_at - AFTER UPDATE - ON model_config FOR EACH ROW - BEGIN - UPDATE model_config SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE id = old.id; - END; - """ - ) - - # Add indexes for searchable fields - for stmt in [ - "CREATE INDEX IF NOT EXISTS base_index ON model_config(base);", - "CREATE INDEX IF NOT EXISTS type_index ON model_config(type);", - "CREATE INDEX IF NOT EXISTS name_index ON model_config(name);", - "CREATE UNIQUE INDEX IF NOT EXISTS path_index ON model_config(path);", - ]: - self._cursor.execute(stmt) - - # Add our version to the metadata table - self._cursor.execute( - """--sql - INSERT OR IGNORE into model_manager_metadata ( - metadata_key, - metadata_value - ) - VALUES (?,?); - """, - ("version", CONFIG_FILE_VERSION), - ) - def add_model(self, key: str, config: Union[dict, AnyModelConfig]) -> AnyModelConfig: """ Add a model to the database. @@ -214,22 +134,6 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): return self.get_model(key) - @property - def version(self) -> str: - """Return the version of the database schema.""" - with self._db.lock: - self._cursor.execute( - """--sql - SELECT metadata_value FROM model_manager_metadata - WHERE metadata_key=?; - """, - ("version",), - ) - rows = self._cursor.fetchone() - if not rows: - raise KeyError("Models database does not have metadata key 'version'") - return rows[0] - def del_model(self, key: str) -> None: """ Delete a model. diff --git a/invokeai/app/services/session_queue/session_queue_sqlite.py b/invokeai/app/services/session_queue/session_queue_sqlite.py index 71f28c102b..64642690e9 100644 --- a/invokeai/app/services/session_queue/session_queue_sqlite.py +++ b/invokeai/app/services/session_queue/session_queue_sqlite.py @@ -50,7 +50,6 @@ class SqliteSessionQueue(SessionQueueBase): self.__lock = db.lock self.__conn = db.conn self.__cursor = self.__conn.cursor() - self._create_tables() def _match_event_name(self, event: FastAPIEvent, match_in: list[str]) -> bool: return event[1]["event"] in match_in @@ -98,123 +97,6 @@ class SqliteSessionQueue(SessionQueueBase): except SessionQueueItemNotFoundError: return - def _create_tables(self) -> None: - """Creates the session queue tables, indicies, and triggers""" - try: - self.__lock.acquire() - self.__cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS session_queue ( - item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- used for ordering, cursor pagination - batch_id TEXT NOT NULL, -- identifier of the batch this queue item belongs to - queue_id TEXT NOT NULL, -- identifier of the queue this queue item belongs to - session_id TEXT NOT NULL UNIQUE, -- duplicated data from the session column, for ease of access - field_values TEXT, -- NULL if no values are associated with this queue item - session TEXT NOT NULL, -- the session to be executed - status TEXT NOT NULL DEFAULT 'pending', -- the status of the queue item, one of 'pending', 'in_progress', 'completed', 'failed', 'canceled' - priority INTEGER NOT NULL DEFAULT 0, -- the priority, higher is more important - error TEXT, -- any errors associated with this queue item - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), -- updated via trigger - started_at DATETIME, -- updated via trigger - completed_at DATETIME -- updated via trigger, completed items are cleaned up on application startup - -- Ideally this is a FK, but graph_executions uses INSERT OR REPLACE, and REPLACE triggers the ON DELETE CASCADE... - -- FOREIGN KEY (session_id) REFERENCES graph_executions (id) ON DELETE CASCADE - ); - """ - ) - - self.__cursor.execute( - """--sql - CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_item_id ON session_queue(item_id); - """ - ) - - self.__cursor.execute( - """--sql - CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_session_id ON session_queue(session_id); - """ - ) - - self.__cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_session_queue_batch_id ON session_queue(batch_id); - """ - ) - - self.__cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_session_queue_created_priority ON session_queue(priority); - """ - ) - - self.__cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_session_queue_created_status ON session_queue(status); - """ - ) - - self.__cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_session_queue_completed_at - AFTER UPDATE OF status ON session_queue - FOR EACH ROW - WHEN - NEW.status = 'completed' - OR NEW.status = 'failed' - OR NEW.status = 'canceled' - BEGIN - UPDATE session_queue - SET completed_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE item_id = NEW.item_id; - END; - """ - ) - - self.__cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_session_queue_started_at - AFTER UPDATE OF status ON session_queue - FOR EACH ROW - WHEN - NEW.status = 'in_progress' - BEGIN - UPDATE session_queue - SET started_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE item_id = NEW.item_id; - END; - """ - ) - - self.__cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_session_queue_updated_at - AFTER UPDATE - ON session_queue FOR EACH ROW - BEGIN - UPDATE session_queue - SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE item_id = old.item_id; - END; - """ - ) - - self.__cursor.execute("PRAGMA table_info(session_queue)") - columns = [column[1] for column in self.__cursor.fetchall()] - if "workflow" not in columns: - self.__cursor.execute( - """--sql - ALTER TABLE session_queue ADD COLUMN workflow TEXT; - """ - ) - - self.__conn.commit() - except Exception: - self.__conn.rollback() - raise - finally: - self.__lock.release() - def _set_in_progress_to_canceled(self) -> None: """ Sets all in_progress queue items to canceled. Run on app startup, not associated with any queue. diff --git a/invokeai/app/services/shared/sqlite/migrations/__init__.py b/invokeai/app/services/shared/sqlite/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_1.py b/invokeai/app/services/shared/sqlite/migrations/migration_1.py new file mode 100644 index 0000000000..52d10e095d --- /dev/null +++ b/invokeai/app/services/shared/sqlite/migrations/migration_1.py @@ -0,0 +1,370 @@ +import sqlite3 + +from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration + + +def _migrate(cursor: sqlite3.Cursor) -> None: + """Migration callback for database version 1.""" + + _create_board_images(cursor) + _create_boards(cursor) + _create_images(cursor) + _create_model_config(cursor) + _create_session_queue(cursor) + _create_workflow_images(cursor) + _create_workflows(cursor) + + +def _create_board_images(cursor: sqlite3.Cursor) -> None: + """Creates the `board_images` table, indices and triggers.""" + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS board_images ( + board_id TEXT NOT NULL, + image_name TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME, + -- enforce one-to-many relationship between boards and images using PK + -- (we can extend this to many-to-many later) + PRIMARY KEY (image_name), + FOREIGN KEY (board_id) REFERENCES boards (board_id) ON DELETE CASCADE, + FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE + ); + """ + ] + + indices = [ + "CREATE INDEX IF NOT EXISTS idx_board_images_board_id ON board_images (board_id);", + "CREATE INDEX IF NOT EXISTS idx_board_images_board_id_created_at ON board_images (board_id, created_at);", + ] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_board_images_updated_at + AFTER UPDATE + ON board_images FOR EACH ROW + BEGIN + UPDATE board_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE board_id = old.board_id AND image_name = old.image_name; + END; + """ + ] + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + +def _create_boards(cursor: sqlite3.Cursor) -> None: + """Creates the `boards` table, indices and triggers.""" + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS boards ( + board_id TEXT NOT NULL PRIMARY KEY, + board_name TEXT NOT NULL, + cover_image_name TEXT, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME, + FOREIGN KEY (cover_image_name) REFERENCES images (image_name) ON DELETE SET NULL + ); + """ + ] + + indices = ["CREATE INDEX IF NOT EXISTS idx_boards_created_at ON boards (created_at);"] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_boards_updated_at + AFTER UPDATE + ON boards FOR EACH ROW + BEGIN + UPDATE boards SET updated_at = current_timestamp + WHERE board_id = old.board_id; + END; + """ + ] + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + +def _create_images(cursor: sqlite3.Cursor) -> None: + """Creates the `images` table, indices and triggers. Adds the `starred` column.""" + + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS images ( + image_name TEXT NOT NULL PRIMARY KEY, + -- This is an enum in python, unrestricted string here for flexibility + image_origin TEXT NOT NULL, + -- This is an enum in python, unrestricted string here for flexibility + image_category TEXT NOT NULL, + width INTEGER NOT NULL, + height INTEGER NOT NULL, + session_id TEXT, + node_id TEXT, + metadata TEXT, + is_intermediate BOOLEAN DEFAULT FALSE, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME + ); + """ + ] + + indices = [ + "CREATE UNIQUE INDEX IF NOT EXISTS idx_images_image_name ON images(image_name);", + "CREATE INDEX IF NOT EXISTS idx_images_image_origin ON images(image_origin);", + "CREATE INDEX IF NOT EXISTS idx_images_image_category ON images(image_category);", + "CREATE INDEX IF NOT EXISTS idx_images_created_at ON images(created_at);", + ] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_images_updated_at + AFTER UPDATE + ON images FOR EACH ROW + BEGIN + UPDATE images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE image_name = old.image_name; + END; + """ + ] + + # Add the 'starred' column to `images` if it doesn't exist + cursor.execute("PRAGMA table_info(images)") + columns = [column[1] for column in cursor.fetchall()] + + if "starred" not in columns: + tables.append("ALTER TABLE images ADD COLUMN starred BOOLEAN DEFAULT FALSE;") + indices.append("CREATE INDEX IF NOT EXISTS idx_images_starred ON images(starred);") + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + +def _create_model_config(cursor: sqlite3.Cursor) -> None: + """Creates the `model_config` table, `model_manager_metadata` table, indices and triggers.""" + + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS model_config ( + id TEXT NOT NULL PRIMARY KEY, + -- The next 3 fields are enums in python, unrestricted string here + base TEXT NOT NULL, + type TEXT NOT NULL, + name TEXT NOT NULL, + path TEXT NOT NULL, + original_hash TEXT, -- could be null + -- Serialized JSON representation of the whole config object, + -- which will contain additional fields from subclasses + config TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- unique constraint on combo of name, base and type + UNIQUE(name, base, type) + ); + """, + """--sql + CREATE TABLE IF NOT EXISTS model_manager_metadata ( + metadata_key TEXT NOT NULL PRIMARY KEY, + metadata_value TEXT NOT NULL + ); + """, + ] + + # Add trigger for `updated_at`. + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS model_config_updated_at + AFTER UPDATE + ON model_config FOR EACH ROW + BEGIN + UPDATE model_config SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE id = old.id; + END; + """ + ] + + # Add indexes for searchable fields + indices = [ + "CREATE INDEX IF NOT EXISTS base_index ON model_config(base);", + "CREATE INDEX IF NOT EXISTS type_index ON model_config(type);", + "CREATE INDEX IF NOT EXISTS name_index ON model_config(name);", + "CREATE UNIQUE INDEX IF NOT EXISTS path_index ON model_config(path);", + ] + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + +def _create_session_queue(cursor: sqlite3.Cursor) -> None: + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS session_queue ( + item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- used for ordering, cursor pagination + batch_id TEXT NOT NULL, -- identifier of the batch this queue item belongs to + queue_id TEXT NOT NULL, -- identifier of the queue this queue item belongs to + session_id TEXT NOT NULL UNIQUE, -- duplicated data from the session column, for ease of access + field_values TEXT, -- NULL if no values are associated with this queue item + session TEXT NOT NULL, -- the session to be executed + status TEXT NOT NULL DEFAULT 'pending', -- the status of the queue item, one of 'pending', 'in_progress', 'completed', 'failed', 'canceled' + priority INTEGER NOT NULL DEFAULT 0, -- the priority, higher is more important + error TEXT, -- any errors associated with this queue item + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), -- updated via trigger + started_at DATETIME, -- updated via trigger + completed_at DATETIME -- updated via trigger, completed items are cleaned up on application startup + -- Ideally this is a FK, but graph_executions uses INSERT OR REPLACE, and REPLACE triggers the ON DELETE CASCADE... + -- FOREIGN KEY (session_id) REFERENCES graph_executions (id) ON DELETE CASCADE + ); + """ + ] + + indices = [ + "CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_item_id ON session_queue(item_id);", + "CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_session_id ON session_queue(session_id);", + "CREATE INDEX IF NOT EXISTS idx_session_queue_batch_id ON session_queue(batch_id);", + "CREATE INDEX IF NOT EXISTS idx_session_queue_created_priority ON session_queue(priority);", + "CREATE INDEX IF NOT EXISTS idx_session_queue_created_status ON session_queue(status);", + ] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_session_queue_completed_at + AFTER UPDATE OF status ON session_queue + FOR EACH ROW + WHEN + NEW.status = 'completed' + OR NEW.status = 'failed' + OR NEW.status = 'canceled' + BEGIN + UPDATE session_queue + SET completed_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE item_id = NEW.item_id; + END; + """, + """--sql + CREATE TRIGGER IF NOT EXISTS tg_session_queue_started_at + AFTER UPDATE OF status ON session_queue + FOR EACH ROW + WHEN + NEW.status = 'in_progress' + BEGIN + UPDATE session_queue + SET started_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE item_id = NEW.item_id; + END; + """, + """--sql + CREATE TRIGGER IF NOT EXISTS tg_session_queue_updated_at + AFTER UPDATE + ON session_queue FOR EACH ROW + BEGIN + UPDATE session_queue + SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE item_id = old.item_id; + END; + """, + ] + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + +def _create_workflow_images(cursor: sqlite3.Cursor) -> None: + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS workflow_images ( + workflow_id TEXT NOT NULL, + image_name TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME, + -- enforce one-to-many relationship between workflows and images using PK + -- (we can extend this to many-to-many later) + PRIMARY KEY (image_name), + FOREIGN KEY (workflow_id) REFERENCES workflows (workflow_id) ON DELETE CASCADE, + FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE + ); + """ + ] + + indices = [ + "CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id ON workflow_images (workflow_id);", + "CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id_created_at ON workflow_images (workflow_id, created_at);", + ] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_workflow_images_updated_at + AFTER UPDATE + ON workflow_images FOR EACH ROW + BEGIN + UPDATE workflow_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE workflow_id = old.workflow_id AND image_name = old.image_name; + END; + """ + ] + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + +def _create_workflows(cursor: sqlite3.Cursor) -> None: + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS workflows ( + workflow TEXT NOT NULL, + workflow_id TEXT GENERATED ALWAYS AS (json_extract(workflow, '$.id')) VIRTUAL NOT NULL UNIQUE, -- gets implicit index + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) -- updated via trigger + ); + """ + ] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_workflows_updated_at + AFTER UPDATE + ON workflows FOR EACH ROW + BEGIN + UPDATE workflows + SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE workflow_id = old.workflow_id; + END; + """ + ] + + for stmt in tables + triggers: + cursor.execute(stmt) + + +migration_1 = Migration(db_version=1, app_version="3.4.0", migrate=_migrate) +""" +Database version 1 (initial state). + +This migration represents the state of the database circa InvokeAI v3.4.0, which was the last +version to not use migrations to manage the database. + +As such, this migration does include some ALTER statements, and the SQL statements are written +to be idempotent. + +- Create `board_images` junction table +- Create `boards` table +- Create `images` table, add `starred` column +- Create `model_config` table +- Create `session_queue` table +- Create `workflow_images` junction table +- Create `workflows` table +""" diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2.py b/invokeai/app/services/shared/sqlite/migrations/migration_2.py new file mode 100644 index 0000000000..da9d670917 --- /dev/null +++ b/invokeai/app/services/shared/sqlite/migrations/migration_2.py @@ -0,0 +1,97 @@ +import sqlite3 + +from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration + + +def _migrate(cursor: sqlite3.Cursor) -> None: + """Migration callback for database version 2.""" + + _add_images_has_workflow(cursor) + _add_session_queue_workflow(cursor) + _drop_old_workflow_tables(cursor) + _add_workflow_library(cursor) + _drop_model_manager_metadata(cursor) + + +def _add_images_has_workflow(cursor: sqlite3.Cursor) -> None: + """Add the `has_workflow` column to `images` table.""" + cursor.execute("ALTER TABLE images ADD COLUMN has_workflow BOOLEAN DEFAULT FALSE;") + + +def _add_session_queue_workflow(cursor: sqlite3.Cursor) -> None: + """Add the `workflow` column to `session_queue` table.""" + cursor.execute("ALTER TABLE session_queue ADD COLUMN workflow TEXT;") + + +def _drop_old_workflow_tables(cursor: sqlite3.Cursor) -> None: + """Drops the `workflows` and `workflow_images` tables.""" + cursor.execute("DROP TABLE workflow_images;") + cursor.execute("DROP TABLE workflows;") + + +def _add_workflow_library(cursor: sqlite3.Cursor) -> None: + """Adds the `workflow_library` table and drops the `workflows` and `workflow_images` tables.""" + tables = [ + """--sql + CREATE TABLE workflow_library ( + workflow_id TEXT NOT NULL PRIMARY KEY, + workflow TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated manually when retrieving workflow + opened_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Generated columns, needed for indexing and searching + category TEXT GENERATED ALWAYS as (json_extract(workflow, '$.meta.category')) VIRTUAL NOT NULL, + name TEXT GENERATED ALWAYS as (json_extract(workflow, '$.name')) VIRTUAL NOT NULL, + description TEXT GENERATED ALWAYS as (json_extract(workflow, '$.description')) VIRTUAL NOT NULL + ); + """, + ] + + indices = [ + "CREATE INDEX idx_workflow_library_created_at ON workflow_library(created_at);", + "CREATE INDEX idx_workflow_library_updated_at ON workflow_library(updated_at);", + "CREATE INDEX idx_workflow_library_opened_at ON workflow_library(opened_at);", + "CREATE INDEX idx_workflow_library_category ON workflow_library(category);", + "CREATE INDEX idx_workflow_library_name ON workflow_library(name);", + "CREATE INDEX idx_workflow_library_description ON workflow_library(description);", + ] + + triggers = [ + """--sql + CREATE TRIGGER tg_workflow_library_updated_at + AFTER UPDATE + ON workflow_library FOR EACH ROW + BEGIN + UPDATE workflow_library + SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE workflow_id = old.workflow_id; + END; + """ + ] + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + +def _drop_model_manager_metadata(cursor: sqlite3.Cursor) -> None: + """Drops the `model_manager_metadata` table.""" + cursor.execute("DROP TABLE model_manager_metadata;") + + +migration_2 = Migration( + db_version=2, + app_version="3.5.0", + migrate=_migrate, +) +""" +Database version 2. + +Introduced in v3.5.0 for the new workflow library. + +- Add `has_workflow` column to `images` table +- Add `workflow` column to `session_queue` table +- Drop `workflows` and `workflow_images` tables +- Add `workflow_library` table +""" diff --git a/invokeai/app/services/shared/sqlite/sqlite_database.py b/invokeai/app/services/shared/sqlite/sqlite_database.py index 006eb61cbd..5cc9b66b3b 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_database.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -4,24 +4,27 @@ from logging import Logger from pathlib import Path from invokeai.app.services.config import InvokeAIAppConfig +from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory +from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator class SqliteDatabase: + database: Path | str + def __init__(self, config: InvokeAIAppConfig, logger: Logger): self._logger = logger self._config = config - if self._config.use_memory_db: - self.db_path = sqlite_memory + self.database = sqlite_memory logger.info("Using in-memory database") else: - db_path = self._config.db_path - db_path.parent.mkdir(parents=True, exist_ok=True) - self.db_path = str(db_path) - self._logger.info(f"Using database at {self.db_path}") + self.database = self._config.db_path + self.database.parent.mkdir(parents=True, exist_ok=True) + self._logger.info(f"Using database at {self.database}") - self.conn = sqlite3.connect(self.db_path, check_same_thread=False) + self.conn = sqlite3.connect(database=self.database, check_same_thread=False) self.lock = threading.RLock() self.conn.row_factory = sqlite3.Row @@ -30,15 +33,20 @@ class SqliteDatabase: self.conn.execute("PRAGMA foreign_keys = ON;") + migrator = SQLiteMigrator(conn=self.conn, database=self.database, lock=self.lock, logger=self._logger) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() + def clean(self) -> None: with self.lock: try: - if self.db_path == sqlite_memory: + if self.database == sqlite_memory: return - initial_db_size = Path(self.db_path).stat().st_size + initial_db_size = Path(self.database).stat().st_size self.conn.execute("VACUUM;") self.conn.commit() - final_db_size = Path(self.db_path).stat().st_size + final_db_size = Path(self.database).stat().st_size freed_space_in_mb = round((initial_db_size - final_db_size) / 1024 / 1024, 2) if freed_space_in_mb > 0: self._logger.info(f"Cleaned database (freed {freed_space_in_mb}MB)") diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py new file mode 100644 index 0000000000..a5cf22e3c3 --- /dev/null +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -0,0 +1,210 @@ +import shutil +import sqlite3 +import threading +from datetime import datetime +from logging import Logger +from pathlib import Path +from typing import Callable, Optional, TypeAlias + +from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory + +MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor], None] + + +class MigrationError(Exception): + """Raised when a migration fails.""" + + +class MigrationVersionError(ValueError, MigrationError): + """Raised when a migration version is invalid.""" + + +class Migration: + """Represents a migration for a SQLite database. + + :param db_version: The database schema version this migration results in. + :param app_version: The app version this migration is introduced in. + :param migrate: The callback to run to perform the migration. The callback will be passed a + cursor to the database. The migrator will manage locking database access and committing the + transaction; the callback should not do either of these things. + """ + + def __init__( + self, + db_version: int, + app_version: str, + migrate: MigrateCallback, + ) -> None: + self.db_version = db_version + self.app_version = app_version + self.migrate = migrate + + +class SQLiteMigrator: + """ + Manages migrations for a SQLite database. + + :param conn: The database connection. + :param database: The path to the database file, or ":memory:" for an in-memory database. + :param lock: A lock to use when accessing the database. + :param logger: The logger to use. + + Migrations should be registered with :meth:`register_migration`. Migrations will be run in + order of their version number. If the database is already at the latest version, no migrations + will be run. + """ + + def __init__(self, conn: sqlite3.Connection, database: Path | str, lock: threading.RLock, logger: Logger) -> None: + self._logger = logger + self._conn = conn + self._cursor = self._conn.cursor() + self._lock = lock + self._database = database + self._migrations: set[Migration] = set() + + def register_migration(self, migration: Migration) -> None: + """Registers a migration.""" + if not isinstance(migration.db_version, int) or migration.db_version < 1: + raise MigrationVersionError(f"Invalid migration version {migration.db_version}") + if any(m.db_version == migration.db_version for m in self._migrations): + raise MigrationVersionError(f"Migration version {migration.db_version} already registered") + self._migrations.add(migration) + self._logger.debug(f"Registered migration {migration.db_version}") + + def run_migrations(self) -> None: + """Migrates the database to the latest version.""" + with self._lock: + self._create_version_table() + sorted_migrations = sorted(self._migrations, key=lambda m: m.db_version) + current_version = self._get_current_version() + + if len(sorted_migrations) == 0: + self._logger.debug("No migrations registered") + return + + latest_version = sorted_migrations[-1].db_version + if current_version == latest_version: + self._logger.debug("Database is up to date, no migrations to run") + return + + if current_version > latest_version: + raise MigrationError( + f"Database version {current_version} is greater than the latest migration version {latest_version}" + ) + + self._logger.info("Database update needed") + + # Only make a backup if using a file database (not memory) + backup_path: Optional[Path] = None + if isinstance(self._database, Path): + backup_path = self._backup_db(self._database) + else: + self._logger.info("Using in-memory database, skipping backup") + + for migration in sorted_migrations: + try: + self._run_migration(migration) + except MigrationError: + if backup_path is not None: + self._logger.error(f" Restoring from {backup_path}") + self._restore_db(backup_path) + raise + self._logger.info("Database updated successfully") + + def _run_migration(self, migration: Migration) -> None: + """Runs a single migration.""" + with self._lock: + current_version = self._get_current_version() + try: + if current_version >= migration.db_version: + return + migration.migrate(self._cursor) + # Migration callbacks only get a cursor; they cannot commit the transaction. + self._conn.commit() + self._set_version(db_version=migration.db_version, app_version=migration.app_version) + self._logger.debug(f"Successfully migrated database from {current_version} to {migration.db_version}") + except Exception as e: + msg = f"Error migrating database from {current_version} to {migration.db_version}: {e}" + self._conn.rollback() + self._logger.error(msg) + raise MigrationError(msg) from e + + def _create_version_table(self) -> None: + """Creates a version table for the database, if one does not already exist.""" + with self._lock: + try: + self._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='version';") + if self._cursor.fetchone() is not None: + return + self._cursor.execute( + """--sql + CREATE TABLE IF NOT EXISTS version ( + db_version INTEGER PRIMARY KEY, + app_version TEXT NOT NULL, + migrated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) + ); + """ + ) + self._cursor.execute("INSERT INTO version (db_version, app_version) VALUES (?,?);", (0, "0.0.0")) + self._conn.commit() + self._logger.debug("Created version table") + except sqlite3.Error as e: + msg = f"Problem creation version table: {e}" + self._logger.error(msg) + self._conn.rollback() + raise MigrationError(msg) from e + + def _get_current_version(self) -> int: + """Gets the current version of the database, or 0 if the version table does not exist.""" + with self._lock: + try: + self._cursor.execute("SELECT MAX(db_version) FROM version;") + version = self._cursor.fetchone()[0] + if version is None: + return 0 + return version + except sqlite3.OperationalError as e: + if "no such table" in str(e): + return 0 + raise + + def _set_version(self, db_version: int, app_version: str) -> None: + """Adds a version entry to the table's version table.""" + with self._lock: + try: + self._cursor.execute( + "INSERT INTO version (db_version, app_version) VALUES (?,?);", (db_version, app_version) + ) + self._conn.commit() + except sqlite3.Error as e: + msg = f"Problem setting database version: {e}" + self._logger.error(msg) + self._conn.rollback() + raise MigrationError(msg) from e + + def _backup_db(self, db_path: Path | str) -> Path: + """Backs up the databse, returning the path to the backup file.""" + if db_path == sqlite_memory: + raise MigrationError("Cannot back up memory database") + if not isinstance(db_path, Path): + raise MigrationError(f'Database path must be "{sqlite_memory}" or a Path') + with self._lock: + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + backup_path = db_path.parent / f"{db_path.stem}_{timestamp}.db" + self._logger.info(f"Backing up database to {backup_path}") + backup_conn = sqlite3.connect(backup_path) + with backup_conn: + self._conn.backup(backup_conn) + backup_conn.close() + return backup_path + + def _restore_db(self, backup_path: Path) -> None: + """Restores the database from a backup file, unless the database is a memory database.""" + if self._database == sqlite_memory: + return + with self._lock: + self._logger.info(f"Restoring database from {backup_path}") + self._conn.close() + if not Path(backup_path).is_file(): + raise FileNotFoundError(f"Backup file {backup_path} does not exist") + shutil.copy2(backup_path, self._database) diff --git a/invokeai/app/services/workflow_records/workflow_records_sqlite.py b/invokeai/app/services/workflow_records/workflow_records_sqlite.py index ecbe7c0c9b..ef9e60fb9a 100644 --- a/invokeai/app/services/workflow_records/workflow_records_sqlite.py +++ b/invokeai/app/services/workflow_records/workflow_records_sqlite.py @@ -26,7 +26,6 @@ class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): self._lock = db.lock self._conn = db.conn self._cursor = self._conn.cursor() - self._create_tables() def start(self, invoker: Invoker) -> None: self._invoker = invoker @@ -233,87 +232,3 @@ class SqliteWorkflowRecordsStorage(WorkflowRecordsStorageBase): raise finally: self._lock.release() - - def _create_tables(self) -> None: - try: - self._lock.acquire() - self._cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS workflow_library ( - workflow_id TEXT NOT NULL PRIMARY KEY, - workflow TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated manually when retrieving workflow - opened_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Generated columns, needed for indexing and searching - category TEXT GENERATED ALWAYS as (json_extract(workflow, '$.meta.category')) VIRTUAL NOT NULL, - name TEXT GENERATED ALWAYS as (json_extract(workflow, '$.name')) VIRTUAL NOT NULL, - description TEXT GENERATED ALWAYS as (json_extract(workflow, '$.description')) VIRTUAL NOT NULL - ); - """ - ) - - self._cursor.execute( - """--sql - CREATE TRIGGER IF NOT EXISTS tg_workflow_library_updated_at - AFTER UPDATE - ON workflow_library FOR EACH ROW - BEGIN - UPDATE workflow_library - SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE workflow_id = old.workflow_id; - END; - """ - ) - - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_library_created_at ON workflow_library(created_at); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_library_updated_at ON workflow_library(updated_at); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_library_opened_at ON workflow_library(opened_at); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_library_category ON workflow_library(category); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_library_name ON workflow_library(name); - """ - ) - self._cursor.execute( - """--sql - CREATE INDEX IF NOT EXISTS idx_workflow_library_description ON workflow_library(description); - """ - ) - - # We do not need the original `workflows` table or `workflow_images` junction table. - self._cursor.execute( - """--sql - DROP TABLE IF EXISTS workflow_images; - """ - ) - self._cursor.execute( - """--sql - DROP TABLE IF EXISTS workflows; - """ - ) - - self._conn.commit() - except Exception: - self._conn.rollback() - raise - finally: - self._lock.release() diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py new file mode 100644 index 0000000000..d4da61caa5 --- /dev/null +++ b/tests/test_sqlite_migrator.py @@ -0,0 +1,173 @@ +import sqlite3 +import threading +from copy import deepcopy +from logging import Logger +from pathlib import Path +from tempfile import TemporaryDirectory +from typing import Callable + +import pytest + +from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory +from invokeai.app.services.shared.sqlite.sqlite_migrator import ( + Migration, + MigrationError, + MigrationVersionError, + SQLiteMigrator, +) + + +@pytest.fixture +def migrator() -> SQLiteMigrator: + conn = sqlite3.connect(sqlite_memory, check_same_thread=False) + return SQLiteMigrator( + conn=conn, database=sqlite_memory, lock=threading.RLock(), logger=Logger("test_sqlite_migrator") + ) + + +@pytest.fixture +def good_migration() -> Migration: + return Migration(db_version=1, app_version="1.0.0", migrate=lambda cursor: None) + + +@pytest.fixture +def failing_migration() -> Migration: + def failing_migration(cursor: sqlite3.Cursor) -> None: + raise Exception("Bad migration") + + return Migration(db_version=1, app_version="1.0.0", migrate=failing_migration) + + +def test_register_migration(migrator: SQLiteMigrator, good_migration: Migration): + migration = good_migration + migrator.register_migration(migration) + assert migration in migrator._migrations + with pytest.raises(MigrationError, match="Invalid migration version"): + migrator.register_migration(Migration(db_version=0, app_version="0.0.0", migrate=lambda cursor: None)) + + +def test_register_invalid_migration_version(migrator: SQLiteMigrator): + with pytest.raises(MigrationError, match="Invalid migration version"): + migrator.register_migration(Migration(db_version=0, app_version="0.0.0", migrate=lambda cursor: None)) + + +def test_create_version_table(migrator: SQLiteMigrator): + migrator._create_version_table() + migrator._cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='version';") + assert migrator._cursor.fetchone() is not None + + +def test_get_current_version(migrator: SQLiteMigrator): + migrator._create_version_table() + migrator._conn.commit() + assert migrator._get_current_version() == 0 # initial version + + +def test_set_version(migrator: SQLiteMigrator): + migrator._create_version_table() + migrator._set_version(db_version=1, app_version="1.0.0") + migrator._cursor.execute("SELECT MAX(db_version) FROM version;") + assert migrator._cursor.fetchone()[0] == 1 + migrator._cursor.execute("SELECT app_version from version WHERE db_version = 1;") + assert migrator._cursor.fetchone()[0] == "1.0.0" + + +def test_run_migration(migrator: SQLiteMigrator): + migrator._create_version_table() + + def migration_callback(cursor: sqlite3.Cursor) -> None: + cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") + + migration = Migration(db_version=1, app_version="1.0.0", migrate=migration_callback) + migrator._run_migration(migration) + assert migrator._get_current_version() == 1 + migrator._cursor.execute("SELECT app_version from version WHERE db_version = 1;") + assert migrator._cursor.fetchone()[0] == "1.0.0" + + +def test_run_migrations(migrator: SQLiteMigrator): + migrator._create_version_table() + + def create_migrate(i: int) -> Callable[[sqlite3.Cursor], None]: + def migrate(cursor: sqlite3.Cursor) -> None: + cursor.execute(f"CREATE TABLE test{i} (id INTEGER PRIMARY KEY);") + + return migrate + + migrations = [Migration(db_version=i, app_version=f"{i}.0.0", migrate=create_migrate(i)) for i in range(1, 4)] + for migration in migrations: + migrator.register_migration(migration) + migrator.run_migrations() + assert migrator._get_current_version() == 3 + + +def test_backup_and_restore_db(migrator: SQLiteMigrator): + with TemporaryDirectory() as tempdir: + # must do this with a file database - we don't backup/restore for memory + database = Path(tempdir) / "test.db" + migrator._database = database + migrator._cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") + migrator._conn.commit() + backup_path = migrator._backup_db(migrator._database) + migrator._cursor.execute("DROP TABLE test;") + migrator._conn.commit() + migrator._restore_db(backup_path) # this closes the connection + # reconnect to db + restored_conn = sqlite3.connect(database) + restored_cursor = restored_conn.cursor() + restored_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") + assert restored_cursor.fetchone() is not None + + +def test_no_backup_and_restore_for_memory_db(migrator: SQLiteMigrator): + with pytest.raises(MigrationError, match="Cannot back up memory database"): + migrator._backup_db(sqlite_memory) + + +def test_failed_migration(migrator: SQLiteMigrator, failing_migration: Migration): + migrator._create_version_table() + with pytest.raises(MigrationError, match="Error migrating database from 0 to 1"): + migrator._run_migration(failing_migration) + assert migrator._get_current_version() == 0 + + +def test_duplicate_migration_versions(migrator: SQLiteMigrator, good_migration: Migration): + migrator._create_version_table() + migrator.register_migration(good_migration) + with pytest.raises(MigrationVersionError, match="already registered"): + migrator.register_migration(deepcopy(good_migration)) + + +def test_non_sequential_migration_registration(migrator: SQLiteMigrator): + migrator._create_version_table() + + def create_migrate(i: int) -> Callable[[sqlite3.Cursor], None]: + def migrate(cursor: sqlite3.Cursor) -> None: + cursor.execute(f"CREATE TABLE test{i} (id INTEGER PRIMARY KEY);") + + return migrate + + migrations = [ + Migration(db_version=i, app_version=f"{i}.0.0", migrate=create_migrate(i)) for i in reversed(range(1, 4)) + ] + for migration in migrations: + migrator.register_migration(migration) + migrator.run_migrations() + assert migrator._get_current_version() == 3 + + +def test_db_version_gt_last_migration(migrator: SQLiteMigrator, good_migration: Migration): + migrator._create_version_table() + migrator.register_migration(good_migration) + migrator._set_version(db_version=2, app_version="2.0.0") + with pytest.raises(MigrationError, match="greater than the latest migration version"): + migrator.run_migrations() + assert migrator._get_current_version() == 2 + + +def test_idempotent_migrations(migrator: SQLiteMigrator, good_migration: Migration): + migrator._create_version_table() + migrator.register_migration(good_migration) + migrator.run_migrations() + migrator.run_migrations() + assert migrator._get_current_version() == 1 From 3ba3c1918c7a187ecdd2c0b37c7e78818db9df0a Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 5 Dec 2023 13:40:19 +1100 Subject: [PATCH 103/515] fix(db): remove duplicated test case --- tests/test_sqlite_migrator.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index d4da61caa5..6519913fe6 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -42,8 +42,6 @@ def test_register_migration(migrator: SQLiteMigrator, good_migration: Migration) migration = good_migration migrator.register_migration(migration) assert migration in migrator._migrations - with pytest.raises(MigrationError, match="Invalid migration version"): - migrator.register_migration(Migration(db_version=0, app_version="0.0.0", migrate=lambda cursor: None)) def test_register_invalid_migration_version(migrator: SQLiteMigrator): From 3c692018cdc5b96a8bd7ec8cfd05ae9bebe3e24a Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 5 Dec 2023 13:41:16 +1100 Subject: [PATCH 104/515] fix(db): make idempotency test actually test something --- tests/test_sqlite_migrator.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 6519913fe6..bafebadcbe 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -163,9 +163,16 @@ def test_db_version_gt_last_migration(migrator: SQLiteMigrator, good_migration: assert migrator._get_current_version() == 2 -def test_idempotent_migrations(migrator: SQLiteMigrator, good_migration: Migration): +def test_idempotent_migrations(migrator: SQLiteMigrator): migrator._create_version_table() - migrator.register_migration(good_migration) + + def create_test_table(cursor: sqlite3.Cursor) -> None: + # This SQL throws if run twice + cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") + + migration = Migration(db_version=1, app_version="1.0.0", migrate=create_test_table) + + migrator.register_migration(migration) migrator.run_migrations() + # not throwing is sufficient migrator.run_migrations() - assert migrator._get_current_version() == 1 From abc9dc4d17ed9e0c526738d9c2dbe1912d365d39 Mon Sep 17 00:00:00 2001 From: "psychedelicious@windows" <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 5 Dec 2023 14:44:23 +1100 Subject: [PATCH 105/515] fix(tests): fix sqlite migrator backup and restore test On Windows, we must ensure the connection to the database is closed before exiting the tempfile context. Also, rejiggered the thing to use the file directly. --- tests/test_sqlite_migrator.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index bafebadcbe..83dd3a3b0e 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -99,23 +99,35 @@ def test_run_migrations(migrator: SQLiteMigrator): assert migrator._get_current_version() == 3 -def test_backup_and_restore_db(migrator: SQLiteMigrator): +def test_backup_and_restore_db(): + # must do this with a file database - we don't backup/restore for memory with TemporaryDirectory() as tempdir: - # must do this with a file database - we don't backup/restore for memory + # create test DB w/ some data database = Path(tempdir) / "test.db" - migrator._database = database - migrator._cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") - migrator._conn.commit() + conn = sqlite3.connect(database, check_same_thread=False) + cursor = conn.cursor() + cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") + conn.commit() + + migrator = SQLiteMigrator(conn=conn, database=database, lock=threading.RLock(), logger=Logger("test")) backup_path = migrator._backup_db(migrator._database) + + # mangle the db migrator._cursor.execute("DROP TABLE test;") migrator._conn.commit() - migrator._restore_db(backup_path) # this closes the connection - # reconnect to db + migrator._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") + assert migrator._cursor.fetchone() is None + + # restore (closes the connection - must create a new one) + migrator._restore_db(backup_path) restored_conn = sqlite3.connect(database) restored_cursor = restored_conn.cursor() restored_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") assert restored_cursor.fetchone() is not None + # must manually close else tempfile throws on cleanup on windows + restored_conn.close() + def test_no_backup_and_restore_for_memory_db(migrator: SQLiteMigrator): with pytest.raises(MigrationError, match="Cannot back up memory database"): From a2dc780188d8c2a9fb3c719321cb1cc788bcedac Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 5 Dec 2023 22:53:27 +1100 Subject: [PATCH 106/515] feat: add script to migrate image workflows --- .../backend/util/migrate_image_workflows.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 invokeai/backend/util/migrate_image_workflows.py diff --git a/invokeai/backend/util/migrate_image_workflows.py b/invokeai/backend/util/migrate_image_workflows.py new file mode 100644 index 0000000000..24bd9a1538 --- /dev/null +++ b/invokeai/backend/util/migrate_image_workflows.py @@ -0,0 +1,84 @@ +import sqlite3 +from datetime import datetime +from pathlib import Path + +from PIL import Image +from tqdm import tqdm + +from invokeai.app.services.config.config_default import InvokeAIAppConfig + + +def migrate_image_workflows(output_path: Path, database: Path, page_size=100): + """ + In the v3.5.0 release, InvokeAI changed how it handles image workflows. The `images` table in + the database now has a `has_workflow` column, indicating if an image has a workflow embedded. + + This script checks each image for the presence of an embedded workflow, then updates its entry + in the database accordingly. + + 1) Check if the database is updated to support image workflows. Aborts if it doesn't have the + `has_workflow` column yet. + 2) Backs up the database. + 3) Opens each image in the `images` table via PIL + 4) Checks if the `"invokeai_workflow"` attribute its in the image's embedded metadata, indicating + that it has a workflow. + 5) If it does, updates the `has_workflow` column for that image to `TRUE`. + + If there are any problems, the script immediately aborts. Because the processing happens in chunks, + if there is a problem, it is suggested that you restore the database from the backup and try again. + """ + output_path = output_path + database = database + conn = sqlite3.connect(database) + cursor = conn.cursor() + + # We can only migrate if the `images` table has the `has_workflow` column + cursor.execute("PRAGMA table_info(images)") + columns = [column[1] for column in cursor.fetchall()] + if "has_workflow" not in columns: + raise Exception("Database needs to be updated to support image workflows") + + # Back up the database before we start + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + backup_path = database.parent / f"{database.stem}_migrate-image-workflows_{timestamp}.db" + print(f"Backing up database to {backup_path}") + backup_conn = sqlite3.connect(backup_path) + with backup_conn: + conn.backup(backup_conn) + backup_conn.close() + + # Get the total number of images and chunk it into pages + cursor.execute("SELECT COUNT(*) FROM images") + total_images = cursor.fetchone()[0] + total_pages = (total_images + page_size - 1) // page_size + print(f"Processing {total_images} images in chunks of {page_size} images...") + + # Migrate the images + migrated_count = 0 + pbar = tqdm(range(total_pages)) + for page in pbar: + pbar.set_description(f"Migrating page {page + 1}/{total_pages}") + offset = page * page_size + cursor.execute("SELECT image_name FROM images LIMIT ? OFFSET ?", (page_size, offset)) + images = cursor.fetchall() + for image_name in images: + image_path = output_path / "images" / image_name[0] + with Image.open(image_path) as img: + if "invokeai_workflow" in img.info: + cursor.execute("UPDATE images SET has_workflow = TRUE WHERE image_name = ?", (image_name[0],)) + migrated_count += 1 + conn.commit() + conn.close() + + print(f"Migrated workflows for {migrated_count} images.") + + +if __name__ == "__main__": + config = InvokeAIAppConfig.get_config() + output_path = config.output_path + database = config.db_path + + assert output_path is not None + assert output_path.exists() + assert database.exists() + migrate_image_workflows(output_path=output_path, database=database, page_size=100) From c382329e8ce8813ed5a8d6c6a83b7b611f99b8b5 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 15:26:38 +1100 Subject: [PATCH 107/515] feat(db): move migrator out of SqliteDatabase --- invokeai/app/api/dependencies.py | 7 +++++++ invokeai/app/services/shared/sqlite/sqlite_database.py | 8 -------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 803e988e52..0bd52d0dcc 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -2,6 +2,9 @@ from logging import Logger +from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 +from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger from invokeai.version.invokeai_version import __version__ @@ -69,6 +72,10 @@ class ApiDependencies: output_folder = config.output_path db = SqliteDatabase(config, logger) + migrator = SQLiteMigrator(conn=db.conn, database=db.database, lock=db.lock, logger=logger) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() configuration = config logger = logger diff --git a/invokeai/app/services/shared/sqlite/sqlite_database.py b/invokeai/app/services/shared/sqlite/sqlite_database.py index 5cc9b66b3b..8fae67e952 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_database.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -4,10 +4,7 @@ from logging import Logger from pathlib import Path from invokeai.app.services.config import InvokeAIAppConfig -from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory -from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator class SqliteDatabase: @@ -33,11 +30,6 @@ class SqliteDatabase: self.conn.execute("PRAGMA foreign_keys = ON;") - migrator = SQLiteMigrator(conn=self.conn, database=self.database, lock=self.lock, logger=self._logger) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() - def clean(self) -> None: with self.lock: try: From 0710ec30cfc60c54dd79b014086be012afa9c16c Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 19:51:45 +1100 Subject: [PATCH 108/515] feat(db): incorporate feedback --- invokeai/app/api/dependencies.py | 4 +- .../shared/sqlite/migrations/migration_1.py | 11 +- .../shared/sqlite/migrations/migration_2.py | 81 ++++-- .../services/shared/sqlite/sqlite_database.py | 4 +- .../services/shared/sqlite/sqlite_migrator.py | 260 ++++++++++-------- .../backend/util/migrate_image_workflows.py | 84 ------ 6 files changed, 229 insertions(+), 215 deletions(-) delete mode 100644 invokeai/backend/util/migrate_image_workflows.py diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 0bd52d0dcc..6b3e2d6226 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -70,9 +70,10 @@ class ApiDependencies: logger.debug(f"Internet connectivity is {config.internet_available}") output_folder = config.output_path + image_files = DiskImageFileStorage(f"{output_folder}/images") db = SqliteDatabase(config, logger) - migrator = SQLiteMigrator(conn=db.conn, database=db.database, lock=db.lock, logger=logger) + migrator = SQLiteMigrator(db=db, image_files=image_files) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() @@ -87,7 +88,6 @@ class ApiDependencies: events = FastAPIEventService(event_handler_id) graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") graph_library = SqliteItemStorage[LibraryGraph](db=db, table_name="graphs") - image_files = DiskImageFileStorage(f"{output_folder}/images") image_records = SqliteImageRecordStorage(db=db) images = ImageService() invocation_cache = MemoryInvocationCache(max_cache_size=config.node_cache_size) diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_1.py b/invokeai/app/services/shared/sqlite/migrations/migration_1.py index 52d10e095d..f9be92badc 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_1.py @@ -1,11 +1,14 @@ import sqlite3 +from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration -def _migrate(cursor: sqlite3.Cursor) -> None: +def _migrate(db: SqliteDatabase, image_files: ImageFileStorageBase) -> None: """Migration callback for database version 1.""" + cursor = db.conn.cursor() _create_board_images(cursor) _create_boards(cursor) _create_images(cursor) @@ -350,7 +353,11 @@ def _create_workflows(cursor: sqlite3.Cursor) -> None: cursor.execute(stmt) -migration_1 = Migration(db_version=1, app_version="3.4.0", migrate=_migrate) +migration_1 = Migration( + from_version=0, + to_version=1, + migrate=_migrate, +) """ Database version 1 (initial state). diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2.py b/invokeai/app/services/shared/sqlite/migrations/migration_2.py index da9d670917..b6a697844b 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_2.py @@ -1,39 +1,55 @@ import sqlite3 +from logging import Logger +from tqdm import tqdm + +from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration -def _migrate(cursor: sqlite3.Cursor) -> None: +def _migrate(db: SqliteDatabase, image_files: ImageFileStorageBase) -> None: """Migration callback for database version 2.""" + cursor = db.conn.cursor() _add_images_has_workflow(cursor) _add_session_queue_workflow(cursor) _drop_old_workflow_tables(cursor) _add_workflow_library(cursor) _drop_model_manager_metadata(cursor) + _migrate_embedded_workflows(cursor=cursor, image_files=image_files, logger=db._logger) def _add_images_has_workflow(cursor: sqlite3.Cursor) -> None: """Add the `has_workflow` column to `images` table.""" - cursor.execute("ALTER TABLE images ADD COLUMN has_workflow BOOLEAN DEFAULT FALSE;") + cursor.execute("PRAGMA table_info(images)") + columns = [column[1] for column in cursor.fetchall()] + + if "has_workflow" not in columns: + cursor.execute("ALTER TABLE images ADD COLUMN has_workflow BOOLEAN DEFAULT FALSE;") def _add_session_queue_workflow(cursor: sqlite3.Cursor) -> None: """Add the `workflow` column to `session_queue` table.""" - cursor.execute("ALTER TABLE session_queue ADD COLUMN workflow TEXT;") + + cursor.execute("PRAGMA table_info(session_queue)") + columns = [column[1] for column in cursor.fetchall()] + + if "workflow" not in columns: + cursor.execute("ALTER TABLE session_queue ADD COLUMN workflow TEXT;") def _drop_old_workflow_tables(cursor: sqlite3.Cursor) -> None: """Drops the `workflows` and `workflow_images` tables.""" - cursor.execute("DROP TABLE workflow_images;") - cursor.execute("DROP TABLE workflows;") + cursor.execute("DROP TABLE IF EXISTS workflow_images;") + cursor.execute("DROP TABLE IF EXISTS workflows;") def _add_workflow_library(cursor: sqlite3.Cursor) -> None: """Adds the `workflow_library` table and drops the `workflows` and `workflow_images` tables.""" tables = [ """--sql - CREATE TABLE workflow_library ( + CREATE TABLE IF NOT EXISTS workflow_library ( workflow_id TEXT NOT NULL PRIMARY KEY, workflow TEXT NOT NULL, created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), @@ -50,17 +66,17 @@ def _add_workflow_library(cursor: sqlite3.Cursor) -> None: ] indices = [ - "CREATE INDEX idx_workflow_library_created_at ON workflow_library(created_at);", - "CREATE INDEX idx_workflow_library_updated_at ON workflow_library(updated_at);", - "CREATE INDEX idx_workflow_library_opened_at ON workflow_library(opened_at);", - "CREATE INDEX idx_workflow_library_category ON workflow_library(category);", - "CREATE INDEX idx_workflow_library_name ON workflow_library(name);", - "CREATE INDEX idx_workflow_library_description ON workflow_library(description);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_created_at ON workflow_library(created_at);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_updated_at ON workflow_library(updated_at);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_opened_at ON workflow_library(opened_at);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_category ON workflow_library(category);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_name ON workflow_library(name);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_description ON workflow_library(description);", ] triggers = [ """--sql - CREATE TRIGGER tg_workflow_library_updated_at + CREATE TRIGGER IF NOT EXISTS tg_workflow_library_updated_at AFTER UPDATE ON workflow_library FOR EACH ROW BEGIN @@ -77,12 +93,43 @@ def _add_workflow_library(cursor: sqlite3.Cursor) -> None: def _drop_model_manager_metadata(cursor: sqlite3.Cursor) -> None: """Drops the `model_manager_metadata` table.""" - cursor.execute("DROP TABLE model_manager_metadata;") + cursor.execute("DROP TABLE IF EXISTS model_manager_metadata;") + + +def _migrate_embedded_workflows(cursor: sqlite3.Cursor, image_files: ImageFileStorageBase, logger: Logger) -> None: + """ + In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in + the database now has a `has_workflow` column, indicating if an image has a workflow embedded. + + This migrate callbakc checks each image for the presence of an embedded workflow, then updates its entry + in the database accordingly. + """ + # Get the total number of images and chunk it into pages + cursor.execute("SELECT image_name FROM images") + image_names: list[str] = [image[0] for image in cursor.fetchall()] + total_image_names = len(image_names) + + if not total_image_names: + return + + logger.info(f"Migrating workflows for {total_image_names} images") + + # Migrate the images + to_migrate: list[tuple[bool, str]] = [] + pbar = tqdm(image_names) + for idx, image_name in enumerate(pbar): + pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") + pil_image = image_files.get(image_name) + if "invokeai_workflow" in pil_image.info: + to_migrate.append((True, image_name)) + + logger.info(f"Adding {len(to_migrate)} embedded workflows to database") + cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) migration_2 = Migration( - db_version=2, - app_version="3.5.0", + from_version=1, + to_version=2, migrate=_migrate, ) """ @@ -90,8 +137,10 @@ Database version 2. Introduced in v3.5.0 for the new workflow library. +Migration: - Add `has_workflow` column to `images` table - Add `workflow` column to `session_queue` table - Drop `workflows` and `workflow_images` tables - Add `workflow_library` table +- Updates `has_workflow` for all images """ diff --git a/invokeai/app/services/shared/sqlite/sqlite_database.py b/invokeai/app/services/shared/sqlite/sqlite_database.py index 8fae67e952..4c9ba4f366 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_database.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -8,13 +8,15 @@ from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory class SqliteDatabase: - database: Path | str + database: Path | str # Must declare this here to satisfy type checker def __init__(self, config: InvokeAIAppConfig, logger: Logger): self._logger = logger self._config = config + self.is_memory = False if self._config.use_memory_db: self.database = sqlite_memory + self.is_memory = True logger.info("Using in-memory database") else: self.database = self._config.db_path diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index a5cf22e3c3..b8a7941a95 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -1,14 +1,15 @@ import shutil import sqlite3 -import threading from datetime import datetime -from logging import Logger from pathlib import Path from typing import Callable, Optional, TypeAlias -from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory +from pydantic import BaseModel, Field, model_validator -MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor], None] +from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase + +MigrateCallback: TypeAlias = Callable[[SqliteDatabase, ImageFileStorageBase], None] class MigrationError(Exception): @@ -19,146 +20,186 @@ class MigrationVersionError(ValueError, MigrationError): """Raised when a migration version is invalid.""" -class Migration: - """Represents a migration for a SQLite database. +class Migration(BaseModel): + """ + Represents a migration for a SQLite database. - :param db_version: The database schema version this migration results in. - :param app_version: The app version this migration is introduced in. - :param migrate: The callback to run to perform the migration. The callback will be passed a - cursor to the database. The migrator will manage locking database access and committing the - transaction; the callback should not do either of these things. + Migration callbacks will be provided an instance of SqliteDatabase. + Migration callbacks should not commit; the migrator will commit the transaction. """ - def __init__( - self, - db_version: int, - app_version: str, - migrate: MigrateCallback, - ) -> None: - self.db_version = db_version - self.app_version = app_version - self.migrate = migrate + from_version: int = Field(ge=0, strict=True, description="The database version on which this migration may be run") + to_version: int = Field(ge=1, strict=True, description="The database version that results from this migration") + migrate: MigrateCallback = Field(description="The callback to run to perform the migration") + pre_migrate: list[MigrateCallback] = Field( + default=[], description="A list of callbacks to run before the migration" + ) + post_migrate: list[MigrateCallback] = Field( + default=[], description="A list of callbacks to run after the migration" + ) + + @model_validator(mode="after") + def validate_to_version(self) -> "Migration": + if self.to_version <= self.from_version: + raise ValueError("to_version must be greater than from_version") + return self + + def __hash__(self) -> int: + # Callables are not hashable, so we need to implement our own __hash__ function to use this class in a set. + return hash((self.from_version, self.to_version)) + + +class MigrationSet: + """A set of Migrations. Performs validation during migration registration and provides utility methods.""" + + def __init__(self) -> None: + self._migrations: set[Migration] = set() + + def register(self, migration: Migration) -> None: + """Registers a migration.""" + if any(m.from_version == migration.from_version for m in self._migrations): + raise MigrationVersionError(f"Migration from {migration.from_version} already registered") + if any(m.to_version == migration.to_version for m in self._migrations): + raise MigrationVersionError(f"Migration to {migration.to_version} already registered") + self._migrations.add(migration) + + def get(self, from_version: int) -> Optional[Migration]: + """Gets the migration that may be run on the given database version.""" + # register() ensures that there is only one migration with a given from_version, so this is safe. + return next((m for m in self._migrations if m.from_version == from_version), None) + + @property + def count(self) -> int: + """The count of registered migrations.""" + return len(self._migrations) + + @property + def latest_version(self) -> int: + """Gets latest to_version among registered migrations. Returns 0 if there are no migrations registered.""" + if self.count == 0: + return 0 + return sorted(self._migrations, key=lambda m: m.to_version)[-1].to_version class SQLiteMigrator: """ Manages migrations for a SQLite database. - :param conn: The database connection. - :param database: The path to the database file, or ":memory:" for an in-memory database. - :param lock: A lock to use when accessing the database. - :param logger: The logger to use. + :param db: The SqliteDatabase, representing the database on which to run migrations. + :param image_files: An instance of ImageFileStorageBase. Migrations may need to access image files. Migrations should be registered with :meth:`register_migration`. Migrations will be run in order of their version number. If the database is already at the latest version, no migrations will be run. """ - def __init__(self, conn: sqlite3.Connection, database: Path | str, lock: threading.RLock, logger: Logger) -> None: - self._logger = logger - self._conn = conn - self._cursor = self._conn.cursor() - self._lock = lock - self._database = database - self._migrations: set[Migration] = set() + backup_path: Optional[Path] = None + + def __init__(self, db: SqliteDatabase, image_files: ImageFileStorageBase) -> None: + self._image_files = image_files + self._db = db + self._logger = self._db._logger + self._config = self._db._config + self._cursor = self._db.conn.cursor() + self._migrations = MigrationSet() def register_migration(self, migration: Migration) -> None: - """Registers a migration.""" - if not isinstance(migration.db_version, int) or migration.db_version < 1: - raise MigrationVersionError(f"Invalid migration version {migration.db_version}") - if any(m.db_version == migration.db_version for m in self._migrations): - raise MigrationVersionError(f"Migration version {migration.db_version} already registered") - self._migrations.add(migration) - self._logger.debug(f"Registered migration {migration.db_version}") + """ + Registers a migration. + Migration callbacks should not commit any changes to the database; the migrator will commit the transaction. + """ + self._migrations.register(migration) + self._logger.debug(f"Registered migration {migration.from_version} -> {migration.to_version}") def run_migrations(self) -> None: """Migrates the database to the latest version.""" - with self._lock: + with self._db.lock: self._create_version_table() - sorted_migrations = sorted(self._migrations, key=lambda m: m.db_version) current_version = self._get_current_version() - if len(sorted_migrations) == 0: + if self._migrations.count == 0: self._logger.debug("No migrations registered") return - latest_version = sorted_migrations[-1].db_version + latest_version = self._migrations.latest_version if current_version == latest_version: self._logger.debug("Database is up to date, no migrations to run") return - if current_version > latest_version: - raise MigrationError( - f"Database version {current_version} is greater than the latest migration version {latest_version}" - ) - self._logger.info("Database update needed") # Only make a backup if using a file database (not memory) - backup_path: Optional[Path] = None - if isinstance(self._database, Path): - backup_path = self._backup_db(self._database) - else: - self._logger.info("Using in-memory database, skipping backup") + self._backup_db() - for migration in sorted_migrations: + next_migration = self._migrations.get(from_version=current_version) + while next_migration is not None: try: - self._run_migration(migration) + self._run_migration(next_migration) + next_migration = self._migrations.get(self._get_current_version()) except MigrationError: - if backup_path is not None: - self._logger.error(f" Restoring from {backup_path}") - self._restore_db(backup_path) + self._restore_db() raise self._logger.info("Database updated successfully") def _run_migration(self, migration: Migration) -> None: """Runs a single migration.""" - with self._lock: - current_version = self._get_current_version() + with self._db.lock: try: - if current_version >= migration.db_version: - return - migration.migrate(self._cursor) + if self._get_current_version() != migration.from_version: + raise MigrationError( + f"Database is at version {self._get_current_version()}, expected {migration.from_version}" + ) + self._logger.debug(f"Running migration from {migration.from_version} to {migration.to_version}") + if migration.pre_migrate: + self._logger.debug(f"Running {len(migration.pre_migrate)} pre-migration callbacks") + for callback in migration.pre_migrate: + callback(self._db, self._image_files) + migration.migrate(self._db, self._image_files) + self._cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) + if migration.post_migrate: + self._logger.debug(f"Running {len(migration.post_migrate)} post-migration callbacks") + for callback in migration.post_migrate: + callback(self._db, self._image_files) # Migration callbacks only get a cursor; they cannot commit the transaction. - self._conn.commit() - self._set_version(db_version=migration.db_version, app_version=migration.app_version) - self._logger.debug(f"Successfully migrated database from {current_version} to {migration.db_version}") + self._db.conn.commit() + self._logger.debug( + f"Successfully migrated database from {migration.from_version} to {migration.to_version}" + ) except Exception as e: - msg = f"Error migrating database from {current_version} to {migration.db_version}: {e}" - self._conn.rollback() + msg = f"Error migrating database from {migration.from_version} to {migration.to_version}: {e}" + self._db.conn.rollback() self._logger.error(msg) raise MigrationError(msg) from e def _create_version_table(self) -> None: """Creates a version table for the database, if one does not already exist.""" - with self._lock: + with self._db.lock: try: - self._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='version';") + self._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='migrations';") if self._cursor.fetchone() is not None: return self._cursor.execute( """--sql - CREATE TABLE IF NOT EXISTS version ( - db_version INTEGER PRIMARY KEY, - app_version TEXT NOT NULL, + CREATE TABLE migrations ( + version INTEGER PRIMARY KEY, migrated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) ); """ ) - self._cursor.execute("INSERT INTO version (db_version, app_version) VALUES (?,?);", (0, "0.0.0")) - self._conn.commit() - self._logger.debug("Created version table") + self._cursor.execute("INSERT INTO migrations (version) VALUES (0);") + self._db.conn.commit() + self._logger.debug("Created migrations table") except sqlite3.Error as e: - msg = f"Problem creation version table: {e}" + msg = f"Problem creating migrations table: {e}" self._logger.error(msg) - self._conn.rollback() + self._db.conn.rollback() raise MigrationError(msg) from e def _get_current_version(self) -> int: """Gets the current version of the database, or 0 if the version table does not exist.""" - with self._lock: + with self._db.lock: try: - self._cursor.execute("SELECT MAX(db_version) FROM version;") + self._cursor.execute("SELECT MAX(version) FROM migrations;") version = self._cursor.fetchone()[0] if version is None: return 0 @@ -168,43 +209,42 @@ class SQLiteMigrator: return 0 raise - def _set_version(self, db_version: int, app_version: str) -> None: - """Adds a version entry to the table's version table.""" - with self._lock: - try: - self._cursor.execute( - "INSERT INTO version (db_version, app_version) VALUES (?,?);", (db_version, app_version) - ) - self._conn.commit() - except sqlite3.Error as e: - msg = f"Problem setting database version: {e}" - self._logger.error(msg) - self._conn.rollback() - raise MigrationError(msg) from e - - def _backup_db(self, db_path: Path | str) -> Path: + def _backup_db(self) -> None: """Backs up the databse, returning the path to the backup file.""" - if db_path == sqlite_memory: - raise MigrationError("Cannot back up memory database") - if not isinstance(db_path, Path): - raise MigrationError(f'Database path must be "{sqlite_memory}" or a Path') - with self._lock: + if self._db.is_memory: + self._logger.debug("Using memory database, skipping backup") + # Sanity check! + if not isinstance(self._db.database, Path): + raise MigrationError(f"Database path must be a Path, got {self._db.database} ({type(self._db.database)})") + with self._db.lock: timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - backup_path = db_path.parent / f"{db_path.stem}_{timestamp}.db" + backup_path = self._db.database.parent / f"{self._db.database.stem}_{timestamp}.db" self._logger.info(f"Backing up database to {backup_path}") + + # Use SQLite's built in backup capabilities so we don't need to worry about locking and such. backup_conn = sqlite3.connect(backup_path) with backup_conn: - self._conn.backup(backup_conn) + self._db.conn.backup(backup_conn) backup_conn.close() - return backup_path - def _restore_db(self, backup_path: Path) -> None: + # Sanity check! + if not backup_path.is_file(): + raise MigrationError("Unable to back up database") + self.backup_path = backup_path + + def _restore_db( + self, + ) -> None: """Restores the database from a backup file, unless the database is a memory database.""" - if self._database == sqlite_memory: + # We don't need to restore a memory database. + if self._db.is_memory: return - with self._lock: - self._logger.info(f"Restoring database from {backup_path}") - self._conn.close() - if not Path(backup_path).is_file(): - raise FileNotFoundError(f"Backup file {backup_path} does not exist") - shutil.copy2(backup_path, self._database) + + with self._db.lock: + self._logger.info(f"Restoring database from {self.backup_path}") + self._db.conn.close() + if self.backup_path is None: + raise FileNotFoundError("No backup path set") + if not Path(self.backup_path).is_file(): + raise FileNotFoundError(f"Backup file {self.backup_path} does not exist") + shutil.copy2(self.backup_path, self._db.database) diff --git a/invokeai/backend/util/migrate_image_workflows.py b/invokeai/backend/util/migrate_image_workflows.py deleted file mode 100644 index 24bd9a1538..0000000000 --- a/invokeai/backend/util/migrate_image_workflows.py +++ /dev/null @@ -1,84 +0,0 @@ -import sqlite3 -from datetime import datetime -from pathlib import Path - -from PIL import Image -from tqdm import tqdm - -from invokeai.app.services.config.config_default import InvokeAIAppConfig - - -def migrate_image_workflows(output_path: Path, database: Path, page_size=100): - """ - In the v3.5.0 release, InvokeAI changed how it handles image workflows. The `images` table in - the database now has a `has_workflow` column, indicating if an image has a workflow embedded. - - This script checks each image for the presence of an embedded workflow, then updates its entry - in the database accordingly. - - 1) Check if the database is updated to support image workflows. Aborts if it doesn't have the - `has_workflow` column yet. - 2) Backs up the database. - 3) Opens each image in the `images` table via PIL - 4) Checks if the `"invokeai_workflow"` attribute its in the image's embedded metadata, indicating - that it has a workflow. - 5) If it does, updates the `has_workflow` column for that image to `TRUE`. - - If there are any problems, the script immediately aborts. Because the processing happens in chunks, - if there is a problem, it is suggested that you restore the database from the backup and try again. - """ - output_path = output_path - database = database - conn = sqlite3.connect(database) - cursor = conn.cursor() - - # We can only migrate if the `images` table has the `has_workflow` column - cursor.execute("PRAGMA table_info(images)") - columns = [column[1] for column in cursor.fetchall()] - if "has_workflow" not in columns: - raise Exception("Database needs to be updated to support image workflows") - - # Back up the database before we start - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - backup_path = database.parent / f"{database.stem}_migrate-image-workflows_{timestamp}.db" - print(f"Backing up database to {backup_path}") - backup_conn = sqlite3.connect(backup_path) - with backup_conn: - conn.backup(backup_conn) - backup_conn.close() - - # Get the total number of images and chunk it into pages - cursor.execute("SELECT COUNT(*) FROM images") - total_images = cursor.fetchone()[0] - total_pages = (total_images + page_size - 1) // page_size - print(f"Processing {total_images} images in chunks of {page_size} images...") - - # Migrate the images - migrated_count = 0 - pbar = tqdm(range(total_pages)) - for page in pbar: - pbar.set_description(f"Migrating page {page + 1}/{total_pages}") - offset = page * page_size - cursor.execute("SELECT image_name FROM images LIMIT ? OFFSET ?", (page_size, offset)) - images = cursor.fetchall() - for image_name in images: - image_path = output_path / "images" / image_name[0] - with Image.open(image_path) as img: - if "invokeai_workflow" in img.info: - cursor.execute("UPDATE images SET has_workflow = TRUE WHERE image_name = ?", (image_name[0],)) - migrated_count += 1 - conn.commit() - conn.close() - - print(f"Migrated workflows for {migrated_count} images.") - - -if __name__ == "__main__": - config = InvokeAIAppConfig.get_config() - output_path = config.output_path - database = config.db_path - - assert output_path is not None - assert output_path.exists() - assert database.exists() - migrate_image_workflows(output_path=output_path, database=database, page_size=100) From f8e4b93a743768b2b98db8a90456536c2e6afaa6 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 21:14:05 +1100 Subject: [PATCH 109/515] feat(db): add migration lock file --- .../services/shared/sqlite/sqlite_migrator.py | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index b8a7941a95..9cbdf028d5 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -103,6 +103,14 @@ class SQLiteMigrator: self._cursor = self._db.conn.cursor() self._migrations = MigrationSet() + # Use a lock file to indicate that a migration is in progress. Should only exist in the event of catastrophic failure. + self._migration_lock_file_path = ( + self._db.database.parent / ".migration_in_progress" if isinstance(self._db.database, Path) else None + ) + + if self._unlink_lock_file(): + self._logger.warning("Previous migration failed! Trying again...") + def register_migration(self, migration: Migration) -> None: """ Registers a migration. @@ -214,8 +222,7 @@ class SQLiteMigrator: if self._db.is_memory: self._logger.debug("Using memory database, skipping backup") # Sanity check! - if not isinstance(self._db.database, Path): - raise MigrationError(f"Database path must be a Path, got {self._db.database} ({type(self._db.database)})") + assert isinstance(self._db.database, Path) with self._db.lock: timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") backup_path = self._db.database.parent / f"{self._db.database.stem}_{timestamp}.db" @@ -236,15 +243,28 @@ class SQLiteMigrator: self, ) -> None: """Restores the database from a backup file, unless the database is a memory database.""" - # We don't need to restore a memory database. if self._db.is_memory: return with self._db.lock: self._logger.info(f"Restoring database from {self.backup_path}") self._db.conn.close() - if self.backup_path is None: - raise FileNotFoundError("No backup path set") - if not Path(self.backup_path).is_file(): - raise FileNotFoundError(f"Backup file {self.backup_path} does not exist") + assert isinstance(self.backup_path, Path) shutil.copy2(self.backup_path, self._db.database) + + def _unlink_lock_file(self) -> bool: + """Unlinks the migration lock file, returning True if it existed.""" + if self._db.is_memory or self._migration_lock_file_path is None: + return False + if self._migration_lock_file_path.is_file(): + self._migration_lock_file_path.unlink() + return True + return False + + def _write_migration_lock_file(self) -> None: + """Writes a file to indicate that a migration is in progress.""" + if self._db.is_memory or self._migration_lock_file_path is None: + return + assert isinstance(self._db.database, Path) + with open(self._migration_lock_file_path, "w") as f: + f.write("1") From 83e820d721f88f8909ae82bb4270b0296fe3e351 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 22:17:03 +1100 Subject: [PATCH 110/515] feat(db): decouple from SqliteDatabase --- invokeai/app/api/dependencies.py | 2 +- .../shared/sqlite/migrations/migration_1.py | 5 +- .../shared/sqlite/migrations/migration_2.py | 6 +- .../services/shared/sqlite/sqlite_migrator.py | 72 +++++++++++-------- 4 files changed, 46 insertions(+), 39 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 6b3e2d6226..6a6b37378f 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -73,7 +73,7 @@ class ApiDependencies: image_files = DiskImageFileStorage(f"{output_folder}/images") db = SqliteDatabase(config, logger) - migrator = SQLiteMigrator(db=db, image_files=image_files) + migrator = SQLiteMigrator(database=db.database, lock=db.lock, image_files=image_files, logger=logger) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_1.py b/invokeai/app/services/shared/sqlite/migrations/migration_1.py index f9be92badc..0cfe53d651 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_1.py @@ -1,14 +1,13 @@ import sqlite3 +from logging import Logger from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration -def _migrate(db: SqliteDatabase, image_files: ImageFileStorageBase) -> None: +def _migrate(cursor: sqlite3.Cursor, image_files: ImageFileStorageBase, logger: Logger) -> None: """Migration callback for database version 1.""" - cursor = db.conn.cursor() _create_board_images(cursor) _create_boards(cursor) _create_images(cursor) diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2.py b/invokeai/app/services/shared/sqlite/migrations/migration_2.py index b6a697844b..0d3c10a629 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_2.py @@ -4,20 +4,18 @@ from logging import Logger from tqdm import tqdm from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration -def _migrate(db: SqliteDatabase, image_files: ImageFileStorageBase) -> None: +def _migrate(cursor: sqlite3.Cursor, image_files: ImageFileStorageBase, logger: Logger) -> None: """Migration callback for database version 2.""" - cursor = db.conn.cursor() _add_images_has_workflow(cursor) _add_session_queue_workflow(cursor) _drop_old_workflow_tables(cursor) _add_workflow_library(cursor) _drop_model_manager_metadata(cursor) - _migrate_embedded_workflows(cursor=cursor, image_files=image_files, logger=db._logger) + _migrate_embedded_workflows(cursor=cursor, image_files=image_files, logger=logger) def _add_images_has_workflow(cursor: sqlite3.Cursor) -> None: diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 9cbdf028d5..e9895c7de6 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -1,15 +1,17 @@ import shutil import sqlite3 +import threading from datetime import datetime +from logging import Logger from pathlib import Path from typing import Callable, Optional, TypeAlias from pydantic import BaseModel, Field, model_validator from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory -MigrateCallback: TypeAlias = Callable[[SqliteDatabase, ImageFileStorageBase], None] +MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor, ImageFileStorageBase, Logger], None] class MigrationError(Exception): @@ -95,17 +97,25 @@ class SQLiteMigrator: backup_path: Optional[Path] = None - def __init__(self, db: SqliteDatabase, image_files: ImageFileStorageBase) -> None: + def __init__( + self, + database: Path | str, + lock: threading.RLock, + logger: Logger, + image_files: ImageFileStorageBase, + ) -> None: + self._lock = lock + self._database = database + self._is_memory = database == sqlite_memory self._image_files = image_files - self._db = db - self._logger = self._db._logger - self._config = self._db._config - self._cursor = self._db.conn.cursor() + self._logger = logger + self._conn = sqlite3.connect(database) + self._cursor = self._conn.cursor() self._migrations = MigrationSet() # Use a lock file to indicate that a migration is in progress. Should only exist in the event of catastrophic failure. self._migration_lock_file_path = ( - self._db.database.parent / ".migration_in_progress" if isinstance(self._db.database, Path) else None + self._database.parent / ".migration_in_progress" if isinstance(self._database, Path) else None ) if self._unlink_lock_file(): @@ -121,7 +131,7 @@ class SQLiteMigrator: def run_migrations(self) -> None: """Migrates the database to the latest version.""" - with self._db.lock: + with self._lock: self._create_version_table() current_version = self._get_current_version() @@ -151,7 +161,7 @@ class SQLiteMigrator: def _run_migration(self, migration: Migration) -> None: """Runs a single migration.""" - with self._db.lock: + with self._lock: try: if self._get_current_version() != migration.from_version: raise MigrationError( @@ -161,27 +171,27 @@ class SQLiteMigrator: if migration.pre_migrate: self._logger.debug(f"Running {len(migration.pre_migrate)} pre-migration callbacks") for callback in migration.pre_migrate: - callback(self._db, self._image_files) - migration.migrate(self._db, self._image_files) + callback(self._cursor, self._image_files, self._logger) + migration.migrate(self._cursor, self._image_files, self._logger) self._cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) if migration.post_migrate: self._logger.debug(f"Running {len(migration.post_migrate)} post-migration callbacks") for callback in migration.post_migrate: - callback(self._db, self._image_files) + callback(self._cursor, self._image_files, self._logger) # Migration callbacks only get a cursor; they cannot commit the transaction. - self._db.conn.commit() + self._conn.commit() self._logger.debug( f"Successfully migrated database from {migration.from_version} to {migration.to_version}" ) except Exception as e: msg = f"Error migrating database from {migration.from_version} to {migration.to_version}: {e}" - self._db.conn.rollback() + self._conn.rollback() self._logger.error(msg) raise MigrationError(msg) from e def _create_version_table(self) -> None: """Creates a version table for the database, if one does not already exist.""" - with self._db.lock: + with self._lock: try: self._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='migrations';") if self._cursor.fetchone() is not None: @@ -195,17 +205,17 @@ class SQLiteMigrator: """ ) self._cursor.execute("INSERT INTO migrations (version) VALUES (0);") - self._db.conn.commit() + self._conn.commit() self._logger.debug("Created migrations table") except sqlite3.Error as e: msg = f"Problem creating migrations table: {e}" self._logger.error(msg) - self._db.conn.rollback() + self._conn.rollback() raise MigrationError(msg) from e def _get_current_version(self) -> int: """Gets the current version of the database, or 0 if the version table does not exist.""" - with self._db.lock: + with self._lock: try: self._cursor.execute("SELECT MAX(version) FROM migrations;") version = self._cursor.fetchone()[0] @@ -219,19 +229,19 @@ class SQLiteMigrator: def _backup_db(self) -> None: """Backs up the databse, returning the path to the backup file.""" - if self._db.is_memory: + if self._is_memory: self._logger.debug("Using memory database, skipping backup") # Sanity check! - assert isinstance(self._db.database, Path) - with self._db.lock: + assert isinstance(self._database, Path) + with self._lock: timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - backup_path = self._db.database.parent / f"{self._db.database.stem}_{timestamp}.db" + backup_path = self._database.parent / f"{self._database.stem}_{timestamp}.db" self._logger.info(f"Backing up database to {backup_path}") # Use SQLite's built in backup capabilities so we don't need to worry about locking and such. backup_conn = sqlite3.connect(backup_path) with backup_conn: - self._db.conn.backup(backup_conn) + self._conn.backup(backup_conn) backup_conn.close() # Sanity check! @@ -243,18 +253,18 @@ class SQLiteMigrator: self, ) -> None: """Restores the database from a backup file, unless the database is a memory database.""" - if self._db.is_memory: + if self._is_memory: return - with self._db.lock: + with self._lock: self._logger.info(f"Restoring database from {self.backup_path}") - self._db.conn.close() + self._conn.close() assert isinstance(self.backup_path, Path) - shutil.copy2(self.backup_path, self._db.database) + shutil.copy2(self.backup_path, self._database) def _unlink_lock_file(self) -> bool: """Unlinks the migration lock file, returning True if it existed.""" - if self._db.is_memory or self._migration_lock_file_path is None: + if self._is_memory or self._migration_lock_file_path is None: return False if self._migration_lock_file_path.is_file(): self._migration_lock_file_path.unlink() @@ -263,8 +273,8 @@ class SQLiteMigrator: def _write_migration_lock_file(self) -> None: """Writes a file to indicate that a migration is in progress.""" - if self._db.is_memory or self._migration_lock_file_path is None: + if self._is_memory or self._migration_lock_file_path is None: return - assert isinstance(self._db.database, Path) + assert isinstance(self._database, Path) with open(self._migration_lock_file_path, "w") as f: f.write("1") From abeb1bd3b301a1592f6f592bbbdb373501525c37 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 10 Dec 2023 22:29:40 +1100 Subject: [PATCH 111/515] feat(db): reduce power MigrateCallback, only gets cursor use partial to provide extra dependencies for the image workflow migration function --- invokeai/app/api/dependencies.py | 5 ++- .../shared/sqlite/migrations/migration_1.py | 4 +- .../shared/sqlite/migrations/migration_2.py | 39 +----------------- .../sqlite/migrations/migration_2_post.py | 41 +++++++++++++++++++ .../services/shared/sqlite/sqlite_migrator.py | 28 +++++++++---- 5 files changed, 67 insertions(+), 50 deletions(-) create mode 100644 invokeai/app/services/shared/sqlite/migrations/migration_2_post.py diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 6a6b37378f..e71a901abf 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -1,9 +1,11 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) +from functools import partial from logging import Logger from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 +from invokeai.app.services.shared.sqlite.migrations.migration_2_post import migrate_embedded_workflows from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger from invokeai.version.invokeai_version import __version__ @@ -73,7 +75,8 @@ class ApiDependencies: image_files = DiskImageFileStorage(f"{output_folder}/images") db = SqliteDatabase(config, logger) - migrator = SQLiteMigrator(database=db.database, lock=db.lock, image_files=image_files, logger=logger) + migrator = SQLiteMigrator(database=db.database, lock=db.lock, logger=logger) + migration_2.register_post_callback(partial(migrate_embedded_workflows, logger=logger, image_files=image_files)) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_1.py b/invokeai/app/services/shared/sqlite/migrations/migration_1.py index 0cfe53d651..daf65591bf 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_1.py @@ -1,11 +1,9 @@ import sqlite3 -from logging import Logger -from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration -def _migrate(cursor: sqlite3.Cursor, image_files: ImageFileStorageBase, logger: Logger) -> None: +def _migrate(cursor: sqlite3.Cursor) -> None: """Migration callback for database version 1.""" _create_board_images(cursor) diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2.py b/invokeai/app/services/shared/sqlite/migrations/migration_2.py index 0d3c10a629..b14f18843b 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_2.py @@ -1,13 +1,9 @@ import sqlite3 -from logging import Logger -from tqdm import tqdm - -from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration -def _migrate(cursor: sqlite3.Cursor, image_files: ImageFileStorageBase, logger: Logger) -> None: +def _migrate(cursor: sqlite3.Cursor) -> None: """Migration callback for database version 2.""" _add_images_has_workflow(cursor) @@ -15,7 +11,6 @@ def _migrate(cursor: sqlite3.Cursor, image_files: ImageFileStorageBase, logger: _drop_old_workflow_tables(cursor) _add_workflow_library(cursor) _drop_model_manager_metadata(cursor) - _migrate_embedded_workflows(cursor=cursor, image_files=image_files, logger=logger) def _add_images_has_workflow(cursor: sqlite3.Cursor) -> None: @@ -94,37 +89,6 @@ def _drop_model_manager_metadata(cursor: sqlite3.Cursor) -> None: cursor.execute("DROP TABLE IF EXISTS model_manager_metadata;") -def _migrate_embedded_workflows(cursor: sqlite3.Cursor, image_files: ImageFileStorageBase, logger: Logger) -> None: - """ - In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in - the database now has a `has_workflow` column, indicating if an image has a workflow embedded. - - This migrate callbakc checks each image for the presence of an embedded workflow, then updates its entry - in the database accordingly. - """ - # Get the total number of images and chunk it into pages - cursor.execute("SELECT image_name FROM images") - image_names: list[str] = [image[0] for image in cursor.fetchall()] - total_image_names = len(image_names) - - if not total_image_names: - return - - logger.info(f"Migrating workflows for {total_image_names} images") - - # Migrate the images - to_migrate: list[tuple[bool, str]] = [] - pbar = tqdm(image_names) - for idx, image_name in enumerate(pbar): - pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") - pil_image = image_files.get(image_name) - if "invokeai_workflow" in pil_image.info: - to_migrate.append((True, image_name)) - - logger.info(f"Adding {len(to_migrate)} embedded workflows to database") - cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) - - migration_2 = Migration( from_version=1, to_version=2, @@ -140,5 +104,4 @@ Migration: - Add `workflow` column to `session_queue` table - Drop `workflows` and `workflow_images` tables - Add `workflow_library` table -- Updates `has_workflow` for all images """ diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2_post.py b/invokeai/app/services/shared/sqlite/migrations/migration_2_post.py new file mode 100644 index 0000000000..fa0d874a5c --- /dev/null +++ b/invokeai/app/services/shared/sqlite/migrations/migration_2_post.py @@ -0,0 +1,41 @@ +import sqlite3 +from logging import Logger + +from tqdm import tqdm + +from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase + + +def migrate_embedded_workflows( + cursor: sqlite3.Cursor, + logger: Logger, + image_files: ImageFileStorageBase, +) -> None: + """ + In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in + the database now has a `has_workflow` column, indicating if an image has a workflow embedded. + + This migrate callbakc checks each image for the presence of an embedded workflow, then updates its entry + in the database accordingly. + """ + # Get the total number of images and chunk it into pages + cursor.execute("SELECT image_name FROM images") + image_names: list[str] = [image[0] for image in cursor.fetchall()] + total_image_names = len(image_names) + + if not total_image_names: + return + + logger.info(f"Migrating workflows for {total_image_names} images") + + # Migrate the images + to_migrate: list[tuple[bool, str]] = [] + pbar = tqdm(image_names) + for idx, image_name in enumerate(pbar): + pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") + pil_image = image_files.get(image_name) + if "invokeai_workflow" in pil_image.info: + to_migrate.append((True, image_name)) + + logger.info(f"Adding {len(to_migrate)} embedded workflows to database") + cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index e9895c7de6..2e7f1059d2 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -8,10 +8,9 @@ from typing import Callable, Optional, TypeAlias from pydantic import BaseModel, Field, model_validator -from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory -MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor, ImageFileStorageBase, Logger], None] +MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor], None] class MigrationError(Exception): @@ -50,6 +49,14 @@ class Migration(BaseModel): # Callables are not hashable, so we need to implement our own __hash__ function to use this class in a set. return hash((self.from_version, self.to_version)) + def register_pre_callback(self, callback: MigrateCallback) -> None: + """Registers a pre-migration callback.""" + self.pre_migrate.append(callback) + + def register_post_callback(self, callback: MigrateCallback) -> None: + """Registers a post-migration callback.""" + self.post_migrate.append(callback) + class MigrationSet: """A set of Migrations. Performs validation during migration registration and provides utility methods.""" @@ -102,12 +109,10 @@ class SQLiteMigrator: database: Path | str, lock: threading.RLock, logger: Logger, - image_files: ImageFileStorageBase, ) -> None: self._lock = lock self._database = database self._is_memory = database == sqlite_memory - self._image_files = image_files self._logger = logger self._conn = sqlite3.connect(database) self._cursor = self._conn.cursor() @@ -168,17 +173,24 @@ class SQLiteMigrator: f"Database is at version {self._get_current_version()}, expected {migration.from_version}" ) self._logger.debug(f"Running migration from {migration.from_version} to {migration.to_version}") + + # Run pre-migration callbacks if migration.pre_migrate: self._logger.debug(f"Running {len(migration.pre_migrate)} pre-migration callbacks") for callback in migration.pre_migrate: - callback(self._cursor, self._image_files, self._logger) - migration.migrate(self._cursor, self._image_files, self._logger) + callback(self._cursor) + + # Run the actual migration + migration.migrate(self._cursor) self._cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) + + # Run post-migration callbacks if migration.post_migrate: self._logger.debug(f"Running {len(migration.post_migrate)} post-migration callbacks") for callback in migration.post_migrate: - callback(self._cursor, self._image_files, self._logger) - # Migration callbacks only get a cursor; they cannot commit the transaction. + callback(self._cursor) + + # Migration callbacks only get a cursor. Commit this migration. self._conn.commit() self._logger.debug( f"Successfully migrated database from {migration.from_version} to {migration.to_version}" From e461f9925ee19f11caa7f2d5069154d8b186e102 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 00:47:53 +1100 Subject: [PATCH 112/515] feat(db): invert backup/restore logic Do the migration on a temp copy of the db, then back up the original and move the temp into its file. --- invokeai/app/api/dependencies.py | 13 +- .../shared/sqlite/migrations/migration_1.py | 2 + .../shared/sqlite/migrations/migration_2.py | 2 + .../services/shared/sqlite/sqlite_database.py | 16 +- .../services/shared/sqlite/sqlite_migrator.py | 234 ++++++++++-------- tests/test_sqlite_migrator.py | 26 +- 6 files changed, 167 insertions(+), 126 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index e71a901abf..2ab676d391 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -2,6 +2,7 @@ from functools import partial from logging import Logger +from pathlib import Path from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 @@ -75,12 +76,22 @@ class ApiDependencies: image_files = DiskImageFileStorage(f"{output_folder}/images") db = SqliteDatabase(config, logger) - migrator = SQLiteMigrator(database=db.database, lock=db.lock, logger=logger) + + migrator = SQLiteMigrator( + db_path=db.database if isinstance(db.database, Path) else None, + conn=db.conn, + lock=db.lock, + logger=logger, + log_sql=config.log_sql, + ) migration_2.register_post_callback(partial(migrate_embedded_workflows, logger=logger, image_files=image_files)) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() + if not db.is_memory: + db.reinitialize() + configuration = config logger = logger diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_1.py b/invokeai/app/services/shared/sqlite/migrations/migration_1.py index daf65591bf..83a76fcea8 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_1.py @@ -6,6 +6,8 @@ from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration def _migrate(cursor: sqlite3.Cursor) -> None: """Migration callback for database version 1.""" + print("migration 1!!!") + _create_board_images(cursor) _create_boards(cursor) _create_images(cursor) diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2.py b/invokeai/app/services/shared/sqlite/migrations/migration_2.py index b14f18843b..dd4fc1a9e3 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_2.py @@ -6,6 +6,8 @@ from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration def _migrate(cursor: sqlite3.Cursor) -> None: """Migration callback for database version 2.""" + print("migration 2!!!") + _add_images_has_workflow(cursor) _add_session_queue_workflow(cursor) _drop_old_workflow_tables(cursor) diff --git a/invokeai/app/services/shared/sqlite/sqlite_database.py b/invokeai/app/services/shared/sqlite/sqlite_database.py index 4c9ba4f366..017cea0fe1 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_database.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -10,18 +10,21 @@ from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory class SqliteDatabase: database: Path | str # Must declare this here to satisfy type checker - def __init__(self, config: InvokeAIAppConfig, logger: Logger): + def __init__(self, config: InvokeAIAppConfig, logger: Logger) -> None: + self.initialize(config, logger) + + def initialize(self, config: InvokeAIAppConfig, logger: Logger) -> None: self._logger = logger self._config = config self.is_memory = False if self._config.use_memory_db: self.database = sqlite_memory self.is_memory = True - logger.info("Using in-memory database") + logger.info("Initializing in-memory database") else: self.database = self._config.db_path self.database.parent.mkdir(parents=True, exist_ok=True) - self._logger.info(f"Using database at {self.database}") + self._logger.info(f"Initializing database at {self.database}") self.conn = sqlite3.connect(database=self.database, check_same_thread=False) self.lock = threading.RLock() @@ -32,6 +35,13 @@ class SqliteDatabase: self.conn.execute("PRAGMA foreign_keys = ON;") + def reinitialize(self) -> None: + """Reinitializes the database. Needed after migration.""" + self.initialize(self._config, self._logger) + + def close(self) -> None: + self.conn.close() + def clean(self) -> None: with self.lock: try: diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 2e7f1059d2..b11f997648 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -8,16 +8,14 @@ from typing import Callable, Optional, TypeAlias from pydantic import BaseModel, Field, model_validator -from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory - MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor], None] -class MigrationError(Exception): +class MigrationError(RuntimeError): """Raised when a migration fails.""" -class MigrationVersionError(ValueError, MigrationError): +class MigrationVersionError(ValueError): """Raised when a migration version is invalid.""" @@ -25,8 +23,14 @@ class Migration(BaseModel): """ Represents a migration for a SQLite database. - Migration callbacks will be provided an instance of SqliteDatabase. - Migration callbacks should not commit; the migrator will commit the transaction. + Migration callbacks will be provided an open cursor to the database. They should not commit their + transaction; this is handled by the migrator. + + Pre- and post-migration callback may be registered with :meth:`register_pre_callback` or + :meth:`register_post_callback`. + + If a migration has additional dependencies, it is recommended to use functools.partial to provide + the dependencies and register the partial as the migration callback. """ from_version: int = Field(ge=0, strict=True, description="The database version on which this migration may be run") @@ -77,6 +81,28 @@ class MigrationSet: # register() ensures that there is only one migration with a given from_version, so this is safe. return next((m for m in self._migrations if m.from_version == from_version), None) + def validate_migration_path(self) -> None: + """ + Validates that the migrations form a single path of migrations from version 0 to the latest version. + Raises a MigrationError if there is a problem. + """ + if self.count == 0: + return + if self.latest_version == 0: + return + current_version = 0 + touched_count = 0 + while current_version < self.latest_version: + migration = self.get(current_version) + if migration is None: + raise MigrationError(f"Missing migration from {current_version}") + current_version = migration.to_version + touched_count += 1 + if current_version != self.latest_version: + raise MigrationError(f"Missing migration to {self.latest_version}") + if touched_count != self.count: + raise MigrationError("Migration path is not contiguous") + @property def count(self) -> int: """The count of registered migrations.""" @@ -90,87 +116,112 @@ class MigrationSet: return sorted(self._migrations, key=lambda m: m.to_version)[-1].to_version +def get_temp_db_path(original_db_path: Path) -> Path: + """Gets the path to the migrated database.""" + return original_db_path.parent / original_db_path.name.replace(".db", ".db.temp") + + class SQLiteMigrator: """ Manages migrations for a SQLite database. - :param db: The SqliteDatabase, representing the database on which to run migrations. - :param image_files: An instance of ImageFileStorageBase. Migrations may need to access image files. + :param db_path: The path to the database to migrate, or None if using an in-memory database. + :param conn: The connection to the database. + :param lock: A lock to use when running migrations. + :param logger: A logger to use for logging. + :param log_sql: Whether to log SQL statements. Only used when the log level is set to debug. - Migrations should be registered with :meth:`register_migration`. Migrations will be run in - order of their version number. If the database is already at the latest version, no migrations - will be run. + Migrations should be registered with :meth:`register_migration`. + + During migration, a copy of the current database is made and the migrations are run on the copy. If the migration + is successful, the original database is backed up and the migrated database is moved to the original database's + path. If the migration fails, the original database is left untouched and the migrated database is deleted. + + If the database is in-memory, no backup is made; the migration is run in-place. """ backup_path: Optional[Path] = None def __init__( self, - database: Path | str, + db_path: Path | None, + conn: sqlite3.Connection, lock: threading.RLock, logger: Logger, + log_sql: bool = False, ) -> None: self._lock = lock - self._database = database - self._is_memory = database == sqlite_memory + self._db_path = db_path self._logger = logger - self._conn = sqlite3.connect(database) + self._conn = conn + self._log_sql = log_sql self._cursor = self._conn.cursor() self._migrations = MigrationSet() - # Use a lock file to indicate that a migration is in progress. Should only exist in the event of catastrophic failure. - self._migration_lock_file_path = ( - self._database.parent / ".migration_in_progress" if isinstance(self._database, Path) else None - ) - - if self._unlink_lock_file(): + # The presence of an temp database file indicates a catastrophic failure of a previous migration. + if self._db_path and get_temp_db_path(self._db_path).is_file(): self._logger.warning("Previous migration failed! Trying again...") + get_temp_db_path(self._db_path).unlink() def register_migration(self, migration: Migration) -> None: - """ - Registers a migration. - Migration callbacks should not commit any changes to the database; the migrator will commit the transaction. - """ + """Registers a migration.""" self._migrations.register(migration) self._logger.debug(f"Registered migration {migration.from_version} -> {migration.to_version}") def run_migrations(self) -> None: """Migrates the database to the latest version.""" with self._lock: - self._create_version_table() - current_version = self._get_current_version() + # This throws if there is a problem. + self._migrations.validate_migration_path() + self._create_migrations_table(cursor=self._cursor) if self._migrations.count == 0: self._logger.debug("No migrations registered") return - latest_version = self._migrations.latest_version - if current_version == latest_version: + if self._get_current_version(self._cursor) == self._migrations.latest_version: self._logger.debug("Database is up to date, no migrations to run") return self._logger.info("Database update needed") - # Only make a backup if using a file database (not memory) - self._backup_db() + if self._db_path: + # We are using a file database. Create a copy of the database to run the migrations on. + temp_db_path = self._create_temp_db(self._db_path) + temp_db_conn = sqlite3.connect(temp_db_path) + # We have to re-set this because we just created a new connection. + if self._log_sql: + temp_db_conn.set_trace_callback(self._logger.debug) + temp_db_cursor = temp_db_conn.cursor() + self._run_migrations(temp_db_cursor) + # Close the connections, copy the original database as a backup, and move the temp database to the + # original database's path. + self._finalize_migration( + temp_db_conn=temp_db_conn, + temp_db_path=temp_db_path, + original_db_path=self._db_path, + ) + else: + # We are using a memory database. No special backup or special handling needed. + self._run_migrations(self._cursor) + return - next_migration = self._migrations.get(from_version=current_version) - while next_migration is not None: - try: - self._run_migration(next_migration) - next_migration = self._migrations.get(self._get_current_version()) - except MigrationError: - self._restore_db() - raise self._logger.info("Database updated successfully") + return - def _run_migration(self, migration: Migration) -> None: + def _run_migrations(self, temp_db_cursor: sqlite3.Cursor) -> None: + next_migration = self._migrations.get(from_version=self._get_current_version(temp_db_cursor)) + while next_migration is not None: + self._run_migration(next_migration, temp_db_cursor) + next_migration = self._migrations.get(self._get_current_version(temp_db_cursor)) + + def _run_migration(self, migration: Migration, temp_db_cursor: sqlite3.Cursor) -> None: """Runs a single migration.""" with self._lock: try: - if self._get_current_version() != migration.from_version: + if self._get_current_version(temp_db_cursor) != migration.from_version: raise MigrationError( - f"Database is at version {self._get_current_version()}, expected {migration.from_version}" + f"Database is at version {self._get_current_version(temp_db_cursor)}, expected {migration.from_version}" ) self._logger.debug(f"Running migration from {migration.from_version} to {migration.to_version}") @@ -178,37 +229,37 @@ class SQLiteMigrator: if migration.pre_migrate: self._logger.debug(f"Running {len(migration.pre_migrate)} pre-migration callbacks") for callback in migration.pre_migrate: - callback(self._cursor) + callback(temp_db_cursor) # Run the actual migration - migration.migrate(self._cursor) - self._cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) + migration.migrate(temp_db_cursor) + temp_db_cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) # Run post-migration callbacks if migration.post_migrate: self._logger.debug(f"Running {len(migration.post_migrate)} post-migration callbacks") for callback in migration.post_migrate: - callback(self._cursor) + callback(temp_db_cursor) # Migration callbacks only get a cursor. Commit this migration. - self._conn.commit() + temp_db_cursor.connection.commit() self._logger.debug( f"Successfully migrated database from {migration.from_version} to {migration.to_version}" ) except Exception as e: msg = f"Error migrating database from {migration.from_version} to {migration.to_version}: {e}" - self._conn.rollback() + temp_db_cursor.connection.rollback() self._logger.error(msg) raise MigrationError(msg) from e - def _create_version_table(self) -> None: - """Creates a version table for the database, if one does not already exist.""" + def _create_migrations_table(self, cursor: sqlite3.Cursor) -> None: + """Creates the migrations table for the database, if one does not already exist.""" with self._lock: try: - self._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='migrations';") - if self._cursor.fetchone() is not None: + cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='migrations';") + if cursor.fetchone() is not None: return - self._cursor.execute( + cursor.execute( """--sql CREATE TABLE migrations ( version INTEGER PRIMARY KEY, @@ -216,21 +267,21 @@ class SQLiteMigrator: ); """ ) - self._cursor.execute("INSERT INTO migrations (version) VALUES (0);") - self._conn.commit() + cursor.execute("INSERT INTO migrations (version) VALUES (0);") + cursor.connection.commit() self._logger.debug("Created migrations table") except sqlite3.Error as e: msg = f"Problem creating migrations table: {e}" self._logger.error(msg) - self._conn.rollback() + cursor.connection.rollback() raise MigrationError(msg) from e - def _get_current_version(self) -> int: + def _get_current_version(self, cursor: sqlite3.Cursor) -> int: """Gets the current version of the database, or 0 if the version table does not exist.""" with self._lock: try: - self._cursor.execute("SELECT MAX(version) FROM migrations;") - version = self._cursor.fetchone()[0] + cursor.execute("SELECT MAX(version) FROM migrations;") + version = cursor.fetchone()[0] if version is None: return 0 return version @@ -239,54 +290,19 @@ class SQLiteMigrator: return 0 raise - def _backup_db(self) -> None: - """Backs up the databse, returning the path to the backup file.""" - if self._is_memory: - self._logger.debug("Using memory database, skipping backup") - # Sanity check! - assert isinstance(self._database, Path) - with self._lock: - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - backup_path = self._database.parent / f"{self._database.stem}_{timestamp}.db" - self._logger.info(f"Backing up database to {backup_path}") + def _create_temp_db(self, current_db_path: Path) -> Path: + """Copies the current database to a new file for migration.""" + temp_db_path = get_temp_db_path(current_db_path) + shutil.copy2(current_db_path, temp_db_path) + self._logger.info(f"Copied database to {temp_db_path} for migration") + return temp_db_path - # Use SQLite's built in backup capabilities so we don't need to worry about locking and such. - backup_conn = sqlite3.connect(backup_path) - with backup_conn: - self._conn.backup(backup_conn) - backup_conn.close() - - # Sanity check! - if not backup_path.is_file(): - raise MigrationError("Unable to back up database") - self.backup_path = backup_path - - def _restore_db( - self, - ) -> None: - """Restores the database from a backup file, unless the database is a memory database.""" - if self._is_memory: - return - - with self._lock: - self._logger.info(f"Restoring database from {self.backup_path}") - self._conn.close() - assert isinstance(self.backup_path, Path) - shutil.copy2(self.backup_path, self._database) - - def _unlink_lock_file(self) -> bool: - """Unlinks the migration lock file, returning True if it existed.""" - if self._is_memory or self._migration_lock_file_path is None: - return False - if self._migration_lock_file_path.is_file(): - self._migration_lock_file_path.unlink() - return True - return False - - def _write_migration_lock_file(self) -> None: - """Writes a file to indicate that a migration is in progress.""" - if self._is_memory or self._migration_lock_file_path is None: - return - assert isinstance(self._database, Path) - with open(self._migration_lock_file_path, "w") as f: - f.write("1") + def _finalize_migration(self, temp_db_conn: sqlite3.Connection, temp_db_path: Path, original_db_path: Path) -> None: + """Closes connections, renames the original database as a backup and renames the migrated database to the original db path.""" + self._conn.close() + temp_db_conn.close() + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + backup_db_path = original_db_path.parent / f"{original_db_path.stem}_backup_{timestamp}.db" + original_db_path.rename(backup_db_path) + temp_db_path.rename(original_db_path) + self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 83dd3a3b0e..ba1129b89d 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -21,7 +21,7 @@ from invokeai.app.services.shared.sqlite.sqlite_migrator import ( def migrator() -> SQLiteMigrator: conn = sqlite3.connect(sqlite_memory, check_same_thread=False) return SQLiteMigrator( - conn=conn, database=sqlite_memory, lock=threading.RLock(), logger=Logger("test_sqlite_migrator") + conn=conn, db_path=sqlite_memory, lock=threading.RLock(), logger=Logger("test_sqlite_migrator") ) @@ -50,19 +50,19 @@ def test_register_invalid_migration_version(migrator: SQLiteMigrator): def test_create_version_table(migrator: SQLiteMigrator): - migrator._create_version_table() + migrator._create_migrations_table() migrator._cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='version';") assert migrator._cursor.fetchone() is not None def test_get_current_version(migrator: SQLiteMigrator): - migrator._create_version_table() + migrator._create_migrations_table() migrator._conn.commit() assert migrator._get_current_version() == 0 # initial version def test_set_version(migrator: SQLiteMigrator): - migrator._create_version_table() + migrator._create_migrations_table() migrator._set_version(db_version=1, app_version="1.0.0") migrator._cursor.execute("SELECT MAX(db_version) FROM version;") assert migrator._cursor.fetchone()[0] == 1 @@ -71,7 +71,7 @@ def test_set_version(migrator: SQLiteMigrator): def test_run_migration(migrator: SQLiteMigrator): - migrator._create_version_table() + migrator._create_migrations_table() def migration_callback(cursor: sqlite3.Cursor) -> None: cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") @@ -84,7 +84,7 @@ def test_run_migration(migrator: SQLiteMigrator): def test_run_migrations(migrator: SQLiteMigrator): - migrator._create_version_table() + migrator._create_migrations_table() def create_migrate(i: int) -> Callable[[sqlite3.Cursor], None]: def migrate(cursor: sqlite3.Cursor) -> None: @@ -109,8 +109,8 @@ def test_backup_and_restore_db(): cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") conn.commit() - migrator = SQLiteMigrator(conn=conn, database=database, lock=threading.RLock(), logger=Logger("test")) - backup_path = migrator._backup_db(migrator._database) + migrator = SQLiteMigrator(conn=conn, db_path=database, lock=threading.RLock(), logger=Logger("test")) + backup_path = migrator._backup_db(migrator._db_path) # mangle the db migrator._cursor.execute("DROP TABLE test;") @@ -135,21 +135,21 @@ def test_no_backup_and_restore_for_memory_db(migrator: SQLiteMigrator): def test_failed_migration(migrator: SQLiteMigrator, failing_migration: Migration): - migrator._create_version_table() + migrator._create_migrations_table() with pytest.raises(MigrationError, match="Error migrating database from 0 to 1"): migrator._run_migration(failing_migration) assert migrator._get_current_version() == 0 def test_duplicate_migration_versions(migrator: SQLiteMigrator, good_migration: Migration): - migrator._create_version_table() + migrator._create_migrations_table() migrator.register_migration(good_migration) with pytest.raises(MigrationVersionError, match="already registered"): migrator.register_migration(deepcopy(good_migration)) def test_non_sequential_migration_registration(migrator: SQLiteMigrator): - migrator._create_version_table() + migrator._create_migrations_table() def create_migrate(i: int) -> Callable[[sqlite3.Cursor], None]: def migrate(cursor: sqlite3.Cursor) -> None: @@ -167,7 +167,7 @@ def test_non_sequential_migration_registration(migrator: SQLiteMigrator): def test_db_version_gt_last_migration(migrator: SQLiteMigrator, good_migration: Migration): - migrator._create_version_table() + migrator._create_migrations_table() migrator.register_migration(good_migration) migrator._set_version(db_version=2, app_version="2.0.0") with pytest.raises(MigrationError, match="greater than the latest migration version"): @@ -176,7 +176,7 @@ def test_db_version_gt_last_migration(migrator: SQLiteMigrator, good_migration: def test_idempotent_migrations(migrator: SQLiteMigrator): - migrator._create_version_table() + migrator._create_migrations_table() def create_test_table(cursor: sqlite3.Cursor) -> None: # This SQL throws if run twice From e46dc9b34e966fcfa9da3ddac34578abb7b27c9e Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:06:06 +1100 Subject: [PATCH 113/515] fix(db): close db conn before reinitializing --- invokeai/app/services/shared/sqlite/sqlite_database.py | 1 + 1 file changed, 1 insertion(+) diff --git a/invokeai/app/services/shared/sqlite/sqlite_database.py b/invokeai/app/services/shared/sqlite/sqlite_database.py index 017cea0fe1..10d63c44e7 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_database.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -37,6 +37,7 @@ class SqliteDatabase: def reinitialize(self) -> None: """Reinitializes the database. Needed after migration.""" + self.close() self.initialize(self._config, self._logger) def close(self) -> None: From 56966d6d053a4520b4d302775df90cb3102cc5a6 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:09:41 +1100 Subject: [PATCH 114/515] feat(db): only reinit db if migrations occurred --- invokeai/app/api/dependencies.py | 4 ++-- invokeai/app/services/shared/sqlite/sqlite_migrator.py | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 2ab676d391..fb28eaac81 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -87,9 +87,9 @@ class ApiDependencies: migration_2.register_post_callback(partial(migrate_embedded_workflows, logger=logger, image_files=image_files)) migrator.register_migration(migration_1) migrator.register_migration(migration_2) - migrator.run_migrations() + did_migrate = migrator.run_migrations() - if not db.is_memory: + if not db.is_memory and did_migrate: db.reinitialize() configuration = config diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index b11f997648..7b6ea90874 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -168,7 +168,7 @@ class SQLiteMigrator: self._migrations.register(migration) self._logger.debug(f"Registered migration {migration.from_version} -> {migration.to_version}") - def run_migrations(self) -> None: + def run_migrations(self) -> bool: """Migrates the database to the latest version.""" with self._lock: # This throws if there is a problem. @@ -177,11 +177,11 @@ class SQLiteMigrator: if self._migrations.count == 0: self._logger.debug("No migrations registered") - return + return False if self._get_current_version(self._cursor) == self._migrations.latest_version: self._logger.debug("Database is up to date, no migrations to run") - return + return False self._logger.info("Database update needed") @@ -204,10 +204,9 @@ class SQLiteMigrator: else: # We are using a memory database. No special backup or special handling needed. self._run_migrations(self._cursor) - return self._logger.info("Database updated successfully") - return + return True def _run_migrations(self, temp_db_cursor: sqlite3.Cursor) -> None: next_migration = self._migrations.get(from_version=self._get_current_version(temp_db_cursor)) From fcb9e89bd7d6435a7512f55b15d6fe93c1754d92 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:19:12 +1100 Subject: [PATCH 115/515] feat(db): tidy db naming utils --- .../app/services/shared/sqlite/sqlite_migrator.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 7b6ea90874..2bec28bd9d 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -117,10 +117,16 @@ class MigrationSet: def get_temp_db_path(original_db_path: Path) -> Path: - """Gets the path to the migrated database.""" + """Gets the path to the temp database.""" return original_db_path.parent / original_db_path.name.replace(".db", ".db.temp") +def get_backup_db_path(original_db_path: Path) -> Path: + """Gets the path to the final backup database.""" + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + return original_db_path.parent / f"{original_db_path.stem}_backup_{timestamp}.db" + + class SQLiteMigrator: """ Manages migrations for a SQLite database. @@ -297,11 +303,10 @@ class SQLiteMigrator: return temp_db_path def _finalize_migration(self, temp_db_conn: sqlite3.Connection, temp_db_path: Path, original_db_path: Path) -> None: - """Closes connections, renames the original database as a backup and renames the migrated database to the original db path.""" + """Closes connections, renames the original database as a backup and renames the migrated database to the original name.""" self._conn.close() temp_db_conn.close() - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - backup_db_path = original_db_path.parent / f"{original_db_path.stem}_backup_{timestamp}.db" + backup_db_path = get_backup_db_path(original_db_path) original_db_path.rename(backup_db_path) temp_db_path.rename(original_db_path) self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") From 72c9a7663ffb936f70c5bde0a5c32b0e8166dc2e Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:22:43 +1100 Subject: [PATCH 116/515] fix(db): add docstring --- invokeai/app/services/shared/sqlite/sqlite_migrator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 2bec28bd9d..903dbf74f0 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -215,6 +215,7 @@ class SQLiteMigrator: return True def _run_migrations(self, temp_db_cursor: sqlite3.Cursor) -> None: + """Runs all migrations in a loop.""" next_migration = self._migrations.get(from_version=self._get_current_version(temp_db_cursor)) while next_migration is not None: self._run_migration(next_migration, temp_db_cursor) From b3f92e05471dd4aaf7776919c4bd1f259a6de21b Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:23:30 +1100 Subject: [PATCH 117/515] fix(db): fix docstring --- invokeai/app/services/shared/sqlite/sqlite_migrator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 903dbf74f0..c4a9628d9c 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -283,7 +283,7 @@ class SQLiteMigrator: raise MigrationError(msg) from e def _get_current_version(self, cursor: sqlite3.Cursor) -> int: - """Gets the current version of the database, or 0 if the version table does not exist.""" + """Gets the current version of the database, or 0 if the migrations table does not exist.""" with self._lock: try: cursor.execute("SELECT MAX(version) FROM migrations;") From 8726b203d4e9592054bd6bfc32a54041dc00609e Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:15:09 +1100 Subject: [PATCH 118/515] fix(db): fix migration chain validation --- .../services/shared/sqlite/sqlite_migrator.py | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index c4a9628d9c..e3b8eb04ec 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -81,27 +81,23 @@ class MigrationSet: # register() ensures that there is only one migration with a given from_version, so this is safe. return next((m for m in self._migrations if m.from_version == from_version), None) - def validate_migration_path(self) -> None: + def validate_migration_chain(self) -> None: """ - Validates that the migrations form a single path of migrations from version 0 to the latest version. + Validates that the migrations form a single chain of migrations from version 0 to the latest version. Raises a MigrationError if there is a problem. """ if self.count == 0: return if self.latest_version == 0: return - current_version = 0 - touched_count = 0 - while current_version < self.latest_version: - migration = self.get(current_version) - if migration is None: - raise MigrationError(f"Missing migration from {current_version}") - current_version = migration.to_version - touched_count += 1 - if current_version != self.latest_version: - raise MigrationError(f"Missing migration to {self.latest_version}") + next_migration = self.get(from_version=0) + touched_count = 1 + while next_migration is not None: + next_migration = self.get(next_migration.to_version) + if next_migration is not None: + touched_count += 1 if touched_count != self.count: - raise MigrationError("Migration path is not contiguous") + raise MigrationError("Migration chain is fragmented") @property def count(self) -> int: @@ -178,7 +174,7 @@ class SQLiteMigrator: """Migrates the database to the latest version.""" with self._lock: # This throws if there is a problem. - self._migrations.validate_migration_path() + self._migration_set.validate_migration_chain() self._create_migrations_table(cursor=self._cursor) if self._migrations.count == 0: From b3d5955bc7f234a403666a68f74ab3c3970bbbe2 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:15:37 +1100 Subject: [PATCH 119/515] fix(db): rename Migrator._migrations -> _migration_set --- .../app/services/shared/sqlite/sqlite_migrator.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index e3b8eb04ec..026deb5290 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -158,7 +158,7 @@ class SQLiteMigrator: self._conn = conn self._log_sql = log_sql self._cursor = self._conn.cursor() - self._migrations = MigrationSet() + self._migration_set = MigrationSet() # The presence of an temp database file indicates a catastrophic failure of a previous migration. if self._db_path and get_temp_db_path(self._db_path).is_file(): @@ -167,7 +167,7 @@ class SQLiteMigrator: def register_migration(self, migration: Migration) -> None: """Registers a migration.""" - self._migrations.register(migration) + self._migration_set.register(migration) self._logger.debug(f"Registered migration {migration.from_version} -> {migration.to_version}") def run_migrations(self) -> bool: @@ -177,11 +177,11 @@ class SQLiteMigrator: self._migration_set.validate_migration_chain() self._create_migrations_table(cursor=self._cursor) - if self._migrations.count == 0: + if self._migration_set.count == 0: self._logger.debug("No migrations registered") return False - if self._get_current_version(self._cursor) == self._migrations.latest_version: + if self._get_current_version(self._cursor) == self._migration_set.latest_version: self._logger.debug("Database is up to date, no migrations to run") return False @@ -212,10 +212,10 @@ class SQLiteMigrator: def _run_migrations(self, temp_db_cursor: sqlite3.Cursor) -> None: """Runs all migrations in a loop.""" - next_migration = self._migrations.get(from_version=self._get_current_version(temp_db_cursor)) + next_migration = self._migration_set.get(from_version=self._get_current_version(temp_db_cursor)) while next_migration is not None: self._run_migration(next_migration, temp_db_cursor) - next_migration = self._migrations.get(self._get_current_version(temp_db_cursor)) + next_migration = self._migration_set.get(self._get_current_version(temp_db_cursor)) def _run_migration(self, migration: Migration, temp_db_cursor: sqlite3.Cursor) -> None: """Runs a single migration.""" From 567f107a81bdf89e3242d250e1483c5ba3d86ca5 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:29:06 +1100 Subject: [PATCH 120/515] feat(db): return backup_db_path, move log stmt to run_migrations --- invokeai/app/services/shared/sqlite/sqlite_migrator.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 026deb5290..5672cdbceb 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -190,6 +190,7 @@ class SQLiteMigrator: if self._db_path: # We are using a file database. Create a copy of the database to run the migrations on. temp_db_path = self._create_temp_db(self._db_path) + self._logger.info(f"Copied database to {temp_db_path} for migration") temp_db_conn = sqlite3.connect(temp_db_path) # We have to re-set this because we just created a new connection. if self._log_sql: @@ -198,11 +199,12 @@ class SQLiteMigrator: self._run_migrations(temp_db_cursor) # Close the connections, copy the original database as a backup, and move the temp database to the # original database's path. - self._finalize_migration( + backup_db_path = self._finalize_migration( temp_db_conn=temp_db_conn, temp_db_path=temp_db_path, original_db_path=self._db_path, ) + self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") else: # We are using a memory database. No special backup or special handling needed. self._run_migrations(self._cursor) @@ -296,14 +298,13 @@ class SQLiteMigrator: """Copies the current database to a new file for migration.""" temp_db_path = get_temp_db_path(current_db_path) shutil.copy2(current_db_path, temp_db_path) - self._logger.info(f"Copied database to {temp_db_path} for migration") return temp_db_path - def _finalize_migration(self, temp_db_conn: sqlite3.Connection, temp_db_path: Path, original_db_path: Path) -> None: + def _finalize_migration(self, temp_db_conn: sqlite3.Connection, temp_db_path: Path, original_db_path: Path) -> Path: """Closes connections, renames the original database as a backup and renames the migrated database to the original name.""" self._conn.close() temp_db_conn.close() backup_db_path = get_backup_db_path(original_db_path) original_db_path.rename(backup_db_path) temp_db_path.rename(original_db_path) - self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") + return backup_db_path From 3227b30430aca0ad01e7d909b4f3286120279ee0 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 12:43:22 +1100 Subject: [PATCH 121/515] feat(db): extract non-stateful logic to class methods --- .../services/shared/sqlite/sqlite_migrator.py | 73 ++++++++++--------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 5672cdbceb..9a6984dbd3 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -112,17 +112,6 @@ class MigrationSet: return sorted(self._migrations, key=lambda m: m.to_version)[-1].to_version -def get_temp_db_path(original_db_path: Path) -> Path: - """Gets the path to the temp database.""" - return original_db_path.parent / original_db_path.name.replace(".db", ".db.temp") - - -def get_backup_db_path(original_db_path: Path) -> Path: - """Gets the path to the final backup database.""" - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - return original_db_path.parent / f"{original_db_path.stem}_backup_{timestamp}.db" - - class SQLiteMigrator: """ Manages migrations for a SQLite database. @@ -161,9 +150,9 @@ class SQLiteMigrator: self._migration_set = MigrationSet() # The presence of an temp database file indicates a catastrophic failure of a previous migration. - if self._db_path and get_temp_db_path(self._db_path).is_file(): + if self._db_path and self._get_temp_db_path(self._db_path).is_file(): self._logger.warning("Previous migration failed! Trying again...") - get_temp_db_path(self._db_path).unlink() + self._get_temp_db_path(self._db_path).unlink() def register_migration(self, migration: Migration) -> None: """Registers a migration.""" @@ -200,10 +189,11 @@ class SQLiteMigrator: # Close the connections, copy the original database as a backup, and move the temp database to the # original database's path. backup_db_path = self._finalize_migration( - temp_db_conn=temp_db_conn, temp_db_path=temp_db_path, original_db_path=self._db_path, ) + temp_db_conn.close() + self._conn.close() self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") else: # We are using a memory database. No special backup or special handling needed. @@ -280,31 +270,46 @@ class SQLiteMigrator: cursor.connection.rollback() raise MigrationError(msg) from e - def _get_current_version(self, cursor: sqlite3.Cursor) -> int: + @classmethod + def _get_current_version(cls, cursor: sqlite3.Cursor) -> int: """Gets the current version of the database, or 0 if the migrations table does not exist.""" - with self._lock: - try: - cursor.execute("SELECT MAX(version) FROM migrations;") - version = cursor.fetchone()[0] - if version is None: - return 0 - return version - except sqlite3.OperationalError as e: - if "no such table" in str(e): - return 0 - raise + try: + cursor.execute("SELECT MAX(version) FROM migrations;") + version = cursor.fetchone()[0] + if version is None: + return 0 + return version + except sqlite3.OperationalError as e: + if "no such table" in str(e): + return 0 + raise - def _create_temp_db(self, current_db_path: Path) -> Path: + @classmethod + def _create_temp_db(cls, original_db_path: Path) -> Path: """Copies the current database to a new file for migration.""" - temp_db_path = get_temp_db_path(current_db_path) - shutil.copy2(current_db_path, temp_db_path) + temp_db_path = cls._get_temp_db_path(original_db_path) + shutil.copy2(original_db_path, temp_db_path) return temp_db_path - def _finalize_migration(self, temp_db_conn: sqlite3.Connection, temp_db_path: Path, original_db_path: Path) -> Path: - """Closes connections, renames the original database as a backup and renames the migrated database to the original name.""" - self._conn.close() - temp_db_conn.close() - backup_db_path = get_backup_db_path(original_db_path) + @classmethod + def _finalize_migration( + cls, + temp_db_path: Path, + original_db_path: Path, + ) -> Path: + """Renames the original database as a backup and renames the migrated database to the original name.""" + backup_db_path = cls._get_backup_db_path(original_db_path) original_db_path.rename(backup_db_path) temp_db_path.rename(original_db_path) return backup_db_path + + @classmethod + def _get_temp_db_path(cls, original_db_path: Path) -> Path: + """Gets the path to the temp database.""" + return original_db_path.parent / original_db_path.name.replace(".db", ".db.temp") + + @classmethod + def _get_backup_db_path(cls, original_db_path: Path) -> Path: + """Gets the path to the final backup database.""" + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + return original_db_path.parent / f"{original_db_path.stem}_backup_{timestamp}.db" From c823f5667bd42be8d1930f0e60fb19e3827b8934 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 12:43:40 +1100 Subject: [PATCH 122/515] feat(db): update sqlite migrator tests --- tests/test_sqlite_migrator.py | 349 +++++++++++++++++++++------------- 1 file changed, 217 insertions(+), 132 deletions(-) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index ba1129b89d..e02891ebeb 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -1,33 +1,50 @@ import sqlite3 import threading -from copy import deepcopy from logging import Logger from pathlib import Path from tempfile import TemporaryDirectory -from typing import Callable import pytest +from pydantic import ValidationError from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory from invokeai.app.services.shared.sqlite.sqlite_migrator import ( + MigrateCallback, Migration, MigrationError, + MigrationSet, MigrationVersionError, SQLiteMigrator, ) @pytest.fixture -def migrator() -> SQLiteMigrator: - conn = sqlite3.connect(sqlite_memory, check_same_thread=False) - return SQLiteMigrator( - conn=conn, db_path=sqlite_memory, lock=threading.RLock(), logger=Logger("test_sqlite_migrator") - ) +def logger() -> Logger: + return Logger("test_sqlite_migrator") @pytest.fixture -def good_migration() -> Migration: - return Migration(db_version=1, app_version="1.0.0", migrate=lambda cursor: None) +def lock() -> threading.RLock: + return threading.RLock() + + +@pytest.fixture +def migrator(logger: Logger, lock: threading.RLock) -> SQLiteMigrator: + conn = sqlite3.connect(sqlite_memory, check_same_thread=False) + return SQLiteMigrator(conn=conn, db_path=None, lock=lock, logger=logger) + + +@pytest.fixture +def migration_no_op() -> Migration: + return Migration(from_version=0, to_version=1, migrate=lambda cursor: None) + + +@pytest.fixture +def migration_create_test_table() -> Migration: + def migrate(cursor: sqlite3.Cursor) -> None: + cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") + + return Migration(from_version=0, to_version=1, migrate=migrate) @pytest.fixture @@ -35,156 +52,224 @@ def failing_migration() -> Migration: def failing_migration(cursor: sqlite3.Cursor) -> None: raise Exception("Bad migration") - return Migration(db_version=1, app_version="1.0.0", migrate=failing_migration) + return Migration(from_version=0, to_version=1, migrate=failing_migration) -def test_register_migration(migrator: SQLiteMigrator, good_migration: Migration): - migration = good_migration +@pytest.fixture +def no_op_migrate_callback() -> MigrateCallback: + def no_op_migrate(cursor: sqlite3.Cursor) -> None: + pass + + return no_op_migrate + + +@pytest.fixture +def failing_migrate_callback() -> MigrateCallback: + def failing_migrate(cursor: sqlite3.Cursor) -> None: + raise Exception("Bad migration") + + return failing_migrate + + +def create_migrate(i: int) -> MigrateCallback: + def migrate(cursor: sqlite3.Cursor) -> None: + cursor.execute(f"CREATE TABLE test{i} (id INTEGER PRIMARY KEY);") + + return migrate + + +def test_migration_to_version_gt_from_version(no_op_migrate_callback: MigrateCallback): + with pytest.raises(ValidationError, match="greater_than_equal"): + Migration(from_version=1, to_version=0, migrate=no_op_migrate_callback) + + +def test_migration_hash(no_op_migrate_callback: MigrateCallback): + migration = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) + assert hash(migration) == hash((0, 1)) + + +def test_migration_registers_pre_and_post_callbacks(no_op_migrate_callback: MigrateCallback): + def pre_callback(cursor: sqlite3.Cursor) -> None: + pass + + def post_callback(cursor: sqlite3.Cursor) -> None: + pass + + migration = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) + migration.register_pre_callback(pre_callback) + migration.register_post_callback(post_callback) + assert pre_callback in migration.pre_migrate + assert post_callback in migration.post_migrate + + +def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: Migration): + migration = migration_no_op + migrator._migration_set.register(migration) + assert migration in migrator._migration_set._migrations + + +def test_migration_set_may_not_register_dupes(migrator: SQLiteMigrator, no_op_migrate_callback: MigrateCallback): + migrate_1_to_2 = Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) + migrate_0_to_2 = Migration(from_version=0, to_version=2, migrate=no_op_migrate_callback) + migrate_1_to_3 = Migration(from_version=1, to_version=3, migrate=no_op_migrate_callback) + migrator._migration_set.register(migrate_1_to_2) + with pytest.raises(MigrationVersionError, match=r"Migration to 2 already registered"): + migrator._migration_set.register(migrate_0_to_2) + with pytest.raises(MigrationVersionError, match=r"Migration from 1 already registered"): + migrator._migration_set.register(migrate_1_to_3) + + +def test_migration_set_gets_migration(migration_no_op: Migration): + migration_set = MigrationSet() + migration_set.register(migration_no_op) + assert migration_set.get(0) == migration_no_op + assert migration_set.get(1) is None + + +def test_migration_set_validates_migration_path(no_op_migrate_callback: MigrateCallback): + migration_set = MigrationSet() + migration_set.validate_migration_chain() + migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) + migration_set.validate_migration_chain() + migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=2, to_version=3, migrate=no_op_migrate_callback)) + migration_set.validate_migration_chain() + migration_set.register(Migration(from_version=4, to_version=5, migrate=no_op_migrate_callback)) + with pytest.raises(MigrationError, match="Migration chain is fragmented"): + migration_set.validate_migration_chain() + + +def test_migration_set_counts_migrations(no_op_migrate_callback: MigrateCallback): + migration_set = MigrationSet() + assert migration_set.count == 0 + migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) + assert migration_set.count == 1 + migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) + assert migration_set.count == 2 + + +def test_migration_set_gets_latest_version(no_op_migrate_callback: MigrateCallback): + migration_set = MigrationSet() + assert migration_set.latest_version == 0 + migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) + assert migration_set.latest_version == 2 + migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) + assert migration_set.latest_version == 2 + + +def test_migrator_registers_migration(migrator: SQLiteMigrator, migration_no_op: Migration): + migration = migration_no_op migrator.register_migration(migration) - assert migration in migrator._migrations + assert migration in migrator._migration_set._migrations -def test_register_invalid_migration_version(migrator: SQLiteMigrator): - with pytest.raises(MigrationError, match="Invalid migration version"): - migrator.register_migration(Migration(db_version=0, app_version="0.0.0", migrate=lambda cursor: None)) - - -def test_create_version_table(migrator: SQLiteMigrator): - migrator._create_migrations_table() - migrator._cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='version';") +def test_migrator_creates_migrations_table(migrator: SQLiteMigrator): + migrator._create_migrations_table(migrator._cursor) + migrator._cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='migrations';") assert migrator._cursor.fetchone() is not None -def test_get_current_version(migrator: SQLiteMigrator): - migrator._create_migrations_table() - migrator._conn.commit() - assert migrator._get_current_version() == 0 # initial version - - -def test_set_version(migrator: SQLiteMigrator): - migrator._create_migrations_table() - migrator._set_version(db_version=1, app_version="1.0.0") - migrator._cursor.execute("SELECT MAX(db_version) FROM version;") +def test_migrator_migration_sets_version(migrator: SQLiteMigrator, migration_no_op: Migration): + migrator._create_migrations_table(migrator._cursor) + migrator.register_migration(migration_no_op) + migrator.run_migrations() + migrator._cursor.execute("SELECT MAX(version) FROM migrations;") assert migrator._cursor.fetchone()[0] == 1 - migrator._cursor.execute("SELECT app_version from version WHERE db_version = 1;") - assert migrator._cursor.fetchone()[0] == "1.0.0" -def test_run_migration(migrator: SQLiteMigrator): - migrator._create_migrations_table() - - def migration_callback(cursor: sqlite3.Cursor) -> None: - cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") - - migration = Migration(db_version=1, app_version="1.0.0", migrate=migration_callback) - migrator._run_migration(migration) - assert migrator._get_current_version() == 1 - migrator._cursor.execute("SELECT app_version from version WHERE db_version = 1;") - assert migrator._cursor.fetchone()[0] == "1.0.0" +def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op: Migration): + assert migrator._get_current_version(migrator._cursor) == 0 + migrator._create_migrations_table(migrator._cursor) + assert migrator._get_current_version(migrator._cursor) == 0 + migrator.register_migration(migration_no_op) + migrator.run_migrations() + assert migrator._get_current_version(migrator._cursor) == 1 -def test_run_migrations(migrator: SQLiteMigrator): - migrator._create_migrations_table() +def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_create_test_table: Migration): + migrator._create_migrations_table(migrator._cursor) + migrator._run_migration(migration_create_test_table, migrator._cursor) + assert migrator._get_current_version(migrator._cursor) == 1 + migrator._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") + assert migrator._cursor.fetchone() is not None - def create_migrate(i: int) -> Callable[[sqlite3.Cursor], None]: - def migrate(cursor: sqlite3.Cursor) -> None: - cursor.execute(f"CREATE TABLE test{i} (id INTEGER PRIMARY KEY);") - return migrate - - migrations = [Migration(db_version=i, app_version=f"{i}.0.0", migrate=create_migrate(i)) for i in range(1, 4)] +def test_migrator_runs_all_migrations_in_memory( + migrator: SQLiteMigrator, +): + migrations = [Migration(from_version=i, to_version=i + 1, migrate=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() - assert migrator._get_current_version() == 3 + assert migrator._get_current_version(migrator._cursor) == 3 -def test_backup_and_restore_db(): - # must do this with a file database - we don't backup/restore for memory +def test_migrator_runs_all_migrations_file(logger: Logger, lock: threading.RLock): with TemporaryDirectory() as tempdir: - # create test DB w/ some data - database = Path(tempdir) / "test.db" - conn = sqlite3.connect(database, check_same_thread=False) - cursor = conn.cursor() - cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") - conn.commit() - - migrator = SQLiteMigrator(conn=conn, db_path=database, lock=threading.RLock(), logger=Logger("test")) - backup_path = migrator._backup_db(migrator._db_path) - - # mangle the db - migrator._cursor.execute("DROP TABLE test;") - migrator._conn.commit() - migrator._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") - assert migrator._cursor.fetchone() is None - - # restore (closes the connection - must create a new one) - migrator._restore_db(backup_path) - restored_conn = sqlite3.connect(database) - restored_cursor = restored_conn.cursor() - restored_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") - assert restored_cursor.fetchone() is not None - - # must manually close else tempfile throws on cleanup on windows - restored_conn.close() - - -def test_no_backup_and_restore_for_memory_db(migrator: SQLiteMigrator): - with pytest.raises(MigrationError, match="Cannot back up memory database"): - migrator._backup_db(sqlite_memory) - - -def test_failed_migration(migrator: SQLiteMigrator, failing_migration: Migration): - migrator._create_migrations_table() - with pytest.raises(MigrationError, match="Error migrating database from 0 to 1"): - migrator._run_migration(failing_migration) - assert migrator._get_current_version() == 0 - - -def test_duplicate_migration_versions(migrator: SQLiteMigrator, good_migration: Migration): - migrator._create_migrations_table() - migrator.register_migration(good_migration) - with pytest.raises(MigrationVersionError, match="already registered"): - migrator.register_migration(deepcopy(good_migration)) - - -def test_non_sequential_migration_registration(migrator: SQLiteMigrator): - migrator._create_migrations_table() - - def create_migrate(i: int) -> Callable[[sqlite3.Cursor], None]: - def migrate(cursor: sqlite3.Cursor) -> None: - cursor.execute(f"CREATE TABLE test{i} (id INTEGER PRIMARY KEY);") - - return migrate - - migrations = [ - Migration(db_version=i, app_version=f"{i}.0.0", migrate=create_migrate(i)) for i in reversed(range(1, 4)) - ] - for migration in migrations: - migrator.register_migration(migration) - migrator.run_migrations() - assert migrator._get_current_version() == 3 - - -def test_db_version_gt_last_migration(migrator: SQLiteMigrator, good_migration: Migration): - migrator._create_migrations_table() - migrator.register_migration(good_migration) - migrator._set_version(db_version=2, app_version="2.0.0") - with pytest.raises(MigrationError, match="greater than the latest migration version"): + original_db_path = Path(tempdir) / "invokeai.db" + # The Migrator closes the database when it finishes; we cannot use a context manager. + original_db_conn = sqlite3.connect(original_db_path) + migrator = SQLiteMigrator(conn=original_db_conn, db_path=original_db_path, lock=lock, logger=logger) + migrations = [Migration(from_version=i, to_version=i + 1, migrate=create_migrate(i)) for i in range(0, 3)] + for migration in migrations: + migrator.register_migration(migration) migrator.run_migrations() - assert migrator._get_current_version() == 2 + with sqlite3.connect(original_db_path) as original_db_conn: + original_db_cursor = original_db_conn.cursor() + assert SQLiteMigrator._get_current_version(original_db_cursor) == 3 -def test_idempotent_migrations(migrator: SQLiteMigrator): - migrator._create_migrations_table() +def test_migrator_creates_temp_db(): + with TemporaryDirectory() as tempdir: + original_db_path = Path(tempdir) / "invokeai.db" + with sqlite3.connect(original_db_path): + # create the db file so _create_temp_db has something to copy + pass + temp_db_path = SQLiteMigrator._create_temp_db(original_db_path) + assert temp_db_path.is_file() + assert temp_db_path == SQLiteMigrator._get_temp_db_path(original_db_path) - def create_test_table(cursor: sqlite3.Cursor) -> None: - # This SQL throws if run twice - cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") - migration = Migration(db_version=1, app_version="1.0.0", migrate=create_test_table) +def test_migrator_finalizes(): + with TemporaryDirectory() as tempdir: + original_db_path = Path(tempdir) / "invokeai.db" + temp_db_path = SQLiteMigrator._get_temp_db_path(original_db_path) + backup_db_path = SQLiteMigrator._get_backup_db_path(original_db_path) + with sqlite3.connect(original_db_path) as original_db_conn, sqlite3.connect(temp_db_path) as temp_db_conn: + original_db_cursor = original_db_conn.cursor() + original_db_cursor.execute("CREATE TABLE original_db_test (id INTEGER PRIMARY KEY);") + original_db_conn.commit() + temp_db_cursor = temp_db_conn.cursor() + temp_db_cursor.execute("CREATE TABLE temp_db_test (id INTEGER PRIMARY KEY);") + temp_db_conn.commit() + SQLiteMigrator._finalize_migration( + original_db_path=original_db_path, + temp_db_path=temp_db_path, + ) + with sqlite3.connect(backup_db_path) as backup_db_conn, sqlite3.connect(temp_db_path) as temp_db_conn: + backup_db_cursor = backup_db_conn.cursor() + backup_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='original_db_test';") + assert backup_db_cursor.fetchone() is not None + temp_db_cursor = temp_db_conn.cursor() + temp_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='temp_db_test';") + assert temp_db_cursor.fetchone() is None - migrator.register_migration(migration) + +def test_migrator_makes_no_changes_on_failed_migration( + migrator: SQLiteMigrator, migration_no_op: Migration, failing_migrate_callback: MigrateCallback +): + migrator.register_migration(migration_no_op) + migrator.run_migrations() + assert migrator._get_current_version(migrator._cursor) == 1 + migrator.register_migration(Migration(from_version=1, to_version=2, migrate=failing_migrate_callback)) + with pytest.raises(MigrationError, match="Bad migration"): + migrator.run_migrations() + assert migrator._get_current_version(migrator._cursor) == 1 + + +def test_idempotent_migrations(migrator: SQLiteMigrator, migration_create_test_table: Migration): + migrator.register_migration(migration_create_test_table) migrator.run_migrations() # not throwing is sufficient migrator.run_migrations() + assert migrator._get_current_version(migrator._cursor) == 1 From 41db92b9e8f1cc05055e1515e4d223d0185aea56 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 12:47:52 +1100 Subject: [PATCH 123/515] feat(db): add check for missing migration from 0 --- invokeai/app/services/shared/sqlite/sqlite_migrator.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 9a6984dbd3..0ea43d0eb2 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -91,6 +91,8 @@ class MigrationSet: if self.latest_version == 0: return next_migration = self.get(from_version=0) + if next_migration is None: + raise MigrationError("Migration chain is fragmented") touched_count = 1 while next_migration is not None: next_migration = self.get(next_migration.to_version) From 77065b1ce1d2adbb98dd65a39eef4675fa434dae Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 12:48:28 +1100 Subject: [PATCH 124/515] feat(db): update test for migration chain for missing from 0 --- tests/test_sqlite_migrator.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index e02891ebeb..b6757b732f 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -126,16 +126,19 @@ def test_migration_set_gets_migration(migration_no_op: Migration): assert migration_set.get(1) is None -def test_migration_set_validates_migration_path(no_op_migrate_callback: MigrateCallback): +def test_migration_set_validates_migration_chain(no_op_migrate_callback: MigrateCallback): migration_set = MigrationSet() - migration_set.validate_migration_chain() + migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) + with pytest.raises(MigrationError, match="Migration chain is fragmented"): + # no migration from 0 to 1 + migration_set.validate_migration_chain() migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) migration_set.validate_migration_chain() - migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) migration_set.register(Migration(from_version=2, to_version=3, migrate=no_op_migrate_callback)) migration_set.validate_migration_chain() migration_set.register(Migration(from_version=4, to_version=5, migrate=no_op_migrate_callback)) with pytest.raises(MigrationError, match="Migration chain is fragmented"): + # no migration from 3 to 4 migration_set.validate_migration_chain() From 4f3c32a2ee278ef6b89f0b90fd0aab6fdaccd245 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 14:20:12 +1100 Subject: [PATCH 125/515] fix(db): remove errant print stmts --- invokeai/app/services/shared/sqlite/migrations/migration_1.py | 2 -- invokeai/app/services/shared/sqlite/migrations/migration_2.py | 2 -- 2 files changed, 4 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_1.py b/invokeai/app/services/shared/sqlite/migrations/migration_1.py index 83a76fcea8..daf65591bf 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_1.py @@ -6,8 +6,6 @@ from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration def _migrate(cursor: sqlite3.Cursor) -> None: """Migration callback for database version 1.""" - print("migration 1!!!") - _create_board_images(cursor) _create_boards(cursor) _create_images(cursor) diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2.py b/invokeai/app/services/shared/sqlite/migrations/migration_2.py index dd4fc1a9e3..b14f18843b 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite/migrations/migration_2.py @@ -6,8 +6,6 @@ from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration def _migrate(cursor: sqlite3.Cursor) -> None: """Migration callback for database version 2.""" - print("migration 2!!!") - _add_images_has_workflow(cursor) _add_session_queue_workflow(cursor) _drop_old_workflow_tables(cursor) From 26ab9170213d8cef3817ffded75c6dcafcbd48c4 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 14:21:14 +1100 Subject: [PATCH 126/515] fix(tests): add sqlite migrator to test fixtures --- tests/aa_nodes/test_graph_execution_state.py | 17 ++++++++++++++++- tests/aa_nodes/test_invoker.py | 17 ++++++++++++++++- .../model_records/test_model_records_sql.py | 16 ++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index 5fd0b4d70d..d2850a12be 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -1,4 +1,5 @@ import logging +from pathlib import Path import pytest @@ -28,7 +29,10 @@ from invokeai.app.services.shared.graph import ( IterateInvocation, LibraryGraph, ) +from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger from .test_invoker import create_edge @@ -49,7 +53,18 @@ def simple_graph(): @pytest.fixture def mock_services() -> InvocationServices: configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) - db = SqliteDatabase(configuration, InvokeAILogger.get_logger()) + logger = InvokeAILogger.get_logger() + db = SqliteDatabase(configuration, logger) + migrator = SQLiteMigrator( + db_path=db.database if isinstance(db.database, Path) else None, + conn=db.conn, + lock=db.lock, + logger=logger, + log_sql=configuration.log_sql, + ) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() # NOTE: none of these are actually called by the test invocations graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") return InvocationServices( diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index efa5f27a74..cc4d409b0f 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -1,8 +1,10 @@ import logging +from pathlib import Path import pytest from invokeai.app.services.config.config_default import InvokeAIAppConfig +from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger # This import must happen before other invoke imports or test in other files(!!) break @@ -24,6 +26,8 @@ from invokeai.app.services.invoker import Invoker from invokeai.app.services.item_storage.item_storage_sqlite import SqliteItemStorage from invokeai.app.services.session_queue.session_queue_common import DEFAULT_QUEUE_ID from invokeai.app.services.shared.graph import Graph, GraphExecutionState, GraphInvocation, LibraryGraph +from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase @@ -52,8 +56,19 @@ def graph_with_subgraph(): # the test invocations. @pytest.fixture def mock_services() -> InvocationServices: - db = SqliteDatabase(InvokeAIAppConfig(use_memory_db=True), InvokeAILogger.get_logger()) configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) + logger = InvokeAILogger.get_logger() + db = SqliteDatabase(configuration, logger) + migrator = SQLiteMigrator( + db_path=db.database if isinstance(db.database, Path) else None, + conn=db.conn, + lock=db.lock, + logger=logger, + log_sql=configuration.log_sql, + ) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() # NOTE: none of these are actually called by the test invocations graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index 5c8bbb4048..69cf753bb4 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -3,6 +3,7 @@ Test the refactored model config classes. """ from hashlib import sha256 +from pathlib import Path import pytest @@ -13,7 +14,10 @@ from invokeai.app.services.model_records import ( ModelRecordServiceSQL, UnknownModelException, ) +from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase +from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator from invokeai.backend.model_manager.config import ( BaseModelType, MainCheckpointConfig, @@ -30,6 +34,18 @@ def store(datadir) -> ModelRecordServiceBase: config = InvokeAIAppConfig(root=datadir) logger = InvokeAILogger.get_logger(config=config) db = SqliteDatabase(config, logger) + migrator = SQLiteMigrator( + db_path=db.database if isinstance(db.database, Path) else None, + conn=db.conn, + lock=db.lock, + logger=logger, + log_sql=config.log_sql, + ) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() + # this test uses a file database, so we need to reinitialize it after migrations + db.reinitialize() return ModelRecordServiceSQL(db) From f1b6f78319a270601c83eaf33a5378a797a508bc Mon Sep 17 00:00:00 2001 From: "psychedelicious@windows" <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:12:03 +1100 Subject: [PATCH 127/515] fix(db): fix windows db migrator tests - Ensure db files are closed before manipulating them - Use contextlib.closing() so that sqlite connections are closed on existing the context --- .../services/shared/sqlite/sqlite_migrator.py | 4 ++-- tests/test_sqlite_migrator.py | 21 ++++++++++++------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index 0ea43d0eb2..bb4271727e 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -190,12 +190,12 @@ class SQLiteMigrator: self._run_migrations(temp_db_cursor) # Close the connections, copy the original database as a backup, and move the temp database to the # original database's path. + temp_db_conn.close() + self._conn.close() backup_db_path = self._finalize_migration( temp_db_path=temp_db_path, original_db_path=self._db_path, ) - temp_db_conn.close() - self._conn.close() self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") else: # We are using a memory database. No special backup or special handling needed. diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index b6757b732f..9b44635a12 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -1,5 +1,6 @@ import sqlite3 import threading +from contextlib import closing from logging import Logger from pathlib import Path from tempfile import TemporaryDirectory @@ -217,7 +218,7 @@ def test_migrator_runs_all_migrations_file(logger: Logger, lock: threading.RLock for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() - with sqlite3.connect(original_db_path) as original_db_conn: + with closing(sqlite3.connect(original_db_path)) as original_db_conn: original_db_cursor = original_db_conn.cursor() assert SQLiteMigrator._get_current_version(original_db_cursor) == 3 @@ -225,7 +226,7 @@ def test_migrator_runs_all_migrations_file(logger: Logger, lock: threading.RLock def test_migrator_creates_temp_db(): with TemporaryDirectory() as tempdir: original_db_path = Path(tempdir) / "invokeai.db" - with sqlite3.connect(original_db_path): + with closing(sqlite3.connect(original_db_path)): # create the db file so _create_temp_db has something to copy pass temp_db_path = SQLiteMigrator._create_temp_db(original_db_path) @@ -238,18 +239,22 @@ def test_migrator_finalizes(): original_db_path = Path(tempdir) / "invokeai.db" temp_db_path = SQLiteMigrator._get_temp_db_path(original_db_path) backup_db_path = SQLiteMigrator._get_backup_db_path(original_db_path) - with sqlite3.connect(original_db_path) as original_db_conn, sqlite3.connect(temp_db_path) as temp_db_conn: + with closing(sqlite3.connect(original_db_path)) as original_db_conn, closing( + sqlite3.connect(temp_db_path) + ) as temp_db_conn: original_db_cursor = original_db_conn.cursor() original_db_cursor.execute("CREATE TABLE original_db_test (id INTEGER PRIMARY KEY);") original_db_conn.commit() temp_db_cursor = temp_db_conn.cursor() temp_db_cursor.execute("CREATE TABLE temp_db_test (id INTEGER PRIMARY KEY);") temp_db_conn.commit() - SQLiteMigrator._finalize_migration( - original_db_path=original_db_path, - temp_db_path=temp_db_path, - ) - with sqlite3.connect(backup_db_path) as backup_db_conn, sqlite3.connect(temp_db_path) as temp_db_conn: + SQLiteMigrator._finalize_migration( + original_db_path=original_db_path, + temp_db_path=temp_db_path, + ) + with closing(sqlite3.connect(backup_db_path)) as backup_db_conn, closing( + sqlite3.connect(temp_db_path) + ) as temp_db_conn: backup_db_cursor = backup_db_conn.cursor() backup_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='original_db_test';") assert backup_db_cursor.fetchone() is not None From fa7d0021758ad2b9ec64019613c131e64547927b Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:22:29 +1100 Subject: [PATCH 128/515] fix(tests): fix typing issues --- .../services/shared/sqlite/sqlite_migrator.py | 2 +- tests/test_sqlite_migrator.py | 44 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite/sqlite_migrator.py index bb4271727e..ca79621824 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite/sqlite_migrator.py @@ -277,7 +277,7 @@ class SQLiteMigrator: """Gets the current version of the database, or 0 if the migrations table does not exist.""" try: cursor.execute("SELECT MAX(version) FROM migrations;") - version = cursor.fetchone()[0] + version: int = cursor.fetchone()[0] if version is None: return 0 return version diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 9b44635a12..05beae799e 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -79,17 +79,17 @@ def create_migrate(i: int) -> MigrateCallback: return migrate -def test_migration_to_version_gt_from_version(no_op_migrate_callback: MigrateCallback): +def test_migration_to_version_gt_from_version(no_op_migrate_callback: MigrateCallback) -> None: with pytest.raises(ValidationError, match="greater_than_equal"): Migration(from_version=1, to_version=0, migrate=no_op_migrate_callback) -def test_migration_hash(no_op_migrate_callback: MigrateCallback): +def test_migration_hash(no_op_migrate_callback: MigrateCallback) -> None: migration = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) assert hash(migration) == hash((0, 1)) -def test_migration_registers_pre_and_post_callbacks(no_op_migrate_callback: MigrateCallback): +def test_migration_registers_pre_and_post_callbacks(no_op_migrate_callback: MigrateCallback) -> None: def pre_callback(cursor: sqlite3.Cursor) -> None: pass @@ -103,13 +103,15 @@ def test_migration_registers_pre_and_post_callbacks(no_op_migrate_callback: Migr assert post_callback in migration.post_migrate -def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: Migration): +def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: migration = migration_no_op migrator._migration_set.register(migration) assert migration in migrator._migration_set._migrations -def test_migration_set_may_not_register_dupes(migrator: SQLiteMigrator, no_op_migrate_callback: MigrateCallback): +def test_migration_set_may_not_register_dupes( + migrator: SQLiteMigrator, no_op_migrate_callback: MigrateCallback +) -> None: migrate_1_to_2 = Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) migrate_0_to_2 = Migration(from_version=0, to_version=2, migrate=no_op_migrate_callback) migrate_1_to_3 = Migration(from_version=1, to_version=3, migrate=no_op_migrate_callback) @@ -120,14 +122,14 @@ def test_migration_set_may_not_register_dupes(migrator: SQLiteMigrator, no_op_mi migrator._migration_set.register(migrate_1_to_3) -def test_migration_set_gets_migration(migration_no_op: Migration): +def test_migration_set_gets_migration(migration_no_op: Migration) -> None: migration_set = MigrationSet() migration_set.register(migration_no_op) assert migration_set.get(0) == migration_no_op assert migration_set.get(1) is None -def test_migration_set_validates_migration_chain(no_op_migrate_callback: MigrateCallback): +def test_migration_set_validates_migration_chain(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) with pytest.raises(MigrationError, match="Migration chain is fragmented"): @@ -143,7 +145,7 @@ def test_migration_set_validates_migration_chain(no_op_migrate_callback: Migrate migration_set.validate_migration_chain() -def test_migration_set_counts_migrations(no_op_migrate_callback: MigrateCallback): +def test_migration_set_counts_migrations(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() assert migration_set.count == 0 migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) @@ -152,7 +154,7 @@ def test_migration_set_counts_migrations(no_op_migrate_callback: MigrateCallback assert migration_set.count == 2 -def test_migration_set_gets_latest_version(no_op_migrate_callback: MigrateCallback): +def test_migration_set_gets_latest_version(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() assert migration_set.latest_version == 0 migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) @@ -161,19 +163,19 @@ def test_migration_set_gets_latest_version(no_op_migrate_callback: MigrateCallba assert migration_set.latest_version == 2 -def test_migrator_registers_migration(migrator: SQLiteMigrator, migration_no_op: Migration): +def test_migrator_registers_migration(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: migration = migration_no_op migrator.register_migration(migration) assert migration in migrator._migration_set._migrations -def test_migrator_creates_migrations_table(migrator: SQLiteMigrator): +def test_migrator_creates_migrations_table(migrator: SQLiteMigrator) -> None: migrator._create_migrations_table(migrator._cursor) migrator._cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='migrations';") assert migrator._cursor.fetchone() is not None -def test_migrator_migration_sets_version(migrator: SQLiteMigrator, migration_no_op: Migration): +def test_migrator_migration_sets_version(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: migrator._create_migrations_table(migrator._cursor) migrator.register_migration(migration_no_op) migrator.run_migrations() @@ -181,7 +183,7 @@ def test_migrator_migration_sets_version(migrator: SQLiteMigrator, migration_no_ assert migrator._cursor.fetchone()[0] == 1 -def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op: Migration): +def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: assert migrator._get_current_version(migrator._cursor) == 0 migrator._create_migrations_table(migrator._cursor) assert migrator._get_current_version(migrator._cursor) == 0 @@ -190,7 +192,7 @@ def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op assert migrator._get_current_version(migrator._cursor) == 1 -def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_create_test_table: Migration): +def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_create_test_table: Migration) -> None: migrator._create_migrations_table(migrator._cursor) migrator._run_migration(migration_create_test_table, migrator._cursor) assert migrator._get_current_version(migrator._cursor) == 1 @@ -198,9 +200,7 @@ def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_crea assert migrator._cursor.fetchone() is not None -def test_migrator_runs_all_migrations_in_memory( - migrator: SQLiteMigrator, -): +def test_migrator_runs_all_migrations_in_memory(migrator: SQLiteMigrator) -> None: migrations = [Migration(from_version=i, to_version=i + 1, migrate=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) @@ -208,7 +208,7 @@ def test_migrator_runs_all_migrations_in_memory( assert migrator._get_current_version(migrator._cursor) == 3 -def test_migrator_runs_all_migrations_file(logger: Logger, lock: threading.RLock): +def test_migrator_runs_all_migrations_file(logger: Logger, lock: threading.RLock) -> None: with TemporaryDirectory() as tempdir: original_db_path = Path(tempdir) / "invokeai.db" # The Migrator closes the database when it finishes; we cannot use a context manager. @@ -223,7 +223,7 @@ def test_migrator_runs_all_migrations_file(logger: Logger, lock: threading.RLock assert SQLiteMigrator._get_current_version(original_db_cursor) == 3 -def test_migrator_creates_temp_db(): +def test_migrator_creates_temp_db() -> None: with TemporaryDirectory() as tempdir: original_db_path = Path(tempdir) / "invokeai.db" with closing(sqlite3.connect(original_db_path)): @@ -234,7 +234,7 @@ def test_migrator_creates_temp_db(): assert temp_db_path == SQLiteMigrator._get_temp_db_path(original_db_path) -def test_migrator_finalizes(): +def test_migrator_finalizes() -> None: with TemporaryDirectory() as tempdir: original_db_path = Path(tempdir) / "invokeai.db" temp_db_path = SQLiteMigrator._get_temp_db_path(original_db_path) @@ -265,7 +265,7 @@ def test_migrator_finalizes(): def test_migrator_makes_no_changes_on_failed_migration( migrator: SQLiteMigrator, migration_no_op: Migration, failing_migrate_callback: MigrateCallback -): +) -> None: migrator.register_migration(migration_no_op) migrator.run_migrations() assert migrator._get_current_version(migrator._cursor) == 1 @@ -275,7 +275,7 @@ def test_migrator_makes_no_changes_on_failed_migration( assert migrator._get_current_version(migrator._cursor) == 1 -def test_idempotent_migrations(migrator: SQLiteMigrator, migration_create_test_table: Migration): +def test_idempotent_migrations(migrator: SQLiteMigrator, migration_create_test_table: Migration) -> None: migrator.register_migration(migration_create_test_table) migrator.run_migrations() # not throwing is sufficient From 290851016eb2f5e0cdb22975ba8efe57f603295c Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:41:30 +1100 Subject: [PATCH 129/515] feat(db): move sqlite_migrator into its own module --- invokeai/app/api/dependencies.py | 8 +- .../__init__.py | 0 .../sqlite_migrator/migrations/__init__.py | 0 .../migrations/migration_1.py | 2 +- .../migrations/migration_2.py | 2 +- .../migrations/migration_2_post.py | 0 .../sqlite_migrator/sqlite_migrator_common.py | 109 ++++++++++++++++++ .../sqlite_migrator_impl.py} | 109 +----------------- 8 files changed, 117 insertions(+), 113 deletions(-) rename invokeai/app/services/shared/{sqlite/migrations => sqlite_migrator}/__init__.py (100%) create mode 100644 invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py rename invokeai/app/services/shared/{sqlite => sqlite_migrator}/migrations/migration_1.py (99%) rename invokeai/app/services/shared/{sqlite => sqlite_migrator}/migrations/migration_2.py (97%) rename invokeai/app/services/shared/{sqlite => sqlite_migrator}/migrations/migration_2_post.py (100%) create mode 100644 invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py rename invokeai/app/services/shared/{sqlite/sqlite_migrator.py => sqlite_migrator/sqlite_migrator_impl.py} (67%) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index fb28eaac81..a9e68235d5 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -4,10 +4,10 @@ from functools import partial from logging import Logger from pathlib import Path -from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 -from invokeai.app.services.shared.sqlite.migrations.migration_2_post import migrate_embedded_workflows -from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2_post import migrate_embedded_workflows +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger from invokeai.version.invokeai_version import __version__ diff --git a/invokeai/app/services/shared/sqlite/migrations/__init__.py b/invokeai/app/services/shared/sqlite_migrator/__init__.py similarity index 100% rename from invokeai/app/services/shared/sqlite/migrations/__init__.py rename to invokeai/app/services/shared/sqlite_migrator/__init__.py diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py b/invokeai/app/services/shared/sqlite_migrator/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_1.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py similarity index 99% rename from invokeai/app/services/shared/sqlite/migrations/migration_1.py rename to invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py index daf65591bf..fce9acf54c 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py @@ -1,6 +1,6 @@ import sqlite3 -from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration def _migrate(cursor: sqlite3.Cursor) -> None: diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py similarity index 97% rename from invokeai/app/services/shared/sqlite/migrations/migration_2.py rename to invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index b14f18843b..a4c950b85c 100644 --- a/invokeai/app/services/shared/sqlite/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -1,6 +1,6 @@ import sqlite3 -from invokeai.app.services.shared.sqlite.sqlite_migrator import Migration +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration def _migrate(cursor: sqlite3.Cursor) -> None: diff --git a/invokeai/app/services/shared/sqlite/migrations/migration_2_post.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2_post.py similarity index 100% rename from invokeai/app/services/shared/sqlite/migrations/migration_2_post.py rename to invokeai/app/services/shared/sqlite_migrator/migrations/migration_2_post.py diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py new file mode 100644 index 0000000000..5624a53657 --- /dev/null +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -0,0 +1,109 @@ +import sqlite3 +from typing import Callable, Optional, TypeAlias + +from pydantic import BaseModel, Field, model_validator + +MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor], None] + + +class MigrationError(RuntimeError): + """Raised when a migration fails.""" + + +class MigrationVersionError(ValueError): + """Raised when a migration version is invalid.""" + + +class Migration(BaseModel): + """ + Represents a migration for a SQLite database. + + Migration callbacks will be provided an open cursor to the database. They should not commit their + transaction; this is handled by the migrator. + + Pre- and post-migration callback may be registered with :meth:`register_pre_callback` or + :meth:`register_post_callback`. + + If a migration has additional dependencies, it is recommended to use functools.partial to provide + the dependencies and register the partial as the migration callback. + """ + + from_version: int = Field(ge=0, strict=True, description="The database version on which this migration may be run") + to_version: int = Field(ge=1, strict=True, description="The database version that results from this migration") + migrate: MigrateCallback = Field(description="The callback to run to perform the migration") + pre_migrate: list[MigrateCallback] = Field( + default=[], description="A list of callbacks to run before the migration" + ) + post_migrate: list[MigrateCallback] = Field( + default=[], description="A list of callbacks to run after the migration" + ) + + @model_validator(mode="after") + def validate_to_version(self) -> "Migration": + if self.to_version <= self.from_version: + raise ValueError("to_version must be greater than from_version") + return self + + def __hash__(self) -> int: + # Callables are not hashable, so we need to implement our own __hash__ function to use this class in a set. + return hash((self.from_version, self.to_version)) + + def register_pre_callback(self, callback: MigrateCallback) -> None: + """Registers a pre-migration callback.""" + self.pre_migrate.append(callback) + + def register_post_callback(self, callback: MigrateCallback) -> None: + """Registers a post-migration callback.""" + self.post_migrate.append(callback) + + +class MigrationSet: + """A set of Migrations. Performs validation during migration registration and provides utility methods.""" + + def __init__(self) -> None: + self._migrations: set[Migration] = set() + + def register(self, migration: Migration) -> None: + """Registers a migration.""" + if any(m.from_version == migration.from_version for m in self._migrations): + raise MigrationVersionError(f"Migration from {migration.from_version} already registered") + if any(m.to_version == migration.to_version for m in self._migrations): + raise MigrationVersionError(f"Migration to {migration.to_version} already registered") + self._migrations.add(migration) + + def get(self, from_version: int) -> Optional[Migration]: + """Gets the migration that may be run on the given database version.""" + # register() ensures that there is only one migration with a given from_version, so this is safe. + return next((m for m in self._migrations if m.from_version == from_version), None) + + def validate_migration_chain(self) -> None: + """ + Validates that the migrations form a single chain of migrations from version 0 to the latest version. + Raises a MigrationError if there is a problem. + """ + if self.count == 0: + return + if self.latest_version == 0: + return + next_migration = self.get(from_version=0) + if next_migration is None: + raise MigrationError("Migration chain is fragmented") + touched_count = 1 + while next_migration is not None: + next_migration = self.get(next_migration.to_version) + if next_migration is not None: + touched_count += 1 + if touched_count != self.count: + raise MigrationError("Migration chain is fragmented") + + @property + def count(self) -> int: + """The count of registered migrations.""" + return len(self._migrations) + + @property + def latest_version(self) -> int: + """Gets latest to_version among registered migrations. Returns 0 if there are no migrations registered.""" + if self.count == 0: + return 0 + return sorted(self._migrations, key=lambda m: m.to_version)[-1].to_version diff --git a/invokeai/app/services/shared/sqlite/sqlite_migrator.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py similarity index 67% rename from invokeai/app/services/shared/sqlite/sqlite_migrator.py rename to invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index ca79621824..129d68451c 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_migrator.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -4,114 +4,9 @@ import threading from datetime import datetime from logging import Logger from pathlib import Path -from typing import Callable, Optional, TypeAlias +from typing import Optional -from pydantic import BaseModel, Field, model_validator - -MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor], None] - - -class MigrationError(RuntimeError): - """Raised when a migration fails.""" - - -class MigrationVersionError(ValueError): - """Raised when a migration version is invalid.""" - - -class Migration(BaseModel): - """ - Represents a migration for a SQLite database. - - Migration callbacks will be provided an open cursor to the database. They should not commit their - transaction; this is handled by the migrator. - - Pre- and post-migration callback may be registered with :meth:`register_pre_callback` or - :meth:`register_post_callback`. - - If a migration has additional dependencies, it is recommended to use functools.partial to provide - the dependencies and register the partial as the migration callback. - """ - - from_version: int = Field(ge=0, strict=True, description="The database version on which this migration may be run") - to_version: int = Field(ge=1, strict=True, description="The database version that results from this migration") - migrate: MigrateCallback = Field(description="The callback to run to perform the migration") - pre_migrate: list[MigrateCallback] = Field( - default=[], description="A list of callbacks to run before the migration" - ) - post_migrate: list[MigrateCallback] = Field( - default=[], description="A list of callbacks to run after the migration" - ) - - @model_validator(mode="after") - def validate_to_version(self) -> "Migration": - if self.to_version <= self.from_version: - raise ValueError("to_version must be greater than from_version") - return self - - def __hash__(self) -> int: - # Callables are not hashable, so we need to implement our own __hash__ function to use this class in a set. - return hash((self.from_version, self.to_version)) - - def register_pre_callback(self, callback: MigrateCallback) -> None: - """Registers a pre-migration callback.""" - self.pre_migrate.append(callback) - - def register_post_callback(self, callback: MigrateCallback) -> None: - """Registers a post-migration callback.""" - self.post_migrate.append(callback) - - -class MigrationSet: - """A set of Migrations. Performs validation during migration registration and provides utility methods.""" - - def __init__(self) -> None: - self._migrations: set[Migration] = set() - - def register(self, migration: Migration) -> None: - """Registers a migration.""" - if any(m.from_version == migration.from_version for m in self._migrations): - raise MigrationVersionError(f"Migration from {migration.from_version} already registered") - if any(m.to_version == migration.to_version for m in self._migrations): - raise MigrationVersionError(f"Migration to {migration.to_version} already registered") - self._migrations.add(migration) - - def get(self, from_version: int) -> Optional[Migration]: - """Gets the migration that may be run on the given database version.""" - # register() ensures that there is only one migration with a given from_version, so this is safe. - return next((m for m in self._migrations if m.from_version == from_version), None) - - def validate_migration_chain(self) -> None: - """ - Validates that the migrations form a single chain of migrations from version 0 to the latest version. - Raises a MigrationError if there is a problem. - """ - if self.count == 0: - return - if self.latest_version == 0: - return - next_migration = self.get(from_version=0) - if next_migration is None: - raise MigrationError("Migration chain is fragmented") - touched_count = 1 - while next_migration is not None: - next_migration = self.get(next_migration.to_version) - if next_migration is not None: - touched_count += 1 - if touched_count != self.count: - raise MigrationError("Migration chain is fragmented") - - @property - def count(self) -> int: - """The count of registered migrations.""" - return len(self._migrations) - - @property - def latest_version(self) -> int: - """Gets latest to_version among registered migrations. Returns 0 if there are no migrations registered.""" - if self.count == 0: - return 0 - return sorted(self._migrations, key=lambda m: m.to_version)[-1].to_version +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration, MigrationError, MigrationSet class SQLiteMigrator: From ef8284f0092aadcaebc27579f0b4d89fae7032fe Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:41:47 +1100 Subject: [PATCH 130/515] fix(db): fix tests --- tests/aa_nodes/test_graph_execution_state.py | 6 +++--- tests/aa_nodes/test_invoker.py | 6 +++--- .../model_install/test_model_install.py | 18 +++++++++++++++++- .../model_records/test_model_records_sql.py | 9 +++++---- tests/test_sqlite_migrator.py | 4 +++- 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index d2850a12be..b5e5bde229 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -29,10 +29,10 @@ from invokeai.app.services.shared.graph import ( IterateInvocation, LibraryGraph, ) -from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase -from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger from .test_invoker import create_edge diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index cc4d409b0f..da450a9fd2 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -4,7 +4,7 @@ from pathlib import Path import pytest from invokeai.app.services.config.config_default import InvokeAIAppConfig -from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger # This import must happen before other invoke imports or test in other files(!!) break @@ -26,9 +26,9 @@ from invokeai.app.services.invoker import Invoker from invokeai.app.services.item_storage.item_storage_sqlite import SqliteItemStorage from invokeai.app.services.session_queue.session_queue_common import DEFAULT_QUEUE_ID from invokeai.app.services.shared.graph import Graph, GraphExecutionState, GraphInvocation, LibraryGraph -from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 @pytest.fixture diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index eec6e033e5..dcf9c0a0f3 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -19,6 +19,9 @@ from invokeai.app.services.model_install import ( ) from invokeai.app.services.model_records import ModelRecordServiceBase, ModelRecordServiceSQL, UnknownModelException from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.model_manager.config import BaseModelType, ModelType from invokeai.backend.util.logging import InvokeAILogger @@ -38,7 +41,20 @@ def app_config(datadir: Path) -> InvokeAIAppConfig: @pytest.fixture def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: - database = SqliteDatabase(app_config, InvokeAILogger.get_logger(config=app_config)) + logger = InvokeAILogger.get_logger(config=app_config) + database = SqliteDatabase(app_config, logger) + migrator = SQLiteMigrator( + db_path=database.database if isinstance(database.database, Path) else None, + conn=database.conn, + lock=database.lock, + logger=logger, + log_sql=app_config.log_sql, + ) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() + # this test uses a file database, so we need to reinitialize it after migrations + database.reinitialize() store: ModelRecordServiceBase = ModelRecordServiceSQL(database) return store diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index 69cf753bb4..3df42f3ee1 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -4,6 +4,7 @@ Test the refactored model config classes. from hashlib import sha256 from pathlib import Path +from typing import Any import pytest @@ -14,10 +15,10 @@ from invokeai.app.services.model_records import ( ModelRecordServiceSQL, UnknownModelException, ) -from invokeai.app.services.shared.sqlite.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase -from invokeai.app.services.shared.sqlite.sqlite_migrator import SQLiteMigrator +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.model_manager.config import ( BaseModelType, MainCheckpointConfig, @@ -30,7 +31,7 @@ from invokeai.backend.util.logging import InvokeAILogger @pytest.fixture -def store(datadir) -> ModelRecordServiceBase: +def store(datadir: Any) -> ModelRecordServiceBase: config = InvokeAIAppConfig(root=datadir) logger = InvokeAILogger.get_logger(config=config) db = SqliteDatabase(config, logger) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 05beae799e..e1ca6ad5af 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -9,12 +9,14 @@ import pytest from pydantic import ValidationError from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory -from invokeai.app.services.shared.sqlite.sqlite_migrator import ( +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import ( MigrateCallback, Migration, MigrationError, MigrationSet, MigrationVersionError, +) +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import ( SQLiteMigrator, ) From fefb78795f810f707bc77ded6d5107e5e1428cb6 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Mon, 11 Dec 2023 16:55:27 +0000 Subject: [PATCH 131/515] - Even_spilt overlap renamed to overlap_fraction - min_overlap removed * restrictions and round_to_8 - min_overlap handles tile size > image size by clipping the num tiles to 1. - Updated assert test on min_overlap. --- invokeai/app/invocations/tiles.py | 20 +++++--------------- invokeai/backend/tiles/tiles.py | 22 +++++++++++----------- invokeai/backend/tiles/utils.py | 5 +++++ tests/backend/tiles/test_tiles.py | 4 ++-- 4 files changed, 23 insertions(+), 28 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index beec084b7d..e368976b4b 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -88,7 +88,7 @@ class CalculateImageTilesEvenSplitInvocation(BaseInvocation): ge=1, description="Number of tiles to divide image into on the y axis", ) - overlap: float = InputField( + overlap_fraction: float = InputField( default=0.25, ge=0, lt=1, @@ -101,7 +101,7 @@ class CalculateImageTilesEvenSplitInvocation(BaseInvocation): image_width=self.image_width, num_tiles_x=self.num_tiles_x, num_tiles_y=self.num_tiles_y, - overlap=self.overlap, + overlap_fraction=self.overlap_fraction, ) return CalculateImageTilesOutput(tiles=tiles) @@ -120,18 +120,9 @@ class CalculateImageTilesMinimumOverlapInvocation(BaseInvocation): image_height: int = InputField( ge=1, default=1024, description="The image height, in pixels, to calculate tiles for." ) - tile_width: int = InputField(ge=1, default=576, multiple_of=8, description="The tile width, in pixels.") - tile_height: int = InputField(ge=1, default=576, multiple_of=8, description="The tile height, in pixels.") - min_overlap: int = InputField( - default=128, - ge=0, - multiple_of=8, - description="Minimum overlap between adjacent tiles, in pixels(must be a multiple of 8).", - ) - round_to_8: bool = InputField( - default=False, - description="Round outputs down to the nearest 8 (for pulling from a large noise field)", - ) + tile_width: int = InputField(ge=1, default=576, description="The tile width, in pixels.") + tile_height: int = InputField(ge=1, default=576, description="The tile height, in pixels.") + min_overlap: int = InputField(default=128, ge=0, description="Minimum overlap between adjacent tiles, in pixels.") def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput: tiles = calc_tiles_min_overlap( @@ -140,7 +131,6 @@ class CalculateImageTilesMinimumOverlapInvocation(BaseInvocation): tile_height=self.tile_height, tile_width=self.tile_width, min_overlap=self.min_overlap, - round_to_8=self.round_to_8, ) return CalculateImageTilesOutput(tiles=tiles) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 2f71db03cb..499558ce9d 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -102,7 +102,7 @@ def calc_tiles_with_overlap( def calc_tiles_even_split( - image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap: float = 0 + image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap_fraction: float = 0 ) -> list[Tile]: """Calculate the tile coordinates for a given image shape with the number of tiles requested. @@ -111,7 +111,7 @@ def calc_tiles_even_split( image_width (int): The image width in px. num_x_tiles (int): The number of tile to split the image into on the X-axis. num_y_tiles (int): The number of tile to split the image into on the Y-axis. - overlap (float, optional): The target overlap amount of the tiles size. Defaults to 0. + overlap_fraction (float, optional): The target overlap as fraction of the tiles size. Defaults to 0. Returns: list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. @@ -119,11 +119,15 @@ def calc_tiles_even_split( # Ensure tile size is divisible by 8 if image_width % LATENT_SCALE_FACTOR != 0 or image_height % LATENT_SCALE_FACTOR != 0: - raise ValueError(f"image size (({image_width}, {image_height})) must be divisible by 8") + raise ValueError(f"image size (({image_width}, {image_height})) must be divisible by {LATENT_SCALE_FACTOR}") # Calculate the overlap size based on the percentage and adjust it to be divisible by 8 (rounding up) - overlap_x = LATENT_SCALE_FACTOR * math.ceil(int((image_width / num_tiles_x) * overlap) / LATENT_SCALE_FACTOR) - overlap_y = LATENT_SCALE_FACTOR * math.ceil(int((image_height / num_tiles_y) * overlap) / LATENT_SCALE_FACTOR) + overlap_x = LATENT_SCALE_FACTOR * math.ceil( + int((image_width / num_tiles_x) * overlap_fraction) / LATENT_SCALE_FACTOR + ) + overlap_y = LATENT_SCALE_FACTOR * math.ceil( + int((image_height / num_tiles_y) * overlap_fraction) / LATENT_SCALE_FACTOR + ) # Calculate the tile size based on the number of tiles and overlap, and ensure it's divisible by 8 (rounding down) tile_size_x = LATENT_SCALE_FACTOR * math.floor( @@ -184,11 +188,11 @@ def calc_tiles_min_overlap( Returns: list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. """ - assert image_height >= tile_height - assert image_width >= tile_width + assert min_overlap < tile_height assert min_overlap < tile_width + # The If Else catches the case when the tile size is larger than the images size and just clips the number of tiles to 1 num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 num_tiles_y = ( math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1 @@ -200,14 +204,10 @@ def calc_tiles_min_overlap( # Calculate tile coordinates. (Ignore overlap values for now.) for tile_idx_y in range(num_tiles_y): top = (tile_idx_y * (image_height - tile_height)) // (num_tiles_y - 1) if num_tiles_y > 1 else 0 - if round_to_8: - top = LATENT_SCALE_FACTOR * (top // LATENT_SCALE_FACTOR) bottom = top + tile_height for tile_idx_x in range(num_tiles_x): left = (tile_idx_x * (image_width - tile_width)) // (num_tiles_x - 1) if num_tiles_x > 1 else 0 - if round_to_8: - left = LATENT_SCALE_FACTOR * (left // LATENT_SCALE_FACTOR) right = left + tile_width tile = Tile( diff --git a/invokeai/backend/tiles/utils.py b/invokeai/backend/tiles/utils.py index 8596d25840..dc6d914170 100644 --- a/invokeai/backend/tiles/utils.py +++ b/invokeai/backend/tiles/utils.py @@ -74,6 +74,9 @@ def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool return result # Assume RGB and convert to grey + # Could offer other options for the luminance conversion + # BT.709 [0.2126, 0.7152, 0.0722], BT.2020 [0.2627, 0.6780, 0.0593]) + # it might not have a huge impact due to the blur that is applied over the seam iag1 = np.dot(ia1, [0.2989, 0.5870, 0.1140]) # BT.601 perceived brightness iag2 = np.dot(ia2, [0.2989, 0.5870, 0.1140]) @@ -92,6 +95,7 @@ def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool min_x = gutter # Calc the energy in the difference + # Could offer different energy calculations e.g. Sobel or Scharr energy = np.abs(np.gradient(ia, axis=0)) + np.abs(np.gradient(ia, axis=1)) # Find the starting position of the seam @@ -107,6 +111,7 @@ def seam_blend(ia1: np.ndarray, ia2: np.ndarray, blend_amount: int, x_seam: bool lowest_energy_line[max_y - 1] = np.argmin(res[max_y - 1, min_x : max_x - 1]) # Calc the path of the seam + # could offer options for larger search than just 1 pixel by adjusting lpos and rpos for ypos in range(max_y - 2, -1, -1): lowest_pos = lowest_energy_line[ypos + 1] lpos = lowest_pos - 1 diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 87700f8d09..3ae7e2b91d 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -371,8 +371,8 @@ def test_calc_tiles_min_overlap_difficult_size_div8(): (128, 128, 128, 128, 127, False), # OK (128, 128, 128, 128, 0, False), # OK (128, 128, 64, 64, 0, False), # OK - (128, 128, 129, 128, 0, True), # tile_height exceeds image_height. - (128, 128, 128, 129, 0, True), # tile_width exceeds image_width. + (128, 128, 129, 128, 0, False), # tile_height exceeds image_height defaults to 1 tile. + (128, 128, 128, 129, 0, False), # tile_width exceeds image_width defaults to 1 tile. (128, 128, 64, 128, 64, True), # overlap equals tile_height. (128, 128, 128, 64, 64, True), # overlap equals tile_width. ], From c84526fae5f14e1faf26c890c504543b10dcf61f Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Mon, 11 Dec 2023 17:05:45 +0000 Subject: [PATCH 132/515] Fixed Tests that where using round_to_8 and removed redundant tests --- invokeai/backend/tiles/tiles.py | 1 - tests/backend/tiles/test_tiles.py | 117 ------------------------------ 2 files changed, 118 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 499558ce9d..1948f6624e 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -173,7 +173,6 @@ def calc_tiles_min_overlap( tile_height: int, tile_width: int, min_overlap: int = 0, - round_to_8: bool = False, ) -> list[Tile]: """Calculate the tile coordinates for a given image shape under a simple tiling scheme with overlaps. diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 3ae7e2b91d..3cda7f1f38 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -143,7 +143,6 @@ def test_calc_tiles_min_overlap_single_tile(): tile_height=512, tile_width=1024, min_overlap=64, - round_to_8=False, ) expected_tiles = [ @@ -165,7 +164,6 @@ def test_calc_tiles_min_overlap_evenly_divisible(): tile_height=320, tile_width=576, min_overlap=64, - round_to_8=False, ) expected_tiles = [ @@ -209,7 +207,6 @@ def test_calc_tiles_min_overlap_not_evenly_divisible(): tile_height=256, tile_width=512, min_overlap=64, - round_to_8=False, ) expected_tiles = [ @@ -244,120 +241,6 @@ def test_calc_tiles_min_overlap_not_evenly_divisible(): assert tiles == expected_tiles -def test_calc_tiles_min_overlap_difficult_size(): - """Test calc_tiles_min_overlap() behavior when the image is a difficult size to spilt evenly and keep div8.""" - # Parameters are a difficult size for other tile gen routines to calculate - tiles = calc_tiles_min_overlap( - image_height=1000, - image_width=1000, - tile_height=512, - tile_width=512, - min_overlap=64, - round_to_8=False, - ) - - expected_tiles = [ - # Row 0 - Tile( - coords=TBLR(top=0, bottom=512, left=0, right=512), - overlap=TBLR(top=0, bottom=268, left=0, right=268), - ), - Tile( - coords=TBLR(top=0, bottom=512, left=244, right=756), - overlap=TBLR(top=0, bottom=268, left=268, right=268), - ), - Tile( - coords=TBLR(top=0, bottom=512, left=488, right=1000), - overlap=TBLR(top=0, bottom=268, left=268, right=0), - ), - # Row 1 - Tile( - coords=TBLR(top=244, bottom=756, left=0, right=512), - overlap=TBLR(top=268, bottom=268, left=0, right=268), - ), - Tile( - coords=TBLR(top=244, bottom=756, left=244, right=756), - overlap=TBLR(top=268, bottom=268, left=268, right=268), - ), - Tile( - coords=TBLR(top=244, bottom=756, left=488, right=1000), - overlap=TBLR(top=268, bottom=268, left=268, right=0), - ), - # Row 2 - Tile( - coords=TBLR(top=488, bottom=1000, left=0, right=512), - overlap=TBLR(top=268, bottom=0, left=0, right=268), - ), - Tile( - coords=TBLR(top=488, bottom=1000, left=244, right=756), - overlap=TBLR(top=268, bottom=0, left=268, right=268), - ), - Tile( - coords=TBLR(top=488, bottom=1000, left=488, right=1000), - overlap=TBLR(top=268, bottom=0, left=268, right=0), - ), - ] - - assert tiles == expected_tiles - - -def test_calc_tiles_min_overlap_difficult_size_div8(): - """Test calc_tiles_min_overlap() behavior when the image is a difficult size to spilt evenly and keep div8.""" - # Parameters are a difficult size for other tile gen routines to calculate - tiles = calc_tiles_min_overlap( - image_height=1000, - image_width=1000, - tile_height=512, - tile_width=512, - min_overlap=64, - round_to_8=True, - ) - - expected_tiles = [ - # Row 0 - Tile( - coords=TBLR(top=0, bottom=512, left=0, right=512), - overlap=TBLR(top=0, bottom=272, left=0, right=272), - ), - Tile( - coords=TBLR(top=0, bottom=512, left=240, right=752), - overlap=TBLR(top=0, bottom=272, left=272, right=264), - ), - Tile( - coords=TBLR(top=0, bottom=512, left=488, right=1000), - overlap=TBLR(top=0, bottom=272, left=264, right=0), - ), - # Row 1 - Tile( - coords=TBLR(top=240, bottom=752, left=0, right=512), - overlap=TBLR(top=272, bottom=264, left=0, right=272), - ), - Tile( - coords=TBLR(top=240, bottom=752, left=240, right=752), - overlap=TBLR(top=272, bottom=264, left=272, right=264), - ), - Tile( - coords=TBLR(top=240, bottom=752, left=488, right=1000), - overlap=TBLR(top=272, bottom=264, left=264, right=0), - ), - # Row 2 - Tile( - coords=TBLR(top=488, bottom=1000, left=0, right=512), - overlap=TBLR(top=264, bottom=0, left=0, right=272), - ), - Tile( - coords=TBLR(top=488, bottom=1000, left=240, right=752), - overlap=TBLR(top=264, bottom=0, left=272, right=264), - ), - Tile( - coords=TBLR(top=488, bottom=1000, left=488, right=1000), - overlap=TBLR(top=264, bottom=0, left=264, right=0), - ), - ] - - assert tiles == expected_tiles - - @pytest.mark.parametrize( [ "image_height", From 0852fd4e88d1ca6094aa84a16cb52d6b00f9c6f3 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Mon, 11 Dec 2023 17:17:29 +0000 Subject: [PATCH 133/515] Updated tests for even_split overlap renamed to overlap_fraction --- tests/backend/tiles/test_tiles.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 3cda7f1f38..8ddd44f70b 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -283,7 +283,9 @@ def test_calc_tiles_min_overlap_input_validation( def test_calc_tiles_even_split_single_tile(): """Test calc_tiles_even_split() behavior when a single tile covers the image.""" - tiles = calc_tiles_even_split(image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap_fraction=0.25 + ) expected_tiles = [ Tile( @@ -298,7 +300,9 @@ def test_calc_tiles_even_split_single_tile(): def test_calc_tiles_even_split_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image is evenly covered by multiple tiles.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split(image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap_fraction=0.25 + ) expected_tiles = [ # Row 0 @@ -334,7 +338,9 @@ def test_calc_tiles_even_split_evenly_divisible(): def test_calc_tiles_even_split_not_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split(image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap_fraction=0.25 + ) expected_tiles = [ # Row 0 @@ -371,7 +377,9 @@ def test_calc_tiles_even_split_not_evenly_divisible(): def test_calc_tiles_even_split_difficult_size(): """Test calc_tiles_even_split() behavior when the image is a difficult size to spilt evenly and keep div8.""" # Parameters are a difficult size for other tile gen routines to calculate - tiles = calc_tiles_even_split(image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap=0.25) + tiles = calc_tiles_even_split( + image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap_fraction=0.25 + ) expected_tiles = [ # Row 0 @@ -411,15 +419,15 @@ def test_calc_tiles_even_split_input_validation( image_width: int, num_tiles_x: int, num_tiles_y: int, - overlap: float, + overlap_fraction: float, raises: bool, ): """Test that calc_tiles_even_split() raises an exception if the inputs are invalid.""" if raises: with pytest.raises(ValueError): - calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap_fraction) else: - calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap_fraction) ############################################# From fbbc1037cdc91408a9212e38a54e24b3d766429b Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Mon, 11 Dec 2023 17:23:28 +0000 Subject: [PATCH 134/515] missed a rename of overlap to overlap_fraction in test for even_spilt --- tests/backend/tiles/test_tiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 8ddd44f70b..0b18f9ed54 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -406,7 +406,7 @@ def test_calc_tiles_even_split_difficult_size(): @pytest.mark.parametrize( - ["image_height", "image_width", "num_tiles_x", "num_tiles_y", "overlap", "raises"], + ["image_height", "image_width", "num_tiles_x", "num_tiles_y", "overlap_fraction", "raises"], [ (128, 128, 1, 1, 0.25, False), # OK (128, 128, 1, 1, 0, False), # OK From 67ed4a02456205efd7c6ff257ca8781f1409553a Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 16 Nov 2023 12:34:09 +1100 Subject: [PATCH 135/515] Respect CONTAINER_UID in Dockerfile chown CONTAINER_UID is used for the user ID within the container, however I noticed the UID was hard coded to 1000 in the Dockerfile chown -R command. This leaves the default as 1000, but allows it to be overrriden by setting CONTAINER_UID. --- docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 6aa6a43a1a..90d0b4b715 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -100,6 +100,7 @@ ENV INVOKEAI_SRC=/opt/invokeai ENV VIRTUAL_ENV=/opt/venv/invokeai ENV INVOKEAI_ROOT=/invokeai ENV PATH="$VIRTUAL_ENV/bin:$INVOKEAI_SRC:$PATH" +ENV CONTAINER_UID=${CONTAINER_UID:-1000} # --link requires buldkit w/ dockerfile syntax 1.4 COPY --link --from=builder ${INVOKEAI_SRC} ${INVOKEAI_SRC} @@ -117,7 +118,7 @@ WORKDIR ${INVOKEAI_SRC} RUN cd /usr/lib/$(uname -p)-linux-gnu/pkgconfig/ && ln -sf opencv4.pc opencv.pc RUN python3 -c "from patchmatch import patch_match" -RUN mkdir -p ${INVOKEAI_ROOT} && chown -R 1000:1000 ${INVOKEAI_ROOT} +RUN mkdir -p ${INVOKEAI_ROOT} && chown -R ${CONTAINER_UID}:${CONTAINER_UID} ${INVOKEAI_ROOT} COPY docker/docker-entrypoint.sh ./ ENTRYPOINT ["/opt/invokeai/docker-entrypoint.sh"] From 11f4a4814438260442bea67555fde0c2936627b7 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 21 Nov 2023 09:40:40 +1100 Subject: [PATCH 136/515] Add container GID --- docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 90d0b4b715..a85cc36be7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -101,6 +101,7 @@ ENV VIRTUAL_ENV=/opt/venv/invokeai ENV INVOKEAI_ROOT=/invokeai ENV PATH="$VIRTUAL_ENV/bin:$INVOKEAI_SRC:$PATH" ENV CONTAINER_UID=${CONTAINER_UID:-1000} +ENV CONTAINER_GID=${CONTAINER_GID:-1000} # --link requires buldkit w/ dockerfile syntax 1.4 COPY --link --from=builder ${INVOKEAI_SRC} ${INVOKEAI_SRC} @@ -118,7 +119,7 @@ WORKDIR ${INVOKEAI_SRC} RUN cd /usr/lib/$(uname -p)-linux-gnu/pkgconfig/ && ln -sf opencv4.pc opencv.pc RUN python3 -c "from patchmatch import patch_match" -RUN mkdir -p ${INVOKEAI_ROOT} && chown -R ${CONTAINER_UID}:${CONTAINER_UID} ${INVOKEAI_ROOT} +RUN mkdir -p ${INVOKEAI_ROOT} && chown -R ${CONTAINER_UID}:${CONTAINER_GID} ${INVOKEAI_ROOT} COPY docker/docker-entrypoint.sh ./ ENTRYPOINT ["/opt/invokeai/docker-entrypoint.sh"] From 55acc16b2d43ac12fcc3672308cb466778ecceaa Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 09:43:09 +1100 Subject: [PATCH 137/515] feat(db): require migration versions to be consecutive --- .../shared/sqlite_migrator/sqlite_migrator_common.py | 4 ++-- tests/test_sqlite_migrator.py | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index 5624a53657..8c71c1d969 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -40,8 +40,8 @@ class Migration(BaseModel): @model_validator(mode="after") def validate_to_version(self) -> "Migration": - if self.to_version <= self.from_version: - raise ValueError("to_version must be greater than from_version") + if self.to_version != self.from_version + 1: + raise ValueError("to_version must be one greater than from_version") return self def __hash__(self) -> int: diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index e1ca6ad5af..11a9b0ef78 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -81,9 +81,11 @@ def create_migrate(i: int) -> MigrateCallback: return migrate -def test_migration_to_version_gt_from_version(no_op_migrate_callback: MigrateCallback) -> None: - with pytest.raises(ValidationError, match="greater_than_equal"): - Migration(from_version=1, to_version=0, migrate=no_op_migrate_callback) +def test_migration_to_version_is_one_gt_from_version(no_op_migrate_callback: MigrateCallback) -> None: + with pytest.raises(ValidationError, match="to_version must be one greater than from_version"): + Migration(from_version=0, to_version=2, migrate=no_op_migrate_callback) + # not raising is sufficient + Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) def test_migration_hash(no_op_migrate_callback: MigrateCallback) -> None: From afe4e55bf9a1e7b7cf0163a672c4ea5e9378e48b Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 09:52:03 +1100 Subject: [PATCH 138/515] feat(db): simplify migration registration validation With the previous change to assert that the to_version == from_version + 1, this validation can be simpler. --- .../sqlite_migrator/sqlite_migrator_common.py | 8 ++++---- tests/test_sqlite_migrator.py | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index 8c71c1d969..0c395f54d6 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -65,10 +65,10 @@ class MigrationSet: def register(self, migration: Migration) -> None: """Registers a migration.""" - if any(m.from_version == migration.from_version for m in self._migrations): - raise MigrationVersionError(f"Migration from {migration.from_version} already registered") - if any(m.to_version == migration.to_version for m in self._migrations): - raise MigrationVersionError(f"Migration to {migration.to_version} already registered") + migration_from_already_registered = any(m.from_version == migration.from_version for m in self._migrations) + migration_to_already_registered = any(m.to_version == migration.to_version for m in self._migrations) + if migration_from_already_registered or migration_to_already_registered: + raise MigrationVersionError("Migration with from_version or to_version already registered") self._migrations.add(migration) def get(self, from_version: int) -> Optional[Migration]: diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 11a9b0ef78..630fb5dd3b 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -116,14 +116,16 @@ def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: def test_migration_set_may_not_register_dupes( migrator: SQLiteMigrator, no_op_migrate_callback: MigrateCallback ) -> None: - migrate_1_to_2 = Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) - migrate_0_to_2 = Migration(from_version=0, to_version=2, migrate=no_op_migrate_callback) - migrate_1_to_3 = Migration(from_version=1, to_version=3, migrate=no_op_migrate_callback) - migrator._migration_set.register(migrate_1_to_2) - with pytest.raises(MigrationVersionError, match=r"Migration to 2 already registered"): - migrator._migration_set.register(migrate_0_to_2) - with pytest.raises(MigrationVersionError, match=r"Migration from 1 already registered"): - migrator._migration_set.register(migrate_1_to_3) + migrate_0_to_1_a = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) + migrate_0_to_1_b = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) + migrator._migration_set.register(migrate_0_to_1_a) + with pytest.raises(MigrationVersionError, match=r"Migration with from_version or to_version already registered"): + migrator._migration_set.register(migrate_0_to_1_b) + migrate_1_to_2_a = Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) + migrate_1_to_2_b = Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) + migrator._migration_set.register(migrate_1_to_2_a) + with pytest.raises(MigrationVersionError, match=r"Migration with from_version or to_version already registered"): + migrator._migration_set.register(migrate_1_to_2_b) def test_migration_set_gets_migration(migration_no_op: Migration) -> None: From 417db71471a21fa1918621d77e058a1e94f349da Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 10:29:46 +1100 Subject: [PATCH 139/515] feat(db): decouple SqliteDatabase from config object - Simplify init args to path (None means use memory), logger, and verbose - Add docstrings to SqliteDatabase (it had almost none) - Update all usages of the class --- invokeai/app/api/dependencies.py | 11 ++- .../services/shared/sqlite/sqlite_database.py | 75 ++++++++++++------- .../backend/model_manager/migrate_to_db.py | 3 +- tests/aa_nodes/test_graph_execution_state.py | 6 +- tests/aa_nodes/test_invoker.py | 6 +- tests/aa_nodes/test_sqlite.py | 7 +- .../model_install/test_model_install.py | 13 ++-- .../model_records/test_model_records_sql.py | 6 +- 8 files changed, 80 insertions(+), 47 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index a9e68235d5..32b3e40715 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -2,7 +2,6 @@ from functools import partial from logging import Logger -from pathlib import Path from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 @@ -75,10 +74,11 @@ class ApiDependencies: output_folder = config.output_path image_files = DiskImageFileStorage(f"{output_folder}/images") - db = SqliteDatabase(config, logger) + db_path = None if config.use_memory_db else config.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) migrator = SQLiteMigrator( - db_path=db.database if isinstance(db.database, Path) else None, + db_path=db.db_path, conn=db.conn, lock=db.lock, logger=logger, @@ -89,7 +89,10 @@ class ApiDependencies: migrator.register_migration(migration_2) did_migrate = migrator.run_migrations() - if not db.is_memory and did_migrate: + # We need to reinitialize the database if we migrated, but only if we are using a file database. + # This closes the SqliteDatabase's connection and re-runs its `__init__` logic. + # If we do this with a memory database, we wipe the db. + if not db.db_path and did_migrate: db.reinitialize() configuration = config diff --git a/invokeai/app/services/shared/sqlite/sqlite_database.py b/invokeai/app/services/shared/sqlite/sqlite_database.py index 10d63c44e7..be8b6284bf 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_database.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -3,58 +3,83 @@ import threading from logging import Logger from pathlib import Path -from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory class SqliteDatabase: - database: Path | str # Must declare this here to satisfy type checker + """ + Manages a connection to an SQLite database. - def __init__(self, config: InvokeAIAppConfig, logger: Logger) -> None: - self.initialize(config, logger) + This is a light wrapper around the `sqlite3` module, providing a few conveniences: + - The database file is written to disk if it does not exist. + - Foreign key constraints are enabled by default. + - The connection is configured to use the `sqlite3.Row` row factory. + - A `conn` attribute is provided to access the connection. + - A `lock` attribute is provided to lock the database connection. + - A `clean` method to run the VACUUM command and report on the freed space. + - A `reinitialize` method to close the connection and re-run the init. + - A `close` method to close the connection. - def initialize(self, config: InvokeAIAppConfig, logger: Logger) -> None: - self._logger = logger - self._config = config - self.is_memory = False - if self._config.use_memory_db: - self.database = sqlite_memory - self.is_memory = True + :param db_path: Path to the database file. If None, an in-memory database is used. + :param logger: Logger to use for logging. + :param verbose: Whether to log SQL statements. Provides `logger.debug` as the SQLite trace callback. + """ + + def __init__(self, db_path: Path | None, logger: Logger, verbose: bool = False) -> None: + self.initialize(db_path=db_path, logger=logger, verbose=verbose) + + def initialize(self, db_path: Path | None, logger: Logger, verbose: bool = False) -> None: + """Initializes the database. This is used internally by the class constructor.""" + self.logger = logger + self.db_path = db_path + self.verbose = verbose + + if not self.db_path: logger.info("Initializing in-memory database") else: - self.database = self._config.db_path - self.database.parent.mkdir(parents=True, exist_ok=True) - self._logger.info(f"Initializing database at {self.database}") + self.db_path.parent.mkdir(parents=True, exist_ok=True) + self.logger.info(f"Initializing database at {self.db_path}") - self.conn = sqlite3.connect(database=self.database, check_same_thread=False) + self.conn = sqlite3.connect(database=self.db_path or sqlite_memory, check_same_thread=False) self.lock = threading.RLock() self.conn.row_factory = sqlite3.Row - if self._config.log_sql: - self.conn.set_trace_callback(self._logger.debug) + if self.verbose: + self.conn.set_trace_callback(self.logger.debug) self.conn.execute("PRAGMA foreign_keys = ON;") def reinitialize(self) -> None: - """Reinitializes the database. Needed after migration.""" + """ + Re-initializes the database by closing the connection and re-running the init. + Warning: This will wipe the database if it is an in-memory database. + """ self.close() - self.initialize(self._config, self._logger) + self.initialize(db_path=self.db_path, logger=self.logger, verbose=self.verbose) def close(self) -> None: + """ + Closes the connection to the database. + Warning: This will wipe the database if it is an in-memory database. + """ self.conn.close() def clean(self) -> None: + """ + Cleans the database by running the VACUUM command, reporting on the freed space. + """ + # No need to clean in-memory database + if not self.db_path: + return with self.lock: try: - if self.database == sqlite_memory: - return - initial_db_size = Path(self.database).stat().st_size + initial_db_size = Path(self.db_path).stat().st_size self.conn.execute("VACUUM;") self.conn.commit() - final_db_size = Path(self.database).stat().st_size + final_db_size = Path(self.db_path).stat().st_size freed_space_in_mb = round((initial_db_size - final_db_size) / 1024 / 1024, 2) if freed_space_in_mb > 0: - self._logger.info(f"Cleaned database (freed {freed_space_in_mb}MB)") + self.logger.info(f"Cleaned database (freed {freed_space_in_mb}MB)") except Exception as e: - self._logger.error(f"Error cleaning database: {e}") + self.logger.error(f"Error cleaning database: {e}") raise diff --git a/invokeai/backend/model_manager/migrate_to_db.py b/invokeai/backend/model_manager/migrate_to_db.py index eac25a44a0..c744ddd7d3 100644 --- a/invokeai/backend/model_manager/migrate_to_db.py +++ b/invokeai/backend/model_manager/migrate_to_db.py @@ -47,7 +47,8 @@ class MigrateModelYamlToDb: def get_db(self) -> ModelRecordServiceSQL: """Fetch the sqlite3 database for this installation.""" - db = SqliteDatabase(self.config, self.logger) + db_path = None if self.config.use_memory_db else self.config.db_path + db = SqliteDatabase(db_path=db_path, logger=self.logger, verbose=self.config.log_sql) return ModelRecordServiceSQL(db) def get_yaml(self) -> DictConfig: diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index b5e5bde229..b2596ea181 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -1,5 +1,4 @@ import logging -from pathlib import Path import pytest @@ -54,9 +53,10 @@ def simple_graph(): def mock_services() -> InvocationServices: configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) logger = InvokeAILogger.get_logger() - db = SqliteDatabase(configuration, logger) + db_path = None if configuration.use_memory_db else configuration.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=configuration.log_sql) migrator = SQLiteMigrator( - db_path=db.database if isinstance(db.database, Path) else None, + db_path=db.db_path, conn=db.conn, lock=db.lock, logger=logger, diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index da450a9fd2..e509703f78 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -1,5 +1,4 @@ import logging -from pathlib import Path import pytest @@ -58,9 +57,10 @@ def graph_with_subgraph(): def mock_services() -> InvocationServices: configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) logger = InvokeAILogger.get_logger() - db = SqliteDatabase(configuration, logger) + db_path = None if configuration.use_memory_db else configuration.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=configuration.log_sql) migrator = SQLiteMigrator( - db_path=db.database if isinstance(db.database, Path) else None, + db_path=db.db_path, conn=db.conn, lock=db.lock, logger=logger, diff --git a/tests/aa_nodes/test_sqlite.py b/tests/aa_nodes/test_sqlite.py index 439f6d0dd2..32e8c98ac1 100644 --- a/tests/aa_nodes/test_sqlite.py +++ b/tests/aa_nodes/test_sqlite.py @@ -15,8 +15,11 @@ class TestModel(BaseModel): @pytest.fixture def db() -> SqliteItemStorage[TestModel]: - sqlite_db = SqliteDatabase(InvokeAIAppConfig(use_memory_db=True), InvokeAILogger.get_logger()) - sqlite_item_storage = SqliteItemStorage[TestModel](db=sqlite_db, table_name="test", id_field="id") + config = InvokeAIAppConfig(use_memory_db=True) + logger = InvokeAILogger.get_logger() + db_path = None if config.use_memory_db else config.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) + sqlite_item_storage = SqliteItemStorage[TestModel](db=db, table_name="test", id_field="id") return sqlite_item_storage diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index dcf9c0a0f3..9cb1f67f0a 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -42,11 +42,12 @@ def app_config(datadir: Path) -> InvokeAIAppConfig: @pytest.fixture def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: logger = InvokeAILogger.get_logger(config=app_config) - database = SqliteDatabase(app_config, logger) + db_path = None if app_config.use_memory_db else app_config.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=app_config.log_sql) migrator = SQLiteMigrator( - db_path=database.database if isinstance(database.database, Path) else None, - conn=database.conn, - lock=database.lock, + db_path=db.db_path, + conn=db.conn, + lock=db.lock, logger=logger, log_sql=app_config.log_sql, ) @@ -54,8 +55,8 @@ def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: migrator.register_migration(migration_2) migrator.run_migrations() # this test uses a file database, so we need to reinitialize it after migrations - database.reinitialize() - store: ModelRecordServiceBase = ModelRecordServiceSQL(database) + db.reinitialize() + store: ModelRecordServiceBase = ModelRecordServiceSQL(db) return store diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index 3df42f3ee1..1be0498836 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -3,7 +3,6 @@ Test the refactored model config classes. """ from hashlib import sha256 -from pathlib import Path from typing import Any import pytest @@ -34,9 +33,10 @@ from invokeai.backend.util.logging import InvokeAILogger def store(datadir: Any) -> ModelRecordServiceBase: config = InvokeAIAppConfig(root=datadir) logger = InvokeAILogger.get_logger(config=config) - db = SqliteDatabase(config, logger) + db_path = None if config.use_memory_db else config.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) migrator = SQLiteMigrator( - db_path=db.database if isinstance(db.database, Path) else None, + db_path=db.db_path, conn=db.conn, lock=db.lock, logger=logger, From 3414437eea0f29848ec521cbe83f80e922471052 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 10:46:08 +1100 Subject: [PATCH 140/515] feat(db): instantiate SqliteMigrator with a SqliteDatabase Simplifies a couple things: - Init is more straightforward - It's clear in the migrator that the connection we are working with is related to the SqliteDatabase --- invokeai/app/api/dependencies.py | 8 +-- .../sqlite_migrator/sqlite_migrator_impl.py | 54 ++++++--------- tests/aa_nodes/test_graph_execution_state.py | 8 +-- tests/aa_nodes/test_invoker.py | 8 +-- .../model_install/test_model_install.py | 8 +-- .../model_records/test_model_records_sql.py | 8 +-- tests/test_sqlite_migrator.py | 65 ++++++++++--------- 7 files changed, 58 insertions(+), 101 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 32b3e40715..151c8edf7f 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -77,13 +77,7 @@ class ApiDependencies: db_path = None if config.use_memory_db else config.db_path db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) - migrator = SQLiteMigrator( - db_path=db.db_path, - conn=db.conn, - lock=db.lock, - logger=logger, - log_sql=config.log_sql, - ) + migrator = SQLiteMigrator(db=db) migration_2.register_post_callback(partial(migrate_embedded_workflows, logger=logger, image_files=image_files)) migrator.register_migration(migration_1) migrator.register_migration(migration_2) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index 129d68451c..33035b58c2 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -1,11 +1,10 @@ import shutil import sqlite3 -import threading from datetime import datetime -from logging import Logger from pathlib import Path from typing import Optional +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration, MigrationError, MigrationSet @@ -30,26 +29,15 @@ class SQLiteMigrator: backup_path: Optional[Path] = None - def __init__( - self, - db_path: Path | None, - conn: sqlite3.Connection, - lock: threading.RLock, - logger: Logger, - log_sql: bool = False, - ) -> None: - self._lock = lock - self._db_path = db_path - self._logger = logger - self._conn = conn - self._log_sql = log_sql - self._cursor = self._conn.cursor() + def __init__(self, db: SqliteDatabase) -> None: + self._db = db + self._logger = db.logger self._migration_set = MigrationSet() # The presence of an temp database file indicates a catastrophic failure of a previous migration. - if self._db_path and self._get_temp_db_path(self._db_path).is_file(): + if self._db.db_path and self._get_temp_db_path(self._db.db_path).is_file(): self._logger.warning("Previous migration failed! Trying again...") - self._get_temp_db_path(self._db_path).unlink() + self._get_temp_db_path(self._db.db_path).unlink() def register_migration(self, migration: Migration) -> None: """Registers a migration.""" @@ -58,43 +46,41 @@ class SQLiteMigrator: def run_migrations(self) -> bool: """Migrates the database to the latest version.""" - with self._lock: + with self._db.lock: # This throws if there is a problem. self._migration_set.validate_migration_chain() - self._create_migrations_table(cursor=self._cursor) + cursor = self._db.conn.cursor() + self._create_migrations_table(cursor=cursor) if self._migration_set.count == 0: self._logger.debug("No migrations registered") return False - if self._get_current_version(self._cursor) == self._migration_set.latest_version: + if self._get_current_version(cursor=cursor) == self._migration_set.latest_version: self._logger.debug("Database is up to date, no migrations to run") return False self._logger.info("Database update needed") - if self._db_path: + if self._db.db_path: # We are using a file database. Create a copy of the database to run the migrations on. - temp_db_path = self._create_temp_db(self._db_path) + temp_db_path = self._create_temp_db(self._db.db_path) self._logger.info(f"Copied database to {temp_db_path} for migration") - temp_db_conn = sqlite3.connect(temp_db_path) - # We have to re-set this because we just created a new connection. - if self._log_sql: - temp_db_conn.set_trace_callback(self._logger.debug) - temp_db_cursor = temp_db_conn.cursor() + temp_db = SqliteDatabase(db_path=temp_db_path, logger=self._logger, verbose=self._db.verbose) + temp_db_cursor = temp_db.conn.cursor() self._run_migrations(temp_db_cursor) # Close the connections, copy the original database as a backup, and move the temp database to the # original database's path. - temp_db_conn.close() - self._conn.close() + temp_db.close() + self._db.close() backup_db_path = self._finalize_migration( temp_db_path=temp_db_path, - original_db_path=self._db_path, + original_db_path=self._db.db_path, ) self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") else: # We are using a memory database. No special backup or special handling needed. - self._run_migrations(self._cursor) + self._run_migrations(cursor) self._logger.info("Database updated successfully") return True @@ -108,7 +94,7 @@ class SQLiteMigrator: def _run_migration(self, migration: Migration, temp_db_cursor: sqlite3.Cursor) -> None: """Runs a single migration.""" - with self._lock: + with self._db.lock: try: if self._get_current_version(temp_db_cursor) != migration.from_version: raise MigrationError( @@ -145,7 +131,7 @@ class SQLiteMigrator: def _create_migrations_table(self, cursor: sqlite3.Cursor) -> None: """Creates the migrations table for the database, if one does not already exist.""" - with self._lock: + with self._db.lock: try: cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='migrations';") if cursor.fetchone() is not None: diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index b2596ea181..609b0c3736 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -55,13 +55,7 @@ def mock_services() -> InvocationServices: logger = InvokeAILogger.get_logger() db_path = None if configuration.use_memory_db else configuration.db_path db = SqliteDatabase(db_path=db_path, logger=logger, verbose=configuration.log_sql) - migrator = SQLiteMigrator( - db_path=db.db_path, - conn=db.conn, - lock=db.lock, - logger=logger, - log_sql=configuration.log_sql, - ) + migrator = SQLiteMigrator(db=db) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index e509703f78..866287c461 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -59,13 +59,7 @@ def mock_services() -> InvocationServices: logger = InvokeAILogger.get_logger() db_path = None if configuration.use_memory_db else configuration.db_path db = SqliteDatabase(db_path=db_path, logger=logger, verbose=configuration.log_sql) - migrator = SQLiteMigrator( - db_path=db.db_path, - conn=db.conn, - lock=db.lock, - logger=logger, - log_sql=configuration.log_sql, - ) + migrator = SQLiteMigrator(db=db) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 9cb1f67f0a..58515cc273 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -44,13 +44,7 @@ def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: logger = InvokeAILogger.get_logger(config=app_config) db_path = None if app_config.use_memory_db else app_config.db_path db = SqliteDatabase(db_path=db_path, logger=logger, verbose=app_config.log_sql) - migrator = SQLiteMigrator( - db_path=db.db_path, - conn=db.conn, - lock=db.lock, - logger=logger, - log_sql=app_config.log_sql, - ) + migrator = SQLiteMigrator(db=db) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index 1be0498836..235c8f3cff 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -35,13 +35,7 @@ def store(datadir: Any) -> ModelRecordServiceBase: logger = InvokeAILogger.get_logger(config=config) db_path = None if config.use_memory_db else config.db_path db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) - migrator = SQLiteMigrator( - db_path=db.db_path, - conn=db.conn, - lock=db.lock, - logger=logger, - log_sql=config.log_sql, - ) + migrator = SQLiteMigrator(db=db) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 630fb5dd3b..109cc88472 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -1,5 +1,4 @@ import sqlite3 -import threading from contextlib import closing from logging import Logger from pathlib import Path @@ -8,7 +7,7 @@ from tempfile import TemporaryDirectory import pytest from pydantic import ValidationError -from invokeai.app.services.shared.sqlite.sqlite_common import sqlite_memory +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import ( MigrateCallback, Migration, @@ -27,14 +26,9 @@ def logger() -> Logger: @pytest.fixture -def lock() -> threading.RLock: - return threading.RLock() - - -@pytest.fixture -def migrator(logger: Logger, lock: threading.RLock) -> SQLiteMigrator: - conn = sqlite3.connect(sqlite_memory, check_same_thread=False) - return SQLiteMigrator(conn=conn, db_path=None, lock=lock, logger=logger) +def migrator(logger: Logger) -> SQLiteMigrator: + db = SqliteDatabase(db_path=None, logger=logger, verbose=False) + return SQLiteMigrator(db=db) @pytest.fixture @@ -176,50 +170,55 @@ def test_migrator_registers_migration(migrator: SQLiteMigrator, migration_no_op: def test_migrator_creates_migrations_table(migrator: SQLiteMigrator) -> None: - migrator._create_migrations_table(migrator._cursor) - migrator._cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='migrations';") - assert migrator._cursor.fetchone() is not None + cursor = migrator._db.conn.cursor() + migrator._create_migrations_table(cursor) + cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='migrations';") + assert cursor.fetchone() is not None def test_migrator_migration_sets_version(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: - migrator._create_migrations_table(migrator._cursor) + cursor = migrator._db.conn.cursor() + migrator._create_migrations_table(cursor) migrator.register_migration(migration_no_op) migrator.run_migrations() - migrator._cursor.execute("SELECT MAX(version) FROM migrations;") - assert migrator._cursor.fetchone()[0] == 1 + cursor.execute("SELECT MAX(version) FROM migrations;") + assert cursor.fetchone()[0] == 1 def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: - assert migrator._get_current_version(migrator._cursor) == 0 - migrator._create_migrations_table(migrator._cursor) - assert migrator._get_current_version(migrator._cursor) == 0 + cursor = migrator._db.conn.cursor() + assert migrator._get_current_version(cursor) == 0 + migrator._create_migrations_table(cursor) + assert migrator._get_current_version(cursor) == 0 migrator.register_migration(migration_no_op) migrator.run_migrations() - assert migrator._get_current_version(migrator._cursor) == 1 + assert migrator._get_current_version(cursor) == 1 def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_create_test_table: Migration) -> None: - migrator._create_migrations_table(migrator._cursor) - migrator._run_migration(migration_create_test_table, migrator._cursor) - assert migrator._get_current_version(migrator._cursor) == 1 - migrator._cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") - assert migrator._cursor.fetchone() is not None + cursor = migrator._db.conn.cursor() + migrator._create_migrations_table(cursor) + migrator._run_migration(migration_create_test_table, cursor) + assert migrator._get_current_version(cursor) == 1 + cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") + assert cursor.fetchone() is not None def test_migrator_runs_all_migrations_in_memory(migrator: SQLiteMigrator) -> None: + cursor = migrator._db.conn.cursor() migrations = [Migration(from_version=i, to_version=i + 1, migrate=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() - assert migrator._get_current_version(migrator._cursor) == 3 + assert migrator._get_current_version(cursor) == 3 -def test_migrator_runs_all_migrations_file(logger: Logger, lock: threading.RLock) -> None: +def test_migrator_runs_all_migrations_file(logger: Logger) -> None: with TemporaryDirectory() as tempdir: original_db_path = Path(tempdir) / "invokeai.db" # The Migrator closes the database when it finishes; we cannot use a context manager. - original_db_conn = sqlite3.connect(original_db_path) - migrator = SQLiteMigrator(conn=original_db_conn, db_path=original_db_path, lock=lock, logger=logger) + db = SqliteDatabase(db_path=original_db_path, logger=logger, verbose=False) + migrator = SQLiteMigrator(db=db) migrations = [Migration(from_version=i, to_version=i + 1, migrate=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) @@ -272,18 +271,20 @@ def test_migrator_finalizes() -> None: def test_migrator_makes_no_changes_on_failed_migration( migrator: SQLiteMigrator, migration_no_op: Migration, failing_migrate_callback: MigrateCallback ) -> None: + cursor = migrator._db.conn.cursor() migrator.register_migration(migration_no_op) migrator.run_migrations() - assert migrator._get_current_version(migrator._cursor) == 1 + assert migrator._get_current_version(cursor) == 1 migrator.register_migration(Migration(from_version=1, to_version=2, migrate=failing_migrate_callback)) with pytest.raises(MigrationError, match="Bad migration"): migrator.run_migrations() - assert migrator._get_current_version(migrator._cursor) == 1 + assert migrator._get_current_version(cursor) == 1 def test_idempotent_migrations(migrator: SQLiteMigrator, migration_create_test_table: Migration) -> None: + cursor = migrator._db.conn.cursor() migrator.register_migration(migration_create_test_table) migrator.run_migrations() # not throwing is sufficient migrator.run_migrations() - assert migrator._get_current_version(migrator._cursor) == 1 + assert migrator._get_current_version(cursor) == 1 From c5ba4f2ea52e8b98f3c401fdb186cc54adddbfd7 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:12:46 +1100 Subject: [PATCH 141/515] feat(db): remove file backups Instead of mucking about with the filesystem, we rely on SQLite transactions to handle failed migrations. --- invokeai/app/api/dependencies.py | 8 +- .../services/shared/sqlite/sqlite_database.py | 34 ++--- .../sqlite_migrator/sqlite_migrator_impl.py | 117 ++++-------------- .../model_install/test_model_install.py | 2 - .../model_records/test_model_records_sql.py | 2 - tests/test_sqlite_migrator.py | 42 +------ 6 files changed, 35 insertions(+), 170 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 151c8edf7f..fe42872bcd 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -81,13 +81,7 @@ class ApiDependencies: migration_2.register_post_callback(partial(migrate_embedded_workflows, logger=logger, image_files=image_files)) migrator.register_migration(migration_1) migrator.register_migration(migration_2) - did_migrate = migrator.run_migrations() - - # We need to reinitialize the database if we migrated, but only if we are using a file database. - # This closes the SqliteDatabase's connection and re-runs its `__init__` logic. - # If we do this with a memory database, we wipe the db. - if not db.db_path and did_migrate: - db.reinitialize() + migrator.run_migrations() configuration = config logger = logger diff --git a/invokeai/app/services/shared/sqlite/sqlite_database.py b/invokeai/app/services/shared/sqlite/sqlite_database.py index be8b6284bf..e860160044 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_database.py +++ b/invokeai/app/services/shared/sqlite/sqlite_database.py @@ -10,25 +10,22 @@ class SqliteDatabase: """ Manages a connection to an SQLite database. + :param db_path: Path to the database file. If None, an in-memory database is used. + :param logger: Logger to use for logging. + :param verbose: Whether to log SQL statements. Provides `logger.debug` as the SQLite trace callback. + This is a light wrapper around the `sqlite3` module, providing a few conveniences: - The database file is written to disk if it does not exist. - Foreign key constraints are enabled by default. - The connection is configured to use the `sqlite3.Row` row factory. - - A `conn` attribute is provided to access the connection. - - A `lock` attribute is provided to lock the database connection. - - A `clean` method to run the VACUUM command and report on the freed space. - - A `reinitialize` method to close the connection and re-run the init. - - A `close` method to close the connection. - :param db_path: Path to the database file. If None, an in-memory database is used. - :param logger: Logger to use for logging. - :param verbose: Whether to log SQL statements. Provides `logger.debug` as the SQLite trace callback. + In addition to the constructor args, the instance provides the following attributes and methods: + - `conn`: A `sqlite3.Connection` object. Note that the connection must never be closed if the database is in-memory. + - `lock`: A shared re-entrant lock, used to approximate thread safety. + - `clean()`: Runs the SQL `VACUUM;` command and reports on the freed space. """ def __init__(self, db_path: Path | None, logger: Logger, verbose: bool = False) -> None: - self.initialize(db_path=db_path, logger=logger, verbose=verbose) - - def initialize(self, db_path: Path | None, logger: Logger, verbose: bool = False) -> None: """Initializes the database. This is used internally by the class constructor.""" self.logger = logger self.db_path = db_path @@ -49,21 +46,6 @@ class SqliteDatabase: self.conn.execute("PRAGMA foreign_keys = ON;") - def reinitialize(self) -> None: - """ - Re-initializes the database by closing the connection and re-running the init. - Warning: This will wipe the database if it is an in-memory database. - """ - self.close() - self.initialize(db_path=self.db_path, logger=self.logger, verbose=self.verbose) - - def close(self) -> None: - """ - Closes the connection to the database. - Warning: This will wipe the database if it is an in-memory database. - """ - self.conn.close() - def clean(self) -> None: """ Cleans the database by running the VACUUM command, reporting on the freed space. diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index 33035b58c2..b6bc8eed58 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -1,6 +1,4 @@ -import shutil import sqlite3 -from datetime import datetime from pathlib import Path from typing import Optional @@ -12,19 +10,11 @@ class SQLiteMigrator: """ Manages migrations for a SQLite database. - :param db_path: The path to the database to migrate, or None if using an in-memory database. - :param conn: The connection to the database. - :param lock: A lock to use when running migrations. - :param logger: A logger to use for logging. - :param log_sql: Whether to log SQL statements. Only used when the log level is set to debug. + :param db: The instanceof :class:`SqliteDatabase` to migrate. Migrations should be registered with :meth:`register_migration`. - During migration, a copy of the current database is made and the migrations are run on the copy. If the migration - is successful, the original database is backed up and the migrated database is moved to the original database's - path. If the migration fails, the original database is left untouched and the migrated database is deleted. - - If the database is in-memory, no backup is made; the migration is run in-place. + Each migration is run in a transaction. If a migration fails, the transaction is rolled back. """ backup_path: Optional[Path] = None @@ -34,11 +24,6 @@ class SQLiteMigrator: self._logger = db.logger self._migration_set = MigrationSet() - # The presence of an temp database file indicates a catastrophic failure of a previous migration. - if self._db.db_path and self._get_temp_db_path(self._db.db_path).is_file(): - self._logger.warning("Previous migration failed! Trying again...") - self._get_temp_db_path(self._db.db_path).unlink() - def register_migration(self, migration: Migration) -> None: """Registers a migration.""" self._migration_set.register(migration) @@ -61,44 +46,24 @@ class SQLiteMigrator: return False self._logger.info("Database update needed") - - if self._db.db_path: - # We are using a file database. Create a copy of the database to run the migrations on. - temp_db_path = self._create_temp_db(self._db.db_path) - self._logger.info(f"Copied database to {temp_db_path} for migration") - temp_db = SqliteDatabase(db_path=temp_db_path, logger=self._logger, verbose=self._db.verbose) - temp_db_cursor = temp_db.conn.cursor() - self._run_migrations(temp_db_cursor) - # Close the connections, copy the original database as a backup, and move the temp database to the - # original database's path. - temp_db.close() - self._db.close() - backup_db_path = self._finalize_migration( - temp_db_path=temp_db_path, - original_db_path=self._db.db_path, - ) - self._logger.info(f"Migration successful. Original DB backed up to {backup_db_path}") - else: - # We are using a memory database. No special backup or special handling needed. - self._run_migrations(cursor) - + next_migration = self._migration_set.get(from_version=self._get_current_version(cursor)) + while next_migration is not None: + self._run_migration(next_migration) + next_migration = self._migration_set.get(self._get_current_version(cursor)) self._logger.info("Database updated successfully") return True - def _run_migrations(self, temp_db_cursor: sqlite3.Cursor) -> None: - """Runs all migrations in a loop.""" - next_migration = self._migration_set.get(from_version=self._get_current_version(temp_db_cursor)) - while next_migration is not None: - self._run_migration(next_migration, temp_db_cursor) - next_migration = self._migration_set.get(self._get_current_version(temp_db_cursor)) - - def _run_migration(self, migration: Migration, temp_db_cursor: sqlite3.Cursor) -> None: + def _run_migration(self, migration: Migration) -> None: """Runs a single migration.""" - with self._db.lock: - try: - if self._get_current_version(temp_db_cursor) != migration.from_version: + # Using sqlite3.Connection as a context manager commits a the transaction on exit, or rolls it back if an + # exception is raised. We want to commit the transaction if the migration is successful, or roll it back if + # there is an error. + try: + with self._db.lock, self._db.conn as conn: + cursor = conn.cursor() + if self._get_current_version(cursor) != migration.from_version: raise MigrationError( - f"Database is at version {self._get_current_version(temp_db_cursor)}, expected {migration.from_version}" + f"Database is at version {self._get_current_version(cursor)}, expected {migration.from_version}" ) self._logger.debug(f"Running migration from {migration.from_version} to {migration.to_version}") @@ -106,28 +71,26 @@ class SQLiteMigrator: if migration.pre_migrate: self._logger.debug(f"Running {len(migration.pre_migrate)} pre-migration callbacks") for callback in migration.pre_migrate: - callback(temp_db_cursor) + callback(cursor) # Run the actual migration - migration.migrate(temp_db_cursor) - temp_db_cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) + migration.migrate(cursor) + cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) # Run post-migration callbacks if migration.post_migrate: self._logger.debug(f"Running {len(migration.post_migrate)} post-migration callbacks") for callback in migration.post_migrate: - callback(temp_db_cursor) - - # Migration callbacks only get a cursor. Commit this migration. - temp_db_cursor.connection.commit() + callback(cursor) self._logger.debug( f"Successfully migrated database from {migration.from_version} to {migration.to_version}" ) - except Exception as e: - msg = f"Error migrating database from {migration.from_version} to {migration.to_version}: {e}" - temp_db_cursor.connection.rollback() - self._logger.error(msg) - raise MigrationError(msg) from e + # We want to catch *any* error, mirroring the behaviour of the sqlite3 module. + except Exception as e: + # The connection context manager has already rolled back the migration, so we don't need to do anything. + msg = f"Error migrating database from {migration.from_version} to {migration.to_version}: {e}" + self._logger.error(msg) + raise MigrationError(msg) from e def _create_migrations_table(self, cursor: sqlite3.Cursor) -> None: """Creates the migrations table for the database, if one does not already exist.""" @@ -166,33 +129,3 @@ class SQLiteMigrator: if "no such table" in str(e): return 0 raise - - @classmethod - def _create_temp_db(cls, original_db_path: Path) -> Path: - """Copies the current database to a new file for migration.""" - temp_db_path = cls._get_temp_db_path(original_db_path) - shutil.copy2(original_db_path, temp_db_path) - return temp_db_path - - @classmethod - def _finalize_migration( - cls, - temp_db_path: Path, - original_db_path: Path, - ) -> Path: - """Renames the original database as a backup and renames the migrated database to the original name.""" - backup_db_path = cls._get_backup_db_path(original_db_path) - original_db_path.rename(backup_db_path) - temp_db_path.rename(original_db_path) - return backup_db_path - - @classmethod - def _get_temp_db_path(cls, original_db_path: Path) -> Path: - """Gets the path to the temp database.""" - return original_db_path.parent / original_db_path.name.replace(".db", ".db.temp") - - @classmethod - def _get_backup_db_path(cls, original_db_path: Path) -> Path: - """Gets the path to the final backup database.""" - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - return original_db_path.parent / f"{original_db_path.stem}_backup_{timestamp}.db" diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 58515cc273..2b245cce6d 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -48,8 +48,6 @@ def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() - # this test uses a file database, so we need to reinitialize it after migrations - db.reinitialize() store: ModelRecordServiceBase = ModelRecordServiceSQL(db) return store diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index 235c8f3cff..e3589d6ec0 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -39,8 +39,6 @@ def store(datadir: Any) -> ModelRecordServiceBase: migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() - # this test uses a file database, so we need to reinitialize it after migrations - db.reinitialize() return ModelRecordServiceSQL(db) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 109cc88472..3759859b4b 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -198,7 +198,7 @@ def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_create_test_table: Migration) -> None: cursor = migrator._db.conn.cursor() migrator._create_migrations_table(cursor) - migrator._run_migration(migration_create_test_table, cursor) + migrator._run_migration(migration_create_test_table) assert migrator._get_current_version(cursor) == 1 cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") assert cursor.fetchone() is not None @@ -228,46 +228,6 @@ def test_migrator_runs_all_migrations_file(logger: Logger) -> None: assert SQLiteMigrator._get_current_version(original_db_cursor) == 3 -def test_migrator_creates_temp_db() -> None: - with TemporaryDirectory() as tempdir: - original_db_path = Path(tempdir) / "invokeai.db" - with closing(sqlite3.connect(original_db_path)): - # create the db file so _create_temp_db has something to copy - pass - temp_db_path = SQLiteMigrator._create_temp_db(original_db_path) - assert temp_db_path.is_file() - assert temp_db_path == SQLiteMigrator._get_temp_db_path(original_db_path) - - -def test_migrator_finalizes() -> None: - with TemporaryDirectory() as tempdir: - original_db_path = Path(tempdir) / "invokeai.db" - temp_db_path = SQLiteMigrator._get_temp_db_path(original_db_path) - backup_db_path = SQLiteMigrator._get_backup_db_path(original_db_path) - with closing(sqlite3.connect(original_db_path)) as original_db_conn, closing( - sqlite3.connect(temp_db_path) - ) as temp_db_conn: - original_db_cursor = original_db_conn.cursor() - original_db_cursor.execute("CREATE TABLE original_db_test (id INTEGER PRIMARY KEY);") - original_db_conn.commit() - temp_db_cursor = temp_db_conn.cursor() - temp_db_cursor.execute("CREATE TABLE temp_db_test (id INTEGER PRIMARY KEY);") - temp_db_conn.commit() - SQLiteMigrator._finalize_migration( - original_db_path=original_db_path, - temp_db_path=temp_db_path, - ) - with closing(sqlite3.connect(backup_db_path)) as backup_db_conn, closing( - sqlite3.connect(temp_db_path) - ) as temp_db_conn: - backup_db_cursor = backup_db_conn.cursor() - backup_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='original_db_test';") - assert backup_db_cursor.fetchone() is not None - temp_db_cursor = temp_db_conn.cursor() - temp_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='temp_db_test';") - assert temp_db_cursor.fetchone() is None - - def test_migrator_makes_no_changes_on_failed_migration( migrator: SQLiteMigrator, migration_no_op: Migration, failing_migrate_callback: MigrateCallback ) -> None: From 6063760ce227df276cf48e055fc5de526f4594da Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:13:40 +1100 Subject: [PATCH 142/515] feat(db): tweak docstring --- .../services/shared/sqlite_migrator/sqlite_migrator_impl.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index b6bc8eed58..07cae1bb3a 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -55,10 +55,9 @@ class SQLiteMigrator: def _run_migration(self, migration: Migration) -> None: """Runs a single migration.""" - # Using sqlite3.Connection as a context manager commits a the transaction on exit, or rolls it back if an - # exception is raised. We want to commit the transaction if the migration is successful, or roll it back if - # there is an error. try: + # Using sqlite3.Connection as a context manager commits a the transaction on exit, or rolls it back if an + # exception is raised. with self._db.lock, self._db.conn as conn: cursor = conn.cursor() if self._get_current_version(cursor) != migration.from_version: From 0cf7fe43afb44345b55962884b241dbf95f932f6 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 12:35:42 +1100 Subject: [PATCH 143/515] feat(db): refactor migrate callbacks to use dependencies, remote pre/post callbacks --- invokeai/app/api/dependencies.py | 7 +- .../sqlite_migrator/migrations/migration_1.py | 4 +- .../sqlite_migrator/migrations/migration_2.py | 59 ++++++++++- .../migrations/migration_2_post.py | 41 ------- .../sqlite_migrator/sqlite_migrator_common.py | 92 ++++++++++++---- .../sqlite_migrator/sqlite_migrator_impl.py | 15 +-- tests/aa_nodes/test_graph_execution_state.py | 14 +-- tests/aa_nodes/test_invoker.py | 14 +-- .../model_install/test_model_install.py | 16 +-- .../model_records/test_model_records_sql.py | 14 +-- tests/conftest.py | 2 + tests/fixtures/__init__.py | 0 tests/fixtures/sqlite_database.py | 33 ++++++ tests/test_sqlite_migrator.py | 100 ++++++++---------- 14 files changed, 230 insertions(+), 181 deletions(-) delete mode 100644 invokeai/app/services/shared/sqlite_migrator/migrations/migration_2_post.py create mode 100644 tests/fixtures/__init__.py create mode 100644 tests/fixtures/sqlite_database.py diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index fe42872bcd..212d470d2c 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -1,11 +1,9 @@ # Copyright (c) 2022 Kyle Schouviller (https://github.com/kyle0654) -from functools import partial from logging import Logger from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2_post import migrate_embedded_workflows from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger from invokeai.version.invokeai_version import __version__ @@ -77,8 +75,11 @@ class ApiDependencies: db_path = None if config.use_memory_db else config.db_path db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) + # This migration requires an ImageFileStorageBase service and logger + migration_2.provide_dependency("image_files", image_files) + migration_2.provide_dependency("logger", logger) + migrator = SQLiteMigrator(db=db) - migration_2.register_post_callback(partial(migrate_embedded_workflows, logger=logger, image_files=image_files)) migrator.register_migration(migration_1) migrator.register_migration(migration_2) migrator.run_migrations() diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py index fce9acf54c..e456cd94fc 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py @@ -3,7 +3,7 @@ import sqlite3 from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration -def _migrate(cursor: sqlite3.Cursor) -> None: +def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: """Migration callback for database version 1.""" _create_board_images(cursor) @@ -353,7 +353,7 @@ def _create_workflows(cursor: sqlite3.Cursor) -> None: migration_1 = Migration( from_version=0, to_version=1, - migrate=_migrate, + migrate_callback=migrate_callback, ) """ Database version 1 (initial state). diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index a4c950b85c..e99d14b779 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -1,16 +1,24 @@ import sqlite3 +from logging import Logger -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration +from tqdm import tqdm + +from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration, MigrationDependency -def _migrate(cursor: sqlite3.Cursor) -> None: +def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: """Migration callback for database version 2.""" + logger = kwargs["logger"] + image_files = kwargs["image_files"] + _add_images_has_workflow(cursor) _add_session_queue_workflow(cursor) _drop_old_workflow_tables(cursor) _add_workflow_library(cursor) _drop_model_manager_metadata(cursor) + _migrate_embedded_workflows(cursor, logger, image_files) def _add_images_has_workflow(cursor: sqlite3.Cursor) -> None: @@ -89,19 +97,64 @@ def _drop_model_manager_metadata(cursor: sqlite3.Cursor) -> None: cursor.execute("DROP TABLE IF EXISTS model_manager_metadata;") +def _migrate_embedded_workflows( + cursor: sqlite3.Cursor, + logger: Logger, + image_files: ImageFileStorageBase, +) -> None: + """ + In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in + the database now has a `has_workflow` column, indicating if an image has a workflow embedded. + + This migrate callback checks each image for the presence of an embedded workflow, then updates its entry + in the database accordingly. + """ + # Get the total number of images and chunk it into pages + cursor.execute("SELECT image_name FROM images") + image_names: list[str] = [image[0] for image in cursor.fetchall()] + total_image_names = len(image_names) + + if not total_image_names: + return + + logger.info(f"Migrating workflows for {total_image_names} images") + + # Migrate the images + to_migrate: list[tuple[bool, str]] = [] + pbar = tqdm(image_names) + for idx, image_name in enumerate(pbar): + pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") + pil_image = image_files.get(image_name) + if "invokeai_workflow" in pil_image.info: + to_migrate.append((True, image_name)) + + logger.info(f"Adding {len(to_migrate)} embedded workflows to database") + cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) + + +image_files_dependency = MigrationDependency(name="image_files", dependency_type=ImageFileStorageBase) +logger_dependency = MigrationDependency(name="logger", dependency_type=Logger) + + migration_2 = Migration( from_version=1, to_version=2, - migrate=_migrate, + migrate_callback=migrate_callback, + dependencies={"image_files": image_files_dependency, "logger": logger_dependency}, ) """ Database version 2. Introduced in v3.5.0 for the new workflow library. +Dependencies: +- image_files: ImageFileStorageBase +- logger: Logger + Migration: - Add `has_workflow` column to `images` table - Add `workflow` column to `session_queue` table - Drop `workflows` and `workflow_images` tables - Add `workflow_library` table +- Populates the `has_workflow` column in the `images` table (requires `image_files` & `logger` dependencies) """ diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2_post.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2_post.py deleted file mode 100644 index fa0d874a5c..0000000000 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2_post.py +++ /dev/null @@ -1,41 +0,0 @@ -import sqlite3 -from logging import Logger - -from tqdm import tqdm - -from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase - - -def migrate_embedded_workflows( - cursor: sqlite3.Cursor, - logger: Logger, - image_files: ImageFileStorageBase, -) -> None: - """ - In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in - the database now has a `has_workflow` column, indicating if an image has a workflow embedded. - - This migrate callbakc checks each image for the presence of an embedded workflow, then updates its entry - in the database accordingly. - """ - # Get the total number of images and chunk it into pages - cursor.execute("SELECT image_name FROM images") - image_names: list[str] = [image[0] for image in cursor.fetchall()] - total_image_names = len(image_names) - - if not total_image_names: - return - - logger.info(f"Migrating workflows for {total_image_names} images") - - # Migrate the images - to_migrate: list[tuple[bool, str]] = [] - pbar = tqdm(image_names) - for idx, image_name in enumerate(pbar): - pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") - pil_image = image_files.get(image_name) - if "invokeai_workflow" in pil_image.info: - to_migrate.append((True, image_name)) - - logger.info(f"Adding {len(to_migrate)} embedded workflows to database") - cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index 0c395f54d6..638fab6eb7 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -1,9 +1,16 @@ import sqlite3 -from typing import Callable, Optional, TypeAlias +from functools import partial +from typing import Any, Optional, Protocol, runtime_checkable -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel, ConfigDict, Field, model_validator -MigrateCallback: TypeAlias = Callable[[sqlite3.Cursor], None] + +@runtime_checkable +class MigrateCallback(Protocol): + """A callback that performs a migration.""" + + def __call__(self, cursor: sqlite3.Cursor, **kwargs: Any) -> None: + ... class MigrationError(RuntimeError): @@ -14,28 +21,65 @@ class MigrationVersionError(ValueError): """Raised when a migration version is invalid.""" +class MigrationDependency: + """Represents a dependency for a migration.""" + + def __init__( + self, + name: str, + dependency_type: Any, + ) -> None: + self.name = name + self.dependency_type = dependency_type + self.value = None + + def set(self, value: Any) -> None: + """Sets the value of the dependency.""" + if not isinstance(value, self.dependency_type): + raise ValueError(f"Dependency {self.name} must be of type {self.dependency_type}") + self.value = value + + class Migration(BaseModel): """ Represents a migration for a SQLite database. + :param from_version: The database version on which this migration may be run + :param to_version: The database version that results from this migration + :param migrate: The callback to run to perform the migration + :param dependencies: A dict of dependencies that must be provided to the migration + Migration callbacks will be provided an open cursor to the database. They should not commit their transaction; this is handled by the migrator. - Pre- and post-migration callback may be registered with :meth:`register_pre_callback` or - :meth:`register_post_callback`. + If a migration needs an additional dependency, it must be provided with :meth:`provide_dependency` + before the migration is run. - If a migration has additional dependencies, it is recommended to use functools.partial to provide - the dependencies and register the partial as the migration callback. + Example Usage: + ```py + # Define the migrate callback + def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: + some_dependency = kwargs["some_dependency"] + ... + + # Instantiate the migration, declaring dependencies + migration = Migration( + from_version=0, + to_version=1, + migrate_callback=migrate_callback, + dependencies={"some_dependency": MigrationDependency(name="some_dependency", dependency_type=SomeType)}, + ) + + # Register the dependency before running the migration + migration.provide_dependency(name="some_dependency", value=some_value) + ``` """ from_version: int = Field(ge=0, strict=True, description="The database version on which this migration may be run") to_version: int = Field(ge=1, strict=True, description="The database version that results from this migration") - migrate: MigrateCallback = Field(description="The callback to run to perform the migration") - pre_migrate: list[MigrateCallback] = Field( - default=[], description="A list of callbacks to run before the migration" - ) - post_migrate: list[MigrateCallback] = Field( - default=[], description="A list of callbacks to run after the migration" + migrate_callback: MigrateCallback = Field(description="The callback to run to perform the migration") + dependencies: dict[str, MigrationDependency] = Field( + default={}, description="A dict of dependencies that must be provided to the migration" ) @model_validator(mode="after") @@ -48,13 +92,21 @@ class Migration(BaseModel): # Callables are not hashable, so we need to implement our own __hash__ function to use this class in a set. return hash((self.from_version, self.to_version)) - def register_pre_callback(self, callback: MigrateCallback) -> None: - """Registers a pre-migration callback.""" - self.pre_migrate.append(callback) + def provide_dependency(self, name: str, value: Any) -> None: + """Provides a dependency for this migration.""" + if name not in self.dependencies: + raise ValueError(f"{name} of type {type(value)} is not a dependency of this migration") + self.dependencies[name].set(value) - def register_post_callback(self, callback: MigrateCallback) -> None: - """Registers a post-migration callback.""" - self.post_migrate.append(callback) + def run(self, cursor: sqlite3.Cursor) -> None: + """Runs the migration.""" + missing_dependencies = [d.name for d in self.dependencies.values() if d.value is None] + if missing_dependencies: + raise ValueError(f"Missing migration dependencies: {', '.join(missing_dependencies)}") + self.migrate_callback = partial(self.migrate_callback, **{d.name: d.value for d in self.dependencies.values()}) + self.migrate_callback(cursor=cursor) + + model_config = ConfigDict(arbitrary_types_allowed=True) class MigrationSet: @@ -78,7 +130,7 @@ class MigrationSet: def validate_migration_chain(self) -> None: """ - Validates that the migrations form a single chain of migrations from version 0 to the latest version. + Validates that the migrations form a single chain of migrations from version 0 to the latest version, Raises a MigrationError if there is a problem. """ if self.count == 0: diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index 07cae1bb3a..ec32818e31 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -66,21 +66,12 @@ class SQLiteMigrator: ) self._logger.debug(f"Running migration from {migration.from_version} to {migration.to_version}") - # Run pre-migration callbacks - if migration.pre_migrate: - self._logger.debug(f"Running {len(migration.pre_migrate)} pre-migration callbacks") - for callback in migration.pre_migrate: - callback(cursor) - # Run the actual migration - migration.migrate(cursor) + migration.run(cursor) + + # Update the version cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) - # Run post-migration callbacks - if migration.post_migrate: - self._logger.debug(f"Running {len(migration.post_migrate)} post-migration callbacks") - for callback in migration.post_migrate: - callback(cursor) self._logger.debug( f"Successfully migrated database from {migration.from_version} to {migration.to_version}" ) diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index 609b0c3736..99a8382001 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -28,11 +28,8 @@ from invokeai.app.services.shared.graph import ( IterateInvocation, LibraryGraph, ) -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger +from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction from .test_invoker import create_edge @@ -50,15 +47,10 @@ def simple_graph(): # Defining it in a separate module will cause the union to be incomplete, and pydantic will not validate # the test invocations. @pytest.fixture -def mock_services() -> InvocationServices: +def mock_services(create_sqlite_database: CreateSqliteDatabaseFunction) -> InvocationServices: configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) logger = InvokeAILogger.get_logger() - db_path = None if configuration.use_memory_db else configuration.db_path - db = SqliteDatabase(db_path=db_path, logger=logger, verbose=configuration.log_sql) - migrator = SQLiteMigrator(db=db) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() + db = create_sqlite_database(configuration, logger) # NOTE: none of these are actually called by the test invocations graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") return InvocationServices( diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index 866287c461..6703c2768f 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -3,8 +3,8 @@ import logging import pytest from invokeai.app.services.config.config_default import InvokeAIAppConfig -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.util.logging import InvokeAILogger +from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction # This import must happen before other invoke imports or test in other files(!!) break from .test_nodes import ( # isort: split @@ -25,9 +25,6 @@ from invokeai.app.services.invoker import Invoker from invokeai.app.services.item_storage.item_storage_sqlite import SqliteItemStorage from invokeai.app.services.session_queue.session_queue_common import DEFAULT_QUEUE_ID from invokeai.app.services.shared.graph import Graph, GraphExecutionState, GraphInvocation, LibraryGraph -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 @pytest.fixture @@ -54,15 +51,10 @@ def graph_with_subgraph(): # Defining it in a separate module will cause the union to be incomplete, and pydantic will not validate # the test invocations. @pytest.fixture -def mock_services() -> InvocationServices: +def mock_services(create_sqlite_database: CreateSqliteDatabaseFunction) -> InvocationServices: configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) logger = InvokeAILogger.get_logger() - db_path = None if configuration.use_memory_db else configuration.db_path - db = SqliteDatabase(db_path=db_path, logger=logger, verbose=configuration.log_sql) - migrator = SQLiteMigrator(db=db) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() + db = create_sqlite_database(configuration, logger) # NOTE: none of these are actually called by the test invocations graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 2b245cce6d..8983b914b0 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -18,12 +18,9 @@ from invokeai.app.services.model_install import ( ModelInstallServiceBase, ) from invokeai.app.services.model_records import ModelRecordServiceBase, ModelRecordServiceSQL, UnknownModelException -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.model_manager.config import BaseModelType, ModelType from invokeai.backend.util.logging import InvokeAILogger +from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction @pytest.fixture @@ -40,14 +37,11 @@ def app_config(datadir: Path) -> InvokeAIAppConfig: @pytest.fixture -def store(app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: +def store( + app_config: InvokeAIAppConfig, create_sqlite_database: CreateSqliteDatabaseFunction +) -> ModelRecordServiceBase: logger = InvokeAILogger.get_logger(config=app_config) - db_path = None if app_config.use_memory_db else app_config.db_path - db = SqliteDatabase(db_path=db_path, logger=logger, verbose=app_config.log_sql) - migrator = SQLiteMigrator(db=db) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() + db = create_sqlite_database(app_config, logger) store: ModelRecordServiceBase = ModelRecordServiceSQL(db) return store diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index e3589d6ec0..f1cd5d4d88 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -14,10 +14,6 @@ from invokeai.app.services.model_records import ( ModelRecordServiceSQL, UnknownModelException, ) -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator from invokeai.backend.model_manager.config import ( BaseModelType, MainCheckpointConfig, @@ -27,18 +23,14 @@ from invokeai.backend.model_manager.config import ( VaeDiffusersConfig, ) from invokeai.backend.util.logging import InvokeAILogger +from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction @pytest.fixture -def store(datadir: Any) -> ModelRecordServiceBase: +def store(datadir: Any, create_sqlite_database: CreateSqliteDatabaseFunction) -> ModelRecordServiceBase: config = InvokeAIAppConfig(root=datadir) logger = InvokeAILogger.get_logger(config=config) - db_path = None if config.use_memory_db else config.db_path - db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) - migrator = SQLiteMigrator(db=db) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() + db = create_sqlite_database(config, logger) return ModelRecordServiceSQL(db) diff --git a/tests/conftest.py b/tests/conftest.py index 8618f5e102..d37904d80e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,3 +4,5 @@ # We import the model_installer and torch_device fixtures here so that they can be used by all tests. Flake8 does not # play well with fixtures (F401 and F811), so this is cleaner than importing in all files that use these fixtures. from invokeai.backend.util.test_utils import model_installer, torch_device # noqa: F401 + +pytest_plugins = ["tests.fixtures.sqlite_database"] diff --git a/tests/fixtures/__init__.py b/tests/fixtures/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/fixtures/sqlite_database.py b/tests/fixtures/sqlite_database.py new file mode 100644 index 0000000000..8609f81768 --- /dev/null +++ b/tests/fixtures/sqlite_database.py @@ -0,0 +1,33 @@ +from logging import Logger +from typing import Callable +from unittest import mock + +import pytest + +from invokeai.app.services.config.config_default import InvokeAIAppConfig +from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator + +CreateSqliteDatabaseFunction = Callable[[InvokeAIAppConfig, Logger], SqliteDatabase] + + +@pytest.fixture +def create_sqlite_database() -> CreateSqliteDatabaseFunction: + def _create_sqlite_database(config: InvokeAIAppConfig, logger: Logger) -> SqliteDatabase: + db_path = None if config.use_memory_db else config.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) + + image_files = mock.Mock(spec=ImageFileStorageBase) + + migrator = SQLiteMigrator(db=db) + migration_2.provide_dependency("logger", logger) + migration_2.provide_dependency("image_files", image_files) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() + return db + + return _create_sqlite_database diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 3759859b4b..1e6d0548b6 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -31,45 +31,45 @@ def migrator(logger: Logger) -> SQLiteMigrator: return SQLiteMigrator(db=db) -@pytest.fixture -def migration_no_op() -> Migration: - return Migration(from_version=0, to_version=1, migrate=lambda cursor: None) - - -@pytest.fixture -def migration_create_test_table() -> Migration: - def migrate(cursor: sqlite3.Cursor) -> None: - cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") - - return Migration(from_version=0, to_version=1, migrate=migrate) - - -@pytest.fixture -def failing_migration() -> Migration: - def failing_migration(cursor: sqlite3.Cursor) -> None: - raise Exception("Bad migration") - - return Migration(from_version=0, to_version=1, migrate=failing_migration) - - @pytest.fixture def no_op_migrate_callback() -> MigrateCallback: - def no_op_migrate(cursor: sqlite3.Cursor) -> None: + def no_op_migrate(cursor: sqlite3.Cursor, **kwargs) -> None: pass return no_op_migrate +@pytest.fixture +def migration_no_op(no_op_migrate_callback: MigrateCallback) -> Migration: + return Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) + + +@pytest.fixture +def migration_create_test_table() -> Migration: + def migrate(cursor: sqlite3.Cursor, **kwargs) -> None: + cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") + + return Migration(from_version=0, to_version=1, migrate_callback=migrate) + + +@pytest.fixture +def failing_migration() -> Migration: + def failing_migration(cursor: sqlite3.Cursor, **kwargs) -> None: + raise Exception("Bad migration") + + return Migration(from_version=0, to_version=1, migrate_callback=failing_migration) + + @pytest.fixture def failing_migrate_callback() -> MigrateCallback: - def failing_migrate(cursor: sqlite3.Cursor) -> None: + def failing_migrate(cursor: sqlite3.Cursor, **kwargs) -> None: raise Exception("Bad migration") return failing_migrate def create_migrate(i: int) -> MigrateCallback: - def migrate(cursor: sqlite3.Cursor) -> None: + def migrate(cursor: sqlite3.Cursor, **kwargs) -> None: cursor.execute(f"CREATE TABLE test{i} (id INTEGER PRIMARY KEY);") return migrate @@ -77,30 +77,16 @@ def create_migrate(i: int) -> MigrateCallback: def test_migration_to_version_is_one_gt_from_version(no_op_migrate_callback: MigrateCallback) -> None: with pytest.raises(ValidationError, match="to_version must be one greater than from_version"): - Migration(from_version=0, to_version=2, migrate=no_op_migrate_callback) + Migration(from_version=0, to_version=2, migrate_callback=no_op_migrate_callback) # not raising is sufficient - Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) + Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback) def test_migration_hash(no_op_migrate_callback: MigrateCallback) -> None: - migration = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) + migration = Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) assert hash(migration) == hash((0, 1)) -def test_migration_registers_pre_and_post_callbacks(no_op_migrate_callback: MigrateCallback) -> None: - def pre_callback(cursor: sqlite3.Cursor) -> None: - pass - - def post_callback(cursor: sqlite3.Cursor) -> None: - pass - - migration = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) - migration.register_pre_callback(pre_callback) - migration.register_post_callback(post_callback) - assert pre_callback in migration.pre_migrate - assert post_callback in migration.post_migrate - - def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: migration = migration_no_op migrator._migration_set.register(migration) @@ -110,13 +96,13 @@ def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: def test_migration_set_may_not_register_dupes( migrator: SQLiteMigrator, no_op_migrate_callback: MigrateCallback ) -> None: - migrate_0_to_1_a = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) - migrate_0_to_1_b = Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback) + migrate_0_to_1_a = Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) + migrate_0_to_1_b = Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) migrator._migration_set.register(migrate_0_to_1_a) with pytest.raises(MigrationVersionError, match=r"Migration with from_version or to_version already registered"): migrator._migration_set.register(migrate_0_to_1_b) - migrate_1_to_2_a = Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) - migrate_1_to_2_b = Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback) + migrate_1_to_2_a = Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback) + migrate_1_to_2_b = Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback) migrator._migration_set.register(migrate_1_to_2_a) with pytest.raises(MigrationVersionError, match=r"Migration with from_version or to_version already registered"): migrator._migration_set.register(migrate_1_to_2_b) @@ -131,15 +117,15 @@ def test_migration_set_gets_migration(migration_no_op: Migration) -> None: def test_migration_set_validates_migration_chain(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() - migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback)) with pytest.raises(MigrationError, match="Migration chain is fragmented"): # no migration from 0 to 1 migration_set.validate_migration_chain() - migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback)) migration_set.validate_migration_chain() - migration_set.register(Migration(from_version=2, to_version=3, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=2, to_version=3, migrate_callback=no_op_migrate_callback)) migration_set.validate_migration_chain() - migration_set.register(Migration(from_version=4, to_version=5, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=4, to_version=5, migrate_callback=no_op_migrate_callback)) with pytest.raises(MigrationError, match="Migration chain is fragmented"): # no migration from 3 to 4 migration_set.validate_migration_chain() @@ -148,18 +134,18 @@ def test_migration_set_validates_migration_chain(no_op_migrate_callback: Migrate def test_migration_set_counts_migrations(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() assert migration_set.count == 0 - migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback)) assert migration_set.count == 1 - migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback)) assert migration_set.count == 2 def test_migration_set_gets_latest_version(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() assert migration_set.latest_version == 0 - migration_set.register(Migration(from_version=1, to_version=2, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback)) assert migration_set.latest_version == 2 - migration_set.register(Migration(from_version=0, to_version=1, migrate=no_op_migrate_callback)) + migration_set.register(Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback)) assert migration_set.latest_version == 2 @@ -206,7 +192,7 @@ def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_crea def test_migrator_runs_all_migrations_in_memory(migrator: SQLiteMigrator) -> None: cursor = migrator._db.conn.cursor() - migrations = [Migration(from_version=i, to_version=i + 1, migrate=create_migrate(i)) for i in range(0, 3)] + migrations = [Migration(from_version=i, to_version=i + 1, migrate_callback=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() @@ -219,7 +205,9 @@ def test_migrator_runs_all_migrations_file(logger: Logger) -> None: # The Migrator closes the database when it finishes; we cannot use a context manager. db = SqliteDatabase(db_path=original_db_path, logger=logger, verbose=False) migrator = SQLiteMigrator(db=db) - migrations = [Migration(from_version=i, to_version=i + 1, migrate=create_migrate(i)) for i in range(0, 3)] + migrations = [ + Migration(from_version=i, to_version=i + 1, migrate_callback=create_migrate(i)) for i in range(0, 3) + ] for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() @@ -235,7 +223,7 @@ def test_migrator_makes_no_changes_on_failed_migration( migrator.register_migration(migration_no_op) migrator.run_migrations() assert migrator._get_current_version(cursor) == 1 - migrator.register_migration(Migration(from_version=1, to_version=2, migrate=failing_migrate_callback)) + migrator.register_migration(Migration(from_version=1, to_version=2, migrate_callback=failing_migrate_callback)) with pytest.raises(MigrationError, match="Bad migration"): migrator.run_migrations() assert migrator._get_current_version(cursor) == 1 From 18093c4f1d257ce22c509f306cad62f61bdbfe3b Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 11 Dec 2023 21:08:03 -0500 Subject: [PATCH 144/515] split installer zipfile script from tagging script; add make commands --- Makefile | 33 +++++++++++++++++++++++- installer/create_installer.sh | 47 ----------------------------------- 2 files changed, 32 insertions(+), 48 deletions(-) diff --git a/Makefile b/Makefile index 24722e2264..309aeee4d5 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,20 @@ # simple Makefile with scripts that are otherwise hard to remember # to use, run from the repo root `make ` +default: help + +help: + @echo Developer commands: + @echo + @echo "ruff Run ruff, fixing any safely-fixable errors and formatting" + @echo "ruff-unsafe Run ruff, fixing all fixable errors and formatting" + @echo "mypy Run mypy using the config in pyproject.toml to identify type mismatches and other coding errors" + @echo "mypy-all Run mypy ignoring the config in pyproject.tom but still ignoring missing imports" + @echo "frontend-build Build the frontend in order to run on localhost:9090" + @echo "frontend-dev Run the frontend in developer mode on localhost:5173" + @echo "installer-zip Build the installer .zip file for the current version" + @echo "tag-release Tag the GitHub repository with the current version (use at release time only!)" + # Runs ruff, fixing any safely-fixable errors and formatting ruff: ruff check . --fix @@ -18,4 +32,21 @@ mypy: # Runs mypy, ignoring the config in pyproject.toml but still ignoring missing (untyped) imports # (many files are ignored by the config, so this is useful for checking all files) mypy-all: - mypy scripts/invokeai-web.py --config-file= --ignore-missing-imports \ No newline at end of file + mypy scripts/invokeai-web.py --config-file= --ignore-missing-imports + +# Build the frontend +frontend-build: + cd invokeai/frontend/web && pnpm build + +# Run the frontend in dev mode +frontend-dev: + cd invokeai/frontend/web && pnpm dev + +# Installer zip file +installer-zip: + cd installer && ./create_installer.sh + +# Tag the release +tag-release: + cd installer && ./tag-release.sh + diff --git a/installer/create_installer.sh b/installer/create_installer.sh index ef489af751..ed8cbb0d0a 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -13,14 +13,6 @@ function is_bin_in_path { builtin type -P "$1" &>/dev/null } -function does_tag_exist { - git rev-parse --quiet --verify "refs/tags/$1" >/dev/null -} - -function git_show_ref { - git show-ref --dereference $1 --abbrev 7 -} - function git_show { git show -s --format='%h %s' $1 } @@ -53,50 +45,11 @@ VERSION=$( ) PATCH="" VERSION="v${VERSION}${PATCH}" -LATEST_TAG="v3-latest" - -echo "Building installer for version $VERSION..." -echo - -if does_tag_exist $VERSION; then - echo -e "${BCYAN}${VERSION}${RESET} already exists:" - git_show_ref tags/$VERSION - echo -fi -if does_tag_exist $LATEST_TAG; then - echo -e "${BCYAN}${LATEST_TAG}${RESET} already exists:" - git_show_ref tags/$LATEST_TAG - echo -fi echo -e "${BGREEN}HEAD${RESET}:" git_show echo -echo -e -n "Create tags ${BCYAN}${VERSION}${RESET} and ${BCYAN}${LATEST_TAG}${RESET} @ ${BGREEN}HEAD${RESET}, ${RED}deleting existing tags on remote${RESET}? " -read -e -p 'y/n [n]: ' input -RESPONSE=${input:='n'} -if [ "$RESPONSE" == 'y' ]; then - echo - echo -e "Deleting ${BCYAN}${VERSION}${RESET} tag on remote..." - git push origin :refs/tags/$VERSION - - echo -e "Tagging ${BGREEN}HEAD${RESET} with ${BCYAN}${VERSION}${RESET} locally..." - if ! git tag -fa $VERSION; then - echo "Existing/invalid tag" - exit -1 - fi - - echo -e "Deleting ${BCYAN}${LATEST_TAG}${RESET} tag on remote..." - git push origin :refs/tags/$LATEST_TAG - - echo -e "Tagging ${BGREEN}HEAD${RESET} with ${BCYAN}${LATEST_TAG}${RESET} locally..." - git tag -fa $LATEST_TAG - - echo - echo -e "${BYELLOW}Remember to 'git push origin --tags'!${RESET}" -fi - # ---------------------- FRONTEND ---------------------- pushd ../invokeai/frontend/web >/dev/null From a69f518c76d9e67a5413494271790689481b9494 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:09:09 +1100 Subject: [PATCH 145/515] feat(db): tidy dependencies for migrations --- .../sqlite_migrator/migrations/migration_2.py | 2 +- .../sqlite_migrator/sqlite_migrator_common.py | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index e99d14b779..7a5eb52c80 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -140,7 +140,7 @@ migration_2 = Migration( from_version=1, to_version=2, migrate_callback=migrate_callback, - dependencies={"image_files": image_files_dependency, "logger": logger_dependency}, + dependencies={image_files_dependency.name: image_files_dependency, logger_dependency.name: logger_dependency}, ) """ Database version 2. diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index 638fab6eb7..e057b3a5e5 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -33,10 +33,13 @@ class MigrationDependency: self.dependency_type = dependency_type self.value = None - def set(self, value: Any) -> None: - """Sets the value of the dependency.""" + def set_value(self, value: Any) -> None: + """ + Sets the value of the dependency. + If the value is not of the correct type, a TypeError is raised. + """ if not isinstance(value, self.dependency_type): - raise ValueError(f"Dependency {self.name} must be of type {self.dependency_type}") + raise TypeError(f"Dependency {self.name} must be of type {self.dependency_type}") self.value = value @@ -96,13 +99,16 @@ class Migration(BaseModel): """Provides a dependency for this migration.""" if name not in self.dependencies: raise ValueError(f"{name} of type {type(value)} is not a dependency of this migration") - self.dependencies[name].set(value) + self.dependencies[name].set_value(value) def run(self, cursor: sqlite3.Cursor) -> None: - """Runs the migration.""" + """ + Runs the migration. + If any dependencies are missing, a MigrationError is raised. + """ missing_dependencies = [d.name for d in self.dependencies.values() if d.value is None] if missing_dependencies: - raise ValueError(f"Missing migration dependencies: {', '.join(missing_dependencies)}") + raise MigrationError(f"Missing migration dependencies: {', '.join(missing_dependencies)}") self.migrate_callback = partial(self.migrate_callback, **{d.name: d.value for d in self.dependencies.values()}) self.migrate_callback(cursor=cursor) From 50815d36c6692eff52c82bf5089e4dbc5850bcae Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:09:24 +1100 Subject: [PATCH 146/515] feat(db): add tests for migration dependencies --- tests/test_sqlite_migrator.py | 98 ++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 1e6d0548b6..97419bcefa 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -1,4 +1,5 @@ import sqlite3 +from abc import ABC, abstractmethod from contextlib import closing from logging import Logger from pathlib import Path @@ -11,6 +12,7 @@ from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import ( MigrateCallback, Migration, + MigrationDependency, MigrationError, MigrationSet, MigrationVersionError, @@ -25,6 +27,16 @@ def logger() -> Logger: return Logger("test_sqlite_migrator") +@pytest.fixture +def memory_db_conn() -> sqlite3.Connection: + return sqlite3.connect(":memory:") + + +@pytest.fixture +def memory_db_cursor(memory_db_conn: sqlite3.Connection) -> sqlite3.Cursor: + return memory_db_conn.cursor() + + @pytest.fixture def migrator(logger: Logger) -> SQLiteMigrator: db = SqliteDatabase(db_path=None, logger=logger, verbose=False) @@ -45,11 +57,25 @@ def migration_no_op(no_op_migrate_callback: MigrateCallback) -> Migration: @pytest.fixture -def migration_create_test_table() -> Migration: +def migrate_callback_create_table_of_name() -> MigrateCallback: + def migrate(cursor: sqlite3.Cursor, **kwargs) -> None: + table_name = kwargs["table_name"] + cursor.execute(f"CREATE TABLE {table_name} (id INTEGER PRIMARY KEY);") + + return migrate + + +@pytest.fixture +def migrate_callback_create_test_table() -> MigrateCallback: def migrate(cursor: sqlite3.Cursor, **kwargs) -> None: cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY);") - return Migration(from_version=0, to_version=1, migrate_callback=migrate) + return migrate + + +@pytest.fixture +def migration_create_test_table(migrate_callback_create_test_table: MigrateCallback) -> Migration: + return Migration(from_version=0, to_version=1, migrate_callback=migrate_callback_create_test_table) @pytest.fixture @@ -75,6 +101,31 @@ def create_migrate(i: int) -> MigrateCallback: return migrate +def test_migration_dependency_sets_value_primitive() -> None: + dependency = MigrationDependency(name="test_dependency", dependency_type=str) + dependency.set_value("test") + assert dependency.value == "test" + with pytest.raises(TypeError, match=r"Dependency test_dependency must be of type.*str"): + dependency.set_value(1) + + +def test_migration_dependency_sets_value_complex() -> None: + class SomeBase(ABC): + @abstractmethod + def some_method(self) -> None: + pass + + class SomeImpl(SomeBase): + def some_method(self) -> None: + return + + dependency = MigrationDependency(name="test_dependency", dependency_type=SomeBase) + with pytest.raises(TypeError, match=r"Dependency test_dependency must be of type.*SomeBase"): + dependency.set_value(1) + # not throwing is sufficient + dependency.set_value(SomeImpl()) + + def test_migration_to_version_is_one_gt_from_version(no_op_migrate_callback: MigrateCallback) -> None: with pytest.raises(ValidationError, match="to_version must be one greater than from_version"): Migration(from_version=0, to_version=2, migrate_callback=no_op_migrate_callback) @@ -149,6 +200,49 @@ def test_migration_set_gets_latest_version(no_op_migrate_callback: MigrateCallba assert migration_set.latest_version == 2 +def test_migration_provide_dependency_validates_name(no_op_migrate_callback: MigrateCallback) -> None: + dependency = MigrationDependency(name="my_dependency", dependency_type=str) + migration = Migration( + from_version=0, + to_version=1, + migrate_callback=no_op_migrate_callback, + dependencies={dependency.name: dependency}, + ) + with pytest.raises(ValueError, match="is not a dependency of this migration"): + migration.provide_dependency("unknown_dependency_name", "banana_sushi") + + +def test_migration_runs_without_dependencies( + memory_db_cursor: sqlite3.Cursor, migrate_callback_create_test_table: MigrateCallback +) -> None: + migration = Migration( + from_version=0, + to_version=1, + migrate_callback=migrate_callback_create_test_table, + ) + migration.run(memory_db_cursor) + memory_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") + assert memory_db_cursor.fetchone() is not None + + +def test_migration_runs_with_dependencies( + memory_db_cursor: sqlite3.Cursor, migrate_callback_create_table_of_name: MigrateCallback +) -> None: + dependency = MigrationDependency(name="table_name", dependency_type=str) + migration = Migration( + from_version=0, + to_version=1, + migrate_callback=migrate_callback_create_table_of_name, + dependencies={dependency.name: dependency}, + ) + with pytest.raises(MigrationError, match="Missing migration dependencies"): + migration.run(memory_db_cursor) + migration.provide_dependency(dependency.name, "banana_sushi") + migration.run(memory_db_cursor) + memory_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='banana_sushi';") + assert memory_db_cursor.fetchone() is not None + + def test_migrator_registers_migration(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: migration = migration_no_op migrator.register_migration(migration) From f3a97e06ecd63c4978343e05dfacb47df549212e Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 11 Dec 2023 21:11:37 -0500 Subject: [PATCH 147/515] add the tag_release.sh script --- Makefile | 2 +- installer/tag_release.sh | 71 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100755 installer/tag_release.sh diff --git a/Makefile b/Makefile index 309aeee4d5..10d7a257c5 100644 --- a/Makefile +++ b/Makefile @@ -48,5 +48,5 @@ installer-zip: # Tag the release tag-release: - cd installer && ./tag-release.sh + cd installer && ./tag_release.sh diff --git a/installer/tag_release.sh b/installer/tag_release.sh new file mode 100755 index 0000000000..a914c1a505 --- /dev/null +++ b/installer/tag_release.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +set -e + +BCYAN="\e[1;36m" +BYELLOW="\e[1;33m" +BGREEN="\e[1;32m" +BRED="\e[1;31m" +RED="\e[31m" +RESET="\e[0m" + +function does_tag_exist { + git rev-parse --quiet --verify "refs/tags/$1" >/dev/null +} + +function git_show_ref { + git show-ref --dereference $1 --abbrev 7 +} + +function git_show { + git show -s --format='%h %s' $1 +} + +VERSION=$( + cd .. + python -c "from invokeai.version import __version__ as version; print(version)" +) +PATCH="" +MAJOR_VERSION=$(echo $VERSION | sed 's/\..*$//') +VERSION="v${VERSION}${PATCH}" +LATEST_TAG="v${MAJOR_VERSION}-latest" + +if does_tag_exist $VERSION; then + echo -e "${BCYAN}${VERSION}${RESET} already exists:" + git_show_ref tags/$VERSION + echo +fi +if does_tag_exist $LATEST_TAG; then + echo -e "${BCYAN}${LATEST_TAG}${RESET} already exists:" + git_show_ref tags/$LATEST_TAG + echo +fi + +echo -e "${BGREEN}HEAD${RESET}:" +git_show +echo + +echo -e -n "Create tags ${BCYAN}${VERSION}${RESET} and ${BCYAN}${LATEST_TAG}${RESET} @ ${BGREEN}HEAD${RESET}, ${RED}deleting existing tags on remote${RESET}? " +read -e -p 'y/n [n]: ' input +RESPONSE=${input:='n'} +if [ "$RESPONSE" == 'y' ]; then + echo + echo -e "Deleting ${BCYAN}${VERSION}${RESET} tag on remote..." + git push --delete origin $VERSION + + echo -e "Tagging ${BGREEN}HEAD${RESET} with ${BCYAN}${VERSION}${RESET} locally..." + if ! git tag -fa $VERSION; then + echo "Existing/invalid tag" + exit -1 + fi + + echo -e "Deleting ${BCYAN}${LATEST_TAG}${RESET} tag on remote..." + git push --delete origin $LATEST_TAG + + echo -e "Tagging ${BGREEN}HEAD${RESET} with ${BCYAN}${LATEST_TAG}${RESET} locally..." + git tag -fa $LATEST_TAG + + echo -e "Pushing updated tags to remote..." + git push origin --tags +fi +exit 0 From 55b0c7cdc9ca91e3ba1cbb3a59625337f6408576 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:30:29 +1100 Subject: [PATCH 148/515] feat(db): tidy migration_2 --- .../shared/sqlite_migrator/migrations/migration_2.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index 7a5eb52c80..87cc3ddcea 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -6,12 +6,16 @@ from tqdm import tqdm from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration, MigrationDependency +# This migration requires an ImageFileStorageBase service and logger +image_files_dependency = MigrationDependency(name="image_files", dependency_type=ImageFileStorageBase) +logger_dependency = MigrationDependency(name="logger", dependency_type=Logger) + def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: """Migration callback for database version 2.""" - logger = kwargs["logger"] - image_files = kwargs["image_files"] + logger = kwargs[logger_dependency.name] + image_files = kwargs[image_files_dependency.name] _add_images_has_workflow(cursor) _add_session_queue_workflow(cursor) @@ -132,10 +136,6 @@ def _migrate_embedded_workflows( cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) -image_files_dependency = MigrationDependency(name="image_files", dependency_type=ImageFileStorageBase) -logger_dependency = MigrationDependency(name="logger", dependency_type=Logger) - - migration_2 = Migration( from_version=1, to_version=2, From 18ba7feca186ef3d014bf3f2a7946e6c8214fdc8 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:35:46 +1100 Subject: [PATCH 149/515] feat(db): update docstrings --- .../sqlite_migrator/sqlite_migrator_common.py | 47 +++++++++++++++---- .../sqlite_migrator/sqlite_migrator_impl.py | 11 ++++- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index e057b3a5e5..5786b2f1b1 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -22,7 +22,12 @@ class MigrationVersionError(ValueError): class MigrationDependency: - """Represents a dependency for a migration.""" + """ + Represents a dependency for a migration. + + :param name: The name of the dependency + :param dependency_type: The type of the dependency (e.g. str, SomeClass, etc.) + """ def __init__( self, @@ -55,26 +60,48 @@ class Migration(BaseModel): Migration callbacks will be provided an open cursor to the database. They should not commit their transaction; this is handled by the migrator. - If a migration needs an additional dependency, it must be provided with :meth:`provide_dependency` - before the migration is run. - Example Usage: ```py - # Define the migrate callback + # Define the migrate callback. The dependency may be accessed by name in the kwargs. def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: - some_dependency = kwargs["some_dependency"] + # Execute SQL using the cursor, taking care to *not commit* a transaction + cursor.execute('ALTER TABLE bananas ADD COLUMN with_sushi BOOLEAN DEFAULT FALSE;') ... - # Instantiate the migration, declaring dependencies + # Instantiate the migration migration = Migration( from_version=0, to_version=1, migrate_callback=migrate_callback, - dependencies={"some_dependency": MigrationDependency(name="some_dependency", dependency_type=SomeType)}, + ) + ``` + + If a migration needs an additional dependency, it must be provided with :meth:`provide_dependency` + before the migration is run. The migrator provides dependencies to the migrate callback, + raising an error if a dependency is missing or was provided the wrong type. + + Example Usage: + ```py + # Create a migration dependency. This migration needs access the image files service, so we set the type to the ABC of that service. + image_files_dependency = MigrationDependency(name="image_files", dependency_type=ImageFileStorageBase) + + # Define the migrate callback. The dependency may be accessed by name in the kwargs. The migrator will ensure that the dependency is of the required type. + def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: + image_files = kwargs[image_files_dependency.name] + # Do something with image_files + ... + + # Instantiate the migration, including the dependency. + migration = Migration( + from_version=0, + to_version=1, + migrate_callback=migrate_callback, + dependencies={image_files_dependency.name: image_files_dependency}, ) - # Register the dependency before running the migration - migration.provide_dependency(name="some_dependency", value=some_value) + # Provide the dependency before registering the migration. + # (DiskImageFileStorage is an implementation of ImageFileStorageBase) + migration.provide_dependency(name="image_files", value=DiskImageFileStorage()) ``` """ diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index ec32818e31..c0015336d5 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -10,11 +10,20 @@ class SQLiteMigrator: """ Manages migrations for a SQLite database. - :param db: The instanceof :class:`SqliteDatabase` to migrate. + :param db: The instance of :class:`SqliteDatabase` to migrate. Migrations should be registered with :meth:`register_migration`. Each migration is run in a transaction. If a migration fails, the transaction is rolled back. + + Example Usage: + ```py + db = SqliteDatabase(db_path="my_db.db", logger=logger) + migrator = SQLiteMigrator(db=db) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() + ``` """ backup_path: Optional[Path] = None From 95198da645c0c78c43a7f168545b6fccd7eeab8e Mon Sep 17 00:00:00 2001 From: "psychedelicious@windows" <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:54:47 +1100 Subject: [PATCH 150/515] fix(db): fix sqlite migrator tests on windows --- tests/test_sqlite_migrator.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 97419bcefa..1509c59d18 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -308,6 +308,8 @@ def test_migrator_runs_all_migrations_file(logger: Logger) -> None: with closing(sqlite3.connect(original_db_path)) as original_db_conn: original_db_cursor = original_db_conn.cursor() assert SQLiteMigrator._get_current_version(original_db_cursor) == 3 + # Must manually close else we get an error on Windows + db.conn.close() def test_migrator_makes_no_changes_on_failed_migration( From b0cfa5852639e59482272c08ebaaadf8821ad0bf Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 11 Dec 2023 22:47:19 -0500 Subject: [PATCH 151/515] allow the model record migrate script to update existing model records --- .../model_install/model_install_default.py | 2 +- .../model_records/model_records_sql.py | 28 ++++++------------- .../backend/model_manager/migrate_to_db.py | 27 +++++++++++++----- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 9022fc100c..70cc4d5018 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -85,7 +85,7 @@ class ModelInstallService(ModelInstallServiceBase): def event_bus(self) -> Optional[EventServiceBase]: # noqa D102 return self._event_bus - def stop(self) -> None: + def stop(self, *args, **kwargs) -> None: """Stop the install thread; after this the object can be deleted and garbage collected.""" self._install_queue.put(STOP_JOB) diff --git a/invokeai/app/services/model_records/model_records_sql.py b/invokeai/app/services/model_records/model_records_sql.py index 69ac0e158f..6acf1eb12e 100644 --- a/invokeai/app/services/model_records/model_records_sql.py +++ b/invokeai/app/services/model_records/model_records_sql.py @@ -96,10 +96,11 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): CREATE TABLE IF NOT EXISTS model_config ( id TEXT NOT NULL PRIMARY KEY, -- The next 3 fields are enums in python, unrestricted string here - base TEXT NOT NULL, - type TEXT NOT NULL, - name TEXT NOT NULL, - path TEXT NOT NULL, + base TEXT GENERATED ALWAYS as (json_extract(config, '$.base')) VIRTUAL NOT NULL, + type TEXT GENERATED ALWAYS as (json_extract(config, '$.type')) VIRTUAL NOT NULL, + name TEXT GENERATED ALWAYS as (json_extract(config, '$.name')) VIRTUAL NOT NULL, + path TEXT GENERATED ALWAYS as (json_extract(config, '$.path')) VIRTUAL NOT NULL, + format TEXT GENERATED ALWAYS as (json_extract(config, '$.format')) VIRTUAL NOT NULL, original_hash TEXT, -- could be null -- Serialized JSON representation of the whole config object, -- which will contain additional fields from subclasses @@ -175,21 +176,13 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): """--sql INSERT INTO model_config ( id, - base, - type, - name, - path, original_hash, config ) - VALUES (?,?,?,?,?,?,?); + VALUES (?,?,?); """, ( key, - record.base, - record.type, - record.name, - record.path, record.original_hash, json_serialized, ), @@ -269,14 +262,11 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): self._cursor.execute( """--sql UPDATE model_config - SET base=?, - type=?, - name=?, - path=?, + SET config=? WHERE id=?; """, - (record.base, record.type, record.name, record.path, json_serialized, key), + (json_serialized, key), ) if self._cursor.rowcount == 0: raise UnknownModelException("model not found") @@ -374,7 +364,7 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): self._cursor.execute( """--sql SELECT config FROM model_config - WHERE model_path=?; + WHERE path=?; """, (str(path),), ) diff --git a/invokeai/backend/model_manager/migrate_to_db.py b/invokeai/backend/model_manager/migrate_to_db.py index eac25a44a0..b02df6a2aa 100644 --- a/invokeai/backend/model_manager/migrate_to_db.py +++ b/invokeai/backend/model_manager/migrate_to_db.py @@ -2,6 +2,7 @@ """Migrate from the InvokeAI v2 models.yaml format to the v3 sqlite format.""" from hashlib import sha1 +from logging import Logger from omegaconf import DictConfig, OmegaConf from pydantic import TypeAdapter @@ -10,6 +11,7 @@ from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.model_records import ( DuplicateModelException, ModelRecordServiceSQL, + UnknownModelException, ) from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.backend.model_manager.config import ( @@ -38,9 +40,9 @@ class MigrateModelYamlToDb: """ config: InvokeAIAppConfig - logger: InvokeAILogger + logger: Logger - def __init__(self): + def __init__(self) -> None: self.config = InvokeAIAppConfig.get_config() self.config.parse_args() self.logger = InvokeAILogger.get_logger() @@ -53,9 +55,11 @@ class MigrateModelYamlToDb: def get_yaml(self) -> DictConfig: """Fetch the models.yaml DictConfig for this installation.""" yaml_path = self.config.model_conf_path - return OmegaConf.load(yaml_path) + omegaconf = OmegaConf.load(yaml_path) + assert isinstance(omegaconf,DictConfig) + return omegaconf - def migrate(self): + def migrate(self) -> None: """Do the migration from models.yaml to invokeai.db.""" db = self.get_db() yaml = self.get_yaml() @@ -69,6 +73,7 @@ class MigrateModelYamlToDb: base_type, model_type, model_name = str(model_key).split("/") hash = FastModelHash.hash(self.config.models_path / stanza.path) + assert isinstance(model_key, str) new_key = sha1(model_key.encode("utf-8")).hexdigest() stanza["base"] = BaseModelType(base_type) @@ -77,12 +82,20 @@ class MigrateModelYamlToDb: stanza["original_hash"] = hash stanza["current_hash"] = hash - new_config = ModelsValidator.validate_python(stanza) - self.logger.info(f"Adding model {model_name} with key {model_key}") + new_config: AnyModelConfig = ModelsValidator.validate_python(stanza) # type: ignore # see https://github.com/pydantic/pydantic/discussions/7094 + try: - db.add_model(new_key, new_config) + if original_record := db.search_by_path(stanza.path): + key = original_record[0].key + self.logger.info(f"Updating model {model_name} with information from models.yaml using key {key}") + db.update_model(key, new_config) + else: + self.logger.info(f"Adding model {model_name} with key {model_key}") + db.add_model(new_key, new_config) except DuplicateModelException: self.logger.warning(f"Model {model_name} is already in the database") + except UnknownModelException: + self.logger.warning(f"Model at {stanza.path} could not be found in database") def main(): From 2fbe3a31045b8730d7b67b64dc307f66336c324b Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 11 Dec 2023 23:04:18 -0500 Subject: [PATCH 152/515] fix ruff error --- invokeai/backend/model_manager/migrate_to_db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/backend/model_manager/migrate_to_db.py b/invokeai/backend/model_manager/migrate_to_db.py index b02df6a2aa..efc8e679af 100644 --- a/invokeai/backend/model_manager/migrate_to_db.py +++ b/invokeai/backend/model_manager/migrate_to_db.py @@ -56,7 +56,7 @@ class MigrateModelYamlToDb: """Fetch the models.yaml DictConfig for this installation.""" yaml_path = self.config.model_conf_path omegaconf = OmegaConf.load(yaml_path) - assert isinstance(omegaconf,DictConfig) + assert isinstance(omegaconf, DictConfig) return omegaconf def migrate(self) -> None: From fd4e041e7c959abd66575301ae1c5c00b8574a42 Mon Sep 17 00:00:00 2001 From: Kevin Turner <83819+keturn@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:48:32 -0800 Subject: [PATCH 153/515] feat: serve HTTPS when configured with `ssl_certfile` --- docs/features/CONFIGURATION.md | 18 ++++++++++-------- invokeai/app/api_app.py | 2 ++ invokeai/app/services/config/config_default.py | 3 +++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/features/CONFIGURATION.md b/docs/features/CONFIGURATION.md index f83caf522d..f98037d968 100644 --- a/docs/features/CONFIGURATION.md +++ b/docs/features/CONFIGURATION.md @@ -154,14 +154,16 @@ groups in `invokeia.yaml`: ### Web Server -| Setting | Default Value | Description | -|----------|----------------|--------------| -| `host` | `localhost` | Name or IP address of the network interface that the web server will listen on | -| `port` | `9090` | Network port number that the web server will listen on | -| `allow_origins` | `[]` | A list of host names or IP addresses that are allowed to connect to the InvokeAI API in the format `['host1','host2',...]` | -| `allow_credentials` | `true` | Require credentials for a foreign host to access the InvokeAI API (don't change this) | -| `allow_methods` | `*` | List of HTTP methods ("GET", "POST") that the web server is allowed to use when accessing the API | -| `allow_headers` | `*` | List of HTTP headers that the web server will accept when accessing the API | +| Setting | Default Value | Description | +|---------------------|---------------|----------------------------------------------------------------------------------------------------------------------------| +| `host` | `localhost` | Name or IP address of the network interface that the web server will listen on | +| `port` | `9090` | Network port number that the web server will listen on | +| `allow_origins` | `[]` | A list of host names or IP addresses that are allowed to connect to the InvokeAI API in the format `['host1','host2',...]` | +| `allow_credentials` | `true` | Require credentials for a foreign host to access the InvokeAI API (don't change this) | +| `allow_methods` | `*` | List of HTTP methods ("GET", "POST") that the web server is allowed to use when accessing the API | +| `allow_headers` | `*` | List of HTTP headers that the web server will accept when accessing the API | +| `ssl_certfile` | null | Path to an SSL certificate file, used to enable HTTPS. | +| `ssl_keyfile` | null | Path to an SSL keyfile, if the key is not included in the certificate file. | The documentation for InvokeAI's API can be accessed by browsing to the following URL: [http://localhost:9090/docs]. diff --git a/invokeai/app/api_app.py b/invokeai/app/api_app.py index 13fd541139..ea28cdfe8e 100644 --- a/invokeai/app/api_app.py +++ b/invokeai/app/api_app.py @@ -272,6 +272,8 @@ def invoke_api() -> None: port=port, loop="asyncio", log_level=app_config.log_level, + ssl_certfile=app_config.ssl_certfile, + ssl_keyfile=app_config.ssl_keyfile, ) server = uvicorn.Server(config) diff --git a/invokeai/app/services/config/config_default.py b/invokeai/app/services/config/config_default.py index f712640d9c..a55bcd3a21 100644 --- a/invokeai/app/services/config/config_default.py +++ b/invokeai/app/services/config/config_default.py @@ -221,6 +221,9 @@ class InvokeAIAppConfig(InvokeAISettings): allow_credentials : bool = Field(default=True, description="Allow CORS credentials", json_schema_extra=Categories.WebServer) allow_methods : List[str] = Field(default=["*"], description="Methods allowed for CORS", json_schema_extra=Categories.WebServer) allow_headers : List[str] = Field(default=["*"], description="Headers allowed for CORS", json_schema_extra=Categories.WebServer) + # SSL options correspond to https://www.uvicorn.org/settings/#https + ssl_certfile : Optional[Path] = Field(default=None, description="SSL certificate file (for HTTPS)", json_schema_extra=Categories.WebServer) + ssl_keyfile : Optional[Path] = Field(default=None, description="SSL key file", json_schema_extra=Categories.WebServer) # FEATURES esrgan : bool = Field(default=True, description="Enable/disable upscaling code", json_schema_extra=Categories.Features) From 5f77ef7e99ca47bbacd6460e1cd5b7602c00d5f1 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:30:57 +1100 Subject: [PATCH 154/515] feat(db): improve docstrings in migrator --- .../sqlite_migrator/sqlite_migrator_common.py | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index 5786b2f1b1..74bed4f953 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -7,7 +7,16 @@ from pydantic import BaseModel, ConfigDict, Field, model_validator @runtime_checkable class MigrateCallback(Protocol): - """A callback that performs a migration.""" + """ + A callback that performs a migration. + + Migrate callbacks are provided an open cursor to the database. They should not commit their + transaction; this is handled by the migrator. + + If the callback needs to access additional dependencies, will be provided to the callback at runtime. + + See :class:`Migration` for an example. + """ def __call__(self, cursor: sqlite3.Cursor, **kwargs: Any) -> None: ... @@ -26,7 +35,7 @@ class MigrationDependency: Represents a dependency for a migration. :param name: The name of the dependency - :param dependency_type: The type of the dependency (e.g. str, SomeClass, etc.) + :param dependency_type: The type of the dependency (e.g. `str`, `int`, `SomeClass`, etc.) """ def __init__( @@ -62,10 +71,10 @@ class Migration(BaseModel): Example Usage: ```py - # Define the migrate callback. The dependency may be accessed by name in the kwargs. + # Define the migrate callback. This migration adds a column to the sushi table. def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: # Execute SQL using the cursor, taking care to *not commit* a transaction - cursor.execute('ALTER TABLE bananas ADD COLUMN with_sushi BOOLEAN DEFAULT FALSE;') + cursor.execute('ALTER TABLE sushi ADD COLUMN with_banana BOOLEAN DEFAULT TRUE;') ... # Instantiate the migration @@ -114,6 +123,7 @@ class Migration(BaseModel): @model_validator(mode="after") def validate_to_version(self) -> "Migration": + """Validates that to_version is one greater than from_version.""" if self.to_version != self.from_version + 1: raise ValueError("to_version must be one greater than from_version") return self @@ -143,7 +153,12 @@ class Migration(BaseModel): class MigrationSet: - """A set of Migrations. Performs validation during migration registration and provides utility methods.""" + """ + A set of Migrations. Performs validation during migration registration and provides utility methods. + + Migrations should be registered with `register()`. Once all are registered, `validate_migration_chain()` + should be called to ensure that the migrations form a single chain of migrations from version 0 to the latest version. + """ def __init__(self) -> None: self._migrations: set[Migration] = set() From 43f283711773f789e43b0337ad96926001aeeaf6 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:04:13 +1100 Subject: [PATCH 155/515] feat(nodes): add invocation classifications Invocations now have a classification: - Stable: LTS - Beta: LTS planned, API may change - Prototype: No LTS planned, API may change, may be removed entirely The `@invocation` decorator has a new arg `classification`, and an enum `Classification` is added to `baseinvocation.py`. The default is Stable; this is a non-breaking change. The classification is presented in the node header as a hammer icon (Beta) or flask icon (prototype). The icon has a tooltip briefly describing the classification. --- invokeai/app/invocations/baseinvocation.py | 18 + invokeai/frontend/web/public/locales/en.json | 4 +- .../InvocationNodeClassificationIcon.tsx | 68 +++ .../nodes/Invocation/InvocationNodeHeader.tsx | 2 + .../nodes/hooks/useNodeClassification.ts | 23 + .../web/src/features/nodes/types/common.ts | 3 + .../src/features/nodes/types/invocation.ts | 3 +- .../features/nodes/util/schema/parseSchema.ts | 2 + .../frontend/web/src/services/api/schema.d.ts | 569 ++++++++++++++++-- 9 files changed, 656 insertions(+), 36 deletions(-) create mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeClassificationIcon.tsx create mode 100644 invokeai/frontend/web/src/features/nodes/hooks/useNodeClassification.ts diff --git a/invokeai/app/invocations/baseinvocation.py b/invokeai/app/invocations/baseinvocation.py index cd689a510b..05d8d515ea 100644 --- a/invokeai/app/invocations/baseinvocation.py +++ b/invokeai/app/invocations/baseinvocation.py @@ -39,6 +39,19 @@ class InvalidFieldError(TypeError): pass +class Classification(str, Enum, metaclass=MetaEnum): + """ + The feature classification of an Invocation. + - `Stable`: The invocation, including its inputs/outputs and internal logic, is stable. You may build workflows with it, having confidence that they will not break because of a change in this invocation. + - `Beta`: The invocation is not yet stable, but is planned to be stable in the future. Workflows built around this invocation may break, but we are committed to supporting this invocation long-term. + - `Prototype`: The invocation is not yet stable and may be removed from the application at any time. Workflows built around this invocation may break, and we are *not* committed to supporting this invocation. + """ + + Stable = "stable" + Beta = "beta" + Prototype = "prototype" + + class Input(str, Enum, metaclass=MetaEnum): """ The type of input a field accepts. @@ -439,6 +452,7 @@ class UIConfigBase(BaseModel): description='The node\'s version. Should be a valid semver string e.g. "1.0.0" or "3.8.13".', ) node_pack: Optional[str] = Field(default=None, description="Whether or not this is a custom node") + classification: Classification = Field(default=Classification.Stable, description="The node's classification") model_config = ConfigDict( validate_assignment=True, @@ -607,6 +621,7 @@ class BaseInvocation(ABC, BaseModel): schema["category"] = uiconfig.category if uiconfig.node_pack is not None: schema["node_pack"] = uiconfig.node_pack + schema["classification"] = uiconfig.classification schema["version"] = uiconfig.version if "required" not in schema or not isinstance(schema["required"], list): schema["required"] = [] @@ -782,6 +797,7 @@ def invocation( category: Optional[str] = None, version: Optional[str] = None, use_cache: Optional[bool] = True, + classification: Classification = Classification.Stable, ) -> Callable[[Type[TBaseInvocation]], Type[TBaseInvocation]]: """ Registers an invocation. @@ -792,6 +808,7 @@ def invocation( :param Optional[str] category: Adds a category to the invocation. Used to group the invocations in the UI. Defaults to None. :param Optional[str] version: Adds a version to the invocation. Must be a valid semver string. Defaults to None. :param Optional[bool] use_cache: Whether or not to use the invocation cache. Defaults to True. The user may override this in the workflow editor. + :param FeatureClassification classification: The classification of the invocation. Defaults to FeatureClassification.Stable. Use Beta or Prototype if the invocation is unstable. """ def wrapper(cls: Type[TBaseInvocation]) -> Type[TBaseInvocation]: @@ -812,6 +829,7 @@ def invocation( cls.UIConfig.title = title cls.UIConfig.tags = tags cls.UIConfig.category = category + cls.UIConfig.classification = classification # Grab the node pack's name from the module name, if it's a custom node is_custom_node = cls.__module__.rsplit(".", 1)[0] == "invokeai.app.invocations" diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index c948311c29..ec257ee044 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -1032,7 +1032,9 @@ "workflowValidation": "Workflow Validation Error", "workflowVersion": "Version", "zoomInNodes": "Zoom In", - "zoomOutNodes": "Zoom Out" + "zoomOutNodes": "Zoom Out", + "betaDesc": "This invocation is in beta. Until it is stable, it may have breaking changes during app updates. We plan to support this invocation long-term.", + "prototypeDesc": "This invocation is a prototype. It may have breaking changes during app updates and may be removed at any time." }, "parameters": { "aspectRatio": "Aspect Ratio", diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeClassificationIcon.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeClassificationIcon.tsx new file mode 100644 index 0000000000..049d7d2072 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeClassificationIcon.tsx @@ -0,0 +1,68 @@ +import { Icon, Tooltip } from '@chakra-ui/react'; +import { memo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaFlask } from 'react-icons/fa'; +import { useNodeClassification } from 'features/nodes/hooks/useNodeClassification'; +import { Classification } from 'features/nodes/types/common'; +import { FaHammer } from 'react-icons/fa6'; + +interface Props { + nodeId: string; +} + +const InvocationNodeClassificationIcon = ({ nodeId }: Props) => { + const classification = useNodeClassification(nodeId); + + if (!classification || classification === 'stable') { + return null; + } + + return ( + } + placement="top" + shouldWrapChildren + > + + + ); +}; + +export default memo(InvocationNodeClassificationIcon); + +const ClassificationTooltipContent = memo( + ({ classification }: { classification: Classification }) => { + const { t } = useTranslation(); + + if (classification === 'beta') { + return t('nodes.betaDesc'); + } + + if (classification === 'prototype') { + return t('nodes.prototypeDesc'); + } + + return null; + } +); + +ClassificationTooltipContent.displayName = 'ClassificationTooltipContent'; + +const getIcon = (classification: Classification) => { + if (classification === 'beta') { + return FaHammer; + } + + if (classification === 'prototype') { + return FaFlask; + } + + return undefined; +}; diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeHeader.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeHeader.tsx index bd8c44770c..77496abb3a 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeHeader.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/InvocationNodeHeader.tsx @@ -5,6 +5,7 @@ import NodeTitle from 'features/nodes/components/flow/nodes/common/NodeTitle'; import InvocationNodeCollapsedHandles from './InvocationNodeCollapsedHandles'; import InvocationNodeInfoIcon from './InvocationNodeInfoIcon'; import InvocationNodeStatusIndicator from './InvocationNodeStatusIndicator'; +import InvocationNodeClassificationIcon from 'features/nodes/components/flow/nodes/Invocation/InvocationNodeClassificationIcon'; type Props = { nodeId: string; @@ -31,6 +32,7 @@ const InvocationNodeHeader = ({ nodeId, isOpen }: Props) => { }} > + diff --git a/invokeai/frontend/web/src/features/nodes/hooks/useNodeClassification.ts b/invokeai/frontend/web/src/features/nodes/hooks/useNodeClassification.ts new file mode 100644 index 0000000000..773f6de249 --- /dev/null +++ b/invokeai/frontend/web/src/features/nodes/hooks/useNodeClassification.ts @@ -0,0 +1,23 @@ +import { createMemoizedSelector } from 'app/store/createMemoizedSelector'; +import { stateSelector } from 'app/store/store'; +import { useAppSelector } from 'app/store/storeHooks'; +import { isInvocationNode } from 'features/nodes/types/invocation'; +import { useMemo } from 'react'; + +export const useNodeClassification = (nodeId: string) => { + const selector = useMemo( + () => + createMemoizedSelector(stateSelector, ({ nodes }) => { + const node = nodes.nodes.find((node) => node.id === nodeId); + if (!isInvocationNode(node)) { + return false; + } + const nodeTemplate = nodes.nodeTemplates[node?.data.type ?? '']; + return nodeTemplate?.classification; + }), + [nodeId] + ); + + const title = useAppSelector(selector); + return title; +}; diff --git a/invokeai/frontend/web/src/features/nodes/types/common.ts b/invokeai/frontend/web/src/features/nodes/types/common.ts index 460b301685..4dcebf0fe4 100644 --- a/invokeai/frontend/web/src/features/nodes/types/common.ts +++ b/invokeai/frontend/web/src/features/nodes/types/common.ts @@ -19,6 +19,9 @@ export const zColorField = z.object({ }); export type ColorField = z.infer; +export const zClassification = z.enum(['stable', 'beta', 'prototype']); +export type Classification = z.infer; + export const zSchedulerField = z.enum([ 'euler', 'deis', diff --git a/invokeai/frontend/web/src/features/nodes/types/invocation.ts b/invokeai/frontend/web/src/features/nodes/types/invocation.ts index 9e9fdeb955..927245aef4 100644 --- a/invokeai/frontend/web/src/features/nodes/types/invocation.ts +++ b/invokeai/frontend/web/src/features/nodes/types/invocation.ts @@ -1,6 +1,6 @@ import { Edge, Node } from 'reactflow'; import { z } from 'zod'; -import { zProgressImage } from './common'; +import { zClassification, zProgressImage } from './common'; import { zFieldInputInstance, zFieldInputTemplate, @@ -21,6 +21,7 @@ export const zInvocationTemplate = z.object({ version: zSemVer, useCache: z.boolean(), nodePack: z.string().min(1).nullish(), + classification: zClassification, }); export type InvocationTemplate = z.infer; // #endregion diff --git a/invokeai/frontend/web/src/features/nodes/util/schema/parseSchema.ts b/invokeai/frontend/web/src/features/nodes/util/schema/parseSchema.ts index 9ad391d7c3..c2930c2187 100644 --- a/invokeai/frontend/web/src/features/nodes/util/schema/parseSchema.ts +++ b/invokeai/frontend/web/src/features/nodes/util/schema/parseSchema.ts @@ -83,6 +83,7 @@ export const parseSchema = ( const description = schema.description ?? ''; const version = schema.version; const nodePack = schema.node_pack; + const classification = schema.classification; const inputs = reduce( schema.properties, @@ -245,6 +246,7 @@ export const parseSchema = ( outputs, useCache, nodePack, + classification, }; Object.assign(invocationsAccumulator, { [type]: invocation }); diff --git a/invokeai/frontend/web/src/services/api/schema.d.ts b/invokeai/frontend/web/src/services/api/schema.d.ts index 5a99f39e4e..aaa37d6370 100644 --- a/invokeai/frontend/web/src/services/api/schema.d.ts +++ b/invokeai/frontend/web/src/services/api/schema.d.ts @@ -100,7 +100,10 @@ export type paths = { get: operations["get_model_record"]; /** * Del Model Record - * @description Delete Model + * @description Delete model record from database. + * + * The configuration record will be removed. The corresponding weights files will be + * deleted as well if they reside within the InvokeAI "models" directory. */ delete: operations["del_model_record"]; /** @@ -116,6 +119,86 @@ export type paths = { */ post: operations["add_model_record"]; }; + "/api/v1/model/record/import": { + /** + * List Model Install Jobs + * @description Return list of model install jobs. + * + * If the optional 'source' argument is provided, then the list will be filtered + * for partial string matches against the install source. + */ + get: operations["list_model_install_jobs"]; + /** + * Import Model + * @description Add a model using its local path, repo_id, or remote URL. + * + * Models will be downloaded, probed, configured and installed in a + * series of background threads. The return object has `status` attribute + * that can be used to monitor progress. + * + * The source object is a discriminated Union of LocalModelSource, + * HFModelSource and URLModelSource. Set the "type" field to the + * appropriate value: + * + * * To install a local path using LocalModelSource, pass a source of form: + * `{ + * "type": "local", + * "path": "/path/to/model", + * "inplace": false + * }` + * The "inplace" flag, if true, will register the model in place in its + * current filesystem location. Otherwise, the model will be copied + * into the InvokeAI models directory. + * + * * To install a HuggingFace repo_id using HFModelSource, pass a source of form: + * `{ + * "type": "hf", + * "repo_id": "stabilityai/stable-diffusion-2.0", + * "variant": "fp16", + * "subfolder": "vae", + * "access_token": "f5820a918aaf01" + * }` + * The `variant`, `subfolder` and `access_token` fields are optional. + * + * * To install a remote model using an arbitrary URL, pass: + * `{ + * "type": "url", + * "url": "http://www.civitai.com/models/123456", + * "access_token": "f5820a918aaf01" + * }` + * The `access_token` field is optonal + * + * The model's configuration record will be probed and filled in + * automatically. To override the default guesses, pass "metadata" + * with a Dict containing the attributes you wish to override. + * + * Installation occurs in the background. Either use list_model_install_jobs() + * to poll for completion, or listen on the event bus for the following events: + * + * "model_install_started" + * "model_install_completed" + * "model_install_error" + * + * On successful completion, the event's payload will contain the field "key" + * containing the installed ID of the model. On an error, the event's payload + * will contain the fields "error_type" and "error" describing the nature of the + * error and its traceback, respectively. + */ + post: operations["import_model_record"]; + /** + * Prune Model Install Jobs + * @description Prune all completed and errored jobs from the install job list. + */ + patch: operations["prune_model_install_jobs"]; + }; + "/api/v1/model/record/sync": { + /** + * Sync Models To Config + * @description Traverse the models and autoimport directories. Model files without a corresponding + * record in the database are added. Orphan records without a models file are deleted. + */ + patch: operations["sync_models_to_config"]; + }; "/api/v1/images/upload": { /** * Upload Image @@ -946,6 +1029,16 @@ export type components = { */ prediction_type?: ("v_prediction" | "epsilon" | "sample") | null; }; + /** Body_import_model_record */ + Body_import_model_record: { + /** Source */ + source: components["schemas"]["LocalModelSource"] | components["schemas"]["HFModelSource"] | components["schemas"]["URLModelSource"]; + /** + * Config + * @description Dict of fields that override auto-probed values in the model config record, such as name, description and prediction_type + */ + config?: Record | null; + }; /** Body_merge_models */ Body_merge_models: { /** @description Model configuration */ @@ -1247,6 +1340,65 @@ export type components = { */ type: "infill_cv2"; }; + /** + * Calculate Image Tiles Even Split + * @description Calculate the coordinates and overlaps of tiles that cover a target image shape. + */ + CalculateImageTilesEvenSplitInvocation: { + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** + * Image Width + * @description The image width, in pixels, to calculate tiles for. + * @default 1024 + */ + image_width?: number; + /** + * Image Height + * @description The image height, in pixels, to calculate tiles for. + * @default 1024 + */ + image_height?: number; + /** + * Num Tiles X + * @description Number of tiles to divide image into on the x axis + * @default 2 + */ + num_tiles_x?: number; + /** + * Num Tiles Y + * @description Number of tiles to divide image into on the y axis + * @default 2 + */ + num_tiles_y?: number; + /** + * Overlap Fraction + * @description Overlap between adjacent tiles as a fraction of the tile's dimensions (0-1) + * @default 0.25 + */ + overlap_fraction?: number; + /** + * type + * @default calculate_image_tiles_even_split + * @constant + */ + type: "calculate_image_tiles_even_split"; + }; /** * Calculate Image Tiles * @description Calculate the coordinates and overlaps of tiles that cover a target image shape. @@ -1306,6 +1458,65 @@ export type components = { */ type: "calculate_image_tiles"; }; + /** + * Calculate Image Tiles Minimum Overlap + * @description Calculate the coordinates and overlaps of tiles that cover a target image shape. + */ + CalculateImageTilesMinimumOverlapInvocation: { + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** + * Image Width + * @description The image width, in pixels, to calculate tiles for. + * @default 1024 + */ + image_width?: number; + /** + * Image Height + * @description The image height, in pixels, to calculate tiles for. + * @default 1024 + */ + image_height?: number; + /** + * Tile Width + * @description The tile width, in pixels. + * @default 576 + */ + tile_width?: number; + /** + * Tile Height + * @description The tile height, in pixels. + * @default 576 + */ + tile_height?: number; + /** + * Min Overlap + * @description Minimum overlap between adjacent tiles, in pixels. + * @default 128 + */ + min_overlap?: number; + /** + * type + * @default calculate_image_tiles_min_overlap + * @constant + */ + type: "calculate_image_tiles_min_overlap"; + }; /** CalculateImageTilesOutput */ CalculateImageTilesOutput: { /** @@ -3509,7 +3720,7 @@ export type components = { * @description The nodes in this graph */ nodes?: { - [key: string]: components["schemas"]["SchedulerInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["BlankImageInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["CalculateImageTilesInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["FaceOffInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["MergeTilesToImageInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["TileToPropertiesInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["PairTileImageInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["SDXLLoraLoaderInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["LinearUIOutputInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["SaveImageInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["StringJoinInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["CropLatentsCoreInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["MaskCombineInvocation"]; + [key: string]: components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["SchedulerInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["SaveImageInvocation"] | components["schemas"]["CropLatentsCoreInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["BlankImageInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["StringJoinInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["CalculateImageTilesInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["FaceOffInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["CalculateImageTilesMinimumOverlapInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["MergeTilesToImageInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["MaskCombineInvocation"] | components["schemas"]["TileToPropertiesInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["SDXLLoraLoaderInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["PairTileImageInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["CalculateImageTilesEvenSplitInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["LinearUIOutputInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"]; }; /** * Edges @@ -3546,7 +3757,7 @@ export type components = { * @description The results of node executions */ results: { - [key: string]: components["schemas"]["ModelLoaderOutput"] | components["schemas"]["VAEOutput"] | components["schemas"]["IntegerOutput"] | components["schemas"]["T2IAdapterOutput"] | components["schemas"]["String2Output"] | components["schemas"]["ColorOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["UNetOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["TileToPropertiesOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["SDXLLoraLoaderOutput"] | components["schemas"]["PairTileImageOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["ONNXModelLoaderOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["ImageOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["CalculateImageTilesOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["ConditioningCollectionOutput"]; + [key: string]: components["schemas"]["ImageOutput"] | components["schemas"]["PairTileImageOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["ColorOutput"] | components["schemas"]["TileToPropertiesOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["SDXLLoraLoaderOutput"] | components["schemas"]["UNetOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["ConditioningCollectionOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["CalculateImageTilesOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["ONNXModelLoaderOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["VAEOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["T2IAdapterOutput"] | components["schemas"]["IntegerOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["String2Output"]; }; /** * Errors @@ -3610,6 +3821,26 @@ export type components = { */ type: "graph_output"; }; + /** + * HFModelSource + * @description A HuggingFace repo_id, with optional variant and sub-folder. + */ + HFModelSource: { + /** Repo Id */ + repo_id: string; + /** Variant */ + variant?: string | null; + /** Subfolder */ + subfolder?: string | null; + /** Access Token */ + access_token?: string | null; + /** + * Type + * @default hf + * @constant + */ + type?: "hf"; + }; /** HTTPValidationError */ HTTPValidationError: { /** Detail */ @@ -4992,6 +5223,12 @@ export type components = { */ type: "infill_tile"; }; + /** + * InstallStatus + * @description State of an install job running in the background. + * @enum {string} + */ + InstallStatus: "waiting" | "running" | "completed" | "error"; /** * Integer Collection Primitive * @description A collection of integer primitive values @@ -5731,6 +5968,25 @@ export type components = { * @enum {string} */ LoRAModelFormat: "lycoris" | "diffusers"; + /** + * LocalModelSource + * @description A local file or directory path. + */ + LocalModelSource: { + /** Path */ + path: string; + /** + * Inplace + * @default false + */ + inplace?: boolean | null; + /** + * Type + * @default local + * @constant + */ + type?: "local"; + }; /** * LogLevel * @enum {integer} @@ -6267,9 +6523,17 @@ export type components = { * @description A list of tile images with tile properties. */ tiles_with_images?: components["schemas"]["TileWithImage"][]; + /** + * Blend Mode + * @description blending type Linear or Seam + * @default Seam + * @enum {string} + */ + blend_mode?: "Linear" | "Seam"; /** * Blend Amount * @description The amount to blend adjacent tiles in pixels. Must be <= the amount of overlap between adjacent tiles. + * @default 32 */ blend_amount?: number; /** @@ -6517,6 +6781,54 @@ export type components = { /** @description Info to load submodel */ submodel?: components["schemas"]["SubModelType"] | null; }; + /** + * ModelInstallJob + * @description Object that tracks the current status of an install request. + */ + ModelInstallJob: { + /** + * @description Current status of install process + * @default waiting + */ + status?: components["schemas"]["InstallStatus"]; + /** + * Config In + * @description Configuration information (e.g. 'description') to apply to model. + */ + config_in?: Record; + /** + * Config Out + * @description After successful installation, this will hold the configuration object. + */ + config_out?: (components["schemas"]["MainDiffusersConfig"] | components["schemas"]["MainCheckpointConfig"]) | (components["schemas"]["ONNXSD1Config"] | components["schemas"]["ONNXSD2Config"]) | (components["schemas"]["VaeDiffusersConfig"] | components["schemas"]["VaeCheckpointConfig"]) | (components["schemas"]["ControlNetDiffusersConfig"] | components["schemas"]["ControlNetCheckpointConfig"]) | components["schemas"]["LoRAConfig"] | components["schemas"]["TextualInversionConfig"] | components["schemas"]["IPAdapterConfig"] | components["schemas"]["CLIPVisionDiffusersConfig"] | components["schemas"]["T2IConfig"] | null; + /** + * Inplace + * @description Leave model in its current location; otherwise install under models directory + * @default false + */ + inplace?: boolean; + /** + * Source + * @description Source (URL, repo_id, or local path) of model + */ + source: components["schemas"]["LocalModelSource"] | components["schemas"]["HFModelSource"] | components["schemas"]["URLModelSource"]; + /** + * Local Path + * Format: path + * @description Path to locally-downloaded model; may be the same as the source + */ + local_path: string; + /** + * Error Type + * @description Class name of the exception that led to status==ERROR + */ + error_type?: string | null; + /** + * Error + * @description Error traceback + */ + error?: string | null; + }; /** * ModelLoaderOutput * @description Model loader output @@ -9687,6 +9999,25 @@ export type components = { */ type: "unet_output"; }; + /** + * URLModelSource + * @description A generic URL point to a checkpoint file. + */ + URLModelSource: { + /** + * Url + * Format: uri + */ + url: string; + /** Access Token */ + access_token?: string | null; + /** + * Type + * @default generic_url + * @constant + */ + type?: "generic_url"; + }; /** Upscaler */ Upscaler: { /** @@ -10200,6 +10531,15 @@ export type components = { * @enum {string} */ invokeai__backend__model_manager__config__SchedulerPredictionType: "epsilon" | "v_prediction" | "sample"; + /** + * Classification + * @description The feature classification of an Invocation. + * - `Stable`: The invocation, including its inputs/outputs and internal logic, is stable. You may build workflows with it, having confidence that they will not break because of a change in this invocation. + * - `Beta`: The invocation is not yet stable, but is planned to be stable in the future. Workflows built around this invocation may break, but we are committed to supporting this invocation long-term. + * - `Prototype`: The invocation is not yet stable and may be removed from the application at any time. Workflows built around this invocation may break, and we are *not* committed to supporting this invocation. + * @enum {string} + */ + Classification: "stable" | "beta" | "prototype"; /** * FieldKind * @description The kind of field. @@ -10323,6 +10663,11 @@ export type components = { * @default null */ node_pack: string | null; + /** + * @description The node's classification + * @default stable + */ + classification: components["schemas"]["Classification"]; }; /** * UIType @@ -10352,54 +10697,54 @@ export type components = { * @enum {string} */ UIType: "SDXLMainModelField" | "SDXLRefinerModelField" | "ONNXModelField" | "VAEModelField" | "LoRAModelField" | "ControlNetModelField" | "IPAdapterModelField" | "SchedulerField" | "AnyField" | "CollectionField" | "CollectionItemField" | "DEPRECATED_Boolean" | "DEPRECATED_Color" | "DEPRECATED_Conditioning" | "DEPRECATED_Control" | "DEPRECATED_Float" | "DEPRECATED_Image" | "DEPRECATED_Integer" | "DEPRECATED_Latents" | "DEPRECATED_String" | "DEPRECATED_BooleanCollection" | "DEPRECATED_ColorCollection" | "DEPRECATED_ConditioningCollection" | "DEPRECATED_ControlCollection" | "DEPRECATED_FloatCollection" | "DEPRECATED_ImageCollection" | "DEPRECATED_IntegerCollection" | "DEPRECATED_LatentsCollection" | "DEPRECATED_StringCollection" | "DEPRECATED_BooleanPolymorphic" | "DEPRECATED_ColorPolymorphic" | "DEPRECATED_ConditioningPolymorphic" | "DEPRECATED_ControlPolymorphic" | "DEPRECATED_FloatPolymorphic" | "DEPRECATED_ImagePolymorphic" | "DEPRECATED_IntegerPolymorphic" | "DEPRECATED_LatentsPolymorphic" | "DEPRECATED_StringPolymorphic" | "DEPRECATED_MainModel" | "DEPRECATED_UNet" | "DEPRECATED_Vae" | "DEPRECATED_CLIP" | "DEPRECATED_Collection" | "DEPRECATED_CollectionItem" | "DEPRECATED_Enum" | "DEPRECATED_WorkflowField" | "DEPRECATED_IsIntermediate" | "DEPRECATED_BoardField" | "DEPRECATED_MetadataItem" | "DEPRECATED_MetadataItemCollection" | "DEPRECATED_MetadataItemPolymorphic" | "DEPRECATED_MetadataDict"; - /** - * StableDiffusionOnnxModelFormat - * @description An enumeration. - * @enum {string} - */ - StableDiffusionOnnxModelFormat: "olive" | "onnx"; - /** - * T2IAdapterModelFormat - * @description An enumeration. - * @enum {string} - */ - T2IAdapterModelFormat: "diffusers"; /** * StableDiffusion2ModelFormat * @description An enumeration. * @enum {string} */ StableDiffusion2ModelFormat: "checkpoint" | "diffusers"; - /** - * StableDiffusion1ModelFormat - * @description An enumeration. - * @enum {string} - */ - StableDiffusion1ModelFormat: "checkpoint" | "diffusers"; - /** - * CLIPVisionModelFormat - * @description An enumeration. - * @enum {string} - */ - CLIPVisionModelFormat: "diffusers"; - /** - * IPAdapterModelFormat - * @description An enumeration. - * @enum {string} - */ - IPAdapterModelFormat: "invokeai"; /** * StableDiffusionXLModelFormat * @description An enumeration. * @enum {string} */ StableDiffusionXLModelFormat: "checkpoint" | "diffusers"; + /** + * StableDiffusionOnnxModelFormat + * @description An enumeration. + * @enum {string} + */ + StableDiffusionOnnxModelFormat: "olive" | "onnx"; + /** + * IPAdapterModelFormat + * @description An enumeration. + * @enum {string} + */ + IPAdapterModelFormat: "invokeai"; + /** + * CLIPVisionModelFormat + * @description An enumeration. + * @enum {string} + */ + CLIPVisionModelFormat: "diffusers"; + /** + * StableDiffusion1ModelFormat + * @description An enumeration. + * @enum {string} + */ + StableDiffusion1ModelFormat: "checkpoint" | "diffusers"; /** * ControlNetModelFormat * @description An enumeration. * @enum {string} */ ControlNetModelFormat: "checkpoint" | "diffusers"; + /** + * T2IAdapterModelFormat + * @description An enumeration. + * @enum {string} + */ + T2IAdapterModelFormat: "diffusers"; }; responses: never; parameters: never; @@ -10802,6 +11147,8 @@ export type operations = { base_models?: components["schemas"]["invokeai__backend__model_manager__config__BaseModelType"][] | null; /** @description The type of model to get */ model_type?: components["schemas"]["invokeai__backend__model_manager__config__ModelType"] | null; + /** @description Exact match on the name of the model */ + model_name?: string | null; }; }; responses: { @@ -10855,7 +11202,10 @@ export type operations = { }; /** * Del Model Record - * @description Delete Model + * @description Delete model record from database. + * + * The configuration record will be removed. The corresponding weights files will be + * deleted as well if they reside within the InvokeAI "models" directory. */ del_model_record: { parameters: { @@ -10957,6 +11307,157 @@ export type operations = { }; }; }; + /** + * List Model Install Jobs + * @description Return list of model install jobs. + * + * If the optional 'source' argument is provided, then the list will be filtered + * for partial string matches against the install source. + */ + list_model_install_jobs: { + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": components["schemas"]["ModelInstallJob"][]; + }; + }; + }; + }; + /** + * Import Model + * @description Add a model using its local path, repo_id, or remote URL. + * + * Models will be downloaded, probed, configured and installed in a + * series of background threads. The return object has `status` attribute + * that can be used to monitor progress. + * + * The source object is a discriminated Union of LocalModelSource, + * HFModelSource and URLModelSource. Set the "type" field to the + * appropriate value: + * + * * To install a local path using LocalModelSource, pass a source of form: + * `{ + * "type": "local", + * "path": "/path/to/model", + * "inplace": false + * }` + * The "inplace" flag, if true, will register the model in place in its + * current filesystem location. Otherwise, the model will be copied + * into the InvokeAI models directory. + * + * * To install a HuggingFace repo_id using HFModelSource, pass a source of form: + * `{ + * "type": "hf", + * "repo_id": "stabilityai/stable-diffusion-2.0", + * "variant": "fp16", + * "subfolder": "vae", + * "access_token": "f5820a918aaf01" + * }` + * The `variant`, `subfolder` and `access_token` fields are optional. + * + * * To install a remote model using an arbitrary URL, pass: + * `{ + * "type": "url", + * "url": "http://www.civitai.com/models/123456", + * "access_token": "f5820a918aaf01" + * }` + * The `access_token` field is optonal + * + * The model's configuration record will be probed and filled in + * automatically. To override the default guesses, pass "metadata" + * with a Dict containing the attributes you wish to override. + * + * Installation occurs in the background. Either use list_model_install_jobs() + * to poll for completion, or listen on the event bus for the following events: + * + * "model_install_started" + * "model_install_completed" + * "model_install_error" + * + * On successful completion, the event's payload will contain the field "key" + * containing the installed ID of the model. On an error, the event's payload + * will contain the fields "error_type" and "error" describing the nature of the + * error and its traceback, respectively. + */ + import_model_record: { + requestBody: { + content: { + "application/json": components["schemas"]["Body_import_model_record"]; + }; + }; + responses: { + /** @description The model imported successfully */ + 201: { + content: { + "application/json": components["schemas"]["ModelInstallJob"]; + }; + }; + /** @description There is already a model corresponding to this path or repo_id */ + 409: { + content: never; + }; + /** @description Unrecognized file/folder format */ + 415: { + content: never; + }; + /** @description Validation Error */ + 422: { + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description The model appeared to import successfully, but could not be found in the model manager */ + 424: { + content: never; + }; + }; + }; + /** + * Prune Model Install Jobs + * @description Prune all completed and errored jobs from the install job list. + */ + prune_model_install_jobs: { + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": unknown; + }; + }; + /** @description All completed and errored jobs have been pruned */ + 204: { + content: never; + }; + /** @description Bad request */ + 400: { + content: never; + }; + }; + }; + /** + * Sync Models To Config + * @description Traverse the models and autoimport directories. Model files without a corresponding + * record in the database are added. Orphan records without a models file are deleted. + */ + sync_models_to_config: { + responses: { + /** @description Successful Response */ + 200: { + content: { + "application/json": unknown; + }; + }; + /** @description Model config record database resynced with files on disk */ + 204: { + content: never; + }; + /** @description Bad request */ + 400: { + content: never; + }; + }; + }; /** * Upload Image * @description Uploads an image From 1a136d6167845f1416270d91883cf9743b68f27e Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:33:23 +1100 Subject: [PATCH 156/515] feat(nodes): fix classification docstrings --- invokeai/app/invocations/baseinvocation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/invokeai/app/invocations/baseinvocation.py b/invokeai/app/invocations/baseinvocation.py index 05d8d515ea..d9e0c7ba0d 100644 --- a/invokeai/app/invocations/baseinvocation.py +++ b/invokeai/app/invocations/baseinvocation.py @@ -41,7 +41,7 @@ class InvalidFieldError(TypeError): class Classification(str, Enum, metaclass=MetaEnum): """ - The feature classification of an Invocation. + The classification of an Invocation. - `Stable`: The invocation, including its inputs/outputs and internal logic, is stable. You may build workflows with it, having confidence that they will not break because of a change in this invocation. - `Beta`: The invocation is not yet stable, but is planned to be stable in the future. Workflows built around this invocation may break, but we are committed to supporting this invocation long-term. - `Prototype`: The invocation is not yet stable and may be removed from the application at any time. Workflows built around this invocation may break, and we are *not* committed to supporting this invocation. @@ -808,7 +808,7 @@ def invocation( :param Optional[str] category: Adds a category to the invocation. Used to group the invocations in the UI. Defaults to None. :param Optional[str] version: Adds a version to the invocation. Must be a valid semver string. Defaults to None. :param Optional[bool] use_cache: Whether or not to use the invocation cache. Defaults to True. The user may override this in the workflow editor. - :param FeatureClassification classification: The classification of the invocation. Defaults to FeatureClassification.Stable. Use Beta or Prototype if the invocation is unstable. + :param Classification classification: The classification of the invocation. Defaults to FeatureClassification.Stable. Use Beta or Prototype if the invocation is unstable. """ def wrapper(cls: Type[TBaseInvocation]) -> Type[TBaseInvocation]: From 3d64bc886d41a0615fc509850c5994826921e69b Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:34:49 +1100 Subject: [PATCH 157/515] feat(nodes): flag all tiled upscaling nodes as beta --- invokeai/app/invocations/tiles.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index e368976b4b..c0582986a8 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -7,6 +7,7 @@ from pydantic import BaseModel from invokeai.app.invocations.baseinvocation import ( BaseInvocation, BaseInvocationOutput, + Classification, Input, InputField, InvocationContext, @@ -70,6 +71,7 @@ class CalculateImageTilesInvocation(BaseInvocation): tags=["tiles"], category="tiles", version="1.0.0", + classification=Classification.Beta, ) class CalculateImageTilesEvenSplitInvocation(BaseInvocation): """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" @@ -112,6 +114,7 @@ class CalculateImageTilesEvenSplitInvocation(BaseInvocation): tags=["tiles"], category="tiles", version="1.0.0", + classification=Classification.Beta, ) class CalculateImageTilesMinimumOverlapInvocation(BaseInvocation): """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" @@ -156,7 +159,14 @@ class TileToPropertiesOutput(BaseInvocationOutput): overlap_right: int = OutputField(description="Overlap between this tile and its right neighbor.") -@invocation("tile_to_properties", title="Tile to Properties", tags=["tiles"], category="tiles", version="1.0.0") +@invocation( + "tile_to_properties", + title="Tile to Properties", + tags=["tiles"], + category="tiles", + version="1.0.0", + classification=Classification.Beta, +) class TileToPropertiesInvocation(BaseInvocation): """Split a Tile into its individual properties.""" @@ -182,7 +192,14 @@ class PairTileImageOutput(BaseInvocationOutput): tile_with_image: TileWithImage = OutputField(description="A tile description with its corresponding image.") -@invocation("pair_tile_image", title="Pair Tile with Image", tags=["tiles"], category="tiles", version="1.0.0") +@invocation( + "pair_tile_image", + title="Pair Tile with Image", + tags=["tiles"], + category="tiles", + version="1.0.0", + classification=Classification.Beta, +) class PairTileImageInvocation(BaseInvocation): """Pair an image with its tile properties.""" @@ -204,7 +221,14 @@ class PairTileImageInvocation(BaseInvocation): BLEND_MODES = Literal["Linear", "Seam"] -@invocation("merge_tiles_to_image", title="Merge Tiles to Image", tags=["tiles"], category="tiles", version="1.1.0") +@invocation( + "merge_tiles_to_image", + title="Merge Tiles to Image", + tags=["tiles"], + category="tiles", + version="1.1.0", + classification=Classification.Beta, +) class MergeTilesToImageInvocation(BaseInvocation, WithMetadata): """Merge multiple tile images into a single image.""" From 7e831c8a969a14d316e43b96753d8360e406cf60 Mon Sep 17 00:00:00 2001 From: Rohinish <92542124+rohinish404@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:44:28 +0530 Subject: [PATCH 158/515] Selected in View within Gallery (#5240) * selector added * ref and useeffect added * scrolling done using useeffect * fixed scroll and changed the ref name * fixed scroll again * created hook for scroll logic * feat(ui): debounce metadata fetch by 300ms This vastly reduces the network requests when using the arrow keys to quickly skim through images. * feat(ui): extract logic to determine virtuoso scrollToIndex align This needs to be used in `useNextPrevImage()` to ensure the scrolling puts the image at the top or bottom appropriately * feat(ui): add debounce to image workflow hook This was spamming network requests like the metadata query --------- Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com> --- .../components/ImageGrid/GalleryImage.tsx | 16 +++++- .../components/ImageGrid/GalleryImageGrid.tsx | 54 +++++++++++++++--- .../gallery/components/ImageGrid/types.ts | 8 +++ .../ImageMetadataWorkflowTabContent.tsx | 4 +- .../gallery/hooks/useNextPrevImage.ts | 55 ++++++++++++++++++- .../gallery/hooks/useScrollToVisible.ts | 46 ++++++++++++++++ .../gallery/util/getScrollToIndexAlign.ts | 17 ++++++ .../api/hooks/useDebouncedImageWorkflow.ts | 22 ++++++++ .../api/hooks/useDebouncedMetadata.ts | 11 ++-- 9 files changed, 211 insertions(+), 22 deletions(-) create mode 100644 invokeai/frontend/web/src/features/gallery/components/ImageGrid/types.ts create mode 100644 invokeai/frontend/web/src/features/gallery/hooks/useScrollToVisible.ts create mode 100644 invokeai/frontend/web/src/features/gallery/util/getScrollToIndexAlign.ts create mode 100644 invokeai/frontend/web/src/services/api/hooks/useDebouncedImageWorkflow.ts diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx index b5b0828ff7..b2719c621f 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx @@ -3,6 +3,7 @@ import { useStore } from '@nanostores/react'; import { $customStarUI } from 'app/store/nanostores/customStarUI'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import IAIDndImage from 'common/components/IAIDndImage'; +import IAIDndImageIcon from 'common/components/IAIDndImageIcon'; import IAIFillSkeleton from 'common/components/IAIFillSkeleton'; import { imagesToDeleteSelected } from 'features/deleteImageModal/store/slice'; import { @@ -10,7 +11,9 @@ import { ImageDraggableData, TypesafeDraggableData, } from 'features/dnd/types'; +import { VirtuosoGalleryContext } from 'features/gallery/components/ImageGrid/types'; import { useMultiselect } from 'features/gallery/hooks/useMultiselect'; +import { useScrollToVisible } from 'features/gallery/hooks/useScrollToVisible'; import { MouseEvent, memo, useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FaTrash } from 'react-icons/fa'; @@ -20,15 +23,16 @@ import { useStarImagesMutation, useUnstarImagesMutation, } from 'services/api/endpoints/images'; -import IAIDndImageIcon from 'common/components/IAIDndImageIcon'; interface HoverableImageProps { imageName: string; + index: number; + virtuosoContext: VirtuosoGalleryContext; } const GalleryImage = (props: HoverableImageProps) => { const dispatch = useAppDispatch(); - const { imageName } = props; + const { imageName, virtuosoContext } = props; const { currentData: imageDTO } = useGetImageDTOQuery(imageName); const shift = useAppSelector((state) => state.hotkeys.shift); const { t } = useTranslation(); @@ -38,6 +42,13 @@ const GalleryImage = (props: HoverableImageProps) => { const customStarUi = useStore($customStarUI); + const imageContainerRef = useScrollToVisible( + isSelected, + props.index, + selectionCount, + virtuosoContext + ); + const handleDelete = useCallback( (e: MouseEvent) => { e.stopPropagation(); @@ -122,6 +133,7 @@ const GalleryImage = (props: HoverableImageProps) => { data-testid={`image-${imageDTO.image_name}`} > { const { currentViewTotal } = useBoardTotal(selectedBoardId); const queryArgs = useAppSelector(selectListImagesBaseQueryArgs); + const virtuosoRangeRef = useRef(null); + + const virtuosoRef = useRef(null); + const { currentData, isFetching, isSuccess, isError } = useListImagesQuery(queryArgs); @@ -72,12 +83,26 @@ const GalleryImageGrid = () => { }); }, [areMoreAvailable, listImages, queryArgs, currentData?.ids.length]); - const itemContentFunc = useCallback( - (index: number, imageName: EntityId) => ( - - ), - [] - ); + const virtuosoContext = useMemo(() => { + return { + virtuosoRef, + rootRef, + virtuosoRangeRef, + }; + }, []); + + const itemContentFunc: ItemContent = + useCallback( + (index, imageName, virtuosoContext) => ( + + ), + [] + ); useEffect(() => { // Initialize the gallery's custom scrollbar @@ -93,6 +118,15 @@ const GalleryImageGrid = () => { return () => osInstance()?.destroy(); }, [scroller, initialize, osInstance]); + const onRangeChanged = useCallback((range: ListRange) => { + virtuosoRangeRef.current = range; + }, []); + + useEffect(() => { + $useNextPrevImageState.setKey('virtuosoRef', virtuosoRef); + $useNextPrevImageState.setKey('virtuosoRangeRef', virtuosoRangeRef); + }, []); + if (!currentData) { return ( { }} scrollerRef={setScroller} itemContent={itemContentFunc} + ref={virtuosoRef} + rangeChanged={onRangeChanged} + context={virtuosoContext} + overscan={10} /> ; + rootRef: RefObject; + virtuosoRangeRef: RefObject; +}; diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataWorkflowTabContent.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataWorkflowTabContent.tsx index f719d22478..ddc3572083 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataWorkflowTabContent.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageMetadataViewer/ImageMetadataWorkflowTabContent.tsx @@ -1,7 +1,7 @@ import { IAINoContentFallback } from 'common/components/IAIImageFallback'; import { memo } from 'react'; import { useTranslation } from 'react-i18next'; -import { useGetImageWorkflowQuery } from 'services/api/endpoints/images'; +import { useDebouncedImageWorkflow } from 'services/api/hooks/useDebouncedImageWorkflow'; import { ImageDTO } from 'services/api/types'; import DataViewer from './DataViewer'; @@ -11,7 +11,7 @@ type Props = { const ImageMetadataWorkflowTabContent = ({ image }: Props) => { const { t } = useTranslation(); - const { currentData: workflow } = useGetImageWorkflowQuery(image.image_name); + const { workflow } = useDebouncedImageWorkflow(image); if (!workflow) { return ; diff --git a/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts b/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts index 26f4aaca6d..bbf6c26a4f 100644 --- a/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts +++ b/invokeai/frontend/web/src/features/gallery/hooks/useNextPrevImage.ts @@ -4,8 +4,11 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { selectListImagesBaseQueryArgs } from 'features/gallery/store/gallerySelectors'; import { imageSelected } from 'features/gallery/store/gallerySlice'; import { IMAGE_LIMIT } from 'features/gallery/store/types'; +import { getScrollToIndexAlign } from 'features/gallery/util/getScrollToIndexAlign'; import { clamp } from 'lodash-es'; -import { useCallback } from 'react'; +import { map } from 'nanostores'; +import { RefObject, useCallback } from 'react'; +import { ListRange, VirtuosoGridHandle } from 'react-virtuoso'; import { boardsApi } from 'services/api/endpoints/boards'; import { imagesApi, @@ -14,6 +17,16 @@ import { import { ListImagesArgs } from 'services/api/types'; import { imagesAdapter } from 'services/api/util'; +export type UseNextPrevImageState = { + virtuosoRef: RefObject | undefined; + virtuosoRangeRef: RefObject | undefined; +}; + +export const $useNextPrevImageState = map({ + virtuosoRef: undefined, + virtuosoRangeRef: undefined, +}); + export const nextPrevImageButtonsSelector = createMemoizedSelector( [stateSelector, selectListImagesBaseQueryArgs], (state, baseQueryArgs) => { @@ -78,6 +91,8 @@ export const nextPrevImageButtonsSelector = createMemoizedSelector( isFetching: status === 'pending', nextImage, prevImage, + nextImageIndex, + prevImageIndex, queryArgs, }; } @@ -88,7 +103,9 @@ export const useNextPrevImage = () => { const { nextImage, + nextImageIndex, prevImage, + prevImageIndex, areMoreImagesAvailable, isFetching, queryArgs, @@ -98,11 +115,43 @@ export const useNextPrevImage = () => { const handlePrevImage = useCallback(() => { prevImage && dispatch(imageSelected(prevImage)); - }, [dispatch, prevImage]); + const range = $useNextPrevImageState.get().virtuosoRangeRef?.current; + const virtuoso = $useNextPrevImageState.get().virtuosoRef?.current; + if (!range || !virtuoso) { + return; + } + + if ( + prevImageIndex !== undefined && + (prevImageIndex < range.startIndex || prevImageIndex > range.endIndex) + ) { + virtuoso.scrollToIndex({ + index: prevImageIndex, + behavior: 'smooth', + align: getScrollToIndexAlign(prevImageIndex, range), + }); + } + }, [dispatch, prevImage, prevImageIndex]); const handleNextImage = useCallback(() => { nextImage && dispatch(imageSelected(nextImage)); - }, [dispatch, nextImage]); + const range = $useNextPrevImageState.get().virtuosoRangeRef?.current; + const virtuoso = $useNextPrevImageState.get().virtuosoRef?.current; + if (!range || !virtuoso) { + return; + } + + if ( + nextImageIndex !== undefined && + (nextImageIndex < range.startIndex || nextImageIndex > range.endIndex) + ) { + virtuoso.scrollToIndex({ + index: nextImageIndex, + behavior: 'smooth', + align: getScrollToIndexAlign(nextImageIndex, range), + }); + } + }, [dispatch, nextImage, nextImageIndex]); const [listImages] = useLazyListImagesQuery(); diff --git a/invokeai/frontend/web/src/features/gallery/hooks/useScrollToVisible.ts b/invokeai/frontend/web/src/features/gallery/hooks/useScrollToVisible.ts new file mode 100644 index 0000000000..b74b7cbbdb --- /dev/null +++ b/invokeai/frontend/web/src/features/gallery/hooks/useScrollToVisible.ts @@ -0,0 +1,46 @@ +import { VirtuosoGalleryContext } from 'features/gallery/components/ImageGrid/types'; +import { getScrollToIndexAlign } from 'features/gallery/util/getScrollToIndexAlign'; +import { useEffect, useRef } from 'react'; + +export const useScrollToVisible = ( + isSelected: boolean, + index: number, + selectionCount: number, + virtuosoContext: VirtuosoGalleryContext +) => { + const imageContainerRef = useRef(null); + + useEffect(() => { + if ( + !isSelected || + selectionCount !== 1 || + !virtuosoContext.rootRef.current || + !virtuosoContext.virtuosoRef.current || + !virtuosoContext.virtuosoRangeRef.current || + !imageContainerRef.current + ) { + return; + } + + const itemRect = imageContainerRef.current.getBoundingClientRect(); + const rootRect = virtuosoContext.rootRef.current.getBoundingClientRect(); + const itemIsVisible = + itemRect.top >= rootRect.top && + itemRect.bottom <= rootRect.bottom && + itemRect.left >= rootRect.left && + itemRect.right <= rootRect.right; + + if (!itemIsVisible) { + virtuosoContext.virtuosoRef.current.scrollToIndex({ + index, + behavior: 'smooth', + align: getScrollToIndexAlign( + index, + virtuosoContext.virtuosoRangeRef.current + ), + }); + } + }, [isSelected, index, selectionCount, virtuosoContext]); + + return imageContainerRef; +}; diff --git a/invokeai/frontend/web/src/features/gallery/util/getScrollToIndexAlign.ts b/invokeai/frontend/web/src/features/gallery/util/getScrollToIndexAlign.ts new file mode 100644 index 0000000000..357c3365d2 --- /dev/null +++ b/invokeai/frontend/web/src/features/gallery/util/getScrollToIndexAlign.ts @@ -0,0 +1,17 @@ +import { ListRange } from 'react-virtuoso'; + +/** + * Gets the alignment for react-virtuoso's scrollToIndex function. + * @param index The index of the item. + * @param range The range of items currently visible. + * @returns + */ +export const getScrollToIndexAlign = ( + index: number, + range: ListRange +): 'start' | 'end' => { + if (index > (range.endIndex - range.startIndex) / 2 + range.startIndex) { + return 'end'; + } + return 'start'; +}; diff --git a/invokeai/frontend/web/src/services/api/hooks/useDebouncedImageWorkflow.ts b/invokeai/frontend/web/src/services/api/hooks/useDebouncedImageWorkflow.ts new file mode 100644 index 0000000000..e025041336 --- /dev/null +++ b/invokeai/frontend/web/src/services/api/hooks/useDebouncedImageWorkflow.ts @@ -0,0 +1,22 @@ +import { skipToken } from '@reduxjs/toolkit/query'; +import { useAppSelector } from 'app/store/storeHooks'; +import { useGetImageWorkflowQuery } from 'services/api/endpoints/images'; +import { ImageDTO } from 'services/api/types'; +import { useDebounce } from 'use-debounce'; + +export const useDebouncedImageWorkflow = (imageDTO?: ImageDTO | null) => { + const workflowFetchDebounce = useAppSelector( + (state) => state.config.workflowFetchDebounce ?? 300 + ); + + const [debouncedImageName] = useDebounce( + imageDTO?.has_workflow ? imageDTO.image_name : null, + workflowFetchDebounce + ); + + const { data: workflow, isLoading } = useGetImageWorkflowQuery( + debouncedImageName ?? skipToken + ); + + return { workflow, isLoading }; +}; diff --git a/invokeai/frontend/web/src/services/api/hooks/useDebouncedMetadata.ts b/invokeai/frontend/web/src/services/api/hooks/useDebouncedMetadata.ts index e9727ef6ae..1ed3b27475 100644 --- a/invokeai/frontend/web/src/services/api/hooks/useDebouncedMetadata.ts +++ b/invokeai/frontend/web/src/services/api/hooks/useDebouncedMetadata.ts @@ -1,17 +1,14 @@ import { skipToken } from '@reduxjs/toolkit/query'; -import { useDebounce } from 'use-debounce'; -import { useGetImageMetadataQuery } from 'services/api/endpoints/images'; import { useAppSelector } from 'app/store/storeHooks'; +import { useGetImageMetadataQuery } from 'services/api/endpoints/images'; +import { useDebounce } from 'use-debounce'; export const useDebouncedMetadata = (imageName?: string | null) => { const metadataFetchDebounce = useAppSelector( - (state) => state.config.metadataFetchDebounce + (state) => state.config.metadataFetchDebounce ?? 300 ); - const [debouncedImageName] = useDebounce( - imageName, - metadataFetchDebounce ?? 0 - ); + const [debouncedImageName] = useDebounce(imageName, metadataFetchDebounce); const { data: metadata, isLoading } = useGetImageMetadataQuery( debouncedImageName ?? skipToken From 6caa70123d0fc939f9af33cf00dc7bde3ff64ec8 Mon Sep 17 00:00:00 2001 From: junzi Date: Tue, 12 Dec 2023 06:43:10 +0100 Subject: [PATCH 159/515] translationBot(ui): update translation (Chinese (Simplified)) Currently translated at 96.4% (1314 of 1363 strings) Co-authored-by: junzi Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/zh_CN.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/invokeai/frontend/web/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json index ac03603923..b1b6852f25 100644 --- a/invokeai/frontend/web/public/locales/zh_CN.json +++ b/invokeai/frontend/web/public/locales/zh_CN.json @@ -109,7 +109,8 @@ "somethingWentWrong": "出了点问题", "copyError": "$t(gallery.copy) 错误", "input": "输入", - "notInstalled": "非 $t(common.installed)" + "notInstalled": "非 $t(common.installed)", + "delete": "删除" }, "gallery": { "generations": "生成的图像", From 87ff380fe482cd2426776bb9642f821500f5a05b Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 13:40:28 +0000 Subject: [PATCH 160/515] fix for calc_tiles_min_overlap when tile size is bigger than image size --- invokeai/backend/tiles/tiles.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 1948f6624e..cdc94bf760 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -191,7 +191,14 @@ def calc_tiles_min_overlap( assert min_overlap < tile_height assert min_overlap < tile_width - # The If Else catches the case when the tile size is larger than the images size and just clips the number of tiles to 1 + # catches the cases when the tile size is larger than the images size and just clips the number of tiles to 1 + + if image_width < tile_width: + tile_width = image_width + + if image_height < tile_height: + tile_height = image_height + num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 num_tiles_y = ( math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1 From 0b860582f0add6fc69374142f23d3744d1a8a8e6 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 14:00:06 +0000 Subject: [PATCH 161/515] remove unneeded if else --- invokeai/backend/tiles/tiles.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index cdc94bf760..9f5817a4ca 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -199,10 +199,8 @@ def calc_tiles_min_overlap( if image_height < tile_height: tile_height = image_height - num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 - num_tiles_y = ( - math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1 - ) + num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) + num_tiles_y = math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. tiles: list[Tile] = [] From bca237228016db3ddb9674da07f63262a1abd218 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 14:02:28 +0000 Subject: [PATCH 162/515] updated comment --- invokeai/backend/tiles/tiles.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 9f5817a4ca..11d0c86c5c 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -191,8 +191,7 @@ def calc_tiles_min_overlap( assert min_overlap < tile_height assert min_overlap < tile_width - # catches the cases when the tile size is larger than the images size and just clips the number of tiles to 1 - + # catches the cases when the tile size is larger than the images size and adjusts the tile size if image_width < tile_width: tile_width = image_width From 612912a6c980d13e905a4a6086a722342fba735f Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 14:12:22 +0000 Subject: [PATCH 163/515] updated tests with a test for tile > image for calc_tiles_min_overlap() --- tests/backend/tiles/test_tiles.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 0b18f9ed54..114ff4a5e0 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -241,6 +241,28 @@ def test_calc_tiles_min_overlap_not_evenly_divisible(): assert tiles == expected_tiles +def test_calc_tiles_min_overlap_tile_bigger_than_image(): + """Test calc_tiles_min_overlap() behavior when the tile is nigger than the image""" + # Parameters mimic roughly the same output as the original tile generations of the same test name + tiles = calc_tiles_min_overlap( + image_height=1024, + image_width=1024, + tile_height=1408, + tile_width=1408, + min_overlap=128, + ) + + expected_tiles = [ + # single tile + Tile( + coords=TBLR(top=0, bottom=1024, left=0, right=1024), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ), + ] + + assert tiles == expected_tiles + + @pytest.mark.parametrize( [ "image_height", From dd7deff1a35fb7d54161741e28fb8534e3a4d30f Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 13:40:28 +0000 Subject: [PATCH 164/515] fix for calc_tiles_min_overlap when tile size is bigger than image size --- invokeai/backend/tiles/tiles.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 1948f6624e..cdc94bf760 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -191,7 +191,14 @@ def calc_tiles_min_overlap( assert min_overlap < tile_height assert min_overlap < tile_width - # The If Else catches the case when the tile size is larger than the images size and just clips the number of tiles to 1 + # catches the cases when the tile size is larger than the images size and just clips the number of tiles to 1 + + if image_width < tile_width: + tile_width = image_width + + if image_height < tile_height: + tile_height = image_height + num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 num_tiles_y = ( math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1 From a64ced7b29cdeb6f81f4d48b3ca5d323a19f7876 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 14:00:06 +0000 Subject: [PATCH 165/515] remove unneeded if else --- invokeai/backend/tiles/tiles.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index cdc94bf760..9f5817a4ca 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -199,10 +199,8 @@ def calc_tiles_min_overlap( if image_height < tile_height: tile_height = image_height - num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) if tile_width < image_width else 1 - num_tiles_y = ( - math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) if tile_height < image_height else 1 - ) + num_tiles_x = math.ceil((image_width - min_overlap) / (tile_width - min_overlap)) + num_tiles_y = math.ceil((image_height - min_overlap) / (tile_height - min_overlap)) # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. tiles: list[Tile] = [] From 9620f9336c9e09ab686b89e82dfccd978c8c5d11 Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 14:02:28 +0000 Subject: [PATCH 166/515] updated comment --- invokeai/backend/tiles/tiles.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 9f5817a4ca..11d0c86c5c 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -191,8 +191,7 @@ def calc_tiles_min_overlap( assert min_overlap < tile_height assert min_overlap < tile_width - # catches the cases when the tile size is larger than the images size and just clips the number of tiles to 1 - + # catches the cases when the tile size is larger than the images size and adjusts the tile size if image_width < tile_width: tile_width = image_width From 15de7c21d93d20dcc8d4744dda70f1a5d2a2168a Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Tue, 12 Dec 2023 14:12:22 +0000 Subject: [PATCH 167/515] updated tests with a test for tile > image for calc_tiles_min_overlap() --- tests/backend/tiles/test_tiles.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 0b18f9ed54..114ff4a5e0 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -241,6 +241,28 @@ def test_calc_tiles_min_overlap_not_evenly_divisible(): assert tiles == expected_tiles +def test_calc_tiles_min_overlap_tile_bigger_than_image(): + """Test calc_tiles_min_overlap() behavior when the tile is nigger than the image""" + # Parameters mimic roughly the same output as the original tile generations of the same test name + tiles = calc_tiles_min_overlap( + image_height=1024, + image_width=1024, + tile_height=1408, + tile_width=1408, + min_overlap=128, + ) + + expected_tiles = [ + # single tile + Tile( + coords=TBLR(top=0, bottom=1024, left=0, right=1024), + overlap=TBLR(top=0, bottom=0, left=0, right=0), + ), + ] + + assert tiles == expected_tiles + + @pytest.mark.parametrize( [ "image_height", From d7cede6c28bf8116977f71e97e6dda976dc1290a Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 12 Dec 2023 19:08:34 +1100 Subject: [PATCH 168/515] chore/fix: bump fastapi to 0.105.0 This fixes a problem with `Annotated` which prevented us from using pydantic's `Field` to specify a discriminator for a union. We had to use FastAPI's `Body` as a workaround. --- .../services/model_install/model_install_base.py | 13 +------------ pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 81feaf85e7..80b493d02e 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -5,7 +5,6 @@ from enum import Enum from pathlib import Path from typing import Any, Dict, List, Literal, Optional, Union -from fastapi import Body from pydantic import BaseModel, Field, field_validator from pydantic.networks import AnyHttpUrl from typing_extensions import Annotated @@ -112,17 +111,7 @@ class URLModelSource(StringLikeSource): return str(self.url) -# Body() is being applied here rather than Field() because otherwise FastAPI will -# refuse to generate a schema. Relevant links: -# -# "Model Manager Refactor Phase 1 - SQL-based config storage -# https://github.com/invoke-ai/InvokeAI/pull/5039#discussion_r1389752119 (comment) -# Param: xyz can only be a request body, using Body() when using discriminated unions -# https://github.com/tiangolo/fastapi/discussions/9761 -# Body parameter cannot be a pydantic union anymore sinve v0.95 -# https://github.com/tiangolo/fastapi/discussions/9287 - -ModelSource = Annotated[Union[LocalModelSource, HFModelSource, URLModelSource], Body(discriminator="type")] +ModelSource = Annotated[Union[LocalModelSource, HFModelSource, URLModelSource], Field(discriminator="type")] class ModelInstallJob(BaseModel): diff --git a/pyproject.toml b/pyproject.toml index 5a07946e05..ca0c45a8fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ dependencies = [ "easing-functions", "einops", "facexlib", - "fastapi~=0.104.1", + "fastapi~=0.105.0", "fastapi-events~=0.9.1", "huggingface-hub~=0.16.4", "imohash", From 386b65653016200a926ad64fc8c82cbf74317091 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 13 Dec 2023 10:13:03 +1100 Subject: [PATCH 169/515] feat(db): remove unnecessary fixture declaration Also revert the change to `conftest.py` in which the file was flagged for pytest to crawl for fixtures. --- tests/conftest.py | 2 -- tests/fixtures/sqlite_database.py | 31 +++++++++++-------------------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index d37904d80e..8618f5e102 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,5 +4,3 @@ # We import the model_installer and torch_device fixtures here so that they can be used by all tests. Flake8 does not # play well with fixtures (F401 and F811), so this is cleaner than importing in all files that use these fixtures. from invokeai.backend.util.test_utils import model_installer, torch_device # noqa: F401 - -pytest_plugins = ["tests.fixtures.sqlite_database"] diff --git a/tests/fixtures/sqlite_database.py b/tests/fixtures/sqlite_database.py index 8609f81768..dd05bc06cb 100644 --- a/tests/fixtures/sqlite_database.py +++ b/tests/fixtures/sqlite_database.py @@ -1,9 +1,6 @@ from logging import Logger -from typing import Callable from unittest import mock -import pytest - from invokeai.app.services.config.config_default import InvokeAIAppConfig from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase @@ -11,23 +8,17 @@ from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator -CreateSqliteDatabaseFunction = Callable[[InvokeAIAppConfig, Logger], SqliteDatabase] +def create_sqlite_database(config: InvokeAIAppConfig, logger: Logger) -> SqliteDatabase: + db_path = None if config.use_memory_db else config.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) -@pytest.fixture -def create_sqlite_database() -> CreateSqliteDatabaseFunction: - def _create_sqlite_database(config: InvokeAIAppConfig, logger: Logger) -> SqliteDatabase: - db_path = None if config.use_memory_db else config.db_path - db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) + image_files = mock.Mock(spec=ImageFileStorageBase) - image_files = mock.Mock(spec=ImageFileStorageBase) - - migrator = SQLiteMigrator(db=db) - migration_2.provide_dependency("logger", logger) - migration_2.provide_dependency("image_files", image_files) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() - return db - - return _create_sqlite_database + migrator = SQLiteMigrator(db=db) + migration_2.provide_dependency("logger", logger) + migration_2.provide_dependency("image_files", image_files) + migrator.register_migration(migration_1) + migrator.register_migration(migration_2) + migrator.run_migrations() + return db From ebf5f5d4185697f89111af28164dabf48d2bfef4 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 13 Dec 2023 11:19:59 +1100 Subject: [PATCH 170/515] feat(db): address feedback, cleanup - use simpler pattern for migration dependencies - move SqliteDatabase & migration to utility method `init_db`, use this in both the app and tests, ensuring the same db schema is used in both --- invokeai/app/api/dependencies.py | 17 +- .../app/services/shared/sqlite/sqlite_util.py | 32 + .../sqlite_migrator/migrations/migration_1.py | 670 +++++++++--------- .../sqlite_migrator/migrations/migration_2.py | 326 ++++----- .../sqlite_migrator/sqlite_migrator_common.py | 131 ++-- .../sqlite_migrator/sqlite_migrator_impl.py | 6 +- tests/aa_nodes/test_graph_execution_state.py | 6 +- tests/aa_nodes/test_invoker.py | 6 +- .../model_install/test_model_install.py | 6 +- .../model_records/test_model_records_sql.py | 8 +- tests/fixtures/sqlite_database.py | 20 +- tests/test_sqlite_migrator.py | 109 +-- 12 files changed, 615 insertions(+), 722 deletions(-) create mode 100644 invokeai/app/services/shared/sqlite/sqlite_util.py diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 212d470d2c..2b88efbb95 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -2,9 +2,7 @@ from logging import Logger -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator +from invokeai.app.services.shared.sqlite.sqlite_util import init_db from invokeai.backend.util.logging import InvokeAILogger from invokeai.version.invokeai_version import __version__ @@ -33,7 +31,6 @@ from ..services.session_processor.session_processor_default import DefaultSessio from ..services.session_queue.session_queue_sqlite import SqliteSessionQueue from ..services.shared.default_graphs import create_system_graphs from ..services.shared.graph import GraphExecutionState, LibraryGraph -from ..services.shared.sqlite.sqlite_database import SqliteDatabase from ..services.urls.urls_default import LocalUrlService from ..services.workflow_records.workflow_records_sqlite import SqliteWorkflowRecordsStorage from .events import FastAPIEventService @@ -72,17 +69,7 @@ class ApiDependencies: output_folder = config.output_path image_files = DiskImageFileStorage(f"{output_folder}/images") - db_path = None if config.use_memory_db else config.db_path - db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) - - # This migration requires an ImageFileStorageBase service and logger - migration_2.provide_dependency("image_files", image_files) - migration_2.provide_dependency("logger", logger) - - migrator = SQLiteMigrator(db=db) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() + db = init_db(config=config, logger=logger, image_files=image_files) configuration = config logger = logger diff --git a/invokeai/app/services/shared/sqlite/sqlite_util.py b/invokeai/app/services/shared/sqlite/sqlite_util.py new file mode 100644 index 0000000000..a6293bb484 --- /dev/null +++ b/invokeai/app/services/shared/sqlite/sqlite_util.py @@ -0,0 +1,32 @@ +from logging import Logger + +from invokeai.app.services.config.config_default import InvokeAIAppConfig +from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase +from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import build_migration_1 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import build_migration_2 +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator + + +def init_db(config: InvokeAIAppConfig, logger: Logger, image_files: ImageFileStorageBase) -> SqliteDatabase: + """ + Initializes the SQLite database. + + :param config: The app config + :param logger: The logger + :param image_files: The image files service (used by migration 2) + + This function: + - Instantiates a :class:`SqliteDatabase` + - Instantiates a :class:`SQLiteMigrator` and registers all migrations + - Runs all migrations + """ + db_path = None if config.use_memory_db else config.db_path + db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) + + migrator = SQLiteMigrator(db=db) + migrator.register_migration(build_migration_1()) + migrator.register_migration(build_migration_2(image_files=image_files, logger=logger)) + migrator.run_migrations() + + return db diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py index e456cd94fc..574afb472f 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_1.py @@ -3,372 +3,370 @@ import sqlite3 from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration -def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: - """Migration callback for database version 1.""" +class Migration1Callback: + def __call__(self, cursor: sqlite3.Cursor) -> None: + """Migration callback for database version 1.""" - _create_board_images(cursor) - _create_boards(cursor) - _create_images(cursor) - _create_model_config(cursor) - _create_session_queue(cursor) - _create_workflow_images(cursor) - _create_workflows(cursor) + self._create_board_images(cursor) + self._create_boards(cursor) + self._create_images(cursor) + self._create_model_config(cursor) + self._create_session_queue(cursor) + self._create_workflow_images(cursor) + self._create_workflows(cursor) + def _create_board_images(self, cursor: sqlite3.Cursor) -> None: + """Creates the `board_images` table, indices and triggers.""" + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS board_images ( + board_id TEXT NOT NULL, + image_name TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME, + -- enforce one-to-many relationship between boards and images using PK + -- (we can extend this to many-to-many later) + PRIMARY KEY (image_name), + FOREIGN KEY (board_id) REFERENCES boards (board_id) ON DELETE CASCADE, + FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE + ); + """ + ] -def _create_board_images(cursor: sqlite3.Cursor) -> None: - """Creates the `board_images` table, indices and triggers.""" - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS board_images ( - board_id TEXT NOT NULL, - image_name TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME, - -- enforce one-to-many relationship between boards and images using PK - -- (we can extend this to many-to-many later) - PRIMARY KEY (image_name), - FOREIGN KEY (board_id) REFERENCES boards (board_id) ON DELETE CASCADE, - FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE - ); - """ - ] + indices = [ + "CREATE INDEX IF NOT EXISTS idx_board_images_board_id ON board_images (board_id);", + "CREATE INDEX IF NOT EXISTS idx_board_images_board_id_created_at ON board_images (board_id, created_at);", + ] - indices = [ - "CREATE INDEX IF NOT EXISTS idx_board_images_board_id ON board_images (board_id);", - "CREATE INDEX IF NOT EXISTS idx_board_images_board_id_created_at ON board_images (board_id, created_at);", - ] + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_board_images_updated_at + AFTER UPDATE + ON board_images FOR EACH ROW + BEGIN + UPDATE board_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE board_id = old.board_id AND image_name = old.image_name; + END; + """ + ] - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS tg_board_images_updated_at - AFTER UPDATE - ON board_images FOR EACH ROW - BEGIN - UPDATE board_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE board_id = old.board_id AND image_name = old.image_name; - END; - """ - ] + for stmt in tables + indices + triggers: + cursor.execute(stmt) - for stmt in tables + indices + triggers: - cursor.execute(stmt) + def _create_boards(self, cursor: sqlite3.Cursor) -> None: + """Creates the `boards` table, indices and triggers.""" + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS boards ( + board_id TEXT NOT NULL PRIMARY KEY, + board_name TEXT NOT NULL, + cover_image_name TEXT, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME, + FOREIGN KEY (cover_image_name) REFERENCES images (image_name) ON DELETE SET NULL + ); + """ + ] + indices = ["CREATE INDEX IF NOT EXISTS idx_boards_created_at ON boards (created_at);"] -def _create_boards(cursor: sqlite3.Cursor) -> None: - """Creates the `boards` table, indices and triggers.""" - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS boards ( - board_id TEXT NOT NULL PRIMARY KEY, - board_name TEXT NOT NULL, - cover_image_name TEXT, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME, - FOREIGN KEY (cover_image_name) REFERENCES images (image_name) ON DELETE SET NULL - ); - """ - ] + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_boards_updated_at + AFTER UPDATE + ON boards FOR EACH ROW + BEGIN + UPDATE boards SET updated_at = current_timestamp + WHERE board_id = old.board_id; + END; + """ + ] - indices = ["CREATE INDEX IF NOT EXISTS idx_boards_created_at ON boards (created_at);"] + for stmt in tables + indices + triggers: + cursor.execute(stmt) - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS tg_boards_updated_at - AFTER UPDATE - ON boards FOR EACH ROW - BEGIN - UPDATE boards SET updated_at = current_timestamp - WHERE board_id = old.board_id; - END; - """ - ] + def _create_images(self, cursor: sqlite3.Cursor) -> None: + """Creates the `images` table, indices and triggers. Adds the `starred` column.""" - for stmt in tables + indices + triggers: - cursor.execute(stmt) + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS images ( + image_name TEXT NOT NULL PRIMARY KEY, + -- This is an enum in python, unrestricted string here for flexibility + image_origin TEXT NOT NULL, + -- This is an enum in python, unrestricted string here for flexibility + image_category TEXT NOT NULL, + width INTEGER NOT NULL, + height INTEGER NOT NULL, + session_id TEXT, + node_id TEXT, + metadata TEXT, + is_intermediate BOOLEAN DEFAULT FALSE, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME + ); + """ + ] + indices = [ + "CREATE UNIQUE INDEX IF NOT EXISTS idx_images_image_name ON images(image_name);", + "CREATE INDEX IF NOT EXISTS idx_images_image_origin ON images(image_origin);", + "CREATE INDEX IF NOT EXISTS idx_images_image_category ON images(image_category);", + "CREATE INDEX IF NOT EXISTS idx_images_created_at ON images(created_at);", + ] -def _create_images(cursor: sqlite3.Cursor) -> None: - """Creates the `images` table, indices and triggers. Adds the `starred` column.""" + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_images_updated_at + AFTER UPDATE + ON images FOR EACH ROW + BEGIN + UPDATE images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE image_name = old.image_name; + END; + """ + ] - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS images ( - image_name TEXT NOT NULL PRIMARY KEY, - -- This is an enum in python, unrestricted string here for flexibility - image_origin TEXT NOT NULL, - -- This is an enum in python, unrestricted string here for flexibility - image_category TEXT NOT NULL, - width INTEGER NOT NULL, - height INTEGER NOT NULL, - session_id TEXT, - node_id TEXT, - metadata TEXT, - is_intermediate BOOLEAN DEFAULT FALSE, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME - ); - """ - ] + # Add the 'starred' column to `images` if it doesn't exist + cursor.execute("PRAGMA table_info(images)") + columns = [column[1] for column in cursor.fetchall()] - indices = [ - "CREATE UNIQUE INDEX IF NOT EXISTS idx_images_image_name ON images(image_name);", - "CREATE INDEX IF NOT EXISTS idx_images_image_origin ON images(image_origin);", - "CREATE INDEX IF NOT EXISTS idx_images_image_category ON images(image_category);", - "CREATE INDEX IF NOT EXISTS idx_images_created_at ON images(created_at);", - ] + if "starred" not in columns: + tables.append("ALTER TABLE images ADD COLUMN starred BOOLEAN DEFAULT FALSE;") + indices.append("CREATE INDEX IF NOT EXISTS idx_images_starred ON images(starred);") - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS tg_images_updated_at - AFTER UPDATE - ON images FOR EACH ROW - BEGIN - UPDATE images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE image_name = old.image_name; - END; - """ - ] + for stmt in tables + indices + triggers: + cursor.execute(stmt) - # Add the 'starred' column to `images` if it doesn't exist - cursor.execute("PRAGMA table_info(images)") - columns = [column[1] for column in cursor.fetchall()] + def _create_model_config(self, cursor: sqlite3.Cursor) -> None: + """Creates the `model_config` table, `model_manager_metadata` table, indices and triggers.""" - if "starred" not in columns: - tables.append("ALTER TABLE images ADD COLUMN starred BOOLEAN DEFAULT FALSE;") - indices.append("CREATE INDEX IF NOT EXISTS idx_images_starred ON images(starred);") + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS model_config ( + id TEXT NOT NULL PRIMARY KEY, + -- The next 3 fields are enums in python, unrestricted string here + base TEXT NOT NULL, + type TEXT NOT NULL, + name TEXT NOT NULL, + path TEXT NOT NULL, + original_hash TEXT, -- could be null + -- Serialized JSON representation of the whole config object, + -- which will contain additional fields from subclasses + config TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- unique constraint on combo of name, base and type + UNIQUE(name, base, type) + ); + """, + """--sql + CREATE TABLE IF NOT EXISTS model_manager_metadata ( + metadata_key TEXT NOT NULL PRIMARY KEY, + metadata_value TEXT NOT NULL + ); + """, + ] - for stmt in tables + indices + triggers: - cursor.execute(stmt) + # Add trigger for `updated_at`. + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS model_config_updated_at + AFTER UPDATE + ON model_config FOR EACH ROW + BEGIN + UPDATE model_config SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE id = old.id; + END; + """ + ] + # Add indexes for searchable fields + indices = [ + "CREATE INDEX IF NOT EXISTS base_index ON model_config(base);", + "CREATE INDEX IF NOT EXISTS type_index ON model_config(type);", + "CREATE INDEX IF NOT EXISTS name_index ON model_config(name);", + "CREATE UNIQUE INDEX IF NOT EXISTS path_index ON model_config(path);", + ] -def _create_model_config(cursor: sqlite3.Cursor) -> None: - """Creates the `model_config` table, `model_manager_metadata` table, indices and triggers.""" + for stmt in tables + indices + triggers: + cursor.execute(stmt) - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS model_config ( - id TEXT NOT NULL PRIMARY KEY, - -- The next 3 fields are enums in python, unrestricted string here - base TEXT NOT NULL, - type TEXT NOT NULL, - name TEXT NOT NULL, - path TEXT NOT NULL, - original_hash TEXT, -- could be null - -- Serialized JSON representation of the whole config object, - -- which will contain additional fields from subclasses - config TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- unique constraint on combo of name, base and type - UNIQUE(name, base, type) - ); - """, - """--sql - CREATE TABLE IF NOT EXISTS model_manager_metadata ( - metadata_key TEXT NOT NULL PRIMARY KEY, - metadata_value TEXT NOT NULL - ); - """, - ] + def _create_session_queue(self, cursor: sqlite3.Cursor) -> None: + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS session_queue ( + item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- used for ordering, cursor pagination + batch_id TEXT NOT NULL, -- identifier of the batch this queue item belongs to + queue_id TEXT NOT NULL, -- identifier of the queue this queue item belongs to + session_id TEXT NOT NULL UNIQUE, -- duplicated data from the session column, for ease of access + field_values TEXT, -- NULL if no values are associated with this queue item + session TEXT NOT NULL, -- the session to be executed + status TEXT NOT NULL DEFAULT 'pending', -- the status of the queue item, one of 'pending', 'in_progress', 'completed', 'failed', 'canceled' + priority INTEGER NOT NULL DEFAULT 0, -- the priority, higher is more important + error TEXT, -- any errors associated with this queue item + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), -- updated via trigger + started_at DATETIME, -- updated via trigger + completed_at DATETIME -- updated via trigger, completed items are cleaned up on application startup + -- Ideally this is a FK, but graph_executions uses INSERT OR REPLACE, and REPLACE triggers the ON DELETE CASCADE... + -- FOREIGN KEY (session_id) REFERENCES graph_executions (id) ON DELETE CASCADE + ); + """ + ] - # Add trigger for `updated_at`. - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS model_config_updated_at - AFTER UPDATE - ON model_config FOR EACH ROW - BEGIN - UPDATE model_config SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE id = old.id; - END; - """ - ] + indices = [ + "CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_item_id ON session_queue(item_id);", + "CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_session_id ON session_queue(session_id);", + "CREATE INDEX IF NOT EXISTS idx_session_queue_batch_id ON session_queue(batch_id);", + "CREATE INDEX IF NOT EXISTS idx_session_queue_created_priority ON session_queue(priority);", + "CREATE INDEX IF NOT EXISTS idx_session_queue_created_status ON session_queue(status);", + ] - # Add indexes for searchable fields - indices = [ - "CREATE INDEX IF NOT EXISTS base_index ON model_config(base);", - "CREATE INDEX IF NOT EXISTS type_index ON model_config(type);", - "CREATE INDEX IF NOT EXISTS name_index ON model_config(name);", - "CREATE UNIQUE INDEX IF NOT EXISTS path_index ON model_config(path);", - ] - - for stmt in tables + indices + triggers: - cursor.execute(stmt) - - -def _create_session_queue(cursor: sqlite3.Cursor) -> None: - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS session_queue ( - item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- used for ordering, cursor pagination - batch_id TEXT NOT NULL, -- identifier of the batch this queue item belongs to - queue_id TEXT NOT NULL, -- identifier of the queue this queue item belongs to - session_id TEXT NOT NULL UNIQUE, -- duplicated data from the session column, for ease of access - field_values TEXT, -- NULL if no values are associated with this queue item - session TEXT NOT NULL, -- the session to be executed - status TEXT NOT NULL DEFAULT 'pending', -- the status of the queue item, one of 'pending', 'in_progress', 'completed', 'failed', 'canceled' - priority INTEGER NOT NULL DEFAULT 0, -- the priority, higher is more important - error TEXT, -- any errors associated with this queue item - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), -- updated via trigger - started_at DATETIME, -- updated via trigger - completed_at DATETIME -- updated via trigger, completed items are cleaned up on application startup - -- Ideally this is a FK, but graph_executions uses INSERT OR REPLACE, and REPLACE triggers the ON DELETE CASCADE... - -- FOREIGN KEY (session_id) REFERENCES graph_executions (id) ON DELETE CASCADE - ); - """ - ] - - indices = [ - "CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_item_id ON session_queue(item_id);", - "CREATE UNIQUE INDEX IF NOT EXISTS idx_session_queue_session_id ON session_queue(session_id);", - "CREATE INDEX IF NOT EXISTS idx_session_queue_batch_id ON session_queue(batch_id);", - "CREATE INDEX IF NOT EXISTS idx_session_queue_created_priority ON session_queue(priority);", - "CREATE INDEX IF NOT EXISTS idx_session_queue_created_status ON session_queue(status);", - ] - - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS tg_session_queue_completed_at - AFTER UPDATE OF status ON session_queue - FOR EACH ROW - WHEN - NEW.status = 'completed' - OR NEW.status = 'failed' - OR NEW.status = 'canceled' - BEGIN - UPDATE session_queue - SET completed_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE item_id = NEW.item_id; - END; - """, - """--sql - CREATE TRIGGER IF NOT EXISTS tg_session_queue_started_at - AFTER UPDATE OF status ON session_queue - FOR EACH ROW - WHEN - NEW.status = 'in_progress' - BEGIN - UPDATE session_queue - SET started_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE item_id = NEW.item_id; - END; - """, - """--sql - CREATE TRIGGER IF NOT EXISTS tg_session_queue_updated_at - AFTER UPDATE - ON session_queue FOR EACH ROW - BEGIN + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_session_queue_completed_at + AFTER UPDATE OF status ON session_queue + FOR EACH ROW + WHEN + NEW.status = 'completed' + OR NEW.status = 'failed' + OR NEW.status = 'canceled' + BEGIN UPDATE session_queue - SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE item_id = old.item_id; - END; - """, - ] + SET completed_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE item_id = NEW.item_id; + END; + """, + """--sql + CREATE TRIGGER IF NOT EXISTS tg_session_queue_started_at + AFTER UPDATE OF status ON session_queue + FOR EACH ROW + WHEN + NEW.status = 'in_progress' + BEGIN + UPDATE session_queue + SET started_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE item_id = NEW.item_id; + END; + """, + """--sql + CREATE TRIGGER IF NOT EXISTS tg_session_queue_updated_at + AFTER UPDATE + ON session_queue FOR EACH ROW + BEGIN + UPDATE session_queue + SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE item_id = old.item_id; + END; + """, + ] - for stmt in tables + indices + triggers: - cursor.execute(stmt) + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + def _create_workflow_images(self, cursor: sqlite3.Cursor) -> None: + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS workflow_images ( + workflow_id TEXT NOT NULL, + image_name TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Soft delete, currently unused + deleted_at DATETIME, + -- enforce one-to-many relationship between workflows and images using PK + -- (we can extend this to many-to-many later) + PRIMARY KEY (image_name), + FOREIGN KEY (workflow_id) REFERENCES workflows (workflow_id) ON DELETE CASCADE, + FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE + ); + """ + ] + + indices = [ + "CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id ON workflow_images (workflow_id);", + "CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id_created_at ON workflow_images (workflow_id, created_at);", + ] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_workflow_images_updated_at + AFTER UPDATE + ON workflow_images FOR EACH ROW + BEGIN + UPDATE workflow_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE workflow_id = old.workflow_id AND image_name = old.image_name; + END; + """ + ] + + for stmt in tables + indices + triggers: + cursor.execute(stmt) + + def _create_workflows(self, cursor: sqlite3.Cursor) -> None: + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS workflows ( + workflow TEXT NOT NULL, + workflow_id TEXT GENERATED ALWAYS AS (json_extract(workflow, '$.id')) VIRTUAL NOT NULL UNIQUE, -- gets implicit index + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) -- updated via trigger + ); + """ + ] + + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_workflows_updated_at + AFTER UPDATE + ON workflows FOR EACH ROW + BEGIN + UPDATE workflows + SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE workflow_id = old.workflow_id; + END; + """ + ] + + for stmt in tables + triggers: + cursor.execute(stmt) -def _create_workflow_images(cursor: sqlite3.Cursor) -> None: - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS workflow_images ( - workflow_id TEXT NOT NULL, - image_name TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Soft delete, currently unused - deleted_at DATETIME, - -- enforce one-to-many relationship between workflows and images using PK - -- (we can extend this to many-to-many later) - PRIMARY KEY (image_name), - FOREIGN KEY (workflow_id) REFERENCES workflows (workflow_id) ON DELETE CASCADE, - FOREIGN KEY (image_name) REFERENCES images (image_name) ON DELETE CASCADE - ); - """ - ] +def build_migration_1() -> Migration: + """ + Builds the migration from database version 0 (init) to 1. - indices = [ - "CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id ON workflow_images (workflow_id);", - "CREATE INDEX IF NOT EXISTS idx_workflow_images_workflow_id_created_at ON workflow_images (workflow_id, created_at);", - ] + This migration represents the state of the database circa InvokeAI v3.4.0, which was the last + version to not use migrations to manage the database. - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS tg_workflow_images_updated_at - AFTER UPDATE - ON workflow_images FOR EACH ROW - BEGIN - UPDATE workflow_images SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE workflow_id = old.workflow_id AND image_name = old.image_name; - END; - """ - ] + As such, this migration does include some ALTER statements, and the SQL statements are written + to be idempotent. - for stmt in tables + indices + triggers: - cursor.execute(stmt) + - Create `board_images` junction table + - Create `boards` table + - Create `images` table, add `starred` column + - Create `model_config` table + - Create `session_queue` table + - Create `workflow_images` junction table + - Create `workflows` table + """ + migration_1 = Migration( + from_version=0, + to_version=1, + callback=Migration1Callback(), + ) -def _create_workflows(cursor: sqlite3.Cursor) -> None: - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS workflows ( - workflow TEXT NOT NULL, - workflow_id TEXT GENERATED ALWAYS AS (json_extract(workflow, '$.id')) VIRTUAL NOT NULL UNIQUE, -- gets implicit index - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) -- updated via trigger - ); - """ - ] - - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS tg_workflows_updated_at - AFTER UPDATE - ON workflows FOR EACH ROW - BEGIN - UPDATE workflows - SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE workflow_id = old.workflow_id; - END; - """ - ] - - for stmt in tables + triggers: - cursor.execute(stmt) - - -migration_1 = Migration( - from_version=0, - to_version=1, - migrate_callback=migrate_callback, -) -""" -Database version 1 (initial state). - -This migration represents the state of the database circa InvokeAI v3.4.0, which was the last -version to not use migrations to manage the database. - -As such, this migration does include some ALTER statements, and the SQL statements are written -to be idempotent. - -- Create `board_images` junction table -- Create `boards` table -- Create `images` table, add `starred` column -- Create `model_config` table -- Create `session_queue` table -- Create `workflow_images` junction table -- Create `workflows` table -""" + return migration_1 diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index 73148769d5..9efd2a1283 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -4,193 +4,181 @@ from logging import Logger from tqdm import tqdm from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration, MigrationDependency - -# This migration requires an ImageFileStorageBase service and logger -image_files_dependency = MigrationDependency(name="image_files", dependency_type=ImageFileStorageBase) -logger_dependency = MigrationDependency(name="logger", dependency_type=Logger) +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration -def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: - """Migration callback for database version 2.""" +class Migration2Callback: + def __init__(self, image_files: ImageFileStorageBase, logger: Logger): + self._image_files = image_files + self._logger = logger - logger = kwargs[logger_dependency.name] - image_files = kwargs[image_files_dependency.name] + def __call__(self, cursor: sqlite3.Cursor): + self._add_images_has_workflow(cursor) + self._add_session_queue_workflow(cursor) + self._drop_old_workflow_tables(cursor) + self._add_workflow_library(cursor) + self._drop_model_manager_metadata(cursor) + self._recreate_model_config(cursor) + self._migrate_embedded_workflows(cursor) - _add_images_has_workflow(cursor) - _add_session_queue_workflow(cursor) - _drop_old_workflow_tables(cursor) - _add_workflow_library(cursor) - _drop_model_manager_metadata(cursor) - _recreate_model_config(cursor) - _migrate_embedded_workflows(cursor, logger, image_files) + def _add_images_has_workflow(self, cursor: sqlite3.Cursor) -> None: + """Add the `has_workflow` column to `images` table.""" + cursor.execute("PRAGMA table_info(images)") + columns = [column[1] for column in cursor.fetchall()] + if "has_workflow" not in columns: + cursor.execute("ALTER TABLE images ADD COLUMN has_workflow BOOLEAN DEFAULT FALSE;") -def _add_images_has_workflow(cursor: sqlite3.Cursor) -> None: - """Add the `has_workflow` column to `images` table.""" - cursor.execute("PRAGMA table_info(images)") - columns = [column[1] for column in cursor.fetchall()] + def _add_session_queue_workflow(self, cursor: sqlite3.Cursor) -> None: + """Add the `workflow` column to `session_queue` table.""" - if "has_workflow" not in columns: - cursor.execute("ALTER TABLE images ADD COLUMN has_workflow BOOLEAN DEFAULT FALSE;") + cursor.execute("PRAGMA table_info(session_queue)") + columns = [column[1] for column in cursor.fetchall()] + if "workflow" not in columns: + cursor.execute("ALTER TABLE session_queue ADD COLUMN workflow TEXT;") -def _add_session_queue_workflow(cursor: sqlite3.Cursor) -> None: - """Add the `workflow` column to `session_queue` table.""" + def _drop_old_workflow_tables(self, cursor: sqlite3.Cursor) -> None: + """Drops the `workflows` and `workflow_images` tables.""" + cursor.execute("DROP TABLE IF EXISTS workflow_images;") + cursor.execute("DROP TABLE IF EXISTS workflows;") - cursor.execute("PRAGMA table_info(session_queue)") - columns = [column[1] for column in cursor.fetchall()] + def _add_workflow_library(self, cursor: sqlite3.Cursor) -> None: + """Adds the `workflow_library` table and drops the `workflows` and `workflow_images` tables.""" + tables = [ + """--sql + CREATE TABLE IF NOT EXISTS workflow_library ( + workflow_id TEXT NOT NULL PRIMARY KEY, + workflow TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- updated manually when retrieving workflow + opened_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Generated columns, needed for indexing and searching + category TEXT GENERATED ALWAYS as (json_extract(workflow, '$.meta.category')) VIRTUAL NOT NULL, + name TEXT GENERATED ALWAYS as (json_extract(workflow, '$.name')) VIRTUAL NOT NULL, + description TEXT GENERATED ALWAYS as (json_extract(workflow, '$.description')) VIRTUAL NOT NULL + ); + """, + ] - if "workflow" not in columns: - cursor.execute("ALTER TABLE session_queue ADD COLUMN workflow TEXT;") + indices = [ + "CREATE INDEX IF NOT EXISTS idx_workflow_library_created_at ON workflow_library(created_at);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_updated_at ON workflow_library(updated_at);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_opened_at ON workflow_library(opened_at);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_category ON workflow_library(category);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_name ON workflow_library(name);", + "CREATE INDEX IF NOT EXISTS idx_workflow_library_description ON workflow_library(description);", + ] + triggers = [ + """--sql + CREATE TRIGGER IF NOT EXISTS tg_workflow_library_updated_at + AFTER UPDATE + ON workflow_library FOR EACH ROW + BEGIN + UPDATE workflow_library + SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') + WHERE workflow_id = old.workflow_id; + END; + """ + ] -def _drop_old_workflow_tables(cursor: sqlite3.Cursor) -> None: - """Drops the `workflows` and `workflow_images` tables.""" - cursor.execute("DROP TABLE IF EXISTS workflow_images;") - cursor.execute("DROP TABLE IF EXISTS workflows;") + for stmt in tables + indices + triggers: + cursor.execute(stmt) + def _drop_model_manager_metadata(self, cursor: sqlite3.Cursor) -> None: + """Drops the `model_manager_metadata` table.""" + cursor.execute("DROP TABLE IF EXISTS model_manager_metadata;") -def _add_workflow_library(cursor: sqlite3.Cursor) -> None: - """Adds the `workflow_library` table and drops the `workflows` and `workflow_images` tables.""" - tables = [ - """--sql - CREATE TABLE IF NOT EXISTS workflow_library ( - workflow_id TEXT NOT NULL PRIMARY KEY, - workflow TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- updated manually when retrieving workflow - opened_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Generated columns, needed for indexing and searching - category TEXT GENERATED ALWAYS as (json_extract(workflow, '$.meta.category')) VIRTUAL NOT NULL, - name TEXT GENERATED ALWAYS as (json_extract(workflow, '$.name')) VIRTUAL NOT NULL, - description TEXT GENERATED ALWAYS as (json_extract(workflow, '$.description')) VIRTUAL NOT NULL - ); - """, - ] - - indices = [ - "CREATE INDEX IF NOT EXISTS idx_workflow_library_created_at ON workflow_library(created_at);", - "CREATE INDEX IF NOT EXISTS idx_workflow_library_updated_at ON workflow_library(updated_at);", - "CREATE INDEX IF NOT EXISTS idx_workflow_library_opened_at ON workflow_library(opened_at);", - "CREATE INDEX IF NOT EXISTS idx_workflow_library_category ON workflow_library(category);", - "CREATE INDEX IF NOT EXISTS idx_workflow_library_name ON workflow_library(name);", - "CREATE INDEX IF NOT EXISTS idx_workflow_library_description ON workflow_library(description);", - ] - - triggers = [ - """--sql - CREATE TRIGGER IF NOT EXISTS tg_workflow_library_updated_at - AFTER UPDATE - ON workflow_library FOR EACH ROW - BEGIN - UPDATE workflow_library - SET updated_at = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') - WHERE workflow_id = old.workflow_id; - END; + def _recreate_model_config(self, cursor: sqlite3.Cursor) -> None: """ - ] + Drops the `model_config` table, recreating it. - for stmt in tables + indices + triggers: - cursor.execute(stmt) + In 3.4.0, this table used explicit columns but was changed to use json_extract 3.5.0. - -def _drop_model_manager_metadata(cursor: sqlite3.Cursor) -> None: - """Drops the `model_manager_metadata` table.""" - cursor.execute("DROP TABLE IF EXISTS model_manager_metadata;") - - -def _recreate_model_config(cursor: sqlite3.Cursor) -> None: - """ - Drops the `model_config` table, recreating it. - - In 3.4.0, this table used explicit columns but was changed to use json_extract 3.5.0. - - Because this table is not used in production, we are able to simply drop it and recreate it. - """ - - cursor.execute("DROP TABLE IF EXISTS model_config;") - - cursor.execute( - """--sql - CREATE TABLE IF NOT EXISTS model_config ( - id TEXT NOT NULL PRIMARY KEY, - -- The next 3 fields are enums in python, unrestricted string here - base TEXT GENERATED ALWAYS as (json_extract(config, '$.base')) VIRTUAL NOT NULL, - type TEXT GENERATED ALWAYS as (json_extract(config, '$.type')) VIRTUAL NOT NULL, - name TEXT GENERATED ALWAYS as (json_extract(config, '$.name')) VIRTUAL NOT NULL, - path TEXT GENERATED ALWAYS as (json_extract(config, '$.path')) VIRTUAL NOT NULL, - format TEXT GENERATED ALWAYS as (json_extract(config, '$.format')) VIRTUAL NOT NULL, - original_hash TEXT, -- could be null - -- Serialized JSON representation of the whole config object, - -- which will contain additional fields from subclasses - config TEXT NOT NULL, - created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- Updated via trigger - updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), - -- unique constraint on combo of name, base and type - UNIQUE(name, base, type) - ); + Because this table is not used in production, we are able to simply drop it and recreate it. """ + + cursor.execute("DROP TABLE IF EXISTS model_config;") + + cursor.execute( + """--sql + CREATE TABLE IF NOT EXISTS model_config ( + id TEXT NOT NULL PRIMARY KEY, + -- The next 3 fields are enums in python, unrestricted string here + base TEXT GENERATED ALWAYS as (json_extract(config, '$.base')) VIRTUAL NOT NULL, + type TEXT GENERATED ALWAYS as (json_extract(config, '$.type')) VIRTUAL NOT NULL, + name TEXT GENERATED ALWAYS as (json_extract(config, '$.name')) VIRTUAL NOT NULL, + path TEXT GENERATED ALWAYS as (json_extract(config, '$.path')) VIRTUAL NOT NULL, + format TEXT GENERATED ALWAYS as (json_extract(config, '$.format')) VIRTUAL NOT NULL, + original_hash TEXT, -- could be null + -- Serialized JSON representation of the whole config object, + -- which will contain additional fields from subclasses + config TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- unique constraint on combo of name, base and type + UNIQUE(name, base, type) + ); + """ + ) + + def _migrate_embedded_workflows(self, cursor: sqlite3.Cursor) -> None: + """ + In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in + the database now has a `has_workflow` column, indicating if an image has a workflow embedded. + + This migrate callback checks each image for the presence of an embedded workflow, then updates its entry + in the database accordingly. + """ + # Get the total number of images and chunk it into pages + cursor.execute("SELECT image_name FROM images") + image_names: list[str] = [image[0] for image in cursor.fetchall()] + total_image_names = len(image_names) + + if not total_image_names: + return + + self._logger.info(f"Migrating workflows for {total_image_names} images") + + # Migrate the images + to_migrate: list[tuple[bool, str]] = [] + pbar = tqdm(image_names) + for idx, image_name in enumerate(pbar): + pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") + pil_image = self._image_files.get(image_name) + if "invokeai_workflow" in pil_image.info: + to_migrate.append((True, image_name)) + + self._logger.info(f"Adding {len(to_migrate)} embedded workflows to database") + cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) + + +def build_migration_2(image_files: ImageFileStorageBase, logger: Logger) -> Migration: + """ + Builds the migration from database version 1 to 2. + + Introduced in v3.5.0 for the new workflow library. + + :param image_files: The image files service, used to check for embedded workflows + :param logger: The logger, used to log progress during embedded workflows handling + + This migration does the following: + - Add `has_workflow` column to `images` table + - Add `workflow` column to `session_queue` table + - Drop `workflows` and `workflow_images` tables + - Add `workflow_library` table + - Drops the `model_manager_metadata` table + - Drops the `model_config` table, recreating it (at this point, there is no user data in this table) + - Populates the `has_workflow` column in the `images` table (requires `image_files` & `logger` dependencies) + """ + migration_2 = Migration( + from_version=1, + to_version=2, + callback=Migration2Callback(image_files=image_files, logger=logger), ) - -def _migrate_embedded_workflows( - cursor: sqlite3.Cursor, - logger: Logger, - image_files: ImageFileStorageBase, -) -> None: - """ - In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in - the database now has a `has_workflow` column, indicating if an image has a workflow embedded. - - This migrate callback checks each image for the presence of an embedded workflow, then updates its entry - in the database accordingly. - """ - # Get the total number of images and chunk it into pages - cursor.execute("SELECT image_name FROM images") - image_names: list[str] = [image[0] for image in cursor.fetchall()] - total_image_names = len(image_names) - - if not total_image_names: - return - - logger.info(f"Migrating workflows for {total_image_names} images") - - # Migrate the images - to_migrate: list[tuple[bool, str]] = [] - pbar = tqdm(image_names) - for idx, image_name in enumerate(pbar): - pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") - pil_image = image_files.get(image_name) - if "invokeai_workflow" in pil_image.info: - to_migrate.append((True, image_name)) - - logger.info(f"Adding {len(to_migrate)} embedded workflows to database") - cursor.executemany("UPDATE images SET has_workflow = ? WHERE image_name = ?", to_migrate) - - -migration_2 = Migration( - from_version=1, - to_version=2, - migrate_callback=migrate_callback, - dependencies={image_files_dependency.name: image_files_dependency, logger_dependency.name: logger_dependency}, -) -""" -Database version 2. - -Introduced in v3.5.0 for the new workflow library. - -Dependencies: -- image_files: ImageFileStorageBase -- logger: Logger - -Migration: -- Add `has_workflow` column to `images` table -- Add `workflow` column to `session_queue` table -- Drop `workflows` and `workflow_images` tables -- Add `workflow_library` table -- Populates the `has_workflow` column in the `images` table (requires `image_files` & `logger` dependencies) -""" + return migration_2 diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index 74bed4f953..6c76dc161b 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -1,6 +1,5 @@ import sqlite3 -from functools import partial -from typing import Any, Optional, Protocol, runtime_checkable +from typing import Optional, Protocol, runtime_checkable from pydantic import BaseModel, ConfigDict, Field, model_validator @@ -18,7 +17,7 @@ class MigrateCallback(Protocol): See :class:`Migration` for an example. """ - def __call__(self, cursor: sqlite3.Cursor, **kwargs: Any) -> None: + def __call__(self, cursor: sqlite3.Cursor) -> None: ... @@ -30,96 +29,69 @@ class MigrationVersionError(ValueError): """Raised when a migration version is invalid.""" -class MigrationDependency: - """ - Represents a dependency for a migration. - - :param name: The name of the dependency - :param dependency_type: The type of the dependency (e.g. `str`, `int`, `SomeClass`, etc.) - """ - - def __init__( - self, - name: str, - dependency_type: Any, - ) -> None: - self.name = name - self.dependency_type = dependency_type - self.value = None - - def set_value(self, value: Any) -> None: - """ - Sets the value of the dependency. - If the value is not of the correct type, a TypeError is raised. - """ - if not isinstance(value, self.dependency_type): - raise TypeError(f"Dependency {self.name} must be of type {self.dependency_type}") - self.value = value - - class Migration(BaseModel): """ Represents a migration for a SQLite database. :param from_version: The database version on which this migration may be run :param to_version: The database version that results from this migration - :param migrate: The callback to run to perform the migration - :param dependencies: A dict of dependencies that must be provided to the migration + :param migrate_callback: The callback to run to perform the migration Migration callbacks will be provided an open cursor to the database. They should not commit their transaction; this is handled by the migrator. - Example Usage: + It is suggested to use a class to define the migration callback and a builder function to create + the :class:`Migration`. This allows the callback to be provided with additional dependencies and + keeps things tidy, as all migration logic is self-contained. + + Example: ```py - # Define the migrate callback. This migration adds a column to the sushi table. - def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: - # Execute SQL using the cursor, taking care to *not commit* a transaction - cursor.execute('ALTER TABLE sushi ADD COLUMN with_banana BOOLEAN DEFAULT TRUE;') - ... + # Define the migration callback class + class Migration1Callback: + # This migration needs a logger, so we define a class that accepts a logger in its constructor. + def __init__(self, image_files: ImageFileStorageBase) -> None: + self._image_files = ImageFileStorageBase - # Instantiate the migration - migration = Migration( - from_version=0, - to_version=1, - migrate_callback=migrate_callback, - ) - ``` + # This dunder method allows the instance of the class to be called like a function. + def __call__(self, cursor: sqlite3.Cursor) -> None: + self._add_with_banana_column(cursor) + self._do_something_with_images(cursor) - If a migration needs an additional dependency, it must be provided with :meth:`provide_dependency` - before the migration is run. The migrator provides dependencies to the migrate callback, - raising an error if a dependency is missing or was provided the wrong type. + def _add_with_banana_column(self, cursor: sqlite3.Cursor) -> None: + \"""Adds the with_banana column to the sushi table.\""" + # Execute SQL using the cursor, taking care to *not commit* a transaction + cursor.execute('ALTER TABLE sushi ADD COLUMN with_banana BOOLEAN DEFAULT TRUE;') - Example Usage: - ```py - # Create a migration dependency. This migration needs access the image files service, so we set the type to the ABC of that service. - image_files_dependency = MigrationDependency(name="image_files", dependency_type=ImageFileStorageBase) + def _do_something_with_images(self, cursor: sqlite3.Cursor) -> None: + \"""Does something with the image files service.\""" + self._image_files.get(...) - # Define the migrate callback. The dependency may be accessed by name in the kwargs. The migrator will ensure that the dependency is of the required type. - def migrate_callback(cursor: sqlite3.Cursor, **kwargs) -> None: - image_files = kwargs[image_files_dependency.name] - # Do something with image_files - ... + # Define the migration builder function. This function creates an instance of the migration callback + # class and returns a Migration. + def build_migration_1(image_files: ImageFileStorageBase) -> Migration: + \"""Builds the migration from database version 0 to 1. + Requires the image files service to... + \""" - # Instantiate the migration, including the dependency. - migration = Migration( - from_version=0, - to_version=1, - migrate_callback=migrate_callback, - dependencies={image_files_dependency.name: image_files_dependency}, - ) + migration_1 = Migration( + from_version=0, + to_version=1, + migrate_callback=Migration1Callback(image_files=image_files), + ) - # Provide the dependency before registering the migration. - # (DiskImageFileStorage is an implementation of ImageFileStorageBase) - migration.provide_dependency(name="image_files", value=DiskImageFileStorage()) + return migration_1 + + # Register the migration after all dependencies have been initialized + db = SqliteDatabase(db_path, logger) + migrator = SqliteMigrator(db) + migrator.register_migration(build_migration_1(image_files)) + migrator.run_migrations() ``` """ from_version: int = Field(ge=0, strict=True, description="The database version on which this migration may be run") to_version: int = Field(ge=1, strict=True, description="The database version that results from this migration") - migrate_callback: MigrateCallback = Field(description="The callback to run to perform the migration") - dependencies: dict[str, MigrationDependency] = Field( - default={}, description="A dict of dependencies that must be provided to the migration" - ) + callback: MigrateCallback = Field(description="The callback to run to perform the migration") @model_validator(mode="after") def validate_to_version(self) -> "Migration": @@ -132,23 +104,6 @@ class Migration(BaseModel): # Callables are not hashable, so we need to implement our own __hash__ function to use this class in a set. return hash((self.from_version, self.to_version)) - def provide_dependency(self, name: str, value: Any) -> None: - """Provides a dependency for this migration.""" - if name not in self.dependencies: - raise ValueError(f"{name} of type {type(value)} is not a dependency of this migration") - self.dependencies[name].set_value(value) - - def run(self, cursor: sqlite3.Cursor) -> None: - """ - Runs the migration. - If any dependencies are missing, a MigrationError is raised. - """ - missing_dependencies = [d.name for d in self.dependencies.values() if d.value is None] - if missing_dependencies: - raise MigrationError(f"Missing migration dependencies: {', '.join(missing_dependencies)}") - self.migrate_callback = partial(self.migrate_callback, **{d.name: d.value for d in self.dependencies.values()}) - self.migrate_callback(cursor=cursor) - model_config = ConfigDict(arbitrary_types_allowed=True) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index c0015336d5..c4bef29ab5 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -20,8 +20,8 @@ class SQLiteMigrator: ```py db = SqliteDatabase(db_path="my_db.db", logger=logger) migrator = SQLiteMigrator(db=db) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) + migrator.register_migration(build_migration_1()) + migrator.register_migration(build_migration_2()) migrator.run_migrations() ``` """ @@ -76,7 +76,7 @@ class SQLiteMigrator: self._logger.debug(f"Running migration from {migration.from_version} to {migration.to_version}") # Run the actual migration - migration.run(cursor) + migration.callback(cursor) # Update the version cursor.execute("INSERT INTO migrations (version) VALUES (?);", (migration.to_version,)) diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index 99a8382001..04dc6af621 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -29,7 +29,7 @@ from invokeai.app.services.shared.graph import ( LibraryGraph, ) from invokeai.backend.util.logging import InvokeAILogger -from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction +from tests.fixtures.sqlite_database import create_mock_sqlite_database from .test_invoker import create_edge @@ -47,10 +47,10 @@ def simple_graph(): # Defining it in a separate module will cause the union to be incomplete, and pydantic will not validate # the test invocations. @pytest.fixture -def mock_services(create_sqlite_database: CreateSqliteDatabaseFunction) -> InvocationServices: +def mock_services() -> InvocationServices: configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) logger = InvokeAILogger.get_logger() - db = create_sqlite_database(configuration, logger) + db = create_mock_sqlite_database(configuration, logger) # NOTE: none of these are actually called by the test invocations graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") return InvocationServices( diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index 6703c2768f..288beb6e0b 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -4,7 +4,7 @@ import pytest from invokeai.app.services.config.config_default import InvokeAIAppConfig from invokeai.backend.util.logging import InvokeAILogger -from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction +from tests.fixtures.sqlite_database import create_mock_sqlite_database # This import must happen before other invoke imports or test in other files(!!) break from .test_nodes import ( # isort: split @@ -51,10 +51,10 @@ def graph_with_subgraph(): # Defining it in a separate module will cause the union to be incomplete, and pydantic will not validate # the test invocations. @pytest.fixture -def mock_services(create_sqlite_database: CreateSqliteDatabaseFunction) -> InvocationServices: +def mock_services() -> InvocationServices: configuration = InvokeAIAppConfig(use_memory_db=True, node_cache_size=0) logger = InvokeAILogger.get_logger() - db = create_sqlite_database(configuration, logger) + db = create_mock_sqlite_database(configuration, logger) # NOTE: none of these are actually called by the test invocations graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 8983b914b0..310bcfa0c1 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -20,7 +20,7 @@ from invokeai.app.services.model_install import ( from invokeai.app.services.model_records import ModelRecordServiceBase, ModelRecordServiceSQL, UnknownModelException from invokeai.backend.model_manager.config import BaseModelType, ModelType from invokeai.backend.util.logging import InvokeAILogger -from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction +from tests.fixtures.sqlite_database import create_mock_sqlite_database @pytest.fixture @@ -38,10 +38,10 @@ def app_config(datadir: Path) -> InvokeAIAppConfig: @pytest.fixture def store( - app_config: InvokeAIAppConfig, create_sqlite_database: CreateSqliteDatabaseFunction + app_config: InvokeAIAppConfig, ) -> ModelRecordServiceBase: logger = InvokeAILogger.get_logger(config=app_config) - db = create_sqlite_database(app_config, logger) + db = create_mock_sqlite_database(app_config, logger) store: ModelRecordServiceBase = ModelRecordServiceSQL(db) return store diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index f1cd5d4d88..a13442dc26 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -23,14 +23,16 @@ from invokeai.backend.model_manager.config import ( VaeDiffusersConfig, ) from invokeai.backend.util.logging import InvokeAILogger -from tests.fixtures.sqlite_database import CreateSqliteDatabaseFunction +from tests.fixtures.sqlite_database import create_mock_sqlite_database @pytest.fixture -def store(datadir: Any, create_sqlite_database: CreateSqliteDatabaseFunction) -> ModelRecordServiceBase: +def store( + datadir: Any, +) -> ModelRecordServiceBase: config = InvokeAIAppConfig(root=datadir) logger = InvokeAILogger.get_logger(config=config) - db = create_sqlite_database(config, logger) + db = create_mock_sqlite_database(config, logger) return ModelRecordServiceSQL(db) diff --git a/tests/fixtures/sqlite_database.py b/tests/fixtures/sqlite_database.py index dd05bc06cb..4f96b10fbd 100644 --- a/tests/fixtures/sqlite_database.py +++ b/tests/fixtures/sqlite_database.py @@ -4,21 +4,13 @@ from unittest import mock from invokeai.app.services.config.config_default import InvokeAIAppConfig from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import migration_1 -from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import migration_2 -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator +from invokeai.app.services.shared.sqlite.sqlite_util import init_db -def create_sqlite_database(config: InvokeAIAppConfig, logger: Logger) -> SqliteDatabase: - db_path = None if config.use_memory_db else config.db_path - db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) - +def create_mock_sqlite_database( + config: InvokeAIAppConfig, + logger: Logger, +) -> SqliteDatabase: image_files = mock.Mock(spec=ImageFileStorageBase) - - migrator = SQLiteMigrator(db=db) - migration_2.provide_dependency("logger", logger) - migration_2.provide_dependency("image_files", image_files) - migrator.register_migration(migration_1) - migrator.register_migration(migration_2) - migrator.run_migrations() + db = init_db(config=config, logger=logger, image_files=image_files) return db diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 1509c59d18..5caa9201fc 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -1,5 +1,4 @@ import sqlite3 -from abc import ABC, abstractmethod from contextlib import closing from logging import Logger from pathlib import Path @@ -12,7 +11,6 @@ from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import ( MigrateCallback, Migration, - MigrationDependency, MigrationError, MigrationSet, MigrationVersionError, @@ -53,7 +51,7 @@ def no_op_migrate_callback() -> MigrateCallback: @pytest.fixture def migration_no_op(no_op_migrate_callback: MigrateCallback) -> Migration: - return Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) + return Migration(from_version=0, to_version=1, callback=no_op_migrate_callback) @pytest.fixture @@ -75,7 +73,7 @@ def migrate_callback_create_test_table() -> MigrateCallback: @pytest.fixture def migration_create_test_table(migrate_callback_create_test_table: MigrateCallback) -> Migration: - return Migration(from_version=0, to_version=1, migrate_callback=migrate_callback_create_test_table) + return Migration(from_version=0, to_version=1, callback=migrate_callback_create_test_table) @pytest.fixture @@ -83,7 +81,7 @@ def failing_migration() -> Migration: def failing_migration(cursor: sqlite3.Cursor, **kwargs) -> None: raise Exception("Bad migration") - return Migration(from_version=0, to_version=1, migrate_callback=failing_migration) + return Migration(from_version=0, to_version=1, callback=failing_migration) @pytest.fixture @@ -101,40 +99,15 @@ def create_migrate(i: int) -> MigrateCallback: return migrate -def test_migration_dependency_sets_value_primitive() -> None: - dependency = MigrationDependency(name="test_dependency", dependency_type=str) - dependency.set_value("test") - assert dependency.value == "test" - with pytest.raises(TypeError, match=r"Dependency test_dependency must be of type.*str"): - dependency.set_value(1) - - -def test_migration_dependency_sets_value_complex() -> None: - class SomeBase(ABC): - @abstractmethod - def some_method(self) -> None: - pass - - class SomeImpl(SomeBase): - def some_method(self) -> None: - return - - dependency = MigrationDependency(name="test_dependency", dependency_type=SomeBase) - with pytest.raises(TypeError, match=r"Dependency test_dependency must be of type.*SomeBase"): - dependency.set_value(1) - # not throwing is sufficient - dependency.set_value(SomeImpl()) - - def test_migration_to_version_is_one_gt_from_version(no_op_migrate_callback: MigrateCallback) -> None: with pytest.raises(ValidationError, match="to_version must be one greater than from_version"): - Migration(from_version=0, to_version=2, migrate_callback=no_op_migrate_callback) + Migration(from_version=0, to_version=2, callback=no_op_migrate_callback) # not raising is sufficient - Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback) + Migration(from_version=1, to_version=2, callback=no_op_migrate_callback) def test_migration_hash(no_op_migrate_callback: MigrateCallback) -> None: - migration = Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) + migration = Migration(from_version=0, to_version=1, callback=no_op_migrate_callback) assert hash(migration) == hash((0, 1)) @@ -147,13 +120,13 @@ def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: def test_migration_set_may_not_register_dupes( migrator: SQLiteMigrator, no_op_migrate_callback: MigrateCallback ) -> None: - migrate_0_to_1_a = Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) - migrate_0_to_1_b = Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback) + migrate_0_to_1_a = Migration(from_version=0, to_version=1, callback=no_op_migrate_callback) + migrate_0_to_1_b = Migration(from_version=0, to_version=1, callback=no_op_migrate_callback) migrator._migration_set.register(migrate_0_to_1_a) with pytest.raises(MigrationVersionError, match=r"Migration with from_version or to_version already registered"): migrator._migration_set.register(migrate_0_to_1_b) - migrate_1_to_2_a = Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback) - migrate_1_to_2_b = Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback) + migrate_1_to_2_a = Migration(from_version=1, to_version=2, callback=no_op_migrate_callback) + migrate_1_to_2_b = Migration(from_version=1, to_version=2, callback=no_op_migrate_callback) migrator._migration_set.register(migrate_1_to_2_a) with pytest.raises(MigrationVersionError, match=r"Migration with from_version or to_version already registered"): migrator._migration_set.register(migrate_1_to_2_b) @@ -168,15 +141,15 @@ def test_migration_set_gets_migration(migration_no_op: Migration) -> None: def test_migration_set_validates_migration_chain(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() - migration_set.register(Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=1, to_version=2, callback=no_op_migrate_callback)) with pytest.raises(MigrationError, match="Migration chain is fragmented"): # no migration from 0 to 1 migration_set.validate_migration_chain() - migration_set.register(Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=0, to_version=1, callback=no_op_migrate_callback)) migration_set.validate_migration_chain() - migration_set.register(Migration(from_version=2, to_version=3, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=2, to_version=3, callback=no_op_migrate_callback)) migration_set.validate_migration_chain() - migration_set.register(Migration(from_version=4, to_version=5, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=4, to_version=5, callback=no_op_migrate_callback)) with pytest.raises(MigrationError, match="Migration chain is fragmented"): # no migration from 3 to 4 migration_set.validate_migration_chain() @@ -185,64 +158,32 @@ def test_migration_set_validates_migration_chain(no_op_migrate_callback: Migrate def test_migration_set_counts_migrations(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() assert migration_set.count == 0 - migration_set.register(Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=0, to_version=1, callback=no_op_migrate_callback)) assert migration_set.count == 1 - migration_set.register(Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=1, to_version=2, callback=no_op_migrate_callback)) assert migration_set.count == 2 def test_migration_set_gets_latest_version(no_op_migrate_callback: MigrateCallback) -> None: migration_set = MigrationSet() assert migration_set.latest_version == 0 - migration_set.register(Migration(from_version=1, to_version=2, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=1, to_version=2, callback=no_op_migrate_callback)) assert migration_set.latest_version == 2 - migration_set.register(Migration(from_version=0, to_version=1, migrate_callback=no_op_migrate_callback)) + migration_set.register(Migration(from_version=0, to_version=1, callback=no_op_migrate_callback)) assert migration_set.latest_version == 2 -def test_migration_provide_dependency_validates_name(no_op_migrate_callback: MigrateCallback) -> None: - dependency = MigrationDependency(name="my_dependency", dependency_type=str) +def test_migration_runs(memory_db_cursor: sqlite3.Cursor, migrate_callback_create_test_table: MigrateCallback) -> None: migration = Migration( from_version=0, to_version=1, - migrate_callback=no_op_migrate_callback, - dependencies={dependency.name: dependency}, + callback=migrate_callback_create_test_table, ) - with pytest.raises(ValueError, match="is not a dependency of this migration"): - migration.provide_dependency("unknown_dependency_name", "banana_sushi") - - -def test_migration_runs_without_dependencies( - memory_db_cursor: sqlite3.Cursor, migrate_callback_create_test_table: MigrateCallback -) -> None: - migration = Migration( - from_version=0, - to_version=1, - migrate_callback=migrate_callback_create_test_table, - ) - migration.run(memory_db_cursor) + migration.callback(memory_db_cursor) memory_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='test';") assert memory_db_cursor.fetchone() is not None -def test_migration_runs_with_dependencies( - memory_db_cursor: sqlite3.Cursor, migrate_callback_create_table_of_name: MigrateCallback -) -> None: - dependency = MigrationDependency(name="table_name", dependency_type=str) - migration = Migration( - from_version=0, - to_version=1, - migrate_callback=migrate_callback_create_table_of_name, - dependencies={dependency.name: dependency}, - ) - with pytest.raises(MigrationError, match="Missing migration dependencies"): - migration.run(memory_db_cursor) - migration.provide_dependency(dependency.name, "banana_sushi") - migration.run(memory_db_cursor) - memory_db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='banana_sushi';") - assert memory_db_cursor.fetchone() is not None - - def test_migrator_registers_migration(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: migration = migration_no_op migrator.register_migration(migration) @@ -286,7 +227,7 @@ def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_crea def test_migrator_runs_all_migrations_in_memory(migrator: SQLiteMigrator) -> None: cursor = migrator._db.conn.cursor() - migrations = [Migration(from_version=i, to_version=i + 1, migrate_callback=create_migrate(i)) for i in range(0, 3)] + migrations = [Migration(from_version=i, to_version=i + 1, callback=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() @@ -299,9 +240,7 @@ def test_migrator_runs_all_migrations_file(logger: Logger) -> None: # The Migrator closes the database when it finishes; we cannot use a context manager. db = SqliteDatabase(db_path=original_db_path, logger=logger, verbose=False) migrator = SQLiteMigrator(db=db) - migrations = [ - Migration(from_version=i, to_version=i + 1, migrate_callback=create_migrate(i)) for i in range(0, 3) - ] + migrations = [Migration(from_version=i, to_version=i + 1, callback=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() @@ -319,7 +258,7 @@ def test_migrator_makes_no_changes_on_failed_migration( migrator.register_migration(migration_no_op) migrator.run_migrations() assert migrator._get_current_version(cursor) == 1 - migrator.register_migration(Migration(from_version=1, to_version=2, migrate_callback=failing_migrate_callback)) + migrator.register_migration(Migration(from_version=1, to_version=2, callback=failing_migrate_callback)) with pytest.raises(MigrationError, match="Bad migration"): migrator.run_migrations() assert migrator._get_current_version(cursor) == 1 From c50a49719b7a59178a4bb338d5375bf6f9803e63 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 13 Dec 2023 11:21:16 +1100 Subject: [PATCH 171/515] fix(db): raise a MigrationVersionError when invalid versions are used This inherits from `ValueError`, so pydantic understands it when doing validation. --- .../services/shared/sqlite_migrator/sqlite_migrator_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py index 6c76dc161b..47ed5da505 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_common.py @@ -97,7 +97,7 @@ class Migration(BaseModel): def validate_to_version(self) -> "Migration": """Validates that to_version is one greater than from_version.""" if self.to_version != self.from_version + 1: - raise ValueError("to_version must be one greater than from_version") + raise MigrationVersionError("to_version must be one greater than from_version") return self def __hash__(self) -> int: From ed1583383eeca3c1e58a5b65632f39f72544868e Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 13 Dec 2023 11:24:27 +1100 Subject: [PATCH 172/515] fix(db): remove stale comment in tests --- tests/test_sqlite_migrator.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 5caa9201fc..8a4814b712 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -237,7 +237,6 @@ def test_migrator_runs_all_migrations_in_memory(migrator: SQLiteMigrator) -> Non def test_migrator_runs_all_migrations_file(logger: Logger) -> None: with TemporaryDirectory() as tempdir: original_db_path = Path(tempdir) / "invokeai.db" - # The Migrator closes the database when it finishes; we cannot use a context manager. db = SqliteDatabase(db_path=original_db_path, logger=logger, verbose=False) migrator = SQLiteMigrator(db=db) migrations = [Migration(from_version=i, to_version=i + 1, callback=create_migrate(i)) for i in range(0, 3)] From 821e0326c93bb9b6797ac2d3363f8d66ca104033 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 13 Dec 2023 11:25:57 +1100 Subject: [PATCH 173/515] fix(db): formatting --- tests/fixtures/sqlite_database.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/fixtures/sqlite_database.py b/tests/fixtures/sqlite_database.py index 4f96b10fbd..7b2dd029a9 100644 --- a/tests/fixtures/sqlite_database.py +++ b/tests/fixtures/sqlite_database.py @@ -7,10 +7,7 @@ from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite.sqlite_util import init_db -def create_mock_sqlite_database( - config: InvokeAIAppConfig, - logger: Logger, -) -> SqliteDatabase: +def create_mock_sqlite_database(config: InvokeAIAppConfig, logger: Logger) -> SqliteDatabase: image_files = mock.Mock(spec=ImageFileStorageBase) db = init_db(config=config, logger=logger, image_files=image_files) return db From f76b04a3b81294b88f1aa8fb7f776d07d9805d3f Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 13 Dec 2023 11:31:15 +1100 Subject: [PATCH 174/515] fix(db): rename "SQLiteMigrator" -> "SqliteMigrator" --- .../app/services/shared/sqlite/sqlite_util.py | 6 ++-- .../sqlite_migrator/sqlite_migrator_impl.py | 4 +-- tests/test_sqlite_migrator.py | 30 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/invokeai/app/services/shared/sqlite/sqlite_util.py b/invokeai/app/services/shared/sqlite/sqlite_util.py index a6293bb484..83a42917a7 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_util.py +++ b/invokeai/app/services/shared/sqlite/sqlite_util.py @@ -5,7 +5,7 @@ from invokeai.app.services.image_files.image_files_base import ImageFileStorageB from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import build_migration_1 from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import build_migration_2 -from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SQLiteMigrator +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SqliteMigrator def init_db(config: InvokeAIAppConfig, logger: Logger, image_files: ImageFileStorageBase) -> SqliteDatabase: @@ -18,13 +18,13 @@ def init_db(config: InvokeAIAppConfig, logger: Logger, image_files: ImageFileSto This function: - Instantiates a :class:`SqliteDatabase` - - Instantiates a :class:`SQLiteMigrator` and registers all migrations + - Instantiates a :class:`SqliteMigrator` and registers all migrations - Runs all migrations """ db_path = None if config.use_memory_db else config.db_path db = SqliteDatabase(db_path=db_path, logger=logger, verbose=config.log_sql) - migrator = SQLiteMigrator(db=db) + migrator = SqliteMigrator(db=db) migrator.register_migration(build_migration_1()) migrator.register_migration(build_migration_2(image_files=image_files, logger=logger)) migrator.run_migrations() diff --git a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py index c4bef29ab5..eef9c07ed4 100644 --- a/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py +++ b/invokeai/app/services/shared/sqlite_migrator/sqlite_migrator_impl.py @@ -6,7 +6,7 @@ from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration, MigrationError, MigrationSet -class SQLiteMigrator: +class SqliteMigrator: """ Manages migrations for a SQLite database. @@ -19,7 +19,7 @@ class SQLiteMigrator: Example Usage: ```py db = SqliteDatabase(db_path="my_db.db", logger=logger) - migrator = SQLiteMigrator(db=db) + migrator = SqliteMigrator(db=db) migrator.register_migration(build_migration_1()) migrator.register_migration(build_migration_2()) migrator.run_migrations() diff --git a/tests/test_sqlite_migrator.py b/tests/test_sqlite_migrator.py index 8a4814b712..816b8b6a10 100644 --- a/tests/test_sqlite_migrator.py +++ b/tests/test_sqlite_migrator.py @@ -16,7 +16,7 @@ from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import MigrationVersionError, ) from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import ( - SQLiteMigrator, + SqliteMigrator, ) @@ -36,9 +36,9 @@ def memory_db_cursor(memory_db_conn: sqlite3.Connection) -> sqlite3.Cursor: @pytest.fixture -def migrator(logger: Logger) -> SQLiteMigrator: +def migrator(logger: Logger) -> SqliteMigrator: db = SqliteDatabase(db_path=None, logger=logger, verbose=False) - return SQLiteMigrator(db=db) + return SqliteMigrator(db=db) @pytest.fixture @@ -111,14 +111,14 @@ def test_migration_hash(no_op_migrate_callback: MigrateCallback) -> None: assert hash(migration) == hash((0, 1)) -def test_migration_set_add_migration(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: +def test_migration_set_add_migration(migrator: SqliteMigrator, migration_no_op: Migration) -> None: migration = migration_no_op migrator._migration_set.register(migration) assert migration in migrator._migration_set._migrations def test_migration_set_may_not_register_dupes( - migrator: SQLiteMigrator, no_op_migrate_callback: MigrateCallback + migrator: SqliteMigrator, no_op_migrate_callback: MigrateCallback ) -> None: migrate_0_to_1_a = Migration(from_version=0, to_version=1, callback=no_op_migrate_callback) migrate_0_to_1_b = Migration(from_version=0, to_version=1, callback=no_op_migrate_callback) @@ -184,20 +184,20 @@ def test_migration_runs(memory_db_cursor: sqlite3.Cursor, migrate_callback_creat assert memory_db_cursor.fetchone() is not None -def test_migrator_registers_migration(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: +def test_migrator_registers_migration(migrator: SqliteMigrator, migration_no_op: Migration) -> None: migration = migration_no_op migrator.register_migration(migration) assert migration in migrator._migration_set._migrations -def test_migrator_creates_migrations_table(migrator: SQLiteMigrator) -> None: +def test_migrator_creates_migrations_table(migrator: SqliteMigrator) -> None: cursor = migrator._db.conn.cursor() migrator._create_migrations_table(cursor) cursor.execute("SELECT * FROM sqlite_master WHERE type='table' AND name='migrations';") assert cursor.fetchone() is not None -def test_migrator_migration_sets_version(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: +def test_migrator_migration_sets_version(migrator: SqliteMigrator, migration_no_op: Migration) -> None: cursor = migrator._db.conn.cursor() migrator._create_migrations_table(cursor) migrator.register_migration(migration_no_op) @@ -206,7 +206,7 @@ def test_migrator_migration_sets_version(migrator: SQLiteMigrator, migration_no_ assert cursor.fetchone()[0] == 1 -def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op: Migration) -> None: +def test_migrator_gets_current_version(migrator: SqliteMigrator, migration_no_op: Migration) -> None: cursor = migrator._db.conn.cursor() assert migrator._get_current_version(cursor) == 0 migrator._create_migrations_table(cursor) @@ -216,7 +216,7 @@ def test_migrator_gets_current_version(migrator: SQLiteMigrator, migration_no_op assert migrator._get_current_version(cursor) == 1 -def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_create_test_table: Migration) -> None: +def test_migrator_runs_single_migration(migrator: SqliteMigrator, migration_create_test_table: Migration) -> None: cursor = migrator._db.conn.cursor() migrator._create_migrations_table(cursor) migrator._run_migration(migration_create_test_table) @@ -225,7 +225,7 @@ def test_migrator_runs_single_migration(migrator: SQLiteMigrator, migration_crea assert cursor.fetchone() is not None -def test_migrator_runs_all_migrations_in_memory(migrator: SQLiteMigrator) -> None: +def test_migrator_runs_all_migrations_in_memory(migrator: SqliteMigrator) -> None: cursor = migrator._db.conn.cursor() migrations = [Migration(from_version=i, to_version=i + 1, callback=create_migrate(i)) for i in range(0, 3)] for migration in migrations: @@ -238,20 +238,20 @@ def test_migrator_runs_all_migrations_file(logger: Logger) -> None: with TemporaryDirectory() as tempdir: original_db_path = Path(tempdir) / "invokeai.db" db = SqliteDatabase(db_path=original_db_path, logger=logger, verbose=False) - migrator = SQLiteMigrator(db=db) + migrator = SqliteMigrator(db=db) migrations = [Migration(from_version=i, to_version=i + 1, callback=create_migrate(i)) for i in range(0, 3)] for migration in migrations: migrator.register_migration(migration) migrator.run_migrations() with closing(sqlite3.connect(original_db_path)) as original_db_conn: original_db_cursor = original_db_conn.cursor() - assert SQLiteMigrator._get_current_version(original_db_cursor) == 3 + assert SqliteMigrator._get_current_version(original_db_cursor) == 3 # Must manually close else we get an error on Windows db.conn.close() def test_migrator_makes_no_changes_on_failed_migration( - migrator: SQLiteMigrator, migration_no_op: Migration, failing_migrate_callback: MigrateCallback + migrator: SqliteMigrator, migration_no_op: Migration, failing_migrate_callback: MigrateCallback ) -> None: cursor = migrator._db.conn.cursor() migrator.register_migration(migration_no_op) @@ -263,7 +263,7 @@ def test_migrator_makes_no_changes_on_failed_migration( assert migrator._get_current_version(cursor) == 1 -def test_idempotent_migrations(migrator: SQLiteMigrator, migration_create_test_table: Migration) -> None: +def test_idempotent_migrations(migrator: SqliteMigrator, migration_create_test_table: Migration) -> None: cursor = migrator._db.conn.cursor() migrator.register_migration(migration_create_test_table) migrator.run_migrations() From 42bc6ef1545fe8919c8086e15799edb61236d021 Mon Sep 17 00:00:00 2001 From: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com> Date: Thu, 7 Dec 2023 09:11:54 -0500 Subject: [PATCH 175/515] Bump Diffusers Dependency --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ca0c45a8fd..106f4f09e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,7 +41,7 @@ dependencies = [ "controlnet-aux>=0.0.6", "timm==0.6.13", # needed to override timm latest in controlnet_aux, see https://github.com/isl-org/ZoeDepth/issues/26 "datasets", - "diffusers[torch]~=0.23.0", + "diffusers[torch]~=0.24.0", "dnspython~=2.4.0", "dynamicprompts", "easing-functions", From 42329a1849c65a1a03b52ee333322874327139c3 Mon Sep 17 00:00:00 2001 From: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com> Date: Thu, 7 Dec 2023 10:40:58 -0500 Subject: [PATCH 176/515] Updating HF Hub dependency --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 106f4f09e9..f134c1ca9c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ dependencies = [ "facexlib", "fastapi~=0.105.0", "fastapi-events~=0.9.1", - "huggingface-hub~=0.16.4", + "huggingface-hub~=0.19.4", "imohash", "invisible-watermark~=0.2.0", # needed to install SDXL base and refiner using their repo_ids "matplotlib", # needed for plotting of Penner easing functions From 5127e9df2d4b86ef4e33e6c0b42bf3a721d02be9 Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Wed, 13 Dec 2023 09:05:21 -0500 Subject: [PATCH 177/515] Fix error caused by bump to diffusers 0.24. We pass kwargs now instead of positional args so that we are more robust to future changes. --- .../stable_diffusion/diffusers_pipeline.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/invokeai/backend/stable_diffusion/diffusers_pipeline.py b/invokeai/backend/stable_diffusion/diffusers_pipeline.py index ae0cc17203..a17f0080b8 100644 --- a/invokeai/backend/stable_diffusion/diffusers_pipeline.py +++ b/invokeai/backend/stable_diffusion/diffusers_pipeline.py @@ -242,17 +242,6 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): control_model: ControlNetModel = None, ): super().__init__( - vae, - text_encoder, - tokenizer, - unet, - scheduler, - safety_checker, - feature_extractor, - requires_safety_checker, - ) - - self.register_modules( vae=vae, text_encoder=text_encoder, tokenizer=tokenizer, @@ -260,9 +249,9 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): scheduler=scheduler, safety_checker=safety_checker, feature_extractor=feature_extractor, - # FIXME: can't currently register control module - # control_model=control_model, + requires_safety_checker=requires_safety_checker, ) + self.invokeai_diffuser = InvokeAIDiffuserComponent(self.unet, self._unet_forward) self.control_model = control_model self.use_ip_adapter = False From 076d9b05ead06522f9bfd012e23e96376e460fd8 Mon Sep 17 00:00:00 2001 From: Wubbbi Date: Mon, 11 Dec 2023 23:52:39 +0100 Subject: [PATCH 178/515] Update transformers to 4.36 and Accelerate to 0.25 --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f134c1ca9c..6d156fa75d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ classifiers = [ 'Topic :: Scientific/Engineering :: Image Processing', ] dependencies = [ - "accelerate~=0.24.0", + "accelerate~=0.25.0", "albumentations", "basicsr", "click", @@ -84,7 +84,7 @@ dependencies = [ "torchvision==0.16.0", "torchmetrics~=0.11.0", "torchsde~=0.2.5", - "transformers~=4.35.0", + "transformers~=4.36.0", "uvicorn[standard]~=0.21.1", "windows-curses; sys_platform=='win32'", ] From 340957f92050fb438febf1cf1498f3b1c1c68716 Mon Sep 17 00:00:00 2001 From: Wubbbi Date: Mon, 11 Dec 2023 23:41:54 +0100 Subject: [PATCH 179/515] Update torch to 2.1.1 and xformers to 0.0.23 --- installer/lib/installer.py | 4 ++-- pyproject.toml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/installer/lib/installer.py b/installer/lib/installer.py index 7b928f3c9c..a609b2c85e 100644 --- a/installer/lib/installer.py +++ b/installer/lib/installer.py @@ -244,9 +244,9 @@ class InvokeAiInstance: "numpy~=1.24.0", # choose versions that won't be uninstalled during phase 2 "urllib3~=1.26.0", "requests~=2.28.0", - "torch==2.1.0", + "torch==2.1.1", "torchmetrics==0.11.4", - "torchvision>=0.14.1", + "torchvision>=0.16.1", "--force-reinstall", "--find-links" if find_links is not None else None, find_links, diff --git a/pyproject.toml b/pyproject.toml index 6d156fa75d..0b8d258e7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -80,8 +80,8 @@ dependencies = [ "semver~=3.0.1", "send2trash", "test-tube~=0.7.5", - "torch==2.1.0", - "torchvision==0.16.0", + "torch==2.1.1", + "torchvision==0.16.1", "torchmetrics~=0.11.0", "torchsde~=0.2.5", "transformers~=4.36.0", @@ -107,7 +107,7 @@ dependencies = [ "pytest-datadir", ] "xformers" = [ - "xformers==0.0.22post7; sys_platform!='darwin'", + "xformers==0.0.23; sys_platform!='darwin'", "triton; sys_platform=='linux'", ] "onnx" = ["onnxruntime"] From 569ae7c482a6d8889d49ba8be93f759454edf574 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Wed, 13 Dec 2023 15:59:21 -0500 Subject: [PATCH 180/515] add ability to filter model listings by format --- invokeai/app/api/routers/model_records.py | 5 +++-- invokeai/app/services/model_records/model_records_base.py | 4 +++- invokeai/app/services/model_records/model_records_sql.py | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 997f76a185..8d029db422 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -45,6 +45,7 @@ async def list_model_records( base_models: Optional[List[BaseModelType]] = Query(default=None, description="Base models to include"), model_type: Optional[ModelType] = Query(default=None, description="The type of model to get"), model_name: Optional[str] = Query(default=None, description="Exact match on the name of the model"), + model_format: Optional[str] = Query(default=None, description="Exact match on the format of the model (e.g. 'diffusers')"), ) -> ModelsList: """Get a list of models.""" record_store = ApiDependencies.invoker.services.model_records @@ -52,10 +53,10 @@ async def list_model_records( if base_models: for base_model in base_models: found_models.extend( - record_store.search_by_attr(base_model=base_model, model_type=model_type, model_name=model_name) + record_store.search_by_attr(base_model=base_model, model_type=model_type, model_name=model_name, model_format=model_format) ) else: - found_models.extend(record_store.search_by_attr(model_type=model_type, model_name=model_name)) + found_models.extend(record_store.search_by_attr(model_type=model_type, model_name=model_name, model_format=model_format)) return ModelsList(models=found_models) diff --git a/invokeai/app/services/model_records/model_records_base.py b/invokeai/app/services/model_records/model_records_base.py index 679d05fccd..ae0e633990 100644 --- a/invokeai/app/services/model_records/model_records_base.py +++ b/invokeai/app/services/model_records/model_records_base.py @@ -7,7 +7,7 @@ from abc import ABC, abstractmethod from pathlib import Path from typing import List, Optional, Union -from invokeai.backend.model_manager.config import AnyModelConfig, BaseModelType, ModelType +from invokeai.backend.model_manager.config import AnyModelConfig, BaseModelType, ModelFormat, ModelType class DuplicateModelException(Exception): @@ -106,6 +106,7 @@ class ModelRecordServiceBase(ABC): model_name: Optional[str] = None, base_model: Optional[BaseModelType] = None, model_type: Optional[ModelType] = None, + model_format: Optional[ModelFormat] = None, ) -> List[AnyModelConfig]: """ Return models matching name, base and/or type. @@ -113,6 +114,7 @@ class ModelRecordServiceBase(ABC): :param model_name: Filter by name of model (optional) :param base_model: Filter by base model (optional) :param model_type: Filter by type of model (optional) + :param model_format: Filter by model format (e.g. "diffusers") (optional) If none of the optional filters are passed, will return all models in the database. diff --git a/invokeai/app/services/model_records/model_records_sql.py b/invokeai/app/services/model_records/model_records_sql.py index 08956a960f..a8e777cf64 100644 --- a/invokeai/app/services/model_records/model_records_sql.py +++ b/invokeai/app/services/model_records/model_records_sql.py @@ -49,6 +49,7 @@ from invokeai.backend.model_manager.config import ( AnyModelConfig, BaseModelType, ModelConfigFactory, + ModelFormat, ModelType, ) @@ -225,6 +226,7 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): model_name: Optional[str] = None, base_model: Optional[BaseModelType] = None, model_type: Optional[ModelType] = None, + model_format: Optional[ModelFormat] = None, ) -> List[AnyModelConfig]: """ Return models matching name, base and/or type. @@ -232,6 +234,7 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): :param model_name: Filter by name of model (optional) :param base_model: Filter by base model (optional) :param model_type: Filter by type of model (optional) + :param model_format: Filter by model format (e.g. "diffusers") (optional) If none of the optional filters are passed, will return all models in the database. @@ -248,6 +251,9 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): if model_type: where_clause.append("type=?") bindings.append(model_type) + if model_format: + where_clause.append("format=?") + bindings.append(model_format) where = f"WHERE {' AND '.join(where_clause)}" if where_clause else "" with self._db.lock: self._cursor.execute( From 937c7e957deff9fae55f2f9ed8532875d1345866 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 14 Dec 2023 08:35:11 +1100 Subject: [PATCH 181/515] add merge plan to PR template --- .github/pull_request_template.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 02bc10df90..0f0b953be7 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -42,6 +42,21 @@ Please provide steps on how to test changes, any hardware or software specifications as well as any other pertinent information. --> +## Merge Plan + + + ## Added/updated tests? - [ ] Yes From 8845894e839fe91c6792f467ab391a91164b95e6 Mon Sep 17 00:00:00 2001 From: Riccardo Giovanetti Date: Wed, 13 Dec 2023 20:42:42 +0100 Subject: [PATCH 182/515] translationBot(ui): update translation (Italian) Currently translated at 97.0% (1325 of 1365 strings) Co-authored-by: Riccardo Giovanetti Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/it.json | 63 ++++++++++++++++---- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/invokeai/frontend/web/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json index 31eea70368..c2eebedf77 100644 --- a/invokeai/frontend/web/public/locales/it.json +++ b/invokeai/frontend/web/public/locales/it.json @@ -104,7 +104,16 @@ "copyError": "$t(gallery.copy) Errore", "input": "Ingresso", "notInstalled": "Non $t(common.installed)", - "unknownError": "Errore sconosciuto" + "unknownError": "Errore sconosciuto", + "updated": "Aggiornato", + "save": "Salva", + "created": "Creato", + "prevPage": "Pagina precedente", + "delete": "Elimina", + "orderBy": "Ordinato per", + "nextPage": "Pagina successiva", + "saveAs": "Salva come", + "unsaved": "Non salvato" }, "gallery": { "generations": "Generazioni", @@ -763,7 +772,10 @@ "setIPAdapterImage": "Imposta come immagine per l'Adattatore IP", "problemSavingMaskDesc": "Impossibile salvare la maschera", "setAsCanvasInitialImage": "Imposta come immagine iniziale della tela", - "invalidUpload": "Caricamento non valido" + "invalidUpload": "Caricamento non valido", + "problemDeletingWorkflow": "Problema durante l'eliminazione del flusso di lavoro", + "workflowDeleted": "Flusso di lavoro eliminato", + "problemRetrievingWorkflow": "Problema nel recupero del flusso di lavoro" }, "tooltip": { "feature": { @@ -886,11 +898,11 @@ "zoomInNodes": "Ingrandire", "fitViewportNodes": "Adatta vista", "showGraphNodes": "Mostra sovrapposizione grafico", - "resetWorkflowDesc2": "Reimpostare il flusso di lavoro cancellerà tutti i nodi, i bordi e i dettagli del flusso di lavoro.", + "resetWorkflowDesc2": "Il ripristino dell'editor del flusso di lavoro cancellerà tutti i nodi, le connessioni e i dettagli del flusso di lavoro. I flussi di lavoro salvati non saranno interessati.", "reloadNodeTemplates": "Ricarica i modelli di nodo", "loadWorkflow": "Importa flusso di lavoro JSON", - "resetWorkflow": "Reimposta flusso di lavoro", - "resetWorkflowDesc": "Sei sicuro di voler reimpostare questo flusso di lavoro?", + "resetWorkflow": "Reimposta l'editor del flusso di lavoro", + "resetWorkflowDesc": "Sei sicuro di voler reimpostare l'editor del flusso di lavoro?", "downloadWorkflow": "Esporta flusso di lavoro JSON", "scheduler": "Campionatore", "addNode": "Aggiungi nodo", @@ -1080,25 +1092,27 @@ "collectionOrScalarFieldType": "{{name}} Raccolta|Scalare", "nodeVersion": "Versione Nodo", "inputFieldTypeParseError": "Impossibile analizzare il tipo di campo di input {{node}}.{{field}} ({{message}})", - "unsupportedArrayItemType": "tipo di elemento dell'array non supportato \"{{type}}\"", + "unsupportedArrayItemType": "Tipo di elemento dell'array non supportato \"{{type}}\"", "targetNodeFieldDoesNotExist": "Connessione non valida: il campo di destinazione/input {{node}}.{{field}} non esiste", "unsupportedMismatchedUnion": "tipo CollectionOrScalar non corrispondente con tipi di base {{firstType}} e {{secondType}}", "allNodesUpdated": "Tutti i nodi sono aggiornati", "sourceNodeDoesNotExist": "Connessione non valida: il nodo di origine/output {{node}} non esiste", - "unableToExtractEnumOptions": "impossibile estrarre le opzioni enum", - "unableToParseFieldType": "impossibile analizzare il tipo di campo", + "unableToExtractEnumOptions": "Impossibile estrarre le opzioni enum", + "unableToParseFieldType": "Impossibile analizzare il tipo di campo", "unrecognizedWorkflowVersion": "Versione dello schema del flusso di lavoro non riconosciuta {{version}}", "outputFieldTypeParseError": "Impossibile analizzare il tipo di campo di output {{node}}.{{field}} ({{message}})", "sourceNodeFieldDoesNotExist": "Connessione non valida: il campo di origine/output {{node}}.{{field}} non esiste", "unableToGetWorkflowVersion": "Impossibile ottenere la versione dello schema del flusso di lavoro", "nodePack": "Pacchetto di nodi", - "unableToExtractSchemaNameFromRef": "impossibile estrarre il nome dello schema dal riferimento", + "unableToExtractSchemaNameFromRef": "Impossibile estrarre il nome dello schema dal riferimento", "unknownOutput": "Output sconosciuto: {{name}}", "unknownNodeType": "Tipo di nodo sconosciuto", "targetNodeDoesNotExist": "Connessione non valida: il nodo di destinazione/input {{node}} non esiste", "unknownFieldType": "$t(nodes.unknownField) tipo: {{type}}", "deletedInvalidEdge": "Eliminata connessione non valida {{source}} -> {{target}}", - "unknownInput": "Input sconosciuto: {{name}}" + "unknownInput": "Input sconosciuto: {{name}}", + "prototypeDesc": "Questa invocazione è un prototipo. Potrebbe subire modifiche sostanziali durante gli aggiornamenti dell'app e potrebbe essere rimossa in qualsiasi momento.", + "betaDesc": "Questa invocazione è in versione beta. Fino a quando non sarà stabile, potrebbe subire modifiche importanti durante gli aggiornamenti dell'app. Abbiamo intenzione di supportare questa invocazione a lungo termine." }, "boards": { "autoAddBoard": "Aggiungi automaticamente bacheca", @@ -1594,5 +1608,34 @@ "hrf": "Correzione Alta Risoluzione", "hrfStrength": "Forza della Correzione Alta Risoluzione", "strengthTooltip": "Valori più bassi comportano meno dettagli, il che può ridurre potenziali artefatti." + }, + "workflows": { + "saveWorkflowAs": "Salva flusso di lavoro come", + "workflowEditorMenu": "Menu dell'editor del flusso di lavoro", + "noSystemWorkflows": "Nessun flusso di lavoro del sistema", + "workflowName": "Nome del flusso di lavoro", + "noUserWorkflows": "Nessun flusso di lavoro utente", + "defaultWorkflows": "Flussi di lavoro predefiniti", + "saveWorkflow": "Salva flusso di lavoro", + "openWorkflow": "Apri flusso di lavoro", + "clearWorkflowSearchFilter": "Cancella il filtro di ricerca del flusso di lavoro", + "workflowEditorReset": "Reimpostazione dell'editor del flusso di lavoro", + "workflowLibrary": "Libreria", + "noRecentWorkflows": "Nessun flusso di lavoro recente", + "workflowSaved": "Flusso di lavoro salvato", + "workflowIsOpen": "Il flusso di lavoro è aperto", + "unnamedWorkflow": "Flusso di lavoro senza nome", + "savingWorkflow": "Salvataggio del flusso di lavoro...", + "problemLoading": "Problema durante il caricamento dei flussi di lavoro", + "loading": "Caricamento dei flussi di lavoro", + "searchWorkflows": "Cerca flussi di lavoro", + "problemSavingWorkflow": "Problema durante il salvataggio del flusso di lavoro", + "deleteWorkflow": "Elimina flusso di lavoro", + "workflows": "Flussi di lavoro", + "noDescription": "Nessuna descrizione", + "userWorkflows": "I miei flussi di lavoro" + }, + "app": { + "storeNotInitialized": "Il negozio non è inizializzato" } } From 98655db57becbdf46d72342d858434baf4c95bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=81=D1=8F=D0=BD=D0=B0=D1=82=D0=BE=D1=80?= Date: Wed, 13 Dec 2023 20:42:42 +0100 Subject: [PATCH 183/515] translationBot(ui): update translation (Russian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 98.1% (1340 of 1365 strings) translationBot(ui): update translation (Russian) Currently translated at 84.2% (1150 of 1365 strings) translationBot(ui): update translation (Russian) Currently translated at 83.1% (1135 of 1365 strings) Co-authored-by: Васянатор Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ru/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/ru.json | 953 ++++++++++++++++++- 1 file changed, 916 insertions(+), 37 deletions(-) diff --git a/invokeai/frontend/web/public/locales/ru.json b/invokeai/frontend/web/public/locales/ru.json index 22df944086..901d0520d5 100644 --- a/invokeai/frontend/web/public/locales/ru.json +++ b/invokeai/frontend/web/public/locales/ru.json @@ -51,23 +51,23 @@ "statusConvertingModel": "Конвертация модели", "cancel": "Отменить", "accept": "Принять", - "langUkranian": "Украинский", - "langEnglish": "Английский", + "langUkranian": "Украї́нська", + "langEnglish": "English", "postprocessing": "Постобработка", - "langArabic": "Арабский", - "langSpanish": "Испанский", - "langSimplifiedChinese": "Китайский (упрощенный)", - "langDutch": "Нидерландский", - "langFrench": "Французский", - "langGerman": "Немецкий", - "langHebrew": "Иврит", - "langItalian": "Итальянский", - "langJapanese": "Японский", - "langKorean": "Корейский", - "langPolish": "Польский", - "langPortuguese": "Португальский", + "langArabic": "العربية", + "langSpanish": "Español", + "langSimplifiedChinese": "简体中文", + "langDutch": "Nederlands", + "langFrench": "Français", + "langGerman": "German", + "langHebrew": "Hebrew", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langKorean": "한국어", + "langPolish": "Polski", + "langPortuguese": "Português", "txt2img": "Текст в изображение (txt2img)", - "langBrPortuguese": "Португальский (Бразилия)", + "langBrPortuguese": "Português do Brasil", "linear": "Линейная обработка", "dontAskMeAgain": "Больше не спрашивать", "areYouSure": "Вы уверены?", @@ -82,7 +82,46 @@ "darkMode": "Темная тема", "nodeEditor": "Редактор Нодов (Узлов)", "controlNet": "Controlnet", - "advanced": "Расширенные" + "advanced": "Расширенные", + "t2iAdapter": "T2I Adapter", + "checkpoint": "Checkpoint", + "format": "Формат", + "unknown": "Неизвестно", + "folder": "Папка", + "inpaint": "Перерисовать", + "updated": "Обновлен", + "on": "На", + "save": "Сохранить", + "created": "Создано", + "error": "Ошибка", + "prevPage": "Предыдущая страница", + "simple": "Простой", + "ipAdapter": "IP Adapter", + "controlAdapter": "Адаптер контроля", + "installed": "Установлено", + "ai": "ИИ", + "auto": "Авто", + "file": "Файл", + "delete": "Удалить", + "template": "Шаблон", + "outputs": "результаты", + "unknownError": "Неизвестная ошибка", + "statusProcessing": "Обработка", + "imageFailedToLoad": "Невозможно загрузить изображение", + "direction": "Направление", + "data": "Данные", + "somethingWentWrong": "Что-то пошло не так", + "safetensors": "Safetensors", + "outpaint": "Расширить изображение", + "orderBy": "Сортировать по", + "copyError": "Ошибка $t(gallery.copy)", + "learnMore": "Узнать больше", + "nextPage": "Следущая страница", + "saveAs": "Сохранить как", + "unsaved": "несохраненный", + "input": "Вход", + "details": "Детали", + "notInstalled": "Нет $t(common.installed)" }, "gallery": { "generations": "Генерации", @@ -102,7 +141,27 @@ "deleteImageBin": "Удаленные изображения будут отправлены в корзину вашей операционной системы.", "deleteImage": "Удалить изображение", "assets": "Ресурсы", - "autoAssignBoardOnClick": "Авто-назначение доски по клику" + "autoAssignBoardOnClick": "Авто-назначение доски по клику", + "deleteSelection": "Удалить выделенное", + "featuresWillReset": "Если вы удалите это изображение, эти функции будут немедленно сброшены.", + "problemDeletingImagesDesc": "Не удалось удалить одно или несколько изображений", + "loading": "Загрузка", + "unableToLoad": "Невозможно загрузить галерею", + "preparingDownload": "Подготовка к скачиванию", + "preparingDownloadFailed": "Проблема с подготовкой к скачиванию", + "image": "изображение", + "drop": "перебросить", + "problemDeletingImages": "Проблема с удалением изображений", + "downloadSelection": "Скачать выделенное", + "currentlyInUse": "В настоящее время это изображение используется в следующих функциях:", + "unstarImage": "Удалить из избранного", + "dropOrUpload": "$t(gallery.drop) или загрузить", + "copy": "Копировать", + "download": "Скачать", + "noImageSelected": "Изображение не выбрано", + "setCurrentImage": "Установить как текущее изображение", + "starImage": "Добавить в избранное", + "dropToUpload": "$t(gallery.drop) чтоб загрузить" }, "hotkeys": { "keyboardShortcuts": "Горячие клавиши", @@ -334,7 +393,7 @@ "config": "Файл конфигурации", "configValidationMsg": "Путь до файла конфигурации.", "modelLocation": "Расположение модели", - "modelLocationValidationMsg": "Путь до файла с моделью.", + "modelLocationValidationMsg": "Укажите путь к локальной папке, в которой хранится ваша модель Diffusers", "vaeLocation": "Расположение VAE", "vaeLocationValidationMsg": "Путь до файла VAE.", "width": "Ширина", @@ -377,7 +436,7 @@ "convertToDiffusersHelpText3": "Ваш файл контрольной точки НА ДИСКЕ будет УДАЛЕН, если он находится в корневой папке InvokeAI. Если он находится в пользовательском расположении, то он НЕ будет удален.", "vaeRepoID": "ID репозитория VAE", "mergedModelName": "Название объединенной модели", - "checkpointModels": "Checkpoints", + "checkpointModels": "Модели Checkpoint", "allModels": "Все модели", "addDiffuserModel": "Добавить Diffusers", "repo_id": "ID репозитория", @@ -413,7 +472,7 @@ "none": "пусто", "addDifference": "Добавить разницу", "vaeRepoIDValidationMsg": "Онлайн репозиторий VAE", - "convertToDiffusersHelpText2": "Этот процесс заменит вашу запись в Model Manager на версию той же модели в Diffusers.", + "convertToDiffusersHelpText2": "Этот процесс заменит вашу запись в менеджере моделей на версию той же модели в Diffusers.", "custom": "Пользовательский", "modelTwo": "Модель 2", "mergedModelSaveLocation": "Путь сохранения", @@ -444,14 +503,27 @@ "modelUpdateFailed": "Не удалось обновить модель", "modelConversionFailed": "Не удалось сконвертировать модель", "modelsMergeFailed": "Не удалось выполнить слияние моделей", - "loraModels": "LoRAs", - "onnxModels": "Onnx", - "oliveModels": "Olives" + "loraModels": "Модели LoRA", + "onnxModels": "Модели Onnx", + "oliveModels": "Модели Olives", + "conversionNotSupported": "Преобразование не поддерживается", + "noModels": "Нет моделей", + "predictionType": "Тип прогноза (для моделей Stable Diffusion 2.x и периодических моделей Stable Diffusion 1.x)", + "quickAdd": "Быстрое добавление", + "simpleModelDesc": "Укажите путь к локальной модели Diffusers , локальной модели checkpoint / safetensors, идентификатор репозитория HuggingFace или URL-адрес модели контрольной checkpoint / diffusers.", + "advanced": "Продвинутый", + "useCustomConfig": "Использовать кастомный конфиг", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "closeAdvanced": "Скрыть расширенные", + "modelType": "Тип модели", + "customConfigFileLocation": "Расположение пользовательского файла конфигурации", + "vaePrecision": "Точность VAE", + "noModelSelected": "Модель не выбрана" }, "parameters": { "images": "Изображения", "steps": "Шаги", - "cfgScale": "Уровень CFG", + "cfgScale": "Точность следования запросу (CFG)", "width": "Ширина", "height": "Высота", "seed": "Сид", @@ -471,7 +543,7 @@ "upscaleImage": "Увеличить изображение", "scale": "Масштаб", "otherOptions": "Другие параметры", - "seamlessTiling": "Бесшовный узор", + "seamlessTiling": "Бесшовность", "hiresOptim": "Оптимизация High Res", "imageFit": "Уместить изображение", "codeformerFidelity": "Точность", @@ -504,7 +576,8 @@ "immediate": "Отменить немедленно", "schedule": "Отменить после текущей итерации", "isScheduled": "Отмена", - "setType": "Установить тип отмены" + "setType": "Установить тип отмены", + "cancel": "Отмена" }, "general": "Основное", "hiresStrength": "Сила High Res", @@ -516,8 +589,8 @@ "copyImage": "Скопировать изображение", "showPreview": "Показать предпросмотр", "noiseSettings": "Шум", - "seamlessXAxis": "Ось X", - "seamlessYAxis": "Ось Y", + "seamlessXAxis": "Горизонтальная", + "seamlessYAxis": "Вертикальная", "scheduler": "Планировщик", "boundingBoxWidth": "Ширина ограничивающей рамки", "boundingBoxHeight": "Высота ограничивающей рамки", @@ -534,7 +607,51 @@ "coherenceSteps": "Шагов", "coherencePassHeader": "Порог Coherence", "coherenceStrength": "Сила", - "compositingSettingsHeader": "Настройки компоновки" + "compositingSettingsHeader": "Настройки компоновки", + "invoke": { + "noNodesInGraph": "Нет узлов в графе", + "noModelSelected": "Модель не выбрана", + "noPrompts": "Подсказки не создаются", + "systemBusy": "Система занята", + "noInitialImageSelected": "Исходное изображение не выбрано", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} отсутствует ввод", + "noControlImageForControlAdapter": "Адаптер контроля #{{number}} не имеет изображения", + "noModelForControlAdapter": "Не выбрана модель адаптера контроля #{{number}}.", + "unableToInvoke": "Невозможно вызвать", + "incompatibleBaseModelForControlAdapter": "Модель контрольного адаптера №{{number}} недействительна для основной модели.", + "systemDisconnected": "Система отключена", + "missingNodeTemplate": "Отсутствует шаблон узла", + "readyToInvoke": "Готово к вызову", + "missingFieldTemplate": "Отсутствует шаблон поля", + "addingImagesTo": "Добавление изображений в" + }, + "seamlessX&Y": "Бесшовный X & Y", + "isAllowedToUpscale": { + "useX2Model": "Изображение слишком велико для увеличения с помощью модели x4. Используйте модель x2", + "tooLarge": "Изображение слишком велико для увеличения. Выберите изображение меньшего размера" + }, + "aspectRatioFree": "Свободное", + "maskEdge": "Край маски", + "cpuNoise": "CPU шум", + "cfgRescaleMultiplier": "Множитель масштабирования CFG", + "cfgRescale": "Изменение масштаба CFG", + "patchmatchDownScaleSize": "уменьшить", + "gpuNoise": "GPU шум", + "seamlessX": "Бесшовный X", + "useCpuNoise": "Использовать шум CPU", + "clipSkipWithLayerCount": "CLIP пропуск {{layerCount}}", + "seamlessY": "Бесшовный Y", + "manualSeed": "Указанный сид", + "imageActions": "Действия с изображениями", + "randomSeed": "Случайный", + "iterations": "Кол-во", + "iterationsWithCount_one": "{{count}} Интеграция", + "iterationsWithCount_few": "{{count}} Итерации", + "iterationsWithCount_many": "{{count}} Итераций", + "useSize": "Использовать размер", + "unmasked": "Без маски", + "enableNoiseSettings": "Включить настройки шума", + "coherenceMode": "Режим" }, "settings": { "models": "Модели", @@ -543,7 +660,7 @@ "confirmOnDelete": "Подтверждать удаление", "displayHelpIcons": "Показывать значки подсказок", "enableImageDebugging": "Включить отладку", - "resetWebUI": "Сброс настроек Web UI", + "resetWebUI": "Сброс настроек веб-интерфейса", "resetWebUIDesc1": "Сброс настроек веб-интерфейса удаляет только локальный кэш браузера с вашими изображениями и настройками. Он не удаляет изображения с диска.", "resetWebUIDesc2": "Если изображения не отображаются в галерее или не работает что-то еще, пожалуйста, попробуйте сбросить настройки, прежде чем сообщать о проблеме на GitHub.", "resetComplete": "Настройки веб-интерфейса были сброшены.", @@ -563,7 +680,23 @@ "beta": "Бета", "alternateCanvasLayout": "Альтернативный слой холста", "showAdvancedOptions": "Показать доп. параметры", - "autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении" + "autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении", + "clearIntermediates": "Очистить промежуточные", + "clearIntermediatesDesc3": "Изображения вашей галереи не будут удалены.", + "clearIntermediatesWithCount_one": "Очистить {{count}} промежуточное", + "clearIntermediatesWithCount_few": "Очистить {{count}} промежуточных", + "clearIntermediatesWithCount_many": "Очистить {{count}} промежуточных", + "enableNSFWChecker": "Включить NSFW проверку", + "clearIntermediatesDisabled": "Очередь должна быть пуста, чтобы очистить промежуточные продукты", + "clearIntermediatesDesc2": "Промежуточные изображения — это побочные продукты генерации, отличные от результирующих изображений в галерее. Очистка промежуточных файлов освободит место на диске.", + "enableInvisibleWatermark": "Включить невидимый водяной знак", + "enableInformationalPopovers": "Включить информационные всплывающие окна", + "intermediatesCleared_one": "Очищено {{count}} промежуточное", + "intermediatesCleared_few": "Очищено {{count}} промежуточных", + "intermediatesCleared_many": "Очищено {{count}} промежуточных", + "clearIntermediatesDesc1": "Очистка промежуточных элементов приведет к сбросу состояния Canvas и ControlNet.", + "intermediatesClearedFailed": "Проблема очистки промежуточных", + "reloadingIn": "Перезагрузка через" }, "toast": { "tempFoldersEmptied": "Временная папка очищена", @@ -611,7 +744,48 @@ "nodesNotValidJSON": "Недопустимый JSON", "nodesCorruptedGraph": "Не удается загрузить. Граф, похоже, поврежден.", "nodesSaved": "Узлы сохранены", - "nodesNotValidGraph": "Недопустимый граф узлов InvokeAI" + "nodesNotValidGraph": "Недопустимый граф узлов InvokeAI", + "baseModelChangedCleared_one": "Базовая модель изменила, очистила или отключила {{count}} несовместимую подмодель", + "baseModelChangedCleared_few": "Базовая модель изменила, очистила или отключила {{count}} несовместимые подмодели", + "baseModelChangedCleared_many": "Базовая модель изменила, очистила или отключила {{count}} несовместимых подмоделей", + "imageSavingFailed": "Не удалось сохранить изображение", + "canvasSentControlnetAssets": "Холст отправлен в ControlNet и ресурсы", + "problemCopyingCanvasDesc": "Невозможно экспортировать базовый слой", + "loadedWithWarnings": "Рабочий процесс загружен с предупреждениями", + "setInitialImage": "Установить как исходное изображение", + "canvasCopiedClipboard": "Холст скопирован в буфер обмена", + "setControlImage": "Установить как контрольное изображение", + "setNodeField": "Установить как поле узла", + "problemSavingMask": "Проблема с сохранением маски", + "problemSavingCanvasDesc": "Невозможно экспортировать базовый слой", + "invalidUpload": "Неверная загрузка", + "maskSavedAssets": "Маска сохранена в ресурсах", + "modelAddFailed": "Не удалось добавить модель", + "problemDownloadingCanvas": "Проблема с скачиванием холста", + "setAsCanvasInitialImage": "Установить в качестве исходного изображения холста", + "problemMergingCanvas": "Проблема с объединением холста", + "setCanvasInitialImage": "Установить исходное изображение холста", + "imageUploaded": "Изображение загружено", + "addedToBoard": "Добавлено на доску", + "workflowLoaded": "Рабочий процесс загружен", + "problemDeletingWorkflow": "Проблема с удалением рабочего процесса", + "modelAddedSimple": "Модель добавлена", + "problemImportingMaskDesc": "Невозможно экспортировать маску", + "problemCopyingCanvas": "Проблема с копированием холста", + "workflowDeleted": "Рабочий процесс удален", + "problemSavingCanvas": "Проблема с сохранением холста", + "canvasDownloaded": "Холст скачан", + "setIPAdapterImage": "Установить как образ IP-адаптера", + "problemMergingCanvasDesc": "Невозможно экспортировать базовый слой", + "problemDownloadingCanvasDesc": "Невозможно экспортировать базовый слой", + "problemSavingMaskDesc": "Невозможно экспортировать маску", + "problemRetrievingWorkflow": "Проблема с получением рабочего процесса", + "imageSaved": "Изображение сохранено", + "maskSentControlnetAssets": "Маска отправлена в ControlNet и ресурсы", + "canvasSavedGallery": "Холст сохранен в галерею", + "imageUploadFailed": "Не удалось загрузить изображение", + "modelAdded": "Добавлена модель: {{modelName}}", + "problemImportingMask": "Проблема с импортом маски" }, "tooltip": { "feature": { @@ -686,7 +860,10 @@ "betaDarkenOutside": "Затемнить снаружи", "betaLimitToBox": "Ограничить выделением", "betaPreserveMasked": "Сохранять маскируемую область", - "antialiasing": "Не удалось скопировать ссылку на изображение" + "antialiasing": "Не удалось скопировать ссылку на изображение", + "saveMask": "Сохранить $t(unifiedCanvas.mask)", + "showResultsOn": "Показывать результаты (вкл)", + "showResultsOff": "Показывать результаты (вЫкл)" }, "accessibility": { "modelSelect": "Выбор модели", @@ -708,7 +885,12 @@ "useThisParameter": "Использовать этот параметр", "copyMetadataJson": "Скопировать метаданные JSON", "exitViewer": "Закрыть просмотрщик", - "menu": "Меню" + "menu": "Меню", + "showGalleryPanel": "Показать панель галереи", + "mode": "Режим", + "loadMore": "Загрузить больше", + "resetUI": "$t(accessibility.reset) интерфейс", + "createIssue": "Сообщить о проблеме" }, "ui": { "showProgressImages": "Показывать промежуточный итог", @@ -731,7 +913,212 @@ "resetWorkflow": "Сбросить рабочий процесс", "resetWorkflowDesc": "Вы уверены, что хотите сбросить этот рабочий процесс?", "reloadNodeTemplates": "Перезагрузить шаблоны узлов", - "downloadWorkflow": "Скачать JSON рабочего процесса" + "downloadWorkflow": "Скачать JSON рабочего процесса", + "booleanPolymorphicDescription": "Коллекция логических значений.", + "addNode": "Добавить узел", + "addLinearView": "Добавить в линейный вид", + "animatedEdges": "Анимированные ребра", + "booleanCollectionDescription": "Коллекция логических значений.", + "boardField": "Доска", + "animatedEdgesHelp": "Анимация выбранных ребер и ребер, соединенных с выбранными узлами", + "booleanPolymorphic": "Логическое полиморфное", + "boolean": "Логические значения", + "booleanDescription": "Логические значения могут быть только true или false.", + "cannotConnectInputToInput": "Невозможно подключить вход к входу", + "boardFieldDescription": "Доска галереи", + "cannotConnectOutputToOutput": "Невозможно подключить выход к выходу", + "booleanCollection": "Логическая коллекция", + "addNodeToolTip": "Добавить узел (Shift+A, Пробел)", + "scheduler": "Планировщик", + "inputField": "Поле ввода", + "controlFieldDescription": "Информация об управлении, передаваемая между узлами.", + "skippingUnknownOutputType": "Пропуск неизвестного типа выходного поля", + "denoiseMaskFieldDescription": "Маска шумоподавления может передаваться между узлами", + "floatCollectionDescription": "Коллекция чисел Float.", + "missingTemplate": "Недопустимый узел: узел {{node}} типа {{type}} не имеет шаблона (не установлен?)", + "outputSchemaNotFound": "Схема вывода не найдена", + "ipAdapterPolymorphicDescription": "Коллекция IP-адаптеров.", + "workflowDescription": "Краткое описание", + "inputFieldTypeParseError": "Невозможно разобрать тип поля ввода {{node}}.{{field}} ({{message}})", + "colorFieldDescription": "Цвет RGBA.", + "mainModelField": "Модель", + "unhandledInputProperty": "Необработанное входное свойство", + "unsupportedAnyOfLength": "слишком много элементов объединения ({{count}})", + "versionUnknown": " Версия неизвестна", + "ipAdapterCollection": "Коллекция IP-адаптеров", + "conditioningCollection": "Коллекция условий", + "maybeIncompatible": "Может быть несовместимо с установленным", + "unsupportedArrayItemType": "неподдерживаемый тип элемента массива \"{{type}}\"", + "ipAdapterPolymorphic": "Полиморфный IP-адаптер", + "noNodeSelected": "Узел не выбран", + "unableToValidateWorkflow": "Невозможно проверить рабочий процесс", + "enum": "Перечисления", + "updateAllNodes": "Обновить узлы", + "integerPolymorphicDescription": "Коллекция целых чисел.", + "noOutputRecorded": "Выходы не зарегистрированы", + "updateApp": "Обновить приложение", + "conditioningCollectionDescription": "Условные обозначения могут передаваться между узлами.", + "colorPolymorphic": "Полиморфный цвет", + "colorCodeEdgesHelp": "Цветовая маркировка ребер в соответствии с их связанными полями", + "float": "Float", + "workflowContact": "Контакт", + "targetNodeFieldDoesNotExist": "Неверный край: целевое/вводное поле {{node}}.{{field}} не существует", + "skippingReservedFieldType": "Пропуск зарезервированного типа поля", + "unsupportedMismatchedUnion": "несовпадение типа CollectionOrScalar с базовыми типами {{firstType}} и {{secondType}}", + "sDXLMainModelFieldDescription": "Поле модели SDXL.", + "allNodesUpdated": "Все узлы обновлены", + "conditioningPolymorphic": "Полиморфные условия", + "integer": "Целое число", + "colorField": "Цвет", + "nodeTemplate": "Шаблон узла", + "problemReadingWorkflow": "Проблема с чтением рабочего процесса из изображения", + "sourceNode": "Исходный узел", + "nodeOpacity": "Непрозрачность узла", + "sourceNodeDoesNotExist": "Недопустимое ребро: исходный/выходной узел {{node}} не существует", + "pickOne": "Выбери один", + "integerDescription": "Целые числа — это числа без запятой или точки.", + "outputField": "Поле вывода", + "unableToLoadWorkflow": "Невозможно загрузить рабочий процесс", + "unableToExtractEnumOptions": "невозможно извлечь параметры перечисления", + "snapToGrid": "Привязка к сетке", + "stringPolymorphic": "Полиморфная строка", + "conditioningPolymorphicDescription": "Условие может быть передано между узлами.", + "noFieldsLinearview": "Нет полей, добавленных в линейный вид", + "skipped": "Пропущено", + "unableToParseFieldType": "невозможно проанализировать тип поля", + "imagePolymorphic": "Полиморфное изображение", + "nodeSearch": "Поиск узлов", + "updateNode": "Обновить узел", + "imagePolymorphicDescription": "Коллекция изображений.", + "floatPolymorphic": "Полиморфные Float", + "outputFieldInInput": "Поле вывода во входных данных", + "version": "Версия", + "doesNotExist": "не найдено", + "unrecognizedWorkflowVersion": "Неизвестная версия схемы рабочего процесса {{version}}", + "ipAdapterCollectionDescription": "Коллекция IP-адаптеров.", + "stringCollectionDescription": "Коллекция строк.", + "unableToParseNode": "Невозможно разобрать узел", + "controlCollection": "Контрольная коллекция", + "validateConnections": "Проверка соединений и графика", + "stringCollection": "Коллекция строк", + "inputMayOnlyHaveOneConnection": "Вход может иметь только одно соединение", + "notes": "Заметки", + "outputFieldTypeParseError": "Невозможно разобрать тип поля вывода {{node}}.{{field}} ({{message}})", + "uNetField": "UNet", + "nodeOutputs": "Выходы узла", + "currentImageDescription": "Отображает текущее изображение в редакторе узлов", + "validateConnectionsHelp": "Предотвратить создание недопустимых соединений и вызов недопустимых графиков", + "problemSettingTitle": "Проблема с настройкой названия", + "ipAdapter": "IP-адаптер", + "integerCollection": "Коллекция целых чисел", + "collectionItem": "Элемент коллекции", + "noConnectionInProgress": "Соединение не выполняется", + "vaeModelField": "VAE", + "controlCollectionDescription": "Информация об управлении, передаваемая между узлами.", + "skippedReservedInput": "Пропущено зарезервированное поле ввода", + "workflowVersion": "Версия", + "noConnectionData": "Нет данных о соединении", + "outputFields": "Поля вывода", + "fieldTypesMustMatch": "Типы полей должны совпадать", + "workflow": "Рабочий процесс", + "edge": "Край", + "inputNode": "Входной узел", + "enumDescription": "Перечисления - это значения, которые могут быть одним из нескольких вариантов.", + "unkownInvocation": "Неизвестный тип вызова", + "sourceNodeFieldDoesNotExist": "Неверный край: поле источника/вывода {{node}}.{{field}} не существует", + "imageField": "Изображение", + "skippedReservedOutput": "Пропущено зарезервированное поле вывода", + "cannotDuplicateConnection": "Невозможно создать дубликаты соединений", + "unknownTemplate": "Неизвестный шаблон", + "noWorkflow": "Нет рабочего процесса", + "removeLinearView": "Удалить из линейного вида", + "integerCollectionDescription": "Коллекция целых чисел.", + "colorPolymorphicDescription": "Коллекция цветов.", + "sDXLMainModelField": "Модель SDXL", + "workflowTags": "Теги", + "denoiseMaskField": "Маска шумоподавления", + "missingCanvaInitImage": "Отсутствует начальное изображение холста", + "conditioningFieldDescription": "Условие может быть передано между узлами.", + "clipFieldDescription": "Подмодели Tokenizer и text_encoder.", + "fullyContainNodesHelp": "Чтобы узлы были выбраны, они должны полностью находиться в поле выбора", + "unableToGetWorkflowVersion": "Не удалось получить версию схемы рабочего процесса", + "noImageFoundState": "Начальное изображение не найдено в состоянии", + "workflowValidation": "Ошибка проверки рабочего процесса", + "nodePack": "Пакет узлов", + "stringDescription": "Строки это просто текст.", + "nodeType": "Тип узла", + "noMatchingNodes": "Нет соответствующих узлов", + "fullyContainNodes": "Выбор узлов с полным содержанием", + "integerPolymorphic": "Целочисленные полиморфные", + "executionStateInProgress": "В процессе", + "unableToExtractSchemaNameFromRef": "невозможно извлечь имя схемы из ссылки", + "noFieldType": "Нет типа поля", + "colorCollection": "Коллекция цветов.", + "executionStateError": "Ошибка", + "noOutputSchemaName": "В объекте ref не найдено имя выходной схемы", + "ipAdapterModel": "Модель IP-адаптера", + "prototypeDesc": "Этот вызов является прототипом. Он может претерпевать изменения при обновлении приложения и может быть удален в любой момент.", + "unableToMigrateWorkflow": "Невозможно перенести рабочий процесс", + "skippingInputNoTemplate": "Пропуск поля ввода без шаблона", + "ipAdapterDescription": "Image Prompt Adapter (IP-адаптер).", + "missingCanvaInitMaskImages": "Отсутствуют начальные изображения холста и маски", + "problemReadingMetadata": "Проблема с чтением метаданных с изображения", + "unknownOutput": "Неизвестный вывод: {{name}}", + "stringPolymorphicDescription": "Коллекция строк.", + "oNNXModelField": "Модель ONNX", + "executionStateCompleted": "Выполнено", + "node": "Узел", + "skippingUnknownInputType": "Пропуск неизвестного типа поля", + "workflowAuthor": "Автор", + "currentImage": "Текущее изображение", + "controlField": "Контроль", + "workflowName": "Название", + "collection": "Коллекция", + "ipAdapterModelDescription": "Поле модели IP-адаптера", + "invalidOutputSchema": "Неверная схема вывода", + "unableToUpdateNode": "Невозможно обновить узел", + "floatDescription": "Float - это числа с запятой.", + "floatPolymorphicDescription": "Коллекция Float-ов.", + "vaeField": "VAE", + "conditioningField": "Обусловленность", + "unknownErrorValidatingWorkflow": "Неизвестная ошибка при проверке рабочего процесса", + "collectionFieldType": "Коллекция {{name}}", + "unhandledOutputProperty": "Необработанное выходное свойство", + "workflowNotes": "Примечания", + "string": "Строка", + "floatCollection": "Коллекция Float", + "unknownNodeType": "Неизвестный тип узла", + "unableToUpdateNodes_one": "Невозможно обновить {{count}} узел", + "unableToUpdateNodes_few": "Невозможно обновить {{count}} узла", + "unableToUpdateNodes_many": "Невозможно обновить {{count}} узлов", + "connectionWouldCreateCycle": "Соединение создаст цикл", + "cannotConnectToSelf": "Невозможно подключиться к самому себе", + "notesDescription": "Добавляйте заметки о своем рабочем процессе", + "unknownField": "Неизвестное поле", + "inputFields": "Поля ввода", + "colorCodeEdges": "Ребра с цветовой кодировкой", + "uNetFieldDescription": "Подмодель UNet.", + "unknownNode": "Неизвестный узел", + "targetNodeDoesNotExist": "Недопустимое ребро: целевой/входной узел {{node}} не существует", + "imageCollectionDescription": "Коллекция изображений.", + "mismatchedVersion": "Недопустимый узел: узел {{node}} типа {{type}} имеет несоответствующую версию (попробовать обновить?)", + "unknownFieldType": "$t(nodes.unknownField) тип: {{type}}", + "vaeFieldDescription": "Подмодель VAE.", + "imageFieldDescription": "Изображения могут передаваться между узлами.", + "outputNode": "Выходной узел", + "collectionOrScalarFieldType": "Коллекция | Скаляр {{name}}", + "betaDesc": "Этот вызов находится в бета-версии. Пока он не станет стабильным, в нем могут происходить изменения при обновлении приложений. Мы планируем поддерживать этот вызов в течение длительного времени.", + "nodeVersion": "Версия узла", + "loadingNodes": "Загрузка узлов...", + "snapToGridHelp": "Привязка узлов к сетке при перемещении", + "workflowSettings": "Настройки редактора рабочих процессов", + "sDXLRefinerModelField": "Модель перерисовщик", + "loRAModelField": "LoRA", + "deletedInvalidEdge": "Удалено недопустимое ребро {{source}} -> {{target}}", + "unableToParseEdge": "Невозможно разобрать край", + "unknownInput": "Неизвестный вход: {{name}}", + "oNNXModelFieldDescription": "Поле модели ONNX.", + "imageCollection": "Коллекция изображений" }, "controlnet": { "amult": "a_mult", @@ -755,7 +1142,65 @@ "autoConfigure": "Автонастройка процессора", "delete": "Удалить", "canny": "Canny", - "depthZoeDescription": "Генерация карты глубины с использованием Zoe" + "depthZoeDescription": "Генерация карты глубины с использованием Zoe", + "resize": "Изменить размер", + "showAdvanced": "Показать расширенные", + "addT2IAdapter": "Добавить $t(common.t2iAdapter)", + "importImageFromCanvas": "Импортировать изображение с холста", + "lineartDescription": "Конвертация изображения в контурный рисунок", + "normalBae": "Обычный BAE", + "importMaskFromCanvas": "Импортировать маску с холста", + "hideAdvanced": "Скрыть расширенные", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) включен, $t(common.t2iAdapter)s отключен", + "ipAdapterModel": "Модель адаптера", + "resetControlImage": "Сбросить контрольное изображение", + "prompt": "Запрос", + "controlnet": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.controlNet)", + "openPoseDescription": "Оценка позы человека с помощью Openpose", + "resizeMode": "Режим изменения размера", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) включен, $t(common.controlNet)s отключен", + "weight": "Вес", + "selectModel": "Выберите модель", + "w": "В", + "processor": "Процессор", + "addControlNet": "Добавить $t(common.controlNet)", + "none": "ничего", + "incompatibleBaseModel": "Несовместимая базовая модель:", + "controlNetT2IMutexDesc": "$t(common.controlNet) и $t(common.t2iAdapter) одновременно в настоящее время не поддерживаются.", + "ip_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.ipAdapter)", + "pidiDescription": "PIDI-обработка изображений", + "mediapipeFace": "Лицо Mediapipe", + "fill": "Заполнить", + "addIPAdapter": "Добавить $t(common.ipAdapter)", + "lineart": "Контурный рисунок", + "colorMapDescription": "Создает карту цветов из изображения", + "lineartAnimeDescription": "Создание контурных рисунков в стиле аниме", + "t2i_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.t2iAdapter)", + "minConfidence": "Минимальная уверенность", + "imageResolution": "Разрешение изображения", + "colorMap": "Цвет", + "lowThreshold": "Низкий порог", + "highThreshold": "Высокий порог", + "normalBaeDescription": "Обычная обработка BAE", + "noneDescription": "Обработка не применяется", + "saveControlImage": "Сохранить контрольное изображение", + "toggleControlNet": "Переключить эту ControlNet", + "controlAdapter_one": "Адаптер контроля", + "controlAdapter_few": "Адаптера контроля", + "controlAdapter_many": "Адаптеров контроля", + "safe": "Безопасный", + "colorMapTileSize": "Размер плитки", + "lineartAnime": "Контурный рисунок в стиле аниме", + "ipAdapterImageFallback": "Изображение IP Adapter не выбрано", + "mediapipeFaceDescription": "Обнаружение лиц с помощью Mediapipe", + "hedDescription": "Целостное обнаружение границ", + "setControlImageDimensions": "Установите размеры контрольного изображения на Ш/В", + "scribble": "каракули", + "resetIPAdapterImage": "Сбросить изображение IP Adapter", + "handAndFace": "Руки и Лицо", + "enableIPAdapter": "Включить IP Adapter", + "maxFaces": "Макс Лица", + "mlsdDescription": "Минималистичный детектор отрезков линии" }, "boards": { "autoAddBoard": "Авто добавление Доски", @@ -772,6 +1217,440 @@ "uncategorized": "Без категории", "changeBoard": "Изменить Доску", "loading": "Загрузка...", - "clearSearch": "Очистить поиск" + "clearSearch": "Очистить поиск", + "deleteBoardOnly": "Удалить только доску", + "movingImagesToBoard_one": "Перемещаем {{count}} изображение на доску:", + "movingImagesToBoard_few": "Перемещаем {{count}} изображения на доску:", + "movingImagesToBoard_many": "Перемещаем {{count}} изображений на доску:", + "downloadBoard": "Скачать доску", + "deleteBoard": "Удалить доску", + "deleteBoardAndImages": "Удалить доску и изображения", + "deletedBoardsCannotbeRestored": "Удаленные доски не подлежат восстановлению" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "Используйте разные сиды для каждого изображения", + "perIterationLabel": "Сид на итерацию", + "perIterationDesc": "Используйте разные сиды для каждой итерации", + "perPromptLabel": "Сид для каждого изображения", + "label": "Поведение сида" + }, + "enableDynamicPrompts": "Динамические запросы", + "combinatorial": "Комбинаторная генерация", + "maxPrompts": "Максимум запросов", + "promptsPreview": "Предпросмотр запросов", + "promptsWithCount_one": "{{count}} Запрос", + "promptsWithCount_few": "{{count}} Запроса", + "promptsWithCount_many": "{{count}} Запросов", + "dynamicPrompts": "Динамические запросы" + }, + "popovers": { + "noiseUseCPU": { + "paragraphs": [ + "Определяет, генерируется ли шум на CPU или на GPU.", + "Если включен шум CPU, определенное начальное число будет создавать одно и то же изображение на любом компьютере.", + "Включение шума CPU не влияет на производительность." + ], + "heading": "Использовать шум CPU" + }, + "paramScheduler": { + "paragraphs": [ + "Планировщик определяет, как итеративно добавлять шум к изображению или как обновлять образец на основе выходных данных модели." + ], + "heading": "Планировщик" + }, + "scaleBeforeProcessing": { + "paragraphs": [ + "Масштабирует выбранную область до размера, наиболее подходящего для модели перед процессом создания изображения." + ], + "heading": "Масштабирование перед обработкой" + }, + "compositingMaskAdjustments": { + "heading": "Регулировка маски", + "paragraphs": [ + "Отрегулируйте маску." + ] + }, + "paramRatio": { + "heading": "Соотношение сторон", + "paragraphs": [ + "Соотношение сторон создаваемого изображения.", + "Размер изображения (в пикселях), эквивалентный 512x512, рекомендуется для моделей SD1.5, а размер, эквивалентный 1024x1024, рекомендуется для моделей SDXL." + ] + }, + "compositingCoherenceSteps": { + "heading": "Шаги", + "paragraphs": [ + null, + "То же, что и основной параметр «Шаги»." + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "Динамические запросы превращают одно приглашение на множество.", + "Базовый синтакиси: \"a {red|green|blue} ball\". В итоге будет 3 запроса: \"a red ball\", \"a green ball\" и \"a blue ball\".", + "Вы можете использовать синтаксис столько раз, сколько захотите в одном запросе, но обязательно контролируйте количество генерируемых запросов с помощью параметра «Максимальное количество запросов»." + ], + "heading": "Динамические запросы" + }, + "paramVAE": { + "paragraphs": [ + "Модель, используемая для преобразования вывода AI в конечное изображение." + ], + "heading": "VAE" + }, + "compositingBlur": { + "heading": "Размытие", + "paragraphs": [ + "Радиус размытия маски." + ] + }, + "paramIterations": { + "paragraphs": [ + "Количество изображений, которые нужно сгенерировать.", + "Если динамические подсказки включены, каждое из подсказок будет генерироваться столько раз." + ], + "heading": "Итерации" + }, + "paramVAEPrecision": { + "heading": "Точность VAE", + "paragraphs": [ + "Точность, используемая во время кодирования и декодирования VAE. Точность FP16/половина более эффективна за счет незначительных изменений изображения." + ] + }, + "compositingCoherenceMode": { + "heading": "Режим" + }, + "paramSeed": { + "paragraphs": [ + "Управляет стартовым шумом, используемым для генерации.", + "Отключите «Случайное начальное число», чтобы получить идентичные результаты с теми же настройками генерации." + ], + "heading": "Сид" + }, + "controlNetResizeMode": { + "heading": "Режим изменения размера", + "paragraphs": [ + "Как изображение ControlNet будет соответствовать размеру выходного изображения." + ] + }, + "controlNetBeginEnd": { + "paragraphs": [ + "На каких этапах процесса шумоподавления будет применена ControlNet.", + "ControlNet, применяемые в начале процесса, направляют композицию, а ControlNet, применяемые в конце, направляют детали." + ], + "heading": "Процент начала/конца шага" + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "Управляет использованием сида при создании запросов.", + "Для каждой итерации будет использоваться уникальный сид. Используйте это, чтобы изучить варианты запросов для одного сида.", + "Например, если у вас 5 запросов, каждое изображение будет использовать один и то же сид.", + "для каждого изображения будет использоваться уникальный сид. Это обеспечивает большую вариативность." + ], + "heading": "Поведение сида" + }, + "clipSkip": { + "paragraphs": [ + "Выберите, сколько слоев модели CLIP нужно пропустить.", + "Некоторые модели работают лучше с определенными настройками пропуска CLIP.", + "Более высокое значение обычно приводит к менее детализированному изображению." + ], + "heading": "CLIP пропуск" + }, + "paramModel": { + "heading": "Модель", + "paragraphs": [ + "Модель, используемая для шагов шумоподавления.", + "Различные модели обычно обучаются, чтобы специализироваться на достижении определенных эстетических результатов и содержания." + ] + }, + "compositingCoherencePass": { + "heading": "Согласованность", + "paragraphs": [ + "Второй этап шумоподавления помогает исправить шов между изначальным изображением и перерисованной или расширенной частью." + ] + }, + "paramDenoisingStrength": { + "paragraphs": [ + "Количество шума, добавляемого к входному изображению.", + "0 приведет к идентичному изображению, а 1 - к совершенно новому." + ], + "heading": "Шумоподавление" + }, + "compositingStrength": { + "heading": "Сила", + "paragraphs": [ + null, + "То же, что параметр «Сила шумоподавления img2img»." + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "Stable Diffusion пытается избежать указанных в отрицательном запросе концепций. Используйте это, чтобы исключить качества или объекты из вывода.", + "Поддерживает синтаксис Compel и встраивания." + ], + "heading": "Негативный запрос" + }, + "compositingBlurMethod": { + "heading": "Метод размытия", + "paragraphs": [ + "Метод размытия, примененный к замаскированной области." + ] + }, + "dynamicPromptsMaxPrompts": { + "heading": "Макс. запросы", + "paragraphs": [ + "Ограничивает количество запросов, которые могут быть созданы с помощью динамических запросов." + ] + }, + "paramCFGRescaleMultiplier": { + "heading": "Множитель масштабирования CFG", + "paragraphs": [ + "Множитель масштабирования CFG, используемый для моделей, обученных с использованием нулевого терминального SNR (ztsnr). Рекомендуемое значение 0,7." + ] + }, + "infillMethod": { + "paragraphs": [ + "Метод заполнения выбранной области." + ], + "heading": "Метод заполнения" + }, + "controlNetWeight": { + "heading": "Вес", + "paragraphs": [ + "Насколько сильно ControlNet повлияет на созданное изображение." + ] + }, + "controlNet": { + "heading": "ControlNet", + "paragraphs": [ + "Сети ControlNets обеспечивают руководство процессом генерации, помогая создавать изображения с контролируемой композицией, структурой или стилем, в зависимости от выбранной модели." + ] + }, + "paramCFGScale": { + "heading": "Шкала точности (CFG)", + "paragraphs": [ + "Контролирует, насколько ваш запрос влияет на процесс генерации." + ] + }, + "controlNetControlMode": { + "paragraphs": [ + "Придает больший вес либо запросу, либо ControlNet." + ], + "heading": "Режим управления" + }, + "paramSteps": { + "heading": "Шаги", + "paragraphs": [ + "Количество шагов, которые будут выполнены в ходе генерации.", + "Большее количество шагов обычно приводит к созданию более качественных изображений, но требует больше времени на создание." + ] + }, + "paramPositiveConditioning": { + "heading": "Запрос", + "paragraphs": [ + "Направляет процесс генерации. Вы можете использовать любые слова и фразы.", + "Большинство моделей Stable Diffusion работают только с запросом на английском языке, но бывают исключения." + ] + }, + "lora": { + "heading": "Вес LoRA", + "paragraphs": [ + "Более высокий вес LoRA приведет к большему влиянию на конечное изображение." + ] + } + }, + "metadata": { + "seamless": "Бесшовность", + "positivePrompt": "Запрос", + "negativePrompt": "Негативный запрос", + "generationMode": "Режим генерации", + "Threshold": "Шумовой порог", + "metadata": "Метаданные", + "strength": "Сила img2img", + "seed": "Сид", + "imageDetails": "Детали изображения", + "perlin": "Шум Перлига", + "model": "Модель", + "noImageDetails": "Детали изображения не найдены", + "hiresFix": "Оптимизация высокого разрешения", + "cfgScale": "Шкала точности", + "fit": "Соответствие изображения к изображению", + "initImage": "Исходное изображение", + "recallParameters": "Вызов параметров", + "height": "Высота", + "variations": "Пары сид-высота", + "noMetaData": "Метаданные не найдены", + "width": "Ширина", + "vae": "VAE", + "createdBy": "Сделано", + "workflow": "Рабочий процесс", + "steps": "Шаги", + "scheduler": "Планировщик", + "noRecallParameters": "Параметры для вызова не найдены", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)" + }, + "queue": { + "status": "Статус", + "pruneSucceeded": "Из очереди удалено {{item_count}} выполненных элементов", + "cancelTooltip": "Отменить текущий элемент", + "queueEmpty": "Очередь пуста", + "pauseSucceeded": "Рендеринг приостановлен", + "in_progress": "В процессе", + "queueFront": "Добавить в начало очереди", + "notReady": "Невозможно поставить в очередь", + "batchFailedToQueue": "Не удалось поставить пакет в очередь", + "completed": "Выполнено", + "queueBack": "Добавить в очередь", + "batchValues": "Пакетные значения", + "cancelFailed": "Проблема с отменой элемента", + "queueCountPrediction": "Добавить {{predicted}} в очередь", + "batchQueued": "Пакетная очередь", + "pauseFailed": "Проблема с приостановкой рендеринга", + "clearFailed": "Проблема с очисткой очереди", + "queuedCount": "{{pending}} Ожидание", + "front": "передний", + "clearSucceeded": "Очередь очищена", + "pause": "Пауза", + "pruneTooltip": "Удалить {{item_count}} выполненных задач", + "cancelSucceeded": "Элемент отменен", + "batchQueuedDesc_one": "Добавлен {{count}} сеанс в {{direction}} очереди", + "batchQueuedDesc_few": "Добавлено {{count}} сеанса в {{direction}} очереди", + "batchQueuedDesc_many": "Добавлено {{count}} сеансов в {{direction}} очереди", + "graphQueued": "График поставлен в очередь", + "queue": "Очередь", + "batch": "Пакет", + "clearQueueAlertDialog": "Очистка очереди немедленно отменяет все элементы обработки и полностью очищает очередь.", + "pending": "В ожидании", + "completedIn": "Завершено за", + "resumeFailed": "Проблема с возобновлением рендеринга", + "clear": "Очистить", + "prune": "Сократить", + "total": "Всего", + "canceled": "Отменено", + "pruneFailed": "Проблема с сокращением очереди", + "cancelBatchSucceeded": "Пакет отменен", + "clearTooltip": "Отменить все и очистить очередь", + "current": "Текущий", + "pauseTooltip": "Приостановить рендеринг", + "failed": "Неудачно", + "cancelItem": "Отменить элемент", + "next": "Следующий", + "cancelBatch": "Отменить пакет", + "back": "задний", + "batchFieldValues": "Пакетные значения полей", + "cancel": "Отмена", + "session": "Сессия", + "time": "Время", + "queueTotal": "{{total}} Всего", + "resumeSucceeded": "Рендеринг возобновлен", + "enqueueing": "Пакетная очередь", + "resumeTooltip": "Возобновить рендеринг", + "queueMaxExceeded": "Превышено максимальное значение {{max_queue_size}}, будет пропущен {{skip}}", + "resume": "Продолжить", + "cancelBatchFailed": "Проблема с отменой пакета", + "clearQueueAlertDialog2": "Вы уверены, что хотите очистить очередь?", + "item": "Элемент", + "graphFailedToQueue": "Не удалось поставить график в очередь" + }, + "sdxl": { + "refinerStart": "Запуск перерисовщика", + "selectAModel": "Выберите модель", + "scheduler": "Планировщик", + "cfgScale": "Шкала точности (CFG)", + "negStylePrompt": "Негативный запрос стиля", + "noModelsAvailable": "Нет доступных моделей", + "refiner": "Перерисовщик", + "negAestheticScore": "Отрицательная эстетическая оценка", + "useRefiner": "Использовать перерисовщик", + "denoisingStrength": "Шумоподавление", + "refinermodel": "Модель перерисовщик", + "posAestheticScore": "Положительная эстетическая оценка", + "concatPromptStyle": "Объединение запроса и стиля", + "loading": "Загрузка...", + "steps": "Шаги", + "posStylePrompt": "Запрос стиля" + }, + "invocationCache": { + "useCache": "Использовать кэш", + "disable": "Отключить", + "misses": "Промахи в кэше", + "enableFailed": "Проблема с включением кэша вызовов", + "invocationCache": "Кэш вызовов", + "clearSucceeded": "Кэш вызовов очищен", + "enableSucceeded": "Кэш вызовов включен", + "clearFailed": "Проблема с очисткой кэша вызовов", + "hits": "Попадания в кэш", + "disableSucceeded": "Кэш вызовов отключен", + "disableFailed": "Проблема с отключением кэша вызовов", + "enable": "Включить", + "clear": "Очистить", + "maxCacheSize": "Максимальный размер кэша", + "cacheSize": "Размер кэша" + }, + "workflows": { + "saveWorkflowAs": "Сохранить рабочий процесс как", + "workflowEditorMenu": "Меню редактора рабочего процесса", + "noSystemWorkflows": "Нет системных рабочих процессов", + "workflowName": "Имя рабочего процесса", + "noUserWorkflows": "Нет пользовательских рабочих процессов", + "defaultWorkflows": "Рабочие процессы по умолчанию", + "saveWorkflow": "Сохранить рабочий процесс", + "openWorkflow": "Открытый рабочий процесс", + "clearWorkflowSearchFilter": "Очистить фильтр поиска рабочих процессов", + "workflowEditorReset": "Сброс редактора рабочих процессов", + "workflowLibrary": "Библиотека", + "downloadWorkflow": "Скачать рабочий процесс", + "noRecentWorkflows": "Нет недавних рабочих процессов", + "workflowSaved": "Рабочий процесс сохранен", + "workflowIsOpen": "Рабочий процесс открыт", + "unnamedWorkflow": "Безымянный рабочий процесс", + "savingWorkflow": "Сохранение рабочего процесса...", + "problemLoading": "Проблема с загрузкой рабочих процессов", + "loading": "Загрузка рабочих процессов", + "searchWorkflows": "Поиск рабочих процессов", + "problemSavingWorkflow": "Проблема с сохранением рабочего процесса", + "deleteWorkflow": "Удалить рабочий процесс", + "workflows": "Рабочие процессы", + "noDescription": "Без описания", + "uploadWorkflow": "Загрузить рабочий процесс", + "userWorkflows": "Мои рабочие процессы" + }, + "embedding": { + "noEmbeddingsLoaded": "встраивания не загружены", + "noMatchingEmbedding": "Нет подходящих встраиваний", + "addEmbedding": "Добавить встраивание", + "incompatibleModel": "Несовместимая базовая модель:" + }, + "hrf": { + "enableHrf": "Включить исправление высокого разрешения", + "upscaleMethod": "Метод увеличения", + "enableHrfTooltip": "Сгенерируйте с более низким начальным разрешением, увеличьте его до базового разрешения, а затем запустите Image-to-Image.", + "metadata": { + "strength": "Сила исправления высокого разрешения", + "enabled": "Исправление высокого разрешения включено", + "method": "Метод исправления высокого разрешения" + }, + "hrf": "Исправление высокого разрешения", + "hrfStrength": "Сила исправления высокого разрешения", + "strengthTooltip": "Более низкие значения приводят к меньшему количеству деталей, что может уменьшить потенциальные артефакты." + }, + "models": { + "noLoRAsLoaded": "LoRA не загружены", + "noMatchingModels": "Нет подходящих моделей", + "esrganModel": "Модель ESRGAN", + "loading": "загрузка", + "noMatchingLoRAs": "Нет подходящих LoRA", + "noLoRAsAvailable": "Нет доступных LoRA", + "noModelsAvailable": "Нет доступных моделей", + "addLora": "Добавить LoRA", + "selectModel": "Выберите модель", + "noRefinerModelsInstalled": "Модели SDXL Refiner не установлены", + "noLoRAsInstalled": "Нет установленных LoRA", + "selectLoRA": "Выберите LoRA" + }, + "app": { + "storeNotInitialized": "Магазин не инициализирован" } } From bb986b97f321a57c63d89a6db1a10842918232fb Mon Sep 17 00:00:00 2001 From: Surisen Date: Wed, 13 Dec 2023 20:42:42 +0100 Subject: [PATCH 184/515] translationBot(ui): update translation (Chinese (Simplified)) Currently translated at 99.8% (1363 of 1365 strings) Co-authored-by: Surisen Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/ Translation: InvokeAI/Web UI --- .../frontend/web/public/locales/zh_CN.json | 70 ++++++++++++++++--- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/invokeai/frontend/web/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json index b1b6852f25..b29cf037d3 100644 --- a/invokeai/frontend/web/public/locales/zh_CN.json +++ b/invokeai/frontend/web/public/locales/zh_CN.json @@ -110,7 +110,17 @@ "copyError": "$t(gallery.copy) 错误", "input": "输入", "notInstalled": "非 $t(common.installed)", - "delete": "删除" + "delete": "删除", + "updated": "已上传", + "save": "保存", + "created": "已创建", + "prevPage": "上一页", + "unknownError": "未知错误", + "direction": "指向", + "orderBy": "排序方式:", + "nextPage": "下一页", + "saveAs": "保存为", + "unsaved": "未保存" }, "gallery": { "generations": "生成的图像", @@ -146,7 +156,11 @@ "image": "图像", "drop": "弃用", "dropOrUpload": "$t(gallery.drop) 或上传", - "dropToUpload": "$t(gallery.drop) 以上传" + "dropToUpload": "$t(gallery.drop) 以上传", + "problemDeletingImagesDesc": "有一张或多张图像无法被删除", + "problemDeletingImages": "删除图像时出现问题", + "unstarImage": "取消收藏图像", + "starImage": "收藏图像" }, "hotkeys": { "keyboardShortcuts": "键盘快捷键", @@ -724,7 +738,7 @@ "nodesUnrecognizedTypes": "无法加载。节点图有无法识别的节点类型", "nodesNotValidJSON": "无效的 JSON", "nodesNotValidGraph": "无效的 InvokeAi 节点图", - "nodesLoadedFailed": "节点图加载失败", + "nodesLoadedFailed": "节点加载失败", "modelAddedSimple": "已添加模型", "modelAdded": "已添加模型: {{modelName}}", "imageSavingFailed": "图像保存失败", @@ -760,7 +774,10 @@ "problemImportingMask": "导入遮罩时出现问题", "baseModelChangedCleared_other": "基础模型已更改, 已清除或禁用 {{count}} 个不兼容的子模型", "setAsCanvasInitialImage": "设为画布初始图像", - "invalidUpload": "无效的上传" + "invalidUpload": "无效的上传", + "problemDeletingWorkflow": "删除工作流时出现问题", + "workflowDeleted": "已删除工作流", + "problemRetrievingWorkflow": "检索工作流时发生问题" }, "unifiedCanvas": { "layer": "图层", @@ -875,11 +892,11 @@ }, "nodes": { "zoomInNodes": "放大", - "resetWorkflowDesc": "是否确定要清空节点图?", - "resetWorkflow": "清空节点图", - "loadWorkflow": "读取节点图", + "resetWorkflowDesc": "是否确定要重置工作流编辑器?", + "resetWorkflow": "重置工作流编辑器", + "loadWorkflow": "加载工作流", "zoomOutNodes": "缩小", - "resetWorkflowDesc2": "重置节点图将清除所有节点、边际和节点图详情.", + "resetWorkflowDesc2": "重置工作流编辑器将清除所有节点、边际和节点图详情。不影响已保存的工作流。", "reloadNodeTemplates": "重载节点模板", "hideGraphNodes": "隐藏节点图信息", "fitViewportNodes": "自适应视图", @@ -888,7 +905,7 @@ "showLegendNodes": "显示字段类型图例", "hideLegendNodes": "隐藏字段类型图例", "showGraphNodes": "显示节点图信息", - "downloadWorkflow": "下载节点图 JSON", + "downloadWorkflow": "下载工作流 JSON", "workflowDescription": "简述", "versionUnknown": " 未知版本", "noNodeSelected": "无选中的节点", @@ -1103,7 +1120,9 @@ "collectionOrScalarFieldType": "{{name}} 合集 | 标量", "nodeVersion": "节点版本", "deletedInvalidEdge": "已删除无效的边缘 {{source}} -> {{target}}", - "unknownInput": "未知输入:{{name}}" + "unknownInput": "未知输入:{{name}}", + "prototypeDesc": "此调用是一个原型 (prototype)。它可能会在本项目更新期间发生破坏性更改,并且随时可能被删除。", + "betaDesc": "此调用尚处于测试阶段。在稳定之前,它可能会在项目更新期间发生破坏性更改。本项目计划长期支持这种调用。" }, "controlnet": { "resize": "直接缩放", @@ -1607,5 +1626,36 @@ "hrf": "高分辨率修复", "hrfStrength": "高分辨率修复强度", "strengthTooltip": "值越低细节越少,但可以减少部分潜在的伪影。" + }, + "workflows": { + "saveWorkflowAs": "保存工作流为", + "workflowEditorMenu": "工作流编辑器菜单", + "noSystemWorkflows": "无系统工作流", + "workflowName": "工作流名称", + "noUserWorkflows": "无用户工作流", + "defaultWorkflows": "默认工作流", + "saveWorkflow": "保存工作流", + "openWorkflow": "打开工作流", + "clearWorkflowSearchFilter": "清除工作流检索过滤器", + "workflowEditorReset": "工作流编辑器重置", + "workflowLibrary": "工作流库", + "downloadWorkflow": "下载工作流", + "noRecentWorkflows": "无最近工作流", + "workflowSaved": "已保存工作流", + "workflowIsOpen": "工作流已打开", + "unnamedWorkflow": "未命名的工作流", + "savingWorkflow": "保存工作流中...", + "problemLoading": "加载工作流时出现问题", + "loading": "加载工作流中", + "searchWorkflows": "检索工作流", + "problemSavingWorkflow": "保存工作流时出现问题", + "deleteWorkflow": "删除工作流", + "workflows": "工作流", + "noDescription": "无描述", + "uploadWorkflow": "上传工作流", + "userWorkflows": "我的工作流" + }, + "app": { + "storeNotInitialized": "商店尚未初始化" } } From 442ac2b8283ca77f717c9b31533e378a8ae8933f Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 14 Dec 2023 09:12:54 +1100 Subject: [PATCH 185/515] fix(ui): fix frontend workflow migration when node is missing version This should default to "1.0.0" to match the behaviour of the backend. --- .../web/src/features/nodes/util/workflow/migrations.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts b/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts index fddd4de495..a8212f06b6 100644 --- a/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts +++ b/invokeai/frontend/web/src/features/nodes/util/workflow/migrations.ts @@ -64,7 +64,10 @@ const migrateV1toV2 = (workflowToMigrate: WorkflowV1): WorkflowV2 => { const nodePack = invocationTemplate ? invocationTemplate.nodePack : t('common.unknown'); + (node.data as unknown as InvocationNodeData).nodePack = nodePack; + // Fallback to 1.0.0 if not specified - this matches the behavior of the backend + node.data.version ||= '1.0.0'; } }); // Bump version From f0c70fe3f19e59d2be746e00a4e16029569562dd Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 14 Dec 2023 07:47:08 +1100 Subject: [PATCH 186/515] fix(db): add error handling for workflow migration - Handle an image file not existing despite being in the database. - Add a simple pydantic model that tests only for the existence of a workflow's version. - Check against this new model when migrating workflows, skipping if the workflow fails validation. If it succeeds, the frontend should be able to handle the workflow. --- .../sqlite_migrator/migrations/migration_2.py | 18 ++++++++++++++++-- .../workflow_records_common.py | 12 ++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index 9efd2a1283..9b9dedcc58 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -1,10 +1,15 @@ import sqlite3 from logging import Logger +from pydantic import ValidationError from tqdm import tqdm from invokeai.app.services.image_files.image_files_base import ImageFileStorageBase +from invokeai.app.services.image_files.image_files_common import ImageFileNotFoundException from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration +from invokeai.app.services.workflow_records.workflow_records_common import ( + UnsafeWorkflowWithVersionValidator, +) class Migration2Callback: @@ -134,7 +139,7 @@ class Migration2Callback: This migrate callback checks each image for the presence of an embedded workflow, then updates its entry in the database accordingly. """ - # Get the total number of images and chunk it into pages + # Get all image names cursor.execute("SELECT image_name FROM images") image_names: list[str] = [image[0] for image in cursor.fetchall()] total_image_names = len(image_names) @@ -149,8 +154,17 @@ class Migration2Callback: pbar = tqdm(image_names) for idx, image_name in enumerate(pbar): pbar.set_description(f"Checking image {idx + 1}/{total_image_names} for workflow") - pil_image = self._image_files.get(image_name) + try: + pil_image = self._image_files.get(image_name) + except ImageFileNotFoundException: + self._logger.warning(f"Image {image_name} not found, skipping") + continue if "invokeai_workflow" in pil_image.info: + try: + UnsafeWorkflowWithVersionValidator.validate_json(pil_image.info.get("invokeai_workflow", "")) + except ValidationError: + self._logger.warning(f"Image {image_name} has invalid embedded workflow, skipping") + continue to_migrate.append((True, image_name)) self._logger.info(f"Adding {len(to_migrate)} embedded workflows to database") diff --git a/invokeai/app/services/workflow_records/workflow_records_common.py b/invokeai/app/services/workflow_records/workflow_records_common.py index ffc98bb786..b7a1fba729 100644 --- a/invokeai/app/services/workflow_records/workflow_records_common.py +++ b/invokeai/app/services/workflow_records/workflow_records_common.py @@ -71,6 +71,18 @@ class WorkflowWithoutID(BaseModel): WorkflowWithoutIDValidator = TypeAdapter(WorkflowWithoutID) +class UnsafeWorkflowWithVersion(BaseModel): + """ + This utility model only requires a workflow to have a valid version string. + It is used to validate a workflow version without having to validate the entire workflow. + """ + + meta: WorkflowMeta = Field(description="The meta of the workflow.") + + +UnsafeWorkflowWithVersionValidator = TypeAdapter(UnsafeWorkflowWithVersion) + + class Workflow(WorkflowWithoutID): id: str = Field(description="The id of the workflow.") From 461e474394013e03b5b00d35241cdac1e4078f76 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 14 Dec 2023 09:58:34 +1100 Subject: [PATCH 187/515] fix(nodes): fix embedded workflows with IDs This model was a bit too strict, and raised validation errors when workflows we expect to *not* have an ID (eg, an embedded workflow) have one. Now it strips unknown attributes, allowing those workflows to load. --- .../app/services/workflow_records/workflow_records_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/services/workflow_records/workflow_records_common.py b/invokeai/app/services/workflow_records/workflow_records_common.py index b7a1fba729..e7f3d4295f 100644 --- a/invokeai/app/services/workflow_records/workflow_records_common.py +++ b/invokeai/app/services/workflow_records/workflow_records_common.py @@ -65,7 +65,7 @@ class WorkflowWithoutID(BaseModel): nodes: list[dict[str, JsonValue]] = Field(description="The nodes of the workflow.") edges: list[dict[str, JsonValue]] = Field(description="The edges of the workflow.") - model_config = ConfigDict(extra="forbid") + model_config = ConfigDict(extra="ignore") WorkflowWithoutIDValidator = TypeAdapter(WorkflowWithoutID) From 77f04ff8d6229694b7c02f18bc4092b91d7b4a2d Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 14 Dec 2023 08:25:32 +1100 Subject: [PATCH 188/515] docs: add warning to developer install about database & main --- docs/installation/020_INSTALL_MANUAL.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/installation/020_INSTALL_MANUAL.md b/docs/installation/020_INSTALL_MANUAL.md index 0ddf1bca68..b395405ba3 100644 --- a/docs/installation/020_INSTALL_MANUAL.md +++ b/docs/installation/020_INSTALL_MANUAL.md @@ -293,6 +293,19 @@ manager, please follow these steps: ## Developer Install +!!! warning + + InvokeAI uses a SQLite database. By running on `main`, you accept responsibility for your database. This + means making regular backups (especially before pulling) and/or fixing it yourself in the event that a + PR introduces a schema change. + + If you don't need persistent backend storage, you can use an ephemeral in-memory database by setting + `use_memory_db: true` under `Path:` in your `invokeai.yaml` file. + + If this is untenable, you should run the application via the official installer or a manual install of the + python package from pypi. These releases will not break your database. + + If you have an interest in how InvokeAI works, or you would like to add features or bugfixes, you are encouraged to install the source code for InvokeAI. For this to work, you will need to install the @@ -388,3 +401,5 @@ environment variable INVOKEAI_ROOT to point to the installation directory. Note that if you run into problems with the Conda installation, the InvokeAI staff will **not** be able to help you out. Caveat Emptor! + +[dev-chat]: https://discord.com/channels/1020123559063990373/1049495067846524939 \ No newline at end of file From e10f6e896263dca5139699ad11a25a38e056b539 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 14 Dec 2023 10:05:21 +1100 Subject: [PATCH 189/515] fix(nodes): mark CalculateImageTilesInvocation as beta missed this when I added classification --- invokeai/app/invocations/tiles.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index c0582986a8..cbf63ab169 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -38,7 +38,14 @@ class CalculateImageTilesOutput(BaseInvocationOutput): tiles: list[Tile] = OutputField(description="The tiles coordinates that cover a particular image shape.") -@invocation("calculate_image_tiles", title="Calculate Image Tiles", tags=["tiles"], category="tiles", version="1.0.0") +@invocation( + "calculate_image_tiles", + title="Calculate Image Tiles", + tags=["tiles"], + category="tiles", + version="1.0.0", + classification=Classification.Beta, +) class CalculateImageTilesInvocation(BaseInvocation): """Calculate the coordinates and overlaps of tiles that cover a target image shape.""" From c6235049c781175576bf7a65575f709c2b41e60a Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Wed, 13 Dec 2023 13:37:21 -0600 Subject: [PATCH 190/515] Add an unsharp mask node to core nodes Unsharp mask is an image operation that, despite its name, sharpens an image. Like a Gaussian blur, it takes a radius and strength. --- invokeai/app/invocations/image.py | 61 ++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index 89209fed41..f1e750eda1 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -5,13 +5,12 @@ from typing import Literal, Optional import cv2 import numpy -from PIL import Image, ImageChops, ImageFilter, ImageOps - from invokeai.app.invocations.primitives import BoardField, ColorField, ImageField, ImageOutput from invokeai.app.services.image_records.image_records_common import ImageCategory, ImageRecordChanges, ResourceOrigin from invokeai.app.shared.fields import FieldDescriptions from invokeai.backend.image_util.invisible_watermark import InvisibleWatermark from invokeai.backend.image_util.safety_checker import SafetyChecker +from PIL import Image, ImageChops, ImageFilter, ImageOps from .baseinvocation import BaseInvocation, Input, InputField, InvocationContext, WithMetadata, invocation @@ -421,6 +420,64 @@ class ImageBlurInvocation(BaseInvocation, WithMetadata): ) + +@invocation( + "unsharp_mask", + title="Unsharp Mask", + tags=["image", "unsharp_mask"], + category="image", + version="1.2.0", +) +class UnsharpMaskInvocation(BaseInvocation, WithMetadata): + """Applies an unsharp mask filter to an image""" + + image: ImageField = InputField(description="The image to use") + radius: float = InputField(gt=0, description="Unsharp mask radius", default=2) + strength: float = InputField(ge=0, description="Unsharp mask strength", default=50) + + def pil_from_array(self, arr): + return Image.fromarray((arr * 255).astype("uint8")) + + def array_from_pil(self, img): + return numpy.array(img) / 255 + + def invoke(self, context: InvocationContext) -> ImageOutput: + image = context.services.images.get_pil_image(self.image.image_name) + mode = image.mode + + alpha_channel = image.getchannel("A") if mode == "RGBA" else None + image = image.convert("RGB") + image_blurred = self.array_from_pil(image.filter(ImageFilter.GaussianBlur(radius=self.radius))) + + image = self.array_from_pil(image) + image += (image - image_blurred) * (self.strength / 100.0) + image = numpy.clip(image, 0, 1) + image = self.pil_from_array(image) + + image = image.convert(mode) + + # Make the image RGBA if we had a source alpha channel + if alpha_channel is not None: + image.putalpha(alpha_channel) + + image_dto = context.services.images.create( + image=image, + image_origin=ResourceOrigin.INTERNAL, + image_category=ImageCategory.GENERAL, + node_id=self.id, + session_id=context.graph_execution_state_id, + is_intermediate=self.is_intermediate, + metadata=self.metadata, + workflow=context.workflow, + ) + + return ImageOutput( + image=ImageField(image_name=image_dto.image_name), + width=image.width, + height=image.height, + ) + + PIL_RESAMPLING_MODES = Literal[ "nearest", "box", From bec888923a3942fb8d9ecd596a7043cbfda7ba26 Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Wed, 13 Dec 2023 14:52:04 -0600 Subject: [PATCH 191/515] Fix for ruff --- invokeai/app/invocations/image.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index f1e750eda1..62105fde77 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -5,12 +5,13 @@ from typing import Literal, Optional import cv2 import numpy +from PIL import Image, ImageChops, ImageFilter, ImageOps + from invokeai.app.invocations.primitives import BoardField, ColorField, ImageField, ImageOutput from invokeai.app.services.image_records.image_records_common import ImageCategory, ImageRecordChanges, ResourceOrigin from invokeai.app.shared.fields import FieldDescriptions from invokeai.backend.image_util.invisible_watermark import InvisibleWatermark from invokeai.backend.image_util.safety_checker import SafetyChecker -from PIL import Image, ImageChops, ImageFilter, ImageOps from .baseinvocation import BaseInvocation, Input, InputField, InvocationContext, WithMetadata, invocation From 3b04fef31dcfbc96d92f5fbaee849f6d68e4668f Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Wed, 13 Dec 2023 17:54:07 -0600 Subject: [PATCH 192/515] Added classification --- invokeai/app/invocations/image.py | 1 + 1 file changed, 1 insertion(+) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index 62105fde77..159531d588 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -42,6 +42,7 @@ class ShowImageInvocation(BaseInvocation): tags=["image"], category="image", version="1.2.0", + classification=Classification.Beta, ) class BlankImageInvocation(BaseInvocation, WithMetadata): """Creates a blank image and forwards it to the pipeline""" From 5ad88c7f86d4fa43743b8e55f7df7b69693a09ab Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Wed, 13 Dec 2023 17:55:33 -0600 Subject: [PATCH 193/515] Fixed classification --- invokeai/app/invocations/image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index 159531d588..c02d1f74ac 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -42,7 +42,6 @@ class ShowImageInvocation(BaseInvocation): tags=["image"], category="image", version="1.2.0", - classification=Classification.Beta, ) class BlankImageInvocation(BaseInvocation, WithMetadata): """Creates a blank image and forwards it to the pipeline""" @@ -429,6 +428,7 @@ class ImageBlurInvocation(BaseInvocation, WithMetadata): tags=["image", "unsharp_mask"], category="image", version="1.2.0", + classification=Classification.Beta, ) class UnsharpMaskInvocation(BaseInvocation, WithMetadata): """Applies an unsharp mask filter to an image""" From 18b2bcbbeecc40b084a882169a0afd488a3c8770 Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Wed, 13 Dec 2023 18:46:24 -0600 Subject: [PATCH 194/515] Added Classification from baseinvocation --- invokeai/app/invocations/image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index c02d1f74ac..164a41f192 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -13,7 +13,7 @@ from invokeai.app.shared.fields import FieldDescriptions from invokeai.backend.image_util.invisible_watermark import InvisibleWatermark from invokeai.backend.image_util.safety_checker import SafetyChecker -from .baseinvocation import BaseInvocation, Input, InputField, InvocationContext, WithMetadata, invocation +from .baseinvocation import BaseInvocation, Classification, Input, InputField, InvocationContext, WithMetadata, invocation @invocation("show_image", title="Show Image", tags=["image"], category="image", version="1.0.0") From ea4ef042f324d70db24698d818488a8a5f627eb1 Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Wed, 13 Dec 2023 19:41:30 -0600 Subject: [PATCH 195/515] Ruff fixes --- invokeai/app/invocations/image.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/invokeai/app/invocations/image.py b/invokeai/app/invocations/image.py index 164a41f192..f729d60cdd 100644 --- a/invokeai/app/invocations/image.py +++ b/invokeai/app/invocations/image.py @@ -13,7 +13,15 @@ from invokeai.app.shared.fields import FieldDescriptions from invokeai.backend.image_util.invisible_watermark import InvisibleWatermark from invokeai.backend.image_util.safety_checker import SafetyChecker -from .baseinvocation import BaseInvocation, Classification, Input, InputField, InvocationContext, WithMetadata, invocation +from .baseinvocation import ( + BaseInvocation, + Classification, + Input, + InputField, + InvocationContext, + WithMetadata, + invocation, +) @invocation("show_image", title="Show Image", tags=["image"], category="image", version="1.0.0") @@ -421,7 +429,6 @@ class ImageBlurInvocation(BaseInvocation, WithMetadata): ) - @invocation( "unsharp_mask", title="Unsharp Mask", From b935768eeb4ab524e03b97ac29757d815e59ba73 Mon Sep 17 00:00:00 2001 From: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com> Date: Wed, 13 Dec 2023 22:28:47 -0500 Subject: [PATCH 196/515] Update mkdocs.yml --- mkdocs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index d030e3d6fc..7c67a2777a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -101,6 +101,8 @@ plugins: extra_javascript: - https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js - javascripts/tablesort.js + - https://widget.kapa.ai/kapa-widget.bundle.js + - javascript/init_kapa_widget.js extra: analytics: From 42c04db1675ef7339596aa50e4af4cbe53485b05 Mon Sep 17 00:00:00 2001 From: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com> Date: Wed, 13 Dec 2023 22:33:50 -0500 Subject: [PATCH 197/515] adding kapa widget to docs --- docs/javascripts/init_kapa_widget.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/javascripts/init_kapa_widget.js diff --git a/docs/javascripts/init_kapa_widget.js b/docs/javascripts/init_kapa_widget.js new file mode 100644 index 0000000000..f22e276b5a --- /dev/null +++ b/docs/javascripts/init_kapa_widget.js @@ -0,0 +1,10 @@ +document.addEventListener("DOMContentLoaded", function () { + var script = document.createElement("script"); + script.src = "https://widget.kapa.ai/kapa-widget.bundle.js"; + script.setAttribute("data-website-id", "b5973bb1-476b-451e-8cf4-98de86745a10"); + script.setAttribute("data-project-name", "Invoke.AI"); + script.setAttribute("data-project-color", "#11213C"); + script.setAttribute("data-project-logo", "https://avatars.githubusercontent.com/u/113954515?s=280&v=4"); + script.async = true; + document.head.appendChild(script); +}); From d1d8ee71fc5ce3639d5463927909849b719ba2ab Mon Sep 17 00:00:00 2001 From: "Wilson E. Alvarez" Date: Mon, 30 Oct 2023 16:53:02 -0400 Subject: [PATCH 198/515] Simplify docker compose setup --- docker/README.md | 4 ++-- docker/build.sh | 11 ----------- docker/docker-compose.yml | 37 +++++++++++++++++++++---------------- docker/run.sh | 27 +++++++++++++++++++++------ 4 files changed, 44 insertions(+), 35 deletions(-) delete mode 100755 docker/build.sh diff --git a/docker/README.md b/docker/README.md index 4291ece25f..567ce6832d 100644 --- a/docker/README.md +++ b/docker/README.md @@ -23,7 +23,7 @@ This is done via Docker Desktop preferences 1. Make a copy of `env.sample` and name it `.env` (`cp env.sample .env` (Mac/Linux) or `copy example.env .env` (Windows)). Make changes as necessary. Set `INVOKEAI_ROOT` to an absolute path to: a. the desired location of the InvokeAI runtime directory, or b. an existing, v3.0.0 compatible runtime directory. -1. `docker compose up` +1. Execute `run.sh` The image will be built automatically if needed. @@ -39,7 +39,7 @@ The Docker daemon on the system must be already set up to use the GPU. In case o ## Customize -Check the `.env.sample` file. It contains some environment variables for running in Docker. Copy it, name it `.env`, and fill it in with your own values. Next time you run `docker compose up`, your custom values will be used. +Check the `.env.sample` file. It contains some environment variables for running in Docker. Copy it, name it `.env`, and fill it in with your own values. Next time you run `run.sh`, your custom values will be used. You can also set these values in `docker-compose.yml` directly, but `.env` will help avoid conflicts when code is updated. diff --git a/docker/build.sh b/docker/build.sh deleted file mode 100755 index 3b3875c15c..0000000000 --- a/docker/build.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -e - -build_args="" - -[[ -f ".env" ]] && build_args=$(awk '$1 ~ /\=[^$]/ {print "--build-arg " $0 " "}' .env) - -echo "docker compose build args:" -echo $build_args - -docker compose build $build_args diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index f7e92d6bf5..a5f324f746 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -2,23 +2,8 @@ version: '3.8' -services: - invokeai: +x-invokeai: &invokeai image: "local/invokeai:latest" - # edit below to run on a container runtime other than nvidia-container-runtime. - # not yet tested with rocm/AMD GPUs - # Comment out the "deploy" section to run on CPU only - deploy: - resources: - reservations: - devices: - - driver: nvidia - count: 1 - capabilities: [gpu] - # For AMD support, comment out the deploy section above and uncomment the devices section below: - #devices: - # - /dev/kfd:/dev/kfd - # - /dev/dri:/dev/dri build: context: .. dockerfile: docker/Dockerfile @@ -50,3 +35,23 @@ services: # - | # invokeai-model-install --yes --default-only --config_file ${INVOKEAI_ROOT}/config_custom.yaml # invokeai-nodes-web --host 0.0.0.0 + +services: + invokeai-cpu: + <<: *invokeai + + invokeai-nvidia: + <<: *invokeai + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + + invokeai-rocm: + <<: *invokeai + devices: + - /dev/kfd:/dev/kfd + - /dev/dri:/dev/dri diff --git a/docker/run.sh b/docker/run.sh index 4b595b06df..950b653a53 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -1,11 +1,26 @@ #!/usr/bin/env bash set -e -# This script is provided for backwards compatibility with the old docker setup. -# it doesn't do much aside from wrapping the usual docker compose CLI. +run() { + local scriptdir=$(dirname "${BASH_SOURCE[0]}") + cd "$scriptdir" || exit 1 -SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") -cd "$SCRIPTDIR" || exit 1 + local build_args="" + local service_name="invokeai-cpu" -docker compose up -d -docker compose logs -f + [[ -f ".env" ]] && + build_args=$(awk '$1 ~ /=[^$]/ {print "--build-arg " $0 " "}' .env) && + service_name="invokeai-$(awk -F '=' '/GPU_DRIVER/ {print $2}' .env)" + + printf "%s\n" "docker compose build args:" + printf "%s\n" "$build_args" + + docker compose build $build_args + unset build_args + + printf "%s\n" "starting service $service_name" + docker compose up -d $service_name + docker compose logs -f +} + +run From 296060db6389c6417b65e7a9a62cd91096c588ac Mon Sep 17 00:00:00 2001 From: "Wilson E. Alvarez" Date: Thu, 7 Dec 2023 11:17:11 -0500 Subject: [PATCH 199/515] Add cpu and rocm profiles. Let invokeai-nvidia service be the default. --- docker/docker-compose.yml | 10 +++++++--- docker/run.sh | 10 ++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index a5f324f746..b6a965d120 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -37,9 +37,6 @@ x-invokeai: &invokeai # invokeai-nodes-web --host 0.0.0.0 services: - invokeai-cpu: - <<: *invokeai - invokeai-nvidia: <<: *invokeai deploy: @@ -50,8 +47,15 @@ services: count: 1 capabilities: [gpu] + invokeai-cpu: + <<: *invokeai + profiles: + - cpu + invokeai-rocm: <<: *invokeai devices: - /dev/kfd:/dev/kfd - /dev/dri:/dev/dri + profiles: + - rocm diff --git a/docker/run.sh b/docker/run.sh index 950b653a53..4fe1bf4237 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -6,11 +6,13 @@ run() { cd "$scriptdir" || exit 1 local build_args="" - local service_name="invokeai-cpu" + local profile="" [[ -f ".env" ]] && - build_args=$(awk '$1 ~ /=[^$]/ {print "--build-arg " $0 " "}' .env) && - service_name="invokeai-$(awk -F '=' '/GPU_DRIVER/ {print $2}' .env)" + build_args=$(awk '$1 ~ /=[^$]/ && $0 !~ /^#/ {print "--build-arg " $0 " "}' .env) && + profile="$(awk -F '=' '/GPU_DRIVER/ {print $2}' .env)" + + local service_name="invokeai-$profile" printf "%s\n" "docker compose build args:" printf "%s\n" "$build_args" @@ -19,7 +21,7 @@ run() { unset build_args printf "%s\n" "starting service $service_name" - docker compose up -d $service_name + docker compose --profile "$profile" up -d "$service_name" docker compose logs -f } From 6ea09ba0b6101b5c0be09d4129c253c8d44f464e Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 14 Dec 2023 19:55:47 +1100 Subject: [PATCH 200/515] feat(ui): workflow menu tweaks - "Reset Workflow Editor" -> "New Workflow" - "New Workflow" gets nodes icon & is no longer danger coloured - When creating a new workflow, if the current workflow has unsaved changes, you get a dialog asking for confirmation. If the current workflow is saved, it immediately creates a new workflow. - "Download Workflow" -> "Save to File" - "Upload Workflow" -> "Load from File" - Moved "Load from File" up 1 in the menu --- invokeai/frontend/web/public/locales/en.json | 12 +++--- ...orMenuItem.tsx => NewWorkflowMenuItem.tsx} | 40 ++++++++++--------- .../WorkflowLibraryMenu.tsx | 4 +- 3 files changed, 30 insertions(+), 26 deletions(-) rename invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/{ResetWorkflowEditorMenuItem.tsx => NewWorkflowMenuItem.tsx} (63%) diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index ec257ee044..f5f3f434f5 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -950,9 +950,9 @@ "problemSettingTitle": "Problem Setting Title", "reloadNodeTemplates": "Reload Node Templates", "removeLinearView": "Remove from Linear View", - "resetWorkflow": "Reset Workflow Editor", - "resetWorkflowDesc": "Are you sure you want to reset the Workflow Editor?", - "resetWorkflowDesc2": "Resetting the Workflow Editor will clear all nodes, edges and workflow details. Saved workflows will not be affected.", + "newWorkflow": "New Workflow", + "newWorkflowDesc": "Create a new workflow?", + "newWorkflowDesc2": "Your current workflow has unsaved changes.", "scheduler": "Scheduler", "schedulerDescription": "TODO", "sDXLMainModelField": "SDXL Model", @@ -1634,10 +1634,10 @@ "userWorkflows": "My Workflows", "defaultWorkflows": "Default Workflows", "openWorkflow": "Open Workflow", - "uploadWorkflow": "Upload Workflow", + "uploadWorkflow": "Load from File", "deleteWorkflow": "Delete Workflow", "unnamedWorkflow": "Unnamed Workflow", - "downloadWorkflow": "Download Workflow", + "downloadWorkflow": "Save to File", "saveWorkflow": "Save Workflow", "saveWorkflowAs": "Save Workflow As", "savingWorkflow": "Saving Workflow...", @@ -1652,7 +1652,7 @@ "searchWorkflows": "Search Workflows", "clearWorkflowSearchFilter": "Clear Workflow Search Filter", "workflowName": "Workflow Name", - "workflowEditorReset": "Workflow Editor Reset", + "newWorkflowCreated": "New Workflow Created", "workflowEditorMenu": "Workflow Editor Menu", "workflowIsOpen": "Workflow is Open" }, diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem.tsx similarity index 63% rename from invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem.tsx rename to invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem.tsx index 5d7e58e198..c4497c5ddb 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem.tsx +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem.tsx @@ -11,44 +11,48 @@ import { Text, useDisclosure, } from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { nodeEditorReset } from 'features/nodes/store/nodesSlice'; import { addToast } from 'features/system/store/systemSlice'; import { makeToast } from 'features/system/util/makeToast'; import { memo, useCallback, useRef } from 'react'; import { useTranslation } from 'react-i18next'; -import { FaTrash } from 'react-icons/fa'; +import { FaCircleNodes } from 'react-icons/fa6'; -const ResetWorkflowEditorMenuItem = () => { +const NewWorkflowMenuItem = () => { const { t } = useTranslation(); const dispatch = useAppDispatch(); const { isOpen, onOpen, onClose } = useDisclosure(); const cancelRef = useRef(null); + const isTouched = useAppSelector((state) => state.workflow.isTouched); - const handleConfirmClear = useCallback(() => { + const handleNewWorkflow = useCallback(() => { dispatch(nodeEditorReset()); dispatch( addToast( makeToast({ - title: t('workflows.workflowEditorReset'), + title: t('workflows.newWorkflowCreated'), status: 'success', }) ) ); onClose(); - }, [dispatch, t, onClose]); + }, [dispatch, onClose, t]); + + const onClick = useCallback(() => { + if (!isTouched) { + handleNewWorkflow(); + return; + } + onOpen(); + }, [handleNewWorkflow, isTouched, onOpen]); return ( <> - } - sx={{ color: 'error.600', _dark: { color: 'error.300' } }} - onClick={onOpen} - > - {t('nodes.resetWorkflow')} + } onClick={onClick}> + {t('nodes.newWorkflow')} { - {t('nodes.resetWorkflow')} + {t('nodes.newWorkflow')} - {t('nodes.resetWorkflowDesc')} - {t('nodes.resetWorkflowDesc2')} + {t('nodes.newWorkflowDesc')} + {t('nodes.newWorkflowDesc2')} @@ -75,7 +79,7 @@ const ResetWorkflowEditorMenuItem = () => { - @@ -85,4 +89,4 @@ const ResetWorkflowEditorMenuItem = () => { ); }; -export default memo(ResetWorkflowEditorMenuItem); +export default memo(NewWorkflowMenuItem); diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx index a19b9cd6b5..c07bb8f5cd 100644 --- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx +++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx @@ -9,7 +9,7 @@ import IAIIconButton from 'common/components/IAIIconButton'; import { useGlobalMenuCloseTrigger } from 'common/hooks/useGlobalMenuCloseTrigger'; import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; import DownloadWorkflowMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem'; -import ResetWorkflowEditorMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/ResetWorkflowEditorMenuItem'; +import NewWorkflowMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem'; import SaveWorkflowAsMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem'; import SaveWorkflowMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem'; import SettingsMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem'; @@ -39,7 +39,7 @@ const WorkflowLibraryMenu = () => { {isWorkflowLibraryEnabled && } - + From 264ea6d94d3593bd9a67f9b30ab313e293e17319 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Thu, 14 Dec 2023 23:54:59 -0500 Subject: [PATCH 201/515] fix ruff errors --- invokeai/app/api/routers/model_records.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 8d029db422..934a7d15b3 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -45,7 +45,9 @@ async def list_model_records( base_models: Optional[List[BaseModelType]] = Query(default=None, description="Base models to include"), model_type: Optional[ModelType] = Query(default=None, description="The type of model to get"), model_name: Optional[str] = Query(default=None, description="Exact match on the name of the model"), - model_format: Optional[str] = Query(default=None, description="Exact match on the format of the model (e.g. 'diffusers')"), + model_format: Optional[str] = Query( + default=None, description="Exact match on the format of the model (e.g. 'diffusers')" + ), ) -> ModelsList: """Get a list of models.""" record_store = ApiDependencies.invoker.services.model_records @@ -53,10 +55,14 @@ async def list_model_records( if base_models: for base_model in base_models: found_models.extend( - record_store.search_by_attr(base_model=base_model, model_type=model_type, model_name=model_name, model_format=model_format) + record_store.search_by_attr( + base_model=base_model, model_type=model_type, model_name=model_name, model_format=model_format + ) ) else: - found_models.extend(record_store.search_by_attr(model_type=model_type, model_name=model_name, model_format=model_format)) + found_models.extend( + record_store.search_by_attr(model_type=model_type, model_name=model_name, model_format=model_format) + ) return ModelsList(models=found_models) From ac3cf48d7fb6d762d8b42e2b34c0d29e2fa48c6f Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Thu, 14 Dec 2023 22:52:50 -0500 Subject: [PATCH 202/515] make probe recognize lora format at https://civitai.com/models/224641 --- invokeai/backend/model_management/util.py | 6 +++++- invokeai/backend/model_manager/probe.py | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/invokeai/backend/model_management/util.py b/invokeai/backend/model_management/util.py index 6d70107c93..441467a4c7 100644 --- a/invokeai/backend/model_management/util.py +++ b/invokeai/backend/model_management/util.py @@ -9,7 +9,7 @@ def lora_token_vector_length(checkpoint: dict) -> int: :param checkpoint: The checkpoint """ - def _get_shape_1(key, tensor, checkpoint): + def _get_shape_1(key: str, tensor, checkpoint) -> int: lora_token_vector_length = None if "." not in key: @@ -57,6 +57,10 @@ def lora_token_vector_length(checkpoint: dict) -> int: for key, tensor in checkpoint.items(): if key.startswith("lora_unet_") and ("_attn2_to_k." in key or "_attn2_to_v." in key): lora_token_vector_length = _get_shape_1(key, tensor, checkpoint) + elif key.startswith("lora_unet_") and ( + "time_emb_proj.lora_down" in key + ): # recognizes format at https://civitai.com/models/224641 work + lora_token_vector_length = _get_shape_1(key, tensor, checkpoint) elif key.startswith("lora_te") and "_self_attn_" in key: tmp_length = _get_shape_1(key, tensor, checkpoint) if key.startswith("lora_te_"): diff --git a/invokeai/backend/model_manager/probe.py b/invokeai/backend/model_manager/probe.py index 3ba62fa6ff..25120e2e33 100644 --- a/invokeai/backend/model_manager/probe.py +++ b/invokeai/backend/model_manager/probe.py @@ -400,6 +400,8 @@ class LoRACheckpointProbe(CheckpointProbeBase): return BaseModelType.StableDiffusion1 elif token_vector_length == 1024: return BaseModelType.StableDiffusion2 + elif token_vector_length == 1280: + return BaseModelType.StableDiffusionXL # recognizes format at https://civitai.com/models/224641 work elif token_vector_length == 2048: return BaseModelType.StableDiffusionXL else: From 212dbaf9a2b3b3cf6d5bbf7204feeafacb40c56f Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Thu, 14 Dec 2023 23:04:13 -0500 Subject: [PATCH 203/515] fix comment --- invokeai/backend/model_management/util.py | 2 +- invokeai/backend/model_manager/probe.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/invokeai/backend/model_management/util.py b/invokeai/backend/model_management/util.py index 441467a4c7..f4737d9f0b 100644 --- a/invokeai/backend/model_management/util.py +++ b/invokeai/backend/model_management/util.py @@ -59,7 +59,7 @@ def lora_token_vector_length(checkpoint: dict) -> int: lora_token_vector_length = _get_shape_1(key, tensor, checkpoint) elif key.startswith("lora_unet_") and ( "time_emb_proj.lora_down" in key - ): # recognizes format at https://civitai.com/models/224641 work + ): # recognizes format at https://civitai.com/models/224641 lora_token_vector_length = _get_shape_1(key, tensor, checkpoint) elif key.startswith("lora_te") and "_self_attn_" in key: tmp_length = _get_shape_1(key, tensor, checkpoint) diff --git a/invokeai/backend/model_manager/probe.py b/invokeai/backend/model_manager/probe.py index 25120e2e33..64eefb774e 100644 --- a/invokeai/backend/model_manager/probe.py +++ b/invokeai/backend/model_manager/probe.py @@ -401,7 +401,7 @@ class LoRACheckpointProbe(CheckpointProbeBase): elif token_vector_length == 1024: return BaseModelType.StableDiffusion2 elif token_vector_length == 1280: - return BaseModelType.StableDiffusionXL # recognizes format at https://civitai.com/models/224641 work + return BaseModelType.StableDiffusionXL # recognizes format at https://civitai.com/models/224641 elif token_vector_length == 2048: return BaseModelType.StableDiffusionXL else: From b2a8c45553639650eeccd212042eae6178cd6e7a Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Fri, 15 Dec 2023 23:56:31 +1100 Subject: [PATCH 204/515] fix: build frontend in pypi-release workflow This was missing, resulting in the 3.5.0rc1 having no frontend. --- .github/workflows/pypi-release.yml | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 5b7d2cd2fa..452454b072 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -15,19 +15,35 @@ jobs: TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} TWINE_NON_INTERACTIVE: 1 steps: - - name: checkout sources - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v4 - - name: install deps + - name: Setup Node 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + + - name: Install frontend dependencies + run: pnpm install --prefer-frozen-lockfile + + - name: Build frontend + run: pnpm run build + + - name: Install python dependencies run: pip install --upgrade build twine - - name: build package + - name: Build package run: python3 -m build - - name: check distribution + - name: Check distribution run: twine check dist/* - - name: check PyPI versions + - name: Check PyPI versions if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') run: | pip install --upgrade requests @@ -36,6 +52,6 @@ jobs: EXISTS=scripts.pypi_helper.local_on_pypi(); \ print(f'PACKAGE_EXISTS={EXISTS}')" >> $GITHUB_ENV - - name: upload package + - name: Upload package if: env.PACKAGE_EXISTS == 'False' && env.TWINE_PASSWORD != '' run: twine upload dist/* From 1615df3aa160296d0ba6e54d8082efe3a7582622 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 16 Dec 2023 00:32:31 +1100 Subject: [PATCH 205/515] fix: use node 18, set working directory - Node 20 has a problem with `pnpm`; set it to Node 18 - Set the working directory for the frontend commands --- .github/workflows/lint-frontend.yml | 6 +++--- .github/workflows/pypi-release.yml | 8 +++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint-frontend.yml b/.github/workflows/lint-frontend.yml index 3b354d1003..a4e1bba428 100644 --- a/.github/workflows/lint-frontend.yml +++ b/.github/workflows/lint-frontend.yml @@ -21,16 +21,16 @@ jobs: if: github.event.pull_request.draft == false runs-on: ubuntu-22.04 steps: - - name: Setup Node 20 + - name: Setup Node 18 uses: actions/setup-node@v4 with: - node-version: '20' + node-version: '18' - name: Checkout uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v2 with: - version: 8 + version: '8.12.1' - name: Install dependencies run: 'pnpm install --prefer-frozen-lockfile' - name: Typescript diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 452454b072..32648cfc57 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -18,21 +18,23 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup Node 20 + - name: Setup Node 18 uses: actions/setup-node@v4 with: - node-version: '20' + node-version: '18' - name: Setup pnpm uses: pnpm/action-setup@v2 with: - version: 8 + version: '8.12.1' - name: Install frontend dependencies run: pnpm install --prefer-frozen-lockfile + working-directory: invokeai/frontend/web - name: Build frontend run: pnpm run build + working-directory: invokeai/frontend/web - name: Install python dependencies run: pip install --upgrade build twine From 3f970c8326244d653a0b0acaf9c351a969593f9f Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 15 Dec 2023 11:27:21 -0500 Subject: [PATCH 206/515] Don't copy extraneous paths into installer .zip --- installer/create_installer.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index ed8cbb0d0a..722fe5771a 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -91,9 +91,11 @@ rm -rf InvokeAI-Installer # copy content mkdir InvokeAI-Installer -for f in templates lib *.txt *.reg; do +for f in templates *.txt *.reg; do cp -r ${f} InvokeAI-Installer/ done +mkdir InvokeAI-Installer/lib +cp lib/*.py InvokeAI-Installer/lib # Move the wheel mv dist/*.whl InvokeAI-Installer/lib/ From df9a903a509e7a9d3243f983e3645d673095ef39 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 16 Dec 2023 11:51:34 +1100 Subject: [PATCH 207/515] fix(ui): do not cache VAE decode on linear The VAE decode on linear graphs was getting cached. This caused some unexpected behaviour around image outputs. For example, say you ran the exact same graph twice. The first time, you get an image written to disk and added to gallery. The second time, the VAE decode is cached and no image file is created. But, the UI still gets the graph complete event and selects the first image in the gallery. The second run does not add an image to the gallery. There are probbably edge cases related to this - the UI does not expect this to happen. I'm not sure how to handle it any better in the UI. The solution is to not cache VAE decode on the linear graphs, ever. If you run a graph twice in linear, you expect two images. This simple change disables the node cache for terminal VAE decode nodes in all linear graphs, ensuring you always get images. If they graph was fully cached, all images after the first will be created very quickly of course. --- .../features/nodes/util/graph/buildCanvasImageToImageGraph.ts | 3 +++ .../src/features/nodes/util/graph/buildCanvasInpaintGraph.ts | 1 + .../src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts | 1 + .../nodes/util/graph/buildCanvasSDXLImageToImageGraph.ts | 2 ++ .../features/nodes/util/graph/buildCanvasSDXLInpaintGraph.ts | 1 + .../features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts | 1 + .../nodes/util/graph/buildCanvasSDXLTextToImageGraph.ts | 2 ++ .../features/nodes/util/graph/buildCanvasTextToImageGraph.ts | 2 ++ .../features/nodes/util/graph/buildLinearImageToImageGraph.ts | 1 + .../nodes/util/graph/buildLinearSDXLImageToImageGraph.ts | 1 + .../nodes/util/graph/buildLinearSDXLTextToImageGraph.ts | 1 + .../features/nodes/util/graph/buildLinearTextToImageGraph.ts | 1 + 12 files changed, 17 insertions(+) diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasImageToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasImageToImageGraph.ts index 978e6bfaaa..f8d29ffa1d 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasImageToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasImageToImageGraph.ts @@ -144,6 +144,7 @@ export const buildCanvasImageToImageGraph = ( type: 'l2i', id: CANVAS_OUTPUT, is_intermediate, + use_cache: false, }, }, edges: [ @@ -255,6 +256,7 @@ export const buildCanvasImageToImageGraph = ( is_intermediate, width: width, height: height, + use_cache: false, }; graph.edges.push( @@ -295,6 +297,7 @@ export const buildCanvasImageToImageGraph = ( id: CANVAS_OUTPUT, is_intermediate, fp32, + use_cache: false, }; (graph.nodes[IMAGE_TO_LATENTS] as ImageToLatentsInvocation).image = diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasInpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasInpaintGraph.ts index 6253ce1f18..a05c46ad09 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasInpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasInpaintGraph.ts @@ -191,6 +191,7 @@ export const buildCanvasInpaintGraph = ( id: CANVAS_OUTPUT, is_intermediate, reference: canvasInitImage, + use_cache: false, }, }, edges: [ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts index 11573c21c2..dcbf563cf9 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts @@ -199,6 +199,7 @@ export const buildCanvasOutpaintGraph = ( type: 'color_correct', id: CANVAS_OUTPUT, is_intermediate, + use_cache: false, }, }, edges: [ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLImageToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLImageToImageGraph.ts index 73c03ee98f..b023295646 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLImageToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLImageToImageGraph.ts @@ -266,6 +266,7 @@ export const buildCanvasSDXLImageToImageGraph = ( is_intermediate, width: width, height: height, + use_cache: false, }; graph.edges.push( @@ -306,6 +307,7 @@ export const buildCanvasSDXLImageToImageGraph = ( id: CANVAS_OUTPUT, is_intermediate, fp32, + use_cache: false, }; (graph.nodes[IMAGE_TO_LATENTS] as ImageToLatentsInvocation).image = diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLInpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLInpaintGraph.ts index de1dd0dfd2..10eecde0d9 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLInpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLInpaintGraph.ts @@ -196,6 +196,7 @@ export const buildCanvasSDXLInpaintGraph = ( id: CANVAS_OUTPUT, is_intermediate, reference: canvasInitImage, + use_cache: false, }, }, edges: [ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts index 2f8b4fd653..7c75bea2be 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts @@ -204,6 +204,7 @@ export const buildCanvasSDXLOutpaintGraph = ( type: 'color_correct', id: CANVAS_OUTPUT, is_intermediate, + use_cache: false, }, }, edges: [ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLTextToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLTextToImageGraph.ts index 3ddff5a9a1..e91d556476 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLTextToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLTextToImageGraph.ts @@ -258,6 +258,7 @@ export const buildCanvasSDXLTextToImageGraph = ( is_intermediate, width: width, height: height, + use_cache: false, }; graph.edges.push( @@ -288,6 +289,7 @@ export const buildCanvasSDXLTextToImageGraph = ( id: CANVAS_OUTPUT, is_intermediate, fp32, + use_cache: false, }; graph.edges.push({ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasTextToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasTextToImageGraph.ts index 95e5763449..933365ce23 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasTextToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasTextToImageGraph.ts @@ -246,6 +246,7 @@ export const buildCanvasTextToImageGraph = ( is_intermediate, width: width, height: height, + use_cache: false, }; graph.edges.push( @@ -276,6 +277,7 @@ export const buildCanvasTextToImageGraph = ( id: CANVAS_OUTPUT, is_intermediate, fp32, + use_cache: false, }; graph.edges.push({ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearImageToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearImageToImageGraph.ts index 454c9f31a0..6b7b8f05c6 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearImageToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearImageToImageGraph.ts @@ -143,6 +143,7 @@ export const buildLinearImageToImageGraph = ( // }, fp32, is_intermediate, + use_cache: false, }, }, edges: [ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLImageToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLImageToImageGraph.ts index 6b1a55f7d0..d589116c17 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLImageToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLImageToImageGraph.ts @@ -154,6 +154,7 @@ export const buildLinearSDXLImageToImageGraph = ( // }, fp32, is_intermediate, + use_cache: false, }, }, edges: [ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLTextToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLTextToImageGraph.ts index bf01facf64..238a9054b1 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLTextToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearSDXLTextToImageGraph.ts @@ -127,6 +127,7 @@ export const buildLinearSDXLTextToImageGraph = ( id: LATENTS_TO_IMAGE, fp32, is_intermediate, + use_cache: false, }, }, edges: [ diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearTextToImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearTextToImageGraph.ts index aea14c2fe4..487157c869 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearTextToImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildLinearTextToImageGraph.ts @@ -146,6 +146,7 @@ export const buildLinearTextToImageGraph = ( id: LATENTS_TO_IMAGE, fp32, is_intermediate, + use_cache: false, }, }, edges: [ From 4af1695c601d2d06da967c3f501969d062715895 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 14 Dec 2023 14:31:09 +0100 Subject: [PATCH 208/515] translationBot(ui): update translation files Updated by "Cleanup translation files" hook in Weblate. Co-authored-by: Hosted Weblate Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/es.json | 3 --- invokeai/frontend/web/public/locales/it.json | 4 ---- invokeai/frontend/web/public/locales/nl.json | 3 --- invokeai/frontend/web/public/locales/ru.json | 4 ---- invokeai/frontend/web/public/locales/zh_CN.json | 4 ---- 5 files changed, 18 deletions(-) diff --git a/invokeai/frontend/web/public/locales/es.json b/invokeai/frontend/web/public/locales/es.json index 20c15f2698..4ce0072517 100644 --- a/invokeai/frontend/web/public/locales/es.json +++ b/invokeai/frontend/web/public/locales/es.json @@ -727,9 +727,6 @@ "showMinimapnodes": "Mostrar el minimapa", "reloadNodeTemplates": "Recargar las plantillas de nodos", "loadWorkflow": "Cargar el flujo de trabajo", - "resetWorkflow": "Reiniciar e flujo de trabajo", - "resetWorkflowDesc": "¿Está seguro de que deseas restablecer este flujo de trabajo?", - "resetWorkflowDesc2": "Al reiniciar el flujo de trabajo se borrarán todos los nodos, aristas y detalles del flujo de trabajo.", "downloadWorkflow": "Descargar el flujo de trabajo en un archivo JSON" } } diff --git a/invokeai/frontend/web/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json index c2eebedf77..b816858bd8 100644 --- a/invokeai/frontend/web/public/locales/it.json +++ b/invokeai/frontend/web/public/locales/it.json @@ -898,11 +898,8 @@ "zoomInNodes": "Ingrandire", "fitViewportNodes": "Adatta vista", "showGraphNodes": "Mostra sovrapposizione grafico", - "resetWorkflowDesc2": "Il ripristino dell'editor del flusso di lavoro cancellerà tutti i nodi, le connessioni e i dettagli del flusso di lavoro. I flussi di lavoro salvati non saranno interessati.", "reloadNodeTemplates": "Ricarica i modelli di nodo", "loadWorkflow": "Importa flusso di lavoro JSON", - "resetWorkflow": "Reimposta l'editor del flusso di lavoro", - "resetWorkflowDesc": "Sei sicuro di voler reimpostare l'editor del flusso di lavoro?", "downloadWorkflow": "Esporta flusso di lavoro JSON", "scheduler": "Campionatore", "addNode": "Aggiungi nodo", @@ -1619,7 +1616,6 @@ "saveWorkflow": "Salva flusso di lavoro", "openWorkflow": "Apri flusso di lavoro", "clearWorkflowSearchFilter": "Cancella il filtro di ricerca del flusso di lavoro", - "workflowEditorReset": "Reimpostazione dell'editor del flusso di lavoro", "workflowLibrary": "Libreria", "noRecentWorkflows": "Nessun flusso di lavoro recente", "workflowSaved": "Flusso di lavoro salvato", diff --git a/invokeai/frontend/web/public/locales/nl.json b/invokeai/frontend/web/public/locales/nl.json index dfdfb54bd0..6be48de918 100644 --- a/invokeai/frontend/web/public/locales/nl.json +++ b/invokeai/frontend/web/public/locales/nl.json @@ -844,9 +844,6 @@ "hideLegendNodes": "Typelegende veld verbergen", "reloadNodeTemplates": "Herlaad knooppuntsjablonen", "loadWorkflow": "Laad werkstroom", - "resetWorkflow": "Herstel werkstroom", - "resetWorkflowDesc": "Weet je zeker dat je deze werkstroom wilt herstellen?", - "resetWorkflowDesc2": "Herstel van een werkstroom haalt alle knooppunten, randen en werkstroomdetails weg.", "downloadWorkflow": "Download JSON van werkstroom", "booleanPolymorphicDescription": "Een verzameling Booleanse waarden.", "scheduler": "Planner", diff --git a/invokeai/frontend/web/public/locales/ru.json b/invokeai/frontend/web/public/locales/ru.json index 901d0520d5..665a821eb1 100644 --- a/invokeai/frontend/web/public/locales/ru.json +++ b/invokeai/frontend/web/public/locales/ru.json @@ -909,9 +909,6 @@ "hideLegendNodes": "Скрыть тип поля", "showMinimapnodes": "Показать миникарту", "loadWorkflow": "Загрузить рабочий процесс", - "resetWorkflowDesc2": "Сброс рабочего процесса очистит все узлы, ребра и детали рабочего процесса.", - "resetWorkflow": "Сбросить рабочий процесс", - "resetWorkflowDesc": "Вы уверены, что хотите сбросить этот рабочий процесс?", "reloadNodeTemplates": "Перезагрузить шаблоны узлов", "downloadWorkflow": "Скачать JSON рабочего процесса", "booleanPolymorphicDescription": "Коллекция логических значений.", @@ -1599,7 +1596,6 @@ "saveWorkflow": "Сохранить рабочий процесс", "openWorkflow": "Открытый рабочий процесс", "clearWorkflowSearchFilter": "Очистить фильтр поиска рабочих процессов", - "workflowEditorReset": "Сброс редактора рабочих процессов", "workflowLibrary": "Библиотека", "downloadWorkflow": "Скачать рабочий процесс", "noRecentWorkflows": "Нет недавних рабочих процессов", diff --git a/invokeai/frontend/web/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json index b29cf037d3..b0151b8e76 100644 --- a/invokeai/frontend/web/public/locales/zh_CN.json +++ b/invokeai/frontend/web/public/locales/zh_CN.json @@ -892,11 +892,8 @@ }, "nodes": { "zoomInNodes": "放大", - "resetWorkflowDesc": "是否确定要重置工作流编辑器?", - "resetWorkflow": "重置工作流编辑器", "loadWorkflow": "加载工作流", "zoomOutNodes": "缩小", - "resetWorkflowDesc2": "重置工作流编辑器将清除所有节点、边际和节点图详情。不影响已保存的工作流。", "reloadNodeTemplates": "重载节点模板", "hideGraphNodes": "隐藏节点图信息", "fitViewportNodes": "自适应视图", @@ -1637,7 +1634,6 @@ "saveWorkflow": "保存工作流", "openWorkflow": "打开工作流", "clearWorkflowSearchFilter": "清除工作流检索过滤器", - "workflowEditorReset": "工作流编辑器重置", "workflowLibrary": "工作流库", "downloadWorkflow": "下载工作流", "noRecentWorkflows": "无最近工作流", From 0f1c5f382a681552d7903d016bcddb9a5f15e26c Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 16 Dec 2023 19:39:29 +1100 Subject: [PATCH 209/515] feat(installer): delete frontend build after creating installer This prevents an empty `dist/` from breaking the app on startup. --- installer/create_installer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/create_installer.sh b/installer/create_installer.sh index 722fe5771a..b32f65d9bf 100755 --- a/installer/create_installer.sh +++ b/installer/create_installer.sh @@ -113,6 +113,6 @@ cp WinLongPathsEnabled.reg InvokeAI-Installer/ zip -r InvokeAI-installer-$VERSION.zip InvokeAI-Installer # clean up -rm -rf InvokeAI-Installer tmp dist +rm -rf InvokeAI-Installer tmp dist ../invokeai/frontend/web/dist/ exit 0 From 5bf61382a40923cc013edb1d4b94518517b25715 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 16 Dec 2023 20:02:09 +1100 Subject: [PATCH 210/515] feat: add python dist as release artifact, as input to enable publish to pypi - The release workflow never runs automatically. It must be manually kicked off. - The release workflow has an input. When running it from the GH actions UI, you will see a "Publish build on PyPi" prompt. If this value is "true", the workflow will upload the build to PyPi, releasing it. If this is anything else (e.g. "false", the default), the workflow will build but not upload to PyPi. - The `dist/` folder (where the python package is built) is uploaded as a workflow artifact as a zip file. This can be downloaded and inspected. This allows "dry" runs of the workflow. - The workflow job and some steps have been renamed to clarify what they do --- .github/workflows/pypi-release.yml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pypi-release.yml b/.github/workflows/pypi-release.yml index 32648cfc57..162cbe3427 100644 --- a/.github/workflows/pypi-release.yml +++ b/.github/workflows/pypi-release.yml @@ -1,13 +1,15 @@ name: PyPI Release on: - push: - paths: - - 'invokeai/version/invokeai_version.py' workflow_dispatch: + inputs: + publish_package: + description: 'Publish build on PyPi? [true/false]' + required: true + default: 'false' jobs: - release: + build-and-release: if: github.repository == 'invoke-ai/InvokeAI' runs-on: ubuntu-22.04 env: @@ -39,9 +41,15 @@ jobs: - name: Install python dependencies run: pip install --upgrade build twine - - name: Build package + - name: Build python package run: python3 -m build + - name: Upload build as workflow artifact + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist + - name: Check distribution run: twine check dist/* @@ -54,6 +62,6 @@ jobs: EXISTS=scripts.pypi_helper.local_on_pypi(); \ print(f'PACKAGE_EXISTS={EXISTS}')" >> $GITHUB_ENV - - name: Upload package - if: env.PACKAGE_EXISTS == 'False' && env.TWINE_PASSWORD != '' + - name: Publish build on PyPi + if: env.PACKAGE_EXISTS == 'False' && env.TWINE_PASSWORD != '' && github.event.inputs.publish_package == 'true' run: twine upload dist/* From 96a717c4ba4e88fc9fb25adfb1ae0ccd31dbf5ef Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Sun, 17 Dec 2023 15:10:50 +0000 Subject: [PATCH 211/515] In CalculateImageTilesEvenSplitInvocation to have overlap_fraction becomes just overlap. This is now in pixels rather than as a fraction of the tile size. Update calc_tiles_even_split() with the same change. Ensuring Overlap is within allowed size Update even_split tests --- invokeai/app/invocations/tiles.py | 12 ++-- invokeai/backend/tiles/tiles.py | 44 +++++++------- tests/backend/tiles/test_tiles.py | 96 +++++++++++++++---------------- 3 files changed, 75 insertions(+), 77 deletions(-) diff --git a/invokeai/app/invocations/tiles.py b/invokeai/app/invocations/tiles.py index cbf63ab169..e51f891a8d 100644 --- a/invokeai/app/invocations/tiles.py +++ b/invokeai/app/invocations/tiles.py @@ -77,7 +77,7 @@ class CalculateImageTilesInvocation(BaseInvocation): title="Calculate Image Tiles Even Split", tags=["tiles"], category="tiles", - version="1.0.0", + version="1.1.0", classification=Classification.Beta, ) class CalculateImageTilesEvenSplitInvocation(BaseInvocation): @@ -97,11 +97,11 @@ class CalculateImageTilesEvenSplitInvocation(BaseInvocation): ge=1, description="Number of tiles to divide image into on the y axis", ) - overlap_fraction: float = InputField( - default=0.25, + overlap: int = InputField( + default=128, ge=0, - lt=1, - description="Overlap between adjacent tiles as a fraction of the tile's dimensions (0-1)", + multiple_of=8, + description="The overlap, in pixels, between adjacent tiles.", ) def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput: @@ -110,7 +110,7 @@ class CalculateImageTilesEvenSplitInvocation(BaseInvocation): image_width=self.image_width, num_tiles_x=self.num_tiles_x, num_tiles_y=self.num_tiles_y, - overlap_fraction=self.overlap_fraction, + overlap=self.overlap, ) return CalculateImageTilesOutput(tiles=tiles) diff --git a/invokeai/backend/tiles/tiles.py b/invokeai/backend/tiles/tiles.py index 11d0c86c5c..3c400fc87c 100644 --- a/invokeai/backend/tiles/tiles.py +++ b/invokeai/backend/tiles/tiles.py @@ -102,7 +102,7 @@ def calc_tiles_with_overlap( def calc_tiles_even_split( - image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap_fraction: float = 0 + image_height: int, image_width: int, num_tiles_x: int, num_tiles_y: int, overlap: int = 0 ) -> list[Tile]: """Calculate the tile coordinates for a given image shape with the number of tiles requested. @@ -111,31 +111,35 @@ def calc_tiles_even_split( image_width (int): The image width in px. num_x_tiles (int): The number of tile to split the image into on the X-axis. num_y_tiles (int): The number of tile to split the image into on the Y-axis. - overlap_fraction (float, optional): The target overlap as fraction of the tiles size. Defaults to 0. + overlap (int, optional): The overlap between adjacent tiles in pixels. Defaults to 0. Returns: list[Tile]: A list of tiles that cover the image shape. Ordered from left-to-right, top-to-bottom. """ - - # Ensure tile size is divisible by 8 + # Ensure the image is divisible by LATENT_SCALE_FACTOR if image_width % LATENT_SCALE_FACTOR != 0 or image_height % LATENT_SCALE_FACTOR != 0: raise ValueError(f"image size (({image_width}, {image_height})) must be divisible by {LATENT_SCALE_FACTOR}") - # Calculate the overlap size based on the percentage and adjust it to be divisible by 8 (rounding up) - overlap_x = LATENT_SCALE_FACTOR * math.ceil( - int((image_width / num_tiles_x) * overlap_fraction) / LATENT_SCALE_FACTOR - ) - overlap_y = LATENT_SCALE_FACTOR * math.ceil( - int((image_height / num_tiles_y) * overlap_fraction) / LATENT_SCALE_FACTOR - ) - # Calculate the tile size based on the number of tiles and overlap, and ensure it's divisible by 8 (rounding down) - tile_size_x = LATENT_SCALE_FACTOR * math.floor( - ((image_width + overlap_x * (num_tiles_x - 1)) // num_tiles_x) / LATENT_SCALE_FACTOR - ) - tile_size_y = LATENT_SCALE_FACTOR * math.floor( - ((image_height + overlap_y * (num_tiles_y - 1)) // num_tiles_y) / LATENT_SCALE_FACTOR - ) + if num_tiles_x > 1: + # ensure the overlap is not more than the maximum overlap if we only have 1 tile then we dont care about overlap + assert overlap <= image_width - (LATENT_SCALE_FACTOR * (num_tiles_x - 1)) + tile_size_x = LATENT_SCALE_FACTOR * math.floor( + ((image_width + overlap * (num_tiles_x - 1)) // num_tiles_x) / LATENT_SCALE_FACTOR + ) + assert overlap < tile_size_x + else: + tile_size_x = image_width + + if num_tiles_y > 1: + # ensure the overlap is not more than the maximum overlap if we only have 1 tile then we dont care about overlap + assert overlap <= image_height - (LATENT_SCALE_FACTOR * (num_tiles_y - 1)) + tile_size_y = LATENT_SCALE_FACTOR * math.floor( + ((image_height + overlap * (num_tiles_y - 1)) // num_tiles_y) / LATENT_SCALE_FACTOR + ) + assert overlap < tile_size_y + else: + tile_size_y = image_height # tiles[y * num_tiles_x + x] is the tile for the y'th row, x'th column. tiles: list[Tile] = [] @@ -143,7 +147,7 @@ def calc_tiles_even_split( # Calculate tile coordinates. (Ignore overlap values for now.) for tile_idx_y in range(num_tiles_y): # Calculate the top and bottom of the row - top = tile_idx_y * (tile_size_y - overlap_y) + top = tile_idx_y * (tile_size_y - overlap) bottom = min(top + tile_size_y, image_height) # For the last row adjust bottom to be the height of the image if tile_idx_y == num_tiles_y - 1: @@ -151,7 +155,7 @@ def calc_tiles_even_split( for tile_idx_x in range(num_tiles_x): # Calculate the left & right coordinate of each tile - left = tile_idx_x * (tile_size_x - overlap_x) + left = tile_idx_x * (tile_size_x - overlap) right = min(left + tile_size_x, image_width) # For the last tile in the row adjust right to be the width of the image if tile_idx_x == num_tiles_x - 1: diff --git a/tests/backend/tiles/test_tiles.py b/tests/backend/tiles/test_tiles.py index 114ff4a5e0..32c4bd34c8 100644 --- a/tests/backend/tiles/test_tiles.py +++ b/tests/backend/tiles/test_tiles.py @@ -305,9 +305,7 @@ def test_calc_tiles_min_overlap_input_validation( def test_calc_tiles_even_split_single_tile(): """Test calc_tiles_even_split() behavior when a single tile covers the image.""" - tiles = calc_tiles_even_split( - image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap_fraction=0.25 - ) + tiles = calc_tiles_even_split(image_height=512, image_width=1024, num_tiles_x=1, num_tiles_y=1, overlap=64) expected_tiles = [ Tile( @@ -322,36 +320,34 @@ def test_calc_tiles_even_split_single_tile(): def test_calc_tiles_even_split_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image is evenly covered by multiple tiles.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split( - image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap_fraction=0.25 - ) + tiles = calc_tiles_even_split(image_height=576, image_width=1600, num_tiles_x=3, num_tiles_y=2, overlap=64) expected_tiles = [ # Row 0 Tile( - coords=TBLR(top=0, bottom=320, left=0, right=624), - overlap=TBLR(top=0, bottom=72, left=0, right=136), + coords=TBLR(top=0, bottom=320, left=0, right=576), + overlap=TBLR(top=0, bottom=64, left=0, right=64), ), Tile( - coords=TBLR(top=0, bottom=320, left=488, right=1112), - overlap=TBLR(top=0, bottom=72, left=136, right=136), + coords=TBLR(top=0, bottom=320, left=512, right=1088), + overlap=TBLR(top=0, bottom=64, left=64, right=64), ), Tile( - coords=TBLR(top=0, bottom=320, left=976, right=1600), - overlap=TBLR(top=0, bottom=72, left=136, right=0), + coords=TBLR(top=0, bottom=320, left=1024, right=1600), + overlap=TBLR(top=0, bottom=64, left=64, right=0), ), # Row 1 Tile( - coords=TBLR(top=248, bottom=576, left=0, right=624), - overlap=TBLR(top=72, bottom=0, left=0, right=136), + coords=TBLR(top=256, bottom=576, left=0, right=576), + overlap=TBLR(top=64, bottom=0, left=0, right=64), ), Tile( - coords=TBLR(top=248, bottom=576, left=488, right=1112), - overlap=TBLR(top=72, bottom=0, left=136, right=136), + coords=TBLR(top=256, bottom=576, left=512, right=1088), + overlap=TBLR(top=64, bottom=0, left=64, right=64), ), Tile( - coords=TBLR(top=248, bottom=576, left=976, right=1600), - overlap=TBLR(top=72, bottom=0, left=136, right=0), + coords=TBLR(top=256, bottom=576, left=1024, right=1600), + overlap=TBLR(top=64, bottom=0, left=64, right=0), ), ] assert tiles == expected_tiles @@ -360,36 +356,34 @@ def test_calc_tiles_even_split_evenly_divisible(): def test_calc_tiles_even_split_not_evenly_divisible(): """Test calc_tiles_even_split() behavior when the image requires 'uneven' overlaps to achieve proper coverage.""" # Parameters mimic roughly the same output as the original tile generations of the same test name - tiles = calc_tiles_even_split( - image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap_fraction=0.25 - ) + tiles = calc_tiles_even_split(image_height=400, image_width=1200, num_tiles_x=3, num_tiles_y=2, overlap=64) expected_tiles = [ # Row 0 Tile( - coords=TBLR(top=0, bottom=224, left=0, right=464), - overlap=TBLR(top=0, bottom=56, left=0, right=104), + coords=TBLR(top=0, bottom=232, left=0, right=440), + overlap=TBLR(top=0, bottom=64, left=0, right=64), ), Tile( - coords=TBLR(top=0, bottom=224, left=360, right=824), - overlap=TBLR(top=0, bottom=56, left=104, right=104), + coords=TBLR(top=0, bottom=232, left=376, right=816), + overlap=TBLR(top=0, bottom=64, left=64, right=64), ), Tile( - coords=TBLR(top=0, bottom=224, left=720, right=1200), - overlap=TBLR(top=0, bottom=56, left=104, right=0), + coords=TBLR(top=0, bottom=232, left=752, right=1200), + overlap=TBLR(top=0, bottom=64, left=64, right=0), ), # Row 1 Tile( - coords=TBLR(top=168, bottom=400, left=0, right=464), - overlap=TBLR(top=56, bottom=0, left=0, right=104), + coords=TBLR(top=168, bottom=400, left=0, right=440), + overlap=TBLR(top=64, bottom=0, left=0, right=64), ), Tile( - coords=TBLR(top=168, bottom=400, left=360, right=824), - overlap=TBLR(top=56, bottom=0, left=104, right=104), + coords=TBLR(top=168, bottom=400, left=376, right=816), + overlap=TBLR(top=64, bottom=0, left=64, right=64), ), Tile( - coords=TBLR(top=168, bottom=400, left=720, right=1200), - overlap=TBLR(top=56, bottom=0, left=104, right=0), + coords=TBLR(top=168, bottom=400, left=752, right=1200), + overlap=TBLR(top=64, bottom=0, left=64, right=0), ), ] @@ -399,28 +393,26 @@ def test_calc_tiles_even_split_not_evenly_divisible(): def test_calc_tiles_even_split_difficult_size(): """Test calc_tiles_even_split() behavior when the image is a difficult size to spilt evenly and keep div8.""" # Parameters are a difficult size for other tile gen routines to calculate - tiles = calc_tiles_even_split( - image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap_fraction=0.25 - ) + tiles = calc_tiles_even_split(image_height=1000, image_width=1000, num_tiles_x=2, num_tiles_y=2, overlap=64) expected_tiles = [ # Row 0 Tile( - coords=TBLR(top=0, bottom=560, left=0, right=560), - overlap=TBLR(top=0, bottom=128, left=0, right=128), + coords=TBLR(top=0, bottom=528, left=0, right=528), + overlap=TBLR(top=0, bottom=64, left=0, right=64), ), Tile( - coords=TBLR(top=0, bottom=560, left=432, right=1000), - overlap=TBLR(top=0, bottom=128, left=128, right=0), + coords=TBLR(top=0, bottom=528, left=464, right=1000), + overlap=TBLR(top=0, bottom=64, left=64, right=0), ), # Row 1 Tile( - coords=TBLR(top=432, bottom=1000, left=0, right=560), - overlap=TBLR(top=128, bottom=0, left=0, right=128), + coords=TBLR(top=464, bottom=1000, left=0, right=528), + overlap=TBLR(top=64, bottom=0, left=0, right=64), ), Tile( - coords=TBLR(top=432, bottom=1000, left=432, right=1000), - overlap=TBLR(top=128, bottom=0, left=128, right=0), + coords=TBLR(top=464, bottom=1000, left=464, right=1000), + overlap=TBLR(top=64, bottom=0, left=64, right=0), ), ] @@ -428,11 +420,13 @@ def test_calc_tiles_even_split_difficult_size(): @pytest.mark.parametrize( - ["image_height", "image_width", "num_tiles_x", "num_tiles_y", "overlap_fraction", "raises"], + ["image_height", "image_width", "num_tiles_x", "num_tiles_y", "overlap", "raises"], [ - (128, 128, 1, 1, 0.25, False), # OK + (128, 128, 1, 1, 127, False), # OK (128, 128, 1, 1, 0, False), # OK - (128, 128, 2, 1, 0, False), # OK + (128, 128, 2, 2, 0, False), # OK + (128, 128, 2, 1, 120, True), # overlap equals tile_height. + (128, 128, 1, 2, 120, True), # overlap equals tile_width. (127, 127, 1, 1, 0, True), # image size must be dividable by 8 ], ) @@ -441,15 +435,15 @@ def test_calc_tiles_even_split_input_validation( image_width: int, num_tiles_x: int, num_tiles_y: int, - overlap_fraction: float, + overlap: int, raises: bool, ): """Test that calc_tiles_even_split() raises an exception if the inputs are invalid.""" if raises: - with pytest.raises(ValueError): - calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap_fraction) + with pytest.raises((AssertionError, ValueError)): + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) else: - calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap_fraction) + calc_tiles_even_split(image_height, image_width, num_tiles_x, num_tiles_y, overlap) ############################################# From 74ea592d022ce0cd2c0f2e3fb0e0e475959cedbb Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 17 Dec 2023 14:16:45 -0500 Subject: [PATCH 212/515] tag model manager v2 api as unstable --- invokeai/app/api/routers/model_records.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/api/routers/model_records.py b/invokeai/app/api/routers/model_records.py index 934a7d15b3..f71f4433f4 100644 --- a/invokeai/app/api/routers/model_records.py +++ b/invokeai/app/api/routers/model_records.py @@ -26,7 +26,7 @@ from invokeai.backend.model_manager.config import ( from ..dependencies import ApiDependencies -model_records_router = APIRouter(prefix="/v1/model/record", tags=["model_manager_v2"]) +model_records_router = APIRouter(prefix="/v1/model/record", tags=["model_manager_v2_unstable"]) class ModelsList(BaseModel): From b6ed4ba55936e05107b23bbb6936d7ec3146f4d0 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 18 Dec 2023 18:02:31 +1100 Subject: [PATCH 213/515] feat(db): handle PIL errors opening images gracefully For example, if PIL tries to open a *really* big image, it will raise an exception to prevent reading a huge object into memory. --- .../services/shared/sqlite_migrator/migrations/migration_2.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index 9b9dedcc58..e7f8619653 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -159,6 +159,9 @@ class Migration2Callback: except ImageFileNotFoundException: self._logger.warning(f"Image {image_name} not found, skipping") continue + except Exception as e: + self._logger.warning(f"Error while checking image {image_name}, skipping: {e}") + continue if "invokeai_workflow" in pil_image.info: try: UnsafeWorkflowWithVersionValidator.validate_json(pil_image.info.get("invokeai_workflow", "")) From cb698ff1fb2d6d55470fece8abf886a927afe72c Mon Sep 17 00:00:00 2001 From: Ryan Dick Date: Fri, 15 Dec 2023 17:56:49 -0500 Subject: [PATCH 214/515] Update model_probe to work with diffuser-format SD TI embeddings. --- invokeai/backend/model_management/model_probe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/backend/model_management/model_probe.py b/invokeai/backend/model_management/model_probe.py index f0af93294f..d312c6a0b4 100644 --- a/invokeai/backend/model_management/model_probe.py +++ b/invokeai/backend/model_management/model_probe.py @@ -389,7 +389,7 @@ class TextualInversionCheckpointProbe(CheckpointProbeBase): elif "clip_g" in checkpoint: token_dim = checkpoint["clip_g"].shape[-1] else: - token_dim = list(checkpoint.values())[0].shape[0] + token_dim = list(checkpoint.values())[0].shape[-1] if token_dim == 768: return BaseModelType.StableDiffusion1 elif token_dim == 1024: From 42be78d32839ac9c420bdb35d5b3b7375fcde552 Mon Sep 17 00:00:00 2001 From: Riccardo Giovanetti Date: Mon, 18 Dec 2023 11:09:23 +0000 Subject: [PATCH 215/515] translationBot(ui): update translation (Italian) Currently translated at 97.2% (1327 of 1365 strings) Co-authored-by: Riccardo Giovanetti Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/it.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/invokeai/frontend/web/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json index b816858bd8..6f912d27c0 100644 --- a/invokeai/frontend/web/public/locales/it.json +++ b/invokeai/frontend/web/public/locales/it.json @@ -1109,7 +1109,10 @@ "deletedInvalidEdge": "Eliminata connessione non valida {{source}} -> {{target}}", "unknownInput": "Input sconosciuto: {{name}}", "prototypeDesc": "Questa invocazione è un prototipo. Potrebbe subire modifiche sostanziali durante gli aggiornamenti dell'app e potrebbe essere rimossa in qualsiasi momento.", - "betaDesc": "Questa invocazione è in versione beta. Fino a quando non sarà stabile, potrebbe subire modifiche importanti durante gli aggiornamenti dell'app. Abbiamo intenzione di supportare questa invocazione a lungo termine." + "betaDesc": "Questa invocazione è in versione beta. Fino a quando non sarà stabile, potrebbe subire modifiche importanti durante gli aggiornamenti dell'app. Abbiamo intenzione di supportare questa invocazione a lungo termine.", + "newWorkflow": "Nuovo flusso di lavoro", + "newWorkflowDesc": "Creare un nuovo flusso di lavoro?", + "newWorkflowDesc2": "Il flusso di lavoro attuale presenta modifiche non salvate." }, "boards": { "autoAddBoard": "Aggiungi automaticamente bacheca", @@ -1629,7 +1632,10 @@ "deleteWorkflow": "Elimina flusso di lavoro", "workflows": "Flussi di lavoro", "noDescription": "Nessuna descrizione", - "userWorkflows": "I miei flussi di lavoro" + "userWorkflows": "I miei flussi di lavoro", + "newWorkflowCreated": "Nuovo flusso di lavoro creato", + "downloadWorkflow": "Salva su file", + "uploadWorkflow": "Carica da file" }, "app": { "storeNotInitialized": "Il negozio non è inizializzato" From 16b7246412a42a043ced1cfd3d2323bc6a297124 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Tue, 19 Dec 2023 09:30:40 +1100 Subject: [PATCH 216/515] (feat) updater installs from PyPi instead of GitHub releases --- invokeai/frontend/install/invokeai_update.py | 57 ++++++++++---------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/invokeai/frontend/install/invokeai_update.py b/invokeai/frontend/install/invokeai_update.py index 551f2acdf2..4ec4421ec8 100644 --- a/invokeai/frontend/install/invokeai_update.py +++ b/invokeai/frontend/install/invokeai_update.py @@ -8,6 +8,7 @@ import platform import pkg_resources import psutil import requests +from distutils.version import LooseVersion from rich import box, print from rich.console import Console, group from rich.panel import Panel @@ -31,10 +32,6 @@ else: console = Console(style=Style(color="grey74", bgcolor="grey19")) -def get_versions() -> dict: - return requests.get(url=INVOKE_AI_REL).json() - - def invokeai_is_running() -> bool: for p in psutil.process_iter(): try: @@ -50,6 +47,21 @@ def invokeai_is_running() -> bool: return False +def get_pypi_versions(): + url = f"https://pypi.org/pypi/invokeai/json" + try: + data = requests.get(url).json() + except: + raise Exception("Unable to fetch version information from PyPi") + + versions = list(data["releases"].keys()) + versions.sort(key=LooseVersion, reverse=True) + latest_version = [v for v in versions if 'rc' not in v][0] + latest_release_candidate = [v for v in versions if 'rc' in v][0] + return latest_version, latest_release_candidate + + + def welcome(latest_release: str, latest_prerelease: str): @group() def text(): @@ -63,8 +75,7 @@ def welcome(latest_release: str, latest_prerelease: str): yield "[bold yellow]Options:" yield f"""[1] Update to the latest [bold]official release[/bold] ([italic]{latest_release}[/italic]) [2] Update to the latest [bold]pre-release[/bold] (may be buggy; caveat emptor!) ([italic]{latest_prerelease}[/italic]) -[3] Manually enter the [bold]tag name[/bold] for the version you wish to update to -[4] Manually enter the [bold]branch name[/bold] for the version you wish to update to""" +[3] Manually enter the [bold]version[/bold] you wish to update to""" console.rule() print( @@ -91,45 +102,37 @@ def get_extras(): return extras + + + def main(): - versions = get_versions() - released_versions = [x for x in versions if not (x["draft"] or x["prerelease"])] - prerelease_versions = [x for x in versions if not x["draft"] and x["prerelease"]] - latest_release = released_versions[0]["tag_name"] if len(released_versions) else None - latest_prerelease = prerelease_versions[0]["tag_name"] if len(prerelease_versions) else None if invokeai_is_running(): print(":exclamation: [bold red]Please terminate all running instances of InvokeAI before updating.[/red bold]") input("Press any key to continue...") return + latest_release, latest_prerelease = get_pypi_versions() + welcome(latest_release, latest_prerelease) - tag = None - branch = None - release = None - choice = Prompt.ask("Choice:", choices=["1", "2", "3", "4"], default="1") + + release = latest_release + choice = Prompt.ask("Choice:", choices=["1", "2", "3"], default="1") if choice == "1": release = latest_release elif choice == "2": release = latest_prerelease elif choice == "3": - while not tag: - tag = Prompt.ask("Enter an InvokeAI tag name") - elif choice == "4": - while not branch: - branch = Prompt.ask("Enter an InvokeAI branch name") + release = Prompt.ask("Enter an InvokeAI version name") extras = get_extras() - print(f":crossed_fingers: Upgrading to [yellow]{tag or release or branch}[/yellow]") - if release: - cmd = f'pip install "invokeai{extras} @ {INVOKE_AI_SRC}/{release}.zip" --use-pep517 --upgrade' - elif tag: - cmd = f'pip install "invokeai{extras} @ {INVOKE_AI_TAG}/{tag}.zip" --use-pep517 --upgrade' - else: - cmd = f'pip install "invokeai{extras} @ {INVOKE_AI_BRANCH}/{branch}.zip" --use-pep517 --upgrade' + print(f":crossed_fingers: Upgrading to [yellow]{release}[/yellow]") + cmd = f'pip install "invokeai{extras}=={release}" --use-pep517 --upgrade' + + print("") print("") if os.system(cmd) == 0: From cd3111c32460c170b4e46282cada1ab9846463bf Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Tue, 19 Dec 2023 09:58:10 +1100 Subject: [PATCH 217/515] fix ruff errors --- invokeai/frontend/install/invokeai_update.py | 21 +++++++------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/invokeai/frontend/install/invokeai_update.py b/invokeai/frontend/install/invokeai_update.py index 4ec4421ec8..cde9d8fd1e 100644 --- a/invokeai/frontend/install/invokeai_update.py +++ b/invokeai/frontend/install/invokeai_update.py @@ -4,11 +4,11 @@ pip install . """ import os import platform +from distutils.version import LooseVersion import pkg_resources import psutil import requests -from distutils.version import LooseVersion from rich import box, print from rich.console import Console, group from rich.panel import Panel @@ -48,20 +48,19 @@ def invokeai_is_running() -> bool: def get_pypi_versions(): - url = f"https://pypi.org/pypi/invokeai/json" - try: + url = "https://pypi.org/pypi/invokeai/json" + try: data = requests.get(url).json() - except: + except Exception: raise Exception("Unable to fetch version information from PyPi") versions = list(data["releases"].keys()) versions.sort(key=LooseVersion, reverse=True) - latest_version = [v for v in versions if 'rc' not in v][0] - latest_release_candidate = [v for v in versions if 'rc' in v][0] + latest_version = [v for v in versions if "rc" not in v][0] + latest_release_candidate = [v for v in versions if "rc" in v][0] return latest_version, latest_release_candidate - def welcome(latest_release: str, latest_prerelease: str): @group() def text(): @@ -102,11 +101,7 @@ def get_extras(): return extras - - - def main(): - if invokeai_is_running(): print(":exclamation: [bold red]Please terminate all running instances of InvokeAI before updating.[/red bold]") input("Press any key to continue...") @@ -116,7 +111,6 @@ def main(): welcome(latest_release, latest_prerelease) - release = latest_release choice = Prompt.ask("Choice:", choices=["1", "2", "3"], default="1") @@ -125,14 +119,13 @@ def main(): elif choice == "2": release = latest_prerelease elif choice == "3": - release = Prompt.ask("Enter an InvokeAI version name") + release = Prompt.ask("Enter an InvokeAI version name") extras = get_extras() print(f":crossed_fingers: Upgrading to [yellow]{release}[/yellow]") cmd = f'pip install "invokeai{extras}=={release}" --use-pep517 --upgrade' - print("") print("") if os.system(cmd) == 0: From 2f438431bd00dcae9336df8769554a79d0c3ab7a Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Tue, 19 Dec 2023 11:04:21 +1100 Subject: [PATCH 218/515] (fix) update logic for installing specific version --- invokeai/frontend/install/invokeai_update.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/invokeai/frontend/install/invokeai_update.py b/invokeai/frontend/install/invokeai_update.py index cde9d8fd1e..3e453a90fd 100644 --- a/invokeai/frontend/install/invokeai_update.py +++ b/invokeai/frontend/install/invokeai_update.py @@ -58,7 +58,7 @@ def get_pypi_versions(): versions.sort(key=LooseVersion, reverse=True) latest_version = [v for v in versions if "rc" not in v][0] latest_release_candidate = [v for v in versions if "rc" in v][0] - return latest_version, latest_release_candidate + return latest_version, latest_release_candidate, versions def welcome(latest_release: str, latest_prerelease: str): @@ -107,7 +107,7 @@ def main(): input("Press any key to continue...") return - latest_release, latest_prerelease = get_pypi_versions() + latest_release, latest_prerelease, versions = get_pypi_versions() welcome(latest_release, latest_prerelease) @@ -119,7 +119,12 @@ def main(): elif choice == "2": release = latest_prerelease elif choice == "3": - release = Prompt.ask("Enter an InvokeAI version name") + while True: + release = Prompt.ask("Enter an InvokeAI version") + release.strip() + if release in versions: + break + print(f":exclamation: [bold red]'{release}' is not a recognized InvokeAI release.[/red bold]") extras = get_extras() From fa3f1b6e415bc7bccd28f2ff7cf27e933ab7c3c5 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Tue, 19 Dec 2023 17:01:47 -0500 Subject: [PATCH 219/515] [Feat] reimport model config records after schema migration (#5281) * add code to repopulate model config records after schema update * reformat for ruff * migrate model records using db cursor rather than the ModelRecordConfigService * ruff fixes * tweak exception reporting * fix: build frontend in pypi-release workflow This was missing, resulting in the 3.5.0rc1 having no frontend. * fix: use node 18, set working directory - Node 20 has a problem with `pnpm`; set it to Node 18 - Set the working directory for the frontend commands * Don't copy extraneous paths into installer .zip * feat(installer): delete frontend build after creating installer This prevents an empty `dist/` from breaking the app on startup. * feat: add python dist as release artifact, as input to enable publish to pypi - The release workflow never runs automatically. It must be manually kicked off. - The release workflow has an input. When running it from the GH actions UI, you will see a "Publish build on PyPi" prompt. If this value is "true", the workflow will upload the build to PyPi, releasing it. If this is anything else (e.g. "false", the default), the workflow will build but not upload to PyPi. - The `dist/` folder (where the python package is built) is uploaded as a workflow artifact as a zip file. This can be downloaded and inspected. This allows "dry" runs of the workflow. - The workflow job and some steps have been renamed to clarify what they do * translationBot(ui): update translation files Updated by "Cleanup translation files" hook in Weblate. Co-authored-by: Hosted Weblate Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ Translation: InvokeAI/Web UI * freeze yaml migration logic at upgrade to 3.5 * moved migration code to migration_3 --------- Co-authored-by: Lincoln Stein Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Co-authored-by: Hosted Weblate --- .../app/services/shared/sqlite/sqlite_util.py | 2 + .../sqlite_migrator/migrations/migration_2.py | 8 ++ .../sqlite_migrator/migrations/migration_3.py | 75 ++++++++++++++++ .../migrations/util/migrate_yaml_config_1.py} | 85 ++++++++++++++----- pyproject.toml | 1 - 5 files changed, 148 insertions(+), 23 deletions(-) create mode 100644 invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py rename invokeai/{backend/model_manager/migrate_to_db.py => app/services/shared/sqlite_migrator/migrations/util/migrate_yaml_config_1.py} (56%) diff --git a/invokeai/app/services/shared/sqlite/sqlite_util.py b/invokeai/app/services/shared/sqlite/sqlite_util.py index 83a42917a7..43c3edd5f5 100644 --- a/invokeai/app/services/shared/sqlite/sqlite_util.py +++ b/invokeai/app/services/shared/sqlite/sqlite_util.py @@ -5,6 +5,7 @@ from invokeai.app.services.image_files.image_files_base import ImageFileStorageB from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.app.services.shared.sqlite_migrator.migrations.migration_1 import build_migration_1 from invokeai.app.services.shared.sqlite_migrator.migrations.migration_2 import build_migration_2 +from invokeai.app.services.shared.sqlite_migrator.migrations.migration_3 import build_migration_3 from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_impl import SqliteMigrator @@ -27,6 +28,7 @@ def init_db(config: InvokeAIAppConfig, logger: Logger, image_files: ImageFileSto migrator = SqliteMigrator(db=db) migrator.register_migration(build_migration_1()) migrator.register_migration(build_migration_2(image_files=image_files, logger=logger)) + migrator.register_migration(build_migration_3()) migrator.run_migrations() return db diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py index 9b9dedcc58..99922e2fc1 100644 --- a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_2.py @@ -11,6 +11,8 @@ from invokeai.app.services.workflow_records.workflow_records_common import ( UnsafeWorkflowWithVersionValidator, ) +from .util.migrate_yaml_config_1 import MigrateModelYamlToDb1 + class Migration2Callback: def __init__(self, image_files: ImageFileStorageBase, logger: Logger): @@ -24,6 +26,7 @@ class Migration2Callback: self._add_workflow_library(cursor) self._drop_model_manager_metadata(cursor) self._recreate_model_config(cursor) + self._migrate_model_config_records(cursor) self._migrate_embedded_workflows(cursor) def _add_images_has_workflow(self, cursor: sqlite3.Cursor) -> None: @@ -131,6 +134,11 @@ class Migration2Callback: """ ) + def _migrate_model_config_records(self, cursor: sqlite3.Cursor) -> None: + """After updating the model config table, we repopulate it.""" + model_record_migrator = MigrateModelYamlToDb1(cursor) + model_record_migrator.migrate() + def _migrate_embedded_workflows(self, cursor: sqlite3.Cursor) -> None: """ In the v3.5.0 release, InvokeAI changed how it handles embedded workflows. The `images` table in diff --git a/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py new file mode 100644 index 0000000000..2ffef13dd4 --- /dev/null +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/migration_3.py @@ -0,0 +1,75 @@ +import sqlite3 + +from invokeai.app.services.shared.sqlite_migrator.sqlite_migrator_common import Migration + +from .util.migrate_yaml_config_1 import MigrateModelYamlToDb1 + + +class Migration3Callback: + def __init__(self) -> None: + pass + + def __call__(self, cursor: sqlite3.Cursor) -> None: + self._drop_model_manager_metadata(cursor) + self._recreate_model_config(cursor) + self._migrate_model_config_records(cursor) + + def _drop_model_manager_metadata(self, cursor: sqlite3.Cursor) -> None: + """Drops the `model_manager_metadata` table.""" + cursor.execute("DROP TABLE IF EXISTS model_manager_metadata;") + + def _recreate_model_config(self, cursor: sqlite3.Cursor) -> None: + """ + Drops the `model_config` table, recreating it. + + In 3.4.0, this table used explicit columns but was changed to use json_extract 3.5.0. + + Because this table is not used in production, we are able to simply drop it and recreate it. + """ + + cursor.execute("DROP TABLE IF EXISTS model_config;") + + cursor.execute( + """--sql + CREATE TABLE IF NOT EXISTS model_config ( + id TEXT NOT NULL PRIMARY KEY, + -- The next 3 fields are enums in python, unrestricted string here + base TEXT GENERATED ALWAYS as (json_extract(config, '$.base')) VIRTUAL NOT NULL, + type TEXT GENERATED ALWAYS as (json_extract(config, '$.type')) VIRTUAL NOT NULL, + name TEXT GENERATED ALWAYS as (json_extract(config, '$.name')) VIRTUAL NOT NULL, + path TEXT GENERATED ALWAYS as (json_extract(config, '$.path')) VIRTUAL NOT NULL, + format TEXT GENERATED ALWAYS as (json_extract(config, '$.format')) VIRTUAL NOT NULL, + original_hash TEXT, -- could be null + -- Serialized JSON representation of the whole config object, + -- which will contain additional fields from subclasses + config TEXT NOT NULL, + created_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- Updated via trigger + updated_at DATETIME NOT NULL DEFAULT(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')), + -- unique constraint on combo of name, base and type + UNIQUE(name, base, type) + ); + """ + ) + + def _migrate_model_config_records(self, cursor: sqlite3.Cursor) -> None: + """After updating the model config table, we repopulate it.""" + model_record_migrator = MigrateModelYamlToDb1(cursor) + model_record_migrator.migrate() + + +def build_migration_3() -> Migration: + """ + Build the migration from database version 2 to 3. + + This migration does the following: + - Drops the `model_config` table, recreating it + - Migrates data from `models.yaml` into the `model_config` table + """ + migration_3 = Migration( + from_version=2, + to_version=3, + callback=Migration3Callback(), + ) + + return migration_3 diff --git a/invokeai/backend/model_manager/migrate_to_db.py b/invokeai/app/services/shared/sqlite_migrator/migrations/util/migrate_yaml_config_1.py similarity index 56% rename from invokeai/backend/model_manager/migrate_to_db.py rename to invokeai/app/services/shared/sqlite_migrator/migrations/util/migrate_yaml_config_1.py index e68a2eab36..f2476ed0f6 100644 --- a/invokeai/backend/model_manager/migrate_to_db.py +++ b/invokeai/app/services/shared/sqlite_migrator/migrations/util/migrate_yaml_config_1.py @@ -1,8 +1,12 @@ # Copyright (c) 2023 Lincoln D. Stein """Migrate from the InvokeAI v2 models.yaml format to the v3 sqlite format.""" +import json +import sqlite3 from hashlib import sha1 from logging import Logger +from pathlib import Path +from typing import Optional from omegaconf import DictConfig, OmegaConf from pydantic import TypeAdapter @@ -10,13 +14,12 @@ from pydantic import TypeAdapter from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.model_records import ( DuplicateModelException, - ModelRecordServiceSQL, UnknownModelException, ) -from invokeai.app.services.shared.sqlite.sqlite_database import SqliteDatabase from invokeai.backend.model_manager.config import ( AnyModelConfig, BaseModelType, + ModelConfigFactory, ModelType, ) from invokeai.backend.model_manager.hash import FastModelHash @@ -25,9 +28,9 @@ from invokeai.backend.util.logging import InvokeAILogger ModelsValidator = TypeAdapter(AnyModelConfig) -class MigrateModelYamlToDb: +class MigrateModelYamlToDb1: """ - Migrate the InvokeAI models.yaml format (VERSION 3.0.0) to SQL3 database format (VERSION 3.2.0) + Migrate the InvokeAI models.yaml format (VERSION 3.0.0) to SQL3 database format (VERSION 3.5.0). The class has one externally useful method, migrate(), which scans the currently models.yaml file and imports all its entries into invokeai.db. @@ -41,17 +44,13 @@ class MigrateModelYamlToDb: config: InvokeAIAppConfig logger: Logger + cursor: sqlite3.Cursor - def __init__(self) -> None: + def __init__(self, cursor: sqlite3.Cursor = None) -> None: self.config = InvokeAIAppConfig.get_config() self.config.parse_args() self.logger = InvokeAILogger.get_logger() - - def get_db(self) -> ModelRecordServiceSQL: - """Fetch the sqlite3 database for this installation.""" - db_path = None if self.config.use_memory_db else self.config.db_path - db = SqliteDatabase(db_path=db_path, logger=self.logger, verbose=self.config.log_sql) - return ModelRecordServiceSQL(db) + self.cursor = cursor def get_yaml(self) -> DictConfig: """Fetch the models.yaml DictConfig for this installation.""" @@ -62,8 +61,10 @@ class MigrateModelYamlToDb: def migrate(self) -> None: """Do the migration from models.yaml to invokeai.db.""" - db = self.get_db() - yaml = self.get_yaml() + try: + yaml = self.get_yaml() + except OSError: + return for model_key, stanza in yaml.items(): if model_key == "__metadata__": @@ -86,22 +87,62 @@ class MigrateModelYamlToDb: new_config: AnyModelConfig = ModelsValidator.validate_python(stanza) # type: ignore # see https://github.com/pydantic/pydantic/discussions/7094 try: - if original_record := db.search_by_path(stanza.path): - key = original_record[0].key + if original_record := self._search_by_path(stanza.path): + key = original_record.key self.logger.info(f"Updating model {model_name} with information from models.yaml using key {key}") - db.update_model(key, new_config) + self._update_model(key, new_config) else: self.logger.info(f"Adding model {model_name} with key {model_key}") - db.add_model(new_key, new_config) + self._add_model(new_key, new_config) except DuplicateModelException: self.logger.warning(f"Model {model_name} is already in the database") except UnknownModelException: self.logger.warning(f"Model at {stanza.path} could not be found in database") + def _search_by_path(self, path: Path) -> Optional[AnyModelConfig]: + self.cursor.execute( + """--sql + SELECT config FROM model_config + WHERE path=?; + """, + (str(path),), + ) + results = [ModelConfigFactory.make_config(json.loads(x[0])) for x in self.cursor.fetchall()] + return results[0] if results else None -def main(): - MigrateModelYamlToDb().migrate() + def _update_model(self, key: str, config: AnyModelConfig) -> None: + record = ModelConfigFactory.make_config(config, key=key) # ensure it is a valid config obect + json_serialized = record.model_dump_json() # and turn it into a json string. + self.cursor.execute( + """--sql + UPDATE model_config + SET + config=? + WHERE id=?; + """, + (json_serialized, key), + ) + if self.cursor.rowcount == 0: + raise UnknownModelException("model not found") - -if __name__ == "__main__": - main() + def _add_model(self, key: str, config: AnyModelConfig) -> None: + record = ModelConfigFactory.make_config(config, key=key) # ensure it is a valid config obect. + json_serialized = record.model_dump_json() # and turn it into a json string. + try: + self.cursor.execute( + """--sql + INSERT INTO model_config ( + id, + original_hash, + config + ) + VALUES (?,?,?); + """, + ( + key, + record.original_hash, + json_serialized, + ), + ) + except sqlite3.IntegrityError as exc: + raise DuplicateModelException(f"{record.name}: model is already in database") from exc diff --git a/pyproject.toml b/pyproject.toml index 0b8d258e7d..98018dc7cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -138,7 +138,6 @@ dependencies = [ "invokeai-node-web" = "invokeai.app.api_app:invoke_api" "invokeai-import-images" = "invokeai.frontend.install.import_images:main" "invokeai-db-maintenance" = "invokeai.backend.util.db_maintenance:main" -"invokeai-migrate-models-to-db" = "invokeai.backend.model_manager.migrate_to_db:main" [project.urls] "Homepage" = "https://invoke-ai.github.io/InvokeAI/" From bee6ad15470a265be0fec81703bae9a2bf0cb02c Mon Sep 17 00:00:00 2001 From: Sam McLeod Date: Fri, 15 Dec 2023 14:38:10 +1100 Subject: [PATCH 220/515] fix(pnpm): replace npm with pnpm in dockerfile --- docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index a85cc36be7..6c3306634d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -61,9 +61,10 @@ RUN --mount=type=cache,target=/root/.cache/pip \ FROM node:18 AS web-builder WORKDIR /build +RUN npm i -g pnpm COPY invokeai/frontend/web/ ./ RUN --mount=type=cache,target=/usr/lib/node_modules \ - npm install --include dev + pnpm i --include dev RUN --mount=type=cache,target=/usr/lib/node_modules \ yarn vite build From 9afdd0f4a8c65fd4026a1baa546d6c5a3bc346be Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 18 Dec 2023 11:44:08 +1100 Subject: [PATCH 221/515] Update Dockerfile --- docker/Dockerfile | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 6c3306634d..148879f366 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -59,16 +59,19 @@ RUN --mount=type=cache,target=/root/.cache/pip \ # #### Build the Web UI ------------------------------------ -FROM node:18 AS web-builder +FROM node:18-slim AS web-builder +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable + WORKDIR /build -RUN npm i -g pnpm COPY invokeai/frontend/web/ ./ -RUN --mount=type=cache,target=/usr/lib/node_modules \ - pnpm i --include dev +RUN --mount=type=cache,target=/pnpm/store \ + pnpm install --frozen-lockfile +RUN pnpm run build RUN --mount=type=cache,target=/usr/lib/node_modules \ yarn vite build - #### Runtime stage --------------------------------------- FROM library/ubuntu:23.04 AS runtime From a4f9bfc8f7cf326fcf993c1b4bf7e086f72cc4f9 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 18 Dec 2023 12:31:03 +1100 Subject: [PATCH 222/515] Update Dockerfile --- docker/Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 148879f366..6626907999 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -69,8 +69,6 @@ COPY invokeai/frontend/web/ ./ RUN --mount=type=cache,target=/pnpm/store \ pnpm install --frozen-lockfile RUN pnpm run build -RUN --mount=type=cache,target=/usr/lib/node_modules \ - yarn vite build #### Runtime stage --------------------------------------- From 37b76caccfa7fa44ff00d7bcb917bf350629f0ca Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Wed, 20 Dec 2023 17:42:14 +1100 Subject: [PATCH 223/515] Added default workflows --- ...SRGAN Upscaling with Canny ControlNet.json | 1364 +++++++++++++++ .../Multi ControlNet (Canny & Depth).json | 1480 +++++++++++++++++ .../default_workflows/Prompt from File.json | 975 +++++++++++ 3 files changed, 3819 insertions(+) create mode 100644 invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json create mode 100644 invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json create mode 100644 invokeai/app/services/workflow_records/default_workflows/Prompt from File.json diff --git a/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json b/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json new file mode 100644 index 0000000000..5c2d200ec2 --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json @@ -0,0 +1,1364 @@ +{ + "id": "6bfa0b3a-7090-4cd9-ad2d-a4b8662b6e71", + "name": "ESRGAN Upscaling with Canny ControlNet", + "author": "InvokeAI", + "description": "Sample workflow for using Upscaling with ControlNet with SD1.5", + "version": "1.0.1", + "contact": "invoke@invoke.ai", + "tags": "upscale, controlnet, default", + "notes": "", + "exposedFields": [ + { + "nodeId": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "fieldName": "model" + }, + { + "nodeId": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "fieldName": "prompt" + }, + { + "nodeId": "771bdf6a-0813-4099-a5d8-921a138754d4", + "fieldName": "image" + } + ], + "meta": { + "category": "default", + "version": "2.0.0" + }, + "nodes": [ + { + "id": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "type": "invocation", + "data": { + "id": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "5f762fae-d791-42d9-8ab5-2b830c33ff20", + "name": "prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "8ac95f40-317d-4513-bbba-b99effd3b438", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "46c65b2b-c0b5-40c2-b183-74e9451c6d56", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 1250, + "y": 1500 + } + }, + { + "id": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "type": "invocation", + "data": { + "id": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "model": { + "id": "b35ae88a-f2d2-43f6-958c-8c624391250f", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, + "value": { + "model_name": "stable-diffusion-v1-5", + "base_model": "sd-1", + "model_type": "main" + } + } + }, + "outputs": { + "unet": { + "id": "02f243cb-c6e2-42c5-8be9-ef0519d54383", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "7762ed13-5b28-40f4-85f1-710942ceb92a", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "vae": { + "id": "69566153-1918-417d-a3bb-32e9e857ef6b", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } + }, + "width": 320, + "height": 227, + "position": { + "x": 700, + "y": 1375 + } + }, + { + "id": "771bdf6a-0813-4099-a5d8-921a138754d4", + "type": "invocation", + "data": { + "id": "771bdf6a-0813-4099-a5d8-921a138754d4", + "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "0f6d68a2-38bd-4f65-a112-0a256c7a2678", + "name": "image", + "fieldKind": "input", + "label": "Image To Upscale", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + } + }, + "outputs": { + "image": { + "id": "76f6f9b6-755b-4373-93fa-6a779998d2c8", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "6858e46b-707c-444f-beda-9b5f4aecfdf8", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "421bdc6e-ecd1-4935-9665-d38ab8314f79", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 225, + "position": { + "x": 375, + "y": 1900 + } + }, + { + "id": "f7564dd2-9539-47f2-ac13-190804461f4e", + "type": "invocation", + "data": { + "id": "f7564dd2-9539-47f2-ac13-190804461f4e", + "type": "esrgan", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.3.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "8fa0c7eb-5bd3-4575-98e7-72285c532504", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "3c949799-a504-41c9-b342-cff4b8146c48", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "model_name": { + "id": "77cb4750-53d6-4c2c-bb5c-145981acbf17", + "name": "model_name", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "RealESRGAN_x4plus.pth" + }, + "tile_size": { + "id": "7787b3ad-46ee-4248-995f-bc740e1f988b", + "name": "tile_size", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 400 + } + }, + "outputs": { + "image": { + "id": "37e6308e-e926-4e07-b0db-4e8601f495d0", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "c194d84a-fac7-4856-b646-d08477a5ad2b", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "b2a6206c-a9c8-4271-a055-0b93a7f7d505", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 775, + "y": 1900 + } + }, + { + "id": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "type": "invocation", + "data": { + "id": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "type": "canny_image_processor", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "52c877c8-25d9-4949-8518-f536fcdd152d", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "e0af11fe-4f95-4193-a599-cf40b6a963f5", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "low_threshold": { + "id": "ab775f7b-f556-4298-a9d6-2274f3a6c77c", + "name": "low_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 100 + }, + "high_threshold": { + "id": "9e58b615-06e4-417f-b0d8-63f1574cd174", + "name": "high_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 200 + } + }, + "outputs": { + "image": { + "id": "61feb8bf-95c9-4634-87e2-887fc43edbdf", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "9e203e41-73f7-4cfa-bdca-5040e5e60c55", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "ec7d99dc-0d82-4495-a759-6423808bff1c", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 1200, + "y": 1900 + } + }, + { + "id": "ca1d020c-89a8-4958-880a-016d28775cfa", + "type": "invocation", + "data": { + "id": "ca1d020c-89a8-4958-880a-016d28775cfa", + "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "2973c126-e301-4595-a7dc-d6e1729ccdbf", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "control_model": { + "id": "4bb4d987-8491-4839-b41b-6e2f546fe2d0", + "name": "control_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, + "value": { + "model_name": "sd-controlnet-canny", + "base_model": "sd-1" + } + }, + "control_weight": { + "id": "a3cf387a-b58f-4058-858f-6a918efac609", + "name": "control_weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 1 + }, + "begin_step_percent": { + "id": "e0614f69-8a58-408b-9238-d3a44a4db4e0", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "ac683539-b6ed-4166-9294-2040e3ede206", + "name": "end_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "control_mode": { + "id": "f00b21de-cbd7-4901-8efc-e7134a2dc4c8", + "name": "control_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "balanced" + }, + "resize_mode": { + "id": "cafb60ee-3959-4d57-a06c-13b83be6ea4f", + "name": "resize_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "just_resize" + } + }, + "outputs": { + "control": { + "id": "dfb88dd1-12bf-4034-9268-e726f894c131", + "name": "control", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } + } + } + }, + "width": 320, + "height": 511, + "position": { + "x": 1650, + "y": 1900 + } + }, + { + "id": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "invocation", + "data": { + "id": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", + "inputs": { + "seed": { + "id": "f76b0e01-b601-423f-9b5f-ab7a1f10fe82", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "eec326d6-710c-45de-a25c-95704c80d7e2", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "2794a27d-5337-43ca-95d9-41b673642c94", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "ae7654e3-979e-44a1-8968-7e3199e91e66", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "8b6dc166-4ead-4124-8ac9-529814b0cbb9", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "e3fe3940-a277-4838-a448-5f81f2a7d99d", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "48ecd6ef-c216-40d5-9d1b-d37bd00c82e7", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 1650, + "y": 1775 + } + }, + { + "id": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "invocation", + "data": { + "id": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", + "inputs": { + "positive_conditioning": { + "id": "e127084b-72f5-4fe4-892b-84f34f88bce9", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "72cde4ee-55de-4d3e-9057-74e741c04e20", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "747f7023-1c19-465b-bec8-1d9695dd3505", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "80860292-633c-46f2-83d0-60d0029b65d2", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 10 + }, + "cfg_scale": { + "id": "ebc71e6f-9148-4f12-b455-5e1f179d1c3a", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 7.5 + }, + "denoising_start": { + "id": "ced44b8f-3bad-4c34-8113-13bc0faed28a", + "name": "denoising_start", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "denoising_end": { + "id": "79bf4b77-3502-4f72-ba8b-269c4c3c5c72", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "ed56e2b8-f477-41a2-b9f5-f15f4933ae65", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "euler" + }, + "unet": { + "id": "146b790c-b08e-437c-a2e1-e393c2c1c41a", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "75ed3df1-d261-4b8e-a89b-341c4d7161fb", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "eab9a61d-9b64-44d3-8d90-4686f5887cb0", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "2dc8d637-58fd-4069-ad33-85c32d958b7b", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "391e5010-e402-4380-bb46-e7edaede3512", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "6767e40a-97c6-4487-b3c9-cad1c150bf9f", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "6251efda-d97d-4ff1-94b5-8cc6b458c184", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "4e7986a4-dff2-4448-b16b-1af477b81f8b", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "dad525dd-d2f8-4f07-8c8d-51f2a3c5456e", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "af03a089-4739-40c6-8b48-25d458d63c2f", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 705, + "position": { + "x": 2128.740065979906, + "y": 1232.6219060454753 + } + }, + { + "id": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", + "type": "invocation", + "data": { + "id": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "9f7a1a9f-7861-4f09-874b-831af89b7474", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "a5b42432-8ee7-48cd-b61c-b97be6e490a2", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "890de106-e6c3-4c2c-8d67-b368def64894", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "b8e5a2ca-5fbc-49bd-ad4c-ea0e109d46e3", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "fdaf6264-4593-4bd2-ac71-8a0acff261af", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "94c5877d-6c78-4662-a836-8a84fc75d0a0", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "2a854e42-1616-42f5-b9ef-7b73c40afc1d", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "dd649053-1433-4f31-90b3-8bb103efc5b1", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 267, + "position": { + "x": 2559.4751127537957, + "y": 1246.6000376741406 + } + }, + { + "id": "5ca498a4-c8c8-4580-a396-0c984317205d", + "type": "invocation", + "data": { + "id": "5ca498a4-c8c8-4580-a396-0c984317205d", + "type": "i2l", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "9e6c4010-0f79-4587-9062-29d9a8f96b3b", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "vae": { + "id": "b9ed2ec4-e8e3-4d69-8a42-27f2d983bcd6", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "bb48d10b-2440-4c46-b835-646ae5ebc013", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "1048612c-c0f4-4abf-a684-0045e7d158f8", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "latents": { + "id": "55301367-0578-4dee-8060-031ae13c7bf8", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "2eb65690-1f20-4070-afbd-1e771b9f8ca9", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "d5bf64c7-c30f-43b8-9bc2-95e7718c1bdc", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 1650, + "y": 1675 + } + }, + { + "id": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "type": "invocation", + "data": { + "id": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "5f762fae-d791-42d9-8ab5-2b830c33ff20", + "name": "prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "8ac95f40-317d-4513-bbba-b99effd3b438", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "46c65b2b-c0b5-40c2-b183-74e9451c6d56", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 1250, + "y": 1200 + } + }, + { + "id": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "type": "invocation", + "data": { + "id": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "inputs": { + "low": { + "id": "2118026f-1c64-41fa-ab6b-7532410f60ae", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "c12f312a-fdfd-4aca-9aa6-4c99bc70bd63", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "75552bad-6212-4ae7-96a7-68e666acea4c", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 1650, + "y": 1600 + } + } + ], + "edges": [ + { + "id": "5ca498a4-c8c8-4580-a396-0c984317205d-f50624ce-82bf-41d0-bdf7-8aab11a80d48-collapsed", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "collapsed" + }, + { + "id": "eb8f6f8a-c7b1-4914-806e-045ee2717a35-f50624ce-82bf-41d0-bdf7-8aab11a80d48-collapsed", + "source": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "collapsed" + }, + { + "id": "reactflow__edge-771bdf6a-0813-4099-a5d8-921a138754d4image-f7564dd2-9539-47f2-ac13-190804461f4eimage", + "source": "771bdf6a-0813-4099-a5d8-921a138754d4", + "target": "f7564dd2-9539-47f2-ac13-190804461f4e", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-f7564dd2-9539-47f2-ac13-190804461f4eimage-1d887701-df21-4966-ae6e-a7d82307d7bdimage", + "source": "f7564dd2-9539-47f2-ac13-190804461f4e", + "target": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dwidth-f50624ce-82bf-41d0-bdf7-8aab11a80d48width", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dheight-f50624ce-82bf-41d0-bdf7-8aab11a80d48height", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-f50624ce-82bf-41d0-bdf7-8aab11a80d48noise-c3737554-8d87-48ff-a6f8-e71d2867f434noise", + "source": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dlatents-c3737554-8d87-48ff-a6f8-e71d2867f434latents", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-e8bf67fe-67de-4227-87eb-79e86afdfc74conditioning-c3737554-8d87-48ff-a6f8-e71d2867f434negative_conditioning", + "source": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16bconditioning-c3737554-8d87-48ff-a6f8-e71d2867f434positive_conditioning", + "source": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dclip-63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16bclip", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dclip-e8bf67fe-67de-4227-87eb-79e86afdfc74clip", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-1d887701-df21-4966-ae6e-a7d82307d7bdimage-ca1d020c-89a8-4958-880a-016d28775cfaimage", + "source": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "target": "ca1d020c-89a8-4958-880a-016d28775cfa", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-ca1d020c-89a8-4958-880a-016d28775cfacontrol-c3737554-8d87-48ff-a6f8-e71d2867f434control", + "source": "ca1d020c-89a8-4958-880a-016d28775cfa", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "control", + "targetHandle": "control" + }, + { + "id": "reactflow__edge-c3737554-8d87-48ff-a6f8-e71d2867f434latents-3ed9b2ef-f4ec-40a7-94db-92e63b583ec0latents", + "source": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "target": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dvae-3ed9b2ef-f4ec-40a7-94db-92e63b583ec0vae", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-f7564dd2-9539-47f2-ac13-190804461f4eimage-5ca498a4-c8c8-4580-a396-0c984317205dimage", + "source": "f7564dd2-9539-47f2-ac13-190804461f4e", + "target": "5ca498a4-c8c8-4580-a396-0c984317205d", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dunet-c3737554-8d87-48ff-a6f8-e71d2867f434unet", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dvae-5ca498a4-c8c8-4580-a396-0c984317205dvae", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "5ca498a4-c8c8-4580-a396-0c984317205d", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-eb8f6f8a-c7b1-4914-806e-045ee2717a35value-f50624ce-82bf-41d0-bdf7-8aab11a80d48seed", + "source": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + } + ] +} \ No newline at end of file diff --git a/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json b/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json new file mode 100644 index 0000000000..8bd6aef135 --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json @@ -0,0 +1,1480 @@ +{ + "id": "1e385b84-86f8-452e-9697-9e5abed20518", + "name": "Multi ControlNet (Canny & Depth)", + "author": "InvokeAI", + "description": "A sample workflow using canny & depth ControlNets to guide the generation process. ", + "version": "1.0.0", + "contact": "invoke@invoke.ai", + "tags": "ControlNet, canny, depth", + "notes": "", + "exposedFields": [ + { + "nodeId": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "fieldName": "model" + }, + { + "nodeId": "7ce68934-3419-42d4-ac70-82cfc9397306", + "fieldName": "prompt" + }, + { + "nodeId": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "fieldName": "prompt" + }, + { + "nodeId": "c4b23e64-7986-40c4-9cad-46327b12e204", + "fieldName": "image" + }, + { + "nodeId": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "fieldName": "image" + } + ], + "meta": { + "category": "default", + "version": "2.0.0" + }, + "nodes": [ + { + "id": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "type": "invocation", + "data": { + "id": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "189c8adf-68cc-4774-a729-49da89f6fdf1", + "name": "image", + "fieldKind": "input", + "label": "Depth Input Image", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + } + }, + "outputs": { + "image": { + "id": "1a31cacd-9d19-4f32-b558-c5e4aa39ce73", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "12f298fd-1d11-4cca-9426-01240f7ec7cf", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "c47dabcb-44e8-40c9-992d-81dca59f598e", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 225, + "position": { + "x": 3625, + "y": -75 + } + }, + { + "id": "a33199c2-8340-401e-b8a2-42ffa875fc1c", + "type": "invocation", + "data": { + "id": "a33199c2-8340-401e-b8a2-42ffa875fc1c", + "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "4e0a3172-d3c2-4005-a84c-fa12a404f8a0", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "control_model": { + "id": "8cb2d998-4086-430a-8b13-94cbc81e3ca3", + "name": "control_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, + "value": { + "model_name": "sd-controlnet-depth", + "base_model": "sd-1" + } + }, + "control_weight": { + "id": "5e32bd8a-9dc8-42d8-9bcc-c2b0460c0b0f", + "name": "control_weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 1 + }, + "begin_step_percent": { + "id": "c258a276-352a-416c-8358-152f11005c0c", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "43001125-0d70-4f87-8e79-da6603ad6c33", + "name": "end_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "control_mode": { + "id": "d2f14561-9443-4374-9270-e2f05007944e", + "name": "control_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "balanced" + }, + "resize_mode": { + "id": "727ee7d3-8bf6-4c7d-8b8a-43546b3b59cd", + "name": "resize_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "just_resize" + } + }, + "outputs": { + "control": { + "id": "b034aa0f-4d0d-46e4-b5e3-e25a9588d087", + "name": "control", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } + } + } + }, + "width": 320, + "height": 511, + "position": { + "x": 4477.604342844504, + "y": -49.39005411272677 + } + }, + { + "id": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "type": "invocation", + "data": { + "id": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "7c2c4771-2161-4d77-aced-ff8c4b3f1c15", + "name": "prompt", + "fieldKind": "input", + "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "06d59e91-9cca-411d-bf05-86b099b3e8f7", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "858bc33c-134c-4bf6-8855-f943e1d26f14", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 4075, + "y": -825 + } + }, + { + "id": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "type": "invocation", + "data": { + "id": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "model": { + "id": "f4a915a5-593e-4b6d-9198-c78eb5cefaed", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, + "value": { + "model_name": "stable-diffusion-v1-5", + "base_model": "sd-1", + "model_type": "main" + } + } + }, + "outputs": { + "unet": { + "id": "ee24fb16-da38-4c66-9fbc-e8f296ed40d2", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "f3fb0524-8803-41c1-86db-a61a13ee6a33", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "vae": { + "id": "5c4878a8-b40f-44ab-b146-1c1f42c860b3", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } + }, + "width": 320, + "height": 227, + "position": { + "x": 3600, + "y": -1000 + } + }, + { + "id": "7ce68934-3419-42d4-ac70-82cfc9397306", + "type": "invocation", + "data": { + "id": "7ce68934-3419-42d4-ac70-82cfc9397306", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "7c2c4771-2161-4d77-aced-ff8c4b3f1c15", + "name": "prompt", + "fieldKind": "input", + "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "06d59e91-9cca-411d-bf05-86b099b3e8f7", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "858bc33c-134c-4bf6-8855-f943e1d26f14", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 4075, + "y": -1125 + } + }, + { + "id": "d204d184-f209-4fae-a0a1-d152800844e1", + "type": "invocation", + "data": { + "id": "d204d184-f209-4fae-a0a1-d152800844e1", + "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "4e0a3172-d3c2-4005-a84c-fa12a404f8a0", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "control_model": { + "id": "8cb2d998-4086-430a-8b13-94cbc81e3ca3", + "name": "control_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, + "value": { + "model_name": "sd-controlnet-canny", + "base_model": "sd-1" + } + }, + "control_weight": { + "id": "5e32bd8a-9dc8-42d8-9bcc-c2b0460c0b0f", + "name": "control_weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 1 + }, + "begin_step_percent": { + "id": "c258a276-352a-416c-8358-152f11005c0c", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "43001125-0d70-4f87-8e79-da6603ad6c33", + "name": "end_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "control_mode": { + "id": "d2f14561-9443-4374-9270-e2f05007944e", + "name": "control_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "balanced" + }, + "resize_mode": { + "id": "727ee7d3-8bf6-4c7d-8b8a-43546b3b59cd", + "name": "resize_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "just_resize" + } + }, + "outputs": { + "control": { + "id": "b034aa0f-4d0d-46e4-b5e3-e25a9588d087", + "name": "control", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } + } + } + }, + "width": 320, + "height": 511, + "position": { + "x": 4479.68542130465, + "y": -618.4221638099414 + } + }, + { + "id": "c4b23e64-7986-40c4-9cad-46327b12e204", + "type": "invocation", + "data": { + "id": "c4b23e64-7986-40c4-9cad-46327b12e204", + "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "189c8adf-68cc-4774-a729-49da89f6fdf1", + "name": "image", + "fieldKind": "input", + "label": "Canny Input Image", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + } + }, + "outputs": { + "image": { + "id": "1a31cacd-9d19-4f32-b558-c5e4aa39ce73", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "12f298fd-1d11-4cca-9426-01240f7ec7cf", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "c47dabcb-44e8-40c9-992d-81dca59f598e", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 225, + "position": { + "x": 3625, + "y": -425 + } + }, + { + "id": "ca4d5059-8bfb-447f-b415-da0faba5a143", + "type": "invocation", + "data": { + "id": "ca4d5059-8bfb-447f-b415-da0faba5a143", + "type": "collect", + "label": "ControlNet Collection", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "item": { + "id": "b16ae602-8708-4b1b-8d4f-9e0808d429ab", + "name": "item", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "CollectionItemField" + } + } + }, + "outputs": { + "collection": { + "id": "d8987dd8-dec8-4d94-816a-3e356af29884", + "name": "collection", + "fieldKind": "output", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "CollectionField" + } + } + } + }, + "width": 320, + "height": 104, + "position": { + "x": 4875, + "y": -575 + } + }, + { + "id": "018b1214-c2af-43a7-9910-fb687c6726d7", + "type": "invocation", + "data": { + "id": "018b1214-c2af-43a7-9910-fb687c6726d7", + "type": "midas_depth_image_processor", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "77f91980-c696-4a18-a9ea-6e2fc329a747", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "50710a20-2af5-424d-9d17-aa08167829c6", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "a_mult": { + "id": "f3b26f9d-2498-415e-9c01-197a8d06c0a5", + "name": "a_mult", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 2 + }, + "bg_th": { + "id": "4b1eb3ae-9d4a-47d6-b0ed-da62501e007f", + "name": "bg_th", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.1 + } + }, + "outputs": { + "image": { + "id": "b4ed637c-c4a0-4fdd-a24e-36d6412e4ccf", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "6bf9b609-d72c-4239-99bd-390a73cc3a9c", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "3e8aef09-cf44-4e3e-a490-d3c9e7b23119", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 4100, + "y": -75 + } + }, + { + "id": "c826ba5e-9676-4475-b260-07b85e88753c", + "type": "invocation", + "data": { + "id": "c826ba5e-9676-4475-b260-07b85e88753c", + "type": "canny_image_processor", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "08331ea6-99df-4e61-a919-204d9bfa8fb2", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "33a37284-06ac-459c-ba93-1655e4f69b2d", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "low_threshold": { + "id": "21ec18a3-50c5-4ba1-9642-f921744d594f", + "name": "low_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 100 + }, + "high_threshold": { + "id": "ebeab271-a5ff-4c88-acfd-1d0271ab6ed4", + "name": "high_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 200 + } + }, + "outputs": { + "image": { + "id": "c0caadbf-883f-4cb4-a62d-626b9c81fc4e", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "df225843-8098-49c0-99d1-3b0b6600559f", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "e4abe0de-aa16-41f3-9cd7-968b49db5da3", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 4095.757337055795, + "y": -455.63440891935863 + } + }, + { + "id": "9db25398-c869-4a63-8815-c6559341ef12", + "type": "invocation", + "data": { + "id": "9db25398-c869-4a63-8815-c6559341ef12", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "2f269793-72e5-4ff3-b76c-fab4f93e983f", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "4aaedd3b-cc77-420c-806e-c7fa74ec4cdf", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "432b066a-2462-4d18-83d9-64620b72df45", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "61f86e0f-7c46-40f8-b3f5-fe2f693595ca", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "39b6c89a-37ef-4a7e-9509-daeca49d5092", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "6204e9b0-61dd-4250-b685-2092ba0e28e6", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "b4140649-8d5d-4d2d-bfa6-09e389ede5f9", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "f3a0c0c8-fc24-4646-8be1-ed8cdd140828", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 267, + "position": { + "x": 5675, + "y": -825 + } + }, + { + "id": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "invocation", + "data": { + "id": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", + "inputs": { + "positive_conditioning": { + "id": "869cd309-c238-444b-a1a0-5021f99785ba", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "343447b4-1e37-4e9e-8ac7-4d04864066af", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "b556571e-0cf9-4e03-8cfc-5caad937d957", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "a3b3d2de-9308-423e-b00d-c209c3e6e808", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 10 + }, + "cfg_scale": { + "id": "b13c50a4-ec7e-4579-b0ef-2fe5df2605ea", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 7.5 + }, + "denoising_start": { + "id": "57d5d755-f58f-4347-b991-f0bca4a0ab29", + "name": "denoising_start", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "denoising_end": { + "id": "323e78a6-880a-4d73-a62c-70faff965aa6", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "c25fdc17-a089-43ac-953e-067c45d5c76b", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "euler" + }, + "unet": { + "id": "6cde662b-e633-4569-b6b4-ec87c52c9c11", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "276a4df9-bb26-4505-a4d3-a94e18c7b541", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "48d40c51-b5e2-4457-a428-eef0696695e8", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "75dd8af2-e7d7-48b4-a574-edd9f6e686ad", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "b90460cf-d0c9-4676-8909-2e8e22dc8ee5", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "9223d67b-1dd7-4b34-a45f-ed0a725d9702", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "4ee99177-6923-4b7f-8fe0-d721dd7cb05b", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "7fb4e326-a974-43e8-9ee7-2e3ab235819d", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "6bb8acd0-8973-4195-a095-e376385dc705", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "795dea52-1c7d-4e64-99f7-2f60ec6e3ab9", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 705, + "position": { + "x": 5274.672987098195, + "y": -823.0752416664332 + } + }, + { + "id": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "invocation", + "data": { + "id": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "inputs": { + "seed": { + "id": "96d7667a-9c56-4fb4-99db-868e2f08e874", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "1ce644ea-c9bf-48c5-9822-bdec0d2895c5", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "26d68b53-8a04-4db7-b0f8-57c9bddc0e49", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "cf8fb92e-2a8e-4cd5-baf5-4011e0ddfa22", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "d9cb9305-6b3a-49a9-b27c-00fb3a58b85c", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "4ff28d00-ceee-42b8-90e7-f5e5a518376d", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "a6314b9c-346a-4aa6-9260-626ed46c060a", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4875, + "y": -675 + } + }, + { + "id": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "type": "invocation", + "data": { + "id": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "inputs": { + "low": { + "id": "a190ad12-a6bd-499b-a82a-100e09fe9aa4", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "a085063f-b9ba-46f2-a21b-c46c321949aa", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "a15aff56-4874-47fe-be32-d66745ed2ab5", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4875, + "y": -750 + } + } + ], + "edges": [ + { + "id": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce-2e77a0a1-db6a-47a2-a8bf-1e003be6423b-collapsed", + "source": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "target": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "collapsed" + }, + { + "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9clip-7ce68934-3419-42d4-ac70-82cfc9397306clip", + "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "target": "7ce68934-3419-42d4-ac70-82cfc9397306", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9clip-273e3f96-49ea-4dc5-9d5b-9660390f14e1clip", + "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "target": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-a33199c2-8340-401e-b8a2-42ffa875fc1ccontrol-ca4d5059-8bfb-447f-b415-da0faba5a143item", + "source": "a33199c2-8340-401e-b8a2-42ffa875fc1c", + "target": "ca4d5059-8bfb-447f-b415-da0faba5a143", + "type": "default", + "sourceHandle": "control", + "targetHandle": "item" + }, + { + "id": "reactflow__edge-d204d184-f209-4fae-a0a1-d152800844e1control-ca4d5059-8bfb-447f-b415-da0faba5a143item", + "source": "d204d184-f209-4fae-a0a1-d152800844e1", + "target": "ca4d5059-8bfb-447f-b415-da0faba5a143", + "type": "default", + "sourceHandle": "control", + "targetHandle": "item" + }, + { + "id": "reactflow__edge-8e860e51-5045-456e-bf04-9a62a2a5c49eimage-018b1214-c2af-43a7-9910-fb687c6726d7image", + "source": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "target": "018b1214-c2af-43a7-9910-fb687c6726d7", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-018b1214-c2af-43a7-9910-fb687c6726d7image-a33199c2-8340-401e-b8a2-42ffa875fc1cimage", + "source": "018b1214-c2af-43a7-9910-fb687c6726d7", + "target": "a33199c2-8340-401e-b8a2-42ffa875fc1c", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-c4b23e64-7986-40c4-9cad-46327b12e204image-c826ba5e-9676-4475-b260-07b85e88753cimage", + "source": "c4b23e64-7986-40c4-9cad-46327b12e204", + "target": "c826ba5e-9676-4475-b260-07b85e88753c", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-c826ba5e-9676-4475-b260-07b85e88753cimage-d204d184-f209-4fae-a0a1-d152800844e1image", + "source": "c826ba5e-9676-4475-b260-07b85e88753c", + "target": "d204d184-f209-4fae-a0a1-d152800844e1", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9vae-9db25398-c869-4a63-8815-c6559341ef12vae", + "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "target": "9db25398-c869-4a63-8815-c6559341ef12", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-ac481b7f-08bf-4a9d-9e0c-3a82ea5243celatents-9db25398-c869-4a63-8815-c6559341ef12latents", + "source": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "target": "9db25398-c869-4a63-8815-c6559341ef12", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-ca4d5059-8bfb-447f-b415-da0faba5a143collection-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cecontrol", + "source": "ca4d5059-8bfb-447f-b415-da0faba5a143", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "collection", + "targetHandle": "control" + }, + { + "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9unet-ac481b7f-08bf-4a9d-9e0c-3a82ea5243ceunet", + "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-273e3f96-49ea-4dc5-9d5b-9660390f14e1conditioning-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cenegative_conditioning", + "source": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-7ce68934-3419-42d4-ac70-82cfc9397306conditioning-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cepositive_conditioning", + "source": "7ce68934-3419-42d4-ac70-82cfc9397306", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-2e77a0a1-db6a-47a2-a8bf-1e003be6423bnoise-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cenoise", + "source": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-8b260b4d-3fd6-44d4-b1be-9f0e43c628cevalue-2e77a0a1-db6a-47a2-a8bf-1e003be6423bseed", + "source": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "target": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + } + ] +} \ No newline at end of file diff --git a/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json b/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json new file mode 100644 index 0000000000..08e76fd793 --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json @@ -0,0 +1,975 @@ +{ + "name": "Prompt from File", + "author": "InvokeAI", + "description": "Sample workflow using Prompt from File node", + "version": "0.1.0", + "contact": "invoke@invoke.ai", + "tags": "text2image, prompt from file, default", + "notes": "", + "exposedFields": [ + { + "nodeId": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "fieldName": "model" + }, + { + "nodeId": "1b7e0df8-8589-4915-a4ea-c0088f15d642", + "fieldName": "file_path" + } + ], + "meta": { + "category": "default", + "version": "2.0.0" + }, + "id": "d1609af5-eb0a-4f73-b573-c9af96a8d6bf", + "nodes": [ + { + "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "type": "invocation", + "data": { + "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "type": "compel", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "dcdf3f6d-9b96-4bcd-9b8d-f992fefe4f62", + "name": "prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "3f1981c9-d8a9-42eb-a739-4f120eb80745", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "46205e6c-c5e2-44cb-9c82-1cd20b95674a", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 925, + "y": -200 + } + }, + { + "id": "1b7e0df8-8589-4915-a4ea-c0088f15d642", + "type": "invocation", + "data": { + "id": "1b7e0df8-8589-4915-a4ea-c0088f15d642", + "type": "prompt_from_file", + "label": "Prompts from File", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", + "inputs": { + "file_path": { + "id": "37e37684-4f30-4ec8-beae-b333e550f904", + "name": "file_path", + "fieldKind": "input", + "label": "Prompts File Path", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "pre_prompt": { + "id": "7de02feb-819a-4992-bad3-72a30920ddea", + "name": "pre_prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "post_prompt": { + "id": "95f191d8-a282-428e-bd65-de8cb9b7513a", + "name": "post_prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "start_line": { + "id": "efee9a48-05ab-4829-8429-becfa64a0782", + "name": "start_line", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1 + }, + "max_prompts": { + "id": "abebb428-3d3d-49fd-a482-4e96a16fff08", + "name": "max_prompts", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1 + } + }, + "outputs": { + "collection": { + "id": "77d5d7f1-9877-4ab1-9a8c-33e9ffa9abf3", + "name": "collection", + "fieldKind": "output", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 580, + "position": { + "x": 475, + "y": -400 + } + }, + { + "id": "1b89067c-3f6b-42c8-991f-e3055789b251", + "type": "invocation", + "data": { + "id": "1b89067c-3f6b-42c8-991f-e3055789b251", + "type": "iterate", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "inputs": { + "collection": { + "id": "4c564bf8-5ed6-441e-ad2c-dda265d5785f", + "name": "collection", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "CollectionField" + } + } + }, + "outputs": { + "item": { + "id": "36340f9a-e7a5-4afa-b4b5-313f4e292380", + "name": "item", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "CollectionItemField" + } + }, + "index": { + "id": "1beca95a-2159-460f-97ff-c8bab7d89336", + "name": "index", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "total": { + "id": "ead597b8-108e-4eda-88a8-5c29fa2f8df9", + "name": "total", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 925, + "y": -400 + } + }, + { + "id": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "type": "invocation", + "data": { + "id": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "model": { + "id": "3f264259-3418-47d5-b90d-b6600e36ae46", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, + "value": { + "model_name": "stable-diffusion-v1-5", + "base_model": "sd-1", + "model_type": "main" + } + } + }, + "outputs": { + "unet": { + "id": "8e182ea2-9d0a-4c02-9407-27819288d4b5", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "d67d9d30-058c-46d5-bded-3d09d6d1aa39", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "vae": { + "id": "89641601-0429-4448-98d5-190822d920d8", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } + }, + "width": 320, + "height": 227, + "position": { + "x": 0, + "y": -375 + } + }, + { + "id": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "invocation", + "data": { + "id": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "compel", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "dcdf3f6d-9b96-4bcd-9b8d-f992fefe4f62", + "name": "prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "3f1981c9-d8a9-42eb-a739-4f120eb80745", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "46205e6c-c5e2-44cb-9c82-1cd20b95674a", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 925, + "y": -275 + } + }, + { + "id": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", + "type": "invocation", + "data": { + "id": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", + "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", + "inputs": { + "seed": { + "id": "b722d84a-eeee-484f-bef2-0250c027cb67", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "d5f8ce11-0502-4bfc-9a30-5757dddf1f94", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "f187d5ff-38a5-4c3f-b780-fc5801ef34af", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "12f112b8-8b76-4816-b79e-662edc9f9aa5", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "08576ad1-96d9-42d2-96ef-6f5c1961933f", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "f3e1f94a-258d-41ff-9789-bd999bd9f40d", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "6cefc357-4339-415e-a951-49b9c2be32f4", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 925, + "y": 25 + } + }, + { + "id": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5", + "type": "invocation", + "data": { + "id": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "low": { + "id": "b9fc6cf1-469c-4037-9bf0-04836965826f", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "06eac725-0f60-4ba2-b8cd-7ad9f757488c", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "df08c84e-7346-4e92-9042-9e5cb773aaff", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 925, + "y": -50 + } + }, + { + "id": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", + "type": "invocation", + "data": { + "id": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "022e4b33-562b-438d-b7df-41c3fd931f40", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "67cb6c77-a394-4a66-a6a9-a0a7dcca69ec", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "7b3fd9ad-a4ef-4e04-89fa-3832a9902dbd", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "5ac5680d-3add-4115-8ec0-9ef5bb87493b", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "db8297f5-55f8-452f-98cf-6572c2582152", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "d8778d0c-592a-4960-9280-4e77e00a7f33", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "c8b0a75a-f5de-4ff2-9227-f25bb2b97bec", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "83c05fbf-76b9-49ab-93c4-fa4b10e793e4", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 267, + "position": { + "x": 2037.861329274915, + "y": -329.8393457509562 + } + }, + { + "id": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "invocation", + "data": { + "id": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", + "inputs": { + "positive_conditioning": { + "id": "751fb35b-3f23-45ce-af1c-053e74251337", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "b9dc06b6-7481-4db1-a8c2-39d22a5eacff", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "6e15e439-3390-48a4-8031-01e0e19f0e1d", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "bfdfb3df-760b-4d51-b17b-0abb38b976c2", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 10 + }, + "cfg_scale": { + "id": "47770858-322e-41af-8494-d8b63ed735f3", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 7.5 + }, + "denoising_start": { + "id": "2ba78720-ee02-4130-a348-7bc3531f790b", + "name": "denoising_start", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "denoising_end": { + "id": "a874dffb-d433-4d1a-9f59-af4367bb05e4", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "36e021ad-b762-4fe4-ad4d-17f0291c40b2", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "euler" + }, + "unet": { + "id": "98d3282d-f9f6-4b5e-b9e8-58658f1cac78", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "f2ea3216-43d5-42b4-887f-36e8f7166d53", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "d0780610-a298-47c8-a54e-70e769e0dfe2", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "fdb40970-185e-4ea8-8bb5-88f06f91f46a", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "3af2d8c5-de83-425c-a100-49cb0f1f4385", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "e05b538a-1b5a-4aa5-84b1-fd2361289a81", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "463a419e-df30-4382-8ffb-b25b25abe425", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "559ee688-66cf-4139-8b82-3d3aa69995ce", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "0b4285c2-e8b9-48e5-98f6-0a49d3f98fd2", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "8b0881b9-45e5-47d5-b526-24b6661de0ee", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 705, + "position": { + "x": 1570.9941088179146, + "y": -407.6505491604564 + } + } + ], + "edges": [ + { + "id": "1b89067c-3f6b-42c8-991f-e3055789b251-fc9d0e35-a6de-4a19-84e1-c72497c823f6-collapsed", + "source": "1b89067c-3f6b-42c8-991f-e3055789b251", + "target": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "collapsed" + }, + { + "id": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5-0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77-collapsed", + "source": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5", + "target": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", + "type": "collapsed" + }, + { + "id": "reactflow__edge-1b7e0df8-8589-4915-a4ea-c0088f15d642collection-1b89067c-3f6b-42c8-991f-e3055789b251collection", + "source": "1b7e0df8-8589-4915-a4ea-c0088f15d642", + "target": "1b89067c-3f6b-42c8-991f-e3055789b251", + "type": "default", + "sourceHandle": "collection", + "targetHandle": "collection" + }, + { + "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426clip-fc9d0e35-a6de-4a19-84e1-c72497c823f6clip", + "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "target": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-1b89067c-3f6b-42c8-991f-e3055789b251item-fc9d0e35-a6de-4a19-84e1-c72497c823f6prompt", + "source": "1b89067c-3f6b-42c8-991f-e3055789b251", + "target": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "default", + "sourceHandle": "item", + "targetHandle": "prompt" + }, + { + "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426clip-c2eaf1ba-5708-4679-9e15-945b8b432692clip", + "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "target": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5value-0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77seed", + "source": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5", + "target": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-fc9d0e35-a6de-4a19-84e1-c72497c823f6conditioning-2fb1577f-0a56-4f12-8711-8afcaaaf1d5epositive_conditioning", + "source": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-c2eaf1ba-5708-4679-9e15-945b8b432692conditioning-2fb1577f-0a56-4f12-8711-8afcaaaf1d5enegative_conditioning", + "source": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77noise-2fb1577f-0a56-4f12-8711-8afcaaaf1d5enoise", + "source": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", + "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426unet-2fb1577f-0a56-4f12-8711-8afcaaaf1d5eunet", + "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-2fb1577f-0a56-4f12-8711-8afcaaaf1d5elatents-491ec988-3c77-4c37-af8a-39a0c4e7a2a1latents", + "source": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "target": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426vae-491ec988-3c77-4c37-af8a-39a0c4e7a2a1vae", + "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "target": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + } + ] +} \ No newline at end of file From 79cf3ec9a5eb7f39109c5fc00b501953773d073c Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Wed, 20 Dec 2023 18:53:49 +1100 Subject: [PATCH 224/515] Add facedetailer workflow --- ...er with IP-Adapter & Canny (See Note).json | 2930 +++++++++++++++++ 1 file changed, 2930 insertions(+) create mode 100644 invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note).json diff --git a/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note).json b/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note).json new file mode 100644 index 0000000000..6f392d6a7b --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note).json @@ -0,0 +1,2930 @@ +{ + "id": "972fc0e9-a13f-4658-86b9-aef100d124ba", + "name": "Face Detailer with IP-Adapter & Canny (See Note)", + "author": "kosmoskatten", + "description": "A workflow to add detail to and improve faces. This workflow is most effective when used with a model that creates realistic outputs. For best results, use this image as the blur mask: https://i.imgur.com/Gxi61zP.png", + "version": "1.0.0", + "contact": "invoke@invoke.ai", + "tags": "face detailer, IP-Adapter, Canny", + "notes": "", + "exposedFields": [ + { + "nodeId": "cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05", + "fieldName": "value" + }, + { + "nodeId": "64712037-92e8-483f-9f6e-87588539c1b8", + "fieldName": "value" + }, + { + "nodeId": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "fieldName": "radius" + }, + { + "nodeId": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "fieldName": "value" + }, + { + "nodeId": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "fieldName": "image" + }, + { + "nodeId": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "fieldName": "image" + } + ], + "meta": { + "category": "default", + "version": "2.0.0" + }, + "nodes": [ + { + "id": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "type": "invocation", + "data": { + "id": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "916b229a-38e1-45a2-a433-cca97495b143", + "name": "prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "ae9aeb1a-4ebd-4bc3-b6e6-a8c9adca01f6", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "4d59bad1-99a9-43e2-bdb4-7a0f3dd5b787", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 2575, + "y": -250 + } + }, + { + "id": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "invocation", + "data": { + "id": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "img_resize", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "48ff6f70-380c-4e19-acf7-91063cfff8a8", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "2a348a03-07a3-4a97-93c8-46051045b32f", + "name": "image", + "fieldKind": "input", + "label": "Blur Mask", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "6b95969c-ca73-4b54-815d-7aae305a67bd", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "af83c526-c730-4a34-8f73-80f443fecc05", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "resample_mode": { + "id": "43f7d6b5-ebe0-43c4-bf5d-8fb7fdc40a3f", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "lanczos" + } + }, + "outputs": { + "image": { + "id": "e492b013-615d-4dfd-b0d8-7df7b5ba9a9d", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "05f829b3-c253-495a-b1ad-9906c0833e49", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "65d5d662-2527-4f3c-8a87-0a7d9d4486de", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 397, + "position": { + "x": 4675, + "y": 625 + } + }, + { + "id": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "type": "invocation", + "data": { + "id": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "729c571b-d5a0-4b53-8f50-5e11eb744f66", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + }, + "value": { + "image_name": "42a524fd-ed77-46e2-b52f-40375633f357.png" + } + } + }, + "outputs": { + "image": { + "id": "3632a144-58d6-4447-bafc-e4f7d6ca96bf", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "30faefcc-81a1-445b-a3fe-0110ceb56772", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "d173d225-849a-4498-a75d-ba17210dbd3e", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 489, + "position": { + "x": 2050, + "y": -75 + } + }, + { + "id": "9ae34718-a17d-401d-9859-086896c29fca", + "type": "invocation", + "data": { + "id": "9ae34718-a17d-401d-9859-086896c29fca", + "type": "face_off", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "0144d549-b04a-49c2-993f-9ecb2695191a", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "9c580dec-a958-43a4-9aa0-7ab9491c56a0", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "face_id": { + "id": "1ee762e1-810f-46f7-a591-ecd28abff85b", + "name": "face_id", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "minimum_confidence": { + "id": "74d2bae8-7ac5-4f8f-afb7-1efc76ed72a0", + "name": "minimum_confidence", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.5 + }, + "x_offset": { + "id": "f1c1489d-cbbb-45d2-ba94-e150fc5ce24d", + "name": "x_offset", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "y_offset": { + "id": "6621377a-7e29-4841-aa47-aa7d438662f9", + "name": "y_offset", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "padding": { + "id": "0414c830-1be8-48cd-b0c8-6de10b099029", + "name": "padding", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 64 + }, + "chunk": { + "id": "22eba30a-c68a-4e5f-8f97-315830959b04", + "name": "chunk", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "7d8fa807-0e9c-4d6a-a85a-388bd0cb5166", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "048361ca-314c-44a4-8b6e-ca4917e3468f", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "7b721071-63e5-4d54-9607-9fa2192163a8", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "mask": { + "id": "a9c6194a-3dbd-4b18-af04-a85a9498f04e", + "name": "mask", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "x": { + "id": "d072582c-2db5-430b-9e50-b50277baa7d5", + "name": "x", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "y": { + "id": "40624813-e55d-42d7-bc14-dea48ccfd9c8", + "name": "y", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 657, + "position": { + "x": 2575, + "y": 200 + } + }, + { + "id": "50a8db6a-3796-4522-8547-53275efa4e7d", + "type": "invocation", + "data": { + "id": "50a8db6a-3796-4522-8547-53275efa4e7d", + "type": "img_resize", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "6bf91925-e22e-4bcb-90e4-f8ac32ddff36", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "65af3f4e-7a89-4df4-8ba9-377af1701d16", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "1f036fee-77f3-480f-b690-089b27616ab8", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "0c703b6e-e91a-4cd7-8b9e-b97865f76793", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "resample_mode": { + "id": "ed77cf71-94cb-4da4-b536-75cb7aad8e54", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "lanczos" + } + }, + "outputs": { + "image": { + "id": "0d9e437b-6a08-45e1-9a55-ef03ae28e616", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "7c56c704-b4e5-410f-bb62-cd441ddb454f", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "45e12e17-7f25-46bd-a804-4384ec6b98cc", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3000, + "y": 0 + } + }, + { + "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "invocation", + "data": { + "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "i2l", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "6c4d2827-4995-49d4-94ce-0ba0541d8839", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "vae": { + "id": "9d6e3ab6-b6a4-45ac-ad75-0a96efba4c2f", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "9c258141-a75d-4ffd-bce5-f3fb3d90b720", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "2235cc48-53c9-4e8a-a74a-ed41c61f2993", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "latents": { + "id": "8eb9293f-8f43-4c0c-b0fb-8c4db1200f87", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "ce493959-d308-423c-b0f5-db05912e0318", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "827bf290-94fb-455f-a970-f98ba8800eac", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3100, + "y": -275 + } + }, + { + "id": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "invocation", + "data": { + "id": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", + "inputs": { + "positive_conditioning": { + "id": "673e4094-448b-4c59-ab05-d05b29b3e07f", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "3b3bac27-7e8a-4c4e-8b5b-c5231125302a", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "d7c20d11-fbfb-4613-ba58-bf00307e53be", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "e4af3bea-dae4-403f-8cec-6cb66fa888ce", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 80 + }, + "cfg_scale": { + "id": "9ec125bb-6819-4970-89fe-fe09e6b96885", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 3 + }, + "denoising_start": { + "id": "7190b40d-9467-4238-b180-0d19065258e2", + "name": "denoising_start", + "fieldKind": "input", + "label": "Original Image Percent", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.2 + }, + "denoising_end": { + "id": "c033f2d4-b60a-4a25-8a88-7852b556657a", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "bb043b8a-a119-4b2a-bb88-8afb364bdcc1", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "dpmpp_2m_sde_k" + }, + "unet": { + "id": "16d7688a-fc80-405c-aa55-a8ba2a1efecb", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "d0225ede-7d03-405d-b5b4-97c07d9b602b", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "6fbe0a17-6b85-4d3e-835d-0e23d3040bf4", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "2e4e1e6e-0278-47e3-a464-1a51760a9411", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "c9703a2e-4178-493c-90b9-81325a83a5ec", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "b2527e78-6f55-4274-aaa0-8fef1c928faa", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "cceec5a4-d3e9-4cff-a1e1-b5b62cb12588", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "6eca0515-4357-40be-ac8d-f84eb927dc31", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "14453d1c-6202-4377-811c-88ac9c024e77", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "0e0e04dc-4158-4461-b0ba-6c6af16e863c", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 705, + "position": { + "x": 4597.554345564559, + "y": -265.6421598623905 + } + }, + { + "id": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "invocation", + "data": { + "id": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", + "inputs": { + "seed": { + "id": "c6b5bc5e-ef09-4f9c-870e-1110a0f5017f", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 123451234 + }, + "width": { + "id": "7bdd24b6-4f14-4d0a-b8fc-9b24145b4ba9", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "dc15bf97-b8d5-49c6-999b-798b33679418", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "00626297-19dd-4989-9688-e8d527c9eacf", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "2915f8ae-0f6e-4f26-8541-0ebf477586b6", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "26587461-a24a-434d-9ae5-8d8f36fea221", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "335d08fc-8bf1-4393-8902-2c579f327b51", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4025, + "y": -175 + } + }, + { + "id": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "invocation", + "data": { + "id": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "2f077d6f-579e-4399-9986-3feabefa9ade", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "568a1537-dc7c-44f5-8a87-3571b0528b85", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "392c3757-ad3a-46af-8d76-9724ca30aad8", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "90f98601-c05d-453e-878b-18e23cc222b4", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "6be5cad7-dd41-4f83-98e7-124a6ad1728d", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "image": { + "id": "6f90a4f5-42dd-472a-8f30-403bcbc16531", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "4d1c8a66-35fc-40e9-a7a9-d8604a247d33", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "e668cfb3-aedc-4032-94c9-b8add1fbaacf", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 267, + "position": { + "x": 4980.1395106966565, + "y": -255.9158921745602 + } + }, + { + "id": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "invocation", + "data": { + "id": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "lscale", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "latents": { + "id": "79e8f073-ddc3-416e-b818-6ef8ec73cc07", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "scale_factor": { + "id": "23f78d24-72df-4bde-8d3c-8593ce507205", + "name": "scale_factor", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1.5 + }, + "mode": { + "id": "4ab30c38-57d3-480d-8b34-918887e92340", + "name": "mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "bilinear" + }, + "antialias": { + "id": "22b39171-0003-44f0-9c04-d241581d2a39", + "name": "antialias", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "latents": { + "id": "f6d71aef-6251-4d51-afa8-f692a72bfd1f", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "8db4cf33-5489-4887-a5f6-5e926d959c40", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "74e1ec7c-50b6-4e97-a7b8-6602e6d78c08", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3075, + "y": -175 + } + }, + { + "id": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "invocation", + "data": { + "id": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "img_paste", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "159f5a3c-4b47-46dd-b8fe-450455ee3dcf", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "base_image": { + "id": "445cfacf-5042-49ae-a63e-c19f21f90b1d", + "name": "base_image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "image": { + "id": "c292948b-8efd-4f5c-909d-d902cfd1509a", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "mask": { + "id": "8b7bc7e9-35b5-45bc-9b8c-e15e92ab4d74", + "name": "mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "x": { + "id": "0694ba58-07bc-470b-80b5-9c7a99b64607", + "name": "x", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "y": { + "id": "40f8b20b-f804-4ec2-9622-285726f7665f", + "name": "y", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "crop": { + "id": "8a09a132-c07e-4cfb-8ec2-7093dc063f99", + "name": "crop", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "4a96ec78-d4b6-435f-b5a3-6366cbfcfba7", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "c1ee69c7-6ca0-4604-abc9-b859f4178421", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "6c198681-5f16-4526-8e37-0bf000962acd", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 504, + "position": { + "x": 6000, + "y": -200 + } + }, + { + "id": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "invocation", + "data": { + "id": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "img_resize", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "afbbb112-60e4-44c8-bdfd-30f48d58b236", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "2a348a03-07a3-4a97-93c8-46051045b32f", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "6b95969c-ca73-4b54-815d-7aae305a67bd", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "af83c526-c730-4a34-8f73-80f443fecc05", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "resample_mode": { + "id": "43f7d6b5-ebe0-43c4-bf5d-8fb7fdc40a3f", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "lanczos" + } + }, + "outputs": { + "image": { + "id": "e492b013-615d-4dfd-b0d8-7df7b5ba9a9d", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "05f829b3-c253-495a-b1ad-9906c0833e49", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "65d5d662-2527-4f3c-8a87-0a7d9d4486de", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 397, + "position": { + "x": 5500, + "y": -225 + } + }, + { + "id": "cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05", + "type": "invocation", + "data": { + "id": "cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05", + "type": "float", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "value": { + "id": "d5d8063d-44f6-4e20-b557-2f4ce093c7ef", + "name": "value", + "fieldKind": "input", + "label": "Orignal Image Percentage", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.4 + } + }, + "outputs": { + "value": { + "id": "562416a4-0d75-48aa-835e-5e2d221dfbb7", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4025, + "y": -75 + } + }, + { + "id": "64712037-92e8-483f-9f6e-87588539c1b8", + "type": "invocation", + "data": { + "id": "64712037-92e8-483f-9f6e-87588539c1b8", + "type": "float", + "label": "CFG Main", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "value": { + "id": "750358d5-251d-4fe6-a673-2cde21995da2", + "name": "value", + "fieldKind": "input", + "label": "CFG Main", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 6 + } + }, + "outputs": { + "value": { + "id": "eea7f6d2-92e4-4581-b555-64a44fda2be9", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4025, + "y": 75 + } + }, + { + "id": "c865f39f-f830-4ed7-88a5-e935cfe050a9", + "type": "invocation", + "data": { + "id": "c865f39f-f830-4ed7-88a5-e935cfe050a9", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "low": { + "id": "31e29709-9f19-45b0-a2de-fdee29a50393", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "d47d875c-509d-4fa3-9112-e335d3144a17", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "15b8d1ea-d2ac-4b3a-9619-57bba9a6da75", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4025, + "y": -275 + } + }, + { + "id": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "type": "invocation", + "data": { + "id": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "model": { + "id": "54e737f9-2547-4bd9-a607-733d02f0c990", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, + "value": { + "model_name": "epicrealism_naturalSinRC1VAE", + "base_model": "sd-1", + "model_type": "main" + } + } + }, + "outputs": { + "unet": { + "id": "3483ea21-f0b3-4422-894b-36c5d7701365", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "dddd055f-5c1b-4e61-977b-6393da9006fa", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "vae": { + "id": "879893b4-3415-4879-8dff-aa1727ef5e63", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } + }, + "width": 320, + "height": 227, + "position": { + "x": 2050, + "y": -525 + } + }, + { + "id": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "type": "invocation", + "data": { + "id": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "prompt": { + "id": "916b229a-38e1-45a2-a433-cca97495b143", + "name": "prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "ae9aeb1a-4ebd-4bc3-b6e6-a8c9adca01f6", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "4d59bad1-99a9-43e2-bdb4-7a0f3dd5b787", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 2550, + "y": -525 + } + }, + { + "id": "22b750db-b85e-486b-b278-ac983e329813", + "type": "invocation", + "data": { + "id": "22b750db-b85e-486b-b278-ac983e329813", + "type": "ip_adapter", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "088a126c-ab1d-4c7a-879a-c1eea09eac8e", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "ip_adapter_model": { + "id": "f2ac529f-f778-4a12-af12-0c7e449de17a", + "name": "ip_adapter_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterModelField" + }, + "value": { + "model_name": "ip_adapter_plus_face_sd15", + "base_model": "sd-1" + } + }, + "weight": { + "id": "ddb4a7cb-607d-47e8-b46b-cc1be27ebde0", + "name": "weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.5 + }, + "begin_step_percent": { + "id": "1807371f-b56c-4777-baa2-de71e21f0b80", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "4ea8e4dc-9cd7-445e-9b32-8934c652381b", + "name": "end_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.8 + } + }, + "outputs": { + "ip_adapter": { + "id": "739b5fed-d813-4611-8f87-1dded25a7619", + "name": "ip_adapter", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterField" + } + } + } + }, + "width": 320, + "height": 396, + "position": { + "x": 3575, + "y": -200 + } + }, + { + "id": "f60b6161-8f26-42f6-89ff-545e6011e501", + "type": "invocation", + "data": { + "id": "f60b6161-8f26-42f6-89ff-545e6011e501", + "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "96434c75-abd8-4b73-ab82-0b358e4735bf", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "control_model": { + "id": "21551ac2-ee50-4fe8-b06c-5be00680fb5c", + "name": "control_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, + "value": { + "model_name": "canny", + "base_model": "sd-1" + } + }, + "control_weight": { + "id": "1dacac0a-b985-4bdf-b4b5-b960f4cff6ed", + "name": "control_weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 0.5 + }, + "begin_step_percent": { + "id": "b2a3f128-7fc1-4c12-acc8-540f013c856b", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "0e701834-f7ba-4a6e-b9cb-6d4aff5dacd8", + "name": "end_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.5 + }, + "control_mode": { + "id": "f9a5f038-ae80-4b6e-8a48-362a2c858299", + "name": "control_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "balanced" + }, + "resize_mode": { + "id": "5369dd44-a708-4b66-8182-fea814d2a0ae", + "name": "resize_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "just_resize" + } + }, + "outputs": { + "control": { + "id": "f470a1af-7b68-4849-a144-02bc345fd810", + "name": "control", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } + } + } + }, + "width": 320, + "height": 511, + "position": { + "x": 3950, + "y": 150 + } + }, + { + "id": "8fe598c6-d447-44fa-a165-4975af77d080", + "type": "invocation", + "data": { + "id": "8fe598c6-d447-44fa-a165-4975af77d080", + "type": "canny_image_processor", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "855f4575-309a-4810-bd02-7c4a04e0efc8", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "7d2695fa-a617-431a-bc0e-69ac7c061651", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "low_threshold": { + "id": "ceb37a49-c989-4afa-abbf-49b6e52ef663", + "name": "low_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 100 + }, + "high_threshold": { + "id": "6ec118f8-ca6c-4be7-9951-6eee58afbc1b", + "name": "high_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 200 + } + }, + "outputs": { + "image": { + "id": "264bcaaf-d185-43ce-9e1a-b6f707140c0c", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "0d374d8e-d5c7-49be-9057-443e32e45048", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "fa892b68-6135-4598-a765-e79cd5c6e3f6", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 3519.4131037388597, + "y": 576.7946795840575 + } + }, + { + "id": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "invocation", + "data": { + "id": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "img_scale", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "46fc750e-7dda-4145-8f72-be88fb93f351", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "f7f41bb3-9a5a-4022-b671-0acc2819f7c3", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "scale_factor": { + "id": "1ae95574-f725-4cbc-bb78-4c9db240f78a", + "name": "scale_factor", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1.5 + }, + "resample_mode": { + "id": "0756e37d-3d01-4c2c-9364-58e8978b04a2", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "bicubic" + } + }, + "outputs": { + "image": { + "id": "2729e697-cacc-4874-94bf-3aee5c18b5f9", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "d9551981-cbd3-419a-bcb9-5b50600e8c18", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "3355c99e-cdc6-473b-a7c6-a9d1dcc941e5", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 3079.916484101321, + "y": 151.0148192064986 + } + }, + { + "id": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "invocation", + "data": { + "id": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "mask_combine", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "061ea794-2494-429e-bfdd-5fbd2c7eeb99", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "mask1": { + "id": "446c6c99-9cb5-4035-a452-ab586ef4ede9", + "name": "mask1", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "mask2": { + "id": "ebbe37b8-8bf3-4520-b6f5-631fe2d05d66", + "name": "mask2", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + } + }, + "outputs": { + "image": { + "id": "7c33cfae-ea9a-4572-91ca-40fc4112369f", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "7410c10c-3060-44a9-b399-43555c3e1156", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "3eb74c96-ae3e-4091-b027-703428244fdf", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 283, + "position": { + "x": 5450, + "y": 250 + } + }, + { + "id": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "type": "invocation", + "data": { + "id": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "type": "img_blur", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "755d4fa2-a520-4837-a3da-65e1f479e6e6", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "a4786d7d-9593-4f5f-830b-d94bb0e42bca", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "radius": { + "id": "e1c9afa0-4d41-4664-b560-e1e85f467267", + "name": "radius", + "fieldKind": "input", + "label": "Mask Blue", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 150 + }, + "blur_type": { + "id": "f6231886-0981-444b-bd26-24674f87e7cb", + "name": "blur_type", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "gaussian" + } + }, + "outputs": { + "image": { + "id": "20c7bcfc-269d-4119-8b45-6c59dd4005d7", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "37e228ef-cb59-4477-b18f-343609d7bb4e", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "2de6080e-8bc3-42cd-bb8a-afd72f082df4", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 5000, + "y": 300 + } + }, + { + "id": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "type": "invocation", + "data": { + "id": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "type": "float", + "label": "Face Detail Scale", + "isOpen": false, + "notes": "The image is cropped to the face and scaled to 512x512. This value can scale even more. Best result with value between 1-2.\n\n1 = 512\n2 = 1024\n\n", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", + "inputs": { + "value": { + "id": "9b51a26f-af3c-4caa-940a-5183234b1ed7", + "name": "value", + "fieldKind": "input", + "label": "Face Detail Scale", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1.5 + } + }, + "outputs": { + "value": { + "id": "c7c87b77-c149-4e9c-8ed1-beb1ba013055", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 2550, + "y": 125 + } + }, + { + "id": "a6482723-4e0a-4e40-98c0-b20622bf5f16", + "type": "invocation", + "data": { + "id": "a6482723-4e0a-4e40-98c0-b20622bf5f16", + "type": "face_mask_detection", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "44e1fca6-3f06-4698-9562-6743c1f7a739", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "65ba4653-8c35-403d-838b-ddac075e4118", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "face_ids": { + "id": "630e86e5-3041-47c4-8864-b8ee71ec7da5", + "name": "face_ids", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "minimum_confidence": { + "id": "8c4aef57-90c6-4904-9113-7189db1357c9", + "name": "minimum_confidence", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.5 + }, + "x_offset": { + "id": "2d409495-4aee-41e2-9688-f37fb6add537", + "name": "x_offset", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "y_offset": { + "id": "de3c1e68-6962-4520-b672-989afff1d2a1", + "name": "y_offset", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "chunk": { + "id": "9a11971a-0759-4782-902a-8300070d8861", + "name": "chunk", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "invert_mask": { + "id": "2abecba7-35d0-4cc4-9732-769e97d34c75", + "name": "invert_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "af33585c-5451-4738-b1da-7ff83afdfbf8", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "52cec0bd-d2e5-4514-8ebf-1c0d8bd1b81d", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "05edbbc8-99df-42e0-9b9b-de7b555e44cc", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "mask": { + "id": "cf928567-3e05-42dd-9591-0d3d942034f8", + "name": "mask", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + } + } + }, + "width": 320, + "height": 585, + "position": { + "x": 4300, + "y": 600 + } + } + ], + "edges": [ + { + "id": "50a8db6a-3796-4522-8547-53275efa4e7d-de8b1a48-a2e4-42ca-90bb-66058bffd534-collapsed", + "source": "50a8db6a-3796-4522-8547-53275efa4e7d", + "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "collapsed" + }, + { + "id": "f0de6c44-4515-4f79-bcc0-dee111bcfe31-2974e5b3-3d41-4b6f-9953-cd21e8f3a323-collapsed", + "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "collapsed" + }, + { + "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534-2974e5b3-3d41-4b6f-9953-cd21e8f3a323-collapsed", + "source": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "collapsed" + }, + { + "id": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323-35623411-ba3a-4eaa-91fd-1e0fda0a5b42-collapsed", + "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "collapsed" + }, + { + "id": "c865f39f-f830-4ed7-88a5-e935cfe050a9-35623411-ba3a-4eaa-91fd-1e0fda0a5b42-collapsed", + "source": "c865f39f-f830-4ed7-88a5-e935cfe050a9", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "collapsed" + }, + { + "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-9ae34718-a17d-401d-9859-086896c29fcaimage", + "source": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "target": "9ae34718-a17d-401d-9859-086896c29fca", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcaimage-50a8db6a-3796-4522-8547-53275efa4e7dimage", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "50a8db6a-3796-4522-8547-53275efa4e7d", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-35623411-ba3a-4eaa-91fd-1e0fda0a5b42noise-bd06261d-a74a-4d1f-8374-745ed6194bc2noise", + "source": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-de8b1a48-a2e4-42ca-90bb-66058bffd534latents-2974e5b3-3d41-4b6f-9953-cd21e8f3a323latents", + "source": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323latents-bd06261d-a74a-4d1f-8374-745ed6194bc2latents", + "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323width-35623411-ba3a-4eaa-91fd-1e0fda0a5b42width", + "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323height-35623411-ba3a-4eaa-91fd-1e0fda0a5b42height", + "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-a7d14545-aa09-4b96-bfc5-40c009af9110base_image", + "source": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "image", + "targetHandle": "base_image" + }, + { + "id": "reactflow__edge-2224ed72-2453-4252-bd89-3085240e0b6fimage-ff8c23dc-da7c-45b7-b5c9-d984b12f02efimage", + "source": "2224ed72-2453-4252-bd89-3085240e0b6f", + "target": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcawidth-ff8c23dc-da7c-45b7-b5c9-d984b12f02efwidth", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcaheight-ff8c23dc-da7c-45b7-b5c9-d984b12f02efheight", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcax-a7d14545-aa09-4b96-bfc5-40c009af9110x", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "x", + "targetHandle": "x" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcay-a7d14545-aa09-4b96-bfc5-40c009af9110y", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "y", + "targetHandle": "y" + }, + { + "id": "reactflow__edge-50a8db6a-3796-4522-8547-53275efa4e7dimage-de8b1a48-a2e4-42ca-90bb-66058bffd534image", + "source": "50a8db6a-3796-4522-8547-53275efa4e7d", + "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05value-bd06261d-a74a-4d1f-8374-745ed6194bc2denoising_start", + "source": "cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "value", + "targetHandle": "denoising_start" + }, + { + "id": "reactflow__edge-64712037-92e8-483f-9f6e-87588539c1b8value-bd06261d-a74a-4d1f-8374-745ed6194bc2cfg_scale", + "source": "64712037-92e8-483f-9f6e-87588539c1b8", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "value", + "targetHandle": "cfg_scale" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcawidth-c59e815c-1f3a-4e2b-b6b8-66f4b005e955width", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcaheight-c59e815c-1f3a-4e2b-b6b8-66f4b005e955height", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-ff8c23dc-da7c-45b7-b5c9-d984b12f02efimage-a7d14545-aa09-4b96-bfc5-40c009af9110image", + "source": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-bd06261d-a74a-4d1f-8374-745ed6194bc2latents-2224ed72-2453-4252-bd89-3085240e0b6flatents", + "source": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "target": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-c865f39f-f830-4ed7-88a5-e935cfe050a9value-35623411-ba3a-4eaa-91fd-1e0fda0a5b42seed", + "source": "c865f39f-f830-4ed7-88a5-e935cfe050a9", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805clip-f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65clip", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805vae-de8b1a48-a2e4-42ca-90bb-66058bffd534vae", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65conditioning-bd06261d-a74a-4d1f-8374-745ed6194bc2positive_conditioning", + "source": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-44f2c190-eb03-460d-8d11-a94d13b33f19conditioning-bd06261d-a74a-4d1f-8374-745ed6194bc2negative_conditioning", + "source": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805unet-bd06261d-a74a-4d1f-8374-745ed6194bc2unet", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805vae-2224ed72-2453-4252-bd89-3085240e0b6fvae", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805clip-44f2c190-eb03-460d-8d11-a94d13b33f19clip", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-22b750db-b85e-486b-b278-ac983e329813ip_adapter-bd06261d-a74a-4d1f-8374-745ed6194bc2ip_adapter", + "source": "22b750db-b85e-486b-b278-ac983e329813", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "ip_adapter", + "targetHandle": "ip_adapter" + }, + { + "id": "reactflow__edge-50a8db6a-3796-4522-8547-53275efa4e7dimage-4bd4ae80-567f-4366-b8c6-3bb06f4fb46aimage", + "source": "50a8db6a-3796-4522-8547-53275efa4e7d", + "target": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-4bd4ae80-567f-4366-b8c6-3bb06f4fb46aimage-22b750db-b85e-486b-b278-ac983e329813image", + "source": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "target": "22b750db-b85e-486b-b278-ac983e329813", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-8fe598c6-d447-44fa-a165-4975af77d080image-f60b6161-8f26-42f6-89ff-545e6011e501image", + "source": "8fe598c6-d447-44fa-a165-4975af77d080", + "target": "f60b6161-8f26-42f6-89ff-545e6011e501", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-4bd4ae80-567f-4366-b8c6-3bb06f4fb46aimage-8fe598c6-d447-44fa-a165-4975af77d080image", + "source": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "target": "8fe598c6-d447-44fa-a165-4975af77d080", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-f60b6161-8f26-42f6-89ff-545e6011e501control-bd06261d-a74a-4d1f-8374-745ed6194bc2control", + "source": "f60b6161-8f26-42f6-89ff-545e6011e501", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "control", + "targetHandle": "control" + }, + { + "id": "reactflow__edge-c59e815c-1f3a-4e2b-b6b8-66f4b005e955image-381d5b6a-f044-48b0-bc07-6138fbfa8dfcmask2", + "source": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "target": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "default", + "sourceHandle": "image", + "targetHandle": "mask2" + }, + { + "id": "reactflow__edge-381d5b6a-f044-48b0-bc07-6138fbfa8dfcimage-a7d14545-aa09-4b96-bfc5-40c009af9110mask", + "source": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "image", + "targetHandle": "mask" + }, + { + "id": "reactflow__edge-77da4e4d-5778-4469-8449-ffed03d54bdbimage-381d5b6a-f044-48b0-bc07-6138fbfa8dfcmask1", + "source": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "target": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "default", + "sourceHandle": "image", + "targetHandle": "mask1" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcamask-77da4e4d-5778-4469-8449-ffed03d54bdbimage", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "type": "default", + "sourceHandle": "mask", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-f0de6c44-4515-4f79-bcc0-dee111bcfe31value-2974e5b3-3d41-4b6f-9953-cd21e8f3a323scale_factor", + "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "default", + "sourceHandle": "value", + "targetHandle": "scale_factor" + }, + { + "id": "reactflow__edge-f0de6c44-4515-4f79-bcc0-dee111bcfe31value-4bd4ae80-567f-4366-b8c6-3bb06f4fb46ascale_factor", + "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "target": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "default", + "sourceHandle": "value", + "targetHandle": "scale_factor" + }, + { + "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-a6482723-4e0a-4e40-98c0-b20622bf5f16image", + "source": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "target": "a6482723-4e0a-4e40-98c0-b20622bf5f16", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-a6482723-4e0a-4e40-98c0-b20622bf5f16image-c59e815c-1f3a-4e2b-b6b8-66f4b005e955image", + "source": "a6482723-4e0a-4e40-98c0-b20622bf5f16", + "target": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + } + ] +} \ No newline at end of file From 562fb1f3a150a7683290046aaac3c8b5ca23754f Mon Sep 17 00:00:00 2001 From: Mary Hipp Date: Wed, 20 Dec 2023 14:47:44 -0500 Subject: [PATCH 225/515] add authToastMiddleware back and fix parsing --- invokeai/frontend/web/src/app/store/store.ts | 2 ++ .../web/src/services/api/authToastMiddleware.ts | 16 +++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/invokeai/frontend/web/src/app/store/store.ts b/invokeai/frontend/web/src/app/store/store.ts index 5651641afd..6b31f6f8d4 100644 --- a/invokeai/frontend/web/src/app/store/store.ts +++ b/invokeai/frontend/web/src/app/store/store.ts @@ -34,6 +34,7 @@ import { actionSanitizer } from './middleware/devtools/actionSanitizer'; import { actionsDenylist } from './middleware/devtools/actionsDenylist'; import { stateSanitizer } from './middleware/devtools/stateSanitizer'; import { listenerMiddleware } from './middleware/listenerMiddleware'; +import { authToastMiddleware } from 'services/api/authToastMiddleware'; const allReducers = { canvas: canvasReducer, @@ -96,6 +97,7 @@ export const createStore = (uniqueStoreKey?: string, persist = true) => }) .concat(api.middleware) .concat(dynamicMiddlewares) + .concat(authToastMiddleware) .prepend(listenerMiddleware.middleware), enhancers: (getDefaultEnhancers) => { const _enhancers = getDefaultEnhancers().concat(autoBatchEnhancer()); diff --git a/invokeai/frontend/web/src/services/api/authToastMiddleware.ts b/invokeai/frontend/web/src/services/api/authToastMiddleware.ts index 59db2d0b89..a9cf775383 100644 --- a/invokeai/frontend/web/src/services/api/authToastMiddleware.ts +++ b/invokeai/frontend/web/src/services/api/authToastMiddleware.ts @@ -5,12 +5,10 @@ import { t } from 'i18next'; import { z } from 'zod'; const zRejectedForbiddenAction = z.object({ - action: z.object({ - payload: z.object({ - status: z.literal(403), - data: z.object({ - detail: z.string(), - }), + payload: z.object({ + status: z.literal(403), + data: z.object({ + detail: z.string(), }), }), }); @@ -22,8 +20,8 @@ export const authToastMiddleware: Middleware = const parsed = zRejectedForbiddenAction.parse(action); const { dispatch } = api; const customMessage = - parsed.action.payload.data.detail !== 'Forbidden' - ? parsed.action.payload.data.detail + parsed.payload.data.detail !== 'Forbidden' + ? parsed.payload.data.detail : undefined; dispatch( addToast({ @@ -32,7 +30,7 @@ export const authToastMiddleware: Middleware = description: customMessage, }) ); - } catch { + } catch (error) { // no-op } } From 8dd55cc45ed225e628c2d623fe4e116d59454add Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Thu, 21 Dec 2023 09:54:12 +1100 Subject: [PATCH 226/515] t2i with LoRA --- .../Text to Image with LoRA.json | 903 ++++++++++++++++++ 1 file changed, 903 insertions(+) create mode 100644 invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json diff --git a/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json b/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json new file mode 100644 index 0000000000..5dd29d78cf --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json @@ -0,0 +1,903 @@ +{ + "name": "Text to Image with LoRA", + "author": "InvokeAI", + "description": "Simple text to image workflow with a LoRA", + "version": "1.0.0", + "contact": "invoke@invoke.ai", + "tags": "text to image, lora, default", + "notes": "", + "exposedFields": [ + { + "nodeId": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", + "fieldName": "model" + }, + { + "nodeId": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "fieldName": "lora" + }, + { + "nodeId": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "fieldName": "weight" + }, + { + "nodeId": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "fieldName": "prompt" + } + ], + "meta": { + "version": "2.0.0", + "category": "default" + }, + "id": "a9d70c39-4cdd-4176-9942-8ff3fe32d3b1", + "nodes": [ + { + "id": "85b77bb2-c67a-416a-b3e8-291abe746c44", + "type": "invocation", + "data": { + "id": "85b77bb2-c67a-416a-b3e8-291abe746c44", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "prompt": { + "id": "39fe92c4-38eb-4cc7-bf5e-cbcd31847b11", + "name": "prompt", + "fieldKind": "input", + "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "14313164-e5c4-4e40-a599-41b614fe3690", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "02140b9d-50f3-470b-a0b7-01fc6ed2dcd6", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 3425, + "y": -300 + } + }, + { + "id": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", + "type": "invocation", + "data": { + "id": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", + "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "model": { + "id": "e2e1c177-ae39-4244-920e-d621fa156a24", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, + "value": { + "model_name": "Analog-Diffusion", + "base_model": "sd-1", + "model_type": "main" + } + } + }, + "outputs": { + "vae": { + "id": "f91410e8-9378-4298-b285-f0f40ffd9825", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "clip": { + "id": "928d91bf-de0c-44a8-b0c8-4de0e2e5b438", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "unet": { + "id": "eacaf530-4e7e-472e-b904-462192189fc1", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + } + } + }, + "width": 320, + "height": 227, + "position": { + "x": 2500, + "y": -600 + } + }, + { + "id": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "type": "invocation", + "data": { + "id": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "type": "lora_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "lora": { + "id": "36d867e8-92ea-4c3f-9ad5-ba05c64cf326", + "name": "lora", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LoRAModelField" + }, + "value": { + "model_name": "Ink scenery", + "base_model": "sd-1" + } + }, + "weight": { + "id": "8be86540-ba81-49b3-b394-2b18fa70b867", + "name": "weight", + "fieldKind": "input", + "label": "LoRA Weight", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.75 + }, + "unet": { + "id": "9c4d5668-e9e1-411b-8f4b-e71115bc4a01", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "918ec00e-e76f-4ad0-aee1-3927298cf03b", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "unet": { + "id": "c63f7825-1bcf-451d-b7a7-aa79f5c77416", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "clip": { + "id": "6f79ef2d-00f7-4917-bee3-53e845bf4192", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + } + }, + "width": 320, + "height": 252, + "position": { + "x": 2975, + "y": -600 + } + }, + { + "id": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "type": "invocation", + "data": { + "id": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "prompt": { + "id": "39fe92c4-38eb-4cc7-bf5e-cbcd31847b11", + "name": "prompt", + "fieldKind": "input", + "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "cute tiger cub" + }, + "clip": { + "id": "14313164-e5c4-4e40-a599-41b614fe3690", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "02140b9d-50f3-470b-a0b7-01fc6ed2dcd6", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 256, + "position": { + "x": 3425, + "y": -575 + } + }, + { + "id": "ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63", + "type": "invocation", + "data": { + "id": "ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "inputs": { + "positive_conditioning": { + "id": "025ff44b-c4c6-4339-91b4-5f461e2cadc5", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "2d92b45a-a7fb-4541-9a47-7c7495f50f54", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "4d0deeff-24ed-4562-a1ca-7833c0649377", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "c9907328-aece-4af9-8a95-211b4f99a325", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 10 + }, + "cfg_scale": { + "id": "7cf0f031-2078-49f4-9273-bb3a64ad7130", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 7.5 + }, + "denoising_start": { + "id": "44cec3ba-b404-4b51-ba98-add9d783279e", + "name": "denoising_start", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "denoising_end": { + "id": "3e7975f3-e438-4a13-8a14-395eba1fb7cd", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "a6f6509b-7bb4-477d-b5fb-74baefa38111", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "euler" + }, + "unet": { + "id": "5a87617a-b09f-417b-9b75-0cea4c255227", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "db87aace-ace8-4f2a-8f2b-1f752389fa9b", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "f0c133ed-4d6d-4567-bb9a-b1779810993c", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "59ee1233-887f-45e7-aa14-cbad5f6cb77f", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "1a12e781-4b30-4707-b432-18c31866b5c3", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "d0e593ae-305c-424b-9acd-3af830085832", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "b81b5a79-fc2b-4011-aae6-64c92bae59a7", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "9ae4022a-548e-407e-90cf-cc5ca5ff8a21", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "730ba4bd-2c52-46bb-8c87-9b3aec155576", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "52b98f0b-b5ff-41b5-acc7-d0b1d1011a6f", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 705, + "position": { + "x": 3975, + "y": -575 + } + }, + { + "id": "ea18915f-2c5b-4569-b725-8e9e9122e8d3", + "type": "invocation", + "data": { + "id": "ea18915f-2c5b-4569-b725-8e9e9122e8d3", + "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "inputs": { + "seed": { + "id": "446ac80c-ba0a-4fea-a2d7-21128f52e5bf", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "779831b3-20b4-4f5f-9de7-d17de57288d8", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "08959766-6d67-4276-b122-e54b911f2316", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "53b36a98-00c4-4dc5-97a4-ef3432c0a805", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "eed95824-580b-442f-aa35-c073733cecce", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "7985a261-dfee-47a8-908a-c5a8754f5dc4", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "3d00f6c1-84b0-4262-83d9-3bf755babeea", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3425, + "y": 75 + } + }, + { + "id": "6fd74a17-6065-47a5-b48b-f4e2b8fa7953", + "type": "invocation", + "data": { + "id": "6fd74a17-6065-47a5-b48b-f4e2b8fa7953", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "inputs": { + "low": { + "id": "d25305f3-bfd6-446c-8e2c-0b025ec9e9ad", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "10376a3d-b8fe-4a51-b81a-ea46d8c12c78", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "c64878fa-53b1-4202-b88a-cfb854216a57", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3425, + "y": 0 + } + }, + { + "id": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", + "type": "invocation", + "data": { + "id": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "b1982e8a-14ad-4029-a697-beb30af8340f", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "f7669388-9f91-46cc-94fc-301fa7041c3e", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "c6f2d4db-4d0a-4e3d-acb4-b5c5a228a3e2", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "19ef7d31-d96f-4e94-b7e5-95914e9076fc", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "a9454533-8ab7-4225-b411-646dc5e76d00", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "4f81274e-e216-47f3-9fb6-f97493a40e6f", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "61a9acfb-1547-4f1e-8214-e89bd3855ee5", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "b15cc793-4172-4b07-bcf4-5627bbc7d0d7", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 267, + "position": { + "x": 4450, + "y": -550 + } + } + ], + "edges": [ + { + "id": "6fd74a17-6065-47a5-b48b-f4e2b8fa7953-ea18915f-2c5b-4569-b725-8e9e9122e8d3-collapsed", + "source": "6fd74a17-6065-47a5-b48b-f4e2b8fa7953", + "target": "ea18915f-2c5b-4569-b725-8e9e9122e8d3", + "type": "collapsed" + }, + { + "id": "reactflow__edge-24e9d7ed-4836-4ec4-8f9e-e747721f9818clip-c41e705b-f2e3-4d1a-83c4-e34bb9344966clip", + "source": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", + "target": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-c41e705b-f2e3-4d1a-83c4-e34bb9344966clip-c3fa6872-2599-4a82-a596-b3446a66cf8bclip", + "source": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "target": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-24e9d7ed-4836-4ec4-8f9e-e747721f9818unet-c41e705b-f2e3-4d1a-83c4-e34bb9344966unet", + "source": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", + "target": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-c41e705b-f2e3-4d1a-83c4-e34bb9344966unet-ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63unet", + "source": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "target": "ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-85b77bb2-c67a-416a-b3e8-291abe746c44conditioning-ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63negative_conditioning", + "source": "85b77bb2-c67a-416a-b3e8-291abe746c44", + "target": "ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-c3fa6872-2599-4a82-a596-b3446a66cf8bconditioning-ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63positive_conditioning", + "source": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "target": "ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-ea18915f-2c5b-4569-b725-8e9e9122e8d3noise-ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63noise", + "source": "ea18915f-2c5b-4569-b725-8e9e9122e8d3", + "target": "ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-6fd74a17-6065-47a5-b48b-f4e2b8fa7953value-ea18915f-2c5b-4569-b725-8e9e9122e8d3seed", + "source": "6fd74a17-6065-47a5-b48b-f4e2b8fa7953", + "target": "ea18915f-2c5b-4569-b725-8e9e9122e8d3", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63latents-a9683c0a-6b1f-4a5e-8187-c57e764b3400latents", + "source": "ad487d0c-dcbb-49c5-bb8e-b28d4cbc5a63", + "target": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-24e9d7ed-4836-4ec4-8f9e-e747721f9818vae-a9683c0a-6b1f-4a5e-8187-c57e764b3400vae", + "source": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", + "target": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-c41e705b-f2e3-4d1a-83c4-e34bb9344966clip-85b77bb2-c67a-416a-b3e8-291abe746c44clip", + "source": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", + "target": "85b77bb2-c67a-416a-b3e8-291abe746c44", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + } + ] +} \ No newline at end of file From 8d2952695de47792c4c544843dbfc27201e98353 Mon Sep 17 00:00:00 2001 From: Surisen Date: Wed, 20 Dec 2023 13:34:13 +0100 Subject: [PATCH 227/515] translationBot(ui): update translation (Chinese (Simplified)) Currently translated at 99.8% (1363 of 1365 strings) Co-authored-by: Surisen Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/zh_CN.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/invokeai/frontend/web/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json index b0151b8e76..ee12f2ad07 100644 --- a/invokeai/frontend/web/public/locales/zh_CN.json +++ b/invokeai/frontend/web/public/locales/zh_CN.json @@ -1119,7 +1119,10 @@ "deletedInvalidEdge": "已删除无效的边缘 {{source}} -> {{target}}", "unknownInput": "未知输入:{{name}}", "prototypeDesc": "此调用是一个原型 (prototype)。它可能会在本项目更新期间发生破坏性更改,并且随时可能被删除。", - "betaDesc": "此调用尚处于测试阶段。在稳定之前,它可能会在项目更新期间发生破坏性更改。本项目计划长期支持这种调用。" + "betaDesc": "此调用尚处于测试阶段。在稳定之前,它可能会在项目更新期间发生破坏性更改。本项目计划长期支持这种调用。", + "newWorkflow": "新建工作流", + "newWorkflowDesc": "是否创建一个新的工作流?", + "newWorkflowDesc2": "当前工作流有未保存的更改。" }, "controlnet": { "resize": "直接缩放", @@ -1635,7 +1638,7 @@ "openWorkflow": "打开工作流", "clearWorkflowSearchFilter": "清除工作流检索过滤器", "workflowLibrary": "工作流库", - "downloadWorkflow": "下载工作流", + "downloadWorkflow": "保存到文件", "noRecentWorkflows": "无最近工作流", "workflowSaved": "已保存工作流", "workflowIsOpen": "工作流已打开", @@ -1648,8 +1651,9 @@ "deleteWorkflow": "删除工作流", "workflows": "工作流", "noDescription": "无描述", - "uploadWorkflow": "上传工作流", - "userWorkflows": "我的工作流" + "uploadWorkflow": "从文件中加载", + "userWorkflows": "我的工作流", + "newWorkflowCreated": "已创建新的工作流" }, "app": { "storeNotInitialized": "商店尚未初始化" From 475823835f36d6dd38694958aafb8e38e1a6573f Mon Sep 17 00:00:00 2001 From: skunkworxdark Date: Thu, 21 Dec 2023 18:38:45 +0000 Subject: [PATCH 228/515] Update communityNodes.md Addition of my Adapters-Linked and Metadata-linked nodes --- docs/nodes/communityNodes.md | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/nodes/communityNodes.md b/docs/nodes/communityNodes.md index 46615e5ebd..d730af8308 100644 --- a/docs/nodes/communityNodes.md +++ b/docs/nodes/communityNodes.md @@ -13,6 +13,7 @@ If you'd prefer, you can also just download the whole node folder from the linke To use a community workflow, download the the `.json` node graph file and load it into Invoke AI via the **Load Workflow** button in the Workflow Editor. - Community Nodes + + [Adapters-Linked](#adapters-linked-nodes) + [Average Images](#average-images) + [Clean Image Artifacts After Cut](#clean-image-artifacts-after-cut) + [Close Color Mask](#close-color-mask) @@ -32,8 +33,9 @@ To use a community workflow, download the the `.json` node graph file and load i + [Image Resize Plus](#image-resize-plus) + [Load Video Frame](#load-video-frame) + [Make 3D](#make-3d) - + [Mask Operations](#mask-operations) + + [Mask Operations](#mask-operations) + [Match Histogram](#match-histogram) + + [Metadata-Linked](#metadata-linked-nodes) + [Negative Image](#negative-image) + [Oobabooga](#oobabooga) + [Prompt Tools](#prompt-tools) @@ -51,6 +53,19 @@ To use a community workflow, download the the `.json` node graph file and load i - [Help](#help) +-------------------------------- +### Adapters Linked Nodes + +**Description:** A set of nodes for linked adapters (ControlNet, IP-Adaptor & T2I-Adapter). This allows multiple adapters to be chained together without using a `collect` node which means it can be used inside an `iterate` node without any collecting on every iteration issues. + +- `ControlNet-Linked` - Collects ControlNet info to pass to other nodes. +- `IP-Adapter-Linked` - Collects IP-Adapter info to pass to other nodes. +- `T2I-Adapter-Linked` - Collects T2I-Adapter info to pass to other nodes. + +Note: These are inherited from the core nodes so any update to the core nodes should be reflected in these. + +**Node Link:** https://github.com/skunkworxdark/adapters-linked-nodes + -------------------------------- ### Average Images @@ -307,6 +322,20 @@ See full docs here: https://github.com/skunkworxdark/Prompt-tools-nodes/edit/mai +-------------------------------- +### Metadata Linked Nodes + +**Description:** A set of nodes for Metadata. Collect Metadata from within an `iterate` node & extract metadata from an image. + +- `Metadata Item Linked` - Allows collecting of metadata while within an iterate node with no need for a collect node or conversion to metadata node. +- `Metadata From Image` - Provides Metadata from an image. +- `Metadata To String` - Extracts a String value of a label from metadata. +- `Metadata To Integer` - Extracts an Integer value of a label from metadata. +- `Metadata To Float` - Extracts a Float value of a label from metadata. +- `Metadata To Scheduler` - Extracts a Scheduler value of a label from metadata. + +**Node Link:** https://github.com/skunkworxdark/metadata-linked-nodes + -------------------------------- ### Negative Image From a0d0e9f474fdd97e35ecc52e3feb88f6e5971fa7 Mon Sep 17 00:00:00 2001 From: SoheilRezaei <113804552+SoheilRezaei@users.noreply.github.com> Date: Thu, 21 Dec 2023 14:51:17 -0500 Subject: [PATCH 229/515] Update contributingToFrontend.md The project is no longer using yarn as a package manager and have moved to pnpm, So I wanted to update the documentation on the contribution page. --- .../contribution_guides/contributingToFrontend.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/contributing/contribution_guides/contributingToFrontend.md b/docs/contributing/contribution_guides/contributingToFrontend.md index d1f0fb7d38..b485fb9a8d 100644 --- a/docs/contributing/contribution_guides/contributingToFrontend.md +++ b/docs/contributing/contribution_guides/contributingToFrontend.md @@ -46,17 +46,18 @@ We encourage you to ping @psychedelicious and @blessedcoolant on [Discord](http ```bash node --version ``` -2. Install [yarn classic](https://classic.yarnpkg.com/lang/en/) and confirm it is installed by running this: + +2. Install [pnpm](https://pnpm.io/) and confirm it is installed by running this: ```bash -npm install --global yarn -yarn --version +npm install --global pnpm +pnpm --version ``` -From `invokeai/frontend/web/` run `yarn install` to get everything set up. +From `invokeai/frontend/web/` run `pnpm install` to get everything set up. Start everything in dev mode: 1. Ensure your virtual environment is running -2. Start the dev server: `yarn dev` +2. Start the dev server: `pnpm dev` 3. Start the InvokeAI Nodes backend: `python scripts/invokeai-web.py # run from the repo root` 4. Point your browser to the dev server address e.g. [http://localhost:5173/](http://localhost:5173/) @@ -72,4 +73,4 @@ For a number of technical and logistical reasons, we need to commit UI build art If you submit a PR, there is a good chance we will ask you to include a separate commit with a build of the app. -To build for production, run `yarn build`. \ No newline at end of file +To build for production, run `pnpm build`. From 702d0f68af80755623b69bd01d61da2719725640 Mon Sep 17 00:00:00 2001 From: Mary Hipp Date: Thu, 21 Dec 2023 15:30:04 -0500 Subject: [PATCH 230/515] remove (Unsaved) if workflow library is disabled --- .../nodes/components/flow/panels/TopPanel/WorkflowName.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx index 97432ae865..8fefc027a6 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/WorkflowName.tsx @@ -2,11 +2,14 @@ import { Text } from '@chakra-ui/layout'; import { useAppSelector } from 'app/store/storeHooks'; import { memo } from 'react'; import { useTranslation } from 'react-i18next'; +import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; const TopCenterPanel = () => { const { t } = useTranslation(); const name = useAppSelector((state) => state.workflow.name); const isTouched = useAppSelector((state) => state.workflow.isTouched); + const isWorkflowLibraryEnabled = + useFeatureStatus('workflowLibrary').isFeatureEnabled; return ( { opacity={0.8} > {name || t('workflows.unnamedWorkflow')} - {isTouched ? ` (${t('common.unsaved')})` : ''} + {isTouched && isWorkflowLibraryEnabled ? ` (${t('common.unsaved')})` : ''} ); }; From 2d11d97dad76ce9aebec9f674b7e6c57135e575f Mon Sep 17 00:00:00 2001 From: gogurtenjoyer <36354352+gogurtenjoyer@users.noreply.github.com> Date: Thu, 21 Dec 2023 19:42:47 -0500 Subject: [PATCH 231/515] remove MacOS Sonoma check in devices.py (#5312) * remove MacOS Sonoma check in devices.py As of pytorch 2.1.0, float16 works with our MPS fixes on Sonoma, so the check is no longer needed. * remove unused platform import --- invokeai/backend/util/devices.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/invokeai/backend/util/devices.py b/invokeai/backend/util/devices.py index 84ca7ee02b..0a65f6c67a 100644 --- a/invokeai/backend/util/devices.py +++ b/invokeai/backend/util/devices.py @@ -1,11 +1,9 @@ from __future__ import annotations -import platform from contextlib import nullcontext from typing import Union import torch -from packaging import version from torch import autocast from invokeai.app.services.config import InvokeAIAppConfig @@ -37,7 +35,7 @@ def choose_precision(device: torch.device) -> str: device_name = torch.cuda.get_device_name(device) if not ("GeForce GTX 1660" in device_name or "GeForce GTX 1650" in device_name): return "float16" - elif device.type == "mps" and version.parse(platform.mac_ver()[0]) < version.parse("14.0.0"): + elif device.type == "mps": return "float16" return "float32" From 32ad742f3e9e6aad41665213794514dd39c9a560 Mon Sep 17 00:00:00 2001 From: Brandon <58442074+brandonrising@users.noreply.github.com> Date: Thu, 21 Dec 2023 22:04:44 -0500 Subject: [PATCH 232/515] Ti trigger from prompt util (#5294) * Pull logic for extracting TI triggers into a util function * Remove duplicate regex for ti triggers * Fix linting for ruff * Remove unused imports --- invokeai/app/invocations/compel.py | 6 +++--- invokeai/app/invocations/onnx.py | 4 ++-- invokeai/app/util/ti_utils.py | 8 ++++++++ 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 invokeai/app/util/ti_utils.py diff --git a/invokeai/app/invocations/compel.py b/invokeai/app/invocations/compel.py index 5494c3261f..49c62cff56 100644 --- a/invokeai/app/invocations/compel.py +++ b/invokeai/app/invocations/compel.py @@ -1,4 +1,3 @@ -import re from dataclasses import dataclass from typing import List, Optional, Union @@ -17,6 +16,7 @@ from invokeai.backend.stable_diffusion.diffusion.conditioning_data import ( from ...backend.model_management.lora import ModelPatcher from ...backend.model_management.models import ModelNotFoundException, ModelType from ...backend.util.devices import torch_dtype +from ..util.ti_utils import extract_ti_triggers_from_prompt from .baseinvocation import ( BaseInvocation, BaseInvocationOutput, @@ -87,7 +87,7 @@ class CompelInvocation(BaseInvocation): # loras = [(context.services.model_manager.get_model(**lora.dict(exclude={"weight"})).context.model, lora.weight) for lora in self.clip.loras] ti_list = [] - for trigger in re.findall(r"<[a-zA-Z0-9., _-]+>", self.prompt): + for trigger in extract_ti_triggers_from_prompt(self.prompt): name = trigger[1:-1] try: ti_list.append( @@ -210,7 +210,7 @@ class SDXLPromptInvocationBase: # loras = [(context.services.model_manager.get_model(**lora.dict(exclude={"weight"})).context.model, lora.weight) for lora in self.clip.loras] ti_list = [] - for trigger in re.findall(r"<[a-zA-Z0-9., _-]+>", prompt): + for trigger in extract_ti_triggers_from_prompt(prompt): name = trigger[1:-1] try: ti_list.append( diff --git a/invokeai/app/invocations/onnx.py b/invokeai/app/invocations/onnx.py index 9eca5e083e..759cfde700 100644 --- a/invokeai/app/invocations/onnx.py +++ b/invokeai/app/invocations/onnx.py @@ -1,7 +1,6 @@ # Copyright (c) 2023 Borisov Sergey (https://github.com/StAlKeR7779) import inspect -import re # from contextlib import ExitStack from typing import List, Literal, Union @@ -21,6 +20,7 @@ from invokeai.backend import BaseModelType, ModelType, SubModelType from ...backend.model_management import ONNXModelPatcher from ...backend.stable_diffusion import PipelineIntermediateState from ...backend.util import choose_torch_device +from ..util.ti_utils import extract_ti_triggers_from_prompt from .baseinvocation import ( BaseInvocation, BaseInvocationOutput, @@ -78,7 +78,7 @@ class ONNXPromptInvocation(BaseInvocation): ] ti_list = [] - for trigger in re.findall(r"<[a-zA-Z0-9., _-]+>", self.prompt): + for trigger in extract_ti_triggers_from_prompt(self.prompt): name = trigger[1:-1] try: ti_list.append( diff --git a/invokeai/app/util/ti_utils.py b/invokeai/app/util/ti_utils.py new file mode 100644 index 0000000000..a66a832b42 --- /dev/null +++ b/invokeai/app/util/ti_utils.py @@ -0,0 +1,8 @@ +import re + + +def extract_ti_triggers_from_prompt(prompt: str) -> list[str]: + ti_triggers = [] + for trigger in re.findall(r"<[a-zA-Z0-9., _-]+>", prompt): + ti_triggers.append(trigger) + return ti_triggers From 4957a360ffa85d23c73ccdb366cc933eab014c87 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Thu, 21 Dec 2023 22:31:58 -0500 Subject: [PATCH 233/515] close #5209 --- README.md | 2 +- invokeai/backend/install/check_root.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2bdced1f18..5dc1736f19 100644 --- a/README.md +++ b/README.md @@ -270,7 +270,7 @@ upgrade script.** See the next section for a Windows recipe. 3. Select option [1] to upgrade to the latest release. 4. Once the upgrade is finished you will be returned to the launcher -menu. Select option [7] "Re-run the configure script to fix a broken +menu. Select option [6] "Re-run the configure script to fix a broken install or to complete a major upgrade". This will run the configure script against the v2.3 directory and diff --git a/invokeai/backend/install/check_root.py b/invokeai/backend/install/check_root.py index 6ee2aa34b7..ee264016b4 100644 --- a/invokeai/backend/install/check_root.py +++ b/invokeai/backend/install/check_root.py @@ -28,7 +28,7 @@ def check_invokeai_root(config: InvokeAIAppConfig): print("== STARTUP ABORTED ==") print("** One or more necessary files is missing from your InvokeAI root directory **") print("** Please rerun the configuration script to fix this problem. **") - print("** From the launcher, selection option [7]. **") + print("** From the launcher, selection option [6]. **") print( '** From the command line, activate the virtual environment and run "invokeai-configure --yes --skip-sd-weights" **' ) From 1225c3fb47719bbf98afdc0ea3ee5310e7847b9d Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 22 Dec 2023 07:30:51 -0500 Subject: [PATCH 234/515] addresses #5224 (#5332) Co-authored-by: Lincoln Stein --- invokeai/app/services/config/config_default.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/services/config/config_default.py b/invokeai/app/services/config/config_default.py index a55bcd3a21..180c4a4b3e 100644 --- a/invokeai/app/services/config/config_default.py +++ b/invokeai/app/services/config/config_default.py @@ -356,7 +356,7 @@ class InvokeAIAppConfig(InvokeAISettings): else: root = self.find_root().expanduser().absolute() self.root = root # insulate ourselves from relative paths that may change - return root + return root.resolve() @property def root_dir(self) -> Path: From 78b29db4583abe5ab1763651345e21d14d4af485 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Fri, 22 Dec 2023 12:18:12 +1100 Subject: [PATCH 235/515] feat(backend): disable graph library The graph library occasionally causes issues when the default graph changes substantially between versions and pydantic validation fails. See #5289 for an example. We are not currently using the graph library, so we can disable it until we are ready to use it. It's possible that the workflow library will supersede it anyways. --- invokeai/app/api/dependencies.py | 7 +------ invokeai/app/services/invocation_services.py | 5 +---- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 2b88efbb95..eed178ee8b 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -29,8 +29,7 @@ from ..services.model_records import ModelRecordServiceSQL from ..services.names.names_default import SimpleNameService from ..services.session_processor.session_processor_default import DefaultSessionProcessor from ..services.session_queue.session_queue_sqlite import SqliteSessionQueue -from ..services.shared.default_graphs import create_system_graphs -from ..services.shared.graph import GraphExecutionState, LibraryGraph +from ..services.shared.graph import GraphExecutionState from ..services.urls.urls_default import LocalUrlService from ..services.workflow_records.workflow_records_sqlite import SqliteWorkflowRecordsStorage from .events import FastAPIEventService @@ -80,7 +79,6 @@ class ApiDependencies: boards = BoardService() events = FastAPIEventService(event_handler_id) graph_execution_manager = SqliteItemStorage[GraphExecutionState](db=db, table_name="graph_executions") - graph_library = SqliteItemStorage[LibraryGraph](db=db, table_name="graphs") image_records = SqliteImageRecordStorage(db=db) images = ImageService() invocation_cache = MemoryInvocationCache(max_cache_size=config.node_cache_size) @@ -107,7 +105,6 @@ class ApiDependencies: configuration=configuration, events=events, graph_execution_manager=graph_execution_manager, - graph_library=graph_library, image_files=image_files, image_records=image_records, images=images, @@ -127,8 +124,6 @@ class ApiDependencies: workflow_records=workflow_records, ) - create_system_graphs(services.graph_library) - ApiDependencies.invoker = Invoker(services) db.clean() diff --git a/invokeai/app/services/invocation_services.py b/invokeai/app/services/invocation_services.py index 6a308ab096..d99a9aff25 100644 --- a/invokeai/app/services/invocation_services.py +++ b/invokeai/app/services/invocation_services.py @@ -27,7 +27,7 @@ if TYPE_CHECKING: from .names.names_base import NameServiceBase from .session_processor.session_processor_base import SessionProcessorBase from .session_queue.session_queue_base import SessionQueueBase - from .shared.graph import GraphExecutionState, LibraryGraph + from .shared.graph import GraphExecutionState from .urls.urls_base import UrlServiceBase from .workflow_records.workflow_records_base import WorkflowRecordsStorageBase @@ -43,7 +43,6 @@ class InvocationServices: configuration: "InvokeAIAppConfig" events: "EventServiceBase" graph_execution_manager: "ItemStorageABC[GraphExecutionState]" - graph_library: "ItemStorageABC[LibraryGraph]" images: "ImageServiceABC" image_records: "ImageRecordStorageBase" image_files: "ImageFileStorageBase" @@ -71,7 +70,6 @@ class InvocationServices: configuration: "InvokeAIAppConfig", events: "EventServiceBase", graph_execution_manager: "ItemStorageABC[GraphExecutionState]", - graph_library: "ItemStorageABC[LibraryGraph]", images: "ImageServiceABC", image_files: "ImageFileStorageBase", image_records: "ImageRecordStorageBase", @@ -97,7 +95,6 @@ class InvocationServices: self.configuration = configuration self.events = events self.graph_execution_manager = graph_execution_manager - self.graph_library = graph_library self.images = images self.image_files = image_files self.image_records = image_records From 756cb9c27e68c3da4961c4c768f88751b6aeaffe Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Fri, 22 Dec 2023 23:58:59 +1100 Subject: [PATCH 236/515] fix(tests): remove graph library from test fixtures --- tests/aa_nodes/test_graph_execution_state.py | 2 -- tests/aa_nodes/test_invoker.py | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index 04dc6af621..b7bf7771a6 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -26,7 +26,6 @@ from invokeai.app.services.shared.graph import ( Graph, GraphExecutionState, IterateInvocation, - LibraryGraph, ) from invokeai.backend.util.logging import InvokeAILogger from tests.fixtures.sqlite_database import create_mock_sqlite_database @@ -61,7 +60,6 @@ def mock_services() -> InvocationServices: configuration=configuration, events=TestEventService(), graph_execution_manager=graph_execution_manager, - graph_library=SqliteItemStorage[LibraryGraph](db=db, table_name="graphs"), image_files=None, # type: ignore image_records=None, # type: ignore images=None, # type: ignore diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index 288beb6e0b..63908193fd 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -24,7 +24,7 @@ from invokeai.app.services.invocation_stats.invocation_stats_default import Invo from invokeai.app.services.invoker import Invoker from invokeai.app.services.item_storage.item_storage_sqlite import SqliteItemStorage from invokeai.app.services.session_queue.session_queue_common import DEFAULT_QUEUE_ID -from invokeai.app.services.shared.graph import Graph, GraphExecutionState, GraphInvocation, LibraryGraph +from invokeai.app.services.shared.graph import Graph, GraphExecutionState, GraphInvocation @pytest.fixture @@ -66,7 +66,6 @@ def mock_services() -> InvocationServices: configuration=configuration, events=TestEventService(), graph_execution_manager=graph_execution_manager, - graph_library=SqliteItemStorage[LibraryGraph](db=db, table_name="graphs"), image_files=None, # type: ignore image_records=None, # type: ignore images=None, # type: ignore From fbede84405a30c55d9d02e8a61bc4ca2d0c20458 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 22 Dec 2023 12:35:57 -0500 Subject: [PATCH 237/515] [feature] Download Queue (#5225) * add base definition of download manager * basic functionality working * add unit tests for download queue * add documentation and FastAPI route * fix docs * add missing test dependency; fix import ordering * fix file path length checking on windows * fix ruff check error * move release() into the __del__ method * disable testing of stderr messages due to issues with pytest capsys fixture * fix unsorted imports * harmonized implementation of start() and stop() calls in download and & install modules * Update invokeai/app/services/download/download_base.py Co-authored-by: Ryan Dick * replace test datadir fixture with tmp_path * replace DownloadJobBase->DownloadJob in download manager documentation * make source and dest arguments to download_queue.download() an AnyHttpURL and Path respectively * fix pydantic typecheck errors in the download unit test * ruff formatting * add "job cancelled" as an event rather than an exception * fix ruff errors * Update invokeai/app/services/download/download_default.py Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com> * use threading.Event to stop service worker threads; handle unfinished job edge cases * remove dangling STOP job definition * fix ruff complaint * fix ruff check again * avoid race condition when start() and stop() are called simultaneously from different threads * avoid race condition in stop() when a job becomes active while shutting down --------- Co-authored-by: Lincoln Stein Co-authored-by: Ryan Dick Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Co-authored-by: Kent Keirsey <31807370+hipsterusername@users.noreply.github.com> --- docs/contributing/DOWNLOAD_QUEUE.md | 277 ++++++++++++ invokeai/app/api/dependencies.py | 3 + invokeai/app/api/routers/download_queue.py | 111 +++++ invokeai/app/api_app.py | 2 + invokeai/app/services/download/__init__.py | 12 + .../app/services/download/download_base.py | 217 +++++++++ .../app/services/download/download_default.py | 418 ++++++++++++++++++ invokeai/app/services/events/events_base.py | 81 ++++ invokeai/app/services/invocation_services.py | 4 + .../model_install/model_install_base.py | 9 +- .../model_install/model_install_default.py | 10 +- mkdocs.yml | 2 + pyproject.toml | 1 + tests/aa_nodes/test_graph_execution_state.py | 1 + tests/aa_nodes/test_invoker.py | 1 + .../services/download/test_download_queue.py | 223 ++++++++++ .../model_install/test_model_install.py | 4 +- 17 files changed, 1367 insertions(+), 9 deletions(-) create mode 100644 docs/contributing/DOWNLOAD_QUEUE.md create mode 100644 invokeai/app/api/routers/download_queue.py create mode 100644 invokeai/app/services/download/__init__.py create mode 100644 invokeai/app/services/download/download_base.py create mode 100644 invokeai/app/services/download/download_default.py create mode 100644 tests/app/services/download/test_download_queue.py diff --git a/docs/contributing/DOWNLOAD_QUEUE.md b/docs/contributing/DOWNLOAD_QUEUE.md new file mode 100644 index 0000000000..d43c670d2c --- /dev/null +++ b/docs/contributing/DOWNLOAD_QUEUE.md @@ -0,0 +1,277 @@ +# The InvokeAI Download Queue + +The DownloadQueueService provides a multithreaded parallel download +queue for arbitrary URLs, with queue prioritization, event handling, +and restart capabilities. + +## Simple Example + +``` +from invokeai.app.services.download import DownloadQueueService, TqdmProgress + +download_queue = DownloadQueueService() +for url in ['https://github.com/invoke-ai/InvokeAI/blob/main/invokeai/assets/a-painting-of-a-fire.png?raw=true', + 'https://github.com/invoke-ai/InvokeAI/blob/main/invokeai/assets/birdhouse.png?raw=true', + 'https://github.com/invoke-ai/InvokeAI/blob/main/invokeai/assets/missing.png', + 'https://civitai.com/api/download/models/152309?type=Model&format=SafeTensor', + ]: + + # urls start downloading as soon as download() is called + download_queue.download(source=url, + dest='/tmp/downloads', + on_progress=TqdmProgress().update + ) + +download_queue.join() # wait for all downloads to finish +for job in download_queue.list_jobs(): + print(job.model_dump_json(exclude_none=True, indent=4),"\n") +``` + +Output: + +``` +{ + "source": "https://github.com/invoke-ai/InvokeAI/blob/main/invokeai/assets/a-painting-of-a-fire.png?raw=true", + "dest": "/tmp/downloads", + "id": 0, + "priority": 10, + "status": "completed", + "download_path": "/tmp/downloads/a-painting-of-a-fire.png", + "job_started": "2023-12-04T05:34:41.742174", + "job_ended": "2023-12-04T05:34:42.592035", + "bytes": 666734, + "total_bytes": 666734 +} + +{ + "source": "https://github.com/invoke-ai/InvokeAI/blob/main/invokeai/assets/birdhouse.png?raw=true", + "dest": "/tmp/downloads", + "id": 1, + "priority": 10, + "status": "completed", + "download_path": "/tmp/downloads/birdhouse.png", + "job_started": "2023-12-04T05:34:41.741975", + "job_ended": "2023-12-04T05:34:42.652841", + "bytes": 774949, + "total_bytes": 774949 +} + +{ + "source": "https://github.com/invoke-ai/InvokeAI/blob/main/invokeai/assets/missing.png", + "dest": "/tmp/downloads", + "id": 2, + "priority": 10, + "status": "error", + "job_started": "2023-12-04T05:34:41.742079", + "job_ended": "2023-12-04T05:34:42.147625", + "bytes": 0, + "total_bytes": 0, + "error_type": "HTTPError(Not Found)", + "error": "Traceback (most recent call last):\n File \"/home/lstein/Projects/InvokeAI/invokeai/app/services/download/download_default.py\", line 182, in _download_next_item\n self._do_download(job)\n File \"/home/lstein/Projects/InvokeAI/invokeai/app/services/download/download_default.py\", line 206, in _do_download\n raise HTTPError(resp.reason)\nrequests.exceptions.HTTPError: Not Found\n" +} + +{ + "source": "https://civitai.com/api/download/models/152309?type=Model&format=SafeTensor", + "dest": "/tmp/downloads", + "id": 3, + "priority": 10, + "status": "completed", + "download_path": "/tmp/downloads/xl_more_art-full_v1.safetensors", + "job_started": "2023-12-04T05:34:42.147645", + "job_ended": "2023-12-04T05:34:43.735990", + "bytes": 719020768, + "total_bytes": 719020768 +} +``` + +## The API + +The default download queue is `DownloadQueueService`, an +implementation of ABC `DownloadQueueServiceBase`. It juggles multiple +background download requests and provides facilities for interrogating +and cancelling the requests. Access to a current or past download task +is mediated via `DownloadJob` objects which report the current status +of a job request + +### The Queue Object + +A default download queue is located in +`ApiDependencies.invoker.services.download_queue`. However, you can +create additional instances if you need to isolate your queue from the +main one. + +``` +queue = DownloadQueueService(event_bus=events) +``` + +`DownloadQueueService()` takes three optional arguments: + +| **Argument** | **Type** | **Default** | **Description** | +|----------------|-----------------|---------------|-----------------| +| `max_parallel_dl` | int | 5 | Maximum number of simultaneous downloads allowed | +| `event_bus` | EventServiceBase | None | System-wide FastAPI event bus for reporting download events | +| `requests_session` | requests.sessions.Session | None | An alternative requests Session object to use for the download | + +`max_parallel_dl` specifies how many download jobs are allowed to run +simultaneously. Each will run in a different thread of execution. + +`event_bus` is an EventServiceBase, typically the one created at +InvokeAI startup. If present, download events are periodically emitted +on this bus to allow clients to follow download progress. + +`requests_session` is a url library requests Session object. It is +used for testing. + +### The Job object + +The queue operates on a series of download job objects. These objects +specify the source and destination of the download, and keep track of +the progress of the download. + +The only job type currently implemented is `DownloadJob`, a pydantic object with the +following fields: + +| **Field** | **Type** | **Default** | **Description** | +|----------------|-----------------|---------------|-----------------| +| _Fields passed in at job creation time_ | +| `source` | AnyHttpUrl | | Where to download from | +| `dest` | Path | | Where to download to | +| `access_token` | str | | [optional] string containing authentication token for access | +| `on_start` | Callable | | [optional] callback when the download starts | +| `on_progress` | Callable | | [optional] callback called at intervals during download progress | +| `on_complete` | Callable | | [optional] callback called after successful download completion | +| `on_error` | Callable | | [optional] callback called after an error occurs | +| `id` | int | auto assigned | Job ID, an integer >= 0 | +| `priority` | int | 10 | Job priority. Lower priorities run before higher priorities | +| | +| _Fields updated over the course of the download task_ +| `status` | DownloadJobStatus| | Status code | +| `download_path` | Path | | Path to the location of the downloaded file | +| `job_started` | float | | Timestamp for when the job started running | +| `job_ended` | float | | Timestamp for when the job completed or errored out | +| `job_sequence` | int | | A counter that is incremented each time a model is dequeued | +| `bytes` | int | 0 | Bytes downloaded so far | +| `total_bytes` | int | 0 | Total size of the file at the remote site | +| `error_type` | str | | String version of the exception that caused an error during download | +| `error` | str | | String version of the traceback associated with an error | +| `cancelled` | bool | False | Set to true if the job was cancelled by the caller| + +When you create a job, you can assign it a `priority`. If multiple +jobs are queued, the job with the lowest priority runs first. + +Every job has a `source` and a `dest`. `source` is a pydantic.networks AnyHttpUrl object. +The `dest` is a path on the local filesystem that specifies the +destination for the downloaded object. Its semantics are +described below. + +When the job is submitted, it is assigned a numeric `id`. The id can +then be used to fetch the job object from the queue. + +The `status` field is updated by the queue to indicate where the job +is in its lifecycle. Values are defined in the string enum +`DownloadJobStatus`, a symbol available from +`invokeai.app.services.download_manager`. Possible values are: + +| **Value** | **String Value** | ** Description ** | +|--------------|---------------------|-------------------| +| `WAITING` | waiting | Job is on the queue but not yet running| +| `RUNNING` | running | The download is started | +| `COMPLETED` | completed | Job has finished its work without an error | +| `ERROR` | error | Job encountered an error and will not run again| + +`job_started` and `job_ended` indicate when the job +was started (using a python timestamp) and when it completed. + +In case of an error, the job's status will be set to `DownloadJobStatus.ERROR`, the text of the +Exception that caused the error will be placed in the `error_type` +field and the traceback that led to the error will be in `error`. + +A cancelled job will have status `DownloadJobStatus.ERROR` and an +`error_type` field of "DownloadJobCancelledException". In addition, +the job's `cancelled` property will be set to True. + +### Callbacks + +Download jobs can be associated with a series of callbacks, each with +the signature `Callable[["DownloadJob"], None]`. The callbacks are assigned +using optional arguments `on_start`, `on_progress`, `on_complete` and +`on_error`. When the corresponding event occurs, the callback wil be +invoked and passed the job. The callback will be run in a `try:` +context in the same thread as the download job. Any exceptions that +occur during execution of the callback will be caught and converted +into a log error message, thereby allowing the download to continue. + +#### `TqdmProgress` + +The `invokeai.app.services.download.download_default` module defines a +class named `TqdmProgress` which can be used as an `on_progress` +handler to display a completion bar in the console. Use as follows: + +``` +from invokeai.app.services.download import TqdmProgress + +download_queue.download(source='http://some.server.somewhere/some_file', + dest='/tmp/downloads', + on_progress=TqdmProgress().update + ) + +``` + +### Events + +If the queue was initialized with the InvokeAI event bus (the case +when using `ApiDependencies.invoker.services.download_queue`), then +download events will also be issued on the bus. The events are: + +* `download_started` -- This is issued when a job is taken off the +queue and a request is made to the remote server for the URL headers, but before any data +has been downloaded. The event payload will contain the keys `source` +and `download_path`. The latter contains the path that the URL will be +downloaded to. + +* `download_progress -- This is issued periodically as the download +runs. The payload contains the keys `source`, `download_path`, +`current_bytes` and `total_bytes`. The latter two fields can be +used to display the percent complete. + +* `download_complete` -- This is issued when the download completes +successfully. The payload contains the keys `source`, `download_path` +and `total_bytes`. + +* `download_error` -- This is issued when the download stops because +of an error condition. The payload contains the fields `error_type` +and `error`. The former is the text representation of the exception, +and the latter is a traceback showing where the error occurred. + +### Job control + +To create a job call the queue's `download()` method. You can list all +jobs using `list_jobs()`, fetch a single job by its with +`id_to_job()`, cancel a running job with `cancel_job()`, cancel all +running jobs with `cancel_all_jobs()`, and wait for all jobs to finish +with `join()`. + +#### job = queue.download(source, dest, priority, access_token) + +Create a new download job and put it on the queue, returning the +DownloadJob object. + +#### jobs = queue.list_jobs() + +Return a list of all active and inactive `DownloadJob`s. + +#### job = queue.id_to_job(id) + +Return the job corresponding to given ID. + +Return a list of all active and inactive `DownloadJob`s. + +#### queue.prune_jobs() + +Remove inactive (complete or errored) jobs from the listing returned +by `list_jobs()`. + +#### queue.join() + +Block until all pending jobs have run to completion or errored out. + diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index eed178ee8b..9a8e06ac1a 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -11,6 +11,7 @@ from ..services.board_images.board_images_default import BoardImagesService from ..services.board_records.board_records_sqlite import SqliteBoardRecordStorage from ..services.boards.boards_default import BoardService from ..services.config import InvokeAIAppConfig +from ..services.download import DownloadQueueService from ..services.image_files.image_files_disk import DiskImageFileStorage from ..services.image_records.image_records_sqlite import SqliteImageRecordStorage from ..services.images.images_default import ImageService @@ -85,6 +86,7 @@ class ApiDependencies: latents = ForwardCacheLatentsStorage(DiskLatentsStorage(f"{output_folder}/latents")) model_manager = ModelManagerService(config, logger) model_record_service = ModelRecordServiceSQL(db=db) + download_queue_service = DownloadQueueService(event_bus=events) model_install_service = ModelInstallService( app_config=config, record_store=model_record_service, event_bus=events ) @@ -113,6 +115,7 @@ class ApiDependencies: logger=logger, model_manager=model_manager, model_records=model_record_service, + download_queue=download_queue_service, model_install=model_install_service, names=names, performance_statistics=performance_statistics, diff --git a/invokeai/app/api/routers/download_queue.py b/invokeai/app/api/routers/download_queue.py new file mode 100644 index 0000000000..92b658c370 --- /dev/null +++ b/invokeai/app/api/routers/download_queue.py @@ -0,0 +1,111 @@ +# Copyright (c) 2023 Lincoln D. Stein +"""FastAPI route for the download queue.""" + +from typing import List, Optional + +from fastapi import Body, Path, Response +from fastapi.routing import APIRouter +from pydantic.networks import AnyHttpUrl +from starlette.exceptions import HTTPException + +from invokeai.app.services.download import ( + DownloadJob, + UnknownJobIDException, +) + +from ..dependencies import ApiDependencies + +download_queue_router = APIRouter(prefix="/v1/download_queue", tags=["download_queue"]) + + +@download_queue_router.get( + "/", + operation_id="list_downloads", +) +async def list_downloads() -> List[DownloadJob]: + """Get a list of active and inactive jobs.""" + queue = ApiDependencies.invoker.services.download_queue + return queue.list_jobs() + + +@download_queue_router.patch( + "/", + operation_id="prune_downloads", + responses={ + 204: {"description": "All completed jobs have been pruned"}, + 400: {"description": "Bad request"}, + }, +) +async def prune_downloads(): + """Prune completed and errored jobs.""" + queue = ApiDependencies.invoker.services.download_queue + queue.prune_jobs() + return Response(status_code=204) + + +@download_queue_router.post( + "/i/", + operation_id="download", +) +async def download( + source: AnyHttpUrl = Body(description="download source"), + dest: str = Body(description="download destination"), + priority: int = Body(default=10, description="queue priority"), + access_token: Optional[str] = Body(default=None, description="token for authorization to download"), +) -> DownloadJob: + """Download the source URL to the file or directory indicted in dest.""" + queue = ApiDependencies.invoker.services.download_queue + return queue.download(source, dest, priority, access_token) + + +@download_queue_router.get( + "/i/{id}", + operation_id="get_download_job", + responses={ + 200: {"description": "Success"}, + 404: {"description": "The requested download JobID could not be found"}, + }, +) +async def get_download_job( + id: int = Path(description="ID of the download job to fetch."), +) -> DownloadJob: + """Get a download job using its ID.""" + try: + job = ApiDependencies.invoker.services.download_queue.id_to_job(id) + return job + except UnknownJobIDException as e: + raise HTTPException(status_code=404, detail=str(e)) + + +@download_queue_router.delete( + "/i/{id}", + operation_id="cancel_download_job", + responses={ + 204: {"description": "Job has been cancelled"}, + 404: {"description": "The requested download JobID could not be found"}, + }, +) +async def cancel_download_job( + id: int = Path(description="ID of the download job to cancel."), +): + """Cancel a download job using its ID.""" + try: + queue = ApiDependencies.invoker.services.download_queue + job = queue.id_to_job(id) + queue.cancel_job(job) + return Response(status_code=204) + except UnknownJobIDException as e: + raise HTTPException(status_code=404, detail=str(e)) + + +@download_queue_router.delete( + "/i", + operation_id="cancel_all_download_jobs", + responses={ + 204: {"description": "Download jobs have been cancelled"}, + }, +) +async def cancel_all_download_jobs(): + """Cancel all download jobs.""" + ApiDependencies.invoker.services.download_queue.cancel_all_jobs() + return Response(status_code=204) diff --git a/invokeai/app/api_app.py b/invokeai/app/api_app.py index ea28cdfe8e..8cbae23399 100644 --- a/invokeai/app/api_app.py +++ b/invokeai/app/api_app.py @@ -45,6 +45,7 @@ if True: # hack to make flake8 happy with imports coming after setting up the c app_info, board_images, boards, + download_queue, images, model_records, models, @@ -116,6 +117,7 @@ app.include_router(sessions.session_router, prefix="/api") app.include_router(utilities.utilities_router, prefix="/api") app.include_router(models.models_router, prefix="/api") app.include_router(model_records.model_records_router, prefix="/api") +app.include_router(download_queue.download_queue_router, prefix="/api") app.include_router(images.images_router, prefix="/api") app.include_router(boards.boards_router, prefix="/api") app.include_router(board_images.board_images_router, prefix="/api") diff --git a/invokeai/app/services/download/__init__.py b/invokeai/app/services/download/__init__.py new file mode 100644 index 0000000000..04c1dfdb1d --- /dev/null +++ b/invokeai/app/services/download/__init__.py @@ -0,0 +1,12 @@ +"""Init file for download queue.""" +from .download_base import DownloadJob, DownloadJobStatus, DownloadQueueServiceBase, UnknownJobIDException +from .download_default import DownloadQueueService, TqdmProgress + +__all__ = [ + "DownloadJob", + "DownloadQueueServiceBase", + "DownloadQueueService", + "TqdmProgress", + "DownloadJobStatus", + "UnknownJobIDException", +] diff --git a/invokeai/app/services/download/download_base.py b/invokeai/app/services/download/download_base.py new file mode 100644 index 0000000000..7ac5425443 --- /dev/null +++ b/invokeai/app/services/download/download_base.py @@ -0,0 +1,217 @@ +# Copyright (c) 2023 Lincoln D. Stein and the InvokeAI Development Team +"""Model download service.""" + +from abc import ABC, abstractmethod +from enum import Enum +from functools import total_ordering +from pathlib import Path +from typing import Any, Callable, List, Optional + +from pydantic import BaseModel, Field, PrivateAttr +from pydantic.networks import AnyHttpUrl + + +class DownloadJobStatus(str, Enum): + """State of a download job.""" + + WAITING = "waiting" # not enqueued, will not run + RUNNING = "running" # actively downloading + COMPLETED = "completed" # finished running + CANCELLED = "cancelled" # user cancelled + ERROR = "error" # terminated with an error message + + +class DownloadJobCancelledException(Exception): + """This exception is raised when a download job is cancelled.""" + + +class UnknownJobIDException(Exception): + """This exception is raised when an invalid job id is referened.""" + + +class ServiceInactiveException(Exception): + """This exception is raised when user attempts to initiate a download before the service is started.""" + + +DownloadEventHandler = Callable[["DownloadJob"], None] + + +@total_ordering +class DownloadJob(BaseModel): + """Class to monitor and control a model download request.""" + + # required variables to be passed in on creation + source: AnyHttpUrl = Field(description="Where to download from. Specific types specified in child classes.") + dest: Path = Field(description="Destination of downloaded model on local disk; a directory or file path") + access_token: Optional[str] = Field(default=None, description="authorization token for protected resources") + # automatically assigned on creation + id: int = Field(description="Numeric ID of this job", default=-1) # default id is a sentinel + priority: int = Field(default=10, description="Queue priority; lower values are higher priority") + + # set internally during download process + status: DownloadJobStatus = Field(default=DownloadJobStatus.WAITING, description="Status of the download") + download_path: Optional[Path] = Field(default=None, description="Final location of downloaded file") + job_started: Optional[str] = Field(default=None, description="Timestamp for when the download job started") + job_ended: Optional[str] = Field( + default=None, description="Timestamp for when the download job ende1d (completed or errored)" + ) + bytes: int = Field(default=0, description="Bytes downloaded so far") + total_bytes: int = Field(default=0, description="Total file size (bytes)") + + # set when an error occurs + error_type: Optional[str] = Field(default=None, description="Name of exception that caused an error") + error: Optional[str] = Field(default=None, description="Traceback of the exception that caused an error") + + # internal flag + _cancelled: bool = PrivateAttr(default=False) + + # optional event handlers passed in on creation + _on_start: Optional[DownloadEventHandler] = PrivateAttr(default=None) + _on_progress: Optional[DownloadEventHandler] = PrivateAttr(default=None) + _on_complete: Optional[DownloadEventHandler] = PrivateAttr(default=None) + _on_cancelled: Optional[DownloadEventHandler] = PrivateAttr(default=None) + _on_error: Optional[DownloadEventHandler] = PrivateAttr(default=None) + + def __le__(self, other: "DownloadJob") -> bool: + """Return True if this job's priority is less than another's.""" + return self.priority <= other.priority + + def cancel(self) -> None: + """Call to cancel the job.""" + self._cancelled = True + + # cancelled and the callbacks are private attributes in order to prevent + # them from being serialized and/or used in the Json Schema + @property + def cancelled(self) -> bool: + """Call to cancel the job.""" + return self._cancelled + + @property + def on_start(self) -> Optional[DownloadEventHandler]: + """Return the on_start event handler.""" + return self._on_start + + @property + def on_progress(self) -> Optional[DownloadEventHandler]: + """Return the on_progress event handler.""" + return self._on_progress + + @property + def on_complete(self) -> Optional[DownloadEventHandler]: + """Return the on_complete event handler.""" + return self._on_complete + + @property + def on_error(self) -> Optional[DownloadEventHandler]: + """Return the on_error event handler.""" + return self._on_error + + @property + def on_cancelled(self) -> Optional[DownloadEventHandler]: + """Return the on_cancelled event handler.""" + return self._on_cancelled + + def set_callbacks( + self, + on_start: Optional[DownloadEventHandler] = None, + on_progress: Optional[DownloadEventHandler] = None, + on_complete: Optional[DownloadEventHandler] = None, + on_cancelled: Optional[DownloadEventHandler] = None, + on_error: Optional[DownloadEventHandler] = None, + ) -> None: + """Set the callbacks for download events.""" + self._on_start = on_start + self._on_progress = on_progress + self._on_complete = on_complete + self._on_error = on_error + self._on_cancelled = on_cancelled + + +class DownloadQueueServiceBase(ABC): + """Multithreaded queue for downloading models via URL.""" + + @abstractmethod + def start(self, *args: Any, **kwargs: Any) -> None: + """Start the download worker threads.""" + + @abstractmethod + def stop(self, *args: Any, **kwargs: Any) -> None: + """Stop the download worker threads.""" + + @abstractmethod + def download( + self, + source: AnyHttpUrl, + dest: Path, + priority: int = 10, + access_token: Optional[str] = None, + on_start: Optional[DownloadEventHandler] = None, + on_progress: Optional[DownloadEventHandler] = None, + on_complete: Optional[DownloadEventHandler] = None, + on_cancelled: Optional[DownloadEventHandler] = None, + on_error: Optional[DownloadEventHandler] = None, + ) -> DownloadJob: + """ + Create a download job. + + :param source: Source of the download as a URL. + :param dest: Path to download to. See below. + :param on_start, on_progress, on_complete, on_error: Callbacks for the indicated + events. + :returns: A DownloadJob object for monitoring the state of the download. + + The `dest` argument is a Path object. Its behavior is: + + 1. If the path exists and is a directory, then the URL contents will be downloaded + into that directory using the filename indicated in the response's `Content-Disposition` field. + If no content-disposition is present, then the last component of the URL will be used (similar to + wget's behavior). + 2. If the path does not exist, then it is taken as the name of a new file to create with the downloaded + content. + 3. If the path exists and is an existing file, then the downloader will try to resume the download from + the end of the existing file. + + """ + pass + + @abstractmethod + def list_jobs(self) -> List[DownloadJob]: + """ + List active download jobs. + + :returns List[DownloadJob]: List of download jobs whose state is not "completed." + """ + pass + + @abstractmethod + def id_to_job(self, id: int) -> DownloadJob: + """ + Return the DownloadJob corresponding to the integer ID. + + :param id: ID of the DownloadJob. + + Exceptions: + * UnknownJobIDException + """ + pass + + @abstractmethod + def cancel_all_jobs(self): + """Cancel all active and enquedjobs.""" + pass + + @abstractmethod + def prune_jobs(self): + """Prune completed and errored queue items from the job list.""" + pass + + @abstractmethod + def cancel_job(self, job: DownloadJob): + """Cancel the job, clearing partial downloads and putting it into ERROR state.""" + pass + + @abstractmethod + def join(self): + """Wait until all jobs are off the queue.""" + pass diff --git a/invokeai/app/services/download/download_default.py b/invokeai/app/services/download/download_default.py new file mode 100644 index 0000000000..0f1dca4adc --- /dev/null +++ b/invokeai/app/services/download/download_default.py @@ -0,0 +1,418 @@ +# Copyright (c) 2023, Lincoln D. Stein +"""Implementation of multithreaded download queue for invokeai.""" + +import os +import re +import threading +import traceback +from logging import Logger +from pathlib import Path +from queue import Empty, PriorityQueue +from typing import Any, Dict, List, Optional, Set + +import requests +from pydantic.networks import AnyHttpUrl +from requests import HTTPError +from tqdm import tqdm + +from invokeai.app.services.events.events_base import EventServiceBase +from invokeai.app.util.misc import get_iso_timestamp +from invokeai.backend.util.logging import InvokeAILogger + +from .download_base import ( + DownloadEventHandler, + DownloadJob, + DownloadJobCancelledException, + DownloadJobStatus, + DownloadQueueServiceBase, + ServiceInactiveException, + UnknownJobIDException, +) + +# Maximum number of bytes to download during each call to requests.iter_content() +DOWNLOAD_CHUNK_SIZE = 100000 + + +class DownloadQueueService(DownloadQueueServiceBase): + """Class for queued download of models.""" + + _jobs: Dict[int, DownloadJob] + _max_parallel_dl: int = 5 + _worker_pool: Set[threading.Thread] + _queue: PriorityQueue[DownloadJob] + _stop_event: threading.Event + _lock: threading.Lock + _logger: Logger + _events: Optional[EventServiceBase] = None + _next_job_id: int = 0 + _accept_download_requests: bool = False + _requests: requests.sessions.Session + + def __init__( + self, + max_parallel_dl: int = 5, + event_bus: Optional[EventServiceBase] = None, + requests_session: Optional[requests.sessions.Session] = None, + ): + """ + Initialize DownloadQueue. + + :param max_parallel_dl: Number of simultaneous downloads allowed [5]. + :param requests_session: Optional requests.sessions.Session object, for unit tests. + """ + self._jobs = {} + self._next_job_id = 0 + self._queue = PriorityQueue() + self._stop_event = threading.Event() + self._worker_pool = set() + self._lock = threading.Lock() + self._logger = InvokeAILogger.get_logger("DownloadQueueService") + self._event_bus = event_bus + self._requests = requests_session or requests.Session() + self._accept_download_requests = False + self._max_parallel_dl = max_parallel_dl + + def start(self, *args: Any, **kwargs: Any) -> None: + """Start the download worker threads.""" + with self._lock: + if self._worker_pool: + raise Exception("Attempt to start the download service twice") + self._stop_event.clear() + self._start_workers(self._max_parallel_dl) + self._accept_download_requests = True + + def stop(self, *args: Any, **kwargs: Any) -> None: + """Stop the download worker threads.""" + with self._lock: + if not self._worker_pool: + raise Exception("Attempt to stop the download service before it was started") + self._accept_download_requests = False # reject attempts to add new jobs to queue + queued_jobs = [x for x in self.list_jobs() if x.status == DownloadJobStatus.WAITING] + active_jobs = [x for x in self.list_jobs() if x.status == DownloadJobStatus.RUNNING] + if queued_jobs: + self._logger.warning(f"Cancelling {len(queued_jobs)} queued downloads") + if active_jobs: + self._logger.info(f"Waiting for {len(active_jobs)} active download jobs to complete") + with self._queue.mutex: + self._queue.queue.clear() + self.join() # wait for all active jobs to finish + self._stop_event.set() + self._worker_pool.clear() + + def download( + self, + source: AnyHttpUrl, + dest: Path, + priority: int = 10, + access_token: Optional[str] = None, + on_start: Optional[DownloadEventHandler] = None, + on_progress: Optional[DownloadEventHandler] = None, + on_complete: Optional[DownloadEventHandler] = None, + on_cancelled: Optional[DownloadEventHandler] = None, + on_error: Optional[DownloadEventHandler] = None, + ) -> DownloadJob: + """Create a download job and return its ID.""" + if not self._accept_download_requests: + raise ServiceInactiveException( + "The download service is not currently accepting requests. Please call start() to initialize the service." + ) + with self._lock: + id = self._next_job_id + self._next_job_id += 1 + job = DownloadJob( + id=id, + source=source, + dest=dest, + priority=priority, + access_token=access_token, + ) + job.set_callbacks( + on_start=on_start, + on_progress=on_progress, + on_complete=on_complete, + on_cancelled=on_cancelled, + on_error=on_error, + ) + self._jobs[id] = job + self._queue.put(job) + return job + + def join(self) -> None: + """Wait for all jobs to complete.""" + self._queue.join() + + def list_jobs(self) -> List[DownloadJob]: + """List all the jobs.""" + return list(self._jobs.values()) + + def prune_jobs(self) -> None: + """Prune completed and errored queue items from the job list.""" + with self._lock: + to_delete = set() + for job_id, job in self._jobs.items(): + if self._in_terminal_state(job): + to_delete.add(job_id) + for job_id in to_delete: + del self._jobs[job_id] + + def id_to_job(self, id: int) -> DownloadJob: + """Translate a job ID into a DownloadJob object.""" + try: + return self._jobs[id] + except KeyError as excp: + raise UnknownJobIDException("Unrecognized job") from excp + + def cancel_job(self, job: DownloadJob) -> None: + """ + Cancel the indicated job. + + If it is running it will be stopped. + job.status will be set to DownloadJobStatus.CANCELLED + """ + with self._lock: + job.cancel() + + def cancel_all_jobs(self, preserve_partial: bool = False) -> None: + """Cancel all jobs (those not in enqueued, running or paused state).""" + for job in self._jobs.values(): + if not self._in_terminal_state(job): + self.cancel_job(job) + + def _in_terminal_state(self, job: DownloadJob) -> bool: + return job.status in [ + DownloadJobStatus.COMPLETED, + DownloadJobStatus.CANCELLED, + DownloadJobStatus.ERROR, + ] + + def _start_workers(self, max_workers: int) -> None: + """Start the requested number of worker threads.""" + self._stop_event.clear() + for i in range(0, max_workers): # noqa B007 + worker = threading.Thread(target=self._download_next_item, daemon=True) + self._logger.debug(f"Download queue worker thread {worker.name} starting.") + worker.start() + self._worker_pool.add(worker) + + def _download_next_item(self) -> None: + """Worker thread gets next job on priority queue.""" + done = False + while not done: + if self._stop_event.is_set(): + done = True + continue + try: + job = self._queue.get(timeout=1) + except Empty: + continue + + try: + job.job_started = get_iso_timestamp() + self._do_download(job) + self._signal_job_complete(job) + + except (OSError, HTTPError) as excp: + job.error_type = excp.__class__.__name__ + f"({str(excp)})" + job.error = traceback.format_exc() + self._signal_job_error(job) + except DownloadJobCancelledException: + self._signal_job_cancelled(job) + self._cleanup_cancelled_job(job) + + finally: + job.job_ended = get_iso_timestamp() + self._queue.task_done() + self._logger.debug(f"Download queue worker thread {threading.current_thread().name} exiting.") + + def _do_download(self, job: DownloadJob) -> None: + """Do the actual download.""" + url = job.source + header = {"Authorization": f"Bearer {job.access_token}"} if job.access_token else {} + open_mode = "wb" + + # Make a streaming request. This will retrieve headers including + # content-length and content-disposition, but not fetch any content itself + resp = self._requests.get(str(url), headers=header, stream=True) + if not resp.ok: + raise HTTPError(resp.reason) + content_length = int(resp.headers.get("content-length", 0)) + job.total_bytes = content_length + + if job.dest.is_dir(): + file_name = os.path.basename(str(url.path)) # default is to use the last bit of the URL + + if match := re.search('filename="(.+)"', resp.headers.get("Content-Disposition", "")): + remote_name = match.group(1) + if self._validate_filename(job.dest.as_posix(), remote_name): + file_name = remote_name + + job.download_path = job.dest / file_name + + else: + job.dest.parent.mkdir(parents=True, exist_ok=True) + job.download_path = job.dest + + assert job.download_path + + # Don't clobber an existing file. See commit 82c2c85202f88c6d24ff84710f297cfc6ae174af + # for code that instead resumes an interrupted download. + if job.download_path.exists(): + raise OSError(f"[Errno 17] File {job.download_path} exists") + + # append ".downloading" to the path + in_progress_path = self._in_progress_path(job.download_path) + + # signal caller that the download is starting. At this point, key fields such as + # download_path and total_bytes will be populated. We call it here because the might + # discover that the local file is already complete and generate a COMPLETED status. + self._signal_job_started(job) + + # "range not satisfiable" - local file is at least as large as the remote file + if resp.status_code == 416 or (content_length > 0 and job.bytes >= content_length): + self._logger.warning(f"{job.download_path}: complete file found. Skipping.") + return + + # "partial content" - local file is smaller than remote file + elif resp.status_code == 206 or job.bytes > 0: + self._logger.warning(f"{job.download_path}: partial file found. Resuming") + + # some other error + elif resp.status_code != 200: + raise HTTPError(resp.reason) + + self._logger.debug(f"{job.source}: Downloading {job.download_path}") + report_delta = job.total_bytes / 100 # report every 1% change + last_report_bytes = 0 + + # DOWNLOAD LOOP + with open(in_progress_path, open_mode) as file: + for data in resp.iter_content(chunk_size=DOWNLOAD_CHUNK_SIZE): + if job.cancelled: + raise DownloadJobCancelledException("Job was cancelled at caller's request") + + job.bytes += file.write(data) + if (job.bytes - last_report_bytes >= report_delta) or (job.bytes >= job.total_bytes): + last_report_bytes = job.bytes + self._signal_job_progress(job) + + # if we get here we are done and can rename the file to the original dest + in_progress_path.rename(job.download_path) + + def _validate_filename(self, directory: str, filename: str) -> bool: + pc_name_max = os.pathconf(directory, "PC_NAME_MAX") if hasattr(os, "pathconf") else 260 # hardcoded for windows + pc_path_max = ( + os.pathconf(directory, "PC_PATH_MAX") if hasattr(os, "pathconf") else 32767 + ) # hardcoded for windows with long names enabled + if "/" in filename: + return False + if filename.startswith(".."): + return False + if len(filename) > pc_name_max: + return False + if len(os.path.join(directory, filename)) > pc_path_max: + return False + return True + + def _in_progress_path(self, path: Path) -> Path: + return path.with_name(path.name + ".downloading") + + def _signal_job_started(self, job: DownloadJob) -> None: + job.status = DownloadJobStatus.RUNNING + if job.on_start: + try: + job.on_start(job) + except Exception as e: + self._logger.error(e) + if self._event_bus: + assert job.download_path + self._event_bus.emit_download_started(str(job.source), job.download_path.as_posix()) + + def _signal_job_progress(self, job: DownloadJob) -> None: + if job.on_progress: + try: + job.on_progress(job) + except Exception as e: + self._logger.error(e) + if self._event_bus: + assert job.download_path + self._event_bus.emit_download_progress( + str(job.source), + download_path=job.download_path.as_posix(), + current_bytes=job.bytes, + total_bytes=job.total_bytes, + ) + + def _signal_job_complete(self, job: DownloadJob) -> None: + job.status = DownloadJobStatus.COMPLETED + if job.on_complete: + try: + job.on_complete(job) + except Exception as e: + self._logger.error(e) + if self._event_bus: + assert job.download_path + self._event_bus.emit_download_complete( + str(job.source), download_path=job.download_path.as_posix(), total_bytes=job.total_bytes + ) + + def _signal_job_cancelled(self, job: DownloadJob) -> None: + job.status = DownloadJobStatus.CANCELLED + if job.on_cancelled: + try: + job.on_cancelled(job) + except Exception as e: + self._logger.error(e) + if self._event_bus: + self._event_bus.emit_download_cancelled(str(job.source)) + + def _signal_job_error(self, job: DownloadJob) -> None: + job.status = DownloadJobStatus.ERROR + if job.on_error: + try: + job.on_error(job) + except Exception as e: + self._logger.error(e) + if self._event_bus: + assert job.error_type + assert job.error + self._event_bus.emit_download_error(str(job.source), error_type=job.error_type, error=job.error) + + def _cleanup_cancelled_job(self, job: DownloadJob) -> None: + self._logger.warning(f"Cleaning up leftover files from cancelled download job {job.download_path}") + try: + if job.download_path: + partial_file = self._in_progress_path(job.download_path) + partial_file.unlink() + except OSError as excp: + self._logger.warning(excp) + + +# Example on_progress event handler to display a TQDM status bar +# Activate with: +# download_service.download('http://foo.bar/baz', '/tmp', on_progress=TqdmProgress().job_update +class TqdmProgress(object): + """TQDM-based progress bar object to use in on_progress handlers.""" + + _bars: Dict[int, tqdm] # the tqdm object + _last: Dict[int, int] # last bytes downloaded + + def __init__(self) -> None: # noqa D107 + self._bars = {} + self._last = {} + + def update(self, job: DownloadJob) -> None: # noqa D102 + job_id = job.id + # new job + if job_id not in self._bars: + assert job.download_path + dest = Path(job.download_path).name + self._bars[job_id] = tqdm( + desc=dest, + initial=0, + total=job.total_bytes, + unit="iB", + unit_scale=True, + ) + self._last[job_id] = 0 + self._bars[job_id].update(job.bytes - self._last[job_id]) + self._last[job_id] = job.bytes diff --git a/invokeai/app/services/events/events_base.py b/invokeai/app/services/events/events_base.py index 93b84afaf1..16e7d72b2a 100644 --- a/invokeai/app/services/events/events_base.py +++ b/invokeai/app/services/events/events_base.py @@ -17,6 +17,7 @@ from invokeai.backend.model_management.models.base import BaseModelType, ModelTy class EventServiceBase: queue_event: str = "queue_event" + download_event: str = "download_event" model_event: str = "model_event" """Basic event bus, to have an empty stand-in when not needed""" @@ -32,6 +33,13 @@ class EventServiceBase: payload={"event": event_name, "data": payload}, ) + def __emit_download_event(self, event_name: str, payload: dict) -> None: + payload["timestamp"] = get_timestamp() + self.dispatch( + event_name=EventServiceBase.download_event, + payload={"event": event_name, "data": payload}, + ) + def __emit_model_event(self, event_name: str, payload: dict) -> None: payload["timestamp"] = get_timestamp() self.dispatch( @@ -323,6 +331,79 @@ class EventServiceBase: payload={"queue_id": queue_id}, ) + def emit_download_started(self, source: str, download_path: str) -> None: + """ + Emit when a download job is started. + + :param url: The downloaded url + """ + self.__emit_download_event( + event_name="download_started", + payload={"source": source, "download_path": download_path}, + ) + + def emit_download_progress(self, source: str, download_path: str, current_bytes: int, total_bytes: int) -> None: + """ + Emit "download_progress" events at regular intervals during a download job. + + :param source: The downloaded source + :param download_path: The local downloaded file + :param current_bytes: Number of bytes downloaded so far + :param total_bytes: The size of the file being downloaded (if known) + """ + self.__emit_download_event( + event_name="download_progress", + payload={ + "source": source, + "download_path": download_path, + "current_bytes": current_bytes, + "total_bytes": total_bytes, + }, + ) + + def emit_download_complete(self, source: str, download_path: str, total_bytes: int) -> None: + """ + Emit a "download_complete" event at the end of a successful download. + + :param source: Source URL + :param download_path: Path to the locally downloaded file + :param total_bytes: The size of the downloaded file + """ + self.__emit_download_event( + event_name="download_complete", + payload={ + "source": source, + "download_path": download_path, + "total_bytes": total_bytes, + }, + ) + + def emit_download_cancelled(self, source: str) -> None: + """Emit a "download_cancelled" event in the event that the download was cancelled by user.""" + self.__emit_download_event( + event_name="download_cancelled", + payload={ + "source": source, + }, + ) + + def emit_download_error(self, source: str, error_type: str, error: str) -> None: + """ + Emit a "download_error" event when an download job encounters an exception. + + :param source: Source URL + :param error_type: The name of the exception that raised the error + :param error: The traceback from this error + """ + self.__emit_download_event( + event_name="download_error", + payload={ + "source": source, + "error_type": error_type, + "error": error, + }, + ) + def emit_model_install_started(self, source: str) -> None: """ Emitted when an install job is started. diff --git a/invokeai/app/services/invocation_services.py b/invokeai/app/services/invocation_services.py index d99a9aff25..11a4de99d6 100644 --- a/invokeai/app/services/invocation_services.py +++ b/invokeai/app/services/invocation_services.py @@ -11,6 +11,7 @@ if TYPE_CHECKING: from .board_records.board_records_base import BoardRecordStorageBase from .boards.boards_base import BoardServiceABC from .config import InvokeAIAppConfig + from .download import DownloadQueueServiceBase from .events.events_base import EventServiceBase from .image_files.image_files_base import ImageFileStorageBase from .image_records.image_records_base import ImageRecordStorageBase @@ -50,6 +51,7 @@ class InvocationServices: logger: "Logger" model_manager: "ModelManagerServiceBase" model_records: "ModelRecordServiceBase" + download_queue: "DownloadQueueServiceBase" model_install: "ModelInstallServiceBase" processor: "InvocationProcessorABC" performance_statistics: "InvocationStatsServiceBase" @@ -77,6 +79,7 @@ class InvocationServices: logger: "Logger", model_manager: "ModelManagerServiceBase", model_records: "ModelRecordServiceBase", + download_queue: "DownloadQueueServiceBase", model_install: "ModelInstallServiceBase", processor: "InvocationProcessorABC", performance_statistics: "InvocationStatsServiceBase", @@ -102,6 +105,7 @@ class InvocationServices: self.logger = logger self.model_manager = model_manager self.model_records = model_records + self.download_queue = download_queue self.model_install = model_install self.processor = processor self.performance_statistics = performance_statistics diff --git a/invokeai/app/services/model_install/model_install_base.py b/invokeai/app/services/model_install/model_install_base.py index 80b493d02e..3146b5350a 100644 --- a/invokeai/app/services/model_install/model_install_base.py +++ b/invokeai/app/services/model_install/model_install_base.py @@ -11,7 +11,6 @@ from typing_extensions import Annotated from invokeai.app.services.config import InvokeAIAppConfig from invokeai.app.services.events import EventServiceBase -from invokeai.app.services.invoker import Invoker from invokeai.app.services.model_records import ModelRecordServiceBase from invokeai.backend.model_manager import AnyModelConfig @@ -157,12 +156,12 @@ class ModelInstallServiceBase(ABC): :param event_bus: InvokeAI event bus for reporting events to. """ - def start(self, invoker: Invoker) -> None: - """Call at InvokeAI startup time.""" - self.sync_to_config() + @abstractmethod + def start(self, *args: Any, **kwarg: Any) -> None: + """Start the installer service.""" @abstractmethod - def stop(self) -> None: + def stop(self, *args: Any, **kwarg: Any) -> None: """Stop the model install service. After this the objection can be safely deleted.""" @property diff --git a/invokeai/app/services/model_install/model_install_default.py b/invokeai/app/services/model_install/model_install_default.py index 70cc4d5018..3dcb7c527e 100644 --- a/invokeai/app/services/model_install/model_install_default.py +++ b/invokeai/app/services/model_install/model_install_default.py @@ -71,7 +71,6 @@ class ModelInstallService(ModelInstallServiceBase): self._install_queue = Queue() self._cached_model_paths = set() self._models_installed = set() - self._start_installer_thread() @property def app_config(self) -> InvokeAIAppConfig: # noqa D102 @@ -85,8 +84,13 @@ class ModelInstallService(ModelInstallServiceBase): def event_bus(self) -> Optional[EventServiceBase]: # noqa D102 return self._event_bus - def stop(self, *args, **kwargs) -> None: - """Stop the install thread; after this the object can be deleted and garbage collected.""" + def start(self, *args: Any, **kwarg: Any) -> None: + """Start the installer thread.""" + self._start_installer_thread() + self.sync_to_config() + + def stop(self, *args: Any, **kwarg: Any) -> None: + """Stop the installer thread; after this the object can be deleted and garbage collected.""" self._install_queue.put(STOP_JOB) def _start_installer_thread(self) -> None: diff --git a/mkdocs.yml b/mkdocs.yml index 7c67a2777a..c8875c0ff1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -172,6 +172,8 @@ nav: - Adding Tests: 'contributing/TESTS.md' - Documentation: 'contributing/contribution_guides/documentation.md' - Nodes: 'contributing/INVOCATIONS.md' + - Model Manager: 'contributing/MODEL_MANAGER.md' + - Download Queue: 'contributing/DOWNLOAD_QUEUE.md' - Translation: 'contributing/contribution_guides/translation.md' - Tutorials: 'contributing/contribution_guides/tutorials.md' - Changelog: 'CHANGELOG.md' diff --git a/pyproject.toml b/pyproject.toml index 98018dc7cb..52fbdd01a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,6 +105,7 @@ dependencies = [ "pytest>6.0.0", "pytest-cov", "pytest-datadir", + "requests_testadapter", ] "xformers" = [ "xformers==0.0.23; sys_platform!='darwin'", diff --git a/tests/aa_nodes/test_graph_execution_state.py b/tests/aa_nodes/test_graph_execution_state.py index b7bf7771a6..bb31161426 100644 --- a/tests/aa_nodes/test_graph_execution_state.py +++ b/tests/aa_nodes/test_graph_execution_state.py @@ -68,6 +68,7 @@ def mock_services() -> InvocationServices: logger=logging, # type: ignore model_manager=None, # type: ignore model_records=None, # type: ignore + download_queue=None, # type: ignore model_install=None, # type: ignore names=None, # type: ignore performance_statistics=InvocationStatsService(), diff --git a/tests/aa_nodes/test_invoker.py b/tests/aa_nodes/test_invoker.py index 63908193fd..d4959282a1 100644 --- a/tests/aa_nodes/test_invoker.py +++ b/tests/aa_nodes/test_invoker.py @@ -74,6 +74,7 @@ def mock_services() -> InvocationServices: logger=logging, # type: ignore model_manager=None, # type: ignore model_records=None, # type: ignore + download_queue=None, # type: ignore model_install=None, # type: ignore names=None, # type: ignore performance_statistics=InvocationStatsService(), diff --git a/tests/app/services/download/test_download_queue.py b/tests/app/services/download/test_download_queue.py new file mode 100644 index 0000000000..6e36af75ce --- /dev/null +++ b/tests/app/services/download/test_download_queue.py @@ -0,0 +1,223 @@ +"""Test the queued download facility""" +import re +import time +from pathlib import Path +from typing import Any, Dict, List + +import pytest +import requests +from pydantic import BaseModel +from pydantic.networks import AnyHttpUrl +from requests.sessions import Session +from requests_testadapter import TestAdapter + +from invokeai.app.services.download import DownloadJob, DownloadJobStatus, DownloadQueueService +from invokeai.app.services.events.events_base import EventServiceBase + +# Prevent pytest deprecation warnings +TestAdapter.__test__ = False + + +@pytest.fixture +def session() -> requests.sessions.Session: + sess = requests.Session() + for i in ["12345", "9999", "54321"]: + content = ( + b"I am a safetensors file " + bytearray(i, "utf-8") + bytearray(32_000) + ) # for pause tests, must make content large + sess.mount( + f"http://www.civitai.com/models/{i}", + TestAdapter( + content, + headers={ + "Content-Length": len(content), + "Content-Disposition": f'filename="mock{i}.safetensors"', + }, + ), + ) + + # here are some malformed URLs to test + # missing the content length + sess.mount( + "http://www.civitai.com/models/missing", + TestAdapter( + b"Missing content length", + headers={ + "Content-Disposition": 'filename="missing.txt"', + }, + ), + ) + # not found test + sess.mount("http://www.civitai.com/models/broken", TestAdapter(b"Not found", status=404)) + + return sess + + +class DummyEvent(BaseModel): + """Dummy Event to use with Dummy Event service.""" + + event_name: str + payload: Dict[str, Any] + + +# A dummy event service for testing event issuing +class DummyEventService(EventServiceBase): + """Dummy event service for testing.""" + + events: List[DummyEvent] + + def __init__(self) -> None: + super().__init__() + self.events = [] + + def dispatch(self, event_name: str, payload: Any) -> None: + """Dispatch an event by appending it to self.events.""" + self.events.append(DummyEvent(event_name=payload["event"], payload=payload["data"])) + + +def test_basic_queue_download(tmp_path: Path, session: Session) -> None: + events = set() + + def event_handler(job: DownloadJob) -> None: + events.add(job.status) + + queue = DownloadQueueService( + requests_session=session, + ) + queue.start() + job = queue.download( + source=AnyHttpUrl("http://www.civitai.com/models/12345"), + dest=tmp_path, + on_start=event_handler, + on_progress=event_handler, + on_complete=event_handler, + on_error=event_handler, + ) + assert isinstance(job, DownloadJob), "expected the job to be of type DownloadJobBase" + assert isinstance(job.id, int), "expected the job id to be numeric" + queue.join() + + assert job.status == DownloadJobStatus("completed"), "expected job status to be completed" + assert Path(tmp_path, "mock12345.safetensors").exists(), f"expected {tmp_path}/mock12345.safetensors to exist" + + assert events == {DownloadJobStatus.RUNNING, DownloadJobStatus.COMPLETED} + queue.stop() + + +def test_errors(tmp_path: Path, session: Session) -> None: + queue = DownloadQueueService( + requests_session=session, + ) + queue.start() + + for bad_url in ["http://www.civitai.com/models/broken", "http://www.civitai.com/models/missing"]: + queue.download(AnyHttpUrl(bad_url), dest=tmp_path) + + queue.join() + jobs = queue.list_jobs() + print(jobs) + assert len(jobs) == 2 + jobs_dict = {str(x.source): x for x in jobs} + assert jobs_dict["http://www.civitai.com/models/broken"].status == DownloadJobStatus.ERROR + assert jobs_dict["http://www.civitai.com/models/broken"].error_type == "HTTPError(NOT FOUND)" + assert jobs_dict["http://www.civitai.com/models/missing"].status == DownloadJobStatus.COMPLETED + assert jobs_dict["http://www.civitai.com/models/missing"].total_bytes == 0 + queue.stop() + + +def test_event_bus(tmp_path: Path, session: Session) -> None: + event_bus = DummyEventService() + + queue = DownloadQueueService(requests_session=session, event_bus=event_bus) + queue.start() + queue.download( + source=AnyHttpUrl("http://www.civitai.com/models/12345"), + dest=tmp_path, + ) + queue.join() + events = event_bus.events + assert len(events) == 3 + assert events[0].payload["timestamp"] <= events[1].payload["timestamp"] + assert events[1].payload["timestamp"] <= events[2].payload["timestamp"] + assert events[0].event_name == "download_started" + assert events[1].event_name == "download_progress" + assert events[1].payload["total_bytes"] > 0 + assert events[1].payload["current_bytes"] <= events[1].payload["total_bytes"] + assert events[2].event_name == "download_complete" + assert events[2].payload["total_bytes"] == 32029 + + # test a failure + event_bus.events = [] # reset our accumulator + queue.download(source=AnyHttpUrl("http://www.civitai.com/models/broken"), dest=tmp_path) + queue.join() + events = event_bus.events + print("\n".join([x.model_dump_json() for x in events])) + assert len(events) == 1 + assert events[0].event_name == "download_error" + assert events[0].payload["error_type"] == "HTTPError(NOT FOUND)" + assert events[0].payload["error"] is not None + assert re.search(r"requests.exceptions.HTTPError: NOT FOUND", events[0].payload["error"]) + queue.stop() + + +def test_broken_callbacks(tmp_path: Path, session: requests.sessions.Session, capsys) -> None: + queue = DownloadQueueService( + requests_session=session, + ) + queue.start() + + callback_ran = False + + def broken_callback(job: DownloadJob) -> None: + nonlocal callback_ran + callback_ran = True + print(1 / 0) # deliberate error here + + job = queue.download( + source=AnyHttpUrl("http://www.civitai.com/models/12345"), + dest=tmp_path, + on_progress=broken_callback, + ) + + queue.join() + assert job.status == DownloadJobStatus.COMPLETED # should complete even though the callback is borked + assert Path(tmp_path, "mock12345.safetensors").exists() + assert callback_ran + # LS: The pytest capsys fixture does not seem to be working. I can see the + # correct stderr message in the pytest log, but it is not appearing in + # capsys.readouterr(). + # captured = capsys.readouterr() + # assert re.search("division by zero", captured.err) + queue.stop() + + +def test_cancel(tmp_path: Path, session: requests.sessions.Session) -> None: + event_bus = DummyEventService() + + queue = DownloadQueueService(requests_session=session, event_bus=event_bus) + queue.start() + + cancelled = False + + def slow_callback(job: DownloadJob) -> None: + time.sleep(2) + + def cancelled_callback(job: DownloadJob) -> None: + nonlocal cancelled + cancelled = True + + job = queue.download( + source=AnyHttpUrl("http://www.civitai.com/models/12345"), + dest=tmp_path, + on_start=slow_callback, + on_cancelled=cancelled_callback, + ) + queue.cancel_job(job) + queue.join() + + assert job.status == DownloadJobStatus.CANCELLED + assert cancelled + events = event_bus.events + assert events[-1].event_name == "download_cancelled" + assert events[-1].payload["source"] == "http://www.civitai.com/models/12345" + queue.stop() diff --git a/tests/app/services/model_install/test_model_install.py b/tests/app/services/model_install/test_model_install.py index 310bcfa0c1..9010f9f296 100644 --- a/tests/app/services/model_install/test_model_install.py +++ b/tests/app/services/model_install/test_model_install.py @@ -48,11 +48,13 @@ def store( @pytest.fixture def installer(app_config: InvokeAIAppConfig, store: ModelRecordServiceBase) -> ModelInstallServiceBase: - return ModelInstallService( + installer = ModelInstallService( app_config=app_config, record_store=store, event_bus=DummyEventService(), ) + installer.start() + return installer class DummyEvent(BaseModel): From 88c1af969f434e5659ad851eee4e8e2b3b2c8cb1 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Sat, 23 Dec 2023 03:10:18 -0500 Subject: [PATCH 238/515] update docker setup, improve docs, fix variable value Fixes #5336 --- docker/.env.sample | 2 +- docker/README.md | 18 ++++++++++++++---- docker/run.sh | 16 ++++++++++------ 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docker/.env.sample b/docker/.env.sample index 98ad307c04..a9be746d63 100644 --- a/docker/.env.sample +++ b/docker/.env.sample @@ -11,5 +11,5 @@ INVOKEAI_ROOT= # HUGGING_FACE_HUB_TOKEN= ## optional variables specific to the docker setup. -# GPU_DRIVER=cuda # or rocm +# GPU_DRIVER=nvidia #| rocm # CONTAINER_UID=1000 diff --git a/docker/README.md b/docker/README.md index 567ce6832d..c2e26bb9e4 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,6 +1,14 @@ # InvokeAI Containerized -All commands are to be run from the `docker` directory: `cd docker` +All commands should be run within the `docker` directory: `cd docker` + +## Quickstart :rocket: + +On a known working Linux+Docker+CUDA (Nvidia) system, execute `./run.sh` in this directory. It will take a few minutes - depending on your internet speed - to install the core models. Once the application starts up, open `http://localhost:9090` in your browser to Invoke! + +For more configuration options (using an AMD GPU, custom root directory location, etc): read on. + +## Detailed setup #### Linux @@ -18,7 +26,7 @@ All commands are to be run from the `docker` directory: `cd docker` This is done via Docker Desktop preferences -## Quickstart +### Configure Invoke environment 1. Make a copy of `env.sample` and name it `.env` (`cp env.sample .env` (Mac/Linux) or `copy example.env .env` (Windows)). Make changes as necessary. Set `INVOKEAI_ROOT` to an absolute path to: a. the desired location of the InvokeAI runtime directory, or @@ -37,19 +45,21 @@ The runtime directory (holding models and outputs) will be created in the locati The Docker daemon on the system must be already set up to use the GPU. In case of Linux, this involves installing `nvidia-docker-runtime` and configuring the `nvidia` runtime as default. Steps will be different for AMD. Please see Docker documentation for the most up-to-date instructions for using your GPU with Docker. +To use an AMD GPU, set `GPU_DRIVER=rocm` in your `.env` file. + ## Customize Check the `.env.sample` file. It contains some environment variables for running in Docker. Copy it, name it `.env`, and fill it in with your own values. Next time you run `run.sh`, your custom values will be used. You can also set these values in `docker-compose.yml` directly, but `.env` will help avoid conflicts when code is updated. -Example (values are optional, but setting `INVOKEAI_ROOT` is highly recommended): +Values are optional, but setting `INVOKEAI_ROOT` is highly recommended. The default is `~/invokeai`. Example: ```bash INVOKEAI_ROOT=/Volumes/WorkDrive/invokeai HUGGINGFACE_TOKEN=the_actual_token CONTAINER_UID=1000 -GPU_DRIVER=cuda +GPU_DRIVER=nvidia ``` Any environment variables supported by InvokeAI can be set here - please see the [Configuration docs](https://invoke-ai.github.io/InvokeAI/features/CONFIGURATION/) for further detail. diff --git a/docker/run.sh b/docker/run.sh index 4fe1bf4237..409df508dd 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -set -e +set -e -o pipefail run() { local scriptdir=$(dirname "${BASH_SOURCE[0]}") @@ -8,14 +8,18 @@ run() { local build_args="" local profile="" - [[ -f ".env" ]] && - build_args=$(awk '$1 ~ /=[^$]/ && $0 !~ /^#/ {print "--build-arg " $0 " "}' .env) && - profile="$(awk -F '=' '/GPU_DRIVER/ {print $2}' .env)" + touch .env + build_args=$(awk '$1 ~ /=[^$]/ && $0 !~ /^#/ {print "--build-arg " $0 " "}' .env) && + profile="$(awk -F '=' '/GPU_DRIVER/ {print $2}' .env)" + + [[ -z "$profile" ]] && profile="nvidia" local service_name="invokeai-$profile" - printf "%s\n" "docker compose build args:" - printf "%s\n" "$build_args" + if [[ ! -z "$build_args" ]]; then + printf "%s\n" "docker compose build args:" + printf "%s\n" "$build_args" + fi docker compose build $build_args unset build_args From 5b38b5ea7fa49e3717e22af5c97e103562e0008d Mon Sep 17 00:00:00 2001 From: Riccardo Giovanetti Date: Sat, 23 Dec 2023 09:56:11 +0100 Subject: [PATCH 239/515] translationBot(ui): update translation (Italian) Currently translated at 97.3% (1329 of 1365 strings) Co-authored-by: Riccardo Giovanetti Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/it.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/invokeai/frontend/web/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json index 6f912d27c0..8c4b548f07 100644 --- a/invokeai/frontend/web/public/locales/it.json +++ b/invokeai/frontend/web/public/locales/it.json @@ -113,7 +113,8 @@ "orderBy": "Ordinato per", "nextPage": "Pagina successiva", "saveAs": "Salva come", - "unsaved": "Non salvato" + "unsaved": "Non salvato", + "direction": "Direzione" }, "gallery": { "generations": "Generazioni", @@ -1112,7 +1113,8 @@ "betaDesc": "Questa invocazione è in versione beta. Fino a quando non sarà stabile, potrebbe subire modifiche importanti durante gli aggiornamenti dell'app. Abbiamo intenzione di supportare questa invocazione a lungo termine.", "newWorkflow": "Nuovo flusso di lavoro", "newWorkflowDesc": "Creare un nuovo flusso di lavoro?", - "newWorkflowDesc2": "Il flusso di lavoro attuale presenta modifiche non salvate." + "newWorkflowDesc2": "Il flusso di lavoro attuale presenta modifiche non salvate.", + "unsupportedAnyOfLength": "unione di troppi elementi ({{count}})" }, "boards": { "autoAddBoard": "Aggiungi automaticamente bacheca", From 89e7848079125685b98e9ef8ca6dd529a3b8d703 Mon Sep 17 00:00:00 2001 From: Surisen Date: Sat, 23 Dec 2023 09:56:11 +0100 Subject: [PATCH 240/515] translationBot(ui): update translation (Chinese (Simplified)) Currently translated at 100.0% (1365 of 1365 strings) Co-authored-by: Surisen Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/zh_CN.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/invokeai/frontend/web/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json index ee12f2ad07..b9f1a71370 100644 --- a/invokeai/frontend/web/public/locales/zh_CN.json +++ b/invokeai/frontend/web/public/locales/zh_CN.json @@ -120,7 +120,8 @@ "orderBy": "排序方式:", "nextPage": "下一页", "saveAs": "保存为", - "unsaved": "未保存" + "unsaved": "未保存", + "ai": "ai" }, "gallery": { "generations": "生成的图像", @@ -1122,7 +1123,8 @@ "betaDesc": "此调用尚处于测试阶段。在稳定之前,它可能会在项目更新期间发生破坏性更改。本项目计划长期支持这种调用。", "newWorkflow": "新建工作流", "newWorkflowDesc": "是否创建一个新的工作流?", - "newWorkflowDesc2": "当前工作流有未保存的更改。" + "newWorkflowDesc2": "当前工作流有未保存的更改。", + "unsupportedAnyOfLength": "联合(union)数据类型数目过多 ({{count}})" }, "controlnet": { "resize": "直接缩放", From 5196e4bc382d5e566450846a112962f26618bff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=8A=B9=EC=84=9D?= Date: Sat, 23 Dec 2023 09:56:11 +0100 Subject: [PATCH 241/515] translationBot(ui): update translation (Korean) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 57.2% (781 of 1365 strings) Co-authored-by: 이승석 Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/ko/ Translation: InvokeAI/Web UI --- invokeai/frontend/web/public/locales/ko.json | 846 ++++++++++++++++++- 1 file changed, 841 insertions(+), 5 deletions(-) diff --git a/invokeai/frontend/web/public/locales/ko.json b/invokeai/frontend/web/public/locales/ko.json index 9bee147c3e..e5283f4113 100644 --- a/invokeai/frontend/web/public/locales/ko.json +++ b/invokeai/frontend/web/public/locales/ko.json @@ -15,7 +15,7 @@ "langBrPortuguese": "Português do Brasil", "langRussian": "Русский", "langSpanish": "Español", - "nodes": "노드", + "nodes": "Workflow Editor", "nodesDesc": "이미지 생성을 위한 노드 기반 시스템은 현재 개발 중입니다. 이 놀라운 기능에 대한 업데이트를 계속 지켜봐 주세요.", "postProcessing": "후처리", "postProcessDesc2": "보다 진보된 후처리 작업을 위한 전용 UI가 곧 출시될 예정입니다.", @@ -25,7 +25,7 @@ "trainingDesc2": "InvokeAI는 이미 메인 스크립트를 사용한 Textual Inversion를 이용한 Custom embedding 학습을 지원하고 있습니다.", "upload": "업로드", "close": "닫기", - "load": "로드", + "load": "불러오기", "back": "뒤로 가기", "statusConnected": "연결됨", "statusDisconnected": "연결 끊김", @@ -58,7 +58,69 @@ "statusGeneratingImageToImage": "이미지->이미지 생성", "statusProcessingComplete": "처리 완료", "statusIterationComplete": "반복(Iteration) 완료", - "statusSavingImage": "이미지 저장" + "statusSavingImage": "이미지 저장", + "t2iAdapter": "T2I 어댑터", + "communityLabel": "커뮤니티", + "txt2img": "텍스트->이미지", + "dontAskMeAgain": "다시 묻지 마세요", + "loadingInvokeAI": "Invoke AI 불러오는 중", + "checkpoint": "체크포인트", + "format": "형식", + "unknown": "알려지지 않음", + "areYouSure": "확실하나요?", + "folder": "폴더", + "inpaint": "inpaint", + "updated": "업데이트 됨", + "on": "켜기", + "save": "저장", + "langPortuguese": "Português", + "created": "생성됨", + "nodeEditor": "Node Editor", + "error": "에러", + "prevPage": "이전 페이지", + "ipAdapter": "IP 어댑터", + "controlAdapter": "제어 어댑터", + "installed": "설치됨", + "accept": "수락", + "ai": "인공지능", + "auto": "자동", + "file": "파일", + "openInNewTab": "새 탭에서 열기", + "delete": "삭제", + "template": "템플릿", + "cancel": "취소", + "controlNet": "컨트롤넷", + "outputs": "결과물", + "unknownError": "알려지지 않은 에러", + "statusProcessing": "처리 중", + "linear": "선형", + "imageFailedToLoad": "이미지를 로드할 수 없음", + "direction": "방향", + "data": "데이터", + "somethingWentWrong": "뭔가 잘못됐어요", + "imagePrompt": "이미지 프롬프트", + "modelManager": "Model Manager", + "lightMode": "라이트 모드", + "safetensors": "Safetensors", + "outpaint": "outpaint", + "langKorean": "한국어", + "orderBy": "정렬 기준", + "generate": "생성", + "copyError": "$t(gallery.copy) 에러", + "learnMore": "더 알아보기", + "nextPage": "다음 페이지", + "saveAs": "다른 이름으로 저장", + "darkMode": "다크 모드", + "loading": "불러오는 중", + "random": "랜덤", + "langHebrew": "Hebrew", + "batch": "Batch 매니저", + "postprocessing": "후처리", + "advanced": "고급", + "unsaved": "저장되지 않음", + "input": "입력", + "details": "세부사항", + "notInstalled": "설치되지 않음" }, "gallery": { "showGenerations": "생성된 이미지 보기", @@ -68,7 +130,35 @@ "galleryImageSize": "이미지 크기", "galleryImageResetSize": "사이즈 리셋", "gallerySettings": "갤러리 설정", - "maintainAspectRatio": "종횡비 유지" + "maintainAspectRatio": "종횡비 유지", + "deleteSelection": "선택 항목 삭제", + "featuresWillReset": "이 이미지를 삭제하면 해당 기능이 즉시 재설정됩니다.", + "deleteImageBin": "삭제된 이미지는 운영 체제의 Bin으로 전송됩니다.", + "assets": "자산", + "problemDeletingImagesDesc": "하나 이상의 이미지를 삭제할 수 없습니다", + "noImagesInGallery": "보여줄 이미지가 없음", + "autoSwitchNewImages": "새로운 이미지로 자동 전환", + "loading": "불러오는 중", + "unableToLoad": "갤러리를 로드할 수 없음", + "preparingDownload": "다운로드 준비", + "preparingDownloadFailed": "다운로드 준비 중 발생한 문제", + "singleColumnLayout": "단일 열 레이아웃", + "image": "이미지", + "loadMore": "더 불러오기", + "drop": "드랍", + "problemDeletingImages": "이미지 삭제 중 발생한 문제", + "downloadSelection": "선택 항목 다운로드", + "deleteImage": "이미지 삭제", + "currentlyInUse": "이 이미지는 현재 다음 기능에서 사용되고 있습니다:", + "allImagesLoaded": "불러온 모든 이미지", + "dropOrUpload": "$t(gallery.drop) 또는 업로드", + "copy": "복사", + "download": "다운로드", + "deleteImagePermanent": "삭제된 이미지는 복원할 수 없습니다.", + "noImageSelected": "선택된 이미지 없음", + "autoAssignBoardOnClick": "클릭 시 Board로 자동 할당", + "setCurrentImage": "현재 이미지로 설정", + "dropToUpload": "업로드를 위해 $t(gallery.drop)" }, "unifiedCanvas": { "betaPreserveMasked": "마스크 레이어 유지" @@ -79,6 +169,752 @@ "nextImage": "다음 이미지", "mode": "모드", "menu": "메뉴", - "modelSelect": "모델 선택" + "modelSelect": "모델 선택", + "zoomIn": "확대하기", + "rotateClockwise": "시계방향으로 회전", + "uploadImage": "이미지 업로드", + "showGalleryPanel": "갤러리 패널 표시", + "useThisParameter": "해당 변수 사용", + "reset": "리셋", + "loadMore": "더 불러오기", + "zoomOut": "축소하기", + "rotateCounterClockwise": "반시계방향으로 회전", + "showOptionsPanel": "사이드 패널 표시", + "toggleAutoscroll": "자동 스크롤 전환", + "toggleLogViewer": "Log Viewer 전환" + }, + "modelManager": { + "pathToCustomConfig": "사용자 지정 구성 경로", + "importModels": "모델 가져오기", + "availableModels": "사용 가능한 모델", + "conversionNotSupported": "변환이 지원되지 않음", + "noCustomLocationProvided": "사용자 지정 위치가 제공되지 않음", + "onnxModels": "Onnx", + "vaeRepoID": "VAE Repo ID", + "modelExists": "모델 존재", + "custom": "사용자 지정", + "addModel": "모델 추가", + "none": "없음", + "modelConverted": "변환된 모델", + "width": "너비", + "weightedSum": "가중합", + "inverseSigmoid": "Inverse Sigmoid", + "invokeAIFolder": "Invoke AI 폴더", + "syncModelsDesc": "모델이 백엔드와 동기화되지 않은 경우 이 옵션을 사용하여 새로 고침할 수 있습니다. 이는 일반적으로 응용 프로그램이 부팅된 후 수동으로 모델.yaml 파일을 업데이트하거나 InvokeAI root 폴더에 모델을 추가하는 경우에 유용합니다.", + "convert": "변환", + "vae": "VAE", + "noModels": "모델을 찾을 수 없음", + "statusConverting": "변환중", + "sigmoid": "Sigmoid", + "deleteModel": "모델 삭제", + "modelLocation": "모델 위치", + "merge": "병합", + "v1": "v1", + "description": "Description", + "modelMergeInterpAddDifferenceHelp": "이 모드에서 모델 3은 먼저 모델 2에서 차감됩니다. 결과 버전은 위에 설정된 Alpha 비율로 모델 1과 혼합됩니다.", + "customConfig": "사용자 지정 구성", + "cannotUseSpaces": "공백을 사용할 수 없음", + "formMessageDiffusersModelLocationDesc": "적어도 하나 이상 입력해 주세요.", + "addDiffuserModel": "Diffusers 추가", + "search": "검색", + "predictionType": "예측 유형(안정 확산 2.x 모델 및 간혹 안정 확산 1.x 모델의 경우)", + "widthValidationMsg": "모형의 기본 너비.", + "selectAll": "모두 선택", + "vaeLocation": "VAE 위치", + "selectModel": "모델 선택", + "modelAdded": "추가된 모델", + "repo_id": "Repo ID", + "modelSyncFailed": "모델 동기화 실패", + "convertToDiffusersHelpText6": "이 모델을 변환하시겠습니까?", + "config": "구성", + "quickAdd": "빠른 추가", + "selected": "선택된", + "modelTwo": "모델 2", + "simpleModelDesc": "로컬 Difffusers 모델, 로컬 체크포인트/안전 센서 모델 HuggingFace Repo ID 또는 체크포인트/Diffusers 모델 URL의 경로를 제공합니다.", + "customSaveLocation": "사용자 정의 저장 위치", + "advanced": "고급", + "modelsFound": "발견된 모델", + "load": "불러오기", + "height": "높이", + "modelDeleted": "삭제된 모델", + "inpainting": "v1 Inpainting", + "vaeLocationValidationMsg": "VAE가 있는 경로.", + "convertToDiffusersHelpText2": "이 프로세스는 모델 관리자 항목을 동일한 모델의 Diffusers 버전으로 대체합니다.", + "modelUpdateFailed": "모델 업데이트 실패", + "modelUpdated": "업데이트된 모델", + "noModelsFound": "모델을 찾을 수 없음", + "useCustomConfig": "사용자 지정 구성 사용", + "formMessageDiffusersVAELocationDesc": "제공되지 않은 경우 호출AIA 파일을 위의 모델 위치 내에서 VAE 파일을 찾습니다.", + "formMessageDiffusersVAELocation": "VAE 위치", + "checkpointModels": "Checkpoints", + "modelOne": "모델 1", + "settings": "설정", + "heightValidationMsg": "모델의 기본 높이입니다.", + "selectAndAdd": "아래 나열된 모델 선택 및 추가", + "convertToDiffusersHelpText5": "디스크 공간이 충분한지 확인해 주세요. 모델은 일반적으로 2GB에서 7GB 사이로 다양합니다.", + "deleteConfig": "구성 삭제", + "deselectAll": "모두 선택 취소", + "modelConversionFailed": "모델 변환 실패", + "clearCheckpointFolder": "Checkpoint Folder 지우기", + "modelEntryDeleted": "모델 항목 삭제", + "deleteMsg1": "InvokeAI에서 이 모델을 삭제하시겠습니까?", + "syncModels": "동기화 모델", + "mergedModelSaveLocation": "위치 저장", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "modelType": "모델 유형", + "nameValidationMsg": "모델 이름 입력", + "cached": "cached", + "modelsMerged": "병합된 모델", + "formMessageDiffusersModelLocation": "Diffusers 모델 위치", + "modelsMergeFailed": "모델 병합 실패", + "convertingModelBegin": "모델 변환 중입니다. 잠시만 기다려 주십시오.", + "v2_base": "v2 (512px)", + "scanForModels": "모델 검색", + "modelLocationValidationMsg": "Diffusers 모델이 저장된 로컬 폴더의 경로 제공", + "name": "이름", + "selectFolder": "폴더 선택", + "updateModel": "모델 업데이트", + "addNewModel": "새로운 모델 추가", + "customConfigFileLocation": "사용자 지정 구성 파일 위치", + "descriptionValidationMsg": "모델에 대한 description 추가", + "safetensorModels": "SafeTensors", + "convertToDiffusersHelpText1": "이 모델은 🧨 Diffusers 형식으로 변환됩니다.", + "modelsSynced": "동기화된 모델", + "vaePrecision": "VAE 정밀도", + "invokeRoot": "InvokeAI 폴더", + "checkpointFolder": "Checkpoint Folder", + "mergedModelCustomSaveLocation": "사용자 지정 경로", + "mergeModels": "모델 병합", + "interpolationType": "Interpolation 타입", + "modelMergeHeaderHelp2": "Diffusers만 병합이 가능합니다. 체크포인트 모델 병합을 원하신다면 먼저 Diffusers로 변환해주세요.", + "convertToDiffusersSaveLocation": "위치 저장", + "deleteMsg2": "모델이 InvokeAI root 폴더에 있으면 디스크에서 모델이 삭제됩니다. 사용자 지정 위치를 사용하는 경우 모델이 디스크에서 삭제되지 않습니다.", + "oliveModels": "Olives", + "repoIDValidationMsg": "모델의 온라인 저장소", + "baseModel": "기본 모델", + "scanAgain": "다시 검색", + "pickModelType": "모델 유형 선택", + "sameFolder": "같은 폴더", + "addNew": "New 추가", + "manual": "매뉴얼", + "convertToDiffusersHelpText3": "디스크의 체크포인트 파일이 InvokeAI root 폴더에 있으면 삭제됩니다. 사용자 지정 위치에 있으면 삭제되지 않습니다.", + "addCheckpointModel": "체크포인트 / 안전 센서 모델 추가", + "configValidationMsg": "모델의 구성 파일에 대한 경로.", + "modelManager": "모델 매니저", + "variant": "Variant", + "vaeRepoIDValidationMsg": "VAE의 온라인 저장소", + "loraModels": "LoRAs", + "modelDeleteFailed": "모델을 삭제하지 못했습니다", + "convertToDiffusers": "Diffusers로 변환", + "allModels": "모든 모델", + "modelThree": "모델 3", + "findModels": "모델 찾기", + "notLoaded": "로드되지 않음", + "alpha": "Alpha", + "diffusersModels": "Diffusers", + "modelMergeAlphaHelp": "Alpha는 모델의 혼합 강도를 제어합니다. Alpha 값이 낮을수록 두 번째 모델의 영향력이 줄어듭니다.", + "addDifference": "Difference 추가", + "noModelSelected": "선택한 모델 없음", + "modelMergeHeaderHelp1": "최대 3개의 다른 모델을 병합하여 필요에 맞는 혼합물을 만들 수 있습니다.", + "ignoreMismatch": "선택한 모델 간의 불일치 무시", + "v2_768": "v2 (768px)", + "convertToDiffusersHelpText4": "이것은 한 번의 과정일 뿐입니다. 컴퓨터 사양에 따라 30-60초 정도 소요될 수 있습니다.", + "model": "모델", + "addManually": "Manually 추가", + "addSelected": "Selected 추가", + "mergedModelName": "병합된 모델 이름", + "delete": "삭제" + }, + "controlnet": { + "amult": "a_mult", + "resize": "크기 조정", + "showAdvanced": "고급 표시", + "contentShuffleDescription": "이미지에서 content 섞기", + "bgth": "bg_th", + "addT2IAdapter": "$t(common.t2iAdapter) 추가", + "pidi": "PIDI", + "importImageFromCanvas": "캔버스에서 이미지 가져오기", + "lineartDescription": "이미지->lineart 변환", + "normalBae": "Normal BAE", + "importMaskFromCanvas": "캔버스에서 Mask 가져오기", + "hed": "HED", + "contentShuffle": "Content Shuffle", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) 사용 가능, $t(common.t2iAdapter) 사용 불가능", + "ipAdapterModel": "Adapter 모델", + "resetControlImage": "Control Image 재설정", + "beginEndStepPercent": "Begin / End Step Percentage", + "mlsdDescription": "Minimalist Line Segment Detector", + "duplicate": "복제", + "balanced": "Balanced", + "f": "F", + "h": "H", + "prompt": "프롬프트", + "depthMidasDescription": "Midas를 사용하여 Depth map 생성하기", + "openPoseDescription": "Openpose를 이용한 사람 포즈 추정", + "control": "Control", + "resizeMode": "크기 조정 모드", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 사용 가능,$t(common.controlNet) 사용 불가능", + "coarse": "Coarse", + "weight": "Weight", + "selectModel": "모델 선택", + "crop": "Crop", + "depthMidas": "Depth (Midas)", + "w": "W", + "processor": "프로세서", + "addControlNet": "$t(common.controlNet) 추가", + "none": "해당없음", + "incompatibleBaseModel": "호환되지 않는 기본 모델:", + "enableControlnet": "사용 가능한 ControlNet", + "detectResolution": "해상도 탐지", + "controlNetT2IMutexDesc": "$t(common.controlNet)와 $t(common.t2iAdapter)는 현재 동시에 지원되지 않습니다.", + "pidiDescription": "PIDI image 처리", + "mediapipeFace": "Mediapipe Face", + "mlsd": "M-LSD", + "controlMode": "Control Mode", + "fill": "채우기", + "cannyDescription": "Canny 모서리 삭제", + "addIPAdapter": "$t(common.ipAdapter) 추가", + "lineart": "Lineart", + "colorMapDescription": "이미지에서 color map을 생성합니다", + "lineartAnimeDescription": "Anime-style lineart 처리", + "minConfidence": "Min Confidence", + "imageResolution": "이미지 해상도", + "megaControl": "Mega Control", + "depthZoe": "Depth (Zoe)", + "colorMap": "색", + "lowThreshold": "Low Threshold", + "autoConfigure": "프로세서 자동 구성", + "highThreshold": "High Threshold", + "normalBaeDescription": "Normal BAE 처리", + "noneDescription": "처리되지 않음", + "saveControlImage": "Control Image 저장", + "openPose": "Openpose", + "toggleControlNet": "해당 ControlNet으로 전환", + "delete": "삭제", + "controlAdapter_other": "Control Adapter(s)", + "safe": "Safe", + "colorMapTileSize": "타일 크기", + "lineartAnime": "Lineart Anime", + "ipAdapterImageFallback": "IP Adapter Image가 선택되지 않음", + "mediapipeFaceDescription": "Mediapipe를 사용하여 Face 탐지", + "canny": "Canny", + "depthZoeDescription": "Zoe를 사용하여 Depth map 생성하기", + "hedDescription": "Holistically-Nested 모서리 탐지", + "setControlImageDimensions": "Control Image Dimensions를 W/H로 설정", + "scribble": "scribble", + "resetIPAdapterImage": "IP Adapter Image 재설정", + "handAndFace": "Hand and Face", + "enableIPAdapter": "사용 가능한 IP Adapter", + "maxFaces": "Max Faces" + }, + "hotkeys": { + "toggleGalleryPin": { + "title": "Gallery Pin 전환", + "desc": "갤러리를 UI에 고정했다가 풉니다" + }, + "toggleSnap": { + "desc": "Snap을 Grid로 전환", + "title": "Snap 전환" + }, + "setSeed": { + "title": "시드 설정", + "desc": "현재 이미지의 시드 사용" + }, + "keyboardShortcuts": "키보드 바로 가기", + "decreaseGalleryThumbSize": { + "desc": "갤러리 미리 보기 크기 축소", + "title": "갤러리 이미지 크기 축소" + }, + "previousStagingImage": { + "title": "이전 스테이징 이미지", + "desc": "이전 스테이징 영역 이미지" + }, + "decreaseBrushSize": { + "title": "브러시 크기 줄이기", + "desc": "캔버스 브러시/지우개 크기 감소" + }, + "consoleToggle": { + "desc": "콘솔 열고 닫기", + "title": "콘솔 전환" + }, + "selectBrush": { + "desc": "캔버스 브러시를 선택", + "title": "브러시 선택" + }, + "upscale": { + "desc": "현재 이미지를 업스케일", + "title": "업스케일" + }, + "previousImage": { + "title": "이전 이미지", + "desc": "갤러리에 이전 이미지 표시" + }, + "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", + "toggleOptions": { + "desc": "옵션 패널을 열고 닫기", + "title": "옵션 전환" + }, + "selectEraser": { + "title": "지우개 선택", + "desc": "캔버스 지우개를 선택" + }, + "setPrompt": { + "title": "프롬프트 설정", + "desc": "현재 이미지의 프롬프트 사용" + }, + "acceptStagingImage": { + "desc": "현재 준비 영역 이미지 허용", + "title": "준비 이미지 허용" + }, + "resetView": { + "desc": "Canvas View 초기화", + "title": "View 초기화" + }, + "hideMask": { + "title": "Mask 숨김", + "desc": "mask 숨김/숨김 해제" + }, + "pinOptions": { + "title": "옵션 고정", + "desc": "옵션 패널을 고정" + }, + "toggleGallery": { + "desc": "gallery drawer 열기 및 닫기", + "title": "Gallery 전환" + }, + "quickToggleMove": { + "title": "빠른 토글 이동", + "desc": "일시적으로 이동 모드 전환" + }, + "generalHotkeys": "General Hotkeys", + "showHideBoundingBox": { + "desc": "bounding box 표시 전환", + "title": "Bounding box 표시/숨김" + }, + "showInfo": { + "desc": "현재 이미지의 metadata 정보 표시", + "title": "정보 표시" + }, + "copyToClipboard": { + "title": "클립보드로 복사", + "desc": "현재 캔버스를 클립보드로 복사" + }, + "restoreFaces": { + "title": "Faces 복원", + "desc": "현재 이미지 복원" + }, + "fillBoundingBox": { + "title": "Bounding Box 채우기", + "desc": "bounding box를 브러시 색으로 채웁니다" + }, + "closePanels": { + "desc": "열린 panels 닫기", + "title": "panels 닫기" + }, + "downloadImage": { + "desc": "현재 캔버스 다운로드", + "title": "이미지 다운로드" + }, + "setParameters": { + "title": "매개 변수 설정", + "desc": "현재 이미지의 모든 매개 변수 사용" + }, + "maximizeWorkSpace": { + "desc": "패널을 닫고 작업 면적을 극대화", + "title": "작업 공간 극대화" + }, + "galleryHotkeys": "Gallery Hotkeys", + "cancel": { + "desc": "이미지 생성 취소", + "title": "취소" + }, + "saveToGallery": { + "title": "갤러리에 저장", + "desc": "현재 캔버스를 갤러리에 저장" + }, + "eraseBoundingBox": { + "desc": "bounding box 영역을 지웁니다", + "title": "Bounding Box 지우기" + }, + "nextImage": { + "title": "다음 이미지", + "desc": "갤러리에 다음 이미지 표시" + }, + "colorPicker": { + "desc": "canvas color picker 선택", + "title": "Color Picker 선택" + }, + "invoke": { + "desc": "이미지 생성", + "title": "불러오기" + }, + "sendToImageToImage": { + "desc": "현재 이미지를 이미지로 보내기" + }, + "toggleLayer": { + "desc": "mask/base layer 선택 전환", + "title": "Layer 전환" + }, + "increaseBrushSize": { + "title": "브러시 크기 증가", + "desc": "캔버스 브러시/지우개 크기 증가" + }, + "appHotkeys": "App Hotkeys", + "deleteImage": { + "title": "이미지 삭제", + "desc": "현재 이미지 삭제" + }, + "moveTool": { + "desc": "캔버스 탐색 허용", + "title": "툴 옮기기" + }, + "clearMask": { + "desc": "전체 mask 제거", + "title": "Mask 제거" + }, + "increaseGalleryThumbSize": { + "title": "갤러리 이미지 크기 증가", + "desc": "갤러리 미리 보기 크기를 늘립니다" + }, + "increaseBrushOpacity": { + "desc": "캔버스 브러시의 불투명도를 높입니다", + "title": "브러시 불투명도 증가" + }, + "focusPrompt": { + "desc": "프롬프트 입력 영역에 초점을 맞춥니다", + "title": "프롬프트에 초점 맞추기" + }, + "decreaseBrushOpacity": { + "desc": "캔버스 브러시의 불투명도를 줄입니다", + "title": "브러시 불투명도 감소" + }, + "nextStagingImage": { + "desc": "다음 스테이징 영역 이미지", + "title": "다음 스테이징 이미지" + }, + "redoStroke": { + "title": "Stroke 다시 실행", + "desc": "brush stroke 다시 실행" + }, + "nodesHotkeys": "Nodes Hotkeys", + "addNodes": { + "desc": "노드 추가 메뉴 열기", + "title": "노드 추가" + }, + "toggleViewer": { + "desc": "이미지 뷰어 열기 및 닫기", + "title": "Viewer 전환" + }, + "undoStroke": { + "title": "Stroke 실행 취소", + "desc": "brush stroke 실행 취소" + }, + "changeTabs": { + "desc": "다른 workspace으로 전환", + "title": "탭 바꾸기" + }, + "mergeVisible": { + "desc": "캔버스의 보이는 모든 레이어 병합" + } + }, + "nodes": { + "inputField": "입력 필드", + "controlFieldDescription": "노드 간에 전달된 Control 정보입니다.", + "latentsFieldDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "denoiseMaskFieldDescription": "노드 간에 Denoise Mask가 전달될 수 있음", + "floatCollectionDescription": "실수 컬렉션.", + "missingTemplate": "잘못된 노드: {{type}} 유형의 {{node}} 템플릿 누락(설치되지 않으셨나요?)", + "outputSchemaNotFound": "Output schema가 발견되지 않음", + "ipAdapterPolymorphicDescription": "IP-Adapters 컬렉션.", + "latentsPolymorphicDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "colorFieldDescription": "RGBA 색.", + "mainModelField": "모델", + "ipAdapterCollection": "IP-Adapters 컬렉션", + "conditioningCollection": "Conditioning 컬렉션", + "maybeIncompatible": "설치된 것과 호환되지 않을 수 있음", + "ipAdapterPolymorphic": "IP-Adapter 다형성", + "noNodeSelected": "선택한 노드 없음", + "addNode": "노드 추가", + "hideGraphNodes": "그래프 오버레이 숨기기", + "enum": "Enum", + "loadWorkflow": "Workflow 불러오기", + "integerPolymorphicDescription": "정수 컬렉션.", + "noOutputRecorded": "기록된 출력 없음", + "conditioningCollectionDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "colorPolymorphic": "색상 다형성", + "colorCodeEdgesHelp": "연결된 필드에 따른 색상 코드 선", + "collectionDescription": "해야 할 일", + "hideLegendNodes": "필드 유형 범례 숨기기", + "addLinearView": "Linear View에 추가", + "float": "실수", + "targetNodeFieldDoesNotExist": "잘못된 모서리: 대상/입력 필드 {{node}}. {{field}}이(가) 없습니다", + "animatedEdges": "애니메이션 모서리", + "conditioningPolymorphic": "Conditioning 다형성", + "integer": "정수", + "colorField": "색", + "boardField": "Board", + "nodeTemplate": "노드 템플릿", + "latentsCollection": "Latents 컬렉션", + "nodeOpacity": "노드 불투명도", + "sourceNodeDoesNotExist": "잘못된 모서리: 소스/출력 노드 {{node}}이(가) 없습니다", + "pickOne": "하나 고르기", + "collectionItemDescription": "해야 할 일", + "integerDescription": "정수는 소수점이 없는 숫자입니다.", + "outputField": "출력 필드", + "conditioningPolymorphicDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "noFieldsLinearview": "Linear View에 추가된 필드 없음", + "imagePolymorphic": "이미지 다형성", + "nodeSearch": "노드 검색", + "imagePolymorphicDescription": "이미지 컬렉션.", + "floatPolymorphic": "실수 다형성", + "outputFieldInInput": "입력 중 출력필드", + "doesNotExist": "존재하지 않음", + "ipAdapterCollectionDescription": "IP-Adapters 컬렉션.", + "controlCollection": "Control 컬렉션", + "inputMayOnlyHaveOneConnection": "입력에 하나의 연결만 있을 수 있습니다", + "notes": "메모", + "nodeOutputs": "노드 결과물", + "currentImageDescription": "Node Editor에 현재 이미지를 표시합니다", + "downloadWorkflow": "Workflow JSON 다운로드", + "ipAdapter": "IP-Adapter", + "integerCollection": "정수 컬렉션", + "collectionItem": "컬렉션 아이템", + "noConnectionInProgress": "진행중인 연결이 없습니다", + "controlCollectionDescription": "노드 간에 전달된 Control 정보입니다.", + "noConnectionData": "연결 데이터 없음", + "outputFields": "출력 필드", + "fieldTypesMustMatch": "필드 유형은 일치해야 합니다", + "edge": "Edge", + "inputNode": "입력 노드", + "enumDescription": "Enums은 여러 옵션 중 하나일 수 있는 값입니다.", + "sourceNodeFieldDoesNotExist": "잘못된 모서리: 소스/출력 필드 {{node}}. {{field}}이(가) 없습니다", + "loRAModelFieldDescription": "해야 할 일", + "imageField": "이미지", + "animatedEdgesHelp": "선택한 노드에 연결된 선택한 가장자리 및 가장자리를 애니메이션화합니다", + "cannotDuplicateConnection": "중복 연결을 만들 수 없습니다", + "booleanPolymorphic": "Boolean 다형성", + "noWorkflow": "Workflow 없음", + "colorCollectionDescription": "해야 할 일", + "integerCollectionDescription": "정수 컬렉션.", + "colorPolymorphicDescription": "색의 컬렉션.", + "denoiseMaskField": "Denoise Mask", + "missingCanvaInitImage": "캔버스 init 이미지 누락", + "conditioningFieldDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "clipFieldDescription": "Tokenizer 및 text_encoder 서브모델.", + "fullyContainNodesHelp": "선택하려면 노드가 선택 상자 안에 완전히 있어야 합니다", + "noImageFoundState": "상태에서 초기 이미지를 찾을 수 없습니다", + "clipField": "Clip", + "nodePack": "Node pack", + "nodeType": "노드 유형", + "noMatchingNodes": "일치하는 노드 없음", + "fullyContainNodes": "선택할 노드 전체 포함", + "integerPolymorphic": "정수 다형성", + "executionStateInProgress": "진행중", + "noFieldType": "필드 유형 없음", + "colorCollection": "색의 컬렉션.", + "executionStateError": "에러", + "noOutputSchemaName": "ref 개체에 output schema 이름이 없습니다", + "ipAdapterModel": "IP-Adapter 모델", + "latentsPolymorphic": "Latents 다형성", + "ipAdapterDescription": "이미지 프롬프트 어댑터(IP-Adapter).", + "boolean": "Booleans", + "missingCanvaInitMaskImages": "캔버스 init 및 mask 이미지 누락", + "problemReadingMetadata": "이미지에서 metadata를 읽는 중 문제가 발생했습니다", + "hideMinimapnodes": "미니맵 숨기기", + "oNNXModelField": "ONNX 모델", + "executionStateCompleted": "완료된", + "node": "노드", + "currentImage": "현재 이미지", + "controlField": "Control", + "booleanDescription": "Booleans은 참 또는 거짓입니다.", + "collection": "컬렉션", + "ipAdapterModelDescription": "IP-Adapter 모델 필드", + "cannotConnectInputToInput": "입력을 입력에 연결할 수 없습니다", + "invalidOutputSchema": "잘못된 output schema", + "boardFieldDescription": "A gallery board", + "floatDescription": "실수는 소수점이 있는 숫자입니다.", + "floatPolymorphicDescription": "실수 컬렉션.", + "conditioningField": "Conditioning", + "collectionFieldType": "{{name}} 컬렉션", + "floatCollection": "실수 컬렉션", + "latentsField": "Latents", + "cannotConnectOutputToOutput": "출력을 출력에 연결할 수 없습니다", + "booleanCollection": "Boolean 컬렉션", + "connectionWouldCreateCycle": "연결하면 주기가 생성됩니다", + "cannotConnectToSelf": "자체에 연결할 수 없습니다", + "notesDescription": "Workflow에 대한 메모 추가", + "inputFields": "입력 필드", + "colorCodeEdges": "색상-코드 선", + "targetNodeDoesNotExist": "잘못된 모서리: 대상/입력 노드 {{node}}이(가) 없습니다", + "imageCollectionDescription": "이미지 컬렉션.", + "mismatchedVersion": "잘못된 노드: {{type}} 유형의 {{node}} 노드에 일치하지 않는 버전이 있습니다(업데이트 해보시겠습니까?)", + "imageFieldDescription": "노드 간에 이미지를 전달할 수 있습니다.", + "outputNode": "출력노드", + "addNodeToolTip": "노드 추가(Shift+A, Space)", + "collectionOrScalarFieldType": "{{name}} 컬렉션|Scalar", + "nodeVersion": "노드 버전", + "loadingNodes": "노드 로딩중...", + "mainModelFieldDescription": "해야 할 일", + "loRAModelField": "LoRA", + "deletedInvalidEdge": "잘못된 모서리 {{source}} -> {{target}} 삭제", + "latentsCollectionDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "oNNXModelFieldDescription": "ONNX 모델 필드.", + "imageCollection": "이미지 컬렉션" + }, + "queue": { + "status": "상태", + "pruneSucceeded": "Queue로부터 {{item_count}} 완성된 항목 잘라내기", + "cancelTooltip": "현재 항목 취소", + "queueEmpty": "비어있는 Queue", + "pauseSucceeded": "중지된 프로세서", + "in_progress": "진행 중", + "queueFront": "Front of Queue에 추가", + "notReady": "Queue를 생성할 수 없음", + "batchFailedToQueue": "Queue Batch에 실패", + "completed": "완성된", + "queueBack": "Queue에 추가", + "batchValues": "Batch 값들", + "cancelFailed": "항목 취소 중 발생한 문제", + "queueCountPrediction": "Queue에 {{predicted}} 추가", + "batchQueued": "Batch Queued", + "pauseFailed": "프로세서 중지 중 발생한 문제", + "clearFailed": "Queue 제거 중 발생한 문제", + "queuedCount": "{{pending}} Pending", + "front": "front", + "clearSucceeded": "제거된 Queue", + "pause": "중지", + "pruneTooltip": "{{item_count}} 완성된 항목 잘라내기", + "cancelSucceeded": "취소된 항목", + "batchQueuedDesc_other": "queue의 {{direction}}에 추가된 {{count}}세션", + "queue": "Queue", + "batch": "Batch", + "clearQueueAlertDialog": "Queue를 지우면 처리 항목이 즉시 취소되고 Queue가 완전히 지워집니다.", + "resumeFailed": "프로세서 재개 중 발생한 문제", + "clear": "제거하다", + "prune": "잘라내다", + "total": "총 개수", + "canceled": "취소된", + "pruneFailed": "Queue 잘라내는 중 발생한 문제", + "cancelBatchSucceeded": "취소된 Batch", + "clearTooltip": "모든 항목을 취소하고 제거", + "current": "최근", + "pauseTooltip": "프로세서 중지", + "failed": "실패한", + "cancelItem": "항목 취소", + "next": "다음", + "cancelBatch": "Batch 취소", + "back": "back", + "batchFieldValues": "Batch 필드 값들", + "cancel": "취소", + "session": "세션", + "time": "시간", + "queueTotal": "{{total}} Total", + "resumeSucceeded": "재개된 프로세서", + "enqueueing": "Queueing Batch", + "resumeTooltip": "프로세서 재개", + "resume": "재개", + "cancelBatchFailed": "Batch 취소 중 발생한 문제", + "clearQueueAlertDialog2": "Queue를 지우시겠습니까?", + "item": "항목", + "graphFailedToQueue": "queue graph에 실패" + }, + "metadata": { + "positivePrompt": "긍정적 프롬프트", + "negativePrompt": "부정적인 프롬프트", + "generationMode": "Generation Mode", + "Threshold": "Noise Threshold", + "metadata": "Metadata", + "seed": "시드", + "imageDetails": "이미지 세부 정보", + "perlin": "Perlin Noise", + "model": "모델", + "noImageDetails": "이미지 세부 정보를 찾을 수 없습니다", + "hiresFix": "고해상도 최적화", + "cfgScale": "CFG scale", + "initImage": "초기이미지", + "recallParameters": "매개변수 호출", + "height": "Height", + "variations": "Seed-weight 쌍", + "noMetaData": "metadata를 찾을 수 없습니다", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)", + "width": "너비", + "vae": "VAE", + "createdBy": "~에 의해 생성된", + "workflow": "작업의 흐름", + "steps": "단계", + "scheduler": "스케줄러", + "noRecallParameters": "호출할 매개 변수가 없습니다" + }, + "invocationCache": { + "useCache": "캐시 사용", + "disable": "이용 불가능한", + "misses": "캐시 미스", + "enableFailed": "Invocation 캐시를 사용하도록 설정하는 중 발생한 문제", + "invocationCache": "Invocation 캐시", + "clearSucceeded": "제거된 Invocation 캐시", + "enableSucceeded": "이용 가능한 Invocation 캐시", + "clearFailed": "Invocation 캐시 제거 중 발생한 문제", + "hits": "캐시 적중", + "disableSucceeded": "이용 불가능한 Invocation 캐시", + "disableFailed": "Invocation 캐시를 이용하지 못하게 설정 중 발생한 문제", + "enable": "이용 가능한", + "clear": "제거", + "maxCacheSize": "최대 캐시 크기", + "cacheSize": "캐시 크기" + }, + "embedding": { + "noEmbeddingsLoaded": "불러온 Embeddings이 없음", + "noMatchingEmbedding": "일치하는 Embeddings이 없음", + "addEmbedding": "Embedding 추가", + "incompatibleModel": "호환되지 않는 기본 모델:" + }, + "hrf": { + "enableHrf": "이용 가능한 고해상도 고정", + "upscaleMethod": "업스케일 방법", + "enableHrfTooltip": "낮은 초기 해상도로 생성하고 기본 해상도로 업스케일한 다음 Image-to-Image를 실행합니다.", + "metadata": { + "strength": "고해상도 고정 강도", + "enabled": "고해상도 고정 사용", + "method": "고해상도 고정 방법" + }, + "hrf": "고해상도 고정", + "hrfStrength": "고해상도 고정 강도" + }, + "models": { + "noLoRAsLoaded": "로드된 LoRA 없음", + "noMatchingModels": "일치하는 모델 없음", + "esrganModel": "ESRGAN 모델", + "loading": "로딩중", + "noMatchingLoRAs": "일치하는 LoRA 없음", + "noLoRAsAvailable": "사용 가능한 LoRA 없음", + "noModelsAvailable": "사용 가능한 모델이 없음", + "addLora": "LoRA 추가", + "selectModel": "모델 선택", + "noRefinerModelsInstalled": "SDXL Refiner 모델이 설치되지 않음", + "noLoRAsInstalled": "설치된 LoRA 없음", + "selectLoRA": "LoRA 선택" + }, + "boards": { + "autoAddBoard": "자동 추가 Board", + "topMessage": "이 보드에는 다음 기능에 사용되는 이미지가 포함되어 있습니다:", + "move": "이동", + "menuItemAutoAdd": "해당 Board에 자동 추가", + "myBoard": "나의 Board", + "searchBoard": "Board 찾는 중...", + "deleteBoardOnly": "Board만 삭제", + "noMatching": "일치하는 Board들이 없음", + "movingImagesToBoard_other": "{{count}}이미지를 Board로 이동시키기", + "selectBoard": "Board 선택", + "cancel": "취소", + "addBoard": "Board 추가", + "bottomMessage": "이 보드와 이미지를 삭제하면 현재 사용 중인 모든 기능이 재설정됩니다.", + "uncategorized": "미분류", + "downloadBoard": "Board 다운로드", + "changeBoard": "Board 바꾸기", + "loading": "불러오는 중...", + "clearSearch": "검색 지우기", + "deleteBoard": "Board 삭제", + "deleteBoardAndImages": "Board와 이미지 삭제", + "deletedBoardsCannotbeRestored": "삭제된 Board는 복원할 수 없습니다" } } From f51bb00b5e1aac9e47fd09d2b2983a5f173b13a5 Mon Sep 17 00:00:00 2001 From: Wubbbi Date: Tue, 26 Dec 2023 07:48:32 +0100 Subject: [PATCH 242/515] Update torch xformers (#5343) * Update torch to 2.1.2 and xformers to 0.0.23post1 * fix type --- installer/lib/installer.py | 4 ++-- pyproject.toml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/installer/lib/installer.py b/installer/lib/installer.py index a609b2c85e..53c97c693a 100644 --- a/installer/lib/installer.py +++ b/installer/lib/installer.py @@ -244,9 +244,9 @@ class InvokeAiInstance: "numpy~=1.24.0", # choose versions that won't be uninstalled during phase 2 "urllib3~=1.26.0", "requests~=2.28.0", - "torch==2.1.1", + "torch==2.1.2", "torchmetrics==0.11.4", - "torchvision>=0.16.1", + "torchvision>=0.16.2", "--force-reinstall", "--find-links" if find_links is not None else None, find_links, diff --git a/pyproject.toml b/pyproject.toml index 52fbdd01a8..92d53c766a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -80,8 +80,8 @@ dependencies = [ "semver~=3.0.1", "send2trash", "test-tube~=0.7.5", - "torch==2.1.1", - "torchvision==0.16.1", + "torch==2.1.2", + "torchvision==0.16.2", "torchmetrics~=0.11.0", "torchsde~=0.2.5", "transformers~=4.36.0", @@ -108,7 +108,7 @@ dependencies = [ "requests_testadapter", ] "xformers" = [ - "xformers==0.0.23; sys_platform!='darwin'", + "xformers==0.0.23.post1; sys_platform!='darwin'", "triton; sys_platform=='linux'", ] "onnx" = ["onnxruntime"] From 4e04ea0c0d2ecc4a3026932a33ac9c1ff0bf8298 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Wed, 27 Dec 2023 15:18:12 +1100 Subject: [PATCH 243/515] fix model names to match defaults in workflows --- .../ESRGAN Upscaling with Canny ControlNet.json | 2 +- .../default_workflows/Multi ControlNet (Canny & Depth).json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json b/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json index 5c2d200ec2..abde0cab76 100644 --- a/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +++ b/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json @@ -459,7 +459,7 @@ "name": "ControlNetModelField" }, "value": { - "model_name": "sd-controlnet-canny", + "model_name": "canny", "base_model": "sd-1" } }, diff --git a/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json b/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json index 8bd6aef135..70dc204772 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +++ b/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json @@ -136,7 +136,7 @@ "name": "ControlNetModelField" }, "value": { - "model_name": "sd-controlnet-depth", + "model_name": "depth", "base_model": "sd-1" } }, @@ -444,7 +444,7 @@ "name": "ControlNetModelField" }, "value": { - "model_name": "sd-controlnet-canny", + "model_name": "canny", "base_model": "sd-1" } }, From dc632a787a2c8ce73190571131021d28d196c3bb Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Wed, 27 Dec 2023 15:26:05 +1100 Subject: [PATCH 244/515] Updated example workflows --- ...AN_img2img_upscale_w_Canny_ControlNet.json | 1124 +++-- ...ce_Detailer_with_IP-Adapter_and_Canny.json | 3732 ++++++++++------- .../Multi_ControlNet_Canny_and_Depth.json | 1151 +++-- docs/workflows/Prompt_from_File.json | 752 ++-- docs/workflows/SDXL_Text_to_Image.json | 1061 +++-- docs/workflows/Text_to_Image.json | 617 ++- 6 files changed, 5628 insertions(+), 2809 deletions(-) diff --git a/docs/workflows/ESRGAN_img2img_upscale_w_Canny_ControlNet.json b/docs/workflows/ESRGAN_img2img_upscale_w_Canny_ControlNet.json index 17222aa002..abde0cab76 100644 --- a/docs/workflows/ESRGAN_img2img_upscale_w_Canny_ControlNet.json +++ b/docs/workflows/ESRGAN_img2img_upscale_w_Canny_ControlNet.json @@ -1,27 +1,29 @@ { - "name": "ESRGAN img2img upscale w_ Canny ControlNet", + "id": "6bfa0b3a-7090-4cd9-ad2d-a4b8662b6e71", + "name": "ESRGAN Upscaling with Canny ControlNet", "author": "InvokeAI", "description": "Sample workflow for using Upscaling with ControlNet with SD1.5", "version": "1.0.1", "contact": "invoke@invoke.ai", - "tags": "tiled, upscale controlnet, default", + "tags": "upscale, controlnet, default", "notes": "", "exposedFields": [ { "nodeId": "d8ace142-c05f-4f1d-8982-88dc7473958d", "fieldName": "model" }, - { - "nodeId": "771bdf6a-0813-4099-a5d8-921a138754d4", - "fieldName": "image" - }, { "nodeId": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", "fieldName": "prompt" + }, + { + "nodeId": "771bdf6a-0813-4099-a5d8-921a138754d4", + "fieldName": "image" } ], "meta": { - "version": "1.0.0" + "category": "default", + "version": "2.0.0" }, "nodes": [ { @@ -30,44 +32,56 @@ "data": { "id": "e8bf67fe-67de-4227-87eb-79e86afdfc74", "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "5f762fae-d791-42d9-8ab5-2b830c33ff20", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "8ac95f40-317d-4513-bbba-b99effd3b438", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "46c65b2b-c0b5-40c2-b183-74e9451c6d56", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 256, "position": { - "x": 1261.0015571435993, - "y": 1513.9276360694537 + "x": 1250, + "y": 1500 } }, { @@ -76,13 +90,24 @@ "data": { "id": "d8ace142-c05f-4f1d-8982-88dc7473958d", "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "model": { "id": "b35ae88a-f2d2-43f6-958c-8c624391250f", "name": "model", - "type": "MainModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, "value": { "model_name": "stable-diffusion-v1-5", "base_model": "sd-1", @@ -94,35 +119,40 @@ "unet": { "id": "02f243cb-c6e2-42c5-8be9-ef0519d54383", "name": "unet", - "type": "UNetField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "clip": { "id": "7762ed13-5b28-40f4-85f1-710942ceb92a", "name": "clip", - "type": "ClipField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "vae": { "id": "69566153-1918-417d-a3bb-32e9e857ef6b", "name": "vae", - "type": "VaeField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 226, + "height": 227, "position": { - "x": 433.44132965778, - "y": 1419.9552496403696 + "x": 700, + "y": 1375 } }, { @@ -131,48 +161,64 @@ "data": { "id": "771bdf6a-0813-4099-a5d8-921a138754d4", "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "0f6d68a2-38bd-4f65-a112-0a256c7a2678", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "Image To Upscale", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } } }, "outputs": { "image": { "id": "76f6f9b6-755b-4373-93fa-6a779998d2c8", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "6858e46b-707c-444f-beda-9b5f4aecfdf8", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "421bdc6e-ecd1-4935-9665-d38ab8314f79", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 225, "position": { - "x": 11.612243766002848, - "y": 1989.909405085168 + "x": 375, + "y": 1900 } }, { @@ -181,35 +227,58 @@ "data": { "id": "f7564dd2-9539-47f2-ac13-190804461f4e", "type": "esrgan", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.3.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "8fa0c7eb-5bd3-4575-98e7-72285c532504", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "image": { "id": "3c949799-a504-41c9-b342-cff4b8146c48", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "model_name": { "id": "77cb4750-53d6-4c2c-bb5c-145981acbf17", "name": "model_name", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "RealESRGAN_x4plus.pth" }, "tile_size": { "id": "7787b3ad-46ee-4248-995f-bc740e1f988b", "name": "tile_size", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 400 } }, @@ -217,35 +286,40 @@ "image": { "id": "37e6308e-e926-4e07-b0db-4e8601f495d0", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "c194d84a-fac7-4856-b646-d08477a5ad2b", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "b2a6206c-a9c8-4271-a055-0b93a7f7d505", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.1.0" + } }, "width": 320, - "height": 339, + "height": 340, "position": { - "x": 436.07457889056195, - "y": 1967.3109314112623 + "x": 775, + "y": 1900 } }, { @@ -254,35 +328,58 @@ "data": { "id": "1d887701-df21-4966-ae6e-a7d82307d7bd", "type": "canny_image_processor", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "52c877c8-25d9-4949-8518-f536fcdd152d", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "image": { "id": "e0af11fe-4f95-4193-a599-cf40b6a963f5", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "low_threshold": { "id": "ab775f7b-f556-4298-a9d6-2274f3a6c77c", "name": "low_threshold", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 100 }, "high_threshold": { "id": "9e58b615-06e4-417f-b0d8-63f1574cd174", "name": "high_threshold", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 200 } }, @@ -290,35 +387,40 @@ "image": { "id": "61feb8bf-95c9-4634-87e2-887fc43edbdf", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "9e203e41-73f7-4cfa-bdca-5040e5e60c55", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "ec7d99dc-0d82-4495-a759-6423808bff1c", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 339, + "height": 340, "position": { - "x": 1221.7155516160597, - "y": 1971.0099052871012 + "x": 1200, + "y": 1900 } }, { @@ -327,63 +429,98 @@ "data": { "id": "ca1d020c-89a8-4958-880a-016d28775cfa", "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "2973c126-e301-4595-a7dc-d6e1729ccdbf", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "control_model": { "id": "4bb4d987-8491-4839-b41b-6e2f546fe2d0", "name": "control_model", - "type": "ControlNetModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, "value": { - "model_name": "sd-controlnet-canny", + "model_name": "canny", "base_model": "sd-1" } }, "control_weight": { "id": "a3cf387a-b58f-4058-858f-6a918efac609", "name": "control_weight", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 1 }, "begin_step_percent": { "id": "e0614f69-8a58-408b-9238-d3a44a4db4e0", "name": "begin_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "end_step_percent": { "id": "ac683539-b6ed-4166-9294-2040e3ede206", "name": "end_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "control_mode": { "id": "f00b21de-cbd7-4901-8efc-e7134a2dc4c8", "name": "control_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "balanced" }, "resize_mode": { "id": "cafb60ee-3959-4d57-a06c-13b83be6ea4f", "name": "resize_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "just_resize" } }, @@ -391,23 +528,20 @@ "control": { "id": "dfb88dd1-12bf-4034-9268-e726f894c131", "name": "control", - "type": "ControlField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 508, + "height": 511, "position": { - "x": 1681.7783532660528, - "y": 1845.0516454465633 + "x": 1650, + "y": 1900 } }, { @@ -416,37 +550,60 @@ "data": { "id": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", "inputs": { "seed": { "id": "f76b0e01-b601-423f-9b5f-ab7a1f10fe82", "name": "seed", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "width": { "id": "eec326d6-710c-45de-a25c-95704c80d7e2", "name": "width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "height": { "id": "2794a27d-5337-43ca-95d9-41b673642c94", "name": "height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "use_cpu": { "id": "ae7654e3-979e-44a1-8968-7e3199e91e66", "name": "use_cpu", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": true } }, @@ -454,35 +611,40 @@ "noise": { "id": "8b6dc166-4ead-4124-8ac9-529814b0cbb9", "name": "noise", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "e3fe3940-a277-4838-a448-5f81f2a7d99d", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "48ecd6ef-c216-40d5-9d1b-d37bd00c82e7", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": false, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 32, "position": { - "x": 1660.5387878479382, - "y": 1664.7391082353483 + "x": 1650, + "y": 1775 } }, { @@ -491,141 +653,221 @@ "data": { "id": "c3737554-8d87-48ff-a6f8-e71d2867f434", "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", "inputs": { "positive_conditioning": { "id": "e127084b-72f5-4fe4-892b-84f34f88bce9", "name": "positive_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "negative_conditioning": { "id": "72cde4ee-55de-4d3e-9057-74e741c04e20", "name": "negative_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "noise": { "id": "747f7023-1c19-465b-bec8-1d9695dd3505", "name": "noise", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "steps": { "id": "80860292-633c-46f2-83d0-60d0029b65d2", "name": "steps", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 10 }, "cfg_scale": { "id": "ebc71e6f-9148-4f12-b455-5e1f179d1c3a", "name": "cfg_scale", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 7.5 }, "denoising_start": { "id": "ced44b8f-3bad-4c34-8113-13bc0faed28a", "name": "denoising_start", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "denoising_end": { "id": "79bf4b77-3502-4f72-ba8b-269c4c3c5c72", "name": "denoising_end", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "scheduler": { "id": "ed56e2b8-f477-41a2-b9f5-f15f4933ae65", "name": "scheduler", - "type": "Scheduler", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, "value": "euler" }, "unet": { "id": "146b790c-b08e-437c-a2e1-e393c2c1c41a", "name": "unet", - "type": "UNetField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "control": { "id": "75ed3df1-d261-4b8e-a89b-341c4d7161fb", "name": "control", - "type": "ControlPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } }, "ip_adapter": { "id": "eab9a61d-9b64-44d3-8d90-4686f5887cb0", "name": "ip_adapter", - "type": "IPAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } }, "t2i_adapter": { "id": "2dc8d637-58fd-4069-ad33-85c32d958b7b", "name": "t2i_adapter", - "type": "T2IAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "391e5010-e402-4380-bb46-e7edaede3512", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 }, "latents": { "id": "6767e40a-97c6-4487-b3c9-cad1c150bf9f", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "denoise_mask": { "id": "6251efda-d97d-4ff1-94b5-8cc6b458c184", "name": "denoise_mask", - "type": "DenoiseMaskField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } } }, "outputs": { "latents": { "id": "4e7986a4-dff2-4448-b16b-1af477b81f8b", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "dad525dd-d2f8-4f07-8c8d-51f2a3c5456e", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "af03a089-4739-40c6-8b48-25d458d63c2f", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.4.0" + } }, "width": 320, - "height": 646, + "height": 705, "position": { "x": 2128.740065979906, "y": 1232.6219060454753 @@ -637,42 +879,69 @@ "data": { "id": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "9f7a1a9f-7861-4f09-874b-831af89b7474", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "latents": { "id": "a5b42432-8ee7-48cd-b61c-b97be6e490a2", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "vae": { "id": "890de106-e6c3-4c2c-8d67-b368def64894", "name": "vae", - "type": "VaeField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } }, "tiled": { "id": "b8e5a2ca-5fbc-49bd-ad4c-ea0e109d46e3", "name": "tiled", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false }, "fp32": { "id": "fdaf6264-4593-4bd2-ac71-8a0acff261af", "name": "fp32", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false } }, @@ -680,29 +949,34 @@ "image": { "id": "94c5877d-6c78-4662-a836-8a84fc75d0a0", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "2a854e42-1616-42f5-b9ef-7b73c40afc1d", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "dd649053-1433-4f31-90b3-8bb103efc5b1", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": false, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 267, @@ -717,35 +991,58 @@ "data": { "id": "5ca498a4-c8c8-4580-a396-0c984317205d", "type": "i2l", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "9e6c4010-0f79-4587-9062-29d9a8f96b3b", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "vae": { "id": "b9ed2ec4-e8e3-4d69-8a42-27f2d983bcd6", "name": "vae", - "type": "VaeField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } }, "tiled": { "id": "bb48d10b-2440-4c46-b835-646ae5ebc013", "name": "tiled", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false }, "fp32": { "id": "1048612c-c0f4-4abf-a684-0045e7d158f8", "name": "fp32", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false } }, @@ -753,35 +1050,40 @@ "latents": { "id": "55301367-0578-4dee-8060-031ae13c7bf8", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "2eb65690-1f20-4070-afbd-1e771b9f8ca9", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "d5bf64c7-c30f-43b8-9bc2-95e7718c1bdc", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 325, + "height": 32, "position": { - "x": 848.091172736516, - "y": 1618.7467772496016 + "x": 1650, + "y": 1675 } }, { @@ -790,175 +1092,273 @@ "data": { "id": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "5f762fae-d791-42d9-8ab5-2b830c33ff20", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "8ac95f40-317d-4513-bbba-b99effd3b438", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "46c65b2b-c0b5-40c2-b183-74e9451c6d56", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 256, "position": { - "x": 1280.0309709777139, - "y": 1213.3027983934699 + "x": 1250, + "y": 1200 + } + }, + { + "id": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "type": "invocation", + "data": { + "id": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "inputs": { + "low": { + "id": "2118026f-1c64-41fa-ab6b-7532410f60ae", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "c12f312a-fdfd-4aca-9aa6-4c99bc70bd63", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "75552bad-6212-4ae7-96a7-68e666acea4c", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 1650, + "y": 1600 } } ], "edges": [ { - "source": "771bdf6a-0813-4099-a5d8-921a138754d4", - "sourceHandle": "image", - "target": "f7564dd2-9539-47f2-ac13-190804461f4e", - "targetHandle": "image", + "id": "5ca498a4-c8c8-4580-a396-0c984317205d-f50624ce-82bf-41d0-bdf7-8aab11a80d48-collapsed", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "collapsed" + }, + { + "id": "eb8f6f8a-c7b1-4914-806e-045ee2717a35-f50624ce-82bf-41d0-bdf7-8aab11a80d48-collapsed", + "source": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "collapsed" + }, + { "id": "reactflow__edge-771bdf6a-0813-4099-a5d8-921a138754d4image-f7564dd2-9539-47f2-ac13-190804461f4eimage", - "type": "default" + "source": "771bdf6a-0813-4099-a5d8-921a138754d4", + "target": "f7564dd2-9539-47f2-ac13-190804461f4e", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" }, { - "source": "f7564dd2-9539-47f2-ac13-190804461f4e", - "sourceHandle": "image", - "target": "1d887701-df21-4966-ae6e-a7d82307d7bd", - "targetHandle": "image", "id": "reactflow__edge-f7564dd2-9539-47f2-ac13-190804461f4eimage-1d887701-df21-4966-ae6e-a7d82307d7bdimage", - "type": "default" - }, - { - "source": "5ca498a4-c8c8-4580-a396-0c984317205d", - "sourceHandle": "width", - "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", - "targetHandle": "width", - "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dwidth-f50624ce-82bf-41d0-bdf7-8aab11a80d48width", - "type": "default" - }, - { - "source": "5ca498a4-c8c8-4580-a396-0c984317205d", - "sourceHandle": "height", - "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", - "targetHandle": "height", - "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dheight-f50624ce-82bf-41d0-bdf7-8aab11a80d48height", - "type": "default" - }, - { - "source": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", - "sourceHandle": "noise", - "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", - "targetHandle": "noise", - "id": "reactflow__edge-f50624ce-82bf-41d0-bdf7-8aab11a80d48noise-c3737554-8d87-48ff-a6f8-e71d2867f434noise", - "type": "default" - }, - { - "source": "5ca498a4-c8c8-4580-a396-0c984317205d", - "sourceHandle": "latents", - "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", - "targetHandle": "latents", - "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dlatents-c3737554-8d87-48ff-a6f8-e71d2867f434latents", - "type": "default" - }, - { - "source": "e8bf67fe-67de-4227-87eb-79e86afdfc74", - "sourceHandle": "conditioning", - "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", - "targetHandle": "negative_conditioning", - "id": "reactflow__edge-e8bf67fe-67de-4227-87eb-79e86afdfc74conditioning-c3737554-8d87-48ff-a6f8-e71d2867f434negative_conditioning", - "type": "default" - }, - { - "source": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", - "sourceHandle": "conditioning", - "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", - "targetHandle": "positive_conditioning", - "id": "reactflow__edge-63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16bconditioning-c3737554-8d87-48ff-a6f8-e71d2867f434positive_conditioning", - "type": "default" - }, - { - "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", - "sourceHandle": "clip", - "target": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", - "targetHandle": "clip", - "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dclip-63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16bclip", - "type": "default" - }, - { - "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", - "sourceHandle": "clip", - "target": "e8bf67fe-67de-4227-87eb-79e86afdfc74", - "targetHandle": "clip", - "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dclip-e8bf67fe-67de-4227-87eb-79e86afdfc74clip", - "type": "default" - }, - { - "source": "1d887701-df21-4966-ae6e-a7d82307d7bd", - "sourceHandle": "image", - "target": "ca1d020c-89a8-4958-880a-016d28775cfa", - "targetHandle": "image", - "id": "reactflow__edge-1d887701-df21-4966-ae6e-a7d82307d7bdimage-ca1d020c-89a8-4958-880a-016d28775cfaimage", - "type": "default" - }, - { - "source": "ca1d020c-89a8-4958-880a-016d28775cfa", - "sourceHandle": "control", - "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", - "targetHandle": "control", - "id": "reactflow__edge-ca1d020c-89a8-4958-880a-016d28775cfacontrol-c3737554-8d87-48ff-a6f8-e71d2867f434control", - "type": "default" - }, - { - "source": "c3737554-8d87-48ff-a6f8-e71d2867f434", - "sourceHandle": "latents", - "target": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", - "targetHandle": "latents", - "id": "reactflow__edge-c3737554-8d87-48ff-a6f8-e71d2867f434latents-3ed9b2ef-f4ec-40a7-94db-92e63b583ec0latents", - "type": "default" - }, - { - "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", - "sourceHandle": "vae", - "target": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", - "targetHandle": "vae", - "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dvae-3ed9b2ef-f4ec-40a7-94db-92e63b583ec0vae", - "type": "default" - }, - { "source": "f7564dd2-9539-47f2-ac13-190804461f4e", + "target": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "type": "default", "sourceHandle": "image", - "target": "5ca498a4-c8c8-4580-a396-0c984317205d", - "targetHandle": "image", - "id": "reactflow__edge-f7564dd2-9539-47f2-ac13-190804461f4eimage-5ca498a4-c8c8-4580-a396-0c984317205dimage", - "type": "default" + "targetHandle": "image" }, { - "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", - "sourceHandle": "unet", + "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dwidth-f50624ce-82bf-41d0-bdf7-8aab11a80d48width", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dheight-f50624ce-82bf-41d0-bdf7-8aab11a80d48height", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-f50624ce-82bf-41d0-bdf7-8aab11a80d48noise-c3737554-8d87-48ff-a6f8-e71d2867f434noise", + "source": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", - "targetHandle": "unet", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-5ca498a4-c8c8-4580-a396-0c984317205dlatents-c3737554-8d87-48ff-a6f8-e71d2867f434latents", + "source": "5ca498a4-c8c8-4580-a396-0c984317205d", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-e8bf67fe-67de-4227-87eb-79e86afdfc74conditioning-c3737554-8d87-48ff-a6f8-e71d2867f434negative_conditioning", + "source": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16bconditioning-c3737554-8d87-48ff-a6f8-e71d2867f434positive_conditioning", + "source": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dclip-63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16bclip", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dclip-e8bf67fe-67de-4227-87eb-79e86afdfc74clip", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-1d887701-df21-4966-ae6e-a7d82307d7bdimage-ca1d020c-89a8-4958-880a-016d28775cfaimage", + "source": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "target": "ca1d020c-89a8-4958-880a-016d28775cfa", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-ca1d020c-89a8-4958-880a-016d28775cfacontrol-c3737554-8d87-48ff-a6f8-e71d2867f434control", + "source": "ca1d020c-89a8-4958-880a-016d28775cfa", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "control", + "targetHandle": "control" + }, + { + "id": "reactflow__edge-c3737554-8d87-48ff-a6f8-e71d2867f434latents-3ed9b2ef-f4ec-40a7-94db-92e63b583ec0latents", + "source": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "target": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dvae-3ed9b2ef-f4ec-40a7-94db-92e63b583ec0vae", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-f7564dd2-9539-47f2-ac13-190804461f4eimage-5ca498a4-c8c8-4580-a396-0c984317205dimage", + "source": "f7564dd2-9539-47f2-ac13-190804461f4e", + "target": "5ca498a4-c8c8-4580-a396-0c984317205d", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dunet-c3737554-8d87-48ff-a6f8-e71d2867f434unet", - "type": "default" + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "c3737554-8d87-48ff-a6f8-e71d2867f434", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-d8ace142-c05f-4f1d-8982-88dc7473958dvae-5ca498a4-c8c8-4580-a396-0c984317205dvae", + "source": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "target": "5ca498a4-c8c8-4580-a396-0c984317205d", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-eb8f6f8a-c7b1-4914-806e-045ee2717a35value-f50624ce-82bf-41d0-bdf7-8aab11a80d48seed", + "source": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", + "target": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" } ] } \ No newline at end of file diff --git a/docs/workflows/Face_Detailer_with_IP-Adapter_and_Canny.json b/docs/workflows/Face_Detailer_with_IP-Adapter_and_Canny.json index 3ef8d720f8..6f392d6a7b 100644 --- a/docs/workflows/Face_Detailer_with_IP-Adapter_and_Canny.json +++ b/docs/workflows/Face_Detailer_with_IP-Adapter_and_Canny.json @@ -1,10 +1,11 @@ { - "name": "Face Detailer with IP-Adapter & Canny", - "author": "@kosmoskatten", - "description": "A workflow to automatically improve faces in an image using IP-Adapter and Canny ControlNet. ", - "version": "0.1.0", - "contact": "@kosmoskatten via Discord", - "tags": "face, detailer, SD1.5", + "id": "972fc0e9-a13f-4658-86b9-aef100d124ba", + "name": "Face Detailer with IP-Adapter & Canny (See Note)", + "author": "kosmoskatten", + "description": "A workflow to add detail to and improve faces. This workflow is most effective when used with a model that creates realistic outputs. For best results, use this image as the blur mask: https://i.imgur.com/Gxi61zP.png", + "version": "1.0.0", + "contact": "invoke@invoke.ai", + "tags": "face detailer, IP-Adapter, Canny", "notes": "", "exposedFields": [ { @@ -15,6 +16,10 @@ "nodeId": "64712037-92e8-483f-9f6e-87588539c1b8", "fieldName": "value" }, + { + "nodeId": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "fieldName": "radius" + }, { "nodeId": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", "fieldName": "value" @@ -22,10 +27,15 @@ { "nodeId": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", "fieldName": "image" + }, + { + "nodeId": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "fieldName": "image" } ], "meta": { - "version": "1.0.0" + "category": "default", + "version": "2.0.0" }, "nodes": [ { @@ -34,44 +44,169 @@ "data": { "id": "44f2c190-eb03-460d-8d11-a94d13b33f19", "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "916b229a-38e1-45a2-a433-cca97495b143", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "ae9aeb1a-4ebd-4bc3-b6e6-a8c9adca01f6", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "4d59bad1-99a9-43e2-bdb4-7a0f3dd5b787", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, + } + }, + "width": 320, + "height": 256, + "position": { + "x": 2575, + "y": -250 + } + }, + { + "id": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "invocation", + "data": { + "id": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "img_resize", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, "isIntermediate": true, "useCache": true, - "version": "1.0.0" + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "48ff6f70-380c-4e19-acf7-91063cfff8a8", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "2a348a03-07a3-4a97-93c8-46051045b32f", + "name": "image", + "fieldKind": "input", + "label": "Blur Mask", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "6b95969c-ca73-4b54-815d-7aae305a67bd", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "af83c526-c730-4a34-8f73-80f443fecc05", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "resample_mode": { + "id": "43f7d6b5-ebe0-43c4-bf5d-8fb7fdc40a3f", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "lanczos" + } + }, + "outputs": { + "image": { + "id": "e492b013-615d-4dfd-b0d8-7df7b5ba9a9d", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "05f829b3-c253-495a-b1ad-9906c0833e49", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "65d5d662-2527-4f3c-8a87-0a7d9d4486de", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } }, "width": 320, - "height": 261, + "height": 397, "position": { - "x": 3176.5748307120457, - "y": -605.7792243912572 + "x": 4675, + "y": 625 } }, { @@ -80,15 +215,26 @@ "data": { "id": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "729c571b-d5a0-4b53-8f50-5e11eb744f66", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "Original Image", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + }, "value": { - "image_name": "013a13e0-3af3-4fd8-8e6e-9dafb658e0bb.png" + "image_name": "42a524fd-ed77-46e2-b52f-40375633f357.png" } } }, @@ -96,35 +242,332 @@ "image": { "id": "3632a144-58d6-4447-bafc-e4f7d6ca96bf", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "30faefcc-81a1-445b-a3fe-0110ceb56772", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "d173d225-849a-4498-a75d-ba17210dbd3e", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, + } + }, + "width": 320, + "height": 489, + "position": { + "x": 2050, + "y": -75 + } + }, + { + "id": "9ae34718-a17d-401d-9859-086896c29fca", + "type": "invocation", + "data": { + "id": "9ae34718-a17d-401d-9859-086896c29fca", + "type": "face_off", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, "isIntermediate": true, "useCache": true, - "version": "1.0.0" + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "0144d549-b04a-49c2-993f-9ecb2695191a", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "9c580dec-a958-43a4-9aa0-7ab9491c56a0", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "face_id": { + "id": "1ee762e1-810f-46f7-a591-ecd28abff85b", + "name": "face_id", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "minimum_confidence": { + "id": "74d2bae8-7ac5-4f8f-afb7-1efc76ed72a0", + "name": "minimum_confidence", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.5 + }, + "x_offset": { + "id": "f1c1489d-cbbb-45d2-ba94-e150fc5ce24d", + "name": "x_offset", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "y_offset": { + "id": "6621377a-7e29-4841-aa47-aa7d438662f9", + "name": "y_offset", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "padding": { + "id": "0414c830-1be8-48cd-b0c8-6de10b099029", + "name": "padding", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 64 + }, + "chunk": { + "id": "22eba30a-c68a-4e5f-8f97-315830959b04", + "name": "chunk", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "7d8fa807-0e9c-4d6a-a85a-388bd0cb5166", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "048361ca-314c-44a4-8b6e-ca4917e3468f", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "7b721071-63e5-4d54-9607-9fa2192163a8", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "mask": { + "id": "a9c6194a-3dbd-4b18-af04-a85a9498f04e", + "name": "mask", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "x": { + "id": "d072582c-2db5-430b-9e50-b50277baa7d5", + "name": "x", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "y": { + "id": "40624813-e55d-42d7-bc14-dea48ccfd9c8", + "name": "y", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } }, "width": 320, - "height": 225, + "height": 657, "position": { - "x": 1787.0260885895482, - "y": 171.61158302175093 + "x": 2575, + "y": 200 + } + }, + { + "id": "50a8db6a-3796-4522-8547-53275efa4e7d", + "type": "invocation", + "data": { + "id": "50a8db6a-3796-4522-8547-53275efa4e7d", + "type": "img_resize", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "6bf91925-e22e-4bcb-90e4-f8ac32ddff36", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "65af3f4e-7a89-4df4-8ba9-377af1701d16", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "1f036fee-77f3-480f-b690-089b27616ab8", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "0c703b6e-e91a-4cd7-8b9e-b97865f76793", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "resample_mode": { + "id": "ed77cf71-94cb-4da4-b536-75cb7aad8e54", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "lanczos" + } + }, + "outputs": { + "image": { + "id": "0d9e437b-6a08-45e1-9a55-ef03ae28e616", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "7c56c704-b4e5-410f-bb62-cd441ddb454f", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "45e12e17-7f25-46bd-a804-4384ec6b98cc", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3000, + "y": 0 } }, { @@ -133,35 +576,58 @@ "data": { "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534", "type": "i2l", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "6c4d2827-4995-49d4-94ce-0ba0541d8839", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "vae": { "id": "9d6e3ab6-b6a4-45ac-ad75-0a96efba4c2f", "name": "vae", - "type": "VaeField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } }, "tiled": { "id": "9c258141-a75d-4ffd-bce5-f3fb3d90b720", "name": "tiled", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false }, "fp32": { "id": "2235cc48-53c9-4e8a-a74a-ed41c61f2993", "name": "fp32", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": true } }, @@ -169,35 +635,266 @@ "latents": { "id": "8eb9293f-8f43-4c0c-b0fb-8c4db1200f87", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "ce493959-d308-423c-b0f5-db05912e0318", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "827bf290-94fb-455f-a970-f98ba8800eac", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3100, + "y": -275 + } + }, + { + "id": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "invocation", + "data": { + "id": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "denoise_latents", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, "isIntermediate": true, "useCache": true, - "version": "1.0.0" + "version": "1.5.0", + "nodePack": "invokeai", + "inputs": { + "positive_conditioning": { + "id": "673e4094-448b-4c59-ab05-d05b29b3e07f", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "3b3bac27-7e8a-4c4e-8b5b-c5231125302a", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "d7c20d11-fbfb-4613-ba58-bf00307e53be", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "e4af3bea-dae4-403f-8cec-6cb66fa888ce", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 80 + }, + "cfg_scale": { + "id": "9ec125bb-6819-4970-89fe-fe09e6b96885", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 3 + }, + "denoising_start": { + "id": "7190b40d-9467-4238-b180-0d19065258e2", + "name": "denoising_start", + "fieldKind": "input", + "label": "Original Image Percent", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.2 + }, + "denoising_end": { + "id": "c033f2d4-b60a-4a25-8a88-7852b556657a", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "bb043b8a-a119-4b2a-bb88-8afb364bdcc1", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "dpmpp_2m_sde_k" + }, + "unet": { + "id": "16d7688a-fc80-405c-aa55-a8ba2a1efecb", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "d0225ede-7d03-405d-b5b4-97c07d9b602b", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "6fbe0a17-6b85-4d3e-835d-0e23d3040bf4", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "2e4e1e6e-0278-47e3-a464-1a51760a9411", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "c9703a2e-4178-493c-90b9-81325a83a5ec", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "latents": { + "id": "b2527e78-6f55-4274-aaa0-8fef1c928faa", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "cceec5a4-d3e9-4cff-a1e1-b5b62cb12588", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + } + }, + "outputs": { + "latents": { + "id": "6eca0515-4357-40be-ac8d-f84eb927dc31", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "14453d1c-6202-4377-811c-88ac9c024e77", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "0e0e04dc-4158-4461-b0ba-6c6af16e863c", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } }, "width": 320, - "height": 325, + "height": 705, "position": { - "x": 3165.534313998739, - "y": -261.54699233490976 + "x": 4597.554345564559, + "y": -265.6421598623905 } }, { @@ -206,37 +903,60 @@ "data": { "id": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", "inputs": { "seed": { "id": "c6b5bc5e-ef09-4f9c-870e-1110a0f5017f", "name": "seed", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 123451234 }, "width": { "id": "7bdd24b6-4f14-4d0a-b8fc-9b24145b4ba9", "name": "width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "height": { "id": "dc15bf97-b8d5-49c6-999b-798b33679418", "name": "height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "use_cpu": { "id": "00626297-19dd-4989-9688-e8d527c9eacf", "name": "use_cpu", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": true } }, @@ -244,35 +964,152 @@ "noise": { "id": "2915f8ae-0f6e-4f26-8541-0ebf477586b6", "name": "noise", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "26587461-a24a-434d-9ae5-8d8f36fea221", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "335d08fc-8bf1-4393-8902-2c579f327b51", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4025, + "y": -175 + } + }, + { + "id": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "invocation", + "data": { + "id": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "l2i", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, - "isIntermediate": true, + "isIntermediate": false, "useCache": true, - "version": "1.0.0" + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "2f077d6f-579e-4399-9986-3feabefa9ade", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "568a1537-dc7c-44f5-8a87-3571b0528b85", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "392c3757-ad3a-46af-8d76-9724ca30aad8", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "90f98601-c05d-453e-878b-18e23cc222b4", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "6be5cad7-dd41-4f83-98e7-124a6ad1728d", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "image": { + "id": "6f90a4f5-42dd-472a-8f30-403bcbc16531", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "4d1c8a66-35fc-40e9-a7a9-d8604a247d33", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "e668cfb3-aedc-4032-94c9-b8add1fbaacf", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } }, "width": 320, - "height": 389, + "height": 267, "position": { - "x": 4101.873817022418, - "y": -826.2333237957032 + "x": 4980.1395106966565, + "y": -255.9158921745602 } }, { @@ -281,36 +1118,59 @@ "data": { "id": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", "type": "lscale", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "latents": { "id": "79e8f073-ddc3-416e-b818-6ef8ec73cc07", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "scale_factor": { "id": "23f78d24-72df-4bde-8d3c-8593ce507205", "name": "scale_factor", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1.5 }, "mode": { "id": "4ab30c38-57d3-480d-8b34-918887e92340", "name": "mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "bilinear" }, "antialias": { "id": "22b39171-0003-44f0-9c04-d241581d2a39", "name": "antialias", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": true } }, @@ -318,35 +1178,288 @@ "latents": { "id": "f6d71aef-6251-4d51-afa8-f692a72bfd1f", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "8db4cf33-5489-4887-a5f6-5e926d959c40", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "74e1ec7c-50b6-4e97-a7b8-6602e6d78c08", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, + } + }, + "width": 320, + "height": 32, + "position": { + "x": 3075, + "y": -175 + } + }, + { + "id": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "invocation", + "data": { + "id": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "img_paste", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, - "isIntermediate": true, + "isIntermediate": false, "useCache": true, - "version": "1.0.0" + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "159f5a3c-4b47-46dd-b8fe-450455ee3dcf", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "base_image": { + "id": "445cfacf-5042-49ae-a63e-c19f21f90b1d", + "name": "base_image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "image": { + "id": "c292948b-8efd-4f5c-909d-d902cfd1509a", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "mask": { + "id": "8b7bc7e9-35b5-45bc-9b8c-e15e92ab4d74", + "name": "mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "x": { + "id": "0694ba58-07bc-470b-80b5-9c7a99b64607", + "name": "x", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "y": { + "id": "40f8b20b-f804-4ec2-9622-285726f7665f", + "name": "y", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "crop": { + "id": "8a09a132-c07e-4cfb-8ec2-7093dc063f99", + "name": "crop", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "4a96ec78-d4b6-435f-b5a3-6366cbfcfba7", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "c1ee69c7-6ca0-4604-abc9-b859f4178421", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "6c198681-5f16-4526-8e37-0bf000962acd", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } }, "width": 320, - "height": 332, + "height": 504, "position": { - "x": 3693.9622528252976, - "y": -448.17155148430743 + "x": 6000, + "y": -200 + } + }, + { + "id": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "invocation", + "data": { + "id": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "img_resize", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "afbbb112-60e4-44c8-bdfd-30f48d58b236", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "2a348a03-07a3-4a97-93c8-46051045b32f", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "6b95969c-ca73-4b54-815d-7aae305a67bd", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "af83c526-c730-4a34-8f73-80f443fecc05", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "resample_mode": { + "id": "43f7d6b5-ebe0-43c4-bf5d-8fb7fdc40a3f", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "lanczos" + } + }, + "outputs": { + "image": { + "id": "e492b013-615d-4dfd-b0d8-7df7b5ba9a9d", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "05f829b3-c253-495a-b1ad-9906c0833e49", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "65d5d662-2527-4f3c-8a87-0a7d9d4486de", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 397, + "position": { + "x": 5500, + "y": -225 } }, { @@ -355,13 +1468,24 @@ "data": { "id": "cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05", "type": "float", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "value": { "id": "d5d8063d-44f6-4e20-b557-2f4ce093c7ef", "name": "value", - "type": "float", "fieldKind": "input", "label": "Orignal Image Percentage", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0.4 } }, @@ -369,23 +1493,20 @@ "value": { "id": "562416a4-0d75-48aa-835e-5e2d221dfbb7", "name": "value", - "type": "float", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 161, + "height": 32, "position": { - "x": 3709.006050756633, - "y": -84.77200251095934 + "x": 4025, + "y": -75 } }, { @@ -394,13 +1515,24 @@ "data": { "id": "64712037-92e8-483f-9f6e-87588539c1b8", "type": "float", + "label": "CFG Main", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "value": { "id": "750358d5-251d-4fe6-a673-2cde21995da2", "name": "value", - "type": "float", "fieldKind": "input", "label": "CFG Main", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 6 } }, @@ -408,23 +1540,20 @@ "value": { "id": "eea7f6d2-92e4-4581-b555-64a44fda2be9", "name": "value", - "type": "float", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } } - }, - "label": "CFG Main", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 161, + "height": 32, "position": { - "x": 4064.218597371266, - "y": 221.28424598733164 + "x": 4025, + "y": 75 } }, { @@ -433,21 +1562,36 @@ "data": { "id": "c865f39f-f830-4ed7-88a5-e935cfe050a9", "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "low": { "id": "31e29709-9f19-45b0-a2de-fdee29a50393", "name": "low", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "high": { "id": "d47d875c-509d-4fa3-9112-e335d3144a17", "name": "high", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 2147483647 } }, @@ -455,23 +1599,20 @@ "value": { "id": "15b8d1ea-d2ac-4b3a-9619-57bba9a6da75", "name": "value", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": false, - "version": "1.0.0" + } }, "width": 320, - "height": 218, + "height": 32, "position": { - "x": 3662.7851649243958, - "y": -784.114001413615 + "x": 4025, + "y": -275 } }, { @@ -480,15 +1621,26 @@ "data": { "id": "76ea1e31-eabe-4080-935e-e74ce20e2805", "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "model": { "id": "54e737f9-2547-4bd9-a607-733d02f0c990", "name": "model", - "type": "MainModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, "value": { - "model_name": "stable-diffusion-v1-5", + "model_name": "epicrealism_naturalSinRC1VAE", "base_model": "sd-1", "model_type": "main" } @@ -498,35 +1650,40 @@ "unet": { "id": "3483ea21-f0b3-4422-894b-36c5d7701365", "name": "unet", - "type": "UNetField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "clip": { "id": "dddd055f-5c1b-4e61-977b-6393da9006fa", "name": "clip", - "type": "ClipField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "vae": { "id": "879893b4-3415-4879-8dff-aa1727ef5e63", "name": "vae", - "type": "VaeField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 226, + "height": 227, "position": { - "x": 2517.1672231749144, - "y": -751.385499561434 + "x": 2050, + "y": -525 } }, { @@ -535,44 +1692,153 @@ "data": { "id": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "916b229a-38e1-45a2-a433-cca97495b143", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "ae9aeb1a-4ebd-4bc3-b6e6-a8c9adca01f6", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "4d59bad1-99a9-43e2-bdb4-7a0f3dd5b787", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, + } + }, + "width": 320, + "height": 256, + "position": { + "x": 2550, + "y": -525 + } + }, + { + "id": "22b750db-b85e-486b-b278-ac983e329813", + "type": "invocation", + "data": { + "id": "22b750db-b85e-486b-b278-ac983e329813", + "type": "ip_adapter", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, "isIntermediate": true, "useCache": true, - "version": "1.0.0" + "version": "1.1.0", + "nodePack": "invokeai", + "inputs": { + "image": { + "id": "088a126c-ab1d-4c7a-879a-c1eea09eac8e", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "ip_adapter_model": { + "id": "f2ac529f-f778-4a12-af12-0c7e449de17a", + "name": "ip_adapter_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterModelField" + }, + "value": { + "model_name": "ip_adapter_plus_face_sd15", + "base_model": "sd-1" + } + }, + "weight": { + "id": "ddb4a7cb-607d-47e8-b46b-cc1be27ebde0", + "name": "weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.5 + }, + "begin_step_percent": { + "id": "1807371f-b56c-4777-baa2-de71e21f0b80", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "4ea8e4dc-9cd7-445e-9b32-8934c652381b", + "name": "end_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.8 + } + }, + "outputs": { + "ip_adapter": { + "id": "739b5fed-d813-4611-8f87-1dded25a7619", + "name": "ip_adapter", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterField" + } + } + } }, "width": 320, - "height": 261, + "height": 396, "position": { - "x": 3174.140478653321, - "y": -874.0896905277255 + "x": 3575, + "y": -200 } }, { @@ -581,63 +1847,98 @@ "data": { "id": "f60b6161-8f26-42f6-89ff-545e6011e501", "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "96434c75-abd8-4b73-ab82-0b358e4735bf", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "control_model": { "id": "21551ac2-ee50-4fe8-b06c-5be00680fb5c", "name": "control_model", - "type": "ControlNetModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, "value": { - "model_name": "sd-controlnet-canny", + "model_name": "canny", "base_model": "sd-1" } }, "control_weight": { "id": "1dacac0a-b985-4bdf-b4b5-b960f4cff6ed", "name": "control_weight", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 0.5 }, "begin_step_percent": { "id": "b2a3f128-7fc1-4c12-acc8-540f013c856b", "name": "begin_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "end_step_percent": { "id": "0e701834-f7ba-4a6e-b9cb-6d4aff5dacd8", "name": "end_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0.5 }, "control_mode": { "id": "f9a5f038-ae80-4b6e-8a48-362a2c858299", "name": "control_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "balanced" }, "resize_mode": { "id": "5369dd44-a708-4b66-8182-fea814d2a0ae", "name": "resize_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "just_resize" } }, @@ -645,23 +1946,411 @@ "control": { "id": "f470a1af-7b68-4849-a144-02bc345fd810", "name": "control", - "type": "ControlField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } } - }, + } + }, + "width": 320, + "height": 511, + "position": { + "x": 3950, + "y": 150 + } + }, + { + "id": "8fe598c6-d447-44fa-a165-4975af77d080", + "type": "invocation", + "data": { + "id": "8fe598c6-d447-44fa-a165-4975af77d080", + "type": "canny_image_processor", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, "isIntermediate": true, "useCache": true, - "version": "1.0.0" + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "855f4575-309a-4810-bd02-7c4a04e0efc8", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "7d2695fa-a617-431a-bc0e-69ac7c061651", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "low_threshold": { + "id": "ceb37a49-c989-4afa-abbf-49b6e52ef663", + "name": "low_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 100 + }, + "high_threshold": { + "id": "6ec118f8-ca6c-4be7-9951-6eee58afbc1b", + "name": "high_threshold", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 200 + } + }, + "outputs": { + "image": { + "id": "264bcaaf-d185-43ce-9e1a-b6f707140c0c", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "0d374d8e-d5c7-49be-9057-443e32e45048", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "fa892b68-6135-4598-a765-e79cd5c6e3f6", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } }, "width": 320, - "height": 508, + "height": 340, "position": { - "x": 3926.9358191964657, - "y": 538.0129522372209 + "x": 3519.4131037388597, + "y": 576.7946795840575 + } + }, + { + "id": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "invocation", + "data": { + "id": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "img_scale", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "46fc750e-7dda-4145-8f72-be88fb93f351", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "f7f41bb3-9a5a-4022-b671-0acc2819f7c3", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "scale_factor": { + "id": "1ae95574-f725-4cbc-bb78-4c9db240f78a", + "name": "scale_factor", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1.5 + }, + "resample_mode": { + "id": "0756e37d-3d01-4c2c-9364-58e8978b04a2", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "bicubic" + } + }, + "outputs": { + "image": { + "id": "2729e697-cacc-4874-94bf-3aee5c18b5f9", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "d9551981-cbd3-419a-bcb9-5b50600e8c18", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "3355c99e-cdc6-473b-a7c6-a9d1dcc941e5", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 3079.916484101321, + "y": 151.0148192064986 + } + }, + { + "id": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "invocation", + "data": { + "id": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "mask_combine", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "061ea794-2494-429e-bfdd-5fbd2c7eeb99", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "mask1": { + "id": "446c6c99-9cb5-4035-a452-ab586ef4ede9", + "name": "mask1", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "mask2": { + "id": "ebbe37b8-8bf3-4520-b6f5-631fe2d05d66", + "name": "mask2", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + } + }, + "outputs": { + "image": { + "id": "7c33cfae-ea9a-4572-91ca-40fc4112369f", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "7410c10c-3060-44a9-b399-43555c3e1156", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "3eb74c96-ae3e-4091-b027-703428244fdf", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 283, + "position": { + "x": 5450, + "y": 250 + } + }, + { + "id": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "type": "invocation", + "data": { + "id": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "type": "img_blur", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", + "inputs": { + "metadata": { + "id": "755d4fa2-a520-4837-a3da-65e1f479e6e6", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "a4786d7d-9593-4f5f-830b-d94bb0e42bca", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "radius": { + "id": "e1c9afa0-4d41-4664-b560-e1e85f467267", + "name": "radius", + "fieldKind": "input", + "label": "Mask Blue", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 150 + }, + "blur_type": { + "id": "f6231886-0981-444b-bd26-24674f87e7cb", + "name": "blur_type", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "gaussian" + } + }, + "outputs": { + "image": { + "id": "20c7bcfc-269d-4119-8b45-6c59dd4005d7", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "37e228ef-cb59-4477-b18f-343609d7bb4e", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "2de6080e-8bc3-42cd-bb8a-afd72f082df4", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 340, + "position": { + "x": 5000, + "y": 300 } }, { @@ -670,13 +2359,24 @@ "data": { "id": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", "type": "float", + "label": "Face Detail Scale", + "isOpen": false, + "notes": "The image is cropped to the face and scaled to 512x512. This value can scale even more. Best result with value between 1-2.\n\n1 = 512\n2 = 1024\n\n", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "value": { "id": "9b51a26f-af3c-4caa-940a-5183234b1ed7", "name": "value", - "type": "float", "fieldKind": "input", "label": "Face Detail Scale", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1.5 } }, @@ -684,1349 +2384,547 @@ "value": { "id": "c7c87b77-c149-4e9c-8ed1-beb1ba013055", "name": "value", - "type": "float", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } } - }, - "label": "Face Detail Scale", - "isOpen": true, - "notes": "The image is cropped to the face and scaled to 512x512. This value can scale even more. Best result with value between 1-2.\n\n1 = 512\n2 = 1024\n\n", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 161, + "height": 32, "position": { - "x": 2505.1027422955735, - "y": -447.7244534284996 + "x": 2550, + "y": 125 } }, { - "id": "e41c9dcc-a460-439a-85f3-eb18c74d9411", + "id": "a6482723-4e0a-4e40-98c0-b20622bf5f16", "type": "invocation", "data": { - "id": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "type": "denoise_latents", - "inputs": { - "noise": { - "id": "2223c30c-e3ef-4a2b-9ae8-31f9f2b38f68", - "name": "noise", - "type": "LatentsField", - "fieldKind": "input", - "label": "" - }, - "steps": { - "id": "09c2a8c9-0771-4e35-b674-26633fe5d740", - "name": "steps", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 10 - }, - "cfg_scale": { - "id": "dcef4b34-926f-46c1-9e57-c6401f1ac901", - "name": "cfg_scale", - "type": "FloatPolymorphic", - "fieldKind": "input", - "label": "", - "value": 7.5 - }, - "denoising_start": { - "id": "efb48776-93b4-4a1b-9b9e-ea173720850d", - "name": "denoising_start", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 0 - }, - "denoising_end": { - "id": "acedd753-b95c-4c23-91a8-398bc85f03cb", - "name": "denoising_end", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 1 - }, - "scheduler": { - "id": "d6aedf09-ad0e-433f-9d70-fcf43303840d", - "name": "scheduler", - "type": "Scheduler", - "fieldKind": "input", - "label": "", - "value": "euler" - }, - "control": { - "id": "f83850ba-d6d6-4ba9-9f41-424427a005f4", - "name": "control", - "type": "ControlPolymorphic", - "fieldKind": "input", - "label": "" - }, - "ip_adapter": { - "id": "6e42ab48-8eaf-4d05-ba5e-0b7d7667249d", - "name": "ip_adapter", - "type": "IPAdapterPolymorphic", - "fieldKind": "input", - "label": "" - }, - "t2i_adapter": { - "id": "32c2f9c1-ae8a-4f9b-9e06-30debb6b1190", - "name": "t2i_adapter", - "type": "T2IAdapterPolymorphic", - "fieldKind": "input", - "label": "" - }, - "latents": { - "id": "79479fdb-82b6-4b7f-8a4a-e658c2ff0d2f", - "name": "latents", - "type": "LatentsField", - "fieldKind": "input", - "label": "" - }, - "denoise_mask": { - "id": "c76b77a3-bcde-4425-bfdd-638becefb4ba", - "name": "denoise_mask", - "type": "DenoiseMaskField", - "fieldKind": "input", - "label": "" - }, - "positive_conditioning": { - "id": "f14ea66a-5e7b-400b-a835-049286aa0c82", - "name": "positive_conditioning", - "type": "ConditioningField", - "fieldKind": "input", - "label": "" - }, - "negative_conditioning": { - "id": "ce94941f-9e4e-41f4-b33f-1d6907919964", - "name": "negative_conditioning", - "type": "ConditioningField", - "fieldKind": "input", - "label": "" - }, - "unet": { - "id": "290f45fa-1543-4e41-ab6f-63e139556dfc", - "name": "unet", - "type": "UNetField", - "fieldKind": "input", - "label": "" - } - }, - "outputs": { - "latents": { - "id": "ab8a8305-e6e7-4569-956c-02d5d0fa2989", - "name": "latents", - "type": "LatentsField", - "fieldKind": "output" - }, - "width": { - "id": "161773a7-4e7b-44b6-98d9-f565036f190b", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "4fe54d15-d9b9-4fd0-b8ac-a1b2a11f3243", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, + "id": "a6482723-4e0a-4e40-98c0-b20622bf5f16", + "type": "face_mask_detection", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, "isIntermediate": true, "useCache": true, - "version": "1.3.0" - }, - "width": 320, - "height": 646, - "position": { - "x": 4482.62568856733, - "y": -385.4092574423216 - } - }, - { - "id": "1bb5d85c-fc4d-41ed-94c6-88559f497491", - "type": "invocation", - "data": { - "id": "1bb5d85c-fc4d-41ed-94c6-88559f497491", - "type": "face_off", + "version": "1.2.0", "inputs": { "metadata": { - "id": "6ad02931-9067-43e3-bc2b-29ce5388b317", + "id": "44e1fca6-3f06-4698-9562-6743c1f7a739", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "image": { - "id": "01e0d368-7712-4c5b-8f73-18d3d3459d82", + "id": "65ba4653-8c35-403d-838b-ddac075e4118", "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "face_id": { - "id": "563cd209-2adf-4249-97df-0d13818ae057", - "name": "face_id", - "type": "integer", "fieldKind": "input", "label": "", - "value": 0 + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "face_ids": { + "id": "630e86e5-3041-47c4-8864-b8ee71ec7da5", + "name": "face_ids", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" }, "minimum_confidence": { - "id": "2cb09928-911c-43d7-8cbb-be13aed8f9a4", + "id": "8c4aef57-90c6-4904-9113-7189db1357c9", "name": "minimum_confidence", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0.5 }, "x_offset": { - "id": "80d5fa06-a719-454f-9641-8ca5e2889d2d", + "id": "2d409495-4aee-41e2-9688-f37fb6add537", "name": "x_offset", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "y_offset": { - "id": "ff03fe44-26d1-4d8b-a012-3e05c918d56f", + "id": "de3c1e68-6962-4520-b672-989afff1d2a1", "name": "y_offset", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 0 - }, - "padding": { - "id": "05db8638-24f4-4a0a-9040-ae9beabd194b", - "name": "padding", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "chunk": { - "id": "d6a556b3-f1c7-480b-b1a2-e9441a3bb344", + "id": "9a11971a-0759-4782-902a-8300070d8861", "name": "chunk", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "invert_mask": { + "id": "2abecba7-35d0-4cc4-9732-769e97d34c75", + "name": "invert_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false } }, "outputs": { "image": { - "id": "963b445d-a35f-476b-b164-c61a35b86ef1", + "id": "af33585c-5451-4738-b1da-7ff83afdfbf8", "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "fa64b386-f45f-4979-8004-c1cf21b83d9c", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "bf7711ec-7788-4d9b-9abf-8cc0638f264d", - "name": "height", - "type": "integer", - "fieldKind": "output" - }, - "mask": { - "id": "c6dcf700-e903-4c9e-bd84-94f169c6d04c", - "name": "mask", - "type": "ImageField", - "fieldKind": "output" - }, - "x": { - "id": "d4993748-913b-4490-b71f-9400c1fe9f2d", - "name": "x", - "type": "integer", - "fieldKind": "output" - }, - "y": { - "id": "af9c4994-4f1b-4715-aa44-6c5b21274af4", - "name": "y", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.2" - }, - "width": 320, - "height": 656, - "position": { - "x": 2414.612131259088, - "y": 291.78659156828013 - } - }, - { - "id": "e3383c2f-828e-4b9c-94bb-9f10de86cc7f", - "type": "invocation", - "data": { - "id": "e3383c2f-828e-4b9c-94bb-9f10de86cc7f", - "type": "img_resize", - "inputs": { - "metadata": { - "id": "01bd4648-7c80-497c-823d-48ad41ce1cd2", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "image": { - "id": "1893f2cc-344a-4f15-8f01-85ba99da518b", - "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "width": { - "id": "123d1849-df1b-4e36-8329-f45235f857cf", - "name": "width", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 512 - }, - "height": { - "id": "ebdf1684-abe5-42e1-b16e-797ffdfee7a2", - "name": "height", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 512 - }, - "resample_mode": { - "id": "e83edb34-9391-4830-a1fb-fe0e0f5087bd", - "name": "resample_mode", - "type": "enum", - "fieldKind": "input", - "label": "", - "value": "bicubic" - } - }, - "outputs": { - "image": { - "id": "0c369a81-bdd3-4b4c-9626-95ce47375ed1", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "560d5588-8df8-41e8-aa69-fb8c95cdb4e2", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "2b04576b-7b22-4b2a-9fb6-57c1fd86a506", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 396, - "position": { - "x": 2447.826252430936, - "y": -201.68035155632666 - } - }, - { - "id": "60343212-208e-4ec5-97c4-df78e30a3066", - "type": "invocation", - "data": { - "id": "60343212-208e-4ec5-97c4-df78e30a3066", - "type": "img_scale", - "inputs": { - "metadata": { - "id": "607e3b73-c76e-477e-8479-8130d3a25028", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "image": { - "id": "b04d11ba-cc0c-48d5-ab9e-f3958a5e8839", - "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "scale_factor": { - "id": "79656494-c8c0-4096-b25a-628d9c37f071", - "name": "scale_factor", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 2 - }, - "resample_mode": { - "id": "92176f78-e21a-4085-884d-c66c7135c714", - "name": "resample_mode", - "type": "enum", - "fieldKind": "input", - "label": "", - "value": "bicubic" - } - }, - "outputs": { - "image": { - "id": "2321a8bf-3f55-470d-afe3-b8760240d59a", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "62005d4a-7961-439c-9357-9de5fc53b51b", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "3f0a7f7f-ea40-48de-8b1b-8570595e94ef", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 339, - "position": { - "x": 3007.7214378992408, - "y": 211.12372586521934 - } - }, - { - "id": "07099eb0-9d58-4e0b-82f8-3063c3af2689", - "type": "invocation", - "data": { - "id": "07099eb0-9d58-4e0b-82f8-3063c3af2689", - "type": "canny_image_processor", - "inputs": { - "metadata": { - "id": "7d38d9d6-029b-4de6-aabf-5aa46c508291", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "image": { - "id": "656409a8-aa89-4ecb-bb6c-8d5e612aa814", - "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "low_threshold": { - "id": "1879f7c5-dd3a-4770-a260-b18111577e63", - "name": "low_threshold", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 100 - }, - "high_threshold": { - "id": "b84b6aad-cb83-40d3-85a6-e18dc440d89b", - "name": "high_threshold", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 200 - } - }, - "outputs": { - "image": { - "id": "98e8c22c-43cb-41a3-9e8c-c4fdc3cbe749", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "a8eaa116-2bc1-4dab-84bf-4e21c6e14296", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "ddab1f63-c0c8-4ff7-9124-f0c6cdda81f8", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 339, - "position": { - "x": 3444.7466139600724, - "y": 586.5162666396674 - } - }, - { - "id": "a50af8a0-7b7e-4cb8-a116-89f2d83f33ed", - "type": "invocation", - "data": { - "id": "a50af8a0-7b7e-4cb8-a116-89f2d83f33ed", - "type": "ip_adapter", - "inputs": { - "image": { - "id": "1cee5c9b-8d23-4b11-a699-5919c86a972f", - "name": "image", - "type": "ImagePolymorphic", - "fieldKind": "input", - "label": "" - }, - "ip_adapter_model": { - "id": "3ca282f7-be7c-44a1-8a5a-94afdecae0ae", - "name": "ip_adapter_model", - "type": "IPAdapterModelField", - "fieldKind": "input", - "label": "", - "value": { - "model_name": "ip_adapter_plus_face_sd15", - "base_model": "sd-1" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" } }, - "weight": { - "id": "eee84151-d5a0-4970-a984-9b0c26e3a58a", - "name": "weight", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 1 - }, - "begin_step_percent": { - "id": "0ed4cc66-5688-4554-9f2b-acf0a33415a1", - "name": "begin_step_percent", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 0 - }, - "end_step_percent": { - "id": "9544971a-8963-43da-abf4-0920781209ca", - "name": "end_step_percent", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 1 - } - }, - "outputs": { - "ip_adapter": { - "id": "03814df3-0117-434e-b35b-7902fc519e80", - "name": "ip_adapter", - "type": "IPAdapterField", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.1.0" - }, - "width": 320, - "height": 394, - "position": { - "x": 3486.4422814170716, - "y": 112.39273647258193 - } - }, - { - "id": "03df59d0-a061-430c-a76f-5a4cf3e14378", - "type": "invocation", - "data": { - "id": "03df59d0-a061-430c-a76f-5a4cf3e14378", - "type": "img_resize", - "inputs": { - "metadata": { - "id": "9fbe66f2-700c-457a-ab06-434a8f8169e9", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "image": { - "id": "37914278-90ba-4095-8c13-067a90a256cc", - "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, "width": { - "id": "9d2b22b0-0a2a-4da8-aec0-c50f419bd134", + "id": "52cec0bd-d2e5-4514-8ebf-1c0d8bd1b81d", "name": "width", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 512 + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { - "id": "d5590b6b-96c3-4d7d-b472-56269515e1ad", + "id": "05edbbc8-99df-42e0-9b9b-de7b555e44cc", "name": "height", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 512 - }, - "resample_mode": { - "id": "975d601c-8801-4881-b138-a43afccb89e9", - "name": "resample_mode", - "type": "enum", - "fieldKind": "input", - "label": "", - "value": "bicubic" - } - }, - "outputs": { - "image": { - "id": "75099113-a677-4a05-96a6-e680c00c2c01", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "15132cfa-f46d-44df-9272-0b5abdd101b2", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "0f80c001-cee0-4a20-92a4-3a7b01130ffe", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 396, - "position": { - "x": 4423.278808515647, - "y": 350.94607680079463 - } - }, - { - "id": "8bb08a28-0a64-4da9-9bf4-4526ea40f437", - "type": "invocation", - "data": { - "id": "8bb08a28-0a64-4da9-9bf4-4526ea40f437", - "type": "img_blur", - "inputs": { - "metadata": { - "id": "ccbff6e7-4138-462c-bc2f-ea14bda4faa8", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "image": { - "id": "1c47e5ea-4f6e-4608-a15a-2eed4052d895", - "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "radius": { - "id": "646349d2-25ac-49ac-9aa9-bcd78a3362ab", - "name": "radius", - "type": "float", - "fieldKind": "input", - "label": "", - "value": 8 - }, - "blur_type": { - "id": "0d3c8ada-0743-4f73-a29a-b359022b3745", - "name": "blur_type", - "type": "enum", - "fieldKind": "input", - "label": "", - "value": "gaussian" - } - }, - "outputs": { - "image": { - "id": "f775bed9-bb8e-47b1-b08a-cfb9a5d2501d", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "1ec74094-1181-41cb-9a11-6f93e4997913", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "7b91bdb5-27c0-4cee-8005-854675c2dedd", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 339, - "position": { - "x": 4876.996101782848, - "y": 349.1456113513215 - } - }, - { - "id": "227f0e19-3a4e-44f0-9f52-a8591b719bbe", - "type": "invocation", - "data": { - "id": "227f0e19-3a4e-44f0-9f52-a8591b719bbe", - "type": "mask_combine", - "inputs": { - "metadata": { - "id": "39eb7bba-0668-4349-9093-6aede07bec66", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "mask1": { - "id": "0ee7c237-b775-4470-8061-29eee0b1c9ae", - "name": "mask1", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "mask2": { - "id": "6231f048-0165-4bb8-b468-446f71b882bb", - "name": "mask2", - "type": "ImageField", - "fieldKind": "input", - "label": "" - } - }, - "outputs": { - "image": { - "id": "321dde14-3a6d-4606-af05-477e92735a14", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "0801ee9e-a19b-46ca-b919-747e81323aa9", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "7d2614d3-3ac8-44f0-9726-b1591057670f", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 282, - "position": { - "x": 5346.9175840953085, - "y": 374.352127643944 - } - }, - { - "id": "0d05a218-0208-4038-a3e7-867bd9367593", - "type": "invocation", - "data": { - "id": "0d05a218-0208-4038-a3e7-867bd9367593", - "type": "l2i", - "inputs": { - "metadata": { - "id": "a2f3806c-f4ea-41f2-b213-c049197bbeb4", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "latents": { - "id": "e5a25c64-bafe-4fae-b066-21062f18582c", - "name": "latents", - "type": "LatentsField", - "fieldKind": "input", - "label": "" - }, - "vae": { - "id": "af671339-cc72-4fab-8908-1ede72ffbe23", - "name": "vae", - "type": "VaeField", - "fieldKind": "input", - "label": "" - }, - "tiled": { - "id": "a5d71aea-2e23-4517-be62-948fc70f0cfa", - "name": "tiled", - "type": "boolean", - "fieldKind": "input", - "label": "", - "value": false - }, - "fp32": { - "id": "c2b8897e-67cb-43a5-a448-834ea9ce0ba0", - "name": "fp32", - "type": "boolean", - "fieldKind": "input", - "label": "", - "value": false - } - }, - "outputs": { - "image": { - "id": "93f1ba9e-5cfe-4282-91ed-fc5b586d3961", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "8f844f95-9ee6-469d-9706-9b48fb616a23", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "bac22e85-9bdd-468d-b3e3-a94325ea2f85", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 267, - "position": { - "x": 4966.928144382504, - "y": -294.018133443524 - } - }, - { - "id": "db4981fd-e6eb-42b3-910b-b15443fa863d", - "type": "invocation", - "data": { - "id": "db4981fd-e6eb-42b3-910b-b15443fa863d", - "type": "img_resize", - "inputs": { - "metadata": { - "id": "37f62260-8cf9-443d-8838-8acece688821", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "image": { - "id": "9e95616d-2079-4d48-bb7d-b641b4cd1d69", - "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "width": { - "id": "96cc2cac-69e8-40f8-9e0e-b23ee7db9e08", - "name": "width", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 512 - }, - "height": { - "id": "eb9b8960-6f63-43be-aba5-2c165a46bfcf", - "name": "height", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 512 - }, - "resample_mode": { - "id": "bafe9aef-0e59-49d3-97bf-00df38dd7e11", - "name": "resample_mode", - "type": "enum", - "fieldKind": "input", - "label": "", - "value": "bicubic" - } - }, - "outputs": { - "image": { - "id": "9f3e1433-5ab1-4c2e-8adb-aafcc051054b", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "a8433208-ea4a-417e-a1ac-6fa4ca8a6537", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "29bceb69-05a9-463a-b003-75e337ad5be0", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" - }, - "width": 320, - "height": 396, - "position": { - "x": 5379.153347937034, - "y": -198.406964558253 - } - }, - { - "id": "ab1387b7-6b00-4e20-acae-2ca2c1597896", - "type": "invocation", - "data": { - "id": "ab1387b7-6b00-4e20-acae-2ca2c1597896", - "type": "img_paste", - "inputs": { - "metadata": { - "id": "91fa397b-cadb-42ca-beee-e9437f6ddd3d", - "name": "metadata", - "type": "MetadataField", - "fieldKind": "input", - "label": "" - }, - "base_image": { - "id": "d2073c40-9299-438f-ab7b-b9fe85f5550d", - "name": "base_image", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "image": { - "id": "c880fd54-a830-4f16-a1fe-c07d8ecd5d96", - "name": "image", - "type": "ImageField", - "fieldKind": "input", - "label": "" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "mask": { - "id": "a8ae99d0-7e67-4064-9f34-4c4cebfcdca9", + "id": "cf928567-3e05-42dd-9591-0d3d942034f8", "name": "mask", - "type": "ImageField", - "fieldKind": "input", - "label": "" - }, - "x": { - "id": "bd874e6d-ec17-496e-864a-0a6f613ef3f2", - "name": "x", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 0 - }, - "y": { - "id": "8fcb1a55-3275-448a-8571-f93909468cdc", - "name": "y", - "type": "integer", - "fieldKind": "input", - "label": "", - "value": 0 - }, - "crop": { - "id": "54fad883-e0d8-46e8-a933-7bac0e8977eb", - "name": "crop", - "type": "boolean", - "fieldKind": "input", - "label": "", - "value": false + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } } - }, - "outputs": { - "image": { - "id": "c9e38cb4-daad-4ed2-87e1-cf36cc4fccc4", - "name": "image", - "type": "ImageField", - "fieldKind": "output" - }, - "width": { - "id": "93832b00-1691-475d-a04b-277598ca33e0", - "name": "width", - "type": "integer", - "fieldKind": "output" - }, - "height": { - "id": "9e57e4da-e349-4356-956f-b50f41f7f19b", - "name": "height", - "type": "integer", - "fieldKind": "output" - } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": false, - "useCache": true, - "version": "1.0.1" + } }, "width": 320, - "height": 504, + "height": 585, "position": { - "x": 6054.981342632396, - "y": -107.76717121720509 + "x": 4300, + "y": 600 } } ], "edges": [ { + "id": "50a8db6a-3796-4522-8547-53275efa4e7d-de8b1a48-a2e4-42ca-90bb-66058bffd534-collapsed", + "source": "50a8db6a-3796-4522-8547-53275efa4e7d", + "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "collapsed" + }, + { + "id": "f0de6c44-4515-4f79-bcc0-dee111bcfe31-2974e5b3-3d41-4b6f-9953-cd21e8f3a323-collapsed", + "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "collapsed" + }, + { + "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534-2974e5b3-3d41-4b6f-9953-cd21e8f3a323-collapsed", "source": "de8b1a48-a2e4-42ca-90bb-66058bffd534", - "sourceHandle": "latents", "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", - "targetHandle": "latents", - "id": "reactflow__edge-de8b1a48-a2e4-42ca-90bb-66058bffd534latents-2974e5b3-3d41-4b6f-9953-cd21e8f3a323latents", - "type": "default" + "type": "collapsed" }, { + "id": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323-35623411-ba3a-4eaa-91fd-1e0fda0a5b42-collapsed", "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", - "sourceHandle": "width", "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", - "targetHandle": "width", - "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323width-35623411-ba3a-4eaa-91fd-1e0fda0a5b42width", - "type": "default" - }, - { - "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", - "sourceHandle": "height", - "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", - "targetHandle": "height", - "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323height-35623411-ba3a-4eaa-91fd-1e0fda0a5b42height", - "type": "default" + "type": "collapsed" }, { + "id": "c865f39f-f830-4ed7-88a5-e935cfe050a9-35623411-ba3a-4eaa-91fd-1e0fda0a5b42-collapsed", "source": "c865f39f-f830-4ed7-88a5-e935cfe050a9", - "sourceHandle": "value", "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", - "targetHandle": "seed", - "id": "reactflow__edge-c865f39f-f830-4ed7-88a5-e935cfe050a9value-35623411-ba3a-4eaa-91fd-1e0fda0a5b42seed", - "type": "default" + "type": "collapsed" }, { - "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", - "sourceHandle": "clip", - "target": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", - "targetHandle": "clip", - "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805clip-f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65clip", - "type": "default" + "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-9ae34718-a17d-401d-9859-086896c29fcaimage", + "source": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "target": "9ae34718-a17d-401d-9859-086896c29fca", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" }, { - "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", - "sourceHandle": "vae", - "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", - "targetHandle": "vae", - "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805vae-de8b1a48-a2e4-42ca-90bb-66058bffd534vae", - "type": "default" - }, - { - "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", - "sourceHandle": "clip", - "target": "44f2c190-eb03-460d-8d11-a94d13b33f19", - "targetHandle": "clip", - "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805clip-44f2c190-eb03-460d-8d11-a94d13b33f19clip", - "type": "default" - }, - { - "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", - "sourceHandle": "value", - "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", - "targetHandle": "scale_factor", - "id": "reactflow__edge-f0de6c44-4515-4f79-bcc0-dee111bcfe31value-2974e5b3-3d41-4b6f-9953-cd21e8f3a323scale_factor", - "type": "default" - }, - { - "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", - "sourceHandle": "latents", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "latents", - "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323latents-e41c9dcc-a460-439a-85f3-eb18c74d9411latents", - "type": "default" - }, - { - "source": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", - "sourceHandle": "conditioning", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "positive_conditioning", - "id": "reactflow__edge-f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65conditioning-e41c9dcc-a460-439a-85f3-eb18c74d9411positive_conditioning", - "type": "default" - }, - { - "source": "44f2c190-eb03-460d-8d11-a94d13b33f19", - "sourceHandle": "conditioning", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "negative_conditioning", - "id": "reactflow__edge-44f2c190-eb03-460d-8d11-a94d13b33f19conditioning-e41c9dcc-a460-439a-85f3-eb18c74d9411negative_conditioning", - "type": "default" - }, - { - "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", - "sourceHandle": "unet", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "unet", - "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805unet-e41c9dcc-a460-439a-85f3-eb18c74d9411unet", - "type": "default" - }, - { - "source": "f60b6161-8f26-42f6-89ff-545e6011e501", - "sourceHandle": "control", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "control", - "id": "reactflow__edge-f60b6161-8f26-42f6-89ff-545e6011e501control-e41c9dcc-a460-439a-85f3-eb18c74d9411control", - "type": "default" - }, - { - "source": "64712037-92e8-483f-9f6e-87588539c1b8", - "sourceHandle": "value", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "cfg_scale", - "id": "reactflow__edge-64712037-92e8-483f-9f6e-87588539c1b8value-e41c9dcc-a460-439a-85f3-eb18c74d9411cfg_scale", - "type": "default" + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcaimage-50a8db6a-3796-4522-8547-53275efa4e7dimage", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "50a8db6a-3796-4522-8547-53275efa4e7d", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" }, { + "id": "reactflow__edge-35623411-ba3a-4eaa-91fd-1e0fda0a5b42noise-bd06261d-a74a-4d1f-8374-745ed6194bc2noise", "source": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", "sourceHandle": "noise", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "noise", - "id": "reactflow__edge-35623411-ba3a-4eaa-91fd-1e0fda0a5b42noise-e41c9dcc-a460-439a-85f3-eb18c74d9411noise", - "type": "default" + "targetHandle": "noise" }, { - "source": "cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05", - "sourceHandle": "value", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "denoising_start", - "id": "reactflow__edge-cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05value-e41c9dcc-a460-439a-85f3-eb18c74d9411denoising_start", - "type": "default" - }, - { - "source": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", - "sourceHandle": "image", - "target": "1bb5d85c-fc4d-41ed-94c6-88559f497491", - "targetHandle": "image", - "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-1bb5d85c-fc4d-41ed-94c6-88559f497491image", - "type": "default" - }, - { - "source": "1bb5d85c-fc4d-41ed-94c6-88559f497491", - "sourceHandle": "image", - "target": "e3383c2f-828e-4b9c-94bb-9f10de86cc7f", - "targetHandle": "image", - "id": "reactflow__edge-1bb5d85c-fc4d-41ed-94c6-88559f497491image-e3383c2f-828e-4b9c-94bb-9f10de86cc7fimage", - "type": "default" - }, - { - "source": "e3383c2f-828e-4b9c-94bb-9f10de86cc7f", - "sourceHandle": "image", - "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", - "targetHandle": "image", - "id": "reactflow__edge-e3383c2f-828e-4b9c-94bb-9f10de86cc7fimage-de8b1a48-a2e4-42ca-90bb-66058bffd534image", - "type": "default" - }, - { - "source": "e3383c2f-828e-4b9c-94bb-9f10de86cc7f", - "sourceHandle": "image", - "target": "60343212-208e-4ec5-97c4-df78e30a3066", - "targetHandle": "image", - "id": "reactflow__edge-e3383c2f-828e-4b9c-94bb-9f10de86cc7fimage-60343212-208e-4ec5-97c4-df78e30a3066image", - "type": "default" - }, - { - "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", - "sourceHandle": "value", - "target": "60343212-208e-4ec5-97c4-df78e30a3066", - "targetHandle": "scale_factor", - "id": "reactflow__edge-f0de6c44-4515-4f79-bcc0-dee111bcfe31value-60343212-208e-4ec5-97c4-df78e30a3066scale_factor", - "type": "default" - }, - { - "source": "60343212-208e-4ec5-97c4-df78e30a3066", - "sourceHandle": "image", - "target": "07099eb0-9d58-4e0b-82f8-3063c3af2689", - "targetHandle": "image", - "id": "reactflow__edge-60343212-208e-4ec5-97c4-df78e30a3066image-07099eb0-9d58-4e0b-82f8-3063c3af2689image", - "type": "default" - }, - { - "source": "07099eb0-9d58-4e0b-82f8-3063c3af2689", - "sourceHandle": "image", - "target": "f60b6161-8f26-42f6-89ff-545e6011e501", - "targetHandle": "image", - "id": "reactflow__edge-07099eb0-9d58-4e0b-82f8-3063c3af2689image-f60b6161-8f26-42f6-89ff-545e6011e501image", - "type": "default" - }, - { - "source": "60343212-208e-4ec5-97c4-df78e30a3066", - "sourceHandle": "image", - "target": "a50af8a0-7b7e-4cb8-a116-89f2d83f33ed", - "targetHandle": "image", - "id": "reactflow__edge-60343212-208e-4ec5-97c4-df78e30a3066image-a50af8a0-7b7e-4cb8-a116-89f2d83f33edimage", - "type": "default" - }, - { - "source": "a50af8a0-7b7e-4cb8-a116-89f2d83f33ed", - "sourceHandle": "ip_adapter", - "target": "e41c9dcc-a460-439a-85f3-eb18c74d9411", - "targetHandle": "ip_adapter", - "id": "reactflow__edge-a50af8a0-7b7e-4cb8-a116-89f2d83f33edip_adapter-e41c9dcc-a460-439a-85f3-eb18c74d9411ip_adapter", - "type": "default" - }, - { - "source": "1bb5d85c-fc4d-41ed-94c6-88559f497491", - "sourceHandle": "width", - "target": "03df59d0-a061-430c-a76f-5a4cf3e14378", - "targetHandle": "width", - "id": "reactflow__edge-1bb5d85c-fc4d-41ed-94c6-88559f497491width-03df59d0-a061-430c-a76f-5a4cf3e14378width", - "type": "default" - }, - { - "source": "1bb5d85c-fc4d-41ed-94c6-88559f497491", - "sourceHandle": "height", - "target": "03df59d0-a061-430c-a76f-5a4cf3e14378", - "targetHandle": "height", - "id": "reactflow__edge-1bb5d85c-fc4d-41ed-94c6-88559f497491height-03df59d0-a061-430c-a76f-5a4cf3e14378height", - "type": "default" - }, - { - "source": "1bb5d85c-fc4d-41ed-94c6-88559f497491", - "sourceHandle": "mask", - "target": "8bb08a28-0a64-4da9-9bf4-4526ea40f437", - "targetHandle": "image", - "id": "reactflow__edge-1bb5d85c-fc4d-41ed-94c6-88559f497491mask-8bb08a28-0a64-4da9-9bf4-4526ea40f437image", - "type": "default" - }, - { - "source": "8bb08a28-0a64-4da9-9bf4-4526ea40f437", - "sourceHandle": "image", - "target": "227f0e19-3a4e-44f0-9f52-a8591b719bbe", - "targetHandle": "mask1", - "id": "reactflow__edge-8bb08a28-0a64-4da9-9bf4-4526ea40f437image-227f0e19-3a4e-44f0-9f52-a8591b719bbemask1", - "type": "default" - }, - { - "source": "03df59d0-a061-430c-a76f-5a4cf3e14378", - "sourceHandle": "image", - "target": "227f0e19-3a4e-44f0-9f52-a8591b719bbe", - "targetHandle": "mask2", - "id": "reactflow__edge-03df59d0-a061-430c-a76f-5a4cf3e14378image-227f0e19-3a4e-44f0-9f52-a8591b719bbemask2", - "type": "default" - }, - { - "source": "e41c9dcc-a460-439a-85f3-eb18c74d9411", + "id": "reactflow__edge-de8b1a48-a2e4-42ca-90bb-66058bffd534latents-2974e5b3-3d41-4b6f-9953-cd21e8f3a323latents", + "source": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "default", "sourceHandle": "latents", - "target": "0d05a218-0208-4038-a3e7-867bd9367593", - "targetHandle": "latents", - "id": "reactflow__edge-e41c9dcc-a460-439a-85f3-eb18c74d9411latents-0d05a218-0208-4038-a3e7-867bd9367593latents", - "type": "default" + "targetHandle": "latents" }, { - "source": "0d05a218-0208-4038-a3e7-867bd9367593", - "sourceHandle": "image", - "target": "db4981fd-e6eb-42b3-910b-b15443fa863d", - "targetHandle": "image", - "id": "reactflow__edge-0d05a218-0208-4038-a3e7-867bd9367593image-db4981fd-e6eb-42b3-910b-b15443fa863dimage", - "type": "default" + "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323latents-bd06261d-a74a-4d1f-8374-745ed6194bc2latents", + "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" }, { - "source": "db4981fd-e6eb-42b3-910b-b15443fa863d", - "sourceHandle": "image", - "target": "ab1387b7-6b00-4e20-acae-2ca2c1597896", - "targetHandle": "image", - "id": "reactflow__edge-db4981fd-e6eb-42b3-910b-b15443fa863dimage-ab1387b7-6b00-4e20-acae-2ca2c1597896image", - "type": "default" + "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323width-35623411-ba3a-4eaa-91fd-1e0fda0a5b42width", + "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" }, { + "id": "reactflow__edge-2974e5b3-3d41-4b6f-9953-cd21e8f3a323height-35623411-ba3a-4eaa-91fd-1e0fda0a5b42height", + "source": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-a7d14545-aa09-4b96-bfc5-40c009af9110base_image", "source": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", "sourceHandle": "image", - "target": "ab1387b7-6b00-4e20-acae-2ca2c1597896", - "targetHandle": "base_image", - "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-ab1387b7-6b00-4e20-acae-2ca2c1597896base_image", - "type": "default" + "targetHandle": "base_image" }, { - "source": "227f0e19-3a4e-44f0-9f52-a8591b719bbe", + "id": "reactflow__edge-2224ed72-2453-4252-bd89-3085240e0b6fimage-ff8c23dc-da7c-45b7-b5c9-d984b12f02efimage", + "source": "2224ed72-2453-4252-bd89-3085240e0b6f", + "target": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "default", "sourceHandle": "image", - "target": "ab1387b7-6b00-4e20-acae-2ca2c1597896", - "targetHandle": "mask", - "id": "reactflow__edge-227f0e19-3a4e-44f0-9f52-a8591b719bbeimage-ab1387b7-6b00-4e20-acae-2ca2c1597896mask", - "type": "default" + "targetHandle": "image" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcawidth-ff8c23dc-da7c-45b7-b5c9-d984b12f02efwidth", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcaheight-ff8c23dc-da7c-45b7-b5c9-d984b12f02efheight", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcax-a7d14545-aa09-4b96-bfc5-40c009af9110x", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "x", + "targetHandle": "x" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcay-a7d14545-aa09-4b96-bfc5-40c009af9110y", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "y", + "targetHandle": "y" + }, + { + "id": "reactflow__edge-50a8db6a-3796-4522-8547-53275efa4e7dimage-de8b1a48-a2e4-42ca-90bb-66058bffd534image", + "source": "50a8db6a-3796-4522-8547-53275efa4e7d", + "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05value-bd06261d-a74a-4d1f-8374-745ed6194bc2denoising_start", + "source": "cdfa5ab0-b3e2-43ed-85bb-2ac4aa83bc05", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "value", + "targetHandle": "denoising_start" + }, + { + "id": "reactflow__edge-64712037-92e8-483f-9f6e-87588539c1b8value-bd06261d-a74a-4d1f-8374-745ed6194bc2cfg_scale", + "source": "64712037-92e8-483f-9f6e-87588539c1b8", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "value", + "targetHandle": "cfg_scale" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcawidth-c59e815c-1f3a-4e2b-b6b8-66f4b005e955width", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcaheight-c59e815c-1f3a-4e2b-b6b8-66f4b005e955height", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-ff8c23dc-da7c-45b7-b5c9-d984b12f02efimage-a7d14545-aa09-4b96-bfc5-40c009af9110image", + "source": "ff8c23dc-da7c-45b7-b5c9-d984b12f02ef", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-bd06261d-a74a-4d1f-8374-745ed6194bc2latents-2224ed72-2453-4252-bd89-3085240e0b6flatents", + "source": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "target": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-c865f39f-f830-4ed7-88a5-e935cfe050a9value-35623411-ba3a-4eaa-91fd-1e0fda0a5b42seed", + "source": "c865f39f-f830-4ed7-88a5-e935cfe050a9", + "target": "35623411-ba3a-4eaa-91fd-1e0fda0a5b42", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805clip-f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65clip", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805vae-de8b1a48-a2e4-42ca-90bb-66058bffd534vae", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65conditioning-bd06261d-a74a-4d1f-8374-745ed6194bc2positive_conditioning", + "source": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-44f2c190-eb03-460d-8d11-a94d13b33f19conditioning-bd06261d-a74a-4d1f-8374-745ed6194bc2negative_conditioning", + "source": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805unet-bd06261d-a74a-4d1f-8374-745ed6194bc2unet", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805vae-2224ed72-2453-4252-bd89-3085240e0b6fvae", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-76ea1e31-eabe-4080-935e-e74ce20e2805clip-44f2c190-eb03-460d-8d11-a94d13b33f19clip", + "source": "76ea1e31-eabe-4080-935e-e74ce20e2805", + "target": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-22b750db-b85e-486b-b278-ac983e329813ip_adapter-bd06261d-a74a-4d1f-8374-745ed6194bc2ip_adapter", + "source": "22b750db-b85e-486b-b278-ac983e329813", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "ip_adapter", + "targetHandle": "ip_adapter" + }, + { + "id": "reactflow__edge-50a8db6a-3796-4522-8547-53275efa4e7dimage-4bd4ae80-567f-4366-b8c6-3bb06f4fb46aimage", + "source": "50a8db6a-3796-4522-8547-53275efa4e7d", + "target": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-4bd4ae80-567f-4366-b8c6-3bb06f4fb46aimage-22b750db-b85e-486b-b278-ac983e329813image", + "source": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "target": "22b750db-b85e-486b-b278-ac983e329813", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-8fe598c6-d447-44fa-a165-4975af77d080image-f60b6161-8f26-42f6-89ff-545e6011e501image", + "source": "8fe598c6-d447-44fa-a165-4975af77d080", + "target": "f60b6161-8f26-42f6-89ff-545e6011e501", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-4bd4ae80-567f-4366-b8c6-3bb06f4fb46aimage-8fe598c6-d447-44fa-a165-4975af77d080image", + "source": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "target": "8fe598c6-d447-44fa-a165-4975af77d080", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-f60b6161-8f26-42f6-89ff-545e6011e501control-bd06261d-a74a-4d1f-8374-745ed6194bc2control", + "source": "f60b6161-8f26-42f6-89ff-545e6011e501", + "target": "bd06261d-a74a-4d1f-8374-745ed6194bc2", + "type": "default", + "sourceHandle": "control", + "targetHandle": "control" + }, + { + "id": "reactflow__edge-c59e815c-1f3a-4e2b-b6b8-66f4b005e955image-381d5b6a-f044-48b0-bc07-6138fbfa8dfcmask2", + "source": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "target": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "default", + "sourceHandle": "image", + "targetHandle": "mask2" + }, + { + "id": "reactflow__edge-381d5b6a-f044-48b0-bc07-6138fbfa8dfcimage-a7d14545-aa09-4b96-bfc5-40c009af9110mask", + "source": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "target": "a7d14545-aa09-4b96-bfc5-40c009af9110", + "type": "default", + "sourceHandle": "image", + "targetHandle": "mask" + }, + { + "id": "reactflow__edge-77da4e4d-5778-4469-8449-ffed03d54bdbimage-381d5b6a-f044-48b0-bc07-6138fbfa8dfcmask1", + "source": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "target": "381d5b6a-f044-48b0-bc07-6138fbfa8dfc", + "type": "default", + "sourceHandle": "image", + "targetHandle": "mask1" + }, + { + "id": "reactflow__edge-9ae34718-a17d-401d-9859-086896c29fcamask-77da4e4d-5778-4469-8449-ffed03d54bdbimage", + "source": "9ae34718-a17d-401d-9859-086896c29fca", + "target": "77da4e4d-5778-4469-8449-ffed03d54bdb", + "type": "default", + "sourceHandle": "mask", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-f0de6c44-4515-4f79-bcc0-dee111bcfe31value-2974e5b3-3d41-4b6f-9953-cd21e8f3a323scale_factor", + "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "target": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", + "type": "default", + "sourceHandle": "value", + "targetHandle": "scale_factor" + }, + { + "id": "reactflow__edge-f0de6c44-4515-4f79-bcc0-dee111bcfe31value-4bd4ae80-567f-4366-b8c6-3bb06f4fb46ascale_factor", + "source": "f0de6c44-4515-4f79-bcc0-dee111bcfe31", + "target": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", + "type": "default", + "sourceHandle": "value", + "targetHandle": "scale_factor" + }, + { + "id": "reactflow__edge-2c9bc2a6-6c03-4861-aad4-db884a7682f8image-a6482723-4e0a-4e40-98c0-b20622bf5f16image", + "source": "2c9bc2a6-6c03-4861-aad4-db884a7682f8", + "target": "a6482723-4e0a-4e40-98c0-b20622bf5f16", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-a6482723-4e0a-4e40-98c0-b20622bf5f16image-c59e815c-1f3a-4e2b-b6b8-66f4b005e955image", + "source": "a6482723-4e0a-4e40-98c0-b20622bf5f16", + "target": "c59e815c-1f3a-4e2b-b6b8-66f4b005e955", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" } ] } \ No newline at end of file diff --git a/docs/workflows/Multi_ControlNet_Canny_and_Depth.json b/docs/workflows/Multi_ControlNet_Canny_and_Depth.json index 09c9ff72ea..70dc204772 100644 --- a/docs/workflows/Multi_ControlNet_Canny_and_Depth.json +++ b/docs/workflows/Multi_ControlNet_Canny_and_Depth.json @@ -1,9 +1,10 @@ { + "id": "1e385b84-86f8-452e-9697-9e5abed20518", "name": "Multi ControlNet (Canny & Depth)", - "author": "Millu", + "author": "InvokeAI", "description": "A sample workflow using canny & depth ControlNets to guide the generation process. ", - "version": "0.1.0", - "contact": "millun@invoke.ai", + "version": "1.0.0", + "contact": "invoke@invoke.ai", "tags": "ControlNet, canny, depth", "notes": "", "exposedFields": [ @@ -29,7 +30,8 @@ } ], "meta": { - "version": "1.0.0" + "category": "default", + "version": "2.0.0" }, "nodes": [ { @@ -38,48 +40,64 @@ "data": { "id": "8e860e51-5045-456e-bf04-9a62a2a5c49e", "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "189c8adf-68cc-4774-a729-49da89f6fdf1", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "Depth Input Image" + "label": "Depth Input Image", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } } }, "outputs": { "image": { "id": "1a31cacd-9d19-4f32-b558-c5e4aa39ce73", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "12f298fd-1d11-4cca-9426-01240f7ec7cf", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "c47dabcb-44e8-40c9-992d-81dca59f598e", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 225, "position": { - "x": 3617.163483500202, - "y": 40.5529847930888 + "x": 3625, + "y": -75 } }, { @@ -88,63 +106,98 @@ "data": { "id": "a33199c2-8340-401e-b8a2-42ffa875fc1c", "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "4e0a3172-d3c2-4005-a84c-fa12a404f8a0", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "control_model": { "id": "8cb2d998-4086-430a-8b13-94cbc81e3ca3", "name": "control_model", - "type": "ControlNetModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, "value": { - "model_name": "sd-controlnet-depth", + "model_name": "depth", "base_model": "sd-1" } }, "control_weight": { "id": "5e32bd8a-9dc8-42d8-9bcc-c2b0460c0b0f", "name": "control_weight", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 1 }, "begin_step_percent": { "id": "c258a276-352a-416c-8358-152f11005c0c", "name": "begin_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "end_step_percent": { "id": "43001125-0d70-4f87-8e79-da6603ad6c33", "name": "end_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "control_mode": { "id": "d2f14561-9443-4374-9270-e2f05007944e", "name": "control_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "balanced" }, "resize_mode": { "id": "727ee7d3-8bf6-4c7d-8b8a-43546b3b59cd", "name": "resize_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "just_resize" } }, @@ -152,20 +205,17 @@ "control": { "id": "b034aa0f-4d0d-46e4-b5e3-e25a9588d087", "name": "control", - "type": "ControlField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 508, + "height": 511, "position": { "x": 4477.604342844504, "y": -49.39005411272677 @@ -177,44 +227,56 @@ "data": { "id": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "7c2c4771-2161-4d77-aced-ff8c4b3f1c15", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "06d59e91-9cca-411d-bf05-86b099b3e8f7", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "858bc33c-134c-4bf6-8855-f943e1d26f14", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 256, "position": { - "x": 4444.706437017514, - "y": -924.0715320874991 + "x": 4075, + "y": -825 } }, { @@ -223,13 +285,24 @@ "data": { "id": "54486974-835b-4d81-8f82-05f9f32ce9e9", "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "model": { "id": "f4a915a5-593e-4b6d-9198-c78eb5cefaed", "name": "model", - "type": "MainModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, "value": { "model_name": "stable-diffusion-v1-5", "base_model": "sd-1", @@ -241,35 +314,40 @@ "unet": { "id": "ee24fb16-da38-4c66-9fbc-e8f296ed40d2", "name": "unet", - "type": "UNetField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "clip": { "id": "f3fb0524-8803-41c1-86db-a61a13ee6a33", "name": "clip", - "type": "ClipField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "vae": { "id": "5c4878a8-b40f-44ab-b146-1c1f42c860b3", "name": "vae", - "type": "VaeField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 226, + "height": 227, "position": { - "x": 3837.096149678291, - "y": -1050.015351148365 + "x": 3600, + "y": -1000 } }, { @@ -278,44 +356,56 @@ "data": { "id": "7ce68934-3419-42d4-ac70-82cfc9397306", "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "7c2c4771-2161-4d77-aced-ff8c4b3f1c15", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "06d59e91-9cca-411d-bf05-86b099b3e8f7", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "858bc33c-134c-4bf6-8855-f943e1d26f14", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 256, "position": { - "x": 4449.356038911986, - "y": -1201.659695420063 + "x": 4075, + "y": -1125 } }, { @@ -324,63 +414,98 @@ "data": { "id": "d204d184-f209-4fae-a0a1-d152800844e1", "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "4e0a3172-d3c2-4005-a84c-fa12a404f8a0", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "control_model": { "id": "8cb2d998-4086-430a-8b13-94cbc81e3ca3", "name": "control_model", - "type": "ControlNetModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, "value": { - "model_name": "sd-controlnet-canny", + "model_name": "canny", "base_model": "sd-1" } }, "control_weight": { "id": "5e32bd8a-9dc8-42d8-9bcc-c2b0460c0b0f", "name": "control_weight", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 1 }, "begin_step_percent": { "id": "c258a276-352a-416c-8358-152f11005c0c", "name": "begin_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "end_step_percent": { "id": "43001125-0d70-4f87-8e79-da6603ad6c33", "name": "end_step_percent", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "control_mode": { "id": "d2f14561-9443-4374-9270-e2f05007944e", "name": "control_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "balanced" }, "resize_mode": { "id": "727ee7d3-8bf6-4c7d-8b8a-43546b3b59cd", "name": "resize_mode", - "type": "enum", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, "value": "just_resize" } }, @@ -388,20 +513,17 @@ "control": { "id": "b034aa0f-4d0d-46e4-b5e3-e25a9588d087", "name": "control", - "type": "ControlField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 508, + "height": 511, "position": { "x": 4479.68542130465, "y": -618.4221638099414 @@ -413,48 +535,64 @@ "data": { "id": "c4b23e64-7986-40c4-9cad-46327b12e204", "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "image": { "id": "189c8adf-68cc-4774-a729-49da89f6fdf1", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "Canny Input Image" + "label": "Canny Input Image", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } } }, "outputs": { "image": { "id": "1a31cacd-9d19-4f32-b558-c5e4aa39ce73", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "12f298fd-1d11-4cca-9426-01240f7ec7cf", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "c47dabcb-44e8-40c9-992d-81dca59f598e", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 225, "position": { - "x": 3593.7474460420153, - "y": -538.1200472386865 + "x": 3625, + "y": -425 } }, { @@ -463,36 +601,43 @@ "data": { "id": "ca4d5059-8bfb-447f-b415-da0faba5a143", "type": "collect", + "label": "ControlNet Collection", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", "inputs": { "item": { "id": "b16ae602-8708-4b1b-8d4f-9e0808d429ab", "name": "item", - "type": "CollectionItem", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "CollectionItemField" + } } }, "outputs": { "collection": { "id": "d8987dd8-dec8-4d94-816a-3e356af29884", "name": "collection", - "type": "Collection", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "CollectionField" + } } - }, - "label": "ControlNet Collection", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 104, "position": { - "x": 4866.191497139488, - "y": -299.0538619537037 + "x": 4875, + "y": -575 } }, { @@ -501,35 +646,58 @@ "data": { "id": "018b1214-c2af-43a7-9910-fb687c6726d7", "type": "midas_depth_image_processor", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "77f91980-c696-4a18-a9ea-6e2fc329a747", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "image": { "id": "50710a20-2af5-424d-9d17-aa08167829c6", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "a_mult": { "id": "f3b26f9d-2498-415e-9c01-197a8d06c0a5", "name": "a_mult", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 2 }, "bg_th": { "id": "4b1eb3ae-9d4a-47d6-b0ed-da62501e007f", "name": "bg_th", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0.1 } }, @@ -537,35 +705,40 @@ "image": { "id": "b4ed637c-c4a0-4fdd-a24e-36d6412e4ccf", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "6bf9b609-d72c-4239-99bd-390a73cc3a9c", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "3e8aef09-cf44-4e3e-a490-d3c9e7b23119", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 339, + "height": 340, "position": { - "x": 4054.229311491893, - "y": -31.611411056365725 + "x": 4100, + "y": -75 } }, { @@ -574,35 +747,58 @@ "data": { "id": "c826ba5e-9676-4475-b260-07b85e88753c", "type": "canny_image_processor", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "08331ea6-99df-4e61-a919-204d9bfa8fb2", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "image": { "id": "33a37284-06ac-459c-ba93-1655e4f69b2d", "name": "image", - "type": "ImageField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "low_threshold": { "id": "21ec18a3-50c5-4ba1-9642-f921744d594f", "name": "low_threshold", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 100 }, "high_threshold": { "id": "ebeab271-a5ff-4c88-acfd-1d0271ab6ed4", "name": "high_threshold", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 200 } }, @@ -610,32 +806,37 @@ "image": { "id": "c0caadbf-883f-4cb4-a62d-626b9c81fc4e", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "df225843-8098-49c0-99d1-3b0b6600559f", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "e4abe0de-aa16-41f3-9cd7-968b49db5da3", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 339, + "height": 340, "position": { "x": 4095.757337055795, "y": -455.63440891935863 @@ -647,42 +848,69 @@ "data": { "id": "9db25398-c869-4a63-8815-c6559341ef12", "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "2f269793-72e5-4ff3-b76c-fab4f93e983f", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "latents": { "id": "4aaedd3b-cc77-420c-806e-c7fa74ec4cdf", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "vae": { "id": "432b066a-2462-4d18-83d9-64620b72df45", "name": "vae", - "type": "VaeField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } }, "tiled": { "id": "61f86e0f-7c46-40f8-b3f5-fe2f693595ca", "name": "tiled", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false }, "fp32": { "id": "39b6c89a-37ef-4a7e-9509-daeca49d5092", "name": "fp32", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false } }, @@ -690,35 +918,40 @@ "image": { "id": "6204e9b0-61dd-4250-b685-2092ba0e28e6", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "b4140649-8d5d-4d2d-bfa6-09e389ede5f9", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "f3a0c0c8-fc24-4646-8be1-ed8cdd140828", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": false, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 267, "position": { - "x": 5678.726701377887, - "y": -351.6792416734579 + "x": 5675, + "y": -825 } }, { @@ -727,259 +960,521 @@ "data": { "id": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", "inputs": { "positive_conditioning": { "id": "869cd309-c238-444b-a1a0-5021f99785ba", "name": "positive_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "negative_conditioning": { "id": "343447b4-1e37-4e9e-8ac7-4d04864066af", "name": "negative_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "noise": { "id": "b556571e-0cf9-4e03-8cfc-5caad937d957", "name": "noise", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "steps": { "id": "a3b3d2de-9308-423e-b00d-c209c3e6e808", "name": "steps", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 10 }, "cfg_scale": { "id": "b13c50a4-ec7e-4579-b0ef-2fe5df2605ea", "name": "cfg_scale", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 7.5 }, "denoising_start": { "id": "57d5d755-f58f-4347-b991-f0bca4a0ab29", "name": "denoising_start", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "denoising_end": { "id": "323e78a6-880a-4d73-a62c-70faff965aa6", "name": "denoising_end", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "scheduler": { "id": "c25fdc17-a089-43ac-953e-067c45d5c76b", "name": "scheduler", - "type": "Scheduler", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, "value": "euler" }, "unet": { "id": "6cde662b-e633-4569-b6b4-ec87c52c9c11", "name": "unet", - "type": "UNetField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "control": { "id": "276a4df9-bb26-4505-a4d3-a94e18c7b541", "name": "control", - "type": "ControlPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } }, "ip_adapter": { "id": "48d40c51-b5e2-4457-a428-eef0696695e8", "name": "ip_adapter", - "type": "IPAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } }, "t2i_adapter": { "id": "75dd8af2-e7d7-48b4-a574-edd9f6e686ad", "name": "t2i_adapter", - "type": "T2IAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "b90460cf-d0c9-4676-8909-2e8e22dc8ee5", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 }, "latents": { "id": "9223d67b-1dd7-4b34-a45f-ed0a725d9702", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "denoise_mask": { "id": "4ee99177-6923-4b7f-8fe0-d721dd7cb05b", "name": "denoise_mask", - "type": "DenoiseMaskField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } } }, "outputs": { "latents": { "id": "7fb4e326-a974-43e8-9ee7-2e3ab235819d", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "6bb8acd0-8973-4195-a095-e376385dc705", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "795dea52-1c7d-4e64-99f7-2f60ec6e3ab9", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.4.0" + } }, "width": 320, - "height": 646, + "height": 705, "position": { "x": 5274.672987098195, "y": -823.0752416664332 } + }, + { + "id": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "invocation", + "data": { + "id": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "inputs": { + "seed": { + "id": "96d7667a-9c56-4fb4-99db-868e2f08e874", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "1ce644ea-c9bf-48c5-9822-bdec0d2895c5", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "26d68b53-8a04-4db7-b0f8-57c9bddc0e49", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "cf8fb92e-2a8e-4cd5-baf5-4011e0ddfa22", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "d9cb9305-6b3a-49a9-b27c-00fb3a58b85c", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "4ff28d00-ceee-42b8-90e7-f5e5a518376d", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "a6314b9c-346a-4aa6-9260-626ed46c060a", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4875, + "y": -675 + } + }, + { + "id": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "type": "invocation", + "data": { + "id": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "inputs": { + "low": { + "id": "a190ad12-a6bd-499b-a82a-100e09fe9aa4", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "a085063f-b9ba-46f2-a21b-c46c321949aa", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "a15aff56-4874-47fe-be32-d66745ed2ab5", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 4875, + "y": -750 + } } ], "edges": [ { - "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", - "sourceHandle": "clip", - "target": "7ce68934-3419-42d4-ac70-82cfc9397306", - "targetHandle": "clip", + "id": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce-2e77a0a1-db6a-47a2-a8bf-1e003be6423b-collapsed", + "source": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "target": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "collapsed" + }, + { "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9clip-7ce68934-3419-42d4-ac70-82cfc9397306clip", - "type": "default" - }, - { "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "target": "7ce68934-3419-42d4-ac70-82cfc9397306", + "type": "default", "sourceHandle": "clip", - "target": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", - "targetHandle": "clip", + "targetHandle": "clip" + }, + { "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9clip-273e3f96-49ea-4dc5-9d5b-9660390f14e1clip", - "type": "default" + "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "target": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" }, { - "source": "a33199c2-8340-401e-b8a2-42ffa875fc1c", - "sourceHandle": "control", - "target": "ca4d5059-8bfb-447f-b415-da0faba5a143", - "targetHandle": "item", "id": "reactflow__edge-a33199c2-8340-401e-b8a2-42ffa875fc1ccontrol-ca4d5059-8bfb-447f-b415-da0faba5a143item", - "type": "default" - }, - { - "source": "d204d184-f209-4fae-a0a1-d152800844e1", - "sourceHandle": "control", + "source": "a33199c2-8340-401e-b8a2-42ffa875fc1c", "target": "ca4d5059-8bfb-447f-b415-da0faba5a143", - "targetHandle": "item", + "type": "default", + "sourceHandle": "control", + "targetHandle": "item" + }, + { "id": "reactflow__edge-d204d184-f209-4fae-a0a1-d152800844e1control-ca4d5059-8bfb-447f-b415-da0faba5a143item", - "type": "default" + "source": "d204d184-f209-4fae-a0a1-d152800844e1", + "target": "ca4d5059-8bfb-447f-b415-da0faba5a143", + "type": "default", + "sourceHandle": "control", + "targetHandle": "item" }, { - "source": "8e860e51-5045-456e-bf04-9a62a2a5c49e", - "sourceHandle": "image", - "target": "018b1214-c2af-43a7-9910-fb687c6726d7", - "targetHandle": "image", "id": "reactflow__edge-8e860e51-5045-456e-bf04-9a62a2a5c49eimage-018b1214-c2af-43a7-9910-fb687c6726d7image", - "type": "default" + "source": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "target": "018b1214-c2af-43a7-9910-fb687c6726d7", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" }, { - "source": "018b1214-c2af-43a7-9910-fb687c6726d7", - "sourceHandle": "image", - "target": "a33199c2-8340-401e-b8a2-42ffa875fc1c", - "targetHandle": "image", "id": "reactflow__edge-018b1214-c2af-43a7-9910-fb687c6726d7image-a33199c2-8340-401e-b8a2-42ffa875fc1cimage", - "type": "default" + "source": "018b1214-c2af-43a7-9910-fb687c6726d7", + "target": "a33199c2-8340-401e-b8a2-42ffa875fc1c", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" }, { - "source": "c4b23e64-7986-40c4-9cad-46327b12e204", - "sourceHandle": "image", - "target": "c826ba5e-9676-4475-b260-07b85e88753c", - "targetHandle": "image", "id": "reactflow__edge-c4b23e64-7986-40c4-9cad-46327b12e204image-c826ba5e-9676-4475-b260-07b85e88753cimage", - "type": "default" - }, - { - "source": "c826ba5e-9676-4475-b260-07b85e88753c", + "source": "c4b23e64-7986-40c4-9cad-46327b12e204", + "target": "c826ba5e-9676-4475-b260-07b85e88753c", + "type": "default", "sourceHandle": "image", - "target": "d204d184-f209-4fae-a0a1-d152800844e1", - "targetHandle": "image", + "targetHandle": "image" + }, + { "id": "reactflow__edge-c826ba5e-9676-4475-b260-07b85e88753cimage-d204d184-f209-4fae-a0a1-d152800844e1image", - "type": "default" + "source": "c826ba5e-9676-4475-b260-07b85e88753c", + "target": "d204d184-f209-4fae-a0a1-d152800844e1", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" }, { - "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", - "sourceHandle": "vae", - "target": "9db25398-c869-4a63-8815-c6559341ef12", - "targetHandle": "vae", "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9vae-9db25398-c869-4a63-8815-c6559341ef12vae", - "type": "default" - }, - { - "source": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", - "sourceHandle": "latents", - "target": "9db25398-c869-4a63-8815-c6559341ef12", - "targetHandle": "latents", - "id": "reactflow__edge-ac481b7f-08bf-4a9d-9e0c-3a82ea5243celatents-9db25398-c869-4a63-8815-c6559341ef12latents", - "type": "default" - }, - { - "source": "ca4d5059-8bfb-447f-b415-da0faba5a143", - "sourceHandle": "collection", - "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", - "targetHandle": "control", - "id": "reactflow__edge-ca4d5059-8bfb-447f-b415-da0faba5a143collection-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cecontrol", - "type": "default" - }, - { "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", - "sourceHandle": "unet", + "target": "9db25398-c869-4a63-8815-c6559341ef12", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-ac481b7f-08bf-4a9d-9e0c-3a82ea5243celatents-9db25398-c869-4a63-8815-c6559341ef12latents", + "source": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "target": "9db25398-c869-4a63-8815-c6559341ef12", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-ca4d5059-8bfb-447f-b415-da0faba5a143collection-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cecontrol", + "source": "ca4d5059-8bfb-447f-b415-da0faba5a143", "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", - "targetHandle": "unet", + "type": "default", + "sourceHandle": "collection", + "targetHandle": "control" + }, + { "id": "reactflow__edge-54486974-835b-4d81-8f82-05f9f32ce9e9unet-ac481b7f-08bf-4a9d-9e0c-3a82ea5243ceunet", - "type": "default" + "source": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" }, { - "source": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", - "sourceHandle": "conditioning", - "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", - "targetHandle": "negative_conditioning", "id": "reactflow__edge-273e3f96-49ea-4dc5-9d5b-9660390f14e1conditioning-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cenegative_conditioning", - "type": "default" + "source": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" }, { - "source": "7ce68934-3419-42d4-ac70-82cfc9397306", - "sourceHandle": "conditioning", - "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", - "targetHandle": "positive_conditioning", "id": "reactflow__edge-7ce68934-3419-42d4-ac70-82cfc9397306conditioning-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cepositive_conditioning", - "type": "default" + "source": "7ce68934-3419-42d4-ac70-82cfc9397306", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-2e77a0a1-db6a-47a2-a8bf-1e003be6423bnoise-ac481b7f-08bf-4a9d-9e0c-3a82ea5243cenoise", + "source": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "target": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-8b260b4d-3fd6-44d4-b1be-9f0e43c628cevalue-2e77a0a1-db6a-47a2-a8bf-1e003be6423bseed", + "source": "8b260b4d-3fd6-44d4-b1be-9f0e43c628ce", + "target": "2e77a0a1-db6a-47a2-a8bf-1e003be6423b", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" } ] } \ No newline at end of file diff --git a/docs/workflows/Prompt_from_File.json b/docs/workflows/Prompt_from_File.json index 0a273d3b50..08e76fd793 100644 --- a/docs/workflows/Prompt_from_File.json +++ b/docs/workflows/Prompt_from_File.json @@ -1,9 +1,9 @@ { "name": "Prompt from File", "author": "InvokeAI", - "description": "Sample workflow using prompt from file capabilities of InvokeAI ", + "description": "Sample workflow using Prompt from File node", "version": "0.1.0", - "contact": "millun@invoke.ai", + "contact": "invoke@invoke.ai", "tags": "text2image, prompt from file, default", "notes": "", "exposedFields": [ @@ -17,8 +17,10 @@ } ], "meta": { - "version": "1.0.0" + "category": "default", + "version": "2.0.0" }, + "id": "d1609af5-eb0a-4f73-b573-c9af96a8d6bf", "nodes": [ { "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", @@ -26,44 +28,56 @@ "data": { "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", "type": "compel", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "dcdf3f6d-9b96-4bcd-9b8d-f992fefe4f62", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "3f1981c9-d8a9-42eb-a739-4f120eb80745", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "46205e6c-c5e2-44cb-9c82-1cd20b95674a", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 32, "position": { - "x": 1177.3417789657444, - "y": -102.0924766641035 + "x": 925, + "y": -200 } }, { @@ -72,45 +86,72 @@ "data": { "id": "1b7e0df8-8589-4915-a4ea-c0088f15d642", "type": "prompt_from_file", + "label": "Prompts from File", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", "inputs": { "file_path": { "id": "37e37684-4f30-4ec8-beae-b333e550f904", "name": "file_path", - "type": "string", "fieldKind": "input", "label": "Prompts File Path", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "pre_prompt": { "id": "7de02feb-819a-4992-bad3-72a30920ddea", "name": "pre_prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "post_prompt": { "id": "95f191d8-a282-428e-bd65-de8cb9b7513a", "name": "post_prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "start_line": { "id": "efee9a48-05ab-4829-8429-becfa64a0782", "name": "start_line", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1 }, "max_prompts": { "id": "abebb428-3d3d-49fd-a482-4e96a16fff08", "name": "max_prompts", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1 } }, @@ -118,23 +159,20 @@ "collection": { "id": "77d5d7f1-9877-4ab1-9a8c-33e9ffa9abf3", "name": "collection", - "type": "StringCollection", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "StringField" + } } - }, - "label": "Prompts from File", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 589, + "height": 580, "position": { - "x": 394.181884547075, - "y": -423.5345157864633 + "x": 475, + "y": -400 } }, { @@ -143,37 +181,63 @@ "data": { "id": "1b89067c-3f6b-42c8-991f-e3055789b251", "type": "iterate", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", "inputs": { "collection": { "id": "4c564bf8-5ed6-441e-ad2c-dda265d5785f", "name": "collection", - "type": "Collection", "fieldKind": "input", "label": "", - "value": [] + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "CollectionField" + } } }, "outputs": { "item": { "id": "36340f9a-e7a5-4afa-b4b5-313f4e292380", "name": "item", - "type": "CollectionItem", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "CollectionItemField" + } + }, + "index": { + "id": "1beca95a-2159-460f-97ff-c8bab7d89336", + "name": "index", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "total": { + "id": "ead597b8-108e-4eda-88a8-5c29fa2f8df9", + "name": "total", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 104, + "height": 32, "position": { - "x": 792.8735298060233, - "y": -432.6964953027252 + "x": 925, + "y": -400 } }, { @@ -182,13 +246,24 @@ "data": { "id": "d6353b7f-b447-4e17-8f2e-80a88c91d426", "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "model": { "id": "3f264259-3418-47d5-b90d-b6600e36ae46", "name": "model", - "type": "MainModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, "value": { "model_name": "stable-diffusion-v1-5", "base_model": "sd-1", @@ -200,35 +275,40 @@ "unet": { "id": "8e182ea2-9d0a-4c02-9407-27819288d4b5", "name": "unet", - "type": "UNetField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "clip": { "id": "d67d9d30-058c-46d5-bded-3d09d6d1aa39", "name": "clip", - "type": "ClipField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "vae": { "id": "89641601-0429-4448-98d5-190822d920d8", "name": "vae", - "type": "VaeField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 226, + "height": 227, "position": { - "x": -47.66201354137797, - "y": -299.218193067033 + "x": 0, + "y": -375 } }, { @@ -237,44 +317,56 @@ "data": { "id": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", "type": "compel", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "dcdf3f6d-9b96-4bcd-9b8d-f992fefe4f62", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "3f1981c9-d8a9-42eb-a739-4f120eb80745", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "46205e6c-c5e2-44cb-9c82-1cd20b95674a", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 32, "position": { - "x": 1175.0187896425462, - "y": -420.64289413577114 + "x": 925, + "y": -275 } }, { @@ -283,37 +375,60 @@ "data": { "id": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", "inputs": { "seed": { "id": "b722d84a-eeee-484f-bef2-0250c027cb67", "name": "seed", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "width": { "id": "d5f8ce11-0502-4bfc-9a30-5757dddf1f94", "name": "width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "height": { "id": "f187d5ff-38a5-4c3f-b780-fc5801ef34af", "name": "height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "use_cpu": { "id": "12f112b8-8b76-4816-b79e-662edc9f9aa5", "name": "use_cpu", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": true } }, @@ -321,35 +436,40 @@ "noise": { "id": "08576ad1-96d9-42d2-96ef-6f5c1961933f", "name": "noise", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "f3e1f94a-258d-41ff-9789-bd999bd9f40d", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "6cefc357-4339-415e-a951-49b9c2be32f4", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 389, + "height": 32, "position": { - "x": 809.1964864135837, - "y": 183.2735123359796 + "x": 925, + "y": 25 } }, { @@ -358,21 +478,36 @@ "data": { "id": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5", "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "low": { "id": "b9fc6cf1-469c-4037-9bf0-04836965826f", "name": "low", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "high": { "id": "06eac725-0f60-4ba2-b8cd-7ad9f757488c", "name": "high", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 2147483647 } }, @@ -380,23 +515,20 @@ "value": { "id": "df08c84e-7346-4e92-9042-9e5cb773aaff", "name": "value", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": false, - "version": "1.0.0" + } }, "width": 320, - "height": 218, + "height": 32, "position": { - "x": 354.19913145404166, - "y": 301.86324846905165 + "x": 925, + "y": -50 } }, { @@ -405,42 +537,69 @@ "data": { "id": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "022e4b33-562b-438d-b7df-41c3fd931f40", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "latents": { "id": "67cb6c77-a394-4a66-a6a9-a0a7dcca69ec", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "vae": { "id": "7b3fd9ad-a4ef-4e04-89fa-3832a9902dbd", "name": "vae", - "type": "VaeField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } }, "tiled": { "id": "5ac5680d-3add-4115-8ec0-9ef5bb87493b", "name": "tiled", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false }, "fp32": { "id": "db8297f5-55f8-452f-98cf-6572c2582152", "name": "fp32", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false } }, @@ -448,29 +607,34 @@ "image": { "id": "d8778d0c-592a-4960-9280-4e77e00a7f33", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "c8b0a75a-f5de-4ff2-9227-f25bb2b97bec", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "83c05fbf-76b9-49ab-93c4-fa4b10e793e4", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 267, @@ -485,141 +649,221 @@ "data": { "id": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", "inputs": { "positive_conditioning": { "id": "751fb35b-3f23-45ce-af1c-053e74251337", "name": "positive_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "negative_conditioning": { "id": "b9dc06b6-7481-4db1-a8c2-39d22a5eacff", "name": "negative_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "noise": { "id": "6e15e439-3390-48a4-8031-01e0e19f0e1d", "name": "noise", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "steps": { "id": "bfdfb3df-760b-4d51-b17b-0abb38b976c2", "name": "steps", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 10 }, "cfg_scale": { "id": "47770858-322e-41af-8494-d8b63ed735f3", "name": "cfg_scale", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 7.5 }, "denoising_start": { "id": "2ba78720-ee02-4130-a348-7bc3531f790b", "name": "denoising_start", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "denoising_end": { "id": "a874dffb-d433-4d1a-9f59-af4367bb05e4", "name": "denoising_end", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "scheduler": { "id": "36e021ad-b762-4fe4-ad4d-17f0291c40b2", "name": "scheduler", - "type": "Scheduler", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, "value": "euler" }, "unet": { "id": "98d3282d-f9f6-4b5e-b9e8-58658f1cac78", "name": "unet", - "type": "UNetField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "control": { "id": "f2ea3216-43d5-42b4-887f-36e8f7166d53", "name": "control", - "type": "ControlPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } }, "ip_adapter": { "id": "d0780610-a298-47c8-a54e-70e769e0dfe2", "name": "ip_adapter", - "type": "IPAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } }, "t2i_adapter": { "id": "fdb40970-185e-4ea8-8bb5-88f06f91f46a", "name": "t2i_adapter", - "type": "T2IAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "3af2d8c5-de83-425c-a100-49cb0f1f4385", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 }, "latents": { "id": "e05b538a-1b5a-4aa5-84b1-fd2361289a81", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "denoise_mask": { "id": "463a419e-df30-4382-8ffb-b25b25abe425", "name": "denoise_mask", - "type": "DenoiseMaskField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } } }, "outputs": { "latents": { "id": "559ee688-66cf-4139-8b82-3d3aa69995ce", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "0b4285c2-e8b9-48e5-98f6-0a49d3f98fd2", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "8b0881b9-45e5-47d5-b526-24b6661de0ee", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.4.0" + } }, "width": 320, - "height": 646, + "height": 705, "position": { "x": 1570.9941088179146, "y": -407.6505491604564 @@ -628,92 +872,104 @@ ], "edges": [ { - "source": "1b7e0df8-8589-4915-a4ea-c0088f15d642", - "sourceHandle": "collection", - "target": "1b89067c-3f6b-42c8-991f-e3055789b251", - "targetHandle": "collection", - "id": "reactflow__edge-1b7e0df8-8589-4915-a4ea-c0088f15d642collection-1b89067c-3f6b-42c8-991f-e3055789b251collection", - "type": "default" - }, - { - "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", - "sourceHandle": "clip", - "target": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", - "targetHandle": "clip", - "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426clip-fc9d0e35-a6de-4a19-84e1-c72497c823f6clip", - "type": "default" - }, - { + "id": "1b89067c-3f6b-42c8-991f-e3055789b251-fc9d0e35-a6de-4a19-84e1-c72497c823f6-collapsed", "source": "1b89067c-3f6b-42c8-991f-e3055789b251", - "sourceHandle": "item", "target": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", - "targetHandle": "prompt", - "id": "reactflow__edge-1b89067c-3f6b-42c8-991f-e3055789b251item-fc9d0e35-a6de-4a19-84e1-c72497c823f6prompt", - "type": "default" - }, - { - "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", - "sourceHandle": "clip", - "target": "c2eaf1ba-5708-4679-9e15-945b8b432692", - "targetHandle": "clip", - "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426clip-c2eaf1ba-5708-4679-9e15-945b8b432692clip", - "type": "default" + "type": "collapsed" }, { + "id": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5-0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77-collapsed", "source": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5", - "sourceHandle": "value", "target": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", - "targetHandle": "seed", + "type": "collapsed" + }, + { + "id": "reactflow__edge-1b7e0df8-8589-4915-a4ea-c0088f15d642collection-1b89067c-3f6b-42c8-991f-e3055789b251collection", + "source": "1b7e0df8-8589-4915-a4ea-c0088f15d642", + "target": "1b89067c-3f6b-42c8-991f-e3055789b251", + "type": "default", + "sourceHandle": "collection", + "targetHandle": "collection" + }, + { + "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426clip-fc9d0e35-a6de-4a19-84e1-c72497c823f6clip", + "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "target": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-1b89067c-3f6b-42c8-991f-e3055789b251item-fc9d0e35-a6de-4a19-84e1-c72497c823f6prompt", + "source": "1b89067c-3f6b-42c8-991f-e3055789b251", + "target": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "default", + "sourceHandle": "item", + "targetHandle": "prompt" + }, + { + "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426clip-c2eaf1ba-5708-4679-9e15-945b8b432692clip", + "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "target": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { "id": "reactflow__edge-dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5value-0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77seed", - "type": "default" + "source": "dfc20e07-7aef-4fc0-a3a1-7bf68ec6a4e5", + "target": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" }, { - "source": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", - "sourceHandle": "conditioning", - "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", - "targetHandle": "positive_conditioning", "id": "reactflow__edge-fc9d0e35-a6de-4a19-84e1-c72497c823f6conditioning-2fb1577f-0a56-4f12-8711-8afcaaaf1d5epositive_conditioning", - "type": "default" - }, - { - "source": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "source": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "default", "sourceHandle": "conditioning", - "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", - "targetHandle": "negative_conditioning", + "targetHandle": "positive_conditioning" + }, + { "id": "reactflow__edge-c2eaf1ba-5708-4679-9e15-945b8b432692conditioning-2fb1577f-0a56-4f12-8711-8afcaaaf1d5enegative_conditioning", - "type": "default" + "source": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" }, { - "source": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", - "sourceHandle": "noise", - "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", - "targetHandle": "noise", "id": "reactflow__edge-0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77noise-2fb1577f-0a56-4f12-8711-8afcaaaf1d5enoise", - "type": "default" - }, - { - "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", - "sourceHandle": "unet", + "source": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", - "targetHandle": "unet", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426unet-2fb1577f-0a56-4f12-8711-8afcaaaf1d5eunet", - "type": "default" - }, - { - "source": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", - "sourceHandle": "latents", - "target": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", - "targetHandle": "latents", - "id": "reactflow__edge-2fb1577f-0a56-4f12-8711-8afcaaaf1d5elatents-491ec988-3c77-4c37-af8a-39a0c4e7a2a1latents", - "type": "default" - }, - { "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", - "sourceHandle": "vae", + "target": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-2fb1577f-0a56-4f12-8711-8afcaaaf1d5elatents-491ec988-3c77-4c37-af8a-39a0c4e7a2a1latents", + "source": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", "target": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", - "targetHandle": "vae", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { "id": "reactflow__edge-d6353b7f-b447-4e17-8f2e-80a88c91d426vae-491ec988-3c77-4c37-af8a-39a0c4e7a2a1vae", - "type": "default" + "source": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "target": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" } ] } \ No newline at end of file diff --git a/docs/workflows/SDXL_Text_to_Image.json b/docs/workflows/SDXL_Text_to_Image.json index af11731703..ef7810c153 100644 --- a/docs/workflows/SDXL_Text_to_Image.json +++ b/docs/workflows/SDXL_Text_to_Image.json @@ -7,138 +7,283 @@ "tags": "text2image, SDXL, default", "notes": "", "exposedFields": [ + { + "nodeId": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "fieldName": "value" + }, + { + "nodeId": "719dabe8-8297-4749-aea1-37be301cd425", + "fieldName": "value" + }, { "nodeId": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", "fieldName": "model" }, { - "nodeId": "faf965a4-7530-427b-b1f3-4ba6505c2a08", - "fieldName": "prompt" - }, - { - "nodeId": "faf965a4-7530-427b-b1f3-4ba6505c2a08", - "fieldName": "style" - }, - { - "nodeId": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", - "fieldName": "prompt" - }, - { - "nodeId": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", - "fieldName": "style" + "nodeId": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "fieldName": "vae_model" } ], "meta": { - "version": "1.0.0" + "category": "default", + "version": "2.0.0" }, "nodes": [ + { + "id": "3774ec24-a69e-4254-864c-097d07a6256f", + "type": "invocation", + "data": { + "id": "3774ec24-a69e-4254-864c-097d07a6256f", + "type": "string_join", + "label": "Positive Style Concat", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "string_left": { + "id": "8d84be5c-4a96-46ad-a92c-eaf6fcae4a69", + "name": "string_left", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "string_right": { + "id": "c8e2a881-f675-4c6b-865b-a0892473b750", + "name": "string_right", + "fieldKind": "input", + "label": "Positive Style Concat", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + } + }, + "outputs": { + "value": { + "id": "196fad08-73ea-4fe5-8cc3-b55fd3cf40e5", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 750, + "y": -225 + } + }, + { + "id": "719dabe8-8297-4749-aea1-37be301cd425", + "type": "invocation", + "data": { + "id": "719dabe8-8297-4749-aea1-37be301cd425", + "type": "string", + "label": "Negative Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "744a5f7c-6e3a-4fbc-ac66-ba0cf8559eeb", + "name": "value", + "fieldKind": "input", + "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "photograph" + } + }, + "outputs": { + "value": { + "id": "3e0ddf7a-a5de-4dad-b726-5d0cb4e0baa6", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 258, + "position": { + "x": 750, + "y": -125 + } + }, { "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", "type": "invocation", "data": { "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", "type": "sdxl_compel_prompt", + "label": "SDXL Negative Compel Prompt", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "5a6889e6-95cb-462f-8f4a-6b93ae7afaec", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "style": { "id": "f240d0e6-3a1c-4320-af23-20ebb707c276", "name": "style", - "type": "string", "fieldKind": "input", "label": "Negative Style", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "original_width": { "id": "05af07b0-99a0-4a68-8ad2-697bbdb7fc7e", "name": "original_width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "original_height": { "id": "2c771996-a998-43b7-9dd3-3792664d4e5b", "name": "original_height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "crop_top": { "id": "66519dca-a151-4e3e-ae1f-88f1f9877bde", "name": "crop_top", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "crop_left": { "id": "349cf2e9-f3d0-4e16-9ae2-7097d25b6a51", "name": "crop_left", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "target_width": { "id": "44499347-7bd6-4a73-99d6-5a982786db05", "name": "target_width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "target_height": { "id": "fda359b0-ab80-4f3c-805b-c9f61319d7d2", "name": "target_height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "clip": { "id": "b447adaf-a649-4a76-a827-046a9fc8d89b", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "clip2": { "id": "86ee4e32-08f9-4baa-9163-31d93f5c0187", "name": "clip2", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "7c10118e-7b4e-4911-b98e-d3ba6347dfd0", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "SDXL Negative Compel Prompt", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 793, + "height": 32, "position": { - "x": 1275, - "y": -350 + "x": 750, + "y": 200 } }, { @@ -147,37 +292,60 @@ "data": { "id": "55705012-79b9-4aac-9f26-c0b10309785b", "type": "noise", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", "inputs": { "seed": { "id": "6431737c-918a-425d-a3b4-5d57e2f35d4d", "name": "seed", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "width": { "id": "38fc5b66-fe6e-47c8-bba9-daf58e454ed7", "name": "width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "height": { "id": "16298330-e2bf-4872-a514-d6923df53cbb", "name": "height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "use_cpu": { "id": "c7c436d3-7a7a-4e76-91e4-c6deb271623c", "name": "use_cpu", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": true } }, @@ -185,35 +353,40 @@ "noise": { "id": "50f650dc-0184-4e23-a927-0497a96fe954", "name": "noise", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "bb8a452b-133d-42d1-ae4a-3843d7e4109a", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "35cfaa12-3b8b-4b7a-a884-327ff3abddd9", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": false, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 32, + "height": 388, "position": { - "x": 1650, - "y": -300 + "x": 375, + "y": 0 } }, { @@ -222,21 +395,36 @@ "data": { "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2", "type": "rand_int", + "label": "Random Seed", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "low": { "id": "3ec65a37-60ba-4b6c-a0b2-553dd7a84b84", "name": "low", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "high": { "id": "085f853a-1a5f-494d-8bec-e4ba29a3f2d1", "name": "high", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 2147483647 } }, @@ -244,23 +432,20 @@ "value": { "id": "812ade4d-7699-4261-b9fc-a6c9d2ab55ee", "name": "value", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "Random Seed", - "isOpen": false, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": false, - "version": "1.0.0" + } }, "width": 320, "height": 32, "position": { - "x": 1650, - "y": -350 + "x": 375, + "y": -50 } }, { @@ -269,59 +454,75 @@ "data": { "id": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", "type": "sdxl_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "model": { "id": "39f9e799-bc95-4318-a200-30eed9e60c42", "name": "model", - "type": "SDXLMainModelField", "fieldKind": "input", "label": "", - "value": { - "model_name": "stable-diffusion-xl-base-1-0", - "base_model": "sdxl", - "model_type": "main" - } + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SDXLMainModelField" + }, + "value": null } }, "outputs": { "unet": { "id": "2626a45e-59aa-4609-b131-2d45c5eaed69", "name": "unet", - "type": "UNetField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "clip": { "id": "7c9c42fa-93d5-4639-ab8b-c4d9b0559baf", "name": "clip", - "type": "ClipField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "clip2": { "id": "0dafddcf-a472-49c1-a47c-7b8fab4c8bc9", "name": "clip2", - "type": "ClipField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "vae": { "id": "ee6a6997-1b3c-4ff3-99ce-1e7bfba2750c", "name": "vae", - "type": "VaeField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 258, + "height": 257, "position": { - "x": 475, - "y": 25 + "x": 375, + "y": -500 } }, { @@ -330,107 +531,151 @@ "data": { "id": "faf965a4-7530-427b-b1f3-4ba6505c2a08", "type": "sdxl_compel_prompt", + "label": "SDXL Positive Compel Prompt", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "5a6889e6-95cb-462f-8f4a-6b93ae7afaec", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "style": { "id": "f240d0e6-3a1c-4320-af23-20ebb707c276", "name": "style", - "type": "string", "fieldKind": "input", "label": "Positive Style", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "original_width": { "id": "05af07b0-99a0-4a68-8ad2-697bbdb7fc7e", "name": "original_width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "original_height": { "id": "2c771996-a998-43b7-9dd3-3792664d4e5b", "name": "original_height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "crop_top": { "id": "66519dca-a151-4e3e-ae1f-88f1f9877bde", "name": "crop_top", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "crop_left": { "id": "349cf2e9-f3d0-4e16-9ae2-7097d25b6a51", "name": "crop_left", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "target_width": { "id": "44499347-7bd6-4a73-99d6-5a982786db05", "name": "target_width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "target_height": { "id": "fda359b0-ab80-4f3c-805b-c9f61319d7d2", "name": "target_height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 1024 }, "clip": { "id": "b447adaf-a649-4a76-a827-046a9fc8d89b", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "clip2": { "id": "86ee4e32-08f9-4baa-9163-31d93f5c0187", "name": "clip2", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "7c10118e-7b4e-4911-b98e-d3ba6347dfd0", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "SDXL Positive Compel Prompt", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 793, + "height": 32, "position": { - "x": 900, - "y": -350 + "x": 750, + "y": -175 } }, { @@ -439,42 +684,69 @@ "data": { "id": "63e91020-83b2-4f35-b174-ad9692aabb48", "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": false, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "88971324-3fdb-442d-b8b7-7612478a8622", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "latents": { "id": "da0e40cb-c49f-4fa5-9856-338b91a65f6b", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "vae": { "id": "ae5164ce-1710-4ec5-a83a-6113a0d1b5c0", "name": "vae", - "type": "VaeField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } }, "tiled": { "id": "2ccfd535-1a7b-4ecf-84db-9430a64fb3d7", "name": "tiled", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false }, "fp32": { "id": "64f07d5a-54a2-429c-8c5b-0c2a3a8e5cd5", "name": "fp32", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false } }, @@ -482,35 +754,40 @@ "image": { "id": "9b281eaa-6504-407d-a5ca-1e5e8020a4bf", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "98e545f3-b53b-490d-b94d-bed9418ccc75", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "4a74bd43-d7f7-4c7f-bb3b-d09bb2992c46", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": false, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 267, + "height": 266, "position": { - "x": 2112.5626808057173, - "y": -174.24042139280238 + "x": 1475, + "y": -500 } }, { @@ -519,233 +796,525 @@ "data": { "id": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", "inputs": { "positive_conditioning": { "id": "29b73dfa-a06e-4b4a-a844-515b9eb93a81", "name": "positive_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "negative_conditioning": { "id": "a81e6f5b-f4de-4919-b483-b6e2f067465a", "name": "negative_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "noise": { "id": "4ba06bb7-eb45-4fb9-9984-31001b545587", "name": "noise", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "steps": { "id": "36ee8a45-ca69-44bc-9bc3-aa881e6045c0", "name": "steps", - "type": "integer", "fieldKind": "input", "label": "", - "value": 10 + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 32 }, "cfg_scale": { "id": "2a2024e0-a736-46ec-933c-c1c1ebe96943", "name": "cfg_scale", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", - "value": 7.5 + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 6 }, "denoising_start": { "id": "be219d5e-41b7-430a-8fb5-bc21a31ad219", "name": "denoising_start", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "denoising_end": { "id": "3adfb7ae-c9f7-4a40-b6e0-4c2050bd1a99", "name": "denoising_end", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "scheduler": { "id": "14423e0d-7215-4ee0-b065-f9e95eaa8d7d", "name": "scheduler", - "type": "Scheduler", "fieldKind": "input", "label": "", - "value": "euler" + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "dpmpp_2m_sde_k" }, "unet": { "id": "e73bbf98-6489-492b-b83c-faed215febac", "name": "unet", - "type": "UNetField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "control": { "id": "dab351b3-0c86-4ea5-9782-4e8edbfb0607", "name": "control", - "type": "ControlPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } }, "ip_adapter": { "id": "192daea0-a90a-43cc-a2ee-0114a8e90318", "name": "ip_adapter", - "type": "IPAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } }, "t2i_adapter": { "id": "ee386a55-d4c7-48c1-ac57-7bc4e3aada7a", "name": "t2i_adapter", - "type": "T2IAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "106bbe8d-e641-4034-9a39-d4e82c298da1", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 }, "latents": { "id": "3a922c6a-3d8c-4c9e-b3ec-2f4d81cda077", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "denoise_mask": { "id": "cd7ce032-835f-495f-8b45-d57272f33132", "name": "denoise_mask", - "type": "DenoiseMaskField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } } }, "outputs": { "latents": { "id": "6260b84f-8361-470a-98d8-5b22a45c2d8c", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "aede0ecf-25b6-46be-aa30-b77f79715deb", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "519abf62-d475-48ef-ab8f-66136bc0e499", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, + } + }, + "width": 320, + "height": 702, + "position": { + "x": 1125, + "y": -500 + } + }, + { + "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "type": "invocation", + "data": { + "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "type": "vae_loader", "label": "", "isOpen": true, "notes": "", - "embedWorkflow": false, "isIntermediate": true, "useCache": true, - "version": "1.4.0" + "version": "1.0.0", + "inputs": { + "vae_model": { + "id": "28a17000-b629-49c6-b945-77c591cf7440", + "name": "vae_model", + "fieldKind": "input", + "label": "VAE (use the FP16 model)", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VAEModelField" + }, + "value": null + } + }, + "outputs": { + "vae": { + "id": "a34892b6-ba6d-44eb-8a68-af1f40a84186", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + } + } }, "width": 320, - "height": 646, + "height": 161, "position": { - "x": 1642.955772577545, - "y": -230.2485847594651 + "x": 375, + "y": -225 + } + }, + { + "id": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "type": "invocation", + "data": { + "id": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "type": "string", + "label": "Positive Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "744a5f7c-6e3a-4fbc-ac66-ba0cf8559eeb", + "name": "value", + "fieldKind": "input", + "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "Super cute tiger cub, fierce, traditional chinese watercolor" + } + }, + "outputs": { + "value": { + "id": "3e0ddf7a-a5de-4dad-b726-5d0cb4e0baa6", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 258, + "position": { + "x": 750, + "y": -500 + } + }, + { + "id": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "type": "invocation", + "data": { + "id": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "type": "string_join", + "label": "Negative Style Concat", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "string_left": { + "id": "8d84be5c-4a96-46ad-a92c-eaf6fcae4a69", + "name": "string_left", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "string_right": { + "id": "c8e2a881-f675-4c6b-865b-a0892473b750", + "name": "string_right", + "fieldKind": "input", + "label": "Negative Style Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + } + }, + "outputs": { + "value": { + "id": "196fad08-73ea-4fe5-8cc3-b55fd3cf40e5", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": 750, + "y": 150 } } ], "edges": [ { - "source": "ea94bc37-d995-4a83-aa99-4af42479f2f2", - "target": "55705012-79b9-4aac-9f26-c0b10309785b", - "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2-55705012-79b9-4aac-9f26-c0b10309785b-collapsed", + "id": "3774ec24-a69e-4254-864c-097d07a6256f-faf965a4-7530-427b-b1f3-4ba6505c2a08-collapsed", + "source": "3774ec24-a69e-4254-864c-097d07a6256f", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "collapsed" + }, + { + "id": "ad8fa655-3a76-43d0-9c02-4d7644dea650-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204-collapsed", + "source": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", "type": "collapsed" }, { - "source": "ea94bc37-d995-4a83-aa99-4af42479f2f2", - "sourceHandle": "value", - "target": "55705012-79b9-4aac-9f26-c0b10309785b", - "targetHandle": "seed", "id": "reactflow__edge-ea94bc37-d995-4a83-aa99-4af42479f2f2value-55705012-79b9-4aac-9f26-c0b10309785bseed", - "type": "default" + "source": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "target": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" }, { - "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", - "sourceHandle": "clip", - "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", - "targetHandle": "clip", "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip-faf965a4-7530-427b-b1f3-4ba6505c2a08clip", - "type": "default" - }, - { "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", - "sourceHandle": "clip2", "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", - "targetHandle": "clip2", - "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip2-faf965a4-7530-427b-b1f3-4ba6505c2a08clip2", - "type": "default" - }, - { - "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "type": "default", "sourceHandle": "clip", - "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", - "targetHandle": "clip", - "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204clip", - "type": "default" + "targetHandle": "clip" }, { + "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip2-faf965a4-7530-427b-b1f3-4ba6505c2a08clip2", "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "default", "sourceHandle": "clip2", + "targetHandle": "clip2" + }, + { + "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204clip", + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", - "targetHandle": "clip2", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22clip2-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204clip2", - "type": "default" + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "default", + "sourceHandle": "clip2", + "targetHandle": "clip2" }, { - "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", - "sourceHandle": "vae", - "target": "63e91020-83b2-4f35-b174-ad9692aabb48", - "targetHandle": "vae", - "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22vae-63e91020-83b2-4f35-b174-ad9692aabb48vae", - "type": "default" - }, - { - "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", - "sourceHandle": "unet", - "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", - "targetHandle": "unet", "id": "reactflow__edge-30d3289c-773c-4152-a9d2-bd8a99c8fd22unet-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbunet", - "type": "default" + "source": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" }, { - "source": "faf965a4-7530-427b-b1f3-4ba6505c2a08", - "sourceHandle": "conditioning", - "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", - "targetHandle": "positive_conditioning", "id": "reactflow__edge-faf965a4-7530-427b-b1f3-4ba6505c2a08conditioning-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbpositive_conditioning", - "type": "default" - }, - { - "source": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "source": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "default", "sourceHandle": "conditioning", - "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", - "targetHandle": "negative_conditioning", - "id": "reactflow__edge-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204conditioning-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbnegative_conditioning", - "type": "default" + "targetHandle": "positive_conditioning" }, { - "source": "55705012-79b9-4aac-9f26-c0b10309785b", - "sourceHandle": "noise", + "id": "reactflow__edge-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204conditioning-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbnegative_conditioning", + "source": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", - "targetHandle": "noise", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { "id": "reactflow__edge-55705012-79b9-4aac-9f26-c0b10309785bnoise-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfbnoise", - "type": "default" + "source": "55705012-79b9-4aac-9f26-c0b10309785b", + "target": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-50a36525-3c0a-4cc5-977c-e4bfc3fd6dfblatents-63e91020-83b2-4f35-b174-ad9692aabb48latents", + "source": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", + "target": "63e91020-83b2-4f35-b174-ad9692aabb48", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-0093692f-9cf4-454d-a5b8-62f0e3eb3bb8vae-63e91020-83b2-4f35-b174-ad9692aabb48vae", + "source": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "target": "63e91020-83b2-4f35-b174-ad9692aabb48", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-ade2c0d3-0384-4157-b39b-29ce429cfa15value-faf965a4-7530-427b-b1f3-4ba6505c2a08prompt", + "source": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "default", + "sourceHandle": "value", + "targetHandle": "prompt" + }, + { + "id": "reactflow__edge-719dabe8-8297-4749-aea1-37be301cd425value-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204prompt", + "source": "719dabe8-8297-4749-aea1-37be301cd425", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "default", + "sourceHandle": "value", + "targetHandle": "prompt" + }, + { + "id": "reactflow__edge-719dabe8-8297-4749-aea1-37be301cd425value-ad8fa655-3a76-43d0-9c02-4d7644dea650string_left", + "source": "719dabe8-8297-4749-aea1-37be301cd425", + "target": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "type": "default", + "sourceHandle": "value", + "targetHandle": "string_left" + }, + { + "id": "reactflow__edge-ad8fa655-3a76-43d0-9c02-4d7644dea650value-3193ad09-a7c2-4bf4-a3a9-1c61cc33a204style", + "source": "ad8fa655-3a76-43d0-9c02-4d7644dea650", + "target": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "default", + "sourceHandle": "value", + "targetHandle": "style" + }, + { + "id": "reactflow__edge-ade2c0d3-0384-4157-b39b-29ce429cfa15value-3774ec24-a69e-4254-864c-097d07a6256fstring_left", + "source": "ade2c0d3-0384-4157-b39b-29ce429cfa15", + "target": "3774ec24-a69e-4254-864c-097d07a6256f", + "type": "default", + "sourceHandle": "value", + "targetHandle": "string_left" + }, + { + "id": "reactflow__edge-3774ec24-a69e-4254-864c-097d07a6256fvalue-faf965a4-7530-427b-b1f3-4ba6505c2a08style", + "source": "3774ec24-a69e-4254-864c-097d07a6256f", + "target": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "default", + "sourceHandle": "value", + "targetHandle": "style" } ] -} \ No newline at end of file +} diff --git a/docs/workflows/Text_to_Image.json b/docs/workflows/Text_to_Image.json index a49ce7bf93..1e42df6e07 100644 --- a/docs/workflows/Text_to_Image.json +++ b/docs/workflows/Text_to_Image.json @@ -1,8 +1,8 @@ { - "name": "Text to Image", + "name": "Text to Image - SD1.5", "author": "InvokeAI", "description": "Sample text to image workflow for Stable Diffusion 1.5/2", - "version": "1.0.1", + "version": "1.1.0", "contact": "invoke@invoke.ai", "tags": "text2image, SD1.5, SD2, default", "notes": "", @@ -18,10 +18,19 @@ { "nodeId": "93dc02a4-d05b-48ed-b99c-c9b616af3402", "fieldName": "prompt" + }, + { + "nodeId": "55705012-79b9-4aac-9f26-c0b10309785b", + "fieldName": "width" + }, + { + "nodeId": "55705012-79b9-4aac-9f26-c0b10309785b", + "fieldName": "height" } ], "meta": { - "version": "1.0.0" + "category": "default", + "version": "2.0.0" }, "nodes": [ { @@ -30,44 +39,56 @@ "data": { "id": "93dc02a4-d05b-48ed-b99c-c9b616af3402", "type": "compel", + "label": "Negative Compel Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "7739aff6-26cb-4016-8897-5a1fb2305e4e", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "Negative Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, "value": "" }, "clip": { "id": "48d23dce-a6ae-472a-9f8c-22a714ea5ce0", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "37cf3a9d-f6b7-4b64-8ff6-2558c5ecc447", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "Negative Compel Prompt", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 259, "position": { - "x": 995.7263915923627, - "y": 239.67783573351227 + "x": 1000, + "y": 350 } }, { @@ -76,37 +97,60 @@ "data": { "id": "55705012-79b9-4aac-9f26-c0b10309785b", "type": "noise", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "nodePack": "invokeai", "inputs": { "seed": { "id": "6431737c-918a-425d-a3b4-5d57e2f35d4d", "name": "seed", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "width": { "id": "38fc5b66-fe6e-47c8-bba9-daf58e454ed7", "name": "width", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "height": { "id": "16298330-e2bf-4872-a514-d6923df53cbb", "name": "height", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 512 }, "use_cpu": { "id": "c7c436d3-7a7a-4e76-91e4-c6deb271623c", "name": "use_cpu", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": true } }, @@ -114,35 +158,40 @@ "noise": { "id": "50f650dc-0184-4e23-a927-0497a96fe954", "name": "noise", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "bb8a452b-133d-42d1-ae4a-3843d7e4109a", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "35cfaa12-3b8b-4b7a-a884-327ff3abddd9", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 389, + "height": 388, "position": { - "x": 993.4442117555518, - "y": 605.6757415334787 + "x": 600, + "y": 325 } }, { @@ -151,13 +200,24 @@ "data": { "id": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "model": { "id": "993eabd2-40fd-44fe-bce7-5d0c7075ddab", "name": "model", - "type": "MainModelField", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, "value": { "model_name": "stable-diffusion-v1-5", "base_model": "sd-1", @@ -169,35 +229,40 @@ "unet": { "id": "5c18c9db-328d-46d0-8cb9-143391c410be", "name": "unet", - "type": "UNetField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "clip": { "id": "6effcac0-ec2f-4bf5-a49e-a2c29cf921f4", "name": "clip", - "type": "ClipField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } }, "vae": { "id": "57683ba3-f5f5-4f58-b9a2-4b83dacad4a1", "name": "vae", - "type": "VaeField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, "height": 226, "position": { - "x": 163.04436745878343, - "y": 254.63156870373479 + "x": 600, + "y": 25 } }, { @@ -206,44 +271,56 @@ "data": { "id": "7d8bf987-284f-413a-b2fd-d825445a5d6c", "type": "compel", + "label": "Positive Compel Prompt", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "prompt": { "id": "7739aff6-26cb-4016-8897-5a1fb2305e4e", "name": "prompt", - "type": "string", "fieldKind": "input", "label": "Positive Prompt", - "value": "" + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "Super cute tiger cub, national geographic award-winning photograph" }, "clip": { "id": "48d23dce-a6ae-472a-9f8c-22a714ea5ce0", "name": "clip", - "type": "ClipField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } } }, "outputs": { "conditioning": { "id": "37cf3a9d-f6b7-4b64-8ff6-2558c5ecc447", "name": "conditioning", - "type": "ConditioningField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } } - }, - "label": "Positive Compel Prompt", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 261, + "height": 259, "position": { - "x": 595.7263915923627, - "y": 239.67783573351227 + "x": 1000, + "y": 25 } }, { @@ -252,21 +329,36 @@ "data": { "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2", "type": "rand_int", + "label": "Random Seed", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "nodePack": "invokeai", "inputs": { "low": { "id": "3ec65a37-60ba-4b6c-a0b2-553dd7a84b84", "name": "low", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 0 }, "high": { "id": "085f853a-1a5f-494d-8bec-e4ba29a3f2d1", "name": "high", - "type": "integer", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, "value": 2147483647 } }, @@ -274,23 +366,20 @@ "value": { "id": "812ade4d-7699-4261-b9fc-a6c9d2ab55ee", "name": "value", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "Random Seed", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": false, - "version": "1.0.0" + } }, "width": 320, - "height": 218, + "height": 32, "position": { - "x": 541.094822888628, - "y": 694.5704476446829 + "x": 600, + "y": 275 } }, { @@ -299,144 +388,224 @@ "data": { "id": "eea2702a-19fb-45b5-9d75-56b4211ec03c", "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "nodePack": "invokeai", "inputs": { "positive_conditioning": { "id": "90b7f4f8-ada7-4028-8100-d2e54f192052", "name": "positive_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "negative_conditioning": { "id": "9393779e-796c-4f64-b740-902a1177bf53", "name": "negative_conditioning", - "type": "ConditioningField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } }, "noise": { "id": "8e17f1e5-4f98-40b1-b7f4-86aeeb4554c1", "name": "noise", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "steps": { "id": "9b63302d-6bd2-42c9-ac13-9b1afb51af88", "name": "steps", - "type": "integer", "fieldKind": "input", "label": "", - "value": 10 + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 50 }, "cfg_scale": { "id": "87dd04d3-870e-49e1-98bf-af003a810109", "name": "cfg_scale", - "type": "FloatPolymorphic", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, "value": 7.5 }, "denoising_start": { "id": "f369d80f-4931-4740-9bcd-9f0620719fab", "name": "denoising_start", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 0 }, "denoising_end": { "id": "747d10e5-6f02-445c-994c-0604d814de8c", "name": "denoising_end", - "type": "float", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, "value": 1 }, "scheduler": { "id": "1de84a4e-3a24-4ec8-862b-16ce49633b9b", "name": "scheduler", - "type": "Scheduler", "fieldKind": "input", "label": "", - "value": "euler" + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "unipc" }, "unet": { "id": "ffa6fef4-3ce2-4bdb-9296-9a834849489b", "name": "unet", - "type": "UNetField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } }, "control": { "id": "077b64cb-34be-4fcc-83f2-e399807a02bd", "name": "control", - "type": "ControlPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } }, "ip_adapter": { "id": "1d6948f7-3a65-4a65-a20c-768b287251aa", "name": "ip_adapter", - "type": "IPAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } }, "t2i_adapter": { "id": "75e67b09-952f-4083-aaf4-6b804d690412", "name": "t2i_adapter", - "type": "T2IAdapterPolymorphic", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "cfg_rescale_multiplier": { + "id": "9101f0a6-5fe0-4826-b7b3-47e5d506826c", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 }, "latents": { "id": "334d4ba3-5a99-4195-82c5-86fb3f4f7d43", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "denoise_mask": { "id": "0d3dbdbf-b014-4e95-8b18-ff2ff9cb0bfa", "name": "denoise_mask", - "type": "DenoiseMaskField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } } }, "outputs": { "latents": { "id": "70fa5bbc-0c38-41bb-861a-74d6d78d2f38", "name": "latents", - "type": "LatentsField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "width": { "id": "98ee0e6c-82aa-4e8f-8be5-dc5f00ee47f0", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "e8cb184a-5e1a-47c8-9695-4b8979564f5d", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": true, - "useCache": true, - "version": "1.4.0" + } }, "width": 320, - "height": 646, + "height": 703, "position": { - "x": 1476.5794704734735, - "y": 256.80174342731783 + "x": 1400, + "y": 25 } }, { @@ -445,153 +614,185 @@ "data": { "id": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": true, + "version": "1.2.0", + "nodePack": "invokeai", "inputs": { "metadata": { "id": "ab375f12-0042-4410-9182-29e30db82c85", "name": "metadata", - "type": "MetadataField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } }, "latents": { "id": "3a7e7efd-bff5-47d7-9d48-615127afee78", "name": "latents", - "type": "LatentsField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } }, "vae": { "id": "a1f5f7a1-0795-4d58-b036-7820c0b0ef2b", "name": "vae", - "type": "VaeField", "fieldKind": "input", - "label": "" + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } }, "tiled": { "id": "da52059a-0cee-4668-942f-519aa794d739", "name": "tiled", - "type": "boolean", "fieldKind": "input", "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, "value": false }, "fp32": { "id": "c4841df3-b24e-4140-be3b-ccd454c2522c", "name": "fp32", - "type": "boolean", "fieldKind": "input", "label": "", - "value": false + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true } }, "outputs": { "image": { "id": "72d667d0-cf85-459d-abf2-28bd8b823fe7", "name": "image", - "type": "ImageField", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } }, "width": { "id": "c8c907d8-1066-49d1-b9a6-83bdcd53addc", "name": "width", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } }, "height": { "id": "230f359c-b4ea-436c-b372-332d7dcdca85", "name": "height", - "type": "integer", - "fieldKind": "output" + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } } - }, - "label": "", - "isOpen": true, - "notes": "", - "embedWorkflow": false, - "isIntermediate": false, - "useCache": true, - "version": "1.0.0" + } }, "width": 320, - "height": 267, + "height": 266, "position": { - "x": 2037.9648469717395, - "y": 426.10844427600136 + "x": 1800, + "y": 25 } } ], "edges": [ { - "source": "ea94bc37-d995-4a83-aa99-4af42479f2f2", - "sourceHandle": "value", - "target": "55705012-79b9-4aac-9f26-c0b10309785b", - "targetHandle": "seed", "id": "reactflow__edge-ea94bc37-d995-4a83-aa99-4af42479f2f2value-55705012-79b9-4aac-9f26-c0b10309785bseed", - "type": "default" + "source": "ea94bc37-d995-4a83-aa99-4af42479f2f2", + "target": "55705012-79b9-4aac-9f26-c0b10309785b", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" }, { - "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", - "sourceHandle": "clip", - "target": "7d8bf987-284f-413a-b2fd-d825445a5d6c", - "targetHandle": "clip", "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8clip-7d8bf987-284f-413a-b2fd-d825445a5d6cclip", - "type": "default" - }, - { "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "target": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "type": "default", "sourceHandle": "clip", - "target": "93dc02a4-d05b-48ed-b99c-c9b616af3402", - "targetHandle": "clip", + "targetHandle": "clip" + }, + { "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8clip-93dc02a4-d05b-48ed-b99c-c9b616af3402clip", - "type": "default" + "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "target": "93dc02a4-d05b-48ed-b99c-c9b616af3402", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" }, { - "source": "55705012-79b9-4aac-9f26-c0b10309785b", - "sourceHandle": "noise", - "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", - "targetHandle": "noise", "id": "reactflow__edge-55705012-79b9-4aac-9f26-c0b10309785bnoise-eea2702a-19fb-45b5-9d75-56b4211ec03cnoise", - "type": "default" + "source": "55705012-79b9-4aac-9f26-c0b10309785b", + "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "noise" }, { - "source": "7d8bf987-284f-413a-b2fd-d825445a5d6c", - "sourceHandle": "conditioning", - "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", - "targetHandle": "positive_conditioning", "id": "reactflow__edge-7d8bf987-284f-413a-b2fd-d825445a5d6cconditioning-eea2702a-19fb-45b5-9d75-56b4211ec03cpositive_conditioning", - "type": "default" - }, - { - "source": "93dc02a4-d05b-48ed-b99c-c9b616af3402", + "source": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "default", "sourceHandle": "conditioning", - "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", - "targetHandle": "negative_conditioning", + "targetHandle": "positive_conditioning" + }, + { "id": "reactflow__edge-93dc02a4-d05b-48ed-b99c-c9b616af3402conditioning-eea2702a-19fb-45b5-9d75-56b4211ec03cnegative_conditioning", - "type": "default" - }, - { - "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", - "sourceHandle": "unet", + "source": "93dc02a4-d05b-48ed-b99c-c9b616af3402", "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", - "targetHandle": "unet", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8unet-eea2702a-19fb-45b5-9d75-56b4211ec03cunet", - "type": "default" - }, - { - "source": "eea2702a-19fb-45b5-9d75-56b4211ec03c", - "sourceHandle": "latents", - "target": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", - "targetHandle": "latents", - "id": "reactflow__edge-eea2702a-19fb-45b5-9d75-56b4211ec03clatents-58c957f5-0d01-41fc-a803-b2bbf0413d4flatents", - "type": "default" - }, - { "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", - "sourceHandle": "vae", + "target": "eea2702a-19fb-45b5-9d75-56b4211ec03c", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-eea2702a-19fb-45b5-9d75-56b4211ec03clatents-58c957f5-0d01-41fc-a803-b2bbf0413d4flatents", + "source": "eea2702a-19fb-45b5-9d75-56b4211ec03c", "target": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", - "targetHandle": "vae", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { "id": "reactflow__edge-c8d55139-f380-4695-b7f2-8b3d1e1e3db8vae-58c957f5-0d01-41fc-a803-b2bbf0413d4fvae", - "type": "default" + "source": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "target": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" } ] -} \ No newline at end of file +} From 17e1ef014012604747424b2ef9077f6c02312f9b Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Wed, 27 Dec 2023 16:07:18 +1100 Subject: [PATCH 245/515] Update git ignore to include FE build --- invokeai/frontend/web/.gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/invokeai/frontend/web/.gitignore b/invokeai/frontend/web/.gitignore index 402095f4be..4a44b2ed02 100644 --- a/invokeai/frontend/web/.gitignore +++ b/invokeai/frontend/web/.gitignore @@ -9,8 +9,8 @@ lerna-debug.log* node_modules # We want to distribute the repo -dist -dist/** +# dist +# dist/** dist-ssr *.local From 85726c164b2fb89112091f4960011c79bb7ccc44 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Wed, 27 Dec 2023 16:07:33 +1100 Subject: [PATCH 246/515] {release} update version to 3.5.0 --- invokeai/version/invokeai_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/version/invokeai_version.py b/invokeai/version/invokeai_version.py index 76fe57287d..dcbfb52f61 100644 --- a/invokeai/version/invokeai_version.py +++ b/invokeai/version/invokeai_version.py @@ -1 +1 @@ -__version__ = "3.4.0post2" +__version__ = "3.5.0" From 6afeb37ce58bf00d42676d03a1ef3ad95e56e1c0 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Wed, 27 Dec 2023 16:41:47 +1100 Subject: [PATCH 247/515] Update frontend build --- .../frontend/web/dist/assets/App-0865fac0.js | 169 ++ .../frontend/web/dist/assets/App-6125620a.css | 1 + .../dist/assets/MantineProvider-11ad6165.js | 1 + .../assets/ThemeLocaleProvider-0667edb8.css | 9 + .../assets/ThemeLocaleProvider-5513dc99.js | 280 +++ .../web/dist/assets/favicon-0d253ced.ico | Bin 0 -> 118734 bytes .../web/dist/assets/index-31d28826.js | 155 ++ ...er-cyrillic-ext-wght-normal-1c3007b8.woff2 | Bin 0 -> 27284 bytes .../inter-cyrillic-wght-normal-eba94878.woff2 | Bin 0 -> 17600 bytes ...inter-greek-ext-wght-normal-81f77e51.woff2 | Bin 0 -> 12732 bytes .../inter-greek-wght-normal-d92c6cbc.woff2 | Bin 0 -> 22480 bytes ...inter-latin-ext-wght-normal-a2bfd9fe.woff2 | Bin 0 -> 79940 bytes .../inter-latin-wght-normal-88df0b5a.woff2 | Bin 0 -> 46704 bytes ...nter-vietnamese-wght-normal-15df7612.woff2 | Bin 0 -> 10540 bytes .../web/dist/assets/logo-13003d72.png | Bin 0 -> 44115 bytes invokeai/frontend/web/dist/index.html | 25 + invokeai/frontend/web/dist/locales/ar.json | 504 +++++ invokeai/frontend/web/dist/locales/de.json | 1012 ++++++++++ invokeai/frontend/web/dist/locales/en.json | 1662 ++++++++++++++++ invokeai/frontend/web/dist/locales/es.json | 732 ++++++++ invokeai/frontend/web/dist/locales/fi.json | 114 ++ invokeai/frontend/web/dist/locales/fr.json | 531 ++++++ invokeai/frontend/web/dist/locales/he.json | 575 ++++++ invokeai/frontend/web/dist/locales/it.json | 1645 ++++++++++++++++ invokeai/frontend/web/dist/locales/ja.json | 832 +++++++++ invokeai/frontend/web/dist/locales/ko.json | 920 +++++++++ invokeai/frontend/web/dist/locales/mn.json | 1 + invokeai/frontend/web/dist/locales/nl.json | 1504 +++++++++++++++ invokeai/frontend/web/dist/locales/pl.json | 461 +++++ invokeai/frontend/web/dist/locales/pt.json | 602 ++++++ invokeai/frontend/web/dist/locales/pt_BR.json | 577 ++++++ invokeai/frontend/web/dist/locales/ro.json | 1 + invokeai/frontend/web/dist/locales/ru.json | 1652 ++++++++++++++++ invokeai/frontend/web/dist/locales/sv.json | 246 +++ invokeai/frontend/web/dist/locales/tr.json | 58 + invokeai/frontend/web/dist/locales/uk.json | 619 ++++++ invokeai/frontend/web/dist/locales/vi.json | 1 + invokeai/frontend/web/dist/locales/zh_CN.json | 1663 +++++++++++++++++ .../frontend/web/dist/locales/zh_Hant.json | 53 + 39 files changed, 16605 insertions(+) create mode 100644 invokeai/frontend/web/dist/assets/App-0865fac0.js create mode 100644 invokeai/frontend/web/dist/assets/App-6125620a.css create mode 100644 invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js create mode 100644 invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css create mode 100644 invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js create mode 100644 invokeai/frontend/web/dist/assets/favicon-0d253ced.ico create mode 100644 invokeai/frontend/web/dist/assets/index-31d28826.js create mode 100644 invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-eba94878.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-81f77e51.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-latin-wght-normal-88df0b5a.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 create mode 100644 invokeai/frontend/web/dist/assets/logo-13003d72.png create mode 100644 invokeai/frontend/web/dist/index.html create mode 100644 invokeai/frontend/web/dist/locales/ar.json create mode 100644 invokeai/frontend/web/dist/locales/de.json create mode 100644 invokeai/frontend/web/dist/locales/en.json create mode 100644 invokeai/frontend/web/dist/locales/es.json create mode 100644 invokeai/frontend/web/dist/locales/fi.json create mode 100644 invokeai/frontend/web/dist/locales/fr.json create mode 100644 invokeai/frontend/web/dist/locales/he.json create mode 100644 invokeai/frontend/web/dist/locales/it.json create mode 100644 invokeai/frontend/web/dist/locales/ja.json create mode 100644 invokeai/frontend/web/dist/locales/ko.json create mode 100644 invokeai/frontend/web/dist/locales/mn.json create mode 100644 invokeai/frontend/web/dist/locales/nl.json create mode 100644 invokeai/frontend/web/dist/locales/pl.json create mode 100644 invokeai/frontend/web/dist/locales/pt.json create mode 100644 invokeai/frontend/web/dist/locales/pt_BR.json create mode 100644 invokeai/frontend/web/dist/locales/ro.json create mode 100644 invokeai/frontend/web/dist/locales/ru.json create mode 100644 invokeai/frontend/web/dist/locales/sv.json create mode 100644 invokeai/frontend/web/dist/locales/tr.json create mode 100644 invokeai/frontend/web/dist/locales/uk.json create mode 100644 invokeai/frontend/web/dist/locales/vi.json create mode 100644 invokeai/frontend/web/dist/locales/zh_CN.json create mode 100644 invokeai/frontend/web/dist/locales/zh_Hant.json diff --git a/invokeai/frontend/web/dist/assets/App-0865fac0.js b/invokeai/frontend/web/dist/assets/App-0865fac0.js new file mode 100644 index 0000000000..a0ba64e2b0 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/App-0865fac0.js @@ -0,0 +1,169 @@ +import{a as Vc,b as uI,S as dI,c as fI,d as pI,e as R1,f as mI,i as A1,g as fR,h as hI,j as gI,k as pR,l as mx,m as mR,n as hx,o as hR,p as gR,r as i,R as B,q as gx,u as xm,s as vR,t as bR,v as xR,z as yR,P as CR,w as vx,x as wR,y as SR,A as kR,B as jR,C as _e,D as a,I as An,E as _R,F as IR,G as PR,H as Kt,J as je,K as et,L as gn,M as ze,N as zd,O as hr,Q as Mn,T as Xn,U as cn,V as va,W as ml,X as ut,Y as wo,Z as dc,_ as ba,$ as xa,a0 as Uh,a1 as bx,a2 as Bd,a3 as bn,a4 as Rw,a5 as ER,a6 as vI,a7 as T1,a8 as Hd,a9 as Uc,aa as MR,ab as bI,ac as xI,ad as yI,ae as Zo,af as OR,ag as fe,ah as pe,ai as H,aj as DR,ak as Aw,al as RR,am as AR,an as TR,ao as hl,ap as te,aq as NR,ar as lt,as as rn,at as W,au as Ie,av as $,aw as or,ax as tr,ay as CI,az as $R,aA as LR,aB as FR,aC as zR,aD as Jr,aE as xx,aF as ya,aG as zr,aH as Wd,aI as BR,aJ as HR,aK as Tw,aL as yx,aM as be,aN as Jo,aO as WR,aP as wI,aQ as SI,aR as Nw,aS as VR,aT as UR,aU as GR,aV as Ca,aW as Cx,aX as KR,aY as qR,aZ as wt,a_ as XR,a$ as QR,b0 as Ls,b1 as kI,b2 as jI,b3 as Gh,b4 as YR,b5 as $w,b6 as _I,b7 as ZR,b8 as JR,b9 as eA,ba as tA,bb as nA,bc as II,bd as rA,be as oA,bf as sA,bg as aA,bh as lA,bi as Yl,bj as iA,bk as Br,bl as cA,bm as uA,bn as dA,bo as Lw,bp as fA,bq as pA,br as Ya,bs as PI,bt as EI,bu as Kh,bv as wx,bw as Sx,bx as jo,by as MI,bz as mA,bA as Zl,bB as Ku,bC as Fw,bD as hA,bE as gA,bF as kx,bG as vA,bH as zw,bI as OI,bJ as bA,bK as xA,bL as Bw,bM as DI,bN as yA,bO as qh,bP as jx,bQ as _x,bR as Ix,bS as RI,bT as Xh,bU as AI,bV as CA,bW as Px,bX as bp,bY as xp,bZ as Tu,b_ as _v,b$ as nd,c0 as rd,c1 as od,c2 as sd,c3 as Hw,c4 as ym,c5 as Iv,c6 as Cm,c7 as Ww,c8 as wm,c9 as Vw,ca as N1,cb as Pv,cc as $1,cd as Uw,ce as nc,cf as Ev,cg as Sm,ch as Mv,ci as Za,cj as Ov,ck as Ja,cl as yp,cm as km,cn as Gw,co as L1,cp as jm,cq as Kw,cr as F1,cs as Vd,ct as TI,cu as wA,cv as qw,cw as Ex,cx as _m,cy as NI,cz as jr,cA as Nu,cB as Ti,cC as Mx,cD as $I,cE as Cp,cF as Ox,cG as SA,cH as LI,cI as Dv,cJ as Qh,cK as kA,cL as FI,cM as z1,cN as B1,cO as zI,cP as jA,cQ as H1,cR as _A,cS as W1,cT as IA,cU as V1,cV as PA,cW as EA,cX as Dx,cY as BI,cZ as Js,c_ as HI,c$ as ia,d0 as WI,d1 as MA,d2 as $u,d3 as Xw,d4 as OA,d5 as DA,d6 as Qw,d7 as Rx,d8 as VI,d9 as Ax,da as Tx,db as UI,dc as Jt,dd as RA,de as qn,df as AA,dg as Gc,dh as Yh,di as Nx,dj as GI,dk as KI,dl as TA,dm as NA,dn as $A,dp as Im,dq as qI,dr as $x,ds as XI,dt as LA,du as FA,dv as zA,dw as BA,dx as HA,dy as WA,dz as VA,dA as Yw,dB as Lx,dC as UA,dD as GA,dE as KA,dF as qA,dG as Zh,dH as XA,dI as QA,dJ as YA,dK as ZA,dL as JA,dM as xn,dN as eT,dO as tT,dP as nT,dQ as rT,dR as oT,dS as sT,dT as aT,dU as lT,dV as vd,dW as Zw,dX as as,dY as QI,dZ as iT,d_ as Fx,d$ as cT,e0 as Jw,e1 as uT,e2 as dT,e3 as fT,e4 as pT,e5 as mT,e6 as YI,e7 as hT,e8 as gT,e9 as vT,ea as bT,eb as xT,ec as yT,ed as CT,ee as wT,ef as ST,eg as kT,eh as jT,ei as _T,ej as IT,ek as PT,el as ET,em as MT,en as OT,eo as DT,ep as RT,eq as AT,er as TT,es as NT,et as $T,eu as LT,ev as FT,ew as zT,ex as BT,ey as HT,ez as WT,eA as VT,eB as UT,eC as GT,eD as KT,eE as qT,eF as XT,eG as ZI,eH as QT,eI as YT,eJ as ZT,eK as JT,eL as e9,eM as t9,eN as n9,eO as JI,eP as r9,eQ as o9,eR as s9,eS,eT as wp,eU as Ao,eV as a9,eW as l9,eX as i9,eY as c9,eZ as u9,e_ as d9,e$ as es,f0 as f9,f1 as p9,f2 as m9,f3 as h9,f4 as g9,f5 as v9,f6 as b9,f7 as x9,f8 as y9,f9 as C9,fa as w9,fb as S9,fc as k9,fd as j9,fe as _9,ff as I9,fg as P9,fh as E9,fi as M9,fj as O9,fk as D9,fl as R9,fm as A9,fn as T9,fo as N9,fp as tS,fq as $9,fr as Xo,fs as bd,ft as kr,fu as L9,fv as F9,fw as e3,fx as t3,fy as z9,fz as nS,fA as B9,fB as rS,fC as oS,fD as sS,fE as H9,fF as W9,fG as aS,fH as lS,fI as V9,fJ as U9,fK as Pm,fL as G9,fM as iS,fN as K9,fO as cS,fP as n3,fQ as r3,fR as q9,fS as X9,fT as o3,fU as Q9,fV as Y9,fW as Z9,fX as J9,fY as s3,fZ as a3,f_ as Ud,f$ as l3,g0 as Bl,g1 as i3,g2 as uS,g3 as eN,g4 as tN,g5 as c3,g6 as nN,g7 as rN,g8 as oN,g9 as sN,ga as aN,gb as u3,gc as zx,gd as U1,ge as lN,gf as iN,gg as cN,gh as d3,gi as Bx,gj as f3,gk as uN,gl as Hx,gm as p3,gn as dN,go as ta,gp as fN,gq as m3,gr as Kc,gs as pN,gt as h3,gu as mN,gv as hN,gw as gN,gx as vN,gy as qu,gz as rc,gA as dS,gB as bN,gC as xN,gD as yN,gE as CN,gF as wN,gG as SN,gH as fS,gI as kN,gJ as jN,gK as _N,gL as IN,gM as PN,gN as EN,gO as pS,gP as MN,gQ as ON,gR as DN,gS as RN,gT as AN,gU as TN,gV as NN,gW as $N,gX as LN,gY as FN,gZ as zN,g_ as Fa,g$ as BN,h0 as g3,h1 as v3,h2 as HN,h3 as WN,h4 as VN,h5 as UN,h6 as GN,h7 as KN,h8 as qN,h9 as XN,ha as Gd,hb as QN,hc as YN,hd as ZN,he as JN,hf as e$,hg as t$,hh as n$,hi as r$,hj as Em,hk as b3,hl as Mm,hm as o$,hn as s$,ho as fc,hp as x3,hq as y3,hr as Wx,hs as a$,ht as l$,hu as i$,hv as G1,hw as C3,hx as c$,hy as u$,hz as w3,hA as d$,hB as f$,hC as p$,hD as m$,hE as h$,hF as mS,hG as sm,hH as g$,hI as hS,hJ as v$,hK as Ni,hL as b$,hM as x$,hN as y$,hO as C$,hP as w$,hQ as gS,hR as S$,hS as k$,hT as j$,hU as _$,hV as I$,hW as P$,hX as E$,hY as M$,hZ as Rv,h_ as Av,h$ as Tv,i0 as Sp,i1 as vS,i2 as K1,i3 as bS,i4 as O$,i5 as D$,i6 as S3,i7 as R$,i8 as A$,i9 as T$,ia as N$,ib as $$,ic as L$,id as F$,ie as z$,ig as B$,ih as H$,ii as W$,ij as V$,ik as U$,il as G$,im as K$,io as kp,ip as Nv,iq as q$,ir as X$,is as Q$,it as Y$,iu as Z$,iv as J$,iw as eL,ix as tL,iy as xS,iz as yS,iA as nL,iB as rL,iC as oL,iD as sL}from"./index-31d28826.js";import{u as k3,a as wa,b as aL,r as Ae,f as lL,g as CS,c as pt,d as Nn}from"./MantineProvider-11ad6165.js";var iL=200;function cL(e,t,n,r){var o=-1,s=fI,l=!0,c=e.length,d=[],f=t.length;if(!c)return d;n&&(t=Vc(t,uI(n))),r?(s=pI,l=!1):t.length>=iL&&(s=R1,l=!1,t=new dI(t));e:for(;++o=120&&m.length>=120)?new dI(l&&m):void 0}m=e[0];var h=-1,g=c[0];e:for(;++h{const{background:y,backgroundColor:x}=s||{},w=l||y||x;return B.createElement("rect",{className:gx(["react-flow__minimap-node",{selected:b},f]),x:t,y:n,rx:m,ry:m,width:r,height:o,fill:w,stroke:c,strokeWidth:d,shapeRendering:h,onClick:g?S=>g(S,e):void 0})};j3.displayName="MiniMapNode";var wL=i.memo(j3);const SL=e=>e.nodeOrigin,kL=e=>e.getNodes().filter(t=>!t.hidden&&t.width&&t.height),$v=e=>e instanceof Function?e:()=>e;function jL({nodeStrokeColor:e="transparent",nodeColor:t="#e2e2e2",nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:o=2,nodeComponent:s=wL,onClick:l}){const c=xm(kL,vx),d=xm(SL),f=$v(t),m=$v(e),h=$v(n),g=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return B.createElement(B.Fragment,null,c.map(b=>{const{x:y,y:x}=vR(b,d).positionAbsolute;return B.createElement(s,{key:b.id,x:y,y:x,width:b.width,height:b.height,style:b.style,selected:b.selected,className:h(b),color:f(b),borderRadius:r,strokeColor:m(b),strokeWidth:o,shapeRendering:g,onClick:l,id:b.id})}))}var _L=i.memo(jL);const IL=200,PL=150,EL=e=>{const t=e.getNodes(),n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:t.length>0?kR(jR(t,e.nodeOrigin),n):n,rfId:e.rfId}},ML="react-flow__minimap-desc";function _3({style:e,className:t,nodeStrokeColor:n="transparent",nodeColor:r="#e2e2e2",nodeClassName:o="",nodeBorderRadius:s=5,nodeStrokeWidth:l=2,nodeComponent:c,maskColor:d="rgb(240, 240, 240, 0.6)",maskStrokeColor:f="none",maskStrokeWidth:m=1,position:h="bottom-right",onClick:g,onNodeClick:b,pannable:y=!1,zoomable:x=!1,ariaLabel:w="React Flow mini map",inversePan:S=!1,zoomStep:j=10,offsetScale:_=5}){const I=bR(),E=i.useRef(null),{boundingRect:M,viewBB:D,rfId:R}=xm(EL,vx),N=(e==null?void 0:e.width)??IL,O=(e==null?void 0:e.height)??PL,T=M.width/N,U=M.height/O,G=Math.max(T,U),q=G*N,Y=G*O,Q=_*G,V=M.x-(q-M.width)/2-Q,se=M.y-(Y-M.height)/2-Q,ee=q+Q*2,le=Y+Q*2,ae=`${ML}-${R}`,ce=i.useRef(0);ce.current=G,i.useEffect(()=>{if(E.current){const A=xR(E.current),L=z=>{const{transform:oe,d3Selection:X,d3Zoom:Z}=I.getState();if(z.sourceEvent.type!=="wheel"||!X||!Z)return;const me=-z.sourceEvent.deltaY*(z.sourceEvent.deltaMode===1?.05:z.sourceEvent.deltaMode?1:.002)*j,ve=oe[2]*Math.pow(2,me);Z.scaleTo(X,ve)},K=z=>{const{transform:oe,d3Selection:X,d3Zoom:Z,translateExtent:me,width:ve,height:de}=I.getState();if(z.sourceEvent.type!=="mousemove"||!X||!Z)return;const ke=ce.current*Math.max(1,oe[2])*(S?-1:1),we={x:oe[0]-z.sourceEvent.movementX*ke,y:oe[1]-z.sourceEvent.movementY*ke},Re=[[0,0],[ve,de]],Qe=wR.translate(we.x,we.y).scale(oe[2]),$e=Z.constrain()(Qe,Re,me);Z.transform(X,$e)},ne=yR().on("zoom",y?K:null).on("zoom.wheel",x?L:null);return A.call(ne),()=>{A.on("zoom",null)}}},[y,x,S,j]);const J=g?A=>{const L=SR(A);g(A,{x:L[0],y:L[1]})}:void 0,re=b?(A,L)=>{const K=I.getState().nodeInternals.get(L);b(A,K)}:void 0;return B.createElement(CR,{position:h,style:e,className:gx(["react-flow__minimap",t]),"data-testid":"rf__minimap"},B.createElement("svg",{width:N,height:O,viewBox:`${V} ${se} ${ee} ${le}`,role:"img","aria-labelledby":ae,ref:E,onClick:J},w&&B.createElement("title",{id:ae},w),B.createElement(_L,{onClick:re,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:s,nodeClassName:o,nodeStrokeWidth:l,nodeComponent:c}),B.createElement("path",{className:"react-flow__minimap-mask",d:`M${V-Q},${se-Q}h${ee+Q*2}v${le+Q*2}h${-ee-Q*2}z + M${D.x},${D.y}h${D.width}v${D.height}h${-D.width}z`,fill:d,fillRule:"evenodd",stroke:f,strokeWidth:m,pointerEvents:"none"})))}_3.displayName="MiniMap";var OL=i.memo(_3),ns;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(ns||(ns={}));function DL({color:e,dimensions:t,lineWidth:n}){return B.createElement("path",{stroke:e,strokeWidth:n,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`})}function RL({color:e,radius:t}){return B.createElement("circle",{cx:t,cy:t,r:t,fill:e})}const AL={[ns.Dots]:"#91919a",[ns.Lines]:"#eee",[ns.Cross]:"#e2e2e2"},TL={[ns.Dots]:1,[ns.Lines]:1,[ns.Cross]:6},NL=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function I3({id:e,variant:t=ns.Dots,gap:n=20,size:r,lineWidth:o=1,offset:s=2,color:l,style:c,className:d}){const f=i.useRef(null),{transform:m,patternId:h}=xm(NL,vx),g=l||AL[t],b=r||TL[t],y=t===ns.Dots,x=t===ns.Cross,w=Array.isArray(n)?n:[n,n],S=[w[0]*m[2]||1,w[1]*m[2]||1],j=b*m[2],_=x?[j,j]:S,I=y?[j/s,j/s]:[_[0]/s,_[1]/s];return B.createElement("svg",{className:gx(["react-flow__background",d]),style:{...c,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:f,"data-testid":"rf__background"},B.createElement("pattern",{id:h+e,x:m[0]%S[0],y:m[1]%S[1],width:S[0],height:S[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${I[0]},-${I[1]})`},y?B.createElement(RL,{color:g,radius:j/s}):B.createElement(DL,{dimensions:_,color:g,lineWidth:o})),B.createElement("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${h+e})`}))}I3.displayName="Background";var $L=i.memo(I3);function LL(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var FL=LL();const P3=1/60*1e3,zL=typeof performance<"u"?()=>performance.now():()=>Date.now(),E3=typeof window<"u"?e=>window.requestAnimationFrame(e):e=>setTimeout(()=>e(zL()),P3);function BL(e){let t=[],n=[],r=0,o=!1,s=!1;const l=new WeakSet,c={schedule:(d,f=!1,m=!1)=>{const h=m&&o,g=h?t:n;return f&&l.add(d),g.indexOf(d)===-1&&(g.push(d),h&&o&&(r=t.length)),d},cancel:d=>{const f=n.indexOf(d);f!==-1&&n.splice(f,1),l.delete(d)},process:d=>{if(o){s=!0;return}if(o=!0,[t,n]=[n,t],n.length=0,r=t.length,r)for(let f=0;f(e[t]=BL(()=>xd=!0),e),{}),WL=Kd.reduce((e,t)=>{const n=Jh[t];return e[t]=(r,o=!1,s=!1)=>(xd||GL(),n.schedule(r,o,s)),e},{}),VL=Kd.reduce((e,t)=>(e[t]=Jh[t].cancel,e),{});Kd.reduce((e,t)=>(e[t]=()=>Jh[t].process(pc),e),{});const UL=e=>Jh[e].process(pc),M3=e=>{xd=!1,pc.delta=q1?P3:Math.max(Math.min(e-pc.timestamp,HL),1),pc.timestamp=e,X1=!0,Kd.forEach(UL),X1=!1,xd&&(q1=!1,E3(M3))},GL=()=>{xd=!0,q1=!0,X1||E3(M3)},SS=()=>pc;function eg(e){const{viewBox:t="0 0 24 24",d:n,displayName:r,defaultProps:o={}}=e,s=i.Children.toArray(e.path),l=_e((c,d)=>a.jsx(An,{ref:d,viewBox:t,...o,...c,children:s.length?s:a.jsx("path",{fill:"currentColor",d:n})}));return l.displayName=r,l}function tg(e){const{theme:t}=_R(),n=IR();return i.useMemo(()=>PR(t.direction,{...n,...e}),[e,t.direction,n])}var KL=Object.defineProperty,qL=(e,t,n)=>t in e?KL(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,In=(e,t,n)=>(qL(e,typeof t!="symbol"?t+"":t,n),n);function kS(e){return e.sort((t,n)=>{const r=t.compareDocumentPosition(n);if(r&Node.DOCUMENT_POSITION_FOLLOWING||r&Node.DOCUMENT_POSITION_CONTAINED_BY)return-1;if(r&Node.DOCUMENT_POSITION_PRECEDING||r&Node.DOCUMENT_POSITION_CONTAINS)return 1;if(r&Node.DOCUMENT_POSITION_DISCONNECTED||r&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC)throw Error("Cannot sort the given nodes.");return 0})}var XL=e=>typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE;function jS(e,t,n){let r=e+1;return n&&r>=t&&(r=0),r}function _S(e,t,n){let r=e-1;return n&&r<0&&(r=t),r}var Q1=typeof window<"u"?i.useLayoutEffect:i.useEffect,Om=e=>e,QL=class{constructor(){In(this,"descendants",new Map),In(this,"register",e=>{if(e!=null)return XL(e)?this.registerNode(e):t=>{this.registerNode(t,e)}}),In(this,"unregister",e=>{this.descendants.delete(e);const t=kS(Array.from(this.descendants.keys()));this.assignIndex(t)}),In(this,"destroy",()=>{this.descendants.clear()}),In(this,"assignIndex",e=>{this.descendants.forEach(t=>{const n=e.indexOf(t.node);t.index=n,t.node.dataset.index=t.index.toString()})}),In(this,"count",()=>this.descendants.size),In(this,"enabledCount",()=>this.enabledValues().length),In(this,"values",()=>Array.from(this.descendants.values()).sort((t,n)=>t.index-n.index)),In(this,"enabledValues",()=>this.values().filter(e=>!e.disabled)),In(this,"item",e=>{if(this.count()!==0)return this.values()[e]}),In(this,"enabledItem",e=>{if(this.enabledCount()!==0)return this.enabledValues()[e]}),In(this,"first",()=>this.item(0)),In(this,"firstEnabled",()=>this.enabledItem(0)),In(this,"last",()=>this.item(this.descendants.size-1)),In(this,"lastEnabled",()=>{const e=this.enabledValues().length-1;return this.enabledItem(e)}),In(this,"indexOf",e=>{var t,n;return e&&(n=(t=this.descendants.get(e))==null?void 0:t.index)!=null?n:-1}),In(this,"enabledIndexOf",e=>e==null?-1:this.enabledValues().findIndex(t=>t.node.isSameNode(e))),In(this,"next",(e,t=!0)=>{const n=jS(e,this.count(),t);return this.item(n)}),In(this,"nextEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=jS(r,this.enabledCount(),t);return this.enabledItem(o)}),In(this,"prev",(e,t=!0)=>{const n=_S(e,this.count()-1,t);return this.item(n)}),In(this,"prevEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=_S(r,this.enabledCount()-1,t);return this.enabledItem(o)}),In(this,"registerNode",(e,t)=>{if(!e||this.descendants.has(e))return;const n=Array.from(this.descendants.keys()).concat(e),r=kS(n);t!=null&&t.disabled&&(t.disabled=!!t.disabled);const o={node:e,index:-1,...t};this.descendants.set(e,o),this.assignIndex(r)})}};function YL(e,t){if(e!=null){if(typeof e=="function"){e(t);return}try{e.current=t}catch{throw new Error(`Cannot assign value '${t}' to ref '${e}'`)}}}function Et(...e){return t=>{e.forEach(n=>{YL(n,t)})}}function ZL(...e){return i.useMemo(()=>Et(...e),e)}function JL(){const e=i.useRef(new QL);return Q1(()=>()=>e.current.destroy()),e.current}var[eF,O3]=Kt({name:"DescendantsProvider",errorMessage:"useDescendantsContext must be used within DescendantsProvider"});function tF(e){const t=O3(),[n,r]=i.useState(-1),o=i.useRef(null);Q1(()=>()=>{o.current&&t.unregister(o.current)},[]),Q1(()=>{if(!o.current)return;const l=Number(o.current.dataset.index);n!=l&&!Number.isNaN(l)&&r(l)});const s=Om(e?t.register(e):t.register);return{descendants:t,index:n,enabledIndex:t.enabledIndexOf(o.current),register:Et(s,o)}}function Vx(){return[Om(eF),()=>Om(O3()),()=>JL(),o=>tF(o)]}var[nF,ng]=Kt({name:"AccordionStylesContext",hookName:"useAccordionStyles",providerName:""}),[rF,Ux]=Kt({name:"AccordionItemContext",hookName:"useAccordionItemContext",providerName:""}),[oF,Sye,sF,aF]=Vx(),qi=_e(function(t,n){const{getButtonProps:r}=Ux(),o=r(t,n),l={display:"flex",alignItems:"center",width:"100%",outline:0,...ng().button};return a.jsx(je.button,{...o,className:et("chakra-accordion__button",t.className),__css:l})});qi.displayName="AccordionButton";function qd(e){const{value:t,defaultValue:n,onChange:r,shouldUpdate:o=(g,b)=>g!==b}=e,s=gn(r),l=gn(o),[c,d]=i.useState(n),f=t!==void 0,m=f?t:c,h=gn(g=>{const y=typeof g=="function"?g(m):g;l(m,y)&&(f||d(y),s(y))},[f,s,m,l]);return[m,h]}function lF(e){const{onChange:t,defaultIndex:n,index:r,allowMultiple:o,allowToggle:s,...l}=e;uF(e),dF(e);const c=sF(),[d,f]=i.useState(-1);i.useEffect(()=>()=>{f(-1)},[]);const[m,h]=qd({value:r,defaultValue(){return o?n??[]:n??-1},onChange:t});return{index:m,setIndex:h,htmlProps:l,getAccordionItemProps:b=>{let y=!1;return b!==null&&(y=Array.isArray(m)?m.includes(b):m===b),{isOpen:y,onChange:w=>{if(b!==null)if(o&&Array.isArray(m)){const S=w?m.concat(b):m.filter(j=>j!==b);h(S)}else w?h(b):s&&h(-1)}}},focusedIndex:d,setFocusedIndex:f,descendants:c}}var[iF,Gx]=Kt({name:"AccordionContext",hookName:"useAccordionContext",providerName:"Accordion"});function cF(e){const{isDisabled:t,isFocusable:n,id:r,...o}=e,{getAccordionItemProps:s,setFocusedIndex:l}=Gx(),c=i.useRef(null),d=i.useId(),f=r??d,m=`accordion-button-${f}`,h=`accordion-panel-${f}`;fF(e);const{register:g,index:b,descendants:y}=aF({disabled:t&&!n}),{isOpen:x,onChange:w}=s(b===-1?null:b);pF({isOpen:x,isDisabled:t});const S=()=>{w==null||w(!0)},j=()=>{w==null||w(!1)},_=i.useCallback(()=>{w==null||w(!x),l(b)},[b,l,x,w]),I=i.useCallback(R=>{const O={ArrowDown:()=>{const T=y.nextEnabled(b);T==null||T.node.focus()},ArrowUp:()=>{const T=y.prevEnabled(b);T==null||T.node.focus()},Home:()=>{const T=y.firstEnabled();T==null||T.node.focus()},End:()=>{const T=y.lastEnabled();T==null||T.node.focus()}}[R.key];O&&(R.preventDefault(),O(R))},[y,b]),E=i.useCallback(()=>{l(b)},[l,b]),M=i.useCallback(function(N={},O=null){return{...N,type:"button",ref:Et(g,c,O),id:m,disabled:!!t,"aria-expanded":!!x,"aria-controls":h,onClick:ze(N.onClick,_),onFocus:ze(N.onFocus,E),onKeyDown:ze(N.onKeyDown,I)}},[m,t,x,_,E,I,h,g]),D=i.useCallback(function(N={},O=null){return{...N,ref:O,role:"region",id:h,"aria-labelledby":m,hidden:!x}},[m,x,h]);return{isOpen:x,isDisabled:t,isFocusable:n,onOpen:S,onClose:j,getButtonProps:M,getPanelProps:D,htmlProps:o}}function uF(e){const t=e.index||e.defaultIndex,n=t!=null&&!Array.isArray(t)&&e.allowMultiple;zd({condition:!!n,message:`If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof t},`})}function dF(e){zd({condition:!!(e.allowMultiple&&e.allowToggle),message:"If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not"})}function fF(e){zd({condition:!!(e.isFocusable&&!e.isDisabled),message:`Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well. + `})}function pF(e){zd({condition:e.isOpen&&!!e.isDisabled,message:"Cannot open a disabled accordion item"})}function Xi(e){const{isOpen:t,isDisabled:n}=Ux(),{reduceMotion:r}=Gx(),o=et("chakra-accordion__icon",e.className),s=ng(),l={opacity:n?.4:1,transform:t?"rotate(-180deg)":void 0,transition:r?void 0:"transform 0.2s",transformOrigin:"center",...s.icon};return a.jsx(An,{viewBox:"0 0 24 24","aria-hidden":!0,className:o,__css:l,...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})})}Xi.displayName="AccordionIcon";var Qi=_e(function(t,n){const{children:r,className:o}=t,{htmlProps:s,...l}=cF(t),d={...ng().container,overflowAnchor:"none"},f=i.useMemo(()=>l,[l]);return a.jsx(rF,{value:f,children:a.jsx(je.div,{ref:n,...s,className:et("chakra-accordion__item",o),__css:d,children:typeof r=="function"?r({isExpanded:!!l.isOpen,isDisabled:!!l.isDisabled}):r})})});Qi.displayName="AccordionItem";var oc={ease:[.25,.1,.25,1],easeIn:[.4,0,1,1],easeOut:[0,0,.2,1],easeInOut:[.4,0,.2,1]},Vl={enter:{duration:.2,ease:oc.easeOut},exit:{duration:.1,ease:oc.easeIn}},oa={enter:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.enter}),exit:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.exit})},mF=e=>e!=null&&parseInt(e.toString(),10)>0,IS={exit:{height:{duration:.2,ease:oc.ease},opacity:{duration:.3,ease:oc.ease}},enter:{height:{duration:.3,ease:oc.ease},opacity:{duration:.4,ease:oc.ease}}},hF={exit:({animateOpacity:e,startingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:mF(t)?1:0},height:t,transitionEnd:r==null?void 0:r.exit,transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(IS.exit,o)}},enter:({animateOpacity:e,endingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:1},height:t,transitionEnd:r==null?void 0:r.enter,transition:(s=n==null?void 0:n.enter)!=null?s:oa.enter(IS.enter,o)}}},Xd=i.forwardRef((e,t)=>{const{in:n,unmountOnExit:r,animateOpacity:o=!0,startingHeight:s=0,endingHeight:l="auto",style:c,className:d,transition:f,transitionEnd:m,...h}=e,[g,b]=i.useState(!1);i.useEffect(()=>{const j=setTimeout(()=>{b(!0)});return()=>clearTimeout(j)},[]),zd({condition:Number(s)>0&&!!r,message:"startingHeight and unmountOnExit are mutually exclusive. You can't use them together"});const y=parseFloat(s.toString())>0,x={startingHeight:s,endingHeight:l,animateOpacity:o,transition:g?f:{enter:{duration:0}},transitionEnd:{enter:m==null?void 0:m.enter,exit:r?m==null?void 0:m.exit:{...m==null?void 0:m.exit,display:y?"block":"none"}}},w=r?n:!0,S=n||r?"enter":"exit";return a.jsx(hr,{initial:!1,custom:x,children:w&&a.jsx(Mn.div,{ref:t,...h,className:et("chakra-collapse",d),style:{overflow:"hidden",display:"block",...c},custom:x,variants:hF,initial:r?"exit":!1,animate:S,exit:"exit"})})});Xd.displayName="Collapse";var gF={enter:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:1,transition:(r=e==null?void 0:e.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:0,transition:(r=e==null?void 0:e.exit)!=null?r:oa.exit(Vl.exit,n),transitionEnd:t==null?void 0:t.exit}}},D3={initial:"exit",animate:"enter",exit:"exit",variants:gF},vF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,className:s,transition:l,transitionEnd:c,delay:d,...f}=t,m=o||r?"enter":"exit",h=r?o&&r:!0,g={transition:l,transitionEnd:c,delay:d};return a.jsx(hr,{custom:g,children:h&&a.jsx(Mn.div,{ref:n,className:et("chakra-fade",s),custom:g,...D3,animate:m,...f})})});vF.displayName="Fade";var bF={exit:({reverse:e,initialScale:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,...e?{scale:t,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{scale:t,...r==null?void 0:r.exit}},transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(Vl.exit,o)}},enter:({transitionEnd:e,transition:t,delay:n})=>{var r;return{opacity:1,scale:1,transition:(r=t==null?void 0:t.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:e==null?void 0:e.enter}}},R3={initial:"exit",animate:"enter",exit:"exit",variants:bF},xF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,initialScale:l=.95,className:c,transition:d,transitionEnd:f,delay:m,...h}=t,g=r?o&&r:!0,b=o||r?"enter":"exit",y={initialScale:l,reverse:s,transition:d,transitionEnd:f,delay:m};return a.jsx(hr,{custom:y,children:g&&a.jsx(Mn.div,{ref:n,className:et("chakra-offset-slide",c),...R3,animate:b,custom:y,...h})})});xF.displayName="ScaleFade";var yF={initial:({offsetX:e,offsetY:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,x:e,y:t,transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(Vl.exit,o),transitionEnd:r==null?void 0:r.exit}},enter:({transition:e,transitionEnd:t,delay:n})=>{var r;return{opacity:1,x:0,y:0,transition:(r=e==null?void 0:e.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({offsetY:e,offsetX:t,transition:n,transitionEnd:r,reverse:o,delay:s})=>{var l;const c={x:t,y:e};return{opacity:0,transition:(l=n==null?void 0:n.exit)!=null?l:oa.exit(Vl.exit,s),...o?{...c,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{...c,...r==null?void 0:r.exit}}}}},Xu={initial:"initial",animate:"enter",exit:"exit",variants:yF},CF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,className:l,offsetX:c=0,offsetY:d=8,transition:f,transitionEnd:m,delay:h,...g}=t,b=r?o&&r:!0,y=o||r?"enter":"exit",x={offsetX:c,offsetY:d,reverse:s,transition:f,transitionEnd:m,delay:h};return a.jsx(hr,{custom:x,children:b&&a.jsx(Mn.div,{ref:n,className:et("chakra-offset-slide",l),custom:x,...Xu,animate:y,...g})})});CF.displayName="SlideFade";var Yi=_e(function(t,n){const{className:r,motionProps:o,...s}=t,{reduceMotion:l}=Gx(),{getPanelProps:c,isOpen:d}=Ux(),f=c(s,n),m=et("chakra-accordion__panel",r),h=ng();l||delete f.hidden;const g=a.jsx(je.div,{...f,__css:h.panel,className:m});return l?g:a.jsx(Xd,{in:d,...o,children:g})});Yi.displayName="AccordionPanel";var A3=_e(function({children:t,reduceMotion:n,...r},o){const s=Xn("Accordion",r),l=cn(r),{htmlProps:c,descendants:d,...f}=lF(l),m=i.useMemo(()=>({...f,reduceMotion:!!n}),[f,n]);return a.jsx(oF,{value:d,children:a.jsx(iF,{value:m,children:a.jsx(nF,{value:s,children:a.jsx(je.div,{ref:o,...c,className:et("chakra-accordion",r.className),__css:s.root,children:t})})})})});A3.displayName="Accordion";function rg(e){return i.Children.toArray(e).filter(t=>i.isValidElement(t))}var[wF,SF]=Kt({strict:!1,name:"ButtonGroupContext"}),kF={horizontal:{"> *:first-of-type:not(:last-of-type)":{borderEndRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderStartRadius:0}},vertical:{"> *:first-of-type:not(:last-of-type)":{borderBottomRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderTopRadius:0}}},jF={horizontal:e=>({"& > *:not(style) ~ *:not(style)":{marginStart:e}}),vertical:e=>({"& > *:not(style) ~ *:not(style)":{marginTop:e}})},$t=_e(function(t,n){const{size:r,colorScheme:o,variant:s,className:l,spacing:c="0.5rem",isAttached:d,isDisabled:f,orientation:m="horizontal",...h}=t,g=et("chakra-button__group",l),b=i.useMemo(()=>({size:r,colorScheme:o,variant:s,isDisabled:f}),[r,o,s,f]);let y={display:"inline-flex",...d?kF[m]:jF[m](c)};const x=m==="vertical";return a.jsx(wF,{value:b,children:a.jsx(je.div,{ref:n,role:"group",__css:y,className:g,"data-attached":d?"":void 0,"data-orientation":m,flexDir:x?"column":void 0,...h})})});$t.displayName="ButtonGroup";function _F(e){const[t,n]=i.useState(!e);return{ref:i.useCallback(s=>{s&&n(s.tagName==="BUTTON")},[]),type:t?"button":void 0}}function Y1(e){const{children:t,className:n,...r}=e,o=i.isValidElement(t)?i.cloneElement(t,{"aria-hidden":!0,focusable:!1}):t,s=et("chakra-button__icon",n);return a.jsx(je.span,{display:"inline-flex",alignSelf:"center",flexShrink:0,...r,className:s,children:o})}Y1.displayName="ButtonIcon";function Z1(e){const{label:t,placement:n,spacing:r="0.5rem",children:o=a.jsx(va,{color:"currentColor",width:"1em",height:"1em"}),className:s,__css:l,...c}=e,d=et("chakra-button__spinner",s),f=n==="start"?"marginEnd":"marginStart",m=i.useMemo(()=>({display:"flex",alignItems:"center",position:t?"relative":"absolute",[f]:t?r:0,fontSize:"1em",lineHeight:"normal",...l}),[l,t,f,r]);return a.jsx(je.div,{className:d,...c,__css:m,children:o})}Z1.displayName="ButtonSpinner";var ol=_e((e,t)=>{const n=SF(),r=ml("Button",{...n,...e}),{isDisabled:o=n==null?void 0:n.isDisabled,isLoading:s,isActive:l,children:c,leftIcon:d,rightIcon:f,loadingText:m,iconSpacing:h="0.5rem",type:g,spinner:b,spinnerPlacement:y="start",className:x,as:w,...S}=cn(e),j=i.useMemo(()=>{const M={...r==null?void 0:r._focus,zIndex:1};return{display:"inline-flex",appearance:"none",alignItems:"center",justifyContent:"center",userSelect:"none",position:"relative",whiteSpace:"nowrap",verticalAlign:"middle",outline:"none",...r,...!!n&&{_focus:M}}},[r,n]),{ref:_,type:I}=_F(w),E={rightIcon:f,leftIcon:d,iconSpacing:h,children:c};return a.jsxs(je.button,{ref:ZL(t,_),as:w,type:g??I,"data-active":ut(l),"data-loading":ut(s),__css:j,className:et("chakra-button",x),...S,disabled:o||s,children:[s&&y==="start"&&a.jsx(Z1,{className:"chakra-button__spinner--start",label:m,placement:"start",spacing:h,children:b}),s?m||a.jsx(je.span,{opacity:0,children:a.jsx(PS,{...E})}):a.jsx(PS,{...E}),s&&y==="end"&&a.jsx(Z1,{className:"chakra-button__spinner--end",label:m,placement:"end",spacing:h,children:b})]})});ol.displayName="Button";function PS(e){const{leftIcon:t,rightIcon:n,children:r,iconSpacing:o}=e;return a.jsxs(a.Fragment,{children:[t&&a.jsx(Y1,{marginEnd:o,children:t}),r,n&&a.jsx(Y1,{marginStart:o,children:n})]})}var rs=_e((e,t)=>{const{icon:n,children:r,isRound:o,"aria-label":s,...l}=e,c=n||r,d=i.isValidElement(c)?i.cloneElement(c,{"aria-hidden":!0,focusable:!1}):null;return a.jsx(ol,{padding:"0",borderRadius:o?"full":void 0,ref:t,"aria-label":s,...l,children:d})});rs.displayName="IconButton";var[kye,IF]=Kt({name:"CheckboxGroupContext",strict:!1});function PF(e){const[t,n]=i.useState(e),[r,o]=i.useState(!1);return e!==t&&(o(!0),n(e)),r}function EF(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 12 10",style:{fill:"none",strokeWidth:2,stroke:"currentColor",strokeDasharray:16},...e,children:a.jsx("polyline",{points:"1.5 6 4.5 9 10.5 1"})})}function MF(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 24 24",style:{stroke:"currentColor",strokeWidth:4},...e,children:a.jsx("line",{x1:"21",x2:"3",y1:"12",y2:"12"})})}function OF(e){const{isIndeterminate:t,isChecked:n,...r}=e,o=t?MF:EF;return n||t?a.jsx(je.div,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:a.jsx(o,{...r})}):null}var[DF,T3]=Kt({name:"FormControlStylesContext",errorMessage:`useFormControlStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[RF,Qd]=Kt({strict:!1,name:"FormControlContext"});function AF(e){const{id:t,isRequired:n,isInvalid:r,isDisabled:o,isReadOnly:s,...l}=e,c=i.useId(),d=t||`field-${c}`,f=`${d}-label`,m=`${d}-feedback`,h=`${d}-helptext`,[g,b]=i.useState(!1),[y,x]=i.useState(!1),[w,S]=i.useState(!1),j=i.useCallback((D={},R=null)=>({id:h,...D,ref:Et(R,N=>{N&&x(!0)})}),[h]),_=i.useCallback((D={},R=null)=>({...D,ref:R,"data-focus":ut(w),"data-disabled":ut(o),"data-invalid":ut(r),"data-readonly":ut(s),id:D.id!==void 0?D.id:f,htmlFor:D.htmlFor!==void 0?D.htmlFor:d}),[d,o,w,r,s,f]),I=i.useCallback((D={},R=null)=>({id:m,...D,ref:Et(R,N=>{N&&b(!0)}),"aria-live":"polite"}),[m]),E=i.useCallback((D={},R=null)=>({...D,...l,ref:R,role:"group","data-focus":ut(w),"data-disabled":ut(o),"data-invalid":ut(r),"data-readonly":ut(s)}),[l,o,w,r,s]),M=i.useCallback((D={},R=null)=>({...D,ref:R,role:"presentation","aria-hidden":!0,children:D.children||"*"}),[]);return{isRequired:!!n,isInvalid:!!r,isReadOnly:!!s,isDisabled:!!o,isFocused:!!w,onFocus:()=>S(!0),onBlur:()=>S(!1),hasFeedbackText:g,setHasFeedbackText:b,hasHelpText:y,setHasHelpText:x,id:d,labelId:f,feedbackId:m,helpTextId:h,htmlProps:l,getHelpTextProps:j,getErrorMessageProps:I,getRootProps:E,getLabelProps:_,getRequiredIndicatorProps:M}}var Gt=_e(function(t,n){const r=Xn("Form",t),o=cn(t),{getRootProps:s,htmlProps:l,...c}=AF(o),d=et("chakra-form-control",t.className);return a.jsx(RF,{value:c,children:a.jsx(DF,{value:r,children:a.jsx(je.div,{...s({},n),className:d,__css:r.container})})})});Gt.displayName="FormControl";var N3=_e(function(t,n){const r=Qd(),o=T3(),s=et("chakra-form__helper-text",t.className);return a.jsx(je.div,{...r==null?void 0:r.getHelpTextProps(t,n),__css:o.helperText,className:s})});N3.displayName="FormHelperText";var ln=_e(function(t,n){var r;const o=ml("FormLabel",t),s=cn(t),{className:l,children:c,requiredIndicator:d=a.jsx($3,{}),optionalIndicator:f=null,...m}=s,h=Qd(),g=(r=h==null?void 0:h.getLabelProps(m,n))!=null?r:{ref:n,...m};return a.jsxs(je.label,{...g,className:et("chakra-form__label",s.className),__css:{display:"block",textAlign:"start",...o},children:[c,h!=null&&h.isRequired?d:f]})});ln.displayName="FormLabel";var $3=_e(function(t,n){const r=Qd(),o=T3();if(!(r!=null&&r.isRequired))return null;const s=et("chakra-form__required-indicator",t.className);return a.jsx(je.span,{...r==null?void 0:r.getRequiredIndicatorProps(t,n),__css:o.requiredIndicator,className:s})});$3.displayName="RequiredIndicator";function Kx(e){const{isDisabled:t,isInvalid:n,isReadOnly:r,isRequired:o,...s}=qx(e);return{...s,disabled:t,readOnly:r,required:o,"aria-invalid":wo(n),"aria-required":wo(o),"aria-readonly":wo(r)}}function qx(e){var t,n,r;const o=Qd(),{id:s,disabled:l,readOnly:c,required:d,isRequired:f,isInvalid:m,isReadOnly:h,isDisabled:g,onFocus:b,onBlur:y,...x}=e,w=e["aria-describedby"]?[e["aria-describedby"]]:[];return o!=null&&o.hasFeedbackText&&(o!=null&&o.isInvalid)&&w.push(o.feedbackId),o!=null&&o.hasHelpText&&w.push(o.helpTextId),{...x,"aria-describedby":w.join(" ")||void 0,id:s??(o==null?void 0:o.id),isDisabled:(t=l??g)!=null?t:o==null?void 0:o.isDisabled,isReadOnly:(n=c??h)!=null?n:o==null?void 0:o.isReadOnly,isRequired:(r=d??f)!=null?r:o==null?void 0:o.isRequired,isInvalid:m??(o==null?void 0:o.isInvalid),onFocus:ze(o==null?void 0:o.onFocus,b),onBlur:ze(o==null?void 0:o.onBlur,y)}}var Xx={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},L3=je("span",{baseStyle:Xx});L3.displayName="VisuallyHidden";var TF=je("input",{baseStyle:Xx});TF.displayName="VisuallyHiddenInput";var NF=()=>typeof document<"u",ES=!1,Yd=null,Jl=!1,J1=!1,eb=new Set;function Qx(e,t){eb.forEach(n=>n(e,t))}var $F=typeof window<"u"&&window.navigator!=null?/^Mac/.test(window.navigator.platform):!1;function LF(e){return!(e.metaKey||!$F&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function MS(e){Jl=!0,LF(e)&&(Yd="keyboard",Qx("keyboard",e))}function $i(e){if(Yd="pointer",e.type==="mousedown"||e.type==="pointerdown"){Jl=!0;const t=e.composedPath?e.composedPath()[0]:e.target;let n=!1;try{n=t.matches(":focus-visible")}catch{}if(n)return;Qx("pointer",e)}}function FF(e){return e.mozInputSource===0&&e.isTrusted?!0:e.detail===0&&!e.pointerType}function zF(e){FF(e)&&(Jl=!0,Yd="virtual")}function BF(e){e.target===window||e.target===document||(!Jl&&!J1&&(Yd="virtual",Qx("virtual",e)),Jl=!1,J1=!1)}function HF(){Jl=!1,J1=!0}function OS(){return Yd!=="pointer"}function WF(){if(!NF()||ES)return;const{focus:e}=HTMLElement.prototype;HTMLElement.prototype.focus=function(...n){Jl=!0,e.apply(this,n)},document.addEventListener("keydown",MS,!0),document.addEventListener("keyup",MS,!0),document.addEventListener("click",zF,!0),window.addEventListener("focus",BF,!0),window.addEventListener("blur",HF,!1),typeof PointerEvent<"u"?(document.addEventListener("pointerdown",$i,!0),document.addEventListener("pointermove",$i,!0),document.addEventListener("pointerup",$i,!0)):(document.addEventListener("mousedown",$i,!0),document.addEventListener("mousemove",$i,!0),document.addEventListener("mouseup",$i,!0)),ES=!0}function F3(e){WF(),e(OS());const t=()=>e(OS());return eb.add(t),()=>{eb.delete(t)}}function VF(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function z3(e={}){const t=qx(e),{isDisabled:n,isReadOnly:r,isRequired:o,isInvalid:s,id:l,onBlur:c,onFocus:d,"aria-describedby":f}=t,{defaultChecked:m,isChecked:h,isFocusable:g,onChange:b,isIndeterminate:y,name:x,value:w,tabIndex:S=void 0,"aria-label":j,"aria-labelledby":_,"aria-invalid":I,...E}=e,M=VF(E,["isDisabled","isReadOnly","isRequired","isInvalid","id","onBlur","onFocus","aria-describedby"]),D=gn(b),R=gn(c),N=gn(d),[O,T]=i.useState(!1),[U,G]=i.useState(!1),[q,Y]=i.useState(!1),[Q,V]=i.useState(!1);i.useEffect(()=>F3(T),[]);const se=i.useRef(null),[ee,le]=i.useState(!0),[ae,ce]=i.useState(!!m),J=h!==void 0,re=J?h:ae,A=i.useCallback(de=>{if(r||n){de.preventDefault();return}J||ce(re?de.target.checked:y?!0:de.target.checked),D==null||D(de)},[r,n,re,J,y,D]);dc(()=>{se.current&&(se.current.indeterminate=!!y)},[y]),ba(()=>{n&&G(!1)},[n,G]),dc(()=>{const de=se.current;if(!(de!=null&&de.form))return;const ke=()=>{ce(!!m)};return de.form.addEventListener("reset",ke),()=>{var we;return(we=de.form)==null?void 0:we.removeEventListener("reset",ke)}},[]);const L=n&&!g,K=i.useCallback(de=>{de.key===" "&&V(!0)},[V]),ne=i.useCallback(de=>{de.key===" "&&V(!1)},[V]);dc(()=>{if(!se.current)return;se.current.checked!==re&&ce(se.current.checked)},[se.current]);const z=i.useCallback((de={},ke=null)=>{const we=Re=>{U&&Re.preventDefault(),V(!0)};return{...de,ref:ke,"data-active":ut(Q),"data-hover":ut(q),"data-checked":ut(re),"data-focus":ut(U),"data-focus-visible":ut(U&&O),"data-indeterminate":ut(y),"data-disabled":ut(n),"data-invalid":ut(s),"data-readonly":ut(r),"aria-hidden":!0,onMouseDown:ze(de.onMouseDown,we),onMouseUp:ze(de.onMouseUp,()=>V(!1)),onMouseEnter:ze(de.onMouseEnter,()=>Y(!0)),onMouseLeave:ze(de.onMouseLeave,()=>Y(!1))}},[Q,re,n,U,O,q,y,s,r]),oe=i.useCallback((de={},ke=null)=>({...de,ref:ke,"data-active":ut(Q),"data-hover":ut(q),"data-checked":ut(re),"data-focus":ut(U),"data-focus-visible":ut(U&&O),"data-indeterminate":ut(y),"data-disabled":ut(n),"data-invalid":ut(s),"data-readonly":ut(r)}),[Q,re,n,U,O,q,y,s,r]),X=i.useCallback((de={},ke=null)=>({...M,...de,ref:Et(ke,we=>{we&&le(we.tagName==="LABEL")}),onClick:ze(de.onClick,()=>{var we;ee||((we=se.current)==null||we.click(),requestAnimationFrame(()=>{var Re;(Re=se.current)==null||Re.focus({preventScroll:!0})}))}),"data-disabled":ut(n),"data-checked":ut(re),"data-invalid":ut(s)}),[M,n,re,s,ee]),Z=i.useCallback((de={},ke=null)=>({...de,ref:Et(se,ke),type:"checkbox",name:x,value:w,id:l,tabIndex:S,onChange:ze(de.onChange,A),onBlur:ze(de.onBlur,R,()=>G(!1)),onFocus:ze(de.onFocus,N,()=>G(!0)),onKeyDown:ze(de.onKeyDown,K),onKeyUp:ze(de.onKeyUp,ne),required:o,checked:re,disabled:L,readOnly:r,"aria-label":j,"aria-labelledby":_,"aria-invalid":I?!!I:s,"aria-describedby":f,"aria-disabled":n,style:Xx}),[x,w,l,A,R,N,K,ne,o,re,L,r,j,_,I,s,f,n,S]),me=i.useCallback((de={},ke=null)=>({...de,ref:ke,onMouseDown:ze(de.onMouseDown,UF),"data-disabled":ut(n),"data-checked":ut(re),"data-invalid":ut(s)}),[re,n,s]);return{state:{isInvalid:s,isFocused:U,isChecked:re,isActive:Q,isHovered:q,isIndeterminate:y,isDisabled:n,isReadOnly:r,isRequired:o},getRootProps:X,getCheckboxProps:z,getIndicatorProps:oe,getInputProps:Z,getLabelProps:me,htmlProps:M}}function UF(e){e.preventDefault(),e.stopPropagation()}var GF={display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",userSelect:"none",flexShrink:0},KF={cursor:"pointer",display:"inline-flex",alignItems:"center",verticalAlign:"top",position:"relative"},qF=xa({from:{opacity:0,strokeDashoffset:16,transform:"scale(0.95)"},to:{opacity:1,strokeDashoffset:0,transform:"scale(1)"}}),XF=xa({from:{opacity:0},to:{opacity:1}}),QF=xa({from:{transform:"scaleX(0.65)"},to:{transform:"scaleX(1)"}}),og=_e(function(t,n){const r=IF(),o={...r,...t},s=Xn("Checkbox",o),l=cn(t),{spacing:c="0.5rem",className:d,children:f,iconColor:m,iconSize:h,icon:g=a.jsx(OF,{}),isChecked:b,isDisabled:y=r==null?void 0:r.isDisabled,onChange:x,inputProps:w,...S}=l;let j=b;r!=null&&r.value&&l.value&&(j=r.value.includes(l.value));let _=x;r!=null&&r.onChange&&l.value&&(_=Uh(r.onChange,x));const{state:I,getInputProps:E,getCheckboxProps:M,getLabelProps:D,getRootProps:R}=z3({...S,isDisabled:y,isChecked:j,onChange:_}),N=PF(I.isChecked),O=i.useMemo(()=>({animation:N?I.isIndeterminate?`${XF} 20ms linear, ${QF} 200ms linear`:`${qF} 200ms linear`:void 0,fontSize:h,color:m,...s.icon}),[m,h,N,I.isIndeterminate,s.icon]),T=i.cloneElement(g,{__css:O,isIndeterminate:I.isIndeterminate,isChecked:I.isChecked});return a.jsxs(je.label,{__css:{...KF,...s.container},className:et("chakra-checkbox",d),...R(),children:[a.jsx("input",{className:"chakra-checkbox__input",...E(w,n)}),a.jsx(je.span,{__css:{...GF,...s.control},className:"chakra-checkbox__control",...M(),children:T}),f&&a.jsx(je.span,{className:"chakra-checkbox__label",...D(),__css:{marginStart:c,...s.label},children:f})]})});og.displayName="Checkbox";function YF(e){const t=parseFloat(e);return typeof t!="number"||Number.isNaN(t)?0:t}function Yx(e,t){let n=YF(e);const r=10**(t??10);return n=Math.round(n*r)/r,t?n.toFixed(t):n.toString()}function tb(e){if(!Number.isFinite(e))return 0;let t=1,n=0;for(;Math.round(e*t)/t!==e;)t*=10,n+=1;return n}function Dm(e,t,n){return(e-t)*100/(n-t)}function B3(e,t,n){return(n-t)*e+t}function nb(e,t,n){const r=Math.round((e-t)/n)*n+t,o=tb(n);return Yx(r,o)}function mc(e,t,n){return e==null?e:(n{var O;return r==null?"":(O=Lv(r,s,n))!=null?O:""}),g=typeof o<"u",b=g?o:m,y=H3(Wa(b),s),x=n??y,w=i.useCallback(O=>{O!==b&&(g||h(O.toString()),f==null||f(O.toString(),Wa(O)))},[f,g,b]),S=i.useCallback(O=>{let T=O;return d&&(T=mc(T,l,c)),Yx(T,x)},[x,d,c,l]),j=i.useCallback((O=s)=>{let T;b===""?T=Wa(O):T=Wa(b)+O,T=S(T),w(T)},[S,s,w,b]),_=i.useCallback((O=s)=>{let T;b===""?T=Wa(-O):T=Wa(b)-O,T=S(T),w(T)},[S,s,w,b]),I=i.useCallback(()=>{var O;let T;r==null?T="":T=(O=Lv(r,s,n))!=null?O:l,w(T)},[r,n,s,w,l]),E=i.useCallback(O=>{var T;const U=(T=Lv(O,s,x))!=null?T:l;w(U)},[x,s,w,l]),M=Wa(b);return{isOutOfRange:M>c||M" `}),[ez,Zx]=Kt({name:"EditableContext",errorMessage:"useEditableContext: context is undefined. Seems you forgot to wrap the editable components in ``"}),V3={fontSize:"inherit",fontWeight:"inherit",textAlign:"inherit",bg:"transparent"},Zd=_e(function(t,n){const{getInputProps:r}=Zx(),o=W3(),s=r(t,n),l=et("chakra-editable__input",t.className);return a.jsx(je.input,{...s,__css:{outline:0,...V3,...o.input},className:l})});Zd.displayName="EditableInput";var Jd=_e(function(t,n){const{getPreviewProps:r}=Zx(),o=W3(),s=r(t,n),l=et("chakra-editable__preview",t.className);return a.jsx(je.span,{...s,__css:{cursor:"text",display:"inline-block",...V3,...o.preview},className:l})});Jd.displayName="EditablePreview";function Ul(e,t,n,r){const o=gn(n);return i.useEffect(()=>{const s=typeof e=="function"?e():e??document;if(!(!n||!s))return s.addEventListener(t,o,r),()=>{s.removeEventListener(t,o,r)}},[t,e,r,o,n]),()=>{const s=typeof e=="function"?e():e??document;s==null||s.removeEventListener(t,o,r)}}function tz(e){return"current"in e}var U3=()=>typeof window<"u";function nz(){var e;const t=navigator.userAgentData;return(e=t==null?void 0:t.platform)!=null?e:navigator.platform}var rz=e=>U3()&&e.test(navigator.vendor),oz=e=>U3()&&e.test(nz()),sz=()=>oz(/mac|iphone|ipad|ipod/i),az=()=>sz()&&rz(/apple/i);function G3(e){const{ref:t,elements:n,enabled:r}=e,o=()=>{var s,l;return(l=(s=t.current)==null?void 0:s.ownerDocument)!=null?l:document};Ul(o,"pointerdown",s=>{if(!az()||!r)return;const l=s.target,d=(n??[t]).some(f=>{const m=tz(f)?f.current:f;return(m==null?void 0:m.contains(l))||m===l});o().activeElement!==l&&d&&(s.preventDefault(),l.focus())})}function DS(e,t){return e?e===t||e.contains(t):!1}function lz(e={}){const{onChange:t,onCancel:n,onSubmit:r,onBlur:o,value:s,isDisabled:l,defaultValue:c,startWithEditView:d,isPreviewFocusable:f=!0,submitOnBlur:m=!0,selectAllOnFocus:h=!0,placeholder:g,onEdit:b,finalFocusRef:y,...x}=e,w=gn(b),S=!!(d&&!l),[j,_]=i.useState(S),[I,E]=qd({defaultValue:c||"",value:s,onChange:t}),[M,D]=i.useState(I),R=i.useRef(null),N=i.useRef(null),O=i.useRef(null),T=i.useRef(null),U=i.useRef(null);G3({ref:R,enabled:j,elements:[T,U]});const G=!j&&!l;dc(()=>{var z,oe;j&&((z=R.current)==null||z.focus(),h&&((oe=R.current)==null||oe.select()))},[]),ba(()=>{var z,oe,X,Z;if(!j){y?(z=y.current)==null||z.focus():(oe=O.current)==null||oe.focus();return}(X=R.current)==null||X.focus(),h&&((Z=R.current)==null||Z.select()),w==null||w()},[j,w,h]);const q=i.useCallback(()=>{G&&_(!0)},[G]),Y=i.useCallback(()=>{D(I)},[I]),Q=i.useCallback(()=>{_(!1),E(M),n==null||n(M),o==null||o(M)},[n,o,E,M]),V=i.useCallback(()=>{_(!1),D(I),r==null||r(I),o==null||o(M)},[I,r,o,M]);i.useEffect(()=>{if(j)return;const z=R.current;(z==null?void 0:z.ownerDocument.activeElement)===z&&(z==null||z.blur())},[j]);const se=i.useCallback(z=>{E(z.currentTarget.value)},[E]),ee=i.useCallback(z=>{const oe=z.key,Z={Escape:Q,Enter:me=>{!me.shiftKey&&!me.metaKey&&V()}}[oe];Z&&(z.preventDefault(),Z(z))},[Q,V]),le=i.useCallback(z=>{const oe=z.key,Z={Escape:Q}[oe];Z&&(z.preventDefault(),Z(z))},[Q]),ae=I.length===0,ce=i.useCallback(z=>{var oe;if(!j)return;const X=z.currentTarget.ownerDocument,Z=(oe=z.relatedTarget)!=null?oe:X.activeElement,me=DS(T.current,Z),ve=DS(U.current,Z);!me&&!ve&&(m?V():Q())},[m,V,Q,j]),J=i.useCallback((z={},oe=null)=>{const X=G&&f?0:void 0;return{...z,ref:Et(oe,N),children:ae?g:I,hidden:j,"aria-disabled":wo(l),tabIndex:X,onFocus:ze(z.onFocus,q,Y)}},[l,j,G,f,ae,q,Y,g,I]),re=i.useCallback((z={},oe=null)=>({...z,hidden:!j,placeholder:g,ref:Et(oe,R),disabled:l,"aria-disabled":wo(l),value:I,onBlur:ze(z.onBlur,ce),onChange:ze(z.onChange,se),onKeyDown:ze(z.onKeyDown,ee),onFocus:ze(z.onFocus,Y)}),[l,j,ce,se,ee,Y,g,I]),A=i.useCallback((z={},oe=null)=>({...z,hidden:!j,placeholder:g,ref:Et(oe,R),disabled:l,"aria-disabled":wo(l),value:I,onBlur:ze(z.onBlur,ce),onChange:ze(z.onChange,se),onKeyDown:ze(z.onKeyDown,le),onFocus:ze(z.onFocus,Y)}),[l,j,ce,se,le,Y,g,I]),L=i.useCallback((z={},oe=null)=>({"aria-label":"Edit",...z,type:"button",onClick:ze(z.onClick,q),ref:Et(oe,O),disabled:l}),[q,l]),K=i.useCallback((z={},oe=null)=>({...z,"aria-label":"Submit",ref:Et(U,oe),type:"button",onClick:ze(z.onClick,V),disabled:l}),[V,l]),ne=i.useCallback((z={},oe=null)=>({"aria-label":"Cancel",id:"cancel",...z,ref:Et(T,oe),type:"button",onClick:ze(z.onClick,Q),disabled:l}),[Q,l]);return{isEditing:j,isDisabled:l,isValueEmpty:ae,value:I,onEdit:q,onCancel:Q,onSubmit:V,getPreviewProps:J,getInputProps:re,getTextareaProps:A,getEditButtonProps:L,getSubmitButtonProps:K,getCancelButtonProps:ne,htmlProps:x}}var ef=_e(function(t,n){const r=Xn("Editable",t),o=cn(t),{htmlProps:s,...l}=lz(o),{isEditing:c,onSubmit:d,onCancel:f,onEdit:m}=l,h=et("chakra-editable",t.className),g=bx(t.children,{isEditing:c,onSubmit:d,onCancel:f,onEdit:m});return a.jsx(ez,{value:l,children:a.jsx(JF,{value:r,children:a.jsx(je.div,{ref:n,...s,className:h,children:g})})})});ef.displayName="Editable";function K3(){const{isEditing:e,getEditButtonProps:t,getCancelButtonProps:n,getSubmitButtonProps:r}=Zx();return{isEditing:e,getEditButtonProps:t,getCancelButtonProps:n,getSubmitButtonProps:r}}function iz(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var q3={exports:{}},cz="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",uz=cz,dz=uz;function X3(){}function Q3(){}Q3.resetWarningCache=X3;var fz=function(){function e(r,o,s,l,c,d){if(d!==dz){var f=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw f.name="Invariant Violation",f}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:Q3,resetWarningCache:X3};return n.PropTypes=n,n};q3.exports=fz();var pz=q3.exports;const nn=Bd(pz);var rb="data-focus-lock",Y3="data-focus-lock-disabled",mz="data-no-focus-lock",hz="data-autofocus-inside",gz="data-no-autofocus";function vz(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function bz(e,t){var n=i.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}function Z3(e,t){return bz(t||null,function(n){return e.forEach(function(r){return vz(r,n)})})}var Fv={width:"1px",height:"0px",padding:0,overflow:"hidden",position:"fixed",top:"1px",left:"1px"},ws=function(){return ws=Object.assign||function(t){for(var n,r=1,o=arguments.length;r0&&s[s.length-1])&&(f[0]===6||f[0]===2)){n=0;continue}if(f[0]===3&&(!s||f[1]>s[0]&&f[1]0)&&!(o=r.next()).done;)s.push(o.value)}catch(c){l={error:c}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(l)throw l.error}}return s}function ob(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,s;r=0}).sort(Tz)},Nz=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"],ny=Nz.join(","),$z="".concat(ny,", [data-focus-guard]"),g5=function(e,t){return Fs((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?$z:ny)?[r]:[],g5(r))},[])},Lz=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?sg([e.contentDocument.body],t):[e]},sg=function(e,t){return e.reduce(function(n,r){var o,s=g5(r,t),l=(o=[]).concat.apply(o,s.map(function(c){return Lz(c,t)}));return n.concat(l,r.parentNode?Fs(r.parentNode.querySelectorAll(ny)).filter(function(c){return c===r}):[])},[])},Fz=function(e){var t=e.querySelectorAll("[".concat(hz,"]"));return Fs(t).map(function(n){return sg([n])}).reduce(function(n,r){return n.concat(r)},[])},ry=function(e,t){return Fs(e).filter(function(n){return u5(t,n)}).filter(function(n){return Dz(n)})},AS=function(e,t){return t===void 0&&(t=new Map),Fs(e).filter(function(n){return d5(t,n)})},ab=function(e,t,n){return h5(ry(sg(e,n),t),!0,n)},TS=function(e,t){return h5(ry(sg(e),t),!1)},zz=function(e,t){return ry(Fz(e),t)},hc=function(e,t){return e.shadowRoot?hc(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:Fs(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?hc(o,t):!1}return hc(n,t)})},Bz=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(s&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(l,c){return!t.has(c)})},v5=function(e){return e.parentNode?v5(e.parentNode):e},oy=function(e){var t=Rm(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(rb);return n.push.apply(n,o?Bz(Fs(v5(r).querySelectorAll("[".concat(rb,'="').concat(o,'"]:not([').concat(Y3,'="disabled"])')))):[r]),n},[])},Hz=function(e){try{return e()}catch{return}},Cd=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?Cd(t.shadowRoot):t instanceof HTMLIFrameElement&&Hz(function(){return t.contentWindow.document})?Cd(t.contentWindow.document):t}},Wz=function(e,t){return e===t},Vz=function(e,t){return!!Fs(e.querySelectorAll("iframe")).some(function(n){return Wz(n,t)})},b5=function(e,t){return t===void 0&&(t=Cd(l5(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:oy(e).some(function(n){return hc(n,t)||Vz(n,t)})},Uz=function(e){e===void 0&&(e=document);var t=Cd(e);return t?Fs(e.querySelectorAll("[".concat(mz,"]"))).some(function(n){return hc(n,t)}):!1},Gz=function(e,t){return t.filter(m5).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},sy=function(e,t){return m5(e)&&e.name?Gz(e,t):e},Kz=function(e){var t=new Set;return e.forEach(function(n){return t.add(sy(n,e))}),e.filter(function(n){return t.has(n)})},NS=function(e){return e[0]&&e.length>1?sy(e[0],e):e[0]},$S=function(e,t){return e.length>1?e.indexOf(sy(e[t],e)):t},x5="NEW_FOCUS",qz=function(e,t,n,r){var o=e.length,s=e[0],l=e[o-1],c=ty(n);if(!(n&&e.indexOf(n)>=0)){var d=n!==void 0?t.indexOf(n):-1,f=r?t.indexOf(r):d,m=r?e.indexOf(r):-1,h=d-f,g=t.indexOf(s),b=t.indexOf(l),y=Kz(t),x=n!==void 0?y.indexOf(n):-1,w=x-(r?y.indexOf(r):d),S=$S(e,0),j=$S(e,o-1);if(d===-1||m===-1)return x5;if(!h&&m>=0)return m;if(d<=g&&c&&Math.abs(h)>1)return j;if(d>=b&&c&&Math.abs(h)>1)return S;if(h&&Math.abs(w)>1)return m;if(d<=g)return j;if(d>b)return S;if(h)return Math.abs(h)>1?m:(o+m+h)%o}},Xz=function(e){return function(t){var n,r=(n=f5(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},Qz=function(e,t,n){var r=e.map(function(s){var l=s.node;return l}),o=AS(r.filter(Xz(n)));return o&&o.length?NS(o):NS(AS(t))},lb=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&lb(e.parentNode.host||e.parentNode,t),t},zv=function(e,t){for(var n=lb(e),r=lb(t),o=0;o=0)return s}return!1},y5=function(e,t,n){var r=Rm(e),o=Rm(t),s=r[0],l=!1;return o.filter(Boolean).forEach(function(c){l=zv(l||c,c)||l,n.filter(Boolean).forEach(function(d){var f=zv(s,d);f&&(!l||hc(f,l)?l=f:l=zv(f,l))})}),l},Yz=function(e,t){return e.reduce(function(n,r){return n.concat(zz(r,t))},[])},Zz=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(Az)},Jz=function(e,t){var n=Cd(Rm(e).length>0?document:l5(e).ownerDocument),r=oy(e).filter(Am),o=y5(n||e,e,r),s=new Map,l=TS(r,s),c=ab(r,s).filter(function(b){var y=b.node;return Am(y)});if(!(!c[0]&&(c=l,!c[0]))){var d=TS([o],s).map(function(b){var y=b.node;return y}),f=Zz(d,c),m=f.map(function(b){var y=b.node;return y}),h=qz(m,d,n,t);if(h===x5){var g=Qz(l,m,Yz(r,s));if(g)return{node:g};console.warn("focus-lock: cannot find any node to move focus into");return}return h===void 0?h:f[h]}},eB=function(e){var t=oy(e).filter(Am),n=y5(e,e,t),r=new Map,o=ab([n],r,!0),s=ab(t,r).filter(function(l){var c=l.node;return Am(c)}).map(function(l){var c=l.node;return c});return o.map(function(l){var c=l.node,d=l.index;return{node:c,index:d,lockItem:s.indexOf(c)>=0,guard:ty(c)}})},tB=function(e,t){"focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus()},Bv=0,Hv=!1,C5=function(e,t,n){n===void 0&&(n={});var r=Jz(e,t);if(!Hv&&r){if(Bv>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),Hv=!0,setTimeout(function(){Hv=!1},1);return}Bv++,tB(r.node,n.focusOptions),Bv--}};function ay(e){setTimeout(e,1)}var nB=function(){return document&&document.activeElement===document.body},rB=function(){return nB()||Uz()},gc=null,sc=null,vc=null,wd=!1,oB=function(){return!0},sB=function(t){return(gc.whiteList||oB)(t)},aB=function(t,n){vc={observerNode:t,portaledElement:n}},lB=function(t){return vc&&vc.portaledElement===t};function LS(e,t,n,r){var o=null,s=e;do{var l=r[s];if(l.guard)l.node.dataset.focusAutoGuard&&(o=l);else if(l.lockItem){if(s!==e)return;o=null}else break}while((s+=n)!==t);o&&(o.node.tabIndex=0)}var iB=function(t){return t&&"current"in t?t.current:t},cB=function(t){return t?!!wd:wd==="meanwhile"},uB=function e(t,n,r){return n&&(n.host===t&&(!n.activeElement||r.contains(n.activeElement))||n.parentNode&&e(t,n.parentNode,r))},dB=function(t,n){return n.some(function(r){return uB(t,r,r)})},Tm=function(){var t=!1;if(gc){var n=gc,r=n.observed,o=n.persistentFocus,s=n.autoFocus,l=n.shards,c=n.crossFrame,d=n.focusOptions,f=r||vc&&vc.portaledElement,m=document&&document.activeElement;if(f){var h=[f].concat(l.map(iB).filter(Boolean));if((!m||sB(m))&&(o||cB(c)||!rB()||!sc&&s)&&(f&&!(b5(h)||m&&dB(m,h)||lB(m))&&(document&&!sc&&m&&!s?(m.blur&&m.blur(),document.body.focus()):(t=C5(h,sc,{focusOptions:d}),vc={})),wd=!1,sc=document&&document.activeElement),document){var g=document&&document.activeElement,b=eB(h),y=b.map(function(x){var w=x.node;return w}).indexOf(g);y>-1&&(b.filter(function(x){var w=x.guard,S=x.node;return w&&S.dataset.focusAutoGuard}).forEach(function(x){var w=x.node;return w.removeAttribute("tabIndex")}),LS(y,b.length,1,b),LS(y,-1,-1,b))}}}return t},w5=function(t){Tm()&&t&&(t.stopPropagation(),t.preventDefault())},ly=function(){return ay(Tm)},fB=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||aB(r,n)},pB=function(){return null},S5=function(){wd="just",ay(function(){wd="meanwhile"})},mB=function(){document.addEventListener("focusin",w5),document.addEventListener("focusout",ly),window.addEventListener("blur",S5)},hB=function(){document.removeEventListener("focusin",w5),document.removeEventListener("focusout",ly),window.removeEventListener("blur",S5)};function gB(e){return e.filter(function(t){var n=t.disabled;return!n})}function vB(e){var t=e.slice(-1)[0];t&&!gc&&mB();var n=gc,r=n&&t&&t.id===n.id;gc=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var s=o.id;return s===n.id}).length||n.returnFocus(!t)),t?(sc=null,(!r||n.observed!==t.observed)&&t.onActivation(),Tm(),ay(Tm)):(hB(),sc=null)}o5.assignSyncMedium(fB);s5.assignMedium(ly);yz.assignMedium(function(e){return e({moveFocusInside:C5,focusInside:b5})});const bB=Iz(gB,vB)(pB);var k5=i.forwardRef(function(t,n){return i.createElement(a5,bn({sideCar:bB,ref:n},t))}),j5=a5.propTypes||{};j5.sideCar;iz(j5,["sideCar"]);k5.propTypes={};const FS=k5;function _5(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function iy(e){var t;if(!_5(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function xB(e){var t,n;return(n=(t=I5(e))==null?void 0:t.defaultView)!=null?n:window}function I5(e){return _5(e)?e.ownerDocument:document}function yB(e){return I5(e).activeElement}function CB(e){const t=e.ownerDocument.defaultView||window,{overflow:n,overflowX:r,overflowY:o}=t.getComputedStyle(e);return/auto|scroll|overlay|hidden/.test(n+o+r)}function wB(e){return e.localName==="html"?e:e.assignedSlot||e.parentElement||e.ownerDocument.documentElement}function P5(e){return["html","body","#document"].includes(e.localName)?e.ownerDocument.body:iy(e)&&CB(e)?e:P5(wB(e))}var E5=e=>e.hasAttribute("tabindex"),SB=e=>E5(e)&&e.tabIndex===-1;function kB(e){return!!e.getAttribute("disabled")||!!e.getAttribute("aria-disabled")}function M5(e){return e.parentElement&&M5(e.parentElement)?!0:e.hidden}function jB(e){const t=e.getAttribute("contenteditable");return t!=="false"&&t!=null}function O5(e){if(!iy(e)||M5(e)||kB(e))return!1;const{localName:t}=e;if(["input","select","textarea","button"].indexOf(t)>=0)return!0;const r={a:()=>e.hasAttribute("href"),audio:()=>e.hasAttribute("controls"),video:()=>e.hasAttribute("controls")};return t in r?r[t]():jB(e)?!0:E5(e)}function _B(e){return e?iy(e)&&O5(e)&&!SB(e):!1}var IB=["input:not(:disabled):not([disabled])","select:not(:disabled):not([disabled])","textarea:not(:disabled):not([disabled])","embed","iframe","object","a[href]","area[href]","button:not(:disabled):not([disabled])","[tabindex]","audio[controls]","video[controls]","*[tabindex]:not([aria-disabled])","*[contenteditable]"],PB=IB.join(),EB=e=>e.offsetWidth>0&&e.offsetHeight>0;function D5(e){const t=Array.from(e.querySelectorAll(PB));return t.unshift(e),t.filter(n=>O5(n)&&EB(n))}var zS,MB=(zS=FS.default)!=null?zS:FS,R5=e=>{const{initialFocusRef:t,finalFocusRef:n,contentRef:r,restoreFocus:o,children:s,isDisabled:l,autoFocus:c,persistentFocus:d,lockFocusAcrossFrames:f}=e,m=i.useCallback(()=>{t!=null&&t.current?t.current.focus():r!=null&&r.current&&D5(r.current).length===0&&requestAnimationFrame(()=>{var y;(y=r.current)==null||y.focus()})},[t,r]),h=i.useCallback(()=>{var b;(b=n==null?void 0:n.current)==null||b.focus()},[n]),g=o&&!n;return a.jsx(MB,{crossFrame:f,persistentFocus:d,autoFocus:c,disabled:l,onActivation:m,onDeactivation:h,returnFocus:g,children:s})};R5.displayName="FocusLock";var OB=FL?i.useLayoutEffect:i.useEffect;function ib(e,t=[]){const n=i.useRef(e);return OB(()=>{n.current=e}),i.useCallback((...r)=>{var o;return(o=n.current)==null?void 0:o.call(n,...r)},t)}function DB(e,t,n,r){const o=ib(t);return i.useEffect(()=>{var s;const l=(s=Rw(n))!=null?s:document;if(t)return l.addEventListener(e,o,r),()=>{l.removeEventListener(e,o,r)}},[e,n,r,o,t]),()=>{var s;((s=Rw(n))!=null?s:document).removeEventListener(e,o,r)}}function RB(e,t){const n=i.useId();return i.useMemo(()=>e||[t,n].filter(Boolean).join("-"),[e,t,n])}function AB(e,t){const n=e!==void 0;return[n,n&&typeof e<"u"?e:t]}function sr(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=ib(n),l=ib(t),[c,d]=i.useState(e.defaultIsOpen||!1),[f,m]=AB(r,c),h=RB(o,"disclosure"),g=i.useCallback(()=>{f||d(!1),l==null||l()},[f,l]),b=i.useCallback(()=>{f||d(!0),s==null||s()},[f,s]),y=i.useCallback(()=>{(m?g:b)()},[m,b,g]);return{isOpen:!!m,onOpen:b,onClose:g,onToggle:y,isControlled:f,getButtonProps:(x={})=>({...x,"aria-expanded":m,"aria-controls":h,onClick:ER(x.onClick,y)}),getDisclosureProps:(x={})=>({...x,hidden:!m,id:h})}}var[TB,NB]=Kt({name:"InputGroupStylesContext",errorMessage:`useInputGroupStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),cy=_e(function(t,n){const r=Xn("Input",t),{children:o,className:s,...l}=cn(t),c=et("chakra-input__group",s),d={},f=rg(o),m=r.field;f.forEach(g=>{var b,y;r&&(m&&g.type.id==="InputLeftElement"&&(d.paddingStart=(b=m.height)!=null?b:m.h),m&&g.type.id==="InputRightElement"&&(d.paddingEnd=(y=m.height)!=null?y:m.h),g.type.id==="InputRightAddon"&&(d.borderEndRadius=0),g.type.id==="InputLeftAddon"&&(d.borderStartRadius=0))});const h=f.map(g=>{var b,y;const x=vI({size:((b=g.props)==null?void 0:b.size)||t.size,variant:((y=g.props)==null?void 0:y.variant)||t.variant});return g.type.id!=="Input"?i.cloneElement(g,x):i.cloneElement(g,Object.assign(x,d,g.props))});return a.jsx(je.div,{className:c,ref:n,__css:{width:"100%",display:"flex",position:"relative",isolation:"isolate",...r.group},"data-group":!0,...l,children:a.jsx(TB,{value:r,children:h})})});cy.displayName="InputGroup";var $B=je("div",{baseStyle:{display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",top:"0",zIndex:2}}),ag=_e(function(t,n){var r,o;const{placement:s="left",...l}=t,c=NB(),d=c.field,m={[s==="left"?"insetStart":"insetEnd"]:"0",width:(r=d==null?void 0:d.height)!=null?r:d==null?void 0:d.h,height:(o=d==null?void 0:d.height)!=null?o:d==null?void 0:d.h,fontSize:d==null?void 0:d.fontSize,...c.element};return a.jsx($B,{ref:n,__css:m,...l})});ag.id="InputElement";ag.displayName="InputElement";var A5=_e(function(t,n){const{className:r,...o}=t,s=et("chakra-input__left-element",r);return a.jsx(ag,{ref:n,placement:"left",className:s,...o})});A5.id="InputLeftElement";A5.displayName="InputLeftElement";var lg=_e(function(t,n){const{className:r,...o}=t,s=et("chakra-input__right-element",r);return a.jsx(ag,{ref:n,placement:"right",className:s,...o})});lg.id="InputRightElement";lg.displayName="InputRightElement";var Qc=_e(function(t,n){const{htmlSize:r,...o}=t,s=Xn("Input",o),l=cn(o),c=Kx(l),d=et("chakra-input",t.className);return a.jsx(je.input,{size:r,...c,__css:s.field,ref:n,className:d})});Qc.displayName="Input";Qc.id="Input";var ig=_e(function(t,n){const r=ml("Link",t),{className:o,isExternal:s,...l}=cn(t);return a.jsx(je.a,{target:s?"_blank":void 0,rel:s?"noopener":void 0,ref:n,className:et("chakra-link",o),...l,__css:r})});ig.displayName="Link";var[LB,T5]=Kt({name:"ListStylesContext",errorMessage:`useListStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),uy=_e(function(t,n){const r=Xn("List",t),{children:o,styleType:s="none",stylePosition:l,spacing:c,...d}=cn(t),f=rg(o),h=c?{["& > *:not(style) ~ *:not(style)"]:{mt:c}}:{};return a.jsx(LB,{value:r,children:a.jsx(je.ul,{ref:n,listStyleType:s,listStylePosition:l,role:"list",__css:{...r.container,...h},...d,children:f})})});uy.displayName="List";var N5=_e((e,t)=>{const{as:n,...r}=e;return a.jsx(uy,{ref:t,as:"ol",styleType:"decimal",marginStart:"1em",...r})});N5.displayName="OrderedList";var cg=_e(function(t,n){const{as:r,...o}=t;return a.jsx(uy,{ref:n,as:"ul",styleType:"initial",marginStart:"1em",...o})});cg.displayName="UnorderedList";var ts=_e(function(t,n){const r=T5();return a.jsx(je.li,{ref:n,...t,__css:r.item})});ts.displayName="ListItem";var FB=_e(function(t,n){const r=T5();return a.jsx(An,{ref:n,role:"presentation",...t,__css:r.icon})});FB.displayName="ListIcon";var sl=_e(function(t,n){const{templateAreas:r,gap:o,rowGap:s,columnGap:l,column:c,row:d,autoFlow:f,autoRows:m,templateRows:h,autoColumns:g,templateColumns:b,...y}=t,x={display:"grid",gridTemplateAreas:r,gridGap:o,gridRowGap:s,gridColumnGap:l,gridAutoColumns:g,gridColumn:c,gridRow:d,gridAutoFlow:f,gridAutoRows:m,gridTemplateRows:h,gridTemplateColumns:b};return a.jsx(je.div,{ref:n,__css:x,...y})});sl.displayName="Grid";function $5(e,t){return Array.isArray(e)?e.map(n=>n===null?null:t(n)):T1(e)?Object.keys(e).reduce((n,r)=>(n[r]=t(e[r]),n),{}):e!=null?t(e):null}var Wr=je("div",{baseStyle:{flex:1,justifySelf:"stretch",alignSelf:"stretch"}});Wr.displayName="Spacer";var L5=e=>a.jsx(je.div,{className:"chakra-stack__item",...e,__css:{display:"inline-block",flex:"0 0 auto",minWidth:0,...e.__css}});L5.displayName="StackItem";function zB(e){const{spacing:t,direction:n}=e,r={column:{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},"column-reverse":{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},row:{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0},"row-reverse":{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0}};return{"&":$5(n,o=>r[o])}}var dy=_e((e,t)=>{const{isInline:n,direction:r,align:o,justify:s,spacing:l="0.5rem",wrap:c,children:d,divider:f,className:m,shouldWrapChildren:h,...g}=e,b=n?"row":r??"column",y=i.useMemo(()=>zB({spacing:l,direction:b}),[l,b]),x=!!f,w=!h&&!x,S=i.useMemo(()=>{const _=rg(d);return w?_:_.map((I,E)=>{const M=typeof I.key<"u"?I.key:E,D=E+1===_.length,N=h?a.jsx(L5,{children:I},M):I;if(!x)return N;const O=i.cloneElement(f,{__css:y}),T=D?null:O;return a.jsxs(i.Fragment,{children:[N,T]},M)})},[f,y,x,w,h,d]),j=et("chakra-stack",m);return a.jsx(je.div,{ref:t,display:"flex",alignItems:o,justifyContent:s,flexDirection:b,flexWrap:c,gap:x?void 0:l,className:j,...g,children:S})});dy.displayName="Stack";var F5=_e((e,t)=>a.jsx(dy,{align:"center",...e,direction:"column",ref:t}));F5.displayName="VStack";var ug=_e((e,t)=>a.jsx(dy,{align:"center",...e,direction:"row",ref:t}));ug.displayName="HStack";function BS(e){return $5(e,t=>t==="auto"?"auto":`span ${t}/span ${t}`)}var Sd=_e(function(t,n){const{area:r,colSpan:o,colStart:s,colEnd:l,rowEnd:c,rowSpan:d,rowStart:f,...m}=t,h=vI({gridArea:r,gridColumn:BS(o),gridRow:BS(d),gridColumnStart:s,gridColumnEnd:l,gridRowStart:f,gridRowEnd:c});return a.jsx(je.div,{ref:n,__css:h,...m})});Sd.displayName="GridItem";var Sa=_e(function(t,n){const r=ml("Badge",t),{className:o,...s}=cn(t);return a.jsx(je.span,{ref:n,className:et("chakra-badge",t.className),...s,__css:{display:"inline-block",whiteSpace:"nowrap",verticalAlign:"middle",...r}})});Sa.displayName="Badge";var On=_e(function(t,n){const{borderLeftWidth:r,borderBottomWidth:o,borderTopWidth:s,borderRightWidth:l,borderWidth:c,borderStyle:d,borderColor:f,...m}=ml("Divider",t),{className:h,orientation:g="horizontal",__css:b,...y}=cn(t),x={vertical:{borderLeftWidth:r||l||c||"1px",height:"100%"},horizontal:{borderBottomWidth:o||s||c||"1px",width:"100%"}};return a.jsx(je.hr,{ref:n,"aria-orientation":g,...y,__css:{...m,border:"0",borderColor:f,borderStyle:d,...x[g],...b},className:et("chakra-divider",h)})});On.displayName="Divider";function BB(e){const{key:t}=e;return t.length===1||t.length>1&&/[^a-zA-Z0-9]/.test(t)}function HB(e={}){const{timeout:t=300,preventDefault:n=()=>!0}=e,[r,o]=i.useState([]),s=i.useRef(),l=()=>{s.current&&(clearTimeout(s.current),s.current=null)},c=()=>{l(),s.current=setTimeout(()=>{o([]),s.current=null},t)};i.useEffect(()=>l,[]);function d(f){return m=>{if(m.key==="Backspace"){const h=[...r];h.pop(),o(h);return}if(BB(m)){const h=r.concat(m.key);n(m)&&(m.preventDefault(),m.stopPropagation()),o(h),f(h.join("")),c()}}}return d}function WB(e,t,n,r){if(t==null)return r;if(!r)return e.find(l=>n(l).toLowerCase().startsWith(t.toLowerCase()));const o=e.filter(s=>n(s).toLowerCase().startsWith(t.toLowerCase()));if(o.length>0){let s;return o.includes(r)?(s=o.indexOf(r)+1,s===o.length&&(s=0),o[s]):(s=e.indexOf(o[0]),e[s])}return r}function VB(){const e=i.useRef(new Map),t=e.current,n=i.useCallback((o,s,l,c)=>{e.current.set(l,{type:s,el:o,options:c}),o.addEventListener(s,l,c)},[]),r=i.useCallback((o,s,l,c)=>{o.removeEventListener(s,l,c),e.current.delete(l)},[]);return i.useEffect(()=>()=>{t.forEach((o,s)=>{r(o.el,o.type,s,o.options)})},[r,t]),{add:n,remove:r}}function Wv(e){const t=e.target,{tagName:n,isContentEditable:r}=t;return n!=="INPUT"&&n!=="TEXTAREA"&&r!==!0}function z5(e={}){const{ref:t,isDisabled:n,isFocusable:r,clickOnEnter:o=!0,clickOnSpace:s=!0,onMouseDown:l,onMouseUp:c,onClick:d,onKeyDown:f,onKeyUp:m,tabIndex:h,onMouseOver:g,onMouseLeave:b,...y}=e,[x,w]=i.useState(!0),[S,j]=i.useState(!1),_=VB(),I=V=>{V&&V.tagName!=="BUTTON"&&w(!1)},E=x?h:h||0,M=n&&!r,D=i.useCallback(V=>{if(n){V.stopPropagation(),V.preventDefault();return}V.currentTarget.focus(),d==null||d(V)},[n,d]),R=i.useCallback(V=>{S&&Wv(V)&&(V.preventDefault(),V.stopPropagation(),j(!1),_.remove(document,"keyup",R,!1))},[S,_]),N=i.useCallback(V=>{if(f==null||f(V),n||V.defaultPrevented||V.metaKey||!Wv(V.nativeEvent)||x)return;const se=o&&V.key==="Enter";s&&V.key===" "&&(V.preventDefault(),j(!0)),se&&(V.preventDefault(),V.currentTarget.click()),_.add(document,"keyup",R,!1)},[n,x,f,o,s,_,R]),O=i.useCallback(V=>{if(m==null||m(V),n||V.defaultPrevented||V.metaKey||!Wv(V.nativeEvent)||x)return;s&&V.key===" "&&(V.preventDefault(),j(!1),V.currentTarget.click())},[s,x,n,m]),T=i.useCallback(V=>{V.button===0&&(j(!1),_.remove(document,"mouseup",T,!1))},[_]),U=i.useCallback(V=>{if(V.button!==0)return;if(n){V.stopPropagation(),V.preventDefault();return}x||j(!0),V.currentTarget.focus({preventScroll:!0}),_.add(document,"mouseup",T,!1),l==null||l(V)},[n,x,l,_,T]),G=i.useCallback(V=>{V.button===0&&(x||j(!1),c==null||c(V))},[c,x]),q=i.useCallback(V=>{if(n){V.preventDefault();return}g==null||g(V)},[n,g]),Y=i.useCallback(V=>{S&&(V.preventDefault(),j(!1)),b==null||b(V)},[S,b]),Q=Et(t,I);return x?{...y,ref:Q,type:"button","aria-disabled":M?void 0:n,disabled:M,onClick:D,onMouseDown:l,onMouseUp:c,onKeyUp:m,onKeyDown:f,onMouseOver:g,onMouseLeave:b}:{...y,ref:Q,role:"button","data-active":ut(S),"aria-disabled":n?"true":void 0,tabIndex:M?void 0:E,onClick:D,onMouseDown:U,onMouseUp:G,onKeyUp:O,onKeyDown:N,onMouseOver:q,onMouseLeave:Y}}function UB(e){const t=e.current;if(!t)return!1;const n=yB(t);return!n||t.contains(n)?!1:!!_B(n)}function B5(e,t){const{shouldFocus:n,visible:r,focusRef:o}=t,s=n&&!r;ba(()=>{if(!s||UB(e))return;const l=(o==null?void 0:o.current)||e.current;let c;if(l)return c=requestAnimationFrame(()=>{l.focus({preventScroll:!0})}),()=>{cancelAnimationFrame(c)}},[s,e,o])}var GB={preventScroll:!0,shouldFocus:!1};function KB(e,t=GB){const{focusRef:n,preventScroll:r,shouldFocus:o,visible:s}=t,l=qB(e)?e.current:e,c=o&&s,d=i.useRef(c),f=i.useRef(s);dc(()=>{!f.current&&s&&(d.current=c),f.current=s},[s,c]);const m=i.useCallback(()=>{if(!(!s||!l||!d.current)&&(d.current=!1,!l.contains(document.activeElement)))if(n!=null&&n.current)requestAnimationFrame(()=>{var h;(h=n.current)==null||h.focus({preventScroll:r})});else{const h=D5(l);h.length>0&&requestAnimationFrame(()=>{h[0].focus({preventScroll:r})})}},[s,r,l,n]);ba(()=>{m()},[m]),Ul(l,"transitionend",m)}function qB(e){return"current"in e}var Li=(e,t)=>({var:e,varRef:t?`var(${e}, ${t})`:`var(${e})`}),Fn={arrowShadowColor:Li("--popper-arrow-shadow-color"),arrowSize:Li("--popper-arrow-size","8px"),arrowSizeHalf:Li("--popper-arrow-size-half"),arrowBg:Li("--popper-arrow-bg"),transformOrigin:Li("--popper-transform-origin"),arrowOffset:Li("--popper-arrow-offset")};function XB(e){if(e.includes("top"))return"1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("bottom"))return"-1px -1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("right"))return"-1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("left"))return"1px -1px 0px 0 var(--popper-arrow-shadow-color)"}var QB={top:"bottom center","top-start":"bottom left","top-end":"bottom right",bottom:"top center","bottom-start":"top left","bottom-end":"top right",left:"right center","left-start":"right top","left-end":"right bottom",right:"left center","right-start":"left top","right-end":"left bottom"},YB=e=>QB[e],HS={scroll:!0,resize:!0};function ZB(e){let t;return typeof e=="object"?t={enabled:!0,options:{...HS,...e}}:t={enabled:e,options:HS},t}var JB={name:"matchWidth",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:({state:e})=>{e.styles.popper.width=`${e.rects.reference.width}px`},effect:({state:e})=>()=>{const t=e.elements.reference;e.elements.popper.style.width=`${t.offsetWidth}px`}},eH={name:"transformOrigin",enabled:!0,phase:"write",fn:({state:e})=>{WS(e)},effect:({state:e})=>()=>{WS(e)}},WS=e=>{e.elements.popper.style.setProperty(Fn.transformOrigin.var,YB(e.placement))},tH={name:"positionArrow",enabled:!0,phase:"afterWrite",fn:({state:e})=>{nH(e)}},nH=e=>{var t;if(!e.placement)return;const n=rH(e.placement);if((t=e.elements)!=null&&t.arrow&&n){Object.assign(e.elements.arrow.style,{[n.property]:n.value,width:Fn.arrowSize.varRef,height:Fn.arrowSize.varRef,zIndex:-1});const r={[Fn.arrowSizeHalf.var]:`calc(${Fn.arrowSize.varRef} / 2 - 1px)`,[Fn.arrowOffset.var]:`calc(${Fn.arrowSizeHalf.varRef} * -1)`};for(const o in r)e.elements.arrow.style.setProperty(o,r[o])}},rH=e=>{if(e.startsWith("top"))return{property:"bottom",value:Fn.arrowOffset.varRef};if(e.startsWith("bottom"))return{property:"top",value:Fn.arrowOffset.varRef};if(e.startsWith("left"))return{property:"right",value:Fn.arrowOffset.varRef};if(e.startsWith("right"))return{property:"left",value:Fn.arrowOffset.varRef}},oH={name:"innerArrow",enabled:!0,phase:"main",requires:["arrow"],fn:({state:e})=>{VS(e)},effect:({state:e})=>()=>{VS(e)}},VS=e=>{if(!e.elements.arrow)return;const t=e.elements.arrow.querySelector("[data-popper-arrow-inner]");if(!t)return;const n=XB(e.placement);n&&t.style.setProperty("--popper-arrow-default-shadow",n),Object.assign(t.style,{transform:"rotate(45deg)",background:Fn.arrowBg.varRef,top:0,left:0,width:"100%",height:"100%",position:"absolute",zIndex:"inherit",boxShadow:"var(--popper-arrow-shadow, var(--popper-arrow-default-shadow))"})},sH={"start-start":{ltr:"left-start",rtl:"right-start"},"start-end":{ltr:"left-end",rtl:"right-end"},"end-start":{ltr:"right-start",rtl:"left-start"},"end-end":{ltr:"right-end",rtl:"left-end"},start:{ltr:"left",rtl:"right"},end:{ltr:"right",rtl:"left"}},aH={"auto-start":"auto-end","auto-end":"auto-start","top-start":"top-end","top-end":"top-start","bottom-start":"bottom-end","bottom-end":"bottom-start"};function lH(e,t="ltr"){var n,r;const o=((n=sH[e])==null?void 0:n[t])||e;return t==="ltr"?o:(r=aH[e])!=null?r:o}var Lr="top",_o="bottom",Io="right",Fr="left",fy="auto",tf=[Lr,_o,Io,Fr],Ic="start",kd="end",iH="clippingParents",H5="viewport",Lu="popper",cH="reference",US=tf.reduce(function(e,t){return e.concat([t+"-"+Ic,t+"-"+kd])},[]),W5=[].concat(tf,[fy]).reduce(function(e,t){return e.concat([t,t+"-"+Ic,t+"-"+kd])},[]),uH="beforeRead",dH="read",fH="afterRead",pH="beforeMain",mH="main",hH="afterMain",gH="beforeWrite",vH="write",bH="afterWrite",xH=[uH,dH,fH,pH,mH,hH,gH,vH,bH];function Es(e){return e?(e.nodeName||"").toLowerCase():null}function so(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ei(e){var t=so(e).Element;return e instanceof t||e instanceof Element}function So(e){var t=so(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function py(e){if(typeof ShadowRoot>"u")return!1;var t=so(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function yH(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!So(s)||!Es(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(l){var c=o[l];c===!1?s.removeAttribute(l):s.setAttribute(l,c===!0?"":c)}))})}function CH(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],s=t.attributes[r]||{},l=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),c=l.reduce(function(d,f){return d[f]="",d},{});!So(o)||!Es(o)||(Object.assign(o.style,c),Object.keys(s).forEach(function(d){o.removeAttribute(d)}))})}}const wH={name:"applyStyles",enabled:!0,phase:"write",fn:yH,effect:CH,requires:["computeStyles"]};function Is(e){return e.split("-")[0]}var Gl=Math.max,Nm=Math.min,Pc=Math.round;function cb(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function V5(){return!/^((?!chrome|android).)*safari/i.test(cb())}function Ec(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),o=1,s=1;t&&So(e)&&(o=e.offsetWidth>0&&Pc(r.width)/e.offsetWidth||1,s=e.offsetHeight>0&&Pc(r.height)/e.offsetHeight||1);var l=ei(e)?so(e):window,c=l.visualViewport,d=!V5()&&n,f=(r.left+(d&&c?c.offsetLeft:0))/o,m=(r.top+(d&&c?c.offsetTop:0))/s,h=r.width/o,g=r.height/s;return{width:h,height:g,top:m,right:f+h,bottom:m+g,left:f,x:f,y:m}}function my(e){var t=Ec(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function U5(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&py(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function ca(e){return so(e).getComputedStyle(e)}function SH(e){return["table","td","th"].indexOf(Es(e))>=0}function gl(e){return((ei(e)?e.ownerDocument:e.document)||window.document).documentElement}function dg(e){return Es(e)==="html"?e:e.assignedSlot||e.parentNode||(py(e)?e.host:null)||gl(e)}function GS(e){return!So(e)||ca(e).position==="fixed"?null:e.offsetParent}function kH(e){var t=/firefox/i.test(cb()),n=/Trident/i.test(cb());if(n&&So(e)){var r=ca(e);if(r.position==="fixed")return null}var o=dg(e);for(py(o)&&(o=o.host);So(o)&&["html","body"].indexOf(Es(o))<0;){var s=ca(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function nf(e){for(var t=so(e),n=GS(e);n&&SH(n)&&ca(n).position==="static";)n=GS(n);return n&&(Es(n)==="html"||Es(n)==="body"&&ca(n).position==="static")?t:n||kH(e)||t}function hy(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function ad(e,t,n){return Gl(e,Nm(t,n))}function jH(e,t,n){var r=ad(e,t,n);return r>n?n:r}function G5(){return{top:0,right:0,bottom:0,left:0}}function K5(e){return Object.assign({},G5(),e)}function q5(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var _H=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,K5(typeof t!="number"?t:q5(t,tf))};function IH(e){var t,n=e.state,r=e.name,o=e.options,s=n.elements.arrow,l=n.modifiersData.popperOffsets,c=Is(n.placement),d=hy(c),f=[Fr,Io].indexOf(c)>=0,m=f?"height":"width";if(!(!s||!l)){var h=_H(o.padding,n),g=my(s),b=d==="y"?Lr:Fr,y=d==="y"?_o:Io,x=n.rects.reference[m]+n.rects.reference[d]-l[d]-n.rects.popper[m],w=l[d]-n.rects.reference[d],S=nf(s),j=S?d==="y"?S.clientHeight||0:S.clientWidth||0:0,_=x/2-w/2,I=h[b],E=j-g[m]-h[y],M=j/2-g[m]/2+_,D=ad(I,M,E),R=d;n.modifiersData[r]=(t={},t[R]=D,t.centerOffset=D-M,t)}}function PH(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||U5(t.elements.popper,o)&&(t.elements.arrow=o))}const EH={name:"arrow",enabled:!0,phase:"main",fn:IH,effect:PH,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Mc(e){return e.split("-")[1]}var MH={top:"auto",right:"auto",bottom:"auto",left:"auto"};function OH(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:Pc(n*o)/o||0,y:Pc(r*o)/o||0}}function KS(e){var t,n=e.popper,r=e.popperRect,o=e.placement,s=e.variation,l=e.offsets,c=e.position,d=e.gpuAcceleration,f=e.adaptive,m=e.roundOffsets,h=e.isFixed,g=l.x,b=g===void 0?0:g,y=l.y,x=y===void 0?0:y,w=typeof m=="function"?m({x:b,y:x}):{x:b,y:x};b=w.x,x=w.y;var S=l.hasOwnProperty("x"),j=l.hasOwnProperty("y"),_=Fr,I=Lr,E=window;if(f){var M=nf(n),D="clientHeight",R="clientWidth";if(M===so(n)&&(M=gl(n),ca(M).position!=="static"&&c==="absolute"&&(D="scrollHeight",R="scrollWidth")),M=M,o===Lr||(o===Fr||o===Io)&&s===kd){I=_o;var N=h&&M===E&&E.visualViewport?E.visualViewport.height:M[D];x-=N-r.height,x*=d?1:-1}if(o===Fr||(o===Lr||o===_o)&&s===kd){_=Io;var O=h&&M===E&&E.visualViewport?E.visualViewport.width:M[R];b-=O-r.width,b*=d?1:-1}}var T=Object.assign({position:c},f&&MH),U=m===!0?OH({x:b,y:x},so(n)):{x:b,y:x};if(b=U.x,x=U.y,d){var G;return Object.assign({},T,(G={},G[I]=j?"0":"",G[_]=S?"0":"",G.transform=(E.devicePixelRatio||1)<=1?"translate("+b+"px, "+x+"px)":"translate3d("+b+"px, "+x+"px, 0)",G))}return Object.assign({},T,(t={},t[I]=j?x+"px":"",t[_]=S?b+"px":"",t.transform="",t))}function DH(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,s=n.adaptive,l=s===void 0?!0:s,c=n.roundOffsets,d=c===void 0?!0:c,f={placement:Is(t.placement),variation:Mc(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,KS(Object.assign({},f,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:l,roundOffsets:d})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,KS(Object.assign({},f,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:d})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const RH={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:DH,data:{}};var jp={passive:!0};function AH(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,s=o===void 0?!0:o,l=r.resize,c=l===void 0?!0:l,d=so(t.elements.popper),f=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&f.forEach(function(m){m.addEventListener("scroll",n.update,jp)}),c&&d.addEventListener("resize",n.update,jp),function(){s&&f.forEach(function(m){m.removeEventListener("scroll",n.update,jp)}),c&&d.removeEventListener("resize",n.update,jp)}}const TH={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:AH,data:{}};var NH={left:"right",right:"left",bottom:"top",top:"bottom"};function am(e){return e.replace(/left|right|bottom|top/g,function(t){return NH[t]})}var $H={start:"end",end:"start"};function qS(e){return e.replace(/start|end/g,function(t){return $H[t]})}function gy(e){var t=so(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function vy(e){return Ec(gl(e)).left+gy(e).scrollLeft}function LH(e,t){var n=so(e),r=gl(e),o=n.visualViewport,s=r.clientWidth,l=r.clientHeight,c=0,d=0;if(o){s=o.width,l=o.height;var f=V5();(f||!f&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:l,x:c+vy(e),y:d}}function FH(e){var t,n=gl(e),r=gy(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=Gl(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),l=Gl(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),c=-r.scrollLeft+vy(e),d=-r.scrollTop;return ca(o||n).direction==="rtl"&&(c+=Gl(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:l,x:c,y:d}}function by(e){var t=ca(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function X5(e){return["html","body","#document"].indexOf(Es(e))>=0?e.ownerDocument.body:So(e)&&by(e)?e:X5(dg(e))}function ld(e,t){var n;t===void 0&&(t=[]);var r=X5(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=so(r),l=o?[s].concat(s.visualViewport||[],by(r)?r:[]):r,c=t.concat(l);return o?c:c.concat(ld(dg(l)))}function ub(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function zH(e,t){var n=Ec(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function XS(e,t,n){return t===H5?ub(LH(e,n)):ei(t)?zH(t,n):ub(FH(gl(e)))}function BH(e){var t=ld(dg(e)),n=["absolute","fixed"].indexOf(ca(e).position)>=0,r=n&&So(e)?nf(e):e;return ei(r)?t.filter(function(o){return ei(o)&&U5(o,r)&&Es(o)!=="body"}):[]}function HH(e,t,n,r){var o=t==="clippingParents"?BH(e):[].concat(t),s=[].concat(o,[n]),l=s[0],c=s.reduce(function(d,f){var m=XS(e,f,r);return d.top=Gl(m.top,d.top),d.right=Nm(m.right,d.right),d.bottom=Nm(m.bottom,d.bottom),d.left=Gl(m.left,d.left),d},XS(e,l,r));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}function Q5(e){var t=e.reference,n=e.element,r=e.placement,o=r?Is(r):null,s=r?Mc(r):null,l=t.x+t.width/2-n.width/2,c=t.y+t.height/2-n.height/2,d;switch(o){case Lr:d={x:l,y:t.y-n.height};break;case _o:d={x:l,y:t.y+t.height};break;case Io:d={x:t.x+t.width,y:c};break;case Fr:d={x:t.x-n.width,y:c};break;default:d={x:t.x,y:t.y}}var f=o?hy(o):null;if(f!=null){var m=f==="y"?"height":"width";switch(s){case Ic:d[f]=d[f]-(t[m]/2-n[m]/2);break;case kd:d[f]=d[f]+(t[m]/2-n[m]/2);break}}return d}function jd(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,s=n.strategy,l=s===void 0?e.strategy:s,c=n.boundary,d=c===void 0?iH:c,f=n.rootBoundary,m=f===void 0?H5:f,h=n.elementContext,g=h===void 0?Lu:h,b=n.altBoundary,y=b===void 0?!1:b,x=n.padding,w=x===void 0?0:x,S=K5(typeof w!="number"?w:q5(w,tf)),j=g===Lu?cH:Lu,_=e.rects.popper,I=e.elements[y?j:g],E=HH(ei(I)?I:I.contextElement||gl(e.elements.popper),d,m,l),M=Ec(e.elements.reference),D=Q5({reference:M,element:_,strategy:"absolute",placement:o}),R=ub(Object.assign({},_,D)),N=g===Lu?R:M,O={top:E.top-N.top+S.top,bottom:N.bottom-E.bottom+S.bottom,left:E.left-N.left+S.left,right:N.right-E.right+S.right},T=e.modifiersData.offset;if(g===Lu&&T){var U=T[o];Object.keys(O).forEach(function(G){var q=[Io,_o].indexOf(G)>=0?1:-1,Y=[Lr,_o].indexOf(G)>=0?"y":"x";O[G]+=U[Y]*q})}return O}function WH(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,s=n.rootBoundary,l=n.padding,c=n.flipVariations,d=n.allowedAutoPlacements,f=d===void 0?W5:d,m=Mc(r),h=m?c?US:US.filter(function(y){return Mc(y)===m}):tf,g=h.filter(function(y){return f.indexOf(y)>=0});g.length===0&&(g=h);var b=g.reduce(function(y,x){return y[x]=jd(e,{placement:x,boundary:o,rootBoundary:s,padding:l})[Is(x)],y},{});return Object.keys(b).sort(function(y,x){return b[y]-b[x]})}function VH(e){if(Is(e)===fy)return[];var t=am(e);return[qS(e),t,qS(t)]}function UH(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,l=n.altAxis,c=l===void 0?!0:l,d=n.fallbackPlacements,f=n.padding,m=n.boundary,h=n.rootBoundary,g=n.altBoundary,b=n.flipVariations,y=b===void 0?!0:b,x=n.allowedAutoPlacements,w=t.options.placement,S=Is(w),j=S===w,_=d||(j||!y?[am(w)]:VH(w)),I=[w].concat(_).reduce(function(re,A){return re.concat(Is(A)===fy?WH(t,{placement:A,boundary:m,rootBoundary:h,padding:f,flipVariations:y,allowedAutoPlacements:x}):A)},[]),E=t.rects.reference,M=t.rects.popper,D=new Map,R=!0,N=I[0],O=0;O=0,Y=q?"width":"height",Q=jd(t,{placement:T,boundary:m,rootBoundary:h,altBoundary:g,padding:f}),V=q?G?Io:Fr:G?_o:Lr;E[Y]>M[Y]&&(V=am(V));var se=am(V),ee=[];if(s&&ee.push(Q[U]<=0),c&&ee.push(Q[V]<=0,Q[se]<=0),ee.every(function(re){return re})){N=T,R=!1;break}D.set(T,ee)}if(R)for(var le=y?3:1,ae=function(A){var L=I.find(function(K){var ne=D.get(K);if(ne)return ne.slice(0,A).every(function(z){return z})});if(L)return N=L,"break"},ce=le;ce>0;ce--){var J=ae(ce);if(J==="break")break}t.placement!==N&&(t.modifiersData[r]._skip=!0,t.placement=N,t.reset=!0)}}const GH={name:"flip",enabled:!0,phase:"main",fn:UH,requiresIfExists:["offset"],data:{_skip:!1}};function QS(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function YS(e){return[Lr,Io,_o,Fr].some(function(t){return e[t]>=0})}function KH(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,l=jd(t,{elementContext:"reference"}),c=jd(t,{altBoundary:!0}),d=QS(l,r),f=QS(c,o,s),m=YS(d),h=YS(f);t.modifiersData[n]={referenceClippingOffsets:d,popperEscapeOffsets:f,isReferenceHidden:m,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":h})}const qH={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:KH};function XH(e,t,n){var r=Is(e),o=[Fr,Lr].indexOf(r)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,l=s[0],c=s[1];return l=l||0,c=(c||0)*o,[Fr,Io].indexOf(r)>=0?{x:c,y:l}:{x:l,y:c}}function QH(e){var t=e.state,n=e.options,r=e.name,o=n.offset,s=o===void 0?[0,0]:o,l=W5.reduce(function(m,h){return m[h]=XH(h,t.rects,s),m},{}),c=l[t.placement],d=c.x,f=c.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=f),t.modifiersData[r]=l}const YH={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:QH};function ZH(e){var t=e.state,n=e.name;t.modifiersData[n]=Q5({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const JH={name:"popperOffsets",enabled:!0,phase:"read",fn:ZH,data:{}};function eW(e){return e==="x"?"y":"x"}function tW(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=o===void 0?!0:o,l=n.altAxis,c=l===void 0?!1:l,d=n.boundary,f=n.rootBoundary,m=n.altBoundary,h=n.padding,g=n.tether,b=g===void 0?!0:g,y=n.tetherOffset,x=y===void 0?0:y,w=jd(t,{boundary:d,rootBoundary:f,padding:h,altBoundary:m}),S=Is(t.placement),j=Mc(t.placement),_=!j,I=hy(S),E=eW(I),M=t.modifiersData.popperOffsets,D=t.rects.reference,R=t.rects.popper,N=typeof x=="function"?x(Object.assign({},t.rects,{placement:t.placement})):x,O=typeof N=="number"?{mainAxis:N,altAxis:N}:Object.assign({mainAxis:0,altAxis:0},N),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,U={x:0,y:0};if(M){if(s){var G,q=I==="y"?Lr:Fr,Y=I==="y"?_o:Io,Q=I==="y"?"height":"width",V=M[I],se=V+w[q],ee=V-w[Y],le=b?-R[Q]/2:0,ae=j===Ic?D[Q]:R[Q],ce=j===Ic?-R[Q]:-D[Q],J=t.elements.arrow,re=b&&J?my(J):{width:0,height:0},A=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:G5(),L=A[q],K=A[Y],ne=ad(0,D[Q],re[Q]),z=_?D[Q]/2-le-ne-L-O.mainAxis:ae-ne-L-O.mainAxis,oe=_?-D[Q]/2+le+ne+K+O.mainAxis:ce+ne+K+O.mainAxis,X=t.elements.arrow&&nf(t.elements.arrow),Z=X?I==="y"?X.clientTop||0:X.clientLeft||0:0,me=(G=T==null?void 0:T[I])!=null?G:0,ve=V+z-me-Z,de=V+oe-me,ke=ad(b?Nm(se,ve):se,V,b?Gl(ee,de):ee);M[I]=ke,U[I]=ke-V}if(c){var we,Re=I==="x"?Lr:Fr,Qe=I==="x"?_o:Io,$e=M[E],vt=E==="y"?"height":"width",it=$e+w[Re],ot=$e-w[Qe],Ce=[Lr,Fr].indexOf(S)!==-1,Me=(we=T==null?void 0:T[E])!=null?we:0,qe=Ce?it:$e-D[vt]-R[vt]-Me+O.altAxis,dt=Ce?$e+D[vt]+R[vt]-Me-O.altAxis:ot,ye=b&&Ce?jH(qe,$e,dt):ad(b?qe:it,$e,b?dt:ot);M[E]=ye,U[E]=ye-$e}t.modifiersData[r]=U}}const nW={name:"preventOverflow",enabled:!0,phase:"main",fn:tW,requiresIfExists:["offset"]};function rW(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function oW(e){return e===so(e)||!So(e)?gy(e):rW(e)}function sW(e){var t=e.getBoundingClientRect(),n=Pc(t.width)/e.offsetWidth||1,r=Pc(t.height)/e.offsetHeight||1;return n!==1||r!==1}function aW(e,t,n){n===void 0&&(n=!1);var r=So(t),o=So(t)&&sW(t),s=gl(t),l=Ec(e,o,n),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(r||!r&&!n)&&((Es(t)!=="body"||by(s))&&(c=oW(t)),So(t)?(d=Ec(t,!0),d.x+=t.clientLeft,d.y+=t.clientTop):s&&(d.x=vy(s))),{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function lW(e){var t=new Map,n=new Set,r=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var l=[].concat(s.requires||[],s.requiresIfExists||[]);l.forEach(function(c){if(!n.has(c)){var d=t.get(c);d&&o(d)}}),r.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),r}function iW(e){var t=lW(e);return xH.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function cW(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function uW(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var ZS={placement:"bottom",modifiers:[],strategy:"absolute"};function JS(){for(var e=arguments.length,t=new Array(e),n=0;n{}),_=i.useCallback(()=>{var O;!t||!y.current||!x.current||((O=j.current)==null||O.call(j),w.current=pW(y.current,x.current,{placement:S,modifiers:[oH,tH,eH,{...JB,enabled:!!g},{name:"eventListeners",...ZB(l)},{name:"arrow",options:{padding:s}},{name:"offset",options:{offset:c??[0,d]}},{name:"flip",enabled:!!f,options:{padding:8}},{name:"preventOverflow",enabled:!!h,options:{boundary:m}},...n??[]],strategy:o}),w.current.forceUpdate(),j.current=w.current.destroy)},[S,t,n,g,l,s,c,d,f,h,m,o]);i.useEffect(()=>()=>{var O;!y.current&&!x.current&&((O=w.current)==null||O.destroy(),w.current=null)},[]);const I=i.useCallback(O=>{y.current=O,_()},[_]),E=i.useCallback((O={},T=null)=>({...O,ref:Et(I,T)}),[I]),M=i.useCallback(O=>{x.current=O,_()},[_]),D=i.useCallback((O={},T=null)=>({...O,ref:Et(M,T),style:{...O.style,position:o,minWidth:g?void 0:"max-content",inset:"0 auto auto 0"}}),[o,M,g]),R=i.useCallback((O={},T=null)=>{const{size:U,shadowColor:G,bg:q,style:Y,...Q}=O;return{...Q,ref:T,"data-popper-arrow":"",style:mW(O)}},[]),N=i.useCallback((O={},T=null)=>({...O,ref:T,"data-popper-arrow-inner":""}),[]);return{update(){var O;(O=w.current)==null||O.update()},forceUpdate(){var O;(O=w.current)==null||O.forceUpdate()},transformOrigin:Fn.transformOrigin.varRef,referenceRef:I,popperRef:M,getPopperProps:D,getArrowProps:R,getArrowInnerProps:N,getReferenceProps:E}}function mW(e){const{size:t,shadowColor:n,bg:r,style:o}=e,s={...o,position:"absolute"};return t&&(s["--popper-arrow-size"]=t),n&&(s["--popper-arrow-shadow-color"]=n),r&&(s["--popper-arrow-bg"]=r),s}function yy(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=gn(n),l=gn(t),[c,d]=i.useState(e.defaultIsOpen||!1),f=r!==void 0?r:c,m=r!==void 0,h=i.useId(),g=o??`disclosure-${h}`,b=i.useCallback(()=>{m||d(!1),l==null||l()},[m,l]),y=i.useCallback(()=>{m||d(!0),s==null||s()},[m,s]),x=i.useCallback(()=>{f?b():y()},[f,y,b]);function w(j={}){return{...j,"aria-expanded":f,"aria-controls":g,onClick(_){var I;(I=j.onClick)==null||I.call(j,_),x()}}}function S(j={}){return{...j,hidden:!f,id:g}}return{isOpen:f,onOpen:y,onClose:b,onToggle:x,isControlled:m,getButtonProps:w,getDisclosureProps:S}}function hW(e){const{ref:t,handler:n,enabled:r=!0}=e,o=gn(n),l=i.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}).current;i.useEffect(()=>{if(!r)return;const c=h=>{Vv(h,t)&&(l.isPointerDown=!0)},d=h=>{if(l.ignoreEmulatedMouseEvents){l.ignoreEmulatedMouseEvents=!1;return}l.isPointerDown&&n&&Vv(h,t)&&(l.isPointerDown=!1,o(h))},f=h=>{l.ignoreEmulatedMouseEvents=!0,n&&l.isPointerDown&&Vv(h,t)&&(l.isPointerDown=!1,o(h))},m=Y5(t.current);return m.addEventListener("mousedown",c,!0),m.addEventListener("mouseup",d,!0),m.addEventListener("touchstart",c,!0),m.addEventListener("touchend",f,!0),()=>{m.removeEventListener("mousedown",c,!0),m.removeEventListener("mouseup",d,!0),m.removeEventListener("touchstart",c,!0),m.removeEventListener("touchend",f,!0)}},[n,t,o,l,r])}function Vv(e,t){var n;const r=e.target;return r&&!Y5(r).contains(r)?!1:!((n=t.current)!=null&&n.contains(r))}function Y5(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function Z5(e){const{isOpen:t,ref:n}=e,[r,o]=i.useState(t),[s,l]=i.useState(!1);return i.useEffect(()=>{s||(o(t),l(!0))},[t,s,r]),Ul(()=>n.current,"animationend",()=>{o(t)}),{present:!(t?!1:!r),onComplete(){var d;const f=xB(n.current),m=new f.CustomEvent("animationend",{bubbles:!0});(d=n.current)==null||d.dispatchEvent(m)}}}function Cy(e){const{wasSelected:t,enabled:n,isSelected:r,mode:o="unmount"}=e;return!!(!n||r||o==="keepMounted"&&t)}var[gW,vW,bW,xW]=Vx(),[yW,rf]=Kt({strict:!1,name:"MenuContext"});function CW(e,...t){const n=i.useId(),r=e||n;return i.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}function J5(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function e4(e){return J5(e).activeElement===e}function wW(e={}){const{id:t,closeOnSelect:n=!0,closeOnBlur:r=!0,initialFocusRef:o,autoSelect:s=!0,isLazy:l,isOpen:c,defaultIsOpen:d,onClose:f,onOpen:m,placement:h="bottom-start",lazyBehavior:g="unmount",direction:b,computePositionOnMount:y=!1,...x}=e,w=i.useRef(null),S=i.useRef(null),j=bW(),_=i.useCallback(()=>{requestAnimationFrame(()=>{var J;(J=w.current)==null||J.focus({preventScroll:!1})})},[]),I=i.useCallback(()=>{const J=setTimeout(()=>{var re;if(o)(re=o.current)==null||re.focus();else{const A=j.firstEnabled();A&&G(A.index)}});se.current.add(J)},[j,o]),E=i.useCallback(()=>{const J=setTimeout(()=>{const re=j.lastEnabled();re&&G(re.index)});se.current.add(J)},[j]),M=i.useCallback(()=>{m==null||m(),s?I():_()},[s,I,_,m]),{isOpen:D,onOpen:R,onClose:N,onToggle:O}=yy({isOpen:c,defaultIsOpen:d,onClose:f,onOpen:M});hW({enabled:D&&r,ref:w,handler:J=>{var re;(re=S.current)!=null&&re.contains(J.target)||N()}});const T=xy({...x,enabled:D||y,placement:h,direction:b}),[U,G]=i.useState(-1);ba(()=>{D||G(-1)},[D]),B5(w,{focusRef:S,visible:D,shouldFocus:!0});const q=Z5({isOpen:D,ref:w}),[Y,Q]=CW(t,"menu-button","menu-list"),V=i.useCallback(()=>{R(),_()},[R,_]),se=i.useRef(new Set([]));i.useEffect(()=>{const J=se.current;return()=>{J.forEach(re=>clearTimeout(re)),J.clear()}},[]);const ee=i.useCallback(()=>{R(),I()},[I,R]),le=i.useCallback(()=>{R(),E()},[R,E]),ae=i.useCallback(()=>{var J,re;const A=J5(w.current),L=(J=w.current)==null?void 0:J.contains(A.activeElement);if(!(D&&!L))return;const ne=(re=j.item(U))==null?void 0:re.node;ne==null||ne.focus({preventScroll:!0})},[D,U,j]),ce=i.useRef(null);return{openAndFocusMenu:V,openAndFocusFirstItem:ee,openAndFocusLastItem:le,onTransitionEnd:ae,unstable__animationState:q,descendants:j,popper:T,buttonId:Y,menuId:Q,forceUpdate:T.forceUpdate,orientation:"vertical",isOpen:D,onToggle:O,onOpen:R,onClose:N,menuRef:w,buttonRef:S,focusedIndex:U,closeOnSelect:n,closeOnBlur:r,autoSelect:s,setFocusedIndex:G,isLazy:l,lazyBehavior:g,initialFocusRef:o,rafId:ce}}function SW(e={},t=null){const n=rf(),{onToggle:r,popper:o,openAndFocusFirstItem:s,openAndFocusLastItem:l}=n,c=i.useCallback(d=>{const f=d.key,h={Enter:s,ArrowDown:s,ArrowUp:l}[f];h&&(d.preventDefault(),d.stopPropagation(),h(d))},[s,l]);return{...e,ref:Et(n.buttonRef,t,o.referenceRef),id:n.buttonId,"data-active":ut(n.isOpen),"aria-expanded":n.isOpen,"aria-haspopup":"menu","aria-controls":n.menuId,onClick:ze(e.onClick,r),onKeyDown:ze(e.onKeyDown,c)}}function db(e){var t;return IW(e)&&!!((t=e==null?void 0:e.getAttribute("role"))!=null&&t.startsWith("menuitem"))}function kW(e={},t=null){const n=rf();if(!n)throw new Error("useMenuContext: context is undefined. Seems you forgot to wrap component within
");const{focusedIndex:r,setFocusedIndex:o,menuRef:s,isOpen:l,onClose:c,menuId:d,isLazy:f,lazyBehavior:m,unstable__animationState:h}=n,g=vW(),b=HB({preventDefault:S=>S.key!==" "&&db(S.target)}),y=i.useCallback(S=>{if(!S.currentTarget.contains(S.target))return;const j=S.key,I={Tab:M=>M.preventDefault(),Escape:c,ArrowDown:()=>{const M=g.nextEnabled(r);M&&o(M.index)},ArrowUp:()=>{const M=g.prevEnabled(r);M&&o(M.index)}}[j];if(I){S.preventDefault(),I(S);return}const E=b(M=>{const D=WB(g.values(),M,R=>{var N,O;return(O=(N=R==null?void 0:R.node)==null?void 0:N.textContent)!=null?O:""},g.item(r));if(D){const R=g.indexOf(D.node);o(R)}});db(S.target)&&E(S)},[g,r,b,c,o]),x=i.useRef(!1);l&&(x.current=!0);const w=Cy({wasSelected:x.current,enabled:f,mode:m,isSelected:h.present});return{...e,ref:Et(s,t),children:w?e.children:null,tabIndex:-1,role:"menu",id:d,style:{...e.style,transformOrigin:"var(--popper-transform-origin)"},"aria-orientation":"vertical",onKeyDown:ze(e.onKeyDown,y)}}function jW(e={}){const{popper:t,isOpen:n}=rf();return t.getPopperProps({...e,style:{visibility:n?"visible":"hidden",...e.style}})}function _W(e={},t=null){const{onMouseEnter:n,onMouseMove:r,onMouseLeave:o,onClick:s,onFocus:l,isDisabled:c,isFocusable:d,closeOnSelect:f,type:m,...h}=e,g=rf(),{setFocusedIndex:b,focusedIndex:y,closeOnSelect:x,onClose:w,menuRef:S,isOpen:j,menuId:_,rafId:I}=g,E=i.useRef(null),M=`${_}-menuitem-${i.useId()}`,{index:D,register:R}=xW({disabled:c&&!d}),N=i.useCallback(V=>{n==null||n(V),!c&&b(D)},[b,D,c,n]),O=i.useCallback(V=>{r==null||r(V),E.current&&!e4(E.current)&&N(V)},[N,r]),T=i.useCallback(V=>{o==null||o(V),!c&&b(-1)},[b,c,o]),U=i.useCallback(V=>{s==null||s(V),db(V.currentTarget)&&(f??x)&&w()},[w,s,x,f]),G=i.useCallback(V=>{l==null||l(V),b(D)},[b,l,D]),q=D===y,Y=c&&!d;ba(()=>{if(j)return q&&!Y&&E.current?(I.current&&cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{var V;(V=E.current)==null||V.focus({preventScroll:!0}),I.current=null})):S.current&&!e4(S.current)&&S.current.focus({preventScroll:!0}),()=>{I.current&&cancelAnimationFrame(I.current)}},[q,Y,S,j]);const Q=z5({onClick:U,onFocus:G,onMouseEnter:N,onMouseMove:O,onMouseLeave:T,ref:Et(R,E,t),isDisabled:c,isFocusable:d});return{...h,...Q,type:m??Q.type,id:M,role:"menuitem",tabIndex:q?0:-1}}function IW(e){var t;if(!PW(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function PW(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}var[EW,li]=Kt({name:"MenuStylesContext",errorMessage:`useMenuStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),of=e=>{const{children:t}=e,n=Xn("Menu",e),r=cn(e),{direction:o}=Hd(),{descendants:s,...l}=wW({...r,direction:o}),c=i.useMemo(()=>l,[l]),{isOpen:d,onClose:f,forceUpdate:m}=c;return a.jsx(gW,{value:s,children:a.jsx(yW,{value:c,children:a.jsx(EW,{value:n,children:bx(t,{isOpen:d,onClose:f,forceUpdate:m})})})})};of.displayName="Menu";var e6=_e((e,t)=>{const n=li();return a.jsx(je.span,{ref:t,...e,__css:n.command,className:"chakra-menu__command"})});e6.displayName="MenuCommand";var MW=_e((e,t)=>{const{type:n,...r}=e,o=li(),s=r.as||n?n??void 0:"button",l=i.useMemo(()=>({textDecoration:"none",color:"inherit",userSelect:"none",display:"flex",width:"100%",alignItems:"center",textAlign:"start",flex:"0 0 auto",outline:0,...o.item}),[o.item]);return a.jsx(je.button,{ref:t,type:s,...r,__css:l})}),t6=e=>{const{className:t,children:n,...r}=e,o=li(),s=i.Children.only(n),l=i.isValidElement(s)?i.cloneElement(s,{focusable:"false","aria-hidden":!0,className:et("chakra-menu__icon",s.props.className)}):null,c=et("chakra-menu__icon-wrapper",t);return a.jsx(je.span,{className:c,...r,__css:o.icon,children:l})};t6.displayName="MenuIcon";var At=_e((e,t)=>{const{icon:n,iconSpacing:r="0.75rem",command:o,commandSpacing:s="0.75rem",children:l,...c}=e,d=_W(c,t),m=n||o?a.jsx("span",{style:{pointerEvents:"none",flex:1},children:l}):l;return a.jsxs(MW,{...d,className:et("chakra-menu__menuitem",d.className),children:[n&&a.jsx(t6,{fontSize:"0.8em",marginEnd:r,children:n}),m,o&&a.jsx(e6,{marginStart:s,children:o})]})});At.displayName="MenuItem";var OW={enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.2,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.1,easings:"easeOut"}}},DW=je(Mn.div),al=_e(function(t,n){var r,o;const{rootProps:s,motionProps:l,...c}=t,{isOpen:d,onTransitionEnd:f,unstable__animationState:m}=rf(),h=kW(c,n),g=jW(s),b=li();return a.jsx(je.div,{...g,__css:{zIndex:(o=t.zIndex)!=null?o:(r=b.list)==null?void 0:r.zIndex},children:a.jsx(DW,{variants:OW,initial:!1,animate:d?"enter":"exit",__css:{outline:0,...b.list},...l,className:et("chakra-menu__menu-list",h.className),...h,onUpdate:f,onAnimationComplete:Uh(m.onComplete,h.onAnimationComplete)})})});al.displayName="MenuList";var _d=_e((e,t)=>{const{title:n,children:r,className:o,...s}=e,l=et("chakra-menu__group__title",o),c=li();return a.jsxs("div",{ref:t,className:"chakra-menu__group",role:"group",children:[n&&a.jsx(je.p,{className:l,...s,__css:c.groupTitle,children:n}),r]})});_d.displayName="MenuGroup";var RW=_e((e,t)=>{const n=li();return a.jsx(je.button,{ref:t,...e,__css:{display:"inline-flex",appearance:"none",alignItems:"center",outline:0,...n.button}})}),sf=_e((e,t)=>{const{children:n,as:r,...o}=e,s=SW(o,t),l=r||RW;return a.jsx(l,{...s,className:et("chakra-menu__menu-button",e.className),children:a.jsx(je.span,{__css:{pointerEvents:"none",flex:"1 1 auto",minW:0},children:e.children})})});sf.displayName="MenuButton";var n6=e=>{const{className:t,...n}=e,r=li();return a.jsx(je.hr,{"aria-orientation":"horizontal",className:et("chakra-menu__divider",t),...n,__css:r.divider})};n6.displayName="MenuDivider";var AW={slideInBottom:{...Xu,custom:{offsetY:16,reverse:!0}},slideInRight:{...Xu,custom:{offsetX:16,reverse:!0}},slideInTop:{...Xu,custom:{offsetY:-16,reverse:!0}},slideInLeft:{...Xu,custom:{offsetX:-16,reverse:!0}},scale:{...R3,custom:{initialScale:.95,reverse:!0}},none:{}},TW=je(Mn.section),NW=e=>AW[e||"none"],r6=i.forwardRef((e,t)=>{const{preset:n,motionProps:r=NW(n),...o}=e;return a.jsx(TW,{ref:t,...r,...o})});r6.displayName="ModalTransition";var $W=Object.defineProperty,LW=(e,t,n)=>t in e?$W(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,FW=(e,t,n)=>(LW(e,typeof t!="symbol"?t+"":t,n),n),zW=class{constructor(){FW(this,"modals"),this.modals=new Map}add(e){return this.modals.set(e,this.modals.size+1),this.modals.size}remove(e){this.modals.delete(e)}isTopModal(e){return e?this.modals.get(e)===this.modals.size:!1}},fb=new zW;function o6(e,t){const[n,r]=i.useState(0);return i.useEffect(()=>{const o=e.current;if(o){if(t){const s=fb.add(o);r(s)}return()=>{fb.remove(o),r(0)}}},[t,e]),n}var BW=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Fi=new WeakMap,_p=new WeakMap,Ip={},Uv=0,s6=function(e){return e&&(e.host||s6(e.parentNode))},HW=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=s6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},WW=function(e,t,n,r){var o=HW(t,Array.isArray(e)?e:[e]);Ip[n]||(Ip[n]=new WeakMap);var s=Ip[n],l=[],c=new Set,d=new Set(o),f=function(h){!h||c.has(h)||(c.add(h),f(h.parentNode))};o.forEach(f);var m=function(h){!h||d.has(h)||Array.prototype.forEach.call(h.children,function(g){if(c.has(g))m(g);else{var b=g.getAttribute(r),y=b!==null&&b!=="false",x=(Fi.get(g)||0)+1,w=(s.get(g)||0)+1;Fi.set(g,x),s.set(g,w),l.push(g),x===1&&y&&_p.set(g,!0),w===1&&g.setAttribute(n,"true"),y||g.setAttribute(r,"true")}})};return m(t),c.clear(),Uv++,function(){l.forEach(function(h){var g=Fi.get(h)-1,b=s.get(h)-1;Fi.set(h,g),s.set(h,b),g||(_p.has(h)||h.removeAttribute(r),_p.delete(h)),b||h.removeAttribute(n)}),Uv--,Uv||(Fi=new WeakMap,Fi=new WeakMap,_p=new WeakMap,Ip={})}},VW=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||BW(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),WW(r,o,n,"aria-hidden")):function(){return null}};function UW(e){const{isOpen:t,onClose:n,id:r,closeOnOverlayClick:o=!0,closeOnEsc:s=!0,useInert:l=!0,onOverlayClick:c,onEsc:d}=e,f=i.useRef(null),m=i.useRef(null),[h,g,b]=KW(r,"chakra-modal","chakra-modal--header","chakra-modal--body");GW(f,t&&l);const y=o6(f,t),x=i.useRef(null),w=i.useCallback(N=>{x.current=N.target},[]),S=i.useCallback(N=>{N.key==="Escape"&&(N.stopPropagation(),s&&(n==null||n()),d==null||d())},[s,n,d]),[j,_]=i.useState(!1),[I,E]=i.useState(!1),M=i.useCallback((N={},O=null)=>({role:"dialog",...N,ref:Et(O,f),id:h,tabIndex:-1,"aria-modal":!0,"aria-labelledby":j?g:void 0,"aria-describedby":I?b:void 0,onClick:ze(N.onClick,T=>T.stopPropagation())}),[b,I,h,g,j]),D=i.useCallback(N=>{N.stopPropagation(),x.current===N.target&&fb.isTopModal(f.current)&&(o&&(n==null||n()),c==null||c())},[n,o,c]),R=i.useCallback((N={},O=null)=>({...N,ref:Et(O,m),onClick:ze(N.onClick,D),onKeyDown:ze(N.onKeyDown,S),onMouseDown:ze(N.onMouseDown,w)}),[S,w,D]);return{isOpen:t,onClose:n,headerId:g,bodyId:b,setBodyMounted:E,setHeaderMounted:_,dialogRef:f,overlayRef:m,getDialogProps:M,getDialogContainerProps:R,index:y}}function GW(e,t){const n=e.current;i.useEffect(()=>{if(!(!e.current||!t))return VW(e.current)},[t,e,n])}function KW(e,...t){const n=i.useId(),r=e||n;return i.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}var[qW,Yc]=Kt({name:"ModalStylesContext",errorMessage:`useModalStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[XW,ti]=Kt({strict:!0,name:"ModalContext",errorMessage:"useModalContext: `context` is undefined. Seems you forgot to wrap modal components in ``"}),ni=e=>{const t={scrollBehavior:"outside",autoFocus:!0,trapFocus:!0,returnFocusOnClose:!0,blockScrollOnMount:!0,allowPinchZoom:!1,motionPreset:"scale",lockFocusAcrossFrames:!0,...e},{portalProps:n,children:r,autoFocus:o,trapFocus:s,initialFocusRef:l,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:f,allowPinchZoom:m,preserveScrollBarGap:h,motionPreset:g,lockFocusAcrossFrames:b,onCloseComplete:y}=t,x=Xn("Modal",t),S={...UW(t),autoFocus:o,trapFocus:s,initialFocusRef:l,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:f,allowPinchZoom:m,preserveScrollBarGap:h,motionPreset:g,lockFocusAcrossFrames:b};return a.jsx(XW,{value:S,children:a.jsx(qW,{value:x,children:a.jsx(hr,{onExitComplete:y,children:S.isOpen&&a.jsx(Uc,{...n,children:r})})})})};ni.displayName="Modal";var lm="right-scroll-bar-position",im="width-before-scroll-bar",QW="with-scroll-bars-hidden",YW="--removed-body-scroll-bar-size",a6=n5(),Gv=function(){},fg=i.forwardRef(function(e,t){var n=i.useRef(null),r=i.useState({onScrollCapture:Gv,onWheelCapture:Gv,onTouchMoveCapture:Gv}),o=r[0],s=r[1],l=e.forwardProps,c=e.children,d=e.className,f=e.removeScrollBar,m=e.enabled,h=e.shards,g=e.sideCar,b=e.noIsolation,y=e.inert,x=e.allowPinchZoom,w=e.as,S=w===void 0?"div":w,j=e.gapMode,_=J3(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),I=g,E=Z3([n,t]),M=ws(ws({},_),o);return i.createElement(i.Fragment,null,m&&i.createElement(I,{sideCar:a6,removeScrollBar:f,shards:h,noIsolation:b,inert:y,setCallbacks:s,allowPinchZoom:!!x,lockRef:n,gapMode:j}),l?i.cloneElement(i.Children.only(c),ws(ws({},M),{ref:E})):i.createElement(S,ws({},M,{className:d,ref:E}),c))});fg.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};fg.classNames={fullWidth:im,zeroRight:lm};var t4,ZW=function(){if(t4)return t4;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function JW(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=ZW();return t&&e.setAttribute("nonce",t),e}function eV(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function tV(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var nV=function(){var e=0,t=null;return{add:function(n){e==0&&(t=JW())&&(eV(t,n),tV(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},rV=function(){var e=nV();return function(t,n){i.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},l6=function(){var e=rV(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},oV={left:0,top:0,right:0,gap:0},Kv=function(e){return parseInt(e||"",10)||0},sV=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[Kv(n),Kv(r),Kv(o)]},aV=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return oV;var t=sV(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},lV=l6(),iV=function(e,t,n,r){var o=e.left,s=e.top,l=e.right,c=e.gap;return n===void 0&&(n="margin"),` + .`.concat(QW,` { + overflow: hidden `).concat(r,`; + padding-right: `).concat(c,"px ").concat(r,`; + } + body { + overflow: hidden `).concat(r,`; + overscroll-behavior: contain; + `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` + padding-left: `.concat(o,`px; + padding-top: `).concat(s,`px; + padding-right: `).concat(l,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(c,"px ").concat(r,`; + `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` + } + + .`).concat(lm,` { + right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(im,` { + margin-right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(lm," .").concat(lm,` { + right: 0 `).concat(r,`; + } + + .`).concat(im," .").concat(im,` { + margin-right: 0 `).concat(r,`; + } + + body { + `).concat(YW,": ").concat(c,`px; + } +`)},cV=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r,s=i.useMemo(function(){return aV(o)},[o]);return i.createElement(lV,{styles:iV(s,!t,o,n?"":"!important")})},pb=!1;if(typeof window<"u")try{var Pp=Object.defineProperty({},"passive",{get:function(){return pb=!0,!0}});window.addEventListener("test",Pp,Pp),window.removeEventListener("test",Pp,Pp)}catch{pb=!1}var zi=pb?{passive:!1}:!1,uV=function(e){return e.tagName==="TEXTAREA"},i6=function(e,t){var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!uV(e)&&n[t]==="visible")},dV=function(e){return i6(e,"overflowY")},fV=function(e){return i6(e,"overflowX")},n4=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=c6(e,r);if(o){var s=u6(e,r),l=s[1],c=s[2];if(l>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},pV=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},mV=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},c6=function(e,t){return e==="v"?dV(t):fV(t)},u6=function(e,t){return e==="v"?pV(t):mV(t)},hV=function(e,t){return e==="h"&&t==="rtl"?-1:1},gV=function(e,t,n,r,o){var s=hV(e,window.getComputedStyle(t).direction),l=s*r,c=n.target,d=t.contains(c),f=!1,m=l>0,h=0,g=0;do{var b=u6(e,c),y=b[0],x=b[1],w=b[2],S=x-w-s*y;(y||S)&&c6(e,c)&&(h+=S,g+=y),c instanceof ShadowRoot?c=c.host:c=c.parentNode}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(m&&(o&&Math.abs(h)<1||!o&&l>h)||!m&&(o&&Math.abs(g)<1||!o&&-l>g))&&(f=!0),f},Ep=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},r4=function(e){return[e.deltaX,e.deltaY]},o4=function(e){return e&&"current"in e?e.current:e},vV=function(e,t){return e[0]===t[0]&&e[1]===t[1]},bV=function(e){return` + .block-interactivity-`.concat(e,` {pointer-events: none;} + .allow-interactivity-`).concat(e,` {pointer-events: all;} +`)},xV=0,Bi=[];function yV(e){var t=i.useRef([]),n=i.useRef([0,0]),r=i.useRef(),o=i.useState(xV++)[0],s=i.useState(l6)[0],l=i.useRef(e);i.useEffect(function(){l.current=e},[e]),i.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var x=ob([e.lockRef.current],(e.shards||[]).map(o4),!0).filter(Boolean);return x.forEach(function(w){return w.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),x.forEach(function(w){return w.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=i.useCallback(function(x,w){if("touches"in x&&x.touches.length===2)return!l.current.allowPinchZoom;var S=Ep(x),j=n.current,_="deltaX"in x?x.deltaX:j[0]-S[0],I="deltaY"in x?x.deltaY:j[1]-S[1],E,M=x.target,D=Math.abs(_)>Math.abs(I)?"h":"v";if("touches"in x&&D==="h"&&M.type==="range")return!1;var R=n4(D,M);if(!R)return!0;if(R?E=D:(E=D==="v"?"h":"v",R=n4(D,M)),!R)return!1;if(!r.current&&"changedTouches"in x&&(_||I)&&(r.current=E),!E)return!0;var N=r.current||E;return gV(N,w,x,N==="h"?_:I,!0)},[]),d=i.useCallback(function(x){var w=x;if(!(!Bi.length||Bi[Bi.length-1]!==s)){var S="deltaY"in w?r4(w):Ep(w),j=t.current.filter(function(E){return E.name===w.type&&(E.target===w.target||w.target===E.shadowParent)&&vV(E.delta,S)})[0];if(j&&j.should){w.cancelable&&w.preventDefault();return}if(!j){var _=(l.current.shards||[]).map(o4).filter(Boolean).filter(function(E){return E.contains(w.target)}),I=_.length>0?c(w,_[0]):!l.current.noIsolation;I&&w.cancelable&&w.preventDefault()}}},[]),f=i.useCallback(function(x,w,S,j){var _={name:x,delta:w,target:S,should:j,shadowParent:CV(S)};t.current.push(_),setTimeout(function(){t.current=t.current.filter(function(I){return I!==_})},1)},[]),m=i.useCallback(function(x){n.current=Ep(x),r.current=void 0},[]),h=i.useCallback(function(x){f(x.type,r4(x),x.target,c(x,e.lockRef.current))},[]),g=i.useCallback(function(x){f(x.type,Ep(x),x.target,c(x,e.lockRef.current))},[]);i.useEffect(function(){return Bi.push(s),e.setCallbacks({onScrollCapture:h,onWheelCapture:h,onTouchMoveCapture:g}),document.addEventListener("wheel",d,zi),document.addEventListener("touchmove",d,zi),document.addEventListener("touchstart",m,zi),function(){Bi=Bi.filter(function(x){return x!==s}),document.removeEventListener("wheel",d,zi),document.removeEventListener("touchmove",d,zi),document.removeEventListener("touchstart",m,zi)}},[]);var b=e.removeScrollBar,y=e.inert;return i.createElement(i.Fragment,null,y?i.createElement(s,{styles:bV(o)}):null,b?i.createElement(cV,{gapMode:e.gapMode}):null)}function CV(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const wV=xz(a6,yV);var d6=i.forwardRef(function(e,t){return i.createElement(fg,ws({},e,{ref:t,sideCar:wV}))});d6.classNames=fg.classNames;const SV=d6;function kV(e){const{autoFocus:t,trapFocus:n,dialogRef:r,initialFocusRef:o,blockScrollOnMount:s,allowPinchZoom:l,finalFocusRef:c,returnFocusOnClose:d,preserveScrollBarGap:f,lockFocusAcrossFrames:m,isOpen:h}=ti(),[g,b]=MR();i.useEffect(()=>{!g&&b&&setTimeout(b)},[g,b]);const y=o6(r,h);return a.jsx(R5,{autoFocus:t,isDisabled:!n,initialFocusRef:o,finalFocusRef:c,restoreFocus:d,contentRef:r,lockFocusAcrossFrames:m,children:a.jsx(SV,{removeScrollBar:!f,allowPinchZoom:l,enabled:y===1&&s,forwardProps:!0,children:e.children})})}var ri=_e((e,t)=>{const{className:n,children:r,containerProps:o,motionProps:s,...l}=e,{getDialogProps:c,getDialogContainerProps:d}=ti(),f=c(l,t),m=d(o),h=et("chakra-modal__content",n),g=Yc(),b={display:"flex",flexDirection:"column",position:"relative",width:"100%",outline:0,...g.dialog},y={display:"flex",width:"100vw",height:"$100vh",position:"fixed",left:0,top:0,...g.dialogContainer},{motionPreset:x}=ti();return a.jsx(kV,{children:a.jsx(je.div,{...m,className:"chakra-modal__content-container",tabIndex:-1,__css:y,children:a.jsx(r6,{preset:x,motionProps:s,className:h,...f,__css:b,children:r})})})});ri.displayName="ModalContent";function Zc(e){const{leastDestructiveRef:t,...n}=e;return a.jsx(ni,{...n,initialFocusRef:t})}var Jc=_e((e,t)=>a.jsx(ri,{ref:t,role:"alertdialog",...e})),ls=_e((e,t)=>{const{className:n,...r}=e,o=et("chakra-modal__footer",n),l={display:"flex",alignItems:"center",justifyContent:"flex-end",...Yc().footer};return a.jsx(je.footer,{ref:t,...r,__css:l,className:o})});ls.displayName="ModalFooter";var Po=_e((e,t)=>{const{className:n,...r}=e,{headerId:o,setHeaderMounted:s}=ti();i.useEffect(()=>(s(!0),()=>s(!1)),[s]);const l=et("chakra-modal__header",n),d={flex:0,...Yc().header};return a.jsx(je.header,{ref:t,className:l,id:o,...r,__css:d})});Po.displayName="ModalHeader";var jV=je(Mn.div),Eo=_e((e,t)=>{const{className:n,transition:r,motionProps:o,...s}=e,l=et("chakra-modal__overlay",n),d={pos:"fixed",left:"0",top:"0",w:"100vw",h:"100vh",...Yc().overlay},{motionPreset:f}=ti(),h=o||(f==="none"?{}:D3);return a.jsx(jV,{...h,__css:d,ref:t,className:l,...s})});Eo.displayName="ModalOverlay";var Mo=_e((e,t)=>{const{className:n,...r}=e,{bodyId:o,setBodyMounted:s}=ti();i.useEffect(()=>(s(!0),()=>s(!1)),[s]);const l=et("chakra-modal__body",n),c=Yc();return a.jsx(je.div,{ref:t,className:l,id:o,...r,__css:c.body})});Mo.displayName="ModalBody";var af=_e((e,t)=>{const{onClick:n,className:r,...o}=e,{onClose:s}=ti(),l=et("chakra-modal__close-btn",r),c=Yc();return a.jsx(bI,{ref:t,__css:c.closeButton,className:l,onClick:ze(n,d=>{d.stopPropagation(),s()}),...o})});af.displayName="ModalCloseButton";var _V=e=>a.jsx(An,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M21,5H3C2.621,5,2.275,5.214,2.105,5.553C1.937,5.892,1.973,6.297,2.2,6.6l9,12 c0.188,0.252,0.485,0.4,0.8,0.4s0.611-0.148,0.8-0.4l9-12c0.228-0.303,0.264-0.708,0.095-1.047C21.725,5.214,21.379,5,21,5z"})}),IV=e=>a.jsx(An,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M12.8,5.4c-0.377-0.504-1.223-0.504-1.6,0l-9,12c-0.228,0.303-0.264,0.708-0.095,1.047 C2.275,18.786,2.621,19,3,19h18c0.379,0,0.725-0.214,0.895-0.553c0.169-0.339,0.133-0.744-0.095-1.047L12.8,5.4z"})});function s4(e,t,n,r){i.useEffect(()=>{var o;if(!e.current||!r)return;const s=(o=e.current.ownerDocument.defaultView)!=null?o:window,l=Array.isArray(t)?t:[t],c=new s.MutationObserver(d=>{for(const f of d)f.type==="attributes"&&f.attributeName&&l.includes(f.attributeName)&&n(f)});return c.observe(e.current,{attributes:!0,attributeFilter:l}),()=>c.disconnect()})}function PV(e,t){const n=gn(e);i.useEffect(()=>{let r=null;const o=()=>n();return t!==null&&(r=window.setInterval(o,t)),()=>{r&&window.clearInterval(r)}},[t,n])}var EV=50,a4=300;function MV(e,t){const[n,r]=i.useState(!1),[o,s]=i.useState(null),[l,c]=i.useState(!0),d=i.useRef(null),f=()=>clearTimeout(d.current);PV(()=>{o==="increment"&&e(),o==="decrement"&&t()},n?EV:null);const m=i.useCallback(()=>{l&&e(),d.current=setTimeout(()=>{c(!1),r(!0),s("increment")},a4)},[e,l]),h=i.useCallback(()=>{l&&t(),d.current=setTimeout(()=>{c(!1),r(!0),s("decrement")},a4)},[t,l]),g=i.useCallback(()=>{c(!0),r(!1),f()},[]);return i.useEffect(()=>()=>f(),[]),{up:m,down:h,stop:g,isSpinning:n}}var OV=/^[Ee0-9+\-.]$/;function DV(e){return OV.test(e)}function RV(e,t){if(e.key==null)return!0;const n=e.ctrlKey||e.altKey||e.metaKey;return!(e.key.length===1)||n?!0:t(e.key)}function AV(e={}){const{focusInputOnChange:t=!0,clampValueOnBlur:n=!0,keepWithinRange:r=!0,min:o=Number.MIN_SAFE_INTEGER,max:s=Number.MAX_SAFE_INTEGER,step:l=1,isReadOnly:c,isDisabled:d,isRequired:f,isInvalid:m,pattern:h="[0-9]*(.[0-9]+)?",inputMode:g="decimal",allowMouseWheel:b,id:y,onChange:x,precision:w,name:S,"aria-describedby":j,"aria-label":_,"aria-labelledby":I,onFocus:E,onBlur:M,onInvalid:D,getAriaValueText:R,isValidCharacter:N,format:O,parse:T,...U}=e,G=gn(E),q=gn(M),Y=gn(D),Q=gn(N??DV),V=gn(R),se=ZF(e),{update:ee,increment:le,decrement:ae}=se,[ce,J]=i.useState(!1),re=!(c||d),A=i.useRef(null),L=i.useRef(null),K=i.useRef(null),ne=i.useRef(null),z=i.useCallback(ye=>ye.split("").filter(Q).join(""),[Q]),oe=i.useCallback(ye=>{var Ue;return(Ue=T==null?void 0:T(ye))!=null?Ue:ye},[T]),X=i.useCallback(ye=>{var Ue;return((Ue=O==null?void 0:O(ye))!=null?Ue:ye).toString()},[O]);ba(()=>{(se.valueAsNumber>s||se.valueAsNumber{if(!A.current)return;if(A.current.value!=se.value){const Ue=oe(A.current.value);se.setValue(z(Ue))}},[oe,z]);const Z=i.useCallback((ye=l)=>{re&&le(ye)},[le,re,l]),me=i.useCallback((ye=l)=>{re&&ae(ye)},[ae,re,l]),ve=MV(Z,me);s4(K,"disabled",ve.stop,ve.isSpinning),s4(ne,"disabled",ve.stop,ve.isSpinning);const de=i.useCallback(ye=>{if(ye.nativeEvent.isComposing)return;const st=oe(ye.currentTarget.value);ee(z(st)),L.current={start:ye.currentTarget.selectionStart,end:ye.currentTarget.selectionEnd}},[ee,z,oe]),ke=i.useCallback(ye=>{var Ue,st,mt;G==null||G(ye),L.current&&(ye.target.selectionStart=(st=L.current.start)!=null?st:(Ue=ye.currentTarget.value)==null?void 0:Ue.length,ye.currentTarget.selectionEnd=(mt=L.current.end)!=null?mt:ye.currentTarget.selectionStart)},[G]),we=i.useCallback(ye=>{if(ye.nativeEvent.isComposing)return;RV(ye,Q)||ye.preventDefault();const Ue=Re(ye)*l,st=ye.key,Pe={ArrowUp:()=>Z(Ue),ArrowDown:()=>me(Ue),Home:()=>ee(o),End:()=>ee(s)}[st];Pe&&(ye.preventDefault(),Pe(ye))},[Q,l,Z,me,ee,o,s]),Re=ye=>{let Ue=1;return(ye.metaKey||ye.ctrlKey)&&(Ue=.1),ye.shiftKey&&(Ue=10),Ue},Qe=i.useMemo(()=>{const ye=V==null?void 0:V(se.value);if(ye!=null)return ye;const Ue=se.value.toString();return Ue||void 0},[se.value,V]),$e=i.useCallback(()=>{let ye=se.value;if(se.value==="")return;/^[eE]/.test(se.value.toString())?se.setValue(""):(se.valueAsNumbers&&(ye=s),se.cast(ye))},[se,s,o]),vt=i.useCallback(()=>{J(!1),n&&$e()},[n,J,$e]),it=i.useCallback(()=>{t&&requestAnimationFrame(()=>{var ye;(ye=A.current)==null||ye.focus()})},[t]),ot=i.useCallback(ye=>{ye.preventDefault(),ve.up(),it()},[it,ve]),Ce=i.useCallback(ye=>{ye.preventDefault(),ve.down(),it()},[it,ve]);Ul(()=>A.current,"wheel",ye=>{var Ue,st;const Pe=((st=(Ue=A.current)==null?void 0:Ue.ownerDocument)!=null?st:document).activeElement===A.current;if(!b||!Pe)return;ye.preventDefault();const Ne=Re(ye)*l,kt=Math.sign(ye.deltaY);kt===-1?Z(Ne):kt===1&&me(Ne)},{passive:!1});const Me=i.useCallback((ye={},Ue=null)=>{const st=d||r&&se.isAtMax;return{...ye,ref:Et(Ue,K),role:"button",tabIndex:-1,onPointerDown:ze(ye.onPointerDown,mt=>{mt.button!==0||st||ot(mt)}),onPointerLeave:ze(ye.onPointerLeave,ve.stop),onPointerUp:ze(ye.onPointerUp,ve.stop),disabled:st,"aria-disabled":wo(st)}},[se.isAtMax,r,ot,ve.stop,d]),qe=i.useCallback((ye={},Ue=null)=>{const st=d||r&&se.isAtMin;return{...ye,ref:Et(Ue,ne),role:"button",tabIndex:-1,onPointerDown:ze(ye.onPointerDown,mt=>{mt.button!==0||st||Ce(mt)}),onPointerLeave:ze(ye.onPointerLeave,ve.stop),onPointerUp:ze(ye.onPointerUp,ve.stop),disabled:st,"aria-disabled":wo(st)}},[se.isAtMin,r,Ce,ve.stop,d]),dt=i.useCallback((ye={},Ue=null)=>{var st,mt,Pe,Ne;return{name:S,inputMode:g,type:"text",pattern:h,"aria-labelledby":I,"aria-label":_,"aria-describedby":j,id:y,disabled:d,...ye,readOnly:(st=ye.readOnly)!=null?st:c,"aria-readonly":(mt=ye.readOnly)!=null?mt:c,"aria-required":(Pe=ye.required)!=null?Pe:f,required:(Ne=ye.required)!=null?Ne:f,ref:Et(A,Ue),value:X(se.value),role:"spinbutton","aria-valuemin":o,"aria-valuemax":s,"aria-valuenow":Number.isNaN(se.valueAsNumber)?void 0:se.valueAsNumber,"aria-invalid":wo(m??se.isOutOfRange),"aria-valuetext":Qe,autoComplete:"off",autoCorrect:"off",onChange:ze(ye.onChange,de),onKeyDown:ze(ye.onKeyDown,we),onFocus:ze(ye.onFocus,ke,()=>J(!0)),onBlur:ze(ye.onBlur,q,vt)}},[S,g,h,I,_,X,j,y,d,f,c,m,se.value,se.valueAsNumber,se.isOutOfRange,o,s,Qe,de,we,ke,q,vt]);return{value:X(se.value),valueAsNumber:se.valueAsNumber,isFocused:ce,isDisabled:d,isReadOnly:c,getIncrementButtonProps:Me,getDecrementButtonProps:qe,getInputProps:dt,htmlProps:U}}var[TV,pg]=Kt({name:"NumberInputStylesContext",errorMessage:`useNumberInputStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[NV,wy]=Kt({name:"NumberInputContext",errorMessage:"useNumberInputContext: `context` is undefined. Seems you forgot to wrap number-input's components within "}),mg=_e(function(t,n){const r=Xn("NumberInput",t),o=cn(t),s=qx(o),{htmlProps:l,...c}=AV(s),d=i.useMemo(()=>c,[c]);return a.jsx(NV,{value:d,children:a.jsx(TV,{value:r,children:a.jsx(je.div,{...l,ref:n,className:et("chakra-numberinput",t.className),__css:{position:"relative",zIndex:0,...r.root}})})})});mg.displayName="NumberInput";var hg=_e(function(t,n){const r=pg();return a.jsx(je.div,{"aria-hidden":!0,ref:n,...t,__css:{display:"flex",flexDirection:"column",position:"absolute",top:"0",insetEnd:"0px",margin:"1px",height:"calc(100% - 2px)",zIndex:1,...r.stepperGroup}})});hg.displayName="NumberInputStepper";var gg=_e(function(t,n){const{getInputProps:r}=wy(),o=r(t,n),s=pg();return a.jsx(je.input,{...o,className:et("chakra-numberinput__field",t.className),__css:{width:"100%",...s.field}})});gg.displayName="NumberInputField";var f6=je("div",{baseStyle:{display:"flex",justifyContent:"center",alignItems:"center",flex:1,transitionProperty:"common",transitionDuration:"normal",userSelect:"none",cursor:"pointer",lineHeight:"normal"}}),vg=_e(function(t,n){var r;const o=pg(),{getDecrementButtonProps:s}=wy(),l=s(t,n);return a.jsx(f6,{...l,__css:o.stepper,children:(r=t.children)!=null?r:a.jsx(_V,{})})});vg.displayName="NumberDecrementStepper";var bg=_e(function(t,n){var r;const{getIncrementButtonProps:o}=wy(),s=o(t,n),l=pg();return a.jsx(f6,{...s,__css:l.stepper,children:(r=t.children)!=null?r:a.jsx(IV,{})})});bg.displayName="NumberIncrementStepper";var[$V,ii]=Kt({name:"PopoverContext",errorMessage:"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within ``"}),[LV,xg]=Kt({name:"PopoverStylesContext",errorMessage:`usePopoverStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `});function yg(e){const t=i.Children.only(e.children),{getTriggerProps:n}=ii();return i.cloneElement(t,n(t.props,t.ref))}yg.displayName="PopoverTrigger";var Hi={click:"click",hover:"hover"};function FV(e={}){const{closeOnBlur:t=!0,closeOnEsc:n=!0,initialFocusRef:r,id:o,returnFocusOnClose:s=!0,autoFocus:l=!0,arrowSize:c,arrowShadowColor:d,trigger:f=Hi.click,openDelay:m=200,closeDelay:h=200,isLazy:g,lazyBehavior:b="unmount",computePositionOnMount:y,...x}=e,{isOpen:w,onClose:S,onOpen:j,onToggle:_}=yy(e),I=i.useRef(null),E=i.useRef(null),M=i.useRef(null),D=i.useRef(!1),R=i.useRef(!1);w&&(R.current=!0);const[N,O]=i.useState(!1),[T,U]=i.useState(!1),G=i.useId(),q=o??G,[Y,Q,V,se]=["popover-trigger","popover-content","popover-header","popover-body"].map(de=>`${de}-${q}`),{referenceRef:ee,getArrowProps:le,getPopperProps:ae,getArrowInnerProps:ce,forceUpdate:J}=xy({...x,enabled:w||!!y}),re=Z5({isOpen:w,ref:M});G3({enabled:w,ref:E}),B5(M,{focusRef:E,visible:w,shouldFocus:s&&f===Hi.click}),KB(M,{focusRef:r,visible:w,shouldFocus:l&&f===Hi.click});const A=Cy({wasSelected:R.current,enabled:g,mode:b,isSelected:re.present}),L=i.useCallback((de={},ke=null)=>{const we={...de,style:{...de.style,transformOrigin:Fn.transformOrigin.varRef,[Fn.arrowSize.var]:c?`${c}px`:void 0,[Fn.arrowShadowColor.var]:d},ref:Et(M,ke),children:A?de.children:null,id:Q,tabIndex:-1,role:"dialog",onKeyDown:ze(de.onKeyDown,Re=>{n&&Re.key==="Escape"&&S()}),onBlur:ze(de.onBlur,Re=>{const Qe=l4(Re),$e=qv(M.current,Qe),vt=qv(E.current,Qe);w&&t&&(!$e&&!vt)&&S()}),"aria-labelledby":N?V:void 0,"aria-describedby":T?se:void 0};return f===Hi.hover&&(we.role="tooltip",we.onMouseEnter=ze(de.onMouseEnter,()=>{D.current=!0}),we.onMouseLeave=ze(de.onMouseLeave,Re=>{Re.nativeEvent.relatedTarget!==null&&(D.current=!1,setTimeout(()=>S(),h))})),we},[A,Q,N,V,T,se,f,n,S,w,t,h,d,c]),K=i.useCallback((de={},ke=null)=>ae({...de,style:{visibility:w?"visible":"hidden",...de.style}},ke),[w,ae]),ne=i.useCallback((de,ke=null)=>({...de,ref:Et(ke,I,ee)}),[I,ee]),z=i.useRef(),oe=i.useRef(),X=i.useCallback(de=>{I.current==null&&ee(de)},[ee]),Z=i.useCallback((de={},ke=null)=>{const we={...de,ref:Et(E,ke,X),id:Y,"aria-haspopup":"dialog","aria-expanded":w,"aria-controls":Q};return f===Hi.click&&(we.onClick=ze(de.onClick,_)),f===Hi.hover&&(we.onFocus=ze(de.onFocus,()=>{z.current===void 0&&j()}),we.onBlur=ze(de.onBlur,Re=>{const Qe=l4(Re),$e=!qv(M.current,Qe);w&&t&&$e&&S()}),we.onKeyDown=ze(de.onKeyDown,Re=>{Re.key==="Escape"&&S()}),we.onMouseEnter=ze(de.onMouseEnter,()=>{D.current=!0,z.current=window.setTimeout(()=>j(),m)}),we.onMouseLeave=ze(de.onMouseLeave,()=>{D.current=!1,z.current&&(clearTimeout(z.current),z.current=void 0),oe.current=window.setTimeout(()=>{D.current===!1&&S()},h)})),we},[Y,w,Q,f,X,_,j,t,S,m,h]);i.useEffect(()=>()=>{z.current&&clearTimeout(z.current),oe.current&&clearTimeout(oe.current)},[]);const me=i.useCallback((de={},ke=null)=>({...de,id:V,ref:Et(ke,we=>{O(!!we)})}),[V]),ve=i.useCallback((de={},ke=null)=>({...de,id:se,ref:Et(ke,we=>{U(!!we)})}),[se]);return{forceUpdate:J,isOpen:w,onAnimationComplete:re.onComplete,onClose:S,getAnchorProps:ne,getArrowProps:le,getArrowInnerProps:ce,getPopoverPositionerProps:K,getPopoverProps:L,getTriggerProps:Z,getHeaderProps:me,getBodyProps:ve}}function qv(e,t){return e===t||(e==null?void 0:e.contains(t))}function l4(e){var t;const n=e.currentTarget.ownerDocument.activeElement;return(t=e.relatedTarget)!=null?t:n}function lf(e){const t=Xn("Popover",e),{children:n,...r}=cn(e),o=Hd(),s=FV({...r,direction:o.direction});return a.jsx($V,{value:s,children:a.jsx(LV,{value:t,children:bx(n,{isOpen:s.isOpen,onClose:s.onClose,forceUpdate:s.forceUpdate})})})}lf.displayName="Popover";function p6(e){const t=i.Children.only(e.children),{getAnchorProps:n}=ii();return i.cloneElement(t,n(t.props,t.ref))}p6.displayName="PopoverAnchor";var Xv=(e,t)=>t?`${e}.${t}, ${t}`:void 0;function m6(e){var t;const{bg:n,bgColor:r,backgroundColor:o,shadow:s,boxShadow:l,shadowColor:c}=e,{getArrowProps:d,getArrowInnerProps:f}=ii(),m=xg(),h=(t=n??r)!=null?t:o,g=s??l;return a.jsx(je.div,{...d(),className:"chakra-popover__arrow-positioner",children:a.jsx(je.div,{className:et("chakra-popover__arrow",e.className),...f(e),__css:{"--popper-arrow-shadow-color":Xv("colors",c),"--popper-arrow-bg":Xv("colors",h),"--popper-arrow-shadow":Xv("shadows",g),...m.arrow}})})}m6.displayName="PopoverArrow";var Cg=_e(function(t,n){const{getBodyProps:r}=ii(),o=xg();return a.jsx(je.div,{...r(t,n),className:et("chakra-popover__body",t.className),__css:o.body})});Cg.displayName="PopoverBody";var h6=_e(function(t,n){const{onClose:r}=ii(),o=xg();return a.jsx(bI,{size:"sm",onClick:r,className:et("chakra-popover__close-btn",t.className),__css:o.closeButton,ref:n,...t})});h6.displayName="PopoverCloseButton";function zV(e){if(e)return{enter:{...e.enter,visibility:"visible"},exit:{...e.exit,transitionEnd:{visibility:"hidden"}}}}var BV={exit:{opacity:0,scale:.95,transition:{duration:.1,ease:[.4,0,1,1]}},enter:{scale:1,opacity:1,transition:{duration:.15,ease:[0,0,.2,1]}}},HV=je(Mn.section),g6=_e(function(t,n){const{variants:r=BV,...o}=t,{isOpen:s}=ii();return a.jsx(HV,{ref:n,variants:zV(r),initial:!1,animate:s?"enter":"exit",...o})});g6.displayName="PopoverTransition";var cf=_e(function(t,n){const{rootProps:r,motionProps:o,...s}=t,{getPopoverProps:l,getPopoverPositionerProps:c,onAnimationComplete:d}=ii(),f=xg(),m={position:"relative",display:"flex",flexDirection:"column",...f.content};return a.jsx(je.div,{...c(r),__css:f.popper,className:"chakra-popover__popper",children:a.jsx(g6,{...o,...l(s,n),onAnimationComplete:Uh(d,s.onAnimationComplete),className:et("chakra-popover__content",t.className),__css:m})})});cf.displayName="PopoverContent";var mb=e=>a.jsx(je.circle,{cx:50,cy:50,r:42,fill:"transparent",...e});mb.displayName="Circle";function WV(e,t,n){return(e-t)*100/(n-t)}var VV=xa({"0%":{strokeDasharray:"1, 400",strokeDashoffset:"0"},"50%":{strokeDasharray:"400, 400",strokeDashoffset:"-100"},"100%":{strokeDasharray:"400, 400",strokeDashoffset:"-260"}}),UV=xa({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),GV=xa({"0%":{left:"-40%"},"100%":{left:"100%"}}),KV=xa({from:{backgroundPosition:"1rem 0"},to:{backgroundPosition:"0 0"}});function v6(e){const{value:t=0,min:n,max:r,valueText:o,getValueText:s,isIndeterminate:l,role:c="progressbar"}=e,d=WV(t,n,r);return{bind:{"data-indeterminate":l?"":void 0,"aria-valuemax":r,"aria-valuemin":n,"aria-valuenow":l?void 0:t,"aria-valuetext":(()=>{if(t!=null)return typeof s=="function"?s(t,d):o})(),role:c},percent:d,value:t}}var b6=e=>{const{size:t,isIndeterminate:n,...r}=e;return a.jsx(je.svg,{viewBox:"0 0 100 100",__css:{width:t,height:t,animation:n?`${UV} 2s linear infinite`:void 0},...r})};b6.displayName="Shape";var hb=_e((e,t)=>{var n;const{size:r="48px",max:o=100,min:s=0,valueText:l,getValueText:c,value:d,capIsRound:f,children:m,thickness:h="10px",color:g="#0078d4",trackColor:b="#edebe9",isIndeterminate:y,...x}=e,w=v6({min:s,max:o,value:d,valueText:l,getValueText:c,isIndeterminate:y}),S=y?void 0:((n=w.percent)!=null?n:0)*2.64,j=S==null?void 0:`${S} ${264-S}`,_=y?{css:{animation:`${VV} 1.5s linear infinite`}}:{strokeDashoffset:66,strokeDasharray:j,transitionProperty:"stroke-dasharray, stroke",transitionDuration:"0.6s",transitionTimingFunction:"ease"},I={display:"inline-block",position:"relative",verticalAlign:"middle",fontSize:r};return a.jsxs(je.div,{ref:t,className:"chakra-progress",...w.bind,...x,__css:I,children:[a.jsxs(b6,{size:r,isIndeterminate:y,children:[a.jsx(mb,{stroke:b,strokeWidth:h,className:"chakra-progress__track"}),a.jsx(mb,{stroke:g,strokeWidth:h,className:"chakra-progress__indicator",strokeLinecap:f?"round":void 0,opacity:w.value===0&&!y?0:void 0,..._})]}),m]})});hb.displayName="CircularProgress";var[qV,XV]=Kt({name:"ProgressStylesContext",errorMessage:`useProgressStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),QV=_e((e,t)=>{const{min:n,max:r,value:o,isIndeterminate:s,role:l,...c}=e,d=v6({value:o,min:n,max:r,isIndeterminate:s,role:l}),m={height:"100%",...XV().filledTrack};return a.jsx(je.div,{ref:t,style:{width:`${d.percent}%`,...c.style},...d.bind,...c,__css:m})}),x6=_e((e,t)=>{var n;const{value:r,min:o=0,max:s=100,hasStripe:l,isAnimated:c,children:d,borderRadius:f,isIndeterminate:m,"aria-label":h,"aria-labelledby":g,"aria-valuetext":b,title:y,role:x,...w}=cn(e),S=Xn("Progress",e),j=f??((n=S.track)==null?void 0:n.borderRadius),_={animation:`${KV} 1s linear infinite`},M={...!m&&l&&c&&_,...m&&{position:"absolute",willChange:"left",minWidth:"50%",animation:`${GV} 1s ease infinite normal none running`}},D={overflow:"hidden",position:"relative",...S.track};return a.jsx(je.div,{ref:t,borderRadius:j,__css:D,...w,children:a.jsxs(qV,{value:S,children:[a.jsx(QV,{"aria-label":h,"aria-labelledby":g,"aria-valuetext":b,min:o,max:s,value:r,isIndeterminate:m,css:M,borderRadius:j,title:y,role:x}),d]})})});x6.displayName="Progress";function YV(e){return e&&T1(e)&&T1(e.target)}function ZV(e={}){const{onChange:t,value:n,defaultValue:r,name:o,isDisabled:s,isFocusable:l,isNative:c,...d}=e,[f,m]=i.useState(r||""),h=typeof n<"u",g=h?n:f,b=i.useRef(null),y=i.useCallback(()=>{const E=b.current;if(!E)return;let M="input:not(:disabled):checked";const D=E.querySelector(M);if(D){D.focus();return}M="input:not(:disabled)";const R=E.querySelector(M);R==null||R.focus()},[]),w=`radio-${i.useId()}`,S=o||w,j=i.useCallback(E=>{const M=YV(E)?E.target.value:E;h||m(M),t==null||t(String(M))},[t,h]),_=i.useCallback((E={},M=null)=>({...E,ref:Et(M,b),role:"radiogroup"}),[]),I=i.useCallback((E={},M=null)=>({...E,ref:M,name:S,[c?"checked":"isChecked"]:g!=null?E.value===g:void 0,onChange(R){j(R)},"data-radiogroup":!0}),[c,S,j,g]);return{getRootProps:_,getRadioProps:I,name:S,ref:b,focus:y,setValue:m,value:g,onChange:j,isDisabled:s,isFocusable:l,htmlProps:d}}var[JV,y6]=Kt({name:"RadioGroupContext",strict:!1}),$m=_e((e,t)=>{const{colorScheme:n,size:r,variant:o,children:s,className:l,isDisabled:c,isFocusable:d,...f}=e,{value:m,onChange:h,getRootProps:g,name:b,htmlProps:y}=ZV(f),x=i.useMemo(()=>({name:b,size:r,onChange:h,colorScheme:n,value:m,variant:o,isDisabled:c,isFocusable:d}),[b,r,h,n,m,o,c,d]);return a.jsx(JV,{value:x,children:a.jsx(je.div,{...g(y,t),className:et("chakra-radio-group",l),children:s})})});$m.displayName="RadioGroup";var eU={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"};function tU(e={}){const{defaultChecked:t,isChecked:n,isFocusable:r,isDisabled:o,isReadOnly:s,isRequired:l,onChange:c,isInvalid:d,name:f,value:m,id:h,"data-radiogroup":g,"aria-describedby":b,...y}=e,x=`radio-${i.useId()}`,w=Qd(),j=!!y6()||!!g;let I=!!w&&!j?w.id:x;I=h??I;const E=o??(w==null?void 0:w.isDisabled),M=s??(w==null?void 0:w.isReadOnly),D=l??(w==null?void 0:w.isRequired),R=d??(w==null?void 0:w.isInvalid),[N,O]=i.useState(!1),[T,U]=i.useState(!1),[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),[V,se]=i.useState(!!t),ee=typeof n<"u",le=ee?n:V;i.useEffect(()=>F3(O),[]);const ae=i.useCallback(X=>{if(M||E){X.preventDefault();return}ee||se(X.target.checked),c==null||c(X)},[ee,E,M,c]),ce=i.useCallback(X=>{X.key===" "&&Q(!0)},[Q]),J=i.useCallback(X=>{X.key===" "&&Q(!1)},[Q]),re=i.useCallback((X={},Z=null)=>({...X,ref:Z,"data-active":ut(Y),"data-hover":ut(G),"data-disabled":ut(E),"data-invalid":ut(R),"data-checked":ut(le),"data-focus":ut(T),"data-focus-visible":ut(T&&N),"data-readonly":ut(M),"aria-hidden":!0,onMouseDown:ze(X.onMouseDown,()=>Q(!0)),onMouseUp:ze(X.onMouseUp,()=>Q(!1)),onMouseEnter:ze(X.onMouseEnter,()=>q(!0)),onMouseLeave:ze(X.onMouseLeave,()=>q(!1))}),[Y,G,E,R,le,T,M,N]),{onFocus:A,onBlur:L}=w??{},K=i.useCallback((X={},Z=null)=>{const me=E&&!r;return{...X,id:I,ref:Z,type:"radio",name:f,value:m,onChange:ze(X.onChange,ae),onBlur:ze(L,X.onBlur,()=>U(!1)),onFocus:ze(A,X.onFocus,()=>U(!0)),onKeyDown:ze(X.onKeyDown,ce),onKeyUp:ze(X.onKeyUp,J),checked:le,disabled:me,readOnly:M,required:D,"aria-invalid":wo(R),"aria-disabled":wo(me),"aria-required":wo(D),"data-readonly":ut(M),"aria-describedby":b,style:eU}},[E,r,I,f,m,ae,L,A,ce,J,le,M,D,R,b]);return{state:{isInvalid:R,isFocused:T,isChecked:le,isActive:Y,isHovered:G,isDisabled:E,isReadOnly:M,isRequired:D},getCheckboxProps:re,getRadioProps:re,getInputProps:K,getLabelProps:(X={},Z=null)=>({...X,ref:Z,onMouseDown:ze(X.onMouseDown,nU),"data-disabled":ut(E),"data-checked":ut(le),"data-invalid":ut(R)}),getRootProps:(X,Z=null)=>({...X,ref:Z,"data-disabled":ut(E),"data-checked":ut(le),"data-invalid":ut(R)}),htmlProps:y}}function nU(e){e.preventDefault(),e.stopPropagation()}function rU(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var Ys=_e((e,t)=>{var n;const r=y6(),{onChange:o,value:s}=e,l=Xn("Radio",{...r,...e}),c=cn(e),{spacing:d="0.5rem",children:f,isDisabled:m=r==null?void 0:r.isDisabled,isFocusable:h=r==null?void 0:r.isFocusable,inputProps:g,...b}=c;let y=e.isChecked;(r==null?void 0:r.value)!=null&&s!=null&&(y=r.value===s);let x=o;r!=null&&r.onChange&&s!=null&&(x=Uh(r.onChange,o));const w=(n=e==null?void 0:e.name)!=null?n:r==null?void 0:r.name,{getInputProps:S,getCheckboxProps:j,getLabelProps:_,getRootProps:I,htmlProps:E}=tU({...b,isChecked:y,isFocusable:h,isDisabled:m,onChange:x,name:w}),[M,D]=rU(E,xI),R=j(D),N=S(g,t),O=_(),T=Object.assign({},M,I()),U={display:"inline-flex",alignItems:"center",verticalAlign:"top",cursor:"pointer",position:"relative",...l.container},G={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,...l.control},q={userSelect:"none",marginStart:d,...l.label};return a.jsxs(je.label,{className:"chakra-radio",...T,__css:U,children:[a.jsx("input",{className:"chakra-radio__input",...N}),a.jsx(je.span,{className:"chakra-radio__control",...R,__css:G}),f&&a.jsx(je.span,{className:"chakra-radio__label",...O,__css:q,children:f})]})});Ys.displayName="Radio";var C6=_e(function(t,n){const{children:r,placeholder:o,className:s,...l}=t;return a.jsxs(je.select,{...l,ref:n,className:et("chakra-select",s),children:[o&&a.jsx("option",{value:"",children:o}),r]})});C6.displayName="SelectField";function oU(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var w6=_e((e,t)=>{var n;const r=Xn("Select",e),{rootProps:o,placeholder:s,icon:l,color:c,height:d,h:f,minH:m,minHeight:h,iconColor:g,iconSize:b,...y}=cn(e),[x,w]=oU(y,xI),S=Kx(w),j={width:"100%",height:"fit-content",position:"relative",color:c},_={paddingEnd:"2rem",...r.field,_focus:{zIndex:"unset",...(n=r.field)==null?void 0:n._focus}};return a.jsxs(je.div,{className:"chakra-select__wrapper",__css:j,...x,...o,children:[a.jsx(C6,{ref:t,height:f??d,minH:m??h,placeholder:s,...S,__css:_,children:e.children}),a.jsx(S6,{"data-disabled":ut(S.disabled),...(g||c)&&{color:g||c},__css:r.icon,...b&&{fontSize:b},children:l})]})});w6.displayName="Select";var sU=e=>a.jsx("svg",{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})}),aU=je("div",{baseStyle:{position:"absolute",display:"inline-flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",top:"50%",transform:"translateY(-50%)"}}),S6=e=>{const{children:t=a.jsx(sU,{}),...n}=e,r=i.cloneElement(t,{role:"presentation",className:"chakra-select__icon",focusable:!1,"aria-hidden":!0,style:{width:"1em",height:"1em",color:"currentColor"}});return a.jsx(aU,{...n,className:"chakra-select__icon-wrapper",children:i.isValidElement(t)?r:null})};S6.displayName="SelectIcon";function lU(){const e=i.useRef(!0);return i.useEffect(()=>{e.current=!1},[]),e.current}function iU(e){const t=i.useRef();return i.useEffect(()=>{t.current=e},[e]),t.current}var cU=je("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),gb=yI("skeleton-start-color"),vb=yI("skeleton-end-color"),uU=xa({from:{opacity:0},to:{opacity:1}}),dU=xa({from:{borderColor:gb.reference,background:gb.reference},to:{borderColor:vb.reference,background:vb.reference}}),wg=_e((e,t)=>{const n={...e,fadeDuration:typeof e.fadeDuration=="number"?e.fadeDuration:.4,speed:typeof e.speed=="number"?e.speed:.8},r=ml("Skeleton",n),o=lU(),{startColor:s="",endColor:l="",isLoaded:c,fadeDuration:d,speed:f,className:m,fitContent:h,...g}=cn(n),[b,y]=Zo("colors",[s,l]),x=iU(c),w=et("chakra-skeleton",m),S={...b&&{[gb.variable]:b},...y&&{[vb.variable]:y}};if(c){const j=o||x?"none":`${uU} ${d}s`;return a.jsx(je.div,{ref:t,className:w,__css:{animation:j},...g})}return a.jsx(cU,{ref:t,className:w,...g,__css:{width:h?"fit-content":void 0,...r,...S,_dark:{...r._dark,...S},animation:`${f}s linear infinite alternate ${dU}`}})});wg.displayName="Skeleton";var bo=e=>e?"":void 0,bc=e=>e?!0:void 0,vl=(...e)=>e.filter(Boolean).join(" ");function xc(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function fU(e){return{root:`slider-root-${e}`,getThumb:t=>`slider-thumb-${e}-${t}`,getInput:t=>`slider-input-${e}-${t}`,track:`slider-track-${e}`,innerTrack:`slider-filled-track-${e}`,getMarker:t=>`slider-marker-${e}-${t}`,output:`slider-output-${e}`}}function Qu(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}var cm={width:0,height:0},Mp=e=>e||cm;function k6(e){const{orientation:t,thumbPercents:n,thumbRects:r,isReversed:o}=e,s=x=>{var w;const S=(w=r[x])!=null?w:cm;return{position:"absolute",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",touchAction:"none",...Qu({orientation:t,vertical:{bottom:`calc(${n[x]}% - ${S.height/2}px)`},horizontal:{left:`calc(${n[x]}% - ${S.width/2}px)`}})}},l=t==="vertical"?r.reduce((x,w)=>Mp(x).height>Mp(w).height?x:w,cm):r.reduce((x,w)=>Mp(x).width>Mp(w).width?x:w,cm),c={position:"relative",touchAction:"none",WebkitTapHighlightColor:"rgba(0,0,0,0)",userSelect:"none",outline:0,...Qu({orientation:t,vertical:l?{paddingLeft:l.width/2,paddingRight:l.width/2}:{},horizontal:l?{paddingTop:l.height/2,paddingBottom:l.height/2}:{}})},d={position:"absolute",...Qu({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",height:"100%"},horizontal:{top:"50%",transform:"translateY(-50%)",width:"100%"}})},f=n.length===1,m=[0,o?100-n[0]:n[0]],h=f?m:n;let g=h[0];!f&&o&&(g=100-g);const b=Math.abs(h[h.length-1]-h[0]),y={...d,...Qu({orientation:t,vertical:o?{height:`${b}%`,top:`${g}%`}:{height:`${b}%`,bottom:`${g}%`},horizontal:o?{width:`${b}%`,right:`${g}%`}:{width:`${b}%`,left:`${g}%`}})};return{trackStyle:d,innerTrackStyle:y,rootStyle:c,getThumbStyle:s}}function j6(e){const{isReversed:t,direction:n,orientation:r}=e;return n==="ltr"||r==="vertical"?t:!t}function pU(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function mU(e){const t=gU(e);return typeof t.PointerEvent<"u"&&e instanceof t.PointerEvent?e.pointerType==="mouse":e instanceof t.MouseEvent}function _6(e){return!!e.touches}function hU(e){return _6(e)&&e.touches.length>1}function gU(e){var t;return(t=e.view)!=null?t:window}function vU(e,t="page"){const n=e.touches[0]||e.changedTouches[0];return{x:n[`${t}X`],y:n[`${t}Y`]}}function bU(e,t="page"){return{x:e[`${t}X`],y:e[`${t}Y`]}}function I6(e,t="page"){return _6(e)?vU(e,t):bU(e,t)}function xU(e){return t=>{const n=mU(t);(!n||n&&t.button===0)&&e(t)}}function yU(e,t=!1){function n(o){e(o,{point:I6(o)})}return t?xU(n):n}function um(e,t,n,r){return pU(e,t,yU(n,t==="pointerdown"),r)}var CU=Object.defineProperty,wU=(e,t,n)=>t in e?CU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ko=(e,t,n)=>(wU(e,typeof t!="symbol"?t+"":t,n),n),SU=class{constructor(e,t,n){Ko(this,"history",[]),Ko(this,"startEvent",null),Ko(this,"lastEvent",null),Ko(this,"lastEventInfo",null),Ko(this,"handlers",{}),Ko(this,"removeListeners",()=>{}),Ko(this,"threshold",3),Ko(this,"win"),Ko(this,"updatePoint",()=>{if(!(this.lastEvent&&this.lastEventInfo))return;const c=Qv(this.lastEventInfo,this.history),d=this.startEvent!==null,f=IU(c.offset,{x:0,y:0})>=this.threshold;if(!d&&!f)return;const{timestamp:m}=SS();this.history.push({...c.point,timestamp:m});const{onStart:h,onMove:g}=this.handlers;d||(h==null||h(this.lastEvent,c),this.startEvent=this.lastEvent),g==null||g(this.lastEvent,c)}),Ko(this,"onPointerMove",(c,d)=>{this.lastEvent=c,this.lastEventInfo=d,WL.update(this.updatePoint,!0)}),Ko(this,"onPointerUp",(c,d)=>{const f=Qv(d,this.history),{onEnd:m,onSessionEnd:h}=this.handlers;h==null||h(c,f),this.end(),!(!m||!this.startEvent)&&(m==null||m(c,f))});var r;if(this.win=(r=e.view)!=null?r:window,hU(e))return;this.handlers=t,n&&(this.threshold=n),e.stopPropagation(),e.preventDefault();const o={point:I6(e)},{timestamp:s}=SS();this.history=[{...o.point,timestamp:s}];const{onSessionStart:l}=t;l==null||l(e,Qv(o,this.history)),this.removeListeners=_U(um(this.win,"pointermove",this.onPointerMove),um(this.win,"pointerup",this.onPointerUp),um(this.win,"pointercancel",this.onPointerUp))}updateHandlers(e){this.handlers=e}end(){var e;(e=this.removeListeners)==null||e.call(this),VL.update(this.updatePoint)}};function i4(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Qv(e,t){return{point:e.point,delta:i4(e.point,t[t.length-1]),offset:i4(e.point,t[0]),velocity:jU(t,.1)}}var kU=e=>e*1e3;function jU(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const o=e[e.length-1];for(;n>=0&&(r=e[n],!(o.timestamp-r.timestamp>kU(t)));)n--;if(!r)return{x:0,y:0};const s=(o.timestamp-r.timestamp)/1e3;if(s===0)return{x:0,y:0};const l={x:(o.x-r.x)/s,y:(o.y-r.y)/s};return l.x===1/0&&(l.x=0),l.y===1/0&&(l.y=0),l}function _U(...e){return t=>e.reduce((n,r)=>r(n),t)}function Yv(e,t){return Math.abs(e-t)}function c4(e){return"x"in e&&"y"in e}function IU(e,t){if(typeof e=="number"&&typeof t=="number")return Yv(e,t);if(c4(e)&&c4(t)){const n=Yv(e.x,t.x),r=Yv(e.y,t.y);return Math.sqrt(n**2+r**2)}return 0}function P6(e){const t=i.useRef(null);return t.current=e,t}function E6(e,t){const{onPan:n,onPanStart:r,onPanEnd:o,onPanSessionStart:s,onPanSessionEnd:l,threshold:c}=t,d=!!(n||r||o||s||l),f=i.useRef(null),m=P6({onSessionStart:s,onSessionEnd:l,onStart:r,onMove:n,onEnd(h,g){f.current=null,o==null||o(h,g)}});i.useEffect(()=>{var h;(h=f.current)==null||h.updateHandlers(m.current)}),i.useEffect(()=>{const h=e.current;if(!h||!d)return;function g(b){f.current=new SU(b,m.current,c)}return um(h,"pointerdown",g)},[e,d,m,c]),i.useEffect(()=>()=>{var h;(h=f.current)==null||h.end(),f.current=null},[])}function PU(e,t){if(!e){t(void 0);return}t({width:e.offsetWidth,height:e.offsetHeight});const n=e.ownerDocument.defaultView??window,r=new n.ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const[s]=o;let l,c;if("borderBoxSize"in s){const d=s.borderBoxSize,f=Array.isArray(d)?d[0]:d;l=f.inlineSize,c=f.blockSize}else l=e.offsetWidth,c=e.offsetHeight;t({width:l,height:c})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}var EU=globalThis!=null&&globalThis.document?i.useLayoutEffect:i.useEffect;function MU(e,t){var n,r;if(!e||!e.parentElement)return;const o=(r=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?r:window,s=new o.MutationObserver(()=>{t()});return s.observe(e.parentElement,{childList:!0}),()=>{s.disconnect()}}function M6({getNodes:e,observeMutation:t=!0}){const[n,r]=i.useState([]),[o,s]=i.useState(0);return EU(()=>{const l=e(),c=l.map((d,f)=>PU(d,m=>{r(h=>[...h.slice(0,f),m,...h.slice(f+1)])}));if(t){const d=l[0];c.push(MU(d,()=>{s(f=>f+1)}))}return()=>{c.forEach(d=>{d==null||d()})}},[o]),n}function OU(e){return typeof e=="object"&&e!==null&&"current"in e}function DU(e){const[t]=M6({observeMutation:!1,getNodes(){return[OU(e)?e.current:e]}});return t}function RU(e){const{min:t=0,max:n=100,onChange:r,value:o,defaultValue:s,isReversed:l,direction:c="ltr",orientation:d="horizontal",id:f,isDisabled:m,isReadOnly:h,onChangeStart:g,onChangeEnd:b,step:y=1,getAriaValueText:x,"aria-valuetext":w,"aria-label":S,"aria-labelledby":j,name:_,focusThumbOnChange:I=!0,minStepsBetweenThumbs:E=0,...M}=e,D=gn(g),R=gn(b),N=gn(x),O=j6({isReversed:l,direction:c,orientation:d}),[T,U]=qd({value:o,defaultValue:s??[25,75],onChange:r});if(!Array.isArray(T))throw new TypeError(`[range-slider] You passed an invalid value for \`value\` or \`defaultValue\`, expected \`Array\` but got \`${typeof T}\``);const[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),[V,se]=i.useState(-1),ee=!(m||h),le=i.useRef(T),ae=T.map(Se=>mc(Se,t,n)),ce=E*y,J=AU(ae,t,n,ce),re=i.useRef({eventSource:null,value:[],valueBounds:[]});re.current.value=ae,re.current.valueBounds=J;const A=ae.map(Se=>n-Se+t),K=(O?A:ae).map(Se=>Dm(Se,t,n)),ne=d==="vertical",z=i.useRef(null),oe=i.useRef(null),X=M6({getNodes(){const Se=oe.current,Ve=Se==null?void 0:Se.querySelectorAll("[role=slider]");return Ve?Array.from(Ve):[]}}),Z=i.useId(),ve=fU(f??Z),de=i.useCallback(Se=>{var Ve,Ge;if(!z.current)return;re.current.eventSource="pointer";const Le=z.current.getBoundingClientRect(),{clientX:bt,clientY:fn}=(Ge=(Ve=Se.touches)==null?void 0:Ve[0])!=null?Ge:Se,Bt=ne?Le.bottom-fn:bt-Le.left,Ht=ne?Le.height:Le.width;let zn=Bt/Ht;return O&&(zn=1-zn),B3(zn,t,n)},[ne,O,n,t]),ke=(n-t)/10,we=y||(n-t)/100,Re=i.useMemo(()=>({setValueAtIndex(Se,Ve){if(!ee)return;const Ge=re.current.valueBounds[Se];Ve=parseFloat(nb(Ve,Ge.min,we)),Ve=mc(Ve,Ge.min,Ge.max);const Le=[...re.current.value];Le[Se]=Ve,U(Le)},setActiveIndex:se,stepUp(Se,Ve=we){const Ge=re.current.value[Se],Le=O?Ge-Ve:Ge+Ve;Re.setValueAtIndex(Se,Le)},stepDown(Se,Ve=we){const Ge=re.current.value[Se],Le=O?Ge+Ve:Ge-Ve;Re.setValueAtIndex(Se,Le)},reset(){U(le.current)}}),[we,O,U,ee]),Qe=i.useCallback(Se=>{const Ve=Se.key,Le={ArrowRight:()=>Re.stepUp(V),ArrowUp:()=>Re.stepUp(V),ArrowLeft:()=>Re.stepDown(V),ArrowDown:()=>Re.stepDown(V),PageUp:()=>Re.stepUp(V,ke),PageDown:()=>Re.stepDown(V,ke),Home:()=>{const{min:bt}=J[V];Re.setValueAtIndex(V,bt)},End:()=>{const{max:bt}=J[V];Re.setValueAtIndex(V,bt)}}[Ve];Le&&(Se.preventDefault(),Se.stopPropagation(),Le(Se),re.current.eventSource="keyboard")},[Re,V,ke,J]),{getThumbStyle:$e,rootStyle:vt,trackStyle:it,innerTrackStyle:ot}=i.useMemo(()=>k6({isReversed:O,orientation:d,thumbRects:X,thumbPercents:K}),[O,d,K,X]),Ce=i.useCallback(Se=>{var Ve;const Ge=Se??V;if(Ge!==-1&&I){const Le=ve.getThumb(Ge),bt=(Ve=oe.current)==null?void 0:Ve.ownerDocument.getElementById(Le);bt&&setTimeout(()=>bt.focus())}},[I,V,ve]);ba(()=>{re.current.eventSource==="keyboard"&&(R==null||R(re.current.value))},[ae,R]);const Me=Se=>{const Ve=de(Se)||0,Ge=re.current.value.map(Ht=>Math.abs(Ht-Ve)),Le=Math.min(...Ge);let bt=Ge.indexOf(Le);const fn=Ge.filter(Ht=>Ht===Le);fn.length>1&&Ve>re.current.value[bt]&&(bt=bt+fn.length-1),se(bt),Re.setValueAtIndex(bt,Ve),Ce(bt)},qe=Se=>{if(V==-1)return;const Ve=de(Se)||0;se(V),Re.setValueAtIndex(V,Ve),Ce(V)};E6(oe,{onPanSessionStart(Se){ee&&(q(!0),Me(Se),D==null||D(re.current.value))},onPanSessionEnd(){ee&&(q(!1),R==null||R(re.current.value))},onPan(Se){ee&&qe(Se)}});const dt=i.useCallback((Se={},Ve=null)=>({...Se,...M,id:ve.root,ref:Et(Ve,oe),tabIndex:-1,"aria-disabled":bc(m),"data-focused":bo(Y),style:{...Se.style,...vt}}),[M,m,Y,vt,ve]),ye=i.useCallback((Se={},Ve=null)=>({...Se,ref:Et(Ve,z),id:ve.track,"data-disabled":bo(m),style:{...Se.style,...it}}),[m,it,ve]),Ue=i.useCallback((Se={},Ve=null)=>({...Se,ref:Ve,id:ve.innerTrack,style:{...Se.style,...ot}}),[ot,ve]),st=i.useCallback((Se,Ve=null)=>{var Ge;const{index:Le,...bt}=Se,fn=ae[Le];if(fn==null)throw new TypeError(`[range-slider > thumb] Cannot find value at index \`${Le}\`. The \`value\` or \`defaultValue\` length is : ${ae.length}`);const Bt=J[Le];return{...bt,ref:Ve,role:"slider",tabIndex:ee?0:void 0,id:ve.getThumb(Le),"data-active":bo(G&&V===Le),"aria-valuetext":(Ge=N==null?void 0:N(fn))!=null?Ge:w==null?void 0:w[Le],"aria-valuemin":Bt.min,"aria-valuemax":Bt.max,"aria-valuenow":fn,"aria-orientation":d,"aria-disabled":bc(m),"aria-readonly":bc(h),"aria-label":S==null?void 0:S[Le],"aria-labelledby":S!=null&&S[Le]||j==null?void 0:j[Le],style:{...Se.style,...$e(Le)},onKeyDown:xc(Se.onKeyDown,Qe),onFocus:xc(Se.onFocus,()=>{Q(!0),se(Le)}),onBlur:xc(Se.onBlur,()=>{Q(!1),se(-1)})}},[ve,ae,J,ee,G,V,N,w,d,m,h,S,j,$e,Qe,Q]),mt=i.useCallback((Se={},Ve=null)=>({...Se,ref:Ve,id:ve.output,htmlFor:ae.map((Ge,Le)=>ve.getThumb(Le)).join(" "),"aria-live":"off"}),[ve,ae]),Pe=i.useCallback((Se,Ve=null)=>{const{value:Ge,...Le}=Se,bt=!(Gen),fn=Ge>=ae[0]&&Ge<=ae[ae.length-1];let Bt=Dm(Ge,t,n);Bt=O?100-Bt:Bt;const Ht={position:"absolute",pointerEvents:"none",...Qu({orientation:d,vertical:{bottom:`${Bt}%`},horizontal:{left:`${Bt}%`}})};return{...Le,ref:Ve,id:ve.getMarker(Se.value),role:"presentation","aria-hidden":!0,"data-disabled":bo(m),"data-invalid":bo(!bt),"data-highlighted":bo(fn),style:{...Se.style,...Ht}}},[m,O,n,t,d,ae,ve]),Ne=i.useCallback((Se,Ve=null)=>{const{index:Ge,...Le}=Se;return{...Le,ref:Ve,id:ve.getInput(Ge),type:"hidden",value:ae[Ge],name:Array.isArray(_)?_[Ge]:`${_}-${Ge}`}},[_,ae,ve]);return{state:{value:ae,isFocused:Y,isDragging:G,getThumbPercent:Se=>K[Se],getThumbMinValue:Se=>J[Se].min,getThumbMaxValue:Se=>J[Se].max},actions:Re,getRootProps:dt,getTrackProps:ye,getInnerTrackProps:Ue,getThumbProps:st,getMarkerProps:Pe,getInputProps:Ne,getOutputProps:mt}}function AU(e,t,n,r){return e.map((o,s)=>{const l=s===0?t:e[s-1]+r,c=s===e.length-1?n:e[s+1]-r;return{min:l,max:c}})}var[TU,Sg]=Kt({name:"SliderContext",errorMessage:"useSliderContext: `context` is undefined. Seems you forgot to wrap all slider components within "}),[NU,kg]=Kt({name:"RangeSliderStylesContext",errorMessage:`useRangeSliderStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),O6=_e(function(t,n){const r={orientation:"horizontal",...t},o=Xn("Slider",r),s=cn(r),{direction:l}=Hd();s.direction=l;const{getRootProps:c,...d}=RU(s),f=i.useMemo(()=>({...d,name:r.name}),[d,r.name]);return a.jsx(TU,{value:f,children:a.jsx(NU,{value:o,children:a.jsx(je.div,{...c({},n),className:"chakra-slider",__css:o.container,children:r.children})})})});O6.displayName="RangeSlider";var bb=_e(function(t,n){const{getThumbProps:r,getInputProps:o,name:s}=Sg(),l=kg(),c=r(t,n);return a.jsxs(je.div,{...c,className:vl("chakra-slider__thumb",t.className),__css:l.thumb,children:[c.children,s&&a.jsx("input",{...o({index:t.index})})]})});bb.displayName="RangeSliderThumb";var D6=_e(function(t,n){const{getTrackProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:vl("chakra-slider__track",t.className),__css:o.track,"data-testid":"chakra-range-slider-track"})});D6.displayName="RangeSliderTrack";var R6=_e(function(t,n){const{getInnerTrackProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:"chakra-slider__filled-track",__css:o.filledTrack})});R6.displayName="RangeSliderFilledTrack";var dm=_e(function(t,n){const{getMarkerProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:vl("chakra-slider__marker",t.className),__css:o.mark})});dm.displayName="RangeSliderMark";function $U(e){var t;const{min:n=0,max:r=100,onChange:o,value:s,defaultValue:l,isReversed:c,direction:d="ltr",orientation:f="horizontal",id:m,isDisabled:h,isReadOnly:g,onChangeStart:b,onChangeEnd:y,step:x=1,getAriaValueText:w,"aria-valuetext":S,"aria-label":j,"aria-labelledby":_,name:I,focusThumbOnChange:E=!0,...M}=e,D=gn(b),R=gn(y),N=gn(w),O=j6({isReversed:c,direction:d,orientation:f}),[T,U]=qd({value:s,defaultValue:l??FU(n,r),onChange:o}),[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),V=!(h||g),se=(r-n)/10,ee=x||(r-n)/100,le=mc(T,n,r),ae=r-le+n,J=Dm(O?ae:le,n,r),re=f==="vertical",A=P6({min:n,max:r,step:x,isDisabled:h,value:le,isInteractive:V,isReversed:O,isVertical:re,eventSource:null,focusThumbOnChange:E,orientation:f}),L=i.useRef(null),K=i.useRef(null),ne=i.useRef(null),z=i.useId(),oe=m??z,[X,Z]=[`slider-thumb-${oe}`,`slider-track-${oe}`],me=i.useCallback(Pe=>{var Ne,kt;if(!L.current)return;const Se=A.current;Se.eventSource="pointer";const Ve=L.current.getBoundingClientRect(),{clientX:Ge,clientY:Le}=(kt=(Ne=Pe.touches)==null?void 0:Ne[0])!=null?kt:Pe,bt=re?Ve.bottom-Le:Ge-Ve.left,fn=re?Ve.height:Ve.width;let Bt=bt/fn;O&&(Bt=1-Bt);let Ht=B3(Bt,Se.min,Se.max);return Se.step&&(Ht=parseFloat(nb(Ht,Se.min,Se.step))),Ht=mc(Ht,Se.min,Se.max),Ht},[re,O,A]),ve=i.useCallback(Pe=>{const Ne=A.current;Ne.isInteractive&&(Pe=parseFloat(nb(Pe,Ne.min,ee)),Pe=mc(Pe,Ne.min,Ne.max),U(Pe))},[ee,U,A]),de=i.useMemo(()=>({stepUp(Pe=ee){const Ne=O?le-Pe:le+Pe;ve(Ne)},stepDown(Pe=ee){const Ne=O?le+Pe:le-Pe;ve(Ne)},reset(){ve(l||0)},stepTo(Pe){ve(Pe)}}),[ve,O,le,ee,l]),ke=i.useCallback(Pe=>{const Ne=A.current,Se={ArrowRight:()=>de.stepUp(),ArrowUp:()=>de.stepUp(),ArrowLeft:()=>de.stepDown(),ArrowDown:()=>de.stepDown(),PageUp:()=>de.stepUp(se),PageDown:()=>de.stepDown(se),Home:()=>ve(Ne.min),End:()=>ve(Ne.max)}[Pe.key];Se&&(Pe.preventDefault(),Pe.stopPropagation(),Se(Pe),Ne.eventSource="keyboard")},[de,ve,se,A]),we=(t=N==null?void 0:N(le))!=null?t:S,Re=DU(K),{getThumbStyle:Qe,rootStyle:$e,trackStyle:vt,innerTrackStyle:it}=i.useMemo(()=>{const Pe=A.current,Ne=Re??{width:0,height:0};return k6({isReversed:O,orientation:Pe.orientation,thumbRects:[Ne],thumbPercents:[J]})},[O,Re,J,A]),ot=i.useCallback(()=>{A.current.focusThumbOnChange&&setTimeout(()=>{var Ne;return(Ne=K.current)==null?void 0:Ne.focus()})},[A]);ba(()=>{const Pe=A.current;ot(),Pe.eventSource==="keyboard"&&(R==null||R(Pe.value))},[le,R]);function Ce(Pe){const Ne=me(Pe);Ne!=null&&Ne!==A.current.value&&U(Ne)}E6(ne,{onPanSessionStart(Pe){const Ne=A.current;Ne.isInteractive&&(q(!0),ot(),Ce(Pe),D==null||D(Ne.value))},onPanSessionEnd(){const Pe=A.current;Pe.isInteractive&&(q(!1),R==null||R(Pe.value))},onPan(Pe){A.current.isInteractive&&Ce(Pe)}});const Me=i.useCallback((Pe={},Ne=null)=>({...Pe,...M,ref:Et(Ne,ne),tabIndex:-1,"aria-disabled":bc(h),"data-focused":bo(Y),style:{...Pe.style,...$e}}),[M,h,Y,$e]),qe=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Et(Ne,L),id:Z,"data-disabled":bo(h),style:{...Pe.style,...vt}}),[h,Z,vt]),dt=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Ne,style:{...Pe.style,...it}}),[it]),ye=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Et(Ne,K),role:"slider",tabIndex:V?0:void 0,id:X,"data-active":bo(G),"aria-valuetext":we,"aria-valuemin":n,"aria-valuemax":r,"aria-valuenow":le,"aria-orientation":f,"aria-disabled":bc(h),"aria-readonly":bc(g),"aria-label":j,"aria-labelledby":j?void 0:_,style:{...Pe.style,...Qe(0)},onKeyDown:xc(Pe.onKeyDown,ke),onFocus:xc(Pe.onFocus,()=>Q(!0)),onBlur:xc(Pe.onBlur,()=>Q(!1))}),[V,X,G,we,n,r,le,f,h,g,j,_,Qe,ke]),Ue=i.useCallback((Pe,Ne=null)=>{const kt=!(Pe.valuer),Se=le>=Pe.value,Ve=Dm(Pe.value,n,r),Ge={position:"absolute",pointerEvents:"none",...LU({orientation:f,vertical:{bottom:O?`${100-Ve}%`:`${Ve}%`},horizontal:{left:O?`${100-Ve}%`:`${Ve}%`}})};return{...Pe,ref:Ne,role:"presentation","aria-hidden":!0,"data-disabled":bo(h),"data-invalid":bo(!kt),"data-highlighted":bo(Se),style:{...Pe.style,...Ge}}},[h,O,r,n,f,le]),st=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Ne,type:"hidden",value:le,name:I}),[I,le]);return{state:{value:le,isFocused:Y,isDragging:G},actions:de,getRootProps:Me,getTrackProps:qe,getInnerTrackProps:dt,getThumbProps:ye,getMarkerProps:Ue,getInputProps:st}}function LU(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}function FU(e,t){return t"}),[BU,_g]=Kt({name:"SliderStylesContext",hookName:"useSliderStyles",providerName:""}),Sy=_e((e,t)=>{var n;const r={...e,orientation:(n=e==null?void 0:e.orientation)!=null?n:"horizontal"},o=Xn("Slider",r),s=cn(r),{direction:l}=Hd();s.direction=l;const{getInputProps:c,getRootProps:d,...f}=$U(s),m=d(),h=c({},t);return a.jsx(zU,{value:f,children:a.jsx(BU,{value:o,children:a.jsxs(je.div,{...m,className:vl("chakra-slider",r.className),__css:o.container,children:[r.children,a.jsx("input",{...h})]})})})});Sy.displayName="Slider";var ky=_e((e,t)=>{const{getThumbProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__thumb",e.className),__css:r.thumb})});ky.displayName="SliderThumb";var jy=_e((e,t)=>{const{getTrackProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__track",e.className),__css:r.track})});jy.displayName="SliderTrack";var _y=_e((e,t)=>{const{getInnerTrackProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__filled-track",e.className),__css:r.filledTrack})});_y.displayName="SliderFilledTrack";var Zi=_e((e,t)=>{const{getMarkerProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__marker",e.className),__css:r.mark})});Zi.displayName="SliderMark";var[HU,A6]=Kt({name:"StatStylesContext",errorMessage:`useStatStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),T6=_e(function(t,n){const r=Xn("Stat",t),o={position:"relative",flex:"1 1 0%",...r.container},{className:s,children:l,...c}=cn(t);return a.jsx(HU,{value:r,children:a.jsx(je.div,{ref:n,...c,className:et("chakra-stat",s),__css:o,children:a.jsx("dl",{children:l})})})});T6.displayName="Stat";var N6=_e(function(t,n){return a.jsx(je.div,{...t,ref:n,role:"group",className:et("chakra-stat__group",t.className),__css:{display:"flex",flexWrap:"wrap",justifyContent:"space-around",alignItems:"flex-start"}})});N6.displayName="StatGroup";var $6=_e(function(t,n){const r=A6();return a.jsx(je.dt,{ref:n,...t,className:et("chakra-stat__label",t.className),__css:r.label})});$6.displayName="StatLabel";var L6=_e(function(t,n){const r=A6();return a.jsx(je.dd,{ref:n,...t,className:et("chakra-stat__number",t.className),__css:{...r.number,fontFeatureSettings:"pnum",fontVariantNumeric:"proportional-nums"}})});L6.displayName="StatNumber";var Iy=_e(function(t,n){const r=Xn("Switch",t),{spacing:o="0.5rem",children:s,...l}=cn(t),{getIndicatorProps:c,getInputProps:d,getCheckboxProps:f,getRootProps:m,getLabelProps:h}=z3(l),g=i.useMemo(()=>({display:"inline-block",position:"relative",verticalAlign:"middle",lineHeight:0,...r.container}),[r.container]),b=i.useMemo(()=>({display:"inline-flex",flexShrink:0,justifyContent:"flex-start",boxSizing:"content-box",cursor:"pointer",...r.track}),[r.track]),y=i.useMemo(()=>({userSelect:"none",marginStart:o,...r.label}),[o,r.label]);return a.jsxs(je.label,{...m(),className:et("chakra-switch",t.className),__css:g,children:[a.jsx("input",{className:"chakra-switch__input",...d({},n)}),a.jsx(je.span,{...f(),className:"chakra-switch__track",__css:b,children:a.jsx(je.span,{__css:r.thumb,className:"chakra-switch__thumb",...c()})}),s&&a.jsx(je.span,{className:"chakra-switch__label",...h(),__css:y,children:s})]})});Iy.displayName="Switch";var[WU,VU,UU,GU]=Vx();function KU(e){var t;const{defaultIndex:n,onChange:r,index:o,isManual:s,isLazy:l,lazyBehavior:c="unmount",orientation:d="horizontal",direction:f="ltr",...m}=e,[h,g]=i.useState(n??0),[b,y]=qd({defaultValue:n??0,value:o,onChange:r});i.useEffect(()=>{o!=null&&g(o)},[o]);const x=UU(),w=i.useId();return{id:`tabs-${(t=e.id)!=null?t:w}`,selectedIndex:b,focusedIndex:h,setSelectedIndex:y,setFocusedIndex:g,isManual:s,isLazy:l,lazyBehavior:c,orientation:d,descendants:x,direction:f,htmlProps:m}}var[qU,Ig]=Kt({name:"TabsContext",errorMessage:"useTabsContext: `context` is undefined. Seems you forgot to wrap all tabs components within "});function XU(e){const{focusedIndex:t,orientation:n,direction:r}=Ig(),o=VU(),s=i.useCallback(l=>{const c=()=>{var j;const _=o.nextEnabled(t);_&&((j=_.node)==null||j.focus())},d=()=>{var j;const _=o.prevEnabled(t);_&&((j=_.node)==null||j.focus())},f=()=>{var j;const _=o.firstEnabled();_&&((j=_.node)==null||j.focus())},m=()=>{var j;const _=o.lastEnabled();_&&((j=_.node)==null||j.focus())},h=n==="horizontal",g=n==="vertical",b=l.key,y=r==="ltr"?"ArrowLeft":"ArrowRight",x=r==="ltr"?"ArrowRight":"ArrowLeft",S={[y]:()=>h&&d(),[x]:()=>h&&c(),ArrowDown:()=>g&&c(),ArrowUp:()=>g&&d(),Home:f,End:m}[b];S&&(l.preventDefault(),S(l))},[o,t,n,r]);return{...e,role:"tablist","aria-orientation":n,onKeyDown:ze(e.onKeyDown,s)}}function QU(e){const{isDisabled:t=!1,isFocusable:n=!1,...r}=e,{setSelectedIndex:o,isManual:s,id:l,setFocusedIndex:c,selectedIndex:d}=Ig(),{index:f,register:m}=GU({disabled:t&&!n}),h=f===d,g=()=>{o(f)},b=()=>{c(f),!s&&!(t&&n)&&o(f)},y=z5({...r,ref:Et(m,e.ref),isDisabled:t,isFocusable:n,onClick:ze(e.onClick,g)}),x="button";return{...y,id:F6(l,f),role:"tab",tabIndex:h?0:-1,type:x,"aria-selected":h,"aria-controls":z6(l,f),onFocus:t?void 0:ze(e.onFocus,b)}}var[YU,ZU]=Kt({});function JU(e){const t=Ig(),{id:n,selectedIndex:r}=t,s=rg(e.children).map((l,c)=>i.createElement(YU,{key:c,value:{isSelected:c===r,id:z6(n,c),tabId:F6(n,c),selectedIndex:r}},l));return{...e,children:s}}function eG(e){const{children:t,...n}=e,{isLazy:r,lazyBehavior:o}=Ig(),{isSelected:s,id:l,tabId:c}=ZU(),d=i.useRef(!1);s&&(d.current=!0);const f=Cy({wasSelected:d.current,isSelected:s,enabled:r,mode:o});return{tabIndex:0,...n,children:f?t:null,role:"tabpanel","aria-labelledby":c,hidden:!s,id:l}}function F6(e,t){return`${e}--tab-${t}`}function z6(e,t){return`${e}--tabpanel-${t}`}var[tG,Pg]=Kt({name:"TabsStylesContext",errorMessage:`useTabsStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),ci=_e(function(t,n){const r=Xn("Tabs",t),{children:o,className:s,...l}=cn(t),{htmlProps:c,descendants:d,...f}=KU(l),m=i.useMemo(()=>f,[f]),{isFitted:h,...g}=c,b={position:"relative",...r.root};return a.jsx(WU,{value:d,children:a.jsx(qU,{value:m,children:a.jsx(tG,{value:r,children:a.jsx(je.div,{className:et("chakra-tabs",s),ref:n,...g,__css:b,children:o})})})})});ci.displayName="Tabs";var ui=_e(function(t,n){const r=XU({...t,ref:n}),s={display:"flex",...Pg().tablist};return a.jsx(je.div,{...r,className:et("chakra-tabs__tablist",t.className),__css:s})});ui.displayName="TabList";var $r=_e(function(t,n){const r=eG({...t,ref:n}),o=Pg();return a.jsx(je.div,{outline:"0",...r,className:et("chakra-tabs__tab-panel",t.className),__css:o.tabpanel})});$r.displayName="TabPanel";var eu=_e(function(t,n){const r=JU(t),o=Pg();return a.jsx(je.div,{...r,width:"100%",ref:n,className:et("chakra-tabs__tab-panels",t.className),__css:o.tabpanels})});eu.displayName="TabPanels";var mr=_e(function(t,n){const r=Pg(),o=QU({...t,ref:n}),s={outline:"0",display:"flex",alignItems:"center",justifyContent:"center",...r.tab};return a.jsx(je.button,{...o,className:et("chakra-tabs__tab",t.className),__css:s})});mr.displayName="Tab";function nG(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var rG=["h","minH","height","minHeight"],B6=_e((e,t)=>{const n=ml("Textarea",e),{className:r,rows:o,...s}=cn(e),l=Kx(s),c=o?nG(n,rG):n;return a.jsx(je.textarea,{ref:t,rows:o,...l,className:et("chakra-textarea",r),__css:c})});B6.displayName="Textarea";var oG={exit:{scale:.85,opacity:0,transition:{opacity:{duration:.15,easings:"easeInOut"},scale:{duration:.2,easings:"easeInOut"}}},enter:{scale:1,opacity:1,transition:{opacity:{easings:"easeOut",duration:.2},scale:{duration:.2,ease:[.175,.885,.4,1.1]}}}},xb=e=>{var t;return((t=e.current)==null?void 0:t.ownerDocument)||document},fm=e=>{var t,n;return((n=(t=e.current)==null?void 0:t.ownerDocument)==null?void 0:n.defaultView)||window};function sG(e={}){const{openDelay:t=0,closeDelay:n=0,closeOnClick:r=!0,closeOnMouseDown:o,closeOnScroll:s,closeOnPointerDown:l=o,closeOnEsc:c=!0,onOpen:d,onClose:f,placement:m,id:h,isOpen:g,defaultIsOpen:b,arrowSize:y=10,arrowShadowColor:x,arrowPadding:w,modifiers:S,isDisabled:j,gutter:_,offset:I,direction:E,...M}=e,{isOpen:D,onOpen:R,onClose:N}=yy({isOpen:g,defaultIsOpen:b,onOpen:d,onClose:f}),{referenceRef:O,getPopperProps:T,getArrowInnerProps:U,getArrowProps:G}=xy({enabled:D,placement:m,arrowPadding:w,modifiers:S,gutter:_,offset:I,direction:E}),q=i.useId(),Q=`tooltip-${h??q}`,V=i.useRef(null),se=i.useRef(),ee=i.useCallback(()=>{se.current&&(clearTimeout(se.current),se.current=void 0)},[]),le=i.useRef(),ae=i.useCallback(()=>{le.current&&(clearTimeout(le.current),le.current=void 0)},[]),ce=i.useCallback(()=>{ae(),N()},[N,ae]),J=aG(V,ce),re=i.useCallback(()=>{if(!j&&!se.current){D&&J();const Z=fm(V);se.current=Z.setTimeout(R,t)}},[J,j,D,R,t]),A=i.useCallback(()=>{ee();const Z=fm(V);le.current=Z.setTimeout(ce,n)},[n,ce,ee]),L=i.useCallback(()=>{D&&r&&A()},[r,A,D]),K=i.useCallback(()=>{D&&l&&A()},[l,A,D]),ne=i.useCallback(Z=>{D&&Z.key==="Escape"&&A()},[D,A]);Ul(()=>xb(V),"keydown",c?ne:void 0),Ul(()=>{if(!s)return null;const Z=V.current;if(!Z)return null;const me=P5(Z);return me.localName==="body"?fm(V):me},"scroll",()=>{D&&s&&ce()},{passive:!0,capture:!0}),i.useEffect(()=>{j&&(ee(),D&&N())},[j,D,N,ee]),i.useEffect(()=>()=>{ee(),ae()},[ee,ae]),Ul(()=>V.current,"pointerleave",A);const z=i.useCallback((Z={},me=null)=>({...Z,ref:Et(V,me,O),onPointerEnter:ze(Z.onPointerEnter,de=>{de.pointerType!=="touch"&&re()}),onClick:ze(Z.onClick,L),onPointerDown:ze(Z.onPointerDown,K),onFocus:ze(Z.onFocus,re),onBlur:ze(Z.onBlur,A),"aria-describedby":D?Q:void 0}),[re,A,K,D,Q,L,O]),oe=i.useCallback((Z={},me=null)=>T({...Z,style:{...Z.style,[Fn.arrowSize.var]:y?`${y}px`:void 0,[Fn.arrowShadowColor.var]:x}},me),[T,y,x]),X=i.useCallback((Z={},me=null)=>{const ve={...Z.style,position:"relative",transformOrigin:Fn.transformOrigin.varRef};return{ref:me,...M,...Z,id:Q,role:"tooltip",style:ve}},[M,Q]);return{isOpen:D,show:re,hide:A,getTriggerProps:z,getTooltipProps:X,getTooltipPositionerProps:oe,getArrowProps:G,getArrowInnerProps:U}}var Zv="chakra-ui:close-tooltip";function aG(e,t){return i.useEffect(()=>{const n=xb(e);return n.addEventListener(Zv,t),()=>n.removeEventListener(Zv,t)},[t,e]),()=>{const n=xb(e),r=fm(e);n.dispatchEvent(new r.CustomEvent(Zv))}}function lG(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function iG(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}var cG=je(Mn.div),Ut=_e((e,t)=>{var n,r;const o=ml("Tooltip",e),s=cn(e),l=Hd(),{children:c,label:d,shouldWrapChildren:f,"aria-label":m,hasArrow:h,bg:g,portalProps:b,background:y,backgroundColor:x,bgColor:w,motionProps:S,...j}=s,_=(r=(n=y??x)!=null?n:g)!=null?r:w;if(_){o.bg=_;const T=OR(l,"colors",_);o[Fn.arrowBg.var]=T}const I=sG({...j,direction:l.direction}),E=typeof c=="string"||f;let M;if(E)M=a.jsx(je.span,{display:"inline-block",tabIndex:0,...I.getTriggerProps(),children:c});else{const T=i.Children.only(c);M=i.cloneElement(T,I.getTriggerProps(T.props,T.ref))}const D=!!m,R=I.getTooltipProps({},t),N=D?lG(R,["role","id"]):R,O=iG(R,["role","id"]);return d?a.jsxs(a.Fragment,{children:[M,a.jsx(hr,{children:I.isOpen&&a.jsx(Uc,{...b,children:a.jsx(je.div,{...I.getTooltipPositionerProps(),__css:{zIndex:o.zIndex,pointerEvents:"none"},children:a.jsxs(cG,{variants:oG,initial:"exit",animate:"enter",exit:"exit",...S,...N,__css:o,children:[d,D&&a.jsx(je.span,{srOnly:!0,...O,children:m}),h&&a.jsx(je.div,{"data-popper-arrow":!0,className:"chakra-tooltip__arrow-wrapper",children:a.jsx(je.div,{"data-popper-arrow-inner":!0,className:"chakra-tooltip__arrow",__css:{bg:o.bg}})})]})})})})]}):a.jsx(a.Fragment,{children:c})});Ut.displayName="Tooltip";const uG=fe(pe,({system:e})=>{const{consoleLogLevel:t,shouldLogToConsole:n}=e;return{consoleLogLevel:t,shouldLogToConsole:n}}),H6=e=>{const{consoleLogLevel:t,shouldLogToConsole:n}=H(uG);return i.useEffect(()=>{n?(localStorage.setItem("ROARR_LOG","true"),localStorage.setItem("ROARR_FILTER",`context.logLevel:>=${DR[t]}`)):localStorage.setItem("ROARR_LOG","false"),Aw.ROARR.write=RR.createLogWriter()},[t,n]),i.useEffect(()=>{const o={...AR};TR.set(Aw.Roarr.child(o))},[]),i.useMemo(()=>hl(e),[e])},dG=()=>{const e=te(),t=H(r=>r.system.toastQueue),n=tg();return i.useEffect(()=>{t.forEach(r=>{n(r)}),t.length>0&&e(NR())},[e,n,t]),null},zs=()=>{const e=te();return i.useCallback(n=>e(lt(rn(n))),[e])},fG=i.memo(dG);var pG=new Map([["aac","audio/aac"],["abw","application/x-abiword"],["arc","application/x-freearc"],["avif","image/avif"],["avi","video/x-msvideo"],["azw","application/vnd.amazon.ebook"],["bin","application/octet-stream"],["bmp","image/bmp"],["bz","application/x-bzip"],["bz2","application/x-bzip2"],["cda","application/x-cdf"],["csh","application/x-csh"],["css","text/css"],["csv","text/csv"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["eot","application/vnd.ms-fontobject"],["epub","application/epub+zip"],["gz","application/gzip"],["gif","image/gif"],["heic","image/heic"],["heif","image/heif"],["htm","text/html"],["html","text/html"],["ico","image/vnd.microsoft.icon"],["ics","text/calendar"],["jar","application/java-archive"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["js","text/javascript"],["json","application/json"],["jsonld","application/ld+json"],["mid","audio/midi"],["midi","audio/midi"],["mjs","text/javascript"],["mp3","audio/mpeg"],["mp4","video/mp4"],["mpeg","video/mpeg"],["mpkg","application/vnd.apple.installer+xml"],["odp","application/vnd.oasis.opendocument.presentation"],["ods","application/vnd.oasis.opendocument.spreadsheet"],["odt","application/vnd.oasis.opendocument.text"],["oga","audio/ogg"],["ogv","video/ogg"],["ogx","application/ogg"],["opus","audio/opus"],["otf","font/otf"],["png","image/png"],["pdf","application/pdf"],["php","application/x-httpd-php"],["ppt","application/vnd.ms-powerpoint"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["rar","application/vnd.rar"],["rtf","application/rtf"],["sh","application/x-sh"],["svg","image/svg+xml"],["swf","application/x-shockwave-flash"],["tar","application/x-tar"],["tif","image/tiff"],["tiff","image/tiff"],["ts","video/mp2t"],["ttf","font/ttf"],["txt","text/plain"],["vsd","application/vnd.visio"],["wav","audio/wav"],["weba","audio/webm"],["webm","video/webm"],["webp","image/webp"],["woff","font/woff"],["woff2","font/woff2"],["xhtml","application/xhtml+xml"],["xls","application/vnd.ms-excel"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["xml","application/xml"],["xul","application/vnd.mozilla.xul+xml"],["zip","application/zip"],["7z","application/x-7z-compressed"],["mkv","video/x-matroska"],["mov","video/quicktime"],["msg","application/vnd.ms-outlook"]]);function uf(e,t){var n=mG(e);if(typeof n.path!="string"){var r=e.webkitRelativePath;Object.defineProperty(n,"path",{value:typeof t=="string"?t:typeof r=="string"&&r.length>0?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return n}function mG(e){var t=e.name,n=t&&t.lastIndexOf(".")!==-1;if(n&&!e.type){var r=t.split(".").pop().toLowerCase(),o=pG.get(r);o&&Object.defineProperty(e,"type",{value:o,writable:!1,configurable:!1,enumerable:!0})}return e}var hG=[".DS_Store","Thumbs.db"];function gG(e){return qc(this,void 0,void 0,function(){return Xc(this,function(t){return Lm(e)&&vG(e.dataTransfer)?[2,CG(e.dataTransfer,e.type)]:bG(e)?[2,xG(e)]:Array.isArray(e)&&e.every(function(n){return"getFile"in n&&typeof n.getFile=="function"})?[2,yG(e)]:[2,[]]})})}function vG(e){return Lm(e)}function bG(e){return Lm(e)&&Lm(e.target)}function Lm(e){return typeof e=="object"&&e!==null}function xG(e){return yb(e.target.files).map(function(t){return uf(t)})}function yG(e){return qc(this,void 0,void 0,function(){var t;return Xc(this,function(n){switch(n.label){case 0:return[4,Promise.all(e.map(function(r){return r.getFile()}))];case 1:return t=n.sent(),[2,t.map(function(r){return uf(r)})]}})})}function CG(e,t){return qc(this,void 0,void 0,function(){var n,r;return Xc(this,function(o){switch(o.label){case 0:return e.items?(n=yb(e.items).filter(function(s){return s.kind==="file"}),t!=="drop"?[2,n]:[4,Promise.all(n.map(wG))]):[3,2];case 1:return r=o.sent(),[2,u4(W6(r))];case 2:return[2,u4(yb(e.files).map(function(s){return uf(s)}))]}})})}function u4(e){return e.filter(function(t){return hG.indexOf(t.name)===-1})}function yb(e){if(e===null)return[];for(var t=[],n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nn)return[!1,h4(n)];if(e.sizen)return[!1,h4(n)]}return[!0,null]}function Fl(e){return e!=null}function LG(e){var t=e.files,n=e.accept,r=e.minSize,o=e.maxSize,s=e.multiple,l=e.maxFiles,c=e.validator;return!s&&t.length>1||s&&l>=1&&t.length>l?!1:t.every(function(d){var f=K6(d,n),m=Id(f,1),h=m[0],g=q6(d,r,o),b=Id(g,1),y=b[0],x=c?c(d):null;return h&&y&&!x})}function Fm(e){return typeof e.isPropagationStopped=="function"?e.isPropagationStopped():typeof e.cancelBubble<"u"?e.cancelBubble:!1}function Op(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(t){return t==="Files"||t==="application/x-moz-file"}):!!e.target&&!!e.target.files}function v4(e){e.preventDefault()}function FG(e){return e.indexOf("MSIE")!==-1||e.indexOf("Trident/")!==-1}function zG(e){return e.indexOf("Edge/")!==-1}function BG(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:window.navigator.userAgent;return FG(e)||zG(e)}function ys(){for(var e=arguments.length,t=new Array(e),n=0;n1?o-1:0),l=1;le.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oK(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var Py=i.forwardRef(function(e,t){var n=e.children,r=zm(e,KG),o=Ey(r),s=o.open,l=zm(o,qG);return i.useImperativeHandle(t,function(){return{open:s}},[s]),B.createElement(i.Fragment,null,n(kn(kn({},l),{},{open:s})))});Py.displayName="Dropzone";var Z6={disabled:!1,getFilesFromEvent:gG,maxSize:1/0,minSize:0,multiple:!0,maxFiles:0,preventDropOnDocument:!0,noClick:!1,noKeyboard:!1,noDrag:!1,noDragEventsBubbling:!1,validator:null,useFsAccessApi:!0,autoFocus:!1};Py.defaultProps=Z6;Py.propTypes={children:nn.func,accept:nn.objectOf(nn.arrayOf(nn.string)),multiple:nn.bool,preventDropOnDocument:nn.bool,noClick:nn.bool,noKeyboard:nn.bool,noDrag:nn.bool,noDragEventsBubbling:nn.bool,minSize:nn.number,maxSize:nn.number,maxFiles:nn.number,disabled:nn.bool,getFilesFromEvent:nn.func,onFileDialogCancel:nn.func,onFileDialogOpen:nn.func,useFsAccessApi:nn.bool,autoFocus:nn.bool,onDragEnter:nn.func,onDragLeave:nn.func,onDragOver:nn.func,onDrop:nn.func,onDropAccepted:nn.func,onDropRejected:nn.func,onError:nn.func,validator:nn.func};var kb={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,acceptedFiles:[],fileRejections:[]};function Ey(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=kn(kn({},Z6),e),n=t.accept,r=t.disabled,o=t.getFilesFromEvent,s=t.maxSize,l=t.minSize,c=t.multiple,d=t.maxFiles,f=t.onDragEnter,m=t.onDragLeave,h=t.onDragOver,g=t.onDrop,b=t.onDropAccepted,y=t.onDropRejected,x=t.onFileDialogCancel,w=t.onFileDialogOpen,S=t.useFsAccessApi,j=t.autoFocus,_=t.preventDropOnDocument,I=t.noClick,E=t.noKeyboard,M=t.noDrag,D=t.noDragEventsBubbling,R=t.onError,N=t.validator,O=i.useMemo(function(){return VG(n)},[n]),T=i.useMemo(function(){return WG(n)},[n]),U=i.useMemo(function(){return typeof w=="function"?w:x4},[w]),G=i.useMemo(function(){return typeof x=="function"?x:x4},[x]),q=i.useRef(null),Y=i.useRef(null),Q=i.useReducer(sK,kb),V=Jv(Q,2),se=V[0],ee=V[1],le=se.isFocused,ae=se.isFileDialogActive,ce=i.useRef(typeof window<"u"&&window.isSecureContext&&S&&HG()),J=function(){!ce.current&&ae&&setTimeout(function(){if(Y.current){var Me=Y.current.files;Me.length||(ee({type:"closeDialog"}),G())}},300)};i.useEffect(function(){return window.addEventListener("focus",J,!1),function(){window.removeEventListener("focus",J,!1)}},[Y,ae,G,ce]);var re=i.useRef([]),A=function(Me){q.current&&q.current.contains(Me.target)||(Me.preventDefault(),re.current=[])};i.useEffect(function(){return _&&(document.addEventListener("dragover",v4,!1),document.addEventListener("drop",A,!1)),function(){_&&(document.removeEventListener("dragover",v4),document.removeEventListener("drop",A))}},[q,_]),i.useEffect(function(){return!r&&j&&q.current&&q.current.focus(),function(){}},[q,j,r]);var L=i.useCallback(function(Ce){R?R(Ce):console.error(Ce)},[R]),K=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce),re.current=[].concat(YG(re.current),[Ce.target]),Op(Ce)&&Promise.resolve(o(Ce)).then(function(Me){if(!(Fm(Ce)&&!D)){var qe=Me.length,dt=qe>0&&LG({files:Me,accept:O,minSize:l,maxSize:s,multiple:c,maxFiles:d,validator:N}),ye=qe>0&&!dt;ee({isDragAccept:dt,isDragReject:ye,isDragActive:!0,type:"setDraggedFiles"}),f&&f(Ce)}}).catch(function(Me){return L(Me)})},[o,f,L,D,O,l,s,c,d,N]),ne=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce);var Me=Op(Ce);if(Me&&Ce.dataTransfer)try{Ce.dataTransfer.dropEffect="copy"}catch{}return Me&&h&&h(Ce),!1},[h,D]),z=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce);var Me=re.current.filter(function(dt){return q.current&&q.current.contains(dt)}),qe=Me.indexOf(Ce.target);qe!==-1&&Me.splice(qe,1),re.current=Me,!(Me.length>0)&&(ee({type:"setDraggedFiles",isDragActive:!1,isDragAccept:!1,isDragReject:!1}),Op(Ce)&&m&&m(Ce))},[q,m,D]),oe=i.useCallback(function(Ce,Me){var qe=[],dt=[];Ce.forEach(function(ye){var Ue=K6(ye,O),st=Jv(Ue,2),mt=st[0],Pe=st[1],Ne=q6(ye,l,s),kt=Jv(Ne,2),Se=kt[0],Ve=kt[1],Ge=N?N(ye):null;if(mt&&Se&&!Ge)qe.push(ye);else{var Le=[Pe,Ve];Ge&&(Le=Le.concat(Ge)),dt.push({file:ye,errors:Le.filter(function(bt){return bt})})}}),(!c&&qe.length>1||c&&d>=1&&qe.length>d)&&(qe.forEach(function(ye){dt.push({file:ye,errors:[$G]})}),qe.splice(0)),ee({acceptedFiles:qe,fileRejections:dt,type:"setFiles"}),g&&g(qe,dt,Me),dt.length>0&&y&&y(dt,Me),qe.length>0&&b&&b(qe,Me)},[ee,c,O,l,s,d,g,b,y,N]),X=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce),re.current=[],Op(Ce)&&Promise.resolve(o(Ce)).then(function(Me){Fm(Ce)&&!D||oe(Me,Ce)}).catch(function(Me){return L(Me)}),ee({type:"reset"})},[o,oe,L,D]),Z=i.useCallback(function(){if(ce.current){ee({type:"openDialog"}),U();var Ce={multiple:c,types:T};window.showOpenFilePicker(Ce).then(function(Me){return o(Me)}).then(function(Me){oe(Me,null),ee({type:"closeDialog"})}).catch(function(Me){UG(Me)?(G(Me),ee({type:"closeDialog"})):GG(Me)?(ce.current=!1,Y.current?(Y.current.value=null,Y.current.click()):L(new Error("Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no was provided."))):L(Me)});return}Y.current&&(ee({type:"openDialog"}),U(),Y.current.value=null,Y.current.click())},[ee,U,G,S,oe,L,T,c]),me=i.useCallback(function(Ce){!q.current||!q.current.isEqualNode(Ce.target)||(Ce.key===" "||Ce.key==="Enter"||Ce.keyCode===32||Ce.keyCode===13)&&(Ce.preventDefault(),Z())},[q,Z]),ve=i.useCallback(function(){ee({type:"focus"})},[]),de=i.useCallback(function(){ee({type:"blur"})},[]),ke=i.useCallback(function(){I||(BG()?setTimeout(Z,0):Z())},[I,Z]),we=function(Me){return r?null:Me},Re=function(Me){return E?null:we(Me)},Qe=function(Me){return M?null:we(Me)},$e=function(Me){D&&Me.stopPropagation()},vt=i.useMemo(function(){return function(){var Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Ce.refKey,qe=Me===void 0?"ref":Me,dt=Ce.role,ye=Ce.onKeyDown,Ue=Ce.onFocus,st=Ce.onBlur,mt=Ce.onClick,Pe=Ce.onDragEnter,Ne=Ce.onDragOver,kt=Ce.onDragLeave,Se=Ce.onDrop,Ve=zm(Ce,XG);return kn(kn(Sb({onKeyDown:Re(ys(ye,me)),onFocus:Re(ys(Ue,ve)),onBlur:Re(ys(st,de)),onClick:we(ys(mt,ke)),onDragEnter:Qe(ys(Pe,K)),onDragOver:Qe(ys(Ne,ne)),onDragLeave:Qe(ys(kt,z)),onDrop:Qe(ys(Se,X)),role:typeof dt=="string"&&dt!==""?dt:"presentation"},qe,q),!r&&!E?{tabIndex:0}:{}),Ve)}},[q,me,ve,de,ke,K,ne,z,X,E,M,r]),it=i.useCallback(function(Ce){Ce.stopPropagation()},[]),ot=i.useMemo(function(){return function(){var Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Ce.refKey,qe=Me===void 0?"ref":Me,dt=Ce.onChange,ye=Ce.onClick,Ue=zm(Ce,QG),st=Sb({accept:O,multiple:c,type:"file",style:{display:"none"},onChange:we(ys(dt,X)),onClick:we(ys(ye,it)),tabIndex:-1},qe,Y);return kn(kn({},st),Ue)}},[Y,n,c,X,r]);return kn(kn({},se),{},{isFocused:le&&!r,getRootProps:vt,getInputProps:ot,rootRef:q,inputRef:Y,open:we(Z)})}function sK(e,t){switch(t.type){case"focus":return kn(kn({},e),{},{isFocused:!0});case"blur":return kn(kn({},e),{},{isFocused:!1});case"openDialog":return kn(kn({},kb),{},{isFileDialogActive:!0});case"closeDialog":return kn(kn({},e),{},{isFileDialogActive:!1});case"setDraggedFiles":return kn(kn({},e),{},{isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject});case"setFiles":return kn(kn({},e),{},{acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections});case"reset":return kn({},kb);default:return e}}function x4(){}function jb(){return jb=Object.assign?Object.assign.bind():function(e){for(var t=1;t'),!0):t?e.some(function(n){return t.includes(n)})||e.includes("*"):!0}var fK=function(t,n,r){r===void 0&&(r=!1);var o=n.alt,s=n.meta,l=n.mod,c=n.shift,d=n.ctrl,f=n.keys,m=t.key,h=t.code,g=t.ctrlKey,b=t.metaKey,y=t.shiftKey,x=t.altKey,w=Ka(h),S=m.toLowerCase();if(!r){if(o===!x&&S!=="alt"||c===!y&&S!=="shift")return!1;if(l){if(!b&&!g)return!1}else if(s===!b&&S!=="meta"&&S!=="os"||d===!g&&S!=="ctrl"&&S!=="control")return!1}return f&&f.length===1&&(f.includes(S)||f.includes(w))?!0:f?pm(f):!f},pK=i.createContext(void 0),mK=function(){return i.useContext(pK)};function rP(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce(function(n,r){return n&&rP(e[r],t[r])},!0):e===t}var hK=i.createContext({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),gK=function(){return i.useContext(hK)};function vK(e){var t=i.useRef(void 0);return rP(t.current,e)||(t.current=e),t.current}var y4=function(t){t.stopPropagation(),t.preventDefault(),t.stopImmediatePropagation()},bK=typeof window<"u"?i.useLayoutEffect:i.useEffect;function tt(e,t,n,r){var o=i.useRef(null),s=i.useRef(!1),l=n instanceof Array?r instanceof Array?void 0:r:n,c=My(e)?e.join(l==null?void 0:l.splitKey):e,d=n instanceof Array?n:r instanceof Array?r:void 0,f=i.useCallback(t,d??[]),m=i.useRef(f);d?m.current=f:m.current=t;var h=vK(l),g=gK(),b=g.enabledScopes,y=mK();return bK(function(){if(!((h==null?void 0:h.enabled)===!1||!dK(b,h==null?void 0:h.scopes))){var x=function(I,E){var M;if(E===void 0&&(E=!1),!(uK(I)&&!nP(I,h==null?void 0:h.enableOnFormTags))&&!(h!=null&&h.ignoreEventWhen!=null&&h.ignoreEventWhen(I))){if(o.current!==null&&document.activeElement!==o.current&&!o.current.contains(document.activeElement)){y4(I);return}(M=I.target)!=null&&M.isContentEditable&&!(h!=null&&h.enableOnContentEditable)||e1(c,h==null?void 0:h.splitKey).forEach(function(D){var R,N=t1(D,h==null?void 0:h.combinationKey);if(fK(I,N,h==null?void 0:h.ignoreModifiers)||(R=N.keys)!=null&&R.includes("*")){if(E&&s.current)return;if(iK(I,N,h==null?void 0:h.preventDefault),!cK(I,N,h==null?void 0:h.enabled)){y4(I);return}m.current(I,N),E||(s.current=!0)}})}},w=function(I){I.key!==void 0&&(eP(Ka(I.code)),((h==null?void 0:h.keydown)===void 0&&(h==null?void 0:h.keyup)!==!0||h!=null&&h.keydown)&&x(I))},S=function(I){I.key!==void 0&&(tP(Ka(I.code)),s.current=!1,h!=null&&h.keyup&&x(I,!0))},j=o.current||(l==null?void 0:l.document)||document;return j.addEventListener("keyup",S),j.addEventListener("keydown",w),y&&e1(c,h==null?void 0:h.splitKey).forEach(function(_){return y.addHotkey(t1(_,h==null?void 0:h.combinationKey,h==null?void 0:h.description))}),function(){j.removeEventListener("keyup",S),j.removeEventListener("keydown",w),y&&e1(c,h==null?void 0:h.splitKey).forEach(function(_){return y.removeHotkey(t1(_,h==null?void 0:h.combinationKey,h==null?void 0:h.description))})}}},[c,h,b]),o}const xK=e=>{const{t}=W(),{isDragAccept:n,isDragReject:r,setIsHandlingUpload:o}=e;return tt("esc",()=>{o(!1)}),a.jsxs(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"100vw",height:"100vh",zIndex:999,backdropFilter:"blur(20px)"},children:[a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:"base.700",_dark:{bg:"base.900"},opacity:.7,alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"full",height:"full",alignItems:"center",justifyContent:"center",p:4},children:a.jsx($,{sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",flexDir:"column",gap:4,borderWidth:3,borderRadius:"xl",borderStyle:"dashed",color:"base.100",borderColor:"base.100",_dark:{borderColor:"base.200"}},children:n?a.jsx(or,{size:"lg",children:t("gallery.dropToUpload")}):a.jsxs(a.Fragment,{children:[a.jsx(or,{size:"lg",children:t("toast.invalidUpload")}),a.jsx(or,{size:"md",children:t("toast.uploadFailedInvalidUploadDesc")})]})})})]})},yK=i.memo(xK),CK=fe([pe,tr],({gallery:e},t)=>{let n={type:"TOAST"};t==="unifiedCanvas"&&(n={type:"SET_CANVAS_INITIAL_IMAGE"}),t==="img2img"&&(n={type:"SET_INITIAL_IMAGE"});const{autoAddBoardId:r}=e;return{autoAddBoardId:r,postUploadAction:n}}),wK=e=>{const{children:t}=e,{autoAddBoardId:n,postUploadAction:r}=H(CK),o=zs(),{t:s}=W(),[l,c]=i.useState(!1),[d]=CI(),f=i.useCallback(I=>{c(!0),o({title:s("toast.uploadFailed"),description:I.errors.map(E=>E.message).join(` +`),status:"error"})},[s,o]),m=i.useCallback(async I=>{d({file:I,image_category:"user",is_intermediate:!1,postUploadAction:r,board_id:n==="none"?void 0:n})},[n,r,d]),h=i.useCallback((I,E)=>{if(E.length>1){o({title:s("toast.uploadFailed"),description:s("toast.uploadFailedInvalidUploadDesc"),status:"error"});return}E.forEach(M=>{f(M)}),I.forEach(M=>{m(M)})},[s,o,m,f]),g=i.useCallback(()=>{c(!0)},[]),{getRootProps:b,getInputProps:y,isDragAccept:x,isDragReject:w,isDragActive:S,inputRef:j}=Ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},noClick:!0,onDrop:h,onDragOver:g,multiple:!1});i.useEffect(()=>{const I=async E=>{var M,D;j.current&&(M=E.clipboardData)!=null&&M.files&&(j.current.files=E.clipboardData.files,(D=j.current)==null||D.dispatchEvent(new Event("change",{bubbles:!0})))};return document.addEventListener("paste",I),()=>{document.removeEventListener("paste",I)}},[j]);const _=i.useCallback(I=>{I.key},[]);return a.jsxs(Ie,{...b({style:{}}),onKeyDown:_,children:[a.jsx("input",{...y()}),t,a.jsx(hr,{children:S&&l&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(yK,{isDragAccept:x,isDragReject:w,setIsHandlingUpload:c})},"image-upload-overlay")})]})},SK=i.memo(wK),kK=_e((e,t)=>{const{children:n,tooltip:r="",tooltipProps:{placement:o="top",hasArrow:s=!0,...l}={},isChecked:c,...d}=e;return a.jsx(Ut,{label:r,placement:o,hasArrow:s,...l,children:a.jsx(ol,{ref:t,colorScheme:c?"accent":"base",...d,children:n})})}),Xe=i.memo(kK);function jK(e){const t=i.createContext(null);return[({children:o,value:s})=>B.createElement(t.Provider,{value:s},o),()=>{const o=i.useContext(t);if(o===null)throw new Error(e);return o}]}function oP(e){return Array.isArray(e)?e:[e]}const _K=()=>{};function IK(e,t={active:!0}){return typeof e!="function"||!t.active?t.onKeyDown||_K:n=>{var r;n.key==="Escape"&&(e(n),(r=t.onTrigger)==null||r.call(t))}}function sP({data:e}){const t=[],n=[],r=e.reduce((o,s,l)=>(s.group?o[s.group]?o[s.group].push(l):o[s.group]=[l]:n.push(l),o),{});return Object.keys(r).forEach(o=>{t.push(...r[o].map(s=>e[s]))}),t.push(...n.map(o=>e[o])),t}function aP(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==B.Fragment:!1}function lP(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;tr===t[o]).indexOf(!1)>=0)&&(n.current={v:e(),prevDeps:[...t]}),n.current.v}const MK=$R({key:"mantine",prepend:!0});function OK(){return k3()||MK}var DK=Object.defineProperty,C4=Object.getOwnPropertySymbols,RK=Object.prototype.hasOwnProperty,AK=Object.prototype.propertyIsEnumerable,w4=(e,t,n)=>t in e?DK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,TK=(e,t)=>{for(var n in t||(t={}))RK.call(t,n)&&w4(e,n,t[n]);if(C4)for(var n of C4(t))AK.call(t,n)&&w4(e,n,t[n]);return e};const n1="ref";function NK(e){let t;if(e.length!==1)return{args:e,ref:t};const[n]=e;if(!(n instanceof Object))return{args:e,ref:t};if(!(n1 in n))return{args:e,ref:t};t=n[n1];const r=TK({},n);return delete r[n1],{args:[r],ref:t}}const{cssFactory:$K}=(()=>{function e(n,r,o){const s=[],l=zR(n,s,o);return s.length<2?o:l+r(s)}function t(n){const{cache:r}=n,o=(...l)=>{const{ref:c,args:d}=NK(l),f=LR(d,r.registered);return FR(r,f,!1),`${r.key}-${f.name}${c===void 0?"":` ${c}`}`};return{css:o,cx:(...l)=>e(r.registered,o,iP(l))}}return{cssFactory:t}})();function cP(){const e=OK();return EK(()=>$K({cache:e}),[e])}function LK({cx:e,classes:t,context:n,classNames:r,name:o,cache:s}){const l=n.reduce((c,d)=>(Object.keys(d.classNames).forEach(f=>{typeof c[f]!="string"?c[f]=`${d.classNames[f]}`:c[f]=`${c[f]} ${d.classNames[f]}`}),c),{});return Object.keys(t).reduce((c,d)=>(c[d]=e(t[d],l[d],r!=null&&r[d],Array.isArray(o)?o.filter(Boolean).map(f=>`${(s==null?void 0:s.key)||"mantine"}-${f}-${d}`).join(" "):o?`${(s==null?void 0:s.key)||"mantine"}-${o}-${d}`:null),c),{})}var FK=Object.defineProperty,S4=Object.getOwnPropertySymbols,zK=Object.prototype.hasOwnProperty,BK=Object.prototype.propertyIsEnumerable,k4=(e,t,n)=>t in e?FK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,r1=(e,t)=>{for(var n in t||(t={}))zK.call(t,n)&&k4(e,n,t[n]);if(S4)for(var n of S4(t))BK.call(t,n)&&k4(e,n,t[n]);return e};function _b(e,t){return t&&Object.keys(t).forEach(n=>{e[n]?e[n]=r1(r1({},e[n]),t[n]):e[n]=r1({},t[n])}),e}function j4(e,t,n,r){const o=s=>typeof s=="function"?s(t,n||{},r):s||{};return Array.isArray(e)?e.map(s=>o(s.styles)).reduce((s,l)=>_b(s,l),{}):o(e)}function HK({ctx:e,theme:t,params:n,variant:r,size:o}){return e.reduce((s,l)=>(l.variants&&r in l.variants&&_b(s,l.variants[r](t,n,{variant:r,size:o})),l.sizes&&o in l.sizes&&_b(s,l.sizes[o](t,n,{variant:r,size:o})),s),{})}function gr(e){const t=typeof e=="function"?e:()=>e;function n(r,o){const s=wa(),l=aL(o==null?void 0:o.name),c=k3(),d={variant:o==null?void 0:o.variant,size:o==null?void 0:o.size},{css:f,cx:m}=cP(),h=t(s,r,d),g=j4(o==null?void 0:o.styles,s,r,d),b=j4(l,s,r,d),y=HK({ctx:l,theme:s,params:r,variant:o==null?void 0:o.variant,size:o==null?void 0:o.size}),x=Object.fromEntries(Object.keys(h).map(w=>{const S=m({[f(h[w])]:!(o!=null&&o.unstyled)},f(y[w]),f(b[w]),f(g[w]));return[w,S]}));return{classes:LK({cx:m,classes:x,context:l,classNames:o==null?void 0:o.classNames,name:o==null?void 0:o.name,cache:c}),cx:m,theme:s}}return n}function _4(e){return`___ref-${e||""}`}var WK=Object.defineProperty,VK=Object.defineProperties,UK=Object.getOwnPropertyDescriptors,I4=Object.getOwnPropertySymbols,GK=Object.prototype.hasOwnProperty,KK=Object.prototype.propertyIsEnumerable,P4=(e,t,n)=>t in e?WK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Fu=(e,t)=>{for(var n in t||(t={}))GK.call(t,n)&&P4(e,n,t[n]);if(I4)for(var n of I4(t))KK.call(t,n)&&P4(e,n,t[n]);return e},zu=(e,t)=>VK(e,UK(t));const Bu={in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${Ae(10)})`},transitionProperty:"transform, opacity"},Dp={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(-${Ae(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) rotate(-5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) rotate(5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:zu(Fu({},Bu),{common:{transformOrigin:"center center"}}),"pop-bottom-left":zu(Fu({},Bu),{common:{transformOrigin:"bottom left"}}),"pop-bottom-right":zu(Fu({},Bu),{common:{transformOrigin:"bottom right"}}),"pop-top-left":zu(Fu({},Bu),{common:{transformOrigin:"top left"}}),"pop-top-right":zu(Fu({},Bu),{common:{transformOrigin:"top right"}})},E4=["mousedown","touchstart"];function qK(e,t,n){const r=i.useRef();return i.useEffect(()=>{const o=s=>{const{target:l}=s??{};if(Array.isArray(n)){const c=(l==null?void 0:l.hasAttribute("data-ignore-outside-clicks"))||!document.body.contains(l)&&l.tagName!=="HTML";n.every(f=>!!f&&!s.composedPath().includes(f))&&!c&&e()}else r.current&&!r.current.contains(l)&&e()};return(t||E4).forEach(s=>document.addEventListener(s,o)),()=>{(t||E4).forEach(s=>document.removeEventListener(s,o))}},[r,e,n]),r}function XK(e,t){try{return e.addEventListener("change",t),()=>e.removeEventListener("change",t)}catch{return e.addListener(t),()=>e.removeListener(t)}}function QK(e,t){return typeof t=="boolean"?t:typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function YK(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){const[r,o]=i.useState(n?t:QK(e,t)),s=i.useRef();return i.useEffect(()=>{if("matchMedia"in window)return s.current=window.matchMedia(e),o(s.current.matches),XK(s.current,l=>o(l.matches))},[e]),r}const uP=typeof document<"u"?i.useLayoutEffect:i.useEffect;function os(e,t){const n=i.useRef(!1);i.useEffect(()=>()=>{n.current=!1},[]),i.useEffect(()=>{if(n.current)return e();n.current=!0},t)}function ZK({opened:e,shouldReturnFocus:t=!0}){const n=i.useRef(),r=()=>{var o;n.current&&"focus"in n.current&&typeof n.current.focus=="function"&&((o=n.current)==null||o.focus({preventScroll:!0}))};return os(()=>{let o=-1;const s=l=>{l.key==="Tab"&&window.clearTimeout(o)};return document.addEventListener("keydown",s),e?n.current=document.activeElement:t&&(o=window.setTimeout(r,10)),()=>{window.clearTimeout(o),document.removeEventListener("keydown",s)}},[e,t]),r}const JK=/input|select|textarea|button|object/,dP="a, input, select, textarea, button, object, [tabindex]";function eq(e){return e.style.display==="none"}function tq(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let n=e;for(;n&&!(n===document.body||n.nodeType===11);){if(eq(n))return!1;n=n.parentNode}return!0}function fP(e){let t=e.getAttribute("tabindex");return t===null&&(t=void 0),parseInt(t,10)}function Ib(e){const t=e.nodeName.toLowerCase(),n=!Number.isNaN(fP(e));return(JK.test(t)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||n)&&tq(e)}function pP(e){const t=fP(e);return(Number.isNaN(t)||t>=0)&&Ib(e)}function nq(e){return Array.from(e.querySelectorAll(dP)).filter(pP)}function rq(e,t){const n=nq(e);if(!n.length){t.preventDefault();return}const r=n[t.shiftKey?0:n.length-1],o=e.getRootNode();if(!(r===o.activeElement||e===o.activeElement))return;t.preventDefault();const l=n[t.shiftKey?n.length-1:0];l&&l.focus()}function Dy(){return`mantine-${Math.random().toString(36).slice(2,11)}`}function oq(e,t="body > :not(script)"){const n=Dy(),r=Array.from(document.querySelectorAll(t)).map(o=>{var s;if((s=o==null?void 0:o.shadowRoot)!=null&&s.contains(e)||o.contains(e))return;const l=o.getAttribute("aria-hidden"),c=o.getAttribute("data-hidden"),d=o.getAttribute("data-focus-id");return o.setAttribute("data-focus-id",n),l===null||l==="false"?o.setAttribute("aria-hidden","true"):!c&&!d&&o.setAttribute("data-hidden",l),{node:o,ariaHidden:c||null}});return()=>{r.forEach(o=>{!o||n!==o.node.getAttribute("data-focus-id")||(o.ariaHidden===null?o.node.removeAttribute("aria-hidden"):o.node.setAttribute("aria-hidden",o.ariaHidden),o.node.removeAttribute("data-focus-id"),o.node.removeAttribute("data-hidden"))})}}function sq(e=!0){const t=i.useRef(),n=i.useRef(null),r=s=>{let l=s.querySelector("[data-autofocus]");if(!l){const c=Array.from(s.querySelectorAll(dP));l=c.find(pP)||c.find(Ib)||null,!l&&Ib(s)&&(l=s)}l&&l.focus({preventScroll:!0})},o=i.useCallback(s=>{if(e){if(s===null){n.current&&(n.current(),n.current=null);return}n.current=oq(s),t.current!==s&&(s?(setTimeout(()=>{s.getRootNode()&&r(s)}),t.current=s):t.current=null)}},[e]);return i.useEffect(()=>{if(!e)return;t.current&&setTimeout(()=>r(t.current));const s=l=>{l.key==="Tab"&&t.current&&rq(t.current,l)};return document.addEventListener("keydown",s),()=>{document.removeEventListener("keydown",s),n.current&&n.current()}},[e]),o}const aq=B["useId".toString()]||(()=>{});function lq(){const e=aq();return e?`mantine-${e.replace(/:/g,"")}`:""}function Ry(e){const t=lq(),[n,r]=i.useState(t);return uP(()=>{r(Dy())},[]),typeof e=="string"?e:typeof window>"u"?t:n}function M4(e,t,n){i.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t])}function mP(e,t){typeof e=="function"?e(t):typeof e=="object"&&e!==null&&"current"in e&&(e.current=t)}function iq(...e){return t=>{e.forEach(n=>mP(n,t))}}function df(...e){return i.useCallback(iq(...e),e)}function Pd({value:e,defaultValue:t,finalValue:n,onChange:r=()=>{}}){const[o,s]=i.useState(t!==void 0?t:n),l=c=>{s(c),r==null||r(c)};return e!==void 0?[e,r,!0]:[o,l,!1]}function hP(e,t){return YK("(prefers-reduced-motion: reduce)",e,t)}const cq=e=>e<.5?2*e*e:-1+(4-2*e)*e,uq=({axis:e,target:t,parent:n,alignment:r,offset:o,isList:s})=>{if(!t||!n&&typeof document>"u")return 0;const l=!!n,d=(n||document.body).getBoundingClientRect(),f=t.getBoundingClientRect(),m=h=>f[h]-d[h];if(e==="y"){const h=m("top");if(h===0)return 0;if(r==="start"){const b=h-o;return b<=f.height*(s?0:1)||!s?b:0}const g=l?d.height:window.innerHeight;if(r==="end"){const b=h+o-g+f.height;return b>=-f.height*(s?0:1)||!s?b:0}return r==="center"?h-g/2+f.height/2:0}if(e==="x"){const h=m("left");if(h===0)return 0;if(r==="start"){const b=h-o;return b<=f.width||!s?b:0}const g=l?d.width:window.innerWidth;if(r==="end"){const b=h+o-g+f.width;return b>=-f.width||!s?b:0}return r==="center"?h-g/2+f.width/2:0}return 0},dq=({axis:e,parent:t})=>{if(!t&&typeof document>"u")return 0;const n=e==="y"?"scrollTop":"scrollLeft";if(t)return t[n];const{body:r,documentElement:o}=document;return r[n]+o[n]},fq=({axis:e,parent:t,distance:n})=>{if(!t&&typeof document>"u")return;const r=e==="y"?"scrollTop":"scrollLeft";if(t)t[r]=n;else{const{body:o,documentElement:s}=document;o[r]=n,s[r]=n}};function gP({duration:e=1250,axis:t="y",onScrollFinish:n,easing:r=cq,offset:o=0,cancelable:s=!0,isList:l=!1}={}){const c=i.useRef(0),d=i.useRef(0),f=i.useRef(!1),m=i.useRef(null),h=i.useRef(null),g=hP(),b=()=>{c.current&&cancelAnimationFrame(c.current)},y=i.useCallback(({alignment:w="start"}={})=>{var S;f.current=!1,c.current&&b();const j=(S=dq({parent:m.current,axis:t}))!=null?S:0,_=uq({parent:m.current,target:h.current,axis:t,alignment:w,offset:o,isList:l})-(m.current?0:j);function I(){d.current===0&&(d.current=performance.now());const M=performance.now()-d.current,D=g||e===0?1:M/e,R=j+_*r(D);fq({parent:m.current,axis:t,distance:R}),!f.current&&D<1?c.current=requestAnimationFrame(I):(typeof n=="function"&&n(),d.current=0,c.current=0,b())}I()},[t,e,r,l,o,n,g]),x=()=>{s&&(f.current=!0)};return M4("wheel",x,{passive:!0}),M4("touchmove",x,{passive:!0}),i.useEffect(()=>b,[]),{scrollableRef:m,targetRef:h,scrollIntoView:y,cancel:b}}var O4=Object.getOwnPropertySymbols,pq=Object.prototype.hasOwnProperty,mq=Object.prototype.propertyIsEnumerable,hq=(e,t)=>{var n={};for(var r in e)pq.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&O4)for(var r of O4(e))t.indexOf(r)<0&&mq.call(e,r)&&(n[r]=e[r]);return n};function Eg(e){const t=e,{m:n,mx:r,my:o,mt:s,mb:l,ml:c,mr:d,p:f,px:m,py:h,pt:g,pb:b,pl:y,pr:x,bg:w,c:S,opacity:j,ff:_,fz:I,fw:E,lts:M,ta:D,lh:R,fs:N,tt:O,td:T,w:U,miw:G,maw:q,h:Y,mih:Q,mah:V,bgsz:se,bgp:ee,bgr:le,bga:ae,pos:ce,top:J,left:re,bottom:A,right:L,inset:K,display:ne}=t,z=hq(t,["m","mx","my","mt","mb","ml","mr","p","px","py","pt","pb","pl","pr","bg","c","opacity","ff","fz","fw","lts","ta","lh","fs","tt","td","w","miw","maw","h","mih","mah","bgsz","bgp","bgr","bga","pos","top","left","bottom","right","inset","display"]);return{systemStyles:lL({m:n,mx:r,my:o,mt:s,mb:l,ml:c,mr:d,p:f,px:m,py:h,pt:g,pb:b,pl:y,pr:x,bg:w,c:S,opacity:j,ff:_,fz:I,fw:E,lts:M,ta:D,lh:R,fs:N,tt:O,td:T,w:U,miw:G,maw:q,h:Y,mih:Q,mah:V,bgsz:se,bgp:ee,bgr:le,bga:ae,pos:ce,top:J,left:re,bottom:A,right:L,inset:K,display:ne}),rest:z}}function gq(e,t){const n=Object.keys(e).filter(r=>r!=="base").sort((r,o)=>CS(pt({size:r,sizes:t.breakpoints}))-CS(pt({size:o,sizes:t.breakpoints})));return"base"in e?["base",...n]:n}function vq({value:e,theme:t,getValue:n,property:r}){if(e==null)return;if(typeof e=="object")return gq(e,t).reduce((l,c)=>{if(c==="base"&&e.base!==void 0){const f=n(e.base,t);return Array.isArray(r)?(r.forEach(m=>{l[m]=f}),l):(l[r]=f,l)}const d=n(e[c],t);return Array.isArray(r)?(l[t.fn.largerThan(c)]={},r.forEach(f=>{l[t.fn.largerThan(c)][f]=d}),l):(l[t.fn.largerThan(c)]={[r]:d},l)},{});const o=n(e,t);return Array.isArray(r)?r.reduce((s,l)=>(s[l]=o,s),{}):{[r]:o}}function bq(e,t){return e==="dimmed"?t.colorScheme==="dark"?t.colors.dark[2]:t.colors.gray[6]:t.fn.variant({variant:"filled",color:e,primaryFallback:!1}).background}function xq(e){return Ae(e)}function yq(e){return e}function Cq(e,t){return pt({size:e,sizes:t.fontSizes})}const wq=["-xs","-sm","-md","-lg","-xl"];function Sq(e,t){return wq.includes(e)?`calc(${pt({size:e.replace("-",""),sizes:t.spacing})} * -1)`:pt({size:e,sizes:t.spacing})}const kq={identity:yq,color:bq,size:xq,fontSize:Cq,spacing:Sq},jq={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},mx:{type:"spacing",property:["marginRight","marginLeft"]},my:{type:"spacing",property:["marginTop","marginBottom"]},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},px:{type:"spacing",property:["paddingRight","paddingLeft"]},py:{type:"spacing",property:["paddingTop","paddingBottom"]},bg:{type:"color",property:"background"},c:{type:"color",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"identity",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"identity",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"identity",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"}};var _q=Object.defineProperty,D4=Object.getOwnPropertySymbols,Iq=Object.prototype.hasOwnProperty,Pq=Object.prototype.propertyIsEnumerable,R4=(e,t,n)=>t in e?_q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,A4=(e,t)=>{for(var n in t||(t={}))Iq.call(t,n)&&R4(e,n,t[n]);if(D4)for(var n of D4(t))Pq.call(t,n)&&R4(e,n,t[n]);return e};function T4(e,t,n=jq){return Object.keys(n).reduce((o,s)=>(s in e&&e[s]!==void 0&&o.push(vq({value:e[s],getValue:kq[n[s].type],property:n[s].property,theme:t})),o),[]).reduce((o,s)=>(Object.keys(s).forEach(l=>{typeof s[l]=="object"&&s[l]!==null&&l in o?o[l]=A4(A4({},o[l]),s[l]):o[l]=s[l]}),o),{})}function N4(e,t){return typeof e=="function"?e(t):e}function Eq(e,t,n){const r=wa(),{css:o,cx:s}=cP();return Array.isArray(e)?s(n,o(T4(t,r)),e.map(l=>o(N4(l,r)))):s(n,o(N4(e,r)),o(T4(t,r)))}var Mq=Object.defineProperty,Bm=Object.getOwnPropertySymbols,vP=Object.prototype.hasOwnProperty,bP=Object.prototype.propertyIsEnumerable,$4=(e,t,n)=>t in e?Mq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Oq=(e,t)=>{for(var n in t||(t={}))vP.call(t,n)&&$4(e,n,t[n]);if(Bm)for(var n of Bm(t))bP.call(t,n)&&$4(e,n,t[n]);return e},Dq=(e,t)=>{var n={};for(var r in e)vP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bm)for(var r of Bm(e))t.indexOf(r)<0&&bP.call(e,r)&&(n[r]=e[r]);return n};const xP=i.forwardRef((e,t)=>{var n=e,{className:r,component:o,style:s,sx:l}=n,c=Dq(n,["className","component","style","sx"]);const{systemStyles:d,rest:f}=Eg(c),m=o||"div";return B.createElement(m,Oq({ref:t,className:Eq(l,d,r),style:s},f))});xP.displayName="@mantine/core/Box";const Vr=xP;var Rq=Object.defineProperty,Aq=Object.defineProperties,Tq=Object.getOwnPropertyDescriptors,L4=Object.getOwnPropertySymbols,Nq=Object.prototype.hasOwnProperty,$q=Object.prototype.propertyIsEnumerable,F4=(e,t,n)=>t in e?Rq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,z4=(e,t)=>{for(var n in t||(t={}))Nq.call(t,n)&&F4(e,n,t[n]);if(L4)for(var n of L4(t))$q.call(t,n)&&F4(e,n,t[n]);return e},Lq=(e,t)=>Aq(e,Tq(t)),Fq=gr(e=>({root:Lq(z4(z4({},e.fn.focusStyles()),e.fn.fontStyles()),{cursor:"pointer",border:0,padding:0,appearance:"none",fontSize:e.fontSizes.md,backgroundColor:"transparent",textAlign:"left",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,textDecoration:"none",boxSizing:"border-box"})}));const zq=Fq;var Bq=Object.defineProperty,Hm=Object.getOwnPropertySymbols,yP=Object.prototype.hasOwnProperty,CP=Object.prototype.propertyIsEnumerable,B4=(e,t,n)=>t in e?Bq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hq=(e,t)=>{for(var n in t||(t={}))yP.call(t,n)&&B4(e,n,t[n]);if(Hm)for(var n of Hm(t))CP.call(t,n)&&B4(e,n,t[n]);return e},Wq=(e,t)=>{var n={};for(var r in e)yP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Hm)for(var r of Hm(e))t.indexOf(r)<0&&CP.call(e,r)&&(n[r]=e[r]);return n};const wP=i.forwardRef((e,t)=>{const n=Nn("UnstyledButton",{},e),{className:r,component:o="button",unstyled:s,variant:l}=n,c=Wq(n,["className","component","unstyled","variant"]),{classes:d,cx:f}=zq(null,{name:"UnstyledButton",unstyled:s,variant:l});return B.createElement(Vr,Hq({component:o,ref:t,className:f(d.root,r),type:o==="button"?"button":void 0},c))});wP.displayName="@mantine/core/UnstyledButton";const Vq=wP;var Uq=Object.defineProperty,Gq=Object.defineProperties,Kq=Object.getOwnPropertyDescriptors,H4=Object.getOwnPropertySymbols,qq=Object.prototype.hasOwnProperty,Xq=Object.prototype.propertyIsEnumerable,W4=(e,t,n)=>t in e?Uq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Pb=(e,t)=>{for(var n in t||(t={}))qq.call(t,n)&&W4(e,n,t[n]);if(H4)for(var n of H4(t))Xq.call(t,n)&&W4(e,n,t[n]);return e},V4=(e,t)=>Gq(e,Kq(t));const Qq=["subtle","filled","outline","light","default","transparent","gradient"],Rp={xs:Ae(18),sm:Ae(22),md:Ae(28),lg:Ae(34),xl:Ae(44)};function Yq({variant:e,theme:t,color:n,gradient:r}){const o=t.fn.variant({color:n,variant:e,gradient:r});return e==="gradient"?{border:0,backgroundImage:o.background,color:o.color,"&:hover":t.fn.hover({backgroundSize:"200%"})}:Qq.includes(e)?Pb({border:`${Ae(1)} solid ${o.border}`,backgroundColor:o.background,color:o.color},t.fn.hover({backgroundColor:o.hover})):null}var Zq=gr((e,{radius:t,color:n,gradient:r},{variant:o,size:s})=>({root:V4(Pb({position:"relative",borderRadius:e.fn.radius(t),padding:0,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",height:pt({size:s,sizes:Rp}),minHeight:pt({size:s,sizes:Rp}),width:pt({size:s,sizes:Rp}),minWidth:pt({size:s,sizes:Rp})},Yq({variant:o,theme:e,color:n,gradient:r})),{"&:active":e.activeStyles,"& [data-action-icon-loader]":{maxWidth:"70%"},"&:disabled, &[data-disabled]":{color:e.colors.gray[e.colorScheme==="dark"?6:4],cursor:"not-allowed",backgroundColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),borderColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),backgroundImage:"none",pointerEvents:"none","&:active":{transform:"none"}},"&[data-loading]":{pointerEvents:"none","&::before":V4(Pb({content:'""'},e.fn.cover(Ae(-1))),{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.colors.dark[7],.5):"rgba(255, 255, 255, .5)",borderRadius:e.fn.radius(t),cursor:"not-allowed"})}})}));const Jq=Zq;var eX=Object.defineProperty,Wm=Object.getOwnPropertySymbols,SP=Object.prototype.hasOwnProperty,kP=Object.prototype.propertyIsEnumerable,U4=(e,t,n)=>t in e?eX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,G4=(e,t)=>{for(var n in t||(t={}))SP.call(t,n)&&U4(e,n,t[n]);if(Wm)for(var n of Wm(t))kP.call(t,n)&&U4(e,n,t[n]);return e},K4=(e,t)=>{var n={};for(var r in e)SP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Wm)for(var r of Wm(e))t.indexOf(r)<0&&kP.call(e,r)&&(n[r]=e[r]);return n};function tX(e){var t=e,{size:n,color:r}=t,o=K4(t,["size","color"]);const s=o,{style:l}=s,c=K4(s,["style"]);return B.createElement("svg",G4({viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg",fill:r,style:G4({width:n},l)},c),B.createElement("rect",{y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"30",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"60",width:"15",height:"140",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"90",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"120",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})))}var nX=Object.defineProperty,Vm=Object.getOwnPropertySymbols,jP=Object.prototype.hasOwnProperty,_P=Object.prototype.propertyIsEnumerable,q4=(e,t,n)=>t in e?nX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,X4=(e,t)=>{for(var n in t||(t={}))jP.call(t,n)&&q4(e,n,t[n]);if(Vm)for(var n of Vm(t))_P.call(t,n)&&q4(e,n,t[n]);return e},Q4=(e,t)=>{var n={};for(var r in e)jP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Vm)for(var r of Vm(e))t.indexOf(r)<0&&_P.call(e,r)&&(n[r]=e[r]);return n};function rX(e){var t=e,{size:n,color:r}=t,o=Q4(t,["size","color"]);const s=o,{style:l}=s,c=Q4(s,["style"]);return B.createElement("svg",X4({viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg",stroke:r,style:X4({width:n,height:n},l)},c),B.createElement("g",{fill:"none",fillRule:"evenodd"},B.createElement("g",{transform:"translate(2.5 2.5)",strokeWidth:"5"},B.createElement("circle",{strokeOpacity:".5",cx:"16",cy:"16",r:"16"}),B.createElement("path",{d:"M32 16c0-9.94-8.06-16-16-16"},B.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 16 16",to:"360 16 16",dur:"1s",repeatCount:"indefinite"})))))}var oX=Object.defineProperty,Um=Object.getOwnPropertySymbols,IP=Object.prototype.hasOwnProperty,PP=Object.prototype.propertyIsEnumerable,Y4=(e,t,n)=>t in e?oX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Z4=(e,t)=>{for(var n in t||(t={}))IP.call(t,n)&&Y4(e,n,t[n]);if(Um)for(var n of Um(t))PP.call(t,n)&&Y4(e,n,t[n]);return e},J4=(e,t)=>{var n={};for(var r in e)IP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Um)for(var r of Um(e))t.indexOf(r)<0&&PP.call(e,r)&&(n[r]=e[r]);return n};function sX(e){var t=e,{size:n,color:r}=t,o=J4(t,["size","color"]);const s=o,{style:l}=s,c=J4(s,["style"]);return B.createElement("svg",Z4({viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg",fill:r,style:Z4({width:n},l)},c),B.createElement("circle",{cx:"15",cy:"15",r:"15"},B.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("circle",{cx:"60",cy:"15",r:"9",fillOpacity:"0.3"},B.createElement("animate",{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"0.5",to:"0.5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("circle",{cx:"105",cy:"15",r:"15"},B.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})))}var aX=Object.defineProperty,Gm=Object.getOwnPropertySymbols,EP=Object.prototype.hasOwnProperty,MP=Object.prototype.propertyIsEnumerable,ek=(e,t,n)=>t in e?aX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lX=(e,t)=>{for(var n in t||(t={}))EP.call(t,n)&&ek(e,n,t[n]);if(Gm)for(var n of Gm(t))MP.call(t,n)&&ek(e,n,t[n]);return e},iX=(e,t)=>{var n={};for(var r in e)EP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Gm)for(var r of Gm(e))t.indexOf(r)<0&&MP.call(e,r)&&(n[r]=e[r]);return n};const o1={bars:tX,oval:rX,dots:sX},cX={xs:Ae(18),sm:Ae(22),md:Ae(36),lg:Ae(44),xl:Ae(58)},uX={size:"md"};function OP(e){const t=Nn("Loader",uX,e),{size:n,color:r,variant:o}=t,s=iX(t,["size","color","variant"]),l=wa(),c=o in o1?o:l.loader;return B.createElement(Vr,lX({role:"presentation",component:o1[c]||o1.bars,size:pt({size:n,sizes:cX}),color:l.fn.variant({variant:"filled",primaryFallback:!1,color:r||l.primaryColor}).background},s))}OP.displayName="@mantine/core/Loader";var dX=Object.defineProperty,Km=Object.getOwnPropertySymbols,DP=Object.prototype.hasOwnProperty,RP=Object.prototype.propertyIsEnumerable,tk=(e,t,n)=>t in e?dX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nk=(e,t)=>{for(var n in t||(t={}))DP.call(t,n)&&tk(e,n,t[n]);if(Km)for(var n of Km(t))RP.call(t,n)&&tk(e,n,t[n]);return e},fX=(e,t)=>{var n={};for(var r in e)DP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Km)for(var r of Km(e))t.indexOf(r)<0&&RP.call(e,r)&&(n[r]=e[r]);return n};const pX={color:"gray",size:"md",variant:"subtle"},AP=i.forwardRef((e,t)=>{const n=Nn("ActionIcon",pX,e),{className:r,color:o,children:s,radius:l,size:c,variant:d,gradient:f,disabled:m,loaderProps:h,loading:g,unstyled:b,__staticSelector:y}=n,x=fX(n,["className","color","children","radius","size","variant","gradient","disabled","loaderProps","loading","unstyled","__staticSelector"]),{classes:w,cx:S,theme:j}=Jq({radius:l,color:o,gradient:f},{name:["ActionIcon",y],unstyled:b,size:c,variant:d}),_=B.createElement(OP,nk({color:j.fn.variant({color:o,variant:d}).color,size:"100%","data-action-icon-loader":!0},h));return B.createElement(Vq,nk({className:S(w.root,r),ref:t,disabled:m,"data-disabled":m||void 0,"data-loading":g||void 0,unstyled:b},x),g?_:s)});AP.displayName="@mantine/core/ActionIcon";const mX=AP;var hX=Object.defineProperty,gX=Object.defineProperties,vX=Object.getOwnPropertyDescriptors,qm=Object.getOwnPropertySymbols,TP=Object.prototype.hasOwnProperty,NP=Object.prototype.propertyIsEnumerable,rk=(e,t,n)=>t in e?hX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,bX=(e,t)=>{for(var n in t||(t={}))TP.call(t,n)&&rk(e,n,t[n]);if(qm)for(var n of qm(t))NP.call(t,n)&&rk(e,n,t[n]);return e},xX=(e,t)=>gX(e,vX(t)),yX=(e,t)=>{var n={};for(var r in e)TP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qm)for(var r of qm(e))t.indexOf(r)<0&&NP.call(e,r)&&(n[r]=e[r]);return n};function $P(e){const t=Nn("Portal",{},e),{children:n,target:r,className:o,innerRef:s}=t,l=yX(t,["children","target","className","innerRef"]),c=wa(),[d,f]=i.useState(!1),m=i.useRef();return uP(()=>(f(!0),m.current=r?typeof r=="string"?document.querySelector(r):r:document.createElement("div"),r||document.body.appendChild(m.current),()=>{!r&&document.body.removeChild(m.current)}),[r]),d?Jr.createPortal(B.createElement("div",xX(bX({className:o,dir:c.dir},l),{ref:s}),n),m.current):null}$P.displayName="@mantine/core/Portal";var CX=Object.defineProperty,Xm=Object.getOwnPropertySymbols,LP=Object.prototype.hasOwnProperty,FP=Object.prototype.propertyIsEnumerable,ok=(e,t,n)=>t in e?CX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,wX=(e,t)=>{for(var n in t||(t={}))LP.call(t,n)&&ok(e,n,t[n]);if(Xm)for(var n of Xm(t))FP.call(t,n)&&ok(e,n,t[n]);return e},SX=(e,t)=>{var n={};for(var r in e)LP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Xm)for(var r of Xm(e))t.indexOf(r)<0&&FP.call(e,r)&&(n[r]=e[r]);return n};function zP(e){var t=e,{withinPortal:n=!0,children:r}=t,o=SX(t,["withinPortal","children"]);return n?B.createElement($P,wX({},o),r):B.createElement(B.Fragment,null,r)}zP.displayName="@mantine/core/OptionalPortal";var kX=Object.defineProperty,Qm=Object.getOwnPropertySymbols,BP=Object.prototype.hasOwnProperty,HP=Object.prototype.propertyIsEnumerable,sk=(e,t,n)=>t in e?kX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ak=(e,t)=>{for(var n in t||(t={}))BP.call(t,n)&&sk(e,n,t[n]);if(Qm)for(var n of Qm(t))HP.call(t,n)&&sk(e,n,t[n]);return e},jX=(e,t)=>{var n={};for(var r in e)BP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Qm)for(var r of Qm(e))t.indexOf(r)<0&&HP.call(e,r)&&(n[r]=e[r]);return n};function WP(e){const t=e,{width:n,height:r,style:o}=t,s=jX(t,["width","height","style"]);return B.createElement("svg",ak({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:ak({width:n,height:r},o)},s),B.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}WP.displayName="@mantine/core/CloseIcon";var _X=Object.defineProperty,Ym=Object.getOwnPropertySymbols,VP=Object.prototype.hasOwnProperty,UP=Object.prototype.propertyIsEnumerable,lk=(e,t,n)=>t in e?_X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,IX=(e,t)=>{for(var n in t||(t={}))VP.call(t,n)&&lk(e,n,t[n]);if(Ym)for(var n of Ym(t))UP.call(t,n)&&lk(e,n,t[n]);return e},PX=(e,t)=>{var n={};for(var r in e)VP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ym)for(var r of Ym(e))t.indexOf(r)<0&&UP.call(e,r)&&(n[r]=e[r]);return n};const EX={xs:Ae(12),sm:Ae(16),md:Ae(20),lg:Ae(28),xl:Ae(34)},MX={size:"sm"},GP=i.forwardRef((e,t)=>{const n=Nn("CloseButton",MX,e),{iconSize:r,size:o,children:s}=n,l=PX(n,["iconSize","size","children"]),c=Ae(r||EX[o]);return B.createElement(mX,IX({ref:t,__staticSelector:"CloseButton",size:o},l),s||B.createElement(WP,{width:c,height:c}))});GP.displayName="@mantine/core/CloseButton";const KP=GP;var OX=Object.defineProperty,DX=Object.defineProperties,RX=Object.getOwnPropertyDescriptors,ik=Object.getOwnPropertySymbols,AX=Object.prototype.hasOwnProperty,TX=Object.prototype.propertyIsEnumerable,ck=(e,t,n)=>t in e?OX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ap=(e,t)=>{for(var n in t||(t={}))AX.call(t,n)&&ck(e,n,t[n]);if(ik)for(var n of ik(t))TX.call(t,n)&&ck(e,n,t[n]);return e},NX=(e,t)=>DX(e,RX(t));function $X({underline:e,strikethrough:t}){const n=[];return e&&n.push("underline"),t&&n.push("line-through"),n.length>0?n.join(" "):"none"}function LX({theme:e,color:t}){return t==="dimmed"?e.fn.dimmed():typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?e.fn.variant({variant:"filled",color:t}).background:t||"inherit"}function FX(e){return typeof e=="number"?{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical"}:null}function zX({theme:e,truncate:t}){return t==="start"?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",direction:e.dir==="ltr"?"rtl":"ltr",textAlign:e.dir==="ltr"?"right":"left"}:t?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}:null}var BX=gr((e,{color:t,lineClamp:n,truncate:r,inline:o,inherit:s,underline:l,gradient:c,weight:d,transform:f,align:m,strikethrough:h,italic:g},{size:b})=>{const y=e.fn.variant({variant:"gradient",gradient:c});return{root:NX(Ap(Ap(Ap(Ap({},e.fn.fontStyles()),e.fn.focusStyles()),FX(n)),zX({theme:e,truncate:r})),{color:LX({color:t,theme:e}),fontFamily:s?"inherit":e.fontFamily,fontSize:s||b===void 0?"inherit":pt({size:b,sizes:e.fontSizes}),lineHeight:s?"inherit":o?1:e.lineHeight,textDecoration:$X({underline:l,strikethrough:h}),WebkitTapHighlightColor:"transparent",fontWeight:s?"inherit":d,textTransform:f,textAlign:m,fontStyle:g?"italic":void 0}),gradient:{backgroundImage:y.background,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}}});const HX=BX;var WX=Object.defineProperty,Zm=Object.getOwnPropertySymbols,qP=Object.prototype.hasOwnProperty,XP=Object.prototype.propertyIsEnumerable,uk=(e,t,n)=>t in e?WX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,VX=(e,t)=>{for(var n in t||(t={}))qP.call(t,n)&&uk(e,n,t[n]);if(Zm)for(var n of Zm(t))XP.call(t,n)&&uk(e,n,t[n]);return e},UX=(e,t)=>{var n={};for(var r in e)qP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Zm)for(var r of Zm(e))t.indexOf(r)<0&&XP.call(e,r)&&(n[r]=e[r]);return n};const GX={variant:"text"},QP=i.forwardRef((e,t)=>{const n=Nn("Text",GX,e),{className:r,size:o,weight:s,transform:l,color:c,align:d,variant:f,lineClamp:m,truncate:h,gradient:g,inline:b,inherit:y,underline:x,strikethrough:w,italic:S,classNames:j,styles:_,unstyled:I,span:E,__staticSelector:M}=n,D=UX(n,["className","size","weight","transform","color","align","variant","lineClamp","truncate","gradient","inline","inherit","underline","strikethrough","italic","classNames","styles","unstyled","span","__staticSelector"]),{classes:R,cx:N}=HX({color:c,lineClamp:m,truncate:h,inline:b,inherit:y,underline:x,strikethrough:w,italic:S,weight:s,transform:l,align:d,gradient:g},{unstyled:I,name:M||"Text",variant:f,size:o});return B.createElement(Vr,VX({ref:t,className:N(R.root,{[R.gradient]:f==="gradient"},r),component:E?"span":"div"},D))});QP.displayName="@mantine/core/Text";const Oc=QP,Tp={xs:Ae(1),sm:Ae(2),md:Ae(3),lg:Ae(4),xl:Ae(5)};function Np(e,t){const n=e.fn.variant({variant:"outline",color:t}).border;return typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?n:t===void 0?e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]:t}var KX=gr((e,{color:t},{size:n,variant:r})=>({root:{},withLabel:{borderTop:"0 !important"},left:{"&::before":{display:"none"}},right:{"&::after":{display:"none"}},label:{display:"flex",alignItems:"center","&::before":{content:'""',flex:1,height:Ae(1),borderTop:`${pt({size:n,sizes:Tp})} ${r} ${Np(e,t)}`,marginRight:e.spacing.xs},"&::after":{content:'""',flex:1,borderTop:`${pt({size:n,sizes:Tp})} ${r} ${Np(e,t)}`,marginLeft:e.spacing.xs}},labelDefaultStyles:{color:t==="dark"?e.colors.dark[1]:e.fn.themeColor(t,e.colorScheme==="dark"?5:e.fn.primaryShade(),!1)},horizontal:{border:0,borderTopWidth:Ae(pt({size:n,sizes:Tp})),borderTopColor:Np(e,t),borderTopStyle:r,margin:0},vertical:{border:0,alignSelf:"stretch",height:"auto",borderLeftWidth:Ae(pt({size:n,sizes:Tp})),borderLeftColor:Np(e,t),borderLeftStyle:r}}));const qX=KX;var XX=Object.defineProperty,QX=Object.defineProperties,YX=Object.getOwnPropertyDescriptors,Jm=Object.getOwnPropertySymbols,YP=Object.prototype.hasOwnProperty,ZP=Object.prototype.propertyIsEnumerable,dk=(e,t,n)=>t in e?XX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fk=(e,t)=>{for(var n in t||(t={}))YP.call(t,n)&&dk(e,n,t[n]);if(Jm)for(var n of Jm(t))ZP.call(t,n)&&dk(e,n,t[n]);return e},ZX=(e,t)=>QX(e,YX(t)),JX=(e,t)=>{var n={};for(var r in e)YP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Jm)for(var r of Jm(e))t.indexOf(r)<0&&ZP.call(e,r)&&(n[r]=e[r]);return n};const eQ={orientation:"horizontal",size:"xs",labelPosition:"left",variant:"solid"},Eb=i.forwardRef((e,t)=>{const n=Nn("Divider",eQ,e),{className:r,color:o,orientation:s,size:l,label:c,labelPosition:d,labelProps:f,variant:m,styles:h,classNames:g,unstyled:b}=n,y=JX(n,["className","color","orientation","size","label","labelPosition","labelProps","variant","styles","classNames","unstyled"]),{classes:x,cx:w}=qX({color:o},{classNames:g,styles:h,unstyled:b,name:"Divider",variant:m,size:l}),S=s==="vertical",j=s==="horizontal",_=!!c&&j,I=!(f!=null&&f.color);return B.createElement(Vr,fk({ref:t,className:w(x.root,{[x.vertical]:S,[x.horizontal]:j,[x.withLabel]:_},r),role:"separator"},y),_&&B.createElement(Oc,ZX(fk({},f),{size:(f==null?void 0:f.size)||"xs",mt:Ae(2),className:w(x.label,x[d],{[x.labelDefaultStyles]:I})}),c))});Eb.displayName="@mantine/core/Divider";var tQ=Object.defineProperty,nQ=Object.defineProperties,rQ=Object.getOwnPropertyDescriptors,pk=Object.getOwnPropertySymbols,oQ=Object.prototype.hasOwnProperty,sQ=Object.prototype.propertyIsEnumerable,mk=(e,t,n)=>t in e?tQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hk=(e,t)=>{for(var n in t||(t={}))oQ.call(t,n)&&mk(e,n,t[n]);if(pk)for(var n of pk(t))sQ.call(t,n)&&mk(e,n,t[n]);return e},aQ=(e,t)=>nQ(e,rQ(t)),lQ=gr((e,t,{size:n})=>({item:aQ(hk({},e.fn.fontStyles()),{boxSizing:"border-box",wordBreak:"break-all",textAlign:"left",width:"100%",padding:`calc(${pt({size:n,sizes:e.spacing})} / 1.5) ${pt({size:n,sizes:e.spacing})}`,cursor:"pointer",fontSize:pt({size:n,sizes:e.fontSizes}),color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,borderRadius:e.fn.radius(),"&[data-hovered]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[1]},"&[data-selected]":hk({backgroundColor:e.fn.variant({variant:"filled"}).background,color:e.fn.variant({variant:"filled"}).color},e.fn.hover({backgroundColor:e.fn.variant({variant:"filled"}).hover})),"&[data-disabled]":{cursor:"default",color:e.colors.dark[2]}}),nothingFound:{boxSizing:"border-box",color:e.colors.gray[6],paddingTop:`calc(${pt({size:n,sizes:e.spacing})} / 2)`,paddingBottom:`calc(${pt({size:n,sizes:e.spacing})} / 2)`,textAlign:"center"},separator:{boxSizing:"border-box",textAlign:"left",width:"100%",padding:`calc(${pt({size:n,sizes:e.spacing})} / 1.5) ${pt({size:n,sizes:e.spacing})}`},separatorLabel:{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]}}));const iQ=lQ;var cQ=Object.defineProperty,gk=Object.getOwnPropertySymbols,uQ=Object.prototype.hasOwnProperty,dQ=Object.prototype.propertyIsEnumerable,vk=(e,t,n)=>t in e?cQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fQ=(e,t)=>{for(var n in t||(t={}))uQ.call(t,n)&&vk(e,n,t[n]);if(gk)for(var n of gk(t))dQ.call(t,n)&&vk(e,n,t[n]);return e};function Ay({data:e,hovered:t,classNames:n,styles:r,isItemSelected:o,uuid:s,__staticSelector:l,onItemHover:c,onItemSelect:d,itemsRefs:f,itemComponent:m,size:h,nothingFound:g,creatable:b,createLabel:y,unstyled:x,variant:w}){const{classes:S}=iQ(null,{classNames:n,styles:r,unstyled:x,name:l,variant:w,size:h}),j=[],_=[];let I=null;const E=(D,R)=>{const N=typeof o=="function"?o(D.value):!1;return B.createElement(m,fQ({key:D.value,className:S.item,"data-disabled":D.disabled||void 0,"data-hovered":!D.disabled&&t===R||void 0,"data-selected":!D.disabled&&N||void 0,selected:N,onMouseEnter:()=>c(R),id:`${s}-${R}`,role:"option",tabIndex:-1,"aria-selected":t===R,ref:O=>{f&&f.current&&(f.current[D.value]=O)},onMouseDown:D.disabled?null:O=>{O.preventDefault(),d(D)},disabled:D.disabled,variant:w},D))};let M=null;if(e.forEach((D,R)=>{D.creatable?I=R:D.group?(M!==D.group&&(M=D.group,_.push(B.createElement("div",{className:S.separator,key:`__mantine-divider-${R}`},B.createElement(Eb,{classNames:{label:S.separatorLabel},label:D.group})))),_.push(E(D,R))):j.push(E(D,R))}),b){const D=e[I];j.push(B.createElement("div",{key:Dy(),className:S.item,"data-hovered":t===I||void 0,onMouseEnter:()=>c(I),onMouseDown:R=>{R.preventDefault(),d(D)},tabIndex:-1,ref:R=>{f&&f.current&&(f.current[D.value]=R)}},y))}return _.length>0&&j.length>0&&j.unshift(B.createElement("div",{className:S.separator,key:"empty-group-separator"},B.createElement(Eb,null))),_.length>0||j.length>0?B.createElement(B.Fragment,null,_,j):B.createElement(Oc,{size:h,unstyled:x,className:S.nothingFound},g)}Ay.displayName="@mantine/core/SelectItems";var pQ=Object.defineProperty,eh=Object.getOwnPropertySymbols,JP=Object.prototype.hasOwnProperty,eE=Object.prototype.propertyIsEnumerable,bk=(e,t,n)=>t in e?pQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mQ=(e,t)=>{for(var n in t||(t={}))JP.call(t,n)&&bk(e,n,t[n]);if(eh)for(var n of eh(t))eE.call(t,n)&&bk(e,n,t[n]);return e},hQ=(e,t)=>{var n={};for(var r in e)JP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&eh)for(var r of eh(e))t.indexOf(r)<0&&eE.call(e,r)&&(n[r]=e[r]);return n};const Ty=i.forwardRef((e,t)=>{var n=e,{label:r,value:o}=n,s=hQ(n,["label","value"]);return B.createElement("div",mQ({ref:t},s),r||o)});Ty.displayName="@mantine/core/DefaultItem";function gQ(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function tE(...e){return t=>e.forEach(n=>gQ(n,t))}function di(...e){return i.useCallback(tE(...e),e)}const nE=i.forwardRef((e,t)=>{const{children:n,...r}=e,o=i.Children.toArray(n),s=o.find(bQ);if(s){const l=s.props.children,c=o.map(d=>d===s?i.Children.count(l)>1?i.Children.only(null):i.isValidElement(l)?l.props.children:null:d);return i.createElement(Mb,bn({},r,{ref:t}),i.isValidElement(l)?i.cloneElement(l,void 0,c):null)}return i.createElement(Mb,bn({},r,{ref:t}),n)});nE.displayName="Slot";const Mb=i.forwardRef((e,t)=>{const{children:n,...r}=e;return i.isValidElement(n)?i.cloneElement(n,{...xQ(r,n.props),ref:tE(t,n.ref)}):i.Children.count(n)>1?i.Children.only(null):null});Mb.displayName="SlotClone";const vQ=({children:e})=>i.createElement(i.Fragment,null,e);function bQ(e){return i.isValidElement(e)&&e.type===vQ}function xQ(e,t){const n={...t};for(const r in t){const o=e[r],s=t[r];/^on[A-Z]/.test(r)?o&&s?n[r]=(...c)=>{s(...c),o(...c)}:o&&(n[r]=o):r==="style"?n[r]={...o,...s}:r==="className"&&(n[r]=[o,s].filter(Boolean).join(" "))}return{...e,...n}}const yQ=["a","button","div","h2","h3","img","label","li","nav","ol","p","span","svg","ul"],ff=yQ.reduce((e,t)=>{const n=i.forwardRef((r,o)=>{const{asChild:s,...l}=r,c=s?nE:t;return i.useEffect(()=>{window[Symbol.for("radix-ui")]=!0},[]),i.createElement(c,bn({},l,{ref:o}))});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{}),Ob=globalThis!=null&&globalThis.document?i.useLayoutEffect:()=>{};function CQ(e,t){return i.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const pf=e=>{const{present:t,children:n}=e,r=wQ(t),o=typeof n=="function"?n({present:r.isPresent}):i.Children.only(n),s=di(r.ref,o.ref);return typeof n=="function"||r.isPresent?i.cloneElement(o,{ref:s}):null};pf.displayName="Presence";function wQ(e){const[t,n]=i.useState(),r=i.useRef({}),o=i.useRef(e),s=i.useRef("none"),l=e?"mounted":"unmounted",[c,d]=CQ(l,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return i.useEffect(()=>{const f=$p(r.current);s.current=c==="mounted"?f:"none"},[c]),Ob(()=>{const f=r.current,m=o.current;if(m!==e){const g=s.current,b=$p(f);e?d("MOUNT"):b==="none"||(f==null?void 0:f.display)==="none"?d("UNMOUNT"):d(m&&g!==b?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),Ob(()=>{if(t){const f=h=>{const b=$p(r.current).includes(h.animationName);h.target===t&&b&&Jr.flushSync(()=>d("ANIMATION_END"))},m=h=>{h.target===t&&(s.current=$p(r.current))};return t.addEventListener("animationstart",m),t.addEventListener("animationcancel",f),t.addEventListener("animationend",f),()=>{t.removeEventListener("animationstart",m),t.removeEventListener("animationcancel",f),t.removeEventListener("animationend",f)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:i.useCallback(f=>{f&&(r.current=getComputedStyle(f)),n(f)},[])}}function $p(e){return(e==null?void 0:e.animationName)||"none"}function SQ(e,t=[]){let n=[];function r(s,l){const c=i.createContext(l),d=n.length;n=[...n,l];function f(h){const{scope:g,children:b,...y}=h,x=(g==null?void 0:g[e][d])||c,w=i.useMemo(()=>y,Object.values(y));return i.createElement(x.Provider,{value:w},b)}function m(h,g){const b=(g==null?void 0:g[e][d])||c,y=i.useContext(b);if(y)return y;if(l!==void 0)return l;throw new Error(`\`${h}\` must be used within \`${s}\``)}return f.displayName=s+"Provider",[f,m]}const o=()=>{const s=n.map(l=>i.createContext(l));return function(c){const d=(c==null?void 0:c[e])||s;return i.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[r,kQ(o,...t)]}function kQ(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const l=r.reduce((c,{useScope:d,scopeName:f})=>{const h=d(s)[`__scope${f}`];return{...c,...h}},{});return i.useMemo(()=>({[`__scope${t.scopeName}`]:l}),[l])}};return n.scopeName=t.scopeName,n}function zl(e){const t=i.useRef(e);return i.useEffect(()=>{t.current=e}),i.useMemo(()=>(...n)=>{var r;return(r=t.current)===null||r===void 0?void 0:r.call(t,...n)},[])}const jQ=i.createContext(void 0);function _Q(e){const t=i.useContext(jQ);return e||t||"ltr"}function IQ(e,[t,n]){return Math.min(n,Math.max(t,e))}function Kl(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function PQ(e,t){return i.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const rE="ScrollArea",[oE,jye]=SQ(rE),[EQ,To]=oE(rE),MQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,type:r="hover",dir:o,scrollHideDelay:s=600,...l}=e,[c,d]=i.useState(null),[f,m]=i.useState(null),[h,g]=i.useState(null),[b,y]=i.useState(null),[x,w]=i.useState(null),[S,j]=i.useState(0),[_,I]=i.useState(0),[E,M]=i.useState(!1),[D,R]=i.useState(!1),N=di(t,T=>d(T)),O=_Q(o);return i.createElement(EQ,{scope:n,type:r,dir:O,scrollHideDelay:s,scrollArea:c,viewport:f,onViewportChange:m,content:h,onContentChange:g,scrollbarX:b,onScrollbarXChange:y,scrollbarXEnabled:E,onScrollbarXEnabledChange:M,scrollbarY:x,onScrollbarYChange:w,scrollbarYEnabled:D,onScrollbarYEnabledChange:R,onCornerWidthChange:j,onCornerHeightChange:I},i.createElement(ff.div,bn({dir:O},l,{ref:N,style:{position:"relative","--radix-scroll-area-corner-width":S+"px","--radix-scroll-area-corner-height":_+"px",...e.style}})))}),OQ="ScrollAreaViewport",DQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,children:r,...o}=e,s=To(OQ,n),l=i.useRef(null),c=di(t,l,s.onViewportChange);return i.createElement(i.Fragment,null,i.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"}}),i.createElement(ff.div,bn({"data-radix-scroll-area-viewport":""},o,{ref:c,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...e.style}}),i.createElement("div",{ref:s.onContentChange,style:{minWidth:"100%",display:"table"}},r)))}),ka="ScrollAreaScrollbar",RQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),{onScrollbarXEnabledChange:s,onScrollbarYEnabledChange:l}=o,c=e.orientation==="horizontal";return i.useEffect(()=>(c?s(!0):l(!0),()=>{c?s(!1):l(!1)}),[c,s,l]),o.type==="hover"?i.createElement(AQ,bn({},r,{ref:t,forceMount:n})):o.type==="scroll"?i.createElement(TQ,bn({},r,{ref:t,forceMount:n})):o.type==="auto"?i.createElement(sE,bn({},r,{ref:t,forceMount:n})):o.type==="always"?i.createElement(Ny,bn({},r,{ref:t})):null}),AQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),[s,l]=i.useState(!1);return i.useEffect(()=>{const c=o.scrollArea;let d=0;if(c){const f=()=>{window.clearTimeout(d),l(!0)},m=()=>{d=window.setTimeout(()=>l(!1),o.scrollHideDelay)};return c.addEventListener("pointerenter",f),c.addEventListener("pointerleave",m),()=>{window.clearTimeout(d),c.removeEventListener("pointerenter",f),c.removeEventListener("pointerleave",m)}}},[o.scrollArea,o.scrollHideDelay]),i.createElement(pf,{present:n||s},i.createElement(sE,bn({"data-state":s?"visible":"hidden"},r,{ref:t})))}),TQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),s=e.orientation==="horizontal",l=Og(()=>d("SCROLL_END"),100),[c,d]=PQ("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return i.useEffect(()=>{if(c==="idle"){const f=window.setTimeout(()=>d("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(f)}},[c,o.scrollHideDelay,d]),i.useEffect(()=>{const f=o.viewport,m=s?"scrollLeft":"scrollTop";if(f){let h=f[m];const g=()=>{const b=f[m];h!==b&&(d("SCROLL"),l()),h=b};return f.addEventListener("scroll",g),()=>f.removeEventListener("scroll",g)}},[o.viewport,s,d,l]),i.createElement(pf,{present:n||c!=="hidden"},i.createElement(Ny,bn({"data-state":c==="hidden"?"hidden":"visible"},r,{ref:t,onPointerEnter:Kl(e.onPointerEnter,()=>d("POINTER_ENTER")),onPointerLeave:Kl(e.onPointerLeave,()=>d("POINTER_LEAVE"))})))}),sE=i.forwardRef((e,t)=>{const n=To(ka,e.__scopeScrollArea),{forceMount:r,...o}=e,[s,l]=i.useState(!1),c=e.orientation==="horizontal",d=Og(()=>{if(n.viewport){const f=n.viewport.offsetWidth{const{orientation:n="vertical",...r}=e,o=To(ka,e.__scopeScrollArea),s=i.useRef(null),l=i.useRef(0),[c,d]=i.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),f=cE(c.viewport,c.content),m={...r,sizes:c,onSizesChange:d,hasThumb:f>0&&f<1,onThumbChange:g=>s.current=g,onThumbPointerUp:()=>l.current=0,onThumbPointerDown:g=>l.current=g};function h(g,b){return WQ(g,l.current,c,b)}return n==="horizontal"?i.createElement(NQ,bn({},m,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const g=o.viewport.scrollLeft,b=xk(g,c,o.dir);s.current.style.transform=`translate3d(${b}px, 0, 0)`}},onWheelScroll:g=>{o.viewport&&(o.viewport.scrollLeft=g)},onDragScroll:g=>{o.viewport&&(o.viewport.scrollLeft=h(g,o.dir))}})):n==="vertical"?i.createElement($Q,bn({},m,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const g=o.viewport.scrollTop,b=xk(g,c);s.current.style.transform=`translate3d(0, ${b}px, 0)`}},onWheelScroll:g=>{o.viewport&&(o.viewport.scrollTop=g)},onDragScroll:g=>{o.viewport&&(o.viewport.scrollTop=h(g))}})):null}),NQ=i.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=To(ka,e.__scopeScrollArea),[l,c]=i.useState(),d=i.useRef(null),f=di(t,d,s.onScrollbarXChange);return i.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),i.createElement(lE,bn({"data-orientation":"horizontal"},o,{ref:f,sizes:n,style:{bottom:0,left:s.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:s.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Mg(n)+"px",...e.style},onThumbPointerDown:m=>e.onThumbPointerDown(m.x),onDragScroll:m=>e.onDragScroll(m.x),onWheelScroll:(m,h)=>{if(s.viewport){const g=s.viewport.scrollLeft+m.deltaX;e.onWheelScroll(g),dE(g,h)&&m.preventDefault()}},onResize:()=>{d.current&&s.viewport&&l&&r({content:s.viewport.scrollWidth,viewport:s.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:th(l.paddingLeft),paddingEnd:th(l.paddingRight)}})}}))}),$Q=i.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=To(ka,e.__scopeScrollArea),[l,c]=i.useState(),d=i.useRef(null),f=di(t,d,s.onScrollbarYChange);return i.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),i.createElement(lE,bn({"data-orientation":"vertical"},o,{ref:f,sizes:n,style:{top:0,right:s.dir==="ltr"?0:void 0,left:s.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Mg(n)+"px",...e.style},onThumbPointerDown:m=>e.onThumbPointerDown(m.y),onDragScroll:m=>e.onDragScroll(m.y),onWheelScroll:(m,h)=>{if(s.viewport){const g=s.viewport.scrollTop+m.deltaY;e.onWheelScroll(g),dE(g,h)&&m.preventDefault()}},onResize:()=>{d.current&&s.viewport&&l&&r({content:s.viewport.scrollHeight,viewport:s.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:th(l.paddingTop),paddingEnd:th(l.paddingBottom)}})}}))}),[LQ,aE]=oE(ka),lE=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:o,onThumbChange:s,onThumbPointerUp:l,onThumbPointerDown:c,onThumbPositionChange:d,onDragScroll:f,onWheelScroll:m,onResize:h,...g}=e,b=To(ka,n),[y,x]=i.useState(null),w=di(t,N=>x(N)),S=i.useRef(null),j=i.useRef(""),_=b.viewport,I=r.content-r.viewport,E=zl(m),M=zl(d),D=Og(h,10);function R(N){if(S.current){const O=N.clientX-S.current.left,T=N.clientY-S.current.top;f({x:O,y:T})}}return i.useEffect(()=>{const N=O=>{const T=O.target;(y==null?void 0:y.contains(T))&&E(O,I)};return document.addEventListener("wheel",N,{passive:!1}),()=>document.removeEventListener("wheel",N,{passive:!1})},[_,y,I,E]),i.useEffect(M,[r,M]),Dc(y,D),Dc(b.content,D),i.createElement(LQ,{scope:n,scrollbar:y,hasThumb:o,onThumbChange:zl(s),onThumbPointerUp:zl(l),onThumbPositionChange:M,onThumbPointerDown:zl(c)},i.createElement(ff.div,bn({},g,{ref:w,style:{position:"absolute",...g.style},onPointerDown:Kl(e.onPointerDown,N=>{N.button===0&&(N.target.setPointerCapture(N.pointerId),S.current=y.getBoundingClientRect(),j.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",R(N))}),onPointerMove:Kl(e.onPointerMove,R),onPointerUp:Kl(e.onPointerUp,N=>{const O=N.target;O.hasPointerCapture(N.pointerId)&&O.releasePointerCapture(N.pointerId),document.body.style.webkitUserSelect=j.current,S.current=null})})))}),Db="ScrollAreaThumb",FQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=aE(Db,e.__scopeScrollArea);return i.createElement(pf,{present:n||o.hasThumb},i.createElement(zQ,bn({ref:t},r)))}),zQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,style:r,...o}=e,s=To(Db,n),l=aE(Db,n),{onThumbPositionChange:c}=l,d=di(t,h=>l.onThumbChange(h)),f=i.useRef(),m=Og(()=>{f.current&&(f.current(),f.current=void 0)},100);return i.useEffect(()=>{const h=s.viewport;if(h){const g=()=>{if(m(),!f.current){const b=VQ(h,c);f.current=b,c()}};return c(),h.addEventListener("scroll",g),()=>h.removeEventListener("scroll",g)}},[s.viewport,m,c]),i.createElement(ff.div,bn({"data-state":l.hasThumb?"visible":"hidden"},o,{ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:Kl(e.onPointerDownCapture,h=>{const b=h.target.getBoundingClientRect(),y=h.clientX-b.left,x=h.clientY-b.top;l.onThumbPointerDown({x:y,y:x})}),onPointerUp:Kl(e.onPointerUp,l.onThumbPointerUp)}))}),iE="ScrollAreaCorner",BQ=i.forwardRef((e,t)=>{const n=To(iE,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?i.createElement(HQ,bn({},e,{ref:t})):null}),HQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,...r}=e,o=To(iE,n),[s,l]=i.useState(0),[c,d]=i.useState(0),f=!!(s&&c);return Dc(o.scrollbarX,()=>{var m;const h=((m=o.scrollbarX)===null||m===void 0?void 0:m.offsetHeight)||0;o.onCornerHeightChange(h),d(h)}),Dc(o.scrollbarY,()=>{var m;const h=((m=o.scrollbarY)===null||m===void 0?void 0:m.offsetWidth)||0;o.onCornerWidthChange(h),l(h)}),f?i.createElement(ff.div,bn({},r,{ref:t,style:{width:s,height:c,position:"absolute",right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:0,...e.style}})):null});function th(e){return e?parseInt(e,10):0}function cE(e,t){const n=e/t;return isNaN(n)?0:n}function Mg(e){const t=cE(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function WQ(e,t,n,r="ltr"){const o=Mg(n),s=o/2,l=t||s,c=o-l,d=n.scrollbar.paddingStart+l,f=n.scrollbar.size-n.scrollbar.paddingEnd-c,m=n.content-n.viewport,h=r==="ltr"?[0,m]:[m*-1,0];return uE([d,f],h)(e)}function xk(e,t,n="ltr"){const r=Mg(t),o=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,s=t.scrollbar.size-o,l=t.content-t.viewport,c=s-r,d=n==="ltr"?[0,l]:[l*-1,0],f=IQ(e,d);return uE([0,l],[0,c])(f)}function uE(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function dE(e,t){return e>0&&e{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return function o(){const s={left:e.scrollLeft,top:e.scrollTop},l=n.left!==s.left,c=n.top!==s.top;(l||c)&&t(),n=s,r=window.requestAnimationFrame(o)}(),()=>window.cancelAnimationFrame(r)};function Og(e,t){const n=zl(e),r=i.useRef(0);return i.useEffect(()=>()=>window.clearTimeout(r.current),[]),i.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function Dc(e,t){const n=zl(t);Ob(()=>{let r=0;if(e){const o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return o.observe(e),()=>{window.cancelAnimationFrame(r),o.unobserve(e)}}},[e,n])}const UQ=MQ,GQ=DQ,yk=RQ,Ck=FQ,KQ=BQ;var qQ=gr((e,{scrollbarSize:t,offsetScrollbars:n,scrollbarHovered:r,hidden:o})=>({root:{overflow:"hidden"},viewport:{width:"100%",height:"100%",paddingRight:n?Ae(t):void 0,paddingBottom:n?Ae(t):void 0},scrollbar:{display:o?"none":"flex",userSelect:"none",touchAction:"none",boxSizing:"border-box",padding:`calc(${Ae(t)} / 5)`,transition:"background-color 150ms ease, opacity 150ms ease","&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[8]:e.colors.gray[0],[`& .${_4("thumb")}`]:{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.5):e.fn.rgba(e.black,.5)}},'&[data-orientation="vertical"]':{width:Ae(t)},'&[data-orientation="horizontal"]':{flexDirection:"column",height:Ae(t)},'&[data-state="hidden"]':{display:"none",opacity:0}},thumb:{ref:_4("thumb"),flex:1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.4):e.fn.rgba(e.black,.4),borderRadius:Ae(t),position:"relative",transition:"background-color 150ms ease",display:o?"none":void 0,overflow:"hidden","&::before":{content:'""',position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:"100%",height:"100%",minWidth:Ae(44),minHeight:Ae(44)}},corner:{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],transition:"opacity 150ms ease",opacity:r?1:0,display:o?"none":void 0}}));const XQ=qQ;var QQ=Object.defineProperty,YQ=Object.defineProperties,ZQ=Object.getOwnPropertyDescriptors,nh=Object.getOwnPropertySymbols,fE=Object.prototype.hasOwnProperty,pE=Object.prototype.propertyIsEnumerable,wk=(e,t,n)=>t in e?QQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Rb=(e,t)=>{for(var n in t||(t={}))fE.call(t,n)&&wk(e,n,t[n]);if(nh)for(var n of nh(t))pE.call(t,n)&&wk(e,n,t[n]);return e},mE=(e,t)=>YQ(e,ZQ(t)),hE=(e,t)=>{var n={};for(var r in e)fE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&nh)for(var r of nh(e))t.indexOf(r)<0&&pE.call(e,r)&&(n[r]=e[r]);return n};const gE={scrollbarSize:12,scrollHideDelay:1e3,type:"hover",offsetScrollbars:!1},Dg=i.forwardRef((e,t)=>{const n=Nn("ScrollArea",gE,e),{children:r,className:o,classNames:s,styles:l,scrollbarSize:c,scrollHideDelay:d,type:f,dir:m,offsetScrollbars:h,viewportRef:g,onScrollPositionChange:b,unstyled:y,variant:x,viewportProps:w}=n,S=hE(n,["children","className","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","variant","viewportProps"]),[j,_]=i.useState(!1),I=wa(),{classes:E,cx:M}=XQ({scrollbarSize:c,offsetScrollbars:h,scrollbarHovered:j,hidden:f==="never"},{name:"ScrollArea",classNames:s,styles:l,unstyled:y,variant:x});return B.createElement(UQ,{type:f==="never"?"always":f,scrollHideDelay:d,dir:m||I.dir,ref:t,asChild:!0},B.createElement(Vr,Rb({className:M(E.root,o)},S),B.createElement(GQ,mE(Rb({},w),{className:E.viewport,ref:g,onScroll:typeof b=="function"?({currentTarget:D})=>b({x:D.scrollLeft,y:D.scrollTop}):void 0}),r),B.createElement(yk,{orientation:"horizontal",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1)},B.createElement(Ck,{className:E.thumb})),B.createElement(yk,{orientation:"vertical",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1)},B.createElement(Ck,{className:E.thumb})),B.createElement(KQ,{className:E.corner})))}),vE=i.forwardRef((e,t)=>{const n=Nn("ScrollAreaAutosize",gE,e),{children:r,classNames:o,styles:s,scrollbarSize:l,scrollHideDelay:c,type:d,dir:f,offsetScrollbars:m,viewportRef:h,onScrollPositionChange:g,unstyled:b,sx:y,variant:x,viewportProps:w}=n,S=hE(n,["children","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","sx","variant","viewportProps"]);return B.createElement(Vr,mE(Rb({},S),{ref:t,sx:[{display:"flex"},...oP(y)]}),B.createElement(Vr,{sx:{display:"flex",flexDirection:"column",flex:1}},B.createElement(Dg,{classNames:o,styles:s,scrollHideDelay:c,scrollbarSize:l,type:d,dir:f,offsetScrollbars:m,viewportRef:h,onScrollPositionChange:g,unstyled:b,variant:x,viewportProps:w},r)))});vE.displayName="@mantine/core/ScrollAreaAutosize";Dg.displayName="@mantine/core/ScrollArea";Dg.Autosize=vE;const bE=Dg;var JQ=Object.defineProperty,eY=Object.defineProperties,tY=Object.getOwnPropertyDescriptors,rh=Object.getOwnPropertySymbols,xE=Object.prototype.hasOwnProperty,yE=Object.prototype.propertyIsEnumerable,Sk=(e,t,n)=>t in e?JQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,kk=(e,t)=>{for(var n in t||(t={}))xE.call(t,n)&&Sk(e,n,t[n]);if(rh)for(var n of rh(t))yE.call(t,n)&&Sk(e,n,t[n]);return e},nY=(e,t)=>eY(e,tY(t)),rY=(e,t)=>{var n={};for(var r in e)xE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&rh)for(var r of rh(e))t.indexOf(r)<0&&yE.call(e,r)&&(n[r]=e[r]);return n};const Rg=i.forwardRef((e,t)=>{var n=e,{style:r}=n,o=rY(n,["style"]);return B.createElement(bE,nY(kk({},o),{style:kk({width:"100%"},r),viewportProps:{tabIndex:-1},viewportRef:t}),o.children)});Rg.displayName="@mantine/core/SelectScrollArea";var oY=gr(()=>({dropdown:{},itemsWrapper:{padding:Ae(4),display:"flex",width:"100%",boxSizing:"border-box"}}));const sY=oY,is=Math.min,fr=Math.max,oh=Math.round,Lp=Math.floor,ll=e=>({x:e,y:e}),aY={left:"right",right:"left",bottom:"top",top:"bottom"},lY={start:"end",end:"start"};function Ab(e,t,n){return fr(e,is(t,n))}function ua(e,t){return typeof e=="function"?e(t):e}function cs(e){return e.split("-")[0]}function tu(e){return e.split("-")[1]}function $y(e){return e==="x"?"y":"x"}function Ly(e){return e==="y"?"height":"width"}function fi(e){return["top","bottom"].includes(cs(e))?"y":"x"}function Fy(e){return $y(fi(e))}function iY(e,t,n){n===void 0&&(n=!1);const r=tu(e),o=Fy(e),s=Ly(o);let l=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(l=sh(l)),[l,sh(l)]}function cY(e){const t=sh(e);return[Tb(e),t,Tb(t)]}function Tb(e){return e.replace(/start|end/g,t=>lY[t])}function uY(e,t,n){const r=["left","right"],o=["right","left"],s=["top","bottom"],l=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?s:l;default:return[]}}function dY(e,t,n,r){const o=tu(e);let s=uY(cs(e),n==="start",r);return o&&(s=s.map(l=>l+"-"+o),t&&(s=s.concat(s.map(Tb)))),s}function sh(e){return e.replace(/left|right|bottom|top/g,t=>aY[t])}function fY(e){return{top:0,right:0,bottom:0,left:0,...e}}function zy(e){return typeof e!="number"?fY(e):{top:e,right:e,bottom:e,left:e}}function Rc(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function jk(e,t,n){let{reference:r,floating:o}=e;const s=fi(t),l=Fy(t),c=Ly(l),d=cs(t),f=s==="y",m=r.x+r.width/2-o.width/2,h=r.y+r.height/2-o.height/2,g=r[c]/2-o[c]/2;let b;switch(d){case"top":b={x:m,y:r.y-o.height};break;case"bottom":b={x:m,y:r.y+r.height};break;case"right":b={x:r.x+r.width,y:h};break;case"left":b={x:r.x-o.width,y:h};break;default:b={x:r.x,y:r.y}}switch(tu(t)){case"start":b[l]-=g*(n&&f?-1:1);break;case"end":b[l]+=g*(n&&f?-1:1);break}return b}const pY=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:s=[],platform:l}=n,c=s.filter(Boolean),d=await(l.isRTL==null?void 0:l.isRTL(t));let f=await l.getElementRects({reference:e,floating:t,strategy:o}),{x:m,y:h}=jk(f,r,d),g=r,b={},y=0;for(let x=0;x({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:s,platform:l,elements:c,middlewareData:d}=t,{element:f,padding:m=0}=ua(e,t)||{};if(f==null)return{};const h=zy(m),g={x:n,y:r},b=Fy(o),y=Ly(b),x=await l.getDimensions(f),w=b==="y",S=w?"top":"left",j=w?"bottom":"right",_=w?"clientHeight":"clientWidth",I=s.reference[y]+s.reference[b]-g[b]-s.floating[y],E=g[b]-s.reference[b],M=await(l.getOffsetParent==null?void 0:l.getOffsetParent(f));let D=M?M[_]:0;(!D||!await(l.isElement==null?void 0:l.isElement(M)))&&(D=c.floating[_]||s.floating[y]);const R=I/2-E/2,N=D/2-x[y]/2-1,O=is(h[S],N),T=is(h[j],N),U=O,G=D-x[y]-T,q=D/2-x[y]/2+R,Y=Ab(U,q,G),Q=!d.arrow&&tu(o)!=null&&q!=Y&&s.reference[y]/2-(qU<=0)){var N,O;const U=(((N=s.flip)==null?void 0:N.index)||0)+1,G=E[U];if(G)return{data:{index:U,overflows:R},reset:{placement:G}};let q=(O=R.filter(Y=>Y.overflows[0]<=0).sort((Y,Q)=>Y.overflows[1]-Q.overflows[1])[0])==null?void 0:O.placement;if(!q)switch(b){case"bestFit":{var T;const Y=(T=R.map(Q=>[Q.placement,Q.overflows.filter(V=>V>0).reduce((V,se)=>V+se,0)]).sort((Q,V)=>Q[1]-V[1])[0])==null?void 0:T[0];Y&&(q=Y);break}case"initialPlacement":q=c;break}if(o!==q)return{reset:{placement:q}}}return{}}}};function CE(e){const t=is(...e.map(s=>s.left)),n=is(...e.map(s=>s.top)),r=fr(...e.map(s=>s.right)),o=fr(...e.map(s=>s.bottom));return{x:t,y:n,width:r-t,height:o-n}}function hY(e){const t=e.slice().sort((o,s)=>o.y-s.y),n=[];let r=null;for(let o=0;or.height/2?n.push([s]):n[n.length-1].push(s),r=s}return n.map(o=>Rc(CE(o)))}const gY=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:n,elements:r,rects:o,platform:s,strategy:l}=t,{padding:c=2,x:d,y:f}=ua(e,t),m=Array.from(await(s.getClientRects==null?void 0:s.getClientRects(r.reference))||[]),h=hY(m),g=Rc(CE(m)),b=zy(c);function y(){if(h.length===2&&h[0].left>h[1].right&&d!=null&&f!=null)return h.find(w=>d>w.left-b.left&&dw.top-b.top&&f=2){if(fi(n)==="y"){const O=h[0],T=h[h.length-1],U=cs(n)==="top",G=O.top,q=T.bottom,Y=U?O.left:T.left,Q=U?O.right:T.right,V=Q-Y,se=q-G;return{top:G,bottom:q,left:Y,right:Q,width:V,height:se,x:Y,y:G}}const w=cs(n)==="left",S=fr(...h.map(O=>O.right)),j=is(...h.map(O=>O.left)),_=h.filter(O=>w?O.left===j:O.right===S),I=_[0].top,E=_[_.length-1].bottom,M=j,D=S,R=D-M,N=E-I;return{top:I,bottom:E,left:M,right:D,width:R,height:N,x:M,y:I}}return g}const x=await s.getElementRects({reference:{getBoundingClientRect:y},floating:r.floating,strategy:l});return o.reference.x!==x.reference.x||o.reference.y!==x.reference.y||o.reference.width!==x.reference.width||o.reference.height!==x.reference.height?{reset:{rects:x}}:{}}}};async function vY(e,t){const{placement:n,platform:r,elements:o}=e,s=await(r.isRTL==null?void 0:r.isRTL(o.floating)),l=cs(n),c=tu(n),d=fi(n)==="y",f=["left","top"].includes(l)?-1:1,m=s&&d?-1:1,h=ua(t,e);let{mainAxis:g,crossAxis:b,alignmentAxis:y}=typeof h=="number"?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...h};return c&&typeof y=="number"&&(b=c==="end"?y*-1:y),d?{x:b*m,y:g*f}:{x:g*f,y:b*m}}const bY=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){const{x:n,y:r}=t,o=await vY(t,e);return{x:n+o.x,y:r+o.y,data:o}}}},xY=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:s=!0,crossAxis:l=!1,limiter:c={fn:w=>{let{x:S,y:j}=w;return{x:S,y:j}}},...d}=ua(e,t),f={x:n,y:r},m=await By(t,d),h=fi(cs(o)),g=$y(h);let b=f[g],y=f[h];if(s){const w=g==="y"?"top":"left",S=g==="y"?"bottom":"right",j=b+m[w],_=b-m[S];b=Ab(j,b,_)}if(l){const w=h==="y"?"top":"left",S=h==="y"?"bottom":"right",j=y+m[w],_=y-m[S];y=Ab(j,y,_)}const x=c.fn({...t,[g]:b,[h]:y});return{...x,data:{x:x.x-n,y:x.y-r}}}}},yY=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:s,middlewareData:l}=t,{offset:c=0,mainAxis:d=!0,crossAxis:f=!0}=ua(e,t),m={x:n,y:r},h=fi(o),g=$y(h);let b=m[g],y=m[h];const x=ua(c,t),w=typeof x=="number"?{mainAxis:x,crossAxis:0}:{mainAxis:0,crossAxis:0,...x};if(d){const _=g==="y"?"height":"width",I=s.reference[g]-s.floating[_]+w.mainAxis,E=s.reference[g]+s.reference[_]-w.mainAxis;bE&&(b=E)}if(f){var S,j;const _=g==="y"?"width":"height",I=["top","left"].includes(cs(o)),E=s.reference[h]-s.floating[_]+(I&&((S=l.offset)==null?void 0:S[h])||0)+(I?0:w.crossAxis),M=s.reference[h]+s.reference[_]+(I?0:((j=l.offset)==null?void 0:j[h])||0)-(I?w.crossAxis:0);yM&&(y=M)}return{[g]:b,[h]:y}}}},CY=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:r,platform:o,elements:s}=t,{apply:l=()=>{},...c}=ua(e,t),d=await By(t,c),f=cs(n),m=tu(n),h=fi(n)==="y",{width:g,height:b}=r.floating;let y,x;f==="top"||f==="bottom"?(y=f,x=m===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?"start":"end")?"left":"right"):(x=f,y=m==="end"?"top":"bottom");const w=b-d[y],S=g-d[x],j=!t.middlewareData.shift;let _=w,I=S;if(h){const M=g-d.left-d.right;I=m||j?is(S,M):M}else{const M=b-d.top-d.bottom;_=m||j?is(w,M):M}if(j&&!m){const M=fr(d.left,0),D=fr(d.right,0),R=fr(d.top,0),N=fr(d.bottom,0);h?I=g-2*(M!==0||D!==0?M+D:fr(d.left,d.right)):_=b-2*(R!==0||N!==0?R+N:fr(d.top,d.bottom))}await l({...t,availableWidth:I,availableHeight:_});const E=await o.getDimensions(s.floating);return g!==E.width||b!==E.height?{reset:{rects:!0}}:{}}}};function il(e){return wE(e)?(e.nodeName||"").toLowerCase():"#document"}function no(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function ja(e){var t;return(t=(wE(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function wE(e){return e instanceof Node||e instanceof no(e).Node}function da(e){return e instanceof Element||e instanceof no(e).Element}function Ms(e){return e instanceof HTMLElement||e instanceof no(e).HTMLElement}function Ik(e){return typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof no(e).ShadowRoot}function mf(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=Oo(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function wY(e){return["table","td","th"].includes(il(e))}function Hy(e){const t=Wy(),n=Oo(e);return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function SY(e){let t=Ac(e);for(;Ms(t)&&!Ag(t);){if(Hy(t))return t;t=Ac(t)}return null}function Wy(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Ag(e){return["html","body","#document"].includes(il(e))}function Oo(e){return no(e).getComputedStyle(e)}function Tg(e){return da(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ac(e){if(il(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Ik(e)&&e.host||ja(e);return Ik(t)?t.host:t}function SE(e){const t=Ac(e);return Ag(t)?e.ownerDocument?e.ownerDocument.body:e.body:Ms(t)&&mf(t)?t:SE(t)}function Ed(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=SE(e),s=o===((r=e.ownerDocument)==null?void 0:r.body),l=no(o);return s?t.concat(l,l.visualViewport||[],mf(o)?o:[],l.frameElement&&n?Ed(l.frameElement):[]):t.concat(o,Ed(o,[],n))}function kE(e){const t=Oo(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=Ms(e),s=o?e.offsetWidth:n,l=o?e.offsetHeight:r,c=oh(n)!==s||oh(r)!==l;return c&&(n=s,r=l),{width:n,height:r,$:c}}function Vy(e){return da(e)?e:e.contextElement}function yc(e){const t=Vy(e);if(!Ms(t))return ll(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:s}=kE(t);let l=(s?oh(n.width):n.width)/r,c=(s?oh(n.height):n.height)/o;return(!l||!Number.isFinite(l))&&(l=1),(!c||!Number.isFinite(c))&&(c=1),{x:l,y:c}}const kY=ll(0);function jE(e){const t=no(e);return!Wy()||!t.visualViewport?kY:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function jY(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==no(e)?!1:t}function oi(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),s=Vy(e);let l=ll(1);t&&(r?da(r)&&(l=yc(r)):l=yc(e));const c=jY(s,n,r)?jE(s):ll(0);let d=(o.left+c.x)/l.x,f=(o.top+c.y)/l.y,m=o.width/l.x,h=o.height/l.y;if(s){const g=no(s),b=r&&da(r)?no(r):r;let y=g.frameElement;for(;y&&r&&b!==g;){const x=yc(y),w=y.getBoundingClientRect(),S=Oo(y),j=w.left+(y.clientLeft+parseFloat(S.paddingLeft))*x.x,_=w.top+(y.clientTop+parseFloat(S.paddingTop))*x.y;d*=x.x,f*=x.y,m*=x.x,h*=x.y,d+=j,f+=_,y=no(y).frameElement}}return Rc({width:m,height:h,x:d,y:f})}function _Y(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=Ms(n),s=ja(n);if(n===s)return t;let l={scrollLeft:0,scrollTop:0},c=ll(1);const d=ll(0);if((o||!o&&r!=="fixed")&&((il(n)!=="body"||mf(s))&&(l=Tg(n)),Ms(n))){const f=oi(n);c=yc(n),d.x=f.x+n.clientLeft,d.y=f.y+n.clientTop}return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-l.scrollLeft*c.x+d.x,y:t.y*c.y-l.scrollTop*c.y+d.y}}function IY(e){return Array.from(e.getClientRects())}function _E(e){return oi(ja(e)).left+Tg(e).scrollLeft}function PY(e){const t=ja(e),n=Tg(e),r=e.ownerDocument.body,o=fr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),s=fr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let l=-n.scrollLeft+_E(e);const c=-n.scrollTop;return Oo(r).direction==="rtl"&&(l+=fr(t.clientWidth,r.clientWidth)-o),{width:o,height:s,x:l,y:c}}function EY(e,t){const n=no(e),r=ja(e),o=n.visualViewport;let s=r.clientWidth,l=r.clientHeight,c=0,d=0;if(o){s=o.width,l=o.height;const f=Wy();(!f||f&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:l,x:c,y:d}}function MY(e,t){const n=oi(e,!0,t==="fixed"),r=n.top+e.clientTop,o=n.left+e.clientLeft,s=Ms(e)?yc(e):ll(1),l=e.clientWidth*s.x,c=e.clientHeight*s.y,d=o*s.x,f=r*s.y;return{width:l,height:c,x:d,y:f}}function Pk(e,t,n){let r;if(t==="viewport")r=EY(e,n);else if(t==="document")r=PY(ja(e));else if(da(t))r=MY(t,n);else{const o=jE(e);r={...t,x:t.x-o.x,y:t.y-o.y}}return Rc(r)}function IE(e,t){const n=Ac(e);return n===t||!da(n)||Ag(n)?!1:Oo(n).position==="fixed"||IE(n,t)}function OY(e,t){const n=t.get(e);if(n)return n;let r=Ed(e,[],!1).filter(c=>da(c)&&il(c)!=="body"),o=null;const s=Oo(e).position==="fixed";let l=s?Ac(e):e;for(;da(l)&&!Ag(l);){const c=Oo(l),d=Hy(l);!d&&c.position==="fixed"&&(o=null),(s?!d&&!o:!d&&c.position==="static"&&!!o&&["absolute","fixed"].includes(o.position)||mf(l)&&!d&&IE(e,l))?r=r.filter(m=>m!==l):o=c,l=Ac(l)}return t.set(e,r),r}function DY(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const l=[...n==="clippingAncestors"?OY(t,this._c):[].concat(n),r],c=l[0],d=l.reduce((f,m)=>{const h=Pk(t,m,o);return f.top=fr(h.top,f.top),f.right=is(h.right,f.right),f.bottom=is(h.bottom,f.bottom),f.left=fr(h.left,f.left),f},Pk(t,c,o));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function RY(e){return kE(e)}function AY(e,t,n){const r=Ms(t),o=ja(t),s=n==="fixed",l=oi(e,!0,s,t);let c={scrollLeft:0,scrollTop:0};const d=ll(0);if(r||!r&&!s)if((il(t)!=="body"||mf(o))&&(c=Tg(t)),r){const f=oi(t,!0,s,t);d.x=f.x+t.clientLeft,d.y=f.y+t.clientTop}else o&&(d.x=_E(o));return{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function Ek(e,t){return!Ms(e)||Oo(e).position==="fixed"?null:t?t(e):e.offsetParent}function PE(e,t){const n=no(e);if(!Ms(e))return n;let r=Ek(e,t);for(;r&&wY(r)&&Oo(r).position==="static";)r=Ek(r,t);return r&&(il(r)==="html"||il(r)==="body"&&Oo(r).position==="static"&&!Hy(r))?n:r||SY(e)||n}const TY=async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||PE,s=this.getDimensions;return{reference:AY(t,await o(n),r),floating:{x:0,y:0,...await s(n)}}};function NY(e){return Oo(e).direction==="rtl"}const $Y={convertOffsetParentRelativeRectToViewportRelativeRect:_Y,getDocumentElement:ja,getClippingRect:DY,getOffsetParent:PE,getElementRects:TY,getClientRects:IY,getDimensions:RY,getScale:yc,isElement:da,isRTL:NY};function LY(e,t){let n=null,r;const o=ja(e);function s(){clearTimeout(r),n&&n.disconnect(),n=null}function l(c,d){c===void 0&&(c=!1),d===void 0&&(d=1),s();const{left:f,top:m,width:h,height:g}=e.getBoundingClientRect();if(c||t(),!h||!g)return;const b=Lp(m),y=Lp(o.clientWidth-(f+h)),x=Lp(o.clientHeight-(m+g)),w=Lp(f),j={rootMargin:-b+"px "+-y+"px "+-x+"px "+-w+"px",threshold:fr(0,is(1,d))||1};let _=!0;function I(E){const M=E[0].intersectionRatio;if(M!==d){if(!_)return l();M?l(!1,M):r=setTimeout(()=>{l(!1,1e-7)},100)}_=!1}try{n=new IntersectionObserver(I,{...j,root:o.ownerDocument})}catch{n=new IntersectionObserver(I,j)}n.observe(e)}return l(!0),s}function FY(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:d=!1}=r,f=Vy(e),m=o||s?[...f?Ed(f):[],...Ed(t)]:[];m.forEach(S=>{o&&S.addEventListener("scroll",n,{passive:!0}),s&&S.addEventListener("resize",n)});const h=f&&c?LY(f,n):null;let g=-1,b=null;l&&(b=new ResizeObserver(S=>{let[j]=S;j&&j.target===f&&b&&(b.unobserve(t),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{b&&b.observe(t)})),n()}),f&&!d&&b.observe(f),b.observe(t));let y,x=d?oi(e):null;d&&w();function w(){const S=oi(e);x&&(S.x!==x.x||S.y!==x.y||S.width!==x.width||S.height!==x.height)&&n(),x=S,y=requestAnimationFrame(w)}return n(),()=>{m.forEach(S=>{o&&S.removeEventListener("scroll",n),s&&S.removeEventListener("resize",n)}),h&&h(),b&&b.disconnect(),b=null,d&&cancelAnimationFrame(y)}}const zY=(e,t,n)=>{const r=new Map,o={platform:$Y,...n},s={...o.platform,_c:r};return pY(e,t,{...o,platform:s})},BY=e=>{const{element:t,padding:n}=e;function r(o){return Object.prototype.hasOwnProperty.call(o,"current")}return{name:"arrow",options:e,fn(o){return r(t)?t.current!=null?_k({element:t.current,padding:n}).fn(o):{}:t?_k({element:t,padding:n}).fn(o):{}}}};var mm=typeof document<"u"?i.useLayoutEffect:i.useEffect;function ah(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!ah(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const s=o[r];if(!(s==="_owner"&&e.$$typeof)&&!ah(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function Mk(e){const t=i.useRef(e);return mm(()=>{t.current=e}),t}function HY(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,whileElementsMounted:s,open:l}=e,[c,d]=i.useState({x:null,y:null,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,m]=i.useState(r);ah(f,r)||m(r);const h=i.useRef(null),g=i.useRef(null),b=i.useRef(c),y=Mk(s),x=Mk(o),[w,S]=i.useState(null),[j,_]=i.useState(null),I=i.useCallback(O=>{h.current!==O&&(h.current=O,S(O))},[]),E=i.useCallback(O=>{g.current!==O&&(g.current=O,_(O))},[]),M=i.useCallback(()=>{if(!h.current||!g.current)return;const O={placement:t,strategy:n,middleware:f};x.current&&(O.platform=x.current),zY(h.current,g.current,O).then(T=>{const U={...T,isPositioned:!0};D.current&&!ah(b.current,U)&&(b.current=U,Jr.flushSync(()=>{d(U)}))})},[f,t,n,x]);mm(()=>{l===!1&&b.current.isPositioned&&(b.current.isPositioned=!1,d(O=>({...O,isPositioned:!1})))},[l]);const D=i.useRef(!1);mm(()=>(D.current=!0,()=>{D.current=!1}),[]),mm(()=>{if(w&&j){if(y.current)return y.current(w,j,M);M()}},[w,j,M,y]);const R=i.useMemo(()=>({reference:h,floating:g,setReference:I,setFloating:E}),[I,E]),N=i.useMemo(()=>({reference:w,floating:j}),[w,j]);return i.useMemo(()=>({...c,update:M,refs:R,elements:N,reference:I,floating:E}),[c,M,R,N,I,E])}var WY=typeof document<"u"?i.useLayoutEffect:i.useEffect;function VY(){const e=new Map;return{emit(t,n){var r;(r=e.get(t))==null||r.forEach(o=>o(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){e.set(t,(e.get(t)||[]).filter(r=>r!==n))}}}const UY=i.createContext(null),GY=()=>i.useContext(UY);function KY(e){return(e==null?void 0:e.ownerDocument)||document}function qY(e){return KY(e).defaultView||window}function Fp(e){return e?e instanceof qY(e).Element:!1}const XY=xx["useInsertionEffect".toString()],QY=XY||(e=>e());function YY(e){const t=i.useRef(()=>{});return QY(()=>{t.current=e}),i.useCallback(function(){for(var n=arguments.length,r=new Array(n),o=0;oVY())[0],[f,m]=i.useState(null),h=i.useCallback(S=>{const j=Fp(S)?{getBoundingClientRect:()=>S.getBoundingClientRect(),contextElement:S}:S;o.refs.setReference(j)},[o.refs]),g=i.useCallback(S=>{(Fp(S)||S===null)&&(l.current=S,m(S)),(Fp(o.refs.reference.current)||o.refs.reference.current===null||S!==null&&!Fp(S))&&o.refs.setReference(S)},[o.refs]),b=i.useMemo(()=>({...o.refs,setReference:g,setPositionReference:h,domReference:l}),[o.refs,g,h]),y=i.useMemo(()=>({...o.elements,domReference:f}),[o.elements,f]),x=YY(n),w=i.useMemo(()=>({...o,refs:b,elements:y,dataRef:c,nodeId:r,events:d,open:t,onOpenChange:x}),[o,r,d,t,x,b,y]);return WY(()=>{const S=s==null?void 0:s.nodesRef.current.find(j=>j.id===r);S&&(S.context=w)}),i.useMemo(()=>({...o,context:w,refs:b,reference:g,positionReference:h}),[o,b,w,g,h])}function JY({opened:e,floating:t,position:n,positionDependencies:r}){const[o,s]=i.useState(0);i.useEffect(()=>{if(t.refs.reference.current&&t.refs.floating.current)return FY(t.refs.reference.current,t.refs.floating.current,t.update)},[t.refs.reference.current,t.refs.floating.current,e,o,n]),os(()=>{t.update()},r),os(()=>{s(l=>l+1)},[e])}function eZ(e){const t=[bY(e.offset)];return e.middlewares.shift&&t.push(xY({limiter:yY()})),e.middlewares.flip&&t.push(mY()),e.middlewares.inline&&t.push(gY()),t.push(BY({element:e.arrowRef,padding:e.arrowOffset})),t}function tZ(e){const[t,n]=Pd({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),r=()=>{var l;(l=e.onClose)==null||l.call(e),n(!1)},o=()=>{var l,c;t?((l=e.onClose)==null||l.call(e),n(!1)):((c=e.onOpen)==null||c.call(e),n(!0))},s=ZY({placement:e.position,middleware:[...eZ(e),...e.width==="target"?[CY({apply({rects:l}){var c,d;Object.assign((d=(c=s.refs.floating.current)==null?void 0:c.style)!=null?d:{},{width:`${l.reference.width}px`})}})]:[]]});return JY({opened:e.opened,position:e.position,positionDependencies:e.positionDependencies,floating:s}),os(()=>{var l;(l=e.onPositionChange)==null||l.call(e,s.placement)},[s.placement]),os(()=>{var l,c;e.opened?(c=e.onOpen)==null||c.call(e):(l=e.onClose)==null||l.call(e)},[e.opened]),{floating:s,controlled:typeof e.opened=="boolean",opened:t,onClose:r,onToggle:o}}const EE={context:"Popover component was not found in the tree",children:"Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported"},[nZ,ME]=jK(EE.context);var rZ=Object.defineProperty,oZ=Object.defineProperties,sZ=Object.getOwnPropertyDescriptors,lh=Object.getOwnPropertySymbols,OE=Object.prototype.hasOwnProperty,DE=Object.prototype.propertyIsEnumerable,Ok=(e,t,n)=>t in e?rZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zp=(e,t)=>{for(var n in t||(t={}))OE.call(t,n)&&Ok(e,n,t[n]);if(lh)for(var n of lh(t))DE.call(t,n)&&Ok(e,n,t[n]);return e},aZ=(e,t)=>oZ(e,sZ(t)),lZ=(e,t)=>{var n={};for(var r in e)OE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&lh)for(var r of lh(e))t.indexOf(r)<0&&DE.call(e,r)&&(n[r]=e[r]);return n};const iZ={refProp:"ref",popupType:"dialog",shouldOverrideDefaultTargetId:!0},RE=i.forwardRef((e,t)=>{const n=Nn("PopoverTarget",iZ,e),{children:r,refProp:o,popupType:s,shouldOverrideDefaultTargetId:l}=n,c=lZ(n,["children","refProp","popupType","shouldOverrideDefaultTargetId"]);if(!aP(r))throw new Error(EE.children);const d=c,f=ME(),m=df(f.reference,r.ref,t),h=f.withRoles?{"aria-haspopup":s,"aria-expanded":f.opened,"aria-controls":f.getDropdownId(),id:l?f.getTargetId():r.props.id}:{};return i.cloneElement(r,zp(aZ(zp(zp(zp({},d),h),f.targetProps),{className:iP(f.targetProps.className,d.className,r.props.className),[o]:m}),f.controlled?null:{onClick:f.onToggle}))});RE.displayName="@mantine/core/PopoverTarget";var cZ=gr((e,{radius:t,shadow:n})=>({dropdown:{position:"absolute",backgroundColor:e.white,background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,padding:`${e.spacing.sm} ${e.spacing.md}`,boxShadow:e.shadows[n]||n||"none",borderRadius:e.fn.radius(t),"&:focus":{outline:0}},arrow:{backgroundColor:"inherit",border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,zIndex:1}}));const uZ=cZ;var dZ=Object.defineProperty,Dk=Object.getOwnPropertySymbols,fZ=Object.prototype.hasOwnProperty,pZ=Object.prototype.propertyIsEnumerable,Rk=(e,t,n)=>t in e?dZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wi=(e,t)=>{for(var n in t||(t={}))fZ.call(t,n)&&Rk(e,n,t[n]);if(Dk)for(var n of Dk(t))pZ.call(t,n)&&Rk(e,n,t[n]);return e};const Ak={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function mZ({transition:e,state:t,duration:n,timingFunction:r}){const o={transitionDuration:`${n}ms`,transitionTimingFunction:r};return typeof e=="string"?e in Dp?Wi(Wi(Wi({transitionProperty:Dp[e].transitionProperty},o),Dp[e].common),Dp[e][Ak[t]]):null:Wi(Wi(Wi({transitionProperty:e.transitionProperty},o),e.common),e[Ak[t]])}function hZ({duration:e,exitDuration:t,timingFunction:n,mounted:r,onEnter:o,onExit:s,onEntered:l,onExited:c}){const d=wa(),f=hP(),m=d.respectReducedMotion?f:!1,[h,g]=i.useState(m?0:e),[b,y]=i.useState(r?"entered":"exited"),x=i.useRef(-1),w=S=>{const j=S?o:s,_=S?l:c;y(S?"pre-entering":"pre-exiting"),window.clearTimeout(x.current);const I=m?0:S?e:t;if(g(I),I===0)typeof j=="function"&&j(),typeof _=="function"&&_(),y(S?"entered":"exited");else{const E=window.setTimeout(()=>{typeof j=="function"&&j(),y(S?"entering":"exiting")},10);x.current=window.setTimeout(()=>{window.clearTimeout(E),typeof _=="function"&&_(),y(S?"entered":"exited")},I)}};return os(()=>{w(r)},[r]),i.useEffect(()=>()=>window.clearTimeout(x.current),[]),{transitionDuration:h,transitionStatus:b,transitionTimingFunction:n||d.transitionTimingFunction}}function AE({keepMounted:e,transition:t,duration:n=250,exitDuration:r=n,mounted:o,children:s,timingFunction:l,onExit:c,onEntered:d,onEnter:f,onExited:m}){const{transitionDuration:h,transitionStatus:g,transitionTimingFunction:b}=hZ({mounted:o,exitDuration:r,duration:n,timingFunction:l,onExit:c,onEntered:d,onEnter:f,onExited:m});return h===0?o?B.createElement(B.Fragment,null,s({})):e?s({display:"none"}):null:g==="exited"?e?s({display:"none"}):null:B.createElement(B.Fragment,null,s(mZ({transition:t,duration:h,state:g,timingFunction:b})))}AE.displayName="@mantine/core/Transition";function TE({children:e,active:t=!0,refProp:n="ref"}){const r=sq(t),o=df(r,e==null?void 0:e.ref);return aP(e)?i.cloneElement(e,{[n]:o}):e}TE.displayName="@mantine/core/FocusTrap";var gZ=Object.defineProperty,vZ=Object.defineProperties,bZ=Object.getOwnPropertyDescriptors,Tk=Object.getOwnPropertySymbols,xZ=Object.prototype.hasOwnProperty,yZ=Object.prototype.propertyIsEnumerable,Nk=(e,t,n)=>t in e?gZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,za=(e,t)=>{for(var n in t||(t={}))xZ.call(t,n)&&Nk(e,n,t[n]);if(Tk)for(var n of Tk(t))yZ.call(t,n)&&Nk(e,n,t[n]);return e},Bp=(e,t)=>vZ(e,bZ(t));function $k(e,t,n,r){return e==="center"||r==="center"?{top:t}:e==="end"?{bottom:n}:e==="start"?{top:n}:{}}function Lk(e,t,n,r,o){return e==="center"||r==="center"?{left:t}:e==="end"?{[o==="ltr"?"right":"left"]:n}:e==="start"?{[o==="ltr"?"left":"right"]:n}:{}}const CZ={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function wZ({position:e,arrowSize:t,arrowOffset:n,arrowRadius:r,arrowPosition:o,arrowX:s,arrowY:l,dir:c}){const[d,f="center"]=e.split("-"),m={width:Ae(t),height:Ae(t),transform:"rotate(45deg)",position:"absolute",[CZ[d]]:Ae(r)},h=Ae(-t/2);return d==="left"?Bp(za(za({},m),$k(f,l,n,o)),{right:h,borderLeftColor:"transparent",borderBottomColor:"transparent"}):d==="right"?Bp(za(za({},m),$k(f,l,n,o)),{left:h,borderRightColor:"transparent",borderTopColor:"transparent"}):d==="top"?Bp(za(za({},m),Lk(f,s,n,o,c)),{bottom:h,borderTopColor:"transparent",borderLeftColor:"transparent"}):d==="bottom"?Bp(za(za({},m),Lk(f,s,n,o,c)),{top:h,borderBottomColor:"transparent",borderRightColor:"transparent"}):{}}var SZ=Object.defineProperty,kZ=Object.defineProperties,jZ=Object.getOwnPropertyDescriptors,ih=Object.getOwnPropertySymbols,NE=Object.prototype.hasOwnProperty,$E=Object.prototype.propertyIsEnumerable,Fk=(e,t,n)=>t in e?SZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_Z=(e,t)=>{for(var n in t||(t={}))NE.call(t,n)&&Fk(e,n,t[n]);if(ih)for(var n of ih(t))$E.call(t,n)&&Fk(e,n,t[n]);return e},IZ=(e,t)=>kZ(e,jZ(t)),PZ=(e,t)=>{var n={};for(var r in e)NE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ih)for(var r of ih(e))t.indexOf(r)<0&&$E.call(e,r)&&(n[r]=e[r]);return n};const LE=i.forwardRef((e,t)=>{var n=e,{position:r,arrowSize:o,arrowOffset:s,arrowRadius:l,arrowPosition:c,visible:d,arrowX:f,arrowY:m}=n,h=PZ(n,["position","arrowSize","arrowOffset","arrowRadius","arrowPosition","visible","arrowX","arrowY"]);const g=wa();return d?B.createElement("div",IZ(_Z({},h),{ref:t,style:wZ({position:r,arrowSize:o,arrowOffset:s,arrowRadius:l,arrowPosition:c,dir:g.dir,arrowX:f,arrowY:m})})):null});LE.displayName="@mantine/core/FloatingArrow";var EZ=Object.defineProperty,MZ=Object.defineProperties,OZ=Object.getOwnPropertyDescriptors,ch=Object.getOwnPropertySymbols,FE=Object.prototype.hasOwnProperty,zE=Object.prototype.propertyIsEnumerable,zk=(e,t,n)=>t in e?EZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vi=(e,t)=>{for(var n in t||(t={}))FE.call(t,n)&&zk(e,n,t[n]);if(ch)for(var n of ch(t))zE.call(t,n)&&zk(e,n,t[n]);return e},Hp=(e,t)=>MZ(e,OZ(t)),DZ=(e,t)=>{var n={};for(var r in e)FE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ch)for(var r of ch(e))t.indexOf(r)<0&&zE.call(e,r)&&(n[r]=e[r]);return n};const RZ={};function BE(e){var t;const n=Nn("PopoverDropdown",RZ,e),{style:r,className:o,children:s,onKeyDownCapture:l}=n,c=DZ(n,["style","className","children","onKeyDownCapture"]),d=ME(),{classes:f,cx:m}=uZ({radius:d.radius,shadow:d.shadow},{name:d.__staticSelector,classNames:d.classNames,styles:d.styles,unstyled:d.unstyled,variant:d.variant}),h=ZK({opened:d.opened,shouldReturnFocus:d.returnFocus}),g=d.withRoles?{"aria-labelledby":d.getTargetId(),id:d.getDropdownId(),role:"dialog"}:{};return d.disabled?null:B.createElement(zP,Hp(Vi({},d.portalProps),{withinPortal:d.withinPortal}),B.createElement(AE,Hp(Vi({mounted:d.opened},d.transitionProps),{transition:d.transitionProps.transition||"fade",duration:(t=d.transitionProps.duration)!=null?t:150,keepMounted:d.keepMounted,exitDuration:typeof d.transitionProps.exitDuration=="number"?d.transitionProps.exitDuration:d.transitionProps.duration}),b=>{var y,x;return B.createElement(TE,{active:d.trapFocus},B.createElement(Vr,Vi(Hp(Vi({},g),{tabIndex:-1,ref:d.floating,style:Hp(Vi(Vi({},r),b),{zIndex:d.zIndex,top:(y=d.y)!=null?y:0,left:(x=d.x)!=null?x:0,width:d.width==="target"?void 0:Ae(d.width)}),className:m(f.dropdown,o),onKeyDownCapture:IK(d.onClose,{active:d.closeOnEscape,onTrigger:h,onKeyDown:l}),"data-position":d.placement}),c),s,B.createElement(LE,{ref:d.arrowRef,arrowX:d.arrowX,arrowY:d.arrowY,visible:d.withArrow,position:d.placement,arrowSize:d.arrowSize,arrowRadius:d.arrowRadius,arrowOffset:d.arrowOffset,arrowPosition:d.arrowPosition,className:f.arrow})))}))}BE.displayName="@mantine/core/PopoverDropdown";function AZ(e,t){if(e==="rtl"&&(t.includes("right")||t.includes("left"))){const[n,r]=t.split("-"),o=n==="right"?"left":"right";return r===void 0?o:`${o}-${r}`}return t}var Bk=Object.getOwnPropertySymbols,TZ=Object.prototype.hasOwnProperty,NZ=Object.prototype.propertyIsEnumerable,$Z=(e,t)=>{var n={};for(var r in e)TZ.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bk)for(var r of Bk(e))t.indexOf(r)<0&&NZ.call(e,r)&&(n[r]=e[r]);return n};const LZ={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!1,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,clickOutsideEvents:["mousedown","touchstart"],zIndex:Oy("popover"),__staticSelector:"Popover",width:"max-content"};function nu(e){var t,n,r,o,s,l;const c=i.useRef(null),d=Nn("Popover",LZ,e),{children:f,position:m,offset:h,onPositionChange:g,positionDependencies:b,opened:y,transitionProps:x,width:w,middlewares:S,withArrow:j,arrowSize:_,arrowOffset:I,arrowRadius:E,arrowPosition:M,unstyled:D,classNames:R,styles:N,closeOnClickOutside:O,withinPortal:T,portalProps:U,closeOnEscape:G,clickOutsideEvents:q,trapFocus:Y,onClose:Q,onOpen:V,onChange:se,zIndex:ee,radius:le,shadow:ae,id:ce,defaultOpened:J,__staticSelector:re,withRoles:A,disabled:L,returnFocus:K,variant:ne,keepMounted:z}=d,oe=$Z(d,["children","position","offset","onPositionChange","positionDependencies","opened","transitionProps","width","middlewares","withArrow","arrowSize","arrowOffset","arrowRadius","arrowPosition","unstyled","classNames","styles","closeOnClickOutside","withinPortal","portalProps","closeOnEscape","clickOutsideEvents","trapFocus","onClose","onOpen","onChange","zIndex","radius","shadow","id","defaultOpened","__staticSelector","withRoles","disabled","returnFocus","variant","keepMounted"]),[X,Z]=i.useState(null),[me,ve]=i.useState(null),de=Ry(ce),ke=wa(),we=tZ({middlewares:S,width:w,position:AZ(ke.dir,m),offset:typeof h=="number"?h+(j?_/2:0):h,arrowRef:c,arrowOffset:I,onPositionChange:g,positionDependencies:b,opened:y,defaultOpened:J,onChange:se,onOpen:V,onClose:Q});qK(()=>we.opened&&O&&we.onClose(),q,[X,me]);const Re=i.useCallback($e=>{Z($e),we.floating.reference($e)},[we.floating.reference]),Qe=i.useCallback($e=>{ve($e),we.floating.floating($e)},[we.floating.floating]);return B.createElement(nZ,{value:{returnFocus:K,disabled:L,controlled:we.controlled,reference:Re,floating:Qe,x:we.floating.x,y:we.floating.y,arrowX:(r=(n=(t=we.floating)==null?void 0:t.middlewareData)==null?void 0:n.arrow)==null?void 0:r.x,arrowY:(l=(s=(o=we.floating)==null?void 0:o.middlewareData)==null?void 0:s.arrow)==null?void 0:l.y,opened:we.opened,arrowRef:c,transitionProps:x,width:w,withArrow:j,arrowSize:_,arrowOffset:I,arrowRadius:E,arrowPosition:M,placement:we.floating.placement,trapFocus:Y,withinPortal:T,portalProps:U,zIndex:ee,radius:le,shadow:ae,closeOnEscape:G,onClose:we.onClose,onToggle:we.onToggle,getTargetId:()=>`${de}-target`,getDropdownId:()=>`${de}-dropdown`,withRoles:A,targetProps:oe,__staticSelector:re,classNames:R,styles:N,unstyled:D,variant:ne,keepMounted:z}},f)}nu.Target=RE;nu.Dropdown=BE;nu.displayName="@mantine/core/Popover";var FZ=Object.defineProperty,uh=Object.getOwnPropertySymbols,HE=Object.prototype.hasOwnProperty,WE=Object.prototype.propertyIsEnumerable,Hk=(e,t,n)=>t in e?FZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zZ=(e,t)=>{for(var n in t||(t={}))HE.call(t,n)&&Hk(e,n,t[n]);if(uh)for(var n of uh(t))WE.call(t,n)&&Hk(e,n,t[n]);return e},BZ=(e,t)=>{var n={};for(var r in e)HE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&uh)for(var r of uh(e))t.indexOf(r)<0&&WE.call(e,r)&&(n[r]=e[r]);return n};function HZ(e){var t=e,{children:n,component:r="div",maxHeight:o=220,direction:s="column",id:l,innerRef:c,__staticSelector:d,styles:f,classNames:m,unstyled:h}=t,g=BZ(t,["children","component","maxHeight","direction","id","innerRef","__staticSelector","styles","classNames","unstyled"]);const{classes:b}=sY(null,{name:d,styles:f,classNames:m,unstyled:h});return B.createElement(nu.Dropdown,zZ({p:0,onMouseDown:y=>y.preventDefault()},g),B.createElement("div",{style:{maxHeight:Ae(o),display:"flex"}},B.createElement(Vr,{component:r||"div",id:`${l}-items`,"aria-labelledby":`${l}-label`,role:"listbox",onMouseDown:y=>y.preventDefault(),style:{flex:1,overflowY:r!==Rg?"auto":void 0},"data-combobox-popover":!0,tabIndex:-1,ref:c},B.createElement("div",{className:b.itemsWrapper,style:{flexDirection:s}},n))))}function el({opened:e,transitionProps:t={transition:"fade",duration:0},shadow:n,withinPortal:r,portalProps:o,children:s,__staticSelector:l,onDirectionChange:c,switchDirectionOnFlip:d,zIndex:f,dropdownPosition:m,positionDependencies:h=[],classNames:g,styles:b,unstyled:y,readOnly:x,variant:w}){return B.createElement(nu,{unstyled:y,classNames:g,styles:b,width:"target",withRoles:!1,opened:e,middlewares:{flip:m==="flip",shift:!1},position:m==="flip"?"bottom":m,positionDependencies:h,zIndex:f,__staticSelector:l,withinPortal:r,portalProps:o,transitionProps:t,shadow:n,disabled:x,onPositionChange:S=>d&&(c==null?void 0:c(S==="top"?"column-reverse":"column")),variant:w},s)}el.Target=nu.Target;el.Dropdown=HZ;var WZ=Object.defineProperty,VZ=Object.defineProperties,UZ=Object.getOwnPropertyDescriptors,dh=Object.getOwnPropertySymbols,VE=Object.prototype.hasOwnProperty,UE=Object.prototype.propertyIsEnumerable,Wk=(e,t,n)=>t in e?WZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wp=(e,t)=>{for(var n in t||(t={}))VE.call(t,n)&&Wk(e,n,t[n]);if(dh)for(var n of dh(t))UE.call(t,n)&&Wk(e,n,t[n]);return e},GZ=(e,t)=>VZ(e,UZ(t)),KZ=(e,t)=>{var n={};for(var r in e)VE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&dh)for(var r of dh(e))t.indexOf(r)<0&&UE.call(e,r)&&(n[r]=e[r]);return n};function GE(e,t,n){const r=Nn(e,t,n),{label:o,description:s,error:l,required:c,classNames:d,styles:f,className:m,unstyled:h,__staticSelector:g,sx:b,errorProps:y,labelProps:x,descriptionProps:w,wrapperProps:S,id:j,size:_,style:I,inputContainer:E,inputWrapperOrder:M,withAsterisk:D,variant:R}=r,N=KZ(r,["label","description","error","required","classNames","styles","className","unstyled","__staticSelector","sx","errorProps","labelProps","descriptionProps","wrapperProps","id","size","style","inputContainer","inputWrapperOrder","withAsterisk","variant"]),O=Ry(j),{systemStyles:T,rest:U}=Eg(N),G=Wp({label:o,description:s,error:l,required:c,classNames:d,className:m,__staticSelector:g,sx:b,errorProps:y,labelProps:x,descriptionProps:w,unstyled:h,styles:f,id:O,size:_,style:I,inputContainer:E,inputWrapperOrder:M,withAsterisk:D,variant:R},S);return GZ(Wp({},U),{classNames:d,styles:f,unstyled:h,wrapperProps:Wp(Wp({},G),T),inputProps:{required:c,classNames:d,styles:f,unstyled:h,id:O,size:_,__staticSelector:g,error:l,variant:R}})}var qZ=gr((e,t,{size:n})=>({label:{display:"inline-block",fontSize:pt({size:n,sizes:e.fontSizes}),fontWeight:500,color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[9],wordBreak:"break-word",cursor:"default",WebkitTapHighlightColor:"transparent"},required:{color:e.fn.variant({variant:"filled",color:"red"}).background}}));const XZ=qZ;var QZ=Object.defineProperty,fh=Object.getOwnPropertySymbols,KE=Object.prototype.hasOwnProperty,qE=Object.prototype.propertyIsEnumerable,Vk=(e,t,n)=>t in e?QZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,YZ=(e,t)=>{for(var n in t||(t={}))KE.call(t,n)&&Vk(e,n,t[n]);if(fh)for(var n of fh(t))qE.call(t,n)&&Vk(e,n,t[n]);return e},ZZ=(e,t)=>{var n={};for(var r in e)KE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&fh)for(var r of fh(e))t.indexOf(r)<0&&qE.call(e,r)&&(n[r]=e[r]);return n};const JZ={labelElement:"label",size:"sm"},Uy=i.forwardRef((e,t)=>{const n=Nn("InputLabel",JZ,e),{labelElement:r,children:o,required:s,size:l,classNames:c,styles:d,unstyled:f,className:m,htmlFor:h,__staticSelector:g,variant:b,onMouseDown:y}=n,x=ZZ(n,["labelElement","children","required","size","classNames","styles","unstyled","className","htmlFor","__staticSelector","variant","onMouseDown"]),{classes:w,cx:S}=XZ(null,{name:["InputWrapper",g],classNames:c,styles:d,unstyled:f,variant:b,size:l});return B.createElement(Vr,YZ({component:r,ref:t,className:S(w.label,m),htmlFor:r==="label"?h:void 0,onMouseDown:j=>{y==null||y(j),!j.defaultPrevented&&j.detail>1&&j.preventDefault()}},x),o,s&&B.createElement("span",{className:w.required,"aria-hidden":!0}," *"))});Uy.displayName="@mantine/core/InputLabel";var eJ=gr((e,t,{size:n})=>({error:{wordBreak:"break-word",color:e.fn.variant({variant:"filled",color:"red"}).background,fontSize:`calc(${pt({size:n,sizes:e.fontSizes})} - ${Ae(2)})`,lineHeight:1.2,display:"block"}}));const tJ=eJ;var nJ=Object.defineProperty,ph=Object.getOwnPropertySymbols,XE=Object.prototype.hasOwnProperty,QE=Object.prototype.propertyIsEnumerable,Uk=(e,t,n)=>t in e?nJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rJ=(e,t)=>{for(var n in t||(t={}))XE.call(t,n)&&Uk(e,n,t[n]);if(ph)for(var n of ph(t))QE.call(t,n)&&Uk(e,n,t[n]);return e},oJ=(e,t)=>{var n={};for(var r in e)XE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ph)for(var r of ph(e))t.indexOf(r)<0&&QE.call(e,r)&&(n[r]=e[r]);return n};const sJ={size:"sm"},Gy=i.forwardRef((e,t)=>{const n=Nn("InputError",sJ,e),{children:r,className:o,classNames:s,styles:l,unstyled:c,size:d,__staticSelector:f,variant:m}=n,h=oJ(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:g,cx:b}=tJ(null,{name:["InputWrapper",f],classNames:s,styles:l,unstyled:c,variant:m,size:d});return B.createElement(Oc,rJ({className:b(g.error,o),ref:t},h),r)});Gy.displayName="@mantine/core/InputError";var aJ=gr((e,t,{size:n})=>({description:{wordBreak:"break-word",color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],fontSize:`calc(${pt({size:n,sizes:e.fontSizes})} - ${Ae(2)})`,lineHeight:1.2,display:"block"}}));const lJ=aJ;var iJ=Object.defineProperty,mh=Object.getOwnPropertySymbols,YE=Object.prototype.hasOwnProperty,ZE=Object.prototype.propertyIsEnumerable,Gk=(e,t,n)=>t in e?iJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,cJ=(e,t)=>{for(var n in t||(t={}))YE.call(t,n)&&Gk(e,n,t[n]);if(mh)for(var n of mh(t))ZE.call(t,n)&&Gk(e,n,t[n]);return e},uJ=(e,t)=>{var n={};for(var r in e)YE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&mh)for(var r of mh(e))t.indexOf(r)<0&&ZE.call(e,r)&&(n[r]=e[r]);return n};const dJ={size:"sm"},Ky=i.forwardRef((e,t)=>{const n=Nn("InputDescription",dJ,e),{children:r,className:o,classNames:s,styles:l,unstyled:c,size:d,__staticSelector:f,variant:m}=n,h=uJ(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:g,cx:b}=lJ(null,{name:["InputWrapper",f],classNames:s,styles:l,unstyled:c,variant:m,size:d});return B.createElement(Oc,cJ({color:"dimmed",className:b(g.description,o),ref:t,unstyled:c},h),r)});Ky.displayName="@mantine/core/InputDescription";const JE=i.createContext({offsetBottom:!1,offsetTop:!1,describedBy:void 0}),fJ=JE.Provider,pJ=()=>i.useContext(JE);function mJ(e,{hasDescription:t,hasError:n}){const r=e.findIndex(d=>d==="input"),o=e[r-1],s=e[r+1];return{offsetBottom:t&&s==="description"||n&&s==="error",offsetTop:t&&o==="description"||n&&o==="error"}}var hJ=Object.defineProperty,gJ=Object.defineProperties,vJ=Object.getOwnPropertyDescriptors,Kk=Object.getOwnPropertySymbols,bJ=Object.prototype.hasOwnProperty,xJ=Object.prototype.propertyIsEnumerable,qk=(e,t,n)=>t in e?hJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,yJ=(e,t)=>{for(var n in t||(t={}))bJ.call(t,n)&&qk(e,n,t[n]);if(Kk)for(var n of Kk(t))xJ.call(t,n)&&qk(e,n,t[n]);return e},CJ=(e,t)=>gJ(e,vJ(t)),wJ=gr(e=>({root:CJ(yJ({},e.fn.fontStyles()),{lineHeight:e.lineHeight})}));const SJ=wJ;var kJ=Object.defineProperty,jJ=Object.defineProperties,_J=Object.getOwnPropertyDescriptors,hh=Object.getOwnPropertySymbols,eM=Object.prototype.hasOwnProperty,tM=Object.prototype.propertyIsEnumerable,Xk=(e,t,n)=>t in e?kJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ba=(e,t)=>{for(var n in t||(t={}))eM.call(t,n)&&Xk(e,n,t[n]);if(hh)for(var n of hh(t))tM.call(t,n)&&Xk(e,n,t[n]);return e},Qk=(e,t)=>jJ(e,_J(t)),IJ=(e,t)=>{var n={};for(var r in e)eM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&hh)for(var r of hh(e))t.indexOf(r)<0&&tM.call(e,r)&&(n[r]=e[r]);return n};const PJ={labelElement:"label",size:"sm",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},nM=i.forwardRef((e,t)=>{const n=Nn("InputWrapper",PJ,e),{className:r,label:o,children:s,required:l,id:c,error:d,description:f,labelElement:m,labelProps:h,descriptionProps:g,errorProps:b,classNames:y,styles:x,size:w,inputContainer:S,__staticSelector:j,unstyled:_,inputWrapperOrder:I,withAsterisk:E,variant:M}=n,D=IJ(n,["className","label","children","required","id","error","description","labelElement","labelProps","descriptionProps","errorProps","classNames","styles","size","inputContainer","__staticSelector","unstyled","inputWrapperOrder","withAsterisk","variant"]),{classes:R,cx:N}=SJ(null,{classNames:y,styles:x,name:["InputWrapper",j],unstyled:_,variant:M,size:w}),O={classNames:y,styles:x,unstyled:_,size:w,variant:M,__staticSelector:j},T=typeof E=="boolean"?E:l,U=c?`${c}-error`:b==null?void 0:b.id,G=c?`${c}-description`:g==null?void 0:g.id,Y=`${!!d&&typeof d!="boolean"?U:""} ${f?G:""}`,Q=Y.trim().length>0?Y.trim():void 0,V=o&&B.createElement(Uy,Ba(Ba({key:"label",labelElement:m,id:c?`${c}-label`:void 0,htmlFor:c,required:T},O),h),o),se=f&&B.createElement(Ky,Qk(Ba(Ba({key:"description"},g),O),{size:(g==null?void 0:g.size)||O.size,id:(g==null?void 0:g.id)||G}),f),ee=B.createElement(i.Fragment,{key:"input"},S(s)),le=typeof d!="boolean"&&d&&B.createElement(Gy,Qk(Ba(Ba({},b),O),{size:(b==null?void 0:b.size)||O.size,key:"error",id:(b==null?void 0:b.id)||U}),d),ae=I.map(ce=>{switch(ce){case"label":return V;case"input":return ee;case"description":return se;case"error":return le;default:return null}});return B.createElement(fJ,{value:Ba({describedBy:Q},mJ(I,{hasDescription:!!se,hasError:!!le}))},B.createElement(Vr,Ba({className:N(R.root,r),ref:t},D),ae))});nM.displayName="@mantine/core/InputWrapper";var EJ=Object.defineProperty,gh=Object.getOwnPropertySymbols,rM=Object.prototype.hasOwnProperty,oM=Object.prototype.propertyIsEnumerable,Yk=(e,t,n)=>t in e?EJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,MJ=(e,t)=>{for(var n in t||(t={}))rM.call(t,n)&&Yk(e,n,t[n]);if(gh)for(var n of gh(t))oM.call(t,n)&&Yk(e,n,t[n]);return e},OJ=(e,t)=>{var n={};for(var r in e)rM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&gh)for(var r of gh(e))t.indexOf(r)<0&&oM.call(e,r)&&(n[r]=e[r]);return n};const DJ={},sM=i.forwardRef((e,t)=>{const n=Nn("InputPlaceholder",DJ,e),{sx:r}=n,o=OJ(n,["sx"]);return B.createElement(Vr,MJ({component:"span",sx:[s=>s.fn.placeholderStyles(),...oP(r)],ref:t},o))});sM.displayName="@mantine/core/InputPlaceholder";var RJ=Object.defineProperty,AJ=Object.defineProperties,TJ=Object.getOwnPropertyDescriptors,Zk=Object.getOwnPropertySymbols,NJ=Object.prototype.hasOwnProperty,$J=Object.prototype.propertyIsEnumerable,Jk=(e,t,n)=>t in e?RJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vp=(e,t)=>{for(var n in t||(t={}))NJ.call(t,n)&&Jk(e,n,t[n]);if(Zk)for(var n of Zk(t))$J.call(t,n)&&Jk(e,n,t[n]);return e},s1=(e,t)=>AJ(e,TJ(t));const vo={xs:Ae(30),sm:Ae(36),md:Ae(42),lg:Ae(50),xl:Ae(60)},LJ=["default","filled","unstyled"];function FJ({theme:e,variant:t}){return LJ.includes(t)?t==="default"?{border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.white,transition:"border-color 100ms ease","&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:t==="filled"?{border:`${Ae(1)} solid transparent`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[1],"&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:{borderWidth:0,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,backgroundColor:"transparent",minHeight:Ae(28),outline:0,"&:focus, &:focus-within":{outline:"none",borderColor:"transparent"},"&:disabled":{backgroundColor:"transparent","&:focus, &:focus-within":{outline:"none",borderColor:"transparent"}}}:null}var zJ=gr((e,{multiline:t,radius:n,invalid:r,rightSectionWidth:o,withRightSection:s,iconWidth:l,offsetBottom:c,offsetTop:d,pointer:f},{variant:m,size:h})=>{const g=e.fn.variant({variant:"filled",color:"red"}).background,b=m==="default"||m==="filled"?{minHeight:pt({size:h,sizes:vo}),paddingLeft:`calc(${pt({size:h,sizes:vo})} / 3)`,paddingRight:s?o||pt({size:h,sizes:vo}):`calc(${pt({size:h,sizes:vo})} / 3)`,borderRadius:e.fn.radius(n)}:m==="unstyled"&&s?{paddingRight:o||pt({size:h,sizes:vo})}:null;return{wrapper:{position:"relative",marginTop:d?`calc(${e.spacing.xs} / 2)`:void 0,marginBottom:c?`calc(${e.spacing.xs} / 2)`:void 0,"&:has(input:disabled)":{"& .mantine-Input-rightSection":{display:"none"}}},input:s1(Vp(Vp(s1(Vp({},e.fn.fontStyles()),{height:t?m==="unstyled"?void 0:"auto":pt({size:h,sizes:vo}),WebkitTapHighlightColor:"transparent",lineHeight:t?e.lineHeight:`calc(${pt({size:h,sizes:vo})} - ${Ae(2)})`,appearance:"none",resize:"none",boxSizing:"border-box",fontSize:pt({size:h,sizes:e.fontSizes}),width:"100%",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,display:"block",textAlign:"left",cursor:f?"pointer":void 0}),FJ({theme:e,variant:m})),b),{"&:disabled, &[data-disabled]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,cursor:"not-allowed",pointerEvents:"none","&::placeholder":{color:e.colors.dark[2]}},"&[data-invalid]":{color:g,borderColor:g,"&::placeholder":{opacity:1,color:g}},"&[data-with-icon]":{paddingLeft:typeof l=="number"?Ae(l):pt({size:h,sizes:vo})},"&::placeholder":s1(Vp({},e.fn.placeholderStyles()),{opacity:1}),"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button, &::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{appearance:"none"},"&[type=number]":{MozAppearance:"textfield"}}),icon:{pointerEvents:"none",position:"absolute",zIndex:1,left:0,top:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",width:l?Ae(l):pt({size:h,sizes:vo}),color:r?e.colors.red[e.colorScheme==="dark"?6:7]:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[5]},rightSection:{position:"absolute",top:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",width:o||pt({size:h,sizes:vo})}}});const BJ=zJ;var HJ=Object.defineProperty,WJ=Object.defineProperties,VJ=Object.getOwnPropertyDescriptors,vh=Object.getOwnPropertySymbols,aM=Object.prototype.hasOwnProperty,lM=Object.prototype.propertyIsEnumerable,ej=(e,t,n)=>t in e?HJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Up=(e,t)=>{for(var n in t||(t={}))aM.call(t,n)&&ej(e,n,t[n]);if(vh)for(var n of vh(t))lM.call(t,n)&&ej(e,n,t[n]);return e},tj=(e,t)=>WJ(e,VJ(t)),UJ=(e,t)=>{var n={};for(var r in e)aM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&vh)for(var r of vh(e))t.indexOf(r)<0&&lM.call(e,r)&&(n[r]=e[r]);return n};const GJ={size:"sm",variant:"default"},pi=i.forwardRef((e,t)=>{const n=Nn("Input",GJ,e),{className:r,error:o,required:s,disabled:l,variant:c,icon:d,style:f,rightSectionWidth:m,iconWidth:h,rightSection:g,rightSectionProps:b,radius:y,size:x,wrapperProps:w,classNames:S,styles:j,__staticSelector:_,multiline:I,sx:E,unstyled:M,pointer:D}=n,R=UJ(n,["className","error","required","disabled","variant","icon","style","rightSectionWidth","iconWidth","rightSection","rightSectionProps","radius","size","wrapperProps","classNames","styles","__staticSelector","multiline","sx","unstyled","pointer"]),{offsetBottom:N,offsetTop:O,describedBy:T}=pJ(),{classes:U,cx:G}=BJ({radius:y,multiline:I,invalid:!!o,rightSectionWidth:m?Ae(m):void 0,iconWidth:h,withRightSection:!!g,offsetBottom:N,offsetTop:O,pointer:D},{classNames:S,styles:j,name:["Input",_],unstyled:M,variant:c,size:x}),{systemStyles:q,rest:Y}=Eg(R);return B.createElement(Vr,Up(Up({className:G(U.wrapper,r),sx:E,style:f},q),w),d&&B.createElement("div",{className:U.icon},d),B.createElement(Vr,tj(Up({component:"input"},Y),{ref:t,required:s,"aria-invalid":!!o,"aria-describedby":T,disabled:l,"data-disabled":l||void 0,"data-with-icon":!!d||void 0,"data-invalid":!!o||void 0,className:U.input})),g&&B.createElement("div",tj(Up({},b),{className:U.rightSection}),g))});pi.displayName="@mantine/core/Input";pi.Wrapper=nM;pi.Label=Uy;pi.Description=Ky;pi.Error=Gy;pi.Placeholder=sM;const Tc=pi;var KJ=Object.defineProperty,bh=Object.getOwnPropertySymbols,iM=Object.prototype.hasOwnProperty,cM=Object.prototype.propertyIsEnumerable,nj=(e,t,n)=>t in e?KJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rj=(e,t)=>{for(var n in t||(t={}))iM.call(t,n)&&nj(e,n,t[n]);if(bh)for(var n of bh(t))cM.call(t,n)&&nj(e,n,t[n]);return e},qJ=(e,t)=>{var n={};for(var r in e)iM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&bh)for(var r of bh(e))t.indexOf(r)<0&&cM.call(e,r)&&(n[r]=e[r]);return n};const XJ={multiple:!1},uM=i.forwardRef((e,t)=>{const n=Nn("FileButton",XJ,e),{onChange:r,children:o,multiple:s,accept:l,name:c,form:d,resetRef:f,disabled:m,capture:h,inputProps:g}=n,b=qJ(n,["onChange","children","multiple","accept","name","form","resetRef","disabled","capture","inputProps"]),y=i.useRef(),x=()=>{!m&&y.current.click()},w=j=>{r(s?Array.from(j.currentTarget.files):j.currentTarget.files[0]||null)};return mP(f,()=>{y.current.value=""}),B.createElement(B.Fragment,null,o(rj({onClick:x},b)),B.createElement("input",rj({style:{display:"none"},type:"file",accept:l,multiple:s,onChange:w,ref:df(t,y),name:c,form:d,capture:h},g)))});uM.displayName="@mantine/core/FileButton";const dM={xs:Ae(16),sm:Ae(22),md:Ae(26),lg:Ae(30),xl:Ae(36)},QJ={xs:Ae(10),sm:Ae(12),md:Ae(14),lg:Ae(16),xl:Ae(18)};var YJ=gr((e,{disabled:t,radius:n,readOnly:r},{size:o,variant:s})=>({defaultValue:{display:"flex",alignItems:"center",backgroundColor:t?e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3]:e.colorScheme==="dark"?e.colors.dark[7]:s==="filled"?e.white:e.colors.gray[1],color:t?e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],height:pt({size:o,sizes:dM}),paddingLeft:`calc(${pt({size:o,sizes:e.spacing})} / 1.5)`,paddingRight:t||r?pt({size:o,sizes:e.spacing}):0,fontWeight:500,fontSize:pt({size:o,sizes:QJ}),borderRadius:pt({size:n,sizes:e.radius}),cursor:t?"not-allowed":"default",userSelect:"none",maxWidth:`calc(100% - ${Ae(10)})`},defaultValueRemove:{color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],marginLeft:`calc(${pt({size:o,sizes:e.spacing})} / 6)`},defaultValueLabel:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}));const ZJ=YJ;var JJ=Object.defineProperty,xh=Object.getOwnPropertySymbols,fM=Object.prototype.hasOwnProperty,pM=Object.prototype.propertyIsEnumerable,oj=(e,t,n)=>t in e?JJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,eee=(e,t)=>{for(var n in t||(t={}))fM.call(t,n)&&oj(e,n,t[n]);if(xh)for(var n of xh(t))pM.call(t,n)&&oj(e,n,t[n]);return e},tee=(e,t)=>{var n={};for(var r in e)fM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&xh)for(var r of xh(e))t.indexOf(r)<0&&pM.call(e,r)&&(n[r]=e[r]);return n};const nee={xs:16,sm:22,md:24,lg:26,xl:30};function mM(e){var t=e,{label:n,classNames:r,styles:o,className:s,onRemove:l,disabled:c,readOnly:d,size:f,radius:m="sm",variant:h,unstyled:g}=t,b=tee(t,["label","classNames","styles","className","onRemove","disabled","readOnly","size","radius","variant","unstyled"]);const{classes:y,cx:x}=ZJ({disabled:c,readOnly:d,radius:m},{name:"MultiSelect",classNames:r,styles:o,unstyled:g,size:f,variant:h});return B.createElement("div",eee({className:x(y.defaultValue,s)},b),B.createElement("span",{className:y.defaultValueLabel},n),!c&&!d&&B.createElement(KP,{"aria-hidden":!0,onMouseDown:l,size:nee[f],radius:2,color:"blue",variant:"transparent",iconSize:"70%",className:y.defaultValueRemove,tabIndex:-1,unstyled:g}))}mM.displayName="@mantine/core/MultiSelect/DefaultValue";function ree({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,disableSelectedItemFiltering:l}){if(!t&&s.length===0)return e;if(!t){const d=[];for(let f=0;fm===e[f].value&&!e[f].disabled))&&d.push(e[f]);return d}const c=[];for(let d=0;df===e[d].value&&!e[d].disabled),e[d])&&c.push(e[d]),!(c.length>=n));d+=1);return c}var oee=Object.defineProperty,yh=Object.getOwnPropertySymbols,hM=Object.prototype.hasOwnProperty,gM=Object.prototype.propertyIsEnumerable,sj=(e,t,n)=>t in e?oee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,aj=(e,t)=>{for(var n in t||(t={}))hM.call(t,n)&&sj(e,n,t[n]);if(yh)for(var n of yh(t))gM.call(t,n)&&sj(e,n,t[n]);return e},see=(e,t)=>{var n={};for(var r in e)hM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&yh)for(var r of yh(e))t.indexOf(r)<0&&gM.call(e,r)&&(n[r]=e[r]);return n};const aee={xs:Ae(14),sm:Ae(18),md:Ae(20),lg:Ae(24),xl:Ae(28)};function lee(e){var t=e,{size:n,error:r,style:o}=t,s=see(t,["size","error","style"]);const l=wa(),c=pt({size:n,sizes:aee});return B.createElement("svg",aj({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:aj({color:r?l.colors.red[6]:l.colors.gray[6],width:c,height:c},o),"data-chevron":!0},s),B.createElement("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}var iee=Object.defineProperty,cee=Object.defineProperties,uee=Object.getOwnPropertyDescriptors,lj=Object.getOwnPropertySymbols,dee=Object.prototype.hasOwnProperty,fee=Object.prototype.propertyIsEnumerable,ij=(e,t,n)=>t in e?iee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,pee=(e,t)=>{for(var n in t||(t={}))dee.call(t,n)&&ij(e,n,t[n]);if(lj)for(var n of lj(t))fee.call(t,n)&&ij(e,n,t[n]);return e},mee=(e,t)=>cee(e,uee(t));function vM({shouldClear:e,clearButtonProps:t,onClear:n,size:r,error:o}){return e?B.createElement(KP,mee(pee({},t),{variant:"transparent",onClick:n,size:r,onMouseDown:s=>s.preventDefault()})):B.createElement(lee,{error:o,size:r})}vM.displayName="@mantine/core/SelectRightSection";var hee=Object.defineProperty,gee=Object.defineProperties,vee=Object.getOwnPropertyDescriptors,Ch=Object.getOwnPropertySymbols,bM=Object.prototype.hasOwnProperty,xM=Object.prototype.propertyIsEnumerable,cj=(e,t,n)=>t in e?hee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,a1=(e,t)=>{for(var n in t||(t={}))bM.call(t,n)&&cj(e,n,t[n]);if(Ch)for(var n of Ch(t))xM.call(t,n)&&cj(e,n,t[n]);return e},uj=(e,t)=>gee(e,vee(t)),bee=(e,t)=>{var n={};for(var r in e)bM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ch)for(var r of Ch(e))t.indexOf(r)<0&&xM.call(e,r)&&(n[r]=e[r]);return n};function yM(e){var t=e,{styles:n,rightSection:r,rightSectionWidth:o,theme:s}=t,l=bee(t,["styles","rightSection","rightSectionWidth","theme"]);if(r)return{rightSection:r,rightSectionWidth:o,styles:n};const c=typeof n=="function"?n(s):n;return{rightSection:!l.readOnly&&!(l.disabled&&l.shouldClear)&&B.createElement(vM,a1({},l)),styles:uj(a1({},c),{rightSection:uj(a1({},c==null?void 0:c.rightSection),{pointerEvents:l.shouldClear?void 0:"none"})})}}var xee=Object.defineProperty,yee=Object.defineProperties,Cee=Object.getOwnPropertyDescriptors,dj=Object.getOwnPropertySymbols,wee=Object.prototype.hasOwnProperty,See=Object.prototype.propertyIsEnumerable,fj=(e,t,n)=>t in e?xee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,kee=(e,t)=>{for(var n in t||(t={}))wee.call(t,n)&&fj(e,n,t[n]);if(dj)for(var n of dj(t))See.call(t,n)&&fj(e,n,t[n]);return e},jee=(e,t)=>yee(e,Cee(t)),_ee=gr((e,{invalid:t},{size:n})=>({wrapper:{position:"relative","&:has(input:disabled)":{cursor:"not-allowed",pointerEvents:"none","& .mantine-MultiSelect-input":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,"&::placeholder":{color:e.colors.dark[2]}},"& .mantine-MultiSelect-defaultValue":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3],color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]}}},values:{minHeight:`calc(${pt({size:n,sizes:vo})} - ${Ae(2)})`,display:"flex",alignItems:"center",flexWrap:"wrap",marginLeft:`calc(-${e.spacing.xs} / 2)`,boxSizing:"border-box","&[data-clearable]":{marginRight:pt({size:n,sizes:vo})}},value:{margin:`calc(${e.spacing.xs} / 2 - ${Ae(2)}) calc(${e.spacing.xs} / 2)`},searchInput:jee(kee({},e.fn.fontStyles()),{flex:1,minWidth:Ae(60),backgroundColor:"transparent",border:0,outline:0,fontSize:pt({size:n,sizes:e.fontSizes}),padding:0,marginLeft:`calc(${e.spacing.xs} / 2)`,appearance:"none",color:"inherit",maxHeight:pt({size:n,sizes:dM}),"&::placeholder":{opacity:1,color:t?e.colors.red[e.fn.primaryShade()]:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]},"&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}),searchInputEmpty:{width:"100%"},searchInputInputHidden:{flex:0,width:0,minWidth:0,margin:0,overflow:"hidden"},searchInputPointer:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}},input:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}}));const Iee=_ee;var Pee=Object.defineProperty,Eee=Object.defineProperties,Mee=Object.getOwnPropertyDescriptors,wh=Object.getOwnPropertySymbols,CM=Object.prototype.hasOwnProperty,wM=Object.prototype.propertyIsEnumerable,pj=(e,t,n)=>t in e?Pee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ui=(e,t)=>{for(var n in t||(t={}))CM.call(t,n)&&pj(e,n,t[n]);if(wh)for(var n of wh(t))wM.call(t,n)&&pj(e,n,t[n]);return e},mj=(e,t)=>Eee(e,Mee(t)),Oee=(e,t)=>{var n={};for(var r in e)CM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&wh)for(var r of wh(e))t.indexOf(r)<0&&wM.call(e,r)&&(n[r]=e[r]);return n};function Dee(e,t,n){return t?!1:n.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function Ree(e,t){return!!e&&!t.some(n=>n.value.toLowerCase()===e.toLowerCase())}function hj(e,t){if(!Array.isArray(e))return;if(t.length===0)return[];const n=t.map(r=>typeof r=="object"?r.value:r);return e.filter(r=>n.includes(r))}const Aee={size:"sm",valueComponent:mM,itemComponent:Ty,transitionProps:{transition:"fade",duration:0},maxDropdownHeight:220,shadow:"sm",searchable:!1,filter:Dee,limit:1/0,clearSearchOnChange:!0,clearable:!1,clearSearchOnBlur:!1,disabled:!1,initiallyOpened:!1,creatable:!1,shouldCreate:Ree,switchDirectionOnFlip:!1,zIndex:Oy("popover"),selectOnBlur:!1,positionDependencies:[],dropdownPosition:"flip"},SM=i.forwardRef((e,t)=>{const n=Nn("MultiSelect",Aee,e),{className:r,style:o,required:s,label:l,description:c,size:d,error:f,classNames:m,styles:h,wrapperProps:g,value:b,defaultValue:y,data:x,onChange:w,valueComponent:S,itemComponent:j,id:_,transitionProps:I,maxDropdownHeight:E,shadow:M,nothingFound:D,onFocus:R,onBlur:N,searchable:O,placeholder:T,filter:U,limit:G,clearSearchOnChange:q,clearable:Y,clearSearchOnBlur:Q,variant:V,onSearchChange:se,searchValue:ee,disabled:le,initiallyOpened:ae,radius:ce,icon:J,rightSection:re,rightSectionWidth:A,creatable:L,getCreateLabel:K,shouldCreate:ne,onCreate:z,sx:oe,dropdownComponent:X,onDropdownClose:Z,onDropdownOpen:me,maxSelectedValues:ve,withinPortal:de,portalProps:ke,switchDirectionOnFlip:we,zIndex:Re,selectOnBlur:Qe,name:$e,dropdownPosition:vt,errorProps:it,labelProps:ot,descriptionProps:Ce,form:Me,positionDependencies:qe,onKeyDown:dt,unstyled:ye,inputContainer:Ue,inputWrapperOrder:st,readOnly:mt,withAsterisk:Pe,clearButtonProps:Ne,hoverOnSearchChange:kt,disableSelectedItemFiltering:Se}=n,Ve=Oee(n,["className","style","required","label","description","size","error","classNames","styles","wrapperProps","value","defaultValue","data","onChange","valueComponent","itemComponent","id","transitionProps","maxDropdownHeight","shadow","nothingFound","onFocus","onBlur","searchable","placeholder","filter","limit","clearSearchOnChange","clearable","clearSearchOnBlur","variant","onSearchChange","searchValue","disabled","initiallyOpened","radius","icon","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","onCreate","sx","dropdownComponent","onDropdownClose","onDropdownOpen","maxSelectedValues","withinPortal","portalProps","switchDirectionOnFlip","zIndex","selectOnBlur","name","dropdownPosition","errorProps","labelProps","descriptionProps","form","positionDependencies","onKeyDown","unstyled","inputContainer","inputWrapperOrder","readOnly","withAsterisk","clearButtonProps","hoverOnSearchChange","disableSelectedItemFiltering"]),{classes:Ge,cx:Le,theme:bt}=Iee({invalid:!!f},{name:"MultiSelect",classNames:m,styles:h,unstyled:ye,size:d,variant:V}),{systemStyles:fn,rest:Bt}=Eg(Ve),Ht=i.useRef(),zn=i.useRef({}),pn=Ry(_),[en,un]=i.useState(ae),[Wt,ar]=i.useState(-1),[vr,Bn]=i.useState("column"),[Hn,lo]=Pd({value:ee,defaultValue:"",finalValue:void 0,onChange:se}),[Fo,zo]=i.useState(!1),{scrollIntoView:Ia,targetRef:xi,scrollableRef:Pa}=gP({duration:0,offset:5,cancelable:!1,isList:!0}),yi=L&&typeof K=="function";let Je=null;const qt=x.map(rt=>typeof rt=="string"?{label:rt,value:rt}:rt),Wn=sP({data:qt}),[jt,Ea]=Pd({value:hj(b,x),defaultValue:hj(y,x),finalValue:[],onChange:w}),qr=i.useRef(!!ve&&ve{if(!mt){const Dt=jt.filter(_t=>_t!==rt);Ea(Dt),ve&&Dt.length{lo(rt.currentTarget.value),!le&&!qr.current&&O&&un(!0)},g0=rt=>{typeof R=="function"&&R(rt),!le&&!qr.current&&O&&un(!0)},Vn=ree({data:Wn,searchable:O,searchValue:Hn,limit:G,filter:U,value:jt,disableSelectedItemFiltering:Se});yi&&ne(Hn,Wn)&&(Je=K(Hn),Vn.push({label:Hn,value:Hn,creatable:!0}));const Hs=Math.min(Wt,Vn.length-1),_f=(rt,Dt,_t)=>{let Rt=rt;for(;_t(Rt);)if(Rt=Dt(Rt),!Vn[Rt].disabled)return Rt;return rt};os(()=>{ar(kt&&Hn?0:-1)},[Hn,kt]),os(()=>{!le&&jt.length>x.length&&un(!1),ve&&jt.length=ve&&(qr.current=!0,un(!1))},[jt]);const Ci=rt=>{if(!mt)if(q&&lo(""),jt.includes(rt.value))jf(rt.value);else{if(rt.creatable&&typeof z=="function"){const Dt=z(rt.value);typeof Dt<"u"&&Dt!==null&&Ea(typeof Dt=="string"?[...jt,Dt]:[...jt,Dt.value])}else Ea([...jt,rt.value]);jt.length===ve-1&&(qr.current=!0,un(!1)),Vn.length===1&&un(!1)}},mu=rt=>{typeof N=="function"&&N(rt),Qe&&Vn[Hs]&&en&&Ci(Vn[Hs]),Q&&lo(""),un(!1)},_l=rt=>{if(Fo||(dt==null||dt(rt),mt)||rt.key!=="Backspace"&&ve&&qr.current)return;const Dt=vr==="column",_t=()=>{ar(lr=>{var an;const $n=_f(lr,br=>br+1,br=>br{ar(lr=>{var an;const $n=_f(lr,br=>br-1,br=>br>0);return en&&(xi.current=zn.current[(an=Vn[$n])==null?void 0:an.value],Ia({alignment:Dt?"start":"end"})),$n})};switch(rt.key){case"ArrowUp":{rt.preventDefault(),un(!0),Dt?Rt():_t();break}case"ArrowDown":{rt.preventDefault(),un(!0),Dt?_t():Rt();break}case"Enter":{rt.preventDefault(),Vn[Hs]&&en?Ci(Vn[Hs]):un(!0);break}case" ":{O||(rt.preventDefault(),Vn[Hs]&&en?Ci(Vn[Hs]):un(!0));break}case"Backspace":{jt.length>0&&Hn.length===0&&(Ea(jt.slice(0,-1)),un(!0),ve&&(qr.current=!1));break}case"Home":{if(!O){rt.preventDefault(),en||un(!0);const lr=Vn.findIndex(an=>!an.disabled);ar(lr),Ia({alignment:Dt?"end":"start"})}break}case"End":{if(!O){rt.preventDefault(),en||un(!0);const lr=Vn.map(an=>!!an.disabled).lastIndexOf(!1);ar(lr),Ia({alignment:Dt?"end":"start"})}break}case"Escape":un(!1)}},hu=jt.map(rt=>{let Dt=Wn.find(_t=>_t.value===rt&&!_t.disabled);return!Dt&&yi&&(Dt={value:rt,label:rt}),Dt}).filter(rt=>!!rt).map((rt,Dt)=>B.createElement(S,mj(Ui({},rt),{variant:V,disabled:le,className:Ge.value,readOnly:mt,onRemove:_t=>{_t.preventDefault(),_t.stopPropagation(),jf(rt.value)},key:rt.value,size:d,styles:h,classNames:m,radius:ce,index:Dt}))),gu=rt=>jt.includes(rt),v0=()=>{var rt;lo(""),Ea([]),(rt=Ht.current)==null||rt.focus(),ve&&(qr.current=!1)},Ma=!mt&&(Vn.length>0?en:en&&!!D);return os(()=>{const rt=Ma?me:Z;typeof rt=="function"&&rt()},[Ma]),B.createElement(Tc.Wrapper,Ui(Ui({required:s,id:pn,label:l,error:f,description:c,size:d,className:r,style:o,classNames:m,styles:h,__staticSelector:"MultiSelect",sx:oe,errorProps:it,descriptionProps:Ce,labelProps:ot,inputContainer:Ue,inputWrapperOrder:st,unstyled:ye,withAsterisk:Pe,variant:V},fn),g),B.createElement(el,{opened:Ma,transitionProps:I,shadow:"sm",withinPortal:de,portalProps:ke,__staticSelector:"MultiSelect",onDirectionChange:Bn,switchDirectionOnFlip:we,zIndex:Re,dropdownPosition:vt,positionDependencies:[...qe,Hn],classNames:m,styles:h,unstyled:ye,variant:V},B.createElement(el.Target,null,B.createElement("div",{className:Ge.wrapper,role:"combobox","aria-haspopup":"listbox","aria-owns":en&&Ma?`${pn}-items`:null,"aria-controls":pn,"aria-expanded":en,onMouseLeave:()=>ar(-1),tabIndex:-1},B.createElement("input",{type:"hidden",name:$e,value:jt.join(","),form:Me,disabled:le}),B.createElement(Tc,Ui({__staticSelector:"MultiSelect",style:{overflow:"hidden"},component:"div",multiline:!0,size:d,variant:V,disabled:le,error:f,required:s,radius:ce,icon:J,unstyled:ye,onMouseDown:rt=>{var Dt;rt.preventDefault(),!le&&!qr.current&&un(!en),(Dt=Ht.current)==null||Dt.focus()},classNames:mj(Ui({},m),{input:Le({[Ge.input]:!O},m==null?void 0:m.input)})},yM({theme:bt,rightSection:re,rightSectionWidth:A,styles:h,size:d,shouldClear:Y&&jt.length>0,onClear:v0,error:f,disabled:le,clearButtonProps:Ne,readOnly:mt})),B.createElement("div",{className:Ge.values,"data-clearable":Y||void 0},hu,B.createElement("input",Ui({ref:df(t,Ht),type:"search",id:pn,className:Le(Ge.searchInput,{[Ge.searchInputPointer]:!O,[Ge.searchInputInputHidden]:!en&&jt.length>0||!O&&jt.length>0,[Ge.searchInputEmpty]:jt.length===0}),onKeyDown:_l,value:Hn,onChange:h0,onFocus:g0,onBlur:mu,readOnly:!O||qr.current||mt,placeholder:jt.length===0?T:void 0,disabled:le,"data-mantine-stop-propagation":en,autoComplete:"off",onCompositionStart:()=>zo(!0),onCompositionEnd:()=>zo(!1)},Bt)))))),B.createElement(el.Dropdown,{component:X||Rg,maxHeight:E,direction:vr,id:pn,innerRef:Pa,__staticSelector:"MultiSelect",classNames:m,styles:h},B.createElement(Ay,{data:Vn,hovered:Hs,classNames:m,styles:h,uuid:pn,__staticSelector:"MultiSelect",onItemHover:ar,onItemSelect:Ci,itemsRefs:zn,itemComponent:j,size:d,nothingFound:D,isItemSelected:gu,creatable:L&&!!Je,createLabel:Je,unstyled:ye,variant:V}))))});SM.displayName="@mantine/core/MultiSelect";var Tee=Object.defineProperty,Nee=Object.defineProperties,$ee=Object.getOwnPropertyDescriptors,Sh=Object.getOwnPropertySymbols,kM=Object.prototype.hasOwnProperty,jM=Object.prototype.propertyIsEnumerable,gj=(e,t,n)=>t in e?Tee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,l1=(e,t)=>{for(var n in t||(t={}))kM.call(t,n)&&gj(e,n,t[n]);if(Sh)for(var n of Sh(t))jM.call(t,n)&&gj(e,n,t[n]);return e},Lee=(e,t)=>Nee(e,$ee(t)),Fee=(e,t)=>{var n={};for(var r in e)kM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Sh)for(var r of Sh(e))t.indexOf(r)<0&&jM.call(e,r)&&(n[r]=e[r]);return n};const zee={type:"text",size:"sm",__staticSelector:"TextInput"},_M=i.forwardRef((e,t)=>{const n=GE("TextInput",zee,e),{inputProps:r,wrapperProps:o}=n,s=Fee(n,["inputProps","wrapperProps"]);return B.createElement(Tc.Wrapper,l1({},o),B.createElement(Tc,Lee(l1(l1({},r),s),{ref:t})))});_M.displayName="@mantine/core/TextInput";function Bee({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,filterDataOnExactSearchMatch:l}){if(!t)return e;const c=s!=null&&e.find(f=>f.value===s)||null;if(c&&!l&&(c==null?void 0:c.label)===r){if(n){if(n>=e.length)return e;const f=e.indexOf(c),m=f+n,h=m-e.length;return h>0?e.slice(f-h):e.slice(f,m)}return e}const d=[];for(let f=0;f=n));f+=1);return d}var Hee=gr(()=>({input:{"&:not(:disabled)":{cursor:"pointer","&::selection":{backgroundColor:"transparent"}}}}));const Wee=Hee;var Vee=Object.defineProperty,Uee=Object.defineProperties,Gee=Object.getOwnPropertyDescriptors,kh=Object.getOwnPropertySymbols,IM=Object.prototype.hasOwnProperty,PM=Object.prototype.propertyIsEnumerable,vj=(e,t,n)=>t in e?Vee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hu=(e,t)=>{for(var n in t||(t={}))IM.call(t,n)&&vj(e,n,t[n]);if(kh)for(var n of kh(t))PM.call(t,n)&&vj(e,n,t[n]);return e},i1=(e,t)=>Uee(e,Gee(t)),Kee=(e,t)=>{var n={};for(var r in e)IM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&kh)for(var r of kh(e))t.indexOf(r)<0&&PM.call(e,r)&&(n[r]=e[r]);return n};function qee(e,t){return t.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function Xee(e,t){return!!e&&!t.some(n=>n.label.toLowerCase()===e.toLowerCase())}const Qee={required:!1,size:"sm",shadow:"sm",itemComponent:Ty,transitionProps:{transition:"fade",duration:0},initiallyOpened:!1,filter:qee,maxDropdownHeight:220,searchable:!1,clearable:!1,limit:1/0,disabled:!1,creatable:!1,shouldCreate:Xee,selectOnBlur:!1,switchDirectionOnFlip:!1,filterDataOnExactSearchMatch:!1,zIndex:Oy("popover"),positionDependencies:[],dropdownPosition:"flip"},qy=i.forwardRef((e,t)=>{const n=GE("Select",Qee,e),{inputProps:r,wrapperProps:o,shadow:s,data:l,value:c,defaultValue:d,onChange:f,itemComponent:m,onKeyDown:h,onBlur:g,onFocus:b,transitionProps:y,initiallyOpened:x,unstyled:w,classNames:S,styles:j,filter:_,maxDropdownHeight:I,searchable:E,clearable:M,nothingFound:D,limit:R,disabled:N,onSearchChange:O,searchValue:T,rightSection:U,rightSectionWidth:G,creatable:q,getCreateLabel:Y,shouldCreate:Q,selectOnBlur:V,onCreate:se,dropdownComponent:ee,onDropdownClose:le,onDropdownOpen:ae,withinPortal:ce,portalProps:J,switchDirectionOnFlip:re,zIndex:A,name:L,dropdownPosition:K,allowDeselect:ne,placeholder:z,filterDataOnExactSearchMatch:oe,form:X,positionDependencies:Z,readOnly:me,clearButtonProps:ve,hoverOnSearchChange:de}=n,ke=Kee(n,["inputProps","wrapperProps","shadow","data","value","defaultValue","onChange","itemComponent","onKeyDown","onBlur","onFocus","transitionProps","initiallyOpened","unstyled","classNames","styles","filter","maxDropdownHeight","searchable","clearable","nothingFound","limit","disabled","onSearchChange","searchValue","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","selectOnBlur","onCreate","dropdownComponent","onDropdownClose","onDropdownOpen","withinPortal","portalProps","switchDirectionOnFlip","zIndex","name","dropdownPosition","allowDeselect","placeholder","filterDataOnExactSearchMatch","form","positionDependencies","readOnly","clearButtonProps","hoverOnSearchChange"]),{classes:we,cx:Re,theme:Qe}=Wee(),[$e,vt]=i.useState(x),[it,ot]=i.useState(-1),Ce=i.useRef(),Me=i.useRef({}),[qe,dt]=i.useState("column"),ye=qe==="column",{scrollIntoView:Ue,targetRef:st,scrollableRef:mt}=gP({duration:0,offset:5,cancelable:!1,isList:!0}),Pe=ne===void 0?M:ne,Ne=Je=>{if($e!==Je){vt(Je);const qt=Je?ae:le;typeof qt=="function"&&qt()}},kt=q&&typeof Y=="function";let Se=null;const Ve=l.map(Je=>typeof Je=="string"?{label:Je,value:Je}:Je),Ge=sP({data:Ve}),[Le,bt,fn]=Pd({value:c,defaultValue:d,finalValue:null,onChange:f}),Bt=Ge.find(Je=>Je.value===Le),[Ht,zn]=Pd({value:T,defaultValue:(Bt==null?void 0:Bt.label)||"",finalValue:void 0,onChange:O}),pn=Je=>{zn(Je),E&&typeof O=="function"&&O(Je)},en=()=>{var Je;me||(bt(null),fn||pn(""),(Je=Ce.current)==null||Je.focus())};i.useEffect(()=>{const Je=Ge.find(qt=>qt.value===Le);Je?pn(Je.label):(!kt||!Le)&&pn("")},[Le]),i.useEffect(()=>{Bt&&(!E||!$e)&&pn(Bt.label)},[Bt==null?void 0:Bt.label]);const un=Je=>{if(!me)if(Pe&&(Bt==null?void 0:Bt.value)===Je.value)bt(null),Ne(!1);else{if(Je.creatable&&typeof se=="function"){const qt=se(Je.value);typeof qt<"u"&&qt!==null&&bt(typeof qt=="string"?qt:qt.value)}else bt(Je.value);fn||pn(Je.label),ot(-1),Ne(!1),Ce.current.focus()}},Wt=Bee({data:Ge,searchable:E,limit:R,searchValue:Ht,filter:_,filterDataOnExactSearchMatch:oe,value:Le});kt&&Q(Ht,Wt)&&(Se=Y(Ht),Wt.push({label:Ht,value:Ht,creatable:!0}));const ar=(Je,qt,Wn)=>{let jt=Je;for(;Wn(jt);)if(jt=qt(jt),!Wt[jt].disabled)return jt;return Je};os(()=>{ot(de&&Ht?0:-1)},[Ht,de]);const vr=Le?Wt.findIndex(Je=>Je.value===Le):0,Bn=!me&&(Wt.length>0?$e:$e&&!!D),Hn=()=>{ot(Je=>{var qt;const Wn=ar(Je,jt=>jt-1,jt=>jt>0);return st.current=Me.current[(qt=Wt[Wn])==null?void 0:qt.value],Bn&&Ue({alignment:ye?"start":"end"}),Wn})},lo=()=>{ot(Je=>{var qt;const Wn=ar(Je,jt=>jt+1,jt=>jtwindow.setTimeout(()=>{var Je;st.current=Me.current[(Je=Wt[vr])==null?void 0:Je.value],Ue({alignment:ye?"end":"start"})},50);os(()=>{Bn&&Fo()},[Bn]);const zo=Je=>{switch(typeof h=="function"&&h(Je),Je.key){case"ArrowUp":{Je.preventDefault(),$e?ye?Hn():lo():(ot(vr),Ne(!0),Fo());break}case"ArrowDown":{Je.preventDefault(),$e?ye?lo():Hn():(ot(vr),Ne(!0),Fo());break}case"Home":{if(!E){Je.preventDefault(),$e||Ne(!0);const qt=Wt.findIndex(Wn=>!Wn.disabled);ot(qt),Bn&&Ue({alignment:ye?"end":"start"})}break}case"End":{if(!E){Je.preventDefault(),$e||Ne(!0);const qt=Wt.map(Wn=>!!Wn.disabled).lastIndexOf(!1);ot(qt),Bn&&Ue({alignment:ye?"end":"start"})}break}case"Escape":{Je.preventDefault(),Ne(!1),ot(-1);break}case" ":{E||(Je.preventDefault(),Wt[it]&&$e?un(Wt[it]):(Ne(!0),ot(vr),Fo()));break}case"Enter":E||Je.preventDefault(),Wt[it]&&$e&&(Je.preventDefault(),un(Wt[it]))}},Ia=Je=>{typeof g=="function"&&g(Je);const qt=Ge.find(Wn=>Wn.value===Le);V&&Wt[it]&&$e&&un(Wt[it]),pn((qt==null?void 0:qt.label)||""),Ne(!1)},xi=Je=>{typeof b=="function"&&b(Je),E&&Ne(!0)},Pa=Je=>{me||(pn(Je.currentTarget.value),M&&Je.currentTarget.value===""&&bt(null),ot(-1),Ne(!0))},yi=()=>{me||(Ne(!$e),Le&&!$e&&ot(vr))};return B.createElement(Tc.Wrapper,i1(Hu({},o),{__staticSelector:"Select"}),B.createElement(el,{opened:Bn,transitionProps:y,shadow:s,withinPortal:ce,portalProps:J,__staticSelector:"Select",onDirectionChange:dt,switchDirectionOnFlip:re,zIndex:A,dropdownPosition:K,positionDependencies:[...Z,Ht],classNames:S,styles:j,unstyled:w,variant:r.variant},B.createElement(el.Target,null,B.createElement("div",{role:"combobox","aria-haspopup":"listbox","aria-owns":Bn?`${r.id}-items`:null,"aria-controls":r.id,"aria-expanded":Bn,onMouseLeave:()=>ot(-1),tabIndex:-1},B.createElement("input",{type:"hidden",name:L,value:Le||"",form:X,disabled:N}),B.createElement(Tc,Hu(i1(Hu(Hu({autoComplete:"off",type:"search"},r),ke),{ref:df(t,Ce),onKeyDown:zo,__staticSelector:"Select",value:Ht,placeholder:z,onChange:Pa,"aria-autocomplete":"list","aria-controls":Bn?`${r.id}-items`:null,"aria-activedescendant":it>=0?`${r.id}-${it}`:null,onMouseDown:yi,onBlur:Ia,onFocus:xi,readOnly:!E||me,disabled:N,"data-mantine-stop-propagation":Bn,name:null,classNames:i1(Hu({},S),{input:Re({[we.input]:!E},S==null?void 0:S.input)})}),yM({theme:Qe,rightSection:U,rightSectionWidth:G,styles:j,size:r.size,shouldClear:M&&!!Bt,onClear:en,error:o.error,clearButtonProps:ve,disabled:N,readOnly:me}))))),B.createElement(el.Dropdown,{component:ee||Rg,maxHeight:I,direction:qe,id:r.id,innerRef:mt,__staticSelector:"Select",classNames:S,styles:j},B.createElement(Ay,{data:Wt,hovered:it,classNames:S,styles:j,isItemSelected:Je=>Je===Le,uuid:r.id,__staticSelector:"Select",onItemHover:ot,onItemSelect:un,itemsRefs:Me,itemComponent:m,size:r.size,nothingFound:D,creatable:kt&&!!Se,createLabel:Se,"aria-label":o.label,unstyled:w,variant:r.variant}))))});qy.displayName="@mantine/core/Select";const hf=()=>{const[e,t,n,r,o,s,l,c,d,f,m,h,g,b,y,x,w,S,j,_,I,E,M,D,R,N,O,T,U,G,q,Y,Q,V,se,ee,le,ae,ce,J,re,A,L,K,ne,z,oe,X,Z,me,ve,de,ke,we,Re,Qe,$e,vt,it,ot,Ce,Me,qe,dt,ye,Ue,st,mt,Pe,Ne,kt,Se,Ve,Ge,Le,bt]=Zo("colors",["base.50","base.100","base.150","base.200","base.250","base.300","base.350","base.400","base.450","base.500","base.550","base.600","base.650","base.700","base.750","base.800","base.850","base.900","base.950","accent.50","accent.100","accent.150","accent.200","accent.250","accent.300","accent.350","accent.400","accent.450","accent.500","accent.550","accent.600","accent.650","accent.700","accent.750","accent.800","accent.850","accent.900","accent.950","baseAlpha.50","baseAlpha.100","baseAlpha.150","baseAlpha.200","baseAlpha.250","baseAlpha.300","baseAlpha.350","baseAlpha.400","baseAlpha.450","baseAlpha.500","baseAlpha.550","baseAlpha.600","baseAlpha.650","baseAlpha.700","baseAlpha.750","baseAlpha.800","baseAlpha.850","baseAlpha.900","baseAlpha.950","accentAlpha.50","accentAlpha.100","accentAlpha.150","accentAlpha.200","accentAlpha.250","accentAlpha.300","accentAlpha.350","accentAlpha.400","accentAlpha.450","accentAlpha.500","accentAlpha.550","accentAlpha.600","accentAlpha.650","accentAlpha.700","accentAlpha.750","accentAlpha.800","accentAlpha.850","accentAlpha.900","accentAlpha.950"]);return{base50:e,base100:t,base150:n,base200:r,base250:o,base300:s,base350:l,base400:c,base450:d,base500:f,base550:m,base600:h,base650:g,base700:b,base750:y,base800:x,base850:w,base900:S,base950:j,accent50:_,accent100:I,accent150:E,accent200:M,accent250:D,accent300:R,accent350:N,accent400:O,accent450:T,accent500:U,accent550:G,accent600:q,accent650:Y,accent700:Q,accent750:V,accent800:se,accent850:ee,accent900:le,accent950:ae,baseAlpha50:ce,baseAlpha100:J,baseAlpha150:re,baseAlpha200:A,baseAlpha250:L,baseAlpha300:K,baseAlpha350:ne,baseAlpha400:z,baseAlpha450:oe,baseAlpha500:X,baseAlpha550:Z,baseAlpha600:me,baseAlpha650:ve,baseAlpha700:de,baseAlpha750:ke,baseAlpha800:we,baseAlpha850:Re,baseAlpha900:Qe,baseAlpha950:$e,accentAlpha50:vt,accentAlpha100:it,accentAlpha150:ot,accentAlpha200:Ce,accentAlpha250:Me,accentAlpha300:qe,accentAlpha350:dt,accentAlpha400:ye,accentAlpha450:Ue,accentAlpha500:st,accentAlpha550:mt,accentAlpha600:Pe,accentAlpha650:Ne,accentAlpha700:kt,accentAlpha750:Se,accentAlpha800:Ve,accentAlpha850:Ge,accentAlpha900:Le,accentAlpha950:bt}},Te=(e,t)=>n=>n==="light"?e:t,EM=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:l,base700:c,base800:d,base900:f,accent200:m,accent300:h,accent400:g,accent500:b,accent600:y}=hf(),{colorMode:x}=ya(),[w]=Zo("shadows",["dark-lg"]),[S,j,_]=Zo("space",[1,2,6]),[I]=Zo("radii",["base"]),[E]=Zo("lineHeights",["base"]);return i.useCallback(()=>({label:{color:Te(c,r)(x)},separatorLabel:{color:Te(s,s)(x),"::after":{borderTopColor:Te(r,c)(x)}},input:{border:"unset",backgroundColor:Te(e,f)(x),borderRadius:I,borderStyle:"solid",borderWidth:"2px",borderColor:Te(n,d)(x),color:Te(f,t)(x),minHeight:"unset",lineHeight:E,height:"auto",paddingRight:0,paddingLeft:0,paddingInlineStart:j,paddingInlineEnd:_,paddingTop:S,paddingBottom:S,fontWeight:600,"&:hover":{borderColor:Te(r,l)(x)},"&:focus":{borderColor:Te(h,y)(x)},"&:is(:focus, :hover)":{borderColor:Te(o,s)(x)},"&:focus-within":{borderColor:Te(m,y)(x)},"&[data-disabled]":{backgroundColor:Te(r,c)(x),color:Te(l,o)(x),cursor:"not-allowed"}},value:{backgroundColor:Te(t,f)(x),color:Te(f,t)(x),button:{color:Te(f,t)(x)},"&:hover":{backgroundColor:Te(r,c)(x),cursor:"pointer"}},dropdown:{backgroundColor:Te(n,d)(x),borderColor:Te(n,d)(x),boxShadow:w},item:{backgroundColor:Te(n,d)(x),color:Te(d,n)(x),padding:6,"&[data-hovered]":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)},"&[data-active]":{backgroundColor:Te(r,c)(x),"&:hover":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)}},"&[data-selected]":{backgroundColor:Te(g,y)(x),color:Te(e,t)(x),fontWeight:600,"&:hover":{backgroundColor:Te(b,b)(x),color:Te("white",e)(x)}},"&[data-disabled]":{color:Te(s,l)(x),cursor:"not-allowed"}},rightSection:{width:32,button:{color:Te(f,t)(x)}}}),[m,h,g,b,y,t,n,r,o,e,s,l,c,d,f,w,x,E,I,S,j,_])},MM=_e((e,t)=>{const{searchable:n=!0,tooltip:r,inputRef:o,onChange:s,label:l,disabled:c,...d}=e,f=te(),[m,h]=i.useState(""),g=i.useCallback(w=>{w.shiftKey&&f(zr(!0))},[f]),b=i.useCallback(w=>{w.shiftKey||f(zr(!1))},[f]),y=i.useCallback(w=>{s&&s(w)},[s]),x=EM();return a.jsx(Ut,{label:r,placement:"top",hasArrow:!0,children:a.jsxs(Gt,{ref:t,isDisabled:c,position:"static","data-testid":`select-${l||e.placeholder}`,children:[l&&a.jsx(ln,{children:l}),a.jsx(qy,{ref:o,disabled:c,searchValue:m,onSearchChange:h,onChange:y,onKeyDown:g,onKeyUp:b,searchable:n,maxDropdownHeight:300,styles:x,...d})]})})});MM.displayName="IAIMantineSearchableSelect";const sn=i.memo(MM),Yee=fe([pe],({changeBoardModal:e})=>{const{isModalOpen:t,imagesToChange:n}=e;return{isModalOpen:t,imagesToChange:n}}),Zee=()=>{const e=te(),[t,n]=i.useState(),{data:r,isFetching:o}=Wd(),{imagesToChange:s,isModalOpen:l}=H(Yee),[c]=BR(),[d]=HR(),{t:f}=W(),m=i.useMemo(()=>{const x=[{label:f("boards.uncategorized"),value:"none"}];return(r??[]).forEach(w=>x.push({label:w.board_name,value:w.board_id})),x},[r,f]),h=i.useCallback(()=>{e(Tw()),e(yx(!1))},[e]),g=i.useCallback(()=>{!s.length||!t||(t==="none"?d({imageDTOs:s}):c({imageDTOs:s,board_id:t}),n(null),e(Tw()))},[c,e,s,d,t]),b=i.useCallback(x=>n(x),[]),y=i.useRef(null);return a.jsx(Zc,{isOpen:l,onClose:h,leastDestructiveRef:y,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:f("boards.changeBoard")}),a.jsx(Mo,{children:a.jsxs($,{sx:{flexDir:"column",gap:4},children:[a.jsxs(be,{children:[f("boards.movingImagesToBoard",{count:s.length}),":"]}),a.jsx(sn,{placeholder:f(o?"boards.loading":"boards.selectBoard"),disabled:o,onChange:b,value:t,data:m})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:y,onClick:h,children:f("boards.cancel")}),a.jsx(Xe,{colorScheme:"accent",onClick:g,ml:3,children:f("boards.move")})]})]})})})},Jee=i.memo(Zee),OM=e=>{const{label:t,isDisabled:n=!1,width:r="auto",formControlProps:o,formLabelProps:s,tooltip:l,helperText:c,...d}=e;return a.jsx(Ut,{label:l,hasArrow:!0,placement:"top",isDisabled:!l,children:a.jsx(Gt,{isDisabled:n,width:r,alignItems:"center",...o,children:a.jsxs($,{sx:{flexDir:"column",w:"full"},children:[a.jsxs($,{sx:{alignItems:"center",w:"full"},children:[t&&a.jsx(ln,{my:1,flexGrow:1,sx:{cursor:n?"not-allowed":"pointer",...s==null?void 0:s.sx,pe:4},...s,children:t}),a.jsx(Iy,{...d})]}),c&&a.jsx(N3,{children:a.jsx(be,{variant:"subtext",children:c})})]})})})};OM.displayName="IAISwitch";const _n=i.memo(OM),ete=e=>{const{t}=W(),{imageUsage:n,topMessage:r=t("gallery.currentlyInUse"),bottomMessage:o=t("gallery.featuresWillReset")}=e;return!n||!Jo(n)?null:a.jsxs(a.Fragment,{children:[a.jsx(be,{children:r}),a.jsxs(cg,{sx:{paddingInlineStart:6},children:[n.isInitialImage&&a.jsx(ts,{children:t("common.img2img")}),n.isCanvasImage&&a.jsx(ts,{children:t("common.unifiedCanvas")}),n.isControlImage&&a.jsx(ts,{children:t("common.controlNet")}),n.isNodesImage&&a.jsx(ts,{children:t("common.nodeEditor")})]}),a.jsx(be,{children:o})]})},DM=i.memo(ete),tte=fe([pe,WR],(e,t)=>{const{system:n,config:r,deleteImageModal:o}=e,{shouldConfirmOnDelete:s}=n,{canRestoreDeletedImagesFromBin:l}=r,{imagesToDelete:c,isModalOpen:d}=o,f=(c??[]).map(({image_name:h})=>wI(e,h)),m={isInitialImage:Jo(f,h=>h.isInitialImage),isCanvasImage:Jo(f,h=>h.isCanvasImage),isNodesImage:Jo(f,h=>h.isNodesImage),isControlImage:Jo(f,h=>h.isControlImage)};return{shouldConfirmOnDelete:s,canRestoreDeletedImagesFromBin:l,imagesToDelete:c,imagesUsage:t,isModalOpen:d,imageUsageSummary:m}}),nte=()=>{const e=te(),{t}=W(),{shouldConfirmOnDelete:n,canRestoreDeletedImagesFromBin:r,imagesToDelete:o,imagesUsage:s,isModalOpen:l,imageUsageSummary:c}=H(tte),d=i.useCallback(g=>e(SI(!g.target.checked)),[e]),f=i.useCallback(()=>{e(Nw()),e(VR(!1))},[e]),m=i.useCallback(()=>{!o.length||!s.length||(e(Nw()),e(UR({imageDTOs:o,imagesUsage:s})))},[e,o,s]),h=i.useRef(null);return a.jsx(Zc,{isOpen:l,onClose:f,leastDestructiveRef:h,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:t("gallery.deleteImage")}),a.jsx(Mo,{children:a.jsxs($,{direction:"column",gap:3,children:[a.jsx(DM,{imageUsage:c}),a.jsx(On,{}),a.jsx(be,{children:t(r?"gallery.deleteImageBin":"gallery.deleteImagePermanent")}),a.jsx(be,{children:t("common.areYouSure")}),a.jsx(_n,{label:t("common.dontAskMeAgain"),isChecked:!n,onChange:d})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:h,onClick:f,children:t("boards.cancel")}),a.jsx(Xe,{colorScheme:"error",onClick:m,ml:3,children:t("controlnet.delete")})]})]})})})},rte=i.memo(nte),RM=_e((e,t)=>{const{role:n,tooltip:r="",tooltipProps:o,isChecked:s,...l}=e;return a.jsx(Ut,{label:r,hasArrow:!0,...o,...o!=null&&o.placement?{placement:o.placement}:{placement:"top"},children:a.jsx(rs,{ref:t,role:n,colorScheme:s?"accent":"base","data-testid":r,...l})})});RM.displayName="IAIIconButton";const Fe=i.memo(RM);var AM={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},bj=B.createContext&&B.createContext(AM),tl=globalThis&&globalThis.__assign||function(){return tl=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{const t=H(l=>l.config.disabledTabs),n=H(l=>l.config.disabledFeatures),r=H(l=>l.config.disabledSDFeatures),o=i.useMemo(()=>n.includes(e)||r.includes(e)||t.includes(e),[n,r,t,e]),s=i.useMemo(()=>!(n.includes(e)||r.includes(e)||t.includes(e)),[n,r,t,e]);return{isFeatureDisabled:o,isFeatureEnabled:s}};function Qte(e){const{title:t,hotkey:n,description:r}=e;return a.jsxs(sl,{sx:{gridTemplateColumns:"auto max-content",justifyContent:"space-between",alignItems:"center"},children:[a.jsxs(sl,{children:[a.jsx(be,{fontWeight:600,children:t}),r&&a.jsx(be,{sx:{fontSize:"sm"},variant:"subtext",children:r})]}),a.jsx(Ie,{sx:{fontSize:"sm",fontWeight:600,px:2,py:1},children:n})]})}function Yte({children:e}){const{isOpen:t,onOpen:n,onClose:r}=sr(),{t:o}=W(),s=[{title:o("hotkeys.invoke.title"),desc:o("hotkeys.invoke.desc"),hotkey:"Ctrl+Enter"},{title:o("hotkeys.cancel.title"),desc:o("hotkeys.cancel.desc"),hotkey:"Shift+X"},{title:o("hotkeys.focusPrompt.title"),desc:o("hotkeys.focusPrompt.desc"),hotkey:"Alt+A"},{title:o("hotkeys.toggleOptions.title"),desc:o("hotkeys.toggleOptions.desc"),hotkey:"O"},{title:o("hotkeys.toggleGallery.title"),desc:o("hotkeys.toggleGallery.desc"),hotkey:"G"},{title:o("hotkeys.maximizeWorkSpace.title"),desc:o("hotkeys.maximizeWorkSpace.desc"),hotkey:"F"},{title:o("hotkeys.changeTabs.title"),desc:o("hotkeys.changeTabs.desc"),hotkey:"1-5"}],l=[{title:o("hotkeys.setPrompt.title"),desc:o("hotkeys.setPrompt.desc"),hotkey:"P"},{title:o("hotkeys.setSeed.title"),desc:o("hotkeys.setSeed.desc"),hotkey:"S"},{title:o("hotkeys.setParameters.title"),desc:o("hotkeys.setParameters.desc"),hotkey:"A"},{title:o("hotkeys.upscale.title"),desc:o("hotkeys.upscale.desc"),hotkey:"Shift+U"},{title:o("hotkeys.showInfo.title"),desc:o("hotkeys.showInfo.desc"),hotkey:"I"},{title:o("hotkeys.sendToImageToImage.title"),desc:o("hotkeys.sendToImageToImage.desc"),hotkey:"Shift+I"},{title:o("hotkeys.deleteImage.title"),desc:o("hotkeys.deleteImage.desc"),hotkey:"Del"},{title:o("hotkeys.closePanels.title"),desc:o("hotkeys.closePanels.desc"),hotkey:"Esc"}],c=[{title:o("hotkeys.previousImage.title"),desc:o("hotkeys.previousImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextImage.title"),desc:o("hotkeys.nextImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.increaseGalleryThumbSize.title"),desc:o("hotkeys.increaseGalleryThumbSize.desc"),hotkey:"Shift+Up"},{title:o("hotkeys.decreaseGalleryThumbSize.title"),desc:o("hotkeys.decreaseGalleryThumbSize.desc"),hotkey:"Shift+Down"}],d=[{title:o("hotkeys.selectBrush.title"),desc:o("hotkeys.selectBrush.desc"),hotkey:"B"},{title:o("hotkeys.selectEraser.title"),desc:o("hotkeys.selectEraser.desc"),hotkey:"E"},{title:o("hotkeys.decreaseBrushSize.title"),desc:o("hotkeys.decreaseBrushSize.desc"),hotkey:"["},{title:o("hotkeys.increaseBrushSize.title"),desc:o("hotkeys.increaseBrushSize.desc"),hotkey:"]"},{title:o("hotkeys.decreaseBrushOpacity.title"),desc:o("hotkeys.decreaseBrushOpacity.desc"),hotkey:"Shift + ["},{title:o("hotkeys.increaseBrushOpacity.title"),desc:o("hotkeys.increaseBrushOpacity.desc"),hotkey:"Shift + ]"},{title:o("hotkeys.moveTool.title"),desc:o("hotkeys.moveTool.desc"),hotkey:"V"},{title:o("hotkeys.fillBoundingBox.title"),desc:o("hotkeys.fillBoundingBox.desc"),hotkey:"Shift + F"},{title:o("hotkeys.eraseBoundingBox.title"),desc:o("hotkeys.eraseBoundingBox.desc"),hotkey:"Delete / Backspace"},{title:o("hotkeys.colorPicker.title"),desc:o("hotkeys.colorPicker.desc"),hotkey:"C"},{title:o("hotkeys.toggleSnap.title"),desc:o("hotkeys.toggleSnap.desc"),hotkey:"N"},{title:o("hotkeys.quickToggleMove.title"),desc:o("hotkeys.quickToggleMove.desc"),hotkey:"Hold Space"},{title:o("hotkeys.toggleLayer.title"),desc:o("hotkeys.toggleLayer.desc"),hotkey:"Q"},{title:o("hotkeys.clearMask.title"),desc:o("hotkeys.clearMask.desc"),hotkey:"Shift+C"},{title:o("hotkeys.hideMask.title"),desc:o("hotkeys.hideMask.desc"),hotkey:"H"},{title:o("hotkeys.showHideBoundingBox.title"),desc:o("hotkeys.showHideBoundingBox.desc"),hotkey:"Shift+H"},{title:o("hotkeys.mergeVisible.title"),desc:o("hotkeys.mergeVisible.desc"),hotkey:"Shift+M"},{title:o("hotkeys.saveToGallery.title"),desc:o("hotkeys.saveToGallery.desc"),hotkey:"Shift+S"},{title:o("hotkeys.copyToClipboard.title"),desc:o("hotkeys.copyToClipboard.desc"),hotkey:"Ctrl+C"},{title:o("hotkeys.downloadImage.title"),desc:o("hotkeys.downloadImage.desc"),hotkey:"Shift+D"},{title:o("hotkeys.undoStroke.title"),desc:o("hotkeys.undoStroke.desc"),hotkey:"Ctrl+Z"},{title:o("hotkeys.redoStroke.title"),desc:o("hotkeys.redoStroke.desc"),hotkey:"Ctrl+Shift+Z, Ctrl+Y"},{title:o("hotkeys.resetView.title"),desc:o("hotkeys.resetView.desc"),hotkey:"R"},{title:o("hotkeys.previousStagingImage.title"),desc:o("hotkeys.previousStagingImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextStagingImage.title"),desc:o("hotkeys.nextStagingImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.acceptStagingImage.title"),desc:o("hotkeys.acceptStagingImage.desc"),hotkey:"Enter"}],f=[{title:o("hotkeys.addNodes.title"),desc:o("hotkeys.addNodes.desc"),hotkey:"Shift + A / Space"}],m=h=>a.jsx($,{flexDir:"column",gap:4,children:h.map((g,b)=>a.jsxs($,{flexDir:"column",px:2,gap:4,children:[a.jsx(Qte,{title:g.title,description:g.desc,hotkey:g.hotkey}),b{const{data:t}=GR(),n=i.useRef(null),r=YM(n);return a.jsxs($,{alignItems:"center",gap:5,ps:1,ref:n,children:[a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",sx:{w:"32px",h:"32px",minW:"32px",minH:"32px",userSelect:"none"}}),a.jsxs($,{sx:{gap:3,alignItems:"center"},children:[a.jsxs(be,{sx:{fontSize:"xl",userSelect:"none"},children:["invoke ",a.jsx("strong",{children:"ai"})]}),a.jsx(hr,{children:e&&r&&t&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsx(be,{sx:{fontWeight:600,marginTop:1,color:"base.300",fontSize:14},variant:"subtext",children:t.version})},"statusText")})]})]})},sne=i.memo(one),ZM=_e((e,t)=>{const{tooltip:n,formControlProps:r,inputRef:o,label:s,disabled:l,required:c,...d}=e,f=EM();return a.jsx(Ut,{label:n,placement:"top",hasArrow:!0,children:a.jsxs(Gt,{ref:t,isRequired:c,isDisabled:l,position:"static","data-testid":`select-${s||e.placeholder}`,...r,children:[a.jsx(ln,{children:s}),a.jsx(qy,{disabled:l,ref:o,styles:f,...d})]})})});ZM.displayName="IAIMantineSelect";const yn=i.memo(ZM),JM=()=>i.useCallback(()=>{KR(qR),localStorage.clear()},[]),e8=fe(pe,({system:e})=>e.language),ane={ar:wt.t("common.langArabic",{lng:"ar"}),nl:wt.t("common.langDutch",{lng:"nl"}),en:wt.t("common.langEnglish",{lng:"en"}),fr:wt.t("common.langFrench",{lng:"fr"}),de:wt.t("common.langGerman",{lng:"de"}),he:wt.t("common.langHebrew",{lng:"he"}),it:wt.t("common.langItalian",{lng:"it"}),ja:wt.t("common.langJapanese",{lng:"ja"}),ko:wt.t("common.langKorean",{lng:"ko"}),pl:wt.t("common.langPolish",{lng:"pl"}),pt_BR:wt.t("common.langBrPortuguese",{lng:"pt_BR"}),pt:wt.t("common.langPortuguese",{lng:"pt"}),ru:wt.t("common.langRussian",{lng:"ru"}),zh_CN:wt.t("common.langSimplifiedChinese",{lng:"zh_CN"}),es:wt.t("common.langSpanish",{lng:"es"}),uk:wt.t("common.langUkranian",{lng:"ua"})},lne={CONNECTED:"common.statusConnected",DISCONNECTED:"common.statusDisconnected",PROCESSING:"common.statusProcessing",ERROR:"common.statusError",LOADING_MODEL:"common.statusLoadingModel"};function qo(e){const{t}=W(),{label:n,textProps:r,useBadge:o=!1,badgeLabel:s=t("settings.experimental"),badgeProps:l,...c}=e;return a.jsxs($,{justifyContent:"space-between",py:1,children:[a.jsxs($,{gap:2,alignItems:"center",children:[a.jsx(be,{sx:{fontSize:14,_dark:{color:"base.300"}},...r,children:n}),o&&a.jsx(Sa,{size:"xs",sx:{px:2,color:"base.700",bg:"accent.200",_dark:{bg:"accent.500",color:"base.200"}},...l,children:s})]}),a.jsx(_n,{...c})]})}const ine=e=>a.jsx($,{sx:{flexDirection:"column",gap:2,p:4,borderRadius:"base",bg:"base.100",_dark:{bg:"base.900"}},children:e.children}),Ji=i.memo(ine);function cne(){const{t:e}=W(),t=te(),{data:n}=XR(void 0,{refetchOnMountOrArgChange:!0}),[r,{isLoading:o}]=QR(),{data:s}=Ls(),l=s&&(s.queue.in_progress>0||s.queue.pending>0),c=i.useCallback(()=>{l||r().unwrap().then(d=>{t(kI()),t(jI()),t(lt({title:e("settings.intermediatesCleared",{count:d}),status:"info"}))}).catch(()=>{t(lt({title:e("settings.intermediatesClearedFailed"),status:"error"}))})},[e,r,t,l]);return a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:e("settings.clearIntermediates")}),a.jsx(Xe,{tooltip:l?e("settings.clearIntermediatesDisabled"):void 0,colorScheme:"warning",onClick:c,isLoading:o,isDisabled:!n||l,children:e("settings.clearIntermediatesWithCount",{count:n??0})}),a.jsx(be,{fontWeight:"bold",children:e("settings.clearIntermediatesDesc1")}),a.jsx(be,{variant:"subtext",children:e("settings.clearIntermediatesDesc2")}),a.jsx(be,{variant:"subtext",children:e("settings.clearIntermediatesDesc3")})]})}const une=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:l,base700:c,base800:d,base900:f,accent200:m,accent300:h,accent400:g,accent500:b,accent600:y}=hf(),{colorMode:x}=ya(),[w]=Zo("shadows",["dark-lg"]);return i.useCallback(()=>({label:{color:Te(c,r)(x)},separatorLabel:{color:Te(s,s)(x),"::after":{borderTopColor:Te(r,c)(x)}},searchInput:{":placeholder":{color:Te(r,c)(x)}},input:{backgroundColor:Te(e,f)(x),borderWidth:"2px",borderColor:Te(n,d)(x),color:Te(f,t)(x),paddingRight:24,fontWeight:600,"&:hover":{borderColor:Te(r,l)(x)},"&:focus":{borderColor:Te(h,y)(x)},"&:is(:focus, :hover)":{borderColor:Te(o,s)(x)},"&:focus-within":{borderColor:Te(m,y)(x)},"&[data-disabled]":{backgroundColor:Te(r,c)(x),color:Te(l,o)(x),cursor:"not-allowed"}},value:{backgroundColor:Te(n,d)(x),color:Te(f,t)(x),button:{color:Te(f,t)(x)},"&:hover":{backgroundColor:Te(r,c)(x),cursor:"pointer"}},dropdown:{backgroundColor:Te(n,d)(x),borderColor:Te(n,d)(x),boxShadow:w},item:{backgroundColor:Te(n,d)(x),color:Te(d,n)(x),padding:6,"&[data-hovered]":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)},"&[data-active]":{backgroundColor:Te(r,c)(x),"&:hover":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)}},"&[data-selected]":{backgroundColor:Te(g,y)(x),color:Te(e,t)(x),fontWeight:600,"&:hover":{backgroundColor:Te(b,b)(x),color:Te("white",e)(x)}},"&[data-disabled]":{color:Te(s,l)(x),cursor:"not-allowed"}},rightSection:{width:24,padding:20,button:{color:Te(f,t)(x)}}}),[m,h,g,b,y,t,n,r,o,e,s,l,c,d,f,w,x])},t8=_e((e,t)=>{const{searchable:n=!0,tooltip:r,inputRef:o,label:s,disabled:l,...c}=e,d=te(),f=i.useCallback(g=>{g.shiftKey&&d(zr(!0))},[d]),m=i.useCallback(g=>{g.shiftKey||d(zr(!1))},[d]),h=une();return a.jsx(Ut,{label:r,placement:"top",hasArrow:!0,isOpen:!0,children:a.jsxs(Gt,{ref:t,isDisabled:l,position:"static",children:[s&&a.jsx(ln,{children:s}),a.jsx(SM,{ref:o,disabled:l,onKeyDown:f,onKeyUp:m,searchable:n,maxDropdownHeight:300,styles:h,...c})]})})});t8.displayName="IAIMantineMultiSelect";const dne=i.memo(t8),fne=Hr(Gh,(e,t)=>({value:t,label:e})).sort((e,t)=>e.label.localeCompare(t.label));function pne(){const e=te(),{t}=W(),n=H(o=>o.ui.favoriteSchedulers),r=i.useCallback(o=>{e(YR(o))},[e]);return a.jsx(dne,{label:t("settings.favoriteSchedulers"),value:n,data:fne,onChange:r,clearable:!0,searchable:!0,maxSelectedValues:99,placeholder:t("settings.favoriteSchedulersPlaceholder")})}const mne=fe([pe],({system:e,ui:t})=>{const{shouldConfirmOnDelete:n,enableImageDebugging:r,consoleLogLevel:o,shouldLogToConsole:s,shouldAntialiasProgressImage:l,shouldUseNSFWChecker:c,shouldUseWatermarker:d,shouldEnableInformationalPopovers:f}=e,{shouldUseSliders:m,shouldShowProgressInViewer:h,shouldAutoChangeDimensions:g}=t;return{shouldConfirmOnDelete:n,enableImageDebugging:r,shouldUseSliders:m,shouldShowProgressInViewer:h,consoleLogLevel:o,shouldLogToConsole:s,shouldAntialiasProgressImage:l,shouldUseNSFWChecker:c,shouldUseWatermarker:d,shouldAutoChangeDimensions:g,shouldEnableInformationalPopovers:f}}),hne=({children:e,config:t})=>{const n=te(),{t:r}=W(),[o,s]=i.useState(3),l=(t==null?void 0:t.shouldShowDeveloperSettings)??!0,c=(t==null?void 0:t.shouldShowResetWebUiText)??!0,d=(t==null?void 0:t.shouldShowClearIntermediates)??!0,f=(t==null?void 0:t.shouldShowLocalizationToggle)??!0;i.useEffect(()=>{l||n($w(!1))},[l,n]);const{isNSFWCheckerAvailable:m,isWatermarkerAvailable:h}=_I(void 0,{selectFromResult:({data:X})=>({isNSFWCheckerAvailable:(X==null?void 0:X.nsfw_methods.includes("nsfw_checker"))??!1,isWatermarkerAvailable:(X==null?void 0:X.watermarking_methods.includes("invisible_watermark"))??!1})}),{isOpen:g,onOpen:b,onClose:y}=sr(),{isOpen:x,onOpen:w,onClose:S}=sr(),{shouldConfirmOnDelete:j,enableImageDebugging:_,shouldUseSliders:I,shouldShowProgressInViewer:E,consoleLogLevel:M,shouldLogToConsole:D,shouldAntialiasProgressImage:R,shouldUseNSFWChecker:N,shouldUseWatermarker:O,shouldAutoChangeDimensions:T,shouldEnableInformationalPopovers:U}=H(mne),G=JM(),q=i.useCallback(()=>{G(),y(),w(),setInterval(()=>s(X=>X-1),1e3)},[G,y,w]);i.useEffect(()=>{o<=0&&window.location.reload()},[o]);const Y=i.useCallback(X=>{n(ZR(X))},[n]),Q=i.useCallback(X=>{n(JR(X))},[n]),V=i.useCallback(X=>{n($w(X.target.checked))},[n]),{colorMode:se,toggleColorMode:ee}=ya(),le=Mt("localization").isFeatureEnabled,ae=H(e8),ce=i.useCallback(X=>{n(SI(X.target.checked))},[n]),J=i.useCallback(X=>{n(eA(X.target.checked))},[n]),re=i.useCallback(X=>{n(tA(X.target.checked))},[n]),A=i.useCallback(X=>{n(nA(X.target.checked))},[n]),L=i.useCallback(X=>{n(II(X.target.checked))},[n]),K=i.useCallback(X=>{n(rA(X.target.checked))},[n]),ne=i.useCallback(X=>{n(oA(X.target.checked))},[n]),z=i.useCallback(X=>{n(sA(X.target.checked))},[n]),oe=i.useCallback(X=>{n(aA(X.target.checked))},[n]);return a.jsxs(a.Fragment,{children:[i.cloneElement(e,{onClick:b}),a.jsxs(ni,{isOpen:g,onClose:y,size:"2xl",isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{children:[a.jsx(Po,{bg:"none",children:r("common.settingsLabel")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsxs($,{sx:{gap:4,flexDirection:"column"},children:[a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.general")}),a.jsx(qo,{label:r("settings.confirmOnDelete"),isChecked:j,onChange:ce})]}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.generation")}),a.jsx(pne,{}),a.jsx(qo,{label:r("settings.enableNSFWChecker"),isDisabled:!m,isChecked:N,onChange:J}),a.jsx(qo,{label:r("settings.enableInvisibleWatermark"),isDisabled:!h,isChecked:O,onChange:re})]}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.ui")}),a.jsx(qo,{label:r("common.darkMode"),isChecked:se==="dark",onChange:ee}),a.jsx(qo,{label:r("settings.useSlidersForAll"),isChecked:I,onChange:A}),a.jsx(qo,{label:r("settings.showProgressInViewer"),isChecked:E,onChange:L}),a.jsx(qo,{label:r("settings.antialiasProgressImages"),isChecked:R,onChange:K}),a.jsx(qo,{label:r("settings.autoChangeDimensions"),isChecked:T,onChange:ne}),f&&a.jsx(yn,{disabled:!le,label:r("common.languagePickerLabel"),value:ae,data:Object.entries(ane).map(([X,Z])=>({value:X,label:Z})),onChange:Q}),a.jsx(qo,{label:r("settings.enableInformationalPopovers"),isChecked:U,onChange:z})]}),l&&a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.developer")}),a.jsx(qo,{label:r("settings.shouldLogToConsole"),isChecked:D,onChange:V}),a.jsx(yn,{disabled:!D,label:r("settings.consoleLogLevel"),onChange:Y,value:M,data:lA.concat()}),a.jsx(qo,{label:r("settings.enableImageDebugging"),isChecked:_,onChange:oe})]}),d&&a.jsx(cne,{}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.resetWebUI")}),a.jsx(Xe,{colorScheme:"error",onClick:q,children:r("settings.resetWebUI")}),c&&a.jsxs(a.Fragment,{children:[a.jsx(be,{variant:"subtext",children:r("settings.resetWebUIDesc1")}),a.jsx(be,{variant:"subtext",children:r("settings.resetWebUIDesc2")})]})]})]})}),a.jsx(ls,{children:a.jsx(Xe,{onClick:y,children:r("common.close")})})]})]}),a.jsxs(ni,{closeOnOverlayClick:!1,isOpen:x,onClose:S,isCentered:!0,closeOnEsc:!1,children:[a.jsx(Eo,{backdropFilter:"blur(40px)"}),a.jsxs(ri,{children:[a.jsx(Po,{}),a.jsx(Mo,{children:a.jsx($,{justifyContent:"center",children:a.jsx(be,{fontSize:"lg",children:a.jsxs(be,{children:[r("settings.resetComplete")," ",r("settings.reloadingIn")," ",o,"..."]})})})}),a.jsx(ls,{})]})]})]})},gne=i.memo(hne),vne=fe(pe,({system:e})=>{const{isConnected:t,status:n}=e;return{isConnected:t,statusTranslationKey:lne[n]}}),wj={ok:"green.400",working:"yellow.400",error:"red.400"},Sj={ok:"green.600",working:"yellow.500",error:"red.500"},bne=()=>{const{isConnected:e,statusTranslationKey:t}=H(vne),{t:n}=W(),r=i.useRef(null),{data:o}=Ls(),s=i.useMemo(()=>e?o!=null&&o.queue.in_progress?"working":"ok":"error",[o==null?void 0:o.queue.in_progress,e]),l=YM(r);return a.jsxs($,{ref:r,h:"full",px:2,alignItems:"center",gap:5,children:[a.jsx(hr,{children:l&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:"600",pb:"1px",userSelect:"none",color:Sj[s],_dark:{color:wj[s]}},children:n(t)})},"statusText")}),a.jsx(An,{as:bte,sx:{boxSize:"0.5rem",color:Sj[s],_dark:{color:wj[s]}}})]})},xne=i.memo(bne),Yy=e=>{const t=H(n=>n.ui.globalMenuCloseTrigger);i.useEffect(()=>{e()},[t,e])},yne=()=>{const{t:e}=W(),{isOpen:t,onOpen:n,onClose:r}=sr();Yy(r);const o=Mt("bugLink").isFeatureEnabled,s=Mt("discordLink").isFeatureEnabled,l=Mt("githubLink").isFeatureEnabled,c="http://github.com/invoke-ai/InvokeAI",d="https://discord.gg/ZmtBAhwWhy";return a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(sne,{}),a.jsx(Wr,{}),a.jsx(xne,{}),a.jsxs(of,{isOpen:t,onOpen:n,onClose:r,children:[a.jsx(sf,{as:Fe,variant:"link","aria-label":e("accessibility.menu"),icon:a.jsx(mte,{}),sx:{boxSize:8}}),a.jsxs(al,{motionProps:Yl,children:[a.jsxs(_d,{title:e("common.communityLabel"),children:[l&&a.jsx(At,{as:"a",href:c,target:"_blank",icon:a.jsx(lte,{}),children:e("common.githubLabel")}),o&&a.jsx(At,{as:"a",href:`${c}/issues`,target:"_blank",icon:a.jsx(hte,{}),children:e("common.reportBugLabel")}),s&&a.jsx(At,{as:"a",href:d,target:"_blank",icon:a.jsx(ate,{}),children:e("common.discordLabel")})]}),a.jsxs(_d,{title:e("common.settingsLabel"),children:[a.jsx(Yte,{children:a.jsx(At,{as:"button",icon:a.jsx(Nte,{}),children:e("common.hotkeysLabel")})}),a.jsx(gne,{children:a.jsx(At,{as:"button",icon:a.jsx(FM,{}),children:e("common.settingsLabel")})})]})]})]})]})},Cne=i.memo(yne),wne=e=>{const{boardToDelete:t,setBoardToDelete:n}=e,{t:r}=W(),o=H(j=>j.config.canRestoreDeletedImagesFromBin),{currentData:s,isFetching:l}=iA((t==null?void 0:t.board_id)??Br),c=i.useMemo(()=>fe([pe],j=>{const _=(s??[]).map(E=>wI(j,E));return{imageUsageSummary:{isInitialImage:Jo(_,E=>E.isInitialImage),isCanvasImage:Jo(_,E=>E.isCanvasImage),isNodesImage:Jo(_,E=>E.isNodesImage),isControlImage:Jo(_,E=>E.isControlImage)}}}),[s]),[d,{isLoading:f}]=cA(),[m,{isLoading:h}]=uA(),{imageUsageSummary:g}=H(c),b=i.useCallback(()=>{t&&(d(t.board_id),n(void 0))},[t,d,n]),y=i.useCallback(()=>{t&&(m(t.board_id),n(void 0))},[t,m,n]),x=i.useCallback(()=>{n(void 0)},[n]),w=i.useRef(null),S=i.useMemo(()=>h||f||l,[h,f,l]);return t?a.jsx(Zc,{isOpen:!!t,onClose:x,leastDestructiveRef:w,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsxs(Po,{fontSize:"lg",fontWeight:"bold",children:[r("controlnet.delete")," ",t.board_name]}),a.jsx(Mo,{children:a.jsxs($,{direction:"column",gap:3,children:[l?a.jsx(wg,{children:a.jsx($,{sx:{w:"full",h:32}})}):a.jsx(DM,{imageUsage:g,topMessage:r("boards.topMessage"),bottomMessage:r("boards.bottomMessage")}),a.jsx(be,{children:r("boards.deletedBoardsCannotbeRestored")}),a.jsx(be,{children:r(o?"gallery.deleteImageBin":"gallery.deleteImagePermanent")})]})}),a.jsx(ls,{children:a.jsxs($,{sx:{justifyContent:"space-between",width:"full",gap:2},children:[a.jsx(Xe,{ref:w,onClick:x,children:r("boards.cancel")}),a.jsx(Xe,{colorScheme:"warning",isLoading:S,onClick:b,children:r("boards.deleteBoardOnly")}),a.jsx(Xe,{colorScheme:"error",isLoading:S,onClick:y,children:r("boards.deleteBoardAndImages")})]})})]})})}):null},Sne=i.memo(wne);/*! + * OverlayScrollbars + * Version: 2.4.5 + * + * Copyright (c) Rene Haas | KingSora. + * https://github.com/KingSora + * + * Released under the MIT license. + */const Qo=(e,t)=>{const{o:n,u:r,_:o}=e;let s=n,l;const c=(m,h)=>{const g=s,b=m,y=h||(r?!r(g,b):g!==b);return(y||o)&&(s=b,l=g),[s,y,l]};return[t?m=>c(t(s,l),m):c,m=>[s,!!m,l]]},Zy=typeof window<"u",n8=Zy&&Node.ELEMENT_NODE,{toString:kne,hasOwnProperty:c1}=Object.prototype,jne=/^\[object (.+)\]$/,bl=e=>e===void 0,Lg=e=>e===null,_ne=e=>bl(e)||Lg(e)?`${e}`:kne.call(e).replace(jne,"$1").toLowerCase(),Ps=e=>typeof e=="number",vf=e=>typeof e=="string",r8=e=>typeof e=="boolean",Os=e=>typeof e=="function",Do=e=>Array.isArray(e),Md=e=>typeof e=="object"&&!Do(e)&&!Lg(e),Fg=e=>{const t=!!e&&e.length,n=Ps(t)&&t>-1&&t%1==0;return Do(e)||!Os(e)&&n?t>0&&Md(e)?t-1 in e:!0:!1},jh=e=>{if(!e||!Md(e)||_ne(e)!=="object")return!1;let t;const n="constructor",r=e[n],o=r&&r.prototype,s=c1.call(e,n),l=o&&c1.call(o,"isPrototypeOf");if(r&&!s&&!l)return!1;for(t in e);return bl(t)||c1.call(e,t)},id=e=>{const t=HTMLElement;return e?t?e instanceof t:e.nodeType===n8:!1},zg=e=>{const t=Element;return e?t?e instanceof t:e.nodeType===n8:!1};function Qt(e,t){if(Fg(e))for(let n=0;nt(e[n],n,e));return e}const Bg=(e,t)=>e.indexOf(t)>=0,Xa=(e,t)=>e.concat(t),Xt=(e,t,n)=>(!n&&!vf(t)&&Fg(t)?Array.prototype.push.apply(e,t):e.push(t),e),su=e=>{const t=Array.from,n=[];return t&&e?t(e):(e instanceof Set?e.forEach(r=>{Xt(n,r)}):Qt(e,r=>{Xt(n,r)}),n)},_h=e=>!!e&&!e.length,kj=e=>su(new Set(e)),Ro=(e,t,n)=>{Qt(e,o=>o&&o.apply(void 0,t||[])),!n&&(e.length=0)},Hg=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),fa=e=>e?Object.keys(e):[],Vt=(e,t,n,r,o,s,l)=>{const c=[t,n,r,o,s,l];return(typeof e!="object"||Lg(e))&&!Os(e)&&(e={}),Qt(c,d=>{Qt(d,(f,m)=>{const h=d[m];if(e===h)return!0;const g=Do(h);if(h&&jh(h)){const b=e[m];let y=b;g&&!Do(b)?y=[]:!g&&!jh(b)&&(y={}),e[m]=Vt(y,h)}else e[m]=g?h.slice():h})}),e},o8=(e,t)=>Qt(Vt({},e),(n,r,o)=>{n===void 0?delete o[r]:t&&n&&jh(n)&&(o[r]=o8(n,t))}),Jy=e=>{for(const t in e)return!1;return!0},Cr=(e,t,n)=>{if(bl(n))return e?e.getAttribute(t):null;e&&e.setAttribute(t,n)},s8=(e,t)=>new Set((Cr(e,t)||"").split(" ")),Ar=(e,t)=>{e&&e.removeAttribute(t)},ql=(e,t,n,r)=>{if(n){const o=s8(e,t);o[r?"add":"delete"](n);const s=su(o).join(" ").trim();Cr(e,t,s)}},Ine=(e,t,n)=>s8(e,t).has(n),Nb=Zy&&Element.prototype,a8=(e,t)=>{const n=[],r=t?zg(t)&&t:document;return r?Xt(n,r.querySelectorAll(e)):n},Pne=(e,t)=>{const n=t?zg(t)&&t:document;return n?n.querySelector(e):null},Ih=(e,t)=>zg(e)?(Nb.matches||Nb.msMatchesSelector).call(e,t):!1,$b=e=>e?su(e.childNodes):[],sa=e=>e&&e.parentElement,ac=(e,t)=>{if(zg(e)){const n=Nb.closest;if(n)return n.call(e,t);do{if(Ih(e,t))return e;e=sa(e)}while(e)}},Ene=(e,t,n)=>{const r=ac(e,t),o=e&&Pne(n,r),s=ac(o,t)===r;return r&&o?r===e||o===e||s&&ac(ac(e,n),t)!==r:!1},ko=()=>{},aa=e=>{if(Fg(e))Qt(su(e),t=>aa(t));else if(e){const t=sa(e);t&&t.removeChild(e)}},e2=(e,t,n)=>{if(n&&e){let r=t,o;return Fg(n)?(o=document.createDocumentFragment(),Qt(n,s=>{s===r&&(r=s.previousSibling),o.appendChild(s)})):o=n,t&&(r?r!==t&&(r=r.nextSibling):r=e.firstChild),e.insertBefore(o,r||null),()=>aa(n)}return ko},xo=(e,t)=>e2(e,null,t),Mne=(e,t)=>e2(sa(e),e,t),jj=(e,t)=>e2(sa(e),e&&e.nextSibling,t),Xl=e=>{const t=document.createElement("div");return Cr(t,"class",e),t},l8=e=>{const t=Xl();return t.innerHTML=e.trim(),Qt($b(t),n=>aa(n))},Ur=Zy?window:{},cd=Math.max,One=Math.min,Od=Math.round,i8=Ur.cancelAnimationFrame,c8=Ur.requestAnimationFrame,Ph=Ur.setTimeout,Lb=Ur.clearTimeout,Fb=e=>e.charAt(0).toUpperCase()+e.slice(1),Dne=()=>Xl().style,Rne=["-webkit-","-moz-","-o-","-ms-"],Ane=["WebKit","Moz","O","MS","webkit","moz","o","ms"],u1={},d1={},Tne=e=>{let t=d1[e];if(Hg(d1,e))return t;const n=Fb(e),r=Dne();return Qt(Rne,o=>{const s=o.replace(/-/g,"");return!(t=[e,o+e,s+n,Fb(s)+n].find(c=>r[c]!==void 0))}),d1[e]=t||""},Wg=e=>{let t=u1[e]||Ur[e];return Hg(u1,e)||(Qt(Ane,n=>(t=t||Ur[n+Fb(e)],!t)),u1[e]=t),t},Nne=Wg("MutationObserver"),_j=Wg("IntersectionObserver"),Eh=Wg("ResizeObserver"),zb=Wg("ScrollTimeline"),ft=(e,...t)=>e.bind(0,...t),Va=e=>{let t;const n=e?Ph:c8,r=e?Lb:i8;return[o=>{r(t),t=n(o,Os(e)?e():e)},()=>r(t)]},u8=(e,t)=>{let n,r,o,s=ko;const{v:l,p:c,g:d}=t||{},f=function(y){s(),Lb(n),n=r=void 0,s=ko,e.apply(this,y)},m=b=>d&&r?d(r,b):b,h=()=>{s!==ko&&f(m(o)||o)},g=function(){const y=su(arguments),x=Os(l)?l():l;if(Ps(x)&&x>=0){const S=Os(c)?c():c,j=Ps(S)&&S>=0,_=x>0?Ph:c8,I=x>0?Lb:i8,M=m(y)||y,D=f.bind(0,M);s();const R=_(D,x);s=()=>I(R),j&&!n&&(n=Ph(h,S)),r=o=M}else f(y)};return g.m=h,g},$ne=/[^\x20\t\r\n\f]+/g,d8=(e,t,n)=>{const r=e&&e.classList;let o,s=0,l=!1;if(r&&t&&vf(t)){const c=t.match($ne)||[];for(l=c.length>0;o=c[s++];)l=!!n(r,o)&&l}return l},t2=(e,t)=>{d8(e,t,(n,r)=>n.remove(r))},cl=(e,t)=>(d8(e,t,(n,r)=>n.add(r)),ft(t2,e,t)),Lne={opacity:1,zIndex:1},Gp=(e,t)=>{const n=e||"",r=t?parseFloat(n):parseInt(n,10);return r===r?r:0},Fne=(e,t)=>!Lne[e]&&Ps(t)?`${t}px`:t,Ij=(e,t,n)=>String((t!=null?t[n]||t.getPropertyValue(n):e.style[n])||""),zne=(e,t,n)=>{try{const{style:r}=e;bl(r[t])?r.setProperty(t,n):r[t]=Fne(t,n)}catch{}},f8=e=>{const t=e||0;return isFinite(t)?t:0};function pr(e,t){const n=vf(t);if(Do(t)||n){let o=n?"":{};if(e){const s=Ur.getComputedStyle(e,null);o=n?Ij(e,s,t):t.reduce((l,c)=>(l[c]=Ij(e,s,c),l),o)}return o}e&&Qt(t,(o,s)=>zne(e,s,t[s]))}const Dd=e=>pr(e,"direction")==="rtl",Pj=(e,t,n)=>{const r=t?`${t}-`:"",o=n?`-${n}`:"",s=`${r}top${o}`,l=`${r}right${o}`,c=`${r}bottom${o}`,d=`${r}left${o}`,f=pr(e,[s,l,c,d]);return{t:Gp(f[s],!0),r:Gp(f[l],!0),b:Gp(f[c],!0),l:Gp(f[d],!0)}},Gi=(e,t)=>`translate${Md(e)?`(${e.x},${e.y})`:`${t?"X":"Y"}(${e})`}`,Kp=e=>`${(f8(e)*100).toFixed(3)}%`,qp=e=>`${f8(e)}px`,p8="paddingTop",n2="paddingRight",r2="paddingLeft",Mh="paddingBottom",Oh="marginLeft",Dh="marginRight",ud="marginBottom",Yu="overflowX",Zu="overflowY",pa="width",ma="height",$c="hidden",Bne={w:0,h:0},Vg=(e,t)=>t?{w:t[`${e}Width`],h:t[`${e}Height`]}:Bne,Hne=e=>Vg("inner",e||Ur),dd=ft(Vg,"offset"),hm=ft(Vg,"client"),Rh=ft(Vg,"scroll"),Ah=e=>{const t=parseFloat(pr(e,pa))||0,n=parseFloat(pr(e,ma))||0;return{w:t-Od(t),h:n-Od(n)}},ks=e=>e.getBoundingClientRect(),Bb=e=>!!(e&&(e[ma]||e[pa])),m8=(e,t)=>{const n=Bb(e);return!Bb(t)&&n},Ug=(e,t,n,r)=>{if(e&&t){let o=!0;return Qt(n,s=>{const l=r?r(e[s]):e[s],c=r?r(t[s]):t[s];l!==c&&(o=!1)}),o}return!1},h8=(e,t)=>Ug(e,t,["w","h"]),g8=(e,t)=>Ug(e,t,["x","y"]),Wne=(e,t)=>Ug(e,t,["t","r","b","l"]),Ej=(e,t,n)=>Ug(e,t,[pa,ma],n&&(r=>Od(r)));let Xp;const Mj="passive",Vne=()=>{if(bl(Xp)){Xp=!1;try{Ur.addEventListener(Mj,ko,Object.defineProperty({},Mj,{get(){Xp=!0}}))}catch{}}return Xp},v8=e=>e.split(" "),Oj=(e,t,n,r)=>{Qt(v8(t),o=>{e.removeEventListener(o,n,r)})},Pn=(e,t,n,r)=>{var o;const s=Vne(),l=(o=s&&r&&r.S)!=null?o:s,c=r&&r.$||!1,d=r&&r.O||!1,f=s?{passive:l,capture:c}:c;return ft(Ro,v8(t).map(m=>{const h=d?g=>{Oj(e,m,h,c),n(g)}:n;return e.addEventListener(m,h,f),ft(Oj,e,m,h,c)}))},b8=e=>e.stopPropagation(),Dj=e=>e.preventDefault(),Une={x:0,y:0},f1=e=>{const t=e&&ks(e);return t?{x:t.left+Ur.pageYOffset,y:t.top+Ur.pageXOffset}:Une},x8=(e,t,n)=>n?n.n?-e:n.i?t-e:e:e,Gne=(e,t)=>[t&&t.i?e:0,x8(e,e,t)],ul=(e,t)=>{const{x:n,y:r}=Ps(t)?{x:t,y:t}:t||{};Ps(n)&&(e.scrollLeft=n),Ps(r)&&(e.scrollTop=r)},Lc=e=>({x:e.scrollLeft,y:e.scrollTop}),Rj=(e,t)=>{Qt(Do(t)?t:[t],e)},Hb=e=>{const t=new Map,n=(s,l)=>{if(s){const c=t.get(s);Rj(d=>{c&&c[d?"delete":"clear"](d)},l)}else t.forEach(c=>{c.clear()}),t.clear()},r=(s,l)=>{if(vf(s)){const f=t.get(s)||new Set;return t.set(s,f),Rj(m=>{Os(m)&&f.add(m)},l),ft(n,s,l)}r8(l)&&l&&n();const c=fa(s),d=[];return Qt(c,f=>{const m=s[f];m&&Xt(d,r(f,m))}),ft(Ro,d)},o=(s,l)=>{Qt(su(t.get(s)),c=>{l&&!_h(l)?c.apply(0,l):c()})};return r(e||{}),[r,n,o]},Aj=e=>JSON.stringify(e,(t,n)=>{if(Os(n))throw 0;return n}),Tj=(e,t)=>e?`${t}`.split(".").reduce((n,r)=>n&&Hg(n,r)?n[r]:void 0,e):void 0,Kne={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},y8=(e,t)=>{const n={},r=Xa(fa(t),fa(e));return Qt(r,o=>{const s=e[o],l=t[o];if(Md(s)&&Md(l))Vt(n[o]={},y8(s,l)),Jy(n[o])&&delete n[o];else if(Hg(t,o)&&l!==s){let c=!0;if(Do(s)||Do(l))try{Aj(s)===Aj(l)&&(c=!1)}catch{}c&&(n[o]=l)}}),n},qne=(e,t,n)=>r=>[Tj(e,r),n||Tj(t,r)!==void 0],bf="data-overlayscrollbars",C8="os-environment",w8=`${C8}-flexbox-glue`,Xne=`${w8}-max`,S8="os-scrollbar-hidden",p1=`${bf}-initialize`,Yo=bf,k8=`${Yo}-overflow-x`,j8=`${Yo}-overflow-y`,Cc="overflowVisible",Qne="scrollbarHidden",Nj="scrollbarPressed",Th="updating",Ua=`${bf}-viewport`,m1="arrange",_8="scrollbarHidden",wc=Cc,Wb=`${bf}-padding`,Yne=wc,$j=`${bf}-content`,o2="os-size-observer",Zne=`${o2}-appear`,Jne=`${o2}-listener`,ere="os-trinsic-observer",tre="os-no-css-vars",nre="os-theme-none",Kr="os-scrollbar",rre=`${Kr}-rtl`,ore=`${Kr}-horizontal`,sre=`${Kr}-vertical`,I8=`${Kr}-track`,s2=`${Kr}-handle`,are=`${Kr}-visible`,lre=`${Kr}-cornerless`,Lj=`${Kr}-transitionless`,Fj=`${Kr}-interaction`,zj=`${Kr}-unusable`,Vb=`${Kr}-auto-hide`,Bj=`${Vb}-hidden`,Hj=`${Kr}-wheel`,ire=`${I8}-interactive`,cre=`${s2}-interactive`,P8={},E8={},ure=e=>{Qt(e,t=>Qt(t,(n,r)=>{P8[r]=t[r]}))},M8=(e,t,n)=>fa(e).map(r=>{const{static:o,instance:s}=e[r],[l,c,d]=n||[],f=n?s:o;if(f){const m=n?f(l,c,t):f(t);return(d||E8)[r]=m}}),au=e=>E8[e],dre="__osOptionsValidationPlugin",fre="__osSizeObserverPlugin",a2="__osScrollbarsHidingPlugin",pre="__osClickScrollPlugin";let h1;const Wj=(e,t,n,r)=>{xo(e,t);const o=hm(t),s=dd(t),l=Ah(n);return r&&aa(t),{x:s.h-o.h+l.h,y:s.w-o.w+l.w}},mre=e=>{let t=!1;const n=cl(e,S8);try{t=pr(e,Tne("scrollbar-width"))==="none"||Ur.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")==="none"}catch{}return n(),t},hre=(e,t)=>{pr(e,{[Yu]:$c,[Zu]:$c,direction:"rtl"}),ul(e,{x:0});const n=f1(e),r=f1(t);ul(e,{x:-999});const o=f1(t);return{i:n.x===r.x,n:r.x!==o.x}},gre=(e,t)=>{const n=cl(e,w8),r=ks(e),o=ks(t),s=Ej(o,r,!0),l=cl(e,Xne),c=ks(e),d=ks(t),f=Ej(d,c,!0);return n(),l(),s&&f},vre=()=>{const{body:e}=document,n=l8(`
`)[0],r=n.firstChild,[o,,s]=Hb(),[l,c]=Qo({o:Wj(e,n,r),u:g8},ft(Wj,e,n,r,!0)),[d]=c(),f=mre(n),m={x:d.x===0,y:d.y===0},h={elements:{host:null,padding:!f,viewport:w=>f&&w===w.ownerDocument.body&&w,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},g=Vt({},Kne),b=ft(Vt,{},g),y=ft(Vt,{},h),x={P:d,I:m,H:f,A:pr(n,"zIndex")==="-1",L:!!zb,V:hre(n,r),U:gre(n,r),B:ft(o,"r"),j:y,N:w=>Vt(h,w)&&y(),G:b,q:w=>Vt(g,w)&&b(),F:Vt({},h),W:Vt({},g)};return Ar(n,"style"),aa(n),Ur.addEventListener("resize",()=>{let w;if(!f&&(!m.x||!m.y)){const S=au(a2);w=!!(S?S.R():ko)(x,l)}s("r",[w])}),x},Gr=()=>(h1||(h1=vre()),h1),l2=(e,t)=>Os(t)?t.apply(0,e):t,bre=(e,t,n,r)=>{const o=bl(r)?n:r;return l2(e,o)||t.apply(0,e)},O8=(e,t,n,r)=>{const o=bl(r)?n:r,s=l2(e,o);return!!s&&(id(s)?s:t.apply(0,e))},xre=(e,t)=>{const{nativeScrollbarsOverlaid:n,body:r}=t||{},{I:o,H:s,j:l}=Gr(),{nativeScrollbarsOverlaid:c,body:d}=l().cancel,f=n??c,m=bl(r)?d:r,h=(o.x||o.y)&&f,g=e&&(Lg(m)?!s:m);return!!h||!!g},i2=new WeakMap,yre=(e,t)=>{i2.set(e,t)},Cre=e=>{i2.delete(e)},D8=e=>i2.get(e),wre=(e,t,n)=>{let r=!1;const o=n?new WeakMap:!1,s=()=>{r=!0},l=c=>{if(o&&n){const d=n.map(f=>{const[m,h]=f||[];return[h&&m?(c||a8)(m,e):[],h]});Qt(d,f=>Qt(f[0],m=>{const h=f[1],g=o.get(m)||[];if(e.contains(m)&&h){const y=Pn(m,h.trim(),x=>{r?(y(),o.delete(m)):t(x)});o.set(m,Xt(g,y))}else Ro(g),o.delete(m)}))}};return l(),[s,l]},Vj=(e,t,n,r)=>{let o=!1;const{X:s,Y:l,J:c,K:d,Z:f,tt:m}=r||{},h=u8(()=>o&&n(!0),{v:33,p:99}),[g,b]=wre(e,h,c),y=s||[],x=l||[],w=Xa(y,x),S=(_,I)=>{if(!_h(I)){const E=f||ko,M=m||ko,D=[],R=[];let N=!1,O=!1;if(Qt(I,T=>{const{attributeName:U,target:G,type:q,oldValue:Y,addedNodes:Q,removedNodes:V}=T,se=q==="attributes",ee=q==="childList",le=e===G,ae=se&&U,ce=ae?Cr(G,U||""):null,J=ae&&Y!==ce,re=Bg(x,U)&&J;if(t&&(ee||!le)){const A=se&&J,L=A&&d&&Ih(G,d),ne=(L?!E(G,U,Y,ce):!se||A)&&!M(T,!!L,e,r);Qt(Q,z=>Xt(D,z)),Qt(V,z=>Xt(D,z)),O=O||ne}!t&&le&&J&&!E(G,U,Y,ce)&&(Xt(R,U),N=N||re)}),b(T=>kj(D).reduce((U,G)=>(Xt(U,a8(T,G)),Ih(G,T)?Xt(U,G):U),[])),t)return!_&&O&&n(!1),[!1];if(!_h(R)||N){const T=[kj(R),N];return!_&&n.apply(0,T),T}}},j=new Nne(ft(S,!1));return[()=>(j.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:t,childList:t,characterData:t}),o=!0,()=>{o&&(g(),j.disconnect(),o=!1)}),()=>{if(o)return h.m(),S(!0,j.takeRecords())}]},R8=(e,t,n)=>{const{nt:o,ot:s}=n||{},l=au(fre),{V:c}=Gr(),d=ft(Dd,e),[f]=Qo({o:!1,_:!0});return()=>{const m=[],g=l8(`
`)[0],b=g.firstChild,y=x=>{const w=x instanceof ResizeObserverEntry,S=!w&&Do(x);let j=!1,_=!1,I=!0;if(w){const[E,,M]=f(x.contentRect),D=Bb(E),R=m8(E,M);_=!M||R,j=!_&&!D,I=!j}else S?[,I]=x:_=x===!0;if(o&&I){const E=S?x[0]:Dd(g);ul(g,{x:x8(3333333,3333333,E&&c),y:3333333})}j||t({st:S?x:void 0,et:!S,ot:_})};if(Eh){const x=new Eh(w=>y(w.pop()));x.observe(b),Xt(m,()=>{x.disconnect()})}else if(l){const[x,w]=l(b,y,s);Xt(m,Xa([cl(g,Zne),Pn(g,"animationstart",x)],w))}else return ko;if(o){const[x]=Qo({o:void 0},d);Xt(m,Pn(g,"scroll",w=>{const S=x(),[j,_,I]=S;_&&(t2(b,"ltr rtl"),cl(b,j?"rtl":"ltr"),y([!!j,_,I])),b8(w)}))}return ft(Ro,Xt(m,xo(e,g)))}},Sre=(e,t)=>{let n;const r=d=>d.h===0||d.isIntersecting||d.intersectionRatio>0,o=Xl(ere),[s]=Qo({o:!1}),l=(d,f)=>{if(d){const m=s(r(d)),[,h]=m;return h&&!f&&t(m)&&[m]}},c=(d,f)=>l(f.pop(),d);return[()=>{const d=[];if(_j)n=new _j(ft(c,!1),{root:e}),n.observe(o),Xt(d,()=>{n.disconnect()});else{const f=()=>{const m=dd(o);l(m)};Xt(d,R8(o,f)()),f()}return ft(Ro,Xt(d,xo(e,o)))},()=>n&&c(!0,n.takeRecords())]},kre=(e,t)=>{let n,r,o,s,l;const{H:c}=Gr(),d=`[${Yo}]`,f=`[${Ua}]`,m=["tabindex"],h=["wrap","cols","rows"],g=["id","class","style","open"],b={ct:!1,rt:Dd(e.lt)},{lt:y,it:x,ut:w,ft:S,_t:j,dt:_,vt:I}=e,{U:E,B:M}=Gr(),[D]=Qo({u:h8,o:{w:0,h:0}},()=>{const ae=_(wc,Cc),ce=_(m1,""),J=ce&&Lc(x);I(wc,Cc),I(m1,""),I("",Th,!0);const re=Rh(w),A=Rh(x),L=Ah(x);return I(wc,Cc,ae),I(m1,"",ce),I("",Th),ul(x,J),{w:A.w+re.w+L.w,h:A.h+re.h+L.h}}),R=S?h:Xa(g,h),N=u8(t,{v:()=>n,p:()=>r,g(ae,ce){const[J]=ae,[re]=ce;return[Xa(fa(J),fa(re)).reduce((A,L)=>(A[L]=J[L]||re[L],A),{})]}}),O=ae=>{Qt(ae||m,ce=>{if(Bg(m,ce)){const J=Cr(y,ce);vf(J)?Cr(x,ce,J):Ar(x,ce)}})},T=(ae,ce)=>{const[J,re]=ae,A={ht:re};return Vt(b,{ct:J}),!ce&&t(A),A},U=({et:ae,st:ce,ot:J})=>{const A=!(ae&&!J&&!ce)&&c?N:t,[L,K]=ce||[];ce&&Vt(b,{rt:L}),A({et:ae||J,ot:J,gt:K})},G=(ae,ce)=>{const[,J]=D(),re={bt:J};return J&&!ce&&(ae?t:N)(re),re},q=(ae,ce,J)=>{const re={wt:ce};return ce&&!J?N(re):j||O(ae),re},[Y,Q]=w||!E?Sre(y,T):[],V=!j&&R8(y,U,{ot:!0,nt:!0}),[se,ee]=Vj(y,!1,q,{Y:g,X:Xa(g,m)}),le=j&&Eh&&new Eh(ae=>{const ce=ae[ae.length-1].contentRect;U({et:!0,ot:m8(ce,l)}),l=ce});return[()=>{O(),le&&le.observe(y);const ae=V&&V(),ce=Y&&Y(),J=se(),re=M(A=>{const[,L]=D();N({yt:A,bt:L})});return()=>{le&&le.disconnect(),ae&&ae(),ce&&ce(),s&&s(),J(),re()}},({St:ae,$t:ce,xt:J})=>{const re={},[A]=ae("update.ignoreMutation"),[L,K]=ae("update.attributes"),[ne,z]=ae("update.elementEvents"),[oe,X]=ae("update.debounce"),Z=z||K,me=ce||J,ve=de=>Os(A)&&A(de);if(Z){o&&o(),s&&s();const[de,ke]=Vj(w||x,!0,G,{X:Xa(R,L||[]),J:ne,K:d,tt:(we,Re)=>{const{target:Qe,attributeName:$e}=we;return(!Re&&$e&&!j?Ene(Qe,d,f):!1)||!!ac(Qe,`.${Kr}`)||!!ve(we)}});s=de(),o=ke}if(X)if(N.m(),Do(oe)){const de=oe[0],ke=oe[1];n=Ps(de)&&de,r=Ps(ke)&&ke}else Ps(oe)?(n=oe,r=!1):(n=!1,r=!1);if(me){const de=ee(),ke=Q&&Q(),we=o&&o();de&&Vt(re,q(de[0],de[1],me)),ke&&Vt(re,T(ke[0],me)),we&&Vt(re,G(we[0],me))}return re},b]},Ub=(e,t,n)=>cd(e,One(t,n)),jre=(e,t,n)=>{const r=Od(t),[o,s]=Gne(r,n),l=(s-e)/s,c=e/o,d=e/s,f=n?n.n?l:n.i?c:d:d;return Ub(0,1,f)},A8=(e,t,n)=>{if(n){const d=t?pa:ma,{Ot:f,Ct:m}=n,h=ks(m)[d],g=ks(f)[d];return Ub(0,1,h/g)}const r=t?"x":"y",{Ht:o,zt:s}=e,l=s[r],c=o[r];return Ub(0,1,l/(l+c))},Uj=(e,t,n,r)=>{const o=A8(e,r,t);return 1/o*(1-o)*n},_re=(e,t,n,r)=>{const{j:o,A:s}=Gr(),{scrollbars:l}=o(),{slot:c}=l,{It:d,lt:f,it:m,At:h,Et:g,Tt:b,_t:y}=t,{scrollbars:x}=h?{}:e,{slot:w}=x||{},S=new Map,j=L=>zb&&new zb({source:g,axis:L}),_=j("x"),I=j("y"),E=O8([d,f,m],()=>y&&b?d:f,c,w),M=L=>y&&!b&&sa(L)===m,D=L=>{S.forEach((K,ne)=>{(L?Bg(Do(L)?L:[L],ne):!0)&&((K||[]).forEach(oe=>{oe&&oe.cancel()}),S.delete(ne))})},R=(L,K,ne)=>{const z=ne?cl:t2;Qt(L,oe=>{z(oe.Dt,K)})},N=(L,K)=>{Qt(L,ne=>{const[z,oe]=K(ne);pr(z,oe)})},O=(L,K,ne,z)=>K&&L.animate(ne,{timeline:K,composite:z}),T=(L,K)=>{N(L,ne=>{const{Ct:z}=ne;return[z,{[K?pa:ma]:Kp(A8(n,K))}]})},U=(L,K)=>{_&&I?L.forEach(ne=>{const{Dt:z,Ct:oe}=ne,X=ft(Uj,n,ne),Z=K&&Dd(z),me=X(Z?1:0,K),ve=X(Z?0:1,K);D(oe),S.set(oe,[O(oe,K?_:I,Vt({transform:[Gi(Kp(me),K),Gi(Kp(ve),K)]},Z?{clear:["left"]}:{}))])}):N(L,ne=>{const{Ct:z,Dt:oe}=ne,{V:X}=Gr(),Z=K?"x":"y",{Ht:me}=n,ve=Dd(oe),de=Uj(n,ne,jre(Lc(g)[Z],me[Z],K&&ve&&X),K);return[z,{transform:Gi(Kp(de),K)}]})},G=L=>{const{Dt:K}=L,ne=M(K)&&K,{x:z,y:oe}=Lc(g);return[ne,{transform:ne?Gi({x:qp(z),y:qp(oe)}):""}]},q=(L,K,ne,z)=>O(L,K,{transform:[Gi(qp(0),z),Gi(qp(cd(0,ne-.5)),z)]},"add"),Y=[],Q=[],V=[],se=(L,K,ne)=>{const z=r8(ne),oe=z?ne:!0,X=z?!ne:!0;oe&&R(Q,L,K),X&&R(V,L,K)},ee=()=>{T(Q,!0),T(V)},le=()=>{U(Q,!0),U(V)},ae=()=>{if(y)if(I&&I){const{Ht:L}=n;Xa(V,Q).forEach(({Dt:K})=>{D(K),M(K)&&S.set(K,[q(K,_,L.x,!0),q(K,I,L.y)])})}else N(Q,G),N(V,G)},ce=L=>{const K=L?ore:sre,ne=L?Q:V,z=_h(ne)?Lj:"",oe=Xl(`${Kr} ${K} ${z}`),X=Xl(I8),Z=Xl(s2),me={Dt:oe,Ot:X,Ct:Z};return s||cl(oe,tre),Xt(ne,me),Xt(Y,[xo(oe,X),xo(X,Z),ft(aa,oe),D,r(me,se,U,L)]),me},J=ft(ce,!0),re=ft(ce,!1),A=()=>(xo(E,Q[0].Dt),xo(E,V[0].Dt),Ph(()=>{se(Lj)},300),ft(Ro,Y));return J(),re(),[{kt:ee,Mt:le,Rt:ae,Pt:se,Lt:{L:_,Vt:Q,Ut:J,Bt:ft(N,Q)},jt:{L:I,Vt:V,Ut:re,Bt:ft(N,V)}},A]},Ire=(e,t,n)=>{const{lt:r,Et:o,Nt:s}=t;return(l,c,d,f)=>{const{Dt:m,Ot:h,Ct:g}=l,[b,y]=Va(333),[x,w]=Va(),S=ft(d,[l],f),j=!!o.scrollBy,_=`client${f?"X":"Y"}`,I=f?pa:ma,E=f?"left":"top",M=f?"w":"h",D=f?"x":"y",R=T=>T.propertyName.indexOf(I)>-1,N=()=>{const T="pointerup pointerleave pointercancel lostpointercapture",U=(G,q)=>Y=>{const{Ht:Q}=n,V=dd(h)[M]-dd(g)[M],ee=q*Y/V*Q[D];ul(o,{[D]:G+ee})};return Pn(h,"pointerdown",G=>{const q=ac(G.target,`.${s2}`)===g,Y=q?g:h,Q=e.scrollbars,{button:V,isPrimary:se,pointerType:ee}=G,{pointers:le}=Q,ae=V===0&&se&&Q[q?"dragScroll":"clickScroll"]&&(le||[]).includes(ee);if(ql(r,Yo,Nj,!0),ae){const ce=!q&&G.shiftKey,J=ft(ks,g),re=ft(ks,h),A=(we,Re)=>(we||J())[E]-(Re||re())[E],L=Od(ks(o)[I])/dd(o)[M]||1,K=U(Lc(o)[D]||0,1/L),ne=G[_],z=J(),oe=re(),X=z[I],Z=A(z,oe)+X/2,me=ne-oe[E],ve=q?0:me-Z,de=we=>{Ro(ke),Y.releasePointerCapture(we.pointerId)},ke=[ft(ql,r,Yo,Nj),Pn(s,T,de),Pn(s,"selectstart",we=>Dj(we),{S:!1}),Pn(h,T,de),Pn(h,"pointermove",we=>{const Re=we[_]-ne;(q||ce)&&K(ve+Re)})];if(ce)K(ve);else if(!q){const we=au(pre);we&&Xt(ke,we(K,A,ve,X,me))}Y.setPointerCapture(G.pointerId)}})};let O=!0;return ft(Ro,[Pn(m,"pointerenter",()=>{c(Fj,!0)}),Pn(m,"pointerleave pointercancel",()=>{c(Fj,!1)}),Pn(m,"wheel",T=>{const{deltaX:U,deltaY:G,deltaMode:q}=T;j&&O&&q===0&&sa(m)===r&&o.scrollBy({left:U,top:G,behavior:"smooth"}),O=!1,c(Hj,!0),b(()=>{O=!0,c(Hj)}),Dj(T)},{S:!1,$:!0}),Pn(g,"transitionstart",T=>{if(R(T)){const U=()=>{S(),x(U)};U()}}),Pn(g,"transitionend transitioncancel",T=>{R(T)&&(w(),S())}),Pn(m,"mousedown",ft(Pn,s,"click",b8,{O:!0,$:!0}),{$:!0}),N(),y,w])}},Pre=(e,t,n,r,o,s)=>{let l,c,d,f,m,h=ko,g=0;const[b,y]=Va(),[x,w]=Va(),[S,j]=Va(100),[_,I]=Va(100),[E,M]=Va(100),[D,R]=Va(()=>g),[N,O]=_re(e,o,r,Ire(t,o,r)),{lt:T,Gt:U,Tt:G}=o,{Pt:q,kt:Y,Mt:Q,Rt:V}=N,se=J=>{q(Vb,J,!0),q(Vb,J,!1)},ee=(J,re)=>{if(R(),J)q(Bj);else{const A=ft(q,Bj,!0);g>0&&!re?D(A):A()}},le=J=>J.pointerType==="mouse",ae=J=>{le(J)&&(f=c,f&&ee(!0))},ce=[j,R,I,M,w,y,()=>h(),Pn(T,"pointerover",ae,{O:!0}),Pn(T,"pointerenter",ae),Pn(T,"pointerleave",J=>{le(J)&&(f=!1,c&&ee(!1))}),Pn(T,"pointermove",J=>{le(J)&&l&&b(()=>{j(),ee(!0),_(()=>{l&&ee(!1)})})}),Pn(U,"scroll",J=>{x(()=>{Q(),d&&ee(!0),S(()=>{d&&!f&&ee(!1)})}),s(J),V()})];return[()=>ft(Ro,Xt(ce,O())),({St:J,xt:re,qt:A,Ft:L})=>{const{Wt:K,Xt:ne,Yt:z}=L||{},{gt:oe,ot:X}=A||{},{rt:Z}=n,{I:me}=Gr(),{Ht:ve,Jt:de,Kt:ke}=r,[we,Re]=J("showNativeOverlaidScrollbars"),[Qe,$e]=J("scrollbars.theme"),[vt,it]=J("scrollbars.visibility"),[ot,Ce]=J("scrollbars.autoHide"),[Me,qe]=J("scrollbars.autoHideSuspend"),[dt]=J("scrollbars.autoHideDelay"),[ye,Ue]=J("scrollbars.dragScroll"),[st,mt]=J("scrollbars.clickScroll"),Pe=X&&!re,Ne=ke.x||ke.y,kt=K||ne||oe||re,Se=z||it,Ve=we&&me.x&&me.y,Ge=(Le,bt)=>{const fn=vt==="visible"||vt==="auto"&&Le==="scroll";return q(are,fn,bt),fn};if(g=dt,Pe&&(Me&&Ne?(se(!1),h(),E(()=>{h=Pn(U,"scroll",ft(se,!0),{O:!0})})):se(!0)),Re&&q(nre,Ve),$e&&(q(m),q(Qe,!0),m=Qe),qe&&!Me&&se(!0),Ce&&(l=ot==="move",c=ot==="leave",d=ot!=="never",ee(!d,!0)),Ue&&q(cre,ye),mt&&q(ire,st),Se){const Le=Ge(de.x,!0),bt=Ge(de.y,!1);q(lre,!(Le&&bt))}kt&&(Y(),Q(),V(),q(zj,!ve.x,!0),q(zj,!ve.y,!1),q(rre,Z&&!G))},{},N]},Ere=e=>{const t=Gr(),{j:n,H:r}=t,o=au(a2),s=o&&o.C,{elements:l}=n(),{host:c,padding:d,viewport:f,content:m}=l,h=id(e),g=h?{}:e,{elements:b}=g,{host:y,padding:x,viewport:w,content:S}=b||{},j=h?e:g.target,_=Ih(j,"textarea"),I=j.ownerDocument,E=I.documentElement,M=j===I.body,D=I.defaultView,R=ft(bre,[j]),N=ft(O8,[j]),O=ft(l2,[j]),T=ft(Xl,""),U=ft(R,T,f),G=ft(N,T,m),q=U(w),Y=q===j,Q=Y&&M,V=!Y&&G(S),se=!Y&&id(q)&&q===V,ee=se&&!!O(m),le=ee?U():q,ae=ee?V:G(),J=Q?E:se?le:q,re=_?R(T,c,y):j,A=Q?J:re,L=se?ae:V,K=I.activeElement,ne=!Y&&D.top===D&&K===j,z={It:j,lt:A,it:J,Zt:!Y&&N(T,d,x),ut:L,Qt:!Y&&!r&&s&&s(t),Et:Q?E:J,Gt:Q?I:J,tn:D,Nt:I,ft:_,Tt:M,At:h,_t:Y,nn:se,dt:(Ce,Me)=>Ine(J,Y?Yo:Ua,Y?Me:Ce),vt:(Ce,Me,qe)=>ql(J,Y?Yo:Ua,Y?Me:Ce,qe)},oe=fa(z).reduce((Ce,Me)=>{const qe=z[Me];return Xt(Ce,qe&&id(qe)&&!sa(qe)?qe:!1)},[]),X=Ce=>Ce?Bg(oe,Ce):null,{It:Z,lt:me,Zt:ve,it:de,ut:ke,Qt:we}=z,Re=[()=>{Ar(me,Yo),Ar(me,p1),Ar(Z,p1),M&&(Ar(E,Yo),Ar(E,p1))}],Qe=_&&X(me);let $e=_?Z:$b([ke,de,ve,me,Z].find(Ce=>X(Ce)===!1));const vt=Q?Z:ke||de,it=ft(Ro,Re);return[z,()=>{Cr(me,Yo,Y?"viewport":"host"),Cr(ve,Wb,""),Cr(ke,$j,""),Y||Cr(de,Ua,"");const Ce=M&&!Y?cl(sa(j),S8):ko,Me=qe=>{xo(sa(qe),$b(qe)),aa(qe)};if(Qe&&(jj(Z,me),Xt(Re,()=>{jj(me,Z),aa(me)})),xo(vt,$e),xo(me,ve),xo(ve||me,!Y&&de),xo(de,ke),Xt(Re,()=>{Ce(),Ar(ve,Wb),Ar(ke,$j),Ar(de,k8),Ar(de,j8),Ar(de,Ua),X(ke)&&Me(ke),X(de)&&Me(de),X(ve)&&Me(ve)}),r&&!Y&&(ql(de,Ua,_8,!0),Xt(Re,ft(Ar,de,Ua))),we&&(Mne(de,we),Xt(Re,ft(aa,we))),ne){const qe="tabindex",dt=Cr(de,qe);Cr(de,qe,"-1"),de.focus();const ye=()=>dt?Cr(de,qe,dt):Ar(de,qe),Ue=Pn(I,"pointerdown keydown",()=>{ye(),Ue()});Xt(Re,[ye,Ue])}else K&&K.focus&&K.focus();return $e=0,it},it]},Mre=({ut:e})=>({qt:t,sn:n,xt:r})=>{const{U:o}=Gr(),{ht:s}=t||{},{ct:l}=n;(e||!o)&&(s||r)&&pr(e,{[ma]:l?"":"100%"})},Ore=({lt:e,Zt:t,it:n,_t:r},o)=>{const[s,l]=Qo({u:Wne,o:Pj()},ft(Pj,e,"padding",""));return({St:c,qt:d,sn:f,xt:m})=>{let[h,g]=l(m);const{H:b,U:y}=Gr(),{et:x,bt:w,gt:S}=d||{},{rt:j}=f,[_,I]=c("paddingAbsolute");(x||g||(m||!y&&w))&&([h,g]=s(m));const M=!r&&(I||S||g);if(M){const D=!_||!t&&!b,R=h.r+h.l,N=h.t+h.b,O={[Dh]:D&&!j?-R:0,[ud]:D?-N:0,[Oh]:D&&j?-R:0,top:D?-h.t:0,right:D?j?-h.r:"auto":0,left:D?j?"auto":-h.l:0,[pa]:D?`calc(100% + ${R}px)`:""},T={[p8]:D?h.t:0,[n2]:D?h.r:0,[Mh]:D?h.b:0,[r2]:D?h.l:0};pr(t||n,O),pr(n,T),Vt(o,{Zt:h,en:!D,D:t?T:Vt({},O,T)})}return{cn:M}}},Dre=({lt:e,Zt:t,it:n,Qt:r,_t:o,vt:s,Tt:l,tn:c},d)=>{const f=ft(cd,0),m="visible",h=42,g={u:h8,o:{w:0,h:0}},b={u:g8,o:{x:$c,y:$c}},y=(ce,J)=>{const re=Ur.devicePixelRatio%1!==0?1:0,A={w:f(ce.w-J.w),h:f(ce.h-J.h)};return{w:A.w>re?A.w:0,h:A.h>re?A.h:0}},x=ce=>ce.indexOf(m)===0,{P:w,U:S,H:j,I:_}=Gr(),I=au(a2),E=!o&&!j&&(_.x||_.y),M=l&&o,[D,R]=Qo(g,ft(Ah,n)),[N,O]=Qo(g,ft(Rh,n)),[T,U]=Qo(g),[G,q]=Qo(g),[Y]=Qo(b),Q=(ce,J)=>{if(pr(n,{[ma]:""}),J){const{en:re,Zt:A}=d,{rn:L,k:K}=ce,ne=Ah(e),z=hm(e),oe=pr(n,"boxSizing")==="content-box",X=re||oe?A.b+A.t:0,Z=!(_.x&&oe);pr(n,{[ma]:z.h+ne.h+(L.x&&Z?K.x:0)-X})}},V=(ce,J)=>{const re=!j&&!ce?h:0,A=(ve,de,ke)=>{const we=pr(n,ve),Qe=(J?J[ve]:we)==="scroll";return[we,Qe,Qe&&!j?de?re:ke:0,de&&!!re]},[L,K,ne,z]=A(Yu,_.x,w.x),[oe,X,Z,me]=A(Zu,_.y,w.y);return{Jt:{x:L,y:oe},rn:{x:K,y:X},k:{x:ne,y:Z},M:{x:z,y:me}}},se=(ce,J,re,A)=>{const L=(X,Z)=>{const me=x(X),ve=Z&&me&&X.replace(`${m}-`,"")||"";return[Z&&!me?X:"",x(ve)?"hidden":ve]},[K,ne]=L(re.x,J.x),[z,oe]=L(re.y,J.y);return A[Yu]=ne&&z?ne:K,A[Zu]=oe&&K?oe:z,V(ce,A)},ee=(ce,J,re,A)=>{const{k:L,M:K}=ce,{x:ne,y:z}=K,{x:oe,y:X}=L,{D:Z}=d,me=J?Oh:Dh,ve=J?r2:n2,de=Z[me],ke=Z[ud],we=Z[ve],Re=Z[Mh];A[pa]=`calc(100% + ${X+de*-1}px)`,A[me]=-X+de,A[ud]=-oe+ke,re&&(A[ve]=we+(z?X:0),A[Mh]=Re+(ne?oe:0))},[le,ae]=I?I.T(E,S,n,r,d,V,ee):[()=>E,()=>[ko]];return({St:ce,qt:J,sn:re,xt:A},{cn:L})=>{const{et:K,wt:ne,bt:z,ht:oe,gt:X,yt:Z}=J||{},{ct:me,rt:ve}=re,[de,ke]=ce("showNativeOverlaidScrollbars"),[we,Re]=ce("overflow"),Qe=de&&_.x&&_.y,$e=!o&&!S&&(K||z||ne||ke||oe),vt=K||L||z||X||Z||ke,it=x(we.x),ot=x(we.y),Ce=it||ot;let Me=R(A),qe=O(A),dt=U(A),ye=q(A),Ue;if(ke&&j&&s(_8,Qne,!Qe),$e&&(Ue=V(Qe),Q(Ue,me)),vt){Ce&&s(wc,Cc,!1);const[zn,pn]=ae(Qe,ve,Ue),[en,un]=Me=D(A),[Wt,ar]=qe=N(A),vr=hm(n);let Bn=Wt,Hn=vr;zn(),(ar||un||ke)&&pn&&!Qe&&le(pn,Wt,en,ve)&&(Hn=hm(n),Bn=Rh(n));const lo=Hne(c),Fo={w:f(cd(Wt.w,Bn.w)+en.w),h:f(cd(Wt.h,Bn.h)+en.h)},zo={w:f((M?lo.w:Hn.w+f(vr.w-Wt.w))+en.w),h:f((M?lo.h:Hn.h+f(vr.h-Wt.h))+en.h)};ye=G(zo),dt=T(y(Fo,zo),A)}const[st,mt]=ye,[Pe,Ne]=dt,[kt,Se]=qe,[Ve,Ge]=Me,Le={x:Pe.w>0,y:Pe.h>0},bt=it&&ot&&(Le.x||Le.y)||it&&Le.x&&!Le.y||ot&&Le.y&&!Le.x;if(L||X||Z||Ge||Se||mt||Ne||Re||ke||$e||vt){const zn={[Dh]:0,[ud]:0,[Oh]:0,[pa]:"",[Yu]:"",[Zu]:""},pn=se(Qe,Le,we,zn),en=le(pn,kt,Ve,ve);o||ee(pn,ve,en,zn),$e&&Q(pn,me),o?(Cr(e,k8,zn[Yu]),Cr(e,j8,zn[Zu])):pr(n,zn)}ql(e,Yo,Cc,bt),ql(t,Wb,Yne,bt),o||ql(n,Ua,wc,Ce);const[Bt,Ht]=Y(V(Qe).Jt);return Vt(d,{Jt:Bt,zt:{x:st.w,y:st.h},Ht:{x:Pe.w,y:Pe.h},Kt:Le}),{Yt:Ht,Wt:mt,Xt:Ne}}},Rre=e=>{const[t,n,r]=Ere(e),o={Zt:{t:0,r:0,b:0,l:0},en:!1,D:{[Dh]:0,[ud]:0,[Oh]:0,[p8]:0,[n2]:0,[Mh]:0,[r2]:0},zt:{x:0,y:0},Ht:{x:0,y:0},Jt:{x:$c,y:$c},Kt:{x:!1,y:!1}},{It:s,it:l,vt:c,_t:d}=t,{H:f,I:m,U:h}=Gr(),g=!f&&(m.x||m.y),b=[Mre(t),Ore(t,o),Dre(t,o)];return[n,y=>{const x={},S=(g||!h)&&Lc(l);return c("",Th,!0),Qt(b,j=>{Vt(x,j(y,x)||{})}),c("",Th),ul(l,S),!d&&ul(s,0),x},o,t,r]},Are=(e,t,n,r)=>{const[o,s,l,c,d]=Rre(e),[f,m,h]=kre(c,S=>{w({},S)}),[g,b,,y]=Pre(e,t,h,l,c,r),x=S=>fa(S).some(j=>!!S[j]),w=(S,j)=>{const{ln:_,xt:I,$t:E,an:M}=S,D=_||{},R=!!I,N={St:qne(t,D,R),ln:D,xt:R};if(M)return b(N),!1;const O=j||m(Vt({},N,{$t:E})),T=s(Vt({},N,{sn:h,qt:O}));b(Vt({},N,{qt:O,Ft:T}));const U=x(O),G=x(T),q=U||G||!Jy(D)||R;return q&&n(S,{qt:O,Ft:T}),q};return[()=>{const{It:S,it:j,Nt:_,Tt:I}=c,E=I?_.documentElement:S,M=Lc(E),D=[f(),o(),g()];return ul(j,M),ft(Ro,D)},w,()=>({un:h,fn:l}),{_n:c,dn:y},d]},ra=(e,t,n)=>{const{G:r}=Gr(),o=id(e),s=o?e:e.target,l=D8(s);if(t&&!l){let c=!1;const d=[],f={},m=O=>{const T=o8(O,!0),U=au(dre);return U?U(T,!0):T},h=Vt({},r(),m(t)),[g,b,y]=Hb(),[x,w,S]=Hb(n),j=(O,T)=>{S(O,T),y(O,T)},[_,I,E,M,D]=Are(e,h,({ln:O,xt:T},{qt:U,Ft:G})=>{const{et:q,gt:Y,ht:Q,bt:V,wt:se,ot:ee}=U,{Wt:le,Xt:ae,Yt:ce}=G;j("updated",[N,{updateHints:{sizeChanged:!!q,directionChanged:!!Y,heightIntrinsicChanged:!!Q,overflowEdgeChanged:!!le,overflowAmountChanged:!!ae,overflowStyleChanged:!!ce,contentMutation:!!V,hostMutation:!!se,appear:!!ee},changedOptions:O||{},force:!!T}])},O=>j("scroll",[N,O])),R=O=>{Cre(s),Ro(d),c=!0,j("destroyed",[N,O]),b(),w()},N={options(O,T){if(O){const U=T?r():{},G=y8(h,Vt(U,m(O)));Jy(G)||(Vt(h,G),I({ln:G}))}return Vt({},h)},on:x,off:(O,T)=>{O&&T&&w(O,T)},state(){const{un:O,fn:T}=E(),{rt:U}=O,{zt:G,Ht:q,Jt:Y,Kt:Q,Zt:V,en:se}=T;return Vt({},{overflowEdge:G,overflowAmount:q,overflowStyle:Y,hasOverflow:Q,padding:V,paddingAbsolute:se,directionRTL:U,destroyed:c})},elements(){const{It:O,lt:T,Zt:U,it:G,ut:q,Et:Y,Gt:Q}=M._n,{Lt:V,jt:se}=M.dn,ee=ae=>{const{Ct:ce,Ot:J,Dt:re}=ae;return{scrollbar:re,track:J,handle:ce}},le=ae=>{const{Vt:ce,Ut:J}=ae,re=ee(ce[0]);return Vt({},re,{clone:()=>{const A=ee(J());return I({an:!0}),A}})};return Vt({},{target:O,host:T,padding:U||G,viewport:G,content:q||G,scrollOffsetElement:Y,scrollEventElement:Q,scrollbarHorizontal:le(V),scrollbarVertical:le(se)})},update:O=>I({xt:O,$t:!0}),destroy:ft(R,!1),plugin:O=>f[fa(O)[0]]};return Xt(d,[D]),yre(s,N),M8(P8,ra,[N,g,f]),xre(M._n.Tt,!o&&e.cancel)?(R(!0),N):(Xt(d,_()),j("initialized",[N]),N.update(!0),N)}return l};ra.plugin=e=>{const t=Do(e),n=t?e:[e],r=n.map(o=>M8(o,ra)[0]);return ure(n),t?r:r[0]};ra.valid=e=>{const t=e&&e.elements,n=Os(t)&&t();return jh(n)&&!!D8(n.target)};ra.env=()=>{const{P:e,I:t,H:n,V:r,U:o,A:s,L:l,F:c,W:d,j:f,N:m,G:h,q:g}=Gr();return Vt({},{scrollbarsSize:e,scrollbarsOverlaid:t,scrollbarsHiding:n,rtlScrollBehavior:r,flexboxGlue:o,cssCustomProperties:s,scrollTimeline:l,staticDefaultInitialization:c,staticDefaultOptions:d,getDefaultInitialization:f,setDefaultInitialization:m,getDefaultOptions:h,setDefaultOptions:g})};const Tre=()=>{if(typeof window>"u"){const f=()=>{};return[f,f]}let e,t;const n=window,r=typeof n.requestIdleCallback=="function",o=n.requestAnimationFrame,s=n.cancelAnimationFrame,l=r?n.requestIdleCallback:o,c=r?n.cancelIdleCallback:s,d=()=>{c(e),s(t)};return[(f,m)=>{d(),e=l(r?()=>{d(),t=o(f)}:f,typeof m=="object"?m:{timeout:2233})},d]},c2=e=>{const{options:t,events:n,defer:r}=e||{},[o,s]=i.useMemo(Tre,[]),l=i.useRef(null),c=i.useRef(r),d=i.useRef(t),f=i.useRef(n);return i.useEffect(()=>{c.current=r},[r]),i.useEffect(()=>{const{current:m}=l;d.current=t,ra.valid(m)&&m.options(t||{},!0)},[t]),i.useEffect(()=>{const{current:m}=l;f.current=n,ra.valid(m)&&m.on(n||{},!0)},[n]),i.useEffect(()=>()=>{var m;s(),(m=l.current)==null||m.destroy()},[]),i.useMemo(()=>[m=>{const h=l.current;if(ra.valid(h))return;const g=c.current,b=d.current||{},y=f.current||{},x=()=>l.current=ra(m,b,y);g?o(x,g):x()},()=>l.current],[])},Nre=(e,t)=>{const{element:n="div",options:r,events:o,defer:s,children:l,...c}=e,d=n,f=i.useRef(null),m=i.useRef(null),[h,g]=c2({options:r,events:o,defer:s});return i.useEffect(()=>{const{current:b}=f,{current:y}=m;return b&&y&&h({target:b,elements:{viewport:y,content:y}}),()=>{var x;return(x=g())==null?void 0:x.destroy()}},[h,n]),i.useImperativeHandle(t,()=>({osInstance:g,getElement:()=>f.current}),[]),B.createElement(d,{"data-overlayscrollbars-initialize":"",ref:f,...c},B.createElement("div",{"data-overlayscrollbars-contents":"",ref:m},l))},Gg=i.forwardRef(Nre),$re=()=>{const{t:e}=W(),[t,{isLoading:n}]=dA(),r=e("boards.myBoard"),o=i.useCallback(()=>{t(r)},[t,r]);return a.jsx(Fe,{icon:a.jsx(nl,{}),isLoading:n,tooltip:e("boards.addBoard"),"aria-label":e("boards.addBoard"),onClick:o,size:"sm","data-testid":"add-board-button"})},Lre=i.memo($re);var T8=eg({displayName:"ExternalLinkIcon",path:a.jsxs("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"2",children:[a.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),a.jsx("path",{d:"M15 3h6v6"}),a.jsx("path",{d:"M10 14L21 3"})]})}),Kg=eg({d:"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z",displayName:"ChevronUpIcon"}),N8=eg({displayName:"CloseIcon",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"}),Fre=eg({displayName:"DeleteIcon",path:a.jsx("g",{fill:"currentColor",children:a.jsx("path",{d:"M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z"})})});const zre=fe([pe],({gallery:e})=>{const{boardSearchText:t}=e;return{boardSearchText:t}}),Bre=()=>{const e=te(),{boardSearchText:t}=H(zre),n=i.useRef(null),{t:r}=W(),o=i.useCallback(d=>{e(Lw(d))},[e]),s=i.useCallback(()=>{e(Lw(""))},[e]),l=i.useCallback(d=>{d.key==="Escape"&&s()},[s]),c=i.useCallback(d=>{o(d.target.value)},[o]);return i.useEffect(()=>{n.current&&n.current.focus()},[]),a.jsxs(cy,{children:[a.jsx(Qc,{ref:n,placeholder:r("boards.searchBoard"),value:t,onKeyDown:l,onChange:c,"data-testid":"board-search-input"}),t&&t.length&&a.jsx(lg,{children:a.jsx(rs,{onClick:s,size:"xs",variant:"ghost","aria-label":r("boards.clearSearch"),opacity:.5,icon:a.jsx(N8,{boxSize:2})})})]})},Hre=i.memo(Bre);function $8(e){return fA(e)}function Wre(e){return pA(e)}const L8=(e,t)=>{var o,s;if(!e||!(t!=null&&t.data.current))return!1;const{actionType:n}=e,{payloadType:r}=t.data.current;if(e.id===t.data.current.id)return!1;switch(n){case"ADD_FIELD_TO_LINEAR":return r==="NODE_FIELD";case"SET_CURRENT_IMAGE":return r==="IMAGE_DTO";case"SET_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_CONTROL_ADAPTER_IMAGE":return r==="IMAGE_DTO";case"SET_CANVAS_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_NODES_IMAGE":return r==="IMAGE_DTO";case"SET_MULTI_NODES_IMAGE":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BATCH":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:c}=t.data.current.payload,d=c.board_id??"none",f=e.context.boardId;return d!==f}if(r==="IMAGE_DTOS"){const{imageDTOs:c}=t.data.current.payload,d=((o=c[0])==null?void 0:o.board_id)??"none",f=e.context.boardId;return d!==f}return!1}case"REMOVE_FROM_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:c}=t.data.current.payload;return(c.board_id??"none")!=="none"}if(r==="IMAGE_DTOS"){const{imageDTOs:c}=t.data.current.payload;return(((s=c[0])==null?void 0:s.board_id)??"none")!=="none"}return!1}default:return!1}},Vre=e=>{const{isOver:t,label:n="Drop"}=e,r=i.useRef(Ya()),{colorMode:o}=ya();return a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsxs($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full"},children:[a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:Te("base.700","base.900")(o),opacity:.7,borderRadius:"base",alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx($,{sx:{position:"absolute",top:.5,insetInlineStart:.5,insetInlineEnd:.5,bottom:.5,opacity:1,borderWidth:2,borderColor:t?Te("base.50","base.50")(o):Te("base.200","base.300")(o),borderRadius:"lg",borderStyle:"dashed",transitionProperty:"common",transitionDuration:"0.1s",alignItems:"center",justifyContent:"center"},children:a.jsx(Ie,{sx:{fontSize:"2xl",fontWeight:600,transform:t?"scale(1.1)":"scale(1)",color:t?Te("base.50","base.50")(o):Te("base.200","base.300")(o),transitionProperty:"common",transitionDuration:"0.1s"},children:n})})]})},r.current)},F8=i.memo(Vre),Ure=e=>{const{dropLabel:t,data:n,disabled:r}=e,o=i.useRef(Ya()),{isOver:s,setNodeRef:l,active:c}=$8({id:o.current,disabled:r,data:n});return a.jsx(Ie,{ref:l,position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",pointerEvents:c?"auto":"none",children:a.jsx(hr,{children:L8(n,c)&&a.jsx(F8,{isOver:s,label:t})})})},u2=i.memo(Ure),Gre=({isSelected:e,isHovered:t})=>a.jsx(Ie,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e?1:.7,transitionProperty:"common",transitionDuration:"0.1s",pointerEvents:"none",shadow:e?t?"hoverSelected.light":"selected.light":t?"hoverUnselected.light":void 0,_dark:{shadow:e?t?"hoverSelected.dark":"selected.dark":t?"hoverUnselected.dark":void 0}}}),d2=i.memo(Gre),Kre=()=>{const{t:e}=W();return a.jsx($,{sx:{position:"absolute",insetInlineEnd:0,top:0,p:1},children:a.jsx(Sa,{variant:"solid",sx:{bg:"accent.400",_dark:{bg:"accent.500"}},children:e("common.auto")})})},z8=i.memo(Kre);function f2(e){const[t,n]=i.useState(!1),[r,o]=i.useState(!1),[s,l]=i.useState(!1),[c,d]=i.useState([0,0]),f=i.useRef(null);i.useEffect(()=>{if(t)setTimeout(()=>{o(!0),setTimeout(()=>{l(!0)})});else{l(!1);const g=setTimeout(()=>{o(t)},1e3);return()=>clearTimeout(g)}},[t]);const m=i.useCallback(()=>{n(!1),l(!1),o(!1)},[]);Yy(m),DB("contextmenu",g=>{var b;(b=f.current)!=null&&b.contains(g.target)||g.target===f.current?(g.preventDefault(),n(!0),d([g.pageX,g.pageY])):n(!1)});const h=i.useCallback(()=>{var g,b;(b=(g=e.menuProps)==null?void 0:g.onClose)==null||b.call(g),n(!1)},[e.menuProps]);return a.jsxs(a.Fragment,{children:[e.children(f),r&&a.jsx(Uc,{...e.portalProps,children:a.jsxs(of,{isOpen:s,gutter:0,...e.menuProps,onClose:h,children:[a.jsx(sf,{"aria-hidden":!0,w:1,h:1,style:{position:"absolute",left:c[0],top:c[1],cursor:"default"},...e.menuButtonProps}),e.renderMenu()]})})]})}const qg=e=>{const{boardName:t}=Wd(void 0,{selectFromResult:({data:n})=>{const r=n==null?void 0:n.find(s=>s.board_id===e);return{boardName:(r==null?void 0:r.board_name)||PI("boards.uncategorized")}}});return t},qre=({board:e,setBoardToDelete:t})=>{const{t:n}=W(),r=i.useCallback(()=>{t&&t(e)},[e,t]);return a.jsxs(a.Fragment,{children:[e.image_count>0&&a.jsx(a.Fragment,{}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClick:r,children:n("boards.deleteBoard")})]})},Xre=i.memo(qre),Qre=()=>a.jsx(a.Fragment,{}),Yre=i.memo(Qre),Zre=({board:e,board_id:t,setBoardToDelete:n,children:r})=>{const{t:o}=W(),s=te(),l=i.useMemo(()=>fe(pe,({gallery:w})=>{const S=w.autoAddBoardId===t,j=w.autoAssignBoardOnClick;return{isAutoAdd:S,autoAssignBoardOnClick:j}}),[t]),{isAutoAdd:c,autoAssignBoardOnClick:d}=H(l),f=qg(t),m=Mt("bulkDownload").isFeatureEnabled,[h]=EI(),g=i.useCallback(()=>{s(Kh(t))},[t,s]),b=i.useCallback(async()=>{try{const w=await h({image_names:[],board_id:t}).unwrap();s(lt({title:o("gallery.preparingDownload"),status:"success",...w.response?{description:w.response,duration:null,isClosable:!0}:{}}))}catch{s(lt({title:o("gallery.preparingDownloadFailed"),status:"error"}))}},[o,t,h,s]),y=i.useCallback(w=>{w.preventDefault()},[]),x=i.useCallback(()=>a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:y,children:a.jsxs(_d,{title:f,children:[a.jsx(At,{icon:a.jsx(nl,{}),isDisabled:c||d,onClick:g,children:o("boards.menuItemAutoAdd")}),m&&a.jsx(At,{icon:a.jsx(ou,{}),onClickCapture:b,children:o("boards.downloadBoard")}),!e&&a.jsx(Yre,{}),e&&a.jsx(Xre,{board:e,setBoardToDelete:n})]})}),[d,e,f,b,g,c,m,n,y,o]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:x,children:r})},B8=i.memo(Zre),Jre=({board:e,isSelected:t,setBoardToDelete:n})=>{const r=te(),o=i.useMemo(()=>fe(pe,({gallery:O})=>{const T=e.board_id===O.autoAddBoardId,U=O.autoAssignBoardOnClick;return{isSelectedForAutoAdd:T,autoAssignBoardOnClick:U}}),[e.board_id]),{isSelectedForAutoAdd:s,autoAssignBoardOnClick:l}=H(o),[c,d]=i.useState(!1),f=i.useCallback(()=>{d(!0)},[]),m=i.useCallback(()=>{d(!1)},[]),{data:h}=wx(e.board_id),{data:g}=Sx(e.board_id),b=i.useMemo(()=>{if(!((h==null?void 0:h.total)===void 0||(g==null?void 0:g.total)===void 0))return`${h.total} image${h.total===1?"":"s"}, ${g.total} asset${g.total===1?"":"s"}`},[g,h]),{currentData:y}=jo(e.cover_image_name??Br),{board_name:x,board_id:w}=e,[S,j]=i.useState(x),_=i.useCallback(()=>{r(MI({boardId:w})),l&&r(Kh(w))},[w,l,r]),[I,{isLoading:E}]=mA(),M=i.useMemo(()=>({id:w,actionType:"ADD_TO_BOARD",context:{boardId:w}}),[w]),D=i.useCallback(async O=>{if(!O.trim()){j(x);return}if(O!==x)try{const{board_name:T}=await I({board_id:w,changes:{board_name:O}}).unwrap();j(T)}catch{j(x)}},[w,x,I]),R=i.useCallback(O=>{j(O)},[]),{t:N}=W();return a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx($,{onMouseOver:f,onMouseOut:m,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",w:"full",h:"full"},children:a.jsx(B8,{board:e,board_id:w,setBoardToDelete:n,children:O=>a.jsx(Ut,{label:b,openDelay:1e3,hasArrow:!0,children:a.jsxs($,{ref:O,onClick:_,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[y!=null&&y.thumbnail_url?a.jsx(Ca,{src:y==null?void 0:y.thumbnail_url,draggable:!1,sx:{objectFit:"cover",w:"full",h:"full",maxH:"full",borderRadius:"base",borderBottomRadius:"lg"}}):a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(An,{boxSize:12,as:Xte,sx:{mt:-6,opacity:.7,color:"base.500",_dark:{color:"base.500"}}})}),s&&a.jsx(z8,{}),a.jsx(d2,{isSelected:t,isHovered:c}),a.jsx($,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:t?"accent.400":"base.500",color:t?"base.50":"base.100",_dark:{bg:t?"accent.500":"base.600",color:t?"base.50":"base.100"},lineHeight:"short",fontSize:"xs"},children:a.jsxs(ef,{value:S,isDisabled:E,submitOnBlur:!0,onChange:R,onSubmit:D,sx:{w:"full"},children:[a.jsx(Jd,{sx:{p:0,fontWeight:t?700:500,textAlign:"center",overflow:"hidden",textOverflow:"ellipsis"},noOfLines:1}),a.jsx(Zd,{sx:{p:0,_focusVisible:{p:0,textAlign:"center",boxShadow:"none"}}})]})}),a.jsx(u2,{data:M,dropLabel:a.jsx(be,{fontSize:"md",children:N("unifiedCanvas.move")})})]})})})})})},eoe=i.memo(Jre),toe=fe(pe,({gallery:e})=>{const{autoAddBoardId:t,autoAssignBoardOnClick:n}=e;return{autoAddBoardId:t,autoAssignBoardOnClick:n}}),H8=i.memo(({isSelected:e})=>{const t=te(),{autoAddBoardId:n,autoAssignBoardOnClick:r}=H(toe),o=qg("none"),s=i.useCallback(()=>{t(MI({boardId:"none"})),r&&t(Kh("none"))},[t,r]),[l,c]=i.useState(!1),{data:d}=wx("none"),{data:f}=Sx("none"),m=i.useMemo(()=>{if(!((d==null?void 0:d.total)===void 0||(f==null?void 0:f.total)===void 0))return`${d.total} image${d.total===1?"":"s"}, ${f.total} asset${f.total===1?"":"s"}`},[f,d]),h=i.useCallback(()=>{c(!0)},[]),g=i.useCallback(()=>{c(!1)},[]),b=i.useMemo(()=>({id:"no_board",actionType:"REMOVE_FROM_BOARD"}),[]),{t:y}=W();return a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx($,{onMouseOver:h,onMouseOut:g,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",borderRadius:"base",w:"full",h:"full"},children:a.jsx(B8,{board_id:"none",children:x=>a.jsx(Ut,{label:m,openDelay:1e3,hasArrow:!0,children:a.jsxs($,{ref:x,onClick:s,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",sx:{opacity:.4,filter:"grayscale(1)",mt:-6,w:16,h:16,minW:16,minH:16,userSelect:"none"}})}),n==="none"&&a.jsx(z8,{}),a.jsx($,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:e?"accent.400":"base.500",color:e?"base.50":"base.100",_dark:{bg:e?"accent.500":"base.600",color:e?"base.50":"base.100"},lineHeight:"short",fontSize:"xs",fontWeight:e?700:500},children:o}),a.jsx(d2,{isSelected:e,isHovered:l}),a.jsx(u2,{data:b,dropLabel:a.jsx(be,{fontSize:"md",children:y("unifiedCanvas.move")})})]})})})})})});H8.displayName="HoverableBoard";const noe=i.memo(H8),roe=fe([pe],({gallery:e})=>{const{selectedBoardId:t,boardSearchText:n}=e;return{selectedBoardId:t,boardSearchText:n}}),ooe=e=>{const{isOpen:t}=e,{selectedBoardId:n,boardSearchText:r}=H(roe),{data:o}=Wd(),s=r?o==null?void 0:o.filter(d=>d.board_name.toLowerCase().includes(r.toLowerCase())):o,[l,c]=i.useState();return a.jsxs(a.Fragment,{children:[a.jsx(Xd,{in:t,animateOpacity:!0,children:a.jsxs($,{layerStyle:"first",sx:{flexDir:"column",gap:2,p:2,mt:2,borderRadius:"base"},children:[a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(Hre,{}),a.jsx(Lre,{})]}),a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"move",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsxs(sl,{className:"list-container","data-testid":"boards-list",sx:{gridTemplateColumns:"repeat(auto-fill, minmax(108px, 1fr));",maxH:346},children:[a.jsx(Sd,{sx:{p:1.5},"data-testid":"no-board",children:a.jsx(noe,{isSelected:n==="none"})}),s&&s.map((d,f)=>a.jsx(Sd,{sx:{p:1.5},"data-testid":`board-${f}`,children:a.jsx(eoe,{board:d,isSelected:n===d.board_id,setBoardToDelete:c})},d.board_id))]})})]})}),a.jsx(Sne,{boardToDelete:l,setBoardToDelete:c})]})},soe=i.memo(ooe),aoe=fe([pe],e=>{const{selectedBoardId:t}=e.gallery;return{selectedBoardId:t}}),loe=e=>{const{isOpen:t,onToggle:n}=e,{selectedBoardId:r}=H(aoe),o=qg(r),s=i.useMemo(()=>o.length>20?`${o.substring(0,20)}...`:o,[o]);return a.jsxs($,{as:ol,onClick:n,size:"sm",sx:{position:"relative",gap:2,w:"full",justifyContent:"space-between",alignItems:"center",px:2},children:[a.jsx(be,{noOfLines:1,sx:{fontWeight:600,w:"100%",textAlign:"center",color:"base.800",_dark:{color:"base.200"}},children:s}),a.jsx(Kg,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]})},ioe=i.memo(loe),coe=e=>{const{triggerComponent:t,children:n,hasArrow:r=!0,isLazy:o=!0,...s}=e;return a.jsxs(lf,{isLazy:o,...s,children:[a.jsx(yg,{children:t}),a.jsxs(cf,{shadow:"dark-lg",children:[r&&a.jsx(m6,{}),n]})]})},xf=i.memo(coe),uoe=e=>{const{label:t,...n}=e,{colorMode:r}=ya();return a.jsx(og,{colorScheme:"accent",...n,children:a.jsx(be,{sx:{fontSize:"sm",color:Te("base.800","base.200")(r)},children:t})})},yr=i.memo(uoe);function doe(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 16c1.671 0 3-1.331 3-3s-1.329-3-3-3-3 1.331-3 3 1.329 3 3 3z"}},{tag:"path",attr:{d:"M20.817 11.186a8.94 8.94 0 0 0-1.355-3.219 9.053 9.053 0 0 0-2.43-2.43 8.95 8.95 0 0 0-3.219-1.355 9.028 9.028 0 0 0-1.838-.18V2L8 5l3.975 3V6.002c.484-.002.968.044 1.435.14a6.961 6.961 0 0 1 2.502 1.053 7.005 7.005 0 0 1 1.892 1.892A6.967 6.967 0 0 1 19 13a7.032 7.032 0 0 1-.55 2.725 7.11 7.11 0 0 1-.644 1.188 7.2 7.2 0 0 1-.858 1.039 7.028 7.028 0 0 1-3.536 1.907 7.13 7.13 0 0 1-2.822 0 6.961 6.961 0 0 1-2.503-1.054 7.002 7.002 0 0 1-1.89-1.89A6.996 6.996 0 0 1 5 13H3a9.02 9.02 0 0 0 1.539 5.034 9.096 9.096 0 0 0 2.428 2.428A8.95 8.95 0 0 0 12 22a9.09 9.09 0 0 0 1.814-.183 9.014 9.014 0 0 0 3.218-1.355 8.886 8.886 0 0 0 1.331-1.099 9.228 9.228 0 0 0 1.1-1.332A8.952 8.952 0 0 0 21 13a9.09 9.09 0 0 0-.183-1.814z"}}]})(e)}const W8=_e((e,t)=>{const[n,r]=i.useState(!1),{label:o,value:s,min:l=1,max:c=100,step:d=1,onChange:f,tooltipSuffix:m="",withSliderMarks:h=!1,withInput:g=!1,isInteger:b=!1,inputWidth:y=16,withReset:x=!1,hideTooltip:w=!1,isCompact:S=!1,isDisabled:j=!1,sliderMarks:_,handleReset:I,sliderFormControlProps:E,sliderFormLabelProps:M,sliderMarkProps:D,sliderTrackProps:R,sliderThumbProps:N,sliderNumberInputProps:O,sliderNumberInputFieldProps:T,sliderNumberInputStepperProps:U,sliderTooltipProps:G,sliderIAIIconButtonProps:q,...Y}=e,Q=te(),{t:V}=W(),[se,ee]=i.useState(String(s));i.useEffect(()=>{ee(s)},[s]);const le=i.useMemo(()=>O!=null&&O.min?O.min:l,[l,O==null?void 0:O.min]),ae=i.useMemo(()=>O!=null&&O.max?O.max:c,[c,O==null?void 0:O.max]),ce=i.useCallback(Z=>{f(Z)},[f]),J=i.useCallback(Z=>{Z.target.value===""&&(Z.target.value=String(le));const me=Zl(b?Math.floor(Number(Z.target.value)):Number(se),le,ae),ve=Ku(me,d);f(ve),ee(ve)},[b,se,le,ae,f,d]),re=i.useCallback(Z=>{ee(Z)},[]),A=i.useCallback(()=>{I&&I()},[I]),L=i.useCallback(Z=>{Z.target instanceof HTMLDivElement&&Z.target.focus()},[]),K=i.useCallback(Z=>{Z.shiftKey&&Q(zr(!0))},[Q]),ne=i.useCallback(Z=>{Z.shiftKey||Q(zr(!1))},[Q]),z=i.useCallback(()=>r(!0),[]),oe=i.useCallback(()=>r(!1),[]),X=i.useCallback(()=>f(Number(se)),[se,f]);return a.jsxs(Gt,{ref:t,onClick:L,sx:S?{display:"flex",flexDirection:"row",alignItems:"center",columnGap:4,margin:0,padding:0}:{},isDisabled:j,...E,children:[o&&a.jsx(ln,{sx:g?{mb:-1.5}:{},...M,children:o}),a.jsxs(ug,{w:"100%",gap:2,alignItems:"center",children:[a.jsxs(Sy,{"aria-label":o,value:s,min:l,max:c,step:d,onChange:ce,onMouseEnter:z,onMouseLeave:oe,focusThumbOnChange:!1,isDisabled:j,...Y,children:[h&&!_&&a.jsxs(a.Fragment,{children:[a.jsx(Zi,{value:l,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...D,children:l}),a.jsx(Zi,{value:c,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...D,children:c})]}),h&&_&&a.jsx(a.Fragment,{children:_.map((Z,me)=>me===0?a.jsx(Zi,{value:Z,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...D,children:Z},Z):me===_.length-1?a.jsx(Zi,{value:Z,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...D,children:Z},Z):a.jsx(Zi,{value:Z,sx:{transform:"translateX(-50%)"},...D,children:Z},Z))}),a.jsx(jy,{...R,children:a.jsx(_y,{})}),a.jsx(Ut,{hasArrow:!0,placement:"top",isOpen:n,label:`${s}${m}`,hidden:w,...G,children:a.jsx(ky,{...N,zIndex:0})})]}),g&&a.jsxs(mg,{min:le,max:ae,step:d,value:se,onChange:re,onBlur:J,focusInputOnChange:!1,...O,children:[a.jsx(gg,{onKeyDown:K,onKeyUp:ne,minWidth:y,...T}),a.jsxs(hg,{...U,children:[a.jsx(bg,{onClick:X}),a.jsx(vg,{onClick:X})]})]}),x&&a.jsx(Fe,{size:"sm","aria-label":V("accessibility.reset"),tooltip:V("accessibility.reset"),icon:a.jsx(doe,{}),isDisabled:j,onClick:A,...q})]})]})});W8.displayName="IAISlider";const nt=i.memo(W8),V8=i.forwardRef(({label:e,tooltip:t,description:n,disabled:r,...o},s)=>a.jsx(Ut,{label:t,placement:"top",hasArrow:!0,openDelay:500,children:a.jsx(Ie,{ref:s,...o,children:a.jsxs(Ie,{children:[a.jsx(Oc,{children:e}),n&&a.jsx(Oc,{size:"xs",color:"base.600",children:n})]})})}));V8.displayName="IAIMantineSelectItemWithTooltip";const xl=i.memo(V8),foe=fe([pe],({gallery:e})=>{const{autoAddBoardId:t,autoAssignBoardOnClick:n}=e;return{autoAddBoardId:t,autoAssignBoardOnClick:n}}),poe=()=>{const e=te(),{t}=W(),{autoAddBoardId:n,autoAssignBoardOnClick:r}=H(foe),o=i.useRef(null),{boards:s,hasBoards:l}=Wd(void 0,{selectFromResult:({data:f})=>{const m=[{label:"None",value:"none"}];return f==null||f.forEach(({board_id:h,board_name:g})=>{m.push({label:g,value:h})}),{boards:m,hasBoards:m.length>1}}}),c=i.useCallback(f=>{f&&e(Kh(f))},[e]),d=i.useCallback((f,m)=>{var h;return((h=m.label)==null?void 0:h.toLowerCase().includes(f.toLowerCase().trim()))||m.value.toLowerCase().includes(f.toLowerCase().trim())},[]);return a.jsx(sn,{label:t("boards.autoAddBoard"),inputRef:o,autoFocus:!0,placeholder:t("boards.selectBoard"),value:n,data:s,nothingFound:t("boards.noMatching"),itemComponent:xl,disabled:!l||r,filter:d,onChange:c})},moe=i.memo(poe),hoe=fe([pe],e=>{const{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r}=e.gallery;return{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r}}),goe=()=>{const e=te(),{t}=W(),{galleryImageMinimumWidth:n,shouldAutoSwitch:r,autoAssignBoardOnClick:o}=H(hoe),s=i.useCallback(f=>{e(Fw(f))},[e]),l=i.useCallback(()=>{e(Fw(64))},[e]),c=i.useCallback(f=>{e(hA(f.target.checked))},[e]),d=i.useCallback(f=>e(gA(f.target.checked)),[e]);return a.jsx(xf,{triggerComponent:a.jsx(Fe,{tooltip:t("gallery.gallerySettings"),"aria-label":t("gallery.gallerySettings"),size:"sm",icon:a.jsx(QM,{})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(nt,{value:n,onChange:s,min:45,max:256,hideTooltip:!0,label:t("gallery.galleryImageSize"),withReset:!0,handleReset:l}),a.jsx(_n,{label:t("gallery.autoSwitchNewImages"),isChecked:r,onChange:c}),a.jsx(yr,{label:t("gallery.autoAssignBoardOnClick"),isChecked:o,onChange:d}),a.jsx(moe,{})]})})},voe=i.memo(goe),boe=e=>e.image?a.jsx(wg,{sx:{w:`${e.image.width}px`,h:"auto",objectFit:"contain",aspectRatio:`${e.image.width}/${e.image.height}`}}):a.jsx($,{sx:{opacity:.7,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(va,{size:"xl"})}),Tn=e=>{const{icon:t=si,boxSize:n=16,sx:r,...o}=e;return a.jsxs($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...r},...o,children:[t&&a.jsx(An,{as:t,boxSize:n,opacity:.7}),e.label&&a.jsx(be,{textAlign:"center",children:e.label})]})},U8=e=>{const{sx:t,...n}=e;return a.jsxs($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...t},...n,children:[a.jsx(va,{size:"xl"}),e.label&&a.jsx(be,{textAlign:"center",children:e.label})]})},Gb=(e,t)=>e>(t.endIndex-t.startIndex)/2+t.startIndex?"end":"start",lc=xA({virtuosoRef:void 0,virtuosoRangeRef:void 0}),xoe=fe([pe,kx],(e,t)=>{var j,_;const{data:n,status:r}=vA.endpoints.listImages.select(t)(e),{data:o}=e.gallery.galleryView==="images"?zw.endpoints.getBoardImagesTotal.select(t.board_id??"none")(e):zw.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(e),s=e.gallery.selection[e.gallery.selection.length-1],l=r==="pending";if(!n||!s||(o==null?void 0:o.total)===0)return{isFetching:l,queryArgs:t,isOnFirstImage:!0,isOnLastImage:!0};const c={...t,offset:n.ids.length,limit:OI},d=bA.getSelectors(),f=d.selectAll(n),m=f.findIndex(I=>I.image_name===s.image_name),h=Zl(m+1,0,f.length-1),g=Zl(m-1,0,f.length-1),b=(j=f[h])==null?void 0:j.image_name,y=(_=f[g])==null?void 0:_.image_name,x=b?d.selectById(n,b):void 0,w=y?d.selectById(n,y):void 0,S=f.length;return{loadedImagesCount:f.length,currentImageIndex:m,areMoreImagesAvailable:((o==null?void 0:o.total)??0)>S,isFetching:r==="pending",nextImage:x,prevImage:w,nextImageIndex:h,prevImageIndex:g,queryArgs:c}}),G8=()=>{const e=te(),{nextImage:t,nextImageIndex:n,prevImage:r,prevImageIndex:o,areMoreImagesAvailable:s,isFetching:l,queryArgs:c,loadedImagesCount:d,currentImageIndex:f}=H(xoe),m=i.useCallback(()=>{var w,S;r&&e(Bw(r));const y=(w=lc.get().virtuosoRangeRef)==null?void 0:w.current,x=(S=lc.get().virtuosoRef)==null?void 0:S.current;!y||!x||o!==void 0&&(oy.endIndex)&&x.scrollToIndex({index:o,behavior:"smooth",align:Gb(o,y)})},[e,r,o]),h=i.useCallback(()=>{var w,S;t&&e(Bw(t));const y=(w=lc.get().virtuosoRangeRef)==null?void 0:w.current,x=(S=lc.get().virtuosoRef)==null?void 0:S.current;!y||!x||n!==void 0&&(ny.endIndex)&&x.scrollToIndex({index:n,behavior:"smooth",align:Gb(n,y)})},[e,t,n]),[g]=DI(),b=i.useCallback(()=>{g(c)},[g,c]);return{handlePrevImage:m,handleNextImage:h,isOnFirstImage:f===0,isOnLastImage:f!==void 0&&f===d-1,nextImage:t,prevImage:r,areMoreImagesAvailable:s,handleLoadMoreImages:b,isFetching:l}},Xg=0,yl=1,lu=2,K8=4;function q8(e,t){return n=>e(t(n))}function yoe(e,t){return t(e)}function X8(e,t){return n=>e(t,n)}function Gj(e,t){return()=>e(t)}function Qg(e,t){return t(e),e}function Cn(...e){return e}function Coe(e){e()}function Kj(e){return()=>e}function woe(...e){return()=>{e.map(Coe)}}function p2(e){return e!==void 0}function iu(){}function Zt(e,t){return e(yl,t)}function St(e,t){e(Xg,t)}function m2(e){e(lu)}function to(e){return e(K8)}function at(e,t){return Zt(e,X8(t,Xg))}function ha(e,t){const n=e(yl,r=>{n(),t(r)});return n}function Nt(){const e=[];return(t,n)=>{switch(t){case lu:e.splice(0,e.length);return;case yl:return e.push(n),()=>{const r=e.indexOf(n);r>-1&&e.splice(r,1)};case Xg:e.slice().forEach(r=>{r(n)});return;default:throw new Error(`unrecognized action ${t}`)}}}function Be(e){let t=e;const n=Nt();return(r,o)=>{switch(r){case yl:o(t);break;case Xg:t=o;break;case K8:return t}return n(r,o)}}function Soe(e){let t,n;const r=()=>t&&t();return function(o,s){switch(o){case yl:return s?n===s?void 0:(r(),n=s,t=Zt(e,s),t):(r(),iu);case lu:r(),n=null;return;default:throw new Error(`unrecognized action ${o}`)}}}function ro(e){return Qg(Nt(),t=>at(e,t))}function wr(e,t){return Qg(Be(t),n=>at(e,n))}function koe(...e){return t=>e.reduceRight(yoe,t)}function Ee(e,...t){const n=koe(...t);return(r,o)=>{switch(r){case yl:return Zt(e,n(o));case lu:m2(e);return}}}function Q8(e,t){return e===t}function vn(e=Q8){let t;return n=>r=>{e(t,r)||(t=r,n(r))}}function gt(e){return t=>n=>{e(n)&&t(n)}}function Ze(e){return t=>q8(t,e)}function Zs(e){return t=>()=>t(e)}function js(e,t){return n=>r=>n(t=e(t,r))}function Fc(e){return t=>n=>{e>0?e--:t(n)}}function Qa(e){let t=null,n;return r=>o=>{t=o,!n&&(n=setTimeout(()=>{n=void 0,r(t)},e))}}function qj(e){let t,n;return r=>o=>{t=o,n&&clearTimeout(n),n=setTimeout(()=>{r(t)},e)}}function Pt(...e){const t=new Array(e.length);let n=0,r=null;const o=Math.pow(2,e.length)-1;return e.forEach((s,l)=>{const c=Math.pow(2,l);Zt(s,d=>{const f=n;n=n|c,t[l]=d,f!==o&&n===o&&r&&(r(),r=null)})}),s=>l=>{const c=()=>s([l].concat(t));n===o?c():r=c}}function Xj(...e){return function(t,n){switch(t){case yl:return woe(...e.map(r=>Zt(r,n)));case lu:return;default:throw new Error(`unrecognized action ${t}`)}}}function ht(e,t=Q8){return Ee(e,vn(t))}function er(...e){const t=Nt(),n=new Array(e.length);let r=0;const o=Math.pow(2,e.length)-1;return e.forEach((s,l)=>{const c=Math.pow(2,l);Zt(s,d=>{n[l]=d,r=r|c,r===o&&St(t,n)})}),function(s,l){switch(s){case yl:return r===o&&l(n),Zt(t,l);case lu:return m2(t);default:throw new Error(`unrecognized action ${s}`)}}}function Yt(e,t=[],{singleton:n}={singleton:!0}){return{id:joe(),constructor:e,dependencies:t,singleton:n}}const joe=()=>Symbol();function _oe(e){const t=new Map,n=({id:r,constructor:o,dependencies:s,singleton:l})=>{if(l&&t.has(r))return t.get(r);const c=o(s.map(d=>n(d)));return l&&t.set(r,c),c};return n(e)}function Ioe(e,t){const n={},r={};let o=0;const s=e.length;for(;o(w[S]=j=>{const _=x[t.methods[S]];St(_,j)},w),{})}function m(x){return l.reduce((w,S)=>(w[S]=Soe(x[t.events[S]]),w),{})}return{Component:B.forwardRef((x,w)=>{const{children:S,...j}=x,[_]=B.useState(()=>Qg(_oe(e),E=>d(E,j))),[I]=B.useState(Gj(m,_));return Qp(()=>{for(const E of l)E in j&&Zt(I[E],j[E]);return()=>{Object.values(I).map(m2)}},[j,I,_]),Qp(()=>{d(_,j)}),B.useImperativeHandle(w,Kj(f(_))),B.createElement(c.Provider,{value:_},n?B.createElement(n,Ioe([...r,...o,...l],j),S):S)}),usePublisher:x=>B.useCallback(X8(St,B.useContext(c)[x]),[x]),useEmitterValue:x=>{const S=B.useContext(c)[x],[j,_]=B.useState(Gj(to,S));return Qp(()=>Zt(S,I=>{I!==j&&_(Kj(I))}),[S,j]),j},useEmitter:(x,w)=>{const j=B.useContext(c)[x];Qp(()=>Zt(j,w),[w,j])}}}const Poe=typeof document<"u"?B.useLayoutEffect:B.useEffect,Eoe=Poe;var oo=(e=>(e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR",e))(oo||{});const Moe={0:"debug",1:"log",2:"warn",3:"error"},Ooe=()=>typeof globalThis>"u"?window:globalThis,Cl=Yt(()=>{const e=Be(3);return{log:Be((n,r,o=1)=>{var s;const l=(s=Ooe().VIRTUOSO_LOG_LEVEL)!=null?s:to(e);o>=l&&console[Moe[o]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",n,r)}),logLevel:e}},[],{singleton:!0});function h2(e,t=!0){const n=B.useRef(null);let r=o=>{};if(typeof ResizeObserver<"u"){const o=B.useMemo(()=>new ResizeObserver(s=>{const l=s[0].target;l.offsetParent!==null&&e(l)}),[e]);r=s=>{s&&t?(o.observe(s),n.current=s):(n.current&&o.unobserve(n.current),n.current=null)}}return{ref:n,callbackRef:r}}function mi(e,t=!0){return h2(e,t).callbackRef}function Doe(e,t,n,r,o,s,l){const c=B.useCallback(d=>{const f=Roe(d.children,t,"offsetHeight",o);let m=d.parentElement;for(;!m.dataset.virtuosoScroller;)m=m.parentElement;const h=m.lastElementChild.dataset.viewportType==="window",g=l?l.scrollTop:h?window.pageYOffset||document.documentElement.scrollTop:m.scrollTop,b=l?l.scrollHeight:h?document.documentElement.scrollHeight:m.scrollHeight,y=l?l.offsetHeight:h?window.innerHeight:m.offsetHeight;r({scrollTop:Math.max(g,0),scrollHeight:b,viewportHeight:y}),s==null||s(Aoe("row-gap",getComputedStyle(d).rowGap,o)),f!==null&&e(f)},[e,t,o,s,l,r]);return h2(c,n)}function Roe(e,t,n,r){const o=e.length;if(o===0)return null;const s=[];for(let l=0;l{const g=h.target,b=g===window||g===document,y=b?window.pageYOffset||document.documentElement.scrollTop:g.scrollTop,x=b?document.documentElement.scrollHeight:g.scrollHeight,w=b?window.innerHeight:g.offsetHeight,S=()=>{e({scrollTop:Math.max(y,0),scrollHeight:x,viewportHeight:w})};h.suppressFlushSync?S():yA.flushSync(S),l.current!==null&&(y===l.current||y<=0||y===x-w)&&(l.current=null,t(!0),c.current&&(clearTimeout(c.current),c.current=null))},[e,t]);B.useEffect(()=>{const h=o||s.current;return r(o||s.current),d({target:h,suppressFlushSync:!0}),h.addEventListener("scroll",d,{passive:!0}),()=>{r(null),h.removeEventListener("scroll",d)}},[s,d,n,r,o]);function f(h){const g=s.current;if(!g||"offsetHeight"in g&&g.offsetHeight===0)return;const b=h.behavior==="smooth";let y,x,w;g===window?(x=Math.max(dl(document.documentElement,"height"),document.documentElement.scrollHeight),y=window.innerHeight,w=document.documentElement.scrollTop):(x=g.scrollHeight,y=dl(g,"height"),w=g.scrollTop);const S=x-y;if(h.top=Math.ceil(Math.max(Math.min(S,h.top),0)),Z8(y,x)||h.top===w){e({scrollTop:w,scrollHeight:x,viewportHeight:y}),b&&t(!0);return}b?(l.current=h.top,c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{c.current=null,l.current=null,t(!0)},1e3)):l.current=null,g.scrollTo(h)}function m(h){s.current.scrollBy(h)}return{scrollerRef:s,scrollByCallback:m,scrollToCallback:f}}const Ir=Yt(()=>{const e=Nt(),t=Nt(),n=Be(0),r=Nt(),o=Be(0),s=Nt(),l=Nt(),c=Be(0),d=Be(0),f=Be(0),m=Be(0),h=Nt(),g=Nt(),b=Be(!1);return at(Ee(e,Ze(({scrollTop:y})=>y)),t),at(Ee(e,Ze(({scrollHeight:y})=>y)),l),at(t,o),{scrollContainerState:e,scrollTop:t,viewportHeight:s,headerHeight:c,fixedHeaderHeight:d,fixedFooterHeight:f,footerHeight:m,scrollHeight:l,smoothScrollTargetReached:r,scrollTo:h,scrollBy:g,statefulScrollTop:o,deviation:n,scrollingInProgress:b}},[],{singleton:!0}),Rd={lvl:0};function e7(e,t,n,r=Rd,o=Rd){return{k:e,v:t,lvl:n,l:r,r:o}}function on(e){return e===Rd}function Sc(){return Rd}function Kb(e,t){if(on(e))return Rd;const{k:n,l:r,r:o}=e;if(t===n){if(on(r))return o;if(on(o))return r;{const[s,l]=t7(r);return gm(Kn(e,{k:s,v:l,l:n7(r)}))}}else return tt&&(c=c.concat(qb(s,t,n))),r>=t&&r<=n&&c.push({k:r,v:o}),r<=n&&(c=c.concat(qb(l,t,n))),c}function Hl(e){return on(e)?[]:[...Hl(e.l),{k:e.k,v:e.v},...Hl(e.r)]}function t7(e){return on(e.r)?[e.k,e.v]:t7(e.r)}function n7(e){return on(e.r)?e.l:gm(Kn(e,{r:n7(e.r)}))}function Kn(e,t){return e7(t.k!==void 0?t.k:e.k,t.v!==void 0?t.v:e.v,t.lvl!==void 0?t.lvl:e.lvl,t.l!==void 0?t.l:e.l,t.r!==void 0?t.r:e.r)}function g1(e){return on(e)||e.lvl>e.r.lvl}function Qj(e){return Xb(o7(e))}function gm(e){const{l:t,r:n,lvl:r}=e;if(n.lvl>=r-1&&t.lvl>=r-1)return e;if(r>n.lvl+1){if(g1(t))return o7(Kn(e,{lvl:r-1}));if(!on(t)&&!on(t.r))return Kn(t.r,{l:Kn(t,{r:t.r.l}),r:Kn(e,{l:t.r.r,lvl:r-1}),lvl:r});throw new Error("Unexpected empty nodes")}else{if(g1(e))return Xb(Kn(e,{lvl:r-1}));if(!on(n)&&!on(n.l)){const o=n.l,s=g1(o)?n.lvl-1:n.lvl;return Kn(o,{l:Kn(e,{r:o.l,lvl:r-1}),r:Xb(Kn(n,{l:o.r,lvl:s})),lvl:o.lvl+1})}else throw new Error("Unexpected empty nodes")}}function Yg(e,t,n){if(on(e))return[];const r=us(e,t)[0];return Toe(qb(e,r,n))}function r7(e,t){const n=e.length;if(n===0)return[];let{index:r,value:o}=t(e[0]);const s=[];for(let l=1;l({index:t,value:n}))}function Xb(e){const{r:t,lvl:n}=e;return!on(t)&&!on(t.r)&&t.lvl===n&&t.r.lvl===n?Kn(t,{l:Kn(e,{r:t.l}),lvl:n+1}):e}function o7(e){const{l:t}=e;return!on(t)&&t.lvl===e.lvl?Kn(t,{r:Kn(e,{l:t.r})}):e}function Nh(e,t,n,r=0){let o=e.length-1;for(;r<=o;){const s=Math.floor((r+o)/2),l=e[s],c=n(l,t);if(c===0)return s;if(c===-1){if(o-r<2)return s-1;o=s-1}else{if(o===r)return s;r=s+1}}throw new Error(`Failed binary finding record in array - ${e.join(",")}, searched for ${t}`)}function s7(e,t,n){return e[Nh(e,t,n)]}function Noe(e,t,n,r){const o=Nh(e,t,r),s=Nh(e,n,r,o);return e.slice(o,s+1)}const g2=Yt(()=>({recalcInProgress:Be(!1)}),[],{singleton:!0});function $oe(e){const{size:t,startIndex:n,endIndex:r}=e;return o=>o.start===n&&(o.end===r||o.end===1/0)&&o.value===t}function Yj(e,t){let n=0,r=0;for(;n=m||o===g)&&(e=Kb(e,m)):(f=g!==o,d=!0),h>l&&l>=m&&g!==o&&(e=eo(e,l+1,g));f&&(e=eo(e,s,o))}return[e,n]}function Foe(){return{offsetTree:[],sizeTree:Sc(),groupOffsetTree:Sc(),lastIndex:0,lastOffset:0,lastSize:0,groupIndices:[]}}function v2({index:e},t){return t===e?0:t0&&(t=Math.max(t,s7(e,r,v2).offset)),r7(Noe(e,t,n,zoe),Boe)}function Qb(e,t,n,r){let o=e,s=0,l=0,c=0,d=0;if(t!==0){d=Nh(o,t-1,v2),c=o[d].offset;const m=us(n,t-1);s=m[0],l=m[1],o.length&&o[d].size===us(n,t)[1]&&(d-=1),o=o.slice(0,d+1)}else o=[];for(const{start:f,value:m}of Yg(n,t,1/0)){const h=f-s,g=h*l+c+h*r;o.push({offset:g,size:m,index:f}),s=f,c=g,l=m}return{offsetTree:o,lastIndex:s,lastOffset:c,lastSize:l}}function Woe(e,[t,n,r,o]){t.length>0&&r("received item sizes",t,oo.DEBUG);const s=e.sizeTree;let l=s,c=0;if(n.length>0&&on(s)&&t.length===2){const g=t[0].size,b=t[1].size;l=n.reduce((y,x)=>eo(eo(y,x,g),x+1,b),l)}else[l,c]=Loe(l,t);if(l===s)return e;const{offsetTree:d,lastIndex:f,lastSize:m,lastOffset:h}=Qb(e.offsetTree,c,l,o);return{sizeTree:l,offsetTree:d,lastIndex:f,lastOffset:h,lastSize:m,groupOffsetTree:n.reduce((g,b)=>eo(g,b,Td(b,d,o)),Sc()),groupIndices:n}}function Td(e,t,n){if(t.length===0)return 0;const{offset:r,index:o,size:s}=s7(t,e,v2),l=e-o,c=s*l+(l-1)*n+r;return c>0?c+n:c}function Voe(e){return typeof e.groupIndex<"u"}function a7(e,t,n){if(Voe(e))return t.groupIndices[e.groupIndex]+1;{const r=e.index==="LAST"?n:e.index;let o=l7(r,t);return o=Math.max(0,o,Math.min(n,o)),o}}function l7(e,t){if(!Zg(t))return e;let n=0;for(;t.groupIndices[n]<=e+n;)n++;return e+n}function Zg(e){return!on(e.groupOffsetTree)}function Uoe(e){return Hl(e).map(({k:t,v:n},r,o)=>{const s=o[r+1],l=s?s.k-1:1/0;return{startIndex:t,endIndex:l,size:n}})}const Goe={offsetHeight:"height",offsetWidth:"width"},Bs=Yt(([{log:e},{recalcInProgress:t}])=>{const n=Nt(),r=Nt(),o=wr(r,0),s=Nt(),l=Nt(),c=Be(0),d=Be([]),f=Be(void 0),m=Be(void 0),h=Be((E,M)=>dl(E,Goe[M])),g=Be(void 0),b=Be(0),y=Foe(),x=wr(Ee(n,Pt(d,e,b),js(Woe,y),vn()),y),w=wr(Ee(d,vn(),js((E,M)=>({prev:E.current,current:M}),{prev:[],current:[]}),Ze(({prev:E})=>E)),[]);at(Ee(d,gt(E=>E.length>0),Pt(x,b),Ze(([E,M,D])=>{const R=E.reduce((N,O,T)=>eo(N,O,Td(O,M.offsetTree,D)||T),Sc());return{...M,groupIndices:E,groupOffsetTree:R}})),x),at(Ee(r,Pt(x),gt(([E,{lastIndex:M}])=>E[{startIndex:E,endIndex:M,size:D}])),n),at(f,m);const S=wr(Ee(f,Ze(E=>E===void 0)),!0);at(Ee(m,gt(E=>E!==void 0&&on(to(x).sizeTree)),Ze(E=>[{startIndex:0,endIndex:0,size:E}])),n);const j=ro(Ee(n,Pt(x),js(({sizes:E},[M,D])=>({changed:D!==E,sizes:D}),{changed:!1,sizes:y}),Ze(E=>E.changed)));Zt(Ee(c,js((E,M)=>({diff:E.prev-M,prev:M}),{diff:0,prev:0}),Ze(E=>E.diff)),E=>{const{groupIndices:M}=to(x);if(E>0)St(t,!0),St(s,E+Yj(E,M));else if(E<0){const D=to(w);D.length>0&&(E-=Yj(-E,D)),St(l,E)}}),Zt(Ee(c,Pt(e)),([E,M])=>{E<0&&M("`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value",{firstItemIndex:c},oo.ERROR)});const _=ro(s);at(Ee(s,Pt(x),Ze(([E,M])=>{const D=M.groupIndices.length>0,R=[],N=M.lastSize;if(D){const O=Ad(M.sizeTree,0);let T=0,U=0;for(;T{let se=Y.ranges;return Y.prevSize!==0&&(se=[...Y.ranges,{startIndex:Y.prevIndex,endIndex:Q+E-1,size:Y.prevSize}]),{ranges:se,prevIndex:Q+E,prevSize:V}},{ranges:R,prevIndex:E,prevSize:0}).ranges}return Hl(M.sizeTree).reduce((O,{k:T,v:U})=>({ranges:[...O.ranges,{startIndex:O.prevIndex,endIndex:T+E-1,size:O.prevSize}],prevIndex:T+E,prevSize:U}),{ranges:[],prevIndex:0,prevSize:N}).ranges})),n);const I=ro(Ee(l,Pt(x,b),Ze(([E,{offsetTree:M},D])=>{const R=-E;return Td(R,M,D)})));return at(Ee(l,Pt(x,b),Ze(([E,M,D])=>{if(M.groupIndices.length>0){if(on(M.sizeTree))return M;let N=Sc();const O=to(w);let T=0,U=0,G=0;for(;T<-E;){G=O[U];const Y=O[U+1]-G-1;U++,T+=Y+1}if(N=Hl(M.sizeTree).reduce((Y,{k:Q,v:V})=>eo(Y,Math.max(0,Q+E),V),N),T!==-E){const Y=Ad(M.sizeTree,G);N=eo(N,0,Y);const Q=us(M.sizeTree,-E+1)[1];N=eo(N,1,Q)}return{...M,sizeTree:N,...Qb(M.offsetTree,0,N,D)}}else{const N=Hl(M.sizeTree).reduce((O,{k:T,v:U})=>eo(O,Math.max(0,T+E),U),Sc());return{...M,sizeTree:N,...Qb(M.offsetTree,0,N,D)}}})),x),{data:g,totalCount:r,sizeRanges:n,groupIndices:d,defaultItemSize:m,fixedItemSize:f,unshiftWith:s,shiftWith:l,shiftWithOffset:I,beforeUnshiftWith:_,firstItemIndex:c,gap:b,sizes:x,listRefresh:j,statefulTotalCount:o,trackItemSizes:S,itemSize:h}},Cn(Cl,g2),{singleton:!0}),Koe=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function i7(e){const t=typeof e=="number"?{index:e}:e;return t.align||(t.align="start"),(!t.behavior||!Koe)&&(t.behavior="auto"),t.offset||(t.offset=0),t}const yf=Yt(([{sizes:e,totalCount:t,listRefresh:n,gap:r},{scrollingInProgress:o,viewportHeight:s,scrollTo:l,smoothScrollTargetReached:c,headerHeight:d,footerHeight:f,fixedHeaderHeight:m,fixedFooterHeight:h},{log:g}])=>{const b=Nt(),y=Be(0);let x=null,w=null,S=null;function j(){x&&(x(),x=null),S&&(S(),S=null),w&&(clearTimeout(w),w=null),St(o,!1)}return at(Ee(b,Pt(e,s,t,y,d,f,g),Pt(r,m,h),Ze(([[_,I,E,M,D,R,N,O],T,U,G])=>{const q=i7(_),{align:Y,behavior:Q,offset:V}=q,se=M-1,ee=a7(q,I,se);let le=Td(ee,I.offsetTree,T)+R;Y==="end"?(le+=U+us(I.sizeTree,ee)[1]-E+G,ee===se&&(le+=N)):Y==="center"?le+=(U+us(I.sizeTree,ee)[1]-E+G)/2:le-=D,V&&(le+=V);const ae=ce=>{j(),ce?(O("retrying to scroll to",{location:_},oo.DEBUG),St(b,_)):O("list did not change, scroll successful",{},oo.DEBUG)};if(j(),Q==="smooth"){let ce=!1;S=Zt(n,J=>{ce=ce||J}),x=ha(c,()=>{ae(ce)})}else x=ha(Ee(n,qoe(150)),ae);return w=setTimeout(()=>{j()},1200),St(o,!0),O("scrolling from index to",{index:ee,top:le,behavior:Q},oo.DEBUG),{top:le,behavior:Q}})),l),{scrollToIndex:b,topListHeight:y}},Cn(Bs,Ir,Cl),{singleton:!0});function qoe(e){return t=>{const n=setTimeout(()=>{t(!1)},e);return r=>{r&&(t(!0),clearTimeout(n))}}}const Nd="up",fd="down",Xoe="none",Qoe={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollTop:0,viewportHeight:0,scrollHeight:0}},Yoe=0,Cf=Yt(([{scrollContainerState:e,scrollTop:t,viewportHeight:n,headerHeight:r,footerHeight:o,scrollBy:s}])=>{const l=Be(!1),c=Be(!0),d=Nt(),f=Nt(),m=Be(4),h=Be(Yoe),g=wr(Ee(Xj(Ee(ht(t),Fc(1),Zs(!0)),Ee(ht(t),Fc(1),Zs(!1),qj(100))),vn()),!1),b=wr(Ee(Xj(Ee(s,Zs(!0)),Ee(s,Zs(!1),qj(200))),vn()),!1);at(Ee(er(ht(t),ht(h)),Ze(([j,_])=>j<=_),vn()),c),at(Ee(c,Qa(50)),f);const y=ro(Ee(er(e,ht(n),ht(r),ht(o),ht(m)),js((j,[{scrollTop:_,scrollHeight:I},E,M,D,R])=>{const N=_+E-I>-R,O={viewportHeight:E,scrollTop:_,scrollHeight:I};if(N){let U,G;return _>j.state.scrollTop?(U="SCROLLED_DOWN",G=j.state.scrollTop-_):(U="SIZE_DECREASED",G=j.state.scrollTop-_||j.scrollTopDelta),{atBottom:!0,state:O,atBottomBecause:U,scrollTopDelta:G}}let T;return O.scrollHeight>j.state.scrollHeight?T="SIZE_INCREASED":Ej&&j.atBottom===_.atBottom))),x=wr(Ee(e,js((j,{scrollTop:_,scrollHeight:I,viewportHeight:E})=>{if(Z8(j.scrollHeight,I))return{scrollTop:_,scrollHeight:I,jump:0,changed:!1};{const M=I-(_+E)<1;return j.scrollTop!==_&&M?{scrollHeight:I,scrollTop:_,jump:j.scrollTop-_,changed:!0}:{scrollHeight:I,scrollTop:_,jump:0,changed:!0}}},{scrollHeight:0,jump:0,scrollTop:0,changed:!1}),gt(j=>j.changed),Ze(j=>j.jump)),0);at(Ee(y,Ze(j=>j.atBottom)),l),at(Ee(l,Qa(50)),d);const w=Be(fd);at(Ee(e,Ze(({scrollTop:j})=>j),vn(),js((j,_)=>to(b)?{direction:j.direction,prevScrollTop:_}:{direction:_j.direction)),w),at(Ee(e,Qa(50),Zs(Xoe)),w);const S=Be(0);return at(Ee(g,gt(j=>!j),Zs(0)),S),at(Ee(t,Qa(100),Pt(g),gt(([j,_])=>!!_),js(([j,_],[I])=>[_,I],[0,0]),Ze(([j,_])=>_-j)),S),{isScrolling:g,isAtTop:c,isAtBottom:l,atBottomState:y,atTopStateChange:f,atBottomStateChange:d,scrollDirection:w,atBottomThreshold:m,atTopThreshold:h,scrollVelocity:S,lastJumpDueToItemResize:x}},Cn(Ir)),wl=Yt(([{log:e}])=>{const t=Be(!1),n=ro(Ee(t,gt(r=>r),vn()));return Zt(t,r=>{r&&to(e)("props updated",{},oo.DEBUG)}),{propsReady:t,didMount:n}},Cn(Cl),{singleton:!0});function b2(e,t){e==0?t():requestAnimationFrame(()=>b2(e-1,t))}function x2(e,t){const n=t-1;return typeof e=="number"?e:e.index==="LAST"?n:e.index}const wf=Yt(([{sizes:e,listRefresh:t,defaultItemSize:n},{scrollTop:r},{scrollToIndex:o},{didMount:s}])=>{const l=Be(!0),c=Be(0),d=Be(!1);return at(Ee(s,Pt(c),gt(([f,m])=>!!m),Zs(!1)),l),Zt(Ee(er(t,s),Pt(l,e,n,d),gt(([[,f],m,{sizeTree:h},g,b])=>f&&(!on(h)||p2(g))&&!m&&!b),Pt(c)),([,f])=>{St(d,!0),b2(3,()=>{ha(r,()=>St(l,!0)),St(o,f)})}),{scrolledToInitialItem:l,initialTopMostItemIndex:c}},Cn(Bs,Ir,yf,wl),{singleton:!0});function Zj(e){return e?e==="smooth"?"smooth":"auto":!1}const Zoe=(e,t)=>typeof e=="function"?Zj(e(t)):t&&Zj(e),Joe=Yt(([{totalCount:e,listRefresh:t},{isAtBottom:n,atBottomState:r},{scrollToIndex:o},{scrolledToInitialItem:s},{propsReady:l,didMount:c},{log:d},{scrollingInProgress:f}])=>{const m=Be(!1),h=Nt();let g=null;function b(x){St(o,{index:"LAST",align:"end",behavior:x})}Zt(Ee(er(Ee(ht(e),Fc(1)),c),Pt(ht(m),n,s,f),Ze(([[x,w],S,j,_,I])=>{let E=w&&_,M="auto";return E&&(M=Zoe(S,j||I),E=E&&!!M),{totalCount:x,shouldFollow:E,followOutputBehavior:M}}),gt(({shouldFollow:x})=>x)),({totalCount:x,followOutputBehavior:w})=>{g&&(g(),g=null),g=ha(t,()=>{to(d)("following output to ",{totalCount:x},oo.DEBUG),b(w),g=null})});function y(x){const w=ha(r,S=>{x&&!S.atBottom&&S.notAtBottomBecause==="SIZE_INCREASED"&&!g&&(to(d)("scrolling to bottom due to increased size",{},oo.DEBUG),b("auto"))});setTimeout(w,100)}return Zt(Ee(er(ht(m),e,l),gt(([x,,w])=>x&&w),js(({value:x},[,w])=>({refreshed:x===w,value:w}),{refreshed:!1,value:0}),gt(({refreshed:x})=>x),Pt(m,e)),([,x])=>{y(x!==!1)}),Zt(h,()=>{y(to(m)!==!1)}),Zt(er(ht(m),r),([x,w])=>{x&&!w.atBottom&&w.notAtBottomBecause==="VIEWPORT_HEIGHT_DECREASING"&&b("auto")}),{followOutput:m,autoscrollToBottom:h}},Cn(Bs,Cf,yf,wf,wl,Cl,Ir));function ese(e){return e.reduce((t,n)=>(t.groupIndices.push(t.totalCount),t.totalCount+=n+1,t),{totalCount:0,groupIndices:[]})}const c7=Yt(([{totalCount:e,groupIndices:t,sizes:n},{scrollTop:r,headerHeight:o}])=>{const s=Nt(),l=Nt(),c=ro(Ee(s,Ze(ese)));return at(Ee(c,Ze(d=>d.totalCount)),e),at(Ee(c,Ze(d=>d.groupIndices)),t),at(Ee(er(r,n,o),gt(([d,f])=>Zg(f)),Ze(([d,f,m])=>us(f.groupOffsetTree,Math.max(d-m,0),"v")[0]),vn(),Ze(d=>[d])),l),{groupCounts:s,topItemsIndexes:l}},Cn(Bs,Ir));function $d(e,t){return!!(e&&e[0]===t[0]&&e[1]===t[1])}function u7(e,t){return!!(e&&e.startIndex===t.startIndex&&e.endIndex===t.endIndex)}const $h="top",Lh="bottom",Jj="none";function e_(e,t,n){return typeof e=="number"?n===Nd&&t===$h||n===fd&&t===Lh?e:0:n===Nd?t===$h?e.main:e.reverse:t===Lh?e.main:e.reverse}function t_(e,t){return typeof e=="number"?e:e[t]||0}const y2=Yt(([{scrollTop:e,viewportHeight:t,deviation:n,headerHeight:r,fixedHeaderHeight:o}])=>{const s=Nt(),l=Be(0),c=Be(0),d=Be(0),f=wr(Ee(er(ht(e),ht(t),ht(r),ht(s,$d),ht(d),ht(l),ht(o),ht(n),ht(c)),Ze(([m,h,g,[b,y],x,w,S,j,_])=>{const I=m-j,E=w+S,M=Math.max(g-I,0);let D=Jj;const R=t_(_,$h),N=t_(_,Lh);return b-=j,b+=g+S,y+=g+S,y-=j,b>m+E-R&&(D=Nd),ym!=null),vn($d)),[0,0]);return{listBoundary:s,overscan:d,topListHeight:l,increaseViewportBy:c,visibleRange:f}},Cn(Ir),{singleton:!0});function tse(e,t,n){if(Zg(t)){const r=l7(e,t);return[{index:us(t.groupOffsetTree,r)[0],size:0,offset:0},{index:r,size:0,offset:0,data:n&&n[0]}]}return[{index:e,size:0,offset:0,data:n&&n[0]}]}const v1={items:[],topItems:[],offsetTop:0,offsetBottom:0,top:0,bottom:0,topListHeight:0,totalCount:0,firstItemIndex:0};function n_(e,t,n){if(e.length===0)return[];if(!Zg(t))return e.map(f=>({...f,index:f.index+n,originalIndex:f.index}));const r=e[0].index,o=e[e.length-1].index,s=[],l=Yg(t.groupOffsetTree,r,o);let c,d=0;for(const f of e){(!c||c.end0){f=e[0].offset;const x=e[e.length-1];m=x.offset+x.size}const h=n-d,g=c+h*l+(h-1)*r,b=f,y=g-m;return{items:n_(e,o,s),topItems:n_(t,o,s),topListHeight:t.reduce((x,w)=>w.size+x,0),offsetTop:f,offsetBottom:y,top:b,bottom:m,totalCount:n,firstItemIndex:s}}function d7(e,t,n,r,o,s){let l=0;if(n.groupIndices.length>0)for(const m of n.groupIndices){if(m-l>=e)break;l++}const c=e+l,d=x2(t,c),f=Array.from({length:c}).map((m,h)=>({index:h+d,size:0,offset:0,data:s[h+d]}));return vm(f,[],c,o,n,r)}const hi=Yt(([{sizes:e,totalCount:t,data:n,firstItemIndex:r,gap:o},s,{visibleRange:l,listBoundary:c,topListHeight:d},{scrolledToInitialItem:f,initialTopMostItemIndex:m},{topListHeight:h},g,{didMount:b},{recalcInProgress:y}])=>{const x=Be([]),w=Be(0),S=Nt();at(s.topItemsIndexes,x);const j=wr(Ee(er(b,y,ht(l,$d),ht(t),ht(e),ht(m),f,ht(x),ht(r),ht(o),n),gt(([M,D,,R,,,,,,,N])=>{const O=N&&N.length!==R;return M&&!D&&!O}),Ze(([,,[M,D],R,N,O,T,U,G,q,Y])=>{const Q=N,{sizeTree:V,offsetTree:se}=Q,ee=to(w);if(R===0)return{...v1,totalCount:R};if(M===0&&D===0)return ee===0?{...v1,totalCount:R}:d7(ee,O,N,G,q,Y||[]);if(on(V))return ee>0?null:vm(tse(x2(O,R),Q,Y),[],R,q,Q,G);const le=[];if(U.length>0){const A=U[0],L=U[U.length-1];let K=0;for(const ne of Yg(V,A,L)){const z=ne.value,oe=Math.max(ne.start,A),X=Math.min(ne.end,L);for(let Z=oe;Z<=X;Z++)le.push({index:Z,size:z,offset:K,data:Y&&Y[Z]}),K+=z}}if(!T)return vm([],le,R,q,Q,G);const ae=U.length>0?U[U.length-1]+1:0,ce=Hoe(se,M,D,ae);if(ce.length===0)return null;const J=R-1,re=Qg([],A=>{for(const L of ce){const K=L.value;let ne=K.offset,z=L.start;const oe=K.size;if(K.offset=D);Z++)A.push({index:Z,size:oe,offset:ne,data:Y&&Y[Z]}),ne+=oe+q}});return vm(re,le,R,q,Q,G)}),gt(M=>M!==null),vn()),v1);at(Ee(n,gt(p2),Ze(M=>M==null?void 0:M.length)),t),at(Ee(j,Ze(M=>M.topListHeight)),h),at(h,d),at(Ee(j,Ze(M=>[M.top,M.bottom])),c),at(Ee(j,Ze(M=>M.items)),S);const _=ro(Ee(j,gt(({items:M})=>M.length>0),Pt(t,n),gt(([{items:M},D])=>M[M.length-1].originalIndex===D-1),Ze(([,M,D])=>[M-1,D]),vn($d),Ze(([M])=>M))),I=ro(Ee(j,Qa(200),gt(({items:M,topItems:D})=>M.length>0&&M[0].originalIndex===D.length),Ze(({items:M})=>M[0].index),vn())),E=ro(Ee(j,gt(({items:M})=>M.length>0),Ze(({items:M})=>{let D=0,R=M.length-1;for(;M[D].type==="group"&&DD;)R--;return{startIndex:M[D].index,endIndex:M[R].index}}),vn(u7)));return{listState:j,topItemsIndexes:x,endReached:_,startReached:I,rangeChanged:E,itemsRendered:S,initialItemCount:w,...g}},Cn(Bs,c7,y2,wf,yf,Cf,wl,g2),{singleton:!0}),nse=Yt(([{sizes:e,firstItemIndex:t,data:n,gap:r},{initialTopMostItemIndex:o},{initialItemCount:s,listState:l},{didMount:c}])=>(at(Ee(c,Pt(s),gt(([,d])=>d!==0),Pt(o,e,t,r,n),Ze(([[,d],f,m,h,g,b=[]])=>d7(d,f,m,h,g,b))),l),{}),Cn(Bs,wf,hi,wl),{singleton:!0}),f7=Yt(([{scrollVelocity:e}])=>{const t=Be(!1),n=Nt(),r=Be(!1);return at(Ee(e,Pt(r,t,n),gt(([o,s])=>!!s),Ze(([o,s,l,c])=>{const{exit:d,enter:f}=s;if(l){if(d(o,c))return!1}else if(f(o,c))return!0;return l}),vn()),t),Zt(Ee(er(t,e,n),Pt(r)),([[o,s,l],c])=>o&&c&&c.change&&c.change(s,l)),{isSeeking:t,scrollSeekConfiguration:r,scrollVelocity:e,scrollSeekRangeChanged:n}},Cn(Cf),{singleton:!0}),rse=Yt(([{topItemsIndexes:e}])=>{const t=Be(0);return at(Ee(t,gt(n=>n>0),Ze(n=>Array.from({length:n}).map((r,o)=>o))),e),{topItemCount:t}},Cn(hi)),p7=Yt(([{footerHeight:e,headerHeight:t,fixedHeaderHeight:n,fixedFooterHeight:r},{listState:o}])=>{const s=Nt(),l=wr(Ee(er(e,r,t,n,o),Ze(([c,d,f,m,h])=>c+d+f+m+h.offsetBottom+h.bottom)),0);return at(ht(l),s),{totalListHeight:l,totalListHeightChanged:s}},Cn(Ir,hi),{singleton:!0});function m7(e){let t=!1,n;return()=>(t||(t=!0,n=e()),n)}const ose=m7(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),sse=Yt(([{scrollBy:e,scrollTop:t,deviation:n,scrollingInProgress:r},{isScrolling:o,isAtBottom:s,scrollDirection:l,lastJumpDueToItemResize:c},{listState:d},{beforeUnshiftWith:f,shiftWithOffset:m,sizes:h,gap:g},{log:b},{recalcInProgress:y}])=>{const x=ro(Ee(d,Pt(c),js(([,S,j,_],[{items:I,totalCount:E,bottom:M,offsetBottom:D},R])=>{const N=M+D;let O=0;return j===E&&S.length>0&&I.length>0&&(I[0].originalIndex===0&&S[0].originalIndex===0||(O=N-_,O!==0&&(O+=R))),[O,I,E,N]},[0,[],0,0]),gt(([S])=>S!==0),Pt(t,l,r,s,b,y),gt(([,S,j,_,,,I])=>!I&&!_&&S!==0&&j===Nd),Ze(([[S],,,,,j])=>(j("Upward scrolling compensation",{amount:S},oo.DEBUG),S))));function w(S){S>0?(St(e,{top:-S,behavior:"auto"}),St(n,0)):(St(n,0),St(e,{top:-S,behavior:"auto"}))}return Zt(Ee(x,Pt(n,o)),([S,j,_])=>{_&&ose()?St(n,j-S):w(-S)}),Zt(Ee(er(wr(o,!1),n,y),gt(([S,j,_])=>!S&&!_&&j!==0),Ze(([S,j])=>j),Qa(1)),w),at(Ee(m,Ze(S=>({top:-S}))),e),Zt(Ee(f,Pt(h,g),Ze(([S,{lastSize:j,groupIndices:_,sizeTree:I},E])=>{function M(D){return D*(j+E)}if(_.length===0)return M(S);{let D=0;const R=Ad(I,0);let N=0,O=0;for(;NS&&(D-=R,T=S-N+1),N+=T,D+=M(T),O++}return D}})),S=>{St(n,S),requestAnimationFrame(()=>{St(e,{top:S}),requestAnimationFrame(()=>{St(n,0),St(y,!1)})})}),{deviation:n}},Cn(Ir,Cf,hi,Bs,Cl,g2)),ase=Yt(([{didMount:e},{scrollTo:t},{listState:n}])=>{const r=Be(0);return Zt(Ee(e,Pt(r),gt(([,o])=>o!==0),Ze(([,o])=>({top:o}))),o=>{ha(Ee(n,Fc(1),gt(s=>s.items.length>1)),()=>{requestAnimationFrame(()=>{St(t,o)})})}),{initialScrollTop:r}},Cn(wl,Ir,hi),{singleton:!0}),lse=Yt(([{viewportHeight:e},{totalListHeight:t}])=>{const n=Be(!1),r=wr(Ee(er(n,e,t),gt(([o])=>o),Ze(([,o,s])=>Math.max(0,o-s)),Qa(0),vn()),0);return{alignToBottom:n,paddingTopAddition:r}},Cn(Ir,p7),{singleton:!0}),C2=Yt(([{scrollTo:e,scrollContainerState:t}])=>{const n=Nt(),r=Nt(),o=Nt(),s=Be(!1),l=Be(void 0);return at(Ee(er(n,r),Ze(([{viewportHeight:c,scrollTop:d,scrollHeight:f},{offsetTop:m}])=>({scrollTop:Math.max(0,d-m),scrollHeight:f,viewportHeight:c}))),t),at(Ee(e,Pt(r),Ze(([c,{offsetTop:d}])=>({...c,top:c.top+d}))),o),{useWindowScroll:s,customScrollParent:l,windowScrollContainerState:n,windowViewportRect:r,windowScrollTo:o}},Cn(Ir)),ise=({itemTop:e,itemBottom:t,viewportTop:n,viewportBottom:r,locationParams:{behavior:o,align:s,...l}})=>er?{...l,behavior:o,align:s??"end"}:null,cse=Yt(([{sizes:e,totalCount:t,gap:n},{scrollTop:r,viewportHeight:o,headerHeight:s,fixedHeaderHeight:l,fixedFooterHeight:c,scrollingInProgress:d},{scrollToIndex:f}])=>{const m=Nt();return at(Ee(m,Pt(e,o,t,s,l,c,r),Pt(n),Ze(([[h,g,b,y,x,w,S,j],_])=>{const{done:I,behavior:E,align:M,calculateViewLocation:D=ise,...R}=h,N=a7(h,g,y-1),O=Td(N,g.offsetTree,_)+x+w,T=O+us(g.sizeTree,N)[1],U=j+w,G=j+b-S,q=D({itemTop:O,itemBottom:T,viewportTop:U,viewportBottom:G,locationParams:{behavior:E,align:M,...R}});return q?I&&ha(Ee(d,gt(Y=>Y===!1),Fc(to(d)?1:2)),I):I&&I(),q}),gt(h=>h!==null)),f),{scrollIntoView:m}},Cn(Bs,Ir,yf,hi,Cl),{singleton:!0}),use=Yt(([{sizes:e,sizeRanges:t},{scrollTop:n},{initialTopMostItemIndex:r},{didMount:o},{useWindowScroll:s,windowScrollContainerState:l,windowViewportRect:c}])=>{const d=Nt(),f=Be(void 0),m=Be(null),h=Be(null);return at(l,m),at(c,h),Zt(Ee(d,Pt(e,n,s,m,h)),([g,b,y,x,w,S])=>{const j=Uoe(b.sizeTree);x&&w!==null&&S!==null&&(y=w.scrollTop-S.offsetTop),g({ranges:j,scrollTop:y})}),at(Ee(f,gt(p2),Ze(dse)),r),at(Ee(o,Pt(f),gt(([,g])=>g!==void 0),vn(),Ze(([,g])=>g.ranges)),t),{getState:d,restoreStateFrom:f}},Cn(Bs,Ir,wf,wl,C2));function dse(e){return{offset:e.scrollTop,index:0,align:"start"}}const fse=Yt(([e,t,n,r,o,s,l,c,d,f])=>({...e,...t,...n,...r,...o,...s,...l,...c,...d,...f}),Cn(y2,nse,wl,f7,p7,ase,lse,C2,cse,Cl)),pse=Yt(([{totalCount:e,sizeRanges:t,fixedItemSize:n,defaultItemSize:r,trackItemSizes:o,itemSize:s,data:l,firstItemIndex:c,groupIndices:d,statefulTotalCount:f,gap:m,sizes:h},{initialTopMostItemIndex:g,scrolledToInitialItem:b},y,x,w,{listState:S,topItemsIndexes:j,..._},{scrollToIndex:I},E,{topItemCount:M},{groupCounts:D},R])=>(at(_.rangeChanged,R.scrollSeekRangeChanged),at(Ee(R.windowViewportRect,Ze(N=>N.visibleHeight)),y.viewportHeight),{totalCount:e,data:l,firstItemIndex:c,sizeRanges:t,initialTopMostItemIndex:g,scrolledToInitialItem:b,topItemsIndexes:j,topItemCount:M,groupCounts:D,fixedItemHeight:n,defaultItemHeight:r,gap:m,...w,statefulTotalCount:f,listState:S,scrollToIndex:I,trackItemSizes:o,itemSize:s,groupIndices:d,..._,...R,...y,sizes:h,...x}),Cn(Bs,wf,Ir,use,Joe,hi,yf,sse,rse,c7,fse)),b1="-webkit-sticky",r_="sticky",h7=m7(()=>{if(typeof document>"u")return r_;const e=document.createElement("div");return e.style.position=b1,e.style.position===b1?b1:r_});function g7(e,t){const n=B.useRef(null),r=B.useCallback(c=>{if(c===null||!c.offsetParent)return;const d=c.getBoundingClientRect(),f=d.width;let m,h;if(t){const g=t.getBoundingClientRect(),b=d.top-g.top;m=g.height-Math.max(0,b),h=b+t.scrollTop}else m=window.innerHeight-Math.max(0,d.top),h=d.top+window.pageYOffset;n.current={offsetTop:h,visibleHeight:m,visibleWidth:f},e(n.current)},[e,t]),{callbackRef:o,ref:s}=h2(r),l=B.useCallback(()=>{r(s.current)},[r,s]);return B.useEffect(()=>{if(t){t.addEventListener("scroll",l);const c=new ResizeObserver(l);return c.observe(t),()=>{t.removeEventListener("scroll",l),c.unobserve(t)}}else return window.addEventListener("scroll",l),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l),window.removeEventListener("resize",l)}},[l,t]),o}const v7=B.createContext(void 0),b7=B.createContext(void 0);function x7(e){return e}const mse=Yt(()=>{const e=Be(d=>`Item ${d}`),t=Be(null),n=Be(d=>`Group ${d}`),r=Be({}),o=Be(x7),s=Be("div"),l=Be(iu),c=(d,f=null)=>wr(Ee(r,Ze(m=>m[d]),vn()),f);return{context:t,itemContent:e,groupContent:n,components:r,computeItemKey:o,headerFooterTag:s,scrollerRef:l,FooterComponent:c("Footer"),HeaderComponent:c("Header"),TopItemListComponent:c("TopItemList"),ListComponent:c("List","div"),ItemComponent:c("Item","div"),GroupComponent:c("Group","div"),ScrollerComponent:c("Scroller","div"),EmptyPlaceholder:c("EmptyPlaceholder"),ScrollSeekPlaceholder:c("ScrollSeekPlaceholder")}}),hse=Yt(([e,t])=>({...e,...t}),Cn(pse,mse)),gse=({height:e})=>B.createElement("div",{style:{height:e}}),vse={position:h7(),zIndex:1,overflowAnchor:"none"},bse={overflowAnchor:"none"},o_=B.memo(function({showTopList:t=!1}){const n=Tt("listState"),r=Co("sizeRanges"),o=Tt("useWindowScroll"),s=Tt("customScrollParent"),l=Co("windowScrollContainerState"),c=Co("scrollContainerState"),d=s||o?l:c,f=Tt("itemContent"),m=Tt("context"),h=Tt("groupContent"),g=Tt("trackItemSizes"),b=Tt("itemSize"),y=Tt("log"),x=Co("gap"),{callbackRef:w}=Doe(r,b,g,t?iu:d,y,x,s),[S,j]=B.useState(0);w2("deviation",q=>{S!==q&&j(q)});const _=Tt("EmptyPlaceholder"),I=Tt("ScrollSeekPlaceholder")||gse,E=Tt("ListComponent"),M=Tt("ItemComponent"),D=Tt("GroupComponent"),R=Tt("computeItemKey"),N=Tt("isSeeking"),O=Tt("groupIndices").length>0,T=Tt("paddingTopAddition"),U=Tt("scrolledToInitialItem"),G=t?{}:{boxSizing:"border-box",paddingTop:n.offsetTop+T,paddingBottom:n.offsetBottom,marginTop:S,...U?{}:{visibility:"hidden"}};return!t&&n.totalCount===0&&_?B.createElement(_,Nr(_,m)):B.createElement(E,{...Nr(E,m),ref:w,style:G,"data-test-id":t?"virtuoso-top-item-list":"virtuoso-item-list"},(t?n.topItems:n.items).map(q=>{const Y=q.originalIndex,Q=R(Y+n.firstItemIndex,q.data,m);return N?B.createElement(I,{...Nr(I,m),key:Q,index:q.index,height:q.size,type:q.type||"item",...q.type==="group"?{}:{groupIndex:q.groupIndex}}):q.type==="group"?B.createElement(D,{...Nr(D,m),key:Q,"data-index":Y,"data-known-size":q.size,"data-item-index":q.index,style:vse},h(q.index,m)):B.createElement(M,{...Nr(M,m),...Cse(M,q.data),key:Q,"data-index":Y,"data-known-size":q.size,"data-item-index":q.index,"data-item-group-index":q.groupIndex,style:bse},O?f(q.index,q.groupIndex,q.data,m):f(q.index,q.data,m))}))}),xse={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},Jg={width:"100%",height:"100%",position:"absolute",top:0},yse={width:"100%",position:h7(),top:0,zIndex:1};function Nr(e,t){if(typeof e!="string")return{context:t}}function Cse(e,t){return{item:typeof e=="string"?void 0:t}}const wse=B.memo(function(){const t=Tt("HeaderComponent"),n=Co("headerHeight"),r=Tt("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=Tt("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),Sse=B.memo(function(){const t=Tt("FooterComponent"),n=Co("footerHeight"),r=Tt("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=Tt("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null});function y7({usePublisher:e,useEmitter:t,useEmitterValue:n}){return B.memo(function({style:s,children:l,...c}){const d=e("scrollContainerState"),f=n("ScrollerComponent"),m=e("smoothScrollTargetReached"),h=n("scrollerRef"),g=n("context"),{scrollerRef:b,scrollByCallback:y,scrollToCallback:x}=J8(d,m,f,h);return t("scrollTo",x),t("scrollBy",y),B.createElement(f,{ref:b,style:{...xse,...s},"data-test-id":"virtuoso-scroller","data-virtuoso-scroller":!0,tabIndex:0,...c,...Nr(f,g)},l)})}function C7({usePublisher:e,useEmitter:t,useEmitterValue:n}){return B.memo(function({style:s,children:l,...c}){const d=e("windowScrollContainerState"),f=n("ScrollerComponent"),m=e("smoothScrollTargetReached"),h=n("totalListHeight"),g=n("deviation"),b=n("customScrollParent"),y=n("context"),{scrollerRef:x,scrollByCallback:w,scrollToCallback:S}=J8(d,m,f,iu,b);return Eoe(()=>(x.current=b||window,()=>{x.current=null}),[x,b]),t("windowScrollTo",S),t("scrollBy",w),B.createElement(f,{style:{position:"relative",...s,...h!==0?{height:h+g}:{}},"data-virtuoso-scroller":!0,...c,...Nr(f,y)},l)})}const kse=({children:e})=>{const t=B.useContext(v7),n=Co("viewportHeight"),r=Co("fixedItemHeight"),o=mi(q8(n,s=>dl(s,"height")));return B.useEffect(()=>{t&&(n(t.viewportHeight),r(t.itemHeight))},[t,n,r]),B.createElement("div",{style:Jg,ref:o,"data-viewport-type":"element"},e)},jse=({children:e})=>{const t=B.useContext(v7),n=Co("windowViewportRect"),r=Co("fixedItemHeight"),o=Tt("customScrollParent"),s=g7(n,o);return B.useEffect(()=>{t&&(r(t.itemHeight),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:100}))},[t,n,r]),B.createElement("div",{ref:s,style:Jg,"data-viewport-type":"window"},e)},_se=({children:e})=>{const t=Tt("TopItemListComponent"),n=Tt("headerHeight"),r={...yse,marginTop:`${n}px`},o=Tt("context");return B.createElement(t||"div",{style:r,context:o},e)},Ise=B.memo(function(t){const n=Tt("useWindowScroll"),r=Tt("topItemsIndexes").length>0,o=Tt("customScrollParent"),s=o||n?Mse:Ese,l=o||n?jse:kse;return B.createElement(s,{...t},r&&B.createElement(_se,null,B.createElement(o_,{showTopList:!0})),B.createElement(l,null,B.createElement(wse,null),B.createElement(o_,null),B.createElement(Sse,null)))}),{Component:Pse,usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}=Y8(hse,{required:{},optional:{restoreStateFrom:"restoreStateFrom",context:"context",followOutput:"followOutput",itemContent:"itemContent",groupContent:"groupContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",totalCount:"totalCount",groupCounts:"groupCounts",topItemCount:"topItemCount",firstItemIndex:"firstItemIndex",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedItemHeight:"fixedItemHeight",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy",autoscrollToBottom:"autoscrollToBottom",getState:"getState"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},Ise),Ese=y7({usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}),Mse=C7({usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}),Ose=Pse,s_={items:[],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},Dse={items:[{index:0}],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},{round:a_,ceil:l_,floor:Fh,min:x1,max:pd}=Math;function Rse(e){return{...Dse,items:e}}function i_(e,t,n){return Array.from({length:t-e+1}).map((r,o)=>{const s=n===null?null:n[o+e];return{index:o+e,data:s}})}function Ase(e,t){return e&&e.column===t.column&&e.row===t.row}function Yp(e,t){return e&&e.width===t.width&&e.height===t.height}const Tse=Yt(([{overscan:e,visibleRange:t,listBoundary:n},{scrollTop:r,viewportHeight:o,scrollBy:s,scrollTo:l,smoothScrollTargetReached:c,scrollContainerState:d,footerHeight:f,headerHeight:m},h,g,{propsReady:b,didMount:y},{windowViewportRect:x,useWindowScroll:w,customScrollParent:S,windowScrollContainerState:j,windowScrollTo:_},I])=>{const E=Be(0),M=Be(0),D=Be(s_),R=Be({height:0,width:0}),N=Be({height:0,width:0}),O=Nt(),T=Nt(),U=Be(0),G=Be(null),q=Be({row:0,column:0}),Y=Nt(),Q=Nt(),V=Be(!1),se=Be(0),ee=Be(!0),le=Be(!1);Zt(Ee(y,Pt(se),gt(([L,K])=>!!K)),()=>{St(ee,!1),St(M,0)}),Zt(Ee(er(y,ee,N,R,se,le),gt(([L,K,ne,z,,oe])=>L&&!K&&ne.height!==0&&z.height!==0&&!oe)),([,,,,L])=>{St(le,!0),b2(1,()=>{St(O,L)}),ha(Ee(r),()=>{St(n,[0,0]),St(ee,!0)})}),at(Ee(Q,gt(L=>L!=null&&L.scrollTop>0),Zs(0)),M),Zt(Ee(y,Pt(Q),gt(([,L])=>L!=null)),([,L])=>{L&&(St(R,L.viewport),St(N,L==null?void 0:L.item),St(q,L.gap),L.scrollTop>0&&(St(V,!0),ha(Ee(r,Fc(1)),K=>{St(V,!1)}),St(l,{top:L.scrollTop})))}),at(Ee(R,Ze(({height:L})=>L)),o),at(Ee(er(ht(R,Yp),ht(N,Yp),ht(q,(L,K)=>L&&L.column===K.column&&L.row===K.row),ht(r)),Ze(([L,K,ne,z])=>({viewport:L,item:K,gap:ne,scrollTop:z}))),Y),at(Ee(er(ht(E),t,ht(q,Ase),ht(N,Yp),ht(R,Yp),ht(G),ht(M),ht(V),ht(ee),ht(se)),gt(([,,,,,,,L])=>!L),Ze(([L,[K,ne],z,oe,X,Z,me,,ve,de])=>{const{row:ke,column:we}=z,{height:Re,width:Qe}=oe,{width:$e}=X;if(me===0&&(L===0||$e===0))return s_;if(Qe===0){const st=x2(de,L),mt=st===0?Math.max(me-1,0):st;return Rse(i_(st,mt,Z))}const vt=w7($e,Qe,we);let it,ot;ve?K===0&&ne===0&&me>0?(it=0,ot=me-1):(it=vt*Fh((K+ke)/(Re+ke)),ot=vt*l_((ne+ke)/(Re+ke))-1,ot=x1(L-1,pd(ot,vt-1)),it=x1(ot,pd(0,it))):(it=0,ot=-1);const Ce=i_(it,ot,Z),{top:Me,bottom:qe}=c_(X,z,oe,Ce),dt=l_(L/vt),Ue=dt*Re+(dt-1)*ke-qe;return{items:Ce,offsetTop:Me,offsetBottom:Ue,top:Me,bottom:qe,itemHeight:Re,itemWidth:Qe}})),D),at(Ee(G,gt(L=>L!==null),Ze(L=>L.length)),E),at(Ee(er(R,N,D,q),gt(([L,K,{items:ne}])=>ne.length>0&&K.height!==0&&L.height!==0),Ze(([L,K,{items:ne},z])=>{const{top:oe,bottom:X}=c_(L,z,K,ne);return[oe,X]}),vn($d)),n);const ae=Be(!1);at(Ee(r,Pt(ae),Ze(([L,K])=>K||L!==0)),ae);const ce=ro(Ee(ht(D),gt(({items:L})=>L.length>0),Pt(E,ae),gt(([{items:L},K,ne])=>ne&&L[L.length-1].index===K-1),Ze(([,L])=>L-1),vn())),J=ro(Ee(ht(D),gt(({items:L})=>L.length>0&&L[0].index===0),Zs(0),vn())),re=ro(Ee(ht(D),Pt(V),gt(([{items:L},K])=>L.length>0&&!K),Ze(([{items:L}])=>({startIndex:L[0].index,endIndex:L[L.length-1].index})),vn(u7),Qa(0)));at(re,g.scrollSeekRangeChanged),at(Ee(O,Pt(R,N,E,q),Ze(([L,K,ne,z,oe])=>{const X=i7(L),{align:Z,behavior:me,offset:ve}=X;let de=X.index;de==="LAST"&&(de=z-1),de=pd(0,de,x1(z-1,de));let ke=Yb(K,oe,ne,de);return Z==="end"?ke=a_(ke-K.height+ne.height):Z==="center"&&(ke=a_(ke-K.height/2+ne.height/2)),ve&&(ke+=ve),{top:ke,behavior:me}})),l);const A=wr(Ee(D,Ze(L=>L.offsetBottom+L.bottom)),0);return at(Ee(x,Ze(L=>({width:L.visibleWidth,height:L.visibleHeight}))),R),{data:G,totalCount:E,viewportDimensions:R,itemDimensions:N,scrollTop:r,scrollHeight:T,overscan:e,scrollBy:s,scrollTo:l,scrollToIndex:O,smoothScrollTargetReached:c,windowViewportRect:x,windowScrollTo:_,useWindowScroll:w,customScrollParent:S,windowScrollContainerState:j,deviation:U,scrollContainerState:d,footerHeight:f,headerHeight:m,initialItemCount:M,gap:q,restoreStateFrom:Q,...g,initialTopMostItemIndex:se,gridState:D,totalListHeight:A,...h,startReached:J,endReached:ce,rangeChanged:re,stateChanged:Y,propsReady:b,stateRestoreInProgress:V,...I}},Cn(y2,Ir,Cf,f7,wl,C2,Cl));function c_(e,t,n,r){const{height:o}=n;if(o===void 0||r.length===0)return{top:0,bottom:0};const s=Yb(e,t,n,r[0].index),l=Yb(e,t,n,r[r.length-1].index)+o;return{top:s,bottom:l}}function Yb(e,t,n,r){const o=w7(e.width,n.width,t.column),s=Fh(r/o),l=s*n.height+pd(0,s-1)*t.row;return l>0?l+t.row:l}function w7(e,t,n){return pd(1,Fh((e+n)/(Fh(t)+n)))}const Nse=Yt(()=>{const e=Be(f=>`Item ${f}`),t=Be({}),n=Be(null),r=Be("virtuoso-grid-item"),o=Be("virtuoso-grid-list"),s=Be(x7),l=Be("div"),c=Be(iu),d=(f,m=null)=>wr(Ee(t,Ze(h=>h[f]),vn()),m);return{context:n,itemContent:e,components:t,computeItemKey:s,itemClassName:r,listClassName:o,headerFooterTag:l,scrollerRef:c,FooterComponent:d("Footer"),HeaderComponent:d("Header"),ListComponent:d("List","div"),ItemComponent:d("Item","div"),ScrollerComponent:d("Scroller","div"),ScrollSeekPlaceholder:d("ScrollSeekPlaceholder","div")}}),$se=Yt(([e,t])=>({...e,...t}),Cn(Tse,Nse)),Lse=B.memo(function(){const t=jn("gridState"),n=jn("listClassName"),r=jn("itemClassName"),o=jn("itemContent"),s=jn("computeItemKey"),l=jn("isSeeking"),c=ss("scrollHeight"),d=jn("ItemComponent"),f=jn("ListComponent"),m=jn("ScrollSeekPlaceholder"),h=jn("context"),g=ss("itemDimensions"),b=ss("gap"),y=jn("log"),x=jn("stateRestoreInProgress"),w=mi(S=>{const j=S.parentElement.parentElement.scrollHeight;c(j);const _=S.firstChild;if(_){const{width:I,height:E}=_.getBoundingClientRect();g({width:I,height:E})}b({row:u_("row-gap",getComputedStyle(S).rowGap,y),column:u_("column-gap",getComputedStyle(S).columnGap,y)})});return x?null:B.createElement(f,{ref:w,className:n,...Nr(f,h),style:{paddingTop:t.offsetTop,paddingBottom:t.offsetBottom},"data-test-id":"virtuoso-item-list"},t.items.map(S=>{const j=s(S.index,S.data,h);return l?B.createElement(m,{key:j,...Nr(m,h),index:S.index,height:t.itemHeight,width:t.itemWidth}):B.createElement(d,{...Nr(d,h),className:r,"data-index":S.index,key:j},o(S.index,S.data,h))}))}),Fse=B.memo(function(){const t=jn("HeaderComponent"),n=ss("headerHeight"),r=jn("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=jn("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),zse=B.memo(function(){const t=jn("FooterComponent"),n=ss("footerHeight"),r=jn("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=jn("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),Bse=({children:e})=>{const t=B.useContext(b7),n=ss("itemDimensions"),r=ss("viewportDimensions"),o=mi(s=>{r(s.getBoundingClientRect())});return B.useEffect(()=>{t&&(r({height:t.viewportHeight,width:t.viewportWidth}),n({height:t.itemHeight,width:t.itemWidth}))},[t,r,n]),B.createElement("div",{style:Jg,ref:o},e)},Hse=({children:e})=>{const t=B.useContext(b7),n=ss("windowViewportRect"),r=ss("itemDimensions"),o=jn("customScrollParent"),s=g7(n,o);return B.useEffect(()=>{t&&(r({height:t.itemHeight,width:t.itemWidth}),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:t.viewportWidth}))},[t,n,r]),B.createElement("div",{ref:s,style:Jg},e)},Wse=B.memo(function({...t}){const n=jn("useWindowScroll"),r=jn("customScrollParent"),o=r||n?Gse:Use,s=r||n?Hse:Bse;return B.createElement(o,{...t},B.createElement(s,null,B.createElement(Fse,null),B.createElement(Lse,null),B.createElement(zse,null)))}),{Component:Vse,usePublisher:ss,useEmitterValue:jn,useEmitter:S7}=Y8($se,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",restoreStateFrom:"restoreStateFrom",initialTopMostItemIndex:"initialTopMostItemIndex"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",stateChanged:"stateChanged"}},Wse),Use=y7({usePublisher:ss,useEmitterValue:jn,useEmitter:S7}),Gse=C7({usePublisher:ss,useEmitterValue:jn,useEmitter:S7});function u_(e,t,n){return t!=="normal"&&!(t!=null&&t.endsWith("px"))&&n(`${e} was not resolved to pixel value correctly`,t,oo.WARN),t==="normal"?0:parseInt(t??"0",10)}const Kse=Vse,qse=e=>{const t=H(s=>s.gallery.galleryView),{data:n}=wx(e),{data:r}=Sx(e),o=i.useMemo(()=>t==="images"?n==null?void 0:n.total:r==null?void 0:r.total,[t,r,n]);return{totalImages:n,totalAssets:r,currentViewTotal:o}},Xse=({imageDTO:e})=>a.jsx($,{sx:{pointerEvents:"none",flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,p:2,alignItems:"flex-start",gap:2},children:a.jsxs(Sa,{variant:"solid",colorScheme:"base",children:[e.width," × ",e.height]})}),Qse=i.memo(Xse),S2=({postUploadAction:e,isDisabled:t})=>{const n=H(d=>d.gallery.autoAddBoardId),[r]=CI(),o=i.useCallback(d=>{const f=d[0];f&&r({file:f,image_category:"user",is_intermediate:!1,postUploadAction:e??{type:"TOAST"},board_id:n==="none"?void 0:n})},[n,e,r]),{getRootProps:s,getInputProps:l,open:c}=Ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},onDropAccepted:o,disabled:t,noDrag:!0,multiple:!1});return{getUploadButtonProps:s,getUploadInputProps:l,openUploader:c}};function Yse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"}}]})(e)}function Zse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"}}]})(e)}function Jse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"}}]})(e)}function k2(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"}}]})(e)}function j2(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"}}]})(e)}function k7(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3z"}}]})(e)}const eae=()=>{const{t:e}=W(),t=te(),n=H(x=>x.gallery.selection),r=qh(jx),o=Mt("bulkDownload").isFeatureEnabled,[s]=_x(),[l]=Ix(),[c]=EI(),d=i.useCallback(()=>{t(RI(n)),t(yx(!0))},[t,n]),f=i.useCallback(()=>{t(Xh(n))},[t,n]),m=i.useCallback(()=>{s({imageDTOs:n})},[s,n]),h=i.useCallback(()=>{l({imageDTOs:n})},[l,n]),g=i.useCallback(async()=>{try{const x=await c({image_names:n.map(w=>w.image_name)}).unwrap();t(lt({title:e("gallery.preparingDownload"),status:"success",...x.response?{description:x.response,duration:null,isClosable:!0}:{}}))}catch{t(lt({title:e("gallery.preparingDownloadFailed"),status:"error"}))}},[e,n,c,t]),b=i.useMemo(()=>n.every(x=>x.starred),[n]),y=i.useMemo(()=>n.every(x=>!x.starred),[n]);return a.jsxs(a.Fragment,{children:[b&&a.jsx(At,{icon:r?r.on.icon:a.jsx(k2,{}),onClickCapture:h,children:r?r.off.text:"Unstar All"}),(y||!b&&!y)&&a.jsx(At,{icon:r?r.on.icon:a.jsx(j2,{}),onClickCapture:m,children:r?r.on.text:"Star All"}),o&&a.jsx(At,{icon:a.jsx(ou,{}),onClickCapture:g,children:e("gallery.downloadSelection")}),a.jsx(At,{icon:a.jsx(BM,{}),onClickCapture:d,children:e("boards.changeBoard")}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClickCapture:f,children:e("gallery.deleteSelection")})]})},tae=i.memo(eae),nae=()=>i.useCallback(async t=>new Promise(n=>{const r=new Image;r.onload=()=>{const o=document.createElement("canvas");o.width=r.width,o.height=r.height;const s=o.getContext("2d");s&&(s.drawImage(r,0,0),n(new Promise(l=>{o.toBlob(function(c){l(c)},"image/png")})))},r.crossOrigin=AI.get()?"use-credentials":"anonymous",r.src=t}),[]),j7=()=>{const e=zs(),{t}=W(),n=nae(),r=i.useMemo(()=>!!navigator.clipboard&&!!window.ClipboardItem,[]),o=i.useCallback(async s=>{r||e({title:t("toast.problemCopyingImage"),description:"Your browser doesn't support the Clipboard API.",status:"error",duration:2500,isClosable:!0});try{const l=await n(s);if(!l)throw new Error("Unable to create Blob");CA(l),e({title:t("toast.imageCopied"),status:"success",duration:2500,isClosable:!0})}catch(l){e({title:t("toast.problemCopyingImage"),description:String(l),status:"error",duration:2500,isClosable:!0})}},[n,r,t,e]);return{isClipboardAPIAvailable:r,copyImageToClipboard:o}};Px("gallery/requestedBoardImagesDeletion");const rae=Px("gallery/sentImageToCanvas"),_7=Px("gallery/sentImageToImg2Img"),oae=fe(pe,({generation:e})=>e.model),Sf=()=>{const e=te(),t=zs(),{t:n}=W(),r=H(oae),o=i.useCallback(()=>{t({title:n("toast.parameterSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),s=i.useCallback(A=>{t({title:n("toast.parameterNotSet"),description:A,status:"warning",duration:2500,isClosable:!0})},[n,t]),l=i.useCallback(()=>{t({title:n("toast.parametersSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),c=i.useCallback(A=>{t({title:n("toast.parametersNotSet"),status:"warning",description:A,duration:2500,isClosable:!0})},[n,t]),d=i.useCallback((A,L,K,ne)=>{if(bp(A)||xp(L)||Tu(K)||_v(ne)){bp(A)&&e(nd(A)),xp(L)&&e(rd(L)),Tu(K)&&e(od(K)),Tu(ne)&&e(sd(ne)),o();return}s()},[e,o,s]),f=i.useCallback(A=>{if(!bp(A)){s();return}e(nd(A)),o()},[e,o,s]),m=i.useCallback(A=>{if(!xp(A)){s();return}e(rd(A)),o()},[e,o,s]),h=i.useCallback(A=>{if(!Tu(A)){s();return}e(od(A)),o()},[e,o,s]),g=i.useCallback(A=>{if(!_v(A)){s();return}e(sd(A)),o()},[e,o,s]),b=i.useCallback(A=>{if(!Hw(A)){s();return}e(ym(A)),o()},[e,o,s]),y=i.useCallback(A=>{if(!Iv(A)){s();return}e(Cm(A)),o()},[e,o,s]),x=i.useCallback(A=>{if(!Ww(A)){s();return}e(wm(A)),o()},[e,o,s]),w=i.useCallback(A=>{if(!Vw(A)){s();return}e(N1(A)),o()},[e,o,s]),S=i.useCallback(A=>{if(!Pv(A)){s();return}e($1(A)),o()},[e,o,s]),j=i.useCallback(A=>{if(!Uw(A)&&!na(A)){s();return}na(A)?e(nc(null)):e(nc(A)),o()},[e,o,s]),_=i.useCallback(A=>{if(!Ev(A)){s();return}e(Sm(A)),o()},[e,o,s]),I=i.useCallback(A=>{if(!Mv(A)){s();return}e(Za(A)),o()},[e,o,s]),E=i.useCallback(A=>{if(!Ov(A)){s();return}e(Ja(A)),o()},[e,o,s]),M=i.useCallback((A,L)=>{if(!Mv(A)){c();return}if(!Ov(L)){c();return}e(Ja(L)),e(Za(A)),l()},[e,l,c]),D=i.useCallback(A=>{if(!yp(A)){s();return}e(km(A)),o()},[e,o,s]),R=i.useCallback(A=>{if(!Gw(A)){s();return}e(L1(A)),o()},[e,o,s]),N=i.useCallback(A=>{if(!yp(A)){s();return}e(jm(A)),o()},[e,o,s]),O=i.useCallback(A=>{if(!Kw(A)){s();return}e(F1(A)),o()},[e,o,s]),{data:T}=Vd(void 0),U=i.useCallback(A=>{if(!TI(A.lora))return{lora:null,error:"Invalid LoRA model"};const{base_model:L,model_name:K}=A.lora,ne=T?wA.getSelectors().selectById(T,`${L}/lora/${K}`):void 0;return ne?(ne==null?void 0:ne.base_model)===(r==null?void 0:r.base_model)?{lora:ne,error:null}:{lora:null,error:"LoRA incompatible with currently-selected model"}:{lora:null,error:"LoRA model is not installed"}},[T,r==null?void 0:r.base_model]),G=i.useCallback(A=>{const L=U(A);if(!L.lora){s(L.error);return}e(qw({...L.lora,weight:A.weight})),o()},[U,e,o,s]),{data:q}=Ex(void 0),Y=i.useCallback(A=>{if(!_m(A.control_model))return{controlnet:null,error:"Invalid ControlNet model"};const{image:L,control_model:K,control_weight:ne,begin_step_percent:z,end_step_percent:oe,control_mode:X,resize_mode:Z}=A,me=q?NI.getSelectors().selectById(q,`${K.base_model}/controlnet/${K.model_name}`):void 0;if(!me)return{controlnet:null,error:"ControlNet model is not installed"};if(!((me==null?void 0:me.base_model)===(r==null?void 0:r.base_model)))return{controlnet:null,error:"ControlNet incompatible with currently-selected model"};const de="none",ke=jr.none.default;return{controlnet:{type:"controlnet",isEnabled:!0,model:me,weight:typeof ne=="number"?ne:Nu.weight,beginStepPct:z||Nu.beginStepPct,endStepPct:oe||Nu.endStepPct,controlMode:X||Nu.controlMode,resizeMode:Z||Nu.resizeMode,controlImage:(L==null?void 0:L.image_name)||null,processedControlImage:(L==null?void 0:L.image_name)||null,processorType:de,processorNode:ke,shouldAutoConfig:!0,id:Ya()},error:null}},[q,r==null?void 0:r.base_model]),Q=i.useCallback(A=>{const L=Y(A);if(!L.controlnet){s(L.error);return}e(Ti(L.controlnet)),o()},[Y,e,o,s]),{data:V}=Mx(void 0),se=i.useCallback(A=>{if(!_m(A.t2i_adapter_model))return{controlnet:null,error:"Invalid ControlNet model"};const{image:L,t2i_adapter_model:K,weight:ne,begin_step_percent:z,end_step_percent:oe,resize_mode:X}=A,Z=V?$I.getSelectors().selectById(V,`${K.base_model}/t2i_adapter/${K.model_name}`):void 0;if(!Z)return{controlnet:null,error:"ControlNet model is not installed"};if(!((Z==null?void 0:Z.base_model)===(r==null?void 0:r.base_model)))return{t2iAdapter:null,error:"ControlNet incompatible with currently-selected model"};const ve="none",de=jr.none.default;return{t2iAdapter:{type:"t2i_adapter",isEnabled:!0,model:Z,weight:typeof ne=="number"?ne:Cp.weight,beginStepPct:z||Cp.beginStepPct,endStepPct:oe||Cp.endStepPct,resizeMode:X||Cp.resizeMode,controlImage:(L==null?void 0:L.image_name)||null,processedControlImage:(L==null?void 0:L.image_name)||null,processorType:ve,processorNode:de,shouldAutoConfig:!0,id:Ya()},error:null}},[r==null?void 0:r.base_model,V]),ee=i.useCallback(A=>{const L=se(A);if(!L.t2iAdapter){s(L.error);return}e(Ti(L.t2iAdapter)),o()},[se,e,o,s]),{data:le}=Ox(void 0),ae=i.useCallback(A=>{if(!SA(A==null?void 0:A.ip_adapter_model))return{ipAdapter:null,error:"Invalid IP Adapter model"};const{image:L,ip_adapter_model:K,weight:ne,begin_step_percent:z,end_step_percent:oe}=A,X=le?LI.getSelectors().selectById(le,`${K.base_model}/ip_adapter/${K.model_name}`):void 0;return X?(X==null?void 0:X.base_model)===(r==null?void 0:r.base_model)?{ipAdapter:{id:Ya(),type:"ip_adapter",isEnabled:!0,controlImage:(L==null?void 0:L.image_name)??null,model:X,weight:ne??Dv.weight,beginStepPct:z??Dv.beginStepPct,endStepPct:oe??Dv.endStepPct},error:null}:{ipAdapter:null,error:"IP Adapter incompatible with currently-selected model"}:{ipAdapter:null,error:"IP Adapter model is not installed"}},[le,r==null?void 0:r.base_model]),ce=i.useCallback(A=>{const L=ae(A);if(!L.ipAdapter){s(L.error);return}e(Ti(L.ipAdapter)),o()},[ae,e,o,s]),J=i.useCallback(A=>{e(Qh(A))},[e]),re=i.useCallback(A=>{if(!A){c();return}const{cfg_scale:L,cfg_rescale_multiplier:K,height:ne,model:z,positive_prompt:oe,negative_prompt:X,scheduler:Z,vae:me,seed:ve,steps:de,width:ke,strength:we,hrf_enabled:Re,hrf_strength:Qe,hrf_method:$e,positive_style_prompt:vt,negative_style_prompt:it,refiner_model:ot,refiner_cfg_scale:Ce,refiner_steps:Me,refiner_scheduler:qe,refiner_positive_aesthetic_score:dt,refiner_negative_aesthetic_score:ye,refiner_start:Ue,loras:st,controlnets:mt,ipAdapters:Pe,t2iAdapters:Ne}=A;Iv(L)&&e(Cm(L)),Ww(K)&&e(wm(K)),Vw(z)&&e(N1(z)),bp(oe)&&e(nd(oe)),xp(X)&&e(rd(X)),Pv(Z)&&e($1(Z)),(Uw(me)||na(me))&&(na(me)?e(nc(null)):e(nc(me))),Hw(ve)&&e(ym(ve)),Ev(de)&&e(Sm(de)),Mv(ke)&&e(Za(ke)),Ov(ne)&&e(Ja(ne)),yp(we)&&e(km(we)),Gw(Re)&&e(L1(Re)),yp(Qe)&&e(jm(Qe)),Kw($e)&&e(F1($e)),Tu(vt)&&e(od(vt)),_v(it)&&e(sd(it)),kA(ot)&&e(FI(ot)),Ev(Me)&&e(z1(Me)),Iv(Ce)&&e(B1(Ce)),Pv(qe)&&e(zI(qe)),jA(dt)&&e(H1(dt)),_A(ye)&&e(W1(ye)),IA(Ue)&&e(V1(Ue)),e(PA()),st==null||st.forEach(kt=>{const Se=U(kt);Se.lora&&e(qw({...Se.lora,weight:kt.weight}))}),e(kI()),mt==null||mt.forEach(kt=>{const Se=Y(kt);Se.controlnet&&e(Ti(Se.controlnet))}),Pe==null||Pe.forEach(kt=>{const Se=ae(kt);Se.ipAdapter&&e(Ti(Se.ipAdapter))}),Ne==null||Ne.forEach(kt=>{const Se=se(kt);Se.t2iAdapter&&e(Ti(Se.t2iAdapter))}),l()},[e,l,c,U,Y,ae,se]);return{recallBothPrompts:d,recallPositivePrompt:f,recallNegativePrompt:m,recallSDXLPositiveStylePrompt:h,recallSDXLNegativeStylePrompt:g,recallSeed:b,recallCfgScale:y,recallCfgRescaleMultiplier:x,recallModel:w,recallScheduler:S,recallVaeModel:j,recallSteps:_,recallWidth:I,recallHeight:E,recallWidthAndHeight:M,recallStrength:D,recallHrfEnabled:R,recallHrfStrength:N,recallHrfMethod:O,recallLoRA:G,recallControlNet:Q,recallIPAdapter:ce,recallT2IAdapter:ee,recallAllParameters:re,sendToImageToImage:J}},I7=({onSuccess:e,onError:t})=>{const n=te(),r=zs(),{t:o}=W(),[s,l]=EA();return{getAndLoadEmbeddedWorkflow:i.useCallback(async d=>{try{const f=await s(d);n(Dx({workflow:f.data,asCopy:!0})),e&&e()}catch{r({title:o("toast.problemRetrievingWorkflow"),status:"error"}),t&&t()}},[s,n,e,r,o,t]),getAndLoadEmbeddedWorkflowResult:l}};function sae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M125.7 160H176c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32s32 14.3 32 32v51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z"}}]})(e)}function aae(e){return De({tag:"svg",attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z"}}]})(e)}function lae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"}}]})(e)}function e0(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z"}}]})(e)}function P7(e){return De({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z"}}]})(e)}function iae(e){return De({tag:"svg",attr:{viewBox:"0 0 576 512"},child:[{tag:"path",attr:{d:"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6V105.5L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0h18.1c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z"}}]})(e)}function cae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z"}}]})(e)}function uae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"}}]})(e)}function dae(e,t,n){var r=this,o=i.useRef(null),s=i.useRef(0),l=i.useRef(null),c=i.useRef([]),d=i.useRef(),f=i.useRef(),m=i.useRef(e),h=i.useRef(!0);m.current=e;var g=typeof window<"u",b=!t&&t!==0&&g;if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var y=!!(n=n||{}).leading,x=!("trailing"in n)||!!n.trailing,w="maxWait"in n,S="debounceOnServer"in n&&!!n.debounceOnServer,j=w?Math.max(+n.maxWait||0,t):null;i.useEffect(function(){return h.current=!0,function(){h.current=!1}},[]);var _=i.useMemo(function(){var I=function(O){var T=c.current,U=d.current;return c.current=d.current=null,s.current=O,f.current=m.current.apply(U,T)},E=function(O,T){b&&cancelAnimationFrame(l.current),l.current=b?requestAnimationFrame(O):setTimeout(O,T)},M=function(O){if(!h.current)return!1;var T=O-o.current;return!o.current||T>=t||T<0||w&&O-s.current>=j},D=function(O){return l.current=null,x&&c.current?I(O):(c.current=d.current=null,f.current)},R=function O(){var T=Date.now();if(M(T))return D(T);if(h.current){var U=t-(T-o.current),G=w?Math.min(U,j-(T-s.current)):U;E(O,G)}},N=function(){if(g||S){var O=Date.now(),T=M(O);if(c.current=[].slice.call(arguments),d.current=r,o.current=O,T){if(!l.current&&h.current)return s.current=o.current,E(R,t),y?I(o.current):f.current;if(w)return E(R,t),I(o.current)}return l.current||E(R,t),f.current}};return N.cancel=function(){l.current&&(b?cancelAnimationFrame(l.current):clearTimeout(l.current)),s.current=0,c.current=o.current=d.current=l.current=null},N.isPending=function(){return!!l.current},N.flush=function(){return l.current?D(Date.now()):f.current},N},[y,w,t,j,x,b,g,S]);return _}function fae(e,t){return e===t}function pae(e,t){return t}function kc(e,t,n){var r=n&&n.equalityFn||fae,o=i.useReducer(pae,e),s=o[0],l=o[1],c=dae(i.useCallback(function(f){return l(f)},[l]),t,n),d=i.useRef(e);return r(d.current,e)||(c(e),d.current=e),[s,c]}const _2=e=>{const t=H(s=>s.config.metadataFetchDebounce??300),[n]=kc(e,t),{data:r,isLoading:o}=BI(n??Br);return{metadata:r,isLoading:o}},mae=e=>{const{imageDTO:t}=e,n=te(),{t:r}=W(),o=zs(),s=Mt("unifiedCanvas").isFeatureEnabled,l=qh(jx),{metadata:c,isLoading:d}=_2(t==null?void 0:t.image_name),{getAndLoadEmbeddedWorkflow:f,getAndLoadEmbeddedWorkflowResult:m}=I7({}),h=i.useCallback(()=>{f(t.image_name)},[f,t.image_name]),[g]=_x(),[b]=Ix(),{isClipboardAPIAvailable:y,copyImageToClipboard:x}=j7(),w=i.useCallback(()=>{t&&n(Xh([t]))},[n,t]),{recallBothPrompts:S,recallSeed:j,recallAllParameters:_}=Sf(),I=i.useCallback(()=>{S(c==null?void 0:c.positive_prompt,c==null?void 0:c.negative_prompt,c==null?void 0:c.positive_style_prompt,c==null?void 0:c.negative_style_prompt)},[c==null?void 0:c.negative_prompt,c==null?void 0:c.positive_prompt,c==null?void 0:c.positive_style_prompt,c==null?void 0:c.negative_style_prompt,S]),E=i.useCallback(()=>{j(c==null?void 0:c.seed)},[c==null?void 0:c.seed,j]),M=i.useCallback(()=>{n(_7()),n(Qh(t))},[n,t]),D=i.useCallback(()=>{n(rae()),Jr.flushSync(()=>{n(Js("unifiedCanvas"))}),n(HI(t)),o({title:r("toast.sentToUnifiedCanvas"),status:"success",duration:2500,isClosable:!0})},[n,t,r,o]),R=i.useCallback(()=>{_(c)},[c,_]),N=i.useCallback(()=>{n(RI([t])),n(yx(!0))},[n,t]),O=i.useCallback(()=>{x(t.image_url)},[x,t.image_url]),T=i.useCallback(()=>{t&&g({imageDTOs:[t]})},[g,t]),U=i.useCallback(()=>{t&&b({imageDTOs:[t]})},[b,t]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"a",href:t.image_url,target:"_blank",icon:a.jsx(Xy,{}),children:r("common.openInNewTab")}),y&&a.jsx(At,{icon:a.jsx(ru,{}),onClickCapture:O,children:r("parameters.copyImage")}),a.jsx(At,{as:"a",download:!0,href:t.image_url,target:"_blank",icon:a.jsx(ou,{}),w:"100%",children:r("parameters.downloadImage")}),a.jsx(At,{icon:m.isLoading?a.jsx(Zp,{}):a.jsx(e0,{}),onClickCapture:h,isDisabled:!t.has_workflow,children:r("nodes.loadWorkflow")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(GM,{}),onClickCapture:I,isDisabled:d||(c==null?void 0:c.positive_prompt)===void 0&&(c==null?void 0:c.negative_prompt)===void 0,children:r("parameters.usePrompt")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(KM,{}),onClickCapture:E,isDisabled:d||(c==null?void 0:c.seed)===void 0,children:r("parameters.useSeed")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(NM,{}),onClickCapture:R,isDisabled:d||!c,children:r("parameters.useAll")}),a.jsx(At,{icon:a.jsx(xj,{}),onClickCapture:M,id:"send-to-img2img",children:r("parameters.sendToImg2Img")}),s&&a.jsx(At,{icon:a.jsx(xj,{}),onClickCapture:D,id:"send-to-canvas",children:r("parameters.sendToUnifiedCanvas")}),a.jsx(At,{icon:a.jsx(BM,{}),onClickCapture:N,children:r("boards.changeBoard")}),t.starred?a.jsx(At,{icon:l?l.off.icon:a.jsx(j2,{}),onClickCapture:U,children:l?l.off.text:r("gallery.unstarImage")}):a.jsx(At,{icon:l?l.on.icon:a.jsx(k2,{}),onClickCapture:T,children:l?l.on.text:r("gallery.starImage")}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClickCapture:w,children:r("gallery.deleteImage")})]})},E7=i.memo(mae),Zp=()=>a.jsx($,{w:"14px",alignItems:"center",justifyContent:"center",children:a.jsx(va,{size:"xs"})}),hae=fe([pe],({gallery:e})=>({selectionCount:e.selection.length})),gae=({imageDTO:e,children:t})=>{const{selectionCount:n}=H(hae),r=i.useCallback(s=>{s.preventDefault()},[]),o=i.useCallback(()=>e?n>1?a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:r,children:a.jsx(tae,{})}):a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:r,children:a.jsx(E7,{imageDTO:e})}):null,[e,n,r]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:o,children:t})},vae=i.memo(gae),bae=e=>{const{data:t,disabled:n,...r}=e,o=i.useRef(Ya()),{attributes:s,listeners:l,setNodeRef:c}=Wre({id:o.current,disabled:n,data:t});return a.jsx(Ie,{ref:c,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,...s,...l,...r})},xae=i.memo(bae),yae=a.jsx(An,{as:$g,sx:{boxSize:16}}),Cae=a.jsx(Tn,{icon:si}),wae=e=>{const{imageDTO:t,onError:n,onClick:r,withMetadataOverlay:o=!1,isDropDisabled:s=!1,isDragDisabled:l=!1,isUploadDisabled:c=!1,minSize:d=24,postUploadAction:f,imageSx:m,fitContainer:h=!1,droppableData:g,draggableData:b,dropLabel:y,isSelected:x=!1,thumbnail:w=!1,noContentFallback:S=Cae,uploadElement:j=yae,useThumbailFallback:_,withHoverOverlay:I=!1,children:E,onMouseOver:M,onMouseOut:D,dataTestId:R}=e,{colorMode:N}=ya(),[O,T]=i.useState(!1),U=i.useCallback(V=>{M&&M(V),T(!0)},[M]),G=i.useCallback(V=>{D&&D(V),T(!1)},[D]),{getUploadButtonProps:q,getUploadInputProps:Y}=S2({postUploadAction:f,isDisabled:c}),Q=c?{}:{cursor:"pointer",bg:Te("base.200","base.700")(N),_hover:{bg:Te("base.300","base.650")(N),color:Te("base.500","base.300")(N)}};return a.jsx(vae,{imageDTO:t,children:V=>a.jsxs($,{ref:V,onMouseOver:U,onMouseOut:G,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative",minW:d||void 0,minH:d||void 0,userSelect:"none",cursor:l||!t?"default":"pointer"},children:[t&&a.jsxs($,{sx:{w:"full",h:"full",position:h?"absolute":"relative",alignItems:"center",justifyContent:"center"},children:[a.jsx(Ca,{src:w?t.thumbnail_url:t.image_url,fallbackStrategy:"beforeLoadOrError",fallbackSrc:_?t.thumbnail_url:void 0,fallback:_?void 0:a.jsx(boe,{image:t}),onError:n,draggable:!1,sx:{w:t.width,objectFit:"contain",maxW:"full",maxH:"full",borderRadius:"base",...m},"data-testid":R}),o&&a.jsx(Qse,{imageDTO:t}),a.jsx(d2,{isSelected:x,isHovered:I?O:!1})]}),!t&&!c&&a.jsx(a.Fragment,{children:a.jsxs($,{sx:{minH:d,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",transitionProperty:"common",transitionDuration:"0.1s",color:Te("base.500","base.500")(N),...Q},...q(),children:[a.jsx("input",{...Y()}),j]})}),!t&&c&&S,t&&!l&&a.jsx(xae,{data:b,disabled:l||!t,onClick:r}),E,!s&&a.jsx(u2,{data:g,disabled:s,dropLabel:y})]})})},fl=i.memo(wae),Sae=e=>{const{onClick:t,tooltip:n,icon:r,styleOverrides:o}=e,s=ia("drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))","drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))");return a.jsx(Fe,{onClick:t,"aria-label":n,tooltip:n,icon:r,size:"sm",variant:"link",sx:{position:"absolute",top:1,insetInlineEnd:1,p:0,minW:0,svg:{transitionProperty:"common",transitionDuration:"normal",fill:"base.100",_hover:{fill:"base.50"},filter:s},...o},"data-testid":n})},jc=i.memo(Sae),kae=()=>a.jsx(wg,{sx:{position:"relative",height:"full",width:"full","::before":{content:"''",display:"block",pt:"100%"}},children:a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,height:"full",width:"full"}})}),jae=i.memo(kae),_ae=fe([pe,kx],({gallery:e},t)=>{const n=e.selection;return{queryArgs:t,selection:n}}),Iae=e=>{const t=te(),{queryArgs:n,selection:r}=H(_ae),{imageDTOs:o}=WI(n,{selectFromResult:f=>({imageDTOs:f.data?MA.selectAll(f.data):[]})}),s=Mt("multiselect").isFeatureEnabled,l=i.useCallback(f=>{var m;if(e){if(!s){t($u([e]));return}if(f.shiftKey){const h=e.image_name,g=(m=r[r.length-1])==null?void 0:m.image_name,b=o.findIndex(x=>x.image_name===g),y=o.findIndex(x=>x.image_name===h);if(b>-1&&y>-1){const x=Math.min(b,y),w=Math.max(b,y),S=o.slice(x,w+1);t($u(r.concat(S)))}}else f.ctrlKey||f.metaKey?r.some(h=>h.image_name===e.image_name)&&r.length>1?t($u(r.filter(h=>h.image_name!==e.image_name))):t($u(r.concat(e))):t($u([e]))}},[t,e,o,r,s]),c=i.useMemo(()=>e?r.some(f=>f.image_name===e.image_name):!1,[e,r]),d=i.useMemo(()=>r.length,[r.length]);return{selection:r,selectionCount:d,isSelected:c,handleClick:l}},Pae=(e,t,n,r)=>{const o=i.useRef(null);return i.useEffect(()=>{if(!e||n!==1||!r.rootRef.current||!r.virtuosoRef.current||!r.virtuosoRangeRef.current||!o.current)return;const s=o.current.getBoundingClientRect(),l=r.rootRef.current.getBoundingClientRect();s.top>=l.top&&s.bottom<=l.bottom&&s.left>=l.left&&s.right<=l.right||r.virtuosoRef.current.scrollToIndex({index:t,behavior:"smooth",align:Gb(t,r.virtuosoRangeRef.current)})},[e,t,n,r]),o},Eae=e=>{const t=te(),{imageName:n,virtuosoContext:r}=e,{currentData:o}=jo(n),s=H(R=>R.hotkeys.shift),{t:l}=W(),{handleClick:c,isSelected:d,selection:f,selectionCount:m}=Iae(o),h=qh(jx),g=Pae(d,e.index,m,r),b=i.useCallback(R=>{R.stopPropagation(),o&&t(Xh([o]))},[t,o]),y=i.useMemo(()=>{if(m>1)return{id:"gallery-image",payloadType:"IMAGE_DTOS",payload:{imageDTOs:f}};if(o)return{id:"gallery-image",payloadType:"IMAGE_DTO",payload:{imageDTO:o}}},[o,f,m]),[x]=_x(),[w]=Ix(),S=i.useCallback(()=>{o&&(o.starred&&w({imageDTOs:[o]}),o.starred||x({imageDTOs:[o]}))},[x,w,o]),[j,_]=i.useState(!1),I=i.useCallback(()=>{_(!0)},[]),E=i.useCallback(()=>{_(!1)},[]),M=i.useMemo(()=>{if(o!=null&&o.starred)return h?h.on.icon:a.jsx(j2,{size:"20"});if(!(o!=null&&o.starred)&&j)return h?h.off.icon:a.jsx(k2,{size:"20"})},[o==null?void 0:o.starred,j,h]),D=i.useMemo(()=>o!=null&&o.starred?h?h.off.text:"Unstar":o!=null&&o.starred?"":h?h.on.text:"Star",[o==null?void 0:o.starred,h]);return o?a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none"},"data-testid":`image-${o.image_name}`,children:a.jsx($,{ref:g,userSelect:"none",sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1"},children:a.jsx(fl,{onClick:c,imageDTO:o,draggableData:y,isSelected:d,minSize:0,imageSx:{w:"full",h:"full"},isDropDisabled:!0,isUploadDisabled:!0,thumbnail:!0,withHoverOverlay:!0,onMouseOver:I,onMouseOut:E,children:a.jsxs(a.Fragment,{children:[a.jsx(jc,{onClick:S,icon:M,tooltip:D}),j&&s&&a.jsx(jc,{onClick:b,icon:a.jsx(ao,{}),tooltip:l("gallery.deleteImage"),styleOverrides:{bottom:2,top:"auto"}})]})})})}):a.jsx(jae,{})},Mae=i.memo(Eae),Oae=_e((e,t)=>a.jsx(Ie,{className:"item-container",ref:t,p:1.5,"data-testid":"image-item-container",children:e.children})),Dae=i.memo(Oae),Rae=_e((e,t)=>{const n=H(r=>r.gallery.galleryImageMinimumWidth);return a.jsx(sl,{...e,className:"list-container",ref:t,sx:{gridTemplateColumns:`repeat(auto-fill, minmax(${n}px, 1fr));`},"data-testid":"image-list-container",children:e.children})}),Aae=i.memo(Rae),Tae={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},Nae=()=>{const{t:e}=W(),t=i.useRef(null),[n,r]=i.useState(null),[o,s]=c2(Tae),l=H(E=>E.gallery.selectedBoardId),{currentViewTotal:c}=qse(l),d=H(kx),f=i.useRef(null),m=i.useRef(null),{currentData:h,isFetching:g,isSuccess:b,isError:y}=WI(d),[x]=DI(),w=i.useMemo(()=>!h||!c?!1:h.ids.length{w&&x({...d,offset:(h==null?void 0:h.ids.length)??0,limit:OI})},[w,x,d,h==null?void 0:h.ids.length]),j=i.useMemo(()=>({virtuosoRef:m,rootRef:t,virtuosoRangeRef:f}),[]),_=i.useCallback((E,M,D)=>a.jsx(Mae,{index:E,imageName:M,virtuosoContext:D},M),[]);i.useEffect(()=>{const{current:E}=t;return n&&E&&o({target:E,elements:{viewport:n}}),()=>{var M;return(M=s())==null?void 0:M.destroy()}},[n,o,s]);const I=i.useCallback(E=>{f.current=E},[]);return i.useEffect(()=>{lc.setKey("virtuosoRef",m),lc.setKey("virtuosoRangeRef",f)},[]),h?b&&(h==null?void 0:h.ids.length)===0?a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(Tn,{label:e("gallery.noImagesInGallery"),icon:si})}):b&&h?a.jsxs(a.Fragment,{children:[a.jsx(Ie,{ref:t,"data-overlayscrollbars":"",h:"100%",children:a.jsx(Kse,{style:{height:"100%"},data:h.ids,endReached:S,components:{Item:Dae,List:Aae},scrollerRef:r,itemContent:_,ref:m,rangeChanged:I,context:j,overscan:10})}),a.jsx(Xe,{onClick:S,isDisabled:!w,isLoading:g,loadingText:e("gallery.loading"),flexShrink:0,children:`Load More (${h.ids.length} of ${c})`})]}):y?a.jsx(Ie,{sx:{w:"full",h:"full"},children:a.jsx(Tn,{label:e("gallery.unableToLoad"),icon:kte})}):null:a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(Tn,{label:e("gallery.loading"),icon:si})})},$ae=i.memo(Nae),Lae=fe([pe],e=>{const{galleryView:t}=e.gallery;return{galleryView:t}}),Fae=()=>{const{t:e}=W(),t=i.useRef(null),n=i.useRef(null),{galleryView:r}=H(Lae),o=te(),{isOpen:s,onToggle:l}=sr({defaultIsOpen:!0}),c=i.useCallback(()=>{o(Xw("images"))},[o]),d=i.useCallback(()=>{o(Xw("assets"))},[o]);return a.jsxs(F5,{layerStyle:"first",sx:{flexDirection:"column",h:"full",w:"full",borderRadius:"base",p:2},children:[a.jsxs(Ie,{sx:{w:"full"},children:[a.jsxs($,{ref:t,sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:[a.jsx(ioe,{isOpen:s,onToggle:l}),a.jsx(voe,{})]}),a.jsx(Ie,{children:a.jsx(soe,{isOpen:s})})]}),a.jsxs($,{ref:n,direction:"column",gap:2,h:"full",w:"full",children:[a.jsx($,{sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:a.jsx(ci,{index:r==="images"?0:1,variant:"unstyled",size:"sm",sx:{w:"full"},children:a.jsx(ui,{children:a.jsxs($t,{isAttached:!0,sx:{w:"full"},children:[a.jsx(mr,{as:Xe,size:"sm",isChecked:r==="images",onClick:c,sx:{w:"full"},leftIcon:a.jsx(Tte,{}),"data-testid":"images-tab",children:e("parameters.images")}),a.jsx(mr,{as:Xe,size:"sm",isChecked:r==="assets",onClick:d,sx:{w:"full"},leftIcon:a.jsx(Gte,{}),"data-testid":"assets-tab",children:e("gallery.assets")})]})})})}),a.jsx($ae,{})]})]})},zae=i.memo(Fae),Bae={paramNegativeConditioning:{placement:"right"},controlNet:{href:"https://support.invoke.ai/support/solutions/articles/151000105880"},lora:{href:"https://support.invoke.ai/support/solutions/articles/151000159072"},compositingCoherenceMode:{href:"https://support.invoke.ai/support/solutions/articles/151000158838"},infillMethod:{href:"https://support.invoke.ai/support/solutions/articles/151000158841"},scaleBeforeProcessing:{href:"https://support.invoke.ai/support/solutions/articles/151000158841"},paramIterations:{href:"https://support.invoke.ai/support/solutions/articles/151000159073"},paramPositiveConditioning:{href:"https://support.invoke.ai/support/solutions/articles/151000096606-tips-on-crafting-prompts",placement:"right"},paramScheduler:{placement:"right",href:"https://support.invoke.ai/support/solutions/articles/151000159073"},paramModel:{placement:"right",href:"https://support.invoke.ai/support/solutions/articles/151000096601-what-is-a-model-which-should-i-use-"},paramRatio:{gutter:16},controlNetControlMode:{placement:"right"},controlNetResizeMode:{placement:"right"},paramVAE:{placement:"right"},paramVAEPrecision:{placement:"right"}},Hae=1e3,Wae=[{name:"preventOverflow",options:{padding:10}}],M7=_e(({feature:e,children:t,wrapperProps:n,...r},o)=>{const{t:s}=W(),l=H(g=>g.system.shouldEnableInformationalPopovers),c=i.useMemo(()=>Bae[e],[e]),d=i.useMemo(()=>OA(DA(c,["image","href","buttonLabel"]),r),[c,r]),f=i.useMemo(()=>s(`popovers.${e}.heading`),[e,s]),m=i.useMemo(()=>s(`popovers.${e}.paragraphs`,{returnObjects:!0})??[],[e,s]),h=i.useCallback(()=>{c!=null&&c.href&&window.open(c.href)},[c==null?void 0:c.href]);return l?a.jsxs(lf,{isLazy:!0,closeOnBlur:!1,trigger:"hover",variant:"informational",openDelay:Hae,modifiers:Wae,placement:"top",...d,children:[a.jsx(yg,{children:a.jsx(Ie,{ref:o,w:"full",...n,children:t})}),a.jsx(Uc,{children:a.jsxs(cf,{w:96,children:[a.jsx(h6,{}),a.jsx(Cg,{children:a.jsxs($,{sx:{gap:2,flexDirection:"column",alignItems:"flex-start"},children:[f&&a.jsxs(a.Fragment,{children:[a.jsx(or,{size:"sm",children:f}),a.jsx(On,{})]}),(c==null?void 0:c.image)&&a.jsxs(a.Fragment,{children:[a.jsx(Ca,{sx:{objectFit:"contain",maxW:"60%",maxH:"60%",backgroundColor:"white"},src:c.image,alt:"Optional Image"}),a.jsx(On,{})]}),m.map(g=>a.jsx(be,{children:g},g)),(c==null?void 0:c.href)&&a.jsxs(a.Fragment,{children:[a.jsx(On,{}),a.jsx(ol,{pt:1,onClick:h,leftIcon:a.jsx(Xy,{}),alignSelf:"flex-end",variant:"link",children:s("common.learnMore")??f})]})]})})]})})]}):a.jsx(Ie,{ref:o,w:"full",...n,children:t})});M7.displayName="IAIInformationalPopover";const Ot=i.memo(M7),I2=e=>{e.stopPropagation()},zh=/^-?(0\.)?\.?$/,O7=_e((e,t)=>{const{label:n,isDisabled:r=!1,showStepper:o=!0,isInvalid:s,value:l,onChange:c,min:d,max:f,isInteger:m=!0,formControlProps:h,formLabelProps:g,numberInputFieldProps:b,numberInputStepperProps:y,tooltipProps:x,...w}=e,S=te(),[j,_]=i.useState(String(l));i.useEffect(()=>{!j.match(zh)&&l!==Number(j)&&_(String(l))},[l,j]);const I=i.useCallback(R=>{_(R),R.match(zh)||c(m?Math.floor(Number(R)):Number(R))},[m,c]),E=i.useCallback(R=>{const N=Zl(m?Math.floor(Number(R.target.value)):Number(R.target.value),d,f);_(String(N)),c(N)},[m,f,d,c]),M=i.useCallback(R=>{R.shiftKey&&S(zr(!0))},[S]),D=i.useCallback(R=>{R.shiftKey||S(zr(!1))},[S]);return a.jsx(Ut,{...x,children:a.jsxs(Gt,{ref:t,isDisabled:r,isInvalid:s,...h,children:[n&&a.jsx(ln,{...g,children:n}),a.jsxs(mg,{value:j,min:d,max:f,keepWithinRange:!0,clampValueOnBlur:!1,onChange:I,onBlur:E,...w,onPaste:I2,children:[a.jsx(gg,{...b,onKeyDown:M,onKeyUp:D}),o&&a.jsxs(hg,{children:[a.jsx(bg,{...y}),a.jsx(vg,{...y})]})]})]})})});O7.displayName="IAINumberInput";const _s=i.memo(O7),Vae=fe([pe],e=>{const{initial:t,min:n,sliderMax:r,inputMax:o,fineStep:s,coarseStep:l}=e.config.sd.iterations,{iterations:c}=e.generation,{shouldUseSliders:d}=e.ui,f=e.hotkeys.shift?s:l;return{iterations:c,initial:t,min:n,sliderMax:r,inputMax:o,step:f,shouldUseSliders:d}}),Uae=({asSlider:e})=>{const{iterations:t,initial:n,min:r,sliderMax:o,inputMax:s,step:l,shouldUseSliders:c}=H(Vae),d=te(),{t:f}=W(),m=i.useCallback(g=>{d(Qw(g))},[d]),h=i.useCallback(()=>{d(Qw(n))},[d,n]);return e||c?a.jsx(Ot,{feature:"paramIterations",children:a.jsx(nt,{label:f("parameters.iterations"),step:l,min:r,max:o,onChange:m,handleReset:h,value:t,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s}})}):a.jsx(Ot,{feature:"paramIterations",children:a.jsx(_s,{label:f("parameters.iterations"),step:l,min:r,max:s,onChange:m,value:t,numberInputFieldProps:{textAlign:"center"}})})},ds=i.memo(Uae),Gae=()=>{const e=H(f=>f.system.isConnected),{data:t}=Ls(),[n,{isLoading:r}]=Rx(),o=te(),{t:s}=W(),l=i.useMemo(()=>t==null?void 0:t.queue.item_id,[t==null?void 0:t.queue.item_id]),c=i.useCallback(async()=>{if(l)try{await n(l).unwrap(),o(lt({title:s("queue.cancelSucceeded"),status:"success"}))}catch{o(lt({title:s("queue.cancelFailed"),status:"error"}))}},[l,o,s,n]),d=i.useMemo(()=>!e||na(l),[e,l]);return{cancelQueueItem:c,isLoading:r,currentQueueItemId:l,isDisabled:d}},Kae=({label:e,tooltip:t,icon:n,onClick:r,isDisabled:o,colorScheme:s,asIconButton:l,isLoading:c,loadingText:d,sx:f})=>l?a.jsx(Fe,{"aria-label":e,tooltip:t,icon:n,onClick:r,isDisabled:o,colorScheme:s,isLoading:c,sx:f,"data-testid":e}):a.jsx(Xe,{"aria-label":e,tooltip:t,leftIcon:n,onClick:r,isDisabled:o,colorScheme:s,isLoading:c,loadingText:d??e,flexGrow:1,sx:f,"data-testid":e,children:e}),gi=i.memo(Kae),qae=({asIconButton:e,sx:t})=>{const{t:n}=W(),{cancelQueueItem:r,isLoading:o,isDisabled:s}=Gae();return a.jsx(gi,{isDisabled:s,isLoading:o,asIconButton:e,label:n("queue.cancel"),tooltip:n("queue.cancelTooltip"),icon:a.jsx(Nc,{}),onClick:r,colorScheme:"error",sx:t})},D7=i.memo(qae),Xae=()=>{const{t:e}=W(),t=te(),{data:n}=Ls(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=VI({fixedCacheKey:"clearQueue"}),l=i.useCallback(async()=>{if(n!=null&&n.queue.total)try{await o().unwrap(),t(lt({title:e("queue.clearSucceeded"),status:"success"})),t(Ax(void 0)),t(Tx(void 0))}catch{t(lt({title:e("queue.clearFailed"),status:"error"}))}},[n==null?void 0:n.queue.total,o,t,e]),c=i.useMemo(()=>!r||!(n!=null&&n.queue.total),[r,n==null?void 0:n.queue.total]);return{clearQueue:l,isLoading:s,queueStatus:n,isDisabled:c}},Qae=_e((e,t)=>{const{t:n}=W(),{acceptButtonText:r=n("common.accept"),acceptCallback:o,cancelButtonText:s=n("common.cancel"),cancelCallback:l,children:c,title:d,triggerComponent:f}=e,{isOpen:m,onOpen:h,onClose:g}=sr(),b=i.useRef(null),y=i.useCallback(()=>{o(),g()},[o,g]),x=i.useCallback(()=>{l&&l(),g()},[l,g]);return a.jsxs(a.Fragment,{children:[i.cloneElement(f,{onClick:h,ref:t}),a.jsx(Zc,{isOpen:m,leastDestructiveRef:b,onClose:g,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:d}),a.jsx(Mo,{children:c}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:b,onClick:x,children:s}),a.jsx(Xe,{colorScheme:"error",onClick:y,ml:3,children:r})]})]})})})]})}),t0=i.memo(Qae),Yae=({asIconButton:e,sx:t})=>{const{t:n}=W(),{clearQueue:r,isLoading:o,isDisabled:s}=Xae();return a.jsxs(t0,{title:n("queue.clearTooltip"),acceptCallback:r,acceptButtonText:n("queue.clear"),triggerComponent:a.jsx(gi,{isDisabled:s,isLoading:o,asIconButton:e,label:n("queue.clear"),tooltip:n("queue.clearTooltip"),icon:a.jsx(ao,{}),colorScheme:"error",sx:t}),children:[a.jsx(be,{children:n("queue.clearQueueAlertDialog")}),a.jsx("br",{}),a.jsx(be,{children:n("queue.clearQueueAlertDialog2")})]})},P2=i.memo(Yae),Zae=()=>{const e=te(),{t}=W(),n=H(f=>f.system.isConnected),{data:r}=Ls(),[o,{isLoading:s}]=UI({fixedCacheKey:"pauseProcessor"}),l=i.useMemo(()=>!!(r!=null&&r.processor.is_started),[r==null?void 0:r.processor.is_started]),c=i.useCallback(async()=>{if(l)try{await o().unwrap(),e(lt({title:t("queue.pauseSucceeded"),status:"success"}))}catch{e(lt({title:t("queue.pauseFailed"),status:"error"}))}},[l,o,e,t]),d=i.useMemo(()=>!n||!l,[n,l]);return{pauseProcessor:c,isLoading:s,isStarted:l,isDisabled:d}},Jae=({asIconButton:e})=>{const{t}=W(),{pauseProcessor:n,isLoading:r,isDisabled:o}=Zae();return a.jsx(gi,{asIconButton:e,label:t("queue.pause"),tooltip:t("queue.pauseTooltip"),isDisabled:o,isLoading:r,icon:a.jsx(Bte,{}),onClick:n,colorScheme:"gold"})},R7=i.memo(Jae),ele=fe([pe,tr],({controlAdapters:e,generation:t,system:n,nodes:r,dynamicPrompts:o},s)=>{const{initialImage:l,model:c}=t,{isConnected:d}=n,f=[];return d||f.push(wt.t("parameters.invoke.systemDisconnected")),s==="img2img"&&!l&&f.push(wt.t("parameters.invoke.noInitialImageSelected")),s==="nodes"?r.shouldValidateGraph&&(r.nodes.length||f.push(wt.t("parameters.invoke.noNodesInGraph")),r.nodes.forEach(m=>{if(!Jt(m))return;const h=r.nodeTemplates[m.data.type];if(!h){f.push(wt.t("parameters.invoke.missingNodeTemplate"));return}const g=RA([m],r.edges);qn(m.data.inputs,b=>{const y=h.inputs[b.name],x=g.some(w=>w.target===m.id&&w.targetHandle===b.name);if(!y){f.push(wt.t("parameters.invoke.missingFieldTemplate"));return}if(y.required&&b.value===void 0&&!x){f.push(wt.t("parameters.invoke.missingInputForField",{nodeLabel:m.data.label||h.title,fieldLabel:b.label||y.title}));return}})})):(o.prompts.length===0&&f.push(wt.t("parameters.invoke.noPrompts")),c||f.push(wt.t("parameters.invoke.noModelSelected")),AA(e).forEach((m,h)=>{m.isEnabled&&(m.model?m.model.base_model!==(c==null?void 0:c.base_model)&&f.push(wt.t("parameters.invoke.incompatibleBaseModelForControlAdapter",{number:h+1})):f.push(wt.t("parameters.invoke.noModelForControlAdapter",{number:h+1})),(!m.controlImage||Gc(m)&&!m.processedControlImage&&m.processorType!=="none")&&f.push(wt.t("parameters.invoke.noControlImageForControlAdapter",{number:h+1})))})),{isReady:!f.length,reasons:f}}),E2=()=>{const{isReady:e,reasons:t}=H(ele);return{isReady:e,reasons:t}},A7=()=>{const e=te(),t=H(tr),{isReady:n}=E2(),[r,{isLoading:o}]=Yh({fixedCacheKey:"enqueueBatch"}),s=i.useMemo(()=>!n,[n]);return{queueBack:i.useCallback(()=>{s||(e(Nx()),e(GI({tabName:t,prepend:!1})))},[e,s,t]),isLoading:o,isDisabled:s}},tle=fe([pe],({gallery:e})=>{const{autoAddBoardId:t}=e;return{autoAddBoardId:t}}),nle=({prepend:e=!1})=>{const{t}=W(),{isReady:n,reasons:r}=E2(),{autoAddBoardId:o}=H(tle),s=qg(o),[l,{isLoading:c}]=Yh({fixedCacheKey:"enqueueBatch"}),d=i.useMemo(()=>t(c?"queue.enqueueing":n?e?"queue.queueFront":"queue.queueBack":"queue.notReady"),[c,n,e,t]);return a.jsxs($,{flexDir:"column",gap:1,children:[a.jsx(be,{fontWeight:600,children:d}),r.length>0&&a.jsx(cg,{children:r.map((f,m)=>a.jsx(ts,{children:a.jsx(be,{fontWeight:400,children:f})},`${f}.${m}`))}),a.jsx(N7,{}),a.jsxs(be,{fontWeight:400,fontStyle:"oblique 10deg",children:[t("parameters.invoke.addingImagesTo")," ",a.jsx(be,{as:"span",fontWeight:600,children:s||t("boards.uncategorized")})]})]})},T7=i.memo(nle),N7=i.memo(()=>a.jsx(On,{opacity:.2,borderColor:"base.50",_dark:{borderColor:"base.900"}}));N7.displayName="StyledDivider";const rle=()=>a.jsx(Ie,{pos:"relative",w:4,h:4,children:a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",pos:"absolute",top:-.5,insetInlineStart:-.5,w:5,h:5,minW:5,minH:5,filter:"saturate(0)"})}),ole=i.memo(rle),sle=({asIconButton:e,sx:t})=>{const{t:n}=W(),{queueBack:r,isLoading:o,isDisabled:s}=A7();return a.jsx(gi,{asIconButton:e,colorScheme:"accent",label:n("parameters.invoke.invoke"),isDisabled:s,isLoading:o,onClick:r,tooltip:a.jsx(T7,{}),sx:t,icon:e?a.jsx(ole,{}):void 0})},$7=i.memo(sle),L7=()=>{const e=te(),t=H(tr),{isReady:n}=E2(),[r,{isLoading:o}]=Yh({fixedCacheKey:"enqueueBatch"}),s=Mt("prependQueue").isFeatureEnabled,l=i.useMemo(()=>!n||!s,[n,s]);return{queueFront:i.useCallback(()=>{l||(e(Nx()),e(GI({tabName:t,prepend:!0})))},[e,l,t]),isLoading:o,isDisabled:l}},ale=({asIconButton:e,sx:t})=>{const{t:n}=W(),{queueFront:r,isLoading:o,isDisabled:s}=L7();return a.jsx(gi,{asIconButton:e,colorScheme:"base",label:n("queue.queueFront"),isDisabled:s,isLoading:o,onClick:r,tooltip:a.jsx(T7,{prepend:!0}),icon:a.jsx(aae,{}),sx:t})},lle=i.memo(ale),ile=()=>{const e=te(),t=H(f=>f.system.isConnected),{data:n}=Ls(),{t:r}=W(),[o,{isLoading:s}]=KI({fixedCacheKey:"resumeProcessor"}),l=i.useMemo(()=>!!(n!=null&&n.processor.is_started),[n==null?void 0:n.processor.is_started]),c=i.useCallback(async()=>{if(!l)try{await o().unwrap(),e(lt({title:r("queue.resumeSucceeded"),status:"success"}))}catch{e(lt({title:r("queue.resumeFailed"),status:"error"}))}},[l,o,e,r]),d=i.useMemo(()=>!t||l,[t,l]);return{resumeProcessor:c,isLoading:s,isStarted:l,isDisabled:d}},cle=({asIconButton:e})=>{const{t}=W(),{resumeProcessor:n,isLoading:r,isDisabled:o}=ile();return a.jsx(gi,{asIconButton:e,label:t("queue.resume"),tooltip:t("queue.resumeTooltip"),isDisabled:o,isLoading:r,icon:a.jsx(Hte,{}),onClick:n,colorScheme:"green"})},F7=i.memo(cle),ule=fe(pe,({system:e})=>{var t;return{isConnected:e.isConnected,hasSteps:!!e.denoiseProgress,value:(((t=e.denoiseProgress)==null?void 0:t.percentage)??0)*100}}),dle=()=>{const{t:e}=W(),{data:t}=Ls(),{hasSteps:n,value:r,isConnected:o}=H(ule);return a.jsx(x6,{value:r,"aria-label":e("accessibility.invokeProgressBar"),isIndeterminate:o&&!!(t!=null&&t.queue.in_progress)&&!n,h:"full",w:"full",borderRadius:2,colorScheme:"accent"})},fle=i.memo(dle),ple=()=>{const e=Mt("pauseQueue").isFeatureEnabled,t=Mt("resumeQueue").isFeatureEnabled,n=Mt("prependQueue").isFeatureEnabled;return a.jsxs($,{layerStyle:"first",sx:{w:"full",position:"relative",borderRadius:"base",p:2,gap:2,flexDir:"column"},children:[a.jsxs($,{gap:2,w:"full",children:[a.jsxs($t,{isAttached:!0,flexGrow:2,children:[a.jsx($7,{}),n?a.jsx(lle,{asIconButton:!0}):a.jsx(a.Fragment,{}),a.jsx(D7,{asIconButton:!0})]}),a.jsxs($t,{isAttached:!0,children:[t?a.jsx(F7,{asIconButton:!0}):a.jsx(a.Fragment,{}),e?a.jsx(R7,{asIconButton:!0}):a.jsx(a.Fragment,{})]}),a.jsx(P2,{asIconButton:!0})]}),a.jsx($,{h:3,w:"full",children:a.jsx(fle,{})}),a.jsx(B7,{})]})},z7=i.memo(ple),B7=i.memo(()=>{const{t:e}=W(),t=te(),{hasItems:n,pending:r}=Ls(void 0,{selectFromResult:({data:s})=>{if(!s)return{hasItems:!1,pending:0};const{pending:l,in_progress:c}=s.queue;return{hasItems:l+c>0,pending:l}}}),o=i.useCallback(()=>{t(Js("queue"))},[t]);return a.jsxs($,{justifyContent:"space-between",alignItems:"center",pe:1,"data-testid":"queue-count",children:[a.jsx(Wr,{}),a.jsx(ol,{onClick:o,size:"sm",variant:"link",fontWeight:400,opacity:.7,fontStyle:"oblique 10deg",children:n?e("queue.queuedCount",{pending:r}):e("queue.queueEmpty")})]})});B7.displayName="QueueCounts";const{createElement:zc,createContext:mle,forwardRef:H7,useCallback:Qs,useContext:W7,useEffect:la,useImperativeHandle:V7,useLayoutEffect:hle,useMemo:gle,useRef:Zr,useState:md}=xx,d_=xx["useId".toString()],hd=hle,vle=typeof d_=="function"?d_:()=>null;let ble=0;function M2(e=null){const t=vle(),n=Zr(e||t||null);return n.current===null&&(n.current=""+ble++),n.current}const n0=mle(null);n0.displayName="PanelGroupContext";function U7({children:e=null,className:t="",collapsedSize:n=0,collapsible:r=!1,defaultSize:o=null,forwardedRef:s,id:l=null,maxSize:c=null,minSize:d,onCollapse:f=null,onResize:m=null,order:h=null,style:g={},tagName:b="div"}){const y=W7(n0);if(y===null)throw Error("Panel components must be rendered within a PanelGroup container");const x=M2(l),{collapsePanel:w,expandPanel:S,getPanelSize:j,getPanelStyle:_,registerPanel:I,resizePanel:E,units:M,unregisterPanel:D}=y;d==null&&(M==="percentages"?d=10:d=0);const R=Zr({onCollapse:f,onResize:m});la(()=>{R.current.onCollapse=f,R.current.onResize=m});const N=_(x,o),O=Zr({size:f_(N)}),T=Zr({callbacksRef:R,collapsedSize:n,collapsible:r,defaultSize:o,id:x,idWasAutoGenerated:l==null,maxSize:c,minSize:d,order:h});return hd(()=>{O.current.size=f_(N),T.current.callbacksRef=R,T.current.collapsedSize=n,T.current.collapsible=r,T.current.defaultSize=o,T.current.id=x,T.current.idWasAutoGenerated=l==null,T.current.maxSize=c,T.current.minSize=d,T.current.order=h}),hd(()=>(I(x,T),()=>{D(x)}),[h,x,I,D]),V7(s,()=>({collapse:()=>w(x),expand:()=>S(x),getCollapsed(){return O.current.size===0},getId(){return x},getSize(U){return j(x,U)},resize:(U,G)=>E(x,U,G)}),[w,S,j,x,E]),zc(b,{children:e,className:t,"data-panel":"","data-panel-collapsible":r||void 0,"data-panel-id":x,"data-panel-size":parseFloat(""+N.flexGrow).toFixed(1),id:`data-panel-id-${x}`,style:{...N,...g}})}const rl=H7((e,t)=>zc(U7,{...e,forwardedRef:t}));U7.displayName="Panel";rl.displayName="forwardRef(Panel)";function f_(e){const{flexGrow:t}=e;return typeof t=="string"?parseFloat(t):t}const ai=10;function Ju(e,t,n,r,o,s,l,c){const{id:d,panels:f,units:m}=t,h=m==="pixels"?Ga(d):NaN,{sizes:g}=c||{},b=g||s,y=Tr(f),x=b.concat();let w=0;{const _=o<0?r:n,I=y.findIndex(R=>R.current.id===_),E=y[I],M=b[I],D=Zb(m,h,E,M,M+Math.abs(o),e);if(M===D)return b;D===0&&M>0&&l.set(_,M),o=o<0?M-D:D-M}let S=o<0?n:r,j=y.findIndex(_=>_.current.id===S);for(;;){const _=y[j],I=b[j],E=Math.abs(o)-Math.abs(w),M=Zb(m,h,_,I,I-E,e);if(I!==M&&(M===0&&I>0&&l.set(_.current.id,I),w+=I-M,x[j]=M,w.toPrecision(ai).localeCompare(Math.abs(o).toPrecision(ai),void 0,{numeric:!0})>=0))break;if(o<0){if(--j<0)break}else if(++j>=y.length)break}return w===0?b:(S=o<0?r:n,j=y.findIndex(_=>_.current.id===S),x[j]=b[j]+w,x)}function Ki(e,t,n){t.forEach((r,o)=>{const s=e[o];if(!s)return;const{callbacksRef:l,collapsedSize:c,collapsible:d,id:f}=s.current,m=n[f];if(m!==r){n[f]=r;const{onCollapse:h,onResize:g}=l.current;g&&g(r,m),d&&h&&((m==null||m===c)&&r!==c?h(!1):m!==c&&r===c&&h(!0))}})}function xle({groupId:e,panels:t,units:n}){const r=n==="pixels"?Ga(e):NaN,o=Tr(t),s=Array(o.length);let l=0,c=100;for(let d=0;dl.current.id===e);if(n<0)return[null,null];const r=n===t.length-1,o=r?t[n-1].current.id:e,s=r?e:t[n+1].current.id;return[o,s]}function Ga(e){const t=Ld(e);if(t==null)return NaN;const n=t.getAttribute("data-panel-group-direction"),r=O2(e);return n==="horizontal"?t.offsetWidth-r.reduce((o,s)=>o+s.offsetWidth,0):t.offsetHeight-r.reduce((o,s)=>o+s.offsetHeight,0)}function G7(e,t,n){if(e.size===1)return"100";const o=Tr(e).findIndex(l=>l.current.id===t),s=n[o];return s==null?"0":s.toPrecision(ai)}function yle(e){const t=document.querySelector(`[data-panel-id="${e}"]`);return t||null}function Ld(e){const t=document.querySelector(`[data-panel-group-id="${e}"]`);return t||null}function r0(e){const t=document.querySelector(`[data-panel-resize-handle-id="${e}"]`);return t||null}function Cle(e){return K7().findIndex(r=>r.getAttribute("data-panel-resize-handle-id")===e)??null}function K7(){return Array.from(document.querySelectorAll("[data-panel-resize-handle-id]"))}function O2(e){return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${e}"]`))}function D2(e,t,n){var d,f,m,h;const r=r0(t),o=O2(e),s=r?o.indexOf(r):-1,l=((f=(d=n[s])==null?void 0:d.current)==null?void 0:f.id)??null,c=((h=(m=n[s+1])==null?void 0:m.current)==null?void 0:h.id)??null;return[l,c]}function Tr(e){return Array.from(e.values()).sort((t,n)=>{const r=t.current.order,o=n.current.order;return r==null&&o==null?0:r==null?-1:o==null?1:r-o})}function Zb(e,t,n,r,o,s=null){var m;let{collapsedSize:l,collapsible:c,maxSize:d,minSize:f}=n.current;if(e==="pixels"&&(l=l/t*100,d!=null&&(d=d/t*100),f=f/t*100),c){if(r>l){if(o<=f/2+l)return l}else if(!((m=s==null?void 0:s.type)==null?void 0:m.startsWith("key"))&&o100)&&(t.current.minSize=0),o!=null&&(o<0||e==="percentages"&&o>100)&&(t.current.maxSize=null),r!==null&&(r<0||e==="percentages"&&r>100?t.current.defaultSize=null:ro&&(t.current.defaultSize=o))}function C1({groupId:e,panels:t,nextSizes:n,prevSizes:r,units:o}){n=[...n];const s=Tr(t),l=o==="pixels"?Ga(e):NaN;let c=0;for(let d=0;d{const{direction:l,panels:c}=e.current,d=Ld(t);q7(d!=null,`No group found for id "${t}"`);const{height:f,width:m}=d.getBoundingClientRect(),g=O2(t).map(b=>{const y=b.getAttribute("data-panel-resize-handle-id"),x=Tr(c),[w,S]=D2(t,y,x);if(w==null||S==null)return()=>{};let j=0,_=100,I=0,E=0;x.forEach(T=>{const{id:U,maxSize:G,minSize:q}=T.current;U===w?(j=q,_=G??100):(I+=q,E+=G??100)});const M=Math.min(_,100-I),D=Math.max(j,(x.length-1)*100-E),R=G7(c,w,o);b.setAttribute("aria-valuemax",""+Math.round(M)),b.setAttribute("aria-valuemin",""+Math.round(D)),b.setAttribute("aria-valuenow",""+Math.round(parseInt(R)));const N=T=>{if(!T.defaultPrevented)switch(T.key){case"Enter":{T.preventDefault();const U=x.findIndex(G=>G.current.id===w);if(U>=0){const G=x[U],q=o[U];if(q!=null){let Y=0;q.toPrecision(ai)<=G.current.minSize.toPrecision(ai)?Y=l==="horizontal"?m:f:Y=-(l==="horizontal"?m:f);const Q=Ju(T,e.current,w,S,Y,o,s.current,null);o!==Q&&r(Q)}}break}}};b.addEventListener("keydown",N);const O=yle(w);return O!=null&&b.setAttribute("aria-controls",O.id),()=>{b.removeAttribute("aria-valuemax"),b.removeAttribute("aria-valuemin"),b.removeAttribute("aria-valuenow"),b.removeEventListener("keydown",N),O!=null&&b.removeAttribute("aria-controls")}});return()=>{g.forEach(b=>b())}},[e,t,n,s,r,o])}function kle({disabled:e,handleId:t,resizeHandler:n}){la(()=>{if(e||n==null)return;const r=r0(t);if(r==null)return;const o=s=>{if(!s.defaultPrevented)switch(s.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{s.preventDefault(),n(s);break}case"F6":{s.preventDefault();const l=K7(),c=Cle(t);q7(c!==null);const d=s.shiftKey?c>0?c-1:l.length-1:c+1{r.removeEventListener("keydown",o)}},[e,t,n])}function w1(e,t){if(e.length!==t.length)return!1;for(let n=0;nD.current.id===I),M=r[E];if(M.current.collapsible){const D=m[E];(D===0||D.toPrecision(ai)===M.current.minSize.toPrecision(ai))&&(S=S<0?-M.current.minSize*y:M.current.minSize*y)}return S}else return X7(e,n,o,c,d)}function _le(e){return e.type==="keydown"}function Jb(e){return e.type.startsWith("mouse")}function ex(e){return e.type.startsWith("touch")}let tx=null,Wl=null;function Q7(e){switch(e){case"horizontal":return"ew-resize";case"horizontal-max":return"w-resize";case"horizontal-min":return"e-resize";case"vertical":return"ns-resize";case"vertical-max":return"n-resize";case"vertical-min":return"s-resize"}}function Ile(){Wl!==null&&(document.head.removeChild(Wl),tx=null,Wl=null)}function S1(e){if(tx===e)return;tx=e;const t=Q7(e);Wl===null&&(Wl=document.createElement("style"),document.head.appendChild(Wl)),Wl.innerHTML=`*{cursor: ${t}!important;}`}function Ple(e,t=10){let n=null;return(...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...o)},t)}}function Y7(e){return e.map(t=>{const{minSize:n,order:r}=t.current;return r?`${r}:${n}`:`${n}`}).sort((t,n)=>t.localeCompare(n)).join(",")}function Z7(e,t){try{const n=t.getItem(`PanelGroup:sizes:${e}`);if(n){const r=JSON.parse(n);if(typeof r=="object"&&r!=null)return r}}catch{}return null}function Ele(e,t,n){const r=Z7(e,n);if(r){const o=Y7(t);return r[o]??null}return null}function Mle(e,t,n,r){const o=Y7(t),s=Z7(e,r)||{};s[o]=n;try{r.setItem(`PanelGroup:sizes:${e}`,JSON.stringify(s))}catch(l){console.error(l)}}const k1={};function p_(e){try{if(typeof localStorage<"u")e.getItem=t=>localStorage.getItem(t),e.setItem=(t,n)=>{localStorage.setItem(t,n)};else throw new Error("localStorage not supported in this environment")}catch(t){console.error(t),e.getItem=()=>null,e.setItem=()=>{}}}const ed={getItem:e=>(p_(ed),ed.getItem(e)),setItem:(e,t)=>{p_(ed),ed.setItem(e,t)}};function J7({autoSaveId:e,children:t=null,className:n="",direction:r,disablePointerEventsDuringResize:o=!1,forwardedRef:s,id:l=null,onLayout:c,storage:d=ed,style:f={},tagName:m="div",units:h="percentages"}){const g=M2(l),[b,y]=md(null),[x,w]=md(new Map),S=Zr(null);Zr({didLogDefaultSizeWarning:!1,didLogIdAndOrderWarning:!1,didLogInvalidLayoutWarning:!1,prevPanelIds:[]});const j=Zr({onLayout:c});la(()=>{j.current.onLayout=c});const _=Zr({}),[I,E]=md([]),M=Zr(new Map),D=Zr(0),R=Zr({direction:r,id:g,panels:x,sizes:I,units:h});V7(s,()=>({getId:()=>g,getLayout:ee=>{const{sizes:le,units:ae}=R.current;if((ee??ae)==="pixels"){const J=Ga(g);return le.map(re=>re/100*J)}else return le},setLayout:(ee,le)=>{const{id:ae,panels:ce,sizes:J,units:re}=R.current;if((le||re)==="pixels"){const ne=Ga(ae);ee=ee.map(z=>z/ne*100)}const A=_.current,L=Tr(ce),K=C1({groupId:ae,panels:ce,nextSizes:ee,prevSizes:J,units:re});w1(J,K)||(E(K),Ki(L,K,A))}}),[g]),hd(()=>{R.current.direction=r,R.current.id=g,R.current.panels=x,R.current.sizes=I,R.current.units=h}),Sle({committedValuesRef:R,groupId:g,panels:x,setSizes:E,sizes:I,panelSizeBeforeCollapse:M}),la(()=>{const{onLayout:ee}=j.current,{panels:le,sizes:ae}=R.current;if(ae.length>0){ee&&ee(ae);const ce=_.current,J=Tr(le);Ki(J,ae,ce)}},[I]),hd(()=>{const{id:ee,sizes:le,units:ae}=R.current;if(le.length===x.size)return;let ce=null;if(e){const J=Tr(x);ce=Ele(e,J,d)}if(ce!=null){const J=C1({groupId:ee,panels:x,nextSizes:ce,prevSizes:ce,units:ae});E(J)}else{const J=xle({groupId:ee,panels:x,units:ae});E(J)}},[e,x,d]),la(()=>{if(e){if(I.length===0||I.length!==x.size)return;const ee=Tr(x);k1[e]||(k1[e]=Ple(Mle,100)),k1[e](e,ee,I,d)}},[e,x,I,d]),hd(()=>{if(h==="pixels"){const ee=new ResizeObserver(()=>{const{panels:le,sizes:ae}=R.current,ce=C1({groupId:g,panels:le,nextSizes:ae,prevSizes:ae,units:h});w1(ae,ce)||E(ce)});return ee.observe(Ld(g)),()=>{ee.disconnect()}}},[g,h]);const N=Qs((ee,le)=>{const{panels:ae,units:ce}=R.current,re=Tr(ae).findIndex(K=>K.current.id===ee),A=I[re];if((le??ce)==="pixels"){const K=Ga(g);return A/100*K}else return A},[g,I]),O=Qs((ee,le)=>{const{panels:ae}=R.current;return ae.size===0?{flexBasis:0,flexGrow:le??void 0,flexShrink:1,overflow:"hidden"}:{flexBasis:0,flexGrow:G7(ae,ee,I),flexShrink:1,overflow:"hidden",pointerEvents:o&&b!==null?"none":void 0}},[b,o,I]),T=Qs((ee,le)=>{const{units:ae}=R.current;wle(ae,le),w(ce=>{if(ce.has(ee))return ce;const J=new Map(ce);return J.set(ee,le),J})},[]),U=Qs(ee=>ae=>{ae.preventDefault();const{direction:ce,panels:J,sizes:re}=R.current,A=Tr(J),[L,K]=D2(g,ee,A);if(L==null||K==null)return;let ne=jle(ae,g,ee,A,ce,re,S.current);if(ne===0)return;const oe=Ld(g).getBoundingClientRect(),X=ce==="horizontal";document.dir==="rtl"&&X&&(ne=-ne);const Z=X?oe.width:oe.height,me=ne/Z*100,ve=Ju(ae,R.current,L,K,me,re,M.current,S.current),de=!w1(re,ve);if((Jb(ae)||ex(ae))&&D.current!=me&&S1(de?X?"horizontal":"vertical":X?ne<0?"horizontal-min":"horizontal-max":ne<0?"vertical-min":"vertical-max"),de){const ke=_.current;E(ve),Ki(A,ve,ke)}D.current=me},[g]),G=Qs(ee=>{w(le=>{if(!le.has(ee))return le;const ae=new Map(le);return ae.delete(ee),ae})},[]),q=Qs(ee=>{const{panels:le,sizes:ae}=R.current,ce=le.get(ee);if(ce==null)return;const{collapsedSize:J,collapsible:re}=ce.current;if(!re)return;const A=Tr(le),L=A.indexOf(ce);if(L<0)return;const K=ae[L];if(K===J)return;M.current.set(ee,K);const[ne,z]=y1(ee,A);if(ne==null||z==null)return;const X=L===A.length-1?K:J-K,Z=Ju(null,R.current,ne,z,X,ae,M.current,null);if(ae!==Z){const me=_.current;E(Z),Ki(A,Z,me)}},[]),Y=Qs(ee=>{const{panels:le,sizes:ae}=R.current,ce=le.get(ee);if(ce==null)return;const{collapsedSize:J,minSize:re}=ce.current,A=M.current.get(ee)||re;if(!A)return;const L=Tr(le),K=L.indexOf(ce);if(K<0||ae[K]!==J)return;const[z,oe]=y1(ee,L);if(z==null||oe==null)return;const Z=K===L.length-1?J-A:A,me=Ju(null,R.current,z,oe,Z,ae,M.current,null);if(ae!==me){const ve=_.current;E(me),Ki(L,me,ve)}},[]),Q=Qs((ee,le,ae)=>{const{id:ce,panels:J,sizes:re,units:A}=R.current;if((ae||A)==="pixels"){const Qe=Ga(ce);le=le/Qe*100}const L=J.get(ee);if(L==null)return;let{collapsedSize:K,collapsible:ne,maxSize:z,minSize:oe}=L.current;if(A==="pixels"){const Qe=Ga(ce);oe=oe/Qe*100,z!=null&&(z=z/Qe*100)}const X=Tr(J),Z=X.indexOf(L);if(Z<0)return;const me=re[Z];if(me===le)return;ne&&le===K||(le=Math.min(z??100,Math.max(oe,le)));const[ve,de]=y1(ee,X);if(ve==null||de==null)return;const we=Z===X.length-1?me-le:le-me,Re=Ju(null,R.current,ve,de,we,re,M.current,null);if(re!==Re){const Qe=_.current;E(Re),Ki(X,Re,Qe)}},[]),V=gle(()=>({activeHandleId:b,collapsePanel:q,direction:r,expandPanel:Y,getPanelSize:N,getPanelStyle:O,groupId:g,registerPanel:T,registerResizeHandle:U,resizePanel:Q,startDragging:(ee,le)=>{if(y(ee),Jb(le)||ex(le)){const ae=r0(ee);S.current={dragHandleRect:ae.getBoundingClientRect(),dragOffset:X7(le,ee,r),sizes:R.current.sizes}}},stopDragging:()=>{Ile(),y(null),S.current=null},units:h,unregisterPanel:G}),[b,q,r,Y,N,O,g,T,U,Q,h,G]),se={display:"flex",flexDirection:r==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return zc(n0.Provider,{children:zc(m,{children:t,className:n,"data-panel-group":"","data-panel-group-direction":r,"data-panel-group-id":g,"data-panel-group-units":h,style:{...se,...f}}),value:V})}const o0=H7((e,t)=>zc(J7,{...e,forwardedRef:t}));J7.displayName="PanelGroup";o0.displayName="forwardRef(PanelGroup)";function nx({children:e=null,className:t="",disabled:n=!1,id:r=null,onDragging:o,style:s={},tagName:l="div"}){const c=Zr(null),d=Zr({onDragging:o});la(()=>{d.current.onDragging=o});const f=W7(n0);if(f===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{activeHandleId:m,direction:h,groupId:g,registerResizeHandle:b,startDragging:y,stopDragging:x}=f,w=M2(r),S=m===w,[j,_]=md(!1),[I,E]=md(null),M=Qs(()=>{c.current.blur(),x();const{onDragging:N}=d.current;N&&N(!1)},[x]);la(()=>{if(n)E(null);else{const R=b(w);E(()=>R)}},[n,w,b]),la(()=>{if(n||I==null||!S)return;const R=U=>{I(U)},N=U=>{I(U)},T=c.current.ownerDocument;return T.body.addEventListener("contextmenu",M),T.body.addEventListener("mousemove",R),T.body.addEventListener("touchmove",R),T.body.addEventListener("mouseleave",N),window.addEventListener("mouseup",M),window.addEventListener("touchend",M),()=>{T.body.removeEventListener("contextmenu",M),T.body.removeEventListener("mousemove",R),T.body.removeEventListener("touchmove",R),T.body.removeEventListener("mouseleave",N),window.removeEventListener("mouseup",M),window.removeEventListener("touchend",M)}},[h,n,S,I,M]),kle({disabled:n,handleId:w,resizeHandler:I});const D={cursor:Q7(h),touchAction:"none",userSelect:"none"};return zc(l,{children:e,className:t,"data-resize-handle-active":S?"pointer":j?"keyboard":void 0,"data-panel-group-direction":h,"data-panel-group-id":g,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":w,onBlur:()=>_(!1),onFocus:()=>_(!0),onMouseDown:R=>{y(w,R.nativeEvent);const{onDragging:N}=d.current;N&&N(!0)},onMouseUp:M,onTouchCancel:M,onTouchEnd:M,onTouchStart:R=>{y(w,R.nativeEvent);const{onDragging:N}=d.current;N&&N(!0)},ref:c,role:"separator",style:{...D,...s},tabIndex:0})}nx.displayName="PanelResizeHandle";const Ole=e=>{const{direction:t="horizontal",collapsedDirection:n,isCollapsed:r=!1,...o}=e,s=ia("base.100","base.850"),l=ia("base.300","base.700");return t==="horizontal"?a.jsx(nx,{style:{visibility:r?"hidden":"visible",width:r?0:"auto"},children:a.jsx($,{className:"resize-handle-horizontal",sx:{w:n?2.5:4,h:"full",justifyContent:n?n==="left"?"flex-start":"flex-end":"center",alignItems:"center",div:{bg:s},_hover:{div:{bg:l}}},...o,children:a.jsx(Ie,{sx:{w:1,h:"calc(100% - 1rem)",borderRadius:"base",transitionProperty:"common",transitionDuration:"normal"}})})}):a.jsx(nx,{style:{visibility:r?"hidden":"visible",width:r?0:"auto"},children:a.jsx($,{className:"resize-handle-vertical",sx:{w:"full",h:n?2.5:4,alignItems:n?n==="top"?"flex-start":"flex-end":"center",justifyContent:"center",div:{bg:s},_hover:{div:{bg:l}}},...o,children:a.jsx(Ie,{sx:{h:1,w:"calc(100% - 1rem)",borderRadius:"base",transitionProperty:"common",transitionDuration:"normal"}})})})},Bh=i.memo(Ole),R2=()=>{const e=te(),t=H(o=>o.ui.panels),n=i.useCallback(o=>t[o]??"",[t]),r=i.useCallback((o,s)=>{e(TA({name:o,value:s}))},[e]);return{getItem:n,setItem:r}};const Dle=e=>{const{label:t,data:n,fileName:r,withDownload:o=!0,withCopy:s=!0}=e,l=i.useMemo(()=>NA(n)?n:JSON.stringify(n,null,2),[n]),c=i.useCallback(()=>{navigator.clipboard.writeText(l)},[l]),d=i.useCallback(()=>{const m=new Blob([l]),h=document.createElement("a");h.href=URL.createObjectURL(m),h.download=`${r||t}.json`,document.body.appendChild(h),h.click(),h.remove()},[l,t,r]),{t:f}=W();return a.jsxs($,{layerStyle:"second",sx:{borderRadius:"base",flexGrow:1,w:"full",h:"full",position:"relative"},children:[a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"auto",p:4,fontSize:"sm"},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsx("pre",{children:l})})}),a.jsxs($,{sx:{position:"absolute",top:0,insetInlineEnd:0,p:2},children:[o&&a.jsx(Ut,{label:`${f("gallery.download")} ${t} JSON`,children:a.jsx(rs,{"aria-label":`${f("gallery.download")} ${t} JSON`,icon:a.jsx(ou,{}),variant:"ghost",opacity:.7,onClick:d})}),s&&a.jsx(Ut,{label:`${f("gallery.copy")} ${t} JSON`,children:a.jsx(rs,{"aria-label":`${f("gallery.copy")} ${t} JSON`,icon:a.jsx(ru,{}),variant:"ghost",opacity:.7,onClick:c})})]})]})},pl=i.memo(Dle),Rle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(r=>r.id===t);return{data:n==null?void 0:n.data}}),Ale=()=>{const{data:e}=H(Rle);return e?a.jsx(pl,{data:e,label:"Node Data"}):a.jsx(Tn,{label:"No node selected",icon:null})},Tle=i.memo(Ale),Nle=({children:e,maxHeight:t})=>a.jsx($,{sx:{w:"full",h:"full",maxHeight:t,position:"relative"},children:a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}},children:e})})}),Sl=i.memo(Nle),$le=({output:e})=>{const{image:t}=e,{data:n}=jo(t.image_name);return a.jsx(fl,{imageDTO:n})},Lle=i.memo($le),Fle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(s=>s.id===t),r=n?e.nodeTemplates[n.data.type]:void 0,o=e.nodeExecutionStates[t??"__UNKNOWN_NODE__"];return{node:n,template:r,nes:o}}),zle=()=>{const{node:e,template:t,nes:n}=H(Fle),{t:r}=W();return!e||!n||!Jt(e)?a.jsx(Tn,{label:r("nodes.noNodeSelected"),icon:null}):n.outputs.length===0?a.jsx(Tn,{label:r("nodes.noOutputRecorded"),icon:null}):a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsx($,{sx:{position:"relative",flexDir:"column",alignItems:"flex-start",p:1,gap:2,h:"full",w:"full"},children:(t==null?void 0:t.outputType)==="image_output"?n.outputs.map((o,s)=>a.jsx(Lle,{output:o},Hle(o,s))):a.jsx(pl,{data:n.outputs,label:r("nodes.nodeOutputs")})})})})},Ble=i.memo(zle),Hle=(e,t)=>`${e.type}-${t}`,Wle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(o=>o.id===t);return{template:n?e.nodeTemplates[n.data.type]:void 0}}),Vle=()=>{const{template:e}=H(Wle),{t}=W();return e?a.jsx(pl,{data:e,label:t("nodes.nodeTemplate")}):a.jsx(Tn,{label:t("nodes.noNodeSelected"),icon:null})},Ule=i.memo(Vle),Gle=_e((e,t)=>{const n=te(),r=i.useCallback(s=>{s.shiftKey&&n(zr(!0))},[n]),o=i.useCallback(s=>{s.shiftKey||n(zr(!1))},[n]);return a.jsx(B6,{ref:t,onPaste:I2,onKeyDown:r,onKeyUp:o,...e})}),ga=i.memo(Gle),A2=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return o==null?void 0:o.data}),[e]);return H(t)},Kle=({nodeId:e})=>{const t=te(),n=A2(e),{t:r}=W(),o=i.useCallback(s=>{t($A({nodeId:e,notes:s.target.value}))},[t,e]);return Im(n)?a.jsxs(Gt,{children:[a.jsx(ln,{children:r("nodes.notes")}),a.jsx(ga,{value:n==null?void 0:n.notes,onChange:o,rows:10})]}):null},qle=i.memo(Kle),eO=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.label:!1}),[e]);return H(t)},tO=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return!1;const s=o?r.nodeTemplates[o.data.type]:void 0;return s==null?void 0:s.title}),[e]);return H(t)},Xle=({nodeId:e,title:t})=>{const n=te(),r=eO(e),o=tO(e),{t:s}=W(),[l,c]=i.useState(""),d=i.useCallback(async m=>{n(qI({nodeId:e,label:m})),c(r||t||o||s("nodes.problemSettingTitle"))},[n,e,t,o,r,s]),f=i.useCallback(m=>{c(m)},[]);return i.useEffect(()=>{c(r||t||o||s("nodes.problemSettingTitle"))},[r,o,t,s]),a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsxs(ef,{as:$,value:l,onChange:f,onSubmit:d,w:"full",fontWeight:600,children:[a.jsx(Jd,{noOfLines:1}),a.jsx(Zd,{className:"nodrag",_focusVisible:{boxShadow:"none"}})]})})},Qle=i.memo(Xle),Yle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(o=>o.id===t),r=n?e.nodeTemplates[n.data.type]:void 0;return{node:n,template:r}}),Zle=()=>{const{node:e,template:t}=H(Yle),{t:n}=W();return!t||!Jt(e)?a.jsx(Tn,{label:n("nodes.noNodeSelected"),icon:null}):a.jsx(nO,{node:e,template:t})},Jle=i.memo(Zle),nO=i.memo(({node:e,template:t})=>{const{t:n}=W(),r=i.useMemo(()=>$x(e,t),[e,t]);return a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsxs($,{sx:{flexDir:"column",position:"relative",p:1,gap:2,w:"full"},children:[a.jsx(Qle,{nodeId:e.data.id}),a.jsxs(ug,{children:[a.jsxs(Gt,{children:[a.jsx(ln,{children:n("nodes.nodeType")}),a.jsx(be,{fontSize:"sm",fontWeight:600,children:t.title})]}),a.jsx($,{flexDir:"row",alignItems:"center",justifyContent:"space-between",w:"full",children:a.jsxs(Gt,{isInvalid:r,children:[a.jsx(ln,{children:n("nodes.nodeVersion")}),a.jsx(be,{fontSize:"sm",fontWeight:600,children:e.data.version})]})})]}),a.jsx(qle,{nodeId:e.data.id})]})})})});nO.displayName="Content";const eie=()=>{const{t:e}=W();return a.jsx($,{layerStyle:"first",sx:{flexDir:"column",w:"full",h:"full",borderRadius:"base",p:2,gap:2},children:a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[a.jsxs(ui,{children:[a.jsx(mr,{children:e("common.details")}),a.jsx(mr,{children:e("common.outputs")}),a.jsx(mr,{children:e("common.data")}),a.jsx(mr,{children:e("common.template")})]}),a.jsxs(eu,{children:[a.jsx($r,{children:a.jsx(Jle,{})}),a.jsx($r,{children:a.jsx(Ble,{})}),a.jsx($r,{children:a.jsx(Tle,{})}),a.jsx($r,{children:a.jsx(Ule,{})})]})]})})},tie=i.memo(eie),nie={display:"flex",flexDirection:"row",alignItems:"center",gap:10},rie=e=>{const{label:t="",labelPos:n="top",isDisabled:r=!1,isInvalid:o,formControlProps:s,...l}=e,c=te(),d=i.useCallback(m=>{m.shiftKey&&c(zr(!0))},[c]),f=i.useCallback(m=>{m.shiftKey||c(zr(!1))},[c]);return a.jsxs(Gt,{isInvalid:o,isDisabled:r,...s,style:n==="side"?nie:void 0,children:[t!==""&&a.jsx(ln,{children:t}),a.jsx(Qc,{...l,onPaste:I2,onKeyDown:d,onKeyUp:f})]})},yo=i.memo(rie),oie=fe(pe,({workflow:e})=>{const{author:t,name:n,description:r,tags:o,version:s,contact:l,notes:c}=e;return{name:n,author:t,description:r,tags:o,version:s,contact:l,notes:c}}),sie=()=>{const{author:e,name:t,description:n,tags:r,version:o,contact:s,notes:l}=H(oie),c=te(),d=i.useCallback(w=>{c(XI(w.target.value))},[c]),f=i.useCallback(w=>{c(LA(w.target.value))},[c]),m=i.useCallback(w=>{c(FA(w.target.value))},[c]),h=i.useCallback(w=>{c(zA(w.target.value))},[c]),g=i.useCallback(w=>{c(BA(w.target.value))},[c]),b=i.useCallback(w=>{c(HA(w.target.value))},[c]),y=i.useCallback(w=>{c(WA(w.target.value))},[c]),{t:x}=W();return a.jsx(Sl,{children:a.jsxs($,{sx:{flexDir:"column",alignItems:"flex-start",gap:2,h:"full"},children:[a.jsxs($,{sx:{gap:2,w:"full"},children:[a.jsx(yo,{label:x("nodes.workflowName"),value:t,onChange:d}),a.jsx(yo,{label:x("nodes.workflowVersion"),value:o,onChange:h})]}),a.jsxs($,{sx:{gap:2,w:"full"},children:[a.jsx(yo,{label:x("nodes.workflowAuthor"),value:e,onChange:f}),a.jsx(yo,{label:x("nodes.workflowContact"),value:s,onChange:m})]}),a.jsx(yo,{label:x("nodes.workflowTags"),value:r,onChange:b}),a.jsxs(Gt,{as:$,sx:{flexDir:"column"},children:[a.jsx(ln,{children:x("nodes.workflowDescription")}),a.jsx(ga,{onChange:g,value:n,fontSize:"sm",sx:{resize:"none"}})]}),a.jsxs(Gt,{as:$,sx:{flexDir:"column",h:"full"},children:[a.jsx(ln,{children:x("nodes.workflowNotes")}),a.jsx(ga,{onChange:y,value:l,fontSize:"sm",sx:{h:"full",resize:"none"}})]})]})})},aie=i.memo(sie),s0=()=>{const e=H(c=>c.nodes.nodes),t=H(c=>c.nodes.edges),n=H(c=>c.workflow),[r]=kc(e,300),[o]=kc(t,300),[s]=kc(n,300);return i.useMemo(()=>VA({nodes:r,edges:o,workflow:s}),[r,o,s])},lie=()=>{const e=s0(),{t}=W();return a.jsx($,{sx:{flexDir:"column",alignItems:"flex-start",gap:2,h:"full"},children:a.jsx(pl,{data:e,label:t("nodes.workflow")})})},iie=i.memo(lie),cie=({isSelected:e,isHovered:t})=>{const n=i.useMemo(()=>{if(e&&t)return"nodeHoveredSelected.light";if(e)return"nodeSelected.light";if(t)return"nodeHovered.light"},[t,e]),r=i.useMemo(()=>{if(e&&t)return"nodeHoveredSelected.dark";if(e)return"nodeSelected.dark";if(t)return"nodeHovered.dark"},[t,e]);return a.jsx(Ie,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e||t?1:.5,transitionProperty:"common",transitionDuration:"0.1s",pointerEvents:"none",shadow:n,_dark:{shadow:r}}})},rO=i.memo(cie),oO=e=>{const t=te(),n=i.useMemo(()=>fe(pe,({nodes:l})=>l.mouseOverNode===e),[e]),r=H(n),o=i.useCallback(()=>{!r&&t(Yw(e))},[t,e,r]),s=i.useCallback(()=>{r&&t(Yw(null))},[t,r]);return{isMouseOverNode:r,handleMouseOver:o,handleMouseOut:s}},sO=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{var l;const s=o.nodes.find(c=>c.id===e);if(Jt(s))return(l=s==null?void 0:s.data.inputs[t])==null?void 0:l.label}),[t,e]);return H(n)},aO=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{var d;const l=s.nodes.find(f=>f.id===e);if(!Jt(l))return;const c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return(d=c==null?void 0:c[Lx[n]][t])==null?void 0:d.title}),[t,n,e]);return H(r)},lO=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s==null?void 0:s.data.inputs[t]}),[t,e]);return H(n)},iO=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e);if(!Jt(l))return;const c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return c==null?void 0:c[Lx[n]][t]}),[t,n,e]);return H(r)},cO=e=>{const{t}=W();return i.useMemo(()=>{if(!e)return"";const{name:r}=e;return e.isCollection?t("nodes.collectionFieldType",{name:r}):e.isCollectionOrScalar?t("nodes.collectionOrScalarFieldType",{name:r}):r},[e,t])},uie=({nodeId:e,fieldName:t,kind:n})=>{const r=lO(e,t),o=iO(e,t,n),s=UA(o),l=cO(o==null?void 0:o.type),{t:c}=W(),d=i.useMemo(()=>GA(r)?r.label&&(o!=null&&o.title)?`${r.label} (${o.title})`:r.label&&!o?r.label:!r.label&&o?o.title:c("nodes.unknownField"):(o==null?void 0:o.title)||c("nodes.unknownField"),[r,o,c]);return a.jsxs($,{sx:{flexDir:"column"},children:[a.jsx(be,{sx:{fontWeight:600},children:d}),o&&a.jsx(be,{sx:{opacity:.7,fontStyle:"oblique 5deg"},children:o.description}),l&&a.jsxs(be,{children:[c("parameters.type"),": ",l]}),s&&a.jsxs(be,{children:[c("common.input"),": ",KA(o.input)]})]})},T2=i.memo(uie),die=_e((e,t)=>{const{nodeId:n,fieldName:r,kind:o,isMissingInput:s=!1,withTooltip:l=!1}=e,c=sO(n,r),d=aO(n,r,o),{t:f}=W(),m=te(),[h,g]=i.useState(c||d||f("nodes.unknownField")),b=i.useCallback(async x=>{x&&(x===c||x===d)||(g(x||d||f("nodes.unknownField")),m(qA({nodeId:n,fieldName:r,label:x})))},[c,d,m,n,r,f]),y=i.useCallback(x=>{g(x)},[]);return i.useEffect(()=>{g(c||d||f("nodes.unknownField"))},[c,d,f]),a.jsx(Ut,{label:l?a.jsx(T2,{nodeId:n,fieldName:r,kind:"input"}):void 0,openDelay:Zh,placement:"top",hasArrow:!0,children:a.jsx($,{ref:t,sx:{position:"relative",overflow:"hidden",alignItems:"center",justifyContent:"flex-start",gap:1,h:"full"},children:a.jsxs(ef,{value:h,onChange:y,onSubmit:b,as:$,sx:{position:"relative",alignItems:"center",h:"full"},children:[a.jsx(Jd,{sx:{p:0,fontWeight:s?600:400,textAlign:"left",_hover:{fontWeight:"600 !important"}},noOfLines:1}),a.jsx(Zd,{className:"nodrag",sx:{p:0,w:"full",fontWeight:600,color:"base.900",_dark:{color:"base.100"},_focusVisible:{p:0,textAlign:"left",boxShadow:"none"}}}),a.jsx(dO,{})]})})})}),uO=i.memo(die),dO=i.memo(()=>{const{isEditing:e,getEditButtonProps:t}=K3(),n=i.useCallback(r=>{const{onClick:o}=t();o&&(o(r),r.preventDefault())},[t]);return e?null:a.jsx($,{onClick:n,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,cursor:"text"})});dO.displayName="EditableControls";const fie=e=>{var c;const{nodeId:t,field:n}=e,r=te(),{data:o,hasBoards:s}=Wd(void 0,{selectFromResult:({data:d})=>{const f=[{label:"None",value:"none"}];return d==null||d.forEach(({board_id:m,board_name:h})=>{f.push({label:h,value:m})}),{data:f,hasBoards:f.length>1}}}),l=i.useCallback(d=>{r(XA({nodeId:t,fieldName:n.name,value:d&&d!=="none"?{board_id:d}:void 0}))},[r,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",value:((c=n.value)==null?void 0:c.board_id)??"none",data:o,onChange:l,disabled:!s})},pie=i.memo(fie),mie=e=>{const{nodeId:t,field:n}=e,r=te(),o=i.useCallback(s=>{r(QA({nodeId:t,fieldName:n.name,value:s.target.checked}))},[r,n.name,t]);return a.jsx(Iy,{className:"nodrag",onChange:o,isChecked:n.value})},hie=i.memo(mie);function a0(){return(a0=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function rx(e){var t=i.useRef(e),n=i.useRef(function(r){t.current&&t.current(r)});return t.current=e,n.current}var Bc=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e0:w.buttons>0)&&o.current?s(m_(o.current,w,c.current)):x(!1)},y=function(){return x(!1)};function x(w){var S=d.current,j=ox(o.current),_=w?j.addEventListener:j.removeEventListener;_(S?"touchmove":"mousemove",b),_(S?"touchend":"mouseup",y)}return[function(w){var S=w.nativeEvent,j=o.current;if(j&&(h_(S),!function(I,E){return E&&!gd(I)}(S,d.current)&&j)){if(gd(S)){d.current=!0;var _=S.changedTouches||[];_.length&&(c.current=_[0].identifier)}j.focus(),s(m_(j,S,c.current)),x(!0)}},function(w){var S=w.which||w.keyCode;S<37||S>40||(w.preventDefault(),l({left:S===39?.05:S===37?-.05:0,top:S===40?.05:S===38?-.05:0}))},x]},[l,s]),m=f[0],h=f[1],g=f[2];return i.useEffect(function(){return g},[g]),B.createElement("div",a0({},r,{onTouchStart:m,onMouseDown:m,className:"react-colorful__interactive",ref:o,onKeyDown:h,tabIndex:0,role:"slider"}))}),l0=function(e){return e.filter(Boolean).join(" ")},$2=function(e){var t=e.color,n=e.left,r=e.top,o=r===void 0?.5:r,s=l0(["react-colorful__pointer",e.className]);return B.createElement("div",{className:s,style:{top:100*o+"%",left:100*n+"%"}},B.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},Sr=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n},pO=function(e){var t=e.s,n=e.v,r=e.a,o=(200-t)*n/100;return{h:Sr(e.h),s:Sr(o>0&&o<200?t*n/100/(o<=100?o:200-o)*100:0),l:Sr(o/2),a:Sr(r,2)}},sx=function(e){var t=pO(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},j1=function(e){var t=pO(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},gie=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var s=Math.floor(t),l=r*(1-n),c=r*(1-(t-s)*n),d=r*(1-(1-t+s)*n),f=s%6;return{r:Sr(255*[r,c,l,l,d,r][f]),g:Sr(255*[d,r,r,c,l,l][f]),b:Sr(255*[l,l,d,r,r,c][f]),a:Sr(o,2)}},vie=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,s=Math.max(t,n,r),l=s-Math.min(t,n,r),c=l?s===t?(n-r)/l:s===n?2+(r-t)/l:4+(t-n)/l:0;return{h:Sr(60*(c<0?c+6:c)),s:Sr(s?l/s*100:0),v:Sr(s/255*100),a:o}},bie=B.memo(function(e){var t=e.hue,n=e.onChange,r=l0(["react-colorful__hue",e.className]);return B.createElement("div",{className:r},B.createElement(N2,{onMove:function(o){n({h:360*o.left})},onKey:function(o){n({h:Bc(t+360*o.left,0,360)})},"aria-label":"Hue","aria-valuenow":Sr(t),"aria-valuemax":"360","aria-valuemin":"0"},B.createElement($2,{className:"react-colorful__hue-pointer",left:t/360,color:sx({h:t,s:100,v:100,a:1})})))}),xie=B.memo(function(e){var t=e.hsva,n=e.onChange,r={backgroundColor:sx({h:t.h,s:100,v:100,a:1})};return B.createElement("div",{className:"react-colorful__saturation",style:r},B.createElement(N2,{onMove:function(o){n({s:100*o.left,v:100-100*o.top})},onKey:function(o){n({s:Bc(t.s+100*o.left,0,100),v:Bc(t.v-100*o.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+Sr(t.s)+"%, Brightness "+Sr(t.v)+"%"},B.createElement($2,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:sx(t)})))}),mO=function(e,t){if(e===t)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0};function yie(e,t,n){var r=rx(n),o=i.useState(function(){return e.toHsva(t)}),s=o[0],l=o[1],c=i.useRef({color:t,hsva:s});i.useEffect(function(){if(!e.equal(t,c.current.color)){var f=e.toHsva(t);c.current={hsva:f,color:t},l(f)}},[t,e]),i.useEffect(function(){var f;mO(s,c.current.hsva)||e.equal(f=e.fromHsva(s),c.current.color)||(c.current={hsva:s,color:f},r(f))},[s,e,r]);var d=i.useCallback(function(f){l(function(m){return Object.assign({},m,f)})},[]);return[s,d]}var Cie=typeof window<"u"?i.useLayoutEffect:i.useEffect,wie=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},g_=new Map,Sie=function(e){Cie(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!g_.has(t)){var n=t.createElement("style");n.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,g_.set(t,n);var r=wie();r&&n.setAttribute("nonce",r),t.head.appendChild(n)}},[])},kie=function(e){var t=e.className,n=e.hsva,r=e.onChange,o={backgroundImage:"linear-gradient(90deg, "+j1(Object.assign({},n,{a:0}))+", "+j1(Object.assign({},n,{a:1}))+")"},s=l0(["react-colorful__alpha",t]),l=Sr(100*n.a);return B.createElement("div",{className:s},B.createElement("div",{className:"react-colorful__alpha-gradient",style:o}),B.createElement(N2,{onMove:function(c){r({a:c.left})},onKey:function(c){r({a:Bc(n.a+c.left)})},"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},B.createElement($2,{className:"react-colorful__alpha-pointer",left:n.a,color:j1(n)})))},jie=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,s=e.onChange,l=fO(e,["className","colorModel","color","onChange"]),c=i.useRef(null);Sie(c);var d=yie(n,o,s),f=d[0],m=d[1],h=l0(["react-colorful",t]);return B.createElement("div",a0({},l,{ref:c,className:h}),B.createElement(xie,{hsva:f,onChange:m}),B.createElement(bie,{hue:f.h,onChange:m}),B.createElement(kie,{hsva:f,onChange:m,className:"react-colorful__last-control"}))},_ie={defaultColor:{r:0,g:0,b:0,a:1},toHsva:vie,fromHsva:gie,equal:mO},hO=function(e){return B.createElement(jie,a0({},e,{colorModel:_ie}))};const Iie=e=>{const{nodeId:t,field:n}=e,r=te(),o=i.useCallback(s=>{r(YA({nodeId:t,fieldName:n.name,value:s}))},[r,n.name,t]);return a.jsx(hO,{className:"nodrag",color:n.value,onChange:o})},Pie=i.memo(Iie),gO=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=ZA.safeParse({base_model:n,model_name:o});if(!s.success){t.error({controlNetModelId:e,errors:s.error.format()},"Failed to parse ControlNet model id");return}return s.data},Eie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Ex(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/controlnet/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=gO(f);m&&o(JA({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},Mie=i.memo(Eie),Oie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),s=i.useCallback(l=>{o(eT({nodeId:t,fieldName:n.name,value:l.target.value}))},[o,n.name,t]);return a.jsx(w6,{className:"nowheel nodrag",onChange:s,value:n.value,children:r.options.map(l=>a.jsx("option",{value:l,children:r.ui_choice_labels?r.ui_choice_labels[l]:l},l))})},Die=i.memo(Oie),Rie=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=tT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({ipAdapterModelId:e,errors:s.error.format()},"Failed to parse IP-Adapter model id");return}return s.data},Aie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Ox(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/ip_adapter/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=Rie(f);m&&o(nT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},Tie=i.memo(Aie),Nie=e=>{var h;const{nodeId:t,field:n}=e,r=te(),o=H(g=>g.system.isConnected),{currentData:s,isError:l}=jo(((h=n.value)==null?void 0:h.image_name)??Br),c=i.useCallback(()=>{r(rT({nodeId:t,fieldName:n.name,value:void 0}))},[r,n.name,t]),d=i.useMemo(()=>{if(s)return{id:`node-${t}-${n.name}`,payloadType:"IMAGE_DTO",payload:{imageDTO:s}}},[n.name,s,t]),f=i.useMemo(()=>({id:`node-${t}-${n.name}`,actionType:"SET_NODES_IMAGE",context:{nodeId:t,fieldName:n.name}}),[n.name,t]),m=i.useMemo(()=>({type:"SET_NODES_IMAGE",nodeId:t,fieldName:n.name}),[t,n.name]);return i.useEffect(()=>{o&&l&&c()},[c,o,l]),a.jsx($,{className:"nodrag",sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(fl,{imageDTO:s,droppableData:f,draggableData:d,postUploadAction:m,useThumbailFallback:!0,uploadElement:a.jsx(vO,{}),dropLabel:a.jsx(bO,{}),minSize:8,children:a.jsx(jc,{onClick:c,icon:s?a.jsx(Ng,{}):void 0,tooltip:"Reset Image"})})})},$ie=i.memo(Nie),vO=i.memo(()=>{const{t:e}=W();return a.jsx(be,{fontSize:16,fontWeight:600,children:e("gallery.dropOrUpload")})});vO.displayName="UploadElement";const bO=i.memo(()=>{const{t:e}=W();return a.jsx(be,{fontSize:16,fontWeight:600,children:e("gallery.drop")})});bO.displayName="DropLabel";const Lie=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=oT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({loraModelId:e,errors:s.error.format()},"Failed to parse LoRA model id");return}return s.data},Fie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Vd(),{t:l}=W(),c=i.useMemo(()=>{if(!s)return[];const h=[];return qn(s.entities,(g,b)=>{g&&h.push({value:b,label:g.model_name,group:xn[g.base_model]})}),h.sort((g,b)=>g.disabled&&!b.disabled?1:-1)},[s]),d=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/lora/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r==null?void 0:r.base_model,r==null?void 0:r.model_name]),f=i.useCallback(h=>{if(!h)return;const g=Lie(h);g&&o(sT({nodeId:t,fieldName:n.name,value:g}))},[o,n.name,t]),m=i.useCallback((h,g)=>{var b;return((b=g.label)==null?void 0:b.toLowerCase().includes(h.toLowerCase().trim()))||g.value.toLowerCase().includes(h.toLowerCase().trim())},[]);return(s==null?void 0:s.ids.length)===0?a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:l("models.noLoRAsLoaded")})}):a.jsx(sn,{className:"nowheel nodrag",value:(d==null?void 0:d.id)??null,placeholder:c.length>0?l("models.selectLoRA"):l("models.noLoRAsAvailable"),data:c,nothingFound:l("models.noMatchingLoRAs"),itemComponent:xl,disabled:c.length===0,filter:m,error:!d,onChange:f,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}})},zie=i.memo(Fie),i0=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=aT.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data};function cu(e){const{iconMode:t=!1,...n}=e,r=te(),{t:o}=W(),[s,{isLoading:l}]=lT(),c=i.useCallback(()=>{s().unwrap().then(d=>{r(lt(rn({title:`${o("modelManager.modelsSynced")}`,status:"success"})))}).catch(d=>{d&&r(lt(rn({title:`${o("modelManager.modelSyncFailed")}`,status:"error"})))})},[r,s,o]);return t?a.jsx(Fe,{icon:a.jsx(XM,{}),tooltip:o("modelManager.syncModels"),"aria-label":o("modelManager.syncModels"),isLoading:l,onClick:c,size:"sm",...n}):a.jsx(Xe,{isLoading:l,onClick:c,minW:"max-content",...n,children:o("modelManager.syncModels")})}const Bie=e=>{var y,x;const{nodeId:t,field:n}=e,r=te(),o=Mt("syncModels").isFeatureEnabled,{t:s}=W(),{data:l,isLoading:c}=vd(Zw),{data:d,isLoading:f}=as(Zw),m=i.useMemo(()=>c||f,[c,f]),h=i.useMemo(()=>{if(!d)return[];const w=[];return qn(d.entities,(S,j)=>{S&&w.push({value:j,label:S.model_name,group:xn[S.base_model]})}),l&&qn(l.entities,(S,j)=>{S&&w.push({value:j,label:S.model_name,group:xn[S.base_model]})}),w},[d,l]),g=i.useMemo(()=>{var w,S,j,_;return((d==null?void 0:d.entities[`${(w=n.value)==null?void 0:w.base_model}/main/${(S=n.value)==null?void 0:S.model_name}`])||(l==null?void 0:l.entities[`${(j=n.value)==null?void 0:j.base_model}/onnx/${(_=n.value)==null?void 0:_.model_name}`]))??null},[(y=n.value)==null?void 0:y.base_model,(x=n.value)==null?void 0:x.model_name,d==null?void 0:d.entities,l==null?void 0:l.entities]),b=i.useCallback(w=>{if(!w)return;const S=i0(w);S&&r(QI({nodeId:t,fieldName:n.name,value:S}))},[r,n.name,t]);return a.jsxs($,{sx:{w:"full",alignItems:"center",gap:2},children:[m?a.jsx(be,{variant:"subtext",children:"Loading..."}):a.jsx(sn,{className:"nowheel nodrag",tooltip:g==null?void 0:g.description,value:g==null?void 0:g.id,placeholder:h.length>0?s("models.selectModel"):s("models.noModelsAvailable"),data:h,error:!g,disabled:h.length===0,onChange:b,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),o&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},Hie=i.memo(Bie),Wie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),[s,l]=i.useState(String(n.value)),c=i.useMemo(()=>r.type.name==="IntegerField",[r.type]),d=i.useCallback(f=>{l(f),f.match(zh)||o(iT({nodeId:t,fieldName:n.name,value:c?Math.floor(Number(f)):Number(f)}))},[o,n.name,c,t]);return i.useEffect(()=>{!s.match(zh)&&n.value!==Number(s)&&l(String(n.value))},[n.value,s]),a.jsxs(mg,{onChange:d,value:s,step:c?1:.1,precision:c?0:3,children:[a.jsx(gg,{className:"nodrag"}),a.jsxs(hg,{children:[a.jsx(bg,{}),a.jsx(vg,{})]})]})},Vie=i.memo(Wie),Uie=e=>{var h,g;const{nodeId:t,field:n}=e,r=te(),{t:o}=W(),s=Mt("syncModels").isFeatureEnabled,{data:l,isLoading:c}=as(Fx),d=i.useMemo(()=>{if(!l)return[];const b=[];return qn(l.entities,(y,x)=>{y&&b.push({value:x,label:y.model_name,group:xn[y.base_model]})}),b},[l]),f=i.useMemo(()=>{var b,y;return(l==null?void 0:l.entities[`${(b=n.value)==null?void 0:b.base_model}/main/${(y=n.value)==null?void 0:y.model_name}`])??null},[(h=n.value)==null?void 0:h.base_model,(g=n.value)==null?void 0:g.model_name,l==null?void 0:l.entities]),m=i.useCallback(b=>{if(!b)return;const y=i0(b);y&&r(cT({nodeId:t,fieldName:n.name,value:y}))},[r,n.name,t]);return c?a.jsx(sn,{label:o("modelManager.model"),placeholder:o("models.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{className:"nowheel nodrag",tooltip:f==null?void 0:f.description,value:f==null?void 0:f.id,placeholder:d.length>0?o("models.selectModel"):o("models.noModelsAvailable"),data:d,error:!f,disabled:d.length===0,onChange:m,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),s&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},Gie=i.memo(Uie),Kie=e=>{var g,b;const{nodeId:t,field:n}=e,r=te(),{t:o}=W(),s=Mt("syncModels").isFeatureEnabled,{data:l}=vd(Jw),{data:c,isLoading:d}=as(Jw),f=i.useMemo(()=>{if(!c)return[];const y=[];return qn(c.entities,(x,w)=>{!x||x.base_model!=="sdxl"||y.push({value:w,label:x.model_name,group:xn[x.base_model]})}),l&&qn(l.entities,(x,w)=>{!x||x.base_model!=="sdxl"||y.push({value:w,label:x.model_name,group:xn[x.base_model]})}),y},[c,l]),m=i.useMemo(()=>{var y,x,w,S;return((c==null?void 0:c.entities[`${(y=n.value)==null?void 0:y.base_model}/main/${(x=n.value)==null?void 0:x.model_name}`])||(l==null?void 0:l.entities[`${(w=n.value)==null?void 0:w.base_model}/onnx/${(S=n.value)==null?void 0:S.model_name}`]))??null},[(g=n.value)==null?void 0:g.base_model,(b=n.value)==null?void 0:b.model_name,c==null?void 0:c.entities,l==null?void 0:l.entities]),h=i.useCallback(y=>{if(!y)return;const x=i0(y);x&&r(QI({nodeId:t,fieldName:n.name,value:x}))},[r,n.name,t]);return d?a.jsx(sn,{label:o("modelManager.model"),placeholder:o("models.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{className:"nowheel nodrag",tooltip:m==null?void 0:m.description,value:m==null?void 0:m.id,placeholder:f.length>0?o("models.selectModel"):o("models.noModelsAvailable"),data:f,error:!m,disabled:f.length===0,onChange:h,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),s&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},qie=i.memo(Kie),Xie=fe([pe],({ui:e})=>{const{favoriteSchedulers:t}=e;return{data:Hr(Gh,(r,o)=>({value:o,label:r,group:t.includes(o)?"Favorites":void 0})).sort((r,o)=>r.label.localeCompare(o.label))}}),Qie=e=>{const{nodeId:t,field:n}=e,r=te(),{data:o}=H(Xie),s=i.useCallback(l=>{l&&r(uT({nodeId:t,fieldName:n.name,value:l}))},[r,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",value:n.value,data:o,onChange:s})},Yie=i.memo(Qie),Zie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),s=i.useCallback(l=>{o(dT({nodeId:t,fieldName:n.name,value:l.target.value}))},[o,n.name,t]);return r.ui_component==="textarea"?a.jsx(ga,{className:"nodrag",onChange:s,value:n.value,rows:5,resize:"none"}):a.jsx(yo,{onChange:s,value:n.value})},Jie=i.memo(Zie),ece=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=fT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({t2iAdapterModelId:e,errors:s.error.format()},"Failed to parse T2I-Adapter model id");return}return s.data},tce=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Mx(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/t2i_adapter/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=ece(f);m&&o(pT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},nce=i.memo(tce),xO=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=mT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({vaeModelId:e,errors:s.error.format()},"Failed to parse VAE model id");return}return s.data},rce=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=YI(),l=i.useMemo(()=>{if(!s)return[];const f=[{value:"default",label:"Default",group:"Default"}];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f.sort((m,h)=>m.disabled&&!h.disabled?1:-1)},[s]),c=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r]),d=i.useCallback(f=>{if(!f)return;const m=xO(f);m&&o(hT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",itemComponent:xl,tooltip:c==null?void 0:c.description,value:(c==null?void 0:c.id)??"default",placeholder:"Default",data:l,onChange:d,disabled:l.length===0,error:!c,clearable:!0,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}})},oce=i.memo(rce),sce=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=lO(e,t),o=iO(e,t,"input");return(o==null?void 0:o.fieldKind)==="output"?a.jsxs(Ie,{p:2,children:[n("nodes.outputFieldInInput"),": ",r==null?void 0:r.type.name]}):gT(r)&&vT(o)?a.jsx(Jie,{nodeId:e,field:r,fieldTemplate:o}):bT(r)&&xT(o)?a.jsx(hie,{nodeId:e,field:r,fieldTemplate:o}):yT(r)&&CT(o)||wT(r)&&ST(o)?a.jsx(Vie,{nodeId:e,field:r,fieldTemplate:o}):kT(r)&&jT(o)?a.jsx(Die,{nodeId:e,field:r,fieldTemplate:o}):_T(r)&&IT(o)?a.jsx($ie,{nodeId:e,field:r,fieldTemplate:o}):PT(r)&&ET(o)?a.jsx(pie,{nodeId:e,field:r,fieldTemplate:o}):MT(r)&&OT(o)?a.jsx(Hie,{nodeId:e,field:r,fieldTemplate:o}):DT(r)&&RT(o)?a.jsx(Gie,{nodeId:e,field:r,fieldTemplate:o}):AT(r)&&TT(o)?a.jsx(oce,{nodeId:e,field:r,fieldTemplate:o}):NT(r)&&$T(o)?a.jsx(zie,{nodeId:e,field:r,fieldTemplate:o}):LT(r)&&FT(o)?a.jsx(Mie,{nodeId:e,field:r,fieldTemplate:o}):zT(r)&&BT(o)?a.jsx(Tie,{nodeId:e,field:r,fieldTemplate:o}):HT(r)&&WT(o)?a.jsx(nce,{nodeId:e,field:r,fieldTemplate:o}):VT(r)&&UT(o)?a.jsx(Pie,{nodeId:e,field:r,fieldTemplate:o}):GT(r)&&KT(o)?a.jsx(qie,{nodeId:e,field:r,fieldTemplate:o}):qT(r)&&XT(o)?a.jsx(Yie,{nodeId:e,field:r,fieldTemplate:o}):r&&o?null:a.jsx(Ie,{p:1,children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownFieldType",{type:r==null?void 0:r.type.name})})})},yO=i.memo(sce),ace=({nodeId:e,fieldName:t})=>{const n=te(),{isMouseOverNode:r,handleMouseOut:o,handleMouseOver:s}=oO(e),{t:l}=W(),c=i.useCallback(()=>{n(ZI({nodeId:e,fieldName:t}))},[n,t,e]);return a.jsxs($,{onMouseEnter:s,onMouseLeave:o,layerStyle:"second",sx:{position:"relative",borderRadius:"base",w:"full",p:2},children:[a.jsxs(Gt,{as:$,sx:{flexDir:"column",gap:1,flexShrink:1},children:[a.jsxs(ln,{sx:{display:"flex",alignItems:"center",mb:0},children:[a.jsx(uO,{nodeId:e,fieldName:t,kind:"input"}),a.jsx(Wr,{}),a.jsx(Ut,{label:a.jsx(T2,{nodeId:e,fieldName:t,kind:"input"}),openDelay:Zh,placement:"top",hasArrow:!0,children:a.jsx($,{h:"full",alignItems:"center",children:a.jsx(An,{as:HM})})}),a.jsx(Fe,{"aria-label":l("nodes.removeLinearView"),tooltip:l("nodes.removeLinearView"),variant:"ghost",size:"sm",onClick:c,icon:a.jsx(ao,{})})]}),a.jsx(yO,{nodeId:e,fieldName:t})]}),a.jsx(rO,{isSelected:!1,isHovered:r})]})},lce=i.memo(ace),ice=fe(pe,({workflow:e})=>({fields:e.exposedFields})),cce=()=>{const{fields:e}=H(ice),{t}=W();return a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsx($,{sx:{position:"relative",flexDir:"column",alignItems:"flex-start",p:1,gap:2,h:"full",w:"full"},children:e.length?e.map(({nodeId:n,fieldName:r})=>a.jsx(lce,{nodeId:n,fieldName:r},`${n}.${r}`)):a.jsx(Tn,{label:t("nodes.noFieldsLinearview"),icon:null})})})})},uce=i.memo(cce),dce=()=>{const{t:e}=W();return a.jsx($,{layerStyle:"first",sx:{flexDir:"column",w:"full",h:"full",borderRadius:"base",p:2,gap:2},children:a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[a.jsxs(ui,{children:[a.jsx(mr,{children:e("common.linear")}),a.jsx(mr,{children:e("common.details")}),a.jsx(mr,{children:"JSON"})]}),a.jsxs(eu,{children:[a.jsx($r,{children:a.jsx(uce,{})}),a.jsx($r,{children:a.jsx(aie,{})}),a.jsx($r,{children:a.jsx(iie,{})})]})]})})},fce=i.memo(dce),pce=()=>{const[e,t]=i.useState(!1),[n,r]=i.useState(!1),o=i.useRef(null),s=R2(),l=i.useCallback(()=>{o.current&&o.current.setLayout([50,50])},[]);return a.jsxs($,{sx:{flexDir:"column",gap:2,height:"100%",width:"100%"},children:[a.jsx(z7,{}),a.jsx($,{layerStyle:"first",sx:{w:"full",position:"relative",borderRadius:"base",p:2,pb:3,gap:2,flexDir:"column"},children:a.jsx(ds,{asSlider:!0})}),a.jsxs(o0,{ref:o,id:"workflow-panel-group",autoSaveId:"workflow-panel-group",direction:"vertical",style:{height:"100%",width:"100%"},storage:s,children:[a.jsx(rl,{id:"workflow",collapsible:!0,onCollapse:t,minSize:25,children:a.jsx(fce,{})}),a.jsx(Bh,{direction:"vertical",onDoubleClick:l,collapsedDirection:e?"top":n?"bottom":void 0}),a.jsx(rl,{id:"inspector",collapsible:!0,onCollapse:r,minSize:25,children:a.jsx(tie,{})})]})]})},mce=i.memo(pce),v_=(e,t)=>{const n=i.useRef(null),[r,o]=i.useState(()=>{var f;return!!((f=n.current)!=null&&f.getCollapsed())}),s=i.useCallback(()=>{var f;(f=n.current)!=null&&f.getCollapsed()?Jr.flushSync(()=>{var m;(m=n.current)==null||m.expand()}):Jr.flushSync(()=>{var m;(m=n.current)==null||m.collapse()})},[]),l=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.expand()})},[]),c=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.collapse()})},[]),d=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.resize(e,t)})},[e,t]);return{ref:n,minSize:e,isCollapsed:r,setIsCollapsed:o,reset:d,toggle:s,expand:l,collapse:c}},hce=({isGalleryCollapsed:e,galleryPanelRef:t})=>{const{t:n}=W(),r=i.useCallback(()=>{var o;(o=t.current)==null||o.expand()},[t]);return e?a.jsx(Uc,{children:a.jsx($,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineEnd:"1.63rem",children:a.jsx(Fe,{tooltip:"Show Gallery (G)",tooltipProps:{placement:"top"},"aria-label":n("accessibility.showGalleryPanel"),onClick:r,icon:a.jsx(Jse,{}),sx:{p:0,px:3,h:48,borderEndRadius:0}})})}):null},gce=i.memo(hce),Jp={borderStartRadius:0,flexGrow:1},vce=({isSidePanelCollapsed:e,sidePanelRef:t})=>{const{t:n}=W(),r=i.useCallback(()=>{var o;(o=t.current)==null||o.expand()},[t]);return e?a.jsx(Uc,{children:a.jsxs($,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineStart:"5.13rem",direction:"column",gap:2,h:48,children:[a.jsxs($t,{isAttached:!0,orientation:"vertical",flexGrow:3,children:[a.jsx(Fe,{tooltip:n("parameters.showOptionsPanel"),"aria-label":n("parameters.showOptionsPanel"),onClick:r,sx:Jp,icon:a.jsx(qM,{})}),a.jsx($7,{asIconButton:!0,sx:Jp}),a.jsx(D7,{asIconButton:!0,sx:Jp})]}),a.jsx(P2,{asIconButton:!0,sx:Jp})]})}):null},bce=i.memo(vce),xce=e=>{const{label:t,activeLabel:n,children:r,defaultIsOpen:o=!1}=e,{isOpen:s,onToggle:l}=sr({defaultIsOpen:o}),{colorMode:c}=ya();return a.jsxs(Ie,{children:[a.jsxs($,{onClick:l,sx:{alignItems:"center",p:2,px:4,gap:2,borderTopRadius:"base",borderBottomRadius:s?0:"base",bg:Te("base.250","base.750")(c),color:Te("base.900","base.100")(c),_hover:{bg:Te("base.300","base.700")(c)},fontSize:"sm",fontWeight:600,cursor:"pointer",transitionProperty:"common",transitionDuration:"normal",userSelect:"none"},"data-testid":`${t} collapsible`,children:[t,a.jsx(hr,{children:n&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(be,{sx:{color:"accent.500",_dark:{color:"accent.300"}},children:n})},"statusText")}),a.jsx(Wr,{}),a.jsx(Kg,{sx:{w:"1rem",h:"1rem",transform:s?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]}),a.jsx(Xd,{in:s,animateOpacity:!0,style:{overflow:"unset"},children:a.jsx(Ie,{sx:{p:4,pb:4,borderBottomRadius:"base",bg:"base.150",_dark:{bg:"base.800"}},children:r})})]})},_r=i.memo(xce),yce=fe(pe,e=>{const{maxPrompts:t,combinatorial:n}=e.dynamicPrompts,{min:r,sliderMax:o,inputMax:s}=e.config.sd.dynamicPrompts.maxPrompts;return{maxPrompts:t,min:r,sliderMax:o,inputMax:s,isDisabled:!n}}),Cce=()=>{const{maxPrompts:e,min:t,sliderMax:n,inputMax:r,isDisabled:o}=H(yce),s=te(),{t:l}=W(),c=i.useCallback(f=>{s(QT(f))},[s]),d=i.useCallback(()=>{s(YT())},[s]);return a.jsx(Ot,{feature:"dynamicPromptsMaxPrompts",children:a.jsx(nt,{label:l("dynamicPrompts.maxPrompts"),isDisabled:o,min:t,max:n,value:e,onChange:c,sliderNumberInputProps:{max:r},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})})},wce=i.memo(Cce),Sce=fe(pe,e=>{const{isLoading:t,isError:n,prompts:r,parsingError:o}=e.dynamicPrompts;return{prompts:r,parsingError:o,isError:n,isLoading:t}}),kce={"&::marker":{color:"base.500",_dark:{color:"base.500"}}},jce=()=>{const{t:e}=W(),{prompts:t,parsingError:n,isLoading:r,isError:o}=H(Sce);return o?a.jsx(Ot,{feature:"dynamicPrompts",children:a.jsx($,{w:"full",h:"full",layerStyle:"second",alignItems:"center",justifyContent:"center",p:8,children:a.jsx(Tn,{icon:lae,label:"Problem generating prompts"})})}):a.jsx(Ot,{feature:"dynamicPrompts",children:a.jsxs(Gt,{isInvalid:!!n,children:[a.jsxs(ln,{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",children:[e("dynamicPrompts.promptsPreview")," (",t.length,")",n&&` - ${n}`]}),a.jsxs($,{h:64,pos:"relative",layerStyle:"third",borderRadius:"base",p:2,children:[a.jsx(Sl,{children:a.jsx(N5,{stylePosition:"inside",ms:0,children:t.map((s,l)=>a.jsx(ts,{fontSize:"sm",sx:kce,children:a.jsx(be,{as:"span",children:s})},`${s}.${l}`))})}),r&&a.jsx($,{pos:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,layerStyle:"second",opacity:.7,alignItems:"center",justifyContent:"center",children:a.jsx(va,{})})]})]})})},_ce=i.memo(jce),CO=i.forwardRef(({label:e,description:t,...n},r)=>a.jsx(Ie,{ref:r,...n,children:a.jsxs(Ie,{children:[a.jsx(be,{fontWeight:600,children:e}),t&&a.jsx(be,{size:"xs",variant:"subtext",children:t})]})}));CO.displayName="IAIMantineSelectItemWithDescription";const Ice=i.memo(CO),Pce=()=>{const e=te(),{t}=W(),n=H(s=>s.dynamicPrompts.seedBehaviour),r=i.useMemo(()=>[{value:"PER_ITERATION",label:t("dynamicPrompts.seedBehaviour.perIterationLabel"),description:t("dynamicPrompts.seedBehaviour.perIterationDesc")},{value:"PER_PROMPT",label:t("dynamicPrompts.seedBehaviour.perPromptLabel"),description:t("dynamicPrompts.seedBehaviour.perPromptDesc")}],[t]),o=i.useCallback(s=>{s&&e(ZT(s))},[e]);return a.jsx(Ot,{feature:"dynamicPromptsSeedBehaviour",children:a.jsx(yn,{label:t("dynamicPrompts.seedBehaviour.label"),value:n,data:r,itemComponent:Ice,onChange:o})})},Ece=i.memo(Pce),Mce=()=>{const{t:e}=W(),t=i.useMemo(()=>fe(pe,({dynamicPrompts:o})=>{const s=o.prompts.length;if(s>1)return e("dynamicPrompts.promptsWithCount_other",{count:s})}),[e]),n=H(t);return Mt("dynamicPrompting").isFeatureEnabled?a.jsx(_r,{label:e("dynamicPrompts.dynamicPrompts"),activeLabel:n,children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(_ce,{}),a.jsx(Ece,{}),a.jsx(wce,{})]})}):null},uu=i.memo(Mce),Oce=e=>{const t=te(),{lora:n}=e,r=i.useCallback(l=>{t(JT({id:n.id,weight:l}))},[t,n.id]),o=i.useCallback(()=>{t(e9(n.id))},[t,n.id]),s=i.useCallback(()=>{t(t9(n.id))},[t,n.id]);return a.jsx(Ot,{feature:"lora",children:a.jsxs($,{sx:{gap:2.5,alignItems:"flex-end"},children:[a.jsx(nt,{label:n.model_name,value:n.weight,onChange:r,min:-1,max:2,step:.01,withInput:!0,withReset:!0,handleReset:o,withSliderMarks:!0,sliderMarks:[-1,0,1,2],sliderNumberInputProps:{min:-50,max:50}}),a.jsx(Fe,{size:"sm",onClick:s,tooltip:"Remove LoRA","aria-label":"Remove LoRA",icon:a.jsx(ao,{}),colorScheme:"error"})]})})},Dce=i.memo(Oce),Rce=fe(pe,({lora:e})=>({lorasArray:Hr(e.loras)})),Ace=()=>{const{lorasArray:e}=H(Rce);return a.jsx(a.Fragment,{children:e.map((t,n)=>a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[n>0&&a.jsx(On,{pt:1}),a.jsx(Dce,{lora:t})]},t.model_name))})},Tce=i.memo(Ace),Nce=fe(pe,({lora:e})=>({loras:e.loras})),$ce=()=>{const e=te(),{loras:t}=H(Nce),{data:n}=Vd(),{t:r}=W(),o=H(d=>d.generation.model),s=i.useMemo(()=>{if(!n)return[];const d=[];return qn(n.entities,(f,m)=>{if(!f||m in t)return;const h=(o==null?void 0:o.base_model)!==f.base_model;d.push({value:m,label:f.model_name,disabled:h,group:xn[f.base_model],tooltip:h?`Incompatible base model: ${f.base_model}`:void 0})}),d.sort((f,m)=>f.label&&!m.label?1:-1),d.sort((f,m)=>f.disabled&&!m.disabled?1:-1)},[t,n,o==null?void 0:o.base_model]),l=i.useCallback(d=>{if(!d)return;const f=n==null?void 0:n.entities[d];f&&e(n9(f))},[e,n==null?void 0:n.entities]),c=i.useCallback((d,f)=>{var m;return((m=f.label)==null?void 0:m.toLowerCase().includes(d.toLowerCase().trim()))||f.value.toLowerCase().includes(d.toLowerCase().trim())},[]);return(n==null?void 0:n.ids.length)===0?a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:r("models.noLoRAsInstalled")})}):a.jsx(sn,{placeholder:s.length===0?"All LoRAs added":r("models.addLora"),value:null,data:s,nothingFound:"No matching LoRAs",itemComponent:xl,disabled:s.length===0,filter:c,onChange:l,"data-testid":"add-lora"})},Lce=i.memo($ce),Fce=fe(pe,e=>{const t=JI(e.lora.loras);return{activeLabel:t>0?`${t} Active`:void 0}}),zce=()=>{const{t:e}=W(),{activeLabel:t}=H(Fce);return Mt("lora").isFeatureEnabled?a.jsx(_r,{label:e("modelManager.loraModels"),activeLabel:t,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Lce,{}),a.jsx(Tce,{})]})}):null},du=i.memo(zce),Bce=()=>{const e=te(),t=H(o=>o.generation.shouldUseCpuNoise),{t:n}=W(),r=i.useCallback(o=>{e(r9(o.target.checked))},[e]);return a.jsx(Ot,{feature:"noiseUseCPU",children:a.jsx(_n,{label:n("parameters.useCpuNoise"),isChecked:t,onChange:r})})},Hce=fe(pe,({generation:e})=>{const{seamlessXAxis:t}=e;return{seamlessXAxis:t}}),Wce=()=>{const{t:e}=W(),{seamlessXAxis:t}=H(Hce),n=te(),r=i.useCallback(o=>{n(o9(o.target.checked))},[n]);return a.jsx(_n,{label:e("parameters.seamlessXAxis"),"aria-label":e("parameters.seamlessXAxis"),isChecked:t,onChange:r})},Vce=i.memo(Wce),Uce=fe(pe,({generation:e})=>{const{seamlessYAxis:t}=e;return{seamlessYAxis:t}}),Gce=()=>{const{t:e}=W(),{seamlessYAxis:t}=H(Uce),n=te(),r=i.useCallback(o=>{n(s9(o.target.checked))},[n]);return a.jsx(_n,{label:e("parameters.seamlessYAxis"),"aria-label":e("parameters.seamlessYAxis"),isChecked:t,onChange:r})},Kce=i.memo(Gce),qce=()=>{const{t:e}=W();return Mt("seamless").isFeatureEnabled?a.jsxs(Gt,{children:[a.jsx(ln,{children:e("parameters.seamlessTiling")})," ",a.jsxs($,{sx:{gap:5},children:[a.jsx(Ie,{flexGrow:1,children:a.jsx(Vce,{})}),a.jsx(Ie,{flexGrow:1,children:a.jsx(Kce,{})})]})]}):null},Xce=i.memo(qce),Qce=fe([pe],({generation:e,hotkeys:t})=>{const{cfgRescaleMultiplier:n}=e,{shift:r}=t;return{cfgRescaleMultiplier:n,shift:r}}),Yce=()=>{const{cfgRescaleMultiplier:e,shift:t}=H(Qce),n=te(),{t:r}=W(),o=i.useCallback(l=>n(wm(l)),[n]),s=i.useCallback(()=>n(wm(0)),[n]);return a.jsx(Ot,{feature:"paramCFGRescaleMultiplier",children:a.jsx(nt,{label:r("parameters.cfgRescaleMultiplier"),step:t?.01:.05,min:0,max:.99,onChange:o,handleReset:s,value:e,sliderNumberInputProps:{max:.99},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1})})},Zce=i.memo(Yce);function Jce(){const e=H(d=>d.generation.clipSkip),{model:t}=H(d=>d.generation),n=te(),{t:r}=W(),o=i.useCallback(d=>{n(eS(d))},[n]),s=i.useCallback(()=>{n(eS(0))},[n]),l=i.useMemo(()=>t?wp[t.base_model].maxClip:wp["sd-1"].maxClip,[t]),c=i.useMemo(()=>t?wp[t.base_model].markers:wp["sd-1"].markers,[t]);return(t==null?void 0:t.base_model)==="sdxl"?null:a.jsx(Ot,{feature:"clipSkip",placement:"top",children:a.jsx(nt,{label:r("parameters.clipSkip"),"aria-label":r("parameters.clipSkip"),min:0,max:l,step:1,value:e,onChange:o,withSliderMarks:!0,sliderMarks:c,withInput:!0,withReset:!0,handleReset:s})})}const eue=fe(pe,e=>{const{clipSkip:t,model:n,seamlessXAxis:r,seamlessYAxis:o,shouldUseCpuNoise:s,cfgRescaleMultiplier:l}=e.generation;return{clipSkip:t,model:n,seamlessXAxis:r,seamlessYAxis:o,shouldUseCpuNoise:s,cfgRescaleMultiplier:l}});function fu(){const{clipSkip:e,model:t,seamlessXAxis:n,seamlessYAxis:r,shouldUseCpuNoise:o,cfgRescaleMultiplier:s}=H(eue),{t:l}=W(),c=i.useMemo(()=>{const d=[];return o||d.push(l("parameters.gpuNoise")),e>0&&t&&t.base_model!=="sdxl"&&d.push(l("parameters.clipSkipWithLayerCount",{layerCount:e})),n&&r?d.push(l("parameters.seamlessX&Y")):n?d.push(l("parameters.seamlessX")):r&&d.push(l("parameters.seamlessY")),s&&d.push(l("parameters.cfgRescale")),d.join(", ")},[s,e,t,n,r,o,l]);return a.jsx(_r,{label:l("common.advanced"),activeLabel:c,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Xce,{}),a.jsx(On,{}),t&&(t==null?void 0:t.base_model)!=="sdxl"&&a.jsxs(a.Fragment,{children:[a.jsx(Jce,{}),a.jsx(On,{pt:2})]}),a.jsx(Bce,{}),a.jsx(On,{}),a.jsx(Zce,{})]})})}const _a=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return((o=Ao(r,e))==null?void 0:o.isEnabled)??!1}),[e]);return H(t)},tue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.model}),[e]);return H(t)},wO=e=>{const{data:t}=Ex(),n=i.useMemo(()=>t?NI.getSelectors().selectAll(t):[],[t]),{data:r}=Mx(),o=i.useMemo(()=>r?$I.getSelectors().selectAll(r):[],[r]),{data:s}=Ox(),l=i.useMemo(()=>s?LI.getSelectors().selectAll(s):[],[s]);return e==="controlnet"?n:e==="t2i_adapter"?o:e==="ip_adapter"?l:[]},SO=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.type}),[e]);return H(t)},nue=fe(pe,({generation:e})=>{const{model:t}=e;return{mainModel:t}}),rue=({id:e})=>{const t=_a(e),n=SO(e),r=tue(e),o=te(),{mainModel:s}=H(nue),{t:l}=W(),c=wO(n),d=i.useMemo(()=>{if(!c)return[];const h=[];return c.forEach(g=>{if(!g)return;const b=(g==null?void 0:g.base_model)!==(s==null?void 0:s.base_model);h.push({value:g.id,label:g.model_name,group:xn[g.base_model],disabled:b,tooltip:b?`${l("controlnet.incompatibleBaseModel")} ${g.base_model}`:void 0})}),h.sort((g,b)=>g.disabled?1:b.disabled?-1:g.label.localeCompare(b.label)),h},[s==null?void 0:s.base_model,c,l]),f=i.useMemo(()=>c.find(h=>(h==null?void 0:h.id)===`${r==null?void 0:r.base_model}/${n}/${r==null?void 0:r.model_name}`),[n,r==null?void 0:r.base_model,r==null?void 0:r.model_name,c]),m=i.useCallback(h=>{if(!h)return;const g=gO(h);g&&o(a9({id:e,model:g}))},[o,e]);return a.jsx(sn,{itemComponent:xl,data:d,error:!f||(s==null?void 0:s.base_model)!==f.base_model,placeholder:l("controlnet.selectModel"),value:(f==null?void 0:f.id)??null,onChange:m,disabled:!t,tooltip:f==null?void 0:f.description})},oue=i.memo(rue),sue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.weight}),[e]);return H(t)},aue=({id:e})=>{const t=_a(e),n=sue(e),r=te(),{t:o}=W(),s=i.useCallback(l=>{r(l9({id:e,weight:l}))},[r,e]);return na(n)?null:a.jsx(Ot,{feature:"controlNetWeight",children:a.jsx(nt,{isDisabled:!t,label:o("controlnet.weight"),value:n,onChange:s,min:0,max:2,step:.01,withSliderMarks:!0,sliderMarks:[0,1,2]})})},lue=i.memo(aue),iue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.controlImage}),[e]);return H(t)},cue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processedControlImage:void 0}),[e]);return H(t)},uue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processorType:void 0}),[e]);return H(t)},due=fe(pe,({controlAdapters:e,gallery:t,system:n})=>{const{pendingControlImages:r}=e,{autoAddBoardId:o}=t,{isConnected:s}=n;return{pendingControlImages:r,autoAddBoardId:o,isConnected:s}}),fue=({isSmall:e,id:t})=>{const n=iue(t),r=cue(t),o=uue(t),s=te(),{t:l}=W(),{pendingControlImages:c,autoAddBoardId:d,isConnected:f}=H(due),m=H(tr),[h,g]=i.useState(!1),{currentData:b,isError:y}=jo(n??Br),{currentData:x,isError:w}=jo(r??Br),[S]=i9(),[j]=c9(),[_]=u9(),I=i.useCallback(()=>{s(d9({id:t,controlImage:null}))},[t,s]),E=i.useCallback(async()=>{x&&(await S({imageDTO:x,is_intermediate:!1}).unwrap(),d!=="none"?j({imageDTO:x,board_id:d}):_({imageDTO:x}))},[x,S,d,j,_]),M=i.useCallback(()=>{b&&(m==="unifiedCanvas"?s(es({width:b.width,height:b.height})):(s(Za(b.width)),s(Ja(b.height))))},[b,m,s]),D=i.useCallback(()=>{g(!0)},[]),R=i.useCallback(()=>{g(!1)},[]),N=i.useMemo(()=>{if(b)return{id:t,payloadType:"IMAGE_DTO",payload:{imageDTO:b}}},[b,t]),O=i.useMemo(()=>({id:t,actionType:"SET_CONTROL_ADAPTER_IMAGE",context:{id:t}}),[t]),T=i.useMemo(()=>({type:"SET_CONTROL_ADAPTER_IMAGE",id:t}),[t]),U=b&&x&&!h&&!c.includes(t)&&o!=="none";return i.useEffect(()=>{f&&(y||w)&&I()},[I,f,y,w]),a.jsxs($,{onMouseEnter:D,onMouseLeave:R,sx:{position:"relative",w:"full",h:e?28:366,alignItems:"center",justifyContent:"center"},children:[a.jsx(fl,{draggableData:N,droppableData:O,imageDTO:b,isDropDisabled:U,postUploadAction:T}),a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",opacity:U?1:0,transitionProperty:"common",transitionDuration:"normal",pointerEvents:"none"},children:a.jsx(fl,{draggableData:N,droppableData:O,imageDTO:x,isUploadDisabled:!0})}),a.jsxs(a.Fragment,{children:[a.jsx(jc,{onClick:I,icon:b?a.jsx(Ng,{}):void 0,tooltip:l("controlnet.resetControlImage")}),a.jsx(jc,{onClick:E,icon:b?a.jsx(gf,{size:16}):void 0,tooltip:l("controlnet.saveControlImage"),styleOverrides:{marginTop:6}}),a.jsx(jc,{onClick:M,icon:b?a.jsx(Qy,{size:16}):void 0,tooltip:l("controlnet.setControlImageDimensions"),styleOverrides:{marginTop:12}})]}),c.includes(t)&&a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",alignItems:"center",justifyContent:"center",opacity:.8,borderRadius:"base",bg:"base.400",_dark:{bg:"base.900"}},children:a.jsx(va,{size:"xl",sx:{color:"base.100",_dark:{color:"base.400"}}})})]})},b_=i.memo(fue),No=()=>{const e=te();return i.useCallback((n,r)=>{e(f9({id:n,params:r}))},[e])};function $o(e){return a.jsx($,{sx:{flexDirection:"column",gap:2,pb:2},children:e.children})}const x_=jr.canny_image_processor.default,pue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{low_threshold:o,high_threshold:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{low_threshold:g})},[t,l]),f=i.useCallback(()=>{l(t,{low_threshold:x_.low_threshold})},[t,l]),m=i.useCallback(g=>{l(t,{high_threshold:g})},[t,l]),h=i.useCallback(()=>{l(t,{high_threshold:x_.high_threshold})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{isDisabled:!r,label:c("controlnet.lowThreshold"),value:o,onChange:d,handleReset:f,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0}),a.jsx(nt,{isDisabled:!r,label:c("controlnet.highThreshold"),value:s,onChange:m,handleReset:h,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0})]})},mue=i.memo(pue),hue=jr.color_map_image_processor.default,gue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{color_map_tile_size:o}=n,s=No(),{t:l}=W(),c=i.useCallback(f=>{s(t,{color_map_tile_size:f})},[t,s]),d=i.useCallback(()=>{s(t,{color_map_tile_size:hue.color_map_tile_size})},[t,s]);return a.jsx($o,{children:a.jsx(nt,{isDisabled:!r,label:l("controlnet.colorMapTileSize"),value:o,onChange:c,handleReset:d,withReset:!0,min:1,max:256,step:1,withInput:!0,withSliderMarks:!0,sliderNumberInputProps:{max:4096}})})},vue=i.memo(gue),Wu=jr.content_shuffle_image_processor.default,bue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,w:l,h:c,f:d}=n,f=No(),{t:m}=W(),h=i.useCallback(E=>{f(t,{detect_resolution:E})},[t,f]),g=i.useCallback(()=>{f(t,{detect_resolution:Wu.detect_resolution})},[t,f]),b=i.useCallback(E=>{f(t,{image_resolution:E})},[t,f]),y=i.useCallback(()=>{f(t,{image_resolution:Wu.image_resolution})},[t,f]),x=i.useCallback(E=>{f(t,{w:E})},[t,f]),w=i.useCallback(()=>{f(t,{w:Wu.w})},[t,f]),S=i.useCallback(E=>{f(t,{h:E})},[t,f]),j=i.useCallback(()=>{f(t,{h:Wu.h})},[t,f]),_=i.useCallback(E=>{f(t,{f:E})},[t,f]),I=i.useCallback(()=>{f(t,{f:Wu.f})},[t,f]);return a.jsxs($o,{children:[a.jsx(nt,{label:m("controlnet.detectResolution"),value:s,onChange:h,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.imageResolution"),value:o,onChange:b,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.w"),value:l,onChange:x,handleReset:w,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.h"),value:c,onChange:S,handleReset:j,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.f"),value:d,onChange:_,handleReset:I,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},xue=i.memo(bue),y_=jr.hed_image_processor.default,yue=e=>{const{controlNetId:t,processorNode:{detect_resolution:n,image_resolution:r,scribble:o},isEnabled:s}=e,l=No(),{t:c}=W(),d=i.useCallback(b=>{l(t,{detect_resolution:b})},[t,l]),f=i.useCallback(b=>{l(t,{image_resolution:b})},[t,l]),m=i.useCallback(b=>{l(t,{scribble:b.target.checked})},[t,l]),h=i.useCallback(()=>{l(t,{detect_resolution:y_.detect_resolution})},[t,l]),g=i.useCallback(()=>{l(t,{image_resolution:y_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:n,onChange:d,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!s}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:r,onChange:f,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!s}),a.jsx(_n,{label:c("controlnet.scribble"),isChecked:o,onChange:m,isDisabled:!s})]})},Cue=i.memo(yue),C_=jr.lineart_anime_image_processor.default,wue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{detect_resolution:g})},[t,l]),f=i.useCallback(g=>{l(t,{image_resolution:g})},[t,l]),m=i.useCallback(()=>{l(t,{detect_resolution:C_.detect_resolution})},[t,l]),h=i.useCallback(()=>{l(t,{image_resolution:C_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:s,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:o,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Sue=i.memo(wue),w_=jr.lineart_image_processor.default,kue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,coarse:l}=n,c=No(),{t:d}=W(),f=i.useCallback(y=>{c(t,{detect_resolution:y})},[t,c]),m=i.useCallback(y=>{c(t,{image_resolution:y})},[t,c]),h=i.useCallback(()=>{c(t,{detect_resolution:w_.detect_resolution})},[t,c]),g=i.useCallback(()=>{c(t,{image_resolution:w_.image_resolution})},[t,c]),b=i.useCallback(y=>{c(t,{coarse:y.target.checked})},[t,c]);return a.jsxs($o,{children:[a.jsx(nt,{label:d("controlnet.detectResolution"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:d("controlnet.imageResolution"),value:o,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:d("controlnet.coarse"),isChecked:l,onChange:b,isDisabled:!r})]})},jue=i.memo(kue),S_=jr.mediapipe_face_processor.default,_ue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{max_faces:o,min_confidence:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{max_faces:g})},[t,l]),f=i.useCallback(g=>{l(t,{min_confidence:g})},[t,l]),m=i.useCallback(()=>{l(t,{max_faces:S_.max_faces})},[t,l]),h=i.useCallback(()=>{l(t,{min_confidence:S_.min_confidence})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.maxFaces"),value:o,onChange:d,handleReset:m,withReset:!0,min:1,max:20,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.minConfidence"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Iue=i.memo(_ue),k_=jr.midas_depth_image_processor.default,Pue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{a_mult:o,bg_th:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{a_mult:g})},[t,l]),f=i.useCallback(g=>{l(t,{bg_th:g})},[t,l]),m=i.useCallback(()=>{l(t,{a_mult:k_.a_mult})},[t,l]),h=i.useCallback(()=>{l(t,{bg_th:k_.bg_th})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.amult"),value:o,onChange:d,handleReset:m,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.bgth"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Eue=i.memo(Pue),em=jr.mlsd_image_processor.default,Mue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,thr_d:l,thr_v:c}=n,d=No(),{t:f}=W(),m=i.useCallback(j=>{d(t,{detect_resolution:j})},[t,d]),h=i.useCallback(j=>{d(t,{image_resolution:j})},[t,d]),g=i.useCallback(j=>{d(t,{thr_d:j})},[t,d]),b=i.useCallback(j=>{d(t,{thr_v:j})},[t,d]),y=i.useCallback(()=>{d(t,{detect_resolution:em.detect_resolution})},[t,d]),x=i.useCallback(()=>{d(t,{image_resolution:em.image_resolution})},[t,d]),w=i.useCallback(()=>{d(t,{thr_d:em.thr_d})},[t,d]),S=i.useCallback(()=>{d(t,{thr_v:em.thr_v})},[t,d]);return a.jsxs($o,{children:[a.jsx(nt,{label:f("controlnet.detectResolution"),value:s,onChange:m,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.imageResolution"),value:o,onChange:h,handleReset:x,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.w"),value:l,onChange:g,handleReset:w,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.h"),value:c,onChange:b,handleReset:S,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Oue=i.memo(Mue),j_=jr.normalbae_image_processor.default,Due=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{detect_resolution:g})},[t,l]),f=i.useCallback(g=>{l(t,{image_resolution:g})},[t,l]),m=i.useCallback(()=>{l(t,{detect_resolution:j_.detect_resolution})},[t,l]),h=i.useCallback(()=>{l(t,{image_resolution:j_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:s,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:o,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Rue=i.memo(Due),__=jr.openpose_image_processor.default,Aue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,hand_and_face:l}=n,c=No(),{t:d}=W(),f=i.useCallback(y=>{c(t,{detect_resolution:y})},[t,c]),m=i.useCallback(y=>{c(t,{image_resolution:y})},[t,c]),h=i.useCallback(()=>{c(t,{detect_resolution:__.detect_resolution})},[t,c]),g=i.useCallback(()=>{c(t,{image_resolution:__.image_resolution})},[t,c]),b=i.useCallback(y=>{c(t,{hand_and_face:y.target.checked})},[t,c]);return a.jsxs($o,{children:[a.jsx(nt,{label:d("controlnet.detectResolution"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:d("controlnet.imageResolution"),value:o,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:d("controlnet.handAndFace"),isChecked:l,onChange:b,isDisabled:!r})]})},Tue=i.memo(Aue),I_=jr.pidi_image_processor.default,Nue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,scribble:l,safe:c}=n,d=No(),{t:f}=W(),m=i.useCallback(w=>{d(t,{detect_resolution:w})},[t,d]),h=i.useCallback(w=>{d(t,{image_resolution:w})},[t,d]),g=i.useCallback(()=>{d(t,{detect_resolution:I_.detect_resolution})},[t,d]),b=i.useCallback(()=>{d(t,{image_resolution:I_.image_resolution})},[t,d]),y=i.useCallback(w=>{d(t,{scribble:w.target.checked})},[t,d]),x=i.useCallback(w=>{d(t,{safe:w.target.checked})},[t,d]);return a.jsxs($o,{children:[a.jsx(nt,{label:f("controlnet.detectResolution"),value:s,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.imageResolution"),value:o,onChange:h,handleReset:b,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:f("controlnet.scribble"),isChecked:l,onChange:y}),a.jsx(_n,{label:f("controlnet.safe"),isChecked:c,onChange:x,isDisabled:!r})]})},$ue=i.memo(Nue),Lue=e=>null,Fue=i.memo(Lue),kO=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processorNode:void 0}),[e]);return H(t)},zue=({id:e})=>{const t=_a(e),n=kO(e);return n?n.type==="canny_image_processor"?a.jsx(mue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="color_map_image_processor"?a.jsx(vue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="hed_image_processor"?a.jsx(Cue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="lineart_image_processor"?a.jsx(jue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="content_shuffle_image_processor"?a.jsx(xue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="lineart_anime_image_processor"?a.jsx(Sue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="mediapipe_face_processor"?a.jsx(Iue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="midas_depth_image_processor"?a.jsx(Eue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="mlsd_image_processor"?a.jsx(Oue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="normalbae_image_processor"?a.jsx(Rue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="openpose_image_processor"?a.jsx(Tue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="pidi_image_processor"?a.jsx($ue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="zoe_depth_image_processor"?a.jsx(Fue,{controlNetId:e,processorNode:n,isEnabled:t}):null:null},Bue=i.memo(zue),Hue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&Gc(o))return o.shouldAutoConfig}),[e]);return H(t)},Wue=({id:e})=>{const t=_a(e),n=Hue(e),r=te(),{t:o}=W(),s=i.useCallback(()=>{r(p9({id:e}))},[e,r]);return na(n)?null:a.jsx(_n,{label:o("controlnet.autoConfigure"),"aria-label":o("controlnet.autoConfigure"),isChecked:n,onChange:s,isDisabled:!t})},Vue=i.memo(Wue),Uue=e=>{const{id:t}=e,n=te(),{t:r}=W(),o=i.useCallback(()=>{n(m9({id:t}))},[t,n]),s=i.useCallback(()=>{n(h9({id:t}))},[t,n]);return a.jsxs($,{sx:{gap:2},children:[a.jsx(Fe,{size:"sm",icon:a.jsx(si,{}),tooltip:r("controlnet.importImageFromCanvas"),"aria-label":r("controlnet.importImageFromCanvas"),onClick:o}),a.jsx(Fe,{size:"sm",icon:a.jsx(UM,{}),tooltip:r("controlnet.importMaskFromCanvas"),"aria-label":r("controlnet.importMaskFromCanvas"),onClick:s})]})},Gue=i.memo(Uue),Kue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o?{beginStepPct:o.beginStepPct,endStepPct:o.endStepPct}:void 0}),[e]);return H(t)},P_=e=>`${Math.round(e*100)}%`,que=({id:e})=>{const t=_a(e),n=Kue(e),r=te(),{t:o}=W(),s=i.useCallback(l=>{r(g9({id:e,beginStepPct:l[0]})),r(v9({id:e,endStepPct:l[1]}))},[r,e]);return n?a.jsx(Ot,{feature:"controlNetBeginEnd",children:a.jsxs(Gt,{isDisabled:!t,children:[a.jsx(ln,{children:o("controlnet.beginEndStepPercent")}),a.jsx(ug,{w:"100%",gap:2,alignItems:"center",children:a.jsxs(O6,{"aria-label":["Begin Step %","End Step %!"],value:[n.beginStepPct,n.endStepPct],onChange:s,min:0,max:1,step:.01,minStepsBetweenThumbs:5,isDisabled:!t,children:[a.jsx(D6,{children:a.jsx(R6,{})}),a.jsx(Ut,{label:P_(n.beginStepPct),placement:"top",hasArrow:!0,children:a.jsx(bb,{index:0})}),a.jsx(Ut,{label:P_(n.endStepPct),placement:"top",hasArrow:!0,children:a.jsx(bb,{index:1})}),a.jsx(dm,{value:0,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},children:"0%"}),a.jsx(dm,{value:.5,sx:{insetInlineStart:"50% !important",transform:"translateX(-50%)"},children:"50%"}),a.jsx(dm,{value:1,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},children:"100%"})]})})]})}):null},Xue=i.memo(que),Que=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&b9(o))return o.controlMode}),[e]);return H(t)};function Yue({id:e}){const t=_a(e),n=Que(e),r=te(),{t:o}=W(),s=[{label:o("controlnet.balanced"),value:"balanced"},{label:o("controlnet.prompt"),value:"more_prompt"},{label:o("controlnet.control"),value:"more_control"},{label:o("controlnet.megaControl"),value:"unbalanced"}],l=i.useCallback(c=>{r(x9({id:e,controlMode:c}))},[e,r]);return n?a.jsx(Ot,{feature:"controlNetControlMode",children:a.jsx(yn,{disabled:!t,label:o("controlnet.controlMode"),data:s,value:n,onChange:l})}):null}const Zue=e=>e.config,Jue=fe(Zue,e=>Hr(jr,n=>({value:n.type,label:n.label})).sort((n,r)=>n.value==="none"?-1:r.value==="none"?1:n.label.localeCompare(r.label)).filter(n=>!e.sd.disabledControlNetProcessors.includes(n.value))),ede=({id:e})=>{const t=_a(e),n=kO(e),r=te(),o=H(Jue),{t:s}=W(),l=i.useCallback(c=>{r(y9({id:e,processorType:c}))},[e,r]);return n?a.jsx(sn,{label:s("controlnet.processor"),value:n.type??"canny_image_processor",data:o,onChange:l,disabled:!t}):null},tde=i.memo(ede),nde=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&Gc(o))return o.resizeMode}),[e]);return H(t)};function rde({id:e}){const t=_a(e),n=nde(e),r=te(),{t:o}=W(),s=[{label:o("controlnet.resize"),value:"just_resize"},{label:o("controlnet.crop"),value:"crop_resize"},{label:o("controlnet.fill"),value:"fill_resize"}],l=i.useCallback(c=>{r(C9({id:e,resizeMode:c}))},[e,r]);return n?a.jsx(Ot,{feature:"controlNetResizeMode",children:a.jsx(yn,{disabled:!t,label:o("controlnet.resizeMode"),data:s,value:n,onChange:l})}):null}const ode=e=>{const{id:t,number:n}=e,r=SO(t),o=te(),{t:s}=W(),l=H(tr),c=_a(t),[d,f]=ene(!1),m=i.useCallback(()=>{o(w9({id:t}))},[t,o]),h=i.useCallback(()=>{o(S9(t))},[t,o]),g=i.useCallback(b=>{o(k9({id:t,isEnabled:b.target.checked}))},[t,o]);return r?a.jsxs($,{sx:{flexDir:"column",gap:3,p:2,borderRadius:"base",position:"relative",bg:"base.250",_dark:{bg:"base.750"}},children:[a.jsx($,{sx:{gap:2,alignItems:"center",justifyContent:"space-between"},children:a.jsx(_n,{label:s(`controlnet.${r}`,{number:n}),"aria-label":s("controlnet.toggleControlNet"),isChecked:c,onChange:g,formControlProps:{w:"full"},formLabelProps:{fontWeight:600}})}),a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(Ie,{sx:{w:"full",minW:0,transitionProperty:"common",transitionDuration:"0.1s"},children:a.jsx(oue,{id:t})}),l==="unifiedCanvas"&&a.jsx(Gue,{id:t}),a.jsx(Fe,{size:"sm",tooltip:s("controlnet.duplicate"),"aria-label":s("controlnet.duplicate"),onClick:h,icon:a.jsx(ru,{})}),a.jsx(Fe,{size:"sm",tooltip:s("controlnet.delete"),"aria-label":s("controlnet.delete"),colorScheme:"error",onClick:m,icon:a.jsx(ao,{})}),a.jsx(Fe,{size:"sm",tooltip:s(d?"controlnet.hideAdvanced":"controlnet.showAdvanced"),"aria-label":s(d?"controlnet.hideAdvanced":"controlnet.showAdvanced"),onClick:f,variant:"ghost",sx:{_hover:{bg:"none"}},icon:a.jsx(Kg,{sx:{boxSize:4,color:"base.700",transform:d?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal",_dark:{color:"base.300"}}})})]}),a.jsxs($,{sx:{w:"full",flexDirection:"column",gap:3},children:[a.jsxs($,{sx:{gap:4,w:"full",alignItems:"center"},children:[a.jsxs($,{sx:{flexDir:"column",gap:3,h:28,w:"full",paddingInlineStart:1,paddingInlineEnd:d?1:0,pb:2,justifyContent:"space-between"},children:[a.jsx(lue,{id:t}),a.jsx(Xue,{id:t})]}),!d&&a.jsx($,{sx:{alignItems:"center",justifyContent:"center",h:28,w:28,aspectRatio:"1/1"},children:a.jsx(b_,{id:t,isSmall:!0})})]}),a.jsxs($,{sx:{gap:2},children:[a.jsx(Yue,{id:t}),a.jsx(rde,{id:t})]}),a.jsx(tde,{id:t})]}),d&&a.jsxs(a.Fragment,{children:[a.jsx(b_,{id:t}),a.jsx(Vue,{id:t}),a.jsx(Bue,{id:t})]})]}):null},sde=i.memo(ode),_1=e=>{const t=H(c=>{var d;return(d=c.generation.model)==null?void 0:d.base_model}),n=te(),r=wO(e),o=i.useMemo(()=>{const c=r.filter(d=>t?d.base_model===t:!0)[0];return c||r[0]},[t,r]),s=i.useMemo(()=>!o,[o]);return[i.useCallback(()=>{s||n(j9({type:e,overrides:{model:o}}))},[n,o,s,e]),s]},ade=fe([pe],({controlAdapters:e})=>{const t=[];let n=!1;const r=_9(e).filter(m=>m.isEnabled).length,o=I9(e).length;r>0&&t.push(`${r} IP`),r>o&&(n=!0);const s=P9(e).filter(m=>m.isEnabled).length,l=E9(e).length;s>0&&t.push(`${s} ControlNet`),s>l&&(n=!0);const c=M9(e).filter(m=>m.isEnabled).length,d=O9(e).length;return c>0&&t.push(`${c} T2I`),c>d&&(n=!0),{controlAdapterIds:D9(e).map(String),activeLabel:t.join(", "),isError:n}}),lde=()=>{const{t:e}=W(),{controlAdapterIds:t,activeLabel:n}=H(ade),r=Mt("controlNet").isFeatureDisabled,[o,s]=_1("controlnet"),[l,c]=_1("ip_adapter"),[d,f]=_1("t2i_adapter");return r?null:a.jsx(_r,{label:e("controlnet.controlAdapter_other"),activeLabel:n,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsxs($t,{size:"sm",w:"full",justifyContent:"space-between",children:[a.jsx(Xe,{tooltip:e("controlnet.addControlNet"),leftIcon:a.jsx(nl,{}),onClick:o,"data-testid":"add controlnet",flexGrow:1,isDisabled:s,children:e("common.controlNet")}),a.jsx(Xe,{tooltip:e("controlnet.addIPAdapter"),leftIcon:a.jsx(nl,{}),onClick:l,"data-testid":"add ip adapter",flexGrow:1,isDisabled:c,children:e("common.ipAdapter")}),a.jsx(Xe,{tooltip:e("controlnet.addT2IAdapter"),leftIcon:a.jsx(nl,{}),onClick:d,"data-testid":"add t2i adapter",flexGrow:1,isDisabled:f,children:e("common.t2iAdapter")})]}),t.map((m,h)=>a.jsxs(i.Fragment,{children:[a.jsx(On,{}),a.jsx(sde,{id:m,number:h+1})]},m))]})})},pu=i.memo(lde),ide=e=>{const{onClick:t}=e,{t:n}=W();return a.jsx(Fe,{size:"sm","aria-label":n("embedding.addEmbedding"),tooltip:n("embedding.addEmbedding"),icon:a.jsx(LM,{}),sx:{p:2,color:"base.500",_hover:{color:"base.600"},_active:{color:"base.700"},_dark:{color:"base.500",_hover:{color:"base.400"},_active:{color:"base.300"}}},variant:"link",onClick:t})},c0=i.memo(ide),cde="28rem",ude=e=>{const{onSelect:t,isOpen:n,onClose:r,children:o}=e,{data:s}=R9(),l=i.useRef(null),{t:c}=W(),d=H(g=>g.generation.model),f=i.useMemo(()=>{if(!s)return[];const g=[];return qn(s.entities,(b,y)=>{if(!b)return;const x=(d==null?void 0:d.base_model)!==b.base_model;g.push({value:b.model_name,label:b.model_name,group:xn[b.base_model],disabled:x,tooltip:x?`${c("embedding.incompatibleModel")} ${b.base_model}`:void 0})}),g.sort((b,y)=>{var x;return b.label&&y.label?(x=b.label)!=null&&x.localeCompare(y.label)?-1:1:-1}),g.sort((b,y)=>b.disabled&&!y.disabled?1:-1)},[s,d==null?void 0:d.base_model,c]),m=i.useCallback(g=>{g&&t(g)},[t]),h=i.useCallback((g,b)=>{var y;return((y=b.label)==null?void 0:y.toLowerCase().includes(g.toLowerCase().trim()))||b.value.toLowerCase().includes(g.toLowerCase().trim())},[]);return a.jsxs(lf,{initialFocusRef:l,isOpen:n,onClose:r,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[a.jsx(yg,{children:o}),a.jsx(cf,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:a.jsx(Cg,{sx:{p:0,w:`calc(${cde} - 2rem )`},children:f.length===0?a.jsx($,{sx:{justifyContent:"center",p:2,fontSize:"sm",color:"base.500",_dark:{color:"base.700"}},children:a.jsx(be,{children:c("embedding.noEmbeddingsLoaded")})}):a.jsx(sn,{inputRef:l,autoFocus:!0,placeholder:c("embedding.addEmbedding"),value:null,data:f,nothingFound:c("embedding.noMatchingEmbedding"),itemComponent:xl,disabled:f.length===0,onDropdownClose:r,filter:h,onChange:m})})})]})},u0=i.memo(ude),dde=()=>{const e=H(h=>h.generation.negativePrompt),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),s=te(),{t:l}=W(),c=i.useCallback(h=>{s(rd(h.target.value))},[s]),d=i.useCallback(h=>{h.key==="<"&&o()},[o]),f=i.useCallback(h=>{if(!t.current)return;const g=t.current.selectionStart;if(g===void 0)return;let b=e.slice(0,g);b[b.length-1]!=="<"&&(b+="<"),b+=`${h}>`;const y=b.length;b+=e.slice(g),Jr.flushSync(()=>{s(rd(b))}),t.current.selectionEnd=y,r()},[s,r,e]),m=Mt("embedding").isFeatureEnabled;return a.jsxs(Gt,{children:[a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(Ot,{feature:"paramNegativeConditioning",placement:"right",children:a.jsx(ga,{id:"negativePrompt",name:"negativePrompt",ref:t,value:e,placeholder:l("parameters.negativePromptPlaceholder"),onChange:c,resize:"vertical",fontSize:"sm",minH:16,...m&&{onKeyDown:d}})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},jO=i.memo(dde),fde=fe([pe],({generation:e})=>({prompt:e.positivePrompt})),pde=()=>{const e=te(),{prompt:t}=H(fde),n=i.useRef(null),{isOpen:r,onClose:o,onOpen:s}=sr(),{t:l}=W(),c=i.useCallback(h=>{e(nd(h.target.value))},[e]);tt("alt+a",()=>{var h;(h=n.current)==null||h.focus()},[]);const d=i.useCallback(h=>{if(!n.current)return;const g=n.current.selectionStart;if(g===void 0)return;let b=t.slice(0,g);b[b.length-1]!=="<"&&(b+="<"),b+=`${h}>`;const y=b.length;b+=t.slice(g),Jr.flushSync(()=>{e(nd(b))}),n.current.selectionStart=y,n.current.selectionEnd=y,o()},[e,o,t]),f=Mt("embedding").isFeatureEnabled,m=i.useCallback(h=>{f&&h.key==="<"&&s()},[s,f]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(Gt,{children:a.jsx(u0,{isOpen:r,onClose:o,onSelect:d,children:a.jsx(Ot,{feature:"paramPositiveConditioning",placement:"right",children:a.jsx(ga,{id:"prompt",name:"prompt",ref:n,value:t,placeholder:l("parameters.positivePromptPlaceholder"),onChange:c,onKeyDown:m,resize:"vertical",minH:32})})})}),!r&&f&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:s})})]})},_O=i.memo(pde);function mde(){const e=H(o=>o.sdxl.shouldConcatSDXLStylePrompt),t=te(),{t:n}=W(),r=i.useCallback(()=>{t(A9(!e))},[t,e]);return a.jsx(Fe,{"aria-label":n("sdxl.concatPromptStyle"),tooltip:n("sdxl.concatPromptStyle"),variant:"outline",isChecked:e,onClick:r,icon:a.jsx(WM,{}),size:"xs",sx:{position:"absolute",insetInlineEnd:1,top:6,border:"none",color:e?"accent.500":"base.500",_hover:{bg:"none"}}})}const E_={position:"absolute",bg:"none",w:"full",minH:2,borderRadius:0,borderLeft:"none",borderRight:"none",zIndex:2,maskImage:"radial-gradient(circle at center, black, black 65%, black 30%, black 15%, transparent)"};function IO(){return a.jsxs($,{children:[a.jsx(Ie,{as:Mn.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"1px",borderTop:"none",borderColor:"base.400",...E_,_dark:{borderColor:"accent.500"}}}),a.jsx(Ie,{as:Mn.div,initial:{opacity:0,scale:0},animate:{opacity:[0,1,1,1],scale:[0,.75,1.5,1],transition:{duration:.42,times:[0,.25,.5,1]}},exit:{opacity:0,scale:0},sx:{zIndex:3,position:"absolute",left:"48%",top:"3px",p:1,borderRadius:4,bg:"accent.400",color:"base.50",_dark:{bg:"accent.500"}},children:a.jsx(WM,{size:12})}),a.jsx(Ie,{as:Mn.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"17px",borderBottom:"none",borderColor:"base.400",...E_,_dark:{borderColor:"accent.500"}}})]})}const hde=fe([pe],({sdxl:e})=>{const{negativeStylePrompt:t,shouldConcatSDXLStylePrompt:n}=e;return{prompt:t,shouldConcatSDXLStylePrompt:n}}),gde=()=>{const e=te(),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),{t:s}=W(),{prompt:l,shouldConcatSDXLStylePrompt:c}=H(hde),d=i.useCallback(g=>{e(sd(g.target.value))},[e]),f=i.useCallback(g=>{if(!t.current)return;const b=t.current.selectionStart;if(b===void 0)return;let y=l.slice(0,b);y[y.length-1]!=="<"&&(y+="<"),y+=`${g}>`;const x=y.length;y+=l.slice(b),Jr.flushSync(()=>{e(sd(y))}),t.current.selectionStart=x,t.current.selectionEnd=x,r()},[e,r,l]),m=Mt("embedding").isFeatureEnabled,h=i.useCallback(g=>{m&&g.key==="<"&&o()},[o,m]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(hr,{children:c&&a.jsx(Ie,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(IO,{})})}),a.jsx(Gt,{children:a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(ga,{id:"prompt",name:"prompt",ref:t,value:l,placeholder:s("sdxl.negStylePrompt"),onChange:d,onKeyDown:h,resize:"vertical",fontSize:"sm",minH:16})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},vde=i.memo(gde),bde=fe([pe],({sdxl:e})=>{const{positiveStylePrompt:t,shouldConcatSDXLStylePrompt:n}=e;return{prompt:t,shouldConcatSDXLStylePrompt:n}}),xde=()=>{const e=te(),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),{t:s}=W(),{prompt:l,shouldConcatSDXLStylePrompt:c}=H(bde),d=i.useCallback(g=>{e(od(g.target.value))},[e]),f=i.useCallback(g=>{if(!t.current)return;const b=t.current.selectionStart;if(b===void 0)return;let y=l.slice(0,b);y[y.length-1]!=="<"&&(y+="<"),y+=`${g}>`;const x=y.length;y+=l.slice(b),Jr.flushSync(()=>{e(od(y))}),t.current.selectionStart=x,t.current.selectionEnd=x,r()},[e,r,l]),m=Mt("embedding").isFeatureEnabled,h=i.useCallback(g=>{m&&g.key==="<"&&o()},[o,m]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(hr,{children:c&&a.jsx(Ie,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(IO,{})})}),a.jsx(Gt,{children:a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(ga,{id:"prompt",name:"prompt",ref:t,value:l,placeholder:s("sdxl.posStylePrompt"),onChange:d,onKeyDown:h,resize:"vertical",minH:16})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},yde=i.memo(xde);function L2(){return a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(_O,{}),a.jsx(mde,{}),a.jsx(yde,{}),a.jsx(jO,{}),a.jsx(vde,{})]})}const kl=()=>{const{isRefinerAvailable:e}=as(Fx,{selectFromResult:({data:t})=>({isRefinerAvailable:t?t.ids.length>0:!1})});return e},Cde=fe([pe],({sdxl:e,ui:t,hotkeys:n})=>{const{refinerCFGScale:r}=e,{shouldUseSliders:o}=t,{shift:s}=n;return{refinerCFGScale:r,shouldUseSliders:o,shift:s}}),wde=()=>{const{refinerCFGScale:e,shouldUseSliders:t,shift:n}=H(Cde),r=kl(),o=te(),{t:s}=W(),l=i.useCallback(d=>o(B1(d)),[o]),c=i.useCallback(()=>o(B1(7)),[o]);return t?a.jsx(nt,{label:s("sdxl.cfgScale"),step:n?.1:.5,min:1,max:20,onChange:l,handleReset:c,value:e,sliderNumberInputProps:{max:200},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!r}):a.jsx(_s,{label:s("sdxl.cfgScale"),step:.5,min:1,max:200,onChange:l,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"},isDisabled:!r})},Sde=i.memo(wde),kde=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=T9.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data},jde=fe(pe,e=>({model:e.sdxl.refinerModel})),_de=()=>{const e=te(),t=Mt("syncModels").isFeatureEnabled,{model:n}=H(jde),{t:r}=W(),{data:o,isLoading:s}=as(Fx),l=i.useMemo(()=>{if(!o)return[];const f=[];return qn(o.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[o]),c=i.useMemo(()=>(o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])??null,[o==null?void 0:o.entities,n]),d=i.useCallback(f=>{if(!f)return;const m=kde(f);m&&e(FI(m))},[e]);return s?a.jsx(sn,{label:r("sdxl.refinermodel"),placeholder:r("sdxl.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{tooltip:c==null?void 0:c.description,label:r("sdxl.refinermodel"),value:c==null?void 0:c.id,placeholder:l.length>0?r("sdxl.selectAModel"):r("sdxl.noModelsAvailable"),data:l,error:l.length===0,disabled:l.length===0,onChange:d,w:"100%"}),t&&a.jsx(Ie,{mt:7,children:a.jsx(cu,{iconMode:!0})})]})},Ide=i.memo(_de),Pde=fe([pe],({sdxl:e,hotkeys:t})=>{const{refinerNegativeAestheticScore:n}=e,{shift:r}=t;return{refinerNegativeAestheticScore:n,shift:r}}),Ede=()=>{const{refinerNegativeAestheticScore:e,shift:t}=H(Pde),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>r(W1(c)),[r]),l=i.useCallback(()=>r(W1(2.5)),[r]);return a.jsx(nt,{label:o("sdxl.negAestheticScore"),step:t?.1:.5,min:1,max:10,onChange:s,handleReset:l,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Mde=i.memo(Ede),Ode=fe([pe],({sdxl:e,hotkeys:t})=>{const{refinerPositiveAestheticScore:n}=e,{shift:r}=t;return{refinerPositiveAestheticScore:n,shift:r}}),Dde=()=>{const{refinerPositiveAestheticScore:e,shift:t}=H(Ode),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>r(H1(c)),[r]),l=i.useCallback(()=>r(H1(6)),[r]);return a.jsx(nt,{label:o("sdxl.posAestheticScore"),step:t?.1:.5,min:1,max:10,onChange:s,handleReset:l,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Rde=i.memo(Dde),Ade=fe(pe,({ui:e,sdxl:t})=>{const{refinerScheduler:n}=t,{favoriteSchedulers:r}=e,o=Hr(Gh,(s,l)=>({value:l,label:s,group:r.includes(l)?"Favorites":void 0})).sort((s,l)=>s.label.localeCompare(l.label));return{refinerScheduler:n,data:o}}),Tde=()=>{const e=te(),{t}=W(),{refinerScheduler:n,data:r}=H(Ade),o=kl(),s=i.useCallback(l=>{l&&e(zI(l))},[e]);return a.jsx(sn,{w:"100%",label:t("sdxl.scheduler"),value:n,data:r,onChange:s,disabled:!o})},Nde=i.memo(Tde),$de=fe([pe],({sdxl:e})=>{const{refinerStart:t}=e;return{refinerStart:t}}),Lde=()=>{const{refinerStart:e}=H($de),t=te(),n=kl(),r=i.useCallback(l=>t(V1(l)),[t]),{t:o}=W(),s=i.useCallback(()=>t(V1(.8)),[t]);return a.jsx(nt,{label:o("sdxl.refinerStart"),step:.01,min:0,max:1,onChange:r,handleReset:s,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Fde=i.memo(Lde),zde=fe([pe],({sdxl:e,ui:t})=>{const{refinerSteps:n}=e,{shouldUseSliders:r}=t;return{refinerSteps:n,shouldUseSliders:r}}),Bde=()=>{const{refinerSteps:e,shouldUseSliders:t}=H(zde),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>{r(z1(c))},[r]),l=i.useCallback(()=>{r(z1(20))},[r]);return t?a.jsx(nt,{label:o("sdxl.steps"),min:1,max:100,step:1,onChange:s,handleReset:l,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:500},isDisabled:!n}):a.jsx(_s,{label:o("sdxl.steps"),min:1,max:500,step:1,onChange:s,value:e,numberInputFieldProps:{textAlign:"center"},isDisabled:!n})},Hde=i.memo(Bde);function Wde(){const e=H(s=>s.sdxl.shouldUseSDXLRefiner),t=kl(),n=te(),{t:r}=W(),o=i.useCallback(s=>{n(N9(s.target.checked))},[n]);return a.jsx(_n,{label:r("sdxl.useRefiner"),isChecked:e,onChange:o,isDisabled:!t})}const Vde=fe(pe,e=>{const{shouldUseSDXLRefiner:t}=e.sdxl,{shouldUseSliders:n}=e.ui;return{activeLabel:t?"Enabled":void 0,shouldUseSliders:n}}),Ude=()=>{const{activeLabel:e,shouldUseSliders:t}=H(Vde),{t:n}=W();return kl()?a.jsx(_r,{label:n("sdxl.refiner"),activeLabel:e,children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(Wde,{}),a.jsx(Ide,{}),a.jsxs($,{gap:2,flexDirection:t?"column":"row",children:[a.jsx(Hde,{}),a.jsx(Sde,{})]}),a.jsx(Nde,{}),a.jsx(Rde,{}),a.jsx(Mde,{}),a.jsx(Fde,{})]})}):a.jsx(_r,{label:n("sdxl.refiner"),activeLabel:e,children:a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:n("models.noRefinerModelsInstalled")})})})},F2=i.memo(Ude),Gde=fe([pe],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:l,inputMax:c}=t.sd.guidance,{cfgScale:d}=e,{shouldUseSliders:f}=n,{shift:m}=r;return{cfgScale:d,initial:o,min:s,sliderMax:l,inputMax:c,shouldUseSliders:f,shift:m}}),Kde=()=>{const{cfgScale:e,initial:t,min:n,sliderMax:r,inputMax:o,shouldUseSliders:s,shift:l}=H(Gde),c=te(),{t:d}=W(),f=i.useCallback(h=>c(Cm(h)),[c]),m=i.useCallback(()=>c(Cm(t)),[c,t]);return s?a.jsx(Ot,{feature:"paramCFGScale",children:a.jsx(nt,{label:d("parameters.cfgScale"),step:l?.1:.5,min:n,max:r,onChange:f,handleReset:m,value:e,sliderNumberInputProps:{max:o},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1})}):a.jsx(Ot,{feature:"paramCFGScale",children:a.jsx(_s,{label:d("parameters.cfgScale"),step:.5,min:n,max:o,onChange:f,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"}})})},Ds=i.memo(Kde),qde=fe(pe,e=>({model:e.generation.model})),Xde=()=>{const e=te(),{t}=W(),{model:n}=H(qde),r=Mt("syncModels").isFeatureEnabled,{data:o,isLoading:s}=as(tS),{data:l,isLoading:c}=vd(tS),d=H(tr),f=i.useMemo(()=>{if(!o)return[];const g=[];return qn(o.entities,(b,y)=>{b&&g.push({value:y,label:b.model_name,group:xn[b.base_model]})}),qn(l==null?void 0:l.entities,(b,y)=>{!b||d==="unifiedCanvas"||d==="img2img"||g.push({value:y,label:b.model_name,group:xn[b.base_model]})}),g},[o,l,d]),m=i.useMemo(()=>((o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])||(l==null?void 0:l.entities[`${n==null?void 0:n.base_model}/onnx/${n==null?void 0:n.model_name}`]))??null,[o==null?void 0:o.entities,n,l==null?void 0:l.entities]),h=i.useCallback(g=>{if(!g)return;const b=i0(g);b&&e(N1(b))},[e]);return s||c?a.jsx(sn,{label:t("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:3,children:[a.jsx(Ot,{feature:"paramModel",children:a.jsx(sn,{tooltip:m==null?void 0:m.description,label:t("modelManager.model"),value:m==null?void 0:m.id,placeholder:f.length>0?"Select a model":"No models available",data:f,error:f.length===0,disabled:f.length===0,onChange:h,w:"100%"})}),r&&a.jsx(Ie,{mt:6,children:a.jsx(cu,{iconMode:!0})})]})},Qde=i.memo(Xde),Yde=fe(pe,({generation:e})=>{const{model:t,vae:n}=e;return{model:t,vae:n}}),Zde=()=>{const e=te(),{t}=W(),{model:n,vae:r}=H(Yde),{data:o}=YI(),s=i.useMemo(()=>{if(!o)return[];const d=[{value:"default",label:"Default",group:"Default"}];return qn(o.entities,(f,m)=>{if(!f)return;const h=(n==null?void 0:n.base_model)!==f.base_model;d.push({value:m,label:f.model_name,group:xn[f.base_model],disabled:h,tooltip:h?`Incompatible base model: ${f.base_model}`:void 0})}),d.sort((f,m)=>f.disabled&&!m.disabled?1:-1)},[o,n==null?void 0:n.base_model]),l=i.useMemo(()=>(o==null?void 0:o.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[o==null?void 0:o.entities,r]),c=i.useCallback(d=>{if(!d||d==="default"){e(nc(null));return}const f=xO(d);f&&e(nc(f))},[e]);return a.jsx(Ot,{feature:"paramVAE",children:a.jsx(sn,{itemComponent:xl,tooltip:l==null?void 0:l.description,label:t("modelManager.vae"),value:(l==null?void 0:l.id)??"default",placeholder:"Default",data:s,onChange:c,disabled:s.length===0,clearable:!0})})},Jde=i.memo(Zde),efe=fe([pe],({ui:e,generation:t})=>{const{scheduler:n}=t,{favoriteSchedulers:r}=e,o=Hr(Gh,(s,l)=>({value:l,label:s,group:r.includes(l)?"Favorites":void 0})).sort((s,l)=>s.label.localeCompare(l.label));return{scheduler:n,data:o}}),tfe=()=>{const e=te(),{t}=W(),{scheduler:n,data:r}=H(efe),o=i.useCallback(s=>{s&&e($1(s))},[e]);return a.jsx(Ot,{feature:"paramScheduler",children:a.jsx(sn,{label:t("parameters.scheduler"),value:n,data:r,onChange:o})})},nfe=i.memo(tfe),rfe=fe(pe,({generation:e})=>{const{vaePrecision:t}=e;return{vaePrecision:t}}),ofe=["fp16","fp32"],sfe=()=>{const{t:e}=W(),t=te(),{vaePrecision:n}=H(rfe),r=i.useCallback(o=>{o&&t($9(o))},[t]);return a.jsx(Ot,{feature:"paramVAEPrecision",children:a.jsx(yn,{label:e("modelManager.vaePrecision"),value:n,data:ofe,onChange:r})})},afe=i.memo(sfe),lfe=()=>{const e=Mt("vae").isFeatureEnabled;return a.jsxs($,{gap:3,w:"full",flexWrap:e?"wrap":"nowrap",children:[a.jsx(Ie,{w:"full",children:a.jsx(Qde,{})}),a.jsx(Ie,{w:"full",children:a.jsx(nfe,{})}),e&&a.jsxs($,{w:"full",gap:3,children:[a.jsx(Jde,{}),a.jsx(afe,{})]})]})},Rs=i.memo(lfe),PO=[{name:wt.t("parameters.aspectRatioFree"),value:null},{name:"2:3",value:2/3},{name:"16:9",value:16/9},{name:"1:1",value:1/1}],EO=PO.map(e=>e.value);function MO(){const e=H(s=>s.generation.aspectRatio),t=te(),n=H(s=>s.generation.shouldFitToWidthHeight),r=H(tr),o=i.useCallback(s=>{t(Xo(s.value)),t(bd(!1))},[t]);return a.jsx($t,{isAttached:!0,children:PO.map(s=>a.jsx(Xe,{size:"sm",isChecked:e===s.value,isDisabled:r==="img2img"?!n:!1,onClick:o.bind(null,s),children:s.name},s.name))})}const ife=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{min:r,sliderMax:o,inputMax:s,fineStep:l,coarseStep:c}=n.sd.height,{model:d,height:f}=e,{aspectRatio:m}=e,h=t.shift?l:c;return{model:d,height:f,min:r,sliderMax:o,inputMax:s,step:h,aspectRatio:m}}),cfe=e=>{const{model:t,height:n,min:r,sliderMax:o,inputMax:s,step:l,aspectRatio:c}=H(ife),d=te(),{t:f}=W(),m=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,h=i.useCallback(b=>{if(d(Ja(b)),c){const y=kr(b*c,8);d(Za(y))}},[d,c]),g=i.useCallback(()=>{if(d(Ja(m)),c){const b=kr(m*c,8);d(Za(b))}},[d,m,c]);return a.jsx(nt,{label:f("parameters.height"),value:n,min:r,step:l,max:o,onChange:h,handleReset:g,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},ufe=i.memo(cfe),dfe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{min:r,sliderMax:o,inputMax:s,fineStep:l,coarseStep:c}=n.sd.width,{model:d,width:f,aspectRatio:m}=e,h=t.shift?l:c;return{model:d,width:f,min:r,sliderMax:o,inputMax:s,step:h,aspectRatio:m}}),ffe=e=>{const{model:t,width:n,min:r,sliderMax:o,inputMax:s,step:l,aspectRatio:c}=H(dfe),d=te(),{t:f}=W(),m=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,h=i.useCallback(b=>{if(d(Za(b)),c){const y=kr(b/c,8);d(Ja(y))}},[d,c]),g=i.useCallback(()=>{if(d(Za(m)),c){const b=kr(m/c,8);d(Ja(b))}},[d,m,c]);return a.jsx(nt,{label:f("parameters.width"),value:n,min:r,step:l,max:o,onChange:h,handleReset:g,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},pfe=i.memo(ffe),mfe=fe([pe,tr],({generation:e},t)=>{const{shouldFitToWidthHeight:n,shouldLockAspectRatio:r,width:o,height:s}=e;return{activeTabName:t,shouldFitToWidthHeight:n,shouldLockAspectRatio:r,width:o,height:s}});function Hc(){const{t:e}=W(),t=te(),{activeTabName:n,shouldFitToWidthHeight:r,shouldLockAspectRatio:o,width:s,height:l}=H(mfe),c=i.useCallback(()=>{o?(t(bd(!1)),EO.includes(s/l)?t(Xo(s/l)):t(Xo(null))):(t(bd(!0)),t(Xo(s/l)))},[o,s,l,t]),d=i.useCallback(()=>{t(L9()),t(Xo(null)),o&&t(Xo(l/s))},[t,o,s,l]);return a.jsxs($,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.150",_dark:{bg:"base.750"}},children:[a.jsx(Ot,{feature:"paramRatio",children:a.jsxs(Gt,{as:$,flexDir:"row",alignItems:"center",gap:2,children:[a.jsx(ln,{children:e("parameters.aspectRatio")}),a.jsx(Wr,{}),a.jsx(MO,{}),a.jsx(Fe,{tooltip:e("ui.swapSizes"),"aria-label":e("ui.swapSizes"),size:"sm",icon:a.jsx(k7,{}),fontSize:20,isDisabled:n==="img2img"?!r:!1,onClick:d}),a.jsx(Fe,{tooltip:e("ui.lockRatio"),"aria-label":e("ui.lockRatio"),size:"sm",icon:a.jsx(VM,{}),isChecked:o,isDisabled:n==="img2img"?!r:!1,onClick:c})]})}),a.jsx($,{gap:2,alignItems:"center",children:a.jsxs($,{gap:2,flexDirection:"column",width:"full",children:[a.jsx(pfe,{isDisabled:n==="img2img"?!r:!1}),a.jsx(ufe,{isDisabled:n==="img2img"?!r:!1})]})})]})}const hfe=fe([pe],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:l,inputMax:c,fineStep:d,coarseStep:f}=t.sd.steps,{steps:m}=e,{shouldUseSliders:h}=n,g=r.shift?d:f;return{steps:m,initial:o,min:s,sliderMax:l,inputMax:c,step:g,shouldUseSliders:h}}),gfe=()=>{const{steps:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s,shouldUseSliders:l}=H(hfe),c=te(),{t:d}=W(),f=i.useCallback(g=>{c(Sm(g))},[c]),m=i.useCallback(()=>{c(Sm(t))},[c,t]),h=i.useCallback(()=>{c(Nx())},[c]);return l?a.jsx(Ot,{feature:"paramSteps",children:a.jsx(nt,{label:d("parameters.steps"),min:n,max:r,step:s,onChange:f,handleReset:m,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:o}})}):a.jsx(Ot,{feature:"paramSteps",children:a.jsx(_s,{label:d("parameters.steps"),min:n,max:o,step:s,onChange:f,value:e,numberInputFieldProps:{textAlign:"center"},onBlur:h})})},As=i.memo(gfe);function OO(){const e=te(),t=H(o=>o.generation.shouldFitToWidthHeight),n=i.useCallback(o=>{e(F9(o.target.checked))},[e]),{t:r}=W();return a.jsx(_n,{label:r("parameters.imageFit"),isChecked:t,onChange:n})}function vfe(){const e=H(l=>l.generation.seed),t=H(l=>l.generation.shouldRandomizeSeed),n=H(l=>l.generation.shouldGenerateVariations),{t:r}=W(),o=te(),s=i.useCallback(l=>o(ym(l)),[o]);return a.jsx(_s,{label:r("parameters.seed"),step:1,precision:0,flexGrow:1,min:e3,max:t3,isDisabled:t,isInvalid:e<0&&n,onChange:s,value:e})}const bfe=(e,t)=>Math.floor(Math.random()*(t-e+1)+e);function xfe(){const e=te(),t=H(o=>o.generation.shouldRandomizeSeed),{t:n}=W(),r=i.useCallback(()=>e(ym(bfe(e3,t3))),[e]);return a.jsx(Fe,{size:"sm",isDisabled:t,"aria-label":n("parameters.shuffle"),tooltip:n("parameters.shuffle"),onClick:r,icon:a.jsx(Wte,{})})}const yfe=()=>{const e=te(),{t}=W(),n=H(o=>o.generation.shouldRandomizeSeed),r=i.useCallback(o=>e(z9(o.target.checked)),[e]);return a.jsx(_n,{label:t("common.random"),isChecked:n,onChange:r})},Cfe=i.memo(yfe),wfe=()=>a.jsx(Ot,{feature:"paramSeed",children:a.jsxs($,{sx:{gap:3,alignItems:"flex-end"},children:[a.jsx(vfe,{}),a.jsx(xfe,{}),a.jsx(Cfe,{})]})}),Ts=i.memo(wfe),DO=_e((e,t)=>a.jsxs($,{ref:t,sx:{flexDir:"column",gap:2,bg:"base.100",px:4,pt:2,pb:4,borderRadius:"base",_dark:{bg:"base.750"}},children:[a.jsx(be,{fontSize:"sm",fontWeight:"bold",sx:{color:"base.600",_dark:{color:"base.300"}},children:e.label}),e.children]}));DO.displayName="SubSettingsWrapper";const Wc=i.memo(DO),Sfe=fe([pe],({sdxl:e})=>{const{sdxlImg2ImgDenoisingStrength:t}=e;return{sdxlImg2ImgDenoisingStrength:t}}),kfe=()=>{const{sdxlImg2ImgDenoisingStrength:e}=H(Sfe),t=te(),{t:n}=W(),r=i.useCallback(s=>t(nS(s)),[t]),o=i.useCallback(()=>{t(nS(.7))},[t]);return a.jsx(Ot,{feature:"paramDenoisingStrength",children:a.jsx(Wc,{children:a.jsx(nt,{label:n("sdxl.denoisingStrength"),step:.01,min:0,max:1,onChange:r,handleReset:o,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0})})})},RO=i.memo(kfe),jfe=fe([pe],({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}}),_fe=()=>{const{t:e}=W(),{shouldUseSliders:t,activeLabel:n}=H(jfe);return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}),a.jsx(RO,{}),a.jsx(OO,{})]})})},Ife=i.memo(_fe),Pfe=()=>a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(Ife,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(fu,{})]}),Efe=i.memo(Pfe),z2=()=>{const{t:e}=W(),t=H(l=>l.generation.shouldRandomizeSeed),n=H(l=>l.generation.iterations),r=i.useMemo(()=>n===1?e("parameters.iterationsWithCount_one",{count:1}):e("parameters.iterationsWithCount_other",{count:n}),[n,e]),o=i.useMemo(()=>e(t?"parameters.randomSeed":"parameters.manualSeed"),[t,e]);return{iterationsAndSeedLabel:i.useMemo(()=>[r,o].join(", "),[r,o]),iterationsLabel:r,seedLabel:o}},Mfe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsx($,{sx:{flexDirection:"column",gap:3},children:t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]})})})},AO=i.memo(Mfe),Ofe=()=>a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(AO,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(fu,{})]}),Dfe=i.memo(Ofe),Rfe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceMode),{t:n}=W(),r=i.useMemo(()=>[{label:n("parameters.unmasked"),value:"unmasked"},{label:n("unifiedCanvas.mask"),value:"mask"},{label:n("parameters.maskEdge"),value:"edge"}],[n]),o=i.useCallback(s=>{s&&e(B9(s))},[e]);return a.jsx(Ot,{feature:"compositingCoherenceMode",children:a.jsx(yn,{label:n("parameters.coherenceMode"),data:r,value:t,onChange:o})})},Afe=i.memo(Rfe),Tfe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceSteps),{t:n}=W(),r=i.useCallback(s=>{e(rS(s))},[e]),o=i.useCallback(()=>{e(rS(20))},[e]);return a.jsx(Ot,{feature:"compositingCoherenceSteps",children:a.jsx(nt,{label:n("parameters.coherenceSteps"),min:1,max:100,step:1,sliderNumberInputProps:{max:999},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})},Nfe=i.memo(Tfe),$fe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceStrength),{t:n}=W(),r=i.useCallback(s=>{e(oS(s))},[e]),o=i.useCallback(()=>{e(oS(.3))},[e]);return a.jsx(Ot,{feature:"compositingStrength",children:a.jsx(nt,{label:n("parameters.coherenceStrength"),min:0,max:1,step:.01,sliderNumberInputProps:{max:999},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})},Lfe=i.memo($fe);function Ffe(){const e=te(),t=H(s=>s.generation.maskBlur),{t:n}=W(),r=i.useCallback(s=>{e(sS(s))},[e]),o=i.useCallback(()=>{e(sS(16))},[e]);return a.jsx(Ot,{feature:"compositingBlur",children:a.jsx(nt,{label:n("parameters.maskBlur"),min:0,max:64,sliderNumberInputProps:{max:512},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})}const zfe=[{label:"Box Blur",value:"box"},{label:"Gaussian Blur",value:"gaussian"}];function Bfe(){const e=H(o=>o.generation.maskBlurMethod),t=te(),{t:n}=W(),r=i.useCallback(o=>{o&&t(H9(o))},[t]);return a.jsx(Ot,{feature:"compositingBlurMethod",children:a.jsx(yn,{value:e,onChange:r,label:n("parameters.maskBlurMethod"),data:zfe})})}const Hfe=()=>{const{t:e}=W();return a.jsx(_r,{label:e("parameters.compositingSettingsHeader"),children:a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsxs(Wc,{label:e("parameters.coherencePassHeader"),children:[a.jsx(Afe,{}),a.jsx(Nfe,{}),a.jsx(Lfe,{})]}),a.jsx(On,{}),a.jsxs(Wc,{label:e("parameters.maskAdjustmentsHeader"),children:[a.jsx(Ffe,{}),a.jsx(Bfe,{})]})]})})},TO=i.memo(Hfe),Wfe=fe([pe],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}}),Vfe=()=>{const e=te(),{infillMethod:t}=H(Wfe),{data:n,isLoading:r}=_I(),o=n==null?void 0:n.infill_methods,{t:s}=W(),l=i.useCallback(c=>{e(W9(c))},[e]);return a.jsx(Ot,{feature:"infillMethod",children:a.jsx(yn,{disabled:(o==null?void 0:o.length)===0,placeholder:r?"Loading...":void 0,label:s("parameters.infillMethod"),value:t,data:o??[],onChange:l})})},Ufe=i.memo(Vfe),Gfe=fe([pe],({generation:e})=>{const{infillPatchmatchDownscaleSize:t,infillMethod:n}=e;return{infillPatchmatchDownscaleSize:t,infillMethod:n}}),Kfe=()=>{const e=te(),{infillPatchmatchDownscaleSize:t,infillMethod:n}=H(Gfe),{t:r}=W(),o=i.useCallback(l=>{e(aS(l))},[e]),s=i.useCallback(()=>{e(aS(2))},[e]);return a.jsx(nt,{isDisabled:n!=="patchmatch",label:r("parameters.patchmatchDownScaleSize"),min:1,max:10,value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},qfe=i.memo(Kfe),Xfe=fe([pe],({generation:e})=>{const{infillTileSize:t,infillMethod:n}=e;return{infillTileSize:t,infillMethod:n}}),Qfe=()=>{const e=te(),{infillTileSize:t,infillMethod:n}=H(Xfe),{t:r}=W(),o=i.useCallback(l=>{e(lS(l))},[e]),s=i.useCallback(()=>{e(lS(32))},[e]);return a.jsx(nt,{isDisabled:n!=="tile",label:r("parameters.tileSize"),min:16,max:64,sliderNumberInputProps:{max:256},value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},Yfe=i.memo(Qfe),Zfe=fe([pe],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}});function Jfe(){const{infillMethod:e}=H(Zfe);return a.jsxs($,{children:[e==="tile"&&a.jsx(Yfe,{}),e==="patchmatch"&&a.jsx(qfe,{})]})}const epe=fe([pe],({canvas:e})=>{const{boundingBoxScaleMethod:t}=e;return{boundingBoxScale:t}}),tpe=()=>{const e=te(),{boundingBoxScale:t}=H(epe),{t:n}=W(),r=i.useCallback(o=>{e(V9(o))},[e]);return a.jsx(Ot,{feature:"scaleBeforeProcessing",children:a.jsx(sn,{label:n("parameters.scaleBeforeProcessing"),data:U9,value:t,onChange:r})})},npe=i.memo(tpe),rpe=fe([pe],({generation:e,canvas:t})=>{const{scaledBoundingBoxDimensions:n,boundingBoxScaleMethod:r}=t,{model:o,aspectRatio:s}=e;return{model:o,scaledBoundingBoxDimensions:n,isManual:r==="manual",aspectRatio:s}}),ope=()=>{const e=te(),{model:t,isManual:n,scaledBoundingBoxDimensions:r,aspectRatio:o}=H(rpe),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{let m=r.width;const h=Math.floor(f);o&&(m=kr(h*o,64)),e(Pm({width:m,height:h}))},[o,e,r.width]),d=i.useCallback(()=>{let f=r.width;const m=Math.floor(s);o&&(f=kr(m*o,64)),e(Pm({width:f,height:m}))},[o,e,s,r.width]);return a.jsx(nt,{isDisabled:!n,label:l("parameters.scaledHeight"),min:64,max:1536,step:64,value:r.height,onChange:c,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},spe=i.memo(ope),ape=fe([pe],({canvas:e,generation:t})=>{const{boundingBoxScaleMethod:n,scaledBoundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,scaledBoundingBoxDimensions:r,aspectRatio:s,isManual:n==="manual"}}),lpe=()=>{const e=te(),{model:t,isManual:n,scaledBoundingBoxDimensions:r,aspectRatio:o}=H(ape),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{const m=Math.floor(f);let h=r.height;o&&(h=kr(m/o,64)),e(Pm({width:m,height:h}))},[o,e,r.height]),d=i.useCallback(()=>{const f=Math.floor(s);let m=r.height;o&&(m=kr(f/o,64)),e(Pm({width:f,height:m}))},[o,e,s,r.height]);return a.jsx(nt,{isDisabled:!n,label:l("parameters.scaledWidth"),min:64,max:1536,step:64,value:r.width,onChange:c,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},ipe=i.memo(lpe),cpe=()=>{const{t:e}=W();return a.jsx(_r,{label:e("parameters.infillScalingHeader"),children:a.jsxs($,{sx:{gap:2,flexDirection:"column"},children:[a.jsxs(Wc,{children:[a.jsx(Ufe,{}),a.jsx(Jfe,{})]}),a.jsx(On,{}),a.jsxs(Wc,{children:[a.jsx(npe,{}),a.jsx(ipe,{}),a.jsx(spe,{})]})]})})},NO=i.memo(cpe),Lo=fe([pe],({canvas:e})=>e.batchIds.length>0||e.layerState.stagingArea.images.length>0),upe=fe([pe,Lo],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,boundingBoxDimensions:r,isStaging:n,aspectRatio:s}}),dpe=()=>{const e=te(),{model:t,boundingBoxDimensions:n,isStaging:r,aspectRatio:o}=H(upe),{t:s}=W(),l=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,c=i.useCallback(f=>{if(e(es({...n,height:Math.floor(f)})),o){const m=kr(f*o,64);e(es({width:m,height:Math.floor(f)}))}},[o,n,e]),d=i.useCallback(()=>{if(e(es({...n,height:Math.floor(l)})),o){const f=kr(l*o,64);e(es({width:f,height:Math.floor(l)}))}},[o,n,e,l]);return a.jsx(nt,{label:s("parameters.boundingBoxHeight"),min:64,max:1536,step:64,value:n.height,onChange:c,isDisabled:r,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},fpe=i.memo(dpe),ppe=fe([pe,Lo],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,boundingBoxDimensions:r,isStaging:n,aspectRatio:s}}),mpe=()=>{const e=te(),{model:t,boundingBoxDimensions:n,isStaging:r,aspectRatio:o}=H(ppe),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{if(e(es({...n,width:Math.floor(f)})),o){const m=kr(f/o,64);e(es({width:Math.floor(f),height:m}))}},[o,n,e]),d=i.useCallback(()=>{if(e(es({...n,width:Math.floor(s)})),o){const f=kr(s/o,64);e(es({width:Math.floor(s),height:f}))}},[o,n,e,s]);return a.jsx(nt,{label:l("parameters.boundingBoxWidth"),min:64,max:1536,step:64,value:n.width,onChange:c,isDisabled:r,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},hpe=i.memo(mpe),gpe=fe([pe],({generation:e,canvas:t})=>{const{shouldFitToWidthHeight:n,shouldLockAspectRatio:r}=e,{boundingBoxDimensions:o}=t;return{shouldFitToWidthHeight:n,shouldLockAspectRatio:r,boundingBoxDimensions:o}});function Hh(){const e=te(),{t}=W(),{shouldLockAspectRatio:n,boundingBoxDimensions:r}=H(gpe),o=i.useCallback(()=>{n?(e(bd(!1)),EO.includes(r.width/r.height)?e(Xo(r.width/r.height)):e(Xo(null))):(e(bd(!0)),e(Xo(r.width/r.height)))},[n,r,e]),s=i.useCallback(()=>{e(G9()),e(Xo(null)),n&&e(Xo(r.height/r.width))},[e,n,r]);return a.jsxs($,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.100",_dark:{bg:"base.750"}},children:[a.jsx(Ot,{feature:"paramRatio",children:a.jsxs(Gt,{as:$,flexDir:"row",alignItems:"center",gap:2,children:[a.jsx(ln,{children:t("parameters.aspectRatio")}),a.jsx(Wr,{}),a.jsx(MO,{}),a.jsx(Fe,{tooltip:t("ui.swapSizes"),"aria-label":t("ui.swapSizes"),size:"sm",icon:a.jsx(k7,{}),fontSize:20,onClick:s}),a.jsx(Fe,{tooltip:t("ui.lockRatio"),"aria-label":t("ui.lockRatio"),size:"sm",icon:a.jsx(VM,{}),isChecked:n,onClick:o})]})}),a.jsx(hpe,{}),a.jsx(fpe,{})]})}const vpe=fe(pe,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}}),bpe=()=>{const{t:e}=W(),{shouldUseSliders:t,activeLabel:n}=H(vpe);return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}),a.jsx(RO,{})]})})},xpe=i.memo(bpe);function ype(){return a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(xpe,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(NO,{}),a.jsx(TO,{}),a.jsx(fu,{})]})}function B2(){return a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(_O,{}),a.jsx(jO,{})]})}function Cpe(){const e=H(l=>l.generation.horizontalSymmetrySteps),t=H(l=>l.generation.steps),n=te(),{t:r}=W(),o=i.useCallback(l=>{n(iS(l))},[n]),s=i.useCallback(()=>{n(iS(0))},[n]);return a.jsx(nt,{label:r("parameters.hSymmetryStep"),value:e,onChange:o,min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})}function wpe(){const e=H(r=>r.generation.shouldUseSymmetry),t=te(),n=i.useCallback(r=>{t(K9(r.target.checked))},[t]);return a.jsx(_n,{label:"Enable Symmetry",isChecked:e,onChange:n})}function Spe(){const e=H(l=>l.generation.verticalSymmetrySteps),t=H(l=>l.generation.steps),n=te(),{t:r}=W(),o=i.useCallback(l=>{n(cS(l))},[n]),s=i.useCallback(()=>{n(cS(0))},[n]);return a.jsx(nt,{label:r("parameters.vSymmetryStep"),value:e,onChange:o,min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})}const kpe=fe(pe,e=>({activeLabel:e.generation.shouldUseSymmetry?"Enabled":void 0})),jpe=()=>{const{t:e}=W(),{activeLabel:t}=H(kpe);return Mt("symmetry").isFeatureEnabled?a.jsx(_r,{label:e("parameters.symmetry"),activeLabel:t,children:a.jsxs($,{sx:{gap:2,flexDirection:"column"},children:[a.jsx(wpe,{}),a.jsx(Cpe,{}),a.jsx(Spe,{})]})}):null},H2=i.memo(jpe),_pe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:l,fineStep:c,coarseStep:d}=n.sd.img2imgStrength,{img2imgStrength:f}=e,m=t.shift?c:d;return{img2imgStrength:f,initial:r,min:o,sliderMax:s,inputMax:l,step:m}}),Ipe=()=>{const{img2imgStrength:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s}=H(_pe),l=te(),{t:c}=W(),d=i.useCallback(m=>l(km(m)),[l]),f=i.useCallback(()=>{l(km(t))},[l,t]);return a.jsx(Ot,{feature:"paramDenoisingStrength",children:a.jsx(Wc,{children:a.jsx(nt,{label:`${c("parameters.denoisingStrength")}`,step:s,min:n,max:r,onChange:d,handleReset:f,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0,sliderNumberInputProps:{max:o}})})})},$O=i.memo(Ipe),Ppe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}),a.jsx($O,{}),a.jsx(OO,{})]})})},Epe=i.memo(Ppe),Mpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(Epe,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(fu,{})]}),Ope=i.memo(Mpe),Dpe=fe(pe,({generation:e})=>{const{hrfMethod:t,hrfEnabled:n}=e;return{hrfMethod:t,hrfEnabled:n}}),Rpe=["ESRGAN","bilinear"],Ape=()=>{const e=te(),{t}=W(),{hrfMethod:n,hrfEnabled:r}=H(Dpe),o=i.useCallback(s=>{s&&e(F1(s))},[e]);return a.jsx(yn,{label:t("hrf.upscaleMethod"),value:n,data:Rpe,onChange:o,disabled:!r})},Tpe=i.memo(Ape),Npe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:l,fineStep:c,coarseStep:d}=n.sd.hrfStrength,{hrfStrength:f,hrfEnabled:m}=e,h=t.shift?c:d;return{hrfStrength:f,initial:r,min:o,sliderMax:s,inputMax:l,step:h,hrfEnabled:m}}),$pe=()=>{const{hrfStrength:e,initial:t,min:n,sliderMax:r,step:o,hrfEnabled:s}=H(Npe),l=te(),{t:c}=W(),d=i.useCallback(()=>{l(jm(t))},[l,t]),f=i.useCallback(m=>{l(jm(m))},[l]);return a.jsx(Ut,{label:c("hrf.strengthTooltip"),placement:"right",hasArrow:!0,children:a.jsx(nt,{label:c("parameters.denoisingStrength"),min:n,max:r,step:o,value:e,onChange:f,withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d,isDisabled:!s})})},Lpe=i.memo($pe);function Fpe(){const e=te(),{t}=W(),n=H(o=>o.generation.hrfEnabled),r=i.useCallback(o=>e(L1(o.target.checked)),[e]);return a.jsx(_n,{label:t("hrf.enableHrf"),isChecked:n,onChange:r,tooltip:t("hrf.enableHrfTooltip")})}const zpe=fe(pe,e=>{const{hrfEnabled:t}=e.generation;return{hrfEnabled:t}});function Bpe(){const{t:e}=W(),t=Mt("hrf").isFeatureEnabled,{hrfEnabled:n}=H(zpe),r=i.useMemo(()=>{if(n)return e("common.on")},[e,n]);return t?a.jsx(_r,{label:e("hrf.hrf"),activeLabel:r,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Fpe,{}),a.jsx(Lpe,{}),a.jsx(Tpe,{})]})}):null}const Hpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(AO,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(Bpe,{}),a.jsx(fu,{})]}),Wpe=i.memo(Hpe),Vpe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}),a.jsx($O,{})]})})},Upe=i.memo(Vpe),Gpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(Upe,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(NO,{}),a.jsx(TO,{}),a.jsx(fu,{})]}),Kpe=i.memo(Gpe),qpe=()=>{const e=H(tr),t=H(n=>n.generation.model);return e==="txt2img"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(Dfe,{}):a.jsx(Wpe,{})}):e==="img2img"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(Efe,{}):a.jsx(Ope,{})}):e==="unifiedCanvas"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(ype,{}):a.jsx(Kpe,{})}):null},Xpe=i.memo(qpe),bm=i.memo(e=>a.jsxs($,{sx:{w:"full",h:"full",flexDir:"column",gap:2},children:[a.jsx(z7,{}),a.jsx($,{layerStyle:"first",sx:{w:"full",h:"full",position:"relative",borderRadius:"base",p:2},children:a.jsx($,{sx:{w:"full",h:"full",position:"relative"},children:a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:800,theme:"os-theme-dark"},overflow:{x:"hidden"}},children:a.jsx($,{sx:{gap:2,flexDirection:"column",h:"full",w:"full"},children:e.children})})})})})]}));bm.displayName="ParametersPanelWrapper";const Qpe=fe([pe],e=>{const{initialImage:t}=e.generation,{isConnected:n}=e.system;return{initialImage:t,isResetButtonDisabled:!t,isConnected:n}}),Ype=()=>{const e=te(),{initialImage:t,isConnected:n}=H(Qpe),{currentData:r,isError:o}=jo((t==null?void 0:t.imageName)??Br),s=i.useMemo(()=>{if(r)return{id:"initial-image",payloadType:"IMAGE_DTO",payload:{imageDTO:r}}},[r]),l=i.useMemo(()=>({id:"initial-image",actionType:"SET_INITIAL_IMAGE"}),[]);return i.useEffect(()=>{o&&n&&e(n3())},[e,n,o]),a.jsx(fl,{imageDTO:r,droppableData:l,draggableData:s,isUploadDisabled:!0,fitContainer:!0,dropLabel:"Set as Initial Image",noContentFallback:a.jsx(Tn,{label:"No initial image selected"}),dataTestId:"initial-image"})},Zpe=i.memo(Ype),Jpe=fe([pe],e=>{const{initialImage:t}=e.generation;return{isResetButtonDisabled:!t,initialImage:t}}),eme={type:"SET_INITIAL_IMAGE"},tme=()=>{const{recallWidthAndHeight:e}=Sf(),{t}=W(),{isResetButtonDisabled:n,initialImage:r}=H(Jpe),o=te(),{getUploadButtonProps:s,getUploadInputProps:l}=S2({postUploadAction:eme}),c=i.useCallback(()=>{o(n3())},[o]),d=i.useCallback(()=>{r&&e(r.width,r.height)},[r,e]);return tt("shift+d",d,[r]),a.jsxs($,{layerStyle:"first",sx:{position:"relative",flexDirection:"column",height:"full",width:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",p:2,gap:4},children:[a.jsxs($,{sx:{w:"full",flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[a.jsx(be,{sx:{ps:2,fontWeight:600,userSelect:"none",color:"base.700",_dark:{color:"base.200"}},children:t("metadata.initImage")}),a.jsx(Wr,{}),a.jsx(Fe,{tooltip:"Upload Initial Image","aria-label":"Upload Initial Image",icon:a.jsx($g,{}),...s()}),a.jsx(Fe,{tooltip:`${t("parameters.useSize")} (Shift+D)`,"aria-label":`${t("parameters.useSize")} (Shift+D)`,icon:a.jsx(Qy,{}),onClick:d,isDisabled:n}),a.jsx(Fe,{tooltip:"Reset Initial Image","aria-label":"Reset Initial Image",icon:a.jsx(Ng,{}),onClick:c,isDisabled:n})]}),a.jsx(Zpe,{}),a.jsx("input",{...l()})]})},nme=i.memo(tme),rme=e=>{const{onClick:t,isDisabled:n}=e,{t:r}=W(),o=H(s=>s.system.isConnected);return a.jsx(Fe,{onClick:t,icon:a.jsx(ao,{}),tooltip:`${r("gallery.deleteImage")} (Del)`,"aria-label":`${r("gallery.deleteImage")} (Del)`,isDisabled:n||!o,colorScheme:"error"})},LO=()=>{const[e,{isLoading:t}]=Yh({fixedCacheKey:"enqueueBatch"}),[n,{isLoading:r}]=KI({fixedCacheKey:"resumeProcessor"}),[o,{isLoading:s}]=UI({fixedCacheKey:"pauseProcessor"}),[l,{isLoading:c}]=Rx({fixedCacheKey:"cancelQueueItem"}),[d,{isLoading:f}]=VI({fixedCacheKey:"clearQueue"}),[m,{isLoading:h}]=r3({fixedCacheKey:"pruneQueue"});return t||r||s||c||f||h},ome=[{label:"RealESRGAN x2 Plus",value:"RealESRGAN_x2plus.pth",tooltip:"Attempts to retain sharpness, low smoothing",group:"x2 Upscalers"},{label:"RealESRGAN x4 Plus",value:"RealESRGAN_x4plus.pth",tooltip:"Best for photos and highly detailed images, medium smoothing",group:"x4 Upscalers"},{label:"RealESRGAN x4 Plus (anime 6B)",value:"RealESRGAN_x4plus_anime_6B.pth",tooltip:"Best for anime/manga, high smoothing",group:"x4 Upscalers"},{label:"ESRGAN SRx4",value:"ESRGAN_SRx4_DF2KOST_official-ff704c30.pth",tooltip:"Retains sharpness, low smoothing",group:"x4 Upscalers"}];function sme(){const{t:e}=W(),t=H(o=>o.postprocessing.esrganModelName),n=te(),r=i.useCallback(o=>n(q9(o)),[n]);return a.jsx(yn,{label:e("models.esrganModel"),value:t,itemComponent:xl,onChange:r,data:ome})}const ame=e=>{const{imageDTO:t}=e,n=te(),r=LO(),{t:o}=W(),{isOpen:s,onOpen:l,onClose:c}=sr(),{isAllowedToUpscale:d,detail:f}=X9(t),m=i.useCallback(()=>{c(),!(!t||!d)&&n(o3({imageDTO:t}))},[n,t,d,c]);return a.jsx(xf,{isOpen:s,onClose:c,triggerComponent:a.jsx(Fe,{tooltip:o("parameters.upscale"),onClick:l,icon:a.jsx(zM,{}),"aria-label":o("parameters.upscale")}),children:a.jsxs($,{sx:{flexDirection:"column",gap:4},children:[a.jsx(sme,{}),a.jsx(Xe,{tooltip:f,size:"sm",isDisabled:!t||r||!d,onClick:m,children:o("parameters.upscaleImage")})]})})},lme=i.memo(ame),ime=fe([pe,tr],({gallery:e,system:t,ui:n,config:r},o)=>{const{isConnected:s,shouldConfirmOnDelete:l,denoiseProgress:c}=t,{shouldShowImageDetails:d,shouldHidePreview:f,shouldShowProgressInViewer:m}=n,{shouldFetchMetadataFromApi:h}=r,g=e.selection[e.selection.length-1];return{shouldConfirmOnDelete:l,isConnected:s,shouldDisableToolbarButtons:!!(c!=null&&c.progress_image)||!g,shouldShowImageDetails:d,activeTabName:o,shouldHidePreview:f,shouldShowProgressInViewer:m,lastSelectedImage:g,shouldFetchMetadataFromApi:h}}),cme=()=>{const e=te(),{isConnected:t,shouldDisableToolbarButtons:n,shouldShowImageDetails:r,lastSelectedImage:o,shouldShowProgressInViewer:s}=H(ime),l=Mt("upscaling").isFeatureEnabled,c=LO(),d=zs(),{t:f}=W(),{recallBothPrompts:m,recallSeed:h,recallWidthAndHeight:g,recallAllParameters:b}=Sf(),{currentData:y}=jo((o==null?void 0:o.image_name)??Br),{metadata:x,isLoading:w}=_2(o==null?void 0:o.image_name),{getAndLoadEmbeddedWorkflow:S,getAndLoadEmbeddedWorkflowResult:j}=I7({}),_=i.useCallback(()=>{!o||!o.has_workflow||S(o.image_name)},[S,o]);tt("w",_,[o]);const I=i.useCallback(()=>{b(x)},[x,b]);tt("a",I,[x]);const E=i.useCallback(()=>{h(x==null?void 0:x.seed)},[x==null?void 0:x.seed,h]);tt("s",E,[x]);const M=i.useCallback(()=>{m(x==null?void 0:x.positive_prompt,x==null?void 0:x.negative_prompt,x==null?void 0:x.positive_style_prompt,x==null?void 0:x.negative_style_prompt)},[x==null?void 0:x.negative_prompt,x==null?void 0:x.positive_prompt,x==null?void 0:x.positive_style_prompt,x==null?void 0:x.negative_style_prompt,m]);tt("p",M,[x]);const D=i.useCallback(()=>{g(x==null?void 0:x.width,x==null?void 0:x.height)},[x==null?void 0:x.width,x==null?void 0:x.height,g]);tt("d",D,[x]);const R=i.useCallback(()=>{e(_7()),e(Qh(y))},[e,y]);tt("shift+i",R,[y]);const N=i.useCallback(()=>{y&&e(o3({imageDTO:y}))},[e,y]),O=i.useCallback(()=>{y&&e(Xh([y]))},[e,y]);tt("Shift+U",()=>{N()},{enabled:()=>!!(l&&!n&&t)},[l,y,n,t]);const T=i.useCallback(()=>e(Q9(!r)),[e,r]);tt("i",()=>{y?T():d({title:f("toast.metadataLoadFailed"),status:"error",duration:2500,isClosable:!0})},[y,r,d]),tt("delete",()=>{O()},[e,y]);const U=i.useCallback(()=>{e(II(!s))},[e,s]);return a.jsx(a.Fragment,{children:a.jsxs($,{sx:{flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[a.jsx($t,{isAttached:!0,isDisabled:n,children:a.jsxs(of,{isLazy:!0,children:[a.jsx(sf,{as:Fe,"aria-label":f("parameters.imageActions"),tooltip:f("parameters.imageActions"),isDisabled:!y,icon:a.jsx(P7,{})}),a.jsx(al,{motionProps:Yl,children:y&&a.jsx(E7,{imageDTO:y})})]})}),a.jsxs($t,{isAttached:!0,isDisabled:n,children:[a.jsx(Fe,{icon:a.jsx(e0,{}),tooltip:`${f("nodes.loadWorkflow")} (W)`,"aria-label":`${f("nodes.loadWorkflow")} (W)`,isDisabled:!(y!=null&&y.has_workflow),onClick:_,isLoading:j.isLoading}),a.jsx(Fe,{isLoading:w,icon:a.jsx(GM,{}),tooltip:`${f("parameters.usePrompt")} (P)`,"aria-label":`${f("parameters.usePrompt")} (P)`,isDisabled:!(x!=null&&x.positive_prompt),onClick:M}),a.jsx(Fe,{isLoading:w,icon:a.jsx(KM,{}),tooltip:`${f("parameters.useSeed")} (S)`,"aria-label":`${f("parameters.useSeed")} (S)`,isDisabled:(x==null?void 0:x.seed)===null||(x==null?void 0:x.seed)===void 0,onClick:E}),a.jsx(Fe,{isLoading:w,icon:a.jsx(Qy,{}),tooltip:`${f("parameters.useSize")} (D)`,"aria-label":`${f("parameters.useSize")} (D)`,isDisabled:(x==null?void 0:x.height)===null||(x==null?void 0:x.height)===void 0||(x==null?void 0:x.width)===null||(x==null?void 0:x.width)===void 0,onClick:D}),a.jsx(Fe,{isLoading:w,icon:a.jsx(NM,{}),tooltip:`${f("parameters.useAll")} (A)`,"aria-label":`${f("parameters.useAll")} (A)`,isDisabled:!x,onClick:I})]}),l&&a.jsx($t,{isAttached:!0,isDisabled:c,children:l&&a.jsx(lme,{imageDTO:y})}),a.jsx($t,{isAttached:!0,children:a.jsx(Fe,{icon:a.jsx(LM,{}),tooltip:`${f("parameters.info")} (I)`,"aria-label":`${f("parameters.info")} (I)`,isChecked:r,onClick:T})}),a.jsx($t,{isAttached:!0,children:a.jsx(Fe,{"aria-label":f("settings.displayInProgress"),tooltip:f("settings.displayInProgress"),icon:a.jsx(Ate,{}),isChecked:s,onClick:U})}),a.jsx($t,{isAttached:!0,children:a.jsx(rme,{onClick:O})})]})})},ume=i.memo(cme),dme=()=>{const e=H(n=>{var r;return(r=n.system.denoiseProgress)==null?void 0:r.progress_image}),t=H(n=>n.system.shouldAntialiasProgressImage);return e?a.jsx(Ca,{src:e.dataURL,width:e.width,height:e.height,draggable:!1,"data-testid":"progress-image",sx:{objectFit:"contain",maxWidth:"full",maxHeight:"full",height:"auto",position:"absolute",borderRadius:"base",imageRendering:t?"auto":"pixelated"}}):null},fme=i.memo(dme);function pme(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M245.09 327.74v-37.32c57.07 0 84.51 13.47 108.58 38.68 5.4 5.65 15 1.32 14.29-6.43-5.45-61.45-34.14-117.09-122.87-117.09v-37.32a8.32 8.32 0 00-14.05-6L146.58 242a8.2 8.2 0 000 11.94L231 333.71a8.32 8.32 0 0014.09-5.97z"}},{tag:"path",attr:{fill:"none",strokeMiterlimit:"10",strokeWidth:"32",d:"M256 64C150 64 64 150 64 256s86 192 192 192 192-86 192-192S362 64 256 64z"}}]})(e)}const mme=({label:e,value:t,onClick:n,isLink:r,labelPosition:o,withCopy:s=!1})=>{const{t:l}=W(),c=i.useCallback(()=>navigator.clipboard.writeText(t.toString()),[t]);return t?a.jsxs($,{gap:2,children:[n&&a.jsx(Ut,{label:`Recall ${e}`,children:a.jsx(rs,{"aria-label":l("accessibility.useThisParameter"),icon:a.jsx(pme,{}),size:"xs",variant:"ghost",fontSize:20,onClick:n})}),s&&a.jsx(Ut,{label:`Copy ${e}`,children:a.jsx(rs,{"aria-label":`Copy ${e}`,icon:a.jsx(ru,{}),size:"xs",variant:"ghost",fontSize:14,onClick:c})}),a.jsxs($,{direction:o?"column":"row",children:[a.jsxs(be,{fontWeight:"semibold",whiteSpace:"pre-wrap",pr:2,children:[e,":"]}),r?a.jsxs(ig,{href:t.toString(),isExternal:!0,wordBreak:"break-all",children:[t.toString()," ",a.jsx(T8,{mx:"2px"})]}):a.jsx(be,{overflowY:"scroll",wordBreak:"break-all",children:t.toString()})]})]}):null},Rn=i.memo(mme),hme=e=>{var ne;const{metadata:t}=e,{t:n}=W(),{recallPositivePrompt:r,recallNegativePrompt:o,recallSeed:s,recallCfgScale:l,recallCfgRescaleMultiplier:c,recallModel:d,recallScheduler:f,recallVaeModel:m,recallSteps:h,recallWidth:g,recallHeight:b,recallStrength:y,recallHrfEnabled:x,recallHrfStrength:w,recallHrfMethod:S,recallLoRA:j,recallControlNet:_,recallIPAdapter:I,recallT2IAdapter:E}=Sf(),M=i.useCallback(()=>{r(t==null?void 0:t.positive_prompt)},[t==null?void 0:t.positive_prompt,r]),D=i.useCallback(()=>{o(t==null?void 0:t.negative_prompt)},[t==null?void 0:t.negative_prompt,o]),R=i.useCallback(()=>{s(t==null?void 0:t.seed)},[t==null?void 0:t.seed,s]),N=i.useCallback(()=>{d(t==null?void 0:t.model)},[t==null?void 0:t.model,d]),O=i.useCallback(()=>{g(t==null?void 0:t.width)},[t==null?void 0:t.width,g]),T=i.useCallback(()=>{b(t==null?void 0:t.height)},[t==null?void 0:t.height,b]),U=i.useCallback(()=>{f(t==null?void 0:t.scheduler)},[t==null?void 0:t.scheduler,f]),G=i.useCallback(()=>{m(t==null?void 0:t.vae)},[t==null?void 0:t.vae,m]),q=i.useCallback(()=>{h(t==null?void 0:t.steps)},[t==null?void 0:t.steps,h]),Y=i.useCallback(()=>{l(t==null?void 0:t.cfg_scale)},[t==null?void 0:t.cfg_scale,l]),Q=i.useCallback(()=>{c(t==null?void 0:t.cfg_rescale_multiplier)},[t==null?void 0:t.cfg_rescale_multiplier,c]),V=i.useCallback(()=>{y(t==null?void 0:t.strength)},[t==null?void 0:t.strength,y]),se=i.useCallback(()=>{x(t==null?void 0:t.hrf_enabled)},[t==null?void 0:t.hrf_enabled,x]),ee=i.useCallback(()=>{w(t==null?void 0:t.hrf_strength)},[t==null?void 0:t.hrf_strength,w]),le=i.useCallback(()=>{S(t==null?void 0:t.hrf_method)},[t==null?void 0:t.hrf_method,S]),ae=i.useCallback(z=>{j(z)},[j]),ce=i.useCallback(z=>{_(z)},[_]),J=i.useCallback(z=>{I(z)},[I]),re=i.useCallback(z=>{E(z)},[E]),A=i.useMemo(()=>t!=null&&t.controlnets?t.controlnets.filter(z=>_m(z.control_model)):[],[t==null?void 0:t.controlnets]),L=i.useMemo(()=>t!=null&&t.ipAdapters?t.ipAdapters.filter(z=>_m(z.ip_adapter_model)):[],[t==null?void 0:t.ipAdapters]),K=i.useMemo(()=>t!=null&&t.t2iAdapters?t.t2iAdapters.filter(z=>Y9(z.t2i_adapter_model)):[],[t==null?void 0:t.t2iAdapters]);return!t||Object.keys(t).length===0?null:a.jsxs(a.Fragment,{children:[t.created_by&&a.jsx(Rn,{label:n("metadata.createdBy"),value:t.created_by}),t.generation_mode&&a.jsx(Rn,{label:n("metadata.generationMode"),value:t.generation_mode}),t.positive_prompt&&a.jsx(Rn,{label:n("metadata.positivePrompt"),labelPosition:"top",value:t.positive_prompt,onClick:M}),t.negative_prompt&&a.jsx(Rn,{label:n("metadata.negativePrompt"),labelPosition:"top",value:t.negative_prompt,onClick:D}),t.seed!==void 0&&t.seed!==null&&a.jsx(Rn,{label:n("metadata.seed"),value:t.seed,onClick:R}),t.model!==void 0&&t.model!==null&&t.model.model_name&&a.jsx(Rn,{label:n("metadata.model"),value:t.model.model_name,onClick:N}),t.width&&a.jsx(Rn,{label:n("metadata.width"),value:t.width,onClick:O}),t.height&&a.jsx(Rn,{label:n("metadata.height"),value:t.height,onClick:T}),t.scheduler&&a.jsx(Rn,{label:n("metadata.scheduler"),value:t.scheduler,onClick:U}),a.jsx(Rn,{label:n("metadata.vae"),value:((ne=t.vae)==null?void 0:ne.model_name)??"Default",onClick:G}),t.steps&&a.jsx(Rn,{label:n("metadata.steps"),value:t.steps,onClick:q}),t.cfg_scale!==void 0&&t.cfg_scale!==null&&a.jsx(Rn,{label:n("metadata.cfgScale"),value:t.cfg_scale,onClick:Y}),t.cfg_rescale_multiplier!==void 0&&t.cfg_rescale_multiplier!==null&&a.jsx(Rn,{label:n("metadata.cfgRescaleMultiplier"),value:t.cfg_rescale_multiplier,onClick:Q}),t.strength&&a.jsx(Rn,{label:n("metadata.strength"),value:t.strength,onClick:V}),t.hrf_enabled&&a.jsx(Rn,{label:n("hrf.metadata.enabled"),value:t.hrf_enabled,onClick:se}),t.hrf_enabled&&t.hrf_strength&&a.jsx(Rn,{label:n("hrf.metadata.strength"),value:t.hrf_strength,onClick:ee}),t.hrf_enabled&&t.hrf_method&&a.jsx(Rn,{label:n("hrf.metadata.method"),value:t.hrf_method,onClick:le}),t.loras&&t.loras.map((z,oe)=>{if(TI(z.lora))return a.jsx(Rn,{label:"LoRA",value:`${z.lora.model_name} - ${z.weight}`,onClick:ae.bind(null,z)},oe)}),A.map((z,oe)=>{var X;return a.jsx(Rn,{label:"ControlNet",value:`${(X=z.control_model)==null?void 0:X.model_name} - ${z.control_weight}`,onClick:ce.bind(null,z)},oe)}),L.map((z,oe)=>{var X;return a.jsx(Rn,{label:"IP Adapter",value:`${(X=z.ip_adapter_model)==null?void 0:X.model_name} - ${z.weight}`,onClick:J.bind(null,z)},oe)}),K.map((z,oe)=>{var X;return a.jsx(Rn,{label:"T2I Adapter",value:`${(X=z.t2i_adapter_model)==null?void 0:X.model_name} - ${z.weight}`,onClick:re.bind(null,z)},oe)})]})},gme=i.memo(hme),vme=e=>{const t=H(s=>s.config.workflowFetchDebounce??300),[n]=kc(e!=null&&e.has_workflow?e.image_name:null,t),{data:r,isLoading:o}=Z9(n??Br);return{workflow:r,isLoading:o}},bme=({image:e})=>{const{t}=W(),{workflow:n}=vme(e);return n?a.jsx(pl,{data:n,label:t("metadata.workflow")}):a.jsx(Tn,{label:t("nodes.noWorkflow")})},xme=i.memo(bme),yme=({image:e})=>{const{t}=W(),{metadata:n}=_2(e.image_name);return a.jsxs($,{layerStyle:"first",sx:{padding:4,gap:1,flexDirection:"column",width:"full",height:"full",borderRadius:"base",position:"absolute",overflow:"hidden"},children:[a.jsxs($,{gap:2,children:[a.jsxs(be,{fontWeight:"semibold",children:[t("common.file"),":"]}),a.jsxs(ig,{href:e.image_url,isExternal:!0,maxW:"calc(100% - 3rem)",children:[e.image_name,a.jsx(T8,{mx:"2px"})]})]}),a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},isLazy:!0,children:[a.jsxs(ui,{children:[a.jsx(mr,{children:t("metadata.recallParameters")}),a.jsx(mr,{children:t("metadata.metadata")}),a.jsx(mr,{children:t("metadata.imageDetails")}),a.jsx(mr,{children:t("metadata.workflow")})]}),a.jsxs(eu,{children:[a.jsx($r,{children:n?a.jsx(Sl,{children:a.jsx(gme,{metadata:n})}):a.jsx(Tn,{label:t("metadata.noRecallParameters")})}),a.jsx($r,{children:n?a.jsx(pl,{data:n,label:t("metadata.metadata")}):a.jsx(Tn,{label:t("metadata.noMetaData")})}),a.jsx($r,{children:e?a.jsx(pl,{data:e,label:t("metadata.imageDetails")}):a.jsx(Tn,{label:t("metadata.noImageDetails")})}),a.jsx($r,{children:a.jsx(xme,{image:e})})]})]})]})},Cme=i.memo(yme),I1={color:"base.100",pointerEvents:"auto"},wme=()=>{const{t:e}=W(),{handlePrevImage:t,handleNextImage:n,isOnFirstImage:r,isOnLastImage:o,handleLoadMoreImages:s,areMoreImagesAvailable:l,isFetching:c}=G8();return a.jsxs(Ie,{sx:{position:"relative",height:"100%",width:"100%"},children:[a.jsx(Ie,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineStart:0},children:!r&&a.jsx(rs,{"aria-label":e("accessibility.previousImage"),icon:a.jsx(cte,{size:64}),variant:"unstyled",onClick:t,boxSize:16,sx:I1})}),a.jsxs(Ie,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineEnd:0},children:[!o&&a.jsx(rs,{"aria-label":e("accessibility.nextImage"),icon:a.jsx(ute,{size:64}),variant:"unstyled",onClick:n,boxSize:16,sx:I1}),o&&l&&!c&&a.jsx(rs,{"aria-label":e("accessibility.loadMore"),icon:a.jsx(ite,{size:64}),variant:"unstyled",onClick:s,boxSize:16,sx:I1}),o&&l&&c&&a.jsx($,{sx:{w:16,h:16,alignItems:"center",justifyContent:"center"},children:a.jsx(va,{opacity:.5,size:"xl"})})]})]})},FO=i.memo(wme),Sme=fe([pe,J9],({ui:e,system:t},n)=>{const{shouldShowImageDetails:r,shouldHidePreview:o,shouldShowProgressInViewer:s}=e,{denoiseProgress:l}=t;return{shouldShowImageDetails:r,shouldHidePreview:o,imageName:n==null?void 0:n.image_name,hasDenoiseProgress:!!l,shouldShowProgressInViewer:s}}),kme=()=>{const{shouldShowImageDetails:e,imageName:t,hasDenoiseProgress:n,shouldShowProgressInViewer:r}=H(Sme),{handlePrevImage:o,handleNextImage:s,isOnLastImage:l,handleLoadMoreImages:c,areMoreImagesAvailable:d,isFetching:f}=G8();tt("left",()=>{o()},[o]),tt("right",()=>{if(l&&d&&!f){c();return}l||s()},[l,d,c,f,s]);const{currentData:m}=jo(t??Br),h=i.useMemo(()=>{if(m)return{id:"current-image",payloadType:"IMAGE_DTO",payload:{imageDTO:m}}},[m]),g=i.useMemo(()=>({id:"current-image",actionType:"SET_CURRENT_IMAGE"}),[]),[b,y]=i.useState(!1),x=i.useRef(0),{t:w}=W(),S=i.useCallback(()=>{y(!0),window.clearTimeout(x.current)},[]),j=i.useCallback(()=>{x.current=window.setTimeout(()=>{y(!1)},500)},[]);return a.jsxs($,{onMouseOver:S,onMouseOut:j,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative"},children:[n&&r?a.jsx(fme,{}):a.jsx(fl,{imageDTO:m,droppableData:g,draggableData:h,isUploadDisabled:!0,fitContainer:!0,useThumbailFallback:!0,dropLabel:w("gallery.setCurrentImage"),noContentFallback:a.jsx(Tn,{icon:si,label:w("gallery.noImageSelected")}),dataTestId:"image-preview"}),e&&m&&a.jsx(Ie,{sx:{position:"absolute",top:"0",width:"full",height:"full",borderRadius:"base"},children:a.jsx(Cme,{image:m})}),a.jsx(hr,{children:!e&&m&&b&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:"0",width:"100%",height:"100%",pointerEvents:"none"},children:a.jsx(FO,{})},"nextPrevButtons")})]})},jme=i.memo(kme),_me=()=>a.jsxs($,{sx:{position:"relative",flexDirection:"column",height:"100%",width:"100%",rowGap:4,alignItems:"center",justifyContent:"center"},children:[a.jsx(ume,{}),a.jsx(jme,{})]}),Ime=i.memo(_me),Pme=()=>a.jsx(Ie,{layerStyle:"first",sx:{position:"relative",width:"100%",height:"100%",p:2,borderRadius:"base"},children:a.jsx($,{sx:{width:"100%",height:"100%"},children:a.jsx(Ime,{})})}),zO=i.memo(Pme),Eme=()=>{const e=i.useRef(null),t=i.useCallback(()=>{e.current&&e.current.setLayout([50,50])},[]),n=R2();return a.jsx(Ie,{sx:{w:"full",h:"full"},children:a.jsxs(o0,{ref:e,autoSaveId:"imageTab.content",direction:"horizontal",style:{height:"100%",width:"100%"},storage:n,units:"percentages",children:[a.jsx(rl,{id:"imageTab.content.initImage",order:0,defaultSize:50,minSize:25,style:{position:"relative"},children:a.jsx(nme,{})}),a.jsx(Bh,{onDoubleClick:t}),a.jsx(rl,{id:"imageTab.content.selectedImage",order:1,defaultSize:50,minSize:25,children:a.jsx(zO,{})})]})})},Mme=i.memo(Eme);var Ome=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var r,o,s;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(o=r;o--!==0;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(s=Object.keys(t),r=s.length,r!==Object.keys(n).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(n,s[o]))return!1;for(o=r;o--!==0;){var l=s[o];if(!e(t[l],n[l]))return!1}return!0}return t!==t&&n!==n};const M_=Bd(Ome);function ax(e){return e===null||typeof e!="object"?{}:Object.keys(e).reduce((t,n)=>{const r=e[n];return r!=null&&r!==!1&&(t[n]=r),t},{})}var Dme=Object.defineProperty,O_=Object.getOwnPropertySymbols,Rme=Object.prototype.hasOwnProperty,Ame=Object.prototype.propertyIsEnumerable,D_=(e,t,n)=>t in e?Dme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Tme=(e,t)=>{for(var n in t||(t={}))Rme.call(t,n)&&D_(e,n,t[n]);if(O_)for(var n of O_(t))Ame.call(t,n)&&D_(e,n,t[n]);return e};function BO(e,t){if(t===null||typeof t!="object")return{};const n=Tme({},t);return Object.keys(t).forEach(r=>{r.includes(`${String(e)}.`)&&delete n[r]}),n}const Nme="__MANTINE_FORM_INDEX__";function R_(e,t){return t?typeof t=="boolean"?t:Array.isArray(t)?t.includes(e.replace(/[.][0-9]/g,`.${Nme}`)):!1:!1}function A_(e,t,n){typeof n.value=="object"&&(n.value=ic(n.value)),!n.enumerable||n.get||n.set||!n.configurable||!n.writable||t==="__proto__"?Object.defineProperty(e,t,n):e[t]=n.value}function ic(e){if(typeof e!="object")return e;var t=0,n,r,o,s=Object.prototype.toString.call(e);if(s==="[object Object]"?o=Object.create(e.__proto__||null):s==="[object Array]"?o=Array(e.length):s==="[object Set]"?(o=new Set,e.forEach(function(l){o.add(ic(l))})):s==="[object Map]"?(o=new Map,e.forEach(function(l,c){o.set(ic(c),ic(l))})):s==="[object Date]"?o=new Date(+e):s==="[object RegExp]"?o=new RegExp(e.source,e.flags):s==="[object DataView]"?o=new e.constructor(ic(e.buffer)):s==="[object ArrayBuffer]"?o=e.slice(0):s.slice(-6)==="Array]"&&(o=new e.constructor(e)),o){for(r=Object.getOwnPropertySymbols(e);t0,errors:t}}function lx(e,t,n="",r={}){return typeof e!="object"||e===null?r:Object.keys(e).reduce((o,s)=>{const l=e[s],c=`${n===""?"":`${n}.`}${s}`,d=ea(c,t);let f=!1;return typeof l=="function"&&(o[c]=l(d,t,c)),typeof l=="object"&&Array.isArray(d)&&(f=!0,d.forEach((m,h)=>lx(l,t,`${c}.${h}`,o))),typeof l=="object"&&typeof d=="object"&&d!==null&&(f||lx(l,t,c,o)),o},r)}function ix(e,t){return T_(typeof e=="function"?e(t):lx(e,t))}function tm(e,t,n){if(typeof e!="string")return{hasError:!1,error:null};const r=ix(t,n),o=Object.keys(r.errors).find(s=>e.split(".").every((l,c)=>l===s.split(".")[c]));return{hasError:!!o,error:o?r.errors[o]:null}}function $me(e,{from:t,to:n},r){const o=ea(e,r);if(!Array.isArray(o))return r;const s=[...o],l=o[t];return s.splice(t,1),s.splice(n,0,l),d0(e,s,r)}var Lme=Object.defineProperty,N_=Object.getOwnPropertySymbols,Fme=Object.prototype.hasOwnProperty,zme=Object.prototype.propertyIsEnumerable,$_=(e,t,n)=>t in e?Lme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Bme=(e,t)=>{for(var n in t||(t={}))Fme.call(t,n)&&$_(e,n,t[n]);if(N_)for(var n of N_(t))zme.call(t,n)&&$_(e,n,t[n]);return e};function Hme(e,{from:t,to:n},r){const o=`${e}.${t}`,s=`${e}.${n}`,l=Bme({},r);return Object.keys(r).every(c=>{let d,f;if(c.startsWith(o)&&(d=c,f=c.replace(o,s)),c.startsWith(s)&&(d=c.replace(s,o),f=c),d&&f){const m=l[d],h=l[f];return h===void 0?delete l[d]:l[d]=h,m===void 0?delete l[f]:l[f]=m,!1}return!0}),l}function Wme(e,t,n){const r=ea(e,n);return Array.isArray(r)?d0(e,r.filter((o,s)=>s!==t),n):n}var Vme=Object.defineProperty,L_=Object.getOwnPropertySymbols,Ume=Object.prototype.hasOwnProperty,Gme=Object.prototype.propertyIsEnumerable,F_=(e,t,n)=>t in e?Vme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Kme=(e,t)=>{for(var n in t||(t={}))Ume.call(t,n)&&F_(e,n,t[n]);if(L_)for(var n of L_(t))Gme.call(t,n)&&F_(e,n,t[n]);return e};function z_(e,t){const n=e.substring(t.length+1).split(".")[0];return parseInt(n,10)}function B_(e,t,n,r){if(t===void 0)return n;const o=`${String(e)}`;let s=n;r===-1&&(s=BO(`${o}.${t}`,s));const l=Kme({},s),c=new Set;return Object.entries(s).filter(([d])=>{if(!d.startsWith(`${o}.`))return!1;const f=z_(d,o);return Number.isNaN(f)?!1:f>=t}).forEach(([d,f])=>{const m=z_(d,o),h=d.replace(`${o}.${m}`,`${o}.${m+r}`);l[h]=f,c.add(h),c.has(d)||delete l[d]}),l}function qme(e,t,n,r){const o=ea(e,r);if(!Array.isArray(o))return r;const s=[...o];return s.splice(typeof n=="number"?n:s.length,0,t),d0(e,s,r)}function H_(e,t){const n=Object.keys(e);if(typeof t=="string"){const r=n.filter(o=>o.startsWith(`${t}.`));return e[t]||r.some(o=>e[o])||!1}return n.some(r=>e[r])}function Xme(e){return t=>{if(!t)e(t);else if(typeof t=="function")e(t);else if(typeof t=="object"&&"nativeEvent"in t){const{currentTarget:n}=t;n instanceof HTMLInputElement?n.type==="checkbox"?e(n.checked):e(n.value):(n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)&&e(n.value)}else e(t)}}var Qme=Object.defineProperty,Yme=Object.defineProperties,Zme=Object.getOwnPropertyDescriptors,W_=Object.getOwnPropertySymbols,Jme=Object.prototype.hasOwnProperty,ehe=Object.prototype.propertyIsEnumerable,V_=(e,t,n)=>t in e?Qme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ha=(e,t)=>{for(var n in t||(t={}))Jme.call(t,n)&&V_(e,n,t[n]);if(W_)for(var n of W_(t))ehe.call(t,n)&&V_(e,n,t[n]);return e},P1=(e,t)=>Yme(e,Zme(t));function vi({initialValues:e={},initialErrors:t={},initialDirty:n={},initialTouched:r={},clearInputErrorOnChange:o=!0,validateInputOnChange:s=!1,validateInputOnBlur:l=!1,transformValues:c=f=>f,validate:d}={}){const[f,m]=i.useState(r),[h,g]=i.useState(n),[b,y]=i.useState(e),[x,w]=i.useState(ax(t)),S=i.useRef(e),j=A=>{S.current=A},_=i.useCallback(()=>m({}),[]),I=A=>{const L=A?Ha(Ha({},b),A):b;j(L),g({})},E=i.useCallback(A=>w(L=>ax(typeof A=="function"?A(L):A)),[]),M=i.useCallback(()=>w({}),[]),D=i.useCallback(()=>{y(e),M(),j(e),g({}),_()},[]),R=i.useCallback((A,L)=>E(K=>P1(Ha({},K),{[A]:L})),[]),N=i.useCallback(A=>E(L=>{if(typeof A!="string")return L;const K=Ha({},L);return delete K[A],K}),[]),O=i.useCallback(A=>g(L=>{if(typeof A!="string")return L;const K=BO(A,L);return delete K[A],K}),[]),T=i.useCallback((A,L)=>{const K=R_(A,s);O(A),m(ne=>P1(Ha({},ne),{[A]:!0})),y(ne=>{const z=d0(A,L,ne);if(K){const oe=tm(A,d,z);oe.hasError?R(A,oe.error):N(A)}return z}),!K&&o&&R(A,null)},[]),U=i.useCallback(A=>{y(L=>{const K=typeof A=="function"?A(L):A;return Ha(Ha({},L),K)}),o&&M()},[]),G=i.useCallback((A,L)=>{O(A),y(K=>$me(A,L,K)),w(K=>Hme(A,L,K))},[]),q=i.useCallback((A,L)=>{O(A),y(K=>Wme(A,L,K)),w(K=>B_(A,L,K,-1))},[]),Y=i.useCallback((A,L,K)=>{O(A),y(ne=>qme(A,L,K,ne)),w(ne=>B_(A,K,ne,1))},[]),Q=i.useCallback(()=>{const A=ix(d,b);return w(A.errors),A},[b,d]),V=i.useCallback(A=>{const L=tm(A,d,b);return L.hasError?R(A,L.error):N(A),L},[b,d]),se=(A,{type:L="input",withError:K=!0,withFocus:ne=!0}={})=>{const oe={onChange:Xme(X=>T(A,X))};return K&&(oe.error=x[A]),L==="checkbox"?oe.checked=ea(A,b):oe.value=ea(A,b),ne&&(oe.onFocus=()=>m(X=>P1(Ha({},X),{[A]:!0})),oe.onBlur=()=>{if(R_(A,l)){const X=tm(A,d,b);X.hasError?R(A,X.error):N(A)}}),oe},ee=(A,L)=>K=>{K==null||K.preventDefault();const ne=Q();ne.hasErrors?L==null||L(ne.errors,b,K):A==null||A(c(b),K)},le=A=>c(A||b),ae=i.useCallback(A=>{A.preventDefault(),D()},[]),ce=A=>{if(A){const K=ea(A,h);if(typeof K=="boolean")return K;const ne=ea(A,b),z=ea(A,S.current);return!M_(ne,z)}return Object.keys(h).length>0?H_(h):!M_(b,S.current)},J=i.useCallback(A=>H_(f,A),[f]),re=i.useCallback(A=>A?!tm(A,d,b).hasError:!ix(d,b).hasErrors,[b,d]);return{values:b,errors:x,setValues:U,setErrors:E,setFieldValue:T,setFieldError:R,clearFieldError:N,clearErrors:M,reset:D,validate:Q,validateField:V,reorderListItem:G,removeListItem:q,insertListItem:Y,getInputProps:se,onSubmit:ee,onReset:ae,isDirty:ce,isTouched:J,setTouched:m,setDirty:g,resetTouched:_,resetDirty:I,isValid:re,getTransformedValues:le}}function En(e){const{...t}=e,{base50:n,base100:r,base200:o,base300:s,base800:l,base700:c,base900:d,accent500:f,accent300:m}=hf(),{colorMode:h}=ya(),g=i.useCallback(()=>({input:{color:Te(d,r)(h),backgroundColor:Te(n,d)(h),borderColor:Te(o,l)(h),borderWidth:2,outline:"none",":focus":{borderColor:Te(m,f)(h)}},label:{color:Te(c,s)(h),fontWeight:"normal",marginBottom:4}}),[m,f,r,o,s,n,c,l,d,h]);return a.jsx(_M,{styles:g,...t})}const the=[{value:"sd-1",label:xn["sd-1"]},{value:"sd-2",label:xn["sd-2"]},{value:"sdxl",label:xn.sdxl},{value:"sdxl-refiner",label:xn["sdxl-refiner"]}];function kf(e){const{...t}=e,{t:n}=W();return a.jsx(yn,{label:n("modelManager.baseModel"),data:the,...t})}function WO(e){const{data:t}=s3(),{...n}=e;return a.jsx(yn,{label:"Config File",placeholder:"Select A Config File",data:t||[],...n})}const nhe=[{value:"normal",label:"Normal"},{value:"inpaint",label:"Inpaint"},{value:"depth",label:"Depth"}];function f0(e){const{...t}=e,{t:n}=W();return a.jsx(yn,{label:n("modelManager.variant"),data:nhe,...t})}function Wh(e,t=!0){let n;t?n=new RegExp("[^\\\\/]+(?=\\.)"):n=new RegExp("[^\\\\/]+(?=[\\\\/]?$)");const r=e.match(n);return r?r[0]:""}function VO(e){const{t}=W(),n=te(),{model_path:r}=e,o=vi({initialValues:{model_name:r?Wh(r):"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"checkpoint",error:void 0,vae:"",variant:"normal",config:"configs\\stable-diffusion\\v1-inference.yaml"}}),[s]=a3(),[l,c]=i.useState(!1),d=h=>{s({body:h}).unwrap().then(g=>{n(lt(rn({title:t("modelManager.modelAdded",{modelName:h.model_name}),status:"success"}))),o.reset(),r&&n(Ud(null))}).catch(g=>{g&&n(lt(rn({title:t("toast.modelAddFailed"),status:"error"})))})},f=i.useCallback(h=>{if(o.values.model_name===""){const g=Wh(h.currentTarget.value);g&&o.setFieldValue("model_name",g)}},[o]),m=i.useCallback(()=>c(h=>!h),[]);return a.jsx("form",{onSubmit:o.onSubmit(h=>d(h)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",gap:2,children:[a.jsx(En,{label:t("modelManager.model"),required:!0,...o.getInputProps("model_name")}),a.jsx(kf,{label:t("modelManager.baseModel"),...o.getInputProps("base_model")}),a.jsx(En,{label:t("modelManager.modelLocation"),required:!0,...o.getInputProps("path"),onBlur:f}),a.jsx(En,{label:t("modelManager.description"),...o.getInputProps("description")}),a.jsx(En,{label:t("modelManager.vaeLocation"),...o.getInputProps("vae")}),a.jsx(f0,{label:t("modelManager.variant"),...o.getInputProps("variant")}),a.jsxs($,{flexDirection:"column",width:"100%",gap:2,children:[l?a.jsx(En,{required:!0,label:t("modelManager.customConfigFileLocation"),...o.getInputProps("config")}):a.jsx(WO,{required:!0,width:"100%",...o.getInputProps("config")}),a.jsx(yr,{isChecked:l,onChange:m,label:t("modelManager.useCustomConfig")}),a.jsx(Xe,{mt:2,type:"submit",children:t("modelManager.addModel")})]})]})})}function UO(e){const{t}=W(),n=te(),{model_path:r}=e,[o]=a3(),s=vi({initialValues:{model_name:r?Wh(r,!1):"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"diffusers",error:void 0,vae:"",variant:"normal"}}),l=d=>{o({body:d}).unwrap().then(f=>{n(lt(rn({title:t("modelManager.modelAdded",{modelName:d.model_name}),status:"success"}))),s.reset(),r&&n(Ud(null))}).catch(f=>{f&&n(lt(rn({title:t("toast.modelAddFailed"),status:"error"})))})},c=i.useCallback(d=>{if(s.values.model_name===""){const f=Wh(d.currentTarget.value,!1);f&&s.setFieldValue("model_name",f)}},[s]);return a.jsx("form",{onSubmit:s.onSubmit(d=>l(d)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",gap:2,children:[a.jsx(En,{required:!0,label:t("modelManager.model"),...s.getInputProps("model_name")}),a.jsx(kf,{label:t("modelManager.baseModel"),...s.getInputProps("base_model")}),a.jsx(En,{required:!0,label:t("modelManager.modelLocation"),placeholder:t("modelManager.modelLocationValidationMsg"),...s.getInputProps("path"),onBlur:c}),a.jsx(En,{label:t("modelManager.description"),...s.getInputProps("description")}),a.jsx(En,{label:t("modelManager.vaeLocation"),...s.getInputProps("vae")}),a.jsx(f0,{label:t("modelManager.variant"),...s.getInputProps("variant")}),a.jsx(Xe,{mt:2,type:"submit",children:t("modelManager.addModel")})]})})}function rhe(){const[e,t]=i.useState("diffusers"),{t:n}=W(),r=i.useCallback(s=>{s&&t(s)},[]),o=i.useMemo(()=>[{label:n("modelManager.diffusersModels"),value:"diffusers"},{label:n("modelManager.checkpointOrSafetensors"),value:"checkpoint"}],[n]);return a.jsxs($,{flexDirection:"column",gap:4,width:"100%",children:[a.jsx(yn,{label:n("modelManager.modelType"),value:e,data:o,onChange:r}),a.jsxs($,{sx:{p:4,borderRadius:4,bg:"base.300",_dark:{bg:"base.850"}},children:[e==="diffusers"&&a.jsx(UO,{}),e==="checkpoint"&&a.jsx(VO,{})]})]})}const ohe=[{label:"None",value:"none"},{label:"v_prediction",value:"v_prediction"},{label:"epsilon",value:"epsilon"},{label:"sample",value:"sample"}];function she(){const e=te(),{t}=W(),[n,{isLoading:r}]=l3(),o=vi({initialValues:{location:"",prediction_type:void 0}}),s=l=>{const c={location:l.location,prediction_type:l.prediction_type==="none"?void 0:l.prediction_type};n({body:c}).unwrap().then(d=>{e(lt(rn({title:t("toast.modelAddedSimple"),status:"success"}))),o.reset()}).catch(d=>{d&&e(lt(rn({title:`${d.data.detail} `,status:"error"})))})};return a.jsx("form",{onSubmit:o.onSubmit(l=>s(l)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",width:"100%",gap:4,children:[a.jsx(En,{label:t("modelManager.modelLocation"),placeholder:t("modelManager.simpleModelDesc"),w:"100%",...o.getInputProps("location")}),a.jsx(yn,{label:t("modelManager.predictionType"),data:ohe,defaultValue:"none",...o.getInputProps("prediction_type")}),a.jsx(Xe,{type:"submit",isLoading:r,children:t("modelManager.addModel")})]})})}function ahe(){const{t:e}=W(),[t,n]=i.useState("simple"),r=i.useCallback(()=>n("simple"),[]),o=i.useCallback(()=>n("advanced"),[]);return a.jsxs($,{flexDirection:"column",width:"100%",overflow:"scroll",maxHeight:window.innerHeight-250,gap:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{size:"sm",isChecked:t=="simple",onClick:r,children:e("common.simple")}),a.jsx(Xe,{size:"sm",isChecked:t=="advanced",onClick:o,children:e("common.advanced")})]}),a.jsxs($,{sx:{p:4,borderRadius:4,background:"base.200",_dark:{background:"base.800"}},children:[t==="simple"&&a.jsx(she,{}),t==="advanced"&&a.jsx(rhe,{})]})]})}function lhe(e){const{...t}=e;return a.jsx(bE,{w:"100%",...t,children:e.children})}function ihe(){const e=H(w=>w.modelmanager.searchFolder),[t,n]=i.useState(""),{data:r}=as(Bl),{foundModels:o,alreadyInstalled:s,filteredModels:l}=i3({search_path:e||""},{selectFromResult:({data:w})=>{const S=gL(r==null?void 0:r.entities),j=Hr(S,"path"),_=dL(w,j),I=CL(w,j);return{foundModels:w,alreadyInstalled:U_(I,t),filteredModels:U_(_,t)}}}),[c,{isLoading:d}]=l3(),f=te(),{t:m}=W(),h=i.useCallback(w=>{const S=w.currentTarget.id.split("\\").splice(-1)[0];c({body:{location:w.currentTarget.id}}).unwrap().then(j=>{f(lt(rn({title:`Added Model: ${S}`,status:"success"})))}).catch(j=>{j&&f(lt(rn({title:m("toast.modelAddFailed"),status:"error"})))})},[f,c,m]),g=i.useCallback(w=>{n(w.target.value)},[]),b=i.useCallback(w=>f(Ud(w)),[f]),y=({models:w,showActions:S=!0})=>w.map(j=>a.jsxs($,{sx:{p:4,gap:4,alignItems:"center",borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{w:"100%",sx:{flexDirection:"column",minW:"25%"},children:[a.jsx(be,{sx:{fontWeight:600},children:j.split("\\").slice(-1)[0]}),a.jsx(be,{sx:{fontSize:"sm",color:"base.600",_dark:{color:"base.400"}},children:j})]}),S?a.jsxs($,{gap:2,children:[a.jsx(Xe,{id:j,onClick:h,isLoading:d,children:m("modelManager.quickAdd")}),a.jsx(Xe,{onClick:b.bind(null,j),isLoading:d,children:m("modelManager.advanced")})]}):a.jsx(be,{sx:{fontWeight:600,p:2,borderRadius:4,color:"accent.50",bg:"accent.400",_dark:{color:"accent.100",bg:"accent.600"}},children:m("common.installed")})]},j));return(()=>e?!o||o.length===0?a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",height:96,userSelect:"none",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(be,{variant:"subtext",children:m("modelManager.noModels")})}):a.jsxs($,{sx:{flexDirection:"column",gap:2,w:"100%",minW:"50%"},children:[a.jsx(yo,{onChange:g,label:m("modelManager.search"),labelPos:"side"}),a.jsxs($,{p:2,gap:2,children:[a.jsxs(be,{sx:{fontWeight:600},children:[m("modelManager.modelsFound"),": ",o.length]}),a.jsxs(be,{sx:{fontWeight:600,color:"accent.500",_dark:{color:"accent.200"}},children:[m("common.notInstalled"),": ",l.length]})]}),a.jsx(lhe,{offsetScrollbars:!0,children:a.jsxs($,{gap:2,flexDirection:"column",children:[y({models:l}),y({models:s,showActions:!1})]})})]}):null)()}const U_=(e,t)=>{const n=[];return qn(e,r=>{if(!r)return null;r.includes(t)&&n.push(r)}),n};function che(){const e=H(m=>m.modelmanager.advancedAddScanModel),{t}=W(),n=i.useMemo(()=>[{label:t("modelManager.diffusersModels"),value:"diffusers"},{label:t("modelManager.checkpointOrSafetensors"),value:"checkpoint"}],[t]),[r,o]=i.useState("diffusers"),[s,l]=i.useState(!0);i.useEffect(()=>{e&&[".ckpt",".safetensors",".pth",".pt"].some(m=>e.endsWith(m))?o("checkpoint"):o("diffusers")},[e,o,s]);const c=te(),d=i.useCallback(()=>c(Ud(null)),[c]),f=i.useCallback(m=>{m&&(o(m),l(m==="checkpoint"))},[]);return e?a.jsxs(Ie,{as:Mn.div,initial:{x:-100,opacity:0},animate:{x:0,opacity:1,transition:{duration:.2}},sx:{display:"flex",flexDirection:"column",minWidth:"40%",maxHeight:window.innerHeight-300,overflow:"scroll",p:4,gap:4,borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{justifyContent:"space-between",alignItems:"center",children:[a.jsx(be,{size:"xl",fontWeight:600,children:s||r==="checkpoint"?"Add Checkpoint Model":"Add Diffusers Model"}),a.jsx(Fe,{icon:a.jsx(Nc,{}),"aria-label":t("modelManager.closeAdvanced"),onClick:d,size:"sm"})]}),a.jsx(yn,{label:t("modelManager.modelType"),value:r,data:n,onChange:f}),s?a.jsx(VO,{model_path:e},e):a.jsx(UO,{model_path:e},e)]}):null}function uhe(){const e=te(),{t}=W(),n=H(d=>d.modelmanager.searchFolder),{refetch:r}=i3({search_path:n||""}),o=vi({initialValues:{folder:""}}),s=i.useCallback(d=>{e(uS(d.folder))},[e]),l=i.useCallback(()=>{r()},[r]),c=i.useCallback(()=>{e(uS(null)),e(Ud(null))},[e]);return a.jsx("form",{onSubmit:o.onSubmit(d=>s(d)),style:{width:"100%"},children:a.jsxs($,{sx:{w:"100%",gap:2,borderRadius:4,alignItems:"center"},children:[a.jsxs($,{w:"100%",alignItems:"center",gap:4,minH:12,children:[a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",minW:"max-content",_dark:{color:"base.300"}},children:t("common.folder")}),n?a.jsx($,{sx:{w:"100%",p:2,px:4,bg:"base.300",borderRadius:4,fontSize:"sm",fontWeight:"bold",_dark:{bg:"base.700"}},children:n}):a.jsx(yo,{w:"100%",size:"md",...o.getInputProps("folder")})]}),a.jsxs($,{gap:2,children:[n?a.jsx(Fe,{"aria-label":t("modelManager.scanAgain"),tooltip:t("modelManager.scanAgain"),icon:a.jsx(XM,{}),onClick:l,fontSize:18,size:"sm"}):a.jsx(Fe,{"aria-label":t("modelManager.findModels"),tooltip:t("modelManager.findModels"),icon:a.jsx(Ute,{}),fontSize:18,size:"sm",type:"submit"}),a.jsx(Fe,{"aria-label":t("modelManager.clearCheckpointFolder"),tooltip:t("modelManager.clearCheckpointFolder"),icon:a.jsx(ao,{}),size:"sm",onClick:c,isDisabled:!n,colorScheme:"red"})]})]})})}const dhe=i.memo(uhe);function fhe(){return a.jsxs($,{flexDirection:"column",w:"100%",gap:4,children:[a.jsx(dhe,{}),a.jsxs($,{gap:4,children:[a.jsx($,{sx:{maxHeight:window.innerHeight-300,overflow:"scroll",gap:4,w:"100%"},children:a.jsx(ihe,{})}),a.jsx(che,{})]})]})}function phe(){const[e,t]=i.useState("add"),{t:n}=W(),r=i.useCallback(()=>t("add"),[]),o=i.useCallback(()=>t("scan"),[]);return a.jsxs($,{flexDirection:"column",gap:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{onClick:r,isChecked:e=="add",size:"sm",width:"100%",children:n("modelManager.addModel")}),a.jsx(Xe,{onClick:o,isChecked:e=="scan",size:"sm",width:"100%",children:n("modelManager.scanForModels")})]}),e=="add"&&a.jsx(ahe,{}),e=="scan"&&a.jsx(fhe,{})]})}const mhe=[{label:"Stable Diffusion 1",value:"sd-1"},{label:"Stable Diffusion 2",value:"sd-2"}];function hhe(){var K,ne;const{t:e}=W(),t=te(),{data:n}=as(Bl),[r,{isLoading:o}]=eN(),[s,l]=i.useState("sd-1"),c=wS(n==null?void 0:n.entities,(z,oe)=>(z==null?void 0:z.model_format)==="diffusers"&&(z==null?void 0:z.base_model)==="sd-1"),d=wS(n==null?void 0:n.entities,(z,oe)=>(z==null?void 0:z.model_format)==="diffusers"&&(z==null?void 0:z.base_model)==="sd-2"),f=i.useMemo(()=>({"sd-1":c,"sd-2":d}),[c,d]),[m,h]=i.useState(((K=Object.keys(f[s]))==null?void 0:K[0])??null),[g,b]=i.useState(((ne=Object.keys(f[s]))==null?void 0:ne[1])??null),[y,x]=i.useState(null),[w,S]=i.useState(""),[j,_]=i.useState(.5),[I,E]=i.useState("weighted_sum"),[M,D]=i.useState("root"),[R,N]=i.useState(""),[O,T]=i.useState(!1),U=Object.keys(f[s]).filter(z=>z!==g&&z!==y),G=Object.keys(f[s]).filter(z=>z!==m&&z!==y),q=Object.keys(f[s]).filter(z=>z!==m&&z!==g),Y=i.useCallback(z=>{l(z),h(null),b(null)},[]),Q=i.useCallback(z=>{h(z)},[]),V=i.useCallback(z=>{b(z)},[]),se=i.useCallback(z=>{z?(x(z),E("weighted_sum")):(x(null),E("add_difference"))},[]),ee=i.useCallback(z=>S(z.target.value),[]),le=i.useCallback(z=>_(z),[]),ae=i.useCallback(()=>_(.5),[]),ce=i.useCallback(z=>E(z),[]),J=i.useCallback(z=>D(z),[]),re=i.useCallback(z=>N(z.target.value),[]),A=i.useCallback(z=>T(z.target.checked),[]),L=i.useCallback(()=>{const z=[];let oe=[m,g,y];oe=oe.filter(Z=>Z!==null),oe.forEach(Z=>{var ve;const me=(ve=Z==null?void 0:Z.split("/"))==null?void 0:ve[2];me&&z.push(me)});const X={model_names:z,merged_model_name:w!==""?w:z.join("-"),alpha:j,interp:I,force:O,merge_dest_directory:M==="root"?void 0:R};r({base_model:s,body:{body:X}}).unwrap().then(Z=>{t(lt(rn({title:e("modelManager.modelsMerged"),status:"success"})))}).catch(Z=>{Z&&t(lt(rn({title:e("modelManager.modelsMergeFailed"),status:"error"})))})},[s,t,r,w,j,R,O,I,M,m,y,g,e]);return a.jsxs($,{flexDirection:"column",rowGap:4,children:[a.jsxs($,{sx:{flexDirection:"column",rowGap:1},children:[a.jsx(be,{children:e("modelManager.modelMergeHeaderHelp1")}),a.jsx(be,{fontSize:"sm",variant:"subtext",children:e("modelManager.modelMergeHeaderHelp2")})]}),a.jsxs($,{columnGap:4,children:[a.jsx(yn,{label:e("modelManager.modelType"),w:"100%",data:mhe,value:s,onChange:Y}),a.jsx(sn,{label:e("modelManager.modelOne"),w:"100%",value:m,placeholder:e("modelManager.selectModel"),data:U,onChange:Q}),a.jsx(sn,{label:e("modelManager.modelTwo"),w:"100%",placeholder:e("modelManager.selectModel"),value:g,data:G,onChange:V}),a.jsx(sn,{label:e("modelManager.modelThree"),data:q,w:"100%",placeholder:e("modelManager.selectModel"),clearable:!0,onChange:se})]}),a.jsx(yo,{label:e("modelManager.mergedModelName"),value:w,onChange:ee}),a.jsxs($,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(nt,{label:e("modelManager.alpha"),min:.01,max:.99,step:.01,value:j,onChange:le,withInput:!0,withReset:!0,handleReset:ae,withSliderMarks:!0}),a.jsx(be,{variant:"subtext",fontSize:"sm",children:e("modelManager.modelMergeAlphaHelp")})]}),a.jsxs($,{sx:{padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(be,{fontWeight:500,fontSize:"sm",variant:"subtext",children:e("modelManager.interpolationType")}),a.jsx($m,{value:I,onChange:ce,children:a.jsx($,{columnGap:4,children:y===null?a.jsxs(a.Fragment,{children:[a.jsx(Ys,{value:"weighted_sum",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.weightedSum")})}),a.jsx(Ys,{value:"sigmoid",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.sigmoid")})}),a.jsx(Ys,{value:"inv_sigmoid",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.inverseSigmoid")})})]}):a.jsx(Ys,{value:"add_difference",children:a.jsx(Ut,{label:e("modelManager.modelMergeInterpAddDifferenceHelp"),children:a.jsx(be,{fontSize:"sm",children:e("modelManager.addDifference")})})})})})]}),a.jsxs($,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.900"}},children:[a.jsxs($,{columnGap:4,children:[a.jsx(be,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:e("modelManager.mergedModelSaveLocation")}),a.jsx($m,{value:M,onChange:J,children:a.jsxs($,{columnGap:4,children:[a.jsx(Ys,{value:"root",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.invokeAIFolder")})}),a.jsx(Ys,{value:"custom",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.custom")})})]})})]}),M==="custom"&&a.jsx(yo,{label:e("modelManager.mergedModelCustomSaveLocation"),value:R,onChange:re})]}),a.jsx(yr,{label:e("modelManager.ignoreMismatch"),isChecked:O,onChange:A,fontWeight:"500"}),a.jsx(Xe,{onClick:L,isLoading:o,isDisabled:m===null||g===null,children:e("modelManager.merge")})]})}function ghe(e){const{model:t}=e,n=te(),{t:r}=W(),[o,{isLoading:s}]=tN(),[l,c]=i.useState("InvokeAIRoot"),[d,f]=i.useState("");i.useEffect(()=>{c("InvokeAIRoot")},[t]);const m=i.useCallback(()=>{c("InvokeAIRoot")},[]),h=i.useCallback(y=>{c(y)},[]),g=i.useCallback(y=>{f(y.target.value)},[]),b=i.useCallback(()=>{const y={base_model:t.base_model,model_name:t.model_name,convert_dest_directory:l==="Custom"?d:void 0};if(l==="Custom"&&d===""){n(lt(rn({title:r("modelManager.noCustomLocationProvided"),status:"error"})));return}n(lt(rn({title:`${r("modelManager.convertingModelBegin")}: ${t.model_name}`,status:"info"}))),o(y).unwrap().then(()=>{n(lt(rn({title:`${r("modelManager.modelConverted")}: ${t.model_name}`,status:"success"})))}).catch(()=>{n(lt(rn({title:`${r("modelManager.modelConversionFailed")}: ${t.model_name}`,status:"error"})))})},[o,d,n,t.base_model,t.model_name,l,r]);return a.jsxs(t0,{title:`${r("modelManager.convert")} ${t.model_name}`,acceptCallback:b,cancelCallback:m,acceptButtonText:`${r("modelManager.convert")}`,triggerComponent:a.jsxs(Xe,{size:"sm","aria-label":r("modelManager.convertToDiffusers"),className:" modal-close-btn",isLoading:s,children:["🧨 ",r("modelManager.convertToDiffusers")]}),motionPreset:"slideInBottom",children:[a.jsxs($,{flexDirection:"column",rowGap:4,children:[a.jsx(be,{children:r("modelManager.convertToDiffusersHelpText1")}),a.jsxs(cg,{children:[a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText2")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText3")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText4")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText5")})]}),a.jsx(be,{children:r("modelManager.convertToDiffusersHelpText6")})]}),a.jsxs($,{flexDir:"column",gap:2,children:[a.jsxs($,{marginTop:4,flexDir:"column",gap:2,children:[a.jsx(be,{fontWeight:"600",children:r("modelManager.convertToDiffusersSaveLocation")}),a.jsx($m,{value:l,onChange:h,children:a.jsxs($,{gap:4,children:[a.jsx(Ys,{value:"InvokeAIRoot",children:a.jsx(Ut,{label:"Save converted model in the InvokeAI root folder",children:r("modelManager.invokeRoot")})}),a.jsx(Ys,{value:"Custom",children:a.jsx(Ut,{label:"Save converted model in a custom folder",children:r("modelManager.custom")})})]})})]}),l==="Custom"&&a.jsxs($,{flexDirection:"column",rowGap:2,children:[a.jsx(be,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:r("modelManager.customSaveLocation")}),a.jsx(yo,{value:d,onChange:g,width:"full"})]})]})]})}function vhe(e){const{model:t}=e,[n,{isLoading:r}]=c3(),{data:o}=s3(),[s,l]=i.useState(!1);i.useEffect(()=>{o!=null&&o.includes(t.config)||l(!0)},[o,t.config]);const c=te(),{t:d}=W(),f=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"main",path:t.path?t.path:"",description:t.description?t.description:"",model_format:"checkpoint",vae:t.vae?t.vae:"",config:t.config?t.config:"",variant:t.variant},validate:{path:g=>g.trim().length===0?"Must provide a path":null}}),m=i.useCallback(()=>l(g=>!g),[]),h=i.useCallback(g=>{const b={base_model:t.base_model,model_name:t.model_name,body:g};n(b).unwrap().then(y=>{f.setValues(y),c(lt(rn({title:d("modelManager.modelUpdated"),status:"success"})))}).catch(y=>{f.reset(),c(lt(rn({title:d("modelManager.modelUpdateFailed"),status:"error"})))})},[f,c,t.base_model,t.model_name,d,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{justifyContent:"space-between",alignItems:"center",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",d("modelManager.model")]})]}),[""].includes(t.base_model)?a.jsx(Sa,{sx:{p:2,borderRadius:4,bg:"error.200",_dark:{bg:"error.400"}},children:d("modelManager.conversionNotSupported")}):a.jsx(ghe,{model:t})]}),a.jsx(On,{}),a.jsx($,{flexDirection:"column",maxHeight:window.innerHeight-270,overflowY:"scroll",children:a.jsx("form",{onSubmit:f.onSubmit(g=>h(g)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:d("modelManager.name"),...f.getInputProps("model_name")}),a.jsx(En,{label:d("modelManager.description"),...f.getInputProps("description")}),a.jsx(kf,{required:!0,...f.getInputProps("base_model")}),a.jsx(f0,{required:!0,...f.getInputProps("variant")}),a.jsx(En,{required:!0,label:d("modelManager.modelLocation"),...f.getInputProps("path")}),a.jsx(En,{label:d("modelManager.vaeLocation"),...f.getInputProps("vae")}),a.jsxs($,{flexDirection:"column",gap:2,children:[s?a.jsx(En,{required:!0,label:d("modelManager.config"),...f.getInputProps("config")}):a.jsx(WO,{required:!0,...f.getInputProps("config")}),a.jsx(yr,{isChecked:s,onChange:m,label:"Use Custom Config"})]}),a.jsx(Xe,{type:"submit",isLoading:r,children:d("modelManager.updateModel")})]})})})]})}function bhe(e){const{model:t}=e,[n,{isLoading:r}]=c3(),o=te(),{t:s}=W(),l=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"main",path:t.path?t.path:"",description:t.description?t.description:"",model_format:"diffusers",vae:t.vae?t.vae:"",variant:t.variant},validate:{path:d=>d.trim().length===0?"Must provide a path":null}}),c=i.useCallback(d=>{const f={base_model:t.base_model,model_name:t.model_name,body:d};n(f).unwrap().then(m=>{l.setValues(m),o(lt(rn({title:s("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{l.reset(),o(lt(rn({title:s("modelManager.modelUpdateFailed"),status:"error"})))})},[l,o,t.base_model,t.model_name,s,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",s("modelManager.model")]})]}),a.jsx(On,{}),a.jsx("form",{onSubmit:l.onSubmit(d=>c(d)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:s("modelManager.name"),...l.getInputProps("model_name")}),a.jsx(En,{label:s("modelManager.description"),...l.getInputProps("description")}),a.jsx(kf,{required:!0,...l.getInputProps("base_model")}),a.jsx(f0,{required:!0,...l.getInputProps("variant")}),a.jsx(En,{required:!0,label:s("modelManager.modelLocation"),...l.getInputProps("path")}),a.jsx(En,{label:s("modelManager.vaeLocation"),...l.getInputProps("vae")}),a.jsx(Xe,{type:"submit",isLoading:r,children:s("modelManager.updateModel")})]})})]})}function xhe(e){const{model:t}=e,[n,{isLoading:r}]=nN(),o=te(),{t:s}=W(),l=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"lora",path:t.path?t.path:"",description:t.description?t.description:"",model_format:t.model_format},validate:{path:d=>d.trim().length===0?"Must provide a path":null}}),c=i.useCallback(d=>{const f={base_model:t.base_model,model_name:t.model_name,body:d};n(f).unwrap().then(m=>{l.setValues(m),o(lt(rn({title:s("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{l.reset(),o(lt(rn({title:s("modelManager.modelUpdateFailed"),status:"error"})))})},[o,l,t.base_model,t.model_name,s,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",s("modelManager.model")," ⋅"," ",rN[t.model_format]," ",s("common.format")]})]}),a.jsx(On,{}),a.jsx("form",{onSubmit:l.onSubmit(d=>c(d)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:s("modelManager.name"),...l.getInputProps("model_name")}),a.jsx(En,{label:s("modelManager.description"),...l.getInputProps("description")}),a.jsx(kf,{...l.getInputProps("base_model")}),a.jsx(En,{label:s("modelManager.modelLocation"),...l.getInputProps("path")}),a.jsx(Xe,{type:"submit",isLoading:r,children:s("modelManager.updateModel")})]})})]})}function yhe(e){const{t}=W(),n=te(),[r]=oN(),[o]=sN(),{model:s,isSelected:l,setSelectedModelId:c}=e,d=i.useCallback(()=>{c(s.id)},[s.id,c]),f=i.useCallback(()=>{const m={main:r,lora:o,onnx:r}[s.model_type];m(s).unwrap().then(h=>{n(lt(rn({title:`${t("modelManager.modelDeleted")}: ${s.model_name}`,status:"success"})))}).catch(h=>{h&&n(lt(rn({title:`${t("modelManager.modelDeleteFailed")}: ${s.model_name}`,status:"error"})))}),c(void 0)},[r,o,s,c,n,t]);return a.jsxs($,{sx:{gap:2,alignItems:"center",w:"full"},children:[a.jsx($,{as:Xe,isChecked:l,sx:{justifyContent:"start",p:2,borderRadius:"base",w:"full",alignItems:"center",bg:l?"accent.400":"base.100",color:l?"base.50":"base.800",_hover:{bg:l?"accent.500":"base.300",color:l?"base.50":"base.800"},_dark:{color:l?"base.50":"base.100",bg:l?"accent.600":"base.850",_hover:{color:l?"base.50":"base.100",bg:l?"accent.550":"base.700"}}},onClick:d,children:a.jsxs($,{gap:4,alignItems:"center",children:[a.jsx(Sa,{minWidth:14,p:.5,fontSize:"sm",variant:"solid",children:aN[s.base_model]}),a.jsx(Ut,{label:s.description,hasArrow:!0,placement:"bottom",children:a.jsx(be,{sx:{fontWeight:500},children:s.model_name})})]})}),a.jsx(t0,{title:t("modelManager.deleteModel"),acceptCallback:f,acceptButtonText:t("modelManager.delete"),triggerComponent:a.jsx(Fe,{icon:a.jsx(Fre,{}),"aria-label":t("modelManager.deleteConfig"),colorScheme:"error"}),children:a.jsxs($,{rowGap:4,flexDirection:"column",children:[a.jsx("p",{style:{fontWeight:"bold"},children:t("modelManager.deleteMsg1")}),a.jsx("p",{children:t("modelManager.deleteMsg2")})]})})]})}const Che=e=>{const{selectedModelId:t,setSelectedModelId:n}=e,{t:r}=W(),[o,s]=i.useState(""),[l,c]=i.useState("all"),{filteredDiffusersModels:d,isLoadingDiffusersModels:f}=as(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredDiffusersModels:Vu(_,"main","diffusers",o),isLoadingDiffusersModels:I})}),{filteredCheckpointModels:m,isLoadingCheckpointModels:h}=as(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredCheckpointModels:Vu(_,"main","checkpoint",o),isLoadingCheckpointModels:I})}),{filteredLoraModels:g,isLoadingLoraModels:b}=Vd(void 0,{selectFromResult:({data:_,isLoading:I})=>({filteredLoraModels:Vu(_,"lora",void 0,o),isLoadingLoraModels:I})}),{filteredOnnxModels:y,isLoadingOnnxModels:x}=vd(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredOnnxModels:Vu(_,"onnx","onnx",o),isLoadingOnnxModels:I})}),{filteredOliveModels:w,isLoadingOliveModels:S}=vd(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredOliveModels:Vu(_,"onnx","olive",o),isLoadingOliveModels:I})}),j=i.useCallback(_=>{s(_.target.value)},[]);return a.jsx($,{flexDirection:"column",rowGap:4,width:"50%",minWidth:"50%",children:a.jsxs($,{flexDirection:"column",gap:4,paddingInlineEnd:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{onClick:c.bind(null,"all"),isChecked:l==="all",size:"sm",children:r("modelManager.allModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"diffusers"),isChecked:l==="diffusers",children:r("modelManager.diffusersModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"checkpoint"),isChecked:l==="checkpoint",children:r("modelManager.checkpointModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"onnx"),isChecked:l==="onnx",children:r("modelManager.onnxModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"olive"),isChecked:l==="olive",children:r("modelManager.oliveModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"lora"),isChecked:l==="lora",children:r("modelManager.loraModels")})]}),a.jsx(yo,{onChange:j,label:r("modelManager.search"),labelPos:"side"}),a.jsxs($,{flexDirection:"column",gap:4,maxHeight:window.innerHeight-280,overflow:"scroll",children:[f&&a.jsx(tc,{loadingMessage:"Loading Diffusers..."}),["all","diffusers"].includes(l)&&!f&&d.length>0&&a.jsx(ec,{title:"Diffusers",modelList:d,selected:{selectedModelId:t,setSelectedModelId:n}},"diffusers"),h&&a.jsx(tc,{loadingMessage:"Loading Checkpoints..."}),["all","checkpoint"].includes(l)&&!h&&m.length>0&&a.jsx(ec,{title:"Checkpoints",modelList:m,selected:{selectedModelId:t,setSelectedModelId:n}},"checkpoints"),b&&a.jsx(tc,{loadingMessage:"Loading LoRAs..."}),["all","lora"].includes(l)&&!b&&g.length>0&&a.jsx(ec,{title:"LoRAs",modelList:g,selected:{selectedModelId:t,setSelectedModelId:n}},"loras"),S&&a.jsx(tc,{loadingMessage:"Loading Olives..."}),["all","olive"].includes(l)&&!S&&w.length>0&&a.jsx(ec,{title:"Olives",modelList:w,selected:{selectedModelId:t,setSelectedModelId:n}},"olive"),x&&a.jsx(tc,{loadingMessage:"Loading ONNX..."}),["all","onnx"].includes(l)&&!x&&y.length>0&&a.jsx(ec,{title:"ONNX",modelList:y,selected:{selectedModelId:t,setSelectedModelId:n}},"onnx")]})]})})},whe=i.memo(Che),Vu=(e,t,n,r)=>{const o=[];return qn(e==null?void 0:e.entities,s=>{if(!s)return;const l=s.model_name.toLowerCase().includes(r.toLowerCase()),c=n===void 0||s.model_format===n,d=s.model_type===t;l&&c&&d&&o.push(s)}),o},W2=i.memo(e=>a.jsx($,{flexDirection:"column",gap:4,borderRadius:4,p:4,sx:{bg:"base.200",_dark:{bg:"base.800"}},children:e.children}));W2.displayName="StyledModelContainer";const ec=i.memo(e=>{const{title:t,modelList:n,selected:r}=e;return a.jsx(W2,{children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(be,{variant:"subtext",fontSize:"sm",children:t}),n.map(o=>a.jsx(yhe,{model:o,isSelected:r.selectedModelId===o.id,setSelectedModelId:r.setSelectedModelId},o.id))]})})});ec.displayName="ModelListWrapper";const tc=i.memo(({loadingMessage:e})=>a.jsx(W2,{children:a.jsxs($,{justifyContent:"center",alignItems:"center",flexDirection:"column",p:4,gap:8,children:[a.jsx(va,{}),a.jsx(be,{variant:"subtext",children:e||"Fetching..."})]})}));tc.displayName="FetchingModelsLoader";function She(){const[e,t]=i.useState(),{mainModel:n}=as(Bl,{selectFromResult:({data:s})=>({mainModel:e?s==null?void 0:s.entities[e]:void 0})}),{loraModel:r}=Vd(void 0,{selectFromResult:({data:s})=>({loraModel:e?s==null?void 0:s.entities[e]:void 0})}),o=n||r;return a.jsxs($,{sx:{gap:8,w:"full",h:"full"},children:[a.jsx(whe,{selectedModelId:e,setSelectedModelId:t}),a.jsx(khe,{model:o})]})}const khe=e=>{const{t}=W(),{model:n}=e;return(n==null?void 0:n.model_format)==="checkpoint"?a.jsx(vhe,{model:n},n.id):(n==null?void 0:n.model_format)==="diffusers"?a.jsx(bhe,{model:n},n.id):(n==null?void 0:n.model_type)==="lora"?a.jsx(xhe,{model:n},n.id):a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",maxH:96,userSelect:"none"},children:a.jsx(be,{variant:"subtext",children:t("modelManager.noModelSelected")})})};function jhe(){const{t:e}=W();return a.jsxs($,{sx:{w:"full",p:4,borderRadius:4,gap:4,justifyContent:"space-between",alignItems:"center",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(be,{sx:{fontWeight:600},children:e("modelManager.syncModels")}),a.jsx(be,{fontSize:"sm",sx:{_dark:{color:"base.400"}},children:e("modelManager.syncModelsDesc")})]}),a.jsx(cu,{})]})}function _he(){return a.jsx($,{children:a.jsx(jhe,{})})}const Ihe=()=>{const{t:e}=W(),t=i.useMemo(()=>[{id:"modelManager",label:e("modelManager.modelManager"),content:a.jsx(She,{})},{id:"importModels",label:e("modelManager.importModels"),content:a.jsx(phe,{})},{id:"mergeModels",label:e("modelManager.mergeModels"),content:a.jsx(hhe,{})},{id:"settings",label:e("modelManager.settings"),content:a.jsx(_he,{})}],[e]);return a.jsxs(ci,{isLazy:!0,variant:"line",layerStyle:"first",sx:{w:"full",h:"full",p:4,gap:4,borderRadius:"base"},children:[a.jsx(ui,{children:t.map(n=>a.jsx(mr,{sx:{borderTopRadius:"base"},children:n.label},n.id))}),a.jsx(eu,{sx:{w:"full",h:"full"},children:t.map(n=>a.jsx($r,{sx:{w:"full",h:"full"},children:n.content},n.id))})]})},Phe=i.memo(Ihe),Ehe=e=>{const t=Ya();return{...u3,id:t,type:"current_image",position:e,data:{id:t,type:"current_image",isOpen:!0,label:"Current Image"}}},Mhe=e=>{const t=Ya();return{...u3,id:t,type:"notes",position:e,data:{id:t,isOpen:!0,label:"Notes",notes:"",type:"notes"}}},Ohe=fe([e=>e.nodes],e=>e.nodeTemplates),Dhe=()=>{const e=H(Ohe),t=zx();return i.useCallback(n=>{var d;let r=window.innerWidth/2,o=window.innerHeight/2;const s=(d=document.querySelector("#workflow-editor"))==null?void 0:d.getBoundingClientRect();s&&(r=s.width/2-U1/2,o=s.height/2-U1/2);const l=t.project({x:r,y:o});if(n==="current_image")return Ehe(l);if(n==="notes")return Mhe(l);const c=e[n];return lN(l,c)},[e,t])},GO=i.forwardRef(({label:e,description:t,...n},r)=>a.jsx("div",{ref:r,...n,children:a.jsxs("div",{children:[a.jsx(be,{fontWeight:600,children:e}),a.jsx(be,{size:"xs",sx:{color:"base.600",_dark:{color:"base.500"}},children:t})]})}));GO.displayName="AddNodePopoverSelectItem";const Rhe=(e,t)=>{const n=new RegExp(e.trim().replace(/[-[\]{}()*+!<=:?./\\^$|#,]/g,"").split(" ").join(".*"),"gi");return n.test(t.label)||n.test(t.description)||t.tags.some(r=>n.test(r))},Ahe=()=>{const e=te(),t=Dhe(),n=zs(),{t:r}=W(),o=H(w=>w.nodes.connectionStartFieldType),s=H(w=>{var S;return(S=w.nodes.connectionStartParams)==null?void 0:S.handleType}),l=fe([pe],({nodes:w})=>{const S=o?pL(w.nodeTemplates,_=>{const I=s=="source"?_.inputs:_.outputs;return Jo(I,E=>{const M=s=="source"?o:E.type,D=s=="target"?o:E.type;return Bx(M,D)})}):Hr(w.nodeTemplates),j=Hr(S,_=>({label:_.title,value:_.type,description:_.description,tags:_.tags}));return o===null&&(j.push({label:r("nodes.currentImage"),value:"current_image",description:r("nodes.currentImageDescription"),tags:["progress"]}),j.push({label:r("nodes.notes"),value:"notes",description:r("nodes.notesDescription"),tags:["notes"]})),j.sort((_,I)=>_.label.localeCompare(I.label)),{data:j}}),{data:c}=H(l),d=H(w=>w.nodes.isAddNodePopoverOpen),f=i.useRef(null),m=i.useCallback(w=>{const S=t(w);if(!S){const j=r("nodes.unknownNode",{nodeType:w});n({status:"error",title:j});return}e(iN(S))},[e,t,n,r]),h=i.useCallback(w=>{w&&m(w)},[m]),g=i.useCallback(()=>{e(cN())},[e]),b=i.useCallback(()=>{e(d3())},[e]),y=i.useCallback(w=>{w.preventDefault(),b(),setTimeout(()=>{var S;(S=f.current)==null||S.focus()},0)},[b]),x=i.useCallback(()=>{g()},[g]);return tt(["shift+a","space"],y),tt(["escape"],x),a.jsxs(lf,{initialFocusRef:f,isOpen:d,onClose:g,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[a.jsx(p6,{children:a.jsx($,{sx:{position:"absolute",top:"15%",insetInlineStart:"50%",pointerEvents:"none"}})}),a.jsx(cf,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:a.jsx(Cg,{sx:{p:0},children:a.jsx(sn,{inputRef:f,selectOnBlur:!1,placeholder:r("nodes.nodeSearch"),value:null,data:c,maxDropdownHeight:400,nothingFound:r("nodes.noMatchingNodes"),itemComponent:GO,filter:Rhe,onChange:h,hoverOnSearchChange:!0,onDropdownClose:g,sx:{width:"32rem",input:{padding:"0.5rem"}}})})})]})},The=i.memo(Ahe),Nhe=()=>{const e=zx(),t=H(r=>r.nodes.shouldValidateGraph);return i.useCallback(({source:r,sourceHandle:o,target:s,targetHandle:l})=>{const c=e.getEdges(),d=e.getNodes();if(!(r&&o&&s&&l))return!1;const f=e.getNode(r),m=e.getNode(s);if(!(f&&m&&f.data&&m.data))return!1;const h=f.data.outputs[o],g=m.data.inputs[l];return!h||!g||r===s?!1:t?c.find(b=>{b.target===s&&b.targetHandle===l&&b.source===r&&b.sourceHandle})||c.find(b=>b.target===s&&b.targetHandle===l)&&g.type.name!=="CollectionItemField"||!Bx(h.type,g.type)?!1:f3(r,s,d,c):!0},[e,t])},_c=e=>`var(--invokeai-colors-${e.split(".").join("-")})`,V2=e=>{if(!e)return _c("base.500");const t=uN[e.name];return _c(t||"base.500")},$he=fe(pe,({nodes:e})=>{const{shouldAnimateEdges:t,connectionStartFieldType:n,shouldColorEdges:r}=e,o=r?V2(n):_c("base.500");let s="react-flow__custom_connection-path";return t&&(s=s.concat(" animated")),{stroke:o,className:s}}),Lhe=({fromX:e,fromY:t,fromPosition:n,toX:r,toY:o,toPosition:s})=>{const{stroke:l,className:c}=H($he),d={sourceX:e,sourceY:t,sourcePosition:n,targetX:r,targetY:o,targetPosition:s},[f]=Hx(d);return a.jsx("g",{children:a.jsx("path",{fill:"none",stroke:l,strokeWidth:2,className:c,d:f,style:{opacity:.8}})})},Fhe=i.memo(Lhe),KO=(e,t,n,r,o)=>fe(pe,({nodes:s})=>{var g,b;const l=s.nodes.find(y=>y.id===e),c=s.nodes.find(y=>y.id===n),d=Jt(l)&&Jt(c),f=(l==null?void 0:l.selected)||(c==null?void 0:c.selected)||o,m=d?(b=(g=l==null?void 0:l.data)==null?void 0:g.outputs[t||""])==null?void 0:b.type:void 0,h=m&&s.shouldColorEdges?V2(m):_c("base.500");return{isSelected:f,shouldAnimate:s.shouldAnimateEdges&&f,stroke:h}}),zhe=({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:o,targetPosition:s,markerEnd:l,data:c,selected:d,source:f,target:m,sourceHandleId:h,targetHandleId:g})=>{const b=i.useMemo(()=>KO(f,h,m,g,d),[d,f,h,m,g]),{isSelected:y,shouldAnimate:x}=H(b),[w,S,j]=Hx({sourceX:e,sourceY:t,sourcePosition:o,targetX:n,targetY:r,targetPosition:s}),{base500:_}=hf();return a.jsxs(a.Fragment,{children:[a.jsx(p3,{path:w,markerEnd:l,style:{strokeWidth:y?3:2,stroke:_,opacity:y?.8:.5,animation:x?"dashdraw 0.5s linear infinite":void 0,strokeDasharray:x?5:"none"}}),(c==null?void 0:c.count)&&c.count>1&&a.jsx(dN,{children:a.jsx($,{sx:{position:"absolute",transform:`translate(-50%, -50%) translate(${S}px,${j}px)`},className:"nodrag nopan",children:a.jsx(Sa,{variant:"solid",sx:{bg:"base.500",opacity:y?.8:.5,boxShadow:"base"},children:c.count})})})]})},Bhe=i.memo(zhe),Hhe=({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:o,targetPosition:s,markerEnd:l,selected:c,source:d,target:f,sourceHandleId:m,targetHandleId:h})=>{const g=i.useMemo(()=>KO(d,m,f,h,c),[d,m,f,h,c]),{isSelected:b,shouldAnimate:y,stroke:x}=H(g),[w]=Hx({sourceX:e,sourceY:t,sourcePosition:o,targetX:n,targetY:r,targetPosition:s});return a.jsx(p3,{path:w,markerEnd:l,style:{strokeWidth:b?3:2,stroke:x,opacity:b?.8:.5,animation:y?"dashdraw 0.5s linear infinite":void 0,strokeDasharray:y?5:"none"}})},Whe=i.memo(Hhe),Vhe=e=>{const{nodeId:t,width:n,children:r,selected:o}=e,{isMouseOverNode:s,handleMouseOut:l,handleMouseOver:c}=oO(t),d=i.useMemo(()=>fe(pe,({nodes:j})=>{var _;return((_=j.nodeExecutionStates[t])==null?void 0:_.status)===ta.enum.IN_PROGRESS}),[t]),f=H(d),[m,h,g,b]=Zo("shadows",["nodeInProgress.light","nodeInProgress.dark","shadows.xl","shadows.base"]),y=te(),x=ia(m,h),w=H(j=>j.nodes.nodeOpacity),S=i.useCallback(j=>{!j.ctrlKey&&!j.altKey&&!j.metaKey&&!j.shiftKey&&y(fN(t)),y(m3())},[y,t]);return a.jsxs(Ie,{onClick:S,onMouseEnter:c,onMouseLeave:l,className:Kc,sx:{h:"full",position:"relative",borderRadius:"base",w:n??U1,transitionProperty:"common",transitionDuration:"0.1s",cursor:"grab",opacity:w},children:[a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",pointerEvents:"none",shadow:`${g}, ${b}, ${b}`,zIndex:-1}}),a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"md",pointerEvents:"none",transitionProperty:"common",transitionDuration:"0.1s",opacity:.7,shadow:f?x:void 0,zIndex:-1}}),r,a.jsx(rO,{isSelected:o,isHovered:s})]})},p0=i.memo(Vhe),Uhe=fe(pe,({system:e,gallery:t})=>{var r;return{imageDTO:t.selection[t.selection.length-1],progressImage:(r=e.denoiseProgress)==null?void 0:r.progress_image}}),Ghe=e=>{const{progressImage:t,imageDTO:n}=pN(Uhe);return t?a.jsx(E1,{nodeProps:e,children:a.jsx(Ca,{src:t.dataURL,sx:{w:"full",h:"full",objectFit:"contain",borderRadius:"base"}})}):n?a.jsx(E1,{nodeProps:e,children:a.jsx(fl,{imageDTO:n,isDragDisabled:!0,useThumbailFallback:!0})}):a.jsx(E1,{nodeProps:e,children:a.jsx(Tn,{})})},Khe=i.memo(Ghe),E1=e=>{const[t,n]=i.useState(!1),r=i.useCallback(()=>{n(!0)},[]),o=i.useCallback(()=>{n(!1)},[]),{t:s}=W();return a.jsx(p0,{nodeId:e.nodeProps.id,selected:e.nodeProps.selected,width:384,children:a.jsxs($,{onMouseEnter:r,onMouseLeave:o,className:Kc,sx:{position:"relative",flexDirection:"column"},children:[a.jsx($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",alignItems:"center",justifyContent:"center",h:8},children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",_dark:{color:"base.200"}},children:s("nodes.currentImage")})}),a.jsxs($,{layerStyle:"nodeBody",sx:{w:"full",h:"full",borderBottomRadius:"base",p:2},children:[e.children,t&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:40,left:-2,right:-2,bottom:0,pointerEvents:"none"},children:a.jsx(FO,{})},"nextPrevButtons")]})]})})},U2=e=>{const t=e.filter(o=>!o.ui_hidden),n=t.filter(o=>!na(o.ui_order)).sort((o,s)=>(o.ui_order??0)-(s.ui_order??0)),r=t.filter(o=>na(o.ui_order));return n.concat(r).map(o=>o.name).filter(o=>o!=="is_intermediate")},qhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(c=>c.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];if(!s)return[];const l=Hr(s.inputs).filter(c=>(["any","direct"].includes(c.input)||c.type.isCollectionOrScalar)&&hx(h3).includes(c.type.name));return U2(l)}),[e]);return H(t)},Xhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(c=>c.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];if(!s)return[];const l=Hr(s.inputs).filter(c=>c.input==="connection"&&!c.type.isCollectionOrScalar||!hx(h3).includes(c.type.name));return U2(l)}),[e]);return H(t)},Qhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];return s?U2(Hr(s.outputs)):[]}),[e]);return H(t)},G2=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?Jo(o.data.outputs,s=>s.type.name==="ImageField"&&o.data.type!=="image"):!1}),[e]);return H(t)},Yhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.isIntermediate:!1}),[e]);return H(t)},Zhe=({nodeId:e})=>{const{t}=W(),n=te(),r=G2(e),o=Yhe(e),s=i.useCallback(l=>{n(mN({nodeId:e,isIntermediate:!l.target.checked}))},[n,e]);return r?a.jsxs(Gt,{as:$,sx:{alignItems:"center",gap:2,w:"auto"},children:[a.jsx(ln,{sx:{fontSize:"xs",mb:"1px"},children:t("hotkeys.saveToGallery.title")}),a.jsx(og,{className:"nopan",size:"sm",onChange:s,isChecked:!o})]}):null},Jhe=i.memo(Zhe),ege=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.useCache:!1}),[e]);return H(t)},tge=({nodeId:e})=>{const t=te(),n=ege(e),r=i.useCallback(s=>{t(hN({nodeId:e,useCache:s.target.checked}))},[t,e]),{t:o}=W();return a.jsxs(Gt,{as:$,sx:{alignItems:"center",gap:2,w:"auto"},children:[a.jsx(ln,{sx:{fontSize:"xs",mb:"1px"},children:o("invocationCache.useCache")}),a.jsx(og,{className:"nopan",size:"sm",onChange:r,isChecked:n})]})},nge=i.memo(tge),rge=({nodeId:e})=>{const t=G2(e),n=Mt("invocationCache").isFeatureEnabled;return a.jsxs($,{className:Kc,layerStyle:"nodeFooter",sx:{w:"full",borderBottomRadius:"base",px:2,py:0,h:6,justifyContent:"space-between"},children:[n&&a.jsx(nge,{nodeId:e}),t&&a.jsx(Jhe,{nodeId:e})]})},oge=i.memo(rge),sge=({nodeId:e,isOpen:t})=>{const n=te(),r=gN(),o=i.useCallback(()=>{n(vN({nodeId:e,isOpen:!t})),r(e)},[n,t,e,r]);return a.jsx(Fe,{className:"nodrag",onClick:o,"aria-label":"Minimize",sx:{minW:8,w:8,h:8,color:"base.500",_dark:{color:"base.500"},_hover:{color:"base.700",_dark:{color:"base.300"}}},variant:"link",icon:a.jsx(Kg,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})})},K2=i.memo(sge),age=({nodeId:e,title:t})=>{const n=te(),r=eO(e),o=tO(e),{t:s}=W(),[l,c]=i.useState(""),d=i.useCallback(async m=>{n(qI({nodeId:e,label:m})),c(r||t||o||s("nodes.problemSettingTitle"))},[n,e,t,o,r,s]),f=i.useCallback(m=>{c(m)},[]);return i.useEffect(()=>{c(r||t||o||s("nodes.problemSettingTitle"))},[r,o,t,s]),a.jsx($,{sx:{overflow:"hidden",w:"full",h:"full",alignItems:"center",justifyContent:"center",cursor:"text"},children:a.jsxs(ef,{as:$,value:l,onChange:f,onSubmit:d,sx:{alignItems:"center",position:"relative",w:"full",h:"full"},children:[a.jsx(Jd,{fontSize:"sm",sx:{p:0,w:"full"},noOfLines:1}),a.jsx(Zd,{className:"nodrag",fontSize:"sm",sx:{p:0,fontWeight:700,_focusVisible:{p:0,boxShadow:"none"}}}),a.jsx(lge,{})]})})},qO=i.memo(age);function lge(){const{isEditing:e,getEditButtonProps:t}=K3(),n=i.useCallback(r=>{const{onClick:o}=t();o&&o(r)},[t]);return e?null:a.jsx(Ie,{className:Kc,onDoubleClick:n,sx:{position:"absolute",w:"full",h:"full",top:0,cursor:"grab"}})}const ige=({nodeId:e})=>{const t=A2(e),{base400:n,base600:r}=hf(),o=ia(n,r),s=i.useMemo(()=>({borderWidth:0,borderRadius:"3px",width:"1rem",height:"1rem",backgroundColor:o,zIndex:-1}),[o]);return Im(t)?a.jsxs(a.Fragment,{children:[a.jsx(qu,{type:"target",id:`${t.id}-collapsed-target`,isConnectable:!1,position:rc.Left,style:{...s,left:"-0.5rem"}}),Hr(t.inputs,l=>a.jsx(qu,{type:"target",id:l.name,isConnectable:!1,position:rc.Left,style:{visibility:"hidden"}},`${t.id}-${l.name}-collapsed-input-handle`)),a.jsx(qu,{type:"source",id:`${t.id}-collapsed-source`,isConnectable:!1,position:rc.Right,style:{...s,right:"-0.5rem"}}),Hr(t.outputs,l=>a.jsx(qu,{type:"source",id:l.name,isConnectable:!1,position:rc.Right,style:{visibility:"hidden"}},`${t.id}-${l.name}-collapsed-output-handle`))]}):null},cge=i.memo(ige),uge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);return r.nodeTemplates[(o==null?void 0:o.data.type)??""]}),[e]);return H(t)},dge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e),c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return{node:l,template:c}}),[e]),{node:n,template:r}=H(t);return i.useMemo(()=>Jt(n)&&r?$x(n,r):!1,[n,r])},fge=({nodeId:e})=>{const t=dge(e);return a.jsx(Ut,{label:a.jsx(XO,{nodeId:e}),placement:"top",shouldWrapChildren:!0,children:a.jsx(An,{as:HM,sx:{display:"block",boxSize:4,w:8,color:t?"error.400":"base.400"}})})},pge=i.memo(fge),XO=i.memo(({nodeId:e})=>{const t=A2(e),n=uge(e),{t:r}=W(),o=i.useMemo(()=>t!=null&&t.label&&(n!=null&&n.title)?`${t.label} (${n.title})`:t!=null&&t.label&&!n?t.label:!(t!=null&&t.label)&&n?n.title:r("nodes.unknownNode"),[t,n,r]),s=i.useMemo(()=>!Im(t)||!n?null:t.version?n.version?dS(t.version,n.version,"<")?a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.updateNode"),")"]}):dS(t.version,n.version,">")?a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.updateApp"),")"]}):a.jsxs(be,{as:"span",children:[r("nodes.version")," ",t.version]}):a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.unknownTemplate"),")"]}):a.jsx(be,{as:"span",sx:{color:"error.500"},children:r("nodes.versionUnknown")}),[t,n,r]);return Im(t)?a.jsxs($,{sx:{flexDir:"column"},children:[a.jsx(be,{as:"span",sx:{fontWeight:600},children:o}),(n==null?void 0:n.nodePack)&&a.jsxs(be,{opacity:.7,children:[r("nodes.nodePack"),": ",n.nodePack]}),a.jsx(be,{sx:{opacity:.7,fontStyle:"oblique 5deg"},children:n==null?void 0:n.description}),s,(t==null?void 0:t.notes)&&a.jsx(be,{children:t.notes})]}):a.jsx(be,{sx:{fontWeight:600},children:r("nodes.unknownNode")})});XO.displayName="TooltipContent";const M1=3,G_={circle:{transitionProperty:"none",transitionDuration:"0s"},".chakra-progress__track":{stroke:"transparent"}},mge=({nodeId:e})=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>r.nodeExecutionStates[e]),[e]),n=H(t);return n?a.jsx(Ut,{label:a.jsx(QO,{nodeExecutionState:n}),placement:"top",children:a.jsx($,{className:Kc,sx:{w:5,h:"full",alignItems:"center",justifyContent:"flex-end"},children:a.jsx(YO,{nodeExecutionState:n})})}):null},hge=i.memo(mge),QO=i.memo(({nodeExecutionState:e})=>{const{status:t,progress:n,progressImage:r}=e,{t:o}=W();return t===ta.enum.PENDING?a.jsx(be,{children:o("queue.pending")}):t===ta.enum.IN_PROGRESS?r?a.jsxs($,{sx:{pos:"relative",pt:1.5,pb:.5},children:[a.jsx(Ca,{src:r.dataURL,sx:{w:32,h:32,borderRadius:"base",objectFit:"contain"}}),n!==null&&a.jsxs(Sa,{variant:"solid",sx:{pos:"absolute",top:2.5,insetInlineEnd:1},children:[Math.round(n*100),"%"]})]}):n!==null?a.jsxs(be,{children:[o("nodes.executionStateInProgress")," (",Math.round(n*100),"%)"]}):a.jsx(be,{children:o("nodes.executionStateInProgress")}):t===ta.enum.COMPLETED?a.jsx(be,{children:o("nodes.executionStateCompleted")}):t===ta.enum.FAILED?a.jsx(be,{children:o("nodes.executionStateError")}):null});QO.displayName="TooltipLabel";const YO=i.memo(e=>{const{progress:t,status:n}=e.nodeExecutionState;return n===ta.enum.PENDING?a.jsx(An,{as:wte,sx:{boxSize:M1,color:"base.600",_dark:{color:"base.300"}}}):n===ta.enum.IN_PROGRESS?t===null?a.jsx(hb,{isIndeterminate:!0,size:"14px",color:"base.500",thickness:14,sx:G_}):a.jsx(hb,{value:Math.round(t*100),size:"14px",color:"base.500",thickness:14,sx:G_}):n===ta.enum.COMPLETED?a.jsx(An,{as:$M,sx:{boxSize:M1,color:"ok.600",_dark:{color:"ok.300"}}}):n===ta.enum.FAILED?a.jsx(An,{as:_te,sx:{boxSize:M1,color:"error.600",_dark:{color:"error.300"}}}):null});YO.displayName="StatusIcon";const gge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return!1;const s=r.nodeTemplates[(o==null?void 0:o.data.type)??""];return s==null?void 0:s.classification}),[e]);return H(t)},vge=({nodeId:e})=>{const t=gge(e);return!t||t==="stable"?null:a.jsx(Ut,{label:a.jsx(ZO,{classification:t}),placement:"top",shouldWrapChildren:!0,children:a.jsx(An,{as:xge(t),sx:{display:"block",boxSize:4,color:"base.400"}})})},bge=i.memo(vge),ZO=i.memo(({classification:e})=>{const{t}=W();return e==="beta"?t("nodes.betaDesc"):e==="prototype"?t("nodes.prototypeDesc"):null});ZO.displayName="ClassificationTooltipContent";const xge=e=>{if(e==="beta")return iae;if(e==="prototype")return Ote},yge=({nodeId:e,isOpen:t})=>a.jsxs($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:t?0:"base",alignItems:"center",justifyContent:"space-between",h:8,textAlign:"center",fontWeight:500,color:"base.700",_dark:{color:"base.200"}},children:[a.jsx(K2,{nodeId:e,isOpen:t}),a.jsx(bge,{nodeId:e}),a.jsx(qO,{nodeId:e}),a.jsxs($,{alignItems:"center",children:[a.jsx(hge,{nodeId:e}),a.jsx(pge,{nodeId:e})]}),!t&&a.jsx(cge,{nodeId:e})]}),Cge=i.memo(yge),wge=(e,t,n,r)=>fe(pe,o=>{if(!r)return wt.t("nodes.noFieldType");const{connectionStartFieldType:s,connectionStartParams:l,nodes:c,edges:d}=o.nodes;if(!l||!s)return wt.t("nodes.noConnectionInProgress");const{handleType:f,nodeId:m,handleId:h}=l;if(!f||!m||!h)return wt.t("nodes.noConnectionData");const g=n==="target"?r:s,b=n==="source"?r:s;if(e===m)return wt.t("nodes.cannotConnectToSelf");if(n===f)return n==="source"?wt.t("nodes.cannotConnectOutputToOutput"):wt.t("nodes.cannotConnectInputToInput");const y=n==="target"?e:m,x=n==="target"?t:h,w=n==="source"?e:m,S=n==="source"?t:h;if(d.find(_=>{_.target===y&&_.targetHandle===x&&_.source===w&&_.sourceHandle}))return wt.t("nodes.cannotDuplicateConnection");if(d.find(_=>_.target===y&&_.targetHandle===x)&&g.name!=="CollectionItemField")return wt.t("nodes.inputMayOnlyHaveOneConnection");if(!Bx(b,g))return wt.t("nodes.fieldTypesMustMatch");if(!f3(f==="source"?m:e,f==="source"?e:m,c,d))return wt.t("nodes.connectionWouldCreateCycle")}),Sge=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e);if(!Jt(l))return;const c=l.data[Lx[n]][t];return c==null?void 0:c.type}),[t,n,e]);return H(r)},kge=fe(pe,({nodes:e})=>e.connectionStartFieldType!==null&&e.connectionStartParams!==null),JO=({nodeId:e,fieldName:t,kind:n})=>{const r=Sge(e,t,n),o=i.useMemo(()=>fe(pe,({nodes:g})=>!!g.edges.filter(b=>(n==="input"?b.target:b.source)===e&&(n==="input"?b.targetHandle:b.sourceHandle)===t).length),[t,n,e]),s=i.useMemo(()=>wge(e,t,n==="input"?"target":"source",r),[e,t,n,r]),l=i.useMemo(()=>fe(pe,({nodes:g})=>{var b,y,x;return((b=g.connectionStartParams)==null?void 0:b.nodeId)===e&&((y=g.connectionStartParams)==null?void 0:y.handleId)===t&&((x=g.connectionStartParams)==null?void 0:x.handleType)==={input:"target",output:"source"}[n]}),[t,n,e]),c=H(o),d=H(kge),f=H(l),m=H(s),h=i.useMemo(()=>!!(d&&m&&!f),[m,d,f]);return{isConnected:c,isConnectionInProgress:d,isConnectionStartField:f,connectionError:m,shouldDim:h}},jge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{var l;const s=o.nodes.find(c=>c.id===e);if(Jt(s))return((l=s==null?void 0:s.data.inputs[t])==null?void 0:l.value)!==void 0}),[t,e]);return H(n)},_ge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s.data.inputs[t]}),[t,e]);return H(n)},Ige=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(c=>c.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""];return l==null?void 0:l.inputs[t]}),[t,e]);return H(n)},Pge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(d=>d.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""],c=l==null?void 0:l.inputs[t];return c==null?void 0:c.input}),[t,e]);return H(n)},Ege=({nodeId:e,fieldName:t,kind:n,children:r})=>{const o=te(),s=sO(e,t),l=aO(e,t,n),c=Pge(e,t),{t:d}=W(),f=i.useCallback(S=>{S.preventDefault()},[]),m=i.useMemo(()=>fe(pe,({workflow:S})=>({isExposed:!!S.exposedFields.find(_=>_.nodeId===e&&_.fieldName===t)})),[t,e]),h=i.useMemo(()=>c&&["any","direct"].includes(c),[c]),{isExposed:g}=H(m),b=i.useCallback(()=>{o(bN({nodeId:e,fieldName:t}))},[o,t,e]),y=i.useCallback(()=>{o(ZI({nodeId:e,fieldName:t}))},[o,t,e]),x=i.useMemo(()=>{const S=[];return h&&!g&&S.push(a.jsx(At,{icon:a.jsx(nl,{}),onClick:b,children:d("nodes.addLinearView")},`${e}.${t}.expose-field`)),h&&g&&S.push(a.jsx(At,{icon:a.jsx(Fte,{}),onClick:y,children:d("nodes.removeLinearView")},`${e}.${t}.unexpose-field`)),S},[t,b,y,g,h,e,d]),w=i.useCallback(()=>x.length?a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:f,children:a.jsx(_d,{title:s||l||d("nodes.unknownField"),children:x})}):null,[l,s,x,f,d]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:w,children:r})},Mge=i.memo(Ege),Oge=e=>{const{fieldTemplate:t,handleType:n,isConnectionInProgress:r,isConnectionStartField:o,connectionError:s}=e,{name:l}=t,c=t.type,d=cO(c),f=i.useMemo(()=>{const h=xN.some(y=>y===c.name),g=V2(c),b={backgroundColor:c.isCollection||c.isCollectionOrScalar?_c("base.900"):g,position:"absolute",width:"1rem",height:"1rem",borderWidth:c.isCollection||c.isCollectionOrScalar?4:0,borderStyle:"solid",borderColor:g,borderRadius:h?4:"100%",zIndex:1};return n==="target"?b.insetInlineStart="-1rem":b.insetInlineEnd="-1rem",r&&!o&&s&&(b.filter="opacity(0.4) grayscale(0.7)"),r&&s?o?b.cursor="grab":b.cursor="not-allowed":b.cursor="crosshair",b},[s,n,r,o,c]),m=i.useMemo(()=>r&&s?s:d,[s,d,r]);return a.jsx(Ut,{label:m,placement:n==="target"?"start":"end",hasArrow:!0,openDelay:Zh,children:a.jsx(qu,{type:n,id:l,position:n==="target"?rc.Left:rc.Right,style:f})})},eD=i.memo(Oge),Dge=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=Ige(e,t),o=_ge(e,t),s=jge(e,t),{isConnected:l,isConnectionInProgress:c,isConnectionStartField:d,connectionError:f,shouldDim:m}=JO({nodeId:e,fieldName:t,kind:"input"}),h=i.useMemo(()=>{if(!r||!r.required)return!1;if(!l&&r.input==="connection"||!s&&!l&&r.input==="any")return!0},[r,l,s]);return!r||!o?a.jsx(cx,{shouldDim:m,children:a.jsx(Gt,{sx:{alignItems:"stretch",justifyContent:"space-between",gap:2,h:"full",w:"full"},children:a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownInput",{name:(o==null?void 0:o.label)??(r==null?void 0:r.title)??t})})})}):a.jsxs(cx,{shouldDim:m,children:[a.jsxs(Gt,{isInvalid:h,isDisabled:l,sx:{alignItems:"stretch",justifyContent:"space-between",ps:r.input==="direct"?0:2,gap:2,h:"full",w:"full"},children:[a.jsx(Mge,{nodeId:e,fieldName:t,kind:"input",children:g=>a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full"},children:a.jsx(uO,{ref:g,nodeId:e,fieldName:t,kind:"input",isMissingInput:h,withTooltip:!0})})}),a.jsx(Ie,{children:a.jsx(yO,{nodeId:e,fieldName:t})})]}),r.input!=="direct"&&a.jsx(eD,{fieldTemplate:r,handleType:"target",isConnectionInProgress:c,isConnectionStartField:d,connectionError:f})]})},K_=i.memo(Dge),cx=i.memo(({shouldDim:e,children:t})=>a.jsx($,{sx:{position:"relative",minH:8,py:.5,alignItems:"center",opacity:e?.5:1,transitionProperty:"opacity",transitionDuration:"0.1s",w:"full",h:"full"},children:t}));cx.displayName="InputFieldWrapper";const Rge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s.data.outputs[t]}),[t,e]);return H(n)},Age=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(c=>c.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""];return l==null?void 0:l.outputs[t]}),[t,e]);return H(n)},Tge=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=Age(e,t),o=Rge(e,t),{isConnected:s,isConnectionInProgress:l,isConnectionStartField:c,connectionError:d,shouldDim:f}=JO({nodeId:e,fieldName:t,kind:"output"});return!r||!o?a.jsx(ux,{shouldDim:f,children:a.jsx(Gt,{sx:{alignItems:"stretch",justifyContent:"space-between",gap:2,h:"full",w:"full"},children:a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownOutput",{name:(r==null?void 0:r.title)??t})})})}):a.jsxs(ux,{shouldDim:f,children:[a.jsx(Ut,{label:a.jsx(T2,{nodeId:e,fieldName:t,kind:"output"}),openDelay:Zh,placement:"top",shouldWrapChildren:!0,hasArrow:!0,children:a.jsx(Gt,{isDisabled:s,pe:2,children:a.jsx(ln,{sx:{mb:0,fontWeight:500},children:r==null?void 0:r.title})})}),a.jsx(eD,{fieldTemplate:r,handleType:"source",isConnectionInProgress:l,isConnectionStartField:c,connectionError:d})]})},Nge=i.memo(Tge),ux=i.memo(({shouldDim:e,children:t})=>a.jsx($,{sx:{position:"relative",minH:8,py:.5,alignItems:"center",opacity:e?.5:1,transitionProperty:"opacity",transitionDuration:"0.1s",justifyContent:"flex-end"},children:t}));ux.displayName="OutputFieldWrapper";const $ge=e=>{const t=G2(e),n=Mt("invocationCache").isFeatureEnabled;return i.useMemo(()=>t||n,[t,n])},Lge=({nodeId:e,isOpen:t,label:n,type:r,selected:o})=>{const s=Xhe(e),l=qhe(e),c=$ge(e),d=Qhe(e);return a.jsxs(p0,{nodeId:e,selected:o,children:[a.jsx(Cge,{nodeId:e,isOpen:t,label:n,selected:o,type:r}),t&&a.jsxs(a.Fragment,{children:[a.jsx($,{layerStyle:"nodeBody",sx:{flexDirection:"column",w:"full",h:"full",py:2,gap:1,borderBottomRadius:c?0:"base"},children:a.jsxs($,{sx:{flexDir:"column",px:2,w:"full",h:"full"},children:[a.jsxs(sl,{gridTemplateColumns:"1fr auto",gridAutoRows:"1fr",children:[s.map((f,m)=>a.jsx(Sd,{gridColumnStart:1,gridRowStart:m+1,children:a.jsx(K_,{nodeId:e,fieldName:f})},`${e}.${f}.input-field`)),d.map((f,m)=>a.jsx(Sd,{gridColumnStart:2,gridRowStart:m+1,children:a.jsx(Nge,{nodeId:e,fieldName:f})},`${e}.${f}.output-field`))]}),l.map(f=>a.jsx(K_,{nodeId:e,fieldName:f},`${e}.${f}.input-field`))]})}),c&&a.jsx(oge,{nodeId:e})]})]})},Fge=i.memo(Lge),zge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.nodePack:!1}),[e]);return H(t)},Bge=({nodeId:e,isOpen:t,label:n,type:r,selected:o})=>{const{t:s}=W(),l=zge(e);return a.jsxs(p0,{nodeId:e,selected:o,children:[a.jsxs($,{className:Kc,layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:t?0:"base",alignItems:"center",h:8,fontWeight:600,fontSize:"sm"},children:[a.jsx(K2,{nodeId:e,isOpen:t}),a.jsx(be,{sx:{w:"full",textAlign:"center",pe:8,color:"error.500",_dark:{color:"error.300"}},children:n?`${n} (${r})`:r})]}),t&&a.jsx($,{layerStyle:"nodeBody",sx:{userSelect:"auto",flexDirection:"column",w:"full",h:"full",p:4,gap:1,borderBottomRadius:"base",fontSize:"sm"},children:a.jsxs($,{gap:2,flexDir:"column",children:[a.jsxs(be,{as:"span",children:[s("nodes.unknownNodeType"),":"," ",a.jsx(be,{as:"span",fontWeight:600,children:r})]}),l&&a.jsxs(be,{as:"span",children:[s("nodes.nodePack"),":"," ",a.jsx(be,{as:"span",fontWeight:600,children:l})]})]})})]})},Hge=i.memo(Bge),Wge=e=>{const{data:t,selected:n}=e,{id:r,type:o,isOpen:s,label:l}=t,c=i.useMemo(()=>fe(pe,({nodes:f})=>!!f.nodeTemplates[o]),[o]);return H(c)?a.jsx(Fge,{nodeId:r,isOpen:s,label:l,type:o,selected:n}):a.jsx(Hge,{nodeId:r,isOpen:s,label:l,type:o,selected:n})},Vge=i.memo(Wge),Uge=e=>{const{id:t,data:n,selected:r}=e,{notes:o,isOpen:s}=n,l=te(),c=i.useCallback(d=>{l(yN({nodeId:t,value:d.target.value}))},[l,t]);return a.jsxs(p0,{nodeId:t,selected:r,children:[a.jsxs($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:s?0:"base",alignItems:"center",justifyContent:"space-between",h:8},children:[a.jsx(K2,{nodeId:t,isOpen:s}),a.jsx(qO,{nodeId:t,title:"Notes"}),a.jsx(Ie,{minW:8})]}),s&&a.jsx(a.Fragment,{children:a.jsx($,{layerStyle:"nodeBody",className:"nopan",sx:{cursor:"auto",flexDirection:"column",borderBottomRadius:"base",w:"full",h:"full",p:2,gap:1},children:a.jsx($,{className:"nopan",sx:{flexDir:"column",w:"full",h:"full"},children:a.jsx(ga,{value:o,onChange:c,rows:8,resize:"none",sx:{fontSize:"xs"}})})})})]})},Gge=i.memo(Uge),Kge=["Delete","Backspace"],qge={collapsed:Bhe,default:Whe},Xge={invocation:Vge,current_image:Khe,notes:Gge},Qge={hideAttribution:!0},Yge=fe(pe,({nodes:e})=>{const{shouldSnapToGrid:t,selectionMode:n}=e;return{shouldSnapToGrid:t,selectionMode:n}}),Zge=()=>{const e=te(),t=H(O=>O.nodes.nodes),n=H(O=>O.nodes.edges),r=H(O=>O.nodes.viewport),{shouldSnapToGrid:o,selectionMode:s}=H(Yge),l=i.useRef(null),c=i.useRef(),d=Nhe(),[f]=Zo("radii",["base"]),m=i.useCallback(O=>{e(CN(O))},[e]),h=i.useCallback(O=>{e(wN(O))},[e]),g=i.useCallback((O,T)=>{e(SN(T))},[e]),b=i.useCallback(O=>{e(fS(O))},[e]),y=i.useCallback(()=>{e(kN({cursorPosition:c.current}))},[e]),x=i.useCallback(O=>{e(jN(O))},[e]),w=i.useCallback(O=>{e(_N(O))},[e]),S=i.useCallback(({nodes:O,edges:T})=>{e(IN(O?O.map(U=>U.id):[])),e(PN(T?T.map(U=>U.id):[]))},[e]),j=i.useCallback((O,T)=>{e(EN(T))},[e]),_=i.useCallback(()=>{e(m3())},[e]),I=i.useCallback(O=>{pS.set(O),O.fitView()},[]),E=i.useCallback(O=>{var U,G;const T=(U=l.current)==null?void 0:U.getBoundingClientRect();if(T){const q=(G=pS.get())==null?void 0:G.project({x:O.clientX-T.left,y:O.clientY-T.top});c.current=q}},[]),M=i.useRef(),D=i.useCallback((O,T,U)=>{M.current=O,e(MN(T.id)),e(ON())},[e]),R=i.useCallback((O,T)=>{e(fS(T))},[e]),N=i.useCallback((O,T,U)=>{var G,q;!("touches"in O)&&((G=M.current)==null?void 0:G.clientX)===O.clientX&&((q=M.current)==null?void 0:q.clientY)===O.clientY&&e(DN(T)),M.current=void 0},[e]);return tt(["Ctrl+c","Meta+c"],O=>{O.preventDefault(),e(RN())}),tt(["Ctrl+a","Meta+a"],O=>{O.preventDefault(),e(AN())}),tt(["Ctrl+v","Meta+v"],O=>{O.preventDefault(),e(TN({cursorPosition:c.current}))}),a.jsx(NN,{id:"workflow-editor",ref:l,defaultViewport:r,nodeTypes:Xge,edgeTypes:qge,nodes:t,edges:n,onInit:I,onMouseMove:E,onNodesChange:m,onEdgesChange:h,onEdgesDelete:x,onEdgeUpdate:R,onEdgeUpdateStart:D,onEdgeUpdateEnd:N,onNodesDelete:w,onConnectStart:g,onConnect:b,onConnectEnd:y,onMoveEnd:j,connectionLineComponent:Fhe,onSelectionChange:S,isValidConnection:d,minZoom:.1,snapToGrid:o,snapGrid:[25,25],connectionRadius:30,proOptions:Qge,style:{borderRadius:f},onPaneClick:_,deleteKeyCode:Kge,selectionMode:s,children:a.jsx($L,{})})};function Jge(){const e=te(),t=H(o=>o.nodes.nodeOpacity),{t:n}=W(),r=i.useCallback(o=>{e($N(o))},[e]);return a.jsx($,{alignItems:"center",children:a.jsxs(Sy,{"aria-label":n("nodes.nodeOpacity"),value:t,min:.5,max:1,step:.01,onChange:r,orientation:"vertical",defaultValue:30,h:"calc(100% - 0.5rem)",children:[a.jsx(jy,{children:a.jsx(_y,{})}),a.jsx(ky,{})]})})}const e0e=()=>{const{t:e}=W(),{zoomIn:t,zoomOut:n,fitView:r}=zx(),o=te(),s=H(m=>m.nodes.shouldShowMinimapPanel),l=i.useCallback(()=>{t()},[t]),c=i.useCallback(()=>{n()},[n]),d=i.useCallback(()=>{r()},[r]),f=i.useCallback(()=>{o(LN(!s))},[s,o]);return a.jsxs($t,{isAttached:!0,orientation:"vertical",children:[a.jsx(Fe,{tooltip:e("nodes.zoomInNodes"),"aria-label":e("nodes.zoomInNodes"),onClick:l,icon:a.jsx(uae,{})}),a.jsx(Fe,{tooltip:e("nodes.zoomOutNodes"),"aria-label":e("nodes.zoomOutNodes"),onClick:c,icon:a.jsx(cae,{})}),a.jsx(Fe,{tooltip:e("nodes.fitViewportNodes"),"aria-label":e("nodes.fitViewportNodes"),onClick:d,icon:a.jsx(zM,{})}),a.jsx(Fe,{tooltip:e(s?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),"aria-label":e(s?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),isChecked:s,onClick:f,icon:a.jsx(Lte,{})})]})},t0e=i.memo(e0e),n0e=()=>a.jsxs($,{sx:{gap:2,position:"absolute",bottom:2,insetInlineStart:2},children:[a.jsx(t0e,{}),a.jsx(Jge,{})]}),r0e=i.memo(n0e),o0e=je(OL),s0e=()=>{const e=H(r=>r.nodes.shouldShowMinimapPanel),t=ia("var(--invokeai-colors-accent-300)","var(--invokeai-colors-accent-600)"),n=ia("var(--invokeai-colors-blackAlpha-300)","var(--invokeai-colors-blackAlpha-600)");return a.jsx($,{sx:{gap:2,position:"absolute",bottom:2,insetInlineEnd:2},children:e&&a.jsx(o0e,{pannable:!0,zoomable:!0,nodeBorderRadius:15,sx:{m:"0 !important",backgroundColor:"base.200 !important",borderRadius:"base",_dark:{backgroundColor:"base.500 !important"},svg:{borderRadius:"inherit"}},nodeColor:t,maskColor:n})})},a0e=i.memo(s0e),l0e=()=>{const e=te(),{t}=W(),n=i.useCallback(()=>{e(d3())},[e]);return a.jsx(Fe,{tooltip:t("nodes.addNodeToolTip"),"aria-label":t("nodes.addNode"),icon:a.jsx(nl,{}),onClick:n,pointerEvents:"auto"})},i0e=i.memo(l0e),c0e=fe(pe,e=>{const t=e.nodes.nodes,n=e.nodes.nodeTemplates;return t.filter(Jt).some(o=>{const s=n[o.data.type];return s?$x(o,s):!1})}),u0e=()=>H(c0e),d0e=()=>{const e=te(),{t}=W(),n=u0e(),r=i.useCallback(()=>{e(FN())},[e]);return n?a.jsx(Xe,{leftIcon:a.jsx(jte,{}),onClick:r,pointerEvents:"auto",children:t("nodes.updateAllNodes")}):null},f0e=i.memo(d0e),p0e=()=>{const{t:e}=W(),t=H(o=>o.workflow.name),n=H(o=>o.workflow.isTouched),r=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs(be,{m:2,fontSize:"lg",userSelect:"none",noOfLines:1,wordBreak:"break-all",fontWeight:600,opacity:.8,children:[t||e("workflows.unnamedWorkflow"),n&&r?` (${e("common.unsaved")})`:""]})},m0e=i.memo(p0e),tD=i.createContext(null);var h0e=/d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|W{1,2}|[LlopSZN]|"[^"]*"|'[^']*'/g,g0e=/\b(?:[A-Z]{1,3}[A-Z][TC])(?:[-+]\d{4})?|((?:Australian )?(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time)\b/g,v0e=/[^-+\dA-Z]/g;function nm(e,t,n,r){if(arguments.length===1&&typeof e=="string"&&!/\d/.test(e)&&(t=e,e=void 0),e=e||e===0?e:new Date,e instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");t=String(cc[t]||t||cc.default);var o=t.slice(0,4);(o==="UTC:"||o==="GMT:")&&(t=t.slice(4),n=!0,o==="GMT:"&&(r=!0));var s=function(){return n?"getUTC":"get"},l=function(){return e[s()+"Date"]()},c=function(){return e[s()+"Day"]()},d=function(){return e[s()+"Month"]()},f=function(){return e[s()+"FullYear"]()},m=function(){return e[s()+"Hours"]()},h=function(){return e[s()+"Minutes"]()},g=function(){return e[s()+"Seconds"]()},b=function(){return e[s()+"Milliseconds"]()},y=function(){return n?0:e.getTimezoneOffset()},x=function(){return b0e(e)},w=function(){return x0e(e)},S={d:function(){return l()},dd:function(){return Yr(l())},ddd:function(){return Rr.dayNames[c()]},DDD:function(){return q_({y:f(),m:d(),d:l(),_:s(),dayName:Rr.dayNames[c()],short:!0})},dddd:function(){return Rr.dayNames[c()+7]},DDDD:function(){return q_({y:f(),m:d(),d:l(),_:s(),dayName:Rr.dayNames[c()+7]})},m:function(){return d()+1},mm:function(){return Yr(d()+1)},mmm:function(){return Rr.monthNames[d()]},mmmm:function(){return Rr.monthNames[d()+12]},yy:function(){return String(f()).slice(2)},yyyy:function(){return Yr(f(),4)},h:function(){return m()%12||12},hh:function(){return Yr(m()%12||12)},H:function(){return m()},HH:function(){return Yr(m())},M:function(){return h()},MM:function(){return Yr(h())},s:function(){return g()},ss:function(){return Yr(g())},l:function(){return Yr(b(),3)},L:function(){return Yr(Math.floor(b()/10))},t:function(){return m()<12?Rr.timeNames[0]:Rr.timeNames[1]},tt:function(){return m()<12?Rr.timeNames[2]:Rr.timeNames[3]},T:function(){return m()<12?Rr.timeNames[4]:Rr.timeNames[5]},TT:function(){return m()<12?Rr.timeNames[6]:Rr.timeNames[7]},Z:function(){return r?"GMT":n?"UTC":y0e(e)},o:function(){return(y()>0?"-":"+")+Yr(Math.floor(Math.abs(y())/60)*100+Math.abs(y())%60,4)},p:function(){return(y()>0?"-":"+")+Yr(Math.floor(Math.abs(y())/60),2)+":"+Yr(Math.floor(Math.abs(y())%60),2)},S:function(){return["th","st","nd","rd"][l()%10>3?0:(l()%100-l()%10!=10)*l()%10]},W:function(){return x()},WW:function(){return Yr(x())},N:function(){return w()}};return t.replace(h0e,function(j){return j in S?S[j]():j.slice(1,j.length-1)})}var cc={default:"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",paddedShortDate:"mm/dd/yyyy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},Rr={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],timeNames:["a","p","am","pm","A","P","AM","PM"]},Yr=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return String(t).padStart(n,"0")},q_=function(t){var n=t.y,r=t.m,o=t.d,s=t._,l=t.dayName,c=t.short,d=c===void 0?!1:c,f=new Date,m=new Date;m.setDate(m[s+"Date"]()-1);var h=new Date;h.setDate(h[s+"Date"]()+1);var g=function(){return f[s+"Date"]()},b=function(){return f[s+"Month"]()},y=function(){return f[s+"FullYear"]()},x=function(){return m[s+"Date"]()},w=function(){return m[s+"Month"]()},S=function(){return m[s+"FullYear"]()},j=function(){return h[s+"Date"]()},_=function(){return h[s+"Month"]()},I=function(){return h[s+"FullYear"]()};return y()===n&&b()===r&&g()===o?d?"Tdy":"Today":S()===n&&w()===r&&x()===o?d?"Ysd":"Yesterday":I()===n&&_()===r&&j()===o?d?"Tmw":"Tomorrow":l},b0e=function(t){var n=new Date(t.getFullYear(),t.getMonth(),t.getDate());n.setDate(n.getDate()-(n.getDay()+6)%7+3);var r=new Date(n.getFullYear(),0,4);r.setDate(r.getDate()-(r.getDay()+6)%7+3);var o=n.getTimezoneOffset()-r.getTimezoneOffset();n.setHours(n.getHours()-o);var s=(n-r)/(864e5*7);return 1+Math.floor(s)},x0e=function(t){var n=t.getDay();return n===0&&(n=7),n},y0e=function(t){return(String(t).match(g0e)||[""]).pop().replace(v0e,"").replace(/GMT\+0000/g,"UTC")};const nD=zN.injectEndpoints({endpoints:e=>({getWorkflow:e.query({query:t=>`workflows/i/${t}`,providesTags:(t,n,r)=>[{type:"Workflow",id:r}],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:o}=n;try{await o,r(nD.util.invalidateTags([{type:"WorkflowsRecent",id:Fa}]))}catch{}}}),deleteWorkflow:e.mutation({query:t=>({url:`workflows/i/${t}`,method:"DELETE"}),invalidatesTags:(t,n,r)=>[{type:"Workflow",id:Fa},{type:"Workflow",id:r},{type:"WorkflowsRecent",id:Fa}]}),createWorkflow:e.mutation({query:t=>({url:"workflows/",method:"POST",body:{workflow:t}}),invalidatesTags:[{type:"Workflow",id:Fa},{type:"WorkflowsRecent",id:Fa}]}),updateWorkflow:e.mutation({query:t=>({url:`workflows/i/${t.id}`,method:"PATCH",body:{workflow:t}}),invalidatesTags:(t,n,r)=>[{type:"WorkflowsRecent",id:Fa},{type:"Workflow",id:Fa},{type:"Workflow",id:r.id}]}),listWorkflows:e.query({query:t=>({url:"workflows/",params:t}),providesTags:[{type:"Workflow",id:Fa}]})})}),{useLazyGetWorkflowQuery:C0e,useCreateWorkflowMutation:rD,useDeleteWorkflowMutation:w0e,useUpdateWorkflowMutation:S0e,useListWorkflowsQuery:k0e}=nD,j0e=({onSuccess:e,onError:t})=>{const n=zs(),{t:r}=W(),[o,s]=w0e();return{deleteWorkflow:i.useCallback(async c=>{try{await o(c).unwrap(),n({title:r("toast.workflowDeleted")}),e&&e()}catch{n({title:r("toast.problemDeletingWorkflow"),status:"error"}),t&&t()}},[o,n,r,e,t]),deleteWorkflowResult:s}},_0e=({onSuccess:e,onError:t})=>{const n=te(),r=zs(),{t:o}=W(),[s,l]=C0e();return{getAndLoadWorkflow:i.useCallback(async d=>{try{const f=await s(d).unwrap();n(Dx({workflow:f.workflow,asCopy:!1})),e&&e()}catch{r({title:o("toast.problemRetrievingWorkflow"),status:"error"}),t&&t()}},[s,n,e,r,o,t]),getAndLoadWorkflowResult:l}},oD=()=>{const e=i.useContext(tD);if(!e)throw new Error("useWorkflowLibraryContext must be used within a WorkflowLibraryContext.Provider");return e},I0e=({workflowDTO:e})=>{const{t}=W(),n=H(h=>h.workflow.id),{onClose:r}=oD(),{deleteWorkflow:o,deleteWorkflowResult:s}=j0e({}),{getAndLoadWorkflow:l,getAndLoadWorkflowResult:c}=_0e({onSuccess:r}),d=i.useCallback(()=>{o(e.workflow_id)},[o,e.workflow_id]),f=i.useCallback(()=>{l(e.workflow_id)},[l,e.workflow_id]),m=i.useMemo(()=>n===e.workflow_id,[n,e.workflow_id]);return a.jsx($,{w:"full",children:a.jsxs($,{w:"full",alignItems:"center",gap:2,h:12,children:[a.jsxs($,{flexDir:"column",flexGrow:1,h:"full",children:[a.jsxs($,{alignItems:"center",w:"full",h:"50%",children:[a.jsx(or,{size:"sm",variant:m?"accent":void 0,children:e.name||t("workflows.unnamedWorkflow")}),a.jsx(Wr,{}),e.category==="user"&&a.jsxs(be,{fontSize:"sm",variant:"subtext",children:[t("common.updated"),":"," ",nm(e.updated_at,cc.shortDate)," ",nm(e.updated_at,cc.shortTime)]})]}),a.jsxs($,{alignItems:"center",w:"full",h:"50%",children:[e.description?a.jsx(be,{fontSize:"sm",noOfLines:1,children:e.description}):a.jsx(be,{fontSize:"sm",variant:"subtext",fontStyle:"italic",noOfLines:1,children:t("workflows.noDescription")}),a.jsx(Wr,{}),e.category==="user"&&a.jsxs(be,{fontSize:"sm",variant:"subtext",children:[t("common.created"),":"," ",nm(e.created_at,cc.shortDate)," ",nm(e.created_at,cc.shortTime)]})]})]}),a.jsx(Xe,{isDisabled:m,onClick:f,isLoading:c.isLoading,"aria-label":t("workflows.openWorkflow"),children:t("common.load")}),e.category==="user"&&a.jsx(Xe,{colorScheme:"error",isDisabled:m,onClick:d,isLoading:s.isLoading,"aria-label":t("workflows.deleteWorkflow"),children:t("common.delete")})]})},e.workflow_id)},P0e=i.memo(I0e),Nl=7,E0e=({page:e,setPage:t,data:n})=>{const{t:r}=W(),o=i.useCallback(()=>{t(c=>Math.max(c-1,0))},[t]),s=i.useCallback(()=>{t(c=>Math.min(c+1,n.pages-1))},[n.pages,t]),l=i.useMemo(()=>{const c=[];let d=n.pages>Nl?Math.max(0,e-Math.floor(Nl/2)):0;const f=n.pages>Nl?Math.min(n.pages,d+Nl):n.pages;f-dNl&&(d=f-Nl);for(let m=d;mt(m)});return c},[n.pages,e,t]);return a.jsxs($t,{children:[a.jsx(Fe,{variant:"ghost",onClick:o,isDisabled:e===0,"aria-label":r("common.prevPage"),icon:a.jsx(gte,{})}),l.map(c=>a.jsx(Xe,{w:10,isDisabled:n.pages===1,onClick:c.page===e?void 0:c.onClick,variant:c.page===e?"invokeAI":"ghost",transitionDuration:"0s",children:c.page+1},c.page)),a.jsx(Fe,{variant:"ghost",onClick:s,isDisabled:e===n.pages-1,"aria-label":r("common.nextPage"),icon:a.jsx(vte,{})})]})},M0e=i.memo(E0e),X_=10,O0e=[{value:"opened_at",label:"Opened"},{value:"created_at",label:"Created"},{value:"updated_at",label:"Updated"},{value:"name",label:"Name"}],D0e=[{value:"ASC",label:"Ascending"},{value:"DESC",label:"Descending"}],R0e=()=>{const{t:e}=W(),[t,n]=i.useState("user"),[r,o]=i.useState(0),[s,l]=i.useState(""),[c,d]=i.useState("opened_at"),[f,m]=i.useState("ASC"),[h]=kc(s,500),g=i.useMemo(()=>t==="user"?{page:r,per_page:X_,order_by:c,direction:f,category:t,query:h}:{page:r,per_page:X_,order_by:"name",direction:"ASC",category:t,query:h},[t,h,f,c,r]),{data:b,isLoading:y,isError:x,isFetching:w}=k0e(g),S=i.useCallback(R=>{!R||R===c||(d(R),o(0))},[c]),j=i.useCallback(R=>{!R||R===f||(m(R),o(0))},[f]),_=i.useCallback(()=>{l(""),o(0)},[]),I=i.useCallback(R=>{R.key==="Escape"&&(_(),R.preventDefault(),o(0))},[_]),E=i.useCallback(R=>{l(R.target.value),o(0)},[]),M=i.useCallback(()=>{n("user"),o(0)},[]),D=i.useCallback(()=>{n("default"),o(0)},[]);return a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:4,alignItems:"center",h:10,flexShrink:0,flexGrow:0,children:[a.jsxs($t,{children:[a.jsx(Xe,{variant:t==="user"?void 0:"ghost",onClick:M,isChecked:t==="user",children:e("workflows.userWorkflows")}),a.jsx(Xe,{variant:t==="default"?void 0:"ghost",onClick:D,isChecked:t==="default",children:e("workflows.defaultWorkflows")})]}),a.jsx(Wr,{}),t==="user"&&a.jsxs(a.Fragment,{children:[a.jsx(yn,{label:e("common.orderBy"),value:c,data:O0e,onChange:S,formControlProps:{w:48,display:"flex",alignItems:"center",gap:2},disabled:w}),a.jsx(yn,{label:e("common.direction"),value:f,data:D0e,onChange:j,formControlProps:{w:48,display:"flex",alignItems:"center",gap:2},disabled:w})]}),a.jsxs(cy,{w:"20rem",children:[a.jsx(Qc,{placeholder:e("workflows.searchWorkflows"),value:s,onKeyDown:I,onChange:E,"data-testid":"workflow-search-input"}),s.trim().length&&a.jsx(lg,{children:a.jsx(rs,{onClick:_,size:"xs",variant:"ghost","aria-label":e("workflows.clearWorkflowSearchFilter"),opacity:.5,icon:a.jsx(N8,{boxSize:2})})})]})]}),a.jsx(On,{}),y?a.jsx(U8,{label:e("workflows.loading")}):!b||x?a.jsx(Tn,{label:e("workflows.problemLoading")}):b.items.length?a.jsx(Sl,{children:a.jsx($,{w:"full",h:"full",gap:2,px:1,flexDir:"column",children:b.items.map(R=>a.jsx(P0e,{workflowDTO:R},R.workflow_id))})}):a.jsx(Tn,{label:e("workflows.noUserWorkflows")}),a.jsx(On,{}),b&&a.jsx($,{w:"full",justifyContent:"space-around",children:a.jsx(M0e,{data:b,page:r,setPage:o})})]})},A0e=i.memo(R0e),T0e=e=>a.jsx($,{w:"full",h:"full",flexDir:"column",layerStyle:"second",py:2,px:4,gap:2,borderRadius:"base",children:e.children}),N0e=i.memo(T0e),$0e=()=>a.jsx(N0e,{children:a.jsx(A0e,{})}),L0e=i.memo($0e),F0e=()=>{const{t:e}=W(),{isOpen:t,onClose:n}=oD();return a.jsxs(ni,{isOpen:t,onClose:n,isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{w:"80%",h:"80%",minW:"unset",minH:"unset",maxW:"unset",maxH:"unset",children:[a.jsx(Po,{children:e("workflows.workflowLibrary")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsx(L0e,{})}),a.jsx(ls,{})]})]})},z0e=i.memo(F0e),B0e=()=>{const{t:e}=W(),t=sr();return a.jsxs(tD.Provider,{value:t,children:[a.jsx(Xe,{leftIcon:a.jsx(Dte,{}),onClick:t.onOpen,pointerEvents:"auto",children:e("workflows.workflowLibrary")}),a.jsx(z0e,{})]})},H0e=i.memo(B0e),W0e=()=>{const e=s0();return i.useCallback(()=>{const n=new Blob([JSON.stringify(e,null,2)]),r=document.createElement("a");r.href=URL.createObjectURL(n),r.download=`${e.name||"My Workflow"}.json`,document.body.appendChild(r),r.click(),r.remove()},[e])},V0e=()=>{const{t:e}=W(),t=W0e();return a.jsx(At,{as:"button",icon:a.jsx(ou,{}),onClick:t,children:e("workflows.downloadWorkflow")})},U0e=i.memo(V0e),G0e=()=>{const{t:e}=W(),t=te(),{isOpen:n,onOpen:r,onClose:o}=sr(),s=i.useRef(null),l=H(f=>f.workflow.isTouched),c=i.useCallback(()=>{t(BN()),t(lt(rn({title:e("workflows.newWorkflowCreated"),status:"success"}))),o()},[t,o,e]),d=i.useCallback(()=>{if(!l){c();return}r()},[c,l,r]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"button",icon:a.jsx(e0,{}),onClick:d,children:e("nodes.newWorkflow")}),a.jsxs(Zc,{isOpen:n,onClose:o,leastDestructiveRef:s,isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:e("nodes.newWorkflow")}),a.jsx(Mo,{py:4,children:a.jsxs($,{flexDir:"column",gap:2,children:[a.jsx(be,{children:e("nodes.newWorkflowDesc")}),a.jsx(be,{variant:"subtext",children:e("nodes.newWorkflowDesc2")})]})}),a.jsxs(ls,{children:[a.jsx(ol,{ref:s,onClick:o,children:e("common.cancel")}),a.jsx(ol,{colorScheme:"error",ml:3,onClick:c,children:e("common.accept")})]})]})]})]})},K0e=i.memo(G0e),q0e=()=>{const{t:e}=W(),t=te(),n=s0(),[r,o]=rD(),s=tg(),l=i.useRef();return{saveWorkflowAs:i.useCallback(async({name:d,onSuccess:f,onError:m})=>{l.current=s({title:e("workflows.savingWorkflow"),status:"loading",duration:null,isClosable:!1});try{n.id=void 0,n.name=d;const h=await r(n).unwrap();t(g3(h.workflow.id)),t(XI(h.workflow.name)),t(v3()),f&&f(),s.update(l.current,{title:e("workflows.workflowSaved"),status:"success",duration:1e3,isClosable:!0})}catch{m&&m(),s.update(l.current,{title:e("workflows.problemSavingWorkflow"),status:"error",duration:1e3,isClosable:!0})}},[s,n,r,t,e]),isLoading:o.isLoading,isError:o.isError}},Q_=e=>`${e.trim()} (copy)`,X0e=()=>{const e=H(g=>g.workflow.name),{t}=W(),{saveWorkflowAs:n}=q0e(),[r,o]=i.useState(Q_(e)),{isOpen:s,onOpen:l,onClose:c}=sr(),d=i.useRef(null),f=i.useCallback(()=>{o(Q_(e)),l()},[e,l]),m=i.useCallback(async()=>{n({name:r,onSuccess:c,onError:c})},[r,c,n]),h=i.useCallback(g=>{o(g.target.value)},[]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"button",icon:a.jsx(xte,{}),onClick:f,children:t("workflows.saveWorkflowAs")}),a.jsx(Zc,{isOpen:s,onClose:c,leastDestructiveRef:d,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:t("workflows.saveWorkflowAs")}),a.jsx(Mo,{children:a.jsxs(Gt,{children:[a.jsx(ln,{children:t("workflows.workflowName")}),a.jsx(Qc,{ref:d,value:r,onChange:h,placeholder:t("workflows.workflowName")})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{onClick:c,children:t("common.cancel")}),a.jsx(Xe,{colorScheme:"accent",onClick:m,ml:3,children:t("common.saveAs")})]})]})})})]})},Q0e=i.memo(X0e),Y0e=e=>!!e.id,Z0e=()=>{const{t:e}=W(),t=te(),n=s0(),[r,o]=S0e(),[s,l]=rD(),c=tg(),d=i.useRef();return{saveWorkflow:i.useCallback(async()=>{d.current=c({title:e("workflows.savingWorkflow"),status:"loading",duration:null,isClosable:!1});try{if(Y0e(n))await r(n).unwrap();else{const m=await s(n).unwrap();t(g3(m.workflow.id))}t(v3()),c.update(d.current,{title:e("workflows.workflowSaved"),status:"success",duration:1e3,isClosable:!0})}catch{c.update(d.current,{title:e("workflows.problemSavingWorkflow"),status:"error",duration:1e3,isClosable:!0})}},[n,r,t,c,e,s]),isLoading:o.isLoading||l.isLoading,isError:o.isError||l.isError}},J0e=()=>{const{t:e}=W(),{saveWorkflow:t}=Z0e();return a.jsx(At,{as:"button",icon:a.jsx(gf,{}),onClick:t,children:e("workflows.saveWorkflow")})},eve=i.memo(J0e),tve=()=>{const{t:e}=W(),t=te(),n=i.useCallback(()=>{t(HN())},[t]);return a.jsx(Xe,{leftIcon:a.jsx(qte,{}),tooltip:e("nodes.reloadNodeTemplates"),"aria-label":e("nodes.reloadNodeTemplates"),onClick:n,children:e("nodes.reloadNodeTemplates")})},nve=i.memo(tve),Uu={fontWeight:600},rve=fe(pe,({nodes:e})=>{const{shouldAnimateEdges:t,shouldValidateGraph:n,shouldSnapToGrid:r,shouldColorEdges:o,selectionMode:s}=e;return{shouldAnimateEdges:t,shouldValidateGraph:n,shouldSnapToGrid:r,shouldColorEdges:o,selectionModeIsChecked:s===WN.Full}}),ove=({children:e})=>{const{isOpen:t,onOpen:n,onClose:r}=sr(),o=te(),{shouldAnimateEdges:s,shouldValidateGraph:l,shouldSnapToGrid:c,shouldColorEdges:d,selectionModeIsChecked:f}=H(rve),m=i.useCallback(w=>{o(VN(w.target.checked))},[o]),h=i.useCallback(w=>{o(UN(w.target.checked))},[o]),g=i.useCallback(w=>{o(GN(w.target.checked))},[o]),b=i.useCallback(w=>{o(KN(w.target.checked))},[o]),y=i.useCallback(w=>{o(qN(w.target.checked))},[o]),{t:x}=W();return a.jsxs(a.Fragment,{children:[e({onOpen:n}),a.jsxs(ni,{isOpen:t,onClose:r,size:"2xl",isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{children:[a.jsx(Po,{children:x("nodes.workflowSettings")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsxs($,{sx:{flexDirection:"column",gap:4,py:4},children:[a.jsx(or,{size:"sm",children:x("parameters.general")}),a.jsx(_n,{formLabelProps:Uu,onChange:h,isChecked:s,label:x("nodes.animatedEdges"),helperText:x("nodes.animatedEdgesHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:c,onChange:g,label:x("nodes.snapToGrid"),helperText:x("nodes.snapToGridHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:d,onChange:b,label:x("nodes.colorCodeEdges"),helperText:x("nodes.colorCodeEdgesHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:f,onChange:y,label:x("nodes.fullyContainNodes"),helperText:x("nodes.fullyContainNodesHelp")}),a.jsx(or,{size:"sm",pt:4,children:x("common.advanced")}),a.jsx(_n,{formLabelProps:Uu,isChecked:l,onChange:m,label:x("nodes.validateConnections"),helperText:x("nodes.validateConnectionsHelp")}),a.jsx(nve,{})]})})]})]})]})},sve=i.memo(ove),ave=()=>{const{t:e}=W();return a.jsx(sve,{children:({onOpen:t})=>a.jsx(At,{as:"button",icon:a.jsx(FM,{}),onClick:t,children:e("nodes.workflowSettings")})})},lve=i.memo(ave),ive=({resetRef:e})=>{const t=te(),n=H6("nodes"),{t:r}=W();return i.useCallback(s=>{var c;if(!s)return;const l=new FileReader;l.onload=async()=>{const d=l.result;try{const f=JSON.parse(String(d));t(Dx({workflow:f,asCopy:!0}))}catch{n.error(r("nodes.unableToLoadWorkflow")),t(lt(rn({title:r("nodes.unableToLoadWorkflow"),status:"error"}))),l.abort()}},l.readAsText(s),(c=e.current)==null||c.call(e)},[t,n,e,r])},cve=()=>{const{t:e}=W(),t=i.useRef(null),n=ive({resetRef:t});return a.jsx(uM,{resetRef:t,accept:"application/json",onChange:n,children:r=>a.jsx(At,{as:"button",icon:a.jsx($g,{}),...r,children:e("workflows.uploadWorkflow")})})},uve=i.memo(cve),dve=()=>{const{t:e}=W(),{isOpen:t,onOpen:n,onClose:r}=sr();Yy(r);const o=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs(of,{isOpen:t,onOpen:n,onClose:r,children:[a.jsx(sf,{as:Fe,"aria-label":e("workflows.workflowEditorMenu"),icon:a.jsx(P7,{}),pointerEvents:"auto"}),a.jsxs(al,{motionProps:Yl,pointerEvents:"auto",children:[o&&a.jsx(eve,{}),o&&a.jsx(Q0e,{}),a.jsx(U0e,{}),a.jsx(uve,{}),a.jsx(K0e,{}),a.jsx(n6,{}),a.jsx(lve,{})]})]})},fve=i.memo(dve),pve=()=>{const e=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs($,{sx:{gap:2,top:2,left:2,right:2,position:"absolute",alignItems:"center",pointerEvents:"none"},children:[a.jsx(i0e,{}),a.jsx(f0e,{}),a.jsx(Wr,{}),a.jsx(m0e,{}),a.jsx(Wr,{}),e&&a.jsx(H0e,{}),a.jsx(fve,{})]})},mve=i.memo(pve),hve=()=>{const e=H(n=>n.nodes.isReady),{t}=W();return a.jsxs($,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base",alignItems:"center",justifyContent:"center"},children:[a.jsx(hr,{children:e&&a.jsxs(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.2}},exit:{opacity:0,transition:{duration:.2}},style:{position:"relative",width:"100%",height:"100%"},children:[a.jsx(Zge,{}),a.jsx(The,{}),a.jsx(mve,{}),a.jsx(r0e,{}),a.jsx(a0e,{})]})}),a.jsx(hr,{children:!e&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.2}},exit:{opacity:0,transition:{duration:.2}},style:{position:"absolute",width:"100%",height:"100%"},children:a.jsx($,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:a.jsx(Tn,{label:t("nodes.loadingNodes"),icon:Yse})})})})]})},gve=i.memo(hve),vve=()=>a.jsx(XN,{children:a.jsx(gve,{})}),bve=i.memo(vve),xve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=QN({fixedCacheKey:"clearInvocationCache"}),l=i.useMemo(()=>!(n!=null&&n.size)||!r,[n==null?void 0:n.size,r]);return{clearInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.clearSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.clearFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},yve=()=>{const{t:e}=W(),{clearInvocationCache:t,isDisabled:n,isLoading:r}=xve();return a.jsx(Xe,{isDisabled:n,isLoading:r,onClick:t,children:e("invocationCache.clear")})},Cve=i.memo(yve),wve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=YN({fixedCacheKey:"disableInvocationCache"}),l=i.useMemo(()=>!(n!=null&&n.enabled)||!r||(n==null?void 0:n.max_size)===0,[n==null?void 0:n.enabled,n==null?void 0:n.max_size,r]);return{disableInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.disableSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.disableFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},Sve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=ZN({fixedCacheKey:"enableInvocationCache"}),l=i.useMemo(()=>(n==null?void 0:n.enabled)||!r||(n==null?void 0:n.max_size)===0,[n==null?void 0:n.enabled,n==null?void 0:n.max_size,r]);return{enableInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.enableSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.enableFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},kve=()=>{const{t:e}=W(),{data:t}=Gd(),{enableInvocationCache:n,isDisabled:r,isLoading:o}=Sve(),{disableInvocationCache:s,isDisabled:l,isLoading:c}=wve();return t!=null&&t.enabled?a.jsx(Xe,{isDisabled:l,isLoading:c,onClick:s,children:e("invocationCache.disable")}):a.jsx(Xe,{isDisabled:r,isLoading:o,onClick:n,children:e("invocationCache.enable")})},jve=i.memo(kve),_ve=({children:e,...t})=>a.jsx(N6,{alignItems:"center",justifyContent:"center",w:"full",h:"full",layerStyle:"second",borderRadius:"base",py:2,px:3,gap:6,flexWrap:"nowrap",...t,children:e}),sD=i.memo(_ve),Ive={'&[aria-disabled="true"]':{color:"base.400",_dark:{color:"base.500"}}},Pve=({label:e,value:t,isDisabled:n=!1,...r})=>a.jsxs(T6,{flexGrow:1,textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap","aria-disabled":n,sx:Ive,...r,children:[a.jsx($6,{textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap",children:e}),a.jsx(L6,{children:t})]}),Cs=i.memo(Pve),Eve=()=>{const{t:e}=W(),{data:t}=Gd(void 0);return a.jsxs(sD,{children:[a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.cacheSize"),value:(t==null?void 0:t.size)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.hits"),value:(t==null?void 0:t.hits)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.misses"),value:(t==null?void 0:t.misses)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.maxCacheSize"),value:(t==null?void 0:t.max_size)??0}),a.jsxs($t,{w:24,orientation:"vertical",size:"xs",children:[a.jsx(Cve,{}),a.jsx(jve,{})]})]})},Mve=i.memo(Eve),aD=e=>{const t=H(c=>c.system.isConnected),[n,{isLoading:r}]=Rx(),o=te(),{t:s}=W();return{cancelQueueItem:i.useCallback(async()=>{try{await n(e).unwrap(),o(lt({title:s("queue.cancelSucceeded"),status:"success"}))}catch{o(lt({title:s("queue.cancelFailed"),status:"error"}))}},[o,e,s,n]),isLoading:r,isDisabled:!t}},lD=(e,t)=>Number(((Date.parse(t)-Date.parse(e))/1e3).toFixed(2)),Y_={pending:{colorScheme:"cyan",translationKey:"queue.pending"},in_progress:{colorScheme:"yellow",translationKey:"queue.in_progress"},completed:{colorScheme:"green",translationKey:"queue.completed"},failed:{colorScheme:"red",translationKey:"queue.failed"},canceled:{colorScheme:"orange",translationKey:"queue.canceled"}},Ove=({status:e})=>{const{t}=W();return a.jsx(Sa,{colorScheme:Y_[e].colorScheme,children:t(Y_[e].translationKey)})},Dve=i.memo(Ove),Rve=e=>{const t=H(d=>d.system.isConnected),{isCanceled:n}=JN({batch_id:e},{selectFromResult:({data:d})=>d?{isCanceled:(d==null?void 0:d.in_progress)===0&&(d==null?void 0:d.pending)===0}:{isCanceled:!0}}),[r,{isLoading:o}]=e$({fixedCacheKey:"cancelByBatchIds"}),s=te(),{t:l}=W();return{cancelBatch:i.useCallback(async()=>{if(!n)try{await r({batch_ids:[e]}).unwrap(),s(lt({title:l("queue.cancelBatchSucceeded"),status:"success"}))}catch{s(lt({title:l("queue.cancelBatchFailed"),status:"error"}))}},[e,s,n,l,r]),isLoading:o,isCanceled:n,isDisabled:!t}},Ave=({queueItemDTO:e})=>{const{session_id:t,batch_id:n,item_id:r}=e,{t:o}=W(),{cancelBatch:s,isLoading:l,isCanceled:c}=Rve(n),{cancelQueueItem:d,isLoading:f}=aD(r),{data:m}=t$(r),h=i.useMemo(()=>{if(!m)return o("common.loading");if(!m.completed_at||!m.started_at)return o(`queue.${m.status}`);const g=lD(m.started_at,m.completed_at);return m.status==="completed"?`${o("queue.completedIn")} ${g}${g===1?"":"s"}`:`${g}s`},[m,o]);return a.jsxs($,{layerStyle:"third",flexDir:"column",p:2,pt:0,borderRadius:"base",gap:2,children:[a.jsxs($,{layerStyle:"second",p:2,gap:2,justifyContent:"space-between",alignItems:"center",borderRadius:"base",h:20,children:[a.jsx(rm,{label:o("queue.status"),data:h}),a.jsx(rm,{label:o("queue.item"),data:r}),a.jsx(rm,{label:o("queue.batch"),data:n}),a.jsx(rm,{label:o("queue.session"),data:t}),a.jsxs($t,{size:"xs",orientation:"vertical",children:[a.jsx(Xe,{onClick:d,isLoading:f,isDisabled:m?["canceled","completed","failed"].includes(m.status):!0,"aria-label":o("queue.cancelItem"),icon:a.jsx(Nc,{}),colorScheme:"error",children:o("queue.cancelItem")}),a.jsx(Xe,{onClick:s,isLoading:l,isDisabled:c,"aria-label":o("queue.cancelBatch"),icon:a.jsx(Nc,{}),colorScheme:"error",children:o("queue.cancelBatch")})]})]}),(m==null?void 0:m.error)&&a.jsxs($,{layerStyle:"second",p:3,gap:1,justifyContent:"space-between",alignItems:"flex-start",borderRadius:"base",flexDir:"column",children:[a.jsx(or,{size:"sm",color:"error.500",_dark:{color:"error.400"},children:o("common.error")}),a.jsx("pre",{children:m.error})]}),a.jsx($,{layerStyle:"second",h:512,w:"full",borderRadius:"base",alignItems:"center",justifyContent:"center",children:m?a.jsx(Sl,{children:a.jsx(pl,{label:"Queue Item",data:m})}):a.jsx(va,{opacity:.5})})]})},Tve=i.memo(Ave),rm=({label:e,data:t})=>a.jsxs($,{flexDir:"column",justifyContent:"flex-start",p:1,gap:1,overflow:"hidden",h:"full",w:"full",children:[a.jsx(or,{size:"md",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",children:e}),a.jsx(be,{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",children:t})]}),Ss={number:"3rem",statusBadge:"5.7rem",statusDot:2,time:"4rem",batchId:"5rem",fieldValues:"auto",actions:"auto"},Z_={bg:"base.300",_dark:{bg:"base.750"}},Nve={_hover:Z_,"&[aria-selected='true']":Z_},$ve=({index:e,item:t,context:n})=>{const{t:r}=W(),o=i.useCallback(()=>{n.toggleQueueItem(t.item_id)},[n,t.item_id]),{cancelQueueItem:s,isLoading:l}=aD(t.item_id),c=i.useCallback(h=>{h.stopPropagation(),s()},[s]),d=i.useMemo(()=>n.openQueueItems.includes(t.item_id),[n.openQueueItems,t.item_id]),f=i.useMemo(()=>!t.completed_at||!t.started_at?void 0:`${lD(t.started_at,t.completed_at)}s`,[t]),m=i.useMemo(()=>["canceled","completed","failed"].includes(t.status),[t.status]);return a.jsxs($,{flexDir:"column","aria-selected":d,fontSize:"sm",borderRadius:"base",justifyContent:"center",sx:Nve,"data-testid":"queue-item",children:[a.jsxs($,{minH:9,alignItems:"center",gap:4,p:1.5,cursor:"pointer",onClick:o,children:[a.jsx($,{w:Ss.number,justifyContent:"flex-end",alignItems:"center",flexShrink:0,children:a.jsx(be,{variant:"subtext",children:e+1})}),a.jsx($,{w:Ss.statusBadge,alignItems:"center",flexShrink:0,children:a.jsx(Dve,{status:t.status})}),a.jsx($,{w:Ss.time,alignItems:"center",flexShrink:0,children:f||"-"}),a.jsx($,{w:Ss.batchId,flexShrink:0,children:a.jsx(be,{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",alignItems:"center",children:t.batch_id})}),a.jsx($,{alignItems:"center",overflow:"hidden",flexGrow:1,children:t.field_values&&a.jsx($,{gap:2,w:"full",whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",children:t.field_values.filter(h=>h.node_path!=="metadata_accumulator").map(({node_path:h,field_name:g,value:b})=>a.jsxs(be,{as:"span",children:[a.jsxs(be,{as:"span",fontWeight:600,children:[h,".",g]}),": ",b]},`${t.item_id}.${h}.${g}.${b}`))})}),a.jsx($,{alignItems:"center",w:Ss.actions,pe:3,children:a.jsx($t,{size:"xs",variant:"ghost",children:a.jsx(Fe,{onClick:c,isDisabled:m,isLoading:l,"aria-label":r("queue.cancelItem"),icon:a.jsx(Nc,{})})})})]}),a.jsx(Xd,{in:d,transition:{enter:{duration:.1},exit:{duration:.1}},unmountOnExit:!0,children:a.jsx(Tve,{queueItemDTO:t})})]})},Lve=i.memo($ve),Fve=i.memo(_e((e,t)=>a.jsx($,{...e,ref:t,flexDirection:"column",gap:.5,children:e.children}))),zve=i.memo(Fve),Bve=()=>{const{t:e}=W();return a.jsxs($,{alignItems:"center",gap:4,p:1,pb:2,textTransform:"uppercase",fontWeight:700,fontSize:"xs",letterSpacing:1,children:[a.jsx($,{w:Ss.number,justifyContent:"flex-end",alignItems:"center",children:a.jsx(be,{variant:"subtext",children:"#"})}),a.jsx($,{ps:.5,w:Ss.statusBadge,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.status")})}),a.jsx($,{ps:.5,w:Ss.time,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.time")})}),a.jsx($,{ps:.5,w:Ss.batchId,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.batch")})}),a.jsx($,{ps:.5,w:Ss.fieldValues,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.batchFieldValues")})})]})},Hve=i.memo(Bve),Wve={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},Vve=fe(pe,({queue:e})=>{const{listCursor:t,listPriority:n}=e;return{listCursor:t,listPriority:n}}),Uve=(e,t)=>t.item_id,Gve={List:zve},Kve=(e,t,n)=>a.jsx(Lve,{index:e,item:t,context:n}),qve=()=>{const{listCursor:e,listPriority:t}=H(Vve),n=te(),r=i.useRef(null),[o,s]=i.useState(null),[l,c]=c2(Wve),{t:d}=W();i.useEffect(()=>{const{current:S}=r;return o&&S&&l({target:S,elements:{viewport:o}}),()=>{var j;return(j=c())==null?void 0:j.destroy()}},[o,l,c]);const{data:f,isLoading:m}=n$({cursor:e,priority:t}),h=i.useMemo(()=>f?r$.getSelectors().selectAll(f):[],[f]),g=i.useCallback(()=>{if(!(f!=null&&f.has_more))return;const S=h[h.length-1];S&&(n(Ax(S.item_id)),n(Tx(S.priority)))},[n,f==null?void 0:f.has_more,h]),[b,y]=i.useState([]),x=i.useCallback(S=>{y(j=>j.includes(S)?j.filter(_=>_!==S):[...j,S])},[]),w=i.useMemo(()=>({openQueueItems:b,toggleQueueItem:x}),[b,x]);return m?a.jsx(U8,{}):h.length?a.jsxs($,{w:"full",h:"full",flexDir:"column",children:[a.jsx(Hve,{}),a.jsx($,{ref:r,w:"full",h:"full",alignItems:"center",justifyContent:"center",children:a.jsx(Ose,{data:h,endReached:g,scrollerRef:s,itemContent:Kve,computeItemKey:Uve,components:Gve,context:w})})]}):a.jsx($,{w:"full",h:"full",alignItems:"center",justifyContent:"center",children:a.jsx(or,{color:"base.400",_dark:{color:"base.500"},children:d("queue.queueEmpty")})})},Xve=i.memo(qve),Qve=()=>{const{data:e}=Ls(),{t}=W();return a.jsxs(sD,{"data-testid":"queue-status",children:[a.jsx(Cs,{label:t("queue.in_progress"),value:(e==null?void 0:e.queue.in_progress)??0}),a.jsx(Cs,{label:t("queue.pending"),value:(e==null?void 0:e.queue.pending)??0}),a.jsx(Cs,{label:t("queue.completed"),value:(e==null?void 0:e.queue.completed)??0}),a.jsx(Cs,{label:t("queue.failed"),value:(e==null?void 0:e.queue.failed)??0}),a.jsx(Cs,{label:t("queue.canceled"),value:(e==null?void 0:e.queue.canceled)??0}),a.jsx(Cs,{label:t("queue.total"),value:(e==null?void 0:e.queue.total)??0})]})},Yve=i.memo(Qve);function Zve(e){return De({tag:"svg",attr:{fill:"currentColor",viewBox:"0 0 16 16"},child:[{tag:"path",attr:{d:"M7.657 6.247c.11-.33.576-.33.686 0l.645 1.937a2.89 2.89 0 0 0 1.829 1.828l1.936.645c.33.11.33.576 0 .686l-1.937.645a2.89 2.89 0 0 0-1.828 1.829l-.645 1.936a.361.361 0 0 1-.686 0l-.645-1.937a2.89 2.89 0 0 0-1.828-1.828l-1.937-.645a.361.361 0 0 1 0-.686l1.937-.645a2.89 2.89 0 0 0 1.828-1.828l.645-1.937zM3.794 1.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387A1.734 1.734 0 0 0 4.593 5.69l-.387 1.162a.217.217 0 0 1-.412 0L3.407 5.69A1.734 1.734 0 0 0 2.31 4.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387A1.734 1.734 0 0 0 3.407 2.31l.387-1.162zM10.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732L9.1 2.137a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L10.863.1z"}}]})(e)}const Jve=()=>{const e=te(),{t}=W(),n=H(d=>d.system.isConnected),[r,{isLoading:o}]=r3({fixedCacheKey:"pruneQueue"}),{finishedCount:s}=Ls(void 0,{selectFromResult:({data:d})=>d?{finishedCount:d.queue.completed+d.queue.canceled+d.queue.failed}:{finishedCount:0}}),l=i.useCallback(async()=>{if(s)try{const d=await r().unwrap();e(lt({title:t("queue.pruneSucceeded",{item_count:d.deleted}),status:"success"})),e(Ax(void 0)),e(Tx(void 0))}catch{e(lt({title:t("queue.pruneFailed"),status:"error"}))}},[s,r,e,t]),c=i.useMemo(()=>!n||!s,[s,n]);return{pruneQueue:l,isLoading:o,finishedCount:s,isDisabled:c}},e1e=({asIconButton:e})=>{const{t}=W(),{pruneQueue:n,isLoading:r,finishedCount:o,isDisabled:s}=Jve();return a.jsx(gi,{isDisabled:s,isLoading:r,asIconButton:e,label:t("queue.prune"),tooltip:t("queue.pruneTooltip",{item_count:o}),icon:a.jsx(Zve,{}),onClick:n,colorScheme:"blue"})},t1e=i.memo(e1e),n1e=()=>{const e=Mt("pauseQueue").isFeatureEnabled,t=Mt("resumeQueue").isFeatureEnabled;return a.jsxs($,{layerStyle:"second",borderRadius:"base",p:2,gap:2,children:[e||t?a.jsxs($t,{w:28,orientation:"vertical",isAttached:!0,size:"sm",children:[t?a.jsx(F7,{}):a.jsx(a.Fragment,{}),e?a.jsx(R7,{}):a.jsx(a.Fragment,{})]}):a.jsx(a.Fragment,{}),a.jsxs($t,{w:28,orientation:"vertical",isAttached:!0,size:"sm",children:[a.jsx(t1e,{}),a.jsx(P2,{})]})]})},r1e=i.memo(n1e),o1e=()=>{const e=Mt("invocationCache").isFeatureEnabled;return a.jsxs($,{layerStyle:"first",borderRadius:"base",w:"full",h:"full",p:2,flexDir:"column",gap:2,children:[a.jsxs($,{gap:2,w:"full",children:[a.jsx(r1e,{}),a.jsx(Yve,{}),e&&a.jsx(Mve,{})]}),a.jsx(Ie,{layerStyle:"second",p:2,borderRadius:"base",w:"full",h:"full",children:a.jsx(Xve,{})})]})},s1e=i.memo(o1e),a1e=()=>a.jsx(s1e,{}),l1e=i.memo(a1e),i1e=()=>a.jsx(zO,{}),c1e=i.memo(i1e),u1e=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,isMovingBoundingBox:r}=e;return{tool:n,isStaging:t,isMovingBoundingBox:r}}),d1e=()=>{const e=te(),{tool:t,isStaging:n,isMovingBoundingBox:r}=H(u1e);return{handleDragStart:i.useCallback(()=>{(t==="move"||n)&&!r&&e(Em(!0))},[e,r,n,t]),handleDragMove:i.useCallback(o=>{if(!((t==="move"||n)&&!r))return;const s={x:o.target.x(),y:o.target.y()};e(b3(s))},[e,r,n,t]),handleDragEnd:i.useCallback(()=>{(t==="move"||n)&&!r&&e(Em(!1))},[e,r,n,t])}},f1e=fe([pe,tr,Lo],({canvas:e},t,n)=>{const{cursorPosition:r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:l,isMaskEnabled:c,shouldSnapToGrid:d}=e;return{activeTabName:t,isCursorOnCanvas:!!r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:l,isStaging:n,isMaskEnabled:c,shouldSnapToGrid:d}}),p1e=()=>{const e=te(),{activeTabName:t,shouldShowBoundingBox:n,tool:r,isStaging:o,isMaskEnabled:s,shouldSnapToGrid:l}=H(f1e),c=i.useRef(null),d=x3(),f=()=>e(y3());tt(["shift+c"],()=>{f()},{enabled:()=>!o,preventDefault:!0},[]);const m=()=>e(Wx(!s));tt(["h"],()=>{m()},{enabled:()=>!o,preventDefault:!0},[s]),tt(["n"],()=>{e(Mm(!l))},{enabled:!0,preventDefault:!0},[l]),tt("esc",()=>{e(o$())},{enabled:()=>!0,preventDefault:!0}),tt("shift+h",()=>{e(s$(!n))},{enabled:()=>!o,preventDefault:!0},[t,n]),tt(["space"],h=>{h.repeat||(d==null||d.container().focus(),r!=="move"&&(c.current=r,e(fc("move"))),r==="move"&&c.current&&c.current!=="move"&&(e(fc(c.current)),c.current="move"))},{keyup:!0,keydown:!0,preventDefault:!0},[r,c])},q2=e=>{const t=e.getPointerPosition(),n=e.getAbsoluteTransform().copy();if(!t||!n)return;const r=n.invert().point(t);return{x:r.x,y:r.y}},iD=()=>{const e=te(),t=G1(),n=x3();return{updateColorUnderCursor:()=>{if(!n||!t)return;const r=n.getPointerPosition();if(!r)return;const o=a$.pixelRatio,[s,l,c,d]=t.getContext().getImageData(r.x*o,r.y*o,1,1).data;s===void 0||l===void 0||c===void 0||d===void 0||e(l$({r:s,g:l,b:c,a:d}))},commitColorUnderCursor:()=>{e(i$())}}},m1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r}=t;return{tool:r,activeTabName:e,isStaging:n}}),h1e=e=>{const t=te(),{tool:n,isStaging:r}=H(m1e),{commitColorUnderCursor:o}=iD();return i.useCallback(s=>{if(!e.current)return;if(e.current.container().focus(),n==="move"||r){t(Em(!0));return}if(n==="colorPicker"){o();return}const l=q2(e.current);l&&(s.evt.preventDefault(),t(C3(!0)),t(c$([l.x,l.y])))},[e,n,r,t,o])},g1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}}),v1e=(e,t,n)=>{const r=te(),{isDrawing:o,tool:s,isStaging:l}=H(g1e),{updateColorUnderCursor:c}=iD();return i.useCallback(()=>{if(!e.current)return;const d=q2(e.current);if(d){if(r(u$(d)),n.current=d,s==="colorPicker"){c();return}!o||s==="move"||l||(t.current=!0,r(w3([d.x,d.y])))}},[t,r,o,l,n,e,s,c])},b1e=()=>{const e=te();return i.useCallback(()=>{e(d$())},[e])},x1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}}),y1e=(e,t)=>{const n=te(),{tool:r,isDrawing:o,isStaging:s}=H(x1e);return i.useCallback(()=>{if(r==="move"||s){n(Em(!1));return}if(!t.current&&o&&e.current){const l=q2(e.current);if(!l)return;n(w3([l.x,l.y]))}else t.current=!1;n(C3(!1))},[t,n,o,s,e,r])},C1e=fe([pe],({canvas:e})=>{const{isMoveStageKeyHeld:t,stageScale:n}=e;return{isMoveStageKeyHeld:t,stageScale:n}}),w1e=e=>{const t=te(),{isMoveStageKeyHeld:n,stageScale:r}=H(C1e);return i.useCallback(o=>{if(!e.current||n)return;o.evt.preventDefault();const s=e.current.getPointerPosition();if(!s)return;const l={x:(s.x-e.current.x())/r,y:(s.y-e.current.y())/r};let c=o.evt.deltaY;o.evt.ctrlKey&&(c=-c);const d=Zl(r*m$**c,p$,f$),f={x:s.x-l.x*d,y:s.y-l.y*d};t(h$(d)),t(b3(f))},[e,n,r,t])};var dx={exports:{}};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Konva=void 0;var n=mS;Object.defineProperty(t,"Konva",{enumerable:!0,get:function(){return n.Konva}});const r=mS;e.exports=r.Konva})(dx,dx.exports);var S1e=dx.exports;const Fd=Bd(S1e);var cD={exports:{}};/** + * @license React + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var k1e=function(t){var n={},r=i,o=sm,s=Object.assign;function l(u){for(var p="https://reactjs.org/docs/error-decoder.html?invariant="+u,v=1;vie||k[F]!==P[ie]){var ge=` +`+k[F].replace(" at new "," at ");return u.displayName&&ge.includes("")&&(ge=ge.replace("",u.displayName)),ge}while(1<=F&&0<=ie);break}}}finally{hu=!1,Error.prepareStackTrace=v}return(u=u?u.displayName||u.name:"")?_l(u):""}var v0=Object.prototype.hasOwnProperty,Ma=[],rt=-1;function Dt(u){return{current:u}}function _t(u){0>rt||(u.current=Ma[rt],Ma[rt]=null,rt--)}function Rt(u,p){rt++,Ma[rt]=u.current,u.current=p}var lr={},an=Dt(lr),$n=Dt(!1),br=lr;function wi(u,p){var v=u.type.contextTypes;if(!v)return lr;var C=u.stateNode;if(C&&C.__reactInternalMemoizedUnmaskedChildContext===p)return C.__reactInternalMemoizedMaskedChildContext;var k={},P;for(P in v)k[P]=p[P];return C&&(u=u.stateNode,u.__reactInternalMemoizedUnmaskedChildContext=p,u.__reactInternalMemoizedMaskedChildContext=k),k}function Pr(u){return u=u.childContextTypes,u!=null}function If(){_t($n),_t(an)}function Y2(u,p,v){if(an.current!==lr)throw Error(l(168));Rt(an,p),Rt($n,v)}function Z2(u,p,v){var C=u.stateNode;if(p=p.childContextTypes,typeof C.getChildContext!="function")return v;C=C.getChildContext();for(var k in C)if(!(k in p))throw Error(l(108,R(u)||"Unknown",k));return s({},v,C)}function Pf(u){return u=(u=u.stateNode)&&u.__reactInternalMemoizedMergedChildContext||lr,br=an.current,Rt(an,u),Rt($n,$n.current),!0}function J2(u,p,v){var C=u.stateNode;if(!C)throw Error(l(169));v?(u=Z2(u,p,br),C.__reactInternalMemoizedMergedChildContext=u,_t($n),_t(an),Rt(an,u)):_t($n),Rt($n,v)}var Bo=Math.clz32?Math.clz32:SD,CD=Math.log,wD=Math.LN2;function SD(u){return u>>>=0,u===0?32:31-(CD(u)/wD|0)|0}var Ef=64,Mf=4194304;function vu(u){switch(u&-u){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return u&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return u&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return u}}function Of(u,p){var v=u.pendingLanes;if(v===0)return 0;var C=0,k=u.suspendedLanes,P=u.pingedLanes,F=v&268435455;if(F!==0){var ie=F&~k;ie!==0?C=vu(ie):(P&=F,P!==0&&(C=vu(P)))}else F=v&~k,F!==0?C=vu(F):P!==0&&(C=vu(P));if(C===0)return 0;if(p!==0&&p!==C&&!(p&k)&&(k=C&-C,P=p&-p,k>=P||k===16&&(P&4194240)!==0))return p;if(C&4&&(C|=v&16),p=u.entangledLanes,p!==0)for(u=u.entanglements,p&=C;0v;v++)p.push(u);return p}function bu(u,p,v){u.pendingLanes|=p,p!==536870912&&(u.suspendedLanes=0,u.pingedLanes=0),u=u.eventTimes,p=31-Bo(p),u[p]=v}function _D(u,p){var v=u.pendingLanes&~p;u.pendingLanes=p,u.suspendedLanes=0,u.pingedLanes=0,u.expiredLanes&=p,u.mutableReadLanes&=p,u.entangledLanes&=p,p=u.entanglements;var C=u.eventTimes;for(u=u.expirationTimes;0>=F,k-=F,Vs=1<<32-Bo(p)+k|v<Ft?(Jn=yt,yt=null):Jn=yt.sibling;var zt=He(he,yt,xe[Ft],We);if(zt===null){yt===null&&(yt=Jn);break}u&&yt&&zt.alternate===null&&p(he,yt),ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt,yt=Jn}if(Ft===xe.length)return v(he,yt),mn&&Pl(he,Ft),ct;if(yt===null){for(;FtFt?(Jn=yt,yt=null):Jn=yt.sibling;var La=He(he,yt,zt.value,We);if(La===null){yt===null&&(yt=Jn);break}u&&yt&&La.alternate===null&&p(he,yt),ue=P(La,ue,Ft),Ct===null?ct=La:Ct.sibling=La,Ct=La,yt=Jn}if(zt.done)return v(he,yt),mn&&Pl(he,Ft),ct;if(yt===null){for(;!zt.done;Ft++,zt=xe.next())zt=xt(he,zt.value,We),zt!==null&&(ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt);return mn&&Pl(he,Ft),ct}for(yt=C(he,yt);!zt.done;Ft++,zt=xe.next())zt=dn(yt,he,Ft,zt.value,We),zt!==null&&(u&&zt.alternate!==null&&yt.delete(zt.key===null?Ft:zt.key),ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt);return u&&yt.forEach(function(dR){return p(he,dR)}),mn&&Pl(he,Ft),ct}function Xs(he,ue,xe,We){if(typeof xe=="object"&&xe!==null&&xe.type===m&&xe.key===null&&(xe=xe.props.children),typeof xe=="object"&&xe!==null){switch(xe.$$typeof){case d:e:{for(var ct=xe.key,Ct=ue;Ct!==null;){if(Ct.key===ct){if(ct=xe.type,ct===m){if(Ct.tag===7){v(he,Ct.sibling),ue=k(Ct,xe.props.children),ue.return=he,he=ue;break e}}else if(Ct.elementType===ct||typeof ct=="object"&&ct!==null&&ct.$$typeof===_&&bC(ct)===Ct.type){v(he,Ct.sibling),ue=k(Ct,xe.props),ue.ref=yu(he,Ct,xe),ue.return=he,he=ue;break e}v(he,Ct);break}else p(he,Ct);Ct=Ct.sibling}xe.type===m?(ue=Tl(xe.props.children,he.mode,We,xe.key),ue.return=he,he=ue):(We=hp(xe.type,xe.key,xe.props,null,he.mode,We),We.ref=yu(he,ue,xe),We.return=he,he=We)}return F(he);case f:e:{for(Ct=xe.key;ue!==null;){if(ue.key===Ct)if(ue.tag===4&&ue.stateNode.containerInfo===xe.containerInfo&&ue.stateNode.implementation===xe.implementation){v(he,ue.sibling),ue=k(ue,xe.children||[]),ue.return=he,he=ue;break e}else{v(he,ue);break}else p(he,ue);ue=ue.sibling}ue=jv(xe,he.mode,We),ue.return=he,he=ue}return F(he);case _:return Ct=xe._init,Xs(he,ue,Ct(xe._payload),We)}if(Y(xe))return tn(he,ue,xe,We);if(M(xe))return Dr(he,ue,xe,We);Wf(he,xe)}return typeof xe=="string"&&xe!==""||typeof xe=="number"?(xe=""+xe,ue!==null&&ue.tag===6?(v(he,ue.sibling),ue=k(ue,xe),ue.return=he,he=ue):(v(he,ue),ue=kv(xe,he.mode,We),ue.return=he,he=ue),F(he)):v(he,ue)}return Xs}var Pi=xC(!0),yC=xC(!1),Cu={},po=Dt(Cu),wu=Dt(Cu),Ei=Dt(Cu);function hs(u){if(u===Cu)throw Error(l(174));return u}function L0(u,p){Rt(Ei,p),Rt(wu,u),Rt(po,Cu),u=V(p),_t(po),Rt(po,u)}function Mi(){_t(po),_t(wu),_t(Ei)}function CC(u){var p=hs(Ei.current),v=hs(po.current);p=se(v,u.type,p),v!==p&&(Rt(wu,u),Rt(po,p))}function F0(u){wu.current===u&&(_t(po),_t(wu))}var wn=Dt(0);function Vf(u){for(var p=u;p!==null;){if(p.tag===13){var v=p.memoizedState;if(v!==null&&(v=v.dehydrated,v===null||Fo(v)||zo(v)))return p}else if(p.tag===19&&p.memoizedProps.revealOrder!==void 0){if(p.flags&128)return p}else if(p.child!==null){p.child.return=p,p=p.child;continue}if(p===u)break;for(;p.sibling===null;){if(p.return===null||p.return===u)return null;p=p.return}p.sibling.return=p.return,p=p.sibling}return null}var z0=[];function B0(){for(var u=0;uv?v:4,u(!0);var C=H0.transition;H0.transition={};try{u(!1),p()}finally{Lt=v,H0.transition=C}}function FC(){return mo().memoizedState}function LD(u,p,v){var C=Ta(u);if(v={lane:C,action:v,hasEagerState:!1,eagerState:null,next:null},zC(u))BC(p,v);else if(v=uC(u,p,v,C),v!==null){var k=dr();ho(v,u,C,k),HC(v,p,C)}}function FD(u,p,v){var C=Ta(u),k={lane:C,action:v,hasEagerState:!1,eagerState:null,next:null};if(zC(u))BC(p,k);else{var P=u.alternate;if(u.lanes===0&&(P===null||P.lanes===0)&&(P=p.lastRenderedReducer,P!==null))try{var F=p.lastRenderedState,ie=P(F,v);if(k.hasEagerState=!0,k.eagerState=ie,Ho(ie,F)){var ge=p.interleaved;ge===null?(k.next=k,A0(p)):(k.next=ge.next,ge.next=k),p.interleaved=k;return}}catch{}finally{}v=uC(u,p,k,C),v!==null&&(k=dr(),ho(v,u,C,k),HC(v,p,C))}}function zC(u){var p=u.alternate;return u===Sn||p!==null&&p===Sn}function BC(u,p){Su=Gf=!0;var v=u.pending;v===null?p.next=p:(p.next=v.next,v.next=p),u.pending=p}function HC(u,p,v){if(v&4194240){var C=p.lanes;C&=u.pendingLanes,v|=C,p.lanes=v,y0(u,v)}}var Xf={readContext:fo,useCallback:ir,useContext:ir,useEffect:ir,useImperativeHandle:ir,useInsertionEffect:ir,useLayoutEffect:ir,useMemo:ir,useReducer:ir,useRef:ir,useState:ir,useDebugValue:ir,useDeferredValue:ir,useTransition:ir,useMutableSource:ir,useSyncExternalStore:ir,useId:ir,unstable_isNewReconciler:!1},zD={readContext:fo,useCallback:function(u,p){return gs().memoizedState=[u,p===void 0?null:p],u},useContext:fo,useEffect:OC,useImperativeHandle:function(u,p,v){return v=v!=null?v.concat([u]):null,Kf(4194308,4,AC.bind(null,p,u),v)},useLayoutEffect:function(u,p){return Kf(4194308,4,u,p)},useInsertionEffect:function(u,p){return Kf(4,2,u,p)},useMemo:function(u,p){var v=gs();return p=p===void 0?null:p,u=u(),v.memoizedState=[u,p],u},useReducer:function(u,p,v){var C=gs();return p=v!==void 0?v(p):p,C.memoizedState=C.baseState=p,u={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:u,lastRenderedState:p},C.queue=u,u=u.dispatch=LD.bind(null,Sn,u),[C.memoizedState,u]},useRef:function(u){var p=gs();return u={current:u},p.memoizedState=u},useState:EC,useDebugValue:X0,useDeferredValue:function(u){return gs().memoizedState=u},useTransition:function(){var u=EC(!1),p=u[0];return u=$D.bind(null,u[1]),gs().memoizedState=u,[p,u]},useMutableSource:function(){},useSyncExternalStore:function(u,p,v){var C=Sn,k=gs();if(mn){if(v===void 0)throw Error(l(407));v=v()}else{if(v=p(),Zn===null)throw Error(l(349));Ml&30||kC(C,p,v)}k.memoizedState=v;var P={value:v,getSnapshot:p};return k.queue=P,OC(_C.bind(null,C,P,u),[u]),C.flags|=2048,_u(9,jC.bind(null,C,P,v,p),void 0,null),v},useId:function(){var u=gs(),p=Zn.identifierPrefix;if(mn){var v=Us,C=Vs;v=(C&~(1<<32-Bo(C)-1)).toString(32)+v,p=":"+p+"R"+v,v=ku++,0gv&&(p.flags|=128,C=!0,Eu(k,!1),p.lanes=4194304)}else{if(!C)if(u=Vf(P),u!==null){if(p.flags|=128,C=!0,u=u.updateQueue,u!==null&&(p.updateQueue=u,p.flags|=4),Eu(k,!0),k.tail===null&&k.tailMode==="hidden"&&!P.alternate&&!mn)return cr(p),null}else 2*Qn()-k.renderingStartTime>gv&&v!==1073741824&&(p.flags|=128,C=!0,Eu(k,!1),p.lanes=4194304);k.isBackwards?(P.sibling=p.child,p.child=P):(u=k.last,u!==null?u.sibling=P:p.child=P,k.last=P)}return k.tail!==null?(p=k.tail,k.rendering=p,k.tail=p.sibling,k.renderingStartTime=Qn(),p.sibling=null,u=wn.current,Rt(wn,C?u&1|2:u&1),p):(cr(p),null);case 22:case 23:return Cv(),v=p.memoizedState!==null,u!==null&&u.memoizedState!==null!==v&&(p.flags|=8192),v&&p.mode&1?Qr&1073741824&&(cr(p),X&&p.subtreeFlags&6&&(p.flags|=8192)):cr(p),null;case 24:return null;case 25:return null}throw Error(l(156,p.tag))}function qD(u,p){switch(_0(p),p.tag){case 1:return Pr(p.type)&&If(),u=p.flags,u&65536?(p.flags=u&-65537|128,p):null;case 3:return Mi(),_t($n),_t(an),B0(),u=p.flags,u&65536&&!(u&128)?(p.flags=u&-65537|128,p):null;case 5:return F0(p),null;case 13:if(_t(wn),u=p.memoizedState,u!==null&&u.dehydrated!==null){if(p.alternate===null)throw Error(l(340));ji()}return u=p.flags,u&65536?(p.flags=u&-65537|128,p):null;case 19:return _t(wn),null;case 4:return Mi(),null;case 10:return D0(p.type._context),null;case 22:case 23:return Cv(),null;case 24:return null;default:return null}}var ep=!1,ur=!1,XD=typeof WeakSet=="function"?WeakSet:Set,Ke=null;function Di(u,p){var v=u.ref;if(v!==null)if(typeof v=="function")try{v(null)}catch(C){hn(u,p,C)}else v.current=null}function ov(u,p,v){try{v()}catch(C){hn(u,p,C)}}var lw=!1;function QD(u,p){for(ee(u.containerInfo),Ke=p;Ke!==null;)if(u=Ke,p=u.child,(u.subtreeFlags&1028)!==0&&p!==null)p.return=u,Ke=p;else for(;Ke!==null;){u=Ke;try{var v=u.alternate;if(u.flags&1024)switch(u.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var C=v.memoizedProps,k=v.memoizedState,P=u.stateNode,F=P.getSnapshotBeforeUpdate(u.elementType===u.type?C:Vo(u.type,C),k);P.__reactInternalSnapshotBeforeUpdate=F}break;case 3:X&&Ht(u.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;default:throw Error(l(163))}}catch(ie){hn(u,u.return,ie)}if(p=u.sibling,p!==null){p.return=u.return,Ke=p;break}Ke=u.return}return v=lw,lw=!1,v}function Mu(u,p,v){var C=p.updateQueue;if(C=C!==null?C.lastEffect:null,C!==null){var k=C=C.next;do{if((k.tag&u)===u){var P=k.destroy;k.destroy=void 0,P!==void 0&&ov(p,v,P)}k=k.next}while(k!==C)}}function tp(u,p){if(p=p.updateQueue,p=p!==null?p.lastEffect:null,p!==null){var v=p=p.next;do{if((v.tag&u)===u){var C=v.create;v.destroy=C()}v=v.next}while(v!==p)}}function sv(u){var p=u.ref;if(p!==null){var v=u.stateNode;switch(u.tag){case 5:u=Q(v);break;default:u=v}typeof p=="function"?p(u):p.current=u}}function iw(u){var p=u.alternate;p!==null&&(u.alternate=null,iw(p)),u.child=null,u.deletions=null,u.sibling=null,u.tag===5&&(p=u.stateNode,p!==null&&we(p)),u.stateNode=null,u.return=null,u.dependencies=null,u.memoizedProps=null,u.memoizedState=null,u.pendingProps=null,u.stateNode=null,u.updateQueue=null}function cw(u){return u.tag===5||u.tag===3||u.tag===4}function uw(u){e:for(;;){for(;u.sibling===null;){if(u.return===null||cw(u.return))return null;u=u.return}for(u.sibling.return=u.return,u=u.sibling;u.tag!==5&&u.tag!==6&&u.tag!==18;){if(u.flags&2||u.child===null||u.tag===4)continue e;u.child.return=u,u=u.child}if(!(u.flags&2))return u.stateNode}}function av(u,p,v){var C=u.tag;if(C===5||C===6)u=u.stateNode,p?kt(v,u,p):Ue(v,u);else if(C!==4&&(u=u.child,u!==null))for(av(u,p,v),u=u.sibling;u!==null;)av(u,p,v),u=u.sibling}function lv(u,p,v){var C=u.tag;if(C===5||C===6)u=u.stateNode,p?Ne(v,u,p):ye(v,u);else if(C!==4&&(u=u.child,u!==null))for(lv(u,p,v),u=u.sibling;u!==null;)lv(u,p,v),u=u.sibling}var nr=null,Uo=!1;function bs(u,p,v){for(v=v.child;v!==null;)iv(u,p,v),v=v.sibling}function iv(u,p,v){if(fs&&typeof fs.onCommitFiberUnmount=="function")try{fs.onCommitFiberUnmount(Df,v)}catch{}switch(v.tag){case 5:ur||Di(v,p);case 6:if(X){var C=nr,k=Uo;nr=null,bs(u,p,v),nr=C,Uo=k,nr!==null&&(Uo?Ve(nr,v.stateNode):Se(nr,v.stateNode))}else bs(u,p,v);break;case 18:X&&nr!==null&&(Uo?Vn(nr,v.stateNode):g0(nr,v.stateNode));break;case 4:X?(C=nr,k=Uo,nr=v.stateNode.containerInfo,Uo=!0,bs(u,p,v),nr=C,Uo=k):(Z&&(C=v.stateNode.containerInfo,k=pn(C),Wt(C,k)),bs(u,p,v));break;case 0:case 11:case 14:case 15:if(!ur&&(C=v.updateQueue,C!==null&&(C=C.lastEffect,C!==null))){k=C=C.next;do{var P=k,F=P.destroy;P=P.tag,F!==void 0&&(P&2||P&4)&&ov(v,p,F),k=k.next}while(k!==C)}bs(u,p,v);break;case 1:if(!ur&&(Di(v,p),C=v.stateNode,typeof C.componentWillUnmount=="function"))try{C.props=v.memoizedProps,C.state=v.memoizedState,C.componentWillUnmount()}catch(ie){hn(v,p,ie)}bs(u,p,v);break;case 21:bs(u,p,v);break;case 22:v.mode&1?(ur=(C=ur)||v.memoizedState!==null,bs(u,p,v),ur=C):bs(u,p,v);break;default:bs(u,p,v)}}function dw(u){var p=u.updateQueue;if(p!==null){u.updateQueue=null;var v=u.stateNode;v===null&&(v=u.stateNode=new XD),p.forEach(function(C){var k=sR.bind(null,u,C);v.has(C)||(v.add(C),C.then(k,k))})}}function Go(u,p){var v=p.deletions;if(v!==null)for(var C=0;C";case rp:return":has("+(dv(u)||"")+")";case op:return'[role="'+u.value+'"]';case ap:return'"'+u.value+'"';case sp:return'[data-testname="'+u.value+'"]';default:throw Error(l(365))}}function vw(u,p){var v=[];u=[u,0];for(var C=0;Ck&&(k=F),C&=~P}if(C=k,C=Qn()-C,C=(120>C?120:480>C?480:1080>C?1080:1920>C?1920:3e3>C?3e3:4320>C?4320:1960*ZD(C/1960))-C,10u?16:u,Aa===null)var C=!1;else{if(u=Aa,Aa=null,dp=0,It&6)throw Error(l(331));var k=It;for(It|=4,Ke=u.current;Ke!==null;){var P=Ke,F=P.child;if(Ke.flags&16){var ie=P.deletions;if(ie!==null){for(var ge=0;geQn()-hv?Dl(u,0):mv|=v),Or(u,p)}function _w(u,p){p===0&&(u.mode&1?(p=Mf,Mf<<=1,!(Mf&130023424)&&(Mf=4194304)):p=1);var v=dr();u=ms(u,p),u!==null&&(bu(u,p,v),Or(u,v))}function oR(u){var p=u.memoizedState,v=0;p!==null&&(v=p.retryLane),_w(u,v)}function sR(u,p){var v=0;switch(u.tag){case 13:var C=u.stateNode,k=u.memoizedState;k!==null&&(v=k.retryLane);break;case 19:C=u.stateNode;break;default:throw Error(l(314))}C!==null&&C.delete(p),_w(u,v)}var Iw;Iw=function(u,p,v){if(u!==null)if(u.memoizedProps!==p.pendingProps||$n.current)Er=!0;else{if(!(u.lanes&v)&&!(p.flags&128))return Er=!1,GD(u,p,v);Er=!!(u.flags&131072)}else Er=!1,mn&&p.flags&1048576&&oC(p,Tf,p.index);switch(p.lanes=0,p.tag){case 2:var C=p.type;Yf(u,p),u=p.pendingProps;var k=wi(p,an.current);Ii(p,v),k=V0(null,p,C,u,k,v);var P=U0();return p.flags|=1,typeof k=="object"&&k!==null&&typeof k.render=="function"&&k.$$typeof===void 0?(p.tag=1,p.memoizedState=null,p.updateQueue=null,Pr(C)?(P=!0,Pf(p)):P=!1,p.memoizedState=k.state!==null&&k.state!==void 0?k.state:null,T0(p),k.updater=Hf,p.stateNode=k,k._reactInternals=p,$0(p,C,u,v),p=J0(null,p,C,!0,P,v)):(p.tag=0,mn&&P&&j0(p),xr(null,p,k,v),p=p.child),p;case 16:C=p.elementType;e:{switch(Yf(u,p),u=p.pendingProps,k=C._init,C=k(C._payload),p.type=C,k=p.tag=lR(C),u=Vo(C,u),k){case 0:p=Z0(null,p,C,u,v);break e;case 1:p=JC(null,p,C,u,v);break e;case 11:p=qC(null,p,C,u,v);break e;case 14:p=XC(null,p,C,Vo(C.type,u),v);break e}throw Error(l(306,C,""))}return p;case 0:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),Z0(u,p,C,k,v);case 1:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),JC(u,p,C,k,v);case 3:e:{if(ew(p),u===null)throw Error(l(387));C=p.pendingProps,P=p.memoizedState,k=P.element,dC(u,p),Bf(p,C,null,v);var F=p.memoizedState;if(C=F.element,me&&P.isDehydrated)if(P={element:C,isDehydrated:!1,cache:F.cache,pendingSuspenseBoundaries:F.pendingSuspenseBoundaries,transitions:F.transitions},p.updateQueue.baseState=P,p.memoizedState=P,p.flags&256){k=Oi(Error(l(423)),p),p=tw(u,p,C,v,k);break e}else if(C!==k){k=Oi(Error(l(424)),p),p=tw(u,p,C,v,k);break e}else for(me&&(uo=Je(p.stateNode.containerInfo),Xr=p,mn=!0,Wo=null,xu=!1),v=yC(p,null,C,v),p.child=v;v;)v.flags=v.flags&-3|4096,v=v.sibling;else{if(ji(),C===k){p=Ks(u,p,v);break e}xr(u,p,C,v)}p=p.child}return p;case 5:return CC(p),u===null&&P0(p),C=p.type,k=p.pendingProps,P=u!==null?u.memoizedProps:null,F=k.children,A(C,k)?F=null:P!==null&&A(C,P)&&(p.flags|=32),ZC(u,p),xr(u,p,F,v),p.child;case 6:return u===null&&P0(p),null;case 13:return nw(u,p,v);case 4:return L0(p,p.stateNode.containerInfo),C=p.pendingProps,u===null?p.child=Pi(p,null,C,v):xr(u,p,C,v),p.child;case 11:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),qC(u,p,C,k,v);case 7:return xr(u,p,p.pendingProps,v),p.child;case 8:return xr(u,p,p.pendingProps.children,v),p.child;case 12:return xr(u,p,p.pendingProps.children,v),p.child;case 10:e:{if(C=p.type._context,k=p.pendingProps,P=p.memoizedProps,F=k.value,cC(p,C,F),P!==null)if(Ho(P.value,F)){if(P.children===k.children&&!$n.current){p=Ks(u,p,v);break e}}else for(P=p.child,P!==null&&(P.return=p);P!==null;){var ie=P.dependencies;if(ie!==null){F=P.child;for(var ge=ie.firstContext;ge!==null;){if(ge.context===C){if(P.tag===1){ge=Gs(-1,v&-v),ge.tag=2;var Oe=P.updateQueue;if(Oe!==null){Oe=Oe.shared;var Ye=Oe.pending;Ye===null?ge.next=ge:(ge.next=Ye.next,Ye.next=ge),Oe.pending=ge}}P.lanes|=v,ge=P.alternate,ge!==null&&(ge.lanes|=v),R0(P.return,v,p),ie.lanes|=v;break}ge=ge.next}}else if(P.tag===10)F=P.type===p.type?null:P.child;else if(P.tag===18){if(F=P.return,F===null)throw Error(l(341));F.lanes|=v,ie=F.alternate,ie!==null&&(ie.lanes|=v),R0(F,v,p),F=P.sibling}else F=P.child;if(F!==null)F.return=P;else for(F=P;F!==null;){if(F===p){F=null;break}if(P=F.sibling,P!==null){P.return=F.return,F=P;break}F=F.return}P=F}xr(u,p,k.children,v),p=p.child}return p;case 9:return k=p.type,C=p.pendingProps.children,Ii(p,v),k=fo(k),C=C(k),p.flags|=1,xr(u,p,C,v),p.child;case 14:return C=p.type,k=Vo(C,p.pendingProps),k=Vo(C.type,k),XC(u,p,C,k,v);case 15:return QC(u,p,p.type,p.pendingProps,v);case 17:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),Yf(u,p),p.tag=1,Pr(C)?(u=!0,Pf(p)):u=!1,Ii(p,v),gC(p,C,k),$0(p,C,k,v),J0(null,p,C,!0,u,v);case 19:return ow(u,p,v);case 22:return YC(u,p,v)}throw Error(l(156,p.tag))};function Pw(u,p){return C0(u,p)}function aR(u,p,v,C){this.tag=u,this.key=v,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=p,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=C,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function go(u,p,v,C){return new aR(u,p,v,C)}function Sv(u){return u=u.prototype,!(!u||!u.isReactComponent)}function lR(u){if(typeof u=="function")return Sv(u)?1:0;if(u!=null){if(u=u.$$typeof,u===x)return 11;if(u===j)return 14}return 2}function $a(u,p){var v=u.alternate;return v===null?(v=go(u.tag,p,u.key,u.mode),v.elementType=u.elementType,v.type=u.type,v.stateNode=u.stateNode,v.alternate=u,u.alternate=v):(v.pendingProps=p,v.type=u.type,v.flags=0,v.subtreeFlags=0,v.deletions=null),v.flags=u.flags&14680064,v.childLanes=u.childLanes,v.lanes=u.lanes,v.child=u.child,v.memoizedProps=u.memoizedProps,v.memoizedState=u.memoizedState,v.updateQueue=u.updateQueue,p=u.dependencies,v.dependencies=p===null?null:{lanes:p.lanes,firstContext:p.firstContext},v.sibling=u.sibling,v.index=u.index,v.ref=u.ref,v}function hp(u,p,v,C,k,P){var F=2;if(C=u,typeof u=="function")Sv(u)&&(F=1);else if(typeof u=="string")F=5;else e:switch(u){case m:return Tl(v.children,k,P,p);case h:F=8,k|=8;break;case g:return u=go(12,v,p,k|2),u.elementType=g,u.lanes=P,u;case w:return u=go(13,v,p,k),u.elementType=w,u.lanes=P,u;case S:return u=go(19,v,p,k),u.elementType=S,u.lanes=P,u;case I:return gp(v,k,P,p);default:if(typeof u=="object"&&u!==null)switch(u.$$typeof){case b:F=10;break e;case y:F=9;break e;case x:F=11;break e;case j:F=14;break e;case _:F=16,C=null;break e}throw Error(l(130,u==null?u:typeof u,""))}return p=go(F,v,p,k),p.elementType=u,p.type=C,p.lanes=P,p}function Tl(u,p,v,C){return u=go(7,u,C,p),u.lanes=v,u}function gp(u,p,v,C){return u=go(22,u,C,p),u.elementType=I,u.lanes=v,u.stateNode={isHidden:!1},u}function kv(u,p,v){return u=go(6,u,null,p),u.lanes=v,u}function jv(u,p,v){return p=go(4,u.children!==null?u.children:[],u.key,p),p.lanes=v,p.stateNode={containerInfo:u.containerInfo,pendingChildren:null,implementation:u.implementation},p}function iR(u,p,v,C,k){this.tag=p,this.containerInfo=u,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=z,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=x0(0),this.expirationTimes=x0(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=x0(0),this.identifierPrefix=C,this.onRecoverableError=k,me&&(this.mutableSourceEagerHydrationData=null)}function Ew(u,p,v,C,k,P,F,ie,ge){return u=new iR(u,p,v,ie,ge),p===1?(p=1,P===!0&&(p|=8)):p=0,P=go(3,null,null,p),u.current=P,P.stateNode=u,P.memoizedState={element:C,isDehydrated:v,cache:null,transitions:null,pendingSuspenseBoundaries:null},T0(P),u}function Mw(u){if(!u)return lr;u=u._reactInternals;e:{if(N(u)!==u||u.tag!==1)throw Error(l(170));var p=u;do{switch(p.tag){case 3:p=p.stateNode.context;break e;case 1:if(Pr(p.type)){p=p.stateNode.__reactInternalMemoizedMergedChildContext;break e}}p=p.return}while(p!==null);throw Error(l(171))}if(u.tag===1){var v=u.type;if(Pr(v))return Z2(u,v,p)}return p}function Ow(u){var p=u._reactInternals;if(p===void 0)throw typeof u.render=="function"?Error(l(188)):(u=Object.keys(u).join(","),Error(l(268,u)));return u=U(p),u===null?null:u.stateNode}function Dw(u,p){if(u=u.memoizedState,u!==null&&u.dehydrated!==null){var v=u.retryLane;u.retryLane=v!==0&&v=Oe&&P>=xt&&k<=Ye&&F<=He){u.splice(p,1);break}else if(C!==Oe||v.width!==ge.width||HeF){if(!(P!==xt||v.height!==ge.height||Yek)){Oe>C&&(ge.width+=Oe-C,ge.x=C),YeP&&(ge.height+=xt-P,ge.y=P),Hev&&(v=F)),F ")+` + +No matching component was found for: + `)+u.join(" > ")}return null},n.getPublicRootInstance=function(u){if(u=u.current,!u.child)return null;switch(u.child.tag){case 5:return Q(u.child.stateNode);default:return u.child.stateNode}},n.injectIntoDevTools=function(u){if(u={bundleType:u.bundleType,version:u.version,rendererPackageName:u.rendererPackageName,rendererConfig:u.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:c.ReactCurrentDispatcher,findHostInstanceByFiber:cR,findFiberByHostInstance:u.findFiberByHostInstance||uR,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0"},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")u=!1;else{var p=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(p.isDisabled||!p.supportsFiber)u=!0;else{try{Df=p.inject(u),fs=p}catch{}u=!!p.checkDCE}}return u},n.isAlreadyRendering=function(){return!1},n.observeVisibleRects=function(u,p,v,C){if(!$e)throw Error(l(363));u=fv(u,p);var k=dt(u,v,C).disconnect;return{disconnect:function(){k()}}},n.registerMutableSourceForHydration=function(u,p){var v=p._getVersion;v=v(p._source),u.mutableSourceEagerHydrationData==null?u.mutableSourceEagerHydrationData=[p,v]:u.mutableSourceEagerHydrationData.push(p,v)},n.runWithPriority=function(u,p){var v=Lt;try{return Lt=u,p()}finally{Lt=v}},n.shouldError=function(){return null},n.shouldSuspend=function(){return!1},n.updateContainer=function(u,p,v,C){var k=p.current,P=dr(),F=Ta(k);return v=Mw(v),p.context===null?p.context=v:p.pendingContext=v,p=Gs(P,F),p.payload={element:u},C=C===void 0?null:C,C!==null&&(p.callback=C),u=Da(k,p,F),u!==null&&(ho(u,k,F,P),zf(u,k,F)),F},n};cD.exports=k1e;var j1e=cD.exports;const _1e=Bd(j1e);var uD={exports:{}},bi={};/** + * @license React + * react-reconciler-constants.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */bi.ConcurrentRoot=1;bi.ContinuousEventPriority=4;bi.DefaultEventPriority=16;bi.DiscreteEventPriority=1;bi.IdleEventPriority=536870912;bi.LegacyRoot=0;uD.exports=bi;var dD=uD.exports;const J_={children:!0,ref:!0,key:!0,style:!0,forwardedRef:!0,unstable_applyCache:!0,unstable_applyDrawHitFromCache:!0};let eI=!1,tI=!1;const X2=".react-konva-event",I1e=`ReactKonva: You have a Konva node with draggable = true and position defined but no onDragMove or onDragEnd events are handled. +Position of a node will be changed during drag&drop, so you should update state of the react app as well. +Consider to add onDragMove or onDragEnd events. +For more info see: https://github.com/konvajs/react-konva/issues/256 +`,P1e=`ReactKonva: You are using "zIndex" attribute for a Konva node. +react-konva may get confused with ordering. Just define correct order of elements in your render function of a component. +For more info see: https://github.com/konvajs/react-konva/issues/194 +`,E1e={};function m0(e,t,n=E1e){if(!eI&&"zIndex"in t&&(console.warn(P1e),eI=!0),!tI&&t.draggable){var r=t.x!==void 0||t.y!==void 0,o=t.onDragEnd||t.onDragMove;r&&!o&&(console.warn(I1e),tI=!0)}for(var s in n)if(!J_[s]){var l=s.slice(0,2)==="on",c=n[s]!==t[s];if(l&&c){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),e.off(d,n[s])}var f=!t.hasOwnProperty(s);f&&e.setAttr(s,void 0)}var m=t._useStrictMode,h={},g=!1;const b={};for(var s in t)if(!J_[s]){var l=s.slice(0,2)==="on",y=n[s]!==t[s];if(l&&y){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),t[s]&&(b[d]=t[s])}!l&&(t[s]!==n[s]||m&&t[s]!==e.getAttr(s))&&(g=!0,h[s]=t[s])}g&&(e.setAttrs(h),jl(e));for(var d in b)e.on(d+X2,b[d])}function jl(e){if(!g$.Konva.autoDrawEnabled){var t=e.getLayer()||e.getStage();t&&t.batchDraw()}}const fD={},M1e={};Fd.Node.prototype._applyProps=m0;function O1e(e,t){if(typeof t=="string"){console.error(`Do not use plain text as child of Konva.Node. You are using text: ${t}`);return}e.add(t),jl(e)}function D1e(e,t,n){let r=Fd[e];r||(console.error(`Konva has no node with the type ${e}. Group will be used instead. If you use minimal version of react-konva, just import required nodes into Konva: "import "konva/lib/shapes/${e}" If you want to render DOM elements as part of canvas tree take a look into this demo: https://konvajs.github.io/docs/react/DOM_Portal.html`),r=Fd.Group);const o={},s={};for(var l in t){var c=l.slice(0,2)==="on";c?s[l]=t[l]:o[l]=t[l]}const d=new r(o);return m0(d,s),d}function R1e(e,t,n){console.error(`Text components are not supported for now in ReactKonva. Your text is: "${e}"`)}function A1e(e,t,n){return!1}function T1e(e){return e}function N1e(){return null}function $1e(){return null}function L1e(e,t,n,r){return M1e}function F1e(){}function z1e(e){}function B1e(e,t){return!1}function H1e(){return fD}function W1e(){return fD}const V1e=setTimeout,U1e=clearTimeout,G1e=-1;function K1e(e,t){return!1}const q1e=!1,X1e=!0,Q1e=!0;function Y1e(e,t){t.parent===e?t.moveToTop():e.add(t),jl(e)}function Z1e(e,t){t.parent===e?t.moveToTop():e.add(t),jl(e)}function pD(e,t,n){t._remove(),e.add(t),t.setZIndex(n.getZIndex()),jl(e)}function J1e(e,t,n){pD(e,t,n)}function ebe(e,t){t.destroy(),t.off(X2),jl(e)}function tbe(e,t){t.destroy(),t.off(X2),jl(e)}function nbe(e,t,n){console.error(`Text components are not yet supported in ReactKonva. You text is: "${n}"`)}function rbe(e,t,n){}function obe(e,t,n,r,o){m0(e,o,r)}function sbe(e){e.hide(),jl(e)}function abe(e){}function lbe(e,t){(t.visible==null||t.visible)&&e.show()}function ibe(e,t){}function cbe(e){}function ube(){}const dbe=()=>dD.DefaultEventPriority,fbe=Object.freeze(Object.defineProperty({__proto__:null,appendChild:Y1e,appendChildToContainer:Z1e,appendInitialChild:O1e,cancelTimeout:U1e,clearContainer:cbe,commitMount:rbe,commitTextUpdate:nbe,commitUpdate:obe,createInstance:D1e,createTextInstance:R1e,detachDeletedInstance:ube,finalizeInitialChildren:A1e,getChildHostContext:W1e,getCurrentEventPriority:dbe,getPublicInstance:T1e,getRootHostContext:H1e,hideInstance:sbe,hideTextInstance:abe,idlePriority:sm.unstable_IdlePriority,insertBefore:pD,insertInContainerBefore:J1e,isPrimaryRenderer:q1e,noTimeout:G1e,now:sm.unstable_now,prepareForCommit:N1e,preparePortalMount:$1e,prepareUpdate:L1e,removeChild:ebe,removeChildFromContainer:tbe,resetAfterCommit:F1e,resetTextContent:z1e,run:sm.unstable_runWithPriority,scheduleTimeout:V1e,shouldDeprioritizeSubtree:B1e,shouldSetTextContent:K1e,supportsMutation:Q1e,unhideInstance:lbe,unhideTextInstance:ibe,warnsIfNotActing:X1e},Symbol.toStringTag,{value:"Module"}));var pbe=Object.defineProperty,mbe=Object.defineProperties,hbe=Object.getOwnPropertyDescriptors,nI=Object.getOwnPropertySymbols,gbe=Object.prototype.hasOwnProperty,vbe=Object.prototype.propertyIsEnumerable,rI=(e,t,n)=>t in e?pbe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,oI=(e,t)=>{for(var n in t||(t={}))gbe.call(t,n)&&rI(e,n,t[n]);if(nI)for(var n of nI(t))vbe.call(t,n)&&rI(e,n,t[n]);return e},bbe=(e,t)=>mbe(e,hbe(t));function mD(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){const o=mD(r,t,n);if(o)return o;r=t?null:r.sibling}}function hD(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}const Q2=hD(i.createContext(null));class gD extends i.Component{render(){return i.createElement(Q2.Provider,{value:this._reactInternals},this.props.children)}}const{ReactCurrentOwner:sI,ReactCurrentDispatcher:aI}=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function xbe(){const e=i.useContext(Q2);if(e===null)throw new Error("its-fine: useFiber must be called within a !");const t=i.useId();return i.useMemo(()=>{for(const r of[sI==null?void 0:sI.current,e,e==null?void 0:e.alternate]){if(!r)continue;const o=mD(r,!1,s=>{let l=s.memoizedState;for(;l;){if(l.memoizedState===t)return!0;l=l.next}});if(o)return o}},[e,t])}function ybe(){var e,t;const n=xbe(),[r]=i.useState(()=>new Map);r.clear();let o=n;for(;o;){const s=(e=o.type)==null?void 0:e._context;s&&s!==Q2&&!r.has(s)&&r.set(s,(t=aI==null?void 0:aI.current)==null?void 0:t.readContext(hD(s))),o=o.return}return r}function Cbe(){const e=ybe();return i.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>i.createElement(t,null,i.createElement(n.Provider,bbe(oI({},r),{value:e.get(n)}))),t=>i.createElement(gD,oI({},t))),[e])}function wbe(e){const t=B.useRef({});return B.useLayoutEffect(()=>{t.current=e}),B.useLayoutEffect(()=>()=>{t.current={}},[]),t.current}const Sbe=e=>{const t=B.useRef(),n=B.useRef(),r=B.useRef(),o=wbe(e),s=Cbe(),l=c=>{const{forwardedRef:d}=e;d&&(typeof d=="function"?d(c):d.current=c)};return B.useLayoutEffect(()=>(n.current=new Fd.Stage({width:e.width,height:e.height,container:t.current}),l(n.current),r.current=td.createContainer(n.current,dD.LegacyRoot,!1,null),td.updateContainer(B.createElement(s,{},e.children),r.current),()=>{Fd.isBrowser&&(l(null),td.updateContainer(null,r.current,null),n.current.destroy())}),[]),B.useLayoutEffect(()=>{l(n.current),m0(n.current,e,o),td.updateContainer(B.createElement(s,{},e.children),r.current,null)}),B.createElement("div",{ref:t,id:e.id,accessKey:e.accessKey,className:e.className,role:e.role,style:e.style,tabIndex:e.tabIndex,title:e.title})},Gu="Layer",Ns="Group",$s="Rect",$l="Circle",Vh="Line",vD="Image",kbe="Text",jbe="Transformer",td=_1e(fbe);td.injectIntoDevTools({findHostInstanceByFiber:()=>null,bundleType:0,version:B.version,rendererPackageName:"react-konva"});const _be=B.forwardRef((e,t)=>B.createElement(gD,{},B.createElement(Sbe,{...e,forwardedRef:t}))),Ibe=fe(pe,({canvas:e})=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,stageDimensions:r,stageScale:o,shouldDarkenOutsideBoundingBox:s,stageCoordinates:l}=e;return{boundingBoxCoordinates:t,boundingBoxDimensions:n,shouldDarkenOutsideBoundingBox:s,stageCoordinates:l,stageDimensions:r,stageScale:o}}),Pbe=()=>{const{boundingBoxCoordinates:e,boundingBoxDimensions:t,shouldDarkenOutsideBoundingBox:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=H(Ibe);return a.jsxs(Ns,{children:[a.jsx($s,{offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fill:"rgba(0,0,0,0.4)",listening:!1,visible:n}),a.jsx($s,{x:e.x,y:e.y,width:t.width,height:t.height,fill:"rgb(255,255,255)",listening:!1,visible:n,globalCompositeOperation:"destination-out"})]})},Ebe=i.memo(Pbe),Mbe=fe([pe],({canvas:e})=>{const{stageScale:t,stageCoordinates:n,stageDimensions:r}=e;return{stageScale:t,stageCoordinates:n,stageDimensions:r}}),Obe=()=>{const{stageScale:e,stageCoordinates:t,stageDimensions:n}=H(Mbe),{colorMode:r}=ya(),[o,s]=i.useState([]),[l,c]=Zo("colors",["base.800","base.200"]),d=i.useCallback(f=>f/e,[e]);return i.useLayoutEffect(()=>{const{width:f,height:m}=n,{x:h,y:g}=t,b={x1:0,y1:0,x2:f,y2:m,offset:{x:d(h),y:d(g)}},y={x:Math.ceil(d(h)/64)*64,y:Math.ceil(d(g)/64)*64},x={x1:-y.x,y1:-y.y,x2:d(f)-y.x+64,y2:d(m)-y.y+64},S={x1:Math.min(b.x1,x.x1),y1:Math.min(b.y1,x.y1),x2:Math.max(b.x2,x.x2),y2:Math.max(b.y2,x.y2)},j=S.x2-S.x1,_=S.y2-S.y1,I=Math.round(j/64)+1,E=Math.round(_/64)+1,M=hS(0,I).map(R=>a.jsx(Vh,{x:S.x1+R*64,y:S.y1,points:[0,0,0,_],stroke:r==="dark"?l:c,strokeWidth:1},`x_${R}`)),D=hS(0,E).map(R=>a.jsx(Vh,{x:S.x1,y:S.y1+R*64,points:[0,0,j,0],stroke:r==="dark"?l:c,strokeWidth:1},`y_${R}`));s(M.concat(D))},[e,t,n,d,r,l,c]),a.jsx(Ns,{children:o})},Dbe=i.memo(Obe),Rbe=v$([pe],({system:e,canvas:t})=>{const{denoiseProgress:n}=e,{boundingBox:r}=t.layerState.stagingArea,{batchIds:o}=t;return{boundingBox:r,progressImage:n&&o.includes(n.batch_id)?n.progress_image:void 0}}),Abe=e=>{const{...t}=e,{progressImage:n,boundingBox:r}=H(Rbe),[o,s]=i.useState(null);return i.useEffect(()=>{if(!n)return;const l=new Image;l.onload=()=>{s(l)},l.src=n.dataURL},[n]),n&&r&&o?a.jsx(vD,{x:r.x,y:r.y,width:r.width,height:r.height,image:o,listening:!1,...t}):null},Tbe=i.memo(Abe),Ql=e=>{const{r:t,g:n,b:r,a:o}=e;return`rgba(${t}, ${n}, ${r}, ${o})`},Nbe=fe(pe,({canvas:e})=>{const{maskColor:t,stageCoordinates:n,stageDimensions:r,stageScale:o}=e;return{stageCoordinates:n,stageDimensions:r,stageScale:o,maskColorString:Ql(t)}}),lI=e=>`data:image/svg+xml;utf8, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`.replaceAll("black",e),$be=e=>{const{...t}=e,{maskColorString:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=H(Nbe),[l,c]=i.useState(null),[d,f]=i.useState(0),m=i.useRef(null),h=i.useCallback(()=>{f(d+1),setTimeout(h,500)},[d]);return i.useEffect(()=>{if(l)return;const g=new Image;g.onload=()=>{c(g)},g.src=lI(n)},[l,n]),i.useEffect(()=>{l&&(l.src=lI(n))},[l,n]),i.useEffect(()=>{const g=setInterval(()=>f(b=>(b+1)%5),50);return()=>clearInterval(g)},[]),!l||!Ni(r.x)||!Ni(r.y)||!Ni(s)||!Ni(o.width)||!Ni(o.height)?null:a.jsx($s,{ref:m,offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fillPatternImage:l,fillPatternOffsetY:Ni(d)?d:0,fillPatternRepeat:"repeat",fillPatternScale:{x:1/s,y:1/s},listening:!0,globalCompositeOperation:"source-in",...t})},Lbe=i.memo($be),Fbe=fe([pe],({canvas:e})=>({objects:e.layerState.objects})),zbe=e=>{const{...t}=e,{objects:n}=H(Fbe);return a.jsx(Ns,{listening:!1,...t,children:n.filter(b$).map((r,o)=>a.jsx(Vh,{points:r.points,stroke:"rgb(0,0,0)",strokeWidth:r.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:r.tool==="brush"?"source-over":"destination-out"},o))})},Bbe=i.memo(zbe);var Ll=i,Hbe=function(t,n,r){const o=Ll.useRef("loading"),s=Ll.useRef(),[l,c]=Ll.useState(0),d=Ll.useRef(),f=Ll.useRef(),m=Ll.useRef();return(d.current!==t||f.current!==n||m.current!==r)&&(o.current="loading",s.current=void 0,d.current=t,f.current=n,m.current=r),Ll.useLayoutEffect(function(){if(!t)return;var h=document.createElement("img");function g(){o.current="loaded",s.current=h,c(Math.random())}function b(){o.current="failed",s.current=void 0,c(Math.random())}return h.addEventListener("load",g),h.addEventListener("error",b),n&&(h.crossOrigin=n),r&&(h.referrerPolicy=r),h.src=t,function(){h.removeEventListener("load",g),h.removeEventListener("error",b)}},[t,n,r]),[s.current,o.current]};const Wbe=Bd(Hbe),Vbe=({canvasImage:e})=>{const[t,n,r,o]=Zo("colors",["base.400","base.500","base.700","base.900"]),s=ia(t,n),l=ia(r,o),{t:c}=W();return a.jsxs(Ns,{children:[a.jsx($s,{x:e.x,y:e.y,width:e.width,height:e.height,fill:s}),a.jsx(kbe,{x:e.x,y:e.y,width:e.width,height:e.height,align:"center",verticalAlign:"middle",fontFamily:'"Inter Variable", sans-serif',fontSize:e.width/16,fontStyle:"600",text:c("common.imageFailedToLoad"),fill:l})]})},Ube=i.memo(Vbe),Gbe=e=>{const{x:t,y:n,imageName:r}=e.canvasImage,{currentData:o,isError:s}=jo(r??Br),[l,c]=Wbe((o==null?void 0:o.image_url)??"",AI.get()?"use-credentials":"anonymous");return s||c==="failed"?a.jsx(Ube,{canvasImage:e.canvasImage}):a.jsx(vD,{x:t,y:n,image:l,listening:!1})},bD=i.memo(Gbe),Kbe=fe([pe],({canvas:e})=>{const{layerState:{objects:t}}=e;return{objects:t}}),qbe=()=>{const{objects:e}=H(Kbe);return e?a.jsx(Ns,{name:"outpainting-objects",listening:!1,children:e.map((t,n)=>{if(x$(t))return a.jsx(bD,{canvasImage:t},n);if(y$(t)){const r=a.jsx(Vh,{points:t.points,stroke:t.color?Ql(t.color):"rgb(0,0,0)",strokeWidth:t.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:t.tool==="brush"?"source-over":"destination-out"},n);return t.clip?a.jsx(Ns,{clipX:t.clip.x,clipY:t.clip.y,clipWidth:t.clip.width,clipHeight:t.clip.height,children:r},n):r}else{if(C$(t))return a.jsx($s,{x:t.x,y:t.y,width:t.width,height:t.height,fill:Ql(t.color)},n);if(w$(t))return a.jsx($s,{x:t.x,y:t.y,width:t.width,height:t.height,fill:"rgb(255, 255, 255)",globalCompositeOperation:"destination-out"},n)}})}):null},Xbe=i.memo(qbe),Qbe=fe([pe],({canvas:e})=>{const{layerState:t,shouldShowStagingImage:n,shouldShowStagingOutline:r,boundingBoxCoordinates:o,boundingBoxDimensions:s}=e,{selectedImageIndex:l,images:c,boundingBox:d}=t.stagingArea;return{currentStagingAreaImage:c.length>0&&l!==void 0?c[l]:void 0,isOnFirstImage:l===0,isOnLastImage:l===c.length-1,shouldShowStagingImage:n,shouldShowStagingOutline:r,x:(d==null?void 0:d.x)??o.x,y:(d==null?void 0:d.y)??o.y,width:(d==null?void 0:d.width)??s.width,height:(d==null?void 0:d.height)??s.height}}),Ybe=e=>{const{...t}=e,{currentStagingAreaImage:n,shouldShowStagingImage:r,shouldShowStagingOutline:o,x:s,y:l,width:c,height:d}=H(Qbe);return a.jsxs(Ns,{...t,children:[r&&n&&a.jsx(bD,{canvasImage:n}),o&&a.jsxs(Ns,{children:[a.jsx($s,{x:s,y:l,width:c,height:d,strokeWidth:1,stroke:"white",strokeScaleEnabled:!1}),a.jsx($s,{x:s,y:l,width:c,height:d,dash:[4,4],strokeWidth:1,stroke:"black",strokeScaleEnabled:!1})]})]})},Zbe=i.memo(Ybe),Jbe=fe([pe],({canvas:e})=>{const{layerState:{stagingArea:{images:t,selectedImageIndex:n}},shouldShowStagingOutline:r,shouldShowStagingImage:o}=e;return{currentIndex:n,total:t.length,currentStagingAreaImage:t.length>0?t[n]:void 0,shouldShowStagingImage:o,shouldShowStagingOutline:r}}),exe=()=>{const e=te(),{currentStagingAreaImage:t,shouldShowStagingImage:n,currentIndex:r,total:o}=H(Jbe),{t:s}=W(),l=i.useCallback(()=>{e(gS(!0))},[e]),c=i.useCallback(()=>{e(gS(!1))},[e]),d=i.useCallback(()=>e(S$()),[e]),f=i.useCallback(()=>e(k$()),[e]),m=i.useCallback(()=>e(j$()),[e]);tt(["left"],d,{enabled:()=>!0,preventDefault:!0}),tt(["right"],f,{enabled:()=>!0,preventDefault:!0}),tt(["enter"],()=>m,{enabled:()=>!0,preventDefault:!0});const{data:h}=jo((t==null?void 0:t.imageName)??Br),g=i.useCallback(()=>{e(_$(!n))},[e,n]),b=i.useCallback(()=>{h&&e(I$({imageDTO:h}))},[e,h]),y=i.useCallback(()=>{e(P$())},[e]);return t?a.jsxs($,{pos:"absolute",bottom:4,gap:2,w:"100%",align:"center",justify:"center",onMouseEnter:l,onMouseLeave:c,children:[a.jsxs($t,{isAttached:!0,borderRadius:"base",shadow:"dark-lg",children:[a.jsx(Fe,{tooltip:`${s("unifiedCanvas.previous")} (Left)`,"aria-label":`${s("unifiedCanvas.previous")} (Left)`,icon:a.jsx(dte,{}),onClick:d,colorScheme:"accent",isDisabled:!n}),a.jsx(Xe,{colorScheme:"base",pointerEvents:"none",isDisabled:!n,minW:20,children:`${r+1}/${o}`}),a.jsx(Fe,{tooltip:`${s("unifiedCanvas.next")} (Right)`,"aria-label":`${s("unifiedCanvas.next")} (Right)`,icon:a.jsx(fte,{}),onClick:f,colorScheme:"accent",isDisabled:!n})]}),a.jsxs($t,{isAttached:!0,borderRadius:"base",shadow:"dark-lg",children:[a.jsx(Fe,{tooltip:`${s("unifiedCanvas.accept")} (Enter)`,"aria-label":`${s("unifiedCanvas.accept")} (Enter)`,icon:a.jsx($M,{}),onClick:m,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s(n?"unifiedCanvas.showResultsOn":"unifiedCanvas.showResultsOff"),"aria-label":s(n?"unifiedCanvas.showResultsOn":"unifiedCanvas.showResultsOff"),"data-alert":!n,icon:n?a.jsx(Ete,{}):a.jsx(Pte,{}),onClick:g,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s("unifiedCanvas.saveToGallery"),"aria-label":s("unifiedCanvas.saveToGallery"),isDisabled:!h||!h.is_intermediate,icon:a.jsx(gf,{}),onClick:b,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s("unifiedCanvas.discardAll"),"aria-label":s("unifiedCanvas.discardAll"),icon:a.jsx(Nc,{}),onClick:y,colorScheme:"error",fontSize:20})]})]}):null},txe=i.memo(exe),uc=e=>Math.round(e*100)/100,nxe=()=>{const e=H(c=>c.canvas.layerState),t=H(c=>c.canvas.boundingBoxCoordinates),n=H(c=>c.canvas.boundingBoxDimensions),r=H(c=>c.canvas.isMaskEnabled),o=H(c=>c.canvas.shouldPreserveMaskedArea),[s,l]=i.useState();return i.useEffect(()=>{l(void 0)},[e,t,n,r,o]),nne(async()=>{const c=await E$(e,t,n,r,o);if(!c)return;const{baseImageData:d,maskImageData:f}=c,m=M$(d,f);l(m)},1e3,[e,t,n,r,o]),s},rxe=()=>{const e=nxe(),{t}=W(),n=i.useMemo(()=>({txt2img:t("common.txt2img"),img2img:t("common.img2img"),inpaint:t("common.inpaint"),outpaint:t("common.outpaint")}),[t]);return a.jsxs(Ie,{children:[t("accessibility.mode"),":"," ",e?n[e]:"..."]})},oxe=i.memo(rxe),sxe=fe([pe],({canvas:e})=>{const{cursorPosition:t}=e,{cursorX:n,cursorY:r}=t?{cursorX:t.x,cursorY:t.y}:{cursorX:-1,cursorY:-1};return{cursorCoordinatesString:`(${uc(n)}, ${uc(r)})`}});function axe(){const{cursorCoordinatesString:e}=H(sxe),{t}=W();return a.jsx(Ie,{children:`${t("unifiedCanvas.cursorPosition")}: ${e}`})}const fx="var(--invokeai-colors-warning-500)",lxe=fe([pe],({canvas:e})=>{const{stageDimensions:{width:t,height:n},stageCoordinates:{x:r,y:o},boundingBoxDimensions:{width:s,height:l},scaledBoundingBoxDimensions:{width:c,height:d},boundingBoxCoordinates:{x:f,y:m},stageScale:h,shouldShowCanvasDebugInfo:g,layer:b,boundingBoxScaleMethod:y,shouldPreserveMaskedArea:x}=e;let w="inherit";return(y==="none"&&(s<512||l<512)||y==="manual"&&c*d<512*512)&&(w=fx),{activeLayerColor:b==="mask"?fx:"inherit",layer:b,boundingBoxColor:w,boundingBoxCoordinatesString:`(${uc(f)}, ${uc(m)})`,boundingBoxDimensionsString:`${s}×${l}`,scaledBoundingBoxDimensionsString:`${c}×${d}`,canvasCoordinatesString:`${uc(r)}×${uc(o)}`,canvasDimensionsString:`${t}×${n}`,canvasScaleString:Math.round(h*100),shouldShowCanvasDebugInfo:g,shouldShowBoundingBox:y!=="auto",shouldShowScaledBoundingBox:y!=="none",shouldPreserveMaskedArea:x}}),ixe=()=>{const{activeLayerColor:e,layer:t,boundingBoxColor:n,boundingBoxCoordinatesString:r,boundingBoxDimensionsString:o,scaledBoundingBoxDimensionsString:s,shouldShowScaledBoundingBox:l,canvasCoordinatesString:c,canvasDimensionsString:d,canvasScaleString:f,shouldShowCanvasDebugInfo:m,shouldShowBoundingBox:h,shouldPreserveMaskedArea:g}=H(lxe),{t:b}=W();return a.jsxs($,{sx:{flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,opacity:.65,display:"flex",fontSize:"sm",padding:1,px:2,minWidth:48,margin:1,borderRadius:"base",pointerEvents:"none",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(oxe,{}),a.jsx(Ie,{style:{color:e},children:`${b("unifiedCanvas.activeLayer")}: ${b(`unifiedCanvas.${t}`)}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasScale")}: ${f}%`}),g&&a.jsxs(Ie,{style:{color:fx},children:[b("unifiedCanvas.preserveMaskedArea"),": ",b("common.on")]}),h&&a.jsx(Ie,{style:{color:n},children:`${b("unifiedCanvas.boundingBox")}: ${o}`}),l&&a.jsx(Ie,{style:{color:n},children:`${b("unifiedCanvas.scaledBoundingBox")}: ${s}`}),m&&a.jsxs(a.Fragment,{children:[a.jsx(Ie,{children:`${b("unifiedCanvas.boundingBoxPosition")}: ${r}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasDimensions")}: ${d}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasPosition")}: ${c}`}),a.jsx(axe,{})]})]})},cxe=i.memo(ixe),uxe=fe([pe],({canvas:e,generation:t})=>{const{boundingBoxCoordinates:n,boundingBoxDimensions:r,stageScale:o,isDrawing:s,isTransformingBoundingBox:l,isMovingBoundingBox:c,tool:d,shouldSnapToGrid:f}=e,{aspectRatio:m}=t;return{boundingBoxCoordinates:n,boundingBoxDimensions:r,isDrawing:s,isMovingBoundingBox:c,isTransformingBoundingBox:l,stageScale:o,shouldSnapToGrid:f,tool:d,hitStrokeWidth:20/o,aspectRatio:m}}),dxe=e=>{const{...t}=e,n=te(),{boundingBoxCoordinates:r,boundingBoxDimensions:o,isDrawing:s,isMovingBoundingBox:l,isTransformingBoundingBox:c,stageScale:d,shouldSnapToGrid:f,tool:m,hitStrokeWidth:h,aspectRatio:g}=H(uxe),b=i.useRef(null),y=i.useRef(null),[x,w]=i.useState(!1);i.useEffect(()=>{var G;!b.current||!y.current||(b.current.nodes([y.current]),(G=b.current.getLayer())==null||G.batchDraw())},[]);const S=64*d;tt("N",()=>{n(Mm(!f))});const j=i.useCallback(G=>{if(!f){n(Rv({x:Math.floor(G.target.x()),y:Math.floor(G.target.y())}));return}const q=G.target.x(),Y=G.target.y(),Q=kr(q,64),V=kr(Y,64);G.target.x(Q),G.target.y(V),n(Rv({x:Q,y:V}))},[n,f]),_=i.useCallback(()=>{if(!y.current)return;const G=y.current,q=G.scaleX(),Y=G.scaleY(),Q=Math.round(G.width()*q),V=Math.round(G.height()*Y),se=Math.round(G.x()),ee=Math.round(G.y());if(g){const le=kr(Q/g,64);n(es({width:Q,height:le}))}else n(es({width:Q,height:V}));n(Rv({x:f?Ku(se,64):se,y:f?Ku(ee,64):ee})),G.scaleX(1),G.scaleY(1)},[n,f,g]),I=i.useCallback((G,q,Y)=>{const Q=G.x%S,V=G.y%S;return{x:Ku(q.x,S)+Q,y:Ku(q.y,S)+V}},[S]),E=i.useCallback(()=>{n(Av(!0))},[n]),M=i.useCallback(()=>{n(Av(!1)),n(Tv(!1)),n(Sp(!1)),w(!1)},[n]),D=i.useCallback(()=>{n(Tv(!0))},[n]),R=i.useCallback(()=>{n(Av(!1)),n(Tv(!1)),n(Sp(!1)),w(!1)},[n]),N=i.useCallback(()=>{w(!0)},[]),O=i.useCallback(()=>{!c&&!l&&w(!1)},[l,c]),T=i.useCallback(()=>{n(Sp(!0))},[n]),U=i.useCallback(()=>{n(Sp(!1))},[n]);return a.jsxs(Ns,{...t,children:[a.jsx($s,{height:o.height,width:o.width,x:r.x,y:r.y,onMouseEnter:T,onMouseOver:T,onMouseLeave:U,onMouseOut:U}),a.jsx($s,{draggable:!0,fillEnabled:!1,height:o.height,hitStrokeWidth:h,listening:!s&&m==="move",onDragStart:D,onDragEnd:R,onDragMove:j,onMouseDown:D,onMouseOut:O,onMouseOver:N,onMouseEnter:N,onMouseUp:R,onTransform:_,onTransformEnd:M,ref:y,stroke:x?"rgba(255,255,255,0.7)":"white",strokeWidth:(x?8:1)/d,width:o.width,x:r.x,y:r.y}),a.jsx(jbe,{anchorCornerRadius:3,anchorDragBoundFunc:I,anchorFill:"rgba(212,216,234,1)",anchorSize:15,anchorStroke:"rgb(42,42,42)",borderDash:[4,4],borderEnabled:!0,borderStroke:"black",draggable:!1,enabledAnchors:m==="move"?void 0:[],flipEnabled:!1,ignoreStroke:!0,keepRatio:!1,listening:!s&&m==="move",onDragStart:D,onDragEnd:R,onMouseDown:E,onMouseUp:M,onTransformEnd:M,ref:b,rotateEnabled:!1})]})},fxe=i.memo(dxe),pxe=fe(pe,({canvas:e})=>{const{cursorPosition:t,brushSize:n,colorPickerColor:r,maskColor:o,brushColor:s,tool:l,layer:c,shouldShowBrush:d,isMovingBoundingBox:f,isTransformingBoundingBox:m,stageScale:h,stageDimensions:g,boundingBoxCoordinates:b,boundingBoxDimensions:y,shouldRestrictStrokesToBox:x}=e,w=x?{clipX:b.x,clipY:b.y,clipWidth:y.width,clipHeight:y.height}:{};return{cursorPosition:t,brushX:t?t.x:g.width/2,brushY:t?t.y:g.height/2,radius:n/2,colorPickerOuterRadius:vS/h,colorPickerInnerRadius:(vS-K1+1)/h,maskColorString:Ql({...o,a:.5}),brushColorString:Ql(s),colorPickerColorString:Ql(r),tool:l,layer:c,shouldShowBrush:d,shouldDrawBrushPreview:!(f||m||!t)&&d,strokeWidth:1.5/h,dotRadius:1.5/h,clip:w}}),mxe=e=>{const{...t}=e,{brushX:n,brushY:r,radius:o,maskColorString:s,tool:l,layer:c,shouldDrawBrushPreview:d,dotRadius:f,strokeWidth:m,brushColorString:h,colorPickerColorString:g,colorPickerInnerRadius:b,colorPickerOuterRadius:y,clip:x}=H(pxe);return d?a.jsxs(Ns,{listening:!1,...x,...t,children:[l==="colorPicker"?a.jsxs(a.Fragment,{children:[a.jsx($l,{x:n,y:r,radius:y,stroke:h,strokeWidth:K1,strokeScaleEnabled:!1}),a.jsx($l,{x:n,y:r,radius:b,stroke:g,strokeWidth:K1,strokeScaleEnabled:!1})]}):a.jsxs(a.Fragment,{children:[a.jsx($l,{x:n,y:r,radius:o,fill:c==="mask"?s:h,globalCompositeOperation:l==="eraser"?"destination-out":"source-out"}),a.jsx($l,{x:n,y:r,radius:o,stroke:"rgba(255,255,255,0.4)",strokeWidth:m*2,strokeEnabled:!0,listening:!1}),a.jsx($l,{x:n,y:r,radius:o,stroke:"rgba(0,0,0,1)",strokeWidth:m,strokeEnabled:!0,listening:!1})]}),a.jsx($l,{x:n,y:r,radius:f*2,fill:"rgba(255,255,255,0.4)",listening:!1}),a.jsx($l,{x:n,y:r,radius:f,fill:"rgba(0,0,0,1)",listening:!1})]}):null},hxe=i.memo(mxe),gxe=fe([pe,Lo],({canvas:e},t)=>{const{isMaskEnabled:n,stageScale:r,shouldShowBoundingBox:o,isTransformingBoundingBox:s,isMouseOverBoundingBox:l,isMovingBoundingBox:c,stageDimensions:d,stageCoordinates:f,tool:m,isMovingStage:h,shouldShowIntermediates:g,shouldShowGrid:b,shouldRestrictStrokesToBox:y,shouldAntialias:x}=e;let w="none";return m==="move"||t?h?w="grabbing":w="grab":s?w=void 0:y&&!l&&(w="default"),{isMaskEnabled:n,isModifyingBoundingBox:s||c,shouldShowBoundingBox:o,shouldShowGrid:b,stageCoordinates:f,stageCursor:w,stageDimensions:d,stageScale:r,tool:m,isStaging:t,shouldShowIntermediates:g,shouldAntialias:x}}),vxe=je(_be,{shouldForwardProp:e=>!["sx"].includes(e)}),bxe=()=>{const{isMaskEnabled:e,isModifyingBoundingBox:t,shouldShowBoundingBox:n,shouldShowGrid:r,stageCoordinates:o,stageCursor:s,stageDimensions:l,stageScale:c,tool:d,isStaging:f,shouldShowIntermediates:m,shouldAntialias:h}=H(gxe);p1e();const g=te(),b=i.useRef(null),y=i.useRef(null),x=i.useRef(null),w=i.useCallback(G=>{O$(G),y.current=G},[]),S=i.useCallback(G=>{D$(G),x.current=G},[]),j=i.useRef({x:0,y:0}),_=i.useRef(!1),I=w1e(y),E=h1e(y),M=y1e(y,_),D=v1e(y,_,j),R=b1e(),{handleDragStart:N,handleDragMove:O,handleDragEnd:T}=d1e(),U=i.useCallback(G=>G.evt.preventDefault(),[]);return i.useEffect(()=>{if(!b.current)return;const G=new ResizeObserver(Q=>{for(const V of Q)if(V.contentBoxSize){const{width:se,height:ee}=V.contentRect;g(bS({width:se,height:ee}))}});G.observe(b.current);const{width:q,height:Y}=b.current.getBoundingClientRect();return g(bS({width:q,height:Y})),()=>{G.disconnect()}},[g]),a.jsxs($,{id:"canvas-container",ref:b,sx:{position:"relative",height:"100%",width:"100%",borderRadius:"base"},children:[a.jsx(Ie,{sx:{position:"absolute"},children:a.jsxs(vxe,{tabIndex:-1,ref:w,sx:{outline:"none",overflow:"hidden",cursor:s||void 0,canvas:{outline:"none"}},x:o.x,y:o.y,width:l.width,height:l.height,scale:{x:c,y:c},onTouchStart:E,onTouchMove:D,onTouchEnd:M,onMouseDown:E,onMouseLeave:R,onMouseMove:D,onMouseUp:M,onDragStart:N,onDragMove:O,onDragEnd:T,onContextMenu:U,onWheel:I,draggable:(d==="move"||f)&&!t,children:[a.jsx(Gu,{id:"grid",visible:r,children:a.jsx(Dbe,{})}),a.jsx(Gu,{id:"base",ref:S,listening:!1,imageSmoothingEnabled:h,children:a.jsx(Xbe,{})}),a.jsxs(Gu,{id:"mask",visible:e&&!f,listening:!1,children:[a.jsx(Bbe,{visible:!0,listening:!1}),a.jsx(Lbe,{listening:!1})]}),a.jsx(Gu,{children:a.jsx(Ebe,{})}),a.jsxs(Gu,{id:"preview",imageSmoothingEnabled:h,children:[!f&&a.jsx(hxe,{visible:d!=="move",listening:!1}),a.jsx(Zbe,{visible:f}),m&&a.jsx(Tbe,{}),a.jsx(fxe,{visible:n&&!f})]})]})}),a.jsx(cxe,{}),a.jsx(txe,{})]})},xxe=i.memo(bxe);function yxe(e,t,n=250){const[r,o]=i.useState(0);return i.useEffect(()=>{const s=setTimeout(()=>{r===1&&e(),o(0)},n);return r===2&&t(),()=>clearTimeout(s)},[r,e,t,n]),()=>o(s=>s+1)}const O1={width:6,height:6,borderColor:"base.100"},Cxe={".react-colorful__hue-pointer":O1,".react-colorful__saturation-pointer":O1,".react-colorful__alpha-pointer":O1,gap:2,flexDir:"column"},om="4.2rem",wxe=e=>{const{color:t,onChange:n,withNumberInput:r,...o}=e,s=i.useCallback(f=>n({...t,r:f}),[t,n]),l=i.useCallback(f=>n({...t,g:f}),[t,n]),c=i.useCallback(f=>n({...t,b:f}),[t,n]),d=i.useCallback(f=>n({...t,a:f}),[t,n]);return a.jsxs($,{sx:Cxe,children:[a.jsx(hO,{color:t,onChange:n,style:{width:"100%"},...o}),r&&a.jsxs($,{children:[a.jsx(_s,{value:t.r,onChange:s,min:0,max:255,step:1,label:"Red",w:om}),a.jsx(_s,{value:t.g,onChange:l,min:0,max:255,step:1,label:"Green",w:om}),a.jsx(_s,{value:t.b,onChange:c,min:0,max:255,step:1,label:"Blue",w:om}),a.jsx(_s,{value:t.a,onChange:d,step:.1,min:0,max:1,label:"Alpha",w:om,isInteger:!1})]})]})},xD=i.memo(wxe),Sxe=fe([pe,Lo],({canvas:e},t)=>{const{maskColor:n,layer:r,isMaskEnabled:o,shouldPreserveMaskedArea:s}=e;return{layer:r,maskColor:n,maskColorString:Ql(n),isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:t}}),kxe=()=>{const e=te(),{t}=W(),{layer:n,maskColor:r,isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:l}=H(Sxe);tt(["q"],()=>{c()},{enabled:()=>!l,preventDefault:!0},[n]),tt(["shift+c"],()=>{d()},{enabled:()=>!l,preventDefault:!0},[]),tt(["h"],()=>{f()},{enabled:()=>!l,preventDefault:!0},[o]);const c=i.useCallback(()=>{e(S3(n==="mask"?"base":"mask"))},[e,n]),d=i.useCallback(()=>{e(y3())},[e]),f=i.useCallback(()=>{e(Wx(!o))},[e,o]),m=i.useCallback(async()=>{e(R$())},[e]),h=i.useCallback(b=>{e(A$(b.target.checked))},[e]),g=i.useCallback(b=>{e(T$(b))},[e]);return a.jsx(xf,{triggerComponent:a.jsx($t,{children:a.jsx(Fe,{"aria-label":t("unifiedCanvas.maskingOptions"),tooltip:t("unifiedCanvas.maskingOptions"),icon:a.jsx(UM,{}),isChecked:n==="mask",isDisabled:l})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(yr,{label:`${t("unifiedCanvas.enableMask")} (H)`,isChecked:o,onChange:f}),a.jsx(yr,{label:t("unifiedCanvas.preserveMaskedArea"),isChecked:s,onChange:h}),a.jsx(Ie,{sx:{paddingTop:2,paddingBottom:2},children:a.jsx(xD,{color:r,onChange:g})}),a.jsx(Xe,{size:"sm",leftIcon:a.jsx(gf,{}),onClick:m,children:t("unifiedCanvas.saveMask")}),a.jsx(Xe,{size:"sm",leftIcon:a.jsx(ao,{}),onClick:d,children:t("unifiedCanvas.clearMask")})]})})},jxe=i.memo(kxe),_xe=fe([pe,tr],({canvas:e},t)=>{const{futureLayerStates:n}=e;return{canRedo:n.length>0,activeTabName:t}});function Ixe(){const e=te(),{canRedo:t,activeTabName:n}=H(_xe),{t:r}=W(),o=i.useCallback(()=>{e(N$())},[e]);return tt(["meta+shift+z","ctrl+shift+z","control+y","meta+y"],()=>{o()},{enabled:()=>t,preventDefault:!0},[n,t]),a.jsx(Fe,{"aria-label":`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,tooltip:`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,icon:a.jsx(Vte,{}),onClick:o,isDisabled:!t})}const Pxe=()=>{const e=H(Lo),t=te(),{t:n}=W(),r=i.useCallback(()=>t($$()),[t]);return a.jsxs(t0,{title:n("unifiedCanvas.clearCanvasHistory"),acceptCallback:r,acceptButtonText:n("unifiedCanvas.clearHistory"),triggerComponent:a.jsx(Xe,{size:"sm",leftIcon:a.jsx(ao,{}),isDisabled:e,children:n("unifiedCanvas.clearCanvasHistory")}),children:[a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryMessage")}),a.jsx("br",{}),a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryConfirm")})]})},Exe=i.memo(Pxe),Mxe=fe([pe],({canvas:e})=>{const{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:l,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:f}=e;return{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:l,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:f}}),Oxe=()=>{const e=te(),{t}=W(),{shouldAutoSave:n,shouldCropToBoundingBoxOnSave:r,shouldDarkenOutsideBoundingBox:o,shouldShowCanvasDebugInfo:s,shouldShowGrid:l,shouldShowIntermediates:c,shouldSnapToGrid:d,shouldRestrictStrokesToBox:f,shouldAntialias:m}=H(Mxe);tt(["n"],()=>{e(Mm(!d))},{enabled:!0,preventDefault:!0},[d]);const h=i.useCallback(I=>e(Mm(I.target.checked)),[e]),g=i.useCallback(I=>e(L$(I.target.checked)),[e]),b=i.useCallback(I=>e(F$(I.target.checked)),[e]),y=i.useCallback(I=>e(z$(I.target.checked)),[e]),x=i.useCallback(I=>e(B$(I.target.checked)),[e]),w=i.useCallback(I=>e(H$(I.target.checked)),[e]),S=i.useCallback(I=>e(W$(I.target.checked)),[e]),j=i.useCallback(I=>e(V$(I.target.checked)),[e]),_=i.useCallback(I=>e(U$(I.target.checked)),[e]);return a.jsx(xf,{isLazy:!1,triggerComponent:a.jsx(Fe,{tooltip:t("unifiedCanvas.canvasSettings"),"aria-label":t("unifiedCanvas.canvasSettings"),icon:a.jsx(QM,{})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(yr,{label:t("unifiedCanvas.showIntermediates"),isChecked:c,onChange:g}),a.jsx(yr,{label:t("unifiedCanvas.showGrid"),isChecked:l,onChange:b}),a.jsx(yr,{label:t("unifiedCanvas.snapToGrid"),isChecked:d,onChange:h}),a.jsx(yr,{label:t("unifiedCanvas.darkenOutsideSelection"),isChecked:o,onChange:y}),a.jsx(yr,{label:t("unifiedCanvas.autoSaveToGallery"),isChecked:n,onChange:x}),a.jsx(yr,{label:t("unifiedCanvas.saveBoxRegionOnly"),isChecked:r,onChange:w}),a.jsx(yr,{label:t("unifiedCanvas.limitStrokesToBox"),isChecked:f,onChange:S}),a.jsx(yr,{label:t("unifiedCanvas.showCanvasDebugInfo"),isChecked:s,onChange:j}),a.jsx(yr,{label:t("unifiedCanvas.antialiasing"),isChecked:m,onChange:_}),a.jsx(Exe,{})]})})},Dxe=i.memo(Oxe),Rxe=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,brushColor:r,brushSize:o}=e;return{tool:n,isStaging:t,brushColor:r,brushSize:o}}),Axe=()=>{const e=te(),{tool:t,brushColor:n,brushSize:r,isStaging:o}=H(Rxe),{t:s}=W();tt(["b"],()=>{l()},{enabled:()=>!o,preventDefault:!0},[]),tt(["e"],()=>{c()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["c"],()=>{d()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["shift+f"],()=>{f()},{enabled:()=>!o,preventDefault:!0}),tt(["delete","backspace"],()=>{m()},{enabled:()=>!o,preventDefault:!0}),tt(["BracketLeft"],()=>{r-5<=5?e(kp(Math.max(r-1,1))):e(kp(Math.max(r-5,1)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["BracketRight"],()=>{e(kp(Math.min(r+5,500)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["Shift+BracketLeft"],()=>{e(Nv({...n,a:Zl(n.a-.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]),tt(["Shift+BracketRight"],()=>{e(Nv({...n,a:Zl(n.a+.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]);const l=i.useCallback(()=>{e(fc("brush"))},[e]),c=i.useCallback(()=>{e(fc("eraser"))},[e]),d=i.useCallback(()=>{e(fc("colorPicker"))},[e]),f=i.useCallback(()=>{e(G$())},[e]),m=i.useCallback(()=>{e(K$())},[e]),h=i.useCallback(b=>{e(kp(b))},[e]),g=i.useCallback(b=>{e(Nv(b))},[e]);return a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.brush")} (B)`,tooltip:`${s("unifiedCanvas.brush")} (B)`,icon:a.jsx(zte,{}),isChecked:t==="brush"&&!o,onClick:l,isDisabled:o}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.eraser")} (E)`,tooltip:`${s("unifiedCanvas.eraser")} (E)`,icon:a.jsx(Ste,{}),isChecked:t==="eraser"&&!o,isDisabled:o,onClick:c}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,tooltip:`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,icon:a.jsx(Mte,{}),isDisabled:o,onClick:f}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,tooltip:`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,icon:a.jsx(nl,{style:{transform:"rotate(45deg)"}}),isDisabled:o,onClick:m}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.colorPicker")} (C)`,tooltip:`${s("unifiedCanvas.colorPicker")} (C)`,icon:a.jsx(Ite,{}),isChecked:t==="colorPicker"&&!o,isDisabled:o,onClick:d}),a.jsx(xf,{triggerComponent:a.jsx(Fe,{"aria-label":s("unifiedCanvas.brushOptions"),tooltip:s("unifiedCanvas.brushOptions"),icon:a.jsx(qM,{})}),children:a.jsxs($,{minWidth:60,direction:"column",gap:4,width:"100%",children:[a.jsx($,{gap:4,justifyContent:"space-between",children:a.jsx(nt,{label:s("unifiedCanvas.brushSize"),value:r,withInput:!0,onChange:h,sliderNumberInputProps:{max:500}})}),a.jsx(Ie,{sx:{width:"100%",paddingTop:2,paddingBottom:2},children:a.jsx(xD,{withNumberInput:!0,color:n,onChange:g})})]})})]})},Txe=i.memo(Axe),Nxe=fe([pe,tr],({canvas:e},t)=>{const{pastLayerStates:n}=e;return{canUndo:n.length>0,activeTabName:t}});function $xe(){const e=te(),{t}=W(),{canUndo:n,activeTabName:r}=H(Nxe),o=i.useCallback(()=>{e(q$())},[e]);return tt(["meta+z","ctrl+z"],()=>{o()},{enabled:()=>n,preventDefault:!0},[r,n]),a.jsx(Fe,{"aria-label":`${t("unifiedCanvas.undo")} (Ctrl+Z)`,tooltip:`${t("unifiedCanvas.undo")} (Ctrl+Z)`,icon:a.jsx(Ng,{}),onClick:o,isDisabled:!n})}const Lxe=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,shouldCropToBoundingBoxOnSave:r,layer:o,isMaskEnabled:s}=e;return{isStaging:t,isMaskEnabled:s,tool:n,layer:o,shouldCropToBoundingBoxOnSave:r}}),Fxe=()=>{const e=te(),{isStaging:t,isMaskEnabled:n,layer:r,tool:o}=H(Lxe),s=G1(),{t:l}=W(),{isClipboardAPIAvailable:c}=j7(),{getUploadButtonProps:d,getUploadInputProps:f}=S2({postUploadAction:{type:"SET_CANVAS_INITIAL_IMAGE"}});tt(["v"],()=>{m()},{enabled:()=>!t,preventDefault:!0},[]),tt(["r"],()=>{g()},{enabled:()=>!0,preventDefault:!0},[s]),tt(["shift+m"],()=>{y()},{enabled:()=>!t,preventDefault:!0},[s]),tt(["shift+s"],()=>{x()},{enabled:()=>!t,preventDefault:!0},[s]),tt(["meta+c","ctrl+c"],()=>{w()},{enabled:()=>!t&&c,preventDefault:!0},[s,c]),tt(["shift+d"],()=>{S()},{enabled:()=>!t,preventDefault:!0},[s]);const m=i.useCallback(()=>{e(fc("move"))},[e]),h=yxe(()=>g(!1),()=>g(!0)),g=(_=!1)=>{const I=G1();if(!I)return;const E=I.getClientRect({skipTransform:!0});e(eL({contentRect:E,shouldScaleTo1:_}))},b=i.useCallback(()=>{e(jI())},[e]),y=i.useCallback(()=>{e(X$())},[e]),x=i.useCallback(()=>{e(Q$())},[e]),w=i.useCallback(()=>{c&&e(Y$())},[e,c]),S=i.useCallback(()=>{e(Z$())},[e]),j=i.useCallback(_=>{const I=_;e(S3(I)),I==="mask"&&!n&&e(Wx(!0))},[e,n]);return a.jsxs($,{sx:{alignItems:"center",gap:2,flexWrap:"wrap"},children:[a.jsx(Ie,{w:24,children:a.jsx(yn,{tooltip:`${l("unifiedCanvas.layer")} (Q)`,value:r,data:J$,onChange:j,disabled:t})}),a.jsx(jxe,{}),a.jsx(Txe,{}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.move")} (V)`,tooltip:`${l("unifiedCanvas.move")} (V)`,icon:a.jsx(pte,{}),isChecked:o==="move"||t,onClick:m}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.resetView")} (R)`,tooltip:`${l("unifiedCanvas.resetView")} (R)`,icon:a.jsx(yte,{}),onClick:h})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.mergeVisible")} (Shift+M)`,tooltip:`${l("unifiedCanvas.mergeVisible")} (Shift+M)`,icon:a.jsx($te,{}),onClick:y,isDisabled:t}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.saveToGallery")} (Shift+S)`,tooltip:`${l("unifiedCanvas.saveToGallery")} (Shift+S)`,icon:a.jsx(gf,{}),onClick:x,isDisabled:t}),c&&a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,tooltip:`${l("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,icon:a.jsx(ru,{}),onClick:w,isDisabled:t}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.downloadAsImage")} (Shift+D)`,tooltip:`${l("unifiedCanvas.downloadAsImage")} (Shift+D)`,icon:a.jsx(ou,{}),onClick:S,isDisabled:t})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx($xe,{}),a.jsx(Ixe,{})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("common.upload")}`,tooltip:`${l("common.upload")}`,icon:a.jsx($g,{}),isDisabled:t,...d()}),a.jsx("input",{...f()}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.clearCanvas")}`,tooltip:`${l("unifiedCanvas.clearCanvas")}`,icon:a.jsx(ao,{}),onClick:b,colorScheme:"error",isDisabled:t})]}),a.jsx($t,{isAttached:!0,children:a.jsx(Dxe,{})})]})},zxe=i.memo(Fxe),iI={id:"canvas-intial-image",actionType:"SET_CANVAS_INITIAL_IMAGE"},Bxe=()=>{const{t:e}=W(),{isOver:t,setNodeRef:n,active:r}=$8({id:"unifiedCanvas",data:iI});return a.jsxs($,{layerStyle:"first",ref:n,tabIndex:-1,sx:{flexDirection:"column",alignItems:"center",gap:4,p:2,borderRadius:"base",w:"full",h:"full"},children:[a.jsx(zxe,{}),a.jsx(xxe,{}),L8(iI,r)&&a.jsx(F8,{isOver:t,label:e("toast.setCanvasInitialImage")})]})},Hxe=i.memo(Bxe),Wxe=()=>a.jsx(Hxe,{}),Vxe=i.memo(Wxe),Uxe=[{id:"txt2img",translationKey:"common.txt2img",icon:a.jsx(An,{as:Rte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(c1e,{})},{id:"img2img",translationKey:"common.img2img",icon:a.jsx(An,{as:si,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Mme,{})},{id:"unifiedCanvas",translationKey:"common.unifiedCanvas",icon:a.jsx(An,{as:Zse,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Vxe,{})},{id:"nodes",translationKey:"common.nodes",icon:a.jsx(An,{as:e0,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(bve,{})},{id:"modelManager",translationKey:"modelManager.modelManager",icon:a.jsx(An,{as:Cte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Phe,{})},{id:"queue",translationKey:"queue.queue",icon:a.jsx(An,{as:Kte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(l1e,{})}],Gxe=fe([pe],({config:e})=>{const{disabledTabs:t}=e;return Uxe.filter(r=>!t.includes(r.id))}),Kxe=448,qxe=448,Xxe=360,Qxe=["modelManager","queue"],Yxe=["modelManager","queue"],Zxe=()=>{const e=H(tL),t=H(tr),n=H(Gxe),{t:r}=W(),o=te(),s=i.useCallback(O=>{O.target instanceof HTMLElement&&O.target.blur()},[]),l=i.useMemo(()=>n.map(O=>a.jsx(Ut,{hasArrow:!0,label:String(r(O.translationKey)),placement:"end",children:a.jsxs(mr,{onClick:s,children:[a.jsx(L3,{children:String(r(O.translationKey))}),O.icon]})},O.id)),[n,r,s]),c=i.useMemo(()=>n.map(O=>a.jsx($r,{children:O.content},O.id)),[n]),d=i.useCallback(O=>{const T=n[O];T&&o(Js(T.id))},[o,n]),{minSize:f,isCollapsed:m,setIsCollapsed:h,ref:g,reset:b,expand:y,collapse:x,toggle:w}=v_(Kxe,"pixels"),{ref:S,minSize:j,isCollapsed:_,setIsCollapsed:I,reset:E,expand:M,collapse:D,toggle:R}=v_(Xxe,"pixels");tt("f",()=>{_||m?(M(),y()):(x(),D())},[o,_,m]),tt(["t","o"],()=>{w()},[o]),tt("g",()=>{R()},[o]);const N=R2();return a.jsxs(ci,{variant:"appTabs",defaultIndex:e,index:e,onChange:d,sx:{flexGrow:1,gap:4},isLazy:!0,children:[a.jsxs(ui,{sx:{pt:2,gap:4,flexDir:"column"},children:[l,a.jsx(Wr,{})]}),a.jsxs(o0,{id:"app",autoSaveId:"app",direction:"horizontal",style:{height:"100%",width:"100%"},storage:N,units:"pixels",children:[!Yxe.includes(t)&&a.jsxs(a.Fragment,{children:[a.jsx(rl,{order:0,id:"side",ref:g,defaultSize:f,minSize:f,onCollapse:h,collapsible:!0,children:t==="nodes"?a.jsx(mce,{}):a.jsx(Xpe,{})}),a.jsx(Bh,{onDoubleClick:b,collapsedDirection:m?"left":void 0}),a.jsx(bce,{isSidePanelCollapsed:m,sidePanelRef:g})]}),a.jsx(rl,{id:"main",order:1,minSize:qxe,children:a.jsx(eu,{style:{height:"100%",width:"100%"},children:c})}),!Qxe.includes(t)&&a.jsxs(a.Fragment,{children:[a.jsx(Bh,{onDoubleClick:E,collapsedDirection:_?"right":void 0}),a.jsx(rl,{id:"gallery",ref:S,order:2,defaultSize:j,minSize:j,onCollapse:I,collapsible:!0,children:a.jsx(zae,{})}),a.jsx(gce,{isGalleryCollapsed:_,galleryPanelRef:S})]})]})]})},Jxe=i.memo(Zxe),eye=i.createContext(null),D1={didCatch:!1,error:null};class tye extends i.Component{constructor(t){super(t),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=D1}static getDerivedStateFromError(t){return{didCatch:!0,error:t}}resetErrorBoundary(){const{error:t}=this.state;if(t!==null){for(var n,r,o=arguments.length,s=new Array(o),l=0;l0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return e.length!==t.length||e.some((n,r)=>!Object.is(n,t[r]))}function rye(e={}){let t;if(e.repoUrl)t=e.repoUrl;else if(e.user&&e.repo)t=`https://github.com/${e.user}/${e.repo}`;else throw new Error("You need to specify either the `repoUrl` option or both the `user` and `repo` options");const n=new URL(`${t}/issues/new`),r=["body","title","labels","template","milestone","assignee","projects"];for(const o of r){let s=e[o];if(s!==void 0){if(o==="labels"||o==="projects"){if(!Array.isArray(s))throw new TypeError(`The \`${o}\` option should be an array`);s=s.join(",")}n.searchParams.set(o,s)}}return n.toString()}const oye=[EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(e=>[e.name,e]),sye=new Map(oye),aye=sye,lye=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1}],px=new WeakSet,iye=e=>{px.add(e);const t=e.toJSON();return px.delete(e),t},cye=e=>aye.get(e)??Error,yD=({from:e,seen:t,to:n,forceEnumerable:r,maxDepth:o,depth:s,useToJSON:l,serialize:c})=>{if(!n)if(Array.isArray(e))n=[];else if(!c&&cI(e)){const f=cye(e.name);n=new f}else n={};if(t.push(e),s>=o)return n;if(l&&typeof e.toJSON=="function"&&!px.has(e))return iye(e);const d=f=>yD({from:f,seen:[...t],forceEnumerable:r,maxDepth:o,depth:s,useToJSON:l,serialize:c});for(const[f,m]of Object.entries(e)){if(m&&m instanceof Uint8Array&&m.constructor.name==="Buffer"){n[f]="[object Buffer]";continue}if(m!==null&&typeof m=="object"&&typeof m.pipe=="function"){n[f]="[object Stream]";continue}if(typeof m!="function"){if(!m||typeof m!="object"){try{n[f]=m}catch{}continue}if(!t.includes(e[f])){s++,n[f]=d(e[f]);continue}n[f]="[Circular]"}}for(const{property:f,enumerable:m}of lye)typeof e[f]<"u"&&e[f]!==null&&Object.defineProperty(n,f,{value:cI(e[f])?d(e[f]):e[f],enumerable:r?!0:m,configurable:!0,writable:!0});return n};function uye(e,t={}){const{maxDepth:n=Number.POSITIVE_INFINITY,useToJSON:r=!0}=t;return typeof e=="object"&&e!==null?yD({from:e,seen:[],forceEnumerable:!0,maxDepth:n,depth:0,useToJSON:r,serialize:!0}):typeof e=="function"?`[Function: ${e.name||"anonymous"}]`:e}function cI(e){return!!e&&typeof e=="object"&&"name"in e&&"message"in e&&"stack"in e}const dye=({error:e,resetErrorBoundary:t})=>{const n=tg(),{t:r}=W(),o=i.useCallback(()=>{const l=JSON.stringify(uye(e),null,2);navigator.clipboard.writeText(`\`\`\` +${l} +\`\`\``),n({title:"Error Copied"})},[e,n]),s=i.useMemo(()=>rye({user:"invoke-ai",repo:"InvokeAI",template:"BUG_REPORT.yml",title:`[bug]: ${e.name}: ${e.message}`}),[e.message,e.name]);return a.jsx($,{layerStyle:"body",sx:{w:"100vw",h:"100vh",alignItems:"center",justifyContent:"center",p:4},children:a.jsxs($,{layerStyle:"first",sx:{flexDir:"column",borderRadius:"base",justifyContent:"center",gap:8,p:16},children:[a.jsx(or,{children:r("common.somethingWentWrong")}),a.jsx($,{layerStyle:"second",sx:{px:8,py:4,borderRadius:"base",gap:4,justifyContent:"space-between",alignItems:"center"},children:a.jsxs(be,{sx:{fontWeight:600,color:"error.500",_dark:{color:"error.400"}},children:[e.name,": ",e.message]})}),a.jsxs($,{sx:{gap:4},children:[a.jsx(Xe,{leftIcon:a.jsx(sae,{}),onClick:t,children:r("accessibility.resetUI")}),a.jsx(Xe,{leftIcon:a.jsx(ru,{}),onClick:o,children:r("common.copyError")}),a.jsx(ig,{href:s,isExternal:!0,children:a.jsx(Xe,{leftIcon:a.jsx(Xy,{}),children:r("accessibility.createIssue")})})]})]})})},fye=i.memo(dye),pye=fe([pe],({hotkeys:e})=>{const{shift:t,ctrl:n,meta:r}=e;return{shift:t,ctrl:n,meta:r}}),mye=()=>{const e=te(),{shift:t,ctrl:n,meta:r}=H(pye),{queueBack:o,isDisabled:s,isLoading:l}=A7();tt(["ctrl+enter","meta+enter"],o,{enabled:()=>!s&&!l,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[o,s,l]);const{queueFront:c,isDisabled:d,isLoading:f}=L7();return tt(["ctrl+shift+enter","meta+shift+enter"],c,{enabled:()=>!d&&!f,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[c,d,f]),tt("*",()=>{pm("shift")?!t&&e(zr(!0)):t&&e(zr(!1)),pm("ctrl")?!n&&e(xS(!0)):n&&e(xS(!1)),pm("meta")?!r&&e(yS(!0)):r&&e(yS(!1))},{keyup:!0,keydown:!0},[t,n,r]),tt("1",()=>{e(Js("txt2img"))}),tt("2",()=>{e(Js("img2img"))}),tt("3",()=>{e(Js("unifiedCanvas"))}),tt("4",()=>{e(Js("nodes"))}),tt("5",()=>{e(Js("modelManager"))}),null},hye=i.memo(mye),gye=e=>{const t=te(),{recallAllParameters:n}=Sf(),r=zs(),{currentData:o}=jo((e==null?void 0:e.imageName)??Br),{currentData:s}=BI((e==null?void 0:e.imageName)??Br),l=i.useCallback(()=>{o&&(t(HI(o)),t(Js("unifiedCanvas")),r({title:PI("toast.sentToUnifiedCanvas"),status:"info",duration:2500,isClosable:!0}))},[t,r,o]),c=i.useCallback(()=>{o&&t(Qh(o))},[t,o]),d=i.useCallback(()=>{s&&n(s)},[s]);return i.useEffect(()=>{e&&e.action==="sendToCanvas"&&l()},[e,l]),i.useEffect(()=>{e&&e.action==="sendToImg2Img"&&c()},[e,c]),i.useEffect(()=>{e&&e.action==="useAllParameters"&&d()},[e,d]),{handleSendToCanvas:l,handleSendToImg2Img:c,handleUseAllMetadata:d}},vye=e=>(gye(e.selectedImage),null),bye=i.memo(vye),xye={},yye=({config:e=xye,selectedImage:t})=>{const n=H(e8),r=H6("system"),o=te(),s=JM();nL();const l=i.useCallback(()=>(s(),location.reload(),!1),[s]);i.useEffect(()=>{wt.changeLanguage(n)},[n]),i.useEffect(()=>{JI(e)&&(r.info({config:e},"Received config"),o(rL(e)))},[o,e,r]),i.useEffect(()=>{o(oL())},[o]);const c=qh(sL);return a.jsxs(tye,{onReset:l,FallbackComponent:fye,children:[a.jsx(sl,{w:"100vw",h:"100vh",position:"relative",overflow:"hidden",children:a.jsx(SK,{children:a.jsxs(sl,{sx:{gap:4,p:4,gridAutoRows:"min-content auto",w:"full",h:"full"},children:[c||a.jsx(Cne,{}),a.jsx($,{sx:{gap:4,w:"full",h:"full"},children:a.jsx(Jxe,{})})]})})}),a.jsx(rte,{}),a.jsx(Jee,{}),a.jsx(fG,{}),a.jsx(hye,{}),a.jsx(bye,{selectedImage:t})]})},_ye=i.memo(yye);export{_ye as default}; diff --git a/invokeai/frontend/web/dist/assets/App-6125620a.css b/invokeai/frontend/web/dist/assets/App-6125620a.css new file mode 100644 index 0000000000..b231132262 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/App-6125620a.css @@ -0,0 +1 @@ +.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;-webkit-animation:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:rgba(255,255,255,.5);padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:rgba(0,89,220,.08);border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%} diff --git a/invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js b/invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js new file mode 100644 index 0000000000..739242a035 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js @@ -0,0 +1 @@ +import{R as d,iE as _,r as h,iP as X}from"./index-31d28826.js";const Y={dark:["#C1C2C5","#A6A7AB","#909296","#5c5f66","#373A40","#2C2E33","#25262b","#1A1B1E","#141517","#101113"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]};function q(r){return()=>({fontFamily:r.fontFamily||"sans-serif"})}var J=Object.defineProperty,x=Object.getOwnPropertySymbols,K=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,z=(r,e,o)=>e in r?J(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,j=(r,e)=>{for(var o in e||(e={}))K.call(e,o)&&z(r,o,e[o]);if(x)for(var o of x(e))Q.call(e,o)&&z(r,o,e[o]);return r};function Z(r){return e=>({WebkitTapHighlightColor:"transparent",[e||"&:focus"]:j({},r.focusRing==="always"||r.focusRing==="auto"?r.focusRingStyles.styles(r):r.focusRingStyles.resetStyles(r)),[e?e.replace(":focus",":focus:not(:focus-visible)"):"&:focus:not(:focus-visible)"]:j({},r.focusRing==="auto"||r.focusRing==="never"?r.focusRingStyles.resetStyles(r):null)})}function y(r){return e=>typeof r.primaryShade=="number"?r.primaryShade:r.primaryShade[e||r.colorScheme]}function w(r){const e=y(r);return(o,n,a=!0,t=!0)=>{if(typeof o=="string"&&o.includes(".")){const[s,l]=o.split("."),g=parseInt(l,10);if(s in r.colors&&g>=0&&g<10)return r.colors[s][typeof n=="number"&&!t?n:g]}const i=typeof n=="number"?n:e();return o in r.colors?r.colors[o][i]:a?r.colors[r.primaryColor][i]:o}}function T(r){let e="";for(let o=1;o{const a={from:(n==null?void 0:n.from)||r.defaultGradient.from,to:(n==null?void 0:n.to)||r.defaultGradient.to,deg:(n==null?void 0:n.deg)||r.defaultGradient.deg};return`linear-gradient(${a.deg}deg, ${e(a.from,o(),!1)} 0%, ${e(a.to,o(),!1)} 100%)`}}function D(r){return e=>{if(typeof e=="number")return`${e/16}${r}`;if(typeof e=="string"){const o=e.replace("px","");if(!Number.isNaN(Number(o)))return`${Number(o)/16}${r}`}return e}}const u=D("rem"),k=D("em");function V({size:r,sizes:e,units:o}){return r in e?e[r]:typeof r=="number"?o==="em"?k(r):u(r):r||e.md}function S(r){return typeof r=="number"?r:typeof r=="string"&&r.includes("rem")?Number(r.replace("rem",""))*16:typeof r=="string"&&r.includes("em")?Number(r.replace("em",""))*16:Number(r)}function er(r){return e=>`@media (min-width: ${k(S(V({size:e,sizes:r.breakpoints})))})`}function or(r){return e=>`@media (max-width: ${k(S(V({size:e,sizes:r.breakpoints}))-1)})`}function nr(r){return/^#?([0-9A-F]{3}){1,2}$/i.test(r)}function tr(r){let e=r.replace("#","");if(e.length===3){const i=e.split("");e=[i[0],i[0],i[1],i[1],i[2],i[2]].join("")}const o=parseInt(e,16),n=o>>16&255,a=o>>8&255,t=o&255;return{r:n,g:a,b:t,a:1}}function ar(r){const[e,o,n,a]=r.replace(/[^0-9,.]/g,"").split(",").map(Number);return{r:e,g:o,b:n,a:a||1}}function C(r){return nr(r)?tr(r):r.startsWith("rgb")?ar(r):{r:0,g:0,b:0,a:1}}function p(r,e){if(typeof r!="string"||e>1||e<0)return"rgba(0, 0, 0, 1)";if(r.startsWith("var(--"))return r;const{r:o,g:n,b:a}=C(r);return`rgba(${o}, ${n}, ${a}, ${e})`}function ir(r=0){return{position:"absolute",top:u(r),right:u(r),left:u(r),bottom:u(r)}}function sr(r,e){if(typeof r=="string"&&r.startsWith("var(--"))return r;const{r:o,g:n,b:a,a:t}=C(r),i=1-e,s=l=>Math.round(l*i);return`rgba(${s(o)}, ${s(n)}, ${s(a)}, ${t})`}function lr(r,e){if(typeof r=="string"&&r.startsWith("var(--"))return r;const{r:o,g:n,b:a,a:t}=C(r),i=s=>Math.round(s+(255-s)*e);return`rgba(${i(o)}, ${i(n)}, ${i(a)}, ${t})`}function fr(r){return e=>{if(typeof e=="number")return u(e);const o=typeof r.defaultRadius=="number"?r.defaultRadius:r.radius[r.defaultRadius]||r.defaultRadius;return r.radius[e]||e||o}}function cr(r,e){if(typeof r=="string"&&r.includes(".")){const[o,n]=r.split("."),a=parseInt(n,10);if(o in e.colors&&a>=0&&a<10)return{isSplittedColor:!0,key:o,shade:a}}return{isSplittedColor:!1}}function dr(r){const e=w(r),o=y(r),n=G(r);return({variant:a,color:t,gradient:i,primaryFallback:s})=>{const l=cr(t,r);switch(a){case"light":return{border:"transparent",background:p(e(t,r.colorScheme==="dark"?8:0,s,!1),r.colorScheme==="dark"?.2:1),color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),hover:p(e(t,r.colorScheme==="dark"?7:1,s,!1),r.colorScheme==="dark"?.25:.65)};case"subtle":return{border:"transparent",background:"transparent",color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),hover:p(e(t,r.colorScheme==="dark"?8:0,s,!1),r.colorScheme==="dark"?.2:1)};case"outline":return{border:e(t,r.colorScheme==="dark"?5:o("light")),background:"transparent",color:e(t,r.colorScheme==="dark"?5:o("light")),hover:r.colorScheme==="dark"?p(e(t,5,s,!1),.05):p(e(t,0,s,!1),.35)};case"default":return{border:r.colorScheme==="dark"?r.colors.dark[4]:r.colors.gray[4],background:r.colorScheme==="dark"?r.colors.dark[6]:r.white,color:r.colorScheme==="dark"?r.white:r.black,hover:r.colorScheme==="dark"?r.colors.dark[5]:r.colors.gray[0]};case"white":return{border:"transparent",background:r.white,color:e(t,o()),hover:null};case"transparent":return{border:"transparent",color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),background:"transparent",hover:null};case"gradient":return{background:n(i),color:r.white,border:"transparent",hover:null};default:{const g=o(),$=l.isSplittedColor?l.shade:g,O=l.isSplittedColor?l.key:t;return{border:"transparent",background:e(O,$,s),color:r.white,hover:e(O,$===9?8:$+1)}}}}}function ur(r){return e=>{const o=y(r)(e);return r.colors[r.primaryColor][o]}}function pr(r){return{"@media (hover: hover)":{"&:hover":r},"@media (hover: none)":{"&:active":r}}}function gr(r){return()=>({userSelect:"none",color:r.colorScheme==="dark"?r.colors.dark[3]:r.colors.gray[5]})}function br(r){return()=>r.colorScheme==="dark"?r.colors.dark[2]:r.colors.gray[6]}const f={fontStyles:q,themeColor:w,focusStyles:Z,linearGradient:B,radialGradient:rr,smallerThan:or,largerThan:er,rgba:p,cover:ir,darken:sr,lighten:lr,radius:fr,variant:dr,primaryShade:y,hover:pr,gradient:G,primaryColor:ur,placeholderStyles:gr,dimmed:br};var mr=Object.defineProperty,yr=Object.defineProperties,Sr=Object.getOwnPropertyDescriptors,R=Object.getOwnPropertySymbols,vr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,F=(r,e,o)=>e in r?mr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,hr=(r,e)=>{for(var o in e||(e={}))vr.call(e,o)&&F(r,o,e[o]);if(R)for(var o of R(e))_r.call(e,o)&&F(r,o,e[o]);return r},kr=(r,e)=>yr(r,Sr(e));function U(r){return kr(hr({},r),{fn:{fontStyles:f.fontStyles(r),themeColor:f.themeColor(r),focusStyles:f.focusStyles(r),largerThan:f.largerThan(r),smallerThan:f.smallerThan(r),radialGradient:f.radialGradient,linearGradient:f.linearGradient,gradient:f.gradient(r),rgba:f.rgba,cover:f.cover,lighten:f.lighten,darken:f.darken,primaryShade:f.primaryShade(r),radius:f.radius(r),variant:f.variant(r),hover:f.hover,primaryColor:f.primaryColor(r),placeholderStyles:f.placeholderStyles(r),dimmed:f.dimmed(r)}})}const $r={dir:"ltr",primaryShade:{light:6,dark:8},focusRing:"auto",loader:"oval",colorScheme:"light",white:"#fff",black:"#000",defaultRadius:"sm",transitionTimingFunction:"ease",colors:Y,lineHeight:1.55,fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",primaryColor:"blue",respectReducedMotion:!0,cursorType:"default",defaultGradient:{from:"indigo",to:"cyan",deg:45},shadows:{xs:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.1)",sm:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 0.625rem 0.9375rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.4375rem 0.4375rem -0.3125rem",md:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.25rem 1.5625rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.625rem 0.625rem -0.3125rem",lg:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.75rem 1.4375rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 0.75rem 0.75rem -0.4375rem",xl:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 2.25rem 1.75rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 1.0625rem 1.0625rem -0.4375rem"},fontSizes:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},radius:{xs:"0.125rem",sm:"0.25rem",md:"0.5rem",lg:"1rem",xl:"2rem"},spacing:{xs:"0.625rem",sm:"0.75rem",md:"1rem",lg:"1.25rem",xl:"1.5rem"},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},headings:{fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontWeight:700,sizes:{h1:{fontSize:"2.125rem",lineHeight:1.3,fontWeight:void 0},h2:{fontSize:"1.625rem",lineHeight:1.35,fontWeight:void 0},h3:{fontSize:"1.375rem",lineHeight:1.4,fontWeight:void 0},h4:{fontSize:"1.125rem",lineHeight:1.45,fontWeight:void 0},h5:{fontSize:"1rem",lineHeight:1.5,fontWeight:void 0},h6:{fontSize:"0.875rem",lineHeight:1.5,fontWeight:void 0}}},other:{},components:{},activeStyles:{transform:"translateY(0.0625rem)"},datesLocale:"en",globalStyles:void 0,focusRingStyles:{styles:r=>({outlineOffset:"0.125rem",outline:`0.125rem solid ${r.colors[r.primaryColor][r.colorScheme==="dark"?7:5]}`}),resetStyles:()=>({outline:"none"}),inputStyles:r=>({outline:"none",borderColor:r.colors[r.primaryColor][typeof r.primaryShade=="object"?r.primaryShade[r.colorScheme]:r.primaryShade]})}},E=U($r);var Pr=Object.defineProperty,wr=Object.defineProperties,Cr=Object.getOwnPropertyDescriptors,H=Object.getOwnPropertySymbols,Er=Object.prototype.hasOwnProperty,Or=Object.prototype.propertyIsEnumerable,M=(r,e,o)=>e in r?Pr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,xr=(r,e)=>{for(var o in e||(e={}))Er.call(e,o)&&M(r,o,e[o]);if(H)for(var o of H(e))Or.call(e,o)&&M(r,o,e[o]);return r},zr=(r,e)=>wr(r,Cr(e));function jr({theme:r}){return d.createElement(_,{styles:{"*, *::before, *::after":{boxSizing:"border-box"},html:{colorScheme:r.colorScheme==="dark"?"dark":"light"},body:zr(xr({},r.fn.fontStyles()),{backgroundColor:r.colorScheme==="dark"?r.colors.dark[7]:r.white,color:r.colorScheme==="dark"?r.colors.dark[0]:r.black,lineHeight:r.lineHeight,fontSize:r.fontSizes.md,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"})}})}function b(r,e,o,n=u){Object.keys(e).forEach(a=>{r[`--mantine-${o}-${a}`]=n(e[a])})}function Rr({theme:r}){const e={"--mantine-color-white":r.white,"--mantine-color-black":r.black,"--mantine-transition-timing-function":r.transitionTimingFunction,"--mantine-line-height":`${r.lineHeight}`,"--mantine-font-family":r.fontFamily,"--mantine-font-family-monospace":r.fontFamilyMonospace,"--mantine-font-family-headings":r.headings.fontFamily,"--mantine-heading-font-weight":`${r.headings.fontWeight}`};b(e,r.shadows,"shadow"),b(e,r.fontSizes,"font-size"),b(e,r.radius,"radius"),b(e,r.spacing,"spacing"),b(e,r.breakpoints,"breakpoints",k),Object.keys(r.colors).forEach(n=>{r.colors[n].forEach((a,t)=>{e[`--mantine-color-${n}-${t}`]=a})});const o=r.headings.sizes;return Object.keys(o).forEach(n=>{e[`--mantine-${n}-font-size`]=o[n].fontSize,e[`--mantine-${n}-line-height`]=`${o[n].lineHeight}`}),d.createElement(_,{styles:{":root":e}})}var Fr=Object.defineProperty,Hr=Object.defineProperties,Mr=Object.getOwnPropertyDescriptors,I=Object.getOwnPropertySymbols,Ir=Object.prototype.hasOwnProperty,Ar=Object.prototype.propertyIsEnumerable,A=(r,e,o)=>e in r?Fr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,c=(r,e)=>{for(var o in e||(e={}))Ir.call(e,o)&&A(r,o,e[o]);if(I)for(var o of I(e))Ar.call(e,o)&&A(r,o,e[o]);return r},P=(r,e)=>Hr(r,Mr(e));function Nr(r,e){var o;if(!e)return r;const n=Object.keys(r).reduce((a,t)=>{if(t==="headings"&&e.headings){const i=e.headings.sizes?Object.keys(r.headings.sizes).reduce((s,l)=>(s[l]=c(c({},r.headings.sizes[l]),e.headings.sizes[l]),s),{}):r.headings.sizes;return P(c({},a),{headings:P(c(c({},r.headings),e.headings),{sizes:i})})}if(t==="breakpoints"&&e.breakpoints){const i=c(c({},r.breakpoints),e.breakpoints);return P(c({},a),{breakpoints:Object.fromEntries(Object.entries(i).sort((s,l)=>S(s[1])-S(l[1])))})}return a[t]=typeof e[t]=="object"?c(c({},r[t]),e[t]):typeof e[t]=="number"||typeof e[t]=="boolean"||typeof e[t]=="function"?e[t]:e[t]||r[t],a},{});if(e!=null&&e.fontFamily&&!((o=e==null?void 0:e.headings)!=null&&o.fontFamily)&&(n.headings.fontFamily=e.fontFamily),!(n.primaryColor in n.colors))throw new Error("MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color");return n}function Wr(r,e){return U(Nr(r,e))}function Tr(r){return Object.keys(r).reduce((e,o)=>(r[o]!==void 0&&(e[o]=r[o]),e),{})}const Gr={html:{fontFamily:"sans-serif",lineHeight:"1.15",textSizeAdjust:"100%"},body:{margin:0},"article, aside, footer, header, nav, section, figcaption, figure, main":{display:"block"},h1:{fontSize:"2em"},hr:{boxSizing:"content-box",height:0,overflow:"visible"},pre:{fontFamily:"monospace, monospace",fontSize:"1em"},a:{background:"transparent",textDecorationSkip:"objects"},"a:active, a:hover":{outlineWidth:0},"abbr[title]":{borderBottom:"none",textDecoration:"underline"},"b, strong":{fontWeight:"bolder"},"code, kbp, samp":{fontFamily:"monospace, monospace",fontSize:"1em"},dfn:{fontStyle:"italic"},mark:{backgroundColor:"#ff0",color:"#000"},small:{fontSize:"80%"},"sub, sup":{fontSize:"75%",lineHeight:0,position:"relative",verticalAlign:"baseline"},sup:{top:"-0.5em"},sub:{bottom:"-0.25em"},"audio, video":{display:"inline-block"},"audio:not([controls])":{display:"none",height:0},img:{borderStyle:"none",verticalAlign:"middle"},"svg:not(:root)":{overflow:"hidden"},"button, input, optgroup, select, textarea":{fontFamily:"sans-serif",fontSize:"100%",lineHeight:"1.15",margin:0},"button, input":{overflow:"visible"},"button, select":{textTransform:"none"},"button, [type=reset], [type=submit]":{WebkitAppearance:"button"},"button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner":{borderStyle:"none",padding:0},"button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring":{outline:`${u(1)} dotted ButtonText`},legend:{boxSizing:"border-box",color:"inherit",display:"table",maxWidth:"100%",padding:0,whiteSpace:"normal"},progress:{display:"inline-block",verticalAlign:"baseline"},textarea:{overflow:"auto"},"[type=checkbox], [type=radio]":{boxSizing:"border-box",padding:0},"[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button":{height:"auto"},"[type=search]":{appearance:"none"},"[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration":{appearance:"none"},"::-webkit-file-upload-button":{appearance:"button",font:"inherit"},"details, menu":{display:"block"},summary:{display:"list-item"},canvas:{display:"inline-block"},template:{display:"none"}};function Dr(){return d.createElement(_,{styles:Gr})}var Vr=Object.defineProperty,N=Object.getOwnPropertySymbols,Ur=Object.prototype.hasOwnProperty,Lr=Object.prototype.propertyIsEnumerable,W=(r,e,o)=>e in r?Vr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,m=(r,e)=>{for(var o in e||(e={}))Ur.call(e,o)&&W(r,o,e[o]);if(N)for(var o of N(e))Lr.call(e,o)&&W(r,o,e[o]);return r};const v=h.createContext({theme:E});function L(){var r;return((r=h.useContext(v))==null?void 0:r.theme)||E}function qr(r){const e=L(),o=n=>{var a,t,i,s;return{styles:((a=e.components[n])==null?void 0:a.styles)||{},classNames:((t=e.components[n])==null?void 0:t.classNames)||{},variants:(i=e.components[n])==null?void 0:i.variants,sizes:(s=e.components[n])==null?void 0:s.sizes}};return Array.isArray(r)?r.map(o):[o(r)]}function Jr(){var r;return(r=h.useContext(v))==null?void 0:r.emotionCache}function Kr(r,e,o){var n;const a=L(),t=(n=a.components[r])==null?void 0:n.defaultProps,i=typeof t=="function"?t(a):t;return m(m(m({},e),i),Tr(o))}function Xr({theme:r,emotionCache:e,withNormalizeCSS:o=!1,withGlobalStyles:n=!1,withCSSVariables:a=!1,inherit:t=!1,children:i}){const s=h.useContext(v),l=Wr(E,t?m(m({},s.theme),r):r);return d.createElement(X,{theme:l},d.createElement(v.Provider,{value:{theme:l,emotionCache:e}},o&&d.createElement(Dr,null),n&&d.createElement(jr,{theme:l}),a&&d.createElement(Rr,{theme:l}),typeof l.globalStyles=="function"&&d.createElement(_,{styles:l.globalStyles(l)}),i))}Xr.displayName="@mantine/core/MantineProvider";export{Xr as M,L as a,qr as b,V as c,Kr as d,Tr as f,S as g,u as r,Jr as u}; diff --git a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css new file mode 100644 index 0000000000..95c048737d --- /dev/null +++ b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css @@ -0,0 +1,9 @@ +@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-ext-wght-normal-1c3007b8.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-wght-normal-eba94878.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-ext-wght-normal-81f77e51.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-wght-normal-d92c6cbc.woff2) format("woff2-variations");unicode-range:U+0370-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-vietnamese-wght-normal-15df7612.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-ext-wght-normal-a2bfd9fe.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-wght-normal-88df0b5a.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}/*! +* OverlayScrollbars +* Version: 2.4.5 +* +* Copyright (c) Rene Haas | KingSora. +* https://github.com/KingSora +* +* Released under the MIT license. +*/.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;top:0;right:0;bottom:0;left:0;transform:scale(.1)}.os-size-observer:before{content:"";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0px;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}.os-environment{scroll-behavior:auto!important;--os-custom-prop: -1;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:var(--os-custom-prop)}.os-environment div{width:200%;height:200%;margin:10px 0}.os-environment.os-environment-flexbox-glue{display:flex;flex-direction:row;flex-wrap:nowrap;height:auto;width:auto;min-height:200px;min-width:200px}.os-environment.os-environment-flexbox-glue div{flex:auto;width:auto;height:auto;max-height:100%;max-width:100%;margin:0}.os-environment.os-environment-flexbox-glue-max{max-height:200px}.os-environment.os-environment-flexbox-glue-max div{overflow:visible}.os-environment.os-environment-flexbox-glue-max div:before{content:"";display:block;height:999px;width:999px}.os-environment,[data-overlayscrollbars-viewport]{-ms-overflow-style:scrollbar!important}[data-overlayscrollbars-initialize],[data-overlayscrollbars~=scrollbarHidden],[data-overlayscrollbars-viewport~=scrollbarHidden],.os-scrollbar-hidden.os-environment{scrollbar-width:none!important}[data-overlayscrollbars-initialize]::-webkit-scrollbar,[data-overlayscrollbars-initialize]::-webkit-scrollbar-corner,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner,.os-scrollbar-hidden.os-environment::-webkit-scrollbar,.os-scrollbar-hidden.os-environment::-webkit-scrollbar-corner{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars],html.os-scrollbar-hidden,html.os-scrollbar-hidden>body{box-sizing:border-box;margin:0;width:100%;height:100%}html[data-overlayscrollbars]>body{overflow:visible}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{box-sizing:inherit;position:relative;flex:auto!important;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0}[data-overlayscrollbars-viewport]{--os-vaw: 0;--os-vah: 0}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:"";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:var(--os-vaw);height:var(--os-vah)}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{overflow:hidden}[data-overlayscrollbars~=host],[data-overlayscrollbars~=viewport]{position:relative;overflow:hidden}[data-overlayscrollbars~=overflowVisible],[data-overlayscrollbars-padding~=overflowVisible],[data-overlayscrollbars-viewport~=overflowVisible]{overflow:visible}[data-overlayscrollbars-overflow-x=hidden]{overflow-x:hidden}[data-overlayscrollbars-overflow-x=scroll]{overflow-x:scroll}[data-overlayscrollbars-overflow-x=hidden]{overflow-y:hidden}[data-overlayscrollbars-overflow-y=scroll]{overflow-y:scroll}[data-overlayscrollbars~=scrollbarPressed],[data-overlayscrollbars~=scrollbarPressed] [data-overlayscrollbars-viewport]{scroll-behavior:auto!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}.os-scrollbar{contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none}.os-scrollbar-track{position:relative;direction:ltr!important;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible,.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0}.os-scrollbar-vertical .os-scrollbar-handle{right:0}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}.os-scrollbar{--os-size: 0;--os-padding-perpendicular: 0;--os-padding-axis: 0;--os-track-border-radius: 0;--os-track-bg: none;--os-track-bg-hover: none;--os-track-bg-active: none;--os-track-border: none;--os-track-border-hover: none;--os-track-border-active: none;--os-handle-border-radius: 0;--os-handle-bg: none;--os-handle-bg-hover: none;--os-handle-bg-active: none;--os-handle-border: none;--os-handle-border-hover: none;--os-handle-border-active: none;--os-handle-min-size: 33px;--os-handle-max-size: none;--os-handle-perpendicular-size: 100%;--os-handle-perpendicular-size-hover: 100%;--os-handle-perpendicular-size-active: 100%;--os-handle-interactive-area-offset: 0}.os-scrollbar .os-scrollbar-track{border:var(--os-track-border);border-radius:var(--os-track-border-radius);background:var(--os-track-bg);transition:opacity .15s,background-color .15s,border-color .15s}.os-scrollbar .os-scrollbar-track:hover{border:var(--os-track-border-hover);background:var(--os-track-bg-hover)}.os-scrollbar .os-scrollbar-track:active{border:var(--os-track-border-active);background:var(--os-track-bg-active)}.os-scrollbar .os-scrollbar-handle{border:var(--os-handle-border);border-radius:var(--os-handle-border-radius);background:var(--os-handle-bg)}.os-scrollbar .os-scrollbar-handle:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;display:block}.os-scrollbar .os-scrollbar-handle:hover{border:var(--os-handle-border-hover);background:var(--os-handle-bg-hover)}.os-scrollbar .os-scrollbar-handle:active{border:var(--os-handle-border-active);background:var(--os-handle-bg-active)}.os-scrollbar-horizontal{padding:var(--os-padding-perpendicular) var(--os-padding-axis);right:var(--os-size);height:var(--os-size)}.os-scrollbar-horizontal.os-scrollbar-rtl{left:var(--os-size);right:0}.os-scrollbar-horizontal .os-scrollbar-handle{min-width:var(--os-handle-min-size);max-width:var(--os-handle-max-size);height:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,height .15s}.os-scrollbar-horizontal .os-scrollbar-handle:before{top:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal:hover .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-horizontal:active .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-active)}.os-scrollbar-vertical{padding:var(--os-padding-axis) var(--os-padding-perpendicular);bottom:var(--os-size);width:var(--os-size)}.os-scrollbar-vertical .os-scrollbar-handle{min-height:var(--os-handle-min-size);max-height:var(--os-handle-max-size);width:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,width .15s}.os-scrollbar-vertical .os-scrollbar-handle:before{left:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);left:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical:hover .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-vertical:active .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-active)}[data-overlayscrollbars~=updating]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}.os-theme-dark,.os-theme-light{box-sizing:border-box;--os-size: 10px;--os-padding-perpendicular: 2px;--os-padding-axis: 2px;--os-track-border-radius: 10px;--os-handle-interactive-area-offset: 4px;--os-handle-border-radius: 10px}.os-theme-dark{--os-handle-bg: rgba(0, 0, 0, .44);--os-handle-bg-hover: rgba(0, 0, 0, .55);--os-handle-bg-active: rgba(0, 0, 0, .66)}.os-theme-light{--os-handle-bg: rgba(255, 255, 255, .44);--os-handle-bg-hover: rgba(255, 255, 255, .55);--os-handle-bg-active: rgba(255, 255, 255, .66)}.os-no-css-vars.os-theme-dark.os-scrollbar .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar .os-scrollbar-handle,.os-no-css-vars.os-theme-dark.os-scrollbar .os-scrollbar-track,.os-no-css-vars.os-theme-light.os-scrollbar .os-scrollbar-track{border-radius:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal{padding:2px;right:10px;height:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-cornerless{right:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-rtl,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-rtl{left:10px;right:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-rtl.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-rtl.os-scrollbar-cornerless{left:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle{min-width:33px;max-width:none}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before{top:-6px;bottom:-2px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical,.os-no-css-vars.os-theme-light.os-scrollbar-vertical{padding:2px;bottom:10px;width:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-vertical.os-scrollbar-cornerless{bottom:0}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle{min-height:33px;max-height:none}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before{left:-6px;right:-2px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:-6px;left:-2px}.os-no-css-vars.os-theme-dark .os-scrollbar-handle{background:rgba(0,0,0,.44)}.os-no-css-vars.os-theme-dark:hover .os-scrollbar-handle{background:rgba(0,0,0,.55)}.os-no-css-vars.os-theme-dark:active .os-scrollbar-handle{background:rgba(0,0,0,.66)}.os-no-css-vars.os-theme-light .os-scrollbar-handle{background:rgba(255,255,255,.44)}.os-no-css-vars.os-theme-light:hover .os-scrollbar-handle{background:rgba(255,255,255,.55)}.os-no-css-vars.os-theme-light:active .os-scrollbar-handle{background:rgba(255,255,255,.66)}.os-scrollbar{--os-handle-bg: var(--invokeai-colors-accentAlpha-500);--os-handle-bg-hover: var(--invokeai-colors-accentAlpha-700);--os-handle-bg-active: var(--invokeai-colors-accentAlpha-800);--os-handle-min-size: 50px} diff --git a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js new file mode 100644 index 0000000000..eac5ca0c41 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js @@ -0,0 +1,280 @@ +import{D as s,iE as T,r as l,Z as A,iF as D,a7 as R,iG as z,iH as j,iI as V,iJ as F,iK as G,iL as W,iM as K,at as H,iN as Z,iO as J}from"./index-31d28826.js";import{M as U}from"./MantineProvider-11ad6165.js";var P=String.raw,E=P` + :root, + :host { + --chakra-vh: 100vh; + } + + @supports (height: -webkit-fill-available) { + :root, + :host { + --chakra-vh: -webkit-fill-available; + } + } + + @supports (height: -moz-fill-available) { + :root, + :host { + --chakra-vh: -moz-fill-available; + } + } + + @supports (height: 100dvh) { + :root, + :host { + --chakra-vh: 100dvh; + } + } +`,Y=()=>s.jsx(T,{styles:E}),B=({scope:e=""})=>s.jsx(T,{styles:P` + html { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + font-family: system-ui, sans-serif; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + -moz-osx-font-smoothing: grayscale; + touch-action: manipulation; + } + + body { + position: relative; + min-height: 100%; + margin: 0; + font-feature-settings: "kern"; + } + + ${e} :where(*, *::before, *::after) { + border-width: 0; + border-style: solid; + box-sizing: border-box; + word-wrap: break-word; + } + + main { + display: block; + } + + ${e} hr { + border-top-width: 1px; + box-sizing: content-box; + height: 0; + overflow: visible; + } + + ${e} :where(pre, code, kbd,samp) { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; + font-size: 1em; + } + + ${e} a { + background-color: transparent; + color: inherit; + text-decoration: inherit; + } + + ${e} abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + + ${e} :where(b, strong) { + font-weight: bold; + } + + ${e} small { + font-size: 80%; + } + + ${e} :where(sub,sup) { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + + ${e} sub { + bottom: -0.25em; + } + + ${e} sup { + top: -0.5em; + } + + ${e} img { + border-style: none; + } + + ${e} :where(button, input, optgroup, select, textarea) { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; + } + + ${e} :where(button, input) { + overflow: visible; + } + + ${e} :where(button, select) { + text-transform: none; + } + + ${e} :where( + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner + ) { + border-style: none; + padding: 0; + } + + ${e} fieldset { + padding: 0.35em 0.75em 0.625em; + } + + ${e} legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; + } + + ${e} progress { + vertical-align: baseline; + } + + ${e} textarea { + overflow: auto; + } + + ${e} :where([type="checkbox"], [type="radio"]) { + box-sizing: border-box; + padding: 0; + } + + ${e} input[type="number"]::-webkit-inner-spin-button, + ${e} input[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none !important; + } + + ${e} input[type="number"] { + -moz-appearance: textfield; + } + + ${e} input[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; + } + + ${e} input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none !important; + } + + ${e} ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; + } + + ${e} details { + display: block; + } + + ${e} summary { + display: list-item; + } + + template { + display: none; + } + + [hidden] { + display: none !important; + } + + ${e} :where( + blockquote, + dl, + dd, + h1, + h2, + h3, + h4, + h5, + h6, + hr, + figure, + p, + pre + ) { + margin: 0; + } + + ${e} button { + background: transparent; + padding: 0; + } + + ${e} fieldset { + margin: 0; + padding: 0; + } + + ${e} :where(ol, ul) { + margin: 0; + padding: 0; + } + + ${e} textarea { + resize: vertical; + } + + ${e} :where(button, [role="button"]) { + cursor: pointer; + } + + ${e} button::-moz-focus-inner { + border: 0 !important; + } + + ${e} table { + border-collapse: collapse; + } + + ${e} :where(h1, h2, h3, h4, h5, h6) { + font-size: inherit; + font-weight: inherit; + } + + ${e} :where(button, input, optgroup, select, textarea) { + padding: 0; + line-height: inherit; + color: inherit; + } + + ${e} :where(img, svg, video, canvas, audio, iframe, embed, object) { + display: block; + } + + ${e} :where(img, video) { + max-width: 100%; + height: auto; + } + + [data-js-focus-visible] + :focus:not([data-focus-visible-added]):not( + [data-focus-visible-disabled] + ) { + outline: none; + box-shadow: none; + } + + ${e} select::-ms-expand { + display: none; + } + + ${E} + `}),g={light:"chakra-ui-light",dark:"chakra-ui-dark"};function Q(e={}){const{preventTransition:o=!0}=e,n={setDataset:r=>{const t=o?n.preventTransition():void 0;document.documentElement.dataset.theme=r,document.documentElement.style.colorScheme=r,t==null||t()},setClassName(r){document.body.classList.add(r?g.dark:g.light),document.body.classList.remove(r?g.light:g.dark)},query(){return window.matchMedia("(prefers-color-scheme: dark)")},getSystemTheme(r){var t;return((t=n.query().matches)!=null?t:r==="dark")?"dark":"light"},addListener(r){const t=n.query(),i=a=>{r(a.matches?"dark":"light")};return typeof t.addListener=="function"?t.addListener(i):t.addEventListener("change",i),()=>{typeof t.removeListener=="function"?t.removeListener(i):t.removeEventListener("change",i)}},preventTransition(){const r=document.createElement("style");return r.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(r),()=>{window.getComputedStyle(document.body),requestAnimationFrame(()=>{requestAnimationFrame(()=>{document.head.removeChild(r)})})}}};return n}var X="chakra-ui-color-mode";function L(e){return{ssr:!1,type:"localStorage",get(o){if(!(globalThis!=null&&globalThis.document))return o;let n;try{n=localStorage.getItem(e)||o}catch{}return n||o},set(o){try{localStorage.setItem(e,o)}catch{}}}}var ee=L(X),M=()=>{};function S(e,o){return e.type==="cookie"&&e.ssr?e.get(o):o}function O(e){const{value:o,children:n,options:{useSystemColorMode:r,initialColorMode:t,disableTransitionOnChange:i}={},colorModeManager:a=ee}=e,d=t==="dark"?"dark":"light",[u,p]=l.useState(()=>S(a,d)),[y,b]=l.useState(()=>S(a)),{getSystemTheme:w,setClassName:k,setDataset:x,addListener:$}=l.useMemo(()=>Q({preventTransition:i}),[i]),f=t==="system"&&!u?y:u,c=l.useCallback(m=>{const v=m==="system"?w():m;p(v),k(v==="dark"),x(v),a.set(v)},[a,w,k,x]);A(()=>{t==="system"&&b(w())},[]),l.useEffect(()=>{const m=a.get();if(m){c(m);return}if(t==="system"){c("system");return}c(d)},[a,d,t,c]);const C=l.useCallback(()=>{c(f==="dark"?"light":"dark")},[f,c]);l.useEffect(()=>{if(r)return $(c)},[r,$,c]);const I=l.useMemo(()=>({colorMode:o??f,toggleColorMode:o?M:C,setColorMode:o?M:c,forced:o!==void 0}),[f,C,c,o]);return s.jsx(D.Provider,{value:I,children:n})}O.displayName="ColorModeProvider";var te=["borders","breakpoints","colors","components","config","direction","fonts","fontSizes","fontWeights","letterSpacings","lineHeights","radii","shadows","sizes","space","styles","transition","zIndices"];function re(e){return R(e)?te.every(o=>Object.prototype.hasOwnProperty.call(e,o)):!1}function h(e){return typeof e=="function"}function oe(...e){return o=>e.reduce((n,r)=>r(n),o)}var ne=e=>function(...n){let r=[...n],t=n[n.length-1];return re(t)&&r.length>1?r=r.slice(0,r.length-1):t=e,oe(...r.map(i=>a=>h(i)?i(a):ae(a,i)))(t)},ie=ne(j);function ae(...e){return z({},...e,_)}function _(e,o,n,r){if((h(e)||h(o))&&Object.prototype.hasOwnProperty.call(r,n))return(...t)=>{const i=h(e)?e(...t):e,a=h(o)?o(...t):o;return z({},i,a,_)}}var N=l.createContext({getDocument(){return document},getWindow(){return window}});N.displayName="EnvironmentContext";function q(e){const{children:o,environment:n,disabled:r}=e,t=l.useRef(null),i=l.useMemo(()=>n||{getDocument:()=>{var d,u;return(u=(d=t.current)==null?void 0:d.ownerDocument)!=null?u:document},getWindow:()=>{var d,u;return(u=(d=t.current)==null?void 0:d.ownerDocument.defaultView)!=null?u:window}},[n]),a=!r||!n;return s.jsxs(N.Provider,{value:i,children:[o,a&&s.jsx("span",{id:"__chakra_env",hidden:!0,ref:t})]})}q.displayName="EnvironmentProvider";var se=e=>{const{children:o,colorModeManager:n,portalZIndex:r,resetScope:t,resetCSS:i=!0,theme:a={},environment:d,cssVarsRoot:u,disableEnvironment:p,disableGlobalStyle:y}=e,b=s.jsx(q,{environment:d,disabled:p,children:o});return s.jsx(V,{theme:a,cssVarsRoot:u,children:s.jsxs(O,{colorModeManager:n,options:a.config,children:[i?s.jsx(B,{scope:t}):s.jsx(Y,{}),!y&&s.jsx(F,{}),r?s.jsx(G,{zIndex:r,children:b}):b]})})},le=e=>function({children:n,theme:r=e,toastOptions:t,...i}){return s.jsxs(se,{theme:r,...i,children:[s.jsx(W,{value:t==null?void 0:t.defaultOptions,children:n}),s.jsx(K,{...t})]})},de=le(j);const ue=()=>l.useMemo(()=>({colorScheme:"dark",fontFamily:"'Inter Variable', sans-serif",components:{ScrollArea:{defaultProps:{scrollbarSize:10},styles:{scrollbar:{"&:hover":{backgroundColor:"var(--invokeai-colors-baseAlpha-300)"}},thumb:{backgroundColor:"var(--invokeai-colors-baseAlpha-300)"}}}}}),[]);const ce=L("@@invokeai-color-mode");function me({children:e}){const{i18n:o}=H(),n=o.dir(),r=l.useMemo(()=>ie({...Z,direction:n}),[n]);l.useEffect(()=>{document.body.dir=n},[n]);const t=ue();return s.jsx(U,{theme:t,children:s.jsx(de,{theme:r,colorModeManager:ce,toastOptions:J,children:e})})}const fe=l.memo(me);export{fe as default}; diff --git a/invokeai/frontend/web/dist/assets/favicon-0d253ced.ico b/invokeai/frontend/web/dist/assets/favicon-0d253ced.ico new file mode 100644 index 0000000000000000000000000000000000000000..413340efb28b6a92b207d5180b836a7cc97f3694 GIT binary patch literal 118734 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 LhQiW2^zQ!yaVtbM literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/index-31d28826.js b/invokeai/frontend/web/dist/assets/index-31d28826.js new file mode 100644 index 0000000000..5761d54025 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/index-31d28826.js @@ -0,0 +1,155 @@ +var oq=Object.defineProperty;var sq=(e,t,n)=>t in e?oq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Kl=(e,t,n)=>(sq(e,typeof t!="symbol"?t+"":t,n),n),sx=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y=(e,t,n)=>(sx(e,t,"read from private field"),n?n.call(e):t.get(e)),Bt=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Ni=(e,t,n,r)=>(sx(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n);var th=(e,t,n,r)=>({set _(i){Ni(e,t,i,n)},get _(){return Y(e,t,r)}}),Wo=(e,t,n)=>(sx(e,t,"access private method"),n);function MO(e,t){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var He=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ml(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var RO={exports:{}},Tb={},OO={exports:{}},Ke={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var rm=Symbol.for("react.element"),aq=Symbol.for("react.portal"),lq=Symbol.for("react.fragment"),cq=Symbol.for("react.strict_mode"),uq=Symbol.for("react.profiler"),dq=Symbol.for("react.provider"),fq=Symbol.for("react.context"),hq=Symbol.for("react.forward_ref"),pq=Symbol.for("react.suspense"),gq=Symbol.for("react.memo"),mq=Symbol.for("react.lazy"),_k=Symbol.iterator;function yq(e){return e===null||typeof e!="object"?null:(e=_k&&e[_k]||e["@@iterator"],typeof e=="function"?e:null)}var $O={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},NO=Object.assign,FO={};function Tf(e,t,n){this.props=e,this.context=t,this.refs=FO,this.updater=n||$O}Tf.prototype.isReactComponent={};Tf.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Tf.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function DO(){}DO.prototype=Tf.prototype;function vE(e,t,n){this.props=e,this.context=t,this.refs=FO,this.updater=n||$O}var bE=vE.prototype=new DO;bE.constructor=vE;NO(bE,Tf.prototype);bE.isPureReactComponent=!0;var Sk=Array.isArray,LO=Object.prototype.hasOwnProperty,_E={current:null},BO={key:!0,ref:!0,__self:!0,__source:!0};function zO(e,t,n){var r,i={},o=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(o=""+t.key),t)LO.call(t,r)&&!BO.hasOwnProperty(r)&&(i[r]=t[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,V=$[z];if(0>>1;zi(te,N))eei(j,te)?($[z]=j,$[ee]=N,z=ee):($[z]=te,$[X]=N,z=X);else if(eei(j,N))$[z]=j,$[ee]=N,z=ee;else break e}}return D}function i($,D){var N=$.sortIndex-D.sortIndex;return N!==0?N:$.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,a=s.now();e.unstable_now=function(){return s.now()-a}}var l=[],c=[],u=1,d=null,f=3,h=!1,p=!1,m=!1,_=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function g($){for(var D=n(c);D!==null;){if(D.callback===null)r(c);else if(D.startTime<=$)r(c),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(c)}}function b($){if(m=!1,g($),!p)if(n(l)!==null)p=!0,O(S);else{var D=n(c);D!==null&&F(b,D.startTime-$)}}function S($,D){p=!1,m&&(m=!1,v(x),x=-1),h=!0;var N=f;try{for(g(D),d=n(l);d!==null&&(!(d.expirationTime>D)||$&&!R());){var z=d.callback;if(typeof z=="function"){d.callback=null,f=d.priorityLevel;var V=z(d.expirationTime<=D);D=e.unstable_now(),typeof V=="function"?d.callback=V:d===n(l)&&r(l),g(D)}else r(l);d=n(l)}if(d!==null)var H=!0;else{var X=n(c);X!==null&&F(b,X.startTime-D),H=!1}return H}finally{d=null,f=N,h=!1}}var w=!1,C=null,x=-1,k=5,A=-1;function R(){return!(e.unstable_now()-A$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):k=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(f){case 1:case 2:case 3:var D=3;break;default:D=f}var N=f;f=D;try{return $()}finally{f=N}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,D){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var N=f;f=$;try{return D()}finally{f=N}},e.unstable_scheduleCallback=function($,D,N){var z=e.unstable_now();switch(typeof N=="object"&&N!==null?(N=N.delay,N=typeof N=="number"&&0z?($.sortIndex=N,t(c,$),n(l)===null&&$===n(c)&&(m?(v(x),x=-1):m=!0,F(b,N-z))):($.sortIndex=V,t(l,$),p||h||(p=!0,O(S))),$},e.unstable_shouldYield=R,e.unstable_wrapCallback=function($){var D=f;return function(){var N=f;f=D;try{return $.apply(this,arguments)}finally{f=N}}}})(GO);UO.exports=GO;var kq=UO.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var HO=I,wi=kq;function ne(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yC=Object.prototype.hasOwnProperty,Pq=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,wk={},Ck={};function Iq(e){return yC.call(Ck,e)?!0:yC.call(wk,e)?!1:Pq.test(e)?Ck[e]=!0:(wk[e]=!0,!1)}function Mq(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Rq(e,t,n,r){if(t===null||typeof t>"u"||Mq(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Br(e,t,n,r,i,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var ir={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ir[e]=new Br(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ir[t]=new Br(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ir[e]=new Br(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ir[e]=new Br(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ir[e]=new Br(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ir[e]=new Br(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ir[e]=new Br(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ir[e]=new Br(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ir[e]=new Br(e,5,!1,e.toLowerCase(),null,!1,!1)});var xE=/[\-:]([a-z])/g;function wE(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ir[e]=new Br(e,1,!1,e.toLowerCase(),null,!1,!1)});ir.xlinkHref=new Br("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ir[e]=new Br(e,1,!1,e.toLowerCase(),null,!0,!0)});function CE(e,t,n,r){var i=ir.hasOwnProperty(t)?ir[t]:null;(i!==null?i.type!==0:r||!(2a||i[s]!==o[a]){var l=` +`+i[s].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=s&&0<=a);break}}}finally{cx=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Dh(e):""}function Oq(e){switch(e.tag){case 5:return Dh(e.type);case 16:return Dh("Lazy");case 13:return Dh("Suspense");case 19:return Dh("SuspenseList");case 0:case 2:case 15:return e=ux(e.type,!1),e;case 11:return e=ux(e.type.render,!1),e;case 1:return e=ux(e.type,!0),e;default:return""}}function SC(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Qu:return"Fragment";case Xu:return"Portal";case vC:return"Profiler";case EE:return"StrictMode";case bC:return"Suspense";case _C:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case KO:return(e.displayName||"Context")+".Consumer";case qO:return(e._context.displayName||"Context")+".Provider";case TE:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case AE:return t=e.displayName||null,t!==null?t:SC(e.type)||"Memo";case La:t=e._payload,e=e._init;try{return SC(e(t))}catch{}}return null}function $q(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return SC(t);case 8:return t===EE?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ml(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function QO(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Nq(e){var t=QO(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(s){r=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function m0(e){e._valueTracker||(e._valueTracker=Nq(e))}function YO(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=QO(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Tv(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function xC(e,t){var n=t.checked;return Kt({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Tk(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ml(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function ZO(e,t){t=t.checked,t!=null&&CE(e,"checked",t,!1)}function wC(e,t){ZO(e,t);var n=ml(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?CC(e,t.type,n):t.hasOwnProperty("defaultValue")&&CC(e,t.type,ml(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ak(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function CC(e,t,n){(t!=="number"||Tv(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Lh=Array.isArray;function xd(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=y0.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Op(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var np={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Fq=["Webkit","ms","Moz","O"];Object.keys(np).forEach(function(e){Fq.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),np[t]=np[e]})});function n7(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||np.hasOwnProperty(e)&&np[e]?(""+t).trim():t+"px"}function r7(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=n7(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var Dq=Kt({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function AC(e,t){if(t){if(Dq[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ne(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ne(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(ne(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ne(62))}}function kC(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var PC=null;function kE(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var IC=null,wd=null,Cd=null;function Ik(e){if(e=sm(e)){if(typeof IC!="function")throw Error(ne(280));var t=e.stateNode;t&&(t=Mb(t),IC(e.stateNode,e.type,t))}}function i7(e){wd?Cd?Cd.push(e):Cd=[e]:wd=e}function o7(){if(wd){var e=wd,t=Cd;if(Cd=wd=null,Ik(e),t)for(e=0;e>>=0,e===0?32:31-(Kq(e)/Xq|0)|0}var v0=64,b0=4194304;function Bh(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Iv(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,o=e.pingedLanes,s=n&268435455;if(s!==0){var a=s&~i;a!==0?r=Bh(a):(o&=s,o!==0&&(r=Bh(o)))}else s=n&~i,s!==0?r=Bh(s):o!==0&&(r=Bh(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&i)&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function im(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ao(t),e[t]=n}function Jq(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=ip),Bk=String.fromCharCode(32),zk=!1;function E7(e,t){switch(e){case"keyup":return AK.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function T7(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Yu=!1;function PK(e,t){switch(e){case"compositionend":return T7(t);case"keypress":return t.which!==32?null:(zk=!0,Bk);case"textInput":return e=t.data,e===Bk&&zk?null:e;default:return null}}function IK(e,t){if(Yu)return e==="compositionend"||!FE&&E7(e,t)?(e=w7(),Ly=OE=Za=null,Yu=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Gk(n)}}function I7(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?I7(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function M7(){for(var e=window,t=Tv();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Tv(e.document)}return t}function DE(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function BK(e){var t=M7(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&I7(n.ownerDocument.documentElement,n)){if(r!==null&&DE(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!e.extend&&o>r&&(i=r,r=o,o=i),i=Hk(n,o);var s=Hk(n,r);i&&s&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Zu=null,FC=null,sp=null,DC=!1;function Wk(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;DC||Zu==null||Zu!==Tv(r)||(r=Zu,"selectionStart"in r&&DE(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),sp&&Bp(sp,r)||(sp=r,r=Ov(FC,"onSelect"),0td||(e.current=UC[td],UC[td]=null,td--)}function kt(e,t){td++,UC[td]=e.current,e.current=t}var yl={},vr=Ol(yl),Yr=Ol(!1),Vc=yl;function Zd(e,t){var n=e.type.contextTypes;if(!n)return yl;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Zr(e){return e=e.childContextTypes,e!=null}function Nv(){Ft(Yr),Ft(vr)}function Jk(e,t,n){if(vr.current!==yl)throw Error(ne(168));kt(vr,t),kt(Yr,n)}function z7(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in t))throw Error(ne(108,$q(e)||"Unknown",i));return Kt({},n,r)}function Fv(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||yl,Vc=vr.current,kt(vr,e),kt(Yr,Yr.current),!0}function eP(e,t,n){var r=e.stateNode;if(!r)throw Error(ne(169));n?(e=z7(e,t,Vc),r.__reactInternalMemoizedMergedChildContext=e,Ft(Yr),Ft(vr),kt(vr,e)):Ft(Yr),kt(Yr,n)}var Bs=null,Rb=!1,Cx=!1;function j7(e){Bs===null?Bs=[e]:Bs.push(e)}function YK(e){Rb=!0,j7(e)}function $l(){if(!Cx&&Bs!==null){Cx=!0;var e=0,t=mt;try{var n=Bs;for(mt=1;e>=s,i-=s,qs=1<<32-Ao(t)+i|n<x?(k=C,C=null):k=C.sibling;var A=f(v,C,g[x],b);if(A===null){C===null&&(C=k);break}e&&C&&A.alternate===null&&t(v,C),y=o(A,y,x),w===null?S=A:w.sibling=A,w=A,C=k}if(x===g.length)return n(v,C),zt&&rc(v,x),S;if(C===null){for(;xx?(k=C,C=null):k=C.sibling;var R=f(v,C,A.value,b);if(R===null){C===null&&(C=k);break}e&&C&&R.alternate===null&&t(v,C),y=o(R,y,x),w===null?S=R:w.sibling=R,w=R,C=k}if(A.done)return n(v,C),zt&&rc(v,x),S;if(C===null){for(;!A.done;x++,A=g.next())A=d(v,A.value,b),A!==null&&(y=o(A,y,x),w===null?S=A:w.sibling=A,w=A);return zt&&rc(v,x),S}for(C=r(v,C);!A.done;x++,A=g.next())A=h(C,v,x,A.value,b),A!==null&&(e&&A.alternate!==null&&C.delete(A.key===null?x:A.key),y=o(A,y,x),w===null?S=A:w.sibling=A,w=A);return e&&C.forEach(function(L){return t(v,L)}),zt&&rc(v,x),S}function _(v,y,g,b){if(typeof g=="object"&&g!==null&&g.type===Qu&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case g0:e:{for(var S=g.key,w=y;w!==null;){if(w.key===S){if(S=g.type,S===Qu){if(w.tag===7){n(v,w.sibling),y=i(w,g.props.children),y.return=v,v=y;break e}}else if(w.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===La&&aP(S)===w.type){n(v,w.sibling),y=i(w,g.props),y.ref=ah(v,w,g),y.return=v,v=y;break e}n(v,w);break}else t(v,w);w=w.sibling}g.type===Qu?(y=Pc(g.props.children,v.mode,b,g.key),y.return=v,v=y):(b=Wy(g.type,g.key,g.props,null,v.mode,b),b.ref=ah(v,y,g),b.return=v,v=b)}return s(v);case Xu:e:{for(w=g.key;y!==null;){if(y.key===w)if(y.tag===4&&y.stateNode.containerInfo===g.containerInfo&&y.stateNode.implementation===g.implementation){n(v,y.sibling),y=i(y,g.children||[]),y.return=v,v=y;break e}else{n(v,y);break}else t(v,y);y=y.sibling}y=Rx(g,v.mode,b),y.return=v,v=y}return s(v);case La:return w=g._init,_(v,y,w(g._payload),b)}if(Lh(g))return p(v,y,g,b);if(nh(g))return m(v,y,g,b);T0(v,g)}return typeof g=="string"&&g!==""||typeof g=="number"?(g=""+g,y!==null&&y.tag===6?(n(v,y.sibling),y=i(y,g),y.return=v,v=y):(n(v,y),y=Mx(g,v.mode,b),y.return=v,v=y),s(v)):n(v,y)}return _}var ef=X7(!0),Q7=X7(!1),am={},hs=Ol(am),Up=Ol(am),Gp=Ol(am);function _c(e){if(e===am)throw Error(ne(174));return e}function WE(e,t){switch(kt(Gp,t),kt(Up,e),kt(hs,am),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:TC(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=TC(t,e)}Ft(hs),kt(hs,t)}function tf(){Ft(hs),Ft(Up),Ft(Gp)}function Y7(e){_c(Gp.current);var t=_c(hs.current),n=TC(t,e.type);t!==n&&(kt(Up,e),kt(hs,n))}function qE(e){Up.current===e&&(Ft(hs),Ft(Up))}var Ht=Ol(0);function Vv(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ex=[];function KE(){for(var e=0;en?n:4,e(!0);var r=Tx.transition;Tx.transition={};try{e(!1),t()}finally{mt=n,Tx.transition=r}}function h$(){return Zi().memoizedState}function tX(e,t,n){var r=ll(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},p$(e))g$(t,n);else if(n=H7(e,t,n,r),n!==null){var i=Nr();ko(n,e,r,i),m$(n,t,r)}}function nX(e,t,n){var r=ll(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(p$(e))g$(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,a=o(s,n);if(i.hasEagerState=!0,i.eagerState=a,$o(a,s)){var l=t.interleaved;l===null?(i.next=i,GE(t)):(i.next=l.next,l.next=i),t.interleaved=i;return}}catch{}finally{}n=H7(e,t,i,r),n!==null&&(i=Nr(),ko(n,e,r,i),m$(n,t,r))}}function p$(e){var t=e.alternate;return e===qt||t!==null&&t===qt}function g$(e,t){ap=Uv=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function m$(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,IE(e,n)}}var Gv={readContext:Yi,useCallback:cr,useContext:cr,useEffect:cr,useImperativeHandle:cr,useInsertionEffect:cr,useLayoutEffect:cr,useMemo:cr,useReducer:cr,useRef:cr,useState:cr,useDebugValue:cr,useDeferredValue:cr,useTransition:cr,useMutableSource:cr,useSyncExternalStore:cr,useId:cr,unstable_isNewReconciler:!1},rX={readContext:Yi,useCallback:function(e,t){return Qo().memoizedState=[e,t===void 0?null:t],e},useContext:Yi,useEffect:cP,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Vy(4194308,4,l$.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Vy(4194308,4,e,t)},useInsertionEffect:function(e,t){return Vy(4,2,e,t)},useMemo:function(e,t){var n=Qo();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Qo();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=tX.bind(null,qt,e),[r.memoizedState,e]},useRef:function(e){var t=Qo();return e={current:e},t.memoizedState=e},useState:lP,useDebugValue:JE,useDeferredValue:function(e){return Qo().memoizedState=e},useTransition:function(){var e=lP(!1),t=e[0];return e=eX.bind(null,e[1]),Qo().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=qt,i=Qo();if(zt){if(n===void 0)throw Error(ne(407));n=n()}else{if(n=t(),Ln===null)throw Error(ne(349));Gc&30||e$(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,cP(n$.bind(null,r,o,e),[e]),r.flags|=2048,qp(9,t$.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Qo(),t=Ln.identifierPrefix;if(zt){var n=Ks,r=qs;n=(r&~(1<<32-Ao(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Hp++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[os]=t,e[Vp]=r,E$(e,t,!1,!1),t.stateNode=e;e:{switch(s=kC(n,r),n){case"dialog":Mt("cancel",e),Mt("close",e),i=r;break;case"iframe":case"object":case"embed":Mt("load",e),i=r;break;case"video":case"audio":for(i=0;irf&&(t.flags|=128,r=!0,lh(o,!1),t.lanes=4194304)}else{if(!r)if(e=Vv(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),lh(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!zt)return ur(t),null}else 2*cn()-o.renderingStartTime>rf&&n!==1073741824&&(t.flags|=128,r=!0,lh(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(n=o.last,n!==null?n.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=cn(),t.sibling=null,n=Ht.current,kt(Ht,r?n&1|2:n&1),t):(ur(t),null);case 22:case 23:return o4(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?fi&1073741824&&(ur(t),t.subtreeFlags&6&&(t.flags|=8192)):ur(t),null;case 24:return null;case 25:return null}throw Error(ne(156,t.tag))}function dX(e,t){switch(BE(t),t.tag){case 1:return Zr(t.type)&&Nv(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return tf(),Ft(Yr),Ft(vr),KE(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return qE(t),null;case 13:if(Ft(Ht),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(ne(340));Jd()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ft(Ht),null;case 4:return tf(),null;case 10:return UE(t.type._context),null;case 22:case 23:return o4(),null;case 24:return null;default:return null}}var k0=!1,gr=!1,fX=typeof WeakSet=="function"?WeakSet:Set,ye=null;function od(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Zt(e,t,r)}else n.current=null}function t5(e,t,n){try{n()}catch(r){Zt(e,t,r)}}var vP=!1;function hX(e,t){if(LC=Mv,e=M7(),DE(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var s=0,a=-1,l=-1,c=0,u=0,d=e,f=null;t:for(;;){for(var h;d!==n||i!==0&&d.nodeType!==3||(a=s+i),d!==o||r!==0&&d.nodeType!==3||(l=s+r),d.nodeType===3&&(s+=d.nodeValue.length),(h=d.firstChild)!==null;)f=d,d=h;for(;;){if(d===e)break t;if(f===n&&++c===i&&(a=s),f===o&&++u===r&&(l=s),(h=d.nextSibling)!==null)break;d=f,f=d.parentNode}d=h}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(BC={focusedElem:e,selectionRange:n},Mv=!1,ye=t;ye!==null;)if(t=ye,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ye=e;else for(;ye!==null;){t=ye;try{var p=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(p!==null){var m=p.memoizedProps,_=p.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:yo(t.type,m),_);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var g=t.stateNode.containerInfo;g.nodeType===1?g.textContent="":g.nodeType===9&&g.documentElement&&g.removeChild(g.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(ne(163))}}catch(b){Zt(t,t.return,b)}if(e=t.sibling,e!==null){e.return=t.return,ye=e;break}ye=t.return}return p=vP,vP=!1,p}function lp(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&t5(t,n,o)}i=i.next}while(i!==r)}}function Nb(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function n5(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function k$(e){var t=e.alternate;t!==null&&(e.alternate=null,k$(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[os],delete t[Vp],delete t[VC],delete t[XK],delete t[QK])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function P$(e){return e.tag===5||e.tag===3||e.tag===4}function bP(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||P$(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function r5(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=$v));else if(r!==4&&(e=e.child,e!==null))for(r5(e,t,n),e=e.sibling;e!==null;)r5(e,t,n),e=e.sibling}function i5(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(i5(e,t,n),e=e.sibling;e!==null;)i5(e,t,n),e=e.sibling}var Zn=null,bo=!1;function Aa(e,t,n){for(n=n.child;n!==null;)I$(e,t,n),n=n.sibling}function I$(e,t,n){if(fs&&typeof fs.onCommitFiberUnmount=="function")try{fs.onCommitFiberUnmount(Ab,n)}catch{}switch(n.tag){case 5:gr||od(n,t);case 6:var r=Zn,i=bo;Zn=null,Aa(e,t,n),Zn=r,bo=i,Zn!==null&&(bo?(e=Zn,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Zn.removeChild(n.stateNode));break;case 18:Zn!==null&&(bo?(e=Zn,n=n.stateNode,e.nodeType===8?wx(e.parentNode,n):e.nodeType===1&&wx(e,n),Dp(e)):wx(Zn,n.stateNode));break;case 4:r=Zn,i=bo,Zn=n.stateNode.containerInfo,bo=!0,Aa(e,t,n),Zn=r,bo=i;break;case 0:case 11:case 14:case 15:if(!gr&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&t5(n,t,s),i=i.next}while(i!==r)}Aa(e,t,n);break;case 1:if(!gr&&(od(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){Zt(n,t,a)}Aa(e,t,n);break;case 21:Aa(e,t,n);break;case 22:n.mode&1?(gr=(r=gr)||n.memoizedState!==null,Aa(e,t,n),gr=r):Aa(e,t,n);break;default:Aa(e,t,n)}}function _P(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new fX),t.forEach(function(r){var i=xX.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function po(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=s),r&=~o}if(r=i,r=cn()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*gX(r/1960))-r,10e?16:e,Ja===null)var r=!1;else{if(e=Ja,Ja=null,qv=0,it&6)throw Error(ne(331));var i=it;for(it|=4,ye=e.current;ye!==null;){var o=ye,s=o.child;if(ye.flags&16){var a=o.deletions;if(a!==null){for(var l=0;lcn()-r4?kc(e,0):n4|=n),Jr(e,t)}function L$(e,t){t===0&&(e.mode&1?(t=b0,b0<<=1,!(b0&130023424)&&(b0=4194304)):t=1);var n=Nr();e=la(e,t),e!==null&&(im(e,t,n),Jr(e,n))}function SX(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),L$(e,n)}function xX(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(ne(314))}r!==null&&r.delete(t),L$(e,n)}var B$;B$=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Yr.current)Xr=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Xr=!1,cX(e,t,n);Xr=!!(e.flags&131072)}else Xr=!1,zt&&t.flags&1048576&&V7(t,Lv,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Uy(e,t),e=t.pendingProps;var i=Zd(t,vr.current);Td(t,n),i=QE(null,t,r,e,i,n);var o=YE();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Zr(r)?(o=!0,Fv(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,HE(t),i.updater=Ob,t.stateNode=i,i._reactInternals=t,KC(t,r,e,n),t=YC(null,t,r,!0,o,n)):(t.tag=0,zt&&o&&LE(t),Rr(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Uy(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=CX(r),e=yo(r,e),i){case 0:t=QC(null,t,r,e,n);break e;case 1:t=gP(null,t,r,e,n);break e;case 11:t=hP(null,t,r,e,n);break e;case 14:t=pP(null,t,r,yo(r.type,e),n);break e}throw Error(ne(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),QC(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),gP(e,t,r,i,n);case 3:e:{if(x$(t),e===null)throw Error(ne(387));r=t.pendingProps,o=t.memoizedState,i=o.element,W7(e,t),jv(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=nf(Error(ne(423)),t),t=mP(e,t,r,n,i);break e}else if(r!==i){i=nf(Error(ne(424)),t),t=mP(e,t,r,n,i);break e}else for(vi=ol(t.stateNode.containerInfo.firstChild),_i=t,zt=!0,So=null,n=Q7(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jd(),r===i){t=ca(e,t,n);break e}Rr(e,t,r,n)}t=t.child}return t;case 5:return Y7(t),e===null&&HC(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,s=i.children,zC(r,i)?s=null:o!==null&&zC(r,o)&&(t.flags|=32),S$(e,t),Rr(e,t,s,n),t.child;case 6:return e===null&&HC(t),null;case 13:return w$(e,t,n);case 4:return WE(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=ef(t,null,r,n):Rr(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),hP(e,t,r,i,n);case 7:return Rr(e,t,t.pendingProps,n),t.child;case 8:return Rr(e,t,t.pendingProps.children,n),t.child;case 12:return Rr(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,o=t.memoizedProps,s=i.value,kt(Bv,r._currentValue),r._currentValue=s,o!==null)if($o(o.value,s)){if(o.children===i.children&&!Yr.current){t=ca(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var a=o.dependencies;if(a!==null){s=o.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Js(-1,n&-n),l.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var u=c.pending;u===null?l.next=l:(l.next=u.next,u.next=l),c.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),WC(o.return,n,t),a.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(ne(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),WC(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Rr(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,Td(t,n),i=Yi(i),r=r(i),t.flags|=1,Rr(e,t,r,n),t.child;case 14:return r=t.type,i=yo(r,t.pendingProps),i=yo(r.type,i),pP(e,t,r,i,n);case 15:return b$(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),Uy(e,t),t.tag=1,Zr(r)?(e=!0,Fv(t)):e=!1,Td(t,n),K7(t,r,i),KC(t,r,i,n),YC(null,t,r,!0,e,n);case 19:return C$(e,t,n);case 22:return _$(e,t,n)}throw Error(ne(156,t.tag))};function z$(e,t){return f7(e,t)}function wX(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ki(e,t,n,r){return new wX(e,t,n,r)}function a4(e){return e=e.prototype,!(!e||!e.isReactComponent)}function CX(e){if(typeof e=="function")return a4(e)?1:0;if(e!=null){if(e=e.$$typeof,e===TE)return 11;if(e===AE)return 14}return 2}function cl(e,t){var n=e.alternate;return n===null?(n=Ki(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Wy(e,t,n,r,i,o){var s=2;if(r=e,typeof e=="function")a4(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Qu:return Pc(n.children,i,o,t);case EE:s=8,i|=8;break;case vC:return e=Ki(12,n,t,i|2),e.elementType=vC,e.lanes=o,e;case bC:return e=Ki(13,n,t,i),e.elementType=bC,e.lanes=o,e;case _C:return e=Ki(19,n,t,i),e.elementType=_C,e.lanes=o,e;case XO:return Db(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case qO:s=10;break e;case KO:s=9;break e;case TE:s=11;break e;case AE:s=14;break e;case La:s=16,r=null;break e}throw Error(ne(130,e==null?e:typeof e,""))}return t=Ki(s,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function Pc(e,t,n,r){return e=Ki(7,e,r,t),e.lanes=n,e}function Db(e,t,n,r){return e=Ki(22,e,r,t),e.elementType=XO,e.lanes=n,e.stateNode={isHidden:!1},e}function Mx(e,t,n){return e=Ki(6,e,null,t),e.lanes=n,e}function Rx(e,t,n){return t=Ki(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function EX(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=fx(0),this.expirationTimes=fx(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=fx(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function l4(e,t,n,r,i,o,s,a,l){return e=new EX(e,t,n,a,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Ki(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},HE(o),e}function TX(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(G$)}catch(e){console.error(e)}}G$(),VO.exports=ki;var gi=VO.exports;const pze=Ml(gi);var kP=gi;mC.createRoot=kP.createRoot,mC.hydrateRoot=kP.hydrateRoot;const MX="modulepreload",RX=function(e,t){return new URL(e,t).href},PP={},H$=function(t,n,r){if(!n||n.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=RX(o,r),o in PP)return;PP[o]=!0;const s=o.endsWith(".css"),a=s?'[rel="stylesheet"]':"";if(!!r)for(let u=i.length-1;u>=0;u--){const d=i[u];if(d.href===o&&(!s||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${a}`))return;const c=document.createElement("link");if(c.rel=s?"stylesheet":MX,s||(c.as="script",c.crossOrigin=""),c.href=o,document.head.appendChild(c),s)return new Promise((u,d)=>{c.addEventListener("load",u),c.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=o,window.dispatchEvent(s),!s.defaultPrevented)throw o})};let Ar=[],to=(e,t)=>{let n=[],r={get(){return r.lc||r.listen(()=>{})(),r.value},l:t||0,lc:0,listen(i,o){return r.lc=n.push(i,o||r.l)/2,()=>{let s=n.indexOf(i);~s&&(n.splice(s,2),--r.lc||r.off())}},notify(i){let o=!Ar.length;for(let s=0;s{r.has(o)&&n(i,o)})}let $X=(e={})=>{let t=to(e);return t.setKey=function(n,r){typeof r>"u"?n in t.value&&(t.value={...t.value},delete t.value[n],t.notify(n)):t.value[n]!==r&&(t.value={...t.value,[n]:r},t.notify(n))},t};function Ox(e,t={}){let n=I.useCallback(i=>t.keys?OX(e,t.keys,i):e.listen(i),[t.keys,e]),r=e.get.bind(e);return I.useSyncExternalStore(n,r,r)}const Qv=to(),Yv=to(),Zv=to(!1);var W$={exports:{}},q$={};/** + * @license React + * use-sync-external-store-with-selector.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var lm=I;function NX(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var FX=typeof Object.is=="function"?Object.is:NX,DX=lm.useSyncExternalStore,LX=lm.useRef,BX=lm.useEffect,zX=lm.useMemo,jX=lm.useDebugValue;q$.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=LX(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=zX(function(){function l(h){if(!c){if(c=!0,u=h,h=r(h),i!==void 0&&s.hasValue){var p=s.value;if(i(p,h))return d=p}return d=h}if(p=d,FX(u,h))return p;var m=r(h);return i!==void 0&&i(p,m)?p:(u=h,d=m)}var c=!1,u,d,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,i]);var a=DX(e,o[0],o[1]);return BX(function(){s.hasValue=!0,s.value=a},[a]),jX(a),a};W$.exports=q$;var VX=W$.exports;function UX(e){e()}var K$=UX,GX=e=>K$=e,HX=()=>K$,bi="default"in Ev?Q:Ev,IP=Symbol.for("react-redux-context"),MP=typeof globalThis<"u"?globalThis:{};function WX(){if(!bi.createContext)return{};const e=MP[IP]??(MP[IP]=new Map);let t=e.get(bi.createContext);return t||(t=bi.createContext(null),e.set(bi.createContext,t)),t}var vl=WX(),qX=()=>{throw new Error("uSES not initialized!")};function f4(e=vl){return function(){return bi.useContext(e)}}var X$=f4(),Q$=qX,KX=e=>{Q$=e},XX=(e,t)=>e===t;function QX(e=vl){const t=e===vl?X$:f4(e);return function(r,i={}){const{equalityFn:o=XX,devModeChecks:s={}}=typeof i=="function"?{equalityFn:i}:i,{store:a,subscription:l,getServerState:c,stabilityCheck:u,identityFunctionCheck:d}=t();bi.useRef(!0);const f=bi.useCallback({[r.name](p){return r(p)}}[r.name],[r,u,s.stabilityCheck]),h=Q$(l.addNestedSub,a.getState,c||a.getState,f,o);return bi.useDebugValue(h),h}}var Y$=QX();function YX(){const e=HX();let t=null,n=null;return{clear(){t=null,n=null},notify(){e(()=>{let r=t;for(;r;)r.callback(),r=r.next})},get(){let r=[],i=t;for(;i;)r.push(i),i=i.next;return r},subscribe(r){let i=!0,o=n={callback:r,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){!i||t===null||(i=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}var RP={notify(){},get:()=>[]};function ZX(e,t){let n,r=RP,i=0,o=!1;function s(m){u();const _=r.subscribe(m);let v=!1;return()=>{v||(v=!0,_(),d())}}function a(){r.notify()}function l(){p.onStateChange&&p.onStateChange()}function c(){return o}function u(){i++,n||(n=t?t.addNestedSub(l):e.subscribe(l),r=YX())}function d(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=RP)}function f(){o||(o=!0,u())}function h(){o&&(o=!1,d())}const p={addNestedSub:s,notifyNestedSubs:a,handleChangeWrapper:l,isSubscribed:c,trySubscribe:f,tryUnsubscribe:h,getListeners:()=>r};return p}var JX=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",eQ=JX?bi.useLayoutEffect:bi.useEffect;function OP(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function Jv(e,t){if(OP(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let i=0;i{const c=ZX(e);return{store:e,subscription:c,getServerState:r?()=>r:void 0,stabilityCheck:i,identityFunctionCheck:o}},[e,r,i,o]),a=bi.useMemo(()=>e.getState(),[e]);eQ(()=>{const{subscription:c}=s;return c.onStateChange=c.notifyNestedSubs,c.trySubscribe(),a!==e.getState()&&c.notifyNestedSubs(),()=>{c.tryUnsubscribe(),c.onStateChange=void 0}},[s,a]);const l=t||vl;return bi.createElement(l.Provider,{value:s},n)}var nQ=tQ;function Z$(e=vl){const t=e===vl?X$:f4(e);return function(){const{store:r}=t();return r}}var J$=Z$();function rQ(e=vl){const t=e===vl?J$:Z$(e);return function(){return t().dispatch}}var eN=rQ();KX(VX.useSyncExternalStoreWithSelector);GX(gi.unstable_batchedUpdates);var iQ=gi.unstable_batchedUpdates;const tN=()=>eN(),nN=Y$,rN="default",In=to(rN);function Yn(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var oQ=(()=>typeof Symbol=="function"&&Symbol.observable||"@@observable")(),$P=oQ,$x=()=>Math.random().toString(36).substring(7).split("").join("."),sQ={INIT:`@@redux/INIT${$x()}`,REPLACE:`@@redux/REPLACE${$x()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${$x()}`},e1=sQ;function _s(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function iN(e,t,n){if(typeof e!="function")throw new Error(Yn(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Yn(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Yn(1));return n(iN)(e,t)}let r=e,i=t,o=new Map,s=o,a=0,l=!1;function c(){s===o&&(s=new Map,o.forEach((_,v)=>{s.set(v,_)}))}function u(){if(l)throw new Error(Yn(3));return i}function d(_){if(typeof _!="function")throw new Error(Yn(4));if(l)throw new Error(Yn(5));let v=!0;c();const y=a++;return s.set(y,_),function(){if(v){if(l)throw new Error(Yn(6));v=!1,c(),s.delete(y),o=null}}}function f(_){if(!_s(_))throw new Error(Yn(7));if(typeof _.type>"u")throw new Error(Yn(8));if(typeof _.type!="string")throw new Error(Yn(17));if(l)throw new Error(Yn(9));try{l=!0,i=r(i,_)}finally{l=!1}return(o=s).forEach(y=>{y()}),_}function h(_){if(typeof _!="function")throw new Error(Yn(10));r=_,f({type:e1.REPLACE})}function p(){const _=d;return{subscribe(v){if(typeof v!="object"||v===null)throw new Error(Yn(11));function y(){const b=v;b.next&&b.next(u())}return y(),{unsubscribe:_(y)}},[$P](){return this}}}return f({type:e1.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:h,[$P]:p}}function aQ(e){Object.keys(e).forEach(t=>{const n=e[t];if(typeof n(void 0,{type:e1.INIT})>"u")throw new Error(Yn(12));if(typeof n(void 0,{type:e1.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Yn(13))})}function Vb(e){const t=Object.keys(e),n={};for(let o=0;o"u")throw a&&a.type,new Error(Yn(14));c[d]=p,l=l||p!==h}return l=l||r.length!==Object.keys(s).length,l?c:s}}function t1(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function lQ(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Yn(15))};const s={getState:i.getState,dispatch:(l,...c)=>o(l,...c)},a=e.map(l=>l(s));return o=t1(...a)(i.dispatch),{...i,dispatch:o}}}function Ub(e){return _s(e)&&"type"in e&&typeof e.type=="string"}var h4=Symbol.for("immer-nothing"),dp=Symbol.for("immer-draftable"),ei=Symbol.for("immer-state");function tr(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var qc=Object.getPrototypeOf;function Ji(e){return!!e&&!!e[ei]}function No(e){var t;return e?oN(e)||Array.isArray(e)||!!e[dp]||!!((t=e.constructor)!=null&&t[dp])||cm(e)||um(e):!1}var cQ=Object.prototype.constructor.toString();function oN(e){if(!e||typeof e!="object")return!1;const t=qc(e);if(t===null)return!0;const n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object?!0:typeof n=="function"&&Function.toString.call(n)===cQ}function uQ(e){return Ji(e)||tr(15,e),e[ei].base_}function of(e,t){Kc(e)===0?Object.entries(e).forEach(([n,r])=>{t(n,r,e)}):e.forEach((n,r)=>t(r,n,e))}function Kc(e){const t=e[ei];return t?t.type_:Array.isArray(e)?1:cm(e)?2:um(e)?3:0}function Xp(e,t){return Kc(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Nx(e,t){return Kc(e)===2?e.get(t):e[t]}function sN(e,t,n){const r=Kc(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function dQ(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function cm(e){return e instanceof Map}function um(e){return e instanceof Set}function oc(e){return e.copy_||e.base_}function c5(e,t){if(cm(e))return new Map(e);if(um(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);if(!t&&oN(e))return qc(e)?{...e}:Object.assign(Object.create(null),e);const n=Object.getOwnPropertyDescriptors(e);delete n[ei];let r=Reflect.ownKeys(n);for(let i=0;i1&&(e.set=e.add=e.clear=e.delete=fQ),Object.freeze(e),t&&of(e,(n,r)=>p4(r,!0))),e}function fQ(){tr(2)}function Gb(e){return Object.isFrozen(e)}var u5={};function Xc(e){const t=u5[e];return t||tr(0,e),t}function hQ(e,t){u5[e]||(u5[e]=t)}var Qp;function aN(){return Qp}function pQ(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function NP(e,t){t&&(Xc("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function d5(e){f5(e),e.drafts_.forEach(gQ),e.drafts_=null}function f5(e){e===Qp&&(Qp=e.parent_)}function FP(e){return Qp=pQ(Qp,e)}function gQ(e){const t=e[ei];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function DP(e,t){t.unfinalizedDrafts_=t.drafts_.length;const n=t.drafts_[0];return e!==void 0&&e!==n?(n[ei].modified_&&(d5(t),tr(4)),No(e)&&(e=n1(t,e),t.parent_||r1(t,e)),t.patches_&&Xc("Patches").generateReplacementPatches_(n[ei].base_,e,t.patches_,t.inversePatches_)):e=n1(t,n,[]),d5(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==h4?e:void 0}function n1(e,t,n){if(Gb(t))return t;const r=t[ei];if(!r)return of(t,(i,o)=>LP(e,r,t,i,o,n)),t;if(r.scope_!==e)return t;if(!r.modified_)return r1(e,r.base_,!0),r.base_;if(!r.finalized_){r.finalized_=!0,r.scope_.unfinalizedDrafts_--;const i=r.copy_;let o=i,s=!1;r.type_===3&&(o=new Set(i),i.clear(),s=!0),of(o,(a,l)=>LP(e,r,i,a,l,n,s)),r1(e,i,!1),n&&e.patches_&&Xc("Patches").generatePatches_(r,n,e.patches_,e.inversePatches_)}return r.copy_}function LP(e,t,n,r,i,o,s){if(Ji(i)){const a=o&&t&&t.type_!==3&&!Xp(t.assigned_,r)?o.concat(r):void 0,l=n1(e,i,a);if(sN(n,r,l),Ji(l))e.canAutoFreeze_=!1;else return}else s&&n.add(i);if(No(i)&&!Gb(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;n1(e,i),(!t||!t.scope_.parent_)&&r1(e,i)}}function r1(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&p4(t,n)}function mQ(e,t){const n=Array.isArray(e),r={type_:n?1:0,scope_:t?t.scope_:aN(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=r,o=g4;n&&(i=[r],o=Yp);const{revoke:s,proxy:a}=Proxy.revocable(i,o);return r.draft_=a,r.revoke_=s,a}var g4={get(e,t){if(t===ei)return e;const n=oc(e);if(!Xp(n,t))return yQ(e,n,t);const r=n[t];return e.finalized_||!No(r)?r:r===Fx(e.base_,t)?(Dx(e),e.copy_[t]=p5(r,e)):r},has(e,t){return t in oc(e)},ownKeys(e){return Reflect.ownKeys(oc(e))},set(e,t,n){const r=lN(oc(e),t);if(r!=null&&r.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){const i=Fx(oc(e),t),o=i==null?void 0:i[ei];if(o&&o.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(dQ(n,i)&&(n!==void 0||Xp(e.base_,t)))return!0;Dx(e),h5(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_[t]=!0),!0},deleteProperty(e,t){return Fx(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,Dx(e),h5(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const n=oc(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty(){tr(11)},getPrototypeOf(e){return qc(e.base_)},setPrototypeOf(){tr(12)}},Yp={};of(g4,(e,t)=>{Yp[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});Yp.deleteProperty=function(e,t){return Yp.set.call(this,e,t,void 0)};Yp.set=function(e,t,n){return g4.set.call(this,e[0],t,n,e[0])};function Fx(e,t){const n=e[ei];return(n?oc(n):e)[t]}function yQ(e,t,n){var i;const r=lN(t,n);return r?"value"in r?r.value:(i=r.get)==null?void 0:i.call(e.draft_):void 0}function lN(e,t){if(!(t in e))return;let n=qc(e);for(;n;){const r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=qc(n)}}function h5(e){e.modified_||(e.modified_=!0,e.parent_&&h5(e.parent_))}function Dx(e){e.copy_||(e.copy_=c5(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var vQ=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,n,r)=>{if(typeof t=="function"&&typeof n!="function"){const o=n;n=t;const s=this;return function(l=o,...c){return s.produce(l,u=>n.call(this,u,...c))}}typeof n!="function"&&tr(6),r!==void 0&&typeof r!="function"&&tr(7);let i;if(No(t)){const o=FP(this),s=p5(t,void 0);let a=!0;try{i=n(s),a=!1}finally{a?d5(o):f5(o)}return NP(o,r),DP(i,o)}else if(!t||typeof t!="object"){if(i=n(t),i===void 0&&(i=t),i===h4&&(i=void 0),this.autoFreeze_&&p4(i,!0),r){const o=[],s=[];Xc("Patches").generateReplacementPatches_(t,i,o,s),r(o,s)}return i}else tr(1,t)},this.produceWithPatches=(t,n)=>{if(typeof t=="function")return(s,...a)=>this.produceWithPatches(s,l=>t(l,...a));let r,i;return[this.produce(t,n,(s,a)=>{r=s,i=a}),r,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){No(e)||tr(8),Ji(e)&&(e=cN(e));const t=FP(this),n=p5(e,void 0);return n[ei].isManual_=!0,f5(t),n}finishDraft(e,t){const n=e&&e[ei];(!n||!n.isManual_)&&tr(9);const{scope_:r}=n;return NP(r,t),DP(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){const i=t[n];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}n>-1&&(t=t.slice(n+1));const r=Xc("Patches").applyPatches_;return Ji(e)?r(e,t):this.produce(e,i=>r(i,t))}};function p5(e,t){const n=cm(e)?Xc("MapSet").proxyMap_(e,t):um(e)?Xc("MapSet").proxySet_(e,t):mQ(e,t);return(t?t.scope_:aN()).drafts_.push(n),n}function cN(e){return Ji(e)||tr(10,e),uN(e)}function uN(e){if(!No(e)||Gb(e))return e;const t=e[ei];let n;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=c5(e,t.scope_.immer_.useStrictShallowCopy_)}else n=c5(e,!0);return of(n,(r,i)=>{sN(n,r,uN(i))}),t&&(t.finalized_=!1),n}function bQ(){const t="replace",n="add",r="remove";function i(f,h,p,m){switch(f.type_){case 0:case 2:return s(f,h,p,m);case 1:return o(f,h,p,m);case 3:return a(f,h,p,m)}}function o(f,h,p,m){let{base_:_,assigned_:v}=f,y=f.copy_;y.length<_.length&&([_,y]=[y,_],[p,m]=[m,p]);for(let g=0;g<_.length;g++)if(v[g]&&y[g]!==_[g]){const b=h.concat([g]);p.push({op:t,path:b,value:d(y[g])}),m.push({op:t,path:b,value:d(_[g])})}for(let g=_.length;g{const b=Nx(_,y),S=Nx(v,y),w=g?Xp(_,y)?t:n:r;if(b===S&&w===t)return;const C=h.concat(y);p.push(w===r?{op:w,path:C}:{op:w,path:C,value:S}),m.push(w===n?{op:r,path:C}:w===r?{op:n,path:C,value:d(b)}:{op:t,path:C,value:d(b)})})}function a(f,h,p,m){let{base_:_,copy_:v}=f,y=0;_.forEach(g=>{if(!v.has(g)){const b=h.concat([y]);p.push({op:r,path:b,value:g}),m.unshift({op:n,path:b,value:g})}y++}),y=0,v.forEach(g=>{if(!_.has(g)){const b=h.concat([y]);p.push({op:n,path:b,value:g}),m.unshift({op:r,path:b,value:g})}y++})}function l(f,h,p,m){p.push({op:t,path:[],value:h===h4?void 0:h}),m.push({op:t,path:[],value:f})}function c(f,h){return h.forEach(p=>{const{path:m,op:_}=p;let v=f;for(let S=0;S[p,u(m)]));if(um(f))return new Set(Array.from(f).map(u));const h=Object.create(qc(f));for(const p in f)h[p]=u(f[p]);return Xp(f,dp)&&(h[dp]=f[dp]),h}function d(f){return Ji(f)?u(f):f}hQ("Patches",{applyPatches_:c,generatePatches_:i,generateReplacementPatches_:l})}var Ci=new vQ,Pf=Ci.produce,dN=Ci.produceWithPatches.bind(Ci);Ci.setAutoFreeze.bind(Ci);Ci.setUseStrictShallowCopy.bind(Ci);var BP=Ci.applyPatches.bind(Ci);Ci.createDraft.bind(Ci);Ci.finishDraft.bind(Ci);var i1="NOT_FOUND";function _Q(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function SQ(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(n=>typeof n=="function")){const n=e.map(r=>typeof r=="function"?`function ${r.name||"unnamed"}()`:typeof r).join(", ");throw new TypeError(`${t}[${n}]`)}}var zP=e=>Array.isArray(e)?e:[e];function xQ(e){const t=Array.isArray(e[0])?e[0]:e;return SQ(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function wQ(e,t){const n=[],{length:r}=e;for(let i=0;it(a,c.key));if(l>-1){const c=n[l];return l>0&&(n.splice(l,1),n.unshift(c)),c.value}return i1}function i(a,l){r(a)===i1&&(n.unshift({key:a,value:l}),n.length>e&&n.pop())}function o(){return n}function s(){n=[]}return{get:r,put:i,getEntries:o,clear:s}}var TQ=(e,t)=>e===t;function AQ(e){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;const{length:i}=n;for(let o=0;oo(h.value,u));f&&(u=f.value,a!==0&&a--)}l.put(arguments,u)}return u}return c.clearCache=()=>{l.clear(),c.resetResultsCount()},c.resultsCount=()=>a,c.resetResultsCount=()=>{a=0},c}var PQ=class{constructor(e){this.value=e}deref(){return this.value}},IQ=typeof WeakRef<"u"?WeakRef:PQ,MQ=0,jP=1;function M0(){return{s:MQ,v:void 0,o:null,p:null}}function Zp(e,t={}){let n=M0();const{resultEqualityCheck:r}=t;let i,o=0;function s(){let a=n;const{length:l}=arguments;for(let d=0,f=l;d{n=M0(),s.resetResultsCount()},s.resultsCount=()=>o,s.resetResultsCount=()=>{o=0},s}function m4(e,...t){const n=typeof e=="function"?{memoize:e,memoizeOptions:t}:e;return(...i)=>{let o=0,s=0,a,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),_Q(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const u={...n,...l},{memoize:d,memoizeOptions:f=[],argsMemoize:h=Zp,argsMemoizeOptions:p=[],devModeChecks:m={}}=u,_=zP(f),v=zP(p),y=xQ(i),g=d(function(){return o++,c.apply(null,arguments)},..._),b=h(function(){s++;const w=wQ(y,arguments);return a=g.apply(null,w),a},...v);return Object.assign(b,{resultFunc:c,memoizedResultFunc:g,dependencies:y,dependencyRecomputations:()=>s,resetDependencyRecomputations:()=>{s=0},lastResult:()=>a,recomputations:()=>o,resetRecomputations:()=>{o=0},memoize:d,argsMemoize:h})}}var fp=m4(Zp);function fN(e){return({dispatch:n,getState:r})=>i=>o=>typeof o=="function"?o(n,r,e):i(o)}var RQ=fN(),OQ=fN,$Q=(...e)=>{const t=m4(...e);return(...n)=>{const r=t(...n),i=(o,...s)=>r(Ji(o)?cN(o):o,...s);return Object.assign(i,r),i}},NQ=$Q(Zp),FQ=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?t1:t1.apply(null,arguments)},DQ=e=>e&&typeof e.match=="function";function he(e,t){function n(...r){if(t){let i=t(...r);if(!i)throw new Error(yr(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:r[0]}}return n.toString=()=>`${e}`,n.type=e,n.match=r=>Ub(r)&&r.type===e,n}function LQ(e){return Ub(e)&&Object.keys(e).every(BQ)}function BQ(e){return["type","payload","error","meta"].indexOf(e)>-1}function VP(e,t){for(const n of e)if(t(n))return n}var hN=class jh extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,jh.prototype)}static get[Symbol.species](){return jh}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new jh(...t[0].concat(this)):new jh(...t.concat(this))}};function UP(e){return No(e)?Pf(e,()=>{}):e}function GP(e,t,n){if(e.has(t)){let i=e.get(t);return n.update&&(i=n.update(i,t,e),e.set(t,i)),i}if(!n.insert)throw new Error(yr(10));const r=n.insert(t,e);return e.set(t,r),r}function zQ(e){return typeof e=="boolean"}var jQ=()=>function(t){const{thunk:n=!0,immutableCheck:r=!0,serializableCheck:i=!0,actionCreatorCheck:o=!0}=t??{};let s=new hN;return n&&(zQ(n)?s.push(RQ):s.push(OQ(n.extraArgument))),s},ad="RTK_autoBatch",uh=()=>e=>({payload:e,meta:{[ad]:!0}}),pN=e=>t=>{setTimeout(t,e)},VQ=typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:pN(10),gN=(e={type:"raf"})=>t=>(...n)=>{const r=t(...n);let i=!0,o=!1,s=!1;const a=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?VQ:e.type==="callback"?e.queueNotification:pN(e.timeout),c=()=>{s=!1,o&&(o=!1,a.forEach(u=>u()))};return Object.assign({},r,{subscribe(u){const d=()=>i&&u(),f=r.subscribe(d);return a.add(u),()=>{f(),a.delete(u)}},dispatch(u){var d;try{return i=!((d=u==null?void 0:u.meta)!=null&&d[ad]),o=!i,o&&(s||(s=!0,l(c))),r.dispatch(u)}finally{i=!0}}})},UQ=e=>function(n){const{autoBatch:r=!0}=n??{};let i=new hN(e);return r&&i.push(gN(typeof r=="object"?r:void 0)),i},GQ=!0;function HQ(e){const t=jQ(),{reducer:n=void 0,middleware:r,devTools:i=!0,preloadedState:o=void 0,enhancers:s=void 0}=e||{};let a;if(typeof n=="function")a=n;else if(_s(n))a=Vb(n);else throw new Error(yr(1));let l;typeof r=="function"?l=r(t):l=t();let c=t1;i&&(c=FQ({trace:!GQ,...typeof i=="object"&&i}));const u=lQ(...l),d=UQ(u);let f=typeof s=="function"?s(d):d();const h=c(...f);return iN(a,o,h)}function mN(e){const t={},n=[];let r;const i={addCase(o,s){const a=typeof o=="string"?o:o.type;if(!a)throw new Error(yr(28));if(a in t)throw new Error(yr(29));return t[a]=s,i},addMatcher(o,s){return n.push({matcher:o,reducer:s}),i},addDefaultCase(o){return r=o,i}};return e(i),[t,n,r]}function WQ(e){return typeof e=="function"}function qQ(e,t){let[n,r,i]=mN(t),o;if(WQ(e))o=()=>UP(e());else{const a=UP(e);o=()=>a}function s(a=o(),l){let c=[n[l.type],...r.filter(({matcher:u})=>u(l)).map(({reducer:u})=>u)];return c.filter(u=>!!u).length===0&&(c=[i]),c.reduce((u,d)=>{if(d)if(Ji(u)){const h=d(u,l);return h===void 0?u:h}else{if(No(u))return Pf(u,f=>d(f,l));{const f=d(u,l);if(f===void 0){if(u===null)return u;throw new Error(yr(9))}return f}}return u},a)}return s.getInitialState=o,s}var KQ="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",y4=(e=21)=>{let t="",n=e;for(;n--;)t+=KQ[Math.random()*64|0];return t},yN=(e,t)=>DQ(e)?e.match(t):e(t);function br(...e){return t=>e.some(n=>yN(n,t))}function hp(...e){return t=>e.every(n=>yN(n,t))}function Hb(e,t){if(!e||!e.meta)return!1;const n=typeof e.meta.requestId=="string",r=t.indexOf(e.meta.requestStatus)>-1;return n&&r}function dm(e){return typeof e[0]=="function"&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function v4(...e){return e.length===0?t=>Hb(t,["pending"]):dm(e)?t=>{const n=e.map(i=>i.pending);return br(...n)(t)}:v4()(e[0])}function sf(...e){return e.length===0?t=>Hb(t,["rejected"]):dm(e)?t=>{const n=e.map(i=>i.rejected);return br(...n)(t)}:sf()(e[0])}function fm(...e){const t=n=>n&&n.meta&&n.meta.rejectedWithValue;return e.length===0?n=>hp(sf(...e),t)(n):dm(e)?n=>hp(sf(...e),t)(n):fm()(e[0])}function bl(...e){return e.length===0?t=>Hb(t,["fulfilled"]):dm(e)?t=>{const n=e.map(i=>i.fulfilled);return br(...n)(t)}:bl()(e[0])}function g5(...e){return e.length===0?t=>Hb(t,["pending","fulfilled","rejected"]):dm(e)?t=>{const n=[];for(const i of e)n.push(i.pending,i.rejected,i.fulfilled);return br(...n)(t)}:g5()(e[0])}var XQ=["name","message","stack","code"],Lx=class{constructor(e,t){Kl(this,"_type");this.payload=e,this.meta=t}},HP=class{constructor(e,t){Kl(this,"_type");this.payload=e,this.meta=t}},QQ=e=>{if(typeof e=="object"&&e!==null){const t={};for(const n of XQ)typeof e[n]=="string"&&(t[n]=e[n]);return t}return{message:String(e)}},m5=(()=>{function e(t,n,r){const i=he(t+"/fulfilled",(l,c,u,d)=>({payload:l,meta:{...d||{},arg:u,requestId:c,requestStatus:"fulfilled"}})),o=he(t+"/pending",(l,c,u)=>({payload:void 0,meta:{...u||{},arg:c,requestId:l,requestStatus:"pending"}})),s=he(t+"/rejected",(l,c,u,d,f)=>({payload:d,error:(r&&r.serializeError||QQ)(l||"Rejected"),meta:{...f||{},arg:u,requestId:c,rejectedWithValue:!!d,requestStatus:"rejected",aborted:(l==null?void 0:l.name)==="AbortError",condition:(l==null?void 0:l.name)==="ConditionError"}}));function a(l){return(c,u,d)=>{const f=r!=null&&r.idGenerator?r.idGenerator(l):y4(),h=new AbortController;let p;function m(v){p=v,h.abort()}const _=async function(){var g,b;let v;try{let S=(g=r==null?void 0:r.condition)==null?void 0:g.call(r,l,{getState:u,extra:d});if(ZQ(S)&&(S=await S),S===!1||h.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};const w=new Promise((C,x)=>h.signal.addEventListener("abort",()=>x({name:"AbortError",message:p||"Aborted"})));c(o(f,l,(b=r==null?void 0:r.getPendingMeta)==null?void 0:b.call(r,{requestId:f,arg:l},{getState:u,extra:d}))),v=await Promise.race([w,Promise.resolve(n(l,{dispatch:c,getState:u,extra:d,requestId:f,signal:h.signal,abort:m,rejectWithValue:(C,x)=>new Lx(C,x),fulfillWithValue:(C,x)=>new HP(C,x)})).then(C=>{if(C instanceof Lx)throw C;return C instanceof HP?i(C.payload,f,l,C.meta):i(C,f,l)})])}catch(S){v=S instanceof Lx?s(null,f,l,S.payload,S.meta):s(S,f,l)}return r&&!r.dispatchConditionRejection&&s.match(v)&&v.meta.condition||c(v),v}();return Object.assign(_,{abort:m,requestId:f,arg:l,unwrap(){return _.then(YQ)}})}}return Object.assign(a,{pending:o,rejected:s,fulfilled:i,settled:br(s,i),typePrefix:t})}return e.withTypes=()=>e,e})();function YQ(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}function ZQ(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}var JQ=Symbol.for("rtk-slice-createasyncthunk");function eY(e,t){return`${e}/${t}`}function tY({creators:e}={}){var n;const t=(n=e==null?void 0:e.asyncThunk)==null?void 0:n[JQ];return function(i){const{name:o,reducerPath:s=o}=i;if(!o)throw new Error(yr(11));typeof process<"u";const a=(typeof i.reducers=="function"?i.reducers(rY()):i.reducers)||{},l=Object.keys(a),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},u={addCase(_,v){const y=typeof _=="string"?_:_.type;if(!y)throw new Error(yr(12));if(y in c.sliceCaseReducersByType)throw new Error(yr(13));return c.sliceCaseReducersByType[y]=v,u},addMatcher(_,v){return c.sliceMatchers.push({matcher:_,reducer:v}),u},exposeAction(_,v){return c.actionCreators[_]=v,u},exposeCaseReducer(_,v){return c.sliceCaseReducersByName[_]=v,u}};l.forEach(_=>{const v=a[_],y={reducerName:_,type:eY(o,_),createNotation:typeof i.reducers=="function"};oY(v)?aY(y,v,u,t):iY(y,v,u)});function d(){const[_={},v=[],y=void 0]=typeof i.extraReducers=="function"?mN(i.extraReducers):[i.extraReducers],g={..._,...c.sliceCaseReducersByType};return qQ(i.initialState,b=>{for(let S in g)b.addCase(S,g[S]);for(let S of c.sliceMatchers)b.addMatcher(S.matcher,S.reducer);for(let S of v)b.addMatcher(S.matcher,S.reducer);y&&b.addDefaultCase(y)})}const f=_=>_,h=new WeakMap;let p;const m={name:o,reducerPath:s,reducer(_,v){return p||(p=d()),p(_,v)},actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState(){return p||(p=d()),p.getInitialState()},getSelectors(_=f){const v=GP(h,this,{insert:()=>new WeakMap});return GP(v,_,{insert:()=>{const y={};for(const[g,b]of Object.entries(i.selectors??{}))y[g]=nY(this,b,_,this!==m);return y}})},selectSlice(_){let v=_[this.reducerPath];return typeof v>"u"&&this!==m&&(v=this.getInitialState()),v},get selectors(){return this.getSelectors(this.selectSlice)},injectInto(_,{reducerPath:v,...y}={}){const g=v??this.reducerPath;return _.inject({reducerPath:g,reducer:this.reducer},y),{...this,reducerPath:g}}};return m}}function nY(e,t,n,r){function i(o,...s){let a=n.call(e,o);return typeof a>"u"&&r&&(a=e.getInitialState()),t(a,...s)}return i.unwrapped=t,i}var jt=tY();function rY(){function e(t,n){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...n}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...n){return t(...n)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,n){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:n}},asyncThunk:e}}function iY({type:e,reducerName:t,createNotation:n},r,i){let o,s;if("reducer"in r){if(n&&!sY(r))throw new Error(yr(17));o=r.reducer,s=r.prepare}else o=r;i.addCase(e,o).exposeCaseReducer(t,o).exposeAction(t,s?he(e,s):he(e))}function oY(e){return e._reducerDefinitionType==="asyncThunk"}function sY(e){return e._reducerDefinitionType==="reducerWithPrepare"}function aY({type:e,reducerName:t},n,r,i){if(!i)throw new Error(yr(18));const{payloadCreator:o,fulfilled:s,pending:a,rejected:l,settled:c,options:u}=n,d=i(e,o,u);r.exposeAction(t,d),s&&r.addCase(d.fulfilled,s),a&&r.addCase(d.pending,a),l&&r.addCase(d.rejected,l),c&&r.addMatcher(d.settled,c),r.exposeCaseReducer(t,{fulfilled:s||R0,pending:a||R0,rejected:l||R0,settled:c||R0})}function R0(){}function lY(){return{ids:[],entities:{}}}function cY(){function e(t={}){return Object.assign(lY(),t)}return{getInitialState:e}}function uY(){function e(t,n={}){const{createSelector:r=NQ}=n,i=d=>d.ids,o=d=>d.entities,s=r(i,o,(d,f)=>d.map(h=>f[h])),a=(d,f)=>f,l=(d,f)=>d[f],c=r(i,d=>d.length);if(!t)return{selectIds:i,selectEntities:o,selectAll:s,selectTotal:c,selectById:r(o,a,l)};const u=r(t,o);return{selectIds:r(t,i),selectEntities:u,selectAll:r(t,s),selectTotal:r(t,c),selectById:r(u,a,l)}}return{getSelectors:e}}var dY=Ji;function fY(e){const t=ln((n,r)=>e(r));return function(r){return t(r,void 0)}}function ln(e){return function(n,r){function i(s){return LQ(s)}const o=s=>{i(r)?e(r.payload,s):e(r,s)};return dY(n)?(o(n),n):Pf(n,o)}}function ld(e,t){return t(e)}function Ic(e){return Array.isArray(e)||(e=Object.values(e)),e}function vN(e,t,n){e=Ic(e);const r=[],i=[];for(const o of e){const s=ld(o,t);s in n.entities?i.push({id:s,changes:o}):r.push(o)}return[r,i]}function bN(e){function t(p,m){const _=ld(p,e);_ in m.entities||(m.ids.push(_),m.entities[_]=p)}function n(p,m){p=Ic(p);for(const _ of p)t(_,m)}function r(p,m){const _=ld(p,e);_ in m.entities||m.ids.push(_),m.entities[_]=p}function i(p,m){p=Ic(p);for(const _ of p)r(_,m)}function o(p,m){p=Ic(p),m.ids=[],m.entities={},n(p,m)}function s(p,m){return a([p],m)}function a(p,m){let _=!1;p.forEach(v=>{v in m.entities&&(delete m.entities[v],_=!0)}),_&&(m.ids=m.ids.filter(v=>v in m.entities))}function l(p){Object.assign(p,{ids:[],entities:{}})}function c(p,m,_){const v=_.entities[m.id];if(v===void 0)return!1;const y=Object.assign({},v,m.changes),g=ld(y,e),b=g!==m.id;return b&&(p[m.id]=g,delete _.entities[m.id]),_.entities[g]=y,b}function u(p,m){return d([p],m)}function d(p,m){const _={},v={};p.forEach(g=>{g.id in m.entities&&(v[g.id]={id:g.id,changes:{...v[g.id]?v[g.id].changes:null,...g.changes}})}),p=Object.values(v),p.length>0&&p.filter(b=>c(_,b,m)).length>0&&(m.ids=Object.values(m.entities).map(b=>ld(b,e)))}function f(p,m){return h([p],m)}function h(p,m){const[_,v]=vN(p,e,m);d(v,m),n(_,m)}return{removeAll:fY(l),addOne:ln(t),addMany:ln(n),setOne:ln(r),setMany:ln(i),setAll:ln(o),updateOne:ln(u),updateMany:ln(d),upsertOne:ln(f),upsertMany:ln(h),removeOne:ln(s),removeMany:ln(a)}}function hY(e,t){const{removeOne:n,removeMany:r,removeAll:i}=bN(e);function o(v,y){return s([v],y)}function s(v,y){v=Ic(v);const g=v.filter(b=>!(ld(b,e)in y.entities));g.length!==0&&m(g,y)}function a(v,y){return l([v],y)}function l(v,y){v=Ic(v),v.length!==0&&m(v,y)}function c(v,y){v=Ic(v),y.entities={},y.ids=[],s(v,y)}function u(v,y){return d([v],y)}function d(v,y){let g=!1;for(let b of v){const S=y.entities[b.id];if(!S)continue;g=!0,Object.assign(S,b.changes);const w=e(S);b.id!==w&&(delete y.entities[b.id],y.entities[w]=S)}g&&_(y)}function f(v,y){return h([v],y)}function h(v,y){const[g,b]=vN(v,e,y);d(b,y),s(g,y)}function p(v,y){if(v.length!==y.length)return!1;for(let g=0;g{y.entities[e(g)]=g}),_(y)}function _(v){const y=Object.values(v.entities);y.sort(t);const g=y.map(e),{ids:b}=v;p(b,g)||(v.ids=g)}return{removeOne:n,removeMany:r,removeAll:i,addOne:ln(o),updateOne:ln(u),upsertOne:ln(f),setOne:ln(a),setMany:ln(l),setAll:ln(c),addMany:ln(s),updateMany:ln(d),upsertMany:ln(h)}}function jo(e={}){const{selectId:t,sortComparer:n}={sortComparer:!1,selectId:s=>s.id,...e},r=cY(),i=uY(),o=n?hY(t,n):bN(t);return{selectId:t,sortComparer:n,...r,...i,...o}}var b4=(e,t)=>{if(typeof e!="function")throw new Error(yr(32))},y5=()=>{},_N=(e,t=y5)=>(e.catch(t),e),SN=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),Mc=(e,t)=>{const n=e.signal;n.aborted||("reason"in n||Object.defineProperty(n,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},pY="task",xN="listener",wN="completed",_4="cancelled",gY=`task-${_4}`,mY=`task-${wN}`,v5=`${xN}-${_4}`,yY=`${xN}-${wN}`,Wb=class{constructor(e){Kl(this,"name","TaskAbortError");Kl(this,"message");this.code=e,this.message=`${pY} ${_4} (reason: ${e})`}},Rc=e=>{if(e.aborted){const{reason:t}=e;throw new Wb(t)}};function CN(e,t){let n=y5;return new Promise((r,i)=>{const o=()=>i(new Wb(e.reason));if(e.aborted){o();return}n=SN(e,o),t.finally(()=>n()).then(r,i)}).finally(()=>{n=y5})}var vY=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(n){return{status:n instanceof Wb?"cancelled":"rejected",error:n}}finally{t==null||t()}},o1=e=>t=>_N(CN(e,t).then(n=>(Rc(e),n))),EN=e=>{const t=o1(e);return n=>t(new Promise(r=>setTimeout(r,n)))},{assign:bY}=Object,WP={},qb="listenerMiddleware",_Y=(e,t)=>{const n=r=>SN(e,()=>Mc(r,e.reason));return(r,i)=>{b4(r);const o=new AbortController;n(o);const s=vY(async()=>{Rc(e),Rc(o.signal);const a=await r({pause:o1(o.signal),delay:EN(o.signal),signal:o.signal});return Rc(o.signal),a},()=>Mc(o,mY));return i!=null&&i.autoJoin&&t.push(s),{result:o1(e)(s),cancel(){Mc(o,gY)}}}},SY=(e,t)=>{const n=async(r,i)=>{Rc(t);let o=()=>{};const a=[new Promise((l,c)=>{let u=e({predicate:r,effect:(d,f)=>{f.unsubscribe(),l([d,f.getState(),f.getOriginalState()])}});o=()=>{u(),c()}})];i!=null&&a.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await CN(t,Promise.race(a));return Rc(t),l}finally{o()}};return(r,i)=>_N(n(r,i))},TN=e=>{let{type:t,actionCreator:n,matcher:r,predicate:i,effect:o}=e;if(t)i=he(t).match;else if(n)t=n.type,i=n.match;else if(r)i=r;else if(!i)throw new Error(yr(21));return b4(o),{predicate:i,type:t,effect:o}},xY=e=>{const{type:t,predicate:n,effect:r}=TN(e);return{id:y4(),effect:r,type:t,predicate:n,pending:new Set,unsubscribe:()=>{throw new Error(yr(22))}}},b5=e=>{e.pending.forEach(t=>{Mc(t,v5)})},wY=e=>()=>{e.forEach(b5),e.clear()},qP=(e,t,n)=>{try{e(t,n)}catch(r){setTimeout(()=>{throw r},0)}},CY=he(`${qb}/add`),EY=he(`${qb}/removeAll`),TY=he(`${qb}/remove`),AY=(...e)=>{console.error(`${qb}/error`,...e)};function kY(e={}){const t=new Map,{extra:n,onError:r=AY}=e;b4(r);const i=u=>(u.unsubscribe=()=>t.delete(u.id),t.set(u.id,u),d=>{u.unsubscribe(),d!=null&&d.cancelActive&&b5(u)}),o=u=>{let d=VP(Array.from(t.values()),f=>f.effect===u.effect);return d||(d=xY(u)),i(d)},s=u=>{const{type:d,effect:f,predicate:h}=TN(u),p=VP(Array.from(t.values()),m=>(typeof d=="string"?m.type===d:m.predicate===h)&&m.effect===f);return p&&(p.unsubscribe(),u.cancelActive&&b5(p)),!!p},a=async(u,d,f,h)=>{const p=new AbortController,m=SY(o,p.signal),_=[];try{u.pending.add(p),await Promise.resolve(u.effect(d,bY({},f,{getOriginalState:h,condition:(v,y)=>m(v,y).then(Boolean),take:m,delay:EN(p.signal),pause:o1(p.signal),extra:n,signal:p.signal,fork:_Y(p.signal,_),unsubscribe:u.unsubscribe,subscribe:()=>{t.set(u.id,u)},cancelActiveListeners:()=>{u.pending.forEach((v,y,g)=>{v!==p&&(Mc(v,v5),g.delete(v))})},cancel:()=>{Mc(p,v5),u.pending.delete(p)},throwIfCancelled:()=>{Rc(p.signal)}})))}catch(v){v instanceof Wb||qP(r,v,{raisedBy:"effect"})}finally{await Promise.allSettled(_),Mc(p,yY),u.pending.delete(p)}},l=wY(t);return{middleware:u=>d=>f=>{if(!Ub(f))return d(f);if(CY.match(f))return o(f.payload);if(EY.match(f)){l();return}if(TY.match(f))return s(f.payload);let h=u.getState();const p=()=>{if(h===WP)throw new Error(yr(23));return h};let m;try{if(m=d(f),t.size>0){let _=u.getState();const v=Array.from(t.values());for(let y of v){let g=!1;try{g=y.predicate(f,_,h)}catch(b){g=!1,qP(r,b,{raisedBy:"predicate"})}g&&a(y,f,u,p)}}}finally{h=WP}return m},startListening:o,stopListening:s,clearListeners:l}}function yr(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}const PY={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class s1{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||PY,this.options=n,this.debug=n.debug}log(){for(var t=arguments.length,n=new Array(t),r=0;r{this.observers[r]=this.observers[r]||[],this.observers[r].push(n)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t]=this.observers[t].filter(r=>r!==n)}}emit(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{s(...r)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(s=>{s.apply(s,[t,...r])})}}function dh(){let e,t;const n=new Promise((r,i)=>{e=r,t=i});return n.resolve=e,n.reject=t,n}function KP(e){return e==null?"":""+e}function IY(e,t,n){e.forEach(r=>{t[r]&&(n[r]=t[r])})}function S4(e,t,n){function r(s){return s&&s.indexOf("###")>-1?s.replace(/###/g,"."):s}function i(){return!e||typeof e=="string"}const o=typeof t!="string"?[].concat(t):t.split(".");for(;o.length>1;){if(i())return{};const s=r(o.shift());!e[s]&&n&&(e[s]=new n),Object.prototype.hasOwnProperty.call(e,s)?e=e[s]:e={}}return i()?{}:{obj:e,k:r(o.shift())}}function XP(e,t,n){const{obj:r,k:i}=S4(e,t,Object);r[i]=n}function MY(e,t,n,r){const{obj:i,k:o}=S4(e,t,Object);i[o]=i[o]||[],r&&(i[o]=i[o].concat(n)),r||i[o].push(n)}function a1(e,t){const{obj:n,k:r}=S4(e,t);if(n)return n[r]}function RY(e,t,n){const r=a1(e,n);return r!==void 0?r:a1(t,n)}function AN(e,t,n){for(const r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):AN(e[r],t[r],n):e[r]=t[r]);return e}function ku(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var OY={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function $Y(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,t=>OY[t]):e}const NY=[" ",",","?","!",";"];function FY(e,t,n){t=t||"",n=n||"";const r=NY.filter(s=>t.indexOf(s)<0&&n.indexOf(s)<0);if(r.length===0)return!0;const i=new RegExp(`(${r.map(s=>s==="?"?"\\?":s).join("|")})`);let o=!i.test(e);if(!o){const s=e.indexOf(n);s>0&&!i.test(e.substring(0,s))&&(o=!0)}return o}function l1(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!e)return;if(e[t])return e[t];const r=t.split(n);let i=e;for(let o=0;oo+s;)s++,a=r.slice(o,o+s).join(n),l=i[a];if(l===void 0)return;if(l===null)return null;if(t.endsWith(a)){if(typeof l=="string")return l;if(a&&typeof l[a]=="string")return l[a]}const c=r.slice(o+s).join(n);return c?l1(l,c,n):void 0}i=i[r[o]]}return i}function c1(e){return e&&e.indexOf("_")>0?e.replace("_","-"):e}class QP extends Kb{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const o=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,s=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let a=[t,n];r&&typeof r!="string"&&(a=a.concat(r)),r&&typeof r=="string"&&(a=a.concat(o?r.split(o):r)),t.indexOf(".")>-1&&(a=t.split("."));const l=a1(this.data,a);return l||!s||typeof r!="string"?l:l1(this.data&&this.data[t]&&this.data[t][n],r,o)}addResource(t,n,r,i){let o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator;let a=[t,n];r&&(a=a.concat(s?r.split(s):r)),t.indexOf(".")>-1&&(a=t.split("."),i=n,n=a[1]),this.addNamespaces(n),XP(this.data,a,i),o.silent||this.emit("added",t,n,r,i)}addResources(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const o in r)(typeof r[o]=="string"||Object.prototype.toString.apply(r[o])==="[object Array]")&&this.addResource(t,n,o,r[o],{silent:!0});i.silent||this.emit("added",t,n,r)}addResourceBundle(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},a=[t,n];t.indexOf(".")>-1&&(a=t.split("."),i=r,r=n,n=a[1]),this.addNamespaces(n);let l=a1(this.data,a)||{};i?AN(l,r,o):l={...l,...r},XP(this.data,a,l),s.silent||this.emit("added",t,n,r)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(t,n)}:this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(i=>n[i]&&Object.keys(n[i]).length>0)}toJSON(){return this.data}}var kN={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(o=>{this.processors[o]&&(t=this.processors[o].process(t,n,r,i))}),t}};const YP={};class u1 extends Kb{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),IY(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=cs.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;const r=this.resolve(t,n);return r&&r.res!==void 0}extractFromKey(t,n){let r=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let o=n.ns||this.options.defaultNS||[];const s=r&&t.indexOf(r)>-1,a=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!FY(t,r,i);if(s&&!a){const l=t.match(this.interpolator.nestingRegexp);if(l&&l.length>0)return{key:t,namespaces:o};const c=t.split(r);(r!==i||r===i&&this.options.ns.indexOf(c[0])>-1)&&(o=c.shift()),t=c.join(i)}return typeof o=="string"&&(o=[o]),{key:t,namespaces:o}}translate(t,n,r){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);const i=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:s,namespaces:a}=this.extractFromKey(t[t.length-1],n),l=a[a.length-1],c=n.lng||this.language,u=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(c&&c.toLowerCase()==="cimode"){if(u){const b=n.nsSeparator||this.options.nsSeparator;return i?{res:`${l}${b}${s}`,usedKey:s,exactUsedKey:s,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:`${l}${b}${s}`}return i?{res:s,usedKey:s,exactUsedKey:s,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:s}const d=this.resolve(t,n);let f=d&&d.res;const h=d&&d.usedKey||s,p=d&&d.exactUsedKey||s,m=Object.prototype.toString.apply(f),_=["[object Number]","[object Function]","[object RegExp]"],v=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject;if(y&&f&&(typeof f!="string"&&typeof f!="boolean"&&typeof f!="number")&&_.indexOf(m)<0&&!(typeof v=="string"&&m==="[object Array]")){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const b=this.options.returnedObjectHandler?this.options.returnedObjectHandler(h,f,{...n,ns:a}):`key '${s} (${this.language})' returned an object instead of string.`;return i?(d.res=b,d.usedParams=this.getUsedParamsDetails(n),d):b}if(o){const b=m==="[object Array]",S=b?[]:{},w=b?p:h;for(const C in f)if(Object.prototype.hasOwnProperty.call(f,C)){const x=`${w}${o}${C}`;S[C]=this.translate(x,{...n,joinArrays:!1,ns:a}),S[C]===x&&(S[C]=f[C])}f=S}}else if(y&&typeof v=="string"&&m==="[object Array]")f=f.join(v),f&&(f=this.extendTranslation(f,t,n,r));else{let b=!1,S=!1;const w=n.count!==void 0&&typeof n.count!="string",C=u1.hasDefaultValue(n),x=w?this.pluralResolver.getSuffix(c,n.count,n):"",k=n.ordinal&&w?this.pluralResolver.getSuffix(c,n.count,{ordinal:!1}):"",A=n[`defaultValue${x}`]||n[`defaultValue${k}`]||n.defaultValue;!this.isValidLookup(f)&&C&&(b=!0,f=A),this.isValidLookup(f)||(S=!0,f=s);const L=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&S?void 0:f,M=C&&A!==f&&this.options.updateMissing;if(S||b||M){if(this.logger.log(M?"updateKey":"missingKey",c,l,s,M?A:f),o){const F=this.resolve(s,{...n,keySeparator:!1});F&&F.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let E=[];const P=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&P&&P[0])for(let F=0;F{const N=C&&D!==f?D:L;this.options.missingKeyHandler?this.options.missingKeyHandler(F,l,$,N,M,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(F,l,$,N,M,n),this.emit("missingKey",F,l,$,f)};this.options.saveMissing&&(this.options.saveMissingPlurals&&w?E.forEach(F=>{this.pluralResolver.getSuffixes(F,n).forEach($=>{O([F],s+$,n[`defaultValue${$}`]||A)})}):O(E,s,A))}f=this.extendTranslation(f,t,n,d,r),S&&f===s&&this.options.appendNamespaceToMissingKey&&(f=`${l}:${s}`),(S||b)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?f=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${s}`:s,b?f:void 0):f=this.options.parseMissingKeyHandler(f))}return i?(d.res=f,d.usedParams=this.getUsedParamsDetails(n),d):f}extendTranslation(t,n,r,i,o){var s=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const c=typeof t=="string"&&(r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let u;if(c){const f=t.match(this.interpolator.nestingRegexp);u=f&&f.length}let d=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(d={...this.options.interpolation.defaultVariables,...d}),t=this.interpolator.interpolate(t,d,r.lng||this.language,r),c){const f=t.match(this.interpolator.nestingRegexp),h=f&&f.length;u1&&arguments[1]!==void 0?arguments[1]:{},r,i,o,s,a;return typeof t=="string"&&(t=[t]),t.forEach(l=>{if(this.isValidLookup(r))return;const c=this.extractFromKey(l,n),u=c.key;i=u;let d=c.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));const f=n.count!==void 0&&typeof n.count!="string",h=f&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),p=n.context!==void 0&&(typeof n.context=="string"||typeof n.context=="number")&&n.context!=="",m=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);d.forEach(_=>{this.isValidLookup(r)||(a=_,!YP[`${m[0]}-${_}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(a)&&(YP[`${m[0]}-${_}`]=!0,this.logger.warn(`key "${i}" for languages "${m.join(", ")}" won't get resolved as namespace "${a}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),m.forEach(v=>{if(this.isValidLookup(r))return;s=v;const y=[u];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(y,u,v,_,n);else{let b;f&&(b=this.pluralResolver.getSuffix(v,n.count,n));const S=`${this.options.pluralSeparator}zero`,w=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(f&&(y.push(u+b),n.ordinal&&b.indexOf(w)===0&&y.push(u+b.replace(w,this.options.pluralSeparator)),h&&y.push(u+S)),p){const C=`${u}${this.options.contextSeparator}${n.context}`;y.push(C),f&&(y.push(C+b),n.ordinal&&b.indexOf(w)===0&&y.push(C+b.replace(w,this.options.pluralSeparator)),h&&y.push(C+S))}}let g;for(;g=y.pop();)this.isValidLookup(r)||(o=g,r=this.getResource(v,_,g,n))}))})}),{res:r,usedKey:i,exactUsedKey:o,usedLng:s,usedNS:a}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,r,i):this.resourceStore.getResource(t,n,r,i)}getUsedParamsDetails(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=t.replace&&typeof t.replace!="string";let i=r?t.replace:t;if(r&&typeof t.count<"u"&&(i.count=t.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(const o of n)delete i[o]}return i}static hasDefaultValue(t){const n="defaultValue";for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&n===r.substring(0,n.length)&&t[r]!==void 0)return!0;return!1}}function Bx(e){return e.charAt(0).toUpperCase()+e.slice(1)}class ZP{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=cs.create("languageUtils")}getScriptPartFromCode(t){if(t=c1(t),!t||t.indexOf("-")<0)return null;const n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=c1(t),!t||t.indexOf("-")<0)return t;const n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(typeof t=="string"&&t.indexOf("-")>-1){const n=["hans","hant","latn","cyrl","cans","mong","arab"];let r=t.split("-");return this.options.lowerCaseLng?r=r.map(i=>i.toLowerCase()):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bx(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bx(r[1].toLowerCase())),n.indexOf(r[2].toLowerCase())>-1&&(r[2]=Bx(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(r=>{if(n)return;const i=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(i))&&(n=i)}),!n&&this.options.supportedLngs&&t.forEach(r=>{if(n)return;const i=this.getLanguagePartFromCode(r);if(this.isSupportedCode(i))return n=i;n=this.options.supportedLngs.find(o=>{if(o===i)return o;if(!(o.indexOf("-")<0&&i.indexOf("-")<0)&&o.indexOf(i)===0)return o})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Object.prototype.toString.apply(t)==="[object Array]")return t;if(!n)return t.default||[];let r=t[n];return r||(r=t[this.getScriptPartFromCode(n)]),r||(r=t[this.formatLanguageCode(n)]),r||(r=t[this.getLanguagePartFromCode(n)]),r||(r=t.default),r||[]}toResolveHierarchy(t,n){const r=this.getFallbackCodes(n||this.options.fallbackLng||[],t),i=[],o=s=>{s&&(this.isSupportedCode(s)?i.push(s):this.logger.warn(`rejecting language code not found in supportedLngs: ${s}`))};return typeof t=="string"&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&o(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&o(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&o(this.getLanguagePartFromCode(t))):typeof t=="string"&&o(this.formatLanguageCode(t)),r.forEach(s=>{i.indexOf(s)<0&&o(this.formatLanguageCode(s))}),i}}let DY=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],LY={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}};const BY=["v1","v2","v3"],zY=["v4"],JP={zero:0,one:1,two:2,few:3,many:4,other:5};function jY(){const e={};return DY.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:LY[t.fc]}})}),e}class VY{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=t,this.options=n,this.logger=cs.create("pluralResolver"),(!this.options.compatibilityJSON||zY.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=jY()}addRule(t,n){this.rules[t]=n}getRule(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(c1(t),{type:n.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(t,r).map(i=>`${n}${i}`)}getSuffixes(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((i,o)=>JP[i]-JP[o]).map(i=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${i}`):r.numbers.map(i=>this.getSuffix(t,i,n)):[]}getSuffix(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=this.getRule(t,r);return i?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${i.select(n)}`:this.getSuffixRetroCompatible(i,n):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,n){const r=t.noAbs?t.plurals(n):t.plurals(Math.abs(n));let i=t.numbers[r];this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1&&(i===2?i="plural":i===1&&(i=""));const o=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return this.options.compatibilityJSON==="v1"?i===1?"":typeof i=="number"?`_plural_${i.toString()}`:o():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1?o():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!BY.includes(this.options.compatibilityJSON)}}function e6(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=RY(e,t,n);return!o&&i&&typeof n=="string"&&(o=l1(e,n,r),o===void 0&&(o=l1(t,n,r))),o}class UY{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=cs.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(n=>n),this.init(t)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const n=t.interpolation;this.escape=n.escape!==void 0?n.escape:$Y,this.escapeValue=n.escapeValue!==void 0?n.escapeValue:!0,this.useRawValueToEscape=n.useRawValueToEscape!==void 0?n.useRawValueToEscape:!1,this.prefix=n.prefix?ku(n.prefix):n.prefixEscaped||"{{",this.suffix=n.suffix?ku(n.suffix):n.suffixEscaped||"}}",this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||",",this.unescapePrefix=n.unescapeSuffix?"":n.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":n.unescapeSuffix||"",this.nestingPrefix=n.nestingPrefix?ku(n.nestingPrefix):n.nestingPrefixEscaped||ku("$t("),this.nestingSuffix=n.nestingSuffix?ku(n.nestingSuffix):n.nestingSuffixEscaped||ku(")"),this.nestingOptionsSeparator=n.nestingOptionsSeparator?n.nestingOptionsSeparator:n.nestingOptionsSeparator||",",this.maxReplaces=n.maxReplaces?n.maxReplaces:1e3,this.alwaysFormat=n.alwaysFormat!==void 0?n.alwaysFormat:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=`${this.prefix}(.+?)${this.suffix}`;this.regexp=new RegExp(t,"g");const n=`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;this.regexpUnescape=new RegExp(n,"g");const r=`${this.nestingPrefix}(.+?)${this.nestingSuffix}`;this.nestingRegexp=new RegExp(r,"g")}interpolate(t,n,r,i){let o,s,a;const l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function c(p){return p.replace(/\$/g,"$$$$")}const u=p=>{if(p.indexOf(this.formatSeparator)<0){const y=e6(n,l,p,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(y,void 0,r,{...i,...n,interpolationkey:p}):y}const m=p.split(this.formatSeparator),_=m.shift().trim(),v=m.join(this.formatSeparator).trim();return this.format(e6(n,l,_,this.options.keySeparator,this.options.ignoreJSONStructure),v,r,{...i,...n,interpolationkey:_})};this.resetRegExp();const d=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,f=i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:p=>c(p)},{regex:this.regexp,safeValue:p=>this.escapeValue?c(this.escape(p)):c(p)}].forEach(p=>{for(a=0;o=p.regex.exec(t);){const m=o[1].trim();if(s=u(m),s===void 0)if(typeof d=="function"){const v=d(t,o,i);s=typeof v=="string"?v:""}else if(i&&Object.prototype.hasOwnProperty.call(i,m))s="";else if(f){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${m} for interpolating ${t}`),s="";else typeof s!="string"&&!this.useRawValueToEscape&&(s=KP(s));const _=p.safeValue(s);if(t=t.replace(o[0],_),f?(p.regex.lastIndex+=s.length,p.regex.lastIndex-=o[0].length):p.regex.lastIndex=0,a++,a>=this.maxReplaces)break}}),t}nest(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i,o,s;function a(l,c){const u=this.nestingOptionsSeparator;if(l.indexOf(u)<0)return l;const d=l.split(new RegExp(`${u}[ ]*{`));let f=`{${d[1]}`;l=d[0],f=this.interpolate(f,s);const h=f.match(/'/g),p=f.match(/"/g);(h&&h.length%2===0&&!p||p.length%2!==0)&&(f=f.replace(/'/g,'"'));try{s=JSON.parse(f),c&&(s={...c,...s})}catch(m){return this.logger.warn(`failed parsing options string in nesting for key ${l}`,m),`${l}${u}${f}`}return delete s.defaultValue,l}for(;i=this.nestingRegexp.exec(t);){let l=[];s={...r},s=s.replace&&typeof s.replace!="string"?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let c=!1;if(i[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(i[1])){const u=i[1].split(this.formatSeparator).map(d=>d.trim());i[1]=u.shift(),l=u,c=!0}if(o=n(a.call(this,i[1].trim(),s),s),o&&i[0]===t&&typeof o!="string")return o;typeof o!="string"&&(o=KP(o)),o||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${t}`),o=""),c&&(o=l.reduce((u,d)=>this.format(u,d,r.lng,{...r,interpolationkey:i[1].trim()}),o.trim())),t=t.replace(i[0],o),this.regexp.lastIndex=0}return t}}function GY(e){let t=e.toLowerCase().trim();const n={};if(e.indexOf("(")>-1){const r=e.split("(");t=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);t==="currency"&&i.indexOf(":")<0?n.currency||(n.currency=i.trim()):t==="relativetime"&&i.indexOf(":")<0?n.range||(n.range=i.trim()):i.split(";").forEach(s=>{if(!s)return;const[a,...l]=s.split(":"),c=l.join(":").trim().replace(/^'+|'+$/g,"");n[a.trim()]||(n[a.trim()]=c),c==="false"&&(n[a.trim()]=!1),c==="true"&&(n[a.trim()]=!0),isNaN(c)||(n[a.trim()]=parseInt(c,10))})}return{formatName:t,formatOptions:n}}function Pu(e){const t={};return function(r,i,o){const s=i+JSON.stringify(o);let a=t[s];return a||(a=e(c1(i),o),t[s]=a),a(r)}}class HY{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=cs.create("formatter"),this.options=t,this.formats={number:Pu((n,r)=>{const i=new Intl.NumberFormat(n,{...r});return o=>i.format(o)}),currency:Pu((n,r)=>{const i=new Intl.NumberFormat(n,{...r,style:"currency"});return o=>i.format(o)}),datetime:Pu((n,r)=>{const i=new Intl.DateTimeFormat(n,{...r});return o=>i.format(o)}),relativetime:Pu((n,r)=>{const i=new Intl.RelativeTimeFormat(n,{...r});return o=>i.format(o,r.range||"day")}),list:Pu((n,r)=>{const i=new Intl.ListFormat(n,{...r});return o=>i.format(o)})},this.init(t)}init(t){const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||","}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Pu(n)}format(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n.split(this.formatSeparator).reduce((a,l)=>{const{formatName:c,formatOptions:u}=GY(l);if(this.formats[c]){let d=a;try{const f=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},h=f.locale||f.lng||i.locale||i.lng||r;d=this.formats[c](a,h,{...u,...i,...f})}catch(f){this.logger.warn(f)}return d}else this.logger.warn(`there was no format function for ${c}`);return a},t)}}function WY(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}class qY extends Kb{constructor(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=t,this.store=n,this.services=r,this.languageUtils=r.languageUtils,this.options=i,this.logger=cs.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,i.backend,i)}queueLoad(t,n,r,i){const o={},s={},a={},l={};return t.forEach(c=>{let u=!0;n.forEach(d=>{const f=`${c}|${d}`;!r.reload&&this.store.hasResourceBundle(c,d)?this.state[f]=2:this.state[f]<0||(this.state[f]===1?s[f]===void 0&&(s[f]=!0):(this.state[f]=1,u=!1,s[f]===void 0&&(s[f]=!0),o[f]===void 0&&(o[f]=!0),l[d]===void 0&&(l[d]=!0)))}),u||(a[c]=!0)}),(Object.keys(o).length||Object.keys(s).length)&&this.queue.push({pending:s,pendingCount:Object.keys(s).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(o),pending:Object.keys(s),toLoadLanguages:Object.keys(a),toLoadNamespaces:Object.keys(l)}}loaded(t,n,r){const i=t.split("|"),o=i[0],s=i[1];n&&this.emit("failedLoading",o,s,n),r&&this.store.addResourceBundle(o,s,r),this.state[t]=n?-1:2;const a={};this.queue.forEach(l=>{MY(l.loaded,[o],s),WY(l,t),n&&l.errors.push(n),l.pendingCount===0&&!l.done&&(Object.keys(l.loaded).forEach(c=>{a[c]||(a[c]={});const u=l.loaded[c];u.length&&u.forEach(d=>{a[c][d]===void 0&&(a[c][d]=!0)})}),l.done=!0,l.errors.length?l.callback(l.errors):l.callback())}),this.emit("loaded",a),this.queue=this.queue.filter(l=>!l.done)}read(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,s=arguments.length>5?arguments[5]:void 0;if(!t.length)return s(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:r,tried:i,wait:o,callback:s});return}this.readingCalls++;const a=(c,u)=>{if(this.readingCalls--,this.waitingReads.length>0){const d=this.waitingReads.shift();this.read(d.lng,d.ns,d.fcName,d.tried,d.wait,d.callback)}if(c&&u&&i{this.read.call(this,t,n,r,i+1,o*2,s)},o);return}s(c,u)},l=this.backend[r].bind(this.backend);if(l.length===2){try{const c=l(t,n);c&&typeof c.then=="function"?c.then(u=>a(null,u)).catch(a):a(null,c)}catch(c){a(c)}return}return l(t,n,a)}prepareLoading(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);const o=this.queueLoad(t,n,r,i);if(!o.toLoad.length)return o.pending.length||i(),null;o.toLoad.forEach(s=>{this.loadOne(s)})}load(t,n,r){this.prepareLoading(t,n,{},r)}reload(t,n,r){this.prepareLoading(t,n,{reload:!0},r)}loadOne(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const r=t.split("|"),i=r[0],o=r[1];this.read(i,o,"read",void 0,void 0,(s,a)=>{s&&this.logger.warn(`${n}loading namespace ${o} for language ${i} failed`,s),!s&&a&&this.logger.log(`${n}loaded namespace ${o} for language ${i}`,a),this.loaded(t,s,a)})}saveMissing(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)){this.logger.warn(`did not save key "${r}" as the namespace "${n}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if(this.backend&&this.backend.create){const l={...s,isUpdate:o},c=this.backend.create.bind(this.backend);if(c.length<6)try{let u;c.length===5?u=c(t,n,r,i,l):u=c(t,n,r,i),u&&typeof u.then=="function"?u.then(d=>a(null,d)).catch(a):a(null,u)}catch(u){a(u)}else c(t,n,r,i,a,l)}!t||!t[0]||this.store.addResource(t[0],n,r,i)}}}function t6(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){let n={};if(typeof t[1]=="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const r=t[3]||t[2];Object.keys(r).forEach(i=>{n[i]=r[i]})}return n},interpolation:{escapeValue:!0,format:(e,t,n,r)=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function n6(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function O0(){}function KY(e){Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}class Jp extends Kb{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=n6(t),this.services={},this.logger=cs,this.modules={external:[]},KY(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(){var t=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;typeof n=="function"&&(r=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(typeof n.ns=="string"?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const i=t6();this.options={...i,...this.options,...n6(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);function o(u){return u?typeof u=="function"?new u:u:null}if(!this.options.isClone){this.modules.logger?cs.init(o(this.modules.logger),this.options):cs.init(null,this.options);let u;this.modules.formatter?u=this.modules.formatter:typeof Intl<"u"&&(u=HY);const d=new ZP(this.options);this.store=new QP(this.options.resources,this.options);const f=this.services;f.logger=cs,f.resourceStore=this.store,f.languageUtils=d,f.pluralResolver=new VY(d,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),u&&(!this.options.interpolation.format||this.options.interpolation.format===i.interpolation.format)&&(f.formatter=o(u),f.formatter.init(f,this.options),this.options.interpolation.format=f.formatter.format.bind(f.formatter)),f.interpolator=new UY(this.options),f.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},f.backendConnector=new qY(o(this.modules.backend),f.resourceStore,f,this.options),f.backendConnector.on("*",function(h){for(var p=arguments.length,m=new Array(p>1?p-1:0),_=1;_1?p-1:0),_=1;_{h.init&&h.init(this)})}if(this.format=this.options.interpolation.format,r||(r=O0),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const u=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);u.length>0&&u[0]!=="dev"&&(this.options.lng=u[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(u=>{this[u]=function(){return t.store[u](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(u=>{this[u]=function(){return t.store[u](...arguments),t}});const l=dh(),c=()=>{const u=(d,f)=>{this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(f),r(d,f)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return u(null,this.t.bind(this));this.changeLanguage(this.options.lng,u)};return this.options.resources||!this.options.initImmediate?c():setTimeout(c,0),l}loadResources(t){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O0;const i=typeof t=="string"?t:this.language;if(typeof t=="function"&&(r=t),!this.options.resources||this.options.partialBundledLanguages){if(i&&i.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const o=[],s=a=>{if(!a||a==="cimode")return;this.services.languageUtils.toResolveHierarchy(a).forEach(c=>{c!=="cimode"&&o.indexOf(c)<0&&o.push(c)})};i?s(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(l=>s(l)),this.options.preload&&this.options.preload.forEach(a=>s(a)),this.services.backendConnector.load(o,this.options.ns,a=>{!a&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(a)})}else r(null)}reloadResources(t,n,r){const i=dh();return t||(t=this.languages),n||(n=this.options.ns),r||(r=O0),this.services.backendConnector.reload(t,n,o=>{i.resolve(),r(o)}),i}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&kN.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!(["cimode","dev"].indexOf(t)>-1))for(let n=0;n-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}}changeLanguage(t,n){var r=this;this.isLanguageChangingTo=t;const i=dh();this.emit("languageChanging",t);const o=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},s=(l,c)=>{c?(o(c),this.translator.changeLanguage(c),this.isLanguageChangingTo=void 0,this.emit("languageChanged",c),this.logger.log("languageChanged",c)):this.isLanguageChangingTo=void 0,i.resolve(function(){return r.t(...arguments)}),n&&n(l,function(){return r.t(...arguments)})},a=l=>{!t&&!l&&this.services.languageDetector&&(l=[]);const c=typeof l=="string"?l:this.services.languageUtils.getBestMatchFromCodes(l);c&&(this.language||o(c),this.translator.language||this.translator.changeLanguage(c),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(c)),this.loadResources(c,u=>{s(u,c)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(t),i}getFixedT(t,n,r){var i=this;const o=function(s,a){let l;if(typeof a!="object"){for(var c=arguments.length,u=new Array(c>2?c-2:0),d=2;d`${l.keyPrefix}${f}${p}`):h=l.keyPrefix?`${l.keyPrefix}${f}${s}`:s,i.t(h,l)};return typeof t=="string"?o.lng=t:o.lngs=t,o.ns=n,o.keyPrefix=r,o}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=n.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,o=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const c=this.services.backendConnector.state[`${a}|${l}`];return c===-1||c===2};if(n.precheck){const a=n.precheck(this,s);if(a!==void 0)return a}return!!(this.hasResourceBundle(r,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||s(r,t)&&(!i||s(o,t)))}loadNamespaces(t,n){const r=dh();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),n&&n(i)}),r):(n&&n(),Promise.resolve())}loadLanguages(t,n){const r=dh();typeof t=="string"&&(t=[t]);const i=this.options.preload||[],o=t.filter(s=>i.indexOf(s)<0);return o.length?(this.options.preload=i.concat(o),this.loadResources(s=>{r.resolve(),n&&n(s)}),r):(n&&n(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)return"rtl";const n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=this.services&&this.services.languageUtils||new ZP(t6());return n.indexOf(r.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new Jp(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O0;const r=t.forkResourceStore;r&&delete t.forkResourceStore;const i={...this.options,...t,isClone:!0},o=new Jp(i);return(t.debug!==void 0||t.prefix!==void 0)&&(o.logger=o.logger.clone(t)),["store","services","language"].forEach(a=>{o[a]=this[a]}),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},r&&(o.store=new QP(this.store.data,i),o.services.resourceStore=o.store),o.translator=new u1(o.services,i),o.translator.on("*",function(a){for(var l=arguments.length,c=new Array(l>1?l-1:0),u=1;u0){if(++t>=jZ)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function HZ(e){return function(){return e}}var WZ=function(){try{var e=cu(Object,"defineProperty");return e({},"",{}),e}catch{}}();const f1=WZ;var qZ=f1?function(e,t){return f1(e,"toString",{configurable:!0,enumerable:!1,value:HZ(t),writable:!0})}:Qb;const KZ=qZ;var XZ=GZ(KZ);const $N=XZ;function NN(e,t){for(var n=-1,r=e==null?0:e.length;++n-1}var tJ=9007199254740991,nJ=/^(?:0|[1-9]\d*)$/;function Yb(e,t){var n=typeof e;return t=t??tJ,!!t&&(n=="number"||n!="symbol"&&nJ.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=oJ}function Mf(e){return e!=null&&C4(e.length)&&!x4(e)}function Jb(e,t,n){if(!_r(n))return!1;var r=typeof t;return(r=="number"?Mf(n)&&Yb(t,n.length):r=="string"&&t in n)?hm(n[t],e):!1}function LN(e){return DN(function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&typeof o=="function"?(i--,o):void 0,s&&Jb(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=Object(t);++r-1}function _ee(e,t){var n=this.__data__,r=t_(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function ma(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(a)?t>1?WN(a,t-1,n,r,i):P4(i,a):r||(i[i.length]=a)}return i}function Dee(e){var t=e==null?0:e.length;return t?WN(e,1):[]}function qN(e){return $N(FN(e,void 0,Dee),e+"")}var Lee=UN(Object.getPrototypeOf,Object);const I4=Lee;var Bee="[object Object]",zee=Function.prototype,jee=Object.prototype,KN=zee.toString,Vee=jee.hasOwnProperty,Uee=KN.call(Object);function XN(e){if(!Ei(e)||Ts(e)!=Bee)return!1;var t=I4(e);if(t===null)return!0;var n=Vee.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&KN.call(n)==Uee}function QN(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++r=r?e:QN(e,t,n)}var Gee="\\ud800-\\udfff",Hee="\\u0300-\\u036f",Wee="\\ufe20-\\ufe2f",qee="\\u20d0-\\u20ff",Kee=Hee+Wee+qee,Xee="\\ufe0e\\ufe0f",Qee="\\u200d",Yee=RegExp("["+Qee+Gee+Kee+Xee+"]");function i_(e){return Yee.test(e)}function Zee(e){return e.split("")}var ZN="\\ud800-\\udfff",Jee="\\u0300-\\u036f",ete="\\ufe20-\\ufe2f",tte="\\u20d0-\\u20ff",nte=Jee+ete+tte,rte="\\ufe0e\\ufe0f",ite="["+ZN+"]",S5="["+nte+"]",x5="\\ud83c[\\udffb-\\udfff]",ote="(?:"+S5+"|"+x5+")",JN="[^"+ZN+"]",eF="(?:\\ud83c[\\udde6-\\uddff]){2}",tF="[\\ud800-\\udbff][\\udc00-\\udfff]",ste="\\u200d",nF=ote+"?",rF="["+rte+"]?",ate="(?:"+ste+"(?:"+[JN,eF,tF].join("|")+")"+rF+nF+")*",lte=rF+nF+ate,cte="(?:"+[JN+S5+"?",S5,eF,tF,ite].join("|")+")",ute=RegExp(x5+"(?="+x5+")|"+cte+lte,"g");function dte(e){return e.match(ute)||[]}function iF(e){return i_(e)?dte(e):Zee(e)}function fte(e){return function(t){t=af(t);var n=i_(t)?iF(t):void 0,r=n?n[0]:t.charAt(0),i=n?YN(n,1).join(""):t.slice(1);return r[e]()+i}}var hte=fte("toUpperCase");const oF=hte;function sF(e,t,n,r){var i=-1,o=e==null?0:e.length;for(r&&o&&(n=e[++i]);++i=t?e:t)),e}function el(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=qy(n),n=n===n?n:0),t!==void 0&&(t=qy(t),t=t===t?t:0),rne(qy(e),t,n)}function ine(){this.__data__=new ma,this.size=0}function one(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function sne(e){return this.__data__.get(e)}function ane(e){return this.__data__.has(e)}var lne=200;function cne(e,t){var n=this.__data__;if(n instanceof ma){var r=n.__data__;if(!rg||r.lengtha))return!1;var c=o.get(e),u=o.get(t);if(c&&u)return c==t&&u==e;var d=-1,f=!0,h=n&Gre?new ig:void 0;for(o.set(e,t),o.set(t,e);++d1),o}),If(e,EF(e),n),r&&(n=gp(n,Jie|eoe|toe,Zie));for(var i=t.length;i--;)Yie(n,t[i]);return n});const uu=noe;function roe(e,t,n,r){if(!_r(e))return e;t=Rf(t,e);for(var i=-1,o=t.length,s=o-1,a=e;a!=null&&++it){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Toe();return Eoe(e+i*(t-e+Coe("1e-"+((i+"").length-1))),t)}return woe(e,t)}var koe=Math.ceil,Poe=Math.max;function Ioe(e,t,n,r){for(var i=-1,o=Poe(koe((t-e)/(n||1)),0),s=Array(o);o--;)s[r?o:++i]=e,e+=n;return s}function Moe(e){return function(t,n,r){return r&&typeof r!="number"&&Jb(t,n,r)&&(n=r=void 0),t=kd(t),n===void 0?(n=t,t=0):n=kd(n),r=r===void 0?t=o)return e;var a=n-XF(r);if(a<1)return r;var l=s?YN(s,0,a).join(""):e.slice(0,a);if(i===void 0)return l+r;if(s&&(a+=l.length-a),Kie(i)){if(e.slice(a).search(i)){var c,u=l;for(i.global||(i=RegExp(i.source,af(joe.exec(i))+"g")),i.lastIndex=0;c=i.exec(u);)var d=c.index;l=l.slice(0,d===void 0?a:d)}}else if(e.indexOf(d1(i),a)!=a){var f=l.lastIndexOf(i);f>-1&&(l=l.slice(0,f))}return l+r}var Voe=1/0,Uoe=Pd&&1/O4(new Pd([,-0]))[1]==Voe?function(e){return new Pd(e)}:zZ;const Goe=Uoe;var Hoe=200;function QF(e,t,n){var r=-1,i=eJ,o=e.length,s=!0,a=[],l=a;if(n)s=!1,i=Bie;else if(o>=Hoe){var c=t?null:Goe(e);if(c)return O4(c);s=!1,i=RF,l=new ig}else l=t?[]:a;e:for(;++rt===0?0:n===2?Math.floor((e+1+1)/2)/Math.floor((t+1)/2):(e+1+1)/(t+1),pi=e=>typeof e=="string"?{title:e,status:"info",isClosable:!0,duration:2500}:{status:"info",isClosable:!0,duration:2500,...e},gD={isInitialized:!1,isConnected:!1,shouldConfirmOnDelete:!0,enableImageDebugging:!1,toastQueue:[],denoiseProgress:null,shouldAntialiasProgressImage:!1,consoleLogLevel:"debug",shouldLogToConsole:!0,language:"en",shouldUseNSFWChecker:!1,shouldUseWatermarker:!1,shouldEnableInformationalPopovers:!1,status:"DISCONNECTED"},mD=jt({name:"system",initialState:gD,reducers:{setShouldConfirmOnDelete:(e,t)=>{e.shouldConfirmOnDelete=t.payload},setEnableImageDebugging:(e,t)=>{e.enableImageDebugging=t.payload},addToast:(e,t)=>{e.toastQueue.push(t.payload)},clearToastQueue:e=>{e.toastQueue=[]},consoleLogLevelChanged:(e,t)=>{e.consoleLogLevel=t.payload},shouldLogToConsoleChanged:(e,t)=>{e.shouldLogToConsole=t.payload},shouldAntialiasProgressImageChanged:(e,t)=>{e.shouldAntialiasProgressImage=t.payload},languageChanged:(e,t)=>{e.language=t.payload},shouldUseNSFWCheckerChanged(e,t){e.shouldUseNSFWChecker=t.payload},shouldUseWatermarkerChanged(e,t){e.shouldUseWatermarker=t.payload},setShouldEnableInformationalPopovers(e,t){e.shouldEnableInformationalPopovers=t.payload},isInitializedChanged(e,t){e.isInitialized=t.payload}},extraReducers(e){e.addCase(F4,t=>{t.isConnected=!0,t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(eD,t=>{t.isConnected=!1,t.denoiseProgress=null,t.status="DISCONNECTED"}),e.addCase(D4,t=>{t.denoiseProgress=null,t.status="PROCESSING"}),e.addCase(z4,(t,n)=>{const{step:r,total_steps:i,order:o,progress_image:s,graph_execution_state_id:a,queue_batch_id:l}=n.payload.data;t.denoiseProgress={step:r,total_steps:i,order:o,percentage:Yoe(r,i,o),progress_image:s,session_id:a,batch_id:l},t.status="PROCESSING"}),e.addCase(B4,t=>{t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(iD,t=>{t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(aD,t=>{t.status="LOADING_MODEL"}),e.addCase(cD,t=>{t.status="CONNECTED"}),e.addCase(d_,(t,n)=>{["completed","canceled","failed"].includes(n.payload.data.queue_item.status)&&(t.status="CONNECTED",t.denoiseProgress=null)}),e.addMatcher(nse,(t,n)=>{t.toastQueue.push(pi({title:J("toast.serverError"),status:"error",description:N4(n.payload.data.error_type)}))})}}),{setShouldConfirmOnDelete:gze,setEnableImageDebugging:mze,addToast:Ve,clearToastQueue:yze,consoleLogLevelChanged:vze,shouldLogToConsoleChanged:bze,shouldAntialiasProgressImageChanged:_ze,languageChanged:Sze,shouldUseNSFWCheckerChanged:Zoe,shouldUseWatermarkerChanged:Joe,setShouldEnableInformationalPopovers:xze,isInitializedChanged:ese}=mD.actions,tse=mD.reducer,nse=br(u_,dD,hD),rse=e=>{const{socket:t,dispatch:n}=e;t.on("connect",()=>{n(ZF());const r=In.get();t.emit("subscribe_queue",{queue_id:r})}),t.on("connect_error",r=>{r&&r.message&&r.data==="ERR_UNAUTHENTICATED"&&n(Ve(pi({title:r.message,status:"error",duration:1e4})))}),t.on("disconnect",()=>{n(JF())}),t.on("invocation_started",r=>{n(tD({data:r}))}),t.on("generator_progress",r=>{n(oD({data:r}))}),t.on("invocation_error",r=>{n(nD({data:r}))}),t.on("invocation_complete",r=>{n(L4({data:r}))}),t.on("graph_execution_state_complete",r=>{n(rD({data:r}))}),t.on("model_load_started",r=>{n(sD({data:r}))}),t.on("model_load_completed",r=>{n(lD({data:r}))}),t.on("session_retrieval_error",r=>{n(uD({data:r}))}),t.on("invocation_retrieval_error",r=>{n(fD({data:r}))}),t.on("queue_item_status_changed",r=>{n(pD({data:r}))})},Ss=Object.create(null);Ss.open="0";Ss.close="1";Ss.ping="2";Ss.pong="3";Ss.message="4";Ss.upgrade="5";Ss.noop="6";const Ky=Object.create(null);Object.keys(Ss).forEach(e=>{Ky[Ss[e]]=e});const I5={type:"error",data:"parser error"},yD=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",vD=typeof ArrayBuffer=="function",bD=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,j4=({type:e,data:t},n,r)=>yD&&t instanceof Blob?n?r(t):j6(t,r):vD&&(t instanceof ArrayBuffer||bD(t))?n?r(t):j6(new Blob([t]),r):r(Ss[e]+(t||"")),j6=(e,t)=>{const n=new FileReader;return n.onload=function(){const r=n.result.split(",")[1];t("b"+(r||""))},n.readAsDataURL(e)};function V6(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let Ux;function ise(e,t){if(yD&&e.data instanceof Blob)return e.data.arrayBuffer().then(V6).then(t);if(vD&&(e.data instanceof ArrayBuffer||bD(e.data)))return t(V6(e.data));j4(e,!1,n=>{Ux||(Ux=new TextEncoder),t(Ux.encode(n))})}const U6="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Vh=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let e=0;e{let t=e.length*.75,n=e.length,r,i=0,o,s,a,l;e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);const c=new ArrayBuffer(t),u=new Uint8Array(c);for(r=0;r>4,u[i++]=(s&15)<<4|a>>2,u[i++]=(a&3)<<6|l&63;return c},sse=typeof ArrayBuffer=="function",V4=(e,t)=>{if(typeof e!="string")return{type:"message",data:_D(e,t)};const n=e.charAt(0);return n==="b"?{type:"message",data:ase(e.substring(1),t)}:Ky[n]?e.length>1?{type:Ky[n],data:e.substring(1)}:{type:Ky[n]}:I5},ase=(e,t)=>{if(sse){const n=ose(e);return _D(n,t)}else return{base64:!0,data:e}},_D=(e,t)=>{switch(t){case"blob":return e instanceof Blob?e:new Blob([e]);case"arraybuffer":default:return e instanceof ArrayBuffer?e:e.buffer}},SD=String.fromCharCode(30),lse=(e,t)=>{const n=e.length,r=new Array(n);let i=0;e.forEach((o,s)=>{j4(o,!1,a=>{r[s]=a,++i===n&&t(r.join(SD))})})},cse=(e,t)=>{const n=e.split(SD),r=[];for(let i=0;i{const r=n.length;let i;if(r<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,r);else if(r<65536){i=new Uint8Array(3);const o=new DataView(i.buffer);o.setUint8(0,126),o.setUint16(1,r)}else{i=new Uint8Array(9);const o=new DataView(i.buffer);o.setUint8(0,127),o.setBigUint64(1,BigInt(r))}e.data&&typeof e.data!="string"&&(i[0]|=128),t.enqueue(i),t.enqueue(n)})}})}let Gx;function N0(e){return e.reduce((t,n)=>t+n.length,0)}function F0(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let i=0;iMath.pow(2,53-32)-1){a.enqueue(I5);break}i=u*Math.pow(2,32)+c.getUint32(4),r=3}else{if(N0(n)e){a.enqueue(I5);break}}}})}const xD=4;function vn(e){if(e)return fse(e)}function fse(e){for(var t in vn.prototype)e[t]=vn.prototype[t];return e}vn.prototype.on=vn.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this};vn.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this};vn.prototype.off=vn.prototype.removeListener=vn.prototype.removeAllListeners=vn.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(arguments.length==1)return delete this._callbacks["$"+e],this;for(var r,i=0;itypeof self<"u"?self:typeof window<"u"?window:Function("return this")())();function wD(e,...t){return t.reduce((n,r)=>(e.hasOwnProperty(r)&&(n[r]=e[r]),n),{})}const hse=qi.setTimeout,pse=qi.clearTimeout;function f_(e,t){t.useNativeTimers?(e.setTimeoutFn=hse.bind(qi),e.clearTimeoutFn=pse.bind(qi)):(e.setTimeoutFn=qi.setTimeout.bind(qi),e.clearTimeoutFn=qi.clearTimeout.bind(qi))}const gse=1.33;function mse(e){return typeof e=="string"?yse(e):Math.ceil((e.byteLength||e.size)*gse)}function yse(e){let t=0,n=0;for(let r=0,i=e.length;r=57344?n+=3:(r++,n+=4);return n}function vse(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t}function bse(e){let t={},n=e.split("&");for(let r=0,i=n.length;r0);return t}function ED(){const e=W6(+new Date);return e!==H6?(G6=0,H6=e):e+"."+W6(G6++)}for(;D0{this.readyState="paused",t()};if(this.polling||!this.writable){let r=0;this.polling&&(r++,this.once("pollComplete",function(){--r||n()})),this.writable||(r++,this.once("drain",function(){--r||n()}))}else n()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const n=r=>{if(this.readyState==="opening"&&r.type==="open"&&this.onOpen(),r.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(r)};cse(t,this.socket.binaryType).forEach(n),this.readyState!=="closed"&&(this.polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this.poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,lse(t,n=>{this.doWrite(n,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",n=this.query||{};return this.opts.timestampRequests!==!1&&(n[this.opts.timestampParam]=ED()),!this.supportsBinary&&!n.sid&&(n.b64=1),this.createUri(t,n)}request(t={}){return Object.assign(t,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new Md(this.uri(),t)}doWrite(t,n){const r=this.request({method:"POST",data:t});r.on("success",n),r.on("error",(i,o)=>{this.onError("xhr post error",i,o)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(n,r)=>{this.onError("xhr poll error",n,r)}),this.pollXhr=t}}let Md=class Xy extends vn{constructor(t,n){super(),f_(this,n),this.opts=n,this.method=n.method||"GET",this.uri=t,this.data=n.data!==void 0?n.data:null,this.create()}create(){var t;const n=wD(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this.opts.xd;const r=this.xhr=new AD(n);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let i in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(i)&&r.setRequestHeader(i,this.opts.extraHeaders[i])}}catch{}if(this.method==="POST")try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{r.setRequestHeader("Accept","*/*")}catch{}(t=this.opts.cookieJar)===null||t===void 0||t.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var i;r.readyState===3&&((i=this.opts.cookieJar)===null||i===void 0||i.parseCookies(r)),r.readyState===4&&(r.status===200||r.status===1223?this.onLoad():this.setTimeoutFn(()=>{this.onError(typeof r.status=="number"?r.status:0)},0))},r.send(this.data)}catch(i){this.setTimeoutFn(()=>{this.onError(i)},0);return}typeof document<"u"&&(this.index=Xy.requestsCount++,Xy.requests[this.index]=this)}onError(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}cleanup(t){if(!(typeof this.xhr>"u"||this.xhr===null)){if(this.xhr.onreadystatechange=wse,t)try{this.xhr.abort()}catch{}typeof document<"u"&&delete Xy.requests[this.index],this.xhr=null}}onLoad(){const t=this.xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}};Md.requestsCount=0;Md.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",q6);else if(typeof addEventListener=="function"){const e="onpagehide"in qi?"pagehide":"unload";addEventListener(e,q6,!1)}}function q6(){for(let e in Md.requests)Md.requests.hasOwnProperty(e)&&Md.requests[e].abort()}const G4=(()=>typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,n)=>n(t,0))(),L0=qi.WebSocket||qi.MozWebSocket,K6=!0,Tse="arraybuffer",X6=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class Ase extends U4{constructor(t){super(t),this.supportsBinary=!t.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const t=this.uri(),n=this.opts.protocols,r=X6?{}:wD(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=K6&&!X6?n?new L0(t,n):new L0(t):new L0(t,n,r)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let n=0;n{const s={};try{K6&&this.ws.send(o)}catch{}i&&G4(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",n=this.query||{};return this.opts.timestampRequests&&(n[this.opts.timestampParam]=ED()),this.supportsBinary||(n.b64=1),this.createUri(t,n)}check(){return!!L0}}class kse extends U4{get name(){return"webtransport"}doOpen(){typeof WebTransport=="function"&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this.transport.ready.then(()=>{this.transport.createBidirectionalStream().then(t=>{const n=dse(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=t.readable.pipeThrough(n).getReader(),i=use();i.readable.pipeTo(t.writable),this.writer=i.writable.getWriter();const o=()=>{r.read().then(({done:a,value:l})=>{a||(this.onPacket(l),o())}).catch(a=>{})};o();const s={type:"open"};this.query.sid&&(s.data=`{"sid":"${this.query.sid}"}`),this.writer.write(s).then(()=>this.onOpen())})}))}write(t){this.writable=!1;for(let n=0;n{i&&G4(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this.transport)===null||t===void 0||t.close()}}const Pse={websocket:Ase,webtransport:kse,polling:Ese},Ise=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Mse=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function R5(e){const t=e,n=e.indexOf("["),r=e.indexOf("]");n!=-1&&r!=-1&&(e=e.substring(0,n)+e.substring(n,r).replace(/:/g,";")+e.substring(r,e.length));let i=Ise.exec(e||""),o={},s=14;for(;s--;)o[Mse[s]]=i[s]||"";return n!=-1&&r!=-1&&(o.source=t,o.host=o.host.substring(1,o.host.length-1).replace(/;/g,":"),o.authority=o.authority.replace("[","").replace("]","").replace(/;/g,":"),o.ipv6uri=!0),o.pathNames=Rse(o,o.path),o.queryKey=Ose(o,o.query),o}function Rse(e,t){const n=/\/{2,9}/g,r=t.replace(n,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&r.splice(0,1),t.slice(-1)=="/"&&r.splice(r.length-1,1),r}function Ose(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,i,o){i&&(n[i]=o)}),n}let kD=class Hu extends vn{constructor(t,n={}){super(),this.binaryType=Tse,this.writeBuffer=[],t&&typeof t=="object"&&(n=t,t=null),t?(t=R5(t),n.hostname=t.host,n.secure=t.protocol==="https"||t.protocol==="wss",n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=R5(n.host).host),f_(this,n),this.secure=n.secure!=null?n.secure:typeof location<"u"&&location.protocol==="https:",n.hostname&&!n.port&&(n.port=this.secure?"443":"80"),this.hostname=n.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=n.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=n.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},n),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=bse(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,typeof addEventListener=="function"&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(t){const n=Object.assign({},this.opts.query);n.EIO=xD,n.transport=t,this.id&&(n.sid=this.id);const r=Object.assign({},this.opts,{query:n,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new Pse[t](r)}open(){let t;if(this.opts.rememberUpgrade&&Hu.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}else t=this.transports[0];this.readyState="opening";try{t=this.createTransport(t)}catch{this.transports.shift(),this.open();return}t.open(),this.setTransport(t)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",n=>this.onClose("transport close",n))}probe(t){let n=this.createTransport(t),r=!1;Hu.priorWebsocketSuccess=!1;const i=()=>{r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",d=>{if(!r)if(d.type==="pong"&&d.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",n),!n)return;Hu.priorWebsocketSuccess=n.name==="websocket",this.transport.pause(()=>{r||this.readyState!=="closed"&&(u(),this.setTransport(n),n.send([{type:"upgrade"}]),this.emitReserved("upgrade",n),n=null,this.upgrading=!1,this.flush())})}else{const f=new Error("probe error");f.transport=n.name,this.emitReserved("upgradeError",f)}}))};function o(){r||(r=!0,u(),n.close(),n=null)}const s=d=>{const f=new Error("probe error: "+d);f.transport=n.name,o(),this.emitReserved("upgradeError",f)};function a(){s("transport closed")}function l(){s("socket closed")}function c(d){n&&d.name!==n.name&&o()}const u=()=>{n.removeListener("open",i),n.removeListener("error",s),n.removeListener("close",a),this.off("close",l),this.off("upgrading",c)};n.once("open",i),n.once("error",s),n.once("close",a),this.once("close",l),this.once("upgrading",c),this.upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{r||n.open()},200):n.open()}onOpen(){if(this.readyState="open",Hu.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush(),this.readyState==="open"&&this.opts.upgrade){let t=0;const n=this.upgrades.length;for(;t{this.onClose("ping timeout")},this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let n=1;for(let r=0;r0&&n>this.maxPayload)return this.writeBuffer.slice(0,r);n+=2}return this.writeBuffer}write(t,n,r){return this.sendPacket("message",t,n,r),this}send(t,n,r){return this.sendPacket("message",t,n,r),this}sendPacket(t,n,r,i){if(typeof n=="function"&&(i=n,n=void 0),typeof r=="function"&&(i=r,r=null),this.readyState==="closing"||this.readyState==="closed")return;r=r||{},r.compress=r.compress!==!1;const o={type:t,data:n,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),i&&this.once("flush",i),this.flush()}close(){const t=()=>{this.onClose("forced close"),this.transport.close()},n=()=>{this.off("upgrade",n),this.off("upgradeError",n),t()},r=()=>{this.once("upgrade",n),this.once("upgradeError",n)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():t()}):this.upgrading?r():t()),this}onError(t){Hu.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(t,n){(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")&&(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),typeof removeEventListener=="function"&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",t,n),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(t){const n=[];let r=0;const i=t.length;for(;rtypeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,PD=Object.prototype.toString,Dse=typeof Blob=="function"||typeof Blob<"u"&&PD.call(Blob)==="[object BlobConstructor]",Lse=typeof File=="function"||typeof File<"u"&&PD.call(File)==="[object FileConstructor]";function H4(e){return Nse&&(e instanceof ArrayBuffer||Fse(e))||Dse&&e instanceof Blob||Lse&&e instanceof File}function Qy(e,t){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let n=0,r=e.length;n=0&&e.num{delete this.acks[t];for(let s=0;s{this.io.clearTimeoutFn(o),n.apply(this,[null,...s])}}emitWithAck(t,...n){const r=this.flags.timeout!==void 0||this._opts.ackTimeout!==void 0;return new Promise((i,o)=>{n.push((s,a)=>r?s?o(s):i(a):i(s)),this.emit(t,...n)})}_addToQueue(t){let n;typeof t[t.length-1]=="function"&&(n=t.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((i,...o)=>r!==this._queue[0]?void 0:(i!==null?r.tryCount>this._opts.retries&&(this._queue.shift(),n&&n(i)):(this._queue.shift(),n&&n(null,...o)),r.pending=!1,this._drainQueue())),this._queue.push(r),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const n=this._queue[0];n.pending&&!t||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:Ye.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,n)}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case Ye.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Ye.EVENT:case Ye.BINARY_EVENT:this.onevent(t);break;case Ye.ACK:case Ye.BINARY_ACK:this.onack(t);break;case Ye.DISCONNECT:this.ondisconnect();break;case Ye.CONNECT_ERROR:this.destroy();const r=new Error(t.data.message);r.data=t.data.data,this.emitReserved("connect_error",r);break}}onevent(t){const n=t.data||[];t.id!=null&&n.push(this.ack(t.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const n=this._anyListeners.slice();for(const r of n)r.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const n=this;let r=!1;return function(...i){r||(r=!0,n.packet({type:Ye.ACK,id:t,data:i}))}}onack(t){const n=this.acks[t.id];typeof n=="function"&&(n.apply(this,t.data),delete this.acks[t.id])}onconnect(t,n){this.id=t,this.recovered=n&&this._pid===n,this._pid=n,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:Ye.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const n=this._anyListeners;for(let r=0;r0&&e.jitter<=1?e.jitter:0,this.attempts=0}$f.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+n:e-n}return Math.min(e,this.max)|0};$f.prototype.reset=function(){this.attempts=0};$f.prototype.setMin=function(e){this.ms=e};$f.prototype.setMax=function(e){this.max=e};$f.prototype.setJitter=function(e){this.jitter=e};class N5 extends vn{constructor(t,n){var r;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(n=t,t=void 0),n=n||{},n.path=n.path||"/socket.io",this.opts=n,f_(this,n),this.reconnection(n.reconnection!==!1),this.reconnectionAttempts(n.reconnectionAttempts||1/0),this.reconnectionDelay(n.reconnectionDelay||1e3),this.reconnectionDelayMax(n.reconnectionDelayMax||5e3),this.randomizationFactor((r=n.randomizationFactor)!==null&&r!==void 0?r:.5),this.backoff=new $f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(n.timeout==null?2e4:n.timeout),this._readyState="closed",this.uri=t;const i=n.parser||Hse;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=n.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var n;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(n=this.backoff)===null||n===void 0||n.setMin(t),this)}randomizationFactor(t){var n;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(n=this.backoff)===null||n===void 0||n.setJitter(t),this)}reconnectionDelayMax(t){var n;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(n=this.backoff)===null||n===void 0||n.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new kD(this.uri,this.opts);const n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const i=_o(n,"open",function(){r.onopen(),t&&t()}),o=a=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",a),t?t(a):this.maybeReconnectOnOpen()},s=_o(n,"error",o);if(this._timeout!==!1){const a=this._timeout,l=this.setTimeoutFn(()=>{i(),o(new Error("timeout")),n.close()},a);this.opts.autoUnref&&l.unref(),this.subs.push(()=>{this.clearTimeoutFn(l)})}return this.subs.push(i),this.subs.push(s),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(_o(t,"ping",this.onping.bind(this)),_o(t,"data",this.ondata.bind(this)),_o(t,"error",this.onerror.bind(this)),_o(t,"close",this.onclose.bind(this)),_o(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(n){this.onclose("parse error",n)}}ondecoded(t){G4(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,n){let r=this.nsps[t];return r?this._autoConnect&&!r.active&&r.connect():(r=new ID(this,t,n),this.nsps[t]=r),r}_destroy(t){const n=Object.keys(this.nsps);for(const r of n)if(this.nsps[r].active)return;this._close()}_packet(t){const n=this.encoder.encode(t);for(let r=0;rt()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(t,n){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,n),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const n=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(i=>{i?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",i)):t.onreconnect()}))},n);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const hh={};function Yy(e,t){typeof e=="object"&&(t=e,e=void 0),t=t||{};const n=$se(e,t.path||"/socket.io"),r=n.source,i=n.id,o=n.path,s=hh[i]&&o in hh[i].nsps,a=t.forceNew||t["force new connection"]||t.multiplex===!1||s;let l;return a?l=new N5(r,t):(hh[i]||(hh[i]=new N5(r,t)),l=hh[i]),n.query&&!t.query&&(t.query=n.queryKey),l.socket(n.path,t)}Object.assign(Yy,{Manager:N5,Socket:ID,io:Yy,connect:Yy});const g1=$X({}),Hx=to(!1),wze=()=>{const e=tN(),t=Ox(Yv),n=Ox(Qv),r=Ox(g1),i=I.useMemo(()=>{const s=window.location.protocol==="https:"?"wss":"ws";return t?t.replace(/^https?:\/\//i,""):`${s}://${window.location.host}`},[t]),o=I.useMemo(()=>{const s={timeout:6e4,path:"/ws/socket.io",autoConnect:!1,forceNew:!0};return n&&(s.auth={token:n},s.transports=["websocket","polling"]),{...s,...r}},[n,r]);I.useEffect(()=>{if(Hx.get())return;const s=Yy(i,o);return rse({dispatch:e,socket:s}),s.connect(),Zv.get()&&(window.$socketOptions=g1,console.log("Socket initialized",s)),Hx.set(!0),()=>{Zv.get()&&(window.$socketOptions=void 0,console.log("Socket teardown",s)),s.disconnect(),Hx.set(!1)}},[e,o,i])},Y6=to(void 0),Z6=to(void 0),F5=to(),MD=to(),B0=(e,t)=>Math.floor(e/t)*t,Or=(e,t)=>Math.round(e/t)*t,RD={shouldUpdateImagesOnConnect:!1,shouldFetchMetadataFromApi:!1,disabledTabs:[],disabledFeatures:["lightbox","faceRestore","batches","bulkDownload"],disabledSDFeatures:["variation","symmetry","hires","perlinNoise","noiseThreshold"],nodesAllowlist:void 0,nodesDenylist:void 0,canRestoreDeletedImagesFromBin:!0,sd:{disabledControlNetModels:[],disabledControlNetProcessors:[],iterations:{initial:1,min:1,sliderMax:1e3,inputMax:1e4,fineStep:1,coarseStep:1},width:{initial:512,min:64,sliderMax:1536,inputMax:4096,fineStep:8,coarseStep:64},height:{initial:512,min:64,sliderMax:1536,inputMax:4096,fineStep:8,coarseStep:64},steps:{initial:30,min:1,sliderMax:100,inputMax:500,fineStep:1,coarseStep:1},guidance:{initial:7,min:1,sliderMax:20,inputMax:200,fineStep:.1,coarseStep:.5},img2imgStrength:{initial:.7,min:0,sliderMax:1,inputMax:1,fineStep:.01,coarseStep:.05},hrfStrength:{initial:.45,min:0,sliderMax:1,inputMax:1,fineStep:.01,coarseStep:.05},dynamicPrompts:{maxPrompts:{initial:100,min:1,sliderMax:1e3,inputMax:1e4}}}},OD=jt({name:"config",initialState:RD,reducers:{configChanged:(e,t)=>{Id(e,t.payload)}}}),{configChanged:qse}=OD.actions,Kse=OD.reducer;let z0;const Xse=new Uint8Array(16);function Qse(){if(!z0&&(z0=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!z0))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return z0(Xse)}const Qn=[];for(let e=0;e<256;++e)Qn.push((e+256).toString(16).slice(1));function Yse(e,t=0){return Qn[e[t+0]]+Qn[e[t+1]]+Qn[e[t+2]]+Qn[e[t+3]]+"-"+Qn[e[t+4]]+Qn[e[t+5]]+"-"+Qn[e[t+6]]+Qn[e[t+7]]+"-"+Qn[e[t+8]]+Qn[e[t+9]]+"-"+Qn[e[t+10]]+Qn[e[t+11]]+Qn[e[t+12]]+Qn[e[t+13]]+Qn[e[t+14]]+Qn[e[t+15]]}const Zse=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),J6={randomUUID:Zse};function ul(e,t,n){if(J6.randomUUID&&!t&&!e)return J6.randomUUID();e=e||{};const r=e.random||(e.rng||Qse)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){n=n||0;for(let i=0;i<16;++i)t[n+i]=r[i];return t}return Yse(r)}const hc={none:{type:"none",get label(){return Oe.t("controlnet.none")},get description(){return Oe.t("controlnet.noneDescription")},default:{type:"none"}},canny_image_processor:{type:"canny_image_processor",get label(){return Oe.t("controlnet.canny")},get description(){return Oe.t("controlnet.cannyDescription")},default:{id:"canny_image_processor",type:"canny_image_processor",low_threshold:100,high_threshold:200}},color_map_image_processor:{type:"color_map_image_processor",get label(){return Oe.t("controlnet.colorMap")},get description(){return Oe.t("controlnet.colorMapDescription")},default:{id:"color_map_image_processor",type:"color_map_image_processor",color_map_tile_size:64}},content_shuffle_image_processor:{type:"content_shuffle_image_processor",get label(){return Oe.t("controlnet.contentShuffle")},get description(){return Oe.t("controlnet.contentShuffleDescription")},default:{id:"content_shuffle_image_processor",type:"content_shuffle_image_processor",detect_resolution:512,image_resolution:512,h:512,w:512,f:256}},hed_image_processor:{type:"hed_image_processor",get label(){return Oe.t("controlnet.hed")},get description(){return Oe.t("controlnet.hedDescription")},default:{id:"hed_image_processor",type:"hed_image_processor",detect_resolution:512,image_resolution:512,scribble:!1}},lineart_anime_image_processor:{type:"lineart_anime_image_processor",get label(){return Oe.t("controlnet.lineartAnime")},get description(){return Oe.t("controlnet.lineartAnimeDescription")},default:{id:"lineart_anime_image_processor",type:"lineart_anime_image_processor",detect_resolution:512,image_resolution:512}},lineart_image_processor:{type:"lineart_image_processor",get label(){return Oe.t("controlnet.lineart")},get description(){return Oe.t("controlnet.lineartDescription")},default:{id:"lineart_image_processor",type:"lineart_image_processor",detect_resolution:512,image_resolution:512,coarse:!1}},mediapipe_face_processor:{type:"mediapipe_face_processor",get label(){return Oe.t("controlnet.mediapipeFace")},get description(){return Oe.t("controlnet.mediapipeFaceDescription")},default:{id:"mediapipe_face_processor",type:"mediapipe_face_processor",max_faces:1,min_confidence:.5}},midas_depth_image_processor:{type:"midas_depth_image_processor",get label(){return Oe.t("controlnet.depthMidas")},get description(){return Oe.t("controlnet.depthMidasDescription")},default:{id:"midas_depth_image_processor",type:"midas_depth_image_processor",a_mult:2,bg_th:.1}},mlsd_image_processor:{type:"mlsd_image_processor",get label(){return Oe.t("controlnet.mlsd")},get description(){return Oe.t("controlnet.mlsdDescription")},default:{id:"mlsd_image_processor",type:"mlsd_image_processor",detect_resolution:512,image_resolution:512,thr_d:.1,thr_v:.1}},normalbae_image_processor:{type:"normalbae_image_processor",get label(){return Oe.t("controlnet.normalBae")},get description(){return Oe.t("controlnet.normalBaeDescription")},default:{id:"normalbae_image_processor",type:"normalbae_image_processor",detect_resolution:512,image_resolution:512}},openpose_image_processor:{type:"openpose_image_processor",get label(){return Oe.t("controlnet.openPose")},get description(){return Oe.t("controlnet.openPoseDescription")},default:{id:"openpose_image_processor",type:"openpose_image_processor",detect_resolution:512,image_resolution:512,hand_and_face:!1}},pidi_image_processor:{type:"pidi_image_processor",get label(){return Oe.t("controlnet.pidi")},get description(){return Oe.t("controlnet.pidiDescription")},default:{id:"pidi_image_processor",type:"pidi_image_processor",detect_resolution:512,image_resolution:512,scribble:!1,safe:!1}},zoe_depth_image_processor:{type:"zoe_depth_image_processor",get label(){return Oe.t("controlnet.depthZoe")},get description(){return Oe.t("controlnet.depthZoeDescription")},default:{id:"zoe_depth_image_processor",type:"zoe_depth_image_processor"}}},j0={canny:"canny_image_processor",mlsd:"mlsd_image_processor",depth:"midas_depth_image_processor",bae:"normalbae_image_processor",sketch:"pidi_image_processor",scribble:"lineart_image_processor",lineart:"lineart_image_processor",lineart_anime:"lineart_anime_image_processor",softedge:"hed_image_processor",shuffle:"content_shuffle_image_processor",openpose:"openpose_image_processor",mediapipe:"mediapipe_face_processor",pidi:"pidi_image_processor",zoe:"zoe_depth_image_processor",color:"color_map_image_processor"},Jse={type:"controlnet",isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,controlMode:"balanced",resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:hc.canny_image_processor.default,shouldAutoConfig:!0},eae={type:"t2i_adapter",isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:hc.canny_image_processor.default,shouldAutoConfig:!0},tae={type:"ip_adapter",isEnabled:!0,controlImage:null,model:null,weight:1,beginStepPct:0,endStepPct:1},eI=(e,t,n={})=>{switch(t){case"controlnet":return Id(Ge(Jse),{id:e,...n});case"t2i_adapter":return Id(Ge(eae),{id:e,...n});case"ip_adapter":return Id(Ge(tae),{id:e,...n});default:throw new Error(`Unknown control adapter type: ${t}`)}},q4=he("controlAdapters/imageProcessed"),h_=e=>e.type==="controlnet",$D=e=>e.type==="ip_adapter",K4=e=>e.type==="t2i_adapter",hi=e=>h_(e)||K4(e),an=jo({selectId:e=>e.id}),{selectById:li,selectAll:As,selectEntities:Cze,selectIds:Eze,selectTotal:Tze}=an.getSelectors(),D5=an.getInitialState({pendingControlImages:[]}),nae=e=>As(e).filter(h_),rae=e=>As(e).filter(h_).filter(t=>t.isEnabled&&t.model&&(!!t.processedControlImage||t.processorType==="none"&&!!t.controlImage)),iae=e=>As(e).filter($D),oae=e=>As(e).filter($D).filter(t=>t.isEnabled&&t.model&&!!t.controlImage),sae=e=>As(e).filter(K4),aae=e=>As(e).filter(K4).filter(t=>t.isEnabled&&t.model&&(!!t.processedControlImage||t.processorType==="none"&&!!t.controlImage)),ND=jt({name:"controlAdapters",initialState:D5,reducers:{controlAdapterAdded:{reducer:(e,t)=>{const{id:n,type:r,overrides:i}=t.payload;an.addOne(e,eI(n,r,i))},prepare:({type:e,overrides:t})=>({payload:{id:ul(),type:e,overrides:t}})},controlAdapterRecalled:(e,t)=>{an.addOne(e,t.payload)},controlAdapterDuplicated:{reducer:(e,t)=>{const{id:n,newId:r}=t.payload,i=li(e,n);if(!i)return;const o=Id(Ge(i),{id:r,isEnabled:!0});an.addOne(e,o)},prepare:e=>({payload:{id:e,newId:ul()}})},controlAdapterAddedFromImage:{reducer:(e,t)=>{const{id:n,type:r,controlImage:i}=t.payload;an.addOne(e,eI(n,r,{controlImage:i}))},prepare:e=>({payload:{...e,id:ul()}})},controlAdapterRemoved:(e,t)=>{an.removeOne(e,t.payload.id)},controlAdapterIsEnabledChanged:(e,t)=>{const{id:n,isEnabled:r}=t.payload;an.updateOne(e,{id:n,changes:{isEnabled:r}})},controlAdapterImageChanged:(e,t)=>{const{id:n,controlImage:r}=t.payload,i=li(e,n);i&&(an.updateOne(e,{id:n,changes:{controlImage:r,processedControlImage:null}}),r!==null&&hi(i)&&i.processorType!=="none"&&e.pendingControlImages.push(n))},controlAdapterProcessedImageChanged:(e,t)=>{const{id:n,processedControlImage:r}=t.payload,i=li(e,n);i&&hi(i)&&(an.updateOne(e,{id:n,changes:{processedControlImage:r}}),e.pendingControlImages=e.pendingControlImages.filter(o=>o!==n))},controlAdapterModelCleared:(e,t)=>{an.updateOne(e,{id:t.payload.id,changes:{model:null}})},controlAdapterModelChanged:(e,t)=>{const{id:n,model:r}=t.payload,i=li(e,n);if(!i)return;if(!hi(i)){an.updateOne(e,{id:n,changes:{model:r}});return}const o={id:n,changes:{model:r}};if(o.changes.processedControlImage=null,i.shouldAutoConfig){let s;for(const a in j0)if(r.model_name.includes(a)){s=j0[a];break}s?(o.changes.processorType=s,o.changes.processorNode=hc[s].default):(o.changes.processorType="none",o.changes.processorNode=hc.none.default)}an.updateOne(e,o)},controlAdapterWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload;an.updateOne(e,{id:n,changes:{weight:r}})},controlAdapterBeginStepPctChanged:(e,t)=>{const{id:n,beginStepPct:r}=t.payload;an.updateOne(e,{id:n,changes:{beginStepPct:r}})},controlAdapterEndStepPctChanged:(e,t)=>{const{id:n,endStepPct:r}=t.payload;an.updateOne(e,{id:n,changes:{endStepPct:r}})},controlAdapterControlModeChanged:(e,t)=>{const{id:n,controlMode:r}=t.payload,i=li(e,n);!i||!h_(i)||an.updateOne(e,{id:n,changes:{controlMode:r}})},controlAdapterResizeModeChanged:(e,t)=>{const{id:n,resizeMode:r}=t.payload,i=li(e,n);!i||!hi(i)||an.updateOne(e,{id:n,changes:{resizeMode:r}})},controlAdapterProcessorParamsChanged:(e,t)=>{const{id:n,params:r}=t.payload,i=li(e,n);if(!i||!hi(i)||!i.processorNode)return;const o=Id(Ge(i.processorNode),r);an.updateOne(e,{id:n,changes:{shouldAutoConfig:!1,processorNode:o}})},controlAdapterProcessortTypeChanged:(e,t)=>{const{id:n,processorType:r}=t.payload,i=li(e,n);if(!i||!hi(i))return;const o=Ge(hc[r].default);an.updateOne(e,{id:n,changes:{processorType:r,processedControlImage:null,processorNode:o,shouldAutoConfig:!1}})},controlAdapterAutoConfigToggled:(e,t)=>{var o;const{id:n}=t.payload,r=li(e,n);if(!r||!hi(r))return;const i={id:n,changes:{shouldAutoConfig:!r.shouldAutoConfig}};if(i.changes.shouldAutoConfig){let s;for(const a in j0)if((o=r.model)!=null&&o.model_name.includes(a)){s=j0[a];break}s?(i.changes.processorType=s,i.changes.processorNode=hc[s].default):(i.changes.processorType="none",i.changes.processorNode=hc.none.default)}an.updateOne(e,i)},controlAdaptersReset:()=>Ge(D5),pendingControlImagesCleared:e=>{e.pendingControlImages=[]}},extraReducers:e=>{e.addCase(q4,(t,n)=>{const r=li(t,n.payload.id);r&&r.controlImage!==null&&(t.pendingControlImages=Woe(t.pendingControlImages.concat(n.payload.id)))}),e.addCase(u_,t=>{t.pendingControlImages=[]})}}),{controlAdapterAdded:lae,controlAdapterRecalled:cae,controlAdapterDuplicated:Aze,controlAdapterAddedFromImage:uae,controlAdapterRemoved:kze,controlAdapterImageChanged:Nl,controlAdapterProcessedImageChanged:X4,controlAdapterIsEnabledChanged:Q4,controlAdapterModelChanged:tI,controlAdapterWeightChanged:Pze,controlAdapterBeginStepPctChanged:Ize,controlAdapterEndStepPctChanged:Mze,controlAdapterControlModeChanged:Rze,controlAdapterResizeModeChanged:Oze,controlAdapterProcessorParamsChanged:dae,controlAdapterProcessortTypeChanged:fae,controlAdaptersReset:hae,controlAdapterAutoConfigToggled:nI,pendingControlImagesCleared:pae,controlAdapterModelCleared:Wx}=ND.actions,gae=ND.reducer,mae=br(lae,uae,cae),$ze={any:"Any","sd-1":"Stable Diffusion 1.x","sd-2":"Stable Diffusion 2.x",sdxl:"Stable Diffusion XL","sdxl-refiner":"Stable Diffusion XL Refiner"},Nze={any:"Any","sd-1":"SD1","sd-2":"SD2",sdxl:"SDXL","sdxl-refiner":"SDXLR"},yae={any:{maxClip:0,markers:[]},"sd-1":{maxClip:12,markers:[0,1,2,3,4,8,12]},"sd-2":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},sdxl:{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},"sdxl-refiner":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]}},Fze={lycoris:"LyCORIS",diffusers:"Diffusers"},Dze={euler:"Euler",deis:"DEIS",ddim:"DDIM",ddpm:"DDPM",dpmpp_sde:"DPM++ SDE",dpmpp_2s:"DPM++ 2S",dpmpp_2m:"DPM++ 2M",dpmpp_2m_sde:"DPM++ 2M SDE",heun:"Heun",kdpm_2:"KDPM 2",lms:"LMS",pndm:"PNDM",unipc:"UniPC",euler_k:"Euler Karras",dpmpp_sde_k:"DPM++ SDE Karras",dpmpp_2s_k:"DPM++ 2S Karras",dpmpp_2m_k:"DPM++ 2M Karras",dpmpp_2m_sde_k:"DPM++ 2M SDE Karras",heun_k:"Heun Karras",lms_k:"LMS Karras",euler_a:"Euler Ancestral",kdpm_2_a:"KDPM 2 Ancestral",lcm:"LCM"},vae=0,mp=4294967295;var st;(function(e){e.assertEqual=i=>i;function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{const o={};for(const s of i)o[s]=s;return o},e.getValidEnumValues=i=>{const o=e.objectKeys(i).filter(a=>typeof i[i[a]]!="number"),s={};for(const a of o)s[a]=i[a];return e.objectValues(s)},e.objectValues=i=>e.objectKeys(i).map(function(o){return i[o]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const o=[];for(const s in i)Object.prototype.hasOwnProperty.call(i,s)&&o.push(s);return o},e.find=(i,o)=>{for(const s of i)if(o(s))return s},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&isFinite(i)&&Math.floor(i)===i;function r(i,o=" | "){return i.map(s=>typeof s=="string"?`'${s}'`:s).join(o)}e.joinValues=r,e.jsonStringifyReplacer=(i,o)=>typeof o=="bigint"?o.toString():o})(st||(st={}));var L5;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(L5||(L5={}));const de=st.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Wa=e=>{switch(typeof e){case"undefined":return de.undefined;case"string":return de.string;case"number":return isNaN(e)?de.nan:de.number;case"boolean":return de.boolean;case"function":return de.function;case"bigint":return de.bigint;case"symbol":return de.symbol;case"object":return Array.isArray(e)?de.array:e===null?de.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?de.promise:typeof Map<"u"&&e instanceof Map?de.map:typeof Set<"u"&&e instanceof Set?de.set:typeof Date<"u"&&e instanceof Date?de.date:de.object;default:return de.unknown}},re=st.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),bae=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class Io extends Error{constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}get errors(){return this.issues}format(t){const n=t||function(o){return o.message},r={_errors:[]},i=o=>{for(const s of o.issues)if(s.code==="invalid_union")s.unionErrors.map(i);else if(s.code==="invalid_return_type")i(s.returnTypeError);else if(s.code==="invalid_arguments")i(s.argumentsError);else if(s.path.length===0)r._errors.push(n(s));else{let a=r,l=0;for(;ln.message){const n={},r=[];for(const i of this.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}Io.create=e=>new Io(e);const sg=(e,t)=>{let n;switch(e.code){case re.invalid_type:e.received===de.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case re.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,st.jsonStringifyReplacer)}`;break;case re.unrecognized_keys:n=`Unrecognized key(s) in object: ${st.joinValues(e.keys,", ")}`;break;case re.invalid_union:n="Invalid input";break;case re.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${st.joinValues(e.options)}`;break;case re.invalid_enum_value:n=`Invalid enum value. Expected ${st.joinValues(e.options)}, received '${e.received}'`;break;case re.invalid_arguments:n="Invalid function arguments";break;case re.invalid_return_type:n="Invalid function return type";break;case re.invalid_date:n="Invalid date";break;case re.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:st.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case re.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case re.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case re.custom:n="Invalid input";break;case re.invalid_intersection_types:n="Intersection results could not be merged";break;case re.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case re.not_finite:n="Number must be finite";break;default:n=t.defaultError,st.assertNever(e)}return{message:n}};let FD=sg;function _ae(e){FD=e}function m1(){return FD}const y1=e=>{const{data:t,path:n,errorMaps:r,issueData:i}=e,o=[...n,...i.path||[]],s={...i,path:o};let a="";const l=r.filter(c=>!!c).slice().reverse();for(const c of l)a=c(s,{data:t,defaultError:a}).message;return{...i,path:o,message:i.message||a}},Sae=[];function ge(e,t){const n=y1({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,m1(),sg].filter(r=>!!r)});e.common.issues.push(n)}class Sr{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const i of n){if(i.status==="aborted")return Ne;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const i of n)r.push({key:await i.key,value:await i.value});return Sr.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const i of n){const{key:o,value:s}=i;if(o.status==="aborted"||s.status==="aborted")return Ne;o.status==="dirty"&&t.dirty(),s.status==="dirty"&&t.dirty(),o.value!=="__proto__"&&(typeof s.value<"u"||i.alwaysSet)&&(r[o.value]=s.value)}return{status:t.value,value:r}}}const Ne=Object.freeze({status:"aborted"}),DD=e=>({status:"dirty",value:e}),Dr=e=>({status:"valid",value:e}),B5=e=>e.status==="aborted",z5=e=>e.status==="dirty",ag=e=>e.status==="valid",v1=e=>typeof Promise<"u"&&e instanceof Promise;var ke;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(ke||(ke={}));class xs{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const rI=(e,t)=>{if(ag(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new Io(e.common.issues);return this._error=n,this._error}}};function Fe(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(s,a)=>s.code!=="invalid_type"?{message:a.defaultError}:typeof a.data>"u"?{message:r??a.defaultError}:{message:n??a.defaultError},description:i}}class De{constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(t){return Wa(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:Wa(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Sr,ctx:{common:t.parent.common,data:t.data,parsedType:Wa(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(v1(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){var r;const i={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wa(t)},o=this._parseSync({data:t,path:i.path,parent:i});return rI(i,o)}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wa(t)},i=this._parse({data:t,path:r.path,parent:r}),o=await(v1(i)?i:Promise.resolve(i));return rI(r,o)}refine(t,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,o)=>{const s=t(i),a=()=>o.addIssue({code:re.custom,...r(i)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(a(),!1)):s?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new Do({schema:this,typeName:Ie.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}optional(){return ea.create(this,this._def)}nullable(){return eu.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Mo.create(this,this._def)}promise(){return uf.create(this,this._def)}or(t){return dg.create([this,t],this._def)}and(t){return fg.create(this,t,this._def)}transform(t){return new Do({...Fe(this._def),schema:this,typeName:Ie.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new yg({...Fe(this._def),innerType:this,defaultValue:n,typeName:Ie.ZodDefault})}brand(){return new BD({typeName:Ie.ZodBranded,type:this,...Fe(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new x1({...Fe(this._def),innerType:this,catchValue:n,typeName:Ie.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return gm.create(this,t)}readonly(){return C1.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const xae=/^c[^\s-]{8,}$/i,wae=/^[a-z][a-z0-9]*$/,Cae=/^[0-9A-HJKMNP-TV-Z]{26}$/,Eae=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Tae=/^(?!\.)(?!.*\.\.)([A-Z0-9_+-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Aae="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let qx;const kae=/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,Pae=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,Iae=e=>e.precision?e.offset?new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`):new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}Z$`):e.precision===0?e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"):e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$");function Mae(e,t){return!!((t==="v4"||!t)&&kae.test(e)||(t==="v6"||!t)&&Pae.test(e))}class To extends De{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==de.string){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.string,received:o.parsedType}),Ne}const r=new Sr;let i;for(const o of this._def.checks)if(o.kind==="min")t.data.lengtho.value&&(i=this._getOrReturnCtx(t,i),ge(i,{code:re.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),r.dirty());else if(o.kind==="length"){const s=t.data.length>o.value,a=t.data.lengtht.test(i),{validation:n,code:re.invalid_string,...ke.errToObj(r)})}_addCheck(t){return new To({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...ke.errToObj(t)})}url(t){return this._addCheck({kind:"url",...ke.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...ke.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...ke.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...ke.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...ke.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...ke.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...ke.errToObj(t)})}datetime(t){var n;return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(n=t==null?void 0:t.offset)!==null&&n!==void 0?n:!1,...ke.errToObj(t==null?void 0:t.message)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...ke.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...ke.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...ke.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...ke.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...ke.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...ke.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...ke.errToObj(n)})}nonempty(t){return this.min(1,ke.errToObj(t))}trim(){return new To({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new To({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new To({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new To({checks:[],typeName:Ie.ZodString,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...Fe(e)})};function Rae(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,o=parseInt(e.toFixed(i).replace(".","")),s=parseInt(t.toFixed(i).replace(".",""));return o%s/Math.pow(10,i)}class Sl extends De{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==de.number){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.number,received:o.parsedType}),Ne}let r;const i=new Sr;for(const o of this._def.checks)o.kind==="int"?st.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),ge(r,{code:re.invalid_type,expected:"integer",received:"float",message:o.message}),i.dirty()):o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:!1,message:o.message}),i.dirty()):o.kind==="multipleOf"?Rae(t.data,o.value)!==0&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):o.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_finite,message:o.message}),i.dirty()):st.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ke.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ke.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ke.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ke.toString(n))}setLimit(t,n,r,i){return new Sl({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ke.toString(i)}]})}_addCheck(t){return new Sl({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:ke.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:ke.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:ke.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:ke.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:ke.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ke.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:ke.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:ke.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:ke.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&st.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.valuenew Sl({checks:[],typeName:Ie.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class xl extends De{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce&&(t.data=BigInt(t.data)),this._getType(t)!==de.bigint){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.bigint,received:o.parsedType}),Ne}let r;const i=new Sr;for(const o of this._def.checks)o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),i.dirty()):o.kind==="multipleOf"?t.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):st.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ke.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ke.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ke.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ke.toString(n))}setLimit(t,n,r,i){return new xl({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ke.toString(i)}]})}_addCheck(t){return new xl({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:ke.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:ke.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:ke.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:ke.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ke.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new xl({checks:[],typeName:Ie.ZodBigInt,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...Fe(e)})};class lg extends De{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==de.boolean){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.boolean,received:r.parsedType}),Ne}return Dr(t.data)}}lg.create=e=>new lg({typeName:Ie.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class Zc extends De{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==de.date){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.date,received:o.parsedType}),Ne}if(isNaN(t.data.getTime())){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_date}),Ne}const r=new Sr;let i;for(const o of this._def.checks)o.kind==="min"?t.data.getTime()o.value&&(i=this._getOrReturnCtx(t,i),ge(i,{code:re.too_big,message:o.message,inclusive:!0,exact:!1,maximum:o.value,type:"date"}),r.dirty()):st.assertNever(o);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new Zc({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:ke.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:ke.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Zc({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:Ie.ZodDate,...Fe(e)});class b1 extends De{_parse(t){if(this._getType(t)!==de.symbol){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.symbol,received:r.parsedType}),Ne}return Dr(t.data)}}b1.create=e=>new b1({typeName:Ie.ZodSymbol,...Fe(e)});class cg extends De{_parse(t){if(this._getType(t)!==de.undefined){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.undefined,received:r.parsedType}),Ne}return Dr(t.data)}}cg.create=e=>new cg({typeName:Ie.ZodUndefined,...Fe(e)});class ug extends De{_parse(t){if(this._getType(t)!==de.null){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.null,received:r.parsedType}),Ne}return Dr(t.data)}}ug.create=e=>new ug({typeName:Ie.ZodNull,...Fe(e)});class cf extends De{constructor(){super(...arguments),this._any=!0}_parse(t){return Dr(t.data)}}cf.create=e=>new cf({typeName:Ie.ZodAny,...Fe(e)});class Oc extends De{constructor(){super(...arguments),this._unknown=!0}_parse(t){return Dr(t.data)}}Oc.create=e=>new Oc({typeName:Ie.ZodUnknown,...Fe(e)});class ua extends De{_parse(t){const n=this._getOrReturnCtx(t);return ge(n,{code:re.invalid_type,expected:de.never,received:n.parsedType}),Ne}}ua.create=e=>new ua({typeName:Ie.ZodNever,...Fe(e)});class _1 extends De{_parse(t){if(this._getType(t)!==de.undefined){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.void,received:r.parsedType}),Ne}return Dr(t.data)}}_1.create=e=>new _1({typeName:Ie.ZodVoid,...Fe(e)});class Mo extends De{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==de.array)return ge(n,{code:re.invalid_type,expected:de.array,received:n.parsedType}),Ne;if(i.exactLength!==null){const s=n.data.length>i.exactLength.value,a=n.data.lengthi.maxLength.value&&(ge(n,{code:re.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((s,a)=>i.type._parseAsync(new xs(n,s,n.path,a)))).then(s=>Sr.mergeArray(r,s));const o=[...n.data].map((s,a)=>i.type._parseSync(new xs(n,s,n.path,a)));return Sr.mergeArray(r,o)}get element(){return this._def.type}min(t,n){return new Mo({...this._def,minLength:{value:t,message:ke.toString(n)}})}max(t,n){return new Mo({...this._def,maxLength:{value:t,message:ke.toString(n)}})}length(t,n){return new Mo({...this._def,exactLength:{value:t,message:ke.toString(n)}})}nonempty(t){return this.min(1,t)}}Mo.create=(e,t)=>new Mo({type:e,minLength:null,maxLength:null,exactLength:null,typeName:Ie.ZodArray,...Fe(t)});function Wu(e){if(e instanceof Gt){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=ea.create(Wu(r))}return new Gt({...e._def,shape:()=>t})}else return e instanceof Mo?new Mo({...e._def,type:Wu(e.element)}):e instanceof ea?ea.create(Wu(e.unwrap())):e instanceof eu?eu.create(Wu(e.unwrap())):e instanceof ws?ws.create(e.items.map(t=>Wu(t))):e}class Gt extends De{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=st.objectKeys(t);return this._cached={shape:t,keys:n}}_parse(t){if(this._getType(t)!==de.object){const c=this._getOrReturnCtx(t);return ge(c,{code:re.invalid_type,expected:de.object,received:c.parsedType}),Ne}const{status:r,ctx:i}=this._processInputParams(t),{shape:o,keys:s}=this._getCached(),a=[];if(!(this._def.catchall instanceof ua&&this._def.unknownKeys==="strip"))for(const c in i.data)s.includes(c)||a.push(c);const l=[];for(const c of s){const u=o[c],d=i.data[c];l.push({key:{status:"valid",value:c},value:u._parse(new xs(i,d,i.path,c)),alwaysSet:c in i.data})}if(this._def.catchall instanceof ua){const c=this._def.unknownKeys;if(c==="passthrough")for(const u of a)l.push({key:{status:"valid",value:u},value:{status:"valid",value:i.data[u]}});else if(c==="strict")a.length>0&&(ge(i,{code:re.unrecognized_keys,keys:a}),r.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const u of a){const d=i.data[u];l.push({key:{status:"valid",value:u},value:c._parse(new xs(i,d,i.path,u)),alwaysSet:u in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const c=[];for(const u of l){const d=await u.key;c.push({key:d,value:await u.value,alwaysSet:u.alwaysSet})}return c}).then(c=>Sr.mergeObjectSync(r,c)):Sr.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(t){return ke.errToObj,new Gt({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{var i,o,s,a;const l=(s=(o=(i=this._def).errorMap)===null||o===void 0?void 0:o.call(i,n,r).message)!==null&&s!==void 0?s:r.defaultError;return n.code==="unrecognized_keys"?{message:(a=ke.errToObj(t).message)!==null&&a!==void 0?a:l}:{message:l}}}:{}})}strip(){return new Gt({...this._def,unknownKeys:"strip"})}passthrough(){return new Gt({...this._def,unknownKeys:"passthrough"})}extend(t){return new Gt({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new Gt({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:Ie.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new Gt({...this._def,catchall:t})}pick(t){const n={};return st.objectKeys(t).forEach(r=>{t[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new Gt({...this._def,shape:()=>n})}omit(t){const n={};return st.objectKeys(this.shape).forEach(r=>{t[r]||(n[r]=this.shape[r])}),new Gt({...this._def,shape:()=>n})}deepPartial(){return Wu(this)}partial(t){const n={};return st.objectKeys(this.shape).forEach(r=>{const i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}),new Gt({...this._def,shape:()=>n})}required(t){const n={};return st.objectKeys(this.shape).forEach(r=>{if(t&&!t[r])n[r]=this.shape[r];else{let o=this.shape[r];for(;o instanceof ea;)o=o._def.innerType;n[r]=o}}),new Gt({...this._def,shape:()=>n})}keyof(){return LD(st.objectKeys(this.shape))}}Gt.create=(e,t)=>new Gt({shape:()=>e,unknownKeys:"strip",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});Gt.strictCreate=(e,t)=>new Gt({shape:()=>e,unknownKeys:"strict",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});Gt.lazycreate=(e,t)=>new Gt({shape:e,unknownKeys:"strip",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});class dg extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function i(o){for(const a of o)if(a.result.status==="valid")return a.result;for(const a of o)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;const s=o.map(a=>new Io(a.ctx.common.issues));return ge(n,{code:re.invalid_union,unionErrors:s}),Ne}if(n.common.async)return Promise.all(r.map(async o=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await o._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(i);{let o;const s=[];for(const l of r){const c={...n,common:{...n.common,issues:[]},parent:null},u=l._parseSync({data:n.data,path:n.path,parent:c});if(u.status==="valid")return u;u.status==="dirty"&&!o&&(o={result:u,ctx:c}),c.common.issues.length&&s.push(c.common.issues)}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;const a=s.map(l=>new Io(l));return ge(n,{code:re.invalid_union,unionErrors:a}),Ne}}get options(){return this._def.options}}dg.create=(e,t)=>new dg({options:e,typeName:Ie.ZodUnion,...Fe(t)});const Zy=e=>e instanceof pg?Zy(e.schema):e instanceof Do?Zy(e.innerType()):e instanceof gg?[e.value]:e instanceof wl?e.options:e instanceof mg?Object.keys(e.enum):e instanceof yg?Zy(e._def.innerType):e instanceof cg?[void 0]:e instanceof ug?[null]:null;class p_ extends De{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.object)return ge(n,{code:re.invalid_type,expected:de.object,received:n.parsedType}),Ne;const r=this.discriminator,i=n.data[r],o=this.optionsMap.get(i);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(ge(n,{code:re.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),Ne)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){const i=new Map;for(const o of n){const s=Zy(o.shape[t]);if(!s)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const a of s){if(i.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);i.set(a,o)}}return new p_({typeName:Ie.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Fe(r)})}}function j5(e,t){const n=Wa(e),r=Wa(t);if(e===t)return{valid:!0,data:e};if(n===de.object&&r===de.object){const i=st.objectKeys(t),o=st.objectKeys(e).filter(a=>i.indexOf(a)!==-1),s={...e,...t};for(const a of o){const l=j5(e[a],t[a]);if(!l.valid)return{valid:!1};s[a]=l.data}return{valid:!0,data:s}}else if(n===de.array&&r===de.array){if(e.length!==t.length)return{valid:!1};const i=[];for(let o=0;o{if(B5(o)||B5(s))return Ne;const a=j5(o.value,s.value);return a.valid?((z5(o)||z5(s))&&n.dirty(),{status:n.value,value:a.data}):(ge(r,{code:re.invalid_intersection_types}),Ne)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,s])=>i(o,s)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}fg.create=(e,t,n)=>new fg({left:e,right:t,typeName:Ie.ZodIntersection,...Fe(n)});class ws extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.array)return ge(r,{code:re.invalid_type,expected:de.array,received:r.parsedType}),Ne;if(r.data.lengththis._def.items.length&&(ge(r,{code:re.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const o=[...r.data].map((s,a)=>{const l=this._def.items[a]||this._def.rest;return l?l._parse(new xs(r,s,r.path,a)):null}).filter(s=>!!s);return r.common.async?Promise.all(o).then(s=>Sr.mergeArray(n,s)):Sr.mergeArray(n,o)}get items(){return this._def.items}rest(t){return new ws({...this._def,rest:t})}}ws.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ws({items:e,typeName:Ie.ZodTuple,rest:null,...Fe(t)})};class hg extends De{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.object)return ge(r,{code:re.invalid_type,expected:de.object,received:r.parsedType}),Ne;const i=[],o=this._def.keyType,s=this._def.valueType;for(const a in r.data)i.push({key:o._parse(new xs(r,a,r.path,a)),value:s._parse(new xs(r,r.data[a],r.path,a))});return r.common.async?Sr.mergeObjectAsync(n,i):Sr.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof De?new hg({keyType:t,valueType:n,typeName:Ie.ZodRecord,...Fe(r)}):new hg({keyType:To.create(),valueType:t,typeName:Ie.ZodRecord,...Fe(n)})}}class S1 extends De{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.map)return ge(r,{code:re.invalid_type,expected:de.map,received:r.parsedType}),Ne;const i=this._def.keyType,o=this._def.valueType,s=[...r.data.entries()].map(([a,l],c)=>({key:i._parse(new xs(r,a,r.path,[c,"key"])),value:o._parse(new xs(r,l,r.path,[c,"value"]))}));if(r.common.async){const a=new Map;return Promise.resolve().then(async()=>{for(const l of s){const c=await l.key,u=await l.value;if(c.status==="aborted"||u.status==="aborted")return Ne;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(c.value,u.value)}return{status:n.value,value:a}})}else{const a=new Map;for(const l of s){const c=l.key,u=l.value;if(c.status==="aborted"||u.status==="aborted")return Ne;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(c.value,u.value)}return{status:n.value,value:a}}}}S1.create=(e,t,n)=>new S1({valueType:t,keyType:e,typeName:Ie.ZodMap,...Fe(n)});class Jc extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.set)return ge(r,{code:re.invalid_type,expected:de.set,received:r.parsedType}),Ne;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(ge(r,{code:re.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const o=this._def.valueType;function s(l){const c=new Set;for(const u of l){if(u.status==="aborted")return Ne;u.status==="dirty"&&n.dirty(),c.add(u.value)}return{status:n.value,value:c}}const a=[...r.data.values()].map((l,c)=>o._parse(new xs(r,l,r.path,c)));return r.common.async?Promise.all(a).then(l=>s(l)):s(a)}min(t,n){return new Jc({...this._def,minSize:{value:t,message:ke.toString(n)}})}max(t,n){return new Jc({...this._def,maxSize:{value:t,message:ke.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}Jc.create=(e,t)=>new Jc({valueType:e,minSize:null,maxSize:null,typeName:Ie.ZodSet,...Fe(t)});class Rd extends De{constructor(){super(...arguments),this.validate=this.implement}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.function)return ge(n,{code:re.invalid_type,expected:de.function,received:n.parsedType}),Ne;function r(a,l){return y1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,m1(),sg].filter(c=>!!c),issueData:{code:re.invalid_arguments,argumentsError:l}})}function i(a,l){return y1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,m1(),sg].filter(c=>!!c),issueData:{code:re.invalid_return_type,returnTypeError:l}})}const o={errorMap:n.common.contextualErrorMap},s=n.data;if(this._def.returns instanceof uf){const a=this;return Dr(async function(...l){const c=new Io([]),u=await a._def.args.parseAsync(l,o).catch(h=>{throw c.addIssue(r(l,h)),c}),d=await Reflect.apply(s,this,u);return await a._def.returns._def.type.parseAsync(d,o).catch(h=>{throw c.addIssue(i(d,h)),c})})}else{const a=this;return Dr(function(...l){const c=a._def.args.safeParse(l,o);if(!c.success)throw new Io([r(l,c.error)]);const u=Reflect.apply(s,this,c.data),d=a._def.returns.safeParse(u,o);if(!d.success)throw new Io([i(u,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new Rd({...this._def,args:ws.create(t).rest(Oc.create())})}returns(t){return new Rd({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new Rd({args:t||ws.create([]).rest(Oc.create()),returns:n||Oc.create(),typeName:Ie.ZodFunction,...Fe(r)})}}class pg extends De{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}pg.create=(e,t)=>new pg({getter:e,typeName:Ie.ZodLazy,...Fe(t)});class gg extends De{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return ge(n,{received:n.data,code:re.invalid_literal,expected:this._def.value}),Ne}return{status:"valid",value:t.data}}get value(){return this._def.value}}gg.create=(e,t)=>new gg({value:e,typeName:Ie.ZodLiteral,...Fe(t)});function LD(e,t){return new wl({values:e,typeName:Ie.ZodEnum,...Fe(t)})}class wl extends De{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return ge(n,{expected:st.joinValues(r),received:n.parsedType,code:re.invalid_type}),Ne}if(this._def.values.indexOf(t.data)===-1){const n=this._getOrReturnCtx(t),r=this._def.values;return ge(n,{received:n.data,code:re.invalid_enum_value,options:r}),Ne}return Dr(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t){return wl.create(t)}exclude(t){return wl.create(this.options.filter(n=>!t.includes(n)))}}wl.create=LD;class mg extends De{_parse(t){const n=st.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==de.string&&r.parsedType!==de.number){const i=st.objectValues(n);return ge(r,{expected:st.joinValues(i),received:r.parsedType,code:re.invalid_type}),Ne}if(n.indexOf(t.data)===-1){const i=st.objectValues(n);return ge(r,{received:r.data,code:re.invalid_enum_value,options:i}),Ne}return Dr(t.data)}get enum(){return this._def.values}}mg.create=(e,t)=>new mg({values:e,typeName:Ie.ZodNativeEnum,...Fe(t)});class uf extends De{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.promise&&n.common.async===!1)return ge(n,{code:re.invalid_type,expected:de.promise,received:n.parsedType}),Ne;const r=n.parsedType===de.promise?n.data:Promise.resolve(n.data);return Dr(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}uf.create=(e,t)=>new uf({type:e,typeName:Ie.ZodPromise,...Fe(t)});class Do extends De{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Ie.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null,o={addIssue:s=>{ge(r,s),s.fatal?n.abort():n.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),i.type==="preprocess"){const s=i.transform(r.data,o);return r.common.issues.length?{status:"dirty",value:r.data}:r.common.async?Promise.resolve(s).then(a=>this._def.schema._parseAsync({data:a,path:r.path,parent:r})):this._def.schema._parseSync({data:s,path:r.path,parent:r})}if(i.type==="refinement"){const s=a=>{const l=i.refinement(a,o);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?Ne:(a.status==="dirty"&&n.dirty(),s(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?Ne:(a.status==="dirty"&&n.dirty(),s(a.value).then(()=>({status:n.value,value:a.value}))))}if(i.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!ag(s))return s;const a=i.transform(s.value,o);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>ag(s)?Promise.resolve(i.transform(s.value,o)).then(a=>({status:n.value,value:a})):s);st.assertNever(i)}}Do.create=(e,t,n)=>new Do({schema:e,typeName:Ie.ZodEffects,effect:t,...Fe(n)});Do.createWithPreprocess=(e,t,n)=>new Do({schema:t,effect:{type:"preprocess",transform:e},typeName:Ie.ZodEffects,...Fe(n)});class ea extends De{_parse(t){return this._getType(t)===de.undefined?Dr(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}ea.create=(e,t)=>new ea({innerType:e,typeName:Ie.ZodOptional,...Fe(t)});class eu extends De{_parse(t){return this._getType(t)===de.null?Dr(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}eu.create=(e,t)=>new eu({innerType:e,typeName:Ie.ZodNullable,...Fe(t)});class yg extends De{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===de.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}yg.create=(e,t)=>new yg({innerType:e,typeName:Ie.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...Fe(t)});class x1 extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return v1(i)?i.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new Io(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Io(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}x1.create=(e,t)=>new x1({innerType:e,typeName:Ie.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...Fe(t)});class w1 extends De{_parse(t){if(this._getType(t)!==de.nan){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.nan,received:r.parsedType}),Ne}return{status:"valid",value:t.data}}}w1.create=e=>new w1({typeName:Ie.ZodNaN,...Fe(e)});const Oae=Symbol("zod_brand");class BD extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class gm extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?Ne:o.status==="dirty"?(n.dirty(),DD(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?Ne:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new gm({in:t,out:n,typeName:Ie.ZodPipeline})}}class C1 extends De{_parse(t){const n=this._def.innerType._parse(t);return ag(n)&&(n.value=Object.freeze(n.value)),n}}C1.create=(e,t)=>new C1({innerType:e,typeName:Ie.ZodReadonly,...Fe(t)});const zD=(e,t={},n)=>e?cf.create().superRefine((r,i)=>{var o,s;if(!e(r)){const a=typeof t=="function"?t(r):typeof t=="string"?{message:t}:t,l=(s=(o=a.fatal)!==null&&o!==void 0?o:n)!==null&&s!==void 0?s:!0,c=typeof a=="string"?{message:a}:a;i.addIssue({code:"custom",...c,fatal:l})}}):cf.create(),$ae={object:Gt.lazycreate};var Ie;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(Ie||(Ie={}));const Nae=(e,t={message:`Input not instance of ${e.name}`})=>zD(n=>n instanceof e,t),jD=To.create,VD=Sl.create,Fae=w1.create,Dae=xl.create,UD=lg.create,Lae=Zc.create,Bae=b1.create,zae=cg.create,jae=ug.create,Vae=cf.create,Uae=Oc.create,Gae=ua.create,Hae=_1.create,Wae=Mo.create,qae=Gt.create,Kae=Gt.strictCreate,Xae=dg.create,Qae=p_.create,Yae=fg.create,Zae=ws.create,Jae=hg.create,ele=S1.create,tle=Jc.create,nle=Rd.create,rle=pg.create,ile=gg.create,ole=wl.create,sle=mg.create,ale=uf.create,iI=Do.create,lle=ea.create,cle=eu.create,ule=Do.createWithPreprocess,dle=gm.create,fle=()=>jD().optional(),hle=()=>VD().optional(),ple=()=>UD().optional(),gle={string:e=>To.create({...e,coerce:!0}),number:e=>Sl.create({...e,coerce:!0}),boolean:e=>lg.create({...e,coerce:!0}),bigint:e=>xl.create({...e,coerce:!0}),date:e=>Zc.create({...e,coerce:!0})},mle=Ne;var T=Object.freeze({__proto__:null,defaultErrorMap:sg,setErrorMap:_ae,getErrorMap:m1,makeIssue:y1,EMPTY_PATH:Sae,addIssueToContext:ge,ParseStatus:Sr,INVALID:Ne,DIRTY:DD,OK:Dr,isAborted:B5,isDirty:z5,isValid:ag,isAsync:v1,get util(){return st},get objectUtil(){return L5},ZodParsedType:de,getParsedType:Wa,ZodType:De,ZodString:To,ZodNumber:Sl,ZodBigInt:xl,ZodBoolean:lg,ZodDate:Zc,ZodSymbol:b1,ZodUndefined:cg,ZodNull:ug,ZodAny:cf,ZodUnknown:Oc,ZodNever:ua,ZodVoid:_1,ZodArray:Mo,ZodObject:Gt,ZodUnion:dg,ZodDiscriminatedUnion:p_,ZodIntersection:fg,ZodTuple:ws,ZodRecord:hg,ZodMap:S1,ZodSet:Jc,ZodFunction:Rd,ZodLazy:pg,ZodLiteral:gg,ZodEnum:wl,ZodNativeEnum:mg,ZodPromise:uf,ZodEffects:Do,ZodTransformer:Do,ZodOptional:ea,ZodNullable:eu,ZodDefault:yg,ZodCatch:x1,ZodNaN:w1,BRAND:Oae,ZodBranded:BD,ZodPipeline:gm,ZodReadonly:C1,custom:zD,Schema:De,ZodSchema:De,late:$ae,get ZodFirstPartyTypeKind(){return Ie},coerce:gle,any:Vae,array:Wae,bigint:Dae,boolean:UD,date:Lae,discriminatedUnion:Qae,effect:iI,enum:ole,function:nle,instanceof:Nae,intersection:Yae,lazy:rle,literal:ile,map:ele,nan:Fae,nativeEnum:sle,never:Gae,null:jae,nullable:cle,number:VD,object:qae,oboolean:ple,onumber:hle,optional:lle,ostring:fle,pipeline:dle,preprocess:ule,promise:ale,record:Jae,set:tle,strictObject:Kae,string:jD,symbol:Bae,transformer:iI,tuple:Zae,undefined:zae,union:Xae,unknown:Uae,void:Hae,NEVER:mle,ZodIssueCode:re,quotelessJson:bae,ZodError:Io});const mm=T.object({image_name:T.string().trim().min(1)}),yle=T.object({board_id:T.string().trim().min(1)}),vle=T.object({r:T.number().int().min(0).max(255),g:T.number().int().min(0).max(255),b:T.number().int().min(0).max(255),a:T.number().int().min(0).max(255)}),ble=T.enum(["stable","beta","prototype"]),GD=T.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a","lcm"]),Y4=T.enum(["any","sd-1","sd-2","sdxl","sdxl-refiner"]),_le=T.enum(["onnx","main","vae","lora","controlnet","embedding"]),Z4=T.string().trim().min(1),Nf=T.object({model_name:Z4,base_model:Y4}),HD=T.object({model_name:Z4,base_model:Y4,model_type:T.literal("main")}),WD=T.object({model_name:Z4,base_model:Y4,model_type:T.literal("onnx")}),qD=T.union([HD,WD]),KD=T.object({model_name:T.string().min(1),base_model:T.literal("sdxl-refiner"),model_type:T.literal("main")}),Sle=T.enum(["unet","text_encoder","text_encoder_2","tokenizer","tokenizer_2","vae","vae_decoder","vae_encoder","scheduler","safety_checker"]),J4=Nf,df=Nf.extend({model_type:_le,submodel:Sle.optional()}),eT=Nf,tT=Nf,nT=Nf,rT=Nf,XD=df.extend({weight:T.number().optional()});T.object({unet:df,scheduler:df,loras:T.array(XD)});T.object({tokenizer:df,text_encoder:df,skipped_layers:T.number(),loras:T.array(XD)});T.object({vae:df});const xle=T.object({image:mm,control_model:tT,control_weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),control_mode:T.enum(["balanced","more_prompt","more_control","unbalanced"]).optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),wle=T.object({image:mm,ip_adapter_model:nT,weight:T.number(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional()}),Cle=T.object({image:mm,t2i_adapter_model:rT,weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),Ele=T.object({dataURL:T.string(),width:T.number().int(),height:T.number().int()}),Tle=T.object({image:mm,width:T.number().int().gt(0),height:T.number().int().gt(0),type:T.literal("image_output")}),QD=e=>Tle.safeParse(e).success,Ale=T.string(),Lze=e=>Ale.safeParse(e).success,kle=T.string(),Bze=e=>kle.safeParse(e).success,Ple=T.string(),zze=e=>Ple.safeParse(e).success,Ile=T.string(),jze=e=>Ile.safeParse(e).success,Mle=T.number().int().min(1),Vze=e=>Mle.safeParse(e).success,Rle=T.number().min(1),Uze=e=>Rle.safeParse(e).success,Ole=T.number().gte(0).lt(1),Gze=e=>Ole.safeParse(e).success,$le=GD,Hze=e=>$le.safeParse(e).success,Nle=T.number().int().min(0).max(mp),Wze=e=>Nle.safeParse(e).success,YD=T.number().multipleOf(8).min(64),qze=e=>YD.safeParse(e).success,Fle=YD,Kze=e=>Fle.safeParse(e).success,g_=qD,Xze=e=>g_.safeParse(e).success,ZD=KD,Qze=e=>ZD.safeParse(e).success,JD=J4,Yze=e=>JD.safeParse(e).success,Dle=eT,Zze=e=>Dle.safeParse(e).success,Lle=tT,Jze=e=>Lle.safeParse(e).success,Ble=nT,eje=e=>Ble.safeParse(e).success,zle=rT,tje=e=>zle.safeParse(e).success,jle=T.number().min(0).max(1),nje=e=>jle.safeParse(e).success;T.enum(["fp16","fp32"]);const Vle=T.enum(["ESRGAN","bilinear"]),rje=e=>Vle.safeParse(e).success,Ule=T.boolean(),ije=e=>Ule.safeParse(e).success&&e!==null&&e!==void 0,eL=T.number().min(1).max(10),oje=e=>eL.safeParse(e).success,Gle=eL,sje=e=>Gle.safeParse(e).success,Hle=T.number().min(0).max(1),aje=e=>Hle.safeParse(e).success;T.enum(["box","gaussian"]);T.enum(["unmasked","mask","edge"]);const iT={hrfStrength:.45,hrfEnabled:!1,hrfMethod:"ESRGAN",cfgScale:7.5,cfgRescaleMultiplier:0,height:512,img2imgStrength:.75,infillMethod:"patchmatch",iterations:1,perlin:0,positivePrompt:"",negativePrompt:"",scheduler:"euler",maskBlur:16,maskBlurMethod:"box",canvasCoherenceMode:"unmasked",canvasCoherenceSteps:20,canvasCoherenceStrength:.3,seed:0,seedWeights:"",shouldFitToWidthHeight:!0,shouldGenerateVariations:!1,shouldRandomizeSeed:!0,steps:50,threshold:0,infillTileSize:32,infillPatchmatchDownscaleSize:1,variationAmount:.1,width:512,shouldUseSymmetry:!1,horizontalSymmetrySteps:0,verticalSymmetrySteps:0,model:null,vae:null,vaePrecision:"fp32",seamlessXAxis:!1,seamlessYAxis:!1,clipSkip:0,shouldUseCpuNoise:!0,shouldShowAdvancedOptions:!1,aspectRatio:null,shouldLockAspectRatio:!1},Wle=iT,tL=jt({name:"generation",initialState:Wle,reducers:{setPositivePrompt:(e,t)=>{e.positivePrompt=t.payload},setNegativePrompt:(e,t)=>{e.negativePrompt=t.payload},setIterations:(e,t)=>{e.iterations=t.payload},setSteps:(e,t)=>{e.steps=t.payload},clampSymmetrySteps:e=>{e.horizontalSymmetrySteps=el(e.horizontalSymmetrySteps,0,e.steps),e.verticalSymmetrySteps=el(e.verticalSymmetrySteps,0,e.steps)},setCfgScale:(e,t)=>{e.cfgScale=t.payload},setCfgRescaleMultiplier:(e,t)=>{e.cfgRescaleMultiplier=t.payload},setThreshold:(e,t)=>{e.threshold=t.payload},setPerlin:(e,t)=>{e.perlin=t.payload},setHeight:(e,t)=>{e.height=t.payload},setWidth:(e,t)=>{e.width=t.payload},toggleSize:e=>{const[t,n]=[e.width,e.height];e.width=n,e.height=t},setScheduler:(e,t)=>{e.scheduler=t.payload},setSeed:(e,t)=>{e.seed=t.payload,e.shouldRandomizeSeed=!1},setImg2imgStrength:(e,t)=>{e.img2imgStrength=t.payload},setSeamlessXAxis:(e,t)=>{e.seamlessXAxis=t.payload},setSeamlessYAxis:(e,t)=>{e.seamlessYAxis=t.payload},setShouldFitToWidthHeight:(e,t)=>{e.shouldFitToWidthHeight=t.payload},resetSeed:e=>{e.seed=-1},setShouldGenerateVariations:(e,t)=>{e.shouldGenerateVariations=t.payload},setVariationAmount:(e,t)=>{e.variationAmount=t.payload},setSeedWeights:(e,t)=>{e.seedWeights=t.payload,e.shouldGenerateVariations=!0,e.variationAmount=0},resetParametersState:e=>({...e,...iT}),setShouldRandomizeSeed:(e,t)=>{e.shouldRandomizeSeed=t.payload},clearInitialImage:e=>{e.initialImage=void 0},setMaskBlur:(e,t)=>{e.maskBlur=t.payload},setMaskBlurMethod:(e,t)=>{e.maskBlurMethod=t.payload},setCanvasCoherenceMode:(e,t)=>{e.canvasCoherenceMode=t.payload},setCanvasCoherenceSteps:(e,t)=>{e.canvasCoherenceSteps=t.payload},setCanvasCoherenceStrength:(e,t)=>{e.canvasCoherenceStrength=t.payload},setInfillMethod:(e,t)=>{e.infillMethod=t.payload},setInfillTileSize:(e,t)=>{e.infillTileSize=t.payload},setInfillPatchmatchDownscaleSize:(e,t)=>{e.infillPatchmatchDownscaleSize=t.payload},setShouldUseSymmetry:(e,t)=>{e.shouldUseSymmetry=t.payload},setHorizontalSymmetrySteps:(e,t)=>{e.horizontalSymmetrySteps=t.payload},setVerticalSymmetrySteps:(e,t)=>{e.verticalSymmetrySteps=t.payload},initialImageChanged:(e,t)=>{const{image_name:n,width:r,height:i}=t.payload;e.initialImage={imageName:n,width:r,height:i}},modelChanged:(e,t)=>{if(e.model=t.payload,e.model===null)return;const{maxClip:n}=yae[e.model.base_model];e.clipSkip=el(e.clipSkip,0,n)},vaeSelected:(e,t)=>{e.vae=t.payload},vaePrecisionChanged:(e,t)=>{e.vaePrecision=t.payload},setClipSkip:(e,t)=>{e.clipSkip=t.payload},setHrfStrength:(e,t)=>{e.hrfStrength=t.payload},setHrfEnabled:(e,t)=>{e.hrfEnabled=t.payload},setHrfMethod:(e,t)=>{e.hrfMethod=t.payload},shouldUseCpuNoiseChanged:(e,t)=>{e.shouldUseCpuNoise=t.payload},setAspectRatio:(e,t)=>{const n=t.payload;e.aspectRatio=n,n&&(e.height=Or(e.width/n,8))},setShouldLockAspectRatio:(e,t)=>{e.shouldLockAspectRatio=t.payload}},extraReducers:e=>{e.addCase(qse,(t,n)=>{var i;const r=(i=n.payload.sd)==null?void 0:i.defaultModel;if(r&&!t.model){const[o,s,a]=r.split("/"),l=g_.safeParse({model_name:a,base_model:o,model_type:s});l.success&&(t.model=l.data)}}),e.addMatcher(mae,(t,n)=>{n.payload.type==="t2i_adapter"&&(t.width=Or(t.width,64),t.height=Or(t.height,64))})}}),{clampSymmetrySteps:lje,clearInitialImage:oT,resetParametersState:cje,resetSeed:uje,setCfgScale:dje,setCfgRescaleMultiplier:fje,setWidth:oI,setHeight:sI,toggleSize:hje,setImg2imgStrength:pje,setInfillMethod:qle,setIterations:gje,setPerlin:mje,setPositivePrompt:Kle,setNegativePrompt:yje,setScheduler:vje,setMaskBlur:bje,setMaskBlurMethod:_je,setCanvasCoherenceMode:Sje,setCanvasCoherenceSteps:xje,setCanvasCoherenceStrength:wje,setSeed:Cje,setSeedWeights:Eje,setShouldFitToWidthHeight:Tje,setShouldGenerateVariations:Aje,setShouldRandomizeSeed:kje,setSteps:Pje,setThreshold:Ije,setInfillTileSize:Mje,setInfillPatchmatchDownscaleSize:Rje,setVariationAmount:Oje,setShouldUseSymmetry:$je,setHorizontalSymmetrySteps:Nje,setVerticalSymmetrySteps:Fje,initialImageChanged:m_,modelChanged:tl,vaeSelected:nL,setSeamlessXAxis:Dje,setSeamlessYAxis:Lje,setClipSkip:Bje,setHrfEnabled:zje,setHrfStrength:jje,setHrfMethod:Vje,shouldUseCpuNoiseChanged:Uje,setAspectRatio:Xle,setShouldLockAspectRatio:Gje,vaePrecisionChanged:Hje}=tL.actions,Qle=tL.reducer,V0=(e,t,n,r,i,o,s)=>{const a=Math.floor(e/2-(n+i/2)*s),l=Math.floor(t/2-(r+o/2)*s);return{x:a,y:l}},U0=(e,t,n,r,i=.95)=>{const o=e*i/n,s=t*i/r,a=Math.min(1,Math.min(o,s));return a||1},Wje=.999,qje=.1,Kje=20,G0=.95,Xje=30,Qje=10,Yle=e=>({x:Math.floor(e.x),y:Math.floor(e.y)}),Iu=e=>{const{width:t,height:n}=e,r={width:t,height:n},i=512*512,o=t/n;let s=t*n,a=448;for(;s1?(r.width=a,r.height=Or(a/o,64)):o<1&&(r.height=a,r.width=Or(a*o,64)),s=r.width*r.height;return r},Zle=e=>({width:Or(e.width,64),height:Or(e.height,64)}),Yje=[{label:"Base",value:"base"},{label:"Mask",value:"mask"}],Zje=[{label:"None",value:"none"},{label:"Auto",value:"auto"},{label:"Manual",value:"manual"}],rL=e=>e.kind==="line"&&e.layer==="mask",Jje=e=>e.kind==="line"&&e.layer==="base",Jle=e=>e.kind==="image"&&e.layer==="base",eVe=e=>e.kind==="fillRect"&&e.layer==="base",tVe=e=>e.kind==="eraseRect"&&e.layer==="base",ece=e=>e.kind==="line",tce={listCursor:void 0,listPriority:void 0,selectedQueueItem:void 0,resumeProcessorOnEnqueue:!0},nce=tce,iL=jt({name:"queue",initialState:nce,reducers:{listCursorChanged:(e,t)=>{e.listCursor=t.payload},listPriorityChanged:(e,t)=>{e.listPriority=t.payload},listParamsReset:e=>{e.listCursor=void 0,e.listPriority=void 0},queueItemSelectionToggled:(e,t)=>{e.selectedQueueItem===t.payload?e.selectedQueueItem=void 0:e.selectedQueueItem=t.payload},resumeProcessorOnEnqueueChanged:(e,t)=>{e.resumeProcessorOnEnqueue=t.payload}}}),{listCursorChanged:nVe,listPriorityChanged:rVe,listParamsReset:rce,queueItemSelectionToggled:iVe,resumeProcessorOnEnqueueChanged:oVe}=iL.actions,ice=iL.reducer,oL="%[a-f0-9]{2}",aI=new RegExp("("+oL+")|([^%]+?)","gi"),lI=new RegExp("("+oL+")+","gi");function V5(e,t){try{return[decodeURIComponent(e.join(""))]}catch{}if(e.length===1)return e;t=t||1;const n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],V5(n),V5(r))}function oce(e){try{return decodeURIComponent(e)}catch{let t=e.match(aI)||[];for(let n=1;ne==null,uce=e=>encodeURIComponent(e).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),U5=Symbol("encodeFragmentIdentifier");function dce(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const i=n.length;return r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),"[",i,"]"].join("")]:[...n,[pn(t,e),"[",pn(i,e),"]=",pn(r,e)].join("")]};case"bracket":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),"[]"].join("")]:[...n,[pn(t,e),"[]=",pn(r,e)].join("")];case"colon-list-separator":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),":list="].join("")]:[...n,[pn(t,e),":list=",pn(r,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t=e.arrayFormat==="bracket-separator"?"[]=":"=";return n=>(r,i)=>i===void 0||e.skipNull&&i===null||e.skipEmptyString&&i===""?r:(i=i===null?"":i,r.length===0?[[pn(n,e),t,pn(i,e)].join("")]:[[r,pn(i,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,pn(t,e)]:[...n,[pn(t,e),"=",pn(r,e)].join("")]}}function fce(e){let t;switch(e.arrayFormat){case"index":return(n,r,i)=>{if(t=/\[(\d*)]$/.exec(n),n=n.replace(/\[\d*]$/,""),!t){i[n]=r;return}i[n]===void 0&&(i[n]={}),i[n][t[1]]=r};case"bracket":return(n,r,i)=>{if(t=/(\[])$/.exec(n),n=n.replace(/\[]$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"colon-list-separator":return(n,r,i)=>{if(t=/(:list)$/.exec(n),n=n.replace(/:list$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"comma":case"separator":return(n,r,i)=>{const o=typeof r=="string"&&r.includes(e.arrayFormatSeparator),s=typeof r=="string"&&!o&&zs(r,e).includes(e.arrayFormatSeparator);r=s?zs(r,e):r;const a=o||s?r.split(e.arrayFormatSeparator).map(l=>zs(l,e)):r===null?r:zs(r,e);i[n]=a};case"bracket-separator":return(n,r,i)=>{const o=/(\[])$/.test(n);if(n=n.replace(/\[]$/,""),!o){i[n]=r&&zs(r,e);return}const s=r===null?[]:r.split(e.arrayFormatSeparator).map(a=>zs(a,e));if(i[n]===void 0){i[n]=s;return}i[n]=[...i[n],...s]};default:return(n,r,i)=>{if(i[n]===void 0){i[n]=r;return}i[n]=[...[i[n]].flat(),r]}}}function aL(e){if(typeof e!="string"||e.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function pn(e,t){return t.encode?t.strict?uce(e):encodeURIComponent(e):e}function zs(e,t){return t.decode?ace(e):e}function lL(e){return Array.isArray(e)?e.sort():typeof e=="object"?lL(Object.keys(e)).sort((t,n)=>Number(t)-Number(n)).map(t=>e[t]):e}function cL(e){const t=e.indexOf("#");return t!==-1&&(e=e.slice(0,t)),e}function hce(e){let t="";const n=e.indexOf("#");return n!==-1&&(t=e.slice(n)),t}function cI(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?e=Number(e):t.parseBooleans&&e!==null&&(e.toLowerCase()==="true"||e.toLowerCase()==="false")&&(e=e.toLowerCase()==="true"),e}function sT(e){e=cL(e);const t=e.indexOf("?");return t===-1?"":e.slice(t+1)}function aT(e,t){t={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,...t},aL(t.arrayFormatSeparator);const n=fce(t),r=Object.create(null);if(typeof e!="string"||(e=e.trim().replace(/^[?#&]/,""),!e))return r;for(const i of e.split("&")){if(i==="")continue;const o=t.decode?i.replace(/\+/g," "):i;let[s,a]=sL(o,"=");s===void 0&&(s=o),a=a===void 0?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?a:zs(a,t),n(zs(s,t),a,r)}for(const[i,o]of Object.entries(r))if(typeof o=="object"&&o!==null)for(const[s,a]of Object.entries(o))o[s]=cI(a,t);else r[i]=cI(o,t);return t.sort===!1?r:(t.sort===!0?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((i,o)=>{const s=r[o];return s&&typeof s=="object"&&!Array.isArray(s)?i[o]=lL(s):i[o]=s,i},Object.create(null))}function uL(e,t){if(!e)return"";t={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...t},aL(t.arrayFormatSeparator);const n=s=>t.skipNull&&cce(e[s])||t.skipEmptyString&&e[s]==="",r=dce(t),i={};for(const[s,a]of Object.entries(e))n(s)||(i[s]=a);const o=Object.keys(i);return t.sort!==!1&&o.sort(t.sort),o.map(s=>{const a=e[s];return a===void 0?"":a===null?pn(s,t):Array.isArray(a)?a.length===0&&t.arrayFormat==="bracket-separator"?pn(s,t)+"[]":a.reduce(r(s),[]).join("&"):pn(s,t)+"="+pn(a,t)}).filter(s=>s.length>0).join("&")}function dL(e,t){var i;t={decode:!0,...t};let[n,r]=sL(e,"#");return n===void 0&&(n=e),{url:((i=n==null?void 0:n.split("?"))==null?void 0:i[0])??"",query:aT(sT(e),t),...t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:zs(r,t)}:{}}}function fL(e,t){t={encode:!0,strict:!0,[U5]:!0,...t};const n=cL(e.url).split("?")[0]||"",r=sT(e.url),i={...aT(r,{sort:!1}),...e.query};let o=uL(i,t);o&&(o=`?${o}`);let s=hce(e.url);if(e.fragmentIdentifier){const a=new URL(n);a.hash=e.fragmentIdentifier,s=t[U5]?a.hash:`#${e.fragmentIdentifier}`}return`${n}${o}${s}`}function hL(e,t,n){n={parseFragmentIdentifier:!0,[U5]:!1,...n};const{url:r,query:i,fragmentIdentifier:o}=dL(e,n);return fL({url:r,query:lce(i,t),fragmentIdentifier:o},n)}function pce(e,t,n){const r=Array.isArray(t)?i=>!t.includes(i):(i,o)=>!t(i,o);return hL(e,r,n)}const yp=Object.freeze(Object.defineProperty({__proto__:null,exclude:pce,extract:sT,parse:aT,parseUrl:dL,pick:hL,stringify:uL,stringifyUrl:fL},Symbol.toStringTag,{value:"Module"}));var pL=(e=>(e.uninitialized="uninitialized",e.pending="pending",e.fulfilled="fulfilled",e.rejected="rejected",e))(pL||{});function gce(e){return{status:e,isUninitialized:e==="uninitialized",isLoading:e==="pending",isSuccess:e==="fulfilled",isError:e==="rejected"}}function mce(e){return new RegExp("(^|:)//").test(e)}var yce=e=>e.replace(/\/$/,""),vce=e=>e.replace(/^\//,"");function bce(e,t){if(!e)return t;if(!t)return e;if(mce(t))return t;const n=e.endsWith("/")||!t.startsWith("?")?"/":"";return e=yce(e),t=vce(t),`${e}${n}${t}`}var uI=e=>[].concat(...e);function _ce(){return typeof navigator>"u"||navigator.onLine===void 0?!0:navigator.onLine}function Sce(){return typeof document>"u"?!0:document.visibilityState!=="hidden"}var dI=_s;function gL(e,t){if(e===t||!(dI(e)&&dI(t)||Array.isArray(e)&&Array.isArray(t)))return t;const n=Object.keys(t),r=Object.keys(e);let i=n.length===r.length;const o=Array.isArray(t)?[]:{};for(const s of n)o[s]=gL(e[s],t[s]),i&&(i=e[s]===o[s]);return i?e:o}var fI=(...e)=>fetch(...e),xce=e=>e.status>=200&&e.status<=299,wce=e=>/ion\/(vnd\.api\+)?json/.test(e.get("content-type")||"");function hI(e){if(!_s(e))return e;const t={...e};for(const[n,r]of Object.entries(t))r===void 0&&delete t[n];return t}function Cce({baseUrl:e,prepareHeaders:t=d=>d,fetchFn:n=fI,paramsSerializer:r,isJsonContentType:i=wce,jsonContentType:o="application/json",jsonReplacer:s,timeout:a,responseHandler:l,validateStatus:c,...u}={}){return typeof fetch>"u"&&n===fI&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),async(f,h)=>{const{signal:p,getState:m,extra:_,endpoint:v,forced:y,type:g}=h;let b,{url:S,headers:w=new Headers(u.headers),params:C=void 0,responseHandler:x=l??"json",validateStatus:k=c??xce,timeout:A=a,...R}=typeof f=="string"?{url:f}:f,L={...u,signal:p,...R};w=new Headers(hI(w)),L.headers=await t(w,{getState:m,extra:_,endpoint:v,forced:y,type:g})||w;const M=V=>typeof V=="object"&&(_s(V)||Array.isArray(V)||typeof V.toJSON=="function");if(!L.headers.has("content-type")&&M(L.body)&&L.headers.set("content-type",o),M(L.body)&&i(L.headers)&&(L.body=JSON.stringify(L.body,s)),C){const V=~S.indexOf("?")?"&":"?",H=r?r(C):new URLSearchParams(hI(C));S+=V+H}S=bce(e,S);const E=new Request(S,L);b={request:new Request(S,L)};let O,F=!1,$=A&&setTimeout(()=>{F=!0,h.abort()},A);try{O=await n(E)}catch(V){return{error:{status:F?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(V)},meta:b}}finally{$&&clearTimeout($)}const D=O.clone();b.response=D;let N,z="";try{let V;if(await Promise.all([d(O,x).then(H=>N=H,H=>V=H),D.text().then(H=>z=H,()=>{})]),V)throw V}catch(V){return{error:{status:"PARSING_ERROR",originalStatus:O.status,data:z,error:String(V)},meta:b}}return k(O,N)?{data:N,meta:b}:{error:{status:O.status,data:N},meta:b}};async function d(f,h){if(typeof h=="function")return h(f);if(h==="content-type"&&(h=i(f.headers)?"json":"text"),h==="json"){const p=await f.text();return p.length?JSON.parse(p):null}return f.text()}}var pI=class{constructor(e,t=void 0){this.value=e,this.meta=t}},lT=he("__rtkq/focused"),mL=he("__rtkq/unfocused"),cT=he("__rtkq/online"),yL=he("__rtkq/offline");function vL(e){return e.type==="query"}function Ece(e){return e.type==="mutation"}function uT(e,t,n,r,i,o){return Tce(e)?e(t,n,r,i).map(G5).map(o):Array.isArray(e)?e.map(G5).map(o):[]}function Tce(e){return typeof e=="function"}function G5(e){return typeof e=="string"?{type:e}:e}function gI(e){return e!=null}function Od(e){let t=0;for(const n in e)t++;return t}var vg=Symbol("forceQueryFn"),H5=e=>typeof e[vg]=="function";function Ace({serializeQueryArgs:e,queryThunk:t,mutationThunk:n,api:r,context:i}){const o=new Map,s=new Map,{unsubscribeQueryResult:a,removeMutationResult:l,updateSubscriptionOptions:c}=r.internalActions;return{buildInitiateQuery:p,buildInitiateMutation:m,getRunningQueryThunk:u,getRunningMutationThunk:d,getRunningQueriesThunk:f,getRunningMutationsThunk:h};function u(_,v){return y=>{var S;const g=i.endpointDefinitions[_],b=e({queryArgs:v,endpointDefinition:g,endpointName:_});return(S=o.get(y))==null?void 0:S[b]}}function d(_,v){return y=>{var g;return(g=s.get(y))==null?void 0:g[v]}}function f(){return _=>Object.values(o.get(_)||{}).filter(gI)}function h(){return _=>Object.values(s.get(_)||{}).filter(gI)}function p(_,v){const y=(g,{subscribe:b=!0,forceRefetch:S,subscriptionOptions:w,[vg]:C}={})=>(x,k)=>{var z;const A=e({queryArgs:g,endpointDefinition:v,endpointName:_}),R=t({type:"query",subscribe:b,forceRefetch:S,subscriptionOptions:w,endpointName:_,originalArgs:g,queryCacheKey:A,[vg]:C}),L=r.endpoints[_].select(g),M=x(R),E=L(k()),{requestId:P,abort:O}=M,F=E.requestId!==P,$=(z=o.get(x))==null?void 0:z[A],D=()=>L(k()),N=Object.assign(C?M.then(D):F&&!$?Promise.resolve(E):Promise.all([$,M]).then(D),{arg:g,requestId:P,subscriptionOptions:w,queryCacheKey:A,abort:O,async unwrap(){const V=await N;if(V.isError)throw V.error;return V.data},refetch:()=>x(y(g,{subscribe:!1,forceRefetch:!0})),unsubscribe(){b&&x(a({queryCacheKey:A,requestId:P}))},updateSubscriptionOptions(V){N.subscriptionOptions=V,x(c({endpointName:_,requestId:P,queryCacheKey:A,options:V}))}});if(!$&&!F&&!C){const V=o.get(x)||{};V[A]=N,o.set(x,V),N.then(()=>{delete V[A],Od(V)||o.delete(x)})}return N};return y}function m(_){return(v,{track:y=!0,fixedCacheKey:g}={})=>(b,S)=>{const w=n({type:"mutation",endpointName:_,originalArgs:v,track:y,fixedCacheKey:g}),C=b(w),{requestId:x,abort:k,unwrap:A}=C,R=C.unwrap().then(P=>({data:P})).catch(P=>({error:P})),L=()=>{b(l({requestId:x,fixedCacheKey:g}))},M=Object.assign(R,{arg:C.arg,requestId:x,abort:k,unwrap:A,reset:L}),E=s.get(b)||{};return s.set(b,E),E[x]=M,M.then(()=>{delete E[x],Od(E)||s.delete(b)}),g&&(E[g]=M,M.then(()=>{E[g]===M&&(delete E[g],Od(E)||s.delete(b))})),M}}}function mI(e){return e}function kce({reducerPath:e,baseQuery:t,context:{endpointDefinitions:n},serializeQueryArgs:r,api:i,assertTagType:o}){const s=(y,g,b,S)=>(w,C)=>{const x=n[y],k=r({queryArgs:g,endpointDefinition:x,endpointName:y});if(w(i.internalActions.queryResultPatched({queryCacheKey:k,patches:b})),!S)return;const A=i.endpoints[y].select(g)(C()),R=uT(x.providesTags,A.data,void 0,g,{},o);w(i.internalActions.updateProvidedBy({queryCacheKey:k,providedTags:R}))},a=(y,g,b,S=!0)=>(w,C)=>{const k=i.endpoints[y].select(g)(C());let A={patches:[],inversePatches:[],undo:()=>w(i.util.patchQueryData(y,g,A.inversePatches,S))};if(k.status==="uninitialized")return A;let R;if("data"in k)if(No(k.data)){const[L,M,E]=dN(k.data,b);A.patches.push(...M),A.inversePatches.push(...E),R=L}else R=b(k.data),A.patches.push({op:"replace",path:[],value:R}),A.inversePatches.push({op:"replace",path:[],value:k.data});return w(i.util.patchQueryData(y,g,A.patches,S)),A},l=(y,g,b)=>S=>S(i.endpoints[y].initiate(g,{subscribe:!1,forceRefetch:!0,[vg]:()=>({data:b})})),c=async(y,{signal:g,abort:b,rejectWithValue:S,fulfillWithValue:w,dispatch:C,getState:x,extra:k})=>{const A=n[y.endpointName];try{let R=mI,L;const M={signal:g,abort:b,dispatch:C,getState:x,extra:k,endpoint:y.endpointName,type:y.type,forced:y.type==="query"?u(y,x()):void 0},E=y.type==="query"?y[vg]:void 0;if(E?L=E():A.query?(L=await t(A.query(y.originalArgs),M,A.extraOptions),A.transformResponse&&(R=A.transformResponse)):L=await A.queryFn(y.originalArgs,M,A.extraOptions,P=>t(P,M,A.extraOptions)),typeof process<"u",L.error)throw new pI(L.error,L.meta);return w(await R(L.data,L.meta,y.originalArgs),{fulfilledTimeStamp:Date.now(),baseQueryMeta:L.meta,[ad]:!0})}catch(R){let L=R;if(L instanceof pI){let M=mI;A.query&&A.transformErrorResponse&&(M=A.transformErrorResponse);try{return S(await M(L.value,L.meta,y.originalArgs),{baseQueryMeta:L.meta,[ad]:!0})}catch(E){L=E}}throw typeof process<"u",console.error(L),L}};function u(y,g){var x,k,A;const b=(k=(x=g[e])==null?void 0:x.queries)==null?void 0:k[y.queryCacheKey],S=(A=g[e])==null?void 0:A.config.refetchOnMountOrArgChange,w=b==null?void 0:b.fulfilledTimeStamp,C=y.forceRefetch??(y.subscribe&&S);return C?C===!0||(Number(new Date)-Number(w))/1e3>=C:!1}const d=m5(`${e}/executeQuery`,c,{getPendingMeta(){return{startedTimeStamp:Date.now(),[ad]:!0}},condition(y,{getState:g}){var A,R,L;const b=g(),S=(R=(A=b[e])==null?void 0:A.queries)==null?void 0:R[y.queryCacheKey],w=S==null?void 0:S.fulfilledTimeStamp,C=y.originalArgs,x=S==null?void 0:S.originalArgs,k=n[y.endpointName];return H5(y)?!0:(S==null?void 0:S.status)==="pending"?!1:u(y,b)||vL(k)&&((L=k==null?void 0:k.forceRefetch)!=null&&L.call(k,{currentArg:C,previousArg:x,endpointState:S,state:b}))?!0:!w},dispatchConditionRejection:!0}),f=m5(`${e}/executeMutation`,c,{getPendingMeta(){return{startedTimeStamp:Date.now(),[ad]:!0}}}),h=y=>"force"in y,p=y=>"ifOlderThan"in y,m=(y,g,b)=>(S,w)=>{const C=h(b)&&b.force,x=p(b)&&b.ifOlderThan,k=(R=!0)=>i.endpoints[y].initiate(g,{forceRefetch:R}),A=i.endpoints[y].select(g)(w());if(C)S(k());else if(x){const R=A==null?void 0:A.fulfilledTimeStamp;if(!R){S(k());return}(Number(new Date)-Number(new Date(R)))/1e3>=x&&S(k())}else S(k(!1))};function _(y){return g=>{var b,S;return((S=(b=g==null?void 0:g.meta)==null?void 0:b.arg)==null?void 0:S.endpointName)===y}}function v(y,g){return{matchPending:hp(v4(y),_(g)),matchFulfilled:hp(bl(y),_(g)),matchRejected:hp(sf(y),_(g))}}return{queryThunk:d,mutationThunk:f,prefetch:m,updateQueryData:a,upsertQueryData:l,patchQueryData:s,buildMatchThunkActions:v}}function bL(e,t,n,r){return uT(n[e.meta.arg.endpointName][t],bl(e)?e.payload:void 0,fm(e)?e.payload:void 0,e.meta.arg.originalArgs,"baseQueryMeta"in e.meta?e.meta.baseQueryMeta:void 0,r)}function H0(e,t,n){const r=e[t];r&&n(r)}function bg(e){return("arg"in e?e.arg.fixedCacheKey:e.fixedCacheKey)??e.requestId}function yI(e,t,n){const r=e[bg(t)];r&&n(r)}var ph={};function Pce({reducerPath:e,queryThunk:t,mutationThunk:n,context:{endpointDefinitions:r,apiUid:i,extractRehydrationInfo:o,hasRehydrationInfo:s},assertTagType:a,config:l}){const c=he(`${e}/resetApiState`),u=jt({name:`${e}/queries`,initialState:ph,reducers:{removeQueryResult:{reducer(g,{payload:{queryCacheKey:b}}){delete g[b]},prepare:uh()},queryResultPatched:{reducer(g,{payload:{queryCacheKey:b,patches:S}}){H0(g,b,w=>{w.data=BP(w.data,S.concat())})},prepare:uh()}},extraReducers(g){g.addCase(t.pending,(b,{meta:S,meta:{arg:w}})=>{var x;const C=H5(w);b[x=w.queryCacheKey]??(b[x]={status:"uninitialized",endpointName:w.endpointName}),H0(b,w.queryCacheKey,k=>{k.status="pending",k.requestId=C&&k.requestId?k.requestId:S.requestId,w.originalArgs!==void 0&&(k.originalArgs=w.originalArgs),k.startedTimeStamp=S.startedTimeStamp})}).addCase(t.fulfilled,(b,{meta:S,payload:w})=>{H0(b,S.arg.queryCacheKey,C=>{if(C.requestId!==S.requestId&&!H5(S.arg))return;const{merge:x}=r[S.arg.endpointName];if(C.status="fulfilled",x)if(C.data!==void 0){const{fulfilledTimeStamp:k,arg:A,baseQueryMeta:R,requestId:L}=S;let M=Pf(C.data,E=>x(E,w,{arg:A.originalArgs,baseQueryMeta:R,fulfilledTimeStamp:k,requestId:L}));C.data=M}else C.data=w;else C.data=r[S.arg.endpointName].structuralSharing??!0?gL(Ji(C.data)?uQ(C.data):C.data,w):w;delete C.error,C.fulfilledTimeStamp=S.fulfilledTimeStamp})}).addCase(t.rejected,(b,{meta:{condition:S,arg:w,requestId:C},error:x,payload:k})=>{H0(b,w.queryCacheKey,A=>{if(!S){if(A.requestId!==C)return;A.status="rejected",A.error=k??x}})}).addMatcher(s,(b,S)=>{const{queries:w}=o(S);for(const[C,x]of Object.entries(w))((x==null?void 0:x.status)==="fulfilled"||(x==null?void 0:x.status)==="rejected")&&(b[C]=x)})}}),d=jt({name:`${e}/mutations`,initialState:ph,reducers:{removeMutationResult:{reducer(g,{payload:b}){const S=bg(b);S in g&&delete g[S]},prepare:uh()}},extraReducers(g){g.addCase(n.pending,(b,{meta:S,meta:{requestId:w,arg:C,startedTimeStamp:x}})=>{C.track&&(b[bg(S)]={requestId:w,status:"pending",endpointName:C.endpointName,startedTimeStamp:x})}).addCase(n.fulfilled,(b,{payload:S,meta:w})=>{w.arg.track&&yI(b,w,C=>{C.requestId===w.requestId&&(C.status="fulfilled",C.data=S,C.fulfilledTimeStamp=w.fulfilledTimeStamp)})}).addCase(n.rejected,(b,{payload:S,error:w,meta:C})=>{C.arg.track&&yI(b,C,x=>{x.requestId===C.requestId&&(x.status="rejected",x.error=S??w)})}).addMatcher(s,(b,S)=>{const{mutations:w}=o(S);for(const[C,x]of Object.entries(w))((x==null?void 0:x.status)==="fulfilled"||(x==null?void 0:x.status)==="rejected")&&C!==(x==null?void 0:x.requestId)&&(b[C]=x)})}}),f=jt({name:`${e}/invalidation`,initialState:ph,reducers:{updateProvidedBy:{reducer(g,b){var C,x;const{queryCacheKey:S,providedTags:w}=b.payload;for(const k of Object.values(g))for(const A of Object.values(k)){const R=A.indexOf(S);R!==-1&&A.splice(R,1)}for(const{type:k,id:A}of w){const R=(C=g[k]??(g[k]={}))[x=A||"__internal_without_id"]??(C[x]=[]);R.includes(S)||R.push(S)}},prepare:uh()}},extraReducers(g){g.addCase(u.actions.removeQueryResult,(b,{payload:{queryCacheKey:S}})=>{for(const w of Object.values(b))for(const C of Object.values(w)){const x=C.indexOf(S);x!==-1&&C.splice(x,1)}}).addMatcher(s,(b,S)=>{var C,x;const{provided:w}=o(S);for(const[k,A]of Object.entries(w))for(const[R,L]of Object.entries(A)){const M=(C=b[k]??(b[k]={}))[x=R||"__internal_without_id"]??(C[x]=[]);for(const E of L)M.includes(E)||M.push(E)}}).addMatcher(br(bl(t),fm(t)),(b,S)=>{const w=bL(S,"providesTags",r,a),{queryCacheKey:C}=S.meta.arg;f.caseReducers.updateProvidedBy(b,f.actions.updateProvidedBy({queryCacheKey:C,providedTags:w}))})}}),h=jt({name:`${e}/subscriptions`,initialState:ph,reducers:{updateSubscriptionOptions(g,b){},unsubscribeQueryResult(g,b){},internal_getRTKQSubscriptions(){}}}),p=jt({name:`${e}/internalSubscriptions`,initialState:ph,reducers:{subscriptionsUpdated:{reducer(g,b){return BP(g,b.payload)},prepare:uh()}}}),m=jt({name:`${e}/config`,initialState:{online:_ce(),focused:Sce(),middlewareRegistered:!1,...l},reducers:{middlewareRegistered(g,{payload:b}){g.middlewareRegistered=g.middlewareRegistered==="conflict"||i!==b?"conflict":!0}},extraReducers:g=>{g.addCase(cT,b=>{b.online=!0}).addCase(yL,b=>{b.online=!1}).addCase(lT,b=>{b.focused=!0}).addCase(mL,b=>{b.focused=!1}).addMatcher(s,b=>({...b}))}}),_=Vb({queries:u.reducer,mutations:d.reducer,provided:f.reducer,subscriptions:p.reducer,config:m.reducer}),v=(g,b)=>_(c.match(b)?void 0:g,b),y={...m.actions,...u.actions,...h.actions,...p.actions,...d.actions,...f.actions,resetApiState:c};return{reducer:v,actions:y}}var Sc=Symbol.for("RTKQ/skipToken"),_L={status:"uninitialized"},vI=Pf(_L,()=>{}),bI=Pf(_L,()=>{});function Ice({serializeQueryArgs:e,reducerPath:t}){const n=u=>vI,r=u=>bI;return{buildQuerySelector:s,buildMutationSelector:a,selectInvalidatedBy:l,selectCachedArgsForQuery:c};function i(u){return{...u,...gce(u.status)}}function o(u){return u[t]}function s(u,d){return f=>{const h=e({queryArgs:f,endpointDefinition:d,endpointName:u});return fp(f===Sc?n:_=>{var v,y;return((y=(v=o(_))==null?void 0:v.queries)==null?void 0:y[h])??vI},i)}}function a(){return u=>{let d;return typeof u=="object"?d=bg(u)??Sc:d=u,fp(d===Sc?r:p=>{var m,_;return((_=(m=o(p))==null?void 0:m.mutations)==null?void 0:_[d])??bI},i)}}function l(u,d){const f=u[t],h=new Set;for(const p of d.map(G5)){const m=f.provided[p.type];if(!m)continue;let _=(p.id!==void 0?m[p.id]:uI(Object.values(m)))??[];for(const v of _)h.add(v)}return uI(Array.from(h.values()).map(p=>{const m=f.queries[p];return m?[{queryCacheKey:p,endpointName:m.endpointName,originalArgs:m.originalArgs}]:[]}))}function c(u,d){return Object.values(u[t].queries).filter(f=>(f==null?void 0:f.endpointName)===d&&f.status!=="uninitialized").map(f=>f.originalArgs)}}var Mu=WeakMap?new WeakMap:void 0,_I=({endpointName:e,queryArgs:t})=>{let n="";const r=Mu==null?void 0:Mu.get(t);if(typeof r=="string")n=r;else{const i=JSON.stringify(t,(o,s)=>_s(s)?Object.keys(s).sort().reduce((a,l)=>(a[l]=s[l],a),{}):s);_s(t)&&(Mu==null||Mu.set(t,i)),n=i}return`${e}(${n})`};function Mce(...e){return function(n){const r=Zp(c=>{var u;return(u=n.extractRehydrationInfo)==null?void 0:u.call(n,c,{reducerPath:n.reducerPath??"api"})}),i={reducerPath:"api",keepUnusedDataFor:60,refetchOnMountOrArgChange:!1,refetchOnFocus:!1,refetchOnReconnect:!1,invalidationBehavior:"delayed",...n,extractRehydrationInfo:r,serializeQueryArgs(c){let u=_I;if("serializeQueryArgs"in c.endpointDefinition){const d=c.endpointDefinition.serializeQueryArgs;u=f=>{const h=d(f);return typeof h=="string"?h:_I({...f,queryArgs:h})}}else n.serializeQueryArgs&&(u=n.serializeQueryArgs);return u(c)},tagTypes:[...n.tagTypes||[]]},o={endpointDefinitions:{},batch(c){c()},apiUid:y4(),extractRehydrationInfo:r,hasRehydrationInfo:Zp(c=>r(c)!=null)},s={injectEndpoints:l,enhanceEndpoints({addTagTypes:c,endpoints:u}){if(c)for(const d of c)i.tagTypes.includes(d)||i.tagTypes.push(d);if(u)for(const[d,f]of Object.entries(u))typeof f=="function"?f(o.endpointDefinitions[d]):Object.assign(o.endpointDefinitions[d]||{},f);return s}},a=e.map(c=>c.init(s,i,o));function l(c){const u=c.endpoints({query:d=>({...d,type:"query"}),mutation:d=>({...d,type:"mutation"})});for(const[d,f]of Object.entries(u)){if(!c.overrideExisting&&d in o.endpointDefinitions){typeof process<"u";continue}o.endpointDefinitions[d]=f;for(const h of a)h.injectEndpoint(d,f)}return s}return s.injectEndpoints({endpoints:n.endpoints})}}function Rce(e){for(let t in e)return!1;return!0}var Oce=2147483647/1e3-1,$ce=({reducerPath:e,api:t,context:n,internalState:r})=>{const{removeQueryResult:i,unsubscribeQueryResult:o}=t.internalActions;function s(u){const d=r.currentSubscriptions[u];return!!d&&!Rce(d)}const a={},l=(u,d,f)=>{var h;if(o.match(u)){const p=d.getState()[e],{queryCacheKey:m}=u.payload;c(m,(h=p.queries[m])==null?void 0:h.endpointName,d,p.config)}if(t.util.resetApiState.match(u))for(const[p,m]of Object.entries(a))m&&clearTimeout(m),delete a[p];if(n.hasRehydrationInfo(u)){const p=d.getState()[e],{queries:m}=n.extractRehydrationInfo(u);for(const[_,v]of Object.entries(m))c(_,v==null?void 0:v.endpointName,d,p.config)}};function c(u,d,f,h){const p=n.endpointDefinitions[d],m=(p==null?void 0:p.keepUnusedDataFor)??h.keepUnusedDataFor;if(m===1/0)return;const _=Math.max(0,Math.min(m,Oce));if(!s(u)){const v=a[u];v&&clearTimeout(v),a[u]=setTimeout(()=>{s(u)||f.dispatch(i({queryCacheKey:u})),delete a[u]},_*1e3)}}return l},Nce=({reducerPath:e,context:t,context:{endpointDefinitions:n},mutationThunk:r,queryThunk:i,api:o,assertTagType:s,refetchQuery:a,internalState:l})=>{const{removeQueryResult:c}=o.internalActions,u=br(bl(r),fm(r)),d=br(bl(r,i),sf(r,i));let f=[];const h=(_,v)=>{u(_)?m(bL(_,"invalidatesTags",n,s),v):d(_)?m([],v):o.util.invalidateTags.match(_)&&m(uT(_.payload,void 0,void 0,void 0,void 0,s),v)};function p(_){var v,y;for(const g in _.queries)if(((v=_.queries[g])==null?void 0:v.status)==="pending")return!0;for(const g in _.mutations)if(((y=_.mutations[g])==null?void 0:y.status)==="pending")return!0;return!1}function m(_,v){const y=v.getState(),g=y[e];if(f.push(..._),g.config.invalidationBehavior==="delayed"&&p(g))return;const b=f;if(f=[],b.length===0)return;const S=o.util.selectInvalidatedBy(y,b);t.batch(()=>{const w=Array.from(S.values());for(const{queryCacheKey:C}of w){const x=g.queries[C],k=l.currentSubscriptions[C]??{};x&&(Od(k)===0?v.dispatch(c({queryCacheKey:C})):x.status!=="uninitialized"&&v.dispatch(a(x,C)))}})}return h},Fce=({reducerPath:e,queryThunk:t,api:n,refetchQuery:r,internalState:i})=>{const o={},s=(f,h)=>{(n.internalActions.updateSubscriptionOptions.match(f)||n.internalActions.unsubscribeQueryResult.match(f))&&l(f.payload,h),(t.pending.match(f)||t.rejected.match(f)&&f.meta.condition)&&l(f.meta.arg,h),(t.fulfilled.match(f)||t.rejected.match(f)&&!f.meta.condition)&&a(f.meta.arg,h),n.util.resetApiState.match(f)&&u()};function a({queryCacheKey:f},h){const m=h.getState()[e].queries[f],_=i.currentSubscriptions[f];if(!m||m.status==="uninitialized")return;const v=d(_);if(!Number.isFinite(v))return;const y=o[f];y!=null&&y.timeout&&(clearTimeout(y.timeout),y.timeout=void 0);const g=Date.now()+v,b=o[f]={nextPollTimestamp:g,pollingInterval:v,timeout:setTimeout(()=>{b.timeout=void 0,h.dispatch(r(m,f))},v)}}function l({queryCacheKey:f},h){const m=h.getState()[e].queries[f],_=i.currentSubscriptions[f];if(!m||m.status==="uninitialized")return;const v=d(_);if(!Number.isFinite(v)){c(f);return}const y=o[f],g=Date.now()+v;(!y||g{const{removeQueryResult:o}=n.internalActions,s=(l,c)=>{lT.match(l)&&a(c,"refetchOnFocus"),cT.match(l)&&a(c,"refetchOnReconnect")};function a(l,c){const u=l.getState()[e],d=u.queries,f=i.currentSubscriptions;t.batch(()=>{for(const h of Object.keys(f)){const p=d[h],m=f[h];if(!m||!p)continue;(Object.values(m).some(v=>v[c]===!0)||Object.values(m).every(v=>v[c]===void 0)&&u.config[c])&&(Od(m)===0?l.dispatch(o({queryCacheKey:h})):p.status!=="uninitialized"&&l.dispatch(r(p,h)))}})}return s},SI=new Error("Promise never resolved before cacheEntryRemoved."),Lce=({api:e,reducerPath:t,context:n,queryThunk:r,mutationThunk:i,internalState:o})=>{const s=g5(r),a=g5(i),l=bl(r,i),c={},u=(h,p,m)=>{const _=d(h);if(r.pending.match(h)){const v=m[t].queries[_],y=p.getState()[t].queries[_];!v&&y&&f(h.meta.arg.endpointName,h.meta.arg.originalArgs,_,p,h.meta.requestId)}else if(i.pending.match(h))p.getState()[t].mutations[_]&&f(h.meta.arg.endpointName,h.meta.arg.originalArgs,_,p,h.meta.requestId);else if(l(h)){const v=c[_];v!=null&&v.valueResolved&&(v.valueResolved({data:h.payload,meta:h.meta.baseQueryMeta}),delete v.valueResolved)}else if(e.internalActions.removeQueryResult.match(h)||e.internalActions.removeMutationResult.match(h)){const v=c[_];v&&(delete c[_],v.cacheEntryRemoved())}else if(e.util.resetApiState.match(h))for(const[v,y]of Object.entries(c))delete c[v],y.cacheEntryRemoved()};function d(h){return s(h)?h.meta.arg.queryCacheKey:a(h)?h.meta.requestId:e.internalActions.removeQueryResult.match(h)?h.payload.queryCacheKey:e.internalActions.removeMutationResult.match(h)?bg(h.payload):""}function f(h,p,m,_,v){const y=n.endpointDefinitions[h],g=y==null?void 0:y.onCacheEntryAdded;if(!g)return;let b={};const S=new Promise(R=>{b.cacheEntryRemoved=R}),w=Promise.race([new Promise(R=>{b.valueResolved=R}),S.then(()=>{throw SI})]);w.catch(()=>{}),c[m]=b;const C=e.endpoints[h].select(y.type==="query"?p:m),x=_.dispatch((R,L,M)=>M),k={..._,getCacheEntry:()=>C(_.getState()),requestId:v,extra:x,updateCachedData:y.type==="query"?R=>_.dispatch(e.util.updateQueryData(h,p,R)):void 0,cacheDataLoaded:w,cacheEntryRemoved:S},A=g(p,k);Promise.resolve(A).catch(R=>{if(R!==SI)throw R})}return u},Bce=({api:e,context:t,queryThunk:n,mutationThunk:r})=>{const i=v4(n,r),o=sf(n,r),s=bl(n,r),a={};return(c,u)=>{var d,f;if(i(c)){const{requestId:h,arg:{endpointName:p,originalArgs:m}}=c.meta,_=t.endpointDefinitions[p],v=_==null?void 0:_.onQueryStarted;if(v){const y={},g=new Promise((C,x)=>{y.resolve=C,y.reject=x});g.catch(()=>{}),a[h]=y;const b=e.endpoints[p].select(_.type==="query"?m:h),S=u.dispatch((C,x,k)=>k),w={...u,getCacheEntry:()=>b(u.getState()),requestId:h,extra:S,updateCachedData:_.type==="query"?C=>u.dispatch(e.util.updateQueryData(p,m,C)):void 0,queryFulfilled:g};v(m,w)}}else if(s(c)){const{requestId:h,baseQueryMeta:p}=c.meta;(d=a[h])==null||d.resolve({data:c.payload,meta:p}),delete a[h]}else if(o(c)){const{requestId:h,rejectedWithValue:p,baseQueryMeta:m}=c.meta;(f=a[h])==null||f.reject({error:c.payload??c.error,isUnhandledError:!p,meta:m}),delete a[h]}}},zce=({api:e,context:{apiUid:t},reducerPath:n})=>(r,i)=>{e.util.resetApiState.match(r)&&i.dispatch(e.internalActions.middlewareRegistered(t)),typeof process<"u"},jce=({api:e,queryThunk:t,internalState:n})=>{const r=`${e.reducerPath}/subscriptions`;let i=null,o=null;const{updateSubscriptionOptions:s,unsubscribeQueryResult:a}=e.internalActions,l=(h,p)=>{var _,v,y;if(s.match(p)){const{queryCacheKey:g,requestId:b,options:S}=p.payload;return(_=h==null?void 0:h[g])!=null&&_[b]&&(h[g][b]=S),!0}if(a.match(p)){const{queryCacheKey:g,requestId:b}=p.payload;return h[g]&&delete h[g][b],!0}if(e.internalActions.removeQueryResult.match(p))return delete h[p.payload.queryCacheKey],!0;if(t.pending.match(p)){const{meta:{arg:g,requestId:b}}=p,S=h[v=g.queryCacheKey]??(h[v]={});return S[`${b}_running`]={},g.subscribe&&(S[b]=g.subscriptionOptions??S[b]??{}),!0}let m=!1;if(t.fulfilled.match(p)||t.rejected.match(p)){const g=h[p.meta.arg.queryCacheKey]||{},b=`${p.meta.requestId}_running`;m||(m=!!g[b]),delete g[b]}if(t.rejected.match(p)){const{meta:{condition:g,arg:b,requestId:S}}=p;if(g&&b.subscribe){const w=h[y=b.queryCacheKey]??(h[y]={});w[S]=b.subscriptionOptions??w[S]??{},m=!0}}return m},c=()=>n.currentSubscriptions,f={getSubscriptions:c,getSubscriptionCount:h=>{const m=c()[h]??{};return Od(m)},isRequestSubscribed:(h,p)=>{var _;const m=c();return!!((_=m==null?void 0:m[h])!=null&&_[p])}};return(h,p)=>{if(i||(i=JSON.parse(JSON.stringify(n.currentSubscriptions))),e.util.resetApiState.match(h))return i=n.currentSubscriptions={},o=null,[!0,!1];if(e.internalActions.internal_getRTKQSubscriptions.match(h))return[!1,f];const m=l(n.currentSubscriptions,h);let _=!0;if(m){o||(o=setTimeout(()=>{const g=JSON.parse(JSON.stringify(n.currentSubscriptions)),[,b]=dN(i,()=>g);p.next(e.internalActions.subscriptionsUpdated(b)),i=g,o=null},500));const v=typeof h.type=="string"&&!!h.type.startsWith(r),y=t.rejected.match(h)&&h.meta.condition&&!!h.meta.arg.subscribe;_=!v&&!y}return[_,!1]}};function Vce(e){const{reducerPath:t,queryThunk:n,api:r,context:i}=e,{apiUid:o}=i,s={invalidateTags:he(`${t}/invalidateTags`)},a=d=>d.type.startsWith(`${t}/`),l=[zce,$ce,Nce,Fce,Lce,Bce];return{middleware:d=>{let f=!1;const p={...e,internalState:{currentSubscriptions:{}},refetchQuery:u,isThisApiSliceAction:a},m=l.map(y=>y(p)),_=jce(p),v=Dce(p);return y=>g=>{if(!Ub(g))return y(g);f||(f=!0,d.dispatch(r.internalActions.middlewareRegistered(o)));const b={...d,next:y},S=d.getState(),[w,C]=_(g,b,S);let x;if(w?x=y(g):x=C,d.getState()[t]&&(v(g,b,S),a(g)||i.hasRehydrationInfo(g)))for(let k of m)k(g,b,S);return x}},actions:s};function u(d,f,h={}){return n({type:"query",endpointName:d.endpointName,originalArgs:d.originalArgs,subscribe:!1,forceRefetch:!0,queryCacheKey:f,...h})}}function ka(e,...t){return Object.assign(e,...t)}var xI=Symbol(),Uce=()=>({name:xI,init(e,{baseQuery:t,tagTypes:n,reducerPath:r,serializeQueryArgs:i,keepUnusedDataFor:o,refetchOnMountOrArgChange:s,refetchOnFocus:a,refetchOnReconnect:l,invalidationBehavior:c},u){bQ();const d=F=>(typeof process<"u",F);Object.assign(e,{reducerPath:r,endpoints:{},internalActions:{onOnline:cT,onOffline:yL,onFocus:lT,onFocusLost:mL},util:{}});const{queryThunk:f,mutationThunk:h,patchQueryData:p,updateQueryData:m,upsertQueryData:_,prefetch:v,buildMatchThunkActions:y}=kce({baseQuery:t,reducerPath:r,context:u,api:e,serializeQueryArgs:i,assertTagType:d}),{reducer:g,actions:b}=Pce({context:u,queryThunk:f,mutationThunk:h,reducerPath:r,assertTagType:d,config:{refetchOnFocus:a,refetchOnReconnect:l,refetchOnMountOrArgChange:s,keepUnusedDataFor:o,reducerPath:r,invalidationBehavior:c}});ka(e.util,{patchQueryData:p,updateQueryData:m,upsertQueryData:_,prefetch:v,resetApiState:b.resetApiState}),ka(e.internalActions,b);const{middleware:S,actions:w}=Vce({reducerPath:r,context:u,queryThunk:f,mutationThunk:h,api:e,assertTagType:d});ka(e.util,w),ka(e,{reducer:g,middleware:S});const{buildQuerySelector:C,buildMutationSelector:x,selectInvalidatedBy:k,selectCachedArgsForQuery:A}=Ice({serializeQueryArgs:i,reducerPath:r});ka(e.util,{selectInvalidatedBy:k,selectCachedArgsForQuery:A});const{buildInitiateQuery:R,buildInitiateMutation:L,getRunningMutationThunk:M,getRunningMutationsThunk:E,getRunningQueriesThunk:P,getRunningQueryThunk:O}=Ace({queryThunk:f,mutationThunk:h,api:e,serializeQueryArgs:i,context:u});return ka(e.util,{getRunningMutationThunk:M,getRunningMutationsThunk:E,getRunningQueryThunk:O,getRunningQueriesThunk:P}),{name:xI,injectEndpoint(F,$){var N;const D=e;(N=D.endpoints)[F]??(N[F]={}),vL($)?ka(D.endpoints[F],{name:F,select:C(F,$),initiate:R(F,$)},y(f,F)):Ece($)&&ka(D.endpoints[F],{name:F,select:x(),initiate:L(F)},y(h,F))}}}});function wI(e,t,n,r){const i=I.useMemo(()=>({queryArgs:e,serialized:typeof e=="object"?t({queryArgs:e,endpointDefinition:n,endpointName:r}):e}),[e,t,n,r]),o=I.useRef(i);return I.useEffect(()=>{o.current.serialized!==i.serialized&&(o.current=i)},[i]),o.current.serialized===i.serialized?o.current.queryArgs:e}var Kx=Symbol();function Xx(e){const t=I.useRef(e);return I.useEffect(()=>{Jv(t.current,e)||(t.current=e)},[e]),Jv(t.current,e)?t.current:e}var Ru=WeakMap?new WeakMap:void 0,Gce=({endpointName:e,queryArgs:t})=>{let n="";const r=Ru==null?void 0:Ru.get(t);if(typeof r=="string")n=r;else{const i=JSON.stringify(t,(o,s)=>_s(s)?Object.keys(s).sort().reduce((a,l)=>(a[l]=s[l],a),{}):s);_s(t)&&(Ru==null||Ru.set(t,i)),n=i}return`${e}(${n})`},Hce=typeof window<"u"&&window.document&&window.document.createElement?I.useLayoutEffect:I.useEffect,Wce=e=>e.isUninitialized?{...e,isUninitialized:!1,isFetching:!0,isLoading:e.data===void 0,status:pL.pending}:e;function qce({api:e,moduleOptions:{batch:t,hooks:{useDispatch:n,useSelector:r,useStore:i},unstable__sideEffectsInRender:o},serializeQueryArgs:s,context:a}){const l=o?h=>h():I.useEffect;return{buildQueryHooks:d,buildMutationHook:f,usePrefetch:u};function c(h,p,m){if(p!=null&&p.endpointName&&h.isUninitialized){const{endpointName:S}=p,w=a.endpointDefinitions[S];s({queryArgs:p.originalArgs,endpointDefinition:w,endpointName:S})===s({queryArgs:m,endpointDefinition:w,endpointName:S})&&(p=void 0)}let _=h.isSuccess?h.data:p==null?void 0:p.data;_===void 0&&(_=h.data);const v=_!==void 0,y=h.isLoading,g=!v&&y,b=h.isSuccess||y&&v;return{...h,data:_,currentData:h.data,isFetching:y,isLoading:g,isSuccess:b}}function u(h,p){const m=n(),_=Xx(p);return I.useCallback((v,y)=>m(e.util.prefetch(h,v,{..._,...y})),[h,m,_])}function d(h){const p=(v,{refetchOnReconnect:y,refetchOnFocus:g,refetchOnMountOrArgChange:b,skip:S=!1,pollingInterval:w=0}={})=>{const{initiate:C}=e.endpoints[h],x=n(),k=I.useRef();if(!k.current){const $=x(e.internalActions.internal_getRTKQSubscriptions());k.current=$}const A=wI(S?Sc:v,Gce,a.endpointDefinitions[h],h),R=Xx({refetchOnReconnect:y,refetchOnFocus:g,pollingInterval:w}),L=I.useRef(!1),M=I.useRef();let{queryCacheKey:E,requestId:P}=M.current||{},O=!1;E&&P&&(O=k.current.isRequestSubscribed(E,P));const F=!O&&L.current;return l(()=>{L.current=O}),l(()=>{F&&(M.current=void 0)},[F]),l(()=>{var N;const $=M.current;if(typeof process<"u",A===Sc){$==null||$.unsubscribe(),M.current=void 0;return}const D=(N=M.current)==null?void 0:N.subscriptionOptions;if(!$||$.arg!==A){$==null||$.unsubscribe();const z=x(C(A,{subscriptionOptions:R,forceRefetch:b}));M.current=z}else R!==D&&$.updateSubscriptionOptions(R)},[x,C,b,A,R,F]),I.useEffect(()=>()=>{var $;($=M.current)==null||$.unsubscribe(),M.current=void 0},[]),I.useMemo(()=>({refetch:()=>{var $;if(!M.current)throw new Error(yr(38));return($=M.current)==null?void 0:$.refetch()}}),[])},m=({refetchOnReconnect:v,refetchOnFocus:y,pollingInterval:g=0}={})=>{const{initiate:b}=e.endpoints[h],S=n(),[w,C]=I.useState(Kx),x=I.useRef(),k=Xx({refetchOnReconnect:v,refetchOnFocus:y,pollingInterval:g});l(()=>{var M,E;const L=(M=x.current)==null?void 0:M.subscriptionOptions;k!==L&&((E=x.current)==null||E.updateSubscriptionOptions(k))},[k]);const A=I.useRef(k);l(()=>{A.current=k},[k]);const R=I.useCallback(function(L,M=!1){let E;return t(()=>{var P;(P=x.current)==null||P.unsubscribe(),x.current=E=S(b(L,{subscriptionOptions:A.current,forceRefetch:!M})),C(L)}),E},[S,b]);return I.useEffect(()=>()=>{var L;(L=x==null?void 0:x.current)==null||L.unsubscribe()},[]),I.useEffect(()=>{w!==Kx&&!x.current&&R(w,!0)},[w,R]),I.useMemo(()=>[R,w],[R,w])},_=(v,{skip:y=!1,selectFromResult:g}={})=>{const{select:b}=e.endpoints[h],S=wI(y?Sc:v,s,a.endpointDefinitions[h],h),w=I.useRef(),C=I.useMemo(()=>fp([b(S),(L,M)=>M,L=>S],c),[b,S]),x=I.useMemo(()=>g?fp([C],g,{devModeChecks:{identityFunctionCheck:"never"}}):C,[C,g]),k=r(L=>x(L,w.current),Jv),A=i(),R=C(A.getState(),w.current);return Hce(()=>{w.current=R},[R]),k};return{useQueryState:_,useQuerySubscription:p,useLazyQuerySubscription:m,useLazyQuery(v){const[y,g]=m(v),b=_(g,{...v,skip:g===Kx}),S=I.useMemo(()=>({lastArg:g}),[g]);return I.useMemo(()=>[y,b,S],[y,b,S])},useQuery(v,y){const g=p(v,y),b=_(v,{selectFromResult:v===Sc||y!=null&&y.skip?void 0:Wce,...y}),{data:S,status:w,isLoading:C,isSuccess:x,isError:k,error:A}=b;return I.useDebugValue({data:S,status:w,isLoading:C,isSuccess:x,isError:k,error:A}),I.useMemo(()=>({...b,...g}),[b,g])}}}function f(h){return({selectFromResult:p,fixedCacheKey:m}={})=>{const{select:_,initiate:v}=e.endpoints[h],y=n(),[g,b]=I.useState();I.useEffect(()=>()=>{g!=null&&g.arg.fixedCacheKey||g==null||g.reset()},[g]);const S=I.useCallback(function(N){const z=y(v(N,{fixedCacheKey:m}));return b(z),z},[y,v,m]),{requestId:w}=g||{},C=I.useMemo(()=>_({fixedCacheKey:m,requestId:g==null?void 0:g.requestId}),[m,g,_]),x=I.useMemo(()=>p?fp([C],p):C,[p,C]),k=r(x,Jv),A=m==null?g==null?void 0:g.arg.originalArgs:void 0,R=I.useCallback(()=>{t(()=>{g&&b(void 0),m&&y(e.internalActions.removeMutationResult({requestId:w,fixedCacheKey:m}))})},[y,m,g,w]),{endpointName:L,data:M,status:E,isLoading:P,isSuccess:O,isError:F,error:$}=k;I.useDebugValue({endpointName:L,data:M,status:E,isLoading:P,isSuccess:O,isError:F,error:$});const D=I.useMemo(()=>({...k,originalArgs:A,reset:R}),[k,A,R]);return I.useMemo(()=>[S,D],[S,D])}}}function Kce(e){return e.type==="query"}function Xce(e){return e.type==="mutation"}function Qx(e){return e.replace(e[0],e[0].toUpperCase())}function W0(e,...t){return Object.assign(e,...t)}var Qce=Symbol(),Yce=({batch:e=iQ,hooks:t={useDispatch:eN,useSelector:Y$,useStore:J$},unstable__sideEffectsInRender:n=!1,...r}={})=>({name:Qce,init(i,{serializeQueryArgs:o},s){const a=i,{buildQueryHooks:l,buildMutationHook:c,usePrefetch:u}=qce({api:i,moduleOptions:{batch:e,hooks:t,unstable__sideEffectsInRender:n},serializeQueryArgs:o,context:s});return W0(a,{usePrefetch:u}),W0(s,{batch:e}),{injectEndpoint(d,f){if(Kce(f)){const{useQuery:h,useLazyQuery:p,useLazyQuerySubscription:m,useQueryState:_,useQuerySubscription:v}=l(d);W0(a.endpoints[d],{useQuery:h,useLazyQuery:p,useLazyQuerySubscription:m,useQueryState:_,useQuerySubscription:v}),i[`use${Qx(d)}Query`]=h,i[`useLazy${Qx(d)}Query`]=p}else if(Xce(f)){const h=c(d);W0(a.endpoints[d],{useMutation:h}),i[`use${Qx(d)}Mutation`]=h}}}}}),Zce=Mce(Uce(),Yce());const Jce=["AppVersion","AppConfig","Board","BoardImagesTotal","BoardAssetsTotal","Image","ImageNameList","ImageList","ImageMetadata","ImageWorkflow","ImageMetadataFromFile","IntermediatesCount","SessionQueueItem","SessionQueueStatus","SessionProcessorStatus","CurrentSessionQueueItem","NextSessionQueueItem","BatchStatus","InvocationCacheStatus","Model","T2IAdapterModel","MainModel","OnnxModel","VaeModel","IPAdapterModel","TextualInversionModel","ControlNetModel","LoRAModel","SDXLRefinerModel","Workflow","WorkflowsRecent"],Ir="LIST",eue=async(e,t,n)=>{const r=Yv.get(),i=Qv.get(),o=F5.get();return Cce({baseUrl:`${r??""}/api/v1`,prepareHeaders:a=>(i&&a.set("Authorization",`Bearer ${i}`),o&&a.set("project-id",o),a)})(e,t,n)},Lo=Zce({baseQuery:eue,reducerPath:"api",tagTypes:Jce,endpoints:()=>({})}),tue=e=>{const t=e?yp.stringify(e,{arrayFormat:"none"}):void 0;return t?`queue/${In.get()}/list?${t}`:`queue/${In.get()}/list`},pc=jo({selectId:e=>String(e.item_id),sortComparer:(e,t)=>e.priority>t.priority?-1:e.priorityt.item_id?1:0}),en=Lo.injectEndpoints({endpoints:e=>({enqueueBatch:e.mutation({query:t=>({url:`queue/${In.get()}/enqueue_batch`,body:t,method:"POST"}),invalidatesTags:["SessionQueueStatus","CurrentSessionQueueItem","NextSessionQueueItem"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),resumeProcessor:e.mutation({query:()=>({url:`queue/${In.get()}/processor/resume`,method:"PUT"}),invalidatesTags:["CurrentSessionQueueItem","SessionQueueStatus"]}),pauseProcessor:e.mutation({query:()=>({url:`queue/${In.get()}/processor/pause`,method:"PUT"}),invalidatesTags:["CurrentSessionQueueItem","SessionQueueStatus"]}),pruneQueue:e.mutation({query:()=>({url:`queue/${In.get()}/prune`,method:"PUT"}),invalidatesTags:["SessionQueueStatus","BatchStatus"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),clearQueue:e.mutation({query:()=>({url:`queue/${In.get()}/clear`,method:"PUT"}),invalidatesTags:["SessionQueueStatus","SessionProcessorStatus","BatchStatus","CurrentSessionQueueItem","NextSessionQueueItem"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),getCurrentQueueItem:e.query({query:()=>({url:`queue/${In.get()}/current`,method:"GET"}),providesTags:t=>{const n=["CurrentSessionQueueItem"];return t&&n.push({type:"SessionQueueItem",id:t.item_id}),n}}),getNextQueueItem:e.query({query:()=>({url:`queue/${In.get()}/next`,method:"GET"}),providesTags:t=>{const n=["NextSessionQueueItem"];return t&&n.push({type:"SessionQueueItem",id:t.item_id}),n}}),getQueueStatus:e.query({query:()=>({url:`queue/${In.get()}/status`,method:"GET"}),providesTags:["SessionQueueStatus"]}),getBatchStatus:e.query({query:({batch_id:t})=>({url:`queue/${In.get()}/b/${t}/status`,method:"GET"}),providesTags:t=>t?[{type:"BatchStatus",id:t.batch_id}]:[]}),getQueueItem:e.query({query:t=>({url:`queue/${In.get()}/i/${t}`,method:"GET"}),providesTags:t=>t?[{type:"SessionQueueItem",id:t.item_id}]:[]}),cancelQueueItem:e.mutation({query:t=>({url:`queue/${In.get()}/i/${t}/cancel`,method:"PUT"}),onQueryStarted:async(t,{dispatch:n,queryFulfilled:r})=>{try{const{data:i}=await r;n(en.util.updateQueryData("listQueueItems",void 0,o=>{pc.updateOne(o,{id:String(t),changes:{status:i.status,completed_at:i.completed_at,updated_at:i.updated_at}})}))}catch{}},invalidatesTags:t=>t?[{type:"SessionQueueItem",id:t.item_id},{type:"BatchStatus",id:t.batch_id}]:[]}),cancelByBatchIds:e.mutation({query:t=>({url:`queue/${In.get()}/cancel_by_batch_ids`,method:"PUT",body:t}),onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}},invalidatesTags:["SessionQueueStatus","BatchStatus"]}),listQueueItems:e.query({query:t=>({url:tue(t),method:"GET"}),serializeQueryArgs:()=>`queue/${In.get()}/list`,transformResponse:t=>pc.addMany(pc.getInitialState({has_more:t.has_more}),t.items),merge:(t,n)=>{pc.addMany(t,pc.getSelectors().selectAll(n)),t.has_more=n.has_more},forceRefetch:({currentArg:t,previousArg:n})=>t!==n,keepUnusedDataFor:60*5})})}),{useCancelByBatchIdsMutation:sVe,useEnqueueBatchMutation:aVe,usePauseProcessorMutation:lVe,useResumeProcessorMutation:cVe,useClearQueueMutation:uVe,usePruneQueueMutation:dVe,useGetCurrentQueueItemQuery:fVe,useGetQueueStatusQuery:hVe,useGetQueueItemQuery:pVe,useGetNextQueueItemQuery:gVe,useListQueueItemsQuery:mVe,useCancelQueueItemMutation:yVe,useGetBatchStatusQuery:vVe}=en,q0=e=>{e(en.util.updateQueryData("listQueueItems",void 0,t=>{pc.removeAll(t),t.has_more=!1})),e(rce()),e(en.endpoints.listQueueItems.initiate(void 0))},Uh={objects:[],stagingArea:{images:[],selectedImageIndex:-1}},SL={boundingBoxCoordinates:{x:0,y:0},boundingBoxDimensions:{width:512,height:512},boundingBoxPreviewFill:{r:0,g:0,b:0,a:.5},boundingBoxScaleMethod:"none",brushColor:{r:90,g:90,b:255,a:1},brushSize:50,colorPickerColor:{r:90,g:90,b:255,a:1},cursorPosition:null,futureLayerStates:[],isDrawing:!1,isMaskEnabled:!0,isMouseOverBoundingBox:!1,isMoveBoundingBoxKeyHeld:!1,isMoveStageKeyHeld:!1,isMovingBoundingBox:!1,isMovingStage:!1,isTransformingBoundingBox:!1,layer:"base",layerState:Uh,maskColor:{r:255,g:90,b:90,a:1},maxHistory:128,minimumStageScale:1,pastLayerStates:[],scaledBoundingBoxDimensions:{width:512,height:512},shouldAntialias:!0,shouldAutoSave:!1,shouldCropToBoundingBoxOnSave:!1,shouldDarkenOutsideBoundingBox:!1,shouldLockBoundingBox:!1,shouldPreserveMaskedArea:!1,shouldRestrictStrokesToBox:!0,shouldShowBoundingBox:!0,shouldShowBrush:!0,shouldShowBrushPreview:!1,shouldShowCanvasDebugInfo:!1,shouldShowCheckboardTransparency:!1,shouldShowGrid:!0,shouldShowIntermediates:!0,shouldShowStagingImage:!0,shouldShowStagingOutline:!0,shouldSnapToGrid:!0,stageCoordinates:{x:0,y:0},stageDimensions:{width:0,height:0},stageScale:1,tool:"brush",batchIds:[]},xL=jt({name:"canvas",initialState:SL,reducers:{setTool:(e,t)=>{const n=t.payload;e.tool=t.payload,n!=="move"&&(e.isTransformingBoundingBox=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1)},setLayer:(e,t)=>{e.layer=t.payload},toggleTool:e=>{const t=e.tool;t!=="move"&&(e.tool=t==="brush"?"eraser":"brush")},setMaskColor:(e,t)=>{e.maskColor=t.payload},setBrushColor:(e,t)=>{e.brushColor=t.payload},setBrushSize:(e,t)=>{e.brushSize=t.payload},clearMask:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.layerState.objects=e.layerState.objects.filter(t=>!rL(t)),e.futureLayerStates=[],e.shouldPreserveMaskedArea=!1},toggleShouldInvertMask:e=>{e.shouldPreserveMaskedArea=!e.shouldPreserveMaskedArea},toggleShouldShowMask:e=>{e.isMaskEnabled=!e.isMaskEnabled},setShouldPreserveMaskedArea:(e,t)=>{e.shouldPreserveMaskedArea=t.payload},setIsMaskEnabled:(e,t)=>{e.isMaskEnabled=t.payload,e.layer=t.payload?"mask":"base"},setShouldShowCheckboardTransparency:(e,t)=>{e.shouldShowCheckboardTransparency=t.payload},setShouldShowBrushPreview:(e,t)=>{e.shouldShowBrushPreview=t.payload},setShouldShowBrush:(e,t)=>{e.shouldShowBrush=t.payload},setCursorPosition:(e,t)=>{e.cursorPosition=t.payload},setInitialCanvasImage:(e,t)=>{const n=t.payload,{width:r,height:i}=n,{stageDimensions:o}=e,s={width:B0(el(r,64,512),64),height:B0(el(i,64,512),64)},a={x:Or(r/2-s.width/2,64),y:Or(i/2-s.height/2,64)};if(e.boundingBoxScaleMethod==="auto"){const u=Iu(s);e.scaledBoundingBoxDimensions=u}e.boundingBoxDimensions=s,e.boundingBoxCoordinates=a,e.pastLayerStates.push(Ge(e.layerState)),e.layerState={...Ge(Uh),objects:[{kind:"image",layer:"base",x:0,y:0,width:r,height:i,imageName:n.image_name}]},e.futureLayerStates=[],e.batchIds=[];const l=U0(o.width,o.height,r,i,G0),c=V0(o.width,o.height,0,0,r,i,l);e.stageScale=l,e.stageCoordinates=c},setBoundingBoxDimensions:(e,t)=>{const n=Zle(t.payload);if(e.boundingBoxDimensions=n,e.boundingBoxScaleMethod==="auto"){const r=Iu(n);e.scaledBoundingBoxDimensions=r}},flipBoundingBoxAxes:e=>{const[t,n]=[e.boundingBoxDimensions.width,e.boundingBoxDimensions.height],[r,i]=[e.scaledBoundingBoxDimensions.width,e.scaledBoundingBoxDimensions.height];e.boundingBoxDimensions={width:n,height:t},e.scaledBoundingBoxDimensions={width:i,height:r}},setBoundingBoxCoordinates:(e,t)=>{e.boundingBoxCoordinates=Yle(t.payload)},setStageCoordinates:(e,t)=>{e.stageCoordinates=t.payload},setBoundingBoxPreviewFill:(e,t)=>{e.boundingBoxPreviewFill=t.payload},setStageScale:(e,t)=>{e.stageScale=t.payload},setShouldDarkenOutsideBoundingBox:(e,t)=>{e.shouldDarkenOutsideBoundingBox=t.payload},setIsDrawing:(e,t)=>{e.isDrawing=t.payload},clearCanvasHistory:e=>{e.pastLayerStates=[],e.futureLayerStates=[]},setShouldLockBoundingBox:(e,t)=>{e.shouldLockBoundingBox=t.payload},toggleShouldLockBoundingBox:e=>{e.shouldLockBoundingBox=!e.shouldLockBoundingBox},setShouldShowBoundingBox:(e,t)=>{e.shouldShowBoundingBox=t.payload},setIsTransformingBoundingBox:(e,t)=>{e.isTransformingBoundingBox=t.payload},setIsMovingBoundingBox:(e,t)=>{e.isMovingBoundingBox=t.payload},setIsMouseOverBoundingBox:(e,t)=>{e.isMouseOverBoundingBox=t.payload},setIsMoveBoundingBoxKeyHeld:(e,t)=>{e.isMoveBoundingBoxKeyHeld=t.payload},setIsMoveStageKeyHeld:(e,t)=>{e.isMoveStageKeyHeld=t.payload},canvasBatchIdAdded:(e,t)=>{e.batchIds.push(t.payload)},canvasBatchIdsReset:e=>{e.batchIds=[]},stagingAreaInitialized:(e,t)=>{const{boundingBox:n}=t.payload;e.layerState.stagingArea={boundingBox:n,images:[],selectedImageIndex:-1}},addImageToStagingArea:(e,t)=>{const n=t.payload;!n||!e.layerState.stagingArea.boundingBox||(e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea.images.push({kind:"image",layer:"base",...e.layerState.stagingArea.boundingBox,imageName:n.image_name}),e.layerState.stagingArea.selectedImageIndex=e.layerState.stagingArea.images.length-1,e.futureLayerStates=[])},discardStagedImages:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea=Ge(Ge(Uh)).stagingArea,e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0,e.batchIds=[]},addFillRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,brushColor:r}=e;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"fillRect",layer:"base",...t,...n,color:r}),e.futureLayerStates=[]},addEraseRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n}=e;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"eraseRect",layer:"base",...t,...n}),e.futureLayerStates=[]},addLine:(e,t)=>{const{tool:n,layer:r,brushColor:i,brushSize:o,shouldRestrictStrokesToBox:s}=e;if(n==="move"||n==="colorPicker")return;const a=o/2,l=r==="base"&&n==="brush"?{color:i}:{};e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const c={kind:"line",layer:r,tool:n,strokeWidth:a,points:t.payload,...l};s&&(c.clip={...e.boundingBoxCoordinates,...e.boundingBoxDimensions}),e.layerState.objects.push(c),e.futureLayerStates=[]},addPointToCurrentLine:(e,t)=>{const n=e.layerState.objects.findLast(ece);n&&n.points.push(...t.payload)},undo:e=>{const t=e.pastLayerStates.pop();t&&(e.futureLayerStates.unshift(Ge(e.layerState)),e.futureLayerStates.length>e.maxHistory&&e.futureLayerStates.pop(),e.layerState=t)},redo:e=>{const t=e.futureLayerStates.shift();t&&(e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState=t)},setShouldShowGrid:(e,t)=>{e.shouldShowGrid=t.payload},setIsMovingStage:(e,t)=>{e.isMovingStage=t.payload},setShouldSnapToGrid:(e,t)=>{e.shouldSnapToGrid=t.payload},setShouldAutoSave:(e,t)=>{e.shouldAutoSave=t.payload},setShouldShowIntermediates:(e,t)=>{e.shouldShowIntermediates=t.payload},resetCanvas:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.layerState=Ge(Uh),e.futureLayerStates=[],e.batchIds=[]},canvasResized:(e,t)=>{const{width:n,height:r}=t.payload,i={width:Math.floor(n),height:Math.floor(r)};if(e.stageDimensions=i,!e.layerState.objects.find(Jle)){const o=U0(i.width,i.height,512,512,G0),s=V0(i.width,i.height,0,0,512,512,o),a={width:512,height:512};if(e.stageScale=o,e.stageCoordinates=s,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=a,e.boundingBoxScaleMethod==="auto"){const l=Iu(a);e.scaledBoundingBoxDimensions=l}}},resetCanvasView:(e,t)=>{const{contentRect:n,shouldScaleTo1:r}=t.payload,{stageDimensions:{width:i,height:o}}=e,{x:s,y:a,width:l,height:c}=n;if(l!==0&&c!==0){const u=r?1:U0(i,o,l,c,G0),d=V0(i,o,s,a,l,c,u);e.stageScale=u,e.stageCoordinates=d}else{const u=U0(i,o,512,512,G0),d=V0(i,o,0,0,512,512,u),f={width:512,height:512};if(e.stageScale=u,e.stageCoordinates=d,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=f,e.boundingBoxScaleMethod==="auto"){const h=Iu(f);e.scaledBoundingBoxDimensions=h}}},nextStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex+1,n=e.layerState.stagingArea.images.length-1;e.layerState.stagingArea.selectedImageIndex=t>n?0:t},prevStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex-1,n=e.layerState.stagingArea.images.length-1;e.layerState.stagingArea.selectedImageIndex=t<0?n:t},commitStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const{images:t,selectedImageIndex:n}=e.layerState.stagingArea;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const r=t[n];r&&e.layerState.objects.push({...r}),e.layerState.stagingArea=Ge(Uh).stagingArea,e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0,e.batchIds=[]},fitBoundingBoxToStage:e=>{const{boundingBoxDimensions:t,boundingBoxCoordinates:n,stageDimensions:r,stageScale:i}=e,o=r.width/i,s=r.height/i;if(n.x<0||n.x+t.width>o||n.y<0||n.y+t.height>s){const a={width:B0(el(o,64,512),64),height:B0(el(s,64,512),64)},l={x:Or(o/2-a.width/2,64),y:Or(s/2-a.height/2,64)};if(e.boundingBoxDimensions=a,e.boundingBoxCoordinates=l,e.boundingBoxScaleMethod==="auto"){const c=Iu(a);e.scaledBoundingBoxDimensions=c}}},setBoundingBoxScaleMethod:(e,t)=>{if(e.boundingBoxScaleMethod=t.payload,t.payload==="auto"){const n=Iu(e.boundingBoxDimensions);e.scaledBoundingBoxDimensions=n}},setScaledBoundingBoxDimensions:(e,t)=>{e.scaledBoundingBoxDimensions=t.payload},setShouldShowStagingImage:(e,t)=>{e.shouldShowStagingImage=t.payload},setShouldShowStagingOutline:(e,t)=>{e.shouldShowStagingOutline=t.payload},setShouldShowCanvasDebugInfo:(e,t)=>{e.shouldShowCanvasDebugInfo=t.payload},setShouldRestrictStrokesToBox:(e,t)=>{e.shouldRestrictStrokesToBox=t.payload},setShouldAntialias:(e,t)=>{e.shouldAntialias=t.payload},setShouldCropToBoundingBoxOnSave:(e,t)=>{e.shouldCropToBoundingBoxOnSave=t.payload},setColorPickerColor:(e,t)=>{e.colorPickerColor=t.payload},commitColorPickerColor:e=>{e.brushColor={...e.colorPickerColor,a:e.brushColor.a},e.tool="brush"},setMergedCanvas:(e,t)=>{e.pastLayerStates.push(Ge(e.layerState)),e.futureLayerStates=[],e.layerState.objects=[t.payload]},resetCanvasInteractionState:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMoveBoundingBoxKeyHeld=!1,e.isMoveStageKeyHeld=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1,e.isTransformingBoundingBox=!1},mouseLeftCanvas:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isTransformingBoundingBox=!1}},extraReducers:e=>{e.addCase(d_,(t,n)=>{const r=n.payload.data.batch_status;t.batchIds.includes(r.batch_id)&&r.in_progress===0&&r.pending===0&&(t.batchIds=t.batchIds.filter(i=>i!==r.batch_id))}),e.addCase(Xle,(t,n)=>{const r=n.payload;r&&(t.boundingBoxDimensions.height=Or(t.boundingBoxDimensions.width/r,64),t.scaledBoundingBoxDimensions.height=Or(t.scaledBoundingBoxDimensions.width/r,64))}),e.addMatcher(en.endpoints.clearQueue.matchFulfilled,t=>{t.batchIds=[]}),e.addMatcher(en.endpoints.cancelByBatchIds.matchFulfilled,(t,n)=>{t.batchIds=t.batchIds.filter(r=>!n.meta.arg.originalArgs.batch_ids.includes(r))})}}),{addEraseRect:bVe,addFillRect:_Ve,addImageToStagingArea:nue,addLine:SVe,addPointToCurrentLine:xVe,clearCanvasHistory:wVe,clearMask:CVe,commitColorPickerColor:EVe,commitStagingAreaImage:rue,discardStagedImages:iue,fitBoundingBoxToStage:TVe,mouseLeftCanvas:AVe,nextStagingAreaImage:kVe,prevStagingAreaImage:PVe,redo:IVe,resetCanvas:dT,resetCanvasInteractionState:MVe,resetCanvasView:RVe,setBoundingBoxCoordinates:OVe,setBoundingBoxDimensions:CI,setBoundingBoxPreviewFill:$Ve,setBoundingBoxScaleMethod:NVe,flipBoundingBoxAxes:FVe,setBrushColor:DVe,setBrushSize:LVe,setColorPickerColor:BVe,setCursorPosition:zVe,setInitialCanvasImage:wL,setIsDrawing:jVe,setIsMaskEnabled:VVe,setIsMouseOverBoundingBox:UVe,setIsMoveBoundingBoxKeyHeld:GVe,setIsMoveStageKeyHeld:HVe,setIsMovingBoundingBox:WVe,setIsMovingStage:qVe,setIsTransformingBoundingBox:KVe,setLayer:XVe,setMaskColor:QVe,setMergedCanvas:oue,setShouldAutoSave:YVe,setShouldCropToBoundingBoxOnSave:ZVe,setShouldDarkenOutsideBoundingBox:JVe,setShouldLockBoundingBox:eUe,setShouldPreserveMaskedArea:tUe,setShouldShowBoundingBox:nUe,setShouldShowBrush:rUe,setShouldShowBrushPreview:iUe,setShouldShowCanvasDebugInfo:oUe,setShouldShowCheckboardTransparency:sUe,setShouldShowGrid:aUe,setShouldShowIntermediates:lUe,setShouldShowStagingImage:cUe,setShouldShowStagingOutline:uUe,setShouldSnapToGrid:dUe,setStageCoordinates:fUe,setStageScale:hUe,setTool:pUe,toggleShouldLockBoundingBox:gUe,toggleTool:mUe,undo:yUe,setScaledBoundingBoxDimensions:vUe,setShouldRestrictStrokesToBox:bUe,stagingAreaInitialized:sue,setShouldAntialias:_Ue,canvasResized:SUe,canvasBatchIdAdded:aue,canvasBatchIdsReset:lue}=xL.actions,cue=xL.reducer,uue={isModalOpen:!1,imagesToChange:[]},CL=jt({name:"changeBoardModal",initialState:uue,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToChangeSelected:(e,t)=>{e.imagesToChange=t.payload},changeBoardReset:e=>{e.imagesToChange=[],e.isModalOpen=!1}}}),{isModalOpenChanged:xUe,imagesToChangeSelected:wUe,changeBoardReset:CUe}=CL.actions,due=CL.reducer,fue={imagesToDelete:[],isModalOpen:!1},EL=jt({name:"deleteImageModal",initialState:fue,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToDeleteSelected:(e,t)=>{e.imagesToDelete=t.payload},imageDeletionCanceled:e=>{e.imagesToDelete=[],e.isModalOpen=!1}}}),{isModalOpenChanged:fT,imagesToDeleteSelected:hue,imageDeletionCanceled:EUe}=EL.actions,pue=EL.reducer,hT={maxPrompts:100,combinatorial:!0,prompts:[],parsingError:void 0,isError:!1,isLoading:!1,seedBehaviour:"PER_ITERATION"},gue=hT,TL=jt({name:"dynamicPrompts",initialState:gue,reducers:{maxPromptsChanged:(e,t)=>{e.maxPrompts=t.payload},maxPromptsReset:e=>{e.maxPrompts=hT.maxPrompts},combinatorialToggled:e=>{e.combinatorial=!e.combinatorial},promptsChanged:(e,t)=>{e.prompts=t.payload},parsingErrorChanged:(e,t)=>{e.parsingError=t.payload},isErrorChanged:(e,t)=>{e.isError=t.payload},isLoadingChanged:(e,t)=>{e.isLoading=t.payload},seedBehaviourChanged:(e,t)=>{e.seedBehaviour=t.payload}}}),{maxPromptsChanged:mue,maxPromptsReset:yue,combinatorialToggled:vue,promptsChanged:bue,parsingErrorChanged:_ue,isErrorChanged:EI,isLoadingChanged:Yx,seedBehaviourChanged:TUe}=TL.actions,Sue=TL.reducer,Rn=["general"],Pr=["control","mask","user","other"],xue=100,K0=20,wue=(e,t)=>{const n=new Date(e),r=new Date(t);return n>r?1:n{if(!e)return!1;const n=_g.selectAll(e);if(n.length<=1)return!0;const r=[],i=[];for(let o=0;o=a}else{const o=i[i.length-1];if(!o)return!1;const s=new Date(t.created_at),a=new Date(o.created_at);return s>=a}},Fi=e=>Rn.includes(e.image_category)?Rn:Pr,Ot=jo({selectId:e=>e.image_name,sortComparer:(e,t)=>e.starred&&!t.starred?-1:!e.starred&&t.starred?1:wue(t.created_at,e.created_at)}),_g=Ot.getSelectors(),Vi=e=>`images/?${yp.stringify(e,{arrayFormat:"none"})}`,Qe=Lo.injectEndpoints({endpoints:e=>({listBoards:e.query({query:t=>({url:"boards/",params:t}),providesTags:t=>{const n=[{type:"Board",id:Ir}];return t&&n.push(...t.items.map(({board_id:r})=>({type:"Board",id:r}))),n}}),listAllBoards:e.query({query:()=>({url:"boards/",params:{all:!0}}),providesTags:t=>{const n=[{type:"Board",id:Ir}];return t&&n.push(...t.map(({board_id:r})=>({type:"Board",id:r}))),n}}),listAllImageNamesForBoard:e.query({query:t=>({url:`boards/${t}/image_names`}),providesTags:(t,n,r)=>[{type:"ImageNameList",id:r}],keepUnusedDataFor:0}),getBoardImagesTotal:e.query({query:t=>({url:Vi({board_id:t??"none",categories:Rn,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardImagesTotal",id:r??"none"}],transformResponse:t=>({total:t.total})}),getBoardAssetsTotal:e.query({query:t=>({url:Vi({board_id:t??"none",categories:Pr,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardAssetsTotal",id:r??"none"}],transformResponse:t=>({total:t.total})}),createBoard:e.mutation({query:t=>({url:"boards/",method:"POST",params:{board_name:t}}),invalidatesTags:[{type:"Board",id:Ir}]}),updateBoard:e.mutation({query:({board_id:t,changes:n})=>({url:`boards/${t}`,method:"PATCH",body:n}),invalidatesTags:(t,n,r)=>[{type:"Board",id:r.board_id}]})})}),{useListBoardsQuery:AUe,useListAllBoardsQuery:kUe,useGetBoardImagesTotalQuery:PUe,useGetBoardAssetsTotalQuery:IUe,useCreateBoardMutation:MUe,useUpdateBoardMutation:RUe,useListAllImageNamesForBoardQuery:OUe}=Qe;var AL={},y_={},v_={};Object.defineProperty(v_,"__esModule",{value:!0});v_.createLogMethods=void 0;var Cue=function(){return{debug:console.debug.bind(console),error:console.error.bind(console),fatal:console.error.bind(console),info:console.info.bind(console),trace:console.debug.bind(console),warn:console.warn.bind(console)}};v_.createLogMethods=Cue;var pT={},b_={};Object.defineProperty(b_,"__esModule",{value:!0});b_.boolean=void 0;const Eue=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return e.valueOf()===1;case"[object Boolean]":return e.valueOf();default:return!1}};b_.boolean=Eue;var __={};Object.defineProperty(__,"__esModule",{value:!0});__.isBooleanable=void 0;const Tue=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};__.isBooleanable=Tue;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isBooleanable=e.boolean=void 0;const t=b_;Object.defineProperty(e,"boolean",{enumerable:!0,get:function(){return t.boolean}});const n=__;Object.defineProperty(e,"isBooleanable",{enumerable:!0,get:function(){return n.isBooleanable}})})(pT);var TI=Object.prototype.toString,kL=function(t){var n=TI.call(t),r=n==="[object Arguments]";return r||(r=n!=="[object Array]"&&t!==null&&typeof t=="object"&&typeof t.length=="number"&&t.length>=0&&TI.call(t.callee)==="[object Function]"),r},Zx,AI;function Aue(){if(AI)return Zx;AI=1;var e;if(!Object.keys){var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=kL,i=Object.prototype.propertyIsEnumerable,o=!i.call({toString:null},"toString"),s=i.call(function(){},"prototype"),a=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],l=function(f){var h=f.constructor;return h&&h.prototype===f},c={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},u=function(){if(typeof window>"u")return!1;for(var f in window)try{if(!c["$"+f]&&t.call(window,f)&&window[f]!==null&&typeof window[f]=="object")try{l(window[f])}catch{return!0}}catch{return!0}return!1}(),d=function(f){if(typeof window>"u"||!u)return l(f);try{return l(f)}catch{return!1}};e=function(h){var p=h!==null&&typeof h=="object",m=n.call(h)==="[object Function]",_=r(h),v=p&&n.call(h)==="[object String]",y=[];if(!p&&!m&&!_)throw new TypeError("Object.keys called on a non-object");var g=s&&m;if(v&&h.length>0&&!t.call(h,0))for(var b=0;b0)for(var S=0;S"u"||!On?qe:On(Uint8Array),Nc={"%AggregateError%":typeof AggregateError>"u"?qe:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?qe:ArrayBuffer,"%ArrayIteratorPrototype%":Ou&&On?On([][Symbol.iterator]()):qe,"%AsyncFromSyncIteratorPrototype%":qe,"%AsyncFunction%":qu,"%AsyncGenerator%":qu,"%AsyncGeneratorFunction%":qu,"%AsyncIteratorPrototype%":qu,"%Atomics%":typeof Atomics>"u"?qe:Atomics,"%BigInt%":typeof BigInt>"u"?qe:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?qe:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?qe:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?qe:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?qe:Float32Array,"%Float64Array%":typeof Float64Array>"u"?qe:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?qe:FinalizationRegistry,"%Function%":IL,"%GeneratorFunction%":qu,"%Int8Array%":typeof Int8Array>"u"?qe:Int8Array,"%Int16Array%":typeof Int16Array>"u"?qe:Int16Array,"%Int32Array%":typeof Int32Array>"u"?qe:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Ou&&On?On(On([][Symbol.iterator]())):qe,"%JSON%":typeof JSON=="object"?JSON:qe,"%Map%":typeof Map>"u"?qe:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Ou||!On?qe:On(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?qe:Promise,"%Proxy%":typeof Proxy>"u"?qe:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?qe:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?qe:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Ou||!On?qe:On(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?qe:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Ou&&On?On(""[Symbol.iterator]()):qe,"%Symbol%":Ou?Symbol:qe,"%SyntaxError%":ff,"%ThrowTypeError%":Kue,"%TypedArray%":Que,"%TypeError%":$d,"%Uint8Array%":typeof Uint8Array>"u"?qe:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?qe:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?qe:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?qe:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?qe:WeakMap,"%WeakRef%":typeof WeakRef>"u"?qe:WeakRef,"%WeakSet%":typeof WeakSet>"u"?qe:WeakSet};if(On)try{null.error}catch(e){var Yue=On(On(e));Nc["%Error.prototype%"]=Yue}var Zue=function e(t){var n;if(t==="%AsyncFunction%")n=Jx("async function () {}");else if(t==="%GeneratorFunction%")n=Jx("function* () {}");else if(t==="%AsyncGeneratorFunction%")n=Jx("async function* () {}");else if(t==="%AsyncGenerator%"){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if(t==="%AsyncIteratorPrototype%"){var i=e("%AsyncGenerator%");i&&On&&(n=On(i.prototype))}return Nc[t]=n,n},OI={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},ym=PL,E1=que,Jue=ym.call(Function.call,Array.prototype.concat),ede=ym.call(Function.apply,Array.prototype.splice),$I=ym.call(Function.call,String.prototype.replace),T1=ym.call(Function.call,String.prototype.slice),tde=ym.call(Function.call,RegExp.prototype.exec),nde=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,rde=/\\(\\)?/g,ide=function(t){var n=T1(t,0,1),r=T1(t,-1);if(n==="%"&&r!=="%")throw new ff("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&n!=="%")throw new ff("invalid intrinsic syntax, expected opening `%`");var i=[];return $I(t,nde,function(o,s,a,l){i[i.length]=a?$I(l,rde,"$1"):s||o}),i},ode=function(t,n){var r=t,i;if(E1(OI,r)&&(i=OI[r],r="%"+i[0]+"%"),E1(Nc,r)){var o=Nc[r];if(o===qu&&(o=Zue(r)),typeof o>"u"&&!n)throw new $d("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:o}}throw new ff("intrinsic "+t+" does not exist!")},sde=function(t,n){if(typeof t!="string"||t.length===0)throw new $d("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof n!="boolean")throw new $d('"allowMissing" argument must be a boolean');if(tde(/^%?[^%]*%?$/,t)===null)throw new ff("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=ide(t),i=r.length>0?r[0]:"",o=ode("%"+i+"%",n),s=o.name,a=o.value,l=!1,c=o.alias;c&&(i=c[0],ede(r,Jue([0,1],c)));for(var u=1,d=!0;u=r.length){var m=$c(a,f);d=!!m,d&&"get"in m&&!("originalValue"in m.get)?a=m.get:a=a[f]}else d=E1(a,f),a=a[f];d&&!l&&(Nc[s]=a)}}return a},ade=sde,W5=ade("%Object.defineProperty%",!0),q5=function(){if(W5)try{return W5({},"a",{value:1}),!0}catch{return!1}return!1};q5.hasArrayLengthDefineBug=function(){if(!q5())return null;try{return W5([],"length",{value:1}).length!==1}catch{return!0}};var lde=q5,cde=Iue,ude=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",dde=Object.prototype.toString,fde=Array.prototype.concat,ML=Object.defineProperty,hde=function(e){return typeof e=="function"&&dde.call(e)==="[object Function]"},pde=lde(),RL=ML&&pde,gde=function(e,t,n,r){if(t in e){if(r===!0){if(e[t]===n)return}else if(!hde(r)||!r())return}RL?ML(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n},OL=function(e,t){var n=arguments.length>2?arguments[2]:{},r=cde(t);ude&&(r=fde.call(r,Object.getOwnPropertySymbols(t)));for(var i=0;i":return t>e;case":<":return t=":return t>=e;case":<=":return t<=e;default:throw new Error("Unimplemented comparison operator: ".concat(n))}};C_.testComparisonRange=Dde;var E_={};Object.defineProperty(E_,"__esModule",{value:!0});E_.testRange=void 0;var Lde=function(e,t){return typeof e=="number"?!(et.max||e===t.max&&!t.maxInclusive):!1};E_.testRange=Lde;(function(e){var t=He&&He.__assign||function(){return t=Object.assign||function(u){for(var d,f=1,h=arguments.length;f0?{path:l.path,query:new RegExp("("+l.keywords.map(function(c){return(0,jde.escapeRegexString)(c.trim())}).join("|")+")")}:{path:l.path}})};T_.highlight=Ude;var A_={},zL={exports:{}};(function(e){(function(t,n){e.exports?e.exports=n():t.nearley=n()})(He,function(){function t(c,u,d){return this.id=++t.highestId,this.name=c,this.symbols=u,this.postprocess=d,this}t.highestId=0,t.prototype.toString=function(c){var u=typeof c>"u"?this.symbols.map(l).join(" "):this.symbols.slice(0,c).map(l).join(" ")+" ● "+this.symbols.slice(c).map(l).join(" ");return this.name+" → "+u};function n(c,u,d,f){this.rule=c,this.dot=u,this.reference=d,this.data=[],this.wantedBy=f,this.isComplete=this.dot===c.symbols.length}n.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},n.prototype.nextState=function(c){var u=new n(this.rule,this.dot+1,this.reference,this.wantedBy);return u.left=this,u.right=c,u.isComplete&&(u.data=u.build(),u.right=void 0),u},n.prototype.build=function(){var c=[],u=this;do c.push(u.right.data),u=u.left;while(u.left);return c.reverse(),c},n.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,s.fail))};function r(c,u){this.grammar=c,this.index=u,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(c){for(var u=this.states,d=this.wants,f=this.completed,h=0;h0&&u.push(" ^ "+f+" more lines identical to this"),f=0,u.push(" "+m)),d=m}},s.prototype.getSymbolDisplay=function(c){return a(c)},s.prototype.buildFirstStateStack=function(c,u){if(u.indexOf(c)!==-1)return null;if(c.wantedBy.length===0)return[c];var d=c.wantedBy[0],f=[c].concat(u),h=this.buildFirstStateStack(d,f);return h===null?null:[c].concat(h)},s.prototype.save=function(){var c=this.table[this.current];return c.lexerState=this.lexerState,c},s.prototype.restore=function(c){var u=c.index;this.current=u,this.table[u]=c,this.table.splice(u+1),this.lexerState=c.lexerState,this.results=this.finish()},s.prototype.rewind=function(c){if(!this.options.keepHistory)throw new Error("set option `keepHistory` to enable rewinding");this.restore(this.table[c])},s.prototype.finish=function(){var c=[],u=this.grammar.start,d=this.table[this.table.length-1];return d.states.forEach(function(f){f.rule.name===u&&f.dot===f.rule.symbols.length&&f.reference===0&&f.data!==s.fail&&c.push(f)}),c.map(function(f){return f.data})};function a(c){var u=typeof c;if(u==="string")return c;if(u==="object"){if(c.literal)return JSON.stringify(c.literal);if(c instanceof RegExp)return"character matching "+c;if(c.type)return c.type+" token";if(c.test)return"token matching "+String(c.test);throw new Error("Unknown symbol type: "+c)}}function l(c){var u=typeof c;if(u==="string")return c;if(u==="object"){if(c.literal)return JSON.stringify(c.literal);if(c instanceof RegExp)return c.toString();if(c.type)return"%"+c.type;if(c.test)return"<"+String(c.test)+">";throw new Error("Unknown symbol type: "+c)}}return{Parser:s,Grammar:i,Rule:t}})})(zL);var Gde=zL.exports,tu={},jL={},Fl={};Fl.__esModule=void 0;Fl.__esModule=!0;var Hde=typeof Object.setPrototypeOf=="function",Wde=typeof Object.getPrototypeOf=="function",qde=typeof Object.defineProperty=="function",Kde=typeof Object.create=="function",Xde=typeof Object.prototype.hasOwnProperty=="function",Qde=function(t,n){Hde?Object.setPrototypeOf(t,n):t.__proto__=n};Fl.setPrototypeOf=Qde;var Yde=function(t){return Wde?Object.getPrototypeOf(t):t.__proto__||t.prototype};Fl.getPrototypeOf=Yde;var NI=!1,Zde=function e(t,n,r){if(qde&&!NI)try{Object.defineProperty(t,n,r)}catch{NI=!0,e(t,n,r)}else t[n]=r.value};Fl.defineProperty=Zde;var VL=function(t,n){return Xde?t.hasOwnProperty(t,n):t[n]===void 0};Fl.hasOwnProperty=VL;var Jde=function(t,n){if(Kde)return Object.create(t,n);var r=function(){};r.prototype=t;var i=new r;if(typeof n>"u")return i;if(typeof n=="null")throw new Error("PropertyDescriptors must not be null.");if(typeof n=="object")for(var o in n)VL(n,o)&&(i[o]=n[o].value);return i};Fl.objectCreate=Jde;(function(e){e.__esModule=void 0,e.__esModule=!0;var t=Fl,n=t.setPrototypeOf,r=t.getPrototypeOf,i=t.defineProperty,o=t.objectCreate,s=new Error().toString()==="[object Error]",a="";function l(c){var u=this.constructor,d=u.name||function(){var _=u.toString().match(/^function\s*([^\s(]+)/);return _===null?a||"Error":_[1]}(),f=d==="Error",h=f?a:d,p=Error.apply(this,arguments);if(n(p,r(this)),!(p instanceof u)||!(p instanceof l)){var p=this;Error.apply(this,arguments),i(p,"message",{configurable:!0,enumerable:!1,value:c,writable:!0})}if(i(p,"name",{configurable:!0,enumerable:!1,value:h,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(p,f?l:u),p.stack===void 0){var m=new Error(c);m.name=p.name,p.stack=m.stack}return s&&i(p,"toString",{configurable:!0,enumerable:!1,value:function(){return(this.name||"Error")+(typeof this.message>"u"?"":": "+this.message)},writable:!0}),p}a=l.name||"ExtendableError",l.prototype=o(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),e.ExtendableError=l,e.default=e.ExtendableError})(jL);var UL=He&&He.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},e(t,n)};return function(t,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(tu,"__esModule",{value:!0});tu.SyntaxError=tu.LiqeError=void 0;var efe=jL,GL=function(e){UL(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(efe.ExtendableError);tu.LiqeError=GL;var tfe=function(e){UL(t,e);function t(n,r,i,o){var s=e.call(this,n)||this;return s.message=n,s.offset=r,s.line=i,s.column=o,s}return t}(GL);tu.SyntaxError=tfe;var mT={},A1=He&&He.__assign||function(){return A1=Object.assign||function(e){for(var t,n=1,r=arguments.length;n"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$2"]},{name:"comparison_operator$subexpression$1$string$3",symbols:[{literal:":"},{literal:"<"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$3"]},{name:"comparison_operator$subexpression$1$string$4",symbols:[{literal:":"},{literal:">"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$4"]},{name:"comparison_operator$subexpression$1$string$5",symbols:[{literal:":"},{literal:"<"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$5"]},{name:"comparison_operator",symbols:["comparison_operator$subexpression$1"],postprocess:function(e,t){return{location:{start:t,end:t+e[0][0].length},type:"ComparisonOperator",operator:e[0][0]}}},{name:"regex",symbols:["regex_body","regex_flags"],postprocess:function(e){return e.join("")}},{name:"regex_body$ebnf$1",symbols:[]},{name:"regex_body$ebnf$1",symbols:["regex_body$ebnf$1","regex_body_char"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_body",symbols:[{literal:"/"},"regex_body$ebnf$1",{literal:"/"}],postprocess:function(e){return"/"+e[1].join("")+"/"}},{name:"regex_body_char",symbols:[/[^\\]/],postprocess:Os},{name:"regex_body_char",symbols:[{literal:"\\"},/[^\\]/],postprocess:function(e){return"\\"+e[1]}},{name:"regex_flags",symbols:[]},{name:"regex_flags$ebnf$1",symbols:[/[gmiyusd]/]},{name:"regex_flags$ebnf$1",symbols:["regex_flags$ebnf$1",/[gmiyusd]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_flags",symbols:["regex_flags$ebnf$1"],postprocess:function(e){return e[0].join("")}},{name:"unquoted_value$ebnf$1",symbols:[]},{name:"unquoted_value$ebnf$1",symbols:["unquoted_value$ebnf$1",/[a-zA-Z\.\-_*@#$]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"unquoted_value",symbols:[/[a-zA-Z_*@#$]/,"unquoted_value$ebnf$1"],postprocess:function(e){return e[0]+e[1].join("")}}],ParserStart:"main"};mT.default=nfe;var HL={},k_={},_m={};Object.defineProperty(_m,"__esModule",{value:!0});_m.isSafePath=void 0;var rfe=/^(\.(?:[_a-zA-Z][a-zA-Z\d_]*|\0|[1-9]\d*))+$/u,ife=function(e){return rfe.test(e)};_m.isSafePath=ife;Object.defineProperty(k_,"__esModule",{value:!0});k_.createGetValueFunctionBody=void 0;var ofe=_m,sfe=function(e){if(!(0,ofe.isSafePath)(e))throw new Error("Unsafe path.");var t="return subject"+e;return t.replace(/(\.(\d+))/g,".[$2]").replace(/\./g,"?.")};k_.createGetValueFunctionBody=sfe;(function(e){var t=He&&He.__assign||function(){return t=Object.assign||function(o){for(var s,a=1,l=arguments.length;a\d+) col (?\d+)/,ffe=function(e){if(e.trim()==="")return{location:{end:0,start:0},type:"EmptyExpression"};var t=new qL.default.Parser(ufe),n;try{n=t.feed(e).results}catch(o){if(typeof(o==null?void 0:o.message)=="string"&&typeof(o==null?void 0:o.offset)=="number"){var r=o.message.match(dfe);throw r?new afe.SyntaxError("Syntax error at line ".concat(r.groups.line," column ").concat(r.groups.column),o.offset,Number(r.groups.line),Number(r.groups.column)):o}throw o}if(n.length===0)throw new Error("Found no parsings.");if(n.length>1)throw new Error("Ambiguous results.");var i=(0,cfe.hydrateAst)(n[0]);return i};A_.parse=ffe;var P_={};Object.defineProperty(P_,"__esModule",{value:!0});P_.test=void 0;var hfe=vm,pfe=function(e,t){return(0,hfe.filter)(e,[t]).length===1};P_.test=pfe;var KL={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.serialize=void 0;var t=function(o,s){return s==="double"?'"'.concat(o,'"'):s==="single"?"'".concat(o,"'"):o},n=function(o){if(o.type==="LiteralExpression")return o.quoted&&typeof o.value=="string"?t(o.value,o.quotes):String(o.value);if(o.type==="RegexExpression")return String(o.value);if(o.type==="RangeExpression"){var s=o.range,a=s.min,l=s.max,c=s.minInclusive,u=s.maxInclusive;return"".concat(c?"[":"{").concat(a," TO ").concat(l).concat(u?"]":"}")}if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")},r=function(o){if(o.type!=="Tag")throw new Error("Expected a tag expression.");var s=o.field,a=o.expression,l=o.operator;if(s.type==="ImplicitField")return n(a);var c=s.quoted?t(s.name,s.quotes):s.name,u=" ".repeat(a.location.start-l.location.end);return c+l.operator+u+n(a)},i=function(o){if(o.type==="ParenthesizedExpression"){if(!("location"in o.expression))throw new Error("Expected location in expression.");if(!o.location.end)throw new Error("Expected location end.");var s=" ".repeat(o.expression.location.start-(o.location.start+1)),a=" ".repeat(o.location.end-o.expression.location.end-1);return"(".concat(s).concat((0,e.serialize)(o.expression)).concat(a,")")}if(o.type==="Tag")return r(o);if(o.type==="LogicalExpression"){var l="";return o.operator.type==="BooleanOperator"?(l+=" ".repeat(o.operator.location.start-o.left.location.end),l+=o.operator.operator,l+=" ".repeat(o.right.location.start-o.operator.location.end)):l=" ".repeat(o.right.location.start-o.left.location.end),"".concat((0,e.serialize)(o.left)).concat(l).concat((0,e.serialize)(o.right))}if(o.type==="UnaryOperator")return(o.operator==="NOT"?"NOT ":o.operator)+(0,e.serialize)(o.operand);if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")};e.serialize=i})(KL);var I_={};Object.defineProperty(I_,"__esModule",{value:!0});I_.isSafeUnquotedExpression=void 0;var gfe=function(e){return/^[#$*@A-Z_a-z][#$*.@A-Z_a-z-]*$/.test(e)};I_.isSafeUnquotedExpression=gfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isSafeUnquotedExpression=e.serialize=e.SyntaxError=e.LiqeError=e.test=e.parse=e.highlight=e.filter=void 0;var t=vm;Object.defineProperty(e,"filter",{enumerable:!0,get:function(){return t.filter}});var n=T_;Object.defineProperty(e,"highlight",{enumerable:!0,get:function(){return n.highlight}});var r=A_;Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return r.parse}});var i=P_;Object.defineProperty(e,"test",{enumerable:!0,get:function(){return i.test}});var o=tu;Object.defineProperty(e,"LiqeError",{enumerable:!0,get:function(){return o.LiqeError}}),Object.defineProperty(e,"SyntaxError",{enumerable:!0,get:function(){return o.SyntaxError}});var s=KL;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return s.serialize}});var a=I_;Object.defineProperty(e,"isSafeUnquotedExpression",{enumerable:!0,get:function(){return a.isSafeUnquotedExpression}})})(BL);var Sm={},XL={},nu={};Object.defineProperty(nu,"__esModule",{value:!0});nu.ROARR_LOG_FORMAT_VERSION=nu.ROARR_VERSION=void 0;nu.ROARR_VERSION="5.0.0";nu.ROARR_LOG_FORMAT_VERSION="2.0.0";var Ff={};Object.defineProperty(Ff,"__esModule",{value:!0});Ff.logLevels=void 0;Ff.logLevels={debug:20,error:50,fatal:60,info:30,trace:10,warn:40};var QL={},M_={};Object.defineProperty(M_,"__esModule",{value:!0});M_.hasOwnProperty=void 0;const mfe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);M_.hasOwnProperty=mfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasOwnProperty=void 0;var t=M_;Object.defineProperty(e,"hasOwnProperty",{enumerable:!0,get:function(){return t.hasOwnProperty}})})(QL);var R_={};Object.defineProperty(R_,"__esModule",{value:!0});R_.isBrowser=void 0;const yfe=()=>typeof window<"u";R_.isBrowser=yfe;var O_={};Object.defineProperty(O_,"__esModule",{value:!0});O_.isTruthy=void 0;const vfe=e=>["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());O_.isTruthy=vfe;var YL={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createMockLogger=void 0;const t=Ff,n=(i,o)=>(s,a,l,c,u,d,f,h,p,m)=>{i.child({logLevel:o})(s,a,l,c,u,d,f,h,p,m)},r=(i,o)=>{const s=()=>{};return s.adopt=async a=>a(),s.child=()=>(0,e.createMockLogger)(i,o),s.getContext=()=>({}),s.debug=n(s,t.logLevels.debug),s.debugOnce=n(s,t.logLevels.debug),s.error=n(s,t.logLevels.error),s.errorOnce=n(s,t.logLevels.error),s.fatal=n(s,t.logLevels.fatal),s.fatalOnce=n(s,t.logLevels.fatal),s.info=n(s,t.logLevels.info),s.infoOnce=n(s,t.logLevels.info),s.trace=n(s,t.logLevels.trace),s.traceOnce=n(s,t.logLevels.trace),s.warn=n(s,t.logLevels.warn),s.warnOnce=n(s,t.logLevels.warn),s};e.createMockLogger=r})(YL);var ZL={},$_={},N_={};Object.defineProperty(N_,"__esModule",{value:!0});N_.tokenize=void 0;const bfe=/(?:%(?([+0-]|-\+))?(?\d+)?(?\d+\$)?(?\.\d+)?(?[%BCESb-iosux]))|(\\%)/g,_fe=e=>{let t;const n=[];let r=0,i=0,o=null;for(;(t=bfe.exec(e))!==null;){t.index>i&&(o={literal:e.slice(i,t.index),type:"literal"},n.push(o));const s=t[0];i=t.index+s.length,s==="\\%"||s==="%%"?o&&o.type==="literal"?o.literal+="%":(o={literal:"%",type:"literal"},n.push(o)):t.groups&&(o={conversion:t.groups.conversion,flag:t.groups.flag||null,placeholder:s,position:t.groups.position?Number.parseInt(t.groups.position,10)-1:r++,precision:t.groups.precision?Number.parseInt(t.groups.precision.slice(1),10):null,type:"placeholder",width:t.groups.width?Number.parseInt(t.groups.width,10):null},n.push(o))}return i<=e.length-1&&(o&&o.type==="literal"?o.literal+=e.slice(i):n.push({literal:e.slice(i),type:"literal"})),n};N_.tokenize=_fe;Object.defineProperty($_,"__esModule",{value:!0});$_.createPrintf=void 0;const FI=pT,Sfe=N_,xfe=(e,t)=>t.placeholder,wfe=e=>{var t;const n=(o,s,a)=>a==="-"?o.padEnd(s," "):a==="-+"?((Number(o)>=0?"+":"")+o).padEnd(s," "):a==="+"?((Number(o)>=0?"+":"")+o).padStart(s," "):a==="0"?o.padStart(s,"0"):o.padStart(s," "),r=(t=e==null?void 0:e.formatUnboundExpression)!==null&&t!==void 0?t:xfe,i={};return(o,...s)=>{let a=i[o];a||(a=i[o]=Sfe.tokenize(o));let l="";for(const c of a)if(c.type==="literal")l+=c.literal;else{let u=s[c.position];if(u===void 0)l+=r(o,c,s);else if(c.conversion==="b")l+=FI.boolean(u)?"true":"false";else if(c.conversion==="B")l+=FI.boolean(u)?"TRUE":"FALSE";else if(c.conversion==="c")l+=u;else if(c.conversion==="C")l+=String(u).toUpperCase();else if(c.conversion==="i"||c.conversion==="d")u=String(Math.trunc(u)),c.width!==null&&(u=n(u,c.width,c.flag)),l+=u;else if(c.conversion==="e")l+=Number(u).toExponential();else if(c.conversion==="E")l+=Number(u).toExponential().toUpperCase();else if(c.conversion==="f")c.precision!==null&&(u=Number(u).toFixed(c.precision)),c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else if(c.conversion==="o")l+=(Number.parseInt(String(u),10)>>>0).toString(8);else if(c.conversion==="s")c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else if(c.conversion==="S")c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=String(u).toUpperCase();else if(c.conversion==="u")l+=Number.parseInt(String(u),10)>>>0;else if(c.conversion==="x")u=(Number.parseInt(String(u),10)>>>0).toString(16),c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else throw new Error("Unknown format specifier.")}return l}};$_.createPrintf=wfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.printf=e.createPrintf=void 0;const t=$_;Object.defineProperty(e,"createPrintf",{enumerable:!0,get:function(){return t.createPrintf}}),e.printf=t.createPrintf()})(ZL);var K5={exports:{}};(function(e,t){const{hasOwnProperty:n}=Object.prototype,r=_();r.configure=_,r.stringify=r,r.default=r,t.stringify=r,t.configure=_,e.exports=r;const i=/[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/;function o(v){return v.length<5e3&&!i.test(v)?`"${v}"`:JSON.stringify(v)}function s(v){if(v.length>200)return v.sort();for(let y=1;yg;)v[b]=v[b-1],b--;v[b]=g}return v}const a=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function l(v){return a.call(v)!==void 0&&v.length!==0}function c(v,y,g){v.length= 1`)}return g===void 0?1/0:g}function h(v){return v===1?"1 item":`${v} items`}function p(v){const y=new Set;for(const g of v)(typeof g=="string"||typeof g=="number")&&y.add(String(g));return y}function m(v){if(n.call(v,"strict")){const y=v.strict;if(typeof y!="boolean")throw new TypeError('The "strict" argument must be of type boolean');if(y)return g=>{let b=`Object can not safely be stringified. Received type ${typeof g}`;throw typeof g!="function"&&(b+=` (${g.toString()})`),new Error(b)}}}function _(v){v={...v};const y=m(v);y&&(v.bigint===void 0&&(v.bigint=!1),"circularValue"in v||(v.circularValue=Error));const g=u(v),b=d(v,"bigint"),S=d(v,"deterministic"),w=f(v,"maximumDepth"),C=f(v,"maximumBreadth");function x(M,E,P,O,F,$){let D=E[M];switch(typeof D=="object"&&D!==null&&typeof D.toJSON=="function"&&(D=D.toJSON(M)),D=O.call(E,M,D),typeof D){case"string":return o(D);case"object":{if(D===null)return"null";if(P.indexOf(D)!==-1)return g;let N="",z=",";const V=$;if(Array.isArray(D)){if(D.length===0)return"[]";if(wC){const be=D.length-C-1;N+=`${z}"... ${h(be)} not stringified"`}return F!==""&&(N+=` +${V}`),P.pop(),`[${N}]`}let H=Object.keys(D);const X=H.length;if(X===0)return"{}";if(wC){const q=X-C;N+=`${ee}"...":${te}"${h(q)} not stringified"`,ee=z}return F!==""&&ee.length>1&&(N=` +${$}${N} +${V}`),P.pop(),`{${N}}`}case"number":return isFinite(D)?String(D):y?y(D):"null";case"boolean":return D===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(D);default:return y?y(D):void 0}}function k(M,E,P,O,F,$){switch(typeof E=="object"&&E!==null&&typeof E.toJSON=="function"&&(E=E.toJSON(M)),typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(P.indexOf(E)!==-1)return g;const D=$;let N="",z=",";if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const j=E.length-C-1;N+=`${z}"... ${h(j)} not stringified"`}return F!==""&&(N+=` +${D}`),P.pop(),`[${N}]`}P.push(E);let V="";F!==""&&($+=F,z=`, +${$}`,V=" ");let H="";for(const X of O){const te=k(X,E[X],P,O,F,$);te!==void 0&&(N+=`${H}${o(X)}:${V}${te}`,H=z)}return F!==""&&H.length>1&&(N=` +${$}${N} +${D}`),P.pop(),`{${N}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function A(M,E,P,O,F){switch(typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(typeof E.toJSON=="function"){if(E=E.toJSON(M),typeof E!="object")return A(M,E,P,O,F);if(E===null)return"null"}if(P.indexOf(E)!==-1)return g;const $=F;if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const oe=E.length-C-1;te+=`${ee}"... ${h(oe)} not stringified"`}return te+=` +${$}`,P.pop(),`[${te}]`}let D=Object.keys(E);const N=D.length;if(N===0)return"{}";if(wC){const te=N-C;V+=`${H}"...": "${h(te)} not stringified"`,H=z}return H!==""&&(V=` +${F}${V} +${$}`),P.pop(),`{${V}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function R(M,E,P){switch(typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(typeof E.toJSON=="function"){if(E=E.toJSON(M),typeof E!="object")return R(M,E,P);if(E===null)return"null"}if(P.indexOf(E)!==-1)return g;let O="";if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const X=E.length-C-1;O+=`,"... ${h(X)} not stringified"`}return P.pop(),`[${O}]`}let F=Object.keys(E);const $=F.length;if($===0)return"{}";if(wC){const z=$-C;O+=`${D}"...":"${h(z)} not stringified"`}return P.pop(),`{${O}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function L(M,E,P){if(arguments.length>1){let O="";if(typeof P=="number"?O=" ".repeat(Math.min(P,10)):typeof P=="string"&&(O=P.slice(0,10)),E!=null){if(typeof E=="function")return x("",{"":M},[],E,O,"");if(Array.isArray(E))return k("",M,[],p(E),O,"")}if(O.length!==0)return A("",M,[],O,"")}return R("",M,[])}return L}})(K5,K5.exports);var JL=K5.exports;(function(e){var t=He&&He.__importDefault||function(b){return b&&b.__esModule?b:{default:b}};Object.defineProperty(e,"__esModule",{value:!0}),e.createLogger=void 0;const n=nu,r=Ff,i=QL,o=R_,s=O_,a=YL,l=ZL,c=t(JL);let u=!1;const d=()=>globalThis.ROARR,f=()=>({messageContext:{},transforms:[]}),h=()=>{const b=d().asyncLocalStorage;if(!b)throw new Error("AsyncLocalContext is unavailable.");const S=b.getStore();return S||f()},p=()=>!!d().asyncLocalStorage,m=()=>{if(p()){const b=h();return(0,i.hasOwnProperty)(b,"sequenceRoot")&&(0,i.hasOwnProperty)(b,"sequence")&&typeof b.sequence=="number"?String(b.sequenceRoot)+"."+String(b.sequence++):String(d().sequence++)}return String(d().sequence++)},_=(b,S)=>(w,C,x,k,A,R,L,M,E,P)=>{b.child({logLevel:S})(w,C,x,k,A,R,L,M,E,P)},v=1e3,y=(b,S)=>(w,C,x,k,A,R,L,M,E,P)=>{const O=(0,c.default)({a:w,b:C,c:x,d:k,e:A,f:R,g:L,h:M,i:E,j:P,logLevel:S});if(!O)throw new Error("Expected key to be a string");const F=d().onceLog;F.has(O)||(F.add(O),F.size>v&&F.clear(),b.child({logLevel:S})(w,C,x,k,A,R,L,M,E,P))},g=(b,S={},w=[])=>{var C;if(!(0,o.isBrowser)()&&typeof process<"u"&&!(0,s.isTruthy)((C={}.ROARR_LOG)!==null&&C!==void 0?C:""))return(0,a.createMockLogger)(b,S);const x=(k,A,R,L,M,E,P,O,F,$)=>{const D=Date.now(),N=m();let z;p()?z=h():z=f();let V,H;if(typeof k=="string"?V={...z.messageContext,...S}:V={...z.messageContext,...S,...k},typeof k=="string"&&A===void 0)H=k;else if(typeof k=="string"){if(!k.includes("%"))throw new Error("When a string parameter is followed by other arguments, then it is assumed that you are attempting to format a message using printf syntax. You either forgot to add printf bindings or if you meant to add context to the log message, pass them in an object as the first parameter.");H=(0,l.printf)(k,A,R,L,M,E,P,O,F,$)}else{let te=A;if(typeof A!="string")if(A===void 0)te="";else throw new TypeError("Message must be a string. Received "+typeof A+".");H=(0,l.printf)(te,R,L,M,E,P,O,F,$)}let X={context:V,message:H,sequence:N,time:D,version:n.ROARR_LOG_FORMAT_VERSION};for(const te of[...z.transforms,...w])if(X=te(X),typeof X!="object"||X===null)throw new Error("Message transform function must return a message object.");b(X)};return x.child=k=>{let A;return p()?A=h():A=f(),typeof k=="function"?(0,e.createLogger)(b,{...A.messageContext,...S,...k},[k,...w]):(0,e.createLogger)(b,{...A.messageContext,...S,...k},w)},x.getContext=()=>{let k;return p()?k=h():k=f(),{...k.messageContext,...S}},x.adopt=async(k,A)=>{if(!p())return u===!1&&(u=!0,b({context:{logLevel:r.logLevels.warn,package:"roarr"},message:"async_hooks are unavailable; Roarr.adopt will not function as expected",sequence:m(),time:Date.now(),version:n.ROARR_LOG_FORMAT_VERSION})),k();const R=h();let L;(0,i.hasOwnProperty)(R,"sequenceRoot")&&(0,i.hasOwnProperty)(R,"sequence")&&typeof R.sequence=="number"?L=R.sequenceRoot+"."+String(R.sequence++):L=String(d().sequence++);let M={...R.messageContext};const E=[...R.transforms];typeof A=="function"?E.push(A):M={...M,...A};const P=d().asyncLocalStorage;if(!P)throw new Error("Async local context unavailable.");return P.run({messageContext:M,sequence:0,sequenceRoot:L,transforms:E},()=>k())},x.debug=_(x,r.logLevels.debug),x.debugOnce=y(x,r.logLevels.debug),x.error=_(x,r.logLevels.error),x.errorOnce=y(x,r.logLevels.error),x.fatal=_(x,r.logLevels.fatal),x.fatalOnce=y(x,r.logLevels.fatal),x.info=_(x,r.logLevels.info),x.infoOnce=y(x,r.logLevels.info),x.trace=_(x,r.logLevels.trace),x.traceOnce=y(x,r.logLevels.trace),x.warn=_(x,r.logLevels.warn),x.warnOnce=y(x,r.logLevels.warn),x};e.createLogger=g})(XL);var F_={},Cfe=function(t,n){for(var r=t.split("."),i=n.split("."),o=0;o<3;o++){var s=Number(r[o]),a=Number(i[o]);if(s>a)return 1;if(a>s)return-1;if(!isNaN(s)&&isNaN(a))return 1;if(isNaN(s)&&!isNaN(a))return-1}return 0},Efe=He&&He.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(F_,"__esModule",{value:!0});F_.createRoarrInitialGlobalStateBrowser=void 0;const DI=nu,LI=Efe(Cfe),Tfe=e=>{const t=(e.versions||[]).concat();return t.length>1&&t.sort(LI.default),t.includes(DI.ROARR_VERSION)||t.push(DI.ROARR_VERSION),t.sort(LI.default),{sequence:0,...e,versions:t}};F_.createRoarrInitialGlobalStateBrowser=Tfe;var D_={};Object.defineProperty(D_,"__esModule",{value:!0});D_.stringify=void 0;const Afe=JL,kfe=(0,Afe.configure)({deterministic:!1,maximumBreadth:10,maximumDepth:10,strict:!1}),Pfe=e=>{var t;try{return(t=kfe(e))!==null&&t!==void 0?t:""}catch(n){throw console.error("[roarr] could not serialize value",e),n}};D_.stringify=Pfe;var L_={};Object.defineProperty(L_,"__esModule",{value:!0});L_.getLogLevelName=void 0;const Ife=e=>e<=10?"trace":e<=20?"debug":e<=30?"info":e<=40?"warn":e<=50?"error":"fatal";L_.getLogLevelName=Ife;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.getLogLevelName=e.logLevels=e.Roarr=e.ROARR=void 0;const t=XL,n=F_,r=D_,i=(0,n.createRoarrInitialGlobalStateBrowser)(globalThis.ROARR||{});e.ROARR=i,globalThis.ROARR=i;const o=c=>(0,r.stringify)(c),s=(0,t.createLogger)(c=>{var u;i.write&&i.write(((u=i.serializeMessage)!==null&&u!==void 0?u:o)(c))});e.Roarr=s;var a=Ff;Object.defineProperty(e,"logLevels",{enumerable:!0,get:function(){return a.logLevels}});var l=L_;Object.defineProperty(e,"getLogLevelName",{enumerable:!0,get:function(){return l.getLogLevelName}})})(Sm);var BI=He&&He.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i0?m("%c ".concat(p," %c").concat(f?" [".concat(String(f),"]:"):"","%c ").concat(c.message," %O"),v,y,g,h):m("%c ".concat(p," %c").concat(f?" [".concat(String(f),"]:"):"","%c ").concat(c.message),v,y,g)}}:function(l){var c=JSON.parse(l),u=c.context,d=u.logLevel,f=u.namespace,h=BI(u,["logLevel","namespace"]);if(!(a&&!(0,X5.test)(a,c))){var p=(0,zI.getLogLevelName)(Number(d)),m=s[p];Object.keys(h).length>0?m("".concat(p," ").concat(f?" [".concat(String(f),"]:"):""," ").concat(c.message),h):m("".concat(p," ").concat(f?" [".concat(String(f),"]:"):""," ").concat(c.message))}}};y_.createLogWriter=Lfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createLogWriter=void 0;var t=y_;Object.defineProperty(e,"createLogWriter",{enumerable:!0,get:function(){return t.createLogWriter}})})(AL);Sm.ROARR.write=AL.createLogWriter();const eB={};Sm.Roarr.child(eB);const B_=to(Sm.Roarr.child(eB)),ue=e=>B_.get().child({namespace:e}),$Ue=["trace","debug","info","warn","error","fatal"],NUe={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},tB=T.object({lora:eT.deepPartial(),weight:T.number()}),Bfe=xle.deepPartial(),zfe=wle.deepPartial(),jfe=Cle.deepPartial(),Vfe=KD.deepPartial(),Ufe=T.union([HD.deepPartial(),WD.deepPartial()]),Gfe=J4.deepPartial(),Hfe=T.object({app_version:T.string().nullish().catch(null),generation_mode:T.string().nullish().catch(null),created_by:T.string().nullish().catch(null),positive_prompt:T.string().nullish().catch(null),negative_prompt:T.string().nullish().catch(null),width:T.number().int().nullish().catch(null),height:T.number().int().nullish().catch(null),seed:T.number().int().nullish().catch(null),rand_device:T.string().nullish().catch(null),cfg_scale:T.number().nullish().catch(null),cfg_rescale_multiplier:T.number().nullish().catch(null),steps:T.number().int().nullish().catch(null),scheduler:T.string().nullish().catch(null),clip_skip:T.number().int().nullish().catch(null),model:Ufe.nullish().catch(null),controlnets:T.array(Bfe).nullish().catch(null),ipAdapters:T.array(zfe).nullish().catch(null),t2iAdapters:T.array(jfe).nullish().catch(null),loras:T.array(tB).nullish().catch(null),vae:Gfe.nullish().catch(null),strength:T.number().nullish().catch(null),hrf_enabled:T.boolean().nullish().catch(null),hrf_strength:T.number().nullish().catch(null),hrf_method:T.string().nullish().catch(null),init_image:T.string().nullish().catch(null),positive_style_prompt:T.string().nullish().catch(null),negative_style_prompt:T.string().nullish().catch(null),refiner_model:Vfe.nullish().catch(null),refiner_cfg_scale:T.number().nullish().catch(null),refiner_steps:T.number().int().nullish().catch(null),refiner_scheduler:T.string().nullish().catch(null),refiner_positive_aesthetic_score:T.number().nullish().catch(null),refiner_negative_aesthetic_score:T.number().nullish().catch(null),refiner_start:T.number().nullish().catch(null)}).passthrough(),ce=Lo.injectEndpoints({endpoints:e=>({listImages:e.query({query:t=>({url:Vi(t),method:"GET"}),providesTags:(t,n,{board_id:r,categories:i})=>[{type:"ImageList",id:Vi({board_id:r,categories:i})}],serializeQueryArgs:({queryArgs:t})=>{const{board_id:n,categories:r}=t;return Vi({board_id:n,categories:r})},transformResponse(t){const{items:n}=t;return Ot.addMany(Ot.getInitialState(),n)},merge:(t,n)=>{Ot.addMany(t,_g.selectAll(n))},forceRefetch({currentArg:t,previousArg:n}){return(t==null?void 0:t.offset)!==(n==null?void 0:n.offset)},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;_g.selectAll(i).forEach(o=>{n(ce.util.upsertQueryData("getImageDTO",o.image_name,o))})}catch{}},keepUnusedDataFor:86400}),getIntermediatesCount:e.query({query:()=>({url:"images/intermediates"}),providesTags:["IntermediatesCount"]}),clearIntermediates:e.mutation({query:()=>({url:"images/intermediates",method:"DELETE"}),invalidatesTags:["IntermediatesCount"]}),getImageDTO:e.query({query:t=>({url:`images/i/${t}`}),providesTags:(t,n,r)=>[{type:"Image",id:r}],keepUnusedDataFor:86400}),getImageMetadata:e.query({query:t=>({url:`images/i/${t}/metadata`}),providesTags:(t,n,r)=>[{type:"ImageMetadata",id:r}],transformResponse:t=>{if(t){const n=Hfe.safeParse(t);if(n.success)return n.data;ue("images").warn("Problem parsing metadata")}},keepUnusedDataFor:86400}),getImageWorkflow:e.query({query:t=>({url:`images/i/${t}/workflow`}),providesTags:(t,n,r)=>[{type:"ImageWorkflow",id:r}],keepUnusedDataFor:86400}),deleteImage:e.mutation({query:({image_name:t})=>({url:`images/i/${t}`,method:"DELETE"}),async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){const{image_name:i,board_id:o}=t,s=Pr.includes(t.image_category),a={board_id:o??"none",categories:Fi(t)},l=[];l.push(n(ce.util.updateQueryData("listImages",a,c=>{Ot.removeOne(c,i)}))),l.push(n(Qe.util.updateQueryData(s?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",c=>{c.total=Math.max(c.total-1,0)})));try{await r}catch{l.forEach(c=>{c.undo()})}}}),deleteImages:e.mutation({query:({imageDTOs:t})=>({url:"images/delete",method:"POST",body:{image_names:t.map(r=>r.image_name)}}),async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;i.deleted_images.length{const a=o[s];if(a){const l={board_id:a.board_id??"none",categories:Fi(a)};n(ce.util.updateQueryData("listImages",l,u=>{Ot.removeOne(u,s)}));const c=Pr.includes(a.image_category);n(Qe.util.updateQueryData(c?"getBoardAssetsTotal":"getBoardImagesTotal",a.board_id??"none",u=>{u.total=Math.max(u.total-1,0)}))}})}catch{}}}),changeImageIsIntermediate:e.mutation({query:({imageDTO:t,is_intermediate:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{is_intermediate:n}}),async onQueryStarted({imageDTO:t,is_intermediate:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[];s.push(r(ce.util.updateQueryData("getImageDTO",t.image_name,c=>{Object.assign(c,{is_intermediate:n})})));const a=Fi(t),l=Pr.includes(t.image_category);if(n)s.push(r(ce.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:a},c=>{Ot.removeOne(c,t.image_name)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",c=>{c.total=Math.max(c.total-1,0)})));else{s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",p=>{p.total+=1})));const c={board_id:t.board_id??"none",categories:a},u=ce.endpoints.listImages.select(c)(o()),{data:d}=Rn.includes(t.image_category)?Qe.endpoints.getBoardImagesTotal.select(t.board_id??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(o()),f=u.data&&u.data.ids.length>=((d==null?void 0:d.total)??0),h=Xl(u.data,t);(f||h)&&s.push(r(ce.util.updateQueryData("listImages",c,p=>{Ot.upsertOne(p,t)})))}try{await i}catch{s.forEach(c=>c.undo())}}}),changeImageSessionId:e.mutation({query:({imageDTO:t,session_id:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{session_id:n}}),async onQueryStarted({imageDTO:t,session_id:n},{dispatch:r,queryFulfilled:i}){const o=[];o.push(r(ce.util.updateQueryData("getImageDTO",t.image_name,s=>{Object.assign(s,{session_id:n})})));try{await i}catch{o.forEach(s=>s.undo())}}}),starImages:e.mutation({query:({imageDTOs:t})=>({url:"images/star",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{if(r[0]){const i=Fi(r[0]),o=r[0].board_id??void 0;return[{type:"ImageList",id:Vi({board_id:o,categories:i})},{type:"Board",id:o}]}return[]},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,s=t.filter(c=>o.updated_image_names.includes(c.image_name));if(!s[0])return;const a=Fi(s[0]),l=s[0].board_id;s.forEach(c=>{const{image_name:u}=c;n(ce.util.updateQueryData("getImageDTO",u,_=>{_.starred=!0}));const d={board_id:l??"none",categories:a},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(l??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,c):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...c,starred:!0})}))})}catch{}}}),unstarImages:e.mutation({query:({imageDTOs:t})=>({url:"images/unstar",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{if(r[0]){const i=Fi(r[0]),o=r[0].board_id??void 0;return[{type:"ImageList",id:Vi({board_id:o,categories:i})},{type:"Board",id:o}]}return[]},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,s=t.filter(c=>o.updated_image_names.includes(c.image_name));if(!s[0])return;const a=Fi(s[0]),l=s[0].board_id;s.forEach(c=>{const{image_name:u}=c;n(ce.util.updateQueryData("getImageDTO",u,_=>{_.starred=!1}));const d={board_id:l??"none",categories:a},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(l??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,c):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...c,starred:!1})}))})}catch{}}}),uploadImage:e.mutation({query:({file:t,image_category:n,is_intermediate:r,session_id:i,board_id:o,crop_visible:s})=>{const a=new FormData;return a.append("file",t),{url:"images/upload",method:"POST",body:a,params:{image_category:n,is_intermediate:r,session_id:i,board_id:o==="none"?void 0:o,crop_visible:s}}},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;if(i.is_intermediate)return;n(ce.util.upsertQueryData("getImageDTO",i.image_name,i));const o=Fi(i);n(ce.util.updateQueryData("listImages",{board_id:i.board_id??"none",categories:o},s=>{Ot.addOne(s,i)})),n(Qe.util.updateQueryData("getBoardAssetsTotal",i.board_id??"none",s=>{s.total+=1}))}catch{}}}),deleteBoard:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE"}),invalidatesTags:()=>[{type:"Board",id:Ir},{type:"ImageList",id:Vi({board_id:"none",categories:Rn})},{type:"ImageList",id:Vi({board_id:"none",categories:Pr})}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r,{deleted_board_images:o}=i;o.forEach(l=>{n(ce.util.updateQueryData("getImageDTO",l,c=>{c.board_id=void 0}))}),n(Qe.util.updateQueryData("getBoardAssetsTotal",t,l=>{l.total=0})),n(Qe.util.updateQueryData("getBoardImagesTotal",t,l=>{l.total=0}));const s=[{categories:Rn},{categories:Pr}],a=o.map(l=>({id:l,changes:{board_id:void 0}}));s.forEach(l=>{n(ce.util.updateQueryData("listImages",l,c=>{Ot.updateMany(c,a)}))})}catch{}}}),deleteBoardAndImages:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE",params:{include_images:!0}}),invalidatesTags:()=>[{type:"Board",id:Ir},{type:"ImageList",id:Vi({board_id:"none",categories:Rn})},{type:"ImageList",id:Vi({board_id:"none",categories:Pr})}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r,{deleted_images:o}=i;[{categories:Rn},{categories:Pr}].forEach(a=>{n(ce.util.updateQueryData("listImages",a,l=>{Ot.removeMany(l,o)}))}),n(Qe.util.updateQueryData("getBoardAssetsTotal",t,a=>{a.total=0})),n(Qe.util.updateQueryData("getBoardImagesTotal",t,a=>{a.total=0}))}catch{}}}),addImageToBoard:e.mutation({query:({board_id:t,imageDTO:n})=>{const{image_name:r}=n;return{url:"board_images/",method:"POST",body:{board_id:t,image_name:r}}},invalidatesTags:(t,n,{board_id:r})=>[{type:"Board",id:r}],async onQueryStarted({board_id:t,imageDTO:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[],a=Fi(n),l=Pr.includes(n.image_category);if(s.push(r(ce.util.updateQueryData("getImageDTO",n.image_name,c=>{c.board_id=t}))),!n.is_intermediate){s.push(r(ce.util.updateQueryData("listImages",{board_id:n.board_id??"none",categories:a},p=>{Ot.removeOne(p,n.image_name)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",n.board_id??"none",p=>{p.total=Math.max(p.total-1,0)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t??"none",p=>{p.total+=1})));const c={board_id:t??"none",categories:a},u=ce.endpoints.listImages.select(c)(o()),{data:d}=Rn.includes(n.image_category)?Qe.endpoints.getBoardImagesTotal.select(n.board_id??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(n.board_id??"none")(o()),f=u.data&&u.data.ids.length>=((d==null?void 0:d.total)??0),h=Xl(u.data,n);(f||h)&&s.push(r(ce.util.updateQueryData("listImages",c,p=>{Ot.addOne(p,n)})))}try{await i}catch{s.forEach(c=>c.undo())}}}),removeImageFromBoard:e.mutation({query:({imageDTO:t})=>{const{image_name:n}=t;return{url:"board_images/",method:"DELETE",body:{image_name:n}}},invalidatesTags:(t,n,{imageDTO:r})=>{const{board_id:i}=r;return[{type:"Board",id:i??"none"}]},async onQueryStarted({imageDTO:t},{dispatch:n,queryFulfilled:r,getState:i}){const o=Fi(t),s=[],a=Pr.includes(t.image_category);s.push(n(ce.util.updateQueryData("getImageDTO",t.image_name,h=>{h.board_id=void 0}))),s.push(n(ce.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:o},h=>{Ot.removeOne(h,t.image_name)}))),s.push(n(Qe.util.updateQueryData(a?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",h=>{h.total=Math.max(h.total-1,0)}))),s.push(n(Qe.util.updateQueryData(a?"getBoardAssetsTotal":"getBoardImagesTotal","none",h=>{h.total+=1})));const l={board_id:"none",categories:o},c=ce.endpoints.listImages.select(l)(i()),{data:u}=Rn.includes(t.image_category)?Qe.endpoints.getBoardImagesTotal.select(t.board_id??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(i()),d=c.data&&c.data.ids.length>=((u==null?void 0:u.total)??0),f=Xl(c.data,t);(d||f)&&s.push(n(ce.util.updateQueryData("listImages",l,h=>{Ot.upsertOne(h,t)})));try{await r}catch{s.forEach(h=>h.undo())}}}),addImagesToBoard:e.mutation({query:({board_id:t,imageDTOs:n})=>({url:"board_images/batch",method:"POST",body:{image_names:n.map(r=>r.image_name),board_id:t}}),invalidatesTags:(t,n,{board_id:r})=>[{type:"Board",id:r??"none"}],async onQueryStarted({board_id:t,imageDTOs:n},{dispatch:r,queryFulfilled:i,getState:o}){try{const{data:s}=await i,{added_image_names:a}=s;a.forEach(l=>{r(ce.util.updateQueryData("getImageDTO",l,y=>{y.board_id=t==="none"?void 0:t}));const c=n.find(y=>y.image_name===l);if(!c)return;const u=Fi(c),d=c.board_id,f=Pr.includes(c.image_category);r(ce.util.updateQueryData("listImages",{board_id:d??"none",categories:u},y=>{Ot.removeOne(y,c.image_name)})),r(Qe.util.updateQueryData(f?"getBoardAssetsTotal":"getBoardImagesTotal",d??"none",y=>{y.total=Math.max(y.total-1,0)})),r(Qe.util.updateQueryData(f?"getBoardAssetsTotal":"getBoardImagesTotal",t??"none",y=>{y.total+=1}));const h={board_id:t,categories:u},p=ce.endpoints.listImages.select(h)(o()),{data:m}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(t??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(t??"none")(o()),_=p.data&&p.data.ids.length>=((m==null?void 0:m.total)??0),v=((m==null?void 0:m.total)??0)>=K0?Xl(p.data,c):!0;(_||v)&&r(ce.util.updateQueryData("listImages",h,y=>{Ot.upsertOne(y,{...c,board_id:t})}))})}catch{}}}),removeImagesFromBoard:e.mutation({query:({imageDTOs:t})=>({url:"board_images/batch/delete",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{const i=[],o=[];return t==null||t.removed_image_names.forEach(s=>{var l;const a=(l=r.find(c=>c.image_name===s))==null?void 0:l.board_id;!a||i.includes(a)||o.push({type:"Board",id:a})}),o},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{removed_image_names:s}=o;s.forEach(a=>{n(ce.util.updateQueryData("getImageDTO",a,_=>{_.board_id=void 0}));const l=t.find(_=>_.image_name===a);if(!l)return;const c=Fi(l),u=Pr.includes(l.image_category);n(ce.util.updateQueryData("listImages",{board_id:l.board_id??"none",categories:c},_=>{Ot.removeOne(_,l.image_name)})),n(Qe.util.updateQueryData(u?"getBoardAssetsTotal":"getBoardImagesTotal",l.board_id??"none",_=>{_.total=Math.max(_.total-1,0)})),n(Qe.util.updateQueryData(u?"getBoardAssetsTotal":"getBoardImagesTotal","none",_=>{_.total+=1}));const d={board_id:"none",categories:c},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(l.image_category)?Qe.endpoints.getBoardImagesTotal.select(l.board_id??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l.board_id??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,l):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...l,board_id:"none"})}))})}catch{}}}),bulkDownloadImages:e.mutation({query:({image_names:t,board_id:n})=>({url:"images/download",method:"POST",body:{image_names:t,board_id:n}})})})}),{useGetIntermediatesCountQuery:FUe,useListImagesQuery:DUe,useLazyListImagesQuery:LUe,useGetImageDTOQuery:BUe,useGetImageMetadataQuery:zUe,useGetImageWorkflowQuery:jUe,useLazyGetImageWorkflowQuery:VUe,useDeleteImageMutation:UUe,useDeleteImagesMutation:GUe,useUploadImageMutation:HUe,useClearIntermediatesMutation:WUe,useAddImagesToBoardMutation:qUe,useRemoveImagesFromBoardMutation:KUe,useAddImageToBoardMutation:XUe,useRemoveImageFromBoardMutation:QUe,useChangeImageIsIntermediateMutation:YUe,useChangeImageSessionIdMutation:ZUe,useDeleteBoardAndImagesMutation:JUe,useDeleteBoardMutation:eGe,useStarImagesMutation:tGe,useUnstarImagesMutation:nGe,useBulkDownloadImagesMutation:rGe}=ce,nB={selection:[],shouldAutoSwitch:!0,autoAssignBoardOnClick:!0,autoAddBoardId:"none",galleryImageMinimumWidth:96,selectedBoardId:"none",galleryView:"images",boardSearchText:""},rB=jt({name:"gallery",initialState:nB,reducers:{imageSelected:(e,t)=>{e.selection=t.payload?[t.payload]:[]},selectionChanged:(e,t)=>{e.selection=YF(t.payload,n=>n.image_name)},shouldAutoSwitchChanged:(e,t)=>{e.shouldAutoSwitch=t.payload},setGalleryImageMinimumWidth:(e,t)=>{e.galleryImageMinimumWidth=t.payload},autoAssignBoardOnClickChanged:(e,t)=>{e.autoAssignBoardOnClick=t.payload},boardIdSelected:(e,t)=>{e.selectedBoardId=t.payload.boardId,e.galleryView="images"},autoAddBoardIdChanged:(e,t)=>{if(!t.payload){e.autoAddBoardId="none";return}e.autoAddBoardId=t.payload},galleryViewChanged:(e,t)=>{e.galleryView=t.payload},boardSearchTextChanged:(e,t)=>{e.boardSearchText=t.payload}},extraReducers:e=>{e.addMatcher(qfe,(t,n)=>{const r=n.meta.arg.originalArgs;r===t.selectedBoardId&&(t.selectedBoardId="none",t.galleryView="images"),r===t.autoAddBoardId&&(t.autoAddBoardId="none")}),e.addMatcher(Qe.endpoints.listAllBoards.matchFulfilled,(t,n)=>{const r=n.payload;t.autoAddBoardId&&(r.map(i=>i.board_id).includes(t.autoAddBoardId)||(t.autoAddBoardId="none"))})}}),{imageSelected:ps,shouldAutoSwitchChanged:iGe,autoAssignBoardOnClickChanged:oGe,setGalleryImageMinimumWidth:sGe,boardIdSelected:vp,autoAddBoardIdChanged:aGe,galleryViewChanged:Q5,selectionChanged:iB,boardSearchTextChanged:lGe}=rB.actions,Wfe=rB.reducer,qfe=br(ce.endpoints.deleteBoard.matchFulfilled,ce.endpoints.deleteBoardAndImages.matchFulfilled),VI={weight:.75},Kfe={loras:{}},oB=jt({name:"lora",initialState:Kfe,reducers:{loraAdded:(e,t)=>{const{model_name:n,id:r,base_model:i}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,...VI}},loraRecalled:(e,t)=>{const{model_name:n,id:r,base_model:i,weight:o}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,weight:o}},loraRemoved:(e,t)=>{const n=t.payload;delete e.loras[n]},lorasCleared:e=>{e.loras={}},loraWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload,i=e.loras[n];i&&(i.weight=r)},loraWeightReset:(e,t)=>{const n=t.payload,r=e.loras[n];r&&(r.weight=VI.weight)}}}),{loraAdded:cGe,loraRemoved:sB,loraWeightChanged:uGe,loraWeightReset:dGe,lorasCleared:fGe,loraRecalled:hGe}=oB.actions,Xfe=oB.reducer,Qfe={searchFolder:null,advancedAddScanModel:null},aB=jt({name:"modelmanager",initialState:Qfe,reducers:{setSearchFolder:(e,t)=>{e.searchFolder=t.payload},setAdvancedAddScanModel:(e,t)=>{e.advancedAddScanModel=t.payload}}}),{setSearchFolder:pGe,setAdvancedAddScanModel:gGe}=aB.actions,Yfe=aB.reducer,Zfe=he("nodes/textToImageGraphBuilt"),Jfe=he("nodes/imageToImageGraphBuilt"),lB=he("nodes/canvasGraphBuilt"),ehe=he("nodes/nodesGraphBuilt"),the=br(Zfe,Jfe,lB,ehe),nhe=he("nodes/workflowLoadRequested"),rhe=he("nodes/updateAllNodesRequested"),yT=he("workflow/workflowLoaded"),mGe=500,yGe=320,ihe="node-drag-handle",cB={dragHandle:`.${ihe}`},vGe={input:"inputs",output:"outputs"},bGe=["IPAdapterModelField","ControlNetModelField","LoRAModelField","MainModelField","ONNXModelField","SDXLMainModelField","SDXLRefinerModelField","VaeModelField","UNetField","VaeField","ClipField","T2IAdapterModelField","IPAdapterModelField"],_Ge={BoardField:"purple.500",BooleanField:"green.500",ClipField:"green.500",ColorField:"pink.300",ConditioningField:"cyan.500",ControlField:"teal.500",ControlNetModelField:"teal.500",EnumField:"blue.500",FloatField:"orange.500",ImageField:"purple.500",IntegerField:"red.500",IPAdapterField:"teal.500",IPAdapterModelField:"teal.500",LatentsField:"pink.500",LoRAModelField:"teal.500",MainModelField:"teal.500",ONNXModelField:"teal.500",SDXLMainModelField:"teal.500",SDXLRefinerModelField:"teal.500",StringField:"yellow.500",T2IAdapterField:"teal.500",T2IAdapterModelField:"teal.500",UNetField:"red.500",VaeField:"blue.500",VaeModelField:"teal.500"},ohe=T.enum(["connection","direct","any"]),she=T.enum(["none","textarea","slider"]),uB=T.object({id:T.string().trim().min(1),name:T.string().trim().min(1)}),Bn=uB.extend({fieldKind:T.literal("input"),label:T.string().nullish()}),zn=uB.extend({fieldKind:T.literal("output")}),dB=T.object({name:T.string().min(1),title:T.string().min(1),description:T.string().nullish(),ui_hidden:T.boolean(),ui_type:T.string().nullish(),ui_order:T.number().int().nullish()}),jn=dB.extend({fieldKind:T.literal("input"),input:ohe,required:T.boolean(),ui_component:she.nullish(),ui_choice_labels:T.record(T.string()).nullish()}),Vn=dB.extend({fieldKind:T.literal("output")}),Un=T.object({isCollection:T.boolean(),isCollectionOrScalar:T.boolean()}),ahe=T.object({nodeId:T.string().trim().min(1),fieldName:T.string().trim().min(1)}),xm=Un.extend({name:T.literal("IntegerField")}),z_=T.number().int(),fB=Bn.extend({type:xm,value:z_}),lhe=zn.extend({type:xm}),hB=jn.extend({type:xm,default:z_,multipleOf:T.number().int().optional(),maximum:T.number().int().optional(),exclusiveMaximum:T.number().int().optional(),minimum:T.number().int().optional(),exclusiveMinimum:T.number().int().optional()}),che=Vn.extend({type:xm}),SGe=e=>fB.safeParse(e).success,xGe=e=>hB.safeParse(e).success,wm=Un.extend({name:T.literal("FloatField")}),j_=T.number(),pB=Bn.extend({type:wm,value:j_}),uhe=zn.extend({type:wm}),gB=jn.extend({type:wm,default:j_,multipleOf:T.number().optional(),maximum:T.number().optional(),exclusiveMaximum:T.number().optional(),minimum:T.number().optional(),exclusiveMinimum:T.number().optional()}),dhe=Vn.extend({type:wm}),wGe=e=>pB.safeParse(e).success,CGe=e=>gB.safeParse(e).success,Cm=Un.extend({name:T.literal("StringField")}),V_=T.string(),mB=Bn.extend({type:Cm,value:V_}),fhe=zn.extend({type:Cm}),yB=jn.extend({type:Cm,default:V_,maxLength:T.number().int().optional(),minLength:T.number().int().optional()}),hhe=Vn.extend({type:Cm}),EGe=e=>mB.safeParse(e).success,TGe=e=>yB.safeParse(e).success,Em=Un.extend({name:T.literal("BooleanField")}),U_=T.boolean(),vB=Bn.extend({type:Em,value:U_}),phe=zn.extend({type:Em}),bB=jn.extend({type:Em,default:U_}),ghe=Vn.extend({type:Em}),AGe=e=>vB.safeParse(e).success,kGe=e=>bB.safeParse(e).success,Tm=Un.extend({name:T.literal("EnumField")}),G_=T.string(),_B=Bn.extend({type:Tm,value:G_}),mhe=zn.extend({type:Tm}),SB=jn.extend({type:Tm,default:G_,options:T.array(T.string()),labels:T.record(T.string()).optional()}),yhe=Vn.extend({type:Tm}),PGe=e=>_B.safeParse(e).success,IGe=e=>SB.safeParse(e).success,Am=Un.extend({name:T.literal("ImageField")}),H_=mm.optional(),xB=Bn.extend({type:Am,value:H_}),vhe=zn.extend({type:Am}),wB=jn.extend({type:Am,default:H_}),bhe=Vn.extend({type:Am}),vT=e=>xB.safeParse(e).success,MGe=e=>wB.safeParse(e).success,km=Un.extend({name:T.literal("BoardField")}),W_=yle.optional(),CB=Bn.extend({type:km,value:W_}),_he=zn.extend({type:km}),EB=jn.extend({type:km,default:W_}),She=Vn.extend({type:km}),RGe=e=>CB.safeParse(e).success,OGe=e=>EB.safeParse(e).success,Pm=Un.extend({name:T.literal("ColorField")}),q_=vle.optional(),TB=Bn.extend({type:Pm,value:q_}),xhe=zn.extend({type:Pm}),AB=jn.extend({type:Pm,default:q_}),whe=Vn.extend({type:Pm}),Che=e=>TB.safeParse(e).success,$Ge=e=>AB.safeParse(e).success,Im=Un.extend({name:T.literal("MainModelField")}),Df=qD.optional(),kB=Bn.extend({type:Im,value:Df}),Ehe=zn.extend({type:Im}),PB=jn.extend({type:Im,default:Df}),The=Vn.extend({type:Im}),NGe=e=>kB.safeParse(e).success,FGe=e=>PB.safeParse(e).success,Mm=Un.extend({name:T.literal("SDXLMainModelField")}),bT=Df,IB=Bn.extend({type:Mm,value:bT}),Ahe=zn.extend({type:Mm}),MB=jn.extend({type:Mm,default:bT}),khe=Vn.extend({type:Mm}),DGe=e=>IB.safeParse(e).success,LGe=e=>MB.safeParse(e).success,Rm=Un.extend({name:T.literal("SDXLRefinerModelField")}),K_=Df,RB=Bn.extend({type:Rm,value:K_}),Phe=zn.extend({type:Rm}),OB=jn.extend({type:Rm,default:K_}),Ihe=Vn.extend({type:Rm}),BGe=e=>RB.safeParse(e).success,zGe=e=>OB.safeParse(e).success,Om=Un.extend({name:T.literal("VAEModelField")}),X_=J4.optional(),$B=Bn.extend({type:Om,value:X_}),Mhe=zn.extend({type:Om}),NB=jn.extend({type:Om,default:X_}),Rhe=Vn.extend({type:Om}),jGe=e=>$B.safeParse(e).success,VGe=e=>NB.safeParse(e).success,$m=Un.extend({name:T.literal("LoRAModelField")}),Q_=eT.optional(),FB=Bn.extend({type:$m,value:Q_}),Ohe=zn.extend({type:$m}),DB=jn.extend({type:$m,default:Q_}),$he=Vn.extend({type:$m}),UGe=e=>FB.safeParse(e).success,GGe=e=>DB.safeParse(e).success,Nm=Un.extend({name:T.literal("ControlNetModelField")}),Y_=tT.optional(),LB=Bn.extend({type:Nm,value:Y_}),Nhe=zn.extend({type:Nm}),BB=jn.extend({type:Nm,default:Y_}),Fhe=Vn.extend({type:Nm}),HGe=e=>LB.safeParse(e).success,WGe=e=>BB.safeParse(e).success,Fm=Un.extend({name:T.literal("IPAdapterModelField")}),Z_=nT.optional(),zB=Bn.extend({type:Fm,value:Z_}),Dhe=zn.extend({type:Fm}),jB=jn.extend({type:Fm,default:Z_}),Lhe=Vn.extend({type:Fm}),qGe=e=>zB.safeParse(e).success,KGe=e=>jB.safeParse(e).success,Dm=Un.extend({name:T.literal("T2IAdapterModelField")}),J_=rT.optional(),VB=Bn.extend({type:Dm,value:J_}),Bhe=zn.extend({type:Dm}),UB=jn.extend({type:Dm,default:J_}),zhe=Vn.extend({type:Dm}),XGe=e=>VB.safeParse(e).success,QGe=e=>UB.safeParse(e).success,Lm=Un.extend({name:T.literal("SchedulerField")}),eS=GD.optional(),GB=Bn.extend({type:Lm,value:eS}),jhe=zn.extend({type:Lm}),HB=jn.extend({type:Lm,default:eS}),Vhe=Vn.extend({type:Lm}),YGe=e=>GB.safeParse(e).success,ZGe=e=>HB.safeParse(e).success,Bm=Un.extend({name:T.string().min(1)}),_T=T.undefined().catch(void 0),Uhe=Bn.extend({type:Bm,value:_T}),Ghe=zn.extend({type:Bm}),WB=jn.extend({type:Bm,default:_T,input:T.literal("connection")}),Hhe=Vn.extend({type:Bm}),qB=T.union([xm,wm,Cm,Em,Tm,Am,km,Im,Mm,Rm,Om,$m,Nm,Fm,Dm,Pm,Lm]),Whe=e=>qB.safeParse(e).success;T.union([qB,Bm]);const qhe=T.union([z_,j_,V_,U_,G_,H_,W_,Df,bT,K_,X_,Q_,Y_,Z_,J_,q_,eS]);T.union([qhe,_T]);const Khe=T.union([fB,pB,mB,vB,_B,xB,CB,kB,IB,RB,$B,FB,LB,zB,VB,TB,GB]),KB=T.union([Khe,Uhe]),JGe=e=>KB.safeParse(e).success,Xhe=T.union([lhe,uhe,fhe,phe,mhe,vhe,_he,Ehe,Ahe,Phe,Mhe,Ohe,Nhe,Dhe,Bhe,xhe,jhe]),Qhe=T.union([Xhe,Ghe]),Yhe=T.union([hB,gB,yB,bB,SB,wB,EB,PB,MB,OB,NB,DB,BB,jB,UB,AB,HB,WB]),XB=T.union([Yhe,WB]),eHe=e=>XB.safeParse(e).success,Zhe=T.union([che,dhe,hhe,ghe,yhe,bhe,She,The,khe,Ihe,Rhe,$he,Fhe,Lhe,zhe,whe,Vhe]),Jhe=T.union([Zhe,Hhe]),nw=T.coerce.number().int().min(0),tS=T.string().refine(e=>{const[t,n,r]=e.split(".");return nw.safeParse(t).success&&nw.safeParse(n).success&&nw.safeParse(r).success}),epe=tS.transform(e=>{const[t,n,r]=e.split(".");return{major:Number(t),minor:Number(n),patch:Number(r)}});T.object({type:T.string(),title:T.string(),description:T.string(),tags:T.array(T.string().min(1)),inputs:T.record(XB),outputs:T.record(Jhe),outputType:T.string().min(1),version:tS,useCache:T.boolean(),nodePack:T.string().min(1).nullish(),classification:ble});const QB=T.object({id:T.string().trim().min(1),type:T.string().trim().min(1),label:T.string(),isOpen:T.boolean(),notes:T.string(),isIntermediate:T.boolean(),useCache:T.boolean(),version:tS,nodePack:T.string().min(1).nullish(),inputs:T.record(KB),outputs:T.record(Qhe)}),YB=T.object({id:T.string().trim().min(1),type:T.literal("notes"),label:T.string(),isOpen:T.boolean(),notes:T.string()}),tpe=T.object({id:T.string().trim().min(1),type:T.literal("current_image"),label:T.string(),isOpen:T.boolean()});T.union([QB,YB,tpe]);const Sn=e=>!!(e&&e.type==="invocation"),Y5=e=>!!(e&&e.type==="notes"),tHe=e=>!!(e&&!["notes","current_image"].includes(e.type)),gc=T.enum(["PENDING","IN_PROGRESS","COMPLETED","FAILED"]);T.object({nodeId:T.string().trim().min(1),status:gc,progress:T.number().nullable(),progressImage:Ele.nullable(),error:T.string().nullable(),outputs:T.array(T.any())});T.object({type:T.union([T.literal("default"),T.literal("collapsed")])});function no(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?cpe:lpe;tz.useSyncExternalStore=hf.useSyncExternalStore!==void 0?hf.useSyncExternalStore:upe;ez.exports=tz;var dpe=ez.exports;/** + * @license React + * use-sync-external-store-shim/with-selector.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var nS=I,fpe=dpe;function hpe(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var ppe=typeof Object.is=="function"?Object.is:hpe,gpe=fpe.useSyncExternalStore,mpe=nS.useRef,ype=nS.useEffect,vpe=nS.useMemo,bpe=nS.useDebugValue;JB.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=mpe(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=vpe(function(){function l(h){if(!c){if(c=!0,u=h,h=r(h),i!==void 0&&s.hasValue){var p=s.value;if(i(p,h))return d=p}return d=h}if(p=d,ppe(u,h))return p;var m=r(h);return i!==void 0&&i(p,m)?p:(u=h,d=m)}var c=!1,u,d,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,i]);var a=gpe(e,o[0],o[1]);return ype(function(){s.hasValue=!0,s.value=a},[a]),bpe(a),a};ZB.exports=JB;var _pe=ZB.exports;const Spe=Ml(_pe),UI=e=>{let t;const n=new Set,r=(l,c)=>{const u=typeof l=="function"?l(t):l;if(!Object.is(u,t)){const d=t;t=c??typeof u!="object"?u:Object.assign({},t,u),n.forEach(f=>f(t,d))}},i=()=>t,a={setState:r,getState:i,subscribe:l=>(n.add(l),()=>n.delete(l)),destroy:()=>{n.clear()}};return t=e(r,i,a),a},xpe=e=>e?UI(e):UI,{useSyncExternalStoreWithSelector:wpe}=Spe;function nz(e,t=e.getState,n){const r=wpe(e.subscribe,e.getState,e.getServerState||e.getState,t,n);return I.useDebugValue(r),r}const GI=(e,t)=>{const n=xpe(e),r=(i,o=t)=>nz(n,i,o);return Object.assign(r,n),r},Cpe=(e,t)=>e?GI(e,t):GI;function ti(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,i]of e)if(!Object.is(i,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r=0;r{}};function rS(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}tv.prototype=rS.prototype={constructor:tv,on:function(e,t){var n=this._,r=Tpe(e+"",n),i,o=-1,s=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(i),r=0,i,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),WI.hasOwnProperty(t)?{space:WI[t],local:e}:e}function kpe(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Z5&&t.documentElement.namespaceURI===Z5?t.createElement(e):t.createElementNS(n,e)}}function Ppe(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function rz(e){var t=iS(e);return(t.local?Ppe:kpe)(t)}function Ipe(){}function ST(e){return e==null?Ipe:function(){return this.querySelector(e)}}function Mpe(e){typeof e!="function"&&(e=ST(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i=g&&(g=y+1);!(S=_[g])&&++g=0;)(s=r[i])&&(o&&s.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(s,o),o=s);return this}function nge(e){e||(e=rge);function t(d,f){return d&&f?e(d.__data__,f.__data__):!d-!f}for(var n=this._groups,r=n.length,i=new Array(r),o=0;ot?1:e>=t?0:NaN}function ige(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function oge(){return Array.from(this)}function sge(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?yge:typeof t=="function"?bge:vge)(e,t,n??"")):pf(this.node(),e)}function pf(e,t){return e.style.getPropertyValue(t)||lz(e).getComputedStyle(e,null).getPropertyValue(t)}function Sge(e){return function(){delete this[e]}}function xge(e,t){return function(){this[e]=t}}function wge(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Cge(e,t){return arguments.length>1?this.each((t==null?Sge:typeof t=="function"?wge:xge)(e,t)):this.node()[e]}function cz(e){return e.trim().split(/^|\s+/)}function xT(e){return e.classList||new uz(e)}function uz(e){this._node=e,this._names=cz(e.getAttribute("class")||"")}uz.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function dz(e,t){for(var n=xT(e),r=-1,i=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function Zge(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,o;n()=>e;function J5(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:o,x:s,y:a,dx:l,dy:c,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:a,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:c,enumerable:!0,configurable:!0},_:{value:u}})}J5.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function lme(e){return!e.ctrlKey&&!e.button}function cme(){return this.parentNode}function ume(e,t){return t??{x:e.x,y:e.y}}function dme(){return navigator.maxTouchPoints||"ontouchstart"in this}function fme(){var e=lme,t=cme,n=ume,r=dme,i={},o=rS("start","drag","end"),s=0,a,l,c,u,d=0;function f(b){b.on("mousedown.drag",h).filter(r).on("touchstart.drag",_).on("touchmove.drag",v,ame).on("touchend.drag touchcancel.drag",y).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(b,S){if(!(u||!e.call(this,b,S))){var w=g(this,t.call(this,b,S),b,S,"mouse");w&&(xo(b.view).on("mousemove.drag",p,Sg).on("mouseup.drag",m,Sg),gz(b.view),iw(b),c=!1,a=b.clientX,l=b.clientY,w("start",b))}}function p(b){if(Nd(b),!c){var S=b.clientX-a,w=b.clientY-l;c=S*S+w*w>d}i.mouse("drag",b)}function m(b){xo(b.view).on("mousemove.drag mouseup.drag",null),mz(b.view,c),Nd(b),i.mouse("end",b)}function _(b,S){if(e.call(this,b,S)){var w=b.changedTouches,C=t.call(this,b,S),x=w.length,k,A;for(k=0;k>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Q0(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Q0(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=pme.exec(e))?new Qr(t[1],t[2],t[3],1):(t=gme.exec(e))?new Qr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=mme.exec(e))?Q0(t[1],t[2],t[3],t[4]):(t=yme.exec(e))?Q0(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=vme.exec(e))?JI(t[1],t[2]/100,t[3]/100,1):(t=bme.exec(e))?JI(t[1],t[2]/100,t[3]/100,t[4]):qI.hasOwnProperty(e)?QI(qI[e]):e==="transparent"?new Qr(NaN,NaN,NaN,0):null}function QI(e){return new Qr(e>>16&255,e>>8&255,e&255,1)}function Q0(e,t,n,r){return r<=0&&(e=t=n=NaN),new Qr(e,t,n,r)}function xme(e){return e instanceof jm||(e=Cg(e)),e?(e=e.rgb(),new Qr(e.r,e.g,e.b,e.opacity)):new Qr}function e3(e,t,n,r){return arguments.length===1?xme(e):new Qr(e,t,n,r??1)}function Qr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}wT(Qr,e3,yz(jm,{brighter(e){return e=e==null?P1:Math.pow(P1,e),new Qr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?xg:Math.pow(xg,e),new Qr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Qr(Fc(this.r),Fc(this.g),Fc(this.b),I1(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:YI,formatHex:YI,formatHex8:wme,formatRgb:ZI,toString:ZI}));function YI(){return`#${xc(this.r)}${xc(this.g)}${xc(this.b)}`}function wme(){return`#${xc(this.r)}${xc(this.g)}${xc(this.b)}${xc((isNaN(this.opacity)?1:this.opacity)*255)}`}function ZI(){const e=I1(this.opacity);return`${e===1?"rgb(":"rgba("}${Fc(this.r)}, ${Fc(this.g)}, ${Fc(this.b)}${e===1?")":`, ${e})`}`}function I1(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Fc(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function xc(e){return e=Fc(e),(e<16?"0":"")+e.toString(16)}function JI(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new wo(e,t,n,r)}function vz(e){if(e instanceof wo)return new wo(e.h,e.s,e.l,e.opacity);if(e instanceof jm||(e=Cg(e)),!e)return new wo;if(e instanceof wo)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),o=Math.max(t,n,r),s=NaN,a=o-i,l=(o+i)/2;return a?(t===o?s=(n-r)/a+(n0&&l<1?0:s,new wo(s,a,l,e.opacity)}function Cme(e,t,n,r){return arguments.length===1?vz(e):new wo(e,t,n,r??1)}function wo(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}wT(wo,Cme,yz(jm,{brighter(e){return e=e==null?P1:Math.pow(P1,e),new wo(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?xg:Math.pow(xg,e),new wo(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Qr(ow(e>=240?e-240:e+120,i,r),ow(e,i,r),ow(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new wo(e8(this.h),Y0(this.s),Y0(this.l),I1(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=I1(this.opacity);return`${e===1?"hsl(":"hsla("}${e8(this.h)}, ${Y0(this.s)*100}%, ${Y0(this.l)*100}%${e===1?")":`, ${e})`}`}}));function e8(e){return e=(e||0)%360,e<0?e+360:e}function Y0(e){return Math.max(0,Math.min(1,e||0))}function ow(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const bz=e=>()=>e;function Eme(e,t){return function(n){return e+n*t}}function Tme(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function Ame(e){return(e=+e)==1?_z:function(t,n){return n-t?Tme(t,n,e):bz(isNaN(t)?n:t)}}function _z(e,t){var n=t-e;return n?Eme(e,n):bz(isNaN(e)?t:e)}const t8=function e(t){var n=Ame(t);function r(i,o){var s=n((i=e3(i)).r,(o=e3(o)).r),a=n(i.g,o.g),l=n(i.b,o.b),c=_z(i.opacity,o.opacity);return function(u){return i.r=s(u),i.g=a(u),i.b=l(u),i.opacity=c(u),i+""}}return r.gamma=e,r}(1);function za(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var t3=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,sw=new RegExp(t3.source,"g");function kme(e){return function(){return e}}function Pme(e){return function(t){return e(t)+""}}function Ime(e,t){var n=t3.lastIndex=sw.lastIndex=0,r,i,o,s=-1,a=[],l=[];for(e=e+"",t=t+"";(r=t3.exec(e))&&(i=sw.exec(t));)(o=i.index)>n&&(o=t.slice(n,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,l.push({i:s,x:za(r,i)})),n=sw.lastIndex;return n180?u+=360:u-c>180&&(c+=360),f.push({i:d.push(i(d)+"rotate(",null,r)-2,x:za(c,u)})):u&&d.push(i(d)+"rotate("+u+r)}function a(c,u,d,f){c!==u?f.push({i:d.push(i(d)+"skewX(",null,r)-2,x:za(c,u)}):u&&d.push(i(d)+"skewX("+u+r)}function l(c,u,d,f,h,p){if(c!==d||u!==f){var m=h.push(i(h)+"scale(",null,",",null,")");p.push({i:m-4,x:za(c,d)},{i:m-2,x:za(u,f)})}else(d!==1||f!==1)&&h.push(i(h)+"scale("+d+","+f+")")}return function(c,u){var d=[],f=[];return c=e(c),u=e(u),o(c.translateX,c.translateY,u.translateX,u.translateY,d,f),s(c.rotate,u.rotate,d,f),a(c.skewX,u.skewX,d,f),l(c.scaleX,c.scaleY,u.scaleX,u.scaleY,d,f),c=u=null,function(h){for(var p=-1,m=f.length,_;++p=0&&e._call.call(void 0,t),e=e._next;--gf}function i8(){ru=(R1=Eg.now())+oS,gf=Gh=0;try{zme()}finally{gf=0,Vme(),ru=0}}function jme(){var e=Eg.now(),t=e-R1;t>wz&&(oS-=t,R1=e)}function Vme(){for(var e,t=M1,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:M1=n);Hh=e,r3(r)}function r3(e){if(!gf){Gh&&(Gh=clearTimeout(Gh));var t=e-ru;t>24?(e<1/0&&(Gh=setTimeout(i8,e-Eg.now()-oS)),gh&&(gh=clearInterval(gh))):(gh||(R1=Eg.now(),gh=setInterval(jme,wz)),gf=1,Cz(i8))}}function o8(e,t,n){var r=new O1;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var Ume=rS("start","end","cancel","interrupt"),Gme=[],Tz=0,s8=1,i3=2,nv=3,a8=4,o3=5,rv=6;function sS(e,t,n,r,i,o){var s=e.__transition;if(!s)e.__transition={};else if(n in s)return;Hme(e,n,{name:t,index:r,group:i,on:Ume,tween:Gme,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Tz})}function ET(e,t){var n=Vo(e,t);if(n.state>Tz)throw new Error("too late; already scheduled");return n}function ks(e,t){var n=Vo(e,t);if(n.state>nv)throw new Error("too late; already running");return n}function Vo(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Hme(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Ez(o,0,n.time);function o(c){n.state=s8,n.timer.restart(s,n.delay,n.time),n.delay<=c&&s(c-n.delay)}function s(c){var u,d,f,h;if(n.state!==s8)return l();for(u in r)if(h=r[u],h.name===n.name){if(h.state===nv)return o8(s);h.state===a8?(h.state=rv,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete r[u]):+ui3&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function S0e(e,t,n){var r,i,o=_0e(t)?ET:ks;return function(){var s=o(this,e),a=s.on;a!==r&&(i=(r=a).copy()).on(t,n),s.on=i}}function x0e(e,t){var n=this._id;return arguments.length<2?Vo(this.node(),n).on.on(e):this.each(S0e(n,e,t))}function w0e(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function C0e(){return this.on("end.remove",w0e(this._id))}function E0e(e){var t=this._name,n=this._id;typeof e!="function"&&(e=ST(e));for(var r=this._groups,i=r.length,o=new Array(i),s=0;s()=>e;function Q0e(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Xs(e,t,n){this.k=e,this.x=t,this.y=n}Xs.prototype={constructor:Xs,scale:function(e){return e===1?this:new Xs(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Xs(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var dl=new Xs(1,0,0);Xs.prototype;function aw(e){e.stopImmediatePropagation()}function mh(e){e.preventDefault(),e.stopImmediatePropagation()}function Y0e(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Z0e(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function l8(){return this.__zoom||dl}function J0e(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function eye(){return navigator.maxTouchPoints||"ontouchstart"in this}function tye(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),s>o?(o+s)/2:Math.min(0,o)||Math.max(0,s))}function nye(){var e=Y0e,t=Z0e,n=tye,r=J0e,i=eye,o=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],a=250,l=Lme,c=rS("start","zoom","end"),u,d,f,h=500,p=150,m=0,_=10;function v(E){E.property("__zoom",l8).on("wheel.zoom",x,{passive:!1}).on("mousedown.zoom",k).on("dblclick.zoom",A).filter(i).on("touchstart.zoom",R).on("touchmove.zoom",L).on("touchend.zoom touchcancel.zoom",M).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}v.transform=function(E,P,O,F){var $=E.selection?E.selection():E;$.property("__zoom",l8),E!==$?S(E,P,O,F):$.interrupt().each(function(){w(this,arguments).event(F).start().zoom(null,typeof P=="function"?P.apply(this,arguments):P).end()})},v.scaleBy=function(E,P,O,F){v.scaleTo(E,function(){var $=this.__zoom.k,D=typeof P=="function"?P.apply(this,arguments):P;return $*D},O,F)},v.scaleTo=function(E,P,O,F){v.transform(E,function(){var $=t.apply(this,arguments),D=this.__zoom,N=O==null?b($):typeof O=="function"?O.apply(this,arguments):O,z=D.invert(N),V=typeof P=="function"?P.apply(this,arguments):P;return n(g(y(D,V),N,z),$,s)},O,F)},v.translateBy=function(E,P,O,F){v.transform(E,function(){return n(this.__zoom.translate(typeof P=="function"?P.apply(this,arguments):P,typeof O=="function"?O.apply(this,arguments):O),t.apply(this,arguments),s)},null,F)},v.translateTo=function(E,P,O,F,$){v.transform(E,function(){var D=t.apply(this,arguments),N=this.__zoom,z=F==null?b(D):typeof F=="function"?F.apply(this,arguments):F;return n(dl.translate(z[0],z[1]).scale(N.k).translate(typeof P=="function"?-P.apply(this,arguments):-P,typeof O=="function"?-O.apply(this,arguments):-O),D,s)},F,$)};function y(E,P){return P=Math.max(o[0],Math.min(o[1],P)),P===E.k?E:new Xs(P,E.x,E.y)}function g(E,P,O){var F=P[0]-O[0]*E.k,$=P[1]-O[1]*E.k;return F===E.x&&$===E.y?E:new Xs(E.k,F,$)}function b(E){return[(+E[0][0]+ +E[1][0])/2,(+E[0][1]+ +E[1][1])/2]}function S(E,P,O,F){E.on("start.zoom",function(){w(this,arguments).event(F).start()}).on("interrupt.zoom end.zoom",function(){w(this,arguments).event(F).end()}).tween("zoom",function(){var $=this,D=arguments,N=w($,D).event(F),z=t.apply($,D),V=O==null?b(z):typeof O=="function"?O.apply($,D):O,H=Math.max(z[1][0]-z[0][0],z[1][1]-z[0][1]),X=$.__zoom,te=typeof P=="function"?P.apply($,D):P,ee=l(X.invert(V).concat(H/X.k),te.invert(V).concat(H/te.k));return function(j){if(j===1)j=te;else{var q=ee(j),Z=H/q[2];j=new Xs(Z,V[0]-q[0]*Z,V[1]-q[1]*Z)}N.zoom(null,j)}})}function w(E,P,O){return!O&&E.__zooming||new C(E,P)}function C(E,P){this.that=E,this.args=P,this.active=0,this.sourceEvent=null,this.extent=t.apply(E,P),this.taps=0}C.prototype={event:function(E){return E&&(this.sourceEvent=E),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(E,P){return this.mouse&&E!=="mouse"&&(this.mouse[1]=P.invert(this.mouse[0])),this.touch0&&E!=="touch"&&(this.touch0[1]=P.invert(this.touch0[0])),this.touch1&&E!=="touch"&&(this.touch1[1]=P.invert(this.touch1[0])),this.that.__zoom=P,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(E){var P=xo(this.that).datum();c.call(E,this.that,new Q0e(E,{sourceEvent:this.sourceEvent,target:v,type:E,transform:this.that.__zoom,dispatch:c}),P)}};function x(E,...P){if(!e.apply(this,arguments))return;var O=w(this,P).event(E),F=this.__zoom,$=Math.max(o[0],Math.min(o[1],F.k*Math.pow(2,r.apply(this,arguments)))),D=Jo(E);if(O.wheel)(O.mouse[0][0]!==D[0]||O.mouse[0][1]!==D[1])&&(O.mouse[1]=F.invert(O.mouse[0]=D)),clearTimeout(O.wheel);else{if(F.k===$)return;O.mouse=[D,F.invert(D)],iv(this),O.start()}mh(E),O.wheel=setTimeout(N,p),O.zoom("mouse",n(g(y(F,$),O.mouse[0],O.mouse[1]),O.extent,s));function N(){O.wheel=null,O.end()}}function k(E,...P){if(f||!e.apply(this,arguments))return;var O=E.currentTarget,F=w(this,P,!0).event(E),$=xo(E.view).on("mousemove.zoom",V,!0).on("mouseup.zoom",H,!0),D=Jo(E,O),N=E.clientX,z=E.clientY;gz(E.view),aw(E),F.mouse=[D,this.__zoom.invert(D)],iv(this),F.start();function V(X){if(mh(X),!F.moved){var te=X.clientX-N,ee=X.clientY-z;F.moved=te*te+ee*ee>m}F.event(X).zoom("mouse",n(g(F.that.__zoom,F.mouse[0]=Jo(X,O),F.mouse[1]),F.extent,s))}function H(X){$.on("mousemove.zoom mouseup.zoom",null),mz(X.view,F.moved),mh(X),F.event(X).end()}}function A(E,...P){if(e.apply(this,arguments)){var O=this.__zoom,F=Jo(E.changedTouches?E.changedTouches[0]:E,this),$=O.invert(F),D=O.k*(E.shiftKey?.5:2),N=n(g(y(O,D),F,$),t.apply(this,P),s);mh(E),a>0?xo(this).transition().duration(a).call(S,N,F,E):xo(this).call(v.transform,N,F,E)}}function R(E,...P){if(e.apply(this,arguments)){var O=E.touches,F=O.length,$=w(this,P,E.changedTouches.length===F).event(E),D,N,z,V;for(aw(E),N=0;N"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,t)=>`Couldn't create edge for ${e?"target":"source"} handle id: "${e?t.targetHandle:t.sourceHandle}", edge id: ${t.id}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`},Iz=fa.error001();function rn(e,t){const n=I.useContext(aS);if(n===null)throw new Error(Iz);return nz(n,e,t)}const Gn=()=>{const e=I.useContext(aS);if(e===null)throw new Error(Iz);return I.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe,destroy:e.destroy}),[e])},iye=e=>e.userSelectionActive?"none":"all";function oye({position:e,children:t,className:n,style:r,...i}){const o=rn(iye),s=`${e}`.split("-");return Q.createElement("div",{className:no(["react-flow__panel",n,...s]),style:{...r,pointerEvents:o},...i},t)}function sye({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:Q.createElement(oye,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro"},Q.createElement("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution"},"React Flow"))}const aye=({x:e,y:t,label:n,labelStyle:r={},labelShowBg:i=!0,labelBgStyle:o={},labelBgPadding:s=[2,4],labelBgBorderRadius:a=2,children:l,className:c,...u})=>{const d=I.useRef(null),[f,h]=I.useState({x:0,y:0,width:0,height:0}),p=no(["react-flow__edge-textwrapper",c]);return I.useEffect(()=>{if(d.current){const m=d.current.getBBox();h({x:m.x,y:m.y,width:m.width,height:m.height})}},[n]),typeof n>"u"||!n?null:Q.createElement("g",{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:p,visibility:f.width?"visible":"hidden",...u},i&&Q.createElement("rect",{width:f.width+2*s[0],x:-s[0],y:-s[1],height:f.height+2*s[1],className:"react-flow__edge-textbg",style:o,rx:a,ry:a}),Q.createElement("text",{className:"react-flow__edge-text",y:f.height/2,dy:"0.3em",ref:d,style:r},n),l)};var lye=I.memo(aye);const AT=e=>({width:e.offsetWidth,height:e.offsetHeight}),mf=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),kT=(e={x:0,y:0},t)=>({x:mf(e.x,t[0][0],t[1][0]),y:mf(e.y,t[0][1],t[1][1])}),c8=(e,t,n)=>en?-mf(Math.abs(e-n),1,50)/50:0,Mz=(e,t)=>{const n=c8(e.x,35,t.width-35)*20,r=c8(e.y,35,t.height-35)*20;return[n,r]},Rz=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},Oz=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Tg=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),$z=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),u8=e=>({...e.positionAbsolute||{x:0,y:0},width:e.width||0,height:e.height||0}),nHe=(e,t)=>$z(Oz(Tg(e),Tg(t))),s3=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},cye=e=>Xi(e.width)&&Xi(e.height)&&Xi(e.x)&&Xi(e.y),Xi=e=>!isNaN(e)&&isFinite(e),Tn=Symbol.for("internals"),Nz=["Enter"," ","Escape"],uye=(e,t)=>{},dye=e=>"nativeEvent"in e;function a3(e){var i,o;const t=dye(e)?e.nativeEvent:e,n=((o=(i=t.composedPath)==null?void 0:i.call(t))==null?void 0:o[0])||e.target;return["INPUT","SELECT","TEXTAREA"].includes(n==null?void 0:n.nodeName)||(n==null?void 0:n.hasAttribute("contenteditable"))||!!(n!=null&&n.closest(".nokey"))}const Fz=e=>"clientX"in e,fl=(e,t)=>{var o,s;const n=Fz(e),r=n?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,i=n?e.clientY:(s=e.touches)==null?void 0:s[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:i-((t==null?void 0:t.top)??0)}},$1=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0},Vm=({id:e,path:t,labelX:n,labelY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h=20})=>Q.createElement(Q.Fragment,null,Q.createElement("path",{id:e,style:u,d:t,fill:"none",className:"react-flow__edge-path",markerEnd:d,markerStart:f}),h&&Q.createElement("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}),i&&Xi(n)&&Xi(r)?Q.createElement(lye,{x:n,y:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c}):null);Vm.displayName="BaseEdge";function yh(e,t,n){return n===void 0?n:r=>{const i=t().edges.find(o=>o.id===e);i&&n(r,{...i})}}function Dz({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e)/2,o=n{const[_,v,y]=Bz({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o});return Q.createElement(Vm,{path:_,labelX:v,labelY:y,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:m})});PT.displayName="SimpleBezierEdge";const f8={[Te.Left]:{x:-1,y:0},[Te.Right]:{x:1,y:0},[Te.Top]:{x:0,y:-1},[Te.Bottom]:{x:0,y:1}},fye=({source:e,sourcePosition:t=Te.Bottom,target:n})=>t===Te.Left||t===Te.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function hye({source:e,sourcePosition:t=Te.Bottom,target:n,targetPosition:r=Te.Top,center:i,offset:o}){const s=f8[t],a=f8[r],l={x:e.x+s.x*o,y:e.y+s.y*o},c={x:n.x+a.x*o,y:n.y+a.y*o},u=fye({source:l,sourcePosition:t,target:c}),d=u.x!==0?"x":"y",f=u[d];let h=[],p,m;const _={x:0,y:0},v={x:0,y:0},[y,g,b,S]=Dz({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[d]*a[d]===-1){p=i.x||y,m=i.y||g;const C=[{x:p,y:l.y},{x:p,y:c.y}],x=[{x:l.x,y:m},{x:c.x,y:m}];s[d]===f?h=d==="x"?C:x:h=d==="x"?x:C}else{const C=[{x:l.x,y:c.y}],x=[{x:c.x,y:l.y}];if(d==="x"?h=s.x===f?x:C:h=s.y===f?C:x,t===r){const M=Math.abs(e[d]-n[d]);if(M<=o){const E=Math.min(o-1,o-M);s[d]===f?_[d]=(l[d]>e[d]?-1:1)*E:v[d]=(c[d]>n[d]?-1:1)*E}}if(t!==r){const M=d==="x"?"y":"x",E=s[d]===a[M],P=l[M]>c[M],O=l[M]=L?(p=(k.x+A.x)/2,m=h[0].y):(p=h[0].x,m=(k.y+A.y)/2)}return[[e,{x:l.x+_.x,y:l.y+_.y},...h,{x:c.x+v.x,y:c.y+v.y},n],p,m,b,S]}function pye(e,t,n,r){const i=Math.min(h8(e,t)/2,h8(t,n)/2,r),{x:o,y:s}=t;if(e.x===o&&o===n.x||e.y===s&&s===n.y)return`L${o} ${s}`;if(e.y===s){const c=e.x{let g="";return y>0&&y{const[v,y,g]=l3({sourceX:e,sourceY:t,sourcePosition:d,targetX:n,targetY:r,targetPosition:f,borderRadius:m==null?void 0:m.borderRadius,offset:m==null?void 0:m.offset});return Q.createElement(Vm,{path:v,labelX:y,labelY:g,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:h,markerStart:p,interactionWidth:_})});lS.displayName="SmoothStepEdge";const IT=I.memo(e=>{var t;return Q.createElement(lS,{...e,pathOptions:I.useMemo(()=>{var n;return{borderRadius:0,offset:(n=e.pathOptions)==null?void 0:n.offset}},[(t=e.pathOptions)==null?void 0:t.offset])})});IT.displayName="StepEdge";function gye({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[i,o,s,a]=Dz({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,o,s,a]}const MT=I.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h})=>{const[p,m,_]=gye({sourceX:e,sourceY:t,targetX:n,targetY:r});return Q.createElement(Vm,{path:p,labelX:m,labelY:_,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h})});MT.displayName="StraightEdge";function ey(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function p8({pos:e,x1:t,y1:n,x2:r,y2:i,c:o}){switch(e){case Te.Left:return[t-ey(t-r,o),n];case Te.Right:return[t+ey(r-t,o),n];case Te.Top:return[t,n-ey(n-i,o)];case Te.Bottom:return[t,n+ey(i-n,o)]}}function zz({sourceX:e,sourceY:t,sourcePosition:n=Te.Bottom,targetX:r,targetY:i,targetPosition:o=Te.Top,curvature:s=.25}){const[a,l]=p8({pos:n,x1:e,y1:t,x2:r,y2:i,c:s}),[c,u]=p8({pos:o,x1:r,y1:i,x2:e,y2:t,c:s}),[d,f,h,p]=Lz({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:a,sourceControlY:l,targetControlX:c,targetControlY:u});return[`M${e},${t} C${a},${l} ${c},${u} ${r},${i}`,d,f,h,p]}const F1=I.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i=Te.Bottom,targetPosition:o=Te.Top,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,pathOptions:m,interactionWidth:_})=>{const[v,y,g]=zz({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o,curvature:m==null?void 0:m.curvature});return Q.createElement(Vm,{path:v,labelX:y,labelY:g,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:_})});F1.displayName="BezierEdge";const RT=I.createContext(null),mye=RT.Provider;RT.Consumer;const yye=()=>I.useContext(RT),vye=e=>"id"in e&&"source"in e&&"target"in e,jz=e=>"id"in e&&!("source"in e)&&!("target"in e),bye=(e,t,n)=>{if(!jz(e))return[];const r=n.filter(i=>i.source===e.id).map(i=>i.target);return t.filter(i=>r.includes(i.id))},_ye=(e,t,n)=>{if(!jz(e))return[];const r=n.filter(i=>i.target===e.id).map(i=>i.source);return t.filter(i=>r.includes(i.id))},Vz=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`reactflow__edge-${e}${t||""}-${n}${r||""}`,c3=(e,t)=>typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`,Sye=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),Wh=(e,t)=>{if(!e.source||!e.target)return t;let n;return vye(e)?n={...e}:n={...e,id:Vz(e)},Sye(n,t)?t:t.concat(n)},xye=(e,t,n,r={shouldReplaceId:!0})=>{const{id:i,...o}=e;if(!t.source||!t.target||!n.find(l=>l.id===i))return n;const a={...o,id:r.shouldReplaceId?Vz(t):i,source:t.source,target:t.target,sourceHandle:t.sourceHandle,targetHandle:t.targetHandle};return n.filter(l=>l.id!==i).concat(a)},u3=({x:e,y:t},[n,r,i],o,[s,a])=>{const l={x:(e-n)/i,y:(t-r)/i};return o?{x:s*Math.round(l.x/s),y:a*Math.round(l.y/a)}:l},Uz=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r}),Dd=(e,t=[0,0])=>{if(!e)return{x:0,y:0,positionAbsolute:{x:0,y:0}};const n=(e.width??0)*t[0],r=(e.height??0)*t[1],i={x:e.position.x-n,y:e.position.y-r};return{...i,positionAbsolute:e.positionAbsolute?{x:e.positionAbsolute.x-n,y:e.positionAbsolute.y-r}:i}},OT=(e,t=[0,0])=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,i)=>{const{x:o,y:s}=Dd(i,t).positionAbsolute;return Oz(r,Tg({x:o,y:s,width:i.width||0,height:i.height||0}))},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return $z(n)},Gz=(e,t,[n,r,i]=[0,0,1],o=!1,s=!1,a=[0,0])=>{const l={x:(t.x-n)/i,y:(t.y-r)/i,width:t.width/i,height:t.height/i},c=[];return e.forEach(u=>{const{width:d,height:f,selectable:h=!0,hidden:p=!1}=u;if(s&&!h||p)return!1;const{positionAbsolute:m}=Dd(u,a),_={x:m.x,y:m.y,width:d||0,height:f||0},v=s3(l,_),y=typeof d>"u"||typeof f>"u"||d===null||f===null,g=o&&v>0,b=(d||0)*(f||0);(y||g||v>=b||u.dragging)&&c.push(u)}),c},$T=(e,t)=>{const n=e.map(r=>r.id);return t.filter(r=>n.includes(r.source)||n.includes(r.target))},Hz=(e,t,n,r,i,o=.1)=>{const s=t/(e.width*(1+o)),a=n/(e.height*(1+o)),l=Math.min(s,a),c=mf(l,r,i),u=e.x+e.width/2,d=e.y+e.height/2,f=t/2-u*c,h=n/2-d*c;return{x:f,y:h,zoom:c}},ac=(e,t=0)=>e.transition().duration(t);function g8(e,t,n,r){return(t[n]||[]).reduce((i,o)=>{var s,a;return`${e.id}-${o.id}-${n}`!==r&&i.push({id:o.id||null,type:n,nodeId:e.id,x:(((s=e.positionAbsolute)==null?void 0:s.x)??0)+o.x+o.width/2,y:(((a=e.positionAbsolute)==null?void 0:a.y)??0)+o.y+o.height/2}),i},[])}function wye(e,t,n,r,i,o){const{x:s,y:a}=fl(e),c=t.elementsFromPoint(s,a).find(p=>p.classList.contains("react-flow__handle"));if(c){const p=c.getAttribute("data-nodeid");if(p){const m=NT(void 0,c),_=c.getAttribute("data-handleid"),v=o({nodeId:p,id:_,type:m});if(v){const y=i.find(g=>g.nodeId===p&&g.type===m&&g.id===_);return{handle:{id:_,type:m,nodeId:p,x:(y==null?void 0:y.x)||n.x,y:(y==null?void 0:y.y)||n.y},validHandleResult:v}}}}let u=[],d=1/0;if(i.forEach(p=>{const m=Math.sqrt((p.x-n.x)**2+(p.y-n.y)**2);if(m<=r){const _=o(p);m<=d&&(mp.isValid),h=u.some(({handle:p})=>p.type==="target");return u.find(({handle:p,validHandleResult:m})=>h?p.type==="target":f?m.isValid:!0)||u[0]}const Cye={source:null,target:null,sourceHandle:null,targetHandle:null},Wz=()=>({handleDomNode:null,isValid:!1,connection:Cye,endHandle:null});function qz(e,t,n,r,i,o,s){const a=i==="target",l=s.querySelector(`.react-flow__handle[data-id="${e==null?void 0:e.nodeId}-${e==null?void 0:e.id}-${e==null?void 0:e.type}"]`),c={...Wz(),handleDomNode:l};if(l){const u=NT(void 0,l),d=l.getAttribute("data-nodeid"),f=l.getAttribute("data-handleid"),h=l.classList.contains("connectable"),p=l.classList.contains("connectableend"),m={source:a?d:n,sourceHandle:a?f:r,target:a?n:d,targetHandle:a?r:f};c.connection=m,h&&p&&(t===iu.Strict?a&&u==="source"||!a&&u==="target":d!==n||f!==r)&&(c.endHandle={nodeId:d,handleId:f,type:u},c.isValid=o(m))}return c}function Eye({nodes:e,nodeId:t,handleId:n,handleType:r}){return e.reduce((i,o)=>{if(o[Tn]){const{handleBounds:s}=o[Tn];let a=[],l=[];s&&(a=g8(o,s,"source",`${t}-${n}-${r}`),l=g8(o,s,"target",`${t}-${n}-${r}`)),i.push(...a,...l)}return i},[])}function NT(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function lw(e){e==null||e.classList.remove("valid","connecting","react-flow__handle-valid","react-flow__handle-connecting")}function Tye(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function Kz({event:e,handleId:t,nodeId:n,onConnect:r,isTarget:i,getState:o,setState:s,isValidConnection:a,edgeUpdaterType:l,onEdgeUpdateEnd:c}){const u=Rz(e.target),{connectionMode:d,domNode:f,autoPanOnConnect:h,connectionRadius:p,onConnectStart:m,panBy:_,getNodes:v,cancelConnection:y}=o();let g=0,b;const{x:S,y:w}=fl(e),C=u==null?void 0:u.elementFromPoint(S,w),x=NT(l,C),k=f==null?void 0:f.getBoundingClientRect();if(!k||!x)return;let A,R=fl(e,k),L=!1,M=null,E=!1,P=null;const O=Eye({nodes:v(),nodeId:n,handleId:t,handleType:x}),F=()=>{if(!h)return;const[N,z]=Mz(R,k);_({x:N,y:z}),g=requestAnimationFrame(F)};s({connectionPosition:R,connectionStatus:null,connectionNodeId:n,connectionHandleId:t,connectionHandleType:x,connectionStartHandle:{nodeId:n,handleId:t,type:x},connectionEndHandle:null}),m==null||m(e,{nodeId:n,handleId:t,handleType:x});function $(N){const{transform:z}=o();R=fl(N,k);const{handle:V,validHandleResult:H}=wye(N,u,u3(R,z,!1,[1,1]),p,O,X=>qz(X,d,n,t,i?"target":"source",a,u));if(b=V,L||(F(),L=!0),P=H.handleDomNode,M=H.connection,E=H.isValid,s({connectionPosition:b&&E?Uz({x:b.x,y:b.y},z):R,connectionStatus:Tye(!!b,E),connectionEndHandle:H.endHandle}),!b&&!E&&!P)return lw(A);M.source!==M.target&&P&&(lw(A),A=P,P.classList.add("connecting","react-flow__handle-connecting"),P.classList.toggle("valid",E),P.classList.toggle("react-flow__handle-valid",E))}function D(N){var z,V;(b||P)&&M&&E&&(r==null||r(M)),(V=(z=o()).onConnectEnd)==null||V.call(z,N),l&&(c==null||c(N)),lw(A),y(),cancelAnimationFrame(g),L=!1,E=!1,M=null,P=null,u.removeEventListener("mousemove",$),u.removeEventListener("mouseup",D),u.removeEventListener("touchmove",$),u.removeEventListener("touchend",D)}u.addEventListener("mousemove",$),u.addEventListener("mouseup",D),u.addEventListener("touchmove",$),u.addEventListener("touchend",D)}const m8=()=>!0,Aye=e=>({connectionStartHandle:e.connectionStartHandle,connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName}),kye=(e,t,n)=>r=>{const{connectionStartHandle:i,connectionEndHandle:o,connectionClickStartHandle:s}=r;return{connecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.handleId)===t&&(i==null?void 0:i.type)===n||(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.handleId)===t&&(o==null?void 0:o.type)===n,clickConnecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.handleId)===t&&(s==null?void 0:s.type)===n}},Xz=I.forwardRef(({type:e="source",position:t=Te.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,id:s,onConnect:a,children:l,className:c,onMouseDown:u,onTouchStart:d,...f},h)=>{var k,A;const p=s||null,m=e==="target",_=Gn(),v=yye(),{connectOnClick:y,noPanClassName:g}=rn(Aye,ti),{connecting:b,clickConnecting:S}=rn(kye(v,p,e),ti);v||(A=(k=_.getState()).onError)==null||A.call(k,"010",fa.error010());const w=R=>{const{defaultEdgeOptions:L,onConnect:M,hasDefaultEdges:E}=_.getState(),P={...L,...R};if(E){const{edges:O,setEdges:F}=_.getState();F(Wh(P,O))}M==null||M(P),a==null||a(P)},C=R=>{if(!v)return;const L=Fz(R);i&&(L&&R.button===0||!L)&&Kz({event:R,handleId:p,nodeId:v,onConnect:w,isTarget:m,getState:_.getState,setState:_.setState,isValidConnection:n||_.getState().isValidConnection||m8}),L?u==null||u(R):d==null||d(R)},x=R=>{const{onClickConnectStart:L,onClickConnectEnd:M,connectionClickStartHandle:E,connectionMode:P,isValidConnection:O}=_.getState();if(!v||!E&&!i)return;if(!E){L==null||L(R,{nodeId:v,handleId:p,handleType:e}),_.setState({connectionClickStartHandle:{nodeId:v,type:e,handleId:p}});return}const F=Rz(R.target),$=n||O||m8,{connection:D,isValid:N}=qz({nodeId:v,id:p,type:e},P,E.nodeId,E.handleId||null,E.type,$,F);N&&w(D),M==null||M(R),_.setState({connectionClickStartHandle:null})};return Q.createElement("div",{"data-handleid":p,"data-nodeid":v,"data-handlepos":t,"data-id":`${v}-${p}-${e}`,className:no(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",g,c,{source:!m,target:m,connectable:r,connectablestart:i,connectableend:o,connecting:S,connectionindicator:r&&(i&&!b||o&&b)}]),onMouseDown:C,onTouchStart:C,onClick:y?x:void 0,ref:h,...f},l)});Xz.displayName="Handle";var D1=I.memo(Xz);const Qz=({data:e,isConnectable:t,targetPosition:n=Te.Top,sourcePosition:r=Te.Bottom})=>Q.createElement(Q.Fragment,null,Q.createElement(D1,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,Q.createElement(D1,{type:"source",position:r,isConnectable:t}));Qz.displayName="DefaultNode";var d3=I.memo(Qz);const Yz=({data:e,isConnectable:t,sourcePosition:n=Te.Bottom})=>Q.createElement(Q.Fragment,null,e==null?void 0:e.label,Q.createElement(D1,{type:"source",position:n,isConnectable:t}));Yz.displayName="InputNode";var Zz=I.memo(Yz);const Jz=({data:e,isConnectable:t,targetPosition:n=Te.Top})=>Q.createElement(Q.Fragment,null,Q.createElement(D1,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label);Jz.displayName="OutputNode";var ej=I.memo(Jz);const FT=()=>null;FT.displayName="GroupNode";const Pye=e=>({selectedNodes:e.getNodes().filter(t=>t.selected),selectedEdges:e.edges.filter(t=>t.selected)}),ty=e=>e.id;function Iye(e,t){return ti(e.selectedNodes.map(ty),t.selectedNodes.map(ty))&&ti(e.selectedEdges.map(ty),t.selectedEdges.map(ty))}const tj=I.memo(({onSelectionChange:e})=>{const t=Gn(),{selectedNodes:n,selectedEdges:r}=rn(Pye,Iye);return I.useEffect(()=>{const i={nodes:n,edges:r};e==null||e(i),t.getState().onSelectionChange.forEach(o=>o(i))},[n,r,e]),null});tj.displayName="SelectionListener";const Mye=e=>!!e.onSelectionChange;function Rye({onSelectionChange:e}){const t=rn(Mye);return e||t?Q.createElement(tj,{onSelectionChange:e}):null}const Oye=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset});function $u(e,t){I.useEffect(()=>{typeof e<"u"&&t(e)},[e])}function je(e,t,n){I.useEffect(()=>{typeof t<"u"&&n({[e]:t})},[t])}const $ye=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:i,onConnectStart:o,onConnectEnd:s,onClickConnectStart:a,onClickConnectEnd:l,nodesDraggable:c,nodesConnectable:u,nodesFocusable:d,edgesFocusable:f,edgesUpdatable:h,elevateNodesOnSelect:p,minZoom:m,maxZoom:_,nodeExtent:v,onNodesChange:y,onEdgesChange:g,elementsSelectable:b,connectionMode:S,snapGrid:w,snapToGrid:C,translateExtent:x,connectOnClick:k,defaultEdgeOptions:A,fitView:R,fitViewOptions:L,onNodesDelete:M,onEdgesDelete:E,onNodeDrag:P,onNodeDragStart:O,onNodeDragStop:F,onSelectionDrag:$,onSelectionDragStart:D,onSelectionDragStop:N,noPanClassName:z,nodeOrigin:V,rfId:H,autoPanOnConnect:X,autoPanOnNodeDrag:te,onError:ee,connectionRadius:j,isValidConnection:q,nodeDragThreshold:Z})=>{const{setNodes:oe,setEdges:be,setDefaultNodesAndEdges:Me,setMinZoom:lt,setMaxZoom:Le,setTranslateExtent:we,setNodeExtent:pt,reset:vt}=rn(Oye,ti),Ce=Gn();return I.useEffect(()=>{const ii=r==null?void 0:r.map(sn=>({...sn,...A}));return Me(n,ii),()=>{vt()}},[]),je("defaultEdgeOptions",A,Ce.setState),je("connectionMode",S,Ce.setState),je("onConnect",i,Ce.setState),je("onConnectStart",o,Ce.setState),je("onConnectEnd",s,Ce.setState),je("onClickConnectStart",a,Ce.setState),je("onClickConnectEnd",l,Ce.setState),je("nodesDraggable",c,Ce.setState),je("nodesConnectable",u,Ce.setState),je("nodesFocusable",d,Ce.setState),je("edgesFocusable",f,Ce.setState),je("edgesUpdatable",h,Ce.setState),je("elementsSelectable",b,Ce.setState),je("elevateNodesOnSelect",p,Ce.setState),je("snapToGrid",C,Ce.setState),je("snapGrid",w,Ce.setState),je("onNodesChange",y,Ce.setState),je("onEdgesChange",g,Ce.setState),je("connectOnClick",k,Ce.setState),je("fitViewOnInit",R,Ce.setState),je("fitViewOnInitOptions",L,Ce.setState),je("onNodesDelete",M,Ce.setState),je("onEdgesDelete",E,Ce.setState),je("onNodeDrag",P,Ce.setState),je("onNodeDragStart",O,Ce.setState),je("onNodeDragStop",F,Ce.setState),je("onSelectionDrag",$,Ce.setState),je("onSelectionDragStart",D,Ce.setState),je("onSelectionDragStop",N,Ce.setState),je("noPanClassName",z,Ce.setState),je("nodeOrigin",V,Ce.setState),je("rfId",H,Ce.setState),je("autoPanOnConnect",X,Ce.setState),je("autoPanOnNodeDrag",te,Ce.setState),je("onError",ee,Ce.setState),je("connectionRadius",j,Ce.setState),je("isValidConnection",q,Ce.setState),je("nodeDragThreshold",Z,Ce.setState),$u(e,oe),$u(t,be),$u(m,lt),$u(_,Le),$u(x,we),$u(v,pt),null},y8={display:"none"},Nye={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},nj="react-flow__node-desc",rj="react-flow__edge-desc",Fye="react-flow__aria-live",Dye=e=>e.ariaLiveMessage;function Lye({rfId:e}){const t=rn(Dye);return Q.createElement("div",{id:`${Fye}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:Nye},t)}function Bye({rfId:e,disableKeyboardA11y:t}){return Q.createElement(Q.Fragment,null,Q.createElement("div",{id:`${nj}-${e}`,style:y8},"Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "),Q.createElement("div",{id:`${rj}-${e}`,style:y8},"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."),!t&&Q.createElement(Lye,{rfId:e}))}var Ag=(e=null,t={actInsideInputWithModifier:!0})=>{const[n,r]=I.useState(!1),i=I.useRef(!1),o=I.useRef(new Set([])),[s,a]=I.useMemo(()=>{if(e!==null){const c=(Array.isArray(e)?e:[e]).filter(d=>typeof d=="string").map(d=>d.split("+")),u=c.reduce((d,f)=>d.concat(...f),[]);return[c,u]}return[[],[]]},[e]);return I.useEffect(()=>{const l=typeof document<"u"?document:null,c=(t==null?void 0:t.target)||l;if(e!==null){const u=h=>{if(i.current=h.ctrlKey||h.metaKey||h.shiftKey,(!i.current||i.current&&!t.actInsideInputWithModifier)&&a3(h))return!1;const m=b8(h.code,a);o.current.add(h[m]),v8(s,o.current,!1)&&(h.preventDefault(),r(!0))},d=h=>{if((!i.current||i.current&&!t.actInsideInputWithModifier)&&a3(h))return!1;const m=b8(h.code,a);v8(s,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(h[m]),h.key==="Meta"&&o.current.clear(),i.current=!1},f=()=>{o.current.clear(),r(!1)};return c==null||c.addEventListener("keydown",u),c==null||c.addEventListener("keyup",d),window.addEventListener("blur",f),()=>{c==null||c.removeEventListener("keydown",u),c==null||c.removeEventListener("keyup",d),window.removeEventListener("blur",f)}}},[e,r]),n};function v8(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function b8(e,t){return t.includes(e)?"code":"key"}function ij(e,t,n,r){var s,a;if(!e.parentNode)return n;const i=t.get(e.parentNode),o=Dd(i,r);return ij(i,t,{x:(n.x??0)+o.x,y:(n.y??0)+o.y,z:(((s=i[Tn])==null?void 0:s.z)??0)>(n.z??0)?((a=i[Tn])==null?void 0:a.z)??0:n.z??0},r)}function oj(e,t,n){e.forEach(r=>{var i;if(r.parentNode&&!e.has(r.parentNode))throw new Error(`Parent node ${r.parentNode} not found`);if(r.parentNode||n!=null&&n[r.id]){const{x:o,y:s,z:a}=ij(r,e,{...r.position,z:((i=r[Tn])==null?void 0:i.z)??0},t);r.positionAbsolute={x:o,y:s},r[Tn].z=a,n!=null&&n[r.id]&&(r[Tn].isParent=!0)}})}function cw(e,t,n,r){const i=new Map,o={},s=r?1e3:0;return e.forEach(a=>{var d;const l=(Xi(a.zIndex)?a.zIndex:0)+(a.selected?s:0),c=t.get(a.id),u={width:c==null?void 0:c.width,height:c==null?void 0:c.height,...a,positionAbsolute:{x:a.position.x,y:a.position.y}};a.parentNode&&(u.parentNode=a.parentNode,o[a.parentNode]=!0),Object.defineProperty(u,Tn,{enumerable:!1,value:{handleBounds:(d=c==null?void 0:c[Tn])==null?void 0:d.handleBounds,z:l}}),i.set(a.id,u)}),oj(i,n,o),i}function sj(e,t={}){const{getNodes:n,width:r,height:i,minZoom:o,maxZoom:s,d3Zoom:a,d3Selection:l,fitViewOnInitDone:c,fitViewOnInit:u,nodeOrigin:d}=e(),f=t.initial&&!c&&u;if(a&&l&&(f||!t.initial)){const p=n().filter(_=>{var y;const v=t.includeHiddenNodes?_.width&&_.height:!_.hidden;return(y=t.nodes)!=null&&y.length?v&&t.nodes.some(g=>g.id===_.id):v}),m=p.every(_=>_.width&&_.height);if(p.length>0&&m){const _=OT(p,d),{x:v,y,zoom:g}=Hz(_,r,i,t.minZoom??o,t.maxZoom??s,t.padding??.1),b=dl.translate(v,y).scale(g);return typeof t.duration=="number"&&t.duration>0?a.transform(ac(l,t.duration),b):a.transform(l,b),!0}}return!1}function zye(e,t){return e.forEach(n=>{const r=t.get(n.id);r&&t.set(r.id,{...r,[Tn]:r[Tn],selected:n.selected})}),new Map(t)}function jye(e,t){return t.map(n=>{const r=e.find(i=>i.id===n.id);return r&&(n.selected=r.selected),n})}function ny({changedNodes:e,changedEdges:t,get:n,set:r}){const{nodeInternals:i,edges:o,onNodesChange:s,onEdgesChange:a,hasDefaultNodes:l,hasDefaultEdges:c}=n();e!=null&&e.length&&(l&&r({nodeInternals:zye(e,i)}),s==null||s(e)),t!=null&&t.length&&(c&&r({edges:jye(t,o)}),a==null||a(t))}const Nu=()=>{},Vye={zoomIn:Nu,zoomOut:Nu,zoomTo:Nu,getZoom:()=>1,setViewport:Nu,getViewport:()=>({x:0,y:0,zoom:1}),fitView:()=>!1,setCenter:Nu,fitBounds:Nu,project:e=>e,screenToFlowPosition:e=>e,flowToScreenPosition:e=>e,viewportInitialized:!1},Uye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection}),Gye=()=>{const e=Gn(),{d3Zoom:t,d3Selection:n}=rn(Uye,ti);return I.useMemo(()=>n&&t?{zoomIn:i=>t.scaleBy(ac(n,i==null?void 0:i.duration),1.2),zoomOut:i=>t.scaleBy(ac(n,i==null?void 0:i.duration),1/1.2),zoomTo:(i,o)=>t.scaleTo(ac(n,o==null?void 0:o.duration),i),getZoom:()=>e.getState().transform[2],setViewport:(i,o)=>{const[s,a,l]=e.getState().transform,c=dl.translate(i.x??s,i.y??a).scale(i.zoom??l);t.transform(ac(n,o==null?void 0:o.duration),c)},getViewport:()=>{const[i,o,s]=e.getState().transform;return{x:i,y:o,zoom:s}},fitView:i=>sj(e.getState,i),setCenter:(i,o,s)=>{const{width:a,height:l,maxZoom:c}=e.getState(),u=typeof(s==null?void 0:s.zoom)<"u"?s.zoom:c,d=a/2-i*u,f=l/2-o*u,h=dl.translate(d,f).scale(u);t.transform(ac(n,s==null?void 0:s.duration),h)},fitBounds:(i,o)=>{const{width:s,height:a,minZoom:l,maxZoom:c}=e.getState(),{x:u,y:d,zoom:f}=Hz(i,s,a,l,c,(o==null?void 0:o.padding)??.1),h=dl.translate(u,d).scale(f);t.transform(ac(n,o==null?void 0:o.duration),h)},project:i=>{const{transform:o,snapToGrid:s,snapGrid:a}=e.getState();return console.warn("[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position"),u3(i,o,s,a)},screenToFlowPosition:i=>{const{transform:o,snapToGrid:s,snapGrid:a,domNode:l}=e.getState();if(!l)return i;const{x:c,y:u}=l.getBoundingClientRect(),d={x:i.x-c,y:i.y-u};return u3(d,o,s,a)},flowToScreenPosition:i=>{const{transform:o,domNode:s}=e.getState();if(!s)return i;const{x:a,y:l}=s.getBoundingClientRect(),c=Uz(i,o);return{x:c.x+a,y:c.y+l}},viewportInitialized:!0}:Vye,[t,n])};function aj(){const e=Gye(),t=Gn(),n=I.useCallback(()=>t.getState().getNodes().map(m=>({...m})),[]),r=I.useCallback(m=>t.getState().nodeInternals.get(m),[]),i=I.useCallback(()=>{const{edges:m=[]}=t.getState();return m.map(_=>({..._}))},[]),o=I.useCallback(m=>{const{edges:_=[]}=t.getState();return _.find(v=>v.id===m)},[]),s=I.useCallback(m=>{const{getNodes:_,setNodes:v,hasDefaultNodes:y,onNodesChange:g}=t.getState(),b=_(),S=typeof m=="function"?m(b):m;if(y)v(S);else if(g){const w=S.length===0?b.map(C=>({type:"remove",id:C.id})):S.map(C=>({item:C,type:"reset"}));g(w)}},[]),a=I.useCallback(m=>{const{edges:_=[],setEdges:v,hasDefaultEdges:y,onEdgesChange:g}=t.getState(),b=typeof m=="function"?m(_):m;if(y)v(b);else if(g){const S=b.length===0?_.map(w=>({type:"remove",id:w.id})):b.map(w=>({item:w,type:"reset"}));g(S)}},[]),l=I.useCallback(m=>{const _=Array.isArray(m)?m:[m],{getNodes:v,setNodes:y,hasDefaultNodes:g,onNodesChange:b}=t.getState();if(g){const w=[...v(),..._];y(w)}else if(b){const S=_.map(w=>({item:w,type:"add"}));b(S)}},[]),c=I.useCallback(m=>{const _=Array.isArray(m)?m:[m],{edges:v=[],setEdges:y,hasDefaultEdges:g,onEdgesChange:b}=t.getState();if(g)y([...v,..._]);else if(b){const S=_.map(w=>({item:w,type:"add"}));b(S)}},[]),u=I.useCallback(()=>{const{getNodes:m,edges:_=[],transform:v}=t.getState(),[y,g,b]=v;return{nodes:m().map(S=>({...S})),edges:_.map(S=>({...S})),viewport:{x:y,y:g,zoom:b}}},[]),d=I.useCallback(({nodes:m,edges:_})=>{const{nodeInternals:v,getNodes:y,edges:g,hasDefaultNodes:b,hasDefaultEdges:S,onNodesDelete:w,onEdgesDelete:C,onNodesChange:x,onEdgesChange:k}=t.getState(),A=(m||[]).map(P=>P.id),R=(_||[]).map(P=>P.id),L=y().reduce((P,O)=>{const F=!A.includes(O.id)&&O.parentNode&&P.find(D=>D.id===O.parentNode);return(typeof O.deletable=="boolean"?O.deletable:!0)&&(A.includes(O.id)||F)&&P.push(O),P},[]),M=g.filter(P=>typeof P.deletable=="boolean"?P.deletable:!0),E=M.filter(P=>R.includes(P.id));if(L||E){const P=$T(L,M),O=[...E,...P],F=O.reduce(($,D)=>($.includes(D.id)||$.push(D.id),$),[]);if((S||b)&&(S&&t.setState({edges:g.filter($=>!F.includes($.id))}),b&&(L.forEach($=>{v.delete($.id)}),t.setState({nodeInternals:new Map(v)}))),F.length>0&&(C==null||C(O),k&&k(F.map($=>({id:$,type:"remove"})))),L.length>0&&(w==null||w(L),x)){const $=L.map(D=>({id:D.id,type:"remove"}));x($)}}},[]),f=I.useCallback(m=>{const _=cye(m),v=_?null:t.getState().nodeInternals.get(m.id);return[_?m:u8(v),v,_]},[]),h=I.useCallback((m,_=!0,v)=>{const[y,g,b]=f(m);return y?(v||t.getState().getNodes()).filter(S=>{if(!b&&(S.id===g.id||!S.positionAbsolute))return!1;const w=u8(S),C=s3(w,y);return _&&C>0||C>=y.width*y.height}):[]},[]),p=I.useCallback((m,_,v=!0)=>{const[y]=f(m);if(!y)return!1;const g=s3(y,_);return v&&g>0||g>=y.width*y.height},[]);return I.useMemo(()=>({...e,getNodes:n,getNode:r,getEdges:i,getEdge:o,setNodes:s,setEdges:a,addNodes:l,addEdges:c,toObject:u,deleteElements:d,getIntersectingNodes:h,isNodeIntersecting:p}),[e,n,r,i,o,s,a,l,c,u,d,h,p])}const Hye={actInsideInputWithModifier:!1};var Wye=({deleteKeyCode:e,multiSelectionKeyCode:t})=>{const n=Gn(),{deleteElements:r}=aj(),i=Ag(e,Hye),o=Ag(t);I.useEffect(()=>{if(i){const{edges:s,getNodes:a}=n.getState(),l=a().filter(u=>u.selected),c=s.filter(u=>u.selected);r({nodes:l,edges:c}),n.setState({nodesSelectionActive:!1})}},[i]),I.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])};function qye(e){const t=Gn();I.useEffect(()=>{let n;const r=()=>{var o,s;if(!e.current)return;const i=AT(e.current);(i.height===0||i.width===0)&&((s=(o=t.getState()).onError)==null||s.call(o,"004",fa.error004())),t.setState({width:i.width||500,height:i.height||500})};return r(),window.addEventListener("resize",r),e.current&&(n=new ResizeObserver(()=>r()),n.observe(e.current)),()=>{window.removeEventListener("resize",r),n&&e.current&&n.unobserve(e.current)}},[])}const DT={position:"absolute",width:"100%",height:"100%",top:0,left:0},Kye=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,ry=e=>({x:e.x,y:e.y,zoom:e.k}),Fu=(e,t)=>e.target.closest(`.${t}`),_8=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),S8=e=>{const t=e.ctrlKey&&$1()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t},Xye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection,d3ZoomHandler:e.d3ZoomHandler,userSelectionActive:e.userSelectionActive}),Qye=({onMove:e,onMoveStart:t,onMoveEnd:n,onPaneContextMenu:r,zoomOnScroll:i=!0,zoomOnPinch:o=!0,panOnScroll:s=!1,panOnScrollSpeed:a=.5,panOnScrollMode:l=wc.Free,zoomOnDoubleClick:c=!0,elementsSelectable:u,panOnDrag:d=!0,defaultViewport:f,translateExtent:h,minZoom:p,maxZoom:m,zoomActivationKeyCode:_,preventScrolling:v=!0,children:y,noWheelClassName:g,noPanClassName:b})=>{const S=I.useRef(),w=Gn(),C=I.useRef(!1),x=I.useRef(!1),k=I.useRef(null),A=I.useRef({x:0,y:0,zoom:0}),{d3Zoom:R,d3Selection:L,d3ZoomHandler:M,userSelectionActive:E}=rn(Xye,ti),P=Ag(_),O=I.useRef(0),F=I.useRef(!1),$=I.useRef();return qye(k),I.useEffect(()=>{if(k.current){const D=k.current.getBoundingClientRect(),N=nye().scaleExtent([p,m]).translateExtent(h),z=xo(k.current).call(N),V=dl.translate(f.x,f.y).scale(mf(f.zoom,p,m)),H=[[0,0],[D.width,D.height]],X=N.constrain()(V,H,h);N.transform(z,X),N.wheelDelta(S8),w.setState({d3Zoom:N,d3Selection:z,d3ZoomHandler:z.on("wheel.zoom"),transform:[X.x,X.y,X.k],domNode:k.current.closest(".react-flow")})}},[]),I.useEffect(()=>{L&&R&&(s&&!P&&!E?L.on("wheel.zoom",D=>{if(Fu(D,g))return!1;D.preventDefault(),D.stopImmediatePropagation();const N=L.property("__zoom").k||1,z=$1();if(D.ctrlKey&&o&&z){const Z=Jo(D),oe=S8(D),be=N*Math.pow(2,oe);R.scaleTo(L,be,Z,D);return}const V=D.deltaMode===1?20:1;let H=l===wc.Vertical?0:D.deltaX*V,X=l===wc.Horizontal?0:D.deltaY*V;!z&&D.shiftKey&&l!==wc.Vertical&&(H=D.deltaY*V,X=0),R.translateBy(L,-(H/N)*a,-(X/N)*a,{internal:!0});const te=ry(L.property("__zoom")),{onViewportChangeStart:ee,onViewportChange:j,onViewportChangeEnd:q}=w.getState();clearTimeout($.current),F.current||(F.current=!0,t==null||t(D,te),ee==null||ee(te)),F.current&&(e==null||e(D,te),j==null||j(te),$.current=setTimeout(()=>{n==null||n(D,te),q==null||q(te),F.current=!1},150))},{passive:!1}):typeof M<"u"&&L.on("wheel.zoom",function(D,N){if(!v||Fu(D,g))return null;D.preventDefault(),M.call(this,D,N)},{passive:!1}))},[E,s,l,L,R,M,P,o,v,g,t,e,n]),I.useEffect(()=>{R&&R.on("start",D=>{var V,H;if(!D.sourceEvent||D.sourceEvent.internal)return null;O.current=(V=D.sourceEvent)==null?void 0:V.button;const{onViewportChangeStart:N}=w.getState(),z=ry(D.transform);C.current=!0,A.current=z,((H=D.sourceEvent)==null?void 0:H.type)==="mousedown"&&w.setState({paneDragging:!0}),N==null||N(z),t==null||t(D.sourceEvent,z)})},[R,t]),I.useEffect(()=>{R&&(E&&!C.current?R.on("zoom",null):E||R.on("zoom",D=>{var z;const{onViewportChange:N}=w.getState();if(w.setState({transform:[D.transform.x,D.transform.y,D.transform.k]}),x.current=!!(r&&_8(d,O.current??0)),(e||N)&&!((z=D.sourceEvent)!=null&&z.internal)){const V=ry(D.transform);N==null||N(V),e==null||e(D.sourceEvent,V)}}))},[E,R,e,d,r]),I.useEffect(()=>{R&&R.on("end",D=>{if(!D.sourceEvent||D.sourceEvent.internal)return null;const{onViewportChangeEnd:N}=w.getState();if(C.current=!1,w.setState({paneDragging:!1}),r&&_8(d,O.current??0)&&!x.current&&r(D.sourceEvent),x.current=!1,(n||N)&&Kye(A.current,D.transform)){const z=ry(D.transform);A.current=z,clearTimeout(S.current),S.current=setTimeout(()=>{N==null||N(z),n==null||n(D.sourceEvent,z)},s?150:0)}})},[R,s,d,n,r]),I.useEffect(()=>{R&&R.filter(D=>{const N=P||i,z=o&&D.ctrlKey;if((d===!0||Array.isArray(d)&&d.includes(1))&&D.button===1&&D.type==="mousedown"&&(Fu(D,"react-flow__node")||Fu(D,"react-flow__edge")))return!0;if(!d&&!N&&!s&&!c&&!o||E||!c&&D.type==="dblclick"||Fu(D,g)&&D.type==="wheel"||Fu(D,b)&&(D.type!=="wheel"||s&&D.type==="wheel"&&!P)||!o&&D.ctrlKey&&D.type==="wheel"||!N&&!s&&!z&&D.type==="wheel"||!d&&(D.type==="mousedown"||D.type==="touchstart")||Array.isArray(d)&&!d.includes(D.button)&&(D.type==="mousedown"||D.type==="touchstart"))return!1;const V=Array.isArray(d)&&d.includes(D.button)||!D.button||D.button<=1;return(!D.ctrlKey||D.type==="wheel")&&V})},[E,R,i,o,s,c,d,u,P]),Q.createElement("div",{className:"react-flow__renderer",ref:k,style:DT},y)},Yye=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Zye(){const{userSelectionActive:e,userSelectionRect:t}=rn(Yye,ti);return e&&t?Q.createElement("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}function x8(e,t){const n=e.find(r=>r.id===t.parentNode);if(n){const r=t.position.x+t.width-n.width,i=t.position.y+t.height-n.height;if(r>0||i>0||t.position.x<0||t.position.y<0){if(n.style={...n.style},n.style.width=n.style.width??n.width,n.style.height=n.style.height??n.height,r>0&&(n.style.width+=r),i>0&&(n.style.height+=i),t.position.x<0){const o=Math.abs(t.position.x);n.position.x=n.position.x-o,n.style.width+=o,t.position.x=0}if(t.position.y<0){const o=Math.abs(t.position.y);n.position.y=n.position.y-o,n.style.height+=o,t.position.y=0}n.width=n.style.width,n.height=n.style.height}}}function lj(e,t){if(e.some(r=>r.type==="reset"))return e.filter(r=>r.type==="reset").map(r=>r.item);const n=e.filter(r=>r.type==="add").map(r=>r.item);return t.reduce((r,i)=>{const o=e.filter(a=>a.id===i.id);if(o.length===0)return r.push(i),r;const s={...i};for(const a of o)if(a)switch(a.type){case"select":{s.selected=a.selected;break}case"position":{typeof a.position<"u"&&(s.position=a.position),typeof a.positionAbsolute<"u"&&(s.positionAbsolute=a.positionAbsolute),typeof a.dragging<"u"&&(s.dragging=a.dragging),s.expandParent&&x8(r,s);break}case"dimensions":{typeof a.dimensions<"u"&&(s.width=a.dimensions.width,s.height=a.dimensions.height),typeof a.updateStyle<"u"&&(s.style={...s.style||{},...a.dimensions}),typeof a.resizing=="boolean"&&(s.resizing=a.resizing),s.expandParent&&x8(r,s);break}case"remove":return r}return r.push(s),r},n)}function lc(e,t){return lj(e,t)}function Ql(e,t){return lj(e,t)}const ja=(e,t)=>({id:e,type:"select",selected:t});function cd(e,t){return e.reduce((n,r)=>{const i=t.includes(r.id);return!r.selected&&i?(r.selected=!0,n.push(ja(r.id,!0))):r.selected&&!i&&(r.selected=!1,n.push(ja(r.id,!1))),n},[])}const uw=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},Jye=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging}),cj=I.memo(({isSelecting:e,selectionMode:t=Cl.Full,panOnDrag:n,onSelectionStart:r,onSelectionEnd:i,onPaneClick:o,onPaneContextMenu:s,onPaneScroll:a,onPaneMouseEnter:l,onPaneMouseMove:c,onPaneMouseLeave:u,children:d})=>{const f=I.useRef(null),h=Gn(),p=I.useRef(0),m=I.useRef(0),_=I.useRef(),{userSelectionActive:v,elementsSelectable:y,dragging:g}=rn(Jye,ti),b=()=>{h.setState({userSelectionActive:!1,userSelectionRect:null}),p.current=0,m.current=0},S=M=>{o==null||o(M),h.getState().resetSelectedElements(),h.setState({nodesSelectionActive:!1})},w=M=>{if(Array.isArray(n)&&(n!=null&&n.includes(2))){M.preventDefault();return}s==null||s(M)},C=a?M=>a(M):void 0,x=M=>{const{resetSelectedElements:E,domNode:P}=h.getState();if(_.current=P==null?void 0:P.getBoundingClientRect(),!y||!e||M.button!==0||M.target!==f.current||!_.current)return;const{x:O,y:F}=fl(M,_.current);E(),h.setState({userSelectionRect:{width:0,height:0,startX:O,startY:F,x:O,y:F}}),r==null||r(M)},k=M=>{const{userSelectionRect:E,nodeInternals:P,edges:O,transform:F,onNodesChange:$,onEdgesChange:D,nodeOrigin:N,getNodes:z}=h.getState();if(!e||!_.current||!E)return;h.setState({userSelectionActive:!0,nodesSelectionActive:!1});const V=fl(M,_.current),H=E.startX??0,X=E.startY??0,te={...E,x:V.xoe.id),Z=j.map(oe=>oe.id);if(p.current!==Z.length){p.current=Z.length;const oe=cd(ee,Z);oe.length&&($==null||$(oe))}if(m.current!==q.length){m.current=q.length;const oe=cd(O,q);oe.length&&(D==null||D(oe))}h.setState({userSelectionRect:te})},A=M=>{if(M.button!==0)return;const{userSelectionRect:E}=h.getState();!v&&E&&M.target===f.current&&(S==null||S(M)),h.setState({nodesSelectionActive:p.current>0}),b(),i==null||i(M)},R=M=>{v&&(h.setState({nodesSelectionActive:p.current>0}),i==null||i(M)),b()},L=y&&(e||v);return Q.createElement("div",{className:no(["react-flow__pane",{dragging:g,selection:e}]),onClick:L?void 0:uw(S,f),onContextMenu:uw(w,f),onWheel:uw(C,f),onMouseEnter:L?void 0:l,onMouseDown:L?x:void 0,onMouseMove:L?k:c,onMouseUp:L?A:void 0,onMouseLeave:L?R:u,ref:f,style:DT},d,Q.createElement(Zye,null))});cj.displayName="Pane";function uj(e,t){if(!e.parentNode)return!1;const n=t.get(e.parentNode);return n?n.selected?!0:uj(n,t):!1}function w8(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n.current)return!1;r=r.parentElement}while(r);return!1}function eve(e,t,n,r){return Array.from(e.values()).filter(i=>(i.selected||i.id===r)&&(!i.parentNode||!uj(i,e))&&(i.draggable||t&&typeof i.draggable>"u")).map(i=>{var o,s;return{id:i.id,position:i.position||{x:0,y:0},positionAbsolute:i.positionAbsolute||{x:0,y:0},distance:{x:n.x-(((o=i.positionAbsolute)==null?void 0:o.x)??0),y:n.y-(((s=i.positionAbsolute)==null?void 0:s.y)??0)},delta:{x:0,y:0},extent:i.extent,parentNode:i.parentNode,width:i.width,height:i.height,expandParent:i.expandParent}})}function tve(e,t){return!t||t==="parent"?t:[t[0],[t[1][0]-(e.width||0),t[1][1]-(e.height||0)]]}function dj(e,t,n,r,i=[0,0],o){const s=tve(e,e.extent||r);let a=s;if(e.extent==="parent"&&!e.expandParent)if(e.parentNode&&e.width&&e.height){const u=n.get(e.parentNode),{x:d,y:f}=Dd(u,i).positionAbsolute;a=u&&Xi(d)&&Xi(f)&&Xi(u.width)&&Xi(u.height)?[[d+e.width*i[0],f+e.height*i[1]],[d+u.width-e.width+e.width*i[0],f+u.height-e.height+e.height*i[1]]]:a}else o==null||o("005",fa.error005()),a=s;else if(e.extent&&e.parentNode&&e.extent!=="parent"){const u=n.get(e.parentNode),{x:d,y:f}=Dd(u,i).positionAbsolute;a=[[e.extent[0][0]+d,e.extent[0][1]+f],[e.extent[1][0]+d,e.extent[1][1]+f]]}let l={x:0,y:0};if(e.parentNode){const u=n.get(e.parentNode);l=Dd(u,i).positionAbsolute}const c=a&&a!=="parent"?kT(t,a):t;return{position:{x:c.x-l.x,y:c.y-l.y},positionAbsolute:c}}function dw({nodeId:e,dragItems:t,nodeInternals:n}){const r=t.map(i=>({...n.get(i.id),position:i.position,positionAbsolute:i.positionAbsolute}));return[e?r.find(i=>i.id===e):r[0],r]}const C8=(e,t,n,r)=>{const i=t.querySelectorAll(e);if(!i||!i.length)return null;const o=Array.from(i),s=t.getBoundingClientRect(),a={x:s.width*r[0],y:s.height*r[1]};return o.map(l=>{const c=l.getBoundingClientRect();return{id:l.getAttribute("data-handleid"),position:l.getAttribute("data-handlepos"),x:(c.left-s.left-a.x)/n,y:(c.top-s.top-a.y)/n,...AT(l)}})};function vh(e,t,n){return n===void 0?n:r=>{const i=t().nodeInternals.get(e);i&&n(r,{...i})}}function f3({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:o,multiSelectionActive:s,nodeInternals:a,onError:l}=t.getState(),c=a.get(e);if(!c){l==null||l("012",fa.error012(e));return}t.setState({nodesSelectionActive:!1}),c.selected?(n||c.selected&&s)&&(o({nodes:[c],edges:[]}),requestAnimationFrame(()=>{var u;return(u=r==null?void 0:r.current)==null?void 0:u.blur()})):i([e])}function nve(){const e=Gn();return I.useCallback(({sourceEvent:n})=>{const{transform:r,snapGrid:i,snapToGrid:o}=e.getState(),s=n.touches?n.touches[0].clientX:n.clientX,a=n.touches?n.touches[0].clientY:n.clientY,l={x:(s-r[0])/r[2],y:(a-r[1])/r[2]};return{xSnapped:o?i[0]*Math.round(l.x/i[0]):l.x,ySnapped:o?i[1]*Math.round(l.y/i[1]):l.y,...l}},[])}function fw(e){return(t,n,r)=>e==null?void 0:e(t,r)}function fj({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,selectNodesOnDrag:s}){const a=Gn(),[l,c]=I.useState(!1),u=I.useRef([]),d=I.useRef({x:null,y:null}),f=I.useRef(0),h=I.useRef(null),p=I.useRef({x:0,y:0}),m=I.useRef(null),_=I.useRef(!1),v=I.useRef(!1),y=nve();return I.useEffect(()=>{if(e!=null&&e.current){const g=xo(e.current),b=({x:C,y:x})=>{const{nodeInternals:k,onNodeDrag:A,onSelectionDrag:R,updateNodePositions:L,nodeExtent:M,snapGrid:E,snapToGrid:P,nodeOrigin:O,onError:F}=a.getState();d.current={x:C,y:x};let $=!1,D={x:0,y:0,x2:0,y2:0};if(u.current.length>1&&M){const z=OT(u.current,O);D=Tg(z)}if(u.current=u.current.map(z=>{const V={x:C-z.distance.x,y:x-z.distance.y};P&&(V.x=E[0]*Math.round(V.x/E[0]),V.y=E[1]*Math.round(V.y/E[1]));const H=[[M[0][0],M[0][1]],[M[1][0],M[1][1]]];u.current.length>1&&M&&!z.extent&&(H[0][0]=z.positionAbsolute.x-D.x+M[0][0],H[1][0]=z.positionAbsolute.x+(z.width??0)-D.x2+M[1][0],H[0][1]=z.positionAbsolute.y-D.y+M[0][1],H[1][1]=z.positionAbsolute.y+(z.height??0)-D.y2+M[1][1]);const X=dj(z,V,k,H,O,F);return $=$||z.position.x!==X.position.x||z.position.y!==X.position.y,z.position=X.position,z.positionAbsolute=X.positionAbsolute,z}),!$)return;L(u.current,!0,!0),c(!0);const N=i?A:fw(R);if(N&&m.current){const[z,V]=dw({nodeId:i,dragItems:u.current,nodeInternals:k});N(m.current,z,V)}},S=()=>{if(!h.current)return;const[C,x]=Mz(p.current,h.current);if(C!==0||x!==0){const{transform:k,panBy:A}=a.getState();d.current.x=(d.current.x??0)-C/k[2],d.current.y=(d.current.y??0)-x/k[2],A({x:C,y:x})&&b(d.current)}f.current=requestAnimationFrame(S)},w=C=>{var O;const{nodeInternals:x,multiSelectionActive:k,nodesDraggable:A,unselectNodesAndEdges:R,onNodeDragStart:L,onSelectionDragStart:M}=a.getState();v.current=!0;const E=i?L:fw(M);(!s||!o)&&!k&&i&&((O=x.get(i))!=null&&O.selected||R()),i&&o&&s&&f3({id:i,store:a,nodeRef:e});const P=y(C);if(d.current=P,u.current=eve(x,A,P,i),E&&u.current){const[F,$]=dw({nodeId:i,dragItems:u.current,nodeInternals:x});E(C.sourceEvent,F,$)}};if(t)g.on(".drag",null);else{const C=fme().on("start",x=>{const{domNode:k,nodeDragThreshold:A}=a.getState();A===0&&w(x);const R=y(x);d.current=R,h.current=(k==null?void 0:k.getBoundingClientRect())||null,p.current=fl(x.sourceEvent,h.current)}).on("drag",x=>{var L,M;const k=y(x),{autoPanOnNodeDrag:A,nodeDragThreshold:R}=a.getState();if(!_.current&&v.current&&A&&(_.current=!0,S()),!v.current){const E=k.xSnapped-(((L=d==null?void 0:d.current)==null?void 0:L.x)??0),P=k.ySnapped-(((M=d==null?void 0:d.current)==null?void 0:M.y)??0);Math.sqrt(E*E+P*P)>R&&w(x)}(d.current.x!==k.xSnapped||d.current.y!==k.ySnapped)&&u.current&&v.current&&(m.current=x.sourceEvent,p.current=fl(x.sourceEvent,h.current),b(k))}).on("end",x=>{if(v.current&&(c(!1),_.current=!1,v.current=!1,cancelAnimationFrame(f.current),u.current)){const{updateNodePositions:k,nodeInternals:A,onNodeDragStop:R,onSelectionDragStop:L}=a.getState(),M=i?R:fw(L);if(k(u.current,!1,!1),M){const[E,P]=dw({nodeId:i,dragItems:u.current,nodeInternals:A});M(x.sourceEvent,E,P)}}}).filter(x=>{const k=x.target;return!x.button&&(!n||!w8(k,`.${n}`,e))&&(!r||w8(k,r,e))});return g.call(C),()=>{g.on(".drag",null)}}}},[e,t,n,r,o,a,i,s,y]),l}function hj(){const e=Gn();return I.useCallback(n=>{const{nodeInternals:r,nodeExtent:i,updateNodePositions:o,getNodes:s,snapToGrid:a,snapGrid:l,onError:c,nodesDraggable:u}=e.getState(),d=s().filter(y=>y.selected&&(y.draggable||u&&typeof y.draggable>"u")),f=a?l[0]:5,h=a?l[1]:5,p=n.isShiftPressed?4:1,m=n.x*f*p,_=n.y*h*p,v=d.map(y=>{if(y.positionAbsolute){const g={x:y.positionAbsolute.x+m,y:y.positionAbsolute.y+_};a&&(g.x=l[0]*Math.round(g.x/l[0]),g.y=l[1]*Math.round(g.y/l[1]));const{positionAbsolute:b,position:S}=dj(y,g,r,i,void 0,c);y.position=S,y.positionAbsolute=b}return y});o(v,!0,!1)},[])}const Ld={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};var bh=e=>{const t=({id:n,type:r,data:i,xPos:o,yPos:s,xPosOrigin:a,yPosOrigin:l,selected:c,onClick:u,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,onContextMenu:p,onDoubleClick:m,style:_,className:v,isDraggable:y,isSelectable:g,isConnectable:b,isFocusable:S,selectNodesOnDrag:w,sourcePosition:C,targetPosition:x,hidden:k,resizeObserver:A,dragHandle:R,zIndex:L,isParent:M,noDragClassName:E,noPanClassName:P,initialized:O,disableKeyboardA11y:F,ariaLabel:$,rfId:D})=>{const N=Gn(),z=I.useRef(null),V=I.useRef(C),H=I.useRef(x),X=I.useRef(r),te=g||y||u||d||f||h,ee=hj(),j=vh(n,N.getState,d),q=vh(n,N.getState,f),Z=vh(n,N.getState,h),oe=vh(n,N.getState,p),be=vh(n,N.getState,m),Me=we=>{const{nodeDragThreshold:pt}=N.getState();if(g&&(!w||!y||pt>0)&&f3({id:n,store:N,nodeRef:z}),u){const vt=N.getState().nodeInternals.get(n);vt&&u(we,{...vt})}},lt=we=>{if(!a3(we))if(Nz.includes(we.key)&&g){const pt=we.key==="Escape";f3({id:n,store:N,unselect:pt,nodeRef:z})}else!F&&y&&c&&Object.prototype.hasOwnProperty.call(Ld,we.key)&&(N.setState({ariaLiveMessage:`Moved selected node ${we.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~o}, y: ${~~s}`}),ee({x:Ld[we.key].x,y:Ld[we.key].y,isShiftPressed:we.shiftKey}))};I.useEffect(()=>{if(z.current&&!k){const we=z.current;return A==null||A.observe(we),()=>A==null?void 0:A.unobserve(we)}},[k]),I.useEffect(()=>{const we=X.current!==r,pt=V.current!==C,vt=H.current!==x;z.current&&(we||pt||vt)&&(we&&(X.current=r),pt&&(V.current=C),vt&&(H.current=x),N.getState().updateNodeDimensions([{id:n,nodeElement:z.current,forceUpdate:!0}]))},[n,r,C,x]);const Le=fj({nodeRef:z,disabled:k||!y,noDragClassName:E,handleSelector:R,nodeId:n,isSelectable:g,selectNodesOnDrag:w});return k?null:Q.createElement("div",{className:no(["react-flow__node",`react-flow__node-${r}`,{[P]:y},v,{selected:c,selectable:g,parent:M,dragging:Le}]),ref:z,style:{zIndex:L,transform:`translate(${a}px,${l}px)`,pointerEvents:te?"all":"none",visibility:O?"visible":"hidden",..._},"data-id":n,"data-testid":`rf__node-${n}`,onMouseEnter:j,onMouseMove:q,onMouseLeave:Z,onContextMenu:oe,onClick:Me,onDoubleClick:be,onKeyDown:S?lt:void 0,tabIndex:S?0:void 0,role:S?"button":void 0,"aria-describedby":F?void 0:`${nj}-${D}`,"aria-label":$},Q.createElement(mye,{value:n},Q.createElement(e,{id:n,data:i,type:r,xPos:o,yPos:s,selected:c,isConnectable:b,sourcePosition:C,targetPosition:x,dragging:Le,dragHandle:R,zIndex:L})))};return t.displayName="NodeWrapper",I.memo(t)};const rve=e=>{const t=e.getNodes().filter(n=>n.selected);return{...OT(t,e.nodeOrigin),transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`,userSelectionActive:e.userSelectionActive}};function ive({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Gn(),{width:i,height:o,x:s,y:a,transformString:l,userSelectionActive:c}=rn(rve,ti),u=hj(),d=I.useRef(null);if(I.useEffect(()=>{var p;n||(p=d.current)==null||p.focus({preventScroll:!0})},[n]),fj({nodeRef:d}),c||!i||!o)return null;const f=e?p=>{const m=r.getState().getNodes().filter(_=>_.selected);e(p,m)}:void 0,h=p=>{Object.prototype.hasOwnProperty.call(Ld,p.key)&&u({x:Ld[p.key].x,y:Ld[p.key].y,isShiftPressed:p.shiftKey})};return Q.createElement("div",{className:no(["react-flow__nodesselection","react-flow__container",t]),style:{transform:l}},Q.createElement("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:h,style:{width:i,height:o,top:a,left:s}}))}var ove=I.memo(ive);const sve=e=>e.nodesSelectionActive,pj=({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,deleteKeyCode:a,onMove:l,onMoveStart:c,onMoveEnd:u,selectionKeyCode:d,selectionOnDrag:f,selectionMode:h,onSelectionStart:p,onSelectionEnd:m,multiSelectionKeyCode:_,panActivationKeyCode:v,zoomActivationKeyCode:y,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:S,panOnScroll:w,panOnScrollSpeed:C,panOnScrollMode:x,zoomOnDoubleClick:k,panOnDrag:A,defaultViewport:R,translateExtent:L,minZoom:M,maxZoom:E,preventScrolling:P,onSelectionContextMenu:O,noWheelClassName:F,noPanClassName:$,disableKeyboardA11y:D})=>{const N=rn(sve),z=Ag(d),V=Ag(v),H=V||A,X=V||w,te=z||f&&H!==!0;return Wye({deleteKeyCode:a,multiSelectionKeyCode:_}),Q.createElement(Qye,{onMove:l,onMoveStart:c,onMoveEnd:u,onPaneContextMenu:o,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:S,panOnScroll:X,panOnScrollSpeed:C,panOnScrollMode:x,zoomOnDoubleClick:k,panOnDrag:!z&&H,defaultViewport:R,translateExtent:L,minZoom:M,maxZoom:E,zoomActivationKeyCode:y,preventScrolling:P,noWheelClassName:F,noPanClassName:$},Q.createElement(cj,{onSelectionStart:p,onSelectionEnd:m,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,panOnDrag:H,isSelecting:!!te,selectionMode:h},e,N&&Q.createElement(ove,{onSelectionContextMenu:O,noPanClassName:$,disableKeyboardA11y:D})))};pj.displayName="FlowRenderer";var ave=I.memo(pj);function lve(e){return rn(I.useCallback(n=>e?Gz(n.nodeInternals,{x:0,y:0,width:n.width,height:n.height},n.transform,!0):n.getNodes(),[e]))}function cve(e){const t={input:bh(e.input||Zz),default:bh(e.default||d3),output:bh(e.output||ej),group:bh(e.group||FT)},n={},r=Object.keys(e).filter(i=>!["input","default","output","group"].includes(i)).reduce((i,o)=>(i[o]=bh(e[o]||d3),i),n);return{...t,...r}}const uve=({x:e,y:t,width:n,height:r,origin:i})=>!n||!r?{x:e,y:t}:i[0]<0||i[1]<0||i[0]>1||i[1]>1?{x:e,y:t}:{x:e-n*i[0],y:t-r*i[1]},dve=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,updateNodeDimensions:e.updateNodeDimensions,onError:e.onError}),gj=e=>{const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,updateNodeDimensions:o,onError:s}=rn(dve,ti),a=lve(e.onlyRenderVisibleElements),l=I.useRef(),c=I.useMemo(()=>{if(typeof ResizeObserver>"u")return null;const u=new ResizeObserver(d=>{const f=d.map(h=>({id:h.target.getAttribute("data-id"),nodeElement:h.target,forceUpdate:!0}));o(f)});return l.current=u,u},[]);return I.useEffect(()=>()=>{var u;(u=l==null?void 0:l.current)==null||u.disconnect()},[]),Q.createElement("div",{className:"react-flow__nodes",style:DT},a.map(u=>{var S,w;let d=u.type||"default";e.nodeTypes[d]||(s==null||s("003",fa.error003(d)),d="default");const f=e.nodeTypes[d]||e.nodeTypes.default,h=!!(u.draggable||t&&typeof u.draggable>"u"),p=!!(u.selectable||i&&typeof u.selectable>"u"),m=!!(u.connectable||n&&typeof u.connectable>"u"),_=!!(u.focusable||r&&typeof u.focusable>"u"),v=e.nodeExtent?kT(u.positionAbsolute,e.nodeExtent):u.positionAbsolute,y=(v==null?void 0:v.x)??0,g=(v==null?void 0:v.y)??0,b=uve({x:y,y:g,width:u.width??0,height:u.height??0,origin:e.nodeOrigin});return Q.createElement(f,{key:u.id,id:u.id,className:u.className,style:u.style,type:d,data:u.data,sourcePosition:u.sourcePosition||Te.Bottom,targetPosition:u.targetPosition||Te.Top,hidden:u.hidden,xPos:y,yPos:g,xPosOrigin:b.x,yPosOrigin:b.y,selectNodesOnDrag:e.selectNodesOnDrag,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,selected:!!u.selected,isDraggable:h,isSelectable:p,isConnectable:m,isFocusable:_,resizeObserver:c,dragHandle:u.dragHandle,zIndex:((S=u[Tn])==null?void 0:S.z)??0,isParent:!!((w=u[Tn])!=null&&w.isParent),noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,initialized:!!u.width&&!!u.height,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,ariaLabel:u.ariaLabel})}))};gj.displayName="NodeRenderer";var fve=I.memo(gj);const hve=(e,t,n)=>n===Te.Left?e-t:n===Te.Right?e+t:e,pve=(e,t,n)=>n===Te.Top?e-t:n===Te.Bottom?e+t:e,E8="react-flow__edgeupdater",T8=({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:o,onMouseOut:s,type:a})=>Q.createElement("circle",{onMouseDown:i,onMouseEnter:o,onMouseOut:s,className:no([E8,`${E8}-${a}`]),cx:hve(t,r,e),cy:pve(n,r,e),r,stroke:"transparent",fill:"transparent"}),gve=()=>!0;var Du=e=>{const t=({id:n,className:r,type:i,data:o,onClick:s,onEdgeDoubleClick:a,selected:l,animated:c,label:u,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,style:_,source:v,target:y,sourceX:g,sourceY:b,targetX:S,targetY:w,sourcePosition:C,targetPosition:x,elementsSelectable:k,hidden:A,sourceHandleId:R,targetHandleId:L,onContextMenu:M,onMouseEnter:E,onMouseMove:P,onMouseLeave:O,edgeUpdaterRadius:F,onEdgeUpdate:$,onEdgeUpdateStart:D,onEdgeUpdateEnd:N,markerEnd:z,markerStart:V,rfId:H,ariaLabel:X,isFocusable:te,isUpdatable:ee,pathOptions:j,interactionWidth:q})=>{const Z=I.useRef(null),[oe,be]=I.useState(!1),[Me,lt]=I.useState(!1),Le=Gn(),we=I.useMemo(()=>`url(#${c3(V,H)})`,[V,H]),pt=I.useMemo(()=>`url(#${c3(z,H)})`,[z,H]);if(A)return null;const vt=Yt=>{var hn;const{edges:It,addSelectedEdges:oi,unselectNodesAndEdges:Oi,multiSelectionActive:ho}=Le.getState(),Ur=It.find(si=>si.id===n);Ur&&(k&&(Le.setState({nodesSelectionActive:!1}),Ur.selected&&ho?(Oi({nodes:[],edges:[Ur]}),(hn=Z.current)==null||hn.blur()):oi([n])),s&&s(Yt,Ur))},Ce=yh(n,Le.getState,a),ii=yh(n,Le.getState,M),sn=yh(n,Le.getState,E),jr=yh(n,Le.getState,P),sr=yh(n,Le.getState,O),fn=(Yt,It)=>{if(Yt.button!==0)return;const{edges:oi,isValidConnection:Oi}=Le.getState(),ho=It?y:v,Ur=(It?L:R)||null,hn=It?"target":"source",si=Oi||gve,Gl=It,Go=oi.find(_t=>_t.id===n);lt(!0),D==null||D(Yt,Go,hn);const Hl=_t=>{lt(!1),N==null||N(_t,Go,hn)};Kz({event:Yt,handleId:Ur,nodeId:ho,onConnect:_t=>$==null?void 0:$(Go,_t),isTarget:Gl,getState:Le.getState,setState:Le.setState,isValidConnection:si,edgeUpdaterType:hn,onEdgeUpdateEnd:Hl})},Vr=Yt=>fn(Yt,!0),fo=Yt=>fn(Yt,!1),Ri=()=>be(!0),ar=()=>be(!1),Wn=!k&&!s,wr=Yt=>{var It;if(Nz.includes(Yt.key)&&k){const{unselectNodesAndEdges:oi,addSelectedEdges:Oi,edges:ho}=Le.getState();Yt.key==="Escape"?((It=Z.current)==null||It.blur(),oi({edges:[ho.find(hn=>hn.id===n)]})):Oi([n])}};return Q.createElement("g",{className:no(["react-flow__edge",`react-flow__edge-${i}`,r,{selected:l,animated:c,inactive:Wn,updating:oe}]),onClick:vt,onDoubleClick:Ce,onContextMenu:ii,onMouseEnter:sn,onMouseMove:jr,onMouseLeave:sr,onKeyDown:te?wr:void 0,tabIndex:te?0:void 0,role:te?"button":"img","data-testid":`rf__edge-${n}`,"aria-label":X===null?void 0:X||`Edge from ${v} to ${y}`,"aria-describedby":te?`${rj}-${H}`:void 0,ref:Z},!Me&&Q.createElement(e,{id:n,source:v,target:y,selected:l,animated:c,label:u,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,data:o,style:_,sourceX:g,sourceY:b,targetX:S,targetY:w,sourcePosition:C,targetPosition:x,sourceHandleId:R,targetHandleId:L,markerStart:we,markerEnd:pt,pathOptions:j,interactionWidth:q}),ee&&Q.createElement(Q.Fragment,null,(ee==="source"||ee===!0)&&Q.createElement(T8,{position:C,centerX:g,centerY:b,radius:F,onMouseDown:Vr,onMouseEnter:Ri,onMouseOut:ar,type:"source"}),(ee==="target"||ee===!0)&&Q.createElement(T8,{position:x,centerX:S,centerY:w,radius:F,onMouseDown:fo,onMouseEnter:Ri,onMouseOut:ar,type:"target"})))};return t.displayName="EdgeWrapper",I.memo(t)};function mve(e){const t={default:Du(e.default||F1),straight:Du(e.bezier||MT),step:Du(e.step||IT),smoothstep:Du(e.step||lS),simplebezier:Du(e.simplebezier||PT)},n={},r=Object.keys(e).filter(i=>!["default","bezier"].includes(i)).reduce((i,o)=>(i[o]=Du(e[o]||F1),i),n);return{...t,...r}}function A8(e,t,n=null){const r=((n==null?void 0:n.x)||0)+t.x,i=((n==null?void 0:n.y)||0)+t.y,o=(n==null?void 0:n.width)||t.width,s=(n==null?void 0:n.height)||t.height;switch(e){case Te.Top:return{x:r+o/2,y:i};case Te.Right:return{x:r+o,y:i+s/2};case Te.Bottom:return{x:r+o/2,y:i+s};case Te.Left:return{x:r,y:i+s/2}}}function k8(e,t){return e?e.length===1||!t?e[0]:t&&e.find(n=>n.id===t)||null:null}const yve=(e,t,n,r,i,o)=>{const s=A8(n,e,t),a=A8(o,r,i);return{sourceX:s.x,sourceY:s.y,targetX:a.x,targetY:a.y}};function vve({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:r,targetWidth:i,targetHeight:o,width:s,height:a,transform:l}){const c={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+r,t.y+o)};c.x===c.x2&&(c.x2+=1),c.y===c.y2&&(c.y2+=1);const u=Tg({x:(0-l[0])/l[2],y:(0-l[1])/l[2],width:s/l[2],height:a/l[2]}),d=Math.max(0,Math.min(u.x2,c.x2)-Math.max(u.x,c.x)),f=Math.max(0,Math.min(u.y2,c.y2)-Math.max(u.y,c.y));return Math.ceil(d*f)>0}function P8(e){var r,i,o,s,a;const t=((r=e==null?void 0:e[Tn])==null?void 0:r.handleBounds)||null,n=t&&(e==null?void 0:e.width)&&(e==null?void 0:e.height)&&typeof((i=e==null?void 0:e.positionAbsolute)==null?void 0:i.x)<"u"&&typeof((o=e==null?void 0:e.positionAbsolute)==null?void 0:o.y)<"u";return[{x:((s=e==null?void 0:e.positionAbsolute)==null?void 0:s.x)||0,y:((a=e==null?void 0:e.positionAbsolute)==null?void 0:a.y)||0,width:(e==null?void 0:e.width)||0,height:(e==null?void 0:e.height)||0},t,!!n]}const bve=[{level:0,isMaxLevel:!0,edges:[]}];function _ve(e,t,n=!1){let r=-1;const i=e.reduce((s,a)=>{var u,d;const l=Xi(a.zIndex);let c=l?a.zIndex:0;if(n){const f=t.get(a.target),h=t.get(a.source),p=a.selected||(f==null?void 0:f.selected)||(h==null?void 0:h.selected),m=Math.max(((u=h==null?void 0:h[Tn])==null?void 0:u.z)||0,((d=f==null?void 0:f[Tn])==null?void 0:d.z)||0,1e3);c=(l?a.zIndex:0)+(p?m:0)}return s[c]?s[c].push(a):s[c]=[a],r=c>r?c:r,s},{}),o=Object.entries(i).map(([s,a])=>{const l=+s;return{edges:a,level:l,isMaxLevel:l===r}});return o.length===0?bve:o}function Sve(e,t,n){const r=rn(I.useCallback(i=>e?i.edges.filter(o=>{const s=t.get(o.source),a=t.get(o.target);return(s==null?void 0:s.width)&&(s==null?void 0:s.height)&&(a==null?void 0:a.width)&&(a==null?void 0:a.height)&&vve({sourcePos:s.positionAbsolute||{x:0,y:0},targetPos:a.positionAbsolute||{x:0,y:0},sourceWidth:s.width,sourceHeight:s.height,targetWidth:a.width,targetHeight:a.height,width:i.width,height:i.height,transform:i.transform})}):i.edges,[e,t]));return _ve(r,t,n)}const xve=({color:e="none",strokeWidth:t=1})=>Q.createElement("polyline",{style:{stroke:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",fill:"none",points:"-5,-4 0,0 -5,4"}),wve=({color:e="none",strokeWidth:t=1})=>Q.createElement("polyline",{style:{stroke:e,fill:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"}),I8={[N1.Arrow]:xve,[N1.ArrowClosed]:wve};function Cve(e){const t=Gn();return I.useMemo(()=>{var i,o;return Object.prototype.hasOwnProperty.call(I8,e)?I8[e]:((o=(i=t.getState()).onError)==null||o.call(i,"009",fa.error009(e)),null)},[e])}const Eve=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:o="strokeWidth",strokeWidth:s,orient:a="auto-start-reverse"})=>{const l=Cve(t);return l?Q.createElement("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:a,refX:"0",refY:"0"},Q.createElement(l,{color:n,strokeWidth:s})):null},Tve=({defaultColor:e,rfId:t})=>n=>{const r=[];return n.edges.reduce((i,o)=>([o.markerStart,o.markerEnd].forEach(s=>{if(s&&typeof s=="object"){const a=c3(s,t);r.includes(a)||(i.push({id:a,color:s.color||e,...s}),r.push(a))}}),i),[]).sort((i,o)=>i.id.localeCompare(o.id))},mj=({defaultColor:e,rfId:t})=>{const n=rn(I.useCallback(Tve({defaultColor:e,rfId:t}),[e,t]),(r,i)=>!(r.length!==i.length||r.some((o,s)=>o.id!==i[s].id)));return Q.createElement("defs",null,n.map(r=>Q.createElement(Eve,{id:r.id,key:r.id,type:r.type,color:r.color,width:r.width,height:r.height,markerUnits:r.markerUnits,strokeWidth:r.strokeWidth,orient:r.orient})))};mj.displayName="MarkerDefinitions";var Ave=I.memo(mj);const kve=e=>({nodesConnectable:e.nodesConnectable,edgesFocusable:e.edgesFocusable,edgesUpdatable:e.edgesUpdatable,elementsSelectable:e.elementsSelectable,width:e.width,height:e.height,connectionMode:e.connectionMode,nodeInternals:e.nodeInternals,onError:e.onError}),yj=({defaultMarkerColor:e,onlyRenderVisibleElements:t,elevateEdgesOnSelect:n,rfId:r,edgeTypes:i,noPanClassName:o,onEdgeUpdate:s,onEdgeContextMenu:a,onEdgeMouseEnter:l,onEdgeMouseMove:c,onEdgeMouseLeave:u,onEdgeClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,children:_})=>{const{edgesFocusable:v,edgesUpdatable:y,elementsSelectable:g,width:b,height:S,connectionMode:w,nodeInternals:C,onError:x}=rn(kve,ti),k=Sve(t,C,n);return b?Q.createElement(Q.Fragment,null,k.map(({level:A,edges:R,isMaxLevel:L})=>Q.createElement("svg",{key:A,style:{zIndex:A},width:b,height:S,className:"react-flow__edges react-flow__container"},L&&Q.createElement(Ave,{defaultColor:e,rfId:r}),Q.createElement("g",null,R.map(M=>{const[E,P,O]=P8(C.get(M.source)),[F,$,D]=P8(C.get(M.target));if(!O||!D)return null;let N=M.type||"default";i[N]||(x==null||x("011",fa.error011(N)),N="default");const z=i[N]||i.default,V=w===iu.Strict?$.target:($.target??[]).concat($.source??[]),H=k8(P.source,M.sourceHandle),X=k8(V,M.targetHandle),te=(H==null?void 0:H.position)||Te.Bottom,ee=(X==null?void 0:X.position)||Te.Top,j=!!(M.focusable||v&&typeof M.focusable>"u"),q=typeof s<"u"&&(M.updatable||y&&typeof M.updatable>"u");if(!H||!X)return x==null||x("008",fa.error008(H,M)),null;const{sourceX:Z,sourceY:oe,targetX:be,targetY:Me}=yve(E,H,te,F,X,ee);return Q.createElement(z,{key:M.id,id:M.id,className:no([M.className,o]),type:N,data:M.data,selected:!!M.selected,animated:!!M.animated,hidden:!!M.hidden,label:M.label,labelStyle:M.labelStyle,labelShowBg:M.labelShowBg,labelBgStyle:M.labelBgStyle,labelBgPadding:M.labelBgPadding,labelBgBorderRadius:M.labelBgBorderRadius,style:M.style,source:M.source,target:M.target,sourceHandleId:M.sourceHandle,targetHandleId:M.targetHandle,markerEnd:M.markerEnd,markerStart:M.markerStart,sourceX:Z,sourceY:oe,targetX:be,targetY:Me,sourcePosition:te,targetPosition:ee,elementsSelectable:g,onEdgeUpdate:s,onContextMenu:a,onMouseEnter:l,onMouseMove:c,onMouseLeave:u,onClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,rfId:r,ariaLabel:M.ariaLabel,isFocusable:j,isUpdatable:q,pathOptions:"pathOptions"in M?M.pathOptions:void 0,interactionWidth:M.interactionWidth})})))),_):null};yj.displayName="EdgeRenderer";var Pve=I.memo(yj);const Ive=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function Mve({children:e}){const t=rn(Ive);return Q.createElement("div",{className:"react-flow__viewport react-flow__container",style:{transform:t}},e)}function Rve(e){const t=aj(),n=I.useRef(!1);I.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const Ove={[Te.Left]:Te.Right,[Te.Right]:Te.Left,[Te.Top]:Te.Bottom,[Te.Bottom]:Te.Top},vj=({nodeId:e,handleType:t,style:n,type:r=qa.Bezier,CustomComponent:i,connectionStatus:o})=>{var w,C,x;const{fromNode:s,handleId:a,toX:l,toY:c,connectionMode:u}=rn(I.useCallback(k=>({fromNode:k.nodeInternals.get(e),handleId:k.connectionHandleId,toX:(k.connectionPosition.x-k.transform[0])/k.transform[2],toY:(k.connectionPosition.y-k.transform[1])/k.transform[2],connectionMode:k.connectionMode}),[e]),ti),d=(w=s==null?void 0:s[Tn])==null?void 0:w.handleBounds;let f=d==null?void 0:d[t];if(u===iu.Loose&&(f=f||(d==null?void 0:d[t==="source"?"target":"source"])),!s||!f)return null;const h=a?f.find(k=>k.id===a):f[0],p=h?h.x+h.width/2:(s.width??0)/2,m=h?h.y+h.height/2:s.height??0,_=(((C=s.positionAbsolute)==null?void 0:C.x)??0)+p,v=(((x=s.positionAbsolute)==null?void 0:x.y)??0)+m,y=h==null?void 0:h.position,g=y?Ove[y]:null;if(!y||!g)return null;if(i)return Q.createElement(i,{connectionLineType:r,connectionLineStyle:n,fromNode:s,fromHandle:h,fromX:_,fromY:v,toX:l,toY:c,fromPosition:y,toPosition:g,connectionStatus:o});let b="";const S={sourceX:_,sourceY:v,sourcePosition:y,targetX:l,targetY:c,targetPosition:g};return r===qa.Bezier?[b]=zz(S):r===qa.Step?[b]=l3({...S,borderRadius:0}):r===qa.SmoothStep?[b]=l3(S):r===qa.SimpleBezier?[b]=Bz(S):b=`M${_},${v} ${l},${c}`,Q.createElement("path",{d:b,fill:"none",className:"react-flow__connection-path",style:n})};vj.displayName="ConnectionLine";const $ve=e=>({nodeId:e.connectionNodeId,handleType:e.connectionHandleType,nodesConnectable:e.nodesConnectable,connectionStatus:e.connectionStatus,width:e.width,height:e.height});function Nve({containerStyle:e,style:t,type:n,component:r}){const{nodeId:i,handleType:o,nodesConnectable:s,width:a,height:l,connectionStatus:c}=rn($ve,ti);return!(i&&o&&a&&s)?null:Q.createElement("svg",{style:e,width:a,height:l,className:"react-flow__edges react-flow__connectionline react-flow__container"},Q.createElement("g",{className:no(["react-flow__connection",c])},Q.createElement(vj,{nodeId:i,handleType:o,style:t,type:n,CustomComponent:r,connectionStatus:c})))}function M8(e,t){return I.useRef(null),Gn(),I.useMemo(()=>t(e),[e])}const bj=({nodeTypes:e,edgeTypes:t,onMove:n,onMoveStart:r,onMoveEnd:i,onInit:o,onNodeClick:s,onEdgeClick:a,onNodeDoubleClick:l,onEdgeDoubleClick:c,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,onSelectionContextMenu:p,onSelectionStart:m,onSelectionEnd:_,connectionLineType:v,connectionLineStyle:y,connectionLineComponent:g,connectionLineContainerStyle:b,selectionKeyCode:S,selectionOnDrag:w,selectionMode:C,multiSelectionKeyCode:x,panActivationKeyCode:k,zoomActivationKeyCode:A,deleteKeyCode:R,onlyRenderVisibleElements:L,elementsSelectable:M,selectNodesOnDrag:E,defaultViewport:P,translateExtent:O,minZoom:F,maxZoom:$,preventScrolling:D,defaultMarkerColor:N,zoomOnScroll:z,zoomOnPinch:V,panOnScroll:H,panOnScrollSpeed:X,panOnScrollMode:te,zoomOnDoubleClick:ee,panOnDrag:j,onPaneClick:q,onPaneMouseEnter:Z,onPaneMouseMove:oe,onPaneMouseLeave:be,onPaneScroll:Me,onPaneContextMenu:lt,onEdgeUpdate:Le,onEdgeContextMenu:we,onEdgeMouseEnter:pt,onEdgeMouseMove:vt,onEdgeMouseLeave:Ce,edgeUpdaterRadius:ii,onEdgeUpdateStart:sn,onEdgeUpdateEnd:jr,noDragClassName:sr,noWheelClassName:fn,noPanClassName:Vr,elevateEdgesOnSelect:fo,disableKeyboardA11y:Ri,nodeOrigin:ar,nodeExtent:Wn,rfId:wr})=>{const Yt=M8(e,cve),It=M8(t,mve);return Rve(o),Q.createElement(ave,{onPaneClick:q,onPaneMouseEnter:Z,onPaneMouseMove:oe,onPaneMouseLeave:be,onPaneContextMenu:lt,onPaneScroll:Me,deleteKeyCode:R,selectionKeyCode:S,selectionOnDrag:w,selectionMode:C,onSelectionStart:m,onSelectionEnd:_,multiSelectionKeyCode:x,panActivationKeyCode:k,zoomActivationKeyCode:A,elementsSelectable:M,onMove:n,onMoveStart:r,onMoveEnd:i,zoomOnScroll:z,zoomOnPinch:V,zoomOnDoubleClick:ee,panOnScroll:H,panOnScrollSpeed:X,panOnScrollMode:te,panOnDrag:j,defaultViewport:P,translateExtent:O,minZoom:F,maxZoom:$,onSelectionContextMenu:p,preventScrolling:D,noDragClassName:sr,noWheelClassName:fn,noPanClassName:Vr,disableKeyboardA11y:Ri},Q.createElement(Mve,null,Q.createElement(Pve,{edgeTypes:It,onEdgeClick:a,onEdgeDoubleClick:c,onEdgeUpdate:Le,onlyRenderVisibleElements:L,onEdgeContextMenu:we,onEdgeMouseEnter:pt,onEdgeMouseMove:vt,onEdgeMouseLeave:Ce,onEdgeUpdateStart:sn,onEdgeUpdateEnd:jr,edgeUpdaterRadius:ii,defaultMarkerColor:N,noPanClassName:Vr,elevateEdgesOnSelect:!!fo,disableKeyboardA11y:Ri,rfId:wr},Q.createElement(Nve,{style:y,type:v,component:g,containerStyle:b})),Q.createElement("div",{className:"react-flow__edgelabel-renderer"}),Q.createElement(fve,{nodeTypes:Yt,onNodeClick:s,onNodeDoubleClick:l,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,selectNodesOnDrag:E,onlyRenderVisibleElements:L,noPanClassName:Vr,noDragClassName:sr,disableKeyboardA11y:Ri,nodeOrigin:ar,nodeExtent:Wn,rfId:wr})))};bj.displayName="GraphView";var Fve=I.memo(bj);const h3=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Pa={rfId:"1",width:0,height:0,transform:[0,0,1],nodeInternals:new Map,edges:[],onNodesChange:null,onEdgesChange:null,hasDefaultNodes:!1,hasDefaultEdges:!1,d3Zoom:null,d3Selection:null,d3ZoomHandler:void 0,minZoom:.5,maxZoom:2,translateExtent:h3,nodeExtent:h3,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionNodeId:null,connectionHandleId:null,connectionHandleType:"source",connectionPosition:{x:0,y:0},connectionStatus:null,connectionMode:iu.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:[0,0],nodeDragThreshold:0,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesUpdatable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,fitViewOnInit:!1,fitViewOnInitDone:!1,fitViewOnInitOptions:void 0,onSelectionChange:[],multiSelectionActive:!1,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,connectionRadius:20,onError:uye,isValidConnection:void 0},Dve=()=>Cpe((e,t)=>({...Pa,setNodes:n=>{const{nodeInternals:r,nodeOrigin:i,elevateNodesOnSelect:o}=t();e({nodeInternals:cw(n,r,i,o)})},getNodes:()=>Array.from(t().nodeInternals.values()),setEdges:n=>{const{defaultEdgeOptions:r={}}=t();e({edges:n.map(i=>({...r,...i}))})},setDefaultNodesAndEdges:(n,r)=>{const i=typeof n<"u",o=typeof r<"u",s=i?cw(n,new Map,t().nodeOrigin,t().elevateNodesOnSelect):new Map;e({nodeInternals:s,edges:o?r:[],hasDefaultNodes:i,hasDefaultEdges:o})},updateNodeDimensions:n=>{const{onNodesChange:r,nodeInternals:i,fitViewOnInit:o,fitViewOnInitDone:s,fitViewOnInitOptions:a,domNode:l,nodeOrigin:c}=t(),u=l==null?void 0:l.querySelector(".react-flow__viewport");if(!u)return;const d=window.getComputedStyle(u),{m22:f}=new window.DOMMatrixReadOnly(d.transform),h=n.reduce((m,_)=>{const v=i.get(_.id);if(v){const y=AT(_.nodeElement);!!(y.width&&y.height&&(v.width!==y.width||v.height!==y.height||_.forceUpdate))&&(i.set(v.id,{...v,[Tn]:{...v[Tn],handleBounds:{source:C8(".source",_.nodeElement,f,c),target:C8(".target",_.nodeElement,f,c)}},...y}),m.push({id:v.id,type:"dimensions",dimensions:y}))}return m},[]);oj(i,c);const p=s||o&&!s&&sj(t,{initial:!0,...a});e({nodeInternals:new Map(i),fitViewOnInitDone:p}),(h==null?void 0:h.length)>0&&(r==null||r(h))},updateNodePositions:(n,r=!0,i=!1)=>{const{triggerNodeChanges:o}=t(),s=n.map(a=>{const l={id:a.id,type:"position",dragging:i};return r&&(l.positionAbsolute=a.positionAbsolute,l.position=a.position),l});o(s)},triggerNodeChanges:n=>{const{onNodesChange:r,nodeInternals:i,hasDefaultNodes:o,nodeOrigin:s,getNodes:a,elevateNodesOnSelect:l}=t();if(n!=null&&n.length){if(o){const c=lc(n,a()),u=cw(c,i,s,l);e({nodeInternals:u})}r==null||r(n)}},addSelectedNodes:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ja(l,!0)):(s=cd(o(),n),a=cd(i,[])),ny({changedNodes:s,changedEdges:a,get:t,set:e})},addSelectedEdges:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ja(l,!0)):(s=cd(i,n),a=cd(o(),[])),ny({changedNodes:a,changedEdges:s,get:t,set:e})},unselectNodesAndEdges:({nodes:n,edges:r}={})=>{const{edges:i,getNodes:o}=t(),s=n||o(),a=r||i,l=s.map(u=>(u.selected=!1,ja(u.id,!1))),c=a.map(u=>ja(u.id,!1));ny({changedNodes:l,changedEdges:c,get:t,set:e})},setMinZoom:n=>{const{d3Zoom:r,maxZoom:i}=t();r==null||r.scaleExtent([n,i]),e({minZoom:n})},setMaxZoom:n=>{const{d3Zoom:r,minZoom:i}=t();r==null||r.scaleExtent([i,n]),e({maxZoom:n})},setTranslateExtent:n=>{var r;(r=t().d3Zoom)==null||r.translateExtent(n),e({translateExtent:n})},resetSelectedElements:()=>{const{edges:n,getNodes:r}=t(),o=r().filter(a=>a.selected).map(a=>ja(a.id,!1)),s=n.filter(a=>a.selected).map(a=>ja(a.id,!1));ny({changedNodes:o,changedEdges:s,get:t,set:e})},setNodeExtent:n=>{const{nodeInternals:r}=t();r.forEach(i=>{i.positionAbsolute=kT(i.position,n)}),e({nodeExtent:n,nodeInternals:new Map(r)})},panBy:n=>{const{transform:r,width:i,height:o,d3Zoom:s,d3Selection:a,translateExtent:l}=t();if(!s||!a||!n.x&&!n.y)return!1;const c=dl.translate(r[0]+n.x,r[1]+n.y).scale(r[2]),u=[[0,0],[i,o]],d=s==null?void 0:s.constrain()(c,u,l);return s.transform(a,d),r[0]!==d.x||r[1]!==d.y||r[2]!==d.k},cancelConnection:()=>e({connectionNodeId:Pa.connectionNodeId,connectionHandleId:Pa.connectionHandleId,connectionHandleType:Pa.connectionHandleType,connectionStatus:Pa.connectionStatus,connectionStartHandle:Pa.connectionStartHandle,connectionEndHandle:Pa.connectionEndHandle}),reset:()=>e({...Pa})}),Object.is),_j=({children:e})=>{const t=I.useRef(null);return t.current||(t.current=Dve()),Q.createElement(rye,{value:t.current},e)};_j.displayName="ReactFlowProvider";const Sj=({children:e})=>I.useContext(aS)?Q.createElement(Q.Fragment,null,e):Q.createElement(_j,null,e);Sj.displayName="ReactFlowWrapper";const Lve={input:Zz,default:d3,output:ej,group:FT},Bve={default:F1,straight:MT,step:IT,smoothstep:lS,simplebezier:PT},zve=[0,0],jve=[15,15],Vve={x:0,y:0,zoom:1},Uve={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},Gve=I.forwardRef(({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:o=Lve,edgeTypes:s=Bve,onNodeClick:a,onEdgeClick:l,onInit:c,onMove:u,onMoveStart:d,onMoveEnd:f,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:_,onClickConnectEnd:v,onNodeMouseEnter:y,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:w,onNodeDragStart:C,onNodeDrag:x,onNodeDragStop:k,onNodesDelete:A,onEdgesDelete:R,onSelectionChange:L,onSelectionDragStart:M,onSelectionDrag:E,onSelectionDragStop:P,onSelectionContextMenu:O,onSelectionStart:F,onSelectionEnd:$,connectionMode:D=iu.Strict,connectionLineType:N=qa.Bezier,connectionLineStyle:z,connectionLineComponent:V,connectionLineContainerStyle:H,deleteKeyCode:X="Backspace",selectionKeyCode:te="Shift",selectionOnDrag:ee=!1,selectionMode:j=Cl.Full,panActivationKeyCode:q="Space",multiSelectionKeyCode:Z=$1()?"Meta":"Control",zoomActivationKeyCode:oe=$1()?"Meta":"Control",snapToGrid:be=!1,snapGrid:Me=jve,onlyRenderVisibleElements:lt=!1,selectNodesOnDrag:Le=!0,nodesDraggable:we,nodesConnectable:pt,nodesFocusable:vt,nodeOrigin:Ce=zve,edgesFocusable:ii,edgesUpdatable:sn,elementsSelectable:jr,defaultViewport:sr=Vve,minZoom:fn=.5,maxZoom:Vr=2,translateExtent:fo=h3,preventScrolling:Ri=!0,nodeExtent:ar,defaultMarkerColor:Wn="#b1b1b7",zoomOnScroll:wr=!0,zoomOnPinch:Yt=!0,panOnScroll:It=!1,panOnScrollSpeed:oi=.5,panOnScrollMode:Oi=wc.Free,zoomOnDoubleClick:ho=!0,panOnDrag:Ur=!0,onPaneClick:hn,onPaneMouseEnter:si,onPaneMouseMove:Gl,onPaneMouseLeave:Go,onPaneScroll:Hl,onPaneContextMenu:Ut,children:_t,onEdgeUpdate:qn,onEdgeContextMenu:Pn,onEdgeDoubleClick:lr,onEdgeMouseEnter:Cr,onEdgeMouseMove:Gr,onEdgeMouseLeave:Ho,onEdgeUpdateStart:Er,onEdgeUpdateEnd:Kn,edgeUpdaterRadius:Ms=10,onNodesChange:Ca,onEdgesChange:Ea,noDragClassName:wu="nodrag",noWheelClassName:Rs="nowheel",noPanClassName:Tr="nopan",fitView:Wl=!1,fitViewOptions:j2,connectOnClick:V2=!0,attributionPosition:U2,proOptions:G2,defaultEdgeOptions:Ta,elevateNodesOnSelect:H2=!0,elevateEdgesOnSelect:W2=!1,disableKeyboardA11y:u0=!1,autoPanOnConnect:q2=!0,autoPanOnNodeDrag:K2=!0,connectionRadius:X2=20,isValidConnection:Yf,onError:Q2,style:Cu,id:Eu,nodeDragThreshold:Y2,...Tu},d0)=>{const Zf=Eu||"1";return Q.createElement("div",{...Tu,style:{...Cu,...Uve},ref:d0,className:no(["react-flow",i]),"data-testid":"rf__wrapper",id:Eu},Q.createElement(Sj,null,Q.createElement(Fve,{onInit:c,onMove:u,onMoveStart:d,onMoveEnd:f,onNodeClick:a,onEdgeClick:l,onNodeMouseEnter:y,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:w,nodeTypes:o,edgeTypes:s,connectionLineType:N,connectionLineStyle:z,connectionLineComponent:V,connectionLineContainerStyle:H,selectionKeyCode:te,selectionOnDrag:ee,selectionMode:j,deleteKeyCode:X,multiSelectionKeyCode:Z,panActivationKeyCode:q,zoomActivationKeyCode:oe,onlyRenderVisibleElements:lt,selectNodesOnDrag:Le,defaultViewport:sr,translateExtent:fo,minZoom:fn,maxZoom:Vr,preventScrolling:Ri,zoomOnScroll:wr,zoomOnPinch:Yt,zoomOnDoubleClick:ho,panOnScroll:It,panOnScrollSpeed:oi,panOnScrollMode:Oi,panOnDrag:Ur,onPaneClick:hn,onPaneMouseEnter:si,onPaneMouseMove:Gl,onPaneMouseLeave:Go,onPaneScroll:Hl,onPaneContextMenu:Ut,onSelectionContextMenu:O,onSelectionStart:F,onSelectionEnd:$,onEdgeUpdate:qn,onEdgeContextMenu:Pn,onEdgeDoubleClick:lr,onEdgeMouseEnter:Cr,onEdgeMouseMove:Gr,onEdgeMouseLeave:Ho,onEdgeUpdateStart:Er,onEdgeUpdateEnd:Kn,edgeUpdaterRadius:Ms,defaultMarkerColor:Wn,noDragClassName:wu,noWheelClassName:Rs,noPanClassName:Tr,elevateEdgesOnSelect:W2,rfId:Zf,disableKeyboardA11y:u0,nodeOrigin:Ce,nodeExtent:ar}),Q.createElement($ye,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:_,onClickConnectEnd:v,nodesDraggable:we,nodesConnectable:pt,nodesFocusable:vt,edgesFocusable:ii,edgesUpdatable:sn,elementsSelectable:jr,elevateNodesOnSelect:H2,minZoom:fn,maxZoom:Vr,nodeExtent:ar,onNodesChange:Ca,onEdgesChange:Ea,snapToGrid:be,snapGrid:Me,connectionMode:D,translateExtent:fo,connectOnClick:V2,defaultEdgeOptions:Ta,fitView:Wl,fitViewOptions:j2,onNodesDelete:A,onEdgesDelete:R,onNodeDragStart:C,onNodeDrag:x,onNodeDragStop:k,onSelectionDrag:E,onSelectionDragStart:M,onSelectionDragStop:P,noPanClassName:Tr,nodeOrigin:Ce,rfId:Zf,autoPanOnConnect:q2,autoPanOnNodeDrag:K2,onError:Q2,connectionRadius:X2,isValidConnection:Yf,nodeDragThreshold:Y2}),Q.createElement(Rye,{onSelectionChange:L}),_t,Q.createElement(sye,{proOptions:G2,position:U2}),Q.createElement(Bye,{rfId:Zf,disableKeyboardA11y:u0})))});Gve.displayName="ReactFlow";const Hve=e=>{var t;return(t=e.domNode)==null?void 0:t.querySelector(".react-flow__edgelabel-renderer")};function rHe({children:e}){const t=rn(Hve);return t?gi.createPortal(e,t):null}function iHe(){const e=Gn();return I.useCallback(t=>{const{domNode:n,updateNodeDimensions:r}=e.getState(),o=(Array.isArray(t)?t:[t]).reduce((s,a)=>{const l=n==null?void 0:n.querySelector(`.react-flow__node[data-id="${a}"]`);return l&&s.push({id:a,nodeElement:l,forceUpdate:!0}),s},[]);requestAnimationFrame(()=>r(o))},[])}function Wve(){const e=[];return function(t,n){if(typeof n!="object"||n===null)return n;for(;e.length>0&&e.at(-1)!==this;)e.pop();return e.includes(n)?"[Circular]":(e.push(n),n)}}const kg=m5("nodes/receivedOpenAPISchema",async(e,{rejectWithValue:t})=>{try{const n=[window.location.origin,"openapi.json"].join("/"),i=await(await fetch(n)).json();return JSON.parse(JSON.stringify(i,Wve()))}catch(n){return t({error:n})}});var qve="\0",Yl="\0",R8="",Wr,Ac,di,Jg,Wd,qd,Ui,ts,Qa,ns,Ya,js,Vs,Kd,Xd,Us,vo,em,p3,PO;let Kve=(PO=class{constructor(t){Bt(this,em);Bt(this,Wr,!0);Bt(this,Ac,!1);Bt(this,di,!1);Bt(this,Jg,void 0);Bt(this,Wd,()=>{});Bt(this,qd,()=>{});Bt(this,Ui,{});Bt(this,ts,{});Bt(this,Qa,{});Bt(this,ns,{});Bt(this,Ya,{});Bt(this,js,{});Bt(this,Vs,{});Bt(this,Kd,0);Bt(this,Xd,0);Bt(this,Us,void 0);Bt(this,vo,void 0);t&&(Ni(this,Wr,t.hasOwnProperty("directed")?t.directed:!0),Ni(this,Ac,t.hasOwnProperty("multigraph")?t.multigraph:!1),Ni(this,di,t.hasOwnProperty("compound")?t.compound:!1)),Y(this,di)&&(Ni(this,Us,{}),Ni(this,vo,{}),Y(this,vo)[Yl]={})}isDirected(){return Y(this,Wr)}isMultigraph(){return Y(this,Ac)}isCompound(){return Y(this,di)}setGraph(t){return Ni(this,Jg,t),this}graph(){return Y(this,Jg)}setDefaultNodeLabel(t){return Ni(this,Wd,t),typeof t!="function"&&Ni(this,Wd,()=>t),this}nodeCount(){return Y(this,Kd)}nodes(){return Object.keys(Y(this,Ui))}sources(){var t=this;return this.nodes().filter(n=>Object.keys(Y(t,ts)[n]).length===0)}sinks(){var t=this;return this.nodes().filter(n=>Object.keys(Y(t,ns)[n]).length===0)}setNodes(t,n){var r=arguments,i=this;return t.forEach(function(o){r.length>1?i.setNode(o,n):i.setNode(o)}),this}setNode(t,n){return Y(this,Ui).hasOwnProperty(t)?(arguments.length>1&&(Y(this,Ui)[t]=n),this):(Y(this,Ui)[t]=arguments.length>1?n:Y(this,Wd).call(this,t),Y(this,di)&&(Y(this,Us)[t]=Yl,Y(this,vo)[t]={},Y(this,vo)[Yl][t]=!0),Y(this,ts)[t]={},Y(this,Qa)[t]={},Y(this,ns)[t]={},Y(this,Ya)[t]={},++th(this,Kd)._,this)}node(t){return Y(this,Ui)[t]}hasNode(t){return Y(this,Ui).hasOwnProperty(t)}removeNode(t){var n=this;if(Y(this,Ui).hasOwnProperty(t)){var r=i=>n.removeEdge(Y(n,js)[i]);delete Y(this,Ui)[t],Y(this,di)&&(Wo(this,em,p3).call(this,t),delete Y(this,Us)[t],this.children(t).forEach(function(i){n.setParent(i)}),delete Y(this,vo)[t]),Object.keys(Y(this,ts)[t]).forEach(r),delete Y(this,ts)[t],delete Y(this,Qa)[t],Object.keys(Y(this,ns)[t]).forEach(r),delete Y(this,ns)[t],delete Y(this,Ya)[t],--th(this,Kd)._}return this}setParent(t,n){if(!Y(this,di))throw new Error("Cannot set parent in a non-compound graph");if(n===void 0)n=Yl;else{n+="";for(var r=n;r!==void 0;r=this.parent(r))if(r===t)throw new Error("Setting "+n+" as parent of "+t+" would create a cycle");this.setNode(n)}return this.setNode(t),Wo(this,em,p3).call(this,t),Y(this,Us)[t]=n,Y(this,vo)[n][t]=!0,this}parent(t){if(Y(this,di)){var n=Y(this,Us)[t];if(n!==Yl)return n}}children(t=Yl){if(Y(this,di)){var n=Y(this,vo)[t];if(n)return Object.keys(n)}else{if(t===Yl)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var n=Y(this,Qa)[t];if(n)return Object.keys(n)}successors(t){var n=Y(this,Ya)[t];if(n)return Object.keys(n)}neighbors(t){var n=this.predecessors(t);if(n){const i=new Set(n);for(var r of this.successors(t))i.add(r);return Array.from(i.values())}}isLeaf(t){var n;return this.isDirected()?n=this.successors(t):n=this.neighbors(t),n.length===0}filterNodes(t){var n=new this.constructor({directed:Y(this,Wr),multigraph:Y(this,Ac),compound:Y(this,di)});n.setGraph(this.graph());var r=this;Object.entries(Y(this,Ui)).forEach(function([s,a]){t(s)&&n.setNode(s,a)}),Object.values(Y(this,js)).forEach(function(s){n.hasNode(s.v)&&n.hasNode(s.w)&&n.setEdge(s,r.edge(s))});var i={};function o(s){var a=r.parent(s);return a===void 0||n.hasNode(a)?(i[s]=a,a):a in i?i[a]:o(a)}return Y(this,di)&&n.nodes().forEach(s=>n.setParent(s,o(s))),n}setDefaultEdgeLabel(t){return Ni(this,qd,t),typeof t!="function"&&Ni(this,qd,()=>t),this}edgeCount(){return Y(this,Xd)}edges(){return Object.values(Y(this,js))}setPath(t,n){var r=this,i=arguments;return t.reduce(function(o,s){return i.length>1?r.setEdge(o,s,n):r.setEdge(o,s),s}),this}setEdge(){var t,n,r,i,o=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(t=s.v,n=s.w,r=s.name,arguments.length===2&&(i=arguments[1],o=!0)):(t=s,n=arguments[1],r=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,n=""+n,r!==void 0&&(r=""+r);var a=qh(Y(this,Wr),t,n,r);if(Y(this,Vs).hasOwnProperty(a))return o&&(Y(this,Vs)[a]=i),this;if(r!==void 0&&!Y(this,Ac))throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(n),Y(this,Vs)[a]=o?i:Y(this,qd).call(this,t,n,r);var l=Xve(Y(this,Wr),t,n,r);return t=l.v,n=l.w,Object.freeze(l),Y(this,js)[a]=l,O8(Y(this,Qa)[n],t),O8(Y(this,Ya)[t],n),Y(this,ts)[n][a]=l,Y(this,ns)[t][a]=l,th(this,Xd)._++,this}edge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r);return Y(this,Vs)[i]}edgeAsObj(){const t=this.edge(...arguments);return typeof t!="object"?{label:t}:t}hasEdge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r);return Y(this,Vs).hasOwnProperty(i)}removeEdge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r),o=Y(this,js)[i];return o&&(t=o.v,n=o.w,delete Y(this,Vs)[i],delete Y(this,js)[i],$8(Y(this,Qa)[n],t),$8(Y(this,Ya)[t],n),delete Y(this,ts)[n][i],delete Y(this,ns)[t][i],th(this,Xd)._--),this}inEdges(t,n){var r=Y(this,ts)[t];if(r){var i=Object.values(r);return n?i.filter(o=>o.v===n):i}}outEdges(t,n){var r=Y(this,ns)[t];if(r){var i=Object.values(r);return n?i.filter(o=>o.w===n):i}}nodeEdges(t,n){var r=this.inEdges(t,n);if(r)return r.concat(this.outEdges(t,n))}},Wr=new WeakMap,Ac=new WeakMap,di=new WeakMap,Jg=new WeakMap,Wd=new WeakMap,qd=new WeakMap,Ui=new WeakMap,ts=new WeakMap,Qa=new WeakMap,ns=new WeakMap,Ya=new WeakMap,js=new WeakMap,Vs=new WeakMap,Kd=new WeakMap,Xd=new WeakMap,Us=new WeakMap,vo=new WeakMap,em=new WeakSet,p3=function(t){delete Y(this,vo)[Y(this,Us)[t]][t]},PO);function O8(e,t){e[t]?e[t]++:e[t]=1}function $8(e,t){--e[t]||delete e[t]}function qh(e,t,n,r){var i=""+t,o=""+n;if(!e&&i>o){var s=i;i=o,o=s}return i+R8+o+R8+(r===void 0?qve:r)}function Xve(e,t,n,r){var i=""+t,o=""+n;if(!e&&i>o){var s=i;i=o,o=s}var a={v:i,w:o};return r&&(a.name=r),a}function hw(e,t){return qh(e,t.v,t.w,t.name)}var LT=Kve,Qve="2.1.13",Yve={Graph:LT,version:Qve},Zve=LT,Jve={write:e1e,read:r1e};function e1e(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:t1e(e),edges:n1e(e)};return e.graph()!==void 0&&(t.value=structuredClone(e.graph())),t}function t1e(e){return e.nodes().map(function(t){var n=e.node(t),r=e.parent(t),i={v:t};return n!==void 0&&(i.value=n),r!==void 0&&(i.parent=r),i})}function n1e(e){return e.edges().map(function(t){var n=e.edge(t),r={v:t.v,w:t.w};return t.name!==void 0&&(r.name=t.name),n!==void 0&&(r.value=n),r})}function r1e(e){var t=new Zve(e.options).setGraph(e.value);return e.nodes.forEach(function(n){t.setNode(n.v,n.value),n.parent&&t.setParent(n.v,n.parent)}),e.edges.forEach(function(n){t.setEdge({v:n.v,w:n.w,name:n.name},n.value)}),t}var i1e=o1e;function o1e(e){var t={},n=[],r;function i(o){t.hasOwnProperty(o)||(t[o]=!0,r.push(o),e.successors(o).forEach(i),e.predecessors(o).forEach(i))}return e.nodes().forEach(function(o){r=[],i(o),r.length&&n.push(r)}),n}var fr,Gs,tm,g3,nm,m3,Qd,ov,IO;let s1e=(IO=class{constructor(){Bt(this,tm);Bt(this,nm);Bt(this,Qd);Bt(this,fr,[]);Bt(this,Gs,{})}size(){return Y(this,fr).length}keys(){return Y(this,fr).map(function(t){return t.key})}has(t){return Y(this,Gs).hasOwnProperty(t)}priority(t){var n=Y(this,Gs)[t];if(n!==void 0)return Y(this,fr)[n].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return Y(this,fr)[0].key}add(t,n){var r=Y(this,Gs);if(t=String(t),!r.hasOwnProperty(t)){var i=Y(this,fr),o=i.length;return r[t]=o,i.push({key:t,priority:n}),Wo(this,nm,m3).call(this,o),!0}return!1}removeMin(){Wo(this,Qd,ov).call(this,0,Y(this,fr).length-1);var t=Y(this,fr).pop();return delete Y(this,Gs)[t.key],Wo(this,tm,g3).call(this,0),t.key}decrease(t,n){var r=Y(this,Gs)[t];if(n>Y(this,fr)[r].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+Y(this,fr)[r].priority+" New: "+n);Y(this,fr)[r].priority=n,Wo(this,nm,m3).call(this,r)}},fr=new WeakMap,Gs=new WeakMap,tm=new WeakSet,g3=function(t){var n=Y(this,fr),r=2*t,i=r+1,o=t;r>1,!(n[i].priority1;function c1e(e,t,n,r){return u1e(e,String(t),n||l1e,r||function(i){return e.outEdges(i)})}function u1e(e,t,n,r){var i={},o=new a1e,s,a,l=function(c){var u=c.v!==s?c.v:c.w,d=i[u],f=n(c),h=a.distance+f;if(f<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+c+" Weight: "+f);h0&&(s=o.removeMin(),a=i[s],a.distance!==Number.POSITIVE_INFINITY);)r(s).forEach(l);return i}var d1e=wj,f1e=h1e;function h1e(e,t,n){return e.nodes().reduce(function(r,i){return r[i]=d1e(e,i,t,n),r},{})}var Cj=p1e;function p1e(e){var t=0,n=[],r={},i=[];function o(s){var a=r[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach(function(u){r.hasOwnProperty(u)?r[u].onStack&&(a.lowlink=Math.min(a.lowlink,r[u].index)):(o(u),a.lowlink=Math.min(a.lowlink,r[u].lowlink))}),a.lowlink===a.index){var l=[],c;do c=n.pop(),r[c].onStack=!1,l.push(c);while(s!==c);i.push(l)}}return e.nodes().forEach(function(s){r.hasOwnProperty(s)||o(s)}),i}var g1e=Cj,m1e=y1e;function y1e(e){return g1e(e).filter(function(t){return t.length>1||t.length===1&&e.hasEdge(t[0],t[0])})}var v1e=_1e,b1e=()=>1;function _1e(e,t,n){return S1e(e,t||b1e,n||function(r){return e.outEdges(r)})}function S1e(e,t,n){var r={},i=e.nodes();return i.forEach(function(o){r[o]={},r[o][o]={distance:0},i.forEach(function(s){o!==s&&(r[o][s]={distance:Number.POSITIVE_INFINITY})}),n(o).forEach(function(s){var a=s.v===o?s.w:s.v,l=t(s);r[o][a]={distance:l,predecessor:o}})}),i.forEach(function(o){var s=r[o];i.forEach(function(a){var l=r[a];i.forEach(function(c){var u=l[o],d=s[c],f=l[c],h=u.distance+d.distance;he.successors(a):a=>e.neighbors(a),i=n==="post"?E1e:T1e,o=[],s={};return t.forEach(a=>{if(!e.hasNode(a))throw new Error("Graph does not have node: "+a);i(a,r,s,o)}),o}function E1e(e,t,n,r){for(var i=[[e,!1]];i.length>0;){var o=i.pop();o[1]?r.push(o[0]):n.hasOwnProperty(o[0])||(n[o[0]]=!0,i.push([o[0],!0]),kj(t(o[0]),s=>i.push([s,!1])))}}function T1e(e,t,n,r){for(var i=[e];i.length>0;){var o=i.pop();n.hasOwnProperty(o)||(n[o]=!0,r.push(o),kj(t(o),s=>i.push(s)))}}function kj(e,t){for(var n=e.length;n--;)t(e[n],n,e);return e}var A1e=Aj,k1e=P1e;function P1e(e,t){return A1e(e,t,"post")}var I1e=Aj,M1e=R1e;function R1e(e,t){return I1e(e,t,"pre")}var O1e=LT,$1e=xj,N1e=F1e;function F1e(e,t){var n=new O1e,r={},i=new $1e,o;function s(l){var c=l.v===o?l.w:l.v,u=i.priority(c);if(u!==void 0){var d=t(l);d0;){if(o=i.removeMin(),r.hasOwnProperty(o))n.setEdge(o,r[o]);else{if(a)throw new Error("Input graph is not connected: "+e);a=!0}e.nodeEdges(o).forEach(s)}return n}var D1e={components:i1e,dijkstra:wj,dijkstraAll:f1e,findCycles:m1e,floydWarshall:v1e,isAcyclic:x1e,postorder:k1e,preorder:M1e,prim:N1e,tarjan:Cj,topsort:Tj},F8=Yve,L1e={Graph:F8.Graph,json:Jve,alg:D1e,version:F8.version};const D8=Ml(L1e),L8=(e,t,n,r)=>{const i=new D8.Graph;return n.forEach(o=>{i.setNode(o.id)}),r.forEach(o=>{i.setEdge(o.source,o.target)}),i.setEdge(e,t),D8.alg.isAcyclic(i)},B1e=(e,t)=>{if(e.name==="CollectionField"&&t.name==="CollectionField")return!1;if($4(e,t))return!0;const n=e.name==="CollectionItemField"&&!t.isCollection,r=t.name==="CollectionItemField"&&!e.isCollection&&!e.isCollectionOrScalar,i=t.isCollectionOrScalar&&e.name===t.name,o=e.name==="CollectionField"&&(t.isCollection||t.isCollectionOrScalar),s=t.name==="CollectionField"&&e.isCollection,a=!e.isCollection&&!e.isCollectionOrScalar&&!t.isCollection&&!t.isCollectionOrScalar,l=a&&e.name==="IntegerField"&&t.name==="FloatField",c=a&&(e.name==="IntegerField"||e.name==="FloatField")&&t.name==="StringField",u=t.name==="AnyField";return n||r||i||o||s||l||c||u},B8=(e,t,n,r,i)=>{let o=!0;return t==="source"?e.find(s=>s.target===r.id&&s.targetHandle===i.name)&&(o=!1):e.find(s=>s.source===r.id&&s.sourceHandle===i.name)&&(o=!1),B1e(n,i.type)||(o=!1),o},z8=(e,t,n,r,i,o,s)=>{if(e.id===r)return null;const a=o=="source"?e.data.inputs:e.data.outputs;if(a[i]){const l=a[i],c=o=="source"?r:e.id,u=o=="source"?e.id:r,d=o=="source"?i:l.name,f=o=="source"?l.name:i,h=L8(c,u,t,n),p=B8(n,o,s,e,l);if(h&&p)return{source:c,sourceHandle:d,target:u,targetHandle:f}}for(const l in a){const c=a[l],u=o=="source"?r:e.id,d=o=="source"?e.id:r,f=o=="source"?i:c.name,h=o=="source"?c.name:i,p=L8(u,d,t,n),m=B8(n,o,s,e,c);if(p&&m)return{source:u,sourceHandle:f,target:d,targetHandle:h}}return null},j8=(e,t,n)=>{let r=t,i=n;for(;e.find(o=>o.position.x===r&&o.position.y===i);)r=r+50,i=i+50;return{x:r,y:i}},pw={status:gc.enum.PENDING,error:null,progress:null,progressImage:null,outputs:[]},Pj={nodes:[],edges:[],nodeTemplates:{},isReady:!1,connectionStartParams:null,connectionStartFieldType:null,connectionMade:!1,modifyingEdge:!1,addNewNodePosition:null,shouldShowMinimapPanel:!0,shouldValidateGraph:!0,shouldAnimateEdges:!0,shouldSnapToGrid:!1,shouldColorEdges:!0,isAddNodePopoverOpen:!1,nodeOpacity:1,selectedNodes:[],selectedEdges:[],nodeExecutionStates:{},viewport:{x:0,y:0,zoom:1},mouseOverField:null,mouseOverNode:null,nodesToCopy:[],edgesToCopy:[],selectionMode:Cl.Partial},kr=(e,t,n)=>{var c,u;const{nodeId:r,fieldName:i,value:o}=t.payload,s=e.nodes.findIndex(d=>d.id===r),a=(c=e.nodes)==null?void 0:c[s];if(!Sn(a))return;const l=(u=a.data)==null?void 0:u.inputs[i];!l||s<0||!n.safeParse(o).success||(l.value=o)},Ij=jt({name:"nodes",initialState:Pj,reducers:{nodesChanged:(e,t)=>{e.nodes=lc(t.payload,e.nodes)},nodeReplaced:(e,t)=>{const n=e.nodes.findIndex(r=>r.id===t.payload.nodeId);n<0||(e.nodes[n]=t.payload.node)},nodeAdded:(e,t)=>{var i,o;const n=t.payload,r=j8(e.nodes,((i=e.addNewNodePosition)==null?void 0:i.x)??n.position.x,((o=e.addNewNodePosition)==null?void 0:o.y)??n.position.y);if(n.position=r,n.selected=!0,e.nodes=lc(e.nodes.map(s=>({id:s.id,type:"select",selected:!1})),e.nodes),e.edges=Ql(e.edges.map(s=>({id:s.id,type:"select",selected:!1})),e.edges),e.nodes.push(n),!!Sn(n)){if(e.nodeExecutionStates[n.id]={nodeId:n.id,...pw},e.connectionStartParams){const{nodeId:s,handleId:a,handleType:l}=e.connectionStartParams;if(s&&a&&l&&e.connectionStartFieldType){const c=z8(n,e.nodes,e.edges,s,a,l,e.connectionStartFieldType);c&&(e.edges=Wh({...c,type:"default"},e.edges))}}e.connectionStartParams=null,e.connectionStartFieldType=null}},edgeChangeStarted:e=>{e.modifyingEdge=!0},edgesChanged:(e,t)=>{e.edges=Ql(t.payload,e.edges)},edgeAdded:(e,t)=>{e.edges=Wh(t.payload,e.edges)},edgeUpdated:(e,t)=>{const{oldEdge:n,newConnection:r}=t.payload;e.edges=xye(n,r,e.edges)},connectionStarted:(e,t)=>{var l;e.connectionStartParams=t.payload,e.connectionMade=e.modifyingEdge;const{nodeId:n,handleId:r,handleType:i}=t.payload;if(!n||!r)return;const o=e.nodes.findIndex(c=>c.id===n),s=(l=e.nodes)==null?void 0:l[o];if(!Sn(s))return;const a=i==="source"?s.data.outputs[r]:s.data.inputs[r];e.connectionStartFieldType=(a==null?void 0:a.type)??null},connectionMade:(e,t)=>{e.connectionStartFieldType&&(e.edges=Wh({...t.payload,type:"default"},e.edges),e.connectionMade=!0)},connectionEnded:(e,t)=>{var n;if(e.connectionMade)e.connectionStartParams=null,e.connectionStartFieldType=null;else if(e.mouseOverNode){const r=e.nodes.findIndex(o=>o.id===e.mouseOverNode),i=(n=e.nodes)==null?void 0:n[r];if(i&&e.connectionStartParams){const{nodeId:o,handleId:s,handleType:a}=e.connectionStartParams;if(o&&s&&a&&e.connectionStartFieldType){const l=z8(i,e.nodes,e.edges,o,s,a,e.connectionStartFieldType);l&&(e.edges=Wh({...l,type:"default"},e.edges))}}e.connectionStartParams=null,e.connectionStartFieldType=null}else e.addNewNodePosition=t.payload.cursorPosition,e.isAddNodePopoverOpen=!0;e.modifyingEdge=!1},fieldLabelChanged:(e,t)=>{const{nodeId:n,fieldName:r,label:i}=t.payload,o=e.nodes.find(a=>a.id===n);if(!Sn(o))return;const s=o.data.inputs[r];s&&(s.label=i)},nodeUseCacheChanged:(e,t)=>{var s;const{nodeId:n,useCache:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.useCache=r)},nodeIsIntermediateChanged:(e,t)=>{var s;const{nodeId:n,isIntermediate:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.isIntermediate=r)},nodeIsOpenChanged:(e,t)=>{var a;const{nodeId:n,isOpen:r}=t.payload,i=e.nodes.findIndex(l=>l.id===n),o=(a=e.nodes)==null?void 0:a[i];if(!Sn(o)&&!Y5(o)||(o.data.isOpen=r,!Sn(o)))return;const s=$T([o],e.edges);if(r)s.forEach(l=>{delete l.hidden}),s.forEach(l=>{l.type==="collapsed"&&(e.edges=e.edges.filter(c=>c.id!==l.id))});else{const l=_ye(o,e.nodes,e.edges).filter(d=>Sn(d)&&d.data.isOpen===!1),c=bye(o,e.nodes,e.edges).filter(d=>Sn(d)&&d.data.isOpen===!1),u=[];s.forEach(d=>{var f,h;if(d.target===n&&l.find(p=>p.id===d.source)){d.hidden=!0;const p=u.find(m=>m.source===d.source&&m.target===d.target);p?p.data={count:(((f=p.data)==null?void 0:f.count)??0)+1}:u.push({id:`${d.source}-${d.target}-collapsed`,source:d.source,target:d.target,type:"collapsed",data:{count:1},updatable:!1})}if(d.source===n&&c.find(p=>p.id===d.target)){const p=u.find(m=>m.source===d.source&&m.target===d.target);d.hidden=!0,p?p.data={count:(((h=p.data)==null?void 0:h.count)??0)+1}:u.push({id:`${d.source}-${d.target}-collapsed`,source:d.source,target:d.target,type:"collapsed",data:{count:1},updatable:!1})}}),u.length&&(e.edges=Ql(u.map(d=>({type:"add",item:d})),e.edges))}},edgeDeleted:(e,t)=>{e.edges=e.edges.filter(n=>n.id!==t.payload)},edgesDeleted:(e,t)=>{const r=t.payload.filter(i=>i.type==="collapsed");if(r.length){const i=[];r.forEach(o=>{e.edges.forEach(s=>{s.source===o.source&&s.target===o.target&&i.push({id:s.id,type:"remove"})})}),e.edges=Ql(i,e.edges)}},nodesDeleted:(e,t)=>{t.payload.forEach(n=>{Sn(n)&&delete e.nodeExecutionStates[n.id]})},nodeLabelChanged:(e,t)=>{var s;const{nodeId:n,label:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.label=r)},nodeNotesChanged:(e,t)=>{var s;const{nodeId:n,notes:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.notes=r)},nodeExclusivelySelected:(e,t)=>{const n=t.payload;e.nodes=lc(e.nodes.map(r=>({id:r.id,type:"select",selected:r.id===n})),e.nodes)},selectedNodesChanged:(e,t)=>{e.selectedNodes=t.payload},selectedEdgesChanged:(e,t)=>{e.selectedEdges=t.payload},fieldStringValueChanged:(e,t)=>{kr(e,t,V_)},fieldNumberValueChanged:(e,t)=>{kr(e,t,z_.or(j_))},fieldBooleanValueChanged:(e,t)=>{kr(e,t,U_)},fieldBoardValueChanged:(e,t)=>{kr(e,t,W_)},fieldImageValueChanged:(e,t)=>{kr(e,t,H_)},fieldColorValueChanged:(e,t)=>{kr(e,t,q_)},fieldMainModelValueChanged:(e,t)=>{kr(e,t,Df)},fieldRefinerModelValueChanged:(e,t)=>{kr(e,t,K_)},fieldVaeModelValueChanged:(e,t)=>{kr(e,t,X_)},fieldLoRAModelValueChanged:(e,t)=>{kr(e,t,Q_)},fieldControlNetModelValueChanged:(e,t)=>{kr(e,t,Y_)},fieldIPAdapterModelValueChanged:(e,t)=>{kr(e,t,Z_)},fieldT2IAdapterModelValueChanged:(e,t)=>{kr(e,t,J_)},fieldEnumModelValueChanged:(e,t)=>{kr(e,t,G_)},fieldSchedulerValueChanged:(e,t)=>{kr(e,t,eS)},notesNodeValueChanged:(e,t)=>{var s;const{nodeId:n,value:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Y5(o)&&(o.data.notes=r)},shouldShowMinimapPanelChanged:(e,t)=>{e.shouldShowMinimapPanel=t.payload},nodeTemplatesBuilt:(e,t)=>{e.nodeTemplates=t.payload,e.isReady=!0},nodeEditorReset:e=>{e.nodes=[],e.edges=[]},shouldValidateGraphChanged:(e,t)=>{e.shouldValidateGraph=t.payload},shouldAnimateEdgesChanged:(e,t)=>{e.shouldAnimateEdges=t.payload},shouldSnapToGridChanged:(e,t)=>{e.shouldSnapToGrid=t.payload},shouldColorEdgesChanged:(e,t)=>{e.shouldColorEdges=t.payload},nodeOpacityChanged:(e,t)=>{e.nodeOpacity=t.payload},viewportChanged:(e,t)=>{e.viewport=t.payload},mouseOverFieldChanged:(e,t)=>{e.mouseOverField=t.payload},mouseOverNodeChanged:(e,t)=>{e.mouseOverNode=t.payload},selectedAll:e=>{e.nodes=lc(e.nodes.map(t=>({id:t.id,type:"select",selected:!0})),e.nodes),e.edges=Ql(e.edges.map(t=>({id:t.id,type:"select",selected:!0})),e.edges)},selectionCopied:e=>{if(e.nodesToCopy=e.nodes.filter(t=>t.selected).map(Ge),e.edgesToCopy=e.edges.filter(t=>t.selected).map(Ge),e.nodesToCopy.length>0){const t={x:0,y:0};e.nodesToCopy.forEach(n=>{const r=.15*(n.width??0),i=.5*(n.height??0);t.x+=n.position.x+r,t.y+=n.position.y+i}),t.x/=e.nodesToCopy.length,t.y/=e.nodesToCopy.length,e.nodesToCopy.forEach(n=>{n.position.x-=t.x,n.position.y-=t.y})}},selectionPasted:(e,t)=>{const{cursorPosition:n}=t.payload,r=e.nodesToCopy.map(Ge),i=r.map(u=>u.data.id),o=e.edgesToCopy.filter(u=>i.includes(u.source)&&i.includes(u.target)).map(Ge);o.forEach(u=>u.selected=!0),r.forEach(u=>{const d=ul();o.forEach(h=>{h.source===u.data.id&&(h.source=d,h.id=h.id.replace(u.data.id,d)),h.target===u.data.id&&(h.target=d,h.id=h.id.replace(u.data.id,d))}),u.selected=!0,u.id=d,u.data.id=d;const f=j8(e.nodes,u.position.x+((n==null?void 0:n.x)??0),u.position.y+((n==null?void 0:n.y)??0));u.position=f});const s=r.map(u=>({item:u,type:"add"})),a=e.nodes.map(u=>({id:u.data.id,type:"select",selected:!1})),l=o.map(u=>({item:u,type:"add"})),c=e.edges.map(u=>({id:u.id,type:"select",selected:!1}));e.nodes=lc(s.concat(a),e.nodes),e.edges=Ql(l.concat(c),e.edges),r.forEach(u=>{e.nodeExecutionStates[u.id]={nodeId:u.id,...pw}})},addNodePopoverOpened:e=>{e.addNewNodePosition=null,e.isAddNodePopoverOpen=!0},addNodePopoverClosed:e=>{e.isAddNodePopoverOpen=!1,e.connectionStartParams=null,e.connectionStartFieldType=null},addNodePopoverToggled:e=>{e.isAddNodePopoverOpen=!e.isAddNodePopoverOpen},selectionModeChanged:(e,t)=>{e.selectionMode=t.payload?Cl.Full:Cl.Partial}},extraReducers:e=>{e.addCase(kg.pending,t=>{t.isReady=!1}),e.addCase(yT,(t,n)=>{const{nodes:r,edges:i}=n.payload;t.nodes=lc(r.map(o=>({item:{...o,...cB},type:"add"})),[]),t.edges=Ql(i.map(o=>({item:o,type:"add"})),[]),t.nodeExecutionStates=r.reduce((o,s)=>(o[s.id]={nodeId:s.id,...pw},o),{})}),e.addCase(D4,(t,n)=>{const{source_node_id:r}=n.payload.data,i=t.nodeExecutionStates[r];i&&(i.status=gc.enum.IN_PROGRESS)}),e.addCase(B4,(t,n)=>{const{source_node_id:r,result:i}=n.payload.data,o=t.nodeExecutionStates[r];o&&(o.status=gc.enum.COMPLETED,o.progress!==null&&(o.progress=1),o.outputs.push(i))}),e.addCase(u_,(t,n)=>{const{source_node_id:r}=n.payload.data,i=t.nodeExecutionStates[r];i&&(i.status=gc.enum.FAILED,i.error=n.payload.data.error,i.progress=null,i.progressImage=null)}),e.addCase(z4,(t,n)=>{const{source_node_id:r,step:i,total_steps:o,progress_image:s}=n.payload.data,a=t.nodeExecutionStates[r];a&&(a.status=gc.enum.IN_PROGRESS,a.progress=(i+1)/o,a.progressImage=s??null)}),e.addCase(d_,(t,n)=>{["in_progress"].includes(n.payload.data.queue_item.status)&&Fo(t.nodeExecutionStates,r=>{r.status=gc.enum.PENDING,r.error=null,r.progress=null,r.progressImage=null,r.outputs=[]})})}}),{addNodePopoverClosed:aHe,addNodePopoverOpened:lHe,addNodePopoverToggled:cHe,connectionEnded:z1e,connectionMade:j1e,connectionStarted:uHe,edgeDeleted:V1e,edgeChangeStarted:dHe,edgesChanged:U1e,edgesDeleted:G1e,edgeUpdated:H1e,fieldBoardValueChanged:W1e,fieldBooleanValueChanged:q1e,fieldColorValueChanged:K1e,fieldControlNetModelValueChanged:X1e,fieldEnumModelValueChanged:Q1e,fieldImageValueChanged:Um,fieldIPAdapterModelValueChanged:Y1e,fieldT2IAdapterModelValueChanged:Z1e,fieldLabelChanged:J1e,fieldLoRAModelValueChanged:ebe,fieldMainModelValueChanged:tbe,fieldNumberValueChanged:nbe,fieldRefinerModelValueChanged:rbe,fieldSchedulerValueChanged:ibe,fieldStringValueChanged:obe,fieldVaeModelValueChanged:sbe,mouseOverFieldChanged:fHe,mouseOverNodeChanged:hHe,nodeAdded:abe,nodeReplaced:Mj,nodeEditorReset:Rj,nodeExclusivelySelected:pHe,nodeIsIntermediateChanged:lbe,nodeIsOpenChanged:cbe,nodeLabelChanged:ube,nodeNotesChanged:dbe,nodeOpacityChanged:gHe,nodesChanged:fbe,nodesDeleted:Oj,nodeTemplatesBuilt:$j,nodeUseCacheChanged:hbe,notesNodeValueChanged:pbe,selectedAll:mHe,selectedEdgesChanged:yHe,selectedNodesChanged:vHe,selectionCopied:bHe,selectionModeChanged:_He,selectionPasted:gbe,shouldAnimateEdgesChanged:SHe,shouldColorEdgesChanged:xHe,shouldShowMinimapPanelChanged:wHe,shouldSnapToGridChanged:CHe,shouldValidateGraphChanged:EHe,viewportChanged:THe,edgeAdded:mbe}=Ij.actions,ybe=br(z1e,j1e,V1e,U1e,G1e,H1e,W1e,q1e,K1e,X1e,Q1e,Um,Y1e,Z1e,J1e,ebe,tbe,nbe,rbe,ibe,obe,sbe,abe,Mj,lbe,cbe,ube,dbe,fbe,Oj,hbe,pbe,gbe,mbe),vbe=Ij.reducer,gw={name:"",author:"",description:"",version:"",contact:"",tags:"",notes:"",exposedFields:[],meta:{version:"2.0.0",category:"user"},isTouched:!0},Nj=jt({name:"workflow",initialState:gw,reducers:{workflowExposedFieldAdded:(e,t)=>{e.exposedFields=YF(e.exposedFields.concat(t.payload),n=>`${n.nodeId}-${n.fieldName}`),e.isTouched=!0},workflowExposedFieldRemoved:(e,t)=>{e.exposedFields=e.exposedFields.filter(n=>!$4(n,t.payload)),e.isTouched=!0},workflowNameChanged:(e,t)=>{e.name=t.payload,e.isTouched=!0},workflowDescriptionChanged:(e,t)=>{e.description=t.payload,e.isTouched=!0},workflowTagsChanged:(e,t)=>{e.tags=t.payload,e.isTouched=!0},workflowAuthorChanged:(e,t)=>{e.author=t.payload,e.isTouched=!0},workflowNotesChanged:(e,t)=>{e.notes=t.payload,e.isTouched=!0},workflowVersionChanged:(e,t)=>{e.version=t.payload,e.isTouched=!0},workflowContactChanged:(e,t)=>{e.contact=t.payload,e.isTouched=!0},workflowIDChanged:(e,t)=>{e.id=t.payload},workflowReset:()=>Ge(gw),workflowSaved:e=>{e.isTouched=!1}},extraReducers:e=>{e.addCase(yT,(t,n)=>{const{nodes:r,edges:i,...o}=n.payload;return{...Ge(o),isTouched:!0}}),e.addCase(Oj,(t,n)=>{n.payload.forEach(r=>{t.exposedFields=t.exposedFields.filter(i=>i.nodeId!==r.id)})}),e.addCase(Rj,()=>Ge(gw)),e.addMatcher(ybe,t=>{t.isTouched=!0})}}),{workflowExposedFieldAdded:bbe,workflowExposedFieldRemoved:AHe,workflowNameChanged:kHe,workflowDescriptionChanged:PHe,workflowTagsChanged:IHe,workflowAuthorChanged:MHe,workflowNotesChanged:RHe,workflowVersionChanged:OHe,workflowContactChanged:$He,workflowIDChanged:NHe,workflowReset:FHe,workflowSaved:DHe}=Nj.actions,_be=Nj.reducer,Fj={esrganModelName:"RealESRGAN_x4plus.pth"},Dj=jt({name:"postprocessing",initialState:Fj,reducers:{esrganModelNameChanged:(e,t)=>{e.esrganModelName=t.payload}}}),{esrganModelNameChanged:LHe}=Dj.actions,Sbe=Dj.reducer,Lj={positiveStylePrompt:"",negativeStylePrompt:"",shouldConcatSDXLStylePrompt:!0,shouldUseSDXLRefiner:!1,sdxlImg2ImgDenoisingStrength:.7,refinerModel:null,refinerSteps:20,refinerCFGScale:7.5,refinerScheduler:"euler",refinerPositiveAestheticScore:6,refinerNegativeAestheticScore:2.5,refinerStart:.8},Bj=jt({name:"sdxl",initialState:Lj,reducers:{setPositiveStylePromptSDXL:(e,t)=>{e.positiveStylePrompt=t.payload},setNegativeStylePromptSDXL:(e,t)=>{e.negativeStylePrompt=t.payload},setShouldConcatSDXLStylePrompt:(e,t)=>{e.shouldConcatSDXLStylePrompt=t.payload},setShouldUseSDXLRefiner:(e,t)=>{e.shouldUseSDXLRefiner=t.payload},setSDXLImg2ImgDenoisingStrength:(e,t)=>{e.sdxlImg2ImgDenoisingStrength=t.payload},refinerModelChanged:(e,t)=>{e.refinerModel=t.payload},setRefinerSteps:(e,t)=>{e.refinerSteps=t.payload},setRefinerCFGScale:(e,t)=>{e.refinerCFGScale=t.payload},setRefinerScheduler:(e,t)=>{e.refinerScheduler=t.payload},setRefinerPositiveAestheticScore:(e,t)=>{e.refinerPositiveAestheticScore=t.payload},setRefinerNegativeAestheticScore:(e,t)=>{e.refinerNegativeAestheticScore=t.payload},setRefinerStart:(e,t)=>{e.refinerStart=t.payload}}}),{setPositiveStylePromptSDXL:BHe,setNegativeStylePromptSDXL:zHe,setShouldConcatSDXLStylePrompt:jHe,setShouldUseSDXLRefiner:xbe,setSDXLImg2ImgDenoisingStrength:VHe,refinerModelChanged:V8,setRefinerSteps:UHe,setRefinerCFGScale:GHe,setRefinerScheduler:HHe,setRefinerPositiveAestheticScore:WHe,setRefinerNegativeAestheticScore:qHe,setRefinerStart:KHe}=Bj.actions,wbe=Bj.reducer,zj={shift:!1,ctrl:!1,meta:!1},jj=jt({name:"hotkeys",initialState:zj,reducers:{shiftKeyPressed:(e,t)=>{e.shift=t.payload},ctrlKeyPressed:(e,t)=>{e.ctrl=t.payload},metaKeyPressed:(e,t)=>{e.meta=t.payload}}}),{shiftKeyPressed:XHe,ctrlKeyPressed:QHe,metaKeyPressed:YHe}=jj.actions,Cbe=jj.reducer,Vj={activeTab:"txt2img",shouldShowImageDetails:!1,shouldUseCanvasBetaLayout:!1,shouldShowExistingModelsInSearch:!1,shouldUseSliders:!1,shouldHidePreview:!1,shouldShowProgressInViewer:!0,shouldShowEmbeddingPicker:!1,shouldAutoChangeDimensions:!1,favoriteSchedulers:[],globalMenuCloseTrigger:0,panels:{}},Uj=jt({name:"ui",initialState:Vj,reducers:{setActiveTab:(e,t)=>{e.activeTab=t.payload},setShouldShowImageDetails:(e,t)=>{e.shouldShowImageDetails=t.payload},setShouldUseCanvasBetaLayout:(e,t)=>{e.shouldUseCanvasBetaLayout=t.payload},setShouldHidePreview:(e,t)=>{e.shouldHidePreview=t.payload},setShouldShowExistingModelsInSearch:(e,t)=>{e.shouldShowExistingModelsInSearch=t.payload},setShouldUseSliders:(e,t)=>{e.shouldUseSliders=t.payload},setShouldShowProgressInViewer:(e,t)=>{e.shouldShowProgressInViewer=t.payload},favoriteSchedulersChanged:(e,t)=>{e.favoriteSchedulers=t.payload},toggleEmbeddingPicker:e=>{e.shouldShowEmbeddingPicker=!e.shouldShowEmbeddingPicker},setShouldAutoChangeDimensions:(e,t)=>{e.shouldAutoChangeDimensions=t.payload},bumpGlobalMenuCloseTrigger:e=>{e.globalMenuCloseTrigger+=1},panelsChanged:(e,t)=>{e.panels[t.payload.name]=t.payload.value}},extraReducers(e){e.addCase(m_,t=>{t.activeTab="img2img"})}}),{setActiveTab:Gj,setShouldShowImageDetails:ZHe,setShouldUseCanvasBetaLayout:JHe,setShouldShowExistingModelsInSearch:eWe,setShouldUseSliders:tWe,setShouldHidePreview:nWe,setShouldShowProgressInViewer:rWe,favoriteSchedulersChanged:iWe,toggleEmbeddingPicker:oWe,setShouldAutoChangeDimensions:sWe,bumpGlobalMenuCloseTrigger:aWe,panelsChanged:lWe}=Uj.actions,Ebe=Uj.reducer;function cS(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function Hj(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const r=cS(n);return(i,o)=>r.then(s=>o(s.transaction(t,i).objectStore(t)))}let mw;function BT(){return mw||(mw=Hj("keyval-store","keyval")),mw}function Tbe(e,t=BT()){return t("readonly",n=>cS(n.get(e)))}function Abe(e,t,n=BT()){return n("readwrite",r=>(r.put(t,e),cS(r.transaction)))}function cWe(e=BT()){return e("readwrite",t=>(t.clear(),cS(t.transaction)))}var zT=Object.defineProperty,kbe=Object.getOwnPropertyDescriptor,Pbe=Object.getOwnPropertyNames,Ibe=Object.prototype.hasOwnProperty,Mbe=(e,t)=>{for(var n in t)zT(e,n,{get:t[n],enumerable:!0})},Rbe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Pbe(t))!Ibe.call(e,i)&&i!==n&&zT(e,i,{get:()=>t[i],enumerable:!(r=kbe(t,i))||r.enumerable});return e},Obe=e=>Rbe(zT({},"__esModule",{value:!0}),e),Wj={};Mbe(Wj,{__DO_NOT_USE__ActionTypes:()=>Pg,applyMiddleware:()=>jbe,bindActionCreators:()=>zbe,combineReducers:()=>Bbe,compose:()=>qj,createStore:()=>VT,isAction:()=>Vbe,isPlainObject:()=>jT,legacy_createStore:()=>Dbe});var $be=Obe(Wj);function Mn(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Nbe=(()=>typeof Symbol=="function"&&Symbol.observable||"@@observable")(),U8=Nbe,yw=()=>Math.random().toString(36).substring(7).split("").join("."),Fbe={INIT:`@@redux/INIT${yw()}`,REPLACE:`@@redux/REPLACE${yw()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${yw()}`},Pg=Fbe;function jT(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function VT(e,t,n){if(typeof e!="function")throw new Error(Mn(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Mn(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Mn(1));return n(VT)(e,t)}let r=e,i=t,o=new Map,s=o,a=0,l=!1;function c(){s===o&&(s=new Map,o.forEach((_,v)=>{s.set(v,_)}))}function u(){if(l)throw new Error(Mn(3));return i}function d(_){if(typeof _!="function")throw new Error(Mn(4));if(l)throw new Error(Mn(5));let v=!0;c();const y=a++;return s.set(y,_),function(){if(v){if(l)throw new Error(Mn(6));v=!1,c(),s.delete(y),o=null}}}function f(_){if(!jT(_))throw new Error(Mn(7));if(typeof _.type>"u")throw new Error(Mn(8));if(typeof _.type!="string")throw new Error(Mn(17));if(l)throw new Error(Mn(9));try{l=!0,i=r(i,_)}finally{l=!1}return(o=s).forEach(y=>{y()}),_}function h(_){if(typeof _!="function")throw new Error(Mn(10));r=_,f({type:Pg.REPLACE})}function p(){const _=d;return{subscribe(v){if(typeof v!="object"||v===null)throw new Error(Mn(11));function y(){const b=v;b.next&&b.next(u())}return y(),{unsubscribe:_(y)}},[U8](){return this}}}return f({type:Pg.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:h,[U8]:p}}function Dbe(e,t,n){return VT(e,t,n)}function Lbe(e){Object.keys(e).forEach(t=>{const n=e[t];if(typeof n(void 0,{type:Pg.INIT})>"u")throw new Error(Mn(12));if(typeof n(void 0,{type:Pg.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Mn(13))})}function Bbe(e){const t=Object.keys(e),n={};for(let o=0;o"u")throw a&&a.type,new Error(Mn(14));c[d]=p,l=l||p!==h}return l=l||r.length!==Object.keys(s).length,l?c:s}}function G8(e,t){return function(...n){return t(e.apply(this,n))}}function zbe(e,t){if(typeof e=="function")return G8(e,t);if(typeof e!="object"||e===null)throw new Error(Mn(16));const n={};for(const r in e){const i=e[r];typeof i=="function"&&(n[r]=G8(i,t))}return n}function qj(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function jbe(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Mn(15))};const s={getState:i.getState,dispatch:(l,...c)=>o(l,...c)},a=e.map(l=>l(s));return o=qj(...a)(i.dispatch),{...i,dispatch:o}}}function Vbe(e){return jT(e)&&"type"in e&&typeof e.type=="string"}Xj=Kj=void 0;var Ube=$be,Gbe=function(){var t=[],n=[],r=void 0,i=function(c){return r=c,function(u){return function(d){return Ube.compose.apply(void 0,n)(u)(d)}}},o=function(){for(var c,u,d=arguments.length,f=Array(d),h=0;h=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(c){throw c},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,s=!1,a;return{s:function(){n=n.call(e)},n:function(){var c=n.next();return o=c.done,c},e:function(c){s=!0,a=c},f:function(){try{!o&&n.return!=null&&n.return()}finally{if(s)throw a}}}}function Yj(e,t){if(e){if(typeof e=="string")return K8(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return K8(e,t)}}function K8(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,i=r.prefix,o=r.driver,s=r.persistWholeStore,a=r.serialize;try{var l=s?a_e:l_e;yield l(t,n,{prefix:i,driver:o,serialize:a})}catch(c){console.warn("redux-remember: persist error",c)}});return function(){return e.apply(this,arguments)}}();function Z8(e,t,n,r,i,o,s){try{var a=e[o](s),l=a.value}catch(c){n(c);return}a.done?t(l):Promise.resolve(l).then(r,i)}function J8(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(l){Z8(o,r,i,s,a,"next",l)}function a(l){Z8(o,r,i,s,a,"throw",l)}s(void 0)})}}var u_e=function(){var e=J8(function*(t,n,r){var i=r.prefix,o=r.driver,s=r.serialize,a=r.unserialize,l=r.persistThrottle,c=r.persistDebounce,u=r.persistWholeStore;yield n_e(t,n,{prefix:i,driver:o,unserialize:a,persistWholeStore:u});var d={},f=function(){var h=J8(function*(){var p=Qj(t.getState(),n);yield c_e(p,d,{prefix:i,driver:o,serialize:s,persistWholeStore:u}),GT(p,d)||t.dispatch({type:Kbe,payload:p}),d=p});return function(){return h.apply(this,arguments)}}();c&&c>0?t.subscribe(Qbe(f,c)):t.subscribe(Xbe(f,l))});return function(n,r,i){return e.apply(this,arguments)}}();const d_e=u_e;function Mg(e){"@babel/helpers - typeof";return Mg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mg(e)}function eM(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function _w(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:n.state,o=arguments.length>1?arguments[1]:void 0;o.type&&((o==null?void 0:o.type)==="@@INIT"||o!=null&&(r=o.type)!==null&&r!==void 0&&r.startsWith("@@redux/INIT"))&&(n.state=_w({},i));var s=typeof t=="function"?t:Vb(t);switch(o.type){case v3:{var a=_w(_w({},n.state),(o==null?void 0:o.payload)||{});return n.state=s(a,{type:v3,payload:a}),n.state}default:return s(i,o)}}},m_e=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=r.prefix,o=i===void 0?"@@remember-":i,s=r.serialize,a=s===void 0?function(v,y){return JSON.stringify(v)}:s,l=r.unserialize,c=l===void 0?function(v,y){return JSON.parse(v)}:l,u=r.persistThrottle,d=u===void 0?100:u,f=r.persistDebounce,h=r.persistWholeStore,p=h===void 0?!1:h,m=r.initActionType;if(!t)throw Error("redux-remember error: driver required");if(!Array.isArray(n))throw Error("redux-remember error: rememberedKeys needs to be an array");var _=function(y){return function(g,b,S){var w=!1,C=function(A){return d_e(A,n,{driver:t,prefix:o,serialize:a,unserialize:c,persistThrottle:d,persistDebounce:f,persistWholeStore:p})},x=y(function(k,A){return!w&&m&&A.type===m&&(w=!0,setTimeout(function(){return C(x)},0)),g(k,A)},b,S);return m||(w=!0,C(x)),x}};return _};const tM="@@invokeai-",y_e=["cursorPosition"],v_e=["pendingControlImages"],b_e=["prompts"],__e=["selection","selectedBoardId","galleryView"],S_e=["nodeTemplates","connectionStartParams","connectionStartFieldType","selectedNodes","selectedEdges","isReady","nodesToCopy","edgesToCopy","connectionMade","modifyingEdge","addNewNodePosition"],x_e=[],w_e=[],C_e=["isInitialized","isConnected","denoiseProgress","status"],E_e=["shouldShowImageDetails","globalMenuCloseTrigger","panels"],T_e={canvas:y_e,gallery:__e,generation:x_e,nodes:S_e,postprocessing:w_e,system:C_e,ui:E_e,controlNet:v_e,dynamicPrompts:b_e},A_e=(e,t)=>{const n=uu(e,T_e[t]??[]);return JSON.stringify(n)},k_e={canvas:SL,gallery:nB,generation:iT,nodes:Pj,postprocessing:Fj,system:gD,config:RD,ui:Vj,hotkeys:zj,controlAdapters:D5,dynamicPrompts:hT,sdxl:Lj},P_e=(e,t)=>zF(JSON.parse(e),k_e[t]),I_e=e=>{if(the(e)&&e.payload.nodes){const t={};return{...e,payload:{...e.payload,nodes:t}}}return kg.fulfilled.match(e)?{...e,payload:""}:$j.match(e)?{...e,payload:""}:e},M_e=["canvas/setCursorPosition","canvas/setStageCoordinates","canvas/setStageScale","canvas/setIsDrawing","canvas/setBoundingBoxCoordinates","canvas/setBoundingBoxDimensions","canvas/setIsDrawing","canvas/addPointToCurrentLine","socket/socketGeneratorProgress","socket/appSocketGeneratorProgress","@@REMEMBER_PERSISTED"],R_e=e=>e,O_e=br(rue,iue),$_e=()=>{fe({matcher:O_e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{batchIds:o}=i.canvas;try{const s=t(en.endpoints.cancelByBatchIds.initiate({batch_ids:o},{fixedCacheKey:"cancelByBatchIds"})),{canceled:a}=await s.unwrap();s.reset(),a>0&&(r.debug(`Canceled ${a} canvas batches`),t(Ve({title:J("queue.cancelBatchSucceeded"),status:"success"}))),t(lue())}catch{r.error("Failed to cancel canvas batches"),t(Ve({title:J("queue.cancelBatchFailed"),status:"error"}))}}})};he("app/appStarted");const N_e=()=>{fe({matcher:ce.endpoints.listImages.matchFulfilled,effect:async(e,{dispatch:t,unsubscribe:n,cancelActiveListeners:r})=>{if(e.meta.arg.queryCacheKey!==Vi({board_id:"none",categories:Rn}))return;r(),n();const i=e.payload;if(i.ids.length>0){const o=Ot.getSelectors().selectAll(i)[0];t(ps(o??null))}}})},F_e=()=>{fe({matcher:en.endpoints.enqueueBatch.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{data:r}=en.endpoints.getQueueStatus.select()(n());!r||r.processor.is_started||t(en.endpoints.resumeProcessor.initiate(void 0,{fixedCacheKey:"resumeProcessor"}))}})},Jj=Lo.injectEndpoints({endpoints:e=>({getAppVersion:e.query({query:()=>({url:"app/version",method:"GET"}),providesTags:["AppVersion"],keepUnusedDataFor:864e5}),getAppConfig:e.query({query:()=>({url:"app/config",method:"GET"}),providesTags:["AppConfig"],keepUnusedDataFor:864e5}),getInvocationCacheStatus:e.query({query:()=>({url:"app/invocation_cache/status",method:"GET"}),providesTags:["InvocationCacheStatus"]}),clearInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache",method:"DELETE"}),invalidatesTags:["InvocationCacheStatus"]}),enableInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache/enable",method:"PUT"}),invalidatesTags:["InvocationCacheStatus"]}),disableInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache/disable",method:"PUT"}),invalidatesTags:["InvocationCacheStatus"]})})}),{useGetAppVersionQuery:uWe,useGetAppConfigQuery:dWe,useClearInvocationCacheMutation:fWe,useDisableInvocationCacheMutation:hWe,useEnableInvocationCacheMutation:pWe,useGetInvocationCacheStatusQuery:gWe}=Jj,D_e=()=>{fe({matcher:Jj.endpoints.getAppConfig.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const{infill_methods:r=[],nsfw_methods:i=[],watermarking_methods:o=[]}=e.payload,s=t().generation.infillMethod;r.includes(s)||n(qle(r[0])),i.includes("nsfw_checker")||n(Zoe(!1)),o.includes("invisible_watermark")||n(Joe(!1))}})},L_e=he("app/appStarted"),B_e=()=>{fe({actionCreator:L_e,effect:async(e,{unsubscribe:t,cancelActiveListeners:n})=>{n(),t()}})};function z_e(e){if(e.sheet)return e.sheet;for(var t=0;t0?er(Lf,--ni):0,yf--,mn===10&&(yf=1,fS--),mn}function Si(){return mn=ni2||Og(mn)>3?"":" "}function J_e(e,t){for(;--t&&Si()&&!(mn<48||mn>102||mn>57&&mn<65||mn>70&&mn<97););return Gm(e,sv()+(t<6&&ms()==32&&Si()==32))}function S3(e){for(;Si();)switch(mn){case e:return ni;case 34:case 39:e!==34&&e!==39&&S3(mn);break;case 40:e===41&&S3(e);break;case 92:Si();break}return ni}function eSe(e,t){for(;Si()&&e+mn!==47+10;)if(e+mn===42+42&&ms()===47)break;return"/*"+Gm(t,ni-1)+"*"+dS(e===47?e:Si())}function tSe(e){for(;!Og(ms());)Si();return Gm(e,ni)}function nSe(e){return oV(lv("",null,null,null,[""],e=iV(e),0,[0],e))}function lv(e,t,n,r,i,o,s,a,l){for(var c=0,u=0,d=s,f=0,h=0,p=0,m=1,_=1,v=1,y=0,g="",b=i,S=o,w=r,C=g;_;)switch(p=y,y=Si()){case 40:if(p!=108&&er(C,d-1)==58){_3(C+=dt(av(y),"&","&\f"),"&\f")!=-1&&(v=-1);break}case 34:case 39:case 91:C+=av(y);break;case 9:case 10:case 13:case 32:C+=Z_e(p);break;case 92:C+=J_e(sv()-1,7);continue;case 47:switch(ms()){case 42:case 47:iy(rSe(eSe(Si(),sv()),t,n),l);break;default:C+="/"}break;case 123*m:a[c++]=rs(C)*v;case 125*m:case 59:case 0:switch(y){case 0:case 125:_=0;case 59+u:v==-1&&(C=dt(C,/\f/g,"")),h>0&&rs(C)-d&&iy(h>32?rM(C+";",r,n,d-1):rM(dt(C," ","")+";",r,n,d-2),l);break;case 59:C+=";";default:if(iy(w=nM(C,t,n,c,u,i,a,g,b=[],S=[],d),o),y===123)if(u===0)lv(C,t,w,w,b,o,d,a,S);else switch(f===99&&er(C,3)===110?100:f){case 100:case 108:case 109:case 115:lv(e,w,w,r&&iy(nM(e,w,w,0,0,i,a,g,i,b=[],d),S),i,S,d,a,r?b:S);break;default:lv(C,w,w,w,[""],S,0,a,S)}}c=u=h=0,m=v=1,g=C="",d=s;break;case 58:d=1+rs(C),h=p;default:if(m<1){if(y==123)--m;else if(y==125&&m++==0&&Y_e()==125)continue}switch(C+=dS(y),y*m){case 38:v=u>0?1:(C+="\f",-1);break;case 44:a[c++]=(rs(C)-1)*v,v=1;break;case 64:ms()===45&&(C+=av(Si())),f=ms(),u=d=rs(g=C+=tSe(sv())),y++;break;case 45:p===45&&rs(C)==2&&(m=0)}}return o}function nM(e,t,n,r,i,o,s,a,l,c,u){for(var d=i-1,f=i===0?o:[""],h=qT(f),p=0,m=0,_=0;p0?f[v]+" "+y:dt(y,/&\f/g,f[v])))&&(l[_++]=g);return hS(e,t,n,i===0?HT:a,l,c,u)}function rSe(e,t,n){return hS(e,t,n,eV,dS(Q_e()),Rg(e,2,-2),0)}function rM(e,t,n,r){return hS(e,t,n,WT,Rg(e,0,r),Rg(e,r+1,-1),r)}function Bd(e,t){for(var n="",r=qT(e),i=0;i6)switch(er(e,t+1)){case 109:if(er(e,t+4)!==45)break;case 102:return dt(e,/(.+:)(.+)-([^]+)/,"$1"+ut+"$2-$3$1"+B1+(er(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~_3(e,"stretch")?aV(dt(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(er(e,t+1)!==115)break;case 6444:switch(er(e,rs(e)-3-(~_3(e,"!important")&&10))){case 107:return dt(e,":",":"+ut)+e;case 101:return dt(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+ut+(er(e,14)===45?"inline-":"")+"box$3$1"+ut+"$2$3$1"+dr+"$2box$3")+e}break;case 5936:switch(er(e,t+11)){case 114:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return ut+e+dr+e+e}return e}var fSe=function(t,n,r,i){if(t.length>-1&&!t.return)switch(t.type){case WT:t.return=aV(t.value,t.length);break;case tV:return Bd([_h(t,{value:dt(t.value,"@","@"+ut)})],i);case HT:if(t.length)return X_e(t.props,function(o){switch(K_e(o,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Bd([_h(t,{props:[dt(o,/:(read-\w+)/,":"+B1+"$1")]})],i);case"::placeholder":return Bd([_h(t,{props:[dt(o,/:(plac\w+)/,":"+ut+"input-$1")]}),_h(t,{props:[dt(o,/:(plac\w+)/,":"+B1+"$1")]}),_h(t,{props:[dt(o,/:(plac\w+)/,dr+"input-$1")]})],i)}return""})}},hSe=[fSe],pSe=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(m){var _=m.getAttribute("data-emotion");_.indexOf(" ")!==-1&&(document.head.appendChild(m),m.setAttribute("data-s",""))})}var i=t.stylisPlugins||hSe,o={},s,a=[];s=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(m){for(var _=m.getAttribute("data-emotion").split(" "),v=1;v<_.length;v++)o[_[v]]=!0;a.push(m)});var l,c=[uSe,dSe];{var u,d=[iSe,sSe(function(m){u.insert(m)})],f=oSe(c.concat(i,d)),h=function(_){return Bd(nSe(_),f)};l=function(_,v,y,g){u=y,h(_?_+"{"+v.styles+"}":v.styles),g&&(p.inserted[v.name]=!0)}}var p={key:n,sheet:new V_e({key:n,container:s,nonce:t.nonce,speedy:t.speedy,prepend:t.prepend,insertionPoint:t.insertionPoint}),nonce:t.nonce,inserted:o,registered:{},insert:l};return p.sheet.hydrate(a),p};function z1(){return z1=Object.assign?Object.assign.bind():function(e){for(var t=1;t=4;++r,i-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(i){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var TSe={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},ASe=/[A-Z]|^ms/g,kSe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,pV=function(t){return t.charCodeAt(1)===45},sM=function(t){return t!=null&&typeof t!="boolean"},Sw=sV(function(e){return pV(e)?e:e.replace(ASe,"-$&").toLowerCase()}),aM=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(kSe,function(r,i,o){return is={name:i,styles:o,next:is},i})}return TSe[t]!==1&&!pV(t)&&typeof n=="number"&&n!==0?n+"px":n};function $g(e,t,n){if(n==null)return"";if(n.__emotion_styles!==void 0)return n;switch(typeof n){case"boolean":return"";case"object":{if(n.anim===1)return is={name:n.name,styles:n.styles,next:is},n.name;if(n.styles!==void 0){var r=n.next;if(r!==void 0)for(;r!==void 0;)is={name:r.name,styles:r.styles,next:is},r=r.next;var i=n.styles+";";return i}return PSe(e,t,n)}case"function":{if(e!==void 0){var o=is,s=n(e);return is=o,$g(e,t,s)}break}}if(t==null)return n;var a=t[n];return a!==void 0?a:n}function PSe(e,t,n){var r="";if(Array.isArray(n))for(var i=0;iie.jsx("div",{className:"chakra-portal-zIndex",style:{position:"absolute",zIndex:e.zIndex,top:0,left:0,right:0},children:e.children}),GSe=e=>{const{appendToParentPortal:t,children:n}=e,[r,i]=I.useState(null),o=I.useRef(null),[,s]=I.useState({});I.useEffect(()=>s({}),[]);const a=jSe(),l=BSe();j1(()=>{if(!r)return;const u=r.ownerDocument,d=t?a??u.body:u.body;if(!d)return;o.current=u.createElement("div"),o.current.className=ZT,d.appendChild(o.current),s({});const f=o.current;return()=>{d.contains(f)&&d.removeChild(f)}},[r]);const c=l!=null&&l.zIndex?ie.jsx(USe,{zIndex:l==null?void 0:l.zIndex,children:n}):n;return o.current?gi.createPortal(ie.jsx(bV,{value:o.current,children:c}),o.current):ie.jsx("span",{ref:u=>{u&&i(u)}})},HSe=e=>{const{children:t,containerRef:n,appendToParentPortal:r}=e,i=n.current,o=i??(typeof window<"u"?document.body:void 0),s=I.useMemo(()=>{const l=i==null?void 0:i.ownerDocument.createElement("div");return l&&(l.className=ZT),l},[i]),[,a]=I.useState({});return j1(()=>a({}),[]),j1(()=>{if(!(!s||!o))return o.appendChild(s),()=>{o.removeChild(s)}},[s,o]),o&&s?gi.createPortal(ie.jsx(bV,{value:r?s:null,children:t}),s):null};function CS(e){const t={appendToParentPortal:!0,...e},{containerRef:n,...r}=t;return n?ie.jsx(HSe,{containerRef:n,...r}):ie.jsx(GSe,{...r})}CS.className=ZT;CS.selector=VSe;CS.displayName="Portal";function _V(){const e=I.useContext(Ng);if(!e)throw Error("useTheme: `theme` is undefined. Seems you forgot to wrap your app in `` or ``");return e}var JT=I.createContext({});JT.displayName="ColorModeContext";function ES(){const e=I.useContext(JT);if(e===void 0)throw new Error("useColorMode must be used within a ColorModeProvider");return e}function mWe(e,t){const{colorMode:n}=ES();return n==="dark"?t:e}function WSe(){const e=ES(),t=_V();return{...e,theme:t}}function qSe(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__breakpoints)==null?void 0:a.asArray)==null?void 0:l[s]};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function KSe(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__cssMap)==null?void 0:a[s])==null?void 0:l.value};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function yWe(e,t,n){const r=_V();return XSe(e,t,n)(r)}function XSe(e,t,n){const r=Array.isArray(t)?t:[t],i=Array.isArray(n)?n:[n];return o=>{const s=i.filter(Boolean),a=r.map((l,c)=>{var u,d;if(e==="breakpoints")return qSe(o,l,(u=s[c])!=null?u:l);const f=`${e}.${l}`;return KSe(o,f,(d=s[c])!=null?d:l)});return Array.isArray(t)?a:a[0]}}var Dl=(...e)=>e.filter(Boolean).join(" ");function QSe(){return!1}function ys(e){const t=typeof e;return e!=null&&(t==="object"||t==="function")&&!Array.isArray(e)}var vWe=e=>{const{condition:t,message:n}=e;t&&QSe()&&console.warn(n)};function us(e,...t){return YSe(e)?e(...t):e}var YSe=e=>typeof e=="function",bWe=e=>e?"":void 0,_We=e=>e?!0:void 0;function SWe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function xWe(...e){return function(n){e.forEach(r=>{r==null||r(n)})}}var V1={exports:{}};V1.exports;(function(e,t){var n=200,r="__lodash_hash_undefined__",i=800,o=16,s=9007199254740991,a="[object Arguments]",l="[object Array]",c="[object AsyncFunction]",u="[object Boolean]",d="[object Date]",f="[object Error]",h="[object Function]",p="[object GeneratorFunction]",m="[object Map]",_="[object Number]",v="[object Null]",y="[object Object]",g="[object Proxy]",b="[object RegExp]",S="[object Set]",w="[object String]",C="[object Undefined]",x="[object WeakMap]",k="[object ArrayBuffer]",A="[object DataView]",R="[object Float32Array]",L="[object Float64Array]",M="[object Int8Array]",E="[object Int16Array]",P="[object Int32Array]",O="[object Uint8Array]",F="[object Uint8ClampedArray]",$="[object Uint16Array]",D="[object Uint32Array]",N=/[\\^$.*+?()[\]{}|]/g,z=/^\[object .+?Constructor\]$/,V=/^(?:0|[1-9]\d*)$/,H={};H[R]=H[L]=H[M]=H[E]=H[P]=H[O]=H[F]=H[$]=H[D]=!0,H[a]=H[l]=H[k]=H[u]=H[A]=H[d]=H[f]=H[h]=H[m]=H[_]=H[y]=H[b]=H[S]=H[w]=H[x]=!1;var X=typeof He=="object"&&He&&He.Object===Object&&He,te=typeof self=="object"&&self&&self.Object===Object&&self,ee=X||te||Function("return this")(),j=t&&!t.nodeType&&t,q=j&&!0&&e&&!e.nodeType&&e,Z=q&&q.exports===j,oe=Z&&X.process,be=function(){try{var B=q&&q.require&&q.require("util").types;return B||oe&&oe.binding&&oe.binding("util")}catch{}}(),Me=be&&be.isTypedArray;function lt(B,U,K){switch(K.length){case 0:return B.call(U);case 1:return B.call(U,K[0]);case 2:return B.call(U,K[0],K[1]);case 3:return B.call(U,K[0],K[1],K[2])}return B.apply(U,K)}function Le(B,U){for(var K=-1,pe=Array(B);++K-1}function Rs(B,U){var K=this.__data__,pe=Cu(K,B);return pe<0?(++this.size,K.push([B,U])):K[pe][1]=U,this}Kn.prototype.clear=Ms,Kn.prototype.delete=Ca,Kn.prototype.get=Ea,Kn.prototype.has=wu,Kn.prototype.set=Rs;function Tr(B){var U=-1,K=B==null?0:B.length;for(this.clear();++U1?K[et-1]:void 0,Dt=et>2?K[2]:void 0;for(St=B.length>3&&typeof St=="function"?(et--,St):void 0,Dt&&GW(K[0],K[1],Dt)&&(St=et<3?void 0:St,et=1),U=Object(U);++pe-1&&B%1==0&&B0){if(++U>=i)return arguments[0]}else U=0;return B.apply(void 0,arguments)}}function ZW(B){if(B!=null){try{return sr.call(B)}catch{}try{return B+""}catch{}}return""}function h0(B,U){return B===U||B!==B&&U!==U}var ex=d0(function(){return arguments}())?d0:function(B){return Jf(B)&&fn.call(B,"callee")&&!ho.call(B,"callee")},tx=Array.isArray;function nx(B){return B!=null&&gk(B.length)&&!rx(B)}function JW(B){return Jf(B)&&nx(B)}var pk=Gl||iq;function rx(B){if(!ql(B))return!1;var U=Tu(B);return U==h||U==p||U==c||U==g}function gk(B){return typeof B=="number"&&B>-1&&B%1==0&&B<=s}function ql(B){var U=typeof B;return B!=null&&(U=="object"||U=="function")}function Jf(B){return B!=null&&typeof B=="object"}function eq(B){if(!Jf(B)||Tu(B)!=y)return!1;var U=oi(B);if(U===null)return!0;var K=fn.call(U,"constructor")&&U.constructor;return typeof K=="function"&&K instanceof K&&sr.call(K)==Ri}var mk=Me?we(Me):IW;function tq(B){return BW(B,yk(B))}function yk(B){return nx(B)?X2(B,!0):MW(B)}var nq=zW(function(B,U,K,pe){dk(B,U,K,pe)});function rq(B){return function(){return B}}function vk(B){return B}function iq(){return!1}e.exports=nq})(V1,V1.exports);var ZSe=V1.exports;const ds=Ml(ZSe);var JSe=e=>/!(important)?$/.test(e),uM=e=>typeof e=="string"?e.replace(/!(important)?$/,"").trim():e,e2e=(e,t)=>n=>{const r=String(t),i=JSe(r),o=uM(r),s=e?`${e}.${o}`:o;let a=ys(n.__cssMap)&&s in n.__cssMap?n.__cssMap[s].varRef:t;return a=uM(a),i?`${a} !important`:a};function eA(e){const{scale:t,transform:n,compose:r}=e;return(o,s)=>{var a;const l=e2e(t,o)(s);let c=(a=n==null?void 0:n(l,s))!=null?a:l;return r&&(c=r(c,s)),c}}var oy=(...e)=>t=>e.reduce((n,r)=>r(n),t);function Di(e,t){return n=>{const r={property:n,scale:e};return r.transform=eA({scale:e,transform:t}),r}}var t2e=({rtl:e,ltr:t})=>n=>n.direction==="rtl"?e:t;function n2e(e){const{property:t,scale:n,transform:r}=e;return{scale:n,property:t2e(t),transform:n?eA({scale:n,compose:r}):r}}var SV=["rotate(var(--chakra-rotate, 0))","scaleX(var(--chakra-scale-x, 1))","scaleY(var(--chakra-scale-y, 1))","skewX(var(--chakra-skew-x, 0))","skewY(var(--chakra-skew-y, 0))"];function r2e(){return["translateX(var(--chakra-translate-x, 0))","translateY(var(--chakra-translate-y, 0))",...SV].join(" ")}function i2e(){return["translate3d(var(--chakra-translate-x, 0), var(--chakra-translate-y, 0), 0)",...SV].join(" ")}var o2e={"--chakra-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-sepia":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-drop-shadow":"var(--chakra-empty,/*!*/ /*!*/)",filter:["var(--chakra-blur)","var(--chakra-brightness)","var(--chakra-contrast)","var(--chakra-grayscale)","var(--chakra-hue-rotate)","var(--chakra-invert)","var(--chakra-saturate)","var(--chakra-sepia)","var(--chakra-drop-shadow)"].join(" ")},s2e={backdropFilter:["var(--chakra-backdrop-blur)","var(--chakra-backdrop-brightness)","var(--chakra-backdrop-contrast)","var(--chakra-backdrop-grayscale)","var(--chakra-backdrop-hue-rotate)","var(--chakra-backdrop-invert)","var(--chakra-backdrop-opacity)","var(--chakra-backdrop-saturate)","var(--chakra-backdrop-sepia)"].join(" "),"--chakra-backdrop-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-opacity":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-sepia":"var(--chakra-empty,/*!*/ /*!*/)"};function a2e(e){return{"--chakra-ring-offset-shadow":"var(--chakra-ring-inset) 0 0 0 var(--chakra-ring-offset-width) var(--chakra-ring-offset-color)","--chakra-ring-shadow":"var(--chakra-ring-inset) 0 0 0 calc(var(--chakra-ring-width) + var(--chakra-ring-offset-width)) var(--chakra-ring-color)","--chakra-ring-width":e,boxShadow:["var(--chakra-ring-offset-shadow)","var(--chakra-ring-shadow)","var(--chakra-shadow, 0 0 #0000)"].join(", ")}}var l2e={"row-reverse":{space:"--chakra-space-x-reverse",divide:"--chakra-divide-x-reverse"},"column-reverse":{space:"--chakra-space-y-reverse",divide:"--chakra-divide-y-reverse"}},x3={"to-t":"to top","to-tr":"to top right","to-r":"to right","to-br":"to bottom right","to-b":"to bottom","to-bl":"to bottom left","to-l":"to left","to-tl":"to top left"},c2e=new Set(Object.values(x3)),w3=new Set(["none","-moz-initial","inherit","initial","revert","unset"]),u2e=e=>e.trim();function d2e(e,t){if(e==null||w3.has(e))return e;if(!(C3(e)||w3.has(e)))return`url('${e}')`;const i=/(^[a-z-A-Z]+)\((.*)\)/g.exec(e),o=i==null?void 0:i[1],s=i==null?void 0:i[2];if(!o||!s)return e;const a=o.includes("-gradient")?o:`${o}-gradient`,[l,...c]=s.split(",").map(u2e).filter(Boolean);if((c==null?void 0:c.length)===0)return e;const u=l in x3?x3[l]:l;c.unshift(u);const d=c.map(f=>{if(c2e.has(f))return f;const h=f.indexOf(" "),[p,m]=h!==-1?[f.substr(0,h),f.substr(h+1)]:[f],_=C3(m)?m:m&&m.split(" "),v=`colors.${p}`,y=v in t.__cssMap?t.__cssMap[v].varRef:p;return _?[y,...Array.isArray(_)?_:[_]].join(" "):y});return`${a}(${d.join(", ")})`}var C3=e=>typeof e=="string"&&e.includes("(")&&e.includes(")"),f2e=(e,t)=>d2e(e,t??{});function h2e(e){return/^var\(--.+\)$/.test(e)}var p2e=e=>{const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}},Ko=e=>t=>`${e}(${t})`,Ze={filter(e){return e!=="auto"?e:o2e},backdropFilter(e){return e!=="auto"?e:s2e},ring(e){return a2e(Ze.px(e))},bgClip(e){return e==="text"?{color:"transparent",backgroundClip:"text"}:{backgroundClip:e}},transform(e){return e==="auto"?r2e():e==="auto-gpu"?i2e():e},vh(e){return e==="$100vh"?"var(--chakra-vh)":e},px(e){if(e==null)return e;const{unitless:t}=p2e(e);return t||typeof e=="number"?`${e}px`:e},fraction(e){return typeof e!="number"||e>1?e:`${e*100}%`},float(e,t){const n={left:"right",right:"left"};return t.direction==="rtl"?n[e]:e},degree(e){if(h2e(e)||e==null)return e;const t=typeof e=="string"&&!e.endsWith("deg");return typeof e=="number"||t?`${e}deg`:e},gradient:f2e,blur:Ko("blur"),opacity:Ko("opacity"),brightness:Ko("brightness"),contrast:Ko("contrast"),dropShadow:Ko("drop-shadow"),grayscale:Ko("grayscale"),hueRotate:e=>Ko("hue-rotate")(Ze.degree(e)),invert:Ko("invert"),saturate:Ko("saturate"),sepia:Ko("sepia"),bgImage(e){return e==null||C3(e)||w3.has(e)?e:`url(${e})`},outline(e){const t=String(e)==="0"||String(e)==="none";return e!==null&&t?{outline:"2px solid transparent",outlineOffset:"2px"}:{outline:e}},flexDirection(e){var t;const{space:n,divide:r}=(t=l2e[e])!=null?t:{},i={flexDirection:e};return n&&(i[n]=1),r&&(i[r]=1),i}},G={borderWidths:Di("borderWidths"),borderStyles:Di("borderStyles"),colors:Di("colors"),borders:Di("borders"),gradients:Di("gradients",Ze.gradient),radii:Di("radii",Ze.px),space:Di("space",oy(Ze.vh,Ze.px)),spaceT:Di("space",oy(Ze.vh,Ze.px)),degreeT(e){return{property:e,transform:Ze.degree}},prop(e,t,n){return{property:e,scale:t,...t&&{transform:eA({scale:t,transform:n})}}},propT(e,t){return{property:e,transform:t}},sizes:Di("sizes",oy(Ze.vh,Ze.px)),sizesT:Di("sizes",oy(Ze.vh,Ze.fraction)),shadows:Di("shadows"),logical:n2e,blur:Di("blur",Ze.blur)},cv={background:G.colors("background"),backgroundColor:G.colors("backgroundColor"),backgroundImage:G.gradients("backgroundImage"),backgroundSize:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundAttachment:!0,backgroundClip:{transform:Ze.bgClip},bgSize:G.prop("backgroundSize"),bgPosition:G.prop("backgroundPosition"),bg:G.colors("background"),bgColor:G.colors("backgroundColor"),bgPos:G.prop("backgroundPosition"),bgRepeat:G.prop("backgroundRepeat"),bgAttachment:G.prop("backgroundAttachment"),bgGradient:G.gradients("backgroundImage"),bgClip:{transform:Ze.bgClip}};Object.assign(cv,{bgImage:cv.backgroundImage,bgImg:cv.backgroundImage});var ct={border:G.borders("border"),borderWidth:G.borderWidths("borderWidth"),borderStyle:G.borderStyles("borderStyle"),borderColor:G.colors("borderColor"),borderRadius:G.radii("borderRadius"),borderTop:G.borders("borderTop"),borderBlockStart:G.borders("borderBlockStart"),borderTopLeftRadius:G.radii("borderTopLeftRadius"),borderStartStartRadius:G.logical({scale:"radii",property:{ltr:"borderTopLeftRadius",rtl:"borderTopRightRadius"}}),borderEndStartRadius:G.logical({scale:"radii",property:{ltr:"borderBottomLeftRadius",rtl:"borderBottomRightRadius"}}),borderTopRightRadius:G.radii("borderTopRightRadius"),borderStartEndRadius:G.logical({scale:"radii",property:{ltr:"borderTopRightRadius",rtl:"borderTopLeftRadius"}}),borderEndEndRadius:G.logical({scale:"radii",property:{ltr:"borderBottomRightRadius",rtl:"borderBottomLeftRadius"}}),borderRight:G.borders("borderRight"),borderInlineEnd:G.borders("borderInlineEnd"),borderBottom:G.borders("borderBottom"),borderBlockEnd:G.borders("borderBlockEnd"),borderBottomLeftRadius:G.radii("borderBottomLeftRadius"),borderBottomRightRadius:G.radii("borderBottomRightRadius"),borderLeft:G.borders("borderLeft"),borderInlineStart:{property:"borderInlineStart",scale:"borders"},borderInlineStartRadius:G.logical({scale:"radii",property:{ltr:["borderTopLeftRadius","borderBottomLeftRadius"],rtl:["borderTopRightRadius","borderBottomRightRadius"]}}),borderInlineEndRadius:G.logical({scale:"radii",property:{ltr:["borderTopRightRadius","borderBottomRightRadius"],rtl:["borderTopLeftRadius","borderBottomLeftRadius"]}}),borderX:G.borders(["borderLeft","borderRight"]),borderInline:G.borders("borderInline"),borderY:G.borders(["borderTop","borderBottom"]),borderBlock:G.borders("borderBlock"),borderTopWidth:G.borderWidths("borderTopWidth"),borderBlockStartWidth:G.borderWidths("borderBlockStartWidth"),borderTopColor:G.colors("borderTopColor"),borderBlockStartColor:G.colors("borderBlockStartColor"),borderTopStyle:G.borderStyles("borderTopStyle"),borderBlockStartStyle:G.borderStyles("borderBlockStartStyle"),borderBottomWidth:G.borderWidths("borderBottomWidth"),borderBlockEndWidth:G.borderWidths("borderBlockEndWidth"),borderBottomColor:G.colors("borderBottomColor"),borderBlockEndColor:G.colors("borderBlockEndColor"),borderBottomStyle:G.borderStyles("borderBottomStyle"),borderBlockEndStyle:G.borderStyles("borderBlockEndStyle"),borderLeftWidth:G.borderWidths("borderLeftWidth"),borderInlineStartWidth:G.borderWidths("borderInlineStartWidth"),borderLeftColor:G.colors("borderLeftColor"),borderInlineStartColor:G.colors("borderInlineStartColor"),borderLeftStyle:G.borderStyles("borderLeftStyle"),borderInlineStartStyle:G.borderStyles("borderInlineStartStyle"),borderRightWidth:G.borderWidths("borderRightWidth"),borderInlineEndWidth:G.borderWidths("borderInlineEndWidth"),borderRightColor:G.colors("borderRightColor"),borderInlineEndColor:G.colors("borderInlineEndColor"),borderRightStyle:G.borderStyles("borderRightStyle"),borderInlineEndStyle:G.borderStyles("borderInlineEndStyle"),borderTopRadius:G.radii(["borderTopLeftRadius","borderTopRightRadius"]),borderBottomRadius:G.radii(["borderBottomLeftRadius","borderBottomRightRadius"]),borderLeftRadius:G.radii(["borderTopLeftRadius","borderBottomLeftRadius"]),borderRightRadius:G.radii(["borderTopRightRadius","borderBottomRightRadius"])};Object.assign(ct,{rounded:ct.borderRadius,roundedTop:ct.borderTopRadius,roundedTopLeft:ct.borderTopLeftRadius,roundedTopRight:ct.borderTopRightRadius,roundedTopStart:ct.borderStartStartRadius,roundedTopEnd:ct.borderStartEndRadius,roundedBottom:ct.borderBottomRadius,roundedBottomLeft:ct.borderBottomLeftRadius,roundedBottomRight:ct.borderBottomRightRadius,roundedBottomStart:ct.borderEndStartRadius,roundedBottomEnd:ct.borderEndEndRadius,roundedLeft:ct.borderLeftRadius,roundedRight:ct.borderRightRadius,roundedStart:ct.borderInlineStartRadius,roundedEnd:ct.borderInlineEndRadius,borderStart:ct.borderInlineStart,borderEnd:ct.borderInlineEnd,borderTopStartRadius:ct.borderStartStartRadius,borderTopEndRadius:ct.borderStartEndRadius,borderBottomStartRadius:ct.borderEndStartRadius,borderBottomEndRadius:ct.borderEndEndRadius,borderStartRadius:ct.borderInlineStartRadius,borderEndRadius:ct.borderInlineEndRadius,borderStartWidth:ct.borderInlineStartWidth,borderEndWidth:ct.borderInlineEndWidth,borderStartColor:ct.borderInlineStartColor,borderEndColor:ct.borderInlineEndColor,borderStartStyle:ct.borderInlineStartStyle,borderEndStyle:ct.borderInlineEndStyle});var g2e={color:G.colors("color"),textColor:G.colors("color"),fill:G.colors("fill"),stroke:G.colors("stroke")},E3={boxShadow:G.shadows("boxShadow"),mixBlendMode:!0,blendMode:G.prop("mixBlendMode"),backgroundBlendMode:!0,bgBlendMode:G.prop("backgroundBlendMode"),opacity:!0};Object.assign(E3,{shadow:E3.boxShadow});var m2e={filter:{transform:Ze.filter},blur:G.blur("--chakra-blur"),brightness:G.propT("--chakra-brightness",Ze.brightness),contrast:G.propT("--chakra-contrast",Ze.contrast),hueRotate:G.propT("--chakra-hue-rotate",Ze.hueRotate),invert:G.propT("--chakra-invert",Ze.invert),saturate:G.propT("--chakra-saturate",Ze.saturate),dropShadow:G.propT("--chakra-drop-shadow",Ze.dropShadow),backdropFilter:{transform:Ze.backdropFilter},backdropBlur:G.blur("--chakra-backdrop-blur"),backdropBrightness:G.propT("--chakra-backdrop-brightness",Ze.brightness),backdropContrast:G.propT("--chakra-backdrop-contrast",Ze.contrast),backdropHueRotate:G.propT("--chakra-backdrop-hue-rotate",Ze.hueRotate),backdropInvert:G.propT("--chakra-backdrop-invert",Ze.invert),backdropSaturate:G.propT("--chakra-backdrop-saturate",Ze.saturate)},U1={alignItems:!0,alignContent:!0,justifyItems:!0,justifyContent:!0,flexWrap:!0,flexDirection:{transform:Ze.flexDirection},flex:!0,flexFlow:!0,flexGrow:!0,flexShrink:!0,flexBasis:G.sizes("flexBasis"),justifySelf:!0,alignSelf:!0,order:!0,placeItems:!0,placeContent:!0,placeSelf:!0,gap:G.space("gap"),rowGap:G.space("rowGap"),columnGap:G.space("columnGap")};Object.assign(U1,{flexDir:U1.flexDirection});var xV={gridGap:G.space("gridGap"),gridColumnGap:G.space("gridColumnGap"),gridRowGap:G.space("gridRowGap"),gridColumn:!0,gridRow:!0,gridAutoFlow:!0,gridAutoColumns:!0,gridColumnStart:!0,gridColumnEnd:!0,gridRowStart:!0,gridRowEnd:!0,gridAutoRows:!0,gridTemplate:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridArea:!0},y2e={appearance:!0,cursor:!0,resize:!0,userSelect:!0,pointerEvents:!0,outline:{transform:Ze.outline},outlineOffset:!0,outlineColor:G.colors("outlineColor")},zi={width:G.sizesT("width"),inlineSize:G.sizesT("inlineSize"),height:G.sizes("height"),blockSize:G.sizes("blockSize"),boxSize:G.sizes(["width","height"]),minWidth:G.sizes("minWidth"),minInlineSize:G.sizes("minInlineSize"),minHeight:G.sizes("minHeight"),minBlockSize:G.sizes("minBlockSize"),maxWidth:G.sizes("maxWidth"),maxInlineSize:G.sizes("maxInlineSize"),maxHeight:G.sizes("maxHeight"),maxBlockSize:G.sizes("maxBlockSize"),overflow:!0,overflowX:!0,overflowY:!0,overscrollBehavior:!0,overscrollBehaviorX:!0,overscrollBehaviorY:!0,display:!0,aspectRatio:!0,hideFrom:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (min-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r.minW)!=null?i:e})`]:{display:"none"}}}},hideBelow:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (max-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r._minW)!=null?i:e})`]:{display:"none"}}}},verticalAlign:!0,boxSizing:!0,boxDecorationBreak:!0,float:G.propT("float",Ze.float),objectFit:!0,objectPosition:!0,visibility:!0,isolation:!0};Object.assign(zi,{w:zi.width,h:zi.height,minW:zi.minWidth,maxW:zi.maxWidth,minH:zi.minHeight,maxH:zi.maxHeight,overscroll:zi.overscrollBehavior,overscrollX:zi.overscrollBehaviorX,overscrollY:zi.overscrollBehaviorY});var v2e={listStyleType:!0,listStylePosition:!0,listStylePos:G.prop("listStylePosition"),listStyleImage:!0,listStyleImg:G.prop("listStyleImage")};function b2e(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},S2e=_2e(b2e),x2e={border:"0px",clip:"rect(0, 0, 0, 0)",width:"1px",height:"1px",margin:"-1px",padding:"0px",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},w2e={position:"static",width:"auto",height:"auto",clip:"auto",padding:"0",margin:"0",overflow:"visible",whiteSpace:"normal"},xw=(e,t,n)=>{const r={},i=S2e(e,t,{});for(const o in i)o in n&&n[o]!=null||(r[o]=i[o]);return r},C2e={srOnly:{transform(e){return e===!0?x2e:e==="focusable"?w2e:{}}},layerStyle:{processResult:!0,transform:(e,t,n)=>xw(t,`layerStyles.${e}`,n)},textStyle:{processResult:!0,transform:(e,t,n)=>xw(t,`textStyles.${e}`,n)},apply:{processResult:!0,transform:(e,t,n)=>xw(t,e,n)}},bp={position:!0,pos:G.prop("position"),zIndex:G.prop("zIndex","zIndices"),inset:G.spaceT("inset"),insetX:G.spaceT(["left","right"]),insetInline:G.spaceT("insetInline"),insetY:G.spaceT(["top","bottom"]),insetBlock:G.spaceT("insetBlock"),top:G.spaceT("top"),insetBlockStart:G.spaceT("insetBlockStart"),bottom:G.spaceT("bottom"),insetBlockEnd:G.spaceT("insetBlockEnd"),left:G.spaceT("left"),insetInlineStart:G.logical({scale:"space",property:{ltr:"left",rtl:"right"}}),right:G.spaceT("right"),insetInlineEnd:G.logical({scale:"space",property:{ltr:"right",rtl:"left"}})};Object.assign(bp,{insetStart:bp.insetInlineStart,insetEnd:bp.insetInlineEnd});var E2e={ring:{transform:Ze.ring},ringColor:G.colors("--chakra-ring-color"),ringOffset:G.prop("--chakra-ring-offset-width"),ringOffsetColor:G.colors("--chakra-ring-offset-color"),ringInset:G.prop("--chakra-ring-inset")},Rt={margin:G.spaceT("margin"),marginTop:G.spaceT("marginTop"),marginBlockStart:G.spaceT("marginBlockStart"),marginRight:G.spaceT("marginRight"),marginInlineEnd:G.spaceT("marginInlineEnd"),marginBottom:G.spaceT("marginBottom"),marginBlockEnd:G.spaceT("marginBlockEnd"),marginLeft:G.spaceT("marginLeft"),marginInlineStart:G.spaceT("marginInlineStart"),marginX:G.spaceT(["marginInlineStart","marginInlineEnd"]),marginInline:G.spaceT("marginInline"),marginY:G.spaceT(["marginTop","marginBottom"]),marginBlock:G.spaceT("marginBlock"),padding:G.space("padding"),paddingTop:G.space("paddingTop"),paddingBlockStart:G.space("paddingBlockStart"),paddingRight:G.space("paddingRight"),paddingBottom:G.space("paddingBottom"),paddingBlockEnd:G.space("paddingBlockEnd"),paddingLeft:G.space("paddingLeft"),paddingInlineStart:G.space("paddingInlineStart"),paddingInlineEnd:G.space("paddingInlineEnd"),paddingX:G.space(["paddingInlineStart","paddingInlineEnd"]),paddingInline:G.space("paddingInline"),paddingY:G.space(["paddingTop","paddingBottom"]),paddingBlock:G.space("paddingBlock")};Object.assign(Rt,{m:Rt.margin,mt:Rt.marginTop,mr:Rt.marginRight,me:Rt.marginInlineEnd,marginEnd:Rt.marginInlineEnd,mb:Rt.marginBottom,ml:Rt.marginLeft,ms:Rt.marginInlineStart,marginStart:Rt.marginInlineStart,mx:Rt.marginX,my:Rt.marginY,p:Rt.padding,pt:Rt.paddingTop,py:Rt.paddingY,px:Rt.paddingX,pb:Rt.paddingBottom,pl:Rt.paddingLeft,ps:Rt.paddingInlineStart,paddingStart:Rt.paddingInlineStart,pr:Rt.paddingRight,pe:Rt.paddingInlineEnd,paddingEnd:Rt.paddingInlineEnd});var T2e={textDecorationColor:G.colors("textDecorationColor"),textDecoration:!0,textDecor:{property:"textDecoration"},textDecorationLine:!0,textDecorationStyle:!0,textDecorationThickness:!0,textUnderlineOffset:!0,textShadow:G.shadows("textShadow")},A2e={clipPath:!0,transform:G.propT("transform",Ze.transform),transformOrigin:!0,translateX:G.spaceT("--chakra-translate-x"),translateY:G.spaceT("--chakra-translate-y"),skewX:G.degreeT("--chakra-skew-x"),skewY:G.degreeT("--chakra-skew-y"),scaleX:G.prop("--chakra-scale-x"),scaleY:G.prop("--chakra-scale-y"),scale:G.prop(["--chakra-scale-x","--chakra-scale-y"]),rotate:G.degreeT("--chakra-rotate")},k2e={transition:!0,transitionDelay:!0,animation:!0,willChange:!0,transitionDuration:G.prop("transitionDuration","transition.duration"),transitionProperty:G.prop("transitionProperty","transition.property"),transitionTimingFunction:G.prop("transitionTimingFunction","transition.easing")},P2e={fontFamily:G.prop("fontFamily","fonts"),fontSize:G.prop("fontSize","fontSizes",Ze.px),fontWeight:G.prop("fontWeight","fontWeights"),lineHeight:G.prop("lineHeight","lineHeights"),letterSpacing:G.prop("letterSpacing","letterSpacings"),textAlign:!0,fontStyle:!0,textIndent:!0,wordBreak:!0,overflowWrap:!0,textOverflow:!0,textTransform:!0,whiteSpace:!0,isTruncated:{transform(e){if(e===!0)return{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}},noOfLines:{static:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:"var(--chakra-line-clamp)"},property:"--chakra-line-clamp"}},I2e={scrollBehavior:!0,scrollSnapAlign:!0,scrollSnapStop:!0,scrollSnapType:!0,scrollMargin:G.spaceT("scrollMargin"),scrollMarginTop:G.spaceT("scrollMarginTop"),scrollMarginBottom:G.spaceT("scrollMarginBottom"),scrollMarginLeft:G.spaceT("scrollMarginLeft"),scrollMarginRight:G.spaceT("scrollMarginRight"),scrollMarginX:G.spaceT(["scrollMarginLeft","scrollMarginRight"]),scrollMarginY:G.spaceT(["scrollMarginTop","scrollMarginBottom"]),scrollPadding:G.spaceT("scrollPadding"),scrollPaddingTop:G.spaceT("scrollPaddingTop"),scrollPaddingBottom:G.spaceT("scrollPaddingBottom"),scrollPaddingLeft:G.spaceT("scrollPaddingLeft"),scrollPaddingRight:G.spaceT("scrollPaddingRight"),scrollPaddingX:G.spaceT(["scrollPaddingLeft","scrollPaddingRight"]),scrollPaddingY:G.spaceT(["scrollPaddingTop","scrollPaddingBottom"])};function wV(e){return ys(e)&&e.reference?e.reference:String(e)}var TS=(e,...t)=>t.map(wV).join(` ${e} `).replace(/calc/g,""),dM=(...e)=>`calc(${TS("+",...e)})`,fM=(...e)=>`calc(${TS("-",...e)})`,T3=(...e)=>`calc(${TS("*",...e)})`,hM=(...e)=>`calc(${TS("/",...e)})`,pM=e=>{const t=wV(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:T3(t,-1)},mc=Object.assign(e=>({add:(...t)=>mc(dM(e,...t)),subtract:(...t)=>mc(fM(e,...t)),multiply:(...t)=>mc(T3(e,...t)),divide:(...t)=>mc(hM(e,...t)),negate:()=>mc(pM(e)),toString:()=>e.toString()}),{add:dM,subtract:fM,multiply:T3,divide:hM,negate:pM});function M2e(e,t="-"){return e.replace(/\s+/g,t)}function R2e(e){const t=M2e(e.toString());return $2e(O2e(t))}function O2e(e){return e.includes("\\.")?e:!Number.isInteger(parseFloat(e.toString()))?e.replace(".","\\."):e}function $2e(e){return e.replace(/[!-,/:-@[-^`{-~]/g,"\\$&")}function N2e(e,t=""){return[t,e].filter(Boolean).join("-")}function F2e(e,t){return`var(${e}${t?`, ${t}`:""})`}function D2e(e,t=""){return R2e(`--${N2e(e,t)}`)}function Ae(e,t,n){const r=D2e(e,n);return{variable:r,reference:F2e(r,t)}}function L2e(e,t){const n={};for(const r of t){if(Array.isArray(r)){const[i,o]=r;n[i]=Ae(`${e}-${i}`,o);continue}n[r]=Ae(`${e}-${r}`)}return n}function B2e(e){const t=e==null?0:e.length;return t?e[t-1]:void 0}function z2e(e){const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}}function A3(e){if(e==null)return e;const{unitless:t}=z2e(e);return t||typeof e=="number"?`${e}px`:e}var CV=(e,t)=>parseInt(e[1],10)>parseInt(t[1],10)?1:-1,tA=e=>Object.fromEntries(Object.entries(e).sort(CV));function gM(e){const t=tA(e);return Object.assign(Object.values(t),t)}function j2e(e){const t=Object.keys(tA(e));return new Set(t)}function mM(e){var t;if(!e)return e;e=(t=A3(e))!=null?t:e;const n=-.02;return typeof e=="number"?`${e+n}`:e.replace(/(\d+\.?\d*)/u,r=>`${parseFloat(r)+n}`)}function Kh(e,t){const n=["@media screen"];return e&&n.push("and",`(min-width: ${A3(e)})`),t&&n.push("and",`(max-width: ${A3(t)})`),n.join(" ")}function V2e(e){var t;if(!e)return null;e.base=(t=e.base)!=null?t:"0px";const n=gM(e),r=Object.entries(e).sort(CV).map(([s,a],l,c)=>{var u;let[,d]=(u=c[l+1])!=null?u:[];return d=parseFloat(d)>0?mM(d):void 0,{_minW:mM(a),breakpoint:s,minW:a,maxW:d,maxWQuery:Kh(null,d),minWQuery:Kh(a),minMaxQuery:Kh(a,d)}}),i=j2e(e),o=Array.from(i.values());return{keys:i,normalized:n,isResponsive(s){const a=Object.keys(s);return a.length>0&&a.every(l=>i.has(l))},asObject:tA(e),asArray:gM(e),details:r,get(s){return r.find(a=>a.breakpoint===s)},media:[null,...n.map(s=>Kh(s)).slice(1)],toArrayValue(s){if(!ys(s))throw new Error("toArrayValue: value must be an object");const a=o.map(l=>{var c;return(c=s[l])!=null?c:null});for(;B2e(a)===null;)a.pop();return a},toObjectValue(s){if(!Array.isArray(s))throw new Error("toObjectValue: value must be an array");return s.reduce((a,l,c)=>{const u=o[c];return u!=null&&l!=null&&(a[u]=l),a},{})}}}var Xn={hover:(e,t)=>`${e}:hover ${t}, ${e}[data-hover] ${t}`,focus:(e,t)=>`${e}:focus ${t}, ${e}[data-focus] ${t}`,focusVisible:(e,t)=>`${e}:focus-visible ${t}`,focusWithin:(e,t)=>`${e}:focus-within ${t}`,active:(e,t)=>`${e}:active ${t}, ${e}[data-active] ${t}`,disabled:(e,t)=>`${e}:disabled ${t}, ${e}[data-disabled] ${t}`,invalid:(e,t)=>`${e}:invalid ${t}, ${e}[data-invalid] ${t}`,checked:(e,t)=>`${e}:checked ${t}, ${e}[data-checked] ${t}`,indeterminate:(e,t)=>`${e}:indeterminate ${t}, ${e}[aria-checked=mixed] ${t}, ${e}[data-indeterminate] ${t}`,readOnly:(e,t)=>`${e}:read-only ${t}, ${e}[readonly] ${t}, ${e}[data-read-only] ${t}`,expanded:(e,t)=>`${e}:read-only ${t}, ${e}[aria-expanded=true] ${t}, ${e}[data-expanded] ${t}`,placeholderShown:(e,t)=>`${e}:placeholder-shown ${t}`},Ia=e=>EV(t=>e(t,"&"),"[role=group]","[data-group]",".group"),Ns=e=>EV(t=>e(t,"~ &"),"[data-peer]",".peer"),EV=(e,...t)=>t.map(e).join(", "),AS={_hover:"&:hover, &[data-hover]",_active:"&:active, &[data-active]",_focus:"&:focus, &[data-focus]",_highlighted:"&[data-highlighted]",_focusWithin:"&:focus-within",_focusVisible:"&:focus-visible, &[data-focus-visible]",_disabled:"&:disabled, &[disabled], &[aria-disabled=true], &[data-disabled]",_readOnly:"&[aria-readonly=true], &[readonly], &[data-readonly]",_before:"&::before",_after:"&::after",_empty:"&:empty",_expanded:"&[aria-expanded=true], &[data-expanded]",_checked:"&[aria-checked=true], &[data-checked]",_grabbed:"&[aria-grabbed=true], &[data-grabbed]",_pressed:"&[aria-pressed=true], &[data-pressed]",_invalid:"&[aria-invalid=true], &[data-invalid]",_valid:"&[data-valid], &[data-state=valid]",_loading:"&[data-loading], &[aria-busy=true]",_selected:"&[aria-selected=true], &[data-selected]",_hidden:"&[hidden], &[data-hidden]",_autofill:"&:-webkit-autofill",_even:"&:nth-of-type(even)",_odd:"&:nth-of-type(odd)",_first:"&:first-of-type",_firstLetter:"&::first-letter",_last:"&:last-of-type",_notFirst:"&:not(:first-of-type)",_notLast:"&:not(:last-of-type)",_visited:"&:visited",_activeLink:"&[aria-current=page]",_activeStep:"&[aria-current=step]",_indeterminate:"&:indeterminate, &[aria-checked=mixed], &[data-indeterminate]",_groupHover:Ia(Xn.hover),_peerHover:Ns(Xn.hover),_groupFocus:Ia(Xn.focus),_peerFocus:Ns(Xn.focus),_groupFocusVisible:Ia(Xn.focusVisible),_peerFocusVisible:Ns(Xn.focusVisible),_groupActive:Ia(Xn.active),_peerActive:Ns(Xn.active),_groupDisabled:Ia(Xn.disabled),_peerDisabled:Ns(Xn.disabled),_groupInvalid:Ia(Xn.invalid),_peerInvalid:Ns(Xn.invalid),_groupChecked:Ia(Xn.checked),_peerChecked:Ns(Xn.checked),_groupFocusWithin:Ia(Xn.focusWithin),_peerFocusWithin:Ns(Xn.focusWithin),_peerPlaceholderShown:Ns(Xn.placeholderShown),_placeholder:"&::placeholder",_placeholderShown:"&:placeholder-shown",_fullScreen:"&:fullscreen",_selection:"&::selection",_rtl:"[dir=rtl] &, &[dir=rtl]",_ltr:"[dir=ltr] &, &[dir=ltr]",_mediaDark:"@media (prefers-color-scheme: dark)",_mediaReduceMotion:"@media (prefers-reduced-motion: reduce)",_dark:".chakra-ui-dark &:not([data-theme]),[data-theme=dark] &:not([data-theme]),&[data-theme=dark]",_light:".chakra-ui-light &:not([data-theme]),[data-theme=light] &:not([data-theme]),&[data-theme=light]",_horizontal:"&[data-orientation=horizontal]",_vertical:"&[data-orientation=vertical]"},TV=Object.keys(AS);function yM(e,t){return Ae(String(e).replace(/\./g,"-"),void 0,t)}function U2e(e,t){let n={};const r={};for(const[i,o]of Object.entries(e)){const{isSemantic:s,value:a}=o,{variable:l,reference:c}=yM(i,t==null?void 0:t.cssVarPrefix);if(!s){if(i.startsWith("space")){const f=i.split("."),[h,...p]=f,m=`${h}.-${p.join(".")}`,_=mc.negate(a),v=mc.negate(c);r[m]={value:_,var:l,varRef:v}}n[l]=a,r[i]={value:a,var:l,varRef:c};continue}const u=f=>{const p=[String(i).split(".")[0],f].join(".");if(!e[p])return f;const{reference:_}=yM(p,t==null?void 0:t.cssVarPrefix);return _},d=ys(a)?a:{default:a};n=ds(n,Object.entries(d).reduce((f,[h,p])=>{var m,_;if(!p)return f;const v=u(`${p}`);if(h==="default")return f[l]=v,f;const y=(_=(m=AS)==null?void 0:m[h])!=null?_:h;return f[y]={[l]:v},f},{})),r[i]={value:c,var:l,varRef:c}}return{cssVars:n,cssMap:r}}function G2e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function H2e(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function W2e(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function vM(e,t,n={}){const{stop:r,getKey:i}=n;function o(s,a=[]){var l;if(W2e(s)||Array.isArray(s)){const c={};for(const[u,d]of Object.entries(s)){const f=(l=i==null?void 0:i(u))!=null?l:u,h=[...a,f];if(r!=null&&r(s,h))return t(s,a);c[f]=o(d,h)}return c}return t(s,a)}return o(e)}var q2e=["colors","borders","borderWidths","borderStyles","fonts","fontSizes","fontWeights","gradients","letterSpacings","lineHeights","radii","space","shadows","sizes","zIndices","transition","blur","breakpoints"];function K2e(e){return H2e(e,q2e)}function X2e(e){return e.semanticTokens}function Q2e(e){const{__cssMap:t,__cssVars:n,__breakpoints:r,...i}=e;return i}var Y2e=e=>TV.includes(e)||e==="default";function Z2e({tokens:e,semanticTokens:t}){const n={};return vM(e,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!1,value:r})}),vM(t,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!0,value:r})},{stop:r=>Object.keys(r).every(Y2e)}),n}function J2e(e){var t;const n=Q2e(e),r=K2e(n),i=X2e(n),o=Z2e({tokens:r,semanticTokens:i}),s=(t=n.config)==null?void 0:t.cssVarPrefix,{cssMap:a,cssVars:l}=U2e(o,{cssVarPrefix:s});return Object.assign(n,{__cssVars:{...{"--chakra-ring-inset":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-ring-offset-width":"0px","--chakra-ring-offset-color":"#fff","--chakra-ring-color":"rgba(66, 153, 225, 0.6)","--chakra-ring-offset-shadow":"0 0 #0000","--chakra-ring-shadow":"0 0 #0000","--chakra-space-x-reverse":"0","--chakra-space-y-reverse":"0"},...l},__cssMap:a,__breakpoints:V2e(n.breakpoints)}),n}var nA=ds({},cv,ct,g2e,U1,zi,m2e,E2e,y2e,xV,C2e,bp,E3,Rt,I2e,P2e,T2e,A2e,v2e,k2e),exe=Object.assign({},Rt,zi,U1,xV,bp),wWe=Object.keys(exe),txe=[...Object.keys(nA),...TV],nxe={...nA,...AS},rxe=e=>e in nxe,ixe=e=>t=>{if(!t.__breakpoints)return e;const{isResponsive:n,toArrayValue:r,media:i}=t.__breakpoints,o={};for(const s in e){let a=us(e[s],t);if(a==null)continue;if(a=ys(a)&&n(a)?r(a):a,!Array.isArray(a)){o[s]=a;continue}const l=a.slice(0,i.length).length;for(let c=0;ce.startsWith("--")&&typeof t=="string"&&!sxe(t),lxe=(e,t)=>{var n,r;if(t==null)return t;const i=l=>{var c,u;return(u=(c=e.__cssMap)==null?void 0:c[l])==null?void 0:u.varRef},o=l=>{var c;return(c=i(l))!=null?c:l},[s,a]=oxe(t);return t=(r=(n=i(s))!=null?n:o(a))!=null?r:o(t),t};function cxe(e){const{configs:t={},pseudos:n={},theme:r}=e,i=(o,s=!1)=>{var a,l,c;const u=us(o,r),d=ixe(u)(r);let f={};for(let h in d){const p=d[h];let m=us(p,r);h in n&&(h=n[h]),axe(h,m)&&(m=lxe(r,m));let _=t[h];if(_===!0&&(_={property:h}),ys(m)){f[h]=(a=f[h])!=null?a:{},f[h]=ds({},f[h],i(m,!0));continue}let v=(c=(l=_==null?void 0:_.transform)==null?void 0:l.call(_,m,r,u))!=null?c:m;v=_!=null&&_.processResult?i(v,!0):v;const y=us(_==null?void 0:_.property,r);if(!s&&(_!=null&&_.static)){const g=us(_.static,r);f=ds({},f,g)}if(y&&Array.isArray(y)){for(const g of y)f[g]=v;continue}if(y){y==="&"&&ys(v)?f=ds({},f,v):f[y]=v;continue}if(ys(v)){f=ds({},f,v);continue}f[h]=v}return f};return i}var AV=e=>t=>cxe({theme:t,pseudos:AS,configs:nA})(e);function Be(e){return{definePartsStyle(t){return t},defineMultiStyleConfig(t){return{parts:e,...t}}}}function uxe(e,t){if(Array.isArray(e))return e;if(ys(e))return t(e);if(e!=null)return[e]}function dxe(e,t){for(let n=t+1;n{ds(c,{[g]:f?y[g]:{[v]:y[g]}})});continue}if(!h){f?ds(c,y):c[v]=y;continue}c[v]=y}}return c}}function hxe(e){return t=>{var n;const{variant:r,size:i,theme:o}=t,s=fxe(o);return ds({},us((n=e.baseStyle)!=null?n:{},t),s(e,"sizes",i,t),s(e,"variants",r,t))}}function CWe(e,t,n){var r,i,o;return(o=(i=(r=e.__cssMap)==null?void 0:r[`${t}.${n}`])==null?void 0:i.varRef)!=null?o:n}function Wm(e){return G2e(e,["styleConfig","size","variant","colorScheme"])}var pxe={common:"background-color, border-color, color, fill, stroke, opacity, box-shadow, transform",colors:"background-color, border-color, color, fill, stroke",dimensions:"width, height",position:"left, right, top, bottom",background:"background-color, background-image, background-position"},gxe={"ease-in":"cubic-bezier(0.4, 0, 1, 1)","ease-out":"cubic-bezier(0, 0, 0.2, 1)","ease-in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},mxe={"ultra-fast":"50ms",faster:"100ms",fast:"150ms",normal:"200ms",slow:"300ms",slower:"400ms","ultra-slow":"500ms"},yxe={property:pxe,easing:gxe,duration:mxe},vxe=yxe,bxe={hide:-1,auto:"auto",base:0,docked:10,dropdown:1e3,sticky:1100,banner:1200,overlay:1300,modal:1400,popover:1500,skipLink:1600,toast:1700,tooltip:1800},_xe=bxe,Sxe={none:0,"1px":"1px solid","2px":"2px solid","4px":"4px solid","8px":"8px solid"},xxe=Sxe,wxe={base:"0em",sm:"30em",md:"48em",lg:"62em",xl:"80em","2xl":"96em"},Cxe=wxe,Exe={transparent:"transparent",current:"currentColor",black:"#000000",white:"#FFFFFF",whiteAlpha:{50:"rgba(255, 255, 255, 0.04)",100:"rgba(255, 255, 255, 0.06)",200:"rgba(255, 255, 255, 0.08)",300:"rgba(255, 255, 255, 0.16)",400:"rgba(255, 255, 255, 0.24)",500:"rgba(255, 255, 255, 0.36)",600:"rgba(255, 255, 255, 0.48)",700:"rgba(255, 255, 255, 0.64)",800:"rgba(255, 255, 255, 0.80)",900:"rgba(255, 255, 255, 0.92)"},blackAlpha:{50:"rgba(0, 0, 0, 0.04)",100:"rgba(0, 0, 0, 0.06)",200:"rgba(0, 0, 0, 0.08)",300:"rgba(0, 0, 0, 0.16)",400:"rgba(0, 0, 0, 0.24)",500:"rgba(0, 0, 0, 0.36)",600:"rgba(0, 0, 0, 0.48)",700:"rgba(0, 0, 0, 0.64)",800:"rgba(0, 0, 0, 0.80)",900:"rgba(0, 0, 0, 0.92)"},gray:{50:"#F7FAFC",100:"#EDF2F7",200:"#E2E8F0",300:"#CBD5E0",400:"#A0AEC0",500:"#718096",600:"#4A5568",700:"#2D3748",800:"#1A202C",900:"#171923"},red:{50:"#FFF5F5",100:"#FED7D7",200:"#FEB2B2",300:"#FC8181",400:"#F56565",500:"#E53E3E",600:"#C53030",700:"#9B2C2C",800:"#822727",900:"#63171B"},orange:{50:"#FFFAF0",100:"#FEEBC8",200:"#FBD38D",300:"#F6AD55",400:"#ED8936",500:"#DD6B20",600:"#C05621",700:"#9C4221",800:"#7B341E",900:"#652B19"},yellow:{50:"#FFFFF0",100:"#FEFCBF",200:"#FAF089",300:"#F6E05E",400:"#ECC94B",500:"#D69E2E",600:"#B7791F",700:"#975A16",800:"#744210",900:"#5F370E"},green:{50:"#F0FFF4",100:"#C6F6D5",200:"#9AE6B4",300:"#68D391",400:"#48BB78",500:"#38A169",600:"#2F855A",700:"#276749",800:"#22543D",900:"#1C4532"},teal:{50:"#E6FFFA",100:"#B2F5EA",200:"#81E6D9",300:"#4FD1C5",400:"#38B2AC",500:"#319795",600:"#2C7A7B",700:"#285E61",800:"#234E52",900:"#1D4044"},blue:{50:"#ebf8ff",100:"#bee3f8",200:"#90cdf4",300:"#63b3ed",400:"#4299e1",500:"#3182ce",600:"#2b6cb0",700:"#2c5282",800:"#2a4365",900:"#1A365D"},cyan:{50:"#EDFDFD",100:"#C4F1F9",200:"#9DECF9",300:"#76E4F7",400:"#0BC5EA",500:"#00B5D8",600:"#00A3C4",700:"#0987A0",800:"#086F83",900:"#065666"},purple:{50:"#FAF5FF",100:"#E9D8FD",200:"#D6BCFA",300:"#B794F4",400:"#9F7AEA",500:"#805AD5",600:"#6B46C1",700:"#553C9A",800:"#44337A",900:"#322659"},pink:{50:"#FFF5F7",100:"#FED7E2",200:"#FBB6CE",300:"#F687B3",400:"#ED64A6",500:"#D53F8C",600:"#B83280",700:"#97266D",800:"#702459",900:"#521B41"},linkedin:{50:"#E8F4F9",100:"#CFEDFB",200:"#9BDAF3",300:"#68C7EC",400:"#34B3E4",500:"#00A0DC",600:"#008CC9",700:"#0077B5",800:"#005E93",900:"#004471"},facebook:{50:"#E8F4F9",100:"#D9DEE9",200:"#B7C2DA",300:"#6482C0",400:"#4267B2",500:"#385898",600:"#314E89",700:"#29487D",800:"#223B67",900:"#1E355B"},messenger:{50:"#D0E6FF",100:"#B9DAFF",200:"#A2CDFF",300:"#7AB8FF",400:"#2E90FF",500:"#0078FF",600:"#0063D1",700:"#0052AC",800:"#003C7E",900:"#002C5C"},whatsapp:{50:"#dffeec",100:"#b9f5d0",200:"#90edb3",300:"#65e495",400:"#3cdd78",500:"#22c35e",600:"#179848",700:"#0c6c33",800:"#01421c",900:"#001803"},twitter:{50:"#E5F4FD",100:"#C8E9FB",200:"#A8DCFA",300:"#83CDF7",400:"#57BBF5",500:"#1DA1F2",600:"#1A94DA",700:"#1681BF",800:"#136B9E",900:"#0D4D71"},telegram:{50:"#E3F2F9",100:"#C5E4F3",200:"#A2D4EC",300:"#7AC1E4",400:"#47A9DA",500:"#0088CC",600:"#007AB8",700:"#006BA1",800:"#005885",900:"#003F5E"}},Txe=Exe,Axe={none:"0",sm:"0.125rem",base:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},kxe=Axe,Pxe={xs:"0 0 0 1px rgba(0, 0, 0, 0.05)",sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",md:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",xl:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)","2xl":"0 25px 50px -12px rgba(0, 0, 0, 0.25)",outline:"0 0 0 3px rgba(66, 153, 225, 0.6)",inner:"inset 0 2px 4px 0 rgba(0,0,0,0.06)",none:"none","dark-lg":"rgba(0, 0, 0, 0.1) 0px 0px 0px 1px, rgba(0, 0, 0, 0.2) 0px 5px 10px, rgba(0, 0, 0, 0.4) 0px 15px 40px"},Ixe=Pxe,Mxe={none:0,sm:"4px",base:"8px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},Rxe=Mxe,Oxe={letterSpacings:{tighter:"-0.05em",tight:"-0.025em",normal:"0",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeights:{normal:"normal",none:1,shorter:1.25,short:1.375,base:1.5,tall:1.625,taller:"2",3:".75rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem"},fontWeights:{hairline:100,thin:200,light:300,normal:400,medium:500,semibold:600,bold:700,extrabold:800,black:900},fonts:{heading:'-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',body:'-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',mono:'SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace'},fontSizes:{"3xs":"0.45rem","2xs":"0.625rem",xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem","7xl":"4.5rem","8xl":"6rem","9xl":"8rem"}},kV=Oxe,PV={px:"1px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem",12:"3rem",14:"3.5rem",16:"4rem",20:"5rem",24:"6rem",28:"7rem",32:"8rem",36:"9rem",40:"10rem",44:"11rem",48:"12rem",52:"13rem",56:"14rem",60:"15rem",64:"16rem",72:"18rem",80:"20rem",96:"24rem"},$xe={max:"max-content",min:"min-content",full:"100%","3xs":"14rem","2xs":"16rem",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem","8xl":"90rem",prose:"60ch"},Nxe={sm:"640px",md:"768px",lg:"1024px",xl:"1280px"},Fxe={...PV,...$xe,container:Nxe},IV=Fxe,Dxe={breakpoints:Cxe,zIndices:_xe,radii:kxe,blur:Rxe,colors:Txe,...kV,sizes:IV,shadows:Ixe,space:PV,borders:xxe,transition:vxe},{defineMultiStyleConfig:Lxe,definePartsStyle:Xh}=Be(["stepper","step","title","description","indicator","separator","icon","number"]),Hs=Ae("stepper-indicator-size"),ud=Ae("stepper-icon-size"),dd=Ae("stepper-title-font-size"),Qh=Ae("stepper-description-font-size"),Sh=Ae("stepper-accent-color"),Bxe=Xh(({colorScheme:e})=>({stepper:{display:"flex",justifyContent:"space-between",gap:"4","&[data-orientation=vertical]":{flexDirection:"column",alignItems:"flex-start"},"&[data-orientation=horizontal]":{flexDirection:"row",alignItems:"center"},[Sh.variable]:`colors.${e}.500`,_dark:{[Sh.variable]:`colors.${e}.200`}},title:{fontSize:dd.reference,fontWeight:"medium"},description:{fontSize:Qh.reference,color:"chakra-subtle-text"},number:{fontSize:dd.reference},step:{flexShrink:0,position:"relative",display:"flex",gap:"2","&[data-orientation=horizontal]":{alignItems:"center"},flex:"1","&:last-of-type:not([data-stretch])":{flex:"initial"}},icon:{flexShrink:0,width:ud.reference,height:ud.reference},indicator:{flexShrink:0,borderRadius:"full",width:Hs.reference,height:Hs.reference,display:"flex",justifyContent:"center",alignItems:"center","&[data-status=active]":{borderWidth:"2px",borderColor:Sh.reference},"&[data-status=complete]":{bg:Sh.reference,color:"chakra-inverse-text"},"&[data-status=incomplete]":{borderWidth:"2px"}},separator:{bg:"chakra-border-color",flex:"1","&[data-status=complete]":{bg:Sh.reference},"&[data-orientation=horizontal]":{width:"100%",height:"2px",marginStart:"2"},"&[data-orientation=vertical]":{width:"2px",position:"absolute",height:"100%",maxHeight:`calc(100% - ${Hs.reference} - 8px)`,top:`calc(${Hs.reference} + 4px)`,insetStart:`calc(${Hs.reference} / 2 - 1px)`}}})),zxe=Lxe({baseStyle:Bxe,sizes:{xs:Xh({stepper:{[Hs.variable]:"sizes.4",[ud.variable]:"sizes.3",[dd.variable]:"fontSizes.xs",[Qh.variable]:"fontSizes.xs"}}),sm:Xh({stepper:{[Hs.variable]:"sizes.6",[ud.variable]:"sizes.4",[dd.variable]:"fontSizes.sm",[Qh.variable]:"fontSizes.xs"}}),md:Xh({stepper:{[Hs.variable]:"sizes.8",[ud.variable]:"sizes.5",[dd.variable]:"fontSizes.md",[Qh.variable]:"fontSizes.sm"}}),lg:Xh({stepper:{[Hs.variable]:"sizes.10",[ud.variable]:"sizes.6",[dd.variable]:"fontSizes.lg",[Qh.variable]:"fontSizes.md"}})},defaultProps:{size:"md",colorScheme:"blue"}});function ht(e,t={}){let n=!1;function r(){if(!n){n=!0;return}throw new Error("[anatomy] .part(...) should only be called once. Did you mean to use .extend(...) ?")}function i(...u){r();for(const d of u)t[d]=l(d);return ht(e,t)}function o(...u){for(const d of u)d in t||(t[d]=l(d));return ht(e,t)}function s(){return Object.fromEntries(Object.entries(t).map(([d,f])=>[d,f.selector]))}function a(){return Object.fromEntries(Object.entries(t).map(([d,f])=>[d,f.className]))}function l(u){const h=`chakra-${(["container","root"].includes(u??"")?[e]:[e,u]).filter(Boolean).join("__")}`;return{className:h,selector:`.${h}`,toString:()=>u}}return{parts:i,toPart:l,extend:o,selectors:s,classnames:a,get keys(){return Object.keys(t)},__type:{}}}var MV=ht("accordion").parts("root","container","button","panel").extend("icon"),jxe=ht("alert").parts("title","description","container").extend("icon","spinner"),Vxe=ht("avatar").parts("label","badge","container").extend("excessLabel","group"),Uxe=ht("breadcrumb").parts("link","item","container").extend("separator");ht("button").parts();var RV=ht("checkbox").parts("control","icon","container").extend("label");ht("progress").parts("track","filledTrack").extend("label");var Gxe=ht("drawer").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),OV=ht("editable").parts("preview","input","textarea"),Hxe=ht("form").parts("container","requiredIndicator","helperText"),Wxe=ht("formError").parts("text","icon"),$V=ht("input").parts("addon","field","element","group"),qxe=ht("list").parts("container","item","icon"),NV=ht("menu").parts("button","list","item").extend("groupTitle","icon","command","divider"),FV=ht("modal").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),DV=ht("numberinput").parts("root","field","stepperGroup","stepper");ht("pininput").parts("field");var LV=ht("popover").parts("content","header","body","footer").extend("popper","arrow","closeButton"),BV=ht("progress").parts("label","filledTrack","track"),Kxe=ht("radio").parts("container","control","label"),zV=ht("select").parts("field","icon"),jV=ht("slider").parts("container","track","thumb","filledTrack","mark"),Xxe=ht("stat").parts("container","label","helpText","number","icon"),VV=ht("switch").parts("container","track","thumb","label"),Qxe=ht("table").parts("table","thead","tbody","tr","th","td","tfoot","caption"),UV=ht("tabs").parts("root","tab","tablist","tabpanel","tabpanels","indicator"),Yxe=ht("tag").parts("container","label","closeButton"),Zxe=ht("card").parts("container","header","body","footer");ht("stepper").parts("stepper","step","title","description","indicator","separator","icon","number");function Cc(e,t,n){return Math.min(Math.max(e,n),t)}class Jxe extends Error{constructor(t){super(`Failed to parse color: "${t}"`)}}var Yh=Jxe;function rA(e){if(typeof e!="string")throw new Yh(e);if(e.trim().toLowerCase()==="transparent")return[0,0,0,0];let t=e.trim();t=awe.test(e)?nwe(e):e;const n=rwe.exec(t);if(n){const s=Array.from(n).slice(1);return[...s.slice(0,3).map(a=>parseInt(Fg(a,2),16)),parseInt(Fg(s[3]||"f",2),16)/255]}const r=iwe.exec(t);if(r){const s=Array.from(r).slice(1);return[...s.slice(0,3).map(a=>parseInt(a,16)),parseInt(s[3]||"ff",16)/255]}const i=owe.exec(t);if(i){const s=Array.from(i).slice(1);return[...s.slice(0,3).map(a=>parseInt(a,10)),parseFloat(s[3]||"1")]}const o=swe.exec(t);if(o){const[s,a,l,c]=Array.from(o).slice(1).map(parseFloat);if(Cc(0,100,a)!==a)throw new Yh(e);if(Cc(0,100,l)!==l)throw new Yh(e);return[...lwe(s,a,l),Number.isNaN(c)?1:c]}throw new Yh(e)}function ewe(e){let t=5381,n=e.length;for(;n;)t=t*33^e.charCodeAt(--n);return(t>>>0)%2341}const bM=e=>parseInt(e.replace(/_/g,""),36),twe="1q29ehhb 1n09sgk7 1kl1ekf_ _yl4zsno 16z9eiv3 1p29lhp8 _bd9zg04 17u0____ _iw9zhe5 _to73___ _r45e31e _7l6g016 _jh8ouiv _zn3qba8 1jy4zshs 11u87k0u 1ro9yvyo 1aj3xael 1gz9zjz0 _3w8l4xo 1bf1ekf_ _ke3v___ _4rrkb__ 13j776yz _646mbhl _nrjr4__ _le6mbhl 1n37ehkb _m75f91n _qj3bzfz 1939yygw 11i5z6x8 _1k5f8xs 1509441m 15t5lwgf _ae2th1n _tg1ugcv 1lp1ugcv 16e14up_ _h55rw7n _ny9yavn _7a11xb_ 1ih442g9 _pv442g9 1mv16xof 14e6y7tu 1oo9zkds 17d1cisi _4v9y70f _y98m8kc 1019pq0v 12o9zda8 _348j4f4 1et50i2o _8epa8__ _ts6senj 1o350i2o 1mi9eiuo 1259yrp0 1ln80gnw _632xcoy 1cn9zldc _f29edu4 1n490c8q _9f9ziet 1b94vk74 _m49zkct 1kz6s73a 1eu9dtog _q58s1rz 1dy9sjiq __u89jo3 _aj5nkwg _ld89jo3 13h9z6wx _qa9z2ii _l119xgq _bs5arju 1hj4nwk9 1qt4nwk9 1ge6wau6 14j9zlcw 11p1edc_ _ms1zcxe _439shk6 _jt9y70f _754zsow 1la40eju _oq5p___ _x279qkz 1fa5r3rv _yd2d9ip _424tcku _8y1di2_ _zi2uabw _yy7rn9h 12yz980_ __39ljp6 1b59zg0x _n39zfzp 1fy9zest _b33k___ _hp9wq92 1il50hz4 _io472ub _lj9z3eo 19z9ykg0 _8t8iu3a 12b9bl4a 1ak5yw0o _896v4ku _tb8k8lv _s59zi6t _c09ze0p 1lg80oqn 1id9z8wb _238nba5 1kq6wgdi _154zssg _tn3zk49 _da9y6tc 1sg7cv4f _r12jvtt 1gq5fmkz 1cs9rvci _lp9jn1c _xw1tdnb 13f9zje6 16f6973h _vo7ir40 _bt5arjf _rc45e4t _hr4e100 10v4e100 _hc9zke2 _w91egv_ _sj2r1kk 13c87yx8 _vqpds__ _ni8ggk8 _tj9yqfb 1ia2j4r4 _7x9b10u 1fc9ld4j 1eq9zldr _5j9lhpx _ez9zl6o _md61fzm".split(" ").reduce((e,t)=>{const n=bM(t.substring(0,3)),r=bM(t.substring(3)).toString(16);let i="";for(let o=0;o<6-r.length;o++)i+="0";return e[n]=`${i}${r}`,e},{});function nwe(e){const t=e.toLowerCase().trim(),n=twe[ewe(t)];if(!n)throw new Yh(e);return`#${n}`}const Fg=(e,t)=>Array.from(Array(t)).map(()=>e).join(""),rwe=new RegExp(`^#${Fg("([a-f0-9])",3)}([a-f0-9])?$`,"i"),iwe=new RegExp(`^#${Fg("([a-f0-9]{2})",3)}([a-f0-9]{2})?$`,"i"),owe=new RegExp(`^rgba?\\(\\s*(\\d+)\\s*${Fg(",\\s*(\\d+)\\s*",2)}(?:,\\s*([\\d.]+))?\\s*\\)$`,"i"),swe=/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i,awe=/^[a-z]+$/i,_M=e=>Math.round(e*255),lwe=(e,t,n)=>{let r=n/100;if(t===0)return[r,r,r].map(_M);const i=(e%360+360)%360/60,o=(1-Math.abs(2*r-1))*(t/100),s=o*(1-Math.abs(i%2-1));let a=0,l=0,c=0;i>=0&&i<1?(a=o,l=s):i>=1&&i<2?(a=s,l=o):i>=2&&i<3?(l=o,c=s):i>=3&&i<4?(l=s,c=o):i>=4&&i<5?(a=s,c=o):i>=5&&i<6&&(a=o,c=s);const u=r-o/2,d=a+u,f=l+u,h=c+u;return[d,f,h].map(_M)};function cwe(e,t,n,r){return`rgba(${Cc(0,255,e).toFixed()}, ${Cc(0,255,t).toFixed()}, ${Cc(0,255,n).toFixed()}, ${parseFloat(Cc(0,1,r).toFixed(3))})`}function uwe(e,t){const[n,r,i,o]=rA(e);return cwe(n,r,i,o-t)}function dwe(e){const[t,n,r,i]=rA(e);let o=s=>{const a=Cc(0,255,s).toString(16);return a.length===1?`0${a}`:a};return`#${o(t)}${o(n)}${o(r)}${i<1?o(Math.round(i*255)):""}`}function fwe(e,t,n,r,i){for(t=t.split?t.split("."):t,r=0;rObject.keys(e).length===0,$r=(e,t,n)=>{const r=fwe(e,`colors.${t}`,t);try{return dwe(r),r}catch{return n??"#000000"}},pwe=e=>{const[t,n,r]=rA(e);return(t*299+n*587+r*114)/1e3},gwe=e=>t=>{const n=$r(t,e);return pwe(n)<128?"dark":"light"},mwe=e=>t=>gwe(e)(t)==="dark",vf=(e,t)=>n=>{const r=$r(n,e);return uwe(r,1-t)};function SM(e="1rem",t="rgba(255, 255, 255, 0.15)"){return{backgroundImage:`linear-gradient( + 45deg, + ${t} 25%, + transparent 25%, + transparent 50%, + ${t} 50%, + ${t} 75%, + transparent 75%, + transparent + )`,backgroundSize:`${e} ${e}`}}var ywe=()=>`#${Math.floor(Math.random()*16777215).toString(16).padEnd(6,"0")}`;function vwe(e){const t=ywe();return!e||hwe(e)?t:e.string&&e.colors?_we(e.string,e.colors):e.string&&!e.colors?bwe(e.string):e.colors&&!e.string?Swe(e.colors):t}function bwe(e){let t=0;if(e.length===0)return t.toString();for(let r=0;r>r*8&255;n+=`00${i.toString(16)}`.substr(-2)}return n}function _we(e,t){let n=0;if(e.length===0)return t[0];for(let r=0;rn.colorMode==="dark"?t:e}function iA(e){const{orientation:t,vertical:n,horizontal:r}=e;return t?t==="vertical"?n:r:{}}function GV(e){return ys(e)&&e.reference?e.reference:String(e)}var kS=(e,...t)=>t.map(GV).join(` ${e} `).replace(/calc/g,""),xM=(...e)=>`calc(${kS("+",...e)})`,wM=(...e)=>`calc(${kS("-",...e)})`,k3=(...e)=>`calc(${kS("*",...e)})`,CM=(...e)=>`calc(${kS("/",...e)})`,EM=e=>{const t=GV(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:k3(t,-1)},Ws=Object.assign(e=>({add:(...t)=>Ws(xM(e,...t)),subtract:(...t)=>Ws(wM(e,...t)),multiply:(...t)=>Ws(k3(e,...t)),divide:(...t)=>Ws(CM(e,...t)),negate:()=>Ws(EM(e)),toString:()=>e.toString()}),{add:xM,subtract:wM,multiply:k3,divide:CM,negate:EM});function xwe(e){return!Number.isInteger(parseFloat(e.toString()))}function wwe(e,t="-"){return e.replace(/\s+/g,t)}function HV(e){const t=wwe(e.toString());return t.includes("\\.")?e:xwe(e)?t.replace(".","\\."):e}function Cwe(e,t=""){return[t,HV(e)].filter(Boolean).join("-")}function Ewe(e,t){return`var(${HV(e)}${t?`, ${t}`:""})`}function Twe(e,t=""){return`--${Cwe(e,t)}`}function Xt(e,t){const n=Twe(e,t==null?void 0:t.prefix);return{variable:n,reference:Ewe(n,Awe(t==null?void 0:t.fallback))}}function Awe(e){return typeof e=="string"?e:e==null?void 0:e.reference}var{defineMultiStyleConfig:kwe,definePartsStyle:uv}=Be(VV.keys),_p=Xt("switch-track-width"),Dc=Xt("switch-track-height"),ww=Xt("switch-track-diff"),Pwe=Ws.subtract(_p,Dc),P3=Xt("switch-thumb-x"),xh=Xt("switch-bg"),Iwe=e=>{const{colorScheme:t}=e;return{borderRadius:"full",p:"0.5",width:[_p.reference],height:[Dc.reference],transitionProperty:"common",transitionDuration:"fast",[xh.variable]:"colors.gray.300",_dark:{[xh.variable]:"colors.whiteAlpha.400"},_focusVisible:{boxShadow:"outline"},_disabled:{opacity:.4,cursor:"not-allowed"},_checked:{[xh.variable]:`colors.${t}.500`,_dark:{[xh.variable]:`colors.${t}.200`}},bg:xh.reference}},Mwe={bg:"white",transitionProperty:"transform",transitionDuration:"normal",borderRadius:"inherit",width:[Dc.reference],height:[Dc.reference],_checked:{transform:`translateX(${P3.reference})`}},Rwe=uv(e=>({container:{[ww.variable]:Pwe,[P3.variable]:ww.reference,_rtl:{[P3.variable]:Ws(ww).negate().toString()}},track:Iwe(e),thumb:Mwe})),Owe={sm:uv({container:{[_p.variable]:"1.375rem",[Dc.variable]:"sizes.3"}}),md:uv({container:{[_p.variable]:"1.875rem",[Dc.variable]:"sizes.4"}}),lg:uv({container:{[_p.variable]:"2.875rem",[Dc.variable]:"sizes.6"}})},$we=kwe({baseStyle:Rwe,sizes:Owe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:Nwe,definePartsStyle:zd}=Be(Qxe.keys),Fwe=zd({table:{fontVariantNumeric:"lining-nums tabular-nums",borderCollapse:"collapse",width:"full"},th:{fontFamily:"heading",fontWeight:"bold",textTransform:"uppercase",letterSpacing:"wider",textAlign:"start"},td:{textAlign:"start"},caption:{mt:4,fontFamily:"heading",textAlign:"center",fontWeight:"medium"}}),G1={"&[data-is-numeric=true]":{textAlign:"end"}},Dwe=zd(e=>{const{colorScheme:t}=e;return{th:{color:W("gray.600","gray.400")(e),borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},td:{borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},caption:{color:W("gray.600","gray.100")(e)},tfoot:{tr:{"&:last-of-type":{th:{borderBottomWidth:0}}}}}}),Lwe=zd(e=>{const{colorScheme:t}=e;return{th:{color:W("gray.600","gray.400")(e),borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},td:{borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},caption:{color:W("gray.600","gray.100")(e)},tbody:{tr:{"&:nth-of-type(odd)":{"th, td":{borderBottomWidth:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e)},td:{background:W(`${t}.100`,`${t}.700`)(e)}}}},tfoot:{tr:{"&:last-of-type":{th:{borderBottomWidth:0}}}}}}),Bwe={simple:Dwe,striped:Lwe,unstyled:{}},zwe={sm:zd({th:{px:"4",py:"1",lineHeight:"4",fontSize:"xs"},td:{px:"4",py:"2",fontSize:"sm",lineHeight:"4"},caption:{px:"4",py:"2",fontSize:"xs"}}),md:zd({th:{px:"6",py:"3",lineHeight:"4",fontSize:"xs"},td:{px:"6",py:"4",lineHeight:"5"},caption:{px:"6",py:"2",fontSize:"sm"}}),lg:zd({th:{px:"8",py:"4",lineHeight:"5",fontSize:"sm"},td:{px:"8",py:"5",lineHeight:"6"},caption:{px:"6",py:"2",fontSize:"md"}})},jwe=Nwe({baseStyle:Fwe,variants:Bwe,sizes:zwe,defaultProps:{variant:"simple",size:"md",colorScheme:"gray"}}),Kr=Ae("tabs-color"),Co=Ae("tabs-bg"),sy=Ae("tabs-border-color"),{defineMultiStyleConfig:Vwe,definePartsStyle:vs}=Be(UV.keys),Uwe=e=>{const{orientation:t}=e;return{display:t==="vertical"?"flex":"block"}},Gwe=e=>{const{isFitted:t}=e;return{flex:t?1:void 0,transitionProperty:"common",transitionDuration:"normal",_focusVisible:{zIndex:1,boxShadow:"outline"},_disabled:{cursor:"not-allowed",opacity:.4}}},Hwe=e=>{const{align:t="start",orientation:n}=e;return{justifyContent:{end:"flex-end",center:"center",start:"flex-start"}[t],flexDirection:n==="vertical"?"column":"row"}},Wwe={p:4},qwe=vs(e=>({root:Uwe(e),tab:Gwe(e),tablist:Hwe(e),tabpanel:Wwe})),Kwe={sm:vs({tab:{py:1,px:4,fontSize:"sm"}}),md:vs({tab:{fontSize:"md",py:2,px:4}}),lg:vs({tab:{fontSize:"lg",py:3,px:4}})},Xwe=vs(e=>{const{colorScheme:t,orientation:n}=e,r=n==="vertical",i=r?"borderStart":"borderBottom",o=r?"marginStart":"marginBottom";return{tablist:{[i]:"2px solid",borderColor:"inherit"},tab:{[i]:"2px solid",borderColor:"transparent",[o]:"-2px",_selected:{[Kr.variable]:`colors.${t}.600`,_dark:{[Kr.variable]:`colors.${t}.300`},borderColor:"currentColor"},_active:{[Co.variable]:"colors.gray.200",_dark:{[Co.variable]:"colors.whiteAlpha.300"}},_disabled:{_active:{bg:"none"}},color:Kr.reference,bg:Co.reference}}}),Qwe=vs(e=>{const{colorScheme:t}=e;return{tab:{borderTopRadius:"md",border:"1px solid",borderColor:"transparent",mb:"-1px",[sy.variable]:"transparent",_selected:{[Kr.variable]:`colors.${t}.600`,[sy.variable]:"colors.white",_dark:{[Kr.variable]:`colors.${t}.300`,[sy.variable]:"colors.gray.800"},borderColor:"inherit",borderBottomColor:sy.reference},color:Kr.reference},tablist:{mb:"-1px",borderBottom:"1px solid",borderColor:"inherit"}}}),Ywe=vs(e=>{const{colorScheme:t}=e;return{tab:{border:"1px solid",borderColor:"inherit",[Co.variable]:"colors.gray.50",_dark:{[Co.variable]:"colors.whiteAlpha.50"},mb:"-1px",_notLast:{marginEnd:"-1px"},_selected:{[Co.variable]:"colors.white",[Kr.variable]:`colors.${t}.600`,_dark:{[Co.variable]:"colors.gray.800",[Kr.variable]:`colors.${t}.300`},borderColor:"inherit",borderTopColor:"currentColor",borderBottomColor:"transparent"},color:Kr.reference,bg:Co.reference},tablist:{mb:"-1px",borderBottom:"1px solid",borderColor:"inherit"}}}),Zwe=vs(e=>{const{colorScheme:t,theme:n}=e;return{tab:{borderRadius:"full",fontWeight:"semibold",color:"gray.600",_selected:{color:$r(n,`${t}.700`),bg:$r(n,`${t}.100`)}}}}),Jwe=vs(e=>{const{colorScheme:t}=e;return{tab:{borderRadius:"full",fontWeight:"semibold",[Kr.variable]:"colors.gray.600",_dark:{[Kr.variable]:"inherit"},_selected:{[Kr.variable]:"colors.white",[Co.variable]:`colors.${t}.600`,_dark:{[Kr.variable]:"colors.gray.800",[Co.variable]:`colors.${t}.300`}},color:Kr.reference,bg:Co.reference}}}),eCe=vs({}),tCe={line:Xwe,enclosed:Qwe,"enclosed-colored":Ywe,"soft-rounded":Zwe,"solid-rounded":Jwe,unstyled:eCe},nCe=Vwe({baseStyle:qwe,sizes:Kwe,variants:tCe,defaultProps:{size:"md",variant:"line",colorScheme:"blue"}}),un=L2e("badge",["bg","color","shadow"]),rCe={px:1,textTransform:"uppercase",fontSize:"xs",borderRadius:"sm",fontWeight:"bold",bg:un.bg.reference,color:un.color.reference,boxShadow:un.shadow.reference},iCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.500`,.6)(n);return{[un.bg.variable]:`colors.${t}.500`,[un.color.variable]:"colors.white",_dark:{[un.bg.variable]:r,[un.color.variable]:"colors.whiteAlpha.800"}}},oCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.200`,.16)(n);return{[un.bg.variable]:`colors.${t}.100`,[un.color.variable]:`colors.${t}.800`,_dark:{[un.bg.variable]:r,[un.color.variable]:`colors.${t}.200`}}},sCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.200`,.8)(n);return{[un.color.variable]:`colors.${t}.500`,_dark:{[un.color.variable]:r},[un.shadow.variable]:`inset 0 0 0px 1px ${un.color.reference}`}},aCe={solid:iCe,subtle:oCe,outline:sCe},Sp={baseStyle:rCe,variants:aCe,defaultProps:{variant:"subtle",colorScheme:"gray"}},{defineMultiStyleConfig:lCe,definePartsStyle:Lc}=Be(Yxe.keys),TM=Ae("tag-bg"),AM=Ae("tag-color"),Cw=Ae("tag-shadow"),dv=Ae("tag-min-height"),fv=Ae("tag-min-width"),hv=Ae("tag-font-size"),pv=Ae("tag-padding-inline"),cCe={fontWeight:"medium",lineHeight:1.2,outline:0,[AM.variable]:un.color.reference,[TM.variable]:un.bg.reference,[Cw.variable]:un.shadow.reference,color:AM.reference,bg:TM.reference,boxShadow:Cw.reference,borderRadius:"md",minH:dv.reference,minW:fv.reference,fontSize:hv.reference,px:pv.reference,_focusVisible:{[Cw.variable]:"shadows.outline"}},uCe={lineHeight:1.2,overflow:"visible"},dCe={fontSize:"lg",w:"5",h:"5",transitionProperty:"common",transitionDuration:"normal",borderRadius:"full",marginStart:"1.5",marginEnd:"-1",opacity:.5,_disabled:{opacity:.4},_focusVisible:{boxShadow:"outline",bg:"rgba(0, 0, 0, 0.14)"},_hover:{opacity:.8},_active:{opacity:1}},fCe=Lc({container:cCe,label:uCe,closeButton:dCe}),hCe={sm:Lc({container:{[dv.variable]:"sizes.5",[fv.variable]:"sizes.5",[hv.variable]:"fontSizes.xs",[pv.variable]:"space.2"},closeButton:{marginEnd:"-2px",marginStart:"0.35rem"}}),md:Lc({container:{[dv.variable]:"sizes.6",[fv.variable]:"sizes.6",[hv.variable]:"fontSizes.sm",[pv.variable]:"space.2"}}),lg:Lc({container:{[dv.variable]:"sizes.8",[fv.variable]:"sizes.8",[hv.variable]:"fontSizes.md",[pv.variable]:"space.3"}})},pCe={subtle:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.subtle(e)}}),solid:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.solid(e)}}),outline:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.outline(e)}})},gCe=lCe({variants:pCe,baseStyle:fCe,sizes:hCe,defaultProps:{size:"md",variant:"subtle",colorScheme:"gray"}}),{definePartsStyle:Qs,defineMultiStyleConfig:mCe}=Be($V.keys),fd=Ae("input-height"),hd=Ae("input-font-size"),pd=Ae("input-padding"),gd=Ae("input-border-radius"),yCe=Qs({addon:{height:fd.reference,fontSize:hd.reference,px:pd.reference,borderRadius:gd.reference},field:{width:"100%",height:fd.reference,fontSize:hd.reference,px:pd.reference,borderRadius:gd.reference,minWidth:0,outline:0,position:"relative",appearance:"none",transitionProperty:"common",transitionDuration:"normal",_disabled:{opacity:.4,cursor:"not-allowed"}}}),Ma={lg:{[hd.variable]:"fontSizes.lg",[pd.variable]:"space.4",[gd.variable]:"radii.md",[fd.variable]:"sizes.12"},md:{[hd.variable]:"fontSizes.md",[pd.variable]:"space.4",[gd.variable]:"radii.md",[fd.variable]:"sizes.10"},sm:{[hd.variable]:"fontSizes.sm",[pd.variable]:"space.3",[gd.variable]:"radii.sm",[fd.variable]:"sizes.8"},xs:{[hd.variable]:"fontSizes.xs",[pd.variable]:"space.2",[gd.variable]:"radii.sm",[fd.variable]:"sizes.6"}},vCe={lg:Qs({field:Ma.lg,group:Ma.lg}),md:Qs({field:Ma.md,group:Ma.md}),sm:Qs({field:Ma.sm,group:Ma.sm}),xs:Qs({field:Ma.xs,group:Ma.xs})};function oA(e){const{focusBorderColor:t,errorBorderColor:n}=e;return{focusBorderColor:t||W("blue.500","blue.300")(e),errorBorderColor:n||W("red.500","red.300")(e)}}var bCe=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{border:"1px solid",borderColor:"inherit",bg:"inherit",_hover:{borderColor:W("gray.300","whiteAlpha.400")(e)},_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r),boxShadow:`0 0 0 1px ${$r(t,r)}`},_focusVisible:{zIndex:1,borderColor:$r(t,n),boxShadow:`0 0 0 1px ${$r(t,n)}`}},addon:{border:"1px solid",borderColor:W("inherit","whiteAlpha.50")(e),bg:W("gray.100","whiteAlpha.300")(e)}}}),_Ce=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{border:"2px solid",borderColor:"transparent",bg:W("gray.100","whiteAlpha.50")(e),_hover:{bg:W("gray.200","whiteAlpha.100")(e)},_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r)},_focusVisible:{bg:"transparent",borderColor:$r(t,n)}},addon:{border:"2px solid",borderColor:"transparent",bg:W("gray.100","whiteAlpha.50")(e)}}}),SCe=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{borderBottom:"1px solid",borderColor:"inherit",borderRadius:"0",px:"0",bg:"transparent",_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r),boxShadow:`0px 1px 0px 0px ${$r(t,r)}`},_focusVisible:{borderColor:$r(t,n),boxShadow:`0px 1px 0px 0px ${$r(t,n)}`}},addon:{borderBottom:"2px solid",borderColor:"inherit",borderRadius:"0",px:"0",bg:"transparent"}}}),xCe=Qs({field:{bg:"transparent",px:"0",height:"auto"},addon:{bg:"transparent",px:"0",height:"auto"}}),wCe={outline:bCe,filled:_Ce,flushed:SCe,unstyled:xCe},ft=mCe({baseStyle:yCe,sizes:vCe,variants:wCe,defaultProps:{size:"md",variant:"outline"}}),kM,CCe={...(kM=ft.baseStyle)==null?void 0:kM.field,paddingY:"2",minHeight:"20",lineHeight:"short",verticalAlign:"top"},PM,IM,ECe={outline:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.outline(e).field)!=null?n:{}},flushed:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.flushed(e).field)!=null?n:{}},filled:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.filled(e).field)!=null?n:{}},unstyled:(IM=(PM=ft.variants)==null?void 0:PM.unstyled.field)!=null?IM:{}},MM,RM,OM,$M,NM,FM,DM,LM,TCe={xs:(RM=(MM=ft.sizes)==null?void 0:MM.xs.field)!=null?RM:{},sm:($M=(OM=ft.sizes)==null?void 0:OM.sm.field)!=null?$M:{},md:(FM=(NM=ft.sizes)==null?void 0:NM.md.field)!=null?FM:{},lg:(LM=(DM=ft.sizes)==null?void 0:DM.lg.field)!=null?LM:{}},ACe={baseStyle:CCe,sizes:TCe,variants:ECe,defaultProps:{size:"md",variant:"outline"}},ay=Xt("tooltip-bg"),Ew=Xt("tooltip-fg"),kCe=Xt("popper-arrow-bg"),PCe={bg:ay.reference,color:Ew.reference,[ay.variable]:"colors.gray.700",[Ew.variable]:"colors.whiteAlpha.900",_dark:{[ay.variable]:"colors.gray.300",[Ew.variable]:"colors.gray.900"},[kCe.variable]:ay.reference,px:"2",py:"0.5",borderRadius:"sm",fontWeight:"medium",fontSize:"sm",boxShadow:"md",maxW:"xs",zIndex:"tooltip"},ICe={baseStyle:PCe},{defineMultiStyleConfig:MCe,definePartsStyle:Zh}=Be(BV.keys),RCe=e=>{const{colorScheme:t,theme:n,isIndeterminate:r,hasStripe:i}=e,o=W(SM(),SM("1rem","rgba(0,0,0,0.1)"))(e),s=W(`${t}.500`,`${t}.200`)(e),a=`linear-gradient( + to right, + transparent 0%, + ${$r(n,s)} 50%, + transparent 100% + )`;return{...!r&&i&&o,...r?{bgImage:a}:{bgColor:s}}},OCe={lineHeight:"1",fontSize:"0.25em",fontWeight:"bold",color:"white"},$Ce=e=>({bg:W("gray.100","whiteAlpha.300")(e)}),NCe=e=>({transitionProperty:"common",transitionDuration:"slow",...RCe(e)}),FCe=Zh(e=>({label:OCe,filledTrack:NCe(e),track:$Ce(e)})),DCe={xs:Zh({track:{h:"1"}}),sm:Zh({track:{h:"2"}}),md:Zh({track:{h:"3"}}),lg:Zh({track:{h:"4"}})},LCe=MCe({sizes:DCe,baseStyle:FCe,defaultProps:{size:"md",colorScheme:"blue"}}),BCe=e=>typeof e=="function";function Fr(e,...t){return BCe(e)?e(...t):e}var{definePartsStyle:gv,defineMultiStyleConfig:zCe}=Be(RV.keys),xp=Ae("checkbox-size"),jCe=e=>{const{colorScheme:t}=e;return{w:xp.reference,h:xp.reference,transitionProperty:"box-shadow",transitionDuration:"normal",border:"2px solid",borderRadius:"sm",borderColor:"inherit",color:"white",_checked:{bg:W(`${t}.500`,`${t}.200`)(e),borderColor:W(`${t}.500`,`${t}.200`)(e),color:W("white","gray.900")(e),_hover:{bg:W(`${t}.600`,`${t}.300`)(e),borderColor:W(`${t}.600`,`${t}.300`)(e)},_disabled:{borderColor:W("gray.200","transparent")(e),bg:W("gray.200","whiteAlpha.300")(e),color:W("gray.500","whiteAlpha.500")(e)}},_indeterminate:{bg:W(`${t}.500`,`${t}.200`)(e),borderColor:W(`${t}.500`,`${t}.200`)(e),color:W("white","gray.900")(e)},_disabled:{bg:W("gray.100","whiteAlpha.100")(e),borderColor:W("gray.100","transparent")(e)},_focusVisible:{boxShadow:"outline"},_invalid:{borderColor:W("red.500","red.300")(e)}}},VCe={_disabled:{cursor:"not-allowed"}},UCe={userSelect:"none",_disabled:{opacity:.4}},GCe={transitionProperty:"transform",transitionDuration:"normal"},HCe=gv(e=>({icon:GCe,container:VCe,control:Fr(jCe,e),label:UCe})),WCe={sm:gv({control:{[xp.variable]:"sizes.3"},label:{fontSize:"sm"},icon:{fontSize:"3xs"}}),md:gv({control:{[xp.variable]:"sizes.4"},label:{fontSize:"md"},icon:{fontSize:"2xs"}}),lg:gv({control:{[xp.variable]:"sizes.5"},label:{fontSize:"lg"},icon:{fontSize:"2xs"}})},H1=zCe({baseStyle:HCe,sizes:WCe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:qCe,definePartsStyle:mv}=Be(Kxe.keys),KCe=e=>{var t;const n=(t=Fr(H1.baseStyle,e))==null?void 0:t.control;return{...n,borderRadius:"full",_checked:{...n==null?void 0:n._checked,_before:{content:'""',display:"inline-block",pos:"relative",w:"50%",h:"50%",borderRadius:"50%",bg:"currentColor"}}}},XCe=mv(e=>{var t,n,r,i;return{label:(n=(t=H1).baseStyle)==null?void 0:n.call(t,e).label,container:(i=(r=H1).baseStyle)==null?void 0:i.call(r,e).container,control:KCe(e)}}),QCe={md:mv({control:{w:"4",h:"4"},label:{fontSize:"md"}}),lg:mv({control:{w:"5",h:"5"},label:{fontSize:"lg"}}),sm:mv({control:{width:"3",height:"3"},label:{fontSize:"sm"}})},YCe=qCe({baseStyle:XCe,sizes:QCe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:ZCe,definePartsStyle:JCe}=Be(zV.keys),ly=Ae("select-bg"),BM,e5e={...(BM=ft.baseStyle)==null?void 0:BM.field,appearance:"none",paddingBottom:"1px",lineHeight:"normal",bg:ly.reference,[ly.variable]:"colors.white",_dark:{[ly.variable]:"colors.gray.700"},"> option, > optgroup":{bg:ly.reference}},t5e={width:"6",height:"100%",insetEnd:"2",position:"relative",color:"currentColor",fontSize:"xl",_disabled:{opacity:.5}},n5e=JCe({field:e5e,icon:t5e}),cy={paddingInlineEnd:"8"},zM,jM,VM,UM,GM,HM,WM,qM,r5e={lg:{...(zM=ft.sizes)==null?void 0:zM.lg,field:{...(jM=ft.sizes)==null?void 0:jM.lg.field,...cy}},md:{...(VM=ft.sizes)==null?void 0:VM.md,field:{...(UM=ft.sizes)==null?void 0:UM.md.field,...cy}},sm:{...(GM=ft.sizes)==null?void 0:GM.sm,field:{...(HM=ft.sizes)==null?void 0:HM.sm.field,...cy}},xs:{...(WM=ft.sizes)==null?void 0:WM.xs,field:{...(qM=ft.sizes)==null?void 0:qM.xs.field,...cy},icon:{insetEnd:"1"}}},i5e=ZCe({baseStyle:n5e,sizes:r5e,variants:ft.variants,defaultProps:ft.defaultProps}),Tw=Ae("skeleton-start-color"),Aw=Ae("skeleton-end-color"),o5e={[Tw.variable]:"colors.gray.100",[Aw.variable]:"colors.gray.400",_dark:{[Tw.variable]:"colors.gray.800",[Aw.variable]:"colors.gray.600"},background:Tw.reference,borderColor:Aw.reference,opacity:.7,borderRadius:"sm"},s5e={baseStyle:o5e},kw=Ae("skip-link-bg"),a5e={borderRadius:"md",fontWeight:"semibold",_focusVisible:{boxShadow:"outline",padding:"4",position:"fixed",top:"6",insetStart:"6",[kw.variable]:"colors.white",_dark:{[kw.variable]:"colors.gray.700"},bg:kw.reference}},l5e={baseStyle:a5e},{defineMultiStyleConfig:c5e,definePartsStyle:PS}=Be(jV.keys),Dg=Ae("slider-thumb-size"),Lg=Ae("slider-track-size"),Ka=Ae("slider-bg"),u5e=e=>{const{orientation:t}=e;return{display:"inline-block",position:"relative",cursor:"pointer",_disabled:{opacity:.6,cursor:"default",pointerEvents:"none"},...iA({orientation:t,vertical:{h:"100%"},horizontal:{w:"100%"}})}},d5e=e=>({...iA({orientation:e.orientation,horizontal:{h:Lg.reference},vertical:{w:Lg.reference}}),overflow:"hidden",borderRadius:"sm",[Ka.variable]:"colors.gray.200",_dark:{[Ka.variable]:"colors.whiteAlpha.200"},_disabled:{[Ka.variable]:"colors.gray.300",_dark:{[Ka.variable]:"colors.whiteAlpha.300"}},bg:Ka.reference}),f5e=e=>{const{orientation:t}=e;return{...iA({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",_active:{transform:"translateX(-50%) scale(1.15)"}},horizontal:{top:"50%",transform:"translateY(-50%)",_active:{transform:"translateY(-50%) scale(1.15)"}}}),w:Dg.reference,h:Dg.reference,display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",outline:0,zIndex:1,borderRadius:"full",bg:"white",boxShadow:"base",border:"1px solid",borderColor:"transparent",transitionProperty:"transform",transitionDuration:"normal",_focusVisible:{boxShadow:"outline"},_disabled:{bg:"gray.300"}}},h5e=e=>{const{colorScheme:t}=e;return{width:"inherit",height:"inherit",[Ka.variable]:`colors.${t}.500`,_dark:{[Ka.variable]:`colors.${t}.200`},bg:Ka.reference}},p5e=PS(e=>({container:u5e(e),track:d5e(e),thumb:f5e(e),filledTrack:h5e(e)})),g5e=PS({container:{[Dg.variable]:"sizes.4",[Lg.variable]:"sizes.1"}}),m5e=PS({container:{[Dg.variable]:"sizes.3.5",[Lg.variable]:"sizes.1"}}),y5e=PS({container:{[Dg.variable]:"sizes.2.5",[Lg.variable]:"sizes.0.5"}}),v5e={lg:g5e,md:m5e,sm:y5e},b5e=c5e({baseStyle:p5e,sizes:v5e,defaultProps:{size:"md",colorScheme:"blue"}}),yc=Xt("spinner-size"),_5e={width:[yc.reference],height:[yc.reference]},S5e={xs:{[yc.variable]:"sizes.3"},sm:{[yc.variable]:"sizes.4"},md:{[yc.variable]:"sizes.6"},lg:{[yc.variable]:"sizes.8"},xl:{[yc.variable]:"sizes.12"}},x5e={baseStyle:_5e,sizes:S5e,defaultProps:{size:"md"}},{defineMultiStyleConfig:w5e,definePartsStyle:WV}=Be(Xxe.keys),C5e={fontWeight:"medium"},E5e={opacity:.8,marginBottom:"2"},T5e={verticalAlign:"baseline",fontWeight:"semibold"},A5e={marginEnd:1,w:"3.5",h:"3.5",verticalAlign:"middle"},k5e=WV({container:{},label:C5e,helpText:E5e,number:T5e,icon:A5e}),P5e={md:WV({label:{fontSize:"sm"},helpText:{fontSize:"sm"},number:{fontSize:"2xl"}})},I5e=w5e({baseStyle:k5e,sizes:P5e,defaultProps:{size:"md"}}),Pw=Ae("kbd-bg"),M5e={[Pw.variable]:"colors.gray.100",_dark:{[Pw.variable]:"colors.whiteAlpha.100"},bg:Pw.reference,borderRadius:"md",borderWidth:"1px",borderBottomWidth:"3px",fontSize:"0.8em",fontWeight:"bold",lineHeight:"normal",px:"0.4em",whiteSpace:"nowrap"},R5e={baseStyle:M5e},O5e={transitionProperty:"common",transitionDuration:"fast",transitionTimingFunction:"ease-out",cursor:"pointer",textDecoration:"none",outline:"none",color:"inherit",_hover:{textDecoration:"underline"},_focusVisible:{boxShadow:"outline"}},$5e={baseStyle:O5e},{defineMultiStyleConfig:N5e,definePartsStyle:F5e}=Be(qxe.keys),D5e={marginEnd:"2",display:"inline",verticalAlign:"text-bottom"},L5e=F5e({icon:D5e}),B5e=N5e({baseStyle:L5e}),{defineMultiStyleConfig:z5e,definePartsStyle:j5e}=Be(NV.keys),es=Ae("menu-bg"),Iw=Ae("menu-shadow"),V5e={[es.variable]:"#fff",[Iw.variable]:"shadows.sm",_dark:{[es.variable]:"colors.gray.700",[Iw.variable]:"shadows.dark-lg"},color:"inherit",minW:"3xs",py:"2",zIndex:1,borderRadius:"md",borderWidth:"1px",bg:es.reference,boxShadow:Iw.reference},U5e={py:"1.5",px:"3",transitionProperty:"background",transitionDuration:"ultra-fast",transitionTimingFunction:"ease-in",_focus:{[es.variable]:"colors.gray.100",_dark:{[es.variable]:"colors.whiteAlpha.100"}},_active:{[es.variable]:"colors.gray.200",_dark:{[es.variable]:"colors.whiteAlpha.200"}},_expanded:{[es.variable]:"colors.gray.100",_dark:{[es.variable]:"colors.whiteAlpha.100"}},_disabled:{opacity:.4,cursor:"not-allowed"},bg:es.reference},G5e={mx:4,my:2,fontWeight:"semibold",fontSize:"sm"},H5e={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},W5e={opacity:.6},q5e={border:0,borderBottom:"1px solid",borderColor:"inherit",my:"2",opacity:.6},K5e={transitionProperty:"common",transitionDuration:"normal"},X5e=j5e({button:K5e,list:V5e,item:U5e,groupTitle:G5e,icon:H5e,command:W5e,divider:q5e}),Q5e=z5e({baseStyle:X5e}),{defineMultiStyleConfig:Y5e,definePartsStyle:I3}=Be(FV.keys),Mw=Ae("modal-bg"),Rw=Ae("modal-shadow"),Z5e={bg:"blackAlpha.600",zIndex:"modal"},J5e=e=>{const{isCentered:t,scrollBehavior:n}=e;return{display:"flex",zIndex:"modal",justifyContent:"center",alignItems:t?"center":"flex-start",overflow:n==="inside"?"hidden":"auto",overscrollBehaviorY:"none"}},e3e=e=>{const{isCentered:t,scrollBehavior:n}=e;return{borderRadius:"md",color:"inherit",my:t?"auto":"16",mx:t?"auto":void 0,zIndex:"modal",maxH:n==="inside"?"calc(100% - 7.5rem)":void 0,[Mw.variable]:"colors.white",[Rw.variable]:"shadows.lg",_dark:{[Mw.variable]:"colors.gray.700",[Rw.variable]:"shadows.dark-lg"},bg:Mw.reference,boxShadow:Rw.reference}},t3e={px:"6",py:"4",fontSize:"xl",fontWeight:"semibold"},n3e={position:"absolute",top:"2",insetEnd:"3"},r3e=e=>{const{scrollBehavior:t}=e;return{px:"6",py:"2",flex:"1",overflow:t==="inside"?"auto":void 0}},i3e={px:"6",py:"4"},o3e=I3(e=>({overlay:Z5e,dialogContainer:Fr(J5e,e),dialog:Fr(e3e,e),header:t3e,closeButton:n3e,body:Fr(r3e,e),footer:i3e}));function go(e){return I3(e==="full"?{dialog:{maxW:"100vw",minH:"$100vh",my:"0",borderRadius:"0"}}:{dialog:{maxW:e}})}var s3e={xs:go("xs"),sm:go("sm"),md:go("md"),lg:go("lg"),xl:go("xl"),"2xl":go("2xl"),"3xl":go("3xl"),"4xl":go("4xl"),"5xl":go("5xl"),"6xl":go("6xl"),full:go("full")},a3e=Y5e({baseStyle:o3e,sizes:s3e,defaultProps:{size:"md"}}),{defineMultiStyleConfig:l3e,definePartsStyle:qV}=Be(DV.keys),sA=Xt("number-input-stepper-width"),KV=Xt("number-input-input-padding"),c3e=Ws(sA).add("0.5rem").toString(),Ow=Xt("number-input-bg"),$w=Xt("number-input-color"),Nw=Xt("number-input-border-color"),u3e={[sA.variable]:"sizes.6",[KV.variable]:c3e},d3e=e=>{var t,n;return(n=(t=Fr(ft.baseStyle,e))==null?void 0:t.field)!=null?n:{}},f3e={width:sA.reference},h3e={borderStart:"1px solid",borderStartColor:Nw.reference,color:$w.reference,bg:Ow.reference,[$w.variable]:"colors.chakra-body-text",[Nw.variable]:"colors.chakra-border-color",_dark:{[$w.variable]:"colors.whiteAlpha.800",[Nw.variable]:"colors.whiteAlpha.300"},_active:{[Ow.variable]:"colors.gray.200",_dark:{[Ow.variable]:"colors.whiteAlpha.300"}},_disabled:{opacity:.4,cursor:"not-allowed"}},p3e=qV(e=>{var t;return{root:u3e,field:(t=Fr(d3e,e))!=null?t:{},stepperGroup:f3e,stepper:h3e}});function uy(e){var t,n,r;const i=(t=ft.sizes)==null?void 0:t[e],o={lg:"md",md:"md",sm:"sm",xs:"sm"},s=(r=(n=i.field)==null?void 0:n.fontSize)!=null?r:"md",a=kV.fontSizes[s];return qV({field:{...i.field,paddingInlineEnd:KV.reference,verticalAlign:"top"},stepper:{fontSize:Ws(a).multiply(.75).toString(),_first:{borderTopEndRadius:o[e]},_last:{borderBottomEndRadius:o[e],mt:"-1px",borderTopWidth:1}}})}var g3e={xs:uy("xs"),sm:uy("sm"),md:uy("md"),lg:uy("lg")},m3e=l3e({baseStyle:p3e,sizes:g3e,variants:ft.variants,defaultProps:ft.defaultProps}),KM,y3e={...(KM=ft.baseStyle)==null?void 0:KM.field,textAlign:"center"},v3e={lg:{fontSize:"lg",w:12,h:12,borderRadius:"md"},md:{fontSize:"md",w:10,h:10,borderRadius:"md"},sm:{fontSize:"sm",w:8,h:8,borderRadius:"sm"},xs:{fontSize:"xs",w:6,h:6,borderRadius:"sm"}},XM,QM,b3e={outline:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.outline,e))==null?void 0:n.field)!=null?r:{}},flushed:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.flushed,e))==null?void 0:n.field)!=null?r:{}},filled:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.filled,e))==null?void 0:n.field)!=null?r:{}},unstyled:(QM=(XM=ft.variants)==null?void 0:XM.unstyled.field)!=null?QM:{}},_3e={baseStyle:y3e,sizes:v3e,variants:b3e,defaultProps:ft.defaultProps},{defineMultiStyleConfig:S3e,definePartsStyle:x3e}=Be(LV.keys),dy=Xt("popper-bg"),w3e=Xt("popper-arrow-bg"),YM=Xt("popper-arrow-shadow-color"),C3e={zIndex:10},E3e={[dy.variable]:"colors.white",bg:dy.reference,[w3e.variable]:dy.reference,[YM.variable]:"colors.gray.200",_dark:{[dy.variable]:"colors.gray.700",[YM.variable]:"colors.whiteAlpha.300"},width:"xs",border:"1px solid",borderColor:"inherit",borderRadius:"md",boxShadow:"sm",zIndex:"inherit",_focusVisible:{outline:0,boxShadow:"outline"}},T3e={px:3,py:2,borderBottomWidth:"1px"},A3e={px:3,py:2},k3e={px:3,py:2,borderTopWidth:"1px"},P3e={position:"absolute",borderRadius:"md",top:1,insetEnd:2,padding:2},I3e=x3e({popper:C3e,content:E3e,header:T3e,body:A3e,footer:k3e,closeButton:P3e}),M3e=S3e({baseStyle:I3e}),{definePartsStyle:M3,defineMultiStyleConfig:R3e}=Be(Gxe.keys),Fw=Ae("drawer-bg"),Dw=Ae("drawer-box-shadow");function Lu(e){return M3(e==="full"?{dialog:{maxW:"100vw",h:"100vh"}}:{dialog:{maxW:e}})}var O3e={bg:"blackAlpha.600",zIndex:"modal"},$3e={display:"flex",zIndex:"modal",justifyContent:"center"},N3e=e=>{const{isFullHeight:t}=e;return{...t&&{height:"100vh"},zIndex:"modal",maxH:"100vh",color:"inherit",[Fw.variable]:"colors.white",[Dw.variable]:"shadows.lg",_dark:{[Fw.variable]:"colors.gray.700",[Dw.variable]:"shadows.dark-lg"},bg:Fw.reference,boxShadow:Dw.reference}},F3e={px:"6",py:"4",fontSize:"xl",fontWeight:"semibold"},D3e={position:"absolute",top:"2",insetEnd:"3"},L3e={px:"6",py:"2",flex:"1",overflow:"auto"},B3e={px:"6",py:"4"},z3e=M3(e=>({overlay:O3e,dialogContainer:$3e,dialog:Fr(N3e,e),header:F3e,closeButton:D3e,body:L3e,footer:B3e})),j3e={xs:Lu("xs"),sm:Lu("md"),md:Lu("lg"),lg:Lu("2xl"),xl:Lu("4xl"),full:Lu("full")},V3e=R3e({baseStyle:z3e,sizes:j3e,defaultProps:{size:"xs"}}),{definePartsStyle:U3e,defineMultiStyleConfig:G3e}=Be(OV.keys),H3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal"},W3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},q3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},K3e=U3e({preview:H3e,input:W3e,textarea:q3e}),X3e=G3e({baseStyle:K3e}),{definePartsStyle:Q3e,defineMultiStyleConfig:Y3e}=Be(Hxe.keys),jd=Ae("form-control-color"),Z3e={marginStart:"1",[jd.variable]:"colors.red.500",_dark:{[jd.variable]:"colors.red.300"},color:jd.reference},J3e={mt:"2",[jd.variable]:"colors.gray.600",_dark:{[jd.variable]:"colors.whiteAlpha.600"},color:jd.reference,lineHeight:"normal",fontSize:"sm"},eEe=Q3e({container:{width:"100%",position:"relative"},requiredIndicator:Z3e,helperText:J3e}),tEe=Y3e({baseStyle:eEe}),{definePartsStyle:nEe,defineMultiStyleConfig:rEe}=Be(Wxe.keys),Vd=Ae("form-error-color"),iEe={[Vd.variable]:"colors.red.500",_dark:{[Vd.variable]:"colors.red.300"},color:Vd.reference,mt:"2",fontSize:"sm",lineHeight:"normal"},oEe={marginEnd:"0.5em",[Vd.variable]:"colors.red.500",_dark:{[Vd.variable]:"colors.red.300"},color:Vd.reference},sEe=nEe({text:iEe,icon:oEe}),aEe=rEe({baseStyle:sEe}),lEe={fontSize:"md",marginEnd:"3",mb:"2",fontWeight:"medium",transitionProperty:"common",transitionDuration:"normal",opacity:1,_disabled:{opacity:.4}},cEe={baseStyle:lEe},uEe={fontFamily:"heading",fontWeight:"bold"},dEe={"4xl":{fontSize:["6xl",null,"7xl"],lineHeight:1},"3xl":{fontSize:["5xl",null,"6xl"],lineHeight:1},"2xl":{fontSize:["4xl",null,"5xl"],lineHeight:[1.2,null,1]},xl:{fontSize:["3xl",null,"4xl"],lineHeight:[1.33,null,1.2]},lg:{fontSize:["2xl",null,"3xl"],lineHeight:[1.33,null,1.2]},md:{fontSize:"xl",lineHeight:1.2},sm:{fontSize:"md",lineHeight:1.2},xs:{fontSize:"sm",lineHeight:1.2}},fEe={baseStyle:uEe,sizes:dEe,defaultProps:{size:"xl"}},{defineMultiStyleConfig:hEe,definePartsStyle:pEe}=Be(Uxe.keys),Lw=Ae("breadcrumb-link-decor"),gEe={transitionProperty:"common",transitionDuration:"fast",transitionTimingFunction:"ease-out",outline:"none",color:"inherit",textDecoration:Lw.reference,[Lw.variable]:"none","&:not([aria-current=page])":{cursor:"pointer",_hover:{[Lw.variable]:"underline"},_focusVisible:{boxShadow:"outline"}}},mEe=pEe({link:gEe}),yEe=hEe({baseStyle:mEe}),vEe={lineHeight:"1.2",borderRadius:"md",fontWeight:"semibold",transitionProperty:"common",transitionDuration:"normal",_focusVisible:{boxShadow:"outline"},_disabled:{opacity:.4,cursor:"not-allowed",boxShadow:"none"},_hover:{_disabled:{bg:"initial"}}},XV=e=>{const{colorScheme:t,theme:n}=e;if(t==="gray")return{color:W("gray.800","whiteAlpha.900")(e),_hover:{bg:W("gray.100","whiteAlpha.200")(e)},_active:{bg:W("gray.200","whiteAlpha.300")(e)}};const r=vf(`${t}.200`,.12)(n),i=vf(`${t}.200`,.24)(n);return{color:W(`${t}.600`,`${t}.200`)(e),bg:"transparent",_hover:{bg:W(`${t}.50`,r)(e)},_active:{bg:W(`${t}.100`,i)(e)}}},bEe=e=>{const{colorScheme:t}=e,n=W("gray.200","whiteAlpha.300")(e);return{border:"1px solid",borderColor:t==="gray"?n:"currentColor",".chakra-button__group[data-attached][data-orientation=horizontal] > &:not(:last-of-type)":{marginEnd:"-1px"},".chakra-button__group[data-attached][data-orientation=vertical] > &:not(:last-of-type)":{marginBottom:"-1px"},...Fr(XV,e)}},_Ee={yellow:{bg:"yellow.400",color:"black",hoverBg:"yellow.500",activeBg:"yellow.600"},cyan:{bg:"cyan.400",color:"black",hoverBg:"cyan.500",activeBg:"cyan.600"}},SEe=e=>{var t;const{colorScheme:n}=e;if(n==="gray"){const l=W("gray.100","whiteAlpha.200")(e);return{bg:l,color:W("gray.800","whiteAlpha.900")(e),_hover:{bg:W("gray.200","whiteAlpha.300")(e),_disabled:{bg:l}},_active:{bg:W("gray.300","whiteAlpha.400")(e)}}}const{bg:r=`${n}.500`,color:i="white",hoverBg:o=`${n}.600`,activeBg:s=`${n}.700`}=(t=_Ee[n])!=null?t:{},a=W(r,`${n}.200`)(e);return{bg:a,color:W(i,"gray.800")(e),_hover:{bg:W(o,`${n}.300`)(e),_disabled:{bg:a}},_active:{bg:W(s,`${n}.400`)(e)}}},xEe=e=>{const{colorScheme:t}=e;return{padding:0,height:"auto",lineHeight:"normal",verticalAlign:"baseline",color:W(`${t}.500`,`${t}.200`)(e),_hover:{textDecoration:"underline",_disabled:{textDecoration:"none"}},_active:{color:W(`${t}.700`,`${t}.500`)(e)}}},wEe={bg:"none",color:"inherit",display:"inline",lineHeight:"inherit",m:"0",p:"0"},CEe={ghost:XV,outline:bEe,solid:SEe,link:xEe,unstyled:wEe},EEe={lg:{h:"12",minW:"12",fontSize:"lg",px:"6"},md:{h:"10",minW:"10",fontSize:"md",px:"4"},sm:{h:"8",minW:"8",fontSize:"sm",px:"3"},xs:{h:"6",minW:"6",fontSize:"xs",px:"2"}},TEe={baseStyle:vEe,variants:CEe,sizes:EEe,defaultProps:{variant:"solid",size:"md",colorScheme:"gray"}},{definePartsStyle:Bc,defineMultiStyleConfig:AEe}=Be(Zxe.keys),W1=Ae("card-bg"),ta=Ae("card-padding"),QV=Ae("card-shadow"),yv=Ae("card-radius"),YV=Ae("card-border-width","0"),ZV=Ae("card-border-color"),kEe=Bc({container:{[W1.variable]:"colors.chakra-body-bg",backgroundColor:W1.reference,boxShadow:QV.reference,borderRadius:yv.reference,color:"chakra-body-text",borderWidth:YV.reference,borderColor:ZV.reference},body:{padding:ta.reference,flex:"1 1 0%"},header:{padding:ta.reference},footer:{padding:ta.reference}}),PEe={sm:Bc({container:{[yv.variable]:"radii.base",[ta.variable]:"space.3"}}),md:Bc({container:{[yv.variable]:"radii.md",[ta.variable]:"space.5"}}),lg:Bc({container:{[yv.variable]:"radii.xl",[ta.variable]:"space.7"}})},IEe={elevated:Bc({container:{[QV.variable]:"shadows.base",_dark:{[W1.variable]:"colors.gray.700"}}}),outline:Bc({container:{[YV.variable]:"1px",[ZV.variable]:"colors.chakra-border-color"}}),filled:Bc({container:{[W1.variable]:"colors.chakra-subtle-bg"}}),unstyled:{body:{[ta.variable]:0},header:{[ta.variable]:0},footer:{[ta.variable]:0}}},MEe=AEe({baseStyle:kEe,variants:IEe,sizes:PEe,defaultProps:{variant:"elevated",size:"md"}}),wp=Xt("close-button-size"),wh=Xt("close-button-bg"),REe={w:[wp.reference],h:[wp.reference],borderRadius:"md",transitionProperty:"common",transitionDuration:"normal",_disabled:{opacity:.4,cursor:"not-allowed",boxShadow:"none"},_hover:{[wh.variable]:"colors.blackAlpha.100",_dark:{[wh.variable]:"colors.whiteAlpha.100"}},_active:{[wh.variable]:"colors.blackAlpha.200",_dark:{[wh.variable]:"colors.whiteAlpha.200"}},_focusVisible:{boxShadow:"outline"},bg:wh.reference},OEe={lg:{[wp.variable]:"sizes.10",fontSize:"md"},md:{[wp.variable]:"sizes.8",fontSize:"xs"},sm:{[wp.variable]:"sizes.6",fontSize:"2xs"}},$Ee={baseStyle:REe,sizes:OEe,defaultProps:{size:"md"}},{variants:NEe,defaultProps:FEe}=Sp,DEe={fontFamily:"mono",fontSize:"sm",px:"0.2em",borderRadius:"sm",bg:un.bg.reference,color:un.color.reference,boxShadow:un.shadow.reference},LEe={baseStyle:DEe,variants:NEe,defaultProps:FEe},BEe={w:"100%",mx:"auto",maxW:"prose",px:"4"},zEe={baseStyle:BEe},jEe={opacity:.6,borderColor:"inherit"},VEe={borderStyle:"solid"},UEe={borderStyle:"dashed"},GEe={solid:VEe,dashed:UEe},HEe={baseStyle:jEe,variants:GEe,defaultProps:{variant:"solid"}},{definePartsStyle:WEe,defineMultiStyleConfig:qEe}=Be(MV.keys),KEe={borderTopWidth:"1px",borderColor:"inherit",_last:{borderBottomWidth:"1px"}},XEe={transitionProperty:"common",transitionDuration:"normal",fontSize:"md",_focusVisible:{boxShadow:"outline"},_hover:{bg:"blackAlpha.50"},_disabled:{opacity:.4,cursor:"not-allowed"},px:"4",py:"2"},QEe={pt:"2",px:"4",pb:"5"},YEe={fontSize:"1.25em"},ZEe=WEe({container:KEe,button:XEe,panel:QEe,icon:YEe}),JEe=qEe({baseStyle:ZEe}),{definePartsStyle:qm,defineMultiStyleConfig:e4e}=Be(jxe.keys),xi=Ae("alert-fg"),ha=Ae("alert-bg"),t4e=qm({container:{bg:ha.reference,px:"4",py:"3"},title:{fontWeight:"bold",lineHeight:"6",marginEnd:"2"},description:{lineHeight:"6"},icon:{color:xi.reference,flexShrink:0,marginEnd:"3",w:"5",h:"6"},spinner:{color:xi.reference,flexShrink:0,marginEnd:"3",w:"5",h:"5"}});function aA(e){const{theme:t,colorScheme:n}=e,r=vf(`${n}.200`,.16)(t);return{light:`colors.${n}.100`,dark:r}}var n4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark}}}}),r4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark},paddingStart:"3",borderStartWidth:"4px",borderStartColor:xi.reference}}}),i4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark},pt:"2",borderTopWidth:"4px",borderTopColor:xi.reference}}}),o4e=qm(e=>{const{colorScheme:t}=e;return{container:{[xi.variable]:"colors.white",[ha.variable]:`colors.${t}.600`,_dark:{[xi.variable]:"colors.gray.900",[ha.variable]:`colors.${t}.200`},color:xi.reference}}}),s4e={subtle:n4e,"left-accent":r4e,"top-accent":i4e,solid:o4e},a4e=e4e({baseStyle:t4e,variants:s4e,defaultProps:{variant:"subtle",colorScheme:"blue"}}),{definePartsStyle:JV,defineMultiStyleConfig:l4e}=Be(Vxe.keys),Ud=Ae("avatar-border-color"),Cp=Ae("avatar-bg"),Bg=Ae("avatar-font-size"),bf=Ae("avatar-size"),c4e={borderRadius:"full",border:"0.2em solid",borderColor:Ud.reference,[Ud.variable]:"white",_dark:{[Ud.variable]:"colors.gray.800"}},u4e={bg:Cp.reference,fontSize:Bg.reference,width:bf.reference,height:bf.reference,lineHeight:"1",[Cp.variable]:"colors.gray.200",_dark:{[Cp.variable]:"colors.whiteAlpha.400"}},d4e=e=>{const{name:t,theme:n}=e,r=t?vwe({string:t}):"colors.gray.400",i=mwe(r)(n);let o="white";return i||(o="gray.800"),{bg:Cp.reference,fontSize:Bg.reference,color:o,borderColor:Ud.reference,verticalAlign:"top",width:bf.reference,height:bf.reference,"&:not([data-loaded])":{[Cp.variable]:r},[Ud.variable]:"colors.white",_dark:{[Ud.variable]:"colors.gray.800"}}},f4e={fontSize:Bg.reference,lineHeight:"1"},h4e=JV(e=>({badge:Fr(c4e,e),excessLabel:Fr(u4e,e),container:Fr(d4e,e),label:f4e}));function Ra(e){const t=e!=="100%"?IV[e]:void 0;return JV({container:{[bf.variable]:t??e,[Bg.variable]:`calc(${t??e} / 2.5)`},excessLabel:{[bf.variable]:t??e,[Bg.variable]:`calc(${t??e} / 2.5)`}})}var p4e={"2xs":Ra(4),xs:Ra(6),sm:Ra(8),md:Ra(12),lg:Ra(16),xl:Ra(24),"2xl":Ra(32),full:Ra("100%")},g4e=l4e({baseStyle:h4e,sizes:p4e,defaultProps:{size:"md"}}),m4e={Accordion:JEe,Alert:a4e,Avatar:g4e,Badge:Sp,Breadcrumb:yEe,Button:TEe,Checkbox:H1,CloseButton:$Ee,Code:LEe,Container:zEe,Divider:HEe,Drawer:V3e,Editable:X3e,Form:tEe,FormError:aEe,FormLabel:cEe,Heading:fEe,Input:ft,Kbd:R5e,Link:$5e,List:B5e,Menu:Q5e,Modal:a3e,NumberInput:m3e,PinInput:_3e,Popover:M3e,Progress:LCe,Radio:YCe,Select:i5e,Skeleton:s5e,SkipLink:l5e,Slider:b5e,Spinner:x5e,Stat:I5e,Switch:$we,Table:jwe,Tabs:nCe,Tag:gCe,Textarea:ACe,Tooltip:ICe,Card:MEe,Stepper:zxe},y4e={colors:{"chakra-body-text":{_light:"gray.800",_dark:"whiteAlpha.900"},"chakra-body-bg":{_light:"white",_dark:"gray.800"},"chakra-border-color":{_light:"gray.200",_dark:"whiteAlpha.300"},"chakra-inverse-text":{_light:"white",_dark:"gray.800"},"chakra-subtle-bg":{_light:"gray.100",_dark:"gray.700"},"chakra-subtle-text":{_light:"gray.600",_dark:"gray.400"},"chakra-placeholder-color":{_light:"gray.500",_dark:"whiteAlpha.400"}}},v4e={global:{body:{fontFamily:"body",color:"chakra-body-text",bg:"chakra-body-bg",transitionProperty:"background-color",transitionDuration:"normal",lineHeight:"base"},"*::placeholder":{color:"chakra-placeholder-color"},"*, *::before, &::after":{borderColor:"chakra-border-color"}}},b4e="ltr",_4e={useSystemColorMode:!1,initialColorMode:"light",cssVarPrefix:"chakra"},S4e={semanticTokens:y4e,direction:b4e,...Dxe,components:m4e,styles:v4e,config:_4e};function x4e(e,t){const n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n}function w4e(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},eU=C4e(w4e);function tU(e,t){const n={};return Object.keys(e).forEach(r=>{const i=e[r];t(i,r,e)&&(n[r]=i)}),n}var nU=e=>tU(e,t=>t!=null);function E4e(e){return typeof e=="function"}function rU(e,...t){return E4e(e)?e(...t):e}function EWe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}var T4e=typeof Element<"u",A4e=typeof Map=="function",k4e=typeof Set=="function",P4e=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function vv(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,r,i;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!vv(e[r],t[r]))return!1;return!0}var o;if(A4e&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;for(o=e.entries();!(r=o.next()).done;)if(!vv(r.value[1],t.get(r.value[0])))return!1;return!0}if(k4e&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;return!0}if(P4e&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[r]))return!1;if(T4e&&e instanceof Element)return!1;for(r=n;r--!==0;)if(!((i[r]==="_owner"||i[r]==="__v"||i[r]==="__o")&&e.$$typeof)&&!vv(e[i[r]],t[i[r]]))return!1;return!0}return e!==e&&t!==t}var I4e=function(t,n){try{return vv(t,n)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}};const M4e=Ml(I4e);function iU(e,t={}){var n;const{styleConfig:r,...i}=t,{theme:o,colorMode:s}=WSe(),a=e?eU(o,`components.${e}`):void 0,l=r||a,c=ds({theme:o,colorMode:s},(n=l==null?void 0:l.defaultProps)!=null?n:{},nU(x4e(i,["children"]))),u=I.useRef({});if(l){const f=hxe(l)(c);M4e(u.current,f)||(u.current=f)}return u.current}function Km(e,t={}){return iU(e,t)}function R4e(e,t={}){return iU(e,t)}var O4e=new Set([...txe,"textStyle","layerStyle","apply","noOfLines","focusBorderColor","errorBorderColor","as","__css","css","sx"]),$4e=new Set(["htmlWidth","htmlHeight","htmlSize","htmlTranslate"]);function N4e(e){return $4e.has(e)||!O4e.has(e)}function F4e(e,...t){if(e==null)throw new TypeError("Cannot convert undefined or null to object");const n={...e};for(const r of t)if(r!=null)for(const i in r)Object.prototype.hasOwnProperty.call(r,i)&&(i in n&&delete n[i],n[i]=r[i]);return n}function D4e(e){const t=Object.assign({},e);for(let n in t)t[n]===void 0&&delete t[n];return t}var L4e=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,B4e=sV(function(e){return L4e.test(e)||e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)<91}),z4e=B4e,j4e=function(t){return t!=="theme"},ZM=function(t){return typeof t=="string"&&t.charCodeAt(0)>96?z4e:j4e},JM=function(t,n,r){var i;if(n){var o=n.shouldForwardProp;i=t.__emotion_forwardProp&&o?function(s){return t.__emotion_forwardProp(s)&&o(s)}:o}return typeof i!="function"&&r&&(i=t.__emotion_forwardProp),i},V4e=function(t){var n=t.cache,r=t.serialized,i=t.isStringTag;return fV(n,r,i),MSe(function(){return hV(n,r,i)}),null},U4e=function e(t,n){var r=t.__emotion_real===t,i=r&&t.__emotion_base||t,o,s;n!==void 0&&(o=n.label,s=n.target);var a=JM(t,n,r),l=a||ZM(i),c=!l("as");return function(){var u=arguments,d=r&&t.__emotion_styles!==void 0?t.__emotion_styles.slice(0):[];if(o!==void 0&&d.push("label:"+o+";"),u[0]==null||u[0].raw===void 0)d.push.apply(d,u);else{d.push(u[0][0]);for(var f=u.length,h=1;ht=>{const{theme:n,css:r,__css:i,sx:o,...s}=t,a=tU(s,(d,f)=>rxe(f)),l=rU(e,t),c=F4e({},i,l,nU(a),o),u=AV(c)(t.theme);return r?[u,r]:u};function Bw(e,t){const{baseStyle:n,...r}=t??{};r.shouldForwardProp||(r.shouldForwardProp=N4e);const i=W4e({baseStyle:n}),o=H4e(e,r)(i);return Q.forwardRef(function(l,c){const{colorMode:u,forced:d}=ES();return Q.createElement(o,{ref:c,"data-theme":d?u:void 0,...l})})}function q4e(){const e=new Map;return new Proxy(Bw,{apply(t,n,r){return Bw(...r)},get(t,n){return e.has(n)||e.set(n,Bw(n)),e.get(n)}})}var or=q4e();function Mi(e){return I.forwardRef(e)}function K4e(e={}){const{strict:t=!0,errorMessage:n="useContext: `context` is undefined. Seems you forgot to wrap component within the Provider",name:r}=e,i=I.createContext(void 0);i.displayName=r;function o(){var s;const a=I.useContext(i);if(!a&&t){const l=new Error(n);throw l.name="ContextError",(s=Error.captureStackTrace)==null||s.call(Error,l,o),l}return a}return[i.Provider,o,i]}function X4e(e){const{cssVarsRoot:t,theme:n,children:r}=e,i=I.useMemo(()=>J2e(n),[n]);return ie.jsxs($Se,{theme:i,children:[ie.jsx(Q4e,{root:t}),r]})}function Q4e({root:e=":host, :root"}){const t=[e,"[data-theme]"].join(",");return ie.jsx(vV,{styles:n=>({[t]:n.__cssVars})})}K4e({name:"StylesContext",errorMessage:"useStyles: `styles` is undefined. Seems you forgot to wrap the components in `` "});function TWe(){const{colorMode:e}=ES();return ie.jsx(vV,{styles:t=>{const n=eU(t,"styles.global"),r=rU(n,{theme:t,colorMode:e});return r?AV(r)(t):void 0}})}var Y4e=(e,t)=>e.find(n=>n.id===t);function t9(e,t){const n=oU(e,t),r=n?e[n].findIndex(i=>i.id===t):-1;return{position:n,index:r}}function oU(e,t){for(const[n,r]of Object.entries(e))if(Y4e(r,t))return n}function Z4e(e){const t=e.includes("right"),n=e.includes("left");let r="center";return t&&(r="flex-end"),n&&(r="flex-start"),{display:"flex",flexDirection:"column",alignItems:r}}function J4e(e){const n=e==="top"||e==="bottom"?"0 auto":void 0,r=e.includes("top")?"env(safe-area-inset-top, 0px)":void 0,i=e.includes("bottom")?"env(safe-area-inset-bottom, 0px)":void 0,o=e.includes("left")?void 0:"env(safe-area-inset-right, 0px)",s=e.includes("right")?void 0:"env(safe-area-inset-left, 0px)";return{position:"fixed",zIndex:"var(--toast-z-index, 5500)",pointerEvents:"none",display:"flex",flexDirection:"column",margin:n,top:r,bottom:i,right:o,left:s}}function eTe(e,t=[]){const n=I.useRef(e);return I.useEffect(()=>{n.current=e}),I.useCallback((...r)=>{var i;return(i=n.current)==null?void 0:i.call(n,...r)},t)}function tTe(e,t){const n=eTe(e);I.useEffect(()=>{if(t==null)return;let r=null;return r=window.setTimeout(()=>{n()},t),()=>{r&&window.clearTimeout(r)}},[t,n])}function n9(e,t){const n=I.useRef(!1),r=I.useRef(!1);I.useEffect(()=>{if(n.current&&r.current)return e();r.current=!0},t),I.useEffect(()=>(n.current=!0,()=>{n.current=!1}),[])}const sU=I.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"}),IS=I.createContext({}),Xm=I.createContext(null),MS=typeof document<"u",lA=MS?I.useLayoutEffect:I.useEffect,aU=I.createContext({strict:!1}),cA=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),nTe="framerAppearId",lU="data-"+cA(nTe);function rTe(e,t,n,r){const{visualElement:i}=I.useContext(IS),o=I.useContext(aU),s=I.useContext(Xm),a=I.useContext(sU).reducedMotion,l=I.useRef();r=r||o.renderer,!l.current&&r&&(l.current=r(e,{visualState:t,parent:i,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:a}));const c=l.current;I.useInsertionEffect(()=>{c&&c.update(n,s)});const u=I.useRef(!!(n[lU]&&!window.HandoffComplete));return lA(()=>{c&&(c.render(),u.current&&c.animationState&&c.animationState.animateChanges())}),I.useEffect(()=>{c&&(c.updateFeatures(),!u.current&&c.animationState&&c.animationState.animateChanges(),u.current&&(u.current=!1,window.HandoffComplete=!0))}),c}function md(e){return typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function iTe(e,t,n){return I.useCallback(r=>{r&&e.mount&&e.mount(r),t&&(r?t.mount(r):t.unmount()),n&&(typeof n=="function"?n(r):md(n)&&(n.current=r))},[t])}function zg(e){return typeof e=="string"||Array.isArray(e)}function RS(e){return typeof e=="object"&&typeof e.start=="function"}const uA=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],dA=["initial",...uA];function OS(e){return RS(e.animate)||dA.some(t=>zg(e[t]))}function cU(e){return!!(OS(e)||e.variants)}function oTe(e,t){if(OS(e)){const{initial:n,animate:r}=e;return{initial:n===!1||zg(n)?n:void 0,animate:zg(r)?r:void 0}}return e.inherit!==!1?t:{}}function sTe(e){const{initial:t,animate:n}=oTe(e,I.useContext(IS));return I.useMemo(()=>({initial:t,animate:n}),[r9(t),r9(n)])}function r9(e){return Array.isArray(e)?e.join(" "):e}const i9={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},jg={};for(const e in i9)jg[e]={isEnabled:t=>i9[e].some(n=>!!t[n])};function aTe(e){for(const t in e)jg[t]={...jg[t],...e[t]}}const fA=I.createContext({}),uU=I.createContext({}),lTe=Symbol.for("motionComponentSymbol");function cTe({preloadedFeatures:e,createVisualElement:t,useRender:n,useVisualState:r,Component:i}){e&&aTe(e);function o(a,l){let c;const u={...I.useContext(sU),...a,layoutId:uTe(a)},{isStatic:d}=u,f=sTe(a),h=r(a,d);if(!d&&MS){f.visualElement=rTe(i,h,u,t);const p=I.useContext(uU),m=I.useContext(aU).strict;f.visualElement&&(c=f.visualElement.loadFeatures(u,m,e,p))}return I.createElement(IS.Provider,{value:f},c&&f.visualElement?I.createElement(c,{visualElement:f.visualElement,...u}):null,n(i,a,iTe(h,f.visualElement,l),h,d,f.visualElement))}const s=I.forwardRef(o);return s[lTe]=i,s}function uTe({layoutId:e}){const t=I.useContext(fA).id;return t&&e!==void 0?t+"-"+e:e}function dTe(e){function t(r,i={}){return cTe(e(r,i))}if(typeof Proxy>"u")return t;const n=new Map;return new Proxy(t,{get:(r,i)=>(n.has(i)||n.set(i,t(i)),n.get(i))})}const fTe=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function hA(e){return typeof e!="string"||e.includes("-")?!1:!!(fTe.indexOf(e)>-1||/[A-Z]/.test(e))}const K1={};function hTe(e){Object.assign(K1,e)}const Qm=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],du=new Set(Qm);function dU(e,{layout:t,layoutId:n}){return du.has(e)||e.startsWith("origin")||(t||n!==void 0)&&(!!K1[e]||e==="opacity")}const ri=e=>!!(e&&e.getVelocity),pTe={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},gTe=Qm.length;function mTe(e,{enableHardwareAcceleration:t=!0,allowTransformNone:n=!0},r,i){let o="";for(let s=0;st=>typeof t=="string"&&t.startsWith(e),hU=fU("--"),R3=fU("var(--"),yTe=/var\s*\(\s*--[\w-]+(\s*,\s*(?:(?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)+)?\s*\)/g,vTe=(e,t)=>t&&typeof e=="number"?t.transform(e):e,El=(e,t,n)=>Math.min(Math.max(n,e),t),fu={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Ep={...fu,transform:e=>El(0,1,e)},fy={...fu,default:1},Tp=e=>Math.round(e*1e5)/1e5,$S=/(-)?([\d]*\.?[\d])+/g,pU=/(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))/gi,bTe=/^(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))$/i;function Ym(e){return typeof e=="string"}const Zm=e=>({test:t=>Ym(t)&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),Na=Zm("deg"),bs=Zm("%"),Pe=Zm("px"),_Te=Zm("vh"),STe=Zm("vw"),o9={...bs,parse:e=>bs.parse(e)/100,transform:e=>bs.transform(e*100)},s9={...fu,transform:Math.round},gU={borderWidth:Pe,borderTopWidth:Pe,borderRightWidth:Pe,borderBottomWidth:Pe,borderLeftWidth:Pe,borderRadius:Pe,radius:Pe,borderTopLeftRadius:Pe,borderTopRightRadius:Pe,borderBottomRightRadius:Pe,borderBottomLeftRadius:Pe,width:Pe,maxWidth:Pe,height:Pe,maxHeight:Pe,size:Pe,top:Pe,right:Pe,bottom:Pe,left:Pe,padding:Pe,paddingTop:Pe,paddingRight:Pe,paddingBottom:Pe,paddingLeft:Pe,margin:Pe,marginTop:Pe,marginRight:Pe,marginBottom:Pe,marginLeft:Pe,rotate:Na,rotateX:Na,rotateY:Na,rotateZ:Na,scale:fy,scaleX:fy,scaleY:fy,scaleZ:fy,skew:Na,skewX:Na,skewY:Na,distance:Pe,translateX:Pe,translateY:Pe,translateZ:Pe,x:Pe,y:Pe,z:Pe,perspective:Pe,transformPerspective:Pe,opacity:Ep,originX:o9,originY:o9,originZ:Pe,zIndex:s9,fillOpacity:Ep,strokeOpacity:Ep,numOctaves:s9};function pA(e,t,n,r){const{style:i,vars:o,transform:s,transformOrigin:a}=e;let l=!1,c=!1,u=!0;for(const d in t){const f=t[d];if(hU(d)){o[d]=f;continue}const h=gU[d],p=vTe(f,h);if(du.has(d)){if(l=!0,s[d]=p,!u)continue;f!==(h.default||0)&&(u=!1)}else d.startsWith("origin")?(c=!0,a[d]=p):i[d]=p}if(t.transform||(l||r?i.transform=mTe(e.transform,n,u,r):i.transform&&(i.transform="none")),c){const{originX:d="50%",originY:f="50%",originZ:h=0}=a;i.transformOrigin=`${d} ${f} ${h}`}}const gA=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function mU(e,t,n){for(const r in t)!ri(t[r])&&!dU(r,n)&&(e[r]=t[r])}function xTe({transformTemplate:e},t,n){return I.useMemo(()=>{const r=gA();return pA(r,t,{enableHardwareAcceleration:!n},e),Object.assign({},r.vars,r.style)},[t])}function wTe(e,t,n){const r=e.style||{},i={};return mU(i,r,e),Object.assign(i,xTe(e,t,n)),e.transformValues?e.transformValues(i):i}function CTe(e,t,n){const r={},i=wTe(e,t,n);return e.drag&&e.dragListener!==!1&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(r.tabIndex=0),r.style=i,r}const ETe=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","transformValues","custom","inherit","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","ignoreStrict","viewport"]);function X1(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||ETe.has(e)}let yU=e=>!X1(e);function TTe(e){e&&(yU=t=>t.startsWith("on")?!X1(t):e(t))}try{TTe(require("@emotion/is-prop-valid").default)}catch{}function ATe(e,t,n){const r={};for(const i in e)i==="values"&&typeof e.values=="object"||(yU(i)||n===!0&&X1(i)||!t&&!X1(i)||e.draggable&&i.startsWith("onDrag"))&&(r[i]=e[i]);return r}function a9(e,t,n){return typeof e=="string"?e:Pe.transform(t+n*e)}function kTe(e,t,n){const r=a9(t,e.x,e.width),i=a9(n,e.y,e.height);return`${r} ${i}`}const PTe={offset:"stroke-dashoffset",array:"stroke-dasharray"},ITe={offset:"strokeDashoffset",array:"strokeDasharray"};function MTe(e,t,n=1,r=0,i=!0){e.pathLength=1;const o=i?PTe:ITe;e[o.offset]=Pe.transform(-r);const s=Pe.transform(t),a=Pe.transform(n);e[o.array]=`${s} ${a}`}function mA(e,{attrX:t,attrY:n,attrScale:r,originX:i,originY:o,pathLength:s,pathSpacing:a=1,pathOffset:l=0,...c},u,d,f){if(pA(e,c,u,f),d){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:h,style:p,dimensions:m}=e;h.transform&&(m&&(p.transform=h.transform),delete h.transform),m&&(i!==void 0||o!==void 0||p.transform)&&(p.transformOrigin=kTe(m,i!==void 0?i:.5,o!==void 0?o:.5)),t!==void 0&&(h.x=t),n!==void 0&&(h.y=n),r!==void 0&&(h.scale=r),s!==void 0&&MTe(h,s,a,l,!1)}const vU=()=>({...gA(),attrs:{}}),yA=e=>typeof e=="string"&&e.toLowerCase()==="svg";function RTe(e,t,n,r){const i=I.useMemo(()=>{const o=vU();return mA(o,t,{enableHardwareAcceleration:!1},yA(r),e.transformTemplate),{...o.attrs,style:{...o.style}}},[t]);if(e.style){const o={};mU(o,e.style,e),i.style={...o,...i.style}}return i}function OTe(e=!1){return(n,r,i,{latestValues:o},s)=>{const l=(hA(n)?RTe:CTe)(r,o,s,n),u={...ATe(r,typeof n=="string",e),...l,ref:i},{children:d}=r,f=I.useMemo(()=>ri(d)?d.get():d,[d]);return I.createElement(n,{...u,children:f})}}function bU(e,{style:t,vars:n},r,i){Object.assign(e.style,t,i&&i.getProjectionStyles(r));for(const o in n)e.style.setProperty(o,n[o])}const _U=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function SU(e,t,n,r){bU(e,t,void 0,r);for(const i in t.attrs)e.setAttribute(_U.has(i)?i:cA(i),t.attrs[i])}function vA(e,t){const{style:n}=e,r={};for(const i in n)(ri(n[i])||t.style&&ri(t.style[i])||dU(i,e))&&(r[i]=n[i]);return r}function xU(e,t){const n=vA(e,t);for(const r in e)if(ri(e[r])||ri(t[r])){const i=Qm.indexOf(r)!==-1?"attr"+r.charAt(0).toUpperCase()+r.substring(1):r;n[i]=e[r]}return n}function bA(e,t,n,r={},i={}){return typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),t}function wU(e){const t=I.useRef(null);return t.current===null&&(t.current=e()),t.current}const Q1=e=>Array.isArray(e),$Te=e=>!!(e&&typeof e=="object"&&e.mix&&e.toValue),NTe=e=>Q1(e)?e[e.length-1]||0:e;function bv(e){const t=ri(e)?e.get():e;return $Te(t)?t.toValue():t}function FTe({scrapeMotionValuesFromProps:e,createRenderState:t,onMount:n},r,i,o){const s={latestValues:DTe(r,i,o,e),renderState:t()};return n&&(s.mount=a=>n(r,a,s)),s}const CU=e=>(t,n)=>{const r=I.useContext(IS),i=I.useContext(Xm),o=()=>FTe(e,t,r,i);return n?o():wU(o)};function DTe(e,t,n,r){const i={},o=r(e,{});for(const f in o)i[f]=bv(o[f]);let{initial:s,animate:a}=e;const l=OS(e),c=cU(e);t&&c&&!l&&e.inherit!==!1&&(s===void 0&&(s=t.initial),a===void 0&&(a=t.animate));let u=n?n.initial===!1:!1;u=u||s===!1;const d=u?a:s;return d&&typeof d!="boolean"&&!RS(d)&&(Array.isArray(d)?d:[d]).forEach(h=>{const p=bA(e,h);if(!p)return;const{transitionEnd:m,transition:_,...v}=p;for(const y in v){let g=v[y];if(Array.isArray(g)){const b=u?g.length-1:0;g=g[b]}g!==null&&(i[y]=g)}for(const y in m)i[y]=m[y]}),i}const tn=e=>e;class l9{constructor(){this.order=[],this.scheduled=new Set}add(t){if(!this.scheduled.has(t))return this.scheduled.add(t),this.order.push(t),!0}remove(t){const n=this.order.indexOf(t);n!==-1&&(this.order.splice(n,1),this.scheduled.delete(t))}clear(){this.order.length=0,this.scheduled.clear()}}function LTe(e){let t=new l9,n=new l9,r=0,i=!1,o=!1;const s=new WeakSet,a={schedule:(l,c=!1,u=!1)=>{const d=u&&i,f=d?t:n;return c&&s.add(l),f.add(l)&&d&&i&&(r=t.order.length),l},cancel:l=>{n.remove(l),s.delete(l)},process:l=>{if(i){o=!0;return}if(i=!0,[t,n]=[n,t],n.clear(),r=t.order.length,r)for(let c=0;c(d[f]=LTe(()=>n=!0),d),{}),s=d=>o[d].process(i),a=()=>{const d=performance.now();n=!1,i.delta=r?1e3/60:Math.max(Math.min(d-i.timestamp,BTe),1),i.timestamp=d,i.isProcessing=!0,hy.forEach(s),i.isProcessing=!1,n&&t&&(r=!1,e(a))},l=()=>{n=!0,r=!0,i.isProcessing||e(a)};return{schedule:hy.reduce((d,f)=>{const h=o[f];return d[f]=(p,m=!1,_=!1)=>(n||l(),h.schedule(p,m,_)),d},{}),cancel:d=>hy.forEach(f=>o[f].cancel(d)),state:i,steps:o}}const{schedule:Pt,cancel:pa,state:$n,steps:zw}=zTe(typeof requestAnimationFrame<"u"?requestAnimationFrame:tn,!0),jTe={useVisualState:CU({scrapeMotionValuesFromProps:xU,createRenderState:vU,onMount:(e,t,{renderState:n,latestValues:r})=>{Pt.read(()=>{try{n.dimensions=typeof t.getBBox=="function"?t.getBBox():t.getBoundingClientRect()}catch{n.dimensions={x:0,y:0,width:0,height:0}}}),Pt.render(()=>{mA(n,r,{enableHardwareAcceleration:!1},yA(t.tagName),e.transformTemplate),SU(t,n)})}})},VTe={useVisualState:CU({scrapeMotionValuesFromProps:vA,createRenderState:gA})};function UTe(e,{forwardMotionProps:t=!1},n,r){return{...hA(e)?jTe:VTe,preloadedFeatures:n,useRender:OTe(t),createVisualElement:r,Component:e}}function Ys(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n)}const EU=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1;function NS(e,t="page"){return{point:{x:e[t+"X"],y:e[t+"Y"]}}}const GTe=e=>t=>EU(t)&&e(t,NS(t));function na(e,t,n,r){return Ys(e,t,GTe(n),r)}const HTe=(e,t)=>n=>t(e(n)),hl=(...e)=>e.reduce(HTe);function TU(e){let t=null;return()=>{const n=()=>{t=null};return t===null?(t=e,n):!1}}const c9=TU("dragHorizontal"),u9=TU("dragVertical");function AU(e){let t=!1;if(e==="y")t=u9();else if(e==="x")t=c9();else{const n=c9(),r=u9();n&&r?t=()=>{n(),r()}:(n&&n(),r&&r())}return t}function kU(){const e=AU(!0);return e?(e(),!1):!0}class Ll{constructor(t){this.isMounted=!1,this.node=t}update(){}}function d9(e,t){const n="pointer"+(t?"enter":"leave"),r="onHover"+(t?"Start":"End"),i=(o,s)=>{if(o.type==="touch"||kU())return;const a=e.getProps();e.animationState&&a.whileHover&&e.animationState.setActive("whileHover",t),a[r]&&Pt.update(()=>a[r](o,s))};return na(e.current,n,i,{passive:!e.getProps()[r]})}class WTe extends Ll{mount(){this.unmount=hl(d9(this.node,!0),d9(this.node,!1))}unmount(){}}class qTe extends Ll{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=hl(Ys(this.node.current,"focus",()=>this.onFocus()),Ys(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}const PU=(e,t)=>t?e===t?!0:PU(e,t.parentElement):!1;function jw(e,t){if(!t)return;const n=new PointerEvent("pointer"+e);t(n,NS(n))}class KTe extends Ll{constructor(){super(...arguments),this.removeStartListeners=tn,this.removeEndListeners=tn,this.removeAccessibleListeners=tn,this.startPointerPress=(t,n)=>{if(this.removeEndListeners(),this.isPressing)return;const r=this.node.getProps(),o=na(window,"pointerup",(a,l)=>{if(!this.checkPressEnd())return;const{onTap:c,onTapCancel:u}=this.node.getProps();Pt.update(()=>{PU(this.node.current,a.target)?c&&c(a,l):u&&u(a,l)})},{passive:!(r.onTap||r.onPointerUp)}),s=na(window,"pointercancel",(a,l)=>this.cancelPress(a,l),{passive:!(r.onTapCancel||r.onPointerCancel)});this.removeEndListeners=hl(o,s),this.startPress(t,n)},this.startAccessiblePress=()=>{const t=o=>{if(o.key!=="Enter"||this.isPressing)return;const s=a=>{a.key!=="Enter"||!this.checkPressEnd()||jw("up",(l,c)=>{const{onTap:u}=this.node.getProps();u&&Pt.update(()=>u(l,c))})};this.removeEndListeners(),this.removeEndListeners=Ys(this.node.current,"keyup",s),jw("down",(a,l)=>{this.startPress(a,l)})},n=Ys(this.node.current,"keydown",t),r=()=>{this.isPressing&&jw("cancel",(o,s)=>this.cancelPress(o,s))},i=Ys(this.node.current,"blur",r);this.removeAccessibleListeners=hl(n,i)}}startPress(t,n){this.isPressing=!0;const{onTapStart:r,whileTap:i}=this.node.getProps();i&&this.node.animationState&&this.node.animationState.setActive("whileTap",!0),r&&Pt.update(()=>r(t,n))}checkPressEnd(){return this.removeEndListeners(),this.isPressing=!1,this.node.getProps().whileTap&&this.node.animationState&&this.node.animationState.setActive("whileTap",!1),!kU()}cancelPress(t,n){if(!this.checkPressEnd())return;const{onTapCancel:r}=this.node.getProps();r&&Pt.update(()=>r(t,n))}mount(){const t=this.node.getProps(),n=na(this.node.current,"pointerdown",this.startPointerPress,{passive:!(t.onTapStart||t.onPointerStart)}),r=Ys(this.node.current,"focus",this.startAccessiblePress);this.removeStartListeners=hl(n,r)}unmount(){this.removeStartListeners(),this.removeEndListeners(),this.removeAccessibleListeners()}}const O3=new WeakMap,Vw=new WeakMap,XTe=e=>{const t=O3.get(e.target);t&&t(e)},QTe=e=>{e.forEach(XTe)};function YTe({root:e,...t}){const n=e||document;Vw.has(n)||Vw.set(n,{});const r=Vw.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(QTe,{root:e,...t})),r[i]}function ZTe(e,t,n){const r=YTe(t);return O3.set(e,n),r.observe(e),()=>{O3.delete(e),r.unobserve(e)}}const JTe={some:0,all:1};class eAe extends Ll{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:t={}}=this.node.getProps(),{root:n,margin:r,amount:i="some",once:o}=t,s={root:n?n.current:void 0,rootMargin:r,threshold:typeof i=="number"?i:JTe[i]},a=l=>{const{isIntersecting:c}=l;if(this.isInView===c||(this.isInView=c,o&&!c&&this.hasEnteredView))return;c&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",c);const{onViewportEnter:u,onViewportLeave:d}=this.node.getProps(),f=c?u:d;f&&f(l)};return ZTe(this.node.current,s,a)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:n}=this.node;["amount","margin","root"].some(tAe(t,n))&&this.startObserver()}unmount(){}}function tAe({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}const nAe={inView:{Feature:eAe},tap:{Feature:KTe},focus:{Feature:qTe},hover:{Feature:WTe}};function IU(e,t){if(!Array.isArray(t))return!1;const n=t.length;if(n!==e.length)return!1;for(let r=0;rt[r]=n.get()),t}function iAe(e){const t={};return e.values.forEach((n,r)=>t[r]=n.getVelocity()),t}function FS(e,t,n){const r=e.getProps();return bA(r,t,n!==void 0?n:r.custom,rAe(e),iAe(e))}let oAe=tn,_A=tn;const pl=e=>e*1e3,ra=e=>e/1e3,sAe={current:!1},MU=e=>Array.isArray(e)&&typeof e[0]=="number";function RU(e){return!!(!e||typeof e=="string"&&OU[e]||MU(e)||Array.isArray(e)&&e.every(RU))}const Jh=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,OU={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Jh([0,.65,.55,1]),circOut:Jh([.55,0,1,.45]),backIn:Jh([.31,.01,.66,-.59]),backOut:Jh([.33,1.53,.69,.99])};function $U(e){if(e)return MU(e)?Jh(e):Array.isArray(e)?e.map($U):OU[e]}function aAe(e,t,n,{delay:r=0,duration:i,repeat:o=0,repeatType:s="loop",ease:a,times:l}={}){const c={[t]:n};l&&(c.offset=l);const u=$U(a);return Array.isArray(u)&&(c.easing=u),e.animate(c,{delay:r,duration:i,easing:Array.isArray(u)?"linear":u,fill:"both",iterations:o+1,direction:s==="reverse"?"alternate":"normal"})}function lAe(e,{repeat:t,repeatType:n="loop"}){const r=t&&n!=="loop"&&t%2===1?0:e.length-1;return e[r]}const NU=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,cAe=1e-7,uAe=12;function dAe(e,t,n,r,i){let o,s,a=0;do s=t+(n-t)/2,o=NU(s,r,i)-e,o>0?n=s:t=s;while(Math.abs(o)>cAe&&++adAe(o,0,1,e,n);return o=>o===0||o===1?o:NU(i(o),t,r)}const fAe=Jm(.42,0,1,1),hAe=Jm(0,0,.58,1),FU=Jm(.42,0,.58,1),pAe=e=>Array.isArray(e)&&typeof e[0]!="number",DU=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,LU=e=>t=>1-e(1-t),BU=e=>1-Math.sin(Math.acos(e)),SA=LU(BU),gAe=DU(SA),zU=Jm(.33,1.53,.69,.99),xA=LU(zU),mAe=DU(xA),yAe=e=>(e*=2)<1?.5*xA(e):.5*(2-Math.pow(2,-10*(e-1))),vAe={linear:tn,easeIn:fAe,easeInOut:FU,easeOut:hAe,circIn:BU,circInOut:gAe,circOut:SA,backIn:xA,backInOut:mAe,backOut:zU,anticipate:yAe},f9=e=>{if(Array.isArray(e)){_A(e.length===4);const[t,n,r,i]=e;return Jm(t,n,r,i)}else if(typeof e=="string")return vAe[e];return e},wA=(e,t)=>n=>!!(Ym(n)&&bTe.test(n)&&n.startsWith(e)||t&&Object.prototype.hasOwnProperty.call(n,t)),jU=(e,t,n)=>r=>{if(!Ym(r))return r;const[i,o,s,a]=r.match($S);return{[e]:parseFloat(i),[t]:parseFloat(o),[n]:parseFloat(s),alpha:a!==void 0?parseFloat(a):1}},bAe=e=>El(0,255,e),Uw={...fu,transform:e=>Math.round(bAe(e))},Ec={test:wA("rgb","red"),parse:jU("red","green","blue"),transform:({red:e,green:t,blue:n,alpha:r=1})=>"rgba("+Uw.transform(e)+", "+Uw.transform(t)+", "+Uw.transform(n)+", "+Tp(Ep.transform(r))+")"};function _Ae(e){let t="",n="",r="",i="";return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}const $3={test:wA("#"),parse:_Ae,transform:Ec.transform},yd={test:wA("hsl","hue"),parse:jU("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>"hsla("+Math.round(e)+", "+bs.transform(Tp(t))+", "+bs.transform(Tp(n))+", "+Tp(Ep.transform(r))+")"},Mr={test:e=>Ec.test(e)||$3.test(e)||yd.test(e),parse:e=>Ec.test(e)?Ec.parse(e):yd.test(e)?yd.parse(e):$3.parse(e),transform:e=>Ym(e)?e:e.hasOwnProperty("red")?Ec.transform(e):yd.transform(e)},Wt=(e,t,n)=>-n*e+n*t+e;function Gw(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function SAe({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,o=0,s=0;if(!t)i=o=s=n;else{const a=n<.5?n*(1+t):n+t-n*t,l=2*n-a;i=Gw(l,a,e+1/3),o=Gw(l,a,e),s=Gw(l,a,e-1/3)}return{red:Math.round(i*255),green:Math.round(o*255),blue:Math.round(s*255),alpha:r}}const Hw=(e,t,n)=>{const r=e*e;return Math.sqrt(Math.max(0,n*(t*t-r)+r))},xAe=[$3,Ec,yd],wAe=e=>xAe.find(t=>t.test(e));function h9(e){const t=wAe(e);let n=t.parse(e);return t===yd&&(n=SAe(n)),n}const VU=(e,t)=>{const n=h9(e),r=h9(t),i={...n};return o=>(i.red=Hw(n.red,r.red,o),i.green=Hw(n.green,r.green,o),i.blue=Hw(n.blue,r.blue,o),i.alpha=Wt(n.alpha,r.alpha,o),Ec.transform(i))};function CAe(e){var t,n;return isNaN(e)&&Ym(e)&&(((t=e.match($S))===null||t===void 0?void 0:t.length)||0)+(((n=e.match(pU))===null||n===void 0?void 0:n.length)||0)>0}const UU={regex:yTe,countKey:"Vars",token:"${v}",parse:tn},GU={regex:pU,countKey:"Colors",token:"${c}",parse:Mr.parse},HU={regex:$S,countKey:"Numbers",token:"${n}",parse:fu.parse};function Ww(e,{regex:t,countKey:n,token:r,parse:i}){const o=e.tokenised.match(t);o&&(e["num"+n]=o.length,e.tokenised=e.tokenised.replace(t,r),e.values.push(...o.map(i)))}function Y1(e){const t=e.toString(),n={value:t,tokenised:t,values:[],numVars:0,numColors:0,numNumbers:0};return n.value.includes("var(--")&&Ww(n,UU),Ww(n,GU),Ww(n,HU),n}function WU(e){return Y1(e).values}function qU(e){const{values:t,numColors:n,numVars:r,tokenised:i}=Y1(e),o=t.length;return s=>{let a=i;for(let l=0;ltypeof e=="number"?0:e;function TAe(e){const t=WU(e);return qU(e)(t.map(EAe))}const Tl={test:CAe,parse:WU,createTransformer:qU,getAnimatableNone:TAe},KU=(e,t)=>n=>`${n>0?t:e}`;function XU(e,t){return typeof e=="number"?n=>Wt(e,t,n):Mr.test(e)?VU(e,t):e.startsWith("var(")?KU(e,t):YU(e,t)}const QU=(e,t)=>{const n=[...e],r=n.length,i=e.map((o,s)=>XU(o,t[s]));return o=>{for(let s=0;s{const n={...e,...t},r={};for(const i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=XU(e[i],t[i]));return i=>{for(const o in r)n[o]=r[o](i);return n}},YU=(e,t)=>{const n=Tl.createTransformer(t),r=Y1(e),i=Y1(t);return r.numVars===i.numVars&&r.numColors===i.numColors&&r.numNumbers>=i.numNumbers?hl(QU(r.values,i.values),n):KU(e,t)},Vg=(e,t,n)=>{const r=t-e;return r===0?1:(n-e)/r},p9=(e,t)=>n=>Wt(e,t,n);function kAe(e){return typeof e=="number"?p9:typeof e=="string"?Mr.test(e)?VU:YU:Array.isArray(e)?QU:typeof e=="object"?AAe:p9}function PAe(e,t,n){const r=[],i=n||kAe(e[0]),o=e.length-1;for(let s=0;st[0];e[0]>e[o-1]&&(e=[...e].reverse(),t=[...t].reverse());const s=PAe(t,r,i),a=s.length,l=c=>{let u=0;if(a>1)for(;ul(El(e[0],e[o-1],c)):l}function IAe(e,t){const n=e[e.length-1];for(let r=1;r<=t;r++){const i=Vg(0,t,r);e.push(Wt(n,1,i))}}function MAe(e){const t=[0];return IAe(t,e.length-1),t}function RAe(e,t){return e.map(n=>n*t)}function OAe(e,t){return e.map(()=>t||FU).splice(0,e.length-1)}function Z1({duration:e=300,keyframes:t,times:n,ease:r="easeInOut"}){const i=pAe(r)?r.map(f9):f9(r),o={done:!1,value:t[0]},s=RAe(n&&n.length===t.length?n:MAe(t),e),a=ZU(s,t,{ease:Array.isArray(i)?i:OAe(t,i)});return{calculatedDuration:e,next:l=>(o.value=a(l),o.done=l>=e,o)}}function JU(e,t){return t?e*(1e3/t):0}const $Ae=5;function eG(e,t,n){const r=Math.max(t-$Ae,0);return JU(n-e(r),t-r)}const qw=.001,NAe=.01,g9=10,FAe=.05,DAe=1;function LAe({duration:e=800,bounce:t=.25,velocity:n=0,mass:r=1}){let i,o;oAe(e<=pl(g9));let s=1-t;s=El(FAe,DAe,s),e=El(NAe,g9,ra(e)),s<1?(i=c=>{const u=c*s,d=u*e,f=u-n,h=N3(c,s),p=Math.exp(-d);return qw-f/h*p},o=c=>{const d=c*s*e,f=d*n+n,h=Math.pow(s,2)*Math.pow(c,2)*e,p=Math.exp(-d),m=N3(Math.pow(c,2),s);return(-i(c)+qw>0?-1:1)*((f-h)*p)/m}):(i=c=>{const u=Math.exp(-c*e),d=(c-n)*e+1;return-qw+u*d},o=c=>{const u=Math.exp(-c*e),d=(n-c)*(e*e);return u*d});const a=5/e,l=zAe(i,o,a);if(e=pl(e),isNaN(l))return{stiffness:100,damping:10,duration:e};{const c=Math.pow(l,2)*r;return{stiffness:c,damping:s*2*Math.sqrt(r*c),duration:e}}}const BAe=12;function zAe(e,t,n){let r=n;for(let i=1;ie[n]!==void 0)}function UAe(e){let t={velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1,...e};if(!m9(e,VAe)&&m9(e,jAe)){const n=LAe(e);t={...t,...n,velocity:0,mass:1},t.isResolvedFromDuration=!0}return t}function tG({keyframes:e,restDelta:t,restSpeed:n,...r}){const i=e[0],o=e[e.length-1],s={done:!1,value:i},{stiffness:a,damping:l,mass:c,velocity:u,duration:d,isResolvedFromDuration:f}=UAe(r),h=u?-ra(u):0,p=l/(2*Math.sqrt(a*c)),m=o-i,_=ra(Math.sqrt(a/c)),v=Math.abs(m)<5;n||(n=v?.01:2),t||(t=v?.005:.5);let y;if(p<1){const g=N3(_,p);y=b=>{const S=Math.exp(-p*_*b);return o-S*((h+p*_*m)/g*Math.sin(g*b)+m*Math.cos(g*b))}}else if(p===1)y=g=>o-Math.exp(-_*g)*(m+(h+_*m)*g);else{const g=_*Math.sqrt(p*p-1);y=b=>{const S=Math.exp(-p*_*b),w=Math.min(g*b,300);return o-S*((h+p*_*m)*Math.sinh(w)+g*m*Math.cosh(w))/g}}return{calculatedDuration:f&&d||null,next:g=>{const b=y(g);if(f)s.done=g>=d;else{let S=h;g!==0&&(p<1?S=eG(y,g,b):S=0);const w=Math.abs(S)<=n,C=Math.abs(o-b)<=t;s.done=w&&C}return s.value=s.done?o:b,s}}}function y9({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:o=500,modifyTarget:s,min:a,max:l,restDelta:c=.5,restSpeed:u}){const d=e[0],f={done:!1,value:d},h=x=>a!==void 0&&xl,p=x=>a===void 0?l:l===void 0||Math.abs(a-x)-m*Math.exp(-x/r),g=x=>v+y(x),b=x=>{const k=y(x),A=g(x);f.done=Math.abs(k)<=c,f.value=f.done?v:A};let S,w;const C=x=>{h(f.value)&&(S=x,w=tG({keyframes:[f.value,p(f.value)],velocity:eG(g,x,f.value),damping:i,stiffness:o,restDelta:c,restSpeed:u}))};return C(0),{calculatedDuration:null,next:x=>{let k=!1;return!w&&S===void 0&&(k=!0,b(x),C(x)),S!==void 0&&x>S?w.next(x-S):(!k&&b(x),f)}}}const GAe=e=>{const t=({timestamp:n})=>e(n);return{start:()=>Pt.update(t,!0),stop:()=>pa(t),now:()=>$n.isProcessing?$n.timestamp:performance.now()}},v9=2e4;function b9(e){let t=0;const n=50;let r=e.next(t);for(;!r.done&&t=v9?1/0:t}const HAe={decay:y9,inertia:y9,tween:Z1,keyframes:Z1,spring:tG};function J1({autoplay:e=!0,delay:t=0,driver:n=GAe,keyframes:r,type:i="keyframes",repeat:o=0,repeatDelay:s=0,repeatType:a="loop",onPlay:l,onStop:c,onComplete:u,onUpdate:d,...f}){let h=1,p=!1,m,_;const v=()=>{_=new Promise(z=>{m=z})};v();let y;const g=HAe[i]||Z1;let b;g!==Z1&&typeof r[0]!="number"&&(b=ZU([0,100],r,{clamp:!1}),r=[0,100]);const S=g({...f,keyframes:r});let w;a==="mirror"&&(w=g({...f,keyframes:[...r].reverse(),velocity:-(f.velocity||0)}));let C="idle",x=null,k=null,A=null;S.calculatedDuration===null&&o&&(S.calculatedDuration=b9(S));const{calculatedDuration:R}=S;let L=1/0,M=1/0;R!==null&&(L=R+s,M=L*(o+1)-s);let E=0;const P=z=>{if(k===null)return;h>0&&(k=Math.min(k,z)),h<0&&(k=Math.min(z-M/h,k)),x!==null?E=x:E=Math.round(z-k)*h;const V=E-t*(h>=0?1:-1),H=h>=0?V<0:V>M;E=Math.max(V,0),C==="finished"&&x===null&&(E=M);let X=E,te=S;if(o){const Z=E/L;let oe=Math.floor(Z),be=Z%1;!be&&Z>=1&&(be=1),be===1&&oe--,oe=Math.min(oe,o+1);const Me=!!(oe%2);Me&&(a==="reverse"?(be=1-be,s&&(be-=s/L)):a==="mirror"&&(te=w));let lt=El(0,1,be);E>M&&(lt=a==="reverse"&&Me?1:0),X=lt*L}const ee=H?{done:!1,value:r[0]}:te.next(X);b&&(ee.value=b(ee.value));let{done:j}=ee;!H&&R!==null&&(j=h>=0?E>=M:E<=0);const q=x===null&&(C==="finished"||C==="running"&&j);return d&&d(ee.value),q&&$(),ee},O=()=>{y&&y.stop(),y=void 0},F=()=>{C="idle",O(),m(),v(),k=A=null},$=()=>{C="finished",u&&u(),O(),m()},D=()=>{if(p)return;y||(y=n(P));const z=y.now();l&&l(),x!==null?k=z-x:(!k||C==="finished")&&(k=z),C==="finished"&&v(),A=k,x=null,C="running",y.start()};e&&D();const N={then(z,V){return _.then(z,V)},get time(){return ra(E)},set time(z){z=pl(z),E=z,x!==null||!y||h===0?x=z:k=y.now()-z/h},get duration(){const z=S.calculatedDuration===null?b9(S):S.calculatedDuration;return ra(z)},get speed(){return h},set speed(z){z===h||!y||(h=z,N.time=ra(E))},get state(){return C},play:D,pause:()=>{C="paused",x=E},stop:()=>{p=!0,C!=="idle"&&(C="idle",c&&c(),F())},cancel:()=>{A!==null&&P(A),F()},complete:()=>{C="finished"},sample:z=>(k=0,P(z))};return N}function WAe(e){let t;return()=>(t===void 0&&(t=e()),t)}const qAe=WAe(()=>Object.hasOwnProperty.call(Element.prototype,"animate")),KAe=new Set(["opacity","clipPath","filter","transform","backgroundColor"]),py=10,XAe=2e4,QAe=(e,t)=>t.type==="spring"||e==="backgroundColor"||!RU(t.ease);function YAe(e,t,{onUpdate:n,onComplete:r,...i}){if(!(qAe()&&KAe.has(t)&&!i.repeatDelay&&i.repeatType!=="mirror"&&i.damping!==0&&i.type!=="inertia"))return!1;let s=!1,a,l;const c=()=>{l=new Promise(y=>{a=y})};c();let{keyframes:u,duration:d=300,ease:f,times:h}=i;if(QAe(t,i)){const y=J1({...i,repeat:0,delay:0});let g={done:!1,value:u[0]};const b=[];let S=0;for(;!g.done&&Sp.cancel(),_=()=>{Pt.update(m),a(),c()};return p.onfinish=()=>{e.set(lAe(u,i)),r&&r(),_()},{then(y,g){return l.then(y,g)},attachTimeline(y){return p.timeline=y,p.onfinish=null,tn},get time(){return ra(p.currentTime||0)},set time(y){p.currentTime=pl(y)},get speed(){return p.playbackRate},set speed(y){p.playbackRate=y},get duration(){return ra(d)},play:()=>{s||(p.play(),pa(m))},pause:()=>p.pause(),stop:()=>{if(s=!0,p.playState==="idle")return;const{currentTime:y}=p;if(y){const g=J1({...i,autoplay:!1});e.setWithVelocity(g.sample(y-py).value,g.sample(y).value,py)}_()},complete:()=>p.finish(),cancel:_}}function ZAe({keyframes:e,delay:t,onUpdate:n,onComplete:r}){const i=()=>(n&&n(e[e.length-1]),r&&r(),{time:0,speed:1,duration:0,play:tn,pause:tn,stop:tn,then:o=>(o(),Promise.resolve()),cancel:tn,complete:tn});return t?J1({keyframes:[0,1],duration:0,delay:t,onComplete:i}):i()}const JAe={type:"spring",stiffness:500,damping:25,restSpeed:10},eke=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),tke={type:"keyframes",duration:.8},nke={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},rke=(e,{keyframes:t})=>t.length>2?tke:du.has(e)?e.startsWith("scale")?eke(t[1]):JAe:nke,F3=(e,t)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&(Tl.test(t)||t==="0")&&!t.startsWith("url(")),ike=new Set(["brightness","contrast","saturate","opacity"]);function oke(e){const[t,n]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[r]=n.match($S)||[];if(!r)return e;const i=n.replace(r,"");let o=ike.has(t)?1:0;return r!==n&&(o*=100),t+"("+o+i+")"}const ske=/([a-z-]*)\(.*?\)/g,D3={...Tl,getAnimatableNone:e=>{const t=e.match(ske);return t?t.map(oke).join(" "):e}},ake={...gU,color:Mr,backgroundColor:Mr,outlineColor:Mr,fill:Mr,stroke:Mr,borderColor:Mr,borderTopColor:Mr,borderRightColor:Mr,borderBottomColor:Mr,borderLeftColor:Mr,filter:D3,WebkitFilter:D3},CA=e=>ake[e];function nG(e,t){let n=CA(e);return n!==D3&&(n=Tl),n.getAnimatableNone?n.getAnimatableNone(t):void 0}const rG=e=>/^0[^.\s]+$/.test(e);function lke(e){if(typeof e=="number")return e===0;if(e!==null)return e==="none"||e==="0"||rG(e)}function cke(e,t,n,r){const i=F3(t,n);let o;Array.isArray(n)?o=[...n]:o=[null,n];const s=r.from!==void 0?r.from:e.get();let a;const l=[];for(let c=0;ci=>{const o=EA(r,e)||{},s=o.delay||r.delay||0;let{elapsed:a=0}=r;a=a-pl(s);const l=cke(t,e,n,o),c=l[0],u=l[l.length-1],d=F3(e,c),f=F3(e,u);let h={keyframes:l,velocity:t.getVelocity(),ease:"easeOut",...o,delay:-a,onUpdate:p=>{t.set(p),o.onUpdate&&o.onUpdate(p)},onComplete:()=>{i(),o.onComplete&&o.onComplete()}};if(uke(o)||(h={...h,...rke(e,h)}),h.duration&&(h.duration=pl(h.duration)),h.repeatDelay&&(h.repeatDelay=pl(h.repeatDelay)),!d||!f||sAe.current||o.type===!1)return ZAe(h);if(t.owner&&t.owner.current instanceof HTMLElement&&!t.owner.getProps().onUpdate){const p=YAe(t,e,h);if(p)return p}return J1(h)};function eb(e){return!!(ri(e)&&e.add)}const iG=e=>/^\-?\d*\.?\d+$/.test(e);function AA(e,t){e.indexOf(t)===-1&&e.push(t)}function kA(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}class PA{constructor(){this.subscriptions=[]}add(t){return AA(this.subscriptions,t),()=>kA(this.subscriptions,t)}notify(t,n,r){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](t,n,r);else for(let o=0;o!isNaN(parseFloat(e));class fke{constructor(t,n={}){this.version="10.16.15",this.timeDelta=0,this.lastUpdated=0,this.canTrackVelocity=!1,this.events={},this.updateAndNotify=(r,i=!0)=>{this.prev=this.current,this.current=r;const{delta:o,timestamp:s}=$n;this.lastUpdated!==s&&(this.timeDelta=o,this.lastUpdated=s,Pt.postRender(this.scheduleVelocityCheck)),this.prev!==this.current&&this.events.change&&this.events.change.notify(this.current),this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()),i&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.scheduleVelocityCheck=()=>Pt.postRender(this.velocityCheck),this.velocityCheck=({timestamp:r})=>{r!==this.lastUpdated&&(this.prev=this.current,this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=dke(this.current),this.owner=n.owner}onChange(t){return this.on("change",t)}on(t,n){this.events[t]||(this.events[t]=new PA);const r=this.events[t].add(n);return t==="change"?()=>{r(),Pt.read(()=>{this.events.change.getSize()||this.stop()})}:r}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,n){this.passiveEffect=t,this.stopPassiveEffect=n}set(t,n=!0){!n||!this.passiveEffect?this.updateAndNotify(t,n):this.passiveEffect(t,this.updateAndNotify)}setWithVelocity(t,n,r){this.set(n),this.prev=t,this.timeDelta=r}jump(t){this.updateAndNotify(t),this.prev=t,this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return this.current}getPrevious(){return this.prev}getVelocity(){return this.canTrackVelocity?JU(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0}start(t){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=t(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function _f(e,t){return new fke(e,t)}const oG=e=>t=>t.test(e),hke={test:e=>e==="auto",parse:e=>e},sG=[fu,Pe,bs,Na,STe,_Te,hke],Ch=e=>sG.find(oG(e)),pke=[...sG,Mr,Tl],gke=e=>pke.find(oG(e));function mke(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,_f(n))}function yke(e,t){const n=FS(e,t);let{transitionEnd:r={},transition:i={},...o}=n?e.makeTargetAnimatable(n,!1):{};o={...o,...r};for(const s in o){const a=NTe(o[s]);mke(e,s,a)}}function vke(e,t,n){var r,i;const o=Object.keys(t).filter(a=>!e.hasValue(a)),s=o.length;if(s)for(let a=0;al.remove(d))),c.push(v)}return s&&Promise.all(c).then(()=>{s&&yke(e,s)}),c}function L3(e,t,n={}){const r=FS(e,t,n.custom);let{transition:i=e.getDefaultTransition()||{}}=r||{};n.transitionOverride&&(i=n.transitionOverride);const o=r?()=>Promise.all(aG(e,r,n)):()=>Promise.resolve(),s=e.variantChildren&&e.variantChildren.size?(l=0)=>{const{delayChildren:c=0,staggerChildren:u,staggerDirection:d}=i;return wke(e,t,c+l,u,d,n)}:()=>Promise.resolve(),{when:a}=i;if(a){const[l,c]=a==="beforeChildren"?[o,s]:[s,o];return l().then(()=>c())}else return Promise.all([o(),s(n.delay)])}function wke(e,t,n=0,r=0,i=1,o){const s=[],a=(e.variantChildren.size-1)*r,l=i===1?(c=0)=>c*r:(c=0)=>a-c*r;return Array.from(e.variantChildren).sort(Cke).forEach((c,u)=>{c.notify("AnimationStart",t),s.push(L3(c,t,{...o,delay:n+l(u)}).then(()=>c.notify("AnimationComplete",t)))}),Promise.all(s)}function Cke(e,t){return e.sortNodePosition(t)}function Eke(e,t,n={}){e.notify("AnimationStart",t);let r;if(Array.isArray(t)){const i=t.map(o=>L3(e,o,n));r=Promise.all(i)}else if(typeof t=="string")r=L3(e,t,n);else{const i=typeof t=="function"?FS(e,t,n.custom):t;r=Promise.all(aG(e,i,n))}return r.then(()=>e.notify("AnimationComplete",t))}const Tke=[...uA].reverse(),Ake=uA.length;function kke(e){return t=>Promise.all(t.map(({animation:n,options:r})=>Eke(e,n,r)))}function Pke(e){let t=kke(e);const n=Mke();let r=!0;const i=(l,c)=>{const u=FS(e,c);if(u){const{transition:d,transitionEnd:f,...h}=u;l={...l,...h,...f}}return l};function o(l){t=l(e)}function s(l,c){const u=e.getProps(),d=e.getVariantContext(!0)||{},f=[],h=new Set;let p={},m=1/0;for(let v=0;vm&&S;const A=Array.isArray(b)?b:[b];let R=A.reduce(i,{});w===!1&&(R={});const{prevResolvedValues:L={}}=g,M={...L,...R},E=P=>{k=!0,h.delete(P),g.needsAnimating[P]=!0};for(const P in M){const O=R[P],F=L[P];p.hasOwnProperty(P)||(O!==F?Q1(O)&&Q1(F)?!IU(O,F)||x?E(P):g.protectedKeys[P]=!0:O!==void 0?E(P):h.add(P):O!==void 0&&h.has(P)?E(P):g.protectedKeys[P]=!0)}g.prevProp=b,g.prevResolvedValues=R,g.isActive&&(p={...p,...R}),r&&e.blockInitialAnimation&&(k=!1),k&&!C&&f.push(...A.map(P=>({animation:P,options:{type:y,...l}})))}if(h.size){const v={};h.forEach(y=>{const g=e.getBaseTarget(y);g!==void 0&&(v[y]=g)}),f.push({animation:v})}let _=!!f.length;return r&&(u.initial===!1||u.initial===u.animate)&&!e.manuallyAnimateOnMount&&(_=!1),r=!1,_?t(f):Promise.resolve()}function a(l,c,u){var d;if(n[l].isActive===c)return Promise.resolve();(d=e.variantChildren)===null||d===void 0||d.forEach(h=>{var p;return(p=h.animationState)===null||p===void 0?void 0:p.setActive(l,c)}),n[l].isActive=c;const f=s(u,l);for(const h in n)n[h].protectedKeys={};return f}return{animateChanges:s,setActive:a,setAnimateFunction:o,getState:()=>n}}function Ike(e,t){return typeof t=="string"?t!==e:Array.isArray(t)?!IU(t,e):!1}function Zl(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function Mke(){return{animate:Zl(!0),whileInView:Zl(),whileHover:Zl(),whileTap:Zl(),whileDrag:Zl(),whileFocus:Zl(),exit:Zl()}}class Rke extends Ll{constructor(t){super(t),t.animationState||(t.animationState=Pke(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();this.unmount(),RS(t)&&(this.unmount=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:n}=this.node.prevProps||{};t!==n&&this.updateAnimationControlsSubscription()}unmount(){}}let Oke=0;class $ke extends Ll{constructor(){super(...arguments),this.id=Oke++}update(){if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:n,custom:r}=this.node.presenceContext,{isPresent:i}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===i)return;const o=this.node.animationState.setActive("exit",!t,{custom:r??this.node.getProps().custom});n&&!t&&o.then(()=>n(this.id))}mount(){const{register:t}=this.node.presenceContext||{};t&&(this.unmount=t(this.id))}unmount(){}}const Nke={animation:{Feature:Rke},exit:{Feature:$ke}},_9=(e,t)=>Math.abs(e-t);function Fke(e,t){const n=_9(e.x,t.x),r=_9(e.y,t.y);return Math.sqrt(n**2+r**2)}class lG{constructor(t,n,{transformPagePoint:r,contextWindow:i}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const u=Xw(this.lastMoveEventInfo,this.history),d=this.startEvent!==null,f=Fke(u.offset,{x:0,y:0})>=3;if(!d&&!f)return;const{point:h}=u,{timestamp:p}=$n;this.history.push({...h,timestamp:p});const{onStart:m,onMove:_}=this.handlers;d||(m&&m(this.lastMoveEvent,u),this.startEvent=this.lastMoveEvent),_&&_(this.lastMoveEvent,u)},this.handlePointerMove=(u,d)=>{this.lastMoveEvent=u,this.lastMoveEventInfo=Kw(d,this.transformPagePoint),Pt.update(this.updatePoint,!0)},this.handlePointerUp=(u,d)=>{if(this.end(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const{onEnd:f,onSessionEnd:h}=this.handlers,p=Xw(u.type==="pointercancel"?this.lastMoveEventInfo:Kw(d,this.transformPagePoint),this.history);this.startEvent&&f&&f(u,p),h&&h(u,p)},!EU(t))return;this.handlers=n,this.transformPagePoint=r,this.contextWindow=i||window;const o=NS(t),s=Kw(o,this.transformPagePoint),{point:a}=s,{timestamp:l}=$n;this.history=[{...a,timestamp:l}];const{onSessionStart:c}=n;c&&c(t,Xw(s,this.history)),this.removeListeners=hl(na(this.contextWindow,"pointermove",this.handlePointerMove),na(this.contextWindow,"pointerup",this.handlePointerUp),na(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),pa(this.updatePoint)}}function Kw(e,t){return t?{point:t(e.point)}:e}function S9(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Xw({point:e},t){return{point:e,delta:S9(e,cG(t)),offset:S9(e,Dke(t)),velocity:Lke(t,.1)}}function Dke(e){return e[0]}function cG(e){return e[e.length-1]}function Lke(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const i=cG(e);for(;n>=0&&(r=e[n],!(i.timestamp-r.timestamp>pl(t)));)n--;if(!r)return{x:0,y:0};const o=ra(i.timestamp-r.timestamp);if(o===0)return{x:0,y:0};const s={x:(i.x-r.x)/o,y:(i.y-r.y)/o};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}function Ai(e){return e.max-e.min}function B3(e,t=0,n=.01){return Math.abs(e-t)<=n}function x9(e,t,n,r=.5){e.origin=r,e.originPoint=Wt(t.min,t.max,e.origin),e.scale=Ai(n)/Ai(t),(B3(e.scale,1,1e-4)||isNaN(e.scale))&&(e.scale=1),e.translate=Wt(n.min,n.max,e.origin)-e.originPoint,(B3(e.translate)||isNaN(e.translate))&&(e.translate=0)}function Ap(e,t,n,r){x9(e.x,t.x,n.x,r?r.originX:void 0),x9(e.y,t.y,n.y,r?r.originY:void 0)}function w9(e,t,n){e.min=n.min+t.min,e.max=e.min+Ai(t)}function Bke(e,t,n){w9(e.x,t.x,n.x),w9(e.y,t.y,n.y)}function C9(e,t,n){e.min=t.min-n.min,e.max=e.min+Ai(t)}function kp(e,t,n){C9(e.x,t.x,n.x),C9(e.y,t.y,n.y)}function zke(e,{min:t,max:n},r){return t!==void 0&&en&&(e=r?Wt(n,e,r.max):Math.min(e,n)),e}function E9(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function jke(e,{top:t,left:n,bottom:r,right:i}){return{x:E9(e.x,n,i),y:E9(e.y,t,r)}}function T9(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.minr?n=Vg(t.min,t.max-r,e.min):r>i&&(n=Vg(e.min,e.max-i,t.min)),El(0,1,n)}function Gke(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}const z3=.35;function Hke(e=z3){return e===!1?e=0:e===!0&&(e=z3),{x:A9(e,"left","right"),y:A9(e,"top","bottom")}}function A9(e,t,n){return{min:k9(e,t),max:k9(e,n)}}function k9(e,t){return typeof e=="number"?e:e[t]||0}const P9=()=>({translate:0,scale:1,origin:0,originPoint:0}),vd=()=>({x:P9(),y:P9()}),I9=()=>({min:0,max:0}),gn=()=>({x:I9(),y:I9()});function Yo(e){return[e("x"),e("y")]}function uG({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function Wke({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function qke(e,t){if(!t)return e;const n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function Qw(e){return e===void 0||e===1}function j3({scale:e,scaleX:t,scaleY:n}){return!Qw(e)||!Qw(t)||!Qw(n)}function cc(e){return j3(e)||dG(e)||e.z||e.rotate||e.rotateX||e.rotateY}function dG(e){return M9(e.x)||M9(e.y)}function M9(e){return e&&e!=="0%"}function tb(e,t,n){const r=e-n,i=t*r;return n+i}function R9(e,t,n,r,i){return i!==void 0&&(e=tb(e,i,r)),tb(e,n,r)+t}function V3(e,t=0,n=1,r,i){e.min=R9(e.min,t,n,r,i),e.max=R9(e.max,t,n,r,i)}function fG(e,{x:t,y:n}){V3(e.x,t.translate,t.scale,t.originPoint),V3(e.y,n.translate,n.scale,n.originPoint)}function Kke(e,t,n,r=!1){const i=n.length;if(!i)return;t.x=t.y=1;let o,s;for(let a=0;a1.0000000000001||e<.999999999999?e:1}function Va(e,t){e.min=e.min+t,e.max=e.max+t}function $9(e,t,[n,r,i]){const o=t[i]!==void 0?t[i]:.5,s=Wt(e.min,e.max,o);V3(e,t[n],t[r],s,t.scale)}const Xke=["x","scaleX","originX"],Qke=["y","scaleY","originY"];function bd(e,t){$9(e.x,t,Xke),$9(e.y,t,Qke)}function hG(e,t){return uG(qke(e.getBoundingClientRect(),t))}function Yke(e,t,n){const r=hG(e,n),{scroll:i}=t;return i&&(Va(r.x,i.offset.x),Va(r.y,i.offset.y)),r}const pG=({current:e})=>e?e.ownerDocument.defaultView:null,Zke=new WeakMap;class Jke{constructor(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=gn(),this.visualElement=t}start(t,{snapToCursor:n=!1}={}){const{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;const i=l=>{this.stopAnimation(),n&&this.snapToCursor(NS(l,"page").point)},o=(l,c)=>{const{drag:u,dragPropagation:d,onDragStart:f}=this.getProps();if(u&&!d&&(this.openGlobalLock&&this.openGlobalLock(),this.openGlobalLock=AU(u),!this.openGlobalLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),Yo(p=>{let m=this.getAxisMotionValue(p).get()||0;if(bs.test(m)){const{projection:_}=this.visualElement;if(_&&_.layout){const v=_.layout.layoutBox[p];v&&(m=Ai(v)*(parseFloat(m)/100))}}this.originPoint[p]=m}),f&&Pt.update(()=>f(l,c),!1,!0);const{animationState:h}=this.visualElement;h&&h.setActive("whileDrag",!0)},s=(l,c)=>{const{dragPropagation:u,dragDirectionLock:d,onDirectionLock:f,onDrag:h}=this.getProps();if(!u&&!this.openGlobalLock)return;const{offset:p}=c;if(d&&this.currentDirection===null){this.currentDirection=ePe(p),this.currentDirection!==null&&f&&f(this.currentDirection);return}this.updateAxis("x",c.point,p),this.updateAxis("y",c.point,p),this.visualElement.render(),h&&h(l,c)},a=(l,c)=>this.stop(l,c);this.panSession=new lG(t,{onSessionStart:i,onStart:o,onMove:s,onSessionEnd:a},{transformPagePoint:this.visualElement.getTransformPagePoint(),contextWindow:pG(this.visualElement)})}stop(t,n){const r=this.isDragging;if(this.cancel(),!r)return;const{velocity:i}=n;this.startAnimation(i);const{onDragEnd:o}=this.getProps();o&&Pt.update(()=>o(t,n))}cancel(){this.isDragging=!1;const{projection:t,animationState:n}=this.visualElement;t&&(t.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:r}=this.getProps();!r&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(t,n,r){const{drag:i}=this.getProps();if(!r||!gy(t,i,this.currentDirection))return;const o=this.getAxisMotionValue(t);let s=this.originPoint[t]+r[t];this.constraints&&this.constraints[t]&&(s=zke(s,this.constraints[t],this.elastic[t])),o.set(s)}resolveConstraints(){var t;const{dragConstraints:n,dragElastic:r}=this.getProps(),i=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(t=this.visualElement.projection)===null||t===void 0?void 0:t.layout,o=this.constraints;n&&md(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):n&&i?this.constraints=jke(i.layoutBox,n):this.constraints=!1,this.elastic=Hke(r),o!==this.constraints&&i&&this.constraints&&!this.hasMutatedConstraints&&Yo(s=>{this.getAxisMotionValue(s)&&(this.constraints[s]=Gke(i.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:n}=this.getProps();if(!t||!md(t))return!1;const r=t.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const o=Yke(r,i.root,this.visualElement.getTransformPagePoint());let s=Vke(i.layout.layoutBox,o);if(n){const a=n(Wke(s));this.hasMutatedConstraints=!!a,a&&(s=uG(a))}return s}startAnimation(t){const{drag:n,dragMomentum:r,dragElastic:i,dragTransition:o,dragSnapToOrigin:s,onDragTransitionEnd:a}=this.getProps(),l=this.constraints||{},c=Yo(u=>{if(!gy(u,n,this.currentDirection))return;let d=l&&l[u]||{};s&&(d={min:0,max:0});const f=i?200:1e6,h=i?40:1e7,p={type:"inertia",velocity:r?t[u]:0,bounceStiffness:f,bounceDamping:h,timeConstant:750,restDelta:1,restSpeed:10,...o,...d};return this.startAxisValueAnimation(u,p)});return Promise.all(c).then(a)}startAxisValueAnimation(t,n){const r=this.getAxisMotionValue(t);return r.start(TA(t,r,0,n))}stopAnimation(){Yo(t=>this.getAxisMotionValue(t).stop())}getAxisMotionValue(t){const n="_drag"+t.toUpperCase(),r=this.visualElement.getProps(),i=r[n];return i||this.visualElement.getValue(t,(r.initial?r.initial[t]:void 0)||0)}snapToCursor(t){Yo(n=>{const{drag:r}=this.getProps();if(!gy(n,r,this.currentDirection))return;const{projection:i}=this.visualElement,o=this.getAxisMotionValue(n);if(i&&i.layout){const{min:s,max:a}=i.layout.layoutBox[n];o.set(t[n]-Wt(s,a,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:n}=this.getProps(),{projection:r}=this.visualElement;if(!md(n)||!r||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};Yo(s=>{const a=this.getAxisMotionValue(s);if(a){const l=a.get();i[s]=Uke({min:l,max:l},this.constraints[s])}});const{transformTemplate:o}=this.visualElement.getProps();this.visualElement.current.style.transform=o?o({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.resolveConstraints(),Yo(s=>{if(!gy(s,t,null))return;const a=this.getAxisMotionValue(s),{min:l,max:c}=this.constraints[s];a.set(Wt(l,c,i[s]))})}addListeners(){if(!this.visualElement.current)return;Zke.set(this.visualElement,this);const t=this.visualElement.current,n=na(t,"pointerdown",l=>{const{drag:c,dragListener:u=!0}=this.getProps();c&&u&&this.start(l)}),r=()=>{const{dragConstraints:l}=this.getProps();md(l)&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,o=i.addEventListener("measure",r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),r();const s=Ys(window,"resize",()=>this.scalePositionWithinConstraints()),a=i.addEventListener("didUpdate",({delta:l,hasLayoutChanged:c})=>{this.isDragging&&c&&(Yo(u=>{const d=this.getAxisMotionValue(u);d&&(this.originPoint[u]+=l[u].translate,d.set(d.get()+l[u].translate))}),this.visualElement.render())});return()=>{s(),n(),o(),a&&a()}}getProps(){const t=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:r=!1,dragPropagation:i=!1,dragConstraints:o=!1,dragElastic:s=z3,dragMomentum:a=!0}=t;return{...t,drag:n,dragDirectionLock:r,dragPropagation:i,dragConstraints:o,dragElastic:s,dragMomentum:a}}}function gy(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function ePe(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}class tPe extends Ll{constructor(t){super(t),this.removeGroupControls=tn,this.removeListeners=tn,this.controls=new Jke(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||tn}unmount(){this.removeGroupControls(),this.removeListeners()}}const N9=e=>(t,n)=>{e&&Pt.update(()=>e(t,n))};class nPe extends Ll{constructor(){super(...arguments),this.removePointerDownListener=tn}onPointerDown(t){this.session=new lG(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:pG(this.node)})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:n,onPan:r,onPanEnd:i}=this.node.getProps();return{onSessionStart:N9(t),onStart:N9(n),onMove:r,onEnd:(o,s)=>{delete this.session,i&&Pt.update(()=>i(o,s))}}}mount(){this.removePointerDownListener=na(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}function rPe(){const e=I.useContext(Xm);if(e===null)return[!0,null];const{isPresent:t,onExitComplete:n,register:r}=e,i=I.useId();return I.useEffect(()=>r(i),[]),!t&&n?[!1,()=>n&&n(i)]:[!0]}function iPe(){return oPe(I.useContext(Xm))}function oPe(e){return e===null?!0:e.isPresent}const _v={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function F9(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}const Eh={correct:(e,t)=>{if(!t.target)return e;if(typeof e=="string")if(Pe.test(e))e=parseFloat(e);else return e;const n=F9(e,t.target.x),r=F9(e,t.target.y);return`${n}% ${r}%`}},sPe={correct:(e,{treeScale:t,projectionDelta:n})=>{const r=e,i=Tl.parse(e);if(i.length>5)return r;const o=Tl.createTransformer(e),s=typeof i[0]!="number"?1:0,a=n.x.scale*t.x,l=n.y.scale*t.y;i[0+s]/=a,i[1+s]/=l;const c=Wt(a,l,.5);return typeof i[2+s]=="number"&&(i[2+s]/=c),typeof i[3+s]=="number"&&(i[3+s]/=c),o(i)}};class aPe extends Q.Component{componentDidMount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r,layoutId:i}=this.props,{projection:o}=t;hTe(lPe),o&&(n.group&&n.group.add(o),r&&r.register&&i&&r.register(o),o.root.didUpdate(),o.addEventListener("animationComplete",()=>{this.safeToRemove()}),o.setOptions({...o.options,onExitComplete:()=>this.safeToRemove()})),_v.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:n,visualElement:r,drag:i,isPresent:o}=this.props,s=r.projection;return s&&(s.isPresent=o,i||t.layoutDependency!==n||n===void 0?s.willUpdate():this.safeToRemove(),t.isPresent!==o&&(o?s.promote():s.relegate()||Pt.postRender(()=>{const a=s.getStack();(!a||!a.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:t}=this.props.visualElement;t&&(t.root.didUpdate(),queueMicrotask(()=>{!t.currentAnimation&&t.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r}=this.props,{projection:i}=t;i&&(i.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(i),r&&r.deregister&&r.deregister(i))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function gG(e){const[t,n]=rPe(),r=I.useContext(fA);return Q.createElement(aPe,{...e,layoutGroup:r,switchLayoutGroup:I.useContext(uU),isPresent:t,safeToRemove:n})}const lPe={borderRadius:{...Eh,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:Eh,borderTopRightRadius:Eh,borderBottomLeftRadius:Eh,borderBottomRightRadius:Eh,boxShadow:sPe},mG=["TopLeft","TopRight","BottomLeft","BottomRight"],cPe=mG.length,D9=e=>typeof e=="string"?parseFloat(e):e,L9=e=>typeof e=="number"||Pe.test(e);function uPe(e,t,n,r,i,o){i?(e.opacity=Wt(0,n.opacity!==void 0?n.opacity:1,dPe(r)),e.opacityExit=Wt(t.opacity!==void 0?t.opacity:1,0,fPe(r))):o&&(e.opacity=Wt(t.opacity!==void 0?t.opacity:1,n.opacity!==void 0?n.opacity:1,r));for(let s=0;srt?1:n(Vg(e,t,r))}function z9(e,t){e.min=t.min,e.max=t.max}function Li(e,t){z9(e.x,t.x),z9(e.y,t.y)}function j9(e,t,n,r,i){return e-=t,e=tb(e,1/n,r),i!==void 0&&(e=tb(e,1/i,r)),e}function hPe(e,t=0,n=1,r=.5,i,o=e,s=e){if(bs.test(t)&&(t=parseFloat(t),t=Wt(s.min,s.max,t/100)-s.min),typeof t!="number")return;let a=Wt(o.min,o.max,r);e===o&&(a-=t),e.min=j9(e.min,t,n,a,i),e.max=j9(e.max,t,n,a,i)}function V9(e,t,[n,r,i],o,s){hPe(e,t[n],t[r],t[i],t.scale,o,s)}const pPe=["x","scaleX","originX"],gPe=["y","scaleY","originY"];function U9(e,t,n,r){V9(e.x,t,pPe,n?n.x:void 0,r?r.x:void 0),V9(e.y,t,gPe,n?n.y:void 0,r?r.y:void 0)}function G9(e){return e.translate===0&&e.scale===1}function vG(e){return G9(e.x)&&G9(e.y)}function mPe(e,t){return e.x.min===t.x.min&&e.x.max===t.x.max&&e.y.min===t.y.min&&e.y.max===t.y.max}function bG(e,t){return Math.round(e.x.min)===Math.round(t.x.min)&&Math.round(e.x.max)===Math.round(t.x.max)&&Math.round(e.y.min)===Math.round(t.y.min)&&Math.round(e.y.max)===Math.round(t.y.max)}function H9(e){return Ai(e.x)/Ai(e.y)}class yPe{constructor(){this.members=[]}add(t){AA(this.members,t),t.scheduleRender()}remove(t){if(kA(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(t){const n=this.members.findIndex(i=>t===i);if(n===0)return!1;let r;for(let i=n;i>=0;i--){const o=this.members[i];if(o.isPresent!==!1){r=o;break}}return r?(this.promote(r),!0):!1}promote(t,n){const r=this.lead;if(t!==r&&(this.prevLead=r,this.lead=t,t.show(),r)){r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,n&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues),t.root&&t.root.isUpdating&&(t.isLayoutDirty=!0);const{crossfade:i}=t.options;i===!1&&r.hide()}}exitAnimationComplete(){this.members.forEach(t=>{const{options:n,resumingFrom:r}=t;n.onExitComplete&&n.onExitComplete(),r&&r.options.onExitComplete&&r.options.onExitComplete()})}scheduleRender(){this.members.forEach(t=>{t.instance&&t.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function W9(e,t,n){let r="";const i=e.x.translate/t.x,o=e.y.translate/t.y;if((i||o)&&(r=`translate3d(${i}px, ${o}px, 0) `),(t.x!==1||t.y!==1)&&(r+=`scale(${1/t.x}, ${1/t.y}) `),n){const{rotate:l,rotateX:c,rotateY:u}=n;l&&(r+=`rotate(${l}deg) `),c&&(r+=`rotateX(${c}deg) `),u&&(r+=`rotateY(${u}deg) `)}const s=e.x.scale*t.x,a=e.y.scale*t.y;return(s!==1||a!==1)&&(r+=`scale(${s}, ${a})`),r||"none"}const vPe=(e,t)=>e.depth-t.depth;class bPe{constructor(){this.children=[],this.isDirty=!1}add(t){AA(this.children,t),this.isDirty=!0}remove(t){kA(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(vPe),this.isDirty=!1,this.children.forEach(t)}}function _Pe(e,t){const n=performance.now(),r=({timestamp:i})=>{const o=i-n;o>=t&&(pa(r),e(o-t))};return Pt.read(r,!0),()=>pa(r)}function SPe(e){window.MotionDebug&&window.MotionDebug.record(e)}function xPe(e){return e instanceof SVGElement&&e.tagName!=="svg"}function wPe(e,t,n){const r=ri(e)?e:_f(e);return r.start(TA("",r,t,n)),r.animation}const q9=["","X","Y","Z"],CPe={visibility:"hidden"},K9=1e3;let EPe=0;const uc={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0};function _G({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(s={},a=t==null?void 0:t()){this.id=EPe++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,uc.totalNodes=uc.resolvedTargetDeltas=uc.recalculatedProjection=0,this.nodes.forEach(kPe),this.nodes.forEach(OPe),this.nodes.forEach($Pe),this.nodes.forEach(PPe),SPe(uc)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=a?a.root||a:this,this.path=a?[...a.path,a]:[],this.parent=a,this.depth=a?a.depth+1:0;for(let l=0;lthis.root.updateBlockedByResize=!1;e(s,()=>{this.root.updateBlockedByResize=!0,d&&d(),d=_Pe(f,250),_v.hasAnimatedSinceResize&&(_v.hasAnimatedSinceResize=!1,this.nodes.forEach(Q9))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&u&&(l||c)&&this.addEventListener("didUpdate",({delta:d,hasLayoutChanged:f,hasRelativeTargetChanged:h,layout:p})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||u.getDefaultTransition()||BPe,{onLayoutAnimationStart:_,onLayoutAnimationComplete:v}=u.getProps(),y=!this.targetLayout||!bG(this.targetLayout,p)||h,g=!f&&h;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||g||f&&(y||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(d,g);const b={...EA(m,"layout"),onPlay:_,onComplete:v};(u.shouldReduceMotion||this.options.layoutRoot)&&(b.delay=0,b.type=!1),this.startAnimation(b)}else f||Q9(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=p})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,pa(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(NPe),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let u=0;uthis.update()))}clearAllSnapshots(){this.nodes.forEach(IPe),this.sharedNodes.forEach(FPe)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,Pt.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){Pt.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let l=0;l{const S=b/1e3;Y9(d.x,s.x,S),Y9(d.y,s.y,S),this.setTargetDelta(d),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(kp(f,this.layout.layoutBox,this.relativeParent.layout.layoutBox),DPe(this.relativeTarget,this.relativeTargetOrigin,f,S),g&&mPe(this.relativeTarget,g)&&(this.isProjectionDirty=!1),g||(g=gn()),Li(g,this.relativeTarget)),m&&(this.animationValues=u,uPe(u,c,this.latestValues,S,y,v)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=S},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&(pa(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Pt.update(()=>{_v.hasAnimatedSinceResize=!0,this.currentAnimation=wPe(0,K9,{...s,onUpdate:a=>{this.mixTargetDelta(a),s.onUpdate&&s.onUpdate(a)},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(K9),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:a,target:l,layout:c,latestValues:u}=s;if(!(!a||!l||!c)){if(this!==s&&this.layout&&c&&SG(this.options.animationType,this.layout.layoutBox,c.layoutBox)){l=this.target||gn();const d=Ai(this.layout.layoutBox.x);l.x.min=s.target.x.min,l.x.max=l.x.min+d;const f=Ai(this.layout.layoutBox.y);l.y.min=s.target.y.min,l.y.max=l.y.min+f}Li(a,l),bd(a,u),Ap(this.projectionDeltaWithTransform,this.layoutCorrected,a,u)}}registerSharedNode(s,a){this.sharedNodes.has(s)||this.sharedNodes.set(s,new yPe),this.sharedNodes.get(s).add(a);const c=a.options.initialPromotionConfig;a.promote({transition:c?c.transition:void 0,preserveFollowOpacity:c&&c.shouldPreserveFollowOpacity?c.shouldPreserveFollowOpacity(a):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var s;const{layoutId:a}=this.options;return a?((s=this.getStack())===null||s===void 0?void 0:s.lead)||this:this}getPrevLead(){var s;const{layoutId:a}=this.options;return a?(s=this.getStack())===null||s===void 0?void 0:s.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:a,preserveFollowOpacity:l}={}){const c=this.getStack();c&&c.promote(this,l),s&&(this.projectionDelta=void 0,this.needsReset=!0),a&&this.setOptions({transition:a})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetRotation(){const{visualElement:s}=this.options;if(!s)return;let a=!1;const{latestValues:l}=s;if((l.rotate||l.rotateX||l.rotateY||l.rotateZ)&&(a=!0),!a)return;const c={};for(let u=0;u{var a;return(a=s.currentAnimation)===null||a===void 0?void 0:a.stop()}),this.root.nodes.forEach(X9),this.root.sharedNodes.clear()}}}function TPe(e){e.updateLayout()}function APe(e){var t;const n=((t=e.resumeFrom)===null||t===void 0?void 0:t.snapshot)||e.snapshot;if(e.isLead()&&e.layout&&n&&e.hasListeners("didUpdate")){const{layoutBox:r,measuredBox:i}=e.layout,{animationType:o}=e.options,s=n.source!==e.layout.source;o==="size"?Yo(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Ai(f);f.min=r[d].min,f.max=f.min+h}):SG(o,n.layoutBox,r)&&Yo(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Ai(r[d]);f.max=f.min+h,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[d].max=e.relativeTarget[d].min+h)});const a=vd();Ap(a,r,n.layoutBox);const l=vd();s?Ap(l,e.applyTransform(i,!0),n.measuredBox):Ap(l,r,n.layoutBox);const c=!vG(a);let u=!1;if(!e.resumeFrom){const d=e.getClosestProjectingParent();if(d&&!d.resumeFrom){const{snapshot:f,layout:h}=d;if(f&&h){const p=gn();kp(p,n.layoutBox,f.layoutBox);const m=gn();kp(m,r,h.layoutBox),bG(p,m)||(u=!0),d.options.layoutRoot&&(e.relativeTarget=m,e.relativeTargetOrigin=p,e.relativeParent=d)}}}e.notifyListeners("didUpdate",{layout:r,snapshot:n,delta:l,layoutDelta:a,hasLayoutChanged:c,hasRelativeTargetChanged:u})}else if(e.isLead()){const{onExitComplete:r}=e.options;r&&r()}e.options.transition=void 0}function kPe(e){uc.totalNodes++,e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function PPe(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function IPe(e){e.clearSnapshot()}function X9(e){e.clearMeasurements()}function MPe(e){e.isLayoutDirty=!1}function RPe(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function Q9(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function OPe(e){e.resolveTargetDelta()}function $Pe(e){e.calcProjection()}function NPe(e){e.resetRotation()}function FPe(e){e.removeLeadSnapshot()}function Y9(e,t,n){e.translate=Wt(t.translate,0,n),e.scale=Wt(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function Z9(e,t,n,r){e.min=Wt(t.min,n.min,r),e.max=Wt(t.max,n.max,r)}function DPe(e,t,n,r){Z9(e.x,t.x,n.x,r),Z9(e.y,t.y,n.y,r)}function LPe(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const BPe={duration:.45,ease:[.4,0,.1,1]},J9=e=>typeof navigator<"u"&&navigator.userAgent.toLowerCase().includes(e),eR=J9("applewebkit/")&&!J9("chrome/")?Math.round:tn;function tR(e){e.min=eR(e.min),e.max=eR(e.max)}function zPe(e){tR(e.x),tR(e.y)}function SG(e,t,n){return e==="position"||e==="preserve-aspect"&&!B3(H9(t),H9(n),.2)}const jPe=_G({attachResizeListener:(e,t)=>Ys(e,"resize",t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),Yw={current:void 0},xG=_G({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!Yw.current){const e=new jPe({});e.mount(window),e.setOptions({layoutScroll:!0}),Yw.current=e}return Yw.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),VPe={pan:{Feature:nPe},drag:{Feature:tPe,ProjectionNode:xG,MeasureLayout:gG}},UPe=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;function GPe(e){const t=UPe.exec(e);if(!t)return[,];const[,n,r]=t;return[n,r]}function U3(e,t,n=1){const[r,i]=GPe(e);if(!r)return;const o=window.getComputedStyle(t).getPropertyValue(r);if(o){const s=o.trim();return iG(s)?parseFloat(s):s}else return R3(i)?U3(i,t,n+1):i}function HPe(e,{...t},n){const r=e.current;if(!(r instanceof Element))return{target:t,transitionEnd:n};n&&(n={...n}),e.values.forEach(i=>{const o=i.get();if(!R3(o))return;const s=U3(o,r);s&&i.set(s)});for(const i in t){const o=t[i];if(!R3(o))continue;const s=U3(o,r);s&&(t[i]=s,n||(n={}),n[i]===void 0&&(n[i]=o))}return{target:t,transitionEnd:n}}const WPe=new Set(["width","height","top","left","right","bottom","x","y","translateX","translateY"]),wG=e=>WPe.has(e),qPe=e=>Object.keys(e).some(wG),nR=e=>e===fu||e===Pe,rR=(e,t)=>parseFloat(e.split(", ")[t]),iR=(e,t)=>(n,{transform:r})=>{if(r==="none"||!r)return 0;const i=r.match(/^matrix3d\((.+)\)$/);if(i)return rR(i[1],t);{const o=r.match(/^matrix\((.+)\)$/);return o?rR(o[1],e):0}},KPe=new Set(["x","y","z"]),XPe=Qm.filter(e=>!KPe.has(e));function QPe(e){const t=[];return XPe.forEach(n=>{const r=e.getValue(n);r!==void 0&&(t.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))}),t.length&&e.render(),t}const Sf={width:({x:e},{paddingLeft:t="0",paddingRight:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),height:({y:e},{paddingTop:t="0",paddingBottom:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:iR(4,13),y:iR(5,14)};Sf.translateX=Sf.x;Sf.translateY=Sf.y;const YPe=(e,t,n)=>{const r=t.measureViewportBox(),i=t.current,o=getComputedStyle(i),{display:s}=o,a={};s==="none"&&t.setStaticValue("display",e.display||"block"),n.forEach(c=>{a[c]=Sf[c](r,o)}),t.render();const l=t.measureViewportBox();return n.forEach(c=>{const u=t.getValue(c);u&&u.jump(a[c]),e[c]=Sf[c](l,o)}),e},ZPe=(e,t,n={},r={})=>{t={...t},r={...r};const i=Object.keys(t).filter(wG);let o=[],s=!1;const a=[];if(i.forEach(l=>{const c=e.getValue(l);if(!e.hasValue(l))return;let u=n[l],d=Ch(u);const f=t[l];let h;if(Q1(f)){const p=f.length,m=f[0]===null?1:0;u=f[m],d=Ch(u);for(let _=m;_=0?window.pageYOffset:null,c=YPe(t,e,a);return o.length&&o.forEach(([u,d])=>{e.getValue(u).set(d)}),e.render(),MS&&l!==null&&window.scrollTo({top:l}),{target:c,transitionEnd:r}}else return{target:t,transitionEnd:r}};function JPe(e,t,n,r){return qPe(t)?ZPe(e,t,n,r):{target:t,transitionEnd:r}}const e6e=(e,t,n,r)=>{const i=HPe(e,t,r);return t=i.target,r=i.transitionEnd,JPe(e,t,n,r)},G3={current:null},CG={current:!1};function t6e(){if(CG.current=!0,!!MS)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>G3.current=e.matches;e.addListener(t),t()}else G3.current=!1}function n6e(e,t,n){const{willChange:r}=t;for(const i in t){const o=t[i],s=n[i];if(ri(o))e.addValue(i,o),eb(r)&&r.add(i);else if(ri(s))e.addValue(i,_f(o,{owner:e})),eb(r)&&r.remove(i);else if(s!==o)if(e.hasValue(i)){const a=e.getValue(i);!a.hasAnimated&&a.set(o)}else{const a=e.getStaticValue(i);e.addValue(i,_f(a!==void 0?a:o,{owner:e}))}}for(const i in n)t[i]===void 0&&e.removeValue(i);return t}const oR=new WeakMap,EG=Object.keys(jg),r6e=EG.length,sR=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"],i6e=dA.length;class o6e{constructor({parent:t,props:n,presenceContext:r,reducedMotionConfig:i,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.scheduleRender=()=>Pt.render(this.render,!1,!0);const{latestValues:a,renderState:l}=o;this.latestValues=a,this.baseTarget={...a},this.initialValues=n.initial?{...a}:{},this.renderState=l,this.parent=t,this.props=n,this.presenceContext=r,this.depth=t?t.depth+1:0,this.reducedMotionConfig=i,this.options=s,this.isControllingVariants=OS(n),this.isVariantNode=cU(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(t&&t.current);const{willChange:c,...u}=this.scrapeMotionValuesFromProps(n,{});for(const d in u){const f=u[d];a[d]!==void 0&&ri(f)&&(f.set(a[d],!1),eb(c)&&c.add(d))}}scrapeMotionValuesFromProps(t,n){return{}}mount(t){this.current=t,oR.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,r)=>this.bindToMotionValue(r,n)),CG.current||t6e(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:G3.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){oR.delete(this.current),this.projection&&this.projection.unmount(),pa(this.notifyUpdate),pa(this.render),this.valueSubscriptions.forEach(t=>t()),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const t in this.events)this.events[t].clear();for(const t in this.features)this.features[t].unmount();this.current=null}bindToMotionValue(t,n){const r=du.has(t),i=n.on("change",s=>{this.latestValues[t]=s,this.props.onUpdate&&Pt.update(this.notifyUpdate,!1,!0),r&&this.projection&&(this.projection.isTransformDirty=!0)}),o=n.on("renderRequest",this.scheduleRender);this.valueSubscriptions.set(t,()=>{i(),o()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}loadFeatures({children:t,...n},r,i,o){let s,a;for(let l=0;lthis.scheduleRender(),animationType:typeof c=="string"?c:"both",initialPromotionConfig:o,layoutScroll:f,layoutRoot:h})}return a}updateFeatures(){for(const t in this.features){const n=this.features[t];n.isMounted?n.update():(n.mount(),n.isMounted=!0)}}triggerBuild(){this.build(this.renderState,this.latestValues,this.options,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):gn()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,n){this.latestValues[t]=n}makeTargetAnimatable(t,n=!0){return this.makeTargetAnimatableFromInstance(t,this.props,n)}update(t,n){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let r=0;rn.variantChildren.delete(t)}addValue(t,n){n!==this.values.get(t)&&(this.removeValue(t),this.bindToMotionValue(t,n)),this.values.set(t,n),this.latestValues[t]=n.get()}removeValue(t){this.values.delete(t);const n=this.valueSubscriptions.get(t);n&&(n(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,n){if(this.props.values&&this.props.values[t])return this.props.values[t];let r=this.values.get(t);return r===void 0&&n!==void 0&&(r=_f(n,{owner:this}),this.addValue(t,r)),r}readValue(t){var n;return this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:(n=this.getBaseTargetFromProps(this.props,t))!==null&&n!==void 0?n:this.readValueFromInstance(this.current,t,this.options)}setBaseTarget(t,n){this.baseTarget[t]=n}getBaseTarget(t){var n;const{initial:r}=this.props,i=typeof r=="string"||typeof r=="object"?(n=bA(this.props,r))===null||n===void 0?void 0:n[t]:void 0;if(r&&i!==void 0)return i;const o=this.getBaseTargetFromProps(this.props,t);return o!==void 0&&!ri(o)?o:this.initialValues[t]!==void 0&&i===void 0?void 0:this.baseTarget[t]}on(t,n){return this.events[t]||(this.events[t]=new PA),this.events[t].add(n)}notify(t,...n){this.events[t]&&this.events[t].notify(...n)}}class TG extends o6e{sortInstanceNodePosition(t,n){return t.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(t,n){return t.style?t.style[n]:void 0}removeValueFromRenderState(t,{vars:n,style:r}){delete n[t],delete r[t]}makeTargetAnimatableFromInstance({transition:t,transitionEnd:n,...r},{transformValues:i},o){let s=_ke(r,t||{},this);if(i&&(n&&(n=i(n)),r&&(r=i(r)),s&&(s=i(s))),o){vke(this,r,s);const a=e6e(this,r,s,n);n=a.transitionEnd,r=a.target}return{transition:t,transitionEnd:n,...r}}}function s6e(e){return window.getComputedStyle(e)}class a6e extends TG{readValueFromInstance(t,n){if(du.has(n)){const r=CA(n);return r&&r.default||0}else{const r=s6e(t),i=(hU(n)?r.getPropertyValue(n):r[n])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(t,{transformPagePoint:n}){return hG(t,n)}build(t,n,r,i){pA(t,n,r,i.transformTemplate)}scrapeMotionValuesFromProps(t,n){return vA(t,n)}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;ri(t)&&(this.childSubscription=t.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}renderInstance(t,n,r,i){bU(t,n,r,i)}}class l6e extends TG{constructor(){super(...arguments),this.isSVGTag=!1}getBaseTargetFromProps(t,n){return t[n]}readValueFromInstance(t,n){if(du.has(n)){const r=CA(n);return r&&r.default||0}return n=_U.has(n)?n:cA(n),t.getAttribute(n)}measureInstanceViewportBox(){return gn()}scrapeMotionValuesFromProps(t,n){return xU(t,n)}build(t,n,r,i){mA(t,n,r,this.isSVGTag,i.transformTemplate)}renderInstance(t,n,r,i){SU(t,n,r,i)}mount(t){this.isSVGTag=yA(t.tagName),super.mount(t)}}const c6e=(e,t)=>hA(e)?new l6e(t,{enableHardwareAcceleration:!1}):new a6e(t,{enableHardwareAcceleration:!0}),u6e={layout:{ProjectionNode:xG,MeasureLayout:gG}},d6e={...Nke,...nAe,...VPe,...u6e},AG=dTe((e,t)=>UTe(e,t,d6e,c6e));function kG(){const e=I.useRef(!1);return lA(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function f6e(){const e=kG(),[t,n]=I.useState(0),r=I.useCallback(()=>{e.current&&n(t+1)},[t]);return[I.useCallback(()=>Pt.postRender(r),[r]),t]}class h6e extends I.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(n&&t.isPresent&&!this.props.isPresent){const r=this.props.sizeRef.current;r.height=n.offsetHeight||0,r.width=n.offsetWidth||0,r.top=n.offsetTop,r.left=n.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function p6e({children:e,isPresent:t}){const n=I.useId(),r=I.useRef(null),i=I.useRef({width:0,height:0,top:0,left:0});return I.useInsertionEffect(()=>{const{width:o,height:s,top:a,left:l}=i.current;if(t||!r.current||!o||!s)return;r.current.dataset.motionPopId=n;const c=document.createElement("style");return document.head.appendChild(c),c.sheet&&c.sheet.insertRule(` + [data-motion-pop-id="${n}"] { + position: absolute !important; + width: ${o}px !important; + height: ${s}px !important; + top: ${a}px !important; + left: ${l}px !important; + } + `),()=>{document.head.removeChild(c)}},[t]),I.createElement(h6e,{isPresent:t,childRef:r,sizeRef:i},I.cloneElement(e,{ref:r}))}const Zw=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:o,mode:s})=>{const a=wU(g6e),l=I.useId(),c=I.useMemo(()=>({id:l,initial:t,isPresent:n,custom:i,onExitComplete:u=>{a.set(u,!0);for(const d of a.values())if(!d)return;r&&r()},register:u=>(a.set(u,!1),()=>a.delete(u))}),o?void 0:[n]);return I.useMemo(()=>{a.forEach((u,d)=>a.set(d,!1))},[n]),I.useEffect(()=>{!n&&!a.size&&r&&r()},[n]),s==="popLayout"&&(e=I.createElement(p6e,{isPresent:n},e)),I.createElement(Xm.Provider,{value:c},e)};function g6e(){return new Map}function m6e(e){return I.useEffect(()=>()=>e(),[])}const dc=e=>e.key||"";function y6e(e,t){e.forEach(n=>{const r=dc(n);t.set(r,n)})}function v6e(e){const t=[];return I.Children.forEach(e,n=>{I.isValidElement(n)&&t.push(n)}),t}const PG=({children:e,custom:t,initial:n=!0,onExitComplete:r,exitBeforeEnter:i,presenceAffectsLayout:o=!0,mode:s="sync"})=>{const a=I.useContext(fA).forceRender||f6e()[0],l=kG(),c=v6e(e);let u=c;const d=I.useRef(new Map).current,f=I.useRef(u),h=I.useRef(new Map).current,p=I.useRef(!0);if(lA(()=>{p.current=!1,y6e(c,h),f.current=u}),m6e(()=>{p.current=!0,h.clear(),d.clear()}),p.current)return I.createElement(I.Fragment,null,u.map(y=>I.createElement(Zw,{key:dc(y),isPresent:!0,initial:n?void 0:!1,presenceAffectsLayout:o,mode:s},y)));u=[...u];const m=f.current.map(dc),_=c.map(dc),v=m.length;for(let y=0;y{if(_.indexOf(g)!==-1)return;const b=h.get(g);if(!b)return;const S=m.indexOf(g);let w=y;if(!w){const C=()=>{d.delete(g);const x=Array.from(h.keys()).filter(k=>!_.includes(k));if(x.forEach(k=>h.delete(k)),f.current=c.filter(k=>{const A=dc(k);return A===g||x.includes(A)}),!d.size){if(l.current===!1)return;a(),r&&r()}};w=I.createElement(Zw,{key:dc(b),isPresent:!1,onExitComplete:C,custom:t,presenceAffectsLayout:o,mode:s},b),d.set(g,w)}u.splice(S,0,w)}),u=u.map(y=>{const g=y.key;return d.has(g)?y:I.createElement(Zw,{key:dc(y),isPresent:!0,presenceAffectsLayout:o,mode:s},y)}),I.createElement(I.Fragment,null,d.size?u:u.map(y=>I.cloneElement(y)))};var b6e={initial:e=>{const{position:t}=e,n=["top","bottom"].includes(t)?"y":"x";let r=["top-right","bottom-right"].includes(t)?1:-1;return t==="bottom"&&(r=1),{opacity:0,[n]:r*24}},animate:{opacity:1,y:0,x:0,scale:1,transition:{duration:.4,ease:[.4,0,.2,1]}},exit:{opacity:0,scale:.85,transition:{duration:.2,ease:[.4,0,1,1]}}},IG=I.memo(e=>{const{id:t,message:n,onCloseComplete:r,onRequestRemove:i,requestClose:o=!1,position:s="bottom",duration:a=5e3,containerStyle:l,motionVariants:c=b6e,toastSpacing:u="0.5rem"}=e,[d,f]=I.useState(a),h=iPe();n9(()=>{h||r==null||r()},[h]),n9(()=>{f(a)},[a]);const p=()=>f(null),m=()=>f(a),_=()=>{h&&i()};I.useEffect(()=>{h&&o&&i()},[h,o,i]),tTe(_,d);const v=I.useMemo(()=>({pointerEvents:"auto",maxWidth:560,minWidth:300,margin:u,...l}),[l,u]),y=I.useMemo(()=>Z4e(s),[s]);return ie.jsx(AG.div,{layout:!0,className:"chakra-toast",variants:c,initial:"initial",animate:"animate",exit:"exit",onHoverStart:p,onHoverEnd:m,custom:{position:s},style:y,children:ie.jsx(or.div,{role:"status","aria-atomic":"true",className:"chakra-toast__inner",__css:v,children:us(n,{id:t,onClose:_})})})});IG.displayName="ToastComponent";function _6e(e,t){var n;const r=e??"bottom",o={"top-start":{ltr:"top-left",rtl:"top-right"},"top-end":{ltr:"top-right",rtl:"top-left"},"bottom-start":{ltr:"bottom-left",rtl:"bottom-right"},"bottom-end":{ltr:"bottom-right",rtl:"bottom-left"}}[r];return(n=o==null?void 0:o[t])!=null?n:r}var aR={path:ie.jsxs("g",{stroke:"currentColor",strokeWidth:"1.5",children:[ie.jsx("path",{strokeLinecap:"round",fill:"none",d:"M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"}),ie.jsx("path",{fill:"currentColor",strokeLinecap:"round",d:"M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"}),ie.jsx("circle",{fill:"none",strokeMiterlimit:"10",cx:"12",cy:"12",r:"11.25"})]}),viewBox:"0 0 24 24"},e0=Mi((e,t)=>{const{as:n,viewBox:r,color:i="currentColor",focusable:o=!1,children:s,className:a,__css:l,...c}=e,u=Dl("chakra-icon",a),d=Km("Icon",e),f={w:"1em",h:"1em",display:"inline-block",lineHeight:"1em",flexShrink:0,color:i,...l,...d},h={ref:t,focusable:o,className:u,__css:f},p=r??aR.viewBox;if(n&&typeof n!="string")return ie.jsx(or.svg,{as:n,...h,...c});const m=s??aR.path;return ie.jsx(or.svg,{verticalAlign:"middle",viewBox:p,...h,...c,children:m})});e0.displayName="Icon";function S6e(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.014,12.014,0,0,0,12,0Zm6.927,8.2-6.845,9.289a1.011,1.011,0,0,1-1.43.188L5.764,13.769a1,1,0,1,1,1.25-1.562l4.076,3.261,6.227-8.451A1,1,0,1,1,18.927,8.2Z"})})}function x6e(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm.25,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12.25,5ZM14.5,18.5h-4a1,1,0,0,1,0-2h.75a.25.25,0,0,0,.25-.25v-4.5a.25.25,0,0,0-.25-.25H10.5a1,1,0,0,1,0-2h1a2,2,0,0,1,2,2v4.75a.25.25,0,0,0,.25.25h.75a1,1,0,1,1,0,2Z"})})}function lR(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z"})})}var w6e=FSe({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),IA=Mi((e,t)=>{const n=Km("Spinner",e),{label:r="Loading...",thickness:i="2px",speed:o="0.45s",emptyColor:s="transparent",className:a,...l}=Wm(e),c=Dl("chakra-spinner",a),u={display:"inline-block",borderColor:"currentColor",borderStyle:"solid",borderRadius:"99999px",borderWidth:i,borderBottomColor:s,borderLeftColor:s,animation:`${w6e} ${o} linear infinite`,...n};return ie.jsx(or.div,{ref:t,__css:u,className:c,...l,children:r&&ie.jsx(or.span,{srOnly:!0,children:r})})});IA.displayName="Spinner";var[C6e,MA]=Hm({name:"AlertContext",hookName:"useAlertContext",providerName:""}),[E6e,RA]=Hm({name:"AlertStylesContext",hookName:"useAlertStyles",providerName:""}),MG={info:{icon:x6e,colorScheme:"blue"},warning:{icon:lR,colorScheme:"orange"},success:{icon:S6e,colorScheme:"green"},error:{icon:lR,colorScheme:"red"},loading:{icon:IA,colorScheme:"blue"}};function T6e(e){return MG[e].colorScheme}function A6e(e){return MG[e].icon}var RG=Mi(function(t,n){const r=RA(),{status:i}=MA(),o={display:"inline",...r.description};return ie.jsx(or.div,{ref:n,"data-status":i,...t,className:Dl("chakra-alert__desc",t.className),__css:o})});RG.displayName="AlertDescription";function OG(e){const{status:t}=MA(),n=A6e(t),r=RA(),i=t==="loading"?r.spinner:r.icon;return ie.jsx(or.span,{display:"inherit","data-status":t,...e,className:Dl("chakra-alert__icon",e.className),__css:i,children:e.children||ie.jsx(n,{h:"100%",w:"100%"})})}OG.displayName="AlertIcon";var $G=Mi(function(t,n){const r=RA(),{status:i}=MA();return ie.jsx(or.div,{ref:n,"data-status":i,...t,className:Dl("chakra-alert__title",t.className),__css:r.title})});$G.displayName="AlertTitle";var NG=Mi(function(t,n){var r;const{status:i="info",addRole:o=!0,...s}=Wm(t),a=(r=t.colorScheme)!=null?r:T6e(i),l=R4e("Alert",{...t,colorScheme:a}),c={width:"100%",display:"flex",alignItems:"center",position:"relative",overflow:"hidden",...l.container};return ie.jsx(C6e,{value:{status:i},children:ie.jsx(E6e,{value:l,children:ie.jsx(or.div,{"data-status":i,role:o?"alert":void 0,ref:n,...s,className:Dl("chakra-alert",t.className),__css:c})})})});NG.displayName="Alert";function k6e(e){return ie.jsx(e0,{focusable:"false","aria-hidden":!0,...e,children:ie.jsx("path",{fill:"currentColor",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"})})}var FG=Mi(function(t,n){const r=Km("CloseButton",t),{children:i,isDisabled:o,__css:s,...a}=Wm(t),l={outline:0,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0};return ie.jsx(or.button,{type:"button","aria-label":"Close",ref:n,disabled:o,__css:{...l,...r,...s},...a,children:i||ie.jsx(k6e,{width:"1em",height:"1em"})})});FG.displayName="CloseButton";var P6e={top:[],"top-left":[],"top-right":[],"bottom-left":[],bottom:[],"bottom-right":[]},ss=I6e(P6e);function I6e(e){let t=e;const n=new Set,r=i=>{t=i(t),n.forEach(o=>o())};return{getState:()=>t,subscribe:i=>(n.add(i),()=>{r(()=>e),n.delete(i)}),removeToast:(i,o)=>{r(s=>({...s,[o]:s[o].filter(a=>a.id!=i)}))},notify:(i,o)=>{const s=M6e(i,o),{position:a,id:l}=s;return r(c=>{var u,d;const h=a.includes("top")?[s,...(u=c[a])!=null?u:[]]:[...(d=c[a])!=null?d:[],s];return{...c,[a]:h}}),l},update:(i,o)=>{i&&r(s=>{const a={...s},{position:l,index:c}=t9(a,i);return l&&c!==-1&&(a[l][c]={...a[l][c],...o,message:DG(o)}),a})},closeAll:({positions:i}={})=>{r(o=>(i??["bottom","bottom-right","bottom-left","top","top-left","top-right"]).reduce((l,c)=>(l[c]=o[c].map(u=>({...u,requestClose:!0})),l),{...o}))},close:i=>{r(o=>{const s=oU(o,i);return s?{...o,[s]:o[s].map(a=>a.id==i?{...a,requestClose:!0}:a)}:o})},isActive:i=>!!t9(ss.getState(),i).position}}var cR=0;function M6e(e,t={}){var n,r;cR+=1;const i=(n=t.id)!=null?n:cR,o=(r=t.position)!=null?r:"bottom";return{id:i,message:e,position:o,duration:t.duration,onCloseComplete:t.onCloseComplete,onRequestRemove:()=>ss.removeToast(String(i),o),status:t.status,requestClose:!1,containerStyle:t.containerStyle}}var R6e=e=>{const{status:t,variant:n="solid",id:r,title:i,isClosable:o,onClose:s,description:a,colorScheme:l,icon:c}=e,u=r?{root:`toast-${r}`,title:`toast-${r}-title`,description:`toast-${r}-description`}:void 0;return ie.jsxs(NG,{addRole:!1,status:t,variant:n,id:u==null?void 0:u.root,alignItems:"start",borderRadius:"md",boxShadow:"lg",paddingEnd:8,textAlign:"start",width:"auto",colorScheme:l,children:[ie.jsx(OG,{children:c}),ie.jsxs(or.div,{flex:"1",maxWidth:"100%",children:[i&&ie.jsx($G,{id:u==null?void 0:u.title,children:i}),a&&ie.jsx(RG,{id:u==null?void 0:u.description,display:"block",children:a})]}),o&&ie.jsx(FG,{size:"sm",onClick:s,position:"absolute",insetEnd:1,top:1})]})};function DG(e={}){const{render:t,toastComponent:n=R6e}=e;return i=>typeof t=="function"?t({...i,...e}):ie.jsx(n,{...i,...e})}function O6e(e,t){const n=i=>{var o;return{...t,...i,position:_6e((o=i==null?void 0:i.position)!=null?o:t==null?void 0:t.position,e)}},r=i=>{const o=n(i),s=DG(o);return ss.notify(s,o)};return r.update=(i,o)=>{ss.update(i,n(o))},r.promise=(i,o)=>{const s=r({...o.loading,status:"loading",duration:null});i.then(a=>r.update(s,{status:"success",duration:5e3,...us(o.success,a)})).catch(a=>r.update(s,{status:"error",duration:5e3,...us(o.error,a)}))},r.closeAll=ss.closeAll,r.close=ss.close,r.isActive=ss.isActive,r}var[kWe,PWe]=Hm({name:"ToastOptionsContext",strict:!1}),$6e=e=>{const t=I.useSyncExternalStore(ss.subscribe,ss.getState,ss.getState),{motionVariants:n,component:r=IG,portalProps:i}=e,s=Object.keys(t).map(a=>{const l=t[a];return ie.jsx("div",{role:"region","aria-live":"polite","aria-label":`Notifications-${a}`,id:`chakra-toast-manager-${a}`,style:J4e(a),children:ie.jsx(PG,{initial:!1,children:l.map(c=>ie.jsx(r,{motionVariants:n,...c},c.id))})},a)});return ie.jsx(CS,{...i,children:s})},N6e={duration:5e3,variant:"solid"},Bu={theme:S4e,colorMode:"light",toggleColorMode:()=>{},setColorMode:()=>{},defaultOptions:N6e,forced:!1};function F6e({theme:e=Bu.theme,colorMode:t=Bu.colorMode,toggleColorMode:n=Bu.toggleColorMode,setColorMode:r=Bu.setColorMode,defaultOptions:i=Bu.defaultOptions,motionVariants:o,toastSpacing:s,component:a,forced:l}=Bu){const c={colorMode:t,setColorMode:r,toggleColorMode:n,forced:l};return{ToastContainer:()=>ie.jsx(X4e,{theme:e,children:ie.jsx(JT.Provider,{value:c,children:ie.jsx($6e,{defaultOptions:i,motionVariants:o,toastSpacing:s,component:a})})}),toast:O6e(e.direction,i)}}var H3=Mi(function(t,n){const{htmlWidth:r,htmlHeight:i,alt:o,...s}=t;return ie.jsx("img",{width:r,height:i,ref:n,alt:o,...s})});H3.displayName="NativeImage";function D6e(e){const{loading:t,src:n,srcSet:r,onLoad:i,onError:o,crossOrigin:s,sizes:a,ignoreFallback:l}=e,[c,u]=I.useState("pending");I.useEffect(()=>{u(n?"loading":"pending")},[n]);const d=I.useRef(),f=I.useCallback(()=>{if(!n)return;h();const p=new Image;p.src=n,s&&(p.crossOrigin=s),r&&(p.srcset=r),a&&(p.sizes=a),t&&(p.loading=t),p.onload=m=>{h(),u("loaded"),i==null||i(m)},p.onerror=m=>{h(),u("failed"),o==null||o(m)},d.current=p},[n,s,r,a,i,o,t]),h=()=>{d.current&&(d.current.onload=null,d.current.onerror=null,d.current=null)};return j1(()=>{if(!l)return c==="loading"&&f(),()=>{h()}},[c,f,l]),l?"loaded":c}var L6e=(e,t)=>e!=="loaded"&&t==="beforeLoadOrError"||e==="failed"&&t==="onError";function B6e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var OA=Mi(function(t,n){const{fallbackSrc:r,fallback:i,src:o,srcSet:s,align:a,fit:l,loading:c,ignoreFallback:u,crossOrigin:d,fallbackStrategy:f="beforeLoadOrError",referrerPolicy:h,...p}=t,m=r!==void 0||i!==void 0,_=c!=null||u||!m,v=D6e({...t,crossOrigin:d,ignoreFallback:_}),y=L6e(v,f),g={ref:n,objectFit:l,objectPosition:a,..._?p:B6e(p,["onError","onLoad"])};return y?i||ie.jsx(or.img,{as:H3,className:"chakra-image__placeholder",src:r,...g}):ie.jsx(or.img,{as:H3,src:o,srcSet:s,crossOrigin:d,loading:c,referrerPolicy:h,className:"chakra-image",...g})});OA.displayName="Image";var LG=Mi(function(t,n){const r=Km("Text",t),{className:i,align:o,decoration:s,casing:a,...l}=Wm(t),c=D4e({textAlign:t.align,textDecoration:t.decoration,textTransform:t.casing});return ie.jsx(or.p,{ref:n,className:Dl("chakra-text",t.className),...c,...l,__css:r})});LG.displayName="Text";var W3=Mi(function(t,n){const r=Km("Heading",t),{className:i,...o}=Wm(t);return ie.jsx(or.h2,{ref:n,className:Dl("chakra-heading",t.className),...o,__css:r})});W3.displayName="Heading";var nb=or("div");nb.displayName="Box";var BG=Mi(function(t,n){const{size:r,centerContent:i=!0,...o}=t,s=i?{display:"flex",alignItems:"center",justifyContent:"center"}:{};return ie.jsx(nb,{ref:n,boxSize:r,__css:{...s,flexShrink:0,flexGrow:0},...o})});BG.displayName="Square";var z6e=Mi(function(t,n){const{size:r,...i}=t;return ie.jsx(BG,{size:r,ref:n,borderRadius:"9999px",...i})});z6e.displayName="Circle";var $A=Mi(function(t,n){const{direction:r,align:i,justify:o,wrap:s,basis:a,grow:l,shrink:c,...u}=t,d={display:"flex",flexDirection:r,alignItems:i,justifyContent:o,flexWrap:s,flexBasis:a,flexGrow:l,flexShrink:c};return ie.jsx(or.div,{ref:n,__css:d,...u})});$A.displayName="Flex";const tt=e=>{try{return JSON.parse(JSON.stringify(e))}catch{return"Error parsing object"}},j6e=T.object({status:T.literal(422),data:T.object({detail:T.array(T.object({loc:T.array(T.string()),msg:T.string(),type:T.string()}))})});function Hr(e,t,n=!1){e=String(e),t=String(t);const r=Array.from({length:21},(s,a)=>a*50),i=[0,5,10,15,20,25,30,35,40,45,50,55,59,64,68,73,77,82,86,95,100];return r.reduce((s,a,l)=>{const c=n?i[l]/100:1,u=n?50:i[r.length-1-l];return s[a]=`hsl(${e} ${t}% ${u}% / ${c})`,s},{})}const my={H:220,S:16},yy={H:250,S:42},vy={H:47,S:42},by={H:40,S:70},_y={H:28,S:42},Sy={H:113,S:42},xy={H:0,S:42},V6e={base:Hr(my.H,my.S),baseAlpha:Hr(my.H,my.S,!0),accent:Hr(yy.H,yy.S),accentAlpha:Hr(yy.H,yy.S,!0),working:Hr(vy.H,vy.S),workingAlpha:Hr(vy.H,vy.S,!0),gold:Hr(by.H,by.S),goldAlpha:Hr(by.H,by.S,!0),warning:Hr(_y.H,_y.S),warningAlpha:Hr(_y.H,_y.S,!0),ok:Hr(Sy.H,Sy.S),okAlpha:Hr(Sy.H,Sy.S,!0),error:Hr(xy.H,xy.S),errorAlpha:Hr(xy.H,xy.S,!0)},{definePartsStyle:U6e,defineMultiStyleConfig:G6e}=Be(MV.keys),H6e={border:"none"},W6e=e=>{const{colorScheme:t}=e;return{fontWeight:"600",fontSize:"sm",border:"none",borderRadius:"base",bg:W(`${t}.200`,`${t}.700`)(e),color:W(`${t}.900`,`${t}.100`)(e),_hover:{bg:W(`${t}.250`,`${t}.650`)(e)},_expanded:{bg:W(`${t}.250`,`${t}.650`)(e),borderBottomRadius:"none",_hover:{bg:W(`${t}.300`,`${t}.600`)(e)}}}},q6e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.100`,`${t}.800`)(e),borderRadius:"base",borderTopRadius:"none"}},K6e={},X6e=U6e(e=>({container:H6e,button:W6e(e),panel:q6e(e),icon:K6e})),Q6e=G6e({variants:{invokeAI:X6e},defaultProps:{variant:"invokeAI",colorScheme:"base"}}),Y6e=e=>{const{colorScheme:t}=e;if(t==="base"){const r={bg:W("base.150","base.700")(e),color:W("base.300","base.500")(e),svg:{fill:W("base.300","base.500")(e)},opacity:1},i={bg:"none",color:W("base.300","base.500")(e),svg:{fill:W("base.500","base.500")(e)},opacity:1};return{bg:W("base.250","base.600")(e),color:W("base.850","base.100")(e),borderRadius:"base",svg:{fill:W("base.850","base.100")(e)},_hover:{bg:W("base.300","base.500")(e),color:W("base.900","base.50")(e),svg:{fill:W("base.900","base.50")(e)},_disabled:r},_disabled:r,'&[data-progress="true"]':{...i,_hover:i}}}const n={bg:W(`${t}.400`,`${t}.700`)(e),color:W(`${t}.600`,`${t}.500`)(e),svg:{fill:W(`${t}.600`,`${t}.500`)(e),filter:"unset"},opacity:.7,filter:"saturate(65%)"};return{bg:W(`${t}.400`,`${t}.600`)(e),color:W("base.50","base.100")(e),borderRadius:"base",svg:{fill:W("base.50","base.100")(e)},_disabled:n,_hover:{bg:W(`${t}.500`,`${t}.500`)(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)},_disabled:n}}},Z6e=e=>{const{colorScheme:t}=e,n=W("gray.200","whiteAlpha.300")(e);return{border:"1px solid",borderColor:t==="gray"?n:"currentColor",_hover:{bg:W(`${t}.500`,`${t}.500`)(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)}},".chakra-button__group[data-attached][data-orientation=horizontal] > &:not(:last-of-type)":{marginEnd:"-1px"},".chakra-button__group[data-attached][data-orientation=vertical] > &:not(:last-of-type)":{marginBottom:"-1px"}}},J6e={variants:{invokeAI:Y6e,invokeAIOutline:Z6e},defaultProps:{variant:"invokeAI",colorScheme:"base"}},{definePartsStyle:eIe,defineMultiStyleConfig:tIe}=Be(RV.keys),nIe=e=>{const{colorScheme:t}=e;return{bg:W("base.200","base.700")(e),borderColor:W("base.300","base.600")(e),color:W("base.900","base.100")(e),_checked:{bg:W(`${t}.300`,`${t}.500`)(e),borderColor:W(`${t}.300`,`${t}.500`)(e),color:W(`${t}.900`,`${t}.100`)(e),_hover:{bg:W(`${t}.400`,`${t}.500`)(e),borderColor:W(`${t}.400`,`${t}.500`)(e)},_disabled:{borderColor:"transparent",bg:"whiteAlpha.300",color:"whiteAlpha.500"}},_indeterminate:{bg:W(`${t}.300`,`${t}.600`)(e),borderColor:W(`${t}.300`,`${t}.600`)(e),color:W(`${t}.900`,`${t}.100`)(e)},_disabled:{bg:"whiteAlpha.100",borderColor:"transparent"},_focusVisible:{boxShadow:"none",outline:"none"},_invalid:{borderColor:W("error.600","error.300")(e)}}},rIe=eIe(e=>({control:nIe(e)})),iIe=tIe({variants:{invokeAI:rIe},defaultProps:{variant:"invokeAI",colorScheme:"accent"}}),{definePartsStyle:oIe,defineMultiStyleConfig:sIe}=Be(OV.keys),aIe={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal"},lIe=e=>({borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6},"::selection":{color:W("accent.900","accent.50")(e),bg:W("accent.200","accent.400")(e)}}),cIe={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},uIe=oIe(e=>({preview:aIe,input:lIe(e),textarea:cIe})),dIe=sIe({variants:{invokeAI:uIe},defaultProps:{size:"sm",variant:"invokeAI"}}),fIe=e=>({fontSize:"sm",marginEnd:0,mb:1,fontWeight:"400",transitionProperty:"common",transitionDuration:"normal",whiteSpace:"nowrap",_disabled:{opacity:.4},color:W("base.700","base.300")(e),_invalid:{color:W("error.500","error.300")(e)}}),hIe={variants:{invokeAI:fIe},defaultProps:{variant:"invokeAI"}},DS=e=>({outline:"none",borderWidth:2,borderStyle:"solid",borderColor:W("base.200","base.800")(e),bg:W("base.50","base.900")(e),borderRadius:"base",color:W("base.900","base.100")(e),boxShadow:"none",_hover:{borderColor:W("base.300","base.600")(e)},_focus:{borderColor:W("accent.200","accent.600")(e),boxShadow:"none",_hover:{borderColor:W("accent.300","accent.500")(e)}},_invalid:{borderColor:W("error.300","error.600")(e),boxShadow:"none",_hover:{borderColor:W("error.400","error.500")(e)}},_disabled:{borderColor:W("base.300","base.700")(e),bg:W("base.300","base.700")(e),color:W("base.600","base.400")(e),_hover:{borderColor:W("base.300","base.700")(e)}},_placeholder:{color:W("base.700","base.400")(e)},"::selection":{bg:W("accent.200","accent.400")(e)}}),{definePartsStyle:pIe,defineMultiStyleConfig:gIe}=Be($V.keys),mIe=pIe(e=>({field:DS(e)})),yIe=gIe({variants:{invokeAI:mIe},defaultProps:{size:"sm",variant:"invokeAI"}}),{definePartsStyle:vIe,defineMultiStyleConfig:bIe}=Be(NV.keys),_Ie=vIe(e=>({button:{fontWeight:500,bg:W("base.300","base.500")(e),color:W("base.900","base.100")(e),_hover:{bg:W("base.400","base.600")(e),color:W("base.900","base.50")(e),fontWeight:600}},list:{zIndex:9999,color:W("base.900","base.150")(e),bg:W("base.200","base.800")(e),shadow:"dark-lg",border:"none"},item:{fontSize:"sm",bg:W("base.200","base.800")(e),_hover:{bg:W("base.300","base.700")(e),svg:{opacity:1}},_focus:{bg:W("base.400","base.600")(e)},svg:{opacity:.7,fontSize:14}},divider:{borderColor:W("base.400","base.700")(e)}})),SIe=bIe({variants:{invokeAI:_Ie},defaultProps:{variant:"invokeAI"}}),IWe={variants:{enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.07,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.07,easings:"easeOut"}}}},{defineMultiStyleConfig:xIe,definePartsStyle:wIe}=Be(FV.keys),CIe=e=>({bg:W("blackAlpha.700","blackAlpha.700")(e)}),EIe={},TIe=()=>({layerStyle:"first",maxH:"80vh"}),AIe=()=>({fontWeight:"600",fontSize:"lg",layerStyle:"first",borderTopRadius:"base",borderInlineEndRadius:"base"}),kIe={},PIe={overflowY:"scroll"},IIe={},MIe=wIe(e=>({overlay:CIe(e),dialogContainer:EIe,dialog:TIe(),header:AIe(),closeButton:kIe,body:PIe,footer:IIe})),RIe=xIe({variants:{invokeAI:MIe},defaultProps:{variant:"invokeAI",size:"lg"}}),{defineMultiStyleConfig:OIe,definePartsStyle:$Ie}=Be(DV.keys),NIe=e=>({height:8}),FIe=e=>({border:"none",fontWeight:"600",height:"auto",py:1,ps:2,pe:6,...DS(e)}),DIe=e=>({display:"flex"}),LIe=e=>({border:"none",px:2,py:0,mx:-2,my:0,svg:{color:W("base.700","base.300")(e),width:2.5,height:2.5,_hover:{color:W("base.900","base.100")(e)}}}),BIe=$Ie(e=>({root:NIe(e),field:FIe(e),stepperGroup:DIe(e),stepper:LIe(e)})),zIe=OIe({variants:{invokeAI:BIe},defaultProps:{size:"sm",variant:"invokeAI"}}),{defineMultiStyleConfig:jIe,definePartsStyle:zG}=Be(LV.keys),jG=Xt("popper-bg"),VG=Xt("popper-arrow-bg"),UG=Xt("popper-arrow-shadow-color"),VIe=e=>({[VG.variable]:W("colors.base.100","colors.base.800")(e),[jG.variable]:W("colors.base.100","colors.base.800")(e),[UG.variable]:W("colors.base.400","colors.base.600")(e),minW:"unset",width:"unset",p:4,bg:W("base.100","base.800")(e),border:"none",shadow:"dark-lg"}),UIe=e=>({[VG.variable]:W("colors.base.100","colors.base.700")(e),[jG.variable]:W("colors.base.100","colors.base.700")(e),[UG.variable]:W("colors.base.400","colors.base.400")(e),p:4,bg:W("base.100","base.700")(e),border:"none",shadow:"dark-lg"}),GIe=zG(e=>({content:VIe(e),body:{padding:0}})),HIe=zG(e=>({content:UIe(e),body:{padding:0}})),WIe=jIe({variants:{invokeAI:GIe,informational:HIe},defaultProps:{variant:"invokeAI"}}),{defineMultiStyleConfig:qIe,definePartsStyle:KIe}=Be(BV.keys),XIe=e=>({bg:"accentAlpha.700"}),QIe=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.200`,`${t}.700`)(e)}},YIe=KIe(e=>({filledTrack:XIe(e),track:QIe(e)})),ZIe=qIe({variants:{invokeAI:YIe},defaultProps:{variant:"invokeAI"}}),JIe={"::-webkit-scrollbar":{display:"none"},scrollbarWidth:"none"},{definePartsStyle:e8e,defineMultiStyleConfig:t8e}=Be(zV.keys),n8e=e=>({color:W("base.200","base.300")(e)}),r8e=e=>({fontWeight:"600",...DS(e)}),i8e=e8e(e=>({field:r8e(e),icon:n8e(e)})),o8e=t8e({variants:{invokeAI:i8e},defaultProps:{size:"sm",variant:"invokeAI"}}),uR=Ae("skeleton-start-color"),dR=Ae("skeleton-end-color"),s8e={borderRadius:"base",maxW:"full",maxH:"full",_light:{[uR.variable]:"colors.base.250",[dR.variable]:"colors.base.450"},_dark:{[uR.variable]:"colors.base.700",[dR.variable]:"colors.base.500"}},a8e={variants:{invokeAI:s8e},defaultProps:{variant:"invokeAI"}},{definePartsStyle:l8e,defineMultiStyleConfig:c8e}=Be(jV.keys),u8e=e=>({bg:W("base.400","base.600")(e),h:1.5}),d8e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.400`,`${t}.600`)(e),h:1.5}},f8e=e=>({w:e.orientation==="horizontal"?2:4,h:e.orientation==="horizontal"?4:2,bg:W("base.50","base.100")(e)}),h8e=e=>({fontSize:"2xs",fontWeight:"500",color:W("base.700","base.400")(e),mt:2,insetInlineStart:"unset"}),p8e=l8e(e=>({container:{_disabled:{opacity:.6,cursor:"default",pointerEvents:"none"}},track:u8e(e),filledTrack:d8e(e),thumb:f8e(e),mark:h8e(e)})),g8e=c8e({variants:{invokeAI:p8e},defaultProps:{variant:"invokeAI",colorScheme:"accent"}}),{defineMultiStyleConfig:m8e,definePartsStyle:y8e}=Be(VV.keys),v8e=e=>{const{colorScheme:t}=e;return{bg:W("base.300","base.600")(e),_focusVisible:{boxShadow:"none"},_checked:{bg:W(`${t}.400`,`${t}.500`)(e)}}},b8e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.50`,`${t}.50`)(e)}},_8e=y8e(e=>({container:{},track:v8e(e),thumb:b8e(e)})),S8e=m8e({variants:{invokeAI:_8e},defaultProps:{size:"md",variant:"invokeAI",colorScheme:"accent"}}),{defineMultiStyleConfig:x8e,definePartsStyle:GG}=Be(UV.keys),w8e=e=>({display:"flex",columnGap:4}),C8e=e=>({}),E8e=e=>{const{colorScheme:t}=e;return{display:"flex",flexDirection:"column",gap:1,color:W("base.700","base.400")(e),button:{fontSize:"sm",padding:2,borderRadius:"base",textShadow:W("0 0 0.3rem var(--invokeai-colors-accent-100)","0 0 0.3rem var(--invokeai-colors-accent-900)")(e),svg:{fill:W("base.700","base.300")(e)},_selected:{bg:W("accent.400","accent.600")(e),color:W("base.50","base.100")(e),svg:{fill:W("base.50","base.100")(e),filter:W(`drop-shadow(0px 0px 0.3rem var(--invokeai-colors-${t}-600))`,`drop-shadow(0px 0px 0.3rem var(--invokeai-colors-${t}-800))`)(e)},_hover:{bg:W("accent.500","accent.500")(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)}}},_hover:{bg:W("base.100","base.800")(e),color:W("base.900","base.50")(e),svg:{fill:W("base.800","base.100")(e)}}}}},T8e=e=>({padding:0,height:"100%"}),A8e=GG(e=>({root:w8e(e),tab:C8e(e),tablist:E8e(e),tabpanel:T8e(e)})),k8e=GG(e=>({tab:{borderTopRadius:"base",px:4,py:1,fontSize:"sm",color:W("base.600","base.400")(e),fontWeight:500,_selected:{color:W("accent.600","accent.400")(e)}},tabpanel:{p:0,pt:4,w:"full",h:"full"},tabpanels:{w:"full",h:"full"}})),P8e=x8e({variants:{line:k8e,appTabs:A8e},defaultProps:{variant:"appTabs",colorScheme:"accent"}}),I8e=e=>({color:W("error.500","error.400")(e)}),M8e=e=>({color:W("base.500","base.400")(e)}),R8e={variants:{subtext:M8e,error:I8e}},O8e=e=>({...DS(e),"::-webkit-scrollbar":{display:"initial"},"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-50) 0%, + var(--invokeai-colors-base-50) 70%, + var(--invokeai-colors-base-200) 70%, + var(--invokeai-colors-base-200) 100%)`},_disabled:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-50) 0%, + var(--invokeai-colors-base-50) 70%, + var(--invokeai-colors-base-200) 70%, + var(--invokeai-colors-base-200) 100%)`}},_dark:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-900) 0%, + var(--invokeai-colors-base-900) 70%, + var(--invokeai-colors-base-800) 70%, + var(--invokeai-colors-base-800) 100%)`},_disabled:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-900) 0%, + var(--invokeai-colors-base-900) 70%, + var(--invokeai-colors-base-800) 70%, + var(--invokeai-colors-base-800) 100%)`}}},p:2}),$8e={variants:{invokeAI:O8e},defaultProps:{size:"md",variant:"invokeAI"}},N8e=Xt("popper-arrow-bg"),F8e=e=>({borderRadius:"base",shadow:"dark-lg",bg:W("base.700","base.200")(e),[N8e.variable]:W("colors.base.700","colors.base.200")(e),pb:1.5}),D8e={baseStyle:F8e},fR={backgroundColor:"accentAlpha.150 !important",borderColor:"accentAlpha.700 !important",borderRadius:"base !important",borderStyle:"dashed !important",_dark:{borderColor:"accent.400 !important"}},L8e={".react-flow__nodesselection-rect":{...fR,padding:"1rem !important",boxSizing:"content-box !important",transform:"translate(-1rem, -1rem) !important"},".react-flow__selection":fR},B8e=e=>({color:W("accent.500","accent.300")(e)}),z8e={variants:{accent:B8e}},j8e={config:{cssVarPrefix:"invokeai",initialColorMode:"dark",useSystemColorMode:!1},layerStyles:{body:{bg:"base.50",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.50"}},first:{bg:"base.100",color:"base.900",".chakra-ui-dark &":{bg:"base.850",color:"base.100"}},second:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.800",color:"base.100"}},third:{bg:"base.300",color:"base.900",".chakra-ui-dark &":{bg:"base.750",color:"base.100"}},nodeBody:{bg:"base.100",color:"base.900",".chakra-ui-dark &":{bg:"base.800",color:"base.100"}},nodeHeader:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.100"}},nodeFooter:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.100"}}},styles:{global:()=>({layerStyle:"body","*":{...JIe},...L8e})},direction:"ltr",fonts:{body:"'Inter Variable', sans-serif",heading:"'Inter Variable', sans-serif"},shadows:{light:{accent:"0 0 10px 0 var(--invokeai-colors-accent-300)",accentHover:"0 0 10px 0 var(--invokeai-colors-accent-400)",ok:"0 0 7px var(--invokeai-colors-ok-600)",working:"0 0 7px var(--invokeai-colors-working-600)",error:"0 0 7px var(--invokeai-colors-error-600)"},dark:{accent:"0 0 10px 0 var(--invokeai-colors-accent-600)",accentHover:"0 0 10px 0 var(--invokeai-colors-accent-500)",ok:"0 0 7px var(--invokeai-colors-ok-400)",working:"0 0 7px var(--invokeai-colors-working-400)",error:"0 0 7px var(--invokeai-colors-error-400)"},selected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 4px var(--invokeai-colors-accent-400)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 4px var(--invokeai-colors-accent-500)"},hoverSelected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 4px var(--invokeai-colors-accent-500)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 4px var(--invokeai-colors-accent-400)"},hoverUnselected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 3px var(--invokeai-colors-accent-500)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 3px var(--invokeai-colors-accent-400)"},nodeSelected:{light:"0 0 0 3px var(--invokeai-colors-accent-400)",dark:"0 0 0 3px var(--invokeai-colors-accent-500)"},nodeHovered:{light:"0 0 0 2px var(--invokeai-colors-accent-500)",dark:"0 0 0 2px var(--invokeai-colors-accent-400)"},nodeHoveredSelected:{light:"0 0 0 3px var(--invokeai-colors-accent-500)",dark:"0 0 0 3px var(--invokeai-colors-accent-400)"},nodeInProgress:{light:"0 0 0 2px var(--invokeai-colors-accent-500), 0 0 10px 2px var(--invokeai-colors-accent-600)",dark:"0 0 0 2px var(--invokeai-colors-yellow-400), 0 0 20px 2px var(--invokeai-colors-orange-700)"}},colors:V6e,components:{Button:J6e,Input:yIe,Editable:dIe,Textarea:$8e,Tabs:P8e,Progress:ZIe,Accordion:Q6e,FormLabel:hIe,Switch:S8e,NumberInput:zIe,Select:o8e,Skeleton:a8e,Slider:g8e,Popover:WIe,Modal:RIe,Checkbox:iIe,Menu:SIe,Text:R8e,Tooltip:D8e,Heading:z8e}},V8e={defaultOptions:{isClosable:!0,position:"bottom-right"}},{toast:Th}=F6e({theme:j8e,defaultOptions:V8e.defaultOptions}),U8e=()=>{fe({matcher:en.endpoints.enqueueBatch.matchFulfilled,effect:async e=>{const t=e.payload,n=e.meta.arg.originalArgs;ue("queue").debug({enqueueResult:tt(t)},"Batch enqueued"),Th.isActive("batch-queued")||Th({id:"batch-queued",title:J("queue.batchQueued"),description:J("queue.batchQueuedDesc",{count:t.enqueued,direction:n.prepend?J("queue.front"):J("queue.back")}),duration:1e3,status:"success"})}}),fe({matcher:en.endpoints.enqueueBatch.matchRejected,effect:async e=>{const t=e.payload,n=e.meta.arg.originalArgs;if(!t){Th({title:J("queue.batchFailedToQueue"),status:"error",description:"Unknown Error"}),ue("queue").error({batchConfig:tt(n),error:tt(t)},J("queue.batchFailedToQueue"));return}const r=j6e.safeParse(t);r.success?r.data.data.detail.map(i=>{Th({id:"batch-failed-to-queue",title:z6(oF(i.msg),{length:128}),status:"error",description:z6(`Path: + ${i.loc.join(".")}`,{length:128})})}):t.status!==403&&Th({title:J("queue.batchFailedToQueue"),description:J("common.unknownError"),status:"error"}),ue("queue").error({batchConfig:tt(n),error:tt(t)},J("queue.batchFailedToQueue"))}})},hu=m4({memoize:kQ,memoizeOptions:{resultEqualityCheck:$4}}),HG=(e,t)=>{var d;const{generation:n,canvas:r,nodes:i,controlAdapters:o}=e,s=((d=n.initialImage)==null?void 0:d.imageName)===t,a=r.layerState.objects.some(f=>f.kind==="image"&&f.imageName===t),l=i.nodes.filter(Sn).some(f=>Gu(f.data.inputs,h=>{var p;return vT(h)&&((p=h.value)==null?void 0:p.image_name)===t})),c=As(o).some(f=>f.controlImage===t||hi(f)&&f.processedControlImage===t);return{isInitialImage:s,isCanvasImage:a,isNodesImage:l,isControlImage:c}},G8e=hu([e=>e],e=>{const{imagesToDelete:t}=e.deleteImageModal;return t.length?t.map(r=>HG(e,r.image_name)):[]}),H8e=()=>{fe({matcher:ce.endpoints.deleteBoardAndImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{deleted_images:r}=e.payload;let i=!1,o=!1,s=!1,a=!1;const l=n();r.forEach(c=>{const u=HG(l,c);u.isInitialImage&&!i&&(t(oT()),i=!0),u.isCanvasImage&&!o&&(t(dT()),o=!0),u.isNodesImage&&!s&&(t(Rj()),s=!0),u.isControlImage&&!a&&(t(hae()),a=!0)})}})},W8e=()=>{fe({matcher:br(vp,Q5),effect:async(e,{getState:t,dispatch:n,condition:r,cancelActiveListeners:i})=>{i();const o=t(),s=vp.match(e)?e.payload.boardId:o.gallery.selectedBoardId,l=(Q5.match(e)?e.payload:o.gallery.galleryView)==="images"?Rn:Pr,c={board_id:s??"none",categories:l};if(await r(()=>ce.endpoints.listImages.select(c)(t()).isSuccess,5e3)){const{data:d}=ce.endpoints.listImages.select(c)(t());if(d&&vp.match(e)&&e.payload.selectedImageName){const f=_g.selectAll(d)[0],h=_g.selectById(d,e.payload.selectedImageName);n(ps(h||f||null))}else n(ps(null))}else n(ps(null))}})},q8e=he("canvas/canvasSavedToGallery"),K8e=he("canvas/canvasMaskSavedToGallery"),X8e=he("canvas/canvasCopiedToClipboard"),Q8e=he("canvas/canvasDownloadedAsImage"),Y8e=he("canvas/canvasMerged"),Z8e=he("canvas/stagingAreaImageSaved"),J8e=he("canvas/canvasMaskToControlAdapter"),eMe=he("canvas/canvasImageToControlAdapter");let WG=null,qG=null;const MWe=e=>{WG=e},LS=()=>WG,RWe=e=>{qG=e},tMe=()=>qG,nMe=async e=>new Promise((t,n)=>{e.toBlob(r=>{if(r){t(r);return}n("Unable to create Blob")})}),rb=async(e,t)=>await nMe(e.toCanvas(t)),BS=async(e,t=!1)=>{const n=LS();if(!n)throw new Error("Problem getting base layer blob");const{shouldCropToBoundingBoxOnSave:r,boundingBoxCoordinates:i,boundingBoxDimensions:o}=e.canvas,s=n.clone();s.scale({x:1,y:1});const a=s.getAbsolutePosition(),l=r||t?{x:i.x+a.x,y:i.y+a.y,width:o.width,height:o.height}:s.getClientRect();return rb(s,l)},rMe=(e,t="image/png")=>{navigator.clipboard.write([new ClipboardItem({[t]:e})])},iMe=()=>{fe({actionCreator:X8e,effect:async(e,{dispatch:t,getState:n})=>{const r=B_.get().child({namespace:"canvasCopiedToClipboardListener"}),i=n();try{const o=BS(i);rMe(o)}catch(o){r.error(String(o)),t(Ve({title:J("toast.problemCopyingCanvas"),description:J("toast.problemCopyingCanvasDesc"),status:"error"}));return}t(Ve({title:J("toast.canvasCopiedClipboard"),status:"success"}))}})},oMe=(e,t)=>{const n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),r.remove()},sMe=()=>{fe({actionCreator:Q8e,effect:async(e,{dispatch:t,getState:n})=>{const r=B_.get().child({namespace:"canvasSavedToGalleryListener"}),i=n();let o;try{o=await BS(i)}catch(s){r.error(String(s)),t(Ve({title:J("toast.problemDownloadingCanvas"),description:J("toast.problemDownloadingCanvasDesc"),status:"error"}));return}oMe(o,"canvas.png"),t(Ve({title:J("toast.canvasDownloaded"),status:"success"}))}})},aMe=()=>{fe({actionCreator:eMe,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{id:o}=e.payload;let s;try{s=await BS(i,!0)}catch(u){r.error(String(u)),t(Ve({title:J("toast.problemSavingCanvas"),description:J("toast.problemSavingCanvasDesc"),status:"error"}));return}const{autoAddBoardId:a}=i.gallery,l=await t(ce.endpoints.uploadImage.initiate({file:new File([s],"savedCanvas.png",{type:"image/png"}),image_category:"control",is_intermediate:!1,board_id:a==="none"?void 0:a,crop_visible:!1,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasSentControlnetAssets")}}})).unwrap(),{image_name:c}=l;t(Nl({id:o,controlImage:c}))}})};var NA={exports:{}},zS={},KG={},Ue={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e._registerNode=e.Konva=e.glob=void 0;const t=Math.PI/180;function n(){return typeof window<"u"&&({}.toString.call(window)==="[object Window]"||{}.toString.call(window)==="[object global]")}e.glob=typeof He<"u"?He:typeof window<"u"?window:typeof WorkerGlobalScope<"u"?self:{},e.Konva={_global:e.glob,version:"9.2.3",isBrowser:n(),isUnminified:/param/.test((function(i){}).toString()),dblClickWindow:400,getAngle(i){return e.Konva.angleDeg?i*t:i},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,pixelRatio:typeof window<"u"&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return e.Konva.DD.isDragging},isDragReady(){return!!e.Konva.DD.node},releaseCanvasOnDestroy:!0,document:e.glob.document,_injectGlobal(i){e.glob.Konva=i}};const r=i=>{e.Konva[i.prototype.getClassName()]=i};e._registerNode=r,e.Konva._injectGlobal(e.Konva)})(Ue);var Qt={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Util=e.Transform=void 0;const t=Ue;class n{constructor(b=[1,0,0,1,0,0]){this.dirty=!1,this.m=b&&b.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new n(this.m)}copyInto(b){b.m[0]=this.m[0],b.m[1]=this.m[1],b.m[2]=this.m[2],b.m[3]=this.m[3],b.m[4]=this.m[4],b.m[5]=this.m[5]}point(b){var S=this.m;return{x:S[0]*b.x+S[2]*b.y+S[4],y:S[1]*b.x+S[3]*b.y+S[5]}}translate(b,S){return this.m[4]+=this.m[0]*b+this.m[2]*S,this.m[5]+=this.m[1]*b+this.m[3]*S,this}scale(b,S){return this.m[0]*=b,this.m[1]*=b,this.m[2]*=S,this.m[3]*=S,this}rotate(b){var S=Math.cos(b),w=Math.sin(b),C=this.m[0]*S+this.m[2]*w,x=this.m[1]*S+this.m[3]*w,k=this.m[0]*-w+this.m[2]*S,A=this.m[1]*-w+this.m[3]*S;return this.m[0]=C,this.m[1]=x,this.m[2]=k,this.m[3]=A,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(b,S){var w=this.m[0]+this.m[2]*S,C=this.m[1]+this.m[3]*S,x=this.m[2]+this.m[0]*b,k=this.m[3]+this.m[1]*b;return this.m[0]=w,this.m[1]=C,this.m[2]=x,this.m[3]=k,this}multiply(b){var S=this.m[0]*b.m[0]+this.m[2]*b.m[1],w=this.m[1]*b.m[0]+this.m[3]*b.m[1],C=this.m[0]*b.m[2]+this.m[2]*b.m[3],x=this.m[1]*b.m[2]+this.m[3]*b.m[3],k=this.m[0]*b.m[4]+this.m[2]*b.m[5]+this.m[4],A=this.m[1]*b.m[4]+this.m[3]*b.m[5]+this.m[5];return this.m[0]=S,this.m[1]=w,this.m[2]=C,this.m[3]=x,this.m[4]=k,this.m[5]=A,this}invert(){var b=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),S=this.m[3]*b,w=-this.m[1]*b,C=-this.m[2]*b,x=this.m[0]*b,k=b*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),A=b*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=S,this.m[1]=w,this.m[2]=C,this.m[3]=x,this.m[4]=k,this.m[5]=A,this}getMatrix(){return this.m}decompose(){var b=this.m[0],S=this.m[1],w=this.m[2],C=this.m[3],x=this.m[4],k=this.m[5],A=b*C-S*w;let R={x,y:k,rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(b!=0||S!=0){var L=Math.sqrt(b*b+S*S);R.rotation=S>0?Math.acos(b/L):-Math.acos(b/L),R.scaleX=L,R.scaleY=A/L,R.skewX=(b*w+S*C)/A,R.skewY=0}else if(w!=0||C!=0){var M=Math.sqrt(w*w+C*C);R.rotation=Math.PI/2-(C>0?Math.acos(-w/M):-Math.acos(w/M)),R.scaleX=A/M,R.scaleY=M,R.skewX=0,R.skewY=(b*w+S*C)/A}return R.rotation=e.Util._getRotation(R.rotation),R}}e.Transform=n;var r="[object Array]",i="[object Number]",o="[object String]",s="[object Boolean]",a=Math.PI/180,l=180/Math.PI,c="#",u="",d="0",f="Konva warning: ",h="Konva error: ",p="rgb(",m={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},_=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,v=[];const y=typeof requestAnimationFrame<"u"&&requestAnimationFrame||function(g){setTimeout(g,60)};e.Util={_isElement(g){return!!(g&&g.nodeType==1)},_isFunction(g){return!!(g&&g.constructor&&g.call&&g.apply)},_isPlainObject(g){return!!g&&g.constructor===Object},_isArray(g){return Object.prototype.toString.call(g)===r},_isNumber(g){return Object.prototype.toString.call(g)===i&&!isNaN(g)&&isFinite(g)},_isString(g){return Object.prototype.toString.call(g)===o},_isBoolean(g){return Object.prototype.toString.call(g)===s},isObject(g){return g instanceof Object},isValidSelector(g){if(typeof g!="string")return!1;var b=g[0];return b==="#"||b==="."||b===b.toUpperCase()},_sign(g){return g===0||g>0?1:-1},requestAnimFrame(g){v.push(g),v.length===1&&y(function(){const b=v;v=[],b.forEach(function(S){S()})})},createCanvasElement(){var g=document.createElement("canvas");try{g.style=g.style||{}}catch{}return g},createImageElement(){return document.createElement("img")},_isInDocument(g){for(;g=g.parentNode;)if(g==document)return!0;return!1},_urlToImage(g,b){var S=e.Util.createImageElement();S.onload=function(){b(S)},S.src=g},_rgbToHex(g,b,S){return((1<<24)+(g<<16)+(b<<8)+S).toString(16).slice(1)},_hexToRgb(g){g=g.replace(c,u);var b=parseInt(g,16);return{r:b>>16&255,g:b>>8&255,b:b&255}},getRandomColor(){for(var g=(Math.random()*16777215<<0).toString(16);g.length<6;)g=d+g;return c+g},getRGB(g){var b;return g in m?(b=m[g],{r:b[0],g:b[1],b:b[2]}):g[0]===c?this._hexToRgb(g.substring(1)):g.substr(0,4)===p?(b=_.exec(g.replace(/ /g,"")),{r:parseInt(b[1],10),g:parseInt(b[2],10),b:parseInt(b[3],10)}):{r:0,g:0,b:0}},colorToRGBA(g){return g=g||"black",e.Util._namedColorToRBA(g)||e.Util._hex3ColorToRGBA(g)||e.Util._hex4ColorToRGBA(g)||e.Util._hex6ColorToRGBA(g)||e.Util._hex8ColorToRGBA(g)||e.Util._rgbColorToRGBA(g)||e.Util._rgbaColorToRGBA(g)||e.Util._hslColorToRGBA(g)},_namedColorToRBA(g){var b=m[g.toLowerCase()];return b?{r:b[0],g:b[1],b:b[2],a:1}:null},_rgbColorToRGBA(g){if(g.indexOf("rgb(")===0){g=g.match(/rgb\(([^)]+)\)/)[1];var b=g.split(/ *, */).map(Number);return{r:b[0],g:b[1],b:b[2],a:1}}},_rgbaColorToRGBA(g){if(g.indexOf("rgba(")===0){g=g.match(/rgba\(([^)]+)\)/)[1];var b=g.split(/ *, */).map((S,w)=>S.slice(-1)==="%"?w===3?parseInt(S)/100:parseInt(S)/100*255:Number(S));return{r:b[0],g:b[1],b:b[2],a:b[3]}}},_hex8ColorToRGBA(g){if(g[0]==="#"&&g.length===9)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:parseInt(g.slice(7,9),16)/255}},_hex6ColorToRGBA(g){if(g[0]==="#"&&g.length===7)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:1}},_hex4ColorToRGBA(g){if(g[0]==="#"&&g.length===5)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:parseInt(g[4]+g[4],16)/255}},_hex3ColorToRGBA(g){if(g[0]==="#"&&g.length===4)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:1}},_hslColorToRGBA(g){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(g)){const[b,...S]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(g),w=Number(S[0])/360,C=Number(S[1])/100,x=Number(S[2])/100;let k,A,R;if(C===0)return R=x*255,{r:Math.round(R),g:Math.round(R),b:Math.round(R),a:1};x<.5?k=x*(1+C):k=x+C-x*C;const L=2*x-k,M=[0,0,0];for(let E=0;E<3;E++)A=w+1/3*-(E-1),A<0&&A++,A>1&&A--,6*A<1?R=L+(k-L)*6*A:2*A<1?R=k:3*A<2?R=L+(k-L)*(2/3-A)*6:R=L,M[E]=R*255;return{r:Math.round(M[0]),g:Math.round(M[1]),b:Math.round(M[2]),a:1}}},haveIntersection(g,b){return!(b.x>g.x+g.width||b.x+b.widthg.y+g.height||b.y+b.height1?(k=S,A=w,R=(S-C)*(S-C)+(w-x)*(w-x)):(k=g+M*(S-g),A=b+M*(w-b),R=(k-C)*(k-C)+(A-x)*(A-x))}return[k,A,R]},_getProjectionToLine(g,b,S){var w=e.Util.cloneObject(g),C=Number.MAX_VALUE;return b.forEach(function(x,k){if(!(!S&&k===b.length-1)){var A=b[(k+1)%b.length],R=e.Util._getProjectionToSegment(x.x,x.y,A.x,A.y,g.x,g.y),L=R[0],M=R[1],E=R[2];Eb.length){var k=b;b=g,g=k}for(w=0;w{b.width=0,b.height=0})},drawRoundedRectPath(g,b,S,w){let C=0,x=0,k=0,A=0;typeof w=="number"?C=x=k=A=Math.min(w,b/2,S/2):(C=Math.min(w[0]||0,b/2,S/2),x=Math.min(w[1]||0,b/2,S/2),A=Math.min(w[2]||0,b/2,S/2),k=Math.min(w[3]||0,b/2,S/2)),g.moveTo(C,0),g.lineTo(b-x,0),g.arc(b-x,x,x,Math.PI*3/2,0,!1),g.lineTo(b,S-A),g.arc(b-A,S-A,A,0,Math.PI/2,!1),g.lineTo(k,S),g.arc(k,S-k,k,Math.PI/2,Math.PI,!1),g.lineTo(0,C),g.arc(C,C,C,Math.PI,Math.PI*3/2,!1)}}})(Qt);var Vt={},ze={},xe={};Object.defineProperty(xe,"__esModule",{value:!0});xe.getComponentValidator=xe.getBooleanValidator=xe.getNumberArrayValidator=xe.getFunctionValidator=xe.getStringOrGradientValidator=xe.getStringValidator=xe.getNumberOrAutoValidator=xe.getNumberOrArrayOfNumbersValidator=xe.getNumberValidator=xe.alphaComponent=xe.RGBComponent=void 0;const va=Ue,nn=Qt;function ba(e){return nn.Util._isString(e)?'"'+e+'"':Object.prototype.toString.call(e)==="[object Number]"||nn.Util._isBoolean(e)?e:Object.prototype.toString.call(e)}function lMe(e){return e>255?255:e<0?0:Math.round(e)}xe.RGBComponent=lMe;function cMe(e){return e>1?1:e<1e-4?1e-4:e}xe.alphaComponent=cMe;function uMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isNumber(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a number.'),e}}xe.getNumberValidator=uMe;function dMe(e){if(va.Konva.isUnminified)return function(t,n){let r=nn.Util._isNumber(t),i=nn.Util._isArray(t)&&t.length==e;return!r&&!i&&nn.Util.warn(ba(t)+' is a not valid value for "'+n+'" attribute. The value should be a number or Array('+e+")"),t}}xe.getNumberOrArrayOfNumbersValidator=dMe;function fMe(){if(va.Konva.isUnminified)return function(e,t){var n=nn.Util._isNumber(e),r=e==="auto";return n||r||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a number or "auto".'),e}}xe.getNumberOrAutoValidator=fMe;function hMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isString(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a string.'),e}}xe.getStringValidator=hMe;function pMe(){if(va.Konva.isUnminified)return function(e,t){const n=nn.Util._isString(e),r=Object.prototype.toString.call(e)==="[object CanvasGradient]"||e&&e.addColorStop;return n||r||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a string or a native gradient.'),e}}xe.getStringOrGradientValidator=pMe;function gMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isFunction(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a function.'),e}}xe.getFunctionValidator=gMe;function mMe(){if(va.Konva.isUnminified)return function(e,t){const n=Int8Array?Object.getPrototypeOf(Int8Array):null;return n&&e instanceof n||(nn.Util._isArray(e)?e.forEach(function(r){nn.Util._isNumber(r)||nn.Util.warn('"'+t+'" attribute has non numeric element '+r+". Make sure that all elements are numbers.")}):nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a array of numbers.')),e}}xe.getNumberArrayValidator=mMe;function yMe(){if(va.Konva.isUnminified)return function(e,t){var n=e===!0||e===!1;return n||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a boolean.'),e}}xe.getBooleanValidator=yMe;function vMe(e){if(va.Konva.isUnminified)return function(t,n){return t==null||nn.Util.isObject(t)||nn.Util.warn(ba(t)+' is a not valid value for "'+n+'" attribute. The value should be an object with properties '+e),t}}xe.getComponentValidator=vMe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Factory=void 0;const t=Qt,n=xe;var r="get",i="set";e.Factory={addGetterSetter(o,s,a,l,c){e.Factory.addGetter(o,s,a),e.Factory.addSetter(o,s,l,c),e.Factory.addOverloadedGetterSetter(o,s)},addGetter(o,s,a){var l=r+t.Util._capitalize(s);o.prototype[l]=o.prototype[l]||function(){var c=this.attrs[s];return c===void 0?a:c}},addSetter(o,s,a,l){var c=i+t.Util._capitalize(s);o.prototype[c]||e.Factory.overWriteSetter(o,s,a,l)},overWriteSetter(o,s,a,l){var c=i+t.Util._capitalize(s);o.prototype[c]=function(u){return a&&u!==void 0&&u!==null&&(u=a.call(this,u,s)),this._setAttr(s,u),l&&l.call(this),this}},addComponentsGetterSetter(o,s,a,l,c){var u=a.length,d=t.Util._capitalize,f=r+d(s),h=i+d(s),p,m;o.prototype[f]=function(){var v={};for(p=0;p{this._setAttr(s+d(b),void 0)}),this._fireChangeEvent(s,y,v),c&&c.call(this),this},e.Factory.addOverloadedGetterSetter(o,s)},addOverloadedGetterSetter(o,s){var a=t.Util._capitalize(s),l=i+a,c=r+a;o.prototype[s]=function(){return arguments.length?(this[l](arguments[0]),this):this[c]()}},addDeprecatedGetterSetter(o,s,a,l){t.Util.error("Adding deprecated "+s);var c=r+t.Util._capitalize(s),u=s+" property is deprecated and will be removed soon. Look at Konva change log for more information.";o.prototype[c]=function(){t.Util.error(u);var d=this.attrs[s];return d===void 0?a:d},e.Factory.addSetter(o,s,l,function(){t.Util.error(u)}),e.Factory.addOverloadedGetterSetter(o,s)},backCompat(o,s){t.Util.each(s,function(a,l){var c=o.prototype[l],u=r+t.Util._capitalize(a),d=i+t.Util._capitalize(a);function f(){c.apply(this,arguments),t.Util.error('"'+a+'" method is deprecated and will be removed soon. Use ""'+l+'" instead.')}o.prototype[a]=f,o.prototype[u]=f,o.prototype[d]=f})},afterSetFilter(){this._filterUpToDate=!1}}})(ze);var Ro={},ia={};Object.defineProperty(ia,"__esModule",{value:!0});ia.HitContext=ia.SceneContext=ia.Context=void 0;const XG=Qt,bMe=Ue;function _Me(e){var t=[],n=e.length,r=XG.Util,i,o;for(i=0;itypeof u=="number"?Math.floor(u):u)),o+=SMe+c.join(hR)+xMe)):(o+=a.property,t||(o+=AMe+a.val)),o+=EMe;return o}clearTrace(){this.traceArr=[]}_trace(t){var n=this.traceArr,r;n.push(t),r=n.length,r>=PMe&&n.shift()}reset(){var t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){var n=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,n.getWidth()/n.pixelRatio,n.getHeight()/n.pixelRatio)}_applyLineCap(t){const n=t.attrs.lineCap;n&&this.setAttr("lineCap",n)}_applyOpacity(t){var n=t.getAbsoluteOpacity();n!==1&&this.setAttr("globalAlpha",n)}_applyLineJoin(t){const n=t.attrs.lineJoin;n&&this.setAttr("lineJoin",n)}setAttr(t,n){this._context[t]=n}arc(t,n,r,i,o,s){this._context.arc(t,n,r,i,o,s)}arcTo(t,n,r,i,o){this._context.arcTo(t,n,r,i,o)}beginPath(){this._context.beginPath()}bezierCurveTo(t,n,r,i,o,s){this._context.bezierCurveTo(t,n,r,i,o,s)}clearRect(t,n,r,i){this._context.clearRect(t,n,r,i)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,n){var r=arguments;if(r.length===2)return this._context.createImageData(t,n);if(r.length===1)return this._context.createImageData(t)}createLinearGradient(t,n,r,i){return this._context.createLinearGradient(t,n,r,i)}createPattern(t,n){return this._context.createPattern(t,n)}createRadialGradient(t,n,r,i,o,s){return this._context.createRadialGradient(t,n,r,i,o,s)}drawImage(t,n,r,i,o,s,a,l,c){var u=arguments,d=this._context;u.length===3?d.drawImage(t,n,r):u.length===5?d.drawImage(t,n,r,i,o):u.length===9&&d.drawImage(t,n,r,i,o,s,a,l,c)}ellipse(t,n,r,i,o,s,a,l){this._context.ellipse(t,n,r,i,o,s,a,l)}isPointInPath(t,n,r,i){return r?this._context.isPointInPath(r,t,n,i):this._context.isPointInPath(t,n,i)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,n,r,i){this._context.fillRect(t,n,r,i)}strokeRect(t,n,r,i){this._context.strokeRect(t,n,r,i)}fillText(t,n,r,i){i?this._context.fillText(t,n,r,i):this._context.fillText(t,n,r)}measureText(t){return this._context.measureText(t)}getImageData(t,n,r,i){return this._context.getImageData(t,n,r,i)}lineTo(t,n){this._context.lineTo(t,n)}moveTo(t,n){this._context.moveTo(t,n)}rect(t,n,r,i){this._context.rect(t,n,r,i)}putImageData(t,n,r){this._context.putImageData(t,n,r)}quadraticCurveTo(t,n,r,i){this._context.quadraticCurveTo(t,n,r,i)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,n){this._context.scale(t,n)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):"mozDash"in this._context?this._context.mozDash=t:"webkitLineDash"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,n,r,i,o,s){this._context.setTransform(t,n,r,i,o,s)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,n,r,i){this._context.strokeText(t,n,r,i)}transform(t,n,r,i,o,s){this._context.transform(t,n,r,i,o,s)}translate(t,n){this._context.translate(t,n)}_enableTrace(){var t=this,n=pR.length,r=this.setAttr,i,o,s=function(a){var l=t[a],c;t[a]=function(){return o=_Me(Array.prototype.slice.call(arguments,0)),c=l.apply(t,arguments),t._trace({method:a,args:o}),c}};for(i=0;i{i.dragStatus==="dragging"&&(r=!0)}),r},justDragged:!1,get node(){var r;return e.DD._dragElements.forEach(i=>{r=i.node}),r},_dragElements:new Map,_drag(r){const i=[];e.DD._dragElements.forEach((o,s)=>{const{node:a}=o,l=a.getStage();l.setPointersPositions(r),o.pointerId===void 0&&(o.pointerId=n.Util._getFirstPointerId(r));const c=l._changedPointerPositions.find(f=>f.id===o.pointerId);if(c){if(o.dragStatus!=="dragging"){var u=a.dragDistance(),d=Math.max(Math.abs(c.x-o.startPointerPos.x),Math.abs(c.y-o.startPointerPos.y));if(d{o.fire("dragmove",{type:"dragmove",target:o,evt:r},!0)})},_endDragBefore(r){const i=[];e.DD._dragElements.forEach(o=>{const{node:s}=o,a=s.getStage();if(r&&a.setPointersPositions(r),!a._changedPointerPositions.find(u=>u.id===o.pointerId))return;(o.dragStatus==="dragging"||o.dragStatus==="stopped")&&(e.DD.justDragged=!0,t.Konva._mouseListenClick=!1,t.Konva._touchListenClick=!1,t.Konva._pointerListenClick=!1,o.dragStatus="stopped");const c=o.node.getLayer()||o.node instanceof t.Konva.Stage&&o.node;c&&i.indexOf(c)===-1&&i.push(c)}),i.forEach(o=>{o.draw()})},_endDragAfter(r){e.DD._dragElements.forEach((i,o)=>{i.dragStatus==="stopped"&&i.node.fire("dragend",{type:"dragend",target:i.node,evt:r},!0),i.dragStatus!=="dragging"&&e.DD._dragElements.delete(o)})}},t.Konva.isBrowser&&(window.addEventListener("mouseup",e.DD._endDragBefore,!0),window.addEventListener("touchend",e.DD._endDragBefore,!0),window.addEventListener("mousemove",e.DD._drag),window.addEventListener("touchmove",e.DD._drag),window.addEventListener("mouseup",e.DD._endDragAfter,!1),window.addEventListener("touchend",e.DD._endDragAfter,!1))})(US);Object.defineProperty(Vt,"__esModule",{value:!0});Vt.Node=void 0;const We=Qt,t0=ze,Cy=Ro,Jl=Ue,Bi=US,dn=xe;var Sv="absoluteOpacity",Ey="allEventListeners",Ds="absoluteTransform",gR="absoluteScale",ec="canvas",DMe="Change",LMe="children",BMe="konva",q3="listening",mR="mouseenter",yR="mouseleave",vR="set",bR="Shape",xv=" ",_R="stage",Fa="transform",zMe="Stage",K3="visible",jMe=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(xv);let VMe=1;class $e{constructor(t){this._id=VMe++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){(t===Fa||t===Ds)&&this._cache.get(t)?this._cache.get(t).dirty=!0:t?this._cache.delete(t):this._cache.clear()}_getCache(t,n){var r=this._cache.get(t),i=t===Fa||t===Ds,o=r===void 0||i&&r.dirty===!0;return o&&(r=n.call(this),this._cache.set(t,r)),r}_calculate(t,n,r){if(!this._attachedDepsListeners.get(t)){const i=n.map(o=>o+"Change.konva").join(xv);this.on(i,()=>{this._clearCache(t)}),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,r)}_getCanvasCache(){return this._cache.get(ec)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===Ds&&this.fire("absoluteTransformChange")}clearCache(){if(this._cache.has(ec)){const{scene:t,filter:n,hit:r}=this._cache.get(ec);We.Util.releaseCanvas(t,n,r),this._cache.delete(ec)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){var n=t||{},r={};(n.x===void 0||n.y===void 0||n.width===void 0||n.height===void 0)&&(r=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));var i=Math.ceil(n.width||r.width),o=Math.ceil(n.height||r.height),s=n.pixelRatio,a=n.x===void 0?Math.floor(r.x):n.x,l=n.y===void 0?Math.floor(r.y):n.y,c=n.offset||0,u=n.drawBorder||!1,d=n.hitCanvasPixelRatio||1;if(!i||!o){We.Util.error("Can not cache the node. Width or height of the node equals 0. Caching is skipped.");return}i+=c*2+1,o+=c*2+1,a-=c,l-=c;var f=new Cy.SceneCanvas({pixelRatio:s,width:i,height:o}),h=new Cy.SceneCanvas({pixelRatio:s,width:0,height:0,willReadFrequently:!0}),p=new Cy.HitCanvas({pixelRatio:d,width:i,height:o}),m=f.getContext(),_=p.getContext();return p.isCache=!0,f.isCache=!0,this._cache.delete(ec),this._filterUpToDate=!1,n.imageSmoothingEnabled===!1&&(f.getContext()._context.imageSmoothingEnabled=!1,h.getContext()._context.imageSmoothingEnabled=!1),m.save(),_.save(),m.translate(-a,-l),_.translate(-a,-l),this._isUnderCache=!0,this._clearSelfAndDescendantCache(Sv),this._clearSelfAndDescendantCache(gR),this.drawScene(f,this),this.drawHit(p,this),this._isUnderCache=!1,m.restore(),_.restore(),u&&(m.save(),m.beginPath(),m.rect(0,0,i,o),m.closePath(),m.setAttr("strokeStyle","red"),m.setAttr("lineWidth",5),m.stroke(),m.restore()),this._cache.set(ec,{scene:f,filter:h,hit:p,x:a,y:l}),this._requestDraw(),this}isCached(){return this._cache.has(ec)}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_transformedRect(t,n){var r=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}],i=1/0,o=1/0,s=-1/0,a=-1/0,l=this.getAbsoluteTransform(n);return r.forEach(function(c){var u=l.point(c);i===void 0&&(i=s=u.x,o=a=u.y),i=Math.min(i,u.x),o=Math.min(o,u.y),s=Math.max(s,u.x),a=Math.max(a,u.y)}),{x:i,y:o,width:s-i,height:a-o}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const n=this._getCanvasCache();t.translate(n.x,n.y);var r=this._getCachedSceneCanvas(),i=r.pixelRatio;t.drawImage(r._canvas,0,0,r.width/i,r.height/i),t.restore()}_drawCachedHitCanvas(t){var n=this._getCanvasCache(),r=n.hit;t.save(),t.translate(n.x,n.y),t.drawImage(r._canvas,0,0,r.width/r.pixelRatio,r.height/r.pixelRatio),t.restore()}_getCachedSceneCanvas(){var t=this.filters(),n=this._getCanvasCache(),r=n.scene,i=n.filter,o=i.getContext(),s,a,l,c;if(t){if(!this._filterUpToDate){var u=r.pixelRatio;i.setSize(r.width/r.pixelRatio,r.height/r.pixelRatio);try{for(s=t.length,o.clear(),o.drawImage(r._canvas,0,0,r.getWidth()/u,r.getHeight()/u),a=o.getImageData(0,0,i.getWidth(),i.getHeight()),l=0;l{var n,r;if(!t)return this;for(n in t)n!==LMe&&(r=vR+We.Util._capitalize(n),We.Util._isFunction(this[r])?this[r](t[n]):this._setAttr(n,t[n]))}),this}isListening(){return this._getCache(q3,this._isListening)}_isListening(t){if(!this.listening())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isListening(t):!0}isVisible(){return this._getCache(K3,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isVisible(t):!0}shouldDrawHit(t,n=!1){if(t)return this._isVisible(t)&&this._isListening(t);var r=this.getLayer(),i=!1;Bi.DD._dragElements.forEach(s=>{s.dragStatus==="dragging"&&(s.node.nodeType==="Stage"||s.node.getLayer()===r)&&(i=!0)});var o=!n&&!Jl.Konva.hitOnDragEnabled&&i;return this.isListening()&&this.isVisible()&&!o}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){var t=this.getDepth(),n=this,r=0,i,o,s,a;function l(u){for(i=[],o=u.length,s=0;s0&&i[0].getDepth()<=t&&l(i)}const c=this.getStage();return n.nodeType!==zMe&&c&&l(c.getChildren()),r}getDepth(){for(var t=0,n=this.parent;n;)t++,n=n.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(Fa),this._clearSelfAndDescendantCache(Ds)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges(()=>{this.x(t.x),this.y(t.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const t=this.getStage();if(!t)return null;var n=t.getPointerPosition();if(!n)return null;var r=this.getAbsoluteTransform().copy();return r.invert(),r.point(n)}getAbsolutePosition(t){let n=!1,r=this.parent;for(;r;){if(r.isCached()){n=!0;break}r=r.parent}n&&!t&&(t=!0);var i=this.getAbsoluteTransform(t).getMatrix(),o=new We.Transform,s=this.offset();return o.m=i.slice(),o.translate(s.x,s.y),o.getTranslation()}setAbsolutePosition(t){const{x:n,y:r,...i}=this._clearTransform();this.attrs.x=n,this.attrs.y=r,this._clearCache(Fa);var o=this._getAbsoluteTransform().copy();return o.invert(),o.translate(t.x,t.y),t={x:this.attrs.x+o.getTranslation().x,y:this.attrs.y+o.getTranslation().y},this._setTransform(i),this.setPosition({x:t.x,y:t.y}),this._clearCache(Fa),this._clearSelfAndDescendantCache(Ds),this}_setTransform(t){var n;for(n in t)this.attrs[n]=t[n]}_clearTransform(){var t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){var n=t.x,r=t.y,i=this.x(),o=this.y();return n!==void 0&&(i+=n),r!==void 0&&(o+=r),this.setPosition({x:i,y:o}),this}_eachAncestorReverse(t,n){var r=[],i=this.getParent(),o,s;if(!(n&&n._id===this._id)){for(r.unshift(this);i&&(!n||i._id!==n._id);)r.unshift(i),i=i.parent;for(o=r.length,s=0;s0?(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0):!1}moveToBottom(){if(!this.parent)return We.Util.warn("Node has no parent. moveToBottom function is ignored."),!1;var t=this.index;return t>0?(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0):!1}setZIndex(t){if(!this.parent)return We.Util.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&We.Util.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");var n=this.index;return this.parent.children.splice(n,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(Sv,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){var t=this.opacity(),n=this.getParent();return n&&!n._isUnderCache&&(t*=n.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){var t={},n=this.getAttrs(),r,i,o,s,a;t.attrs={};for(r in n)i=n[r],a=We.Util.isObject(i)&&!We.Util._isPlainObject(i)&&!We.Util._isArray(i),!a&&(o=typeof this[r]=="function"&&this[r],delete n[r],s=o?o.call(this):null,n[r]=i,s!==i&&(t.attrs[r]=i));return t.className=this.getClassName(),We.Util._prepareToStringify(t)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,n,r){var i=[];n&&this._isMatch(t)&&i.push(this);for(var o=this.parent;o;){if(o===r)return i;o._isMatch(t)&&i.push(o),o=o.parent}return i}isAncestorOf(t){return!1}findAncestor(t,n,r){return this.findAncestors(t,n,r)[0]}_isMatch(t){if(!t)return!1;if(typeof t=="function")return t(this);var n=t.replace(/ /g,"").split(","),r=n.length,i,o;for(i=0;i{try{const i=t==null?void 0:t.callback;i&&delete t.callback,We.Util._urlToImage(this.toDataURL(t),function(o){n(o),i==null||i(o)})}catch(i){r(i)}})}toBlob(t){return new Promise((n,r)=>{try{const i=t==null?void 0:t.callback;i&&delete t.callback,this.toCanvas(t).toBlob(o=>{n(o),i==null||i(o)})}catch(i){r(i)}})}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return this.attrs.dragDistance!==void 0?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():Jl.Konva.dragDistance}_off(t,n,r){var i=this.eventListeners[t],o,s,a;for(o=0;o=0;if(r&&!this.isDragging()){var i=!1;Bi.DD._dragElements.forEach(o=>{this.isAncestorOf(o.node)&&(i=!0)}),i||this._createDragElement(t)}})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();var t=this.getStage();if(!t)return;const n=Bi.DD._dragElements.get(this._id),r=n&&n.dragStatus==="dragging",i=n&&n.dragStatus==="ready";r?this.stopDrag():i&&Bi.DD._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const n=this.getStage();if(!n)return!1;const r={x:-t.x,y:-t.y,width:n.width()+2*t.x,height:n.height()+2*t.y};return We.Util.haveIntersection(r,this.getClientRect())}static create(t,n){return We.Util._isString(t)&&(t=JSON.parse(t)),this._createNode(t,n)}static _createNode(t,n){var r=$e.prototype.getClassName.call(t),i=t.children,o,s,a;n&&(t.attrs.container=n),Jl.Konva[r]||(We.Util.warn('Can not find a node with class name "'+r+'". Fallback to "Shape".'),r="Shape");const l=Jl.Konva[r];if(o=new l(t.attrs),i)for(s=i.length,a=0;a0}removeChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.destroy()}),this.children=[],this._requestDraw(),this}add(...t){if(t.length===0)return this;if(t.length>1){for(var n=0;n0?n[0]:void 0}_generalFind(t,n){var r=[];return this._descendants(i=>{const o=i._isMatch(t);return o&&r.push(i),!!(o&&n)}),r}_descendants(t){let n=!1;const r=this.getChildren();for(const i of r){if(n=t(i),n)return!0;if(i.hasChildren()&&(n=i._descendants(t),n))return!0}return!1}toObject(){var t=Jw.Node.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach(n=>{t.children.push(n.toObject())}),t}isAncestorOf(t){for(var n=t.getParent();n;){if(n._id===this._id)return!0;n=n.getParent()}return!1}clone(t){var n=Jw.Node.prototype.clone.call(this,t);return this.getChildren().forEach(function(r){n.add(r.clone())}),n}getAllIntersections(t){var n=[];return this.find("Shape").forEach(r=>{r.isVisible()&&r.intersects(t)&&n.push(r)}),n}_clearSelfAndDescendantCache(t){var n;super._clearSelfAndDescendantCache(t),!this.isCached()&&((n=this.children)===null||n===void 0||n.forEach(function(r){r._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;(t=this.children)===null||t===void 0||t.forEach(function(n,r){n.index=r}),this._requestDraw()}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas(),o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.scene,l=i&&i.isCache;if(!this.isVisible()&&!l)return this;if(a){o.save();var c=this.getAbsoluteTransform(n).getMatrix();o.transform(c[0],c[1],c[2],c[3],c[4],c[5]),this._drawCachedSceneCanvas(o),o.restore()}else this._drawChildren("drawScene",i,n);return this}drawHit(t,n){if(!this.shouldDrawHit(n))return this;var r=this.getLayer(),i=t||r&&r.hitCanvas,o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.hit;if(a){o.save();var l=this.getAbsoluteTransform(n).getMatrix();o.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedHitCanvas(o),o.restore()}else this._drawChildren("drawHit",i,n);return this}_drawChildren(t,n,r){var i,o=n&&n.getContext(),s=this.clipWidth(),a=this.clipHeight(),l=this.clipFunc(),c=s&&a||l;const u=r===this;if(c){o.save();var d=this.getAbsoluteTransform(r),f=d.getMatrix();o.transform(f[0],f[1],f[2],f[3],f[4],f[5]),o.beginPath();let _;if(l)_=l.call(this,o,this);else{var h=this.clipX(),p=this.clipY();o.rect(h,p,s,a)}o.clip.apply(o,_),f=d.copy().invert().getMatrix(),o.transform(f[0],f[1],f[2],f[3],f[4],f[5])}var m=!u&&this.globalCompositeOperation()!=="source-over"&&t==="drawScene";m&&(o.save(),o._applyGlobalCompositeOperation(this)),(i=this.children)===null||i===void 0||i.forEach(function(_){_[t](n,r)}),m&&o.restore(),c&&o.restore()}getClientRect(t={}){var n,r=t.skipTransform,i=t.relativeTo,o,s,a,l,c={x:1/0,y:1/0,width:0,height:0},u=this;(n=this.children)===null||n===void 0||n.forEach(function(m){if(m.visible()){var _=m.getClientRect({relativeTo:u,skipShadow:t.skipShadow,skipStroke:t.skipStroke});_.width===0&&_.height===0||(o===void 0?(o=_.x,s=_.y,a=_.x+_.width,l=_.y+_.height):(o=Math.min(o,_.x),s=Math.min(s,_.y),a=Math.max(a,_.x+_.width),l=Math.max(l,_.y+_.height)))}});for(var d=this.find("Shape"),f=!1,h=0;hee.indexOf("pointer")>=0?"pointer":ee.indexOf("touch")>=0?"touch":"mouse",V=ee=>{const j=z(ee);if(j==="pointer")return i.Konva.pointerEventsEnabled&&N.pointer;if(j==="touch")return N.touch;if(j==="mouse")return N.mouse};function H(ee={}){return(ee.clipFunc||ee.clipWidth||ee.clipHeight)&&t.Util.warn("Stage does not support clipping. Please use clip for Layers or Groups."),ee}const X="Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);";e.stages=[];class te extends r.Container{constructor(j){super(H(j)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),e.stages.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",()=>{H(this.attrs)}),this._checkVisibility()}_validateAdd(j){const q=j.getType()==="Layer",Z=j.getType()==="FastLayer";q||Z||t.Util.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const j=this.visible()?"":"none";this.content.style.display=j}setContainer(j){if(typeof j===u){if(j.charAt(0)==="."){var q=j.slice(1);j=document.getElementsByClassName(q)[0]}else{var Z;j.charAt(0)!=="#"?Z=j:Z=j.slice(1),j=document.getElementById(Z)}if(!j)throw"Can not find container in document with id "+Z}return this._setAttr("container",j),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),j.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){var j=this.children,q=j.length,Z;for(Z=0;Z-1&&e.stages.splice(q,1),t.Util.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const j=this._pointerPositions[0]||this._changedPointerPositions[0];return j?{x:j.x,y:j.y}:(t.Util.warn(X),null)}_getPointerById(j){return this._pointerPositions.find(q=>q.id===j)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(j){j=j||{},j.x=j.x||0,j.y=j.y||0,j.width=j.width||this.width(),j.height=j.height||this.height();var q=new o.SceneCanvas({width:j.width,height:j.height,pixelRatio:j.pixelRatio||1}),Z=q.getContext()._context,oe=this.children;return(j.x||j.y)&&Z.translate(-1*j.x,-1*j.y),oe.forEach(function(be){if(be.isVisible()){var Me=be._toKonvaCanvas(j);Z.drawImage(Me._canvas,j.x,j.y,Me.getWidth()/Me.getPixelRatio(),Me.getHeight()/Me.getPixelRatio())}}),q}getIntersection(j){if(!j)return null;var q=this.children,Z=q.length,oe=Z-1,be;for(be=oe;be>=0;be--){const Me=q[be].getIntersection(j);if(Me)return Me}return null}_resizeDOM(){var j=this.width(),q=this.height();this.content&&(this.content.style.width=j+d,this.content.style.height=q+d),this.bufferCanvas.setSize(j,q),this.bufferHitCanvas.setSize(j,q),this.children.forEach(Z=>{Z.setSize({width:j,height:q}),Z.draw()})}add(j,...q){if(arguments.length>1){for(var Z=0;Z$&&t.Util.warn("The stage has "+oe+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),j.setSize({width:this.width(),height:this.height()}),j.draw(),i.Konva.isBrowser&&this.content.appendChild(j.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(j){return l.hasPointerCapture(j,this)}setPointerCapture(j){l.setPointerCapture(j,this)}releaseCapture(j){l.releaseCapture(j,this)}getLayers(){return this.children}_bindContentEvents(){i.Konva.isBrowser&&D.forEach(([j,q])=>{this.content.addEventListener(j,Z=>{this[q](Z)},{passive:!1})})}_pointerenter(j){this.setPointersPositions(j);const q=V(j.type);q&&this._fire(q.pointerenter,{evt:j,target:this,currentTarget:this})}_pointerover(j){this.setPointersPositions(j);const q=V(j.type);q&&this._fire(q.pointerover,{evt:j,target:this,currentTarget:this})}_getTargetShape(j){let q=this[j+"targetShape"];return q&&!q.getStage()&&(q=null),q}_pointerleave(j){const q=V(j.type),Z=z(j.type);if(q){this.setPointersPositions(j);var oe=this._getTargetShape(Z),be=!s.DD.isDragging||i.Konva.hitOnDragEnabled;oe&&be?(oe._fireAndBubble(q.pointerout,{evt:j}),oe._fireAndBubble(q.pointerleave,{evt:j}),this._fire(q.pointerleave,{evt:j,target:this,currentTarget:this}),this[Z+"targetShape"]=null):be&&(this._fire(q.pointerleave,{evt:j,target:this,currentTarget:this}),this._fire(q.pointerout,{evt:j,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}}_pointerdown(j){const q=V(j.type),Z=z(j.type);if(q){this.setPointersPositions(j);var oe=!1;this._changedPointerPositions.forEach(be=>{var Me=this.getIntersection(be);if(s.DD.justDragged=!1,i.Konva["_"+Z+"ListenClick"]=!0,!Me||!Me.isListening())return;i.Konva.capturePointerEventsEnabled&&Me.setPointerCapture(be.id),this[Z+"ClickStartShape"]=Me,Me._fireAndBubble(q.pointerdown,{evt:j,pointerId:be.id}),oe=!0;const lt=j.type.indexOf("touch")>=0;Me.preventDefault()&&j.cancelable&<&&j.preventDefault()}),oe||this._fire(q.pointerdown,{evt:j,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}}_pointermove(j){const q=V(j.type),Z=z(j.type);if(!q)return;s.DD.isDragging&&s.DD.node.preventDefault()&&j.cancelable&&j.preventDefault(),this.setPointersPositions(j);var oe=!s.DD.isDragging||i.Konva.hitOnDragEnabled;if(!oe)return;var be={};let Me=!1;var lt=this._getTargetShape(Z);this._changedPointerPositions.forEach(Le=>{const we=l.getCapturedShape(Le.id)||this.getIntersection(Le),pt=Le.id,vt={evt:j,pointerId:pt};var Ce=lt!==we;if(Ce&<&&(lt._fireAndBubble(q.pointerout,{...vt},we),lt._fireAndBubble(q.pointerleave,{...vt},we)),we){if(be[we._id])return;be[we._id]=!0}we&&we.isListening()?(Me=!0,Ce&&(we._fireAndBubble(q.pointerover,{...vt},lt),we._fireAndBubble(q.pointerenter,{...vt},lt),this[Z+"targetShape"]=we),we._fireAndBubble(q.pointermove,{...vt})):lt&&(this._fire(q.pointerover,{evt:j,target:this,currentTarget:this,pointerId:pt}),this[Z+"targetShape"]=null)}),Me||this._fire(q.pointermove,{evt:j,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(j){const q=V(j.type),Z=z(j.type);if(!q)return;this.setPointersPositions(j);const oe=this[Z+"ClickStartShape"],be=this[Z+"ClickEndShape"];var Me={};let lt=!1;this._changedPointerPositions.forEach(Le=>{const we=l.getCapturedShape(Le.id)||this.getIntersection(Le);if(we){if(we.releaseCapture(Le.id),Me[we._id])return;Me[we._id]=!0}const pt=Le.id,vt={evt:j,pointerId:pt};let Ce=!1;i.Konva["_"+Z+"InDblClickWindow"]?(Ce=!0,clearTimeout(this[Z+"DblTimeout"])):s.DD.justDragged||(i.Konva["_"+Z+"InDblClickWindow"]=!0,clearTimeout(this[Z+"DblTimeout"])),this[Z+"DblTimeout"]=setTimeout(function(){i.Konva["_"+Z+"InDblClickWindow"]=!1},i.Konva.dblClickWindow),we&&we.isListening()?(lt=!0,this[Z+"ClickEndShape"]=we,we._fireAndBubble(q.pointerup,{...vt}),i.Konva["_"+Z+"ListenClick"]&&oe&&oe===we&&(we._fireAndBubble(q.pointerclick,{...vt}),Ce&&be&&be===we&&we._fireAndBubble(q.pointerdblclick,{...vt}))):(this[Z+"ClickEndShape"]=null,i.Konva["_"+Z+"ListenClick"]&&this._fire(q.pointerclick,{evt:j,target:this,currentTarget:this,pointerId:pt}),Ce&&this._fire(q.pointerdblclick,{evt:j,target:this,currentTarget:this,pointerId:pt}))}),lt||this._fire(q.pointerup,{evt:j,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),i.Konva["_"+Z+"ListenClick"]=!1,j.cancelable&&Z!=="touch"&&j.preventDefault()}_contextmenu(j){this.setPointersPositions(j);var q=this.getIntersection(this.getPointerPosition());q&&q.isListening()?q._fireAndBubble(L,{evt:j}):this._fire(L,{evt:j,target:this,currentTarget:this})}_wheel(j){this.setPointersPositions(j);var q=this.getIntersection(this.getPointerPosition());q&&q.isListening()?q._fireAndBubble(F,{evt:j}):this._fire(F,{evt:j,target:this,currentTarget:this})}_pointercancel(j){this.setPointersPositions(j);const q=l.getCapturedShape(j.pointerId)||this.getIntersection(this.getPointerPosition());q&&q._fireAndBubble(S,l.createEvent(j)),l.releaseCapture(j.pointerId)}_lostpointercapture(j){l.releaseCapture(j.pointerId)}setPointersPositions(j){var q=this._getContentPosition(),Z=null,oe=null;j=j||window.event,j.touches!==void 0?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(j.touches,be=>{this._pointerPositions.push({id:be.identifier,x:(be.clientX-q.left)/q.scaleX,y:(be.clientY-q.top)/q.scaleY})}),Array.prototype.forEach.call(j.changedTouches||j.touches,be=>{this._changedPointerPositions.push({id:be.identifier,x:(be.clientX-q.left)/q.scaleX,y:(be.clientY-q.top)/q.scaleY})})):(Z=(j.clientX-q.left)/q.scaleX,oe=(j.clientY-q.top)/q.scaleY,this.pointerPos={x:Z,y:oe},this._pointerPositions=[{x:Z,y:oe,id:t.Util._getFirstPointerId(j)}],this._changedPointerPositions=[{x:Z,y:oe,id:t.Util._getFirstPointerId(j)}])}_setPointerPosition(j){t.Util.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(j)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};var j=this.content.getBoundingClientRect();return{top:j.top,left:j.left,scaleX:j.width/this.content.clientWidth||1,scaleY:j.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new o.SceneCanvas({width:this.width(),height:this.height()}),this.bufferHitCanvas=new o.HitCanvas({pixelRatio:1,width:this.width(),height:this.height()}),!!i.Konva.isBrowser){var j=this.container();if(!j)throw"Stage has no container. A container is required.";j.innerHTML="",this.content=document.createElement("div"),this.content.style.position="relative",this.content.style.userSelect="none",this.content.className="konvajs-content",this.content.setAttribute("role","presentation"),j.appendChild(this.content),this._resizeDOM()}}cache(){return t.Util.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(j){j.batchDraw()}),this}}e.Stage=te,te.prototype.nodeType=c,(0,a._registerNode)(te),n.Factory.addGetterSetter(te,"container")})(ZG);var n0={},An={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Shape=e.shapes=void 0;const t=Ue,n=Qt,r=ze,i=Vt,o=xe,s=Ue,a=mi;var l="hasShadow",c="shadowRGBA",u="patternImage",d="linearGradient",f="radialGradient";let h;function p(){return h||(h=n.Util.createCanvasElement().getContext("2d"),h)}e.shapes={};function m(k){const A=this.attrs.fillRule;A?k.fill(A):k.fill()}function _(k){k.stroke()}function v(k){k.fill()}function y(k){k.stroke()}function g(){this._clearCache(l)}function b(){this._clearCache(c)}function S(){this._clearCache(u)}function w(){this._clearCache(d)}function C(){this._clearCache(f)}class x extends i.Node{constructor(A){super(A);let R;for(;R=n.Util.getRandomColor(),!(R&&!(R in e.shapes)););this.colorKey=R,e.shapes[R]=this}getContext(){return n.Util.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return n.Util.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(l,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&this.shadowOpacity()!==0&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(u,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){var A=p();const R=A.createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat");if(R&&R.setTransform){const L=new n.Transform;L.translate(this.fillPatternX(),this.fillPatternY()),L.rotate(t.Konva.getAngle(this.fillPatternRotation())),L.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),L.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const M=L.getMatrix(),E=typeof DOMMatrix>"u"?{a:M[0],b:M[1],c:M[2],d:M[3],e:M[4],f:M[5]}:new DOMMatrix(M);R.setTransform(E)}return R}}_getLinearGradient(){return this._getCache(d,this.__getLinearGradient)}__getLinearGradient(){var A=this.fillLinearGradientColorStops();if(A){for(var R=p(),L=this.fillLinearGradientStartPoint(),M=this.fillLinearGradientEndPoint(),E=R.createLinearGradient(L.x,L.y,M.x,M.y),P=0;Pthis.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate("hasStroke",["strokeEnabled","strokeWidth","stroke","strokeLinearGradientColorStops"],()=>this.strokeEnabled()&&this.strokeWidth()&&!!(this.stroke()||this.strokeLinearGradientColorStops()))}hasHitStroke(){const A=this.hitStrokeWidth();return A==="auto"?this.hasStroke():this.strokeEnabled()&&!!A}intersects(A){var R=this.getStage();if(!R)return!1;const L=R.bufferHitCanvas;return L.getContext().clear(),this.drawHit(L,void 0,!0),L.context.getImageData(Math.round(A.x),Math.round(A.y),1,1).data[3]>0}destroy(){return i.Node.prototype.destroy.call(this),delete e.shapes[this.colorKey],delete this.colorKey,this}_useBufferCanvas(A){var R;if(!this.getStage()||!((R=this.attrs.perfectDrawEnabled)!==null&&R!==void 0?R:!0))return!1;const M=A||this.hasFill(),E=this.hasStroke(),P=this.getAbsoluteOpacity()!==1;if(M&&E&&P)return!0;const O=this.hasShadow(),F=this.shadowForStrokeEnabled();return!!(M&&E&&O&&F)}setStrokeHitEnabled(A){n.Util.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),A?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return this.hitStrokeWidth()!==0}getSelfRect(){var A=this.size();return{x:this._centroid?-A.width/2:0,y:this._centroid?-A.height/2:0,width:A.width,height:A.height}}getClientRect(A={}){const R=A.skipTransform,L=A.relativeTo,M=this.getSelfRect(),P=!A.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,O=M.width+P,F=M.height+P,$=!A.skipShadow&&this.hasShadow(),D=$?this.shadowOffsetX():0,N=$?this.shadowOffsetY():0,z=O+Math.abs(D),V=F+Math.abs(N),H=$&&this.shadowBlur()||0,X=z+H*2,te=V+H*2,ee={width:X,height:te,x:-(P/2+H)+Math.min(D,0)+M.x,y:-(P/2+H)+Math.min(N,0)+M.y};return R?ee:this._transformedRect(ee,L)}drawScene(A,R){var L=this.getLayer(),M=A||L.getCanvas(),E=M.getContext(),P=this._getCanvasCache(),O=this.getSceneFunc(),F=this.hasShadow(),$,D,N,z=M.isCache,V=R===this;if(!this.isVisible()&&!V)return this;if(P){E.save();var H=this.getAbsoluteTransform(R).getMatrix();return E.transform(H[0],H[1],H[2],H[3],H[4],H[5]),this._drawCachedSceneCanvas(E),E.restore(),this}if(!O)return this;if(E.save(),this._useBufferCanvas()&&!z){$=this.getStage(),D=$.bufferCanvas,N=D.getContext(),N.clear(),N.save(),N._applyLineJoin(this);var X=this.getAbsoluteTransform(R).getMatrix();N.transform(X[0],X[1],X[2],X[3],X[4],X[5]),O.call(this,N,this),N.restore();var te=D.pixelRatio;F&&E._applyShadow(this),E._applyOpacity(this),E._applyGlobalCompositeOperation(this),E.drawImage(D._canvas,0,0,D.width/te,D.height/te)}else{if(E._applyLineJoin(this),!V){var X=this.getAbsoluteTransform(R).getMatrix();E.transform(X[0],X[1],X[2],X[3],X[4],X[5]),E._applyOpacity(this),E._applyGlobalCompositeOperation(this)}F&&E._applyShadow(this),O.call(this,E,this)}return E.restore(),this}drawHit(A,R,L=!1){if(!this.shouldDrawHit(R,L))return this;var M=this.getLayer(),E=A||M.hitCanvas,P=E&&E.getContext(),O=this.hitFunc()||this.sceneFunc(),F=this._getCanvasCache(),$=F&&F.hit;if(this.colorKey||n.Util.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),$){P.save();var D=this.getAbsoluteTransform(R).getMatrix();return P.transform(D[0],D[1],D[2],D[3],D[4],D[5]),this._drawCachedHitCanvas(P),P.restore(),this}if(!O)return this;if(P.save(),P._applyLineJoin(this),!(this===R)){var z=this.getAbsoluteTransform(R).getMatrix();P.transform(z[0],z[1],z[2],z[3],z[4],z[5])}return O.call(this,P,this),P.restore(),this}drawHitFromCache(A=0){var R=this._getCanvasCache(),L=this._getCachedSceneCanvas(),M=R.hit,E=M.getContext(),P=M.getWidth(),O=M.getHeight(),F,$,D,N,z,V;E.clear(),E.drawImage(L._canvas,0,0,P,O);try{for(F=E.getImageData(0,0,P,O),$=F.data,D=$.length,N=n.Util._hexToRgb(this.colorKey),z=0;zA?($[z]=N.r,$[z+1]=N.g,$[z+2]=N.b,$[z+3]=255):$[z+3]=0;E.putImageData(F,0,0)}catch(H){n.Util.error("Unable to draw hit graph from cached scene canvas. "+H.message)}return this}hasPointerCapture(A){return a.hasPointerCapture(A,this)}setPointerCapture(A){a.setPointerCapture(A,this)}releaseCapture(A){a.releaseCapture(A,this)}}e.Shape=x,x.prototype._fillFunc=m,x.prototype._strokeFunc=_,x.prototype._fillFuncHit=v,x.prototype._strokeFuncHit=y,x.prototype._centroid=!1,x.prototype.nodeType="Shape",(0,s._registerNode)(x),x.prototype.eventListeners={},x.prototype.on.call(x.prototype,"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",g),x.prototype.on.call(x.prototype,"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",b),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",S),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",w),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",C),r.Factory.addGetterSetter(x,"stroke",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(x,"strokeWidth",2,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillAfterStrokeEnabled",!1),r.Factory.addGetterSetter(x,"hitStrokeWidth","auto",(0,o.getNumberOrAutoValidator)()),r.Factory.addGetterSetter(x,"strokeHitEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"perfectDrawEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"shadowForStrokeEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"lineJoin"),r.Factory.addGetterSetter(x,"lineCap"),r.Factory.addGetterSetter(x,"sceneFunc"),r.Factory.addGetterSetter(x,"hitFunc"),r.Factory.addGetterSetter(x,"dash"),r.Factory.addGetterSetter(x,"dashOffset",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowColor",void 0,(0,o.getStringValidator)()),r.Factory.addGetterSetter(x,"shadowBlur",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowOpacity",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"shadowOffset",["x","y"]),r.Factory.addGetterSetter(x,"shadowOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternImage"),r.Factory.addGetterSetter(x,"fill",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(x,"fillPatternX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillLinearGradientColorStops"),r.Factory.addGetterSetter(x,"strokeLinearGradientColorStops"),r.Factory.addGetterSetter(x,"fillRadialGradientStartRadius",0),r.Factory.addGetterSetter(x,"fillRadialGradientEndRadius",0),r.Factory.addGetterSetter(x,"fillRadialGradientColorStops"),r.Factory.addGetterSetter(x,"fillPatternRepeat","repeat"),r.Factory.addGetterSetter(x,"fillEnabled",!0),r.Factory.addGetterSetter(x,"strokeEnabled",!0),r.Factory.addGetterSetter(x,"shadowEnabled",!0),r.Factory.addGetterSetter(x,"dashEnabled",!0),r.Factory.addGetterSetter(x,"strokeScaleEnabled",!0),r.Factory.addGetterSetter(x,"fillPriority","color"),r.Factory.addComponentsGetterSetter(x,"fillPatternOffset",["x","y"]),r.Factory.addGetterSetter(x,"fillPatternOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"fillPatternScale",["x","y"]),r.Factory.addGetterSetter(x,"fillPatternScaleX",1,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternScaleY",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"fillLinearGradientStartPoint",["x","y"]),r.Factory.addComponentsGetterSetter(x,"strokeLinearGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillLinearGradientStartPointX",0),r.Factory.addGetterSetter(x,"strokeLinearGradientStartPointX",0),r.Factory.addGetterSetter(x,"fillLinearGradientStartPointY",0),r.Factory.addGetterSetter(x,"strokeLinearGradientStartPointY",0),r.Factory.addComponentsGetterSetter(x,"fillLinearGradientEndPoint",["x","y"]),r.Factory.addComponentsGetterSetter(x,"strokeLinearGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillLinearGradientEndPointX",0),r.Factory.addGetterSetter(x,"strokeLinearGradientEndPointX",0),r.Factory.addGetterSetter(x,"fillLinearGradientEndPointY",0),r.Factory.addGetterSetter(x,"strokeLinearGradientEndPointY",0),r.Factory.addComponentsGetterSetter(x,"fillRadialGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillRadialGradientStartPointX",0),r.Factory.addGetterSetter(x,"fillRadialGradientStartPointY",0),r.Factory.addComponentsGetterSetter(x,"fillRadialGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillRadialGradientEndPointX",0),r.Factory.addGetterSetter(x,"fillRadialGradientEndPointY",0),r.Factory.addGetterSetter(x,"fillPatternRotation",0),r.Factory.addGetterSetter(x,"fillRule",void 0,(0,o.getStringValidator)()),r.Factory.backCompat(x,{dashArray:"dash",getDashArray:"getDash",setDashArray:"getDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"})})(An);Object.defineProperty(n0,"__esModule",{value:!0});n0.Layer=void 0;const Fs=Qt,eC=pu,zu=Vt,DA=ze,SR=Ro,qMe=xe,KMe=An,XMe=Ue;var QMe="#",YMe="beforeDraw",ZMe="draw",tH=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],JMe=tH.length;class zf extends eC.Container{constructor(t){super(t),this.canvas=new SR.SceneCanvas,this.hitCanvas=new SR.HitCanvas({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);var n=this.getStage();return n&&n.content&&(n.content.removeChild(this.getNativeCanvasElement()),t{this.draw(),this._waitingForDraw=!1})),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;for(var n=1,r=!1;;){for(let i=0;i0)return{antialiased:!0};return{}}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas();return this._fire(YMe,{node:this}),this.clearBeforeDraw()&&i.getContext().clear(),eC.Container.prototype.drawScene.call(this,i,n),this._fire(ZMe,{node:this}),this}drawHit(t,n){var r=this.getLayer(),i=t||r&&r.hitCanvas;return r&&r.clearBeforeDraw()&&r.getHitCanvas().getContext().clear(),eC.Container.prototype.drawHit.call(this,i,n),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){Fs.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return Fs.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(!(!this.parent||!this.parent.content)){var t=this.parent,n=!!this.hitCanvas._canvas.parentNode;n?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}}destroy(){return Fs.Util.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}n0.Layer=zf;zf.prototype.nodeType="Layer";(0,XMe._registerNode)(zf);DA.Factory.addGetterSetter(zf,"imageSmoothingEnabled",!0);DA.Factory.addGetterSetter(zf,"clearBeforeDraw",!0);DA.Factory.addGetterSetter(zf,"hitGraphEnabled",!0,(0,qMe.getBooleanValidator)());var HS={};Object.defineProperty(HS,"__esModule",{value:!0});HS.FastLayer=void 0;const e9e=Qt,t9e=n0,n9e=Ue;class LA extends t9e.Layer{constructor(t){super(t),this.listening(!1),e9e.Util.warn('Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}HS.FastLayer=LA;LA.prototype.nodeType="FastLayer";(0,n9e._registerNode)(LA);var jf={};Object.defineProperty(jf,"__esModule",{value:!0});jf.Group=void 0;const r9e=Qt,i9e=pu,o9e=Ue;class BA extends i9e.Container{_validateAdd(t){var n=t.getType();n!=="Group"&&n!=="Shape"&&r9e.Util.throw("You may only add groups and shapes to groups.")}}jf.Group=BA;BA.prototype.nodeType="Group";(0,o9e._registerNode)(BA);var Vf={};Object.defineProperty(Vf,"__esModule",{value:!0});Vf.Animation=void 0;const tC=Ue,xR=Qt,nC=function(){return tC.glob.performance&&tC.glob.performance.now?function(){return tC.glob.performance.now()}:function(){return new Date().getTime()}}();class as{constructor(t,n){this.id=as.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:nC(),frameRate:0},this.func=t,this.setLayers(n)}setLayers(t){let n=[];return t&&(n=Array.isArray(t)?t:[t]),this.layers=n,this}getLayers(){return this.layers}addLayer(t){const n=this.layers,r=n.length;for(let i=0;ithis.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():p<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=p,this.update())}getTime(){return this._time}setPosition(p){this.prevPos=this._pos,this.propFunc(p),this._pos=p}getPosition(p){return p===void 0&&(p=this._time),this.func(p,this.begin,this._change,this.duration)}play(){this.state=a,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onPlay")}reverse(){this.state=l,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onReverse")}seek(p){this.pause(),this._time=p,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){var p=this.getTimer()-this._startTime;this.state===a?this.setTime(p):this.state===l&&this.setTime(this.duration-p)}pause(){this.state=s,this.fire("onPause")}getTimer(){return new Date().getTime()}}class f{constructor(p){var m=this,_=p.node,v=_._id,y,g=p.easing||e.Easings.Linear,b=!!p.yoyo,S;typeof p.duration>"u"?y=.3:p.duration===0?y=.001:y=p.duration,this.node=_,this._id=c++;var w=_.getLayer()||(_ instanceof i.Konva.Stage?_.getLayers():null);w||t.Util.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new n.Animation(function(){m.tween.onEnterFrame()},w),this.tween=new d(S,function(C){m._tweenFunc(C)},g,0,1,y*1e3,b),this._addListeners(),f.attrs[v]||(f.attrs[v]={}),f.attrs[v][this._id]||(f.attrs[v][this._id]={}),f.tweens[v]||(f.tweens[v]={});for(S in p)o[S]===void 0&&this._addAttr(S,p[S]);this.reset(),this.onFinish=p.onFinish,this.onReset=p.onReset,this.onUpdate=p.onUpdate}_addAttr(p,m){var _=this.node,v=_._id,y,g,b,S,w,C,x,k;if(b=f.tweens[v][p],b&&delete f.attrs[v][b][p],y=_.getAttr(p),t.Util._isArray(m))if(g=[],w=Math.max(m.length,y.length),p==="points"&&m.length!==y.length&&(m.length>y.length?(x=y,y=t.Util._prepareArrayForTween(y,m,_.closed())):(C=m,m=t.Util._prepareArrayForTween(m,y,_.closed()))),p.indexOf("fill")===0)for(S=0;S{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueEnd&&p.setAttr("points",m.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueStart&&p.points(m.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(p){return this.tween.seek(p*1e3),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var p=this.node._id,m=this._id,_=f.tweens[p],v;this.pause();for(v in _)delete f.tweens[p][v];delete f.attrs[p][m]}}e.Tween=f,f.attrs={},f.tweens={},r.Node.prototype.to=function(h){var p=h.onFinish;h.node=this,h.onFinish=function(){this.destroy(),p&&p()};var m=new f(h);m.play()},e.Easings={BackEaseIn(h,p,m,_){var v=1.70158;return m*(h/=_)*h*((v+1)*h-v)+p},BackEaseOut(h,p,m,_){var v=1.70158;return m*((h=h/_-1)*h*((v+1)*h+v)+1)+p},BackEaseInOut(h,p,m,_){var v=1.70158;return(h/=_/2)<1?m/2*(h*h*(((v*=1.525)+1)*h-v))+p:m/2*((h-=2)*h*(((v*=1.525)+1)*h+v)+2)+p},ElasticEaseIn(h,p,m,_,v,y){var g=0;return h===0?p:(h/=_)===1?p+m:(y||(y=_*.3),!v||v0?t:n),u=s*n,d=a*(a>0?t:n),f=l*(l>0?n:t);return{x:c,y:r?-1*f:d,width:u-c,height:f-d}}}WS.Arc=_a;_a.prototype._centroid=!0;_a.prototype.className="Arc";_a.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,a9e._registerNode)(_a);qS.Factory.addGetterSetter(_a,"innerRadius",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"outerRadius",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"angle",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"clockwise",!1,(0,KS.getBooleanValidator)());var XS={},r0={};Object.defineProperty(r0,"__esModule",{value:!0});r0.Line=void 0;const QS=ze,l9e=An,rH=xe,c9e=Ue;function X3(e,t,n,r,i,o,s){var a=Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2)),l=Math.sqrt(Math.pow(i-n,2)+Math.pow(o-r,2)),c=s*a/(a+l),u=s*l/(a+l),d=n-c*(i-e),f=r-c*(o-t),h=n+u*(i-e),p=r+u*(o-t);return[d,f,h,p]}function CR(e,t){var n=e.length,r=[],i,o;for(i=2;i4){for(a=this.getTensionPoints(),l=a.length,c=o?0:4,o||t.quadraticCurveTo(a[0],a[1],a[2],a[3]);c{let c,u,d;c=l/2,u=0;for(let h=0;h<20;h++)d=c*e.tValues[20][h]+c,u+=e.cValues[20][h]*r(s,a,d);return c*u};e.getCubicArcLength=t;const n=(s,a,l)=>{l===void 0&&(l=1);const c=s[0]-2*s[1]+s[2],u=a[0]-2*a[1]+a[2],d=2*s[1]-2*s[0],f=2*a[1]-2*a[0],h=4*(c*c+u*u),p=4*(c*d+u*f),m=d*d+f*f;if(h===0)return l*Math.sqrt(Math.pow(s[2]-s[0],2)+Math.pow(a[2]-a[0],2));const _=p/(2*h),v=m/h,y=l+_,g=v-_*_,b=y*y+g>0?Math.sqrt(y*y+g):0,S=_*_+g>0?Math.sqrt(_*_+g):0,w=_+Math.sqrt(_*_+g)!==0?g*Math.log(Math.abs((y+b)/(_+S))):0;return Math.sqrt(h)/2*(y*b-_*S+w)};e.getQuadraticArcLength=n;function r(s,a,l){const c=i(1,l,s),u=i(1,l,a),d=c*c+u*u;return Math.sqrt(d)}const i=(s,a,l)=>{const c=l.length-1;let u,d;if(c===0)return 0;if(s===0){d=0;for(let f=0;f<=c;f++)d+=e.binomialCoefficients[c][f]*Math.pow(1-a,c-f)*Math.pow(a,f)*l[f];return d}else{u=new Array(c);for(let f=0;f{let c=1,u=s/a,d=(s-l(u))/a,f=0;for(;c>.001;){const h=l(u+d),p=Math.abs(s-h)/a;if(p500)break}return u};e.t2length=o})(iH);Object.defineProperty(Uf,"__esModule",{value:!0});Uf.Path=void 0;const u9e=ze,d9e=An,f9e=Ue,ju=iH;class _n extends d9e.Shape{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=_n.parsePathData(this.data()),this.pathLength=_n.getPathLength(this.dataArray)}_sceneFunc(t){var n=this.dataArray;t.beginPath();for(var r=!1,i=0;iu?c:u,_=c>u?1:c/u,v=c>u?u/c:1;t.translate(a,l),t.rotate(h),t.scale(_,v),t.arc(0,0,m,d,d+f,1-p),t.scale(1/_,1/v),t.rotate(-h),t.translate(-a,-l);break;case"z":r=!0,t.closePath();break}}!r&&!this.hasFill()?t.strokeShape(this):t.fillStrokeShape(this)}getSelfRect(){var t=[];this.dataArray.forEach(function(c){if(c.command==="A"){var u=c.points[4],d=c.points[5],f=c.points[4]+d,h=Math.PI/180;if(Math.abs(u-f)f;p-=h){const m=_n.getPointOnEllipticalArc(c.points[0],c.points[1],c.points[2],c.points[3],p,0);t.push(m.x,m.y)}else for(let p=u+h;pn[i].pathLength;)t-=n[i].pathLength,++i;if(i===o)return r=n[i-1].points.slice(-2),{x:r[0],y:r[1]};if(t<.01)return r=n[i].points.slice(0,2),{x:r[0],y:r[1]};var s=n[i],a=s.points;switch(s.command){case"L":return _n.getPointOnLine(t,s.start.x,s.start.y,a[0],a[1]);case"C":return _n.getPointOnCubicBezier((0,ju.t2length)(t,_n.getPathLength(n),m=>(0,ju.getCubicArcLength)([s.start.x,a[0],a[2],a[4]],[s.start.y,a[1],a[3],a[5]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3],a[4],a[5]);case"Q":return _n.getPointOnQuadraticBezier((0,ju.t2length)(t,_n.getPathLength(n),m=>(0,ju.getQuadraticArcLength)([s.start.x,a[0],a[2]],[s.start.y,a[1],a[3]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3]);case"A":var l=a[0],c=a[1],u=a[2],d=a[3],f=a[4],h=a[5],p=a[6];return f+=h*t/s.pathLength,_n.getPointOnEllipticalArc(l,c,u,d,f,p)}return null}static getPointOnLine(t,n,r,i,o,s,a){s===void 0&&(s=n),a===void 0&&(a=r);var l=(o-r)/(i-n+1e-8),c=Math.sqrt(t*t/(1+l*l));i0&&!isNaN(p[0]);){var y="",g=[],b=l,S=c,w,C,x,k,A,R,L,M,E,P;switch(h){case"l":l+=p.shift(),c+=p.shift(),y="L",g.push(l,c);break;case"L":l=p.shift(),c=p.shift(),g.push(l,c);break;case"m":var O=p.shift(),F=p.shift();if(l+=O,c+=F,y="M",s.length>2&&s[s.length-1].command==="z"){for(var $=s.length-2;$>=0;$--)if(s[$].command==="M"){l=s[$].points[0]+O,c=s[$].points[1]+F;break}}g.push(l,c),h="l";break;case"M":l=p.shift(),c=p.shift(),y="M",g.push(l,c),h="L";break;case"h":l+=p.shift(),y="L",g.push(l,c);break;case"H":l=p.shift(),y="L",g.push(l,c);break;case"v":c+=p.shift(),y="L",g.push(l,c);break;case"V":c=p.shift(),y="L",g.push(l,c);break;case"C":g.push(p.shift(),p.shift(),p.shift(),p.shift()),l=p.shift(),c=p.shift(),g.push(l,c);break;case"c":g.push(l+p.shift(),c+p.shift(),l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="C",g.push(l,c);break;case"S":C=l,x=c,w=s[s.length-1],w.command==="C"&&(C=l+(l-w.points[2]),x=c+(c-w.points[3])),g.push(C,x,p.shift(),p.shift()),l=p.shift(),c=p.shift(),y="C",g.push(l,c);break;case"s":C=l,x=c,w=s[s.length-1],w.command==="C"&&(C=l+(l-w.points[2]),x=c+(c-w.points[3])),g.push(C,x,l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="C",g.push(l,c);break;case"Q":g.push(p.shift(),p.shift()),l=p.shift(),c=p.shift(),g.push(l,c);break;case"q":g.push(l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="Q",g.push(l,c);break;case"T":C=l,x=c,w=s[s.length-1],w.command==="Q"&&(C=l+(l-w.points[0]),x=c+(c-w.points[1])),l=p.shift(),c=p.shift(),y="Q",g.push(C,x,l,c);break;case"t":C=l,x=c,w=s[s.length-1],w.command==="Q"&&(C=l+(l-w.points[0]),x=c+(c-w.points[1])),l+=p.shift(),c+=p.shift(),y="Q",g.push(C,x,l,c);break;case"A":k=p.shift(),A=p.shift(),R=p.shift(),L=p.shift(),M=p.shift(),E=l,P=c,l=p.shift(),c=p.shift(),y="A",g=this.convertEndpointToCenterParameterization(E,P,l,c,L,M,k,A,R);break;case"a":k=p.shift(),A=p.shift(),R=p.shift(),L=p.shift(),M=p.shift(),E=l,P=c,l+=p.shift(),c+=p.shift(),y="A",g=this.convertEndpointToCenterParameterization(E,P,l,c,L,M,k,A,R);break}s.push({command:y||h,points:g,start:{x:b,y:S},pathLength:this.calcLength(b,S,y||h,g)})}(h==="z"||h==="Z")&&s.push({command:"z",points:[],start:void 0,pathLength:0})}return s}static calcLength(t,n,r,i){var o,s,a,l,c=_n;switch(r){case"L":return c.getLineLength(t,n,i[0],i[1]);case"C":return(0,ju.getCubicArcLength)([t,i[0],i[2],i[4]],[n,i[1],i[3],i[5]],1);case"Q":return(0,ju.getQuadraticArcLength)([t,i[0],i[2]],[n,i[1],i[3]],1);case"A":o=0;var u=i[4],d=i[5],f=i[4]+d,h=Math.PI/180;if(Math.abs(u-f)f;l-=h)a=c.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],l,0),o+=c.getLineLength(s.x,s.y,a.x,a.y),s=a;else for(l=u+h;l1&&(a*=Math.sqrt(h),l*=Math.sqrt(h));var p=Math.sqrt((a*a*(l*l)-a*a*(f*f)-l*l*(d*d))/(a*a*(f*f)+l*l*(d*d)));o===s&&(p*=-1),isNaN(p)&&(p=0);var m=p*a*f/l,_=p*-l*d/a,v=(t+r)/2+Math.cos(u)*m-Math.sin(u)*_,y=(n+i)/2+Math.sin(u)*m+Math.cos(u)*_,g=function(A){return Math.sqrt(A[0]*A[0]+A[1]*A[1])},b=function(A,R){return(A[0]*R[0]+A[1]*R[1])/(g(A)*g(R))},S=function(A,R){return(A[0]*R[1]=1&&(k=0),s===0&&k>0&&(k=k-2*Math.PI),s===1&&k<0&&(k=k+2*Math.PI),[v,y,a,l,w,k,u,s]}}Uf.Path=_n;_n.prototype.className="Path";_n.prototype._attrsAffectingSize=["data"];(0,f9e._registerNode)(_n);u9e.Factory.addGetterSetter(_n,"data");Object.defineProperty(XS,"__esModule",{value:!0});XS.Arrow=void 0;const YS=ze,h9e=r0,oH=xe,p9e=Ue,ER=Uf;class mu extends h9e.Line{_sceneFunc(t){super._sceneFunc(t);var n=Math.PI*2,r=this.points(),i=r,o=this.tension()!==0&&r.length>4;o&&(i=this.getTensionPoints());var s=this.pointerLength(),a=r.length,l,c;if(o){const f=[i[i.length-4],i[i.length-3],i[i.length-2],i[i.length-1],r[a-2],r[a-1]],h=ER.Path.calcLength(i[i.length-4],i[i.length-3],"C",f),p=ER.Path.getPointOnQuadraticBezier(Math.min(1,1-s/h),f[0],f[1],f[2],f[3],f[4],f[5]);l=r[a-2]-p.x,c=r[a-1]-p.y}else l=r[a-2]-r[a-4],c=r[a-1]-r[a-3];var u=(Math.atan2(c,l)+n)%n,d=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(r[a-2],r[a-1]),t.rotate(u),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(r[0],r[1]),o?(l=(i[0]+i[2])/2-r[0],c=(i[1]+i[3])/2-r[1]):(l=r[2]-r[0],c=r[3]-r[1]),t.rotate((Math.atan2(-c,-l)+n)%n),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){var n=this.dashEnabled();n&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),n&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),n=this.pointerWidth()/2;return{x:t.x-n,y:t.y-n,width:t.width+n*2,height:t.height+n*2}}}XS.Arrow=mu;mu.prototype.className="Arrow";(0,p9e._registerNode)(mu);YS.Factory.addGetterSetter(mu,"pointerLength",10,(0,oH.getNumberValidator)());YS.Factory.addGetterSetter(mu,"pointerWidth",10,(0,oH.getNumberValidator)());YS.Factory.addGetterSetter(mu,"pointerAtBeginning",!1);YS.Factory.addGetterSetter(mu,"pointerAtEnding",!0);var ZS={};Object.defineProperty(ZS,"__esModule",{value:!0});ZS.Circle=void 0;const g9e=ze,m9e=An,y9e=xe,v9e=Ue;class Gf extends m9e.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,Math.PI*2,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}}ZS.Circle=Gf;Gf.prototype._centroid=!0;Gf.prototype.className="Circle";Gf.prototype._attrsAffectingSize=["radius"];(0,v9e._registerNode)(Gf);g9e.Factory.addGetterSetter(Gf,"radius",0,(0,y9e.getNumberValidator)());var JS={};Object.defineProperty(JS,"__esModule",{value:!0});JS.Ellipse=void 0;const zA=ze,b9e=An,sH=xe,_9e=Ue;class zl extends b9e.Shape{_sceneFunc(t){var n=this.radiusX(),r=this.radiusY();t.beginPath(),t.save(),n!==r&&t.scale(1,r/n),t.arc(0,0,n,0,Math.PI*2,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radiusX()*2}getHeight(){return this.radiusY()*2}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}JS.Ellipse=zl;zl.prototype.className="Ellipse";zl.prototype._centroid=!0;zl.prototype._attrsAffectingSize=["radiusX","radiusY"];(0,_9e._registerNode)(zl);zA.Factory.addComponentsGetterSetter(zl,"radius",["x","y"]);zA.Factory.addGetterSetter(zl,"radiusX",0,(0,sH.getNumberValidator)());zA.Factory.addGetterSetter(zl,"radiusY",0,(0,sH.getNumberValidator)());var e2={};Object.defineProperty(e2,"__esModule",{value:!0});e2.Image=void 0;const rC=Qt,yu=ze,S9e=An,x9e=Ue,i0=xe;let Ps=class aH extends S9e.Shape{constructor(t){super(t),this.on("imageChange.konva",()=>{this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&t.readyState===4||t&&t.addEventListener&&t.addEventListener("load",()=>{this._requestDraw()})}_useBufferCanvas(){return super._useBufferCanvas(!0)}_sceneFunc(t){const n=this.getWidth(),r=this.getHeight(),i=this.cornerRadius(),o=this.attrs.image;let s;if(o){const a=this.attrs.cropWidth,l=this.attrs.cropHeight;a&&l?s=[o,this.cropX(),this.cropY(),a,l,0,0,n,r]:s=[o,0,0,n,r]}(this.hasFill()||this.hasStroke()||i)&&(t.beginPath(),i?rC.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)),o&&(i&&t.clip(),t.drawImage.apply(t,s))}_hitFunc(t){var n=this.width(),r=this.height(),i=this.cornerRadius();t.beginPath(),i?rC.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,n;return(t=this.attrs.width)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.width}getHeight(){var t,n;return(t=this.attrs.height)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.height}static fromURL(t,n,r=null){var i=rC.Util.createImageElement();i.onload=function(){var o=new aH({image:i});n(o)},i.onerror=r,i.crossOrigin="Anonymous",i.src=t}};e2.Image=Ps;Ps.prototype.className="Image";(0,x9e._registerNode)(Ps);yu.Factory.addGetterSetter(Ps,"cornerRadius",0,(0,i0.getNumberOrArrayOfNumbersValidator)(4));yu.Factory.addGetterSetter(Ps,"image");yu.Factory.addComponentsGetterSetter(Ps,"crop",["x","y","width","height"]);yu.Factory.addGetterSetter(Ps,"cropX",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropY",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropWidth",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropHeight",0,(0,i0.getNumberValidator)());var xf={};Object.defineProperty(xf,"__esModule",{value:!0});xf.Tag=xf.Label=void 0;const t2=ze,w9e=An,C9e=jf,jA=xe,lH=Ue;var cH=["fontFamily","fontSize","fontStyle","padding","lineHeight","text","width","height","pointerDirection","pointerWidth","pointerHeight"],E9e="Change.konva",T9e="none",Q3="up",Y3="right",Z3="down",J3="left",A9e=cH.length;class VA extends C9e.Group{constructor(t){super(t),this.on("add.konva",function(n){this._addListeners(n.child),this._sync()})}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}_addListeners(t){var n=this,r,i=function(){n._sync()};for(r=0;r{n=Math.min(n,s.x),r=Math.max(r,s.x),i=Math.min(i,s.y),o=Math.max(o,s.y)}),{x:n,y:i,width:r-n,height:o-i}}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}r2.RegularPolygon=bu;bu.prototype.className="RegularPolygon";bu.prototype._centroid=!0;bu.prototype._attrsAffectingSize=["radius"];(0,$9e._registerNode)(bu);uH.Factory.addGetterSetter(bu,"radius",0,(0,dH.getNumberValidator)());uH.Factory.addGetterSetter(bu,"sides",0,(0,dH.getNumberValidator)());var i2={};Object.defineProperty(i2,"__esModule",{value:!0});i2.Ring=void 0;const fH=ze,N9e=An,hH=xe,F9e=Ue;var TR=Math.PI*2;class _u extends N9e.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,TR,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),TR,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}i2.Ring=_u;_u.prototype.className="Ring";_u.prototype._centroid=!0;_u.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,F9e._registerNode)(_u);fH.Factory.addGetterSetter(_u,"innerRadius",0,(0,hH.getNumberValidator)());fH.Factory.addGetterSetter(_u,"outerRadius",0,(0,hH.getNumberValidator)());var o2={};Object.defineProperty(o2,"__esModule",{value:!0});o2.Sprite=void 0;const Su=ze,D9e=An,L9e=Vf,pH=xe,B9e=Ue;class Is extends D9e.Shape{constructor(t){super(t),this._updated=!0,this.anim=new L9e.Animation(()=>{var n=this._updated;return this._updated=!1,n}),this.on("animationChange.konva",function(){this.frameIndex(0)}),this.on("frameIndexChange.konva",function(){this._updated=!0}),this.on("frameRateChange.konva",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+0],l=o[i+1],c=o[i+2],u=o[i+3],d=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,c,u),t.closePath(),t.fillStrokeShape(this)),d)if(s){var f=s[n],h=r*2;t.drawImage(d,a,l,c,u,f[h+0],f[h+1],c,u)}else t.drawImage(d,a,l,c,u,0,0,c,u)}_hitFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+2],l=o[i+3];if(t.beginPath(),s){var c=s[n],u=r*2;t.rect(c[u+0],c[u+1],a,l)}else t.rect(0,0,a,l);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){var t=this;this.interval=setInterval(function(){t._updateIndex()},1e3/this.frameRate())}start(){if(!this.isRunning()){var t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){var t=this.frameIndex(),n=this.animation(),r=this.animations(),i=r[n],o=i.length/4;t{t=t.trim();const n=t.indexOf(" ")>=0,r=t.indexOf('"')>=0||t.indexOf("'")>=0;return n&&!r&&(t=`"${t}"`),t}).join(", ")}var Ay;function oC(){return Ay||(Ay=eE.Util.createCanvasElement().getContext(W9e),Ay)}function rRe(e){e.fillText(this._partialText,this._partialTextX,this._partialTextY)}function iRe(e){e.setAttr("miterLimit",2),e.strokeText(this._partialText,this._partialTextX,this._partialTextY)}function oRe(e){return e=e||{},!e.fillLinearGradientColorStops&&!e.fillRadialGradientColorStops&&!e.fillPatternImage&&(e.fill=e.fill||"black"),e}class on extends V9e.Shape{constructor(t){super(oRe(t)),this._partialTextX=0,this._partialTextY=0;for(var n=0;n1&&(y+=s)}}}_hitFunc(t){var n=this.getWidth(),r=this.getHeight();t.beginPath(),t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}setText(t){var n=eE.Util._isString(t)?t:t==null?"":t+"";return this._setAttr(q9e,n),this}getWidth(){var t=this.attrs.width===Vu||this.attrs.width===void 0;return t?this.getTextWidth()+this.padding()*2:this.attrs.width}getHeight(){var t=this.attrs.height===Vu||this.attrs.height===void 0;return t?this.fontSize()*this.textArr.length*this.lineHeight()+this.padding()*2:this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return eE.Util.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var n=oC(),r=this.fontSize(),i;return n.save(),n.font=this._getContextFont(),i=n.measureText(t),n.restore(),{width:i.width,height:r}}_getContextFont(){return this.fontStyle()+Ty+this.fontVariant()+Ty+(this.fontSize()+Y9e)+nRe(this.fontFamily())}_addTextLine(t){this.align()===Ah&&(t=t.trim());var r=this._getTextWidth(t);return this.textArr.push({text:t,width:r,lastInParagraph:!1})}_getTextWidth(t){var n=this.letterSpacing(),r=t.length;return oC().measureText(t).width+(r?n*(r-1):0)}_setTextData(){var t=this.text().split(` +`),n=+this.fontSize(),r=0,i=this.lineHeight()*n,o=this.attrs.width,s=this.attrs.height,a=o!==Vu&&o!==void 0,l=s!==Vu&&s!==void 0,c=this.padding(),u=o-c*2,d=s-c*2,f=0,h=this.wrap(),p=h!==IR,m=h!==eRe&&p,_=this.ellipsis();this.textArr=[],oC().font=this._getContextFont();for(var v=_?this._getTextWidth(iC):0,y=0,g=t.length;yu)for(;b.length>0;){for(var w=0,C=b.length,x="",k=0;w>>1,R=b.slice(0,A+1),L=this._getTextWidth(R)+v;L<=u?(w=A+1,x=R,k=L):C=A}if(x){if(m){var M,E=b[x.length],P=E===Ty||E===AR;P&&k<=u?M=x.length:M=Math.max(x.lastIndexOf(Ty),x.lastIndexOf(AR))+1,M>0&&(w=M,x=x.slice(0,w),k=this._getTextWidth(x))}x=x.trimRight(),this._addTextLine(x),r=Math.max(r,k),f+=i;var O=this._shouldHandleEllipsis(f);if(O){this._tryToAddEllipsisToLastLine();break}if(b=b.slice(w),b=b.trimLeft(),b.length>0&&(S=this._getTextWidth(b),S<=u)){this._addTextLine(b),f+=i,r=Math.max(r,S);break}}else break}else this._addTextLine(b),f+=i,r=Math.max(r,S),this._shouldHandleEllipsis(f)&&yd)break}this.textHeight=n,this.textWidth=r}_shouldHandleEllipsis(t){var n=+this.fontSize(),r=this.lineHeight()*n,i=this.attrs.height,o=i!==Vu&&i!==void 0,s=this.padding(),a=i-s*2,l=this.wrap(),c=l!==IR;return!c||o&&t+r>a}_tryToAddEllipsisToLastLine(){var t=this.attrs.width,n=t!==Vu&&t!==void 0,r=this.padding(),i=t-r*2,o=this.ellipsis(),s=this.textArr[this.textArr.length-1];if(!(!s||!o)){if(n){var a=this._getTextWidth(s.text+iC)n?null:kh.Path.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=kh.Path.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();var n=this.textDecoration(),r=this.fill(),i=this.fontSize(),o=this.glyphInfo;n==="underline"&&t.beginPath();for(var s=0;s=1){var r=n[0].p0;t.moveTo(r.x,r.y)}for(var i=0;ie+`.${CH}`).join(" "),OR="nodesRect",hRe=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange"],pRe={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135};const gRe="ontouchstart"in mo.Konva._global;function mRe(e,t,n){if(e==="rotater")return n;t+=bt.Util.degToRad(pRe[e]||0);var r=(bt.Util.radToDeg(t)%360+360)%360;return bt.Util._inRange(r,315+22.5,360)||bt.Util._inRange(r,0,22.5)?"ns-resize":bt.Util._inRange(r,45-22.5,45+22.5)?"nesw-resize":bt.Util._inRange(r,90-22.5,90+22.5)?"ew-resize":bt.Util._inRange(r,135-22.5,135+22.5)?"nwse-resize":bt.Util._inRange(r,180-22.5,180+22.5)?"ns-resize":bt.Util._inRange(r,225-22.5,225+22.5)?"nesw-resize":bt.Util._inRange(r,270-22.5,270+22.5)?"ew-resize":bt.Util._inRange(r,315-22.5,315+22.5)?"nwse-resize":(bt.Util.error("Transformer has unknown angle for cursor detection: "+r),"pointer")}var ob=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"],$R=1e8;function yRe(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}function EH(e,t,n){const r=n.x+(e.x-n.x)*Math.cos(t)-(e.y-n.y)*Math.sin(t),i=n.y+(e.x-n.x)*Math.sin(t)+(e.y-n.y)*Math.cos(t);return{...e,rotation:e.rotation+t,x:r,y:i}}function vRe(e,t){const n=yRe(e);return EH(e,t,n)}function bRe(e,t,n){let r=t;for(let i=0;ii.isAncestorOf(this)?(bt.Util.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),!1):!0);this._nodes=t=n,t.length===1&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(i=>{const o=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()},s=i._attrsAffectingSize.map(a=>a+"Change."+this._getEventNamespace()).join(" ");i.on(s,o),i.on(hRe.map(a=>a+`.${this._getEventNamespace()}`).join(" "),o),i.on(`absoluteTransformChange.${this._getEventNamespace()}`,o),this._proxyDrag(i)}),this._resetTransformCache();var r=!!this.findOne(".top-left");return r&&this.update(),this}_proxyDrag(t){let n;t.on(`dragstart.${this._getEventNamespace()}`,r=>{n=t.getAbsolutePosition(),!this.isDragging()&&t!==this.findOne(".back")&&this.startDrag(r,!1)}),t.on(`dragmove.${this._getEventNamespace()}`,r=>{if(!n)return;const i=t.getAbsolutePosition(),o=i.x-n.x,s=i.y-n.y;this.nodes().forEach(a=>{if(a===t||a.isDragging())return;const l=a.getAbsolutePosition();a.setAbsolutePosition({x:l.x+o,y:l.y+s}),a.startDrag(r)}),n=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(t=>{t.off("."+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(OR),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_getNodeRect(){return this._getCache(OR,this.__getNodeRect)}__getNodeShape(t,n=this.rotation(),r){var i=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),o=t.getAbsoluteScale(r),s=t.getAbsolutePosition(r),a=i.x*o.x-t.offsetX()*o.x,l=i.y*o.y-t.offsetY()*o.y;const c=(mo.Konva.getAngle(t.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2),u={x:s.x+a*Math.cos(c)+l*Math.sin(-c),y:s.y+l*Math.cos(c)+a*Math.sin(c),width:i.width*o.x,height:i.height*o.y,rotation:c};return EH(u,-mo.Konva.getAngle(n),{x:0,y:0})}__getNodeRect(){var t=this.getNode();if(!t)return{x:-$R,y:-$R,width:0,height:0,rotation:0};const n=[];this.nodes().map(c=>{const u=c.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()});var d=[{x:u.x,y:u.y},{x:u.x+u.width,y:u.y},{x:u.x+u.width,y:u.y+u.height},{x:u.x,y:u.y+u.height}],f=c.getAbsoluteTransform();d.forEach(function(h){var p=f.point(h);n.push(p)})});const r=new bt.Transform;r.rotate(-mo.Konva.getAngle(this.rotation()));var i=1/0,o=1/0,s=-1/0,a=-1/0;n.forEach(function(c){var u=r.point(c);i===void 0&&(i=s=u.x,o=a=u.y),i=Math.min(i,u.x),o=Math.min(o,u.y),s=Math.max(s,u.x),a=Math.max(a,u.y)}),r.invert();const l=r.point({x:i,y:o});return{x:l.x,y:l.y,width:s-i,height:a-o,rotation:mo.Konva.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),ob.forEach(t=>{this._createAnchor(t)}),this._createAnchor("rotater")}_createAnchor(t){var n=new uRe.Rect({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" _anchor",dragDistance:0,draggable:!0,hitStrokeWidth:gRe?10:"auto"}),r=this;n.on("mousedown touchstart",function(i){r._handleMouseDown(i)}),n.on("dragstart",i=>{n.stopDrag(),i.cancelBubble=!0}),n.on("dragend",i=>{i.cancelBubble=!0}),n.on("mouseenter",()=>{var i=mo.Konva.getAngle(this.rotation()),o=this.rotateAnchorCursor(),s=mRe(t,i,o);n.getStage().content&&(n.getStage().content.style.cursor=s),this._cursorChange=!0}),n.on("mouseout",()=>{n.getStage().content&&(n.getStage().content.style.cursor=""),this._cursorChange=!1}),this.add(n)}_createBack(){var t=new cRe.Shape({name:"back",width:0,height:0,draggable:!0,sceneFunc(n,r){var i=r.getParent(),o=i.padding();n.beginPath(),n.rect(-o,-o,r.width()+o*2,r.height()+o*2),n.moveTo(r.width()/2,-o),i.rotateEnabled()&&n.lineTo(r.width()/2,-i.rotateAnchorOffset()*bt.Util._sign(r.height())-o),n.fillStrokeShape(r)},hitFunc:(n,r)=>{if(this.shouldOverdrawWholeArea()){var i=this.padding();n.beginPath(),n.rect(-i,-i,r.width()+i*2,r.height()+i*2),n.fillStrokeShape(r)}}});this.add(t),this._proxyDrag(t),t.on("dragstart",n=>{n.cancelBubble=!0}),t.on("dragmove",n=>{n.cancelBubble=!0}),t.on("dragend",n=>{n.cancelBubble=!0}),this.on("dragmove",n=>{this.update()})}_handleMouseDown(t){this._movingAnchorName=t.target.name().split(" ")[0];var n=this._getNodeRect(),r=n.width,i=n.height,o=Math.sqrt(Math.pow(r,2)+Math.pow(i,2));this.sin=Math.abs(i/o),this.cos=Math.abs(r/o),typeof window<"u"&&(window.addEventListener("mousemove",this._handleMouseMove),window.addEventListener("touchmove",this._handleMouseMove),window.addEventListener("mouseup",this._handleMouseUp,!0),window.addEventListener("touchend",this._handleMouseUp,!0)),this._transforming=!0;var s=t.target.getAbsolutePosition(),a=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-s.x,y:a.y-s.y},this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach(l=>{l._fire("transformstart",{evt:t.evt,target:l})})}_handleMouseMove(t){var n,r,i,o=this.findOne("."+this._movingAnchorName),s=o.getStage();s.setPointersPositions(t);const a=s.getPointerPosition();let l={x:a.x-this._anchorDragOffset.x,y:a.y-this._anchorDragOffset.y};const c=o.getAbsolutePosition();this.anchorDragBoundFunc()&&(l=this.anchorDragBoundFunc()(c,l,t)),o.setAbsolutePosition(l);const u=o.getAbsolutePosition();if(!(c.x===u.x&&c.y===u.y)){if(this._movingAnchorName==="rotater"){var d=this._getNodeRect();n=o.x()-d.width/2,r=-o.y()+d.height/2;let M=Math.atan2(-r,n)+Math.PI/2;d.height<0&&(M-=Math.PI);var f=mo.Konva.getAngle(this.rotation());const E=f+M,P=mo.Konva.getAngle(this.rotationSnapTolerance()),F=bRe(this.rotationSnaps(),E,P)-d.rotation,$=vRe(d,F);this._fitNodesInto($,t);return}var h=this.shiftBehavior(),p;h==="inverted"?p=this.keepRatio()&&!t.shiftKey:h==="none"?p=this.keepRatio():p=this.keepRatio()||t.shiftKey;var g=this.centeredScaling()||t.altKey;if(this._movingAnchorName==="top-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-right").x(),y:this.findOne(".bottom-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(m.y-o.y(),2));var _=this.findOne(".top-left").x()>m.x?-1:1,v=this.findOne(".top-left").y()>m.y?-1:1;n=i*this.cos*_,r=i*this.sin*v,this.findOne(".top-left").x(m.x-n),this.findOne(".top-left").y(m.y-r)}}else if(this._movingAnchorName==="top-center")this.findOne(".top-left").y(o.y());else if(this._movingAnchorName==="top-right"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-left").x(),y:this.findOne(".bottom-left").y()};i=Math.sqrt(Math.pow(o.x()-m.x,2)+Math.pow(m.y-o.y(),2));var _=this.findOne(".top-right").x()m.y?-1:1;n=i*this.cos*_,r=i*this.sin*v,this.findOne(".top-right").x(m.x+n),this.findOne(".top-right").y(m.y-r)}var y=o.position();this.findOne(".top-left").y(y.y),this.findOne(".bottom-right").x(y.x)}else if(this._movingAnchorName==="middle-left")this.findOne(".top-left").x(o.x());else if(this._movingAnchorName==="middle-right")this.findOne(".bottom-right").x(o.x());else if(this._movingAnchorName==="bottom-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-right").x(),y:this.findOne(".top-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(o.y()-m.y,2));var _=m.x{r._fire("transformend",{evt:t,target:r})}),this._movingAnchorName=null}}_fitNodesInto(t,n){var r=this._getNodeRect();const i=1;if(bt.Util._inRange(t.width,-this.padding()*2-i,i)){this.update();return}if(bt.Util._inRange(t.height,-this.padding()*2-i,i)){this.update();return}var o=new bt.Transform;if(o.rotate(mo.Konva.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const f=o.point({x:-this.padding()*2,y:0});t.x+=f.x,t.y+=f.y,t.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace("left","right"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const f=o.point({x:this.padding()*2,y:0});this._movingAnchorName=this._movingAnchorName.replace("right","left"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.width+=this.padding()*2}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const f=o.point({x:0,y:-this.padding()*2});t.x+=f.x,t.y+=f.y,this._movingAnchorName=this._movingAnchorName.replace("top","bottom"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const f=o.point({x:0,y:this.padding()*2});this._movingAnchorName=this._movingAnchorName.replace("bottom","top"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2}if(this.boundBoxFunc()){const f=this.boundBoxFunc()(r,t);f?t=f:bt.Util.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}const s=1e7,a=new bt.Transform;a.translate(r.x,r.y),a.rotate(r.rotation),a.scale(r.width/s,r.height/s);const l=new bt.Transform,c=t.width/s,u=t.height/s;this.flipEnabled()===!1?(l.translate(t.x,t.y),l.rotate(t.rotation),l.translate(t.width<0?t.width:0,t.height<0?t.height:0),l.scale(Math.abs(c),Math.abs(u))):(l.translate(t.x,t.y),l.rotate(t.rotation),l.scale(c,u));const d=l.multiply(a.invert());this._nodes.forEach(f=>{var h;const p=f.getParent().getAbsoluteTransform(),m=f.getTransform().copy();m.translate(f.offsetX(),f.offsetY());const _=new bt.Transform;_.multiply(p.copy().invert()).multiply(d).multiply(p).multiply(m);const v=_.decompose();f.setAttrs(v),this._fire("transform",{evt:n,target:f}),f._fire("transform",{evt:n,target:f}),(h=f.getLayer())===null||h===void 0||h.batchDraw()}),this.rotation(bt.Util._getRotation(t.rotation)),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,n){this.findOne(t).setAttrs(n)}update(){var t,n=this._getNodeRect();this.rotation(bt.Util._getRotation(n.rotation));var r=n.width,i=n.height,o=this.enabledAnchors(),s=this.resizeEnabled(),a=this.padding(),l=this.anchorSize();const c=this.find("._anchor");c.forEach(d=>{d.setAttrs({width:l,height:l,offsetX:l/2,offsetY:l/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(".top-left",{x:0,y:0,offsetX:l/2+a,offsetY:l/2+a,visible:s&&o.indexOf("top-left")>=0}),this._batchChangeChild(".top-center",{x:r/2,y:0,offsetY:l/2+a,visible:s&&o.indexOf("top-center")>=0}),this._batchChangeChild(".top-right",{x:r,y:0,offsetX:l/2-a,offsetY:l/2+a,visible:s&&o.indexOf("top-right")>=0}),this._batchChangeChild(".middle-left",{x:0,y:i/2,offsetX:l/2+a,visible:s&&o.indexOf("middle-left")>=0}),this._batchChangeChild(".middle-right",{x:r,y:i/2,offsetX:l/2-a,visible:s&&o.indexOf("middle-right")>=0}),this._batchChangeChild(".bottom-left",{x:0,y:i,offsetX:l/2+a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-left")>=0}),this._batchChangeChild(".bottom-center",{x:r/2,y:i,offsetY:l/2-a,visible:s&&o.indexOf("bottom-center")>=0}),this._batchChangeChild(".bottom-right",{x:r,y:i,offsetX:l/2-a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-right")>=0}),this._batchChangeChild(".rotater",{x:r/2,y:-this.rotateAnchorOffset()*bt.Util._sign(i)-a,visible:this.rotateEnabled()}),this._batchChangeChild(".back",{width:r,height:i,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const u=this.anchorStyleFunc();u&&c.forEach(d=>{u(d)}),(t=this.getLayer())===null||t===void 0||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();var t=this.findOne("."+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),RR.Group.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return MR.Node.prototype.toObject.call(this)}clone(t){var n=MR.Node.prototype.clone.call(this,t);return n}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}l2.Transformer=ot;function _Re(e){return e instanceof Array||bt.Util.warn("enabledAnchors value should be an array"),e instanceof Array&&e.forEach(function(t){ob.indexOf(t)===-1&&bt.Util.warn("Unknown anchor name: "+t+". Available names are: "+ob.join(", "))}),e||[]}ot.prototype.className="Transformer";(0,dRe._registerNode)(ot);gt.Factory.addGetterSetter(ot,"enabledAnchors",ob,_Re);gt.Factory.addGetterSetter(ot,"flipEnabled",!0,(0,Ul.getBooleanValidator)());gt.Factory.addGetterSetter(ot,"resizeEnabled",!0);gt.Factory.addGetterSetter(ot,"anchorSize",10,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"rotateEnabled",!0);gt.Factory.addGetterSetter(ot,"rotationSnaps",[]);gt.Factory.addGetterSetter(ot,"rotateAnchorOffset",50,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"rotateAnchorCursor","crosshair");gt.Factory.addGetterSetter(ot,"rotationSnapTolerance",5,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderEnabled",!0);gt.Factory.addGetterSetter(ot,"anchorStroke","rgb(0, 161, 255)");gt.Factory.addGetterSetter(ot,"anchorStrokeWidth",1,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"anchorFill","white");gt.Factory.addGetterSetter(ot,"anchorCornerRadius",0,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderStroke","rgb(0, 161, 255)");gt.Factory.addGetterSetter(ot,"borderStrokeWidth",1,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderDash");gt.Factory.addGetterSetter(ot,"keepRatio",!0);gt.Factory.addGetterSetter(ot,"shiftBehavior","default");gt.Factory.addGetterSetter(ot,"centeredScaling",!1);gt.Factory.addGetterSetter(ot,"ignoreStroke",!1);gt.Factory.addGetterSetter(ot,"padding",0,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"node");gt.Factory.addGetterSetter(ot,"nodes");gt.Factory.addGetterSetter(ot,"boundBoxFunc");gt.Factory.addGetterSetter(ot,"anchorDragBoundFunc");gt.Factory.addGetterSetter(ot,"anchorStyleFunc");gt.Factory.addGetterSetter(ot,"shouldOverdrawWholeArea",!1);gt.Factory.addGetterSetter(ot,"useSingleNodeRotation",!0);gt.Factory.backCompat(ot,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});var c2={};Object.defineProperty(c2,"__esModule",{value:!0});c2.Wedge=void 0;const u2=ze,SRe=An,xRe=Ue,TH=xe,wRe=Ue;class Sa extends SRe.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,xRe.Konva.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}c2.Wedge=Sa;Sa.prototype.className="Wedge";Sa.prototype._centroid=!0;Sa.prototype._attrsAffectingSize=["radius"];(0,wRe._registerNode)(Sa);u2.Factory.addGetterSetter(Sa,"radius",0,(0,TH.getNumberValidator)());u2.Factory.addGetterSetter(Sa,"angle",0,(0,TH.getNumberValidator)());u2.Factory.addGetterSetter(Sa,"clockwise",!1);u2.Factory.backCompat(Sa,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});var d2={};Object.defineProperty(d2,"__esModule",{value:!0});d2.Blur=void 0;const NR=ze,CRe=Vt,ERe=xe;function FR(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var TRe=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],ARe=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function kRe(e,t){var n=e.data,r=e.width,i=e.height,o,s,a,l,c,u,d,f,h,p,m,_,v,y,g,b,S,w,C,x,k,A,R,L,M=t+t+1,E=r-1,P=i-1,O=t+1,F=O*(O+1)/2,$=new FR,D=null,N=$,z=null,V=null,H=TRe[t],X=ARe[t];for(a=1;a>X,R!==0?(R=255/R,n[u]=(f*H>>X)*R,n[u+1]=(h*H>>X)*R,n[u+2]=(p*H>>X)*R):n[u]=n[u+1]=n[u+2]=0,f-=_,h-=v,p-=y,m-=g,_-=z.r,v-=z.g,y-=z.b,g-=z.a,l=d+((l=o+t+1)>X,R>0?(R=255/R,n[l]=(f*H>>X)*R,n[l+1]=(h*H>>X)*R,n[l+2]=(p*H>>X)*R):n[l]=n[l+1]=n[l+2]=0,f-=_,h-=v,p-=y,m-=g,_-=z.r,v-=z.g,y-=z.b,g-=z.a,l=o+((l=s+O)0&&kRe(t,n)};d2.Blur=PRe;NR.Factory.addGetterSetter(CRe.Node,"blurRadius",0,(0,ERe.getNumberValidator)(),NR.Factory.afterSetFilter);var f2={};Object.defineProperty(f2,"__esModule",{value:!0});f2.Brighten=void 0;const DR=ze,IRe=Vt,MRe=xe,RRe=function(e){var t=this.brightness()*255,n=e.data,r=n.length,i;for(i=0;i255?255:i,o=o<0?0:o>255?255:o,s=s<0?0:s>255?255:s,n[a]=i,n[a+1]=o,n[a+2]=s};h2.Contrast=NRe;LR.Factory.addGetterSetter(ORe.Node,"contrast",0,(0,$Re.getNumberValidator)(),LR.Factory.afterSetFilter);var p2={};Object.defineProperty(p2,"__esModule",{value:!0});p2.Emboss=void 0;const Al=ze,g2=Vt,FRe=Qt,AH=xe,DRe=function(e){var t=this.embossStrength()*10,n=this.embossWhiteLevel()*255,r=this.embossDirection(),i=this.embossBlend(),o=0,s=0,a=e.data,l=e.width,c=e.height,u=l*4,d=c;switch(r){case"top-left":o=-1,s=-1;break;case"top":o=-1,s=0;break;case"top-right":o=-1,s=1;break;case"right":o=0,s=1;break;case"bottom-right":o=1,s=1;break;case"bottom":o=1,s=0;break;case"bottom-left":o=1,s=-1;break;case"left":o=0,s=-1;break;default:FRe.Util.error("Unknown emboss direction: "+r)}do{var f=(d-1)*u,h=o;d+h<1&&(h=0),d+h>c&&(h=0);var p=(d-1+h)*l*4,m=l;do{var _=f+(m-1)*4,v=s;m+v<1&&(v=0),m+v>l&&(v=0);var y=p+(m-1+v)*4,g=a[_]-a[y],b=a[_+1]-a[y+1],S=a[_+2]-a[y+2],w=g,C=w>0?w:-w,x=b>0?b:-b,k=S>0?S:-S;if(x>C&&(w=b),k>C&&(w=S),w*=t,i){var A=a[_]+w,R=a[_+1]+w,L=a[_+2]+w;a[_]=A>255?255:A<0?0:A,a[_+1]=R>255?255:R<0?0:R,a[_+2]=L>255?255:L<0?0:L}else{var M=n-w;M<0?M=0:M>255&&(M=255),a[_]=a[_+1]=a[_+2]=M}}while(--m)}while(--d)};p2.Emboss=DRe;Al.Factory.addGetterSetter(g2.Node,"embossStrength",.5,(0,AH.getNumberValidator)(),Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossWhiteLevel",.5,(0,AH.getNumberValidator)(),Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossDirection","top-left",null,Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossBlend",!1,null,Al.Factory.afterSetFilter);var m2={};Object.defineProperty(m2,"__esModule",{value:!0});m2.Enhance=void 0;const BR=ze,LRe=Vt,BRe=xe;function lC(e,t,n,r,i){var o=n-t,s=i-r,a;return o===0?r+s/2:s===0?r:(a=(e-t)/o,a=s*a+r,a)}const zRe=function(e){var t=e.data,n=t.length,r=t[0],i=r,o,s=t[1],a=s,l,c=t[2],u=c,d,f,h=this.enhance();if(h!==0){for(f=0;fi&&(i=o),l=t[f+1],la&&(a=l),d=t[f+2],du&&(u=d);i===r&&(i=255,r=0),a===s&&(a=255,s=0),u===c&&(u=255,c=0);var p,m,_,v,y,g,b,S,w;for(h>0?(m=i+h*(255-i),_=r-h*(r-0),y=a+h*(255-a),g=s-h*(s-0),S=u+h*(255-u),w=c-h*(c-0)):(p=(i+r)*.5,m=i+h*(i-p),_=r+h*(r-p),v=(a+s)*.5,y=a+h*(a-v),g=s+h*(s-v),b=(u+c)*.5,S=u+h*(u-b),w=c+h*(c-b)),f=0;fv?_:v;var y=s,g=o,b,S,w=360/g*Math.PI/180,C,x;for(S=0;Sg?y:g;var b=s,S=o,w,C,x=n.polarRotation||0,k,A;for(u=0;ut&&(b=g,S=0,w=-1),i=0;i=0&&h=0&&p=0&&h=0&&p=255*4?255:0}return s}function tOe(e,t,n){for(var r=[.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111],i=Math.round(Math.sqrt(r.length)),o=Math.floor(i/2),s=[],a=0;a=0&&h=0&&p=n))for(o=m;o<_;o+=1)o>=r||(s=(n*o+i)*4,a+=b[s+0],l+=b[s+1],c+=b[s+2],u+=b[s+3],g+=1);for(a=a/g,l=l/g,c=c/g,u=u/g,i=h;i=n))for(o=m;o<_;o+=1)o>=r||(s=(n*o+i)*4,b[s+0]=a,b[s+1]=l,b[s+2]=c,b[s+3]=u)}};C2.Pixelate=cOe;UR.Factory.addGetterSetter(aOe.Node,"pixelSize",8,(0,lOe.getNumberValidator)(),UR.Factory.afterSetFilter);var E2={};Object.defineProperty(E2,"__esModule",{value:!0});E2.Posterize=void 0;const GR=ze,uOe=Vt,dOe=xe,fOe=function(e){var t=Math.round(this.levels()*254)+1,n=e.data,r=n.length,i=255/t,o;for(o=0;o255?255:e<0?0:Math.round(e)});ab.Factory.addGetterSetter(XA.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});ab.Factory.addGetterSetter(XA.Node,"blue",0,hOe.RGBComponent,ab.Factory.afterSetFilter);var A2={};Object.defineProperty(A2,"__esModule",{value:!0});A2.RGBA=void 0;const Gg=ze,k2=Vt,gOe=xe,mOe=function(e){var t=e.data,n=t.length,r=this.red(),i=this.green(),o=this.blue(),s=this.alpha(),a,l;for(a=0;a255?255:e<0?0:Math.round(e)});Gg.Factory.addGetterSetter(k2.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});Gg.Factory.addGetterSetter(k2.Node,"blue",0,gOe.RGBComponent,Gg.Factory.afterSetFilter);Gg.Factory.addGetterSetter(k2.Node,"alpha",1,function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e});var P2={};Object.defineProperty(P2,"__esModule",{value:!0});P2.Sepia=void 0;const yOe=function(e){var t=e.data,n=t.length,r,i,o,s;for(r=0;r127&&(c=255-c),u>127&&(u=255-u),d>127&&(d=255-d),t[l]=c,t[l+1]=u,t[l+2]=d}while(--a)}while(--o)};I2.Solarize=vOe;var M2={};Object.defineProperty(M2,"__esModule",{value:!0});M2.Threshold=void 0;const HR=ze,bOe=Vt,_Oe=xe,SOe=function(e){var t=this.threshold()*255,n=e.data,r=n.length,i;for(i=0;i{const{width:r,height:i}=t,o=document.createElement("div"),s=new Ih.Stage({container:o,width:r,height:i}),a=new Ih.Layer,l=new Ih.Layer;return a.add(new Ih.Rect({...t,fill:n?"black":"white"})),e.forEach(c=>l.add(new Ih.Line({points:c.points,stroke:n?"white":"black",strokeWidth:c.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,globalCompositeOperation:c.tool==="brush"?"source-over":"destination-out"}))),s.add(a),s.add(l),o.remove(),s},a7e=async(e,t,n)=>new Promise((r,i)=>{const o=document.createElement("canvas");o.width=t,o.height=n;const s=o.getContext("2d"),a=new Image;if(!s){o.remove(),i("Unable to get context");return}a.onload=function(){s.drawImage(a,0,0),o.remove(),r(s.getImageData(0,0,t,n))},a.src=e}),KR=async(e,t)=>{const n=e.toDataURL(t);return await a7e(n,t.width,t.height)},QA=async(e,t,n,r,i)=>{const o=ue("canvas"),s=LS(),a=tMe();if(!s||!a){o.error("Unable to find canvas / stage");return}const l={...t,...n},c=s.clone();c.scale({x:1,y:1});const u=c.getAbsolutePosition(),d={x:l.x+u.x,y:l.y+u.y,width:l.width,height:l.height},f=await rb(c,d),h=await KR(c,d),p=await s7e(r?e.objects.filter(rL):[],l,i),m=await rb(p,l),_=await KR(p,l);return{baseBlob:f,baseImageData:h,maskBlob:m,maskImageData:_}},l7e=()=>{fe({actionCreator:K8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),o=await QA(i.canvas.layerState,i.canvas.boundingBoxCoordinates,i.canvas.boundingBoxDimensions,i.canvas.isMaskEnabled,i.canvas.shouldPreserveMaskedArea);if(!o)return;const{maskBlob:s}=o;if(!s){r.error("Problem getting mask layer blob"),t(Ve({title:J("toast.problemSavingMask"),description:J("toast.problemSavingMaskDesc"),status:"error"}));return}const{autoAddBoardId:a}=i.gallery;t(ce.endpoints.uploadImage.initiate({file:new File([s],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!1,board_id:a==="none"?void 0:a,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.maskSavedAssets")}}}))}})},c7e=()=>{fe({actionCreator:J8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{id:o}=e.payload,s=await QA(i.canvas.layerState,i.canvas.boundingBoxCoordinates,i.canvas.boundingBoxDimensions,i.canvas.isMaskEnabled,i.canvas.shouldPreserveMaskedArea);if(!s)return;const{maskBlob:a}=s;if(!a){r.error("Problem getting mask layer blob"),t(Ve({title:J("toast.problemImportingMask"),description:J("toast.problemImportingMaskDesc"),status:"error"}));return}const{autoAddBoardId:l}=i.gallery,c=await t(ce.endpoints.uploadImage.initiate({file:new File([a],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!1,board_id:l==="none"?void 0:l,crop_visible:!1,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.maskSentControlnetAssets")}}})).unwrap(),{image_name:u}=c;t(Nl({id:o,controlImage:u}))}})},u7e=async()=>{const e=LS();if(!e)return;const t=e.clone();return t.scale({x:1,y:1}),rb(t,t.getClientRect())},d7e=()=>{fe({actionCreator:Y8e,effect:async(e,{dispatch:t})=>{const n=B_.get().child({namespace:"canvasCopiedToClipboardListener"}),r=await u7e();if(!r){n.error("Problem getting base layer blob"),t(Ve({title:J("toast.problemMergingCanvas"),description:J("toast.problemMergingCanvasDesc"),status:"error"}));return}const i=LS();if(!i){n.error("Problem getting canvas base layer"),t(Ve({title:J("toast.problemMergingCanvas"),description:J("toast.problemMergingCanvasDesc"),status:"error"}));return}const o=i.getClientRect({relativeTo:i.getParent()??void 0}),s=await t(ce.endpoints.uploadImage.initiate({file:new File([r],"mergedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasMerged")}}})).unwrap(),{image_name:a}=s;t(oue({kind:"image",layer:"base",imageName:a,...o}))}})},f7e=()=>{fe({actionCreator:q8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n();let o;try{o=await BS(i)}catch(a){r.error(String(a)),t(Ve({title:J("toast.problemSavingCanvas"),description:J("toast.problemSavingCanvasDesc"),status:"error"}));return}const{autoAddBoardId:s}=i.gallery;t(ce.endpoints.uploadImage.initiate({file:new File([o],"savedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!1,board_id:s==="none"?void 0:s,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasSavedGallery")}}}))}})},h7e=(e,t,n)=>{if(!(dae.match(e)||tI.match(e)||Nl.match(e)||fae.match(e)||nI.match(e)))return!1;const{id:i}=e.payload,o=li(n.controlAdapters,i),s=li(t.controlAdapters,i);if(!o||!hi(o)||!s||!hi(s)||nI.match(e)&&o.shouldAutoConfig===!0)return!1;const{controlImage:a,processorType:l,shouldAutoConfig:c}=s;return tI.match(e)&&!c?!1:l!=="none"&&!!a},p7e=()=>{fe({predicate:h7e,effect:async(e,{dispatch:t,cancelActiveListeners:n,delay:r})=>{const i=ue("session"),{id:o}=e.payload;n(),i.trace("ControlNet auto-process triggered"),await r(300),t(q4({id:o}))}})},g7e=()=>{fe({actionCreator:q4,effect:async(e,{dispatch:t,getState:n,take:r})=>{const i=ue("session"),{id:o}=e.payload,s=li(n().controlAdapters,o);if(!(s!=null&&s.controlImage)||!hi(s)){i.error("Unable to process ControlNet image");return}if(s.processorType==="none"||s.processorNode.type==="none")return;const a=s.processorNode.id,l={prepend:!0,batch:{graph:{nodes:{[s.processorNode.id]:{...s.processorNode,is_intermediate:!0,use_cache:!1,image:{image_name:s.controlImage}}}},runs:1}};try{const c=t(en.endpoints.enqueueBatch.initiate(l,{fixedCacheKey:"enqueueBatch"})),u=await c.unwrap();c.reset(),i.debug({enqueueResult:tt(u)},J("queue.graphQueued"));const[d]=await r(f=>L4.match(f)&&f.payload.data.queue_batch_id===u.batch.batch_id&&f.payload.data.source_node_id===a);if(QD(d.payload.data.result)){const{image_name:f}=d.payload.data.result.image,[{payload:h}]=await r(m=>ce.endpoints.getImageDTO.matchFulfilled(m)&&m.payload.image_name===f),p=h;i.debug({controlNetId:e.payload,processedControlImage:p},"ControlNet image processed"),t(X4({id:o,processedControlImage:p.image_name}))}}catch(c){if(i.error({enqueueBatchArg:tt(l)},J("queue.graphFailedToQueue")),c instanceof Object&&"data"in c&&"status"in c&&c.status===403){t(pae()),t(Nl({id:o,controlImage:null}));return}t(Ve({title:J("queue.graphFailedToQueue"),status:"error"}))}}})},YA=he("app/enqueueRequested");he("app/batchEnqueued");const m7e=e=>{const t=window.open("");t&&e.forEach(n=>{const r=new Image;r.src=n.base64,t.document.write(n.caption),t.document.write("
"),t.document.write(r.outerHTML),t.document.write("

")})},XR=e=>new Promise((t,n)=>{const r=new FileReader;r.onload=i=>t(r.result),r.onerror=i=>n(r.error),r.onabort=i=>n(new Error("Read aborted")),r.readAsDataURL(e)}),y7e=e=>{let t=!0,n=!1;const r=e.length;let i=3;for(i;i{const t=e.length;let n=0;for(n;n{const{isPartiallyTransparent:n,isFullyTransparent:r}=y7e(e.data),i=v7e(t.data);return n?r?"txt2img":"outpaint":i?"inpaint":"img2img"},ve="positive_conditioning",Se="negative_conditioning",le="denoise_latents",Ku="denoise_latents_hrf",_e="latents_to_image",Xa="latents_to_image_hrf_hr",fc="latents_to_image_hrf_lr",Mh="image_to_latents_hrf",Da="resize_hrf",ep="esrgan_hrf",zc="linear_ui_output",gl="nsfw_checker",Tc="invisible_watermark",me="noise",Rh="noise_hrf",Oo="main_model_loader",R2="onnx_model_loader",ci="vae_loader",IH="lora_loader",at="clip_skip",Nt="image_to_latents",ls="resize_image",jc="img2img_resize",ae="canvas_output",At="inpaint_image",_7e="scaled_inpaint_image",Dn="inpaint_image_resize_up",nr="inpaint_image_resize_down",rt="inpaint_infill",Zs="inpaint_infill_resize_down",S7e="inpaint_final_image",Et="inpaint_create_mask",x7e="inpaint_mask",Re="canvas_coherence_denoise_latents",nt="canvas_coherence_noise",kl="canvas_coherence_noise_increment",Jt="canvas_coherence_mask_edge",Je="canvas_coherence_inpaint_create_mask",Gd="tomask",hr="mask_blur",Jn="mask_combine",Tt="mask_resize_up",mr="mask_resize_down",w7e="img_paste",Oh="control_net_collect",Py="ip_adapter_collect",$h="t2i_adapter_collect",yi="core_metadata",tp="esrgan",C7e="scale_image",pr="sdxl_model_loader",se="sdxl_denoise_latents",tc="sdxl_refiner_model_loader",Iy="sdxl_refiner_positive_conditioning",My="sdxl_refiner_negative_conditioning",Xo="sdxl_refiner_denoise_latents",ji="refiner_inpaint_create_mask",Cn="seamless",Eo="refiner_seamless",E7e=[ae,_e,Xa,gl,Tc,tp,ep,Da,fc,jc,At,_7e,Dn,nr,rt,Zs,S7e,Et,x7e,w7e,C7e],MH="text_to_image_graph",tE="image_to_image_graph",RH="canvas_text_to_image_graph",nE="canvas_image_to_image_graph",O2="canvas_inpaint_graph",$2="canvas_outpaint_graph",ZA="sdxl_text_to_image_graph",lb="sxdl_image_to_image_graph",N2="sdxl_canvas_text_to_image_graph",Hg="sdxl_canvas_image_to_image_graph",Pl="sdxl_canvas_inpaint_graph",Il="sdxl_canvas_outpaint_graph",xa=(e,t,n)=>{e.nodes[yi]={id:yi,type:"core_metadata",...t},e.edges.push({source:{node_id:yi,field:"metadata"},destination:{node_id:n,field:"metadata"}})},Bo=(e,t)=>{const n=e.nodes[yi];n&&Object.assign(n,t)},Nh=(e,t)=>{const n=e.nodes[yi];n&&delete n[t]},Fh=e=>!!e.nodes[yi],T7e=(e,t)=>{e.edges=e.edges.filter(n=>n.source.node_id!==yi),e.edges.push({source:{node_id:yi,field:"metadata"},destination:{node_id:t,field:"metadata"}})},ro=(e,t,n)=>{const r=rae(e.controlAdapters).filter(o=>{var s,a;return((s=o.model)==null?void 0:s.base_model)===((a=e.generation.model)==null?void 0:a.base_model)}),i=[];if(r.length){const o={id:Oh,type:"collect",is_intermediate:!0};t.nodes[Oh]=o,t.edges.push({source:{node_id:Oh,field:"collection"},destination:{node_id:n,field:"control"}}),Re in t.nodes&&t.edges.push({source:{node_id:Oh,field:"collection"},destination:{node_id:Re,field:"control"}}),r.forEach(s=>{if(!s.model)return;const{id:a,controlImage:l,processedControlImage:c,beginStepPct:u,endStepPct:d,controlMode:f,resizeMode:h,model:p,processorType:m,weight:_}=s,v={id:`control_net_${a}`,type:"controlnet",is_intermediate:!0,begin_step_percent:u,end_step_percent:d,control_mode:f,resize_mode:h,control_model:p,control_weight:_};if(c&&m!=="none")v.image={image_name:c};else if(l)v.image={image_name:l};else return;t.nodes[v.id]=v,i.push(uu(v,["id","type","is_intermediate"])),t.edges.push({source:{node_id:v.id,field:"control"},destination:{node_id:Oh,field:"item"}})}),Bo(t,{controlnets:i})}},io=(e,t,n)=>{const r=oae(e.controlAdapters).filter(i=>{var o,s;return((o=i.model)==null?void 0:o.base_model)===((s=e.generation.model)==null?void 0:s.base_model)});if(r.length){const i={id:Py,type:"collect",is_intermediate:!0};t.nodes[Py]=i,t.edges.push({source:{node_id:Py,field:"collection"},destination:{node_id:n,field:"ip_adapter"}}),Re in t.nodes&&t.edges.push({source:{node_id:Py,field:"collection"},destination:{node_id:Re,field:"ip_adapter"}});const o=[];r.forEach(s=>{if(!s.model)return;const{id:a,weight:l,model:c,beginStepPct:u,endStepPct:d}=s,f={id:`ip_adapter_${a}`,type:"ip_adapter",is_intermediate:!0,weight:l,ip_adapter_model:c,begin_step_percent:u,end_step_percent:d};if(s.controlImage)f.image={image_name:s.controlImage};else return;t.nodes[f.id]=f,o.push(uu(f,["id","type","is_intermediate"])),t.edges.push({source:{node_id:f.id,field:"ip_adapter"},destination:{node_id:i.id,field:"item"}})}),Bo(t,{ipAdapters:o})}},A7e=["txt2img","img2img","unifiedCanvas","nodes","modelManager","queue"],JA=hu(e=>e,({ui:e})=>jF(e.activeTab)?e.activeTab:"txt2img"),$We=hu(e=>e,({ui:e,config:t})=>{const r=A7e.filter(i=>!t.disabledTabs.includes(i)).indexOf(e.activeTab);return r===-1?0:r}),oo=(e,t)=>{const r=JA(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,{autoAddBoardId:i}=e.gallery,o={id:zc,type:"linear_ui_output",is_intermediate:r,use_cache:!1,board:i==="none"?void 0:{board_id:i}};t.nodes[zc]=o;const s={node_id:zc,field:"image"};Tc in t.nodes?t.edges.push({source:{node_id:Tc,field:"image"},destination:s}):gl in t.nodes?t.edges.push({source:{node_id:gl,field:"image"},destination:s}):ae in t.nodes?t.edges.push({source:{node_id:ae,field:"image"},destination:s}):Xa in t.nodes?t.edges.push({source:{node_id:Xa,field:"image"},destination:s}):_e in t.nodes&&t.edges.push({source:{node_id:_e,field:"image"},destination:s})},Hf=(e,t,n,r=Oo)=>{const{loras:i}=e.lora,o=c_(i);if(o===0)return;t.edges=t.edges.filter(c=>!(c.source.node_id===r&&["unet"].includes(c.source.field))),t.edges=t.edges.filter(c=>!(c.source.node_id===at&&["clip"].includes(c.source.field)));let s="",a=0;const l=[];Fo(i,c=>{const{model_name:u,base_model:d,weight:f}=c,h=`${IH}_${u.replace(".","_")}`,p={type:"lora_loader",id:h,is_intermediate:!0,lora:{model_name:u,base_model:d},weight:f};l.push({lora:{model_name:u,base_model:d},weight:f}),t.nodes[h]=p,a===0?(t.edges.push({source:{node_id:r,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:at,field:"clip"},destination:{node_id:h,field:"clip"}})):(t.edges.push({source:{node_id:s,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:s,field:"clip"},destination:{node_id:h,field:"clip"}})),a===o-1&&(t.edges.push({source:{node_id:h,field:"unet"},destination:{node_id:n,field:"unet"}}),t.id&&[O2,$2].includes(t.id)&&t.edges.push({source:{node_id:h,field:"unet"},destination:{node_id:Re,field:"unet"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:ve,field:"clip"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:Se,field:"clip"}})),s=h,a+=1}),Bo(t,{loras:l})},so=(e,t,n=_e)=>{const r=t.nodes[n];if(!r)return;r.is_intermediate=!0,r.use_cache=!0;const i={id:gl,type:"img_nsfw",is_intermediate:!0};t.nodes[gl]=i,t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:gl,field:"image"}})},ao=(e,t,n)=>{const{seamlessXAxis:r,seamlessYAxis:i}=e.generation;t.nodes[Cn]={id:Cn,type:"seamless",seamless_x:r,seamless_y:i},r&&Bo(t,{seamless_x:r}),i&&Bo(t,{seamless_y:i});let o=le;(t.id===ZA||t.id===lb||t.id===N2||t.id===Hg||t.id===Pl||t.id===Il)&&(o=se),t.edges=t.edges.filter(s=>!(s.source.node_id===n&&["unet"].includes(s.source.field))&&!(s.source.node_id===n&&["vae"].includes(s.source.field))),t.edges.push({source:{node_id:n,field:"unet"},destination:{node_id:Cn,field:"unet"}},{source:{node_id:n,field:"vae"},destination:{node_id:Cn,field:"vae"}},{source:{node_id:Cn,field:"unet"},destination:{node_id:o,field:"unet"}}),(t.id==O2||t.id===$2||t.id===Pl||t.id===Il)&&t.edges.push({source:{node_id:Cn,field:"unet"},destination:{node_id:Re,field:"unet"}})},lo=(e,t,n)=>{const r=aae(e.controlAdapters).filter(i=>{var o,s;return((o=i.model)==null?void 0:o.base_model)===((s=e.generation.model)==null?void 0:s.base_model)});if(r.length){const i={id:$h,type:"collect",is_intermediate:!0};t.nodes[$h]=i,t.edges.push({source:{node_id:$h,field:"collection"},destination:{node_id:n,field:"t2i_adapter"}}),Re in t.nodes&&t.edges.push({source:{node_id:$h,field:"collection"},destination:{node_id:Re,field:"t2i_adapter"}});const o=[];r.forEach(s=>{if(!s.model)return;const{id:a,controlImage:l,processedControlImage:c,beginStepPct:u,endStepPct:d,resizeMode:f,model:h,processorType:p,weight:m}=s,_={id:`t2i_adapter_${a}`,type:"t2i_adapter",is_intermediate:!0,begin_step_percent:u,end_step_percent:d,resize_mode:f,t2i_adapter_model:h,weight:m};if(c&&p!=="none")_.image={image_name:c};else if(l)_.image={image_name:l};else return;t.nodes[_.id]=_,o.push(uu(_,["id","type","is_intermediate"])),t.edges.push({source:{node_id:_.id,field:"t2i_adapter"},destination:{node_id:$h,field:"item"}})}),Bo(t,{t2iAdapters:o})}},co=(e,t,n=Oo)=>{const{vae:r,canvasCoherenceMode:i}=e.generation,{boundingBoxScaleMethod:o}=e.canvas,{shouldUseSDXLRefiner:s}=e.sdxl,a=["auto","manual"].includes(o),l=!r;l||(t.nodes[ci]={type:"vae_loader",id:ci,is_intermediate:!0,vae_model:r});const c=n==R2;(t.id===MH||t.id===tE||t.id===ZA||t.id===lb)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:_e,field:"vae"}}),(t.id===RH||t.id===nE||t.id===N2||t.id==Hg)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:a?_e:ae,field:"vae"}}),(t.id===tE||t.id===lb||t.id===nE||t.id===Hg)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Nt,field:"vae"}}),(t.id===O2||t.id===$2||t.id===Pl||t.id===Il)&&(t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:At,field:"vae"}},{source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Et,field:"vae"}},{source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:_e,field:"vae"}}),i!=="unmasked"&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Je,field:"vae"}})),s&&(t.id===Pl||t.id===Il)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:ji,field:"vae"}}),r&&Bo(t,{vae:r})},uo=(e,t,n=_e)=>{const i=JA(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,o=t.nodes[n],s=t.nodes[gl];if(!o)return;const a={id:Tc,type:"img_watermark",is_intermediate:i};t.nodes[Tc]=a,o.is_intermediate=!0,o.use_cache=!0,s?(s.is_intermediate=!0,t.edges.push({source:{node_id:gl,field:"image"},destination:{node_id:Tc,field:"image"}})):t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:Tc,field:"image"}})},k7e=(e,t)=>{const n=ue("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,cfgRescaleMultiplier:a,scheduler:l,seed:c,steps:u,img2imgStrength:d,vaePrecision:f,clipSkip:h,shouldUseCpuNoise:p,seamlessXAxis:m,seamlessYAxis:_}=e.generation,{width:v,height:y}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:g,boundingBoxScaleMethod:b}=e.canvas,S=f==="fp32",w=!0,C=["auto","manual"].includes(b);if(!o)throw n.error("No model found in state"),new Error("No model found in state");let x=Oo;const k=p,A={id:nE,nodes:{[x]:{type:"main_model_loader",id:x,is_intermediate:w,model:o},[at]:{type:"clip_skip",id:at,is_intermediate:w,skipped_layers:h},[ve]:{type:"compel",id:ve,is_intermediate:w,prompt:r},[Se]:{type:"compel",id:Se,is_intermediate:w,prompt:i},[me]:{type:"noise",id:me,is_intermediate:w,use_cpu:k,seed:c,width:C?g.width:v,height:C?g.height:y},[Nt]:{type:"i2l",id:Nt,is_intermediate:w},[le]:{type:"denoise_latents",id:le,is_intermediate:w,cfg_scale:s,scheduler:l,steps:u,denoising_start:1-d,denoising_end:1},[ae]:{type:"l2i",id:ae,is_intermediate:w,use_cache:!1}},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:le,field:"latents"}}]};return C?(A.nodes[jc]={id:jc,type:"img_resize",is_intermediate:w,image:t,width:g.width,height:g.height},A.nodes[_e]={id:_e,type:"l2i",is_intermediate:w,fp32:S},A.nodes[ae]={id:ae,type:"img_resize",is_intermediate:w,width:v,height:y,use_cache:!1},A.edges.push({source:{node_id:jc,field:"image"},destination:{node_id:Nt,field:"image"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(A.nodes[ae]={type:"l2i",id:ae,is_intermediate:w,fp32:S,use_cache:!1},A.nodes[Nt].image=t,A.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(A,{generation_mode:"img2img",cfg_scale:s,cfg_rescale_multiplier:a,width:C?g.width:v,height:C?g.height:y,positive_prompt:r,negative_prompt:i,model:o,seed:c,steps:u,rand_device:k?"cpu":"cuda",scheduler:l,clip_skip:h,strength:d,init_image:t.image_name},ae),(m||_)&&(ao(e,A,x),x=Cn),Hf(e,A,le),co(e,A,x),ro(e,A,le),io(e,A,le),lo(e,A,le),e.system.shouldUseNSFWChecker&&so(e,A,ae),e.system.shouldUseWatermarker&&uo(e,A,ae),oo(e,A),A},P7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,img2imgStrength:u,seed:d,vaePrecision:f,shouldUseCpuNoise:h,maskBlur:p,maskBlurMethod:m,canvasCoherenceMode:_,canvasCoherenceSteps:v,canvasCoherenceStrength:y,clipSkip:g,seamlessXAxis:b,seamlessYAxis:S}=e.generation;if(!s)throw r.error("No Image found in state"),new Error("No Image found in state");const{width:w,height:C}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:x,boundingBoxScaleMethod:k}=e.canvas,A=!0,R=f==="fp32",L=["auto","manual"].includes(k);let M=Oo;const E=h,P={id:O2,nodes:{[M]:{type:"main_model_loader",id:M,is_intermediate:A,model:s},[at]:{type:"clip_skip",id:at,is_intermediate:A,skipped_layers:g},[ve]:{type:"compel",id:ve,is_intermediate:A,prompt:i},[Se]:{type:"compel",id:Se,is_intermediate:A,prompt:o},[hr]:{type:"img_blur",id:hr,is_intermediate:A,radius:p,blur_type:m},[At]:{type:"i2l",id:At,is_intermediate:A,fp32:R},[me]:{type:"noise",id:me,use_cpu:E,seed:d,is_intermediate:A},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:A,fp32:R},[le]:{type:"denoise_latents",id:le,is_intermediate:A,steps:c,cfg_scale:a,scheduler:l,denoising_start:1-u,denoising_end:1},[nt]:{type:"noise",id:nt,use_cpu:E,seed:d+1,is_intermediate:A},[kl]:{type:"add",id:kl,b:1,is_intermediate:A},[Re]:{type:"denoise_latents",id:Re,is_intermediate:A,steps:v,cfg_scale:a,scheduler:l,denoising_start:1-y,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:A,fp32:R},[ae]:{type:"color_correct",id:ae,is_intermediate:A,reference:t,use_cache:!1}},edges:[{source:{node_id:M,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:M,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:hr,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:le,field:"denoise_mask"}},{source:{node_id:M,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(L){const O=x.width,F=x.height;P.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:A,width:O,height:F,image:t},P.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:A,width:O,height:F,image:n},P.nodes[nr]={type:"img_resize",id:nr,is_intermediate:A,width:w,height:C},P.nodes[mr]={type:"img_resize",id:mr,is_intermediate:A,width:w,height:C},P.nodes[me].width=O,P.nodes[me].height=F,P.nodes[nt].width=O,P.nodes[nt].height=F,P.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:hr,field:"image"}},{source:{node_id:Dn,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else P.nodes[me].width=w,P.nodes[me].height=C,P.nodes[nt].width=w,P.nodes[nt].height=C,P.nodes[At]={...P.nodes[At],image:t},P.nodes[hr]={...P.nodes[hr],image:n},P.nodes[Et]={...P.nodes[Et],image:t},P.edges.push({source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:ae,field:"mask"}});return _!=="unmasked"&&(P.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:A,fp32:R},L?P.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:Je,field:"image"}}):P.nodes[Je]={...P.nodes[Je],image:t},_==="mask"&&(L?P.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):P.nodes[Je]={...P.nodes[Je],mask:n}),_==="edge"&&(P.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:A,edge_blur:p,edge_size:p*2,low_threshold:100,high_threshold:200},L?P.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):P.nodes[Jt]={...P.nodes[Jt],image:n},P.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),P.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(b||S)&&(ao(e,P,M),M=Cn),co(e,P,M),Hf(e,P,le,M),ro(e,P,le),io(e,P,le),lo(e,P,le),e.system.shouldUseNSFWChecker&&so(e,P,ae),e.system.shouldUseWatermarker&&uo(e,P,ae),oo(e,P),P},I7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,img2imgStrength:u,seed:d,vaePrecision:f,shouldUseCpuNoise:h,maskBlur:p,canvasCoherenceMode:m,canvasCoherenceSteps:_,canvasCoherenceStrength:v,infillTileSize:y,infillPatchmatchDownscaleSize:g,infillMethod:b,clipSkip:S,seamlessXAxis:w,seamlessYAxis:C}=e.generation;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:x,height:k}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:A,boundingBoxScaleMethod:R}=e.canvas,L=f==="fp32",M=!0,E=["auto","manual"].includes(R);let P=Oo;const O=h,F={id:$2,nodes:{[P]:{type:"main_model_loader",id:P,is_intermediate:M,model:s},[at]:{type:"clip_skip",id:at,is_intermediate:M,skipped_layers:S},[ve]:{type:"compel",id:ve,is_intermediate:M,prompt:i},[Se]:{type:"compel",id:Se,is_intermediate:M,prompt:o},[Gd]:{type:"tomask",id:Gd,is_intermediate:M,image:t},[Jn]:{type:"mask_combine",id:Jn,is_intermediate:M,mask2:n},[At]:{type:"i2l",id:At,is_intermediate:M,fp32:L},[me]:{type:"noise",id:me,use_cpu:O,seed:d,is_intermediate:M},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:M,fp32:L},[le]:{type:"denoise_latents",id:le,is_intermediate:M,steps:c,cfg_scale:a,scheduler:l,denoising_start:1-u,denoising_end:1},[nt]:{type:"noise",id:nt,use_cpu:O,seed:d+1,is_intermediate:M},[kl]:{type:"add",id:kl,b:1,is_intermediate:M},[Re]:{type:"denoise_latents",id:Re,is_intermediate:M,steps:_,cfg_scale:a,scheduler:l,denoising_start:1-v,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:M,fp32:L},[ae]:{type:"color_correct",id:ae,is_intermediate:M,use_cache:!1}},edges:[{source:{node_id:P,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:P,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:rt,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Gd,field:"image"},destination:{node_id:Jn,field:"mask1"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:E?Tt:Jn,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:le,field:"denoise_mask"}},{source:{node_id:P,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:rt,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(b==="patchmatch"&&(F.nodes[rt]={type:"infill_patchmatch",id:rt,is_intermediate:M,downscale:g}),b==="lama"&&(F.nodes[rt]={type:"infill_lama",id:rt,is_intermediate:M}),b==="cv2"&&(F.nodes[rt]={type:"infill_cv2",id:rt,is_intermediate:M}),b==="tile"&&(F.nodes[rt]={type:"infill_tile",id:rt,is_intermediate:M,tile_size:y}),E){const $=A.width,D=A.height;F.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:M,width:$,height:D,image:t},F.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:M,width:$,height:D},F.nodes[nr]={type:"img_resize",id:nr,is_intermediate:M,width:x,height:k},F.nodes[Zs]={type:"img_resize",id:Zs,is_intermediate:M,width:x,height:k},F.nodes[mr]={type:"img_resize",id:mr,is_intermediate:M,width:x,height:k},F.nodes[me].width=$,F.nodes[me].height=D,F.nodes[nt].width=$,F.nodes[nt].height=D,F.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:rt,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:Tt,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:rt,field:"image"},destination:{node_id:Zs,field:"image"}},{source:{node_id:Zs,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else F.nodes[rt]={...F.nodes[rt],image:t},F.nodes[me].width=x,F.nodes[me].height=k,F.nodes[nt].width=x,F.nodes[nt].height=k,F.nodes[At]={...F.nodes[At],image:t},F.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:ae,field:"mask"}});return m!=="unmasked"&&(F.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:M,fp32:L},F.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:Je,field:"image"}}),m==="mask"&&(E?F.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):F.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Je,field:"mask"}})),m==="edge"&&(F.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:M,edge_blur:p,edge_size:p*2,low_threshold:100,high_threshold:200},E?F.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):F.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Jt,field:"image"}}),F.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),F.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(w||C)&&(ao(e,F,P),P=Cn),co(e,F,P),Hf(e,F,le,P),ro(e,F,le),io(e,F,le),lo(e,F,le),e.system.shouldUseNSFWChecker&&so(e,F,ae),e.system.shouldUseWatermarker&&uo(e,F,ae),oo(e,F),F},Wf=(e,t,n,r=pr)=>{const{loras:i}=e.lora,o=c_(i);if(o===0)return;const s=[],a=r;let l=r;[Cn,ji].includes(r)&&(l=pr),t.edges=t.edges.filter(d=>!(d.source.node_id===a&&["unet"].includes(d.source.field))&&!(d.source.node_id===l&&["clip"].includes(d.source.field))&&!(d.source.node_id===l&&["clip2"].includes(d.source.field)));let c="",u=0;Fo(i,d=>{const{model_name:f,base_model:h,weight:p}=d,m=`${IH}_${f.replace(".","_")}`,_={type:"sdxl_lora_loader",id:m,is_intermediate:!0,lora:{model_name:f,base_model:h},weight:p};s.push(tB.parse({lora:{model_name:f,base_model:h},weight:p})),t.nodes[m]=_,u===0?(t.edges.push({source:{node_id:a,field:"unet"},destination:{node_id:m,field:"unet"}}),t.edges.push({source:{node_id:l,field:"clip"},destination:{node_id:m,field:"clip"}}),t.edges.push({source:{node_id:l,field:"clip2"},destination:{node_id:m,field:"clip2"}})):(t.edges.push({source:{node_id:c,field:"unet"},destination:{node_id:m,field:"unet"}}),t.edges.push({source:{node_id:c,field:"clip"},destination:{node_id:m,field:"clip"}}),t.edges.push({source:{node_id:c,field:"clip2"},destination:{node_id:m,field:"clip2"}})),u===o-1&&(t.edges.push({source:{node_id:m,field:"unet"},destination:{node_id:n,field:"unet"}}),t.id&&[Pl,Il].includes(t.id)&&t.edges.push({source:{node_id:m,field:"unet"},destination:{node_id:Re,field:"unet"}}),t.edges.push({source:{node_id:m,field:"clip"},destination:{node_id:ve,field:"clip"}}),t.edges.push({source:{node_id:m,field:"clip"},destination:{node_id:Se,field:"clip"}}),t.edges.push({source:{node_id:m,field:"clip2"},destination:{node_id:ve,field:"clip2"}}),t.edges.push({source:{node_id:m,field:"clip2"},destination:{node_id:Se,field:"clip2"}})),c=m,u+=1}),Bo(t,{loras:s})},xu=(e,t)=>{const{positivePrompt:n,negativePrompt:r}=e.generation,{positiveStylePrompt:i,negativeStylePrompt:o,shouldConcatSDXLStylePrompt:s}=e.sdxl,a=s||t?[n,i].join(" "):i,l=s||t?[r,o].join(" "):o;return{joinedPositiveStylePrompt:a,joinedNegativeStylePrompt:l}},qf=(e,t,n,r,i,o)=>{const{refinerModel:s,refinerPositiveAestheticScore:a,refinerNegativeAestheticScore:l,refinerSteps:c,refinerScheduler:u,refinerCFGScale:d,refinerStart:f}=e.sdxl,{seamlessXAxis:h,seamlessYAxis:p,vaePrecision:m}=e.generation,{boundingBoxScaleMethod:_}=e.canvas,v=m==="fp32",y=["auto","manual"].includes(_);if(!s)return;Bo(t,{refiner_model:s,refiner_positive_aesthetic_score:a,refiner_negative_aesthetic_score:l,refiner_cfg_scale:d,refiner_scheduler:u,refiner_start:f,refiner_steps:c});const g=r||pr,{joinedPositiveStylePrompt:b,joinedNegativeStylePrompt:S}=xu(e,!0);t.edges=t.edges.filter(w=>!(w.source.node_id===n&&["latents"].includes(w.source.field))),t.edges=t.edges.filter(w=>!(w.source.node_id===g&&["vae"].includes(w.source.field))),t.nodes[tc]={type:"sdxl_refiner_model_loader",id:tc,model:s},t.nodes[Iy]={type:"sdxl_refiner_compel_prompt",id:Iy,style:b,aesthetic_score:a},t.nodes[My]={type:"sdxl_refiner_compel_prompt",id:My,style:S,aesthetic_score:l},t.nodes[Xo]={type:"denoise_latents",id:Xo,cfg_scale:d,steps:c,scheduler:u,denoising_start:f,denoising_end:1},h||p?(t.nodes[Eo]={id:Eo,type:"seamless",seamless_x:h,seamless_y:p},t.edges.push({source:{node_id:tc,field:"unet"},destination:{node_id:Eo,field:"unet"}},{source:{node_id:tc,field:"vae"},destination:{node_id:Eo,field:"vae"}},{source:{node_id:Eo,field:"unet"},destination:{node_id:Xo,field:"unet"}})):t.edges.push({source:{node_id:tc,field:"unet"},destination:{node_id:Xo,field:"unet"}}),t.edges.push({source:{node_id:tc,field:"clip2"},destination:{node_id:Iy,field:"clip2"}},{source:{node_id:tc,field:"clip2"},destination:{node_id:My,field:"clip2"}},{source:{node_id:Iy,field:"conditioning"},destination:{node_id:Xo,field:"positive_conditioning"}},{source:{node_id:My,field:"conditioning"},destination:{node_id:Xo,field:"negative_conditioning"}},{source:{node_id:n,field:"latents"},destination:{node_id:Xo,field:"latents"}}),(t.id===Pl||t.id===Il)&&(t.nodes[ji]={type:"create_denoise_mask",id:ji,is_intermediate:!0,fp32:v},y?t.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:ji,field:"image"}}):t.nodes[ji]={...t.nodes[ji],image:i},t.id===Pl&&(y?t.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:ji,field:"mask"}}):t.nodes[ji]={...t.nodes[ji],mask:o}),t.id===Il&&t.edges.push({source:{node_id:y?Tt:Jn,field:"image"},destination:{node_id:ji,field:"mask"}}),t.edges.push({source:{node_id:ji,field:"denoise_mask"},destination:{node_id:Xo,field:"denoise_mask"}})),t.id===N2||t.id===Hg?t.edges.push({source:{node_id:Xo,field:"latents"},destination:{node_id:y?_e:ae,field:"latents"}}):t.edges.push({source:{node_id:Xo,field:"latents"},destination:{node_id:_e,field:"latents"}})},M7e=(e,t)=>{const n=ue("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,cfgRescaleMultiplier:a,scheduler:l,seed:c,steps:u,vaePrecision:d,shouldUseCpuNoise:f,seamlessXAxis:h,seamlessYAxis:p}=e.generation,{shouldUseSDXLRefiner:m,refinerStart:_,sdxlImg2ImgDenoisingStrength:v}=e.sdxl,{width:y,height:g}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:b,boundingBoxScaleMethod:S}=e.canvas,w=d==="fp32",C=!0,x=["auto","manual"].includes(S);if(!o)throw n.error("No model found in state"),new Error("No model found in state");let k=pr;const A=f,{joinedPositiveStylePrompt:R,joinedNegativeStylePrompt:L}=xu(e),M={id:Hg,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:o},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:r,style:R},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:i,style:L},[me]:{type:"noise",id:me,is_intermediate:C,use_cpu:A,seed:c,width:x?b.width:y,height:x?b.height:g},[Nt]:{type:"i2l",id:Nt,is_intermediate:C,fp32:w},[se]:{type:"denoise_latents",id:se,is_intermediate:C,cfg_scale:s,scheduler:l,steps:u,denoising_start:m?Math.min(_,1-v):1-v,denoising_end:m?_:1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:se,field:"latents"}}]};return x?(M.nodes[jc]={id:jc,type:"img_resize",is_intermediate:C,image:t,width:b.width,height:b.height},M.nodes[_e]={id:_e,type:"l2i",is_intermediate:C,fp32:w},M.nodes[ae]={id:ae,type:"img_resize",is_intermediate:C,width:y,height:g,use_cache:!1},M.edges.push({source:{node_id:jc,field:"image"},destination:{node_id:Nt,field:"image"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(M.nodes[ae]={type:"l2i",id:ae,is_intermediate:C,fp32:w,use_cache:!1},M.nodes[Nt].image=t,M.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(M,{generation_mode:"img2img",cfg_scale:s,cfg_rescale_multiplier:a,width:x?b.width:y,height:x?b.height:g,positive_prompt:r,negative_prompt:i,model:o,seed:c,steps:u,rand_device:A?"cpu":"cuda",scheduler:l,strength:v,init_image:t.image_name},ae),(h||p)&&(ao(e,M,k),k=Cn),m&&(qf(e,M,se,k),(h||p)&&(k=Eo)),co(e,M,k),Wf(e,M,se,k),ro(e,M,se),io(e,M,se),lo(e,M,se),e.system.shouldUseNSFWChecker&&so(e,M,ae),e.system.shouldUseWatermarker&&uo(e,M,ae),oo(e,M),M},R7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,seed:u,vaePrecision:d,shouldUseCpuNoise:f,maskBlur:h,maskBlurMethod:p,canvasCoherenceMode:m,canvasCoherenceSteps:_,canvasCoherenceStrength:v,seamlessXAxis:y,seamlessYAxis:g}=e.generation,{sdxlImg2ImgDenoisingStrength:b,shouldUseSDXLRefiner:S,refinerStart:w}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:C,height:x}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:k,boundingBoxScaleMethod:A}=e.canvas,R=d==="fp32",L=!0,M=["auto","manual"].includes(A);let E=pr;const P=f,{joinedPositiveStylePrompt:O,joinedNegativeStylePrompt:F}=xu(e),$={id:Pl,nodes:{[E]:{type:"sdxl_model_loader",id:E,model:s},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:i,style:O},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:o,style:F},[hr]:{type:"img_blur",id:hr,is_intermediate:L,radius:h,blur_type:p},[At]:{type:"i2l",id:At,is_intermediate:L,fp32:R},[me]:{type:"noise",id:me,use_cpu:P,seed:u,is_intermediate:L},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:L,fp32:R},[se]:{type:"denoise_latents",id:se,is_intermediate:L,steps:c,cfg_scale:a,scheduler:l,denoising_start:S?Math.min(w,1-b):1-b,denoising_end:S?w:1},[nt]:{type:"noise",id:nt,use_cpu:P,seed:u+1,is_intermediate:L},[kl]:{type:"add",id:kl,b:1,is_intermediate:L},[Re]:{type:"denoise_latents",id:Re,is_intermediate:L,steps:_,cfg_scale:a,scheduler:l,denoising_start:1-v,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:L,fp32:R},[ae]:{type:"color_correct",id:ae,is_intermediate:L,reference:t,use_cache:!1}},edges:[{source:{node_id:E,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:E,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:E,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:E,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:E,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:hr,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:se,field:"denoise_mask"}},{source:{node_id:E,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(M){const D=k.width,N=k.height;$.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:L,width:D,height:N,image:t},$.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:L,width:D,height:N,image:n},$.nodes[nr]={type:"img_resize",id:nr,is_intermediate:L,width:C,height:x},$.nodes[mr]={type:"img_resize",id:mr,is_intermediate:L,width:C,height:x},$.nodes[me].width=D,$.nodes[me].height=N,$.nodes[nt].width=D,$.nodes[nt].height=N,$.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:hr,field:"image"}},{source:{node_id:Dn,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else $.nodes[me].width=C,$.nodes[me].height=x,$.nodes[nt].width=C,$.nodes[nt].height=x,$.nodes[At]={...$.nodes[At],image:t},$.nodes[hr]={...$.nodes[hr],image:n},$.nodes[Et]={...$.nodes[Et],image:t},$.edges.push({source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:ae,field:"mask"}});return m!=="unmasked"&&($.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:L,fp32:R},M?$.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:Je,field:"image"}}):$.nodes[Je]={...$.nodes[Je],image:t},m==="mask"&&(M?$.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):$.nodes[Je]={...$.nodes[Je],mask:n}),m==="edge"&&($.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:L,edge_blur:h,edge_size:h*2,low_threshold:100,high_threshold:200},M?$.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):$.nodes[Jt]={...$.nodes[Jt],image:n},$.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),$.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(y||g)&&(ao(e,$,E),E=Cn),S&&(qf(e,$,Re,E,t,n),(y||g)&&(E=Eo)),co(e,$,E),Wf(e,$,se,E),ro(e,$,se),io(e,$,se),lo(e,$,se),e.system.shouldUseNSFWChecker&&so(e,$,ae),e.system.shouldUseWatermarker&&uo(e,$,ae),oo(e,$),$},O7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,seed:u,vaePrecision:d,shouldUseCpuNoise:f,maskBlur:h,canvasCoherenceMode:p,canvasCoherenceSteps:m,canvasCoherenceStrength:_,infillTileSize:v,infillPatchmatchDownscaleSize:y,infillMethod:g,seamlessXAxis:b,seamlessYAxis:S}=e.generation,{sdxlImg2ImgDenoisingStrength:w,shouldUseSDXLRefiner:C,refinerStart:x}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:k,height:A}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:R,boundingBoxScaleMethod:L}=e.canvas,M=d==="fp32",E=!0,P=["auto","manual"].includes(L);let O=pr;const F=f,{joinedPositiveStylePrompt:$,joinedNegativeStylePrompt:D}=xu(e),N={id:Il,nodes:{[pr]:{type:"sdxl_model_loader",id:pr,model:s},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:i,style:$},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:o,style:D},[Gd]:{type:"tomask",id:Gd,is_intermediate:E,image:t},[Jn]:{type:"mask_combine",id:Jn,is_intermediate:E,mask2:n},[At]:{type:"i2l",id:At,is_intermediate:E,fp32:M},[me]:{type:"noise",id:me,use_cpu:F,seed:u,is_intermediate:E},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:E,fp32:M},[se]:{type:"denoise_latents",id:se,is_intermediate:E,steps:c,cfg_scale:a,scheduler:l,denoising_start:C?Math.min(x,1-w):1-w,denoising_end:C?x:1},[nt]:{type:"noise",id:nt,use_cpu:F,seed:u+1,is_intermediate:E},[kl]:{type:"add",id:kl,b:1,is_intermediate:E},[Re]:{type:"denoise_latents",id:Re,is_intermediate:E,steps:m,cfg_scale:a,scheduler:l,denoising_start:1-_,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:E,fp32:M},[ae]:{type:"color_correct",id:ae,is_intermediate:E,use_cache:!1}},edges:[{source:{node_id:pr,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:pr,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:pr,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:pr,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:pr,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:rt,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Gd,field:"image"},destination:{node_id:Jn,field:"mask1"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:P?Tt:Jn,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:se,field:"denoise_mask"}},{source:{node_id:O,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:rt,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(g==="patchmatch"&&(N.nodes[rt]={type:"infill_patchmatch",id:rt,is_intermediate:E,downscale:y}),g==="lama"&&(N.nodes[rt]={type:"infill_lama",id:rt,is_intermediate:E}),g==="cv2"&&(N.nodes[rt]={type:"infill_cv2",id:rt,is_intermediate:E}),g==="tile"&&(N.nodes[rt]={type:"infill_tile",id:rt,is_intermediate:E,tile_size:v}),P){const z=R.width,V=R.height;N.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:E,width:z,height:V,image:t},N.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:E,width:z,height:V},N.nodes[nr]={type:"img_resize",id:nr,is_intermediate:E,width:k,height:A},N.nodes[Zs]={type:"img_resize",id:Zs,is_intermediate:E,width:k,height:A},N.nodes[mr]={type:"img_resize",id:mr,is_intermediate:E,width:k,height:A},N.nodes[me].width=z,N.nodes[me].height=V,N.nodes[nt].width=z,N.nodes[nt].height=V,N.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:rt,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:Tt,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:rt,field:"image"},destination:{node_id:Zs,field:"image"}},{source:{node_id:Zs,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else N.nodes[rt]={...N.nodes[rt],image:t},N.nodes[me].width=k,N.nodes[me].height=A,N.nodes[nt].width=k,N.nodes[nt].height=A,N.nodes[At]={...N.nodes[At],image:t},N.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:ae,field:"mask"}});return p!=="unmasked"&&(N.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:E,fp32:M},N.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:Je,field:"image"}}),p==="mask"&&(P?N.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):N.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Je,field:"mask"}})),p==="edge"&&(N.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:E,edge_blur:h,edge_size:h*2,low_threshold:100,high_threshold:200},P?N.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):N.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Jt,field:"image"}}),N.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),N.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(b||S)&&(ao(e,N,O),O=Cn),C&&(qf(e,N,Re,O,t),(b||S)&&(O=Eo)),co(e,N,O),Wf(e,N,se,O),ro(e,N,se),io(e,N,se),lo(e,N,se),e.system.shouldUseNSFWChecker&&so(e,N,ae),e.system.shouldUseWatermarker&&uo(e,N,ae),oo(e,N),N},$7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,vaePrecision:u,shouldUseCpuNoise:d,seamlessXAxis:f,seamlessYAxis:h}=e.generation,{width:p,height:m}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:_,boundingBoxScaleMethod:v}=e.canvas,y=u==="fp32",g=!0,b=["auto","manual"].includes(v),{shouldUseSDXLRefiner:S,refinerStart:w}=e.sdxl;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const C=d,x=i.model_type==="onnx";let k=x?R2:pr;const A=x?"onnx_model_loader":"sdxl_model_loader",R=x?{type:"t2l_onnx",id:se,is_intermediate:g,cfg_scale:o,scheduler:a,steps:c}:{type:"denoise_latents",id:se,is_intermediate:g,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:S?w:1},{joinedPositiveStylePrompt:L,joinedNegativeStylePrompt:M}=xu(e),E={id:N2,nodes:{[k]:{type:A,id:k,is_intermediate:g,model:i},[ve]:{type:x?"prompt_onnx":"sdxl_compel_prompt",id:ve,is_intermediate:g,prompt:n,style:L},[Se]:{type:x?"prompt_onnx":"sdxl_compel_prompt",id:Se,is_intermediate:g,prompt:r,style:M},[me]:{type:"noise",id:me,is_intermediate:g,seed:l,width:b?_.width:p,height:b?_.height:m,use_cpu:C},[R.id]:R},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}}]};return b?(E.nodes[_e]={id:_e,type:x?"l2i_onnx":"l2i",is_intermediate:g,fp32:y},E.nodes[ae]={id:ae,type:"img_resize",is_intermediate:g,width:p,height:m,use_cache:!1},E.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(E.nodes[ae]={type:x?"l2i_onnx":"l2i",id:ae,is_intermediate:g,fp32:y,use_cache:!1},E.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(E,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,width:b?_.width:p,height:b?_.height:m,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:C?"cpu":"cuda",scheduler:a},ae),(f||h)&&(ao(e,E,k),k=Cn),S&&(qf(e,E,se,k),(f||h)&&(k=Eo)),Wf(e,E,se,k),co(e,E,k),ro(e,E,se),io(e,E,se),lo(e,E,se),e.system.shouldUseNSFWChecker&&so(e,E,ae),e.system.shouldUseWatermarker&&uo(e,E,ae),oo(e,E),E},N7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,vaePrecision:u,clipSkip:d,shouldUseCpuNoise:f,seamlessXAxis:h,seamlessYAxis:p}=e.generation,{width:m,height:_}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:v,boundingBoxScaleMethod:y}=e.canvas,g=u==="fp32",b=!0,S=["auto","manual"].includes(y);if(!i)throw t.error("No model found in state"),new Error("No model found in state");const w=f,C=i.model_type==="onnx";let x=C?R2:Oo;const k=C?"onnx_model_loader":"main_model_loader",A=C?{type:"t2l_onnx",id:le,is_intermediate:b,cfg_scale:o,scheduler:a,steps:c}:{type:"denoise_latents",id:le,is_intermediate:b,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:1},R={id:RH,nodes:{[x]:{type:k,id:x,is_intermediate:b,model:i},[at]:{type:"clip_skip",id:at,is_intermediate:b,skipped_layers:d},[ve]:{type:C?"prompt_onnx":"compel",id:ve,is_intermediate:b,prompt:n},[Se]:{type:C?"prompt_onnx":"compel",id:Se,is_intermediate:b,prompt:r},[me]:{type:"noise",id:me,is_intermediate:b,seed:l,width:S?v.width:m,height:S?v.height:_,use_cpu:w},[A.id]:A},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}}]};return S?(R.nodes[_e]={id:_e,type:C?"l2i_onnx":"l2i",is_intermediate:b,fp32:g},R.nodes[ae]={id:ae,type:"img_resize",is_intermediate:b,width:m,height:_,use_cache:!1},R.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(R.nodes[ae]={type:C?"l2i_onnx":"l2i",id:ae,is_intermediate:b,fp32:g,use_cache:!1},R.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(R,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,width:S?v.width:m,height:S?v.height:_,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:w?"cpu":"cuda",scheduler:a,clip_skip:d},ae),(h||p)&&(ao(e,R,x),x=Cn),co(e,R,x),Hf(e,R,le,x),ro(e,R,le),io(e,R,le),lo(e,R,le),e.system.shouldUseNSFWChecker&&so(e,R,ae),e.system.shouldUseWatermarker&&uo(e,R,ae),oo(e,R),R},F7e=(e,t,n,r)=>{let i;if(t==="txt2img")e.generation.model&&e.generation.model.base_model==="sdxl"?i=$7e(e):i=N7e(e);else if(t==="img2img"){if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=M7e(e,n):i=k7e(e,n)}else if(t==="inpaint"){if(!n||!r)throw new Error("Missing canvas init and mask images");e.generation.model&&e.generation.model.base_model==="sdxl"?i=R7e(e,n,r):i=P7e(e,n,r)}else{if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=O7e(e,n,r):i=I7e(e,n,r)}return i},cC=({count:e,start:t,min:n=vae,max:r=mp})=>{const i=t??Aoe(n,r),o=[];for(let s=i;s{const{iterations:r,model:i,shouldRandomizeSeed:o,seed:s}=e.generation,{shouldConcatSDXLStylePrompt:a,positiveStylePrompt:l}=e.sdxl,{prompts:c,seedBehaviour:u}=e.dynamicPrompts,d=[];if(c.length===1){const h=cC({count:r,start:o?void 0:s}),p=[];t.nodes[me]&&p.push({node_path:me,field_name:"seed",items:h}),Fh(t)&&(Nh(t,"seed"),p.push({node_path:yi,field_name:"seed",items:h})),t.nodes[nt]&&p.push({node_path:nt,field_name:"seed",items:h.map(m=>(m+1)%mp)}),d.push(p)}else{const h=[],p=[];if(u==="PER_PROMPT"){const _=cC({count:c.length*r,start:o?void 0:s});t.nodes[me]&&h.push({node_path:me,field_name:"seed",items:_}),Fh(t)&&(Nh(t,"seed"),h.push({node_path:yi,field_name:"seed",items:_})),t.nodes[nt]&&h.push({node_path:nt,field_name:"seed",items:_.map(v=>(v+1)%mp)})}else{const _=cC({count:r,start:o?void 0:s});t.nodes[me]&&p.push({node_path:me,field_name:"seed",items:_}),Fh(t)&&(Nh(t,"seed"),p.push({node_path:yi,field_name:"seed",items:_})),t.nodes[nt]&&p.push({node_path:nt,field_name:"seed",items:_.map(v=>(v+1)%mp)}),d.push(p)}const m=u==="PER_PROMPT"?Ooe(r).flatMap(()=>c):c;if(t.nodes[ve]&&h.push({node_path:ve,field_name:"prompt",items:m}),Fh(t)&&(Nh(t,"positive_prompt"),h.push({node_path:yi,field_name:"positive_prompt",items:m})),a&&(i==null?void 0:i.base_model)==="sdxl"){const _=m.map(v=>[v,l].join(" "));t.nodes[ve]&&h.push({node_path:ve,field_name:"style",items:_}),Fh(t)&&(Nh(t,"positive_style_prompt"),h.push({node_path:yi,field_name:"positive_style_prompt",items:m}))}d.push(h)}return{prepend:n,batch:{graph:t,runs:1,data:d}}},D7e=()=>{fe({predicate:e=>YA.match(e)&&e.payload.tabName==="unifiedCanvas",effect:async(e,{getState:t,dispatch:n})=>{const r=ue("queue"),{prepend:i}=e.payload,o=t(),{layerState:s,boundingBoxCoordinates:a,boundingBoxDimensions:l,isMaskEnabled:c,shouldPreserveMaskedArea:u}=o.canvas,d=await QA(s,a,l,c,u);if(!d){r.error("Unable to create canvas data");return}const{baseBlob:f,baseImageData:h,maskBlob:p,maskImageData:m}=d,_=b7e(h,m);if(o.system.enableImageDebugging){const S=await XR(f),w=await XR(p);m7e([{base64:w,caption:"mask b64"},{base64:S,caption:"image b64"}])}r.debug(`Generation mode: ${_}`);let v,y;["img2img","inpaint","outpaint"].includes(_)&&(v=await n(ce.endpoints.uploadImage.initiate({file:new File([f],"canvasInitImage.png",{type:"image/png"}),image_category:"general",is_intermediate:!0})).unwrap()),["inpaint","outpaint"].includes(_)&&(y=await n(ce.endpoints.uploadImage.initiate({file:new File([p],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!0})).unwrap());const g=F7e(o,_,v,y);r.debug({graph:tt(g)},"Canvas graph built"),n(lB(g));const b=OH(o,g,i);try{const S=n(en.endpoints.enqueueBatch.initiate(b,{fixedCacheKey:"enqueueBatch"})),w=await S.unwrap();S.reset();const C=w.batch.batch_id;o.canvas.layerState.stagingArea.boundingBox||n(sue({boundingBox:{...o.canvas.boundingBoxCoordinates,...o.canvas.boundingBoxDimensions}})),n(aue(C))}catch{}}})},L7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,initialImage:u,img2imgStrength:d,shouldFitToWidthHeight:f,width:h,height:p,clipSkip:m,shouldUseCpuNoise:_,vaePrecision:v,seamlessXAxis:y,seamlessYAxis:g}=e.generation;if(!u)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const b=v==="fp32",S=!0;let w=Oo;const C=_,x={id:tE,nodes:{[w]:{type:"main_model_loader",id:w,model:i,is_intermediate:S},[at]:{type:"clip_skip",id:at,skipped_layers:m,is_intermediate:S},[ve]:{type:"compel",id:ve,prompt:n,is_intermediate:S},[Se]:{type:"compel",id:Se,prompt:r,is_intermediate:S},[me]:{type:"noise",id:me,use_cpu:C,seed:l,is_intermediate:S},[_e]:{type:"l2i",id:_e,fp32:b,is_intermediate:S},[le]:{type:"denoise_latents",id:le,cfg_scale:o,scheduler:a,steps:c,denoising_start:1-d,denoising_end:1,is_intermediate:S},[Nt]:{type:"i2l",id:Nt,fp32:b,is_intermediate:S,use_cache:!1}},edges:[{source:{node_id:w,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:w,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(f&&(u.width!==h||u.height!==p)){const k={id:ls,type:"img_resize",image:{image_name:u.imageName},is_intermediate:!0,width:h,height:p};x.nodes[ls]=k,x.edges.push({source:{node_id:ls,field:"image"},destination:{node_id:Nt,field:"image"}}),x.edges.push({source:{node_id:ls,field:"width"},destination:{node_id:me,field:"width"}}),x.edges.push({source:{node_id:ls,field:"height"},destination:{node_id:me,field:"height"}})}else x.nodes[Nt].image={image_name:u.imageName},x.edges.push({source:{node_id:Nt,field:"width"},destination:{node_id:me,field:"width"}}),x.edges.push({source:{node_id:Nt,field:"height"},destination:{node_id:me,field:"height"}});return xa(x,{generation_mode:"img2img",cfg_scale:o,cfg_rescale_multiplier:s,height:p,width:h,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:C?"cpu":"cuda",scheduler:a,clip_skip:m,strength:d,init_image:u.imageName},_e),(y||g)&&(ao(e,x,w),w=Cn),co(e,x,w),Hf(e,x,le,w),ro(e,x,le),io(e,x,le),lo(e,x,le),e.system.shouldUseNSFWChecker&&so(e,x),e.system.shouldUseWatermarker&&uo(e,x),oo(e,x),x},B7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,initialImage:u,shouldFitToWidthHeight:d,width:f,height:h,shouldUseCpuNoise:p,vaePrecision:m,seamlessXAxis:_,seamlessYAxis:v}=e.generation,{positiveStylePrompt:y,negativeStylePrompt:g,shouldUseSDXLRefiner:b,refinerStart:S,sdxlImg2ImgDenoisingStrength:w}=e.sdxl;if(!u)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const C=m==="fp32",x=!0;let k=pr;const A=p,{joinedPositiveStylePrompt:R,joinedNegativeStylePrompt:L}=xu(e),M={id:lb,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:i,is_intermediate:x},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:n,style:R,is_intermediate:x},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:r,style:L,is_intermediate:x},[me]:{type:"noise",id:me,use_cpu:A,seed:l,is_intermediate:x},[_e]:{type:"l2i",id:_e,fp32:C,is_intermediate:x},[se]:{type:"denoise_latents",id:se,cfg_scale:o,scheduler:a,steps:c,denoising_start:b?Math.min(S,1-w):1-w,denoising_end:b?S:1,is_intermediate:x},[Nt]:{type:"i2l",id:Nt,fp32:C,is_intermediate:x,use_cache:!1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(d&&(u.width!==f||u.height!==h)){const E={id:ls,type:"img_resize",image:{image_name:u.imageName},is_intermediate:!0,width:f,height:h};M.nodes[ls]=E,M.edges.push({source:{node_id:ls,field:"image"},destination:{node_id:Nt,field:"image"}}),M.edges.push({source:{node_id:ls,field:"width"},destination:{node_id:me,field:"width"}}),M.edges.push({source:{node_id:ls,field:"height"},destination:{node_id:me,field:"height"}})}else M.nodes[Nt].image={image_name:u.imageName},M.edges.push({source:{node_id:Nt,field:"width"},destination:{node_id:me,field:"width"}}),M.edges.push({source:{node_id:Nt,field:"height"},destination:{node_id:me,field:"height"}});return xa(M,{generation_mode:"sdxl_img2img",cfg_scale:o,cfg_rescale_multiplier:s,height:h,width:f,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:A?"cpu":"cuda",scheduler:a,strength:w,init_image:u.imageName,positive_style_prompt:y,negative_style_prompt:g},_e),(_||v)&&(ao(e,M,k),k=Cn),b&&(qf(e,M,se),(_||v)&&(k=Eo)),co(e,M,k),Wf(e,M,se,k),ro(e,M,se),io(e,M,se),lo(e,M,se),e.system.shouldUseNSFWChecker&&so(e,M),e.system.shouldUseWatermarker&&uo(e,M),oo(e,M),M},z7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,width:u,height:d,shouldUseCpuNoise:f,vaePrecision:h,seamlessXAxis:p,seamlessYAxis:m}=e.generation,{positiveStylePrompt:_,negativeStylePrompt:v,shouldUseSDXLRefiner:y,refinerStart:g}=e.sdxl,b=f;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const S=h==="fp32",w=!0,{joinedPositiveStylePrompt:C,joinedNegativeStylePrompt:x}=xu(e);let k=pr;const A={id:ZA,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:i,is_intermediate:w},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:n,style:C,is_intermediate:w},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:r,style:x,is_intermediate:w},[me]:{type:"noise",id:me,seed:l,width:u,height:d,use_cpu:b,is_intermediate:w},[se]:{type:"denoise_latents",id:se,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:y?g:1,is_intermediate:w},[_e]:{type:"l2i",id:_e,fp32:S,is_intermediate:w,use_cache:!1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}}]};return xa(A,{generation_mode:"sdxl_txt2img",cfg_scale:o,cfg_rescale_multiplier:s,height:d,width:u,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:b?"cpu":"cuda",scheduler:a,positive_style_prompt:_,negative_style_prompt:v},_e),(p||m)&&(ao(e,A,k),k=Cn),y&&(qf(e,A,se),(p||m)&&(k=Eo)),co(e,A,k),Wf(e,A,se,k),ro(e,A,se),io(e,A,se),lo(e,A,se),e.system.shouldUseNSFWChecker&&so(e,A),e.system.shouldUseWatermarker&&uo(e,A),oo(e,A),A};function j7e(e){const t=["vae","control","ip_adapter","metadata","unet","positive_conditioning","negative_conditioning"],n=[];e.edges.forEach(r=>{r.destination.node_id===le&&t.includes(r.destination.field)&&n.push({source:{node_id:r.source.node_id,field:r.source.field},destination:{node_id:Ku,field:r.destination.field}})}),e.edges=e.edges.concat(n)}function V7e(e,t,n){const r=t/n;let i;e=="sdxl"?i=1024:i=512;const o=Math.floor(i*.5),s=i*i;let a,l;r>1?(l=Math.max(o,Math.sqrt(s/r)),a=l*r):(a=Math.max(o,Math.sqrt(s*r)),l=a/r),a=Math.min(t,a),l=Math.min(n,l);const c=Or(Math.floor(a),8),u=Or(Math.floor(l),8);return{newWidth:c,newHeight:u}}const U7e=(e,t)=>{var _;if(!e.generation.hrfEnabled||e.config.disabledSDFeatures.includes("hrf")||((_=e.generation.model)==null?void 0:_.model_type)==="onnx")return;const n=ue("txt2img"),{vae:r,hrfStrength:i,hrfEnabled:o,hrfMethod:s}=e.generation,a=!r,l=e.generation.width,c=e.generation.height,u=e.generation.model?e.generation.model.base_model:"sd1",{newWidth:d,newHeight:f}=V7e(u,l,c),h=t.nodes[le],p=t.nodes[me],m=t.nodes[_e];if(!h){n.error("originalDenoiseLatentsNode is undefined");return}if(!p){n.error("originalNoiseNode is undefined");return}if(!m){n.error("originalLatentsToImageNode is undefined");return}if(p&&(p.width=d,p.height=f),t.nodes[fc]={type:"l2i",id:fc,fp32:m==null?void 0:m.fp32,is_intermediate:!0},t.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:fc,field:"latents"}},{source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:fc,field:"vae"}}),t.nodes[Da]={id:Da,type:"img_resize",is_intermediate:!0,width:l,height:c},s=="ESRGAN"){let v="RealESRGAN_x2plus.pth";l*c/(d*f)>2&&(v="RealESRGAN_x4plus.pth"),t.nodes[ep]={id:ep,type:"esrgan",model_name:v,is_intermediate:!0},t.edges.push({source:{node_id:fc,field:"image"},destination:{node_id:ep,field:"image"}},{source:{node_id:ep,field:"image"},destination:{node_id:Da,field:"image"}})}else t.edges.push({source:{node_id:fc,field:"image"},destination:{node_id:Da,field:"image"}});t.nodes[Rh]={type:"noise",id:Rh,seed:p==null?void 0:p.seed,use_cpu:p==null?void 0:p.use_cpu,is_intermediate:!0},t.edges.push({source:{node_id:Da,field:"height"},destination:{node_id:Rh,field:"height"}},{source:{node_id:Da,field:"width"},destination:{node_id:Rh,field:"width"}}),t.nodes[Mh]={type:"i2l",id:Mh,is_intermediate:!0},t.edges.push({source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:Mh,field:"vae"}},{source:{node_id:Da,field:"image"},destination:{node_id:Mh,field:"image"}}),t.nodes[Ku]={type:"denoise_latents",id:Ku,is_intermediate:!0,cfg_scale:h==null?void 0:h.cfg_scale,scheduler:h==null?void 0:h.scheduler,steps:h==null?void 0:h.steps,denoising_start:1-e.generation.hrfStrength,denoising_end:1},t.edges.push({source:{node_id:Mh,field:"latents"},destination:{node_id:Ku,field:"latents"}},{source:{node_id:Rh,field:"noise"},destination:{node_id:Ku,field:"noise"}}),j7e(t),t.nodes[Xa]={type:"l2i",id:Xa,fp32:m==null?void 0:m.fp32,is_intermediate:!0},t.edges.push({source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:Xa,field:"vae"}},{source:{node_id:Ku,field:"latents"},destination:{node_id:Xa,field:"latents"}}),Bo(t,{hrf_strength:i,hrf_enabled:o,hrf_method:s}),T7e(t,Xa)},G7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,steps:l,width:c,height:u,clipSkip:d,shouldUseCpuNoise:f,vaePrecision:h,seamlessXAxis:p,seamlessYAxis:m,seed:_}=e.generation,v=f;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const y=h==="fp32",g=!0,b=i.model_type==="onnx";let S=b?R2:Oo;const w=b?"onnx_model_loader":"main_model_loader",C=b?{type:"t2l_onnx",id:le,is_intermediate:g,cfg_scale:o,scheduler:a,steps:l}:{type:"denoise_latents",id:le,is_intermediate:g,cfg_scale:o,cfg_rescale_multiplier:s,scheduler:a,steps:l,denoising_start:0,denoising_end:1},x={id:MH,nodes:{[S]:{type:w,id:S,is_intermediate:g,model:i},[at]:{type:"clip_skip",id:at,skipped_layers:d,is_intermediate:g},[ve]:{type:b?"prompt_onnx":"compel",id:ve,prompt:n,is_intermediate:g},[Se]:{type:b?"prompt_onnx":"compel",id:Se,prompt:r,is_intermediate:g},[me]:{type:"noise",id:me,seed:_,width:c,height:u,use_cpu:v,is_intermediate:g},[C.id]:C,[_e]:{type:b?"l2i_onnx":"l2i",id:_e,fp32:y,is_intermediate:g,use_cache:!1}},edges:[{source:{node_id:S,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:S,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}}]};return xa(x,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,height:u,width:c,positive_prompt:n,negative_prompt:r,model:i,seed:_,steps:l,rand_device:v?"cpu":"cuda",scheduler:a,clip_skip:d},_e),(p||m)&&(ao(e,x,S),S=Cn),co(e,x,S),Hf(e,x,le,S),ro(e,x,le),io(e,x,le),lo(e,x,le),e.generation.hrfEnabled&&!b&&U7e(e,x),e.system.shouldUseNSFWChecker&&so(e,x),e.system.shouldUseWatermarker&&uo(e,x),oo(e,x),x},H7e=()=>{fe({predicate:e=>YA.match(e)&&(e.payload.tabName==="txt2img"||e.payload.tabName==="img2img"),effect:async(e,{getState:t,dispatch:n})=>{const r=t(),i=r.generation.model,{prepend:o}=e.payload;let s;i&&i.base_model==="sdxl"?e.payload.tabName==="txt2img"?s=z7e(r):s=B7e(r):e.payload.tabName==="txt2img"?s=G7e(r):s=L7e(r);const a=OH(r,s,o);n(en.endpoints.enqueueBatch.initiate(a,{fixedCacheKey:"enqueueBatch"})).reset()}})},W7e=e=>{if(Che(e)&&e.value){const t=Ge(e.value),{r:n,g:r,b:i,a:o}=e.value,s=Math.max(0,Math.min(o*255,255));return Object.assign(t,{r:n,g:r,b:i,a:s}),t}return e.value},q7e=e=>{const{nodes:t,edges:n}=e,i=t.filter(Sn).reduce((l,c)=>{const{id:u,data:d}=c,{type:f,inputs:h,isIntermediate:p}=d,m=og(h,(v,y,g)=>{const b=W7e(y);return v[g]=b,v},{});m.use_cache=c.data.useCache;const _={type:f,id:u,...m,is_intermediate:p};return Object.assign(l,{[u]:_}),l},{}),s=n.filter(l=>l.type!=="collapsed").reduce((l,c)=>{const{source:u,target:d,sourceHandle:f,targetHandle:h}=c;return l.push({source:{node_id:u,field:f},destination:{node_id:d,field:h}}),l},[]);return s.forEach(l=>{const c=i[l.destination.node_id],u=l.destination.field;i[l.destination.node_id]=uu(c,u)}),{id:ul(),nodes:i,edges:s}},$H=T.object({x:T.number(),y:T.number()}).default({x:0,y:0}),cb=T.number().gt(0).nullish(),K7e=T.enum(["user","default"]),NH=T.object({id:T.string().trim().min(1),type:T.literal("invocation"),data:QB,width:cb,height:cb,position:$H}),X7e=T.object({id:T.string().trim().min(1),type:T.literal("notes"),data:YB,width:cb,height:cb,position:$H}),FH=T.union([NH,X7e]),Q7e=e=>NH.safeParse(e).success,DH=T.object({id:T.string().trim().min(1),source:T.string().trim().min(1),target:T.string().trim().min(1)}),Y7e=DH.extend({type:T.literal("default"),sourceHandle:T.string().trim().min(1),targetHandle:T.string().trim().min(1)}),Z7e=DH.extend({type:T.literal("collapsed")}),LH=T.union([Y7e,Z7e]),BH=T.object({id:T.string().min(1).optional(),name:T.string(),author:T.string(),description:T.string(),version:T.string(),contact:T.string(),tags:T.string(),notes:T.string(),nodes:T.array(FH),edges:T.array(LH),exposedFields:T.array(ahe),meta:T.object({category:K7e.default("user"),version:T.literal("2.0.0")})}),J7e=/[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*/u;function e$e(e){return e.length===1?e[0].toString():e.reduce((t,n)=>{if(typeof n=="number")return t+"["+n.toString()+"]";if(n.includes('"'))return t+'["'+t$e(n)+'"]';if(!J7e.test(n))return t+'["'+n+'"]';const r=t.length===0?"":".";return t+r+n},"")}function t$e(e){return e.replace(/"/g,'\\"')}function n$e(e){return e.length!==0}const r$e=99,i$e="; ",o$e=", or ",zH="Validation error",s$e=": ";class a$e extends Error{constructor(n,r=[]){super(n);Kl(this,"details");Kl(this,"name");this.details=r,this.name="ZodValidationError"}toString(){return this.message}}function jH(e){const{issue:t,issueSeparator:n,unionSeparator:r,includePath:i}=e;if(t.code==="invalid_union")return t.unionErrors.reduce((o,s)=>{const a=s.issues.map(l=>jH({issue:l,issueSeparator:n,unionSeparator:r,includePath:i})).join(n);return o.includes(a)||o.push(a),o},[]).join(r);if(i&&n$e(t.path)){if(t.path.length===1){const o=t.path[0];if(typeof o=="number")return`${t.message} at index ${o}`}return`${t.message} at "${e$e(t.path)}"`}return t.message}function l$e(e,t,n){return t!==null?e.length>0?[t,e].join(n):t:e.length>0?e:zH}function rE(e,t={}){const{maxIssuesInMessage:n=r$e,issueSeparator:r=i$e,unionSeparator:i=o$e,prefixSeparator:o=s$e,prefix:s=zH,includePath:a=!0}=t,l=e.errors.slice(0,n).map(u=>jH({issue:u,issueSeparator:r,unionSeparator:i,includePath:a})).join(r),c=l$e(l,s,o);return new a$e(c,e.errors)}const c$e=({nodes:e,edges:t,workflow:n})=>{const r=uu(Ge(n),"isTouched"),i=Ge(e),o=Ge(t),s={...r,nodes:[],edges:[]};return i.filter(a=>Sn(a)||Y5(a)).forEach(a=>{const l=FH.safeParse(a);if(!l.success){const{message:c}=rE(l.error,{prefix:Oe.t("nodes.unableToParseNode")});ue("nodes").warn({node:tt(a)},c);return}s.nodes.push(l.data)}),o.forEach(a=>{const l=LH.safeParse(a);if(!l.success){const{message:c}=rE(l.error,{prefix:Oe.t("nodes.unableToParseEdge")});ue("nodes").warn({edge:tt(a)},c);return}s.edges.push(l.data)}),s},u$e=()=>{fe({predicate:e=>YA.match(e)&&e.payload.tabName==="nodes",effect:async(e,{getState:t,dispatch:n})=>{const r=t(),{nodes:i,edges:o}=r.nodes,s=r.workflow,a=q7e(r.nodes),l=c$e({nodes:i,edges:o,workflow:s});delete l.id;const c={batch:{graph:a,workflow:l,runs:r.generation.iterations},prepend:e.payload.prepend};n(en.endpoints.enqueueBatch.initiate(c,{fixedCacheKey:"enqueueBatch"})).reset()}})},d$e=()=>{fe({matcher:ce.endpoints.addImageToBoard.matchFulfilled,effect:e=>{const t=ue("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Image added to board")}})},f$e=()=>{fe({matcher:ce.endpoints.addImageToBoard.matchRejected,effect:e=>{const t=ue("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Problem adding image to board")}})},ek=he("deleteImageModal/imageDeletionConfirmed"),NWe=hu(e=>e,e=>e.gallery.selection[e.gallery.selection.length-1]),VH=hu([e=>e],e=>{const{selectedBoardId:t,galleryView:n}=e.gallery;return{board_id:t,categories:n==="images"?Rn:Pr,offset:0,limit:xue,is_intermediate:!1}}),h$e=()=>{fe({actionCreator:ek,effect:async(e,{dispatch:t,getState:n,condition:r})=>{var f;const{imageDTOs:i,imagesUsage:o}=e.payload;if(i.length!==1||o.length!==1)return;const s=i[0],a=o[0];if(!s||!a)return;t(fT(!1));const l=n(),c=(f=l.gallery.selection[l.gallery.selection.length-1])==null?void 0:f.image_name;if(s&&(s==null?void 0:s.image_name)===c){const{image_name:h}=s,p=VH(l),{data:m}=ce.endpoints.listImages.select(p)(l),_=m?Ot.getSelectors().selectAll(m):[],v=_.findIndex(S=>S.image_name===h),y=_.filter(S=>S.image_name!==h),g=el(v,0,y.length-1),b=y[g];t(ps(b||null))}a.isCanvasImage&&t(dT()),i.forEach(h=>{var p;((p=n().generation.initialImage)==null?void 0:p.imageName)===h.image_name&&t(oT()),Fo(As(n().controlAdapters),m=>{(m.controlImage===h.image_name||hi(m)&&m.processedControlImage===h.image_name)&&(t(Nl({id:m.id,controlImage:null})),t(X4({id:m.id,processedControlImage:null})))}),n().nodes.nodes.forEach(m=>{Sn(m)&&Fo(m.data.inputs,_=>{var v;vT(_)&&((v=_.value)==null?void 0:v.image_name)===h.image_name&&t(Um({nodeId:m.data.id,fieldName:_.name,value:void 0}))})})});const{requestId:u}=t(ce.endpoints.deleteImage.initiate(s));await r(h=>ce.endpoints.deleteImage.matchFulfilled(h)&&h.meta.requestId===u,3e4)&&t(Lo.util.invalidateTags([{type:"Board",id:s.board_id??"none"}]))}})},p$e=()=>{fe({actionCreator:ek,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTOs:r,imagesUsage:i}=e.payload;if(!(r.length<=1||i.length<=1))try{await t(ce.endpoints.deleteImages.initiate({imageDTOs:r})).unwrap();const o=n(),s=VH(o),{data:a}=ce.endpoints.listImages.select(s)(o),l=a?Ot.getSelectors().selectAll(a)[0]:void 0;t(ps(l||null)),t(fT(!1)),i.some(c=>c.isCanvasImage)&&t(dT()),r.forEach(c=>{var u;((u=n().generation.initialImage)==null?void 0:u.imageName)===c.image_name&&t(oT()),Fo(As(n().controlAdapters),d=>{(d.controlImage===c.image_name||hi(d)&&d.processedControlImage===c.image_name)&&(t(Nl({id:d.id,controlImage:null})),t(X4({id:d.id,processedControlImage:null})))}),n().nodes.nodes.forEach(d=>{Sn(d)&&Fo(d.data.inputs,f=>{var h;vT(f)&&((h=f.value)==null?void 0:h.image_name)===c.image_name&&t(Um({nodeId:d.data.id,fieldName:f.name,value:void 0}))})})})}catch{}}})},g$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchPending,effect:()=>{}})},m$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchFulfilled,effect:e=>{ue("images").debug({imageDTO:e.meta.arg.originalArgs},"Image deleted")}})},y$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchRejected,effect:e=>{ue("images").debug({imageDTO:e.meta.arg.originalArgs},"Unable to delete image")}})},UH=he("dnd/dndDropped"),v$e=()=>{fe({actionCreator:UH,effect:async(e,{dispatch:t})=>{const n=ue("dnd"),{activeData:r,overData:i}=e.payload;if(r.payloadType==="IMAGE_DTO"?n.debug({activeData:r,overData:i},"Image dropped"):r.payloadType==="IMAGE_DTOS"?n.debug({activeData:r,overData:i},`Images (${r.payload.imageDTOs.length}) dropped`):r.payloadType==="NODE_FIELD"?n.debug({activeData:tt(r),overData:tt(i)},"Node field dropped"):n.debug({activeData:r,overData:i},"Unknown payload dropped"),i.actionType==="ADD_FIELD_TO_LINEAR"&&r.payloadType==="NODE_FIELD"){const{nodeId:o,field:s}=r.payload;t(bbe({nodeId:o,fieldName:s.name}))}if(i.actionType==="SET_CURRENT_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(ps(r.payload.imageDTO));return}if(i.actionType==="SET_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(m_(r.payload.imageDTO));return}if(i.actionType==="SET_CONTROL_ADAPTER_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{id:o}=i.context;t(Nl({id:o,controlImage:r.payload.imageDTO.image_name})),t(Q4({id:o,isEnabled:!0}));return}if(i.actionType==="SET_CANVAS_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(wL(r.payload.imageDTO));return}if(i.actionType==="SET_NODES_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{fieldName:o,nodeId:s}=i.context;t(Um({nodeId:s,fieldName:o,value:r.payload.imageDTO}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload,{boardId:s}=i.context;t(ce.endpoints.addImageToBoard.initiate({imageDTO:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload;t(ce.endpoints.removeImageFromBoard.initiate({imageDTO:o}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload,{boardId:s}=i.context;t(ce.endpoints.addImagesToBoard.initiate({imageDTOs:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload;t(ce.endpoints.removeImagesFromBoard.initiate({imageDTOs:o}));return}}})},b$e=()=>{fe({matcher:ce.endpoints.removeImageFromBoard.matchFulfilled,effect:e=>{const t=ue("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Image removed from board")}})},_$e=()=>{fe({matcher:ce.endpoints.removeImageFromBoard.matchRejected,effect:e=>{const t=ue("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Problem removing image from board")}})},S$e=()=>{fe({actionCreator:hue,effect:async(e,{dispatch:t,getState:n})=>{const r=e.payload,i=n(),{shouldConfirmOnDelete:o}=i.system,s=G8e(n()),a=s.some(l=>l.isCanvasImage)||s.some(l=>l.isInitialImage)||s.some(l=>l.isControlImage)||s.some(l=>l.isNodesImage);if(o||a){t(fT(!0));return}t(ek({imageDTOs:r,imagesUsage:s}))}})},x$e=()=>{fe({matcher:ce.endpoints.uploadImage.matchFulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=ue("images"),i=e.payload,o=n(),{autoAddBoardId:s}=o.gallery;r.debug({imageDTO:i},"Image uploaded");const{postUploadAction:a}=e.meta.arg.originalArgs;if(e.payload.is_intermediate&&!a)return;const l={title:J("toast.imageUploaded"),status:"success"};if((a==null?void 0:a.type)==="TOAST"){const{toastOptions:c}=a;if(!s||s==="none")t(Ve({...l,...c}));else{t(ce.endpoints.addImageToBoard.initiate({board_id:s,imageDTO:i}));const{data:u}=Qe.endpoints.listAllBoards.select()(o),d=u==null?void 0:u.find(h=>h.board_id===s),f=d?`${J("toast.addedToBoard")} ${d.board_name}`:`${J("toast.addedToBoard")} ${s}`;t(Ve({...l,description:f}))}return}if((a==null?void 0:a.type)==="SET_CANVAS_INITIAL_IMAGE"){t(wL(i)),t(Ve({...l,description:J("toast.setAsCanvasInitialImage")}));return}if((a==null?void 0:a.type)==="SET_CONTROL_ADAPTER_IMAGE"){const{id:c}=a;t(Q4({id:c,isEnabled:!0})),t(Nl({id:c,controlImage:i.image_name})),t(Ve({...l,description:J("toast.setControlImage")}));return}if((a==null?void 0:a.type)==="SET_INITIAL_IMAGE"){t(m_(i)),t(Ve({...l,description:J("toast.setInitialImage")}));return}if((a==null?void 0:a.type)==="SET_NODES_IMAGE"){const{nodeId:c,fieldName:u}=a;t(Um({nodeId:c,fieldName:u,value:i})),t(Ve({...l,description:`${J("toast.setNodeField")} ${u}`}));return}}})},w$e=()=>{fe({matcher:ce.endpoints.uploadImage.matchRejected,effect:(e,{dispatch:t})=>{const n=ue("images"),r={arg:{...uu(e.meta.arg.originalArgs,["file","postUploadAction"]),file:""}};n.error({...r},"Image upload failed"),t(Ve({title:J("toast.imageUploadFailed"),description:e.error.message,status:"error"}))}})},C$e=()=>{fe({matcher:ce.endpoints.starImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{updated_image_names:r}=e.payload,i=n(),{selection:o}=i.gallery,s=[];o.forEach(a=>{r.includes(a.image_name)?s.push({...a,starred:!0}):s.push(a)}),t(iB(s))}})},E$e=()=>{fe({matcher:ce.endpoints.unstarImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{updated_image_names:r}=e.payload,i=n(),{selection:o}=i.gallery,s=[];o.forEach(a=>{r.includes(a.image_name)?s.push({...a,starred:!1}):s.push(a)}),t(iB(s))}})},T$e=he("generation/initialImageSelected"),A$e=he("generation/modelSelected"),k$e=()=>{fe({actionCreator:T$e,effect:(e,{dispatch:t})=>{if(!e.payload){t(Ve(pi({title:J("toast.imageNotLoadedDesc"),status:"error"})));return}t(m_(e.payload)),t(Ve(pi(J("toast.sentToImageToImage"))))}})},P$e=()=>{fe({actionCreator:A$e,effect:(e,{getState:t,dispatch:n})=>{var l,c;const r=ue("models"),i=t(),o=g_.safeParse(e.payload);if(!o.success){r.error({error:o.error.format()},"Failed to parse main model");return}const s=o.data,{base_model:a}=s;if(((l=i.generation.model)==null?void 0:l.base_model)!==a){let u=0;Fo(i.lora.loras,(f,h)=>{f.base_model!==a&&(n(sB(h)),u+=1)});const{vae:d}=i.generation;d&&d.base_model!==a&&(n(nL(null)),u+=1),As(i.controlAdapters).forEach(f=>{var h;((h=f.model)==null?void 0:h.base_model)!==a&&(n(Q4({id:f.id,isEnabled:!1})),u+=1)}),u>0&&n(Ve(pi({title:J("toast.baseModelChangedCleared",{count:u}),status:"warning"})))}((c=i.generation.model)==null?void 0:c.base_model)!==s.base_model&&i.ui.shouldAutoChangeDimensions&&(["sdxl","sdxl-refiner"].includes(s.base_model)?(n(oI(1024)),n(sI(1024)),n(CI({width:1024,height:1024}))):(n(oI(512)),n(sI(512)),n(CI({width:512,height:512})))),n(tl(s))}})},Wg=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),QR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),YR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),ZR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),JR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),eO=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),tO=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),iE=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),I$e=({base_model:e,model_type:t,model_name:n})=>`${e}/${t}/${n}`,Oa=e=>{const t=[];return e.forEach(n=>{const r={...Ge(n),id:I$e(n)};t.push(r)}),t},Zo=Lo.injectEndpoints({endpoints:e=>({getOnnxModels:e.query({query:t=>{const n={model_type:"onnx",base_models:t};return`models/?${yp.stringify(n,{arrayFormat:"none"})}`},providesTags:t=>{const n=[{type:"OnnxModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"OnnxModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return QR.setAll(QR.getInitialState(),n)}}),getMainModels:e.query({query:t=>{const n={model_type:"main",base_models:t};return`models/?${yp.stringify(n,{arrayFormat:"none"})}`},providesTags:t=>{const n=[{type:"MainModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"MainModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return Wg.setAll(Wg.getInitialState(),n)}}),updateMainModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/main/${n}`,method:"PATCH",body:r}),invalidatesTags:["Model"]}),importMainModels:e.mutation({query:({body:t})=>({url:"models/import",method:"POST",body:t}),invalidatesTags:["Model"]}),addMainModels:e.mutation({query:({body:t})=>({url:"models/add",method:"POST",body:t}),invalidatesTags:["Model"]}),deleteMainModels:e.mutation({query:({base_model:t,model_name:n,model_type:r})=>({url:`models/${t}/${r}/${n}`,method:"DELETE"}),invalidatesTags:["Model"]}),convertMainModels:e.mutation({query:({base_model:t,model_name:n,convert_dest_directory:r})=>({url:`models/convert/${t}/main/${n}`,method:"PUT",params:{convert_dest_directory:r}}),invalidatesTags:["Model"]}),mergeMainModels:e.mutation({query:({base_model:t,body:n})=>({url:`models/merge/${t}`,method:"PUT",body:n}),invalidatesTags:["Model"]}),syncModels:e.mutation({query:()=>({url:"models/sync",method:"POST"}),invalidatesTags:["Model"]}),getLoRAModels:e.query({query:()=>({url:"models/",params:{model_type:"lora"}}),providesTags:t=>{const n=[{type:"LoRAModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"LoRAModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return YR.setAll(YR.getInitialState(),n)}}),updateLoRAModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/lora/${n}`,method:"PATCH",body:r}),invalidatesTags:[{type:"LoRAModel",id:Ir}]}),deleteLoRAModels:e.mutation({query:({base_model:t,model_name:n})=>({url:`models/${t}/lora/${n}`,method:"DELETE"}),invalidatesTags:[{type:"LoRAModel",id:Ir}]}),getControlNetModels:e.query({query:()=>({url:"models/",params:{model_type:"controlnet"}}),providesTags:t=>{const n=[{type:"ControlNetModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"ControlNetModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return ZR.setAll(ZR.getInitialState(),n)}}),getIPAdapterModels:e.query({query:()=>({url:"models/",params:{model_type:"ip_adapter"}}),providesTags:t=>{const n=[{type:"IPAdapterModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"IPAdapterModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return JR.setAll(JR.getInitialState(),n)}}),getT2IAdapterModels:e.query({query:()=>({url:"models/",params:{model_type:"t2i_adapter"}}),providesTags:t=>{const n=[{type:"T2IAdapterModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"T2IAdapterModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return eO.setAll(eO.getInitialState(),n)}}),getVaeModels:e.query({query:()=>({url:"models/",params:{model_type:"vae"}}),providesTags:t=>{const n=[{type:"VaeModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"VaeModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return iE.setAll(iE.getInitialState(),n)}}),getTextualInversionModels:e.query({query:()=>({url:"models/",params:{model_type:"embedding"}}),providesTags:t=>{const n=[{type:"TextualInversionModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"TextualInversionModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return tO.setAll(tO.getInitialState(),n)}}),getModelsInFolder:e.query({query:t=>({url:`/models/search?${yp.stringify(t,{})}`})}),getCheckpointConfigs:e.query({query:()=>({url:"/models/ckpt_confs"})})})}),{useGetMainModelsQuery:FWe,useGetOnnxModelsQuery:DWe,useGetControlNetModelsQuery:LWe,useGetIPAdapterModelsQuery:BWe,useGetT2IAdapterModelsQuery:zWe,useGetLoRAModelsQuery:jWe,useGetTextualInversionModelsQuery:VWe,useGetVaeModelsQuery:UWe,useUpdateMainModelsMutation:GWe,useDeleteMainModelsMutation:HWe,useImportMainModelsMutation:WWe,useAddMainModelsMutation:qWe,useConvertMainModelsMutation:KWe,useMergeMainModelsMutation:XWe,useDeleteLoRAModelsMutation:QWe,useUpdateLoRAModelsMutation:YWe,useSyncModelsMutation:ZWe,useGetModelsInFolderQuery:JWe,useGetCheckpointConfigsQuery:eqe}=Zo,M$e=()=>{fe({predicate:e=>Zo.endpoints.getMainModels.matchFulfilled(e)&&!e.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`Main models loaded (${e.payload.ids.length})`);const i=t().generation.model,o=Wg.getSelectors().selectAll(e.payload);if(o.length===0){n(tl(null));return}if(i?o.some(l=>l.model_name===i.model_name&&l.base_model===i.base_model&&l.model_type===i.model_type):!1)return;const a=g_.safeParse(o[0]);if(!a.success){r.error({error:a.error.format()},"Failed to parse main model");return}n(tl(a.data))}}),fe({predicate:e=>Zo.endpoints.getMainModels.matchFulfilled(e)&&e.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`SDXL Refiner models loaded (${e.payload.ids.length})`);const i=t().sdxl.refinerModel,o=Wg.getSelectors().selectAll(e.payload);if(o.length===0){n(V8(null)),n(xbe(!1));return}if(i?o.some(l=>l.model_name===i.model_name&&l.base_model===i.base_model&&l.model_type===i.model_type):!1)return;const a=ZD.safeParse(o[0]);if(!a.success){r.error({error:a.error.format()},"Failed to parse SDXL Refiner Model");return}n(V8(a.data))}}),fe({matcher:Zo.endpoints.getVaeModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`VAEs loaded (${e.payload.ids.length})`);const i=t().generation.vae;if(i===null||Gu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(i==null?void 0:i.model_name)&&(l==null?void 0:l.base_model)===(i==null?void 0:i.base_model)))return;const s=iE.getSelectors().selectAll(e.payload)[0];if(!s){n(tl(null));return}const a=JD.safeParse(s);if(!a.success){r.error({error:a.error.format()},"Failed to parse VAE model");return}n(nL(a.data))}}),fe({matcher:Zo.endpoints.getLoRAModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`LoRAs loaded (${e.payload.ids.length})`);const i=t().lora.loras;Fo(i,(o,s)=>{Gu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(o==null?void 0:o.model_name)&&(l==null?void 0:l.base_model)===(o==null?void 0:o.base_model))||n(sB(s))})}}),fe({matcher:Zo.endpoints.getControlNetModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`),nae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getT2IAdapterModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`),sae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getIPAdapterModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`IP Adapter models loaded (${e.payload.ids.length})`),iae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getTextualInversionModels.matchFulfilled,effect:async e=>{ue("models").info({models:e.payload.entities},`Embeddings loaded (${e.payload.ids.length})`)}})},R$e=Lo.injectEndpoints({endpoints:e=>({dynamicPrompts:e.query({query:t=>({url:"utilities/dynamicprompts",body:t,method:"POST"}),keepUnusedDataFor:86400})})}),O$e=br(Kle,vue,mue,yue,F4),$$e=()=>{fe({matcher:O$e,effect:async(e,{dispatch:t,getState:n,cancelActiveListeners:r,delay:i})=>{r(),await i(1e3);const o=n();if(o.config.disabledFeatures.includes("dynamicPrompting"))return;const{positivePrompt:s}=o.generation,{maxPrompts:a}=o.dynamicPrompts;t(Yx(!0));try{const l=t(R$e.endpoints.dynamicPrompts.initiate({prompt:s,max_prompts:a})),c=await l.unwrap();l.unsubscribe(),t(bue(c.prompts)),t(_ue(c.error)),t(EI(!1)),t(Yx(!1))}catch{t(EI(!0)),t(Yx(!1))}}})};class oE extends Error{constructor(t){super(t),this.name=this.constructor.name}}class sE extends Error{constructor(t){super(t),this.name=this.constructor.name}}class GH extends Error{constructor(t){super(t),this.name=this.constructor.name}}class ui extends Error{constructor(t){super(t),this.name=this.constructor.name}}const _d=e=>!!(e&&!("$ref"in e)),nO=e=>!!(e&&!("$ref"in e)&&e.type==="array"),Ry=e=>!!(e&&!("$ref"in e)&&e.type!=="array"),nc=e=>!!(e&&"$ref"in e),N$e=e=>"class"in e&&e.class==="invocation",F$e=e=>"class"in e&&e.class==="output",aE=e=>!("$ref"in e),D$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"IntegerField",isCollection:n,isCollectionOrScalar:r},default:e.default??0};return e.multipleOf!==void 0&&(i.multipleOf=e.multipleOf),e.maximum!==void 0&&(i.maximum=e.maximum),e.exclusiveMaximum!==void 0&&p1(e.exclusiveMaximum)&&(i.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(i.minimum=e.minimum),e.exclusiveMinimum!==void 0&&p1(e.exclusiveMinimum)&&(i.exclusiveMinimum=e.exclusiveMinimum),i},L$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"FloatField",isCollection:n,isCollectionOrScalar:r},default:e.default??0};return e.multipleOf!==void 0&&(i.multipleOf=e.multipleOf),e.maximum!==void 0&&(i.maximum=e.maximum),e.exclusiveMaximum!==void 0&&p1(e.exclusiveMaximum)&&(i.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(i.minimum=e.minimum),e.exclusiveMinimum!==void 0&&p1(e.exclusiveMinimum)&&(i.exclusiveMinimum=e.exclusiveMinimum),i},B$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"StringField",isCollection:n,isCollectionOrScalar:r},default:e.default??""};return e.minLength!==void 0&&(i.minLength=e.minLength),e.maxLength!==void 0&&(i.maxLength=e.maxLength),i},z$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"BooleanField",isCollection:n,isCollectionOrScalar:r},default:e.default??!1}),j$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"MainModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),V$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SDXLMainModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),U$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SDXLRefinerModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),G$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"VAEModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),H$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"LoRAModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),W$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ControlNetModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),q$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"IPAdapterModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),K$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"T2IAdapterModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),X$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"BoardField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),Q$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ImageField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),Y$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{let i=[];if(e.anyOf){const s=e.anyOf.filter(l=>!(_d(l)&&l.type==="null")),a=s[0];s.length!==1||!_d(a)?i=[]:i=a.enum??[]}else i=e.enum??[];if(i.length===0)throw new ui(J("nodes.unableToExtractEnumOptions"));return{...t,type:{name:"EnumField",isCollection:n,isCollectionOrScalar:r},options:i,ui_choice_labels:e.ui_choice_labels,default:e.default??i[0]}},Z$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ColorField",isCollection:n,isCollectionOrScalar:r},default:e.default??{r:127,g:127,b:127,a:255}}),J$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SchedulerField",isCollection:n,isCollectionOrScalar:r},default:e.default??"euler"}),eNe={BoardField:X$e,BooleanField:z$e,ColorField:Z$e,ControlNetModelField:W$e,EnumField:Y$e,FloatField:L$e,ImageField:Q$e,IntegerField:D$e,IPAdapterModelField:q$e,LoRAModelField:H$e,MainModelField:j$e,SchedulerField:J$e,SDXLMainModelField:V$e,SDXLRefinerModelField:U$e,StringField:B$e,T2IAdapterModelField:K$e,VAEModelField:G$e},tNe=(e,t,n)=>{const{input:r,ui_hidden:i,ui_component:o,ui_type:s,ui_order:a,ui_choice_labels:l,orig_required:c}=e,u={name:t,title:e.title??(t?N4(t):""),required:c,description:e.description??"",fieldKind:"input",input:r,ui_hidden:i,ui_component:o,ui_type:s,ui_order:a,ui_choice_labels:l};if(Whe(n)){const f=eNe[n.name];return f({schemaObject:e,baseField:u,isCollection:n.isCollection,isCollectionOrScalar:n.isCollectionOrScalar})}return{...u,input:"connection",type:n,default:void 0}},nNe=(e,t,n)=>{const{title:r,description:i,ui_hidden:o,ui_type:s,ui_order:a}=e;return{fieldKind:"output",name:t,title:r??(t?N4(t):""),description:i??"",type:n,ui_hidden:o,ui_type:s,ui_order:a}},$a=e=>e.$ref.split("/").slice(-1)[0],uC={integer:"IntegerField",number:"FloatField",string:"StringField",boolean:"BooleanField"},rNe=e=>e==="CollectionField",lE=e=>{if(aE(e)){const{ui_type:t}=e;if(t)return{name:t,isCollection:rNe(t),isCollectionOrScalar:!1}}if(_d(e)){if(e.type){if(e.enum)return{name:"EnumField",isCollection:!1,isCollectionOrScalar:!1};if(e.type){if(e.type==="array"){if(_d(e.items)){const n=e.items.type;if(!n||bn(n))throw new ui(J("nodes.unsupportedArrayItemType",{type:n}));const r=uC[n];if(!r)throw new ui(J("nodes.unsupportedArrayItemType",{type:n}));return{name:r,isCollection:!0,isCollectionOrScalar:!1}}const t=$a(e.items);if(!t)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:t,isCollection:!0,isCollectionOrScalar:!1}}else if(!bn(e.type)){const t=uC[e.type];if(!t)throw new ui(J("nodes.unsupportedArrayItemType",{type:e.type}));return{name:t,isCollection:!1,isCollectionOrScalar:!1}}}}else if(e.allOf){const t=e.allOf;if(t&&t[0]&&nc(t[0])){const n=$a(t[0]);if(!n)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:n,isCollection:!1,isCollectionOrScalar:!1}}}else if(e.anyOf){const t=e.anyOf.filter(i=>!(_d(i)&&i.type==="null"));if(t.length===1){if(nc(t[0])){const i=$a(t[0]);if(!i)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:i,isCollection:!1,isCollectionOrScalar:!1}}else if(_d(t[0]))return lE(t[0])}if(t.length!==2)throw new ui(J("nodes.unsupportedAnyOfLength",{count:t.length}));let n,r;if(nO(t[0])){const i=t[0].items,o=t[1];nc(i)&&nc(o)?(n=$a(i),r=$a(o)):Ry(i)&&Ry(o)&&(n=i.type,r=o.type)}else if(nO(t[1])){const i=t[0],o=t[1].items;nc(i)&&nc(o)?(n=$a(i),r=$a(o)):Ry(i)&&Ry(o)&&(n=i.type,r=o.type)}if(n&&n===r)return{name:uC[n]??n,isCollection:!1,isCollectionOrScalar:!0};throw new ui(J("nodes.unsupportedMismatchedUnion",{firstType:n,secondType:r}))}}else if(nc(e)){const t=$a(e);if(!t)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:t,isCollection:!1,isCollectionOrScalar:!1}}throw new ui(J("nodes.unableToParseFieldType"))},iNe=["id","type","use_cache"],oNe=["type"],sNe=["IsIntermediate"],aNe=["graph","linear_ui_output"],lNe=(e,t)=>!!(iNe.includes(t)||e==="collect"&&t==="collection"||e==="iterate"&&t==="index"),cNe=e=>!!sNe.includes(e),uNe=(e,t)=>!oNe.includes(t),dNe=e=>!aNe.includes(e.properties.type.default),fNe=(e,t=void 0,n=void 0)=>{var o;return Object.values(((o=e.components)==null?void 0:o.schemas)??{}).filter(N$e).filter(dNe).filter(s=>t?t.includes(s.properties.type.default):!0).filter(s=>n?!n.includes(s.properties.type.default):!0).reduce((s,a)=>{var w,C;const l=a.properties.type.default,c=a.title.replace("Invocation",""),u=a.tags??[],d=a.description??"",f=a.version,h=a.node_pack,p=a.classification,m=og(a.properties,(x,k,A)=>{if(lNe(l,A))return ue("nodes").trace({node:l,field:A,schema:tt(k)},"Skipped reserved input field"),x;if(!aE(k))return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Unhandled input property"),x;try{const R=lE(k);if(cNe(R.name))return x;const L=tNe(k,A,R);x[A]=L}catch(R){R instanceof ui&&ue("nodes").warn({node:l,field:A,schema:tt(k)},J("nodes.inputFieldTypeParseError",{node:l,field:A,message:R.message}))}return x},{}),_=a.output.$ref.split("/").pop();if(!_)return ue("nodes").warn({outputRefObject:tt(a.output)},"No output schema name found in ref object"),s;const v=(C=(w=e.components)==null?void 0:w.schemas)==null?void 0:C[_];if(!v)return ue("nodes").warn({outputSchemaName:_},"Output schema not found"),s;if(!F$e(v))return ue("nodes").error({outputSchema:tt(v)},"Invalid output schema"),s;const y=v.properties.type.default,g=og(v.properties,(x,k,A)=>{if(!uNe(l,A))return ue("nodes").trace({node:l,field:A,schema:tt(k)},"Skipped reserved output field"),x;if(!aE(k))return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Unhandled output property"),x;try{const R=lE(k);if(!R)return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Missing output field type"),x;const L=nNe(k,A,R);x[A]=L}catch(R){R instanceof ui&&ue("nodes").warn({node:l,field:A,schema:tt(k)},J("nodes.outputFieldTypeParseError",{node:l,field:A,message:R.message}))}return x},{}),b=a.properties.use_cache.default,S={title:c,type:l,version:f,tags:u,description:d,outputType:y,inputs:m,outputs:g,useCache:b,nodePack:h,classification:p};return Object.assign(s,{[l]:S}),s},{})},hNe=()=>{fe({actionCreator:kg.fulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=ue("system"),i=e.payload;r.debug({schemaJSON:i},"Received OpenAPI schema");const{nodesAllowlist:o,nodesDenylist:s}=n().config,a=fNe(i,o,s);r.debug({nodeTemplates:tt(a)},`Built ${c_(a)} node templates`),t($j(a))}}),fe({actionCreator:kg.rejected,effect:e=>{ue("system").error({error:tt(e.error)},"Problem retrieving OpenAPI Schema")}})},pNe=()=>{fe({actionCreator:ZF,effect:(e,{dispatch:t,getState:n})=>{ue("socketio").debug("Connected");const{nodes:i,config:o,system:s}=n(),{disabledTabs:a}=o;!c_(i.nodeTemplates)&&!a.includes("nodes")&&t(kg()),s.isInitialized?t(Lo.util.resetApiState()):t(ese(!0)),t(F4(e.payload))}})},gNe=()=>{fe({actionCreator:JF,effect:(e,{dispatch:t})=>{ue("socketio").debug("Disconnected"),t(eD(e.payload))}})},mNe=()=>{fe({actionCreator:oD,effect:(e,{dispatch:t})=>{ue("socketio").trace(e.payload,"Generator progress"),t(z4(e.payload))}})},yNe=()=>{fe({actionCreator:rD,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Session complete"),t(iD(e.payload))}})},vNe=["load_image","image"],bNe=()=>{fe({actionCreator:L4,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("socketio"),{data:i}=e.payload;r.debug({data:tt(i)},`Invocation complete (${e.payload.data.node.type})`);const{result:o,node:s,queue_batch_id:a,source_node_id:l}=i;if(QD(o)&&!vNe.includes(s.type)&&!E7e.includes(l)){const{image_name:c}=o.image,{canvas:u,gallery:d}=n(),f=t(ce.endpoints.getImageDTO.initiate(c,{forceRefetch:!0})),h=await f.unwrap();if(f.unsubscribe(),u.batchIds.includes(a)&&[zc].includes(i.source_node_id)&&t(nue(h)),!h.is_intermediate){t(ce.util.updateQueryData("listImages",{board_id:h.board_id??"none",categories:Rn},m=>{Ot.addOne(m,h)})),t(Qe.util.updateQueryData("getBoardImagesTotal",h.board_id??"none",m=>{m.total+=1})),t(ce.util.invalidateTags([{type:"Board",id:h.board_id??"none"}]));const{shouldAutoSwitch:p}=d;p&&(d.galleryView!=="images"&&t(Q5("images")),h.board_id&&h.board_id!==d.selectedBoardId&&t(vp({boardId:h.board_id,selectedImageName:h.image_name})),!h.board_id&&d.selectedBoardId!=="none"&&t(vp({boardId:"none",selectedImageName:h.image_name})),t(ps(h)))}}t(B4(e.payload))}})},_Ne=()=>{fe({actionCreator:nD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Invocation error (${e.payload.data.node.type})`),t(u_(e.payload))}})},SNe=()=>{fe({actionCreator:fD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Invocation retrieval error (${e.payload.data.graph_execution_state_id})`),t(hD(e.payload))}})},xNe=()=>{fe({actionCreator:tD,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,`Invocation started (${e.payload.data.node.type})`),t(D4(e.payload))}})},wNe=()=>{fe({actionCreator:sD,effect:(e,{dispatch:t})=>{const n=ue("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load started: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(aD(e.payload))}}),fe({actionCreator:lD,effect:(e,{dispatch:t})=>{const n=ue("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load complete: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(cD(e.payload))}})},CNe=()=>{fe({actionCreator:pD,effect:async(e,{dispatch:t})=>{const n=ue("socketio"),{queue_item:r,batch_status:i,queue_status:o}=e.payload.data;n.debug(e.payload,`Queue item ${r.item_id} status updated: ${r.status}`),t(en.util.updateQueryData("listQueueItems",void 0,s=>{pc.updateOne(s,{id:String(r.item_id),changes:r})})),t(en.util.updateQueryData("getQueueStatus",void 0,s=>{s&&Object.assign(s.queue,o)})),t(en.util.updateQueryData("getBatchStatus",{batch_id:i.batch_id},()=>i)),t(en.util.updateQueryData("getQueueItem",r.item_id,s=>{s&&Object.assign(s,r)})),t(en.util.invalidateTags(["CurrentSessionQueueItem","NextSessionQueueItem","InvocationCacheStatus"])),t(d_(e.payload))}})},ENe=()=>{fe({actionCreator:uD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Session retrieval error (${e.payload.data.graph_execution_state_id})`),t(dD(e.payload))}})},TNe=()=>{fe({actionCreator:qoe,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Subscribed"),t(Koe(e.payload))}})},ANe=()=>{fe({actionCreator:Xoe,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Unsubscribed"),t(Qoe(e.payload))}})},kNe=()=>{fe({actionCreator:Z8e,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTO:r}=e.payload;try{const i=await t(ce.endpoints.changeImageIsIntermediate.initiate({imageDTO:r,is_intermediate:!1})).unwrap(),{autoAddBoardId:o}=n().gallery;o&&o!=="none"&&await t(ce.endpoints.addImageToBoard.initiate({imageDTO:i,board_id:o})),t(Ve({title:J("toast.imageSaved"),status:"success"}))}catch(i){t(Ve({title:J("toast.imageSavingFailed"),description:i==null?void 0:i.message,status:"error"}))}}})},tqe=["sd-1","sd-2","sdxl","sdxl-refiner"],PNe=["sd-1","sd-2","sdxl"],nqe=["sdxl"],rqe=["sd-1","sd-2"],iqe=["sdxl-refiner"],INe=()=>{fe({actionCreator:Gj,effect:async(e,{getState:t,dispatch:n})=>{var i;if(e.payload==="unifiedCanvas"){const o=(i=t().generation.model)==null?void 0:i.base_model;if(o&&["sd-1","sd-2","sdxl"].includes(o))return;try{const s=n(Zo.endpoints.getMainModels.initiate(PNe)),a=await s.unwrap();if(s.unsubscribe(),!a.ids.length){n(tl(null));return}const c=Wg.getSelectors().selectAll(a).filter(h=>["sd-1","sd-2","sxdl"].includes(h.base_model))[0];if(!c){n(tl(null));return}const{base_model:u,model_name:d,model_type:f}=c;n(tl({base_model:u,model_name:d,model_type:f}))}catch{n(tl(null))}}}})},MNe=({image_name:e,esrganModelName:t,autoAddBoardId:n})=>{const r={id:tp,type:"esrgan",image:{image_name:e},model_name:t,is_intermediate:!0},i={id:zc,type:"linear_ui_output",use_cache:!1,is_intermediate:!1,board:n==="none"?void 0:{board_id:n}},o={id:"adhoc-esrgan-graph",nodes:{[tp]:r,[zc]:i},edges:[{source:{node_id:tp,field:"image"},destination:{node_id:zc,field:"image"}}]};return xa(o,{},tp),Bo(o,{esrgan_model:t}),o};function RNe(){if(console&&console.warn){for(var e=arguments.length,t=new Array(e),n=0;n()=>{if(e.isInitialized)t();else{const n=()=>{setTimeout(()=>{e.off("initialized",n)},0),t()};e.on("initialized",n)}};function iO(e,t,n){e.loadNamespaces(t,HH(e,n))}function oO(e,t,n,r){typeof n=="string"&&(n=[n]),n.forEach(i=>{e.options.ns.indexOf(i)<0&&e.options.ns.push(i)}),e.loadLanguages(t,HH(e,r))}function ONe(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const r=t.languages[0],i=t.options?t.options.fallbackLng:!1,o=t.languages[t.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const c=t.services.backendConnector.state[`${a}|${l}`];return c===-1||c===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(r,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||s(r,e)&&(!i||s(o,e)))}function $Ne(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!t.languages||!t.languages.length?(cE("i18n.languages were undefined or empty",t.languages),!0):t.options.ignoreJSONStructure!==void 0?t.hasLoadedNamespace(e,{lng:n.lng,precheck:(i,o)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&i.services.backendConnector.backend&&i.isLanguageChangingTo&&!o(i.isLanguageChangingTo,e))return!1}}):ONe(e,t,n)}const NNe=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,FNe={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},DNe=e=>FNe[e],LNe=e=>e.replace(NNe,DNe);let uE={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:LNe};function BNe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};uE={...uE,...e}}function zNe(){return uE}let WH;function jNe(e){WH=e}function VNe(){return WH}const UNe={type:"3rdParty",init(e){BNe(e.options.react),jNe(e)}},GNe=I.createContext();class HNe{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const WNe=(e,t)=>{const n=I.useRef();return I.useEffect(()=>{n.current=t?n.current:e},[e,t]),n.current};function qH(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:n}=t,{i18n:r,defaultNS:i}=I.useContext(GNe)||{},o=n||r||VNe();if(o&&!o.reportNamespaces&&(o.reportNamespaces=new HNe),!o){cE("You will need to pass in an i18next instance by using initReactI18next");const g=(S,w)=>typeof w=="string"?w:w&&typeof w=="object"&&typeof w.defaultValue=="string"?w.defaultValue:Array.isArray(S)?S[S.length-1]:S,b=[g,{},!1];return b.t=g,b.i18n={},b.ready=!1,b}o.options.react&&o.options.react.wait!==void 0&&cE("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const s={...zNe(),...o.options.react,...t},{useSuspense:a,keyPrefix:l}=s;let c=e||i||o.options&&o.options.defaultNS;c=typeof c=="string"?[c]:c||["translation"],o.reportNamespaces.addUsedNamespaces&&o.reportNamespaces.addUsedNamespaces(c);const u=(o.isInitialized||o.initializedStoreOnce)&&c.every(g=>$Ne(g,o,s));function d(){return o.getFixedT(t.lng||null,s.nsMode==="fallback"?c:c[0],l)}const[f,h]=I.useState(d);let p=c.join();t.lng&&(p=`${t.lng}${p}`);const m=WNe(p),_=I.useRef(!0);I.useEffect(()=>{const{bindI18n:g,bindI18nStore:b}=s;_.current=!0,!u&&!a&&(t.lng?oO(o,t.lng,c,()=>{_.current&&h(d)}):iO(o,c,()=>{_.current&&h(d)})),u&&m&&m!==p&&_.current&&h(d);function S(){_.current&&h(d)}return g&&o&&o.on(g,S),b&&o&&o.store.on(b,S),()=>{_.current=!1,g&&o&&g.split(" ").forEach(w=>o.off(w,S)),b&&o&&b.split(" ").forEach(w=>o.store.off(w,S))}},[o,p]);const v=I.useRef(!0);I.useEffect(()=>{_.current&&!v.current&&h(d),v.current=!1},[o,l]);const y=[f,o,u];if(y.t=f,y.i18n=o,y.ready=u,u||!u&&!a)return y;throw new Promise(g=>{t.lng?oO(o,t.lng,c,()=>g()):iO(o,c,()=>g())})}const qNe=(e,t)=>{if(!e||!t)return;const{width:n,height:r}=e,i=r*4*n*4,o=r*2*n*2;return{x4:i,x2:o}},KNe=(e,t)=>{if(!e||!t)return{x4:!0,x2:!0};const n={x4:!1,x2:!1};return e.x4<=t&&(n.x4=!0),e.x2<=t&&(n.x2=!0),n},XNe=(e,t)=>{if(!(!e||!t)&&!(e.x4&&e.x2)){if(!e.x2&&!e.x4)return"parameters.isAllowedToUpscale.tooLarge";if(!e.x4&&e.x2&&t===4)return"parameters.isAllowedToUpscale.useX2Model"}},KH=e=>hu(tW,({postprocessing:t,config:n})=>{const{esrganModelName:r}=t,{maxUpscalePixels:i}=n,o=qNe(e,i),s=KNe(o,i),a=r.includes("x2")?2:4,l=XNe(s,a);return{isAllowedToUpscale:a===2?s.x2:s.x4,detailTKey:l}}),oqe=e=>{const{t}=qH(),n=I.useMemo(()=>KH(e),[e]),{isAllowedToUpscale:r,detailTKey:i}=nN(n);return{isAllowedToUpscale:r,detail:i?t(i):void 0}},QNe=he("upscale/upscaleRequested"),YNe=()=>{fe({actionCreator:QNe,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("session"),{imageDTO:i}=e.payload,{image_name:o}=i,s=n(),{isAllowedToUpscale:a,detailTKey:l}=KH(i)(s);if(!a){r.error({imageDTO:i},J(l??"parameters.isAllowedToUpscale.tooLarge")),t(Ve({title:J(l??"parameters.isAllowedToUpscale.tooLarge"),status:"error"}));return}const{esrganModelName:c}=s.postprocessing,{autoAddBoardId:u}=s.gallery,d={prepend:!0,batch:{graph:MNe({image_name:o,esrganModelName:c,autoAddBoardId:u}),runs:1}};try{const f=t(en.endpoints.enqueueBatch.initiate(d,{fixedCacheKey:"enqueueBatch"})),h=await f.unwrap();f.reset(),r.debug({enqueueResult:tt(h)},J("queue.graphQueued"))}catch(f){if(r.error({enqueueBatchArg:tt(d)},J("queue.graphFailedToQueue")),f instanceof Object&&"status"in f&&f.status===403)return;t(Ve({title:J("queue.graphFailedToQueue"),status:"error"}))}}})},ZNe=to(null),JNe=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,ub=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");const t=e.match(JNe);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},sO=e=>e==="*"||e==="x"||e==="X",aO=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},eFe=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],tFe=(e,t)=>{if(sO(e)||sO(t))return 0;const[n,r]=eFe(aO(e),aO(t));return n>r?1:n{for(let n=0;n{const n=ub(e),r=ub(t),i=n.pop(),o=r.pop(),s=Sd(n,r);return s!==0?s:i&&o?Sd(i.split("."),o.split(".")):i||o?i?-1:1:0},rFe=(e,t,n)=>{iFe(n);const r=nFe(e,t);return XH[n].includes(r)},XH={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},lO=Object.keys(XH),iFe=e=>{if(typeof e!="string")throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`);if(lO.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${lO.join("|")}`)},wv=(e,t)=>{if(t=t.replace(/([><=]+)\s+/g,"$1"),t.includes("||"))return t.split("||").some(_=>wv(e,_));if(t.includes(" - ")){const[_,v]=t.split(" - ",2);return wv(e,`>=${_} <=${v}`)}else if(t.includes(" "))return t.trim().replace(/\s{2,}/g," ").split(" ").every(_=>wv(e,_));const n=t.match(/^([<>=~^]+)/),r=n?n[1]:"=";if(r!=="^"&&r!=="~")return rFe(e,t,r);const[i,o,s,,a]=ub(e),[l,c,u,,d]=ub(t),f=[i,o,s],h=[l,c??"x",u??"x"];if(d&&(!a||Sd(f,h)!==0||Sd(a.split("."),d.split("."))===-1))return!1;const p=h.findIndex(_=>_!=="0")+1,m=r==="~"?2:p>1?p:1;return!(Sd(f.slice(0,m),h.slice(0,m))!==0||Sd(f.slice(m),h.slice(m))===-1)},oFe={EnumField:"",BoardField:void 0,BooleanField:!1,ColorField:{r:0,g:0,b:0,a:1},FloatField:0,ImageField:void 0,IntegerField:0,IPAdapterModelField:void 0,LoRAModelField:void 0,MainModelField:void 0,SchedulerField:"euler",SDXLMainModelField:void 0,SDXLRefinerModelField:void 0,StringField:"",T2IAdapterModelField:void 0,VAEModelField:void 0,ControlNetModelField:void 0},sFe=(e,t)=>({id:e,name:t.name,type:t.type,label:"",fieldKind:"input",value:t.default??HN(oFe,t.type.name)}),aFe=(e,t)=>{const n=ul(),{type:r}=t,i=og(t.inputs,(a,l,c)=>{const u=ul(),d=sFe(u,l);return a[c]=d,a},{}),o=og(t.outputs,(a,l,c)=>{const d={id:ul(),name:c,type:l.type,fieldKind:"output"};return a[c]=d,a},{});return{...cB,id:n,type:"invocation",position:e,data:{id:n,type:r,version:t.version,label:"",notes:"",isOpen:!0,isIntermediate:r!=="save_image",useCache:t.useCache,inputs:i,outputs:o}}},tk=(e,t)=>e.data.type!==t.type?!0:e.data.version!==t.version,lFe=(e,t)=>{if(!tk(e,t)||e.data.type!==t.type)return!1;const r=epe.parse(t.version).major;return wv(e.data.version,`^${r}`)},cFe=(e,t)=>{if(!lFe(e,t)||e.data.type!==t.type)throw new GH(`Unable to update node ${e.id}`);const r=aFe(e.position,t),i=Ge(e);return i.data.version=t.version,zF(i,r),i.data.inputs=B6(i.data.inputs,Qc(r.data.inputs)),i.data.outputs=B6(i.data.outputs,Qc(r.data.outputs)),i},uFe={BoardField:{name:"BoardField",isCollection:!1,isCollectionOrScalar:!1},boolean:{name:"BooleanField",isCollection:!1,isCollectionOrScalar:!1},BooleanCollection:{name:"BooleanField",isCollection:!0,isCollectionOrScalar:!1},BooleanPolymorphic:{name:"BooleanField",isCollection:!1,isCollectionOrScalar:!0},ColorField:{name:"ColorField",isCollection:!1,isCollectionOrScalar:!1},ColorCollection:{name:"ColorField",isCollection:!0,isCollectionOrScalar:!1},ColorPolymorphic:{name:"ColorField",isCollection:!1,isCollectionOrScalar:!0},ControlNetModelField:{name:"ControlNetModelField",isCollection:!1,isCollectionOrScalar:!1},enum:{name:"EnumField",isCollection:!1,isCollectionOrScalar:!1},float:{name:"FloatField",isCollection:!1,isCollectionOrScalar:!1},FloatCollection:{name:"FloatField",isCollection:!0,isCollectionOrScalar:!1},FloatPolymorphic:{name:"FloatField",isCollection:!1,isCollectionOrScalar:!0},ImageCollection:{name:"ImageField",isCollection:!0,isCollectionOrScalar:!1},ImageField:{name:"ImageField",isCollection:!1,isCollectionOrScalar:!1},ImagePolymorphic:{name:"ImageField",isCollection:!1,isCollectionOrScalar:!0},integer:{name:"IntegerField",isCollection:!1,isCollectionOrScalar:!1},IntegerCollection:{name:"IntegerField",isCollection:!0,isCollectionOrScalar:!1},IntegerPolymorphic:{name:"IntegerField",isCollection:!1,isCollectionOrScalar:!0},IPAdapterModelField:{name:"IPAdapterModelField",isCollection:!1,isCollectionOrScalar:!1},LoRAModelField:{name:"LoRAModelField",isCollection:!1,isCollectionOrScalar:!1},MainModelField:{name:"MainModelField",isCollection:!1,isCollectionOrScalar:!1},Scheduler:{name:"SchedulerField",isCollection:!1,isCollectionOrScalar:!1},SDXLMainModelField:{name:"SDXLMainModelField",isCollection:!1,isCollectionOrScalar:!1},SDXLRefinerModelField:{name:"SDXLRefinerModelField",isCollection:!1,isCollectionOrScalar:!1},string:{name:"StringField",isCollection:!1,isCollectionOrScalar:!1},StringCollection:{name:"StringField",isCollection:!0,isCollectionOrScalar:!1},StringPolymorphic:{name:"StringField",isCollection:!1,isCollectionOrScalar:!0},T2IAdapterModelField:{name:"T2IAdapterModelField",isCollection:!1,isCollectionOrScalar:!1},VaeModelField:{name:"VAEModelField",isCollection:!1,isCollectionOrScalar:!1}},dFe={Any:{name:"AnyField",isCollection:!1,isCollectionOrScalar:!1},ClipField:{name:"ClipField",isCollection:!1,isCollectionOrScalar:!1},Collection:{name:"CollectionField",isCollection:!0,isCollectionOrScalar:!1},CollectionItem:{name:"CollectionItemField",isCollection:!1,isCollectionOrScalar:!1},ConditioningCollection:{name:"ConditioningField",isCollection:!0,isCollectionOrScalar:!1},ConditioningField:{name:"ConditioningField",isCollection:!1,isCollectionOrScalar:!1},ConditioningPolymorphic:{name:"ConditioningField",isCollection:!1,isCollectionOrScalar:!0},ControlCollection:{name:"ControlField",isCollection:!0,isCollectionOrScalar:!1},ControlField:{name:"ControlField",isCollection:!1,isCollectionOrScalar:!1},ControlPolymorphic:{name:"ControlField",isCollection:!1,isCollectionOrScalar:!0},DenoiseMaskField:{name:"DenoiseMaskField",isCollection:!1,isCollectionOrScalar:!1},IPAdapterField:{name:"IPAdapterField",isCollection:!1,isCollectionOrScalar:!1},IPAdapterCollection:{name:"IPAdapterField",isCollection:!0,isCollectionOrScalar:!1},IPAdapterPolymorphic:{name:"IPAdapterField",isCollection:!1,isCollectionOrScalar:!0},LatentsField:{name:"LatentsField",isCollection:!1,isCollectionOrScalar:!1},LatentsCollection:{name:"LatentsField",isCollection:!0,isCollectionOrScalar:!1},LatentsPolymorphic:{name:"LatentsField",isCollection:!1,isCollectionOrScalar:!0},MetadataField:{name:"MetadataField",isCollection:!1,isCollectionOrScalar:!1},MetadataCollection:{name:"MetadataField",isCollection:!0,isCollectionOrScalar:!1},MetadataItemField:{name:"MetadataItemField",isCollection:!1,isCollectionOrScalar:!1},MetadataItemCollection:{name:"MetadataItemField",isCollection:!0,isCollectionOrScalar:!1},MetadataItemPolymorphic:{name:"MetadataItemField",isCollection:!1,isCollectionOrScalar:!0},ONNXModelField:{name:"ONNXModelField",isCollection:!1,isCollectionOrScalar:!1},T2IAdapterField:{name:"T2IAdapterField",isCollection:!1,isCollectionOrScalar:!1},T2IAdapterCollection:{name:"T2IAdapterField",isCollection:!0,isCollectionOrScalar:!1},T2IAdapterPolymorphic:{name:"T2IAdapterField",isCollection:!1,isCollectionOrScalar:!0},UNetField:{name:"UNetField",isCollection:!1,isCollectionOrScalar:!1},VaeField:{name:"VaeField",isCollection:!1,isCollectionOrScalar:!1}},cO={...uFe,...dFe},fFe=T.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a","lcm"]),nk=T.enum(["any","sd-1","sd-2","sdxl","sdxl-refiner"]),hFe=T.object({model_name:T.string().min(1),base_model:nk,model_type:T.literal("main")}),pFe=T.object({model_name:T.string().min(1),base_model:nk,model_type:T.literal("onnx")}),rk=T.union([hFe,pFe]),gFe=T.enum(["Any","BoardField","boolean","BooleanCollection","BooleanPolymorphic","ClipField","Collection","CollectionItem","ColorCollection","ColorField","ColorPolymorphic","ConditioningCollection","ConditioningField","ConditioningPolymorphic","ControlCollection","ControlField","ControlNetModelField","ControlPolymorphic","DenoiseMaskField","enum","float","FloatCollection","FloatPolymorphic","ImageCollection","ImageField","ImagePolymorphic","integer","IntegerCollection","IntegerPolymorphic","IPAdapterCollection","IPAdapterField","IPAdapterModelField","IPAdapterPolymorphic","LatentsCollection","LatentsField","LatentsPolymorphic","LoRAModelField","MainModelField","MetadataField","MetadataCollection","MetadataItemField","MetadataItemCollection","MetadataItemPolymorphic","ONNXModelField","Scheduler","SDXLMainModelField","SDXLRefinerModelField","string","StringCollection","StringPolymorphic","T2IAdapterCollection","T2IAdapterField","T2IAdapterModelField","T2IAdapterPolymorphic","UNetField","VaeField","VaeModelField"]),QH=T.object({id:T.string().trim().min(1),name:T.string().trim().min(1),type:gFe}),mFe=QH.extend({fieldKind:T.literal("output")}),Ee=QH.extend({fieldKind:T.literal("input"),label:T.string()}),wa=T.object({model_name:T.string().trim().min(1),base_model:nk}),Kf=T.object({image_name:T.string().trim().min(1)}),yFe=T.object({board_id:T.string().trim().min(1)}),db=T.object({latents_name:T.string().trim().min(1),seed:T.number().int().optional()}),fb=T.object({conditioning_name:T.string().trim().min(1)}),vFe=T.object({mask_name:T.string().trim().min(1),masked_latents_name:T.string().trim().min(1).optional()}),bFe=Ee.extend({type:T.literal("integer"),value:T.number().int().optional()}),_Fe=Ee.extend({type:T.literal("IntegerCollection"),value:T.array(T.number().int()).optional()}),SFe=Ee.extend({type:T.literal("IntegerPolymorphic"),value:T.number().int().optional()}),xFe=Ee.extend({type:T.literal("float"),value:T.number().optional()}),wFe=Ee.extend({type:T.literal("FloatCollection"),value:T.array(T.number()).optional()}),CFe=Ee.extend({type:T.literal("FloatPolymorphic"),value:T.number().optional()}),EFe=Ee.extend({type:T.literal("string"),value:T.string().optional()}),TFe=Ee.extend({type:T.literal("StringCollection"),value:T.array(T.string()).optional()}),AFe=Ee.extend({type:T.literal("StringPolymorphic"),value:T.string().optional()}),kFe=Ee.extend({type:T.literal("boolean"),value:T.boolean().optional()}),PFe=Ee.extend({type:T.literal("BooleanCollection"),value:T.array(T.boolean()).optional()}),IFe=Ee.extend({type:T.literal("BooleanPolymorphic"),value:T.boolean().optional()}),MFe=Ee.extend({type:T.literal("enum"),value:T.string().optional()}),RFe=Ee.extend({type:T.literal("LatentsField"),value:db.optional()}),OFe=Ee.extend({type:T.literal("LatentsCollection"),value:T.array(db).optional()}),$Fe=Ee.extend({type:T.literal("LatentsPolymorphic"),value:T.union([db,T.array(db)]).optional()}),NFe=Ee.extend({type:T.literal("DenoiseMaskField"),value:vFe.optional()}),FFe=Ee.extend({type:T.literal("ConditioningField"),value:fb.optional()}),DFe=Ee.extend({type:T.literal("ConditioningCollection"),value:T.array(fb).optional()}),LFe=Ee.extend({type:T.literal("ConditioningPolymorphic"),value:T.union([fb,T.array(fb)]).optional()}),BFe=wa,hb=T.object({image:Kf,control_model:BFe,control_weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),control_mode:T.enum(["balanced","more_prompt","more_control","unbalanced"]).optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),zFe=Ee.extend({type:T.literal("ControlField"),value:hb.optional()}),jFe=Ee.extend({type:T.literal("ControlPolymorphic"),value:T.union([hb,T.array(hb)]).optional()}),VFe=Ee.extend({type:T.literal("ControlCollection"),value:T.array(hb).optional()}),UFe=wa,pb=T.object({image:Kf,ip_adapter_model:UFe,weight:T.number(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional()}),GFe=Ee.extend({type:T.literal("IPAdapterField"),value:pb.optional()}),HFe=Ee.extend({type:T.literal("IPAdapterPolymorphic"),value:T.union([pb,T.array(pb)]).optional()}),WFe=Ee.extend({type:T.literal("IPAdapterCollection"),value:T.array(pb).optional()}),qFe=wa,gb=T.object({image:Kf,t2i_adapter_model:qFe,weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),KFe=Ee.extend({type:T.literal("T2IAdapterField"),value:gb.optional()}),XFe=Ee.extend({type:T.literal("T2IAdapterPolymorphic"),value:T.union([gb,T.array(gb)]).optional()}),QFe=Ee.extend({type:T.literal("T2IAdapterCollection"),value:T.array(gb).optional()}),YFe=T.enum(["onnx","main","vae","lora","controlnet","embedding"]),ZFe=T.enum(["unet","text_encoder","text_encoder_2","tokenizer","tokenizer_2","vae","vae_decoder","vae_encoder","scheduler","safety_checker"]),Ef=wa.extend({model_type:YFe,submodel:ZFe.optional()}),YH=Ef.extend({weight:T.number().optional()}),JFe=T.object({unet:Ef,scheduler:Ef,loras:T.array(YH)}),eDe=Ee.extend({type:T.literal("UNetField"),value:JFe.optional()}),tDe=T.object({tokenizer:Ef,text_encoder:Ef,skipped_layers:T.number(),loras:T.array(YH)}),nDe=Ee.extend({type:T.literal("ClipField"),value:tDe.optional()}),rDe=T.object({vae:Ef}),iDe=Ee.extend({type:T.literal("VaeField"),value:rDe.optional()}),oDe=Ee.extend({type:T.literal("ImageField"),value:Kf.optional()}),sDe=Ee.extend({type:T.literal("BoardField"),value:yFe.optional()}),aDe=Ee.extend({type:T.literal("ImagePolymorphic"),value:Kf.optional()}),lDe=Ee.extend({type:T.literal("ImageCollection"),value:T.array(Kf).optional()}),cDe=Ee.extend({type:T.literal("MainModelField"),value:rk.optional()}),uDe=Ee.extend({type:T.literal("SDXLMainModelField"),value:rk.optional()}),dDe=Ee.extend({type:T.literal("SDXLRefinerModelField"),value:rk.optional()}),fDe=wa,hDe=Ee.extend({type:T.literal("VaeModelField"),value:fDe.optional()}),pDe=wa,gDe=Ee.extend({type:T.literal("LoRAModelField"),value:pDe.optional()}),mDe=wa,yDe=Ee.extend({type:T.literal("ControlNetModelField"),value:mDe.optional()}),vDe=wa,bDe=Ee.extend({type:T.literal("IPAdapterModelField"),value:vDe.optional()}),_De=wa,SDe=Ee.extend({type:T.literal("T2IAdapterModelField"),value:_De.optional()}),xDe=Ee.extend({type:T.literal("Collection"),value:T.array(T.any()).optional()}),wDe=Ee.extend({type:T.literal("CollectionItem"),value:T.any().optional()}),mb=T.object({label:T.string(),value:T.any()}),CDe=Ee.extend({type:T.literal("MetadataItemField"),value:mb.optional()}),EDe=Ee.extend({type:T.literal("MetadataItemCollection"),value:T.array(mb).optional()}),TDe=Ee.extend({type:T.literal("MetadataItemPolymorphic"),value:T.union([mb,T.array(mb)]).optional()}),ZH=T.record(T.any()),ADe=Ee.extend({type:T.literal("MetadataField"),value:ZH.optional()}),kDe=Ee.extend({type:T.literal("MetadataCollection"),value:T.array(ZH).optional()}),yb=T.object({r:T.number().int().min(0).max(255),g:T.number().int().min(0).max(255),b:T.number().int().min(0).max(255),a:T.number().int().min(0).max(255)}),PDe=Ee.extend({type:T.literal("ColorField"),value:yb.optional()}),IDe=Ee.extend({type:T.literal("ColorCollection"),value:T.array(yb).optional()}),MDe=Ee.extend({type:T.literal("ColorPolymorphic"),value:T.union([yb,T.array(yb)]).optional()}),RDe=Ee.extend({type:T.literal("Scheduler"),value:fFe.optional()}),ODe=Ee.extend({type:T.literal("Any"),value:T.any().optional()}),$De=T.discriminatedUnion("type",[ODe,sDe,PFe,kFe,IFe,nDe,xDe,wDe,PDe,IDe,MDe,FFe,DFe,LFe,zFe,yDe,VFe,jFe,NFe,MFe,wFe,xFe,CFe,lDe,aDe,oDe,_Fe,SFe,bFe,GFe,bDe,WFe,HFe,RFe,OFe,$Fe,gDe,cDe,RDe,uDe,dDe,TFe,AFe,EFe,KFe,SDe,QFe,XFe,eDe,iDe,hDe,CDe,EDe,TDe,ADe,kDe]),NDe=T.string().refine(e=>{const[t,n,r]=e.split(".");return t!==void 0&&Number.isInteger(Number(t))&&n!==void 0&&Number.isInteger(Number(n))&&r!==void 0&&Number.isInteger(Number(r))}),FDe=T.object({id:T.string().trim().min(1),type:T.string().trim().min(1),inputs:T.record($De),outputs:T.record(mFe),label:T.string(),isOpen:T.boolean(),notes:T.string(),embedWorkflow:T.boolean(),isIntermediate:T.boolean(),useCache:T.boolean().default(!0),version:NDe.optional()}),DDe=T.object({id:T.string().trim().min(1),type:T.literal("notes"),label:T.string(),isOpen:T.boolean(),notes:T.string()}),JH=T.object({x:T.number(),y:T.number()}).default({x:0,y:0}),vb=T.number().gt(0).nullish(),LDe=T.object({id:T.string().trim().min(1),type:T.literal("invocation"),data:FDe,width:vb,height:vb,position:JH}),BDe=T.object({id:T.string().trim().min(1),type:T.literal("notes"),data:DDe,width:vb,height:vb,position:JH}),zDe=T.discriminatedUnion("type",[LDe,BDe]),jDe=T.object({source:T.string().trim().min(1),sourceHandle:T.string().trim().min(1),target:T.string().trim().min(1),targetHandle:T.string().trim().min(1),id:T.string().trim().min(1),type:T.literal("default")}),VDe=T.object({source:T.string().trim().min(1),target:T.string().trim().min(1),id:T.string().trim().min(1),type:T.literal("collapsed")}),UDe=T.union([jDe,VDe]),GDe=T.object({nodeId:T.string().trim().min(1),fieldName:T.string().trim().min(1)}),HDe=T.object({name:T.string().default(""),author:T.string().default(""),description:T.string().default(""),version:T.string().default(""),contact:T.string().default(""),tags:T.string().default(""),notes:T.string().default(""),nodes:T.array(zDe).default([]),edges:T.array(UDe).default([]),exposedFields:T.array(GDe).default([]),meta:T.object({version:T.literal("1.0.0")})}),WDe=T.object({meta:T.object({version:tS})}),qDe=e=>{var n;const t=(n=MD.get())==null?void 0:n.getState().nodes.nodeTemplates;if(!t)throw new Error(J("app.storeNotInitialized"));return e.nodes.forEach(r=>{var i;if(r.type==="invocation"){Fo(r.data.inputs,a=>{const l=cO[a.type];if(!l)throw new sE(J("nodes.unknownFieldType",{type:a.type}));a.type=l}),Fo(r.data.outputs,a=>{const l=cO[a.type];if(!l)throw new sE(J("nodes.unknownFieldType",{type:a.type}));a.type=l});const o=t[r.data.type],s=o?o.nodePack:J("common.unknown");r.data.nodePack=s,(i=r.data).version||(i.version="1.0.0")}}),e.meta.version="2.0.0",e.meta.category="user",BH.parse(e)},KDe=e=>{const t=WDe.safeParse(e);if(!t.success)throw new oE(J("nodes.unableToGetWorkflowVersion"));const{version:n}=t.data.meta;if(n==="1.0.0"){const r=HDe.parse(e);return qDe(r)}if(n==="2.0.0")return BH.parse(e);throw new oE(J("nodes.unrecognizedWorkflowVersion",{version:n}))},XDe=(e,t)=>{const n=KDe(e);n.meta.category==="default"&&(n.meta.category="user",n.id=void 0);const{nodes:r,edges:i}=n,o=[],s=r.filter(Q7e),a=VF(s,"id");return s.forEach(l=>{const c=t[l.data.type];if(!c){const u=J("nodes.missingTemplate",{node:l.id,type:l.data.type});o.push({message:u,data:tt(l)});return}if(tk(l,c)){const u=J("nodes.mismatchedVersion",{node:l.id,type:l.data.type});o.push({message:u,data:tt({node:l,nodeTemplate:c})});return}}),i.forEach((l,c)=>{const u=a[l.source],d=a[l.target],f=u?t[u.data.type]:void 0,h=d?t[d.data.type]:void 0,p=[];if(u||p.push(J("nodes.sourceNodeDoesNotExist",{node:l.source})),f||p.push(J("nodes.missingTemplate",{node:l.source,type:u==null?void 0:u.data.type})),u&&f&&l.type==="default"&&!(l.sourceHandle in f.outputs)&&p.push(J("nodes.sourceNodeFieldDoesNotExist",{node:l.source,field:l.sourceHandle})),d||p.push(J("nodes.targetNodeDoesNotExist",{node:l.target})),h||p.push(J("nodes.missingTemplate",{node:l.target,type:d==null?void 0:d.data.type})),d&&h&&l.type==="default"&&!(l.targetHandle in h.inputs)&&p.push(J("nodes.targetNodeFieldDoesNotExist",{node:l.target,field:l.targetHandle})),p.length){delete i[c];const m=l.type==="default"?`${l.source}.${l.sourceHandle}`:l.source,_=l.type==="default"?`${l.source}.${l.targetHandle}`:l.target;o.push({message:J("nodes.deletedInvalidEdge",{source:m,target:_}),issues:p,data:l})}}),{workflow:n,warnings:o}},QDe=()=>{fe({actionCreator:nhe,effect:(e,{dispatch:t,getState:n})=>{const r=ue("nodes"),{workflow:i,asCopy:o}=e.payload,s=n().nodes.nodeTemplates;try{const{workflow:a,warnings:l}=XDe(i,s);o&&delete a.id,t(yT(a)),l.length?(t(Ve(pi({title:J("toast.loadedWithWarnings"),status:"warning"}))),l.forEach(({message:c,...u})=>{r.warn(u,c)})):t(Ve(pi({title:J("toast.workflowLoaded"),status:"success"}))),t(Gj("nodes")),requestAnimationFrame(()=>{var c;(c=ZNe.get())==null||c.fitView()})}catch(a){if(a instanceof oE)r.error({error:tt(a)},a.message),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:a.message})));else if(a instanceof sE)r.error({error:tt(a)},a.message),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:a.message})));else if(a instanceof T.ZodError){const{message:l}=rE(a,{prefix:J("nodes.workflowValidation")});r.error({error:tt(a)},l),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:l})))}else r.error({error:tt(a)},J("nodes.unknownErrorValidatingWorkflow")),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:J("nodes.unknownErrorValidatingWorkflow")})))}}})},YDe=()=>{fe({actionCreator:rhe,effect:(e,{dispatch:t,getState:n})=>{const r=ue("nodes"),i=n().nodes.nodes,o=n().nodes.nodeTemplates;let s=0;i.filter(Sn).forEach(a=>{const l=o[a.data.type];if(!l){s++;return}if(tk(a,l))try{const c=cFe(a,l);t(Mj({nodeId:c.id,node:c}))}catch(c){c instanceof GH&&s++}}),s?(r.warn(J("nodes.unableToUpdateNodes",{count:s})),t(Ve(pi({title:J("nodes.unableToUpdateNodes",{count:s})})))):t(Ve(pi({title:J("nodes.allNodesUpdated"),status:"success"})))}})},eW=kY(),fe=eW.startListening;x$e();w$e();k$e();h$e();p$e();g$e();m$e();y$e();H8e();S$e();C$e();E$e();D7e();u$e();H7e();F_e();U8e();f7e();l7e();aMe();c7e();sMe();iMe();d7e();kNe();$_e();mNe();yNe();bNe();_Ne();xNe();pNe();gNe();TNe();ANe();wNe();ENe();SNe();CNe();g7e();p7e();d$e();f$e();b$e();_$e();W8e();hNe();QDe();YDe();v$e();P$e();B_e();M$e();D_e();N_e();YNe();INe();$$e();const ZDe=T.object({payload:T.object({status:T.literal(403),data:T.object({detail:T.string()})})}),JDe=e=>t=>n=>{if(fm(n))try{const r=ZDe.parse(n),{dispatch:i}=e,o=r.payload.data.detail!=="Forbidden"?r.payload.data.detail:void 0;i(Ve({title:J("common.somethingWentWrong"),status:"error",description:o}))}catch{}return t(n)},eLe={canvas:cue,gallery:Wfe,generation:Qle,nodes:vbe,postprocessing:Sbe,system:tse,config:Kse,ui:Ebe,hotkeys:Cbe,controlAdapters:gae,dynamicPrompts:Sue,deleteImageModal:pue,changeBoardModal:due,lora:Xfe,modelmanager:Yfe,sdxl:wbe,queue:ice,workflow:_be,[Lo.reducerPath]:Lo.reducer},tLe=Vb(eLe),nLe=g_e(tLe),rLe=["canvas","gallery","generation","sdxl","nodes","workflow","postprocessing","system","ui","controlAdapters","dynamicPrompts","lora","modelmanager"],uO=Hj("invoke","invoke-store"),iLe={getItem:e=>Tbe(e,uO),setItem:(e,t)=>Abe(e,t,uO)},oLe=(e,t=!0)=>HQ({reducer:nLe,middleware:n=>n({serializableCheck:!1,immutableCheck:!1}).concat(Lo.middleware).concat(Hbe).concat(JDe).prepend(eW.middleware),enhancers:n=>{const r=n().concat(gN());return t&&r.push(m_e(iLe,rLe,{persistDebounce:300,serialize:A_e,unserialize:P_e,prefix:e?`${tM}${e}-`:tM})),r},devTools:{actionSanitizer:I_e,stateSanitizer:R_e,trace:!0,predicate:(n,r)=>!M_e.includes(r.type)}}),tW=e=>e,sLe=""+new URL("logo-13003d72.png",import.meta.url).href,aLe=()=>ie.jsxs($A,{position:"relative",width:"100vw",height:"100vh",alignItems:"center",justifyContent:"center",bg:"#151519",children:[ie.jsx(OA,{src:sLe,w:"8rem",h:"8rem"}),ie.jsx(IA,{label:"Loading",color:"grey",position:"absolute",size:"sm",width:"24px !important",height:"24px !important",right:"1.5rem",bottom:"1.5rem"})]}),lLe=I.memo(aLe),F2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Xf(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function ik(e){return"nodeType"in e}function zr(e){var t,n;return e?Xf(e)?e:ik(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}function ok(e){const{Document:t}=zr(e);return e instanceof t}function s0(e){return Xf(e)?!1:e instanceof zr(e).HTMLElement}function nW(e){return e instanceof zr(e).SVGElement}function Qf(e){return e?Xf(e)?e.document:ik(e)?ok(e)?e:s0(e)||nW(e)?e.ownerDocument:document:document:document}const Cs=F2?I.useLayoutEffect:I.useEffect;function D2(e){const t=I.useRef(e);return Cs(()=>{t.current=e}),I.useCallback(function(){for(var n=arguments.length,r=new Array(n),i=0;i{e.current=setInterval(r,i)},[]),n=I.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[t,n]}function qg(e,t){t===void 0&&(t=[e]);const n=I.useRef(e);return Cs(()=>{n.current!==e&&(n.current=e)},t),n}function a0(e,t){const n=I.useRef();return I.useMemo(()=>{const r=e(n.current);return n.current=r,r},[...t])}function bb(e){const t=D2(e),n=I.useRef(null),r=I.useCallback(i=>{i!==n.current&&(t==null||t(i,n.current)),n.current=i},[]);return[n,r]}function _b(e){const t=I.useRef();return I.useEffect(()=>{t.current=e},[e]),t.current}let dC={};function L2(e,t){return I.useMemo(()=>{if(t)return t;const n=dC[e]==null?0:dC[e]+1;return dC[e]=n,e+"-"+n},[e,t])}function rW(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{const a=Object.entries(s);for(const[l,c]of a){const u=o[l];u!=null&&(o[l]=u+e*c)}return o},{...t})}}const Hd=rW(1),Sb=rW(-1);function uLe(e){return"clientX"in e&&"clientY"in e}function sk(e){if(!e)return!1;const{KeyboardEvent:t}=zr(e.target);return t&&e instanceof t}function dLe(e){if(!e)return!1;const{TouchEvent:t}=zr(e.target);return t&&e instanceof t}function Kg(e){if(dLe(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return uLe(e)?{x:e.clientX,y:e.clientY}:null}const Xg=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[Xg.Translate.toString(e),Xg.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),dO="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function fLe(e){return e.matches(dO)?e:e.querySelector(dO)}const hLe={display:"none"};function pLe(e){let{id:t,value:n}=e;return Q.createElement("div",{id:t,style:hLe},n)}function gLe(e){let{id:t,announcement:n,ariaLiveType:r="assertive"}=e;const i={position:"fixed",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return Q.createElement("div",{id:t,style:i,role:"status","aria-live":r,"aria-atomic":!0},n)}function mLe(){const[e,t]=I.useState("");return{announce:I.useCallback(r=>{r!=null&&t(r)},[]),announcement:e}}const iW=I.createContext(null);function yLe(e){const t=I.useContext(iW);I.useEffect(()=>{if(!t)throw new Error("useDndMonitor must be used within a children of ");return t(e)},[e,t])}function vLe(){const[e]=I.useState(()=>new Set),t=I.useCallback(r=>(e.add(r),()=>e.delete(r)),[e]);return[I.useCallback(r=>{let{type:i,event:o}=r;e.forEach(s=>{var a;return(a=s[i])==null?void 0:a.call(s,o)})},[e]),t]}const bLe={draggable:` + To pick up a draggable item, press the space bar. + While dragging, use the arrow keys to move the item. + Press space again to drop the item in its new position, or press escape to cancel. + `},_Le={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was moved over droppable area "+n.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was dropped over droppable area "+n.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function SLe(e){let{announcements:t=_Le,container:n,hiddenTextDescribedById:r,screenReaderInstructions:i=bLe}=e;const{announce:o,announcement:s}=mLe(),a=L2("DndLiveRegion"),[l,c]=I.useState(!1);if(I.useEffect(()=>{c(!0)},[]),yLe(I.useMemo(()=>({onDragStart(d){let{active:f}=d;o(t.onDragStart({active:f}))},onDragMove(d){let{active:f,over:h}=d;t.onDragMove&&o(t.onDragMove({active:f,over:h}))},onDragOver(d){let{active:f,over:h}=d;o(t.onDragOver({active:f,over:h}))},onDragEnd(d){let{active:f,over:h}=d;o(t.onDragEnd({active:f,over:h}))},onDragCancel(d){let{active:f,over:h}=d;o(t.onDragCancel({active:f,over:h}))}}),[o,t])),!l)return null;const u=Q.createElement(Q.Fragment,null,Q.createElement(pLe,{id:r,value:i.draggable}),Q.createElement(gLe,{id:a,announcement:s}));return n?gi.createPortal(u,n):u}var wn;(function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"})(wn||(wn={}));function xb(){}function fO(e,t){return I.useMemo(()=>({sensor:e,options:t??{}}),[e,t])}function xLe(){for(var e=arguments.length,t=new Array(e),n=0;n[...t].filter(r=>r!=null),[...t])}const zo=Object.freeze({x:0,y:0});function wLe(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function CLe(e,t){const n=Kg(e);if(!n)return"0 0";const r={x:(n.x-t.left)/t.width*100,y:(n.y-t.top)/t.height*100};return r.x+"% "+r.y+"%"}function ELe(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function TLe(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function ALe(e){let{left:t,top:n,height:r,width:i}=e;return[{x:t,y:n},{x:t+i,y:n},{x:t,y:n+r},{x:t+i,y:n+r}]}function kLe(e,t){if(!e||e.length===0)return null;const[n]=e;return t?n[t]:n}function PLe(e,t){const n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),i=Math.min(t.left+t.width,e.left+e.width),o=Math.min(t.top+t.height,e.top+e.height),s=i-r,a=o-n;if(r{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const i=[];for(const o of r){const{id:s}=o,a=n.get(s);if(a){const l=PLe(a,t);l>0&&i.push({id:s,data:{droppableContainer:o,value:l}})}}return i.sort(TLe)};function MLe(e,t){const{top:n,left:r,bottom:i,right:o}=t;return n<=e.y&&e.y<=i&&r<=e.x&&e.x<=o}const RLe=e=>{let{droppableContainers:t,droppableRects:n,pointerCoordinates:r}=e;if(!r)return[];const i=[];for(const o of t){const{id:s}=o,a=n.get(s);if(a&&MLe(r,a)){const c=ALe(a).reduce((d,f)=>d+wLe(r,f),0),u=Number((c/4).toFixed(4));i.push({id:s,data:{droppableContainer:o,value:u}})}}return i.sort(ELe)};function OLe(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}function oW(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:zo}function $Le(e){return function(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;o({...s,top:s.top+e*a.y,bottom:s.bottom+e*a.y,left:s.left+e*a.x,right:s.right+e*a.x}),{...n})}}const NLe=$Le(1);function sW(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function FLe(e,t,n){const r=sW(t);if(!r)return e;const{scaleX:i,scaleY:o,x:s,y:a}=r,l=e.left-s-(1-i)*parseFloat(n),c=e.top-a-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),u=i?e.width/i:e.width,d=o?e.height/o:e.height;return{width:u,height:d,top:c,right:l+u,bottom:c+d,left:l}}const DLe={ignoreTransform:!1};function l0(e,t){t===void 0&&(t=DLe);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:c,transformOrigin:u}=zr(e).getComputedStyle(e);c&&(n=FLe(n,c,u))}const{top:r,left:i,width:o,height:s,bottom:a,right:l}=n;return{top:r,left:i,width:o,height:s,bottom:a,right:l}}function hO(e){return l0(e,{ignoreTransform:!0})}function LLe(e){const t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}function BLe(e,t){return t===void 0&&(t=zr(e).getComputedStyle(e)),t.position==="fixed"}function zLe(e,t){t===void 0&&(t=zr(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const o=t[i];return typeof o=="string"?n.test(o):!1})}function ak(e,t){const n=[];function r(i){if(t!=null&&n.length>=t||!i)return n;if(ok(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!s0(i)||nW(i)||n.includes(i))return n;const o=zr(e).getComputedStyle(i);return i!==e&&zLe(i,o)&&n.push(i),BLe(i,o)?n:r(i.parentNode)}return e?r(e):n}function aW(e){const[t]=ak(e,1);return t??null}function fC(e){return!F2||!e?null:Xf(e)?e:ik(e)?ok(e)||e===Qf(e).scrollingElement?window:s0(e)?e:null:null}function lW(e){return Xf(e)?e.scrollX:e.scrollLeft}function cW(e){return Xf(e)?e.scrollY:e.scrollTop}function dE(e){return{x:lW(e),y:cW(e)}}var Fn;(function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"})(Fn||(Fn={}));function uW(e){return!F2||!e?!1:e===document.scrollingElement}function dW(e){const t={x:0,y:0},n=uW(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height},i=e.scrollTop<=t.y,o=e.scrollLeft<=t.x,s=e.scrollTop>=r.y,a=e.scrollLeft>=r.x;return{isTop:i,isLeft:o,isBottom:s,isRight:a,maxScroll:r,minScroll:t}}const jLe={x:.2,y:.2};function VLe(e,t,n,r,i){let{top:o,left:s,right:a,bottom:l}=n;r===void 0&&(r=10),i===void 0&&(i=jLe);const{isTop:c,isBottom:u,isLeft:d,isRight:f}=dW(e),h={x:0,y:0},p={x:0,y:0},m={height:t.height*i.y,width:t.width*i.x};return!c&&o<=t.top+m.height?(h.y=Fn.Backward,p.y=r*Math.abs((t.top+m.height-o)/m.height)):!u&&l>=t.bottom-m.height&&(h.y=Fn.Forward,p.y=r*Math.abs((t.bottom-m.height-l)/m.height)),!f&&a>=t.right-m.width?(h.x=Fn.Forward,p.x=r*Math.abs((t.right-m.width-a)/m.width)):!d&&s<=t.left+m.width&&(h.x=Fn.Backward,p.x=r*Math.abs((t.left+m.width-s)/m.width)),{direction:h,speed:p}}function ULe(e){if(e===document.scrollingElement){const{innerWidth:o,innerHeight:s}=window;return{top:0,left:0,right:o,bottom:s,width:o,height:s}}const{top:t,left:n,right:r,bottom:i}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:i,width:e.clientWidth,height:e.clientHeight}}function fW(e){return e.reduce((t,n)=>Hd(t,dE(n)),zo)}function GLe(e){return e.reduce((t,n)=>t+lW(n),0)}function HLe(e){return e.reduce((t,n)=>t+cW(n),0)}function hW(e,t){if(t===void 0&&(t=l0),!e)return;const{top:n,left:r,bottom:i,right:o}=t(e);aW(e)&&(i<=0||o<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const WLe=[["x",["left","right"],GLe],["y",["top","bottom"],HLe]];class lk{constructor(t,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const r=ak(n),i=fW(r);this.rect={...t},this.width=t.width,this.height=t.height;for(const[o,s,a]of WLe)for(const l of s)Object.defineProperty(this,l,{get:()=>{const c=a(r),u=i[o]-c;return this.rect[l]+u},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Pp{constructor(t){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var r;return(r=this.target)==null?void 0:r.removeEventListener(...n)})},this.target=t}add(t,n,r){var i;(i=this.target)==null||i.addEventListener(t,n,r),this.listeners.push([t,n,r])}}function qLe(e){const{EventTarget:t}=zr(e);return e instanceof t?e:Qf(e)}function hC(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return typeof t=="number"?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t?r>t.y:!1}var Gi;(function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"})(Gi||(Gi={}));function pO(e){e.preventDefault()}function KLe(e){e.stopPropagation()}var Ct;(function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"})(Ct||(Ct={}));const pW={start:[Ct.Space,Ct.Enter],cancel:[Ct.Esc],end:[Ct.Space,Ct.Enter]},XLe=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case Ct.Right:return{...n,x:n.x+25};case Ct.Left:return{...n,x:n.x-25};case Ct.Down:return{...n,y:n.y+25};case Ct.Up:return{...n,y:n.y-25}}};class gW{constructor(t){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=t;const{event:{target:n}}=t;this.props=t,this.listeners=new Pp(Qf(n)),this.windowListeners=new Pp(zr(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Gi.Resize,this.handleCancel),this.windowListeners.add(Gi.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(Gi.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:t,onStart:n}=this.props,r=t.node.current;r&&hW(r),n(zo)}handleKeyDown(t){if(sk(t)){const{active:n,context:r,options:i}=this.props,{keyboardCodes:o=pW,coordinateGetter:s=XLe,scrollBehavior:a="smooth"}=i,{code:l}=t;if(o.end.includes(l)){this.handleEnd(t);return}if(o.cancel.includes(l)){this.handleCancel(t);return}const{collisionRect:c}=r.current,u=c?{x:c.left,y:c.top}:zo;this.referenceCoordinates||(this.referenceCoordinates=u);const d=s(t,{active:n,context:r.current,currentCoordinates:u});if(d){const f=Sb(d,u),h={x:0,y:0},{scrollableAncestors:p}=r.current;for(const m of p){const _=t.code,{isTop:v,isRight:y,isLeft:g,isBottom:b,maxScroll:S,minScroll:w}=dW(m),C=ULe(m),x={x:Math.min(_===Ct.Right?C.right-C.width/2:C.right,Math.max(_===Ct.Right?C.left:C.left+C.width/2,d.x)),y:Math.min(_===Ct.Down?C.bottom-C.height/2:C.bottom,Math.max(_===Ct.Down?C.top:C.top+C.height/2,d.y))},k=_===Ct.Right&&!y||_===Ct.Left&&!g,A=_===Ct.Down&&!b||_===Ct.Up&&!v;if(k&&x.x!==d.x){const R=m.scrollLeft+f.x,L=_===Ct.Right&&R<=S.x||_===Ct.Left&&R>=w.x;if(L&&!f.y){m.scrollTo({left:R,behavior:a});return}L?h.x=m.scrollLeft-R:h.x=_===Ct.Right?m.scrollLeft-S.x:m.scrollLeft-w.x,h.x&&m.scrollBy({left:-h.x,behavior:a});break}else if(A&&x.y!==d.y){const R=m.scrollTop+f.y,L=_===Ct.Down&&R<=S.y||_===Ct.Up&&R>=w.y;if(L&&!f.x){m.scrollTo({top:R,behavior:a});return}L?h.y=m.scrollTop-R:h.y=_===Ct.Down?m.scrollTop-S.y:m.scrollTop-w.y,h.y&&m.scrollBy({top:-h.y,behavior:a});break}}this.handleMove(t,Hd(Sb(d,this.referenceCoordinates),h))}}}handleMove(t,n){const{onMove:r}=this.props;t.preventDefault(),r(n)}handleEnd(t){const{onEnd:n}=this.props;t.preventDefault(),this.detach(),n()}handleCancel(t){const{onCancel:n}=this.props;t.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}gW.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=pW,onActivation:i}=t,{active:o}=n;const{code:s}=e.nativeEvent;if(r.start.includes(s)){const a=o.activatorNode.current;return a&&e.target!==a?!1:(e.preventDefault(),i==null||i({event:e.nativeEvent}),!0)}return!1}}];function gO(e){return!!(e&&"distance"in e)}function mO(e){return!!(e&&"delay"in e)}class ck{constructor(t,n,r){var i;r===void 0&&(r=qLe(t.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=t,this.events=n;const{event:o}=t,{target:s}=o;this.props=t,this.events=n,this.document=Qf(s),this.documentListeners=new Pp(this.document),this.listeners=new Pp(r),this.windowListeners=new Pp(zr(s)),this.initialCoordinates=(i=Kg(o))!=null?i:zo,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:t,props:{options:{activationConstraint:n,bypassActivationConstraint:r}}}=this;if(this.listeners.add(t.move.name,this.handleMove,{passive:!1}),this.listeners.add(t.end.name,this.handleEnd),this.windowListeners.add(Gi.Resize,this.handleCancel),this.windowListeners.add(Gi.DragStart,pO),this.windowListeners.add(Gi.VisibilityChange,this.handleCancel),this.windowListeners.add(Gi.ContextMenu,pO),this.documentListeners.add(Gi.Keydown,this.handleKeydown),n){if(r!=null&&r({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(mO(n)){this.timeoutId=setTimeout(this.handleStart,n.delay);return}if(gO(n))return}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:t}=this,{onStart:n}=this.props;t&&(this.activated=!0,this.documentListeners.add(Gi.Click,KLe,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Gi.SelectionChange,this.removeTextSelection),n(t))}handleMove(t){var n;const{activated:r,initialCoordinates:i,props:o}=this,{onMove:s,options:{activationConstraint:a}}=o;if(!i)return;const l=(n=Kg(t))!=null?n:zo,c=Sb(i,l);if(!r&&a){if(gO(a)){if(a.tolerance!=null&&hC(c,a.tolerance))return this.handleCancel();if(hC(c,a.distance))return this.handleStart()}return mO(a)&&hC(c,a.tolerance)?this.handleCancel():void 0}t.cancelable&&t.preventDefault(),s(l)}handleEnd(){const{onEnd:t}=this.props;this.detach(),t()}handleCancel(){const{onCancel:t}=this.props;this.detach(),t()}handleKeydown(t){t.code===Ct.Esc&&this.handleCancel()}removeTextSelection(){var t;(t=this.document.getSelection())==null||t.removeAllRanges()}}const QLe={move:{name:"pointermove"},end:{name:"pointerup"}};class mW extends ck{constructor(t){const{event:n}=t,r=Qf(n.target);super(t,QLe,r)}}mW.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!n.isPrimary||n.button!==0?!1:(r==null||r({event:n}),!0)}}];const YLe={move:{name:"mousemove"},end:{name:"mouseup"}};var fE;(function(e){e[e.RightClick=2]="RightClick"})(fE||(fE={}));class yW extends ck{constructor(t){super(t,YLe,Qf(t.event.target))}}yW.activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button===fE.RightClick?!1:(r==null||r({event:n}),!0)}}];const pC={move:{name:"touchmove"},end:{name:"touchend"}};class vW extends ck{constructor(t){super(t,pC)}static setup(){return window.addEventListener(pC.move.name,t,{capture:!1,passive:!1}),function(){window.removeEventListener(pC.move.name,t)};function t(){}}}vW.activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:i}=n;return i.length>1?!1:(r==null||r({event:n}),!0)}}];var Ip;(function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"})(Ip||(Ip={}));var wb;(function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"})(wb||(wb={}));function ZLe(e){let{acceleration:t,activator:n=Ip.Pointer,canScroll:r,draggingRect:i,enabled:o,interval:s=5,order:a=wb.TreeOrder,pointerCoordinates:l,scrollableAncestors:c,scrollableAncestorRects:u,delta:d,threshold:f}=e;const h=eBe({delta:d,disabled:!o}),[p,m]=cLe(),_=I.useRef({x:0,y:0}),v=I.useRef({x:0,y:0}),y=I.useMemo(()=>{switch(n){case Ip.Pointer:return l?{top:l.y,bottom:l.y,left:l.x,right:l.x}:null;case Ip.DraggableRect:return i}},[n,i,l]),g=I.useRef(null),b=I.useCallback(()=>{const w=g.current;if(!w)return;const C=_.current.x*v.current.x,x=_.current.y*v.current.y;w.scrollBy(C,x)},[]),S=I.useMemo(()=>a===wb.TreeOrder?[...c].reverse():c,[a,c]);I.useEffect(()=>{if(!o||!c.length||!y){m();return}for(const w of S){if((r==null?void 0:r(w))===!1)continue;const C=c.indexOf(w),x=u[C];if(!x)continue;const{direction:k,speed:A}=VLe(w,x,y,t,f);for(const R of["x","y"])h[R][k[R]]||(A[R]=0,k[R]=0);if(A.x>0||A.y>0){m(),g.current=w,p(b,s),_.current=A,v.current=k;return}}_.current={x:0,y:0},v.current={x:0,y:0},m()},[t,b,r,m,o,s,JSON.stringify(y),JSON.stringify(h),p,c,S,u,JSON.stringify(f)])}const JLe={x:{[Fn.Backward]:!1,[Fn.Forward]:!1},y:{[Fn.Backward]:!1,[Fn.Forward]:!1}};function eBe(e){let{delta:t,disabled:n}=e;const r=_b(t);return a0(i=>{if(n||!r||!i)return JLe;const o={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[Fn.Backward]:i.x[Fn.Backward]||o.x===-1,[Fn.Forward]:i.x[Fn.Forward]||o.x===1},y:{[Fn.Backward]:i.y[Fn.Backward]||o.y===-1,[Fn.Forward]:i.y[Fn.Forward]||o.y===1}}},[n,t,r])}function tBe(e,t){const n=t!==null?e.get(t):void 0,r=n?n.node.current:null;return a0(i=>{var o;return t===null?null:(o=r??i)!=null?o:null},[r,t])}function nBe(e,t){return I.useMemo(()=>e.reduce((n,r)=>{const{sensor:i}=r,o=i.activators.map(s=>({eventName:s.eventName,handler:t(s.handler,r)}));return[...n,...o]},[]),[e,t])}var Qg;(function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"})(Qg||(Qg={}));var hE;(function(e){e.Optimized="optimized"})(hE||(hE={}));const yO=new Map;function rBe(e,t){let{dragging:n,dependencies:r,config:i}=t;const[o,s]=I.useState(null),{frequency:a,measure:l,strategy:c}=i,u=I.useRef(e),d=_(),f=qg(d),h=I.useCallback(function(v){v===void 0&&(v=[]),!f.current&&s(y=>y===null?v:y.concat(v.filter(g=>!y.includes(g))))},[f]),p=I.useRef(null),m=a0(v=>{if(d&&!n)return yO;if(!v||v===yO||u.current!==e||o!=null){const y=new Map;for(let g of e){if(!g)continue;if(o&&o.length>0&&!o.includes(g.id)&&g.rect.current){y.set(g.id,g.rect.current);continue}const b=g.node.current,S=b?new lk(l(b),b):null;g.rect.current=S,S&&y.set(g.id,S)}return y}return v},[e,o,n,d,l]);return I.useEffect(()=>{u.current=e},[e]),I.useEffect(()=>{d||h()},[n,d]),I.useEffect(()=>{o&&o.length>0&&s(null)},[JSON.stringify(o)]),I.useEffect(()=>{d||typeof a!="number"||p.current!==null||(p.current=setTimeout(()=>{h(),p.current=null},a))},[a,d,h,...r]),{droppableRects:m,measureDroppableContainers:h,measuringScheduled:o!=null};function _(){switch(c){case Qg.Always:return!1;case Qg.BeforeDragging:return n;default:return!n}}}function uk(e,t){return a0(n=>e?n||(typeof t=="function"?t(e):e):null,[t,e])}function iBe(e,t){return uk(e,t)}function oBe(e){let{callback:t,disabled:n}=e;const r=D2(t),i=I.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(r)},[r,n]);return I.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function B2(e){let{callback:t,disabled:n}=e;const r=D2(t),i=I.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(r)},[n]);return I.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function sBe(e){return new lk(l0(e),e)}function vO(e,t,n){t===void 0&&(t=sBe);const[r,i]=I.useReducer(a,null),o=oBe({callback(l){if(e)for(const c of l){const{type:u,target:d}=c;if(u==="childList"&&d instanceof HTMLElement&&d.contains(e)){i();break}}}}),s=B2({callback:i});return Cs(()=>{i(),e?(s==null||s.observe(e),o==null||o.observe(document.body,{childList:!0,subtree:!0})):(s==null||s.disconnect(),o==null||o.disconnect())},[e]),r;function a(l){if(!e)return null;if(e.isConnected===!1){var c;return(c=l??n)!=null?c:null}const u=t(e);return JSON.stringify(l)===JSON.stringify(u)?l:u}}function aBe(e){const t=uk(e);return oW(e,t)}const bO=[];function lBe(e){const t=I.useRef(e),n=a0(r=>e?r&&r!==bO&&e&&t.current&&e.parentNode===t.current.parentNode?r:ak(e):bO,[e]);return I.useEffect(()=>{t.current=e},[e]),n}function cBe(e){const[t,n]=I.useState(null),r=I.useRef(e),i=I.useCallback(o=>{const s=fC(o.target);s&&n(a=>a?(a.set(s,dE(s)),new Map(a)):null)},[]);return I.useEffect(()=>{const o=r.current;if(e!==o){s(o);const a=e.map(l=>{const c=fC(l);return c?(c.addEventListener("scroll",i,{passive:!0}),[c,dE(c)]):null}).filter(l=>l!=null);n(a.length?new Map(a):null),r.current=e}return()=>{s(e),s(o)};function s(a){a.forEach(l=>{const c=fC(l);c==null||c.removeEventListener("scroll",i)})}},[i,e]),I.useMemo(()=>e.length?t?Array.from(t.values()).reduce((o,s)=>Hd(o,s),zo):fW(e):zo,[e,t])}function _O(e,t){t===void 0&&(t=[]);const n=I.useRef(null);return I.useEffect(()=>{n.current=null},t),I.useEffect(()=>{const r=e!==zo;r&&!n.current&&(n.current=e),!r&&n.current&&(n.current=null)},[e]),n.current?Sb(e,n.current):zo}function uBe(e){I.useEffect(()=>{if(!F2)return;const t=e.map(n=>{let{sensor:r}=n;return r.setup==null?void 0:r.setup()});return()=>{for(const n of t)n==null||n()}},e.map(t=>{let{sensor:n}=t;return n}))}function dBe(e,t){return I.useMemo(()=>e.reduce((n,r)=>{let{eventName:i,handler:o}=r;return n[i]=s=>{o(s,t)},n},{}),[e,t])}function bW(e){return I.useMemo(()=>e?LLe(e):null,[e])}const gC=[];function fBe(e,t){t===void 0&&(t=l0);const[n]=e,r=bW(n?zr(n):null),[i,o]=I.useReducer(a,gC),s=B2({callback:o});return e.length>0&&i===gC&&o(),Cs(()=>{e.length?e.forEach(l=>s==null?void 0:s.observe(l)):(s==null||s.disconnect(),o())},[e]),i;function a(){return e.length?e.map(l=>uW(l)?r:new lk(t(l),l)):gC}}function _W(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return s0(t)?t:e}function hBe(e){let{measure:t}=e;const[n,r]=I.useState(null),i=I.useCallback(c=>{for(const{target:u}of c)if(s0(u)){r(d=>{const f=t(u);return d?{...d,width:f.width,height:f.height}:f});break}},[t]),o=B2({callback:i}),s=I.useCallback(c=>{const u=_W(c);o==null||o.disconnect(),u&&(o==null||o.observe(u)),r(u?t(u):null)},[t,o]),[a,l]=bb(s);return I.useMemo(()=>({nodeRef:a,rect:n,setRef:l}),[n,a,l])}const pBe=[{sensor:mW,options:{}},{sensor:gW,options:{}}],gBe={current:{}},Cv={draggable:{measure:hO},droppable:{measure:hO,strategy:Qg.WhileDragging,frequency:hE.Optimized},dragOverlay:{measure:l0}};class Mp extends Map{get(t){var n;return t!=null&&(n=super.get(t))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(t=>{let{disabled:n}=t;return!n})}getNodeFor(t){var n,r;return(n=(r=this.get(t))==null?void 0:r.node.current)!=null?n:void 0}}const mBe={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Mp,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:xb},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Cv,measureDroppableContainers:xb,windowRect:null,measuringScheduled:!1},SW={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:xb,draggableNodes:new Map,over:null,measureDroppableContainers:xb},c0=I.createContext(SW),xW=I.createContext(mBe);function yBe(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Mp}}}function vBe(e,t){switch(t.type){case wn.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case wn.DragMove:return e.draggable.active?{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}}:e;case wn.DragEnd:case wn.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case wn.RegisterDroppable:{const{element:n}=t,{id:r}=n,i=new Mp(e.droppable.containers);return i.set(r,n),{...e,droppable:{...e.droppable,containers:i}}}case wn.SetDroppableDisabled:{const{id:n,key:r,disabled:i}=t,o=e.droppable.containers.get(n);if(!o||r!==o.key)return e;const s=new Mp(e.droppable.containers);return s.set(n,{...o,disabled:i}),{...e,droppable:{...e.droppable,containers:s}}}case wn.UnregisterDroppable:{const{id:n,key:r}=t,i=e.droppable.containers.get(n);if(!i||r!==i.key)return e;const o=new Mp(e.droppable.containers);return o.delete(n),{...e,droppable:{...e.droppable,containers:o}}}default:return e}}function bBe(e){let{disabled:t}=e;const{active:n,activatorEvent:r,draggableNodes:i}=I.useContext(c0),o=_b(r),s=_b(n==null?void 0:n.id);return I.useEffect(()=>{if(!t&&!r&&o&&s!=null){if(!sk(o)||document.activeElement===o.target)return;const a=i.get(s);if(!a)return;const{activatorNode:l,node:c}=a;if(!l.current&&!c.current)return;requestAnimationFrame(()=>{for(const u of[l.current,c.current]){if(!u)continue;const d=fLe(u);if(d){d.focus();break}}})}},[r,t,i,s,o]),null}function wW(e,t){let{transform:n,...r}=t;return e!=null&&e.length?e.reduce((i,o)=>o({transform:i,...r}),n):n}function _Be(e){return I.useMemo(()=>({draggable:{...Cv.draggable,...e==null?void 0:e.draggable},droppable:{...Cv.droppable,...e==null?void 0:e.droppable},dragOverlay:{...Cv.dragOverlay,...e==null?void 0:e.dragOverlay}}),[e==null?void 0:e.draggable,e==null?void 0:e.droppable,e==null?void 0:e.dragOverlay])}function SBe(e){let{activeNode:t,measure:n,initialRect:r,config:i=!0}=e;const o=I.useRef(!1),{x:s,y:a}=typeof i=="boolean"?{x:i,y:i}:i;Cs(()=>{if(!s&&!a||!t){o.current=!1;return}if(o.current||!r)return;const c=t==null?void 0:t.node.current;if(!c||c.isConnected===!1)return;const u=n(c),d=oW(u,r);if(s||(d.x=0),a||(d.y=0),o.current=!0,Math.abs(d.x)>0||Math.abs(d.y)>0){const f=aW(c);f&&f.scrollBy({top:d.y,left:d.x})}},[t,s,a,r,n])}const z2=I.createContext({...zo,scaleX:1,scaleY:1});var Ua;(function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"})(Ua||(Ua={}));const xBe=I.memo(function(t){var n,r,i,o;let{id:s,accessibility:a,autoScroll:l=!0,children:c,sensors:u=pBe,collisionDetection:d=ILe,measuring:f,modifiers:h,...p}=t;const m=I.useReducer(vBe,void 0,yBe),[_,v]=m,[y,g]=vLe(),[b,S]=I.useState(Ua.Uninitialized),w=b===Ua.Initialized,{draggable:{active:C,nodes:x,translate:k},droppable:{containers:A}}=_,R=C?x.get(C):null,L=I.useRef({initial:null,translated:null}),M=I.useMemo(()=>{var Ut;return C!=null?{id:C,data:(Ut=R==null?void 0:R.data)!=null?Ut:gBe,rect:L}:null},[C,R]),E=I.useRef(null),[P,O]=I.useState(null),[F,$]=I.useState(null),D=qg(p,Object.values(p)),N=L2("DndDescribedBy",s),z=I.useMemo(()=>A.getEnabled(),[A]),V=_Be(f),{droppableRects:H,measureDroppableContainers:X,measuringScheduled:te}=rBe(z,{dragging:w,dependencies:[k.x,k.y],config:V.droppable}),ee=tBe(x,C),j=I.useMemo(()=>F?Kg(F):null,[F]),q=Hl(),Z=iBe(ee,V.draggable.measure);SBe({activeNode:C?x.get(C):null,config:q.layoutShiftCompensation,initialRect:Z,measure:V.draggable.measure});const oe=vO(ee,V.draggable.measure,Z),be=vO(ee?ee.parentElement:null),Me=I.useRef({activatorEvent:null,active:null,activeNode:ee,collisionRect:null,collisions:null,droppableRects:H,draggableNodes:x,draggingNode:null,draggingNodeRect:null,droppableContainers:A,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),lt=A.getNodeFor((n=Me.current.over)==null?void 0:n.id),Le=hBe({measure:V.dragOverlay.measure}),we=(r=Le.nodeRef.current)!=null?r:ee,pt=w?(i=Le.rect)!=null?i:oe:null,vt=!!(Le.nodeRef.current&&Le.rect),Ce=aBe(vt?null:oe),ii=bW(we?zr(we):null),sn=lBe(w?lt??ee:null),jr=fBe(sn),sr=wW(h,{transform:{x:k.x-Ce.x,y:k.y-Ce.y,scaleX:1,scaleY:1},activatorEvent:F,active:M,activeNodeRect:oe,containerNodeRect:be,draggingNodeRect:pt,over:Me.current.over,overlayNodeRect:Le.rect,scrollableAncestors:sn,scrollableAncestorRects:jr,windowRect:ii}),fn=j?Hd(j,k):null,Vr=cBe(sn),fo=_O(Vr),Ri=_O(Vr,[oe]),ar=Hd(sr,fo),Wn=pt?NLe(pt,sr):null,wr=M&&Wn?d({active:M,collisionRect:Wn,droppableRects:H,droppableContainers:z,pointerCoordinates:fn}):null,Yt=kLe(wr,"id"),[It,oi]=I.useState(null),Oi=vt?sr:Hd(sr,Ri),ho=OLe(Oi,(o=It==null?void 0:It.rect)!=null?o:null,oe),Ur=I.useCallback((Ut,_t)=>{let{sensor:qn,options:Pn}=_t;if(E.current==null)return;const lr=x.get(E.current);if(!lr)return;const Cr=Ut.nativeEvent,Gr=new qn({active:E.current,activeNode:lr,event:Cr,options:Pn,context:Me,onStart(Er){const Kn=E.current;if(Kn==null)return;const Ms=x.get(Kn);if(!Ms)return;const{onDragStart:Ca}=D.current,Ea={active:{id:Kn,data:Ms.data,rect:L}};gi.unstable_batchedUpdates(()=>{Ca==null||Ca(Ea),S(Ua.Initializing),v({type:wn.DragStart,initialCoordinates:Er,active:Kn}),y({type:"onDragStart",event:Ea})})},onMove(Er){v({type:wn.DragMove,coordinates:Er})},onEnd:Ho(wn.DragEnd),onCancel:Ho(wn.DragCancel)});gi.unstable_batchedUpdates(()=>{O(Gr),$(Ut.nativeEvent)});function Ho(Er){return async function(){const{active:Ms,collisions:Ca,over:Ea,scrollAdjustedTranslate:wu}=Me.current;let Rs=null;if(Ms&&wu){const{cancelDrop:Tr}=D.current;Rs={activatorEvent:Cr,active:Ms,collisions:Ca,delta:wu,over:Ea},Er===wn.DragEnd&&typeof Tr=="function"&&await Promise.resolve(Tr(Rs))&&(Er=wn.DragCancel)}E.current=null,gi.unstable_batchedUpdates(()=>{v({type:Er}),S(Ua.Uninitialized),oi(null),O(null),$(null);const Tr=Er===wn.DragEnd?"onDragEnd":"onDragCancel";if(Rs){const Wl=D.current[Tr];Wl==null||Wl(Rs),y({type:Tr,event:Rs})}})}}},[x]),hn=I.useCallback((Ut,_t)=>(qn,Pn)=>{const lr=qn.nativeEvent,Cr=x.get(Pn);if(E.current!==null||!Cr||lr.dndKit||lr.defaultPrevented)return;const Gr={active:Cr};Ut(qn,_t.options,Gr)===!0&&(lr.dndKit={capturedBy:_t.sensor},E.current=Pn,Ur(qn,_t))},[x,Ur]),si=nBe(u,hn);uBe(u),Cs(()=>{oe&&b===Ua.Initializing&&S(Ua.Initialized)},[oe,b]),I.useEffect(()=>{const{onDragMove:Ut}=D.current,{active:_t,activatorEvent:qn,collisions:Pn,over:lr}=Me.current;if(!_t||!qn)return;const Cr={active:_t,activatorEvent:qn,collisions:Pn,delta:{x:ar.x,y:ar.y},over:lr};gi.unstable_batchedUpdates(()=>{Ut==null||Ut(Cr),y({type:"onDragMove",event:Cr})})},[ar.x,ar.y]),I.useEffect(()=>{const{active:Ut,activatorEvent:_t,collisions:qn,droppableContainers:Pn,scrollAdjustedTranslate:lr}=Me.current;if(!Ut||E.current==null||!_t||!lr)return;const{onDragOver:Cr}=D.current,Gr=Pn.get(Yt),Ho=Gr&&Gr.rect.current?{id:Gr.id,rect:Gr.rect.current,data:Gr.data,disabled:Gr.disabled}:null,Er={active:Ut,activatorEvent:_t,collisions:qn,delta:{x:lr.x,y:lr.y},over:Ho};gi.unstable_batchedUpdates(()=>{oi(Ho),Cr==null||Cr(Er),y({type:"onDragOver",event:Er})})},[Yt]),Cs(()=>{Me.current={activatorEvent:F,active:M,activeNode:ee,collisionRect:Wn,collisions:wr,droppableRects:H,draggableNodes:x,draggingNode:we,draggingNodeRect:pt,droppableContainers:A,over:It,scrollableAncestors:sn,scrollAdjustedTranslate:ar},L.current={initial:pt,translated:Wn}},[M,ee,wr,Wn,x,we,pt,H,A,It,sn,ar]),ZLe({...q,delta:k,draggingRect:Wn,pointerCoordinates:fn,scrollableAncestors:sn,scrollableAncestorRects:jr});const Gl=I.useMemo(()=>({active:M,activeNode:ee,activeNodeRect:oe,activatorEvent:F,collisions:wr,containerNodeRect:be,dragOverlay:Le,draggableNodes:x,droppableContainers:A,droppableRects:H,over:It,measureDroppableContainers:X,scrollableAncestors:sn,scrollableAncestorRects:jr,measuringConfiguration:V,measuringScheduled:te,windowRect:ii}),[M,ee,oe,F,wr,be,Le,x,A,H,It,X,sn,jr,V,te,ii]),Go=I.useMemo(()=>({activatorEvent:F,activators:si,active:M,activeNodeRect:oe,ariaDescribedById:{draggable:N},dispatch:v,draggableNodes:x,over:It,measureDroppableContainers:X}),[F,si,M,oe,v,N,x,It,X]);return Q.createElement(iW.Provider,{value:g},Q.createElement(c0.Provider,{value:Go},Q.createElement(xW.Provider,{value:Gl},Q.createElement(z2.Provider,{value:ho},c)),Q.createElement(bBe,{disabled:(a==null?void 0:a.restoreFocus)===!1})),Q.createElement(SLe,{...a,hiddenTextDescribedById:N}));function Hl(){const Ut=(P==null?void 0:P.autoScrollEnabled)===!1,_t=typeof l=="object"?l.enabled===!1:l===!1,qn=w&&!Ut&&!_t;return typeof l=="object"?{...l,enabled:qn}:{enabled:qn}}}),wBe=I.createContext(null),SO="button",CBe="Droppable";function sqe(e){let{id:t,data:n,disabled:r=!1,attributes:i}=e;const o=L2(CBe),{activators:s,activatorEvent:a,active:l,activeNodeRect:c,ariaDescribedById:u,draggableNodes:d,over:f}=I.useContext(c0),{role:h=SO,roleDescription:p="draggable",tabIndex:m=0}=i??{},_=(l==null?void 0:l.id)===t,v=I.useContext(_?z2:wBe),[y,g]=bb(),[b,S]=bb(),w=dBe(s,t),C=qg(n);Cs(()=>(d.set(t,{id:t,key:o,node:y,activatorNode:b,data:C}),()=>{const k=d.get(t);k&&k.key===o&&d.delete(t)}),[d,t]);const x=I.useMemo(()=>({role:h,tabIndex:m,"aria-disabled":r,"aria-pressed":_&&h===SO?!0:void 0,"aria-roledescription":p,"aria-describedby":u.draggable}),[r,h,m,_,p,u.draggable]);return{active:l,activatorEvent:a,activeNodeRect:c,attributes:x,isDragging:_,listeners:r?void 0:w,node:y,over:f,setNodeRef:g,setActivatorNodeRef:S,transform:v}}function EBe(){return I.useContext(xW)}const TBe="Droppable",ABe={timeout:25};function aqe(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:i}=e;const o=L2(TBe),{active:s,dispatch:a,over:l,measureDroppableContainers:c}=I.useContext(c0),u=I.useRef({disabled:n}),d=I.useRef(!1),f=I.useRef(null),h=I.useRef(null),{disabled:p,updateMeasurementsFor:m,timeout:_}={...ABe,...i},v=qg(m??r),y=I.useCallback(()=>{if(!d.current){d.current=!0;return}h.current!=null&&clearTimeout(h.current),h.current=setTimeout(()=>{c(Array.isArray(v.current)?v.current:[v.current]),h.current=null},_)},[_]),g=B2({callback:y,disabled:p||!s}),b=I.useCallback((x,k)=>{g&&(k&&(g.unobserve(k),d.current=!1),x&&g.observe(x))},[g]),[S,w]=bb(b),C=qg(t);return I.useEffect(()=>{!g||!S.current||(g.disconnect(),d.current=!1,g.observe(S.current))},[S,g]),Cs(()=>(a({type:wn.RegisterDroppable,element:{id:r,key:o,disabled:n,node:S,rect:f,data:C}}),()=>a({type:wn.UnregisterDroppable,key:o,id:r})),[r]),I.useEffect(()=>{n!==u.current.disabled&&(a({type:wn.SetDroppableDisabled,id:r,key:o,disabled:n}),u.current.disabled=n)},[r,o,n,a]),{active:s,rect:f,isOver:(l==null?void 0:l.id)===r,node:S,over:l,setNodeRef:w}}function kBe(e){let{animation:t,children:n}=e;const[r,i]=I.useState(null),[o,s]=I.useState(null),a=_b(n);return!n&&!r&&a&&i(a),Cs(()=>{if(!o)return;const l=r==null?void 0:r.key,c=r==null?void 0:r.props.id;if(l==null||c==null){i(null);return}Promise.resolve(t(c,o)).then(()=>{i(null)})},[t,r,o]),Q.createElement(Q.Fragment,null,n,r?I.cloneElement(r,{ref:s}):null)}const PBe={x:0,y:0,scaleX:1,scaleY:1};function IBe(e){let{children:t}=e;return Q.createElement(c0.Provider,{value:SW},Q.createElement(z2.Provider,{value:PBe},t))}const MBe={position:"fixed",touchAction:"none"},RBe=e=>sk(e)?"transform 250ms ease":void 0,OBe=I.forwardRef((e,t)=>{let{as:n,activatorEvent:r,adjustScale:i,children:o,className:s,rect:a,style:l,transform:c,transition:u=RBe}=e;if(!a)return null;const d=i?c:{...c,scaleX:1,scaleY:1},f={...MBe,width:a.width,height:a.height,top:a.top,left:a.left,transform:Xg.Transform.toString(d),transformOrigin:i&&r?CLe(r,a):void 0,transition:typeof u=="function"?u(r):u,...l};return Q.createElement(n,{className:s,style:f,ref:t},o)}),$Be=e=>t=>{let{active:n,dragOverlay:r}=t;const i={},{styles:o,className:s}=e;if(o!=null&&o.active)for(const[a,l]of Object.entries(o.active))l!==void 0&&(i[a]=n.node.style.getPropertyValue(a),n.node.style.setProperty(a,l));if(o!=null&&o.dragOverlay)for(const[a,l]of Object.entries(o.dragOverlay))l!==void 0&&r.node.style.setProperty(a,l);return s!=null&&s.active&&n.node.classList.add(s.active),s!=null&&s.dragOverlay&&r.node.classList.add(s.dragOverlay),function(){for(const[l,c]of Object.entries(i))n.node.style.setProperty(l,c);s!=null&&s.active&&n.node.classList.remove(s.active)}},NBe=e=>{let{transform:{initial:t,final:n}}=e;return[{transform:Xg.Transform.toString(t)},{transform:Xg.Transform.toString(n)}]},FBe={duration:250,easing:"ease",keyframes:NBe,sideEffects:$Be({styles:{active:{opacity:"0"}}})};function DBe(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:i}=e;return D2((o,s)=>{if(t===null)return;const a=n.get(o);if(!a)return;const l=a.node.current;if(!l)return;const c=_W(s);if(!c)return;const{transform:u}=zr(s).getComputedStyle(s),d=sW(u);if(!d)return;const f=typeof t=="function"?t:LBe(t);return hW(l,i.draggable.measure),f({active:{id:o,data:a.data,node:l,rect:i.draggable.measure(l)},draggableNodes:n,dragOverlay:{node:s,rect:i.dragOverlay.measure(c)},droppableContainers:r,measuringConfiguration:i,transform:d})})}function LBe(e){const{duration:t,easing:n,sideEffects:r,keyframes:i}={...FBe,...e};return o=>{let{active:s,dragOverlay:a,transform:l,...c}=o;if(!t)return;const u={x:a.rect.left-s.rect.left,y:a.rect.top-s.rect.top},d={scaleX:l.scaleX!==1?s.rect.width*l.scaleX/a.rect.width:1,scaleY:l.scaleY!==1?s.rect.height*l.scaleY/a.rect.height:1},f={x:l.x-u.x,y:l.y-u.y,...d},h=i({...c,active:s,dragOverlay:a,transform:{initial:l,final:f}}),[p]=h,m=h[h.length-1];if(JSON.stringify(p)===JSON.stringify(m))return;const _=r==null?void 0:r({active:s,dragOverlay:a,...c}),v=a.node.animate(h,{duration:t,easing:n,fill:"forwards"});return new Promise(y=>{v.onfinish=()=>{_==null||_(),y()}})}}let xO=0;function BBe(e){return I.useMemo(()=>{if(e!=null)return xO++,xO},[e])}const zBe=Q.memo(e=>{let{adjustScale:t=!1,children:n,dropAnimation:r,style:i,transition:o,modifiers:s,wrapperElement:a="div",className:l,zIndex:c=999}=e;const{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:h,draggableNodes:p,droppableContainers:m,dragOverlay:_,over:v,measuringConfiguration:y,scrollableAncestors:g,scrollableAncestorRects:b,windowRect:S}=EBe(),w=I.useContext(z2),C=BBe(d==null?void 0:d.id),x=wW(s,{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:h,draggingNodeRect:_.rect,over:v,overlayNodeRect:_.rect,scrollableAncestors:g,scrollableAncestorRects:b,transform:w,windowRect:S}),k=uk(f),A=DBe({config:r,draggableNodes:p,droppableContainers:m,measuringConfiguration:y}),R=k?_.setRef:void 0;return Q.createElement(IBe,null,Q.createElement(kBe,{animation:A},d&&C?Q.createElement(OBe,{key:C,id:d.id,ref:R,as:a,activatorEvent:u,adjustScale:t,className:l,transition:o,rect:k,style:{zIndex:c,...i},transform:x},n):null))}),jBe=hu([tW,JA],({nodes:e},t)=>t==="nodes"?e.viewport.zoom:1),VBe=()=>{const e=nN(jBe);return I.useCallback(({activatorEvent:n,draggingNodeRect:r,transform:i})=>{if(r&&n){const o=Kg(n);if(!o)return i;const s=o.x-r.left,a=o.y-r.top,l=i.x+s-r.width/2,c=i.y+a-r.height/2,u=i.scaleX*e,d=i.scaleY*e;return{x:l,y:c,scaleX:u,scaleY:d}}return i},[e])},UBe=e=>{if(!e.pointerCoordinates)return[];const t=document.elementsFromPoint(e.pointerCoordinates.x,e.pointerCoordinates.y),n=e.droppableContainers.filter(r=>r.node.current?t.includes(r.node.current):!1);return RLe({...e,droppableContainers:n})};function GBe(e){return ie.jsx(xBe,{...e})}const Oy=28,wO={w:Oy,h:Oy,maxW:Oy,maxH:Oy,shadow:"dark-lg",borderRadius:"lg",opacity:.3,bg:"base.800",color:"base.50",_dark:{borderColor:"base.200",bg:"base.900",color:"base.100"}},HBe=e=>{const{t}=qH();if(!e.dragData)return null;if(e.dragData.payloadType==="NODE_FIELD"){const{field:n,fieldTemplate:r}=e.dragData.payload;return ie.jsx(nb,{sx:{position:"relative",p:2,px:3,opacity:.7,bg:"base.300",borderRadius:"base",boxShadow:"dark-lg",whiteSpace:"nowrap",fontSize:"sm"},children:ie.jsx(LG,{children:n.label||r.title})})}if(e.dragData.payloadType==="IMAGE_DTO"){const{thumbnail_url:n,width:r,height:i}=e.dragData.payload.imageDTO;return ie.jsx(nb,{sx:{position:"relative",width:"full",height:"full",display:"flex",alignItems:"center",justifyContent:"center"},children:ie.jsx(OA,{sx:{...wO},objectFit:"contain",src:n,width:r,height:i})})}return e.dragData.payloadType==="IMAGE_DTOS"?ie.jsxs($A,{sx:{position:"relative",alignItems:"center",justifyContent:"center",flexDir:"column",...wO},children:[ie.jsx(W3,{children:e.dragData.payload.imageDTOs.length}),ie.jsx(W3,{size:"sm",children:t("parameters.images")})]}):null},WBe=I.memo(HBe),qBe=e=>{const[t,n]=I.useState(null),r=ue("images"),i=tN(),o=I.useCallback(d=>{r.trace({dragData:tt(d.active.data.current)},"Drag started");const f=d.active.data.current;f&&n(f)},[r]),s=I.useCallback(d=>{var h;r.trace({dragData:tt(d.active.data.current)},"Drag ended");const f=(h=d.over)==null?void 0:h.data.current;!t||!f||(i(UH({overData:f,activeData:t})),n(null))},[t,i,r]),a=fO(yW,{activationConstraint:{distance:10}}),l=fO(vW,{activationConstraint:{distance:10}}),c=xLe(a,l),u=VBe();return ie.jsxs(GBe,{onDragStart:o,onDragEnd:s,sensors:c,collisionDetection:UBe,autoScroll:!1,children:[e.children,ie.jsx(zBe,{dropAnimation:null,modifiers:[u],style:{width:"min-content",height:"min-content",cursor:"grabbing",userSelect:"none",padding:"10rem"},children:ie.jsx(PG,{children:t&&ie.jsx(AG.div,{layout:!0,initial:{opacity:0,scale:.7},animate:{opacity:1,scale:1,transition:{duration:.1}},children:ie.jsx(WBe,{dragData:t})},"overlay-drag-image")})})]})},KBe=I.memo(qBe);function pE(e){"@babel/helpers - typeof";return pE=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pE(e)}var CW=[],XBe=CW.forEach,QBe=CW.slice;function gE(e){return XBe.call(QBe.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function EW(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest>"u"?"undefined":pE(XMLHttpRequest))==="object"}function YBe(e){return!!e&&typeof e.then=="function"}function ZBe(e){return YBe(e)?e:Promise.resolve(e)}function JBe(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var mE={exports:{}},$y={exports:{}},CO;function eze(){return CO||(CO=1,function(e,t){var n=typeof globalThis<"u"&&globalThis||typeof self<"u"&&self||typeof He<"u"&&He,r=function(){function o(){this.fetch=!1,this.DOMException=n.DOMException}return o.prototype=n,new o}();(function(o){(function(s){var a=typeof o<"u"&&o||typeof self<"u"&&self||typeof a<"u"&&a,l={searchParams:"URLSearchParams"in a,iterable:"Symbol"in a&&"iterator"in Symbol,blob:"FileReader"in a&&"Blob"in a&&function(){try{return new Blob,!0}catch{return!1}}(),formData:"FormData"in a,arrayBuffer:"ArrayBuffer"in a};function c(P){return P&&DataView.prototype.isPrototypeOf(P)}if(l.arrayBuffer)var u=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],d=ArrayBuffer.isView||function(P){return P&&u.indexOf(Object.prototype.toString.call(P))>-1};function f(P){if(typeof P!="string"&&(P=String(P)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(P)||P==="")throw new TypeError('Invalid character in header field name: "'+P+'"');return P.toLowerCase()}function h(P){return typeof P!="string"&&(P=String(P)),P}function p(P){var O={next:function(){var F=P.shift();return{done:F===void 0,value:F}}};return l.iterable&&(O[Symbol.iterator]=function(){return O}),O}function m(P){this.map={},P instanceof m?P.forEach(function(O,F){this.append(F,O)},this):Array.isArray(P)?P.forEach(function(O){this.append(O[0],O[1])},this):P&&Object.getOwnPropertyNames(P).forEach(function(O){this.append(O,P[O])},this)}m.prototype.append=function(P,O){P=f(P),O=h(O);var F=this.map[P];this.map[P]=F?F+", "+O:O},m.prototype.delete=function(P){delete this.map[f(P)]},m.prototype.get=function(P){return P=f(P),this.has(P)?this.map[P]:null},m.prototype.has=function(P){return this.map.hasOwnProperty(f(P))},m.prototype.set=function(P,O){this.map[f(P)]=h(O)},m.prototype.forEach=function(P,O){for(var F in this.map)this.map.hasOwnProperty(F)&&P.call(O,this.map[F],F,this)},m.prototype.keys=function(){var P=[];return this.forEach(function(O,F){P.push(F)}),p(P)},m.prototype.values=function(){var P=[];return this.forEach(function(O){P.push(O)}),p(P)},m.prototype.entries=function(){var P=[];return this.forEach(function(O,F){P.push([F,O])}),p(P)},l.iterable&&(m.prototype[Symbol.iterator]=m.prototype.entries);function _(P){if(P.bodyUsed)return Promise.reject(new TypeError("Already read"));P.bodyUsed=!0}function v(P){return new Promise(function(O,F){P.onload=function(){O(P.result)},P.onerror=function(){F(P.error)}})}function y(P){var O=new FileReader,F=v(O);return O.readAsArrayBuffer(P),F}function g(P){var O=new FileReader,F=v(O);return O.readAsText(P),F}function b(P){for(var O=new Uint8Array(P),F=new Array(O.length),$=0;$-1?O:P}function k(P,O){if(!(this instanceof k))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');O=O||{};var F=O.body;if(P instanceof k){if(P.bodyUsed)throw new TypeError("Already read");this.url=P.url,this.credentials=P.credentials,O.headers||(this.headers=new m(P.headers)),this.method=P.method,this.mode=P.mode,this.signal=P.signal,!F&&P._bodyInit!=null&&(F=P._bodyInit,P.bodyUsed=!0)}else this.url=String(P);if(this.credentials=O.credentials||this.credentials||"same-origin",(O.headers||!this.headers)&&(this.headers=new m(O.headers)),this.method=x(O.method||this.method||"GET"),this.mode=O.mode||this.mode||null,this.signal=O.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&F)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(F),(this.method==="GET"||this.method==="HEAD")&&(O.cache==="no-store"||O.cache==="no-cache")){var $=/([?&])_=[^&]*/;if($.test(this.url))this.url=this.url.replace($,"$1_="+new Date().getTime());else{var D=/\?/;this.url+=(D.test(this.url)?"&":"?")+"_="+new Date().getTime()}}}k.prototype.clone=function(){return new k(this,{body:this._bodyInit})};function A(P){var O=new FormData;return P.trim().split("&").forEach(function(F){if(F){var $=F.split("="),D=$.shift().replace(/\+/g," "),N=$.join("=").replace(/\+/g," ");O.append(decodeURIComponent(D),decodeURIComponent(N))}}),O}function R(P){var O=new m,F=P.replace(/\r?\n[\t ]+/g," ");return F.split("\r").map(function($){return $.indexOf(` +`)===0?$.substr(1,$.length):$}).forEach(function($){var D=$.split(":"),N=D.shift().trim();if(N){var z=D.join(":").trim();O.append(N,z)}}),O}w.call(k.prototype);function L(P,O){if(!(this instanceof L))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');O||(O={}),this.type="default",this.status=O.status===void 0?200:O.status,this.ok=this.status>=200&&this.status<300,this.statusText=O.statusText===void 0?"":""+O.statusText,this.headers=new m(O.headers),this.url=O.url||"",this._initBody(P)}w.call(L.prototype),L.prototype.clone=function(){return new L(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new m(this.headers),url:this.url})},L.error=function(){var P=new L(null,{status:0,statusText:""});return P.type="error",P};var M=[301,302,303,307,308];L.redirect=function(P,O){if(M.indexOf(O)===-1)throw new RangeError("Invalid status code");return new L(null,{status:O,headers:{location:P}})},s.DOMException=a.DOMException;try{new s.DOMException}catch{s.DOMException=function(O,F){this.message=O,this.name=F;var $=Error(O);this.stack=$.stack},s.DOMException.prototype=Object.create(Error.prototype),s.DOMException.prototype.constructor=s.DOMException}function E(P,O){return new Promise(function(F,$){var D=new k(P,O);if(D.signal&&D.signal.aborted)return $(new s.DOMException("Aborted","AbortError"));var N=new XMLHttpRequest;function z(){N.abort()}N.onload=function(){var H={status:N.status,statusText:N.statusText,headers:R(N.getAllResponseHeaders()||"")};H.url="responseURL"in N?N.responseURL:H.headers.get("X-Request-URL");var X="response"in N?N.response:N.responseText;setTimeout(function(){F(new L(X,H))},0)},N.onerror=function(){setTimeout(function(){$(new TypeError("Network request failed"))},0)},N.ontimeout=function(){setTimeout(function(){$(new TypeError("Network request failed"))},0)},N.onabort=function(){setTimeout(function(){$(new s.DOMException("Aborted","AbortError"))},0)};function V(H){try{return H===""&&a.location.href?a.location.href:H}catch{return H}}N.open(D.method,V(D.url),!0),D.credentials==="include"?N.withCredentials=!0:D.credentials==="omit"&&(N.withCredentials=!1),"responseType"in N&&(l.blob?N.responseType="blob":l.arrayBuffer&&D.headers.get("Content-Type")&&D.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(N.responseType="arraybuffer")),O&&typeof O.headers=="object"&&!(O.headers instanceof m)?Object.getOwnPropertyNames(O.headers).forEach(function(H){N.setRequestHeader(H,h(O.headers[H]))}):D.headers.forEach(function(H,X){N.setRequestHeader(X,H)}),D.signal&&(D.signal.addEventListener("abort",z),N.onreadystatechange=function(){N.readyState===4&&D.signal.removeEventListener("abort",z)}),N.send(typeof D._bodyInit>"u"?null:D._bodyInit)})}return E.polyfill=!0,a.fetch||(a.fetch=E,a.Headers=m,a.Request=k,a.Response=L),s.Headers=m,s.Request=k,s.Response=L,s.fetch=E,s})({})})(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=n.fetch?n:r;t=i.fetch,t.default=i.fetch,t.fetch=i.fetch,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,e.exports=t}($y,$y.exports)),$y.exports}(function(e,t){var n;if(typeof fetch=="function"&&(typeof He<"u"&&He.fetch?n=He.fetch:typeof window<"u"&&window.fetch?n=window.fetch:n=fetch),typeof JBe<"u"&&(typeof window>"u"||typeof window.document>"u")){var r=n||eze();r.default&&(r=r.default),t.default=r,e.exports=t.default}})(mE,mE.exports);var TW=mE.exports;const AW=Ml(TW),EO=MO({__proto__:null,default:AW},[TW]);function Cb(e){"@babel/helpers - typeof";return Cb=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Cb(e)}var oa;typeof fetch=="function"&&(typeof global<"u"&&global.fetch?oa=global.fetch:typeof window<"u"&&window.fetch?oa=window.fetch:oa=fetch);var Yg;EW()&&(typeof global<"u"&&global.XMLHttpRequest?Yg=global.XMLHttpRequest:typeof window<"u"&&window.XMLHttpRequest&&(Yg=window.XMLHttpRequest));var Eb;typeof ActiveXObject=="function"&&(typeof global<"u"&&global.ActiveXObject?Eb=global.ActiveXObject:typeof window<"u"&&window.ActiveXObject&&(Eb=window.ActiveXObject));!oa&&EO&&!Yg&&!Eb&&(oa=AW||EO);typeof oa!="function"&&(oa=void 0);var yE=function(t,n){if(n&&Cb(n)==="object"){var r="";for(var i in n)r+="&"+encodeURIComponent(i)+"="+encodeURIComponent(n[i]);if(!r)return t;t=t+(t.indexOf("?")!==-1?"&":"?")+r.slice(1)}return t},TO=function(t,n,r){var i=function(s){if(!s.ok)return r(s.statusText||"Error",{status:s.status});s.text().then(function(a){r(null,{status:s.status,data:a})}).catch(r)};typeof fetch=="function"?fetch(t,n).then(i).catch(r):oa(t,n).then(i).catch(r)},AO=!1,tze=function(t,n,r,i){t.queryStringParams&&(n=yE(n,t.queryStringParams));var o=gE({},typeof t.customHeaders=="function"?t.customHeaders():t.customHeaders);typeof window>"u"&&typeof global<"u"&&typeof global.process<"u"&&global.process.versions&&global.process.versions.node&&(o["User-Agent"]="i18next-http-backend (node/".concat(global.process.version,"; ").concat(global.process.platform," ").concat(global.process.arch,")")),r&&(o["Content-Type"]="application/json");var s=typeof t.requestOptions=="function"?t.requestOptions(r):t.requestOptions,a=gE({method:r?"POST":"GET",body:r?t.stringify(r):void 0,headers:o},AO?{}:s);try{TO(n,a,i)}catch(l){if(!s||Object.keys(s).length===0||!l.message||l.message.indexOf("not implemented")<0)return i(l);try{Object.keys(s).forEach(function(c){delete a[c]}),TO(n,a,i),AO=!0}catch(c){i(c)}}},nze=function(t,n,r,i){r&&Cb(r)==="object"&&(r=yE("",r).slice(1)),t.queryStringParams&&(n=yE(n,t.queryStringParams));try{var o;Yg?o=new Yg:o=new Eb("MSXML2.XMLHTTP.3.0"),o.open(r?"POST":"GET",n,1),t.crossDomain||o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.withCredentials=!!t.withCredentials,r&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.overrideMimeType&&o.overrideMimeType("application/json");var s=t.customHeaders;if(s=typeof s=="function"?s():s,s)for(var a in s)o.setRequestHeader(a,s[a]);o.onreadystatechange=function(){o.readyState>3&&i(o.status>=400?o.statusText:null,{status:o.status,data:o.responseText})},o.send(r)}catch(l){console&&console.log(l)}},rze=function(t,n,r,i){if(typeof r=="function"&&(i=r,r=void 0),i=i||function(){},oa&&n.indexOf("file:")!==0)return tze(t,n,r,i);if(EW()||typeof ActiveXObject=="function")return nze(t,n,r,i);i(new Error("No fetch and no xhr implementation found!"))};function Zg(e){"@babel/helpers - typeof";return Zg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zg(e)}function ize(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kO(e,t){for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ize(this,e),this.services=t,this.options=n,this.allOptions=r,this.type="backend",this.init(t,n,r)}return oze(e,[{key:"init",value:function(n){var r=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=gE(i,this.options||{},lze()),this.allOptions=o,this.services&&this.options.reloadInterval&&setInterval(function(){return r.reload()},this.options.reloadInterval)}},{key:"readMulti",value:function(n,r,i){this._readAny(n,n,r,r,i)}},{key:"read",value:function(n,r,i){this._readAny([n],n,[r],r,i)}},{key:"_readAny",value:function(n,r,i,o,s){var a=this,l=this.options.loadPath;typeof this.options.loadPath=="function"&&(l=this.options.loadPath(n,i)),l=ZBe(l),l.then(function(c){if(!c)return s(null,{});var u=a.services.interpolator.interpolate(c,{lng:n.join("+"),ns:i.join("+")});a.loadUrl(u,s,r,o)})}},{key:"loadUrl",value:function(n,r,i,o){var s=this,a=typeof i=="string"?[i]:i,l=typeof o=="string"?[o]:o,c=this.options.parseLoadPayload(a,l);this.options.request(this.options,n,c,function(u,d){if(d&&(d.status>=500&&d.status<600||!d.status))return r("failed loading "+n+"; status code: "+d.status,!0);if(d&&d.status>=400&&d.status<500)return r("failed loading "+n+"; status code: "+d.status,!1);if(!d&&u&&u.message&&u.message.indexOf("Failed to fetch")>-1)return r("failed loading "+n+": "+u.message,!0);if(u)return r(u,!1);var f,h;try{typeof d.data=="string"?f=s.options.parse(d.data,i,o):f=d.data}catch{h="failed parsing "+n+" to json"}if(h)return r(h,!1);r(null,f)})}},{key:"create",value:function(n,r,i,o,s){var a=this;if(this.options.addPath){typeof n=="string"&&(n=[n]);var l=this.options.parsePayload(r,i,o),c=0,u=[],d=[];n.forEach(function(f){var h=a.options.addPath;typeof a.options.addPath=="function"&&(h=a.options.addPath(f,r));var p=a.services.interpolator.interpolate(h,{lng:f,ns:r});a.options.request(a.options,p,l,function(m,_){c+=1,u.push(m),d.push(_),c===n.length&&typeof s=="function"&&s(u,d)})})}}},{key:"reload",value:function(){var n=this,r=this.services,i=r.backendConnector,o=r.languageUtils,s=r.logger,a=i.language;if(!(a&&a.toLowerCase()==="cimode")){var l=[],c=function(d){var f=o.toResolveHierarchy(d);f.forEach(function(h){l.indexOf(h)<0&&l.push(h)})};c(a),this.allOptions.preload&&this.allOptions.preload.forEach(function(u){return c(u)}),l.forEach(function(u){n.allOptions.ns.forEach(function(d){i.read(u,d,"read",null,null,function(f,h){f&&s.warn("loading namespace ".concat(d," for language ").concat(u," failed"),f),!f&&h&&s.log("loaded namespace ".concat(d," for language ").concat(u),h),i.loaded("".concat(u,"|").concat(d),f,h)})})})}}}]),e}();PW.type="backend";Oe.use(PW).use(UNe).init({fallbackLng:"en",debug:!1,backend:{loadPath:"/locales/{{lng}}.json"},interpolation:{escapeValue:!1},returnNull:!1});const cze=I.lazy(()=>H$(()=>import("./App-0865fac0.js"),["./App-0865fac0.js","./MantineProvider-11ad6165.js","./App-6125620a.css"],import.meta.url)),uze=I.lazy(()=>H$(()=>import("./ThemeLocaleProvider-5513dc99.js"),["./ThemeLocaleProvider-5513dc99.js","./MantineProvider-11ad6165.js","./ThemeLocaleProvider-0667edb8.css"],import.meta.url)),dze=({apiUrl:e,token:t,config:n,headerComponent:r,middleware:i,projectId:o,queueId:s,selectedImage:a,customStarUi:l,socketOptions:c,isDebugging:u=!1})=>{I.useEffect(()=>(t&&Qv.set(t),e&&Yv.set(e),o&&F5.set(o),s&&In.set(s),Xj(),i&&i.length>0&&Kj(...i),()=>{Yv.set(void 0),Qv.set(void 0),F5.set(void 0),In.set(rN)}),[e,t,i,o,s]),I.useEffect(()=>(l&&Y6.set(l),()=>{Y6.set(void 0)}),[l]),I.useEffect(()=>(r&&Z6.set(r),()=>{Z6.set(void 0)}),[r]),I.useEffect(()=>(c&&g1.set(c),()=>{g1.set({})}),[c]),I.useEffect(()=>(u&&Zv.set(u),()=>{Zv.set(!1)}),[u]);const d=I.useMemo(()=>oLe(o),[o]);return I.useEffect(()=>{MD.set(d)},[d]),ie.jsx(Q.StrictMode,{children:ie.jsx(nQ,{store:d,children:ie.jsx(Q.Suspense,{fallback:ie.jsx(lLe,{}),children:ie.jsx(uze,{children:ie.jsx(KBe,{children:ie.jsx(cze,{config:n,selectedImage:a})})})})})})},fze=I.memo(dze);mC.createRoot(document.getElementById("root")).render(ie.jsx(fze,{}));export{FSe as $,nHe as A,OT as B,Mi as C,ie as D,WSe as E,PWe as F,O6e as G,Hm as H,e0 as I,or as J,Dl as K,eTe as L,SWe as M,vWe as N,PG as O,oye as P,AG as Q,Q as R,ig as S,R4e as T,Wm as U,IA as V,Km as W,bWe as X,_We as Y,j1 as Z,n9 as _,MN as a,WUe as a$,xWe as a0,us as a1,Ml as a2,z1 as a3,rU as a4,EWe as a5,D4e as a6,ys as a7,_V as a8,CS as a9,YT as aA,hV as aB,CSe as aC,gi as aD,Ev as aE,ES as aF,XHe as aG,kUe as aH,qUe as aI,KUe as aJ,CUe as aK,xUe as aL,LG as aM,Gu as aN,G8e as aO,HG as aP,gze as aQ,EUe as aR,fT as aS,ek as aT,uWe as aU,OA as aV,sLe as aW,cWe as aX,uO as aY,Oe as aZ,FUe as a_,rPe as aa,FG as ab,wWe as ac,Ae as ad,yWe as ae,CWe as af,hu as ag,tW as ah,nN as ai,NUe as aj,Sm as ak,AL as al,eB as am,B_ as an,ue as ao,tN as ap,yze as aq,Ve as ar,pi as as,qH as at,nb as au,$A as av,W3 as aw,JA as ax,HUe as ay,pSe as az,e_ as b,Kle as b$,hVe as b0,hae as b1,dT as b2,Dze as b3,iWe as b4,bze as b5,dWe as b6,vze as b7,Sze as b8,Zoe as b9,el as bA,B0 as bB,sGe as bC,iGe as bD,oGe as bE,VH as bF,ce as bG,Qe as bH,K0 as bI,Ot as bJ,$X as bK,ps as bL,LUe as bM,pze as bN,Ox as bO,Y6 as bP,tGe as bQ,nGe as bR,wUe as bS,hue as bT,Qv as bU,rMe as bV,he as bW,Lze as bX,Bze as bY,zze as bZ,jze as b_,Joe as ba,tWe as bb,rWe as bc,_ze as bd,sWe as be,xze as bf,mze as bg,$Ue as bh,IWe as bi,OUe as bj,Sc as bk,eGe as bl,JUe as bm,MUe as bn,lGe as bo,aqe as bp,sqe as bq,ul as br,J as bs,rGe as bt,aGe as bu,PUe as bv,IUe as bw,BUe as bx,vp as by,RUe as bz,eJ as c,mWe as c$,yje as c0,BHe as c1,zHe as c2,Wze as c3,Cje as c4,Uze as c5,dje as c6,Gze as c7,fje as c8,Xze as c9,Jse as cA,cae as cB,zWe as cC,eO as cD,eae as cE,BWe as cF,eje as cG,JR as cH,tae as cI,T$e as cJ,Qze as cK,V8 as cL,UHe as cM,GHe as cN,HHe as cO,oje as cP,WHe as cQ,sje as cR,qHe as cS,aje as cT,KHe as cU,fGe as cV,VUe as cW,nhe as cX,zUe as cY,Gj as cZ,wL as c_,A$e as ca,Hze as cb,vje as cc,Yze as cd,nL as ce,Vze as cf,Pje as cg,qze as ch,oI as ci,Kze as cj,sI as ck,nje as cl,pje as cm,ije as cn,zje as co,jje as cp,rje as cq,Vje as cr,jWe as cs,Zze as ct,YR as cu,hGe as cv,LWe as cw,Jze as cx,ZR as cy,hc as cz,Bie as d,rbe as d$,DUe as d0,_g as d1,iB as d2,Q5 as d3,Id as d4,uu as d5,gje as d6,yVe as d7,uVe as d8,nVe as d9,hHe as dA,vGe as dB,eHe as dC,JGe as dD,N4 as dE,J1e as dF,mGe as dG,W1e as dH,q1e as dI,K1e as dJ,Lle as dK,X1e as dL,$ze as dM,Q1e as dN,Ble as dO,Y1e as dP,Um as dQ,Dle as dR,ebe as dS,g_ as dT,ZWe as dU,DWe as dV,rqe as dW,FWe as dX,tbe as dY,nbe as dZ,iqe as d_,rVe as da,lVe as db,Sn as dc,$T as dd,Fo as de,As as df,hi as dg,aVe as dh,lje as di,YA as dj,cVe as dk,lWe as dl,jF as dm,dbe as dn,tHe as dp,ube as dq,tk as dr,kHe as ds,MHe as dt,$He as du,OHe as dv,PHe as dw,IHe as dx,RHe as dy,c$e as dz,RF as e,CI as e$,nqe as e0,ibe as e1,obe as e2,zle as e3,Z1e as e4,JD as e5,UWe as e6,sbe as e7,EGe as e8,TGe as e9,Che as eA,$Ge as eB,DGe as eC,LGe as eD,YGe as eE,ZGe as eF,AHe as eG,mue as eH,yue as eI,TUe as eJ,uGe as eK,dGe as eL,sB as eM,cGe as eN,c_ as eO,Uje as eP,Dje as eQ,Lje as eR,Bje as eS,yae as eT,li as eU,tI as eV,Pze as eW,YUe as eX,XUe as eY,QUe as eZ,Nl as e_,AGe as ea,kGe as eb,SGe as ec,xGe as ed,wGe as ee,CGe as ef,PGe as eg,IGe as eh,vT as ei,MGe as ej,RGe as ek,OGe as el,NGe as em,FGe as en,BGe as eo,zGe as ep,jGe as eq,VGe as er,UGe as es,GGe as et,HGe as eu,WGe as ev,qGe as ew,KGe as ex,XGe as ey,QGe as ez,DN as f,WWe as f$,dae as f0,nI as f1,eMe as f2,J8e as f3,Ize as f4,Mze as f5,h_ as f6,Rze as f7,fae as f8,Oze as f9,Sje as fA,xje as fB,wje as fC,bje as fD,_je as fE,qle as fF,Rje as fG,Mje as fH,NVe as fI,Zje as fJ,vUe as fK,FVe as fL,Nje as fM,$je as fN,Fje as fO,oT as fP,dVe as fQ,LHe as fR,oqe as fS,QNe as fT,ZHe as fU,tje as fV,jUe as fW,NWe as fX,eqe as fY,qWe as fZ,gGe as f_,kze as fa,Aze as fb,Q4 as fc,lae as fd,iae as fe,oae as ff,nae as fg,rae as fh,sae as fi,aae as fj,Eze as fk,VWe as fl,jHe as fm,ZD as fn,xbe as fo,PNe as fp,Hje as fq,Xle as fr,Gje as fs,Or as ft,hje as fu,Tje as fv,vae as fw,mp as fx,kje as fy,VHe as fz,WN as g,Rj as g$,tqe as g0,JWe as g1,pGe as g2,XWe as g3,KWe as g4,GWe as g5,YWe as g6,Fze as g7,HWe as g8,QWe as g9,rFe as gA,bbe as gB,bGe as gC,pbe as gD,fbe as gE,U1e as gF,uHe as gG,j1e as gH,z1e as gI,G1e as gJ,Oj as gK,vHe as gL,yHe as gM,THe as gN,ZNe as gO,V1e as gP,dHe as gQ,mbe as gR,bHe as gS,mHe as gT,gbe as gU,Gve as gV,gHe as gW,wHe as gX,rhe as gY,Lo as gZ,Ir as g_,Nze as ga,cB as gb,aj as gc,yGe as gd,aFe as ge,abe as gf,aHe as gg,lHe as gh,B1e as gi,L8 as gj,_Ge as gk,zz as gl,Vm as gm,rHe as gn,gc as go,pHe as gp,aWe as gq,ihe as gr,Y$ as gs,eNe as gt,lbe as gu,hbe as gv,iHe as gw,cbe as gx,D1 as gy,Te as gz,a_ as h,WVe as h$,NHe as h0,DHe as h1,kg as h2,Cl as h3,EHe as h4,SHe as h5,CHe as h6,xHe as h7,_He as h8,_j as h9,AVe as hA,Kje as hB,qje as hC,Wje as hD,hUe as hE,KG as hF,kq as hG,Ue as hH,Ooe as hI,fp as hJ,p1 as hK,rL as hL,Jle as hM,Jje as hN,eVe as hO,tVe as hP,uUe as hQ,PVe as hR,kVe as hS,rue as hT,cUe as hU,Z8e as hV,iue as hW,QA as hX,b7e as hY,OVe as hZ,KVe as h_,gWe as ha,fWe as hb,hWe as hc,pWe as hd,vVe as he,sVe as hf,pVe as hg,mVe as hh,pc as hi,qVe as hj,fUe as hk,dUe as hl,MVe as hm,nUe as hn,pUe as ho,tMe as hp,CVe as hq,VVe as hr,Ih as hs,BVe as ht,EVe as hu,LS as hv,jVe as hw,SVe as hx,zVe as hy,xVe as hz,Oie as i,UVe as i0,Xje as i1,Qje as i2,SUe as i3,RWe as i4,MWe as i5,XVe as i6,K8e as i7,tUe as i8,QVe as i9,wze as iA,qse as iB,L_e as iC,Z6 as iD,vV as iE,JT as iF,ds as iG,S4e as iH,X4e as iI,TWe as iJ,zSe as iK,kWe as iL,$6e as iM,j8e as iN,V8e as iO,$Se as iP,IVe as ia,wVe as ib,lUe as ic,aUe as id,JVe as ie,YVe as ig,ZVe as ih,bUe as ii,oUe as ij,_Ue as ik,_Ve as il,bVe as im,LVe as io,DVe as ip,yUe as iq,Y8e as ir,q8e as is,X8e as it,Q8e as iu,Yje as iv,RVe as iw,$We as ix,QHe as iy,YHe as iz,bn as j,hne as k,s_ as l,Mf as m,Qc as n,EF as o,ioe as p,no as q,I as r,Dd as s,Gn as t,rn as u,xo as v,ti as w,dl as x,Jo as y,nye as z}; diff --git a/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 b/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a61a0be57fbc830196e18e6c35fdf7ae5f59274e GIT binary patch literal 27284 zcmV(_K-9l?Pew8T0RR910BV!~6951J0M0l70BR)w0RR9100000000000000000000 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 CAH|aZ literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 b/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eb38b38ea077b5d58f9c998955e33c8974eb527f GIT binary patch literal 22480 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 literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 b/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3df865d7f007da9783223387e875bfc1b6f48c0d GIT binary patch literal 79940 zcmV)YK&-!aPew8T0RR910XRee6951J0?Hf!0XNYA0RR9100000000000000000000 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

lPo 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 uSC)aGdS)4Xj0pe` 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 Ang9R* literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 b/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ce21ca172eabc84c2ad452ae1e254ad6ba5c30c3 GIT binary patch literal 10540 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 dk(7PGKf + + + + + + + + InvokeAI - A Stable Diffusion Toolkit + + + + + + +

+ + + diff --git a/invokeai/frontend/web/dist/locales/ar.json b/invokeai/frontend/web/dist/locales/ar.json new file mode 100644 index 0000000000..7354b21ea0 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ar.json @@ -0,0 +1,504 @@ +{ + "common": { + "hotkeysLabel": "مفاتيح الأختصار", + "languagePickerLabel": "منتقي اللغة", + "reportBugLabel": "بلغ عن خطأ", + "settingsLabel": "إعدادات", + "img2img": "صورة إلى صورة", + "unifiedCanvas": "لوحة موحدة", + "nodes": "عقد", + "langArabic": "العربية", + "nodesDesc": "نظام مبني على العقد لإنتاج الصور قيد التطوير حاليًا. تبقى على اتصال مع تحديثات حول هذه الميزة المذهلة.", + "postProcessing": "معالجة بعد الإصدار", + "postProcessDesc1": "Invoke AI توفر مجموعة واسعة من ميزات المعالجة بعد الإصدار. تحسين الصور واستعادة الوجوه متاحين بالفعل في واجهة الويب. يمكنك الوصول إليهم من الخيارات المتقدمة في قائمة الخيارات في علامة التبويب Text To Image و Image To Image. يمكن أيضًا معالجة الصور مباشرةً باستخدام أزرار الإجراء على الصورة فوق عرض الصورة الحالي أو في العارض.", + "postProcessDesc2": "سيتم إصدار واجهة رسومية مخصصة قريبًا لتسهيل عمليات المعالجة بعد الإصدار المتقدمة.", + "postProcessDesc3": "واجهة سطر الأوامر Invoke AI توفر ميزات أخرى عديدة بما في ذلك Embiggen.", + "training": "تدريب", + "trainingDesc1": "تدفق خاص مخصص لتدريب تضميناتك الخاصة ونقاط التحقق باستخدام العكس النصي و دريم بوث من واجهة الويب.", + "trainingDesc2": " استحضر الذكاء الصناعي يدعم بالفعل تدريب تضمينات مخصصة باستخدام العكس النصي باستخدام السكريبت الرئيسي.", + "upload": "رفع", + "close": "إغلاق", + "load": "تحميل", + "back": "الى الخلف", + "statusConnected": "متصل", + "statusDisconnected": "غير متصل", + "statusError": "خطأ", + "statusPreparing": "جاري التحضير", + "statusProcessingCanceled": "تم إلغاء المعالجة", + "statusProcessingComplete": "اكتمال المعالجة", + "statusGenerating": "جاري التوليد", + "statusGeneratingTextToImage": "جاري توليد النص إلى الصورة", + "statusGeneratingImageToImage": "جاري توليد الصورة إلى الصورة", + "statusGeneratingInpainting": "جاري توليد Inpainting", + "statusGeneratingOutpainting": "جاري توليد Outpainting", + "statusGenerationComplete": "اكتمال التوليد", + "statusIterationComplete": "اكتمال التكرار", + "statusSavingImage": "جاري حفظ الصورة", + "statusRestoringFaces": "جاري استعادة الوجوه", + "statusRestoringFacesGFPGAN": "تحسيت الوجوه (جي إف بي جان)", + "statusRestoringFacesCodeFormer": "تحسين الوجوه (كود فورمر)", + "statusUpscaling": "تحسين الحجم", + "statusUpscalingESRGAN": "تحسين الحجم (إي إس آر جان)", + "statusLoadingModel": "تحميل النموذج", + "statusModelChanged": "تغير النموذج" + }, + "gallery": { + "generations": "الأجيال", + "showGenerations": "عرض الأجيال", + "uploads": "التحميلات", + "showUploads": "عرض التحميلات", + "galleryImageSize": "حجم الصورة", + "galleryImageResetSize": "إعادة ضبط الحجم", + "gallerySettings": "إعدادات المعرض", + "maintainAspectRatio": "الحفاظ على نسبة الأبعاد", + "autoSwitchNewImages": "التبديل التلقائي إلى الصور الجديدة", + "singleColumnLayout": "تخطيط عمود واحد", + "allImagesLoaded": "تم تحميل جميع الصور", + "loadMore": "تحميل المزيد", + "noImagesInGallery": "لا توجد صور في المعرض" + }, + "hotkeys": { + "keyboardShortcuts": "مفاتيح الأزرار المختصرة", + "appHotkeys": "مفاتيح التطبيق", + "generalHotkeys": "مفاتيح عامة", + "galleryHotkeys": "مفاتيح المعرض", + "unifiedCanvasHotkeys": "مفاتيح اللوحةالموحدة ", + "invoke": { + "title": "أدعو", + "desc": "إنشاء صورة" + }, + "cancel": { + "title": "إلغاء", + "desc": "إلغاء إنشاء الصورة" + }, + "focusPrompt": { + "title": "تركيز الإشعار", + "desc": "تركيز منطقة الإدخال الإشعار" + }, + "toggleOptions": { + "title": "تبديل الخيارات", + "desc": "فتح وإغلاق لوحة الخيارات" + }, + "pinOptions": { + "title": "خيارات التثبيت", + "desc": "ثبت لوحة الخيارات" + }, + "toggleViewer": { + "title": "تبديل العارض", + "desc": "فتح وإغلاق مشاهد الصور" + }, + "toggleGallery": { + "title": "تبديل المعرض", + "desc": "فتح وإغلاق درابزين المعرض" + }, + "maximizeWorkSpace": { + "title": "تكبير مساحة العمل", + "desc": "إغلاق اللوحات وتكبير مساحة العمل" + }, + "changeTabs": { + "title": "تغيير الألسنة", + "desc": "التبديل إلى مساحة عمل أخرى" + }, + "consoleToggle": { + "title": "تبديل الطرفية", + "desc": "فتح وإغلاق الطرفية" + }, + "setPrompt": { + "title": "ضبط التشعب", + "desc": "استخدم تشعب الصورة الحالية" + }, + "setSeed": { + "title": "ضبط البذور", + "desc": "استخدم بذور الصورة الحالية" + }, + "setParameters": { + "title": "ضبط المعلمات", + "desc": "استخدم جميع المعلمات الخاصة بالصورة الحالية" + }, + "restoreFaces": { + "title": "استعادة الوجوه", + "desc": "استعادة الصورة الحالية" + }, + "upscale": { + "title": "تحسين الحجم", + "desc": "تحسين حجم الصورة الحالية" + }, + "showInfo": { + "title": "عرض المعلومات", + "desc": "عرض معلومات البيانات الخاصة بالصورة الحالية" + }, + "sendToImageToImage": { + "title": "أرسل إلى صورة إلى صورة", + "desc": "أرسل الصورة الحالية إلى صورة إلى صورة" + }, + "deleteImage": { + "title": "حذف الصورة", + "desc": "حذف الصورة الحالية" + }, + "closePanels": { + "title": "أغلق اللوحات", + "desc": "يغلق اللوحات المفتوحة" + }, + "previousImage": { + "title": "الصورة السابقة", + "desc": "عرض الصورة السابقة في الصالة" + }, + "nextImage": { + "title": "الصورة التالية", + "desc": "عرض الصورة التالية في الصالة" + }, + "toggleGalleryPin": { + "title": "تبديل تثبيت الصالة", + "desc": "يثبت ويفتح تثبيت الصالة على الواجهة الرسومية" + }, + "increaseGalleryThumbSize": { + "title": "زيادة حجم صورة الصالة", + "desc": "يزيد حجم الصور المصغرة في الصالة" + }, + "decreaseGalleryThumbSize": { + "title": "انقاص حجم صورة الصالة", + "desc": "ينقص حجم الصور المصغرة في الصالة" + }, + "selectBrush": { + "title": "تحديد الفرشاة", + "desc": "يحدد الفرشاة على اللوحة" + }, + "selectEraser": { + "title": "تحديد الممحاة", + "desc": "يحدد الممحاة على اللوحة" + }, + "decreaseBrushSize": { + "title": "تصغير حجم الفرشاة", + "desc": "يصغر حجم الفرشاة/الممحاة على اللوحة" + }, + "increaseBrushSize": { + "title": "زيادة حجم الفرشاة", + "desc": "يزيد حجم فرشة اللوحة / الممحاة" + }, + "decreaseBrushOpacity": { + "title": "تخفيض شفافية الفرشاة", + "desc": "يخفض شفافية فرشة اللوحة" + }, + "increaseBrushOpacity": { + "title": "زيادة شفافية الفرشاة", + "desc": "يزيد شفافية فرشة اللوحة" + }, + "moveTool": { + "title": "أداة التحريك", + "desc": "يتيح التحرك في اللوحة" + }, + "fillBoundingBox": { + "title": "ملء الصندوق المحدد", + "desc": "يملأ الصندوق المحدد بلون الفرشاة" + }, + "eraseBoundingBox": { + "title": "محو الصندوق المحدد", + "desc": "يمحو منطقة الصندوق المحدد" + }, + "colorPicker": { + "title": "اختيار منتقي اللون", + "desc": "يختار منتقي اللون الخاص باللوحة" + }, + "toggleSnap": { + "title": "تبديل التأكيد", + "desc": "يبديل تأكيد الشبكة" + }, + "quickToggleMove": { + "title": "تبديل سريع للتحريك", + "desc": "يبديل مؤقتا وضع التحريك" + }, + "toggleLayer": { + "title": "تبديل الطبقة", + "desc": "يبديل إختيار الطبقة القناع / الأساسية" + }, + "clearMask": { + "title": "مسح القناع", + "desc": "مسح القناع بأكمله" + }, + "hideMask": { + "title": "إخفاء الكمامة", + "desc": "إخفاء وإظهار الكمامة" + }, + "showHideBoundingBox": { + "title": "إظهار / إخفاء علبة التحديد", + "desc": "تبديل ظهور علبة التحديد" + }, + "mergeVisible": { + "title": "دمج الطبقات الظاهرة", + "desc": "دمج جميع الطبقات الظاهرة في اللوحة" + }, + "saveToGallery": { + "title": "حفظ إلى صالة الأزياء", + "desc": "حفظ اللوحة الحالية إلى صالة الأزياء" + }, + "copyToClipboard": { + "title": "نسخ إلى الحافظة", + "desc": "نسخ اللوحة الحالية إلى الحافظة" + }, + "downloadImage": { + "title": "تنزيل الصورة", + "desc": "تنزيل اللوحة الحالية" + }, + "undoStroke": { + "title": "تراجع عن الخط", + "desc": "تراجع عن خط الفرشاة" + }, + "redoStroke": { + "title": "إعادة الخط", + "desc": "إعادة خط الفرشاة" + }, + "resetView": { + "title": "إعادة تعيين العرض", + "desc": "إعادة تعيين عرض اللوحة" + }, + "previousStagingImage": { + "title": "الصورة السابقة في المرحلة التجريبية", + "desc": "الصورة السابقة في منطقة المرحلة التجريبية" + }, + "nextStagingImage": { + "title": "الصورة التالية في المرحلة التجريبية", + "desc": "الصورة التالية في منطقة المرحلة التجريبية" + }, + "acceptStagingImage": { + "title": "قبول الصورة في المرحلة التجريبية", + "desc": "قبول الصورة الحالية في منطقة المرحلة التجريبية" + } + }, + "modelManager": { + "modelManager": "مدير النموذج", + "model": "نموذج", + "allModels": "جميع النماذج", + "checkpointModels": "نقاط التحقق", + "diffusersModels": "المصادر المتعددة", + "safetensorModels": "التنسورات الآمنة", + "modelAdded": "تمت إضافة النموذج", + "modelUpdated": "تم تحديث النموذج", + "modelEntryDeleted": "تم حذف مدخل النموذج", + "cannotUseSpaces": "لا يمكن استخدام المساحات", + "addNew": "إضافة جديد", + "addNewModel": "إضافة نموذج جديد", + "addCheckpointModel": "إضافة نقطة تحقق / نموذج التنسور الآمن", + "addDiffuserModel": "إضافة مصادر متعددة", + "addManually": "إضافة يدويًا", + "manual": "يدوي", + "name": "الاسم", + "nameValidationMsg": "أدخل اسما لنموذجك", + "description": "الوصف", + "descriptionValidationMsg": "أضف وصفا لنموذجك", + "config": "تكوين", + "configValidationMsg": "مسار الملف الإعدادي لنموذجك.", + "modelLocation": "موقع النموذج", + "modelLocationValidationMsg": "موقع النموذج على الجهاز الخاص بك.", + "repo_id": "معرف المستودع", + "repoIDValidationMsg": "المستودع الإلكتروني لنموذجك", + "vaeLocation": "موقع فاي إي", + "vaeLocationValidationMsg": "موقع فاي إي على الجهاز الخاص بك.", + "vaeRepoID": "معرف مستودع فاي إي", + "vaeRepoIDValidationMsg": "المستودع الإلكتروني فاي إي", + "width": "عرض", + "widthValidationMsg": "عرض افتراضي لنموذجك.", + "height": "ارتفاع", + "heightValidationMsg": "ارتفاع افتراضي لنموذجك.", + "addModel": "أضف نموذج", + "updateModel": "تحديث النموذج", + "availableModels": "النماذج المتاحة", + "search": "بحث", + "load": "تحميل", + "active": "نشط", + "notLoaded": "غير محمل", + "cached": "مخبأ", + "checkpointFolder": "مجلد التدقيق", + "clearCheckpointFolder": "مسح مجلد التدقيق", + "findModels": "إيجاد النماذج", + "scanAgain": "فحص مرة أخرى", + "modelsFound": "النماذج الموجودة", + "selectFolder": "حدد المجلد", + "selected": "تم التحديد", + "selectAll": "حدد الكل", + "deselectAll": "إلغاء تحديد الكل", + "showExisting": "إظهار الموجود", + "addSelected": "أضف المحدد", + "modelExists": "النموذج موجود", + "selectAndAdd": "حدد وأضف النماذج المدرجة أدناه", + "noModelsFound": "لم يتم العثور على نماذج", + "delete": "حذف", + "deleteModel": "حذف النموذج", + "deleteConfig": "حذف التكوين", + "deleteMsg1": "هل أنت متأكد من رغبتك في حذف إدخال النموذج هذا من استحضر الذكاء الصناعي", + "deleteMsg2": "هذا لن يحذف ملف نقطة التحكم للنموذج من القرص الخاص بك. يمكنك إعادة إضافتهم إذا كنت ترغب في ذلك.", + "formMessageDiffusersModelLocation": "موقع النموذج للمصعد", + "formMessageDiffusersModelLocationDesc": "يرجى إدخال واحد على الأقل.", + "formMessageDiffusersVAELocation": "موقع فاي إي", + "formMessageDiffusersVAELocationDesc": "إذا لم يتم توفيره، سيبحث استحضر الذكاء الصناعي عن ملف فاي إي داخل موقع النموذج المعطى أعلاه." + }, + "parameters": { + "images": "الصور", + "steps": "الخطوات", + "cfgScale": "مقياس الإعداد الذاتي للجملة", + "width": "عرض", + "height": "ارتفاع", + "seed": "بذرة", + "randomizeSeed": "تبديل بذرة", + "shuffle": "تشغيل", + "noiseThreshold": "عتبة الضوضاء", + "perlinNoise": "ضجيج برلين", + "variations": "تباينات", + "variationAmount": "كمية التباين", + "seedWeights": "أوزان البذور", + "faceRestoration": "استعادة الوجه", + "restoreFaces": "استعادة الوجوه", + "type": "نوع", + "strength": "قوة", + "upscaling": "تصغير", + "upscale": "تصغير", + "upscaleImage": "تصغير الصورة", + "scale": "مقياس", + "otherOptions": "خيارات أخرى", + "seamlessTiling": "تجهيز بلاستيكي بدون تشققات", + "hiresOptim": "تحسين الدقة العالية", + "imageFit": "ملائمة الصورة الأولية لحجم الخرج", + "codeformerFidelity": "الوثوقية", + "scaleBeforeProcessing": "تحجيم قبل المعالجة", + "scaledWidth": "العرض المحجوب", + "scaledHeight": "الارتفاع المحجوب", + "infillMethod": "طريقة التعبئة", + "tileSize": "حجم البلاطة", + "boundingBoxHeader": "صندوق التحديد", + "seamCorrectionHeader": "تصحيح التشقق", + "infillScalingHeader": "التعبئة والتحجيم", + "img2imgStrength": "قوة صورة إلى صورة", + "toggleLoopback": "تبديل الإعادة", + "sendTo": "أرسل إلى", + "sendToImg2Img": "أرسل إلى صورة إلى صورة", + "sendToUnifiedCanvas": "أرسل إلى الخطوط الموحدة", + "copyImage": "نسخ الصورة", + "copyImageToLink": "نسخ الصورة إلى الرابط", + "downloadImage": "تحميل الصورة", + "openInViewer": "فتح في العارض", + "closeViewer": "إغلاق العارض", + "usePrompt": "استخدم المحث", + "useSeed": "استخدام البذور", + "useAll": "استخدام الكل", + "useInitImg": "استخدام الصورة الأولية", + "info": "معلومات", + "initialImage": "الصورة الأولية", + "showOptionsPanel": "إظهار لوحة الخيارات" + }, + "settings": { + "models": "موديلات", + "displayInProgress": "عرض الصور المؤرشفة", + "saveSteps": "حفظ الصور كل n خطوات", + "confirmOnDelete": "تأكيد عند الحذف", + "displayHelpIcons": "عرض أيقونات المساعدة", + "enableImageDebugging": "تمكين التصحيح عند التصوير", + "resetWebUI": "إعادة تعيين واجهة الويب", + "resetWebUIDesc1": "إعادة تعيين واجهة الويب يعيد فقط ذاكرة التخزين المؤقت للمتصفح لصورك وإعداداتك المذكورة. لا يحذف أي صور من القرص.", + "resetWebUIDesc2": "إذا لم تظهر الصور في الصالة أو إذا كان شيء آخر غير ناجح، يرجى المحاولة إعادة تعيين قبل تقديم مشكلة على جيت هب.", + "resetComplete": "تم إعادة تعيين واجهة الويب. تحديث الصفحة لإعادة التحميل." + }, + "toast": { + "tempFoldersEmptied": "تم تفريغ مجلد المؤقت", + "uploadFailed": "فشل التحميل", + "uploadFailedUnableToLoadDesc": "تعذر تحميل الملف", + "downloadImageStarted": "بدأ تنزيل الصورة", + "imageCopied": "تم نسخ الصورة", + "imageLinkCopied": "تم نسخ رابط الصورة", + "imageNotLoaded": "لم يتم تحميل أي صورة", + "imageNotLoadedDesc": "لم يتم العثور على صورة لإرسالها إلى وحدة الصورة", + "imageSavedToGallery": "تم حفظ الصورة في المعرض", + "canvasMerged": "تم دمج الخط", + "sentToImageToImage": "تم إرسال إلى صورة إلى صورة", + "sentToUnifiedCanvas": "تم إرسال إلى لوحة موحدة", + "parametersSet": "تم تعيين المعلمات", + "parametersNotSet": "لم يتم تعيين المعلمات", + "parametersNotSetDesc": "لم يتم العثور على معلمات بيانية لهذه الصورة.", + "parametersFailed": "حدث مشكلة في تحميل المعلمات", + "parametersFailedDesc": "تعذر تحميل صورة البدء.", + "seedSet": "تم تعيين البذرة", + "seedNotSet": "لم يتم تعيين البذرة", + "seedNotSetDesc": "تعذر العثور على البذرة لهذه الصورة.", + "promptSet": "تم تعيين الإشعار", + "promptNotSet": "Prompt Not Set", + "promptNotSetDesc": "تعذر العثور على الإشعار لهذه الصورة.", + "upscalingFailed": "فشل التحسين", + "faceRestoreFailed": "فشل استعادة الوجه", + "metadataLoadFailed": "فشل تحميل البيانات الوصفية", + "initialImageSet": "تم تعيين الصورة الأولية", + "initialImageNotSet": "لم يتم تعيين الصورة الأولية", + "initialImageNotSetDesc": "تعذر تحميل الصورة الأولية" + }, + "tooltip": { + "feature": { + "prompt": "هذا هو حقل التحذير. يشمل التحذير عناصر الإنتاج والمصطلحات الأسلوبية. يمكنك إضافة الأوزان (أهمية الرمز) في التحذير أيضًا، ولكن أوامر CLI والمعلمات لن تعمل.", + "gallery": "تعرض Gallery منتجات من مجلد الإخراج عندما يتم إنشاؤها. تخزن الإعدادات داخل الملفات ويتم الوصول إليها عن طريق قائمة السياق.", + "other": "ستمكن هذه الخيارات من وضع عمليات معالجة بديلة لـاستحضر الذكاء الصناعي. سيؤدي 'الزخرفة بلا جدران' إلى إنشاء أنماط تكرارية في الإخراج. 'دقة عالية' هي الإنتاج خلال خطوتين عبر صورة إلى صورة: استخدم هذا الإعداد عندما ترغب في توليد صورة أكبر وأكثر تجانبًا دون العيوب. ستستغرق الأشياء وقتًا أطول من نص إلى صورة المعتاد.", + "seed": "يؤثر قيمة البذور على الضوضاء الأولي الذي يتم تكوين الصورة منه. يمكنك استخدام البذور الخاصة بالصور السابقة. 'عتبة الضوضاء' يتم استخدامها لتخفيف العناصر الخللية في قيم CFG العالية (جرب مدى 0-10), و Perlin لإضافة ضوضاء Perlin أثناء الإنتاج: كلا منهما يعملان على إضافة التنوع إلى النتائج الخاصة بك.", + "variations": "جرب التغيير مع قيمة بين 0.1 و 1.0 لتغيير النتائج لبذور معينة. التغييرات المثيرة للاهتمام للبذور تكون بين 0.1 و 0.3.", + "upscale": "استخدم إي إس آر جان لتكبير الصورة على الفور بعد الإنتاج.", + "faceCorrection": "تصحيح الوجه باستخدام جي إف بي جان أو كود فورمر: يكتشف الخوارزمية الوجوه في الصورة وتصحح أي عيوب. قيمة عالية ستغير الصورة أكثر، مما يؤدي إلى وجوه أكثر جمالا. كود فورمر بدقة أعلى يحتفظ بالصورة الأصلية على حساب تصحيح وجه أكثر قوة.", + "imageToImage": "تحميل صورة إلى صورة أي صورة كأولية، والتي يتم استخدامها لإنشاء صورة جديدة مع التشعيب. كلما كانت القيمة أعلى، كلما تغيرت نتيجة الصورة. من الممكن أن تكون القيم بين 0.0 و 1.0، وتوصي النطاق الموصى به هو .25-.75", + "boundingBox": "مربع الحدود هو نفس الإعدادات العرض والارتفاع لنص إلى صورة أو صورة إلى صورة. فقط المنطقة في المربع سيتم معالجتها.", + "seamCorrection": "يتحكم بالتعامل مع الخطوط المرئية التي تحدث بين الصور المولدة في سطح اللوحة.", + "infillAndScaling": "إدارة أساليب التعبئة (المستخدمة على المناطق المخفية أو الممحوة في سطح اللوحة) والزيادة في الحجم (مفيدة لحجوزات الإطارات الصغيرة)." + } + }, + "unifiedCanvas": { + "layer": "طبقة", + "base": "قاعدة", + "mask": "قناع", + "maskingOptions": "خيارات القناع", + "enableMask": "مكن القناع", + "preserveMaskedArea": "الحفاظ على المنطقة المقنعة", + "clearMask": "مسح القناع", + "brush": "فرشاة", + "eraser": "ممحاة", + "fillBoundingBox": "ملئ إطار الحدود", + "eraseBoundingBox": "مسح إطار الحدود", + "colorPicker": "اختيار اللون", + "brushOptions": "خيارات الفرشاة", + "brushSize": "الحجم", + "move": "تحريك", + "resetView": "إعادة تعيين العرض", + "mergeVisible": "دمج الظاهر", + "saveToGallery": "حفظ إلى المعرض", + "copyToClipboard": "نسخ إلى الحافظة", + "downloadAsImage": "تنزيل على شكل صورة", + "undo": "تراجع", + "redo": "إعادة", + "clearCanvas": "مسح سبيكة الكاملة", + "canvasSettings": "إعدادات سبيكة الكاملة", + "showIntermediates": "إظهار الوسطاء", + "showGrid": "إظهار الشبكة", + "snapToGrid": "الالتفاف إلى الشبكة", + "darkenOutsideSelection": "تعمية خارج التحديد", + "autoSaveToGallery": "حفظ تلقائي إلى المعرض", + "saveBoxRegionOnly": "حفظ منطقة الصندوق فقط", + "limitStrokesToBox": "تحديد عدد الخطوط إلى الصندوق", + "showCanvasDebugInfo": "إظهار معلومات تصحيح سبيكة الكاملة", + "clearCanvasHistory": "مسح تاريخ سبيكة الكاملة", + "clearHistory": "مسح التاريخ", + "clearCanvasHistoryMessage": "مسح تاريخ اللوحة تترك اللوحة الحالية عائمة، ولكن تمسح بشكل غير قابل للتراجع تاريخ التراجع والإعادة.", + "clearCanvasHistoryConfirm": "هل أنت متأكد من رغبتك في مسح تاريخ اللوحة؟", + "emptyTempImageFolder": "إفراغ مجلد الصور المؤقتة", + "emptyFolder": "إفراغ المجلد", + "emptyTempImagesFolderMessage": "إفراغ مجلد الصور المؤقتة يؤدي أيضًا إلى إعادة تعيين اللوحة الموحدة بشكل كامل. وهذا يشمل كل تاريخ التراجع / الإعادة والصور في منطقة التخزين وطبقة الأساس لللوحة.", + "emptyTempImagesFolderConfirm": "هل أنت متأكد من رغبتك في إفراغ مجلد الصور المؤقتة؟", + "activeLayer": "الطبقة النشطة", + "canvasScale": "مقياس اللوحة", + "boundingBox": "صندوق الحدود", + "scaledBoundingBox": "صندوق الحدود المكبر", + "boundingBoxPosition": "موضع صندوق الحدود", + "canvasDimensions": "أبعاد اللوحة", + "canvasPosition": "موضع اللوحة", + "cursorPosition": "موضع المؤشر", + "previous": "السابق", + "next": "التالي", + "accept": "قبول", + "showHide": "إظهار/إخفاء", + "discardAll": "تجاهل الكل", + "betaClear": "مسح", + "betaDarkenOutside": "ظل الخارج", + "betaLimitToBox": "تحديد إلى الصندوق", + "betaPreserveMasked": "المحافظة على المخفية" + } +} diff --git a/invokeai/frontend/web/dist/locales/de.json b/invokeai/frontend/web/dist/locales/de.json new file mode 100644 index 0000000000..d9b64f8fc6 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/de.json @@ -0,0 +1,1012 @@ +{ + "common": { + "languagePickerLabel": "Sprachauswahl", + "reportBugLabel": "Fehler melden", + "settingsLabel": "Einstellungen", + "img2img": "Bild zu Bild", + "nodes": "Knoten Editor", + "langGerman": "Deutsch", + "nodesDesc": "Ein knotenbasiertes System, für die Erzeugung von Bildern, ist derzeit in der Entwicklung. Bleiben Sie gespannt auf Updates zu dieser fantastischen Funktion.", + "postProcessing": "Nachbearbeitung", + "postProcessDesc1": "InvokeAI bietet eine breite Palette von Nachbearbeitungsfunktionen. Bildhochskalierung und Gesichtsrekonstruktion sind bereits in der WebUI verfügbar. Sie können sie über das Menü Erweiterte Optionen der Reiter Text in Bild und Bild in Bild aufrufen. Sie können Bilder auch direkt bearbeiten, indem Sie die Schaltflächen für Bildaktionen oberhalb der aktuellen Bildanzeige oder im Viewer verwenden.", + "postProcessDesc2": "Eine spezielle Benutzeroberfläche wird in Kürze veröffentlicht, um erweiterte Nachbearbeitungs-Workflows zu erleichtern.", + "postProcessDesc3": "Die InvokeAI Kommandozeilen-Schnittstelle bietet verschiedene andere Funktionen, darunter Embiggen.", + "training": "trainieren", + "trainingDesc1": "Ein spezieller Arbeitsablauf zum Trainieren Ihrer eigenen Embeddings und Checkpoints mit Textual Inversion und Dreambooth über die Weboberfläche.", + "trainingDesc2": "InvokeAI unterstützt bereits das Training von benutzerdefinierten Embeddings mit Textual Inversion unter Verwendung des Hauptskripts.", + "upload": "Hochladen", + "close": "Schließen", + "load": "Laden", + "statusConnected": "Verbunden", + "statusDisconnected": "Getrennt", + "statusError": "Fehler", + "statusPreparing": "Vorbereiten", + "statusProcessingCanceled": "Verarbeitung abgebrochen", + "statusProcessingComplete": "Verarbeitung komplett", + "statusGenerating": "Generieren", + "statusGeneratingTextToImage": "Erzeugen von Text zu Bild", + "statusGeneratingImageToImage": "Erzeugen von Bild zu Bild", + "statusGeneratingInpainting": "Erzeuge Inpainting", + "statusGeneratingOutpainting": "Erzeuge Outpainting", + "statusGenerationComplete": "Generierung abgeschlossen", + "statusIterationComplete": "Iteration abgeschlossen", + "statusSavingImage": "Speichere Bild", + "statusRestoringFaces": "Gesichter restaurieren", + "statusRestoringFacesGFPGAN": "Gesichter restaurieren (GFPGAN)", + "statusRestoringFacesCodeFormer": "Gesichter restaurieren (CodeFormer)", + "statusUpscaling": "Hochskalierung", + "statusUpscalingESRGAN": "Hochskalierung (ESRGAN)", + "statusLoadingModel": "Laden des Modells", + "statusModelChanged": "Modell Geändert", + "cancel": "Abbrechen", + "accept": "Annehmen", + "back": "Zurück", + "langEnglish": "Englisch", + "langDutch": "Niederländisch", + "langFrench": "Französisch", + "langItalian": "Italienisch", + "langPortuguese": "Portugiesisch", + "langRussian": "Russisch", + "langUkranian": "Ukrainisch", + "hotkeysLabel": "Tastenkombinationen", + "githubLabel": "Github", + "discordLabel": "Discord", + "txt2img": "Text zu Bild", + "postprocessing": "Nachbearbeitung", + "langPolish": "Polnisch", + "langJapanese": "Japanisch", + "langArabic": "Arabisch", + "langKorean": "Koreanisch", + "langHebrew": "Hebräisch", + "langSpanish": "Spanisch", + "t2iAdapter": "T2I Adapter", + "communityLabel": "Gemeinschaft", + "dontAskMeAgain": "Frag mich nicht nochmal", + "loadingInvokeAI": "Lade Invoke AI", + "statusMergedModels": "Modelle zusammengeführt", + "areYouSure": "Bist du dir sicher?", + "statusConvertingModel": "Model konvertieren", + "on": "An", + "nodeEditor": "Knoten Editor", + "statusMergingModels": "Modelle zusammenführen", + "langSimplifiedChinese": "Vereinfachtes Chinesisch", + "ipAdapter": "IP Adapter", + "controlAdapter": "Control Adapter", + "auto": "Automatisch", + "controlNet": "ControlNet", + "imageFailedToLoad": "Kann Bild nicht laden", + "statusModelConverted": "Model konvertiert", + "modelManager": "Model Manager", + "lightMode": "Heller Modus", + "generate": "Erstellen", + "learnMore": "Mehr lernen", + "darkMode": "Dunkler Modus", + "loading": "Lade", + "random": "Zufall", + "batch": "Stapel-Manager", + "advanced": "Erweitert", + "langBrPortuguese": "Portugiesisch (Brasilien)", + "unifiedCanvas": "Einheitliche Leinwand", + "openInNewTab": "In einem neuem Tab öffnen", + "statusProcessing": "wird bearbeitet", + "linear": "Linear", + "imagePrompt": "Bild Prompt", + "checkpoint": "Checkpoint", + "inpaint": "inpaint", + "simple": "Einfach", + "template": "Vorlage", + "outputs": "Ausgabe", + "data": "Daten", + "safetensors": "Safetensors", + "outpaint": "outpaint", + "details": "Details", + "format": "Format", + "unknown": "Unbekannt", + "folder": "Ordner", + "error": "Fehler", + "installed": "Installiert", + "ai": "KI", + "file": "Datei", + "somethingWentWrong": "Etwas ist schief gelaufen", + "copyError": "$t(gallery.copy) Fehler", + "input": "Eingabe", + "notInstalled": "Nicht $t(common.installed)" + }, + "gallery": { + "generations": "Erzeugungen", + "showGenerations": "Zeige Erzeugnisse", + "uploads": "Uploads", + "showUploads": "Zeige Uploads", + "galleryImageSize": "Bildgröße", + "galleryImageResetSize": "Größe zurücksetzen", + "gallerySettings": "Galerie-Einstellungen", + "maintainAspectRatio": "Seitenverhältnis beibehalten", + "autoSwitchNewImages": "Automatisch zu neuen Bildern wechseln", + "singleColumnLayout": "Einspaltiges Layout", + "allImagesLoaded": "Alle Bilder geladen", + "loadMore": "Mehr laden", + "noImagesInGallery": "Keine Bilder in der Galerie", + "loading": "Lade", + "preparingDownload": "bereite Download vor", + "preparingDownloadFailed": "Problem beim Download vorbereiten", + "deleteImage": "Lösche Bild", + "copy": "Kopieren", + "download": "Runterladen", + "setCurrentImage": "Setze aktuelle Bild", + "featuresWillReset": "Wenn Sie dieses Bild löschen, werden diese Funktionen sofort zurückgesetzt.", + "deleteImageBin": "Gelöschte Bilder werden an den Papierkorb Ihres Betriebssystems gesendet.", + "unableToLoad": "Galerie kann nicht geladen werden", + "downloadSelection": "Auswahl herunterladen", + "currentlyInUse": "Dieses Bild wird derzeit in den folgenden Funktionen verwendet:", + "deleteImagePermanent": "Gelöschte Bilder können nicht wiederhergestellt werden.", + "autoAssignBoardOnClick": "Board per Klick automatisch zuweisen", + "noImageSelected": "Kein Bild ausgewählt" + }, + "hotkeys": { + "keyboardShortcuts": "Tastenkürzel", + "appHotkeys": "App-Tastenkombinationen", + "generalHotkeys": "Allgemeine Tastenkürzel", + "galleryHotkeys": "Galerie Tastenkürzel", + "unifiedCanvasHotkeys": "Unified Canvas Tastenkürzel", + "invoke": { + "desc": "Ein Bild erzeugen", + "title": "Invoke" + }, + "cancel": { + "title": "Abbrechen", + "desc": "Bilderzeugung abbrechen" + }, + "focusPrompt": { + "title": "Fokussiere Prompt", + "desc": "Fokussieren des Eingabefeldes für den Prompt" + }, + "toggleOptions": { + "title": "Optionen umschalten", + "desc": "Öffnen und Schließen des Optionsfeldes" + }, + "pinOptions": { + "title": "Optionen anheften", + "desc": "Anheften des Optionsfeldes" + }, + "toggleViewer": { + "title": "Bildbetrachter umschalten", + "desc": "Bildbetrachter öffnen und schließen" + }, + "toggleGallery": { + "title": "Galerie umschalten", + "desc": "Öffnen und Schließen des Galerie-Schubfachs" + }, + "maximizeWorkSpace": { + "title": "Arbeitsbereich maximieren", + "desc": "Schließen Sie die Panels und maximieren Sie den Arbeitsbereich" + }, + "changeTabs": { + "title": "Tabs wechseln", + "desc": "Zu einem anderen Arbeitsbereich wechseln" + }, + "consoleToggle": { + "title": "Konsole Umschalten", + "desc": "Konsole öffnen und schließen" + }, + "setPrompt": { + "title": "Prompt setzen", + "desc": "Verwende den Prompt des aktuellen Bildes" + }, + "setSeed": { + "title": "Seed setzen", + "desc": "Verwende den Seed des aktuellen Bildes" + }, + "setParameters": { + "title": "Parameter setzen", + "desc": "Alle Parameter des aktuellen Bildes verwenden" + }, + "restoreFaces": { + "title": "Gesicht restaurieren", + "desc": "Das aktuelle Bild restaurieren" + }, + "upscale": { + "title": "Hochskalieren", + "desc": "Das aktuelle Bild hochskalieren" + }, + "showInfo": { + "title": "Info anzeigen", + "desc": "Metadaten des aktuellen Bildes anzeigen" + }, + "sendToImageToImage": { + "title": "An Bild zu Bild senden", + "desc": "Aktuelles Bild an Bild zu Bild senden" + }, + "deleteImage": { + "title": "Bild löschen", + "desc": "Aktuelles Bild löschen" + }, + "closePanels": { + "title": "Panels schließen", + "desc": "Schließt offene Panels" + }, + "previousImage": { + "title": "Vorheriges Bild", + "desc": "Vorheriges Bild in der Galerie anzeigen" + }, + "nextImage": { + "title": "Nächstes Bild", + "desc": "Nächstes Bild in Galerie anzeigen" + }, + "toggleGalleryPin": { + "title": "Galerie anheften umschalten", + "desc": "Heftet die Galerie an die Benutzeroberfläche bzw. löst die sie" + }, + "increaseGalleryThumbSize": { + "title": "Größe der Galeriebilder erhöhen", + "desc": "Vergrößert die Galerie-Miniaturansichten" + }, + "decreaseGalleryThumbSize": { + "title": "Größe der Galeriebilder verringern", + "desc": "Verringert die Größe der Galerie-Miniaturansichten" + }, + "selectBrush": { + "title": "Pinsel auswählen", + "desc": "Wählt den Leinwandpinsel aus" + }, + "selectEraser": { + "title": "Radiergummi auswählen", + "desc": "Wählt den Radiergummi für die Leinwand aus" + }, + "decreaseBrushSize": { + "title": "Pinselgröße verkleinern", + "desc": "Verringert die Größe des Pinsels/Radiergummis" + }, + "increaseBrushSize": { + "title": "Pinselgröße erhöhen", + "desc": "Erhöht die Größe des Pinsels/Radiergummis" + }, + "decreaseBrushOpacity": { + "title": "Deckkraft des Pinsels vermindern", + "desc": "Verringert die Deckkraft des Pinsels" + }, + "increaseBrushOpacity": { + "title": "Deckkraft des Pinsels erhöhen", + "desc": "Erhöht die Deckkraft des Pinsels" + }, + "moveTool": { + "title": "Verschieben Werkzeug", + "desc": "Ermöglicht die Navigation auf der Leinwand" + }, + "fillBoundingBox": { + "title": "Begrenzungsrahmen füllen", + "desc": "Füllt den Begrenzungsrahmen mit Pinselfarbe" + }, + "eraseBoundingBox": { + "title": "Begrenzungsrahmen löschen", + "desc": "Löscht den Bereich des Begrenzungsrahmens" + }, + "colorPicker": { + "title": "Farbpipette", + "desc": "Farben aus dem Bild aufnehmen" + }, + "toggleSnap": { + "title": "Einrasten umschalten", + "desc": "Schaltet Einrasten am Raster ein und aus" + }, + "quickToggleMove": { + "title": "Schnell Verschiebemodus", + "desc": "Schaltet vorübergehend den Verschiebemodus um" + }, + "toggleLayer": { + "title": "Ebene umschalten", + "desc": "Schaltet die Auswahl von Maske/Basisebene um" + }, + "clearMask": { + "title": "Lösche Maske", + "desc": "Die gesamte Maske löschen" + }, + "hideMask": { + "title": "Maske ausblenden", + "desc": "Maske aus- und einblenden" + }, + "showHideBoundingBox": { + "title": "Begrenzungsrahmen ein-/ausblenden", + "desc": "Sichtbarkeit des Begrenzungsrahmens ein- und ausschalten" + }, + "mergeVisible": { + "title": "Sichtbares Zusammenführen", + "desc": "Alle sichtbaren Ebenen der Leinwand zusammenführen" + }, + "saveToGallery": { + "title": "In Galerie speichern", + "desc": "Aktuelle Leinwand in Galerie speichern" + }, + "copyToClipboard": { + "title": "In die Zwischenablage kopieren", + "desc": "Aktuelle Leinwand in die Zwischenablage kopieren" + }, + "downloadImage": { + "title": "Bild herunterladen", + "desc": "Aktuelle Leinwand herunterladen" + }, + "undoStroke": { + "title": "Pinselstrich rückgängig machen", + "desc": "Einen Pinselstrich rückgängig machen" + }, + "redoStroke": { + "title": "Pinselstrich wiederherstellen", + "desc": "Einen Pinselstrich wiederherstellen" + }, + "resetView": { + "title": "Ansicht zurücksetzen", + "desc": "Leinwandansicht zurücksetzen" + }, + "previousStagingImage": { + "title": "Vorheriges Staging-Bild", + "desc": "Bild des vorherigen Staging-Bereichs" + }, + "nextStagingImage": { + "title": "Nächstes Staging-Bild", + "desc": "Bild des nächsten Staging-Bereichs" + }, + "acceptStagingImage": { + "title": "Staging-Bild akzeptieren", + "desc": "Akzeptieren Sie das aktuelle Bild des Staging-Bereichs" + }, + "nodesHotkeys": "Knoten Tastenkürzel", + "addNodes": { + "title": "Knotenpunkt hinzufügen", + "desc": "Öffnet das Menü zum Hinzufügen von Knoten" + } + }, + "modelManager": { + "modelAdded": "Model hinzugefügt", + "modelUpdated": "Model aktualisiert", + "modelEntryDeleted": "Modelleintrag gelöscht", + "cannotUseSpaces": "Leerzeichen können nicht verwendet werden", + "addNew": "Neue hinzufügen", + "addNewModel": "Neues Model hinzufügen", + "addManually": "Manuell hinzufügen", + "nameValidationMsg": "Geben Sie einen Namen für Ihr Model ein", + "description": "Beschreibung", + "descriptionValidationMsg": "Fügen Sie eine Beschreibung für Ihr Model hinzu", + "config": "Konfiguration", + "configValidationMsg": "Pfad zur Konfigurationsdatei Ihres Models.", + "modelLocation": "Ort des Models", + "modelLocationValidationMsg": "Pfad zum Speicherort Ihres Models", + "vaeLocation": "VAE Ort", + "vaeLocationValidationMsg": "Pfad zum Speicherort Ihres VAE.", + "width": "Breite", + "widthValidationMsg": "Standardbreite Ihres Models.", + "height": "Höhe", + "heightValidationMsg": "Standardbhöhe Ihres Models.", + "addModel": "Model hinzufügen", + "updateModel": "Model aktualisieren", + "availableModels": "Verfügbare Models", + "search": "Suche", + "load": "Laden", + "active": "Aktiv", + "notLoaded": "nicht geladen", + "cached": "zwischengespeichert", + "checkpointFolder": "Checkpoint-Ordner", + "clearCheckpointFolder": "Checkpoint-Ordner löschen", + "findModels": "Models finden", + "scanAgain": "Erneut scannen", + "modelsFound": "Models gefunden", + "selectFolder": "Ordner auswählen", + "selected": "Ausgewählt", + "selectAll": "Alles auswählen", + "deselectAll": "Alle abwählen", + "showExisting": "Vorhandene anzeigen", + "addSelected": "Auswahl hinzufügen", + "modelExists": "Model existiert", + "selectAndAdd": "Unten aufgeführte Models auswählen und hinzufügen", + "noModelsFound": "Keine Models gefunden", + "delete": "Löschen", + "deleteModel": "Model löschen", + "deleteConfig": "Konfiguration löschen", + "deleteMsg1": "Möchten Sie diesen Model-Eintrag wirklich aus InvokeAI löschen?", + "deleteMsg2": "Dadurch WIRD das Modell von der Festplatte gelöscht WENN es im InvokeAI Root Ordner liegt. Wenn es in einem anderem Ordner liegt wird das Modell NICHT von der Festplatte gelöscht.", + "customConfig": "Benutzerdefinierte Konfiguration", + "invokeRoot": "InvokeAI Ordner", + "formMessageDiffusersVAELocationDesc": "Falls nicht angegeben, sucht InvokeAI nach der VAE-Datei innerhalb des oben angegebenen Modell Speicherortes.", + "checkpointModels": "Kontrollpunkte", + "convert": "Umwandeln", + "addCheckpointModel": "Kontrollpunkt / SafeTensors Modell hinzufügen", + "allModels": "Alle Modelle", + "alpha": "Alpha", + "addDifference": "Unterschied hinzufügen", + "convertToDiffusersHelpText2": "Bei diesem Vorgang wird Ihr Eintrag im Modell-Manager durch die Diffusor-Version desselben Modells ersetzt.", + "convertToDiffusersHelpText5": "Bitte stellen Sie sicher, dass Sie über genügend Speicherplatz verfügen. Die Modelle sind in der Regel zwischen 2 GB und 7 GB groß.", + "convertToDiffusersHelpText3": "Ihre Kontrollpunktdatei auf der Festplatte wird NICHT gelöscht oder in irgendeiner Weise verändert. Sie können Ihren Kontrollpunkt dem Modell-Manager wieder hinzufügen, wenn Sie dies wünschen.", + "convertToDiffusersHelpText4": "Dies ist ein einmaliger Vorgang. Er kann je nach den Spezifikationen Ihres Computers etwa 30-60 Sekunden dauern.", + "convertToDiffusersHelpText6": "Möchten Sie dieses Modell konvertieren?", + "custom": "Benutzerdefiniert", + "modelConverted": "Modell umgewandelt", + "inverseSigmoid": "Inverses Sigmoid", + "invokeAIFolder": "Invoke AI Ordner", + "formMessageDiffusersModelLocationDesc": "Bitte geben Sie mindestens einen an.", + "customSaveLocation": "Benutzerdefinierter Speicherort", + "formMessageDiffusersVAELocation": "VAE Speicherort", + "mergedModelCustomSaveLocation": "Benutzerdefinierter Pfad", + "modelMergeHeaderHelp2": "Nur Diffusers sind für die Zusammenführung verfügbar. Wenn Sie ein Kontrollpunktmodell zusammenführen möchten, konvertieren Sie es bitte zuerst in Diffusers.", + "manual": "Manuell", + "modelManager": "Modell Manager", + "modelMergeAlphaHelp": "Alpha steuert die Überblendungsstärke für die Modelle. Niedrigere Alphawerte führen zu einem geringeren Einfluss des zweiten Modells.", + "modelMergeHeaderHelp1": "Sie können bis zu drei verschiedene Modelle miteinander kombinieren, um eine Mischung zu erstellen, die Ihren Bedürfnissen entspricht.", + "ignoreMismatch": "Unstimmigkeiten zwischen ausgewählten Modellen ignorieren", + "model": "Modell", + "convertToDiffusersSaveLocation": "Speicherort", + "pathToCustomConfig": "Pfad zur benutzerdefinierten Konfiguration", + "v1": "v1", + "modelMergeInterpAddDifferenceHelp": "In diesem Modus wird zunächst Modell 3 von Modell 2 subtrahiert. Die resultierende Version wird mit Modell 1 mit dem oben eingestellten Alphasatz gemischt.", + "modelTwo": "Modell 2", + "modelOne": "Modell 1", + "v2_base": "v2 (512px)", + "scanForModels": "Nach Modellen suchen", + "name": "Name", + "safetensorModels": "SafeTensors", + "pickModelType": "Modell Typ auswählen", + "sameFolder": "Gleicher Ordner", + "modelThree": "Modell 3", + "v2_768": "v2 (768px)", + "none": "Nix", + "repoIDValidationMsg": "Online Repo Ihres Modells", + "vaeRepoIDValidationMsg": "Online Repo Ihrer VAE", + "importModels": "Importiere Modelle", + "merge": "Zusammenführen", + "addDiffuserModel": "Diffusers hinzufügen", + "advanced": "Erweitert", + "closeAdvanced": "Schließe Erweitert", + "convertingModelBegin": "Konvertiere Modell. Bitte warten.", + "customConfigFileLocation": "Benutzerdefinierte Konfiguration Datei Speicherort", + "baseModel": "Basis Modell", + "convertToDiffusers": "Konvertiere zu Diffusers", + "diffusersModels": "Diffusers", + "noCustomLocationProvided": "Kein benutzerdefinierter Standort angegeben", + "onnxModels": "Onnx", + "vaeRepoID": "VAE-Repo-ID", + "weightedSum": "Gewichtete Summe", + "syncModelsDesc": "Wenn Ihre Modelle nicht mit dem Backend synchronisiert sind, können Sie sie mit dieser Option aktualisieren. Dies ist im Allgemeinen praktisch, wenn Sie Ihre models.yaml-Datei manuell aktualisieren oder Modelle zum InvokeAI-Stammordner hinzufügen, nachdem die Anwendung gestartet wurde.", + "vae": "VAE", + "noModels": "Keine Modelle gefunden", + "statusConverting": "Konvertieren", + "sigmoid": "Sigmoid", + "predictionType": "Vorhersagetyp (für Stable Diffusion 2.x-Modelle und gelegentliche Stable Diffusion 1.x-Modelle)", + "selectModel": "Wählen Sie Modell aus", + "repo_id": "Repo-ID", + "modelSyncFailed": "Modellsynchronisierung fehlgeschlagen", + "quickAdd": "Schnell hinzufügen", + "simpleModelDesc": "Geben Sie einen Pfad zu einem lokalen Diffusers-Modell, einem lokalen Checkpoint-/Safetensors-Modell, einer HuggingFace-Repo-ID oder einer Checkpoint-/Diffusers-Modell-URL an.", + "modelDeleted": "Modell gelöscht", + "inpainting": "v1 Inpainting", + "modelUpdateFailed": "Modellaktualisierung fehlgeschlagen", + "useCustomConfig": "Benutzerdefinierte Konfiguration verwenden", + "settings": "Einstellungen", + "modelConversionFailed": "Modellkonvertierung fehlgeschlagen", + "syncModels": "Modelle synchronisieren", + "mergedModelSaveLocation": "Speicherort", + "modelType": "Modelltyp", + "modelsMerged": "Modelle zusammengeführt", + "modelsMergeFailed": "Modellzusammenführung fehlgeschlagen", + "convertToDiffusersHelpText1": "Dieses Modell wird in das 🧨 Diffusers-Format konvertiert.", + "modelsSynced": "Modelle synchronisiert", + "vaePrecision": "VAE-Präzision", + "mergeModels": "Modelle zusammenführen", + "interpolationType": "Interpolationstyp", + "oliveModels": "Olives", + "variant": "Variante", + "loraModels": "LoRAs", + "modelDeleteFailed": "Modell konnte nicht gelöscht werden", + "mergedModelName": "Zusammengeführter Modellname", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "formMessageDiffusersModelLocation": "Diffusers Modell Speicherort", + "noModelSelected": "Kein Modell ausgewählt" + }, + "parameters": { + "images": "Bilder", + "steps": "Schritte", + "cfgScale": "CFG-Skala", + "width": "Breite", + "height": "Höhe", + "randomizeSeed": "Zufälliger Seed", + "shuffle": "Mischen", + "noiseThreshold": "Rausch-Schwellenwert", + "perlinNoise": "Perlin-Rauschen", + "variations": "Variationen", + "variationAmount": "Höhe der Abweichung", + "seedWeights": "Seed-Gewichte", + "faceRestoration": "Gesichtsrestaurierung", + "restoreFaces": "Gesichter wiederherstellen", + "type": "Art", + "strength": "Stärke", + "upscaling": "Hochskalierung", + "upscale": "Hochskalieren (Shift + U)", + "upscaleImage": "Bild hochskalieren", + "scale": "Maßstab", + "otherOptions": "Andere Optionen", + "seamlessTiling": "Nahtlose Kacheln", + "hiresOptim": "High-Res-Optimierung", + "imageFit": "Ausgangsbild an Ausgabegröße anpassen", + "codeformerFidelity": "Glaubwürdigkeit", + "scaleBeforeProcessing": "Skalieren vor der Verarbeitung", + "scaledWidth": "Skaliert W", + "scaledHeight": "Skaliert H", + "infillMethod": "Infill-Methode", + "tileSize": "Kachelgröße", + "boundingBoxHeader": "Begrenzungsrahmen", + "seamCorrectionHeader": "Nahtkorrektur", + "infillScalingHeader": "Infill und Skalierung", + "img2imgStrength": "Bild-zu-Bild-Stärke", + "toggleLoopback": "Loopback umschalten", + "sendTo": "Senden an", + "sendToImg2Img": "Senden an Bild zu Bild", + "sendToUnifiedCanvas": "Senden an Unified Canvas", + "copyImageToLink": "Bild-Link kopieren", + "downloadImage": "Bild herunterladen", + "openInViewer": "Im Viewer öffnen", + "closeViewer": "Viewer schließen", + "usePrompt": "Prompt verwenden", + "useSeed": "Seed verwenden", + "useAll": "Alle verwenden", + "useInitImg": "Ausgangsbild verwenden", + "initialImage": "Ursprüngliches Bild", + "showOptionsPanel": "Optionsleiste zeigen", + "cancel": { + "setType": "Abbruchart festlegen", + "immediate": "Sofort abbrechen", + "schedule": "Abbrechen nach der aktuellen Iteration", + "isScheduled": "Abbrechen" + }, + "copyImage": "Bild kopieren", + "denoisingStrength": "Stärke der Entrauschung", + "symmetry": "Symmetrie", + "imageToImage": "Bild zu Bild", + "info": "Information", + "general": "Allgemein", + "hiresStrength": "High Res Stärke", + "hidePreview": "Verstecke Vorschau", + "showPreview": "Zeige Vorschau" + }, + "settings": { + "displayInProgress": "Bilder in Bearbeitung anzeigen", + "saveSteps": "Speichern der Bilder alle n Schritte", + "confirmOnDelete": "Bestätigen beim Löschen", + "displayHelpIcons": "Hilfesymbole anzeigen", + "enableImageDebugging": "Bild-Debugging aktivieren", + "resetWebUI": "Web-Oberfläche zurücksetzen", + "resetWebUIDesc1": "Das Zurücksetzen der Web-Oberfläche setzt nur den lokalen Cache des Browsers mit Ihren Bildern und gespeicherten Einstellungen zurück. Es werden keine Bilder von der Festplatte gelöscht.", + "resetWebUIDesc2": "Wenn die Bilder nicht in der Galerie angezeigt werden oder etwas anderes nicht funktioniert, versuchen Sie bitte, die Einstellungen zurückzusetzen, bevor Sie einen Fehler auf GitHub melden.", + "resetComplete": "Die Web-Oberfläche wurde zurückgesetzt.", + "models": "Modelle", + "useSlidersForAll": "Schieberegler für alle Optionen verwenden" + }, + "toast": { + "tempFoldersEmptied": "Temp-Ordner geleert", + "uploadFailed": "Hochladen fehlgeschlagen", + "uploadFailedUnableToLoadDesc": "Datei kann nicht geladen werden", + "downloadImageStarted": "Bild wird heruntergeladen", + "imageCopied": "Bild kopiert", + "imageLinkCopied": "Bildlink kopiert", + "imageNotLoaded": "Kein Bild geladen", + "imageNotLoadedDesc": "Konnte kein Bild finden", + "imageSavedToGallery": "Bild in die Galerie gespeichert", + "canvasMerged": "Leinwand zusammengeführt", + "sentToImageToImage": "Gesendet an Bild zu Bild", + "sentToUnifiedCanvas": "Gesendet an Unified Canvas", + "parametersSet": "Parameter festlegen", + "parametersNotSet": "Parameter nicht festgelegt", + "parametersNotSetDesc": "Keine Metadaten für dieses Bild gefunden.", + "parametersFailed": "Problem beim Laden der Parameter", + "parametersFailedDesc": "Ausgangsbild kann nicht geladen werden.", + "seedSet": "Seed festlegen", + "seedNotSet": "Saatgut nicht festgelegt", + "seedNotSetDesc": "Für dieses Bild wurde kein Seed gefunden.", + "promptSet": "Prompt festgelegt", + "promptNotSet": "Prompt nicht festgelegt", + "promptNotSetDesc": "Für dieses Bild wurde kein Prompt gefunden.", + "upscalingFailed": "Hochskalierung fehlgeschlagen", + "faceRestoreFailed": "Gesichtswiederherstellung fehlgeschlagen", + "metadataLoadFailed": "Metadaten konnten nicht geladen werden", + "initialImageSet": "Ausgangsbild festgelegt", + "initialImageNotSet": "Ausgangsbild nicht festgelegt", + "initialImageNotSetDesc": "Ausgangsbild konnte nicht geladen werden" + }, + "tooltip": { + "feature": { + "prompt": "Dies ist das Prompt-Feld. Ein Prompt enthält Generierungsobjekte und stilistische Begriffe. Sie können auch Gewichtungen (Token-Bedeutung) dem Prompt hinzufügen, aber CLI-Befehle und Parameter funktionieren nicht.", + "gallery": "Die Galerie zeigt erzeugte Bilder aus dem Ausgabeordner an, sobald sie erstellt wurden. Die Einstellungen werden in den Dateien gespeichert und können über das Kontextmenü aufgerufen werden.", + "other": "Mit diesen Optionen werden alternative Verarbeitungsmodi für InvokeAI aktiviert. 'Nahtlose Kachelung' erzeugt sich wiederholende Muster in der Ausgabe. 'Hohe Auflösungen' werden in zwei Schritten mit img2img erzeugt: Verwenden Sie diese Einstellung, wenn Sie ein größeres und kohärenteres Bild ohne Artefakte wünschen. Es dauert länger als das normale txt2img.", + "seed": "Der Seed-Wert beeinflusst das Ausgangsrauschen, aus dem das Bild erstellt wird. Sie können die bereits vorhandenen Seeds von früheren Bildern verwenden. 'Der Rauschschwellenwert' wird verwendet, um Artefakte bei hohen CFG-Werten abzuschwächen (versuchen Sie es im Bereich 0-10), und Perlin, um während der Erzeugung Perlin-Rauschen hinzuzufügen: Beide dienen dazu, Ihre Ergebnisse zu variieren.", + "variations": "Versuchen Sie eine Variation mit einem Wert zwischen 0,1 und 1,0, um das Ergebnis für ein bestimmtes Seed zu ändern. Interessante Variationen des Seeds liegen zwischen 0,1 und 0,3.", + "upscale": "Verwenden Sie ESRGAN, um das Bild unmittelbar nach der Erzeugung zu vergrößern.", + "faceCorrection": "Gesichtskorrektur mit GFPGAN oder Codeformer: Der Algorithmus erkennt Gesichter im Bild und korrigiert alle Fehler. Ein hoher Wert verändert das Bild stärker, was zu attraktiveren Gesichtern führt. Codeformer mit einer höheren Genauigkeit bewahrt das Originalbild auf Kosten einer stärkeren Gesichtskorrektur.", + "imageToImage": "Bild zu Bild lädt ein beliebiges Bild als Ausgangsbild, aus dem dann zusammen mit dem Prompt ein neues Bild erzeugt wird. Je höher der Wert ist, desto stärker wird das Ergebnisbild verändert. Werte von 0,0 bis 1,0 sind möglich, der empfohlene Bereich ist .25-.75", + "boundingBox": "Der Begrenzungsrahmen ist derselbe wie die Einstellungen für Breite und Höhe bei Text zu Bild oder Bild zu Bild. Es wird nur der Bereich innerhalb des Rahmens verarbeitet.", + "seamCorrection": "Steuert die Behandlung von sichtbaren Übergängen, die zwischen den erzeugten Bildern auf der Leinwand auftreten.", + "infillAndScaling": "Verwalten Sie Infill-Methoden (für maskierte oder gelöschte Bereiche der Leinwand) und Skalierung (nützlich für kleine Begrenzungsrahmengrößen)." + } + }, + "unifiedCanvas": { + "layer": "Ebene", + "base": "Basis", + "mask": "Maske", + "maskingOptions": "Maskierungsoptionen", + "enableMask": "Maske aktivieren", + "preserveMaskedArea": "Maskierten Bereich bewahren", + "clearMask": "Maske löschen", + "brush": "Pinsel", + "eraser": "Radierer", + "fillBoundingBox": "Begrenzungsrahmen füllen", + "eraseBoundingBox": "Begrenzungsrahmen löschen", + "colorPicker": "Farbpipette", + "brushOptions": "Pinseloptionen", + "brushSize": "Größe", + "move": "Bewegen", + "resetView": "Ansicht zurücksetzen", + "mergeVisible": "Sichtbare Zusammenführen", + "saveToGallery": "In Galerie speichern", + "copyToClipboard": "In Zwischenablage kopieren", + "downloadAsImage": "Als Bild herunterladen", + "undo": "Rückgängig", + "redo": "Wiederherstellen", + "clearCanvas": "Leinwand löschen", + "canvasSettings": "Leinwand-Einstellungen", + "showIntermediates": "Zwischenprodukte anzeigen", + "showGrid": "Gitternetz anzeigen", + "snapToGrid": "Am Gitternetz einrasten", + "darkenOutsideSelection": "Außerhalb der Auswahl verdunkeln", + "autoSaveToGallery": "Automatisch in Galerie speichern", + "saveBoxRegionOnly": "Nur Auswahlbox speichern", + "limitStrokesToBox": "Striche auf Box beschränken", + "showCanvasDebugInfo": "Zusätzliche Informationen zur Leinwand anzeigen", + "clearCanvasHistory": "Leinwand-Verlauf löschen", + "clearHistory": "Verlauf löschen", + "clearCanvasHistoryMessage": "Wenn Sie den Verlauf der Leinwand löschen, bleibt die aktuelle Leinwand intakt, aber der Verlauf der Rückgängig- und Wiederherstellung wird unwiderruflich gelöscht.", + "clearCanvasHistoryConfirm": "Sind Sie sicher, dass Sie den Verlauf der Leinwand löschen möchten?", + "emptyTempImageFolder": "Temp-Image Ordner leeren", + "emptyFolder": "Leerer Ordner", + "emptyTempImagesFolderMessage": "Wenn Sie den Ordner für temporäre Bilder leeren, wird auch der Unified Canvas vollständig zurückgesetzt. Dies umfasst den gesamten Verlauf der Rückgängig-/Wiederherstellungsvorgänge, die Bilder im Bereitstellungsbereich und die Leinwand-Basisebene.", + "emptyTempImagesFolderConfirm": "Sind Sie sicher, dass Sie den temporären Ordner leeren wollen?", + "activeLayer": "Aktive Ebene", + "canvasScale": "Leinwand Maßstab", + "boundingBox": "Begrenzungsrahmen", + "scaledBoundingBox": "Skalierter Begrenzungsrahmen", + "boundingBoxPosition": "Begrenzungsrahmen Position", + "canvasDimensions": "Maße der Leinwand", + "canvasPosition": "Leinwandposition", + "cursorPosition": "Position des Cursors", + "previous": "Vorherige", + "next": "Nächste", + "accept": "Akzeptieren", + "showHide": "Einblenden/Ausblenden", + "discardAll": "Alles verwerfen", + "betaClear": "Löschen", + "betaDarkenOutside": "Außen abdunkeln", + "betaLimitToBox": "Begrenzung auf das Feld", + "betaPreserveMasked": "Maskiertes bewahren", + "antialiasing": "Kantenglättung", + "showResultsOn": "Zeige Ergebnisse (An)", + "showResultsOff": "Zeige Ergebnisse (Aus)" + }, + "accessibility": { + "modelSelect": "Model Auswahl", + "uploadImage": "Bild hochladen", + "previousImage": "Voriges Bild", + "useThisParameter": "Benutze diesen Parameter", + "copyMetadataJson": "Kopiere Metadaten JSON", + "zoomIn": "Vergrößern", + "rotateClockwise": "Im Uhrzeigersinn drehen", + "flipHorizontally": "Horizontal drehen", + "flipVertically": "Vertikal drehen", + "modifyConfig": "Optionen einstellen", + "toggleAutoscroll": "Auroscroll ein/ausschalten", + "toggleLogViewer": "Log Betrachter ein/ausschalten", + "showOptionsPanel": "Zeige Optionen", + "reset": "Zurücksetzten", + "nextImage": "Nächstes Bild", + "zoomOut": "Verkleinern", + "rotateCounterClockwise": "Gegen den Uhrzeigersinn verdrehen", + "showGalleryPanel": "Galeriefenster anzeigen", + "exitViewer": "Betrachten beenden", + "menu": "Menü", + "loadMore": "Mehr laden", + "invokeProgressBar": "Invoke Fortschrittsanzeige", + "mode": "Modus", + "resetUI": "$t(accessibility.reset) von UI", + "createIssue": "Ticket erstellen" + }, + "boards": { + "autoAddBoard": "Automatisches Hinzufügen zum Ordner", + "topMessage": "Dieser Ordner enthält Bilder die in den folgenden Funktionen verwendet werden:", + "move": "Bewegen", + "menuItemAutoAdd": "Automatisches Hinzufügen zu diesem Ordner", + "myBoard": "Meine Ordner", + "searchBoard": "Ordner durchsuchen...", + "noMatching": "Keine passenden Ordner", + "selectBoard": "Ordner aussuchen", + "cancel": "Abbrechen", + "addBoard": "Ordner hinzufügen", + "uncategorized": "Nicht kategorisiert", + "downloadBoard": "Ordner runterladen", + "changeBoard": "Ordner wechseln", + "loading": "Laden...", + "clearSearch": "Suche leeren", + "bottomMessage": "Durch das Löschen dieses Ordners und seiner Bilder werden alle Funktionen zurückgesetzt, die sie derzeit verwenden.", + "deleteBoardOnly": "Nur Ordner löschen", + "deleteBoard": "Löschen Ordner", + "deleteBoardAndImages": "Löschen Ordner und Bilder", + "deletedBoardsCannotbeRestored": "Gelöschte Ordner könnte nicht wiederhergestellt werden", + "movingImagesToBoard_one": "Verschiebe {{count}} Bild zu Ordner", + "movingImagesToBoard_other": "Verschiebe {{count}} Bilder in Ordner" + }, + "controlnet": { + "showAdvanced": "Zeige Erweitert", + "contentShuffleDescription": "Mischt den Inhalt von einem Bild", + "addT2IAdapter": "$t(common.t2iAdapter) hinzufügen", + "importImageFromCanvas": "Importieren Bild von Zeichenfläche", + "lineartDescription": "Konvertiere Bild zu Lineart", + "importMaskFromCanvas": "Importiere Maske von Zeichenfläche", + "hed": "HED", + "hideAdvanced": "Verstecke Erweitert", + "contentShuffle": "Inhalt mischen", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) ist aktiv, $t(common.t2iAdapter) ist deaktiviert", + "ipAdapterModel": "Adapter Modell", + "beginEndStepPercent": "Start / Ende Step Prozent", + "duplicate": "Kopieren", + "f": "F", + "h": "H", + "depthMidasDescription": "Tiefenmap erstellen mit Midas", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ist aktiv, $t(common.controlNet) ist deaktiviert", + "weight": "Breite", + "selectModel": "Wähle ein Modell", + "depthMidas": "Tiefe (Midas)", + "w": "W", + "addControlNet": "$t(common.controlNet) hinzufügen", + "none": "Kein", + "incompatibleBaseModel": "Inkompatibles Basismodell:", + "enableControlnet": "Aktiviere ControlNet", + "detectResolution": "Auflösung erkennen", + "controlNetT2IMutexDesc": "$t(common.controlNet) und $t(common.t2iAdapter) zur gleichen Zeit wird nicht unterstützt.", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "fill": "Füllen", + "addIPAdapter": "$t(common.ipAdapter) hinzufügen", + "colorMapDescription": "Erstelle eine Farbkarte von diesem Bild", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "imageResolution": "Bild Auflösung", + "depthZoe": "Tiefe (Zoe)", + "colorMap": "Farbe", + "lowThreshold": "Niedrige Schwelle", + "highThreshold": "Hohe Schwelle", + "toggleControlNet": "Schalten ControlNet um", + "delete": "Löschen", + "controlAdapter_one": "Control Adapter", + "controlAdapter_other": "Control Adapters", + "colorMapTileSize": "Tile Größe", + "depthZoeDescription": "Tiefenmap erstellen mit Zoe", + "setControlImageDimensions": "Setze Control Bild Auflösung auf Breite/Höhe", + "handAndFace": "Hand und Gesicht", + "enableIPAdapter": "Aktiviere IP Adapter", + "resize": "Größe ändern", + "resetControlImage": "Zurücksetzen vom Referenz Bild", + "balanced": "Ausgewogen", + "prompt": "Prompt", + "resizeMode": "Größenänderungsmodus", + "processor": "Prozessor", + "saveControlImage": "Speichere Referenz Bild", + "safe": "Speichern", + "ipAdapterImageFallback": "Kein IP Adapter Bild ausgewählt", + "resetIPAdapterImage": "Zurücksetzen vom IP Adapter Bild", + "pidi": "PIDI", + "normalBae": "Normales BAE", + "mlsdDescription": "Minimalistischer Liniensegmentdetektor", + "openPoseDescription": "Schätzung der menschlichen Pose mit Openpose", + "control": "Kontrolle", + "coarse": "Coarse", + "crop": "Zuschneiden", + "pidiDescription": "PIDI-Bildverarbeitung", + "mediapipeFace": "Mediapipe Gesichter", + "mlsd": "M-LSD", + "controlMode": "Steuermodus", + "cannyDescription": "Canny Ecken Erkennung", + "lineart": "Lineart", + "lineartAnimeDescription": "Lineart-Verarbeitung im Anime-Stil", + "minConfidence": "Minimales Vertrauen", + "megaControl": "Mega-Kontrolle", + "autoConfigure": "Prozessor automatisch konfigurieren", + "normalBaeDescription": "Normale BAE-Verarbeitung", + "noneDescription": "Es wurde keine Verarbeitung angewendet", + "openPose": "Openpose", + "lineartAnime": "Lineart Anime", + "mediapipeFaceDescription": "Gesichtserkennung mit Mediapipe", + "canny": "Canny", + "hedDescription": "Ganzheitlich verschachtelte Kantenerkennung", + "scribble": "Scribble", + "maxFaces": "Maximal Anzahl Gesichter" + }, + "queue": { + "status": "Status", + "cancelTooltip": "Aktuellen Aufgabe abbrechen", + "queueEmpty": "Warteschlange leer", + "in_progress": "In Arbeit", + "queueFront": "An den Anfang der Warteschlange tun", + "completed": "Fertig", + "queueBack": "In die Warteschlange", + "clearFailed": "Probleme beim leeren der Warteschlange", + "clearSucceeded": "Warteschlange geleert", + "pause": "Pause", + "cancelSucceeded": "Auftrag abgebrochen", + "queue": "Warteschlange", + "batch": "Stapel", + "pending": "Ausstehend", + "clear": "Leeren", + "prune": "Leeren", + "total": "Gesamt", + "canceled": "Abgebrochen", + "clearTooltip": "Abbrechen und alle Aufträge leeren", + "current": "Aktuell", + "failed": "Fehler", + "cancelItem": "Abbruch Auftrag", + "next": "Nächste", + "cancel": "Abbruch", + "session": "Sitzung", + "queueTotal": "{{total}} Gesamt", + "resume": "Wieder aufnehmen", + "item": "Auftrag", + "notReady": "Warteschlange noch nicht bereit", + "batchValues": "Stapel Werte", + "queueCountPrediction": "{{predicted}} zur Warteschlange hinzufügen", + "queuedCount": "{{pending}} wartenden Elemente", + "clearQueueAlertDialog": "Die Warteschlange leeren, stoppt den aktuellen Prozess und leert die Warteschlange komplett.", + "completedIn": "Fertig in", + "cancelBatchSucceeded": "Stapel abgebrochen", + "cancelBatch": "Stapel stoppen", + "enqueueing": "Stapel in der Warteschlange", + "queueMaxExceeded": "Maximum von {{max_queue_size}} Elementen erreicht, würde {{skip}} Elemente überspringen", + "cancelBatchFailed": "Problem beim Abbruch vom Stapel", + "clearQueueAlertDialog2": "bist du sicher die Warteschlange zu leeren?", + "pruneSucceeded": "{{item_count}} abgeschlossene Elemente aus der Warteschlange entfernt", + "pauseSucceeded": "Prozessor angehalten", + "cancelFailed": "Problem beim Stornieren des Auftrags", + "pauseFailed": "Problem beim Anhalten des Prozessors", + "front": "Vorne", + "pruneTooltip": "Bereinigen Sie {{item_count}} abgeschlossene Aufträge", + "resumeFailed": "Problem beim wieder aufnehmen von Prozessor", + "pruneFailed": "Problem beim leeren der Warteschlange", + "pauseTooltip": "Pause von Prozessor", + "back": "Hinten", + "resumeSucceeded": "Prozessor wieder aufgenommen", + "resumeTooltip": "Prozessor wieder aufnehmen", + "time": "Zeit" + }, + "metadata": { + "negativePrompt": "Negativ Beschreibung", + "metadata": "Meta-Data", + "strength": "Bild zu Bild stärke", + "imageDetails": "Bild Details", + "model": "Modell", + "noImageDetails": "Keine Bild Details gefunden", + "cfgScale": "CFG-Skala", + "fit": "Bild zu Bild passen", + "height": "Höhe", + "noMetaData": "Keine Meta-Data gefunden", + "width": "Breite", + "createdBy": "Erstellt von", + "steps": "Schritte", + "seamless": "Nahtlos", + "positivePrompt": "Positiver Prompt", + "generationMode": "Generierungsmodus", + "Threshold": "Noise Schwelle", + "seed": "Samen", + "perlin": "Perlin Noise", + "hiresFix": "Optimierung für hohe Auflösungen", + "initImage": "Erstes Bild", + "variations": "Samengewichtspaare", + "vae": "VAE", + "workflow": "Arbeitsablauf", + "scheduler": "Scheduler", + "noRecallParameters": "Es wurden keine Parameter zum Abrufen gefunden", + "recallParameters": "Recall Parameters" + }, + "popovers": { + "noiseUseCPU": { + "heading": "Nutze Prozessor rauschen" + }, + "paramModel": { + "heading": "Modell" + }, + "paramIterations": { + "heading": "Iterationen" + }, + "paramCFGScale": { + "heading": "CFG-Skala" + }, + "paramSteps": { + "heading": "Schritte" + }, + "lora": { + "heading": "LoRA Gewichte" + }, + "infillMethod": { + "heading": "Füllmethode" + }, + "paramVAE": { + "heading": "VAE" + } + }, + "ui": { + "lockRatio": "Verhältnis sperren", + "hideProgressImages": "Verstecke Prozess Bild", + "showProgressImages": "Zeige Prozess Bild" + }, + "invocationCache": { + "disable": "Deaktivieren", + "misses": "Cache Nötig", + "hits": "Cache Treffer", + "enable": "Aktivieren", + "clear": "Leeren", + "maxCacheSize": "Maximale Cache Größe", + "cacheSize": "Cache Größe" + }, + "embedding": { + "noMatchingEmbedding": "Keine passenden Embeddings", + "addEmbedding": "Embedding hinzufügen", + "incompatibleModel": "Inkompatibles Basismodell:", + "noEmbeddingsLoaded": "Kein Embedding geladen" + }, + "nodes": { + "booleanPolymorphicDescription": "Eine Sammlung boolescher Werte.", + "colorFieldDescription": "Eine RGBA-Farbe.", + "conditioningCollection": "Konditionierungssammlung", + "addNode": "Knoten hinzufügen", + "conditioningCollectionDescription": "Konditionierung kann zwischen Knoten weitergegeben werden.", + "colorPolymorphic": "Farbpolymorph", + "colorCodeEdgesHelp": "Farbkodieren Sie Kanten entsprechend ihren verbundenen Feldern", + "animatedEdges": "Animierte Kanten", + "booleanCollectionDescription": "Eine Sammlung boolescher Werte.", + "colorField": "Farbe", + "collectionItem": "Objekt in Sammlung", + "animatedEdgesHelp": "Animieren Sie ausgewählte Kanten und Kanten, die mit ausgewählten Knoten verbunden sind", + "cannotDuplicateConnection": "Es können keine doppelten Verbindungen erstellt werden", + "booleanPolymorphic": "Boolesche Polymorphie", + "colorPolymorphicDescription": "Eine Sammlung von Farben.", + "clipFieldDescription": "Tokenizer- und text_encoder-Untermodelle.", + "clipField": "Clip", + "colorCollection": "Eine Sammlung von Farben.", + "boolean": "Boolesche Werte", + "currentImage": "Aktuelles Bild", + "booleanDescription": "Boolesche Werte sind wahr oder falsch.", + "collection": "Sammlung", + "cannotConnectInputToInput": "Eingang kann nicht mit Eingang verbunden werden", + "conditioningField": "Konditionierung", + "cannotConnectOutputToOutput": "Ausgang kann nicht mit Ausgang verbunden werden", + "booleanCollection": "Boolesche Werte Sammlung", + "cannotConnectToSelf": "Es kann keine Verbindung zu sich selbst hergestellt werden", + "colorCodeEdges": "Farbkodierte Kanten", + "addNodeToolTip": "Knoten hinzufügen (Umschalt+A, Leertaste)", + "boardField": "Ordner", + "boardFieldDescription": "Ein Galerie Ordner" + }, + "hrf": { + "enableHrf": "Aktivieren Sie die Korrektur für hohe Auflösungen", + "upscaleMethod": "Vergrößerungsmethoden", + "enableHrfTooltip": "Generieren Sie mit einer niedrigeren Anfangsauflösung, skalieren Sie auf die Basisauflösung hoch und führen Sie dann Image-to-Image aus.", + "metadata": { + "strength": "Hochauflösender Fix Stärke", + "enabled": "Hochauflösender Fix aktiviert", + "method": "Hochauflösender Fix Methode" + }, + "hrf": "Hochauflösender Fix", + "hrfStrength": "Hochauflösende Fix Stärke", + "strengthTooltip": "Niedrigere Werte führen zu weniger Details, wodurch potenzielle Artefakte reduziert werden können." + }, + "models": { + "noMatchingModels": "Keine passenden Modelle", + "loading": "lade", + "noMatchingLoRAs": "Keine passenden LoRAs", + "noLoRAsAvailable": "Keine LoRAs verfügbar", + "noModelsAvailable": "Keine Modelle verfügbar", + "selectModel": "Wählen ein Modell aus", + "noRefinerModelsInstalled": "Keine SDXL Refiner-Modelle installiert", + "noLoRAsInstalled": "Keine LoRAs installiert", + "selectLoRA": "Wählen ein LoRA aus", + "esrganModel": "ESRGAN Modell", + "addLora": "LoRA hinzufügen" + } +} diff --git a/invokeai/frontend/web/dist/locales/en.json b/invokeai/frontend/web/dist/locales/en.json new file mode 100644 index 0000000000..f5f3f434f5 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/en.json @@ -0,0 +1,1662 @@ +{ + "accessibility": { + "copyMetadataJson": "Copy metadata JSON", + "createIssue": "Create Issue", + "exitViewer": "Exit Viewer", + "flipHorizontally": "Flip Horizontally", + "flipVertically": "Flip Vertically", + "invokeProgressBar": "Invoke progress bar", + "menu": "Menu", + "mode": "Mode", + "modelSelect": "Model Select", + "modifyConfig": "Modify Config", + "nextImage": "Next Image", + "previousImage": "Previous Image", + "reset": "Reset", + "resetUI": "$t(accessibility.reset) UI", + "rotateClockwise": "Rotate Clockwise", + "rotateCounterClockwise": "Rotate Counter-Clockwise", + "showGalleryPanel": "Show Gallery Panel", + "showOptionsPanel": "Show Side Panel", + "toggleAutoscroll": "Toggle autoscroll", + "toggleLogViewer": "Toggle Log Viewer", + "uploadImage": "Upload Image", + "useThisParameter": "Use this parameter", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "loadMore": "Load More" + }, + "boards": { + "addBoard": "Add Board", + "autoAddBoard": "Auto-Add Board", + "bottomMessage": "Deleting this board and its images will reset any features currently using them.", + "cancel": "Cancel", + "changeBoard": "Change Board", + "clearSearch": "Clear Search", + "deleteBoard": "Delete Board", + "deleteBoardAndImages": "Delete Board and Images", + "deleteBoardOnly": "Delete Board Only", + "deletedBoardsCannotbeRestored": "Deleted boards cannot be restored", + "loading": "Loading...", + "menuItemAutoAdd": "Auto-add to this Board", + "move": "Move", + "movingImagesToBoard_one": "Moving {{count}} image to board:", + "movingImagesToBoard_other": "Moving {{count}} images to board:", + "myBoard": "My Board", + "noMatching": "No matching Boards", + "searchBoard": "Search Boards...", + "selectBoard": "Select a Board", + "topMessage": "This board contains images used in the following features:", + "uncategorized": "Uncategorized", + "downloadBoard": "Download Board" + }, + "common": { + "accept": "Accept", + "advanced": "Advanced", + "ai": "ai", + "areYouSure": "Are you sure?", + "auto": "Auto", + "back": "Back", + "batch": "Batch Manager", + "cancel": "Cancel", + "copyError": "$t(gallery.copy) Error", + "close": "Close", + "on": "On", + "checkpoint": "Checkpoint", + "communityLabel": "Community", + "controlNet": "ControlNet", + "controlAdapter": "Control Adapter", + "data": "Data", + "delete": "Delete", + "details": "Details", + "direction": "Direction", + "ipAdapter": "IP Adapter", + "t2iAdapter": "T2I Adapter", + "darkMode": "Dark Mode", + "discordLabel": "Discord", + "dontAskMeAgain": "Don't ask me again", + "error": "Error", + "file": "File", + "folder": "Folder", + "format": "format", + "generate": "Generate", + "githubLabel": "Github", + "hotkeysLabel": "Hotkeys", + "imagePrompt": "Image Prompt", + "imageFailedToLoad": "Unable to Load Image", + "img2img": "Image To Image", + "inpaint": "inpaint", + "input": "Input", + "installed": "Installed", + "langArabic": "العربية", + "langBrPortuguese": "Português do Brasil", + "langDutch": "Nederlands", + "langEnglish": "English", + "langFrench": "Français", + "langGerman": "German", + "langHebrew": "Hebrew", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langKorean": "한국어", + "langPolish": "Polski", + "langPortuguese": "Português", + "langRussian": "Русский", + "langSimplifiedChinese": "简体中文", + "langSpanish": "Español", + "languagePickerLabel": "Language", + "langUkranian": "Украї́нська", + "lightMode": "Light Mode", + "linear": "Linear", + "load": "Load", + "loading": "Loading", + "loadingInvokeAI": "Loading Invoke AI", + "learnMore": "Learn More", + "modelManager": "Model Manager", + "nodeEditor": "Node Editor", + "nodes": "Workflow Editor", + "nodesDesc": "A node based system for the generation of images is under development currently. Stay tuned for updates about this amazing feature.", + "notInstalled": "Not $t(common.installed)", + "openInNewTab": "Open in New Tab", + "orderBy": "Order By", + "outpaint": "outpaint", + "outputs": "Outputs", + "postProcessDesc1": "Invoke AI offers a wide variety of post processing features. Image Upscaling and Face Restoration are already available in the WebUI. You can access them from the Advanced Options menu of the Text To Image and Image To Image tabs. You can also process images directly, using the image action buttons above the current image display or in the viewer.", + "postProcessDesc2": "A dedicated UI will be released soon to facilitate more advanced post processing workflows.", + "postProcessDesc3": "The Invoke AI Command Line Interface offers various other features including Embiggen.", + "postprocessing": "Post Processing", + "postProcessing": "Post Processing", + "random": "Random", + "reportBugLabel": "Report Bug", + "safetensors": "Safetensors", + "save": "Save", + "saveAs": "Save As", + "settingsLabel": "Settings", + "simple": "Simple", + "somethingWentWrong": "Something went wrong", + "statusConnected": "Connected", + "statusConvertingModel": "Converting Model", + "statusDisconnected": "Disconnected", + "statusError": "Error", + "statusGenerating": "Generating", + "statusGeneratingImageToImage": "Generating Image To Image", + "statusGeneratingInpainting": "Generating Inpainting", + "statusGeneratingOutpainting": "Generating Outpainting", + "statusGeneratingTextToImage": "Generating Text To Image", + "statusGenerationComplete": "Generation Complete", + "statusIterationComplete": "Iteration Complete", + "statusLoadingModel": "Loading Model", + "statusMergedModels": "Models Merged", + "statusMergingModels": "Merging Models", + "statusModelChanged": "Model Changed", + "statusModelConverted": "Model Converted", + "statusPreparing": "Preparing", + "statusProcessing": "Processing", + "statusProcessingCanceled": "Processing Canceled", + "statusProcessingComplete": "Processing Complete", + "statusRestoringFaces": "Restoring Faces", + "statusRestoringFacesCodeFormer": "Restoring Faces (CodeFormer)", + "statusRestoringFacesGFPGAN": "Restoring Faces (GFPGAN)", + "statusSavingImage": "Saving Image", + "statusUpscaling": "Upscaling", + "statusUpscalingESRGAN": "Upscaling (ESRGAN)", + "template": "Template", + "training": "Training", + "trainingDesc1": "A dedicated workflow for training your own embeddings and checkpoints using Textual Inversion and Dreambooth from the web interface.", + "trainingDesc2": "InvokeAI already supports training custom embeddourings using Textual Inversion using the main script.", + "txt2img": "Text To Image", + "unifiedCanvas": "Unified Canvas", + "unknown": "Unknown", + "upload": "Upload", + "updated": "Updated", + "created": "Created", + "prevPage": "Previous Page", + "nextPage": "Next Page", + "unknownError": "Unknown Error", + "unsaved": "Unsaved" + }, + "controlnet": { + "controlAdapter_one": "Control Adapter", + "controlAdapter_other": "Control Adapters", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "addControlNet": "Add $t(common.controlNet)", + "addIPAdapter": "Add $t(common.ipAdapter)", + "addT2IAdapter": "Add $t(common.t2iAdapter)", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) enabled, $t(common.t2iAdapter)s disabled", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) enabled, $t(common.controlNet)s disabled", + "controlNetT2IMutexDesc": "$t(common.controlNet) and $t(common.t2iAdapter) at same time is currently unsupported.", + "amult": "a_mult", + "autoConfigure": "Auto configure processor", + "balanced": "Balanced", + "beginEndStepPercent": "Begin / End Step Percentage", + "bgth": "bg_th", + "canny": "Canny", + "cannyDescription": "Canny edge detection", + "colorMap": "Color", + "colorMapDescription": "Generates a color map from the image", + "coarse": "Coarse", + "contentShuffle": "Content Shuffle", + "contentShuffleDescription": "Shuffles the content in an image", + "control": "Control", + "controlMode": "Control Mode", + "crop": "Crop", + "delete": "Delete", + "depthMidas": "Depth (Midas)", + "depthMidasDescription": "Depth map generation using Midas", + "depthZoe": "Depth (Zoe)", + "depthZoeDescription": "Depth map generation using Zoe", + "detectResolution": "Detect Resolution", + "duplicate": "Duplicate", + "enableControlnet": "Enable ControlNet", + "f": "F", + "fill": "Fill", + "h": "H", + "handAndFace": "Hand and Face", + "hed": "HED", + "hedDescription": "Holistically-Nested Edge Detection", + "hideAdvanced": "Hide Advanced", + "highThreshold": "High Threshold", + "imageResolution": "Image Resolution", + "colorMapTileSize": "Tile Size", + "importImageFromCanvas": "Import Image From Canvas", + "importMaskFromCanvas": "Import Mask From Canvas", + "incompatibleBaseModel": "Incompatible base model:", + "lineart": "Lineart", + "lineartAnime": "Lineart Anime", + "lineartAnimeDescription": "Anime-style lineart processing", + "lineartDescription": "Converts image to lineart", + "lowThreshold": "Low Threshold", + "maxFaces": "Max Faces", + "mediapipeFace": "Mediapipe Face", + "mediapipeFaceDescription": "Face detection using Mediapipe", + "megaControl": "Mega Control", + "minConfidence": "Min Confidence", + "mlsd": "M-LSD", + "mlsdDescription": "Minimalist Line Segment Detector", + "none": "None", + "noneDescription": "No processing applied", + "normalBae": "Normal BAE", + "normalBaeDescription": "Normal BAE processing", + "openPose": "Openpose", + "openPoseDescription": "Human pose estimation using Openpose", + "pidi": "PIDI", + "pidiDescription": "PIDI image processing", + "processor": "Processor", + "prompt": "Prompt", + "resetControlImage": "Reset Control Image", + "resize": "Resize", + "resizeMode": "Resize Mode", + "safe": "Safe", + "saveControlImage": "Save Control Image", + "scribble": "scribble", + "selectModel": "Select a model", + "setControlImageDimensions": "Set Control Image Dimensions To W/H", + "showAdvanced": "Show Advanced", + "toggleControlNet": "Toggle this ControlNet", + "w": "W", + "weight": "Weight", + "enableIPAdapter": "Enable IP Adapter", + "ipAdapterModel": "Adapter Model", + "resetIPAdapterImage": "Reset IP Adapter Image", + "ipAdapterImageFallback": "No IP Adapter Image Selected" + }, + "hrf": { + "hrf": "High Resolution Fix", + "enableHrf": "Enable High Resolution Fix", + "enableHrfTooltip": "Generate with a lower initial resolution, upscale to the base resolution, then run Image-to-Image.", + "upscaleMethod": "Upscale Method", + "hrfStrength": "High Resolution Fix Strength", + "strengthTooltip": "Lower values result in fewer details, which may reduce potential artifacts.", + "metadata": { + "enabled": "High Resolution Fix Enabled", + "strength": "High Resolution Fix Strength", + "method": "High Resolution Fix Method" + } + }, + "embedding": { + "addEmbedding": "Add Embedding", + "incompatibleModel": "Incompatible base model:", + "noEmbeddingsLoaded": "No Embeddings Loaded", + "noMatchingEmbedding": "No matching Embeddings" + }, + "queue": { + "queue": "Queue", + "queueFront": "Add to Front of Queue", + "queueBack": "Add to Queue", + "queueCountPrediction": "Add {{predicted}} to Queue", + "queueMaxExceeded": "Max of {{max_queue_size}} exceeded, would skip {{skip}}", + "queuedCount": "{{pending}} Pending", + "queueTotal": "{{total}} Total", + "queueEmpty": "Queue Empty", + "enqueueing": "Queueing Batch", + "resume": "Resume", + "resumeTooltip": "Resume Processor", + "resumeSucceeded": "Processor Resumed", + "resumeFailed": "Problem Resuming Processor", + "pause": "Pause", + "pauseTooltip": "Pause Processor", + "pauseSucceeded": "Processor Paused", + "pauseFailed": "Problem Pausing Processor", + "cancel": "Cancel", + "cancelTooltip": "Cancel Current Item", + "cancelSucceeded": "Item Canceled", + "cancelFailed": "Problem Canceling Item", + "prune": "Prune", + "pruneTooltip": "Prune {{item_count}} Completed Items", + "pruneSucceeded": "Pruned {{item_count}} Completed Items from Queue", + "pruneFailed": "Problem Pruning Queue", + "clear": "Clear", + "clearTooltip": "Cancel and Clear All Items", + "clearSucceeded": "Queue Cleared", + "clearFailed": "Problem Clearing Queue", + "cancelBatch": "Cancel Batch", + "cancelItem": "Cancel Item", + "cancelBatchSucceeded": "Batch Canceled", + "cancelBatchFailed": "Problem Canceling Batch", + "clearQueueAlertDialog": "Clearing the queue immediately cancels any processing items and clears the queue entirely.", + "clearQueueAlertDialog2": "Are you sure you want to clear the queue?", + "current": "Current", + "next": "Next", + "status": "Status", + "total": "Total", + "time": "Time", + "pending": "Pending", + "in_progress": "In Progress", + "completed": "Completed", + "failed": "Failed", + "canceled": "Canceled", + "completedIn": "Completed in", + "batch": "Batch", + "batchFieldValues": "Batch Field Values", + "item": "Item", + "session": "Session", + "batchValues": "Batch Values", + "notReady": "Unable to Queue", + "batchQueued": "Batch Queued", + "batchQueuedDesc_one": "Added {{count}} sessions to {{direction}} of queue", + "batchQueuedDesc_other": "Added {{count}} sessions to {{direction}} of queue", + "front": "front", + "back": "back", + "batchFailedToQueue": "Failed to Queue Batch", + "graphQueued": "Graph queued", + "graphFailedToQueue": "Failed to queue graph" + }, + "invocationCache": { + "invocationCache": "Invocation Cache", + "cacheSize": "Cache Size", + "maxCacheSize": "Max Cache Size", + "hits": "Cache Hits", + "misses": "Cache Misses", + "clear": "Clear", + "clearSucceeded": "Invocation Cache Cleared", + "clearFailed": "Problem Clearing Invocation Cache", + "enable": "Enable", + "enableSucceeded": "Invocation Cache Enabled", + "enableFailed": "Problem Enabling Invocation Cache", + "disable": "Disable", + "disableSucceeded": "Invocation Cache Disabled", + "disableFailed": "Problem Disabling Invocation Cache", + "useCache": "Use Cache" + }, + "gallery": { + "allImagesLoaded": "All Images Loaded", + "assets": "Assets", + "autoAssignBoardOnClick": "Auto-Assign Board on Click", + "autoSwitchNewImages": "Auto-Switch to New Images", + "copy": "Copy", + "currentlyInUse": "This image is currently in use in the following features:", + "drop": "Drop", + "dropOrUpload": "$t(gallery.drop) or Upload", + "dropToUpload": "$t(gallery.drop) to Upload", + "deleteImage": "Delete Image", + "deleteImageBin": "Deleted images will be sent to your operating system's Bin.", + "deleteImagePermanent": "Deleted images cannot be restored.", + "download": "Download", + "featuresWillReset": "If you delete this image, those features will immediately be reset.", + "galleryImageResetSize": "Reset Size", + "galleryImageSize": "Image Size", + "gallerySettings": "Gallery Settings", + "generations": "Generations", + "image": "image", + "loading": "Loading", + "loadMore": "Load More", + "maintainAspectRatio": "Maintain Aspect Ratio", + "noImageSelected": "No Image Selected", + "noImagesInGallery": "No Images to Display", + "setCurrentImage": "Set as Current Image", + "showGenerations": "Show Generations", + "showUploads": "Show Uploads", + "singleColumnLayout": "Single Column Layout", + "starImage": "Star Image", + "unstarImage": "Unstar Image", + "unableToLoad": "Unable to load Gallery", + "uploads": "Uploads", + "deleteSelection": "Delete Selection", + "downloadSelection": "Download Selection", + "preparingDownload": "Preparing Download", + "preparingDownloadFailed": "Problem Preparing Download", + "problemDeletingImages": "Problem Deleting Images", + "problemDeletingImagesDesc": "One or more images could not be deleted" + }, + "hotkeys": { + "acceptStagingImage": { + "desc": "Accept Current Staging Area Image", + "title": "Accept Staging Image" + }, + "addNodes": { + "desc": "Opens the add node menu", + "title": "Add Nodes" + }, + "appHotkeys": "App Hotkeys", + "cancel": { + "desc": "Cancel image generation", + "title": "Cancel" + }, + "changeTabs": { + "desc": "Switch to another workspace", + "title": "Change Tabs" + }, + "clearMask": { + "desc": "Clear the entire mask", + "title": "Clear Mask" + }, + "closePanels": { + "desc": "Closes open panels", + "title": "Close Panels" + }, + "colorPicker": { + "desc": "Selects the canvas color picker", + "title": "Select Color Picker" + }, + "consoleToggle": { + "desc": "Open and close console", + "title": "Console Toggle" + }, + "copyToClipboard": { + "desc": "Copy current canvas to clipboard", + "title": "Copy to Clipboard" + }, + "decreaseBrushOpacity": { + "desc": "Decreases the opacity of the canvas brush", + "title": "Decrease Brush Opacity" + }, + "decreaseBrushSize": { + "desc": "Decreases the size of the canvas brush/eraser", + "title": "Decrease Brush Size" + }, + "decreaseGalleryThumbSize": { + "desc": "Decreases gallery thumbnails size", + "title": "Decrease Gallery Image Size" + }, + "deleteImage": { + "desc": "Delete the current image", + "title": "Delete Image" + }, + "downloadImage": { + "desc": "Download current canvas", + "title": "Download Image" + }, + "eraseBoundingBox": { + "desc": "Erases the bounding box area", + "title": "Erase Bounding Box" + }, + "fillBoundingBox": { + "desc": "Fills the bounding box with brush color", + "title": "Fill Bounding Box" + }, + "focusPrompt": { + "desc": "Focus the prompt input area", + "title": "Focus Prompt" + }, + "galleryHotkeys": "Gallery Hotkeys", + "generalHotkeys": "General Hotkeys", + "hideMask": { + "desc": "Hide and unhide mask", + "title": "Hide Mask" + }, + "increaseBrushOpacity": { + "desc": "Increases the opacity of the canvas brush", + "title": "Increase Brush Opacity" + }, + "increaseBrushSize": { + "desc": "Increases the size of the canvas brush/eraser", + "title": "Increase Brush Size" + }, + "increaseGalleryThumbSize": { + "desc": "Increases gallery thumbnails size", + "title": "Increase Gallery Image Size" + }, + "invoke": { + "desc": "Generate an image", + "title": "Invoke" + }, + "keyboardShortcuts": "Keyboard Shortcuts", + "maximizeWorkSpace": { + "desc": "Close panels and maximize work area", + "title": "Maximize Workspace" + }, + "mergeVisible": { + "desc": "Merge all visible layers of canvas", + "title": "Merge Visible" + }, + "moveTool": { + "desc": "Allows canvas navigation", + "title": "Move Tool" + }, + "nextImage": { + "desc": "Display the next image in gallery", + "title": "Next Image" + }, + "nextStagingImage": { + "desc": "Next Staging Area Image", + "title": "Next Staging Image" + }, + "nodesHotkeys": "Nodes Hotkeys", + "pinOptions": { + "desc": "Pin the options panel", + "title": "Pin Options" + }, + "previousImage": { + "desc": "Display the previous image in gallery", + "title": "Previous Image" + }, + "previousStagingImage": { + "desc": "Previous Staging Area Image", + "title": "Previous Staging Image" + }, + "quickToggleMove": { + "desc": "Temporarily toggles Move mode", + "title": "Quick Toggle Move" + }, + "redoStroke": { + "desc": "Redo a brush stroke", + "title": "Redo Stroke" + }, + "resetView": { + "desc": "Reset Canvas View", + "title": "Reset View" + }, + "restoreFaces": { + "desc": "Restore the current image", + "title": "Restore Faces" + }, + "saveToGallery": { + "desc": "Save current canvas to gallery", + "title": "Save To Gallery" + }, + "selectBrush": { + "desc": "Selects the canvas brush", + "title": "Select Brush" + }, + "selectEraser": { + "desc": "Selects the canvas eraser", + "title": "Select Eraser" + }, + "sendToImageToImage": { + "desc": "Send current image to Image to Image", + "title": "Send To Image To Image" + }, + "setParameters": { + "desc": "Use all parameters of the current image", + "title": "Set Parameters" + }, + "setPrompt": { + "desc": "Use the prompt of the current image", + "title": "Set Prompt" + }, + "setSeed": { + "desc": "Use the seed of the current image", + "title": "Set Seed" + }, + "showHideBoundingBox": { + "desc": "Toggle visibility of bounding box", + "title": "Show/Hide Bounding Box" + }, + "showInfo": { + "desc": "Show metadata info of the current image", + "title": "Show Info" + }, + "toggleGallery": { + "desc": "Open and close the gallery drawer", + "title": "Toggle Gallery" + }, + "toggleGalleryPin": { + "desc": "Pins and unpins the gallery to the UI", + "title": "Toggle Gallery Pin" + }, + "toggleLayer": { + "desc": "Toggles mask/base layer selection", + "title": "Toggle Layer" + }, + "toggleOptions": { + "desc": "Open and close the options panel", + "title": "Toggle Options" + }, + "toggleSnap": { + "desc": "Toggles Snap to Grid", + "title": "Toggle Snap" + }, + "toggleViewer": { + "desc": "Open and close Image Viewer", + "title": "Toggle Viewer" + }, + "undoStroke": { + "desc": "Undo a brush stroke", + "title": "Undo Stroke" + }, + "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", + "upscale": { + "desc": "Upscale the current image", + "title": "Upscale" + } + }, + "metadata": { + "cfgScale": "CFG scale", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)", + "createdBy": "Created By", + "fit": "Image to image fit", + "generationMode": "Generation Mode", + "height": "Height", + "hiresFix": "High Resolution Optimization", + "imageDetails": "Image Details", + "initImage": "Initial image", + "metadata": "Metadata", + "model": "Model", + "negativePrompt": "Negative Prompt", + "noImageDetails": "No image details found", + "noMetaData": "No metadata found", + "noRecallParameters": "No parameters to recall found", + "perlin": "Perlin Noise", + "positivePrompt": "Positive Prompt", + "recallParameters": "Recall Parameters", + "scheduler": "Scheduler", + "seamless": "Seamless", + "seed": "Seed", + "steps": "Steps", + "strength": "Image to image strength", + "Threshold": "Noise Threshold", + "variations": "Seed-weight pairs", + "vae": "VAE", + "width": "Width", + "workflow": "Workflow" + }, + "modelManager": { + "active": "active", + "addCheckpointModel": "Add Checkpoint / Safetensor Model", + "addDifference": "Add Difference", + "addDiffuserModel": "Add Diffusers", + "addManually": "Add Manually", + "addModel": "Add Model", + "addNew": "Add New", + "addNewModel": "Add New Model", + "addSelected": "Add Selected", + "advanced": "Advanced", + "allModels": "All Models", + "alpha": "Alpha", + "availableModels": "Available Models", + "baseModel": "Base Model", + "cached": "cached", + "cannotUseSpaces": "Cannot Use Spaces", + "checkpointFolder": "Checkpoint Folder", + "checkpointModels": "Checkpoints", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "clearCheckpointFolder": "Clear Checkpoint Folder", + "closeAdvanced": "Close Advanced", + "config": "Config", + "configValidationMsg": "Path to the config file of your model.", + "conversionNotSupported": "Conversion Not Supported", + "convert": "Convert", + "convertingModelBegin": "Converting Model. Please wait.", + "convertToDiffusers": "Convert To Diffusers", + "convertToDiffusersHelpText1": "This model will be converted to the 🧨 Diffusers format.", + "convertToDiffusersHelpText2": "This process will replace your Model Manager entry with the Diffusers version of the same model.", + "convertToDiffusersHelpText3": "Your checkpoint file on disk WILL be deleted if it is in InvokeAI root folder. If it is in a custom location, then it WILL NOT be deleted.", + "convertToDiffusersHelpText4": "This is a one time process only. It might take around 30s-60s depending on the specifications of your computer.", + "convertToDiffusersHelpText5": "Please make sure you have enough disk space. Models generally vary between 2GB-7GB in size.", + "convertToDiffusersHelpText6": "Do you wish to convert this model?", + "convertToDiffusersSaveLocation": "Save Location", + "custom": "Custom", + "customConfig": "Custom Config", + "customConfigFileLocation": "Custom Config File Location", + "customSaveLocation": "Custom Save Location", + "delete": "Delete", + "deleteConfig": "Delete Config", + "deleteModel": "Delete Model", + "deleteMsg1": "Are you sure you want to delete this model from InvokeAI?", + "deleteMsg2": "This WILL delete the model from disk if it is in the InvokeAI root folder. If you are using a custom location, then the model WILL NOT be deleted from disk.", + "description": "Description", + "descriptionValidationMsg": "Add a description for your model", + "deselectAll": "Deselect All", + "diffusersModels": "Diffusers", + "findModels": "Find Models", + "formMessageDiffusersModelLocation": "Diffusers Model Location", + "formMessageDiffusersModelLocationDesc": "Please enter at least one.", + "formMessageDiffusersVAELocation": "VAE Location", + "formMessageDiffusersVAELocationDesc": "If not provided, InvokeAI will look for the VAE file inside the model location given above.", + "height": "Height", + "heightValidationMsg": "Default height of your model.", + "ignoreMismatch": "Ignore Mismatches Between Selected Models", + "importModels": "Import Models", + "inpainting": "v1 Inpainting", + "interpolationType": "Interpolation Type", + "inverseSigmoid": "Inverse Sigmoid", + "invokeAIFolder": "Invoke AI Folder", + "invokeRoot": "InvokeAI folder", + "load": "Load", + "loraModels": "LoRAs", + "manual": "Manual", + "merge": "Merge", + "mergedModelCustomSaveLocation": "Custom Path", + "mergedModelName": "Merged Model Name", + "mergedModelSaveLocation": "Save Location", + "mergeModels": "Merge Models", + "model": "Model", + "modelAdded": "Model Added", + "modelConversionFailed": "Model Conversion Failed", + "modelConverted": "Model Converted", + "modelDeleted": "Model Deleted", + "modelDeleteFailed": "Failed to delete model", + "modelEntryDeleted": "Model Entry Deleted", + "modelExists": "Model Exists", + "modelLocation": "Model Location", + "modelLocationValidationMsg": "Provide the path to a local folder where your Diffusers Model is stored", + "modelManager": "Model Manager", + "modelMergeAlphaHelp": "Alpha controls blend strength for the models. Lower alpha values lead to lower influence of the second model.", + "modelMergeHeaderHelp1": "You can merge up to three different models to create a blend that suits your needs.", + "modelMergeHeaderHelp2": "Only Diffusers are available for merging. If you want to merge a checkpoint model, please convert it to Diffusers first.", + "modelMergeInterpAddDifferenceHelp": "In this mode, Model 3 is first subtracted from Model 2. The resulting version is blended with Model 1 with the alpha rate set above.", + "modelOne": "Model 1", + "modelsFound": "Models Found", + "modelsMerged": "Models Merged", + "modelsMergeFailed": "Model Merge Failed", + "modelsSynced": "Models Synced", + "modelSyncFailed": "Model Sync Failed", + "modelThree": "Model 3", + "modelTwo": "Model 2", + "modelType": "Model Type", + "modelUpdated": "Model Updated", + "modelUpdateFailed": "Model Update Failed", + "name": "Name", + "nameValidationMsg": "Enter a name for your model", + "noCustomLocationProvided": "No Custom Location Provided", + "noModels": "No Models Found", + "noModelSelected": "No Model Selected", + "noModelsFound": "No Models Found", + "none": "none", + "notLoaded": "not loaded", + "oliveModels": "Olives", + "onnxModels": "Onnx", + "pathToCustomConfig": "Path To Custom Config", + "pickModelType": "Pick Model Type", + "predictionType": "Prediction Type (for Stable Diffusion 2.x Models and occasional Stable Diffusion 1.x Models)", + "quickAdd": "Quick Add", + "repo_id": "Repo ID", + "repoIDValidationMsg": "Online repository of your model", + "safetensorModels": "SafeTensors", + "sameFolder": "Same folder", + "scanAgain": "Scan Again", + "scanForModels": "Scan For Models", + "search": "Search", + "selectAll": "Select All", + "selectAndAdd": "Select and Add Models Listed Below", + "selected": "Selected", + "selectFolder": "Select Folder", + "selectModel": "Select Model", + "settings": "Settings", + "showExisting": "Show Existing", + "sigmoid": "Sigmoid", + "simpleModelDesc": "Provide a path to a local Diffusers model, local checkpoint / safetensors model a HuggingFace Repo ID, or a checkpoint/diffusers model URL.", + "statusConverting": "Converting", + "syncModels": "Sync Models", + "syncModelsDesc": "If your models are out of sync with the backend, you can refresh them up using this option. This is generally handy in cases where you manually update your models.yaml file or add models to the InvokeAI root folder after the application has booted.", + "updateModel": "Update Model", + "useCustomConfig": "Use Custom Config", + "v1": "v1", + "v2_768": "v2 (768px)", + "v2_base": "v2 (512px)", + "vae": "VAE", + "vaeLocation": "VAE Location", + "vaeLocationValidationMsg": "Path to where your VAE is located.", + "vaePrecision": "VAE Precision", + "vaeRepoID": "VAE Repo ID", + "vaeRepoIDValidationMsg": "Online repository of your VAE", + "variant": "Variant", + "weightedSum": "Weighted Sum", + "width": "Width", + "widthValidationMsg": "Default width of your model." + }, + "models": { + "addLora": "Add LoRA", + "esrganModel": "ESRGAN Model", + "loading": "loading", + "noLoRAsAvailable": "No LoRAs available", + "noLoRAsLoaded": "No LoRAs Loaded", + "noMatchingLoRAs": "No matching LoRAs", + "noMatchingModels": "No matching Models", + "noModelsAvailable": "No models available", + "selectLoRA": "Select a LoRA", + "selectModel": "Select a Model", + "noLoRAsInstalled": "No LoRAs installed", + "noRefinerModelsInstalled": "No SDXL Refiner models installed" + }, + "nodes": { + "addNode": "Add Node", + "addNodeToolTip": "Add Node (Shift+A, Space)", + "addLinearView": "Add to Linear View", + "animatedEdges": "Animated Edges", + "animatedEdgesHelp": "Animate selected edges and edges connected to selected nodes", + "boardField": "Board", + "boardFieldDescription": "A gallery board", + "boolean": "Booleans", + "booleanCollection": "Boolean Collection", + "booleanCollectionDescription": "A collection of booleans.", + "booleanDescription": "Booleans are true or false.", + "booleanPolymorphic": "Boolean Polymorphic", + "booleanPolymorphicDescription": "A collection of booleans.", + "cannotConnectInputToInput": "Cannot connect input to input", + "cannotConnectOutputToOutput": "Cannot connect output to output", + "cannotConnectToSelf": "Cannot connect to self", + "cannotDuplicateConnection": "Cannot create duplicate connections", + "nodePack": "Node pack", + "clipField": "Clip", + "clipFieldDescription": "Tokenizer and text_encoder submodels.", + "collection": "Collection", + "collectionFieldType": "{{name}} Collection", + "collectionOrScalarFieldType": "{{name}} Collection|Scalar", + "collectionDescription": "TODO", + "collectionItem": "Collection Item", + "collectionItemDescription": "TODO", + "colorCodeEdges": "Color-Code Edges", + "colorCodeEdgesHelp": "Color-code edges according to their connected fields", + "colorCollection": "A collection of colors.", + "colorCollectionDescription": "TODO", + "colorField": "Color", + "colorFieldDescription": "A RGBA color.", + "colorPolymorphic": "Color Polymorphic", + "colorPolymorphicDescription": "A collection of colors.", + "conditioningCollection": "Conditioning Collection", + "conditioningCollectionDescription": "Conditioning may be passed between nodes.", + "conditioningField": "Conditioning", + "conditioningFieldDescription": "Conditioning may be passed between nodes.", + "conditioningPolymorphic": "Conditioning Polymorphic", + "conditioningPolymorphicDescription": "Conditioning may be passed between nodes.", + "connectionWouldCreateCycle": "Connection would create a cycle", + "controlCollection": "Control Collection", + "controlCollectionDescription": "Control info passed between nodes.", + "controlField": "Control", + "controlFieldDescription": "Control info passed between nodes.", + "currentImage": "Current Image", + "currentImageDescription": "Displays the current image in the Node Editor", + "denoiseMaskField": "Denoise Mask", + "denoiseMaskFieldDescription": "Denoise Mask may be passed between nodes", + "doesNotExist": "does not exist", + "downloadWorkflow": "Download Workflow JSON", + "edge": "Edge", + "enum": "Enum", + "enumDescription": "Enums are values that may be one of a number of options.", + "executionStateCompleted": "Completed", + "executionStateError": "Error", + "executionStateInProgress": "In Progress", + "fieldTypesMustMatch": "Field types must match", + "fitViewportNodes": "Fit View", + "float": "Float", + "floatCollection": "Float Collection", + "floatCollectionDescription": "A collection of floats.", + "floatDescription": "Floats are numbers with a decimal point.", + "floatPolymorphic": "Float Polymorphic", + "floatPolymorphicDescription": "A collection of floats.", + "fullyContainNodes": "Fully Contain Nodes to Select", + "fullyContainNodesHelp": "Nodes must be fully inside the selection box to be selected", + "hideGraphNodes": "Hide Graph Overlay", + "hideLegendNodes": "Hide Field Type Legend", + "hideMinimapnodes": "Hide MiniMap", + "imageCollection": "Image Collection", + "imageCollectionDescription": "A collection of images.", + "imageField": "Image", + "imageFieldDescription": "Images may be passed between nodes.", + "imagePolymorphic": "Image Polymorphic", + "imagePolymorphicDescription": "A collection of images.", + "inputField": "Input Field", + "inputFields": "Input Fields", + "inputMayOnlyHaveOneConnection": "Input may only have one connection", + "inputNode": "Input Node", + "integer": "Integer", + "integerCollection": "Integer Collection", + "integerCollectionDescription": "A collection of integers.", + "integerDescription": "Integers are whole numbers, without a decimal point.", + "integerPolymorphic": "Integer Polymorphic", + "integerPolymorphicDescription": "A collection of integers.", + "invalidOutputSchema": "Invalid output schema", + "ipAdapter": "IP-Adapter", + "ipAdapterCollection": "IP-Adapters Collection", + "ipAdapterCollectionDescription": "A collection of IP-Adapters.", + "ipAdapterDescription": "An Image Prompt Adapter (IP-Adapter).", + "ipAdapterModel": "IP-Adapter Model", + "ipAdapterModelDescription": "IP-Adapter Model Field", + "ipAdapterPolymorphic": "IP-Adapter Polymorphic", + "ipAdapterPolymorphicDescription": "A collection of IP-Adapters.", + "latentsCollection": "Latents Collection", + "latentsCollectionDescription": "Latents may be passed between nodes.", + "latentsField": "Latents", + "latentsFieldDescription": "Latents may be passed between nodes.", + "latentsPolymorphic": "Latents Polymorphic", + "latentsPolymorphicDescription": "Latents may be passed between nodes.", + "loadingNodes": "Loading Nodes...", + "loadWorkflow": "Load Workflow", + "noWorkflow": "No Workflow", + "loRAModelField": "LoRA", + "loRAModelFieldDescription": "TODO", + "mainModelField": "Model", + "mainModelFieldDescription": "TODO", + "maybeIncompatible": "May be Incompatible With Installed", + "mismatchedVersion": "Invalid node: node {{node}} of type {{type}} has mismatched version (try updating?)", + "missingCanvaInitImage": "Missing canvas init image", + "missingCanvaInitMaskImages": "Missing canvas init and mask images", + "missingTemplate": "Invalid node: node {{node}} of type {{type}} missing template (not installed?)", + "sourceNodeDoesNotExist": "Invalid edge: source/output node {{node}} does not exist", + "targetNodeDoesNotExist": "Invalid edge: target/input node {{node}} does not exist", + "sourceNodeFieldDoesNotExist": "Invalid edge: source/output field {{node}}.{{field}} does not exist", + "targetNodeFieldDoesNotExist": "Invalid edge: target/input field {{node}}.{{field}} does not exist", + "deletedInvalidEdge": "Deleted invalid edge {{source}} -> {{target}}", + "noConnectionData": "No connection data", + "noConnectionInProgress": "No connection in progress", + "node": "Node", + "nodeOutputs": "Node Outputs", + "nodeSearch": "Search for nodes", + "nodeTemplate": "Node Template", + "nodeType": "Node Type", + "noFieldsLinearview": "No fields added to Linear View", + "noFieldType": "No field type", + "noImageFoundState": "No initial image found in state", + "noMatchingNodes": "No matching nodes", + "noNodeSelected": "No node selected", + "nodeOpacity": "Node Opacity", + "nodeVersion": "Node Version", + "noOutputRecorded": "No outputs recorded", + "noOutputSchemaName": "No output schema name found in ref object", + "notes": "Notes", + "notesDescription": "Add notes about your workflow", + "oNNXModelField": "ONNX Model", + "oNNXModelFieldDescription": "ONNX model field.", + "outputField": "Output Field", + "outputFieldInInput": "Output field in input", + "outputFields": "Output Fields", + "outputNode": "Output node", + "outputSchemaNotFound": "Output schema not found", + "pickOne": "Pick One", + "problemReadingMetadata": "Problem reading metadata from image", + "problemReadingWorkflow": "Problem reading workflow from image", + "problemSettingTitle": "Problem Setting Title", + "reloadNodeTemplates": "Reload Node Templates", + "removeLinearView": "Remove from Linear View", + "newWorkflow": "New Workflow", + "newWorkflowDesc": "Create a new workflow?", + "newWorkflowDesc2": "Your current workflow has unsaved changes.", + "scheduler": "Scheduler", + "schedulerDescription": "TODO", + "sDXLMainModelField": "SDXL Model", + "sDXLMainModelFieldDescription": "SDXL model field.", + "sDXLRefinerModelField": "Refiner Model", + "sDXLRefinerModelFieldDescription": "TODO", + "showGraphNodes": "Show Graph Overlay", + "showLegendNodes": "Show Field Type Legend", + "showMinimapnodes": "Show MiniMap", + "skipped": "Skipped", + "skippedReservedInput": "Skipped reserved input field", + "skippedReservedOutput": "Skipped reserved output field", + "skippingInputNoTemplate": "Skipping input field with no template", + "skippingReservedFieldType": "Skipping reserved field type", + "skippingUnknownInputType": "Skipping unknown input field type", + "skippingUnknownOutputType": "Skipping unknown output field type", + "snapToGrid": "Snap to Grid", + "snapToGridHelp": "Snap nodes to grid when moved", + "sourceNode": "Source node", + "string": "String", + "stringCollection": "String Collection", + "stringCollectionDescription": "A collection of strings.", + "stringDescription": "Strings are text.", + "stringPolymorphic": "String Polymorphic", + "stringPolymorphicDescription": "A collection of strings.", + "unableToLoadWorkflow": "Unable to Load Workflow", + "unableToParseEdge": "Unable to parse edge", + "unableToParseNode": "Unable to parse node", + "unableToUpdateNode": "Unable to update node", + "unableToValidateWorkflow": "Unable to Validate Workflow", + "unableToMigrateWorkflow": "Unable to Migrate Workflow", + "unknownErrorValidatingWorkflow": "Unknown error validating workflow", + "inputFieldTypeParseError": "Unable to parse type of input field {{node}}.{{field}} ({{message}})", + "outputFieldTypeParseError": "Unable to parse type of output field {{node}}.{{field}} ({{message}})", + "unableToExtractSchemaNameFromRef": "unable to extract schema name from ref", + "unsupportedArrayItemType": "unsupported array item type \"{{type}}\"", + "unsupportedAnyOfLength": "too many union members ({{count}})", + "unsupportedMismatchedUnion": "mismatched CollectionOrScalar type with base types {{firstType}} and {{secondType}}", + "unableToParseFieldType": "unable to parse field type", + "unableToExtractEnumOptions": "unable to extract enum options", + "uNetField": "UNet", + "uNetFieldDescription": "UNet submodel.", + "unhandledInputProperty": "Unhandled input property", + "unhandledOutputProperty": "Unhandled output property", + "unknownField": "Unknown field", + "unknownFieldType": "$t(nodes.unknownField) type: {{type}}", + "unknownNode": "Unknown Node", + "unknownNodeType": "Unknown node type", + "unknownTemplate": "Unknown Template", + "unknownInput": "Unknown input: {{name}}", + "unkownInvocation": "Unknown Invocation type", + "unknownOutput": "Unknown output: {{name}}", + "updateNode": "Update Node", + "updateApp": "Update App", + "updateAllNodes": "Update Nodes", + "allNodesUpdated": "All Nodes Updated", + "unableToUpdateNodes_one": "Unable to update {{count}} node", + "unableToUpdateNodes_other": "Unable to update {{count}} nodes", + "vaeField": "Vae", + "vaeFieldDescription": "Vae submodel.", + "vaeModelField": "VAE", + "vaeModelFieldDescription": "TODO", + "validateConnections": "Validate Connections and Graph", + "validateConnectionsHelp": "Prevent invalid connections from being made, and invalid graphs from being invoked", + "unableToGetWorkflowVersion": "Unable to get workflow schema version", + "unrecognizedWorkflowVersion": "Unrecognized workflow schema version {{version}}", + "version": "Version", + "versionUnknown": " Version Unknown", + "workflow": "Workflow", + "workflowAuthor": "Author", + "workflowContact": "Contact", + "workflowDescription": "Short Description", + "workflowName": "Name", + "workflowNotes": "Notes", + "workflowSettings": "Workflow Editor Settings", + "workflowTags": "Tags", + "workflowValidation": "Workflow Validation Error", + "workflowVersion": "Version", + "zoomInNodes": "Zoom In", + "zoomOutNodes": "Zoom Out", + "betaDesc": "This invocation is in beta. Until it is stable, it may have breaking changes during app updates. We plan to support this invocation long-term.", + "prototypeDesc": "This invocation is a prototype. It may have breaking changes during app updates and may be removed at any time." + }, + "parameters": { + "aspectRatio": "Aspect Ratio", + "aspectRatioFree": "Free", + "boundingBoxHeader": "Bounding Box", + "boundingBoxHeight": "Bounding Box Height", + "boundingBoxWidth": "Bounding Box Width", + "cancel": { + "cancel": "Cancel", + "immediate": "Cancel immediately", + "isScheduled": "Canceling", + "schedule": "Cancel after current iteration", + "setType": "Set cancel type" + }, + "cfgScale": "CFG Scale", + "cfgRescaleMultiplier": "CFG Rescale Multiplier", + "cfgRescale": "CFG Rescale", + "clipSkip": "CLIP Skip", + "clipSkipWithLayerCount": "CLIP Skip {{layerCount}}", + "closeViewer": "Close Viewer", + "codeformerFidelity": "Fidelity", + "coherenceMode": "Mode", + "coherencePassHeader": "Coherence Pass", + "coherenceSteps": "Steps", + "coherenceStrength": "Strength", + "compositingSettingsHeader": "Compositing Settings", + "controlNetControlMode": "Control Mode", + "copyImage": "Copy Image", + "copyImageToLink": "Copy Image To Link", + "denoisingStrength": "Denoising Strength", + "downloadImage": "Download Image", + "enableNoiseSettings": "Enable Noise Settings", + "faceRestoration": "Face Restoration", + "general": "General", + "height": "Height", + "hidePreview": "Hide Preview", + "hiresOptim": "High Res Optimization", + "hiresStrength": "High Res Strength", + "hSymmetryStep": "H Symmetry Step", + "imageFit": "Fit Initial Image To Output Size", + "images": "Images", + "imageToImage": "Image to Image", + "img2imgStrength": "Image To Image Strength", + "infillMethod": "Infill Method", + "infillScalingHeader": "Infill and Scaling", + "info": "Info", + "initialImage": "Initial Image", + "invoke": { + "addingImagesTo": "Adding images to", + "invoke": "Invoke", + "missingFieldTemplate": "Missing field template", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} missing input", + "missingNodeTemplate": "Missing node template", + "noControlImageForControlAdapter": "Control Adapter #{{number}} has no control image", + "noInitialImageSelected": "No initial image selected", + "noModelForControlAdapter": "Control Adapter #{{number}} has no model selected.", + "incompatibleBaseModelForControlAdapter": "Control Adapter #{{number}} model is invalid with main model.", + "noModelSelected": "No model selected", + "noPrompts": "No prompts generated", + "noNodesInGraph": "No nodes in graph", + "readyToInvoke": "Ready to Invoke", + "systemBusy": "System busy", + "systemDisconnected": "System disconnected", + "unableToInvoke": "Unable to Invoke" + }, + "maskAdjustmentsHeader": "Mask Adjustments", + "maskBlur": "Blur", + "maskBlurMethod": "Blur Method", + "maskEdge": "Mask Edge", + "negativePromptPlaceholder": "Negative Prompt", + "noiseSettings": "Noise", + "noiseThreshold": "Noise Threshold", + "openInViewer": "Open In Viewer", + "otherOptions": "Other Options", + "patchmatchDownScaleSize": "Downscale", + "perlinNoise": "Perlin Noise", + "positivePromptPlaceholder": "Positive Prompt", + "randomizeSeed": "Randomize Seed", + "manualSeed": "Manual Seed", + "randomSeed": "Random Seed", + "restoreFaces": "Restore Faces", + "iterations": "Iterations", + "iterationsWithCount_one": "{{count}} Iteration", + "iterationsWithCount_other": "{{count}} Iterations", + "scale": "Scale", + "scaleBeforeProcessing": "Scale Before Processing", + "scaledHeight": "Scaled H", + "scaledWidth": "Scaled W", + "scheduler": "Scheduler", + "seamCorrectionHeader": "Seam Correction", + "seamHighThreshold": "High", + "seamlessTiling": "Seamless Tiling", + "seamlessXAxis": "X Axis", + "seamlessYAxis": "Y Axis", + "seamlessX": "Seamless X", + "seamlessY": "Seamless Y", + "seamlessX&Y": "Seamless X & Y", + "seamLowThreshold": "Low", + "seed": "Seed", + "seedWeights": "Seed Weights", + "imageActions": "Image Actions", + "sendTo": "Send to", + "sendToImg2Img": "Send to Image to Image", + "sendToUnifiedCanvas": "Send To Unified Canvas", + "showOptionsPanel": "Show Side Panel (O or T)", + "showPreview": "Show Preview", + "shuffle": "Shuffle Seed", + "steps": "Steps", + "strength": "Strength", + "symmetry": "Symmetry", + "tileSize": "Tile Size", + "toggleLoopback": "Toggle Loopback", + "type": "Type", + "upscale": "Upscale (Shift + U)", + "upscaleImage": "Upscale Image", + "upscaling": "Upscaling", + "unmasked": "Unmasked", + "useAll": "Use All", + "useSize": "Use Size", + "useCpuNoise": "Use CPU Noise", + "cpuNoise": "CPU Noise", + "gpuNoise": "GPU Noise", + "useInitImg": "Use Initial Image", + "usePrompt": "Use Prompt", + "useSeed": "Use Seed", + "variationAmount": "Variation Amount", + "variations": "Variations", + "vSymmetryStep": "V Symmetry Step", + "width": "Width", + "isAllowedToUpscale": { + "useX2Model": "Image is too large to upscale with x4 model, use x2 model", + "tooLarge": "Image is too large to upscale, select smaller image" + } + }, + "dynamicPrompts": { + "combinatorial": "Combinatorial Generation", + "dynamicPrompts": "Dynamic Prompts", + "enableDynamicPrompts": "Enable Dynamic Prompts", + "maxPrompts": "Max Prompts", + "promptsPreview": "Prompts Preview", + "promptsWithCount_one": "{{count}} Prompt", + "promptsWithCount_other": "{{count}} Prompts", + "seedBehaviour": { + "label": "Seed Behaviour", + "perIterationLabel": "Seed per Iteration", + "perIterationDesc": "Use a different seed for each iteration", + "perPromptLabel": "Seed per Image", + "perPromptDesc": "Use a different seed for each image" + } + }, + "sdxl": { + "cfgScale": "CFG Scale", + "concatPromptStyle": "Concatenate Prompt & Style", + "denoisingStrength": "Denoising Strength", + "loading": "Loading...", + "negAestheticScore": "Negative Aesthetic Score", + "negStylePrompt": "Negative Style Prompt", + "noModelsAvailable": "No models available", + "posAestheticScore": "Positive Aesthetic Score", + "posStylePrompt": "Positive Style Prompt", + "refiner": "Refiner", + "refinermodel": "Refiner Model", + "refinerStart": "Refiner Start", + "scheduler": "Scheduler", + "selectAModel": "Select a model", + "steps": "Steps", + "useRefiner": "Use Refiner" + }, + "settings": { + "alternateCanvasLayout": "Alternate Canvas Layout", + "antialiasProgressImages": "Antialias Progress Images", + "autoChangeDimensions": "Update W/H To Model Defaults On Change", + "beta": "Beta", + "confirmOnDelete": "Confirm On Delete", + "consoleLogLevel": "Log Level", + "developer": "Developer", + "displayHelpIcons": "Display Help Icons", + "displayInProgress": "Display Progress Images", + "enableImageDebugging": "Enable Image Debugging", + "enableInformationalPopovers": "Enable Informational Popovers", + "enableInvisibleWatermark": "Enable Invisible Watermark", + "enableNodesEditor": "Enable Nodes Editor", + "enableNSFWChecker": "Enable NSFW Checker", + "experimental": "Experimental", + "favoriteSchedulers": "Favorite Schedulers", + "favoriteSchedulersPlaceholder": "No schedulers favorited", + "general": "General", + "generation": "Generation", + "models": "Models", + "resetComplete": "Web UI has been reset.", + "resetWebUI": "Reset Web UI", + "resetWebUIDesc1": "Resetting the web UI only resets the browser's local cache of your images and remembered settings. It does not delete any images from disk.", + "resetWebUIDesc2": "If images aren't showing up in the gallery or something else isn't working, please try resetting before submitting an issue on GitHub.", + "saveSteps": "Save images every n steps", + "shouldLogToConsole": "Console Logging", + "showAdvancedOptions": "Show Advanced Options", + "showProgressInViewer": "Show Progress Images in Viewer", + "ui": "User Interface", + "useSlidersForAll": "Use Sliders For All Options", + "clearIntermediatesDisabled": "Queue must be empty to clear intermediates", + "clearIntermediatesDesc1": "Clearing intermediates will reset your Canvas and ControlNet state.", + "clearIntermediatesDesc2": "Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space.", + "clearIntermediatesDesc3": "Your gallery images will not be deleted.", + "clearIntermediates": "Clear Intermediates", + "clearIntermediatesWithCount_one": "Clear {{count}} Intermediate", + "clearIntermediatesWithCount_other": "Clear {{count}} Intermediates", + "intermediatesCleared_one": "Cleared {{count}} Intermediate", + "intermediatesCleared_other": "Cleared {{count}} Intermediates", + "intermediatesClearedFailed": "Problem Clearing Intermediates", + "reloadingIn": "Reloading in" + }, + "toast": { + "addedToBoard": "Added to board", + "baseModelChangedCleared_one": "Base model changed, cleared or disabled {{count}} incompatible submodel", + "baseModelChangedCleared_other": "Base model changed, cleared or disabled {{count}} incompatible submodels", + "canceled": "Processing Canceled", + "canvasCopiedClipboard": "Canvas Copied to Clipboard", + "canvasDownloaded": "Canvas Downloaded", + "canvasMerged": "Canvas Merged", + "canvasSavedGallery": "Canvas Saved to Gallery", + "canvasSentControlnetAssets": "Canvas Sent to ControlNet & Assets", + "connected": "Connected to Server", + "disconnected": "Disconnected from Server", + "downloadImageStarted": "Image Download Started", + "faceRestoreFailed": "Face Restoration Failed", + "imageCopied": "Image Copied", + "imageLinkCopied": "Image Link Copied", + "imageNotLoaded": "No Image Loaded", + "imageNotLoadedDesc": "Could not find image", + "imageSaved": "Image Saved", + "imageSavedToGallery": "Image Saved to Gallery", + "imageSavingFailed": "Image Saving Failed", + "imageUploaded": "Image Uploaded", + "imageUploadFailed": "Image Upload Failed", + "initialImageNotSet": "Initial Image Not Set", + "initialImageNotSetDesc": "Could not load initial image", + "initialImageSet": "Initial Image Set", + "invalidUpload": "Invalid Upload", + "loadedWithWarnings": "Workflow Loaded with Warnings", + "maskSavedAssets": "Mask Saved to Assets", + "maskSentControlnetAssets": "Mask Sent to ControlNet & Assets", + "metadataLoadFailed": "Failed to load metadata", + "modelAdded": "Model Added: {{modelName}}", + "modelAddedSimple": "Model Added", + "modelAddFailed": "Model Add Failed", + "nodesBrokenConnections": "Cannot load. Some connections are broken.", + "nodesCorruptedGraph": "Cannot load. Graph seems to be corrupted.", + "nodesLoaded": "Nodes Loaded", + "nodesLoadedFailed": "Failed To Load Nodes", + "nodesNotValidGraph": "Not a valid InvokeAI Node Graph", + "nodesNotValidJSON": "Not a valid JSON", + "nodesSaved": "Nodes Saved", + "nodesUnrecognizedTypes": "Cannot load. Graph has unrecognized types", + "parameterNotSet": "Parameter not set", + "parameterSet": "Parameter set", + "parametersFailed": "Problem loading parameters", + "parametersFailedDesc": "Unable to load init image.", + "parametersNotSet": "Parameters Not Set", + "parametersNotSetDesc": "No metadata found for this image.", + "parametersSet": "Parameters Set", + "problemCopyingCanvas": "Problem Copying Canvas", + "problemCopyingCanvasDesc": "Unable to export base layer", + "problemCopyingImage": "Unable to Copy Image", + "problemCopyingImageLink": "Unable to Copy Image Link", + "problemDownloadingCanvas": "Problem Downloading Canvas", + "problemDownloadingCanvasDesc": "Unable to export base layer", + "problemImportingMask": "Problem Importing Mask", + "problemImportingMaskDesc": "Unable to export mask", + "problemMergingCanvas": "Problem Merging Canvas", + "problemMergingCanvasDesc": "Unable to export base layer", + "problemSavingCanvas": "Problem Saving Canvas", + "problemSavingCanvasDesc": "Unable to export base layer", + "problemSavingMask": "Problem Saving Mask", + "problemSavingMaskDesc": "Unable to export mask", + "promptNotSet": "Prompt Not Set", + "promptNotSetDesc": "Could not find prompt for this image.", + "promptSet": "Prompt Set", + "seedNotSet": "Seed Not Set", + "seedNotSetDesc": "Could not find seed for this image.", + "seedSet": "Seed Set", + "sentToImageToImage": "Sent To Image To Image", + "sentToUnifiedCanvas": "Sent to Unified Canvas", + "serverError": "Server Error", + "setAsCanvasInitialImage": "Set as canvas initial image", + "setCanvasInitialImage": "Set canvas initial image", + "setControlImage": "Set as control image", + "setIPAdapterImage": "Set as IP Adapter Image", + "setInitialImage": "Set as initial image", + "setNodeField": "Set as node field", + "tempFoldersEmptied": "Temp Folder Emptied", + "uploadFailed": "Upload failed", + "uploadFailedInvalidUploadDesc": "Must be single PNG or JPEG image", + "uploadFailedUnableToLoadDesc": "Unable to load file", + "upscalingFailed": "Upscaling Failed", + "workflowLoaded": "Workflow Loaded", + "problemRetrievingWorkflow": "Problem Retrieving Workflow", + "workflowDeleted": "Workflow Deleted", + "problemDeletingWorkflow": "Problem Deleting Workflow" + }, + "tooltip": { + "feature": { + "boundingBox": "The bounding box is the same as the Width and Height settings for Text to Image or Image to Image. Only the area in the box will be processed.", + "faceCorrection": "Face correction with GFPGAN or Codeformer: the algorithm detects faces in the image and corrects any defects. High value will change the image more, resulting in more attractive faces. Codeformer with a higher fidelity preserves the original image at the expense of stronger face correction.", + "gallery": "Gallery displays generations from the outputs folder as they're created. Settings are stored within files and accesed by context menu.", + "imageToImage": "Image to Image loads any image as initial, which is then used to generate a new one along with the prompt. The higher the value, the more the result image will change. Values from 0.0 to 1.0 are possible, the recommended range is .25-.75", + "infillAndScaling": "Manage infill methods (used on masked or erased areas of the canvas) and scaling (useful for small bounding box sizes).", + "other": "These options will enable alternative processing modes for Invoke. 'Seamless tiling' will create repeating patterns in the output. 'High resolution' is generation in two steps with img2img: use this setting when you want a larger and more coherent image without artifacts. It will take longer than usual txt2img.", + "prompt": "This is the prompt field. Prompt includes generation objects and stylistic terms. You can add weight (token importance) in the prompt as well, but CLI commands and parameters will not work.", + "seamCorrection": "Controls the handling of visible seams that occur between generated images on the canvas.", + "seed": "Seed value affects the initial noise from which the image is formed. You can use the already existing seeds from previous images. 'Noise Threshold' is used to mitigate artifacts at high CFG values (try the 0-10 range), and Perlin to add Perlin noise during generation: both serve to add variation to your outputs.", + "upscale": "Use ESRGAN to enlarge the image immediately after generation.", + "variations": "Try a variation with a value between 0.1 and 1.0 to change the result for a given seed. Interesting variations of the seed are between 0.1 and 0.3." + } + }, + "popovers": { + "clipSkip": { + "heading": "CLIP Skip", + "paragraphs": [ + "Choose how many layers of the CLIP model to skip.", + "Some models work better with certain CLIP Skip settings.", + "A higher value typically results in a less detailed image." + ] + }, + "paramNegativeConditioning": { + "heading": "Negative Prompt", + "paragraphs": [ + "The generation process avoids the concepts in the negative prompt. Use this to exclude qualities or objects from the output.", + "Supports Compel syntax and embeddings." + ] + }, + "paramPositiveConditioning": { + "heading": "Positive Prompt", + "paragraphs": [ + "Guides the generation process. You may use any words or phrases.", + "Compel and Dynamic Prompts syntaxes and embeddings." + ] + }, + "paramScheduler": { + "heading": "Scheduler", + "paragraphs": [ + "Scheduler defines how to iteratively add noise to an image or how to update a sample based on a model's output." + ] + }, + "compositingBlur": { + "heading": "Blur", + "paragraphs": ["The blur radius of the mask."] + }, + "compositingBlurMethod": { + "heading": "Blur Method", + "paragraphs": ["The method of blur applied to the masked area."] + }, + "compositingCoherencePass": { + "heading": "Coherence Pass", + "paragraphs": [ + "A second round of denoising helps to composite the Inpainted/Outpainted image." + ] + }, + "compositingCoherenceMode": { + "heading": "Mode", + "paragraphs": ["The mode of the Coherence Pass."] + }, + "compositingCoherenceSteps": { + "heading": "Steps", + "paragraphs": [ + "Number of denoising steps used in the Coherence Pass.", + "Same as the main Steps parameter." + ] + }, + "compositingStrength": { + "heading": "Strength", + "paragraphs": [ + "Denoising strength for the Coherence Pass.", + "Same as the Image to Image Denoising Strength parameter." + ] + }, + "compositingMaskAdjustments": { + "heading": "Mask Adjustments", + "paragraphs": ["Adjust the mask."] + }, + "controlNetBeginEnd": { + "heading": "Begin / End Step Percentage", + "paragraphs": [ + "Which steps of the denoising process will have the ControlNet applied.", + "ControlNets applied at the beginning of the process guide composition, and ControlNets applied at the end guide details." + ] + }, + "controlNetControlMode": { + "heading": "Control Mode", + "paragraphs": [ + "Lends more weight to either the prompt or ControlNet." + ] + }, + "controlNetResizeMode": { + "heading": "Resize Mode", + "paragraphs": [ + "How the ControlNet image will be fit to the image output size." + ] + }, + "controlNet": { + "heading": "ControlNet", + "paragraphs": [ + "ControlNets provide guidance to the generation process, helping create images with controlled composition, structure, or style, depending on the model selected." + ] + }, + "controlNetWeight": { + "heading": "Weight", + "paragraphs": [ + "How strongly the ControlNet will impact the generated image." + ] + }, + "dynamicPrompts": { + "heading": "Dynamic Prompts", + "paragraphs": [ + "Dynamic Prompts parses a single prompt into many.", + "The basic syntax is \"a {red|green|blue} ball\". This will produce three prompts: \"a red ball\", \"a green ball\" and \"a blue ball\".", + "You can use the syntax as many times as you like in a single prompt, but be sure to keep the number of prompts generated in check with the Max Prompts setting." + ] + }, + "dynamicPromptsMaxPrompts": { + "heading": "Max Prompts", + "paragraphs": [ + "Limits the number of prompts that can be generated by Dynamic Prompts." + ] + }, + "dynamicPromptsSeedBehaviour": { + "heading": "Seed Behaviour", + "paragraphs": [ + "Controls how the seed is used when generating prompts.", + "Per Iteration will use a unique seed for each iteration. Use this to explore prompt variations on a single seed.", + "For example, if you have 5 prompts, each image will use the same seed.", + "Per Image will use a unique seed for each image. This provides more variation." + ] + }, + "infillMethod": { + "heading": "Infill Method", + "paragraphs": ["Method to infill the selected area."] + }, + "lora": { + "heading": "LoRA Weight", + "paragraphs": [ + "Higher LoRA weight will lead to larger impacts on the final image." + ] + }, + "noiseUseCPU": { + "heading": "Use CPU Noise", + "paragraphs": [ + "Controls whether noise is generated on the CPU or GPU.", + "With CPU Noise enabled, a particular seed will produce the same image on any machine.", + "There is no performance impact to enabling CPU Noise." + ] + }, + "paramCFGScale": { + "heading": "CFG Scale", + "paragraphs": [ + "Controls how much your prompt influences the generation process." + ] + }, + "paramCFGRescaleMultiplier": { + "heading": "CFG Rescale Multiplier", + "paragraphs": [ + "Rescale multiplier for CFG guidance, used for models trained using zero-terminal SNR (ztsnr). Suggested value 0.7." + ] + }, + "paramDenoisingStrength": { + "heading": "Denoising Strength", + "paragraphs": [ + "How much noise is added to the input image.", + "0 will result in an identical image, while 1 will result in a completely new image." + ] + }, + "paramIterations": { + "heading": "Iterations", + "paragraphs": [ + "The number of images to generate.", + "If Dynamic Prompts is enabled, each of the prompts will be generated this many times." + ] + }, + "paramModel": { + "heading": "Model", + "paragraphs": [ + "Model used for the denoising steps.", + "Different models are typically trained to specialize in producing particular aesthetic results and content." + ] + }, + "paramRatio": { + "heading": "Aspect Ratio", + "paragraphs": [ + "The aspect ratio of the dimensions of the image generated.", + "An image size (in number of pixels) equivalent to 512x512 is recommended for SD1.5 models and a size equivalent to 1024x1024 is recommended for SDXL models." + ] + }, + "paramSeed": { + "heading": "Seed", + "paragraphs": [ + "Controls the starting noise used for generation.", + "Disable “Random Seed” to produce identical results with the same generation settings." + ] + }, + "paramSteps": { + "heading": "Steps", + "paragraphs": [ + "Number of steps that will be performed in each generation.", + "Higher step counts will typically create better images but will require more generation time." + ] + }, + "paramVAE": { + "heading": "VAE", + "paragraphs": [ + "Model used for translating AI output into the final image." + ] + }, + "paramVAEPrecision": { + "heading": "VAE Precision", + "paragraphs": [ + "The precision used during VAE encoding and decoding. FP16/half precision is more efficient, at the expense of minor image variations." + ] + }, + "scaleBeforeProcessing": { + "heading": "Scale Before Processing", + "paragraphs": [ + "Scales the selected area to the size best suited for the model before the image generation process." + ] + } + }, + "ui": { + "hideProgressImages": "Hide Progress Images", + "lockRatio": "Lock Ratio", + "showProgressImages": "Show Progress Images", + "swapSizes": "Swap Sizes" + }, + "unifiedCanvas": { + "accept": "Accept", + "activeLayer": "Active Layer", + "antialiasing": "Antialiasing", + "autoSaveToGallery": "Auto Save to Gallery", + "base": "Base", + "betaClear": "Clear", + "betaDarkenOutside": "Darken Outside", + "betaLimitToBox": "Limit To Box", + "betaPreserveMasked": "Preserve Masked", + "boundingBox": "Bounding Box", + "boundingBoxPosition": "Bounding Box Position", + "brush": "Brush", + "brushOptions": "Brush Options", + "brushSize": "Size", + "canvasDimensions": "Canvas Dimensions", + "canvasPosition": "Canvas Position", + "canvasScale": "Canvas Scale", + "canvasSettings": "Canvas Settings", + "clearCanvas": "Clear Canvas", + "clearCanvasHistory": "Clear Canvas History", + "clearCanvasHistoryConfirm": "Are you sure you want to clear the canvas history?", + "clearCanvasHistoryMessage": "Clearing the canvas history leaves your current canvas intact, but irreversibly clears the undo and redo history.", + "clearHistory": "Clear History", + "clearMask": "Clear Mask (Shift+C)", + "colorPicker": "Color Picker", + "copyToClipboard": "Copy to Clipboard", + "cursorPosition": "Cursor Position", + "darkenOutsideSelection": "Darken Outside Selection", + "discardAll": "Discard All", + "downloadAsImage": "Download As Image", + "emptyFolder": "Empty Folder", + "emptyTempImageFolder": "Empty Temp Image Folder", + "emptyTempImagesFolderConfirm": "Are you sure you want to empty the temp folder?", + "emptyTempImagesFolderMessage": "Emptying the temp image folder also fully resets the Unified Canvas. This includes all undo/redo history, images in the staging area, and the canvas base layer.", + "enableMask": "Enable Mask", + "eraseBoundingBox": "Erase Bounding Box", + "eraser": "Eraser", + "fillBoundingBox": "Fill Bounding Box", + "layer": "Layer", + "limitStrokesToBox": "Limit Strokes to Box", + "mask": "Mask", + "maskingOptions": "Masking Options", + "mergeVisible": "Merge Visible", + "move": "Move", + "next": "Next", + "preserveMaskedArea": "Preserve Masked Area", + "previous": "Previous", + "redo": "Redo", + "resetView": "Reset View", + "saveBoxRegionOnly": "Save Box Region Only", + "saveMask": "Save $t(unifiedCanvas.mask)", + "saveToGallery": "Save To Gallery", + "scaledBoundingBox": "Scaled Bounding Box", + "showCanvasDebugInfo": "Show Additional Canvas Info", + "showGrid": "Show Grid", + "showHide": "Show/Hide", + "showResultsOn": "Show Results (On)", + "showResultsOff": "Show Results (Off)", + "showIntermediates": "Show Intermediates", + "snapToGrid": "Snap to Grid", + "undo": "Undo" + }, + "workflows": { + "workflows": "Workflows", + "workflowLibrary": "Library", + "userWorkflows": "My Workflows", + "defaultWorkflows": "Default Workflows", + "openWorkflow": "Open Workflow", + "uploadWorkflow": "Load from File", + "deleteWorkflow": "Delete Workflow", + "unnamedWorkflow": "Unnamed Workflow", + "downloadWorkflow": "Save to File", + "saveWorkflow": "Save Workflow", + "saveWorkflowAs": "Save Workflow As", + "savingWorkflow": "Saving Workflow...", + "problemSavingWorkflow": "Problem Saving Workflow", + "workflowSaved": "Workflow Saved", + "noRecentWorkflows": "No Recent Workflows", + "noUserWorkflows": "No User Workflows", + "noSystemWorkflows": "No System Workflows", + "problemLoading": "Problem Loading Workflows", + "loading": "Loading Workflows", + "noDescription": "No description", + "searchWorkflows": "Search Workflows", + "clearWorkflowSearchFilter": "Clear Workflow Search Filter", + "workflowName": "Workflow Name", + "newWorkflowCreated": "New Workflow Created", + "workflowEditorMenu": "Workflow Editor Menu", + "workflowIsOpen": "Workflow is Open" + }, + "app": { + "storeNotInitialized": "Store is not initialized" + } +} diff --git a/invokeai/frontend/web/dist/locales/es.json b/invokeai/frontend/web/dist/locales/es.json new file mode 100644 index 0000000000..4ce0072517 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/es.json @@ -0,0 +1,732 @@ +{ + "common": { + "hotkeysLabel": "Atajos de teclado", + "languagePickerLabel": "Selector de idioma", + "reportBugLabel": "Reportar errores", + "settingsLabel": "Ajustes", + "img2img": "Imagen a Imagen", + "unifiedCanvas": "Lienzo Unificado", + "nodes": "Editor del flujo de trabajo", + "langSpanish": "Español", + "nodesDesc": "Un sistema de generación de imágenes basado en nodos, actualmente se encuentra en desarrollo. Mantente pendiente a nuestras actualizaciones acerca de esta fabulosa funcionalidad.", + "postProcessing": "Post-procesamiento", + "postProcessDesc1": "Invoke AI ofrece una gran variedad de funciones de post-procesamiento, El aumento de tamaño y Restauración de Rostros ya se encuentran disponibles en la interfaz web, puedes acceder desde el menú de Opciones Avanzadas en las pestañas de Texto a Imagen y de Imagen a Imagen. También puedes acceder a estas funciones directamente mediante el botón de acciones en el menú superior de la imagen actual o en el visualizador.", + "postProcessDesc2": "Una interfaz de usuario dedicada se lanzará pronto para facilitar flujos de trabajo de postprocesamiento más avanzado.", + "postProcessDesc3": "La Interfaz de Línea de Comandos de Invoke AI ofrece muchas otras características, incluyendo -Embiggen-.", + "training": "Entrenamiento", + "trainingDesc1": "Un flujo de trabajo dedicado para el entrenamiento de sus propios -embeddings- y puntos de control utilizando Inversión Textual y Dreambooth desde la interfaz web.", + "trainingDesc2": "InvokeAI ya admite el entrenamiento de incrustaciones personalizadas mediante la inversión textual mediante el script principal.", + "upload": "Subir imagen", + "close": "Cerrar", + "load": "Cargar", + "statusConnected": "Conectado", + "statusDisconnected": "Desconectado", + "statusError": "Error", + "statusPreparing": "Preparando", + "statusProcessingCanceled": "Procesamiento Cancelado", + "statusProcessingComplete": "Procesamiento Completo", + "statusGenerating": "Generando", + "statusGeneratingTextToImage": "Generando Texto a Imagen", + "statusGeneratingImageToImage": "Generando Imagen a Imagen", + "statusGeneratingInpainting": "Generando pintura interior", + "statusGeneratingOutpainting": "Generando pintura exterior", + "statusGenerationComplete": "Generación Completa", + "statusIterationComplete": "Iteración Completa", + "statusSavingImage": "Guardando Imagen", + "statusRestoringFaces": "Restaurando Rostros", + "statusRestoringFacesGFPGAN": "Restaurando Rostros (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restaurando Rostros (CodeFormer)", + "statusUpscaling": "Aumentando Tamaño", + "statusUpscalingESRGAN": "Restaurando Rostros(ESRGAN)", + "statusLoadingModel": "Cargando Modelo", + "statusModelChanged": "Modelo cambiado", + "statusMergedModels": "Modelos combinados", + "githubLabel": "Github", + "discordLabel": "Discord", + "langEnglish": "Inglés", + "langDutch": "Holandés", + "langFrench": "Francés", + "langGerman": "Alemán", + "langItalian": "Italiano", + "langArabic": "Árabe", + "langJapanese": "Japones", + "langPolish": "Polaco", + "langBrPortuguese": "Portugués brasileño", + "langRussian": "Ruso", + "langSimplifiedChinese": "Chino simplificado", + "langUkranian": "Ucraniano", + "back": "Atrás", + "statusConvertingModel": "Convertir el modelo", + "statusModelConverted": "Modelo adaptado", + "statusMergingModels": "Fusionar modelos", + "langPortuguese": "Portugués", + "langKorean": "Coreano", + "langHebrew": "Hebreo", + "loading": "Cargando", + "loadingInvokeAI": "Cargando invocar a la IA", + "postprocessing": "Tratamiento posterior", + "txt2img": "De texto a imagen", + "accept": "Aceptar", + "cancel": "Cancelar", + "linear": "Lineal", + "random": "Aleatorio", + "generate": "Generar", + "openInNewTab": "Abrir en una nueva pestaña", + "dontAskMeAgain": "No me preguntes de nuevo", + "areYouSure": "¿Estas seguro?", + "imagePrompt": "Indicación de imagen", + "batch": "Administrador de lotes", + "darkMode": "Modo oscuro", + "lightMode": "Modo claro", + "modelManager": "Administrador de modelos", + "communityLabel": "Comunidad" + }, + "gallery": { + "generations": "Generaciones", + "showGenerations": "Mostrar Generaciones", + "uploads": "Subidas de archivos", + "showUploads": "Mostar Subidas", + "galleryImageSize": "Tamaño de la imagen", + "galleryImageResetSize": "Restablecer tamaño de la imagen", + "gallerySettings": "Ajustes de la galería", + "maintainAspectRatio": "Mantener relación de aspecto", + "autoSwitchNewImages": "Auto seleccionar Imágenes nuevas", + "singleColumnLayout": "Diseño de una columna", + "allImagesLoaded": "Todas las imágenes cargadas", + "loadMore": "Cargar más", + "noImagesInGallery": "No hay imágenes para mostrar", + "deleteImage": "Eliminar Imagen", + "deleteImageBin": "Las imágenes eliminadas se enviarán a la papelera de tu sistema operativo.", + "deleteImagePermanent": "Las imágenes eliminadas no se pueden restaurar.", + "assets": "Activos", + "autoAssignBoardOnClick": "Asignación automática de tableros al hacer clic" + }, + "hotkeys": { + "keyboardShortcuts": "Atajos de teclado", + "appHotkeys": "Atajos de applicación", + "generalHotkeys": "Atajos generales", + "galleryHotkeys": "Atajos de galería", + "unifiedCanvasHotkeys": "Atajos de lienzo unificado", + "invoke": { + "title": "Invocar", + "desc": "Generar una imagen" + }, + "cancel": { + "title": "Cancelar", + "desc": "Cancelar el proceso de generación de imagen" + }, + "focusPrompt": { + "title": "Mover foco a Entrada de texto", + "desc": "Mover foco hacia el campo de texto de la Entrada" + }, + "toggleOptions": { + "title": "Alternar opciones", + "desc": "Mostar y ocultar el panel de opciones" + }, + "pinOptions": { + "title": "Fijar opciones", + "desc": "Fijar el panel de opciones" + }, + "toggleViewer": { + "title": "Alternar visor", + "desc": "Mostar y ocultar el visor de imágenes" + }, + "toggleGallery": { + "title": "Alternar galería", + "desc": "Mostar y ocultar la galería de imágenes" + }, + "maximizeWorkSpace": { + "title": "Maximizar espacio de trabajo", + "desc": "Cerrar otros páneles y maximizar el espacio de trabajo" + }, + "changeTabs": { + "title": "Cambiar", + "desc": "Cambiar entre áreas de trabajo" + }, + "consoleToggle": { + "title": "Alternar consola", + "desc": "Mostar y ocultar la consola" + }, + "setPrompt": { + "title": "Establecer Entrada", + "desc": "Usar el texto de entrada de la imagen actual" + }, + "setSeed": { + "title": "Establecer semilla", + "desc": "Usar la semilla de la imagen actual" + }, + "setParameters": { + "title": "Establecer parámetros", + "desc": "Usar todos los parámetros de la imagen actual" + }, + "restoreFaces": { + "title": "Restaurar rostros", + "desc": "Restaurar rostros en la imagen actual" + }, + "upscale": { + "title": "Aumentar resolución", + "desc": "Aumentar la resolución de la imagen actual" + }, + "showInfo": { + "title": "Mostrar información", + "desc": "Mostar metadatos de la imagen actual" + }, + "sendToImageToImage": { + "title": "Enviar hacia Imagen a Imagen", + "desc": "Enviar imagen actual hacia Imagen a Imagen" + }, + "deleteImage": { + "title": "Eliminar imagen", + "desc": "Eliminar imagen actual" + }, + "closePanels": { + "title": "Cerrar páneles", + "desc": "Cerrar los páneles abiertos" + }, + "previousImage": { + "title": "Imagen anterior", + "desc": "Muetra la imagen anterior en la galería" + }, + "nextImage": { + "title": "Imagen siguiente", + "desc": "Muetra la imagen siguiente en la galería" + }, + "toggleGalleryPin": { + "title": "Alternar fijado de galería", + "desc": "Fijar o desfijar la galería en la interfaz" + }, + "increaseGalleryThumbSize": { + "title": "Aumentar imagen en galería", + "desc": "Aumenta el tamaño de las miniaturas de la galería" + }, + "decreaseGalleryThumbSize": { + "title": "Reducir imagen en galería", + "desc": "Reduce el tamaño de las miniaturas de la galería" + }, + "selectBrush": { + "title": "Seleccionar pincel", + "desc": "Selecciona el pincel en el lienzo" + }, + "selectEraser": { + "title": "Seleccionar borrador", + "desc": "Selecciona el borrador en el lienzo" + }, + "decreaseBrushSize": { + "title": "Disminuir tamaño de herramienta", + "desc": "Disminuye el tamaño del pincel/borrador en el lienzo" + }, + "increaseBrushSize": { + "title": "Aumentar tamaño del pincel", + "desc": "Aumenta el tamaño del pincel en el lienzo" + }, + "decreaseBrushOpacity": { + "title": "Disminuir opacidad del pincel", + "desc": "Disminuye la opacidad del pincel en el lienzo" + }, + "increaseBrushOpacity": { + "title": "Aumentar opacidad del pincel", + "desc": "Aumenta la opacidad del pincel en el lienzo" + }, + "moveTool": { + "title": "Herramienta de movimiento", + "desc": "Permite navegar por el lienzo" + }, + "fillBoundingBox": { + "title": "Rellenar Caja contenedora", + "desc": "Rellena la caja contenedora con el color seleccionado" + }, + "eraseBoundingBox": { + "title": "Borrar Caja contenedora", + "desc": "Borra el contenido dentro de la caja contenedora" + }, + "colorPicker": { + "title": "Selector de color", + "desc": "Selecciona un color del lienzo" + }, + "toggleSnap": { + "title": "Alternar ajuste de cuadrícula", + "desc": "Activa o desactiva el ajuste automático a la cuadrícula" + }, + "quickToggleMove": { + "title": "Alternar movimiento rápido", + "desc": "Activa momentáneamente la herramienta de movimiento" + }, + "toggleLayer": { + "title": "Alternar capa", + "desc": "Alterna entre las capas de máscara y base" + }, + "clearMask": { + "title": "Limpiar máscara", + "desc": "Limpia toda la máscara actual" + }, + "hideMask": { + "title": "Ocultar máscara", + "desc": "Oculta o muetre la máscara actual" + }, + "showHideBoundingBox": { + "title": "Alternar caja contenedora", + "desc": "Muestra u oculta la caja contenedora" + }, + "mergeVisible": { + "title": "Consolida capas visibles", + "desc": "Consolida todas las capas visibles en una sola" + }, + "saveToGallery": { + "title": "Guardar en galería", + "desc": "Guardar la imagen actual del lienzo en la galería" + }, + "copyToClipboard": { + "title": "Copiar al portapapeles", + "desc": "Copiar el lienzo actual al portapapeles" + }, + "downloadImage": { + "title": "Descargar imagen", + "desc": "Descargar la imagen actual del lienzo" + }, + "undoStroke": { + "title": "Deshar trazo", + "desc": "Desahacer el último trazo del pincel" + }, + "redoStroke": { + "title": "Rehacer trazo", + "desc": "Rehacer el último trazo del pincel" + }, + "resetView": { + "title": "Restablecer vista", + "desc": "Restablecer la vista del lienzo" + }, + "previousStagingImage": { + "title": "Imagen anterior", + "desc": "Imagen anterior en el área de preparación" + }, + "nextStagingImage": { + "title": "Imagen siguiente", + "desc": "Siguiente imagen en el área de preparación" + }, + "acceptStagingImage": { + "title": "Aceptar imagen", + "desc": "Aceptar la imagen actual en el área de preparación" + }, + "addNodes": { + "title": "Añadir Nodos", + "desc": "Abre el menú para añadir nodos" + }, + "nodesHotkeys": "Teclas de acceso rápido a los nodos" + }, + "modelManager": { + "modelManager": "Gestor de Modelos", + "model": "Modelo", + "modelAdded": "Modelo añadido", + "modelUpdated": "Modelo actualizado", + "modelEntryDeleted": "Endrada de Modelo eliminada", + "cannotUseSpaces": "No se pueden usar Spaces", + "addNew": "Añadir nuevo", + "addNewModel": "Añadir nuevo modelo", + "addManually": "Añadir manualmente", + "manual": "Manual", + "name": "Nombre", + "nameValidationMsg": "Introduce un nombre para tu modelo", + "description": "Descripción", + "descriptionValidationMsg": "Introduce una descripción para tu modelo", + "config": "Configurar", + "configValidationMsg": "Ruta del archivo de configuración del modelo.", + "modelLocation": "Ubicación del Modelo", + "modelLocationValidationMsg": "Ruta del archivo de modelo.", + "vaeLocation": "Ubicación VAE", + "vaeLocationValidationMsg": "Ruta del archivo VAE.", + "width": "Ancho", + "widthValidationMsg": "Ancho predeterminado de tu modelo.", + "height": "Alto", + "heightValidationMsg": "Alto predeterminado de tu modelo.", + "addModel": "Añadir Modelo", + "updateModel": "Actualizar Modelo", + "availableModels": "Modelos disponibles", + "search": "Búsqueda", + "load": "Cargar", + "active": "activo", + "notLoaded": "no cargado", + "cached": "en caché", + "checkpointFolder": "Directorio de Checkpoint", + "clearCheckpointFolder": "Limpiar directorio de checkpoint", + "findModels": "Buscar modelos", + "scanAgain": "Escanear de nuevo", + "modelsFound": "Modelos encontrados", + "selectFolder": "Selecciona un directorio", + "selected": "Seleccionado", + "selectAll": "Seleccionar todo", + "deselectAll": "Deseleccionar todo", + "showExisting": "Mostrar existentes", + "addSelected": "Añadir seleccionados", + "modelExists": "Modelo existente", + "selectAndAdd": "Selecciona de la lista un modelo para añadir", + "noModelsFound": "No se encontró ningún modelo", + "delete": "Eliminar", + "deleteModel": "Eliminar Modelo", + "deleteConfig": "Eliminar Configuración", + "deleteMsg1": "¿Estás seguro de que deseas eliminar este modelo de InvokeAI?", + "deleteMsg2": "Esto eliminará el modelo del disco si está en la carpeta raíz de InvokeAI. Si está utilizando una ubicación personalizada, el modelo NO se eliminará del disco.", + "safetensorModels": "SafeTensors", + "addDiffuserModel": "Añadir difusores", + "inpainting": "v1 Repintado", + "repoIDValidationMsg": "Repositorio en línea de tu modelo", + "checkpointModels": "Puntos de control", + "convertToDiffusersHelpText4": "Este proceso se realiza una sola vez. Puede tardar entre 30 y 60 segundos dependiendo de las especificaciones de tu ordenador.", + "diffusersModels": "Difusores", + "addCheckpointModel": "Agregar modelo de punto de control/Modelo Safetensor", + "vaeRepoID": "Identificador del repositorio de VAE", + "vaeRepoIDValidationMsg": "Repositorio en línea de tú VAE", + "formMessageDiffusersModelLocation": "Difusores Modelo Ubicación", + "formMessageDiffusersModelLocationDesc": "Por favor, introduzca al menos uno.", + "formMessageDiffusersVAELocation": "Ubicación VAE", + "formMessageDiffusersVAELocationDesc": "Si no se proporciona, InvokeAI buscará el archivo VAE dentro de la ubicación del modelo indicada anteriormente.", + "convert": "Convertir", + "convertToDiffusers": "Convertir en difusores", + "convertToDiffusersHelpText1": "Este modelo se convertirá al formato 🧨 Difusores.", + "convertToDiffusersHelpText2": "Este proceso sustituirá su entrada del Gestor de Modelos por la versión de Difusores del mismo modelo.", + "convertToDiffusersHelpText3": "Tu archivo del punto de control en el disco se eliminará si está en la carpeta raíz de InvokeAI. Si está en una ubicación personalizada, NO se eliminará.", + "convertToDiffusersHelpText5": "Por favor, asegúrate de tener suficiente espacio en el disco. Los modelos generalmente varían entre 2 GB y 7 GB de tamaño.", + "convertToDiffusersHelpText6": "¿Desea transformar este modelo?", + "convertToDiffusersSaveLocation": "Guardar ubicación", + "v1": "v1", + "statusConverting": "Adaptar", + "modelConverted": "Modelo adaptado", + "sameFolder": "La misma carpeta", + "invokeRoot": "Carpeta InvokeAI", + "custom": "Personalizado", + "customSaveLocation": "Ubicación personalizada para guardar", + "merge": "Fusión", + "modelsMerged": "Modelos fusionados", + "mergeModels": "Combinar modelos", + "modelOne": "Modelo 1", + "modelTwo": "Modelo 2", + "modelThree": "Modelo 3", + "mergedModelName": "Nombre del modelo combinado", + "alpha": "Alfa", + "interpolationType": "Tipo de interpolación", + "mergedModelSaveLocation": "Guardar ubicación", + "mergedModelCustomSaveLocation": "Ruta personalizada", + "invokeAIFolder": "Invocar carpeta de la inteligencia artificial", + "modelMergeHeaderHelp2": "Sólo se pueden fusionar difusores. Si desea fusionar un modelo de punto de control, conviértalo primero en difusores.", + "modelMergeAlphaHelp": "Alfa controla la fuerza de mezcla de los modelos. Los valores alfa más bajos reducen la influencia del segundo modelo.", + "modelMergeInterpAddDifferenceHelp": "En este modo, el Modelo 3 se sustrae primero del Modelo 2. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente.", + "ignoreMismatch": "Ignorar discrepancias entre modelos seleccionados", + "modelMergeHeaderHelp1": "Puede unir hasta tres modelos diferentes para crear una combinación que se adapte a sus necesidades.", + "inverseSigmoid": "Sigmoideo inverso", + "weightedSum": "Modelo de suma ponderada", + "sigmoid": "Función sigmoide", + "allModels": "Todos los modelos", + "repo_id": "Identificador del repositorio", + "pathToCustomConfig": "Ruta a la configuración personalizada", + "customConfig": "Configuración personalizada", + "v2_base": "v2 (512px)", + "none": "ninguno", + "pickModelType": "Elige el tipo de modelo", + "v2_768": "v2 (768px)", + "addDifference": "Añadir una diferencia", + "scanForModels": "Buscar modelos", + "vae": "VAE", + "variant": "Variante", + "baseModel": "Modelo básico", + "modelConversionFailed": "Conversión al modelo fallida", + "selectModel": "Seleccionar un modelo", + "modelUpdateFailed": "Error al actualizar el modelo", + "modelsMergeFailed": "Fusión del modelo fallida", + "convertingModelBegin": "Convirtiendo el modelo. Por favor, espere.", + "modelDeleted": "Modelo eliminado", + "modelDeleteFailed": "Error al borrar el modelo", + "noCustomLocationProvided": "‐No se proporcionó una ubicación personalizada", + "importModels": "Importar los modelos", + "settings": "Ajustes", + "syncModels": "Sincronizar las plantillas", + "syncModelsDesc": "Si tus plantillas no están sincronizados con el backend, puedes actualizarlas usando esta opción. Esto suele ser útil en los casos en los que actualizas manualmente tu archivo models.yaml o añades plantillas a la carpeta raíz de InvokeAI después de que la aplicación haya arrancado.", + "modelsSynced": "Plantillas sincronizadas", + "modelSyncFailed": "La sincronización de la plantilla falló", + "loraModels": "LoRA", + "onnxModels": "Onnx", + "oliveModels": "Olives" + }, + "parameters": { + "images": "Imágenes", + "steps": "Pasos", + "cfgScale": "Escala CFG", + "width": "Ancho", + "height": "Alto", + "seed": "Semilla", + "randomizeSeed": "Semilla aleatoria", + "shuffle": "Semilla aleatoria", + "noiseThreshold": "Umbral de Ruido", + "perlinNoise": "Ruido Perlin", + "variations": "Variaciones", + "variationAmount": "Cantidad de Variación", + "seedWeights": "Peso de las semillas", + "faceRestoration": "Restauración de Rostros", + "restoreFaces": "Restaurar rostros", + "type": "Tipo", + "strength": "Fuerza", + "upscaling": "Aumento de resolución", + "upscale": "Aumentar resolución", + "upscaleImage": "Aumentar la resolución de la imagen", + "scale": "Escala", + "otherOptions": "Otras opciones", + "seamlessTiling": "Mosaicos sin parches", + "hiresOptim": "Optimización de Alta Resolución", + "imageFit": "Ajuste tamaño de imagen inicial al tamaño objetivo", + "codeformerFidelity": "Fidelidad", + "scaleBeforeProcessing": "Redimensionar antes de procesar", + "scaledWidth": "Ancho escalado", + "scaledHeight": "Alto escalado", + "infillMethod": "Método de relleno", + "tileSize": "Tamaño del mosaico", + "boundingBoxHeader": "Caja contenedora", + "seamCorrectionHeader": "Corrección de parches", + "infillScalingHeader": "Remplazo y escalado", + "img2imgStrength": "Peso de Imagen a Imagen", + "toggleLoopback": "Alternar Retroalimentación", + "sendTo": "Enviar a", + "sendToImg2Img": "Enviar a Imagen a Imagen", + "sendToUnifiedCanvas": "Enviar a Lienzo Unificado", + "copyImageToLink": "Copiar imagen a enlace", + "downloadImage": "Descargar imagen", + "openInViewer": "Abrir en Visor", + "closeViewer": "Cerrar Visor", + "usePrompt": "Usar Entrada", + "useSeed": "Usar Semilla", + "useAll": "Usar Todo", + "useInitImg": "Usar Imagen Inicial", + "info": "Información", + "initialImage": "Imagen Inicial", + "showOptionsPanel": "Mostrar panel de opciones", + "symmetry": "Simetría", + "vSymmetryStep": "Paso de simetría V", + "hSymmetryStep": "Paso de simetría H", + "cancel": { + "immediate": "Cancelar inmediatamente", + "schedule": "Cancelar tras la iteración actual", + "isScheduled": "Cancelando", + "setType": "Tipo de cancelación" + }, + "copyImage": "Copiar la imagen", + "general": "General", + "imageToImage": "Imagen a imagen", + "denoisingStrength": "Intensidad de la eliminación del ruido", + "hiresStrength": "Alta resistencia", + "showPreview": "Mostrar la vista previa", + "hidePreview": "Ocultar la vista previa", + "noiseSettings": "Ruido", + "seamlessXAxis": "Eje x", + "seamlessYAxis": "Eje y", + "scheduler": "Programador", + "boundingBoxWidth": "Anchura del recuadro", + "boundingBoxHeight": "Altura del recuadro", + "positivePromptPlaceholder": "Prompt Positivo", + "negativePromptPlaceholder": "Prompt Negativo", + "controlNetControlMode": "Modo de control", + "clipSkip": "Omitir el CLIP", + "aspectRatio": "Relación", + "maskAdjustmentsHeader": "Ajustes de la máscara", + "maskBlur": "Difuminar", + "maskBlurMethod": "Método del desenfoque", + "seamHighThreshold": "Alto", + "seamLowThreshold": "Bajo", + "coherencePassHeader": "Parámetros de la coherencia", + "compositingSettingsHeader": "Ajustes de la composición", + "coherenceSteps": "Pasos", + "coherenceStrength": "Fuerza", + "patchmatchDownScaleSize": "Reducir a escala", + "coherenceMode": "Modo" + }, + "settings": { + "models": "Modelos", + "displayInProgress": "Mostrar las imágenes del progreso", + "saveSteps": "Guardar imágenes cada n pasos", + "confirmOnDelete": "Confirmar antes de eliminar", + "displayHelpIcons": "Mostrar iconos de ayuda", + "enableImageDebugging": "Habilitar depuración de imágenes", + "resetWebUI": "Restablecer interfaz web", + "resetWebUIDesc1": "Al restablecer la interfaz web, solo se restablece la caché local del navegador de sus imágenes y la configuración guardada. No se elimina ninguna imagen de su disco duro.", + "resetWebUIDesc2": "Si las imágenes no se muestran en la galería o algo más no funciona, intente restablecer antes de reportar un incidente en GitHub.", + "resetComplete": "Se ha restablecido la interfaz web.", + "useSlidersForAll": "Utilice controles deslizantes para todas las opciones", + "general": "General", + "consoleLogLevel": "Nivel del registro", + "shouldLogToConsole": "Registro de la consola", + "developer": "Desarrollador", + "antialiasProgressImages": "Imágenes del progreso de Antialias", + "showProgressInViewer": "Mostrar las imágenes del progreso en el visor", + "ui": "Interfaz del usuario", + "generation": "Generación", + "favoriteSchedulers": "Programadores favoritos", + "favoriteSchedulersPlaceholder": "No hay programadores favoritos", + "showAdvancedOptions": "Mostrar las opciones avanzadas", + "alternateCanvasLayout": "Diseño alternativo del lienzo", + "beta": "Beta", + "enableNodesEditor": "Activar el editor de nodos", + "experimental": "Experimental", + "autoChangeDimensions": "Actualiza W/H a los valores predeterminados del modelo cuando se modifica" + }, + "toast": { + "tempFoldersEmptied": "Directorio temporal vaciado", + "uploadFailed": "Error al subir archivo", + "uploadFailedUnableToLoadDesc": "No se pudo cargar la imágen", + "downloadImageStarted": "Descargando imágen", + "imageCopied": "Imágen copiada", + "imageLinkCopied": "Enlace de imágen copiado", + "imageNotLoaded": "No se cargó la imágen", + "imageNotLoadedDesc": "No se pudo encontrar la imagen", + "imageSavedToGallery": "Imágen guardada en la galería", + "canvasMerged": "Lienzo consolidado", + "sentToImageToImage": "Enviar hacia Imagen a Imagen", + "sentToUnifiedCanvas": "Enviar hacia Lienzo Consolidado", + "parametersSet": "Parámetros establecidos", + "parametersNotSet": "Parámetros no establecidos", + "parametersNotSetDesc": "No se encontraron metadatos para esta imágen.", + "parametersFailed": "Error cargando parámetros", + "parametersFailedDesc": "No fue posible cargar la imagen inicial.", + "seedSet": "Semilla establecida", + "seedNotSet": "Semilla no establecida", + "seedNotSetDesc": "No se encontró una semilla para esta imágen.", + "promptSet": "Entrada establecida", + "promptNotSet": "Entrada no establecida", + "promptNotSetDesc": "No se encontró una entrada para esta imágen.", + "upscalingFailed": "Error al aumentar tamaño de imagn", + "faceRestoreFailed": "Restauración de rostro fallida", + "metadataLoadFailed": "Error al cargar metadatos", + "initialImageSet": "Imágen inicial establecida", + "initialImageNotSet": "Imagen inicial no establecida", + "initialImageNotSetDesc": "Error al establecer la imágen inicial", + "serverError": "Error en el servidor", + "disconnected": "Desconectado del servidor", + "canceled": "Procesando la cancelación", + "connected": "Conectado al servidor", + "problemCopyingImageLink": "No se puede copiar el enlace de la imagen", + "uploadFailedInvalidUploadDesc": "Debe ser una sola imagen PNG o JPEG", + "parameterSet": "Conjunto de parámetros", + "parameterNotSet": "Parámetro no configurado", + "nodesSaved": "Nodos guardados", + "nodesLoadedFailed": "Error al cargar los nodos", + "nodesLoaded": "Nodos cargados", + "problemCopyingImage": "No se puede copiar la imagen", + "nodesNotValidJSON": "JSON no válido", + "nodesCorruptedGraph": "No se puede cargar. El gráfico parece estar dañado.", + "nodesUnrecognizedTypes": "No se puede cargar. El gráfico tiene tipos no reconocidos", + "nodesNotValidGraph": "Gráfico del nodo InvokeAI no válido", + "nodesBrokenConnections": "No se puede cargar. Algunas conexiones están rotas." + }, + "tooltip": { + "feature": { + "prompt": "Este campo tomará todo el texto de entrada, incluidos tanto los términos de contenido como los estilísticos. Si bien se pueden incluir pesos en la solicitud, los comandos/parámetros estándar de línea de comandos no funcionarán.", + "gallery": "Conforme se generan nuevas invocaciones, los archivos del directorio de salida se mostrarán aquí. Las generaciones tienen opciones adicionales para configurar nuevas generaciones.", + "other": "Estas opciones habilitarán modos de procesamiento alternativos para Invoke. 'Seamless mosaico' creará patrones repetitivos en la salida. 'Alta resolución' es la generación en dos pasos con img2img: use esta configuración cuando desee una imagen más grande y más coherente sin artefactos. tomar más tiempo de lo habitual txt2img.", + "seed": "Los valores de semilla proporcionan un conjunto inicial de ruido que guían el proceso de eliminación de ruido y se pueden aleatorizar o rellenar con una semilla de una invocación anterior. La función Umbral se puede usar para mitigar resultados indeseables a valores CFG más altos (intente entre 0-10), y Perlin se puede usar para agregar ruido Perlin al proceso de eliminación de ruido. Ambos sirven para agregar variación a sus salidas.", + "variations": "Pruebe una variación con una cantidad entre 0 y 1 para cambiar la imagen de salida para la semilla establecida. Se encuentran variaciones interesantes en la semilla entre 0.1 y 0.3.", + "upscale": "Usando ESRGAN, puede aumentar la resolución de salida sin requerir un ancho/alto más alto en la generación inicial.", + "faceCorrection": "Usando GFPGAN o Codeformer, la corrección de rostros intentará identificar rostros en las salidas y corregir cualquier defecto/anormalidad. Los valores de fuerza más altos aplicarán una presión correctiva más fuerte en las salidas, lo que resultará en rostros más atractivos. Con Codeformer, una mayor fidelidad intentará preservar la imagen original, a expensas de la fuerza de corrección de rostros.", + "imageToImage": "Imagen a Imagen permite cargar una imagen inicial, que InvokeAI usará para guiar el proceso de generación, junto con una solicitud. Un valor más bajo para esta configuración se parecerá más a la imagen original. Se aceptan valores entre 0-1, y se recomienda un rango de .25-.75", + "boundingBox": "La caja delimitadora es análoga a las configuraciones de Ancho y Alto para Texto a Imagen o Imagen a Imagen. Solo se procesará el área en la caja.", + "seamCorrection": "Controla el manejo de parches visibles que pueden ocurrir cuando se pega una imagen generada de nuevo en el lienzo.", + "infillAndScaling": "Administra los métodos de relleno (utilizados en áreas enmascaradas o borradas del lienzo) y la escala (útil para tamaños de caja delimitadora pequeños)." + } + }, + "unifiedCanvas": { + "layer": "Capa", + "base": "Base", + "mask": "Máscara", + "maskingOptions": "Opciones de máscara", + "enableMask": "Habilitar Máscara", + "preserveMaskedArea": "Preservar área enmascarada", + "clearMask": "Limpiar máscara", + "brush": "Pincel", + "eraser": "Borrador", + "fillBoundingBox": "Rellenar Caja Contenedora", + "eraseBoundingBox": "Eliminar Caja Contenedora", + "colorPicker": "Selector de color", + "brushOptions": "Opciones de pincel", + "brushSize": "Tamaño", + "move": "Mover", + "resetView": "Restablecer vista", + "mergeVisible": "Consolidar vista", + "saveToGallery": "Guardar en galería", + "copyToClipboard": "Copiar al portapapeles", + "downloadAsImage": "Descargar como imagen", + "undo": "Deshacer", + "redo": "Rehacer", + "clearCanvas": "Limpiar lienzo", + "canvasSettings": "Ajustes de lienzo", + "showIntermediates": "Mostrar intermedios", + "showGrid": "Mostrar cuadrícula", + "snapToGrid": "Ajustar a cuadrícula", + "darkenOutsideSelection": "Oscurecer fuera de la selección", + "autoSaveToGallery": "Guardar automáticamente en galería", + "saveBoxRegionOnly": "Guardar solo región dentro de la caja", + "limitStrokesToBox": "Limitar trazos a la caja", + "showCanvasDebugInfo": "Mostrar la información adicional del lienzo", + "clearCanvasHistory": "Limpiar historial de lienzo", + "clearHistory": "Limpiar historial", + "clearCanvasHistoryMessage": "Limpiar el historial de lienzo también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", + "clearCanvasHistoryConfirm": "¿Está seguro de que desea limpiar el historial del lienzo?", + "emptyTempImageFolder": "Vaciar directorio de imágenes temporales", + "emptyFolder": "Vaciar directorio", + "emptyTempImagesFolderMessage": "Vaciar el directorio de imágenes temporales también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", + "emptyTempImagesFolderConfirm": "¿Está seguro de que desea vaciar el directorio temporal?", + "activeLayer": "Capa activa", + "canvasScale": "Escala de lienzo", + "boundingBox": "Caja contenedora", + "scaledBoundingBox": "Caja contenedora escalada", + "boundingBoxPosition": "Posición de caja contenedora", + "canvasDimensions": "Dimensiones de lienzo", + "canvasPosition": "Posición de lienzo", + "cursorPosition": "Posición del cursor", + "previous": "Anterior", + "next": "Siguiente", + "accept": "Aceptar", + "showHide": "Mostrar/Ocultar", + "discardAll": "Descartar todo", + "betaClear": "Limpiar", + "betaDarkenOutside": "Oscurecer fuera", + "betaLimitToBox": "Limitar a caja", + "betaPreserveMasked": "Preservar área enmascarada", + "antialiasing": "Suavizado" + }, + "accessibility": { + "invokeProgressBar": "Activar la barra de progreso", + "modelSelect": "Seleccionar modelo", + "reset": "Reiniciar", + "uploadImage": "Cargar imagen", + "previousImage": "Imagen anterior", + "nextImage": "Siguiente imagen", + "useThisParameter": "Utiliza este parámetro", + "copyMetadataJson": "Copiar los metadatos JSON", + "exitViewer": "Salir del visor", + "zoomIn": "Acercar", + "zoomOut": "Alejar", + "rotateCounterClockwise": "Girar en sentido antihorario", + "rotateClockwise": "Girar en sentido horario", + "flipHorizontally": "Voltear horizontalmente", + "flipVertically": "Voltear verticalmente", + "modifyConfig": "Modificar la configuración", + "toggleAutoscroll": "Activar el autodesplazamiento", + "toggleLogViewer": "Alternar el visor de registros", + "showOptionsPanel": "Mostrar el panel lateral", + "menu": "Menú" + }, + "ui": { + "hideProgressImages": "Ocultar el progreso de la imagen", + "showProgressImages": "Mostrar el progreso de la imagen", + "swapSizes": "Cambiar los tamaños", + "lockRatio": "Proporción del bloqueo" + }, + "nodes": { + "showGraphNodes": "Mostrar la superposición de los gráficos", + "zoomInNodes": "Acercar", + "hideMinimapnodes": "Ocultar el minimapa", + "fitViewportNodes": "Ajustar la vista", + "zoomOutNodes": "Alejar", + "hideGraphNodes": "Ocultar la superposición de los gráficos", + "hideLegendNodes": "Ocultar la leyenda del tipo de campo", + "showLegendNodes": "Mostrar la leyenda del tipo de campo", + "showMinimapnodes": "Mostrar el minimapa", + "reloadNodeTemplates": "Recargar las plantillas de nodos", + "loadWorkflow": "Cargar el flujo de trabajo", + "downloadWorkflow": "Descargar el flujo de trabajo en un archivo JSON" + } +} diff --git a/invokeai/frontend/web/dist/locales/fi.json b/invokeai/frontend/web/dist/locales/fi.json new file mode 100644 index 0000000000..cf7fc6701b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/fi.json @@ -0,0 +1,114 @@ +{ + "accessibility": { + "reset": "Resetoi", + "useThisParameter": "Käytä tätä parametria", + "modelSelect": "Mallin Valinta", + "exitViewer": "Poistu katselimesta", + "uploadImage": "Lataa kuva", + "copyMetadataJson": "Kopioi metadata JSON:iin", + "invokeProgressBar": "Invoken edistymispalkki", + "nextImage": "Seuraava kuva", + "previousImage": "Edellinen kuva", + "zoomIn": "Lähennä", + "flipHorizontally": "Käännä vaakasuoraan", + "zoomOut": "Loitonna", + "rotateCounterClockwise": "Kierrä vastapäivään", + "rotateClockwise": "Kierrä myötäpäivään", + "flipVertically": "Käännä pystysuoraan", + "modifyConfig": "Muokkaa konfiguraatiota", + "toggleAutoscroll": "Kytke automaattinen vieritys", + "toggleLogViewer": "Kytke lokin katselutila", + "showOptionsPanel": "Näytä asetukset" + }, + "common": { + "postProcessDesc2": "Erillinen käyttöliittymä tullaan julkaisemaan helpottaaksemme työnkulkua jälkikäsittelyssä.", + "training": "Kouluta", + "statusLoadingModel": "Ladataan mallia", + "statusModelChanged": "Malli vaihdettu", + "statusConvertingModel": "Muunnetaan mallia", + "statusModelConverted": "Malli muunnettu", + "langFrench": "Ranska", + "langItalian": "Italia", + "languagePickerLabel": "Kielen valinta", + "hotkeysLabel": "Pikanäppäimet", + "reportBugLabel": "Raportoi Bugista", + "langPolish": "Puola", + "langDutch": "Hollanti", + "settingsLabel": "Asetukset", + "githubLabel": "Github", + "langGerman": "Saksa", + "langPortuguese": "Portugali", + "discordLabel": "Discord", + "langEnglish": "Englanti", + "langRussian": "Venäjä", + "langUkranian": "Ukraina", + "langSpanish": "Espanja", + "upload": "Lataa", + "statusMergedModels": "Mallit yhdistelty", + "img2img": "Kuva kuvaksi", + "nodes": "Solmut", + "nodesDesc": "Solmupohjainen järjestelmä kuvien generoimiseen on parhaillaan kehitteillä. Pysy kuulolla päivityksistä tähän uskomattomaan ominaisuuteen liittyen.", + "postProcessDesc1": "Invoke AI tarjoaa monenlaisia jälkikäsittelyominaisuukisa. Kuvan laadun skaalaus sekä kasvojen korjaus ovat jo saatavilla WebUI:ssä. Voit ottaa ne käyttöön lisäasetusten valikosta teksti kuvaksi sekä kuva kuvaksi -välilehdiltä. Voit myös suoraan prosessoida kuvia käyttämällä kuvan toimintapainikkeita nykyisen kuvan yläpuolella tai tarkastelussa.", + "postprocessing": "Jälkikäsitellään", + "postProcessing": "Jälkikäsitellään", + "cancel": "Peruuta", + "close": "Sulje", + "accept": "Hyväksy", + "statusConnected": "Yhdistetty", + "statusError": "Virhe", + "statusProcessingComplete": "Prosessointi valmis", + "load": "Lataa", + "back": "Takaisin", + "statusGeneratingTextToImage": "Generoidaan tekstiä kuvaksi", + "trainingDesc2": "InvokeAI tukee jo mukautettujen upotusten kouluttamista tekstin inversiolla käyttäen pääskriptiä.", + "statusDisconnected": "Yhteys katkaistu", + "statusPreparing": "Valmistellaan", + "statusIterationComplete": "Iteraatio valmis", + "statusMergingModels": "Yhdistellään malleja", + "statusProcessingCanceled": "Valmistelu peruutettu", + "statusSavingImage": "Tallennetaan kuvaa", + "statusGeneratingImageToImage": "Generoidaan kuvaa kuvaksi", + "statusRestoringFacesGFPGAN": "Korjataan kasvoja (GFPGAN)", + "statusRestoringFacesCodeFormer": "Korjataan kasvoja (CodeFormer)", + "statusGeneratingInpainting": "Generoidaan sisällemaalausta", + "statusGeneratingOutpainting": "Generoidaan ulosmaalausta", + "statusRestoringFaces": "Korjataan kasvoja", + "loadingInvokeAI": "Ladataan Invoke AI:ta", + "loading": "Ladataan", + "statusGenerating": "Generoidaan", + "txt2img": "Teksti kuvaksi", + "trainingDesc1": "Erillinen työnkulku omien upotusten ja tarkastuspisteiden kouluttamiseksi käyttäen tekstin inversiota ja dreamboothia selaimen käyttöliittymässä.", + "postProcessDesc3": "Invoke AI:n komentorivi tarjoaa paljon muita ominaisuuksia, kuten esimerkiksi Embiggenin.", + "unifiedCanvas": "Yhdistetty kanvas", + "statusGenerationComplete": "Generointi valmis" + }, + "gallery": { + "uploads": "Lataukset", + "showUploads": "Näytä lataukset", + "galleryImageResetSize": "Resetoi koko", + "maintainAspectRatio": "Säilytä kuvasuhde", + "galleryImageSize": "Kuvan koko", + "showGenerations": "Näytä generaatiot", + "singleColumnLayout": "Yhden sarakkeen asettelu", + "generations": "Generoinnit", + "gallerySettings": "Gallerian asetukset", + "autoSwitchNewImages": "Vaihda uusiin kuviin automaattisesti", + "allImagesLoaded": "Kaikki kuvat ladattu", + "noImagesInGallery": "Ei kuvia galleriassa", + "loadMore": "Lataa lisää" + }, + "hotkeys": { + "keyboardShortcuts": "näppäimistön pikavalinnat", + "appHotkeys": "Sovelluksen pikanäppäimet", + "generalHotkeys": "Yleiset pikanäppäimet", + "galleryHotkeys": "Gallerian pikanäppäimet", + "unifiedCanvasHotkeys": "Yhdistetyn kanvaan pikanäppäimet", + "cancel": { + "desc": "Peruuta kuvan luominen", + "title": "Peruuta" + }, + "invoke": { + "desc": "Luo kuva" + } + } +} diff --git a/invokeai/frontend/web/dist/locales/fr.json b/invokeai/frontend/web/dist/locales/fr.json new file mode 100644 index 0000000000..b7ab932fcc --- /dev/null +++ b/invokeai/frontend/web/dist/locales/fr.json @@ -0,0 +1,531 @@ +{ + "common": { + "hotkeysLabel": "Raccourcis clavier", + "languagePickerLabel": "Sélecteur de langue", + "reportBugLabel": "Signaler un bug", + "settingsLabel": "Paramètres", + "img2img": "Image en image", + "unifiedCanvas": "Canvas unifié", + "nodes": "Nœuds", + "langFrench": "Français", + "nodesDesc": "Un système basé sur les nœuds pour la génération d'images est actuellement en développement. Restez à l'écoute pour des mises à jour à ce sujet.", + "postProcessing": "Post-traitement", + "postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu 'Options avancées' des onglets 'Texte vers image' et 'Image vers image'. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image au-dessus de l'affichage d'image actuel ou dans le visualiseur.", + "postProcessDesc2": "Une interface dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.", + "postProcessDesc3": "L'interface en ligne de commande d'Invoke AI offre diverses autres fonctionnalités, notamment Embiggen.", + "training": "Formation", + "trainingDesc1": "Un workflow dédié pour former vos propres embeddings et checkpoints en utilisant Textual Inversion et Dreambooth depuis l'interface web.", + "trainingDesc2": "InvokeAI prend déjà en charge la formation d'embeddings personnalisés en utilisant Textual Inversion en utilisant le script principal.", + "upload": "Télécharger", + "close": "Fermer", + "load": "Charger", + "back": "Retour", + "statusConnected": "En ligne", + "statusDisconnected": "Hors ligne", + "statusError": "Erreur", + "statusPreparing": "Préparation", + "statusProcessingCanceled": "Traitement annulé", + "statusProcessingComplete": "Traitement terminé", + "statusGenerating": "Génération", + "statusGeneratingTextToImage": "Génération Texte vers Image", + "statusGeneratingImageToImage": "Génération Image vers Image", + "statusGeneratingInpainting": "Génération de réparation", + "statusGeneratingOutpainting": "Génération de complétion", + "statusGenerationComplete": "Génération terminée", + "statusIterationComplete": "Itération terminée", + "statusSavingImage": "Sauvegarde de l'image", + "statusRestoringFaces": "Restauration des visages", + "statusRestoringFacesGFPGAN": "Restauration des visages (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restauration des visages (CodeFormer)", + "statusUpscaling": "Mise à échelle", + "statusUpscalingESRGAN": "Mise à échelle (ESRGAN)", + "statusLoadingModel": "Chargement du modèle", + "statusModelChanged": "Modèle changé", + "discordLabel": "Discord", + "githubLabel": "Github", + "accept": "Accepter", + "statusMergingModels": "Mélange des modèles", + "loadingInvokeAI": "Chargement de Invoke AI", + "cancel": "Annuler", + "langEnglish": "Anglais", + "statusConvertingModel": "Conversion du modèle", + "statusModelConverted": "Modèle converti", + "loading": "Chargement", + "statusMergedModels": "Modèles mélangés", + "txt2img": "Texte vers image", + "postprocessing": "Post-Traitement" + }, + "gallery": { + "generations": "Générations", + "showGenerations": "Afficher les générations", + "uploads": "Téléchargements", + "showUploads": "Afficher les téléchargements", + "galleryImageSize": "Taille de l'image", + "galleryImageResetSize": "Réinitialiser la taille", + "gallerySettings": "Paramètres de la galerie", + "maintainAspectRatio": "Maintenir le rapport d'aspect", + "autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images", + "singleColumnLayout": "Mise en page en colonne unique", + "allImagesLoaded": "Toutes les images chargées", + "loadMore": "Charger plus", + "noImagesInGallery": "Aucune image dans la galerie" + }, + "hotkeys": { + "keyboardShortcuts": "Raccourcis clavier", + "appHotkeys": "Raccourcis de l'application", + "generalHotkeys": "Raccourcis généraux", + "galleryHotkeys": "Raccourcis de la galerie", + "unifiedCanvasHotkeys": "Raccourcis du canvas unifié", + "invoke": { + "title": "Invoquer", + "desc": "Générer une image" + }, + "cancel": { + "title": "Annuler", + "desc": "Annuler la génération d'image" + }, + "focusPrompt": { + "title": "Prompt de focus", + "desc": "Mettre en focus la zone de saisie de la commande" + }, + "toggleOptions": { + "title": "Affichage des options", + "desc": "Afficher et masquer le panneau d'options" + }, + "pinOptions": { + "title": "Epinglage des options", + "desc": "Epingler le panneau d'options" + }, + "toggleViewer": { + "title": "Affichage de la visionneuse", + "desc": "Afficher et masquer la visionneuse d'image" + }, + "toggleGallery": { + "title": "Affichage de la galerie", + "desc": "Afficher et masquer la galerie" + }, + "maximizeWorkSpace": { + "title": "Maximiser la zone de travail", + "desc": "Fermer les panneaux et maximiser la zone de travail" + }, + "changeTabs": { + "title": "Changer d'onglet", + "desc": "Passer à un autre espace de travail" + }, + "consoleToggle": { + "title": "Affichage de la console", + "desc": "Afficher et masquer la console" + }, + "setPrompt": { + "title": "Définir le prompt", + "desc": "Utiliser le prompt de l'image actuelle" + }, + "setSeed": { + "title": "Définir la graine", + "desc": "Utiliser la graine de l'image actuelle" + }, + "setParameters": { + "title": "Définir les paramètres", + "desc": "Utiliser tous les paramètres de l'image actuelle" + }, + "restoreFaces": { + "title": "Restaurer les visages", + "desc": "Restaurer l'image actuelle" + }, + "upscale": { + "title": "Agrandir", + "desc": "Agrandir l'image actuelle" + }, + "showInfo": { + "title": "Afficher les informations", + "desc": "Afficher les informations de métadonnées de l'image actuelle" + }, + "sendToImageToImage": { + "title": "Envoyer à l'image à l'image", + "desc": "Envoyer l'image actuelle à l'image à l'image" + }, + "deleteImage": { + "title": "Supprimer l'image", + "desc": "Supprimer l'image actuelle" + }, + "closePanels": { + "title": "Fermer les panneaux", + "desc": "Fermer les panneaux ouverts" + }, + "previousImage": { + "title": "Image précédente", + "desc": "Afficher l'image précédente dans la galerie" + }, + "nextImage": { + "title": "Image suivante", + "desc": "Afficher l'image suivante dans la galerie" + }, + "toggleGalleryPin": { + "title": "Activer/désactiver l'épinglage de la galerie", + "desc": "Épingle ou dépingle la galerie à l'interface" + }, + "increaseGalleryThumbSize": { + "title": "Augmenter la taille des miniatures de la galerie", + "desc": "Augmente la taille des miniatures de la galerie" + }, + "decreaseGalleryThumbSize": { + "title": "Diminuer la taille des miniatures de la galerie", + "desc": "Diminue la taille des miniatures de la galerie" + }, + "selectBrush": { + "title": "Sélectionner un pinceau", + "desc": "Sélectionne le pinceau de la toile" + }, + "selectEraser": { + "title": "Sélectionner un gomme", + "desc": "Sélectionne la gomme de la toile" + }, + "decreaseBrushSize": { + "title": "Diminuer la taille du pinceau", + "desc": "Diminue la taille du pinceau/gomme de la toile" + }, + "increaseBrushSize": { + "title": "Augmenter la taille du pinceau", + "desc": "Augmente la taille du pinceau/gomme de la toile" + }, + "decreaseBrushOpacity": { + "title": "Diminuer l'opacité du pinceau", + "desc": "Diminue l'opacité du pinceau de la toile" + }, + "increaseBrushOpacity": { + "title": "Augmenter l'opacité du pinceau", + "desc": "Augmente l'opacité du pinceau de la toile" + }, + "moveTool": { + "title": "Outil de déplacement", + "desc": "Permet la navigation sur la toile" + }, + "fillBoundingBox": { + "title": "Remplir la boîte englobante", + "desc": "Remplit la boîte englobante avec la couleur du pinceau" + }, + "eraseBoundingBox": { + "title": "Effacer la boîte englobante", + "desc": "Efface la zone de la boîte englobante" + }, + "colorPicker": { + "title": "Sélectionnez le sélecteur de couleur", + "desc": "Sélectionne le sélecteur de couleur de la toile" + }, + "toggleSnap": { + "title": "Basculer Snap", + "desc": "Basculer Snap à la grille" + }, + "quickToggleMove": { + "title": "Basculer rapidement déplacer", + "desc": "Basculer temporairement le mode Déplacer" + }, + "toggleLayer": { + "title": "Basculer la couche", + "desc": "Basculer la sélection de la couche masque/base" + }, + "clearMask": { + "title": "Effacer le masque", + "desc": "Effacer entièrement le masque" + }, + "hideMask": { + "title": "Masquer le masque", + "desc": "Masquer et démasquer le masque" + }, + "showHideBoundingBox": { + "title": "Afficher/Masquer la boîte englobante", + "desc": "Basculer la visibilité de la boîte englobante" + }, + "mergeVisible": { + "title": "Fusionner visible", + "desc": "Fusionner toutes les couches visibles de la toile" + }, + "saveToGallery": { + "title": "Enregistrer dans la galerie", + "desc": "Enregistrer la toile actuelle dans la galerie" + }, + "copyToClipboard": { + "title": "Copier dans le presse-papiers", + "desc": "Copier la toile actuelle dans le presse-papiers" + }, + "downloadImage": { + "title": "Télécharger l'image", + "desc": "Télécharger la toile actuelle" + }, + "undoStroke": { + "title": "Annuler le trait", + "desc": "Annuler un coup de pinceau" + }, + "redoStroke": { + "title": "Rétablir le trait", + "desc": "Rétablir un coup de pinceau" + }, + "resetView": { + "title": "Réinitialiser la vue", + "desc": "Réinitialiser la vue de la toile" + }, + "previousStagingImage": { + "title": "Image de mise en scène précédente", + "desc": "Image précédente de la zone de mise en scène" + }, + "nextStagingImage": { + "title": "Image de mise en scène suivante", + "desc": "Image suivante de la zone de mise en scène" + }, + "acceptStagingImage": { + "title": "Accepter l'image de mise en scène", + "desc": "Accepter l'image actuelle de la zone de mise en scène" + } + }, + "modelManager": { + "modelManager": "Gestionnaire de modèle", + "model": "Modèle", + "allModels": "Tous les modèles", + "checkpointModels": "Points de contrôle", + "diffusersModels": "Diffuseurs", + "safetensorModels": "SafeTensors", + "modelAdded": "Modèle ajouté", + "modelUpdated": "Modèle mis à jour", + "modelEntryDeleted": "Entrée de modèle supprimée", + "cannotUseSpaces": "Ne peut pas utiliser d'espaces", + "addNew": "Ajouter un nouveau", + "addNewModel": "Ajouter un nouveau modèle", + "addCheckpointModel": "Ajouter un modèle de point de contrôle / SafeTensor", + "addDiffuserModel": "Ajouter des diffuseurs", + "addManually": "Ajouter manuellement", + "manual": "Manuel", + "name": "Nom", + "nameValidationMsg": "Entrez un nom pour votre modèle", + "description": "Description", + "descriptionValidationMsg": "Ajoutez une description pour votre modèle", + "config": "Config", + "configValidationMsg": "Chemin vers le fichier de configuration de votre modèle.", + "modelLocation": "Emplacement du modèle", + "modelLocationValidationMsg": "Chemin vers où votre modèle est situé localement.", + "repo_id": "ID de dépôt", + "repoIDValidationMsg": "Dépôt en ligne de votre modèle", + "vaeLocation": "Emplacement VAE", + "vaeLocationValidationMsg": "Chemin vers où votre VAE est situé.", + "vaeRepoID": "ID de dépôt VAE", + "vaeRepoIDValidationMsg": "Dépôt en ligne de votre VAE", + "width": "Largeur", + "widthValidationMsg": "Largeur par défaut de votre modèle.", + "height": "Hauteur", + "heightValidationMsg": "Hauteur par défaut de votre modèle.", + "addModel": "Ajouter un modèle", + "updateModel": "Mettre à jour le modèle", + "availableModels": "Modèles disponibles", + "search": "Rechercher", + "load": "Charger", + "active": "actif", + "notLoaded": "non chargé", + "cached": "en cache", + "checkpointFolder": "Dossier de point de contrôle", + "clearCheckpointFolder": "Effacer le dossier de point de contrôle", + "findModels": "Trouver des modèles", + "scanAgain": "Scanner à nouveau", + "modelsFound": "Modèles trouvés", + "selectFolder": "Sélectionner un dossier", + "selected": "Sélectionné", + "selectAll": "Tout sélectionner", + "deselectAll": "Tout désélectionner", + "showExisting": "Afficher existant", + "addSelected": "Ajouter sélectionné", + "modelExists": "Modèle existant", + "selectAndAdd": "Sélectionner et ajouter les modèles listés ci-dessous", + "noModelsFound": "Aucun modèle trouvé", + "delete": "Supprimer", + "deleteModel": "Supprimer le modèle", + "deleteConfig": "Supprimer la configuration", + "deleteMsg1": "Voulez-vous vraiment supprimer cette entrée de modèle dans InvokeAI ?", + "deleteMsg2": "Cela n'effacera pas le fichier de point de contrôle du modèle de votre disque. Vous pouvez les réajouter si vous le souhaitez.", + "formMessageDiffusersModelLocation": "Emplacement du modèle de diffuseurs", + "formMessageDiffusersModelLocationDesc": "Veuillez en entrer au moins un.", + "formMessageDiffusersVAELocation": "Emplacement VAE", + "formMessageDiffusersVAELocationDesc": "Si non fourni, InvokeAI recherchera le fichier VAE à l'emplacement du modèle donné ci-dessus." + }, + "parameters": { + "images": "Images", + "steps": "Etapes", + "cfgScale": "CFG Echelle", + "width": "Largeur", + "height": "Hauteur", + "seed": "Graine", + "randomizeSeed": "Graine Aléatoire", + "shuffle": "Mélanger", + "noiseThreshold": "Seuil de Bruit", + "perlinNoise": "Bruit de Perlin", + "variations": "Variations", + "variationAmount": "Montant de Variation", + "seedWeights": "Poids des Graines", + "faceRestoration": "Restauration de Visage", + "restoreFaces": "Restaurer les Visages", + "type": "Type", + "strength": "Force", + "upscaling": "Agrandissement", + "upscale": "Agrandir", + "upscaleImage": "Image en Agrandissement", + "scale": "Echelle", + "otherOptions": "Autres Options", + "seamlessTiling": "Carreau Sans Joint", + "hiresOptim": "Optimisation Haute Résolution", + "imageFit": "Ajuster Image Initiale à la Taille de Sortie", + "codeformerFidelity": "Fidélité", + "scaleBeforeProcessing": "Echelle Avant Traitement", + "scaledWidth": "Larg. Échelle", + "scaledHeight": "Haut. Échelle", + "infillMethod": "Méthode de Remplissage", + "tileSize": "Taille des Tuiles", + "boundingBoxHeader": "Boîte Englobante", + "seamCorrectionHeader": "Correction des Joints", + "infillScalingHeader": "Remplissage et Mise à l'Échelle", + "img2imgStrength": "Force de l'Image à l'Image", + "toggleLoopback": "Activer/Désactiver la Boucle", + "sendTo": "Envoyer à", + "sendToImg2Img": "Envoyer à Image à Image", + "sendToUnifiedCanvas": "Envoyer au Canvas Unifié", + "copyImage": "Copier Image", + "copyImageToLink": "Copier l'Image en Lien", + "downloadImage": "Télécharger Image", + "openInViewer": "Ouvrir dans le visualiseur", + "closeViewer": "Fermer le visualiseur", + "usePrompt": "Utiliser la suggestion", + "useSeed": "Utiliser la graine", + "useAll": "Tout utiliser", + "useInitImg": "Utiliser l'image initiale", + "info": "Info", + "initialImage": "Image initiale", + "showOptionsPanel": "Afficher le panneau d'options" + }, + "settings": { + "models": "Modèles", + "displayInProgress": "Afficher les images en cours", + "saveSteps": "Enregistrer les images tous les n étapes", + "confirmOnDelete": "Confirmer la suppression", + "displayHelpIcons": "Afficher les icônes d'aide", + "enableImageDebugging": "Activer le débogage d'image", + "resetWebUI": "Réinitialiser l'interface Web", + "resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.", + "resetWebUIDesc2": "Si les images ne s'affichent pas dans la galerie ou si quelque chose d'autre ne fonctionne pas, veuillez essayer de réinitialiser avant de soumettre une demande sur GitHub.", + "resetComplete": "L'interface Web a été réinitialisée. Rafraîchissez la page pour recharger." + }, + "toast": { + "tempFoldersEmptied": "Dossiers temporaires vidés", + "uploadFailed": "Téléchargement échoué", + "uploadFailedUnableToLoadDesc": "Impossible de charger le fichier", + "downloadImageStarted": "Téléchargement de l'image démarré", + "imageCopied": "Image copiée", + "imageLinkCopied": "Lien d'image copié", + "imageNotLoaded": "Aucune image chargée", + "imageNotLoadedDesc": "Aucune image trouvée pour envoyer à module d'image", + "imageSavedToGallery": "Image enregistrée dans la galerie", + "canvasMerged": "Canvas fusionné", + "sentToImageToImage": "Envoyé à Image à Image", + "sentToUnifiedCanvas": "Envoyé à Canvas unifié", + "parametersSet": "Paramètres définis", + "parametersNotSet": "Paramètres non définis", + "parametersNotSetDesc": "Aucune métadonnée trouvée pour cette image.", + "parametersFailed": "Problème de chargement des paramètres", + "parametersFailedDesc": "Impossible de charger l'image d'initiation.", + "seedSet": "Graine définie", + "seedNotSet": "Graine non définie", + "seedNotSetDesc": "Impossible de trouver la graine pour cette image.", + "promptSet": "Invite définie", + "promptNotSet": "Invite non définie", + "promptNotSetDesc": "Impossible de trouver l'invite pour cette image.", + "upscalingFailed": "Échec de la mise à l'échelle", + "faceRestoreFailed": "Échec de la restauration du visage", + "metadataLoadFailed": "Échec du chargement des métadonnées", + "initialImageSet": "Image initiale définie", + "initialImageNotSet": "Image initiale non définie", + "initialImageNotSetDesc": "Impossible de charger l'image initiale" + }, + "tooltip": { + "feature": { + "prompt": "Ceci est le champ prompt. Le prompt inclut des objets de génération et des termes stylistiques. Vous pouvez également ajouter un poids (importance du jeton) dans le prompt, mais les commandes CLI et les paramètres ne fonctionneront pas.", + "gallery": "La galerie affiche les générations à partir du dossier de sortie à mesure qu'elles sont créées. Les paramètres sont stockés dans des fichiers et accessibles via le menu contextuel.", + "other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img : utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.", + "seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération : les deux servent à ajouter de la variété à vos sorties.", + "variations": "Essayez une variation avec une valeur comprise entre 0,1 et 1,0 pour changer le résultat pour une graine donnée. Des variations intéressantes de la graine sont entre 0,1 et 0,3.", + "upscale": "Utilisez ESRGAN pour agrandir l'image immédiatement après la génération.", + "faceCorrection": "Correction de visage avec GFPGAN ou Codeformer : l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.", + "imageToImage": "Image to Image charge n'importe quelle image en tant qu'initiale, qui est ensuite utilisée pour générer une nouvelle avec le prompt. Plus la valeur est élevée, plus l'image de résultat changera. Des valeurs de 0,0 à 1,0 sont possibles, la plage recommandée est de 0,25 à 0,75", + "boundingBox": "La boîte englobante est la même que les paramètres Largeur et Hauteur pour Texte à Image ou Image à Image. Seulement la zone dans la boîte sera traitée.", + "seamCorrection": "Contrôle la gestion des coutures visibles qui se produisent entre les images générées sur la toile.", + "infillAndScaling": "Gérer les méthodes de remplissage (utilisées sur les zones masquées ou effacées de la toile) et le redimensionnement (utile pour les petites tailles de boîte englobante)." + } + }, + "unifiedCanvas": { + "layer": "Couche", + "base": "Base", + "mask": "Masque", + "maskingOptions": "Options de masquage", + "enableMask": "Activer le masque", + "preserveMaskedArea": "Préserver la zone masquée", + "clearMask": "Effacer le masque", + "brush": "Pinceau", + "eraser": "Gomme", + "fillBoundingBox": "Remplir la boîte englobante", + "eraseBoundingBox": "Effacer la boîte englobante", + "colorPicker": "Sélecteur de couleur", + "brushOptions": "Options de pinceau", + "brushSize": "Taille", + "move": "Déplacer", + "resetView": "Réinitialiser la vue", + "mergeVisible": "Fusionner les visibles", + "saveToGallery": "Enregistrer dans la galerie", + "copyToClipboard": "Copier dans le presse-papiers", + "downloadAsImage": "Télécharger en tant qu'image", + "undo": "Annuler", + "redo": "Refaire", + "clearCanvas": "Effacer le canvas", + "canvasSettings": "Paramètres du canvas", + "showIntermediates": "Afficher les intermédiaires", + "showGrid": "Afficher la grille", + "snapToGrid": "Aligner sur la grille", + "darkenOutsideSelection": "Assombrir à l'extérieur de la sélection", + "autoSaveToGallery": "Enregistrement automatique dans la galerie", + "saveBoxRegionOnly": "Enregistrer uniquement la région de la boîte", + "limitStrokesToBox": "Limiter les traits à la boîte", + "showCanvasDebugInfo": "Afficher les informations de débogage du canvas", + "clearCanvasHistory": "Effacer l'historique du canvas", + "clearHistory": "Effacer l'historique", + "clearCanvasHistoryMessage": "Effacer l'historique du canvas laisse votre canvas actuel intact, mais efface de manière irréversible l'historique annuler et refaire.", + "clearCanvasHistoryConfirm": "Voulez-vous vraiment effacer l'historique du canvas ?", + "emptyTempImageFolder": "Vider le dossier d'images temporaires", + "emptyFolder": "Vider le dossier", + "emptyTempImagesFolderMessage": "Vider le dossier d'images temporaires réinitialise également complètement le canvas unifié. Cela inclut tout l'historique annuler/refaire, les images dans la zone de mise en attente et la couche de base du canvas.", + "emptyTempImagesFolderConfirm": "Voulez-vous vraiment vider le dossier temporaire ?", + "activeLayer": "Calque actif", + "canvasScale": "Échelle du canevas", + "boundingBox": "Boîte englobante", + "scaledBoundingBox": "Boîte englobante mise à l'échelle", + "boundingBoxPosition": "Position de la boîte englobante", + "canvasDimensions": "Dimensions du canevas", + "canvasPosition": "Position du canevas", + "cursorPosition": "Position du curseur", + "previous": "Précédent", + "next": "Suivant", + "accept": "Accepter", + "showHide": "Afficher/Masquer", + "discardAll": "Tout abandonner", + "betaClear": "Effacer", + "betaDarkenOutside": "Assombrir à l'extérieur", + "betaLimitToBox": "Limiter à la boîte", + "betaPreserveMasked": "Conserver masqué" + }, + "accessibility": { + "uploadImage": "Charger une image", + "reset": "Réinitialiser", + "nextImage": "Image suivante", + "previousImage": "Image précédente", + "useThisParameter": "Utiliser ce paramètre", + "zoomIn": "Zoom avant", + "zoomOut": "Zoom arrière", + "showOptionsPanel": "Montrer la page d'options", + "modelSelect": "Choix du modèle", + "invokeProgressBar": "Barre de Progression Invoke", + "copyMetadataJson": "Copie des métadonnées JSON", + "menu": "Menu" + } +} diff --git a/invokeai/frontend/web/dist/locales/he.json b/invokeai/frontend/web/dist/locales/he.json new file mode 100644 index 0000000000..dfb5ea0360 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/he.json @@ -0,0 +1,575 @@ +{ + "modelManager": { + "cannotUseSpaces": "לא ניתן להשתמש ברווחים", + "addNew": "הוסף חדש", + "vaeLocationValidationMsg": "נתיב למקום שבו ממוקם ה- VAE שלך.", + "height": "גובה", + "load": "טען", + "search": "חיפוש", + "heightValidationMsg": "גובה ברירת המחדל של המודל שלך.", + "addNewModel": "הוסף מודל חדש", + "allModels": "כל המודלים", + "checkpointModels": "נקודות ביקורת", + "diffusersModels": "מפזרים", + "safetensorModels": "טנסורים בטוחים", + "modelAdded": "מודל התווסף", + "modelUpdated": "מודל עודכן", + "modelEntryDeleted": "רשומת המודל נמחקה", + "addCheckpointModel": "הוסף נקודת ביקורת / מודל טנסור בטוח", + "addDiffuserModel": "הוסף מפזרים", + "addManually": "הוספה ידנית", + "manual": "ידני", + "name": "שם", + "description": "תיאור", + "descriptionValidationMsg": "הוסף תיאור למודל שלך", + "config": "תצורה", + "configValidationMsg": "נתיב לקובץ התצורה של המודל שלך.", + "modelLocation": "מיקום המודל", + "modelLocationValidationMsg": "נתיב למקום שבו המודל שלך ממוקם באופן מקומי.", + "repo_id": "מזהה מאגר", + "repoIDValidationMsg": "מאגר מקוון של המודל שלך", + "vaeLocation": "מיקום VAE", + "vaeRepoIDValidationMsg": "המאגר המקוון של VAE שלך", + "width": "רוחב", + "widthValidationMsg": "רוחב ברירת המחדל של המודל שלך.", + "addModel": "הוסף מודל", + "updateModel": "עדכן מודל", + "active": "פעיל", + "modelsFound": "מודלים נמצאו", + "cached": "נשמר במטמון", + "checkpointFolder": "תיקיית נקודות ביקורת", + "findModels": "מצא מודלים", + "scanAgain": "סרוק מחדש", + "selectFolder": "בחירת תיקייה", + "selected": "נבחר", + "selectAll": "בחר הכל", + "deselectAll": "ביטול בחירת הכל", + "showExisting": "הצג קיים", + "addSelected": "הוסף פריטים שנבחרו", + "modelExists": "המודל קיים", + "selectAndAdd": "בחר והוסך מודלים המפורטים להלן", + "deleteModel": "מחיקת מודל", + "deleteConfig": "מחיקת תצורה", + "formMessageDiffusersModelLocation": "מיקום מפזרי המודל", + "formMessageDiffusersModelLocationDesc": "נא להזין לפחות אחד.", + "convertToDiffusersHelpText5": "אנא ודא/י שיש לך מספיק מקום בדיסק. גדלי מודלים בדרך כלל הינם בין 4GB-7GB.", + "convertToDiffusersHelpText1": "מודל זה יומר לפורמט 🧨 המפזרים.", + "convertToDiffusersHelpText2": "תהליך זה יחליף את הרשומה של מנהל המודלים שלך בגרסת המפזרים של אותו המודל.", + "convertToDiffusersHelpText6": "האם ברצונך להמיר מודל זה?", + "convertToDiffusersSaveLocation": "שמירת מיקום", + "inpainting": "v1 צביעת תוך", + "statusConverting": "ממיר", + "modelConverted": "מודל הומר", + "sameFolder": "אותה תיקיה", + "custom": "התאמה אישית", + "merge": "מזג", + "modelsMerged": "מודלים מוזגו", + "mergeModels": "מזג מודלים", + "modelOne": "מודל 1", + "customSaveLocation": "מיקום שמירה מותאם אישית", + "alpha": "אלפא", + "mergedModelSaveLocation": "שמירת מיקום", + "mergedModelCustomSaveLocation": "נתיב מותאם אישית", + "ignoreMismatch": "התעלמות מאי-התאמות בין מודלים שנבחרו", + "modelMergeHeaderHelp1": "ניתן למזג עד שלושה מודלים שונים כדי ליצור שילוב שמתאים לצרכים שלכם.", + "modelMergeAlphaHelp": "אלפא שולט בחוזק מיזוג עבור המודלים. ערכי אלפא נמוכים יותר מובילים להשפעה נמוכה יותר של המודל השני.", + "nameValidationMsg": "הכנס שם למודל שלך", + "vaeRepoID": "מזהה מאגר ה VAE", + "modelManager": "מנהל המודלים", + "model": "מודל", + "availableModels": "מודלים זמינים", + "notLoaded": "לא נטען", + "clearCheckpointFolder": "נקה את תיקיית נקודות הביקורת", + "noModelsFound": "לא נמצאו מודלים", + "delete": "מחיקה", + "deleteMsg1": "האם אתה בטוח שברצונך למחוק רשומת מודל זו מ- InvokeAI?", + "deleteMsg2": "פעולה זו לא תמחק את קובץ נקודת הביקורת מהדיסק שלך. ניתן לקרוא אותם מחדש במידת הצורך.", + "formMessageDiffusersVAELocation": "מיקום VAE", + "formMessageDiffusersVAELocationDesc": "במידה ולא מסופק, InvokeAI תחפש את קובץ ה-VAE במיקום המודל המופיע לעיל.", + "convertToDiffusers": "המרה למפזרים", + "convert": "המרה", + "modelTwo": "מודל 2", + "modelThree": "מודל 3", + "mergedModelName": "שם מודל ממוזג", + "v1": "v1", + "invokeRoot": "תיקיית InvokeAI", + "customConfig": "תצורה מותאמת אישית", + "pathToCustomConfig": "נתיב לתצורה מותאמת אישית", + "interpolationType": "סוג אינטרפולציה", + "invokeAIFolder": "תיקיית InvokeAI", + "sigmoid": "סיגמואיד", + "weightedSum": "סכום משוקלל", + "modelMergeHeaderHelp2": "רק מפזרים זמינים למיזוג. אם ברצונך למזג מודל של נקודת ביקורת, המר אותו תחילה למפזרים.", + "inverseSigmoid": "הפוך סיגמואיד", + "convertToDiffusersHelpText3": "קובץ נקודת הביקורת שלך בדיסק לא יימחק או ישונה בכל מקרה. אתה יכול להוסיף את נקודת הביקורת שלך למנהל המודלים שוב אם תרצה בכך.", + "convertToDiffusersHelpText4": "זהו תהליך חד פעמי בלבד. התהליך עשוי לקחת בסביבות 30-60 שניות, תלוי במפרט המחשב שלך.", + "modelMergeInterpAddDifferenceHelp": "במצב זה, מודל 3 מופחת תחילה ממודל 2. הגרסה המתקבלת משולבת עם מודל 1 עם קצב האלפא שנקבע לעיל." + }, + "common": { + "nodesDesc": "מערכת מבוססת צמתים עבור יצירת תמונות עדיין תחת פיתוח. השארו קשובים לעדכונים עבור הפיצ׳ר המדהים הזה.", + "languagePickerLabel": "בחירת שפה", + "githubLabel": "גיטהאב", + "discordLabel": "דיסקורד", + "settingsLabel": "הגדרות", + "langEnglish": "אנגלית", + "langDutch": "הולנדית", + "langArabic": "ערבית", + "langFrench": "צרפתית", + "langGerman": "גרמנית", + "langJapanese": "יפנית", + "langBrPortuguese": "פורטוגזית", + "langRussian": "רוסית", + "langSimplifiedChinese": "סינית", + "langUkranian": "אוקראינית", + "langSpanish": "ספרדית", + "img2img": "תמונה לתמונה", + "unifiedCanvas": "קנבס מאוחד", + "nodes": "צמתים", + "postProcessing": "לאחר עיבוד", + "postProcessDesc2": "תצוגה ייעודית תשוחרר בקרוב על מנת לתמוך בתהליכים ועיבודים מורכבים.", + "postProcessDesc3": "ממשק שורת הפקודה של Invoke AI מציע תכונות שונות אחרות כולל Embiggen.", + "close": "סגירה", + "statusConnected": "מחובר", + "statusDisconnected": "מנותק", + "statusError": "שגיאה", + "statusPreparing": "בהכנה", + "statusProcessingCanceled": "עיבוד בוטל", + "statusProcessingComplete": "עיבוד הסתיים", + "statusGenerating": "מייצר", + "statusGeneratingTextToImage": "מייצר טקסט לתמונה", + "statusGeneratingImageToImage": "מייצר תמונה לתמונה", + "statusGeneratingInpainting": "מייצר ציור לתוך", + "statusGeneratingOutpainting": "מייצר ציור החוצה", + "statusIterationComplete": "איטרציה הסתיימה", + "statusRestoringFaces": "משחזר פרצופים", + "statusRestoringFacesCodeFormer": "משחזר פרצופים (CodeFormer)", + "statusUpscaling": "העלאת קנה מידה", + "statusUpscalingESRGAN": "העלאת קנה מידה (ESRGAN)", + "statusModelChanged": "מודל השתנה", + "statusConvertingModel": "ממיר מודל", + "statusModelConverted": "מודל הומר", + "statusMergingModels": "מיזוג מודלים", + "statusMergedModels": "מודלים מוזגו", + "hotkeysLabel": "מקשים חמים", + "reportBugLabel": "דווח באג", + "langItalian": "איטלקית", + "upload": "העלאה", + "langPolish": "פולנית", + "training": "אימון", + "load": "טעינה", + "back": "אחורה", + "statusSavingImage": "שומר תמונה", + "statusGenerationComplete": "ייצור הסתיים", + "statusRestoringFacesGFPGAN": "משחזר פרצופים (GFPGAN)", + "statusLoadingModel": "טוען מודל", + "trainingDesc2": "InvokeAI כבר תומך באימון הטמעות מותאמות אישית באמצעות היפוך טקסט באמצעות הסקריפט הראשי.", + "postProcessDesc1": "InvokeAI מציעה מגוון רחב של תכונות עיבוד שלאחר. העלאת קנה מידה של תמונה ושחזור פנים כבר זמינים בממשק המשתמש. ניתן לגשת אליהם מתפריט 'אפשרויות מתקדמות' בכרטיסיות 'טקסט לתמונה' ו'תמונה לתמונה'. ניתן גם לעבד תמונות ישירות, באמצעות לחצני הפעולה של התמונה מעל תצוגת התמונה הנוכחית או בתוך המציג.", + "trainingDesc1": "תהליך עבודה ייעודי לאימון ההטמעות ונקודות הביקורת שלך באמצעות היפוך טקסט ו-Dreambooth מממשק המשתמש." + }, + "hotkeys": { + "toggleGallery": { + "desc": "פתח וסגור את מגירת הגלריה", + "title": "הצג את הגלריה" + }, + "keyboardShortcuts": "קיצורי מקלדת", + "appHotkeys": "קיצורי אפליקציה", + "generalHotkeys": "קיצורי דרך כלליים", + "galleryHotkeys": "קיצורי דרך של הגלריה", + "unifiedCanvasHotkeys": "קיצורי דרך לקנבס המאוחד", + "invoke": { + "title": "הפעל", + "desc": "צור תמונה" + }, + "focusPrompt": { + "title": "התמקדות על הבקשה", + "desc": "התמקדות על איזור הקלדת הבקשה" + }, + "toggleOptions": { + "desc": "פתח וסגור את פאנל ההגדרות", + "title": "הצג הגדרות" + }, + "pinOptions": { + "title": "הצמד הגדרות", + "desc": "הצמד את פאנל ההגדרות" + }, + "toggleViewer": { + "title": "הצג את חלון ההצגה", + "desc": "פתח וסגור את מציג התמונות" + }, + "changeTabs": { + "title": "החלף לשוניות", + "desc": "החלף לאיזור עבודה אחר" + }, + "consoleToggle": { + "desc": "פתח וסגור את הקונסול", + "title": "הצג קונסול" + }, + "setPrompt": { + "title": "הגדרת בקשה", + "desc": "שימוש בבקשה של התמונה הנוכחית" + }, + "restoreFaces": { + "desc": "שחזור התמונה הנוכחית", + "title": "שחזור פרצופים" + }, + "upscale": { + "title": "הגדלת קנה מידה", + "desc": "הגדל את התמונה הנוכחית" + }, + "showInfo": { + "title": "הצג מידע", + "desc": "הצגת פרטי מטא-נתונים של התמונה הנוכחית" + }, + "sendToImageToImage": { + "title": "שלח לתמונה לתמונה", + "desc": "שלח תמונה נוכחית לתמונה לתמונה" + }, + "deleteImage": { + "title": "מחק תמונה", + "desc": "מחק את התמונה הנוכחית" + }, + "closePanels": { + "title": "סגור לוחות", + "desc": "סוגר לוחות פתוחים" + }, + "previousImage": { + "title": "תמונה קודמת", + "desc": "הצג את התמונה הקודמת בגלריה" + }, + "toggleGalleryPin": { + "title": "הצג את מצמיד הגלריה", + "desc": "הצמדה וביטול הצמדה של הגלריה לממשק המשתמש" + }, + "decreaseGalleryThumbSize": { + "title": "הקטנת גודל תמונת גלריה", + "desc": "מקטין את גודל התמונות הממוזערות של הגלריה" + }, + "selectBrush": { + "desc": "בוחר את מברשת הקנבס", + "title": "בחר מברשת" + }, + "selectEraser": { + "title": "בחר מחק", + "desc": "בוחר את מחק הקנבס" + }, + "decreaseBrushSize": { + "title": "הקטנת גודל המברשת", + "desc": "מקטין את גודל מברשת הקנבס/מחק" + }, + "increaseBrushSize": { + "desc": "מגדיל את גודל מברשת הקנבס/מחק", + "title": "הגדלת גודל המברשת" + }, + "decreaseBrushOpacity": { + "title": "הפחת את אטימות המברשת", + "desc": "מקטין את האטימות של מברשת הקנבס" + }, + "increaseBrushOpacity": { + "title": "הגדל את אטימות המברשת", + "desc": "מגביר את האטימות של מברשת הקנבס" + }, + "moveTool": { + "title": "כלי הזזה", + "desc": "מאפשר ניווט על קנבס" + }, + "fillBoundingBox": { + "desc": "ממלא את התיבה התוחמת בצבע מברשת", + "title": "מילוי תיבה תוחמת" + }, + "eraseBoundingBox": { + "desc": "מוחק את אזור התיבה התוחמת", + "title": "מחק תיבה תוחמת" + }, + "colorPicker": { + "title": "בחר בבורר צבעים", + "desc": "בוחר את בורר צבעי הקנבס" + }, + "toggleSnap": { + "title": "הפעל הצמדה", + "desc": "מפעיל הצמדה לרשת" + }, + "quickToggleMove": { + "title": "הפעלה מהירה להזזה", + "desc": "מפעיל זמנית את מצב ההזזה" + }, + "toggleLayer": { + "title": "הפעל שכבה", + "desc": "הפעל בחירת שכבת בסיס/מסיכה" + }, + "clearMask": { + "title": "נקה מסיכה", + "desc": "נקה את כל המסכה" + }, + "hideMask": { + "desc": "הסתרה והצגה של מסיכה", + "title": "הסתר מסיכה" + }, + "showHideBoundingBox": { + "title": "הצגה/הסתרה של תיבה תוחמת", + "desc": "הפעל תצוגה של התיבה התוחמת" + }, + "mergeVisible": { + "title": "מיזוג תוכן גלוי", + "desc": "מיזוג כל השכבות הגלויות של הקנבס" + }, + "saveToGallery": { + "title": "שמור לגלריה", + "desc": "שמור את הקנבס הנוכחי בגלריה" + }, + "copyToClipboard": { + "title": "העתק ללוח ההדבקה", + "desc": "העתק את הקנבס הנוכחי ללוח ההדבקה" + }, + "downloadImage": { + "title": "הורד תמונה", + "desc": "הורד את הקנבס הנוכחי" + }, + "undoStroke": { + "title": "בטל משיכה", + "desc": "בטל משיכת מברשת" + }, + "redoStroke": { + "title": "בצע שוב משיכה", + "desc": "ביצוע מחדש של משיכת מברשת" + }, + "resetView": { + "title": "איפוס תצוגה", + "desc": "אפס תצוגת קנבס" + }, + "previousStagingImage": { + "desc": "תמונת אזור ההערכות הקודמת", + "title": "תמונת הערכות קודמת" + }, + "nextStagingImage": { + "title": "תמנות הערכות הבאה", + "desc": "תמונת אזור ההערכות הבאה" + }, + "acceptStagingImage": { + "desc": "אשר את תמונת איזור ההערכות הנוכחית", + "title": "אשר תמונת הערכות" + }, + "cancel": { + "desc": "ביטול יצירת תמונה", + "title": "ביטול" + }, + "maximizeWorkSpace": { + "title": "מקסם את איזור העבודה", + "desc": "סגור פאנלים ומקסם את איזור העבודה" + }, + "setSeed": { + "title": "הגדר זרע", + "desc": "השתמש בזרע התמונה הנוכחית" + }, + "setParameters": { + "title": "הגדרת פרמטרים", + "desc": "שימוש בכל הפרמטרים של התמונה הנוכחית" + }, + "increaseGalleryThumbSize": { + "title": "הגדל את גודל תמונת הגלריה", + "desc": "מגדיל את התמונות הממוזערות של הגלריה" + }, + "nextImage": { + "title": "תמונה הבאה", + "desc": "הצג את התמונה הבאה בגלריה" + } + }, + "gallery": { + "uploads": "העלאות", + "galleryImageSize": "גודל תמונה", + "gallerySettings": "הגדרות גלריה", + "maintainAspectRatio": "שמור על יחס רוחב-גובה", + "autoSwitchNewImages": "החלף אוטומטית לתמונות חדשות", + "singleColumnLayout": "תצוגת עמודה אחת", + "allImagesLoaded": "כל התמונות נטענו", + "loadMore": "טען עוד", + "noImagesInGallery": "אין תמונות בגלריה", + "galleryImageResetSize": "איפוס גודל", + "generations": "דורות", + "showGenerations": "הצג דורות", + "showUploads": "הצג העלאות" + }, + "parameters": { + "images": "תמונות", + "steps": "צעדים", + "cfgScale": "סולם CFG", + "width": "רוחב", + "height": "גובה", + "seed": "זרע", + "imageToImage": "תמונה לתמונה", + "randomizeSeed": "זרע אקראי", + "variationAmount": "כמות וריאציה", + "seedWeights": "משקלי זרע", + "faceRestoration": "שחזור פנים", + "restoreFaces": "שחזר פנים", + "type": "סוג", + "strength": "חוזק", + "upscale": "הגדלת קנה מידה", + "upscaleImage": "הגדלת קנה מידת התמונה", + "denoisingStrength": "חוזק מנטרל הרעש", + "otherOptions": "אפשרויות אחרות", + "hiresOptim": "אופטימיזצית רזולוציה גבוהה", + "hiresStrength": "חוזק רזולוציה גבוהה", + "codeformerFidelity": "דבקות", + "scaleBeforeProcessing": "שנה קנה מידה לפני עיבוד", + "scaledWidth": "קנה מידה לאחר שינוי W", + "scaledHeight": "קנה מידה לאחר שינוי H", + "infillMethod": "שיטת מילוי", + "tileSize": "גודל אריח", + "boundingBoxHeader": "תיבה תוחמת", + "seamCorrectionHeader": "תיקון תפר", + "infillScalingHeader": "מילוי וקנה מידה", + "toggleLoopback": "הפעל לולאה חוזרת", + "symmetry": "סימטריה", + "vSymmetryStep": "צעד סימטריה V", + "hSymmetryStep": "צעד סימטריה H", + "cancel": { + "schedule": "ביטול לאחר האיטרציה הנוכחית", + "isScheduled": "מבטל", + "immediate": "ביטול מיידי", + "setType": "הגדר סוג ביטול" + }, + "sendTo": "שליחה אל", + "copyImage": "העתקת תמונה", + "downloadImage": "הורדת תמונה", + "sendToImg2Img": "שליחה לתמונה לתמונה", + "sendToUnifiedCanvas": "שליחה אל קנבס מאוחד", + "openInViewer": "פתח במציג", + "closeViewer": "סגור מציג", + "usePrompt": "שימוש בבקשה", + "useSeed": "שימוש בזרע", + "useAll": "שימוש בהכל", + "useInitImg": "שימוש בתמונה ראשונית", + "info": "פרטים", + "showOptionsPanel": "הצג חלונית אפשרויות", + "shuffle": "ערבוב", + "noiseThreshold": "סף רעש", + "perlinNoise": "רעש פרלין", + "variations": "וריאציות", + "imageFit": "התאמת תמונה ראשונית לגודל הפלט", + "general": "כללי", + "upscaling": "מגדיל את קנה מידה", + "scale": "סולם", + "seamlessTiling": "ריצוף חלק", + "img2imgStrength": "חוזק תמונה לתמונה", + "initialImage": "תמונה ראשונית", + "copyImageToLink": "העתקת תמונה לקישור" + }, + "settings": { + "models": "מודלים", + "displayInProgress": "הצגת תמונות בתהליך", + "confirmOnDelete": "אישור בעת המחיקה", + "useSlidersForAll": "שימוש במחוונים לכל האפשרויות", + "resetWebUI": "איפוס ממשק משתמש", + "resetWebUIDesc1": "איפוס ממשק המשתמש האינטרנטי מאפס רק את המטמון המקומי של הדפדפן של התמונות וההגדרות שנשמרו. זה לא מוחק תמונות מהדיסק.", + "resetComplete": "ממשק המשתמש אופס. יש לבצע רענון דף בכדי לטעון אותו מחדש.", + "enableImageDebugging": "הפעלת איתור באגים בתמונה", + "displayHelpIcons": "הצג סמלי עזרה", + "saveSteps": "שמירת תמונות כל n צעדים", + "resetWebUIDesc2": "אם תמונות לא מופיעות בגלריה או שמשהו אחר לא עובד, נא לנסות איפוס /או אתחול לפני שליחת תקלה ב-GitHub." + }, + "toast": { + "uploadFailed": "העלאה נכשלה", + "imageCopied": "התמונה הועתקה", + "imageLinkCopied": "קישור תמונה הועתק", + "imageNotLoadedDesc": "לא נמצאה תמונה לשליחה למודול תמונה לתמונה", + "imageSavedToGallery": "התמונה נשמרה בגלריה", + "canvasMerged": "קנבס מוזג", + "sentToImageToImage": "נשלח לתמונה לתמונה", + "sentToUnifiedCanvas": "נשלח אל קנבס מאוחד", + "parametersSet": "הגדרת פרמטרים", + "parametersNotSet": "פרמטרים לא הוגדרו", + "parametersNotSetDesc": "לא נמצאו מטא-נתונים עבור תמונה זו.", + "parametersFailedDesc": "לא ניתן לטעון תמונת התחלה.", + "seedSet": "זרע הוגדר", + "seedNotSetDesc": "לא ניתן היה למצוא זרע לתמונה זו.", + "promptNotSetDesc": "לא היתה אפשרות למצוא בקשה עבור תמונה זו.", + "metadataLoadFailed": "טעינת מטא-נתונים נכשלה", + "initialImageSet": "סט תמונה ראשוני", + "initialImageNotSet": "התמונה הראשונית לא הוגדרה", + "initialImageNotSetDesc": "לא ניתן היה לטעון את התמונה הראשונית", + "uploadFailedUnableToLoadDesc": "לא ניתן לטעון את הקובץ", + "tempFoldersEmptied": "התיקייה הזמנית רוקנה", + "downloadImageStarted": "הורדת התמונה החלה", + "imageNotLoaded": "לא נטענה תמונה", + "parametersFailed": "בעיה בטעינת פרמטרים", + "promptNotSet": "בקשה לא הוגדרה", + "upscalingFailed": "העלאת קנה המידה נכשלה", + "faceRestoreFailed": "שחזור הפנים נכשל", + "seedNotSet": "זרע לא הוגדר", + "promptSet": "בקשה הוגדרה" + }, + "tooltip": { + "feature": { + "gallery": "הגלריה מציגה יצירות מתיקיית הפלטים בעת יצירתם. ההגדרות מאוחסנות בתוך קבצים ונגישות באמצעות תפריט הקשר.", + "upscale": "השתמש ב-ESRGAN כדי להגדיל את התמונה מיד לאחר היצירה.", + "imageToImage": "תמונה לתמונה טוענת כל תמונה כראשונית, המשמשת לאחר מכן ליצירת תמונה חדשה יחד עם הבקשה. ככל שהערך גבוה יותר, כך תמונת התוצאה תשתנה יותר. ערכים מ- 0.0 עד 1.0 אפשריים, הטווח המומלץ הוא .25-.75", + "seamCorrection": "שליטה בטיפול בתפרים גלויים המתרחשים בין תמונות שנוצרו על בד הציור.", + "prompt": "זהו שדה הבקשה. הבקשה כוללת אובייקטי יצירה ומונחים סגנוניים. באפשרותך להוסיף משקל (חשיבות אסימון) גם בשורת הפקודה, אך פקודות ופרמטרים של CLI לא יפעלו.", + "variations": "נסה וריאציה עם ערך בין 0.1 ל- 1.0 כדי לשנות את התוצאה עבור זרע נתון. וריאציות מעניינות של הזרע הן בין 0.1 ל -0.3.", + "other": "אפשרויות אלה יאפשרו מצבי עיבוד חלופיים עבור ההרצה. 'ריצוף חלק' ייצור תבניות חוזרות בפלט. 'רזולוציה גבוהה' נוצר בשני שלבים עם img2img: השתמש בהגדרה זו כאשר אתה רוצה תמונה גדולה וקוהרנטית יותר ללא חפצים. פעולה זאת תקח יותר זמן מפעולת טקסט לתמונה רגילה.", + "faceCorrection": "תיקון פנים עם GFPGAN או Codeformer: האלגוריתם מזהה פרצופים בתמונה ומתקן כל פגם. ערך גבוה ישנה את התמונה יותר, וכתוצאה מכך הפרצופים יהיו אטרקטיביים יותר. Codeformer עם נאמנות גבוהה יותר משמר את התמונה המקורית על חשבון תיקון פנים חזק יותר.", + "seed": "ערך הזרע משפיע על הרעש הראשוני שממנו נוצרת התמונה. אתה יכול להשתמש בזרעים שכבר קיימים מתמונות קודמות. 'סף רעש' משמש להפחתת חפצים בערכי CFG גבוהים (נסה את טווח 0-10), ופרלין כדי להוסיף רעשי פרלין במהלך היצירה: שניהם משמשים להוספת וריאציה לתפוקות שלך.", + "infillAndScaling": "נהל שיטות מילוי (המשמשות באזורים עם מסיכה או אזורים שנמחקו בבד הציור) ושינוי קנה מידה (שימושי לגדלים קטנים של תיבות תוחמות).", + "boundingBox": "התיבה התוחמת זהה להגדרות 'רוחב' ו'גובה' עבור 'טקסט לתמונה' או 'תמונה לתמונה'. רק האזור בתיבה יעובד." + } + }, + "unifiedCanvas": { + "layer": "שכבה", + "base": "בסיס", + "maskingOptions": "אפשרויות מסכות", + "enableMask": "הפעלת מסיכה", + "colorPicker": "בוחר הצבעים", + "preserveMaskedArea": "שימור איזור ממוסך", + "clearMask": "ניקוי מסיכה", + "brush": "מברשת", + "eraser": "מחק", + "fillBoundingBox": "מילוי תיבה תוחמת", + "eraseBoundingBox": "מחק תיבה תוחמת", + "copyToClipboard": "העתק ללוח ההדבקה", + "downloadAsImage": "הורדה כתמונה", + "undo": "ביטול", + "redo": "ביצוע מחדש", + "clearCanvas": "ניקוי קנבס", + "showGrid": "הצגת רשת", + "snapToGrid": "הצמדה לרשת", + "darkenOutsideSelection": "הכהיית בחירה חיצונית", + "saveBoxRegionOnly": "שמירת איזור תיבה בלבד", + "limitStrokesToBox": "הגבלת משיכות לקופסא", + "showCanvasDebugInfo": "הצגת מידע איתור באגים בקנבס", + "clearCanvasHistory": "ניקוי הסטוריית קנבס", + "clearHistory": "ניקוי היסטוריה", + "clearCanvasHistoryConfirm": "האם את/ה בטוח/ה שברצונך לנקות את היסטוריית הקנבס?", + "emptyFolder": "ריקון תיקייה", + "emptyTempImagesFolderConfirm": "האם את/ה בטוח/ה שברצונך לרוקן את התיקיה הזמנית?", + "activeLayer": "שכבה פעילה", + "canvasScale": "קנה מידה של קנבס", + "betaLimitToBox": "הגבל לקופסא", + "betaDarkenOutside": "הכההת הבחוץ", + "canvasDimensions": "מידות קנבס", + "previous": "הקודם", + "next": "הבא", + "accept": "אישור", + "showHide": "הצג/הסתר", + "discardAll": "בטל הכל", + "betaClear": "איפוס", + "boundingBox": "תיבה תוחמת", + "scaledBoundingBox": "תיבה תוחמת לאחר שינוי קנה מידה", + "betaPreserveMasked": "שמר מסיכה", + "brushOptions": "אפשרויות מברשת", + "brushSize": "גודל", + "mergeVisible": "מיזוג תוכן גלוי", + "move": "הזזה", + "resetView": "איפוס תצוגה", + "saveToGallery": "שמור לגלריה", + "canvasSettings": "הגדרות קנבס", + "showIntermediates": "הצגת מתווכים", + "autoSaveToGallery": "שמירה אוטומטית בגלריה", + "emptyTempImageFolder": "ריקון תיקיית תמונות זמניות", + "clearCanvasHistoryMessage": "ניקוי היסטוריית הקנבס משאיר את הקנבס הנוכחי ללא שינוי, אך מנקה באופן בלתי הפיך את היסטוריית הביטול והביצוע מחדש.", + "emptyTempImagesFolderMessage": "ריקון תיקיית התמונה הזמנית גם מאפס באופן מלא את הקנבס המאוחד. זה כולל את כל היסטוריית הביטול/ביצוע מחדש, תמונות באזור ההערכות ושכבת הבסיס של בד הציור.", + "boundingBoxPosition": "מיקום תיבה תוחמת", + "canvasPosition": "מיקום קנבס", + "cursorPosition": "מיקום הסמן", + "mask": "מסכה" + } +} diff --git a/invokeai/frontend/web/dist/locales/it.json b/invokeai/frontend/web/dist/locales/it.json new file mode 100644 index 0000000000..8c4b548f07 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/it.json @@ -0,0 +1,1645 @@ +{ + "common": { + "hotkeysLabel": "Tasti di scelta rapida", + "languagePickerLabel": "Lingua", + "reportBugLabel": "Segnala un errore", + "settingsLabel": "Impostazioni", + "img2img": "Immagine a Immagine", + "unifiedCanvas": "Tela unificata", + "nodes": "Editor del flusso di lavoro", + "langItalian": "Italiano", + "nodesDesc": "Attualmente è in fase di sviluppo un sistema basato su nodi per la generazione di immagini. Resta sintonizzato per gli aggiornamenti su questa fantastica funzionalità.", + "postProcessing": "Post-elaborazione", + "postProcessDesc1": "Invoke AI offre un'ampia varietà di funzionalità di post-elaborazione. Ampliamento Immagine e Restaura Volti sono già disponibili nell'interfaccia Web. È possibile accedervi dal menu 'Opzioni avanzate' delle schede 'Testo a Immagine' e 'Immagine a Immagine'. È inoltre possibile elaborare le immagini direttamente, utilizzando i pulsanti di azione dell'immagine sopra la visualizzazione dell'immagine corrente o nel visualizzatore.", + "postProcessDesc2": "Presto verrà rilasciata un'interfaccia utente dedicata per facilitare flussi di lavoro di post-elaborazione più avanzati.", + "postProcessDesc3": "L'interfaccia da riga di comando di 'Invoke AI' offre varie altre funzionalità tra cui Embiggen.", + "training": "Addestramento", + "trainingDesc1": "Un flusso di lavoro dedicato per addestrare i tuoi Incorporamenti e Checkpoint utilizzando Inversione Testuale e Dreambooth dall'interfaccia web.", + "trainingDesc2": "InvokeAI supporta già l'addestramento di incorporamenti personalizzati utilizzando l'inversione testuale tramite lo script principale.", + "upload": "Caricamento", + "close": "Chiudi", + "load": "Carica", + "back": "Indietro", + "statusConnected": "Collegato", + "statusDisconnected": "Disconnesso", + "statusError": "Errore", + "statusPreparing": "Preparazione", + "statusProcessingCanceled": "Elaborazione annullata", + "statusProcessingComplete": "Elaborazione completata", + "statusGenerating": "Generazione in corso", + "statusGeneratingTextToImage": "Generazione Testo a Immagine", + "statusGeneratingImageToImage": "Generazione da Immagine a Immagine", + "statusGeneratingInpainting": "Generazione Inpainting", + "statusGeneratingOutpainting": "Generazione Outpainting", + "statusGenerationComplete": "Generazione completata", + "statusIterationComplete": "Iterazione completata", + "statusSavingImage": "Salvataggio dell'immagine", + "statusRestoringFaces": "Restaura volti", + "statusRestoringFacesGFPGAN": "Restaura volti (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restaura volti (CodeFormer)", + "statusUpscaling": "Ampliamento", + "statusUpscalingESRGAN": "Ampliamento (ESRGAN)", + "statusLoadingModel": "Caricamento del modello", + "statusModelChanged": "Modello cambiato", + "githubLabel": "GitHub", + "discordLabel": "Discord", + "langArabic": "Arabo", + "langEnglish": "Inglese", + "langFrench": "Francese", + "langGerman": "Tedesco", + "langJapanese": "Giapponese", + "langPolish": "Polacco", + "langBrPortuguese": "Portoghese Basiliano", + "langRussian": "Russo", + "langUkranian": "Ucraino", + "langSpanish": "Spagnolo", + "statusMergingModels": "Fusione Modelli", + "statusMergedModels": "Modelli fusi", + "langSimplifiedChinese": "Cinese semplificato", + "langDutch": "Olandese", + "statusModelConverted": "Modello Convertito", + "statusConvertingModel": "Conversione Modello", + "langKorean": "Coreano", + "langPortuguese": "Portoghese", + "loading": "Caricamento in corso", + "langHebrew": "Ebraico", + "loadingInvokeAI": "Caricamento Invoke AI", + "postprocessing": "Post Elaborazione", + "txt2img": "Testo a Immagine", + "accept": "Accetta", + "cancel": "Annulla", + "linear": "Lineare", + "generate": "Genera", + "random": "Casuale", + "openInNewTab": "Apri in una nuova scheda", + "areYouSure": "Sei sicuro?", + "dontAskMeAgain": "Non chiedermelo più", + "imagePrompt": "Prompt Immagine", + "darkMode": "Modalità scura", + "lightMode": "Modalità chiara", + "batch": "Gestione Lotto", + "modelManager": "Gestore modello", + "communityLabel": "Comunità", + "nodeEditor": "Editor dei nodi", + "statusProcessing": "Elaborazione in corso", + "advanced": "Avanzate", + "imageFailedToLoad": "Impossibile caricare l'immagine", + "learnMore": "Per saperne di più", + "ipAdapter": "Adattatore IP", + "t2iAdapter": "Adattatore T2I", + "controlAdapter": "Adattatore di Controllo", + "controlNet": "ControlNet", + "auto": "Automatico", + "simple": "Semplice", + "details": "Dettagli", + "format": "formato", + "unknown": "Sconosciuto", + "folder": "Cartella", + "error": "Errore", + "installed": "Installato", + "template": "Schema", + "outputs": "Uscite", + "data": "Dati", + "somethingWentWrong": "Qualcosa è andato storto", + "copyError": "$t(gallery.copy) Errore", + "input": "Ingresso", + "notInstalled": "Non $t(common.installed)", + "unknownError": "Errore sconosciuto", + "updated": "Aggiornato", + "save": "Salva", + "created": "Creato", + "prevPage": "Pagina precedente", + "delete": "Elimina", + "orderBy": "Ordinato per", + "nextPage": "Pagina successiva", + "saveAs": "Salva come", + "unsaved": "Non salvato", + "direction": "Direzione" + }, + "gallery": { + "generations": "Generazioni", + "showGenerations": "Mostra Generazioni", + "uploads": "Caricamenti", + "showUploads": "Mostra caricamenti", + "galleryImageSize": "Dimensione dell'immagine", + "galleryImageResetSize": "Ripristina dimensioni", + "gallerySettings": "Impostazioni della galleria", + "maintainAspectRatio": "Mantenere le proporzioni", + "autoSwitchNewImages": "Passaggio automatico a nuove immagini", + "singleColumnLayout": "Layout a colonna singola", + "allImagesLoaded": "Tutte le immagini caricate", + "loadMore": "Carica altro", + "noImagesInGallery": "Nessuna immagine da visualizzare", + "deleteImage": "Elimina l'immagine", + "deleteImagePermanent": "Le immagini eliminate non possono essere ripristinate.", + "deleteImageBin": "Le immagini eliminate verranno spostate nel Cestino del tuo sistema operativo.", + "assets": "Risorse", + "autoAssignBoardOnClick": "Assegna automaticamente la bacheca al clic", + "featuresWillReset": "Se elimini questa immagine, quelle funzionalità verranno immediatamente ripristinate.", + "loading": "Caricamento in corso", + "unableToLoad": "Impossibile caricare la Galleria", + "currentlyInUse": "Questa immagine è attualmente utilizzata nelle seguenti funzionalità:", + "copy": "Copia", + "download": "Scarica", + "setCurrentImage": "Imposta come immagine corrente", + "preparingDownload": "Preparazione del download", + "preparingDownloadFailed": "Problema durante la preparazione del download", + "downloadSelection": "Scarica gli elementi selezionati", + "noImageSelected": "Nessuna immagine selezionata", + "deleteSelection": "Elimina la selezione", + "image": "immagine", + "drop": "Rilascia", + "unstarImage": "Rimuovi preferenza immagine", + "dropOrUpload": "$t(gallery.drop) o carica", + "starImage": "Immagine preferita", + "dropToUpload": "$t(gallery.drop) per aggiornare", + "problemDeletingImagesDesc": "Impossibile eliminare una o più immagini", + "problemDeletingImages": "Problema durante l'eliminazione delle immagini" + }, + "hotkeys": { + "keyboardShortcuts": "Tasti rapidi", + "appHotkeys": "Tasti di scelta rapida dell'applicazione", + "generalHotkeys": "Tasti di scelta rapida generali", + "galleryHotkeys": "Tasti di scelta rapida della galleria", + "unifiedCanvasHotkeys": "Tasti di scelta rapida Tela Unificata", + "invoke": { + "title": "Invoke", + "desc": "Genera un'immagine" + }, + "cancel": { + "title": "Annulla", + "desc": "Annulla la generazione dell'immagine" + }, + "focusPrompt": { + "title": "Metti a fuoco il Prompt", + "desc": "Mette a fuoco l'area di immissione del prompt" + }, + "toggleOptions": { + "title": "Attiva/disattiva le opzioni", + "desc": "Apre e chiude il pannello delle opzioni" + }, + "pinOptions": { + "title": "Appunta le opzioni", + "desc": "Blocca il pannello delle opzioni" + }, + "toggleViewer": { + "title": "Attiva/disattiva visualizzatore", + "desc": "Apre e chiude il visualizzatore immagini" + }, + "toggleGallery": { + "title": "Attiva/disattiva Galleria", + "desc": "Apre e chiude il pannello della galleria" + }, + "maximizeWorkSpace": { + "title": "Massimizza lo spazio di lavoro", + "desc": "Chiude i pannelli e massimizza l'area di lavoro" + }, + "changeTabs": { + "title": "Cambia scheda", + "desc": "Passa a un'altra area di lavoro" + }, + "consoleToggle": { + "title": "Attiva/disattiva console", + "desc": "Apre e chiude la console" + }, + "setPrompt": { + "title": "Imposta Prompt", + "desc": "Usa il prompt dell'immagine corrente" + }, + "setSeed": { + "title": "Imposta seme", + "desc": "Usa il seme dell'immagine corrente" + }, + "setParameters": { + "title": "Imposta parametri", + "desc": "Utilizza tutti i parametri dell'immagine corrente" + }, + "restoreFaces": { + "title": "Restaura volti", + "desc": "Restaura l'immagine corrente" + }, + "upscale": { + "title": "Amplia", + "desc": "Amplia l'immagine corrente" + }, + "showInfo": { + "title": "Mostra informazioni", + "desc": "Mostra le informazioni sui metadati dell'immagine corrente" + }, + "sendToImageToImage": { + "title": "Invia a Immagine a Immagine", + "desc": "Invia l'immagine corrente a da Immagine a Immagine" + }, + "deleteImage": { + "title": "Elimina immagine", + "desc": "Elimina l'immagine corrente" + }, + "closePanels": { + "title": "Chiudi pannelli", + "desc": "Chiude i pannelli aperti" + }, + "previousImage": { + "title": "Immagine precedente", + "desc": "Visualizza l'immagine precedente nella galleria" + }, + "nextImage": { + "title": "Immagine successiva", + "desc": "Visualizza l'immagine successiva nella galleria" + }, + "toggleGalleryPin": { + "title": "Attiva/disattiva il blocco della galleria", + "desc": "Blocca/sblocca la galleria dall'interfaccia utente" + }, + "increaseGalleryThumbSize": { + "title": "Aumenta dimensione immagini nella galleria", + "desc": "Aumenta la dimensione delle miniature della galleria" + }, + "decreaseGalleryThumbSize": { + "title": "Riduci dimensione immagini nella galleria", + "desc": "Riduce le dimensioni delle miniature della galleria" + }, + "selectBrush": { + "title": "Seleziona Pennello", + "desc": "Seleziona il pennello della tela" + }, + "selectEraser": { + "title": "Seleziona Cancellino", + "desc": "Seleziona il cancellino della tela" + }, + "decreaseBrushSize": { + "title": "Riduci la dimensione del pennello", + "desc": "Riduce la dimensione del pennello/cancellino della tela" + }, + "increaseBrushSize": { + "title": "Aumenta la dimensione del pennello", + "desc": "Aumenta la dimensione del pennello/cancellino della tela" + }, + "decreaseBrushOpacity": { + "title": "Riduci l'opacità del pennello", + "desc": "Diminuisce l'opacità del pennello della tela" + }, + "increaseBrushOpacity": { + "title": "Aumenta l'opacità del pennello", + "desc": "Aumenta l'opacità del pennello della tela" + }, + "moveTool": { + "title": "Strumento Sposta", + "desc": "Consente la navigazione nella tela" + }, + "fillBoundingBox": { + "title": "Riempi riquadro di selezione", + "desc": "Riempie il riquadro di selezione con il colore del pennello" + }, + "eraseBoundingBox": { + "title": "Cancella riquadro di selezione", + "desc": "Cancella l'area del riquadro di selezione" + }, + "colorPicker": { + "title": "Seleziona Selettore colore", + "desc": "Seleziona il selettore colore della tela" + }, + "toggleSnap": { + "title": "Attiva/disattiva Aggancia", + "desc": "Attiva/disattiva Aggancia alla griglia" + }, + "quickToggleMove": { + "title": "Attiva/disattiva Sposta rapido", + "desc": "Attiva/disattiva temporaneamente la modalità Sposta" + }, + "toggleLayer": { + "title": "Attiva/disattiva livello", + "desc": "Attiva/disattiva la selezione del livello base/maschera" + }, + "clearMask": { + "title": "Cancella maschera", + "desc": "Cancella l'intera maschera" + }, + "hideMask": { + "title": "Nascondi maschera", + "desc": "Nasconde e mostra la maschera" + }, + "showHideBoundingBox": { + "title": "Mostra/Nascondi riquadro di selezione", + "desc": "Attiva/disattiva la visibilità del riquadro di selezione" + }, + "mergeVisible": { + "title": "Fondi il visibile", + "desc": "Fonde tutti gli strati visibili della tela" + }, + "saveToGallery": { + "title": "Salva nella galleria", + "desc": "Salva la tela corrente nella galleria" + }, + "copyToClipboard": { + "title": "Copia negli appunti", + "desc": "Copia la tela corrente negli appunti" + }, + "downloadImage": { + "title": "Scarica l'immagine", + "desc": "Scarica la tela corrente" + }, + "undoStroke": { + "title": "Annulla tratto", + "desc": "Annulla una pennellata" + }, + "redoStroke": { + "title": "Ripeti tratto", + "desc": "Ripeti una pennellata" + }, + "resetView": { + "title": "Reimposta vista", + "desc": "Ripristina la visualizzazione della tela" + }, + "previousStagingImage": { + "title": "Immagine della sessione precedente", + "desc": "Immagine dell'area della sessione precedente" + }, + "nextStagingImage": { + "title": "Immagine della sessione successivo", + "desc": "Immagine dell'area della sessione successiva" + }, + "acceptStagingImage": { + "title": "Accetta l'immagine della sessione", + "desc": "Accetta l'immagine dell'area della sessione corrente" + }, + "nodesHotkeys": "Tasti di scelta rapida dei Nodi", + "addNodes": { + "title": "Aggiungi Nodi", + "desc": "Apre il menu Aggiungi Nodi" + } + }, + "modelManager": { + "modelManager": "Gestione Modelli", + "model": "Modello", + "allModels": "Tutti i Modelli", + "checkpointModels": "Checkpoint", + "diffusersModels": "Diffusori", + "safetensorModels": "SafeTensor", + "modelAdded": "Modello Aggiunto", + "modelUpdated": "Modello Aggiornato", + "modelEntryDeleted": "Voce del modello eliminata", + "cannotUseSpaces": "Impossibile utilizzare gli spazi", + "addNew": "Aggiungi nuovo", + "addNewModel": "Aggiungi nuovo Modello", + "addCheckpointModel": "Aggiungi modello Checkpoint / Safetensor", + "addDiffuserModel": "Aggiungi Diffusori", + "addManually": "Aggiungi manualmente", + "manual": "Manuale", + "name": "Nome", + "nameValidationMsg": "Inserisci un nome per il modello", + "description": "Descrizione", + "descriptionValidationMsg": "Aggiungi una descrizione per il modello", + "config": "Configurazione", + "configValidationMsg": "Percorso del file di configurazione del modello.", + "modelLocation": "Posizione del modello", + "modelLocationValidationMsg": "Fornisci il percorso di una cartella locale in cui è archiviato il tuo modello di diffusori", + "repo_id": "Repo ID", + "repoIDValidationMsg": "Repository online del modello", + "vaeLocation": "Posizione file VAE", + "vaeLocationValidationMsg": "Percorso dove si trova il file VAE.", + "vaeRepoID": "VAE Repo ID", + "vaeRepoIDValidationMsg": "Repository online del file VAE", + "width": "Larghezza", + "widthValidationMsg": "Larghezza predefinita del modello.", + "height": "Altezza", + "heightValidationMsg": "Altezza predefinita del modello.", + "addModel": "Aggiungi modello", + "updateModel": "Aggiorna modello", + "availableModels": "Modelli disponibili", + "search": "Ricerca", + "load": "Carica", + "active": "attivo", + "notLoaded": "non caricato", + "cached": "memorizzato nella cache", + "checkpointFolder": "Cartella Checkpoint", + "clearCheckpointFolder": "Svuota cartella checkpoint", + "findModels": "Trova modelli", + "scanAgain": "Scansiona nuovamente", + "modelsFound": "Modelli trovati", + "selectFolder": "Seleziona cartella", + "selected": "Selezionato", + "selectAll": "Seleziona tutto", + "deselectAll": "Deseleziona tutto", + "showExisting": "Mostra esistenti", + "addSelected": "Aggiungi selezionato", + "modelExists": "Il modello esiste", + "selectAndAdd": "Seleziona e aggiungi i modelli elencati", + "noModelsFound": "Nessun modello trovato", + "delete": "Elimina", + "deleteModel": "Elimina modello", + "deleteConfig": "Elimina configurazione", + "deleteMsg1": "Sei sicuro di voler eliminare questo modello da InvokeAI?", + "deleteMsg2": "Questo eliminerà il modello dal disco se si trova nella cartella principale di InvokeAI. Se invece utilizzi una cartella personalizzata, il modello NON verrà eliminato dal disco.", + "formMessageDiffusersModelLocation": "Ubicazione modelli diffusori", + "formMessageDiffusersModelLocationDesc": "Inseriscine almeno uno.", + "formMessageDiffusersVAELocation": "Ubicazione file VAE", + "formMessageDiffusersVAELocationDesc": "Se non fornito, InvokeAI cercherà il file VAE all'interno dell'ubicazione del modello sopra indicata.", + "convert": "Converti", + "convertToDiffusers": "Converti in Diffusori", + "convertToDiffusersHelpText2": "Questo processo sostituirà la voce in Gestione Modelli con la versione Diffusori dello stesso modello.", + "convertToDiffusersHelpText4": "Questo è un processo una tantum. Potrebbero essere necessari circa 30-60 secondi a seconda delle specifiche del tuo computer.", + "convertToDiffusersHelpText5": "Assicurati di avere spazio su disco sufficiente. I modelli generalmente variano tra 2 GB e 7 GB di dimensioni.", + "convertToDiffusersHelpText6": "Vuoi convertire questo modello?", + "convertToDiffusersSaveLocation": "Ubicazione salvataggio", + "inpainting": "v1 Inpainting", + "customConfig": "Configurazione personalizzata", + "statusConverting": "Conversione in corso", + "modelConverted": "Modello convertito", + "sameFolder": "Stessa cartella", + "invokeRoot": "Cartella InvokeAI", + "merge": "Unisci", + "modelsMerged": "Modelli uniti", + "mergeModels": "Unisci Modelli", + "modelOne": "Modello 1", + "modelTwo": "Modello 2", + "mergedModelName": "Nome del modello unito", + "alpha": "Alpha", + "interpolationType": "Tipo di interpolazione", + "mergedModelCustomSaveLocation": "Percorso personalizzato", + "invokeAIFolder": "Cartella Invoke AI", + "ignoreMismatch": "Ignora le discrepanze tra i modelli selezionati", + "modelMergeHeaderHelp2": "Solo i diffusori sono disponibili per l'unione. Se desideri unire un modello Checkpoint, convertilo prima in Diffusori.", + "modelMergeInterpAddDifferenceHelp": "In questa modalità, il Modello 3 viene prima sottratto dal Modello 2. La versione risultante viene unita al Modello 1 con il tasso Alpha impostato sopra.", + "mergedModelSaveLocation": "Ubicazione salvataggio", + "convertToDiffusersHelpText1": "Questo modello verrà convertito nel formato 🧨 Diffusore.", + "custom": "Personalizzata", + "convertToDiffusersHelpText3": "Il file Checkpoint su disco verrà eliminato se si trova nella cartella principale di InvokeAI. Se si trova invece in una posizione personalizzata, NON verrà eliminato.", + "v1": "v1", + "pathToCustomConfig": "Percorso alla configurazione personalizzata", + "modelThree": "Modello 3", + "modelMergeHeaderHelp1": "Puoi unire fino a tre diversi modelli per creare una miscela adatta alle tue esigenze.", + "modelMergeAlphaHelp": "Il valore Alpha controlla la forza di miscelazione dei modelli. Valori Alpha più bassi attenuano l'influenza del secondo modello.", + "customSaveLocation": "Ubicazione salvataggio personalizzata", + "weightedSum": "Somma pesata", + "sigmoid": "Sigmoide", + "inverseSigmoid": "Sigmoide inverso", + "v2_base": "v2 (512px)", + "v2_768": "v2 (768px)", + "none": "nessuno", + "addDifference": "Aggiungi differenza", + "pickModelType": "Scegli il tipo di modello", + "scanForModels": "Cerca modelli", + "variant": "Variante", + "baseModel": "Modello Base", + "vae": "VAE", + "modelUpdateFailed": "Aggiornamento del modello non riuscito", + "modelConversionFailed": "Conversione del modello non riuscita", + "modelsMergeFailed": "Unione modelli non riuscita", + "selectModel": "Seleziona Modello", + "modelDeleted": "Modello eliminato", + "modelDeleteFailed": "Impossibile eliminare il modello", + "noCustomLocationProvided": "Nessuna posizione personalizzata fornita", + "convertingModelBegin": "Conversione del modello. Attendere prego.", + "importModels": "Importa Modelli", + "modelsSynced": "Modelli sincronizzati", + "modelSyncFailed": "Sincronizzazione modello non riuscita", + "settings": "Impostazioni", + "syncModels": "Sincronizza Modelli", + "syncModelsDesc": "Se i tuoi modelli non sono sincronizzati con il back-end, puoi aggiornarli utilizzando questa opzione. Questo è generalmente utile nei casi in cui aggiorni manualmente il tuo file models.yaml o aggiungi modelli alla cartella principale di InvokeAI dopo l'avvio dell'applicazione.", + "loraModels": "LoRA", + "oliveModels": "Olive", + "onnxModels": "ONNX", + "noModels": "Nessun modello trovato", + "predictionType": "Tipo di previsione (per modelli Stable Diffusion 2.x ed alcuni modelli Stable Diffusion 1.x)", + "quickAdd": "Aggiunta rapida", + "simpleModelDesc": "Fornire un percorso a un modello diffusori locale, un modello checkpoint/safetensor locale, un ID repository HuggingFace o un URL del modello checkpoint/diffusori.", + "advanced": "Avanzate", + "useCustomConfig": "Utilizza configurazione personalizzata", + "closeAdvanced": "Chiudi Avanzate", + "modelType": "Tipo di modello", + "customConfigFileLocation": "Posizione del file di configurazione personalizzato", + "vaePrecision": "Precisione VAE", + "noModelSelected": "Nessun modello selezionato", + "conversionNotSupported": "Conversione non supportata" + }, + "parameters": { + "images": "Immagini", + "steps": "Passi", + "cfgScale": "Scala CFG", + "width": "Larghezza", + "height": "Altezza", + "seed": "Seme", + "randomizeSeed": "Seme randomizzato", + "shuffle": "Mescola il seme", + "noiseThreshold": "Soglia del rumore", + "perlinNoise": "Rumore Perlin", + "variations": "Variazioni", + "variationAmount": "Quantità di variazione", + "seedWeights": "Pesi dei semi", + "faceRestoration": "Restauro volti", + "restoreFaces": "Restaura volti", + "type": "Tipo", + "strength": "Forza", + "upscaling": "Ampliamento", + "upscale": "Amplia (Shift + U)", + "upscaleImage": "Amplia Immagine", + "scale": "Scala", + "otherOptions": "Altre opzioni", + "seamlessTiling": "Piastrella senza cuciture", + "hiresOptim": "Ottimizzazione alta risoluzione", + "imageFit": "Adatta l'immagine iniziale alle dimensioni di output", + "codeformerFidelity": "Fedeltà", + "scaleBeforeProcessing": "Scala prima dell'elaborazione", + "scaledWidth": "Larghezza ridimensionata", + "scaledHeight": "Altezza ridimensionata", + "infillMethod": "Metodo di riempimento", + "tileSize": "Dimensione piastrella", + "boundingBoxHeader": "Rettangolo di selezione", + "seamCorrectionHeader": "Correzione della cucitura", + "infillScalingHeader": "Riempimento e ridimensionamento", + "img2imgStrength": "Forza da Immagine a Immagine", + "toggleLoopback": "Attiva/disattiva elaborazione ricorsiva", + "sendTo": "Invia a", + "sendToImg2Img": "Invia a Immagine a Immagine", + "sendToUnifiedCanvas": "Invia a Tela Unificata", + "copyImageToLink": "Copia l'immagine nel collegamento", + "downloadImage": "Scarica l'immagine", + "openInViewer": "Apri nel visualizzatore", + "closeViewer": "Chiudi visualizzatore", + "usePrompt": "Usa Prompt", + "useSeed": "Usa Seme", + "useAll": "Usa Tutto", + "useInitImg": "Usa l'immagine iniziale", + "info": "Informazioni", + "initialImage": "Immagine iniziale", + "showOptionsPanel": "Mostra il pannello laterale (O o T)", + "general": "Generale", + "denoisingStrength": "Forza di riduzione del rumore", + "copyImage": "Copia immagine", + "hiresStrength": "Forza Alta Risoluzione", + "imageToImage": "Immagine a Immagine", + "cancel": { + "schedule": "Annulla dopo l'iterazione corrente", + "isScheduled": "Annullamento", + "setType": "Imposta il tipo di annullamento", + "immediate": "Annulla immediatamente", + "cancel": "Annulla" + }, + "hSymmetryStep": "Passi Simmetria Orizzontale", + "vSymmetryStep": "Passi Simmetria Verticale", + "symmetry": "Simmetria", + "hidePreview": "Nascondi l'anteprima", + "showPreview": "Mostra l'anteprima", + "noiseSettings": "Rumore", + "seamlessXAxis": "Asse X", + "seamlessYAxis": "Asse Y", + "scheduler": "Campionatore", + "boundingBoxWidth": "Larghezza riquadro di delimitazione", + "boundingBoxHeight": "Altezza riquadro di delimitazione", + "positivePromptPlaceholder": "Prompt Positivo", + "negativePromptPlaceholder": "Prompt Negativo", + "controlNetControlMode": "Modalità di controllo", + "clipSkip": "CLIP Skip", + "aspectRatio": "Proporzioni", + "maskAdjustmentsHeader": "Regolazioni della maschera", + "maskBlur": "Sfocatura", + "maskBlurMethod": "Metodo di sfocatura", + "seamLowThreshold": "Basso", + "seamHighThreshold": "Alto", + "coherencePassHeader": "Passaggio di coerenza", + "coherenceSteps": "Passi", + "coherenceStrength": "Forza", + "compositingSettingsHeader": "Impostazioni di composizione", + "patchmatchDownScaleSize": "Ridimensiona", + "coherenceMode": "Modalità", + "invoke": { + "noNodesInGraph": "Nessun nodo nel grafico", + "noModelSelected": "Nessun modello selezionato", + "noPrompts": "Nessun prompt generato", + "noInitialImageSelected": "Nessuna immagine iniziale selezionata", + "readyToInvoke": "Pronto per invocare", + "addingImagesTo": "Aggiungi immagini a", + "systemBusy": "Sistema occupato", + "unableToInvoke": "Impossibile invocare", + "systemDisconnected": "Sistema disconnesso", + "noControlImageForControlAdapter": "L'adattatore di controllo #{{number}} non ha un'immagine di controllo", + "noModelForControlAdapter": "Nessun modello selezionato per l'adattatore di controllo #{{number}}.", + "incompatibleBaseModelForControlAdapter": "Il modello dell'adattatore di controllo #{{number}} non è compatibile con il modello principale.", + "missingNodeTemplate": "Modello di nodo mancante", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} ingresso mancante", + "missingFieldTemplate": "Modello di campo mancante" + }, + "enableNoiseSettings": "Abilita le impostazioni del rumore", + "cpuNoise": "Rumore CPU", + "gpuNoise": "Rumore GPU", + "useCpuNoise": "Usa la CPU per generare rumore", + "manualSeed": "Seme manuale", + "randomSeed": "Seme casuale", + "iterations": "Iterazioni", + "iterationsWithCount_one": "{{count}} Iterazione", + "iterationsWithCount_many": "{{count}} Iterazioni", + "iterationsWithCount_other": "{{count}} Iterazioni", + "seamlessX&Y": "Senza cuciture X & Y", + "isAllowedToUpscale": { + "useX2Model": "L'immagine è troppo grande per l'ampliamento con il modello x4, utilizza il modello x2", + "tooLarge": "L'immagine è troppo grande per l'ampliamento, seleziona un'immagine più piccola" + }, + "seamlessX": "Senza cuciture X", + "seamlessY": "Senza cuciture Y", + "imageActions": "Azioni Immagine", + "aspectRatioFree": "Libere", + "maskEdge": "Maschera i bordi", + "unmasked": "No maschera", + "cfgRescaleMultiplier": "Moltiplicatore riscala CFG", + "cfgRescale": "Riscala CFG", + "useSize": "Usa Dimensioni" + }, + "settings": { + "models": "Modelli", + "displayInProgress": "Visualizza le immagini di avanzamento", + "saveSteps": "Salva le immagini ogni n passaggi", + "confirmOnDelete": "Conferma l'eliminazione", + "displayHelpIcons": "Visualizza le icone della Guida", + "enableImageDebugging": "Abilita il debug dell'immagine", + "resetWebUI": "Reimposta l'interfaccia utente Web", + "resetWebUIDesc1": "Il ripristino dell'interfaccia utente Web reimposta solo la cache locale del browser delle immagini e le impostazioni memorizzate. Non cancella alcuna immagine dal disco.", + "resetWebUIDesc2": "Se le immagini non vengono visualizzate nella galleria o qualcos'altro non funziona, prova a reimpostare prima di segnalare un problema su GitHub.", + "resetComplete": "L'interfaccia utente Web è stata reimpostata.", + "useSlidersForAll": "Usa i cursori per tutte le opzioni", + "general": "Generale", + "consoleLogLevel": "Livello del registro", + "shouldLogToConsole": "Registrazione della console", + "developer": "Sviluppatore", + "antialiasProgressImages": "Anti aliasing delle immagini di avanzamento", + "showProgressInViewer": "Mostra le immagini di avanzamento nel visualizzatore", + "generation": "Generazione", + "ui": "Interfaccia Utente", + "favoriteSchedulersPlaceholder": "Nessun campionatore preferito", + "favoriteSchedulers": "Campionatori preferiti", + "showAdvancedOptions": "Mostra Opzioni Avanzate", + "alternateCanvasLayout": "Layout alternativo della tela", + "beta": "Beta", + "enableNodesEditor": "Abilita l'editor dei nodi", + "experimental": "Sperimentale", + "autoChangeDimensions": "Aggiorna L/A alle impostazioni predefinite del modello in caso di modifica", + "clearIntermediates": "Cancella le immagini intermedie", + "clearIntermediatesDesc3": "Le immagini della galleria non verranno eliminate.", + "clearIntermediatesDesc2": "Le immagini intermedie sono sottoprodotti della generazione, diversi dalle immagini risultanti nella galleria. La cancellazione degli intermedi libererà spazio su disco.", + "intermediatesCleared_one": "Cancellata {{count}} immagine intermedia", + "intermediatesCleared_many": "Cancellate {{count}} immagini intermedie", + "intermediatesCleared_other": "Cancellate {{count}} immagini intermedie", + "clearIntermediatesDesc1": "La cancellazione delle immagini intermedie ripristinerà lo stato di Tela Unificata e ControlNet.", + "intermediatesClearedFailed": "Problema con la cancellazione delle immagini intermedie", + "clearIntermediatesWithCount_one": "Cancella {{count}} immagine intermedia", + "clearIntermediatesWithCount_many": "Cancella {{count}} immagini intermedie", + "clearIntermediatesWithCount_other": "Cancella {{count}} immagini intermedie", + "clearIntermediatesDisabled": "La coda deve essere vuota per cancellare le immagini intermedie", + "enableNSFWChecker": "Abilita controllo NSFW", + "enableInvisibleWatermark": "Abilita filigrana invisibile", + "enableInformationalPopovers": "Abilita testo informativo a comparsa", + "reloadingIn": "Ricaricando in" + }, + "toast": { + "tempFoldersEmptied": "Cartella temporanea svuotata", + "uploadFailed": "Caricamento fallito", + "uploadFailedUnableToLoadDesc": "Impossibile caricare il file", + "downloadImageStarted": "Download dell'immagine avviato", + "imageCopied": "Immagine copiata", + "imageLinkCopied": "Collegamento immagine copiato", + "imageNotLoaded": "Nessuna immagine caricata", + "imageNotLoadedDesc": "Impossibile trovare l'immagine", + "imageSavedToGallery": "Immagine salvata nella Galleria", + "canvasMerged": "Tela unita", + "sentToImageToImage": "Inviato a Immagine a Immagine", + "sentToUnifiedCanvas": "Inviato a Tela Unificata", + "parametersSet": "Parametri impostati", + "parametersNotSet": "Parametri non impostati", + "parametersNotSetDesc": "Nessun metadato trovato per questa immagine.", + "parametersFailed": "Problema durante il caricamento dei parametri", + "parametersFailedDesc": "Impossibile caricare l'immagine iniziale.", + "seedSet": "Seme impostato", + "seedNotSet": "Seme non impostato", + "seedNotSetDesc": "Impossibile trovare il seme per questa immagine.", + "promptSet": "Prompt impostato", + "promptNotSet": "Prompt non impostato", + "promptNotSetDesc": "Impossibile trovare il prompt per questa immagine.", + "upscalingFailed": "Ampliamento non riuscito", + "faceRestoreFailed": "Restauro facciale non riuscito", + "metadataLoadFailed": "Impossibile caricare i metadati", + "initialImageSet": "Immagine iniziale impostata", + "initialImageNotSet": "Immagine iniziale non impostata", + "initialImageNotSetDesc": "Impossibile caricare l'immagine iniziale", + "serverError": "Errore del Server", + "disconnected": "Disconnesso dal Server", + "connected": "Connesso al Server", + "canceled": "Elaborazione annullata", + "problemCopyingImageLink": "Impossibile copiare il collegamento dell'immagine", + "uploadFailedInvalidUploadDesc": "Deve essere una singola immagine PNG o JPEG", + "parameterSet": "Parametro impostato", + "parameterNotSet": "Parametro non impostato", + "nodesLoadedFailed": "Impossibile caricare i nodi", + "nodesSaved": "Nodi salvati", + "nodesLoaded": "Nodi caricati", + "problemCopyingImage": "Impossibile copiare l'immagine", + "nodesNotValidGraph": "Grafico del nodo InvokeAI non valido", + "nodesCorruptedGraph": "Impossibile caricare. Il grafico sembra essere danneggiato.", + "nodesUnrecognizedTypes": "Impossibile caricare. Il grafico ha tipi di dati non riconosciuti", + "nodesNotValidJSON": "JSON non valido", + "nodesBrokenConnections": "Impossibile caricare. Alcune connessioni sono interrotte.", + "baseModelChangedCleared_one": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modello incompatibile", + "baseModelChangedCleared_many": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", + "baseModelChangedCleared_other": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", + "imageSavingFailed": "Salvataggio dell'immagine non riuscito", + "canvasSentControlnetAssets": "Tela inviata a ControlNet & Risorse", + "problemCopyingCanvasDesc": "Impossibile copiare la tela", + "loadedWithWarnings": "Flusso di lavoro caricato con avvisi", + "canvasCopiedClipboard": "Tela copiata negli appunti", + "maskSavedAssets": "Maschera salvata nelle risorse", + "modelAddFailed": "Aggiunta del modello non riuscita", + "problemDownloadingCanvas": "Problema durante il download della tela", + "problemMergingCanvas": "Problema nell'unione delle tele", + "imageUploaded": "Immagine caricata", + "addedToBoard": "Aggiunto alla bacheca", + "modelAddedSimple": "Modello aggiunto", + "problemImportingMaskDesc": "Impossibile importare la maschera", + "problemCopyingCanvas": "Problema durante la copia della tela", + "problemSavingCanvas": "Problema nel salvataggio della tela", + "canvasDownloaded": "Tela scaricata", + "problemMergingCanvasDesc": "Impossibile unire le tele", + "problemDownloadingCanvasDesc": "Impossibile scaricare la tela", + "imageSaved": "Immagine salvata", + "maskSentControlnetAssets": "Maschera inviata a ControlNet & Risorse", + "canvasSavedGallery": "Tela salvata nella Galleria", + "imageUploadFailed": "Caricamento immagine non riuscito", + "modelAdded": "Modello aggiunto: {{modelName}}", + "problemImportingMask": "Problema durante l'importazione della maschera", + "setInitialImage": "Imposta come immagine iniziale", + "setControlImage": "Imposta come immagine di controllo", + "setNodeField": "Imposta come campo nodo", + "problemSavingMask": "Problema nel salvataggio della maschera", + "problemSavingCanvasDesc": "Impossibile salvare la tela", + "setCanvasInitialImage": "Imposta l'immagine iniziale della tela", + "workflowLoaded": "Flusso di lavoro caricato", + "setIPAdapterImage": "Imposta come immagine per l'Adattatore IP", + "problemSavingMaskDesc": "Impossibile salvare la maschera", + "setAsCanvasInitialImage": "Imposta come immagine iniziale della tela", + "invalidUpload": "Caricamento non valido", + "problemDeletingWorkflow": "Problema durante l'eliminazione del flusso di lavoro", + "workflowDeleted": "Flusso di lavoro eliminato", + "problemRetrievingWorkflow": "Problema nel recupero del flusso di lavoro" + }, + "tooltip": { + "feature": { + "prompt": "Questo è il campo del prompt. Il prompt include oggetti di generazione e termini stilistici. Puoi anche aggiungere il peso (importanza del token) nel prompt, ma i comandi e i parametri dell'interfaccia a linea di comando non funzioneranno.", + "gallery": "Galleria visualizza le generazioni dalla cartella degli output man mano che vengono create. Le impostazioni sono memorizzate all'interno di file e accessibili dal menu contestuale.", + "other": "Queste opzioni abiliteranno modalità di elaborazione alternative per Invoke. 'Piastrella senza cuciture' creerà modelli ripetuti nell'output. 'Ottimizzazione Alta risoluzione' è la generazione in due passaggi con 'Immagine a Immagine': usa questa impostazione quando vuoi un'immagine più grande e più coerente senza artefatti. Ci vorrà più tempo del solito 'Testo a Immagine'.", + "seed": "Il valore del Seme influenza il rumore iniziale da cui è formata l'immagine. Puoi usare i semi già esistenti dalle immagini precedenti. 'Soglia del rumore' viene utilizzato per mitigare gli artefatti a valori CFG elevati (provare l'intervallo 0-10) e Perlin per aggiungere il rumore Perlin durante la generazione: entrambi servono per aggiungere variazioni ai risultati.", + "variations": "Prova una variazione con un valore compreso tra 0.1 e 1.0 per modificare il risultato per un dato seme. Variazioni interessanti del seme sono comprese tra 0.1 e 0.3.", + "upscale": "Utilizza ESRGAN per ingrandire l'immagine subito dopo la generazione.", + "faceCorrection": "Correzione del volto con GFPGAN o Codeformer: l'algoritmo rileva i volti nell'immagine e corregge eventuali difetti. Un valore alto cambierà maggiormente l'immagine, dando luogo a volti più attraenti. Codeformer con una maggiore fedeltà preserva l'immagine originale a scapito di una correzione facciale più forte.", + "imageToImage": "Da Immagine a Immagine carica qualsiasi immagine come iniziale, che viene quindi utilizzata per generarne una nuova in base al prompt. Più alto è il valore, più cambierà l'immagine risultante. Sono possibili valori da 0.0 a 1.0, l'intervallo consigliato è 0.25-0.75", + "boundingBox": "Il riquadro di selezione è lo stesso delle impostazioni Larghezza e Altezza per da Testo a Immagine o da Immagine a Immagine. Verrà elaborata solo l'area nella casella.", + "seamCorrection": "Controlla la gestione delle giunzioni visibili che si verificano tra le immagini generate sulla tela.", + "infillAndScaling": "Gestisce i metodi di riempimento (utilizzati su aree mascherate o cancellate dell'area di disegno) e il ridimensionamento (utile per i riquadri di selezione di piccole dimensioni)." + } + }, + "unifiedCanvas": { + "layer": "Livello", + "base": "Base", + "mask": "Maschera", + "maskingOptions": "Opzioni di mascheramento", + "enableMask": "Abilita maschera", + "preserveMaskedArea": "Mantieni area mascherata", + "clearMask": "Cancella maschera (Shift+C)", + "brush": "Pennello", + "eraser": "Cancellino", + "fillBoundingBox": "Riempi rettangolo di selezione", + "eraseBoundingBox": "Cancella rettangolo di selezione", + "colorPicker": "Selettore Colore", + "brushOptions": "Opzioni pennello", + "brushSize": "Dimensioni", + "move": "Sposta", + "resetView": "Reimposta vista", + "mergeVisible": "Fondi il visibile", + "saveToGallery": "Salva nella galleria", + "copyToClipboard": "Copia negli appunti", + "downloadAsImage": "Scarica come immagine", + "undo": "Annulla", + "redo": "Ripeti", + "clearCanvas": "Cancella la Tela", + "canvasSettings": "Impostazioni Tela", + "showIntermediates": "Mostra intermedi", + "showGrid": "Mostra griglia", + "snapToGrid": "Aggancia alla griglia", + "darkenOutsideSelection": "Scurisci l'esterno della selezione", + "autoSaveToGallery": "Salvataggio automatico nella Galleria", + "saveBoxRegionOnly": "Salva solo l'area di selezione", + "limitStrokesToBox": "Limita i tratti all'area di selezione", + "showCanvasDebugInfo": "Mostra ulteriori informazioni sulla Tela", + "clearCanvasHistory": "Cancella cronologia Tela", + "clearHistory": "Cancella la cronologia", + "clearCanvasHistoryMessage": "La cancellazione della cronologia della tela lascia intatta la tela corrente, ma cancella in modo irreversibile la cronologia degli annullamenti e dei ripristini.", + "clearCanvasHistoryConfirm": "Sei sicuro di voler cancellare la cronologia della Tela?", + "emptyTempImageFolder": "Svuota la cartella delle immagini temporanee", + "emptyFolder": "Svuota la cartella", + "emptyTempImagesFolderMessage": "Lo svuotamento della cartella delle immagini temporanee ripristina completamente anche la Tela Unificata. Ciò include tutta la cronologia di annullamento/ripristino, le immagini nell'area di staging e il livello di base della tela.", + "emptyTempImagesFolderConfirm": "Sei sicuro di voler svuotare la cartella temporanea?", + "activeLayer": "Livello attivo", + "canvasScale": "Scala della Tela", + "boundingBox": "Rettangolo di selezione", + "scaledBoundingBox": "Rettangolo di selezione scalato", + "boundingBoxPosition": "Posizione del Rettangolo di selezione", + "canvasDimensions": "Dimensioni della Tela", + "canvasPosition": "Posizione Tela", + "cursorPosition": "Posizione del cursore", + "previous": "Precedente", + "next": "Successivo", + "accept": "Accetta", + "showHide": "Mostra/nascondi", + "discardAll": "Scarta tutto", + "betaClear": "Svuota", + "betaDarkenOutside": "Oscura all'esterno", + "betaLimitToBox": "Limita al rettangolo", + "betaPreserveMasked": "Conserva quanto mascherato", + "antialiasing": "Anti aliasing", + "showResultsOn": "Mostra i risultati (attivato)", + "showResultsOff": "Mostra i risultati (disattivato)", + "saveMask": "Salva $t(unifiedCanvas.mask)" + }, + "accessibility": { + "modelSelect": "Seleziona modello", + "invokeProgressBar": "Barra di avanzamento generazione", + "uploadImage": "Carica immagine", + "previousImage": "Immagine precedente", + "nextImage": "Immagine successiva", + "useThisParameter": "Usa questo parametro", + "reset": "Reimposta", + "copyMetadataJson": "Copia i metadati JSON", + "exitViewer": "Esci dal visualizzatore", + "zoomIn": "Zoom avanti", + "zoomOut": "Zoom indietro", + "rotateCounterClockwise": "Ruotare in senso antiorario", + "rotateClockwise": "Ruotare in senso orario", + "flipHorizontally": "Capovolgi orizzontalmente", + "toggleLogViewer": "Attiva/disattiva visualizzatore registro", + "showOptionsPanel": "Mostra il pannello laterale", + "flipVertically": "Capovolgi verticalmente", + "toggleAutoscroll": "Attiva/disattiva lo scorrimento automatico", + "modifyConfig": "Modifica configurazione", + "menu": "Menu", + "showGalleryPanel": "Mostra il pannello Galleria", + "loadMore": "Carica altro", + "mode": "Modalità", + "resetUI": "$t(accessibility.reset) l'Interfaccia Utente", + "createIssue": "Segnala un problema" + }, + "ui": { + "hideProgressImages": "Nascondi avanzamento immagini", + "showProgressImages": "Mostra avanzamento immagini", + "swapSizes": "Scambia dimensioni", + "lockRatio": "Blocca le proporzioni" + }, + "nodes": { + "zoomOutNodes": "Rimpicciolire", + "hideGraphNodes": "Nascondi sovrapposizione grafico", + "hideLegendNodes": "Nascondi la legenda del tipo di campo", + "showLegendNodes": "Mostra legenda del tipo di campo", + "hideMinimapnodes": "Nascondi minimappa", + "showMinimapnodes": "Mostra minimappa", + "zoomInNodes": "Ingrandire", + "fitViewportNodes": "Adatta vista", + "showGraphNodes": "Mostra sovrapposizione grafico", + "reloadNodeTemplates": "Ricarica i modelli di nodo", + "loadWorkflow": "Importa flusso di lavoro JSON", + "downloadWorkflow": "Esporta flusso di lavoro JSON", + "scheduler": "Campionatore", + "addNode": "Aggiungi nodo", + "sDXLMainModelFieldDescription": "Campo del modello SDXL.", + "boardField": "Bacheca", + "animatedEdgesHelp": "Anima i bordi selezionati e i bordi collegati ai nodi selezionati", + "sDXLMainModelField": "Modello SDXL", + "executionStateInProgress": "In corso", + "executionStateError": "Errore", + "executionStateCompleted": "Completato", + "boardFieldDescription": "Una bacheca della galleria", + "addNodeToolTip": "Aggiungi nodo (Shift+A, Space)", + "sDXLRefinerModelField": "Modello Refiner", + "problemReadingMetadata": "Problema durante la lettura dei metadati dall'immagine", + "colorCodeEdgesHelp": "Bordi con codice colore in base ai campi collegati", + "animatedEdges": "Bordi animati", + "snapToGrid": "Aggancia alla griglia", + "validateConnections": "Convalida connessioni e grafico", + "validateConnectionsHelp": "Impedisce che vengano effettuate connessioni non valide e che vengano \"invocati\" grafici non validi", + "fullyContainNodesHelp": "I nodi devono essere completamente all'interno della casella di selezione per essere selezionati", + "fullyContainNodes": "Contenere completamente i nodi da selezionare", + "snapToGridHelp": "Aggancia i nodi alla griglia quando vengono spostati", + "workflowSettings": "Impostazioni Editor del flusso di lavoro", + "colorCodeEdges": "Bordi con codice colore", + "mainModelField": "Modello", + "noOutputRecorded": "Nessun output registrato", + "noFieldsLinearview": "Nessun campo aggiunto alla vista lineare", + "removeLinearView": "Rimuovi dalla vista lineare", + "workflowDescription": "Breve descrizione", + "workflowContact": "Contatto", + "workflowVersion": "Versione", + "workflow": "Flusso di lavoro", + "noWorkflow": "Nessun flusso di lavoro", + "workflowTags": "Tag", + "workflowValidation": "Errore di convalida del flusso di lavoro", + "workflowAuthor": "Autore", + "workflowName": "Nome", + "workflowNotes": "Note", + "unhandledInputProperty": "Proprietà di input non gestita", + "versionUnknown": " Versione sconosciuta", + "unableToValidateWorkflow": "Impossibile convalidare il flusso di lavoro", + "updateApp": "Aggiorna App", + "problemReadingWorkflow": "Problema durante la lettura del flusso di lavoro dall'immagine", + "unableToLoadWorkflow": "Impossibile caricare il flusso di lavoro", + "updateNode": "Aggiorna nodo", + "version": "Versione", + "notes": "Note", + "problemSettingTitle": "Problema nell'impostazione del titolo", + "unkownInvocation": "Tipo di invocazione sconosciuta", + "unknownTemplate": "Modello sconosciuto", + "nodeType": "Tipo di nodo", + "vaeField": "VAE", + "unhandledOutputProperty": "Proprietà di output non gestita", + "notesDescription": "Aggiunge note sul tuo flusso di lavoro", + "unknownField": "Campo sconosciuto", + "unknownNode": "Nodo sconosciuto", + "vaeFieldDescription": "Sotto modello VAE.", + "booleanPolymorphicDescription": "Una raccolta di booleani.", + "missingTemplate": "Nodo non valido: nodo {{node}} di tipo {{type}} modello mancante (non installato?)", + "outputSchemaNotFound": "Schema di output non trovato", + "colorFieldDescription": "Un colore RGBA.", + "maybeIncompatible": "Potrebbe essere incompatibile con quello installato", + "noNodeSelected": "Nessun nodo selezionato", + "colorPolymorphic": "Colore polimorfico", + "booleanCollectionDescription": "Una raccolta di booleani.", + "colorField": "Colore", + "nodeTemplate": "Modello di nodo", + "nodeOpacity": "Opacità del nodo", + "pickOne": "Sceglierne uno", + "outputField": "Campo di output", + "nodeSearch": "Cerca nodi", + "nodeOutputs": "Uscite del nodo", + "collectionItem": "Oggetto della raccolta", + "noConnectionInProgress": "Nessuna connessione in corso", + "noConnectionData": "Nessun dato di connessione", + "outputFields": "Campi di output", + "cannotDuplicateConnection": "Impossibile creare connessioni duplicate", + "booleanPolymorphic": "Polimorfico booleano", + "colorPolymorphicDescription": "Una collezione di colori polimorfici.", + "missingCanvaInitImage": "Immagine iniziale della tela mancante", + "clipFieldDescription": "Sottomodelli di tokenizzatore e codificatore di testo.", + "noImageFoundState": "Nessuna immagine iniziale trovata nello stato", + "clipField": "CLIP", + "noMatchingNodes": "Nessun nodo corrispondente", + "noFieldType": "Nessun tipo di campo", + "colorCollection": "Una collezione di colori.", + "noOutputSchemaName": "Nessun nome dello schema di output trovato nell'oggetto di riferimento", + "boolean": "Booleani", + "missingCanvaInitMaskImages": "Immagini di inizializzazione e maschera della tela mancanti", + "oNNXModelField": "Modello ONNX", + "node": "Nodo", + "booleanDescription": "I booleani sono veri o falsi.", + "collection": "Raccolta", + "cannotConnectInputToInput": "Impossibile collegare Input a Input", + "cannotConnectOutputToOutput": "Impossibile collegare Output ad Output", + "booleanCollection": "Raccolta booleana", + "cannotConnectToSelf": "Impossibile connettersi a se stesso", + "mismatchedVersion": "Nodo non valido: il nodo {{node}} di tipo {{type}} ha una versione non corrispondente (provare ad aggiornare?)", + "outputNode": "Nodo di Output", + "loadingNodes": "Caricamento nodi...", + "oNNXModelFieldDescription": "Campo del modello ONNX.", + "denoiseMaskFieldDescription": "La maschera di riduzione del rumore può essere passata tra i nodi", + "floatCollectionDescription": "Una raccolta di numeri virgola mobile.", + "enum": "Enumeratore", + "float": "In virgola mobile", + "doesNotExist": "non esiste", + "currentImageDescription": "Visualizza l'immagine corrente nell'editor dei nodi", + "fieldTypesMustMatch": "I tipi di campo devono corrispondere", + "edge": "Bordo", + "enumDescription": "Gli enumeratori sono valori che possono essere una delle diverse opzioni.", + "denoiseMaskField": "Maschera riduzione rumore", + "currentImage": "Immagine corrente", + "floatCollection": "Raccolta in virgola mobile", + "inputField": "Campo di Input", + "controlFieldDescription": "Informazioni di controllo passate tra i nodi.", + "skippingUnknownOutputType": "Tipo di campo di output sconosciuto saltato", + "latentsFieldDescription": "Le immagini latenti possono essere passate tra i nodi.", + "ipAdapterPolymorphicDescription": "Una raccolta di adattatori IP.", + "latentsPolymorphicDescription": "Le immagini latenti possono essere passate tra i nodi.", + "ipAdapterCollection": "Raccolta Adattatori IP", + "conditioningCollection": "Raccolta condizionamenti", + "ipAdapterPolymorphic": "Adattatore IP Polimorfico", + "integerPolymorphicDescription": "Una raccolta di numeri interi.", + "conditioningCollectionDescription": "Il condizionamento può essere passato tra i nodi.", + "skippingReservedFieldType": "Tipo di campo riservato saltato", + "conditioningPolymorphic": "Condizionamento Polimorfico", + "integer": "Numero Intero", + "latentsCollection": "Raccolta Latenti", + "sourceNode": "Nodo di origine", + "integerDescription": "Gli interi sono numeri senza punto decimale.", + "stringPolymorphic": "Stringa polimorfica", + "conditioningPolymorphicDescription": "Il condizionamento può essere passato tra i nodi.", + "skipped": "Saltato", + "imagePolymorphic": "Immagine Polimorfica", + "imagePolymorphicDescription": "Una raccolta di immagini.", + "floatPolymorphic": "Numeri in virgola mobile Polimorfici", + "ipAdapterCollectionDescription": "Una raccolta di adattatori IP.", + "stringCollectionDescription": "Una raccolta di stringhe.", + "unableToParseNode": "Impossibile analizzare il nodo", + "controlCollection": "Raccolta di Controllo", + "stringCollection": "Raccolta di stringhe", + "inputMayOnlyHaveOneConnection": "L'ingresso può avere solo una connessione", + "ipAdapter": "Adattatore IP", + "integerCollection": "Raccolta di numeri interi", + "controlCollectionDescription": "Informazioni di controllo passate tra i nodi.", + "skippedReservedInput": "Campo di input riservato saltato", + "inputNode": "Nodo di Input", + "imageField": "Immagine", + "skippedReservedOutput": "Campo di output riservato saltato", + "integerCollectionDescription": "Una raccolta di numeri interi.", + "conditioningFieldDescription": "Il condizionamento può essere passato tra i nodi.", + "stringDescription": "Le stringhe sono testo.", + "integerPolymorphic": "Numero intero Polimorfico", + "ipAdapterModel": "Modello Adattatore IP", + "latentsPolymorphic": "Latenti polimorfici", + "skippingInputNoTemplate": "Campo di input senza modello saltato", + "ipAdapterDescription": "Un adattatore di prompt di immagini (Adattatore IP).", + "stringPolymorphicDescription": "Una raccolta di stringhe.", + "skippingUnknownInputType": "Tipo di campo di input sconosciuto saltato", + "controlField": "Controllo", + "ipAdapterModelDescription": "Campo Modello adattatore IP", + "invalidOutputSchema": "Schema di output non valido", + "floatDescription": "I numeri in virgola mobile sono numeri con un punto decimale.", + "floatPolymorphicDescription": "Una raccolta di numeri in virgola mobile.", + "conditioningField": "Condizionamento", + "string": "Stringa", + "latentsField": "Latenti", + "connectionWouldCreateCycle": "La connessione creerebbe un ciclo", + "inputFields": "Campi di Input", + "uNetFieldDescription": "Sub-modello UNet.", + "imageCollectionDescription": "Una raccolta di immagini.", + "imageFieldDescription": "Le immagini possono essere passate tra i nodi.", + "unableToParseEdge": "Impossibile analizzare il bordo", + "latentsCollectionDescription": "Le immagini latenti possono essere passate tra i nodi.", + "imageCollection": "Raccolta Immagini", + "loRAModelField": "LoRA", + "updateAllNodes": "Aggiorna i nodi", + "unableToUpdateNodes_one": "Impossibile aggiornare {{count}} nodo", + "unableToUpdateNodes_many": "Impossibile aggiornare {{count}} nodi", + "unableToUpdateNodes_other": "Impossibile aggiornare {{count}} nodi", + "addLinearView": "Aggiungi alla vista Lineare", + "outputFieldInInput": "Campo di uscita in ingresso", + "unableToMigrateWorkflow": "Impossibile migrare il flusso di lavoro", + "unableToUpdateNode": "Impossibile aggiornare nodo", + "unknownErrorValidatingWorkflow": "Errore sconosciuto durante la convalida del flusso di lavoro", + "collectionFieldType": "{{name}} Raccolta", + "collectionOrScalarFieldType": "{{name}} Raccolta|Scalare", + "nodeVersion": "Versione Nodo", + "inputFieldTypeParseError": "Impossibile analizzare il tipo di campo di input {{node}}.{{field}} ({{message}})", + "unsupportedArrayItemType": "Tipo di elemento dell'array non supportato \"{{type}}\"", + "targetNodeFieldDoesNotExist": "Connessione non valida: il campo di destinazione/input {{node}}.{{field}} non esiste", + "unsupportedMismatchedUnion": "tipo CollectionOrScalar non corrispondente con tipi di base {{firstType}} e {{secondType}}", + "allNodesUpdated": "Tutti i nodi sono aggiornati", + "sourceNodeDoesNotExist": "Connessione non valida: il nodo di origine/output {{node}} non esiste", + "unableToExtractEnumOptions": "Impossibile estrarre le opzioni enum", + "unableToParseFieldType": "Impossibile analizzare il tipo di campo", + "unrecognizedWorkflowVersion": "Versione dello schema del flusso di lavoro non riconosciuta {{version}}", + "outputFieldTypeParseError": "Impossibile analizzare il tipo di campo di output {{node}}.{{field}} ({{message}})", + "sourceNodeFieldDoesNotExist": "Connessione non valida: il campo di origine/output {{node}}.{{field}} non esiste", + "unableToGetWorkflowVersion": "Impossibile ottenere la versione dello schema del flusso di lavoro", + "nodePack": "Pacchetto di nodi", + "unableToExtractSchemaNameFromRef": "Impossibile estrarre il nome dello schema dal riferimento", + "unknownOutput": "Output sconosciuto: {{name}}", + "unknownNodeType": "Tipo di nodo sconosciuto", + "targetNodeDoesNotExist": "Connessione non valida: il nodo di destinazione/input {{node}} non esiste", + "unknownFieldType": "$t(nodes.unknownField) tipo: {{type}}", + "deletedInvalidEdge": "Eliminata connessione non valida {{source}} -> {{target}}", + "unknownInput": "Input sconosciuto: {{name}}", + "prototypeDesc": "Questa invocazione è un prototipo. Potrebbe subire modifiche sostanziali durante gli aggiornamenti dell'app e potrebbe essere rimossa in qualsiasi momento.", + "betaDesc": "Questa invocazione è in versione beta. Fino a quando non sarà stabile, potrebbe subire modifiche importanti durante gli aggiornamenti dell'app. Abbiamo intenzione di supportare questa invocazione a lungo termine.", + "newWorkflow": "Nuovo flusso di lavoro", + "newWorkflowDesc": "Creare un nuovo flusso di lavoro?", + "newWorkflowDesc2": "Il flusso di lavoro attuale presenta modifiche non salvate.", + "unsupportedAnyOfLength": "unione di troppi elementi ({{count}})" + }, + "boards": { + "autoAddBoard": "Aggiungi automaticamente bacheca", + "menuItemAutoAdd": "Aggiungi automaticamente a questa Bacheca", + "cancel": "Annulla", + "addBoard": "Aggiungi Bacheca", + "bottomMessage": "L'eliminazione di questa bacheca e delle sue immagini ripristinerà tutte le funzionalità che le stanno attualmente utilizzando.", + "changeBoard": "Cambia Bacheca", + "loading": "Caricamento in corso ...", + "clearSearch": "Cancella Ricerca", + "topMessage": "Questa bacheca contiene immagini utilizzate nelle seguenti funzionalità:", + "move": "Sposta", + "myBoard": "Bacheca", + "searchBoard": "Cerca bacheche ...", + "noMatching": "Nessuna bacheca corrispondente", + "selectBoard": "Seleziona una Bacheca", + "uncategorized": "Non categorizzato", + "downloadBoard": "Scarica la bacheca", + "deleteBoardOnly": "solo la Bacheca", + "deleteBoard": "Elimina Bacheca", + "deleteBoardAndImages": "Bacheca e Immagini", + "deletedBoardsCannotbeRestored": "Le bacheche eliminate non possono essere ripristinate", + "movingImagesToBoard_one": "Spostare {{count}} immagine nella bacheca:", + "movingImagesToBoard_many": "Spostare {{count}} immagini nella bacheca:", + "movingImagesToBoard_other": "Spostare {{count}} immagini nella bacheca:" + }, + "controlnet": { + "contentShuffleDescription": "Rimescola il contenuto di un'immagine", + "contentShuffle": "Rimescola contenuto", + "beginEndStepPercent": "Percentuale passi Inizio / Fine", + "duplicate": "Duplica", + "balanced": "Bilanciato", + "depthMidasDescription": "Generazione di mappe di profondità usando Midas", + "control": "ControlNet", + "crop": "Ritaglia", + "depthMidas": "Profondità (Midas)", + "enableControlnet": "Abilita ControlNet", + "detectResolution": "Rileva risoluzione", + "controlMode": "Modalità Controllo", + "cannyDescription": "Canny rilevamento bordi", + "depthZoe": "Profondità (Zoe)", + "autoConfigure": "Configura automaticamente il processore", + "delete": "Elimina", + "depthZoeDescription": "Generazione di mappe di profondità usando Zoe", + "resize": "Ridimensiona", + "showAdvanced": "Mostra opzioni Avanzate", + "bgth": "Soglia rimozione sfondo", + "importImageFromCanvas": "Importa immagine dalla Tela", + "lineartDescription": "Converte l'immagine in lineart", + "importMaskFromCanvas": "Importa maschera dalla Tela", + "hideAdvanced": "Nascondi opzioni avanzate", + "ipAdapterModel": "Modello Adattatore", + "resetControlImage": "Reimposta immagine di controllo", + "f": "F", + "h": "H", + "prompt": "Prompt", + "openPoseDescription": "Stima della posa umana utilizzando Openpose", + "resizeMode": "Modalità ridimensionamento", + "weight": "Peso", + "selectModel": "Seleziona un modello", + "w": "W", + "processor": "Processore", + "none": "Nessuno", + "incompatibleBaseModel": "Modello base incompatibile:", + "pidiDescription": "Elaborazione immagini PIDI", + "fill": "Riempie", + "colorMapDescription": "Genera una mappa dei colori dall'immagine", + "lineartAnimeDescription": "Elaborazione lineart in stile anime", + "imageResolution": "Risoluzione dell'immagine", + "colorMap": "Colore", + "lowThreshold": "Soglia inferiore", + "highThreshold": "Soglia superiore", + "normalBaeDescription": "Elaborazione BAE normale", + "noneDescription": "Nessuna elaborazione applicata", + "saveControlImage": "Salva immagine di controllo", + "toggleControlNet": "Attiva/disattiva questo ControlNet", + "safe": "Sicuro", + "colorMapTileSize": "Dimensione piastrella", + "ipAdapterImageFallback": "Nessuna immagine dell'Adattatore IP selezionata", + "mediapipeFaceDescription": "Rilevamento dei volti tramite Mediapipe", + "hedDescription": "Rilevamento dei bordi nidificati olisticamente", + "setControlImageDimensions": "Imposta le dimensioni dell'immagine di controllo su L/A", + "resetIPAdapterImage": "Reimposta immagine Adattatore IP", + "handAndFace": "Mano e faccia", + "enableIPAdapter": "Abilita Adattatore IP", + "maxFaces": "Numero massimo di volti", + "addT2IAdapter": "Aggiungi $t(common.t2iAdapter)", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) abilitato, $t(common.t2iAdapter) disabilitati", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) abilitato, $t(common.controlNet) disabilitati", + "addControlNet": "Aggiungi $t(common.controlNet)", + "controlNetT2IMutexDesc": "$t(common.controlNet) e $t(common.t2iAdapter) contemporaneamente non sono attualmente supportati.", + "addIPAdapter": "Aggiungi $t(common.ipAdapter)", + "controlAdapter_one": "Adattatore di Controllo", + "controlAdapter_many": "Adattatori di Controllo", + "controlAdapter_other": "Adattatori di Controllo", + "megaControl": "Mega ControlNet", + "minConfidence": "Confidenza minima", + "scribble": "Scribble", + "amult": "Angolo di illuminazione", + "coarse": "Approssimativo" + }, + "queue": { + "queueFront": "Aggiungi all'inizio della coda", + "queueBack": "Aggiungi alla coda", + "queueCountPrediction": "Aggiungi {{predicted}} alla coda", + "queue": "Coda", + "status": "Stato", + "pruneSucceeded": "Rimossi {{item_count}} elementi completati dalla coda", + "cancelTooltip": "Annulla l'elemento corrente", + "queueEmpty": "Coda vuota", + "pauseSucceeded": "Elaborazione sospesa", + "in_progress": "In corso", + "notReady": "Impossibile mettere in coda", + "batchFailedToQueue": "Impossibile mettere in coda il lotto", + "completed": "Completati", + "batchValues": "Valori del lotto", + "cancelFailed": "Problema durante l'annullamento dell'elemento", + "batchQueued": "Lotto aggiunto alla coda", + "pauseFailed": "Problema durante la sospensione dell'elaborazione", + "clearFailed": "Problema nella cancellazione della coda", + "queuedCount": "{{pending}} In attesa", + "front": "inizio", + "clearSucceeded": "Coda cancellata", + "pause": "Sospendi", + "pruneTooltip": "Rimuovi {{item_count}} elementi completati", + "cancelSucceeded": "Elemento annullato", + "batchQueuedDesc_one": "Aggiunta {{count}} sessione a {{direction}} della coda", + "batchQueuedDesc_many": "Aggiunte {{count}} sessioni a {{direction}} della coda", + "batchQueuedDesc_other": "Aggiunte {{count}} sessioni a {{direction}} della coda", + "graphQueued": "Grafico in coda", + "batch": "Lotto", + "clearQueueAlertDialog": "Lo svuotamento della coda annulla immediatamente tutti gli elementi in elaborazione e cancella completamente la coda.", + "pending": "In attesa", + "completedIn": "Completato in", + "resumeFailed": "Problema nel riavvio dell'elaborazione", + "clear": "Cancella", + "prune": "Rimuovi", + "total": "Totale", + "canceled": "Annullati", + "pruneFailed": "Problema nel rimuovere la coda", + "cancelBatchSucceeded": "Lotto annullato", + "clearTooltip": "Annulla e cancella tutti gli elementi", + "current": "Attuale", + "pauseTooltip": "Sospende l'elaborazione", + "failed": "Falliti", + "cancelItem": "Annulla l'elemento", + "next": "Prossimo", + "cancelBatch": "Annulla lotto", + "back": "fine", + "cancel": "Annulla", + "session": "Sessione", + "queueTotal": "{{total}} Totale", + "resumeSucceeded": "Elaborazione ripresa", + "enqueueing": "Lotto in coda", + "resumeTooltip": "Riprendi l'elaborazione", + "resume": "Riprendi", + "cancelBatchFailed": "Problema durante l'annullamento del lotto", + "clearQueueAlertDialog2": "Sei sicuro di voler cancellare la coda?", + "item": "Elemento", + "graphFailedToQueue": "Impossibile mettere in coda il grafico", + "queueMaxExceeded": "È stato superato il limite massimo di {{max_queue_size}} e {{skip}} elementi verrebbero saltati", + "batchFieldValues": "Valori Campi Lotto", + "time": "Tempo" + }, + "embedding": { + "noMatchingEmbedding": "Nessun Incorporamento corrispondente", + "addEmbedding": "Aggiungi Incorporamento", + "incompatibleModel": "Modello base incompatibile:", + "noEmbeddingsLoaded": "Nessun incorporamento caricato" + }, + "models": { + "noMatchingModels": "Nessun modello corrispondente", + "loading": "caricamento", + "noMatchingLoRAs": "Nessun LoRA corrispondente", + "noLoRAsAvailable": "Nessun LoRA disponibile", + "noModelsAvailable": "Nessun modello disponibile", + "selectModel": "Seleziona un modello", + "selectLoRA": "Seleziona un LoRA", + "noRefinerModelsInstalled": "Nessun modello SDXL Refiner installato", + "noLoRAsInstalled": "Nessun LoRA installato", + "esrganModel": "Modello ESRGAN", + "addLora": "Aggiungi LoRA", + "noLoRAsLoaded": "Nessuna LoRA caricata" + }, + "invocationCache": { + "disable": "Disabilita", + "misses": "Non trovati in cache", + "enableFailed": "Problema nell'abilitazione della cache delle invocazioni", + "invocationCache": "Cache delle invocazioni", + "clearSucceeded": "Cache delle invocazioni svuotata", + "enableSucceeded": "Cache delle invocazioni abilitata", + "clearFailed": "Problema durante lo svuotamento della cache delle invocazioni", + "hits": "Trovati in cache", + "disableSucceeded": "Cache delle invocazioni disabilitata", + "disableFailed": "Problema durante la disabilitazione della cache delle invocazioni", + "enable": "Abilita", + "clear": "Svuota", + "maxCacheSize": "Dimensione max cache", + "cacheSize": "Dimensione cache", + "useCache": "Usa Cache" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "Utilizza un seme diverso per ogni immagine", + "perIterationLabel": "Per iterazione", + "perIterationDesc": "Utilizza un seme diverso per ogni iterazione", + "perPromptLabel": "Per immagine", + "label": "Comportamento del seme" + }, + "enableDynamicPrompts": "Abilita prompt dinamici", + "combinatorial": "Generazione combinatoria", + "maxPrompts": "Numero massimo di prompt", + "promptsWithCount_one": "{{count}} Prompt", + "promptsWithCount_many": "{{count}} Prompt", + "promptsWithCount_other": "{{count}} Prompt", + "dynamicPrompts": "Prompt dinamici", + "promptsPreview": "Anteprima dei prompt" + }, + "popovers": { + "paramScheduler": { + "paragraphs": [ + "Il campionatore definisce come aggiungere in modo iterativo il rumore a un'immagine o come aggiornare un campione in base all'output di un modello." + ], + "heading": "Campionatore" + }, + "compositingMaskAdjustments": { + "heading": "Regolazioni della maschera", + "paragraphs": [ + "Regola la maschera." + ] + }, + "compositingCoherenceSteps": { + "heading": "Passi", + "paragraphs": [ + "Numero di passi di riduzione del rumore utilizzati nel Passaggio di Coerenza.", + "Uguale al parametro principale Passi." + ] + }, + "compositingBlur": { + "heading": "Sfocatura", + "paragraphs": [ + "Il raggio di sfocatura della maschera." + ] + }, + "compositingCoherenceMode": { + "heading": "Modalità", + "paragraphs": [ + "La modalità del Passaggio di Coerenza." + ] + }, + "clipSkip": { + "paragraphs": [ + "Scegli quanti livelli del modello CLIP saltare.", + "Alcuni modelli funzionano meglio con determinate impostazioni di CLIP Skip.", + "Un valore più alto in genere produce un'immagine meno dettagliata." + ] + }, + "compositingCoherencePass": { + "heading": "Passaggio di Coerenza", + "paragraphs": [ + "Un secondo ciclo di riduzione del rumore aiuta a comporre l'immagine Inpaint/Outpaint." + ] + }, + "compositingStrength": { + "heading": "Forza", + "paragraphs": [ + "Intensità di riduzione del rumore per il passaggio di coerenza.", + "Uguale al parametro intensità di riduzione del rumore da immagine a immagine." + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "Il processo di generazione evita i concetti nel prompt negativo. Utilizzatelo per escludere qualità o oggetti dall'output.", + "Supporta la sintassi e gli incorporamenti di Compel." + ], + "heading": "Prompt negativo" + }, + "compositingBlurMethod": { + "heading": "Metodo di sfocatura", + "paragraphs": [ + "Il metodo di sfocatura applicato all'area mascherata." + ] + }, + "paramPositiveConditioning": { + "heading": "Prompt positivo", + "paragraphs": [ + "Guida il processo di generazione. Puoi usare qualsiasi parola o frase.", + "Supporta sintassi e incorporamenti di Compel e Prompt Dinamici." + ] + }, + "controlNetBeginEnd": { + "heading": "Percentuale passi Inizio / Fine", + "paragraphs": [ + "A quali passi del processo di rimozione del rumore verrà applicato ControlNet.", + "I ControlNet applicati all'inizio del processo guidano la composizione, mentre i ControlNet applicati alla fine guidano i dettagli." + ] + }, + "noiseUseCPU": { + "paragraphs": [ + "Controlla se viene generato rumore sulla CPU o sulla GPU.", + "Con il rumore della CPU abilitato, un seme particolare produrrà la stessa immagine su qualsiasi macchina.", + "Non vi è alcun impatto sulle prestazioni nell'abilitare il rumore della CPU." + ], + "heading": "Usa la CPU per generare rumore" + }, + "scaleBeforeProcessing": { + "paragraphs": [ + "Ridimensiona l'area selezionata alla dimensione più adatta al modello prima del processo di generazione dell'immagine." + ], + "heading": "Scala prima dell'elaborazione" + }, + "paramRatio": { + "heading": "Proporzioni", + "paragraphs": [ + "Le proporzioni delle dimensioni dell'immagine generata.", + "Per i modelli SD1.5 si consiglia una dimensione dell'immagine (in numero di pixel) equivalente a 512x512 mentre per i modelli SDXL si consiglia una dimensione equivalente a 1024x1024." + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "Prompt Dinamici crea molte variazioni a partire da un singolo prompt.", + "La sintassi di base è \"a {red|green|blue} ball\". Ciò produrrà tre prompt: \"a red ball\", \"a green ball\" e \"a blue ball\".", + "Puoi utilizzare la sintassi quante volte vuoi in un singolo prompt, ma assicurati di tenere sotto controllo il numero di prompt generati con l'impostazione \"Numero massimo di prompt\"." + ], + "heading": "Prompt Dinamici" + }, + "paramVAE": { + "paragraphs": [ + "Modello utilizzato per tradurre l'output dell'intelligenza artificiale nell'immagine finale." + ], + "heading": "VAE" + }, + "paramIterations": { + "paragraphs": [ + "Il numero di immagini da generare.", + "Se i prompt dinamici sono abilitati, ciascuno dei prompt verrà generato questo numero di volte." + ], + "heading": "Iterazioni" + }, + "paramVAEPrecision": { + "heading": "Precisione VAE", + "paragraphs": [ + "La precisione utilizzata durante la codifica e decodifica VAE. FP16/mezza precisione è più efficiente, a scapito di minori variazioni dell'immagine." + ] + }, + "paramSeed": { + "paragraphs": [ + "Controlla il rumore iniziale utilizzato per la generazione.", + "Disabilita seme \"Casuale\" per produrre risultati identici con le stesse impostazioni di generazione." + ], + "heading": "Seme" + }, + "controlNetResizeMode": { + "heading": "Modalità ridimensionamento", + "paragraphs": [ + "Come l'immagine ControlNet verrà adattata alle dimensioni di output dell'immagine." + ] + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "Controlla il modo in cui viene utilizzato il seme durante la generazione dei prompt.", + "Per iterazione utilizzerà un seme univoco per ogni iterazione. Usalo per esplorare variazioni del prompt su un singolo seme.", + "Ad esempio, se hai 5 prompt, ogni immagine utilizzerà lo stesso seme.", + "Per immagine utilizzerà un seme univoco per ogni immagine. Ciò fornisce più variazione." + ], + "heading": "Comportamento del seme" + }, + "paramModel": { + "heading": "Modello", + "paragraphs": [ + "Modello utilizzato per i passaggi di riduzione del rumore.", + "Diversi modelli sono generalmente addestrati per specializzarsi nella produzione di particolari risultati e contenuti estetici." + ] + }, + "paramDenoisingStrength": { + "paragraphs": [ + "Quanto rumore viene aggiunto all'immagine in ingresso.", + "0 risulterà in un'immagine identica, mentre 1 risulterà in un'immagine completamente nuova." + ], + "heading": "Forza di riduzione del rumore" + }, + "dynamicPromptsMaxPrompts": { + "heading": "Numero massimo di prompt", + "paragraphs": [ + "Limita il numero di prompt che possono essere generati da Prompt Dinamici." + ] + }, + "infillMethod": { + "paragraphs": [ + "Metodo per riempire l'area selezionata." + ], + "heading": "Metodo di riempimento" + }, + "controlNetWeight": { + "heading": "Peso", + "paragraphs": [ + "Quanto forte sarà l'impatto di ControlNet sull'immagine generata." + ] + }, + "paramCFGScale": { + "heading": "Scala CFG", + "paragraphs": [ + "Controlla quanto il tuo prompt influenza il processo di generazione." + ] + }, + "controlNetControlMode": { + "paragraphs": [ + "Attribuisce più peso al prompt o a ControlNet." + ], + "heading": "Modalità di controllo" + }, + "paramSteps": { + "heading": "Passi", + "paragraphs": [ + "Numero di passi che verranno eseguiti in ogni generazione.", + "Un numero di passi più elevato generalmente creerà immagini migliori ma richiederà più tempo di generazione." + ] + }, + "lora": { + "heading": "Peso LoRA", + "paragraphs": [ + "Un peso LoRA più elevato porterà a impatti maggiori sull'immagine finale." + ] + }, + "controlNet": { + "paragraphs": [ + "ControlNet fornisce una guida al processo di generazione, aiutando a creare immagini con composizione, struttura o stile controllati, a seconda del modello selezionato." + ], + "heading": "ControlNet" + }, + "paramCFGRescaleMultiplier": { + "heading": "Moltiplicatore di riscala CFG", + "paragraphs": [ + "Moltiplicatore di riscala per la guida CFG, utilizzato per modelli addestrati utilizzando SNR a terminale zero (ztsnr). Valore suggerito 0.7." + ] + } + }, + "sdxl": { + "selectAModel": "Seleziona un modello", + "scheduler": "Campionatore", + "noModelsAvailable": "Nessun modello disponibile", + "denoisingStrength": "Forza di riduzione del rumore", + "concatPromptStyle": "Concatena Prompt & Stile", + "loading": "Caricamento...", + "steps": "Passi", + "refinerStart": "Inizio Affinamento", + "cfgScale": "Scala CFG", + "negStylePrompt": "Prompt Stile negativo", + "refiner": "Affinatore", + "negAestheticScore": "Punteggio estetico negativo", + "useRefiner": "Utilizza l'affinatore", + "refinermodel": "Modello Affinatore", + "posAestheticScore": "Punteggio estetico positivo", + "posStylePrompt": "Prompt Stile positivo" + }, + "metadata": { + "initImage": "Immagine iniziale", + "seamless": "Senza giunture", + "positivePrompt": "Prompt positivo", + "negativePrompt": "Prompt negativo", + "generationMode": "Modalità generazione", + "Threshold": "Livello di soglia del rumore", + "metadata": "Metadati", + "strength": "Forza Immagine a Immagine", + "seed": "Seme", + "imageDetails": "Dettagli dell'immagine", + "perlin": "Rumore Perlin", + "model": "Modello", + "noImageDetails": "Nessun dettaglio dell'immagine trovato", + "hiresFix": "Ottimizzazione Alta Risoluzione", + "cfgScale": "Scala CFG", + "fit": "Adatta Immagine a Immagine", + "height": "Altezza", + "variations": "Coppie Peso-Seme", + "noMetaData": "Nessun metadato trovato", + "width": "Larghezza", + "createdBy": "Creato da", + "workflow": "Flusso di lavoro", + "steps": "Passi", + "scheduler": "Campionatore", + "recallParameters": "Richiama i parametri", + "noRecallParameters": "Nessun parametro da richiamare trovato" + }, + "hrf": { + "enableHrf": "Abilita Correzione Alta Risoluzione", + "upscaleMethod": "Metodo di ampliamento", + "enableHrfTooltip": "Genera con una risoluzione iniziale inferiore, esegue l'ampliamento alla risoluzione di base, quindi esegue Immagine a Immagine.", + "metadata": { + "strength": "Forza della Correzione Alta Risoluzione", + "enabled": "Correzione Alta Risoluzione Abilitata", + "method": "Metodo della Correzione Alta Risoluzione" + }, + "hrf": "Correzione Alta Risoluzione", + "hrfStrength": "Forza della Correzione Alta Risoluzione", + "strengthTooltip": "Valori più bassi comportano meno dettagli, il che può ridurre potenziali artefatti." + }, + "workflows": { + "saveWorkflowAs": "Salva flusso di lavoro come", + "workflowEditorMenu": "Menu dell'editor del flusso di lavoro", + "noSystemWorkflows": "Nessun flusso di lavoro del sistema", + "workflowName": "Nome del flusso di lavoro", + "noUserWorkflows": "Nessun flusso di lavoro utente", + "defaultWorkflows": "Flussi di lavoro predefiniti", + "saveWorkflow": "Salva flusso di lavoro", + "openWorkflow": "Apri flusso di lavoro", + "clearWorkflowSearchFilter": "Cancella il filtro di ricerca del flusso di lavoro", + "workflowLibrary": "Libreria", + "noRecentWorkflows": "Nessun flusso di lavoro recente", + "workflowSaved": "Flusso di lavoro salvato", + "workflowIsOpen": "Il flusso di lavoro è aperto", + "unnamedWorkflow": "Flusso di lavoro senza nome", + "savingWorkflow": "Salvataggio del flusso di lavoro...", + "problemLoading": "Problema durante il caricamento dei flussi di lavoro", + "loading": "Caricamento dei flussi di lavoro", + "searchWorkflows": "Cerca flussi di lavoro", + "problemSavingWorkflow": "Problema durante il salvataggio del flusso di lavoro", + "deleteWorkflow": "Elimina flusso di lavoro", + "workflows": "Flussi di lavoro", + "noDescription": "Nessuna descrizione", + "userWorkflows": "I miei flussi di lavoro", + "newWorkflowCreated": "Nuovo flusso di lavoro creato", + "downloadWorkflow": "Salva su file", + "uploadWorkflow": "Carica da file" + }, + "app": { + "storeNotInitialized": "Il negozio non è inizializzato" + } +} diff --git a/invokeai/frontend/web/dist/locales/ja.json b/invokeai/frontend/web/dist/locales/ja.json new file mode 100644 index 0000000000..bfcbffd7d9 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ja.json @@ -0,0 +1,832 @@ +{ + "common": { + "languagePickerLabel": "言語", + "reportBugLabel": "バグ報告", + "settingsLabel": "設定", + "langJapanese": "日本語", + "nodesDesc": "現在、画像生成のためのノードベースシステムを開発中です。機能についてのアップデートにご期待ください。", + "postProcessing": "後処理", + "postProcessDesc1": "Invoke AIは、多彩な後処理の機能を備えています。アップスケーリングと顔修復は、すでにWebUI上で利用可能です。これらは、[Text To Image]および[Image To Image]タブの[詳細オプション]メニューからアクセスできます。また、現在の画像表示の上やビューア内の画像アクションボタンを使って、画像を直接処理することもできます。", + "postProcessDesc2": "より高度な後処理の機能を実現するための専用UIを近日中にリリース予定です。", + "postProcessDesc3": "Invoke AI CLIでは、この他にもEmbiggenをはじめとする様々な機能を利用することができます。", + "training": "追加学習", + "trainingDesc1": "Textual InversionとDreamboothを使って、WebUIから独自のEmbeddingとチェックポイントを追加学習するための専用ワークフローです。", + "trainingDesc2": "InvokeAIは、すでにメインスクリプトを使ったTextual Inversionによるカスタム埋め込み追加学習にも対応しています。", + "upload": "アップロード", + "close": "閉じる", + "load": "ロード", + "back": "戻る", + "statusConnected": "接続済", + "statusDisconnected": "切断済", + "statusError": "エラー", + "statusPreparing": "準備中", + "statusProcessingCanceled": "処理をキャンセル", + "statusProcessingComplete": "処理完了", + "statusGenerating": "生成中", + "statusGeneratingTextToImage": "Text To Imageで生成中", + "statusGeneratingImageToImage": "Image To Imageで生成中", + "statusGenerationComplete": "生成完了", + "statusSavingImage": "画像を保存", + "statusRestoringFaces": "顔の修復", + "statusRestoringFacesGFPGAN": "顔の修復 (GFPGAN)", + "statusRestoringFacesCodeFormer": "顔の修復 (CodeFormer)", + "statusUpscaling": "アップスケーリング", + "statusUpscalingESRGAN": "アップスケーリング (ESRGAN)", + "statusLoadingModel": "モデルを読み込む", + "statusModelChanged": "モデルを変更", + "cancel": "キャンセル", + "accept": "同意", + "langBrPortuguese": "Português do Brasil", + "langRussian": "Русский", + "langSimplifiedChinese": "简体中文", + "langUkranian": "Украї́нська", + "langSpanish": "Español", + "img2img": "img2img", + "unifiedCanvas": "Unified Canvas", + "statusMergingModels": "モデルのマージ", + "statusModelConverted": "変換済モデル", + "statusGeneratingInpainting": "Inpaintingを生成", + "statusIterationComplete": "Iteration Complete", + "statusGeneratingOutpainting": "Outpaintingを生成", + "loading": "ロード中", + "loadingInvokeAI": "Invoke AIをロード中", + "statusConvertingModel": "モデルの変換", + "statusMergedModels": "マージ済モデル", + "githubLabel": "Github", + "hotkeysLabel": "ホットキー", + "langHebrew": "עברית", + "discordLabel": "Discord", + "langItalian": "Italiano", + "langEnglish": "English", + "langArabic": "アラビア語", + "langDutch": "Nederlands", + "langFrench": "Français", + "langGerman": "Deutsch", + "langPortuguese": "Português", + "nodes": "ワークフローエディター", + "langKorean": "한국어", + "langPolish": "Polski", + "txt2img": "txt2img", + "postprocessing": "Post Processing", + "t2iAdapter": "T2I アダプター", + "communityLabel": "コミュニティ", + "dontAskMeAgain": "次回から確認しない", + "areYouSure": "本当によろしいですか?", + "on": "オン", + "nodeEditor": "ノードエディター", + "ipAdapter": "IPアダプター", + "controlAdapter": "コントロールアダプター", + "auto": "自動", + "openInNewTab": "新しいタブで開く", + "controlNet": "コントロールネット", + "statusProcessing": "処理中", + "linear": "リニア", + "imageFailedToLoad": "画像が読み込めません", + "imagePrompt": "画像プロンプト", + "modelManager": "モデルマネージャー", + "lightMode": "ライトモード", + "generate": "生成", + "learnMore": "もっと学ぶ", + "darkMode": "ダークモード", + "random": "ランダム", + "batch": "バッチマネージャー", + "advanced": "高度な設定" + }, + "gallery": { + "uploads": "アップロード", + "showUploads": "アップロードした画像を見る", + "galleryImageSize": "画像のサイズ", + "galleryImageResetSize": "サイズをリセット", + "gallerySettings": "ギャラリーの設定", + "maintainAspectRatio": "アスペクト比を維持", + "singleColumnLayout": "1カラムレイアウト", + "allImagesLoaded": "すべての画像を読み込む", + "loadMore": "さらに読み込む", + "noImagesInGallery": "ギャラリーに画像がありません", + "generations": "生成", + "showGenerations": "生成過程を見る", + "autoSwitchNewImages": "新しい画像に自動切替" + }, + "hotkeys": { + "keyboardShortcuts": "キーボードショートカット", + "appHotkeys": "アプリのホットキー", + "generalHotkeys": "Generalのホットキー", + "galleryHotkeys": "ギャラリーのホットキー", + "unifiedCanvasHotkeys": "Unified Canvasのホットキー", + "invoke": { + "desc": "画像を生成", + "title": "Invoke" + }, + "cancel": { + "title": "キャンセル", + "desc": "画像の生成をキャンセル" + }, + "focusPrompt": { + "desc": "プロンプトテキストボックスにフォーカス", + "title": "プロジェクトにフォーカス" + }, + "toggleOptions": { + "title": "オプションパネルのトグル", + "desc": "オプションパネルの開閉" + }, + "pinOptions": { + "title": "ピン", + "desc": "オプションパネルを固定" + }, + "toggleViewer": { + "title": "ビュワーのトグル", + "desc": "ビュワーを開閉" + }, + "toggleGallery": { + "title": "ギャラリーのトグル", + "desc": "ギャラリードロワーの開閉" + }, + "maximizeWorkSpace": { + "title": "作業領域の最大化", + "desc": "パネルを閉じて、作業領域を最大に" + }, + "changeTabs": { + "title": "タブの切替", + "desc": "他の作業領域と切替" + }, + "consoleToggle": { + "title": "コンソールのトグル", + "desc": "コンソールの開閉" + }, + "setPrompt": { + "title": "プロンプトをセット", + "desc": "現在の画像のプロンプトを使用" + }, + "setSeed": { + "title": "シード値をセット", + "desc": "現在の画像のシード値を使用" + }, + "setParameters": { + "title": "パラメータをセット", + "desc": "現在の画像のすべてのパラメータを使用" + }, + "restoreFaces": { + "title": "顔の修復", + "desc": "現在の画像を修復" + }, + "upscale": { + "title": "アップスケール", + "desc": "現在の画像をアップスケール" + }, + "showInfo": { + "title": "情報を見る", + "desc": "現在の画像のメタデータ情報を表示" + }, + "sendToImageToImage": { + "title": "Image To Imageに転送", + "desc": "現在の画像をImage to Imageに転送" + }, + "deleteImage": { + "title": "画像を削除", + "desc": "現在の画像を削除" + }, + "closePanels": { + "title": "パネルを閉じる", + "desc": "開いているパネルを閉じる" + }, + "previousImage": { + "title": "前の画像", + "desc": "ギャラリー内の1つ前の画像を表示" + }, + "nextImage": { + "title": "次の画像", + "desc": "ギャラリー内の1つ後の画像を表示" + }, + "toggleGalleryPin": { + "title": "ギャラリードロワーの固定", + "desc": "ギャラリーをUIにピン留め/解除" + }, + "increaseGalleryThumbSize": { + "title": "ギャラリーの画像を拡大", + "desc": "ギャラリーのサムネイル画像を拡大" + }, + "decreaseGalleryThumbSize": { + "title": "ギャラリーの画像サイズを縮小", + "desc": "ギャラリーのサムネイル画像を縮小" + }, + "selectBrush": { + "title": "ブラシを選択", + "desc": "ブラシを選択" + }, + "selectEraser": { + "title": "消しゴムを選択", + "desc": "消しゴムを選択" + }, + "decreaseBrushSize": { + "title": "ブラシサイズを縮小", + "desc": "ブラシ/消しゴムのサイズを縮小" + }, + "increaseBrushSize": { + "title": "ブラシサイズを拡大", + "desc": "ブラシ/消しゴムのサイズを拡大" + }, + "decreaseBrushOpacity": { + "title": "ブラシの不透明度を下げる", + "desc": "キャンバスブラシの不透明度を下げる" + }, + "increaseBrushOpacity": { + "title": "ブラシの不透明度を上げる", + "desc": "キャンバスブラシの不透明度を上げる" + }, + "fillBoundingBox": { + "title": "バウンディングボックスを塗りつぶす", + "desc": "ブラシの色でバウンディングボックス領域を塗りつぶす" + }, + "eraseBoundingBox": { + "title": "バウンディングボックスを消す", + "desc": "バウンディングボックス領域を消す" + }, + "colorPicker": { + "title": "カラーピッカーを選択", + "desc": "カラーピッカーを選択" + }, + "toggleLayer": { + "title": "レイヤーを切替", + "desc": "マスク/ベースレイヤの選択を切替" + }, + "clearMask": { + "title": "マスクを消す", + "desc": "マスク全体を消す" + }, + "hideMask": { + "title": "マスクを非表示", + "desc": "マスクを表示/非表示" + }, + "showHideBoundingBox": { + "title": "バウンディングボックスを表示/非表示", + "desc": "バウンディングボックスの表示/非表示を切替" + }, + "saveToGallery": { + "title": "ギャラリーに保存", + "desc": "現在のキャンバスをギャラリーに保存" + }, + "copyToClipboard": { + "title": "クリップボードにコピー", + "desc": "現在のキャンバスをクリップボードにコピー" + }, + "downloadImage": { + "title": "画像をダウンロード", + "desc": "現在の画像をダウンロード" + }, + "resetView": { + "title": "キャンバスをリセット", + "desc": "キャンバスをリセット" + } + }, + "modelManager": { + "modelManager": "モデルマネージャ", + "model": "モデル", + "allModels": "すべてのモデル", + "modelAdded": "モデルを追加", + "modelUpdated": "モデルをアップデート", + "addNew": "新規に追加", + "addNewModel": "新規モデル追加", + "addCheckpointModel": "Checkpointを追加 / Safetensorモデル", + "addDiffuserModel": "Diffusersを追加", + "addManually": "手動で追加", + "manual": "手動", + "name": "名前", + "nameValidationMsg": "モデルの名前を入力", + "description": "概要", + "descriptionValidationMsg": "モデルの概要を入力", + "config": "Config", + "configValidationMsg": "モデルの設定ファイルへのパス", + "modelLocation": "モデルの場所", + "modelLocationValidationMsg": "ディフューザーモデルのあるローカルフォルダーのパスを入力してください", + "repo_id": "Repo ID", + "repoIDValidationMsg": "モデルのリモートリポジトリ", + "vaeLocation": "VAEの場所", + "vaeLocationValidationMsg": "Vaeが配置されている場所へのパス", + "vaeRepoIDValidationMsg": "Vaeのリモートリポジトリ", + "width": "幅", + "widthValidationMsg": "モデルのデフォルトの幅", + "height": "高さ", + "heightValidationMsg": "モデルのデフォルトの高さ", + "addModel": "モデルを追加", + "updateModel": "モデルをアップデート", + "availableModels": "モデルを有効化", + "search": "検索", + "load": "Load", + "active": "active", + "notLoaded": "読み込まれていません", + "cached": "キャッシュ済", + "checkpointFolder": "Checkpointフォルダ", + "clearCheckpointFolder": "Checkpointフォルダ内を削除", + "findModels": "モデルを見つける", + "scanAgain": "再度スキャン", + "modelsFound": "モデルを発見", + "selectFolder": "フォルダを選択", + "selected": "選択済", + "selectAll": "すべて選択", + "deselectAll": "すべて選択解除", + "showExisting": "既存を表示", + "addSelected": "選択済を追加", + "modelExists": "モデルの有無", + "selectAndAdd": "以下のモデルを選択し、追加できます。", + "noModelsFound": "モデルが見つかりません。", + "delete": "削除", + "deleteModel": "モデルを削除", + "deleteConfig": "設定を削除", + "deleteMsg1": "InvokeAIからこのモデルを削除してよろしいですか?", + "deleteMsg2": "これは、モデルがInvokeAIルートフォルダ内にある場合、ディスクからモデルを削除します。カスタム保存場所を使用している場合、モデルはディスクから削除されません。", + "formMessageDiffusersModelLocation": "Diffusersモデルの場所", + "formMessageDiffusersModelLocationDesc": "最低でも1つは入力してください。", + "formMessageDiffusersVAELocation": "VAEの場所s", + "formMessageDiffusersVAELocationDesc": "指定しない場合、InvokeAIは上記のモデルの場所にあるVAEファイルを探します。", + "importModels": "モデルをインポート", + "custom": "カスタム", + "none": "なし", + "convert": "変換", + "statusConverting": "変換中", + "cannotUseSpaces": "スペースは使えません", + "convertToDiffusersHelpText6": "このモデルを変換しますか?", + "checkpointModels": "チェックポイント", + "settings": "設定", + "convertingModelBegin": "モデルを変換しています...", + "baseModel": "ベースモデル", + "modelDeleteFailed": "モデルの削除ができませんでした", + "convertToDiffusers": "ディフューザーに変換", + "alpha": "アルファ", + "diffusersModels": "ディフューザー", + "pathToCustomConfig": "カスタム設定のパス", + "noCustomLocationProvided": "カスタムロケーションが指定されていません", + "modelConverted": "モデル変換が完了しました", + "weightedSum": "重み付け総和", + "inverseSigmoid": "逆シグモイド", + "invokeAIFolder": "Invoke AI フォルダ", + "syncModelsDesc": "モデルがバックエンドと同期していない場合、このオプションを使用してモデルを更新できます。通常、モデル.yamlファイルを手動で更新したり、アプリケーションの起動後にモデルをInvokeAIルートフォルダに追加した場合に便利です。", + "noModels": "モデルが見つかりません", + "sigmoid": "シグモイド", + "merge": "マージ", + "modelMergeInterpAddDifferenceHelp": "このモードでは、モデル3がまずモデル2から減算されます。その結果得られたバージョンが、上記で設定されたアルファ率でモデル1とブレンドされます。", + "customConfig": "カスタム設定", + "predictionType": "予測タイプ(安定したディフュージョン 2.x モデルおよび一部の安定したディフュージョン 1.x モデル用)", + "selectModel": "モデルを選択", + "modelSyncFailed": "モデルの同期に失敗しました", + "quickAdd": "クイック追加", + "simpleModelDesc": "ローカルのDiffusersモデル、ローカルのチェックポイント/safetensorsモデル、HuggingFaceリポジトリのID、またはチェックポイント/ DiffusersモデルのURLへのパスを指定してください。", + "customSaveLocation": "カスタム保存場所", + "advanced": "高度な設定", + "modelDeleted": "モデルが削除されました", + "convertToDiffusersHelpText2": "このプロセスでは、モデルマネージャーのエントリーを同じモデルのディフューザーバージョンに置き換えます。", + "modelUpdateFailed": "モデル更新が失敗しました", + "useCustomConfig": "カスタム設定を使用する", + "convertToDiffusersHelpText5": "十分なディスク空き容量があることを確認してください。モデルは一般的に2GBから7GBのサイズがあります。", + "modelConversionFailed": "モデル変換が失敗しました", + "modelEntryDeleted": "モデルエントリーが削除されました", + "syncModels": "モデルを同期", + "mergedModelSaveLocation": "保存場所", + "closeAdvanced": "高度な設定を閉じる", + "modelType": "モデルタイプ", + "modelsMerged": "モデルマージ完了", + "modelsMergeFailed": "モデルマージ失敗", + "scanForModels": "モデルをスキャン", + "customConfigFileLocation": "カスタム設定ファイルの場所", + "convertToDiffusersHelpText1": "このモデルは 🧨 Diffusers フォーマットに変換されます。", + "modelsSynced": "モデルが同期されました", + "invokeRoot": "InvokeAIフォルダ", + "mergedModelCustomSaveLocation": "カスタムパス", + "mergeModels": "マージモデル", + "interpolationType": "補間タイプ", + "modelMergeHeaderHelp2": "マージできるのはDiffusersのみです。チェックポイントモデルをマージしたい場合は、まずDiffusersに変換してください。", + "convertToDiffusersSaveLocation": "保存場所", + "pickModelType": "モデルタイプを選択", + "sameFolder": "同じフォルダ", + "convertToDiffusersHelpText3": "チェックポイントファイルは、InvokeAIルートフォルダ内にある場合、ディスクから削除されます。カスタムロケーションにある場合は、削除されません。", + "loraModels": "LoRA", + "modelMergeAlphaHelp": "アルファはモデルのブレンド強度を制御します。アルファ値が低いと、2番目のモデルの影響が低くなります。", + "addDifference": "差分を追加", + "modelMergeHeaderHelp1": "あなたのニーズに適したブレンドを作成するために、異なるモデルを最大3つまでマージすることができます。", + "ignoreMismatch": "選択されたモデル間の不一致を無視する", + "convertToDiffusersHelpText4": "これは一回限りのプロセスです。コンピュータの仕様によっては、約30秒から60秒かかる可能性があります。", + "mergedModelName": "マージされたモデル名" + }, + "parameters": { + "images": "画像", + "steps": "ステップ数", + "width": "幅", + "height": "高さ", + "seed": "シード値", + "randomizeSeed": "ランダムなシード値", + "shuffle": "シャッフル", + "seedWeights": "シード値の重み", + "faceRestoration": "顔の修復", + "restoreFaces": "顔の修復", + "strength": "強度", + "upscaling": "アップスケーリング", + "upscale": "アップスケール", + "upscaleImage": "画像をアップスケール", + "scale": "Scale", + "otherOptions": "その他のオプション", + "scaleBeforeProcessing": "処理前のスケール", + "scaledWidth": "幅のスケール", + "scaledHeight": "高さのスケール", + "boundingBoxHeader": "バウンディングボックス", + "img2imgStrength": "Image To Imageの強度", + "sendTo": "転送", + "sendToImg2Img": "Image to Imageに転送", + "sendToUnifiedCanvas": "Unified Canvasに転送", + "downloadImage": "画像をダウンロード", + "openInViewer": "ビュワーを開く", + "closeViewer": "ビュワーを閉じる", + "usePrompt": "プロンプトを使用", + "useSeed": "シード値を使用", + "useAll": "すべてを使用", + "info": "情報", + "showOptionsPanel": "オプションパネルを表示", + "aspectRatioFree": "自由", + "invoke": { + "noControlImageForControlAdapter": "コントロールアダプター #{{number}} に画像がありません", + "noModelForControlAdapter": "コントロールアダプター #{{number}} のモデルが選択されていません。" + }, + "aspectRatio": "縦横比", + "iterations": "生成回数", + "general": "基本設定" + }, + "settings": { + "models": "モデル", + "displayInProgress": "生成中の画像を表示する", + "saveSteps": "nステップごとに画像を保存", + "confirmOnDelete": "削除時に確認", + "displayHelpIcons": "ヘルプアイコンを表示", + "enableImageDebugging": "画像のデバッグを有効化", + "resetWebUI": "WebUIをリセット", + "resetWebUIDesc1": "WebUIのリセットは、画像と保存された設定のキャッシュをリセットするだけです。画像を削除するわけではありません。", + "resetWebUIDesc2": "もしギャラリーに画像が表示されないなど、何か問題が発生した場合はGitHubにissueを提出する前にリセットを試してください。", + "resetComplete": "WebUIはリセットされました。F5を押して再読み込みしてください。" + }, + "toast": { + "uploadFailed": "アップロード失敗", + "uploadFailedUnableToLoadDesc": "ファイルを読み込むことができません。", + "downloadImageStarted": "画像ダウンロード開始", + "imageCopied": "画像をコピー", + "imageLinkCopied": "画像のURLをコピー", + "imageNotLoaded": "画像を読み込めません。", + "imageNotLoadedDesc": "Image To Imageに転送する画像が見つかりません。", + "imageSavedToGallery": "画像をギャラリーに保存する", + "canvasMerged": "Canvas Merged", + "sentToImageToImage": "Image To Imageに転送", + "sentToUnifiedCanvas": "Unified Canvasに転送", + "parametersNotSetDesc": "この画像にはメタデータがありません。", + "parametersFailed": "パラメータ読み込みの不具合", + "parametersFailedDesc": "initイメージを読み込めません。", + "seedNotSetDesc": "この画像のシード値が見つかりません。", + "promptNotSetDesc": "この画像のプロンプトが見つかりませんでした。", + "upscalingFailed": "アップスケーリング失敗", + "faceRestoreFailed": "顔の修復に失敗", + "metadataLoadFailed": "メタデータの読み込みに失敗。" + }, + "tooltip": { + "feature": { + "prompt": "これはプロンプトフィールドです。プロンプトには生成オブジェクトや文法用語が含まれます。プロンプトにも重み(Tokenの重要度)を付けることができますが、CLIコマンドやパラメータは機能しません。", + "gallery": "ギャラリーは、出力先フォルダから生成物を表示します。設定はファイル内に保存され、コンテキストメニューからアクセスできます。.", + "seed": "シード値は、画像が形成される際の初期ノイズに影響します。以前の画像から既に存在するシードを使用することができます。ノイズしきい値は高いCFG値でのアーティファクトを軽減するために使用され、Perlinは生成中にPerlinノイズを追加します(0-10の範囲を試してみてください): どちらも出力にバリエーションを追加するのに役立ちます。", + "variations": "0.1から1.0の間の値で試し、付与されたシードに対する結果を変えてみてください。面白いバリュエーションは0.1〜0.3の間です。", + "upscale": "生成直後の画像をアップスケールするには、ESRGANを使用します。", + "faceCorrection": "GFPGANまたはCodeformerによる顔の修復: 画像内の顔を検出し不具合を修正するアルゴリズムです。高い値を設定すると画像がより変化し、より魅力的な顔になります。Codeformerは顔の修復を犠牲にして、元の画像をできる限り保持します。", + "imageToImage": "Image To Imageは任意の画像を初期値として読み込み、プロンプトとともに新しい画像を生成するために使用されます。値が高いほど結果画像はより変化します。0.0から1.0までの値が可能で、推奨範囲は0.25から0.75です。", + "boundingBox": "バウンディングボックスは、Text To ImageまたはImage To Imageの幅/高さの設定と同じです。ボックス内の領域のみが処理されます。", + "seamCorrection": "キャンバス上の生成された画像間に発生する可視可能な境界の処理を制御します。" + } + }, + "unifiedCanvas": { + "mask": "マスク", + "maskingOptions": "マスクのオプション", + "enableMask": "マスクを有効化", + "preserveMaskedArea": "マスク領域の保存", + "clearMask": "マスクを解除", + "brush": "ブラシ", + "eraser": "消しゴム", + "fillBoundingBox": "バウンディングボックスの塗りつぶし", + "eraseBoundingBox": "バウンディングボックスの消去", + "colorPicker": "カラーピッカー", + "brushOptions": "ブラシオプション", + "brushSize": "サイズ", + "saveToGallery": "ギャラリーに保存", + "copyToClipboard": "クリップボードにコピー", + "downloadAsImage": "画像としてダウンロード", + "undo": "取り消し", + "redo": "やり直し", + "clearCanvas": "キャンバスを片付ける", + "canvasSettings": "キャンバスの設定", + "showGrid": "グリッドを表示", + "darkenOutsideSelection": "外周を暗くする", + "autoSaveToGallery": "ギャラリーに自動保存", + "saveBoxRegionOnly": "ボックス領域のみ保存", + "showCanvasDebugInfo": "キャンバスのデバッグ情報を表示", + "clearCanvasHistory": "キャンバスの履歴を削除", + "clearHistory": "履歴を削除", + "clearCanvasHistoryMessage": "履歴を消去すると現在のキャンバスは残りますが、取り消しややり直しの履歴は不可逆的に消去されます。", + "clearCanvasHistoryConfirm": "履歴を削除しますか?", + "emptyTempImageFolder": "Empty Temp Image Folde", + "emptyFolder": "空のフォルダ", + "emptyTempImagesFolderMessage": "一時フォルダを空にすると、Unified Canvasも完全にリセットされます。これには、すべての取り消し/やり直しの履歴、ステージング領域の画像、およびキャンバスのベースレイヤーが含まれます。", + "emptyTempImagesFolderConfirm": "一時フォルダを削除しますか?", + "activeLayer": "Active Layer", + "canvasScale": "Canvas Scale", + "boundingBox": "バウンディングボックス", + "boundingBoxPosition": "バウンディングボックスの位置", + "canvasDimensions": "キャンバスの大きさ", + "canvasPosition": "キャンバスの位置", + "cursorPosition": "カーソルの位置", + "previous": "前", + "next": "次", + "accept": "同意", + "showHide": "表示/非表示", + "discardAll": "すべて破棄", + "snapToGrid": "グリッドにスナップ" + }, + "accessibility": { + "modelSelect": "モデルを選択", + "invokeProgressBar": "進捗バー", + "reset": "リセット", + "uploadImage": "画像をアップロード", + "previousImage": "前の画像", + "nextImage": "次の画像", + "useThisParameter": "このパラメータを使用する", + "copyMetadataJson": "メタデータをコピー(JSON)", + "zoomIn": "ズームイン", + "exitViewer": "ビューアーを終了", + "zoomOut": "ズームアウト", + "rotateCounterClockwise": "反時計回りに回転", + "rotateClockwise": "時計回りに回転", + "flipHorizontally": "水平方向に反転", + "flipVertically": "垂直方向に反転", + "toggleAutoscroll": "自動スクロールの切替", + "modifyConfig": "Modify Config", + "toggleLogViewer": "Log Viewerの切替", + "showOptionsPanel": "サイドパネルを表示", + "showGalleryPanel": "ギャラリーパネルを表示", + "menu": "メニュー", + "loadMore": "さらに読み込む" + }, + "controlnet": { + "resize": "リサイズ", + "showAdvanced": "高度な設定を表示", + "addT2IAdapter": "$t(common.t2iAdapter)を追加", + "importImageFromCanvas": "キャンバスから画像をインポート", + "lineartDescription": "画像を線画に変換", + "importMaskFromCanvas": "キャンバスからマスクをインポート", + "hideAdvanced": "高度な設定を非表示", + "ipAdapterModel": "アダプターモデル", + "resetControlImage": "コントロール画像をリセット", + "beginEndStepPercent": "開始 / 終了ステップパーセンテージ", + "duplicate": "複製", + "balanced": "バランス", + "prompt": "プロンプト", + "depthMidasDescription": "Midasを使用して深度マップを生成", + "openPoseDescription": "Openposeを使用してポーズを推定", + "control": "コントロール", + "resizeMode": "リサイズモード", + "weight": "重み", + "selectModel": "モデルを選択", + "crop": "切り抜き", + "w": "幅", + "processor": "プロセッサー", + "addControlNet": "$t(common.controlNet)を追加", + "none": "なし", + "incompatibleBaseModel": "互換性のないベースモデル:", + "enableControlnet": "コントロールネットを有効化", + "detectResolution": "検出解像度", + "controlNetT2IMutexDesc": "$t(common.controlNet)と$t(common.t2iAdapter)の同時使用は現在サポートされていません。", + "pidiDescription": "PIDI画像処理", + "controlMode": "コントロールモード", + "fill": "塗りつぶし", + "cannyDescription": "Canny 境界検出", + "addIPAdapter": "$t(common.ipAdapter)を追加", + "colorMapDescription": "画像からカラーマップを生成", + "lineartAnimeDescription": "アニメスタイルの線画処理", + "imageResolution": "画像解像度", + "megaControl": "メガコントロール", + "lowThreshold": "最低閾値", + "autoConfigure": "プロセッサーを自動設定", + "highThreshold": "最大閾値", + "saveControlImage": "コントロール画像を保存", + "toggleControlNet": "このコントロールネットを切り替え", + "delete": "削除", + "controlAdapter_other": "コントロールアダプター", + "colorMapTileSize": "タイルサイズ", + "ipAdapterImageFallback": "IPアダプターの画像が選択されていません", + "mediapipeFaceDescription": "Mediapipeを使用して顔を検出", + "depthZoeDescription": "Zoeを使用して深度マップを生成", + "setControlImageDimensions": "コントロール画像のサイズを幅と高さにセット", + "resetIPAdapterImage": "IP Adapterの画像をリセット", + "handAndFace": "手と顔", + "enableIPAdapter": "IP Adapterを有効化", + "amult": "a_mult", + "contentShuffleDescription": "画像の内容をシャッフルします", + "bgth": "bg_th", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) が有効化され、$t(common.t2iAdapter)s が無効化されました", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) が有効化され、$t(common.controlNet)s が無効化されました", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "minConfidence": "最小確信度", + "colorMap": "Color", + "noneDescription": "処理は行われていません", + "canny": "Canny", + "hedDescription": "階層的エッジ検出", + "maxFaces": "顔の最大数" + }, + "metadata": { + "seamless": "シームレス", + "Threshold": "ノイズ閾値", + "seed": "シード", + "width": "幅", + "workflow": "ワークフロー", + "steps": "ステップ", + "scheduler": "スケジューラー", + "positivePrompt": "ポジティブプロンプト", + "strength": "Image to Image 強度", + "perlin": "パーリンノイズ", + "recallParameters": "パラメータを呼び出す" + }, + "queue": { + "queueEmpty": "キューが空です", + "pauseSucceeded": "処理が一時停止されました", + "queueFront": "キューの先頭へ追加", + "queueBack": "キューに追加", + "queueCountPrediction": "{{predicted}}をキューに追加", + "queuedCount": "保留中 {{pending}}", + "pause": "一時停止", + "queue": "キュー", + "pauseTooltip": "処理を一時停止", + "cancel": "キャンセル", + "queueTotal": "合計 {{total}}", + "resumeSucceeded": "処理が再開されました", + "resumeTooltip": "処理を再開", + "resume": "再開", + "status": "ステータス", + "pruneSucceeded": "キューから完了アイテム{{item_count}}件を削除しました", + "cancelTooltip": "現在のアイテムをキャンセル", + "in_progress": "進行中", + "notReady": "キューに追加できません", + "batchFailedToQueue": "バッチをキューに追加できませんでした", + "completed": "完了", + "batchValues": "バッチの値", + "cancelFailed": "アイテムのキャンセルに問題があります", + "batchQueued": "バッチをキューに追加しました", + "pauseFailed": "処理の一時停止に問題があります", + "clearFailed": "キューのクリアに問題があります", + "front": "先頭", + "clearSucceeded": "キューがクリアされました", + "pruneTooltip": "{{item_count}} の完了アイテムを削除", + "cancelSucceeded": "アイテムがキャンセルされました", + "batchQueuedDesc_other": "{{count}} セッションをキューの{{direction}}に追加しました", + "graphQueued": "グラフをキューに追加しました", + "batch": "バッチ", + "clearQueueAlertDialog": "キューをクリアすると、処理中のアイテムは直ちにキャンセルされ、キューは完全にクリアされます。", + "pending": "保留中", + "resumeFailed": "処理の再開に問題があります", + "clear": "クリア", + "total": "合計", + "canceled": "キャンセル", + "pruneFailed": "キューの削除に問題があります", + "cancelBatchSucceeded": "バッチがキャンセルされました", + "clearTooltip": "全てのアイテムをキャンセルしてクリア", + "current": "現在", + "failed": "失敗", + "cancelItem": "項目をキャンセル", + "next": "次", + "cancelBatch": "バッチをキャンセル", + "session": "セッション", + "enqueueing": "バッチをキューに追加", + "queueMaxExceeded": "{{max_queue_size}} の最大値を超えたため、{{skip}} をスキップします", + "cancelBatchFailed": "バッチのキャンセルに問題があります", + "clearQueueAlertDialog2": "キューをクリアしてもよろしいですか?", + "item": "アイテム", + "graphFailedToQueue": "グラフをキューに追加できませんでした" + }, + "models": { + "noMatchingModels": "一致するモデルがありません", + "loading": "読み込み中", + "noMatchingLoRAs": "一致するLoRAがありません", + "noLoRAsAvailable": "使用可能なLoRAがありません", + "noModelsAvailable": "使用可能なモデルがありません", + "selectModel": "モデルを選択してください", + "selectLoRA": "LoRAを選択してください" + }, + "nodes": { + "addNode": "ノードを追加", + "boardField": "ボード", + "boolean": "ブーリアン", + "boardFieldDescription": "ギャラリーボード", + "addNodeToolTip": "ノードを追加 (Shift+A, Space)", + "booleanPolymorphicDescription": "ブーリアンのコレクション。", + "inputField": "入力フィールド", + "latentsFieldDescription": "潜在空間はノード間で伝達できます。", + "floatCollectionDescription": "浮動小数点のコレクション。", + "missingTemplate": "テンプレートが見つかりません", + "ipAdapterPolymorphicDescription": "IP-Adaptersのコレクション。", + "latentsPolymorphicDescription": "潜在空間はノード間で伝達できます。", + "colorFieldDescription": "RGBAカラー。", + "ipAdapterCollection": "IP-Adapterコレクション", + "conditioningCollection": "条件付きコレクション", + "hideGraphNodes": "グラフオーバーレイを非表示", + "loadWorkflow": "ワークフローを読み込み", + "integerPolymorphicDescription": "整数のコレクション。", + "hideLegendNodes": "フィールドタイプの凡例を非表示", + "float": "浮動小数点", + "booleanCollectionDescription": "ブーリアンのコレクション。", + "integer": "整数", + "colorField": "カラー", + "nodeTemplate": "ノードテンプレート", + "integerDescription": "整数は小数点を持たない数値です。", + "imagePolymorphicDescription": "画像のコレクション。", + "doesNotExist": "存在しません", + "ipAdapterCollectionDescription": "IP-Adaptersのコレクション。", + "inputMayOnlyHaveOneConnection": "入力は1つの接続しか持つことができません", + "nodeOutputs": "ノード出力", + "currentImageDescription": "ノードエディタ内の現在の画像を表示", + "downloadWorkflow": "ワークフローのJSONをダウンロード", + "integerCollection": "整数コレクション", + "collectionItem": "コレクションアイテム", + "fieldTypesMustMatch": "フィールドタイプが一致している必要があります", + "edge": "輪郭", + "inputNode": "入力ノード", + "imageField": "画像", + "animatedEdgesHelp": "選択したエッジおよび選択したノードに接続されたエッジをアニメーション化します", + "cannotDuplicateConnection": "重複した接続は作れません", + "noWorkflow": "ワークフローがありません", + "integerCollectionDescription": "整数のコレクション。", + "colorPolymorphicDescription": "カラーのコレクション。", + "missingCanvaInitImage": "キャンバスの初期画像が見つかりません", + "clipFieldDescription": "トークナイザーとテキストエンコーダーサブモデル。", + "fullyContainNodesHelp": "ノードは選択ボックス内に完全に存在する必要があります", + "clipField": "クリップ", + "nodeType": "ノードタイプ", + "executionStateInProgress": "処理中", + "executionStateError": "エラー", + "ipAdapterModel": "IP-Adapterモデル", + "ipAdapterDescription": "イメージプロンプトアダプター(IP-Adapter)。", + "missingCanvaInitMaskImages": "キャンバスの初期画像およびマスクが見つかりません", + "hideMinimapnodes": "ミニマップを非表示", + "fitViewportNodes": "全体を表示", + "executionStateCompleted": "完了", + "node": "ノード", + "currentImage": "現在の画像", + "controlField": "コントロール", + "booleanDescription": "ブーリアンはtrueかfalseです。", + "collection": "コレクション", + "ipAdapterModelDescription": "IP-Adapterモデルフィールド", + "cannotConnectInputToInput": "入力から入力には接続できません", + "invalidOutputSchema": "無効な出力スキーマ", + "floatDescription": "浮動小数点は、小数点を持つ数値です。", + "floatPolymorphicDescription": "浮動小数点のコレクション。", + "floatCollection": "浮動小数点コレクション", + "latentsField": "潜在空間", + "cannotConnectOutputToOutput": "出力から出力には接続できません", + "booleanCollection": "ブーリアンコレクション", + "cannotConnectToSelf": "自身のノードには接続できません", + "inputFields": "入力フィールド(複数)", + "colorCodeEdges": "カラー-Code Edges", + "imageCollectionDescription": "画像のコレクション。", + "loadingNodes": "ノードを読み込み中...", + "imageCollection": "画像コレクション" + }, + "boards": { + "autoAddBoard": "自動追加するボード", + "move": "移動", + "menuItemAutoAdd": "このボードに自動追加", + "myBoard": "マイボード", + "searchBoard": "ボードを検索...", + "noMatching": "一致するボードがありません", + "selectBoard": "ボードを選択", + "cancel": "キャンセル", + "addBoard": "ボードを追加", + "uncategorized": "未分類", + "downloadBoard": "ボードをダウンロード", + "changeBoard": "ボードを変更", + "loading": "ロード中...", + "topMessage": "このボードには、以下の機能で使用されている画像が含まれています:", + "bottomMessage": "このボードおよび画像を削除すると、現在これらを利用している機能はリセットされます。", + "clearSearch": "検索をクリア" + }, + "embedding": { + "noMatchingEmbedding": "一致する埋め込みがありません", + "addEmbedding": "埋め込みを追加", + "incompatibleModel": "互換性のないベースモデル:" + }, + "invocationCache": { + "invocationCache": "呼び出しキャッシュ", + "clearSucceeded": "呼び出しキャッシュをクリアしました", + "clearFailed": "呼び出しキャッシュのクリアに問題があります", + "enable": "有効", + "clear": "クリア", + "maxCacheSize": "最大キャッシュサイズ", + "cacheSize": "キャッシュサイズ" + }, + "popovers": { + "paramRatio": { + "heading": "縦横比", + "paragraphs": [ + "生成された画像の縦横比。" + ] + } + } +} diff --git a/invokeai/frontend/web/dist/locales/ko.json b/invokeai/frontend/web/dist/locales/ko.json new file mode 100644 index 0000000000..e5283f4113 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ko.json @@ -0,0 +1,920 @@ +{ + "common": { + "languagePickerLabel": "언어 설정", + "reportBugLabel": "버그 리포트", + "githubLabel": "Github", + "settingsLabel": "설정", + "langArabic": "العربية", + "langEnglish": "English", + "langDutch": "Nederlands", + "unifiedCanvas": "통합 캔버스", + "langFrench": "Français", + "langGerman": "Deutsch", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langBrPortuguese": "Português do Brasil", + "langRussian": "Русский", + "langSpanish": "Español", + "nodes": "Workflow Editor", + "nodesDesc": "이미지 생성을 위한 노드 기반 시스템은 현재 개발 중입니다. 이 놀라운 기능에 대한 업데이트를 계속 지켜봐 주세요.", + "postProcessing": "후처리", + "postProcessDesc2": "보다 진보된 후처리 작업을 위한 전용 UI가 곧 출시될 예정입니다.", + "postProcessDesc3": "Invoke AI CLI는 Embiggen을 비롯한 다양한 기능을 제공합니다.", + "training": "학습", + "trainingDesc1": "Textual Inversion과 Dreambooth를 이용해 Web UI에서 나만의 embedding 및 checkpoint를 교육하기 위한 전용 워크플로우입니다.", + "trainingDesc2": "InvokeAI는 이미 메인 스크립트를 사용한 Textual Inversion를 이용한 Custom embedding 학습을 지원하고 있습니다.", + "upload": "업로드", + "close": "닫기", + "load": "불러오기", + "back": "뒤로 가기", + "statusConnected": "연결됨", + "statusDisconnected": "연결 끊김", + "statusError": "에러", + "statusPreparing": "준비 중", + "langSimplifiedChinese": "简体中文", + "statusGenerating": "생성 중", + "statusGeneratingTextToImage": "텍스트->이미지 생성", + "statusGeneratingInpainting": "인페인팅 생성", + "statusGeneratingOutpainting": "아웃페인팅 생성", + "statusGenerationComplete": "생성 완료", + "statusRestoringFaces": "얼굴 복원", + "statusRestoringFacesGFPGAN": "얼굴 복원 (GFPGAN)", + "statusRestoringFacesCodeFormer": "얼굴 복원 (CodeFormer)", + "statusUpscaling": "업스케일링", + "statusUpscalingESRGAN": "업스케일링 (ESRGAN)", + "statusLoadingModel": "모델 로딩중", + "statusModelChanged": "모델 변경됨", + "statusConvertingModel": "모델 컨버팅", + "statusModelConverted": "모델 컨버팅됨", + "statusMergedModels": "모델 병합됨", + "statusMergingModels": "모델 병합중", + "hotkeysLabel": "단축키 설정", + "img2img": "이미지->이미지", + "discordLabel": "Discord", + "langPolish": "Polski", + "postProcessDesc1": "Invoke AI는 다양한 후처리 기능을 제공합니다. 이미지 업스케일링 및 얼굴 복원은 이미 Web UI에서 사용할 수 있습니다. 텍스트->이미지 또는 이미지->이미지 탭의 고급 옵션 메뉴에서 사용할 수 있습니다. 또한 현재 이미지 표시 위, 또는 뷰어에서 액션 버튼을 사용하여 이미지를 직접 처리할 수도 있습니다.", + "langUkranian": "Украї́нська", + "statusProcessingCanceled": "처리 취소됨", + "statusGeneratingImageToImage": "이미지->이미지 생성", + "statusProcessingComplete": "처리 완료", + "statusIterationComplete": "반복(Iteration) 완료", + "statusSavingImage": "이미지 저장", + "t2iAdapter": "T2I 어댑터", + "communityLabel": "커뮤니티", + "txt2img": "텍스트->이미지", + "dontAskMeAgain": "다시 묻지 마세요", + "loadingInvokeAI": "Invoke AI 불러오는 중", + "checkpoint": "체크포인트", + "format": "형식", + "unknown": "알려지지 않음", + "areYouSure": "확실하나요?", + "folder": "폴더", + "inpaint": "inpaint", + "updated": "업데이트 됨", + "on": "켜기", + "save": "저장", + "langPortuguese": "Português", + "created": "생성됨", + "nodeEditor": "Node Editor", + "error": "에러", + "prevPage": "이전 페이지", + "ipAdapter": "IP 어댑터", + "controlAdapter": "제어 어댑터", + "installed": "설치됨", + "accept": "수락", + "ai": "인공지능", + "auto": "자동", + "file": "파일", + "openInNewTab": "새 탭에서 열기", + "delete": "삭제", + "template": "템플릿", + "cancel": "취소", + "controlNet": "컨트롤넷", + "outputs": "결과물", + "unknownError": "알려지지 않은 에러", + "statusProcessing": "처리 중", + "linear": "선형", + "imageFailedToLoad": "이미지를 로드할 수 없음", + "direction": "방향", + "data": "데이터", + "somethingWentWrong": "뭔가 잘못됐어요", + "imagePrompt": "이미지 프롬프트", + "modelManager": "Model Manager", + "lightMode": "라이트 모드", + "safetensors": "Safetensors", + "outpaint": "outpaint", + "langKorean": "한국어", + "orderBy": "정렬 기준", + "generate": "생성", + "copyError": "$t(gallery.copy) 에러", + "learnMore": "더 알아보기", + "nextPage": "다음 페이지", + "saveAs": "다른 이름으로 저장", + "darkMode": "다크 모드", + "loading": "불러오는 중", + "random": "랜덤", + "langHebrew": "Hebrew", + "batch": "Batch 매니저", + "postprocessing": "후처리", + "advanced": "고급", + "unsaved": "저장되지 않음", + "input": "입력", + "details": "세부사항", + "notInstalled": "설치되지 않음" + }, + "gallery": { + "showGenerations": "생성된 이미지 보기", + "generations": "생성된 이미지", + "uploads": "업로드된 이미지", + "showUploads": "업로드된 이미지 보기", + "galleryImageSize": "이미지 크기", + "galleryImageResetSize": "사이즈 리셋", + "gallerySettings": "갤러리 설정", + "maintainAspectRatio": "종횡비 유지", + "deleteSelection": "선택 항목 삭제", + "featuresWillReset": "이 이미지를 삭제하면 해당 기능이 즉시 재설정됩니다.", + "deleteImageBin": "삭제된 이미지는 운영 체제의 Bin으로 전송됩니다.", + "assets": "자산", + "problemDeletingImagesDesc": "하나 이상의 이미지를 삭제할 수 없습니다", + "noImagesInGallery": "보여줄 이미지가 없음", + "autoSwitchNewImages": "새로운 이미지로 자동 전환", + "loading": "불러오는 중", + "unableToLoad": "갤러리를 로드할 수 없음", + "preparingDownload": "다운로드 준비", + "preparingDownloadFailed": "다운로드 준비 중 발생한 문제", + "singleColumnLayout": "단일 열 레이아웃", + "image": "이미지", + "loadMore": "더 불러오기", + "drop": "드랍", + "problemDeletingImages": "이미지 삭제 중 발생한 문제", + "downloadSelection": "선택 항목 다운로드", + "deleteImage": "이미지 삭제", + "currentlyInUse": "이 이미지는 현재 다음 기능에서 사용되고 있습니다:", + "allImagesLoaded": "불러온 모든 이미지", + "dropOrUpload": "$t(gallery.drop) 또는 업로드", + "copy": "복사", + "download": "다운로드", + "deleteImagePermanent": "삭제된 이미지는 복원할 수 없습니다.", + "noImageSelected": "선택된 이미지 없음", + "autoAssignBoardOnClick": "클릭 시 Board로 자동 할당", + "setCurrentImage": "현재 이미지로 설정", + "dropToUpload": "업로드를 위해 $t(gallery.drop)" + }, + "unifiedCanvas": { + "betaPreserveMasked": "마스크 레이어 유지" + }, + "accessibility": { + "previousImage": "이전 이미지", + "modifyConfig": "Config 수정", + "nextImage": "다음 이미지", + "mode": "모드", + "menu": "메뉴", + "modelSelect": "모델 선택", + "zoomIn": "확대하기", + "rotateClockwise": "시계방향으로 회전", + "uploadImage": "이미지 업로드", + "showGalleryPanel": "갤러리 패널 표시", + "useThisParameter": "해당 변수 사용", + "reset": "리셋", + "loadMore": "더 불러오기", + "zoomOut": "축소하기", + "rotateCounterClockwise": "반시계방향으로 회전", + "showOptionsPanel": "사이드 패널 표시", + "toggleAutoscroll": "자동 스크롤 전환", + "toggleLogViewer": "Log Viewer 전환" + }, + "modelManager": { + "pathToCustomConfig": "사용자 지정 구성 경로", + "importModels": "모델 가져오기", + "availableModels": "사용 가능한 모델", + "conversionNotSupported": "변환이 지원되지 않음", + "noCustomLocationProvided": "사용자 지정 위치가 제공되지 않음", + "onnxModels": "Onnx", + "vaeRepoID": "VAE Repo ID", + "modelExists": "모델 존재", + "custom": "사용자 지정", + "addModel": "모델 추가", + "none": "없음", + "modelConverted": "변환된 모델", + "width": "너비", + "weightedSum": "가중합", + "inverseSigmoid": "Inverse Sigmoid", + "invokeAIFolder": "Invoke AI 폴더", + "syncModelsDesc": "모델이 백엔드와 동기화되지 않은 경우 이 옵션을 사용하여 새로 고침할 수 있습니다. 이는 일반적으로 응용 프로그램이 부팅된 후 수동으로 모델.yaml 파일을 업데이트하거나 InvokeAI root 폴더에 모델을 추가하는 경우에 유용합니다.", + "convert": "변환", + "vae": "VAE", + "noModels": "모델을 찾을 수 없음", + "statusConverting": "변환중", + "sigmoid": "Sigmoid", + "deleteModel": "모델 삭제", + "modelLocation": "모델 위치", + "merge": "병합", + "v1": "v1", + "description": "Description", + "modelMergeInterpAddDifferenceHelp": "이 모드에서 모델 3은 먼저 모델 2에서 차감됩니다. 결과 버전은 위에 설정된 Alpha 비율로 모델 1과 혼합됩니다.", + "customConfig": "사용자 지정 구성", + "cannotUseSpaces": "공백을 사용할 수 없음", + "formMessageDiffusersModelLocationDesc": "적어도 하나 이상 입력해 주세요.", + "addDiffuserModel": "Diffusers 추가", + "search": "검색", + "predictionType": "예측 유형(안정 확산 2.x 모델 및 간혹 안정 확산 1.x 모델의 경우)", + "widthValidationMsg": "모형의 기본 너비.", + "selectAll": "모두 선택", + "vaeLocation": "VAE 위치", + "selectModel": "모델 선택", + "modelAdded": "추가된 모델", + "repo_id": "Repo ID", + "modelSyncFailed": "모델 동기화 실패", + "convertToDiffusersHelpText6": "이 모델을 변환하시겠습니까?", + "config": "구성", + "quickAdd": "빠른 추가", + "selected": "선택된", + "modelTwo": "모델 2", + "simpleModelDesc": "로컬 Difffusers 모델, 로컬 체크포인트/안전 센서 모델 HuggingFace Repo ID 또는 체크포인트/Diffusers 모델 URL의 경로를 제공합니다.", + "customSaveLocation": "사용자 정의 저장 위치", + "advanced": "고급", + "modelsFound": "발견된 모델", + "load": "불러오기", + "height": "높이", + "modelDeleted": "삭제된 모델", + "inpainting": "v1 Inpainting", + "vaeLocationValidationMsg": "VAE가 있는 경로.", + "convertToDiffusersHelpText2": "이 프로세스는 모델 관리자 항목을 동일한 모델의 Diffusers 버전으로 대체합니다.", + "modelUpdateFailed": "모델 업데이트 실패", + "modelUpdated": "업데이트된 모델", + "noModelsFound": "모델을 찾을 수 없음", + "useCustomConfig": "사용자 지정 구성 사용", + "formMessageDiffusersVAELocationDesc": "제공되지 않은 경우 호출AIA 파일을 위의 모델 위치 내에서 VAE 파일을 찾습니다.", + "formMessageDiffusersVAELocation": "VAE 위치", + "checkpointModels": "Checkpoints", + "modelOne": "모델 1", + "settings": "설정", + "heightValidationMsg": "모델의 기본 높이입니다.", + "selectAndAdd": "아래 나열된 모델 선택 및 추가", + "convertToDiffusersHelpText5": "디스크 공간이 충분한지 확인해 주세요. 모델은 일반적으로 2GB에서 7GB 사이로 다양합니다.", + "deleteConfig": "구성 삭제", + "deselectAll": "모두 선택 취소", + "modelConversionFailed": "모델 변환 실패", + "clearCheckpointFolder": "Checkpoint Folder 지우기", + "modelEntryDeleted": "모델 항목 삭제", + "deleteMsg1": "InvokeAI에서 이 모델을 삭제하시겠습니까?", + "syncModels": "동기화 모델", + "mergedModelSaveLocation": "위치 저장", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "modelType": "모델 유형", + "nameValidationMsg": "모델 이름 입력", + "cached": "cached", + "modelsMerged": "병합된 모델", + "formMessageDiffusersModelLocation": "Diffusers 모델 위치", + "modelsMergeFailed": "모델 병합 실패", + "convertingModelBegin": "모델 변환 중입니다. 잠시만 기다려 주십시오.", + "v2_base": "v2 (512px)", + "scanForModels": "모델 검색", + "modelLocationValidationMsg": "Diffusers 모델이 저장된 로컬 폴더의 경로 제공", + "name": "이름", + "selectFolder": "폴더 선택", + "updateModel": "모델 업데이트", + "addNewModel": "새로운 모델 추가", + "customConfigFileLocation": "사용자 지정 구성 파일 위치", + "descriptionValidationMsg": "모델에 대한 description 추가", + "safetensorModels": "SafeTensors", + "convertToDiffusersHelpText1": "이 모델은 🧨 Diffusers 형식으로 변환됩니다.", + "modelsSynced": "동기화된 모델", + "vaePrecision": "VAE 정밀도", + "invokeRoot": "InvokeAI 폴더", + "checkpointFolder": "Checkpoint Folder", + "mergedModelCustomSaveLocation": "사용자 지정 경로", + "mergeModels": "모델 병합", + "interpolationType": "Interpolation 타입", + "modelMergeHeaderHelp2": "Diffusers만 병합이 가능합니다. 체크포인트 모델 병합을 원하신다면 먼저 Diffusers로 변환해주세요.", + "convertToDiffusersSaveLocation": "위치 저장", + "deleteMsg2": "모델이 InvokeAI root 폴더에 있으면 디스크에서 모델이 삭제됩니다. 사용자 지정 위치를 사용하는 경우 모델이 디스크에서 삭제되지 않습니다.", + "oliveModels": "Olives", + "repoIDValidationMsg": "모델의 온라인 저장소", + "baseModel": "기본 모델", + "scanAgain": "다시 검색", + "pickModelType": "모델 유형 선택", + "sameFolder": "같은 폴더", + "addNew": "New 추가", + "manual": "매뉴얼", + "convertToDiffusersHelpText3": "디스크의 체크포인트 파일이 InvokeAI root 폴더에 있으면 삭제됩니다. 사용자 지정 위치에 있으면 삭제되지 않습니다.", + "addCheckpointModel": "체크포인트 / 안전 센서 모델 추가", + "configValidationMsg": "모델의 구성 파일에 대한 경로.", + "modelManager": "모델 매니저", + "variant": "Variant", + "vaeRepoIDValidationMsg": "VAE의 온라인 저장소", + "loraModels": "LoRAs", + "modelDeleteFailed": "모델을 삭제하지 못했습니다", + "convertToDiffusers": "Diffusers로 변환", + "allModels": "모든 모델", + "modelThree": "모델 3", + "findModels": "모델 찾기", + "notLoaded": "로드되지 않음", + "alpha": "Alpha", + "diffusersModels": "Diffusers", + "modelMergeAlphaHelp": "Alpha는 모델의 혼합 강도를 제어합니다. Alpha 값이 낮을수록 두 번째 모델의 영향력이 줄어듭니다.", + "addDifference": "Difference 추가", + "noModelSelected": "선택한 모델 없음", + "modelMergeHeaderHelp1": "최대 3개의 다른 모델을 병합하여 필요에 맞는 혼합물을 만들 수 있습니다.", + "ignoreMismatch": "선택한 모델 간의 불일치 무시", + "v2_768": "v2 (768px)", + "convertToDiffusersHelpText4": "이것은 한 번의 과정일 뿐입니다. 컴퓨터 사양에 따라 30-60초 정도 소요될 수 있습니다.", + "model": "모델", + "addManually": "Manually 추가", + "addSelected": "Selected 추가", + "mergedModelName": "병합된 모델 이름", + "delete": "삭제" + }, + "controlnet": { + "amult": "a_mult", + "resize": "크기 조정", + "showAdvanced": "고급 표시", + "contentShuffleDescription": "이미지에서 content 섞기", + "bgth": "bg_th", + "addT2IAdapter": "$t(common.t2iAdapter) 추가", + "pidi": "PIDI", + "importImageFromCanvas": "캔버스에서 이미지 가져오기", + "lineartDescription": "이미지->lineart 변환", + "normalBae": "Normal BAE", + "importMaskFromCanvas": "캔버스에서 Mask 가져오기", + "hed": "HED", + "contentShuffle": "Content Shuffle", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) 사용 가능, $t(common.t2iAdapter) 사용 불가능", + "ipAdapterModel": "Adapter 모델", + "resetControlImage": "Control Image 재설정", + "beginEndStepPercent": "Begin / End Step Percentage", + "mlsdDescription": "Minimalist Line Segment Detector", + "duplicate": "복제", + "balanced": "Balanced", + "f": "F", + "h": "H", + "prompt": "프롬프트", + "depthMidasDescription": "Midas를 사용하여 Depth map 생성하기", + "openPoseDescription": "Openpose를 이용한 사람 포즈 추정", + "control": "Control", + "resizeMode": "크기 조정 모드", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 사용 가능,$t(common.controlNet) 사용 불가능", + "coarse": "Coarse", + "weight": "Weight", + "selectModel": "모델 선택", + "crop": "Crop", + "depthMidas": "Depth (Midas)", + "w": "W", + "processor": "프로세서", + "addControlNet": "$t(common.controlNet) 추가", + "none": "해당없음", + "incompatibleBaseModel": "호환되지 않는 기본 모델:", + "enableControlnet": "사용 가능한 ControlNet", + "detectResolution": "해상도 탐지", + "controlNetT2IMutexDesc": "$t(common.controlNet)와 $t(common.t2iAdapter)는 현재 동시에 지원되지 않습니다.", + "pidiDescription": "PIDI image 처리", + "mediapipeFace": "Mediapipe Face", + "mlsd": "M-LSD", + "controlMode": "Control Mode", + "fill": "채우기", + "cannyDescription": "Canny 모서리 삭제", + "addIPAdapter": "$t(common.ipAdapter) 추가", + "lineart": "Lineart", + "colorMapDescription": "이미지에서 color map을 생성합니다", + "lineartAnimeDescription": "Anime-style lineart 처리", + "minConfidence": "Min Confidence", + "imageResolution": "이미지 해상도", + "megaControl": "Mega Control", + "depthZoe": "Depth (Zoe)", + "colorMap": "색", + "lowThreshold": "Low Threshold", + "autoConfigure": "프로세서 자동 구성", + "highThreshold": "High Threshold", + "normalBaeDescription": "Normal BAE 처리", + "noneDescription": "처리되지 않음", + "saveControlImage": "Control Image 저장", + "openPose": "Openpose", + "toggleControlNet": "해당 ControlNet으로 전환", + "delete": "삭제", + "controlAdapter_other": "Control Adapter(s)", + "safe": "Safe", + "colorMapTileSize": "타일 크기", + "lineartAnime": "Lineart Anime", + "ipAdapterImageFallback": "IP Adapter Image가 선택되지 않음", + "mediapipeFaceDescription": "Mediapipe를 사용하여 Face 탐지", + "canny": "Canny", + "depthZoeDescription": "Zoe를 사용하여 Depth map 생성하기", + "hedDescription": "Holistically-Nested 모서리 탐지", + "setControlImageDimensions": "Control Image Dimensions를 W/H로 설정", + "scribble": "scribble", + "resetIPAdapterImage": "IP Adapter Image 재설정", + "handAndFace": "Hand and Face", + "enableIPAdapter": "사용 가능한 IP Adapter", + "maxFaces": "Max Faces" + }, + "hotkeys": { + "toggleGalleryPin": { + "title": "Gallery Pin 전환", + "desc": "갤러리를 UI에 고정했다가 풉니다" + }, + "toggleSnap": { + "desc": "Snap을 Grid로 전환", + "title": "Snap 전환" + }, + "setSeed": { + "title": "시드 설정", + "desc": "현재 이미지의 시드 사용" + }, + "keyboardShortcuts": "키보드 바로 가기", + "decreaseGalleryThumbSize": { + "desc": "갤러리 미리 보기 크기 축소", + "title": "갤러리 이미지 크기 축소" + }, + "previousStagingImage": { + "title": "이전 스테이징 이미지", + "desc": "이전 스테이징 영역 이미지" + }, + "decreaseBrushSize": { + "title": "브러시 크기 줄이기", + "desc": "캔버스 브러시/지우개 크기 감소" + }, + "consoleToggle": { + "desc": "콘솔 열고 닫기", + "title": "콘솔 전환" + }, + "selectBrush": { + "desc": "캔버스 브러시를 선택", + "title": "브러시 선택" + }, + "upscale": { + "desc": "현재 이미지를 업스케일", + "title": "업스케일" + }, + "previousImage": { + "title": "이전 이미지", + "desc": "갤러리에 이전 이미지 표시" + }, + "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", + "toggleOptions": { + "desc": "옵션 패널을 열고 닫기", + "title": "옵션 전환" + }, + "selectEraser": { + "title": "지우개 선택", + "desc": "캔버스 지우개를 선택" + }, + "setPrompt": { + "title": "프롬프트 설정", + "desc": "현재 이미지의 프롬프트 사용" + }, + "acceptStagingImage": { + "desc": "현재 준비 영역 이미지 허용", + "title": "준비 이미지 허용" + }, + "resetView": { + "desc": "Canvas View 초기화", + "title": "View 초기화" + }, + "hideMask": { + "title": "Mask 숨김", + "desc": "mask 숨김/숨김 해제" + }, + "pinOptions": { + "title": "옵션 고정", + "desc": "옵션 패널을 고정" + }, + "toggleGallery": { + "desc": "gallery drawer 열기 및 닫기", + "title": "Gallery 전환" + }, + "quickToggleMove": { + "title": "빠른 토글 이동", + "desc": "일시적으로 이동 모드 전환" + }, + "generalHotkeys": "General Hotkeys", + "showHideBoundingBox": { + "desc": "bounding box 표시 전환", + "title": "Bounding box 표시/숨김" + }, + "showInfo": { + "desc": "현재 이미지의 metadata 정보 표시", + "title": "정보 표시" + }, + "copyToClipboard": { + "title": "클립보드로 복사", + "desc": "현재 캔버스를 클립보드로 복사" + }, + "restoreFaces": { + "title": "Faces 복원", + "desc": "현재 이미지 복원" + }, + "fillBoundingBox": { + "title": "Bounding Box 채우기", + "desc": "bounding box를 브러시 색으로 채웁니다" + }, + "closePanels": { + "desc": "열린 panels 닫기", + "title": "panels 닫기" + }, + "downloadImage": { + "desc": "현재 캔버스 다운로드", + "title": "이미지 다운로드" + }, + "setParameters": { + "title": "매개 변수 설정", + "desc": "현재 이미지의 모든 매개 변수 사용" + }, + "maximizeWorkSpace": { + "desc": "패널을 닫고 작업 면적을 극대화", + "title": "작업 공간 극대화" + }, + "galleryHotkeys": "Gallery Hotkeys", + "cancel": { + "desc": "이미지 생성 취소", + "title": "취소" + }, + "saveToGallery": { + "title": "갤러리에 저장", + "desc": "현재 캔버스를 갤러리에 저장" + }, + "eraseBoundingBox": { + "desc": "bounding box 영역을 지웁니다", + "title": "Bounding Box 지우기" + }, + "nextImage": { + "title": "다음 이미지", + "desc": "갤러리에 다음 이미지 표시" + }, + "colorPicker": { + "desc": "canvas color picker 선택", + "title": "Color Picker 선택" + }, + "invoke": { + "desc": "이미지 생성", + "title": "불러오기" + }, + "sendToImageToImage": { + "desc": "현재 이미지를 이미지로 보내기" + }, + "toggleLayer": { + "desc": "mask/base layer 선택 전환", + "title": "Layer 전환" + }, + "increaseBrushSize": { + "title": "브러시 크기 증가", + "desc": "캔버스 브러시/지우개 크기 증가" + }, + "appHotkeys": "App Hotkeys", + "deleteImage": { + "title": "이미지 삭제", + "desc": "현재 이미지 삭제" + }, + "moveTool": { + "desc": "캔버스 탐색 허용", + "title": "툴 옮기기" + }, + "clearMask": { + "desc": "전체 mask 제거", + "title": "Mask 제거" + }, + "increaseGalleryThumbSize": { + "title": "갤러리 이미지 크기 증가", + "desc": "갤러리 미리 보기 크기를 늘립니다" + }, + "increaseBrushOpacity": { + "desc": "캔버스 브러시의 불투명도를 높입니다", + "title": "브러시 불투명도 증가" + }, + "focusPrompt": { + "desc": "프롬프트 입력 영역에 초점을 맞춥니다", + "title": "프롬프트에 초점 맞추기" + }, + "decreaseBrushOpacity": { + "desc": "캔버스 브러시의 불투명도를 줄입니다", + "title": "브러시 불투명도 감소" + }, + "nextStagingImage": { + "desc": "다음 스테이징 영역 이미지", + "title": "다음 스테이징 이미지" + }, + "redoStroke": { + "title": "Stroke 다시 실행", + "desc": "brush stroke 다시 실행" + }, + "nodesHotkeys": "Nodes Hotkeys", + "addNodes": { + "desc": "노드 추가 메뉴 열기", + "title": "노드 추가" + }, + "toggleViewer": { + "desc": "이미지 뷰어 열기 및 닫기", + "title": "Viewer 전환" + }, + "undoStroke": { + "title": "Stroke 실행 취소", + "desc": "brush stroke 실행 취소" + }, + "changeTabs": { + "desc": "다른 workspace으로 전환", + "title": "탭 바꾸기" + }, + "mergeVisible": { + "desc": "캔버스의 보이는 모든 레이어 병합" + } + }, + "nodes": { + "inputField": "입력 필드", + "controlFieldDescription": "노드 간에 전달된 Control 정보입니다.", + "latentsFieldDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "denoiseMaskFieldDescription": "노드 간에 Denoise Mask가 전달될 수 있음", + "floatCollectionDescription": "실수 컬렉션.", + "missingTemplate": "잘못된 노드: {{type}} 유형의 {{node}} 템플릿 누락(설치되지 않으셨나요?)", + "outputSchemaNotFound": "Output schema가 발견되지 않음", + "ipAdapterPolymorphicDescription": "IP-Adapters 컬렉션.", + "latentsPolymorphicDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "colorFieldDescription": "RGBA 색.", + "mainModelField": "모델", + "ipAdapterCollection": "IP-Adapters 컬렉션", + "conditioningCollection": "Conditioning 컬렉션", + "maybeIncompatible": "설치된 것과 호환되지 않을 수 있음", + "ipAdapterPolymorphic": "IP-Adapter 다형성", + "noNodeSelected": "선택한 노드 없음", + "addNode": "노드 추가", + "hideGraphNodes": "그래프 오버레이 숨기기", + "enum": "Enum", + "loadWorkflow": "Workflow 불러오기", + "integerPolymorphicDescription": "정수 컬렉션.", + "noOutputRecorded": "기록된 출력 없음", + "conditioningCollectionDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "colorPolymorphic": "색상 다형성", + "colorCodeEdgesHelp": "연결된 필드에 따른 색상 코드 선", + "collectionDescription": "해야 할 일", + "hideLegendNodes": "필드 유형 범례 숨기기", + "addLinearView": "Linear View에 추가", + "float": "실수", + "targetNodeFieldDoesNotExist": "잘못된 모서리: 대상/입력 필드 {{node}}. {{field}}이(가) 없습니다", + "animatedEdges": "애니메이션 모서리", + "conditioningPolymorphic": "Conditioning 다형성", + "integer": "정수", + "colorField": "색", + "boardField": "Board", + "nodeTemplate": "노드 템플릿", + "latentsCollection": "Latents 컬렉션", + "nodeOpacity": "노드 불투명도", + "sourceNodeDoesNotExist": "잘못된 모서리: 소스/출력 노드 {{node}}이(가) 없습니다", + "pickOne": "하나 고르기", + "collectionItemDescription": "해야 할 일", + "integerDescription": "정수는 소수점이 없는 숫자입니다.", + "outputField": "출력 필드", + "conditioningPolymorphicDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "noFieldsLinearview": "Linear View에 추가된 필드 없음", + "imagePolymorphic": "이미지 다형성", + "nodeSearch": "노드 검색", + "imagePolymorphicDescription": "이미지 컬렉션.", + "floatPolymorphic": "실수 다형성", + "outputFieldInInput": "입력 중 출력필드", + "doesNotExist": "존재하지 않음", + "ipAdapterCollectionDescription": "IP-Adapters 컬렉션.", + "controlCollection": "Control 컬렉션", + "inputMayOnlyHaveOneConnection": "입력에 하나의 연결만 있을 수 있습니다", + "notes": "메모", + "nodeOutputs": "노드 결과물", + "currentImageDescription": "Node Editor에 현재 이미지를 표시합니다", + "downloadWorkflow": "Workflow JSON 다운로드", + "ipAdapter": "IP-Adapter", + "integerCollection": "정수 컬렉션", + "collectionItem": "컬렉션 아이템", + "noConnectionInProgress": "진행중인 연결이 없습니다", + "controlCollectionDescription": "노드 간에 전달된 Control 정보입니다.", + "noConnectionData": "연결 데이터 없음", + "outputFields": "출력 필드", + "fieldTypesMustMatch": "필드 유형은 일치해야 합니다", + "edge": "Edge", + "inputNode": "입력 노드", + "enumDescription": "Enums은 여러 옵션 중 하나일 수 있는 값입니다.", + "sourceNodeFieldDoesNotExist": "잘못된 모서리: 소스/출력 필드 {{node}}. {{field}}이(가) 없습니다", + "loRAModelFieldDescription": "해야 할 일", + "imageField": "이미지", + "animatedEdgesHelp": "선택한 노드에 연결된 선택한 가장자리 및 가장자리를 애니메이션화합니다", + "cannotDuplicateConnection": "중복 연결을 만들 수 없습니다", + "booleanPolymorphic": "Boolean 다형성", + "noWorkflow": "Workflow 없음", + "colorCollectionDescription": "해야 할 일", + "integerCollectionDescription": "정수 컬렉션.", + "colorPolymorphicDescription": "색의 컬렉션.", + "denoiseMaskField": "Denoise Mask", + "missingCanvaInitImage": "캔버스 init 이미지 누락", + "conditioningFieldDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "clipFieldDescription": "Tokenizer 및 text_encoder 서브모델.", + "fullyContainNodesHelp": "선택하려면 노드가 선택 상자 안에 완전히 있어야 합니다", + "noImageFoundState": "상태에서 초기 이미지를 찾을 수 없습니다", + "clipField": "Clip", + "nodePack": "Node pack", + "nodeType": "노드 유형", + "noMatchingNodes": "일치하는 노드 없음", + "fullyContainNodes": "선택할 노드 전체 포함", + "integerPolymorphic": "정수 다형성", + "executionStateInProgress": "진행중", + "noFieldType": "필드 유형 없음", + "colorCollection": "색의 컬렉션.", + "executionStateError": "에러", + "noOutputSchemaName": "ref 개체에 output schema 이름이 없습니다", + "ipAdapterModel": "IP-Adapter 모델", + "latentsPolymorphic": "Latents 다형성", + "ipAdapterDescription": "이미지 프롬프트 어댑터(IP-Adapter).", + "boolean": "Booleans", + "missingCanvaInitMaskImages": "캔버스 init 및 mask 이미지 누락", + "problemReadingMetadata": "이미지에서 metadata를 읽는 중 문제가 발생했습니다", + "hideMinimapnodes": "미니맵 숨기기", + "oNNXModelField": "ONNX 모델", + "executionStateCompleted": "완료된", + "node": "노드", + "currentImage": "현재 이미지", + "controlField": "Control", + "booleanDescription": "Booleans은 참 또는 거짓입니다.", + "collection": "컬렉션", + "ipAdapterModelDescription": "IP-Adapter 모델 필드", + "cannotConnectInputToInput": "입력을 입력에 연결할 수 없습니다", + "invalidOutputSchema": "잘못된 output schema", + "boardFieldDescription": "A gallery board", + "floatDescription": "실수는 소수점이 있는 숫자입니다.", + "floatPolymorphicDescription": "실수 컬렉션.", + "conditioningField": "Conditioning", + "collectionFieldType": "{{name}} 컬렉션", + "floatCollection": "실수 컬렉션", + "latentsField": "Latents", + "cannotConnectOutputToOutput": "출력을 출력에 연결할 수 없습니다", + "booleanCollection": "Boolean 컬렉션", + "connectionWouldCreateCycle": "연결하면 주기가 생성됩니다", + "cannotConnectToSelf": "자체에 연결할 수 없습니다", + "notesDescription": "Workflow에 대한 메모 추가", + "inputFields": "입력 필드", + "colorCodeEdges": "색상-코드 선", + "targetNodeDoesNotExist": "잘못된 모서리: 대상/입력 노드 {{node}}이(가) 없습니다", + "imageCollectionDescription": "이미지 컬렉션.", + "mismatchedVersion": "잘못된 노드: {{type}} 유형의 {{node}} 노드에 일치하지 않는 버전이 있습니다(업데이트 해보시겠습니까?)", + "imageFieldDescription": "노드 간에 이미지를 전달할 수 있습니다.", + "outputNode": "출력노드", + "addNodeToolTip": "노드 추가(Shift+A, Space)", + "collectionOrScalarFieldType": "{{name}} 컬렉션|Scalar", + "nodeVersion": "노드 버전", + "loadingNodes": "노드 로딩중...", + "mainModelFieldDescription": "해야 할 일", + "loRAModelField": "LoRA", + "deletedInvalidEdge": "잘못된 모서리 {{source}} -> {{target}} 삭제", + "latentsCollectionDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "oNNXModelFieldDescription": "ONNX 모델 필드.", + "imageCollection": "이미지 컬렉션" + }, + "queue": { + "status": "상태", + "pruneSucceeded": "Queue로부터 {{item_count}} 완성된 항목 잘라내기", + "cancelTooltip": "현재 항목 취소", + "queueEmpty": "비어있는 Queue", + "pauseSucceeded": "중지된 프로세서", + "in_progress": "진행 중", + "queueFront": "Front of Queue에 추가", + "notReady": "Queue를 생성할 수 없음", + "batchFailedToQueue": "Queue Batch에 실패", + "completed": "완성된", + "queueBack": "Queue에 추가", + "batchValues": "Batch 값들", + "cancelFailed": "항목 취소 중 발생한 문제", + "queueCountPrediction": "Queue에 {{predicted}} 추가", + "batchQueued": "Batch Queued", + "pauseFailed": "프로세서 중지 중 발생한 문제", + "clearFailed": "Queue 제거 중 발생한 문제", + "queuedCount": "{{pending}} Pending", + "front": "front", + "clearSucceeded": "제거된 Queue", + "pause": "중지", + "pruneTooltip": "{{item_count}} 완성된 항목 잘라내기", + "cancelSucceeded": "취소된 항목", + "batchQueuedDesc_other": "queue의 {{direction}}에 추가된 {{count}}세션", + "queue": "Queue", + "batch": "Batch", + "clearQueueAlertDialog": "Queue를 지우면 처리 항목이 즉시 취소되고 Queue가 완전히 지워집니다.", + "resumeFailed": "프로세서 재개 중 발생한 문제", + "clear": "제거하다", + "prune": "잘라내다", + "total": "총 개수", + "canceled": "취소된", + "pruneFailed": "Queue 잘라내는 중 발생한 문제", + "cancelBatchSucceeded": "취소된 Batch", + "clearTooltip": "모든 항목을 취소하고 제거", + "current": "최근", + "pauseTooltip": "프로세서 중지", + "failed": "실패한", + "cancelItem": "항목 취소", + "next": "다음", + "cancelBatch": "Batch 취소", + "back": "back", + "batchFieldValues": "Batch 필드 값들", + "cancel": "취소", + "session": "세션", + "time": "시간", + "queueTotal": "{{total}} Total", + "resumeSucceeded": "재개된 프로세서", + "enqueueing": "Queueing Batch", + "resumeTooltip": "프로세서 재개", + "resume": "재개", + "cancelBatchFailed": "Batch 취소 중 발생한 문제", + "clearQueueAlertDialog2": "Queue를 지우시겠습니까?", + "item": "항목", + "graphFailedToQueue": "queue graph에 실패" + }, + "metadata": { + "positivePrompt": "긍정적 프롬프트", + "negativePrompt": "부정적인 프롬프트", + "generationMode": "Generation Mode", + "Threshold": "Noise Threshold", + "metadata": "Metadata", + "seed": "시드", + "imageDetails": "이미지 세부 정보", + "perlin": "Perlin Noise", + "model": "모델", + "noImageDetails": "이미지 세부 정보를 찾을 수 없습니다", + "hiresFix": "고해상도 최적화", + "cfgScale": "CFG scale", + "initImage": "초기이미지", + "recallParameters": "매개변수 호출", + "height": "Height", + "variations": "Seed-weight 쌍", + "noMetaData": "metadata를 찾을 수 없습니다", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)", + "width": "너비", + "vae": "VAE", + "createdBy": "~에 의해 생성된", + "workflow": "작업의 흐름", + "steps": "단계", + "scheduler": "스케줄러", + "noRecallParameters": "호출할 매개 변수가 없습니다" + }, + "invocationCache": { + "useCache": "캐시 사용", + "disable": "이용 불가능한", + "misses": "캐시 미스", + "enableFailed": "Invocation 캐시를 사용하도록 설정하는 중 발생한 문제", + "invocationCache": "Invocation 캐시", + "clearSucceeded": "제거된 Invocation 캐시", + "enableSucceeded": "이용 가능한 Invocation 캐시", + "clearFailed": "Invocation 캐시 제거 중 발생한 문제", + "hits": "캐시 적중", + "disableSucceeded": "이용 불가능한 Invocation 캐시", + "disableFailed": "Invocation 캐시를 이용하지 못하게 설정 중 발생한 문제", + "enable": "이용 가능한", + "clear": "제거", + "maxCacheSize": "최대 캐시 크기", + "cacheSize": "캐시 크기" + }, + "embedding": { + "noEmbeddingsLoaded": "불러온 Embeddings이 없음", + "noMatchingEmbedding": "일치하는 Embeddings이 없음", + "addEmbedding": "Embedding 추가", + "incompatibleModel": "호환되지 않는 기본 모델:" + }, + "hrf": { + "enableHrf": "이용 가능한 고해상도 고정", + "upscaleMethod": "업스케일 방법", + "enableHrfTooltip": "낮은 초기 해상도로 생성하고 기본 해상도로 업스케일한 다음 Image-to-Image를 실행합니다.", + "metadata": { + "strength": "고해상도 고정 강도", + "enabled": "고해상도 고정 사용", + "method": "고해상도 고정 방법" + }, + "hrf": "고해상도 고정", + "hrfStrength": "고해상도 고정 강도" + }, + "models": { + "noLoRAsLoaded": "로드된 LoRA 없음", + "noMatchingModels": "일치하는 모델 없음", + "esrganModel": "ESRGAN 모델", + "loading": "로딩중", + "noMatchingLoRAs": "일치하는 LoRA 없음", + "noLoRAsAvailable": "사용 가능한 LoRA 없음", + "noModelsAvailable": "사용 가능한 모델이 없음", + "addLora": "LoRA 추가", + "selectModel": "모델 선택", + "noRefinerModelsInstalled": "SDXL Refiner 모델이 설치되지 않음", + "noLoRAsInstalled": "설치된 LoRA 없음", + "selectLoRA": "LoRA 선택" + }, + "boards": { + "autoAddBoard": "자동 추가 Board", + "topMessage": "이 보드에는 다음 기능에 사용되는 이미지가 포함되어 있습니다:", + "move": "이동", + "menuItemAutoAdd": "해당 Board에 자동 추가", + "myBoard": "나의 Board", + "searchBoard": "Board 찾는 중...", + "deleteBoardOnly": "Board만 삭제", + "noMatching": "일치하는 Board들이 없음", + "movingImagesToBoard_other": "{{count}}이미지를 Board로 이동시키기", + "selectBoard": "Board 선택", + "cancel": "취소", + "addBoard": "Board 추가", + "bottomMessage": "이 보드와 이미지를 삭제하면 현재 사용 중인 모든 기능이 재설정됩니다.", + "uncategorized": "미분류", + "downloadBoard": "Board 다운로드", + "changeBoard": "Board 바꾸기", + "loading": "불러오는 중...", + "clearSearch": "검색 지우기", + "deleteBoard": "Board 삭제", + "deleteBoardAndImages": "Board와 이미지 삭제", + "deletedBoardsCannotbeRestored": "삭제된 Board는 복원할 수 없습니다" + } +} diff --git a/invokeai/frontend/web/dist/locales/mn.json b/invokeai/frontend/web/dist/locales/mn.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/mn.json @@ -0,0 +1 @@ +{} diff --git a/invokeai/frontend/web/dist/locales/nl.json b/invokeai/frontend/web/dist/locales/nl.json new file mode 100644 index 0000000000..6be48de918 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/nl.json @@ -0,0 +1,1504 @@ +{ + "common": { + "hotkeysLabel": "Sneltoetsen", + "languagePickerLabel": "Taal", + "reportBugLabel": "Meld bug", + "settingsLabel": "Instellingen", + "img2img": "Afbeelding naar afbeelding", + "unifiedCanvas": "Centraal canvas", + "nodes": "Werkstroom-editor", + "langDutch": "Nederlands", + "nodesDesc": "Een op knooppunten gebaseerd systeem voor het genereren van afbeeldingen is momenteel in ontwikkeling. Blijf op de hoogte voor nieuws over deze verbluffende functie.", + "postProcessing": "Naverwerking", + "postProcessDesc1": "Invoke AI biedt een breed scala aan naverwerkingsfuncties. Afbeeldingsopschaling en Gezichtsherstel zijn al beschikbaar in de web-UI. Je kunt ze openen via het menu Uitgebreide opties in de tabbladen Tekst naar afbeelding en Afbeelding naar afbeelding. Je kunt een afbeelding ook direct verwerken via de afbeeldingsactieknoppen boven de weergave van de huidigde afbeelding of in de Viewer.", + "postProcessDesc2": "Een individuele gebruikersinterface voor uitgebreidere naverwerkingsworkflows.", + "postProcessDesc3": "De opdrachtregelinterface van InvokeAI biedt diverse andere functies, waaronder Embiggen.", + "trainingDesc1": "Een individuele workflow in de webinterface voor het trainen van je eigen embeddings en checkpoints via Textual Inversion en Dreambooth.", + "trainingDesc2": "InvokeAI ondersteunt al het trainen van eigen embeddings via Textual Inversion via het hoofdscript.", + "upload": "Upload", + "close": "Sluit", + "load": "Laad", + "statusConnected": "Verbonden", + "statusDisconnected": "Niet verbonden", + "statusError": "Fout", + "statusPreparing": "Voorbereiden", + "statusProcessingCanceled": "Verwerking geannuleerd", + "statusProcessingComplete": "Verwerking voltooid", + "statusGenerating": "Genereren", + "statusGeneratingTextToImage": "Genereren van tekst naar afbeelding", + "statusGeneratingImageToImage": "Genereren van afbeelding naar afbeelding", + "statusGeneratingInpainting": "Genereren van Inpainting", + "statusGeneratingOutpainting": "Genereren van Outpainting", + "statusGenerationComplete": "Genereren voltooid", + "statusIterationComplete": "Iteratie voltooid", + "statusSavingImage": "Afbeelding bewaren", + "statusRestoringFaces": "Gezichten herstellen", + "statusRestoringFacesGFPGAN": "Gezichten herstellen (GFPGAN)", + "statusRestoringFacesCodeFormer": "Gezichten herstellen (CodeFormer)", + "statusUpscaling": "Opschaling", + "statusUpscalingESRGAN": "Opschaling (ESRGAN)", + "statusLoadingModel": "Laden van model", + "statusModelChanged": "Model gewijzigd", + "githubLabel": "Github", + "discordLabel": "Discord", + "langArabic": "Arabisch", + "langEnglish": "Engels", + "langFrench": "Frans", + "langGerman": "Duits", + "langItalian": "Italiaans", + "langJapanese": "Japans", + "langPolish": "Pools", + "langBrPortuguese": "Portugees (Brazilië)", + "langRussian": "Russisch", + "langSimplifiedChinese": "Chinees (vereenvoudigd)", + "langUkranian": "Oekraïens", + "langSpanish": "Spaans", + "training": "Training", + "back": "Terug", + "statusConvertingModel": "Omzetten van model", + "statusModelConverted": "Model omgezet", + "statusMergingModels": "Samenvoegen van modellen", + "statusMergedModels": "Modellen samengevoegd", + "cancel": "Annuleer", + "accept": "Akkoord", + "langPortuguese": "Portugees", + "loading": "Bezig met laden", + "loadingInvokeAI": "Bezig met laden van Invoke AI", + "langHebrew": "עברית", + "langKorean": "한국어", + "txt2img": "Tekst naar afbeelding", + "postprocessing": "Naverwerking", + "dontAskMeAgain": "Vraag niet opnieuw", + "imagePrompt": "Afbeeldingsprompt", + "random": "Willekeurig", + "generate": "Genereer", + "openInNewTab": "Open in nieuw tabblad", + "areYouSure": "Weet je het zeker?", + "linear": "Lineair", + "batch": "Seriebeheer", + "modelManager": "Modelbeheer", + "darkMode": "Donkere modus", + "lightMode": "Lichte modus", + "communityLabel": "Gemeenschap", + "t2iAdapter": "T2I-adapter", + "on": "Aan", + "nodeEditor": "Knooppunteditor", + "ipAdapter": "IP-adapter", + "controlAdapter": "Control-adapter", + "auto": "Autom.", + "controlNet": "ControlNet", + "statusProcessing": "Bezig met verwerken", + "imageFailedToLoad": "Kan afbeelding niet laden", + "learnMore": "Meer informatie", + "advanced": "Uitgebreid" + }, + "gallery": { + "generations": "Gegenereerde afbeeldingen", + "showGenerations": "Toon gegenereerde afbeeldingen", + "uploads": "Uploads", + "showUploads": "Toon uploads", + "galleryImageSize": "Afbeeldingsgrootte", + "galleryImageResetSize": "Herstel grootte", + "gallerySettings": "Instellingen galerij", + "maintainAspectRatio": "Behoud beeldverhoiding", + "autoSwitchNewImages": "Wissel autom. naar nieuwe afbeeldingen", + "singleColumnLayout": "Eenkolomsindeling", + "allImagesLoaded": "Alle afbeeldingen geladen", + "loadMore": "Laad meer", + "noImagesInGallery": "Geen afbeeldingen om te tonen", + "deleteImage": "Verwijder afbeelding", + "deleteImageBin": "Verwijderde afbeeldingen worden naar de prullenbak van je besturingssysteem gestuurd.", + "deleteImagePermanent": "Verwijderde afbeeldingen kunnen niet worden hersteld.", + "assets": "Eigen onderdelen", + "autoAssignBoardOnClick": "Ken automatisch bord toe bij klikken", + "featuresWillReset": "Als je deze afbeelding verwijdert, dan worden deze functies onmiddellijk teruggezet.", + "loading": "Bezig met laden", + "unableToLoad": "Kan galerij niet laden", + "preparingDownload": "Bezig met voorbereiden van download", + "preparingDownloadFailed": "Fout bij voorbereiden van download", + "downloadSelection": "Download selectie", + "currentlyInUse": "Deze afbeelding is momenteel in gebruik door de volgende functies:", + "copy": "Kopieer", + "download": "Download", + "setCurrentImage": "Stel in als huidige afbeelding" + }, + "hotkeys": { + "keyboardShortcuts": "Sneltoetsen", + "appHotkeys": "Appsneltoetsen", + "generalHotkeys": "Algemene sneltoetsen", + "galleryHotkeys": "Sneltoetsen galerij", + "unifiedCanvasHotkeys": "Sneltoetsen centraal canvas", + "invoke": { + "title": "Genereer", + "desc": "Genereert een afbeelding" + }, + "cancel": { + "title": "Annuleer", + "desc": "Annuleert het genereren van een afbeelding" + }, + "focusPrompt": { + "title": "Focus op invoer", + "desc": "Legt de focus op het invoertekstvak" + }, + "toggleOptions": { + "title": "Open/sluit Opties", + "desc": "Opent of sluit het deelscherm Opties" + }, + "pinOptions": { + "title": "Zet Opties vast", + "desc": "Zet het deelscherm Opties vast" + }, + "toggleViewer": { + "title": "Zet Viewer vast", + "desc": "Opent of sluit Afbeeldingsviewer" + }, + "toggleGallery": { + "title": "Zet Galerij vast", + "desc": "Opent of sluit het deelscherm Galerij" + }, + "maximizeWorkSpace": { + "title": "Maximaliseer werkgebied", + "desc": "Sluit deelschermen en maximaliseer het werkgebied" + }, + "changeTabs": { + "title": "Wissel van tabblad", + "desc": "Wissel naar een ander werkgebied" + }, + "consoleToggle": { + "title": "Open/sluit console", + "desc": "Opent of sluit de console" + }, + "setPrompt": { + "title": "Stel invoertekst in", + "desc": "Gebruikt de invoertekst van de huidige afbeelding" + }, + "setSeed": { + "title": "Stel seed in", + "desc": "Gebruikt de seed van de huidige afbeelding" + }, + "setParameters": { + "title": "Stel parameters in", + "desc": "Gebruikt alle parameters van de huidige afbeelding" + }, + "restoreFaces": { + "title": "Herstel gezichten", + "desc": "Herstelt de huidige afbeelding" + }, + "upscale": { + "title": "Schaal op", + "desc": "Schaalt de huidige afbeelding op" + }, + "showInfo": { + "title": "Toon info", + "desc": "Toont de metagegevens van de huidige afbeelding" + }, + "sendToImageToImage": { + "title": "Stuur naar Afbeelding naar afbeelding", + "desc": "Stuurt de huidige afbeelding naar Afbeelding naar afbeelding" + }, + "deleteImage": { + "title": "Verwijder afbeelding", + "desc": "Verwijdert de huidige afbeelding" + }, + "closePanels": { + "title": "Sluit deelschermen", + "desc": "Sluit geopende deelschermen" + }, + "previousImage": { + "title": "Vorige afbeelding", + "desc": "Toont de vorige afbeelding in de galerij" + }, + "nextImage": { + "title": "Volgende afbeelding", + "desc": "Toont de volgende afbeelding in de galerij" + }, + "toggleGalleryPin": { + "title": "Zet galerij vast/los", + "desc": "Zet de galerij vast of los aan de gebruikersinterface" + }, + "increaseGalleryThumbSize": { + "title": "Vergroot afbeeldingsgrootte galerij", + "desc": "Vergroot de grootte van de galerijminiaturen" + }, + "decreaseGalleryThumbSize": { + "title": "Verklein afbeeldingsgrootte galerij", + "desc": "Verkleint de grootte van de galerijminiaturen" + }, + "selectBrush": { + "title": "Kies penseel", + "desc": "Kiest de penseel op het canvas" + }, + "selectEraser": { + "title": "Kies gum", + "desc": "Kiest de gum op het canvas" + }, + "decreaseBrushSize": { + "title": "Verklein penseelgrootte", + "desc": "Verkleint de grootte van het penseel/gum op het canvas" + }, + "increaseBrushSize": { + "title": "Vergroot penseelgrootte", + "desc": "Vergroot de grootte van het penseel/gum op het canvas" + }, + "decreaseBrushOpacity": { + "title": "Verlaag ondoorzichtigheid penseel", + "desc": "Verlaagt de ondoorzichtigheid van de penseel op het canvas" + }, + "increaseBrushOpacity": { + "title": "Verhoog ondoorzichtigheid penseel", + "desc": "Verhoogt de ondoorzichtigheid van de penseel op het canvas" + }, + "moveTool": { + "title": "Verplaats canvas", + "desc": "Maakt canvasnavigatie mogelijk" + }, + "fillBoundingBox": { + "title": "Vul tekenvak", + "desc": "Vult het tekenvak met de penseelkleur" + }, + "eraseBoundingBox": { + "title": "Wis tekenvak", + "desc": "Wist het gebied van het tekenvak" + }, + "colorPicker": { + "title": "Kleurkiezer", + "desc": "Opent de kleurkiezer op het canvas" + }, + "toggleSnap": { + "title": "Zet uitlijnen aan/uit", + "desc": "Zet uitlijnen op raster aan/uit" + }, + "quickToggleMove": { + "title": "Verplaats canvas even", + "desc": "Verplaats kortstondig het canvas" + }, + "toggleLayer": { + "title": "Zet laag aan/uit", + "desc": "Wisselt tussen de masker- en basislaag" + }, + "clearMask": { + "title": "Wis masker", + "desc": "Wist het volledig masker" + }, + "hideMask": { + "title": "Toon/verberg masker", + "desc": "Toont of verbegt het masker" + }, + "showHideBoundingBox": { + "title": "Toon/verberg tekenvak", + "desc": "Wisselt de zichtbaarheid van het tekenvak" + }, + "mergeVisible": { + "title": "Voeg lagen samen", + "desc": "Voegt alle zichtbare lagen op het canvas samen" + }, + "saveToGallery": { + "title": "Bewaar in galerij", + "desc": "Bewaart het huidige canvas in de galerij" + }, + "copyToClipboard": { + "title": "Kopieer naar klembord", + "desc": "Kopieert het huidige canvas op het klembord" + }, + "downloadImage": { + "title": "Download afbeelding", + "desc": "Downloadt het huidige canvas" + }, + "undoStroke": { + "title": "Maak streek ongedaan", + "desc": "Maakt een penseelstreek ongedaan" + }, + "redoStroke": { + "title": "Herhaal streek", + "desc": "Voert een ongedaan gemaakte penseelstreek opnieuw uit" + }, + "resetView": { + "title": "Herstel weergave", + "desc": "Herstelt de canvasweergave" + }, + "previousStagingImage": { + "title": "Vorige sessie-afbeelding", + "desc": "Bladert terug naar de vorige afbeelding in het sessiegebied" + }, + "nextStagingImage": { + "title": "Volgende sessie-afbeelding", + "desc": "Bladert vooruit naar de volgende afbeelding in het sessiegebied" + }, + "acceptStagingImage": { + "title": "Accepteer sessie-afbeelding", + "desc": "Accepteert de huidige sessie-afbeelding" + }, + "addNodes": { + "title": "Voeg knooppunten toe", + "desc": "Opent het menu Voeg knooppunt toe" + }, + "nodesHotkeys": "Sneltoetsen knooppunten" + }, + "modelManager": { + "modelManager": "Modelonderhoud", + "model": "Model", + "modelAdded": "Model toegevoegd", + "modelUpdated": "Model bijgewerkt", + "modelEntryDeleted": "Modelregel verwijderd", + "cannotUseSpaces": "Spaties zijn niet toegestaan", + "addNew": "Voeg nieuwe toe", + "addNewModel": "Voeg nieuw model toe", + "addManually": "Voeg handmatig toe", + "manual": "Handmatig", + "name": "Naam", + "nameValidationMsg": "Geef een naam voor je model", + "description": "Beschrijving", + "descriptionValidationMsg": "Voeg een beschrijving toe voor je model", + "config": "Configuratie", + "configValidationMsg": "Pad naar het configuratiebestand van je model.", + "modelLocation": "Locatie model", + "modelLocationValidationMsg": "Geef het pad naar een lokale map waar je Diffusers-model wordt bewaard", + "vaeLocation": "Locatie VAE", + "vaeLocationValidationMsg": "Pad naar waar je VAE zich bevindt.", + "width": "Breedte", + "widthValidationMsg": "Standaardbreedte van je model.", + "height": "Hoogte", + "heightValidationMsg": "Standaardhoogte van je model.", + "addModel": "Voeg model toe", + "updateModel": "Werk model bij", + "availableModels": "Beschikbare modellen", + "search": "Zoek", + "load": "Laad", + "active": "actief", + "notLoaded": "niet geladen", + "cached": "gecachet", + "checkpointFolder": "Checkpointmap", + "clearCheckpointFolder": "Wis checkpointmap", + "findModels": "Zoek modellen", + "scanAgain": "Kijk opnieuw", + "modelsFound": "Gevonden modellen", + "selectFolder": "Kies map", + "selected": "Gekozen", + "selectAll": "Kies alles", + "deselectAll": "Kies niets", + "showExisting": "Toon bestaande", + "addSelected": "Voeg gekozen toe", + "modelExists": "Model bestaat", + "selectAndAdd": "Kies en voeg de hieronder opgesomde modellen toe", + "noModelsFound": "Geen modellen gevonden", + "delete": "Verwijder", + "deleteModel": "Verwijder model", + "deleteConfig": "Verwijder configuratie", + "deleteMsg1": "Weet je zeker dat je dit model wilt verwijderen uit InvokeAI?", + "deleteMsg2": "Hiermee ZAL het model van schijf worden verwijderd als het zich bevindt in de beginmap van InvokeAI. Als je het model vanaf een eigen locatie gebruikt, dan ZAL het model NIET van schijf worden verwijderd.", + "formMessageDiffusersVAELocationDesc": "Indien niet opgegeven, dan zal InvokeAI kijken naar het VAE-bestand in de hierboven gegeven modellocatie.", + "repoIDValidationMsg": "Online repository van je model", + "formMessageDiffusersModelLocation": "Locatie Diffusers-model", + "convertToDiffusersHelpText3": "Je checkpoint-bestand op de schijf ZAL worden verwijderd als het zich in de beginmap van InvokeAI bevindt. Het ZAL NIET worden verwijderd als het zich in een andere locatie bevindt.", + "convertToDiffusersHelpText6": "Wil je dit model omzetten?", + "allModels": "Alle modellen", + "checkpointModels": "Checkpoints", + "safetensorModels": "SafeTensors", + "addCheckpointModel": "Voeg Checkpoint-/SafeTensor-model toe", + "addDiffuserModel": "Voeg Diffusers-model toe", + "diffusersModels": "Diffusers", + "repo_id": "Repo-id", + "vaeRepoID": "Repo-id VAE", + "vaeRepoIDValidationMsg": "Online repository van je VAE", + "formMessageDiffusersModelLocationDesc": "Voer er minimaal een in.", + "formMessageDiffusersVAELocation": "Locatie VAE", + "convert": "Omzetten", + "convertToDiffusers": "Omzetten naar Diffusers", + "convertToDiffusersHelpText1": "Dit model wordt omgezet naar de🧨 Diffusers-indeling.", + "convertToDiffusersHelpText2": "Dit proces vervangt het onderdeel in Modelonderhoud met de Diffusers-versie van hetzelfde model.", + "convertToDiffusersHelpText4": "Dit is een eenmalig proces. Dit neemt ongeveer 30 tot 60 sec. in beslag, afhankelijk van de specificaties van je computer.", + "convertToDiffusersHelpText5": "Zorg ervoor dat je genoeg schijfruimte hebt. Modellen nemen gewoonlijk ongeveer 2 tot 7 GB ruimte in beslag.", + "convertToDiffusersSaveLocation": "Bewaarlocatie", + "v1": "v1", + "inpainting": "v1-inpainting", + "customConfig": "Eigen configuratie", + "pathToCustomConfig": "Pad naar eigen configuratie", + "statusConverting": "Omzetten", + "modelConverted": "Model omgezet", + "sameFolder": "Dezelfde map", + "invokeRoot": "InvokeAI-map", + "custom": "Eigen", + "customSaveLocation": "Eigen bewaarlocatie", + "merge": "Samenvoegen", + "modelsMerged": "Modellen samengevoegd", + "mergeModels": "Voeg modellen samen", + "modelOne": "Model 1", + "modelTwo": "Model 2", + "modelThree": "Model 3", + "mergedModelName": "Samengevoegde modelnaam", + "alpha": "Alfa", + "interpolationType": "Soort interpolatie", + "mergedModelSaveLocation": "Bewaarlocatie", + "mergedModelCustomSaveLocation": "Eigen pad", + "invokeAIFolder": "InvokeAI-map", + "ignoreMismatch": "Negeer discrepanties tussen gekozen modellen", + "modelMergeHeaderHelp1": "Je kunt tot drie verschillende modellen samenvoegen om een mengvorm te maken die aan je behoeften voldoet.", + "modelMergeHeaderHelp2": "Alleen Diffusers kunnen worden samengevoegd. Als je een Checkpointmodel wilt samenvoegen, zet deze eerst om naar Diffusers.", + "modelMergeAlphaHelp": "Alfa stuurt de mengsterkte aan voor de modellen. Lagere alfawaarden leiden tot een kleinere invloed op het tweede model.", + "modelMergeInterpAddDifferenceHelp": "In deze stand wordt model 3 eerst van model 2 afgehaald. Wat daar uitkomt wordt gemengd met model 1, gebruikmakend van de hierboven ingestelde alfawaarde.", + "inverseSigmoid": "Keer Sigmoid om", + "sigmoid": "Sigmoid", + "weightedSum": "Gewogen som", + "v2_base": "v2 (512px)", + "v2_768": "v2 (768px)", + "none": "geen", + "addDifference": "Voeg verschil toe", + "scanForModels": "Scan naar modellen", + "pickModelType": "Kies modelsoort", + "baseModel": "Basismodel", + "vae": "VAE", + "variant": "Variant", + "modelConversionFailed": "Omzetten model mislukt", + "modelUpdateFailed": "Bijwerken model mislukt", + "modelsMergeFailed": "Samenvoegen model mislukt", + "selectModel": "Kies model", + "settings": "Instellingen", + "modelDeleted": "Model verwijderd", + "noCustomLocationProvided": "Geen Aangepaste Locatie Opgegeven", + "syncModels": "Synchroniseer Modellen", + "modelsSynced": "Modellen Gesynchroniseerd", + "modelSyncFailed": "Synchronisatie modellen mislukt", + "modelDeleteFailed": "Model kon niet verwijderd worden", + "convertingModelBegin": "Model aan het converteren. Even geduld.", + "importModels": "Importeer Modellen", + "syncModelsDesc": "Als je modellen niet meer synchroon zijn met de backend, kan je ze met deze optie vernieuwen. Dit wordt meestal gebruikt in het geval je het bestand models.yaml met de hand bewerkt of als je modellen aan de beginmap van InvokeAI toevoegt nadat de applicatie gestart is.", + "loraModels": "LoRA's", + "onnxModels": "Onnx", + "oliveModels": "Olives", + "noModels": "Geen modellen gevonden", + "predictionType": "Soort voorspelling (voor Stable Diffusion 2.x-modellen en incidentele Stable Diffusion 1.x-modellen)", + "quickAdd": "Voeg snel toe", + "simpleModelDesc": "Geef een pad naar een lokaal Diffusers-model, lokale-checkpoint- / safetensors-model, een HuggingFace-repo-ID of een url naar een checkpoint- / Diffusers-model.", + "advanced": "Uitgebreid", + "useCustomConfig": "Gebruik eigen configuratie", + "closeAdvanced": "Sluit uitgebreid", + "modelType": "Soort model", + "customConfigFileLocation": "Locatie eigen configuratiebestand", + "vaePrecision": "Nauwkeurigheid VAE" + }, + "parameters": { + "images": "Afbeeldingen", + "steps": "Stappen", + "cfgScale": "CFG-schaal", + "width": "Breedte", + "height": "Hoogte", + "seed": "Seed", + "randomizeSeed": "Willekeurige seed", + "shuffle": "Mengseed", + "noiseThreshold": "Drempelwaarde ruis", + "perlinNoise": "Perlinruis", + "variations": "Variaties", + "variationAmount": "Hoeveelheid variatie", + "seedWeights": "Gewicht seed", + "faceRestoration": "Gezichtsherstel", + "restoreFaces": "Herstel gezichten", + "type": "Soort", + "strength": "Sterkte", + "upscaling": "Opschalen", + "upscale": "Vergroot (Shift + U)", + "upscaleImage": "Schaal afbeelding op", + "scale": "Schaal", + "otherOptions": "Andere opties", + "seamlessTiling": "Naadloze tegels", + "hiresOptim": "Hogeresolutie-optimalisatie", + "imageFit": "Pas initiële afbeelding in uitvoergrootte", + "codeformerFidelity": "Getrouwheid", + "scaleBeforeProcessing": "Schalen voor verwerking", + "scaledWidth": "Geschaalde B", + "scaledHeight": "Geschaalde H", + "infillMethod": "Infill-methode", + "tileSize": "Grootte tegel", + "boundingBoxHeader": "Tekenvak", + "seamCorrectionHeader": "Correctie naad", + "infillScalingHeader": "Infill en schaling", + "img2imgStrength": "Sterkte Afbeelding naar afbeelding", + "toggleLoopback": "Zet recursieve verwerking aan/uit", + "sendTo": "Stuur naar", + "sendToImg2Img": "Stuur naar Afbeelding naar afbeelding", + "sendToUnifiedCanvas": "Stuur naar Centraal canvas", + "copyImageToLink": "Stuur afbeelding naar koppeling", + "downloadImage": "Download afbeelding", + "openInViewer": "Open in Viewer", + "closeViewer": "Sluit Viewer", + "usePrompt": "Hergebruik invoertekst", + "useSeed": "Hergebruik seed", + "useAll": "Hergebruik alles", + "useInitImg": "Gebruik initiële afbeelding", + "info": "Info", + "initialImage": "Initiële afbeelding", + "showOptionsPanel": "Toon deelscherm Opties (O of T)", + "symmetry": "Symmetrie", + "hSymmetryStep": "Stap horiz. symmetrie", + "vSymmetryStep": "Stap vert. symmetrie", + "cancel": { + "immediate": "Annuleer direct", + "isScheduled": "Annuleren", + "setType": "Stel annuleervorm in", + "schedule": "Annuleer na huidige iteratie", + "cancel": "Annuleer" + }, + "general": "Algemeen", + "copyImage": "Kopieer afbeelding", + "imageToImage": "Afbeelding naar afbeelding", + "denoisingStrength": "Sterkte ontruisen", + "hiresStrength": "Sterkte hogere resolutie", + "scheduler": "Planner", + "noiseSettings": "Ruis", + "seamlessXAxis": "X-as", + "seamlessYAxis": "Y-as", + "hidePreview": "Verberg voorvertoning", + "showPreview": "Toon voorvertoning", + "boundingBoxWidth": "Tekenvak breedte", + "boundingBoxHeight": "Tekenvak hoogte", + "clipSkip": "Overslaan CLIP", + "aspectRatio": "Beeldverhouding", + "negativePromptPlaceholder": "Negatieve prompt", + "controlNetControlMode": "Aansturingsmodus", + "positivePromptPlaceholder": "Positieve prompt", + "maskAdjustmentsHeader": "Maskeraanpassingen", + "compositingSettingsHeader": "Instellingen afbeeldingsopbouw", + "coherencePassHeader": "Coherentiestap", + "maskBlur": "Vervaag", + "maskBlurMethod": "Vervagingsmethode", + "coherenceSteps": "Stappen", + "coherenceStrength": "Sterkte", + "seamHighThreshold": "Hoog", + "seamLowThreshold": "Laag", + "invoke": { + "noNodesInGraph": "Geen knooppunten in graaf", + "noModelSelected": "Geen model ingesteld", + "invoke": "Start", + "noPrompts": "Geen prompts gegenereerd", + "systemBusy": "Systeem is bezig", + "noInitialImageSelected": "Geen initiële afbeelding gekozen", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} invoer ontbreekt", + "noControlImageForControlAdapter": "Controle-adapter #{{number}} heeft geen controle-afbeelding", + "noModelForControlAdapter": "Control-adapter #{{number}} heeft geen model ingesteld staan.", + "unableToInvoke": "Kan niet starten", + "incompatibleBaseModelForControlAdapter": "Model van controle-adapter #{{number}} is ongeldig in combinatie met het hoofdmodel.", + "systemDisconnected": "Systeem is niet verbonden", + "missingNodeTemplate": "Knooppuntsjabloon ontbreekt", + "readyToInvoke": "Klaar om te starten", + "missingFieldTemplate": "Veldsjabloon ontbreekt", + "addingImagesTo": "Bezig met toevoegen van afbeeldingen aan" + }, + "seamlessX&Y": "Naadloos X en Y", + "isAllowedToUpscale": { + "useX2Model": "Afbeelding is te groot om te vergroten met het x4-model. Gebruik hiervoor het x2-model", + "tooLarge": "Afbeelding is te groot om te vergoten. Kies een kleinere afbeelding" + }, + "aspectRatioFree": "Vrij", + "cpuNoise": "CPU-ruis", + "patchmatchDownScaleSize": "Verklein", + "gpuNoise": "GPU-ruis", + "seamlessX": "Naadloos X", + "useCpuNoise": "Gebruik CPU-ruis", + "clipSkipWithLayerCount": "Overslaan CLIP {{layerCount}}", + "seamlessY": "Naadloos Y", + "manualSeed": "Handmatige seedwaarde", + "imageActions": "Afbeeldingshandeling", + "randomSeed": "Willekeurige seedwaarde", + "iterations": "Iteraties", + "iterationsWithCount_one": "{{count}} iteratie", + "iterationsWithCount_other": "{{count}} iteraties", + "enableNoiseSettings": "Schakel ruisinstellingen in", + "coherenceMode": "Modus" + }, + "settings": { + "models": "Modellen", + "displayInProgress": "Toon voortgangsafbeeldingen", + "saveSteps": "Bewaar afbeeldingen elke n stappen", + "confirmOnDelete": "Bevestig bij verwijderen", + "displayHelpIcons": "Toon hulppictogrammen", + "enableImageDebugging": "Schakel foutopsporing afbeelding in", + "resetWebUI": "Herstel web-UI", + "resetWebUIDesc1": "Herstel web-UI herstelt alleen de lokale afbeeldingscache en de onthouden instellingen van je browser. Het verwijdert geen afbeeldingen van schijf.", + "resetWebUIDesc2": "Als afbeeldingen niet getoond worden in de galerij of iets anders werkt niet, probeer dan eerst deze herstelfunctie voordat je een fout aanmeldt op GitHub.", + "resetComplete": "Webinterface is hersteld.", + "useSlidersForAll": "Gebruik schuifbalken voor alle opties", + "consoleLogLevel": "Niveau logboek", + "shouldLogToConsole": "Schrijf logboek naar console", + "developer": "Ontwikkelaar", + "general": "Algemeen", + "showProgressInViewer": "Toon voortgangsafbeeldingen in viewer", + "generation": "Genereren", + "ui": "Gebruikersinterface", + "antialiasProgressImages": "Voer anti-aliasing uit op voortgangsafbeeldingen", + "showAdvancedOptions": "Toon uitgebreide opties", + "favoriteSchedulers": "Favoriete planners", + "favoriteSchedulersPlaceholder": "Geen favoriete planners ingesteld", + "beta": "Bèta", + "experimental": "Experimenteel", + "alternateCanvasLayout": "Omwisselen Canvas Layout", + "enableNodesEditor": "Schakel Knooppunteditor in", + "autoChangeDimensions": "Werk B/H bij naar modelstandaard bij wijziging", + "clearIntermediates": "Wis tussentijdse afbeeldingen", + "clearIntermediatesDesc3": "Je galerijafbeeldingen zullen niet worden verwijderd.", + "clearIntermediatesWithCount_one": "Wis {{count}} tussentijdse afbeelding", + "clearIntermediatesWithCount_other": "Wis {{count}} tussentijdse afbeeldingen", + "clearIntermediatesDesc2": "Tussentijdse afbeeldingen zijn nevenproducten bij het genereren. Deze wijken af van de uitvoerafbeeldingen in de galerij. Als je tussentijdse afbeeldingen wist, wordt schijfruimte vrijgemaakt.", + "intermediatesCleared_one": "{{count}} tussentijdse afbeelding gewist", + "intermediatesCleared_other": "{{count}} tussentijdse afbeeldingen gewist", + "clearIntermediatesDesc1": "Als je tussentijdse afbeeldingen wist, dan wordt de staat hersteld van je canvas en van ControlNet.", + "intermediatesClearedFailed": "Fout bij wissen van tussentijdse afbeeldingen" + }, + "toast": { + "tempFoldersEmptied": "Tijdelijke map geleegd", + "uploadFailed": "Upload mislukt", + "uploadFailedUnableToLoadDesc": "Kan bestand niet laden", + "downloadImageStarted": "Afbeeldingsdownload gestart", + "imageCopied": "Afbeelding gekopieerd", + "imageLinkCopied": "Afbeeldingskoppeling gekopieerd", + "imageNotLoaded": "Geen afbeelding geladen", + "imageNotLoadedDesc": "Geen afbeeldingen gevonden", + "imageSavedToGallery": "Afbeelding opgeslagen naar galerij", + "canvasMerged": "Canvas samengevoegd", + "sentToImageToImage": "Gestuurd naar Afbeelding naar afbeelding", + "sentToUnifiedCanvas": "Gestuurd naar Centraal canvas", + "parametersSet": "Parameters ingesteld", + "parametersNotSet": "Parameters niet ingesteld", + "parametersNotSetDesc": "Geen metagegevens gevonden voor deze afbeelding.", + "parametersFailed": "Fout bij laden van parameters", + "parametersFailedDesc": "Kan initiële afbeelding niet laden.", + "seedSet": "Seed ingesteld", + "seedNotSet": "Seed niet ingesteld", + "seedNotSetDesc": "Kan seed niet vinden voor deze afbeelding.", + "promptSet": "Invoertekst ingesteld", + "promptNotSet": "Invoertekst niet ingesteld", + "promptNotSetDesc": "Kan invoertekst niet vinden voor deze afbeelding.", + "upscalingFailed": "Opschalen mislukt", + "faceRestoreFailed": "Gezichtsherstel mislukt", + "metadataLoadFailed": "Fout bij laden metagegevens", + "initialImageSet": "Initiële afbeelding ingesteld", + "initialImageNotSet": "Initiële afbeelding niet ingesteld", + "initialImageNotSetDesc": "Kan initiële afbeelding niet laden", + "serverError": "Serverfout", + "disconnected": "Verbinding met server verbroken", + "connected": "Verbonden met server", + "canceled": "Verwerking geannuleerd", + "uploadFailedInvalidUploadDesc": "Moet een enkele PNG- of JPEG-afbeelding zijn", + "problemCopyingImageLink": "Kan afbeeldingslink niet kopiëren", + "parameterNotSet": "Parameter niet ingesteld", + "parameterSet": "Instellen parameters", + "nodesSaved": "Knooppunten bewaard", + "nodesLoaded": "Knooppunten geladen", + "nodesLoadedFailed": "Laden knooppunten mislukt", + "problemCopyingImage": "Kan Afbeelding Niet Kopiëren", + "nodesNotValidJSON": "Ongeldige JSON", + "nodesCorruptedGraph": "Kan niet laden. Graph lijkt corrupt.", + "nodesUnrecognizedTypes": "Laden mislukt. Graph heeft onherkenbare types", + "nodesBrokenConnections": "Laden mislukt. Sommige verbindingen zijn verbroken.", + "nodesNotValidGraph": "Geen geldige knooppunten graph", + "baseModelChangedCleared_one": "Basismodel is gewijzigd: {{count}} niet-compatibel submodel weggehaald of uitgeschakeld", + "baseModelChangedCleared_other": "Basismodel is gewijzigd: {{count}} niet-compatibele submodellen weggehaald of uitgeschakeld", + "imageSavingFailed": "Fout bij bewaren afbeelding", + "canvasSentControlnetAssets": "Canvas gestuurd naar ControlNet en Assets", + "problemCopyingCanvasDesc": "Kan basislaag niet exporteren", + "loadedWithWarnings": "Werkstroom geladen met waarschuwingen", + "setInitialImage": "Ingesteld als initiële afbeelding", + "canvasCopiedClipboard": "Canvas gekopieerd naar klembord", + "setControlImage": "Ingesteld als controle-afbeelding", + "setNodeField": "Ingesteld als knooppuntveld", + "problemSavingMask": "Fout bij bewaren masker", + "problemSavingCanvasDesc": "Kan basislaag niet exporteren", + "maskSavedAssets": "Masker bewaard in Assets", + "modelAddFailed": "Fout bij toevoegen model", + "problemDownloadingCanvas": "Fout bij downloaden van canvas", + "problemMergingCanvas": "Fout bij samenvoegen canvas", + "setCanvasInitialImage": "Ingesteld als initiële canvasafbeelding", + "imageUploaded": "Afbeelding geüpload", + "addedToBoard": "Toegevoegd aan bord", + "workflowLoaded": "Werkstroom geladen", + "modelAddedSimple": "Model toegevoegd", + "problemImportingMaskDesc": "Kan masker niet exporteren", + "problemCopyingCanvas": "Fout bij kopiëren canvas", + "problemSavingCanvas": "Fout bij bewaren canvas", + "canvasDownloaded": "Canvas gedownload", + "setIPAdapterImage": "Ingesteld als IP-adapterafbeelding", + "problemMergingCanvasDesc": "Kan basislaag niet exporteren", + "problemDownloadingCanvasDesc": "Kan basislaag niet exporteren", + "problemSavingMaskDesc": "Kan masker niet exporteren", + "imageSaved": "Afbeelding bewaard", + "maskSentControlnetAssets": "Masker gestuurd naar ControlNet en Assets", + "canvasSavedGallery": "Canvas bewaard in galerij", + "imageUploadFailed": "Fout bij uploaden afbeelding", + "modelAdded": "Model toegevoegd: {{modelName}}", + "problemImportingMask": "Fout bij importeren masker" + }, + "tooltip": { + "feature": { + "prompt": "Dit is het invoertekstvak. De invoertekst bevat de te genereren voorwerpen en stylistische termen. Je kunt hiernaast in de invoertekst ook het gewicht (het belang van een trefwoord) toekennen. Opdrachten en parameters voor op de opdrachtregelinterface werken hier niet.", + "gallery": "De galerij toont gegenereerde afbeeldingen uit de uitvoermap nadat ze gegenereerd zijn. Instellingen worden opgeslagen binnen de bestanden zelf en zijn toegankelijk via het contextmenu.", + "other": "Deze opties maken alternative werkingsstanden voor Invoke mogelijk. De optie 'Naadloze tegels' maakt herhalende patronen in de uitvoer. 'Hoge resolutie' genereert in twee stappen via Afbeelding naar afbeelding: gebruik dit als je een grotere en coherentere afbeelding wilt zonder artifacten. Dit zal meer tijd in beslag nemen t.o.v. Tekst naar afbeelding.", + "seed": "Seedwaarden hebben invloed op de initiële ruis op basis waarvan de afbeelding wordt gevormd. Je kunt de al bestaande seeds van eerdere afbeeldingen gebruiken. De waarde 'Drempelwaarde ruis' wordt gebruikt om de hoeveelheid artifacten te verkleinen bij hoge CFG-waarden (beperk je tot 0 - 10). De Perlinruiswaarde wordt gebruikt om Perlinruis toe te voegen bij het genereren: beide dienen als variatie op de uitvoer.", + "variations": "Probeer een variatie met een waarden tussen 0,1 en 1,0 om het resultaat voor een bepaalde seed te beïnvloeden. Interessante seedvariaties ontstaan bij waarden tussen 0,1 en 0,3.", + "upscale": "Gebruik ESRGAN om de afbeelding direct na het genereren te vergroten.", + "faceCorrection": "Gezichtsherstel via GFPGAN of Codeformer: het algoritme herkent gezichten die voorkomen in de afbeelding en herstelt onvolkomenheden. Een hogere waarde heeft meer invloed op de afbeelding, wat leidt tot aantrekkelijkere gezichten. Codeformer met een hogere getrouwheid behoudt de oorspronkelijke afbeelding ten koste van een sterkere gezichtsherstel.", + "imageToImage": "Afbeelding naar afbeelding laadt een afbeelding als initiële afbeelding, welke vervolgens gebruikt wordt om een nieuwe afbeelding mee te maken i.c.m. de invoertekst. Hoe hoger de waarde, des te meer invloed dit heeft op de uiteindelijke afbeelding. Waarden tussen 0,1 en 1,0 zijn mogelijk. Aanbevolen waarden zijn 0,25 - 0,75", + "boundingBox": "Het tekenvak is gelijk aan de instellingen Breedte en Hoogte voor de functies Tekst naar afbeelding en Afbeelding naar afbeelding. Alleen het gebied in het tekenvak wordt verwerkt.", + "seamCorrection": "Heeft invloed op hoe wordt omgegaan met zichtbare naden die voorkomen tussen gegenereerde afbeeldingen op het canvas.", + "infillAndScaling": "Onderhoud van infillmethodes (gebruikt op gemaskeerde of gewiste gebieden op het canvas) en opschaling (nuttig bij kleine tekenvakken)." + } + }, + "unifiedCanvas": { + "layer": "Laag", + "base": "Basis", + "mask": "Masker", + "maskingOptions": "Maskeropties", + "enableMask": "Schakel masker in", + "preserveMaskedArea": "Behoud gemaskeerd gebied", + "clearMask": "Wis masker", + "brush": "Penseel", + "eraser": "Gum", + "fillBoundingBox": "Vul tekenvak", + "eraseBoundingBox": "Wis tekenvak", + "colorPicker": "Kleurenkiezer", + "brushOptions": "Penseelopties", + "brushSize": "Grootte", + "move": "Verplaats", + "resetView": "Herstel weergave", + "mergeVisible": "Voeg lagen samen", + "saveToGallery": "Bewaar in galerij", + "copyToClipboard": "Kopieer naar klembord", + "downloadAsImage": "Download als afbeelding", + "undo": "Maak ongedaan", + "redo": "Herhaal", + "clearCanvas": "Wis canvas", + "canvasSettings": "Canvasinstellingen", + "showIntermediates": "Toon tussenafbeeldingen", + "showGrid": "Toon raster", + "snapToGrid": "Lijn uit op raster", + "darkenOutsideSelection": "Verduister buiten selectie", + "autoSaveToGallery": "Bewaar automatisch naar galerij", + "saveBoxRegionOnly": "Bewaar alleen tekengebied", + "limitStrokesToBox": "Beperk streken tot tekenvak", + "showCanvasDebugInfo": "Toon aanvullende canvasgegevens", + "clearCanvasHistory": "Wis canvasgeschiedenis", + "clearHistory": "Wis geschiedenis", + "clearCanvasHistoryMessage": "Het wissen van de canvasgeschiedenis laat het huidige canvas ongemoeid, maar wist onherstelbaar de geschiedenis voor het ongedaan maken en herhalen.", + "clearCanvasHistoryConfirm": "Weet je zeker dat je de canvasgeschiedenis wilt wissen?", + "emptyTempImageFolder": "Leeg tijdelijke afbeeldingenmap", + "emptyFolder": "Leeg map", + "emptyTempImagesFolderMessage": "Het legen van de tijdelijke afbeeldingenmap herstelt ook volledig het Centraal canvas. Hieronder valt de geschiedenis voor het ongedaan maken en herhalen, de afbeeldingen in het sessiegebied en de basislaag van het canvas.", + "emptyTempImagesFolderConfirm": "Weet je zeker dat je de tijdelijke afbeeldingenmap wilt legen?", + "activeLayer": "Actieve laag", + "canvasScale": "Schaal canvas", + "boundingBox": "Tekenvak", + "scaledBoundingBox": "Geschaalde tekenvak", + "boundingBoxPosition": "Positie tekenvak", + "canvasDimensions": "Afmetingen canvas", + "canvasPosition": "Positie canvas", + "cursorPosition": "Positie cursor", + "previous": "Vorige", + "next": "Volgende", + "accept": "Accepteer", + "showHide": "Toon/verberg", + "discardAll": "Gooi alles weg", + "betaClear": "Wis", + "betaDarkenOutside": "Verduister buiten tekenvak", + "betaLimitToBox": "Beperk tot tekenvak", + "betaPreserveMasked": "Behoud masker", + "antialiasing": "Anti-aliasing", + "showResultsOn": "Toon resultaten (aan)", + "showResultsOff": "Toon resultaten (uit)" + }, + "accessibility": { + "exitViewer": "Stop viewer", + "zoomIn": "Zoom in", + "rotateCounterClockwise": "Draai tegen de klok in", + "modelSelect": "Modelkeuze", + "invokeProgressBar": "Voortgangsbalk Invoke", + "reset": "Herstel", + "uploadImage": "Upload afbeelding", + "previousImage": "Vorige afbeelding", + "nextImage": "Volgende afbeelding", + "useThisParameter": "Gebruik deze parameter", + "copyMetadataJson": "Kopieer metagegevens-JSON", + "zoomOut": "Zoom uit", + "rotateClockwise": "Draai met de klok mee", + "flipHorizontally": "Spiegel horizontaal", + "flipVertically": "Spiegel verticaal", + "modifyConfig": "Wijzig configuratie", + "toggleAutoscroll": "Autom. scrollen aan/uit", + "toggleLogViewer": "Logboekviewer aan/uit", + "showOptionsPanel": "Toon zijscherm", + "menu": "Menu", + "showGalleryPanel": "Toon deelscherm Galerij", + "loadMore": "Laad meer" + }, + "ui": { + "showProgressImages": "Toon voortgangsafbeeldingen", + "hideProgressImages": "Verberg voortgangsafbeeldingen", + "swapSizes": "Wissel afmetingen om", + "lockRatio": "Zet verhouding vast" + }, + "nodes": { + "zoomOutNodes": "Uitzoomen", + "fitViewportNodes": "Aanpassen aan beeld", + "hideMinimapnodes": "Minimap verbergen", + "showLegendNodes": "Typelegende veld tonen", + "zoomInNodes": "Inzoomen", + "hideGraphNodes": "Graph overlay verbergen", + "showGraphNodes": "Graph overlay tonen", + "showMinimapnodes": "Minimap tonen", + "hideLegendNodes": "Typelegende veld verbergen", + "reloadNodeTemplates": "Herlaad knooppuntsjablonen", + "loadWorkflow": "Laad werkstroom", + "downloadWorkflow": "Download JSON van werkstroom", + "booleanPolymorphicDescription": "Een verzameling Booleanse waarden.", + "scheduler": "Planner", + "inputField": "Invoerveld", + "controlFieldDescription": "Controlegegevens doorgegeven tussen knooppunten.", + "skippingUnknownOutputType": "Overslaan van onbekend soort uitvoerveld", + "latentsFieldDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", + "denoiseMaskFieldDescription": "Ontruisingsmasker kan worden doorgegeven tussen knooppunten", + "floatCollectionDescription": "Een verzameling zwevende-kommagetallen.", + "missingTemplate": "Ontbrekende sjabloon", + "outputSchemaNotFound": "Uitvoerschema niet gevonden", + "ipAdapterPolymorphicDescription": "Een verzameling IP-adapters.", + "workflowDescription": "Korte beschrijving", + "latentsPolymorphicDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", + "colorFieldDescription": "Een RGBA-kleur.", + "mainModelField": "Model", + "unhandledInputProperty": "Onverwerkt invoerkenmerk", + "versionUnknown": " Versie onbekend", + "ipAdapterCollection": "Verzameling IP-adapters", + "conditioningCollection": "Verzameling conditionering", + "maybeIncompatible": "Is mogelijk niet compatibel met geïnstalleerde knooppunten", + "ipAdapterPolymorphic": "Polymorfisme IP-adapter", + "noNodeSelected": "Geen knooppunt gekozen", + "addNode": "Voeg knooppunt toe", + "unableToValidateWorkflow": "Kan werkstroom niet valideren", + "enum": "Enumeratie", + "integerPolymorphicDescription": "Een verzameling gehele getallen.", + "noOutputRecorded": "Geen uitvoer opgenomen", + "updateApp": "Werk app bij", + "conditioningCollectionDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", + "colorPolymorphic": "Polymorfisme kleur", + "colorCodeEdgesHelp": "Kleurgecodeerde randen op basis van hun verbonden velden", + "collectionDescription": "TODO", + "float": "Zwevende-kommagetal", + "workflowContact": "Contactpersoon", + "skippingReservedFieldType": "Overslaan van gereserveerd veldsoort", + "animatedEdges": "Geanimeerde randen", + "booleanCollectionDescription": "Een verzameling van Booleanse waarden.", + "sDXLMainModelFieldDescription": "SDXL-modelveld.", + "conditioningPolymorphic": "Polymorfisme conditionering", + "integer": "Geheel getal", + "colorField": "Kleur", + "boardField": "Bord", + "nodeTemplate": "Sjabloon knooppunt", + "latentsCollection": "Verzameling latents", + "problemReadingWorkflow": "Fout bij lezen van werkstroom uit afbeelding", + "sourceNode": "Bronknooppunt", + "nodeOpacity": "Dekking knooppunt", + "pickOne": "Kies er een", + "collectionItemDescription": "TODO", + "integerDescription": "Gehele getallen zijn getallen zonder een decimaalteken.", + "outputField": "Uitvoerveld", + "unableToLoadWorkflow": "Kan werkstroom niet valideren", + "snapToGrid": "Lijn uit op raster", + "stringPolymorphic": "Polymorfisme tekenreeks", + "conditioningPolymorphicDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", + "noFieldsLinearview": "Geen velden toegevoegd aan lineaire weergave", + "skipped": "Overgeslagen", + "imagePolymorphic": "Polymorfisme afbeelding", + "nodeSearch": "Zoek naar knooppunten", + "updateNode": "Werk knooppunt bij", + "sDXLRefinerModelFieldDescription": "Beschrijving", + "imagePolymorphicDescription": "Een verzameling afbeeldingen.", + "floatPolymorphic": "Polymorfisme zwevende-kommagetal", + "version": "Versie", + "doesNotExist": "bestaat niet", + "ipAdapterCollectionDescription": "Een verzameling van IP-adapters.", + "stringCollectionDescription": "Een verzameling tekenreeksen.", + "unableToParseNode": "Kan knooppunt niet inlezen", + "controlCollection": "Controle-verzameling", + "validateConnections": "Valideer verbindingen en graaf", + "stringCollection": "Verzameling tekenreeksen", + "inputMayOnlyHaveOneConnection": "Invoer mag slechts een enkele verbinding hebben", + "notes": "Opmerkingen", + "uNetField": "UNet", + "nodeOutputs": "Uitvoer knooppunt", + "currentImageDescription": "Toont de huidige afbeelding in de knooppunteditor", + "validateConnectionsHelp": "Voorkom dat er ongeldige verbindingen worden gelegd en dat er ongeldige grafen worden aangeroepen", + "problemSettingTitle": "Fout bij instellen titel", + "ipAdapter": "IP-adapter", + "integerCollection": "Verzameling gehele getallen", + "collectionItem": "Verzamelingsonderdeel", + "noConnectionInProgress": "Geen verbinding bezig te maken", + "vaeModelField": "VAE", + "controlCollectionDescription": "Controlegegevens doorgegeven tussen knooppunten.", + "skippedReservedInput": "Overgeslagen gereserveerd invoerveld", + "workflowVersion": "Versie", + "noConnectionData": "Geen verbindingsgegevens", + "outputFields": "Uitvoervelden", + "fieldTypesMustMatch": "Veldsoorten moeten overeenkomen", + "workflow": "Werkstroom", + "edge": "Rand", + "inputNode": "Invoerknooppunt", + "enumDescription": "Enumeraties zijn waarden die uit een aantal opties moeten worden gekozen.", + "unkownInvocation": "Onbekende aanroepsoort", + "loRAModelFieldDescription": "TODO", + "imageField": "Afbeelding", + "skippedReservedOutput": "Overgeslagen gereserveerd uitvoerveld", + "animatedEdgesHelp": "Animeer gekozen randen en randen verbonden met de gekozen knooppunten", + "cannotDuplicateConnection": "Kan geen dubbele verbindingen maken", + "booleanPolymorphic": "Polymorfisme Booleaanse waarden", + "unknownTemplate": "Onbekend sjabloon", + "noWorkflow": "Geen werkstroom", + "removeLinearView": "Verwijder uit lineaire weergave", + "colorCollectionDescription": "TODO", + "integerCollectionDescription": "Een verzameling gehele getallen.", + "colorPolymorphicDescription": "Een verzameling kleuren.", + "sDXLMainModelField": "SDXL-model", + "workflowTags": "Labels", + "denoiseMaskField": "Ontruisingsmasker", + "schedulerDescription": "Beschrijving", + "missingCanvaInitImage": "Ontbrekende initialisatie-afbeelding voor canvas", + "conditioningFieldDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", + "clipFieldDescription": "Submodellen voor tokenizer en text_encoder.", + "fullyContainNodesHelp": "Knooppunten moeten zich volledig binnen het keuzevak bevinden om te worden gekozen", + "noImageFoundState": "Geen initiële afbeelding gevonden in de staat", + "workflowValidation": "Validatiefout werkstroom", + "clipField": "Clip", + "stringDescription": "Tekenreeksen zijn tekst.", + "nodeType": "Soort knooppunt", + "noMatchingNodes": "Geen overeenkomende knooppunten", + "fullyContainNodes": "Omvat knooppunten volledig om ze te kiezen", + "integerPolymorphic": "Polymorfisme geheel getal", + "executionStateInProgress": "Bezig", + "noFieldType": "Geen soort veld", + "colorCollection": "Een verzameling kleuren.", + "executionStateError": "Fout", + "noOutputSchemaName": "Geen naam voor uitvoerschema gevonden in referentieobject", + "ipAdapterModel": "Model IP-adapter", + "latentsPolymorphic": "Polymorfisme latents", + "vaeModelFieldDescription": "Beschrijving", + "skippingInputNoTemplate": "Overslaan van invoerveld zonder sjabloon", + "ipAdapterDescription": "Een Afbeeldingsprompt-adapter (IP-adapter).", + "boolean": "Booleaanse waarden", + "missingCanvaInitMaskImages": "Ontbrekende initialisatie- en maskerafbeeldingen voor canvas", + "problemReadingMetadata": "Fout bij lezen van metagegevens uit afbeelding", + "stringPolymorphicDescription": "Een verzameling tekenreeksen.", + "oNNXModelField": "ONNX-model", + "executionStateCompleted": "Voltooid", + "node": "Knooppunt", + "skippingUnknownInputType": "Overslaan van onbekend soort invoerveld", + "workflowAuthor": "Auteur", + "currentImage": "Huidige afbeelding", + "controlField": "Controle", + "workflowName": "Naam", + "booleanDescription": "Booleanse waarden zijn waar en onwaar.", + "collection": "Verzameling", + "ipAdapterModelDescription": "Modelveld IP-adapter", + "cannotConnectInputToInput": "Kan invoer niet aan invoer verbinden", + "invalidOutputSchema": "Ongeldig uitvoerschema", + "boardFieldDescription": "Een galerijbord", + "floatDescription": "Zwevende-kommagetallen zijn getallen met een decimaalteken.", + "floatPolymorphicDescription": "Een verzameling zwevende-kommagetallen.", + "vaeField": "Vae", + "conditioningField": "Conditionering", + "unhandledOutputProperty": "Onverwerkt uitvoerkenmerk", + "workflowNotes": "Opmerkingen", + "string": "Tekenreeks", + "floatCollection": "Verzameling zwevende-kommagetallen", + "latentsField": "Latents", + "cannotConnectOutputToOutput": "Kan uitvoer niet aan uitvoer verbinden", + "booleanCollection": "Verzameling Booleaanse waarden", + "connectionWouldCreateCycle": "Verbinding zou cyclisch worden", + "cannotConnectToSelf": "Kan niet aan zichzelf verbinden", + "notesDescription": "Voeg opmerkingen toe aan je werkstroom", + "unknownField": "Onbekend veld", + "inputFields": "Invoervelden", + "colorCodeEdges": "Kleurgecodeerde randen", + "uNetFieldDescription": "UNet-submodel.", + "unknownNode": "Onbekend knooppunt", + "imageCollectionDescription": "Een verzameling afbeeldingen.", + "mismatchedVersion": "Heeft niet-overeenkomende versie", + "vaeFieldDescription": "Vae-submodel.", + "imageFieldDescription": "Afbeeldingen kunnen worden doorgegeven tussen knooppunten.", + "outputNode": "Uitvoerknooppunt", + "addNodeToolTip": "Voeg knooppunt toe (Shift+A, spatie)", + "loadingNodes": "Bezig met laden van knooppunten...", + "snapToGridHelp": "Lijn knooppunten uit op raster bij verplaatsing", + "workflowSettings": "Instellingen werkstroomeditor", + "mainModelFieldDescription": "TODO", + "sDXLRefinerModelField": "Verfijningsmodel", + "loRAModelField": "LoRA", + "unableToParseEdge": "Kan rand niet inlezen", + "latentsCollectionDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", + "oNNXModelFieldDescription": "ONNX-modelveld.", + "imageCollection": "Afbeeldingsverzameling" + }, + "controlnet": { + "amult": "a_mult", + "resize": "Schaal", + "showAdvanced": "Toon uitgebreide opties", + "contentShuffleDescription": "Verschuift het materiaal in de afbeelding", + "bgth": "bg_th", + "addT2IAdapter": "Voeg $t(common.t2iAdapter) toe", + "pidi": "PIDI", + "importImageFromCanvas": "Importeer afbeelding uit canvas", + "lineartDescription": "Zet afbeelding om naar line-art", + "normalBae": "Normale BAE", + "importMaskFromCanvas": "Importeer masker uit canvas", + "hed": "HED", + "hideAdvanced": "Verberg uitgebreid", + "contentShuffle": "Verschuif materiaal", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) ingeschakeld, $t(common.t2iAdapter)s uitgeschakeld", + "ipAdapterModel": "Adaptermodel", + "resetControlImage": "Herstel controle-afbeelding", + "beginEndStepPercent": "Percentage begin-/eindstap", + "mlsdDescription": "Minimalistische herkenning lijnsegmenten", + "duplicate": "Maak kopie", + "balanced": "Gebalanceerd", + "f": "F", + "h": "H", + "prompt": "Prompt", + "depthMidasDescription": "Genereer diepteblad via Midas", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "openPoseDescription": "Menselijke pose-benadering via Openpose", + "control": "Controle", + "resizeMode": "Modus schaling", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ingeschakeld, $t(common.controlNet)s uitgeschakeld", + "coarse": "Grof", + "weight": "Gewicht", + "selectModel": "Kies een model", + "crop": "Snij bij", + "depthMidas": "Diepte (Midas)", + "w": "B", + "processor": "Verwerker", + "addControlNet": "Voeg $t(common.controlNet) toe", + "none": "Geen", + "incompatibleBaseModel": "Niet-compatibel basismodel:", + "enableControlnet": "Schakel ControlNet in", + "detectResolution": "Herken resolutie", + "controlNetT2IMutexDesc": "Gelijktijdig gebruik van $t(common.controlNet) en $t(common.t2iAdapter) wordt op dit moment niet ondersteund.", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "pidiDescription": "PIDI-afbeeldingsverwerking", + "mediapipeFace": "Mediapipe - Gezicht", + "mlsd": "M-LSD", + "controlMode": "Controlemodus", + "fill": "Vul", + "cannyDescription": "Herkenning Canny-rand", + "addIPAdapter": "Voeg $t(common.ipAdapter) toe", + "lineart": "Line-art", + "colorMapDescription": "Genereert een kleurenblad van de afbeelding", + "lineartAnimeDescription": "Lineartverwerking in anime-stijl", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "minConfidence": "Min. vertrouwensniveau", + "imageResolution": "Resolutie afbeelding", + "megaControl": "Zeer veel controle", + "depthZoe": "Diepte (Zoe)", + "colorMap": "Kleur", + "lowThreshold": "Lage drempelwaarde", + "autoConfigure": "Configureer verwerker automatisch", + "highThreshold": "Hoge drempelwaarde", + "normalBaeDescription": "Normale BAE-verwerking", + "noneDescription": "Geen verwerking toegepast", + "saveControlImage": "Bewaar controle-afbeelding", + "openPose": "Openpose", + "toggleControlNet": "Zet deze ControlNet aan/uit", + "delete": "Verwijder", + "controlAdapter_one": "Control-adapter", + "controlAdapter_other": "Control-adapters", + "safe": "Veilig", + "colorMapTileSize": "Grootte tegel", + "lineartAnime": "Line-art voor anime", + "ipAdapterImageFallback": "Geen IP-adapterafbeelding gekozen", + "mediapipeFaceDescription": "Gezichtsherkenning met Mediapipe", + "canny": "Canny", + "depthZoeDescription": "Genereer diepteblad via Zoe", + "hedDescription": "Herkenning van holistisch-geneste randen", + "setControlImageDimensions": "Stel afmetingen controle-afbeelding in op B/H", + "scribble": "Krabbel", + "resetIPAdapterImage": "Herstel IP-adapterafbeelding", + "handAndFace": "Hand en gezicht", + "enableIPAdapter": "Schakel IP-adapter in", + "maxFaces": "Max. gezichten" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "Gebruik een verschillende seedwaarde per afbeelding", + "perIterationLabel": "Seedwaarde per iteratie", + "perIterationDesc": "Gebruik een verschillende seedwaarde per iteratie", + "perPromptLabel": "Seedwaarde per afbeelding", + "label": "Gedrag seedwaarde" + }, + "enableDynamicPrompts": "Schakel dynamische prompts in", + "combinatorial": "Combinatorisch genereren", + "maxPrompts": "Max. prompts", + "promptsWithCount_one": "{{count}} prompt", + "promptsWithCount_other": "{{count}} prompts", + "dynamicPrompts": "Dynamische prompts" + }, + "popovers": { + "noiseUseCPU": { + "paragraphs": [ + "Bepaalt of ruis wordt gegenereerd op de CPU of de GPU.", + "Met CPU-ruis ingeschakeld zal een bepaalde seedwaarde dezelfde afbeelding opleveren op welke machine dan ook.", + "Er is geen prestatieverschil bij het inschakelen van CPU-ruis." + ], + "heading": "Gebruik CPU-ruis" + }, + "paramScheduler": { + "paragraphs": [ + "De planner bepaalt hoe ruis per iteratie wordt toegevoegd aan een afbeelding of hoe een monster wordt bijgewerkt op basis van de uitvoer van een model." + ], + "heading": "Planner" + }, + "scaleBeforeProcessing": { + "paragraphs": [ + "Schaalt het gekozen gebied naar de grootte die het meest geschikt is voor het model, vooraf aan het proces van het afbeeldingen genereren." + ], + "heading": "Schaal vooraf aan verwerking" + }, + "compositingMaskAdjustments": { + "heading": "Aanpassingen masker", + "paragraphs": [ + "Pas het masker aan." + ] + }, + "paramRatio": { + "heading": "Beeldverhouding", + "paragraphs": [ + "De beeldverhouding van de afmetingen van de afbeelding die wordt gegenereerd.", + "Een afbeeldingsgrootte (in aantal pixels) equivalent aan 512x512 wordt aanbevolen voor SD1.5-modellen. Een grootte-equivalent van 1024x1024 wordt aanbevolen voor SDXL-modellen." + ] + }, + "compositingCoherenceSteps": { + "heading": "Stappen", + "paragraphs": [ + "Het aantal te gebruiken ontruisingsstappen in de coherentiefase.", + "Gelijk aan de hoofdparameter Stappen." + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "Dynamische prompts vormt een enkele prompt om in vele.", + "De basissyntax is \"a {red|green|blue} ball\". Dit zal de volgende drie prompts geven: \"a red ball\", \"a green ball\" en \"a blue ball\".", + "Gebruik de syntax zo vaak als je wilt in een enkele prompt, maar zorg ervoor dat het aantal gegenereerde prompts in lijn ligt met de instelling Max. prompts." + ], + "heading": "Dynamische prompts" + }, + "paramVAE": { + "paragraphs": [ + "Het model gebruikt voor het vertalen van AI-uitvoer naar de uiteindelijke afbeelding." + ], + "heading": "VAE" + }, + "compositingBlur": { + "heading": "Vervaging", + "paragraphs": [ + "De vervagingsstraal van het masker." + ] + }, + "paramIterations": { + "paragraphs": [ + "Het aantal te genereren afbeeldingen.", + "Als dynamische prompts is ingeschakeld, dan zal elke prompt dit aantal keer gegenereerd worden." + ], + "heading": "Iteraties" + }, + "paramVAEPrecision": { + "heading": "Nauwkeurigheid VAE", + "paragraphs": [ + "De nauwkeurigheid gebruikt tijdens de VAE-codering en -decodering. FP16/halve nauwkeurig is efficiënter, ten koste van kleine afbeeldingsvariaties." + ] + }, + "compositingCoherenceMode": { + "heading": "Modus", + "paragraphs": [ + "De modus van de coherentiefase." + ] + }, + "paramSeed": { + "paragraphs": [ + "Bepaalt de startruis die gebruikt wordt bij het genereren.", + "Schakel \"Willekeurige seedwaarde\" uit om identieke resultaten te krijgen met dezelfde genereer-instellingen." + ], + "heading": "Seedwaarde" + }, + "controlNetResizeMode": { + "heading": "Schaalmodus", + "paragraphs": [ + "Hoe de ControlNet-afbeelding zal worden geschaald aan de uitvoergrootte van de afbeelding." + ] + }, + "controlNetBeginEnd": { + "paragraphs": [ + "Op welke stappen van het ontruisingsproces ControlNet worden toegepast.", + "ControlNets die worden toegepast aan het begin begeleiden het compositieproces. ControlNets die worden toegepast aan het eind zorgen voor details." + ], + "heading": "Percentage begin- / eindstap" + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "Bepaalt hoe de seedwaarde wordt gebruikt bij het genereren van prompts.", + "Per iteratie zal een unieke seedwaarde worden gebruikt voor elke iteratie. Gebruik dit om de promptvariaties binnen een enkele seedwaarde te verkennen.", + "Bijvoorbeeld: als je vijf prompts heb, dan zal voor elke afbeelding dezelfde seedwaarde gebruikt worden.", + "De optie Per afbeelding zal een unieke seedwaarde voor elke afbeelding gebruiken. Dit biedt meer variatie." + ], + "heading": "Gedrag seedwaarde" + }, + "clipSkip": { + "paragraphs": [ + "Kies hoeveel CLIP-modellagen je wilt overslaan.", + "Bepaalde modellen werken beter met bepaalde Overslaan CLIP-instellingen.", + "Een hogere waarde geeft meestal een minder gedetailleerde afbeelding." + ], + "heading": "Overslaan CLIP" + }, + "paramModel": { + "heading": "Model", + "paragraphs": [ + "Model gebruikt voor de ontruisingsstappen.", + "Verschillende modellen zijn meestal getraind om zich te specialiseren in het maken van bepaalde esthetische resultaten en materiaal." + ] + }, + "compositingCoherencePass": { + "heading": "Coherentiefase", + "paragraphs": [ + "Een tweede ronde ontruising helpt bij het samenstellen van de erin- of eruitgetekende afbeelding." + ] + }, + "paramDenoisingStrength": { + "paragraphs": [ + "Hoeveel ruis wordt toegevoegd aan de invoerafbeelding.", + "0 levert een identieke afbeelding op, waarbij 1 een volledig nieuwe afbeelding oplevert." + ], + "heading": "Ontruisingssterkte" + }, + "compositingStrength": { + "heading": "Sterkte", + "paragraphs": [ + "Ontruisingssterkte voor de coherentiefase.", + "Gelijk aan de parameter Ontruisingssterkte Afbeelding naar afbeelding." + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "Het genereerproces voorkomt de gegeven begrippen in de negatieve prompt. Gebruik dit om bepaalde zaken of voorwerpen uit te sluiten van de uitvoerafbeelding.", + "Ondersteunt Compel-syntax en -embeddingen." + ], + "heading": "Negatieve prompt" + }, + "compositingBlurMethod": { + "heading": "Vervagingsmethode", + "paragraphs": [ + "De methode van de vervaging die wordt toegepast op het gemaskeerd gebied." + ] + }, + "dynamicPromptsMaxPrompts": { + "heading": "Max. prompts", + "paragraphs": [ + "Beperkt het aantal prompts die kunnen worden gegenereerd door dynamische prompts." + ] + }, + "infillMethod": { + "paragraphs": [ + "Methode om een gekozen gebied in te vullen." + ], + "heading": "Invulmethode" + }, + "controlNetWeight": { + "heading": "Gewicht", + "paragraphs": [ + "Hoe sterk ControlNet effect heeft op de gegeneerde afbeelding." + ] + }, + "controlNet": { + "heading": "ControlNet", + "paragraphs": [ + "ControlNets begeleidt het genereerproces, waarbij geholpen wordt bij het maken van afbeeldingen met aangestuurde compositie, structuur of stijl, afhankelijk van het gekozen model." + ] + }, + "paramCFGScale": { + "heading": "CFG-schaal", + "paragraphs": [ + "Bepaalt hoeveel je prompt invloed heeft op het genereerproces." + ] + }, + "controlNetControlMode": { + "paragraphs": [ + "Geeft meer gewicht aan ofwel de prompt danwel ControlNet." + ], + "heading": "Controlemodus" + }, + "paramSteps": { + "heading": "Stappen", + "paragraphs": [ + "Het aantal uit te voeren stappen tijdens elke generatie.", + "Een hoger aantal stappen geven meestal betere afbeeldingen, ten koste van een hogere benodigde tijd om te genereren." + ] + }, + "paramPositiveConditioning": { + "heading": "Positieve prompt", + "paragraphs": [ + "Begeleidt het generartieproces. Gebruik een woord of frase naar keuze.", + "Syntaxes en embeddings voor Compel en dynamische prompts." + ] + }, + "lora": { + "heading": "Gewicht LoRA", + "paragraphs": [ + "Een hogere LoRA-gewicht zal leiden tot een groter effect op de uiteindelijke afbeelding." + ] + } + }, + "metadata": { + "seamless": "Naadloos", + "positivePrompt": "Positieve prompt", + "negativePrompt": "Negatieve prompt", + "generationMode": "Genereermodus", + "Threshold": "Drempelwaarde ruis", + "metadata": "Metagegevens", + "strength": "Sterkte Afbeelding naar afbeelding", + "seed": "Seedwaarde", + "imageDetails": "Afbeeldingsdetails", + "perlin": "Perlin-ruis", + "model": "Model", + "noImageDetails": "Geen afbeeldingsdetails gevonden", + "hiresFix": "Optimalisatie voor hoge resolutie", + "cfgScale": "CFG-schaal", + "fit": "Schaal aanpassen in Afbeelding naar afbeelding", + "initImage": "Initiële afbeelding", + "recallParameters": "Opnieuw aan te roepen parameters", + "height": "Hoogte", + "variations": "Paren seedwaarde-gewicht", + "noMetaData": "Geen metagegevens gevonden", + "width": "Breedte", + "createdBy": "Gemaakt door", + "workflow": "Werkstroom", + "steps": "Stappen", + "scheduler": "Planner", + "noRecallParameters": "Geen opnieuw uit te voeren parameters gevonden" + }, + "queue": { + "status": "Status", + "pruneSucceeded": "{{item_count}} voltooide onderdelen uit wachtrij opgeruimd", + "cancelTooltip": "Annuleer huidig onderdeel", + "queueEmpty": "Wachtrij leeg", + "pauseSucceeded": "Verwerker onderbroken", + "in_progress": "Bezig", + "queueFront": "Voeg vooraan toe in wachtrij", + "notReady": "Fout bij plaatsen in wachtrij", + "batchFailedToQueue": "Fout bij reeks in wachtrij plaatsen", + "completed": "Voltooid", + "queueBack": "Voeg toe aan wachtrij", + "batchValues": "Reekswaarden", + "cancelFailed": "Fout bij annuleren onderdeel", + "queueCountPrediction": "Voeg {{predicted}} toe aan wachtrij", + "batchQueued": "Reeks in wachtrij geplaatst", + "pauseFailed": "Fout bij onderbreken verwerker", + "clearFailed": "Fout bij wissen van wachtrij", + "queuedCount": "{{pending}} wachtend", + "front": "begin", + "clearSucceeded": "Wachtrij gewist", + "pause": "Onderbreek", + "pruneTooltip": "Ruim {{item_count}} voltooide onderdelen op", + "cancelSucceeded": "Onderdeel geannuleerd", + "batchQueuedDesc_one": "Voeg {{count}} sessie toe aan het {{direction}} van de wachtrij", + "batchQueuedDesc_other": "Voeg {{count}} sessies toe aan het {{direction}} van de wachtrij", + "graphQueued": "Graaf in wachtrij geplaatst", + "queue": "Wachtrij", + "batch": "Reeks", + "clearQueueAlertDialog": "Als je de wachtrij onmiddellijk wist, dan worden alle onderdelen die bezig zijn geannuleerd en wordt de wachtrij volledig gewist.", + "pending": "Wachtend", + "completedIn": "Voltooid na", + "resumeFailed": "Fout bij hervatten verwerker", + "clear": "Wis", + "prune": "Ruim op", + "total": "Totaal", + "canceled": "Geannuleerd", + "pruneFailed": "Fout bij opruimen van wachtrij", + "cancelBatchSucceeded": "Reeks geannuleerd", + "clearTooltip": "Annuleer en wis alle onderdelen", + "current": "Huidig", + "pauseTooltip": "Onderbreek verwerker", + "failed": "Mislukt", + "cancelItem": "Annuleer onderdeel", + "next": "Volgende", + "cancelBatch": "Annuleer reeks", + "back": "eind", + "cancel": "Annuleer", + "session": "Sessie", + "queueTotal": "Totaal {{total}}", + "resumeSucceeded": "Verwerker hervat", + "enqueueing": "Bezig met toevoegen van reeks aan wachtrij", + "resumeTooltip": "Hervat verwerker", + "queueMaxExceeded": "Max. aantal van {{max_queue_size}} overschreden, {{skip}} worden overgeslagen", + "resume": "Hervat", + "cancelBatchFailed": "Fout bij annuleren van reeks", + "clearQueueAlertDialog2": "Weet je zeker dat je de wachtrij wilt wissen?", + "item": "Onderdeel", + "graphFailedToQueue": "Fout bij toevoegen graaf aan wachtrij" + }, + "sdxl": { + "refinerStart": "Startwaarde verfijning", + "selectAModel": "Kies een model", + "scheduler": "Planner", + "cfgScale": "CFG-schaal", + "negStylePrompt": "Negatieve-stijlprompt", + "noModelsAvailable": "Geen modellen beschikbaar", + "refiner": "Verfijning", + "negAestheticScore": "Negatieve esthetische score", + "useRefiner": "Gebruik verfijning", + "denoisingStrength": "Sterkte ontruising", + "refinermodel": "Verfijningsmodel", + "posAestheticScore": "Positieve esthetische score", + "concatPromptStyle": "Plak prompt- en stijltekst aan elkaar", + "loading": "Bezig met laden...", + "steps": "Stappen", + "posStylePrompt": "Positieve-stijlprompt" + }, + "models": { + "noMatchingModels": "Geen overeenkomend modellen", + "loading": "bezig met laden", + "noMatchingLoRAs": "Geen overeenkomende LoRA's", + "noLoRAsAvailable": "Geen LoRA's beschikbaar", + "noModelsAvailable": "Geen modellen beschikbaar", + "selectModel": "Kies een model", + "selectLoRA": "Kies een LoRA" + }, + "boards": { + "autoAddBoard": "Voeg automatisch bord toe", + "topMessage": "Dit bord bevat afbeeldingen die in gebruik zijn door de volgende functies:", + "move": "Verplaats", + "menuItemAutoAdd": "Voeg dit automatisch toe aan bord", + "myBoard": "Mijn bord", + "searchBoard": "Zoek borden...", + "noMatching": "Geen overeenkomende borden", + "selectBoard": "Kies een bord", + "cancel": "Annuleer", + "addBoard": "Voeg bord toe", + "bottomMessage": "Als je dit bord en alle afbeeldingen erop verwijdert, dan worden alle functies teruggezet die ervan gebruik maken.", + "uncategorized": "Zonder categorie", + "downloadBoard": "Download bord", + "changeBoard": "Wijzig bord", + "loading": "Bezig met laden...", + "clearSearch": "Maak zoekopdracht leeg" + }, + "invocationCache": { + "disable": "Schakel uit", + "misses": "Mislukt cacheverzoek", + "enableFailed": "Fout bij inschakelen aanroepcache", + "invocationCache": "Aanroepcache", + "clearSucceeded": "Aanroepcache gewist", + "enableSucceeded": "Aanroepcache ingeschakeld", + "clearFailed": "Fout bij wissen aanroepcache", + "hits": "Gelukt cacheverzoek", + "disableSucceeded": "Aanroepcache uitgeschakeld", + "disableFailed": "Fout bij uitschakelen aanroepcache", + "enable": "Schakel in", + "clear": "Wis", + "maxCacheSize": "Max. grootte cache", + "cacheSize": "Grootte cache" + }, + "embedding": { + "noMatchingEmbedding": "Geen overeenkomende embeddings", + "addEmbedding": "Voeg embedding toe", + "incompatibleModel": "Niet-compatibel basismodel:" + } +} diff --git a/invokeai/frontend/web/dist/locales/pl.json b/invokeai/frontend/web/dist/locales/pl.json new file mode 100644 index 0000000000..f77c0c4710 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/pl.json @@ -0,0 +1,461 @@ +{ + "common": { + "hotkeysLabel": "Skróty klawiszowe", + "languagePickerLabel": "Wybór języka", + "reportBugLabel": "Zgłoś błąd", + "settingsLabel": "Ustawienia", + "img2img": "Obraz na obraz", + "unifiedCanvas": "Tryb uniwersalny", + "nodes": "Węzły", + "langPolish": "Polski", + "nodesDesc": "W tym miejscu powstanie graficzny system generowania obrazów oparty na węzłach. Jest na co czekać!", + "postProcessing": "Przetwarzanie końcowe", + "postProcessDesc1": "Invoke AI oferuje wiele opcji przetwarzania końcowego. Z poziomu przeglądarki dostępne jest już zwiększanie rozdzielczości oraz poprawianie twarzy. Znajdziesz je wśród ustawień w trybach \"Tekst na obraz\" oraz \"Obraz na obraz\". Są również obecne w pasku menu wyświetlanym nad podglądem wygenerowanego obrazu.", + "postProcessDesc2": "Niedługo zostanie udostępniony specjalny interfejs, który będzie oferował jeszcze więcej możliwości.", + "postProcessDesc3": "Z poziomu linii poleceń już teraz dostępne są inne opcje, takie jak skalowanie obrazu metodą Embiggen.", + "training": "Trenowanie", + "trainingDesc1": "W tym miejscu dostępny będzie system przeznaczony do tworzenia własnych zanurzeń (ang. embeddings) i punktów kontrolnych przy użyciu metod w rodzaju inwersji tekstowej lub Dreambooth.", + "trainingDesc2": "Obecnie jest możliwe tworzenie własnych zanurzeń przy użyciu skryptów wywoływanych z linii poleceń.", + "upload": "Prześlij", + "close": "Zamknij", + "load": "Załaduj", + "statusConnected": "Połączono z serwerem", + "statusDisconnected": "Odłączono od serwera", + "statusError": "Błąd", + "statusPreparing": "Przygotowywanie", + "statusProcessingCanceled": "Anulowano przetwarzanie", + "statusProcessingComplete": "Zakończono przetwarzanie", + "statusGenerating": "Przetwarzanie", + "statusGeneratingTextToImage": "Przetwarzanie tekstu na obraz", + "statusGeneratingImageToImage": "Przetwarzanie obrazu na obraz", + "statusGeneratingInpainting": "Przemalowywanie", + "statusGeneratingOutpainting": "Domalowywanie", + "statusGenerationComplete": "Zakończono generowanie", + "statusIterationComplete": "Zakończono iterację", + "statusSavingImage": "Zapisywanie obrazu", + "statusRestoringFaces": "Poprawianie twarzy", + "statusRestoringFacesGFPGAN": "Poprawianie twarzy (GFPGAN)", + "statusRestoringFacesCodeFormer": "Poprawianie twarzy (CodeFormer)", + "statusUpscaling": "Powiększanie obrazu", + "statusUpscalingESRGAN": "Powiększanie (ESRGAN)", + "statusLoadingModel": "Wczytywanie modelu", + "statusModelChanged": "Zmieniono model", + "githubLabel": "GitHub", + "discordLabel": "Discord", + "darkMode": "Tryb ciemny", + "lightMode": "Tryb jasny" + }, + "gallery": { + "generations": "Wygenerowane", + "showGenerations": "Pokaż wygenerowane obrazy", + "uploads": "Przesłane", + "showUploads": "Pokaż przesłane obrazy", + "galleryImageSize": "Rozmiar obrazów", + "galleryImageResetSize": "Resetuj rozmiar", + "gallerySettings": "Ustawienia galerii", + "maintainAspectRatio": "Zachowaj proporcje", + "autoSwitchNewImages": "Przełączaj na nowe obrazy", + "singleColumnLayout": "Układ jednokolumnowy", + "allImagesLoaded": "Koniec listy", + "loadMore": "Wczytaj więcej", + "noImagesInGallery": "Brak obrazów w galerii" + }, + "hotkeys": { + "keyboardShortcuts": "Skróty klawiszowe", + "appHotkeys": "Podstawowe", + "generalHotkeys": "Pomocnicze", + "galleryHotkeys": "Galeria", + "unifiedCanvasHotkeys": "Tryb uniwersalny", + "invoke": { + "title": "Wywołaj", + "desc": "Generuje nowy obraz" + }, + "cancel": { + "title": "Anuluj", + "desc": "Zatrzymuje generowanie obrazu" + }, + "focusPrompt": { + "title": "Aktywuj pole tekstowe", + "desc": "Aktywuje pole wprowadzania sugestii" + }, + "toggleOptions": { + "title": "Przełącz panel opcji", + "desc": "Wysuwa lub chowa panel opcji" + }, + "pinOptions": { + "title": "Przypnij opcje", + "desc": "Przypina panel opcji" + }, + "toggleViewer": { + "title": "Przełącz podgląd", + "desc": "Otwiera lub zamyka widok podglądu" + }, + "toggleGallery": { + "title": "Przełącz galerię", + "desc": "Wysuwa lub chowa galerię" + }, + "maximizeWorkSpace": { + "title": "Powiększ obraz roboczy", + "desc": "Chowa wszystkie panele, zostawia tylko podgląd obrazu" + }, + "changeTabs": { + "title": "Przełącznie trybu", + "desc": "Przełącza na n-ty tryb pracy" + }, + "consoleToggle": { + "title": "Przełącz konsolę", + "desc": "Otwiera lub chowa widok konsoli" + }, + "setPrompt": { + "title": "Skopiuj sugestie", + "desc": "Kopiuje sugestie z aktywnego obrazu" + }, + "setSeed": { + "title": "Skopiuj inicjator", + "desc": "Kopiuje inicjator z aktywnego obrazu" + }, + "setParameters": { + "title": "Skopiuj wszystko", + "desc": "Kopiuje wszystkie parametry z aktualnie aktywnego obrazu" + }, + "restoreFaces": { + "title": "Popraw twarze", + "desc": "Uruchamia proces poprawiania twarzy dla aktywnego obrazu" + }, + "upscale": { + "title": "Powiększ", + "desc": "Uruchamia proces powiększania aktywnego obrazu" + }, + "showInfo": { + "title": "Pokaż informacje", + "desc": "Pokazuje metadane zapisane w aktywnym obrazie" + }, + "sendToImageToImage": { + "title": "Użyj w trybie \"Obraz na obraz\"", + "desc": "Ustawia aktywny obraz jako źródło w trybie \"Obraz na obraz\"" + }, + "deleteImage": { + "title": "Usuń obraz", + "desc": "Usuwa aktywny obraz" + }, + "closePanels": { + "title": "Zamknij panele", + "desc": "Zamyka wszystkie otwarte panele" + }, + "previousImage": { + "title": "Poprzedni obraz", + "desc": "Aktywuje poprzedni obraz z galerii" + }, + "nextImage": { + "title": "Następny obraz", + "desc": "Aktywuje następny obraz z galerii" + }, + "toggleGalleryPin": { + "title": "Przypnij galerię", + "desc": "Przypina lub odpina widok galerii" + }, + "increaseGalleryThumbSize": { + "title": "Powiększ obrazy", + "desc": "Powiększa rozmiar obrazów w galerii" + }, + "decreaseGalleryThumbSize": { + "title": "Pomniejsz obrazy", + "desc": "Pomniejsza rozmiar obrazów w galerii" + }, + "selectBrush": { + "title": "Aktywuj pędzel", + "desc": "Aktywuje narzędzie malowania" + }, + "selectEraser": { + "title": "Aktywuj gumkę", + "desc": "Aktywuje narzędzie usuwania" + }, + "decreaseBrushSize": { + "title": "Zmniejsz rozmiar narzędzia", + "desc": "Zmniejsza rozmiar aktywnego narzędzia" + }, + "increaseBrushSize": { + "title": "Zwiększ rozmiar narzędzia", + "desc": "Zwiększa rozmiar aktywnego narzędzia" + }, + "decreaseBrushOpacity": { + "title": "Zmniejsz krycie", + "desc": "Zmniejsza poziom krycia pędzla" + }, + "increaseBrushOpacity": { + "title": "Zwiększ", + "desc": "Zwiększa poziom krycia pędzla" + }, + "moveTool": { + "title": "Aktywuj przesunięcie", + "desc": "Włącza narzędzie przesuwania" + }, + "fillBoundingBox": { + "title": "Wypełnij zaznaczenie", + "desc": "Wypełnia zaznaczony obszar aktualnym kolorem pędzla" + }, + "eraseBoundingBox": { + "title": "Wyczyść zaznaczenia", + "desc": "Usuwa całą zawartość zaznaczonego obszaru" + }, + "colorPicker": { + "title": "Aktywuj pipetę", + "desc": "Włącza narzędzie kopiowania koloru" + }, + "toggleSnap": { + "title": "Przyciąganie do siatki", + "desc": "Włącza lub wyłącza opcje przyciągania do siatki" + }, + "quickToggleMove": { + "title": "Szybkie przesunięcie", + "desc": "Tymczasowo włącza tryb przesuwania obszaru roboczego" + }, + "toggleLayer": { + "title": "Przełącz wartwę", + "desc": "Przełącza pomiędzy warstwą bazową i maskowania" + }, + "clearMask": { + "title": "Wyczyść maskę", + "desc": "Usuwa całą zawartość warstwy maskowania" + }, + "hideMask": { + "title": "Przełącz maskę", + "desc": "Pokazuje lub ukrywa podgląd maski" + }, + "showHideBoundingBox": { + "title": "Przełącz zaznaczenie", + "desc": "Pokazuje lub ukrywa podgląd zaznaczenia" + }, + "mergeVisible": { + "title": "Połącz widoczne", + "desc": "Łączy wszystkie widoczne maski w jeden obraz" + }, + "saveToGallery": { + "title": "Zapisz w galerii", + "desc": "Zapisuje całą zawartość płótna w galerii" + }, + "copyToClipboard": { + "title": "Skopiuj do schowka", + "desc": "Zapisuje zawartość płótna w schowku systemowym" + }, + "downloadImage": { + "title": "Pobierz obraz", + "desc": "Zapisuje zawartość płótna do pliku obrazu" + }, + "undoStroke": { + "title": "Cofnij", + "desc": "Cofa ostatnie pociągnięcie pędzlem" + }, + "redoStroke": { + "title": "Ponawia", + "desc": "Ponawia cofnięte pociągnięcie pędzlem" + }, + "resetView": { + "title": "Resetuj widok", + "desc": "Centruje widok płótna" + }, + "previousStagingImage": { + "title": "Poprzedni obraz tymczasowy", + "desc": "Pokazuje poprzedni obraz tymczasowy" + }, + "nextStagingImage": { + "title": "Następny obraz tymczasowy", + "desc": "Pokazuje następny obraz tymczasowy" + }, + "acceptStagingImage": { + "title": "Akceptuj obraz tymczasowy", + "desc": "Akceptuje aktualnie wybrany obraz tymczasowy" + } + }, + "parameters": { + "images": "L. obrazów", + "steps": "L. kroków", + "cfgScale": "Skala CFG", + "width": "Szerokość", + "height": "Wysokość", + "seed": "Inicjator", + "randomizeSeed": "Losowy inicjator", + "shuffle": "Losuj", + "noiseThreshold": "Poziom szumu", + "perlinNoise": "Szum Perlina", + "variations": "Wariacje", + "variationAmount": "Poziom zróżnicowania", + "seedWeights": "Wariacje inicjatora", + "faceRestoration": "Poprawianie twarzy", + "restoreFaces": "Popraw twarze", + "type": "Metoda", + "strength": "Siła", + "upscaling": "Powiększanie", + "upscale": "Powiększ", + "upscaleImage": "Powiększ obraz", + "scale": "Skala", + "otherOptions": "Pozostałe opcje", + "seamlessTiling": "Płynne scalanie", + "hiresOptim": "Optymalizacja wys. rozdzielczości", + "imageFit": "Przeskaluj oryginalny obraz", + "codeformerFidelity": "Dokładność", + "scaleBeforeProcessing": "Tryb skalowania", + "scaledWidth": "Sk. do szer.", + "scaledHeight": "Sk. do wys.", + "infillMethod": "Metoda wypełniania", + "tileSize": "Rozmiar kafelka", + "boundingBoxHeader": "Zaznaczony obszar", + "seamCorrectionHeader": "Scalanie", + "infillScalingHeader": "Wypełnienie i skalowanie", + "img2imgStrength": "Wpływ sugestii na obraz", + "toggleLoopback": "Wł/wył sprzężenie zwrotne", + "sendTo": "Wyślij do", + "sendToImg2Img": "Użyj w trybie \"Obraz na obraz\"", + "sendToUnifiedCanvas": "Użyj w trybie uniwersalnym", + "copyImageToLink": "Skopiuj adres obrazu", + "downloadImage": "Pobierz obraz", + "openInViewer": "Otwórz podgląd", + "closeViewer": "Zamknij podgląd", + "usePrompt": "Skopiuj sugestie", + "useSeed": "Skopiuj inicjator", + "useAll": "Skopiuj wszystko", + "useInitImg": "Użyj oryginalnego obrazu", + "info": "Informacje", + "initialImage": "Oryginalny obraz", + "showOptionsPanel": "Pokaż panel ustawień" + }, + "settings": { + "models": "Modele", + "displayInProgress": "Podgląd generowanego obrazu", + "saveSteps": "Zapisuj obrazy co X kroków", + "confirmOnDelete": "Potwierdzaj usuwanie", + "displayHelpIcons": "Wyświetlaj ikony pomocy", + "enableImageDebugging": "Włącz debugowanie obrazu", + "resetWebUI": "Zresetuj interfejs", + "resetWebUIDesc1": "Resetowanie interfejsu wyczyści jedynie dane i ustawienia zapisane w pamięci przeglądarki. Nie usunie żadnych obrazów z dysku.", + "resetWebUIDesc2": "Jeśli obrazy nie są poprawnie wyświetlane w galerii lub doświadczasz innych problemów, przed zgłoszeniem błędu spróbuj zresetować interfejs.", + "resetComplete": "Interfejs został zresetowany. Odśwież stronę, aby załadować ponownie." + }, + "toast": { + "tempFoldersEmptied": "Wyczyszczono folder tymczasowy", + "uploadFailed": "Błąd przesyłania obrazu", + "uploadFailedUnableToLoadDesc": "Błąd wczytywania obrazu", + "downloadImageStarted": "Rozpoczęto pobieranie", + "imageCopied": "Skopiowano obraz", + "imageLinkCopied": "Skopiowano link do obrazu", + "imageNotLoaded": "Nie wczytano obrazu", + "imageNotLoadedDesc": "Nie znaleziono obrazu, który można użyć w Obraz na obraz", + "imageSavedToGallery": "Zapisano obraz w galerii", + "canvasMerged": "Scalono widoczne warstwy", + "sentToImageToImage": "Wysłano do Obraz na obraz", + "sentToUnifiedCanvas": "Wysłano do trybu uniwersalnego", + "parametersSet": "Ustawiono parametry", + "parametersNotSet": "Nie ustawiono parametrów", + "parametersNotSetDesc": "Nie znaleziono metadanych dla wybranego obrazu", + "parametersFailed": "Problem z wczytaniem parametrów", + "parametersFailedDesc": "Problem z wczytaniem oryginalnego obrazu", + "seedSet": "Ustawiono inicjator", + "seedNotSet": "Nie ustawiono inicjatora", + "seedNotSetDesc": "Nie znaleziono inicjatora dla wybranego obrazu", + "promptSet": "Ustawiono sugestie", + "promptNotSet": "Nie ustawiono sugestii", + "promptNotSetDesc": "Nie znaleziono zapytania dla wybranego obrazu", + "upscalingFailed": "Błąd powiększania obrazu", + "faceRestoreFailed": "Błąd poprawiania twarzy", + "metadataLoadFailed": "Błąd wczytywania metadanych", + "initialImageSet": "Ustawiono oryginalny obraz", + "initialImageNotSet": "Nie ustawiono oryginalnego obrazu", + "initialImageNotSetDesc": "Błąd wczytywania oryginalnego obrazu" + }, + "tooltip": { + "feature": { + "prompt": "To pole musi zawierać cały tekst sugestii, w tym zarówno opis oczekiwanej zawartości, jak i terminy stylistyczne. Chociaż wagi mogą być zawarte w sugestiach, inne parametry znane z linii poleceń nie będą działać.", + "gallery": "W miarę generowania nowych wywołań w tym miejscu będą wyświetlane pliki z katalogu wyjściowego. Obrazy mają dodatkowo opcje konfiguracji nowych wywołań.", + "other": "Opcje umożliwią alternatywne tryby przetwarzania. Płynne scalanie będzie pomocne przy generowaniu powtarzających się wzorów. Optymalizacja wysokiej rozdzielczości wykonuje dwuetapowy cykl generowania i powinna być używana przy wyższych rozdzielczościach, gdy potrzebny jest bardziej spójny obraz/kompozycja.", + "seed": "Inicjator określa początkowy zestaw szumów, który kieruje procesem odszumiania i może być losowy lub pobrany z poprzedniego wywołania. Funkcja \"Poziom szumu\" może być użyta do złagodzenia saturacji przy wyższych wartościach CFG (spróbuj między 0-10), a Perlin może być użyty w celu dodania wariacji do twoich wyników.", + "variations": "Poziom zróżnicowania przyjmuje wartości od 0 do 1 i pozwala zmienić obraz wyjściowy dla ustawionego inicjatora. Interesujące wyniki uzyskuje się zwykle między 0,1 a 0,3.", + "upscale": "Korzystając z ESRGAN, możesz zwiększyć rozdzielczość obrazu wyjściowego bez konieczności zwiększania szerokości/wysokości w ustawieniach początkowych.", + "faceCorrection": "Poprawianie twarzy próbuje identyfikować twarze na obrazie wyjściowym i korygować wszelkie defekty/nieprawidłowości. W GFPGAN im większa siła, tym mocniejszy efekt. W metodzie Codeformer wyższa wartość oznacza bardziej wierne odtworzenie oryginalnej twarzy, nawet kosztem siły korekcji.", + "imageToImage": "Tryb \"Obraz na obraz\" pozwala na załadowanie obrazu wzorca, który obok wprowadzonych sugestii zostanie użyty porzez InvokeAI do wygenerowania nowego obrazu. Niższa wartość tego ustawienia będzie bardziej przypominać oryginalny obraz. Akceptowane są wartości od 0 do 1, a zalecany jest zakres od 0,25 do 0,75.", + "boundingBox": "Zaznaczony obszar odpowiada ustawieniom wysokości i szerokości w trybach Tekst na obraz i Obraz na obraz. Jedynie piksele znajdujące się w obszarze zaznaczenia zostaną uwzględnione podczas wywoływania nowego obrazu.", + "seamCorrection": "Opcje wpływające na poziom widoczności szwów, które mogą wystąpić, gdy wygenerowany obraz jest ponownie wklejany na płótno.", + "infillAndScaling": "Zarządzaj metodami wypełniania (używanymi na zamaskowanych lub wymazanych obszarach płótna) i skalowaniem (przydatne w przypadku zaznaczonego obszaru o b. małych rozmiarach)." + } + }, + "unifiedCanvas": { + "layer": "Warstwa", + "base": "Główna", + "mask": "Maska", + "maskingOptions": "Opcje maski", + "enableMask": "Włącz maskę", + "preserveMaskedArea": "Zachowaj obszar", + "clearMask": "Wyczyść maskę", + "brush": "Pędzel", + "eraser": "Gumka", + "fillBoundingBox": "Wypełnij zaznaczenie", + "eraseBoundingBox": "Wyczyść zaznaczenie", + "colorPicker": "Pipeta", + "brushOptions": "Ustawienia pędzla", + "brushSize": "Rozmiar", + "move": "Przesunięcie", + "resetView": "Resetuj widok", + "mergeVisible": "Scal warstwy", + "saveToGallery": "Zapisz w galerii", + "copyToClipboard": "Skopiuj do schowka", + "downloadAsImage": "Zapisz do pliku", + "undo": "Cofnij", + "redo": "Ponów", + "clearCanvas": "Wyczyść obraz", + "canvasSettings": "Ustawienia obrazu", + "showIntermediates": "Pokazuj stany pośrednie", + "showGrid": "Pokazuj siatkę", + "snapToGrid": "Przyciągaj do siatki", + "darkenOutsideSelection": "Przyciemnij poza zaznaczeniem", + "autoSaveToGallery": "Zapisuj automatycznie do galerii", + "saveBoxRegionOnly": "Zapisuj tylko zaznaczony obszar", + "limitStrokesToBox": "Rysuj tylko wewnątrz zaznaczenia", + "showCanvasDebugInfo": "Informacje dla developera", + "clearCanvasHistory": "Wyczyść historię operacji", + "clearHistory": "Wyczyść historię", + "clearCanvasHistoryMessage": "Wyczyszczenie historii nie będzie miało wpływu na sam obraz, ale niemożliwe będzie cofnięcie i otworzenie wszystkich wykonanych do tej pory operacji.", + "clearCanvasHistoryConfirm": "Czy na pewno chcesz wyczyścić historię operacji?", + "emptyTempImageFolder": "Wyczyść folder tymczasowy", + "emptyFolder": "Wyczyść", + "emptyTempImagesFolderMessage": "Wyczyszczenie folderu tymczasowego spowoduje usunięcie obrazu i maski w trybie uniwersalnym, historii operacji, oraz wszystkich wygenerowanych ale niezapisanych obrazów.", + "emptyTempImagesFolderConfirm": "Czy na pewno chcesz wyczyścić folder tymczasowy?", + "activeLayer": "Warstwa aktywna", + "canvasScale": "Poziom powiększenia", + "boundingBox": "Rozmiar zaznaczenia", + "scaledBoundingBox": "Rozmiar po skalowaniu", + "boundingBoxPosition": "Pozycja zaznaczenia", + "canvasDimensions": "Rozmiar płótna", + "canvasPosition": "Pozycja płótna", + "cursorPosition": "Pozycja kursora", + "previous": "Poprzedni", + "next": "Następny", + "accept": "Zaakceptuj", + "showHide": "Pokaż/Ukryj", + "discardAll": "Odrzuć wszystkie", + "betaClear": "Wyczyść", + "betaDarkenOutside": "Przyciemnienie", + "betaLimitToBox": "Ogranicz do zaznaczenia", + "betaPreserveMasked": "Zachowaj obszar" + }, + "accessibility": { + "zoomIn": "Przybliż", + "exitViewer": "Wyjdź z podglądu", + "modelSelect": "Wybór modelu", + "invokeProgressBar": "Pasek postępu", + "reset": "Zerowanie", + "useThisParameter": "Użyj tego parametru", + "copyMetadataJson": "Kopiuj metadane JSON", + "uploadImage": "Wgrywanie obrazu", + "previousImage": "Poprzedni obraz", + "nextImage": "Następny obraz", + "zoomOut": "Oddal", + "rotateClockwise": "Obróć zgodnie ze wskazówkami zegara", + "rotateCounterClockwise": "Obróć przeciwnie do wskazówek zegara", + "flipHorizontally": "Odwróć horyzontalnie", + "flipVertically": "Odwróć wertykalnie", + "modifyConfig": "Modyfikuj ustawienia", + "toggleAutoscroll": "Przełącz autoprzewijanie", + "toggleLogViewer": "Przełącz podgląd logów", + "showOptionsPanel": "Pokaż panel opcji", + "menu": "Menu" + } +} diff --git a/invokeai/frontend/web/dist/locales/pt.json b/invokeai/frontend/web/dist/locales/pt.json new file mode 100644 index 0000000000..ac9dd50b4d --- /dev/null +++ b/invokeai/frontend/web/dist/locales/pt.json @@ -0,0 +1,602 @@ +{ + "common": { + "langArabic": "العربية", + "reportBugLabel": "Reportar Bug", + "settingsLabel": "Configurações", + "langBrPortuguese": "Português do Brasil", + "languagePickerLabel": "Seletor de Idioma", + "langDutch": "Nederlands", + "langEnglish": "English", + "hotkeysLabel": "Hotkeys", + "langPolish": "Polski", + "langFrench": "Français", + "langGerman": "Deutsch", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langSimplifiedChinese": "简体中文", + "langSpanish": "Espanhol", + "langRussian": "Русский", + "langUkranian": "Украї́нська", + "img2img": "Imagem para Imagem", + "unifiedCanvas": "Tela Unificada", + "nodes": "Nós", + "nodesDesc": "Um sistema baseado em nós para a geração de imagens está em desenvolvimento atualmente. Fique atento para atualizações sobre este recurso incrível.", + "postProcessDesc3": "A Interface de Linha de Comando do Invoke AI oferece vários outros recursos, incluindo o Embiggen.", + "postProcessing": "Pós Processamento", + "postProcessDesc1": "O Invoke AI oferece uma ampla variedade de recursos de pós-processamento. O aumento de resolução de imagem e a restauração de rosto já estão disponíveis na interface do usuário da Web. Você pode acessá-los no menu Opções Avançadas das guias Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da exibição da imagem atual ou no visualizador.", + "postProcessDesc2": "Em breve, uma interface do usuário dedicada será lançada para facilitar fluxos de trabalho de pós-processamento mais avançados.", + "trainingDesc1": "Um fluxo de trabalho dedicado para treinar seus próprios embeddings e checkpoints usando Textual Inversion e Dreambooth da interface da web.", + "trainingDesc2": "O InvokeAI já oferece suporte ao treinamento de embeddings personalizados usando a Inversão Textual por meio do script principal.", + "upload": "Upload", + "statusError": "Erro", + "statusGeneratingTextToImage": "Gerando Texto para Imagem", + "close": "Fechar", + "load": "Abrir", + "back": "Voltar", + "statusConnected": "Conectado", + "statusDisconnected": "Desconectado", + "statusPreparing": "Preparando", + "statusGenerating": "Gerando", + "statusProcessingCanceled": "Processamento Cancelado", + "statusProcessingComplete": "Processamento Completo", + "statusGeneratingImageToImage": "Gerando Imagem para Imagem", + "statusGeneratingInpainting": "Geração de Preenchimento de Lacunas", + "statusIterationComplete": "Iteração Completa", + "statusSavingImage": "Salvando Imagem", + "statusRestoringFacesGFPGAN": "Restaurando Faces (GFPGAN)", + "statusRestoringFaces": "Restaurando Faces", + "statusRestoringFacesCodeFormer": "Restaurando Faces (CodeFormer)", + "statusUpscaling": "Ampliando", + "statusUpscalingESRGAN": "Ampliando (ESRGAN)", + "statusConvertingModel": "Convertendo Modelo", + "statusModelConverted": "Modelo Convertido", + "statusLoadingModel": "Carregando Modelo", + "statusModelChanged": "Modelo Alterado", + "githubLabel": "Github", + "discordLabel": "Discord", + "training": "Treinando", + "statusGeneratingOutpainting": "Geração de Ampliação", + "statusGenerationComplete": "Geração Completa", + "statusMergingModels": "Mesclando Modelos", + "statusMergedModels": "Modelos Mesclados", + "loading": "A carregar", + "loadingInvokeAI": "A carregar Invoke AI", + "langPortuguese": "Português" + }, + "gallery": { + "galleryImageResetSize": "Resetar Imagem", + "gallerySettings": "Configurações de Galeria", + "maintainAspectRatio": "Mater Proporções", + "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", + "singleColumnLayout": "Disposição em Coluna Única", + "allImagesLoaded": "Todas as Imagens Carregadas", + "loadMore": "Carregar Mais", + "noImagesInGallery": "Sem Imagens na Galeria", + "generations": "Gerações", + "showGenerations": "Mostrar Gerações", + "uploads": "Enviados", + "showUploads": "Mostrar Enviados", + "galleryImageSize": "Tamanho da Imagem" + }, + "hotkeys": { + "generalHotkeys": "Atalhos Gerais", + "galleryHotkeys": "Atalhos da Galeria", + "toggleViewer": { + "title": "Ativar Visualizador", + "desc": "Abrir e fechar o Visualizador de Imagens" + }, + "maximizeWorkSpace": { + "desc": "Fechar painéis e maximixar área de trabalho", + "title": "Maximizar a Área de Trabalho" + }, + "changeTabs": { + "title": "Mudar Guias", + "desc": "Trocar para outra área de trabalho" + }, + "consoleToggle": { + "desc": "Abrir e fechar console", + "title": "Ativar Console" + }, + "setPrompt": { + "title": "Definir Prompt", + "desc": "Usar o prompt da imagem atual" + }, + "sendToImageToImage": { + "desc": "Manda a imagem atual para Imagem Para Imagem", + "title": "Mandar para Imagem Para Imagem" + }, + "previousImage": { + "desc": "Mostra a imagem anterior na galeria", + "title": "Imagem Anterior" + }, + "nextImage": { + "title": "Próxima Imagem", + "desc": "Mostra a próxima imagem na galeria" + }, + "decreaseGalleryThumbSize": { + "desc": "Diminui o tamanho das thumbs na galeria", + "title": "Diminuir Tamanho da Galeria de Imagem" + }, + "selectBrush": { + "title": "Selecionar Pincel", + "desc": "Seleciona o pincel" + }, + "selectEraser": { + "title": "Selecionar Apagador", + "desc": "Seleciona o apagador" + }, + "decreaseBrushSize": { + "title": "Diminuir Tamanho do Pincel", + "desc": "Diminui o tamanho do pincel/apagador" + }, + "increaseBrushOpacity": { + "desc": "Aumenta a opacidade do pincel", + "title": "Aumentar Opacidade do Pincel" + }, + "moveTool": { + "title": "Ferramenta Mover", + "desc": "Permite navegar pela tela" + }, + "decreaseBrushOpacity": { + "desc": "Diminui a opacidade do pincel", + "title": "Diminuir Opacidade do Pincel" + }, + "toggleSnap": { + "title": "Ativar Encaixe", + "desc": "Ativa Encaixar na Grade" + }, + "quickToggleMove": { + "title": "Ativar Mover Rapidamente", + "desc": "Temporariamente ativa o modo Mover" + }, + "toggleLayer": { + "title": "Ativar Camada", + "desc": "Ativa a seleção de camada de máscara/base" + }, + "clearMask": { + "title": "Limpar Máscara", + "desc": "Limpa toda a máscara" + }, + "hideMask": { + "title": "Esconder Máscara", + "desc": "Esconde e Revela a máscara" + }, + "mergeVisible": { + "title": "Fundir Visível", + "desc": "Fundir todas as camadas visíveis das telas" + }, + "downloadImage": { + "desc": "Descarregar a tela atual", + "title": "Descarregar Imagem" + }, + "undoStroke": { + "title": "Desfazer Traço", + "desc": "Desfaz um traço de pincel" + }, + "redoStroke": { + "title": "Refazer Traço", + "desc": "Refaz o traço de pincel" + }, + "keyboardShortcuts": "Atalhos de Teclado", + "appHotkeys": "Atalhos do app", + "invoke": { + "title": "Invocar", + "desc": "Gerar uma imagem" + }, + "cancel": { + "title": "Cancelar", + "desc": "Cancelar geração de imagem" + }, + "focusPrompt": { + "title": "Foco do Prompt", + "desc": "Foco da área de texto do prompt" + }, + "toggleOptions": { + "title": "Ativar Opções", + "desc": "Abrir e fechar o painel de opções" + }, + "pinOptions": { + "title": "Fixar Opções", + "desc": "Fixar o painel de opções" + }, + "closePanels": { + "title": "Fechar Painéis", + "desc": "Fecha os painéis abertos" + }, + "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", + "toggleGallery": { + "title": "Ativar Galeria", + "desc": "Abrir e fechar a gaveta da galeria" + }, + "setSeed": { + "title": "Definir Seed", + "desc": "Usar seed da imagem atual" + }, + "setParameters": { + "title": "Definir Parâmetros", + "desc": "Usar todos os parâmetros da imagem atual" + }, + "restoreFaces": { + "title": "Restaurar Rostos", + "desc": "Restaurar a imagem atual" + }, + "upscale": { + "title": "Redimensionar", + "desc": "Redimensionar a imagem atual" + }, + "showInfo": { + "title": "Mostrar Informações", + "desc": "Mostrar metadados de informações da imagem atual" + }, + "deleteImage": { + "title": "Apagar Imagem", + "desc": "Apaga a imagem atual" + }, + "toggleGalleryPin": { + "title": "Ativar Fixar Galeria", + "desc": "Fixa e desafixa a galeria na interface" + }, + "increaseGalleryThumbSize": { + "title": "Aumentar Tamanho da Galeria de Imagem", + "desc": "Aumenta o tamanho das thumbs na galeria" + }, + "increaseBrushSize": { + "title": "Aumentar Tamanho do Pincel", + "desc": "Aumenta o tamanho do pincel/apagador" + }, + "fillBoundingBox": { + "title": "Preencher Caixa Delimitadora", + "desc": "Preenche a caixa delimitadora com a cor do pincel" + }, + "eraseBoundingBox": { + "title": "Apagar Caixa Delimitadora", + "desc": "Apaga a área da caixa delimitadora" + }, + "colorPicker": { + "title": "Selecionar Seletor de Cor", + "desc": "Seleciona o seletor de cores" + }, + "showHideBoundingBox": { + "title": "Mostrar/Esconder Caixa Delimitadora", + "desc": "Ativa a visibilidade da caixa delimitadora" + }, + "saveToGallery": { + "title": "Gravara Na Galeria", + "desc": "Grava a tela atual na galeria" + }, + "copyToClipboard": { + "title": "Copiar para a Área de Transferência", + "desc": "Copia a tela atual para a área de transferência" + }, + "resetView": { + "title": "Resetar Visualização", + "desc": "Reseta Visualização da Tela" + }, + "previousStagingImage": { + "title": "Imagem de Preparação Anterior", + "desc": "Área de Imagem de Preparação Anterior" + }, + "nextStagingImage": { + "title": "Próxima Imagem de Preparação Anterior", + "desc": "Próxima Área de Imagem de Preparação Anterior" + }, + "acceptStagingImage": { + "title": "Aceitar Imagem de Preparação Anterior", + "desc": "Aceitar Área de Imagem de Preparação Anterior" + } + }, + "modelManager": { + "modelAdded": "Modelo Adicionado", + "modelUpdated": "Modelo Atualizado", + "modelEntryDeleted": "Entrada de modelo excluída", + "description": "Descrição", + "modelLocationValidationMsg": "Caminho para onde o seu modelo está localizado.", + "repo_id": "Repo ID", + "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", + "width": "Largura", + "widthValidationMsg": "Largura padrão do seu modelo.", + "height": "Altura", + "heightValidationMsg": "Altura padrão do seu modelo.", + "findModels": "Encontrar Modelos", + "scanAgain": "Digitalize Novamente", + "deselectAll": "Deselecionar Tudo", + "showExisting": "Mostrar Existente", + "deleteConfig": "Apagar Config", + "convertToDiffusersHelpText6": "Deseja converter este modelo?", + "mergedModelName": "Nome do modelo mesclado", + "alpha": "Alpha", + "interpolationType": "Tipo de Interpolação", + "modelMergeHeaderHelp1": "Pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", + "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro.", + "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", + "nameValidationMsg": "Insira um nome para o seu modelo", + "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", + "config": "Configuração", + "modelExists": "Modelo Existe", + "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", + "noModelsFound": "Nenhum Modelo Encontrado", + "v2_768": "v2 (768px)", + "inpainting": "v1 Inpainting", + "customConfig": "Configuração personalizada", + "pathToCustomConfig": "Caminho para configuração personalizada", + "statusConverting": "A converter", + "modelConverted": "Modelo Convertido", + "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", + "addDifference": "Adicionar diferença", + "pickModelType": "Escolha o tipo de modelo", + "safetensorModels": "SafeTensors", + "cannotUseSpaces": "Não pode usar espaços", + "addNew": "Adicionar Novo", + "addManually": "Adicionar Manualmente", + "manual": "Manual", + "name": "Nome", + "configValidationMsg": "Caminho para o ficheiro de configuração do seu modelo.", + "modelLocation": "Localização do modelo", + "repoIDValidationMsg": "Repositório Online do seu Modelo", + "updateModel": "Atualizar Modelo", + "availableModels": "Modelos Disponíveis", + "load": "Carregar", + "active": "Ativado", + "notLoaded": "Não carregado", + "deleteModel": "Apagar modelo", + "deleteMsg1": "Tem certeza de que deseja apagar esta entrada do modelo de InvokeAI?", + "deleteMsg2": "Isso não vai apagar o ficheiro de modelo checkpoint do seu disco. Pode lê-los, se desejar.", + "convertToDiffusers": "Converter para Diffusers", + "convertToDiffusersHelpText1": "Este modelo será convertido ao formato 🧨 Diffusers.", + "convertToDiffusersHelpText2": "Este processo irá substituir a sua entrada de Gestor de Modelos por uma versão Diffusers do mesmo modelo.", + "convertToDiffusersHelpText3": "O seu ficheiro de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Pode adicionar o seu ponto de verificação ao Gestor de modelos novamente, se desejar.", + "convertToDiffusersSaveLocation": "Local para Gravar", + "v2_base": "v2 (512px)", + "mergeModels": "Mesclar modelos", + "modelOne": "Modelo 1", + "modelTwo": "Modelo 2", + "modelThree": "Modelo 3", + "mergedModelSaveLocation": "Local de Salvamento", + "merge": "Mesclar", + "modelsMerged": "Modelos mesclados", + "mergedModelCustomSaveLocation": "Caminho Personalizado", + "invokeAIFolder": "Pasta Invoke AI", + "inverseSigmoid": "Sigmóide Inversa", + "none": "nenhum", + "modelManager": "Gerente de Modelo", + "model": "Modelo", + "allModels": "Todos os Modelos", + "checkpointModels": "Checkpoints", + "diffusersModels": "Diffusers", + "addNewModel": "Adicionar Novo modelo", + "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", + "addDiffuserModel": "Adicionar Diffusers", + "vaeLocation": "Localização VAE", + "vaeLocationValidationMsg": "Caminho para onde o seu VAE está localizado.", + "vaeRepoID": "VAE Repo ID", + "addModel": "Adicionar Modelo", + "search": "Procurar", + "cached": "Em cache", + "checkpointFolder": "Pasta de Checkpoint", + "clearCheckpointFolder": "Apagar Pasta de Checkpoint", + "modelsFound": "Modelos Encontrados", + "selectFolder": "Selecione a Pasta", + "selected": "Selecionada", + "selectAll": "Selecionar Tudo", + "addSelected": "Adicione Selecionado", + "delete": "Apagar", + "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", + "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", + "formMessageDiffusersVAELocation": "Localização do VAE", + "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo ficheiro VAE dentro do local do modelo.", + "convert": "Converter", + "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, a depender das especificações do seu computador.", + "convertToDiffusersHelpText5": "Por favor, certifique-se de que tenha espaço suficiente no disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", + "v1": "v1", + "sameFolder": "Mesma pasta", + "invokeRoot": "Pasta do InvokeAI", + "custom": "Personalizado", + "customSaveLocation": "Local de salvamento personalizado", + "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam numa influência menor do segundo modelo.", + "sigmoid": "Sigmóide", + "weightedSum": "Soma Ponderada" + }, + "parameters": { + "width": "Largura", + "seed": "Seed", + "hiresStrength": "Força da Alta Resolução", + "general": "Geral", + "randomizeSeed": "Seed Aleatório", + "shuffle": "Embaralhar", + "noiseThreshold": "Limite de Ruído", + "perlinNoise": "Ruído de Perlin", + "variations": "Variatções", + "seedWeights": "Pesos da Seed", + "restoreFaces": "Restaurar Rostos", + "faceRestoration": "Restauração de Rosto", + "type": "Tipo", + "denoisingStrength": "A força de remoção de ruído", + "scale": "Escala", + "otherOptions": "Outras Opções", + "seamlessTiling": "Ladrilho Sem Fronteira", + "hiresOptim": "Otimização de Alta Res", + "imageFit": "Caber Imagem Inicial No Tamanho de Saída", + "codeformerFidelity": "Fidelidade", + "tileSize": "Tamanho do Ladrilho", + "boundingBoxHeader": "Caixa Delimitadora", + "seamCorrectionHeader": "Correção de Fronteira", + "infillScalingHeader": "Preencimento e Escala", + "img2imgStrength": "Força de Imagem Para Imagem", + "toggleLoopback": "Ativar Loopback", + "symmetry": "Simetria", + "sendTo": "Mandar para", + "openInViewer": "Abrir No Visualizador", + "closeViewer": "Fechar Visualizador", + "usePrompt": "Usar Prompt", + "initialImage": "Imagem inicial", + "showOptionsPanel": "Mostrar Painel de Opções", + "strength": "Força", + "upscaling": "Redimensionando", + "upscale": "Redimensionar", + "upscaleImage": "Redimensionar Imagem", + "scaleBeforeProcessing": "Escala Antes do Processamento", + "images": "Imagems", + "steps": "Passos", + "cfgScale": "Escala CFG", + "height": "Altura", + "imageToImage": "Imagem para Imagem", + "variationAmount": "Quntidade de Variatções", + "scaledWidth": "L Escalada", + "scaledHeight": "A Escalada", + "infillMethod": "Método de Preenchimento", + "hSymmetryStep": "H Passo de Simetria", + "vSymmetryStep": "V Passo de Simetria", + "cancel": { + "immediate": "Cancelar imediatamente", + "schedule": "Cancelar após a iteração atual", + "isScheduled": "A cancelar", + "setType": "Definir tipo de cancelamento" + }, + "sendToImg2Img": "Mandar para Imagem Para Imagem", + "sendToUnifiedCanvas": "Mandar para Tela Unificada", + "copyImage": "Copiar imagem", + "copyImageToLink": "Copiar Imagem Para a Ligação", + "downloadImage": "Descarregar Imagem", + "useSeed": "Usar Seed", + "useAll": "Usar Todos", + "useInitImg": "Usar Imagem Inicial", + "info": "Informações" + }, + "settings": { + "confirmOnDelete": "Confirmar Antes de Apagar", + "displayHelpIcons": "Mostrar Ícones de Ajuda", + "enableImageDebugging": "Ativar Depuração de Imagem", + "useSlidersForAll": "Usar deslizadores para todas as opções", + "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", + "models": "Modelos", + "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", + "saveSteps": "Gravar imagens a cada n passos", + "resetWebUI": "Reiniciar Interface", + "resetWebUIDesc2": "Se as imagens não estão a aparecer na galeria ou algo mais não está a funcionar, favor tentar reiniciar antes de postar um problema no GitHub.", + "resetComplete": "A interface foi reiniciada. Atualize a página para carregar." + }, + "toast": { + "uploadFailed": "Envio Falhou", + "uploadFailedUnableToLoadDesc": "Não foj possível carregar o ficheiro", + "downloadImageStarted": "Download de Imagem Começou", + "imageNotLoadedDesc": "Nenhuma imagem encontrada a enviar para o módulo de imagem para imagem", + "imageLinkCopied": "Ligação de Imagem Copiada", + "imageNotLoaded": "Nenhuma Imagem Carregada", + "parametersFailed": "Problema ao carregar parâmetros", + "parametersFailedDesc": "Não foi possível carregar imagem incial.", + "seedSet": "Seed Definida", + "upscalingFailed": "Redimensionamento Falhou", + "promptNotSet": "Prompt Não Definido", + "tempFoldersEmptied": "Pasta de Ficheiros Temporários Esvaziada", + "imageCopied": "Imagem Copiada", + "imageSavedToGallery": "Imagem Salva na Galeria", + "canvasMerged": "Tela Fundida", + "sentToImageToImage": "Mandar Para Imagem Para Imagem", + "sentToUnifiedCanvas": "Enviada para a Tela Unificada", + "parametersSet": "Parâmetros Definidos", + "parametersNotSet": "Parâmetros Não Definidos", + "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", + "seedNotSet": "Seed Não Definida", + "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", + "promptSet": "Prompt Definido", + "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", + "faceRestoreFailed": "Restauração de Rosto Falhou", + "metadataLoadFailed": "Falha ao tentar carregar metadados", + "initialImageSet": "Imagem Inicial Definida", + "initialImageNotSet": "Imagem Inicial Não Definida", + "initialImageNotSetDesc": "Não foi possível carregar imagem incial" + }, + "tooltip": { + "feature": { + "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", + "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", + "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10) e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", + "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", + "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, a resultar em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", + "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", + "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em ficheiros e acessadas pelo menu de contexto.", + "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3.", + "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", + "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", + "infillAndScaling": "Gira os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos)." + } + }, + "unifiedCanvas": { + "emptyTempImagesFolderMessage": "Esvaziar a pasta de ficheiros de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", + "scaledBoundingBox": "Caixa Delimitadora Escalada", + "boundingBoxPosition": "Posição da Caixa Delimitadora", + "next": "Próximo", + "accept": "Aceitar", + "showHide": "Mostrar/Esconder", + "discardAll": "Descartar Todos", + "betaClear": "Limpar", + "betaDarkenOutside": "Escurecer Externamente", + "base": "Base", + "brush": "Pincel", + "showIntermediates": "Mostrar Intermediários", + "showGrid": "Mostrar Grade", + "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", + "boundingBox": "Caixa Delimitadora", + "canvasDimensions": "Dimensões da Tela", + "canvasPosition": "Posição da Tela", + "cursorPosition": "Posição do cursor", + "previous": "Anterior", + "betaLimitToBox": "Limitar á Caixa", + "layer": "Camada", + "mask": "Máscara", + "maskingOptions": "Opções de Mascaramento", + "enableMask": "Ativar Máscara", + "preserveMaskedArea": "Preservar Área da Máscara", + "clearMask": "Limpar Máscara", + "eraser": "Apagador", + "fillBoundingBox": "Preencher Caixa Delimitadora", + "eraseBoundingBox": "Apagar Caixa Delimitadora", + "colorPicker": "Seletor de Cor", + "brushOptions": "Opções de Pincel", + "brushSize": "Tamanho", + "move": "Mover", + "resetView": "Resetar Visualização", + "mergeVisible": "Fundir Visível", + "saveToGallery": "Gravar na Galeria", + "copyToClipboard": "Copiar para a Área de Transferência", + "downloadAsImage": "Descarregar Como Imagem", + "undo": "Desfazer", + "redo": "Refazer", + "clearCanvas": "Limpar Tela", + "canvasSettings": "Configurações de Tela", + "snapToGrid": "Encaixar na Grade", + "darkenOutsideSelection": "Escurecer Seleção Externa", + "autoSaveToGallery": "Gravar Automaticamente na Galeria", + "saveBoxRegionOnly": "Gravar Apenas a Região da Caixa", + "limitStrokesToBox": "Limitar Traços à Caixa", + "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", + "clearCanvasHistory": "Limpar o Histórico da Tela", + "clearHistory": "Limpar Históprico", + "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa a sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", + "emptyTempImageFolder": "Esvaziar a Pasta de Ficheiros de Imagem Temporários", + "emptyFolder": "Esvaziar Pasta", + "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de ficheiros de imagem temporários?", + "activeLayer": "Camada Ativa", + "canvasScale": "Escala da Tela", + "betaPreserveMasked": "Preservar Máscarado" + }, + "accessibility": { + "invokeProgressBar": "Invocar barra de progresso", + "reset": "Repôr", + "nextImage": "Próxima imagem", + "useThisParameter": "Usar este parâmetro", + "copyMetadataJson": "Copiar metadados JSON", + "zoomIn": "Ampliar", + "zoomOut": "Reduzir", + "rotateCounterClockwise": "Girar no sentido anti-horário", + "rotateClockwise": "Girar no sentido horário", + "flipVertically": "Espelhar verticalmente", + "modifyConfig": "Modificar config", + "toggleAutoscroll": "Alternar rolagem automática", + "showOptionsPanel": "Mostrar painel de opções", + "uploadImage": "Enviar imagem", + "previousImage": "Imagem anterior", + "flipHorizontally": "Espelhar horizontalmente", + "toggleLogViewer": "Alternar visualizador de registo" + } +} diff --git a/invokeai/frontend/web/dist/locales/pt_BR.json b/invokeai/frontend/web/dist/locales/pt_BR.json new file mode 100644 index 0000000000..3b45dbbbf3 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/pt_BR.json @@ -0,0 +1,577 @@ +{ + "common": { + "hotkeysLabel": "Teclas de atalho", + "languagePickerLabel": "Seletor de Idioma", + "reportBugLabel": "Relatar Bug", + "settingsLabel": "Configurações", + "img2img": "Imagem Para Imagem", + "unifiedCanvas": "Tela Unificada", + "nodes": "Nódulos", + "langBrPortuguese": "Português do Brasil", + "nodesDesc": "Um sistema baseado em nódulos para geração de imagens está em contrução. Fique ligado para atualizações sobre essa funcionalidade incrível.", + "postProcessing": "Pós-processamento", + "postProcessDesc1": "Invoke AI oferece uma variedade e funcionalidades de pós-processamento. Redimensionador de Imagem e Restauração Facial já estão disponíveis na interface. Você pode acessar elas no menu de Opções Avançadas na aba de Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da atual tela de imagens ou visualizador.", + "postProcessDesc2": "Uma interface dedicada será lançada em breve para facilitar fluxos de trabalho com opções mais avançadas de pós-processamento.", + "postProcessDesc3": "A interface do comando de linha da Invoke oferece várias funcionalidades incluindo Ampliação.", + "training": "Treinando", + "trainingDesc1": "Um fluxo de trabalho dedicado para treinar suas próprias incorporações e chockpoints usando Inversão Textual e Dreambooth na interface web.", + "trainingDesc2": "InvokeAI já suporta treinar incorporações personalizadas usando Inversão Textual com o script principal.", + "upload": "Enviar", + "close": "Fechar", + "load": "Carregar", + "statusConnected": "Conectado", + "statusDisconnected": "Disconectado", + "statusError": "Erro", + "statusPreparing": "Preparando", + "statusProcessingCanceled": "Processamento Canceledo", + "statusProcessingComplete": "Processamento Completo", + "statusGenerating": "Gerando", + "statusGeneratingTextToImage": "Gerando Texto Para Imagem", + "statusGeneratingImageToImage": "Gerando Imagem Para Imagem", + "statusGeneratingInpainting": "Gerando Inpainting", + "statusGeneratingOutpainting": "Gerando Outpainting", + "statusGenerationComplete": "Geração Completa", + "statusIterationComplete": "Iteração Completa", + "statusSavingImage": "Salvando Imagem", + "statusRestoringFaces": "Restaurando Rostos", + "statusRestoringFacesGFPGAN": "Restaurando Rostos (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restaurando Rostos (CodeFormer)", + "statusUpscaling": "Redimensinando", + "statusUpscalingESRGAN": "Redimensinando (ESRGAN)", + "statusLoadingModel": "Carregando Modelo", + "statusModelChanged": "Modelo Alterado", + "githubLabel": "Github", + "discordLabel": "Discord", + "langArabic": "Árabe", + "langEnglish": "Inglês", + "langDutch": "Holandês", + "langFrench": "Francês", + "langGerman": "Alemão", + "langItalian": "Italiano", + "langJapanese": "Japonês", + "langPolish": "Polonês", + "langSimplifiedChinese": "Chinês", + "langUkranian": "Ucraniano", + "back": "Voltar", + "statusConvertingModel": "Convertendo Modelo", + "statusModelConverted": "Modelo Convertido", + "statusMergingModels": "Mesclando Modelos", + "statusMergedModels": "Modelos Mesclados", + "langRussian": "Russo", + "langSpanish": "Espanhol", + "loadingInvokeAI": "Carregando Invoke AI", + "loading": "Carregando" + }, + "gallery": { + "generations": "Gerações", + "showGenerations": "Mostrar Gerações", + "uploads": "Enviados", + "showUploads": "Mostrar Enviados", + "galleryImageSize": "Tamanho da Imagem", + "galleryImageResetSize": "Resetar Imagem", + "gallerySettings": "Configurações de Galeria", + "maintainAspectRatio": "Mater Proporções", + "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", + "singleColumnLayout": "Disposição em Coluna Única", + "allImagesLoaded": "Todas as Imagens Carregadas", + "loadMore": "Carregar Mais", + "noImagesInGallery": "Sem Imagens na Galeria" + }, + "hotkeys": { + "keyboardShortcuts": "Atalhos de Teclado", + "appHotkeys": "Atalhos do app", + "generalHotkeys": "Atalhos Gerais", + "galleryHotkeys": "Atalhos da Galeria", + "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", + "invoke": { + "title": "Invoke", + "desc": "Gerar uma imagem" + }, + "cancel": { + "title": "Cancelar", + "desc": "Cancelar geração de imagem" + }, + "focusPrompt": { + "title": "Foco do Prompt", + "desc": "Foco da área de texto do prompt" + }, + "toggleOptions": { + "title": "Ativar Opções", + "desc": "Abrir e fechar o painel de opções" + }, + "pinOptions": { + "title": "Fixar Opções", + "desc": "Fixar o painel de opções" + }, + "toggleViewer": { + "title": "Ativar Visualizador", + "desc": "Abrir e fechar o Visualizador de Imagens" + }, + "toggleGallery": { + "title": "Ativar Galeria", + "desc": "Abrir e fechar a gaveta da galeria" + }, + "maximizeWorkSpace": { + "title": "Maximizar a Área de Trabalho", + "desc": "Fechar painéis e maximixar área de trabalho" + }, + "changeTabs": { + "title": "Mudar Abas", + "desc": "Trocar para outra área de trabalho" + }, + "consoleToggle": { + "title": "Ativar Console", + "desc": "Abrir e fechar console" + }, + "setPrompt": { + "title": "Definir Prompt", + "desc": "Usar o prompt da imagem atual" + }, + "setSeed": { + "title": "Definir Seed", + "desc": "Usar seed da imagem atual" + }, + "setParameters": { + "title": "Definir Parâmetros", + "desc": "Usar todos os parâmetros da imagem atual" + }, + "restoreFaces": { + "title": "Restaurar Rostos", + "desc": "Restaurar a imagem atual" + }, + "upscale": { + "title": "Redimensionar", + "desc": "Redimensionar a imagem atual" + }, + "showInfo": { + "title": "Mostrar Informações", + "desc": "Mostrar metadados de informações da imagem atual" + }, + "sendToImageToImage": { + "title": "Mandar para Imagem Para Imagem", + "desc": "Manda a imagem atual para Imagem Para Imagem" + }, + "deleteImage": { + "title": "Apagar Imagem", + "desc": "Apaga a imagem atual" + }, + "closePanels": { + "title": "Fechar Painéis", + "desc": "Fecha os painéis abertos" + }, + "previousImage": { + "title": "Imagem Anterior", + "desc": "Mostra a imagem anterior na galeria" + }, + "nextImage": { + "title": "Próxima Imagem", + "desc": "Mostra a próxima imagem na galeria" + }, + "toggleGalleryPin": { + "title": "Ativar Fixar Galeria", + "desc": "Fixa e desafixa a galeria na interface" + }, + "increaseGalleryThumbSize": { + "title": "Aumentar Tamanho da Galeria de Imagem", + "desc": "Aumenta o tamanho das thumbs na galeria" + }, + "decreaseGalleryThumbSize": { + "title": "Diminuir Tamanho da Galeria de Imagem", + "desc": "Diminui o tamanho das thumbs na galeria" + }, + "selectBrush": { + "title": "Selecionar Pincel", + "desc": "Seleciona o pincel" + }, + "selectEraser": { + "title": "Selecionar Apagador", + "desc": "Seleciona o apagador" + }, + "decreaseBrushSize": { + "title": "Diminuir Tamanho do Pincel", + "desc": "Diminui o tamanho do pincel/apagador" + }, + "increaseBrushSize": { + "title": "Aumentar Tamanho do Pincel", + "desc": "Aumenta o tamanho do pincel/apagador" + }, + "decreaseBrushOpacity": { + "title": "Diminuir Opacidade do Pincel", + "desc": "Diminui a opacidade do pincel" + }, + "increaseBrushOpacity": { + "title": "Aumentar Opacidade do Pincel", + "desc": "Aumenta a opacidade do pincel" + }, + "moveTool": { + "title": "Ferramenta Mover", + "desc": "Permite navegar pela tela" + }, + "fillBoundingBox": { + "title": "Preencher Caixa Delimitadora", + "desc": "Preenche a caixa delimitadora com a cor do pincel" + }, + "eraseBoundingBox": { + "title": "Apagar Caixa Delimitadora", + "desc": "Apaga a área da caixa delimitadora" + }, + "colorPicker": { + "title": "Selecionar Seletor de Cor", + "desc": "Seleciona o seletor de cores" + }, + "toggleSnap": { + "title": "Ativar Encaixe", + "desc": "Ativa Encaixar na Grade" + }, + "quickToggleMove": { + "title": "Ativar Mover Rapidamente", + "desc": "Temporariamente ativa o modo Mover" + }, + "toggleLayer": { + "title": "Ativar Camada", + "desc": "Ativa a seleção de camada de máscara/base" + }, + "clearMask": { + "title": "Limpar Máscara", + "desc": "Limpa toda a máscara" + }, + "hideMask": { + "title": "Esconder Máscara", + "desc": "Esconde e Revela a máscara" + }, + "showHideBoundingBox": { + "title": "Mostrar/Esconder Caixa Delimitadora", + "desc": "Ativa a visibilidade da caixa delimitadora" + }, + "mergeVisible": { + "title": "Fundir Visível", + "desc": "Fundir todas as camadas visíveis em tela" + }, + "saveToGallery": { + "title": "Salvara Na Galeria", + "desc": "Salva a tela atual na galeria" + }, + "copyToClipboard": { + "title": "Copiar para a Área de Transferência", + "desc": "Copia a tela atual para a área de transferência" + }, + "downloadImage": { + "title": "Baixar Imagem", + "desc": "Baixa a tela atual" + }, + "undoStroke": { + "title": "Desfazer Traço", + "desc": "Desfaz um traço de pincel" + }, + "redoStroke": { + "title": "Refazer Traço", + "desc": "Refaz o traço de pincel" + }, + "resetView": { + "title": "Resetar Visualização", + "desc": "Reseta Visualização da Tela" + }, + "previousStagingImage": { + "title": "Imagem de Preparação Anterior", + "desc": "Área de Imagem de Preparação Anterior" + }, + "nextStagingImage": { + "title": "Próxima Imagem de Preparação Anterior", + "desc": "Próxima Área de Imagem de Preparação Anterior" + }, + "acceptStagingImage": { + "title": "Aceitar Imagem de Preparação Anterior", + "desc": "Aceitar Área de Imagem de Preparação Anterior" + } + }, + "modelManager": { + "modelManager": "Gerente de Modelo", + "model": "Modelo", + "modelAdded": "Modelo Adicionado", + "modelUpdated": "Modelo Atualizado", + "modelEntryDeleted": "Entrada de modelo excluída", + "cannotUseSpaces": "Não pode usar espaços", + "addNew": "Adicionar Novo", + "addNewModel": "Adicionar Novo modelo", + "addManually": "Adicionar Manualmente", + "manual": "Manual", + "name": "Nome", + "nameValidationMsg": "Insira um nome para o seu modelo", + "description": "Descrição", + "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", + "config": "Configuração", + "configValidationMsg": "Caminho para o arquivo de configuração do seu modelo.", + "modelLocation": "Localização do modelo", + "modelLocationValidationMsg": "Caminho para onde seu modelo está localizado.", + "vaeLocation": "Localização VAE", + "vaeLocationValidationMsg": "Caminho para onde seu VAE está localizado.", + "width": "Largura", + "widthValidationMsg": "Largura padrão do seu modelo.", + "height": "Altura", + "heightValidationMsg": "Altura padrão do seu modelo.", + "addModel": "Adicionar Modelo", + "updateModel": "Atualizar Modelo", + "availableModels": "Modelos Disponíveis", + "search": "Procurar", + "load": "Carregar", + "active": "Ativado", + "notLoaded": "Não carregado", + "cached": "Em cache", + "checkpointFolder": "Pasta de Checkpoint", + "clearCheckpointFolder": "Apagar Pasta de Checkpoint", + "findModels": "Encontrar Modelos", + "modelsFound": "Modelos Encontrados", + "selectFolder": "Selecione a Pasta", + "selected": "Selecionada", + "selectAll": "Selecionar Tudo", + "deselectAll": "Deselecionar Tudo", + "showExisting": "Mostrar Existente", + "addSelected": "Adicione Selecionado", + "modelExists": "Modelo Existe", + "delete": "Excluir", + "deleteModel": "Excluir modelo", + "deleteConfig": "Excluir Config", + "deleteMsg1": "Tem certeza de que deseja excluir esta entrada do modelo de InvokeAI?", + "deleteMsg2": "Isso não vai excluir o arquivo de modelo checkpoint do seu disco. Você pode lê-los, se desejar.", + "checkpointModels": "Checkpoints", + "diffusersModels": "Diffusers", + "safetensorModels": "SafeTensors", + "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", + "addDiffuserModel": "Adicionar Diffusers", + "repo_id": "Repo ID", + "vaeRepoID": "VAE Repo ID", + "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", + "scanAgain": "Digitalize Novamente", + "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", + "noModelsFound": "Nenhum Modelo Encontrado", + "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", + "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", + "formMessageDiffusersVAELocation": "Localização do VAE", + "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo arquivo VAE dentro do local do modelo.", + "convertToDiffusers": "Converter para Diffusers", + "convertToDiffusersHelpText1": "Este modelo será convertido para o formato 🧨 Diffusers.", + "convertToDiffusersHelpText5": "Por favor, certifique-se de que você tenha espaço suficiente em disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", + "convertToDiffusersHelpText6": "Você deseja converter este modelo?", + "convertToDiffusersSaveLocation": "Local para Salvar", + "v1": "v1", + "inpainting": "v1 Inpainting", + "customConfig": "Configuração personalizada", + "pathToCustomConfig": "Caminho para configuração personalizada", + "convertToDiffusersHelpText3": "Seu arquivo de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Você pode adicionar seu ponto de verificação ao Gerenciador de modelos novamente, se desejar.", + "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, dependendo das especificações do seu computador.", + "merge": "Mesclar", + "modelsMerged": "Modelos mesclados", + "mergeModels": "Mesclar modelos", + "modelOne": "Modelo 1", + "modelTwo": "Modelo 2", + "modelThree": "Modelo 3", + "statusConverting": "Convertendo", + "modelConverted": "Modelo Convertido", + "sameFolder": "Mesma pasta", + "invokeRoot": "Pasta do InvokeAI", + "custom": "Personalizado", + "customSaveLocation": "Local de salvamento personalizado", + "mergedModelName": "Nome do modelo mesclado", + "alpha": "Alpha", + "allModels": "Todos os Modelos", + "repoIDValidationMsg": "Repositório Online do seu Modelo", + "convert": "Converter", + "convertToDiffusersHelpText2": "Este processo irá substituir sua entrada de Gerenciador de Modelos por uma versão Diffusers do mesmo modelo.", + "mergedModelCustomSaveLocation": "Caminho Personalizado", + "mergedModelSaveLocation": "Local de Salvamento", + "interpolationType": "Tipo de Interpolação", + "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", + "invokeAIFolder": "Pasta Invoke AI", + "weightedSum": "Soma Ponderada", + "sigmoid": "Sigmóide", + "inverseSigmoid": "Sigmóide Inversa", + "modelMergeHeaderHelp1": "Você pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", + "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", + "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam em uma influência menor do segundo modelo.", + "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se você deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro." + }, + "parameters": { + "images": "Imagems", + "steps": "Passos", + "cfgScale": "Escala CFG", + "width": "Largura", + "height": "Altura", + "seed": "Seed", + "randomizeSeed": "Seed Aleatório", + "shuffle": "Embaralhar", + "noiseThreshold": "Limite de Ruído", + "perlinNoise": "Ruído de Perlin", + "variations": "Variatções", + "variationAmount": "Quntidade de Variatções", + "seedWeights": "Pesos da Seed", + "faceRestoration": "Restauração de Rosto", + "restoreFaces": "Restaurar Rostos", + "type": "Tipo", + "strength": "Força", + "upscaling": "Redimensionando", + "upscale": "Redimensionar", + "upscaleImage": "Redimensionar Imagem", + "scale": "Escala", + "otherOptions": "Outras Opções", + "seamlessTiling": "Ladrilho Sem Fronteira", + "hiresOptim": "Otimização de Alta Res", + "imageFit": "Caber Imagem Inicial No Tamanho de Saída", + "codeformerFidelity": "Fidelidade", + "scaleBeforeProcessing": "Escala Antes do Processamento", + "scaledWidth": "L Escalada", + "scaledHeight": "A Escalada", + "infillMethod": "Método de Preenchimento", + "tileSize": "Tamanho do Ladrilho", + "boundingBoxHeader": "Caixa Delimitadora", + "seamCorrectionHeader": "Correção de Fronteira", + "infillScalingHeader": "Preencimento e Escala", + "img2imgStrength": "Força de Imagem Para Imagem", + "toggleLoopback": "Ativar Loopback", + "sendTo": "Mandar para", + "sendToImg2Img": "Mandar para Imagem Para Imagem", + "sendToUnifiedCanvas": "Mandar para Tela Unificada", + "copyImageToLink": "Copiar Imagem Para Link", + "downloadImage": "Baixar Imagem", + "openInViewer": "Abrir No Visualizador", + "closeViewer": "Fechar Visualizador", + "usePrompt": "Usar Prompt", + "useSeed": "Usar Seed", + "useAll": "Usar Todos", + "useInitImg": "Usar Imagem Inicial", + "info": "Informações", + "initialImage": "Imagem inicial", + "showOptionsPanel": "Mostrar Painel de Opções", + "vSymmetryStep": "V Passo de Simetria", + "hSymmetryStep": "H Passo de Simetria", + "symmetry": "Simetria", + "copyImage": "Copiar imagem", + "hiresStrength": "Força da Alta Resolução", + "denoisingStrength": "A força de remoção de ruído", + "imageToImage": "Imagem para Imagem", + "cancel": { + "setType": "Definir tipo de cancelamento", + "isScheduled": "Cancelando", + "schedule": "Cancelar após a iteração atual", + "immediate": "Cancelar imediatamente" + }, + "general": "Geral" + }, + "settings": { + "models": "Modelos", + "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", + "saveSteps": "Salvar imagens a cada n passos", + "confirmOnDelete": "Confirmar Antes de Apagar", + "displayHelpIcons": "Mostrar Ícones de Ajuda", + "enableImageDebugging": "Ativar Depuração de Imagem", + "resetWebUI": "Reiniciar Interface", + "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", + "resetWebUIDesc2": "Se as imagens não estão aparecendo na galeria ou algo mais não está funcionando, favor tentar reiniciar antes de postar um problema no GitHub.", + "resetComplete": "A interface foi reiniciada. Atualize a página para carregar.", + "useSlidersForAll": "Usar deslizadores para todas as opções" + }, + "toast": { + "tempFoldersEmptied": "Pasta de Arquivos Temporários Esvaziada", + "uploadFailed": "Envio Falhou", + "uploadFailedUnableToLoadDesc": "Não foj possível carregar o arquivo", + "downloadImageStarted": "Download de Imagem Começou", + "imageCopied": "Imagem Copiada", + "imageLinkCopied": "Link de Imagem Copiada", + "imageNotLoaded": "Nenhuma Imagem Carregada", + "imageNotLoadedDesc": "Nenhuma imagem encontrar para mandar para o módulo de imagem para imagem", + "imageSavedToGallery": "Imagem Salva na Galeria", + "canvasMerged": "Tela Fundida", + "sentToImageToImage": "Mandar Para Imagem Para Imagem", + "sentToUnifiedCanvas": "Enviada para a Tela Unificada", + "parametersSet": "Parâmetros Definidos", + "parametersNotSet": "Parâmetros Não Definidos", + "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", + "parametersFailed": "Problema ao carregar parâmetros", + "parametersFailedDesc": "Não foi possível carregar imagem incial.", + "seedSet": "Seed Definida", + "seedNotSet": "Seed Não Definida", + "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", + "promptSet": "Prompt Definido", + "promptNotSet": "Prompt Não Definido", + "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", + "upscalingFailed": "Redimensionamento Falhou", + "faceRestoreFailed": "Restauração de Rosto Falhou", + "metadataLoadFailed": "Falha ao tentar carregar metadados", + "initialImageSet": "Imagem Inicial Definida", + "initialImageNotSet": "Imagem Inicial Não Definida", + "initialImageNotSetDesc": "Não foi possível carregar imagem incial" + }, + "unifiedCanvas": { + "layer": "Camada", + "base": "Base", + "mask": "Máscara", + "maskingOptions": "Opções de Mascaramento", + "enableMask": "Ativar Máscara", + "preserveMaskedArea": "Preservar Área da Máscara", + "clearMask": "Limpar Máscara", + "brush": "Pincel", + "eraser": "Apagador", + "fillBoundingBox": "Preencher Caixa Delimitadora", + "eraseBoundingBox": "Apagar Caixa Delimitadora", + "colorPicker": "Seletor de Cor", + "brushOptions": "Opções de Pincel", + "brushSize": "Tamanho", + "move": "Mover", + "resetView": "Resetar Visualização", + "mergeVisible": "Fundir Visível", + "saveToGallery": "Salvar na Galeria", + "copyToClipboard": "Copiar para a Área de Transferência", + "downloadAsImage": "Baixar Como Imagem", + "undo": "Desfazer", + "redo": "Refazer", + "clearCanvas": "Limpar Tela", + "canvasSettings": "Configurações de Tela", + "showIntermediates": "Mostrar Intermediários", + "showGrid": "Mostrar Grade", + "snapToGrid": "Encaixar na Grade", + "darkenOutsideSelection": "Escurecer Seleção Externa", + "autoSaveToGallery": "Salvar Automaticamente na Galeria", + "saveBoxRegionOnly": "Salvar Apenas a Região da Caixa", + "limitStrokesToBox": "Limitar Traços para a Caixa", + "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", + "clearCanvasHistory": "Limpar o Histórico da Tela", + "clearHistory": "Limpar Históprico", + "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", + "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", + "emptyTempImageFolder": "Esvaziar a Pasta de Arquivos de Imagem Temporários", + "emptyFolder": "Esvaziar Pasta", + "emptyTempImagesFolderMessage": "Esvaziar a pasta de arquivos de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", + "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de arquivos de imagem temporários?", + "activeLayer": "Camada Ativa", + "canvasScale": "Escala da Tela", + "boundingBox": "Caixa Delimitadora", + "scaledBoundingBox": "Caixa Delimitadora Escalada", + "boundingBoxPosition": "Posição da Caixa Delimitadora", + "canvasDimensions": "Dimensões da Tela", + "canvasPosition": "Posição da Tela", + "cursorPosition": "Posição do cursor", + "previous": "Anterior", + "next": "Próximo", + "accept": "Aceitar", + "showHide": "Mostrar/Esconder", + "discardAll": "Descartar Todos", + "betaClear": "Limpar", + "betaDarkenOutside": "Escurecer Externamente", + "betaLimitToBox": "Limitar Para a Caixa", + "betaPreserveMasked": "Preservar Máscarado" + }, + "tooltip": { + "feature": { + "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Você pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10), e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", + "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em arquivos e acessadas pelo menu de contexto.", + "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", + "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", + "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", + "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", + "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, resultando em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", + "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Você também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", + "infillAndScaling": "Gerencie os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos).", + "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", + "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3." + } + } +} diff --git a/invokeai/frontend/web/dist/locales/ro.json b/invokeai/frontend/web/dist/locales/ro.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ro.json @@ -0,0 +1 @@ +{} diff --git a/invokeai/frontend/web/dist/locales/ru.json b/invokeai/frontend/web/dist/locales/ru.json new file mode 100644 index 0000000000..665a821eb1 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ru.json @@ -0,0 +1,1652 @@ +{ + "common": { + "hotkeysLabel": "Горячие клавиши", + "languagePickerLabel": "Язык", + "reportBugLabel": "Сообщить об ошибке", + "settingsLabel": "Настройки", + "img2img": "Изображение в изображение (img2img)", + "unifiedCanvas": "Единый холст", + "nodes": "Редактор рабочего процесса", + "langRussian": "Русский", + "nodesDesc": "Cистема генерации изображений на основе нодов (узлов) уже разрабатывается. Следите за новостями об этой замечательной функции.", + "postProcessing": "Постобработка", + "postProcessDesc1": "Invoke AI предлагает широкий спектр функций постобработки. Увеличение изображения (upscale) и восстановление лиц уже доступны в интерфейсе. Получите доступ к ним из меню 'Дополнительные параметры' на вкладках 'Текст в изображение' и 'Изображение в изображение'. Обрабатывайте изображения напрямую, используя кнопки действий с изображениями над текущим изображением или в режиме просмотра.", + "postProcessDesc2": "В ближайшее время будет выпущен специальный интерфейс для более продвинутых процессов постобработки.", + "postProcessDesc3": "Интерфейс командной строки Invoke AI предлагает различные другие функции, включая Embiggen.", + "training": "Обучение", + "trainingDesc1": "Специальный интерфейс для обучения собственных моделей с использованием Textual Inversion и Dreambooth.", + "trainingDesc2": "InvokeAI уже поддерживает обучение моделей с помощью TI, через интерфейс командной строки.", + "upload": "Загрузить", + "close": "Закрыть", + "load": "Загрузить", + "statusConnected": "Подключен", + "statusDisconnected": "Отключен", + "statusError": "Ошибка", + "statusPreparing": "Подготовка", + "statusProcessingCanceled": "Обработка прервана", + "statusProcessingComplete": "Обработка завершена", + "statusGenerating": "Генерация", + "statusGeneratingTextToImage": "Создаем изображение из текста", + "statusGeneratingImageToImage": "Создаем изображение из изображения", + "statusGeneratingInpainting": "Дополняем внутри", + "statusGeneratingOutpainting": "Дорисовываем снаружи", + "statusGenerationComplete": "Генерация завершена", + "statusIterationComplete": "Итерация завершена", + "statusSavingImage": "Сохранение изображения", + "statusRestoringFaces": "Восстановление лиц", + "statusRestoringFacesGFPGAN": "Восстановление лиц (GFPGAN)", + "statusRestoringFacesCodeFormer": "Восстановление лиц (CodeFormer)", + "statusUpscaling": "Увеличение", + "statusUpscalingESRGAN": "Увеличение (ESRGAN)", + "statusLoadingModel": "Загрузка модели", + "statusModelChanged": "Модель изменена", + "githubLabel": "Github", + "discordLabel": "Discord", + "statusMergingModels": "Слияние моделей", + "statusModelConverted": "Модель сконвертирована", + "statusMergedModels": "Модели объединены", + "loading": "Загрузка", + "loadingInvokeAI": "Загрузка Invoke AI", + "back": "Назад", + "statusConvertingModel": "Конвертация модели", + "cancel": "Отменить", + "accept": "Принять", + "langUkranian": "Украї́нська", + "langEnglish": "English", + "postprocessing": "Постобработка", + "langArabic": "العربية", + "langSpanish": "Español", + "langSimplifiedChinese": "简体中文", + "langDutch": "Nederlands", + "langFrench": "Français", + "langGerman": "German", + "langHebrew": "Hebrew", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langKorean": "한국어", + "langPolish": "Polski", + "langPortuguese": "Português", + "txt2img": "Текст в изображение (txt2img)", + "langBrPortuguese": "Português do Brasil", + "linear": "Линейная обработка", + "dontAskMeAgain": "Больше не спрашивать", + "areYouSure": "Вы уверены?", + "random": "Случайное", + "generate": "Сгенерировать", + "openInNewTab": "Открыть в новой вкладке", + "imagePrompt": "Запрос", + "communityLabel": "Сообщество", + "lightMode": "Светлая тема", + "batch": "Пакетный менеджер", + "modelManager": "Менеджер моделей", + "darkMode": "Темная тема", + "nodeEditor": "Редактор Нодов (Узлов)", + "controlNet": "Controlnet", + "advanced": "Расширенные", + "t2iAdapter": "T2I Adapter", + "checkpoint": "Checkpoint", + "format": "Формат", + "unknown": "Неизвестно", + "folder": "Папка", + "inpaint": "Перерисовать", + "updated": "Обновлен", + "on": "На", + "save": "Сохранить", + "created": "Создано", + "error": "Ошибка", + "prevPage": "Предыдущая страница", + "simple": "Простой", + "ipAdapter": "IP Adapter", + "controlAdapter": "Адаптер контроля", + "installed": "Установлено", + "ai": "ИИ", + "auto": "Авто", + "file": "Файл", + "delete": "Удалить", + "template": "Шаблон", + "outputs": "результаты", + "unknownError": "Неизвестная ошибка", + "statusProcessing": "Обработка", + "imageFailedToLoad": "Невозможно загрузить изображение", + "direction": "Направление", + "data": "Данные", + "somethingWentWrong": "Что-то пошло не так", + "safetensors": "Safetensors", + "outpaint": "Расширить изображение", + "orderBy": "Сортировать по", + "copyError": "Ошибка $t(gallery.copy)", + "learnMore": "Узнать больше", + "nextPage": "Следущая страница", + "saveAs": "Сохранить как", + "unsaved": "несохраненный", + "input": "Вход", + "details": "Детали", + "notInstalled": "Нет $t(common.installed)" + }, + "gallery": { + "generations": "Генерации", + "showGenerations": "Показывать генерации", + "uploads": "Загрузки", + "showUploads": "Показывать загрузки", + "galleryImageSize": "Размер изображений", + "galleryImageResetSize": "Размер по умолчанию", + "gallerySettings": "Настройка галереи", + "maintainAspectRatio": "Сохранять пропорции", + "autoSwitchNewImages": "Автоматически выбирать новые", + "singleColumnLayout": "Одна колонка", + "allImagesLoaded": "Все изображения загружены", + "loadMore": "Показать больше", + "noImagesInGallery": "Изображений нет", + "deleteImagePermanent": "Удаленные изображения невозможно восстановить.", + "deleteImageBin": "Удаленные изображения будут отправлены в корзину вашей операционной системы.", + "deleteImage": "Удалить изображение", + "assets": "Ресурсы", + "autoAssignBoardOnClick": "Авто-назначение доски по клику", + "deleteSelection": "Удалить выделенное", + "featuresWillReset": "Если вы удалите это изображение, эти функции будут немедленно сброшены.", + "problemDeletingImagesDesc": "Не удалось удалить одно или несколько изображений", + "loading": "Загрузка", + "unableToLoad": "Невозможно загрузить галерею", + "preparingDownload": "Подготовка к скачиванию", + "preparingDownloadFailed": "Проблема с подготовкой к скачиванию", + "image": "изображение", + "drop": "перебросить", + "problemDeletingImages": "Проблема с удалением изображений", + "downloadSelection": "Скачать выделенное", + "currentlyInUse": "В настоящее время это изображение используется в следующих функциях:", + "unstarImage": "Удалить из избранного", + "dropOrUpload": "$t(gallery.drop) или загрузить", + "copy": "Копировать", + "download": "Скачать", + "noImageSelected": "Изображение не выбрано", + "setCurrentImage": "Установить как текущее изображение", + "starImage": "Добавить в избранное", + "dropToUpload": "$t(gallery.drop) чтоб загрузить" + }, + "hotkeys": { + "keyboardShortcuts": "Горячие клавиши", + "appHotkeys": "Горячие клавиши приложения", + "generalHotkeys": "Общие горячие клавиши", + "galleryHotkeys": "Горячие клавиши галереи", + "unifiedCanvasHotkeys": "Горячие клавиши Единого холста", + "invoke": { + "title": "Invoke", + "desc": "Сгенерировать изображение" + }, + "cancel": { + "title": "Отменить", + "desc": "Отменить генерацию изображения" + }, + "focusPrompt": { + "title": "Переключиться на ввод запроса", + "desc": "Переключение на область ввода запроса" + }, + "toggleOptions": { + "title": "Показать/скрыть параметры", + "desc": "Открывать и закрывать панель параметров" + }, + "pinOptions": { + "title": "Закрепить параметры", + "desc": "Закрепить панель параметров" + }, + "toggleViewer": { + "title": "Показать просмотр", + "desc": "Открывать и закрывать просмотрщик изображений" + }, + "toggleGallery": { + "title": "Показать галерею", + "desc": "Открывать и закрывать ящик галереи" + }, + "maximizeWorkSpace": { + "title": "Максимизировать рабочее пространство", + "desc": "Скрыть панели и максимизировать рабочую область" + }, + "changeTabs": { + "title": "Переключить вкладку", + "desc": "Переключиться на другую рабочую область" + }, + "consoleToggle": { + "title": "Показать консоль", + "desc": "Открывать и закрывать консоль" + }, + "setPrompt": { + "title": "Использовать запрос", + "desc": "Использовать запрос из текущего изображения" + }, + "setSeed": { + "title": "Использовать сид", + "desc": "Использовать сид текущего изображения" + }, + "setParameters": { + "title": "Использовать все параметры", + "desc": "Использовать все параметры текущего изображения" + }, + "restoreFaces": { + "title": "Восстановить лица", + "desc": "Восстановить лица на текущем изображении" + }, + "upscale": { + "title": "Увеличение", + "desc": "Увеличить текущеее изображение" + }, + "showInfo": { + "title": "Показать метаданные", + "desc": "Показать метаданные из текущего изображения" + }, + "sendToImageToImage": { + "title": "Отправить в img2img", + "desc": "Отправить текущее изображение в Image To Image" + }, + "deleteImage": { + "title": "Удалить изображение", + "desc": "Удалить текущее изображение" + }, + "closePanels": { + "title": "Закрыть панели", + "desc": "Закрывает открытые панели" + }, + "previousImage": { + "title": "Предыдущее изображение", + "desc": "Отображать предыдущее изображение в галерее" + }, + "nextImage": { + "title": "Следующее изображение", + "desc": "Отображение следующего изображения в галерее" + }, + "toggleGalleryPin": { + "title": "Закрепить галерею", + "desc": "Закрепляет и открепляет галерею" + }, + "increaseGalleryThumbSize": { + "title": "Увеличить размер миниатюр галереи", + "desc": "Увеличивает размер миниатюр галереи" + }, + "decreaseGalleryThumbSize": { + "title": "Уменьшает размер миниатюр галереи", + "desc": "Уменьшает размер миниатюр галереи" + }, + "selectBrush": { + "title": "Выбрать кисть", + "desc": "Выбирает кисть для холста" + }, + "selectEraser": { + "title": "Выбрать ластик", + "desc": "Выбирает ластик для холста" + }, + "decreaseBrushSize": { + "title": "Уменьшить размер кисти", + "desc": "Уменьшает размер кисти/ластика холста" + }, + "increaseBrushSize": { + "title": "Увеличить размер кисти", + "desc": "Увеличивает размер кисти/ластика холста" + }, + "decreaseBrushOpacity": { + "title": "Уменьшить непрозрачность кисти", + "desc": "Уменьшает непрозрачность кисти холста" + }, + "increaseBrushOpacity": { + "title": "Увеличить непрозрачность кисти", + "desc": "Увеличивает непрозрачность кисти холста" + }, + "moveTool": { + "title": "Инструмент перемещения", + "desc": "Позволяет перемещаться по холсту" + }, + "fillBoundingBox": { + "title": "Заполнить ограничивающую рамку", + "desc": "Заполняет ограничивающую рамку цветом кисти" + }, + "eraseBoundingBox": { + "title": "Стереть ограничивающую рамку", + "desc": "Стирает область ограничивающей рамки" + }, + "colorPicker": { + "title": "Выбрать цвет", + "desc": "Выбирает средство выбора цвета холста" + }, + "toggleSnap": { + "title": "Включить привязку", + "desc": "Включает/выключает привязку к сетке" + }, + "quickToggleMove": { + "title": "Быстрое переключение перемещения", + "desc": "Временно переключает режим перемещения" + }, + "toggleLayer": { + "title": "Переключить слой", + "desc": "Переключение маски/базового слоя" + }, + "clearMask": { + "title": "Очистить маску", + "desc": "Очистить всю маску" + }, + "hideMask": { + "title": "Скрыть маску", + "desc": "Скрывает/показывает маску" + }, + "showHideBoundingBox": { + "title": "Показать/скрыть ограничивающую рамку", + "desc": "Переключить видимость ограничивающей рамки" + }, + "mergeVisible": { + "title": "Объединить видимые", + "desc": "Объединить все видимые слои холста" + }, + "saveToGallery": { + "title": "Сохранить в галерею", + "desc": "Сохранить текущий холст в галерею" + }, + "copyToClipboard": { + "title": "Копировать в буфер обмена", + "desc": "Копировать текущий холст в буфер обмена" + }, + "downloadImage": { + "title": "Скачать изображение", + "desc": "Скачать содержимое холста" + }, + "undoStroke": { + "title": "Отменить кисть", + "desc": "Отменить мазок кисти" + }, + "redoStroke": { + "title": "Повторить кисть", + "desc": "Повторить мазок кисти" + }, + "resetView": { + "title": "Вид по умолчанию", + "desc": "Сбросить вид холста" + }, + "previousStagingImage": { + "title": "Предыдущее изображение", + "desc": "Предыдущая область изображения" + }, + "nextStagingImage": { + "title": "Следующее изображение", + "desc": "Следующая область изображения" + }, + "acceptStagingImage": { + "title": "Принять изображение", + "desc": "Принять текущее изображение" + }, + "addNodes": { + "desc": "Открывает меню добавления узла", + "title": "Добавление узлов" + }, + "nodesHotkeys": "Горячие клавиши узлов" + }, + "modelManager": { + "modelManager": "Менеджер моделей", + "model": "Модель", + "modelAdded": "Модель добавлена", + "modelUpdated": "Модель обновлена", + "modelEntryDeleted": "Запись о модели удалена", + "cannotUseSpaces": "Нельзя использовать пробелы", + "addNew": "Добавить новую", + "addNewModel": "Добавить новую модель", + "addManually": "Добавить вручную", + "manual": "Ручное", + "name": "Название", + "nameValidationMsg": "Введите название модели", + "description": "Описание", + "descriptionValidationMsg": "Введите описание модели", + "config": "Файл конфигурации", + "configValidationMsg": "Путь до файла конфигурации.", + "modelLocation": "Расположение модели", + "modelLocationValidationMsg": "Укажите путь к локальной папке, в которой хранится ваша модель Diffusers", + "vaeLocation": "Расположение VAE", + "vaeLocationValidationMsg": "Путь до файла VAE.", + "width": "Ширина", + "widthValidationMsg": "Исходная ширина изображений модели.", + "height": "Высота", + "heightValidationMsg": "Исходная высота изображений модели.", + "addModel": "Добавить модель", + "updateModel": "Обновить модель", + "availableModels": "Доступные модели", + "search": "Искать", + "load": "Загрузить", + "active": "активна", + "notLoaded": "не загружена", + "cached": "кэширована", + "checkpointFolder": "Папка с моделями", + "clearCheckpointFolder": "Очистить папку с моделями", + "findModels": "Найти модели", + "scanAgain": "Сканировать снова", + "modelsFound": "Найденные модели", + "selectFolder": "Выбрать папку", + "selected": "Выбраны", + "selectAll": "Выбрать все", + "deselectAll": "Снять выделение", + "showExisting": "Показывать добавленные", + "addSelected": "Добавить выбранные", + "modelExists": "Модель уже добавлена", + "selectAndAdd": "Выберите и добавьте модели из списка", + "noModelsFound": "Модели не найдены", + "delete": "Удалить", + "deleteModel": "Удалить модель", + "deleteConfig": "Удалить конфигурацию", + "deleteMsg1": "Вы точно хотите удалить модель из InvokeAI?", + "deleteMsg2": "Это приведет К УДАЛЕНИЮ модели С ДИСКА, если она находится в корневой папке Invoke. Если вы используете пользовательское расположение, то модель НЕ будет удалена с диска.", + "repoIDValidationMsg": "Онлайн-репозиторий модели", + "convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 2–7 Гб.", + "invokeAIFolder": "Каталог InvokeAI", + "ignoreMismatch": "Игнорировать несоответствия между выбранными моделями", + "addCheckpointModel": "Добавить модель Checkpoint/Safetensor", + "formMessageDiffusersModelLocationDesc": "Укажите хотя бы одно.", + "convertToDiffusersHelpText3": "Ваш файл контрольной точки НА ДИСКЕ будет УДАЛЕН, если он находится в корневой папке InvokeAI. Если он находится в пользовательском расположении, то он НЕ будет удален.", + "vaeRepoID": "ID репозитория VAE", + "mergedModelName": "Название объединенной модели", + "checkpointModels": "Модели Checkpoint", + "allModels": "Все модели", + "addDiffuserModel": "Добавить Diffusers", + "repo_id": "ID репозитория", + "formMessageDiffusersVAELocationDesc": "Если не указано, InvokeAI будет искать файл VAE рядом с моделью.", + "convert": "Преобразовать", + "convertToDiffusers": "Преобразовать в Diffusers", + "convertToDiffusersHelpText1": "Модель будет преобразована в формат 🧨 Diffusers.", + "convertToDiffusersHelpText4": "Это единоразовое действие. Оно может занять 30—60 секунд в зависимости от характеристик вашего компьютера.", + "convertToDiffusersHelpText6": "Вы хотите преобразовать эту модель?", + "statusConverting": "Преобразование", + "modelConverted": "Модель преобразована", + "invokeRoot": "Каталог InvokeAI", + "modelsMerged": "Модели объединены", + "mergeModels": "Объединить модели", + "scanForModels": "Просканировать модели", + "sigmoid": "Сигмоид", + "formMessageDiffusersModelLocation": "Расположение Diffusers-модели", + "modelThree": "Модель 3", + "modelMergeHeaderHelp2": "Только Diffusers-модели доступны для объединения. Если вы хотите объединить checkpoint-модели, сначала преобразуйте их в Diffusers.", + "pickModelType": "Выбрать тип модели", + "formMessageDiffusersVAELocation": "Расположение VAE", + "v1": "v1", + "convertToDiffusersSaveLocation": "Путь сохранения", + "customSaveLocation": "Пользовательский путь сохранения", + "alpha": "Альфа", + "diffusersModels": "Diffusers", + "customConfig": "Пользовательский конфиг", + "pathToCustomConfig": "Путь к пользовательскому конфигу", + "inpainting": "v1 Inpainting", + "sameFolder": "В ту же папку", + "modelOne": "Модель 1", + "mergedModelCustomSaveLocation": "Пользовательский путь", + "none": "пусто", + "addDifference": "Добавить разницу", + "vaeRepoIDValidationMsg": "Онлайн репозиторий VAE", + "convertToDiffusersHelpText2": "Этот процесс заменит вашу запись в менеджере моделей на версию той же модели в Diffusers.", + "custom": "Пользовательский", + "modelTwo": "Модель 2", + "mergedModelSaveLocation": "Путь сохранения", + "merge": "Объединить", + "interpolationType": "Тип интерполяции", + "modelMergeInterpAddDifferenceHelp": "В этом режиме Модель 3 сначала вычитается из Модели 2. Результирующая версия смешивается с Моделью 1 с установленным выше коэффициентом Альфа.", + "modelMergeHeaderHelp1": "Вы можете объединить до трех разных моделей, чтобы создать смешанную, соответствующую вашим потребностям.", + "modelMergeAlphaHelp": "Альфа влияет на силу смешивания моделей. Более низкие значения альфа приводят к меньшему влиянию второй модели.", + "inverseSigmoid": "Обратный Сигмоид", + "weightedSum": "Взвешенная сумма", + "safetensorModels": "SafeTensors", + "v2_768": "v2 (768px)", + "v2_base": "v2 (512px)", + "modelDeleted": "Модель удалена", + "importModels": "Импорт Моделей", + "variant": "Вариант", + "baseModel": "Базовая модель", + "modelsSynced": "Модели синхронизированы", + "modelSyncFailed": "Не удалось синхронизировать модели", + "vae": "VAE", + "modelDeleteFailed": "Не удалось удалить модель", + "noCustomLocationProvided": "Пользовательское местоположение не указано", + "convertingModelBegin": "Конвертация модели. Пожалуйста, подождите.", + "settings": "Настройки", + "selectModel": "Выберите модель", + "syncModels": "Синхронизация моделей", + "syncModelsDesc": "Если ваши модели не синхронизированы с серверной частью, вы можете обновить их, используя эту опцию. Обычно это удобно в тех случаях, когда вы вручную обновляете свой файл \"models.yaml\" или добавляете модели в корневую папку InvokeAI после загрузки приложения.", + "modelUpdateFailed": "Не удалось обновить модель", + "modelConversionFailed": "Не удалось сконвертировать модель", + "modelsMergeFailed": "Не удалось выполнить слияние моделей", + "loraModels": "Модели LoRA", + "onnxModels": "Модели Onnx", + "oliveModels": "Модели Olives", + "conversionNotSupported": "Преобразование не поддерживается", + "noModels": "Нет моделей", + "predictionType": "Тип прогноза (для моделей Stable Diffusion 2.x и периодических моделей Stable Diffusion 1.x)", + "quickAdd": "Быстрое добавление", + "simpleModelDesc": "Укажите путь к локальной модели Diffusers , локальной модели checkpoint / safetensors, идентификатор репозитория HuggingFace или URL-адрес модели контрольной checkpoint / diffusers.", + "advanced": "Продвинутый", + "useCustomConfig": "Использовать кастомный конфиг", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "closeAdvanced": "Скрыть расширенные", + "modelType": "Тип модели", + "customConfigFileLocation": "Расположение пользовательского файла конфигурации", + "vaePrecision": "Точность VAE", + "noModelSelected": "Модель не выбрана" + }, + "parameters": { + "images": "Изображения", + "steps": "Шаги", + "cfgScale": "Точность следования запросу (CFG)", + "width": "Ширина", + "height": "Высота", + "seed": "Сид", + "randomizeSeed": "Случайный сид", + "shuffle": "Обновить сид", + "noiseThreshold": "Порог шума", + "perlinNoise": "Шум Перлина", + "variations": "Вариации", + "variationAmount": "Кол-во вариаций", + "seedWeights": "Вес сида", + "faceRestoration": "Восстановление лиц", + "restoreFaces": "Восстановить лица", + "type": "Тип", + "strength": "Сила", + "upscaling": "Увеличение", + "upscale": "Увеличить", + "upscaleImage": "Увеличить изображение", + "scale": "Масштаб", + "otherOptions": "Другие параметры", + "seamlessTiling": "Бесшовность", + "hiresOptim": "Оптимизация High Res", + "imageFit": "Уместить изображение", + "codeformerFidelity": "Точность", + "scaleBeforeProcessing": "Масштабировать", + "scaledWidth": "Масштаб Ш", + "scaledHeight": "Масштаб В", + "infillMethod": "Способ заполнения", + "tileSize": "Размер области", + "boundingBoxHeader": "Ограничивающая рамка", + "seamCorrectionHeader": "Настройка шва", + "infillScalingHeader": "Заполнение и масштабирование", + "img2imgStrength": "Сила обработки img2img", + "toggleLoopback": "Зациклить обработку", + "sendTo": "Отправить", + "sendToImg2Img": "Отправить в img2img", + "sendToUnifiedCanvas": "Отправить на Единый холст", + "copyImageToLink": "Скопировать ссылку", + "downloadImage": "Скачать", + "openInViewer": "Открыть в просмотрщике", + "closeViewer": "Закрыть просмотрщик", + "usePrompt": "Использовать запрос", + "useSeed": "Использовать сид", + "useAll": "Использовать все", + "useInitImg": "Использовать как исходное", + "info": "Метаданные", + "initialImage": "Исходное изображение", + "showOptionsPanel": "Показать панель настроек", + "vSymmetryStep": "Шаг верт. симметрии", + "cancel": { + "immediate": "Отменить немедленно", + "schedule": "Отменить после текущей итерации", + "isScheduled": "Отмена", + "setType": "Установить тип отмены", + "cancel": "Отмена" + }, + "general": "Основное", + "hiresStrength": "Сила High Res", + "symmetry": "Симметрия", + "hSymmetryStep": "Шаг гор. симметрии", + "hidePreview": "Скрыть предпросмотр", + "imageToImage": "Изображение в изображение", + "denoisingStrength": "Сила шумоподавления", + "copyImage": "Скопировать изображение", + "showPreview": "Показать предпросмотр", + "noiseSettings": "Шум", + "seamlessXAxis": "Горизонтальная", + "seamlessYAxis": "Вертикальная", + "scheduler": "Планировщик", + "boundingBoxWidth": "Ширина ограничивающей рамки", + "boundingBoxHeight": "Высота ограничивающей рамки", + "positivePromptPlaceholder": "Запрос", + "negativePromptPlaceholder": "Исключающий запрос", + "controlNetControlMode": "Режим управления", + "clipSkip": "CLIP Пропуск", + "aspectRatio": "Соотношение", + "maskAdjustmentsHeader": "Настройка маски", + "maskBlur": "Размытие", + "maskBlurMethod": "Метод размытия", + "seamLowThreshold": "Низкий", + "seamHighThreshold": "Высокий", + "coherenceSteps": "Шагов", + "coherencePassHeader": "Порог Coherence", + "coherenceStrength": "Сила", + "compositingSettingsHeader": "Настройки компоновки", + "invoke": { + "noNodesInGraph": "Нет узлов в графе", + "noModelSelected": "Модель не выбрана", + "noPrompts": "Подсказки не создаются", + "systemBusy": "Система занята", + "noInitialImageSelected": "Исходное изображение не выбрано", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} отсутствует ввод", + "noControlImageForControlAdapter": "Адаптер контроля #{{number}} не имеет изображения", + "noModelForControlAdapter": "Не выбрана модель адаптера контроля #{{number}}.", + "unableToInvoke": "Невозможно вызвать", + "incompatibleBaseModelForControlAdapter": "Модель контрольного адаптера №{{number}} недействительна для основной модели.", + "systemDisconnected": "Система отключена", + "missingNodeTemplate": "Отсутствует шаблон узла", + "readyToInvoke": "Готово к вызову", + "missingFieldTemplate": "Отсутствует шаблон поля", + "addingImagesTo": "Добавление изображений в" + }, + "seamlessX&Y": "Бесшовный X & Y", + "isAllowedToUpscale": { + "useX2Model": "Изображение слишком велико для увеличения с помощью модели x4. Используйте модель x2", + "tooLarge": "Изображение слишком велико для увеличения. Выберите изображение меньшего размера" + }, + "aspectRatioFree": "Свободное", + "maskEdge": "Край маски", + "cpuNoise": "CPU шум", + "cfgRescaleMultiplier": "Множитель масштабирования CFG", + "cfgRescale": "Изменение масштаба CFG", + "patchmatchDownScaleSize": "уменьшить", + "gpuNoise": "GPU шум", + "seamlessX": "Бесшовный X", + "useCpuNoise": "Использовать шум CPU", + "clipSkipWithLayerCount": "CLIP пропуск {{layerCount}}", + "seamlessY": "Бесшовный Y", + "manualSeed": "Указанный сид", + "imageActions": "Действия с изображениями", + "randomSeed": "Случайный", + "iterations": "Кол-во", + "iterationsWithCount_one": "{{count}} Интеграция", + "iterationsWithCount_few": "{{count}} Итерации", + "iterationsWithCount_many": "{{count}} Итераций", + "useSize": "Использовать размер", + "unmasked": "Без маски", + "enableNoiseSettings": "Включить настройки шума", + "coherenceMode": "Режим" + }, + "settings": { + "models": "Модели", + "displayInProgress": "Показывать процесс генерации", + "saveSteps": "Сохранять каждые n щагов", + "confirmOnDelete": "Подтверждать удаление", + "displayHelpIcons": "Показывать значки подсказок", + "enableImageDebugging": "Включить отладку", + "resetWebUI": "Сброс настроек веб-интерфейса", + "resetWebUIDesc1": "Сброс настроек веб-интерфейса удаляет только локальный кэш браузера с вашими изображениями и настройками. Он не удаляет изображения с диска.", + "resetWebUIDesc2": "Если изображения не отображаются в галерее или не работает что-то еще, пожалуйста, попробуйте сбросить настройки, прежде чем сообщать о проблеме на GitHub.", + "resetComplete": "Настройки веб-интерфейса были сброшены.", + "useSlidersForAll": "Использовать ползунки для всех параметров", + "consoleLogLevel": "Уровень логирования", + "shouldLogToConsole": "Логи в консоль", + "developer": "Разработчик", + "general": "Основное", + "showProgressInViewer": "Показывать процесс генерации в Просмотрщике", + "antialiasProgressImages": "Сглаживать предпоказ процесса генерации", + "generation": "Поколение", + "ui": "Пользовательский интерфейс", + "favoriteSchedulers": "Избранные планировщики", + "favoriteSchedulersPlaceholder": "Нет избранных планировщиков", + "enableNodesEditor": "Включить редактор узлов", + "experimental": "Экспериментальные", + "beta": "Бета", + "alternateCanvasLayout": "Альтернативный слой холста", + "showAdvancedOptions": "Показать доп. параметры", + "autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении", + "clearIntermediates": "Очистить промежуточные", + "clearIntermediatesDesc3": "Изображения вашей галереи не будут удалены.", + "clearIntermediatesWithCount_one": "Очистить {{count}} промежуточное", + "clearIntermediatesWithCount_few": "Очистить {{count}} промежуточных", + "clearIntermediatesWithCount_many": "Очистить {{count}} промежуточных", + "enableNSFWChecker": "Включить NSFW проверку", + "clearIntermediatesDisabled": "Очередь должна быть пуста, чтобы очистить промежуточные продукты", + "clearIntermediatesDesc2": "Промежуточные изображения — это побочные продукты генерации, отличные от результирующих изображений в галерее. Очистка промежуточных файлов освободит место на диске.", + "enableInvisibleWatermark": "Включить невидимый водяной знак", + "enableInformationalPopovers": "Включить информационные всплывающие окна", + "intermediatesCleared_one": "Очищено {{count}} промежуточное", + "intermediatesCleared_few": "Очищено {{count}} промежуточных", + "intermediatesCleared_many": "Очищено {{count}} промежуточных", + "clearIntermediatesDesc1": "Очистка промежуточных элементов приведет к сбросу состояния Canvas и ControlNet.", + "intermediatesClearedFailed": "Проблема очистки промежуточных", + "reloadingIn": "Перезагрузка через" + }, + "toast": { + "tempFoldersEmptied": "Временная папка очищена", + "uploadFailed": "Загрузка не удалась", + "uploadFailedUnableToLoadDesc": "Невозможно загрузить файл", + "downloadImageStarted": "Скачивание изображения началось", + "imageCopied": "Изображение скопировано", + "imageLinkCopied": "Ссылка на изображение скопирована", + "imageNotLoaded": "Изображение не загружено", + "imageNotLoadedDesc": "Не удалось найти изображение", + "imageSavedToGallery": "Изображение сохранено в галерею", + "canvasMerged": "Холст объединен", + "sentToImageToImage": "Отправить в img2img", + "sentToUnifiedCanvas": "Отправлено на Единый холст", + "parametersSet": "Параметры заданы", + "parametersNotSet": "Параметры не заданы", + "parametersNotSetDesc": "Не найдены метаданные изображения.", + "parametersFailed": "Проблема с загрузкой параметров", + "parametersFailedDesc": "Невозможно загрузить исходное изображение.", + "seedSet": "Сид задан", + "seedNotSet": "Сид не задан", + "seedNotSetDesc": "Не удалось найти сид для изображения.", + "promptSet": "Запрос задан", + "promptNotSet": "Запрос не задан", + "promptNotSetDesc": "Не удалось найти запрос для изображения.", + "upscalingFailed": "Увеличение не удалось", + "faceRestoreFailed": "Восстановление лиц не удалось", + "metadataLoadFailed": "Не удалось загрузить метаданные", + "initialImageSet": "Исходное изображение задано", + "initialImageNotSet": "Исходное изображение не задано", + "initialImageNotSetDesc": "Не получилось загрузить исходное изображение", + "serverError": "Ошибка сервера", + "disconnected": "Отключено от сервера", + "connected": "Подключено к серверу", + "canceled": "Обработка отменена", + "problemCopyingImageLink": "Не удалось скопировать ссылку на изображение", + "uploadFailedInvalidUploadDesc": "Должно быть одно изображение в формате PNG или JPEG", + "parameterNotSet": "Параметр не задан", + "parameterSet": "Параметр задан", + "nodesLoaded": "Узлы загружены", + "problemCopyingImage": "Не удается скопировать изображение", + "nodesLoadedFailed": "Не удалось загрузить Узлы", + "nodesBrokenConnections": "Не удается загрузить. Некоторые соединения повреждены.", + "nodesUnrecognizedTypes": "Не удается загрузить. Граф имеет нераспознанные типы", + "nodesNotValidJSON": "Недопустимый JSON", + "nodesCorruptedGraph": "Не удается загрузить. Граф, похоже, поврежден.", + "nodesSaved": "Узлы сохранены", + "nodesNotValidGraph": "Недопустимый граф узлов InvokeAI", + "baseModelChangedCleared_one": "Базовая модель изменила, очистила или отключила {{count}} несовместимую подмодель", + "baseModelChangedCleared_few": "Базовая модель изменила, очистила или отключила {{count}} несовместимые подмодели", + "baseModelChangedCleared_many": "Базовая модель изменила, очистила или отключила {{count}} несовместимых подмоделей", + "imageSavingFailed": "Не удалось сохранить изображение", + "canvasSentControlnetAssets": "Холст отправлен в ControlNet и ресурсы", + "problemCopyingCanvasDesc": "Невозможно экспортировать базовый слой", + "loadedWithWarnings": "Рабочий процесс загружен с предупреждениями", + "setInitialImage": "Установить как исходное изображение", + "canvasCopiedClipboard": "Холст скопирован в буфер обмена", + "setControlImage": "Установить как контрольное изображение", + "setNodeField": "Установить как поле узла", + "problemSavingMask": "Проблема с сохранением маски", + "problemSavingCanvasDesc": "Невозможно экспортировать базовый слой", + "invalidUpload": "Неверная загрузка", + "maskSavedAssets": "Маска сохранена в ресурсах", + "modelAddFailed": "Не удалось добавить модель", + "problemDownloadingCanvas": "Проблема с скачиванием холста", + "setAsCanvasInitialImage": "Установить в качестве исходного изображения холста", + "problemMergingCanvas": "Проблема с объединением холста", + "setCanvasInitialImage": "Установить исходное изображение холста", + "imageUploaded": "Изображение загружено", + "addedToBoard": "Добавлено на доску", + "workflowLoaded": "Рабочий процесс загружен", + "problemDeletingWorkflow": "Проблема с удалением рабочего процесса", + "modelAddedSimple": "Модель добавлена", + "problemImportingMaskDesc": "Невозможно экспортировать маску", + "problemCopyingCanvas": "Проблема с копированием холста", + "workflowDeleted": "Рабочий процесс удален", + "problemSavingCanvas": "Проблема с сохранением холста", + "canvasDownloaded": "Холст скачан", + "setIPAdapterImage": "Установить как образ IP-адаптера", + "problemMergingCanvasDesc": "Невозможно экспортировать базовый слой", + "problemDownloadingCanvasDesc": "Невозможно экспортировать базовый слой", + "problemSavingMaskDesc": "Невозможно экспортировать маску", + "problemRetrievingWorkflow": "Проблема с получением рабочего процесса", + "imageSaved": "Изображение сохранено", + "maskSentControlnetAssets": "Маска отправлена в ControlNet и ресурсы", + "canvasSavedGallery": "Холст сохранен в галерею", + "imageUploadFailed": "Не удалось загрузить изображение", + "modelAdded": "Добавлена модель: {{modelName}}", + "problemImportingMask": "Проблема с импортом маски" + }, + "tooltip": { + "feature": { + "prompt": "Это поле для текста запроса, включая объекты генерации и стилистические термины. В запрос можно включить и коэффициенты веса (значимости токена), но консольные команды и параметры не будут работать.", + "gallery": "Здесь отображаются генерации из папки outputs по мере их появления.", + "other": "Эти опции включают альтернативные режимы обработки для Invoke. 'Бесшовный узор' создаст повторяющиеся узоры на выходе. 'Высокое разрешение' это генерация в два этапа с помощью img2img: используйте эту настройку, когда хотите получить цельное изображение большего размера без артефактов.", + "seed": "Значение сида влияет на начальный шум, из которого сформируется изображение. Можно использовать уже имеющийся сид из предыдущих изображений. 'Порог шума' используется для смягчения артефактов при высоких значениях CFG (попробуйте в диапазоне 0-10), а Перлин для добавления шума Перлина в процессе генерации: оба параметра служат для большей вариативности результатов.", + "variations": "Попробуйте вариацию со значением от 0.1 до 1.0, чтобы изменить результат для заданного сида. Интересные вариации сида находятся между 0.1 и 0.3.", + "upscale": "Используйте ESRGAN, чтобы увеличить изображение сразу после генерации.", + "faceCorrection": "Коррекция лиц с помощью GFPGAN или Codeformer: алгоритм определяет лица в готовом изображении и исправляет любые дефекты. Высокие значение силы меняет изображение сильнее, в результате лица будут выглядеть привлекательнее. У Codeformer более высокая точность сохранит исходное изображение в ущерб коррекции лица.", + "imageToImage": "'Изображение в изображение' загружает любое изображение, которое затем используется для генерации вместе с запросом. Чем больше значение, тем сильнее изменится изображение в результате. Возможны значения от 0 до 1, рекомендуется диапазон .25-.75", + "boundingBox": "'Ограничительная рамка' аналогична настройкам Ширина и Высота для 'Избражения из текста' или 'Изображения в изображение'. Будет обработана только область в рамке.", + "seamCorrection": "Управление обработкой видимых швов, возникающих между изображениями на холсте.", + "infillAndScaling": "Управление методами заполнения (используется для масок или стертых областей холста) и масштабирования (полезно для малых размеров ограничивающей рамки)." + } + }, + "unifiedCanvas": { + "layer": "Слой", + "base": "Базовый", + "mask": "Маска", + "maskingOptions": "Параметры маски", + "enableMask": "Включить маску", + "preserveMaskedArea": "Сохранять маскируемую область", + "clearMask": "Очистить маску", + "brush": "Кисть", + "eraser": "Ластик", + "fillBoundingBox": "Заполнить ограничивающую рамку", + "eraseBoundingBox": "Стереть ограничивающую рамку", + "colorPicker": "Пипетка", + "brushOptions": "Параметры кисти", + "brushSize": "Размер", + "move": "Переместить", + "resetView": "Сбросить вид", + "mergeVisible": "Объединить видимые", + "saveToGallery": "Сохранить в галерею", + "copyToClipboard": "Копировать в буфер обмена", + "downloadAsImage": "Скачать как изображение", + "undo": "Отменить", + "redo": "Повторить", + "clearCanvas": "Очистить холст", + "canvasSettings": "Настройки холста", + "showIntermediates": "Показывать процесс", + "showGrid": "Показать сетку", + "snapToGrid": "Привязать к сетке", + "darkenOutsideSelection": "Затемнить холст снаружи", + "autoSaveToGallery": "Автосохранение в галерее", + "saveBoxRegionOnly": "Сохранять только выделение", + "limitStrokesToBox": "Ограничить штрихи выделением", + "showCanvasDebugInfo": "Показать доп. информацию о холсте", + "clearCanvasHistory": "Очистить историю холста", + "clearHistory": "Очистить историю", + "clearCanvasHistoryMessage": "Очистка истории холста оставляет текущий холст нетронутым, но удаляет историю отмен и повторов.", + "clearCanvasHistoryConfirm": "Вы уверены, что хотите очистить историю холста?", + "emptyTempImageFolder": "Очистить временную папку", + "emptyFolder": "Очистить папку", + "emptyTempImagesFolderMessage": "Очищение папки временных изображений также полностью сбрасывает холст, включая всю историю отмены/повтора, размещаемые изображения и базовый слой холста.", + "emptyTempImagesFolderConfirm": "Вы уверены, что хотите очистить временную папку?", + "activeLayer": "Активный слой", + "canvasScale": "Масштаб холста", + "boundingBox": "Ограничивающая рамка", + "scaledBoundingBox": "Масштабирование рамки", + "boundingBoxPosition": "Позиция ограничивающей рамки", + "canvasDimensions": "Размеры холста", + "canvasPosition": "Положение холста", + "cursorPosition": "Положение курсора", + "previous": "Предыдущее", + "next": "Следующее", + "accept": "Принять", + "showHide": "Показать/Скрыть", + "discardAll": "Отменить все", + "betaClear": "Очистить", + "betaDarkenOutside": "Затемнить снаружи", + "betaLimitToBox": "Ограничить выделением", + "betaPreserveMasked": "Сохранять маскируемую область", + "antialiasing": "Не удалось скопировать ссылку на изображение", + "saveMask": "Сохранить $t(unifiedCanvas.mask)", + "showResultsOn": "Показывать результаты (вкл)", + "showResultsOff": "Показывать результаты (вЫкл)" + }, + "accessibility": { + "modelSelect": "Выбор модели", + "uploadImage": "Загрузить изображение", + "nextImage": "Следующее изображение", + "previousImage": "Предыдущее изображение", + "zoomIn": "Приблизить", + "zoomOut": "Отдалить", + "rotateClockwise": "Повернуть по часовой стрелке", + "rotateCounterClockwise": "Повернуть против часовой стрелки", + "flipVertically": "Перевернуть вертикально", + "flipHorizontally": "Отразить горизонтально", + "toggleAutoscroll": "Включить автопрокрутку", + "toggleLogViewer": "Показать или скрыть просмотрщик логов", + "showOptionsPanel": "Показать боковую панель", + "invokeProgressBar": "Индикатор выполнения", + "reset": "Сброс", + "modifyConfig": "Изменить конфиг", + "useThisParameter": "Использовать этот параметр", + "copyMetadataJson": "Скопировать метаданные JSON", + "exitViewer": "Закрыть просмотрщик", + "menu": "Меню", + "showGalleryPanel": "Показать панель галереи", + "mode": "Режим", + "loadMore": "Загрузить больше", + "resetUI": "$t(accessibility.reset) интерфейс", + "createIssue": "Сообщить о проблеме" + }, + "ui": { + "showProgressImages": "Показывать промежуточный итог", + "hideProgressImages": "Не показывать промежуточный итог", + "swapSizes": "Поменять местами размеры", + "lockRatio": "Зафиксировать пропорции" + }, + "nodes": { + "zoomInNodes": "Увеличьте масштаб", + "zoomOutNodes": "Уменьшите масштаб", + "fitViewportNodes": "Уместить вид", + "hideGraphNodes": "Скрыть оверлей графа", + "showGraphNodes": "Показать оверлей графа", + "showLegendNodes": "Показать тип поля", + "hideMinimapnodes": "Скрыть миникарту", + "hideLegendNodes": "Скрыть тип поля", + "showMinimapnodes": "Показать миникарту", + "loadWorkflow": "Загрузить рабочий процесс", + "reloadNodeTemplates": "Перезагрузить шаблоны узлов", + "downloadWorkflow": "Скачать JSON рабочего процесса", + "booleanPolymorphicDescription": "Коллекция логических значений.", + "addNode": "Добавить узел", + "addLinearView": "Добавить в линейный вид", + "animatedEdges": "Анимированные ребра", + "booleanCollectionDescription": "Коллекция логических значений.", + "boardField": "Доска", + "animatedEdgesHelp": "Анимация выбранных ребер и ребер, соединенных с выбранными узлами", + "booleanPolymorphic": "Логическое полиморфное", + "boolean": "Логические значения", + "booleanDescription": "Логические значения могут быть только true или false.", + "cannotConnectInputToInput": "Невозможно подключить вход к входу", + "boardFieldDescription": "Доска галереи", + "cannotConnectOutputToOutput": "Невозможно подключить выход к выходу", + "booleanCollection": "Логическая коллекция", + "addNodeToolTip": "Добавить узел (Shift+A, Пробел)", + "scheduler": "Планировщик", + "inputField": "Поле ввода", + "controlFieldDescription": "Информация об управлении, передаваемая между узлами.", + "skippingUnknownOutputType": "Пропуск неизвестного типа выходного поля", + "denoiseMaskFieldDescription": "Маска шумоподавления может передаваться между узлами", + "floatCollectionDescription": "Коллекция чисел Float.", + "missingTemplate": "Недопустимый узел: узел {{node}} типа {{type}} не имеет шаблона (не установлен?)", + "outputSchemaNotFound": "Схема вывода не найдена", + "ipAdapterPolymorphicDescription": "Коллекция IP-адаптеров.", + "workflowDescription": "Краткое описание", + "inputFieldTypeParseError": "Невозможно разобрать тип поля ввода {{node}}.{{field}} ({{message}})", + "colorFieldDescription": "Цвет RGBA.", + "mainModelField": "Модель", + "unhandledInputProperty": "Необработанное входное свойство", + "unsupportedAnyOfLength": "слишком много элементов объединения ({{count}})", + "versionUnknown": " Версия неизвестна", + "ipAdapterCollection": "Коллекция IP-адаптеров", + "conditioningCollection": "Коллекция условий", + "maybeIncompatible": "Может быть несовместимо с установленным", + "unsupportedArrayItemType": "неподдерживаемый тип элемента массива \"{{type}}\"", + "ipAdapterPolymorphic": "Полиморфный IP-адаптер", + "noNodeSelected": "Узел не выбран", + "unableToValidateWorkflow": "Невозможно проверить рабочий процесс", + "enum": "Перечисления", + "updateAllNodes": "Обновить узлы", + "integerPolymorphicDescription": "Коллекция целых чисел.", + "noOutputRecorded": "Выходы не зарегистрированы", + "updateApp": "Обновить приложение", + "conditioningCollectionDescription": "Условные обозначения могут передаваться между узлами.", + "colorPolymorphic": "Полиморфный цвет", + "colorCodeEdgesHelp": "Цветовая маркировка ребер в соответствии с их связанными полями", + "float": "Float", + "workflowContact": "Контакт", + "targetNodeFieldDoesNotExist": "Неверный край: целевое/вводное поле {{node}}.{{field}} не существует", + "skippingReservedFieldType": "Пропуск зарезервированного типа поля", + "unsupportedMismatchedUnion": "несовпадение типа CollectionOrScalar с базовыми типами {{firstType}} и {{secondType}}", + "sDXLMainModelFieldDescription": "Поле модели SDXL.", + "allNodesUpdated": "Все узлы обновлены", + "conditioningPolymorphic": "Полиморфные условия", + "integer": "Целое число", + "colorField": "Цвет", + "nodeTemplate": "Шаблон узла", + "problemReadingWorkflow": "Проблема с чтением рабочего процесса из изображения", + "sourceNode": "Исходный узел", + "nodeOpacity": "Непрозрачность узла", + "sourceNodeDoesNotExist": "Недопустимое ребро: исходный/выходной узел {{node}} не существует", + "pickOne": "Выбери один", + "integerDescription": "Целые числа — это числа без запятой или точки.", + "outputField": "Поле вывода", + "unableToLoadWorkflow": "Невозможно загрузить рабочий процесс", + "unableToExtractEnumOptions": "невозможно извлечь параметры перечисления", + "snapToGrid": "Привязка к сетке", + "stringPolymorphic": "Полиморфная строка", + "conditioningPolymorphicDescription": "Условие может быть передано между узлами.", + "noFieldsLinearview": "Нет полей, добавленных в линейный вид", + "skipped": "Пропущено", + "unableToParseFieldType": "невозможно проанализировать тип поля", + "imagePolymorphic": "Полиморфное изображение", + "nodeSearch": "Поиск узлов", + "updateNode": "Обновить узел", + "imagePolymorphicDescription": "Коллекция изображений.", + "floatPolymorphic": "Полиморфные Float", + "outputFieldInInput": "Поле вывода во входных данных", + "version": "Версия", + "doesNotExist": "не найдено", + "unrecognizedWorkflowVersion": "Неизвестная версия схемы рабочего процесса {{version}}", + "ipAdapterCollectionDescription": "Коллекция IP-адаптеров.", + "stringCollectionDescription": "Коллекция строк.", + "unableToParseNode": "Невозможно разобрать узел", + "controlCollection": "Контрольная коллекция", + "validateConnections": "Проверка соединений и графика", + "stringCollection": "Коллекция строк", + "inputMayOnlyHaveOneConnection": "Вход может иметь только одно соединение", + "notes": "Заметки", + "outputFieldTypeParseError": "Невозможно разобрать тип поля вывода {{node}}.{{field}} ({{message}})", + "uNetField": "UNet", + "nodeOutputs": "Выходы узла", + "currentImageDescription": "Отображает текущее изображение в редакторе узлов", + "validateConnectionsHelp": "Предотвратить создание недопустимых соединений и вызов недопустимых графиков", + "problemSettingTitle": "Проблема с настройкой названия", + "ipAdapter": "IP-адаптер", + "integerCollection": "Коллекция целых чисел", + "collectionItem": "Элемент коллекции", + "noConnectionInProgress": "Соединение не выполняется", + "vaeModelField": "VAE", + "controlCollectionDescription": "Информация об управлении, передаваемая между узлами.", + "skippedReservedInput": "Пропущено зарезервированное поле ввода", + "workflowVersion": "Версия", + "noConnectionData": "Нет данных о соединении", + "outputFields": "Поля вывода", + "fieldTypesMustMatch": "Типы полей должны совпадать", + "workflow": "Рабочий процесс", + "edge": "Край", + "inputNode": "Входной узел", + "enumDescription": "Перечисления - это значения, которые могут быть одним из нескольких вариантов.", + "unkownInvocation": "Неизвестный тип вызова", + "sourceNodeFieldDoesNotExist": "Неверный край: поле источника/вывода {{node}}.{{field}} не существует", + "imageField": "Изображение", + "skippedReservedOutput": "Пропущено зарезервированное поле вывода", + "cannotDuplicateConnection": "Невозможно создать дубликаты соединений", + "unknownTemplate": "Неизвестный шаблон", + "noWorkflow": "Нет рабочего процесса", + "removeLinearView": "Удалить из линейного вида", + "integerCollectionDescription": "Коллекция целых чисел.", + "colorPolymorphicDescription": "Коллекция цветов.", + "sDXLMainModelField": "Модель SDXL", + "workflowTags": "Теги", + "denoiseMaskField": "Маска шумоподавления", + "missingCanvaInitImage": "Отсутствует начальное изображение холста", + "conditioningFieldDescription": "Условие может быть передано между узлами.", + "clipFieldDescription": "Подмодели Tokenizer и text_encoder.", + "fullyContainNodesHelp": "Чтобы узлы были выбраны, они должны полностью находиться в поле выбора", + "unableToGetWorkflowVersion": "Не удалось получить версию схемы рабочего процесса", + "noImageFoundState": "Начальное изображение не найдено в состоянии", + "workflowValidation": "Ошибка проверки рабочего процесса", + "nodePack": "Пакет узлов", + "stringDescription": "Строки это просто текст.", + "nodeType": "Тип узла", + "noMatchingNodes": "Нет соответствующих узлов", + "fullyContainNodes": "Выбор узлов с полным содержанием", + "integerPolymorphic": "Целочисленные полиморфные", + "executionStateInProgress": "В процессе", + "unableToExtractSchemaNameFromRef": "невозможно извлечь имя схемы из ссылки", + "noFieldType": "Нет типа поля", + "colorCollection": "Коллекция цветов.", + "executionStateError": "Ошибка", + "noOutputSchemaName": "В объекте ref не найдено имя выходной схемы", + "ipAdapterModel": "Модель IP-адаптера", + "prototypeDesc": "Этот вызов является прототипом. Он может претерпевать изменения при обновлении приложения и может быть удален в любой момент.", + "unableToMigrateWorkflow": "Невозможно перенести рабочий процесс", + "skippingInputNoTemplate": "Пропуск поля ввода без шаблона", + "ipAdapterDescription": "Image Prompt Adapter (IP-адаптер).", + "missingCanvaInitMaskImages": "Отсутствуют начальные изображения холста и маски", + "problemReadingMetadata": "Проблема с чтением метаданных с изображения", + "unknownOutput": "Неизвестный вывод: {{name}}", + "stringPolymorphicDescription": "Коллекция строк.", + "oNNXModelField": "Модель ONNX", + "executionStateCompleted": "Выполнено", + "node": "Узел", + "skippingUnknownInputType": "Пропуск неизвестного типа поля", + "workflowAuthor": "Автор", + "currentImage": "Текущее изображение", + "controlField": "Контроль", + "workflowName": "Название", + "collection": "Коллекция", + "ipAdapterModelDescription": "Поле модели IP-адаптера", + "invalidOutputSchema": "Неверная схема вывода", + "unableToUpdateNode": "Невозможно обновить узел", + "floatDescription": "Float - это числа с запятой.", + "floatPolymorphicDescription": "Коллекция Float-ов.", + "vaeField": "VAE", + "conditioningField": "Обусловленность", + "unknownErrorValidatingWorkflow": "Неизвестная ошибка при проверке рабочего процесса", + "collectionFieldType": "Коллекция {{name}}", + "unhandledOutputProperty": "Необработанное выходное свойство", + "workflowNotes": "Примечания", + "string": "Строка", + "floatCollection": "Коллекция Float", + "unknownNodeType": "Неизвестный тип узла", + "unableToUpdateNodes_one": "Невозможно обновить {{count}} узел", + "unableToUpdateNodes_few": "Невозможно обновить {{count}} узла", + "unableToUpdateNodes_many": "Невозможно обновить {{count}} узлов", + "connectionWouldCreateCycle": "Соединение создаст цикл", + "cannotConnectToSelf": "Невозможно подключиться к самому себе", + "notesDescription": "Добавляйте заметки о своем рабочем процессе", + "unknownField": "Неизвестное поле", + "inputFields": "Поля ввода", + "colorCodeEdges": "Ребра с цветовой кодировкой", + "uNetFieldDescription": "Подмодель UNet.", + "unknownNode": "Неизвестный узел", + "targetNodeDoesNotExist": "Недопустимое ребро: целевой/входной узел {{node}} не существует", + "imageCollectionDescription": "Коллекция изображений.", + "mismatchedVersion": "Недопустимый узел: узел {{node}} типа {{type}} имеет несоответствующую версию (попробовать обновить?)", + "unknownFieldType": "$t(nodes.unknownField) тип: {{type}}", + "vaeFieldDescription": "Подмодель VAE.", + "imageFieldDescription": "Изображения могут передаваться между узлами.", + "outputNode": "Выходной узел", + "collectionOrScalarFieldType": "Коллекция | Скаляр {{name}}", + "betaDesc": "Этот вызов находится в бета-версии. Пока он не станет стабильным, в нем могут происходить изменения при обновлении приложений. Мы планируем поддерживать этот вызов в течение длительного времени.", + "nodeVersion": "Версия узла", + "loadingNodes": "Загрузка узлов...", + "snapToGridHelp": "Привязка узлов к сетке при перемещении", + "workflowSettings": "Настройки редактора рабочих процессов", + "sDXLRefinerModelField": "Модель перерисовщик", + "loRAModelField": "LoRA", + "deletedInvalidEdge": "Удалено недопустимое ребро {{source}} -> {{target}}", + "unableToParseEdge": "Невозможно разобрать край", + "unknownInput": "Неизвестный вход: {{name}}", + "oNNXModelFieldDescription": "Поле модели ONNX.", + "imageCollection": "Коллекция изображений" + }, + "controlnet": { + "amult": "a_mult", + "contentShuffleDescription": "Перетасовывает содержимое изображения", + "bgth": "bg_th", + "contentShuffle": "Перетасовка содержимого", + "beginEndStepPercent": "Процент начала/конца шага", + "duplicate": "Дублировать", + "balanced": "Сбалансированный", + "f": "F", + "depthMidasDescription": "Генерация карты глубины с использованием Midas", + "control": "Контроль", + "coarse": "Грубость обработки", + "crop": "Обрезка", + "depthMidas": "Глубина (Midas)", + "enableControlnet": "Включить ControlNet", + "detectResolution": "Определить разрешение", + "controlMode": "Режим контроля", + "cannyDescription": "Детектор границ Canny", + "depthZoe": "Глубина (Zoe)", + "autoConfigure": "Автонастройка процессора", + "delete": "Удалить", + "canny": "Canny", + "depthZoeDescription": "Генерация карты глубины с использованием Zoe", + "resize": "Изменить размер", + "showAdvanced": "Показать расширенные", + "addT2IAdapter": "Добавить $t(common.t2iAdapter)", + "importImageFromCanvas": "Импортировать изображение с холста", + "lineartDescription": "Конвертация изображения в контурный рисунок", + "normalBae": "Обычный BAE", + "importMaskFromCanvas": "Импортировать маску с холста", + "hideAdvanced": "Скрыть расширенные", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) включен, $t(common.t2iAdapter)s отключен", + "ipAdapterModel": "Модель адаптера", + "resetControlImage": "Сбросить контрольное изображение", + "prompt": "Запрос", + "controlnet": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.controlNet)", + "openPoseDescription": "Оценка позы человека с помощью Openpose", + "resizeMode": "Режим изменения размера", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) включен, $t(common.controlNet)s отключен", + "weight": "Вес", + "selectModel": "Выберите модель", + "w": "В", + "processor": "Процессор", + "addControlNet": "Добавить $t(common.controlNet)", + "none": "ничего", + "incompatibleBaseModel": "Несовместимая базовая модель:", + "controlNetT2IMutexDesc": "$t(common.controlNet) и $t(common.t2iAdapter) одновременно в настоящее время не поддерживаются.", + "ip_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.ipAdapter)", + "pidiDescription": "PIDI-обработка изображений", + "mediapipeFace": "Лицо Mediapipe", + "fill": "Заполнить", + "addIPAdapter": "Добавить $t(common.ipAdapter)", + "lineart": "Контурный рисунок", + "colorMapDescription": "Создает карту цветов из изображения", + "lineartAnimeDescription": "Создание контурных рисунков в стиле аниме", + "t2i_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.t2iAdapter)", + "minConfidence": "Минимальная уверенность", + "imageResolution": "Разрешение изображения", + "colorMap": "Цвет", + "lowThreshold": "Низкий порог", + "highThreshold": "Высокий порог", + "normalBaeDescription": "Обычная обработка BAE", + "noneDescription": "Обработка не применяется", + "saveControlImage": "Сохранить контрольное изображение", + "toggleControlNet": "Переключить эту ControlNet", + "controlAdapter_one": "Адаптер контроля", + "controlAdapter_few": "Адаптера контроля", + "controlAdapter_many": "Адаптеров контроля", + "safe": "Безопасный", + "colorMapTileSize": "Размер плитки", + "lineartAnime": "Контурный рисунок в стиле аниме", + "ipAdapterImageFallback": "Изображение IP Adapter не выбрано", + "mediapipeFaceDescription": "Обнаружение лиц с помощью Mediapipe", + "hedDescription": "Целостное обнаружение границ", + "setControlImageDimensions": "Установите размеры контрольного изображения на Ш/В", + "scribble": "каракули", + "resetIPAdapterImage": "Сбросить изображение IP Adapter", + "handAndFace": "Руки и Лицо", + "enableIPAdapter": "Включить IP Adapter", + "maxFaces": "Макс Лица", + "mlsdDescription": "Минималистичный детектор отрезков линии" + }, + "boards": { + "autoAddBoard": "Авто добавление Доски", + "topMessage": "Эта доска содержит изображения, используемые в следующих функциях:", + "move": "Перемещение", + "menuItemAutoAdd": "Авто добавление на эту доску", + "myBoard": "Моя Доска", + "searchBoard": "Поиск Доски...", + "noMatching": "Нет подходящих Досок", + "selectBoard": "Выбрать Доску", + "cancel": "Отменить", + "addBoard": "Добавить Доску", + "bottomMessage": "Удаление этой доски и ее изображений приведет к сбросу всех функций, использующихся их в данный момент.", + "uncategorized": "Без категории", + "changeBoard": "Изменить Доску", + "loading": "Загрузка...", + "clearSearch": "Очистить поиск", + "deleteBoardOnly": "Удалить только доску", + "movingImagesToBoard_one": "Перемещаем {{count}} изображение на доску:", + "movingImagesToBoard_few": "Перемещаем {{count}} изображения на доску:", + "movingImagesToBoard_many": "Перемещаем {{count}} изображений на доску:", + "downloadBoard": "Скачать доску", + "deleteBoard": "Удалить доску", + "deleteBoardAndImages": "Удалить доску и изображения", + "deletedBoardsCannotbeRestored": "Удаленные доски не подлежат восстановлению" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "Используйте разные сиды для каждого изображения", + "perIterationLabel": "Сид на итерацию", + "perIterationDesc": "Используйте разные сиды для каждой итерации", + "perPromptLabel": "Сид для каждого изображения", + "label": "Поведение сида" + }, + "enableDynamicPrompts": "Динамические запросы", + "combinatorial": "Комбинаторная генерация", + "maxPrompts": "Максимум запросов", + "promptsPreview": "Предпросмотр запросов", + "promptsWithCount_one": "{{count}} Запрос", + "promptsWithCount_few": "{{count}} Запроса", + "promptsWithCount_many": "{{count}} Запросов", + "dynamicPrompts": "Динамические запросы" + }, + "popovers": { + "noiseUseCPU": { + "paragraphs": [ + "Определяет, генерируется ли шум на CPU или на GPU.", + "Если включен шум CPU, определенное начальное число будет создавать одно и то же изображение на любом компьютере.", + "Включение шума CPU не влияет на производительность." + ], + "heading": "Использовать шум CPU" + }, + "paramScheduler": { + "paragraphs": [ + "Планировщик определяет, как итеративно добавлять шум к изображению или как обновлять образец на основе выходных данных модели." + ], + "heading": "Планировщик" + }, + "scaleBeforeProcessing": { + "paragraphs": [ + "Масштабирует выбранную область до размера, наиболее подходящего для модели перед процессом создания изображения." + ], + "heading": "Масштабирование перед обработкой" + }, + "compositingMaskAdjustments": { + "heading": "Регулировка маски", + "paragraphs": [ + "Отрегулируйте маску." + ] + }, + "paramRatio": { + "heading": "Соотношение сторон", + "paragraphs": [ + "Соотношение сторон создаваемого изображения.", + "Размер изображения (в пикселях), эквивалентный 512x512, рекомендуется для моделей SD1.5, а размер, эквивалентный 1024x1024, рекомендуется для моделей SDXL." + ] + }, + "compositingCoherenceSteps": { + "heading": "Шаги", + "paragraphs": [ + null, + "То же, что и основной параметр «Шаги»." + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "Динамические запросы превращают одно приглашение на множество.", + "Базовый синтакиси: \"a {red|green|blue} ball\". В итоге будет 3 запроса: \"a red ball\", \"a green ball\" и \"a blue ball\".", + "Вы можете использовать синтаксис столько раз, сколько захотите в одном запросе, но обязательно контролируйте количество генерируемых запросов с помощью параметра «Максимальное количество запросов»." + ], + "heading": "Динамические запросы" + }, + "paramVAE": { + "paragraphs": [ + "Модель, используемая для преобразования вывода AI в конечное изображение." + ], + "heading": "VAE" + }, + "compositingBlur": { + "heading": "Размытие", + "paragraphs": [ + "Радиус размытия маски." + ] + }, + "paramIterations": { + "paragraphs": [ + "Количество изображений, которые нужно сгенерировать.", + "Если динамические подсказки включены, каждое из подсказок будет генерироваться столько раз." + ], + "heading": "Итерации" + }, + "paramVAEPrecision": { + "heading": "Точность VAE", + "paragraphs": [ + "Точность, используемая во время кодирования и декодирования VAE. Точность FP16/половина более эффективна за счет незначительных изменений изображения." + ] + }, + "compositingCoherenceMode": { + "heading": "Режим" + }, + "paramSeed": { + "paragraphs": [ + "Управляет стартовым шумом, используемым для генерации.", + "Отключите «Случайное начальное число», чтобы получить идентичные результаты с теми же настройками генерации." + ], + "heading": "Сид" + }, + "controlNetResizeMode": { + "heading": "Режим изменения размера", + "paragraphs": [ + "Как изображение ControlNet будет соответствовать размеру выходного изображения." + ] + }, + "controlNetBeginEnd": { + "paragraphs": [ + "На каких этапах процесса шумоподавления будет применена ControlNet.", + "ControlNet, применяемые в начале процесса, направляют композицию, а ControlNet, применяемые в конце, направляют детали." + ], + "heading": "Процент начала/конца шага" + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "Управляет использованием сида при создании запросов.", + "Для каждой итерации будет использоваться уникальный сид. Используйте это, чтобы изучить варианты запросов для одного сида.", + "Например, если у вас 5 запросов, каждое изображение будет использовать один и то же сид.", + "для каждого изображения будет использоваться уникальный сид. Это обеспечивает большую вариативность." + ], + "heading": "Поведение сида" + }, + "clipSkip": { + "paragraphs": [ + "Выберите, сколько слоев модели CLIP нужно пропустить.", + "Некоторые модели работают лучше с определенными настройками пропуска CLIP.", + "Более высокое значение обычно приводит к менее детализированному изображению." + ], + "heading": "CLIP пропуск" + }, + "paramModel": { + "heading": "Модель", + "paragraphs": [ + "Модель, используемая для шагов шумоподавления.", + "Различные модели обычно обучаются, чтобы специализироваться на достижении определенных эстетических результатов и содержания." + ] + }, + "compositingCoherencePass": { + "heading": "Согласованность", + "paragraphs": [ + "Второй этап шумоподавления помогает исправить шов между изначальным изображением и перерисованной или расширенной частью." + ] + }, + "paramDenoisingStrength": { + "paragraphs": [ + "Количество шума, добавляемого к входному изображению.", + "0 приведет к идентичному изображению, а 1 - к совершенно новому." + ], + "heading": "Шумоподавление" + }, + "compositingStrength": { + "heading": "Сила", + "paragraphs": [ + null, + "То же, что параметр «Сила шумоподавления img2img»." + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "Stable Diffusion пытается избежать указанных в отрицательном запросе концепций. Используйте это, чтобы исключить качества или объекты из вывода.", + "Поддерживает синтаксис Compel и встраивания." + ], + "heading": "Негативный запрос" + }, + "compositingBlurMethod": { + "heading": "Метод размытия", + "paragraphs": [ + "Метод размытия, примененный к замаскированной области." + ] + }, + "dynamicPromptsMaxPrompts": { + "heading": "Макс. запросы", + "paragraphs": [ + "Ограничивает количество запросов, которые могут быть созданы с помощью динамических запросов." + ] + }, + "paramCFGRescaleMultiplier": { + "heading": "Множитель масштабирования CFG", + "paragraphs": [ + "Множитель масштабирования CFG, используемый для моделей, обученных с использованием нулевого терминального SNR (ztsnr). Рекомендуемое значение 0,7." + ] + }, + "infillMethod": { + "paragraphs": [ + "Метод заполнения выбранной области." + ], + "heading": "Метод заполнения" + }, + "controlNetWeight": { + "heading": "Вес", + "paragraphs": [ + "Насколько сильно ControlNet повлияет на созданное изображение." + ] + }, + "controlNet": { + "heading": "ControlNet", + "paragraphs": [ + "Сети ControlNets обеспечивают руководство процессом генерации, помогая создавать изображения с контролируемой композицией, структурой или стилем, в зависимости от выбранной модели." + ] + }, + "paramCFGScale": { + "heading": "Шкала точности (CFG)", + "paragraphs": [ + "Контролирует, насколько ваш запрос влияет на процесс генерации." + ] + }, + "controlNetControlMode": { + "paragraphs": [ + "Придает больший вес либо запросу, либо ControlNet." + ], + "heading": "Режим управления" + }, + "paramSteps": { + "heading": "Шаги", + "paragraphs": [ + "Количество шагов, которые будут выполнены в ходе генерации.", + "Большее количество шагов обычно приводит к созданию более качественных изображений, но требует больше времени на создание." + ] + }, + "paramPositiveConditioning": { + "heading": "Запрос", + "paragraphs": [ + "Направляет процесс генерации. Вы можете использовать любые слова и фразы.", + "Большинство моделей Stable Diffusion работают только с запросом на английском языке, но бывают исключения." + ] + }, + "lora": { + "heading": "Вес LoRA", + "paragraphs": [ + "Более высокий вес LoRA приведет к большему влиянию на конечное изображение." + ] + } + }, + "metadata": { + "seamless": "Бесшовность", + "positivePrompt": "Запрос", + "negativePrompt": "Негативный запрос", + "generationMode": "Режим генерации", + "Threshold": "Шумовой порог", + "metadata": "Метаданные", + "strength": "Сила img2img", + "seed": "Сид", + "imageDetails": "Детали изображения", + "perlin": "Шум Перлига", + "model": "Модель", + "noImageDetails": "Детали изображения не найдены", + "hiresFix": "Оптимизация высокого разрешения", + "cfgScale": "Шкала точности", + "fit": "Соответствие изображения к изображению", + "initImage": "Исходное изображение", + "recallParameters": "Вызов параметров", + "height": "Высота", + "variations": "Пары сид-высота", + "noMetaData": "Метаданные не найдены", + "width": "Ширина", + "vae": "VAE", + "createdBy": "Сделано", + "workflow": "Рабочий процесс", + "steps": "Шаги", + "scheduler": "Планировщик", + "noRecallParameters": "Параметры для вызова не найдены", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)" + }, + "queue": { + "status": "Статус", + "pruneSucceeded": "Из очереди удалено {{item_count}} выполненных элементов", + "cancelTooltip": "Отменить текущий элемент", + "queueEmpty": "Очередь пуста", + "pauseSucceeded": "Рендеринг приостановлен", + "in_progress": "В процессе", + "queueFront": "Добавить в начало очереди", + "notReady": "Невозможно поставить в очередь", + "batchFailedToQueue": "Не удалось поставить пакет в очередь", + "completed": "Выполнено", + "queueBack": "Добавить в очередь", + "batchValues": "Пакетные значения", + "cancelFailed": "Проблема с отменой элемента", + "queueCountPrediction": "Добавить {{predicted}} в очередь", + "batchQueued": "Пакетная очередь", + "pauseFailed": "Проблема с приостановкой рендеринга", + "clearFailed": "Проблема с очисткой очереди", + "queuedCount": "{{pending}} Ожидание", + "front": "передний", + "clearSucceeded": "Очередь очищена", + "pause": "Пауза", + "pruneTooltip": "Удалить {{item_count}} выполненных задач", + "cancelSucceeded": "Элемент отменен", + "batchQueuedDesc_one": "Добавлен {{count}} сеанс в {{direction}} очереди", + "batchQueuedDesc_few": "Добавлено {{count}} сеанса в {{direction}} очереди", + "batchQueuedDesc_many": "Добавлено {{count}} сеансов в {{direction}} очереди", + "graphQueued": "График поставлен в очередь", + "queue": "Очередь", + "batch": "Пакет", + "clearQueueAlertDialog": "Очистка очереди немедленно отменяет все элементы обработки и полностью очищает очередь.", + "pending": "В ожидании", + "completedIn": "Завершено за", + "resumeFailed": "Проблема с возобновлением рендеринга", + "clear": "Очистить", + "prune": "Сократить", + "total": "Всего", + "canceled": "Отменено", + "pruneFailed": "Проблема с сокращением очереди", + "cancelBatchSucceeded": "Пакет отменен", + "clearTooltip": "Отменить все и очистить очередь", + "current": "Текущий", + "pauseTooltip": "Приостановить рендеринг", + "failed": "Неудачно", + "cancelItem": "Отменить элемент", + "next": "Следующий", + "cancelBatch": "Отменить пакет", + "back": "задний", + "batchFieldValues": "Пакетные значения полей", + "cancel": "Отмена", + "session": "Сессия", + "time": "Время", + "queueTotal": "{{total}} Всего", + "resumeSucceeded": "Рендеринг возобновлен", + "enqueueing": "Пакетная очередь", + "resumeTooltip": "Возобновить рендеринг", + "queueMaxExceeded": "Превышено максимальное значение {{max_queue_size}}, будет пропущен {{skip}}", + "resume": "Продолжить", + "cancelBatchFailed": "Проблема с отменой пакета", + "clearQueueAlertDialog2": "Вы уверены, что хотите очистить очередь?", + "item": "Элемент", + "graphFailedToQueue": "Не удалось поставить график в очередь" + }, + "sdxl": { + "refinerStart": "Запуск перерисовщика", + "selectAModel": "Выберите модель", + "scheduler": "Планировщик", + "cfgScale": "Шкала точности (CFG)", + "negStylePrompt": "Негативный запрос стиля", + "noModelsAvailable": "Нет доступных моделей", + "refiner": "Перерисовщик", + "negAestheticScore": "Отрицательная эстетическая оценка", + "useRefiner": "Использовать перерисовщик", + "denoisingStrength": "Шумоподавление", + "refinermodel": "Модель перерисовщик", + "posAestheticScore": "Положительная эстетическая оценка", + "concatPromptStyle": "Объединение запроса и стиля", + "loading": "Загрузка...", + "steps": "Шаги", + "posStylePrompt": "Запрос стиля" + }, + "invocationCache": { + "useCache": "Использовать кэш", + "disable": "Отключить", + "misses": "Промахи в кэше", + "enableFailed": "Проблема с включением кэша вызовов", + "invocationCache": "Кэш вызовов", + "clearSucceeded": "Кэш вызовов очищен", + "enableSucceeded": "Кэш вызовов включен", + "clearFailed": "Проблема с очисткой кэша вызовов", + "hits": "Попадания в кэш", + "disableSucceeded": "Кэш вызовов отключен", + "disableFailed": "Проблема с отключением кэша вызовов", + "enable": "Включить", + "clear": "Очистить", + "maxCacheSize": "Максимальный размер кэша", + "cacheSize": "Размер кэша" + }, + "workflows": { + "saveWorkflowAs": "Сохранить рабочий процесс как", + "workflowEditorMenu": "Меню редактора рабочего процесса", + "noSystemWorkflows": "Нет системных рабочих процессов", + "workflowName": "Имя рабочего процесса", + "noUserWorkflows": "Нет пользовательских рабочих процессов", + "defaultWorkflows": "Рабочие процессы по умолчанию", + "saveWorkflow": "Сохранить рабочий процесс", + "openWorkflow": "Открытый рабочий процесс", + "clearWorkflowSearchFilter": "Очистить фильтр поиска рабочих процессов", + "workflowLibrary": "Библиотека", + "downloadWorkflow": "Скачать рабочий процесс", + "noRecentWorkflows": "Нет недавних рабочих процессов", + "workflowSaved": "Рабочий процесс сохранен", + "workflowIsOpen": "Рабочий процесс открыт", + "unnamedWorkflow": "Безымянный рабочий процесс", + "savingWorkflow": "Сохранение рабочего процесса...", + "problemLoading": "Проблема с загрузкой рабочих процессов", + "loading": "Загрузка рабочих процессов", + "searchWorkflows": "Поиск рабочих процессов", + "problemSavingWorkflow": "Проблема с сохранением рабочего процесса", + "deleteWorkflow": "Удалить рабочий процесс", + "workflows": "Рабочие процессы", + "noDescription": "Без описания", + "uploadWorkflow": "Загрузить рабочий процесс", + "userWorkflows": "Мои рабочие процессы" + }, + "embedding": { + "noEmbeddingsLoaded": "встраивания не загружены", + "noMatchingEmbedding": "Нет подходящих встраиваний", + "addEmbedding": "Добавить встраивание", + "incompatibleModel": "Несовместимая базовая модель:" + }, + "hrf": { + "enableHrf": "Включить исправление высокого разрешения", + "upscaleMethod": "Метод увеличения", + "enableHrfTooltip": "Сгенерируйте с более низким начальным разрешением, увеличьте его до базового разрешения, а затем запустите Image-to-Image.", + "metadata": { + "strength": "Сила исправления высокого разрешения", + "enabled": "Исправление высокого разрешения включено", + "method": "Метод исправления высокого разрешения" + }, + "hrf": "Исправление высокого разрешения", + "hrfStrength": "Сила исправления высокого разрешения", + "strengthTooltip": "Более низкие значения приводят к меньшему количеству деталей, что может уменьшить потенциальные артефакты." + }, + "models": { + "noLoRAsLoaded": "LoRA не загружены", + "noMatchingModels": "Нет подходящих моделей", + "esrganModel": "Модель ESRGAN", + "loading": "загрузка", + "noMatchingLoRAs": "Нет подходящих LoRA", + "noLoRAsAvailable": "Нет доступных LoRA", + "noModelsAvailable": "Нет доступных моделей", + "addLora": "Добавить LoRA", + "selectModel": "Выберите модель", + "noRefinerModelsInstalled": "Модели SDXL Refiner не установлены", + "noLoRAsInstalled": "Нет установленных LoRA", + "selectLoRA": "Выберите LoRA" + }, + "app": { + "storeNotInitialized": "Магазин не инициализирован" + } +} diff --git a/invokeai/frontend/web/dist/locales/sv.json b/invokeai/frontend/web/dist/locales/sv.json new file mode 100644 index 0000000000..eef46c4513 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/sv.json @@ -0,0 +1,246 @@ +{ + "accessibility": { + "copyMetadataJson": "Kopiera metadata JSON", + "zoomIn": "Zooma in", + "exitViewer": "Avslutningsvisare", + "modelSelect": "Välj modell", + "uploadImage": "Ladda upp bild", + "invokeProgressBar": "Invoke förloppsmätare", + "nextImage": "Nästa bild", + "toggleAutoscroll": "Växla automatisk rullning", + "flipHorizontally": "Vänd vågrätt", + "flipVertically": "Vänd lodrätt", + "zoomOut": "Zooma ut", + "toggleLogViewer": "Växla logvisare", + "reset": "Starta om", + "previousImage": "Föregående bild", + "useThisParameter": "Använd denna parametern", + "rotateCounterClockwise": "Rotera moturs", + "rotateClockwise": "Rotera medurs", + "modifyConfig": "Ändra konfiguration", + "showOptionsPanel": "Visa inställningspanelen" + }, + "common": { + "hotkeysLabel": "Snabbtangenter", + "reportBugLabel": "Rapportera bugg", + "githubLabel": "Github", + "discordLabel": "Discord", + "settingsLabel": "Inställningar", + "langEnglish": "Engelska", + "langDutch": "Nederländska", + "langFrench": "Franska", + "langGerman": "Tyska", + "langItalian": "Italienska", + "langArabic": "العربية", + "langHebrew": "עברית", + "langPolish": "Polski", + "langPortuguese": "Português", + "langBrPortuguese": "Português do Brasil", + "langSimplifiedChinese": "简体中文", + "langJapanese": "日本語", + "langKorean": "한국어", + "langRussian": "Русский", + "unifiedCanvas": "Förenad kanvas", + "nodesDesc": "Ett nodbaserat system för bildgenerering är under utveckling. Håll utkik för uppdateringar om denna fantastiska funktion.", + "langUkranian": "Украї́нська", + "langSpanish": "Español", + "postProcessDesc2": "Ett dedikerat användargränssnitt kommer snart att släppas för att underlätta mer avancerade arbetsflöden av efterbehandling.", + "trainingDesc1": "Ett dedikerat arbetsflöde för träning av dina egna inbäddningar och kontrollpunkter genom Textual Inversion eller Dreambooth från webbgränssnittet.", + "trainingDesc2": "InvokeAI stöder redan träning av anpassade inbäddningar med hjälp av Textual Inversion genom huvudscriptet.", + "upload": "Ladda upp", + "close": "Stäng", + "cancel": "Avbryt", + "accept": "Acceptera", + "statusDisconnected": "Frånkopplad", + "statusGeneratingTextToImage": "Genererar text till bild", + "statusGeneratingImageToImage": "Genererar Bild till bild", + "statusGeneratingInpainting": "Genererar Måla i", + "statusGenerationComplete": "Generering klar", + "statusModelConverted": "Modell konverterad", + "statusMergingModels": "Sammanfogar modeller", + "loading": "Laddar", + "loadingInvokeAI": "Laddar Invoke AI", + "statusRestoringFaces": "Återskapar ansikten", + "languagePickerLabel": "Språkväljare", + "txt2img": "Text till bild", + "nodes": "Noder", + "img2img": "Bild till bild", + "postprocessing": "Efterbehandling", + "postProcessing": "Efterbehandling", + "load": "Ladda", + "training": "Träning", + "postProcessDesc1": "Invoke AI erbjuder ett brett utbud av efterbehandlingsfunktioner. Uppskalning och ansiktsåterställning finns redan tillgängligt i webbgränssnittet. Du kommer åt dem ifrån Avancerade inställningar-menyn under Bild till bild-fliken. Du kan också behandla bilder direkt genom att använda knappen bildåtgärder ovanför nuvarande bild eller i bildvisaren.", + "postProcessDesc3": "Invoke AI's kommandotolk erbjuder många olika funktioner, bland annat \"Förstora\".", + "statusGenerating": "Genererar", + "statusError": "Fel", + "back": "Bakåt", + "statusConnected": "Ansluten", + "statusPreparing": "Förbereder", + "statusProcessingCanceled": "Bearbetning avbruten", + "statusProcessingComplete": "Bearbetning färdig", + "statusGeneratingOutpainting": "Genererar Fyll ut", + "statusIterationComplete": "Itterering klar", + "statusSavingImage": "Sparar bild", + "statusRestoringFacesGFPGAN": "Återskapar ansikten (GFPGAN)", + "statusRestoringFacesCodeFormer": "Återskapar ansikten (CodeFormer)", + "statusUpscaling": "Skala upp", + "statusUpscalingESRGAN": "Uppskalning (ESRGAN)", + "statusModelChanged": "Modell ändrad", + "statusLoadingModel": "Laddar modell", + "statusConvertingModel": "Konverterar modell", + "statusMergedModels": "Modeller sammanfogade" + }, + "gallery": { + "generations": "Generationer", + "showGenerations": "Visa generationer", + "uploads": "Uppladdningar", + "showUploads": "Visa uppladdningar", + "galleryImageSize": "Bildstorlek", + "allImagesLoaded": "Alla bilder laddade", + "loadMore": "Ladda mer", + "galleryImageResetSize": "Återställ storlek", + "gallerySettings": "Galleriinställningar", + "maintainAspectRatio": "Behåll bildförhållande", + "noImagesInGallery": "Inga bilder i galleriet", + "autoSwitchNewImages": "Ändra automatiskt till nya bilder", + "singleColumnLayout": "Enkolumnslayout" + }, + "hotkeys": { + "generalHotkeys": "Allmänna snabbtangenter", + "galleryHotkeys": "Gallerisnabbtangenter", + "unifiedCanvasHotkeys": "Snabbtangenter för sammanslagskanvas", + "invoke": { + "title": "Anropa", + "desc": "Genererar en bild" + }, + "cancel": { + "title": "Avbryt", + "desc": "Avbryt bildgenerering" + }, + "focusPrompt": { + "desc": "Fokusera området för promptinmatning", + "title": "Fokusprompt" + }, + "pinOptions": { + "desc": "Nåla fast alternativpanelen", + "title": "Nåla fast alternativ" + }, + "toggleOptions": { + "title": "Växla inställningar", + "desc": "Öppna och stäng alternativpanelen" + }, + "toggleViewer": { + "title": "Växla visaren", + "desc": "Öppna och stäng bildvisaren" + }, + "toggleGallery": { + "title": "Växla galleri", + "desc": "Öppna eller stäng galleribyrån" + }, + "maximizeWorkSpace": { + "title": "Maximera arbetsyta", + "desc": "Stäng paneler och maximera arbetsyta" + }, + "changeTabs": { + "title": "Växla flik", + "desc": "Byt till en annan arbetsyta" + }, + "consoleToggle": { + "title": "Växla konsol", + "desc": "Öppna och stäng konsol" + }, + "setSeed": { + "desc": "Använd seed för nuvarande bild", + "title": "välj seed" + }, + "setParameters": { + "title": "Välj parametrar", + "desc": "Använd alla parametrar från nuvarande bild" + }, + "setPrompt": { + "desc": "Använd prompt för nuvarande bild", + "title": "Välj prompt" + }, + "restoreFaces": { + "title": "Återskapa ansikten", + "desc": "Återskapa nuvarande bild" + }, + "upscale": { + "title": "Skala upp", + "desc": "Skala upp nuvarande bild" + }, + "showInfo": { + "title": "Visa info", + "desc": "Visa metadata för nuvarande bild" + }, + "sendToImageToImage": { + "title": "Skicka till Bild till bild", + "desc": "Skicka nuvarande bild till Bild till bild" + }, + "deleteImage": { + "title": "Radera bild", + "desc": "Radera nuvarande bild" + }, + "closePanels": { + "title": "Stäng paneler", + "desc": "Stäng öppna paneler" + }, + "previousImage": { + "title": "Föregående bild", + "desc": "Visa föregående bild" + }, + "nextImage": { + "title": "Nästa bild", + "desc": "Visa nästa bild" + }, + "toggleGalleryPin": { + "title": "Växla gallerinål", + "desc": "Nålar fast eller nålar av galleriet i gränssnittet" + }, + "increaseGalleryThumbSize": { + "title": "Förstora galleriets bildstorlek", + "desc": "Förstora miniatyrbildernas storlek" + }, + "decreaseGalleryThumbSize": { + "title": "Minska gelleriets bildstorlek", + "desc": "Minska miniatyrbildernas storlek i galleriet" + }, + "decreaseBrushSize": { + "desc": "Förminska storleken på kanvas- pensel eller suddgummi", + "title": "Minska penselstorlek" + }, + "increaseBrushSize": { + "title": "Öka penselstorlek", + "desc": "Öka stoleken på kanvas- pensel eller suddgummi" + }, + "increaseBrushOpacity": { + "title": "Öka penselns opacitet", + "desc": "Öka opaciteten för kanvaspensel" + }, + "decreaseBrushOpacity": { + "desc": "Minska kanvaspenselns opacitet", + "title": "Minska penselns opacitet" + }, + "moveTool": { + "title": "Flytta", + "desc": "Tillåt kanvasnavigation" + }, + "fillBoundingBox": { + "title": "Fyll ram", + "desc": "Fyller ramen med pensels färg" + }, + "keyboardShortcuts": "Snabbtangenter", + "appHotkeys": "Appsnabbtangenter", + "selectBrush": { + "desc": "Välj kanvaspensel", + "title": "Välj pensel" + }, + "selectEraser": { + "desc": "Välj kanvassuddgummi", + "title": "Välj suddgummi" + }, + "eraseBoundingBox": { + "title": "Ta bort ram" + } + } +} diff --git a/invokeai/frontend/web/dist/locales/tr.json b/invokeai/frontend/web/dist/locales/tr.json new file mode 100644 index 0000000000..0c222eecf7 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/tr.json @@ -0,0 +1,58 @@ +{ + "accessibility": { + "invokeProgressBar": "Invoke ilerleme durumu", + "nextImage": "Sonraki Resim", + "useThisParameter": "Kullanıcı parametreleri", + "copyMetadataJson": "Metadata verilerini kopyala (JSON)", + "exitViewer": "Görüntüleme Modundan Çık", + "zoomIn": "Yakınlaştır", + "zoomOut": "Uzaklaştır", + "rotateCounterClockwise": "Döndür (Saat yönünün tersine)", + "rotateClockwise": "Döndür (Saat yönünde)", + "flipHorizontally": "Yatay Çevir", + "flipVertically": "Dikey Çevir", + "modifyConfig": "Ayarları Değiştir", + "toggleAutoscroll": "Otomatik kaydırmayı aç/kapat", + "toggleLogViewer": "Günlük Görüntüleyici Aç/Kapa", + "showOptionsPanel": "Ayarlar Panelini Göster", + "modelSelect": "Model Seçin", + "reset": "Sıfırla", + "uploadImage": "Resim Yükle", + "previousImage": "Önceki Resim", + "menu": "Menü" + }, + "common": { + "hotkeysLabel": "Kısayol Tuşları", + "languagePickerLabel": "Dil Seçimi", + "reportBugLabel": "Hata Bildir", + "githubLabel": "Github", + "discordLabel": "Discord", + "settingsLabel": "Ayarlar", + "langArabic": "Arapça", + "langEnglish": "İngilizce", + "langDutch": "Hollandaca", + "langFrench": "Fransızca", + "langGerman": "Almanca", + "langItalian": "İtalyanca", + "langJapanese": "Japonca", + "langPolish": "Lehçe", + "langPortuguese": "Portekizce", + "langBrPortuguese": "Portekizcr (Brezilya)", + "langRussian": "Rusça", + "langSimplifiedChinese": "Çince (Basit)", + "langUkranian": "Ukraynaca", + "langSpanish": "İspanyolca", + "txt2img": "Metinden Resime", + "img2img": "Resimden Metine", + "linear": "Çizgisel", + "nodes": "Düğümler", + "postprocessing": "İşlem Sonrası", + "postProcessing": "İşlem Sonrası", + "postProcessDesc2": "Daha gelişmiş özellikler için ve iş akışını kolaylaştırmak için özel bir kullanıcı arayüzü çok yakında yayınlanacaktır.", + "postProcessDesc3": "Invoke AI komut satırı arayüzü, bir çok yeni özellik sunmaktadır.", + "langKorean": "Korece", + "unifiedCanvas": "Akıllı Tuval", + "nodesDesc": "Görüntülerin oluşturulmasında hazırladığımız yeni bir sistem geliştirme aşamasındadır. Bu harika özellikler ve çok daha fazlası için bizi takip etmeye devam edin.", + "postProcessDesc1": "Invoke AI son kullanıcıya yönelik bir çok özellik sunar. Görüntü kalitesi yükseltme, yüz restorasyonu WebUI üzerinden kullanılabilir. Metinden resime ve resimden metne araçlarına gelişmiş seçenekler menüsünden ulaşabilirsiniz. İsterseniz mevcut görüntü ekranının üzerindeki veya görüntüleyicideki görüntüyü doğrudan düzenleyebilirsiniz." + } +} diff --git a/invokeai/frontend/web/dist/locales/uk.json b/invokeai/frontend/web/dist/locales/uk.json new file mode 100644 index 0000000000..a85faee727 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/uk.json @@ -0,0 +1,619 @@ +{ + "common": { + "hotkeysLabel": "Гарячi клавіші", + "languagePickerLabel": "Мова", + "reportBugLabel": "Повідомити про помилку", + "settingsLabel": "Налаштування", + "img2img": "Зображення із зображення (img2img)", + "unifiedCanvas": "Універсальне полотно", + "nodes": "Вузли", + "langUkranian": "Украї́нська", + "nodesDesc": "Система генерації зображень на основі нодів (вузлів) вже розробляється. Слідкуйте за новинами про цю чудову функцію.", + "postProcessing": "Постобробка", + "postProcessDesc1": "Invoke AI пропонує широкий спектр функцій постобробки. Збільшення зображення (upscale) та відновлення облич вже доступні в інтерфейсі. Отримайте доступ до них з меню 'Додаткові параметри' на вкладках 'Зображення із тексту' та 'Зображення із зображення'. Обробляйте зображення безпосередньо, використовуючи кнопки дій із зображеннями над поточним зображенням або в режимі перегляду.", + "postProcessDesc2": "Найближчим часом буде випущено спеціальний інтерфейс для більш сучасних процесів постобробки.", + "postProcessDesc3": "Інтерфейс командного рядка Invoke AI пропонує різні інші функції, включаючи збільшення Embiggen.", + "training": "Навчання", + "trainingDesc1": "Спеціальний інтерфейс для навчання власних моделей з використанням Textual Inversion та Dreambooth.", + "trainingDesc2": "InvokeAI вже підтримує навчання моделей за допомогою TI, через інтерфейс командного рядка.", + "upload": "Завантажити", + "close": "Закрити", + "load": "Завантажити", + "statusConnected": "Підключено", + "statusDisconnected": "Відключено", + "statusError": "Помилка", + "statusPreparing": "Підготування", + "statusProcessingCanceled": "Обробка перервана", + "statusProcessingComplete": "Обробка завершена", + "statusGenerating": "Генерація", + "statusGeneratingTextToImage": "Генерація зображення із тексту", + "statusGeneratingImageToImage": "Генерація зображення із зображення", + "statusGeneratingInpainting": "Домальовка всередині", + "statusGeneratingOutpainting": "Домальовка зовні", + "statusGenerationComplete": "Генерація завершена", + "statusIterationComplete": "Iтерація завершена", + "statusSavingImage": "Збереження зображення", + "statusRestoringFaces": "Відновлення облич", + "statusRestoringFacesGFPGAN": "Відновлення облич (GFPGAN)", + "statusRestoringFacesCodeFormer": "Відновлення облич (CodeFormer)", + "statusUpscaling": "Збільшення", + "statusUpscalingESRGAN": "Збільшення (ESRGAN)", + "statusLoadingModel": "Завантаження моделі", + "statusModelChanged": "Модель змінено", + "cancel": "Скасувати", + "accept": "Підтвердити", + "back": "Назад", + "postprocessing": "Постобробка", + "statusModelConverted": "Модель сконвертована", + "statusMergingModels": "Злиття моделей", + "loading": "Завантаження", + "loadingInvokeAI": "Завантаження Invoke AI", + "langHebrew": "Іврит", + "langKorean": "Корейська", + "langPortuguese": "Португальська", + "langArabic": "Арабська", + "langSimplifiedChinese": "Китайська (спрощена)", + "langSpanish": "Іспанська", + "langEnglish": "Англійська", + "langGerman": "Німецька", + "langItalian": "Італійська", + "langJapanese": "Японська", + "langPolish": "Польська", + "langBrPortuguese": "Португальська (Бразилія)", + "langRussian": "Російська", + "githubLabel": "Github", + "txt2img": "Текст в зображення (txt2img)", + "discordLabel": "Discord", + "langDutch": "Голландська", + "langFrench": "Французька", + "statusMergedModels": "Моделі об'єднані", + "statusConvertingModel": "Конвертація моделі", + "linear": "Лінійна обробка" + }, + "gallery": { + "generations": "Генерації", + "showGenerations": "Показувати генерації", + "uploads": "Завантаження", + "showUploads": "Показувати завантаження", + "galleryImageSize": "Розмір зображень", + "galleryImageResetSize": "Аатоматичний розмір", + "gallerySettings": "Налаштування галереї", + "maintainAspectRatio": "Зберігати пропорції", + "autoSwitchNewImages": "Автоматично вибирати нові", + "singleColumnLayout": "Одна колонка", + "allImagesLoaded": "Всі зображення завантажені", + "loadMore": "Завантажити більше", + "noImagesInGallery": "Зображень немає" + }, + "hotkeys": { + "keyboardShortcuts": "Клавіатурні скорочення", + "appHotkeys": "Гарячі клавіші програми", + "generalHotkeys": "Загальні гарячі клавіші", + "galleryHotkeys": "Гарячі клавіші галереї", + "unifiedCanvasHotkeys": "Гарячі клавіші універсального полотна", + "invoke": { + "title": "Invoke", + "desc": "Згенерувати зображення" + }, + "cancel": { + "title": "Скасувати", + "desc": "Скасувати генерацію зображення" + }, + "focusPrompt": { + "title": "Переключитися на введення запиту", + "desc": "Перемикання на область введення запиту" + }, + "toggleOptions": { + "title": "Показати/приховати параметри", + "desc": "Відкривати і закривати панель параметрів" + }, + "pinOptions": { + "title": "Закріпити параметри", + "desc": "Закріпити панель параметрів" + }, + "toggleViewer": { + "title": "Показати перегляд", + "desc": "Відкривати і закривати переглядач зображень" + }, + "toggleGallery": { + "title": "Показати галерею", + "desc": "Відкривати і закривати скриньку галереї" + }, + "maximizeWorkSpace": { + "title": "Максимізувати робочий простір", + "desc": "Приховати панелі і максимізувати робочу область" + }, + "changeTabs": { + "title": "Переключити вкладку", + "desc": "Переключитися на іншу робочу область" + }, + "consoleToggle": { + "title": "Показати консоль", + "desc": "Відкривати і закривати консоль" + }, + "setPrompt": { + "title": "Використовувати запит", + "desc": "Використати запит із поточного зображення" + }, + "setSeed": { + "title": "Використовувати сід", + "desc": "Використовувати сід поточного зображення" + }, + "setParameters": { + "title": "Використовувати всі параметри", + "desc": "Використовувати всі параметри поточного зображення" + }, + "restoreFaces": { + "title": "Відновити обличчя", + "desc": "Відновити обличчя на поточному зображенні" + }, + "upscale": { + "title": "Збільшення", + "desc": "Збільшити поточне зображення" + }, + "showInfo": { + "title": "Показати метадані", + "desc": "Показати метадані з поточного зображення" + }, + "sendToImageToImage": { + "title": "Відправити в img2img", + "desc": "Надіслати поточне зображення в Image To Image" + }, + "deleteImage": { + "title": "Видалити зображення", + "desc": "Видалити поточне зображення" + }, + "closePanels": { + "title": "Закрити панелі", + "desc": "Закриває відкриті панелі" + }, + "previousImage": { + "title": "Попереднє зображення", + "desc": "Відображати попереднє зображення в галереї" + }, + "nextImage": { + "title": "Наступне зображення", + "desc": "Відображення наступного зображення в галереї" + }, + "toggleGalleryPin": { + "title": "Закріпити галерею", + "desc": "Закріплює і відкріплює галерею" + }, + "increaseGalleryThumbSize": { + "title": "Збільшити розмір мініатюр галереї", + "desc": "Збільшує розмір мініатюр галереї" + }, + "decreaseGalleryThumbSize": { + "title": "Зменшує розмір мініатюр галереї", + "desc": "Зменшує розмір мініатюр галереї" + }, + "selectBrush": { + "title": "Вибрати пензель", + "desc": "Вибирає пензель для полотна" + }, + "selectEraser": { + "title": "Вибрати ластик", + "desc": "Вибирає ластик для полотна" + }, + "decreaseBrushSize": { + "title": "Зменшити розмір пензля", + "desc": "Зменшує розмір пензля/ластика полотна" + }, + "increaseBrushSize": { + "title": "Збільшити розмір пензля", + "desc": "Збільшує розмір пензля/ластика полотна" + }, + "decreaseBrushOpacity": { + "title": "Зменшити непрозорість пензля", + "desc": "Зменшує непрозорість пензля полотна" + }, + "increaseBrushOpacity": { + "title": "Збільшити непрозорість пензля", + "desc": "Збільшує непрозорість пензля полотна" + }, + "moveTool": { + "title": "Інструмент переміщення", + "desc": "Дозволяє переміщатися по полотну" + }, + "fillBoundingBox": { + "title": "Заповнити обмежувальну рамку", + "desc": "Заповнює обмежувальну рамку кольором пензля" + }, + "eraseBoundingBox": { + "title": "Стерти обмежувальну рамку", + "desc": "Стирає область обмежувальної рамки" + }, + "colorPicker": { + "title": "Вибрати колір", + "desc": "Вибирає засіб вибору кольору полотна" + }, + "toggleSnap": { + "title": "Увімкнути прив'язку", + "desc": "Вмикає/вимикає прив'язку до сітки" + }, + "quickToggleMove": { + "title": "Швидке перемикання переміщення", + "desc": "Тимчасово перемикає режим переміщення" + }, + "toggleLayer": { + "title": "Переключити шар", + "desc": "Перемикання маски/базового шару" + }, + "clearMask": { + "title": "Очистити маску", + "desc": "Очистити всю маску" + }, + "hideMask": { + "title": "Приховати маску", + "desc": "Приховує/показує маску" + }, + "showHideBoundingBox": { + "title": "Показати/приховати обмежувальну рамку", + "desc": "Переключити видимість обмежувальної рамки" + }, + "mergeVisible": { + "title": "Об'єднати видимі", + "desc": "Об'єднати всі видимі шари полотна" + }, + "saveToGallery": { + "title": "Зберегти в галерею", + "desc": "Зберегти поточне полотно в галерею" + }, + "copyToClipboard": { + "title": "Копіювати в буфер обміну", + "desc": "Копіювати поточне полотно в буфер обміну" + }, + "downloadImage": { + "title": "Завантажити зображення", + "desc": "Завантажити вміст полотна" + }, + "undoStroke": { + "title": "Скасувати пензель", + "desc": "Скасувати мазок пензля" + }, + "redoStroke": { + "title": "Повторити мазок пензля", + "desc": "Повторити мазок пензля" + }, + "resetView": { + "title": "Вид за замовчуванням", + "desc": "Скинути вид полотна" + }, + "previousStagingImage": { + "title": "Попереднє зображення", + "desc": "Попереднє зображення" + }, + "nextStagingImage": { + "title": "Наступне зображення", + "desc": "Наступне зображення" + }, + "acceptStagingImage": { + "title": "Прийняти зображення", + "desc": "Прийняти поточне зображення" + } + }, + "modelManager": { + "modelManager": "Менеджер моделей", + "model": "Модель", + "modelAdded": "Модель додана", + "modelUpdated": "Модель оновлена", + "modelEntryDeleted": "Запис про модель видалено", + "cannotUseSpaces": "Не можна використовувати пробіли", + "addNew": "Додати нову", + "addNewModel": "Додати нову модель", + "addManually": "Додати вручну", + "manual": "Ручне", + "name": "Назва", + "nameValidationMsg": "Введіть назву моделі", + "description": "Опис", + "descriptionValidationMsg": "Введіть опис моделі", + "config": "Файл конфігурації", + "configValidationMsg": "Шлях до файлу конфігурації.", + "modelLocation": "Розташування моделі", + "modelLocationValidationMsg": "Шлях до файлу з моделлю.", + "vaeLocation": "Розтышування VAE", + "vaeLocationValidationMsg": "Шлях до VAE.", + "width": "Ширина", + "widthValidationMsg": "Початкова ширина зображень.", + "height": "Висота", + "heightValidationMsg": "Початкова висота зображень.", + "addModel": "Додати модель", + "updateModel": "Оновити модель", + "availableModels": "Доступні моделі", + "search": "Шукати", + "load": "Завантажити", + "active": "активна", + "notLoaded": "не завантажена", + "cached": "кешована", + "checkpointFolder": "Папка з моделями", + "clearCheckpointFolder": "Очистити папку з моделями", + "findModels": "Знайти моделі", + "scanAgain": "Сканувати знову", + "modelsFound": "Знайдені моделі", + "selectFolder": "Обрати папку", + "selected": "Обрані", + "selectAll": "Обрати всі", + "deselectAll": "Зняти выділення", + "showExisting": "Показувати додані", + "addSelected": "Додати обрані", + "modelExists": "Модель вже додана", + "selectAndAdd": "Оберіть і додайте моделі із списку", + "noModelsFound": "Моделі не знайдені", + "delete": "Видалити", + "deleteModel": "Видалити модель", + "deleteConfig": "Видалити конфігурацію", + "deleteMsg1": "Ви точно хочете видалити модель із InvokeAI?", + "deleteMsg2": "Це не призведе до видалення файлу моделі з диску. Позніше ви можете додати його знову.", + "allModels": "Усі моделі", + "diffusersModels": "Diffusers", + "scanForModels": "Сканувати моделі", + "convert": "Конвертувати", + "convertToDiffusers": "Конвертувати в Diffusers", + "formMessageDiffusersVAELocationDesc": "Якщо не надано, InvokeAI буде шукати файл VAE в розташуванні моделі, вказаній вище.", + "convertToDiffusersHelpText3": "Файл моделі на диску НЕ буде видалено або змінено. Ви можете знову додати його в Model Manager, якщо потрібно.", + "customConfig": "Користувальницький конфіг", + "invokeRoot": "Каталог InvokeAI", + "custom": "Користувальницький", + "modelTwo": "Модель 2", + "modelThree": "Модель 3", + "mergedModelName": "Назва об'єднаної моделі", + "alpha": "Альфа", + "interpolationType": "Тип інтерполяції", + "mergedModelSaveLocation": "Шлях збереження", + "mergedModelCustomSaveLocation": "Користувальницький шлях", + "invokeAIFolder": "Каталог InvokeAI", + "ignoreMismatch": "Ігнорувати невідповідності між вибраними моделями", + "modelMergeHeaderHelp2": "Тільки Diffusers-моделі доступні для об'єднання. Якщо ви хочете об'єднати checkpoint-моделі, спочатку перетворіть їх на Diffusers.", + "checkpointModels": "Checkpoints", + "repo_id": "ID репозиторію", + "v2_base": "v2 (512px)", + "repoIDValidationMsg": "Онлайн-репозиторій моделі", + "formMessageDiffusersModelLocationDesc": "Вкажіть хоча б одне.", + "formMessageDiffusersModelLocation": "Шлях до Diffusers-моделі", + "v2_768": "v2 (768px)", + "formMessageDiffusersVAELocation": "Шлях до VAE", + "convertToDiffusersHelpText5": "Переконайтеся, що у вас достатньо місця на диску. Моделі зазвичай займають від 4 до 7 Гб.", + "convertToDiffusersSaveLocation": "Шлях збереження", + "v1": "v1", + "convertToDiffusersHelpText6": "Ви хочете перетворити цю модель?", + "inpainting": "v1 Inpainting", + "modelConverted": "Модель перетворено", + "sameFolder": "У ту ж папку", + "statusConverting": "Перетворення", + "merge": "Об'єднати", + "mergeModels": "Об'єднати моделі", + "modelOne": "Модель 1", + "sigmoid": "Сігмоїд", + "weightedSum": "Зважена сума", + "none": "пусто", + "addDifference": "Додати різницю", + "pickModelType": "Вибрати тип моделі", + "convertToDiffusersHelpText4": "Це одноразова дія. Вона може зайняти від 30 до 60 секунд в залежності від характеристик вашого комп'ютера.", + "pathToCustomConfig": "Шлях до конфігу користувача", + "safetensorModels": "SafeTensors", + "addCheckpointModel": "Додати модель Checkpoint/Safetensor", + "addDiffuserModel": "Додати Diffusers", + "vaeRepoID": "ID репозиторію VAE", + "vaeRepoIDValidationMsg": "Онлайн-репозиторій VAE", + "modelMergeInterpAddDifferenceHelp": "У цьому режимі Модель 3 спочатку віднімається з Моделі 2. Результуюча версія змішується з Моделью 1 із встановленим вище коефіцієнтом Альфа.", + "customSaveLocation": "Користувальницький шлях збереження", + "modelMergeAlphaHelp": "Альфа впливає силу змішування моделей. Нижчі значення альфа призводять до меншого впливу другої моделі.", + "convertToDiffusersHelpText1": "Ця модель буде конвертована в формат 🧨 Diffusers.", + "convertToDiffusersHelpText2": "Цей процес замінить ваш запис в Model Manager на версію тієї ж моделі в Diffusers.", + "modelsMerged": "Моделі об'єднані", + "modelMergeHeaderHelp1": "Ви можете об'єднати до трьох різних моделей, щоб створити змішану, що відповідає вашим потребам.", + "inverseSigmoid": "Зворотній Сігмоїд" + }, + "parameters": { + "images": "Зображення", + "steps": "Кроки", + "cfgScale": "Рівень CFG", + "width": "Ширина", + "height": "Висота", + "seed": "Сід", + "randomizeSeed": "Випадковий сид", + "shuffle": "Оновити", + "noiseThreshold": "Поріг шуму", + "perlinNoise": "Шум Перліна", + "variations": "Варіації", + "variationAmount": "Кількість варіацій", + "seedWeights": "Вага сіду", + "faceRestoration": "Відновлення облич", + "restoreFaces": "Відновити обличчя", + "type": "Тип", + "strength": "Сила", + "upscaling": "Збільшення", + "upscale": "Збільшити", + "upscaleImage": "Збільшити зображення", + "scale": "Масштаб", + "otherOptions": "інші параметри", + "seamlessTiling": "Безшовний узор", + "hiresOptim": "Оптимізація High Res", + "imageFit": "Вмістити зображення", + "codeformerFidelity": "Точність", + "scaleBeforeProcessing": "Масштабувати", + "scaledWidth": "Масштаб Ш", + "scaledHeight": "Масштаб В", + "infillMethod": "Засіб заповнення", + "tileSize": "Розмір області", + "boundingBoxHeader": "Обмежуюча рамка", + "seamCorrectionHeader": "Налаштування шву", + "infillScalingHeader": "Заповнення і масштабування", + "img2imgStrength": "Сила обробки img2img", + "toggleLoopback": "Зациклити обробку", + "sendTo": "Надіслати", + "sendToImg2Img": "Надіслати у img2img", + "sendToUnifiedCanvas": "Надіслати на полотно", + "copyImageToLink": "Скопіювати посилання", + "downloadImage": "Завантажити", + "openInViewer": "Відкрити у переглядачі", + "closeViewer": "Закрити переглядач", + "usePrompt": "Використати запит", + "useSeed": "Використати сід", + "useAll": "Використати все", + "useInitImg": "Використати як початкове", + "info": "Метадані", + "initialImage": "Початкове зображення", + "showOptionsPanel": "Показати панель налаштувань", + "general": "Основне", + "cancel": { + "immediate": "Скасувати негайно", + "schedule": "Скасувати після поточної ітерації", + "isScheduled": "Відміна", + "setType": "Встановити тип скасування" + }, + "vSymmetryStep": "Крок верт. симетрії", + "hiresStrength": "Сила High Res", + "hidePreview": "Сховати попередній перегляд", + "showPreview": "Показати попередній перегляд", + "imageToImage": "Зображення до зображення", + "denoisingStrength": "Сила шумоподавлення", + "copyImage": "Копіювати зображення", + "symmetry": "Симетрія", + "hSymmetryStep": "Крок гор. симетрії" + }, + "settings": { + "models": "Моделі", + "displayInProgress": "Показувати процес генерації", + "saveSteps": "Зберігати кожні n кроків", + "confirmOnDelete": "Підтверджувати видалення", + "displayHelpIcons": "Показувати значки підказок", + "enableImageDebugging": "Увімкнути налагодження", + "resetWebUI": "Повернути початкові", + "resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.", + "resetWebUIDesc2": "Якщо зображення не відображаються в галереї або не працює ще щось, спробуйте скинути налаштування, перш ніж повідомляти про проблему на GitHub.", + "resetComplete": "Інтерфейс скинуто. Оновіть цю сторінку.", + "useSlidersForAll": "Використовувати повзунки для всіх параметрів" + }, + "toast": { + "tempFoldersEmptied": "Тимчасова папка очищена", + "uploadFailed": "Не вдалося завантажити", + "uploadFailedUnableToLoadDesc": "Неможливо завантажити файл", + "downloadImageStarted": "Завантаження зображення почалося", + "imageCopied": "Зображення скопійоване", + "imageLinkCopied": "Посилання на зображення скопійовано", + "imageNotLoaded": "Зображення не завантажено", + "imageNotLoadedDesc": "Не знайдено зображення для надсилання до img2img", + "imageSavedToGallery": "Зображення збережено в галерею", + "canvasMerged": "Полотно об'єднане", + "sentToImageToImage": "Надіслати до img2img", + "sentToUnifiedCanvas": "Надіслати на полотно", + "parametersSet": "Параметри задані", + "parametersNotSet": "Параметри не задані", + "parametersNotSetDesc": "Не знайдені метадані цього зображення.", + "parametersFailed": "Проблема із завантаженням параметрів", + "parametersFailedDesc": "Неможливо завантажити початкове зображення.", + "seedSet": "Сід заданий", + "seedNotSet": "Сід не заданий", + "seedNotSetDesc": "Не вдалося знайти сід для зображення.", + "promptSet": "Запит заданий", + "promptNotSet": "Запит не заданий", + "promptNotSetDesc": "Не вдалося знайти запит для зображення.", + "upscalingFailed": "Збільшення не вдалося", + "faceRestoreFailed": "Відновлення облич не вдалося", + "metadataLoadFailed": "Не вдалося завантажити метадані", + "initialImageSet": "Початкове зображення задане", + "initialImageNotSet": "Початкове зображення не задане", + "initialImageNotSetDesc": "Не вдалося завантажити початкове зображення", + "serverError": "Помилка сервера", + "disconnected": "Відключено від сервера", + "connected": "Підключено до сервера", + "canceled": "Обробку скасовано" + }, + "tooltip": { + "feature": { + "prompt": "Це поле для тексту запиту, включаючи об'єкти генерації та стилістичні терміни. У запит можна включити і коефіцієнти ваги (значущості токена), але консольні команди та параметри не працюватимуть.", + "gallery": "Тут відображаються генерації з папки outputs у міру їх появи.", + "other": "Ці опції включають альтернативні режими обробки для Invoke. 'Безшовний узор' створить на виході узори, що повторюються. 'Висока роздільна здатність' - це генерація у два етапи за допомогою img2img: використовуйте це налаштування, коли хочете отримати цільне зображення більшого розміру без артефактів.", + "seed": "Значення сіду впливає на початковий шум, з якого сформується зображення. Можна використовувати вже наявний сід із попередніх зображень. 'Поріг шуму' використовується для пом'якшення артефактів при високих значеннях CFG (спробуйте в діапазоні 0-10), а 'Перлін' - для додавання шуму Перліна в процесі генерації: обидва параметри служать для більшої варіативності результатів.", + "variations": "Спробуйте варіацію зі значенням від 0.1 до 1.0, щоб змінити результат для заданого сиду. Цікаві варіації сиду знаходяться між 0.1 і 0.3.", + "upscale": "Використовуйте ESRGAN, щоб збільшити зображення відразу після генерації.", + "faceCorrection": "Корекція облич за допомогою GFPGAN або Codeformer: алгоритм визначає обличчя у готовому зображенні та виправляє будь-які дефекти. Високі значення сили змінюють зображення сильніше, в результаті обличчя будуть виглядати привабливіше. У Codeformer більш висока точність збереже вихідне зображення на шкоду корекції обличчя.", + "imageToImage": "'Зображення до зображення' завантажує будь-яке зображення, яке потім використовується для генерації разом із запитом. Чим більше значення, тим сильніше зміниться зображення в результаті. Можливі значення від 0 до 1, рекомендується діапазон 0.25-0.75", + "boundingBox": "'Обмежуюча рамка' аналогічна налаштуванням 'Ширина' і 'Висота' для 'Зображення з тексту' або 'Зображення до зображення'. Буде оброблена тільки область у рамці.", + "seamCorrection": "Керування обробкою видимих швів, що виникають між зображеннями на полотні.", + "infillAndScaling": "Керування методами заповнення (використовується для масок або стертих частин полотна) та масштабування (корисно для малих розмірів обмежуючої рамки)." + } + }, + "unifiedCanvas": { + "layer": "Шар", + "base": "Базовий", + "mask": "Маска", + "maskingOptions": "Параметри маски", + "enableMask": "Увiмкнути маску", + "preserveMaskedArea": "Зберiгати замасковану область", + "clearMask": "Очистити маску", + "brush": "Пензель", + "eraser": "Гумка", + "fillBoundingBox": "Заповнити обмежуючу рамку", + "eraseBoundingBox": "Стерти обмежуючу рамку", + "colorPicker": "Пiпетка", + "brushOptions": "Параметри пензля", + "brushSize": "Розмiр", + "move": "Перемiстити", + "resetView": "Скинути вигляд", + "mergeVisible": "Об'єднати видимi", + "saveToGallery": "Зберегти до галереї", + "copyToClipboard": "Копiювати до буферу обмiну", + "downloadAsImage": "Завантажити як зображення", + "undo": "Вiдмiнити", + "redo": "Повторити", + "clearCanvas": "Очистити полотно", + "canvasSettings": "Налаштування полотна", + "showIntermediates": "Показувати процес", + "showGrid": "Показувати сiтку", + "snapToGrid": "Прив'язати до сітки", + "darkenOutsideSelection": "Затемнити полотно зовні", + "autoSaveToGallery": "Автозбереження до галереї", + "saveBoxRegionOnly": "Зберiгати тiльки видiлення", + "limitStrokesToBox": "Обмежити штрихи виділенням", + "showCanvasDebugInfo": "Показати дод. інформацію про полотно", + "clearCanvasHistory": "Очистити iсторiю полотна", + "clearHistory": "Очистити iсторiю", + "clearCanvasHistoryMessage": "Очищення історії полотна залишає поточне полотно незайманим, але видаляє історію скасування та повтору.", + "clearCanvasHistoryConfirm": "Ви впевнені, що хочете очистити історію полотна?", + "emptyTempImageFolder": "Очистити тимчасову папку", + "emptyFolder": "Очистити папку", + "emptyTempImagesFolderMessage": "Очищення папки тимчасових зображень також повністю скидає полотно, включаючи всю історію скасування/повтору, зображення та базовий шар полотна, що розміщуються.", + "emptyTempImagesFolderConfirm": "Ви впевнені, що хочете очистити тимчасову папку?", + "activeLayer": "Активний шар", + "canvasScale": "Масштаб полотна", + "boundingBox": "Обмежуюча рамка", + "scaledBoundingBox": "Масштабування рамки", + "boundingBoxPosition": "Позиція обмежуючої рамки", + "canvasDimensions": "Разміри полотна", + "canvasPosition": "Розташування полотна", + "cursorPosition": "Розташування курсора", + "previous": "Попереднє", + "next": "Наступне", + "accept": "Приняти", + "showHide": "Показати/Сховати", + "discardAll": "Відмінити все", + "betaClear": "Очистити", + "betaDarkenOutside": "Затемнити зовні", + "betaLimitToBox": "Обмежити виділенням", + "betaPreserveMasked": "Зберiгати замасковану область" + }, + "accessibility": { + "nextImage": "Наступне зображення", + "modelSelect": "Вибір моделі", + "invokeProgressBar": "Індикатор виконання", + "reset": "Скинути", + "uploadImage": "Завантажити зображення", + "useThisParameter": "Використовувати цей параметр", + "exitViewer": "Вийти з переглядача", + "zoomIn": "Збільшити", + "zoomOut": "Зменшити", + "rotateCounterClockwise": "Обертати проти годинникової стрілки", + "rotateClockwise": "Обертати за годинниковою стрілкою", + "toggleAutoscroll": "Увімкнути автопрокручування", + "toggleLogViewer": "Показати або приховати переглядач журналів", + "previousImage": "Попереднє зображення", + "copyMetadataJson": "Скопіювати метадані JSON", + "flipVertically": "Перевернути по вертикалі", + "flipHorizontally": "Відобразити по горизонталі", + "showOptionsPanel": "Показати опції", + "modifyConfig": "Змінити конфігурацію", + "menu": "Меню" + } +} diff --git a/invokeai/frontend/web/dist/locales/vi.json b/invokeai/frontend/web/dist/locales/vi.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/vi.json @@ -0,0 +1 @@ +{} diff --git a/invokeai/frontend/web/dist/locales/zh_CN.json b/invokeai/frontend/web/dist/locales/zh_CN.json new file mode 100644 index 0000000000..b9f1a71370 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/zh_CN.json @@ -0,0 +1,1663 @@ +{ + "common": { + "hotkeysLabel": "快捷键", + "languagePickerLabel": "语言", + "reportBugLabel": "反馈错误", + "settingsLabel": "设置", + "img2img": "图生图", + "unifiedCanvas": "统一画布", + "nodes": "工作流编辑器", + "langSimplifiedChinese": "简体中文", + "nodesDesc": "一个基于节点的图像生成系统目前正在开发中。请持续关注关于这一功能的更新。", + "postProcessing": "后期处理", + "postProcessDesc1": "Invoke AI 提供各种各样的后期处理功能。图像放大和面部修复在网页界面中已经可用。你可以从文生图和图生图页面的高级选项菜单中访问它们。你也可以直接使用图像显示上方或查看器中的图像操作按钮处理图像。", + "postProcessDesc2": "一个专门的界面将很快发布,新的界面能够处理更复杂的后期处理流程。", + "postProcessDesc3": "Invoke AI 命令行界面提供例如 Embiggen 的各种其他功能。", + "training": "训练", + "trainingDesc1": "一个专门用于从 Web UI 使用 Textual Inversion 和 Dreambooth 训练自己的 Embedding 和 checkpoint 的工作流。", + "trainingDesc2": "InvokeAI 已经支持使用主脚本中的 Textual Inversion 来训练自定义 embeddouring。", + "upload": "上传", + "close": "关闭", + "load": "加载", + "statusConnected": "已连接", + "statusDisconnected": "未连接", + "statusError": "错误", + "statusPreparing": "准备中", + "statusProcessingCanceled": "处理已取消", + "statusProcessingComplete": "处理完成", + "statusGenerating": "生成中", + "statusGeneratingTextToImage": "文生图生成中", + "statusGeneratingImageToImage": "图生图生成中", + "statusGeneratingInpainting": "(Inpainting) 内补生成中", + "statusGeneratingOutpainting": "(Outpainting) 外扩生成中", + "statusGenerationComplete": "生成完成", + "statusIterationComplete": "迭代完成", + "statusSavingImage": "图像保存中", + "statusRestoringFaces": "面部修复中", + "statusRestoringFacesGFPGAN": "面部修复中 (GFPGAN)", + "statusRestoringFacesCodeFormer": "面部修复中 (CodeFormer)", + "statusUpscaling": "放大中", + "statusUpscalingESRGAN": "放大中 (ESRGAN)", + "statusLoadingModel": "模型加载中", + "statusModelChanged": "模型已切换", + "accept": "同意", + "cancel": "取消", + "dontAskMeAgain": "不要再次询问", + "areYouSure": "你确认吗?", + "imagePrompt": "图片提示词", + "langKorean": "朝鲜语", + "langPortuguese": "葡萄牙语", + "random": "随机", + "generate": "生成", + "openInNewTab": "在新的标签页打开", + "langUkranian": "乌克兰语", + "back": "返回", + "statusMergedModels": "模型已合并", + "statusConvertingModel": "转换模型中", + "statusModelConverted": "模型转换完成", + "statusMergingModels": "合并模型", + "githubLabel": "GitHub", + "discordLabel": "Discord", + "langPolish": "波兰语", + "langBrPortuguese": "葡萄牙语(巴西)", + "langDutch": "荷兰语", + "langFrench": "法语", + "langRussian": "俄语", + "langGerman": "德语", + "langHebrew": "希伯来语", + "langItalian": "意大利语", + "langJapanese": "日语", + "langSpanish": "西班牙语", + "langEnglish": "英语", + "langArabic": "阿拉伯语", + "txt2img": "文生图", + "postprocessing": "后期处理", + "loading": "加载中", + "loadingInvokeAI": "Invoke AI 加载中", + "linear": "线性的", + "batch": "批次管理器", + "communityLabel": "社区", + "modelManager": "模型管理器", + "nodeEditor": "节点编辑器", + "statusProcessing": "处理中", + "imageFailedToLoad": "无法加载图像", + "lightMode": "浅色模式", + "learnMore": "了解更多", + "darkMode": "深色模式", + "advanced": "高级", + "t2iAdapter": "T2I Adapter", + "ipAdapter": "IP Adapter", + "controlAdapter": "Control Adapter", + "controlNet": "ControlNet", + "on": "开", + "auto": "自动", + "checkpoint": "Checkpoint", + "inpaint": "内补重绘", + "simple": "简单", + "template": "模板", + "outputs": "输出", + "data": "数据", + "safetensors": "Safetensors", + "outpaint": "外扩绘制", + "details": "详情", + "format": "格式", + "unknown": "未知", + "folder": "文件夹", + "error": "错误", + "installed": "已安装", + "file": "文件", + "somethingWentWrong": "出了点问题", + "copyError": "$t(gallery.copy) 错误", + "input": "输入", + "notInstalled": "非 $t(common.installed)", + "delete": "删除", + "updated": "已上传", + "save": "保存", + "created": "已创建", + "prevPage": "上一页", + "unknownError": "未知错误", + "direction": "指向", + "orderBy": "排序方式:", + "nextPage": "下一页", + "saveAs": "保存为", + "unsaved": "未保存", + "ai": "ai" + }, + "gallery": { + "generations": "生成的图像", + "showGenerations": "显示生成的图像", + "uploads": "上传的图像", + "showUploads": "显示上传的图像", + "galleryImageSize": "预览大小", + "galleryImageResetSize": "重置预览大小", + "gallerySettings": "预览设置", + "maintainAspectRatio": "保持纵横比", + "autoSwitchNewImages": "自动切换到新图像", + "singleColumnLayout": "单列布局", + "allImagesLoaded": "所有图像已加载", + "loadMore": "加载更多", + "noImagesInGallery": "无图像可用于显示", + "deleteImage": "删除图片", + "deleteImageBin": "被删除的图片会发送到你操作系统的回收站。", + "deleteImagePermanent": "删除的图片无法被恢复。", + "assets": "素材", + "autoAssignBoardOnClick": "点击后自动分配面板", + "featuresWillReset": "如果您删除该图像,这些功能会立即被重置。", + "loading": "加载中", + "unableToLoad": "无法加载图库", + "currentlyInUse": "该图像目前在以下功能中使用:", + "copy": "复制", + "download": "下载", + "setCurrentImage": "设为当前图像", + "preparingDownload": "准备下载", + "preparingDownloadFailed": "准备下载时出现问题", + "downloadSelection": "下载所选内容", + "noImageSelected": "无选中的图像", + "deleteSelection": "删除所选内容", + "image": "图像", + "drop": "弃用", + "dropOrUpload": "$t(gallery.drop) 或上传", + "dropToUpload": "$t(gallery.drop) 以上传", + "problemDeletingImagesDesc": "有一张或多张图像无法被删除", + "problemDeletingImages": "删除图像时出现问题", + "unstarImage": "取消收藏图像", + "starImage": "收藏图像" + }, + "hotkeys": { + "keyboardShortcuts": "键盘快捷键", + "appHotkeys": "应用快捷键", + "generalHotkeys": "一般快捷键", + "galleryHotkeys": "图库快捷键", + "unifiedCanvasHotkeys": "统一画布快捷键", + "invoke": { + "title": "Invoke", + "desc": "生成图像" + }, + "cancel": { + "title": "取消", + "desc": "取消图像生成" + }, + "focusPrompt": { + "title": "打开提示词框", + "desc": "打开提示词文本框" + }, + "toggleOptions": { + "title": "切换选项卡", + "desc": "打开或关闭选项浮窗" + }, + "pinOptions": { + "title": "常开选项卡", + "desc": "保持选项浮窗常开" + }, + "toggleViewer": { + "title": "切换图像查看器", + "desc": "打开或关闭图像查看器" + }, + "toggleGallery": { + "title": "切换图库", + "desc": "打开或关闭图库" + }, + "maximizeWorkSpace": { + "title": "工作区最大化", + "desc": "关闭所有浮窗,将工作区域最大化" + }, + "changeTabs": { + "title": "切换选项卡", + "desc": "切换到另一个工作区" + }, + "consoleToggle": { + "title": "切换命令行", + "desc": "打开或关闭命令行" + }, + "setPrompt": { + "title": "使用当前提示词", + "desc": "使用当前图像的提示词" + }, + "setSeed": { + "title": "使用种子", + "desc": "使用当前图像的种子" + }, + "setParameters": { + "title": "使用当前参数", + "desc": "使用当前图像的所有参数" + }, + "restoreFaces": { + "title": "面部修复", + "desc": "对当前图像进行面部修复" + }, + "upscale": { + "title": "放大", + "desc": "对当前图像进行放大" + }, + "showInfo": { + "title": "显示信息", + "desc": "显示当前图像的元数据" + }, + "sendToImageToImage": { + "title": "发送到图生图", + "desc": "发送当前图像到图生图" + }, + "deleteImage": { + "title": "删除图像", + "desc": "删除当前图像" + }, + "closePanels": { + "title": "关闭浮窗", + "desc": "关闭目前打开的浮窗" + }, + "previousImage": { + "title": "上一张图像", + "desc": "显示图库中的上一张图像" + }, + "nextImage": { + "title": "下一张图像", + "desc": "显示图库中的下一张图像" + }, + "toggleGalleryPin": { + "title": "切换图库常开", + "desc": "开关图库在界面中的常开模式" + }, + "increaseGalleryThumbSize": { + "title": "增大预览尺寸", + "desc": "增大图库中预览的尺寸" + }, + "decreaseGalleryThumbSize": { + "title": "缩小预览尺寸", + "desc": "缩小图库中预览的尺寸" + }, + "selectBrush": { + "title": "选择刷子", + "desc": "选择统一画布上的刷子" + }, + "selectEraser": { + "title": "选择橡皮擦", + "desc": "选择统一画布上的橡皮擦" + }, + "decreaseBrushSize": { + "title": "减小刷子大小", + "desc": "减小统一画布上的刷子或橡皮擦的大小" + }, + "increaseBrushSize": { + "title": "增大刷子大小", + "desc": "增大统一画布上的刷子或橡皮擦的大小" + }, + "decreaseBrushOpacity": { + "title": "减小刷子不透明度", + "desc": "减小统一画布上的刷子的不透明度" + }, + "increaseBrushOpacity": { + "title": "增大刷子不透明度", + "desc": "增大统一画布上的刷子的不透明度" + }, + "moveTool": { + "title": "移动工具", + "desc": "画布允许导航" + }, + "fillBoundingBox": { + "title": "填充选择区域", + "desc": "在选择区域中填充刷子颜色" + }, + "eraseBoundingBox": { + "title": "擦除选择框", + "desc": "将选择区域擦除" + }, + "colorPicker": { + "title": "选择颜色拾取工具", + "desc": "选择画布颜色拾取工具" + }, + "toggleSnap": { + "title": "切换网格对齐", + "desc": "打开或关闭网格对齐" + }, + "quickToggleMove": { + "title": "快速切换移动模式", + "desc": "临时性地切换移动模式" + }, + "toggleLayer": { + "title": "切换图层", + "desc": "切换遮罩/基础层的选择" + }, + "clearMask": { + "title": "清除遮罩", + "desc": "清除整个遮罩" + }, + "hideMask": { + "title": "隐藏遮罩", + "desc": "隐藏或显示遮罩" + }, + "showHideBoundingBox": { + "title": "显示/隐藏框选区", + "desc": "切换框选区的的显示状态" + }, + "mergeVisible": { + "title": "合并可见层", + "desc": "将画板上可见层合并" + }, + "saveToGallery": { + "title": "保存至图库", + "desc": "将画布当前内容保存至图库" + }, + "copyToClipboard": { + "title": "复制到剪贴板", + "desc": "将画板当前内容复制到剪贴板" + }, + "downloadImage": { + "title": "下载图像", + "desc": "下载画板当前内容" + }, + "undoStroke": { + "title": "撤销画笔", + "desc": "撤销上一笔刷子的动作" + }, + "redoStroke": { + "title": "重做画笔", + "desc": "重做上一笔刷子的动作" + }, + "resetView": { + "title": "重置视图", + "desc": "重置画布视图" + }, + "previousStagingImage": { + "title": "上一张暂存图像", + "desc": "上一张暂存区中的图像" + }, + "nextStagingImage": { + "title": "下一张暂存图像", + "desc": "下一张暂存区中的图像" + }, + "acceptStagingImage": { + "title": "接受暂存图像", + "desc": "接受当前暂存区中的图像" + }, + "nodesHotkeys": "节点快捷键", + "addNodes": { + "title": "添加节点", + "desc": "打开添加节点菜单" + } + }, + "modelManager": { + "modelManager": "模型管理器", + "model": "模型", + "modelAdded": "已添加模型", + "modelUpdated": "模型已更新", + "modelEntryDeleted": "模型已删除", + "cannotUseSpaces": "不能使用空格", + "addNew": "添加", + "addNewModel": "添加新模型", + "addManually": "手动添加", + "manual": "手动", + "name": "名称", + "nameValidationMsg": "输入模型的名称", + "description": "描述", + "descriptionValidationMsg": "添加模型的描述", + "config": "配置", + "configValidationMsg": "模型配置文件的路径。", + "modelLocation": "模型位置", + "modelLocationValidationMsg": "提供 Diffusers 模型文件的本地存储路径", + "vaeLocation": "VAE 位置", + "vaeLocationValidationMsg": "VAE 文件的路径。", + "width": "宽度", + "widthValidationMsg": "模型的默认宽度。", + "height": "高度", + "heightValidationMsg": "模型的默认高度。", + "addModel": "添加模型", + "updateModel": "更新模型", + "availableModels": "可用模型", + "search": "检索", + "load": "加载", + "active": "活跃", + "notLoaded": "未加载", + "cached": "缓存", + "checkpointFolder": "模型检查点文件夹", + "clearCheckpointFolder": "清除 Checkpoint 模型文件夹", + "findModels": "寻找模型", + "modelsFound": "找到的模型", + "selectFolder": "选择文件夹", + "selected": "已选择", + "selectAll": "全选", + "deselectAll": "取消选择所有", + "showExisting": "显示已存在", + "addSelected": "添加选择", + "modelExists": "模型已存在", + "delete": "删除", + "deleteModel": "删除模型", + "deleteConfig": "删除配置", + "deleteMsg1": "您确定要将该模型从 InvokeAI 删除吗?", + "deleteMsg2": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除。若你正在使用自定义目录,则不会从磁盘中删除他们。", + "convertToDiffusersHelpText1": "模型会被转换成 🧨 Diffusers 格式。", + "convertToDiffusersHelpText2": "这个过程会替换你的模型管理器的入口中相同 Diffusers 版本的模型。", + "mergedModelSaveLocation": "保存路径", + "mergedModelCustomSaveLocation": "自定义路径", + "checkpointModels": "Checkpoints", + "formMessageDiffusersVAELocation": "VAE 路径", + "convertToDiffusersHelpText4": "这是一次性的处理过程。根据你电脑的配置不同耗时 30 - 60 秒。", + "convertToDiffusersHelpText6": "你希望转换这个模型吗?", + "interpolationType": "插值类型", + "modelTwo": "模型 2", + "modelThree": "模型 3", + "v2_768": "v2 (768px)", + "mergedModelName": "合并的模型名称", + "allModels": "全部模型", + "convertToDiffusers": "转换为 Diffusers", + "formMessageDiffusersModelLocation": "Diffusers 模型路径", + "custom": "自定义", + "formMessageDiffusersVAELocationDesc": "如果没有特别指定,InvokeAI 会从上面指定的模型路径中寻找 VAE 文件。", + "safetensorModels": "SafeTensors", + "modelsMerged": "模型合并完成", + "mergeModels": "合并模型", + "modelOne": "模型 1", + "diffusersModels": "Diffusers", + "scanForModels": "扫描模型", + "repo_id": "项目 ID", + "repoIDValidationMsg": "你的模型的在线项目地址", + "v1": "v1", + "invokeRoot": "InvokeAI 文件夹", + "inpainting": "v1 Inpainting", + "customSaveLocation": "自定义保存路径", + "scanAgain": "重新扫描", + "customConfig": "个性化配置", + "pathToCustomConfig": "个性化配置路径", + "modelConverted": "模型已转换", + "statusConverting": "转换中", + "sameFolder": "相同文件夹", + "invokeAIFolder": "Invoke AI 文件夹", + "ignoreMismatch": "忽略所选模型之间的不匹配", + "modelMergeHeaderHelp1": "您可以合并最多三种不同的模型,以创建符合您需求的混合模型。", + "modelMergeHeaderHelp2": "只有扩散器(Diffusers)可以用于模型合并。如果您想要合并一个检查点模型,请先将其转换为扩散器。", + "addCheckpointModel": "添加 Checkpoint / Safetensor 模型", + "addDiffuserModel": "添加 Diffusers 模型", + "vaeRepoID": "VAE 项目 ID", + "vaeRepoIDValidationMsg": "VAE 模型在线仓库地址", + "selectAndAdd": "选择下表中的模型并添加", + "noModelsFound": "未有找到模型", + "formMessageDiffusersModelLocationDesc": "请至少输入一个。", + "convertToDiffusersSaveLocation": "保存路径", + "convertToDiffusersHelpText3": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除. 若位于自定义目录, 则不会受影响.", + "v2_base": "v2 (512px)", + "convertToDiffusersHelpText5": "请确认你有足够的磁盘空间,模型大小通常在 2 GB - 7 GB 之间。", + "convert": "转换", + "merge": "合并", + "pickModelType": "选择模型类型", + "addDifference": "增加差异", + "none": "无", + "inverseSigmoid": "反 Sigmoid 函数", + "weightedSum": "加权求和", + "modelMergeAlphaHelp": "Alpha 参数控制模型的混合强度。较低的 Alpha 值会导致第二个模型的影响减弱。", + "sigmoid": "Sigmoid 函数", + "modelMergeInterpAddDifferenceHelp": "在这种模式下,首先从模型 2 中减去模型 3,得到的版本再用上述的 Alpha 值与模型1进行混合。", + "modelsSynced": "模型已同步", + "modelSyncFailed": "模型同步失败", + "modelDeleteFailed": "模型删除失败", + "syncModelsDesc": "如果您的模型与后端不同步,您可以使用此选项刷新它们。便于您在应用程序启动的情况下手动更新 models.yaml 文件或将模型添加到 InvokeAI 根文件夹。", + "selectModel": "选择模型", + "importModels": "导入模型", + "settings": "设置", + "syncModels": "同步模型", + "noCustomLocationProvided": "未提供自定义路径", + "modelDeleted": "模型已删除", + "modelUpdateFailed": "模型更新失败", + "modelConversionFailed": "模型转换失败", + "modelsMergeFailed": "模型融合失败", + "baseModel": "基底模型", + "convertingModelBegin": "模型转换中. 请稍候.", + "noModels": "未找到模型", + "predictionType": "预测类型(适用于 Stable Diffusion 2.x 模型和部分 Stable Diffusion 1.x 模型)", + "quickAdd": "快速添加", + "simpleModelDesc": "提供一个指向本地 Diffusers 模型的路径,本地 checkpoint / safetensors 模型或一个HuggingFace 项目 ID,又或者一个 checkpoint/diffusers 模型链接。", + "advanced": "高级", + "useCustomConfig": "使用自定义配置", + "closeAdvanced": "关闭高级", + "modelType": "模型类别", + "customConfigFileLocation": "自定义配置文件目录", + "variant": "变体", + "onnxModels": "Onnx", + "vae": "VAE", + "oliveModels": "Olive", + "loraModels": "LoRA", + "alpha": "Alpha", + "vaePrecision": "VAE 精度", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "noModelSelected": "无选中的模型", + "conversionNotSupported": "转换尚未支持" + }, + "parameters": { + "images": "图像", + "steps": "步数", + "cfgScale": "CFG 等级", + "width": "宽度", + "height": "高度", + "seed": "种子", + "randomizeSeed": "随机化种子", + "shuffle": "随机生成种子", + "noiseThreshold": "噪声阈值", + "perlinNoise": "Perlin 噪声", + "variations": "变种", + "variationAmount": "变种数量", + "seedWeights": "种子权重", + "faceRestoration": "面部修复", + "restoreFaces": "修复面部", + "type": "种类", + "strength": "强度", + "upscaling": "放大", + "upscale": "放大 (Shift + U)", + "upscaleImage": "放大图像", + "scale": "等级", + "otherOptions": "其他选项", + "seamlessTiling": "无缝拼贴", + "hiresOptim": "高分辨率优化", + "imageFit": "使生成图像长宽适配初始图像", + "codeformerFidelity": "保真度", + "scaleBeforeProcessing": "处理前缩放", + "scaledWidth": "缩放宽度", + "scaledHeight": "缩放长度", + "infillMethod": "填充方法", + "tileSize": "方格尺寸", + "boundingBoxHeader": "选择区域", + "seamCorrectionHeader": "接缝修正", + "infillScalingHeader": "内填充和缩放", + "img2imgStrength": "图生图强度", + "toggleLoopback": "切换环回", + "sendTo": "发送到", + "sendToImg2Img": "发送到图生图", + "sendToUnifiedCanvas": "发送到统一画布", + "copyImageToLink": "复制图像链接", + "downloadImage": "下载图像", + "openInViewer": "在查看器中打开", + "closeViewer": "关闭查看器", + "usePrompt": "使用提示", + "useSeed": "使用种子", + "useAll": "使用所有参数", + "useInitImg": "使用初始图像", + "info": "信息", + "initialImage": "初始图像", + "showOptionsPanel": "显示侧栏浮窗 (O 或 T)", + "seamlessYAxis": "Y 轴", + "seamlessXAxis": "X 轴", + "boundingBoxWidth": "边界框宽度", + "boundingBoxHeight": "边界框高度", + "denoisingStrength": "去噪强度", + "vSymmetryStep": "纵向对称步数", + "cancel": { + "immediate": "立即取消", + "isScheduled": "取消中", + "schedule": "当前迭代后取消", + "setType": "设定取消类型", + "cancel": "取消" + }, + "copyImage": "复制图片", + "showPreview": "显示预览", + "symmetry": "对称性", + "positivePromptPlaceholder": "正向提示词", + "negativePromptPlaceholder": "负向提示词", + "scheduler": "调度器", + "general": "通用", + "hiresStrength": "高分辨强度", + "hidePreview": "隐藏预览", + "hSymmetryStep": "横向对称步数", + "imageToImage": "图生图", + "noiseSettings": "噪音", + "controlNetControlMode": "控制模式", + "maskAdjustmentsHeader": "遮罩调整", + "maskBlur": "模糊", + "maskBlurMethod": "模糊方式", + "aspectRatio": "纵横比", + "seamLowThreshold": "降低", + "seamHighThreshold": "提升", + "invoke": { + "noNodesInGraph": "节点图中无节点", + "noModelSelected": "无已选中的模型", + "invoke": "调用", + "systemBusy": "系统繁忙", + "noInitialImageSelected": "无选中的初始图像", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} 缺失输入", + "unableToInvoke": "无法调用", + "systemDisconnected": "系统已断开连接", + "missingNodeTemplate": "缺失节点模板", + "missingFieldTemplate": "缺失模板", + "addingImagesTo": "添加图像到", + "noPrompts": "没有已生成的提示词", + "readyToInvoke": "准备调用", + "noControlImageForControlAdapter": "有 #{{number}} 个 Control Adapter 缺失控制图像", + "noModelForControlAdapter": "有 #{{number}} 个 Control Adapter 没有选择模型。", + "incompatibleBaseModelForControlAdapter": "有 #{{number}} 个 Control Adapter 模型与主模型不匹配。" + }, + "patchmatchDownScaleSize": "缩小", + "coherenceSteps": "步数", + "clipSkip": "CLIP 跳过层", + "compositingSettingsHeader": "合成设置", + "useCpuNoise": "使用 CPU 噪声", + "coherenceStrength": "强度", + "enableNoiseSettings": "启用噪声设置", + "coherenceMode": "模式", + "cpuNoise": "CPU 噪声", + "gpuNoise": "GPU 噪声", + "clipSkipWithLayerCount": "CLIP 跳过 {{layerCount}} 层", + "coherencePassHeader": "一致性层", + "manualSeed": "手动设定种子", + "imageActions": "图像操作", + "randomSeed": "随机种子", + "iterations": "迭代数", + "isAllowedToUpscale": { + "useX2Model": "图像太大,无法使用 x4 模型,使用 x2 模型作为替代", + "tooLarge": "图像太大无法进行放大,请选择更小的图像" + }, + "iterationsWithCount_other": "{{count}} 次迭代生成", + "seamlessX&Y": "无缝 X & Y", + "aspectRatioFree": "自由", + "seamlessX": "无缝 X", + "seamlessY": "无缝 Y", + "maskEdge": "遮罩边缘", + "unmasked": "取消遮罩", + "cfgRescaleMultiplier": "CFG 重缩放倍数", + "cfgRescale": "CFG 重缩放", + "useSize": "使用尺寸" + }, + "settings": { + "models": "模型", + "displayInProgress": "显示处理中的图像", + "saveSteps": "每n步保存图像", + "confirmOnDelete": "删除时确认", + "displayHelpIcons": "显示帮助按钮", + "enableImageDebugging": "开启图像调试", + "resetWebUI": "重置网页界面", + "resetWebUIDesc1": "重置网页只会重置浏览器中缓存的图像和设置,不会删除任何图像。", + "resetWebUIDesc2": "如果图像没有显示在图库中,或者其他东西不工作,请在GitHub上提交问题之前尝试重置。", + "resetComplete": "网页界面已重置。", + "showProgressInViewer": "在查看器中展示过程图片", + "antialiasProgressImages": "对过程图像应用抗锯齿", + "generation": "生成", + "ui": "用户界面", + "useSlidersForAll": "对所有参数使用滑动条设置", + "general": "通用", + "consoleLogLevel": "日志等级", + "shouldLogToConsole": "终端日志", + "developer": "开发者", + "alternateCanvasLayout": "切换统一画布布局", + "enableNodesEditor": "启用节点编辑器", + "favoriteSchedulersPlaceholder": "没有偏好的采样算法", + "showAdvancedOptions": "显示进阶选项", + "favoriteSchedulers": "采样算法偏好", + "autoChangeDimensions": "更改时将宽/高更新为模型默认值", + "experimental": "实验性", + "beta": "Beta", + "clearIntermediates": "清除中间产物", + "clearIntermediatesDesc3": "您图库中的图像不会被删除。", + "clearIntermediatesDesc2": "中间产物图像是生成过程中产生的副产品,与图库中的结果图像不同。清除中间产物可释放磁盘空间。", + "intermediatesCleared_other": "已清除 {{count}} 个中间产物", + "clearIntermediatesDesc1": "清除中间产物会重置您的画布和 ControlNet 状态。", + "intermediatesClearedFailed": "清除中间产物时出现问题", + "clearIntermediatesWithCount_other": "清除 {{count}} 个中间产物", + "clearIntermediatesDisabled": "队列为空才能清理中间产物", + "enableNSFWChecker": "启用成人内容检测器", + "enableInvisibleWatermark": "启用不可见水印", + "enableInformationalPopovers": "启用信息弹窗", + "reloadingIn": "重新加载中" + }, + "toast": { + "tempFoldersEmptied": "临时文件夹已清空", + "uploadFailed": "上传失败", + "uploadFailedUnableToLoadDesc": "无法加载文件", + "downloadImageStarted": "图像已开始下载", + "imageCopied": "图像已复制", + "imageLinkCopied": "图像链接已复制", + "imageNotLoaded": "没有加载图像", + "imageNotLoadedDesc": "找不到图片", + "imageSavedToGallery": "图像已保存到图库", + "canvasMerged": "画布已合并", + "sentToImageToImage": "已发送到图生图", + "sentToUnifiedCanvas": "已发送到统一画布", + "parametersSet": "参数已设定", + "parametersNotSet": "参数未设定", + "parametersNotSetDesc": "此图像不存在元数据。", + "parametersFailed": "加载参数失败", + "parametersFailedDesc": "加载初始图像失败。", + "seedSet": "种子已设定", + "seedNotSet": "种子未设定", + "seedNotSetDesc": "无法找到该图像的种子。", + "promptSet": "提示词已设定", + "promptNotSet": "提示词未设定", + "promptNotSetDesc": "无法找到该图像的提示词。", + "upscalingFailed": "放大失败", + "faceRestoreFailed": "面部修复失败", + "metadataLoadFailed": "加载元数据失败", + "initialImageSet": "初始图像已设定", + "initialImageNotSet": "初始图像未设定", + "initialImageNotSetDesc": "无法加载初始图像", + "problemCopyingImageLink": "无法复制图片链接", + "uploadFailedInvalidUploadDesc": "必须是单张的 PNG 或 JPEG 图片", + "disconnected": "服务器断开", + "connected": "服务器连接", + "parameterSet": "参数已设定", + "parameterNotSet": "参数未设定", + "serverError": "服务器错误", + "canceled": "处理取消", + "nodesLoaded": "节点已加载", + "nodesSaved": "节点已保存", + "problemCopyingImage": "无法复制图像", + "nodesCorruptedGraph": "无法加载。节点图似乎已损坏。", + "nodesBrokenConnections": "无法加载。部分连接已断开。", + "nodesUnrecognizedTypes": "无法加载。节点图有无法识别的节点类型", + "nodesNotValidJSON": "无效的 JSON", + "nodesNotValidGraph": "无效的 InvokeAi 节点图", + "nodesLoadedFailed": "节点加载失败", + "modelAddedSimple": "已添加模型", + "modelAdded": "已添加模型: {{modelName}}", + "imageSavingFailed": "图像保存失败", + "canvasSentControlnetAssets": "画布已发送到 ControlNet & 素材", + "problemCopyingCanvasDesc": "无法导出基础层", + "loadedWithWarnings": "已加载带有警告的工作流", + "setInitialImage": "设为初始图像", + "canvasCopiedClipboard": "画布已复制到剪贴板", + "setControlImage": "设为控制图像", + "setNodeField": "设为节点字段", + "problemSavingMask": "保存遮罩时出现问题", + "problemSavingCanvasDesc": "无法导出基础层", + "maskSavedAssets": "遮罩已保存到素材", + "modelAddFailed": "模型添加失败", + "problemDownloadingCanvas": "下载画布时出现问题", + "problemMergingCanvas": "合并画布时出现问题", + "setCanvasInitialImage": "设定画布初始图像", + "imageUploaded": "图像已上传", + "addedToBoard": "已添加到面板", + "workflowLoaded": "工作流已加载", + "problemImportingMaskDesc": "无法导出遮罩", + "problemCopyingCanvas": "复制画布时出现问题", + "problemSavingCanvas": "保存画布时出现问题", + "canvasDownloaded": "画布已下载", + "setIPAdapterImage": "设为 IP Adapter 图像", + "problemMergingCanvasDesc": "无法导出基础层", + "problemDownloadingCanvasDesc": "无法导出基础层", + "problemSavingMaskDesc": "无法导出遮罩", + "imageSaved": "图像已保存", + "maskSentControlnetAssets": "遮罩已发送到 ControlNet & 素材", + "canvasSavedGallery": "画布已保存到图库", + "imageUploadFailed": "图像上传失败", + "problemImportingMask": "导入遮罩时出现问题", + "baseModelChangedCleared_other": "基础模型已更改, 已清除或禁用 {{count}} 个不兼容的子模型", + "setAsCanvasInitialImage": "设为画布初始图像", + "invalidUpload": "无效的上传", + "problemDeletingWorkflow": "删除工作流时出现问题", + "workflowDeleted": "已删除工作流", + "problemRetrievingWorkflow": "检索工作流时发生问题" + }, + "unifiedCanvas": { + "layer": "图层", + "base": "基础层", + "mask": "遮罩", + "maskingOptions": "遮罩选项", + "enableMask": "启用遮罩", + "preserveMaskedArea": "保留遮罩区域", + "clearMask": "清除遮罩 (Shift+C)", + "brush": "刷子", + "eraser": "橡皮擦", + "fillBoundingBox": "填充选择区域", + "eraseBoundingBox": "取消选择区域", + "colorPicker": "颜色提取", + "brushOptions": "刷子选项", + "brushSize": "大小", + "move": "移动", + "resetView": "重置视图", + "mergeVisible": "合并可见层", + "saveToGallery": "保存至图库", + "copyToClipboard": "复制到剪贴板", + "downloadAsImage": "下载图像", + "undo": "撤销", + "redo": "重做", + "clearCanvas": "清除画布", + "canvasSettings": "画布设置", + "showIntermediates": "显示中间产物", + "showGrid": "显示网格", + "snapToGrid": "切换网格对齐", + "darkenOutsideSelection": "暗化外部区域", + "autoSaveToGallery": "自动保存至图库", + "saveBoxRegionOnly": "只保存框内区域", + "limitStrokesToBox": "限制画笔在框内", + "showCanvasDebugInfo": "显示附加画布信息", + "clearCanvasHistory": "清除画布历史", + "clearHistory": "清除历史", + "clearCanvasHistoryMessage": "清除画布历史不会影响当前画布,但会不可撤销地清除所有撤销/重做历史。", + "clearCanvasHistoryConfirm": "确认清除所有画布历史?", + "emptyTempImageFolder": "清除临时文件夹", + "emptyFolder": "清除文件夹", + "emptyTempImagesFolderMessage": "清空临时图像文件夹会完全重置统一画布。这包括所有的撤销/重做历史、暂存区的图像和画布基础层。", + "emptyTempImagesFolderConfirm": "确认清除临时文件夹?", + "activeLayer": "活跃图层", + "canvasScale": "画布缩放", + "boundingBox": "选择区域", + "scaledBoundingBox": "缩放选择区域", + "boundingBoxPosition": "选择区域位置", + "canvasDimensions": "画布长宽", + "canvasPosition": "画布位置", + "cursorPosition": "光标位置", + "previous": "上一张", + "next": "下一张", + "accept": "接受", + "showHide": "显示 / 隐藏", + "discardAll": "放弃所有", + "betaClear": "清除", + "betaDarkenOutside": "暗化外部区域", + "betaLimitToBox": "限制在框内", + "betaPreserveMasked": "保留遮罩层", + "antialiasing": "抗锯齿", + "showResultsOn": "显示结果 (开)", + "showResultsOff": "显示结果 (关)", + "saveMask": "保存 $t(unifiedCanvas.mask)" + }, + "accessibility": { + "modelSelect": "模型选择", + "invokeProgressBar": "Invoke 进度条", + "reset": "重置", + "nextImage": "下一张图片", + "useThisParameter": "使用此参数", + "uploadImage": "上传图片", + "previousImage": "上一张图片", + "copyMetadataJson": "复制 JSON 元数据", + "exitViewer": "退出查看器", + "zoomIn": "放大", + "zoomOut": "缩小", + "rotateCounterClockwise": "逆时针旋转", + "rotateClockwise": "顺时针旋转", + "flipHorizontally": "水平翻转", + "flipVertically": "垂直翻转", + "showOptionsPanel": "显示侧栏浮窗", + "toggleLogViewer": "切换日志查看器", + "modifyConfig": "修改配置", + "toggleAutoscroll": "切换自动缩放", + "menu": "菜单", + "showGalleryPanel": "显示图库浮窗", + "loadMore": "加载更多", + "mode": "模式", + "resetUI": "$t(accessibility.reset) UI", + "createIssue": "创建问题" + }, + "ui": { + "showProgressImages": "显示处理中的图片", + "hideProgressImages": "隐藏处理中的图片", + "swapSizes": "XY 尺寸互换", + "lockRatio": "锁定纵横比" + }, + "tooltip": { + "feature": { + "prompt": "这是提示词区域。提示词包括生成对象和风格术语。您也可以在提示词中添加权重(Token 的重要性),但命令行命令和参数不起作用。", + "imageToImage": "图生图模式加载任何图像作为初始图像,然后与提示词一起用于生成新图像。值越高,结果图像的变化就越大。可能的值为 0.0 到 1.0,建议的范围是 0.25 到 0.75", + "upscale": "使用 ESRGAN 可以在图片生成后立即放大图片。", + "variations": "尝试将变化值设置在 0.1 到 1.0 之间,以更改给定种子的结果。种子的变化在 0.1 到 0.3 之间会很有趣。", + "boundingBox": "边界框的高和宽的设定对文生图和图生图模式是一样的,只有边界框中的区域会被处理。", + "other": "这些选项将为 Invoke 启用替代处理模式。 \"无缝拼贴\" 将在输出中创建重复图案。\"高分辨率\" 是通过图生图进行两步生成:当您想要更大、更连贯且不带伪影的图像时,请使用此设置。这将比通常的文生图需要更长的时间。", + "faceCorrection": "使用 GFPGAN 或 Codeformer 进行人脸校正:该算法会检测图像中的人脸并纠正任何缺陷。较高的值将更改图像,并产生更有吸引力的人脸。在保留较高保真度的情况下使用 Codeformer 将导致更强的人脸校正,同时也会保留原始图像。", + "gallery": "图片库展示输出文件夹中的图片,设置和文件一起储存,可以通过内容菜单访问。", + "seed": "种子值影响形成图像的初始噪声。您可以使用以前图像中已存在的种子。 “噪声阈值”用于减轻在高 CFG 等级(尝试 0 - 10 范围)下的伪像,并使用 Perlin 在生成过程中添加 Perlin 噪声:这两者都可以为您的输出添加变化。", + "seamCorrection": "控制在画布上生成的图像之间出现的可见接缝的处理方式。", + "infillAndScaling": "管理填充方法(用于画布的遮罩或擦除区域)和缩放(对于较小的边界框大小非常有用)。" + } + }, + "nodes": { + "zoomInNodes": "放大", + "loadWorkflow": "加载工作流", + "zoomOutNodes": "缩小", + "reloadNodeTemplates": "重载节点模板", + "hideGraphNodes": "隐藏节点图信息", + "fitViewportNodes": "自适应视图", + "showMinimapnodes": "显示缩略图", + "hideMinimapnodes": "隐藏缩略图", + "showLegendNodes": "显示字段类型图例", + "hideLegendNodes": "隐藏字段类型图例", + "showGraphNodes": "显示节点图信息", + "downloadWorkflow": "下载工作流 JSON", + "workflowDescription": "简述", + "versionUnknown": " 未知版本", + "noNodeSelected": "无选中的节点", + "addNode": "添加节点", + "unableToValidateWorkflow": "无法验证工作流", + "noOutputRecorded": "无已记录输出", + "updateApp": "升级 App", + "colorCodeEdgesHelp": "根据连接区域对边缘编码颜色", + "workflowContact": "联系", + "animatedEdges": "边缘动效", + "nodeTemplate": "节点模板", + "pickOne": "选择一个", + "unableToLoadWorkflow": "无法加载工作流", + "snapToGrid": "对齐网格", + "noFieldsLinearview": "线性视图中未添加任何字段", + "nodeSearch": "检索节点", + "version": "版本", + "validateConnections": "验证连接和节点图", + "inputMayOnlyHaveOneConnection": "输入仅能有一个连接", + "notes": "注释", + "nodeOutputs": "节点输出", + "currentImageDescription": "在节点编辑器中显示当前图像", + "validateConnectionsHelp": "防止建立无效连接和调用无效节点图", + "problemSettingTitle": "设定标题时出现问题", + "noConnectionInProgress": "没有正在进行的连接", + "workflowVersion": "版本", + "noConnectionData": "无连接数据", + "fieldTypesMustMatch": "类型必须匹配", + "workflow": "工作流", + "unkownInvocation": "未知调用类型", + "animatedEdgesHelp": "为选中边缘和其连接的选中节点的边缘添加动画", + "unknownTemplate": "未知模板", + "removeLinearView": "从线性视图中移除", + "workflowTags": "标签", + "fullyContainNodesHelp": "节点必须完全位于选择框中才能被选中", + "workflowValidation": "工作流验证错误", + "noMatchingNodes": "无相匹配的节点", + "executionStateInProgress": "处理中", + "noFieldType": "无字段类型", + "executionStateError": "错误", + "executionStateCompleted": "已完成", + "workflowAuthor": "作者", + "currentImage": "当前图像", + "workflowName": "名称", + "cannotConnectInputToInput": "无法将输入连接到输入", + "workflowNotes": "注释", + "cannotConnectOutputToOutput": "无法将输出连接到输出", + "connectionWouldCreateCycle": "连接将创建一个循环", + "cannotConnectToSelf": "无法连接自己", + "notesDescription": "添加有关您的工作流的注释", + "unknownField": "未知", + "colorCodeEdges": "边缘颜色编码", + "unknownNode": "未知节点", + "addNodeToolTip": "添加节点 (Shift+A, Space)", + "loadingNodes": "加载节点中...", + "snapToGridHelp": "移动时将节点与网格对齐", + "workflowSettings": "工作流编辑器设置", + "booleanPolymorphicDescription": "一个布尔值合集。", + "scheduler": "调度器", + "inputField": "输入", + "controlFieldDescription": "节点间传递的控制信息。", + "skippingUnknownOutputType": "跳过未知类型的输出", + "latentsFieldDescription": "Latents 可以在节点间传递。", + "denoiseMaskFieldDescription": "去噪遮罩可以在节点间传递", + "missingTemplate": "无效的节点:类型为 {{type}} 的节点 {{node}} 缺失模板(无已安装模板?)", + "outputSchemaNotFound": "未找到输出模式", + "latentsPolymorphicDescription": "Latents 可以在节点间传递。", + "colorFieldDescription": "一种 RGBA 颜色。", + "mainModelField": "模型", + "unhandledInputProperty": "未处理的输入属性", + "maybeIncompatible": "可能与已安装的不兼容", + "collectionDescription": "待办事项", + "skippingReservedFieldType": "跳过保留类型", + "booleanCollectionDescription": "一个布尔值合集。", + "sDXLMainModelFieldDescription": "SDXL 模型。", + "boardField": "面板", + "problemReadingWorkflow": "从图像读取工作流时出现问题", + "sourceNode": "源节点", + "nodeOpacity": "节点不透明度", + "collectionItemDescription": "待办事项", + "integerDescription": "整数是没有与小数点的数字。", + "outputField": "输出", + "skipped": "跳过", + "updateNode": "更新节点", + "sDXLRefinerModelFieldDescription": "待办事项", + "imagePolymorphicDescription": "一个图像合集。", + "doesNotExist": "不存在", + "unableToParseNode": "无法解析节点", + "controlCollection": "控制合集", + "collectionItem": "项目合集", + "controlCollectionDescription": "节点间传递的控制信息。", + "skippedReservedInput": "跳过保留的输入", + "outputFields": "输出区域", + "edge": "边缘", + "inputNode": "输入节点", + "enumDescription": "枚举 (Enums) 可能是多个选项的一个数值。", + "loRAModelFieldDescription": "待办事项", + "imageField": "图像", + "skippedReservedOutput": "跳过保留的输出", + "noWorkflow": "无工作流", + "colorCollectionDescription": "待办事项", + "colorPolymorphicDescription": "一个颜色合集。", + "sDXLMainModelField": "SDXL 模型", + "denoiseMaskField": "去噪遮罩", + "schedulerDescription": "待办事项", + "missingCanvaInitImage": "缺失画布初始图像", + "clipFieldDescription": "词元分析器和文本编码器的子模型。", + "noImageFoundState": "状态中未发现初始图像", + "nodeType": "节点类型", + "fullyContainNodes": "完全包含节点来进行选择", + "noOutputSchemaName": "在 ref 对象中找不到输出模式名称", + "vaeModelFieldDescription": "待办事项", + "skippingInputNoTemplate": "跳过无模板的输入", + "missingCanvaInitMaskImages": "缺失初始化画布和遮罩图像", + "problemReadingMetadata": "从图像读取元数据时出现问题", + "oNNXModelField": "ONNX 模型", + "node": "节点", + "skippingUnknownInputType": "跳过未知类型的输入", + "booleanDescription": "布尔值为真或为假。", + "collection": "合集", + "invalidOutputSchema": "无效的输出模式", + "boardFieldDescription": "图库面板", + "floatDescription": "浮点数是带小数点的数字。", + "unhandledOutputProperty": "未处理的输出属性", + "string": "字符串", + "inputFields": "输入", + "uNetFieldDescription": "UNet 子模型。", + "mismatchedVersion": "无效的节点:类型为 {{type}} 的节点 {{node}} 版本不匹配(是否尝试更新?)", + "vaeFieldDescription": "Vae 子模型。", + "imageFieldDescription": "图像可以在节点间传递。", + "outputNode": "输出节点", + "mainModelFieldDescription": "待办事项", + "sDXLRefinerModelField": "Refiner 模型", + "unableToParseEdge": "无法解析边缘", + "latentsCollectionDescription": "Latents 可以在节点间传递。", + "oNNXModelFieldDescription": "ONNX 模型。", + "cannotDuplicateConnection": "无法创建重复的连接", + "ipAdapterModel": "IP-Adapter 模型", + "ipAdapterDescription": "图像提示词自适应 (IP-Adapter)。", + "ipAdapterModelDescription": "IP-Adapter 模型", + "floatCollectionDescription": "一个浮点数合集。", + "enum": "Enum (枚举)", + "integerPolymorphicDescription": "一个整数值合集。", + "float": "浮点", + "integer": "整数", + "colorField": "颜色", + "stringCollectionDescription": "一个字符串合集。", + "stringCollection": "字符串合集", + "uNetField": "UNet", + "integerCollection": "整数合集", + "vaeModelField": "VAE", + "integerCollectionDescription": "一个整数值合集。", + "clipField": "Clip", + "stringDescription": "字符串是指文本。", + "colorCollection": "一个颜色合集。", + "boolean": "布尔值", + "stringPolymorphicDescription": "一个字符串合集。", + "controlField": "控制信息", + "floatPolymorphicDescription": "一个浮点数合集。", + "vaeField": "Vae", + "floatCollection": "浮点合集", + "booleanCollection": "布尔值合集", + "imageCollectionDescription": "一个图像合集。", + "loRAModelField": "LoRA", + "imageCollection": "图像合集", + "ipAdapterPolymorphicDescription": "一个 IP-Adapters Collection 合集。", + "ipAdapterCollection": "IP-Adapters 合集", + "conditioningCollection": "条件合集", + "ipAdapterPolymorphic": "IP-Adapters 多态", + "conditioningCollectionDescription": "条件可以在节点间传递。", + "colorPolymorphic": "颜色多态", + "conditioningPolymorphic": "条件多态", + "latentsCollection": "Latents 合集", + "stringPolymorphic": "字符多态", + "conditioningPolymorphicDescription": "条件可以在节点间传递。", + "imagePolymorphic": "图像多态", + "floatPolymorphic": "浮点多态", + "ipAdapterCollectionDescription": "一个 IP-Adapters Collection 合集。", + "ipAdapter": "IP-Adapter", + "booleanPolymorphic": "布尔多态", + "conditioningFieldDescription": "条件可以在节点间传递。", + "integerPolymorphic": "整数多态", + "latentsPolymorphic": "Latents 多态", + "conditioningField": "条件", + "latentsField": "Latents", + "updateAllNodes": "更新节点", + "unableToUpdateNodes_other": "{{count}} 个节点无法完成更新", + "inputFieldTypeParseError": "无法解析 {{node}} 的输入类型 {{field}}。({{message}})", + "unsupportedArrayItemType": "不支持的数组类型 \"{{type}}\"", + "addLinearView": "添加到线性视图", + "targetNodeFieldDoesNotExist": "无效的边缘:{{node}} 的目标/输入区域 {{field}} 不存在", + "unsupportedMismatchedUnion": "合集或标量类型与基类 {{firstType}} 和 {{secondType}} 不匹配", + "allNodesUpdated": "已更新所有节点", + "sourceNodeDoesNotExist": "无效的边缘:{{node}} 的源/输出节点不存在", + "unableToExtractEnumOptions": "无法提取枚举选项", + "unableToParseFieldType": "无法解析类型", + "outputFieldInInput": "输入中的输出区域", + "unrecognizedWorkflowVersion": "无法识别的工作流架构版本:{{version}}", + "outputFieldTypeParseError": "无法解析 {{node}} 的输出类型 {{field}}。({{message}})", + "sourceNodeFieldDoesNotExist": "无效的边缘:{{node}} 的源/输出区域 {{field}} 不存在", + "unableToGetWorkflowVersion": "无法获取工作流架构版本", + "nodePack": "节点包", + "unableToExtractSchemaNameFromRef": "无法从参考中提取架构名", + "unableToMigrateWorkflow": "无法迁移工作流", + "unknownOutput": "未知输出:{{name}}", + "unableToUpdateNode": "无法更新节点", + "unknownErrorValidatingWorkflow": "验证工作流时出现未知错误", + "collectionFieldType": "{{name}} 合集", + "unknownNodeType": "未知节点类型", + "targetNodeDoesNotExist": "无效的边缘:{{node}} 的目标/输入节点不存在", + "unknownFieldType": "$t(nodes.unknownField) 类型:{{type}}", + "collectionOrScalarFieldType": "{{name}} 合集 | 标量", + "nodeVersion": "节点版本", + "deletedInvalidEdge": "已删除无效的边缘 {{source}} -> {{target}}", + "unknownInput": "未知输入:{{name}}", + "prototypeDesc": "此调用是一个原型 (prototype)。它可能会在本项目更新期间发生破坏性更改,并且随时可能被删除。", + "betaDesc": "此调用尚处于测试阶段。在稳定之前,它可能会在项目更新期间发生破坏性更改。本项目计划长期支持这种调用。", + "newWorkflow": "新建工作流", + "newWorkflowDesc": "是否创建一个新的工作流?", + "newWorkflowDesc2": "当前工作流有未保存的更改。", + "unsupportedAnyOfLength": "联合(union)数据类型数目过多 ({{count}})" + }, + "controlnet": { + "resize": "直接缩放", + "showAdvanced": "显示高级", + "contentShuffleDescription": "随机打乱图像内容", + "importImageFromCanvas": "从画布导入图像", + "lineartDescription": "将图像转换为线稿", + "importMaskFromCanvas": "从画布导入遮罩", + "hideAdvanced": "隐藏高级", + "ipAdapterModel": "Adapter 模型", + "resetControlImage": "重置控制图像", + "beginEndStepPercent": "开始 / 结束步数百分比", + "mlsdDescription": "简洁的分割线段(直线)检测器", + "duplicate": "复制", + "balanced": "平衡", + "prompt": "Prompt (提示词控制)", + "depthMidasDescription": "使用 Midas 生成深度图", + "openPoseDescription": "使用 Openpose 进行人体姿态估计", + "resizeMode": "缩放模式", + "weight": "权重", + "selectModel": "选择一个模型", + "crop": "裁剪", + "processor": "处理器", + "none": "无", + "incompatibleBaseModel": "不兼容的基础模型:", + "enableControlnet": "启用 ControlNet", + "detectResolution": "检测分辨率", + "pidiDescription": "像素差分 (PIDI) 图像处理", + "controlMode": "控制模式", + "fill": "填充", + "cannyDescription": "Canny 边缘检测", + "colorMapDescription": "从图像生成一张颜色图", + "imageResolution": "图像分辨率", + "autoConfigure": "自动配置处理器", + "normalBaeDescription": "法线 BAE 处理", + "noneDescription": "不应用任何处理", + "saveControlImage": "保存控制图像", + "toggleControlNet": "开关此 ControlNet", + "delete": "删除", + "colorMapTileSize": "分块大小", + "ipAdapterImageFallback": "无已选择的 IP Adapter 图像", + "mediapipeFaceDescription": "使用 Mediapipe 检测面部", + "depthZoeDescription": "使用 Zoe 生成深度图", + "hedDescription": "整体嵌套边缘检测", + "setControlImageDimensions": "设定控制图像尺寸宽/高为", + "resetIPAdapterImage": "重置 IP Adapter 图像", + "handAndFace": "手部和面部", + "enableIPAdapter": "启用 IP Adapter", + "amult": "角度倍率 (a_mult)", + "bgth": "背景移除阈值 (bg_th)", + "lineartAnimeDescription": "动漫风格线稿处理", + "minConfidence": "最小置信度", + "lowThreshold": "弱判断阈值", + "highThreshold": "强判断阈值", + "addT2IAdapter": "添加 $t(common.t2iAdapter)", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) 已启用, $t(common.t2iAdapter) 已禁用", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 已启用, $t(common.controlNet) 已禁用", + "addControlNet": "添加 $t(common.controlNet)", + "controlNetT2IMutexDesc": "$t(common.controlNet) 和 $t(common.t2iAdapter) 目前不支持同时启用。", + "addIPAdapter": "添加 $t(common.ipAdapter)", + "safe": "保守模式", + "scribble": "草绘 (scribble)", + "maxFaces": "最大面部数", + "pidi": "PIDI", + "normalBae": "Normal BAE", + "hed": "HED", + "contentShuffle": "Content Shuffle", + "f": "F", + "h": "H", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "control": "Control (普通控制)", + "coarse": "Coarse", + "depthMidas": "Depth (Midas)", + "w": "W", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "mediapipeFace": "Mediapipe Face", + "mlsd": "M-LSD", + "lineart": "Lineart", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "megaControl": "Mega Control (超级控制)", + "depthZoe": "Depth (Zoe)", + "colorMap": "Color", + "openPose": "Openpose", + "controlAdapter_other": "Control Adapters", + "lineartAnime": "Lineart Anime", + "canny": "Canny" + }, + "queue": { + "status": "状态", + "cancelTooltip": "取消当前项目", + "queueEmpty": "队列为空", + "pauseSucceeded": "处理器已暂停", + "in_progress": "处理中", + "queueFront": "添加到队列前", + "completed": "已完成", + "queueBack": "添加到队列", + "cancelFailed": "取消项目时出现问题", + "pauseFailed": "暂停处理器时出现问题", + "clearFailed": "清除队列时出现问题", + "clearSucceeded": "队列已清除", + "pause": "暂停", + "cancelSucceeded": "项目已取消", + "queue": "队列", + "batch": "批处理", + "clearQueueAlertDialog": "清除队列时会立即取消所有处理中的项目并且会完全清除队列。", + "pending": "待定", + "completedIn": "完成于", + "resumeFailed": "恢复处理器时出现问题", + "clear": "清除", + "prune": "修剪", + "total": "总计", + "canceled": "已取消", + "pruneFailed": "修剪队列时出现问题", + "cancelBatchSucceeded": "批处理已取消", + "clearTooltip": "取消并清除所有项目", + "current": "当前", + "pauseTooltip": "暂停处理器", + "failed": "已失败", + "cancelItem": "取消项目", + "next": "下一个", + "cancelBatch": "取消批处理", + "cancel": "取消", + "resumeSucceeded": "处理器已恢复", + "resumeTooltip": "恢复处理器", + "resume": "恢复", + "cancelBatchFailed": "取消批处理时出现问题", + "clearQueueAlertDialog2": "您确定要清除队列吗?", + "item": "项目", + "pruneSucceeded": "从队列修剪 {{item_count}} 个已完成的项目", + "notReady": "无法排队", + "batchFailedToQueue": "批次加入队列失败", + "batchValues": "批次数", + "queueCountPrediction": "添加 {{predicted}} 到队列", + "batchQueued": "加入队列的批次", + "queuedCount": "{{pending}} 待处理", + "front": "前", + "pruneTooltip": "修剪 {{item_count}} 个已完成的项目", + "batchQueuedDesc_other": "在队列的 {{direction}} 中添加了 {{count}} 个会话", + "graphQueued": "节点图已加入队列", + "back": "后", + "session": "会话", + "queueTotal": "总计 {{total}}", + "enqueueing": "队列中的批次", + "queueMaxExceeded": "超出最大值 {{max_queue_size}},将跳过 {{skip}}", + "graphFailedToQueue": "节点图加入队列失败", + "batchFieldValues": "批处理值", + "time": "时间" + }, + "sdxl": { + "refinerStart": "Refiner 开始作用时机", + "selectAModel": "选择一个模型", + "scheduler": "调度器", + "cfgScale": "CFG 等级", + "negStylePrompt": "负向样式提示词", + "noModelsAvailable": "无可用模型", + "negAestheticScore": "负向美学评分", + "useRefiner": "启用 Refiner", + "denoisingStrength": "去噪强度", + "refinermodel": "Refiner 模型", + "posAestheticScore": "正向美学评分", + "concatPromptStyle": "连接提示词 & 样式", + "loading": "加载中...", + "steps": "步数", + "posStylePrompt": "正向样式提示词", + "refiner": "Refiner" + }, + "metadata": { + "positivePrompt": "正向提示词", + "negativePrompt": "负向提示词", + "generationMode": "生成模式", + "Threshold": "噪声阈值", + "metadata": "元数据", + "strength": "图生图强度", + "seed": "种子", + "imageDetails": "图像详细信息", + "perlin": "Perlin 噪声", + "model": "模型", + "noImageDetails": "未找到图像详细信息", + "hiresFix": "高分辨率优化", + "cfgScale": "CFG 等级", + "initImage": "初始图像", + "height": "高度", + "variations": "(成对/第二)种子权重", + "noMetaData": "未找到元数据", + "width": "宽度", + "createdBy": "创建者是", + "workflow": "工作流", + "steps": "步数", + "scheduler": "调度器", + "seamless": "无缝", + "fit": "图生图匹配", + "recallParameters": "召回参数", + "noRecallParameters": "未找到要召回的参数", + "vae": "VAE", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)" + }, + "models": { + "noMatchingModels": "无相匹配的模型", + "loading": "加载中", + "noMatchingLoRAs": "无相匹配的 LoRA", + "noLoRAsAvailable": "无可用 LoRA", + "noModelsAvailable": "无可用模型", + "selectModel": "选择一个模型", + "selectLoRA": "选择一个 LoRA", + "noRefinerModelsInstalled": "无已安装的 SDXL Refiner 模型", + "noLoRAsInstalled": "无已安装的 LoRA", + "esrganModel": "ESRGAN 模型", + "addLora": "添加 LoRA", + "noLoRAsLoaded": "无已加载的 LoRA" + }, + "boards": { + "autoAddBoard": "自动添加面板", + "topMessage": "该面板包含的图像正使用以下功能:", + "move": "移动", + "menuItemAutoAdd": "自动添加到该面板", + "myBoard": "我的面板", + "searchBoard": "检索面板...", + "noMatching": "没有相匹配的面板", + "selectBoard": "选择一个面板", + "cancel": "取消", + "addBoard": "添加面板", + "bottomMessage": "删除该面板并且将其对应的图像将重置当前使用该面板的所有功能。", + "uncategorized": "未分类", + "changeBoard": "更改面板", + "loading": "加载中...", + "clearSearch": "清除检索", + "downloadBoard": "下载面板", + "deleteBoardOnly": "仅删除面板", + "deleteBoard": "删除面板", + "deleteBoardAndImages": "删除面板和图像", + "deletedBoardsCannotbeRestored": "已删除的面板无法被恢复", + "movingImagesToBoard_other": "移动 {{count}} 张图像到面板:" + }, + "embedding": { + "noMatchingEmbedding": "不匹配的 Embedding", + "addEmbedding": "添加 Embedding", + "incompatibleModel": "不兼容的基础模型:", + "noEmbeddingsLoaded": "无已加载的 Embedding" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "每次生成图像使用不同的种子", + "perIterationLabel": "每次迭代的种子", + "perIterationDesc": "每次迭代使用不同的种子", + "perPromptLabel": "每张图像的种子", + "label": "种子行为" + }, + "enableDynamicPrompts": "启用动态提示词", + "combinatorial": "组合生成", + "maxPrompts": "最大提示词数", + "dynamicPrompts": "动态提示词", + "promptsWithCount_other": "{{count}} 个提示词", + "promptsPreview": "提示词预览" + }, + "popovers": { + "compositingMaskAdjustments": { + "heading": "遮罩调整", + "paragraphs": [ + "调整遮罩。" + ] + }, + "paramRatio": { + "heading": "纵横比", + "paragraphs": [ + "生成图像的尺寸纵横比。", + "图像尺寸(单位:像素)建议 SD 1.5 模型使用等效 512x512 的尺寸,SDXL 模型使用等效 1024x1024 的尺寸。" + ] + }, + "compositingCoherenceSteps": { + "heading": "步数", + "paragraphs": [ + "一致性层中使用的去噪步数。", + "与主参数中的步数相同。" + ] + }, + "compositingBlur": { + "heading": "模糊", + "paragraphs": [ + "遮罩模糊半径。" + ] + }, + "noiseUseCPU": { + "heading": "使用 CPU 噪声", + "paragraphs": [ + "选择由 CPU 或 GPU 生成噪声。", + "启用 CPU 噪声后,特定的种子将会在不同的设备上产生下相同的图像。", + "启用 CPU 噪声不会对性能造成影响。" + ] + }, + "paramVAEPrecision": { + "heading": "VAE 精度", + "paragraphs": [ + "VAE 编解码过程种使用的精度。FP16/半精度以微小的图像变化为代价提高效率。" + ] + }, + "compositingCoherenceMode": { + "heading": "模式", + "paragraphs": [ + "一致性层模式。" + ] + }, + "controlNetResizeMode": { + "heading": "缩放模式", + "paragraphs": [ + "ControlNet 输入图像适应输出图像大小的方法。" + ] + }, + "clipSkip": { + "paragraphs": [ + "选择要跳过 CLIP 模型多少层。", + "部分模型跳过特定数值的层时效果会更好。", + "较高的数值通常会导致图像细节更少。" + ], + "heading": "CLIP 跳过层" + }, + "paramModel": { + "heading": "模型", + "paragraphs": [ + "用于去噪过程的模型。", + "不同的模型一般会通过接受训练来专门产生特定的美学内容和结果。" + ] + }, + "paramIterations": { + "heading": "迭代数", + "paragraphs": [ + "生成图像的数量。", + "若启用动态提示词,每种提示词都会生成这么多次。" + ] + }, + "compositingCoherencePass": { + "heading": "一致性层", + "paragraphs": [ + "第二轮去噪有助于合成内补/外扩图像。" + ] + }, + "compositingStrength": { + "heading": "强度", + "paragraphs": [ + "一致性层使用的去噪强度。", + "去噪强度与图生图的参数相同。" + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "生成过程会避免生成负向提示词中的概念。使用此选项来使输出排除部分质量或对象。", + "支持 Compel 语法 和 embeddings。" + ], + "heading": "负向提示词" + }, + "compositingBlurMethod": { + "heading": "模糊方式", + "paragraphs": [ + "应用于遮罩区域的模糊方法。" + ] + }, + "paramScheduler": { + "heading": "调度器", + "paragraphs": [ + "调度器 (采样器) 定义如何在图像迭代过程中添加噪声,或者定义如何根据一个模型的输出来更新采样。" + ] + }, + "controlNetWeight": { + "heading": "权重", + "paragraphs": [ + "ControlNet 对生成图像的影响强度。" + ] + }, + "paramCFGScale": { + "heading": "CFG 等级", + "paragraphs": [ + "控制提示词对生成过程的影响程度。" + ] + }, + "paramSteps": { + "heading": "步数", + "paragraphs": [ + "每次生成迭代执行的步数。", + "通常情况下步数越多结果越好,但需要更多生成时间。" + ] + }, + "paramPositiveConditioning": { + "heading": "正向提示词", + "paragraphs": [ + "引导生成过程。您可以使用任何单词或短语。", + "Compel 语法、动态提示词语法和 embeddings。" + ] + }, + "lora": { + "heading": "LoRA 权重", + "paragraphs": [ + "更高的 LoRA 权重会对最终图像产生更大的影响。" + ] + }, + "infillMethod": { + "heading": "填充方法", + "paragraphs": [ + "填充选定区域的方式。" + ] + }, + "controlNetBeginEnd": { + "heading": "开始 / 结束步数百分比", + "paragraphs": [ + "去噪过程中在哪部分步数应用 ControlNet。", + "在组合处理开始阶段应用 ControlNet,且在引导细节生成的结束阶段应用 ControlNet。" + ] + }, + "scaleBeforeProcessing": { + "heading": "处理前缩放", + "paragraphs": [ + "生成图像前将所选区域缩放为最适合模型的大小。" + ] + }, + "paramDenoisingStrength": { + "heading": "去噪强度", + "paragraphs": [ + "为输入图像添加的噪声量。", + "输入 0 会导致结果图像和输入完全相同,输入 1 则会生成全新的图像。" + ] + }, + "paramSeed": { + "heading": "种子", + "paragraphs": [ + "控制用于生成的起始噪声。", + "禁用 “随机种子” 来以相同设置生成相同的结果。" + ] + }, + "controlNetControlMode": { + "heading": "控制模式", + "paragraphs": [ + "给提示词或 ControlNet 增加更大的权重。" + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "动态提示词可将单个提示词解析为多个。", + "基本语法示例:\"a {red|green|blue} ball\"。这会产生三种提示词:\"a red ball\", \"a green ball\" 和 \"a blue ball\"。", + "可以在单个提示词中多次使用该语法,但务必请使用最大提示词设置来控制生成的提示词数量。" + ], + "heading": "动态提示词" + }, + "paramVAE": { + "paragraphs": [ + "用于将 AI 输出转换成最终图像的模型。" + ], + "heading": "VAE" + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "控制生成提示词时种子的使用方式。", + "每次迭代过程都会使用一个唯一的种子。使用本选项来探索单个种子的提示词变化。", + "例如,如果你有 5 种提示词,则生成的每个图像都会使用相同种子。", + "为每张图像使用独立的唯一种子。这可以提供更多变化。" + ], + "heading": "种子行为" + }, + "dynamicPromptsMaxPrompts": { + "heading": "最大提示词数量", + "paragraphs": [ + "限制动态提示词可生成的提示词数量。" + ] + }, + "controlNet": { + "paragraphs": [ + "ControlNet 为生成过程提供引导,为生成具有受控构图、结构、样式的图像提供帮助,具体的功能由所选的模型决定。" + ], + "heading": "ControlNet" + }, + "paramCFGRescaleMultiplier": { + "heading": "CFG 重缩放倍数", + "paragraphs": [ + "CFG 引导的重缩放倍率,用于通过 zero-terminal SNR (ztsnr) 训练的模型。推荐设为 0.7。" + ] + } + }, + "invocationCache": { + "disable": "禁用", + "misses": "缓存未中", + "enableFailed": "启用调用缓存时出现问题", + "invocationCache": "调用缓存", + "clearSucceeded": "调用缓存已清除", + "enableSucceeded": "调用缓存已启用", + "clearFailed": "清除调用缓存时出现问题", + "hits": "缓存命中", + "disableSucceeded": "调用缓存已禁用", + "disableFailed": "禁用调用缓存时出现问题", + "enable": "启用", + "clear": "清除", + "maxCacheSize": "最大缓存大小", + "cacheSize": "缓存大小", + "useCache": "使用缓存" + }, + "hrf": { + "enableHrf": "启用高分辨率修复", + "upscaleMethod": "放大方法", + "enableHrfTooltip": "使用较低的分辨率进行初始生成,放大到基础分辨率后进行图生图。", + "metadata": { + "strength": "高分辨率修复强度", + "enabled": "高分辨率修复已启用", + "method": "高分辨率修复方法" + }, + "hrf": "高分辨率修复", + "hrfStrength": "高分辨率修复强度", + "strengthTooltip": "值越低细节越少,但可以减少部分潜在的伪影。" + }, + "workflows": { + "saveWorkflowAs": "保存工作流为", + "workflowEditorMenu": "工作流编辑器菜单", + "noSystemWorkflows": "无系统工作流", + "workflowName": "工作流名称", + "noUserWorkflows": "无用户工作流", + "defaultWorkflows": "默认工作流", + "saveWorkflow": "保存工作流", + "openWorkflow": "打开工作流", + "clearWorkflowSearchFilter": "清除工作流检索过滤器", + "workflowLibrary": "工作流库", + "downloadWorkflow": "保存到文件", + "noRecentWorkflows": "无最近工作流", + "workflowSaved": "已保存工作流", + "workflowIsOpen": "工作流已打开", + "unnamedWorkflow": "未命名的工作流", + "savingWorkflow": "保存工作流中...", + "problemLoading": "加载工作流时出现问题", + "loading": "加载工作流中", + "searchWorkflows": "检索工作流", + "problemSavingWorkflow": "保存工作流时出现问题", + "deleteWorkflow": "删除工作流", + "workflows": "工作流", + "noDescription": "无描述", + "uploadWorkflow": "从文件中加载", + "userWorkflows": "我的工作流", + "newWorkflowCreated": "已创建新的工作流" + }, + "app": { + "storeNotInitialized": "商店尚未初始化" + } +} diff --git a/invokeai/frontend/web/dist/locales/zh_Hant.json b/invokeai/frontend/web/dist/locales/zh_Hant.json new file mode 100644 index 0000000000..fe51856117 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/zh_Hant.json @@ -0,0 +1,53 @@ +{ + "common": { + "nodes": "節點", + "img2img": "圖片轉圖片", + "langSimplifiedChinese": "簡體中文", + "statusError": "錯誤", + "statusDisconnected": "已中斷連線", + "statusConnected": "已連線", + "back": "返回", + "load": "載入", + "close": "關閉", + "langEnglish": "英語", + "settingsLabel": "設定", + "upload": "上傳", + "langArabic": "阿拉伯語", + "discordLabel": "Discord", + "nodesDesc": "使用Node生成圖像的系統正在開發中。敬請期待有關於這項功能的更新。", + "reportBugLabel": "回報錯誤", + "githubLabel": "GitHub", + "langKorean": "韓語", + "langPortuguese": "葡萄牙語", + "hotkeysLabel": "快捷鍵", + "languagePickerLabel": "切換語言", + "langDutch": "荷蘭語", + "langFrench": "法語", + "langGerman": "德語", + "langItalian": "義大利語", + "langJapanese": "日語", + "langPolish": "波蘭語", + "langBrPortuguese": "巴西葡萄牙語", + "langRussian": "俄語", + "langSpanish": "西班牙語", + "unifiedCanvas": "統一畫布", + "cancel": "取消", + "langHebrew": "希伯來語", + "txt2img": "文字轉圖片" + }, + "accessibility": { + "modelSelect": "選擇模型", + "invokeProgressBar": "Invoke 進度條", + "uploadImage": "上傳圖片", + "reset": "重設", + "nextImage": "下一張圖片", + "previousImage": "上一張圖片", + "flipHorizontally": "水平翻轉", + "useThisParameter": "使用此參數", + "zoomIn": "放大", + "zoomOut": "縮小", + "flipVertically": "垂直翻轉", + "modifyConfig": "修改配置", + "menu": "選單" + } +} From e38d0e39b7779abf37993d20d7c56ebd1dfe8049 Mon Sep 17 00:00:00 2001 From: woweenie <145132974+woweenie@users.noreply.github.com> Date: Wed, 27 Dec 2023 22:14:14 +0100 Subject: [PATCH 248/515] fix bug when there are two multi vector TI in a prompt --- invokeai/backend/model_management/lora.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/invokeai/backend/model_management/lora.py b/invokeai/backend/model_management/lora.py index 3d2136659f..066381ac53 100644 --- a/invokeai/backend/model_management/lora.py +++ b/invokeai/backend/model_management/lora.py @@ -215,7 +215,9 @@ class ModelPatcher: text_encoder.resize_token_embeddings(init_tokens_count + new_tokens_added, pad_to_multiple_of) model_embeddings = text_encoder.get_input_embeddings() - for ti_name, _ in ti_list: + for ti_name, ti in ti_list: + ti_embedding = _get_ti_embedding(text_encoder.get_input_embeddings(), ti) + ti_tokens = [] for i in range(ti_embedding.shape[0]): embedding = ti_embedding[i] From daa9d50d952d7bb6c39b76efee6011c039e28d8d Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Thu, 28 Dec 2023 08:45:23 +1100 Subject: [PATCH 249/515] Update FE .gitignore --- invokeai/frontend/web/.gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/invokeai/frontend/web/.gitignore b/invokeai/frontend/web/.gitignore index 4a44b2ed02..402095f4be 100644 --- a/invokeai/frontend/web/.gitignore +++ b/invokeai/frontend/web/.gitignore @@ -9,8 +9,8 @@ lerna-debug.log* node_modules # We want to distribute the repo -# dist -# dist/** +dist +dist/** dist-ssr *.local From acba51c888c4818a92e814d7220996d1b13608e2 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Thu, 28 Dec 2023 09:44:08 +1100 Subject: [PATCH 250/515] remove fe build --- docs/javascripts/init_kapa_widget.js | 20 +- .../frontend/web/dist/assets/App-0865fac0.js | 169 -- .../frontend/web/dist/assets/App-6125620a.css | 1 - .../dist/assets/MantineProvider-11ad6165.js | 1 - .../assets/ThemeLocaleProvider-0667edb8.css | 9 - .../assets/ThemeLocaleProvider-5513dc99.js | 280 --- .../web/dist/assets/favicon-0d253ced.ico | Bin 118734 -> 0 bytes .../web/dist/assets/index-31d28826.js | 155 -- ...er-cyrillic-ext-wght-normal-1c3007b8.woff2 | Bin 27284 -> 0 bytes .../inter-cyrillic-wght-normal-eba94878.woff2 | Bin 17600 -> 0 bytes ...inter-greek-ext-wght-normal-81f77e51.woff2 | Bin 12732 -> 0 bytes .../inter-greek-wght-normal-d92c6cbc.woff2 | Bin 22480 -> 0 bytes ...inter-latin-ext-wght-normal-a2bfd9fe.woff2 | Bin 79940 -> 0 bytes .../inter-latin-wght-normal-88df0b5a.woff2 | Bin 46704 -> 0 bytes ...nter-vietnamese-wght-normal-15df7612.woff2 | Bin 10540 -> 0 bytes .../web/dist/assets/logo-13003d72.png | Bin 44115 -> 0 bytes invokeai/frontend/web/dist/index.html | 25 - invokeai/frontend/web/dist/locales/ar.json | 504 ----- invokeai/frontend/web/dist/locales/de.json | 1012 ---------- invokeai/frontend/web/dist/locales/en.json | 1662 ---------------- invokeai/frontend/web/dist/locales/es.json | 732 -------- invokeai/frontend/web/dist/locales/fi.json | 114 -- invokeai/frontend/web/dist/locales/fr.json | 531 ------ invokeai/frontend/web/dist/locales/he.json | 575 ------ invokeai/frontend/web/dist/locales/it.json | 1645 ---------------- invokeai/frontend/web/dist/locales/ja.json | 832 --------- invokeai/frontend/web/dist/locales/ko.json | 920 --------- invokeai/frontend/web/dist/locales/mn.json | 1 - invokeai/frontend/web/dist/locales/nl.json | 1504 --------------- invokeai/frontend/web/dist/locales/pl.json | 461 ----- invokeai/frontend/web/dist/locales/pt.json | 602 ------ invokeai/frontend/web/dist/locales/pt_BR.json | 577 ------ invokeai/frontend/web/dist/locales/ro.json | 1 - invokeai/frontend/web/dist/locales/ru.json | 1652 ---------------- invokeai/frontend/web/dist/locales/sv.json | 246 --- invokeai/frontend/web/dist/locales/tr.json | 58 - invokeai/frontend/web/dist/locales/uk.json | 619 ------ invokeai/frontend/web/dist/locales/vi.json | 1 - invokeai/frontend/web/dist/locales/zh_CN.json | 1663 ----------------- .../frontend/web/dist/locales/zh_Hant.json | 53 - 40 files changed, 10 insertions(+), 16615 deletions(-) delete mode 100644 invokeai/frontend/web/dist/assets/App-0865fac0.js delete mode 100644 invokeai/frontend/web/dist/assets/App-6125620a.css delete mode 100644 invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js delete mode 100644 invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css delete mode 100644 invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js delete mode 100644 invokeai/frontend/web/dist/assets/favicon-0d253ced.ico delete mode 100644 invokeai/frontend/web/dist/assets/index-31d28826.js delete mode 100644 invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 delete mode 100644 invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-eba94878.woff2 delete mode 100644 invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-81f77e51.woff2 delete mode 100644 invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 delete mode 100644 invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 delete mode 100644 invokeai/frontend/web/dist/assets/inter-latin-wght-normal-88df0b5a.woff2 delete mode 100644 invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 delete mode 100644 invokeai/frontend/web/dist/assets/logo-13003d72.png delete mode 100644 invokeai/frontend/web/dist/index.html delete mode 100644 invokeai/frontend/web/dist/locales/ar.json delete mode 100644 invokeai/frontend/web/dist/locales/de.json delete mode 100644 invokeai/frontend/web/dist/locales/en.json delete mode 100644 invokeai/frontend/web/dist/locales/es.json delete mode 100644 invokeai/frontend/web/dist/locales/fi.json delete mode 100644 invokeai/frontend/web/dist/locales/fr.json delete mode 100644 invokeai/frontend/web/dist/locales/he.json delete mode 100644 invokeai/frontend/web/dist/locales/it.json delete mode 100644 invokeai/frontend/web/dist/locales/ja.json delete mode 100644 invokeai/frontend/web/dist/locales/ko.json delete mode 100644 invokeai/frontend/web/dist/locales/mn.json delete mode 100644 invokeai/frontend/web/dist/locales/nl.json delete mode 100644 invokeai/frontend/web/dist/locales/pl.json delete mode 100644 invokeai/frontend/web/dist/locales/pt.json delete mode 100644 invokeai/frontend/web/dist/locales/pt_BR.json delete mode 100644 invokeai/frontend/web/dist/locales/ro.json delete mode 100644 invokeai/frontend/web/dist/locales/ru.json delete mode 100644 invokeai/frontend/web/dist/locales/sv.json delete mode 100644 invokeai/frontend/web/dist/locales/tr.json delete mode 100644 invokeai/frontend/web/dist/locales/uk.json delete mode 100644 invokeai/frontend/web/dist/locales/vi.json delete mode 100644 invokeai/frontend/web/dist/locales/zh_CN.json delete mode 100644 invokeai/frontend/web/dist/locales/zh_Hant.json diff --git a/docs/javascripts/init_kapa_widget.js b/docs/javascripts/init_kapa_widget.js index f22e276b5a..06885c464c 100644 --- a/docs/javascripts/init_kapa_widget.js +++ b/docs/javascripts/init_kapa_widget.js @@ -1,10 +1,10 @@ -document.addEventListener("DOMContentLoaded", function () { - var script = document.createElement("script"); - script.src = "https://widget.kapa.ai/kapa-widget.bundle.js"; - script.setAttribute("data-website-id", "b5973bb1-476b-451e-8cf4-98de86745a10"); - script.setAttribute("data-project-name", "Invoke.AI"); - script.setAttribute("data-project-color", "#11213C"); - script.setAttribute("data-project-logo", "https://avatars.githubusercontent.com/u/113954515?s=280&v=4"); - script.async = true; - document.head.appendChild(script); -}); +document.addEventListener("DOMContentLoaded", function () { + var script = document.createElement("script"); + script.src = "https://widget.kapa.ai/kapa-widget.bundle.js"; + script.setAttribute("data-website-id", "b5973bb1-476b-451e-8cf4-98de86745a10"); + script.setAttribute("data-project-name", "Invoke.AI"); + script.setAttribute("data-project-color", "#11213C"); + script.setAttribute("data-project-logo", "https://avatars.githubusercontent.com/u/113954515?s=280&v=4"); + script.async = true; + document.head.appendChild(script); +}); diff --git a/invokeai/frontend/web/dist/assets/App-0865fac0.js b/invokeai/frontend/web/dist/assets/App-0865fac0.js deleted file mode 100644 index a0ba64e2b0..0000000000 --- a/invokeai/frontend/web/dist/assets/App-0865fac0.js +++ /dev/null @@ -1,169 +0,0 @@ -import{a as Vc,b as uI,S as dI,c as fI,d as pI,e as R1,f as mI,i as A1,g as fR,h as hI,j as gI,k as pR,l as mx,m as mR,n as hx,o as hR,p as gR,r as i,R as B,q as gx,u as xm,s as vR,t as bR,v as xR,z as yR,P as CR,w as vx,x as wR,y as SR,A as kR,B as jR,C as _e,D as a,I as An,E as _R,F as IR,G as PR,H as Kt,J as je,K as et,L as gn,M as ze,N as zd,O as hr,Q as Mn,T as Xn,U as cn,V as va,W as ml,X as ut,Y as wo,Z as dc,_ as ba,$ as xa,a0 as Uh,a1 as bx,a2 as Bd,a3 as bn,a4 as Rw,a5 as ER,a6 as vI,a7 as T1,a8 as Hd,a9 as Uc,aa as MR,ab as bI,ac as xI,ad as yI,ae as Zo,af as OR,ag as fe,ah as pe,ai as H,aj as DR,ak as Aw,al as RR,am as AR,an as TR,ao as hl,ap as te,aq as NR,ar as lt,as as rn,at as W,au as Ie,av as $,aw as or,ax as tr,ay as CI,az as $R,aA as LR,aB as FR,aC as zR,aD as Jr,aE as xx,aF as ya,aG as zr,aH as Wd,aI as BR,aJ as HR,aK as Tw,aL as yx,aM as be,aN as Jo,aO as WR,aP as wI,aQ as SI,aR as Nw,aS as VR,aT as UR,aU as GR,aV as Ca,aW as Cx,aX as KR,aY as qR,aZ as wt,a_ as XR,a$ as QR,b0 as Ls,b1 as kI,b2 as jI,b3 as Gh,b4 as YR,b5 as $w,b6 as _I,b7 as ZR,b8 as JR,b9 as eA,ba as tA,bb as nA,bc as II,bd as rA,be as oA,bf as sA,bg as aA,bh as lA,bi as Yl,bj as iA,bk as Br,bl as cA,bm as uA,bn as dA,bo as Lw,bp as fA,bq as pA,br as Ya,bs as PI,bt as EI,bu as Kh,bv as wx,bw as Sx,bx as jo,by as MI,bz as mA,bA as Zl,bB as Ku,bC as Fw,bD as hA,bE as gA,bF as kx,bG as vA,bH as zw,bI as OI,bJ as bA,bK as xA,bL as Bw,bM as DI,bN as yA,bO as qh,bP as jx,bQ as _x,bR as Ix,bS as RI,bT as Xh,bU as AI,bV as CA,bW as Px,bX as bp,bY as xp,bZ as Tu,b_ as _v,b$ as nd,c0 as rd,c1 as od,c2 as sd,c3 as Hw,c4 as ym,c5 as Iv,c6 as Cm,c7 as Ww,c8 as wm,c9 as Vw,ca as N1,cb as Pv,cc as $1,cd as Uw,ce as nc,cf as Ev,cg as Sm,ch as Mv,ci as Za,cj as Ov,ck as Ja,cl as yp,cm as km,cn as Gw,co as L1,cp as jm,cq as Kw,cr as F1,cs as Vd,ct as TI,cu as wA,cv as qw,cw as Ex,cx as _m,cy as NI,cz as jr,cA as Nu,cB as Ti,cC as Mx,cD as $I,cE as Cp,cF as Ox,cG as SA,cH as LI,cI as Dv,cJ as Qh,cK as kA,cL as FI,cM as z1,cN as B1,cO as zI,cP as jA,cQ as H1,cR as _A,cS as W1,cT as IA,cU as V1,cV as PA,cW as EA,cX as Dx,cY as BI,cZ as Js,c_ as HI,c$ as ia,d0 as WI,d1 as MA,d2 as $u,d3 as Xw,d4 as OA,d5 as DA,d6 as Qw,d7 as Rx,d8 as VI,d9 as Ax,da as Tx,db as UI,dc as Jt,dd as RA,de as qn,df as AA,dg as Gc,dh as Yh,di as Nx,dj as GI,dk as KI,dl as TA,dm as NA,dn as $A,dp as Im,dq as qI,dr as $x,ds as XI,dt as LA,du as FA,dv as zA,dw as BA,dx as HA,dy as WA,dz as VA,dA as Yw,dB as Lx,dC as UA,dD as GA,dE as KA,dF as qA,dG as Zh,dH as XA,dI as QA,dJ as YA,dK as ZA,dL as JA,dM as xn,dN as eT,dO as tT,dP as nT,dQ as rT,dR as oT,dS as sT,dT as aT,dU as lT,dV as vd,dW as Zw,dX as as,dY as QI,dZ as iT,d_ as Fx,d$ as cT,e0 as Jw,e1 as uT,e2 as dT,e3 as fT,e4 as pT,e5 as mT,e6 as YI,e7 as hT,e8 as gT,e9 as vT,ea as bT,eb as xT,ec as yT,ed as CT,ee as wT,ef as ST,eg as kT,eh as jT,ei as _T,ej as IT,ek as PT,el as ET,em as MT,en as OT,eo as DT,ep as RT,eq as AT,er as TT,es as NT,et as $T,eu as LT,ev as FT,ew as zT,ex as BT,ey as HT,ez as WT,eA as VT,eB as UT,eC as GT,eD as KT,eE as qT,eF as XT,eG as ZI,eH as QT,eI as YT,eJ as ZT,eK as JT,eL as e9,eM as t9,eN as n9,eO as JI,eP as r9,eQ as o9,eR as s9,eS,eT as wp,eU as Ao,eV as a9,eW as l9,eX as i9,eY as c9,eZ as u9,e_ as d9,e$ as es,f0 as f9,f1 as p9,f2 as m9,f3 as h9,f4 as g9,f5 as v9,f6 as b9,f7 as x9,f8 as y9,f9 as C9,fa as w9,fb as S9,fc as k9,fd as j9,fe as _9,ff as I9,fg as P9,fh as E9,fi as M9,fj as O9,fk as D9,fl as R9,fm as A9,fn as T9,fo as N9,fp as tS,fq as $9,fr as Xo,fs as bd,ft as kr,fu as L9,fv as F9,fw as e3,fx as t3,fy as z9,fz as nS,fA as B9,fB as rS,fC as oS,fD as sS,fE as H9,fF as W9,fG as aS,fH as lS,fI as V9,fJ as U9,fK as Pm,fL as G9,fM as iS,fN as K9,fO as cS,fP as n3,fQ as r3,fR as q9,fS as X9,fT as o3,fU as Q9,fV as Y9,fW as Z9,fX as J9,fY as s3,fZ as a3,f_ as Ud,f$ as l3,g0 as Bl,g1 as i3,g2 as uS,g3 as eN,g4 as tN,g5 as c3,g6 as nN,g7 as rN,g8 as oN,g9 as sN,ga as aN,gb as u3,gc as zx,gd as U1,ge as lN,gf as iN,gg as cN,gh as d3,gi as Bx,gj as f3,gk as uN,gl as Hx,gm as p3,gn as dN,go as ta,gp as fN,gq as m3,gr as Kc,gs as pN,gt as h3,gu as mN,gv as hN,gw as gN,gx as vN,gy as qu,gz as rc,gA as dS,gB as bN,gC as xN,gD as yN,gE as CN,gF as wN,gG as SN,gH as fS,gI as kN,gJ as jN,gK as _N,gL as IN,gM as PN,gN as EN,gO as pS,gP as MN,gQ as ON,gR as DN,gS as RN,gT as AN,gU as TN,gV as NN,gW as $N,gX as LN,gY as FN,gZ as zN,g_ as Fa,g$ as BN,h0 as g3,h1 as v3,h2 as HN,h3 as WN,h4 as VN,h5 as UN,h6 as GN,h7 as KN,h8 as qN,h9 as XN,ha as Gd,hb as QN,hc as YN,hd as ZN,he as JN,hf as e$,hg as t$,hh as n$,hi as r$,hj as Em,hk as b3,hl as Mm,hm as o$,hn as s$,ho as fc,hp as x3,hq as y3,hr as Wx,hs as a$,ht as l$,hu as i$,hv as G1,hw as C3,hx as c$,hy as u$,hz as w3,hA as d$,hB as f$,hC as p$,hD as m$,hE as h$,hF as mS,hG as sm,hH as g$,hI as hS,hJ as v$,hK as Ni,hL as b$,hM as x$,hN as y$,hO as C$,hP as w$,hQ as gS,hR as S$,hS as k$,hT as j$,hU as _$,hV as I$,hW as P$,hX as E$,hY as M$,hZ as Rv,h_ as Av,h$ as Tv,i0 as Sp,i1 as vS,i2 as K1,i3 as bS,i4 as O$,i5 as D$,i6 as S3,i7 as R$,i8 as A$,i9 as T$,ia as N$,ib as $$,ic as L$,id as F$,ie as z$,ig as B$,ih as H$,ii as W$,ij as V$,ik as U$,il as G$,im as K$,io as kp,ip as Nv,iq as q$,ir as X$,is as Q$,it as Y$,iu as Z$,iv as J$,iw as eL,ix as tL,iy as xS,iz as yS,iA as nL,iB as rL,iC as oL,iD as sL}from"./index-31d28826.js";import{u as k3,a as wa,b as aL,r as Ae,f as lL,g as CS,c as pt,d as Nn}from"./MantineProvider-11ad6165.js";var iL=200;function cL(e,t,n,r){var o=-1,s=fI,l=!0,c=e.length,d=[],f=t.length;if(!c)return d;n&&(t=Vc(t,uI(n))),r?(s=pI,l=!1):t.length>=iL&&(s=R1,l=!1,t=new dI(t));e:for(;++o=120&&m.length>=120)?new dI(l&&m):void 0}m=e[0];var h=-1,g=c[0];e:for(;++h{const{background:y,backgroundColor:x}=s||{},w=l||y||x;return B.createElement("rect",{className:gx(["react-flow__minimap-node",{selected:b},f]),x:t,y:n,rx:m,ry:m,width:r,height:o,fill:w,stroke:c,strokeWidth:d,shapeRendering:h,onClick:g?S=>g(S,e):void 0})};j3.displayName="MiniMapNode";var wL=i.memo(j3);const SL=e=>e.nodeOrigin,kL=e=>e.getNodes().filter(t=>!t.hidden&&t.width&&t.height),$v=e=>e instanceof Function?e:()=>e;function jL({nodeStrokeColor:e="transparent",nodeColor:t="#e2e2e2",nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:o=2,nodeComponent:s=wL,onClick:l}){const c=xm(kL,vx),d=xm(SL),f=$v(t),m=$v(e),h=$v(n),g=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return B.createElement(B.Fragment,null,c.map(b=>{const{x:y,y:x}=vR(b,d).positionAbsolute;return B.createElement(s,{key:b.id,x:y,y:x,width:b.width,height:b.height,style:b.style,selected:b.selected,className:h(b),color:f(b),borderRadius:r,strokeColor:m(b),strokeWidth:o,shapeRendering:g,onClick:l,id:b.id})}))}var _L=i.memo(jL);const IL=200,PL=150,EL=e=>{const t=e.getNodes(),n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:t.length>0?kR(jR(t,e.nodeOrigin),n):n,rfId:e.rfId}},ML="react-flow__minimap-desc";function _3({style:e,className:t,nodeStrokeColor:n="transparent",nodeColor:r="#e2e2e2",nodeClassName:o="",nodeBorderRadius:s=5,nodeStrokeWidth:l=2,nodeComponent:c,maskColor:d="rgb(240, 240, 240, 0.6)",maskStrokeColor:f="none",maskStrokeWidth:m=1,position:h="bottom-right",onClick:g,onNodeClick:b,pannable:y=!1,zoomable:x=!1,ariaLabel:w="React Flow mini map",inversePan:S=!1,zoomStep:j=10,offsetScale:_=5}){const I=bR(),E=i.useRef(null),{boundingRect:M,viewBB:D,rfId:R}=xm(EL,vx),N=(e==null?void 0:e.width)??IL,O=(e==null?void 0:e.height)??PL,T=M.width/N,U=M.height/O,G=Math.max(T,U),q=G*N,Y=G*O,Q=_*G,V=M.x-(q-M.width)/2-Q,se=M.y-(Y-M.height)/2-Q,ee=q+Q*2,le=Y+Q*2,ae=`${ML}-${R}`,ce=i.useRef(0);ce.current=G,i.useEffect(()=>{if(E.current){const A=xR(E.current),L=z=>{const{transform:oe,d3Selection:X,d3Zoom:Z}=I.getState();if(z.sourceEvent.type!=="wheel"||!X||!Z)return;const me=-z.sourceEvent.deltaY*(z.sourceEvent.deltaMode===1?.05:z.sourceEvent.deltaMode?1:.002)*j,ve=oe[2]*Math.pow(2,me);Z.scaleTo(X,ve)},K=z=>{const{transform:oe,d3Selection:X,d3Zoom:Z,translateExtent:me,width:ve,height:de}=I.getState();if(z.sourceEvent.type!=="mousemove"||!X||!Z)return;const ke=ce.current*Math.max(1,oe[2])*(S?-1:1),we={x:oe[0]-z.sourceEvent.movementX*ke,y:oe[1]-z.sourceEvent.movementY*ke},Re=[[0,0],[ve,de]],Qe=wR.translate(we.x,we.y).scale(oe[2]),$e=Z.constrain()(Qe,Re,me);Z.transform(X,$e)},ne=yR().on("zoom",y?K:null).on("zoom.wheel",x?L:null);return A.call(ne),()=>{A.on("zoom",null)}}},[y,x,S,j]);const J=g?A=>{const L=SR(A);g(A,{x:L[0],y:L[1]})}:void 0,re=b?(A,L)=>{const K=I.getState().nodeInternals.get(L);b(A,K)}:void 0;return B.createElement(CR,{position:h,style:e,className:gx(["react-flow__minimap",t]),"data-testid":"rf__minimap"},B.createElement("svg",{width:N,height:O,viewBox:`${V} ${se} ${ee} ${le}`,role:"img","aria-labelledby":ae,ref:E,onClick:J},w&&B.createElement("title",{id:ae},w),B.createElement(_L,{onClick:re,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:s,nodeClassName:o,nodeStrokeWidth:l,nodeComponent:c}),B.createElement("path",{className:"react-flow__minimap-mask",d:`M${V-Q},${se-Q}h${ee+Q*2}v${le+Q*2}h${-ee-Q*2}z - M${D.x},${D.y}h${D.width}v${D.height}h${-D.width}z`,fill:d,fillRule:"evenodd",stroke:f,strokeWidth:m,pointerEvents:"none"})))}_3.displayName="MiniMap";var OL=i.memo(_3),ns;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(ns||(ns={}));function DL({color:e,dimensions:t,lineWidth:n}){return B.createElement("path",{stroke:e,strokeWidth:n,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`})}function RL({color:e,radius:t}){return B.createElement("circle",{cx:t,cy:t,r:t,fill:e})}const AL={[ns.Dots]:"#91919a",[ns.Lines]:"#eee",[ns.Cross]:"#e2e2e2"},TL={[ns.Dots]:1,[ns.Lines]:1,[ns.Cross]:6},NL=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function I3({id:e,variant:t=ns.Dots,gap:n=20,size:r,lineWidth:o=1,offset:s=2,color:l,style:c,className:d}){const f=i.useRef(null),{transform:m,patternId:h}=xm(NL,vx),g=l||AL[t],b=r||TL[t],y=t===ns.Dots,x=t===ns.Cross,w=Array.isArray(n)?n:[n,n],S=[w[0]*m[2]||1,w[1]*m[2]||1],j=b*m[2],_=x?[j,j]:S,I=y?[j/s,j/s]:[_[0]/s,_[1]/s];return B.createElement("svg",{className:gx(["react-flow__background",d]),style:{...c,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:f,"data-testid":"rf__background"},B.createElement("pattern",{id:h+e,x:m[0]%S[0],y:m[1]%S[1],width:S[0],height:S[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${I[0]},-${I[1]})`},y?B.createElement(RL,{color:g,radius:j/s}):B.createElement(DL,{dimensions:_,color:g,lineWidth:o})),B.createElement("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${h+e})`}))}I3.displayName="Background";var $L=i.memo(I3);function LL(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var FL=LL();const P3=1/60*1e3,zL=typeof performance<"u"?()=>performance.now():()=>Date.now(),E3=typeof window<"u"?e=>window.requestAnimationFrame(e):e=>setTimeout(()=>e(zL()),P3);function BL(e){let t=[],n=[],r=0,o=!1,s=!1;const l=new WeakSet,c={schedule:(d,f=!1,m=!1)=>{const h=m&&o,g=h?t:n;return f&&l.add(d),g.indexOf(d)===-1&&(g.push(d),h&&o&&(r=t.length)),d},cancel:d=>{const f=n.indexOf(d);f!==-1&&n.splice(f,1),l.delete(d)},process:d=>{if(o){s=!0;return}if(o=!0,[t,n]=[n,t],n.length=0,r=t.length,r)for(let f=0;f(e[t]=BL(()=>xd=!0),e),{}),WL=Kd.reduce((e,t)=>{const n=Jh[t];return e[t]=(r,o=!1,s=!1)=>(xd||GL(),n.schedule(r,o,s)),e},{}),VL=Kd.reduce((e,t)=>(e[t]=Jh[t].cancel,e),{});Kd.reduce((e,t)=>(e[t]=()=>Jh[t].process(pc),e),{});const UL=e=>Jh[e].process(pc),M3=e=>{xd=!1,pc.delta=q1?P3:Math.max(Math.min(e-pc.timestamp,HL),1),pc.timestamp=e,X1=!0,Kd.forEach(UL),X1=!1,xd&&(q1=!1,E3(M3))},GL=()=>{xd=!0,q1=!0,X1||E3(M3)},SS=()=>pc;function eg(e){const{viewBox:t="0 0 24 24",d:n,displayName:r,defaultProps:o={}}=e,s=i.Children.toArray(e.path),l=_e((c,d)=>a.jsx(An,{ref:d,viewBox:t,...o,...c,children:s.length?s:a.jsx("path",{fill:"currentColor",d:n})}));return l.displayName=r,l}function tg(e){const{theme:t}=_R(),n=IR();return i.useMemo(()=>PR(t.direction,{...n,...e}),[e,t.direction,n])}var KL=Object.defineProperty,qL=(e,t,n)=>t in e?KL(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,In=(e,t,n)=>(qL(e,typeof t!="symbol"?t+"":t,n),n);function kS(e){return e.sort((t,n)=>{const r=t.compareDocumentPosition(n);if(r&Node.DOCUMENT_POSITION_FOLLOWING||r&Node.DOCUMENT_POSITION_CONTAINED_BY)return-1;if(r&Node.DOCUMENT_POSITION_PRECEDING||r&Node.DOCUMENT_POSITION_CONTAINS)return 1;if(r&Node.DOCUMENT_POSITION_DISCONNECTED||r&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC)throw Error("Cannot sort the given nodes.");return 0})}var XL=e=>typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE;function jS(e,t,n){let r=e+1;return n&&r>=t&&(r=0),r}function _S(e,t,n){let r=e-1;return n&&r<0&&(r=t),r}var Q1=typeof window<"u"?i.useLayoutEffect:i.useEffect,Om=e=>e,QL=class{constructor(){In(this,"descendants",new Map),In(this,"register",e=>{if(e!=null)return XL(e)?this.registerNode(e):t=>{this.registerNode(t,e)}}),In(this,"unregister",e=>{this.descendants.delete(e);const t=kS(Array.from(this.descendants.keys()));this.assignIndex(t)}),In(this,"destroy",()=>{this.descendants.clear()}),In(this,"assignIndex",e=>{this.descendants.forEach(t=>{const n=e.indexOf(t.node);t.index=n,t.node.dataset.index=t.index.toString()})}),In(this,"count",()=>this.descendants.size),In(this,"enabledCount",()=>this.enabledValues().length),In(this,"values",()=>Array.from(this.descendants.values()).sort((t,n)=>t.index-n.index)),In(this,"enabledValues",()=>this.values().filter(e=>!e.disabled)),In(this,"item",e=>{if(this.count()!==0)return this.values()[e]}),In(this,"enabledItem",e=>{if(this.enabledCount()!==0)return this.enabledValues()[e]}),In(this,"first",()=>this.item(0)),In(this,"firstEnabled",()=>this.enabledItem(0)),In(this,"last",()=>this.item(this.descendants.size-1)),In(this,"lastEnabled",()=>{const e=this.enabledValues().length-1;return this.enabledItem(e)}),In(this,"indexOf",e=>{var t,n;return e&&(n=(t=this.descendants.get(e))==null?void 0:t.index)!=null?n:-1}),In(this,"enabledIndexOf",e=>e==null?-1:this.enabledValues().findIndex(t=>t.node.isSameNode(e))),In(this,"next",(e,t=!0)=>{const n=jS(e,this.count(),t);return this.item(n)}),In(this,"nextEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=jS(r,this.enabledCount(),t);return this.enabledItem(o)}),In(this,"prev",(e,t=!0)=>{const n=_S(e,this.count()-1,t);return this.item(n)}),In(this,"prevEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=_S(r,this.enabledCount()-1,t);return this.enabledItem(o)}),In(this,"registerNode",(e,t)=>{if(!e||this.descendants.has(e))return;const n=Array.from(this.descendants.keys()).concat(e),r=kS(n);t!=null&&t.disabled&&(t.disabled=!!t.disabled);const o={node:e,index:-1,...t};this.descendants.set(e,o),this.assignIndex(r)})}};function YL(e,t){if(e!=null){if(typeof e=="function"){e(t);return}try{e.current=t}catch{throw new Error(`Cannot assign value '${t}' to ref '${e}'`)}}}function Et(...e){return t=>{e.forEach(n=>{YL(n,t)})}}function ZL(...e){return i.useMemo(()=>Et(...e),e)}function JL(){const e=i.useRef(new QL);return Q1(()=>()=>e.current.destroy()),e.current}var[eF,O3]=Kt({name:"DescendantsProvider",errorMessage:"useDescendantsContext must be used within DescendantsProvider"});function tF(e){const t=O3(),[n,r]=i.useState(-1),o=i.useRef(null);Q1(()=>()=>{o.current&&t.unregister(o.current)},[]),Q1(()=>{if(!o.current)return;const l=Number(o.current.dataset.index);n!=l&&!Number.isNaN(l)&&r(l)});const s=Om(e?t.register(e):t.register);return{descendants:t,index:n,enabledIndex:t.enabledIndexOf(o.current),register:Et(s,o)}}function Vx(){return[Om(eF),()=>Om(O3()),()=>JL(),o=>tF(o)]}var[nF,ng]=Kt({name:"AccordionStylesContext",hookName:"useAccordionStyles",providerName:""}),[rF,Ux]=Kt({name:"AccordionItemContext",hookName:"useAccordionItemContext",providerName:""}),[oF,Sye,sF,aF]=Vx(),qi=_e(function(t,n){const{getButtonProps:r}=Ux(),o=r(t,n),l={display:"flex",alignItems:"center",width:"100%",outline:0,...ng().button};return a.jsx(je.button,{...o,className:et("chakra-accordion__button",t.className),__css:l})});qi.displayName="AccordionButton";function qd(e){const{value:t,defaultValue:n,onChange:r,shouldUpdate:o=(g,b)=>g!==b}=e,s=gn(r),l=gn(o),[c,d]=i.useState(n),f=t!==void 0,m=f?t:c,h=gn(g=>{const y=typeof g=="function"?g(m):g;l(m,y)&&(f||d(y),s(y))},[f,s,m,l]);return[m,h]}function lF(e){const{onChange:t,defaultIndex:n,index:r,allowMultiple:o,allowToggle:s,...l}=e;uF(e),dF(e);const c=sF(),[d,f]=i.useState(-1);i.useEffect(()=>()=>{f(-1)},[]);const[m,h]=qd({value:r,defaultValue(){return o?n??[]:n??-1},onChange:t});return{index:m,setIndex:h,htmlProps:l,getAccordionItemProps:b=>{let y=!1;return b!==null&&(y=Array.isArray(m)?m.includes(b):m===b),{isOpen:y,onChange:w=>{if(b!==null)if(o&&Array.isArray(m)){const S=w?m.concat(b):m.filter(j=>j!==b);h(S)}else w?h(b):s&&h(-1)}}},focusedIndex:d,setFocusedIndex:f,descendants:c}}var[iF,Gx]=Kt({name:"AccordionContext",hookName:"useAccordionContext",providerName:"Accordion"});function cF(e){const{isDisabled:t,isFocusable:n,id:r,...o}=e,{getAccordionItemProps:s,setFocusedIndex:l}=Gx(),c=i.useRef(null),d=i.useId(),f=r??d,m=`accordion-button-${f}`,h=`accordion-panel-${f}`;fF(e);const{register:g,index:b,descendants:y}=aF({disabled:t&&!n}),{isOpen:x,onChange:w}=s(b===-1?null:b);pF({isOpen:x,isDisabled:t});const S=()=>{w==null||w(!0)},j=()=>{w==null||w(!1)},_=i.useCallback(()=>{w==null||w(!x),l(b)},[b,l,x,w]),I=i.useCallback(R=>{const O={ArrowDown:()=>{const T=y.nextEnabled(b);T==null||T.node.focus()},ArrowUp:()=>{const T=y.prevEnabled(b);T==null||T.node.focus()},Home:()=>{const T=y.firstEnabled();T==null||T.node.focus()},End:()=>{const T=y.lastEnabled();T==null||T.node.focus()}}[R.key];O&&(R.preventDefault(),O(R))},[y,b]),E=i.useCallback(()=>{l(b)},[l,b]),M=i.useCallback(function(N={},O=null){return{...N,type:"button",ref:Et(g,c,O),id:m,disabled:!!t,"aria-expanded":!!x,"aria-controls":h,onClick:ze(N.onClick,_),onFocus:ze(N.onFocus,E),onKeyDown:ze(N.onKeyDown,I)}},[m,t,x,_,E,I,h,g]),D=i.useCallback(function(N={},O=null){return{...N,ref:O,role:"region",id:h,"aria-labelledby":m,hidden:!x}},[m,x,h]);return{isOpen:x,isDisabled:t,isFocusable:n,onOpen:S,onClose:j,getButtonProps:M,getPanelProps:D,htmlProps:o}}function uF(e){const t=e.index||e.defaultIndex,n=t!=null&&!Array.isArray(t)&&e.allowMultiple;zd({condition:!!n,message:`If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof t},`})}function dF(e){zd({condition:!!(e.allowMultiple&&e.allowToggle),message:"If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not"})}function fF(e){zd({condition:!!(e.isFocusable&&!e.isDisabled),message:`Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well. - `})}function pF(e){zd({condition:e.isOpen&&!!e.isDisabled,message:"Cannot open a disabled accordion item"})}function Xi(e){const{isOpen:t,isDisabled:n}=Ux(),{reduceMotion:r}=Gx(),o=et("chakra-accordion__icon",e.className),s=ng(),l={opacity:n?.4:1,transform:t?"rotate(-180deg)":void 0,transition:r?void 0:"transform 0.2s",transformOrigin:"center",...s.icon};return a.jsx(An,{viewBox:"0 0 24 24","aria-hidden":!0,className:o,__css:l,...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})})}Xi.displayName="AccordionIcon";var Qi=_e(function(t,n){const{children:r,className:o}=t,{htmlProps:s,...l}=cF(t),d={...ng().container,overflowAnchor:"none"},f=i.useMemo(()=>l,[l]);return a.jsx(rF,{value:f,children:a.jsx(je.div,{ref:n,...s,className:et("chakra-accordion__item",o),__css:d,children:typeof r=="function"?r({isExpanded:!!l.isOpen,isDisabled:!!l.isDisabled}):r})})});Qi.displayName="AccordionItem";var oc={ease:[.25,.1,.25,1],easeIn:[.4,0,1,1],easeOut:[0,0,.2,1],easeInOut:[.4,0,.2,1]},Vl={enter:{duration:.2,ease:oc.easeOut},exit:{duration:.1,ease:oc.easeIn}},oa={enter:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.enter}),exit:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.exit})},mF=e=>e!=null&&parseInt(e.toString(),10)>0,IS={exit:{height:{duration:.2,ease:oc.ease},opacity:{duration:.3,ease:oc.ease}},enter:{height:{duration:.3,ease:oc.ease},opacity:{duration:.4,ease:oc.ease}}},hF={exit:({animateOpacity:e,startingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:mF(t)?1:0},height:t,transitionEnd:r==null?void 0:r.exit,transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(IS.exit,o)}},enter:({animateOpacity:e,endingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:1},height:t,transitionEnd:r==null?void 0:r.enter,transition:(s=n==null?void 0:n.enter)!=null?s:oa.enter(IS.enter,o)}}},Xd=i.forwardRef((e,t)=>{const{in:n,unmountOnExit:r,animateOpacity:o=!0,startingHeight:s=0,endingHeight:l="auto",style:c,className:d,transition:f,transitionEnd:m,...h}=e,[g,b]=i.useState(!1);i.useEffect(()=>{const j=setTimeout(()=>{b(!0)});return()=>clearTimeout(j)},[]),zd({condition:Number(s)>0&&!!r,message:"startingHeight and unmountOnExit are mutually exclusive. You can't use them together"});const y=parseFloat(s.toString())>0,x={startingHeight:s,endingHeight:l,animateOpacity:o,transition:g?f:{enter:{duration:0}},transitionEnd:{enter:m==null?void 0:m.enter,exit:r?m==null?void 0:m.exit:{...m==null?void 0:m.exit,display:y?"block":"none"}}},w=r?n:!0,S=n||r?"enter":"exit";return a.jsx(hr,{initial:!1,custom:x,children:w&&a.jsx(Mn.div,{ref:t,...h,className:et("chakra-collapse",d),style:{overflow:"hidden",display:"block",...c},custom:x,variants:hF,initial:r?"exit":!1,animate:S,exit:"exit"})})});Xd.displayName="Collapse";var gF={enter:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:1,transition:(r=e==null?void 0:e.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:0,transition:(r=e==null?void 0:e.exit)!=null?r:oa.exit(Vl.exit,n),transitionEnd:t==null?void 0:t.exit}}},D3={initial:"exit",animate:"enter",exit:"exit",variants:gF},vF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,className:s,transition:l,transitionEnd:c,delay:d,...f}=t,m=o||r?"enter":"exit",h=r?o&&r:!0,g={transition:l,transitionEnd:c,delay:d};return a.jsx(hr,{custom:g,children:h&&a.jsx(Mn.div,{ref:n,className:et("chakra-fade",s),custom:g,...D3,animate:m,...f})})});vF.displayName="Fade";var bF={exit:({reverse:e,initialScale:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,...e?{scale:t,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{scale:t,...r==null?void 0:r.exit}},transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(Vl.exit,o)}},enter:({transitionEnd:e,transition:t,delay:n})=>{var r;return{opacity:1,scale:1,transition:(r=t==null?void 0:t.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:e==null?void 0:e.enter}}},R3={initial:"exit",animate:"enter",exit:"exit",variants:bF},xF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,initialScale:l=.95,className:c,transition:d,transitionEnd:f,delay:m,...h}=t,g=r?o&&r:!0,b=o||r?"enter":"exit",y={initialScale:l,reverse:s,transition:d,transitionEnd:f,delay:m};return a.jsx(hr,{custom:y,children:g&&a.jsx(Mn.div,{ref:n,className:et("chakra-offset-slide",c),...R3,animate:b,custom:y,...h})})});xF.displayName="ScaleFade";var yF={initial:({offsetX:e,offsetY:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,x:e,y:t,transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(Vl.exit,o),transitionEnd:r==null?void 0:r.exit}},enter:({transition:e,transitionEnd:t,delay:n})=>{var r;return{opacity:1,x:0,y:0,transition:(r=e==null?void 0:e.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({offsetY:e,offsetX:t,transition:n,transitionEnd:r,reverse:o,delay:s})=>{var l;const c={x:t,y:e};return{opacity:0,transition:(l=n==null?void 0:n.exit)!=null?l:oa.exit(Vl.exit,s),...o?{...c,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{...c,...r==null?void 0:r.exit}}}}},Xu={initial:"initial",animate:"enter",exit:"exit",variants:yF},CF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,className:l,offsetX:c=0,offsetY:d=8,transition:f,transitionEnd:m,delay:h,...g}=t,b=r?o&&r:!0,y=o||r?"enter":"exit",x={offsetX:c,offsetY:d,reverse:s,transition:f,transitionEnd:m,delay:h};return a.jsx(hr,{custom:x,children:b&&a.jsx(Mn.div,{ref:n,className:et("chakra-offset-slide",l),custom:x,...Xu,animate:y,...g})})});CF.displayName="SlideFade";var Yi=_e(function(t,n){const{className:r,motionProps:o,...s}=t,{reduceMotion:l}=Gx(),{getPanelProps:c,isOpen:d}=Ux(),f=c(s,n),m=et("chakra-accordion__panel",r),h=ng();l||delete f.hidden;const g=a.jsx(je.div,{...f,__css:h.panel,className:m});return l?g:a.jsx(Xd,{in:d,...o,children:g})});Yi.displayName="AccordionPanel";var A3=_e(function({children:t,reduceMotion:n,...r},o){const s=Xn("Accordion",r),l=cn(r),{htmlProps:c,descendants:d,...f}=lF(l),m=i.useMemo(()=>({...f,reduceMotion:!!n}),[f,n]);return a.jsx(oF,{value:d,children:a.jsx(iF,{value:m,children:a.jsx(nF,{value:s,children:a.jsx(je.div,{ref:o,...c,className:et("chakra-accordion",r.className),__css:s.root,children:t})})})})});A3.displayName="Accordion";function rg(e){return i.Children.toArray(e).filter(t=>i.isValidElement(t))}var[wF,SF]=Kt({strict:!1,name:"ButtonGroupContext"}),kF={horizontal:{"> *:first-of-type:not(:last-of-type)":{borderEndRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderStartRadius:0}},vertical:{"> *:first-of-type:not(:last-of-type)":{borderBottomRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderTopRadius:0}}},jF={horizontal:e=>({"& > *:not(style) ~ *:not(style)":{marginStart:e}}),vertical:e=>({"& > *:not(style) ~ *:not(style)":{marginTop:e}})},$t=_e(function(t,n){const{size:r,colorScheme:o,variant:s,className:l,spacing:c="0.5rem",isAttached:d,isDisabled:f,orientation:m="horizontal",...h}=t,g=et("chakra-button__group",l),b=i.useMemo(()=>({size:r,colorScheme:o,variant:s,isDisabled:f}),[r,o,s,f]);let y={display:"inline-flex",...d?kF[m]:jF[m](c)};const x=m==="vertical";return a.jsx(wF,{value:b,children:a.jsx(je.div,{ref:n,role:"group",__css:y,className:g,"data-attached":d?"":void 0,"data-orientation":m,flexDir:x?"column":void 0,...h})})});$t.displayName="ButtonGroup";function _F(e){const[t,n]=i.useState(!e);return{ref:i.useCallback(s=>{s&&n(s.tagName==="BUTTON")},[]),type:t?"button":void 0}}function Y1(e){const{children:t,className:n,...r}=e,o=i.isValidElement(t)?i.cloneElement(t,{"aria-hidden":!0,focusable:!1}):t,s=et("chakra-button__icon",n);return a.jsx(je.span,{display:"inline-flex",alignSelf:"center",flexShrink:0,...r,className:s,children:o})}Y1.displayName="ButtonIcon";function Z1(e){const{label:t,placement:n,spacing:r="0.5rem",children:o=a.jsx(va,{color:"currentColor",width:"1em",height:"1em"}),className:s,__css:l,...c}=e,d=et("chakra-button__spinner",s),f=n==="start"?"marginEnd":"marginStart",m=i.useMemo(()=>({display:"flex",alignItems:"center",position:t?"relative":"absolute",[f]:t?r:0,fontSize:"1em",lineHeight:"normal",...l}),[l,t,f,r]);return a.jsx(je.div,{className:d,...c,__css:m,children:o})}Z1.displayName="ButtonSpinner";var ol=_e((e,t)=>{const n=SF(),r=ml("Button",{...n,...e}),{isDisabled:o=n==null?void 0:n.isDisabled,isLoading:s,isActive:l,children:c,leftIcon:d,rightIcon:f,loadingText:m,iconSpacing:h="0.5rem",type:g,spinner:b,spinnerPlacement:y="start",className:x,as:w,...S}=cn(e),j=i.useMemo(()=>{const M={...r==null?void 0:r._focus,zIndex:1};return{display:"inline-flex",appearance:"none",alignItems:"center",justifyContent:"center",userSelect:"none",position:"relative",whiteSpace:"nowrap",verticalAlign:"middle",outline:"none",...r,...!!n&&{_focus:M}}},[r,n]),{ref:_,type:I}=_F(w),E={rightIcon:f,leftIcon:d,iconSpacing:h,children:c};return a.jsxs(je.button,{ref:ZL(t,_),as:w,type:g??I,"data-active":ut(l),"data-loading":ut(s),__css:j,className:et("chakra-button",x),...S,disabled:o||s,children:[s&&y==="start"&&a.jsx(Z1,{className:"chakra-button__spinner--start",label:m,placement:"start",spacing:h,children:b}),s?m||a.jsx(je.span,{opacity:0,children:a.jsx(PS,{...E})}):a.jsx(PS,{...E}),s&&y==="end"&&a.jsx(Z1,{className:"chakra-button__spinner--end",label:m,placement:"end",spacing:h,children:b})]})});ol.displayName="Button";function PS(e){const{leftIcon:t,rightIcon:n,children:r,iconSpacing:o}=e;return a.jsxs(a.Fragment,{children:[t&&a.jsx(Y1,{marginEnd:o,children:t}),r,n&&a.jsx(Y1,{marginStart:o,children:n})]})}var rs=_e((e,t)=>{const{icon:n,children:r,isRound:o,"aria-label":s,...l}=e,c=n||r,d=i.isValidElement(c)?i.cloneElement(c,{"aria-hidden":!0,focusable:!1}):null;return a.jsx(ol,{padding:"0",borderRadius:o?"full":void 0,ref:t,"aria-label":s,...l,children:d})});rs.displayName="IconButton";var[kye,IF]=Kt({name:"CheckboxGroupContext",strict:!1});function PF(e){const[t,n]=i.useState(e),[r,o]=i.useState(!1);return e!==t&&(o(!0),n(e)),r}function EF(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 12 10",style:{fill:"none",strokeWidth:2,stroke:"currentColor",strokeDasharray:16},...e,children:a.jsx("polyline",{points:"1.5 6 4.5 9 10.5 1"})})}function MF(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 24 24",style:{stroke:"currentColor",strokeWidth:4},...e,children:a.jsx("line",{x1:"21",x2:"3",y1:"12",y2:"12"})})}function OF(e){const{isIndeterminate:t,isChecked:n,...r}=e,o=t?MF:EF;return n||t?a.jsx(je.div,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:a.jsx(o,{...r})}):null}var[DF,T3]=Kt({name:"FormControlStylesContext",errorMessage:`useFormControlStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[RF,Qd]=Kt({strict:!1,name:"FormControlContext"});function AF(e){const{id:t,isRequired:n,isInvalid:r,isDisabled:o,isReadOnly:s,...l}=e,c=i.useId(),d=t||`field-${c}`,f=`${d}-label`,m=`${d}-feedback`,h=`${d}-helptext`,[g,b]=i.useState(!1),[y,x]=i.useState(!1),[w,S]=i.useState(!1),j=i.useCallback((D={},R=null)=>({id:h,...D,ref:Et(R,N=>{N&&x(!0)})}),[h]),_=i.useCallback((D={},R=null)=>({...D,ref:R,"data-focus":ut(w),"data-disabled":ut(o),"data-invalid":ut(r),"data-readonly":ut(s),id:D.id!==void 0?D.id:f,htmlFor:D.htmlFor!==void 0?D.htmlFor:d}),[d,o,w,r,s,f]),I=i.useCallback((D={},R=null)=>({id:m,...D,ref:Et(R,N=>{N&&b(!0)}),"aria-live":"polite"}),[m]),E=i.useCallback((D={},R=null)=>({...D,...l,ref:R,role:"group","data-focus":ut(w),"data-disabled":ut(o),"data-invalid":ut(r),"data-readonly":ut(s)}),[l,o,w,r,s]),M=i.useCallback((D={},R=null)=>({...D,ref:R,role:"presentation","aria-hidden":!0,children:D.children||"*"}),[]);return{isRequired:!!n,isInvalid:!!r,isReadOnly:!!s,isDisabled:!!o,isFocused:!!w,onFocus:()=>S(!0),onBlur:()=>S(!1),hasFeedbackText:g,setHasFeedbackText:b,hasHelpText:y,setHasHelpText:x,id:d,labelId:f,feedbackId:m,helpTextId:h,htmlProps:l,getHelpTextProps:j,getErrorMessageProps:I,getRootProps:E,getLabelProps:_,getRequiredIndicatorProps:M}}var Gt=_e(function(t,n){const r=Xn("Form",t),o=cn(t),{getRootProps:s,htmlProps:l,...c}=AF(o),d=et("chakra-form-control",t.className);return a.jsx(RF,{value:c,children:a.jsx(DF,{value:r,children:a.jsx(je.div,{...s({},n),className:d,__css:r.container})})})});Gt.displayName="FormControl";var N3=_e(function(t,n){const r=Qd(),o=T3(),s=et("chakra-form__helper-text",t.className);return a.jsx(je.div,{...r==null?void 0:r.getHelpTextProps(t,n),__css:o.helperText,className:s})});N3.displayName="FormHelperText";var ln=_e(function(t,n){var r;const o=ml("FormLabel",t),s=cn(t),{className:l,children:c,requiredIndicator:d=a.jsx($3,{}),optionalIndicator:f=null,...m}=s,h=Qd(),g=(r=h==null?void 0:h.getLabelProps(m,n))!=null?r:{ref:n,...m};return a.jsxs(je.label,{...g,className:et("chakra-form__label",s.className),__css:{display:"block",textAlign:"start",...o},children:[c,h!=null&&h.isRequired?d:f]})});ln.displayName="FormLabel";var $3=_e(function(t,n){const r=Qd(),o=T3();if(!(r!=null&&r.isRequired))return null;const s=et("chakra-form__required-indicator",t.className);return a.jsx(je.span,{...r==null?void 0:r.getRequiredIndicatorProps(t,n),__css:o.requiredIndicator,className:s})});$3.displayName="RequiredIndicator";function Kx(e){const{isDisabled:t,isInvalid:n,isReadOnly:r,isRequired:o,...s}=qx(e);return{...s,disabled:t,readOnly:r,required:o,"aria-invalid":wo(n),"aria-required":wo(o),"aria-readonly":wo(r)}}function qx(e){var t,n,r;const o=Qd(),{id:s,disabled:l,readOnly:c,required:d,isRequired:f,isInvalid:m,isReadOnly:h,isDisabled:g,onFocus:b,onBlur:y,...x}=e,w=e["aria-describedby"]?[e["aria-describedby"]]:[];return o!=null&&o.hasFeedbackText&&(o!=null&&o.isInvalid)&&w.push(o.feedbackId),o!=null&&o.hasHelpText&&w.push(o.helpTextId),{...x,"aria-describedby":w.join(" ")||void 0,id:s??(o==null?void 0:o.id),isDisabled:(t=l??g)!=null?t:o==null?void 0:o.isDisabled,isReadOnly:(n=c??h)!=null?n:o==null?void 0:o.isReadOnly,isRequired:(r=d??f)!=null?r:o==null?void 0:o.isRequired,isInvalid:m??(o==null?void 0:o.isInvalid),onFocus:ze(o==null?void 0:o.onFocus,b),onBlur:ze(o==null?void 0:o.onBlur,y)}}var Xx={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},L3=je("span",{baseStyle:Xx});L3.displayName="VisuallyHidden";var TF=je("input",{baseStyle:Xx});TF.displayName="VisuallyHiddenInput";var NF=()=>typeof document<"u",ES=!1,Yd=null,Jl=!1,J1=!1,eb=new Set;function Qx(e,t){eb.forEach(n=>n(e,t))}var $F=typeof window<"u"&&window.navigator!=null?/^Mac/.test(window.navigator.platform):!1;function LF(e){return!(e.metaKey||!$F&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function MS(e){Jl=!0,LF(e)&&(Yd="keyboard",Qx("keyboard",e))}function $i(e){if(Yd="pointer",e.type==="mousedown"||e.type==="pointerdown"){Jl=!0;const t=e.composedPath?e.composedPath()[0]:e.target;let n=!1;try{n=t.matches(":focus-visible")}catch{}if(n)return;Qx("pointer",e)}}function FF(e){return e.mozInputSource===0&&e.isTrusted?!0:e.detail===0&&!e.pointerType}function zF(e){FF(e)&&(Jl=!0,Yd="virtual")}function BF(e){e.target===window||e.target===document||(!Jl&&!J1&&(Yd="virtual",Qx("virtual",e)),Jl=!1,J1=!1)}function HF(){Jl=!1,J1=!0}function OS(){return Yd!=="pointer"}function WF(){if(!NF()||ES)return;const{focus:e}=HTMLElement.prototype;HTMLElement.prototype.focus=function(...n){Jl=!0,e.apply(this,n)},document.addEventListener("keydown",MS,!0),document.addEventListener("keyup",MS,!0),document.addEventListener("click",zF,!0),window.addEventListener("focus",BF,!0),window.addEventListener("blur",HF,!1),typeof PointerEvent<"u"?(document.addEventListener("pointerdown",$i,!0),document.addEventListener("pointermove",$i,!0),document.addEventListener("pointerup",$i,!0)):(document.addEventListener("mousedown",$i,!0),document.addEventListener("mousemove",$i,!0),document.addEventListener("mouseup",$i,!0)),ES=!0}function F3(e){WF(),e(OS());const t=()=>e(OS());return eb.add(t),()=>{eb.delete(t)}}function VF(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function z3(e={}){const t=qx(e),{isDisabled:n,isReadOnly:r,isRequired:o,isInvalid:s,id:l,onBlur:c,onFocus:d,"aria-describedby":f}=t,{defaultChecked:m,isChecked:h,isFocusable:g,onChange:b,isIndeterminate:y,name:x,value:w,tabIndex:S=void 0,"aria-label":j,"aria-labelledby":_,"aria-invalid":I,...E}=e,M=VF(E,["isDisabled","isReadOnly","isRequired","isInvalid","id","onBlur","onFocus","aria-describedby"]),D=gn(b),R=gn(c),N=gn(d),[O,T]=i.useState(!1),[U,G]=i.useState(!1),[q,Y]=i.useState(!1),[Q,V]=i.useState(!1);i.useEffect(()=>F3(T),[]);const se=i.useRef(null),[ee,le]=i.useState(!0),[ae,ce]=i.useState(!!m),J=h!==void 0,re=J?h:ae,A=i.useCallback(de=>{if(r||n){de.preventDefault();return}J||ce(re?de.target.checked:y?!0:de.target.checked),D==null||D(de)},[r,n,re,J,y,D]);dc(()=>{se.current&&(se.current.indeterminate=!!y)},[y]),ba(()=>{n&&G(!1)},[n,G]),dc(()=>{const de=se.current;if(!(de!=null&&de.form))return;const ke=()=>{ce(!!m)};return de.form.addEventListener("reset",ke),()=>{var we;return(we=de.form)==null?void 0:we.removeEventListener("reset",ke)}},[]);const L=n&&!g,K=i.useCallback(de=>{de.key===" "&&V(!0)},[V]),ne=i.useCallback(de=>{de.key===" "&&V(!1)},[V]);dc(()=>{if(!se.current)return;se.current.checked!==re&&ce(se.current.checked)},[se.current]);const z=i.useCallback((de={},ke=null)=>{const we=Re=>{U&&Re.preventDefault(),V(!0)};return{...de,ref:ke,"data-active":ut(Q),"data-hover":ut(q),"data-checked":ut(re),"data-focus":ut(U),"data-focus-visible":ut(U&&O),"data-indeterminate":ut(y),"data-disabled":ut(n),"data-invalid":ut(s),"data-readonly":ut(r),"aria-hidden":!0,onMouseDown:ze(de.onMouseDown,we),onMouseUp:ze(de.onMouseUp,()=>V(!1)),onMouseEnter:ze(de.onMouseEnter,()=>Y(!0)),onMouseLeave:ze(de.onMouseLeave,()=>Y(!1))}},[Q,re,n,U,O,q,y,s,r]),oe=i.useCallback((de={},ke=null)=>({...de,ref:ke,"data-active":ut(Q),"data-hover":ut(q),"data-checked":ut(re),"data-focus":ut(U),"data-focus-visible":ut(U&&O),"data-indeterminate":ut(y),"data-disabled":ut(n),"data-invalid":ut(s),"data-readonly":ut(r)}),[Q,re,n,U,O,q,y,s,r]),X=i.useCallback((de={},ke=null)=>({...M,...de,ref:Et(ke,we=>{we&&le(we.tagName==="LABEL")}),onClick:ze(de.onClick,()=>{var we;ee||((we=se.current)==null||we.click(),requestAnimationFrame(()=>{var Re;(Re=se.current)==null||Re.focus({preventScroll:!0})}))}),"data-disabled":ut(n),"data-checked":ut(re),"data-invalid":ut(s)}),[M,n,re,s,ee]),Z=i.useCallback((de={},ke=null)=>({...de,ref:Et(se,ke),type:"checkbox",name:x,value:w,id:l,tabIndex:S,onChange:ze(de.onChange,A),onBlur:ze(de.onBlur,R,()=>G(!1)),onFocus:ze(de.onFocus,N,()=>G(!0)),onKeyDown:ze(de.onKeyDown,K),onKeyUp:ze(de.onKeyUp,ne),required:o,checked:re,disabled:L,readOnly:r,"aria-label":j,"aria-labelledby":_,"aria-invalid":I?!!I:s,"aria-describedby":f,"aria-disabled":n,style:Xx}),[x,w,l,A,R,N,K,ne,o,re,L,r,j,_,I,s,f,n,S]),me=i.useCallback((de={},ke=null)=>({...de,ref:ke,onMouseDown:ze(de.onMouseDown,UF),"data-disabled":ut(n),"data-checked":ut(re),"data-invalid":ut(s)}),[re,n,s]);return{state:{isInvalid:s,isFocused:U,isChecked:re,isActive:Q,isHovered:q,isIndeterminate:y,isDisabled:n,isReadOnly:r,isRequired:o},getRootProps:X,getCheckboxProps:z,getIndicatorProps:oe,getInputProps:Z,getLabelProps:me,htmlProps:M}}function UF(e){e.preventDefault(),e.stopPropagation()}var GF={display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",userSelect:"none",flexShrink:0},KF={cursor:"pointer",display:"inline-flex",alignItems:"center",verticalAlign:"top",position:"relative"},qF=xa({from:{opacity:0,strokeDashoffset:16,transform:"scale(0.95)"},to:{opacity:1,strokeDashoffset:0,transform:"scale(1)"}}),XF=xa({from:{opacity:0},to:{opacity:1}}),QF=xa({from:{transform:"scaleX(0.65)"},to:{transform:"scaleX(1)"}}),og=_e(function(t,n){const r=IF(),o={...r,...t},s=Xn("Checkbox",o),l=cn(t),{spacing:c="0.5rem",className:d,children:f,iconColor:m,iconSize:h,icon:g=a.jsx(OF,{}),isChecked:b,isDisabled:y=r==null?void 0:r.isDisabled,onChange:x,inputProps:w,...S}=l;let j=b;r!=null&&r.value&&l.value&&(j=r.value.includes(l.value));let _=x;r!=null&&r.onChange&&l.value&&(_=Uh(r.onChange,x));const{state:I,getInputProps:E,getCheckboxProps:M,getLabelProps:D,getRootProps:R}=z3({...S,isDisabled:y,isChecked:j,onChange:_}),N=PF(I.isChecked),O=i.useMemo(()=>({animation:N?I.isIndeterminate?`${XF} 20ms linear, ${QF} 200ms linear`:`${qF} 200ms linear`:void 0,fontSize:h,color:m,...s.icon}),[m,h,N,I.isIndeterminate,s.icon]),T=i.cloneElement(g,{__css:O,isIndeterminate:I.isIndeterminate,isChecked:I.isChecked});return a.jsxs(je.label,{__css:{...KF,...s.container},className:et("chakra-checkbox",d),...R(),children:[a.jsx("input",{className:"chakra-checkbox__input",...E(w,n)}),a.jsx(je.span,{__css:{...GF,...s.control},className:"chakra-checkbox__control",...M(),children:T}),f&&a.jsx(je.span,{className:"chakra-checkbox__label",...D(),__css:{marginStart:c,...s.label},children:f})]})});og.displayName="Checkbox";function YF(e){const t=parseFloat(e);return typeof t!="number"||Number.isNaN(t)?0:t}function Yx(e,t){let n=YF(e);const r=10**(t??10);return n=Math.round(n*r)/r,t?n.toFixed(t):n.toString()}function tb(e){if(!Number.isFinite(e))return 0;let t=1,n=0;for(;Math.round(e*t)/t!==e;)t*=10,n+=1;return n}function Dm(e,t,n){return(e-t)*100/(n-t)}function B3(e,t,n){return(n-t)*e+t}function nb(e,t,n){const r=Math.round((e-t)/n)*n+t,o=tb(n);return Yx(r,o)}function mc(e,t,n){return e==null?e:(n{var O;return r==null?"":(O=Lv(r,s,n))!=null?O:""}),g=typeof o<"u",b=g?o:m,y=H3(Wa(b),s),x=n??y,w=i.useCallback(O=>{O!==b&&(g||h(O.toString()),f==null||f(O.toString(),Wa(O)))},[f,g,b]),S=i.useCallback(O=>{let T=O;return d&&(T=mc(T,l,c)),Yx(T,x)},[x,d,c,l]),j=i.useCallback((O=s)=>{let T;b===""?T=Wa(O):T=Wa(b)+O,T=S(T),w(T)},[S,s,w,b]),_=i.useCallback((O=s)=>{let T;b===""?T=Wa(-O):T=Wa(b)-O,T=S(T),w(T)},[S,s,w,b]),I=i.useCallback(()=>{var O;let T;r==null?T="":T=(O=Lv(r,s,n))!=null?O:l,w(T)},[r,n,s,w,l]),E=i.useCallback(O=>{var T;const U=(T=Lv(O,s,x))!=null?T:l;w(U)},[x,s,w,l]),M=Wa(b);return{isOutOfRange:M>c||M" `}),[ez,Zx]=Kt({name:"EditableContext",errorMessage:"useEditableContext: context is undefined. Seems you forgot to wrap the editable components in ``"}),V3={fontSize:"inherit",fontWeight:"inherit",textAlign:"inherit",bg:"transparent"},Zd=_e(function(t,n){const{getInputProps:r}=Zx(),o=W3(),s=r(t,n),l=et("chakra-editable__input",t.className);return a.jsx(je.input,{...s,__css:{outline:0,...V3,...o.input},className:l})});Zd.displayName="EditableInput";var Jd=_e(function(t,n){const{getPreviewProps:r}=Zx(),o=W3(),s=r(t,n),l=et("chakra-editable__preview",t.className);return a.jsx(je.span,{...s,__css:{cursor:"text",display:"inline-block",...V3,...o.preview},className:l})});Jd.displayName="EditablePreview";function Ul(e,t,n,r){const o=gn(n);return i.useEffect(()=>{const s=typeof e=="function"?e():e??document;if(!(!n||!s))return s.addEventListener(t,o,r),()=>{s.removeEventListener(t,o,r)}},[t,e,r,o,n]),()=>{const s=typeof e=="function"?e():e??document;s==null||s.removeEventListener(t,o,r)}}function tz(e){return"current"in e}var U3=()=>typeof window<"u";function nz(){var e;const t=navigator.userAgentData;return(e=t==null?void 0:t.platform)!=null?e:navigator.platform}var rz=e=>U3()&&e.test(navigator.vendor),oz=e=>U3()&&e.test(nz()),sz=()=>oz(/mac|iphone|ipad|ipod/i),az=()=>sz()&&rz(/apple/i);function G3(e){const{ref:t,elements:n,enabled:r}=e,o=()=>{var s,l;return(l=(s=t.current)==null?void 0:s.ownerDocument)!=null?l:document};Ul(o,"pointerdown",s=>{if(!az()||!r)return;const l=s.target,d=(n??[t]).some(f=>{const m=tz(f)?f.current:f;return(m==null?void 0:m.contains(l))||m===l});o().activeElement!==l&&d&&(s.preventDefault(),l.focus())})}function DS(e,t){return e?e===t||e.contains(t):!1}function lz(e={}){const{onChange:t,onCancel:n,onSubmit:r,onBlur:o,value:s,isDisabled:l,defaultValue:c,startWithEditView:d,isPreviewFocusable:f=!0,submitOnBlur:m=!0,selectAllOnFocus:h=!0,placeholder:g,onEdit:b,finalFocusRef:y,...x}=e,w=gn(b),S=!!(d&&!l),[j,_]=i.useState(S),[I,E]=qd({defaultValue:c||"",value:s,onChange:t}),[M,D]=i.useState(I),R=i.useRef(null),N=i.useRef(null),O=i.useRef(null),T=i.useRef(null),U=i.useRef(null);G3({ref:R,enabled:j,elements:[T,U]});const G=!j&&!l;dc(()=>{var z,oe;j&&((z=R.current)==null||z.focus(),h&&((oe=R.current)==null||oe.select()))},[]),ba(()=>{var z,oe,X,Z;if(!j){y?(z=y.current)==null||z.focus():(oe=O.current)==null||oe.focus();return}(X=R.current)==null||X.focus(),h&&((Z=R.current)==null||Z.select()),w==null||w()},[j,w,h]);const q=i.useCallback(()=>{G&&_(!0)},[G]),Y=i.useCallback(()=>{D(I)},[I]),Q=i.useCallback(()=>{_(!1),E(M),n==null||n(M),o==null||o(M)},[n,o,E,M]),V=i.useCallback(()=>{_(!1),D(I),r==null||r(I),o==null||o(M)},[I,r,o,M]);i.useEffect(()=>{if(j)return;const z=R.current;(z==null?void 0:z.ownerDocument.activeElement)===z&&(z==null||z.blur())},[j]);const se=i.useCallback(z=>{E(z.currentTarget.value)},[E]),ee=i.useCallback(z=>{const oe=z.key,Z={Escape:Q,Enter:me=>{!me.shiftKey&&!me.metaKey&&V()}}[oe];Z&&(z.preventDefault(),Z(z))},[Q,V]),le=i.useCallback(z=>{const oe=z.key,Z={Escape:Q}[oe];Z&&(z.preventDefault(),Z(z))},[Q]),ae=I.length===0,ce=i.useCallback(z=>{var oe;if(!j)return;const X=z.currentTarget.ownerDocument,Z=(oe=z.relatedTarget)!=null?oe:X.activeElement,me=DS(T.current,Z),ve=DS(U.current,Z);!me&&!ve&&(m?V():Q())},[m,V,Q,j]),J=i.useCallback((z={},oe=null)=>{const X=G&&f?0:void 0;return{...z,ref:Et(oe,N),children:ae?g:I,hidden:j,"aria-disabled":wo(l),tabIndex:X,onFocus:ze(z.onFocus,q,Y)}},[l,j,G,f,ae,q,Y,g,I]),re=i.useCallback((z={},oe=null)=>({...z,hidden:!j,placeholder:g,ref:Et(oe,R),disabled:l,"aria-disabled":wo(l),value:I,onBlur:ze(z.onBlur,ce),onChange:ze(z.onChange,se),onKeyDown:ze(z.onKeyDown,ee),onFocus:ze(z.onFocus,Y)}),[l,j,ce,se,ee,Y,g,I]),A=i.useCallback((z={},oe=null)=>({...z,hidden:!j,placeholder:g,ref:Et(oe,R),disabled:l,"aria-disabled":wo(l),value:I,onBlur:ze(z.onBlur,ce),onChange:ze(z.onChange,se),onKeyDown:ze(z.onKeyDown,le),onFocus:ze(z.onFocus,Y)}),[l,j,ce,se,le,Y,g,I]),L=i.useCallback((z={},oe=null)=>({"aria-label":"Edit",...z,type:"button",onClick:ze(z.onClick,q),ref:Et(oe,O),disabled:l}),[q,l]),K=i.useCallback((z={},oe=null)=>({...z,"aria-label":"Submit",ref:Et(U,oe),type:"button",onClick:ze(z.onClick,V),disabled:l}),[V,l]),ne=i.useCallback((z={},oe=null)=>({"aria-label":"Cancel",id:"cancel",...z,ref:Et(T,oe),type:"button",onClick:ze(z.onClick,Q),disabled:l}),[Q,l]);return{isEditing:j,isDisabled:l,isValueEmpty:ae,value:I,onEdit:q,onCancel:Q,onSubmit:V,getPreviewProps:J,getInputProps:re,getTextareaProps:A,getEditButtonProps:L,getSubmitButtonProps:K,getCancelButtonProps:ne,htmlProps:x}}var ef=_e(function(t,n){const r=Xn("Editable",t),o=cn(t),{htmlProps:s,...l}=lz(o),{isEditing:c,onSubmit:d,onCancel:f,onEdit:m}=l,h=et("chakra-editable",t.className),g=bx(t.children,{isEditing:c,onSubmit:d,onCancel:f,onEdit:m});return a.jsx(ez,{value:l,children:a.jsx(JF,{value:r,children:a.jsx(je.div,{ref:n,...s,className:h,children:g})})})});ef.displayName="Editable";function K3(){const{isEditing:e,getEditButtonProps:t,getCancelButtonProps:n,getSubmitButtonProps:r}=Zx();return{isEditing:e,getEditButtonProps:t,getCancelButtonProps:n,getSubmitButtonProps:r}}function iz(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var q3={exports:{}},cz="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",uz=cz,dz=uz;function X3(){}function Q3(){}Q3.resetWarningCache=X3;var fz=function(){function e(r,o,s,l,c,d){if(d!==dz){var f=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw f.name="Invariant Violation",f}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:Q3,resetWarningCache:X3};return n.PropTypes=n,n};q3.exports=fz();var pz=q3.exports;const nn=Bd(pz);var rb="data-focus-lock",Y3="data-focus-lock-disabled",mz="data-no-focus-lock",hz="data-autofocus-inside",gz="data-no-autofocus";function vz(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function bz(e,t){var n=i.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}function Z3(e,t){return bz(t||null,function(n){return e.forEach(function(r){return vz(r,n)})})}var Fv={width:"1px",height:"0px",padding:0,overflow:"hidden",position:"fixed",top:"1px",left:"1px"},ws=function(){return ws=Object.assign||function(t){for(var n,r=1,o=arguments.length;r0&&s[s.length-1])&&(f[0]===6||f[0]===2)){n=0;continue}if(f[0]===3&&(!s||f[1]>s[0]&&f[1]0)&&!(o=r.next()).done;)s.push(o.value)}catch(c){l={error:c}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(l)throw l.error}}return s}function ob(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,s;r=0}).sort(Tz)},Nz=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"],ny=Nz.join(","),$z="".concat(ny,", [data-focus-guard]"),g5=function(e,t){return Fs((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?$z:ny)?[r]:[],g5(r))},[])},Lz=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?sg([e.contentDocument.body],t):[e]},sg=function(e,t){return e.reduce(function(n,r){var o,s=g5(r,t),l=(o=[]).concat.apply(o,s.map(function(c){return Lz(c,t)}));return n.concat(l,r.parentNode?Fs(r.parentNode.querySelectorAll(ny)).filter(function(c){return c===r}):[])},[])},Fz=function(e){var t=e.querySelectorAll("[".concat(hz,"]"));return Fs(t).map(function(n){return sg([n])}).reduce(function(n,r){return n.concat(r)},[])},ry=function(e,t){return Fs(e).filter(function(n){return u5(t,n)}).filter(function(n){return Dz(n)})},AS=function(e,t){return t===void 0&&(t=new Map),Fs(e).filter(function(n){return d5(t,n)})},ab=function(e,t,n){return h5(ry(sg(e,n),t),!0,n)},TS=function(e,t){return h5(ry(sg(e),t),!1)},zz=function(e,t){return ry(Fz(e),t)},hc=function(e,t){return e.shadowRoot?hc(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:Fs(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?hc(o,t):!1}return hc(n,t)})},Bz=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(s&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(l,c){return!t.has(c)})},v5=function(e){return e.parentNode?v5(e.parentNode):e},oy=function(e){var t=Rm(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(rb);return n.push.apply(n,o?Bz(Fs(v5(r).querySelectorAll("[".concat(rb,'="').concat(o,'"]:not([').concat(Y3,'="disabled"])')))):[r]),n},[])},Hz=function(e){try{return e()}catch{return}},Cd=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?Cd(t.shadowRoot):t instanceof HTMLIFrameElement&&Hz(function(){return t.contentWindow.document})?Cd(t.contentWindow.document):t}},Wz=function(e,t){return e===t},Vz=function(e,t){return!!Fs(e.querySelectorAll("iframe")).some(function(n){return Wz(n,t)})},b5=function(e,t){return t===void 0&&(t=Cd(l5(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:oy(e).some(function(n){return hc(n,t)||Vz(n,t)})},Uz=function(e){e===void 0&&(e=document);var t=Cd(e);return t?Fs(e.querySelectorAll("[".concat(mz,"]"))).some(function(n){return hc(n,t)}):!1},Gz=function(e,t){return t.filter(m5).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},sy=function(e,t){return m5(e)&&e.name?Gz(e,t):e},Kz=function(e){var t=new Set;return e.forEach(function(n){return t.add(sy(n,e))}),e.filter(function(n){return t.has(n)})},NS=function(e){return e[0]&&e.length>1?sy(e[0],e):e[0]},$S=function(e,t){return e.length>1?e.indexOf(sy(e[t],e)):t},x5="NEW_FOCUS",qz=function(e,t,n,r){var o=e.length,s=e[0],l=e[o-1],c=ty(n);if(!(n&&e.indexOf(n)>=0)){var d=n!==void 0?t.indexOf(n):-1,f=r?t.indexOf(r):d,m=r?e.indexOf(r):-1,h=d-f,g=t.indexOf(s),b=t.indexOf(l),y=Kz(t),x=n!==void 0?y.indexOf(n):-1,w=x-(r?y.indexOf(r):d),S=$S(e,0),j=$S(e,o-1);if(d===-1||m===-1)return x5;if(!h&&m>=0)return m;if(d<=g&&c&&Math.abs(h)>1)return j;if(d>=b&&c&&Math.abs(h)>1)return S;if(h&&Math.abs(w)>1)return m;if(d<=g)return j;if(d>b)return S;if(h)return Math.abs(h)>1?m:(o+m+h)%o}},Xz=function(e){return function(t){var n,r=(n=f5(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},Qz=function(e,t,n){var r=e.map(function(s){var l=s.node;return l}),o=AS(r.filter(Xz(n)));return o&&o.length?NS(o):NS(AS(t))},lb=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&lb(e.parentNode.host||e.parentNode,t),t},zv=function(e,t){for(var n=lb(e),r=lb(t),o=0;o=0)return s}return!1},y5=function(e,t,n){var r=Rm(e),o=Rm(t),s=r[0],l=!1;return o.filter(Boolean).forEach(function(c){l=zv(l||c,c)||l,n.filter(Boolean).forEach(function(d){var f=zv(s,d);f&&(!l||hc(f,l)?l=f:l=zv(f,l))})}),l},Yz=function(e,t){return e.reduce(function(n,r){return n.concat(zz(r,t))},[])},Zz=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(Az)},Jz=function(e,t){var n=Cd(Rm(e).length>0?document:l5(e).ownerDocument),r=oy(e).filter(Am),o=y5(n||e,e,r),s=new Map,l=TS(r,s),c=ab(r,s).filter(function(b){var y=b.node;return Am(y)});if(!(!c[0]&&(c=l,!c[0]))){var d=TS([o],s).map(function(b){var y=b.node;return y}),f=Zz(d,c),m=f.map(function(b){var y=b.node;return y}),h=qz(m,d,n,t);if(h===x5){var g=Qz(l,m,Yz(r,s));if(g)return{node:g};console.warn("focus-lock: cannot find any node to move focus into");return}return h===void 0?h:f[h]}},eB=function(e){var t=oy(e).filter(Am),n=y5(e,e,t),r=new Map,o=ab([n],r,!0),s=ab(t,r).filter(function(l){var c=l.node;return Am(c)}).map(function(l){var c=l.node;return c});return o.map(function(l){var c=l.node,d=l.index;return{node:c,index:d,lockItem:s.indexOf(c)>=0,guard:ty(c)}})},tB=function(e,t){"focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus()},Bv=0,Hv=!1,C5=function(e,t,n){n===void 0&&(n={});var r=Jz(e,t);if(!Hv&&r){if(Bv>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),Hv=!0,setTimeout(function(){Hv=!1},1);return}Bv++,tB(r.node,n.focusOptions),Bv--}};function ay(e){setTimeout(e,1)}var nB=function(){return document&&document.activeElement===document.body},rB=function(){return nB()||Uz()},gc=null,sc=null,vc=null,wd=!1,oB=function(){return!0},sB=function(t){return(gc.whiteList||oB)(t)},aB=function(t,n){vc={observerNode:t,portaledElement:n}},lB=function(t){return vc&&vc.portaledElement===t};function LS(e,t,n,r){var o=null,s=e;do{var l=r[s];if(l.guard)l.node.dataset.focusAutoGuard&&(o=l);else if(l.lockItem){if(s!==e)return;o=null}else break}while((s+=n)!==t);o&&(o.node.tabIndex=0)}var iB=function(t){return t&&"current"in t?t.current:t},cB=function(t){return t?!!wd:wd==="meanwhile"},uB=function e(t,n,r){return n&&(n.host===t&&(!n.activeElement||r.contains(n.activeElement))||n.parentNode&&e(t,n.parentNode,r))},dB=function(t,n){return n.some(function(r){return uB(t,r,r)})},Tm=function(){var t=!1;if(gc){var n=gc,r=n.observed,o=n.persistentFocus,s=n.autoFocus,l=n.shards,c=n.crossFrame,d=n.focusOptions,f=r||vc&&vc.portaledElement,m=document&&document.activeElement;if(f){var h=[f].concat(l.map(iB).filter(Boolean));if((!m||sB(m))&&(o||cB(c)||!rB()||!sc&&s)&&(f&&!(b5(h)||m&&dB(m,h)||lB(m))&&(document&&!sc&&m&&!s?(m.blur&&m.blur(),document.body.focus()):(t=C5(h,sc,{focusOptions:d}),vc={})),wd=!1,sc=document&&document.activeElement),document){var g=document&&document.activeElement,b=eB(h),y=b.map(function(x){var w=x.node;return w}).indexOf(g);y>-1&&(b.filter(function(x){var w=x.guard,S=x.node;return w&&S.dataset.focusAutoGuard}).forEach(function(x){var w=x.node;return w.removeAttribute("tabIndex")}),LS(y,b.length,1,b),LS(y,-1,-1,b))}}}return t},w5=function(t){Tm()&&t&&(t.stopPropagation(),t.preventDefault())},ly=function(){return ay(Tm)},fB=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||aB(r,n)},pB=function(){return null},S5=function(){wd="just",ay(function(){wd="meanwhile"})},mB=function(){document.addEventListener("focusin",w5),document.addEventListener("focusout",ly),window.addEventListener("blur",S5)},hB=function(){document.removeEventListener("focusin",w5),document.removeEventListener("focusout",ly),window.removeEventListener("blur",S5)};function gB(e){return e.filter(function(t){var n=t.disabled;return!n})}function vB(e){var t=e.slice(-1)[0];t&&!gc&&mB();var n=gc,r=n&&t&&t.id===n.id;gc=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var s=o.id;return s===n.id}).length||n.returnFocus(!t)),t?(sc=null,(!r||n.observed!==t.observed)&&t.onActivation(),Tm(),ay(Tm)):(hB(),sc=null)}o5.assignSyncMedium(fB);s5.assignMedium(ly);yz.assignMedium(function(e){return e({moveFocusInside:C5,focusInside:b5})});const bB=Iz(gB,vB)(pB);var k5=i.forwardRef(function(t,n){return i.createElement(a5,bn({sideCar:bB,ref:n},t))}),j5=a5.propTypes||{};j5.sideCar;iz(j5,["sideCar"]);k5.propTypes={};const FS=k5;function _5(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function iy(e){var t;if(!_5(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function xB(e){var t,n;return(n=(t=I5(e))==null?void 0:t.defaultView)!=null?n:window}function I5(e){return _5(e)?e.ownerDocument:document}function yB(e){return I5(e).activeElement}function CB(e){const t=e.ownerDocument.defaultView||window,{overflow:n,overflowX:r,overflowY:o}=t.getComputedStyle(e);return/auto|scroll|overlay|hidden/.test(n+o+r)}function wB(e){return e.localName==="html"?e:e.assignedSlot||e.parentElement||e.ownerDocument.documentElement}function P5(e){return["html","body","#document"].includes(e.localName)?e.ownerDocument.body:iy(e)&&CB(e)?e:P5(wB(e))}var E5=e=>e.hasAttribute("tabindex"),SB=e=>E5(e)&&e.tabIndex===-1;function kB(e){return!!e.getAttribute("disabled")||!!e.getAttribute("aria-disabled")}function M5(e){return e.parentElement&&M5(e.parentElement)?!0:e.hidden}function jB(e){const t=e.getAttribute("contenteditable");return t!=="false"&&t!=null}function O5(e){if(!iy(e)||M5(e)||kB(e))return!1;const{localName:t}=e;if(["input","select","textarea","button"].indexOf(t)>=0)return!0;const r={a:()=>e.hasAttribute("href"),audio:()=>e.hasAttribute("controls"),video:()=>e.hasAttribute("controls")};return t in r?r[t]():jB(e)?!0:E5(e)}function _B(e){return e?iy(e)&&O5(e)&&!SB(e):!1}var IB=["input:not(:disabled):not([disabled])","select:not(:disabled):not([disabled])","textarea:not(:disabled):not([disabled])","embed","iframe","object","a[href]","area[href]","button:not(:disabled):not([disabled])","[tabindex]","audio[controls]","video[controls]","*[tabindex]:not([aria-disabled])","*[contenteditable]"],PB=IB.join(),EB=e=>e.offsetWidth>0&&e.offsetHeight>0;function D5(e){const t=Array.from(e.querySelectorAll(PB));return t.unshift(e),t.filter(n=>O5(n)&&EB(n))}var zS,MB=(zS=FS.default)!=null?zS:FS,R5=e=>{const{initialFocusRef:t,finalFocusRef:n,contentRef:r,restoreFocus:o,children:s,isDisabled:l,autoFocus:c,persistentFocus:d,lockFocusAcrossFrames:f}=e,m=i.useCallback(()=>{t!=null&&t.current?t.current.focus():r!=null&&r.current&&D5(r.current).length===0&&requestAnimationFrame(()=>{var y;(y=r.current)==null||y.focus()})},[t,r]),h=i.useCallback(()=>{var b;(b=n==null?void 0:n.current)==null||b.focus()},[n]),g=o&&!n;return a.jsx(MB,{crossFrame:f,persistentFocus:d,autoFocus:c,disabled:l,onActivation:m,onDeactivation:h,returnFocus:g,children:s})};R5.displayName="FocusLock";var OB=FL?i.useLayoutEffect:i.useEffect;function ib(e,t=[]){const n=i.useRef(e);return OB(()=>{n.current=e}),i.useCallback((...r)=>{var o;return(o=n.current)==null?void 0:o.call(n,...r)},t)}function DB(e,t,n,r){const o=ib(t);return i.useEffect(()=>{var s;const l=(s=Rw(n))!=null?s:document;if(t)return l.addEventListener(e,o,r),()=>{l.removeEventListener(e,o,r)}},[e,n,r,o,t]),()=>{var s;((s=Rw(n))!=null?s:document).removeEventListener(e,o,r)}}function RB(e,t){const n=i.useId();return i.useMemo(()=>e||[t,n].filter(Boolean).join("-"),[e,t,n])}function AB(e,t){const n=e!==void 0;return[n,n&&typeof e<"u"?e:t]}function sr(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=ib(n),l=ib(t),[c,d]=i.useState(e.defaultIsOpen||!1),[f,m]=AB(r,c),h=RB(o,"disclosure"),g=i.useCallback(()=>{f||d(!1),l==null||l()},[f,l]),b=i.useCallback(()=>{f||d(!0),s==null||s()},[f,s]),y=i.useCallback(()=>{(m?g:b)()},[m,b,g]);return{isOpen:!!m,onOpen:b,onClose:g,onToggle:y,isControlled:f,getButtonProps:(x={})=>({...x,"aria-expanded":m,"aria-controls":h,onClick:ER(x.onClick,y)}),getDisclosureProps:(x={})=>({...x,hidden:!m,id:h})}}var[TB,NB]=Kt({name:"InputGroupStylesContext",errorMessage:`useInputGroupStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),cy=_e(function(t,n){const r=Xn("Input",t),{children:o,className:s,...l}=cn(t),c=et("chakra-input__group",s),d={},f=rg(o),m=r.field;f.forEach(g=>{var b,y;r&&(m&&g.type.id==="InputLeftElement"&&(d.paddingStart=(b=m.height)!=null?b:m.h),m&&g.type.id==="InputRightElement"&&(d.paddingEnd=(y=m.height)!=null?y:m.h),g.type.id==="InputRightAddon"&&(d.borderEndRadius=0),g.type.id==="InputLeftAddon"&&(d.borderStartRadius=0))});const h=f.map(g=>{var b,y;const x=vI({size:((b=g.props)==null?void 0:b.size)||t.size,variant:((y=g.props)==null?void 0:y.variant)||t.variant});return g.type.id!=="Input"?i.cloneElement(g,x):i.cloneElement(g,Object.assign(x,d,g.props))});return a.jsx(je.div,{className:c,ref:n,__css:{width:"100%",display:"flex",position:"relative",isolation:"isolate",...r.group},"data-group":!0,...l,children:a.jsx(TB,{value:r,children:h})})});cy.displayName="InputGroup";var $B=je("div",{baseStyle:{display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",top:"0",zIndex:2}}),ag=_e(function(t,n){var r,o;const{placement:s="left",...l}=t,c=NB(),d=c.field,m={[s==="left"?"insetStart":"insetEnd"]:"0",width:(r=d==null?void 0:d.height)!=null?r:d==null?void 0:d.h,height:(o=d==null?void 0:d.height)!=null?o:d==null?void 0:d.h,fontSize:d==null?void 0:d.fontSize,...c.element};return a.jsx($B,{ref:n,__css:m,...l})});ag.id="InputElement";ag.displayName="InputElement";var A5=_e(function(t,n){const{className:r,...o}=t,s=et("chakra-input__left-element",r);return a.jsx(ag,{ref:n,placement:"left",className:s,...o})});A5.id="InputLeftElement";A5.displayName="InputLeftElement";var lg=_e(function(t,n){const{className:r,...o}=t,s=et("chakra-input__right-element",r);return a.jsx(ag,{ref:n,placement:"right",className:s,...o})});lg.id="InputRightElement";lg.displayName="InputRightElement";var Qc=_e(function(t,n){const{htmlSize:r,...o}=t,s=Xn("Input",o),l=cn(o),c=Kx(l),d=et("chakra-input",t.className);return a.jsx(je.input,{size:r,...c,__css:s.field,ref:n,className:d})});Qc.displayName="Input";Qc.id="Input";var ig=_e(function(t,n){const r=ml("Link",t),{className:o,isExternal:s,...l}=cn(t);return a.jsx(je.a,{target:s?"_blank":void 0,rel:s?"noopener":void 0,ref:n,className:et("chakra-link",o),...l,__css:r})});ig.displayName="Link";var[LB,T5]=Kt({name:"ListStylesContext",errorMessage:`useListStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),uy=_e(function(t,n){const r=Xn("List",t),{children:o,styleType:s="none",stylePosition:l,spacing:c,...d}=cn(t),f=rg(o),h=c?{["& > *:not(style) ~ *:not(style)"]:{mt:c}}:{};return a.jsx(LB,{value:r,children:a.jsx(je.ul,{ref:n,listStyleType:s,listStylePosition:l,role:"list",__css:{...r.container,...h},...d,children:f})})});uy.displayName="List";var N5=_e((e,t)=>{const{as:n,...r}=e;return a.jsx(uy,{ref:t,as:"ol",styleType:"decimal",marginStart:"1em",...r})});N5.displayName="OrderedList";var cg=_e(function(t,n){const{as:r,...o}=t;return a.jsx(uy,{ref:n,as:"ul",styleType:"initial",marginStart:"1em",...o})});cg.displayName="UnorderedList";var ts=_e(function(t,n){const r=T5();return a.jsx(je.li,{ref:n,...t,__css:r.item})});ts.displayName="ListItem";var FB=_e(function(t,n){const r=T5();return a.jsx(An,{ref:n,role:"presentation",...t,__css:r.icon})});FB.displayName="ListIcon";var sl=_e(function(t,n){const{templateAreas:r,gap:o,rowGap:s,columnGap:l,column:c,row:d,autoFlow:f,autoRows:m,templateRows:h,autoColumns:g,templateColumns:b,...y}=t,x={display:"grid",gridTemplateAreas:r,gridGap:o,gridRowGap:s,gridColumnGap:l,gridAutoColumns:g,gridColumn:c,gridRow:d,gridAutoFlow:f,gridAutoRows:m,gridTemplateRows:h,gridTemplateColumns:b};return a.jsx(je.div,{ref:n,__css:x,...y})});sl.displayName="Grid";function $5(e,t){return Array.isArray(e)?e.map(n=>n===null?null:t(n)):T1(e)?Object.keys(e).reduce((n,r)=>(n[r]=t(e[r]),n),{}):e!=null?t(e):null}var Wr=je("div",{baseStyle:{flex:1,justifySelf:"stretch",alignSelf:"stretch"}});Wr.displayName="Spacer";var L5=e=>a.jsx(je.div,{className:"chakra-stack__item",...e,__css:{display:"inline-block",flex:"0 0 auto",minWidth:0,...e.__css}});L5.displayName="StackItem";function zB(e){const{spacing:t,direction:n}=e,r={column:{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},"column-reverse":{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},row:{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0},"row-reverse":{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0}};return{"&":$5(n,o=>r[o])}}var dy=_e((e,t)=>{const{isInline:n,direction:r,align:o,justify:s,spacing:l="0.5rem",wrap:c,children:d,divider:f,className:m,shouldWrapChildren:h,...g}=e,b=n?"row":r??"column",y=i.useMemo(()=>zB({spacing:l,direction:b}),[l,b]),x=!!f,w=!h&&!x,S=i.useMemo(()=>{const _=rg(d);return w?_:_.map((I,E)=>{const M=typeof I.key<"u"?I.key:E,D=E+1===_.length,N=h?a.jsx(L5,{children:I},M):I;if(!x)return N;const O=i.cloneElement(f,{__css:y}),T=D?null:O;return a.jsxs(i.Fragment,{children:[N,T]},M)})},[f,y,x,w,h,d]),j=et("chakra-stack",m);return a.jsx(je.div,{ref:t,display:"flex",alignItems:o,justifyContent:s,flexDirection:b,flexWrap:c,gap:x?void 0:l,className:j,...g,children:S})});dy.displayName="Stack";var F5=_e((e,t)=>a.jsx(dy,{align:"center",...e,direction:"column",ref:t}));F5.displayName="VStack";var ug=_e((e,t)=>a.jsx(dy,{align:"center",...e,direction:"row",ref:t}));ug.displayName="HStack";function BS(e){return $5(e,t=>t==="auto"?"auto":`span ${t}/span ${t}`)}var Sd=_e(function(t,n){const{area:r,colSpan:o,colStart:s,colEnd:l,rowEnd:c,rowSpan:d,rowStart:f,...m}=t,h=vI({gridArea:r,gridColumn:BS(o),gridRow:BS(d),gridColumnStart:s,gridColumnEnd:l,gridRowStart:f,gridRowEnd:c});return a.jsx(je.div,{ref:n,__css:h,...m})});Sd.displayName="GridItem";var Sa=_e(function(t,n){const r=ml("Badge",t),{className:o,...s}=cn(t);return a.jsx(je.span,{ref:n,className:et("chakra-badge",t.className),...s,__css:{display:"inline-block",whiteSpace:"nowrap",verticalAlign:"middle",...r}})});Sa.displayName="Badge";var On=_e(function(t,n){const{borderLeftWidth:r,borderBottomWidth:o,borderTopWidth:s,borderRightWidth:l,borderWidth:c,borderStyle:d,borderColor:f,...m}=ml("Divider",t),{className:h,orientation:g="horizontal",__css:b,...y}=cn(t),x={vertical:{borderLeftWidth:r||l||c||"1px",height:"100%"},horizontal:{borderBottomWidth:o||s||c||"1px",width:"100%"}};return a.jsx(je.hr,{ref:n,"aria-orientation":g,...y,__css:{...m,border:"0",borderColor:f,borderStyle:d,...x[g],...b},className:et("chakra-divider",h)})});On.displayName="Divider";function BB(e){const{key:t}=e;return t.length===1||t.length>1&&/[^a-zA-Z0-9]/.test(t)}function HB(e={}){const{timeout:t=300,preventDefault:n=()=>!0}=e,[r,o]=i.useState([]),s=i.useRef(),l=()=>{s.current&&(clearTimeout(s.current),s.current=null)},c=()=>{l(),s.current=setTimeout(()=>{o([]),s.current=null},t)};i.useEffect(()=>l,[]);function d(f){return m=>{if(m.key==="Backspace"){const h=[...r];h.pop(),o(h);return}if(BB(m)){const h=r.concat(m.key);n(m)&&(m.preventDefault(),m.stopPropagation()),o(h),f(h.join("")),c()}}}return d}function WB(e,t,n,r){if(t==null)return r;if(!r)return e.find(l=>n(l).toLowerCase().startsWith(t.toLowerCase()));const o=e.filter(s=>n(s).toLowerCase().startsWith(t.toLowerCase()));if(o.length>0){let s;return o.includes(r)?(s=o.indexOf(r)+1,s===o.length&&(s=0),o[s]):(s=e.indexOf(o[0]),e[s])}return r}function VB(){const e=i.useRef(new Map),t=e.current,n=i.useCallback((o,s,l,c)=>{e.current.set(l,{type:s,el:o,options:c}),o.addEventListener(s,l,c)},[]),r=i.useCallback((o,s,l,c)=>{o.removeEventListener(s,l,c),e.current.delete(l)},[]);return i.useEffect(()=>()=>{t.forEach((o,s)=>{r(o.el,o.type,s,o.options)})},[r,t]),{add:n,remove:r}}function Wv(e){const t=e.target,{tagName:n,isContentEditable:r}=t;return n!=="INPUT"&&n!=="TEXTAREA"&&r!==!0}function z5(e={}){const{ref:t,isDisabled:n,isFocusable:r,clickOnEnter:o=!0,clickOnSpace:s=!0,onMouseDown:l,onMouseUp:c,onClick:d,onKeyDown:f,onKeyUp:m,tabIndex:h,onMouseOver:g,onMouseLeave:b,...y}=e,[x,w]=i.useState(!0),[S,j]=i.useState(!1),_=VB(),I=V=>{V&&V.tagName!=="BUTTON"&&w(!1)},E=x?h:h||0,M=n&&!r,D=i.useCallback(V=>{if(n){V.stopPropagation(),V.preventDefault();return}V.currentTarget.focus(),d==null||d(V)},[n,d]),R=i.useCallback(V=>{S&&Wv(V)&&(V.preventDefault(),V.stopPropagation(),j(!1),_.remove(document,"keyup",R,!1))},[S,_]),N=i.useCallback(V=>{if(f==null||f(V),n||V.defaultPrevented||V.metaKey||!Wv(V.nativeEvent)||x)return;const se=o&&V.key==="Enter";s&&V.key===" "&&(V.preventDefault(),j(!0)),se&&(V.preventDefault(),V.currentTarget.click()),_.add(document,"keyup",R,!1)},[n,x,f,o,s,_,R]),O=i.useCallback(V=>{if(m==null||m(V),n||V.defaultPrevented||V.metaKey||!Wv(V.nativeEvent)||x)return;s&&V.key===" "&&(V.preventDefault(),j(!1),V.currentTarget.click())},[s,x,n,m]),T=i.useCallback(V=>{V.button===0&&(j(!1),_.remove(document,"mouseup",T,!1))},[_]),U=i.useCallback(V=>{if(V.button!==0)return;if(n){V.stopPropagation(),V.preventDefault();return}x||j(!0),V.currentTarget.focus({preventScroll:!0}),_.add(document,"mouseup",T,!1),l==null||l(V)},[n,x,l,_,T]),G=i.useCallback(V=>{V.button===0&&(x||j(!1),c==null||c(V))},[c,x]),q=i.useCallback(V=>{if(n){V.preventDefault();return}g==null||g(V)},[n,g]),Y=i.useCallback(V=>{S&&(V.preventDefault(),j(!1)),b==null||b(V)},[S,b]),Q=Et(t,I);return x?{...y,ref:Q,type:"button","aria-disabled":M?void 0:n,disabled:M,onClick:D,onMouseDown:l,onMouseUp:c,onKeyUp:m,onKeyDown:f,onMouseOver:g,onMouseLeave:b}:{...y,ref:Q,role:"button","data-active":ut(S),"aria-disabled":n?"true":void 0,tabIndex:M?void 0:E,onClick:D,onMouseDown:U,onMouseUp:G,onKeyUp:O,onKeyDown:N,onMouseOver:q,onMouseLeave:Y}}function UB(e){const t=e.current;if(!t)return!1;const n=yB(t);return!n||t.contains(n)?!1:!!_B(n)}function B5(e,t){const{shouldFocus:n,visible:r,focusRef:o}=t,s=n&&!r;ba(()=>{if(!s||UB(e))return;const l=(o==null?void 0:o.current)||e.current;let c;if(l)return c=requestAnimationFrame(()=>{l.focus({preventScroll:!0})}),()=>{cancelAnimationFrame(c)}},[s,e,o])}var GB={preventScroll:!0,shouldFocus:!1};function KB(e,t=GB){const{focusRef:n,preventScroll:r,shouldFocus:o,visible:s}=t,l=qB(e)?e.current:e,c=o&&s,d=i.useRef(c),f=i.useRef(s);dc(()=>{!f.current&&s&&(d.current=c),f.current=s},[s,c]);const m=i.useCallback(()=>{if(!(!s||!l||!d.current)&&(d.current=!1,!l.contains(document.activeElement)))if(n!=null&&n.current)requestAnimationFrame(()=>{var h;(h=n.current)==null||h.focus({preventScroll:r})});else{const h=D5(l);h.length>0&&requestAnimationFrame(()=>{h[0].focus({preventScroll:r})})}},[s,r,l,n]);ba(()=>{m()},[m]),Ul(l,"transitionend",m)}function qB(e){return"current"in e}var Li=(e,t)=>({var:e,varRef:t?`var(${e}, ${t})`:`var(${e})`}),Fn={arrowShadowColor:Li("--popper-arrow-shadow-color"),arrowSize:Li("--popper-arrow-size","8px"),arrowSizeHalf:Li("--popper-arrow-size-half"),arrowBg:Li("--popper-arrow-bg"),transformOrigin:Li("--popper-transform-origin"),arrowOffset:Li("--popper-arrow-offset")};function XB(e){if(e.includes("top"))return"1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("bottom"))return"-1px -1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("right"))return"-1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("left"))return"1px -1px 0px 0 var(--popper-arrow-shadow-color)"}var QB={top:"bottom center","top-start":"bottom left","top-end":"bottom right",bottom:"top center","bottom-start":"top left","bottom-end":"top right",left:"right center","left-start":"right top","left-end":"right bottom",right:"left center","right-start":"left top","right-end":"left bottom"},YB=e=>QB[e],HS={scroll:!0,resize:!0};function ZB(e){let t;return typeof e=="object"?t={enabled:!0,options:{...HS,...e}}:t={enabled:e,options:HS},t}var JB={name:"matchWidth",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:({state:e})=>{e.styles.popper.width=`${e.rects.reference.width}px`},effect:({state:e})=>()=>{const t=e.elements.reference;e.elements.popper.style.width=`${t.offsetWidth}px`}},eH={name:"transformOrigin",enabled:!0,phase:"write",fn:({state:e})=>{WS(e)},effect:({state:e})=>()=>{WS(e)}},WS=e=>{e.elements.popper.style.setProperty(Fn.transformOrigin.var,YB(e.placement))},tH={name:"positionArrow",enabled:!0,phase:"afterWrite",fn:({state:e})=>{nH(e)}},nH=e=>{var t;if(!e.placement)return;const n=rH(e.placement);if((t=e.elements)!=null&&t.arrow&&n){Object.assign(e.elements.arrow.style,{[n.property]:n.value,width:Fn.arrowSize.varRef,height:Fn.arrowSize.varRef,zIndex:-1});const r={[Fn.arrowSizeHalf.var]:`calc(${Fn.arrowSize.varRef} / 2 - 1px)`,[Fn.arrowOffset.var]:`calc(${Fn.arrowSizeHalf.varRef} * -1)`};for(const o in r)e.elements.arrow.style.setProperty(o,r[o])}},rH=e=>{if(e.startsWith("top"))return{property:"bottom",value:Fn.arrowOffset.varRef};if(e.startsWith("bottom"))return{property:"top",value:Fn.arrowOffset.varRef};if(e.startsWith("left"))return{property:"right",value:Fn.arrowOffset.varRef};if(e.startsWith("right"))return{property:"left",value:Fn.arrowOffset.varRef}},oH={name:"innerArrow",enabled:!0,phase:"main",requires:["arrow"],fn:({state:e})=>{VS(e)},effect:({state:e})=>()=>{VS(e)}},VS=e=>{if(!e.elements.arrow)return;const t=e.elements.arrow.querySelector("[data-popper-arrow-inner]");if(!t)return;const n=XB(e.placement);n&&t.style.setProperty("--popper-arrow-default-shadow",n),Object.assign(t.style,{transform:"rotate(45deg)",background:Fn.arrowBg.varRef,top:0,left:0,width:"100%",height:"100%",position:"absolute",zIndex:"inherit",boxShadow:"var(--popper-arrow-shadow, var(--popper-arrow-default-shadow))"})},sH={"start-start":{ltr:"left-start",rtl:"right-start"},"start-end":{ltr:"left-end",rtl:"right-end"},"end-start":{ltr:"right-start",rtl:"left-start"},"end-end":{ltr:"right-end",rtl:"left-end"},start:{ltr:"left",rtl:"right"},end:{ltr:"right",rtl:"left"}},aH={"auto-start":"auto-end","auto-end":"auto-start","top-start":"top-end","top-end":"top-start","bottom-start":"bottom-end","bottom-end":"bottom-start"};function lH(e,t="ltr"){var n,r;const o=((n=sH[e])==null?void 0:n[t])||e;return t==="ltr"?o:(r=aH[e])!=null?r:o}var Lr="top",_o="bottom",Io="right",Fr="left",fy="auto",tf=[Lr,_o,Io,Fr],Ic="start",kd="end",iH="clippingParents",H5="viewport",Lu="popper",cH="reference",US=tf.reduce(function(e,t){return e.concat([t+"-"+Ic,t+"-"+kd])},[]),W5=[].concat(tf,[fy]).reduce(function(e,t){return e.concat([t,t+"-"+Ic,t+"-"+kd])},[]),uH="beforeRead",dH="read",fH="afterRead",pH="beforeMain",mH="main",hH="afterMain",gH="beforeWrite",vH="write",bH="afterWrite",xH=[uH,dH,fH,pH,mH,hH,gH,vH,bH];function Es(e){return e?(e.nodeName||"").toLowerCase():null}function so(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ei(e){var t=so(e).Element;return e instanceof t||e instanceof Element}function So(e){var t=so(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function py(e){if(typeof ShadowRoot>"u")return!1;var t=so(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function yH(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!So(s)||!Es(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(l){var c=o[l];c===!1?s.removeAttribute(l):s.setAttribute(l,c===!0?"":c)}))})}function CH(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],s=t.attributes[r]||{},l=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),c=l.reduce(function(d,f){return d[f]="",d},{});!So(o)||!Es(o)||(Object.assign(o.style,c),Object.keys(s).forEach(function(d){o.removeAttribute(d)}))})}}const wH={name:"applyStyles",enabled:!0,phase:"write",fn:yH,effect:CH,requires:["computeStyles"]};function Is(e){return e.split("-")[0]}var Gl=Math.max,Nm=Math.min,Pc=Math.round;function cb(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function V5(){return!/^((?!chrome|android).)*safari/i.test(cb())}function Ec(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),o=1,s=1;t&&So(e)&&(o=e.offsetWidth>0&&Pc(r.width)/e.offsetWidth||1,s=e.offsetHeight>0&&Pc(r.height)/e.offsetHeight||1);var l=ei(e)?so(e):window,c=l.visualViewport,d=!V5()&&n,f=(r.left+(d&&c?c.offsetLeft:0))/o,m=(r.top+(d&&c?c.offsetTop:0))/s,h=r.width/o,g=r.height/s;return{width:h,height:g,top:m,right:f+h,bottom:m+g,left:f,x:f,y:m}}function my(e){var t=Ec(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function U5(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&py(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function ca(e){return so(e).getComputedStyle(e)}function SH(e){return["table","td","th"].indexOf(Es(e))>=0}function gl(e){return((ei(e)?e.ownerDocument:e.document)||window.document).documentElement}function dg(e){return Es(e)==="html"?e:e.assignedSlot||e.parentNode||(py(e)?e.host:null)||gl(e)}function GS(e){return!So(e)||ca(e).position==="fixed"?null:e.offsetParent}function kH(e){var t=/firefox/i.test(cb()),n=/Trident/i.test(cb());if(n&&So(e)){var r=ca(e);if(r.position==="fixed")return null}var o=dg(e);for(py(o)&&(o=o.host);So(o)&&["html","body"].indexOf(Es(o))<0;){var s=ca(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function nf(e){for(var t=so(e),n=GS(e);n&&SH(n)&&ca(n).position==="static";)n=GS(n);return n&&(Es(n)==="html"||Es(n)==="body"&&ca(n).position==="static")?t:n||kH(e)||t}function hy(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function ad(e,t,n){return Gl(e,Nm(t,n))}function jH(e,t,n){var r=ad(e,t,n);return r>n?n:r}function G5(){return{top:0,right:0,bottom:0,left:0}}function K5(e){return Object.assign({},G5(),e)}function q5(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var _H=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,K5(typeof t!="number"?t:q5(t,tf))};function IH(e){var t,n=e.state,r=e.name,o=e.options,s=n.elements.arrow,l=n.modifiersData.popperOffsets,c=Is(n.placement),d=hy(c),f=[Fr,Io].indexOf(c)>=0,m=f?"height":"width";if(!(!s||!l)){var h=_H(o.padding,n),g=my(s),b=d==="y"?Lr:Fr,y=d==="y"?_o:Io,x=n.rects.reference[m]+n.rects.reference[d]-l[d]-n.rects.popper[m],w=l[d]-n.rects.reference[d],S=nf(s),j=S?d==="y"?S.clientHeight||0:S.clientWidth||0:0,_=x/2-w/2,I=h[b],E=j-g[m]-h[y],M=j/2-g[m]/2+_,D=ad(I,M,E),R=d;n.modifiersData[r]=(t={},t[R]=D,t.centerOffset=D-M,t)}}function PH(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||U5(t.elements.popper,o)&&(t.elements.arrow=o))}const EH={name:"arrow",enabled:!0,phase:"main",fn:IH,effect:PH,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Mc(e){return e.split("-")[1]}var MH={top:"auto",right:"auto",bottom:"auto",left:"auto"};function OH(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:Pc(n*o)/o||0,y:Pc(r*o)/o||0}}function KS(e){var t,n=e.popper,r=e.popperRect,o=e.placement,s=e.variation,l=e.offsets,c=e.position,d=e.gpuAcceleration,f=e.adaptive,m=e.roundOffsets,h=e.isFixed,g=l.x,b=g===void 0?0:g,y=l.y,x=y===void 0?0:y,w=typeof m=="function"?m({x:b,y:x}):{x:b,y:x};b=w.x,x=w.y;var S=l.hasOwnProperty("x"),j=l.hasOwnProperty("y"),_=Fr,I=Lr,E=window;if(f){var M=nf(n),D="clientHeight",R="clientWidth";if(M===so(n)&&(M=gl(n),ca(M).position!=="static"&&c==="absolute"&&(D="scrollHeight",R="scrollWidth")),M=M,o===Lr||(o===Fr||o===Io)&&s===kd){I=_o;var N=h&&M===E&&E.visualViewport?E.visualViewport.height:M[D];x-=N-r.height,x*=d?1:-1}if(o===Fr||(o===Lr||o===_o)&&s===kd){_=Io;var O=h&&M===E&&E.visualViewport?E.visualViewport.width:M[R];b-=O-r.width,b*=d?1:-1}}var T=Object.assign({position:c},f&&MH),U=m===!0?OH({x:b,y:x},so(n)):{x:b,y:x};if(b=U.x,x=U.y,d){var G;return Object.assign({},T,(G={},G[I]=j?"0":"",G[_]=S?"0":"",G.transform=(E.devicePixelRatio||1)<=1?"translate("+b+"px, "+x+"px)":"translate3d("+b+"px, "+x+"px, 0)",G))}return Object.assign({},T,(t={},t[I]=j?x+"px":"",t[_]=S?b+"px":"",t.transform="",t))}function DH(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,s=n.adaptive,l=s===void 0?!0:s,c=n.roundOffsets,d=c===void 0?!0:c,f={placement:Is(t.placement),variation:Mc(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,KS(Object.assign({},f,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:l,roundOffsets:d})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,KS(Object.assign({},f,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:d})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const RH={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:DH,data:{}};var jp={passive:!0};function AH(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,s=o===void 0?!0:o,l=r.resize,c=l===void 0?!0:l,d=so(t.elements.popper),f=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&f.forEach(function(m){m.addEventListener("scroll",n.update,jp)}),c&&d.addEventListener("resize",n.update,jp),function(){s&&f.forEach(function(m){m.removeEventListener("scroll",n.update,jp)}),c&&d.removeEventListener("resize",n.update,jp)}}const TH={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:AH,data:{}};var NH={left:"right",right:"left",bottom:"top",top:"bottom"};function am(e){return e.replace(/left|right|bottom|top/g,function(t){return NH[t]})}var $H={start:"end",end:"start"};function qS(e){return e.replace(/start|end/g,function(t){return $H[t]})}function gy(e){var t=so(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function vy(e){return Ec(gl(e)).left+gy(e).scrollLeft}function LH(e,t){var n=so(e),r=gl(e),o=n.visualViewport,s=r.clientWidth,l=r.clientHeight,c=0,d=0;if(o){s=o.width,l=o.height;var f=V5();(f||!f&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:l,x:c+vy(e),y:d}}function FH(e){var t,n=gl(e),r=gy(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=Gl(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),l=Gl(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),c=-r.scrollLeft+vy(e),d=-r.scrollTop;return ca(o||n).direction==="rtl"&&(c+=Gl(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:l,x:c,y:d}}function by(e){var t=ca(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function X5(e){return["html","body","#document"].indexOf(Es(e))>=0?e.ownerDocument.body:So(e)&&by(e)?e:X5(dg(e))}function ld(e,t){var n;t===void 0&&(t=[]);var r=X5(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=so(r),l=o?[s].concat(s.visualViewport||[],by(r)?r:[]):r,c=t.concat(l);return o?c:c.concat(ld(dg(l)))}function ub(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function zH(e,t){var n=Ec(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function XS(e,t,n){return t===H5?ub(LH(e,n)):ei(t)?zH(t,n):ub(FH(gl(e)))}function BH(e){var t=ld(dg(e)),n=["absolute","fixed"].indexOf(ca(e).position)>=0,r=n&&So(e)?nf(e):e;return ei(r)?t.filter(function(o){return ei(o)&&U5(o,r)&&Es(o)!=="body"}):[]}function HH(e,t,n,r){var o=t==="clippingParents"?BH(e):[].concat(t),s=[].concat(o,[n]),l=s[0],c=s.reduce(function(d,f){var m=XS(e,f,r);return d.top=Gl(m.top,d.top),d.right=Nm(m.right,d.right),d.bottom=Nm(m.bottom,d.bottom),d.left=Gl(m.left,d.left),d},XS(e,l,r));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}function Q5(e){var t=e.reference,n=e.element,r=e.placement,o=r?Is(r):null,s=r?Mc(r):null,l=t.x+t.width/2-n.width/2,c=t.y+t.height/2-n.height/2,d;switch(o){case Lr:d={x:l,y:t.y-n.height};break;case _o:d={x:l,y:t.y+t.height};break;case Io:d={x:t.x+t.width,y:c};break;case Fr:d={x:t.x-n.width,y:c};break;default:d={x:t.x,y:t.y}}var f=o?hy(o):null;if(f!=null){var m=f==="y"?"height":"width";switch(s){case Ic:d[f]=d[f]-(t[m]/2-n[m]/2);break;case kd:d[f]=d[f]+(t[m]/2-n[m]/2);break}}return d}function jd(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,s=n.strategy,l=s===void 0?e.strategy:s,c=n.boundary,d=c===void 0?iH:c,f=n.rootBoundary,m=f===void 0?H5:f,h=n.elementContext,g=h===void 0?Lu:h,b=n.altBoundary,y=b===void 0?!1:b,x=n.padding,w=x===void 0?0:x,S=K5(typeof w!="number"?w:q5(w,tf)),j=g===Lu?cH:Lu,_=e.rects.popper,I=e.elements[y?j:g],E=HH(ei(I)?I:I.contextElement||gl(e.elements.popper),d,m,l),M=Ec(e.elements.reference),D=Q5({reference:M,element:_,strategy:"absolute",placement:o}),R=ub(Object.assign({},_,D)),N=g===Lu?R:M,O={top:E.top-N.top+S.top,bottom:N.bottom-E.bottom+S.bottom,left:E.left-N.left+S.left,right:N.right-E.right+S.right},T=e.modifiersData.offset;if(g===Lu&&T){var U=T[o];Object.keys(O).forEach(function(G){var q=[Io,_o].indexOf(G)>=0?1:-1,Y=[Lr,_o].indexOf(G)>=0?"y":"x";O[G]+=U[Y]*q})}return O}function WH(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,s=n.rootBoundary,l=n.padding,c=n.flipVariations,d=n.allowedAutoPlacements,f=d===void 0?W5:d,m=Mc(r),h=m?c?US:US.filter(function(y){return Mc(y)===m}):tf,g=h.filter(function(y){return f.indexOf(y)>=0});g.length===0&&(g=h);var b=g.reduce(function(y,x){return y[x]=jd(e,{placement:x,boundary:o,rootBoundary:s,padding:l})[Is(x)],y},{});return Object.keys(b).sort(function(y,x){return b[y]-b[x]})}function VH(e){if(Is(e)===fy)return[];var t=am(e);return[qS(e),t,qS(t)]}function UH(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,l=n.altAxis,c=l===void 0?!0:l,d=n.fallbackPlacements,f=n.padding,m=n.boundary,h=n.rootBoundary,g=n.altBoundary,b=n.flipVariations,y=b===void 0?!0:b,x=n.allowedAutoPlacements,w=t.options.placement,S=Is(w),j=S===w,_=d||(j||!y?[am(w)]:VH(w)),I=[w].concat(_).reduce(function(re,A){return re.concat(Is(A)===fy?WH(t,{placement:A,boundary:m,rootBoundary:h,padding:f,flipVariations:y,allowedAutoPlacements:x}):A)},[]),E=t.rects.reference,M=t.rects.popper,D=new Map,R=!0,N=I[0],O=0;O=0,Y=q?"width":"height",Q=jd(t,{placement:T,boundary:m,rootBoundary:h,altBoundary:g,padding:f}),V=q?G?Io:Fr:G?_o:Lr;E[Y]>M[Y]&&(V=am(V));var se=am(V),ee=[];if(s&&ee.push(Q[U]<=0),c&&ee.push(Q[V]<=0,Q[se]<=0),ee.every(function(re){return re})){N=T,R=!1;break}D.set(T,ee)}if(R)for(var le=y?3:1,ae=function(A){var L=I.find(function(K){var ne=D.get(K);if(ne)return ne.slice(0,A).every(function(z){return z})});if(L)return N=L,"break"},ce=le;ce>0;ce--){var J=ae(ce);if(J==="break")break}t.placement!==N&&(t.modifiersData[r]._skip=!0,t.placement=N,t.reset=!0)}}const GH={name:"flip",enabled:!0,phase:"main",fn:UH,requiresIfExists:["offset"],data:{_skip:!1}};function QS(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function YS(e){return[Lr,Io,_o,Fr].some(function(t){return e[t]>=0})}function KH(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,l=jd(t,{elementContext:"reference"}),c=jd(t,{altBoundary:!0}),d=QS(l,r),f=QS(c,o,s),m=YS(d),h=YS(f);t.modifiersData[n]={referenceClippingOffsets:d,popperEscapeOffsets:f,isReferenceHidden:m,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":h})}const qH={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:KH};function XH(e,t,n){var r=Is(e),o=[Fr,Lr].indexOf(r)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,l=s[0],c=s[1];return l=l||0,c=(c||0)*o,[Fr,Io].indexOf(r)>=0?{x:c,y:l}:{x:l,y:c}}function QH(e){var t=e.state,n=e.options,r=e.name,o=n.offset,s=o===void 0?[0,0]:o,l=W5.reduce(function(m,h){return m[h]=XH(h,t.rects,s),m},{}),c=l[t.placement],d=c.x,f=c.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=f),t.modifiersData[r]=l}const YH={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:QH};function ZH(e){var t=e.state,n=e.name;t.modifiersData[n]=Q5({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const JH={name:"popperOffsets",enabled:!0,phase:"read",fn:ZH,data:{}};function eW(e){return e==="x"?"y":"x"}function tW(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=o===void 0?!0:o,l=n.altAxis,c=l===void 0?!1:l,d=n.boundary,f=n.rootBoundary,m=n.altBoundary,h=n.padding,g=n.tether,b=g===void 0?!0:g,y=n.tetherOffset,x=y===void 0?0:y,w=jd(t,{boundary:d,rootBoundary:f,padding:h,altBoundary:m}),S=Is(t.placement),j=Mc(t.placement),_=!j,I=hy(S),E=eW(I),M=t.modifiersData.popperOffsets,D=t.rects.reference,R=t.rects.popper,N=typeof x=="function"?x(Object.assign({},t.rects,{placement:t.placement})):x,O=typeof N=="number"?{mainAxis:N,altAxis:N}:Object.assign({mainAxis:0,altAxis:0},N),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,U={x:0,y:0};if(M){if(s){var G,q=I==="y"?Lr:Fr,Y=I==="y"?_o:Io,Q=I==="y"?"height":"width",V=M[I],se=V+w[q],ee=V-w[Y],le=b?-R[Q]/2:0,ae=j===Ic?D[Q]:R[Q],ce=j===Ic?-R[Q]:-D[Q],J=t.elements.arrow,re=b&&J?my(J):{width:0,height:0},A=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:G5(),L=A[q],K=A[Y],ne=ad(0,D[Q],re[Q]),z=_?D[Q]/2-le-ne-L-O.mainAxis:ae-ne-L-O.mainAxis,oe=_?-D[Q]/2+le+ne+K+O.mainAxis:ce+ne+K+O.mainAxis,X=t.elements.arrow&&nf(t.elements.arrow),Z=X?I==="y"?X.clientTop||0:X.clientLeft||0:0,me=(G=T==null?void 0:T[I])!=null?G:0,ve=V+z-me-Z,de=V+oe-me,ke=ad(b?Nm(se,ve):se,V,b?Gl(ee,de):ee);M[I]=ke,U[I]=ke-V}if(c){var we,Re=I==="x"?Lr:Fr,Qe=I==="x"?_o:Io,$e=M[E],vt=E==="y"?"height":"width",it=$e+w[Re],ot=$e-w[Qe],Ce=[Lr,Fr].indexOf(S)!==-1,Me=(we=T==null?void 0:T[E])!=null?we:0,qe=Ce?it:$e-D[vt]-R[vt]-Me+O.altAxis,dt=Ce?$e+D[vt]+R[vt]-Me-O.altAxis:ot,ye=b&&Ce?jH(qe,$e,dt):ad(b?qe:it,$e,b?dt:ot);M[E]=ye,U[E]=ye-$e}t.modifiersData[r]=U}}const nW={name:"preventOverflow",enabled:!0,phase:"main",fn:tW,requiresIfExists:["offset"]};function rW(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function oW(e){return e===so(e)||!So(e)?gy(e):rW(e)}function sW(e){var t=e.getBoundingClientRect(),n=Pc(t.width)/e.offsetWidth||1,r=Pc(t.height)/e.offsetHeight||1;return n!==1||r!==1}function aW(e,t,n){n===void 0&&(n=!1);var r=So(t),o=So(t)&&sW(t),s=gl(t),l=Ec(e,o,n),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(r||!r&&!n)&&((Es(t)!=="body"||by(s))&&(c=oW(t)),So(t)?(d=Ec(t,!0),d.x+=t.clientLeft,d.y+=t.clientTop):s&&(d.x=vy(s))),{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function lW(e){var t=new Map,n=new Set,r=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var l=[].concat(s.requires||[],s.requiresIfExists||[]);l.forEach(function(c){if(!n.has(c)){var d=t.get(c);d&&o(d)}}),r.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),r}function iW(e){var t=lW(e);return xH.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function cW(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function uW(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var ZS={placement:"bottom",modifiers:[],strategy:"absolute"};function JS(){for(var e=arguments.length,t=new Array(e),n=0;n{}),_=i.useCallback(()=>{var O;!t||!y.current||!x.current||((O=j.current)==null||O.call(j),w.current=pW(y.current,x.current,{placement:S,modifiers:[oH,tH,eH,{...JB,enabled:!!g},{name:"eventListeners",...ZB(l)},{name:"arrow",options:{padding:s}},{name:"offset",options:{offset:c??[0,d]}},{name:"flip",enabled:!!f,options:{padding:8}},{name:"preventOverflow",enabled:!!h,options:{boundary:m}},...n??[]],strategy:o}),w.current.forceUpdate(),j.current=w.current.destroy)},[S,t,n,g,l,s,c,d,f,h,m,o]);i.useEffect(()=>()=>{var O;!y.current&&!x.current&&((O=w.current)==null||O.destroy(),w.current=null)},[]);const I=i.useCallback(O=>{y.current=O,_()},[_]),E=i.useCallback((O={},T=null)=>({...O,ref:Et(I,T)}),[I]),M=i.useCallback(O=>{x.current=O,_()},[_]),D=i.useCallback((O={},T=null)=>({...O,ref:Et(M,T),style:{...O.style,position:o,minWidth:g?void 0:"max-content",inset:"0 auto auto 0"}}),[o,M,g]),R=i.useCallback((O={},T=null)=>{const{size:U,shadowColor:G,bg:q,style:Y,...Q}=O;return{...Q,ref:T,"data-popper-arrow":"",style:mW(O)}},[]),N=i.useCallback((O={},T=null)=>({...O,ref:T,"data-popper-arrow-inner":""}),[]);return{update(){var O;(O=w.current)==null||O.update()},forceUpdate(){var O;(O=w.current)==null||O.forceUpdate()},transformOrigin:Fn.transformOrigin.varRef,referenceRef:I,popperRef:M,getPopperProps:D,getArrowProps:R,getArrowInnerProps:N,getReferenceProps:E}}function mW(e){const{size:t,shadowColor:n,bg:r,style:o}=e,s={...o,position:"absolute"};return t&&(s["--popper-arrow-size"]=t),n&&(s["--popper-arrow-shadow-color"]=n),r&&(s["--popper-arrow-bg"]=r),s}function yy(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=gn(n),l=gn(t),[c,d]=i.useState(e.defaultIsOpen||!1),f=r!==void 0?r:c,m=r!==void 0,h=i.useId(),g=o??`disclosure-${h}`,b=i.useCallback(()=>{m||d(!1),l==null||l()},[m,l]),y=i.useCallback(()=>{m||d(!0),s==null||s()},[m,s]),x=i.useCallback(()=>{f?b():y()},[f,y,b]);function w(j={}){return{...j,"aria-expanded":f,"aria-controls":g,onClick(_){var I;(I=j.onClick)==null||I.call(j,_),x()}}}function S(j={}){return{...j,hidden:!f,id:g}}return{isOpen:f,onOpen:y,onClose:b,onToggle:x,isControlled:m,getButtonProps:w,getDisclosureProps:S}}function hW(e){const{ref:t,handler:n,enabled:r=!0}=e,o=gn(n),l=i.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}).current;i.useEffect(()=>{if(!r)return;const c=h=>{Vv(h,t)&&(l.isPointerDown=!0)},d=h=>{if(l.ignoreEmulatedMouseEvents){l.ignoreEmulatedMouseEvents=!1;return}l.isPointerDown&&n&&Vv(h,t)&&(l.isPointerDown=!1,o(h))},f=h=>{l.ignoreEmulatedMouseEvents=!0,n&&l.isPointerDown&&Vv(h,t)&&(l.isPointerDown=!1,o(h))},m=Y5(t.current);return m.addEventListener("mousedown",c,!0),m.addEventListener("mouseup",d,!0),m.addEventListener("touchstart",c,!0),m.addEventListener("touchend",f,!0),()=>{m.removeEventListener("mousedown",c,!0),m.removeEventListener("mouseup",d,!0),m.removeEventListener("touchstart",c,!0),m.removeEventListener("touchend",f,!0)}},[n,t,o,l,r])}function Vv(e,t){var n;const r=e.target;return r&&!Y5(r).contains(r)?!1:!((n=t.current)!=null&&n.contains(r))}function Y5(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function Z5(e){const{isOpen:t,ref:n}=e,[r,o]=i.useState(t),[s,l]=i.useState(!1);return i.useEffect(()=>{s||(o(t),l(!0))},[t,s,r]),Ul(()=>n.current,"animationend",()=>{o(t)}),{present:!(t?!1:!r),onComplete(){var d;const f=xB(n.current),m=new f.CustomEvent("animationend",{bubbles:!0});(d=n.current)==null||d.dispatchEvent(m)}}}function Cy(e){const{wasSelected:t,enabled:n,isSelected:r,mode:o="unmount"}=e;return!!(!n||r||o==="keepMounted"&&t)}var[gW,vW,bW,xW]=Vx(),[yW,rf]=Kt({strict:!1,name:"MenuContext"});function CW(e,...t){const n=i.useId(),r=e||n;return i.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}function J5(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function e4(e){return J5(e).activeElement===e}function wW(e={}){const{id:t,closeOnSelect:n=!0,closeOnBlur:r=!0,initialFocusRef:o,autoSelect:s=!0,isLazy:l,isOpen:c,defaultIsOpen:d,onClose:f,onOpen:m,placement:h="bottom-start",lazyBehavior:g="unmount",direction:b,computePositionOnMount:y=!1,...x}=e,w=i.useRef(null),S=i.useRef(null),j=bW(),_=i.useCallback(()=>{requestAnimationFrame(()=>{var J;(J=w.current)==null||J.focus({preventScroll:!1})})},[]),I=i.useCallback(()=>{const J=setTimeout(()=>{var re;if(o)(re=o.current)==null||re.focus();else{const A=j.firstEnabled();A&&G(A.index)}});se.current.add(J)},[j,o]),E=i.useCallback(()=>{const J=setTimeout(()=>{const re=j.lastEnabled();re&&G(re.index)});se.current.add(J)},[j]),M=i.useCallback(()=>{m==null||m(),s?I():_()},[s,I,_,m]),{isOpen:D,onOpen:R,onClose:N,onToggle:O}=yy({isOpen:c,defaultIsOpen:d,onClose:f,onOpen:M});hW({enabled:D&&r,ref:w,handler:J=>{var re;(re=S.current)!=null&&re.contains(J.target)||N()}});const T=xy({...x,enabled:D||y,placement:h,direction:b}),[U,G]=i.useState(-1);ba(()=>{D||G(-1)},[D]),B5(w,{focusRef:S,visible:D,shouldFocus:!0});const q=Z5({isOpen:D,ref:w}),[Y,Q]=CW(t,"menu-button","menu-list"),V=i.useCallback(()=>{R(),_()},[R,_]),se=i.useRef(new Set([]));i.useEffect(()=>{const J=se.current;return()=>{J.forEach(re=>clearTimeout(re)),J.clear()}},[]);const ee=i.useCallback(()=>{R(),I()},[I,R]),le=i.useCallback(()=>{R(),E()},[R,E]),ae=i.useCallback(()=>{var J,re;const A=J5(w.current),L=(J=w.current)==null?void 0:J.contains(A.activeElement);if(!(D&&!L))return;const ne=(re=j.item(U))==null?void 0:re.node;ne==null||ne.focus({preventScroll:!0})},[D,U,j]),ce=i.useRef(null);return{openAndFocusMenu:V,openAndFocusFirstItem:ee,openAndFocusLastItem:le,onTransitionEnd:ae,unstable__animationState:q,descendants:j,popper:T,buttonId:Y,menuId:Q,forceUpdate:T.forceUpdate,orientation:"vertical",isOpen:D,onToggle:O,onOpen:R,onClose:N,menuRef:w,buttonRef:S,focusedIndex:U,closeOnSelect:n,closeOnBlur:r,autoSelect:s,setFocusedIndex:G,isLazy:l,lazyBehavior:g,initialFocusRef:o,rafId:ce}}function SW(e={},t=null){const n=rf(),{onToggle:r,popper:o,openAndFocusFirstItem:s,openAndFocusLastItem:l}=n,c=i.useCallback(d=>{const f=d.key,h={Enter:s,ArrowDown:s,ArrowUp:l}[f];h&&(d.preventDefault(),d.stopPropagation(),h(d))},[s,l]);return{...e,ref:Et(n.buttonRef,t,o.referenceRef),id:n.buttonId,"data-active":ut(n.isOpen),"aria-expanded":n.isOpen,"aria-haspopup":"menu","aria-controls":n.menuId,onClick:ze(e.onClick,r),onKeyDown:ze(e.onKeyDown,c)}}function db(e){var t;return IW(e)&&!!((t=e==null?void 0:e.getAttribute("role"))!=null&&t.startsWith("menuitem"))}function kW(e={},t=null){const n=rf();if(!n)throw new Error("useMenuContext: context is undefined. Seems you forgot to wrap component within
");const{focusedIndex:r,setFocusedIndex:o,menuRef:s,isOpen:l,onClose:c,menuId:d,isLazy:f,lazyBehavior:m,unstable__animationState:h}=n,g=vW(),b=HB({preventDefault:S=>S.key!==" "&&db(S.target)}),y=i.useCallback(S=>{if(!S.currentTarget.contains(S.target))return;const j=S.key,I={Tab:M=>M.preventDefault(),Escape:c,ArrowDown:()=>{const M=g.nextEnabled(r);M&&o(M.index)},ArrowUp:()=>{const M=g.prevEnabled(r);M&&o(M.index)}}[j];if(I){S.preventDefault(),I(S);return}const E=b(M=>{const D=WB(g.values(),M,R=>{var N,O;return(O=(N=R==null?void 0:R.node)==null?void 0:N.textContent)!=null?O:""},g.item(r));if(D){const R=g.indexOf(D.node);o(R)}});db(S.target)&&E(S)},[g,r,b,c,o]),x=i.useRef(!1);l&&(x.current=!0);const w=Cy({wasSelected:x.current,enabled:f,mode:m,isSelected:h.present});return{...e,ref:Et(s,t),children:w?e.children:null,tabIndex:-1,role:"menu",id:d,style:{...e.style,transformOrigin:"var(--popper-transform-origin)"},"aria-orientation":"vertical",onKeyDown:ze(e.onKeyDown,y)}}function jW(e={}){const{popper:t,isOpen:n}=rf();return t.getPopperProps({...e,style:{visibility:n?"visible":"hidden",...e.style}})}function _W(e={},t=null){const{onMouseEnter:n,onMouseMove:r,onMouseLeave:o,onClick:s,onFocus:l,isDisabled:c,isFocusable:d,closeOnSelect:f,type:m,...h}=e,g=rf(),{setFocusedIndex:b,focusedIndex:y,closeOnSelect:x,onClose:w,menuRef:S,isOpen:j,menuId:_,rafId:I}=g,E=i.useRef(null),M=`${_}-menuitem-${i.useId()}`,{index:D,register:R}=xW({disabled:c&&!d}),N=i.useCallback(V=>{n==null||n(V),!c&&b(D)},[b,D,c,n]),O=i.useCallback(V=>{r==null||r(V),E.current&&!e4(E.current)&&N(V)},[N,r]),T=i.useCallback(V=>{o==null||o(V),!c&&b(-1)},[b,c,o]),U=i.useCallback(V=>{s==null||s(V),db(V.currentTarget)&&(f??x)&&w()},[w,s,x,f]),G=i.useCallback(V=>{l==null||l(V),b(D)},[b,l,D]),q=D===y,Y=c&&!d;ba(()=>{if(j)return q&&!Y&&E.current?(I.current&&cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{var V;(V=E.current)==null||V.focus({preventScroll:!0}),I.current=null})):S.current&&!e4(S.current)&&S.current.focus({preventScroll:!0}),()=>{I.current&&cancelAnimationFrame(I.current)}},[q,Y,S,j]);const Q=z5({onClick:U,onFocus:G,onMouseEnter:N,onMouseMove:O,onMouseLeave:T,ref:Et(R,E,t),isDisabled:c,isFocusable:d});return{...h,...Q,type:m??Q.type,id:M,role:"menuitem",tabIndex:q?0:-1}}function IW(e){var t;if(!PW(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function PW(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}var[EW,li]=Kt({name:"MenuStylesContext",errorMessage:`useMenuStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),of=e=>{const{children:t}=e,n=Xn("Menu",e),r=cn(e),{direction:o}=Hd(),{descendants:s,...l}=wW({...r,direction:o}),c=i.useMemo(()=>l,[l]),{isOpen:d,onClose:f,forceUpdate:m}=c;return a.jsx(gW,{value:s,children:a.jsx(yW,{value:c,children:a.jsx(EW,{value:n,children:bx(t,{isOpen:d,onClose:f,forceUpdate:m})})})})};of.displayName="Menu";var e6=_e((e,t)=>{const n=li();return a.jsx(je.span,{ref:t,...e,__css:n.command,className:"chakra-menu__command"})});e6.displayName="MenuCommand";var MW=_e((e,t)=>{const{type:n,...r}=e,o=li(),s=r.as||n?n??void 0:"button",l=i.useMemo(()=>({textDecoration:"none",color:"inherit",userSelect:"none",display:"flex",width:"100%",alignItems:"center",textAlign:"start",flex:"0 0 auto",outline:0,...o.item}),[o.item]);return a.jsx(je.button,{ref:t,type:s,...r,__css:l})}),t6=e=>{const{className:t,children:n,...r}=e,o=li(),s=i.Children.only(n),l=i.isValidElement(s)?i.cloneElement(s,{focusable:"false","aria-hidden":!0,className:et("chakra-menu__icon",s.props.className)}):null,c=et("chakra-menu__icon-wrapper",t);return a.jsx(je.span,{className:c,...r,__css:o.icon,children:l})};t6.displayName="MenuIcon";var At=_e((e,t)=>{const{icon:n,iconSpacing:r="0.75rem",command:o,commandSpacing:s="0.75rem",children:l,...c}=e,d=_W(c,t),m=n||o?a.jsx("span",{style:{pointerEvents:"none",flex:1},children:l}):l;return a.jsxs(MW,{...d,className:et("chakra-menu__menuitem",d.className),children:[n&&a.jsx(t6,{fontSize:"0.8em",marginEnd:r,children:n}),m,o&&a.jsx(e6,{marginStart:s,children:o})]})});At.displayName="MenuItem";var OW={enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.2,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.1,easings:"easeOut"}}},DW=je(Mn.div),al=_e(function(t,n){var r,o;const{rootProps:s,motionProps:l,...c}=t,{isOpen:d,onTransitionEnd:f,unstable__animationState:m}=rf(),h=kW(c,n),g=jW(s),b=li();return a.jsx(je.div,{...g,__css:{zIndex:(o=t.zIndex)!=null?o:(r=b.list)==null?void 0:r.zIndex},children:a.jsx(DW,{variants:OW,initial:!1,animate:d?"enter":"exit",__css:{outline:0,...b.list},...l,className:et("chakra-menu__menu-list",h.className),...h,onUpdate:f,onAnimationComplete:Uh(m.onComplete,h.onAnimationComplete)})})});al.displayName="MenuList";var _d=_e((e,t)=>{const{title:n,children:r,className:o,...s}=e,l=et("chakra-menu__group__title",o),c=li();return a.jsxs("div",{ref:t,className:"chakra-menu__group",role:"group",children:[n&&a.jsx(je.p,{className:l,...s,__css:c.groupTitle,children:n}),r]})});_d.displayName="MenuGroup";var RW=_e((e,t)=>{const n=li();return a.jsx(je.button,{ref:t,...e,__css:{display:"inline-flex",appearance:"none",alignItems:"center",outline:0,...n.button}})}),sf=_e((e,t)=>{const{children:n,as:r,...o}=e,s=SW(o,t),l=r||RW;return a.jsx(l,{...s,className:et("chakra-menu__menu-button",e.className),children:a.jsx(je.span,{__css:{pointerEvents:"none",flex:"1 1 auto",minW:0},children:e.children})})});sf.displayName="MenuButton";var n6=e=>{const{className:t,...n}=e,r=li();return a.jsx(je.hr,{"aria-orientation":"horizontal",className:et("chakra-menu__divider",t),...n,__css:r.divider})};n6.displayName="MenuDivider";var AW={slideInBottom:{...Xu,custom:{offsetY:16,reverse:!0}},slideInRight:{...Xu,custom:{offsetX:16,reverse:!0}},slideInTop:{...Xu,custom:{offsetY:-16,reverse:!0}},slideInLeft:{...Xu,custom:{offsetX:-16,reverse:!0}},scale:{...R3,custom:{initialScale:.95,reverse:!0}},none:{}},TW=je(Mn.section),NW=e=>AW[e||"none"],r6=i.forwardRef((e,t)=>{const{preset:n,motionProps:r=NW(n),...o}=e;return a.jsx(TW,{ref:t,...r,...o})});r6.displayName="ModalTransition";var $W=Object.defineProperty,LW=(e,t,n)=>t in e?$W(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,FW=(e,t,n)=>(LW(e,typeof t!="symbol"?t+"":t,n),n),zW=class{constructor(){FW(this,"modals"),this.modals=new Map}add(e){return this.modals.set(e,this.modals.size+1),this.modals.size}remove(e){this.modals.delete(e)}isTopModal(e){return e?this.modals.get(e)===this.modals.size:!1}},fb=new zW;function o6(e,t){const[n,r]=i.useState(0);return i.useEffect(()=>{const o=e.current;if(o){if(t){const s=fb.add(o);r(s)}return()=>{fb.remove(o),r(0)}}},[t,e]),n}var BW=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Fi=new WeakMap,_p=new WeakMap,Ip={},Uv=0,s6=function(e){return e&&(e.host||s6(e.parentNode))},HW=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=s6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},WW=function(e,t,n,r){var o=HW(t,Array.isArray(e)?e:[e]);Ip[n]||(Ip[n]=new WeakMap);var s=Ip[n],l=[],c=new Set,d=new Set(o),f=function(h){!h||c.has(h)||(c.add(h),f(h.parentNode))};o.forEach(f);var m=function(h){!h||d.has(h)||Array.prototype.forEach.call(h.children,function(g){if(c.has(g))m(g);else{var b=g.getAttribute(r),y=b!==null&&b!=="false",x=(Fi.get(g)||0)+1,w=(s.get(g)||0)+1;Fi.set(g,x),s.set(g,w),l.push(g),x===1&&y&&_p.set(g,!0),w===1&&g.setAttribute(n,"true"),y||g.setAttribute(r,"true")}})};return m(t),c.clear(),Uv++,function(){l.forEach(function(h){var g=Fi.get(h)-1,b=s.get(h)-1;Fi.set(h,g),s.set(h,b),g||(_p.has(h)||h.removeAttribute(r),_p.delete(h)),b||h.removeAttribute(n)}),Uv--,Uv||(Fi=new WeakMap,Fi=new WeakMap,_p=new WeakMap,Ip={})}},VW=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||BW(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),WW(r,o,n,"aria-hidden")):function(){return null}};function UW(e){const{isOpen:t,onClose:n,id:r,closeOnOverlayClick:o=!0,closeOnEsc:s=!0,useInert:l=!0,onOverlayClick:c,onEsc:d}=e,f=i.useRef(null),m=i.useRef(null),[h,g,b]=KW(r,"chakra-modal","chakra-modal--header","chakra-modal--body");GW(f,t&&l);const y=o6(f,t),x=i.useRef(null),w=i.useCallback(N=>{x.current=N.target},[]),S=i.useCallback(N=>{N.key==="Escape"&&(N.stopPropagation(),s&&(n==null||n()),d==null||d())},[s,n,d]),[j,_]=i.useState(!1),[I,E]=i.useState(!1),M=i.useCallback((N={},O=null)=>({role:"dialog",...N,ref:Et(O,f),id:h,tabIndex:-1,"aria-modal":!0,"aria-labelledby":j?g:void 0,"aria-describedby":I?b:void 0,onClick:ze(N.onClick,T=>T.stopPropagation())}),[b,I,h,g,j]),D=i.useCallback(N=>{N.stopPropagation(),x.current===N.target&&fb.isTopModal(f.current)&&(o&&(n==null||n()),c==null||c())},[n,o,c]),R=i.useCallback((N={},O=null)=>({...N,ref:Et(O,m),onClick:ze(N.onClick,D),onKeyDown:ze(N.onKeyDown,S),onMouseDown:ze(N.onMouseDown,w)}),[S,w,D]);return{isOpen:t,onClose:n,headerId:g,bodyId:b,setBodyMounted:E,setHeaderMounted:_,dialogRef:f,overlayRef:m,getDialogProps:M,getDialogContainerProps:R,index:y}}function GW(e,t){const n=e.current;i.useEffect(()=>{if(!(!e.current||!t))return VW(e.current)},[t,e,n])}function KW(e,...t){const n=i.useId(),r=e||n;return i.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}var[qW,Yc]=Kt({name:"ModalStylesContext",errorMessage:`useModalStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[XW,ti]=Kt({strict:!0,name:"ModalContext",errorMessage:"useModalContext: `context` is undefined. Seems you forgot to wrap modal components in ``"}),ni=e=>{const t={scrollBehavior:"outside",autoFocus:!0,trapFocus:!0,returnFocusOnClose:!0,blockScrollOnMount:!0,allowPinchZoom:!1,motionPreset:"scale",lockFocusAcrossFrames:!0,...e},{portalProps:n,children:r,autoFocus:o,trapFocus:s,initialFocusRef:l,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:f,allowPinchZoom:m,preserveScrollBarGap:h,motionPreset:g,lockFocusAcrossFrames:b,onCloseComplete:y}=t,x=Xn("Modal",t),S={...UW(t),autoFocus:o,trapFocus:s,initialFocusRef:l,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:f,allowPinchZoom:m,preserveScrollBarGap:h,motionPreset:g,lockFocusAcrossFrames:b};return a.jsx(XW,{value:S,children:a.jsx(qW,{value:x,children:a.jsx(hr,{onExitComplete:y,children:S.isOpen&&a.jsx(Uc,{...n,children:r})})})})};ni.displayName="Modal";var lm="right-scroll-bar-position",im="width-before-scroll-bar",QW="with-scroll-bars-hidden",YW="--removed-body-scroll-bar-size",a6=n5(),Gv=function(){},fg=i.forwardRef(function(e,t){var n=i.useRef(null),r=i.useState({onScrollCapture:Gv,onWheelCapture:Gv,onTouchMoveCapture:Gv}),o=r[0],s=r[1],l=e.forwardProps,c=e.children,d=e.className,f=e.removeScrollBar,m=e.enabled,h=e.shards,g=e.sideCar,b=e.noIsolation,y=e.inert,x=e.allowPinchZoom,w=e.as,S=w===void 0?"div":w,j=e.gapMode,_=J3(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),I=g,E=Z3([n,t]),M=ws(ws({},_),o);return i.createElement(i.Fragment,null,m&&i.createElement(I,{sideCar:a6,removeScrollBar:f,shards:h,noIsolation:b,inert:y,setCallbacks:s,allowPinchZoom:!!x,lockRef:n,gapMode:j}),l?i.cloneElement(i.Children.only(c),ws(ws({},M),{ref:E})):i.createElement(S,ws({},M,{className:d,ref:E}),c))});fg.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};fg.classNames={fullWidth:im,zeroRight:lm};var t4,ZW=function(){if(t4)return t4;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function JW(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=ZW();return t&&e.setAttribute("nonce",t),e}function eV(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function tV(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var nV=function(){var e=0,t=null;return{add:function(n){e==0&&(t=JW())&&(eV(t,n),tV(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},rV=function(){var e=nV();return function(t,n){i.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},l6=function(){var e=rV(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},oV={left:0,top:0,right:0,gap:0},Kv=function(e){return parseInt(e||"",10)||0},sV=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[Kv(n),Kv(r),Kv(o)]},aV=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return oV;var t=sV(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},lV=l6(),iV=function(e,t,n,r){var o=e.left,s=e.top,l=e.right,c=e.gap;return n===void 0&&(n="margin"),` - .`.concat(QW,` { - overflow: hidden `).concat(r,`; - padding-right: `).concat(c,"px ").concat(r,`; - } - body { - overflow: hidden `).concat(r,`; - overscroll-behavior: contain; - `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` - padding-left: `.concat(o,`px; - padding-top: `).concat(s,`px; - padding-right: `).concat(l,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(c,"px ").concat(r,`; - `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` - } - - .`).concat(lm,` { - right: `).concat(c,"px ").concat(r,`; - } - - .`).concat(im,` { - margin-right: `).concat(c,"px ").concat(r,`; - } - - .`).concat(lm," .").concat(lm,` { - right: 0 `).concat(r,`; - } - - .`).concat(im," .").concat(im,` { - margin-right: 0 `).concat(r,`; - } - - body { - `).concat(YW,": ").concat(c,`px; - } -`)},cV=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r,s=i.useMemo(function(){return aV(o)},[o]);return i.createElement(lV,{styles:iV(s,!t,o,n?"":"!important")})},pb=!1;if(typeof window<"u")try{var Pp=Object.defineProperty({},"passive",{get:function(){return pb=!0,!0}});window.addEventListener("test",Pp,Pp),window.removeEventListener("test",Pp,Pp)}catch{pb=!1}var zi=pb?{passive:!1}:!1,uV=function(e){return e.tagName==="TEXTAREA"},i6=function(e,t){var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!uV(e)&&n[t]==="visible")},dV=function(e){return i6(e,"overflowY")},fV=function(e){return i6(e,"overflowX")},n4=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=c6(e,r);if(o){var s=u6(e,r),l=s[1],c=s[2];if(l>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},pV=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},mV=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},c6=function(e,t){return e==="v"?dV(t):fV(t)},u6=function(e,t){return e==="v"?pV(t):mV(t)},hV=function(e,t){return e==="h"&&t==="rtl"?-1:1},gV=function(e,t,n,r,o){var s=hV(e,window.getComputedStyle(t).direction),l=s*r,c=n.target,d=t.contains(c),f=!1,m=l>0,h=0,g=0;do{var b=u6(e,c),y=b[0],x=b[1],w=b[2],S=x-w-s*y;(y||S)&&c6(e,c)&&(h+=S,g+=y),c instanceof ShadowRoot?c=c.host:c=c.parentNode}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(m&&(o&&Math.abs(h)<1||!o&&l>h)||!m&&(o&&Math.abs(g)<1||!o&&-l>g))&&(f=!0),f},Ep=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},r4=function(e){return[e.deltaX,e.deltaY]},o4=function(e){return e&&"current"in e?e.current:e},vV=function(e,t){return e[0]===t[0]&&e[1]===t[1]},bV=function(e){return` - .block-interactivity-`.concat(e,` {pointer-events: none;} - .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},xV=0,Bi=[];function yV(e){var t=i.useRef([]),n=i.useRef([0,0]),r=i.useRef(),o=i.useState(xV++)[0],s=i.useState(l6)[0],l=i.useRef(e);i.useEffect(function(){l.current=e},[e]),i.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var x=ob([e.lockRef.current],(e.shards||[]).map(o4),!0).filter(Boolean);return x.forEach(function(w){return w.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),x.forEach(function(w){return w.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=i.useCallback(function(x,w){if("touches"in x&&x.touches.length===2)return!l.current.allowPinchZoom;var S=Ep(x),j=n.current,_="deltaX"in x?x.deltaX:j[0]-S[0],I="deltaY"in x?x.deltaY:j[1]-S[1],E,M=x.target,D=Math.abs(_)>Math.abs(I)?"h":"v";if("touches"in x&&D==="h"&&M.type==="range")return!1;var R=n4(D,M);if(!R)return!0;if(R?E=D:(E=D==="v"?"h":"v",R=n4(D,M)),!R)return!1;if(!r.current&&"changedTouches"in x&&(_||I)&&(r.current=E),!E)return!0;var N=r.current||E;return gV(N,w,x,N==="h"?_:I,!0)},[]),d=i.useCallback(function(x){var w=x;if(!(!Bi.length||Bi[Bi.length-1]!==s)){var S="deltaY"in w?r4(w):Ep(w),j=t.current.filter(function(E){return E.name===w.type&&(E.target===w.target||w.target===E.shadowParent)&&vV(E.delta,S)})[0];if(j&&j.should){w.cancelable&&w.preventDefault();return}if(!j){var _=(l.current.shards||[]).map(o4).filter(Boolean).filter(function(E){return E.contains(w.target)}),I=_.length>0?c(w,_[0]):!l.current.noIsolation;I&&w.cancelable&&w.preventDefault()}}},[]),f=i.useCallback(function(x,w,S,j){var _={name:x,delta:w,target:S,should:j,shadowParent:CV(S)};t.current.push(_),setTimeout(function(){t.current=t.current.filter(function(I){return I!==_})},1)},[]),m=i.useCallback(function(x){n.current=Ep(x),r.current=void 0},[]),h=i.useCallback(function(x){f(x.type,r4(x),x.target,c(x,e.lockRef.current))},[]),g=i.useCallback(function(x){f(x.type,Ep(x),x.target,c(x,e.lockRef.current))},[]);i.useEffect(function(){return Bi.push(s),e.setCallbacks({onScrollCapture:h,onWheelCapture:h,onTouchMoveCapture:g}),document.addEventListener("wheel",d,zi),document.addEventListener("touchmove",d,zi),document.addEventListener("touchstart",m,zi),function(){Bi=Bi.filter(function(x){return x!==s}),document.removeEventListener("wheel",d,zi),document.removeEventListener("touchmove",d,zi),document.removeEventListener("touchstart",m,zi)}},[]);var b=e.removeScrollBar,y=e.inert;return i.createElement(i.Fragment,null,y?i.createElement(s,{styles:bV(o)}):null,b?i.createElement(cV,{gapMode:e.gapMode}):null)}function CV(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const wV=xz(a6,yV);var d6=i.forwardRef(function(e,t){return i.createElement(fg,ws({},e,{ref:t,sideCar:wV}))});d6.classNames=fg.classNames;const SV=d6;function kV(e){const{autoFocus:t,trapFocus:n,dialogRef:r,initialFocusRef:o,blockScrollOnMount:s,allowPinchZoom:l,finalFocusRef:c,returnFocusOnClose:d,preserveScrollBarGap:f,lockFocusAcrossFrames:m,isOpen:h}=ti(),[g,b]=MR();i.useEffect(()=>{!g&&b&&setTimeout(b)},[g,b]);const y=o6(r,h);return a.jsx(R5,{autoFocus:t,isDisabled:!n,initialFocusRef:o,finalFocusRef:c,restoreFocus:d,contentRef:r,lockFocusAcrossFrames:m,children:a.jsx(SV,{removeScrollBar:!f,allowPinchZoom:l,enabled:y===1&&s,forwardProps:!0,children:e.children})})}var ri=_e((e,t)=>{const{className:n,children:r,containerProps:o,motionProps:s,...l}=e,{getDialogProps:c,getDialogContainerProps:d}=ti(),f=c(l,t),m=d(o),h=et("chakra-modal__content",n),g=Yc(),b={display:"flex",flexDirection:"column",position:"relative",width:"100%",outline:0,...g.dialog},y={display:"flex",width:"100vw",height:"$100vh",position:"fixed",left:0,top:0,...g.dialogContainer},{motionPreset:x}=ti();return a.jsx(kV,{children:a.jsx(je.div,{...m,className:"chakra-modal__content-container",tabIndex:-1,__css:y,children:a.jsx(r6,{preset:x,motionProps:s,className:h,...f,__css:b,children:r})})})});ri.displayName="ModalContent";function Zc(e){const{leastDestructiveRef:t,...n}=e;return a.jsx(ni,{...n,initialFocusRef:t})}var Jc=_e((e,t)=>a.jsx(ri,{ref:t,role:"alertdialog",...e})),ls=_e((e,t)=>{const{className:n,...r}=e,o=et("chakra-modal__footer",n),l={display:"flex",alignItems:"center",justifyContent:"flex-end",...Yc().footer};return a.jsx(je.footer,{ref:t,...r,__css:l,className:o})});ls.displayName="ModalFooter";var Po=_e((e,t)=>{const{className:n,...r}=e,{headerId:o,setHeaderMounted:s}=ti();i.useEffect(()=>(s(!0),()=>s(!1)),[s]);const l=et("chakra-modal__header",n),d={flex:0,...Yc().header};return a.jsx(je.header,{ref:t,className:l,id:o,...r,__css:d})});Po.displayName="ModalHeader";var jV=je(Mn.div),Eo=_e((e,t)=>{const{className:n,transition:r,motionProps:o,...s}=e,l=et("chakra-modal__overlay",n),d={pos:"fixed",left:"0",top:"0",w:"100vw",h:"100vh",...Yc().overlay},{motionPreset:f}=ti(),h=o||(f==="none"?{}:D3);return a.jsx(jV,{...h,__css:d,ref:t,className:l,...s})});Eo.displayName="ModalOverlay";var Mo=_e((e,t)=>{const{className:n,...r}=e,{bodyId:o,setBodyMounted:s}=ti();i.useEffect(()=>(s(!0),()=>s(!1)),[s]);const l=et("chakra-modal__body",n),c=Yc();return a.jsx(je.div,{ref:t,className:l,id:o,...r,__css:c.body})});Mo.displayName="ModalBody";var af=_e((e,t)=>{const{onClick:n,className:r,...o}=e,{onClose:s}=ti(),l=et("chakra-modal__close-btn",r),c=Yc();return a.jsx(bI,{ref:t,__css:c.closeButton,className:l,onClick:ze(n,d=>{d.stopPropagation(),s()}),...o})});af.displayName="ModalCloseButton";var _V=e=>a.jsx(An,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M21,5H3C2.621,5,2.275,5.214,2.105,5.553C1.937,5.892,1.973,6.297,2.2,6.6l9,12 c0.188,0.252,0.485,0.4,0.8,0.4s0.611-0.148,0.8-0.4l9-12c0.228-0.303,0.264-0.708,0.095-1.047C21.725,5.214,21.379,5,21,5z"})}),IV=e=>a.jsx(An,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M12.8,5.4c-0.377-0.504-1.223-0.504-1.6,0l-9,12c-0.228,0.303-0.264,0.708-0.095,1.047 C2.275,18.786,2.621,19,3,19h18c0.379,0,0.725-0.214,0.895-0.553c0.169-0.339,0.133-0.744-0.095-1.047L12.8,5.4z"})});function s4(e,t,n,r){i.useEffect(()=>{var o;if(!e.current||!r)return;const s=(o=e.current.ownerDocument.defaultView)!=null?o:window,l=Array.isArray(t)?t:[t],c=new s.MutationObserver(d=>{for(const f of d)f.type==="attributes"&&f.attributeName&&l.includes(f.attributeName)&&n(f)});return c.observe(e.current,{attributes:!0,attributeFilter:l}),()=>c.disconnect()})}function PV(e,t){const n=gn(e);i.useEffect(()=>{let r=null;const o=()=>n();return t!==null&&(r=window.setInterval(o,t)),()=>{r&&window.clearInterval(r)}},[t,n])}var EV=50,a4=300;function MV(e,t){const[n,r]=i.useState(!1),[o,s]=i.useState(null),[l,c]=i.useState(!0),d=i.useRef(null),f=()=>clearTimeout(d.current);PV(()=>{o==="increment"&&e(),o==="decrement"&&t()},n?EV:null);const m=i.useCallback(()=>{l&&e(),d.current=setTimeout(()=>{c(!1),r(!0),s("increment")},a4)},[e,l]),h=i.useCallback(()=>{l&&t(),d.current=setTimeout(()=>{c(!1),r(!0),s("decrement")},a4)},[t,l]),g=i.useCallback(()=>{c(!0),r(!1),f()},[]);return i.useEffect(()=>()=>f(),[]),{up:m,down:h,stop:g,isSpinning:n}}var OV=/^[Ee0-9+\-.]$/;function DV(e){return OV.test(e)}function RV(e,t){if(e.key==null)return!0;const n=e.ctrlKey||e.altKey||e.metaKey;return!(e.key.length===1)||n?!0:t(e.key)}function AV(e={}){const{focusInputOnChange:t=!0,clampValueOnBlur:n=!0,keepWithinRange:r=!0,min:o=Number.MIN_SAFE_INTEGER,max:s=Number.MAX_SAFE_INTEGER,step:l=1,isReadOnly:c,isDisabled:d,isRequired:f,isInvalid:m,pattern:h="[0-9]*(.[0-9]+)?",inputMode:g="decimal",allowMouseWheel:b,id:y,onChange:x,precision:w,name:S,"aria-describedby":j,"aria-label":_,"aria-labelledby":I,onFocus:E,onBlur:M,onInvalid:D,getAriaValueText:R,isValidCharacter:N,format:O,parse:T,...U}=e,G=gn(E),q=gn(M),Y=gn(D),Q=gn(N??DV),V=gn(R),se=ZF(e),{update:ee,increment:le,decrement:ae}=se,[ce,J]=i.useState(!1),re=!(c||d),A=i.useRef(null),L=i.useRef(null),K=i.useRef(null),ne=i.useRef(null),z=i.useCallback(ye=>ye.split("").filter(Q).join(""),[Q]),oe=i.useCallback(ye=>{var Ue;return(Ue=T==null?void 0:T(ye))!=null?Ue:ye},[T]),X=i.useCallback(ye=>{var Ue;return((Ue=O==null?void 0:O(ye))!=null?Ue:ye).toString()},[O]);ba(()=>{(se.valueAsNumber>s||se.valueAsNumber{if(!A.current)return;if(A.current.value!=se.value){const Ue=oe(A.current.value);se.setValue(z(Ue))}},[oe,z]);const Z=i.useCallback((ye=l)=>{re&&le(ye)},[le,re,l]),me=i.useCallback((ye=l)=>{re&&ae(ye)},[ae,re,l]),ve=MV(Z,me);s4(K,"disabled",ve.stop,ve.isSpinning),s4(ne,"disabled",ve.stop,ve.isSpinning);const de=i.useCallback(ye=>{if(ye.nativeEvent.isComposing)return;const st=oe(ye.currentTarget.value);ee(z(st)),L.current={start:ye.currentTarget.selectionStart,end:ye.currentTarget.selectionEnd}},[ee,z,oe]),ke=i.useCallback(ye=>{var Ue,st,mt;G==null||G(ye),L.current&&(ye.target.selectionStart=(st=L.current.start)!=null?st:(Ue=ye.currentTarget.value)==null?void 0:Ue.length,ye.currentTarget.selectionEnd=(mt=L.current.end)!=null?mt:ye.currentTarget.selectionStart)},[G]),we=i.useCallback(ye=>{if(ye.nativeEvent.isComposing)return;RV(ye,Q)||ye.preventDefault();const Ue=Re(ye)*l,st=ye.key,Pe={ArrowUp:()=>Z(Ue),ArrowDown:()=>me(Ue),Home:()=>ee(o),End:()=>ee(s)}[st];Pe&&(ye.preventDefault(),Pe(ye))},[Q,l,Z,me,ee,o,s]),Re=ye=>{let Ue=1;return(ye.metaKey||ye.ctrlKey)&&(Ue=.1),ye.shiftKey&&(Ue=10),Ue},Qe=i.useMemo(()=>{const ye=V==null?void 0:V(se.value);if(ye!=null)return ye;const Ue=se.value.toString();return Ue||void 0},[se.value,V]),$e=i.useCallback(()=>{let ye=se.value;if(se.value==="")return;/^[eE]/.test(se.value.toString())?se.setValue(""):(se.valueAsNumbers&&(ye=s),se.cast(ye))},[se,s,o]),vt=i.useCallback(()=>{J(!1),n&&$e()},[n,J,$e]),it=i.useCallback(()=>{t&&requestAnimationFrame(()=>{var ye;(ye=A.current)==null||ye.focus()})},[t]),ot=i.useCallback(ye=>{ye.preventDefault(),ve.up(),it()},[it,ve]),Ce=i.useCallback(ye=>{ye.preventDefault(),ve.down(),it()},[it,ve]);Ul(()=>A.current,"wheel",ye=>{var Ue,st;const Pe=((st=(Ue=A.current)==null?void 0:Ue.ownerDocument)!=null?st:document).activeElement===A.current;if(!b||!Pe)return;ye.preventDefault();const Ne=Re(ye)*l,kt=Math.sign(ye.deltaY);kt===-1?Z(Ne):kt===1&&me(Ne)},{passive:!1});const Me=i.useCallback((ye={},Ue=null)=>{const st=d||r&&se.isAtMax;return{...ye,ref:Et(Ue,K),role:"button",tabIndex:-1,onPointerDown:ze(ye.onPointerDown,mt=>{mt.button!==0||st||ot(mt)}),onPointerLeave:ze(ye.onPointerLeave,ve.stop),onPointerUp:ze(ye.onPointerUp,ve.stop),disabled:st,"aria-disabled":wo(st)}},[se.isAtMax,r,ot,ve.stop,d]),qe=i.useCallback((ye={},Ue=null)=>{const st=d||r&&se.isAtMin;return{...ye,ref:Et(Ue,ne),role:"button",tabIndex:-1,onPointerDown:ze(ye.onPointerDown,mt=>{mt.button!==0||st||Ce(mt)}),onPointerLeave:ze(ye.onPointerLeave,ve.stop),onPointerUp:ze(ye.onPointerUp,ve.stop),disabled:st,"aria-disabled":wo(st)}},[se.isAtMin,r,Ce,ve.stop,d]),dt=i.useCallback((ye={},Ue=null)=>{var st,mt,Pe,Ne;return{name:S,inputMode:g,type:"text",pattern:h,"aria-labelledby":I,"aria-label":_,"aria-describedby":j,id:y,disabled:d,...ye,readOnly:(st=ye.readOnly)!=null?st:c,"aria-readonly":(mt=ye.readOnly)!=null?mt:c,"aria-required":(Pe=ye.required)!=null?Pe:f,required:(Ne=ye.required)!=null?Ne:f,ref:Et(A,Ue),value:X(se.value),role:"spinbutton","aria-valuemin":o,"aria-valuemax":s,"aria-valuenow":Number.isNaN(se.valueAsNumber)?void 0:se.valueAsNumber,"aria-invalid":wo(m??se.isOutOfRange),"aria-valuetext":Qe,autoComplete:"off",autoCorrect:"off",onChange:ze(ye.onChange,de),onKeyDown:ze(ye.onKeyDown,we),onFocus:ze(ye.onFocus,ke,()=>J(!0)),onBlur:ze(ye.onBlur,q,vt)}},[S,g,h,I,_,X,j,y,d,f,c,m,se.value,se.valueAsNumber,se.isOutOfRange,o,s,Qe,de,we,ke,q,vt]);return{value:X(se.value),valueAsNumber:se.valueAsNumber,isFocused:ce,isDisabled:d,isReadOnly:c,getIncrementButtonProps:Me,getDecrementButtonProps:qe,getInputProps:dt,htmlProps:U}}var[TV,pg]=Kt({name:"NumberInputStylesContext",errorMessage:`useNumberInputStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[NV,wy]=Kt({name:"NumberInputContext",errorMessage:"useNumberInputContext: `context` is undefined. Seems you forgot to wrap number-input's components within "}),mg=_e(function(t,n){const r=Xn("NumberInput",t),o=cn(t),s=qx(o),{htmlProps:l,...c}=AV(s),d=i.useMemo(()=>c,[c]);return a.jsx(NV,{value:d,children:a.jsx(TV,{value:r,children:a.jsx(je.div,{...l,ref:n,className:et("chakra-numberinput",t.className),__css:{position:"relative",zIndex:0,...r.root}})})})});mg.displayName="NumberInput";var hg=_e(function(t,n){const r=pg();return a.jsx(je.div,{"aria-hidden":!0,ref:n,...t,__css:{display:"flex",flexDirection:"column",position:"absolute",top:"0",insetEnd:"0px",margin:"1px",height:"calc(100% - 2px)",zIndex:1,...r.stepperGroup}})});hg.displayName="NumberInputStepper";var gg=_e(function(t,n){const{getInputProps:r}=wy(),o=r(t,n),s=pg();return a.jsx(je.input,{...o,className:et("chakra-numberinput__field",t.className),__css:{width:"100%",...s.field}})});gg.displayName="NumberInputField";var f6=je("div",{baseStyle:{display:"flex",justifyContent:"center",alignItems:"center",flex:1,transitionProperty:"common",transitionDuration:"normal",userSelect:"none",cursor:"pointer",lineHeight:"normal"}}),vg=_e(function(t,n){var r;const o=pg(),{getDecrementButtonProps:s}=wy(),l=s(t,n);return a.jsx(f6,{...l,__css:o.stepper,children:(r=t.children)!=null?r:a.jsx(_V,{})})});vg.displayName="NumberDecrementStepper";var bg=_e(function(t,n){var r;const{getIncrementButtonProps:o}=wy(),s=o(t,n),l=pg();return a.jsx(f6,{...s,__css:l.stepper,children:(r=t.children)!=null?r:a.jsx(IV,{})})});bg.displayName="NumberIncrementStepper";var[$V,ii]=Kt({name:"PopoverContext",errorMessage:"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within ``"}),[LV,xg]=Kt({name:"PopoverStylesContext",errorMessage:`usePopoverStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `});function yg(e){const t=i.Children.only(e.children),{getTriggerProps:n}=ii();return i.cloneElement(t,n(t.props,t.ref))}yg.displayName="PopoverTrigger";var Hi={click:"click",hover:"hover"};function FV(e={}){const{closeOnBlur:t=!0,closeOnEsc:n=!0,initialFocusRef:r,id:o,returnFocusOnClose:s=!0,autoFocus:l=!0,arrowSize:c,arrowShadowColor:d,trigger:f=Hi.click,openDelay:m=200,closeDelay:h=200,isLazy:g,lazyBehavior:b="unmount",computePositionOnMount:y,...x}=e,{isOpen:w,onClose:S,onOpen:j,onToggle:_}=yy(e),I=i.useRef(null),E=i.useRef(null),M=i.useRef(null),D=i.useRef(!1),R=i.useRef(!1);w&&(R.current=!0);const[N,O]=i.useState(!1),[T,U]=i.useState(!1),G=i.useId(),q=o??G,[Y,Q,V,se]=["popover-trigger","popover-content","popover-header","popover-body"].map(de=>`${de}-${q}`),{referenceRef:ee,getArrowProps:le,getPopperProps:ae,getArrowInnerProps:ce,forceUpdate:J}=xy({...x,enabled:w||!!y}),re=Z5({isOpen:w,ref:M});G3({enabled:w,ref:E}),B5(M,{focusRef:E,visible:w,shouldFocus:s&&f===Hi.click}),KB(M,{focusRef:r,visible:w,shouldFocus:l&&f===Hi.click});const A=Cy({wasSelected:R.current,enabled:g,mode:b,isSelected:re.present}),L=i.useCallback((de={},ke=null)=>{const we={...de,style:{...de.style,transformOrigin:Fn.transformOrigin.varRef,[Fn.arrowSize.var]:c?`${c}px`:void 0,[Fn.arrowShadowColor.var]:d},ref:Et(M,ke),children:A?de.children:null,id:Q,tabIndex:-1,role:"dialog",onKeyDown:ze(de.onKeyDown,Re=>{n&&Re.key==="Escape"&&S()}),onBlur:ze(de.onBlur,Re=>{const Qe=l4(Re),$e=qv(M.current,Qe),vt=qv(E.current,Qe);w&&t&&(!$e&&!vt)&&S()}),"aria-labelledby":N?V:void 0,"aria-describedby":T?se:void 0};return f===Hi.hover&&(we.role="tooltip",we.onMouseEnter=ze(de.onMouseEnter,()=>{D.current=!0}),we.onMouseLeave=ze(de.onMouseLeave,Re=>{Re.nativeEvent.relatedTarget!==null&&(D.current=!1,setTimeout(()=>S(),h))})),we},[A,Q,N,V,T,se,f,n,S,w,t,h,d,c]),K=i.useCallback((de={},ke=null)=>ae({...de,style:{visibility:w?"visible":"hidden",...de.style}},ke),[w,ae]),ne=i.useCallback((de,ke=null)=>({...de,ref:Et(ke,I,ee)}),[I,ee]),z=i.useRef(),oe=i.useRef(),X=i.useCallback(de=>{I.current==null&&ee(de)},[ee]),Z=i.useCallback((de={},ke=null)=>{const we={...de,ref:Et(E,ke,X),id:Y,"aria-haspopup":"dialog","aria-expanded":w,"aria-controls":Q};return f===Hi.click&&(we.onClick=ze(de.onClick,_)),f===Hi.hover&&(we.onFocus=ze(de.onFocus,()=>{z.current===void 0&&j()}),we.onBlur=ze(de.onBlur,Re=>{const Qe=l4(Re),$e=!qv(M.current,Qe);w&&t&&$e&&S()}),we.onKeyDown=ze(de.onKeyDown,Re=>{Re.key==="Escape"&&S()}),we.onMouseEnter=ze(de.onMouseEnter,()=>{D.current=!0,z.current=window.setTimeout(()=>j(),m)}),we.onMouseLeave=ze(de.onMouseLeave,()=>{D.current=!1,z.current&&(clearTimeout(z.current),z.current=void 0),oe.current=window.setTimeout(()=>{D.current===!1&&S()},h)})),we},[Y,w,Q,f,X,_,j,t,S,m,h]);i.useEffect(()=>()=>{z.current&&clearTimeout(z.current),oe.current&&clearTimeout(oe.current)},[]);const me=i.useCallback((de={},ke=null)=>({...de,id:V,ref:Et(ke,we=>{O(!!we)})}),[V]),ve=i.useCallback((de={},ke=null)=>({...de,id:se,ref:Et(ke,we=>{U(!!we)})}),[se]);return{forceUpdate:J,isOpen:w,onAnimationComplete:re.onComplete,onClose:S,getAnchorProps:ne,getArrowProps:le,getArrowInnerProps:ce,getPopoverPositionerProps:K,getPopoverProps:L,getTriggerProps:Z,getHeaderProps:me,getBodyProps:ve}}function qv(e,t){return e===t||(e==null?void 0:e.contains(t))}function l4(e){var t;const n=e.currentTarget.ownerDocument.activeElement;return(t=e.relatedTarget)!=null?t:n}function lf(e){const t=Xn("Popover",e),{children:n,...r}=cn(e),o=Hd(),s=FV({...r,direction:o.direction});return a.jsx($V,{value:s,children:a.jsx(LV,{value:t,children:bx(n,{isOpen:s.isOpen,onClose:s.onClose,forceUpdate:s.forceUpdate})})})}lf.displayName="Popover";function p6(e){const t=i.Children.only(e.children),{getAnchorProps:n}=ii();return i.cloneElement(t,n(t.props,t.ref))}p6.displayName="PopoverAnchor";var Xv=(e,t)=>t?`${e}.${t}, ${t}`:void 0;function m6(e){var t;const{bg:n,bgColor:r,backgroundColor:o,shadow:s,boxShadow:l,shadowColor:c}=e,{getArrowProps:d,getArrowInnerProps:f}=ii(),m=xg(),h=(t=n??r)!=null?t:o,g=s??l;return a.jsx(je.div,{...d(),className:"chakra-popover__arrow-positioner",children:a.jsx(je.div,{className:et("chakra-popover__arrow",e.className),...f(e),__css:{"--popper-arrow-shadow-color":Xv("colors",c),"--popper-arrow-bg":Xv("colors",h),"--popper-arrow-shadow":Xv("shadows",g),...m.arrow}})})}m6.displayName="PopoverArrow";var Cg=_e(function(t,n){const{getBodyProps:r}=ii(),o=xg();return a.jsx(je.div,{...r(t,n),className:et("chakra-popover__body",t.className),__css:o.body})});Cg.displayName="PopoverBody";var h6=_e(function(t,n){const{onClose:r}=ii(),o=xg();return a.jsx(bI,{size:"sm",onClick:r,className:et("chakra-popover__close-btn",t.className),__css:o.closeButton,ref:n,...t})});h6.displayName="PopoverCloseButton";function zV(e){if(e)return{enter:{...e.enter,visibility:"visible"},exit:{...e.exit,transitionEnd:{visibility:"hidden"}}}}var BV={exit:{opacity:0,scale:.95,transition:{duration:.1,ease:[.4,0,1,1]}},enter:{scale:1,opacity:1,transition:{duration:.15,ease:[0,0,.2,1]}}},HV=je(Mn.section),g6=_e(function(t,n){const{variants:r=BV,...o}=t,{isOpen:s}=ii();return a.jsx(HV,{ref:n,variants:zV(r),initial:!1,animate:s?"enter":"exit",...o})});g6.displayName="PopoverTransition";var cf=_e(function(t,n){const{rootProps:r,motionProps:o,...s}=t,{getPopoverProps:l,getPopoverPositionerProps:c,onAnimationComplete:d}=ii(),f=xg(),m={position:"relative",display:"flex",flexDirection:"column",...f.content};return a.jsx(je.div,{...c(r),__css:f.popper,className:"chakra-popover__popper",children:a.jsx(g6,{...o,...l(s,n),onAnimationComplete:Uh(d,s.onAnimationComplete),className:et("chakra-popover__content",t.className),__css:m})})});cf.displayName="PopoverContent";var mb=e=>a.jsx(je.circle,{cx:50,cy:50,r:42,fill:"transparent",...e});mb.displayName="Circle";function WV(e,t,n){return(e-t)*100/(n-t)}var VV=xa({"0%":{strokeDasharray:"1, 400",strokeDashoffset:"0"},"50%":{strokeDasharray:"400, 400",strokeDashoffset:"-100"},"100%":{strokeDasharray:"400, 400",strokeDashoffset:"-260"}}),UV=xa({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),GV=xa({"0%":{left:"-40%"},"100%":{left:"100%"}}),KV=xa({from:{backgroundPosition:"1rem 0"},to:{backgroundPosition:"0 0"}});function v6(e){const{value:t=0,min:n,max:r,valueText:o,getValueText:s,isIndeterminate:l,role:c="progressbar"}=e,d=WV(t,n,r);return{bind:{"data-indeterminate":l?"":void 0,"aria-valuemax":r,"aria-valuemin":n,"aria-valuenow":l?void 0:t,"aria-valuetext":(()=>{if(t!=null)return typeof s=="function"?s(t,d):o})(),role:c},percent:d,value:t}}var b6=e=>{const{size:t,isIndeterminate:n,...r}=e;return a.jsx(je.svg,{viewBox:"0 0 100 100",__css:{width:t,height:t,animation:n?`${UV} 2s linear infinite`:void 0},...r})};b6.displayName="Shape";var hb=_e((e,t)=>{var n;const{size:r="48px",max:o=100,min:s=0,valueText:l,getValueText:c,value:d,capIsRound:f,children:m,thickness:h="10px",color:g="#0078d4",trackColor:b="#edebe9",isIndeterminate:y,...x}=e,w=v6({min:s,max:o,value:d,valueText:l,getValueText:c,isIndeterminate:y}),S=y?void 0:((n=w.percent)!=null?n:0)*2.64,j=S==null?void 0:`${S} ${264-S}`,_=y?{css:{animation:`${VV} 1.5s linear infinite`}}:{strokeDashoffset:66,strokeDasharray:j,transitionProperty:"stroke-dasharray, stroke",transitionDuration:"0.6s",transitionTimingFunction:"ease"},I={display:"inline-block",position:"relative",verticalAlign:"middle",fontSize:r};return a.jsxs(je.div,{ref:t,className:"chakra-progress",...w.bind,...x,__css:I,children:[a.jsxs(b6,{size:r,isIndeterminate:y,children:[a.jsx(mb,{stroke:b,strokeWidth:h,className:"chakra-progress__track"}),a.jsx(mb,{stroke:g,strokeWidth:h,className:"chakra-progress__indicator",strokeLinecap:f?"round":void 0,opacity:w.value===0&&!y?0:void 0,..._})]}),m]})});hb.displayName="CircularProgress";var[qV,XV]=Kt({name:"ProgressStylesContext",errorMessage:`useProgressStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),QV=_e((e,t)=>{const{min:n,max:r,value:o,isIndeterminate:s,role:l,...c}=e,d=v6({value:o,min:n,max:r,isIndeterminate:s,role:l}),m={height:"100%",...XV().filledTrack};return a.jsx(je.div,{ref:t,style:{width:`${d.percent}%`,...c.style},...d.bind,...c,__css:m})}),x6=_e((e,t)=>{var n;const{value:r,min:o=0,max:s=100,hasStripe:l,isAnimated:c,children:d,borderRadius:f,isIndeterminate:m,"aria-label":h,"aria-labelledby":g,"aria-valuetext":b,title:y,role:x,...w}=cn(e),S=Xn("Progress",e),j=f??((n=S.track)==null?void 0:n.borderRadius),_={animation:`${KV} 1s linear infinite`},M={...!m&&l&&c&&_,...m&&{position:"absolute",willChange:"left",minWidth:"50%",animation:`${GV} 1s ease infinite normal none running`}},D={overflow:"hidden",position:"relative",...S.track};return a.jsx(je.div,{ref:t,borderRadius:j,__css:D,...w,children:a.jsxs(qV,{value:S,children:[a.jsx(QV,{"aria-label":h,"aria-labelledby":g,"aria-valuetext":b,min:o,max:s,value:r,isIndeterminate:m,css:M,borderRadius:j,title:y,role:x}),d]})})});x6.displayName="Progress";function YV(e){return e&&T1(e)&&T1(e.target)}function ZV(e={}){const{onChange:t,value:n,defaultValue:r,name:o,isDisabled:s,isFocusable:l,isNative:c,...d}=e,[f,m]=i.useState(r||""),h=typeof n<"u",g=h?n:f,b=i.useRef(null),y=i.useCallback(()=>{const E=b.current;if(!E)return;let M="input:not(:disabled):checked";const D=E.querySelector(M);if(D){D.focus();return}M="input:not(:disabled)";const R=E.querySelector(M);R==null||R.focus()},[]),w=`radio-${i.useId()}`,S=o||w,j=i.useCallback(E=>{const M=YV(E)?E.target.value:E;h||m(M),t==null||t(String(M))},[t,h]),_=i.useCallback((E={},M=null)=>({...E,ref:Et(M,b),role:"radiogroup"}),[]),I=i.useCallback((E={},M=null)=>({...E,ref:M,name:S,[c?"checked":"isChecked"]:g!=null?E.value===g:void 0,onChange(R){j(R)},"data-radiogroup":!0}),[c,S,j,g]);return{getRootProps:_,getRadioProps:I,name:S,ref:b,focus:y,setValue:m,value:g,onChange:j,isDisabled:s,isFocusable:l,htmlProps:d}}var[JV,y6]=Kt({name:"RadioGroupContext",strict:!1}),$m=_e((e,t)=>{const{colorScheme:n,size:r,variant:o,children:s,className:l,isDisabled:c,isFocusable:d,...f}=e,{value:m,onChange:h,getRootProps:g,name:b,htmlProps:y}=ZV(f),x=i.useMemo(()=>({name:b,size:r,onChange:h,colorScheme:n,value:m,variant:o,isDisabled:c,isFocusable:d}),[b,r,h,n,m,o,c,d]);return a.jsx(JV,{value:x,children:a.jsx(je.div,{...g(y,t),className:et("chakra-radio-group",l),children:s})})});$m.displayName="RadioGroup";var eU={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"};function tU(e={}){const{defaultChecked:t,isChecked:n,isFocusable:r,isDisabled:o,isReadOnly:s,isRequired:l,onChange:c,isInvalid:d,name:f,value:m,id:h,"data-radiogroup":g,"aria-describedby":b,...y}=e,x=`radio-${i.useId()}`,w=Qd(),j=!!y6()||!!g;let I=!!w&&!j?w.id:x;I=h??I;const E=o??(w==null?void 0:w.isDisabled),M=s??(w==null?void 0:w.isReadOnly),D=l??(w==null?void 0:w.isRequired),R=d??(w==null?void 0:w.isInvalid),[N,O]=i.useState(!1),[T,U]=i.useState(!1),[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),[V,se]=i.useState(!!t),ee=typeof n<"u",le=ee?n:V;i.useEffect(()=>F3(O),[]);const ae=i.useCallback(X=>{if(M||E){X.preventDefault();return}ee||se(X.target.checked),c==null||c(X)},[ee,E,M,c]),ce=i.useCallback(X=>{X.key===" "&&Q(!0)},[Q]),J=i.useCallback(X=>{X.key===" "&&Q(!1)},[Q]),re=i.useCallback((X={},Z=null)=>({...X,ref:Z,"data-active":ut(Y),"data-hover":ut(G),"data-disabled":ut(E),"data-invalid":ut(R),"data-checked":ut(le),"data-focus":ut(T),"data-focus-visible":ut(T&&N),"data-readonly":ut(M),"aria-hidden":!0,onMouseDown:ze(X.onMouseDown,()=>Q(!0)),onMouseUp:ze(X.onMouseUp,()=>Q(!1)),onMouseEnter:ze(X.onMouseEnter,()=>q(!0)),onMouseLeave:ze(X.onMouseLeave,()=>q(!1))}),[Y,G,E,R,le,T,M,N]),{onFocus:A,onBlur:L}=w??{},K=i.useCallback((X={},Z=null)=>{const me=E&&!r;return{...X,id:I,ref:Z,type:"radio",name:f,value:m,onChange:ze(X.onChange,ae),onBlur:ze(L,X.onBlur,()=>U(!1)),onFocus:ze(A,X.onFocus,()=>U(!0)),onKeyDown:ze(X.onKeyDown,ce),onKeyUp:ze(X.onKeyUp,J),checked:le,disabled:me,readOnly:M,required:D,"aria-invalid":wo(R),"aria-disabled":wo(me),"aria-required":wo(D),"data-readonly":ut(M),"aria-describedby":b,style:eU}},[E,r,I,f,m,ae,L,A,ce,J,le,M,D,R,b]);return{state:{isInvalid:R,isFocused:T,isChecked:le,isActive:Y,isHovered:G,isDisabled:E,isReadOnly:M,isRequired:D},getCheckboxProps:re,getRadioProps:re,getInputProps:K,getLabelProps:(X={},Z=null)=>({...X,ref:Z,onMouseDown:ze(X.onMouseDown,nU),"data-disabled":ut(E),"data-checked":ut(le),"data-invalid":ut(R)}),getRootProps:(X,Z=null)=>({...X,ref:Z,"data-disabled":ut(E),"data-checked":ut(le),"data-invalid":ut(R)}),htmlProps:y}}function nU(e){e.preventDefault(),e.stopPropagation()}function rU(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var Ys=_e((e,t)=>{var n;const r=y6(),{onChange:o,value:s}=e,l=Xn("Radio",{...r,...e}),c=cn(e),{spacing:d="0.5rem",children:f,isDisabled:m=r==null?void 0:r.isDisabled,isFocusable:h=r==null?void 0:r.isFocusable,inputProps:g,...b}=c;let y=e.isChecked;(r==null?void 0:r.value)!=null&&s!=null&&(y=r.value===s);let x=o;r!=null&&r.onChange&&s!=null&&(x=Uh(r.onChange,o));const w=(n=e==null?void 0:e.name)!=null?n:r==null?void 0:r.name,{getInputProps:S,getCheckboxProps:j,getLabelProps:_,getRootProps:I,htmlProps:E}=tU({...b,isChecked:y,isFocusable:h,isDisabled:m,onChange:x,name:w}),[M,D]=rU(E,xI),R=j(D),N=S(g,t),O=_(),T=Object.assign({},M,I()),U={display:"inline-flex",alignItems:"center",verticalAlign:"top",cursor:"pointer",position:"relative",...l.container},G={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,...l.control},q={userSelect:"none",marginStart:d,...l.label};return a.jsxs(je.label,{className:"chakra-radio",...T,__css:U,children:[a.jsx("input",{className:"chakra-radio__input",...N}),a.jsx(je.span,{className:"chakra-radio__control",...R,__css:G}),f&&a.jsx(je.span,{className:"chakra-radio__label",...O,__css:q,children:f})]})});Ys.displayName="Radio";var C6=_e(function(t,n){const{children:r,placeholder:o,className:s,...l}=t;return a.jsxs(je.select,{...l,ref:n,className:et("chakra-select",s),children:[o&&a.jsx("option",{value:"",children:o}),r]})});C6.displayName="SelectField";function oU(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var w6=_e((e,t)=>{var n;const r=Xn("Select",e),{rootProps:o,placeholder:s,icon:l,color:c,height:d,h:f,minH:m,minHeight:h,iconColor:g,iconSize:b,...y}=cn(e),[x,w]=oU(y,xI),S=Kx(w),j={width:"100%",height:"fit-content",position:"relative",color:c},_={paddingEnd:"2rem",...r.field,_focus:{zIndex:"unset",...(n=r.field)==null?void 0:n._focus}};return a.jsxs(je.div,{className:"chakra-select__wrapper",__css:j,...x,...o,children:[a.jsx(C6,{ref:t,height:f??d,minH:m??h,placeholder:s,...S,__css:_,children:e.children}),a.jsx(S6,{"data-disabled":ut(S.disabled),...(g||c)&&{color:g||c},__css:r.icon,...b&&{fontSize:b},children:l})]})});w6.displayName="Select";var sU=e=>a.jsx("svg",{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})}),aU=je("div",{baseStyle:{position:"absolute",display:"inline-flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",top:"50%",transform:"translateY(-50%)"}}),S6=e=>{const{children:t=a.jsx(sU,{}),...n}=e,r=i.cloneElement(t,{role:"presentation",className:"chakra-select__icon",focusable:!1,"aria-hidden":!0,style:{width:"1em",height:"1em",color:"currentColor"}});return a.jsx(aU,{...n,className:"chakra-select__icon-wrapper",children:i.isValidElement(t)?r:null})};S6.displayName="SelectIcon";function lU(){const e=i.useRef(!0);return i.useEffect(()=>{e.current=!1},[]),e.current}function iU(e){const t=i.useRef();return i.useEffect(()=>{t.current=e},[e]),t.current}var cU=je("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),gb=yI("skeleton-start-color"),vb=yI("skeleton-end-color"),uU=xa({from:{opacity:0},to:{opacity:1}}),dU=xa({from:{borderColor:gb.reference,background:gb.reference},to:{borderColor:vb.reference,background:vb.reference}}),wg=_e((e,t)=>{const n={...e,fadeDuration:typeof e.fadeDuration=="number"?e.fadeDuration:.4,speed:typeof e.speed=="number"?e.speed:.8},r=ml("Skeleton",n),o=lU(),{startColor:s="",endColor:l="",isLoaded:c,fadeDuration:d,speed:f,className:m,fitContent:h,...g}=cn(n),[b,y]=Zo("colors",[s,l]),x=iU(c),w=et("chakra-skeleton",m),S={...b&&{[gb.variable]:b},...y&&{[vb.variable]:y}};if(c){const j=o||x?"none":`${uU} ${d}s`;return a.jsx(je.div,{ref:t,className:w,__css:{animation:j},...g})}return a.jsx(cU,{ref:t,className:w,...g,__css:{width:h?"fit-content":void 0,...r,...S,_dark:{...r._dark,...S},animation:`${f}s linear infinite alternate ${dU}`}})});wg.displayName="Skeleton";var bo=e=>e?"":void 0,bc=e=>e?!0:void 0,vl=(...e)=>e.filter(Boolean).join(" ");function xc(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function fU(e){return{root:`slider-root-${e}`,getThumb:t=>`slider-thumb-${e}-${t}`,getInput:t=>`slider-input-${e}-${t}`,track:`slider-track-${e}`,innerTrack:`slider-filled-track-${e}`,getMarker:t=>`slider-marker-${e}-${t}`,output:`slider-output-${e}`}}function Qu(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}var cm={width:0,height:0},Mp=e=>e||cm;function k6(e){const{orientation:t,thumbPercents:n,thumbRects:r,isReversed:o}=e,s=x=>{var w;const S=(w=r[x])!=null?w:cm;return{position:"absolute",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",touchAction:"none",...Qu({orientation:t,vertical:{bottom:`calc(${n[x]}% - ${S.height/2}px)`},horizontal:{left:`calc(${n[x]}% - ${S.width/2}px)`}})}},l=t==="vertical"?r.reduce((x,w)=>Mp(x).height>Mp(w).height?x:w,cm):r.reduce((x,w)=>Mp(x).width>Mp(w).width?x:w,cm),c={position:"relative",touchAction:"none",WebkitTapHighlightColor:"rgba(0,0,0,0)",userSelect:"none",outline:0,...Qu({orientation:t,vertical:l?{paddingLeft:l.width/2,paddingRight:l.width/2}:{},horizontal:l?{paddingTop:l.height/2,paddingBottom:l.height/2}:{}})},d={position:"absolute",...Qu({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",height:"100%"},horizontal:{top:"50%",transform:"translateY(-50%)",width:"100%"}})},f=n.length===1,m=[0,o?100-n[0]:n[0]],h=f?m:n;let g=h[0];!f&&o&&(g=100-g);const b=Math.abs(h[h.length-1]-h[0]),y={...d,...Qu({orientation:t,vertical:o?{height:`${b}%`,top:`${g}%`}:{height:`${b}%`,bottom:`${g}%`},horizontal:o?{width:`${b}%`,right:`${g}%`}:{width:`${b}%`,left:`${g}%`}})};return{trackStyle:d,innerTrackStyle:y,rootStyle:c,getThumbStyle:s}}function j6(e){const{isReversed:t,direction:n,orientation:r}=e;return n==="ltr"||r==="vertical"?t:!t}function pU(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function mU(e){const t=gU(e);return typeof t.PointerEvent<"u"&&e instanceof t.PointerEvent?e.pointerType==="mouse":e instanceof t.MouseEvent}function _6(e){return!!e.touches}function hU(e){return _6(e)&&e.touches.length>1}function gU(e){var t;return(t=e.view)!=null?t:window}function vU(e,t="page"){const n=e.touches[0]||e.changedTouches[0];return{x:n[`${t}X`],y:n[`${t}Y`]}}function bU(e,t="page"){return{x:e[`${t}X`],y:e[`${t}Y`]}}function I6(e,t="page"){return _6(e)?vU(e,t):bU(e,t)}function xU(e){return t=>{const n=mU(t);(!n||n&&t.button===0)&&e(t)}}function yU(e,t=!1){function n(o){e(o,{point:I6(o)})}return t?xU(n):n}function um(e,t,n,r){return pU(e,t,yU(n,t==="pointerdown"),r)}var CU=Object.defineProperty,wU=(e,t,n)=>t in e?CU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ko=(e,t,n)=>(wU(e,typeof t!="symbol"?t+"":t,n),n),SU=class{constructor(e,t,n){Ko(this,"history",[]),Ko(this,"startEvent",null),Ko(this,"lastEvent",null),Ko(this,"lastEventInfo",null),Ko(this,"handlers",{}),Ko(this,"removeListeners",()=>{}),Ko(this,"threshold",3),Ko(this,"win"),Ko(this,"updatePoint",()=>{if(!(this.lastEvent&&this.lastEventInfo))return;const c=Qv(this.lastEventInfo,this.history),d=this.startEvent!==null,f=IU(c.offset,{x:0,y:0})>=this.threshold;if(!d&&!f)return;const{timestamp:m}=SS();this.history.push({...c.point,timestamp:m});const{onStart:h,onMove:g}=this.handlers;d||(h==null||h(this.lastEvent,c),this.startEvent=this.lastEvent),g==null||g(this.lastEvent,c)}),Ko(this,"onPointerMove",(c,d)=>{this.lastEvent=c,this.lastEventInfo=d,WL.update(this.updatePoint,!0)}),Ko(this,"onPointerUp",(c,d)=>{const f=Qv(d,this.history),{onEnd:m,onSessionEnd:h}=this.handlers;h==null||h(c,f),this.end(),!(!m||!this.startEvent)&&(m==null||m(c,f))});var r;if(this.win=(r=e.view)!=null?r:window,hU(e))return;this.handlers=t,n&&(this.threshold=n),e.stopPropagation(),e.preventDefault();const o={point:I6(e)},{timestamp:s}=SS();this.history=[{...o.point,timestamp:s}];const{onSessionStart:l}=t;l==null||l(e,Qv(o,this.history)),this.removeListeners=_U(um(this.win,"pointermove",this.onPointerMove),um(this.win,"pointerup",this.onPointerUp),um(this.win,"pointercancel",this.onPointerUp))}updateHandlers(e){this.handlers=e}end(){var e;(e=this.removeListeners)==null||e.call(this),VL.update(this.updatePoint)}};function i4(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Qv(e,t){return{point:e.point,delta:i4(e.point,t[t.length-1]),offset:i4(e.point,t[0]),velocity:jU(t,.1)}}var kU=e=>e*1e3;function jU(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const o=e[e.length-1];for(;n>=0&&(r=e[n],!(o.timestamp-r.timestamp>kU(t)));)n--;if(!r)return{x:0,y:0};const s=(o.timestamp-r.timestamp)/1e3;if(s===0)return{x:0,y:0};const l={x:(o.x-r.x)/s,y:(o.y-r.y)/s};return l.x===1/0&&(l.x=0),l.y===1/0&&(l.y=0),l}function _U(...e){return t=>e.reduce((n,r)=>r(n),t)}function Yv(e,t){return Math.abs(e-t)}function c4(e){return"x"in e&&"y"in e}function IU(e,t){if(typeof e=="number"&&typeof t=="number")return Yv(e,t);if(c4(e)&&c4(t)){const n=Yv(e.x,t.x),r=Yv(e.y,t.y);return Math.sqrt(n**2+r**2)}return 0}function P6(e){const t=i.useRef(null);return t.current=e,t}function E6(e,t){const{onPan:n,onPanStart:r,onPanEnd:o,onPanSessionStart:s,onPanSessionEnd:l,threshold:c}=t,d=!!(n||r||o||s||l),f=i.useRef(null),m=P6({onSessionStart:s,onSessionEnd:l,onStart:r,onMove:n,onEnd(h,g){f.current=null,o==null||o(h,g)}});i.useEffect(()=>{var h;(h=f.current)==null||h.updateHandlers(m.current)}),i.useEffect(()=>{const h=e.current;if(!h||!d)return;function g(b){f.current=new SU(b,m.current,c)}return um(h,"pointerdown",g)},[e,d,m,c]),i.useEffect(()=>()=>{var h;(h=f.current)==null||h.end(),f.current=null},[])}function PU(e,t){if(!e){t(void 0);return}t({width:e.offsetWidth,height:e.offsetHeight});const n=e.ownerDocument.defaultView??window,r=new n.ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const[s]=o;let l,c;if("borderBoxSize"in s){const d=s.borderBoxSize,f=Array.isArray(d)?d[0]:d;l=f.inlineSize,c=f.blockSize}else l=e.offsetWidth,c=e.offsetHeight;t({width:l,height:c})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}var EU=globalThis!=null&&globalThis.document?i.useLayoutEffect:i.useEffect;function MU(e,t){var n,r;if(!e||!e.parentElement)return;const o=(r=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?r:window,s=new o.MutationObserver(()=>{t()});return s.observe(e.parentElement,{childList:!0}),()=>{s.disconnect()}}function M6({getNodes:e,observeMutation:t=!0}){const[n,r]=i.useState([]),[o,s]=i.useState(0);return EU(()=>{const l=e(),c=l.map((d,f)=>PU(d,m=>{r(h=>[...h.slice(0,f),m,...h.slice(f+1)])}));if(t){const d=l[0];c.push(MU(d,()=>{s(f=>f+1)}))}return()=>{c.forEach(d=>{d==null||d()})}},[o]),n}function OU(e){return typeof e=="object"&&e!==null&&"current"in e}function DU(e){const[t]=M6({observeMutation:!1,getNodes(){return[OU(e)?e.current:e]}});return t}function RU(e){const{min:t=0,max:n=100,onChange:r,value:o,defaultValue:s,isReversed:l,direction:c="ltr",orientation:d="horizontal",id:f,isDisabled:m,isReadOnly:h,onChangeStart:g,onChangeEnd:b,step:y=1,getAriaValueText:x,"aria-valuetext":w,"aria-label":S,"aria-labelledby":j,name:_,focusThumbOnChange:I=!0,minStepsBetweenThumbs:E=0,...M}=e,D=gn(g),R=gn(b),N=gn(x),O=j6({isReversed:l,direction:c,orientation:d}),[T,U]=qd({value:o,defaultValue:s??[25,75],onChange:r});if(!Array.isArray(T))throw new TypeError(`[range-slider] You passed an invalid value for \`value\` or \`defaultValue\`, expected \`Array\` but got \`${typeof T}\``);const[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),[V,se]=i.useState(-1),ee=!(m||h),le=i.useRef(T),ae=T.map(Se=>mc(Se,t,n)),ce=E*y,J=AU(ae,t,n,ce),re=i.useRef({eventSource:null,value:[],valueBounds:[]});re.current.value=ae,re.current.valueBounds=J;const A=ae.map(Se=>n-Se+t),K=(O?A:ae).map(Se=>Dm(Se,t,n)),ne=d==="vertical",z=i.useRef(null),oe=i.useRef(null),X=M6({getNodes(){const Se=oe.current,Ve=Se==null?void 0:Se.querySelectorAll("[role=slider]");return Ve?Array.from(Ve):[]}}),Z=i.useId(),ve=fU(f??Z),de=i.useCallback(Se=>{var Ve,Ge;if(!z.current)return;re.current.eventSource="pointer";const Le=z.current.getBoundingClientRect(),{clientX:bt,clientY:fn}=(Ge=(Ve=Se.touches)==null?void 0:Ve[0])!=null?Ge:Se,Bt=ne?Le.bottom-fn:bt-Le.left,Ht=ne?Le.height:Le.width;let zn=Bt/Ht;return O&&(zn=1-zn),B3(zn,t,n)},[ne,O,n,t]),ke=(n-t)/10,we=y||(n-t)/100,Re=i.useMemo(()=>({setValueAtIndex(Se,Ve){if(!ee)return;const Ge=re.current.valueBounds[Se];Ve=parseFloat(nb(Ve,Ge.min,we)),Ve=mc(Ve,Ge.min,Ge.max);const Le=[...re.current.value];Le[Se]=Ve,U(Le)},setActiveIndex:se,stepUp(Se,Ve=we){const Ge=re.current.value[Se],Le=O?Ge-Ve:Ge+Ve;Re.setValueAtIndex(Se,Le)},stepDown(Se,Ve=we){const Ge=re.current.value[Se],Le=O?Ge+Ve:Ge-Ve;Re.setValueAtIndex(Se,Le)},reset(){U(le.current)}}),[we,O,U,ee]),Qe=i.useCallback(Se=>{const Ve=Se.key,Le={ArrowRight:()=>Re.stepUp(V),ArrowUp:()=>Re.stepUp(V),ArrowLeft:()=>Re.stepDown(V),ArrowDown:()=>Re.stepDown(V),PageUp:()=>Re.stepUp(V,ke),PageDown:()=>Re.stepDown(V,ke),Home:()=>{const{min:bt}=J[V];Re.setValueAtIndex(V,bt)},End:()=>{const{max:bt}=J[V];Re.setValueAtIndex(V,bt)}}[Ve];Le&&(Se.preventDefault(),Se.stopPropagation(),Le(Se),re.current.eventSource="keyboard")},[Re,V,ke,J]),{getThumbStyle:$e,rootStyle:vt,trackStyle:it,innerTrackStyle:ot}=i.useMemo(()=>k6({isReversed:O,orientation:d,thumbRects:X,thumbPercents:K}),[O,d,K,X]),Ce=i.useCallback(Se=>{var Ve;const Ge=Se??V;if(Ge!==-1&&I){const Le=ve.getThumb(Ge),bt=(Ve=oe.current)==null?void 0:Ve.ownerDocument.getElementById(Le);bt&&setTimeout(()=>bt.focus())}},[I,V,ve]);ba(()=>{re.current.eventSource==="keyboard"&&(R==null||R(re.current.value))},[ae,R]);const Me=Se=>{const Ve=de(Se)||0,Ge=re.current.value.map(Ht=>Math.abs(Ht-Ve)),Le=Math.min(...Ge);let bt=Ge.indexOf(Le);const fn=Ge.filter(Ht=>Ht===Le);fn.length>1&&Ve>re.current.value[bt]&&(bt=bt+fn.length-1),se(bt),Re.setValueAtIndex(bt,Ve),Ce(bt)},qe=Se=>{if(V==-1)return;const Ve=de(Se)||0;se(V),Re.setValueAtIndex(V,Ve),Ce(V)};E6(oe,{onPanSessionStart(Se){ee&&(q(!0),Me(Se),D==null||D(re.current.value))},onPanSessionEnd(){ee&&(q(!1),R==null||R(re.current.value))},onPan(Se){ee&&qe(Se)}});const dt=i.useCallback((Se={},Ve=null)=>({...Se,...M,id:ve.root,ref:Et(Ve,oe),tabIndex:-1,"aria-disabled":bc(m),"data-focused":bo(Y),style:{...Se.style,...vt}}),[M,m,Y,vt,ve]),ye=i.useCallback((Se={},Ve=null)=>({...Se,ref:Et(Ve,z),id:ve.track,"data-disabled":bo(m),style:{...Se.style,...it}}),[m,it,ve]),Ue=i.useCallback((Se={},Ve=null)=>({...Se,ref:Ve,id:ve.innerTrack,style:{...Se.style,...ot}}),[ot,ve]),st=i.useCallback((Se,Ve=null)=>{var Ge;const{index:Le,...bt}=Se,fn=ae[Le];if(fn==null)throw new TypeError(`[range-slider > thumb] Cannot find value at index \`${Le}\`. The \`value\` or \`defaultValue\` length is : ${ae.length}`);const Bt=J[Le];return{...bt,ref:Ve,role:"slider",tabIndex:ee?0:void 0,id:ve.getThumb(Le),"data-active":bo(G&&V===Le),"aria-valuetext":(Ge=N==null?void 0:N(fn))!=null?Ge:w==null?void 0:w[Le],"aria-valuemin":Bt.min,"aria-valuemax":Bt.max,"aria-valuenow":fn,"aria-orientation":d,"aria-disabled":bc(m),"aria-readonly":bc(h),"aria-label":S==null?void 0:S[Le],"aria-labelledby":S!=null&&S[Le]||j==null?void 0:j[Le],style:{...Se.style,...$e(Le)},onKeyDown:xc(Se.onKeyDown,Qe),onFocus:xc(Se.onFocus,()=>{Q(!0),se(Le)}),onBlur:xc(Se.onBlur,()=>{Q(!1),se(-1)})}},[ve,ae,J,ee,G,V,N,w,d,m,h,S,j,$e,Qe,Q]),mt=i.useCallback((Se={},Ve=null)=>({...Se,ref:Ve,id:ve.output,htmlFor:ae.map((Ge,Le)=>ve.getThumb(Le)).join(" "),"aria-live":"off"}),[ve,ae]),Pe=i.useCallback((Se,Ve=null)=>{const{value:Ge,...Le}=Se,bt=!(Gen),fn=Ge>=ae[0]&&Ge<=ae[ae.length-1];let Bt=Dm(Ge,t,n);Bt=O?100-Bt:Bt;const Ht={position:"absolute",pointerEvents:"none",...Qu({orientation:d,vertical:{bottom:`${Bt}%`},horizontal:{left:`${Bt}%`}})};return{...Le,ref:Ve,id:ve.getMarker(Se.value),role:"presentation","aria-hidden":!0,"data-disabled":bo(m),"data-invalid":bo(!bt),"data-highlighted":bo(fn),style:{...Se.style,...Ht}}},[m,O,n,t,d,ae,ve]),Ne=i.useCallback((Se,Ve=null)=>{const{index:Ge,...Le}=Se;return{...Le,ref:Ve,id:ve.getInput(Ge),type:"hidden",value:ae[Ge],name:Array.isArray(_)?_[Ge]:`${_}-${Ge}`}},[_,ae,ve]);return{state:{value:ae,isFocused:Y,isDragging:G,getThumbPercent:Se=>K[Se],getThumbMinValue:Se=>J[Se].min,getThumbMaxValue:Se=>J[Se].max},actions:Re,getRootProps:dt,getTrackProps:ye,getInnerTrackProps:Ue,getThumbProps:st,getMarkerProps:Pe,getInputProps:Ne,getOutputProps:mt}}function AU(e,t,n,r){return e.map((o,s)=>{const l=s===0?t:e[s-1]+r,c=s===e.length-1?n:e[s+1]-r;return{min:l,max:c}})}var[TU,Sg]=Kt({name:"SliderContext",errorMessage:"useSliderContext: `context` is undefined. Seems you forgot to wrap all slider components within "}),[NU,kg]=Kt({name:"RangeSliderStylesContext",errorMessage:`useRangeSliderStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),O6=_e(function(t,n){const r={orientation:"horizontal",...t},o=Xn("Slider",r),s=cn(r),{direction:l}=Hd();s.direction=l;const{getRootProps:c,...d}=RU(s),f=i.useMemo(()=>({...d,name:r.name}),[d,r.name]);return a.jsx(TU,{value:f,children:a.jsx(NU,{value:o,children:a.jsx(je.div,{...c({},n),className:"chakra-slider",__css:o.container,children:r.children})})})});O6.displayName="RangeSlider";var bb=_e(function(t,n){const{getThumbProps:r,getInputProps:o,name:s}=Sg(),l=kg(),c=r(t,n);return a.jsxs(je.div,{...c,className:vl("chakra-slider__thumb",t.className),__css:l.thumb,children:[c.children,s&&a.jsx("input",{...o({index:t.index})})]})});bb.displayName="RangeSliderThumb";var D6=_e(function(t,n){const{getTrackProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:vl("chakra-slider__track",t.className),__css:o.track,"data-testid":"chakra-range-slider-track"})});D6.displayName="RangeSliderTrack";var R6=_e(function(t,n){const{getInnerTrackProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:"chakra-slider__filled-track",__css:o.filledTrack})});R6.displayName="RangeSliderFilledTrack";var dm=_e(function(t,n){const{getMarkerProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:vl("chakra-slider__marker",t.className),__css:o.mark})});dm.displayName="RangeSliderMark";function $U(e){var t;const{min:n=0,max:r=100,onChange:o,value:s,defaultValue:l,isReversed:c,direction:d="ltr",orientation:f="horizontal",id:m,isDisabled:h,isReadOnly:g,onChangeStart:b,onChangeEnd:y,step:x=1,getAriaValueText:w,"aria-valuetext":S,"aria-label":j,"aria-labelledby":_,name:I,focusThumbOnChange:E=!0,...M}=e,D=gn(b),R=gn(y),N=gn(w),O=j6({isReversed:c,direction:d,orientation:f}),[T,U]=qd({value:s,defaultValue:l??FU(n,r),onChange:o}),[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),V=!(h||g),se=(r-n)/10,ee=x||(r-n)/100,le=mc(T,n,r),ae=r-le+n,J=Dm(O?ae:le,n,r),re=f==="vertical",A=P6({min:n,max:r,step:x,isDisabled:h,value:le,isInteractive:V,isReversed:O,isVertical:re,eventSource:null,focusThumbOnChange:E,orientation:f}),L=i.useRef(null),K=i.useRef(null),ne=i.useRef(null),z=i.useId(),oe=m??z,[X,Z]=[`slider-thumb-${oe}`,`slider-track-${oe}`],me=i.useCallback(Pe=>{var Ne,kt;if(!L.current)return;const Se=A.current;Se.eventSource="pointer";const Ve=L.current.getBoundingClientRect(),{clientX:Ge,clientY:Le}=(kt=(Ne=Pe.touches)==null?void 0:Ne[0])!=null?kt:Pe,bt=re?Ve.bottom-Le:Ge-Ve.left,fn=re?Ve.height:Ve.width;let Bt=bt/fn;O&&(Bt=1-Bt);let Ht=B3(Bt,Se.min,Se.max);return Se.step&&(Ht=parseFloat(nb(Ht,Se.min,Se.step))),Ht=mc(Ht,Se.min,Se.max),Ht},[re,O,A]),ve=i.useCallback(Pe=>{const Ne=A.current;Ne.isInteractive&&(Pe=parseFloat(nb(Pe,Ne.min,ee)),Pe=mc(Pe,Ne.min,Ne.max),U(Pe))},[ee,U,A]),de=i.useMemo(()=>({stepUp(Pe=ee){const Ne=O?le-Pe:le+Pe;ve(Ne)},stepDown(Pe=ee){const Ne=O?le+Pe:le-Pe;ve(Ne)},reset(){ve(l||0)},stepTo(Pe){ve(Pe)}}),[ve,O,le,ee,l]),ke=i.useCallback(Pe=>{const Ne=A.current,Se={ArrowRight:()=>de.stepUp(),ArrowUp:()=>de.stepUp(),ArrowLeft:()=>de.stepDown(),ArrowDown:()=>de.stepDown(),PageUp:()=>de.stepUp(se),PageDown:()=>de.stepDown(se),Home:()=>ve(Ne.min),End:()=>ve(Ne.max)}[Pe.key];Se&&(Pe.preventDefault(),Pe.stopPropagation(),Se(Pe),Ne.eventSource="keyboard")},[de,ve,se,A]),we=(t=N==null?void 0:N(le))!=null?t:S,Re=DU(K),{getThumbStyle:Qe,rootStyle:$e,trackStyle:vt,innerTrackStyle:it}=i.useMemo(()=>{const Pe=A.current,Ne=Re??{width:0,height:0};return k6({isReversed:O,orientation:Pe.orientation,thumbRects:[Ne],thumbPercents:[J]})},[O,Re,J,A]),ot=i.useCallback(()=>{A.current.focusThumbOnChange&&setTimeout(()=>{var Ne;return(Ne=K.current)==null?void 0:Ne.focus()})},[A]);ba(()=>{const Pe=A.current;ot(),Pe.eventSource==="keyboard"&&(R==null||R(Pe.value))},[le,R]);function Ce(Pe){const Ne=me(Pe);Ne!=null&&Ne!==A.current.value&&U(Ne)}E6(ne,{onPanSessionStart(Pe){const Ne=A.current;Ne.isInteractive&&(q(!0),ot(),Ce(Pe),D==null||D(Ne.value))},onPanSessionEnd(){const Pe=A.current;Pe.isInteractive&&(q(!1),R==null||R(Pe.value))},onPan(Pe){A.current.isInteractive&&Ce(Pe)}});const Me=i.useCallback((Pe={},Ne=null)=>({...Pe,...M,ref:Et(Ne,ne),tabIndex:-1,"aria-disabled":bc(h),"data-focused":bo(Y),style:{...Pe.style,...$e}}),[M,h,Y,$e]),qe=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Et(Ne,L),id:Z,"data-disabled":bo(h),style:{...Pe.style,...vt}}),[h,Z,vt]),dt=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Ne,style:{...Pe.style,...it}}),[it]),ye=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Et(Ne,K),role:"slider",tabIndex:V?0:void 0,id:X,"data-active":bo(G),"aria-valuetext":we,"aria-valuemin":n,"aria-valuemax":r,"aria-valuenow":le,"aria-orientation":f,"aria-disabled":bc(h),"aria-readonly":bc(g),"aria-label":j,"aria-labelledby":j?void 0:_,style:{...Pe.style,...Qe(0)},onKeyDown:xc(Pe.onKeyDown,ke),onFocus:xc(Pe.onFocus,()=>Q(!0)),onBlur:xc(Pe.onBlur,()=>Q(!1))}),[V,X,G,we,n,r,le,f,h,g,j,_,Qe,ke]),Ue=i.useCallback((Pe,Ne=null)=>{const kt=!(Pe.valuer),Se=le>=Pe.value,Ve=Dm(Pe.value,n,r),Ge={position:"absolute",pointerEvents:"none",...LU({orientation:f,vertical:{bottom:O?`${100-Ve}%`:`${Ve}%`},horizontal:{left:O?`${100-Ve}%`:`${Ve}%`}})};return{...Pe,ref:Ne,role:"presentation","aria-hidden":!0,"data-disabled":bo(h),"data-invalid":bo(!kt),"data-highlighted":bo(Se),style:{...Pe.style,...Ge}}},[h,O,r,n,f,le]),st=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Ne,type:"hidden",value:le,name:I}),[I,le]);return{state:{value:le,isFocused:Y,isDragging:G},actions:de,getRootProps:Me,getTrackProps:qe,getInnerTrackProps:dt,getThumbProps:ye,getMarkerProps:Ue,getInputProps:st}}function LU(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}function FU(e,t){return t"}),[BU,_g]=Kt({name:"SliderStylesContext",hookName:"useSliderStyles",providerName:""}),Sy=_e((e,t)=>{var n;const r={...e,orientation:(n=e==null?void 0:e.orientation)!=null?n:"horizontal"},o=Xn("Slider",r),s=cn(r),{direction:l}=Hd();s.direction=l;const{getInputProps:c,getRootProps:d,...f}=$U(s),m=d(),h=c({},t);return a.jsx(zU,{value:f,children:a.jsx(BU,{value:o,children:a.jsxs(je.div,{...m,className:vl("chakra-slider",r.className),__css:o.container,children:[r.children,a.jsx("input",{...h})]})})})});Sy.displayName="Slider";var ky=_e((e,t)=>{const{getThumbProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__thumb",e.className),__css:r.thumb})});ky.displayName="SliderThumb";var jy=_e((e,t)=>{const{getTrackProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__track",e.className),__css:r.track})});jy.displayName="SliderTrack";var _y=_e((e,t)=>{const{getInnerTrackProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__filled-track",e.className),__css:r.filledTrack})});_y.displayName="SliderFilledTrack";var Zi=_e((e,t)=>{const{getMarkerProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__marker",e.className),__css:r.mark})});Zi.displayName="SliderMark";var[HU,A6]=Kt({name:"StatStylesContext",errorMessage:`useStatStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),T6=_e(function(t,n){const r=Xn("Stat",t),o={position:"relative",flex:"1 1 0%",...r.container},{className:s,children:l,...c}=cn(t);return a.jsx(HU,{value:r,children:a.jsx(je.div,{ref:n,...c,className:et("chakra-stat",s),__css:o,children:a.jsx("dl",{children:l})})})});T6.displayName="Stat";var N6=_e(function(t,n){return a.jsx(je.div,{...t,ref:n,role:"group",className:et("chakra-stat__group",t.className),__css:{display:"flex",flexWrap:"wrap",justifyContent:"space-around",alignItems:"flex-start"}})});N6.displayName="StatGroup";var $6=_e(function(t,n){const r=A6();return a.jsx(je.dt,{ref:n,...t,className:et("chakra-stat__label",t.className),__css:r.label})});$6.displayName="StatLabel";var L6=_e(function(t,n){const r=A6();return a.jsx(je.dd,{ref:n,...t,className:et("chakra-stat__number",t.className),__css:{...r.number,fontFeatureSettings:"pnum",fontVariantNumeric:"proportional-nums"}})});L6.displayName="StatNumber";var Iy=_e(function(t,n){const r=Xn("Switch",t),{spacing:o="0.5rem",children:s,...l}=cn(t),{getIndicatorProps:c,getInputProps:d,getCheckboxProps:f,getRootProps:m,getLabelProps:h}=z3(l),g=i.useMemo(()=>({display:"inline-block",position:"relative",verticalAlign:"middle",lineHeight:0,...r.container}),[r.container]),b=i.useMemo(()=>({display:"inline-flex",flexShrink:0,justifyContent:"flex-start",boxSizing:"content-box",cursor:"pointer",...r.track}),[r.track]),y=i.useMemo(()=>({userSelect:"none",marginStart:o,...r.label}),[o,r.label]);return a.jsxs(je.label,{...m(),className:et("chakra-switch",t.className),__css:g,children:[a.jsx("input",{className:"chakra-switch__input",...d({},n)}),a.jsx(je.span,{...f(),className:"chakra-switch__track",__css:b,children:a.jsx(je.span,{__css:r.thumb,className:"chakra-switch__thumb",...c()})}),s&&a.jsx(je.span,{className:"chakra-switch__label",...h(),__css:y,children:s})]})});Iy.displayName="Switch";var[WU,VU,UU,GU]=Vx();function KU(e){var t;const{defaultIndex:n,onChange:r,index:o,isManual:s,isLazy:l,lazyBehavior:c="unmount",orientation:d="horizontal",direction:f="ltr",...m}=e,[h,g]=i.useState(n??0),[b,y]=qd({defaultValue:n??0,value:o,onChange:r});i.useEffect(()=>{o!=null&&g(o)},[o]);const x=UU(),w=i.useId();return{id:`tabs-${(t=e.id)!=null?t:w}`,selectedIndex:b,focusedIndex:h,setSelectedIndex:y,setFocusedIndex:g,isManual:s,isLazy:l,lazyBehavior:c,orientation:d,descendants:x,direction:f,htmlProps:m}}var[qU,Ig]=Kt({name:"TabsContext",errorMessage:"useTabsContext: `context` is undefined. Seems you forgot to wrap all tabs components within "});function XU(e){const{focusedIndex:t,orientation:n,direction:r}=Ig(),o=VU(),s=i.useCallback(l=>{const c=()=>{var j;const _=o.nextEnabled(t);_&&((j=_.node)==null||j.focus())},d=()=>{var j;const _=o.prevEnabled(t);_&&((j=_.node)==null||j.focus())},f=()=>{var j;const _=o.firstEnabled();_&&((j=_.node)==null||j.focus())},m=()=>{var j;const _=o.lastEnabled();_&&((j=_.node)==null||j.focus())},h=n==="horizontal",g=n==="vertical",b=l.key,y=r==="ltr"?"ArrowLeft":"ArrowRight",x=r==="ltr"?"ArrowRight":"ArrowLeft",S={[y]:()=>h&&d(),[x]:()=>h&&c(),ArrowDown:()=>g&&c(),ArrowUp:()=>g&&d(),Home:f,End:m}[b];S&&(l.preventDefault(),S(l))},[o,t,n,r]);return{...e,role:"tablist","aria-orientation":n,onKeyDown:ze(e.onKeyDown,s)}}function QU(e){const{isDisabled:t=!1,isFocusable:n=!1,...r}=e,{setSelectedIndex:o,isManual:s,id:l,setFocusedIndex:c,selectedIndex:d}=Ig(),{index:f,register:m}=GU({disabled:t&&!n}),h=f===d,g=()=>{o(f)},b=()=>{c(f),!s&&!(t&&n)&&o(f)},y=z5({...r,ref:Et(m,e.ref),isDisabled:t,isFocusable:n,onClick:ze(e.onClick,g)}),x="button";return{...y,id:F6(l,f),role:"tab",tabIndex:h?0:-1,type:x,"aria-selected":h,"aria-controls":z6(l,f),onFocus:t?void 0:ze(e.onFocus,b)}}var[YU,ZU]=Kt({});function JU(e){const t=Ig(),{id:n,selectedIndex:r}=t,s=rg(e.children).map((l,c)=>i.createElement(YU,{key:c,value:{isSelected:c===r,id:z6(n,c),tabId:F6(n,c),selectedIndex:r}},l));return{...e,children:s}}function eG(e){const{children:t,...n}=e,{isLazy:r,lazyBehavior:o}=Ig(),{isSelected:s,id:l,tabId:c}=ZU(),d=i.useRef(!1);s&&(d.current=!0);const f=Cy({wasSelected:d.current,isSelected:s,enabled:r,mode:o});return{tabIndex:0,...n,children:f?t:null,role:"tabpanel","aria-labelledby":c,hidden:!s,id:l}}function F6(e,t){return`${e}--tab-${t}`}function z6(e,t){return`${e}--tabpanel-${t}`}var[tG,Pg]=Kt({name:"TabsStylesContext",errorMessage:`useTabsStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),ci=_e(function(t,n){const r=Xn("Tabs",t),{children:o,className:s,...l}=cn(t),{htmlProps:c,descendants:d,...f}=KU(l),m=i.useMemo(()=>f,[f]),{isFitted:h,...g}=c,b={position:"relative",...r.root};return a.jsx(WU,{value:d,children:a.jsx(qU,{value:m,children:a.jsx(tG,{value:r,children:a.jsx(je.div,{className:et("chakra-tabs",s),ref:n,...g,__css:b,children:o})})})})});ci.displayName="Tabs";var ui=_e(function(t,n){const r=XU({...t,ref:n}),s={display:"flex",...Pg().tablist};return a.jsx(je.div,{...r,className:et("chakra-tabs__tablist",t.className),__css:s})});ui.displayName="TabList";var $r=_e(function(t,n){const r=eG({...t,ref:n}),o=Pg();return a.jsx(je.div,{outline:"0",...r,className:et("chakra-tabs__tab-panel",t.className),__css:o.tabpanel})});$r.displayName="TabPanel";var eu=_e(function(t,n){const r=JU(t),o=Pg();return a.jsx(je.div,{...r,width:"100%",ref:n,className:et("chakra-tabs__tab-panels",t.className),__css:o.tabpanels})});eu.displayName="TabPanels";var mr=_e(function(t,n){const r=Pg(),o=QU({...t,ref:n}),s={outline:"0",display:"flex",alignItems:"center",justifyContent:"center",...r.tab};return a.jsx(je.button,{...o,className:et("chakra-tabs__tab",t.className),__css:s})});mr.displayName="Tab";function nG(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var rG=["h","minH","height","minHeight"],B6=_e((e,t)=>{const n=ml("Textarea",e),{className:r,rows:o,...s}=cn(e),l=Kx(s),c=o?nG(n,rG):n;return a.jsx(je.textarea,{ref:t,rows:o,...l,className:et("chakra-textarea",r),__css:c})});B6.displayName="Textarea";var oG={exit:{scale:.85,opacity:0,transition:{opacity:{duration:.15,easings:"easeInOut"},scale:{duration:.2,easings:"easeInOut"}}},enter:{scale:1,opacity:1,transition:{opacity:{easings:"easeOut",duration:.2},scale:{duration:.2,ease:[.175,.885,.4,1.1]}}}},xb=e=>{var t;return((t=e.current)==null?void 0:t.ownerDocument)||document},fm=e=>{var t,n;return((n=(t=e.current)==null?void 0:t.ownerDocument)==null?void 0:n.defaultView)||window};function sG(e={}){const{openDelay:t=0,closeDelay:n=0,closeOnClick:r=!0,closeOnMouseDown:o,closeOnScroll:s,closeOnPointerDown:l=o,closeOnEsc:c=!0,onOpen:d,onClose:f,placement:m,id:h,isOpen:g,defaultIsOpen:b,arrowSize:y=10,arrowShadowColor:x,arrowPadding:w,modifiers:S,isDisabled:j,gutter:_,offset:I,direction:E,...M}=e,{isOpen:D,onOpen:R,onClose:N}=yy({isOpen:g,defaultIsOpen:b,onOpen:d,onClose:f}),{referenceRef:O,getPopperProps:T,getArrowInnerProps:U,getArrowProps:G}=xy({enabled:D,placement:m,arrowPadding:w,modifiers:S,gutter:_,offset:I,direction:E}),q=i.useId(),Q=`tooltip-${h??q}`,V=i.useRef(null),se=i.useRef(),ee=i.useCallback(()=>{se.current&&(clearTimeout(se.current),se.current=void 0)},[]),le=i.useRef(),ae=i.useCallback(()=>{le.current&&(clearTimeout(le.current),le.current=void 0)},[]),ce=i.useCallback(()=>{ae(),N()},[N,ae]),J=aG(V,ce),re=i.useCallback(()=>{if(!j&&!se.current){D&&J();const Z=fm(V);se.current=Z.setTimeout(R,t)}},[J,j,D,R,t]),A=i.useCallback(()=>{ee();const Z=fm(V);le.current=Z.setTimeout(ce,n)},[n,ce,ee]),L=i.useCallback(()=>{D&&r&&A()},[r,A,D]),K=i.useCallback(()=>{D&&l&&A()},[l,A,D]),ne=i.useCallback(Z=>{D&&Z.key==="Escape"&&A()},[D,A]);Ul(()=>xb(V),"keydown",c?ne:void 0),Ul(()=>{if(!s)return null;const Z=V.current;if(!Z)return null;const me=P5(Z);return me.localName==="body"?fm(V):me},"scroll",()=>{D&&s&&ce()},{passive:!0,capture:!0}),i.useEffect(()=>{j&&(ee(),D&&N())},[j,D,N,ee]),i.useEffect(()=>()=>{ee(),ae()},[ee,ae]),Ul(()=>V.current,"pointerleave",A);const z=i.useCallback((Z={},me=null)=>({...Z,ref:Et(V,me,O),onPointerEnter:ze(Z.onPointerEnter,de=>{de.pointerType!=="touch"&&re()}),onClick:ze(Z.onClick,L),onPointerDown:ze(Z.onPointerDown,K),onFocus:ze(Z.onFocus,re),onBlur:ze(Z.onBlur,A),"aria-describedby":D?Q:void 0}),[re,A,K,D,Q,L,O]),oe=i.useCallback((Z={},me=null)=>T({...Z,style:{...Z.style,[Fn.arrowSize.var]:y?`${y}px`:void 0,[Fn.arrowShadowColor.var]:x}},me),[T,y,x]),X=i.useCallback((Z={},me=null)=>{const ve={...Z.style,position:"relative",transformOrigin:Fn.transformOrigin.varRef};return{ref:me,...M,...Z,id:Q,role:"tooltip",style:ve}},[M,Q]);return{isOpen:D,show:re,hide:A,getTriggerProps:z,getTooltipProps:X,getTooltipPositionerProps:oe,getArrowProps:G,getArrowInnerProps:U}}var Zv="chakra-ui:close-tooltip";function aG(e,t){return i.useEffect(()=>{const n=xb(e);return n.addEventListener(Zv,t),()=>n.removeEventListener(Zv,t)},[t,e]),()=>{const n=xb(e),r=fm(e);n.dispatchEvent(new r.CustomEvent(Zv))}}function lG(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function iG(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}var cG=je(Mn.div),Ut=_e((e,t)=>{var n,r;const o=ml("Tooltip",e),s=cn(e),l=Hd(),{children:c,label:d,shouldWrapChildren:f,"aria-label":m,hasArrow:h,bg:g,portalProps:b,background:y,backgroundColor:x,bgColor:w,motionProps:S,...j}=s,_=(r=(n=y??x)!=null?n:g)!=null?r:w;if(_){o.bg=_;const T=OR(l,"colors",_);o[Fn.arrowBg.var]=T}const I=sG({...j,direction:l.direction}),E=typeof c=="string"||f;let M;if(E)M=a.jsx(je.span,{display:"inline-block",tabIndex:0,...I.getTriggerProps(),children:c});else{const T=i.Children.only(c);M=i.cloneElement(T,I.getTriggerProps(T.props,T.ref))}const D=!!m,R=I.getTooltipProps({},t),N=D?lG(R,["role","id"]):R,O=iG(R,["role","id"]);return d?a.jsxs(a.Fragment,{children:[M,a.jsx(hr,{children:I.isOpen&&a.jsx(Uc,{...b,children:a.jsx(je.div,{...I.getTooltipPositionerProps(),__css:{zIndex:o.zIndex,pointerEvents:"none"},children:a.jsxs(cG,{variants:oG,initial:"exit",animate:"enter",exit:"exit",...S,...N,__css:o,children:[d,D&&a.jsx(je.span,{srOnly:!0,...O,children:m}),h&&a.jsx(je.div,{"data-popper-arrow":!0,className:"chakra-tooltip__arrow-wrapper",children:a.jsx(je.div,{"data-popper-arrow-inner":!0,className:"chakra-tooltip__arrow",__css:{bg:o.bg}})})]})})})})]}):a.jsx(a.Fragment,{children:c})});Ut.displayName="Tooltip";const uG=fe(pe,({system:e})=>{const{consoleLogLevel:t,shouldLogToConsole:n}=e;return{consoleLogLevel:t,shouldLogToConsole:n}}),H6=e=>{const{consoleLogLevel:t,shouldLogToConsole:n}=H(uG);return i.useEffect(()=>{n?(localStorage.setItem("ROARR_LOG","true"),localStorage.setItem("ROARR_FILTER",`context.logLevel:>=${DR[t]}`)):localStorage.setItem("ROARR_LOG","false"),Aw.ROARR.write=RR.createLogWriter()},[t,n]),i.useEffect(()=>{const o={...AR};TR.set(Aw.Roarr.child(o))},[]),i.useMemo(()=>hl(e),[e])},dG=()=>{const e=te(),t=H(r=>r.system.toastQueue),n=tg();return i.useEffect(()=>{t.forEach(r=>{n(r)}),t.length>0&&e(NR())},[e,n,t]),null},zs=()=>{const e=te();return i.useCallback(n=>e(lt(rn(n))),[e])},fG=i.memo(dG);var pG=new Map([["aac","audio/aac"],["abw","application/x-abiword"],["arc","application/x-freearc"],["avif","image/avif"],["avi","video/x-msvideo"],["azw","application/vnd.amazon.ebook"],["bin","application/octet-stream"],["bmp","image/bmp"],["bz","application/x-bzip"],["bz2","application/x-bzip2"],["cda","application/x-cdf"],["csh","application/x-csh"],["css","text/css"],["csv","text/csv"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["eot","application/vnd.ms-fontobject"],["epub","application/epub+zip"],["gz","application/gzip"],["gif","image/gif"],["heic","image/heic"],["heif","image/heif"],["htm","text/html"],["html","text/html"],["ico","image/vnd.microsoft.icon"],["ics","text/calendar"],["jar","application/java-archive"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["js","text/javascript"],["json","application/json"],["jsonld","application/ld+json"],["mid","audio/midi"],["midi","audio/midi"],["mjs","text/javascript"],["mp3","audio/mpeg"],["mp4","video/mp4"],["mpeg","video/mpeg"],["mpkg","application/vnd.apple.installer+xml"],["odp","application/vnd.oasis.opendocument.presentation"],["ods","application/vnd.oasis.opendocument.spreadsheet"],["odt","application/vnd.oasis.opendocument.text"],["oga","audio/ogg"],["ogv","video/ogg"],["ogx","application/ogg"],["opus","audio/opus"],["otf","font/otf"],["png","image/png"],["pdf","application/pdf"],["php","application/x-httpd-php"],["ppt","application/vnd.ms-powerpoint"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["rar","application/vnd.rar"],["rtf","application/rtf"],["sh","application/x-sh"],["svg","image/svg+xml"],["swf","application/x-shockwave-flash"],["tar","application/x-tar"],["tif","image/tiff"],["tiff","image/tiff"],["ts","video/mp2t"],["ttf","font/ttf"],["txt","text/plain"],["vsd","application/vnd.visio"],["wav","audio/wav"],["weba","audio/webm"],["webm","video/webm"],["webp","image/webp"],["woff","font/woff"],["woff2","font/woff2"],["xhtml","application/xhtml+xml"],["xls","application/vnd.ms-excel"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["xml","application/xml"],["xul","application/vnd.mozilla.xul+xml"],["zip","application/zip"],["7z","application/x-7z-compressed"],["mkv","video/x-matroska"],["mov","video/quicktime"],["msg","application/vnd.ms-outlook"]]);function uf(e,t){var n=mG(e);if(typeof n.path!="string"){var r=e.webkitRelativePath;Object.defineProperty(n,"path",{value:typeof t=="string"?t:typeof r=="string"&&r.length>0?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return n}function mG(e){var t=e.name,n=t&&t.lastIndexOf(".")!==-1;if(n&&!e.type){var r=t.split(".").pop().toLowerCase(),o=pG.get(r);o&&Object.defineProperty(e,"type",{value:o,writable:!1,configurable:!1,enumerable:!0})}return e}var hG=[".DS_Store","Thumbs.db"];function gG(e){return qc(this,void 0,void 0,function(){return Xc(this,function(t){return Lm(e)&&vG(e.dataTransfer)?[2,CG(e.dataTransfer,e.type)]:bG(e)?[2,xG(e)]:Array.isArray(e)&&e.every(function(n){return"getFile"in n&&typeof n.getFile=="function"})?[2,yG(e)]:[2,[]]})})}function vG(e){return Lm(e)}function bG(e){return Lm(e)&&Lm(e.target)}function Lm(e){return typeof e=="object"&&e!==null}function xG(e){return yb(e.target.files).map(function(t){return uf(t)})}function yG(e){return qc(this,void 0,void 0,function(){var t;return Xc(this,function(n){switch(n.label){case 0:return[4,Promise.all(e.map(function(r){return r.getFile()}))];case 1:return t=n.sent(),[2,t.map(function(r){return uf(r)})]}})})}function CG(e,t){return qc(this,void 0,void 0,function(){var n,r;return Xc(this,function(o){switch(o.label){case 0:return e.items?(n=yb(e.items).filter(function(s){return s.kind==="file"}),t!=="drop"?[2,n]:[4,Promise.all(n.map(wG))]):[3,2];case 1:return r=o.sent(),[2,u4(W6(r))];case 2:return[2,u4(yb(e.files).map(function(s){return uf(s)}))]}})})}function u4(e){return e.filter(function(t){return hG.indexOf(t.name)===-1})}function yb(e){if(e===null)return[];for(var t=[],n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nn)return[!1,h4(n)];if(e.sizen)return[!1,h4(n)]}return[!0,null]}function Fl(e){return e!=null}function LG(e){var t=e.files,n=e.accept,r=e.minSize,o=e.maxSize,s=e.multiple,l=e.maxFiles,c=e.validator;return!s&&t.length>1||s&&l>=1&&t.length>l?!1:t.every(function(d){var f=K6(d,n),m=Id(f,1),h=m[0],g=q6(d,r,o),b=Id(g,1),y=b[0],x=c?c(d):null;return h&&y&&!x})}function Fm(e){return typeof e.isPropagationStopped=="function"?e.isPropagationStopped():typeof e.cancelBubble<"u"?e.cancelBubble:!1}function Op(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(t){return t==="Files"||t==="application/x-moz-file"}):!!e.target&&!!e.target.files}function v4(e){e.preventDefault()}function FG(e){return e.indexOf("MSIE")!==-1||e.indexOf("Trident/")!==-1}function zG(e){return e.indexOf("Edge/")!==-1}function BG(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:window.navigator.userAgent;return FG(e)||zG(e)}function ys(){for(var e=arguments.length,t=new Array(e),n=0;n1?o-1:0),l=1;le.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oK(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var Py=i.forwardRef(function(e,t){var n=e.children,r=zm(e,KG),o=Ey(r),s=o.open,l=zm(o,qG);return i.useImperativeHandle(t,function(){return{open:s}},[s]),B.createElement(i.Fragment,null,n(kn(kn({},l),{},{open:s})))});Py.displayName="Dropzone";var Z6={disabled:!1,getFilesFromEvent:gG,maxSize:1/0,minSize:0,multiple:!0,maxFiles:0,preventDropOnDocument:!0,noClick:!1,noKeyboard:!1,noDrag:!1,noDragEventsBubbling:!1,validator:null,useFsAccessApi:!0,autoFocus:!1};Py.defaultProps=Z6;Py.propTypes={children:nn.func,accept:nn.objectOf(nn.arrayOf(nn.string)),multiple:nn.bool,preventDropOnDocument:nn.bool,noClick:nn.bool,noKeyboard:nn.bool,noDrag:nn.bool,noDragEventsBubbling:nn.bool,minSize:nn.number,maxSize:nn.number,maxFiles:nn.number,disabled:nn.bool,getFilesFromEvent:nn.func,onFileDialogCancel:nn.func,onFileDialogOpen:nn.func,useFsAccessApi:nn.bool,autoFocus:nn.bool,onDragEnter:nn.func,onDragLeave:nn.func,onDragOver:nn.func,onDrop:nn.func,onDropAccepted:nn.func,onDropRejected:nn.func,onError:nn.func,validator:nn.func};var kb={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,acceptedFiles:[],fileRejections:[]};function Ey(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=kn(kn({},Z6),e),n=t.accept,r=t.disabled,o=t.getFilesFromEvent,s=t.maxSize,l=t.minSize,c=t.multiple,d=t.maxFiles,f=t.onDragEnter,m=t.onDragLeave,h=t.onDragOver,g=t.onDrop,b=t.onDropAccepted,y=t.onDropRejected,x=t.onFileDialogCancel,w=t.onFileDialogOpen,S=t.useFsAccessApi,j=t.autoFocus,_=t.preventDropOnDocument,I=t.noClick,E=t.noKeyboard,M=t.noDrag,D=t.noDragEventsBubbling,R=t.onError,N=t.validator,O=i.useMemo(function(){return VG(n)},[n]),T=i.useMemo(function(){return WG(n)},[n]),U=i.useMemo(function(){return typeof w=="function"?w:x4},[w]),G=i.useMemo(function(){return typeof x=="function"?x:x4},[x]),q=i.useRef(null),Y=i.useRef(null),Q=i.useReducer(sK,kb),V=Jv(Q,2),se=V[0],ee=V[1],le=se.isFocused,ae=se.isFileDialogActive,ce=i.useRef(typeof window<"u"&&window.isSecureContext&&S&&HG()),J=function(){!ce.current&&ae&&setTimeout(function(){if(Y.current){var Me=Y.current.files;Me.length||(ee({type:"closeDialog"}),G())}},300)};i.useEffect(function(){return window.addEventListener("focus",J,!1),function(){window.removeEventListener("focus",J,!1)}},[Y,ae,G,ce]);var re=i.useRef([]),A=function(Me){q.current&&q.current.contains(Me.target)||(Me.preventDefault(),re.current=[])};i.useEffect(function(){return _&&(document.addEventListener("dragover",v4,!1),document.addEventListener("drop",A,!1)),function(){_&&(document.removeEventListener("dragover",v4),document.removeEventListener("drop",A))}},[q,_]),i.useEffect(function(){return!r&&j&&q.current&&q.current.focus(),function(){}},[q,j,r]);var L=i.useCallback(function(Ce){R?R(Ce):console.error(Ce)},[R]),K=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce),re.current=[].concat(YG(re.current),[Ce.target]),Op(Ce)&&Promise.resolve(o(Ce)).then(function(Me){if(!(Fm(Ce)&&!D)){var qe=Me.length,dt=qe>0&&LG({files:Me,accept:O,minSize:l,maxSize:s,multiple:c,maxFiles:d,validator:N}),ye=qe>0&&!dt;ee({isDragAccept:dt,isDragReject:ye,isDragActive:!0,type:"setDraggedFiles"}),f&&f(Ce)}}).catch(function(Me){return L(Me)})},[o,f,L,D,O,l,s,c,d,N]),ne=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce);var Me=Op(Ce);if(Me&&Ce.dataTransfer)try{Ce.dataTransfer.dropEffect="copy"}catch{}return Me&&h&&h(Ce),!1},[h,D]),z=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce);var Me=re.current.filter(function(dt){return q.current&&q.current.contains(dt)}),qe=Me.indexOf(Ce.target);qe!==-1&&Me.splice(qe,1),re.current=Me,!(Me.length>0)&&(ee({type:"setDraggedFiles",isDragActive:!1,isDragAccept:!1,isDragReject:!1}),Op(Ce)&&m&&m(Ce))},[q,m,D]),oe=i.useCallback(function(Ce,Me){var qe=[],dt=[];Ce.forEach(function(ye){var Ue=K6(ye,O),st=Jv(Ue,2),mt=st[0],Pe=st[1],Ne=q6(ye,l,s),kt=Jv(Ne,2),Se=kt[0],Ve=kt[1],Ge=N?N(ye):null;if(mt&&Se&&!Ge)qe.push(ye);else{var Le=[Pe,Ve];Ge&&(Le=Le.concat(Ge)),dt.push({file:ye,errors:Le.filter(function(bt){return bt})})}}),(!c&&qe.length>1||c&&d>=1&&qe.length>d)&&(qe.forEach(function(ye){dt.push({file:ye,errors:[$G]})}),qe.splice(0)),ee({acceptedFiles:qe,fileRejections:dt,type:"setFiles"}),g&&g(qe,dt,Me),dt.length>0&&y&&y(dt,Me),qe.length>0&&b&&b(qe,Me)},[ee,c,O,l,s,d,g,b,y,N]),X=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce),re.current=[],Op(Ce)&&Promise.resolve(o(Ce)).then(function(Me){Fm(Ce)&&!D||oe(Me,Ce)}).catch(function(Me){return L(Me)}),ee({type:"reset"})},[o,oe,L,D]),Z=i.useCallback(function(){if(ce.current){ee({type:"openDialog"}),U();var Ce={multiple:c,types:T};window.showOpenFilePicker(Ce).then(function(Me){return o(Me)}).then(function(Me){oe(Me,null),ee({type:"closeDialog"})}).catch(function(Me){UG(Me)?(G(Me),ee({type:"closeDialog"})):GG(Me)?(ce.current=!1,Y.current?(Y.current.value=null,Y.current.click()):L(new Error("Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no was provided."))):L(Me)});return}Y.current&&(ee({type:"openDialog"}),U(),Y.current.value=null,Y.current.click())},[ee,U,G,S,oe,L,T,c]),me=i.useCallback(function(Ce){!q.current||!q.current.isEqualNode(Ce.target)||(Ce.key===" "||Ce.key==="Enter"||Ce.keyCode===32||Ce.keyCode===13)&&(Ce.preventDefault(),Z())},[q,Z]),ve=i.useCallback(function(){ee({type:"focus"})},[]),de=i.useCallback(function(){ee({type:"blur"})},[]),ke=i.useCallback(function(){I||(BG()?setTimeout(Z,0):Z())},[I,Z]),we=function(Me){return r?null:Me},Re=function(Me){return E?null:we(Me)},Qe=function(Me){return M?null:we(Me)},$e=function(Me){D&&Me.stopPropagation()},vt=i.useMemo(function(){return function(){var Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Ce.refKey,qe=Me===void 0?"ref":Me,dt=Ce.role,ye=Ce.onKeyDown,Ue=Ce.onFocus,st=Ce.onBlur,mt=Ce.onClick,Pe=Ce.onDragEnter,Ne=Ce.onDragOver,kt=Ce.onDragLeave,Se=Ce.onDrop,Ve=zm(Ce,XG);return kn(kn(Sb({onKeyDown:Re(ys(ye,me)),onFocus:Re(ys(Ue,ve)),onBlur:Re(ys(st,de)),onClick:we(ys(mt,ke)),onDragEnter:Qe(ys(Pe,K)),onDragOver:Qe(ys(Ne,ne)),onDragLeave:Qe(ys(kt,z)),onDrop:Qe(ys(Se,X)),role:typeof dt=="string"&&dt!==""?dt:"presentation"},qe,q),!r&&!E?{tabIndex:0}:{}),Ve)}},[q,me,ve,de,ke,K,ne,z,X,E,M,r]),it=i.useCallback(function(Ce){Ce.stopPropagation()},[]),ot=i.useMemo(function(){return function(){var Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Ce.refKey,qe=Me===void 0?"ref":Me,dt=Ce.onChange,ye=Ce.onClick,Ue=zm(Ce,QG),st=Sb({accept:O,multiple:c,type:"file",style:{display:"none"},onChange:we(ys(dt,X)),onClick:we(ys(ye,it)),tabIndex:-1},qe,Y);return kn(kn({},st),Ue)}},[Y,n,c,X,r]);return kn(kn({},se),{},{isFocused:le&&!r,getRootProps:vt,getInputProps:ot,rootRef:q,inputRef:Y,open:we(Z)})}function sK(e,t){switch(t.type){case"focus":return kn(kn({},e),{},{isFocused:!0});case"blur":return kn(kn({},e),{},{isFocused:!1});case"openDialog":return kn(kn({},kb),{},{isFileDialogActive:!0});case"closeDialog":return kn(kn({},e),{},{isFileDialogActive:!1});case"setDraggedFiles":return kn(kn({},e),{},{isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject});case"setFiles":return kn(kn({},e),{},{acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections});case"reset":return kn({},kb);default:return e}}function x4(){}function jb(){return jb=Object.assign?Object.assign.bind():function(e){for(var t=1;t'),!0):t?e.some(function(n){return t.includes(n)})||e.includes("*"):!0}var fK=function(t,n,r){r===void 0&&(r=!1);var o=n.alt,s=n.meta,l=n.mod,c=n.shift,d=n.ctrl,f=n.keys,m=t.key,h=t.code,g=t.ctrlKey,b=t.metaKey,y=t.shiftKey,x=t.altKey,w=Ka(h),S=m.toLowerCase();if(!r){if(o===!x&&S!=="alt"||c===!y&&S!=="shift")return!1;if(l){if(!b&&!g)return!1}else if(s===!b&&S!=="meta"&&S!=="os"||d===!g&&S!=="ctrl"&&S!=="control")return!1}return f&&f.length===1&&(f.includes(S)||f.includes(w))?!0:f?pm(f):!f},pK=i.createContext(void 0),mK=function(){return i.useContext(pK)};function rP(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce(function(n,r){return n&&rP(e[r],t[r])},!0):e===t}var hK=i.createContext({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),gK=function(){return i.useContext(hK)};function vK(e){var t=i.useRef(void 0);return rP(t.current,e)||(t.current=e),t.current}var y4=function(t){t.stopPropagation(),t.preventDefault(),t.stopImmediatePropagation()},bK=typeof window<"u"?i.useLayoutEffect:i.useEffect;function tt(e,t,n,r){var o=i.useRef(null),s=i.useRef(!1),l=n instanceof Array?r instanceof Array?void 0:r:n,c=My(e)?e.join(l==null?void 0:l.splitKey):e,d=n instanceof Array?n:r instanceof Array?r:void 0,f=i.useCallback(t,d??[]),m=i.useRef(f);d?m.current=f:m.current=t;var h=vK(l),g=gK(),b=g.enabledScopes,y=mK();return bK(function(){if(!((h==null?void 0:h.enabled)===!1||!dK(b,h==null?void 0:h.scopes))){var x=function(I,E){var M;if(E===void 0&&(E=!1),!(uK(I)&&!nP(I,h==null?void 0:h.enableOnFormTags))&&!(h!=null&&h.ignoreEventWhen!=null&&h.ignoreEventWhen(I))){if(o.current!==null&&document.activeElement!==o.current&&!o.current.contains(document.activeElement)){y4(I);return}(M=I.target)!=null&&M.isContentEditable&&!(h!=null&&h.enableOnContentEditable)||e1(c,h==null?void 0:h.splitKey).forEach(function(D){var R,N=t1(D,h==null?void 0:h.combinationKey);if(fK(I,N,h==null?void 0:h.ignoreModifiers)||(R=N.keys)!=null&&R.includes("*")){if(E&&s.current)return;if(iK(I,N,h==null?void 0:h.preventDefault),!cK(I,N,h==null?void 0:h.enabled)){y4(I);return}m.current(I,N),E||(s.current=!0)}})}},w=function(I){I.key!==void 0&&(eP(Ka(I.code)),((h==null?void 0:h.keydown)===void 0&&(h==null?void 0:h.keyup)!==!0||h!=null&&h.keydown)&&x(I))},S=function(I){I.key!==void 0&&(tP(Ka(I.code)),s.current=!1,h!=null&&h.keyup&&x(I,!0))},j=o.current||(l==null?void 0:l.document)||document;return j.addEventListener("keyup",S),j.addEventListener("keydown",w),y&&e1(c,h==null?void 0:h.splitKey).forEach(function(_){return y.addHotkey(t1(_,h==null?void 0:h.combinationKey,h==null?void 0:h.description))}),function(){j.removeEventListener("keyup",S),j.removeEventListener("keydown",w),y&&e1(c,h==null?void 0:h.splitKey).forEach(function(_){return y.removeHotkey(t1(_,h==null?void 0:h.combinationKey,h==null?void 0:h.description))})}}},[c,h,b]),o}const xK=e=>{const{t}=W(),{isDragAccept:n,isDragReject:r,setIsHandlingUpload:o}=e;return tt("esc",()=>{o(!1)}),a.jsxs(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"100vw",height:"100vh",zIndex:999,backdropFilter:"blur(20px)"},children:[a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:"base.700",_dark:{bg:"base.900"},opacity:.7,alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"full",height:"full",alignItems:"center",justifyContent:"center",p:4},children:a.jsx($,{sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",flexDir:"column",gap:4,borderWidth:3,borderRadius:"xl",borderStyle:"dashed",color:"base.100",borderColor:"base.100",_dark:{borderColor:"base.200"}},children:n?a.jsx(or,{size:"lg",children:t("gallery.dropToUpload")}):a.jsxs(a.Fragment,{children:[a.jsx(or,{size:"lg",children:t("toast.invalidUpload")}),a.jsx(or,{size:"md",children:t("toast.uploadFailedInvalidUploadDesc")})]})})})]})},yK=i.memo(xK),CK=fe([pe,tr],({gallery:e},t)=>{let n={type:"TOAST"};t==="unifiedCanvas"&&(n={type:"SET_CANVAS_INITIAL_IMAGE"}),t==="img2img"&&(n={type:"SET_INITIAL_IMAGE"});const{autoAddBoardId:r}=e;return{autoAddBoardId:r,postUploadAction:n}}),wK=e=>{const{children:t}=e,{autoAddBoardId:n,postUploadAction:r}=H(CK),o=zs(),{t:s}=W(),[l,c]=i.useState(!1),[d]=CI(),f=i.useCallback(I=>{c(!0),o({title:s("toast.uploadFailed"),description:I.errors.map(E=>E.message).join(` -`),status:"error"})},[s,o]),m=i.useCallback(async I=>{d({file:I,image_category:"user",is_intermediate:!1,postUploadAction:r,board_id:n==="none"?void 0:n})},[n,r,d]),h=i.useCallback((I,E)=>{if(E.length>1){o({title:s("toast.uploadFailed"),description:s("toast.uploadFailedInvalidUploadDesc"),status:"error"});return}E.forEach(M=>{f(M)}),I.forEach(M=>{m(M)})},[s,o,m,f]),g=i.useCallback(()=>{c(!0)},[]),{getRootProps:b,getInputProps:y,isDragAccept:x,isDragReject:w,isDragActive:S,inputRef:j}=Ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},noClick:!0,onDrop:h,onDragOver:g,multiple:!1});i.useEffect(()=>{const I=async E=>{var M,D;j.current&&(M=E.clipboardData)!=null&&M.files&&(j.current.files=E.clipboardData.files,(D=j.current)==null||D.dispatchEvent(new Event("change",{bubbles:!0})))};return document.addEventListener("paste",I),()=>{document.removeEventListener("paste",I)}},[j]);const _=i.useCallback(I=>{I.key},[]);return a.jsxs(Ie,{...b({style:{}}),onKeyDown:_,children:[a.jsx("input",{...y()}),t,a.jsx(hr,{children:S&&l&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(yK,{isDragAccept:x,isDragReject:w,setIsHandlingUpload:c})},"image-upload-overlay")})]})},SK=i.memo(wK),kK=_e((e,t)=>{const{children:n,tooltip:r="",tooltipProps:{placement:o="top",hasArrow:s=!0,...l}={},isChecked:c,...d}=e;return a.jsx(Ut,{label:r,placement:o,hasArrow:s,...l,children:a.jsx(ol,{ref:t,colorScheme:c?"accent":"base",...d,children:n})})}),Xe=i.memo(kK);function jK(e){const t=i.createContext(null);return[({children:o,value:s})=>B.createElement(t.Provider,{value:s},o),()=>{const o=i.useContext(t);if(o===null)throw new Error(e);return o}]}function oP(e){return Array.isArray(e)?e:[e]}const _K=()=>{};function IK(e,t={active:!0}){return typeof e!="function"||!t.active?t.onKeyDown||_K:n=>{var r;n.key==="Escape"&&(e(n),(r=t.onTrigger)==null||r.call(t))}}function sP({data:e}){const t=[],n=[],r=e.reduce((o,s,l)=>(s.group?o[s.group]?o[s.group].push(l):o[s.group]=[l]:n.push(l),o),{});return Object.keys(r).forEach(o=>{t.push(...r[o].map(s=>e[s]))}),t.push(...n.map(o=>e[o])),t}function aP(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==B.Fragment:!1}function lP(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;tr===t[o]).indexOf(!1)>=0)&&(n.current={v:e(),prevDeps:[...t]}),n.current.v}const MK=$R({key:"mantine",prepend:!0});function OK(){return k3()||MK}var DK=Object.defineProperty,C4=Object.getOwnPropertySymbols,RK=Object.prototype.hasOwnProperty,AK=Object.prototype.propertyIsEnumerable,w4=(e,t,n)=>t in e?DK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,TK=(e,t)=>{for(var n in t||(t={}))RK.call(t,n)&&w4(e,n,t[n]);if(C4)for(var n of C4(t))AK.call(t,n)&&w4(e,n,t[n]);return e};const n1="ref";function NK(e){let t;if(e.length!==1)return{args:e,ref:t};const[n]=e;if(!(n instanceof Object))return{args:e,ref:t};if(!(n1 in n))return{args:e,ref:t};t=n[n1];const r=TK({},n);return delete r[n1],{args:[r],ref:t}}const{cssFactory:$K}=(()=>{function e(n,r,o){const s=[],l=zR(n,s,o);return s.length<2?o:l+r(s)}function t(n){const{cache:r}=n,o=(...l)=>{const{ref:c,args:d}=NK(l),f=LR(d,r.registered);return FR(r,f,!1),`${r.key}-${f.name}${c===void 0?"":` ${c}`}`};return{css:o,cx:(...l)=>e(r.registered,o,iP(l))}}return{cssFactory:t}})();function cP(){const e=OK();return EK(()=>$K({cache:e}),[e])}function LK({cx:e,classes:t,context:n,classNames:r,name:o,cache:s}){const l=n.reduce((c,d)=>(Object.keys(d.classNames).forEach(f=>{typeof c[f]!="string"?c[f]=`${d.classNames[f]}`:c[f]=`${c[f]} ${d.classNames[f]}`}),c),{});return Object.keys(t).reduce((c,d)=>(c[d]=e(t[d],l[d],r!=null&&r[d],Array.isArray(o)?o.filter(Boolean).map(f=>`${(s==null?void 0:s.key)||"mantine"}-${f}-${d}`).join(" "):o?`${(s==null?void 0:s.key)||"mantine"}-${o}-${d}`:null),c),{})}var FK=Object.defineProperty,S4=Object.getOwnPropertySymbols,zK=Object.prototype.hasOwnProperty,BK=Object.prototype.propertyIsEnumerable,k4=(e,t,n)=>t in e?FK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,r1=(e,t)=>{for(var n in t||(t={}))zK.call(t,n)&&k4(e,n,t[n]);if(S4)for(var n of S4(t))BK.call(t,n)&&k4(e,n,t[n]);return e};function _b(e,t){return t&&Object.keys(t).forEach(n=>{e[n]?e[n]=r1(r1({},e[n]),t[n]):e[n]=r1({},t[n])}),e}function j4(e,t,n,r){const o=s=>typeof s=="function"?s(t,n||{},r):s||{};return Array.isArray(e)?e.map(s=>o(s.styles)).reduce((s,l)=>_b(s,l),{}):o(e)}function HK({ctx:e,theme:t,params:n,variant:r,size:o}){return e.reduce((s,l)=>(l.variants&&r in l.variants&&_b(s,l.variants[r](t,n,{variant:r,size:o})),l.sizes&&o in l.sizes&&_b(s,l.sizes[o](t,n,{variant:r,size:o})),s),{})}function gr(e){const t=typeof e=="function"?e:()=>e;function n(r,o){const s=wa(),l=aL(o==null?void 0:o.name),c=k3(),d={variant:o==null?void 0:o.variant,size:o==null?void 0:o.size},{css:f,cx:m}=cP(),h=t(s,r,d),g=j4(o==null?void 0:o.styles,s,r,d),b=j4(l,s,r,d),y=HK({ctx:l,theme:s,params:r,variant:o==null?void 0:o.variant,size:o==null?void 0:o.size}),x=Object.fromEntries(Object.keys(h).map(w=>{const S=m({[f(h[w])]:!(o!=null&&o.unstyled)},f(y[w]),f(b[w]),f(g[w]));return[w,S]}));return{classes:LK({cx:m,classes:x,context:l,classNames:o==null?void 0:o.classNames,name:o==null?void 0:o.name,cache:c}),cx:m,theme:s}}return n}function _4(e){return`___ref-${e||""}`}var WK=Object.defineProperty,VK=Object.defineProperties,UK=Object.getOwnPropertyDescriptors,I4=Object.getOwnPropertySymbols,GK=Object.prototype.hasOwnProperty,KK=Object.prototype.propertyIsEnumerable,P4=(e,t,n)=>t in e?WK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Fu=(e,t)=>{for(var n in t||(t={}))GK.call(t,n)&&P4(e,n,t[n]);if(I4)for(var n of I4(t))KK.call(t,n)&&P4(e,n,t[n]);return e},zu=(e,t)=>VK(e,UK(t));const Bu={in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${Ae(10)})`},transitionProperty:"transform, opacity"},Dp={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(-${Ae(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) rotate(-5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) rotate(5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:zu(Fu({},Bu),{common:{transformOrigin:"center center"}}),"pop-bottom-left":zu(Fu({},Bu),{common:{transformOrigin:"bottom left"}}),"pop-bottom-right":zu(Fu({},Bu),{common:{transformOrigin:"bottom right"}}),"pop-top-left":zu(Fu({},Bu),{common:{transformOrigin:"top left"}}),"pop-top-right":zu(Fu({},Bu),{common:{transformOrigin:"top right"}})},E4=["mousedown","touchstart"];function qK(e,t,n){const r=i.useRef();return i.useEffect(()=>{const o=s=>{const{target:l}=s??{};if(Array.isArray(n)){const c=(l==null?void 0:l.hasAttribute("data-ignore-outside-clicks"))||!document.body.contains(l)&&l.tagName!=="HTML";n.every(f=>!!f&&!s.composedPath().includes(f))&&!c&&e()}else r.current&&!r.current.contains(l)&&e()};return(t||E4).forEach(s=>document.addEventListener(s,o)),()=>{(t||E4).forEach(s=>document.removeEventListener(s,o))}},[r,e,n]),r}function XK(e,t){try{return e.addEventListener("change",t),()=>e.removeEventListener("change",t)}catch{return e.addListener(t),()=>e.removeListener(t)}}function QK(e,t){return typeof t=="boolean"?t:typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function YK(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){const[r,o]=i.useState(n?t:QK(e,t)),s=i.useRef();return i.useEffect(()=>{if("matchMedia"in window)return s.current=window.matchMedia(e),o(s.current.matches),XK(s.current,l=>o(l.matches))},[e]),r}const uP=typeof document<"u"?i.useLayoutEffect:i.useEffect;function os(e,t){const n=i.useRef(!1);i.useEffect(()=>()=>{n.current=!1},[]),i.useEffect(()=>{if(n.current)return e();n.current=!0},t)}function ZK({opened:e,shouldReturnFocus:t=!0}){const n=i.useRef(),r=()=>{var o;n.current&&"focus"in n.current&&typeof n.current.focus=="function"&&((o=n.current)==null||o.focus({preventScroll:!0}))};return os(()=>{let o=-1;const s=l=>{l.key==="Tab"&&window.clearTimeout(o)};return document.addEventListener("keydown",s),e?n.current=document.activeElement:t&&(o=window.setTimeout(r,10)),()=>{window.clearTimeout(o),document.removeEventListener("keydown",s)}},[e,t]),r}const JK=/input|select|textarea|button|object/,dP="a, input, select, textarea, button, object, [tabindex]";function eq(e){return e.style.display==="none"}function tq(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let n=e;for(;n&&!(n===document.body||n.nodeType===11);){if(eq(n))return!1;n=n.parentNode}return!0}function fP(e){let t=e.getAttribute("tabindex");return t===null&&(t=void 0),parseInt(t,10)}function Ib(e){const t=e.nodeName.toLowerCase(),n=!Number.isNaN(fP(e));return(JK.test(t)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||n)&&tq(e)}function pP(e){const t=fP(e);return(Number.isNaN(t)||t>=0)&&Ib(e)}function nq(e){return Array.from(e.querySelectorAll(dP)).filter(pP)}function rq(e,t){const n=nq(e);if(!n.length){t.preventDefault();return}const r=n[t.shiftKey?0:n.length-1],o=e.getRootNode();if(!(r===o.activeElement||e===o.activeElement))return;t.preventDefault();const l=n[t.shiftKey?n.length-1:0];l&&l.focus()}function Dy(){return`mantine-${Math.random().toString(36).slice(2,11)}`}function oq(e,t="body > :not(script)"){const n=Dy(),r=Array.from(document.querySelectorAll(t)).map(o=>{var s;if((s=o==null?void 0:o.shadowRoot)!=null&&s.contains(e)||o.contains(e))return;const l=o.getAttribute("aria-hidden"),c=o.getAttribute("data-hidden"),d=o.getAttribute("data-focus-id");return o.setAttribute("data-focus-id",n),l===null||l==="false"?o.setAttribute("aria-hidden","true"):!c&&!d&&o.setAttribute("data-hidden",l),{node:o,ariaHidden:c||null}});return()=>{r.forEach(o=>{!o||n!==o.node.getAttribute("data-focus-id")||(o.ariaHidden===null?o.node.removeAttribute("aria-hidden"):o.node.setAttribute("aria-hidden",o.ariaHidden),o.node.removeAttribute("data-focus-id"),o.node.removeAttribute("data-hidden"))})}}function sq(e=!0){const t=i.useRef(),n=i.useRef(null),r=s=>{let l=s.querySelector("[data-autofocus]");if(!l){const c=Array.from(s.querySelectorAll(dP));l=c.find(pP)||c.find(Ib)||null,!l&&Ib(s)&&(l=s)}l&&l.focus({preventScroll:!0})},o=i.useCallback(s=>{if(e){if(s===null){n.current&&(n.current(),n.current=null);return}n.current=oq(s),t.current!==s&&(s?(setTimeout(()=>{s.getRootNode()&&r(s)}),t.current=s):t.current=null)}},[e]);return i.useEffect(()=>{if(!e)return;t.current&&setTimeout(()=>r(t.current));const s=l=>{l.key==="Tab"&&t.current&&rq(t.current,l)};return document.addEventListener("keydown",s),()=>{document.removeEventListener("keydown",s),n.current&&n.current()}},[e]),o}const aq=B["useId".toString()]||(()=>{});function lq(){const e=aq();return e?`mantine-${e.replace(/:/g,"")}`:""}function Ry(e){const t=lq(),[n,r]=i.useState(t);return uP(()=>{r(Dy())},[]),typeof e=="string"?e:typeof window>"u"?t:n}function M4(e,t,n){i.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t])}function mP(e,t){typeof e=="function"?e(t):typeof e=="object"&&e!==null&&"current"in e&&(e.current=t)}function iq(...e){return t=>{e.forEach(n=>mP(n,t))}}function df(...e){return i.useCallback(iq(...e),e)}function Pd({value:e,defaultValue:t,finalValue:n,onChange:r=()=>{}}){const[o,s]=i.useState(t!==void 0?t:n),l=c=>{s(c),r==null||r(c)};return e!==void 0?[e,r,!0]:[o,l,!1]}function hP(e,t){return YK("(prefers-reduced-motion: reduce)",e,t)}const cq=e=>e<.5?2*e*e:-1+(4-2*e)*e,uq=({axis:e,target:t,parent:n,alignment:r,offset:o,isList:s})=>{if(!t||!n&&typeof document>"u")return 0;const l=!!n,d=(n||document.body).getBoundingClientRect(),f=t.getBoundingClientRect(),m=h=>f[h]-d[h];if(e==="y"){const h=m("top");if(h===0)return 0;if(r==="start"){const b=h-o;return b<=f.height*(s?0:1)||!s?b:0}const g=l?d.height:window.innerHeight;if(r==="end"){const b=h+o-g+f.height;return b>=-f.height*(s?0:1)||!s?b:0}return r==="center"?h-g/2+f.height/2:0}if(e==="x"){const h=m("left");if(h===0)return 0;if(r==="start"){const b=h-o;return b<=f.width||!s?b:0}const g=l?d.width:window.innerWidth;if(r==="end"){const b=h+o-g+f.width;return b>=-f.width||!s?b:0}return r==="center"?h-g/2+f.width/2:0}return 0},dq=({axis:e,parent:t})=>{if(!t&&typeof document>"u")return 0;const n=e==="y"?"scrollTop":"scrollLeft";if(t)return t[n];const{body:r,documentElement:o}=document;return r[n]+o[n]},fq=({axis:e,parent:t,distance:n})=>{if(!t&&typeof document>"u")return;const r=e==="y"?"scrollTop":"scrollLeft";if(t)t[r]=n;else{const{body:o,documentElement:s}=document;o[r]=n,s[r]=n}};function gP({duration:e=1250,axis:t="y",onScrollFinish:n,easing:r=cq,offset:o=0,cancelable:s=!0,isList:l=!1}={}){const c=i.useRef(0),d=i.useRef(0),f=i.useRef(!1),m=i.useRef(null),h=i.useRef(null),g=hP(),b=()=>{c.current&&cancelAnimationFrame(c.current)},y=i.useCallback(({alignment:w="start"}={})=>{var S;f.current=!1,c.current&&b();const j=(S=dq({parent:m.current,axis:t}))!=null?S:0,_=uq({parent:m.current,target:h.current,axis:t,alignment:w,offset:o,isList:l})-(m.current?0:j);function I(){d.current===0&&(d.current=performance.now());const M=performance.now()-d.current,D=g||e===0?1:M/e,R=j+_*r(D);fq({parent:m.current,axis:t,distance:R}),!f.current&&D<1?c.current=requestAnimationFrame(I):(typeof n=="function"&&n(),d.current=0,c.current=0,b())}I()},[t,e,r,l,o,n,g]),x=()=>{s&&(f.current=!0)};return M4("wheel",x,{passive:!0}),M4("touchmove",x,{passive:!0}),i.useEffect(()=>b,[]),{scrollableRef:m,targetRef:h,scrollIntoView:y,cancel:b}}var O4=Object.getOwnPropertySymbols,pq=Object.prototype.hasOwnProperty,mq=Object.prototype.propertyIsEnumerable,hq=(e,t)=>{var n={};for(var r in e)pq.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&O4)for(var r of O4(e))t.indexOf(r)<0&&mq.call(e,r)&&(n[r]=e[r]);return n};function Eg(e){const t=e,{m:n,mx:r,my:o,mt:s,mb:l,ml:c,mr:d,p:f,px:m,py:h,pt:g,pb:b,pl:y,pr:x,bg:w,c:S,opacity:j,ff:_,fz:I,fw:E,lts:M,ta:D,lh:R,fs:N,tt:O,td:T,w:U,miw:G,maw:q,h:Y,mih:Q,mah:V,bgsz:se,bgp:ee,bgr:le,bga:ae,pos:ce,top:J,left:re,bottom:A,right:L,inset:K,display:ne}=t,z=hq(t,["m","mx","my","mt","mb","ml","mr","p","px","py","pt","pb","pl","pr","bg","c","opacity","ff","fz","fw","lts","ta","lh","fs","tt","td","w","miw","maw","h","mih","mah","bgsz","bgp","bgr","bga","pos","top","left","bottom","right","inset","display"]);return{systemStyles:lL({m:n,mx:r,my:o,mt:s,mb:l,ml:c,mr:d,p:f,px:m,py:h,pt:g,pb:b,pl:y,pr:x,bg:w,c:S,opacity:j,ff:_,fz:I,fw:E,lts:M,ta:D,lh:R,fs:N,tt:O,td:T,w:U,miw:G,maw:q,h:Y,mih:Q,mah:V,bgsz:se,bgp:ee,bgr:le,bga:ae,pos:ce,top:J,left:re,bottom:A,right:L,inset:K,display:ne}),rest:z}}function gq(e,t){const n=Object.keys(e).filter(r=>r!=="base").sort((r,o)=>CS(pt({size:r,sizes:t.breakpoints}))-CS(pt({size:o,sizes:t.breakpoints})));return"base"in e?["base",...n]:n}function vq({value:e,theme:t,getValue:n,property:r}){if(e==null)return;if(typeof e=="object")return gq(e,t).reduce((l,c)=>{if(c==="base"&&e.base!==void 0){const f=n(e.base,t);return Array.isArray(r)?(r.forEach(m=>{l[m]=f}),l):(l[r]=f,l)}const d=n(e[c],t);return Array.isArray(r)?(l[t.fn.largerThan(c)]={},r.forEach(f=>{l[t.fn.largerThan(c)][f]=d}),l):(l[t.fn.largerThan(c)]={[r]:d},l)},{});const o=n(e,t);return Array.isArray(r)?r.reduce((s,l)=>(s[l]=o,s),{}):{[r]:o}}function bq(e,t){return e==="dimmed"?t.colorScheme==="dark"?t.colors.dark[2]:t.colors.gray[6]:t.fn.variant({variant:"filled",color:e,primaryFallback:!1}).background}function xq(e){return Ae(e)}function yq(e){return e}function Cq(e,t){return pt({size:e,sizes:t.fontSizes})}const wq=["-xs","-sm","-md","-lg","-xl"];function Sq(e,t){return wq.includes(e)?`calc(${pt({size:e.replace("-",""),sizes:t.spacing})} * -1)`:pt({size:e,sizes:t.spacing})}const kq={identity:yq,color:bq,size:xq,fontSize:Cq,spacing:Sq},jq={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},mx:{type:"spacing",property:["marginRight","marginLeft"]},my:{type:"spacing",property:["marginTop","marginBottom"]},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},px:{type:"spacing",property:["paddingRight","paddingLeft"]},py:{type:"spacing",property:["paddingTop","paddingBottom"]},bg:{type:"color",property:"background"},c:{type:"color",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"identity",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"identity",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"identity",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"}};var _q=Object.defineProperty,D4=Object.getOwnPropertySymbols,Iq=Object.prototype.hasOwnProperty,Pq=Object.prototype.propertyIsEnumerable,R4=(e,t,n)=>t in e?_q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,A4=(e,t)=>{for(var n in t||(t={}))Iq.call(t,n)&&R4(e,n,t[n]);if(D4)for(var n of D4(t))Pq.call(t,n)&&R4(e,n,t[n]);return e};function T4(e,t,n=jq){return Object.keys(n).reduce((o,s)=>(s in e&&e[s]!==void 0&&o.push(vq({value:e[s],getValue:kq[n[s].type],property:n[s].property,theme:t})),o),[]).reduce((o,s)=>(Object.keys(s).forEach(l=>{typeof s[l]=="object"&&s[l]!==null&&l in o?o[l]=A4(A4({},o[l]),s[l]):o[l]=s[l]}),o),{})}function N4(e,t){return typeof e=="function"?e(t):e}function Eq(e,t,n){const r=wa(),{css:o,cx:s}=cP();return Array.isArray(e)?s(n,o(T4(t,r)),e.map(l=>o(N4(l,r)))):s(n,o(N4(e,r)),o(T4(t,r)))}var Mq=Object.defineProperty,Bm=Object.getOwnPropertySymbols,vP=Object.prototype.hasOwnProperty,bP=Object.prototype.propertyIsEnumerable,$4=(e,t,n)=>t in e?Mq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Oq=(e,t)=>{for(var n in t||(t={}))vP.call(t,n)&&$4(e,n,t[n]);if(Bm)for(var n of Bm(t))bP.call(t,n)&&$4(e,n,t[n]);return e},Dq=(e,t)=>{var n={};for(var r in e)vP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bm)for(var r of Bm(e))t.indexOf(r)<0&&bP.call(e,r)&&(n[r]=e[r]);return n};const xP=i.forwardRef((e,t)=>{var n=e,{className:r,component:o,style:s,sx:l}=n,c=Dq(n,["className","component","style","sx"]);const{systemStyles:d,rest:f}=Eg(c),m=o||"div";return B.createElement(m,Oq({ref:t,className:Eq(l,d,r),style:s},f))});xP.displayName="@mantine/core/Box";const Vr=xP;var Rq=Object.defineProperty,Aq=Object.defineProperties,Tq=Object.getOwnPropertyDescriptors,L4=Object.getOwnPropertySymbols,Nq=Object.prototype.hasOwnProperty,$q=Object.prototype.propertyIsEnumerable,F4=(e,t,n)=>t in e?Rq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,z4=(e,t)=>{for(var n in t||(t={}))Nq.call(t,n)&&F4(e,n,t[n]);if(L4)for(var n of L4(t))$q.call(t,n)&&F4(e,n,t[n]);return e},Lq=(e,t)=>Aq(e,Tq(t)),Fq=gr(e=>({root:Lq(z4(z4({},e.fn.focusStyles()),e.fn.fontStyles()),{cursor:"pointer",border:0,padding:0,appearance:"none",fontSize:e.fontSizes.md,backgroundColor:"transparent",textAlign:"left",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,textDecoration:"none",boxSizing:"border-box"})}));const zq=Fq;var Bq=Object.defineProperty,Hm=Object.getOwnPropertySymbols,yP=Object.prototype.hasOwnProperty,CP=Object.prototype.propertyIsEnumerable,B4=(e,t,n)=>t in e?Bq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hq=(e,t)=>{for(var n in t||(t={}))yP.call(t,n)&&B4(e,n,t[n]);if(Hm)for(var n of Hm(t))CP.call(t,n)&&B4(e,n,t[n]);return e},Wq=(e,t)=>{var n={};for(var r in e)yP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Hm)for(var r of Hm(e))t.indexOf(r)<0&&CP.call(e,r)&&(n[r]=e[r]);return n};const wP=i.forwardRef((e,t)=>{const n=Nn("UnstyledButton",{},e),{className:r,component:o="button",unstyled:s,variant:l}=n,c=Wq(n,["className","component","unstyled","variant"]),{classes:d,cx:f}=zq(null,{name:"UnstyledButton",unstyled:s,variant:l});return B.createElement(Vr,Hq({component:o,ref:t,className:f(d.root,r),type:o==="button"?"button":void 0},c))});wP.displayName="@mantine/core/UnstyledButton";const Vq=wP;var Uq=Object.defineProperty,Gq=Object.defineProperties,Kq=Object.getOwnPropertyDescriptors,H4=Object.getOwnPropertySymbols,qq=Object.prototype.hasOwnProperty,Xq=Object.prototype.propertyIsEnumerable,W4=(e,t,n)=>t in e?Uq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Pb=(e,t)=>{for(var n in t||(t={}))qq.call(t,n)&&W4(e,n,t[n]);if(H4)for(var n of H4(t))Xq.call(t,n)&&W4(e,n,t[n]);return e},V4=(e,t)=>Gq(e,Kq(t));const Qq=["subtle","filled","outline","light","default","transparent","gradient"],Rp={xs:Ae(18),sm:Ae(22),md:Ae(28),lg:Ae(34),xl:Ae(44)};function Yq({variant:e,theme:t,color:n,gradient:r}){const o=t.fn.variant({color:n,variant:e,gradient:r});return e==="gradient"?{border:0,backgroundImage:o.background,color:o.color,"&:hover":t.fn.hover({backgroundSize:"200%"})}:Qq.includes(e)?Pb({border:`${Ae(1)} solid ${o.border}`,backgroundColor:o.background,color:o.color},t.fn.hover({backgroundColor:o.hover})):null}var Zq=gr((e,{radius:t,color:n,gradient:r},{variant:o,size:s})=>({root:V4(Pb({position:"relative",borderRadius:e.fn.radius(t),padding:0,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",height:pt({size:s,sizes:Rp}),minHeight:pt({size:s,sizes:Rp}),width:pt({size:s,sizes:Rp}),minWidth:pt({size:s,sizes:Rp})},Yq({variant:o,theme:e,color:n,gradient:r})),{"&:active":e.activeStyles,"& [data-action-icon-loader]":{maxWidth:"70%"},"&:disabled, &[data-disabled]":{color:e.colors.gray[e.colorScheme==="dark"?6:4],cursor:"not-allowed",backgroundColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),borderColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),backgroundImage:"none",pointerEvents:"none","&:active":{transform:"none"}},"&[data-loading]":{pointerEvents:"none","&::before":V4(Pb({content:'""'},e.fn.cover(Ae(-1))),{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.colors.dark[7],.5):"rgba(255, 255, 255, .5)",borderRadius:e.fn.radius(t),cursor:"not-allowed"})}})}));const Jq=Zq;var eX=Object.defineProperty,Wm=Object.getOwnPropertySymbols,SP=Object.prototype.hasOwnProperty,kP=Object.prototype.propertyIsEnumerable,U4=(e,t,n)=>t in e?eX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,G4=(e,t)=>{for(var n in t||(t={}))SP.call(t,n)&&U4(e,n,t[n]);if(Wm)for(var n of Wm(t))kP.call(t,n)&&U4(e,n,t[n]);return e},K4=(e,t)=>{var n={};for(var r in e)SP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Wm)for(var r of Wm(e))t.indexOf(r)<0&&kP.call(e,r)&&(n[r]=e[r]);return n};function tX(e){var t=e,{size:n,color:r}=t,o=K4(t,["size","color"]);const s=o,{style:l}=s,c=K4(s,["style"]);return B.createElement("svg",G4({viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg",fill:r,style:G4({width:n},l)},c),B.createElement("rect",{y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"30",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"60",width:"15",height:"140",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"90",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"120",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})))}var nX=Object.defineProperty,Vm=Object.getOwnPropertySymbols,jP=Object.prototype.hasOwnProperty,_P=Object.prototype.propertyIsEnumerable,q4=(e,t,n)=>t in e?nX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,X4=(e,t)=>{for(var n in t||(t={}))jP.call(t,n)&&q4(e,n,t[n]);if(Vm)for(var n of Vm(t))_P.call(t,n)&&q4(e,n,t[n]);return e},Q4=(e,t)=>{var n={};for(var r in e)jP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Vm)for(var r of Vm(e))t.indexOf(r)<0&&_P.call(e,r)&&(n[r]=e[r]);return n};function rX(e){var t=e,{size:n,color:r}=t,o=Q4(t,["size","color"]);const s=o,{style:l}=s,c=Q4(s,["style"]);return B.createElement("svg",X4({viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg",stroke:r,style:X4({width:n,height:n},l)},c),B.createElement("g",{fill:"none",fillRule:"evenodd"},B.createElement("g",{transform:"translate(2.5 2.5)",strokeWidth:"5"},B.createElement("circle",{strokeOpacity:".5",cx:"16",cy:"16",r:"16"}),B.createElement("path",{d:"M32 16c0-9.94-8.06-16-16-16"},B.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 16 16",to:"360 16 16",dur:"1s",repeatCount:"indefinite"})))))}var oX=Object.defineProperty,Um=Object.getOwnPropertySymbols,IP=Object.prototype.hasOwnProperty,PP=Object.prototype.propertyIsEnumerable,Y4=(e,t,n)=>t in e?oX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Z4=(e,t)=>{for(var n in t||(t={}))IP.call(t,n)&&Y4(e,n,t[n]);if(Um)for(var n of Um(t))PP.call(t,n)&&Y4(e,n,t[n]);return e},J4=(e,t)=>{var n={};for(var r in e)IP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Um)for(var r of Um(e))t.indexOf(r)<0&&PP.call(e,r)&&(n[r]=e[r]);return n};function sX(e){var t=e,{size:n,color:r}=t,o=J4(t,["size","color"]);const s=o,{style:l}=s,c=J4(s,["style"]);return B.createElement("svg",Z4({viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg",fill:r,style:Z4({width:n},l)},c),B.createElement("circle",{cx:"15",cy:"15",r:"15"},B.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("circle",{cx:"60",cy:"15",r:"9",fillOpacity:"0.3"},B.createElement("animate",{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"0.5",to:"0.5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("circle",{cx:"105",cy:"15",r:"15"},B.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})))}var aX=Object.defineProperty,Gm=Object.getOwnPropertySymbols,EP=Object.prototype.hasOwnProperty,MP=Object.prototype.propertyIsEnumerable,ek=(e,t,n)=>t in e?aX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lX=(e,t)=>{for(var n in t||(t={}))EP.call(t,n)&&ek(e,n,t[n]);if(Gm)for(var n of Gm(t))MP.call(t,n)&&ek(e,n,t[n]);return e},iX=(e,t)=>{var n={};for(var r in e)EP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Gm)for(var r of Gm(e))t.indexOf(r)<0&&MP.call(e,r)&&(n[r]=e[r]);return n};const o1={bars:tX,oval:rX,dots:sX},cX={xs:Ae(18),sm:Ae(22),md:Ae(36),lg:Ae(44),xl:Ae(58)},uX={size:"md"};function OP(e){const t=Nn("Loader",uX,e),{size:n,color:r,variant:o}=t,s=iX(t,["size","color","variant"]),l=wa(),c=o in o1?o:l.loader;return B.createElement(Vr,lX({role:"presentation",component:o1[c]||o1.bars,size:pt({size:n,sizes:cX}),color:l.fn.variant({variant:"filled",primaryFallback:!1,color:r||l.primaryColor}).background},s))}OP.displayName="@mantine/core/Loader";var dX=Object.defineProperty,Km=Object.getOwnPropertySymbols,DP=Object.prototype.hasOwnProperty,RP=Object.prototype.propertyIsEnumerable,tk=(e,t,n)=>t in e?dX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nk=(e,t)=>{for(var n in t||(t={}))DP.call(t,n)&&tk(e,n,t[n]);if(Km)for(var n of Km(t))RP.call(t,n)&&tk(e,n,t[n]);return e},fX=(e,t)=>{var n={};for(var r in e)DP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Km)for(var r of Km(e))t.indexOf(r)<0&&RP.call(e,r)&&(n[r]=e[r]);return n};const pX={color:"gray",size:"md",variant:"subtle"},AP=i.forwardRef((e,t)=>{const n=Nn("ActionIcon",pX,e),{className:r,color:o,children:s,radius:l,size:c,variant:d,gradient:f,disabled:m,loaderProps:h,loading:g,unstyled:b,__staticSelector:y}=n,x=fX(n,["className","color","children","radius","size","variant","gradient","disabled","loaderProps","loading","unstyled","__staticSelector"]),{classes:w,cx:S,theme:j}=Jq({radius:l,color:o,gradient:f},{name:["ActionIcon",y],unstyled:b,size:c,variant:d}),_=B.createElement(OP,nk({color:j.fn.variant({color:o,variant:d}).color,size:"100%","data-action-icon-loader":!0},h));return B.createElement(Vq,nk({className:S(w.root,r),ref:t,disabled:m,"data-disabled":m||void 0,"data-loading":g||void 0,unstyled:b},x),g?_:s)});AP.displayName="@mantine/core/ActionIcon";const mX=AP;var hX=Object.defineProperty,gX=Object.defineProperties,vX=Object.getOwnPropertyDescriptors,qm=Object.getOwnPropertySymbols,TP=Object.prototype.hasOwnProperty,NP=Object.prototype.propertyIsEnumerable,rk=(e,t,n)=>t in e?hX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,bX=(e,t)=>{for(var n in t||(t={}))TP.call(t,n)&&rk(e,n,t[n]);if(qm)for(var n of qm(t))NP.call(t,n)&&rk(e,n,t[n]);return e},xX=(e,t)=>gX(e,vX(t)),yX=(e,t)=>{var n={};for(var r in e)TP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qm)for(var r of qm(e))t.indexOf(r)<0&&NP.call(e,r)&&(n[r]=e[r]);return n};function $P(e){const t=Nn("Portal",{},e),{children:n,target:r,className:o,innerRef:s}=t,l=yX(t,["children","target","className","innerRef"]),c=wa(),[d,f]=i.useState(!1),m=i.useRef();return uP(()=>(f(!0),m.current=r?typeof r=="string"?document.querySelector(r):r:document.createElement("div"),r||document.body.appendChild(m.current),()=>{!r&&document.body.removeChild(m.current)}),[r]),d?Jr.createPortal(B.createElement("div",xX(bX({className:o,dir:c.dir},l),{ref:s}),n),m.current):null}$P.displayName="@mantine/core/Portal";var CX=Object.defineProperty,Xm=Object.getOwnPropertySymbols,LP=Object.prototype.hasOwnProperty,FP=Object.prototype.propertyIsEnumerable,ok=(e,t,n)=>t in e?CX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,wX=(e,t)=>{for(var n in t||(t={}))LP.call(t,n)&&ok(e,n,t[n]);if(Xm)for(var n of Xm(t))FP.call(t,n)&&ok(e,n,t[n]);return e},SX=(e,t)=>{var n={};for(var r in e)LP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Xm)for(var r of Xm(e))t.indexOf(r)<0&&FP.call(e,r)&&(n[r]=e[r]);return n};function zP(e){var t=e,{withinPortal:n=!0,children:r}=t,o=SX(t,["withinPortal","children"]);return n?B.createElement($P,wX({},o),r):B.createElement(B.Fragment,null,r)}zP.displayName="@mantine/core/OptionalPortal";var kX=Object.defineProperty,Qm=Object.getOwnPropertySymbols,BP=Object.prototype.hasOwnProperty,HP=Object.prototype.propertyIsEnumerable,sk=(e,t,n)=>t in e?kX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ak=(e,t)=>{for(var n in t||(t={}))BP.call(t,n)&&sk(e,n,t[n]);if(Qm)for(var n of Qm(t))HP.call(t,n)&&sk(e,n,t[n]);return e},jX=(e,t)=>{var n={};for(var r in e)BP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Qm)for(var r of Qm(e))t.indexOf(r)<0&&HP.call(e,r)&&(n[r]=e[r]);return n};function WP(e){const t=e,{width:n,height:r,style:o}=t,s=jX(t,["width","height","style"]);return B.createElement("svg",ak({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:ak({width:n,height:r},o)},s),B.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}WP.displayName="@mantine/core/CloseIcon";var _X=Object.defineProperty,Ym=Object.getOwnPropertySymbols,VP=Object.prototype.hasOwnProperty,UP=Object.prototype.propertyIsEnumerable,lk=(e,t,n)=>t in e?_X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,IX=(e,t)=>{for(var n in t||(t={}))VP.call(t,n)&&lk(e,n,t[n]);if(Ym)for(var n of Ym(t))UP.call(t,n)&&lk(e,n,t[n]);return e},PX=(e,t)=>{var n={};for(var r in e)VP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ym)for(var r of Ym(e))t.indexOf(r)<0&&UP.call(e,r)&&(n[r]=e[r]);return n};const EX={xs:Ae(12),sm:Ae(16),md:Ae(20),lg:Ae(28),xl:Ae(34)},MX={size:"sm"},GP=i.forwardRef((e,t)=>{const n=Nn("CloseButton",MX,e),{iconSize:r,size:o,children:s}=n,l=PX(n,["iconSize","size","children"]),c=Ae(r||EX[o]);return B.createElement(mX,IX({ref:t,__staticSelector:"CloseButton",size:o},l),s||B.createElement(WP,{width:c,height:c}))});GP.displayName="@mantine/core/CloseButton";const KP=GP;var OX=Object.defineProperty,DX=Object.defineProperties,RX=Object.getOwnPropertyDescriptors,ik=Object.getOwnPropertySymbols,AX=Object.prototype.hasOwnProperty,TX=Object.prototype.propertyIsEnumerable,ck=(e,t,n)=>t in e?OX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ap=(e,t)=>{for(var n in t||(t={}))AX.call(t,n)&&ck(e,n,t[n]);if(ik)for(var n of ik(t))TX.call(t,n)&&ck(e,n,t[n]);return e},NX=(e,t)=>DX(e,RX(t));function $X({underline:e,strikethrough:t}){const n=[];return e&&n.push("underline"),t&&n.push("line-through"),n.length>0?n.join(" "):"none"}function LX({theme:e,color:t}){return t==="dimmed"?e.fn.dimmed():typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?e.fn.variant({variant:"filled",color:t}).background:t||"inherit"}function FX(e){return typeof e=="number"?{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical"}:null}function zX({theme:e,truncate:t}){return t==="start"?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",direction:e.dir==="ltr"?"rtl":"ltr",textAlign:e.dir==="ltr"?"right":"left"}:t?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}:null}var BX=gr((e,{color:t,lineClamp:n,truncate:r,inline:o,inherit:s,underline:l,gradient:c,weight:d,transform:f,align:m,strikethrough:h,italic:g},{size:b})=>{const y=e.fn.variant({variant:"gradient",gradient:c});return{root:NX(Ap(Ap(Ap(Ap({},e.fn.fontStyles()),e.fn.focusStyles()),FX(n)),zX({theme:e,truncate:r})),{color:LX({color:t,theme:e}),fontFamily:s?"inherit":e.fontFamily,fontSize:s||b===void 0?"inherit":pt({size:b,sizes:e.fontSizes}),lineHeight:s?"inherit":o?1:e.lineHeight,textDecoration:$X({underline:l,strikethrough:h}),WebkitTapHighlightColor:"transparent",fontWeight:s?"inherit":d,textTransform:f,textAlign:m,fontStyle:g?"italic":void 0}),gradient:{backgroundImage:y.background,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}}});const HX=BX;var WX=Object.defineProperty,Zm=Object.getOwnPropertySymbols,qP=Object.prototype.hasOwnProperty,XP=Object.prototype.propertyIsEnumerable,uk=(e,t,n)=>t in e?WX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,VX=(e,t)=>{for(var n in t||(t={}))qP.call(t,n)&&uk(e,n,t[n]);if(Zm)for(var n of Zm(t))XP.call(t,n)&&uk(e,n,t[n]);return e},UX=(e,t)=>{var n={};for(var r in e)qP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Zm)for(var r of Zm(e))t.indexOf(r)<0&&XP.call(e,r)&&(n[r]=e[r]);return n};const GX={variant:"text"},QP=i.forwardRef((e,t)=>{const n=Nn("Text",GX,e),{className:r,size:o,weight:s,transform:l,color:c,align:d,variant:f,lineClamp:m,truncate:h,gradient:g,inline:b,inherit:y,underline:x,strikethrough:w,italic:S,classNames:j,styles:_,unstyled:I,span:E,__staticSelector:M}=n,D=UX(n,["className","size","weight","transform","color","align","variant","lineClamp","truncate","gradient","inline","inherit","underline","strikethrough","italic","classNames","styles","unstyled","span","__staticSelector"]),{classes:R,cx:N}=HX({color:c,lineClamp:m,truncate:h,inline:b,inherit:y,underline:x,strikethrough:w,italic:S,weight:s,transform:l,align:d,gradient:g},{unstyled:I,name:M||"Text",variant:f,size:o});return B.createElement(Vr,VX({ref:t,className:N(R.root,{[R.gradient]:f==="gradient"},r),component:E?"span":"div"},D))});QP.displayName="@mantine/core/Text";const Oc=QP,Tp={xs:Ae(1),sm:Ae(2),md:Ae(3),lg:Ae(4),xl:Ae(5)};function Np(e,t){const n=e.fn.variant({variant:"outline",color:t}).border;return typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?n:t===void 0?e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]:t}var KX=gr((e,{color:t},{size:n,variant:r})=>({root:{},withLabel:{borderTop:"0 !important"},left:{"&::before":{display:"none"}},right:{"&::after":{display:"none"}},label:{display:"flex",alignItems:"center","&::before":{content:'""',flex:1,height:Ae(1),borderTop:`${pt({size:n,sizes:Tp})} ${r} ${Np(e,t)}`,marginRight:e.spacing.xs},"&::after":{content:'""',flex:1,borderTop:`${pt({size:n,sizes:Tp})} ${r} ${Np(e,t)}`,marginLeft:e.spacing.xs}},labelDefaultStyles:{color:t==="dark"?e.colors.dark[1]:e.fn.themeColor(t,e.colorScheme==="dark"?5:e.fn.primaryShade(),!1)},horizontal:{border:0,borderTopWidth:Ae(pt({size:n,sizes:Tp})),borderTopColor:Np(e,t),borderTopStyle:r,margin:0},vertical:{border:0,alignSelf:"stretch",height:"auto",borderLeftWidth:Ae(pt({size:n,sizes:Tp})),borderLeftColor:Np(e,t),borderLeftStyle:r}}));const qX=KX;var XX=Object.defineProperty,QX=Object.defineProperties,YX=Object.getOwnPropertyDescriptors,Jm=Object.getOwnPropertySymbols,YP=Object.prototype.hasOwnProperty,ZP=Object.prototype.propertyIsEnumerable,dk=(e,t,n)=>t in e?XX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fk=(e,t)=>{for(var n in t||(t={}))YP.call(t,n)&&dk(e,n,t[n]);if(Jm)for(var n of Jm(t))ZP.call(t,n)&&dk(e,n,t[n]);return e},ZX=(e,t)=>QX(e,YX(t)),JX=(e,t)=>{var n={};for(var r in e)YP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Jm)for(var r of Jm(e))t.indexOf(r)<0&&ZP.call(e,r)&&(n[r]=e[r]);return n};const eQ={orientation:"horizontal",size:"xs",labelPosition:"left",variant:"solid"},Eb=i.forwardRef((e,t)=>{const n=Nn("Divider",eQ,e),{className:r,color:o,orientation:s,size:l,label:c,labelPosition:d,labelProps:f,variant:m,styles:h,classNames:g,unstyled:b}=n,y=JX(n,["className","color","orientation","size","label","labelPosition","labelProps","variant","styles","classNames","unstyled"]),{classes:x,cx:w}=qX({color:o},{classNames:g,styles:h,unstyled:b,name:"Divider",variant:m,size:l}),S=s==="vertical",j=s==="horizontal",_=!!c&&j,I=!(f!=null&&f.color);return B.createElement(Vr,fk({ref:t,className:w(x.root,{[x.vertical]:S,[x.horizontal]:j,[x.withLabel]:_},r),role:"separator"},y),_&&B.createElement(Oc,ZX(fk({},f),{size:(f==null?void 0:f.size)||"xs",mt:Ae(2),className:w(x.label,x[d],{[x.labelDefaultStyles]:I})}),c))});Eb.displayName="@mantine/core/Divider";var tQ=Object.defineProperty,nQ=Object.defineProperties,rQ=Object.getOwnPropertyDescriptors,pk=Object.getOwnPropertySymbols,oQ=Object.prototype.hasOwnProperty,sQ=Object.prototype.propertyIsEnumerable,mk=(e,t,n)=>t in e?tQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hk=(e,t)=>{for(var n in t||(t={}))oQ.call(t,n)&&mk(e,n,t[n]);if(pk)for(var n of pk(t))sQ.call(t,n)&&mk(e,n,t[n]);return e},aQ=(e,t)=>nQ(e,rQ(t)),lQ=gr((e,t,{size:n})=>({item:aQ(hk({},e.fn.fontStyles()),{boxSizing:"border-box",wordBreak:"break-all",textAlign:"left",width:"100%",padding:`calc(${pt({size:n,sizes:e.spacing})} / 1.5) ${pt({size:n,sizes:e.spacing})}`,cursor:"pointer",fontSize:pt({size:n,sizes:e.fontSizes}),color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,borderRadius:e.fn.radius(),"&[data-hovered]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[1]},"&[data-selected]":hk({backgroundColor:e.fn.variant({variant:"filled"}).background,color:e.fn.variant({variant:"filled"}).color},e.fn.hover({backgroundColor:e.fn.variant({variant:"filled"}).hover})),"&[data-disabled]":{cursor:"default",color:e.colors.dark[2]}}),nothingFound:{boxSizing:"border-box",color:e.colors.gray[6],paddingTop:`calc(${pt({size:n,sizes:e.spacing})} / 2)`,paddingBottom:`calc(${pt({size:n,sizes:e.spacing})} / 2)`,textAlign:"center"},separator:{boxSizing:"border-box",textAlign:"left",width:"100%",padding:`calc(${pt({size:n,sizes:e.spacing})} / 1.5) ${pt({size:n,sizes:e.spacing})}`},separatorLabel:{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]}}));const iQ=lQ;var cQ=Object.defineProperty,gk=Object.getOwnPropertySymbols,uQ=Object.prototype.hasOwnProperty,dQ=Object.prototype.propertyIsEnumerable,vk=(e,t,n)=>t in e?cQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fQ=(e,t)=>{for(var n in t||(t={}))uQ.call(t,n)&&vk(e,n,t[n]);if(gk)for(var n of gk(t))dQ.call(t,n)&&vk(e,n,t[n]);return e};function Ay({data:e,hovered:t,classNames:n,styles:r,isItemSelected:o,uuid:s,__staticSelector:l,onItemHover:c,onItemSelect:d,itemsRefs:f,itemComponent:m,size:h,nothingFound:g,creatable:b,createLabel:y,unstyled:x,variant:w}){const{classes:S}=iQ(null,{classNames:n,styles:r,unstyled:x,name:l,variant:w,size:h}),j=[],_=[];let I=null;const E=(D,R)=>{const N=typeof o=="function"?o(D.value):!1;return B.createElement(m,fQ({key:D.value,className:S.item,"data-disabled":D.disabled||void 0,"data-hovered":!D.disabled&&t===R||void 0,"data-selected":!D.disabled&&N||void 0,selected:N,onMouseEnter:()=>c(R),id:`${s}-${R}`,role:"option",tabIndex:-1,"aria-selected":t===R,ref:O=>{f&&f.current&&(f.current[D.value]=O)},onMouseDown:D.disabled?null:O=>{O.preventDefault(),d(D)},disabled:D.disabled,variant:w},D))};let M=null;if(e.forEach((D,R)=>{D.creatable?I=R:D.group?(M!==D.group&&(M=D.group,_.push(B.createElement("div",{className:S.separator,key:`__mantine-divider-${R}`},B.createElement(Eb,{classNames:{label:S.separatorLabel},label:D.group})))),_.push(E(D,R))):j.push(E(D,R))}),b){const D=e[I];j.push(B.createElement("div",{key:Dy(),className:S.item,"data-hovered":t===I||void 0,onMouseEnter:()=>c(I),onMouseDown:R=>{R.preventDefault(),d(D)},tabIndex:-1,ref:R=>{f&&f.current&&(f.current[D.value]=R)}},y))}return _.length>0&&j.length>0&&j.unshift(B.createElement("div",{className:S.separator,key:"empty-group-separator"},B.createElement(Eb,null))),_.length>0||j.length>0?B.createElement(B.Fragment,null,_,j):B.createElement(Oc,{size:h,unstyled:x,className:S.nothingFound},g)}Ay.displayName="@mantine/core/SelectItems";var pQ=Object.defineProperty,eh=Object.getOwnPropertySymbols,JP=Object.prototype.hasOwnProperty,eE=Object.prototype.propertyIsEnumerable,bk=(e,t,n)=>t in e?pQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mQ=(e,t)=>{for(var n in t||(t={}))JP.call(t,n)&&bk(e,n,t[n]);if(eh)for(var n of eh(t))eE.call(t,n)&&bk(e,n,t[n]);return e},hQ=(e,t)=>{var n={};for(var r in e)JP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&eh)for(var r of eh(e))t.indexOf(r)<0&&eE.call(e,r)&&(n[r]=e[r]);return n};const Ty=i.forwardRef((e,t)=>{var n=e,{label:r,value:o}=n,s=hQ(n,["label","value"]);return B.createElement("div",mQ({ref:t},s),r||o)});Ty.displayName="@mantine/core/DefaultItem";function gQ(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function tE(...e){return t=>e.forEach(n=>gQ(n,t))}function di(...e){return i.useCallback(tE(...e),e)}const nE=i.forwardRef((e,t)=>{const{children:n,...r}=e,o=i.Children.toArray(n),s=o.find(bQ);if(s){const l=s.props.children,c=o.map(d=>d===s?i.Children.count(l)>1?i.Children.only(null):i.isValidElement(l)?l.props.children:null:d);return i.createElement(Mb,bn({},r,{ref:t}),i.isValidElement(l)?i.cloneElement(l,void 0,c):null)}return i.createElement(Mb,bn({},r,{ref:t}),n)});nE.displayName="Slot";const Mb=i.forwardRef((e,t)=>{const{children:n,...r}=e;return i.isValidElement(n)?i.cloneElement(n,{...xQ(r,n.props),ref:tE(t,n.ref)}):i.Children.count(n)>1?i.Children.only(null):null});Mb.displayName="SlotClone";const vQ=({children:e})=>i.createElement(i.Fragment,null,e);function bQ(e){return i.isValidElement(e)&&e.type===vQ}function xQ(e,t){const n={...t};for(const r in t){const o=e[r],s=t[r];/^on[A-Z]/.test(r)?o&&s?n[r]=(...c)=>{s(...c),o(...c)}:o&&(n[r]=o):r==="style"?n[r]={...o,...s}:r==="className"&&(n[r]=[o,s].filter(Boolean).join(" "))}return{...e,...n}}const yQ=["a","button","div","h2","h3","img","label","li","nav","ol","p","span","svg","ul"],ff=yQ.reduce((e,t)=>{const n=i.forwardRef((r,o)=>{const{asChild:s,...l}=r,c=s?nE:t;return i.useEffect(()=>{window[Symbol.for("radix-ui")]=!0},[]),i.createElement(c,bn({},l,{ref:o}))});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{}),Ob=globalThis!=null&&globalThis.document?i.useLayoutEffect:()=>{};function CQ(e,t){return i.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const pf=e=>{const{present:t,children:n}=e,r=wQ(t),o=typeof n=="function"?n({present:r.isPresent}):i.Children.only(n),s=di(r.ref,o.ref);return typeof n=="function"||r.isPresent?i.cloneElement(o,{ref:s}):null};pf.displayName="Presence";function wQ(e){const[t,n]=i.useState(),r=i.useRef({}),o=i.useRef(e),s=i.useRef("none"),l=e?"mounted":"unmounted",[c,d]=CQ(l,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return i.useEffect(()=>{const f=$p(r.current);s.current=c==="mounted"?f:"none"},[c]),Ob(()=>{const f=r.current,m=o.current;if(m!==e){const g=s.current,b=$p(f);e?d("MOUNT"):b==="none"||(f==null?void 0:f.display)==="none"?d("UNMOUNT"):d(m&&g!==b?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),Ob(()=>{if(t){const f=h=>{const b=$p(r.current).includes(h.animationName);h.target===t&&b&&Jr.flushSync(()=>d("ANIMATION_END"))},m=h=>{h.target===t&&(s.current=$p(r.current))};return t.addEventListener("animationstart",m),t.addEventListener("animationcancel",f),t.addEventListener("animationend",f),()=>{t.removeEventListener("animationstart",m),t.removeEventListener("animationcancel",f),t.removeEventListener("animationend",f)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:i.useCallback(f=>{f&&(r.current=getComputedStyle(f)),n(f)},[])}}function $p(e){return(e==null?void 0:e.animationName)||"none"}function SQ(e,t=[]){let n=[];function r(s,l){const c=i.createContext(l),d=n.length;n=[...n,l];function f(h){const{scope:g,children:b,...y}=h,x=(g==null?void 0:g[e][d])||c,w=i.useMemo(()=>y,Object.values(y));return i.createElement(x.Provider,{value:w},b)}function m(h,g){const b=(g==null?void 0:g[e][d])||c,y=i.useContext(b);if(y)return y;if(l!==void 0)return l;throw new Error(`\`${h}\` must be used within \`${s}\``)}return f.displayName=s+"Provider",[f,m]}const o=()=>{const s=n.map(l=>i.createContext(l));return function(c){const d=(c==null?void 0:c[e])||s;return i.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[r,kQ(o,...t)]}function kQ(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const l=r.reduce((c,{useScope:d,scopeName:f})=>{const h=d(s)[`__scope${f}`];return{...c,...h}},{});return i.useMemo(()=>({[`__scope${t.scopeName}`]:l}),[l])}};return n.scopeName=t.scopeName,n}function zl(e){const t=i.useRef(e);return i.useEffect(()=>{t.current=e}),i.useMemo(()=>(...n)=>{var r;return(r=t.current)===null||r===void 0?void 0:r.call(t,...n)},[])}const jQ=i.createContext(void 0);function _Q(e){const t=i.useContext(jQ);return e||t||"ltr"}function IQ(e,[t,n]){return Math.min(n,Math.max(t,e))}function Kl(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function PQ(e,t){return i.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const rE="ScrollArea",[oE,jye]=SQ(rE),[EQ,To]=oE(rE),MQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,type:r="hover",dir:o,scrollHideDelay:s=600,...l}=e,[c,d]=i.useState(null),[f,m]=i.useState(null),[h,g]=i.useState(null),[b,y]=i.useState(null),[x,w]=i.useState(null),[S,j]=i.useState(0),[_,I]=i.useState(0),[E,M]=i.useState(!1),[D,R]=i.useState(!1),N=di(t,T=>d(T)),O=_Q(o);return i.createElement(EQ,{scope:n,type:r,dir:O,scrollHideDelay:s,scrollArea:c,viewport:f,onViewportChange:m,content:h,onContentChange:g,scrollbarX:b,onScrollbarXChange:y,scrollbarXEnabled:E,onScrollbarXEnabledChange:M,scrollbarY:x,onScrollbarYChange:w,scrollbarYEnabled:D,onScrollbarYEnabledChange:R,onCornerWidthChange:j,onCornerHeightChange:I},i.createElement(ff.div,bn({dir:O},l,{ref:N,style:{position:"relative","--radix-scroll-area-corner-width":S+"px","--radix-scroll-area-corner-height":_+"px",...e.style}})))}),OQ="ScrollAreaViewport",DQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,children:r,...o}=e,s=To(OQ,n),l=i.useRef(null),c=di(t,l,s.onViewportChange);return i.createElement(i.Fragment,null,i.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"}}),i.createElement(ff.div,bn({"data-radix-scroll-area-viewport":""},o,{ref:c,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...e.style}}),i.createElement("div",{ref:s.onContentChange,style:{minWidth:"100%",display:"table"}},r)))}),ka="ScrollAreaScrollbar",RQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),{onScrollbarXEnabledChange:s,onScrollbarYEnabledChange:l}=o,c=e.orientation==="horizontal";return i.useEffect(()=>(c?s(!0):l(!0),()=>{c?s(!1):l(!1)}),[c,s,l]),o.type==="hover"?i.createElement(AQ,bn({},r,{ref:t,forceMount:n})):o.type==="scroll"?i.createElement(TQ,bn({},r,{ref:t,forceMount:n})):o.type==="auto"?i.createElement(sE,bn({},r,{ref:t,forceMount:n})):o.type==="always"?i.createElement(Ny,bn({},r,{ref:t})):null}),AQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),[s,l]=i.useState(!1);return i.useEffect(()=>{const c=o.scrollArea;let d=0;if(c){const f=()=>{window.clearTimeout(d),l(!0)},m=()=>{d=window.setTimeout(()=>l(!1),o.scrollHideDelay)};return c.addEventListener("pointerenter",f),c.addEventListener("pointerleave",m),()=>{window.clearTimeout(d),c.removeEventListener("pointerenter",f),c.removeEventListener("pointerleave",m)}}},[o.scrollArea,o.scrollHideDelay]),i.createElement(pf,{present:n||s},i.createElement(sE,bn({"data-state":s?"visible":"hidden"},r,{ref:t})))}),TQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),s=e.orientation==="horizontal",l=Og(()=>d("SCROLL_END"),100),[c,d]=PQ("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return i.useEffect(()=>{if(c==="idle"){const f=window.setTimeout(()=>d("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(f)}},[c,o.scrollHideDelay,d]),i.useEffect(()=>{const f=o.viewport,m=s?"scrollLeft":"scrollTop";if(f){let h=f[m];const g=()=>{const b=f[m];h!==b&&(d("SCROLL"),l()),h=b};return f.addEventListener("scroll",g),()=>f.removeEventListener("scroll",g)}},[o.viewport,s,d,l]),i.createElement(pf,{present:n||c!=="hidden"},i.createElement(Ny,bn({"data-state":c==="hidden"?"hidden":"visible"},r,{ref:t,onPointerEnter:Kl(e.onPointerEnter,()=>d("POINTER_ENTER")),onPointerLeave:Kl(e.onPointerLeave,()=>d("POINTER_LEAVE"))})))}),sE=i.forwardRef((e,t)=>{const n=To(ka,e.__scopeScrollArea),{forceMount:r,...o}=e,[s,l]=i.useState(!1),c=e.orientation==="horizontal",d=Og(()=>{if(n.viewport){const f=n.viewport.offsetWidth{const{orientation:n="vertical",...r}=e,o=To(ka,e.__scopeScrollArea),s=i.useRef(null),l=i.useRef(0),[c,d]=i.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),f=cE(c.viewport,c.content),m={...r,sizes:c,onSizesChange:d,hasThumb:f>0&&f<1,onThumbChange:g=>s.current=g,onThumbPointerUp:()=>l.current=0,onThumbPointerDown:g=>l.current=g};function h(g,b){return WQ(g,l.current,c,b)}return n==="horizontal"?i.createElement(NQ,bn({},m,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const g=o.viewport.scrollLeft,b=xk(g,c,o.dir);s.current.style.transform=`translate3d(${b}px, 0, 0)`}},onWheelScroll:g=>{o.viewport&&(o.viewport.scrollLeft=g)},onDragScroll:g=>{o.viewport&&(o.viewport.scrollLeft=h(g,o.dir))}})):n==="vertical"?i.createElement($Q,bn({},m,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const g=o.viewport.scrollTop,b=xk(g,c);s.current.style.transform=`translate3d(0, ${b}px, 0)`}},onWheelScroll:g=>{o.viewport&&(o.viewport.scrollTop=g)},onDragScroll:g=>{o.viewport&&(o.viewport.scrollTop=h(g))}})):null}),NQ=i.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=To(ka,e.__scopeScrollArea),[l,c]=i.useState(),d=i.useRef(null),f=di(t,d,s.onScrollbarXChange);return i.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),i.createElement(lE,bn({"data-orientation":"horizontal"},o,{ref:f,sizes:n,style:{bottom:0,left:s.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:s.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Mg(n)+"px",...e.style},onThumbPointerDown:m=>e.onThumbPointerDown(m.x),onDragScroll:m=>e.onDragScroll(m.x),onWheelScroll:(m,h)=>{if(s.viewport){const g=s.viewport.scrollLeft+m.deltaX;e.onWheelScroll(g),dE(g,h)&&m.preventDefault()}},onResize:()=>{d.current&&s.viewport&&l&&r({content:s.viewport.scrollWidth,viewport:s.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:th(l.paddingLeft),paddingEnd:th(l.paddingRight)}})}}))}),$Q=i.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=To(ka,e.__scopeScrollArea),[l,c]=i.useState(),d=i.useRef(null),f=di(t,d,s.onScrollbarYChange);return i.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),i.createElement(lE,bn({"data-orientation":"vertical"},o,{ref:f,sizes:n,style:{top:0,right:s.dir==="ltr"?0:void 0,left:s.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Mg(n)+"px",...e.style},onThumbPointerDown:m=>e.onThumbPointerDown(m.y),onDragScroll:m=>e.onDragScroll(m.y),onWheelScroll:(m,h)=>{if(s.viewport){const g=s.viewport.scrollTop+m.deltaY;e.onWheelScroll(g),dE(g,h)&&m.preventDefault()}},onResize:()=>{d.current&&s.viewport&&l&&r({content:s.viewport.scrollHeight,viewport:s.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:th(l.paddingTop),paddingEnd:th(l.paddingBottom)}})}}))}),[LQ,aE]=oE(ka),lE=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:o,onThumbChange:s,onThumbPointerUp:l,onThumbPointerDown:c,onThumbPositionChange:d,onDragScroll:f,onWheelScroll:m,onResize:h,...g}=e,b=To(ka,n),[y,x]=i.useState(null),w=di(t,N=>x(N)),S=i.useRef(null),j=i.useRef(""),_=b.viewport,I=r.content-r.viewport,E=zl(m),M=zl(d),D=Og(h,10);function R(N){if(S.current){const O=N.clientX-S.current.left,T=N.clientY-S.current.top;f({x:O,y:T})}}return i.useEffect(()=>{const N=O=>{const T=O.target;(y==null?void 0:y.contains(T))&&E(O,I)};return document.addEventListener("wheel",N,{passive:!1}),()=>document.removeEventListener("wheel",N,{passive:!1})},[_,y,I,E]),i.useEffect(M,[r,M]),Dc(y,D),Dc(b.content,D),i.createElement(LQ,{scope:n,scrollbar:y,hasThumb:o,onThumbChange:zl(s),onThumbPointerUp:zl(l),onThumbPositionChange:M,onThumbPointerDown:zl(c)},i.createElement(ff.div,bn({},g,{ref:w,style:{position:"absolute",...g.style},onPointerDown:Kl(e.onPointerDown,N=>{N.button===0&&(N.target.setPointerCapture(N.pointerId),S.current=y.getBoundingClientRect(),j.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",R(N))}),onPointerMove:Kl(e.onPointerMove,R),onPointerUp:Kl(e.onPointerUp,N=>{const O=N.target;O.hasPointerCapture(N.pointerId)&&O.releasePointerCapture(N.pointerId),document.body.style.webkitUserSelect=j.current,S.current=null})})))}),Db="ScrollAreaThumb",FQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=aE(Db,e.__scopeScrollArea);return i.createElement(pf,{present:n||o.hasThumb},i.createElement(zQ,bn({ref:t},r)))}),zQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,style:r,...o}=e,s=To(Db,n),l=aE(Db,n),{onThumbPositionChange:c}=l,d=di(t,h=>l.onThumbChange(h)),f=i.useRef(),m=Og(()=>{f.current&&(f.current(),f.current=void 0)},100);return i.useEffect(()=>{const h=s.viewport;if(h){const g=()=>{if(m(),!f.current){const b=VQ(h,c);f.current=b,c()}};return c(),h.addEventListener("scroll",g),()=>h.removeEventListener("scroll",g)}},[s.viewport,m,c]),i.createElement(ff.div,bn({"data-state":l.hasThumb?"visible":"hidden"},o,{ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:Kl(e.onPointerDownCapture,h=>{const b=h.target.getBoundingClientRect(),y=h.clientX-b.left,x=h.clientY-b.top;l.onThumbPointerDown({x:y,y:x})}),onPointerUp:Kl(e.onPointerUp,l.onThumbPointerUp)}))}),iE="ScrollAreaCorner",BQ=i.forwardRef((e,t)=>{const n=To(iE,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?i.createElement(HQ,bn({},e,{ref:t})):null}),HQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,...r}=e,o=To(iE,n),[s,l]=i.useState(0),[c,d]=i.useState(0),f=!!(s&&c);return Dc(o.scrollbarX,()=>{var m;const h=((m=o.scrollbarX)===null||m===void 0?void 0:m.offsetHeight)||0;o.onCornerHeightChange(h),d(h)}),Dc(o.scrollbarY,()=>{var m;const h=((m=o.scrollbarY)===null||m===void 0?void 0:m.offsetWidth)||0;o.onCornerWidthChange(h),l(h)}),f?i.createElement(ff.div,bn({},r,{ref:t,style:{width:s,height:c,position:"absolute",right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:0,...e.style}})):null});function th(e){return e?parseInt(e,10):0}function cE(e,t){const n=e/t;return isNaN(n)?0:n}function Mg(e){const t=cE(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function WQ(e,t,n,r="ltr"){const o=Mg(n),s=o/2,l=t||s,c=o-l,d=n.scrollbar.paddingStart+l,f=n.scrollbar.size-n.scrollbar.paddingEnd-c,m=n.content-n.viewport,h=r==="ltr"?[0,m]:[m*-1,0];return uE([d,f],h)(e)}function xk(e,t,n="ltr"){const r=Mg(t),o=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,s=t.scrollbar.size-o,l=t.content-t.viewport,c=s-r,d=n==="ltr"?[0,l]:[l*-1,0],f=IQ(e,d);return uE([0,l],[0,c])(f)}function uE(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function dE(e,t){return e>0&&e{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return function o(){const s={left:e.scrollLeft,top:e.scrollTop},l=n.left!==s.left,c=n.top!==s.top;(l||c)&&t(),n=s,r=window.requestAnimationFrame(o)}(),()=>window.cancelAnimationFrame(r)};function Og(e,t){const n=zl(e),r=i.useRef(0);return i.useEffect(()=>()=>window.clearTimeout(r.current),[]),i.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function Dc(e,t){const n=zl(t);Ob(()=>{let r=0;if(e){const o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return o.observe(e),()=>{window.cancelAnimationFrame(r),o.unobserve(e)}}},[e,n])}const UQ=MQ,GQ=DQ,yk=RQ,Ck=FQ,KQ=BQ;var qQ=gr((e,{scrollbarSize:t,offsetScrollbars:n,scrollbarHovered:r,hidden:o})=>({root:{overflow:"hidden"},viewport:{width:"100%",height:"100%",paddingRight:n?Ae(t):void 0,paddingBottom:n?Ae(t):void 0},scrollbar:{display:o?"none":"flex",userSelect:"none",touchAction:"none",boxSizing:"border-box",padding:`calc(${Ae(t)} / 5)`,transition:"background-color 150ms ease, opacity 150ms ease","&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[8]:e.colors.gray[0],[`& .${_4("thumb")}`]:{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.5):e.fn.rgba(e.black,.5)}},'&[data-orientation="vertical"]':{width:Ae(t)},'&[data-orientation="horizontal"]':{flexDirection:"column",height:Ae(t)},'&[data-state="hidden"]':{display:"none",opacity:0}},thumb:{ref:_4("thumb"),flex:1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.4):e.fn.rgba(e.black,.4),borderRadius:Ae(t),position:"relative",transition:"background-color 150ms ease",display:o?"none":void 0,overflow:"hidden","&::before":{content:'""',position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:"100%",height:"100%",minWidth:Ae(44),minHeight:Ae(44)}},corner:{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],transition:"opacity 150ms ease",opacity:r?1:0,display:o?"none":void 0}}));const XQ=qQ;var QQ=Object.defineProperty,YQ=Object.defineProperties,ZQ=Object.getOwnPropertyDescriptors,nh=Object.getOwnPropertySymbols,fE=Object.prototype.hasOwnProperty,pE=Object.prototype.propertyIsEnumerable,wk=(e,t,n)=>t in e?QQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Rb=(e,t)=>{for(var n in t||(t={}))fE.call(t,n)&&wk(e,n,t[n]);if(nh)for(var n of nh(t))pE.call(t,n)&&wk(e,n,t[n]);return e},mE=(e,t)=>YQ(e,ZQ(t)),hE=(e,t)=>{var n={};for(var r in e)fE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&nh)for(var r of nh(e))t.indexOf(r)<0&&pE.call(e,r)&&(n[r]=e[r]);return n};const gE={scrollbarSize:12,scrollHideDelay:1e3,type:"hover",offsetScrollbars:!1},Dg=i.forwardRef((e,t)=>{const n=Nn("ScrollArea",gE,e),{children:r,className:o,classNames:s,styles:l,scrollbarSize:c,scrollHideDelay:d,type:f,dir:m,offsetScrollbars:h,viewportRef:g,onScrollPositionChange:b,unstyled:y,variant:x,viewportProps:w}=n,S=hE(n,["children","className","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","variant","viewportProps"]),[j,_]=i.useState(!1),I=wa(),{classes:E,cx:M}=XQ({scrollbarSize:c,offsetScrollbars:h,scrollbarHovered:j,hidden:f==="never"},{name:"ScrollArea",classNames:s,styles:l,unstyled:y,variant:x});return B.createElement(UQ,{type:f==="never"?"always":f,scrollHideDelay:d,dir:m||I.dir,ref:t,asChild:!0},B.createElement(Vr,Rb({className:M(E.root,o)},S),B.createElement(GQ,mE(Rb({},w),{className:E.viewport,ref:g,onScroll:typeof b=="function"?({currentTarget:D})=>b({x:D.scrollLeft,y:D.scrollTop}):void 0}),r),B.createElement(yk,{orientation:"horizontal",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1)},B.createElement(Ck,{className:E.thumb})),B.createElement(yk,{orientation:"vertical",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1)},B.createElement(Ck,{className:E.thumb})),B.createElement(KQ,{className:E.corner})))}),vE=i.forwardRef((e,t)=>{const n=Nn("ScrollAreaAutosize",gE,e),{children:r,classNames:o,styles:s,scrollbarSize:l,scrollHideDelay:c,type:d,dir:f,offsetScrollbars:m,viewportRef:h,onScrollPositionChange:g,unstyled:b,sx:y,variant:x,viewportProps:w}=n,S=hE(n,["children","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","sx","variant","viewportProps"]);return B.createElement(Vr,mE(Rb({},S),{ref:t,sx:[{display:"flex"},...oP(y)]}),B.createElement(Vr,{sx:{display:"flex",flexDirection:"column",flex:1}},B.createElement(Dg,{classNames:o,styles:s,scrollHideDelay:c,scrollbarSize:l,type:d,dir:f,offsetScrollbars:m,viewportRef:h,onScrollPositionChange:g,unstyled:b,variant:x,viewportProps:w},r)))});vE.displayName="@mantine/core/ScrollAreaAutosize";Dg.displayName="@mantine/core/ScrollArea";Dg.Autosize=vE;const bE=Dg;var JQ=Object.defineProperty,eY=Object.defineProperties,tY=Object.getOwnPropertyDescriptors,rh=Object.getOwnPropertySymbols,xE=Object.prototype.hasOwnProperty,yE=Object.prototype.propertyIsEnumerable,Sk=(e,t,n)=>t in e?JQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,kk=(e,t)=>{for(var n in t||(t={}))xE.call(t,n)&&Sk(e,n,t[n]);if(rh)for(var n of rh(t))yE.call(t,n)&&Sk(e,n,t[n]);return e},nY=(e,t)=>eY(e,tY(t)),rY=(e,t)=>{var n={};for(var r in e)xE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&rh)for(var r of rh(e))t.indexOf(r)<0&&yE.call(e,r)&&(n[r]=e[r]);return n};const Rg=i.forwardRef((e,t)=>{var n=e,{style:r}=n,o=rY(n,["style"]);return B.createElement(bE,nY(kk({},o),{style:kk({width:"100%"},r),viewportProps:{tabIndex:-1},viewportRef:t}),o.children)});Rg.displayName="@mantine/core/SelectScrollArea";var oY=gr(()=>({dropdown:{},itemsWrapper:{padding:Ae(4),display:"flex",width:"100%",boxSizing:"border-box"}}));const sY=oY,is=Math.min,fr=Math.max,oh=Math.round,Lp=Math.floor,ll=e=>({x:e,y:e}),aY={left:"right",right:"left",bottom:"top",top:"bottom"},lY={start:"end",end:"start"};function Ab(e,t,n){return fr(e,is(t,n))}function ua(e,t){return typeof e=="function"?e(t):e}function cs(e){return e.split("-")[0]}function tu(e){return e.split("-")[1]}function $y(e){return e==="x"?"y":"x"}function Ly(e){return e==="y"?"height":"width"}function fi(e){return["top","bottom"].includes(cs(e))?"y":"x"}function Fy(e){return $y(fi(e))}function iY(e,t,n){n===void 0&&(n=!1);const r=tu(e),o=Fy(e),s=Ly(o);let l=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(l=sh(l)),[l,sh(l)]}function cY(e){const t=sh(e);return[Tb(e),t,Tb(t)]}function Tb(e){return e.replace(/start|end/g,t=>lY[t])}function uY(e,t,n){const r=["left","right"],o=["right","left"],s=["top","bottom"],l=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?s:l;default:return[]}}function dY(e,t,n,r){const o=tu(e);let s=uY(cs(e),n==="start",r);return o&&(s=s.map(l=>l+"-"+o),t&&(s=s.concat(s.map(Tb)))),s}function sh(e){return e.replace(/left|right|bottom|top/g,t=>aY[t])}function fY(e){return{top:0,right:0,bottom:0,left:0,...e}}function zy(e){return typeof e!="number"?fY(e):{top:e,right:e,bottom:e,left:e}}function Rc(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function jk(e,t,n){let{reference:r,floating:o}=e;const s=fi(t),l=Fy(t),c=Ly(l),d=cs(t),f=s==="y",m=r.x+r.width/2-o.width/2,h=r.y+r.height/2-o.height/2,g=r[c]/2-o[c]/2;let b;switch(d){case"top":b={x:m,y:r.y-o.height};break;case"bottom":b={x:m,y:r.y+r.height};break;case"right":b={x:r.x+r.width,y:h};break;case"left":b={x:r.x-o.width,y:h};break;default:b={x:r.x,y:r.y}}switch(tu(t)){case"start":b[l]-=g*(n&&f?-1:1);break;case"end":b[l]+=g*(n&&f?-1:1);break}return b}const pY=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:s=[],platform:l}=n,c=s.filter(Boolean),d=await(l.isRTL==null?void 0:l.isRTL(t));let f=await l.getElementRects({reference:e,floating:t,strategy:o}),{x:m,y:h}=jk(f,r,d),g=r,b={},y=0;for(let x=0;x({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:s,platform:l,elements:c,middlewareData:d}=t,{element:f,padding:m=0}=ua(e,t)||{};if(f==null)return{};const h=zy(m),g={x:n,y:r},b=Fy(o),y=Ly(b),x=await l.getDimensions(f),w=b==="y",S=w?"top":"left",j=w?"bottom":"right",_=w?"clientHeight":"clientWidth",I=s.reference[y]+s.reference[b]-g[b]-s.floating[y],E=g[b]-s.reference[b],M=await(l.getOffsetParent==null?void 0:l.getOffsetParent(f));let D=M?M[_]:0;(!D||!await(l.isElement==null?void 0:l.isElement(M)))&&(D=c.floating[_]||s.floating[y]);const R=I/2-E/2,N=D/2-x[y]/2-1,O=is(h[S],N),T=is(h[j],N),U=O,G=D-x[y]-T,q=D/2-x[y]/2+R,Y=Ab(U,q,G),Q=!d.arrow&&tu(o)!=null&&q!=Y&&s.reference[y]/2-(qU<=0)){var N,O;const U=(((N=s.flip)==null?void 0:N.index)||0)+1,G=E[U];if(G)return{data:{index:U,overflows:R},reset:{placement:G}};let q=(O=R.filter(Y=>Y.overflows[0]<=0).sort((Y,Q)=>Y.overflows[1]-Q.overflows[1])[0])==null?void 0:O.placement;if(!q)switch(b){case"bestFit":{var T;const Y=(T=R.map(Q=>[Q.placement,Q.overflows.filter(V=>V>0).reduce((V,se)=>V+se,0)]).sort((Q,V)=>Q[1]-V[1])[0])==null?void 0:T[0];Y&&(q=Y);break}case"initialPlacement":q=c;break}if(o!==q)return{reset:{placement:q}}}return{}}}};function CE(e){const t=is(...e.map(s=>s.left)),n=is(...e.map(s=>s.top)),r=fr(...e.map(s=>s.right)),o=fr(...e.map(s=>s.bottom));return{x:t,y:n,width:r-t,height:o-n}}function hY(e){const t=e.slice().sort((o,s)=>o.y-s.y),n=[];let r=null;for(let o=0;or.height/2?n.push([s]):n[n.length-1].push(s),r=s}return n.map(o=>Rc(CE(o)))}const gY=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:n,elements:r,rects:o,platform:s,strategy:l}=t,{padding:c=2,x:d,y:f}=ua(e,t),m=Array.from(await(s.getClientRects==null?void 0:s.getClientRects(r.reference))||[]),h=hY(m),g=Rc(CE(m)),b=zy(c);function y(){if(h.length===2&&h[0].left>h[1].right&&d!=null&&f!=null)return h.find(w=>d>w.left-b.left&&dw.top-b.top&&f=2){if(fi(n)==="y"){const O=h[0],T=h[h.length-1],U=cs(n)==="top",G=O.top,q=T.bottom,Y=U?O.left:T.left,Q=U?O.right:T.right,V=Q-Y,se=q-G;return{top:G,bottom:q,left:Y,right:Q,width:V,height:se,x:Y,y:G}}const w=cs(n)==="left",S=fr(...h.map(O=>O.right)),j=is(...h.map(O=>O.left)),_=h.filter(O=>w?O.left===j:O.right===S),I=_[0].top,E=_[_.length-1].bottom,M=j,D=S,R=D-M,N=E-I;return{top:I,bottom:E,left:M,right:D,width:R,height:N,x:M,y:I}}return g}const x=await s.getElementRects({reference:{getBoundingClientRect:y},floating:r.floating,strategy:l});return o.reference.x!==x.reference.x||o.reference.y!==x.reference.y||o.reference.width!==x.reference.width||o.reference.height!==x.reference.height?{reset:{rects:x}}:{}}}};async function vY(e,t){const{placement:n,platform:r,elements:o}=e,s=await(r.isRTL==null?void 0:r.isRTL(o.floating)),l=cs(n),c=tu(n),d=fi(n)==="y",f=["left","top"].includes(l)?-1:1,m=s&&d?-1:1,h=ua(t,e);let{mainAxis:g,crossAxis:b,alignmentAxis:y}=typeof h=="number"?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...h};return c&&typeof y=="number"&&(b=c==="end"?y*-1:y),d?{x:b*m,y:g*f}:{x:g*f,y:b*m}}const bY=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){const{x:n,y:r}=t,o=await vY(t,e);return{x:n+o.x,y:r+o.y,data:o}}}},xY=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:s=!0,crossAxis:l=!1,limiter:c={fn:w=>{let{x:S,y:j}=w;return{x:S,y:j}}},...d}=ua(e,t),f={x:n,y:r},m=await By(t,d),h=fi(cs(o)),g=$y(h);let b=f[g],y=f[h];if(s){const w=g==="y"?"top":"left",S=g==="y"?"bottom":"right",j=b+m[w],_=b-m[S];b=Ab(j,b,_)}if(l){const w=h==="y"?"top":"left",S=h==="y"?"bottom":"right",j=y+m[w],_=y-m[S];y=Ab(j,y,_)}const x=c.fn({...t,[g]:b,[h]:y});return{...x,data:{x:x.x-n,y:x.y-r}}}}},yY=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:s,middlewareData:l}=t,{offset:c=0,mainAxis:d=!0,crossAxis:f=!0}=ua(e,t),m={x:n,y:r},h=fi(o),g=$y(h);let b=m[g],y=m[h];const x=ua(c,t),w=typeof x=="number"?{mainAxis:x,crossAxis:0}:{mainAxis:0,crossAxis:0,...x};if(d){const _=g==="y"?"height":"width",I=s.reference[g]-s.floating[_]+w.mainAxis,E=s.reference[g]+s.reference[_]-w.mainAxis;bE&&(b=E)}if(f){var S,j;const _=g==="y"?"width":"height",I=["top","left"].includes(cs(o)),E=s.reference[h]-s.floating[_]+(I&&((S=l.offset)==null?void 0:S[h])||0)+(I?0:w.crossAxis),M=s.reference[h]+s.reference[_]+(I?0:((j=l.offset)==null?void 0:j[h])||0)-(I?w.crossAxis:0);yM&&(y=M)}return{[g]:b,[h]:y}}}},CY=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:r,platform:o,elements:s}=t,{apply:l=()=>{},...c}=ua(e,t),d=await By(t,c),f=cs(n),m=tu(n),h=fi(n)==="y",{width:g,height:b}=r.floating;let y,x;f==="top"||f==="bottom"?(y=f,x=m===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?"start":"end")?"left":"right"):(x=f,y=m==="end"?"top":"bottom");const w=b-d[y],S=g-d[x],j=!t.middlewareData.shift;let _=w,I=S;if(h){const M=g-d.left-d.right;I=m||j?is(S,M):M}else{const M=b-d.top-d.bottom;_=m||j?is(w,M):M}if(j&&!m){const M=fr(d.left,0),D=fr(d.right,0),R=fr(d.top,0),N=fr(d.bottom,0);h?I=g-2*(M!==0||D!==0?M+D:fr(d.left,d.right)):_=b-2*(R!==0||N!==0?R+N:fr(d.top,d.bottom))}await l({...t,availableWidth:I,availableHeight:_});const E=await o.getDimensions(s.floating);return g!==E.width||b!==E.height?{reset:{rects:!0}}:{}}}};function il(e){return wE(e)?(e.nodeName||"").toLowerCase():"#document"}function no(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function ja(e){var t;return(t=(wE(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function wE(e){return e instanceof Node||e instanceof no(e).Node}function da(e){return e instanceof Element||e instanceof no(e).Element}function Ms(e){return e instanceof HTMLElement||e instanceof no(e).HTMLElement}function Ik(e){return typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof no(e).ShadowRoot}function mf(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=Oo(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function wY(e){return["table","td","th"].includes(il(e))}function Hy(e){const t=Wy(),n=Oo(e);return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function SY(e){let t=Ac(e);for(;Ms(t)&&!Ag(t);){if(Hy(t))return t;t=Ac(t)}return null}function Wy(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Ag(e){return["html","body","#document"].includes(il(e))}function Oo(e){return no(e).getComputedStyle(e)}function Tg(e){return da(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ac(e){if(il(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Ik(e)&&e.host||ja(e);return Ik(t)?t.host:t}function SE(e){const t=Ac(e);return Ag(t)?e.ownerDocument?e.ownerDocument.body:e.body:Ms(t)&&mf(t)?t:SE(t)}function Ed(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=SE(e),s=o===((r=e.ownerDocument)==null?void 0:r.body),l=no(o);return s?t.concat(l,l.visualViewport||[],mf(o)?o:[],l.frameElement&&n?Ed(l.frameElement):[]):t.concat(o,Ed(o,[],n))}function kE(e){const t=Oo(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=Ms(e),s=o?e.offsetWidth:n,l=o?e.offsetHeight:r,c=oh(n)!==s||oh(r)!==l;return c&&(n=s,r=l),{width:n,height:r,$:c}}function Vy(e){return da(e)?e:e.contextElement}function yc(e){const t=Vy(e);if(!Ms(t))return ll(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:s}=kE(t);let l=(s?oh(n.width):n.width)/r,c=(s?oh(n.height):n.height)/o;return(!l||!Number.isFinite(l))&&(l=1),(!c||!Number.isFinite(c))&&(c=1),{x:l,y:c}}const kY=ll(0);function jE(e){const t=no(e);return!Wy()||!t.visualViewport?kY:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function jY(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==no(e)?!1:t}function oi(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),s=Vy(e);let l=ll(1);t&&(r?da(r)&&(l=yc(r)):l=yc(e));const c=jY(s,n,r)?jE(s):ll(0);let d=(o.left+c.x)/l.x,f=(o.top+c.y)/l.y,m=o.width/l.x,h=o.height/l.y;if(s){const g=no(s),b=r&&da(r)?no(r):r;let y=g.frameElement;for(;y&&r&&b!==g;){const x=yc(y),w=y.getBoundingClientRect(),S=Oo(y),j=w.left+(y.clientLeft+parseFloat(S.paddingLeft))*x.x,_=w.top+(y.clientTop+parseFloat(S.paddingTop))*x.y;d*=x.x,f*=x.y,m*=x.x,h*=x.y,d+=j,f+=_,y=no(y).frameElement}}return Rc({width:m,height:h,x:d,y:f})}function _Y(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=Ms(n),s=ja(n);if(n===s)return t;let l={scrollLeft:0,scrollTop:0},c=ll(1);const d=ll(0);if((o||!o&&r!=="fixed")&&((il(n)!=="body"||mf(s))&&(l=Tg(n)),Ms(n))){const f=oi(n);c=yc(n),d.x=f.x+n.clientLeft,d.y=f.y+n.clientTop}return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-l.scrollLeft*c.x+d.x,y:t.y*c.y-l.scrollTop*c.y+d.y}}function IY(e){return Array.from(e.getClientRects())}function _E(e){return oi(ja(e)).left+Tg(e).scrollLeft}function PY(e){const t=ja(e),n=Tg(e),r=e.ownerDocument.body,o=fr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),s=fr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let l=-n.scrollLeft+_E(e);const c=-n.scrollTop;return Oo(r).direction==="rtl"&&(l+=fr(t.clientWidth,r.clientWidth)-o),{width:o,height:s,x:l,y:c}}function EY(e,t){const n=no(e),r=ja(e),o=n.visualViewport;let s=r.clientWidth,l=r.clientHeight,c=0,d=0;if(o){s=o.width,l=o.height;const f=Wy();(!f||f&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:l,x:c,y:d}}function MY(e,t){const n=oi(e,!0,t==="fixed"),r=n.top+e.clientTop,o=n.left+e.clientLeft,s=Ms(e)?yc(e):ll(1),l=e.clientWidth*s.x,c=e.clientHeight*s.y,d=o*s.x,f=r*s.y;return{width:l,height:c,x:d,y:f}}function Pk(e,t,n){let r;if(t==="viewport")r=EY(e,n);else if(t==="document")r=PY(ja(e));else if(da(t))r=MY(t,n);else{const o=jE(e);r={...t,x:t.x-o.x,y:t.y-o.y}}return Rc(r)}function IE(e,t){const n=Ac(e);return n===t||!da(n)||Ag(n)?!1:Oo(n).position==="fixed"||IE(n,t)}function OY(e,t){const n=t.get(e);if(n)return n;let r=Ed(e,[],!1).filter(c=>da(c)&&il(c)!=="body"),o=null;const s=Oo(e).position==="fixed";let l=s?Ac(e):e;for(;da(l)&&!Ag(l);){const c=Oo(l),d=Hy(l);!d&&c.position==="fixed"&&(o=null),(s?!d&&!o:!d&&c.position==="static"&&!!o&&["absolute","fixed"].includes(o.position)||mf(l)&&!d&&IE(e,l))?r=r.filter(m=>m!==l):o=c,l=Ac(l)}return t.set(e,r),r}function DY(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const l=[...n==="clippingAncestors"?OY(t,this._c):[].concat(n),r],c=l[0],d=l.reduce((f,m)=>{const h=Pk(t,m,o);return f.top=fr(h.top,f.top),f.right=is(h.right,f.right),f.bottom=is(h.bottom,f.bottom),f.left=fr(h.left,f.left),f},Pk(t,c,o));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function RY(e){return kE(e)}function AY(e,t,n){const r=Ms(t),o=ja(t),s=n==="fixed",l=oi(e,!0,s,t);let c={scrollLeft:0,scrollTop:0};const d=ll(0);if(r||!r&&!s)if((il(t)!=="body"||mf(o))&&(c=Tg(t)),r){const f=oi(t,!0,s,t);d.x=f.x+t.clientLeft,d.y=f.y+t.clientTop}else o&&(d.x=_E(o));return{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function Ek(e,t){return!Ms(e)||Oo(e).position==="fixed"?null:t?t(e):e.offsetParent}function PE(e,t){const n=no(e);if(!Ms(e))return n;let r=Ek(e,t);for(;r&&wY(r)&&Oo(r).position==="static";)r=Ek(r,t);return r&&(il(r)==="html"||il(r)==="body"&&Oo(r).position==="static"&&!Hy(r))?n:r||SY(e)||n}const TY=async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||PE,s=this.getDimensions;return{reference:AY(t,await o(n),r),floating:{x:0,y:0,...await s(n)}}};function NY(e){return Oo(e).direction==="rtl"}const $Y={convertOffsetParentRelativeRectToViewportRelativeRect:_Y,getDocumentElement:ja,getClippingRect:DY,getOffsetParent:PE,getElementRects:TY,getClientRects:IY,getDimensions:RY,getScale:yc,isElement:da,isRTL:NY};function LY(e,t){let n=null,r;const o=ja(e);function s(){clearTimeout(r),n&&n.disconnect(),n=null}function l(c,d){c===void 0&&(c=!1),d===void 0&&(d=1),s();const{left:f,top:m,width:h,height:g}=e.getBoundingClientRect();if(c||t(),!h||!g)return;const b=Lp(m),y=Lp(o.clientWidth-(f+h)),x=Lp(o.clientHeight-(m+g)),w=Lp(f),j={rootMargin:-b+"px "+-y+"px "+-x+"px "+-w+"px",threshold:fr(0,is(1,d))||1};let _=!0;function I(E){const M=E[0].intersectionRatio;if(M!==d){if(!_)return l();M?l(!1,M):r=setTimeout(()=>{l(!1,1e-7)},100)}_=!1}try{n=new IntersectionObserver(I,{...j,root:o.ownerDocument})}catch{n=new IntersectionObserver(I,j)}n.observe(e)}return l(!0),s}function FY(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:d=!1}=r,f=Vy(e),m=o||s?[...f?Ed(f):[],...Ed(t)]:[];m.forEach(S=>{o&&S.addEventListener("scroll",n,{passive:!0}),s&&S.addEventListener("resize",n)});const h=f&&c?LY(f,n):null;let g=-1,b=null;l&&(b=new ResizeObserver(S=>{let[j]=S;j&&j.target===f&&b&&(b.unobserve(t),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{b&&b.observe(t)})),n()}),f&&!d&&b.observe(f),b.observe(t));let y,x=d?oi(e):null;d&&w();function w(){const S=oi(e);x&&(S.x!==x.x||S.y!==x.y||S.width!==x.width||S.height!==x.height)&&n(),x=S,y=requestAnimationFrame(w)}return n(),()=>{m.forEach(S=>{o&&S.removeEventListener("scroll",n),s&&S.removeEventListener("resize",n)}),h&&h(),b&&b.disconnect(),b=null,d&&cancelAnimationFrame(y)}}const zY=(e,t,n)=>{const r=new Map,o={platform:$Y,...n},s={...o.platform,_c:r};return pY(e,t,{...o,platform:s})},BY=e=>{const{element:t,padding:n}=e;function r(o){return Object.prototype.hasOwnProperty.call(o,"current")}return{name:"arrow",options:e,fn(o){return r(t)?t.current!=null?_k({element:t.current,padding:n}).fn(o):{}:t?_k({element:t,padding:n}).fn(o):{}}}};var mm=typeof document<"u"?i.useLayoutEffect:i.useEffect;function ah(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!ah(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const s=o[r];if(!(s==="_owner"&&e.$$typeof)&&!ah(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function Mk(e){const t=i.useRef(e);return mm(()=>{t.current=e}),t}function HY(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,whileElementsMounted:s,open:l}=e,[c,d]=i.useState({x:null,y:null,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,m]=i.useState(r);ah(f,r)||m(r);const h=i.useRef(null),g=i.useRef(null),b=i.useRef(c),y=Mk(s),x=Mk(o),[w,S]=i.useState(null),[j,_]=i.useState(null),I=i.useCallback(O=>{h.current!==O&&(h.current=O,S(O))},[]),E=i.useCallback(O=>{g.current!==O&&(g.current=O,_(O))},[]),M=i.useCallback(()=>{if(!h.current||!g.current)return;const O={placement:t,strategy:n,middleware:f};x.current&&(O.platform=x.current),zY(h.current,g.current,O).then(T=>{const U={...T,isPositioned:!0};D.current&&!ah(b.current,U)&&(b.current=U,Jr.flushSync(()=>{d(U)}))})},[f,t,n,x]);mm(()=>{l===!1&&b.current.isPositioned&&(b.current.isPositioned=!1,d(O=>({...O,isPositioned:!1})))},[l]);const D=i.useRef(!1);mm(()=>(D.current=!0,()=>{D.current=!1}),[]),mm(()=>{if(w&&j){if(y.current)return y.current(w,j,M);M()}},[w,j,M,y]);const R=i.useMemo(()=>({reference:h,floating:g,setReference:I,setFloating:E}),[I,E]),N=i.useMemo(()=>({reference:w,floating:j}),[w,j]);return i.useMemo(()=>({...c,update:M,refs:R,elements:N,reference:I,floating:E}),[c,M,R,N,I,E])}var WY=typeof document<"u"?i.useLayoutEffect:i.useEffect;function VY(){const e=new Map;return{emit(t,n){var r;(r=e.get(t))==null||r.forEach(o=>o(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){e.set(t,(e.get(t)||[]).filter(r=>r!==n))}}}const UY=i.createContext(null),GY=()=>i.useContext(UY);function KY(e){return(e==null?void 0:e.ownerDocument)||document}function qY(e){return KY(e).defaultView||window}function Fp(e){return e?e instanceof qY(e).Element:!1}const XY=xx["useInsertionEffect".toString()],QY=XY||(e=>e());function YY(e){const t=i.useRef(()=>{});return QY(()=>{t.current=e}),i.useCallback(function(){for(var n=arguments.length,r=new Array(n),o=0;oVY())[0],[f,m]=i.useState(null),h=i.useCallback(S=>{const j=Fp(S)?{getBoundingClientRect:()=>S.getBoundingClientRect(),contextElement:S}:S;o.refs.setReference(j)},[o.refs]),g=i.useCallback(S=>{(Fp(S)||S===null)&&(l.current=S,m(S)),(Fp(o.refs.reference.current)||o.refs.reference.current===null||S!==null&&!Fp(S))&&o.refs.setReference(S)},[o.refs]),b=i.useMemo(()=>({...o.refs,setReference:g,setPositionReference:h,domReference:l}),[o.refs,g,h]),y=i.useMemo(()=>({...o.elements,domReference:f}),[o.elements,f]),x=YY(n),w=i.useMemo(()=>({...o,refs:b,elements:y,dataRef:c,nodeId:r,events:d,open:t,onOpenChange:x}),[o,r,d,t,x,b,y]);return WY(()=>{const S=s==null?void 0:s.nodesRef.current.find(j=>j.id===r);S&&(S.context=w)}),i.useMemo(()=>({...o,context:w,refs:b,reference:g,positionReference:h}),[o,b,w,g,h])}function JY({opened:e,floating:t,position:n,positionDependencies:r}){const[o,s]=i.useState(0);i.useEffect(()=>{if(t.refs.reference.current&&t.refs.floating.current)return FY(t.refs.reference.current,t.refs.floating.current,t.update)},[t.refs.reference.current,t.refs.floating.current,e,o,n]),os(()=>{t.update()},r),os(()=>{s(l=>l+1)},[e])}function eZ(e){const t=[bY(e.offset)];return e.middlewares.shift&&t.push(xY({limiter:yY()})),e.middlewares.flip&&t.push(mY()),e.middlewares.inline&&t.push(gY()),t.push(BY({element:e.arrowRef,padding:e.arrowOffset})),t}function tZ(e){const[t,n]=Pd({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),r=()=>{var l;(l=e.onClose)==null||l.call(e),n(!1)},o=()=>{var l,c;t?((l=e.onClose)==null||l.call(e),n(!1)):((c=e.onOpen)==null||c.call(e),n(!0))},s=ZY({placement:e.position,middleware:[...eZ(e),...e.width==="target"?[CY({apply({rects:l}){var c,d;Object.assign((d=(c=s.refs.floating.current)==null?void 0:c.style)!=null?d:{},{width:`${l.reference.width}px`})}})]:[]]});return JY({opened:e.opened,position:e.position,positionDependencies:e.positionDependencies,floating:s}),os(()=>{var l;(l=e.onPositionChange)==null||l.call(e,s.placement)},[s.placement]),os(()=>{var l,c;e.opened?(c=e.onOpen)==null||c.call(e):(l=e.onClose)==null||l.call(e)},[e.opened]),{floating:s,controlled:typeof e.opened=="boolean",opened:t,onClose:r,onToggle:o}}const EE={context:"Popover component was not found in the tree",children:"Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported"},[nZ,ME]=jK(EE.context);var rZ=Object.defineProperty,oZ=Object.defineProperties,sZ=Object.getOwnPropertyDescriptors,lh=Object.getOwnPropertySymbols,OE=Object.prototype.hasOwnProperty,DE=Object.prototype.propertyIsEnumerable,Ok=(e,t,n)=>t in e?rZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zp=(e,t)=>{for(var n in t||(t={}))OE.call(t,n)&&Ok(e,n,t[n]);if(lh)for(var n of lh(t))DE.call(t,n)&&Ok(e,n,t[n]);return e},aZ=(e,t)=>oZ(e,sZ(t)),lZ=(e,t)=>{var n={};for(var r in e)OE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&lh)for(var r of lh(e))t.indexOf(r)<0&&DE.call(e,r)&&(n[r]=e[r]);return n};const iZ={refProp:"ref",popupType:"dialog",shouldOverrideDefaultTargetId:!0},RE=i.forwardRef((e,t)=>{const n=Nn("PopoverTarget",iZ,e),{children:r,refProp:o,popupType:s,shouldOverrideDefaultTargetId:l}=n,c=lZ(n,["children","refProp","popupType","shouldOverrideDefaultTargetId"]);if(!aP(r))throw new Error(EE.children);const d=c,f=ME(),m=df(f.reference,r.ref,t),h=f.withRoles?{"aria-haspopup":s,"aria-expanded":f.opened,"aria-controls":f.getDropdownId(),id:l?f.getTargetId():r.props.id}:{};return i.cloneElement(r,zp(aZ(zp(zp(zp({},d),h),f.targetProps),{className:iP(f.targetProps.className,d.className,r.props.className),[o]:m}),f.controlled?null:{onClick:f.onToggle}))});RE.displayName="@mantine/core/PopoverTarget";var cZ=gr((e,{radius:t,shadow:n})=>({dropdown:{position:"absolute",backgroundColor:e.white,background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,padding:`${e.spacing.sm} ${e.spacing.md}`,boxShadow:e.shadows[n]||n||"none",borderRadius:e.fn.radius(t),"&:focus":{outline:0}},arrow:{backgroundColor:"inherit",border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,zIndex:1}}));const uZ=cZ;var dZ=Object.defineProperty,Dk=Object.getOwnPropertySymbols,fZ=Object.prototype.hasOwnProperty,pZ=Object.prototype.propertyIsEnumerable,Rk=(e,t,n)=>t in e?dZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wi=(e,t)=>{for(var n in t||(t={}))fZ.call(t,n)&&Rk(e,n,t[n]);if(Dk)for(var n of Dk(t))pZ.call(t,n)&&Rk(e,n,t[n]);return e};const Ak={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function mZ({transition:e,state:t,duration:n,timingFunction:r}){const o={transitionDuration:`${n}ms`,transitionTimingFunction:r};return typeof e=="string"?e in Dp?Wi(Wi(Wi({transitionProperty:Dp[e].transitionProperty},o),Dp[e].common),Dp[e][Ak[t]]):null:Wi(Wi(Wi({transitionProperty:e.transitionProperty},o),e.common),e[Ak[t]])}function hZ({duration:e,exitDuration:t,timingFunction:n,mounted:r,onEnter:o,onExit:s,onEntered:l,onExited:c}){const d=wa(),f=hP(),m=d.respectReducedMotion?f:!1,[h,g]=i.useState(m?0:e),[b,y]=i.useState(r?"entered":"exited"),x=i.useRef(-1),w=S=>{const j=S?o:s,_=S?l:c;y(S?"pre-entering":"pre-exiting"),window.clearTimeout(x.current);const I=m?0:S?e:t;if(g(I),I===0)typeof j=="function"&&j(),typeof _=="function"&&_(),y(S?"entered":"exited");else{const E=window.setTimeout(()=>{typeof j=="function"&&j(),y(S?"entering":"exiting")},10);x.current=window.setTimeout(()=>{window.clearTimeout(E),typeof _=="function"&&_(),y(S?"entered":"exited")},I)}};return os(()=>{w(r)},[r]),i.useEffect(()=>()=>window.clearTimeout(x.current),[]),{transitionDuration:h,transitionStatus:b,transitionTimingFunction:n||d.transitionTimingFunction}}function AE({keepMounted:e,transition:t,duration:n=250,exitDuration:r=n,mounted:o,children:s,timingFunction:l,onExit:c,onEntered:d,onEnter:f,onExited:m}){const{transitionDuration:h,transitionStatus:g,transitionTimingFunction:b}=hZ({mounted:o,exitDuration:r,duration:n,timingFunction:l,onExit:c,onEntered:d,onEnter:f,onExited:m});return h===0?o?B.createElement(B.Fragment,null,s({})):e?s({display:"none"}):null:g==="exited"?e?s({display:"none"}):null:B.createElement(B.Fragment,null,s(mZ({transition:t,duration:h,state:g,timingFunction:b})))}AE.displayName="@mantine/core/Transition";function TE({children:e,active:t=!0,refProp:n="ref"}){const r=sq(t),o=df(r,e==null?void 0:e.ref);return aP(e)?i.cloneElement(e,{[n]:o}):e}TE.displayName="@mantine/core/FocusTrap";var gZ=Object.defineProperty,vZ=Object.defineProperties,bZ=Object.getOwnPropertyDescriptors,Tk=Object.getOwnPropertySymbols,xZ=Object.prototype.hasOwnProperty,yZ=Object.prototype.propertyIsEnumerable,Nk=(e,t,n)=>t in e?gZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,za=(e,t)=>{for(var n in t||(t={}))xZ.call(t,n)&&Nk(e,n,t[n]);if(Tk)for(var n of Tk(t))yZ.call(t,n)&&Nk(e,n,t[n]);return e},Bp=(e,t)=>vZ(e,bZ(t));function $k(e,t,n,r){return e==="center"||r==="center"?{top:t}:e==="end"?{bottom:n}:e==="start"?{top:n}:{}}function Lk(e,t,n,r,o){return e==="center"||r==="center"?{left:t}:e==="end"?{[o==="ltr"?"right":"left"]:n}:e==="start"?{[o==="ltr"?"left":"right"]:n}:{}}const CZ={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function wZ({position:e,arrowSize:t,arrowOffset:n,arrowRadius:r,arrowPosition:o,arrowX:s,arrowY:l,dir:c}){const[d,f="center"]=e.split("-"),m={width:Ae(t),height:Ae(t),transform:"rotate(45deg)",position:"absolute",[CZ[d]]:Ae(r)},h=Ae(-t/2);return d==="left"?Bp(za(za({},m),$k(f,l,n,o)),{right:h,borderLeftColor:"transparent",borderBottomColor:"transparent"}):d==="right"?Bp(za(za({},m),$k(f,l,n,o)),{left:h,borderRightColor:"transparent",borderTopColor:"transparent"}):d==="top"?Bp(za(za({},m),Lk(f,s,n,o,c)),{bottom:h,borderTopColor:"transparent",borderLeftColor:"transparent"}):d==="bottom"?Bp(za(za({},m),Lk(f,s,n,o,c)),{top:h,borderBottomColor:"transparent",borderRightColor:"transparent"}):{}}var SZ=Object.defineProperty,kZ=Object.defineProperties,jZ=Object.getOwnPropertyDescriptors,ih=Object.getOwnPropertySymbols,NE=Object.prototype.hasOwnProperty,$E=Object.prototype.propertyIsEnumerable,Fk=(e,t,n)=>t in e?SZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_Z=(e,t)=>{for(var n in t||(t={}))NE.call(t,n)&&Fk(e,n,t[n]);if(ih)for(var n of ih(t))$E.call(t,n)&&Fk(e,n,t[n]);return e},IZ=(e,t)=>kZ(e,jZ(t)),PZ=(e,t)=>{var n={};for(var r in e)NE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ih)for(var r of ih(e))t.indexOf(r)<0&&$E.call(e,r)&&(n[r]=e[r]);return n};const LE=i.forwardRef((e,t)=>{var n=e,{position:r,arrowSize:o,arrowOffset:s,arrowRadius:l,arrowPosition:c,visible:d,arrowX:f,arrowY:m}=n,h=PZ(n,["position","arrowSize","arrowOffset","arrowRadius","arrowPosition","visible","arrowX","arrowY"]);const g=wa();return d?B.createElement("div",IZ(_Z({},h),{ref:t,style:wZ({position:r,arrowSize:o,arrowOffset:s,arrowRadius:l,arrowPosition:c,dir:g.dir,arrowX:f,arrowY:m})})):null});LE.displayName="@mantine/core/FloatingArrow";var EZ=Object.defineProperty,MZ=Object.defineProperties,OZ=Object.getOwnPropertyDescriptors,ch=Object.getOwnPropertySymbols,FE=Object.prototype.hasOwnProperty,zE=Object.prototype.propertyIsEnumerable,zk=(e,t,n)=>t in e?EZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vi=(e,t)=>{for(var n in t||(t={}))FE.call(t,n)&&zk(e,n,t[n]);if(ch)for(var n of ch(t))zE.call(t,n)&&zk(e,n,t[n]);return e},Hp=(e,t)=>MZ(e,OZ(t)),DZ=(e,t)=>{var n={};for(var r in e)FE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ch)for(var r of ch(e))t.indexOf(r)<0&&zE.call(e,r)&&(n[r]=e[r]);return n};const RZ={};function BE(e){var t;const n=Nn("PopoverDropdown",RZ,e),{style:r,className:o,children:s,onKeyDownCapture:l}=n,c=DZ(n,["style","className","children","onKeyDownCapture"]),d=ME(),{classes:f,cx:m}=uZ({radius:d.radius,shadow:d.shadow},{name:d.__staticSelector,classNames:d.classNames,styles:d.styles,unstyled:d.unstyled,variant:d.variant}),h=ZK({opened:d.opened,shouldReturnFocus:d.returnFocus}),g=d.withRoles?{"aria-labelledby":d.getTargetId(),id:d.getDropdownId(),role:"dialog"}:{};return d.disabled?null:B.createElement(zP,Hp(Vi({},d.portalProps),{withinPortal:d.withinPortal}),B.createElement(AE,Hp(Vi({mounted:d.opened},d.transitionProps),{transition:d.transitionProps.transition||"fade",duration:(t=d.transitionProps.duration)!=null?t:150,keepMounted:d.keepMounted,exitDuration:typeof d.transitionProps.exitDuration=="number"?d.transitionProps.exitDuration:d.transitionProps.duration}),b=>{var y,x;return B.createElement(TE,{active:d.trapFocus},B.createElement(Vr,Vi(Hp(Vi({},g),{tabIndex:-1,ref:d.floating,style:Hp(Vi(Vi({},r),b),{zIndex:d.zIndex,top:(y=d.y)!=null?y:0,left:(x=d.x)!=null?x:0,width:d.width==="target"?void 0:Ae(d.width)}),className:m(f.dropdown,o),onKeyDownCapture:IK(d.onClose,{active:d.closeOnEscape,onTrigger:h,onKeyDown:l}),"data-position":d.placement}),c),s,B.createElement(LE,{ref:d.arrowRef,arrowX:d.arrowX,arrowY:d.arrowY,visible:d.withArrow,position:d.placement,arrowSize:d.arrowSize,arrowRadius:d.arrowRadius,arrowOffset:d.arrowOffset,arrowPosition:d.arrowPosition,className:f.arrow})))}))}BE.displayName="@mantine/core/PopoverDropdown";function AZ(e,t){if(e==="rtl"&&(t.includes("right")||t.includes("left"))){const[n,r]=t.split("-"),o=n==="right"?"left":"right";return r===void 0?o:`${o}-${r}`}return t}var Bk=Object.getOwnPropertySymbols,TZ=Object.prototype.hasOwnProperty,NZ=Object.prototype.propertyIsEnumerable,$Z=(e,t)=>{var n={};for(var r in e)TZ.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bk)for(var r of Bk(e))t.indexOf(r)<0&&NZ.call(e,r)&&(n[r]=e[r]);return n};const LZ={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!1,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,clickOutsideEvents:["mousedown","touchstart"],zIndex:Oy("popover"),__staticSelector:"Popover",width:"max-content"};function nu(e){var t,n,r,o,s,l;const c=i.useRef(null),d=Nn("Popover",LZ,e),{children:f,position:m,offset:h,onPositionChange:g,positionDependencies:b,opened:y,transitionProps:x,width:w,middlewares:S,withArrow:j,arrowSize:_,arrowOffset:I,arrowRadius:E,arrowPosition:M,unstyled:D,classNames:R,styles:N,closeOnClickOutside:O,withinPortal:T,portalProps:U,closeOnEscape:G,clickOutsideEvents:q,trapFocus:Y,onClose:Q,onOpen:V,onChange:se,zIndex:ee,radius:le,shadow:ae,id:ce,defaultOpened:J,__staticSelector:re,withRoles:A,disabled:L,returnFocus:K,variant:ne,keepMounted:z}=d,oe=$Z(d,["children","position","offset","onPositionChange","positionDependencies","opened","transitionProps","width","middlewares","withArrow","arrowSize","arrowOffset","arrowRadius","arrowPosition","unstyled","classNames","styles","closeOnClickOutside","withinPortal","portalProps","closeOnEscape","clickOutsideEvents","trapFocus","onClose","onOpen","onChange","zIndex","radius","shadow","id","defaultOpened","__staticSelector","withRoles","disabled","returnFocus","variant","keepMounted"]),[X,Z]=i.useState(null),[me,ve]=i.useState(null),de=Ry(ce),ke=wa(),we=tZ({middlewares:S,width:w,position:AZ(ke.dir,m),offset:typeof h=="number"?h+(j?_/2:0):h,arrowRef:c,arrowOffset:I,onPositionChange:g,positionDependencies:b,opened:y,defaultOpened:J,onChange:se,onOpen:V,onClose:Q});qK(()=>we.opened&&O&&we.onClose(),q,[X,me]);const Re=i.useCallback($e=>{Z($e),we.floating.reference($e)},[we.floating.reference]),Qe=i.useCallback($e=>{ve($e),we.floating.floating($e)},[we.floating.floating]);return B.createElement(nZ,{value:{returnFocus:K,disabled:L,controlled:we.controlled,reference:Re,floating:Qe,x:we.floating.x,y:we.floating.y,arrowX:(r=(n=(t=we.floating)==null?void 0:t.middlewareData)==null?void 0:n.arrow)==null?void 0:r.x,arrowY:(l=(s=(o=we.floating)==null?void 0:o.middlewareData)==null?void 0:s.arrow)==null?void 0:l.y,opened:we.opened,arrowRef:c,transitionProps:x,width:w,withArrow:j,arrowSize:_,arrowOffset:I,arrowRadius:E,arrowPosition:M,placement:we.floating.placement,trapFocus:Y,withinPortal:T,portalProps:U,zIndex:ee,radius:le,shadow:ae,closeOnEscape:G,onClose:we.onClose,onToggle:we.onToggle,getTargetId:()=>`${de}-target`,getDropdownId:()=>`${de}-dropdown`,withRoles:A,targetProps:oe,__staticSelector:re,classNames:R,styles:N,unstyled:D,variant:ne,keepMounted:z}},f)}nu.Target=RE;nu.Dropdown=BE;nu.displayName="@mantine/core/Popover";var FZ=Object.defineProperty,uh=Object.getOwnPropertySymbols,HE=Object.prototype.hasOwnProperty,WE=Object.prototype.propertyIsEnumerable,Hk=(e,t,n)=>t in e?FZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zZ=(e,t)=>{for(var n in t||(t={}))HE.call(t,n)&&Hk(e,n,t[n]);if(uh)for(var n of uh(t))WE.call(t,n)&&Hk(e,n,t[n]);return e},BZ=(e,t)=>{var n={};for(var r in e)HE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&uh)for(var r of uh(e))t.indexOf(r)<0&&WE.call(e,r)&&(n[r]=e[r]);return n};function HZ(e){var t=e,{children:n,component:r="div",maxHeight:o=220,direction:s="column",id:l,innerRef:c,__staticSelector:d,styles:f,classNames:m,unstyled:h}=t,g=BZ(t,["children","component","maxHeight","direction","id","innerRef","__staticSelector","styles","classNames","unstyled"]);const{classes:b}=sY(null,{name:d,styles:f,classNames:m,unstyled:h});return B.createElement(nu.Dropdown,zZ({p:0,onMouseDown:y=>y.preventDefault()},g),B.createElement("div",{style:{maxHeight:Ae(o),display:"flex"}},B.createElement(Vr,{component:r||"div",id:`${l}-items`,"aria-labelledby":`${l}-label`,role:"listbox",onMouseDown:y=>y.preventDefault(),style:{flex:1,overflowY:r!==Rg?"auto":void 0},"data-combobox-popover":!0,tabIndex:-1,ref:c},B.createElement("div",{className:b.itemsWrapper,style:{flexDirection:s}},n))))}function el({opened:e,transitionProps:t={transition:"fade",duration:0},shadow:n,withinPortal:r,portalProps:o,children:s,__staticSelector:l,onDirectionChange:c,switchDirectionOnFlip:d,zIndex:f,dropdownPosition:m,positionDependencies:h=[],classNames:g,styles:b,unstyled:y,readOnly:x,variant:w}){return B.createElement(nu,{unstyled:y,classNames:g,styles:b,width:"target",withRoles:!1,opened:e,middlewares:{flip:m==="flip",shift:!1},position:m==="flip"?"bottom":m,positionDependencies:h,zIndex:f,__staticSelector:l,withinPortal:r,portalProps:o,transitionProps:t,shadow:n,disabled:x,onPositionChange:S=>d&&(c==null?void 0:c(S==="top"?"column-reverse":"column")),variant:w},s)}el.Target=nu.Target;el.Dropdown=HZ;var WZ=Object.defineProperty,VZ=Object.defineProperties,UZ=Object.getOwnPropertyDescriptors,dh=Object.getOwnPropertySymbols,VE=Object.prototype.hasOwnProperty,UE=Object.prototype.propertyIsEnumerable,Wk=(e,t,n)=>t in e?WZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wp=(e,t)=>{for(var n in t||(t={}))VE.call(t,n)&&Wk(e,n,t[n]);if(dh)for(var n of dh(t))UE.call(t,n)&&Wk(e,n,t[n]);return e},GZ=(e,t)=>VZ(e,UZ(t)),KZ=(e,t)=>{var n={};for(var r in e)VE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&dh)for(var r of dh(e))t.indexOf(r)<0&&UE.call(e,r)&&(n[r]=e[r]);return n};function GE(e,t,n){const r=Nn(e,t,n),{label:o,description:s,error:l,required:c,classNames:d,styles:f,className:m,unstyled:h,__staticSelector:g,sx:b,errorProps:y,labelProps:x,descriptionProps:w,wrapperProps:S,id:j,size:_,style:I,inputContainer:E,inputWrapperOrder:M,withAsterisk:D,variant:R}=r,N=KZ(r,["label","description","error","required","classNames","styles","className","unstyled","__staticSelector","sx","errorProps","labelProps","descriptionProps","wrapperProps","id","size","style","inputContainer","inputWrapperOrder","withAsterisk","variant"]),O=Ry(j),{systemStyles:T,rest:U}=Eg(N),G=Wp({label:o,description:s,error:l,required:c,classNames:d,className:m,__staticSelector:g,sx:b,errorProps:y,labelProps:x,descriptionProps:w,unstyled:h,styles:f,id:O,size:_,style:I,inputContainer:E,inputWrapperOrder:M,withAsterisk:D,variant:R},S);return GZ(Wp({},U),{classNames:d,styles:f,unstyled:h,wrapperProps:Wp(Wp({},G),T),inputProps:{required:c,classNames:d,styles:f,unstyled:h,id:O,size:_,__staticSelector:g,error:l,variant:R}})}var qZ=gr((e,t,{size:n})=>({label:{display:"inline-block",fontSize:pt({size:n,sizes:e.fontSizes}),fontWeight:500,color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[9],wordBreak:"break-word",cursor:"default",WebkitTapHighlightColor:"transparent"},required:{color:e.fn.variant({variant:"filled",color:"red"}).background}}));const XZ=qZ;var QZ=Object.defineProperty,fh=Object.getOwnPropertySymbols,KE=Object.prototype.hasOwnProperty,qE=Object.prototype.propertyIsEnumerable,Vk=(e,t,n)=>t in e?QZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,YZ=(e,t)=>{for(var n in t||(t={}))KE.call(t,n)&&Vk(e,n,t[n]);if(fh)for(var n of fh(t))qE.call(t,n)&&Vk(e,n,t[n]);return e},ZZ=(e,t)=>{var n={};for(var r in e)KE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&fh)for(var r of fh(e))t.indexOf(r)<0&&qE.call(e,r)&&(n[r]=e[r]);return n};const JZ={labelElement:"label",size:"sm"},Uy=i.forwardRef((e,t)=>{const n=Nn("InputLabel",JZ,e),{labelElement:r,children:o,required:s,size:l,classNames:c,styles:d,unstyled:f,className:m,htmlFor:h,__staticSelector:g,variant:b,onMouseDown:y}=n,x=ZZ(n,["labelElement","children","required","size","classNames","styles","unstyled","className","htmlFor","__staticSelector","variant","onMouseDown"]),{classes:w,cx:S}=XZ(null,{name:["InputWrapper",g],classNames:c,styles:d,unstyled:f,variant:b,size:l});return B.createElement(Vr,YZ({component:r,ref:t,className:S(w.label,m),htmlFor:r==="label"?h:void 0,onMouseDown:j=>{y==null||y(j),!j.defaultPrevented&&j.detail>1&&j.preventDefault()}},x),o,s&&B.createElement("span",{className:w.required,"aria-hidden":!0}," *"))});Uy.displayName="@mantine/core/InputLabel";var eJ=gr((e,t,{size:n})=>({error:{wordBreak:"break-word",color:e.fn.variant({variant:"filled",color:"red"}).background,fontSize:`calc(${pt({size:n,sizes:e.fontSizes})} - ${Ae(2)})`,lineHeight:1.2,display:"block"}}));const tJ=eJ;var nJ=Object.defineProperty,ph=Object.getOwnPropertySymbols,XE=Object.prototype.hasOwnProperty,QE=Object.prototype.propertyIsEnumerable,Uk=(e,t,n)=>t in e?nJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rJ=(e,t)=>{for(var n in t||(t={}))XE.call(t,n)&&Uk(e,n,t[n]);if(ph)for(var n of ph(t))QE.call(t,n)&&Uk(e,n,t[n]);return e},oJ=(e,t)=>{var n={};for(var r in e)XE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ph)for(var r of ph(e))t.indexOf(r)<0&&QE.call(e,r)&&(n[r]=e[r]);return n};const sJ={size:"sm"},Gy=i.forwardRef((e,t)=>{const n=Nn("InputError",sJ,e),{children:r,className:o,classNames:s,styles:l,unstyled:c,size:d,__staticSelector:f,variant:m}=n,h=oJ(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:g,cx:b}=tJ(null,{name:["InputWrapper",f],classNames:s,styles:l,unstyled:c,variant:m,size:d});return B.createElement(Oc,rJ({className:b(g.error,o),ref:t},h),r)});Gy.displayName="@mantine/core/InputError";var aJ=gr((e,t,{size:n})=>({description:{wordBreak:"break-word",color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],fontSize:`calc(${pt({size:n,sizes:e.fontSizes})} - ${Ae(2)})`,lineHeight:1.2,display:"block"}}));const lJ=aJ;var iJ=Object.defineProperty,mh=Object.getOwnPropertySymbols,YE=Object.prototype.hasOwnProperty,ZE=Object.prototype.propertyIsEnumerable,Gk=(e,t,n)=>t in e?iJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,cJ=(e,t)=>{for(var n in t||(t={}))YE.call(t,n)&&Gk(e,n,t[n]);if(mh)for(var n of mh(t))ZE.call(t,n)&&Gk(e,n,t[n]);return e},uJ=(e,t)=>{var n={};for(var r in e)YE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&mh)for(var r of mh(e))t.indexOf(r)<0&&ZE.call(e,r)&&(n[r]=e[r]);return n};const dJ={size:"sm"},Ky=i.forwardRef((e,t)=>{const n=Nn("InputDescription",dJ,e),{children:r,className:o,classNames:s,styles:l,unstyled:c,size:d,__staticSelector:f,variant:m}=n,h=uJ(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:g,cx:b}=lJ(null,{name:["InputWrapper",f],classNames:s,styles:l,unstyled:c,variant:m,size:d});return B.createElement(Oc,cJ({color:"dimmed",className:b(g.description,o),ref:t,unstyled:c},h),r)});Ky.displayName="@mantine/core/InputDescription";const JE=i.createContext({offsetBottom:!1,offsetTop:!1,describedBy:void 0}),fJ=JE.Provider,pJ=()=>i.useContext(JE);function mJ(e,{hasDescription:t,hasError:n}){const r=e.findIndex(d=>d==="input"),o=e[r-1],s=e[r+1];return{offsetBottom:t&&s==="description"||n&&s==="error",offsetTop:t&&o==="description"||n&&o==="error"}}var hJ=Object.defineProperty,gJ=Object.defineProperties,vJ=Object.getOwnPropertyDescriptors,Kk=Object.getOwnPropertySymbols,bJ=Object.prototype.hasOwnProperty,xJ=Object.prototype.propertyIsEnumerable,qk=(e,t,n)=>t in e?hJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,yJ=(e,t)=>{for(var n in t||(t={}))bJ.call(t,n)&&qk(e,n,t[n]);if(Kk)for(var n of Kk(t))xJ.call(t,n)&&qk(e,n,t[n]);return e},CJ=(e,t)=>gJ(e,vJ(t)),wJ=gr(e=>({root:CJ(yJ({},e.fn.fontStyles()),{lineHeight:e.lineHeight})}));const SJ=wJ;var kJ=Object.defineProperty,jJ=Object.defineProperties,_J=Object.getOwnPropertyDescriptors,hh=Object.getOwnPropertySymbols,eM=Object.prototype.hasOwnProperty,tM=Object.prototype.propertyIsEnumerable,Xk=(e,t,n)=>t in e?kJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ba=(e,t)=>{for(var n in t||(t={}))eM.call(t,n)&&Xk(e,n,t[n]);if(hh)for(var n of hh(t))tM.call(t,n)&&Xk(e,n,t[n]);return e},Qk=(e,t)=>jJ(e,_J(t)),IJ=(e,t)=>{var n={};for(var r in e)eM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&hh)for(var r of hh(e))t.indexOf(r)<0&&tM.call(e,r)&&(n[r]=e[r]);return n};const PJ={labelElement:"label",size:"sm",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},nM=i.forwardRef((e,t)=>{const n=Nn("InputWrapper",PJ,e),{className:r,label:o,children:s,required:l,id:c,error:d,description:f,labelElement:m,labelProps:h,descriptionProps:g,errorProps:b,classNames:y,styles:x,size:w,inputContainer:S,__staticSelector:j,unstyled:_,inputWrapperOrder:I,withAsterisk:E,variant:M}=n,D=IJ(n,["className","label","children","required","id","error","description","labelElement","labelProps","descriptionProps","errorProps","classNames","styles","size","inputContainer","__staticSelector","unstyled","inputWrapperOrder","withAsterisk","variant"]),{classes:R,cx:N}=SJ(null,{classNames:y,styles:x,name:["InputWrapper",j],unstyled:_,variant:M,size:w}),O={classNames:y,styles:x,unstyled:_,size:w,variant:M,__staticSelector:j},T=typeof E=="boolean"?E:l,U=c?`${c}-error`:b==null?void 0:b.id,G=c?`${c}-description`:g==null?void 0:g.id,Y=`${!!d&&typeof d!="boolean"?U:""} ${f?G:""}`,Q=Y.trim().length>0?Y.trim():void 0,V=o&&B.createElement(Uy,Ba(Ba({key:"label",labelElement:m,id:c?`${c}-label`:void 0,htmlFor:c,required:T},O),h),o),se=f&&B.createElement(Ky,Qk(Ba(Ba({key:"description"},g),O),{size:(g==null?void 0:g.size)||O.size,id:(g==null?void 0:g.id)||G}),f),ee=B.createElement(i.Fragment,{key:"input"},S(s)),le=typeof d!="boolean"&&d&&B.createElement(Gy,Qk(Ba(Ba({},b),O),{size:(b==null?void 0:b.size)||O.size,key:"error",id:(b==null?void 0:b.id)||U}),d),ae=I.map(ce=>{switch(ce){case"label":return V;case"input":return ee;case"description":return se;case"error":return le;default:return null}});return B.createElement(fJ,{value:Ba({describedBy:Q},mJ(I,{hasDescription:!!se,hasError:!!le}))},B.createElement(Vr,Ba({className:N(R.root,r),ref:t},D),ae))});nM.displayName="@mantine/core/InputWrapper";var EJ=Object.defineProperty,gh=Object.getOwnPropertySymbols,rM=Object.prototype.hasOwnProperty,oM=Object.prototype.propertyIsEnumerable,Yk=(e,t,n)=>t in e?EJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,MJ=(e,t)=>{for(var n in t||(t={}))rM.call(t,n)&&Yk(e,n,t[n]);if(gh)for(var n of gh(t))oM.call(t,n)&&Yk(e,n,t[n]);return e},OJ=(e,t)=>{var n={};for(var r in e)rM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&gh)for(var r of gh(e))t.indexOf(r)<0&&oM.call(e,r)&&(n[r]=e[r]);return n};const DJ={},sM=i.forwardRef((e,t)=>{const n=Nn("InputPlaceholder",DJ,e),{sx:r}=n,o=OJ(n,["sx"]);return B.createElement(Vr,MJ({component:"span",sx:[s=>s.fn.placeholderStyles(),...oP(r)],ref:t},o))});sM.displayName="@mantine/core/InputPlaceholder";var RJ=Object.defineProperty,AJ=Object.defineProperties,TJ=Object.getOwnPropertyDescriptors,Zk=Object.getOwnPropertySymbols,NJ=Object.prototype.hasOwnProperty,$J=Object.prototype.propertyIsEnumerable,Jk=(e,t,n)=>t in e?RJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vp=(e,t)=>{for(var n in t||(t={}))NJ.call(t,n)&&Jk(e,n,t[n]);if(Zk)for(var n of Zk(t))$J.call(t,n)&&Jk(e,n,t[n]);return e},s1=(e,t)=>AJ(e,TJ(t));const vo={xs:Ae(30),sm:Ae(36),md:Ae(42),lg:Ae(50),xl:Ae(60)},LJ=["default","filled","unstyled"];function FJ({theme:e,variant:t}){return LJ.includes(t)?t==="default"?{border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.white,transition:"border-color 100ms ease","&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:t==="filled"?{border:`${Ae(1)} solid transparent`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[1],"&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:{borderWidth:0,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,backgroundColor:"transparent",minHeight:Ae(28),outline:0,"&:focus, &:focus-within":{outline:"none",borderColor:"transparent"},"&:disabled":{backgroundColor:"transparent","&:focus, &:focus-within":{outline:"none",borderColor:"transparent"}}}:null}var zJ=gr((e,{multiline:t,radius:n,invalid:r,rightSectionWidth:o,withRightSection:s,iconWidth:l,offsetBottom:c,offsetTop:d,pointer:f},{variant:m,size:h})=>{const g=e.fn.variant({variant:"filled",color:"red"}).background,b=m==="default"||m==="filled"?{minHeight:pt({size:h,sizes:vo}),paddingLeft:`calc(${pt({size:h,sizes:vo})} / 3)`,paddingRight:s?o||pt({size:h,sizes:vo}):`calc(${pt({size:h,sizes:vo})} / 3)`,borderRadius:e.fn.radius(n)}:m==="unstyled"&&s?{paddingRight:o||pt({size:h,sizes:vo})}:null;return{wrapper:{position:"relative",marginTop:d?`calc(${e.spacing.xs} / 2)`:void 0,marginBottom:c?`calc(${e.spacing.xs} / 2)`:void 0,"&:has(input:disabled)":{"& .mantine-Input-rightSection":{display:"none"}}},input:s1(Vp(Vp(s1(Vp({},e.fn.fontStyles()),{height:t?m==="unstyled"?void 0:"auto":pt({size:h,sizes:vo}),WebkitTapHighlightColor:"transparent",lineHeight:t?e.lineHeight:`calc(${pt({size:h,sizes:vo})} - ${Ae(2)})`,appearance:"none",resize:"none",boxSizing:"border-box",fontSize:pt({size:h,sizes:e.fontSizes}),width:"100%",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,display:"block",textAlign:"left",cursor:f?"pointer":void 0}),FJ({theme:e,variant:m})),b),{"&:disabled, &[data-disabled]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,cursor:"not-allowed",pointerEvents:"none","&::placeholder":{color:e.colors.dark[2]}},"&[data-invalid]":{color:g,borderColor:g,"&::placeholder":{opacity:1,color:g}},"&[data-with-icon]":{paddingLeft:typeof l=="number"?Ae(l):pt({size:h,sizes:vo})},"&::placeholder":s1(Vp({},e.fn.placeholderStyles()),{opacity:1}),"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button, &::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{appearance:"none"},"&[type=number]":{MozAppearance:"textfield"}}),icon:{pointerEvents:"none",position:"absolute",zIndex:1,left:0,top:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",width:l?Ae(l):pt({size:h,sizes:vo}),color:r?e.colors.red[e.colorScheme==="dark"?6:7]:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[5]},rightSection:{position:"absolute",top:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",width:o||pt({size:h,sizes:vo})}}});const BJ=zJ;var HJ=Object.defineProperty,WJ=Object.defineProperties,VJ=Object.getOwnPropertyDescriptors,vh=Object.getOwnPropertySymbols,aM=Object.prototype.hasOwnProperty,lM=Object.prototype.propertyIsEnumerable,ej=(e,t,n)=>t in e?HJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Up=(e,t)=>{for(var n in t||(t={}))aM.call(t,n)&&ej(e,n,t[n]);if(vh)for(var n of vh(t))lM.call(t,n)&&ej(e,n,t[n]);return e},tj=(e,t)=>WJ(e,VJ(t)),UJ=(e,t)=>{var n={};for(var r in e)aM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&vh)for(var r of vh(e))t.indexOf(r)<0&&lM.call(e,r)&&(n[r]=e[r]);return n};const GJ={size:"sm",variant:"default"},pi=i.forwardRef((e,t)=>{const n=Nn("Input",GJ,e),{className:r,error:o,required:s,disabled:l,variant:c,icon:d,style:f,rightSectionWidth:m,iconWidth:h,rightSection:g,rightSectionProps:b,radius:y,size:x,wrapperProps:w,classNames:S,styles:j,__staticSelector:_,multiline:I,sx:E,unstyled:M,pointer:D}=n,R=UJ(n,["className","error","required","disabled","variant","icon","style","rightSectionWidth","iconWidth","rightSection","rightSectionProps","radius","size","wrapperProps","classNames","styles","__staticSelector","multiline","sx","unstyled","pointer"]),{offsetBottom:N,offsetTop:O,describedBy:T}=pJ(),{classes:U,cx:G}=BJ({radius:y,multiline:I,invalid:!!o,rightSectionWidth:m?Ae(m):void 0,iconWidth:h,withRightSection:!!g,offsetBottom:N,offsetTop:O,pointer:D},{classNames:S,styles:j,name:["Input",_],unstyled:M,variant:c,size:x}),{systemStyles:q,rest:Y}=Eg(R);return B.createElement(Vr,Up(Up({className:G(U.wrapper,r),sx:E,style:f},q),w),d&&B.createElement("div",{className:U.icon},d),B.createElement(Vr,tj(Up({component:"input"},Y),{ref:t,required:s,"aria-invalid":!!o,"aria-describedby":T,disabled:l,"data-disabled":l||void 0,"data-with-icon":!!d||void 0,"data-invalid":!!o||void 0,className:U.input})),g&&B.createElement("div",tj(Up({},b),{className:U.rightSection}),g))});pi.displayName="@mantine/core/Input";pi.Wrapper=nM;pi.Label=Uy;pi.Description=Ky;pi.Error=Gy;pi.Placeholder=sM;const Tc=pi;var KJ=Object.defineProperty,bh=Object.getOwnPropertySymbols,iM=Object.prototype.hasOwnProperty,cM=Object.prototype.propertyIsEnumerable,nj=(e,t,n)=>t in e?KJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rj=(e,t)=>{for(var n in t||(t={}))iM.call(t,n)&&nj(e,n,t[n]);if(bh)for(var n of bh(t))cM.call(t,n)&&nj(e,n,t[n]);return e},qJ=(e,t)=>{var n={};for(var r in e)iM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&bh)for(var r of bh(e))t.indexOf(r)<0&&cM.call(e,r)&&(n[r]=e[r]);return n};const XJ={multiple:!1},uM=i.forwardRef((e,t)=>{const n=Nn("FileButton",XJ,e),{onChange:r,children:o,multiple:s,accept:l,name:c,form:d,resetRef:f,disabled:m,capture:h,inputProps:g}=n,b=qJ(n,["onChange","children","multiple","accept","name","form","resetRef","disabled","capture","inputProps"]),y=i.useRef(),x=()=>{!m&&y.current.click()},w=j=>{r(s?Array.from(j.currentTarget.files):j.currentTarget.files[0]||null)};return mP(f,()=>{y.current.value=""}),B.createElement(B.Fragment,null,o(rj({onClick:x},b)),B.createElement("input",rj({style:{display:"none"},type:"file",accept:l,multiple:s,onChange:w,ref:df(t,y),name:c,form:d,capture:h},g)))});uM.displayName="@mantine/core/FileButton";const dM={xs:Ae(16),sm:Ae(22),md:Ae(26),lg:Ae(30),xl:Ae(36)},QJ={xs:Ae(10),sm:Ae(12),md:Ae(14),lg:Ae(16),xl:Ae(18)};var YJ=gr((e,{disabled:t,radius:n,readOnly:r},{size:o,variant:s})=>({defaultValue:{display:"flex",alignItems:"center",backgroundColor:t?e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3]:e.colorScheme==="dark"?e.colors.dark[7]:s==="filled"?e.white:e.colors.gray[1],color:t?e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],height:pt({size:o,sizes:dM}),paddingLeft:`calc(${pt({size:o,sizes:e.spacing})} / 1.5)`,paddingRight:t||r?pt({size:o,sizes:e.spacing}):0,fontWeight:500,fontSize:pt({size:o,sizes:QJ}),borderRadius:pt({size:n,sizes:e.radius}),cursor:t?"not-allowed":"default",userSelect:"none",maxWidth:`calc(100% - ${Ae(10)})`},defaultValueRemove:{color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],marginLeft:`calc(${pt({size:o,sizes:e.spacing})} / 6)`},defaultValueLabel:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}));const ZJ=YJ;var JJ=Object.defineProperty,xh=Object.getOwnPropertySymbols,fM=Object.prototype.hasOwnProperty,pM=Object.prototype.propertyIsEnumerable,oj=(e,t,n)=>t in e?JJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,eee=(e,t)=>{for(var n in t||(t={}))fM.call(t,n)&&oj(e,n,t[n]);if(xh)for(var n of xh(t))pM.call(t,n)&&oj(e,n,t[n]);return e},tee=(e,t)=>{var n={};for(var r in e)fM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&xh)for(var r of xh(e))t.indexOf(r)<0&&pM.call(e,r)&&(n[r]=e[r]);return n};const nee={xs:16,sm:22,md:24,lg:26,xl:30};function mM(e){var t=e,{label:n,classNames:r,styles:o,className:s,onRemove:l,disabled:c,readOnly:d,size:f,radius:m="sm",variant:h,unstyled:g}=t,b=tee(t,["label","classNames","styles","className","onRemove","disabled","readOnly","size","radius","variant","unstyled"]);const{classes:y,cx:x}=ZJ({disabled:c,readOnly:d,radius:m},{name:"MultiSelect",classNames:r,styles:o,unstyled:g,size:f,variant:h});return B.createElement("div",eee({className:x(y.defaultValue,s)},b),B.createElement("span",{className:y.defaultValueLabel},n),!c&&!d&&B.createElement(KP,{"aria-hidden":!0,onMouseDown:l,size:nee[f],radius:2,color:"blue",variant:"transparent",iconSize:"70%",className:y.defaultValueRemove,tabIndex:-1,unstyled:g}))}mM.displayName="@mantine/core/MultiSelect/DefaultValue";function ree({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,disableSelectedItemFiltering:l}){if(!t&&s.length===0)return e;if(!t){const d=[];for(let f=0;fm===e[f].value&&!e[f].disabled))&&d.push(e[f]);return d}const c=[];for(let d=0;df===e[d].value&&!e[d].disabled),e[d])&&c.push(e[d]),!(c.length>=n));d+=1);return c}var oee=Object.defineProperty,yh=Object.getOwnPropertySymbols,hM=Object.prototype.hasOwnProperty,gM=Object.prototype.propertyIsEnumerable,sj=(e,t,n)=>t in e?oee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,aj=(e,t)=>{for(var n in t||(t={}))hM.call(t,n)&&sj(e,n,t[n]);if(yh)for(var n of yh(t))gM.call(t,n)&&sj(e,n,t[n]);return e},see=(e,t)=>{var n={};for(var r in e)hM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&yh)for(var r of yh(e))t.indexOf(r)<0&&gM.call(e,r)&&(n[r]=e[r]);return n};const aee={xs:Ae(14),sm:Ae(18),md:Ae(20),lg:Ae(24),xl:Ae(28)};function lee(e){var t=e,{size:n,error:r,style:o}=t,s=see(t,["size","error","style"]);const l=wa(),c=pt({size:n,sizes:aee});return B.createElement("svg",aj({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:aj({color:r?l.colors.red[6]:l.colors.gray[6],width:c,height:c},o),"data-chevron":!0},s),B.createElement("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}var iee=Object.defineProperty,cee=Object.defineProperties,uee=Object.getOwnPropertyDescriptors,lj=Object.getOwnPropertySymbols,dee=Object.prototype.hasOwnProperty,fee=Object.prototype.propertyIsEnumerable,ij=(e,t,n)=>t in e?iee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,pee=(e,t)=>{for(var n in t||(t={}))dee.call(t,n)&&ij(e,n,t[n]);if(lj)for(var n of lj(t))fee.call(t,n)&&ij(e,n,t[n]);return e},mee=(e,t)=>cee(e,uee(t));function vM({shouldClear:e,clearButtonProps:t,onClear:n,size:r,error:o}){return e?B.createElement(KP,mee(pee({},t),{variant:"transparent",onClick:n,size:r,onMouseDown:s=>s.preventDefault()})):B.createElement(lee,{error:o,size:r})}vM.displayName="@mantine/core/SelectRightSection";var hee=Object.defineProperty,gee=Object.defineProperties,vee=Object.getOwnPropertyDescriptors,Ch=Object.getOwnPropertySymbols,bM=Object.prototype.hasOwnProperty,xM=Object.prototype.propertyIsEnumerable,cj=(e,t,n)=>t in e?hee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,a1=(e,t)=>{for(var n in t||(t={}))bM.call(t,n)&&cj(e,n,t[n]);if(Ch)for(var n of Ch(t))xM.call(t,n)&&cj(e,n,t[n]);return e},uj=(e,t)=>gee(e,vee(t)),bee=(e,t)=>{var n={};for(var r in e)bM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ch)for(var r of Ch(e))t.indexOf(r)<0&&xM.call(e,r)&&(n[r]=e[r]);return n};function yM(e){var t=e,{styles:n,rightSection:r,rightSectionWidth:o,theme:s}=t,l=bee(t,["styles","rightSection","rightSectionWidth","theme"]);if(r)return{rightSection:r,rightSectionWidth:o,styles:n};const c=typeof n=="function"?n(s):n;return{rightSection:!l.readOnly&&!(l.disabled&&l.shouldClear)&&B.createElement(vM,a1({},l)),styles:uj(a1({},c),{rightSection:uj(a1({},c==null?void 0:c.rightSection),{pointerEvents:l.shouldClear?void 0:"none"})})}}var xee=Object.defineProperty,yee=Object.defineProperties,Cee=Object.getOwnPropertyDescriptors,dj=Object.getOwnPropertySymbols,wee=Object.prototype.hasOwnProperty,See=Object.prototype.propertyIsEnumerable,fj=(e,t,n)=>t in e?xee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,kee=(e,t)=>{for(var n in t||(t={}))wee.call(t,n)&&fj(e,n,t[n]);if(dj)for(var n of dj(t))See.call(t,n)&&fj(e,n,t[n]);return e},jee=(e,t)=>yee(e,Cee(t)),_ee=gr((e,{invalid:t},{size:n})=>({wrapper:{position:"relative","&:has(input:disabled)":{cursor:"not-allowed",pointerEvents:"none","& .mantine-MultiSelect-input":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,"&::placeholder":{color:e.colors.dark[2]}},"& .mantine-MultiSelect-defaultValue":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3],color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]}}},values:{minHeight:`calc(${pt({size:n,sizes:vo})} - ${Ae(2)})`,display:"flex",alignItems:"center",flexWrap:"wrap",marginLeft:`calc(-${e.spacing.xs} / 2)`,boxSizing:"border-box","&[data-clearable]":{marginRight:pt({size:n,sizes:vo})}},value:{margin:`calc(${e.spacing.xs} / 2 - ${Ae(2)}) calc(${e.spacing.xs} / 2)`},searchInput:jee(kee({},e.fn.fontStyles()),{flex:1,minWidth:Ae(60),backgroundColor:"transparent",border:0,outline:0,fontSize:pt({size:n,sizes:e.fontSizes}),padding:0,marginLeft:`calc(${e.spacing.xs} / 2)`,appearance:"none",color:"inherit",maxHeight:pt({size:n,sizes:dM}),"&::placeholder":{opacity:1,color:t?e.colors.red[e.fn.primaryShade()]:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]},"&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}),searchInputEmpty:{width:"100%"},searchInputInputHidden:{flex:0,width:0,minWidth:0,margin:0,overflow:"hidden"},searchInputPointer:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}},input:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}}));const Iee=_ee;var Pee=Object.defineProperty,Eee=Object.defineProperties,Mee=Object.getOwnPropertyDescriptors,wh=Object.getOwnPropertySymbols,CM=Object.prototype.hasOwnProperty,wM=Object.prototype.propertyIsEnumerable,pj=(e,t,n)=>t in e?Pee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ui=(e,t)=>{for(var n in t||(t={}))CM.call(t,n)&&pj(e,n,t[n]);if(wh)for(var n of wh(t))wM.call(t,n)&&pj(e,n,t[n]);return e},mj=(e,t)=>Eee(e,Mee(t)),Oee=(e,t)=>{var n={};for(var r in e)CM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&wh)for(var r of wh(e))t.indexOf(r)<0&&wM.call(e,r)&&(n[r]=e[r]);return n};function Dee(e,t,n){return t?!1:n.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function Ree(e,t){return!!e&&!t.some(n=>n.value.toLowerCase()===e.toLowerCase())}function hj(e,t){if(!Array.isArray(e))return;if(t.length===0)return[];const n=t.map(r=>typeof r=="object"?r.value:r);return e.filter(r=>n.includes(r))}const Aee={size:"sm",valueComponent:mM,itemComponent:Ty,transitionProps:{transition:"fade",duration:0},maxDropdownHeight:220,shadow:"sm",searchable:!1,filter:Dee,limit:1/0,clearSearchOnChange:!0,clearable:!1,clearSearchOnBlur:!1,disabled:!1,initiallyOpened:!1,creatable:!1,shouldCreate:Ree,switchDirectionOnFlip:!1,zIndex:Oy("popover"),selectOnBlur:!1,positionDependencies:[],dropdownPosition:"flip"},SM=i.forwardRef((e,t)=>{const n=Nn("MultiSelect",Aee,e),{className:r,style:o,required:s,label:l,description:c,size:d,error:f,classNames:m,styles:h,wrapperProps:g,value:b,defaultValue:y,data:x,onChange:w,valueComponent:S,itemComponent:j,id:_,transitionProps:I,maxDropdownHeight:E,shadow:M,nothingFound:D,onFocus:R,onBlur:N,searchable:O,placeholder:T,filter:U,limit:G,clearSearchOnChange:q,clearable:Y,clearSearchOnBlur:Q,variant:V,onSearchChange:se,searchValue:ee,disabled:le,initiallyOpened:ae,radius:ce,icon:J,rightSection:re,rightSectionWidth:A,creatable:L,getCreateLabel:K,shouldCreate:ne,onCreate:z,sx:oe,dropdownComponent:X,onDropdownClose:Z,onDropdownOpen:me,maxSelectedValues:ve,withinPortal:de,portalProps:ke,switchDirectionOnFlip:we,zIndex:Re,selectOnBlur:Qe,name:$e,dropdownPosition:vt,errorProps:it,labelProps:ot,descriptionProps:Ce,form:Me,positionDependencies:qe,onKeyDown:dt,unstyled:ye,inputContainer:Ue,inputWrapperOrder:st,readOnly:mt,withAsterisk:Pe,clearButtonProps:Ne,hoverOnSearchChange:kt,disableSelectedItemFiltering:Se}=n,Ve=Oee(n,["className","style","required","label","description","size","error","classNames","styles","wrapperProps","value","defaultValue","data","onChange","valueComponent","itemComponent","id","transitionProps","maxDropdownHeight","shadow","nothingFound","onFocus","onBlur","searchable","placeholder","filter","limit","clearSearchOnChange","clearable","clearSearchOnBlur","variant","onSearchChange","searchValue","disabled","initiallyOpened","radius","icon","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","onCreate","sx","dropdownComponent","onDropdownClose","onDropdownOpen","maxSelectedValues","withinPortal","portalProps","switchDirectionOnFlip","zIndex","selectOnBlur","name","dropdownPosition","errorProps","labelProps","descriptionProps","form","positionDependencies","onKeyDown","unstyled","inputContainer","inputWrapperOrder","readOnly","withAsterisk","clearButtonProps","hoverOnSearchChange","disableSelectedItemFiltering"]),{classes:Ge,cx:Le,theme:bt}=Iee({invalid:!!f},{name:"MultiSelect",classNames:m,styles:h,unstyled:ye,size:d,variant:V}),{systemStyles:fn,rest:Bt}=Eg(Ve),Ht=i.useRef(),zn=i.useRef({}),pn=Ry(_),[en,un]=i.useState(ae),[Wt,ar]=i.useState(-1),[vr,Bn]=i.useState("column"),[Hn,lo]=Pd({value:ee,defaultValue:"",finalValue:void 0,onChange:se}),[Fo,zo]=i.useState(!1),{scrollIntoView:Ia,targetRef:xi,scrollableRef:Pa}=gP({duration:0,offset:5,cancelable:!1,isList:!0}),yi=L&&typeof K=="function";let Je=null;const qt=x.map(rt=>typeof rt=="string"?{label:rt,value:rt}:rt),Wn=sP({data:qt}),[jt,Ea]=Pd({value:hj(b,x),defaultValue:hj(y,x),finalValue:[],onChange:w}),qr=i.useRef(!!ve&&ve{if(!mt){const Dt=jt.filter(_t=>_t!==rt);Ea(Dt),ve&&Dt.length{lo(rt.currentTarget.value),!le&&!qr.current&&O&&un(!0)},g0=rt=>{typeof R=="function"&&R(rt),!le&&!qr.current&&O&&un(!0)},Vn=ree({data:Wn,searchable:O,searchValue:Hn,limit:G,filter:U,value:jt,disableSelectedItemFiltering:Se});yi&&ne(Hn,Wn)&&(Je=K(Hn),Vn.push({label:Hn,value:Hn,creatable:!0}));const Hs=Math.min(Wt,Vn.length-1),_f=(rt,Dt,_t)=>{let Rt=rt;for(;_t(Rt);)if(Rt=Dt(Rt),!Vn[Rt].disabled)return Rt;return rt};os(()=>{ar(kt&&Hn?0:-1)},[Hn,kt]),os(()=>{!le&&jt.length>x.length&&un(!1),ve&&jt.length=ve&&(qr.current=!0,un(!1))},[jt]);const Ci=rt=>{if(!mt)if(q&&lo(""),jt.includes(rt.value))jf(rt.value);else{if(rt.creatable&&typeof z=="function"){const Dt=z(rt.value);typeof Dt<"u"&&Dt!==null&&Ea(typeof Dt=="string"?[...jt,Dt]:[...jt,Dt.value])}else Ea([...jt,rt.value]);jt.length===ve-1&&(qr.current=!0,un(!1)),Vn.length===1&&un(!1)}},mu=rt=>{typeof N=="function"&&N(rt),Qe&&Vn[Hs]&&en&&Ci(Vn[Hs]),Q&&lo(""),un(!1)},_l=rt=>{if(Fo||(dt==null||dt(rt),mt)||rt.key!=="Backspace"&&ve&&qr.current)return;const Dt=vr==="column",_t=()=>{ar(lr=>{var an;const $n=_f(lr,br=>br+1,br=>br{ar(lr=>{var an;const $n=_f(lr,br=>br-1,br=>br>0);return en&&(xi.current=zn.current[(an=Vn[$n])==null?void 0:an.value],Ia({alignment:Dt?"start":"end"})),$n})};switch(rt.key){case"ArrowUp":{rt.preventDefault(),un(!0),Dt?Rt():_t();break}case"ArrowDown":{rt.preventDefault(),un(!0),Dt?_t():Rt();break}case"Enter":{rt.preventDefault(),Vn[Hs]&&en?Ci(Vn[Hs]):un(!0);break}case" ":{O||(rt.preventDefault(),Vn[Hs]&&en?Ci(Vn[Hs]):un(!0));break}case"Backspace":{jt.length>0&&Hn.length===0&&(Ea(jt.slice(0,-1)),un(!0),ve&&(qr.current=!1));break}case"Home":{if(!O){rt.preventDefault(),en||un(!0);const lr=Vn.findIndex(an=>!an.disabled);ar(lr),Ia({alignment:Dt?"end":"start"})}break}case"End":{if(!O){rt.preventDefault(),en||un(!0);const lr=Vn.map(an=>!!an.disabled).lastIndexOf(!1);ar(lr),Ia({alignment:Dt?"end":"start"})}break}case"Escape":un(!1)}},hu=jt.map(rt=>{let Dt=Wn.find(_t=>_t.value===rt&&!_t.disabled);return!Dt&&yi&&(Dt={value:rt,label:rt}),Dt}).filter(rt=>!!rt).map((rt,Dt)=>B.createElement(S,mj(Ui({},rt),{variant:V,disabled:le,className:Ge.value,readOnly:mt,onRemove:_t=>{_t.preventDefault(),_t.stopPropagation(),jf(rt.value)},key:rt.value,size:d,styles:h,classNames:m,radius:ce,index:Dt}))),gu=rt=>jt.includes(rt),v0=()=>{var rt;lo(""),Ea([]),(rt=Ht.current)==null||rt.focus(),ve&&(qr.current=!1)},Ma=!mt&&(Vn.length>0?en:en&&!!D);return os(()=>{const rt=Ma?me:Z;typeof rt=="function"&&rt()},[Ma]),B.createElement(Tc.Wrapper,Ui(Ui({required:s,id:pn,label:l,error:f,description:c,size:d,className:r,style:o,classNames:m,styles:h,__staticSelector:"MultiSelect",sx:oe,errorProps:it,descriptionProps:Ce,labelProps:ot,inputContainer:Ue,inputWrapperOrder:st,unstyled:ye,withAsterisk:Pe,variant:V},fn),g),B.createElement(el,{opened:Ma,transitionProps:I,shadow:"sm",withinPortal:de,portalProps:ke,__staticSelector:"MultiSelect",onDirectionChange:Bn,switchDirectionOnFlip:we,zIndex:Re,dropdownPosition:vt,positionDependencies:[...qe,Hn],classNames:m,styles:h,unstyled:ye,variant:V},B.createElement(el.Target,null,B.createElement("div",{className:Ge.wrapper,role:"combobox","aria-haspopup":"listbox","aria-owns":en&&Ma?`${pn}-items`:null,"aria-controls":pn,"aria-expanded":en,onMouseLeave:()=>ar(-1),tabIndex:-1},B.createElement("input",{type:"hidden",name:$e,value:jt.join(","),form:Me,disabled:le}),B.createElement(Tc,Ui({__staticSelector:"MultiSelect",style:{overflow:"hidden"},component:"div",multiline:!0,size:d,variant:V,disabled:le,error:f,required:s,radius:ce,icon:J,unstyled:ye,onMouseDown:rt=>{var Dt;rt.preventDefault(),!le&&!qr.current&&un(!en),(Dt=Ht.current)==null||Dt.focus()},classNames:mj(Ui({},m),{input:Le({[Ge.input]:!O},m==null?void 0:m.input)})},yM({theme:bt,rightSection:re,rightSectionWidth:A,styles:h,size:d,shouldClear:Y&&jt.length>0,onClear:v0,error:f,disabled:le,clearButtonProps:Ne,readOnly:mt})),B.createElement("div",{className:Ge.values,"data-clearable":Y||void 0},hu,B.createElement("input",Ui({ref:df(t,Ht),type:"search",id:pn,className:Le(Ge.searchInput,{[Ge.searchInputPointer]:!O,[Ge.searchInputInputHidden]:!en&&jt.length>0||!O&&jt.length>0,[Ge.searchInputEmpty]:jt.length===0}),onKeyDown:_l,value:Hn,onChange:h0,onFocus:g0,onBlur:mu,readOnly:!O||qr.current||mt,placeholder:jt.length===0?T:void 0,disabled:le,"data-mantine-stop-propagation":en,autoComplete:"off",onCompositionStart:()=>zo(!0),onCompositionEnd:()=>zo(!1)},Bt)))))),B.createElement(el.Dropdown,{component:X||Rg,maxHeight:E,direction:vr,id:pn,innerRef:Pa,__staticSelector:"MultiSelect",classNames:m,styles:h},B.createElement(Ay,{data:Vn,hovered:Hs,classNames:m,styles:h,uuid:pn,__staticSelector:"MultiSelect",onItemHover:ar,onItemSelect:Ci,itemsRefs:zn,itemComponent:j,size:d,nothingFound:D,isItemSelected:gu,creatable:L&&!!Je,createLabel:Je,unstyled:ye,variant:V}))))});SM.displayName="@mantine/core/MultiSelect";var Tee=Object.defineProperty,Nee=Object.defineProperties,$ee=Object.getOwnPropertyDescriptors,Sh=Object.getOwnPropertySymbols,kM=Object.prototype.hasOwnProperty,jM=Object.prototype.propertyIsEnumerable,gj=(e,t,n)=>t in e?Tee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,l1=(e,t)=>{for(var n in t||(t={}))kM.call(t,n)&&gj(e,n,t[n]);if(Sh)for(var n of Sh(t))jM.call(t,n)&&gj(e,n,t[n]);return e},Lee=(e,t)=>Nee(e,$ee(t)),Fee=(e,t)=>{var n={};for(var r in e)kM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Sh)for(var r of Sh(e))t.indexOf(r)<0&&jM.call(e,r)&&(n[r]=e[r]);return n};const zee={type:"text",size:"sm",__staticSelector:"TextInput"},_M=i.forwardRef((e,t)=>{const n=GE("TextInput",zee,e),{inputProps:r,wrapperProps:o}=n,s=Fee(n,["inputProps","wrapperProps"]);return B.createElement(Tc.Wrapper,l1({},o),B.createElement(Tc,Lee(l1(l1({},r),s),{ref:t})))});_M.displayName="@mantine/core/TextInput";function Bee({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,filterDataOnExactSearchMatch:l}){if(!t)return e;const c=s!=null&&e.find(f=>f.value===s)||null;if(c&&!l&&(c==null?void 0:c.label)===r){if(n){if(n>=e.length)return e;const f=e.indexOf(c),m=f+n,h=m-e.length;return h>0?e.slice(f-h):e.slice(f,m)}return e}const d=[];for(let f=0;f=n));f+=1);return d}var Hee=gr(()=>({input:{"&:not(:disabled)":{cursor:"pointer","&::selection":{backgroundColor:"transparent"}}}}));const Wee=Hee;var Vee=Object.defineProperty,Uee=Object.defineProperties,Gee=Object.getOwnPropertyDescriptors,kh=Object.getOwnPropertySymbols,IM=Object.prototype.hasOwnProperty,PM=Object.prototype.propertyIsEnumerable,vj=(e,t,n)=>t in e?Vee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hu=(e,t)=>{for(var n in t||(t={}))IM.call(t,n)&&vj(e,n,t[n]);if(kh)for(var n of kh(t))PM.call(t,n)&&vj(e,n,t[n]);return e},i1=(e,t)=>Uee(e,Gee(t)),Kee=(e,t)=>{var n={};for(var r in e)IM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&kh)for(var r of kh(e))t.indexOf(r)<0&&PM.call(e,r)&&(n[r]=e[r]);return n};function qee(e,t){return t.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function Xee(e,t){return!!e&&!t.some(n=>n.label.toLowerCase()===e.toLowerCase())}const Qee={required:!1,size:"sm",shadow:"sm",itemComponent:Ty,transitionProps:{transition:"fade",duration:0},initiallyOpened:!1,filter:qee,maxDropdownHeight:220,searchable:!1,clearable:!1,limit:1/0,disabled:!1,creatable:!1,shouldCreate:Xee,selectOnBlur:!1,switchDirectionOnFlip:!1,filterDataOnExactSearchMatch:!1,zIndex:Oy("popover"),positionDependencies:[],dropdownPosition:"flip"},qy=i.forwardRef((e,t)=>{const n=GE("Select",Qee,e),{inputProps:r,wrapperProps:o,shadow:s,data:l,value:c,defaultValue:d,onChange:f,itemComponent:m,onKeyDown:h,onBlur:g,onFocus:b,transitionProps:y,initiallyOpened:x,unstyled:w,classNames:S,styles:j,filter:_,maxDropdownHeight:I,searchable:E,clearable:M,nothingFound:D,limit:R,disabled:N,onSearchChange:O,searchValue:T,rightSection:U,rightSectionWidth:G,creatable:q,getCreateLabel:Y,shouldCreate:Q,selectOnBlur:V,onCreate:se,dropdownComponent:ee,onDropdownClose:le,onDropdownOpen:ae,withinPortal:ce,portalProps:J,switchDirectionOnFlip:re,zIndex:A,name:L,dropdownPosition:K,allowDeselect:ne,placeholder:z,filterDataOnExactSearchMatch:oe,form:X,positionDependencies:Z,readOnly:me,clearButtonProps:ve,hoverOnSearchChange:de}=n,ke=Kee(n,["inputProps","wrapperProps","shadow","data","value","defaultValue","onChange","itemComponent","onKeyDown","onBlur","onFocus","transitionProps","initiallyOpened","unstyled","classNames","styles","filter","maxDropdownHeight","searchable","clearable","nothingFound","limit","disabled","onSearchChange","searchValue","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","selectOnBlur","onCreate","dropdownComponent","onDropdownClose","onDropdownOpen","withinPortal","portalProps","switchDirectionOnFlip","zIndex","name","dropdownPosition","allowDeselect","placeholder","filterDataOnExactSearchMatch","form","positionDependencies","readOnly","clearButtonProps","hoverOnSearchChange"]),{classes:we,cx:Re,theme:Qe}=Wee(),[$e,vt]=i.useState(x),[it,ot]=i.useState(-1),Ce=i.useRef(),Me=i.useRef({}),[qe,dt]=i.useState("column"),ye=qe==="column",{scrollIntoView:Ue,targetRef:st,scrollableRef:mt}=gP({duration:0,offset:5,cancelable:!1,isList:!0}),Pe=ne===void 0?M:ne,Ne=Je=>{if($e!==Je){vt(Je);const qt=Je?ae:le;typeof qt=="function"&&qt()}},kt=q&&typeof Y=="function";let Se=null;const Ve=l.map(Je=>typeof Je=="string"?{label:Je,value:Je}:Je),Ge=sP({data:Ve}),[Le,bt,fn]=Pd({value:c,defaultValue:d,finalValue:null,onChange:f}),Bt=Ge.find(Je=>Je.value===Le),[Ht,zn]=Pd({value:T,defaultValue:(Bt==null?void 0:Bt.label)||"",finalValue:void 0,onChange:O}),pn=Je=>{zn(Je),E&&typeof O=="function"&&O(Je)},en=()=>{var Je;me||(bt(null),fn||pn(""),(Je=Ce.current)==null||Je.focus())};i.useEffect(()=>{const Je=Ge.find(qt=>qt.value===Le);Je?pn(Je.label):(!kt||!Le)&&pn("")},[Le]),i.useEffect(()=>{Bt&&(!E||!$e)&&pn(Bt.label)},[Bt==null?void 0:Bt.label]);const un=Je=>{if(!me)if(Pe&&(Bt==null?void 0:Bt.value)===Je.value)bt(null),Ne(!1);else{if(Je.creatable&&typeof se=="function"){const qt=se(Je.value);typeof qt<"u"&&qt!==null&&bt(typeof qt=="string"?qt:qt.value)}else bt(Je.value);fn||pn(Je.label),ot(-1),Ne(!1),Ce.current.focus()}},Wt=Bee({data:Ge,searchable:E,limit:R,searchValue:Ht,filter:_,filterDataOnExactSearchMatch:oe,value:Le});kt&&Q(Ht,Wt)&&(Se=Y(Ht),Wt.push({label:Ht,value:Ht,creatable:!0}));const ar=(Je,qt,Wn)=>{let jt=Je;for(;Wn(jt);)if(jt=qt(jt),!Wt[jt].disabled)return jt;return Je};os(()=>{ot(de&&Ht?0:-1)},[Ht,de]);const vr=Le?Wt.findIndex(Je=>Je.value===Le):0,Bn=!me&&(Wt.length>0?$e:$e&&!!D),Hn=()=>{ot(Je=>{var qt;const Wn=ar(Je,jt=>jt-1,jt=>jt>0);return st.current=Me.current[(qt=Wt[Wn])==null?void 0:qt.value],Bn&&Ue({alignment:ye?"start":"end"}),Wn})},lo=()=>{ot(Je=>{var qt;const Wn=ar(Je,jt=>jt+1,jt=>jtwindow.setTimeout(()=>{var Je;st.current=Me.current[(Je=Wt[vr])==null?void 0:Je.value],Ue({alignment:ye?"end":"start"})},50);os(()=>{Bn&&Fo()},[Bn]);const zo=Je=>{switch(typeof h=="function"&&h(Je),Je.key){case"ArrowUp":{Je.preventDefault(),$e?ye?Hn():lo():(ot(vr),Ne(!0),Fo());break}case"ArrowDown":{Je.preventDefault(),$e?ye?lo():Hn():(ot(vr),Ne(!0),Fo());break}case"Home":{if(!E){Je.preventDefault(),$e||Ne(!0);const qt=Wt.findIndex(Wn=>!Wn.disabled);ot(qt),Bn&&Ue({alignment:ye?"end":"start"})}break}case"End":{if(!E){Je.preventDefault(),$e||Ne(!0);const qt=Wt.map(Wn=>!!Wn.disabled).lastIndexOf(!1);ot(qt),Bn&&Ue({alignment:ye?"end":"start"})}break}case"Escape":{Je.preventDefault(),Ne(!1),ot(-1);break}case" ":{E||(Je.preventDefault(),Wt[it]&&$e?un(Wt[it]):(Ne(!0),ot(vr),Fo()));break}case"Enter":E||Je.preventDefault(),Wt[it]&&$e&&(Je.preventDefault(),un(Wt[it]))}},Ia=Je=>{typeof g=="function"&&g(Je);const qt=Ge.find(Wn=>Wn.value===Le);V&&Wt[it]&&$e&&un(Wt[it]),pn((qt==null?void 0:qt.label)||""),Ne(!1)},xi=Je=>{typeof b=="function"&&b(Je),E&&Ne(!0)},Pa=Je=>{me||(pn(Je.currentTarget.value),M&&Je.currentTarget.value===""&&bt(null),ot(-1),Ne(!0))},yi=()=>{me||(Ne(!$e),Le&&!$e&&ot(vr))};return B.createElement(Tc.Wrapper,i1(Hu({},o),{__staticSelector:"Select"}),B.createElement(el,{opened:Bn,transitionProps:y,shadow:s,withinPortal:ce,portalProps:J,__staticSelector:"Select",onDirectionChange:dt,switchDirectionOnFlip:re,zIndex:A,dropdownPosition:K,positionDependencies:[...Z,Ht],classNames:S,styles:j,unstyled:w,variant:r.variant},B.createElement(el.Target,null,B.createElement("div",{role:"combobox","aria-haspopup":"listbox","aria-owns":Bn?`${r.id}-items`:null,"aria-controls":r.id,"aria-expanded":Bn,onMouseLeave:()=>ot(-1),tabIndex:-1},B.createElement("input",{type:"hidden",name:L,value:Le||"",form:X,disabled:N}),B.createElement(Tc,Hu(i1(Hu(Hu({autoComplete:"off",type:"search"},r),ke),{ref:df(t,Ce),onKeyDown:zo,__staticSelector:"Select",value:Ht,placeholder:z,onChange:Pa,"aria-autocomplete":"list","aria-controls":Bn?`${r.id}-items`:null,"aria-activedescendant":it>=0?`${r.id}-${it}`:null,onMouseDown:yi,onBlur:Ia,onFocus:xi,readOnly:!E||me,disabled:N,"data-mantine-stop-propagation":Bn,name:null,classNames:i1(Hu({},S),{input:Re({[we.input]:!E},S==null?void 0:S.input)})}),yM({theme:Qe,rightSection:U,rightSectionWidth:G,styles:j,size:r.size,shouldClear:M&&!!Bt,onClear:en,error:o.error,clearButtonProps:ve,disabled:N,readOnly:me}))))),B.createElement(el.Dropdown,{component:ee||Rg,maxHeight:I,direction:qe,id:r.id,innerRef:mt,__staticSelector:"Select",classNames:S,styles:j},B.createElement(Ay,{data:Wt,hovered:it,classNames:S,styles:j,isItemSelected:Je=>Je===Le,uuid:r.id,__staticSelector:"Select",onItemHover:ot,onItemSelect:un,itemsRefs:Me,itemComponent:m,size:r.size,nothingFound:D,creatable:kt&&!!Se,createLabel:Se,"aria-label":o.label,unstyled:w,variant:r.variant}))))});qy.displayName="@mantine/core/Select";const hf=()=>{const[e,t,n,r,o,s,l,c,d,f,m,h,g,b,y,x,w,S,j,_,I,E,M,D,R,N,O,T,U,G,q,Y,Q,V,se,ee,le,ae,ce,J,re,A,L,K,ne,z,oe,X,Z,me,ve,de,ke,we,Re,Qe,$e,vt,it,ot,Ce,Me,qe,dt,ye,Ue,st,mt,Pe,Ne,kt,Se,Ve,Ge,Le,bt]=Zo("colors",["base.50","base.100","base.150","base.200","base.250","base.300","base.350","base.400","base.450","base.500","base.550","base.600","base.650","base.700","base.750","base.800","base.850","base.900","base.950","accent.50","accent.100","accent.150","accent.200","accent.250","accent.300","accent.350","accent.400","accent.450","accent.500","accent.550","accent.600","accent.650","accent.700","accent.750","accent.800","accent.850","accent.900","accent.950","baseAlpha.50","baseAlpha.100","baseAlpha.150","baseAlpha.200","baseAlpha.250","baseAlpha.300","baseAlpha.350","baseAlpha.400","baseAlpha.450","baseAlpha.500","baseAlpha.550","baseAlpha.600","baseAlpha.650","baseAlpha.700","baseAlpha.750","baseAlpha.800","baseAlpha.850","baseAlpha.900","baseAlpha.950","accentAlpha.50","accentAlpha.100","accentAlpha.150","accentAlpha.200","accentAlpha.250","accentAlpha.300","accentAlpha.350","accentAlpha.400","accentAlpha.450","accentAlpha.500","accentAlpha.550","accentAlpha.600","accentAlpha.650","accentAlpha.700","accentAlpha.750","accentAlpha.800","accentAlpha.850","accentAlpha.900","accentAlpha.950"]);return{base50:e,base100:t,base150:n,base200:r,base250:o,base300:s,base350:l,base400:c,base450:d,base500:f,base550:m,base600:h,base650:g,base700:b,base750:y,base800:x,base850:w,base900:S,base950:j,accent50:_,accent100:I,accent150:E,accent200:M,accent250:D,accent300:R,accent350:N,accent400:O,accent450:T,accent500:U,accent550:G,accent600:q,accent650:Y,accent700:Q,accent750:V,accent800:se,accent850:ee,accent900:le,accent950:ae,baseAlpha50:ce,baseAlpha100:J,baseAlpha150:re,baseAlpha200:A,baseAlpha250:L,baseAlpha300:K,baseAlpha350:ne,baseAlpha400:z,baseAlpha450:oe,baseAlpha500:X,baseAlpha550:Z,baseAlpha600:me,baseAlpha650:ve,baseAlpha700:de,baseAlpha750:ke,baseAlpha800:we,baseAlpha850:Re,baseAlpha900:Qe,baseAlpha950:$e,accentAlpha50:vt,accentAlpha100:it,accentAlpha150:ot,accentAlpha200:Ce,accentAlpha250:Me,accentAlpha300:qe,accentAlpha350:dt,accentAlpha400:ye,accentAlpha450:Ue,accentAlpha500:st,accentAlpha550:mt,accentAlpha600:Pe,accentAlpha650:Ne,accentAlpha700:kt,accentAlpha750:Se,accentAlpha800:Ve,accentAlpha850:Ge,accentAlpha900:Le,accentAlpha950:bt}},Te=(e,t)=>n=>n==="light"?e:t,EM=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:l,base700:c,base800:d,base900:f,accent200:m,accent300:h,accent400:g,accent500:b,accent600:y}=hf(),{colorMode:x}=ya(),[w]=Zo("shadows",["dark-lg"]),[S,j,_]=Zo("space",[1,2,6]),[I]=Zo("radii",["base"]),[E]=Zo("lineHeights",["base"]);return i.useCallback(()=>({label:{color:Te(c,r)(x)},separatorLabel:{color:Te(s,s)(x),"::after":{borderTopColor:Te(r,c)(x)}},input:{border:"unset",backgroundColor:Te(e,f)(x),borderRadius:I,borderStyle:"solid",borderWidth:"2px",borderColor:Te(n,d)(x),color:Te(f,t)(x),minHeight:"unset",lineHeight:E,height:"auto",paddingRight:0,paddingLeft:0,paddingInlineStart:j,paddingInlineEnd:_,paddingTop:S,paddingBottom:S,fontWeight:600,"&:hover":{borderColor:Te(r,l)(x)},"&:focus":{borderColor:Te(h,y)(x)},"&:is(:focus, :hover)":{borderColor:Te(o,s)(x)},"&:focus-within":{borderColor:Te(m,y)(x)},"&[data-disabled]":{backgroundColor:Te(r,c)(x),color:Te(l,o)(x),cursor:"not-allowed"}},value:{backgroundColor:Te(t,f)(x),color:Te(f,t)(x),button:{color:Te(f,t)(x)},"&:hover":{backgroundColor:Te(r,c)(x),cursor:"pointer"}},dropdown:{backgroundColor:Te(n,d)(x),borderColor:Te(n,d)(x),boxShadow:w},item:{backgroundColor:Te(n,d)(x),color:Te(d,n)(x),padding:6,"&[data-hovered]":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)},"&[data-active]":{backgroundColor:Te(r,c)(x),"&:hover":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)}},"&[data-selected]":{backgroundColor:Te(g,y)(x),color:Te(e,t)(x),fontWeight:600,"&:hover":{backgroundColor:Te(b,b)(x),color:Te("white",e)(x)}},"&[data-disabled]":{color:Te(s,l)(x),cursor:"not-allowed"}},rightSection:{width:32,button:{color:Te(f,t)(x)}}}),[m,h,g,b,y,t,n,r,o,e,s,l,c,d,f,w,x,E,I,S,j,_])},MM=_e((e,t)=>{const{searchable:n=!0,tooltip:r,inputRef:o,onChange:s,label:l,disabled:c,...d}=e,f=te(),[m,h]=i.useState(""),g=i.useCallback(w=>{w.shiftKey&&f(zr(!0))},[f]),b=i.useCallback(w=>{w.shiftKey||f(zr(!1))},[f]),y=i.useCallback(w=>{s&&s(w)},[s]),x=EM();return a.jsx(Ut,{label:r,placement:"top",hasArrow:!0,children:a.jsxs(Gt,{ref:t,isDisabled:c,position:"static","data-testid":`select-${l||e.placeholder}`,children:[l&&a.jsx(ln,{children:l}),a.jsx(qy,{ref:o,disabled:c,searchValue:m,onSearchChange:h,onChange:y,onKeyDown:g,onKeyUp:b,searchable:n,maxDropdownHeight:300,styles:x,...d})]})})});MM.displayName="IAIMantineSearchableSelect";const sn=i.memo(MM),Yee=fe([pe],({changeBoardModal:e})=>{const{isModalOpen:t,imagesToChange:n}=e;return{isModalOpen:t,imagesToChange:n}}),Zee=()=>{const e=te(),[t,n]=i.useState(),{data:r,isFetching:o}=Wd(),{imagesToChange:s,isModalOpen:l}=H(Yee),[c]=BR(),[d]=HR(),{t:f}=W(),m=i.useMemo(()=>{const x=[{label:f("boards.uncategorized"),value:"none"}];return(r??[]).forEach(w=>x.push({label:w.board_name,value:w.board_id})),x},[r,f]),h=i.useCallback(()=>{e(Tw()),e(yx(!1))},[e]),g=i.useCallback(()=>{!s.length||!t||(t==="none"?d({imageDTOs:s}):c({imageDTOs:s,board_id:t}),n(null),e(Tw()))},[c,e,s,d,t]),b=i.useCallback(x=>n(x),[]),y=i.useRef(null);return a.jsx(Zc,{isOpen:l,onClose:h,leastDestructiveRef:y,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:f("boards.changeBoard")}),a.jsx(Mo,{children:a.jsxs($,{sx:{flexDir:"column",gap:4},children:[a.jsxs(be,{children:[f("boards.movingImagesToBoard",{count:s.length}),":"]}),a.jsx(sn,{placeholder:f(o?"boards.loading":"boards.selectBoard"),disabled:o,onChange:b,value:t,data:m})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:y,onClick:h,children:f("boards.cancel")}),a.jsx(Xe,{colorScheme:"accent",onClick:g,ml:3,children:f("boards.move")})]})]})})})},Jee=i.memo(Zee),OM=e=>{const{label:t,isDisabled:n=!1,width:r="auto",formControlProps:o,formLabelProps:s,tooltip:l,helperText:c,...d}=e;return a.jsx(Ut,{label:l,hasArrow:!0,placement:"top",isDisabled:!l,children:a.jsx(Gt,{isDisabled:n,width:r,alignItems:"center",...o,children:a.jsxs($,{sx:{flexDir:"column",w:"full"},children:[a.jsxs($,{sx:{alignItems:"center",w:"full"},children:[t&&a.jsx(ln,{my:1,flexGrow:1,sx:{cursor:n?"not-allowed":"pointer",...s==null?void 0:s.sx,pe:4},...s,children:t}),a.jsx(Iy,{...d})]}),c&&a.jsx(N3,{children:a.jsx(be,{variant:"subtext",children:c})})]})})})};OM.displayName="IAISwitch";const _n=i.memo(OM),ete=e=>{const{t}=W(),{imageUsage:n,topMessage:r=t("gallery.currentlyInUse"),bottomMessage:o=t("gallery.featuresWillReset")}=e;return!n||!Jo(n)?null:a.jsxs(a.Fragment,{children:[a.jsx(be,{children:r}),a.jsxs(cg,{sx:{paddingInlineStart:6},children:[n.isInitialImage&&a.jsx(ts,{children:t("common.img2img")}),n.isCanvasImage&&a.jsx(ts,{children:t("common.unifiedCanvas")}),n.isControlImage&&a.jsx(ts,{children:t("common.controlNet")}),n.isNodesImage&&a.jsx(ts,{children:t("common.nodeEditor")})]}),a.jsx(be,{children:o})]})},DM=i.memo(ete),tte=fe([pe,WR],(e,t)=>{const{system:n,config:r,deleteImageModal:o}=e,{shouldConfirmOnDelete:s}=n,{canRestoreDeletedImagesFromBin:l}=r,{imagesToDelete:c,isModalOpen:d}=o,f=(c??[]).map(({image_name:h})=>wI(e,h)),m={isInitialImage:Jo(f,h=>h.isInitialImage),isCanvasImage:Jo(f,h=>h.isCanvasImage),isNodesImage:Jo(f,h=>h.isNodesImage),isControlImage:Jo(f,h=>h.isControlImage)};return{shouldConfirmOnDelete:s,canRestoreDeletedImagesFromBin:l,imagesToDelete:c,imagesUsage:t,isModalOpen:d,imageUsageSummary:m}}),nte=()=>{const e=te(),{t}=W(),{shouldConfirmOnDelete:n,canRestoreDeletedImagesFromBin:r,imagesToDelete:o,imagesUsage:s,isModalOpen:l,imageUsageSummary:c}=H(tte),d=i.useCallback(g=>e(SI(!g.target.checked)),[e]),f=i.useCallback(()=>{e(Nw()),e(VR(!1))},[e]),m=i.useCallback(()=>{!o.length||!s.length||(e(Nw()),e(UR({imageDTOs:o,imagesUsage:s})))},[e,o,s]),h=i.useRef(null);return a.jsx(Zc,{isOpen:l,onClose:f,leastDestructiveRef:h,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:t("gallery.deleteImage")}),a.jsx(Mo,{children:a.jsxs($,{direction:"column",gap:3,children:[a.jsx(DM,{imageUsage:c}),a.jsx(On,{}),a.jsx(be,{children:t(r?"gallery.deleteImageBin":"gallery.deleteImagePermanent")}),a.jsx(be,{children:t("common.areYouSure")}),a.jsx(_n,{label:t("common.dontAskMeAgain"),isChecked:!n,onChange:d})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:h,onClick:f,children:t("boards.cancel")}),a.jsx(Xe,{colorScheme:"error",onClick:m,ml:3,children:t("controlnet.delete")})]})]})})})},rte=i.memo(nte),RM=_e((e,t)=>{const{role:n,tooltip:r="",tooltipProps:o,isChecked:s,...l}=e;return a.jsx(Ut,{label:r,hasArrow:!0,...o,...o!=null&&o.placement?{placement:o.placement}:{placement:"top"},children:a.jsx(rs,{ref:t,role:n,colorScheme:s?"accent":"base","data-testid":r,...l})})});RM.displayName="IAIIconButton";const Fe=i.memo(RM);var AM={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},bj=B.createContext&&B.createContext(AM),tl=globalThis&&globalThis.__assign||function(){return tl=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{const t=H(l=>l.config.disabledTabs),n=H(l=>l.config.disabledFeatures),r=H(l=>l.config.disabledSDFeatures),o=i.useMemo(()=>n.includes(e)||r.includes(e)||t.includes(e),[n,r,t,e]),s=i.useMemo(()=>!(n.includes(e)||r.includes(e)||t.includes(e)),[n,r,t,e]);return{isFeatureDisabled:o,isFeatureEnabled:s}};function Qte(e){const{title:t,hotkey:n,description:r}=e;return a.jsxs(sl,{sx:{gridTemplateColumns:"auto max-content",justifyContent:"space-between",alignItems:"center"},children:[a.jsxs(sl,{children:[a.jsx(be,{fontWeight:600,children:t}),r&&a.jsx(be,{sx:{fontSize:"sm"},variant:"subtext",children:r})]}),a.jsx(Ie,{sx:{fontSize:"sm",fontWeight:600,px:2,py:1},children:n})]})}function Yte({children:e}){const{isOpen:t,onOpen:n,onClose:r}=sr(),{t:o}=W(),s=[{title:o("hotkeys.invoke.title"),desc:o("hotkeys.invoke.desc"),hotkey:"Ctrl+Enter"},{title:o("hotkeys.cancel.title"),desc:o("hotkeys.cancel.desc"),hotkey:"Shift+X"},{title:o("hotkeys.focusPrompt.title"),desc:o("hotkeys.focusPrompt.desc"),hotkey:"Alt+A"},{title:o("hotkeys.toggleOptions.title"),desc:o("hotkeys.toggleOptions.desc"),hotkey:"O"},{title:o("hotkeys.toggleGallery.title"),desc:o("hotkeys.toggleGallery.desc"),hotkey:"G"},{title:o("hotkeys.maximizeWorkSpace.title"),desc:o("hotkeys.maximizeWorkSpace.desc"),hotkey:"F"},{title:o("hotkeys.changeTabs.title"),desc:o("hotkeys.changeTabs.desc"),hotkey:"1-5"}],l=[{title:o("hotkeys.setPrompt.title"),desc:o("hotkeys.setPrompt.desc"),hotkey:"P"},{title:o("hotkeys.setSeed.title"),desc:o("hotkeys.setSeed.desc"),hotkey:"S"},{title:o("hotkeys.setParameters.title"),desc:o("hotkeys.setParameters.desc"),hotkey:"A"},{title:o("hotkeys.upscale.title"),desc:o("hotkeys.upscale.desc"),hotkey:"Shift+U"},{title:o("hotkeys.showInfo.title"),desc:o("hotkeys.showInfo.desc"),hotkey:"I"},{title:o("hotkeys.sendToImageToImage.title"),desc:o("hotkeys.sendToImageToImage.desc"),hotkey:"Shift+I"},{title:o("hotkeys.deleteImage.title"),desc:o("hotkeys.deleteImage.desc"),hotkey:"Del"},{title:o("hotkeys.closePanels.title"),desc:o("hotkeys.closePanels.desc"),hotkey:"Esc"}],c=[{title:o("hotkeys.previousImage.title"),desc:o("hotkeys.previousImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextImage.title"),desc:o("hotkeys.nextImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.increaseGalleryThumbSize.title"),desc:o("hotkeys.increaseGalleryThumbSize.desc"),hotkey:"Shift+Up"},{title:o("hotkeys.decreaseGalleryThumbSize.title"),desc:o("hotkeys.decreaseGalleryThumbSize.desc"),hotkey:"Shift+Down"}],d=[{title:o("hotkeys.selectBrush.title"),desc:o("hotkeys.selectBrush.desc"),hotkey:"B"},{title:o("hotkeys.selectEraser.title"),desc:o("hotkeys.selectEraser.desc"),hotkey:"E"},{title:o("hotkeys.decreaseBrushSize.title"),desc:o("hotkeys.decreaseBrushSize.desc"),hotkey:"["},{title:o("hotkeys.increaseBrushSize.title"),desc:o("hotkeys.increaseBrushSize.desc"),hotkey:"]"},{title:o("hotkeys.decreaseBrushOpacity.title"),desc:o("hotkeys.decreaseBrushOpacity.desc"),hotkey:"Shift + ["},{title:o("hotkeys.increaseBrushOpacity.title"),desc:o("hotkeys.increaseBrushOpacity.desc"),hotkey:"Shift + ]"},{title:o("hotkeys.moveTool.title"),desc:o("hotkeys.moveTool.desc"),hotkey:"V"},{title:o("hotkeys.fillBoundingBox.title"),desc:o("hotkeys.fillBoundingBox.desc"),hotkey:"Shift + F"},{title:o("hotkeys.eraseBoundingBox.title"),desc:o("hotkeys.eraseBoundingBox.desc"),hotkey:"Delete / Backspace"},{title:o("hotkeys.colorPicker.title"),desc:o("hotkeys.colorPicker.desc"),hotkey:"C"},{title:o("hotkeys.toggleSnap.title"),desc:o("hotkeys.toggleSnap.desc"),hotkey:"N"},{title:o("hotkeys.quickToggleMove.title"),desc:o("hotkeys.quickToggleMove.desc"),hotkey:"Hold Space"},{title:o("hotkeys.toggleLayer.title"),desc:o("hotkeys.toggleLayer.desc"),hotkey:"Q"},{title:o("hotkeys.clearMask.title"),desc:o("hotkeys.clearMask.desc"),hotkey:"Shift+C"},{title:o("hotkeys.hideMask.title"),desc:o("hotkeys.hideMask.desc"),hotkey:"H"},{title:o("hotkeys.showHideBoundingBox.title"),desc:o("hotkeys.showHideBoundingBox.desc"),hotkey:"Shift+H"},{title:o("hotkeys.mergeVisible.title"),desc:o("hotkeys.mergeVisible.desc"),hotkey:"Shift+M"},{title:o("hotkeys.saveToGallery.title"),desc:o("hotkeys.saveToGallery.desc"),hotkey:"Shift+S"},{title:o("hotkeys.copyToClipboard.title"),desc:o("hotkeys.copyToClipboard.desc"),hotkey:"Ctrl+C"},{title:o("hotkeys.downloadImage.title"),desc:o("hotkeys.downloadImage.desc"),hotkey:"Shift+D"},{title:o("hotkeys.undoStroke.title"),desc:o("hotkeys.undoStroke.desc"),hotkey:"Ctrl+Z"},{title:o("hotkeys.redoStroke.title"),desc:o("hotkeys.redoStroke.desc"),hotkey:"Ctrl+Shift+Z, Ctrl+Y"},{title:o("hotkeys.resetView.title"),desc:o("hotkeys.resetView.desc"),hotkey:"R"},{title:o("hotkeys.previousStagingImage.title"),desc:o("hotkeys.previousStagingImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextStagingImage.title"),desc:o("hotkeys.nextStagingImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.acceptStagingImage.title"),desc:o("hotkeys.acceptStagingImage.desc"),hotkey:"Enter"}],f=[{title:o("hotkeys.addNodes.title"),desc:o("hotkeys.addNodes.desc"),hotkey:"Shift + A / Space"}],m=h=>a.jsx($,{flexDir:"column",gap:4,children:h.map((g,b)=>a.jsxs($,{flexDir:"column",px:2,gap:4,children:[a.jsx(Qte,{title:g.title,description:g.desc,hotkey:g.hotkey}),b{const{data:t}=GR(),n=i.useRef(null),r=YM(n);return a.jsxs($,{alignItems:"center",gap:5,ps:1,ref:n,children:[a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",sx:{w:"32px",h:"32px",minW:"32px",minH:"32px",userSelect:"none"}}),a.jsxs($,{sx:{gap:3,alignItems:"center"},children:[a.jsxs(be,{sx:{fontSize:"xl",userSelect:"none"},children:["invoke ",a.jsx("strong",{children:"ai"})]}),a.jsx(hr,{children:e&&r&&t&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsx(be,{sx:{fontWeight:600,marginTop:1,color:"base.300",fontSize:14},variant:"subtext",children:t.version})},"statusText")})]})]})},sne=i.memo(one),ZM=_e((e,t)=>{const{tooltip:n,formControlProps:r,inputRef:o,label:s,disabled:l,required:c,...d}=e,f=EM();return a.jsx(Ut,{label:n,placement:"top",hasArrow:!0,children:a.jsxs(Gt,{ref:t,isRequired:c,isDisabled:l,position:"static","data-testid":`select-${s||e.placeholder}`,...r,children:[a.jsx(ln,{children:s}),a.jsx(qy,{disabled:l,ref:o,styles:f,...d})]})})});ZM.displayName="IAIMantineSelect";const yn=i.memo(ZM),JM=()=>i.useCallback(()=>{KR(qR),localStorage.clear()},[]),e8=fe(pe,({system:e})=>e.language),ane={ar:wt.t("common.langArabic",{lng:"ar"}),nl:wt.t("common.langDutch",{lng:"nl"}),en:wt.t("common.langEnglish",{lng:"en"}),fr:wt.t("common.langFrench",{lng:"fr"}),de:wt.t("common.langGerman",{lng:"de"}),he:wt.t("common.langHebrew",{lng:"he"}),it:wt.t("common.langItalian",{lng:"it"}),ja:wt.t("common.langJapanese",{lng:"ja"}),ko:wt.t("common.langKorean",{lng:"ko"}),pl:wt.t("common.langPolish",{lng:"pl"}),pt_BR:wt.t("common.langBrPortuguese",{lng:"pt_BR"}),pt:wt.t("common.langPortuguese",{lng:"pt"}),ru:wt.t("common.langRussian",{lng:"ru"}),zh_CN:wt.t("common.langSimplifiedChinese",{lng:"zh_CN"}),es:wt.t("common.langSpanish",{lng:"es"}),uk:wt.t("common.langUkranian",{lng:"ua"})},lne={CONNECTED:"common.statusConnected",DISCONNECTED:"common.statusDisconnected",PROCESSING:"common.statusProcessing",ERROR:"common.statusError",LOADING_MODEL:"common.statusLoadingModel"};function qo(e){const{t}=W(),{label:n,textProps:r,useBadge:o=!1,badgeLabel:s=t("settings.experimental"),badgeProps:l,...c}=e;return a.jsxs($,{justifyContent:"space-between",py:1,children:[a.jsxs($,{gap:2,alignItems:"center",children:[a.jsx(be,{sx:{fontSize:14,_dark:{color:"base.300"}},...r,children:n}),o&&a.jsx(Sa,{size:"xs",sx:{px:2,color:"base.700",bg:"accent.200",_dark:{bg:"accent.500",color:"base.200"}},...l,children:s})]}),a.jsx(_n,{...c})]})}const ine=e=>a.jsx($,{sx:{flexDirection:"column",gap:2,p:4,borderRadius:"base",bg:"base.100",_dark:{bg:"base.900"}},children:e.children}),Ji=i.memo(ine);function cne(){const{t:e}=W(),t=te(),{data:n}=XR(void 0,{refetchOnMountOrArgChange:!0}),[r,{isLoading:o}]=QR(),{data:s}=Ls(),l=s&&(s.queue.in_progress>0||s.queue.pending>0),c=i.useCallback(()=>{l||r().unwrap().then(d=>{t(kI()),t(jI()),t(lt({title:e("settings.intermediatesCleared",{count:d}),status:"info"}))}).catch(()=>{t(lt({title:e("settings.intermediatesClearedFailed"),status:"error"}))})},[e,r,t,l]);return a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:e("settings.clearIntermediates")}),a.jsx(Xe,{tooltip:l?e("settings.clearIntermediatesDisabled"):void 0,colorScheme:"warning",onClick:c,isLoading:o,isDisabled:!n||l,children:e("settings.clearIntermediatesWithCount",{count:n??0})}),a.jsx(be,{fontWeight:"bold",children:e("settings.clearIntermediatesDesc1")}),a.jsx(be,{variant:"subtext",children:e("settings.clearIntermediatesDesc2")}),a.jsx(be,{variant:"subtext",children:e("settings.clearIntermediatesDesc3")})]})}const une=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:l,base700:c,base800:d,base900:f,accent200:m,accent300:h,accent400:g,accent500:b,accent600:y}=hf(),{colorMode:x}=ya(),[w]=Zo("shadows",["dark-lg"]);return i.useCallback(()=>({label:{color:Te(c,r)(x)},separatorLabel:{color:Te(s,s)(x),"::after":{borderTopColor:Te(r,c)(x)}},searchInput:{":placeholder":{color:Te(r,c)(x)}},input:{backgroundColor:Te(e,f)(x),borderWidth:"2px",borderColor:Te(n,d)(x),color:Te(f,t)(x),paddingRight:24,fontWeight:600,"&:hover":{borderColor:Te(r,l)(x)},"&:focus":{borderColor:Te(h,y)(x)},"&:is(:focus, :hover)":{borderColor:Te(o,s)(x)},"&:focus-within":{borderColor:Te(m,y)(x)},"&[data-disabled]":{backgroundColor:Te(r,c)(x),color:Te(l,o)(x),cursor:"not-allowed"}},value:{backgroundColor:Te(n,d)(x),color:Te(f,t)(x),button:{color:Te(f,t)(x)},"&:hover":{backgroundColor:Te(r,c)(x),cursor:"pointer"}},dropdown:{backgroundColor:Te(n,d)(x),borderColor:Te(n,d)(x),boxShadow:w},item:{backgroundColor:Te(n,d)(x),color:Te(d,n)(x),padding:6,"&[data-hovered]":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)},"&[data-active]":{backgroundColor:Te(r,c)(x),"&:hover":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)}},"&[data-selected]":{backgroundColor:Te(g,y)(x),color:Te(e,t)(x),fontWeight:600,"&:hover":{backgroundColor:Te(b,b)(x),color:Te("white",e)(x)}},"&[data-disabled]":{color:Te(s,l)(x),cursor:"not-allowed"}},rightSection:{width:24,padding:20,button:{color:Te(f,t)(x)}}}),[m,h,g,b,y,t,n,r,o,e,s,l,c,d,f,w,x])},t8=_e((e,t)=>{const{searchable:n=!0,tooltip:r,inputRef:o,label:s,disabled:l,...c}=e,d=te(),f=i.useCallback(g=>{g.shiftKey&&d(zr(!0))},[d]),m=i.useCallback(g=>{g.shiftKey||d(zr(!1))},[d]),h=une();return a.jsx(Ut,{label:r,placement:"top",hasArrow:!0,isOpen:!0,children:a.jsxs(Gt,{ref:t,isDisabled:l,position:"static",children:[s&&a.jsx(ln,{children:s}),a.jsx(SM,{ref:o,disabled:l,onKeyDown:f,onKeyUp:m,searchable:n,maxDropdownHeight:300,styles:h,...c})]})})});t8.displayName="IAIMantineMultiSelect";const dne=i.memo(t8),fne=Hr(Gh,(e,t)=>({value:t,label:e})).sort((e,t)=>e.label.localeCompare(t.label));function pne(){const e=te(),{t}=W(),n=H(o=>o.ui.favoriteSchedulers),r=i.useCallback(o=>{e(YR(o))},[e]);return a.jsx(dne,{label:t("settings.favoriteSchedulers"),value:n,data:fne,onChange:r,clearable:!0,searchable:!0,maxSelectedValues:99,placeholder:t("settings.favoriteSchedulersPlaceholder")})}const mne=fe([pe],({system:e,ui:t})=>{const{shouldConfirmOnDelete:n,enableImageDebugging:r,consoleLogLevel:o,shouldLogToConsole:s,shouldAntialiasProgressImage:l,shouldUseNSFWChecker:c,shouldUseWatermarker:d,shouldEnableInformationalPopovers:f}=e,{shouldUseSliders:m,shouldShowProgressInViewer:h,shouldAutoChangeDimensions:g}=t;return{shouldConfirmOnDelete:n,enableImageDebugging:r,shouldUseSliders:m,shouldShowProgressInViewer:h,consoleLogLevel:o,shouldLogToConsole:s,shouldAntialiasProgressImage:l,shouldUseNSFWChecker:c,shouldUseWatermarker:d,shouldAutoChangeDimensions:g,shouldEnableInformationalPopovers:f}}),hne=({children:e,config:t})=>{const n=te(),{t:r}=W(),[o,s]=i.useState(3),l=(t==null?void 0:t.shouldShowDeveloperSettings)??!0,c=(t==null?void 0:t.shouldShowResetWebUiText)??!0,d=(t==null?void 0:t.shouldShowClearIntermediates)??!0,f=(t==null?void 0:t.shouldShowLocalizationToggle)??!0;i.useEffect(()=>{l||n($w(!1))},[l,n]);const{isNSFWCheckerAvailable:m,isWatermarkerAvailable:h}=_I(void 0,{selectFromResult:({data:X})=>({isNSFWCheckerAvailable:(X==null?void 0:X.nsfw_methods.includes("nsfw_checker"))??!1,isWatermarkerAvailable:(X==null?void 0:X.watermarking_methods.includes("invisible_watermark"))??!1})}),{isOpen:g,onOpen:b,onClose:y}=sr(),{isOpen:x,onOpen:w,onClose:S}=sr(),{shouldConfirmOnDelete:j,enableImageDebugging:_,shouldUseSliders:I,shouldShowProgressInViewer:E,consoleLogLevel:M,shouldLogToConsole:D,shouldAntialiasProgressImage:R,shouldUseNSFWChecker:N,shouldUseWatermarker:O,shouldAutoChangeDimensions:T,shouldEnableInformationalPopovers:U}=H(mne),G=JM(),q=i.useCallback(()=>{G(),y(),w(),setInterval(()=>s(X=>X-1),1e3)},[G,y,w]);i.useEffect(()=>{o<=0&&window.location.reload()},[o]);const Y=i.useCallback(X=>{n(ZR(X))},[n]),Q=i.useCallback(X=>{n(JR(X))},[n]),V=i.useCallback(X=>{n($w(X.target.checked))},[n]),{colorMode:se,toggleColorMode:ee}=ya(),le=Mt("localization").isFeatureEnabled,ae=H(e8),ce=i.useCallback(X=>{n(SI(X.target.checked))},[n]),J=i.useCallback(X=>{n(eA(X.target.checked))},[n]),re=i.useCallback(X=>{n(tA(X.target.checked))},[n]),A=i.useCallback(X=>{n(nA(X.target.checked))},[n]),L=i.useCallback(X=>{n(II(X.target.checked))},[n]),K=i.useCallback(X=>{n(rA(X.target.checked))},[n]),ne=i.useCallback(X=>{n(oA(X.target.checked))},[n]),z=i.useCallback(X=>{n(sA(X.target.checked))},[n]),oe=i.useCallback(X=>{n(aA(X.target.checked))},[n]);return a.jsxs(a.Fragment,{children:[i.cloneElement(e,{onClick:b}),a.jsxs(ni,{isOpen:g,onClose:y,size:"2xl",isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{children:[a.jsx(Po,{bg:"none",children:r("common.settingsLabel")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsxs($,{sx:{gap:4,flexDirection:"column"},children:[a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.general")}),a.jsx(qo,{label:r("settings.confirmOnDelete"),isChecked:j,onChange:ce})]}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.generation")}),a.jsx(pne,{}),a.jsx(qo,{label:r("settings.enableNSFWChecker"),isDisabled:!m,isChecked:N,onChange:J}),a.jsx(qo,{label:r("settings.enableInvisibleWatermark"),isDisabled:!h,isChecked:O,onChange:re})]}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.ui")}),a.jsx(qo,{label:r("common.darkMode"),isChecked:se==="dark",onChange:ee}),a.jsx(qo,{label:r("settings.useSlidersForAll"),isChecked:I,onChange:A}),a.jsx(qo,{label:r("settings.showProgressInViewer"),isChecked:E,onChange:L}),a.jsx(qo,{label:r("settings.antialiasProgressImages"),isChecked:R,onChange:K}),a.jsx(qo,{label:r("settings.autoChangeDimensions"),isChecked:T,onChange:ne}),f&&a.jsx(yn,{disabled:!le,label:r("common.languagePickerLabel"),value:ae,data:Object.entries(ane).map(([X,Z])=>({value:X,label:Z})),onChange:Q}),a.jsx(qo,{label:r("settings.enableInformationalPopovers"),isChecked:U,onChange:z})]}),l&&a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.developer")}),a.jsx(qo,{label:r("settings.shouldLogToConsole"),isChecked:D,onChange:V}),a.jsx(yn,{disabled:!D,label:r("settings.consoleLogLevel"),onChange:Y,value:M,data:lA.concat()}),a.jsx(qo,{label:r("settings.enableImageDebugging"),isChecked:_,onChange:oe})]}),d&&a.jsx(cne,{}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.resetWebUI")}),a.jsx(Xe,{colorScheme:"error",onClick:q,children:r("settings.resetWebUI")}),c&&a.jsxs(a.Fragment,{children:[a.jsx(be,{variant:"subtext",children:r("settings.resetWebUIDesc1")}),a.jsx(be,{variant:"subtext",children:r("settings.resetWebUIDesc2")})]})]})]})}),a.jsx(ls,{children:a.jsx(Xe,{onClick:y,children:r("common.close")})})]})]}),a.jsxs(ni,{closeOnOverlayClick:!1,isOpen:x,onClose:S,isCentered:!0,closeOnEsc:!1,children:[a.jsx(Eo,{backdropFilter:"blur(40px)"}),a.jsxs(ri,{children:[a.jsx(Po,{}),a.jsx(Mo,{children:a.jsx($,{justifyContent:"center",children:a.jsx(be,{fontSize:"lg",children:a.jsxs(be,{children:[r("settings.resetComplete")," ",r("settings.reloadingIn")," ",o,"..."]})})})}),a.jsx(ls,{})]})]})]})},gne=i.memo(hne),vne=fe(pe,({system:e})=>{const{isConnected:t,status:n}=e;return{isConnected:t,statusTranslationKey:lne[n]}}),wj={ok:"green.400",working:"yellow.400",error:"red.400"},Sj={ok:"green.600",working:"yellow.500",error:"red.500"},bne=()=>{const{isConnected:e,statusTranslationKey:t}=H(vne),{t:n}=W(),r=i.useRef(null),{data:o}=Ls(),s=i.useMemo(()=>e?o!=null&&o.queue.in_progress?"working":"ok":"error",[o==null?void 0:o.queue.in_progress,e]),l=YM(r);return a.jsxs($,{ref:r,h:"full",px:2,alignItems:"center",gap:5,children:[a.jsx(hr,{children:l&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:"600",pb:"1px",userSelect:"none",color:Sj[s],_dark:{color:wj[s]}},children:n(t)})},"statusText")}),a.jsx(An,{as:bte,sx:{boxSize:"0.5rem",color:Sj[s],_dark:{color:wj[s]}}})]})},xne=i.memo(bne),Yy=e=>{const t=H(n=>n.ui.globalMenuCloseTrigger);i.useEffect(()=>{e()},[t,e])},yne=()=>{const{t:e}=W(),{isOpen:t,onOpen:n,onClose:r}=sr();Yy(r);const o=Mt("bugLink").isFeatureEnabled,s=Mt("discordLink").isFeatureEnabled,l=Mt("githubLink").isFeatureEnabled,c="http://github.com/invoke-ai/InvokeAI",d="https://discord.gg/ZmtBAhwWhy";return a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(sne,{}),a.jsx(Wr,{}),a.jsx(xne,{}),a.jsxs(of,{isOpen:t,onOpen:n,onClose:r,children:[a.jsx(sf,{as:Fe,variant:"link","aria-label":e("accessibility.menu"),icon:a.jsx(mte,{}),sx:{boxSize:8}}),a.jsxs(al,{motionProps:Yl,children:[a.jsxs(_d,{title:e("common.communityLabel"),children:[l&&a.jsx(At,{as:"a",href:c,target:"_blank",icon:a.jsx(lte,{}),children:e("common.githubLabel")}),o&&a.jsx(At,{as:"a",href:`${c}/issues`,target:"_blank",icon:a.jsx(hte,{}),children:e("common.reportBugLabel")}),s&&a.jsx(At,{as:"a",href:d,target:"_blank",icon:a.jsx(ate,{}),children:e("common.discordLabel")})]}),a.jsxs(_d,{title:e("common.settingsLabel"),children:[a.jsx(Yte,{children:a.jsx(At,{as:"button",icon:a.jsx(Nte,{}),children:e("common.hotkeysLabel")})}),a.jsx(gne,{children:a.jsx(At,{as:"button",icon:a.jsx(FM,{}),children:e("common.settingsLabel")})})]})]})]})]})},Cne=i.memo(yne),wne=e=>{const{boardToDelete:t,setBoardToDelete:n}=e,{t:r}=W(),o=H(j=>j.config.canRestoreDeletedImagesFromBin),{currentData:s,isFetching:l}=iA((t==null?void 0:t.board_id)??Br),c=i.useMemo(()=>fe([pe],j=>{const _=(s??[]).map(E=>wI(j,E));return{imageUsageSummary:{isInitialImage:Jo(_,E=>E.isInitialImage),isCanvasImage:Jo(_,E=>E.isCanvasImage),isNodesImage:Jo(_,E=>E.isNodesImage),isControlImage:Jo(_,E=>E.isControlImage)}}}),[s]),[d,{isLoading:f}]=cA(),[m,{isLoading:h}]=uA(),{imageUsageSummary:g}=H(c),b=i.useCallback(()=>{t&&(d(t.board_id),n(void 0))},[t,d,n]),y=i.useCallback(()=>{t&&(m(t.board_id),n(void 0))},[t,m,n]),x=i.useCallback(()=>{n(void 0)},[n]),w=i.useRef(null),S=i.useMemo(()=>h||f||l,[h,f,l]);return t?a.jsx(Zc,{isOpen:!!t,onClose:x,leastDestructiveRef:w,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsxs(Po,{fontSize:"lg",fontWeight:"bold",children:[r("controlnet.delete")," ",t.board_name]}),a.jsx(Mo,{children:a.jsxs($,{direction:"column",gap:3,children:[l?a.jsx(wg,{children:a.jsx($,{sx:{w:"full",h:32}})}):a.jsx(DM,{imageUsage:g,topMessage:r("boards.topMessage"),bottomMessage:r("boards.bottomMessage")}),a.jsx(be,{children:r("boards.deletedBoardsCannotbeRestored")}),a.jsx(be,{children:r(o?"gallery.deleteImageBin":"gallery.deleteImagePermanent")})]})}),a.jsx(ls,{children:a.jsxs($,{sx:{justifyContent:"space-between",width:"full",gap:2},children:[a.jsx(Xe,{ref:w,onClick:x,children:r("boards.cancel")}),a.jsx(Xe,{colorScheme:"warning",isLoading:S,onClick:b,children:r("boards.deleteBoardOnly")}),a.jsx(Xe,{colorScheme:"error",isLoading:S,onClick:y,children:r("boards.deleteBoardAndImages")})]})})]})})}):null},Sne=i.memo(wne);/*! - * OverlayScrollbars - * Version: 2.4.5 - * - * Copyright (c) Rene Haas | KingSora. - * https://github.com/KingSora - * - * Released under the MIT license. - */const Qo=(e,t)=>{const{o:n,u:r,_:o}=e;let s=n,l;const c=(m,h)=>{const g=s,b=m,y=h||(r?!r(g,b):g!==b);return(y||o)&&(s=b,l=g),[s,y,l]};return[t?m=>c(t(s,l),m):c,m=>[s,!!m,l]]},Zy=typeof window<"u",n8=Zy&&Node.ELEMENT_NODE,{toString:kne,hasOwnProperty:c1}=Object.prototype,jne=/^\[object (.+)\]$/,bl=e=>e===void 0,Lg=e=>e===null,_ne=e=>bl(e)||Lg(e)?`${e}`:kne.call(e).replace(jne,"$1").toLowerCase(),Ps=e=>typeof e=="number",vf=e=>typeof e=="string",r8=e=>typeof e=="boolean",Os=e=>typeof e=="function",Do=e=>Array.isArray(e),Md=e=>typeof e=="object"&&!Do(e)&&!Lg(e),Fg=e=>{const t=!!e&&e.length,n=Ps(t)&&t>-1&&t%1==0;return Do(e)||!Os(e)&&n?t>0&&Md(e)?t-1 in e:!0:!1},jh=e=>{if(!e||!Md(e)||_ne(e)!=="object")return!1;let t;const n="constructor",r=e[n],o=r&&r.prototype,s=c1.call(e,n),l=o&&c1.call(o,"isPrototypeOf");if(r&&!s&&!l)return!1;for(t in e);return bl(t)||c1.call(e,t)},id=e=>{const t=HTMLElement;return e?t?e instanceof t:e.nodeType===n8:!1},zg=e=>{const t=Element;return e?t?e instanceof t:e.nodeType===n8:!1};function Qt(e,t){if(Fg(e))for(let n=0;nt(e[n],n,e));return e}const Bg=(e,t)=>e.indexOf(t)>=0,Xa=(e,t)=>e.concat(t),Xt=(e,t,n)=>(!n&&!vf(t)&&Fg(t)?Array.prototype.push.apply(e,t):e.push(t),e),su=e=>{const t=Array.from,n=[];return t&&e?t(e):(e instanceof Set?e.forEach(r=>{Xt(n,r)}):Qt(e,r=>{Xt(n,r)}),n)},_h=e=>!!e&&!e.length,kj=e=>su(new Set(e)),Ro=(e,t,n)=>{Qt(e,o=>o&&o.apply(void 0,t||[])),!n&&(e.length=0)},Hg=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),fa=e=>e?Object.keys(e):[],Vt=(e,t,n,r,o,s,l)=>{const c=[t,n,r,o,s,l];return(typeof e!="object"||Lg(e))&&!Os(e)&&(e={}),Qt(c,d=>{Qt(d,(f,m)=>{const h=d[m];if(e===h)return!0;const g=Do(h);if(h&&jh(h)){const b=e[m];let y=b;g&&!Do(b)?y=[]:!g&&!jh(b)&&(y={}),e[m]=Vt(y,h)}else e[m]=g?h.slice():h})}),e},o8=(e,t)=>Qt(Vt({},e),(n,r,o)=>{n===void 0?delete o[r]:t&&n&&jh(n)&&(o[r]=o8(n,t))}),Jy=e=>{for(const t in e)return!1;return!0},Cr=(e,t,n)=>{if(bl(n))return e?e.getAttribute(t):null;e&&e.setAttribute(t,n)},s8=(e,t)=>new Set((Cr(e,t)||"").split(" ")),Ar=(e,t)=>{e&&e.removeAttribute(t)},ql=(e,t,n,r)=>{if(n){const o=s8(e,t);o[r?"add":"delete"](n);const s=su(o).join(" ").trim();Cr(e,t,s)}},Ine=(e,t,n)=>s8(e,t).has(n),Nb=Zy&&Element.prototype,a8=(e,t)=>{const n=[],r=t?zg(t)&&t:document;return r?Xt(n,r.querySelectorAll(e)):n},Pne=(e,t)=>{const n=t?zg(t)&&t:document;return n?n.querySelector(e):null},Ih=(e,t)=>zg(e)?(Nb.matches||Nb.msMatchesSelector).call(e,t):!1,$b=e=>e?su(e.childNodes):[],sa=e=>e&&e.parentElement,ac=(e,t)=>{if(zg(e)){const n=Nb.closest;if(n)return n.call(e,t);do{if(Ih(e,t))return e;e=sa(e)}while(e)}},Ene=(e,t,n)=>{const r=ac(e,t),o=e&&Pne(n,r),s=ac(o,t)===r;return r&&o?r===e||o===e||s&&ac(ac(e,n),t)!==r:!1},ko=()=>{},aa=e=>{if(Fg(e))Qt(su(e),t=>aa(t));else if(e){const t=sa(e);t&&t.removeChild(e)}},e2=(e,t,n)=>{if(n&&e){let r=t,o;return Fg(n)?(o=document.createDocumentFragment(),Qt(n,s=>{s===r&&(r=s.previousSibling),o.appendChild(s)})):o=n,t&&(r?r!==t&&(r=r.nextSibling):r=e.firstChild),e.insertBefore(o,r||null),()=>aa(n)}return ko},xo=(e,t)=>e2(e,null,t),Mne=(e,t)=>e2(sa(e),e,t),jj=(e,t)=>e2(sa(e),e&&e.nextSibling,t),Xl=e=>{const t=document.createElement("div");return Cr(t,"class",e),t},l8=e=>{const t=Xl();return t.innerHTML=e.trim(),Qt($b(t),n=>aa(n))},Ur=Zy?window:{},cd=Math.max,One=Math.min,Od=Math.round,i8=Ur.cancelAnimationFrame,c8=Ur.requestAnimationFrame,Ph=Ur.setTimeout,Lb=Ur.clearTimeout,Fb=e=>e.charAt(0).toUpperCase()+e.slice(1),Dne=()=>Xl().style,Rne=["-webkit-","-moz-","-o-","-ms-"],Ane=["WebKit","Moz","O","MS","webkit","moz","o","ms"],u1={},d1={},Tne=e=>{let t=d1[e];if(Hg(d1,e))return t;const n=Fb(e),r=Dne();return Qt(Rne,o=>{const s=o.replace(/-/g,"");return!(t=[e,o+e,s+n,Fb(s)+n].find(c=>r[c]!==void 0))}),d1[e]=t||""},Wg=e=>{let t=u1[e]||Ur[e];return Hg(u1,e)||(Qt(Ane,n=>(t=t||Ur[n+Fb(e)],!t)),u1[e]=t),t},Nne=Wg("MutationObserver"),_j=Wg("IntersectionObserver"),Eh=Wg("ResizeObserver"),zb=Wg("ScrollTimeline"),ft=(e,...t)=>e.bind(0,...t),Va=e=>{let t;const n=e?Ph:c8,r=e?Lb:i8;return[o=>{r(t),t=n(o,Os(e)?e():e)},()=>r(t)]},u8=(e,t)=>{let n,r,o,s=ko;const{v:l,p:c,g:d}=t||{},f=function(y){s(),Lb(n),n=r=void 0,s=ko,e.apply(this,y)},m=b=>d&&r?d(r,b):b,h=()=>{s!==ko&&f(m(o)||o)},g=function(){const y=su(arguments),x=Os(l)?l():l;if(Ps(x)&&x>=0){const S=Os(c)?c():c,j=Ps(S)&&S>=0,_=x>0?Ph:c8,I=x>0?Lb:i8,M=m(y)||y,D=f.bind(0,M);s();const R=_(D,x);s=()=>I(R),j&&!n&&(n=Ph(h,S)),r=o=M}else f(y)};return g.m=h,g},$ne=/[^\x20\t\r\n\f]+/g,d8=(e,t,n)=>{const r=e&&e.classList;let o,s=0,l=!1;if(r&&t&&vf(t)){const c=t.match($ne)||[];for(l=c.length>0;o=c[s++];)l=!!n(r,o)&&l}return l},t2=(e,t)=>{d8(e,t,(n,r)=>n.remove(r))},cl=(e,t)=>(d8(e,t,(n,r)=>n.add(r)),ft(t2,e,t)),Lne={opacity:1,zIndex:1},Gp=(e,t)=>{const n=e||"",r=t?parseFloat(n):parseInt(n,10);return r===r?r:0},Fne=(e,t)=>!Lne[e]&&Ps(t)?`${t}px`:t,Ij=(e,t,n)=>String((t!=null?t[n]||t.getPropertyValue(n):e.style[n])||""),zne=(e,t,n)=>{try{const{style:r}=e;bl(r[t])?r.setProperty(t,n):r[t]=Fne(t,n)}catch{}},f8=e=>{const t=e||0;return isFinite(t)?t:0};function pr(e,t){const n=vf(t);if(Do(t)||n){let o=n?"":{};if(e){const s=Ur.getComputedStyle(e,null);o=n?Ij(e,s,t):t.reduce((l,c)=>(l[c]=Ij(e,s,c),l),o)}return o}e&&Qt(t,(o,s)=>zne(e,s,t[s]))}const Dd=e=>pr(e,"direction")==="rtl",Pj=(e,t,n)=>{const r=t?`${t}-`:"",o=n?`-${n}`:"",s=`${r}top${o}`,l=`${r}right${o}`,c=`${r}bottom${o}`,d=`${r}left${o}`,f=pr(e,[s,l,c,d]);return{t:Gp(f[s],!0),r:Gp(f[l],!0),b:Gp(f[c],!0),l:Gp(f[d],!0)}},Gi=(e,t)=>`translate${Md(e)?`(${e.x},${e.y})`:`${t?"X":"Y"}(${e})`}`,Kp=e=>`${(f8(e)*100).toFixed(3)}%`,qp=e=>`${f8(e)}px`,p8="paddingTop",n2="paddingRight",r2="paddingLeft",Mh="paddingBottom",Oh="marginLeft",Dh="marginRight",ud="marginBottom",Yu="overflowX",Zu="overflowY",pa="width",ma="height",$c="hidden",Bne={w:0,h:0},Vg=(e,t)=>t?{w:t[`${e}Width`],h:t[`${e}Height`]}:Bne,Hne=e=>Vg("inner",e||Ur),dd=ft(Vg,"offset"),hm=ft(Vg,"client"),Rh=ft(Vg,"scroll"),Ah=e=>{const t=parseFloat(pr(e,pa))||0,n=parseFloat(pr(e,ma))||0;return{w:t-Od(t),h:n-Od(n)}},ks=e=>e.getBoundingClientRect(),Bb=e=>!!(e&&(e[ma]||e[pa])),m8=(e,t)=>{const n=Bb(e);return!Bb(t)&&n},Ug=(e,t,n,r)=>{if(e&&t){let o=!0;return Qt(n,s=>{const l=r?r(e[s]):e[s],c=r?r(t[s]):t[s];l!==c&&(o=!1)}),o}return!1},h8=(e,t)=>Ug(e,t,["w","h"]),g8=(e,t)=>Ug(e,t,["x","y"]),Wne=(e,t)=>Ug(e,t,["t","r","b","l"]),Ej=(e,t,n)=>Ug(e,t,[pa,ma],n&&(r=>Od(r)));let Xp;const Mj="passive",Vne=()=>{if(bl(Xp)){Xp=!1;try{Ur.addEventListener(Mj,ko,Object.defineProperty({},Mj,{get(){Xp=!0}}))}catch{}}return Xp},v8=e=>e.split(" "),Oj=(e,t,n,r)=>{Qt(v8(t),o=>{e.removeEventListener(o,n,r)})},Pn=(e,t,n,r)=>{var o;const s=Vne(),l=(o=s&&r&&r.S)!=null?o:s,c=r&&r.$||!1,d=r&&r.O||!1,f=s?{passive:l,capture:c}:c;return ft(Ro,v8(t).map(m=>{const h=d?g=>{Oj(e,m,h,c),n(g)}:n;return e.addEventListener(m,h,f),ft(Oj,e,m,h,c)}))},b8=e=>e.stopPropagation(),Dj=e=>e.preventDefault(),Une={x:0,y:0},f1=e=>{const t=e&&ks(e);return t?{x:t.left+Ur.pageYOffset,y:t.top+Ur.pageXOffset}:Une},x8=(e,t,n)=>n?n.n?-e:n.i?t-e:e:e,Gne=(e,t)=>[t&&t.i?e:0,x8(e,e,t)],ul=(e,t)=>{const{x:n,y:r}=Ps(t)?{x:t,y:t}:t||{};Ps(n)&&(e.scrollLeft=n),Ps(r)&&(e.scrollTop=r)},Lc=e=>({x:e.scrollLeft,y:e.scrollTop}),Rj=(e,t)=>{Qt(Do(t)?t:[t],e)},Hb=e=>{const t=new Map,n=(s,l)=>{if(s){const c=t.get(s);Rj(d=>{c&&c[d?"delete":"clear"](d)},l)}else t.forEach(c=>{c.clear()}),t.clear()},r=(s,l)=>{if(vf(s)){const f=t.get(s)||new Set;return t.set(s,f),Rj(m=>{Os(m)&&f.add(m)},l),ft(n,s,l)}r8(l)&&l&&n();const c=fa(s),d=[];return Qt(c,f=>{const m=s[f];m&&Xt(d,r(f,m))}),ft(Ro,d)},o=(s,l)=>{Qt(su(t.get(s)),c=>{l&&!_h(l)?c.apply(0,l):c()})};return r(e||{}),[r,n,o]},Aj=e=>JSON.stringify(e,(t,n)=>{if(Os(n))throw 0;return n}),Tj=(e,t)=>e?`${t}`.split(".").reduce((n,r)=>n&&Hg(n,r)?n[r]:void 0,e):void 0,Kne={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},y8=(e,t)=>{const n={},r=Xa(fa(t),fa(e));return Qt(r,o=>{const s=e[o],l=t[o];if(Md(s)&&Md(l))Vt(n[o]={},y8(s,l)),Jy(n[o])&&delete n[o];else if(Hg(t,o)&&l!==s){let c=!0;if(Do(s)||Do(l))try{Aj(s)===Aj(l)&&(c=!1)}catch{}c&&(n[o]=l)}}),n},qne=(e,t,n)=>r=>[Tj(e,r),n||Tj(t,r)!==void 0],bf="data-overlayscrollbars",C8="os-environment",w8=`${C8}-flexbox-glue`,Xne=`${w8}-max`,S8="os-scrollbar-hidden",p1=`${bf}-initialize`,Yo=bf,k8=`${Yo}-overflow-x`,j8=`${Yo}-overflow-y`,Cc="overflowVisible",Qne="scrollbarHidden",Nj="scrollbarPressed",Th="updating",Ua=`${bf}-viewport`,m1="arrange",_8="scrollbarHidden",wc=Cc,Wb=`${bf}-padding`,Yne=wc,$j=`${bf}-content`,o2="os-size-observer",Zne=`${o2}-appear`,Jne=`${o2}-listener`,ere="os-trinsic-observer",tre="os-no-css-vars",nre="os-theme-none",Kr="os-scrollbar",rre=`${Kr}-rtl`,ore=`${Kr}-horizontal`,sre=`${Kr}-vertical`,I8=`${Kr}-track`,s2=`${Kr}-handle`,are=`${Kr}-visible`,lre=`${Kr}-cornerless`,Lj=`${Kr}-transitionless`,Fj=`${Kr}-interaction`,zj=`${Kr}-unusable`,Vb=`${Kr}-auto-hide`,Bj=`${Vb}-hidden`,Hj=`${Kr}-wheel`,ire=`${I8}-interactive`,cre=`${s2}-interactive`,P8={},E8={},ure=e=>{Qt(e,t=>Qt(t,(n,r)=>{P8[r]=t[r]}))},M8=(e,t,n)=>fa(e).map(r=>{const{static:o,instance:s}=e[r],[l,c,d]=n||[],f=n?s:o;if(f){const m=n?f(l,c,t):f(t);return(d||E8)[r]=m}}),au=e=>E8[e],dre="__osOptionsValidationPlugin",fre="__osSizeObserverPlugin",a2="__osScrollbarsHidingPlugin",pre="__osClickScrollPlugin";let h1;const Wj=(e,t,n,r)=>{xo(e,t);const o=hm(t),s=dd(t),l=Ah(n);return r&&aa(t),{x:s.h-o.h+l.h,y:s.w-o.w+l.w}},mre=e=>{let t=!1;const n=cl(e,S8);try{t=pr(e,Tne("scrollbar-width"))==="none"||Ur.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")==="none"}catch{}return n(),t},hre=(e,t)=>{pr(e,{[Yu]:$c,[Zu]:$c,direction:"rtl"}),ul(e,{x:0});const n=f1(e),r=f1(t);ul(e,{x:-999});const o=f1(t);return{i:n.x===r.x,n:r.x!==o.x}},gre=(e,t)=>{const n=cl(e,w8),r=ks(e),o=ks(t),s=Ej(o,r,!0),l=cl(e,Xne),c=ks(e),d=ks(t),f=Ej(d,c,!0);return n(),l(),s&&f},vre=()=>{const{body:e}=document,n=l8(`
`)[0],r=n.firstChild,[o,,s]=Hb(),[l,c]=Qo({o:Wj(e,n,r),u:g8},ft(Wj,e,n,r,!0)),[d]=c(),f=mre(n),m={x:d.x===0,y:d.y===0},h={elements:{host:null,padding:!f,viewport:w=>f&&w===w.ownerDocument.body&&w,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},g=Vt({},Kne),b=ft(Vt,{},g),y=ft(Vt,{},h),x={P:d,I:m,H:f,A:pr(n,"zIndex")==="-1",L:!!zb,V:hre(n,r),U:gre(n,r),B:ft(o,"r"),j:y,N:w=>Vt(h,w)&&y(),G:b,q:w=>Vt(g,w)&&b(),F:Vt({},h),W:Vt({},g)};return Ar(n,"style"),aa(n),Ur.addEventListener("resize",()=>{let w;if(!f&&(!m.x||!m.y)){const S=au(a2);w=!!(S?S.R():ko)(x,l)}s("r",[w])}),x},Gr=()=>(h1||(h1=vre()),h1),l2=(e,t)=>Os(t)?t.apply(0,e):t,bre=(e,t,n,r)=>{const o=bl(r)?n:r;return l2(e,o)||t.apply(0,e)},O8=(e,t,n,r)=>{const o=bl(r)?n:r,s=l2(e,o);return!!s&&(id(s)?s:t.apply(0,e))},xre=(e,t)=>{const{nativeScrollbarsOverlaid:n,body:r}=t||{},{I:o,H:s,j:l}=Gr(),{nativeScrollbarsOverlaid:c,body:d}=l().cancel,f=n??c,m=bl(r)?d:r,h=(o.x||o.y)&&f,g=e&&(Lg(m)?!s:m);return!!h||!!g},i2=new WeakMap,yre=(e,t)=>{i2.set(e,t)},Cre=e=>{i2.delete(e)},D8=e=>i2.get(e),wre=(e,t,n)=>{let r=!1;const o=n?new WeakMap:!1,s=()=>{r=!0},l=c=>{if(o&&n){const d=n.map(f=>{const[m,h]=f||[];return[h&&m?(c||a8)(m,e):[],h]});Qt(d,f=>Qt(f[0],m=>{const h=f[1],g=o.get(m)||[];if(e.contains(m)&&h){const y=Pn(m,h.trim(),x=>{r?(y(),o.delete(m)):t(x)});o.set(m,Xt(g,y))}else Ro(g),o.delete(m)}))}};return l(),[s,l]},Vj=(e,t,n,r)=>{let o=!1;const{X:s,Y:l,J:c,K:d,Z:f,tt:m}=r||{},h=u8(()=>o&&n(!0),{v:33,p:99}),[g,b]=wre(e,h,c),y=s||[],x=l||[],w=Xa(y,x),S=(_,I)=>{if(!_h(I)){const E=f||ko,M=m||ko,D=[],R=[];let N=!1,O=!1;if(Qt(I,T=>{const{attributeName:U,target:G,type:q,oldValue:Y,addedNodes:Q,removedNodes:V}=T,se=q==="attributes",ee=q==="childList",le=e===G,ae=se&&U,ce=ae?Cr(G,U||""):null,J=ae&&Y!==ce,re=Bg(x,U)&&J;if(t&&(ee||!le)){const A=se&&J,L=A&&d&&Ih(G,d),ne=(L?!E(G,U,Y,ce):!se||A)&&!M(T,!!L,e,r);Qt(Q,z=>Xt(D,z)),Qt(V,z=>Xt(D,z)),O=O||ne}!t&&le&&J&&!E(G,U,Y,ce)&&(Xt(R,U),N=N||re)}),b(T=>kj(D).reduce((U,G)=>(Xt(U,a8(T,G)),Ih(G,T)?Xt(U,G):U),[])),t)return!_&&O&&n(!1),[!1];if(!_h(R)||N){const T=[kj(R),N];return!_&&n.apply(0,T),T}}},j=new Nne(ft(S,!1));return[()=>(j.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:t,childList:t,characterData:t}),o=!0,()=>{o&&(g(),j.disconnect(),o=!1)}),()=>{if(o)return h.m(),S(!0,j.takeRecords())}]},R8=(e,t,n)=>{const{nt:o,ot:s}=n||{},l=au(fre),{V:c}=Gr(),d=ft(Dd,e),[f]=Qo({o:!1,_:!0});return()=>{const m=[],g=l8(`
`)[0],b=g.firstChild,y=x=>{const w=x instanceof ResizeObserverEntry,S=!w&&Do(x);let j=!1,_=!1,I=!0;if(w){const[E,,M]=f(x.contentRect),D=Bb(E),R=m8(E,M);_=!M||R,j=!_&&!D,I=!j}else S?[,I]=x:_=x===!0;if(o&&I){const E=S?x[0]:Dd(g);ul(g,{x:x8(3333333,3333333,E&&c),y:3333333})}j||t({st:S?x:void 0,et:!S,ot:_})};if(Eh){const x=new Eh(w=>y(w.pop()));x.observe(b),Xt(m,()=>{x.disconnect()})}else if(l){const[x,w]=l(b,y,s);Xt(m,Xa([cl(g,Zne),Pn(g,"animationstart",x)],w))}else return ko;if(o){const[x]=Qo({o:void 0},d);Xt(m,Pn(g,"scroll",w=>{const S=x(),[j,_,I]=S;_&&(t2(b,"ltr rtl"),cl(b,j?"rtl":"ltr"),y([!!j,_,I])),b8(w)}))}return ft(Ro,Xt(m,xo(e,g)))}},Sre=(e,t)=>{let n;const r=d=>d.h===0||d.isIntersecting||d.intersectionRatio>0,o=Xl(ere),[s]=Qo({o:!1}),l=(d,f)=>{if(d){const m=s(r(d)),[,h]=m;return h&&!f&&t(m)&&[m]}},c=(d,f)=>l(f.pop(),d);return[()=>{const d=[];if(_j)n=new _j(ft(c,!1),{root:e}),n.observe(o),Xt(d,()=>{n.disconnect()});else{const f=()=>{const m=dd(o);l(m)};Xt(d,R8(o,f)()),f()}return ft(Ro,Xt(d,xo(e,o)))},()=>n&&c(!0,n.takeRecords())]},kre=(e,t)=>{let n,r,o,s,l;const{H:c}=Gr(),d=`[${Yo}]`,f=`[${Ua}]`,m=["tabindex"],h=["wrap","cols","rows"],g=["id","class","style","open"],b={ct:!1,rt:Dd(e.lt)},{lt:y,it:x,ut:w,ft:S,_t:j,dt:_,vt:I}=e,{U:E,B:M}=Gr(),[D]=Qo({u:h8,o:{w:0,h:0}},()=>{const ae=_(wc,Cc),ce=_(m1,""),J=ce&&Lc(x);I(wc,Cc),I(m1,""),I("",Th,!0);const re=Rh(w),A=Rh(x),L=Ah(x);return I(wc,Cc,ae),I(m1,"",ce),I("",Th),ul(x,J),{w:A.w+re.w+L.w,h:A.h+re.h+L.h}}),R=S?h:Xa(g,h),N=u8(t,{v:()=>n,p:()=>r,g(ae,ce){const[J]=ae,[re]=ce;return[Xa(fa(J),fa(re)).reduce((A,L)=>(A[L]=J[L]||re[L],A),{})]}}),O=ae=>{Qt(ae||m,ce=>{if(Bg(m,ce)){const J=Cr(y,ce);vf(J)?Cr(x,ce,J):Ar(x,ce)}})},T=(ae,ce)=>{const[J,re]=ae,A={ht:re};return Vt(b,{ct:J}),!ce&&t(A),A},U=({et:ae,st:ce,ot:J})=>{const A=!(ae&&!J&&!ce)&&c?N:t,[L,K]=ce||[];ce&&Vt(b,{rt:L}),A({et:ae||J,ot:J,gt:K})},G=(ae,ce)=>{const[,J]=D(),re={bt:J};return J&&!ce&&(ae?t:N)(re),re},q=(ae,ce,J)=>{const re={wt:ce};return ce&&!J?N(re):j||O(ae),re},[Y,Q]=w||!E?Sre(y,T):[],V=!j&&R8(y,U,{ot:!0,nt:!0}),[se,ee]=Vj(y,!1,q,{Y:g,X:Xa(g,m)}),le=j&&Eh&&new Eh(ae=>{const ce=ae[ae.length-1].contentRect;U({et:!0,ot:m8(ce,l)}),l=ce});return[()=>{O(),le&&le.observe(y);const ae=V&&V(),ce=Y&&Y(),J=se(),re=M(A=>{const[,L]=D();N({yt:A,bt:L})});return()=>{le&&le.disconnect(),ae&&ae(),ce&&ce(),s&&s(),J(),re()}},({St:ae,$t:ce,xt:J})=>{const re={},[A]=ae("update.ignoreMutation"),[L,K]=ae("update.attributes"),[ne,z]=ae("update.elementEvents"),[oe,X]=ae("update.debounce"),Z=z||K,me=ce||J,ve=de=>Os(A)&&A(de);if(Z){o&&o(),s&&s();const[de,ke]=Vj(w||x,!0,G,{X:Xa(R,L||[]),J:ne,K:d,tt:(we,Re)=>{const{target:Qe,attributeName:$e}=we;return(!Re&&$e&&!j?Ene(Qe,d,f):!1)||!!ac(Qe,`.${Kr}`)||!!ve(we)}});s=de(),o=ke}if(X)if(N.m(),Do(oe)){const de=oe[0],ke=oe[1];n=Ps(de)&&de,r=Ps(ke)&&ke}else Ps(oe)?(n=oe,r=!1):(n=!1,r=!1);if(me){const de=ee(),ke=Q&&Q(),we=o&&o();de&&Vt(re,q(de[0],de[1],me)),ke&&Vt(re,T(ke[0],me)),we&&Vt(re,G(we[0],me))}return re},b]},Ub=(e,t,n)=>cd(e,One(t,n)),jre=(e,t,n)=>{const r=Od(t),[o,s]=Gne(r,n),l=(s-e)/s,c=e/o,d=e/s,f=n?n.n?l:n.i?c:d:d;return Ub(0,1,f)},A8=(e,t,n)=>{if(n){const d=t?pa:ma,{Ot:f,Ct:m}=n,h=ks(m)[d],g=ks(f)[d];return Ub(0,1,h/g)}const r=t?"x":"y",{Ht:o,zt:s}=e,l=s[r],c=o[r];return Ub(0,1,l/(l+c))},Uj=(e,t,n,r)=>{const o=A8(e,r,t);return 1/o*(1-o)*n},_re=(e,t,n,r)=>{const{j:o,A:s}=Gr(),{scrollbars:l}=o(),{slot:c}=l,{It:d,lt:f,it:m,At:h,Et:g,Tt:b,_t:y}=t,{scrollbars:x}=h?{}:e,{slot:w}=x||{},S=new Map,j=L=>zb&&new zb({source:g,axis:L}),_=j("x"),I=j("y"),E=O8([d,f,m],()=>y&&b?d:f,c,w),M=L=>y&&!b&&sa(L)===m,D=L=>{S.forEach((K,ne)=>{(L?Bg(Do(L)?L:[L],ne):!0)&&((K||[]).forEach(oe=>{oe&&oe.cancel()}),S.delete(ne))})},R=(L,K,ne)=>{const z=ne?cl:t2;Qt(L,oe=>{z(oe.Dt,K)})},N=(L,K)=>{Qt(L,ne=>{const[z,oe]=K(ne);pr(z,oe)})},O=(L,K,ne,z)=>K&&L.animate(ne,{timeline:K,composite:z}),T=(L,K)=>{N(L,ne=>{const{Ct:z}=ne;return[z,{[K?pa:ma]:Kp(A8(n,K))}]})},U=(L,K)=>{_&&I?L.forEach(ne=>{const{Dt:z,Ct:oe}=ne,X=ft(Uj,n,ne),Z=K&&Dd(z),me=X(Z?1:0,K),ve=X(Z?0:1,K);D(oe),S.set(oe,[O(oe,K?_:I,Vt({transform:[Gi(Kp(me),K),Gi(Kp(ve),K)]},Z?{clear:["left"]}:{}))])}):N(L,ne=>{const{Ct:z,Dt:oe}=ne,{V:X}=Gr(),Z=K?"x":"y",{Ht:me}=n,ve=Dd(oe),de=Uj(n,ne,jre(Lc(g)[Z],me[Z],K&&ve&&X),K);return[z,{transform:Gi(Kp(de),K)}]})},G=L=>{const{Dt:K}=L,ne=M(K)&&K,{x:z,y:oe}=Lc(g);return[ne,{transform:ne?Gi({x:qp(z),y:qp(oe)}):""}]},q=(L,K,ne,z)=>O(L,K,{transform:[Gi(qp(0),z),Gi(qp(cd(0,ne-.5)),z)]},"add"),Y=[],Q=[],V=[],se=(L,K,ne)=>{const z=r8(ne),oe=z?ne:!0,X=z?!ne:!0;oe&&R(Q,L,K),X&&R(V,L,K)},ee=()=>{T(Q,!0),T(V)},le=()=>{U(Q,!0),U(V)},ae=()=>{if(y)if(I&&I){const{Ht:L}=n;Xa(V,Q).forEach(({Dt:K})=>{D(K),M(K)&&S.set(K,[q(K,_,L.x,!0),q(K,I,L.y)])})}else N(Q,G),N(V,G)},ce=L=>{const K=L?ore:sre,ne=L?Q:V,z=_h(ne)?Lj:"",oe=Xl(`${Kr} ${K} ${z}`),X=Xl(I8),Z=Xl(s2),me={Dt:oe,Ot:X,Ct:Z};return s||cl(oe,tre),Xt(ne,me),Xt(Y,[xo(oe,X),xo(X,Z),ft(aa,oe),D,r(me,se,U,L)]),me},J=ft(ce,!0),re=ft(ce,!1),A=()=>(xo(E,Q[0].Dt),xo(E,V[0].Dt),Ph(()=>{se(Lj)},300),ft(Ro,Y));return J(),re(),[{kt:ee,Mt:le,Rt:ae,Pt:se,Lt:{L:_,Vt:Q,Ut:J,Bt:ft(N,Q)},jt:{L:I,Vt:V,Ut:re,Bt:ft(N,V)}},A]},Ire=(e,t,n)=>{const{lt:r,Et:o,Nt:s}=t;return(l,c,d,f)=>{const{Dt:m,Ot:h,Ct:g}=l,[b,y]=Va(333),[x,w]=Va(),S=ft(d,[l],f),j=!!o.scrollBy,_=`client${f?"X":"Y"}`,I=f?pa:ma,E=f?"left":"top",M=f?"w":"h",D=f?"x":"y",R=T=>T.propertyName.indexOf(I)>-1,N=()=>{const T="pointerup pointerleave pointercancel lostpointercapture",U=(G,q)=>Y=>{const{Ht:Q}=n,V=dd(h)[M]-dd(g)[M],ee=q*Y/V*Q[D];ul(o,{[D]:G+ee})};return Pn(h,"pointerdown",G=>{const q=ac(G.target,`.${s2}`)===g,Y=q?g:h,Q=e.scrollbars,{button:V,isPrimary:se,pointerType:ee}=G,{pointers:le}=Q,ae=V===0&&se&&Q[q?"dragScroll":"clickScroll"]&&(le||[]).includes(ee);if(ql(r,Yo,Nj,!0),ae){const ce=!q&&G.shiftKey,J=ft(ks,g),re=ft(ks,h),A=(we,Re)=>(we||J())[E]-(Re||re())[E],L=Od(ks(o)[I])/dd(o)[M]||1,K=U(Lc(o)[D]||0,1/L),ne=G[_],z=J(),oe=re(),X=z[I],Z=A(z,oe)+X/2,me=ne-oe[E],ve=q?0:me-Z,de=we=>{Ro(ke),Y.releasePointerCapture(we.pointerId)},ke=[ft(ql,r,Yo,Nj),Pn(s,T,de),Pn(s,"selectstart",we=>Dj(we),{S:!1}),Pn(h,T,de),Pn(h,"pointermove",we=>{const Re=we[_]-ne;(q||ce)&&K(ve+Re)})];if(ce)K(ve);else if(!q){const we=au(pre);we&&Xt(ke,we(K,A,ve,X,me))}Y.setPointerCapture(G.pointerId)}})};let O=!0;return ft(Ro,[Pn(m,"pointerenter",()=>{c(Fj,!0)}),Pn(m,"pointerleave pointercancel",()=>{c(Fj,!1)}),Pn(m,"wheel",T=>{const{deltaX:U,deltaY:G,deltaMode:q}=T;j&&O&&q===0&&sa(m)===r&&o.scrollBy({left:U,top:G,behavior:"smooth"}),O=!1,c(Hj,!0),b(()=>{O=!0,c(Hj)}),Dj(T)},{S:!1,$:!0}),Pn(g,"transitionstart",T=>{if(R(T)){const U=()=>{S(),x(U)};U()}}),Pn(g,"transitionend transitioncancel",T=>{R(T)&&(w(),S())}),Pn(m,"mousedown",ft(Pn,s,"click",b8,{O:!0,$:!0}),{$:!0}),N(),y,w])}},Pre=(e,t,n,r,o,s)=>{let l,c,d,f,m,h=ko,g=0;const[b,y]=Va(),[x,w]=Va(),[S,j]=Va(100),[_,I]=Va(100),[E,M]=Va(100),[D,R]=Va(()=>g),[N,O]=_re(e,o,r,Ire(t,o,r)),{lt:T,Gt:U,Tt:G}=o,{Pt:q,kt:Y,Mt:Q,Rt:V}=N,se=J=>{q(Vb,J,!0),q(Vb,J,!1)},ee=(J,re)=>{if(R(),J)q(Bj);else{const A=ft(q,Bj,!0);g>0&&!re?D(A):A()}},le=J=>J.pointerType==="mouse",ae=J=>{le(J)&&(f=c,f&&ee(!0))},ce=[j,R,I,M,w,y,()=>h(),Pn(T,"pointerover",ae,{O:!0}),Pn(T,"pointerenter",ae),Pn(T,"pointerleave",J=>{le(J)&&(f=!1,c&&ee(!1))}),Pn(T,"pointermove",J=>{le(J)&&l&&b(()=>{j(),ee(!0),_(()=>{l&&ee(!1)})})}),Pn(U,"scroll",J=>{x(()=>{Q(),d&&ee(!0),S(()=>{d&&!f&&ee(!1)})}),s(J),V()})];return[()=>ft(Ro,Xt(ce,O())),({St:J,xt:re,qt:A,Ft:L})=>{const{Wt:K,Xt:ne,Yt:z}=L||{},{gt:oe,ot:X}=A||{},{rt:Z}=n,{I:me}=Gr(),{Ht:ve,Jt:de,Kt:ke}=r,[we,Re]=J("showNativeOverlaidScrollbars"),[Qe,$e]=J("scrollbars.theme"),[vt,it]=J("scrollbars.visibility"),[ot,Ce]=J("scrollbars.autoHide"),[Me,qe]=J("scrollbars.autoHideSuspend"),[dt]=J("scrollbars.autoHideDelay"),[ye,Ue]=J("scrollbars.dragScroll"),[st,mt]=J("scrollbars.clickScroll"),Pe=X&&!re,Ne=ke.x||ke.y,kt=K||ne||oe||re,Se=z||it,Ve=we&&me.x&&me.y,Ge=(Le,bt)=>{const fn=vt==="visible"||vt==="auto"&&Le==="scroll";return q(are,fn,bt),fn};if(g=dt,Pe&&(Me&&Ne?(se(!1),h(),E(()=>{h=Pn(U,"scroll",ft(se,!0),{O:!0})})):se(!0)),Re&&q(nre,Ve),$e&&(q(m),q(Qe,!0),m=Qe),qe&&!Me&&se(!0),Ce&&(l=ot==="move",c=ot==="leave",d=ot!=="never",ee(!d,!0)),Ue&&q(cre,ye),mt&&q(ire,st),Se){const Le=Ge(de.x,!0),bt=Ge(de.y,!1);q(lre,!(Le&&bt))}kt&&(Y(),Q(),V(),q(zj,!ve.x,!0),q(zj,!ve.y,!1),q(rre,Z&&!G))},{},N]},Ere=e=>{const t=Gr(),{j:n,H:r}=t,o=au(a2),s=o&&o.C,{elements:l}=n(),{host:c,padding:d,viewport:f,content:m}=l,h=id(e),g=h?{}:e,{elements:b}=g,{host:y,padding:x,viewport:w,content:S}=b||{},j=h?e:g.target,_=Ih(j,"textarea"),I=j.ownerDocument,E=I.documentElement,M=j===I.body,D=I.defaultView,R=ft(bre,[j]),N=ft(O8,[j]),O=ft(l2,[j]),T=ft(Xl,""),U=ft(R,T,f),G=ft(N,T,m),q=U(w),Y=q===j,Q=Y&&M,V=!Y&&G(S),se=!Y&&id(q)&&q===V,ee=se&&!!O(m),le=ee?U():q,ae=ee?V:G(),J=Q?E:se?le:q,re=_?R(T,c,y):j,A=Q?J:re,L=se?ae:V,K=I.activeElement,ne=!Y&&D.top===D&&K===j,z={It:j,lt:A,it:J,Zt:!Y&&N(T,d,x),ut:L,Qt:!Y&&!r&&s&&s(t),Et:Q?E:J,Gt:Q?I:J,tn:D,Nt:I,ft:_,Tt:M,At:h,_t:Y,nn:se,dt:(Ce,Me)=>Ine(J,Y?Yo:Ua,Y?Me:Ce),vt:(Ce,Me,qe)=>ql(J,Y?Yo:Ua,Y?Me:Ce,qe)},oe=fa(z).reduce((Ce,Me)=>{const qe=z[Me];return Xt(Ce,qe&&id(qe)&&!sa(qe)?qe:!1)},[]),X=Ce=>Ce?Bg(oe,Ce):null,{It:Z,lt:me,Zt:ve,it:de,ut:ke,Qt:we}=z,Re=[()=>{Ar(me,Yo),Ar(me,p1),Ar(Z,p1),M&&(Ar(E,Yo),Ar(E,p1))}],Qe=_&&X(me);let $e=_?Z:$b([ke,de,ve,me,Z].find(Ce=>X(Ce)===!1));const vt=Q?Z:ke||de,it=ft(Ro,Re);return[z,()=>{Cr(me,Yo,Y?"viewport":"host"),Cr(ve,Wb,""),Cr(ke,$j,""),Y||Cr(de,Ua,"");const Ce=M&&!Y?cl(sa(j),S8):ko,Me=qe=>{xo(sa(qe),$b(qe)),aa(qe)};if(Qe&&(jj(Z,me),Xt(Re,()=>{jj(me,Z),aa(me)})),xo(vt,$e),xo(me,ve),xo(ve||me,!Y&&de),xo(de,ke),Xt(Re,()=>{Ce(),Ar(ve,Wb),Ar(ke,$j),Ar(de,k8),Ar(de,j8),Ar(de,Ua),X(ke)&&Me(ke),X(de)&&Me(de),X(ve)&&Me(ve)}),r&&!Y&&(ql(de,Ua,_8,!0),Xt(Re,ft(Ar,de,Ua))),we&&(Mne(de,we),Xt(Re,ft(aa,we))),ne){const qe="tabindex",dt=Cr(de,qe);Cr(de,qe,"-1"),de.focus();const ye=()=>dt?Cr(de,qe,dt):Ar(de,qe),Ue=Pn(I,"pointerdown keydown",()=>{ye(),Ue()});Xt(Re,[ye,Ue])}else K&&K.focus&&K.focus();return $e=0,it},it]},Mre=({ut:e})=>({qt:t,sn:n,xt:r})=>{const{U:o}=Gr(),{ht:s}=t||{},{ct:l}=n;(e||!o)&&(s||r)&&pr(e,{[ma]:l?"":"100%"})},Ore=({lt:e,Zt:t,it:n,_t:r},o)=>{const[s,l]=Qo({u:Wne,o:Pj()},ft(Pj,e,"padding",""));return({St:c,qt:d,sn:f,xt:m})=>{let[h,g]=l(m);const{H:b,U:y}=Gr(),{et:x,bt:w,gt:S}=d||{},{rt:j}=f,[_,I]=c("paddingAbsolute");(x||g||(m||!y&&w))&&([h,g]=s(m));const M=!r&&(I||S||g);if(M){const D=!_||!t&&!b,R=h.r+h.l,N=h.t+h.b,O={[Dh]:D&&!j?-R:0,[ud]:D?-N:0,[Oh]:D&&j?-R:0,top:D?-h.t:0,right:D?j?-h.r:"auto":0,left:D?j?"auto":-h.l:0,[pa]:D?`calc(100% + ${R}px)`:""},T={[p8]:D?h.t:0,[n2]:D?h.r:0,[Mh]:D?h.b:0,[r2]:D?h.l:0};pr(t||n,O),pr(n,T),Vt(o,{Zt:h,en:!D,D:t?T:Vt({},O,T)})}return{cn:M}}},Dre=({lt:e,Zt:t,it:n,Qt:r,_t:o,vt:s,Tt:l,tn:c},d)=>{const f=ft(cd,0),m="visible",h=42,g={u:h8,o:{w:0,h:0}},b={u:g8,o:{x:$c,y:$c}},y=(ce,J)=>{const re=Ur.devicePixelRatio%1!==0?1:0,A={w:f(ce.w-J.w),h:f(ce.h-J.h)};return{w:A.w>re?A.w:0,h:A.h>re?A.h:0}},x=ce=>ce.indexOf(m)===0,{P:w,U:S,H:j,I:_}=Gr(),I=au(a2),E=!o&&!j&&(_.x||_.y),M=l&&o,[D,R]=Qo(g,ft(Ah,n)),[N,O]=Qo(g,ft(Rh,n)),[T,U]=Qo(g),[G,q]=Qo(g),[Y]=Qo(b),Q=(ce,J)=>{if(pr(n,{[ma]:""}),J){const{en:re,Zt:A}=d,{rn:L,k:K}=ce,ne=Ah(e),z=hm(e),oe=pr(n,"boxSizing")==="content-box",X=re||oe?A.b+A.t:0,Z=!(_.x&&oe);pr(n,{[ma]:z.h+ne.h+(L.x&&Z?K.x:0)-X})}},V=(ce,J)=>{const re=!j&&!ce?h:0,A=(ve,de,ke)=>{const we=pr(n,ve),Qe=(J?J[ve]:we)==="scroll";return[we,Qe,Qe&&!j?de?re:ke:0,de&&!!re]},[L,K,ne,z]=A(Yu,_.x,w.x),[oe,X,Z,me]=A(Zu,_.y,w.y);return{Jt:{x:L,y:oe},rn:{x:K,y:X},k:{x:ne,y:Z},M:{x:z,y:me}}},se=(ce,J,re,A)=>{const L=(X,Z)=>{const me=x(X),ve=Z&&me&&X.replace(`${m}-`,"")||"";return[Z&&!me?X:"",x(ve)?"hidden":ve]},[K,ne]=L(re.x,J.x),[z,oe]=L(re.y,J.y);return A[Yu]=ne&&z?ne:K,A[Zu]=oe&&K?oe:z,V(ce,A)},ee=(ce,J,re,A)=>{const{k:L,M:K}=ce,{x:ne,y:z}=K,{x:oe,y:X}=L,{D:Z}=d,me=J?Oh:Dh,ve=J?r2:n2,de=Z[me],ke=Z[ud],we=Z[ve],Re=Z[Mh];A[pa]=`calc(100% + ${X+de*-1}px)`,A[me]=-X+de,A[ud]=-oe+ke,re&&(A[ve]=we+(z?X:0),A[Mh]=Re+(ne?oe:0))},[le,ae]=I?I.T(E,S,n,r,d,V,ee):[()=>E,()=>[ko]];return({St:ce,qt:J,sn:re,xt:A},{cn:L})=>{const{et:K,wt:ne,bt:z,ht:oe,gt:X,yt:Z}=J||{},{ct:me,rt:ve}=re,[de,ke]=ce("showNativeOverlaidScrollbars"),[we,Re]=ce("overflow"),Qe=de&&_.x&&_.y,$e=!o&&!S&&(K||z||ne||ke||oe),vt=K||L||z||X||Z||ke,it=x(we.x),ot=x(we.y),Ce=it||ot;let Me=R(A),qe=O(A),dt=U(A),ye=q(A),Ue;if(ke&&j&&s(_8,Qne,!Qe),$e&&(Ue=V(Qe),Q(Ue,me)),vt){Ce&&s(wc,Cc,!1);const[zn,pn]=ae(Qe,ve,Ue),[en,un]=Me=D(A),[Wt,ar]=qe=N(A),vr=hm(n);let Bn=Wt,Hn=vr;zn(),(ar||un||ke)&&pn&&!Qe&&le(pn,Wt,en,ve)&&(Hn=hm(n),Bn=Rh(n));const lo=Hne(c),Fo={w:f(cd(Wt.w,Bn.w)+en.w),h:f(cd(Wt.h,Bn.h)+en.h)},zo={w:f((M?lo.w:Hn.w+f(vr.w-Wt.w))+en.w),h:f((M?lo.h:Hn.h+f(vr.h-Wt.h))+en.h)};ye=G(zo),dt=T(y(Fo,zo),A)}const[st,mt]=ye,[Pe,Ne]=dt,[kt,Se]=qe,[Ve,Ge]=Me,Le={x:Pe.w>0,y:Pe.h>0},bt=it&&ot&&(Le.x||Le.y)||it&&Le.x&&!Le.y||ot&&Le.y&&!Le.x;if(L||X||Z||Ge||Se||mt||Ne||Re||ke||$e||vt){const zn={[Dh]:0,[ud]:0,[Oh]:0,[pa]:"",[Yu]:"",[Zu]:""},pn=se(Qe,Le,we,zn),en=le(pn,kt,Ve,ve);o||ee(pn,ve,en,zn),$e&&Q(pn,me),o?(Cr(e,k8,zn[Yu]),Cr(e,j8,zn[Zu])):pr(n,zn)}ql(e,Yo,Cc,bt),ql(t,Wb,Yne,bt),o||ql(n,Ua,wc,Ce);const[Bt,Ht]=Y(V(Qe).Jt);return Vt(d,{Jt:Bt,zt:{x:st.w,y:st.h},Ht:{x:Pe.w,y:Pe.h},Kt:Le}),{Yt:Ht,Wt:mt,Xt:Ne}}},Rre=e=>{const[t,n,r]=Ere(e),o={Zt:{t:0,r:0,b:0,l:0},en:!1,D:{[Dh]:0,[ud]:0,[Oh]:0,[p8]:0,[n2]:0,[Mh]:0,[r2]:0},zt:{x:0,y:0},Ht:{x:0,y:0},Jt:{x:$c,y:$c},Kt:{x:!1,y:!1}},{It:s,it:l,vt:c,_t:d}=t,{H:f,I:m,U:h}=Gr(),g=!f&&(m.x||m.y),b=[Mre(t),Ore(t,o),Dre(t,o)];return[n,y=>{const x={},S=(g||!h)&&Lc(l);return c("",Th,!0),Qt(b,j=>{Vt(x,j(y,x)||{})}),c("",Th),ul(l,S),!d&&ul(s,0),x},o,t,r]},Are=(e,t,n,r)=>{const[o,s,l,c,d]=Rre(e),[f,m,h]=kre(c,S=>{w({},S)}),[g,b,,y]=Pre(e,t,h,l,c,r),x=S=>fa(S).some(j=>!!S[j]),w=(S,j)=>{const{ln:_,xt:I,$t:E,an:M}=S,D=_||{},R=!!I,N={St:qne(t,D,R),ln:D,xt:R};if(M)return b(N),!1;const O=j||m(Vt({},N,{$t:E})),T=s(Vt({},N,{sn:h,qt:O}));b(Vt({},N,{qt:O,Ft:T}));const U=x(O),G=x(T),q=U||G||!Jy(D)||R;return q&&n(S,{qt:O,Ft:T}),q};return[()=>{const{It:S,it:j,Nt:_,Tt:I}=c,E=I?_.documentElement:S,M=Lc(E),D=[f(),o(),g()];return ul(j,M),ft(Ro,D)},w,()=>({un:h,fn:l}),{_n:c,dn:y},d]},ra=(e,t,n)=>{const{G:r}=Gr(),o=id(e),s=o?e:e.target,l=D8(s);if(t&&!l){let c=!1;const d=[],f={},m=O=>{const T=o8(O,!0),U=au(dre);return U?U(T,!0):T},h=Vt({},r(),m(t)),[g,b,y]=Hb(),[x,w,S]=Hb(n),j=(O,T)=>{S(O,T),y(O,T)},[_,I,E,M,D]=Are(e,h,({ln:O,xt:T},{qt:U,Ft:G})=>{const{et:q,gt:Y,ht:Q,bt:V,wt:se,ot:ee}=U,{Wt:le,Xt:ae,Yt:ce}=G;j("updated",[N,{updateHints:{sizeChanged:!!q,directionChanged:!!Y,heightIntrinsicChanged:!!Q,overflowEdgeChanged:!!le,overflowAmountChanged:!!ae,overflowStyleChanged:!!ce,contentMutation:!!V,hostMutation:!!se,appear:!!ee},changedOptions:O||{},force:!!T}])},O=>j("scroll",[N,O])),R=O=>{Cre(s),Ro(d),c=!0,j("destroyed",[N,O]),b(),w()},N={options(O,T){if(O){const U=T?r():{},G=y8(h,Vt(U,m(O)));Jy(G)||(Vt(h,G),I({ln:G}))}return Vt({},h)},on:x,off:(O,T)=>{O&&T&&w(O,T)},state(){const{un:O,fn:T}=E(),{rt:U}=O,{zt:G,Ht:q,Jt:Y,Kt:Q,Zt:V,en:se}=T;return Vt({},{overflowEdge:G,overflowAmount:q,overflowStyle:Y,hasOverflow:Q,padding:V,paddingAbsolute:se,directionRTL:U,destroyed:c})},elements(){const{It:O,lt:T,Zt:U,it:G,ut:q,Et:Y,Gt:Q}=M._n,{Lt:V,jt:se}=M.dn,ee=ae=>{const{Ct:ce,Ot:J,Dt:re}=ae;return{scrollbar:re,track:J,handle:ce}},le=ae=>{const{Vt:ce,Ut:J}=ae,re=ee(ce[0]);return Vt({},re,{clone:()=>{const A=ee(J());return I({an:!0}),A}})};return Vt({},{target:O,host:T,padding:U||G,viewport:G,content:q||G,scrollOffsetElement:Y,scrollEventElement:Q,scrollbarHorizontal:le(V),scrollbarVertical:le(se)})},update:O=>I({xt:O,$t:!0}),destroy:ft(R,!1),plugin:O=>f[fa(O)[0]]};return Xt(d,[D]),yre(s,N),M8(P8,ra,[N,g,f]),xre(M._n.Tt,!o&&e.cancel)?(R(!0),N):(Xt(d,_()),j("initialized",[N]),N.update(!0),N)}return l};ra.plugin=e=>{const t=Do(e),n=t?e:[e],r=n.map(o=>M8(o,ra)[0]);return ure(n),t?r:r[0]};ra.valid=e=>{const t=e&&e.elements,n=Os(t)&&t();return jh(n)&&!!D8(n.target)};ra.env=()=>{const{P:e,I:t,H:n,V:r,U:o,A:s,L:l,F:c,W:d,j:f,N:m,G:h,q:g}=Gr();return Vt({},{scrollbarsSize:e,scrollbarsOverlaid:t,scrollbarsHiding:n,rtlScrollBehavior:r,flexboxGlue:o,cssCustomProperties:s,scrollTimeline:l,staticDefaultInitialization:c,staticDefaultOptions:d,getDefaultInitialization:f,setDefaultInitialization:m,getDefaultOptions:h,setDefaultOptions:g})};const Tre=()=>{if(typeof window>"u"){const f=()=>{};return[f,f]}let e,t;const n=window,r=typeof n.requestIdleCallback=="function",o=n.requestAnimationFrame,s=n.cancelAnimationFrame,l=r?n.requestIdleCallback:o,c=r?n.cancelIdleCallback:s,d=()=>{c(e),s(t)};return[(f,m)=>{d(),e=l(r?()=>{d(),t=o(f)}:f,typeof m=="object"?m:{timeout:2233})},d]},c2=e=>{const{options:t,events:n,defer:r}=e||{},[o,s]=i.useMemo(Tre,[]),l=i.useRef(null),c=i.useRef(r),d=i.useRef(t),f=i.useRef(n);return i.useEffect(()=>{c.current=r},[r]),i.useEffect(()=>{const{current:m}=l;d.current=t,ra.valid(m)&&m.options(t||{},!0)},[t]),i.useEffect(()=>{const{current:m}=l;f.current=n,ra.valid(m)&&m.on(n||{},!0)},[n]),i.useEffect(()=>()=>{var m;s(),(m=l.current)==null||m.destroy()},[]),i.useMemo(()=>[m=>{const h=l.current;if(ra.valid(h))return;const g=c.current,b=d.current||{},y=f.current||{},x=()=>l.current=ra(m,b,y);g?o(x,g):x()},()=>l.current],[])},Nre=(e,t)=>{const{element:n="div",options:r,events:o,defer:s,children:l,...c}=e,d=n,f=i.useRef(null),m=i.useRef(null),[h,g]=c2({options:r,events:o,defer:s});return i.useEffect(()=>{const{current:b}=f,{current:y}=m;return b&&y&&h({target:b,elements:{viewport:y,content:y}}),()=>{var x;return(x=g())==null?void 0:x.destroy()}},[h,n]),i.useImperativeHandle(t,()=>({osInstance:g,getElement:()=>f.current}),[]),B.createElement(d,{"data-overlayscrollbars-initialize":"",ref:f,...c},B.createElement("div",{"data-overlayscrollbars-contents":"",ref:m},l))},Gg=i.forwardRef(Nre),$re=()=>{const{t:e}=W(),[t,{isLoading:n}]=dA(),r=e("boards.myBoard"),o=i.useCallback(()=>{t(r)},[t,r]);return a.jsx(Fe,{icon:a.jsx(nl,{}),isLoading:n,tooltip:e("boards.addBoard"),"aria-label":e("boards.addBoard"),onClick:o,size:"sm","data-testid":"add-board-button"})},Lre=i.memo($re);var T8=eg({displayName:"ExternalLinkIcon",path:a.jsxs("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"2",children:[a.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),a.jsx("path",{d:"M15 3h6v6"}),a.jsx("path",{d:"M10 14L21 3"})]})}),Kg=eg({d:"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z",displayName:"ChevronUpIcon"}),N8=eg({displayName:"CloseIcon",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"}),Fre=eg({displayName:"DeleteIcon",path:a.jsx("g",{fill:"currentColor",children:a.jsx("path",{d:"M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z"})})});const zre=fe([pe],({gallery:e})=>{const{boardSearchText:t}=e;return{boardSearchText:t}}),Bre=()=>{const e=te(),{boardSearchText:t}=H(zre),n=i.useRef(null),{t:r}=W(),o=i.useCallback(d=>{e(Lw(d))},[e]),s=i.useCallback(()=>{e(Lw(""))},[e]),l=i.useCallback(d=>{d.key==="Escape"&&s()},[s]),c=i.useCallback(d=>{o(d.target.value)},[o]);return i.useEffect(()=>{n.current&&n.current.focus()},[]),a.jsxs(cy,{children:[a.jsx(Qc,{ref:n,placeholder:r("boards.searchBoard"),value:t,onKeyDown:l,onChange:c,"data-testid":"board-search-input"}),t&&t.length&&a.jsx(lg,{children:a.jsx(rs,{onClick:s,size:"xs",variant:"ghost","aria-label":r("boards.clearSearch"),opacity:.5,icon:a.jsx(N8,{boxSize:2})})})]})},Hre=i.memo(Bre);function $8(e){return fA(e)}function Wre(e){return pA(e)}const L8=(e,t)=>{var o,s;if(!e||!(t!=null&&t.data.current))return!1;const{actionType:n}=e,{payloadType:r}=t.data.current;if(e.id===t.data.current.id)return!1;switch(n){case"ADD_FIELD_TO_LINEAR":return r==="NODE_FIELD";case"SET_CURRENT_IMAGE":return r==="IMAGE_DTO";case"SET_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_CONTROL_ADAPTER_IMAGE":return r==="IMAGE_DTO";case"SET_CANVAS_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_NODES_IMAGE":return r==="IMAGE_DTO";case"SET_MULTI_NODES_IMAGE":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BATCH":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:c}=t.data.current.payload,d=c.board_id??"none",f=e.context.boardId;return d!==f}if(r==="IMAGE_DTOS"){const{imageDTOs:c}=t.data.current.payload,d=((o=c[0])==null?void 0:o.board_id)??"none",f=e.context.boardId;return d!==f}return!1}case"REMOVE_FROM_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:c}=t.data.current.payload;return(c.board_id??"none")!=="none"}if(r==="IMAGE_DTOS"){const{imageDTOs:c}=t.data.current.payload;return(((s=c[0])==null?void 0:s.board_id)??"none")!=="none"}return!1}default:return!1}},Vre=e=>{const{isOver:t,label:n="Drop"}=e,r=i.useRef(Ya()),{colorMode:o}=ya();return a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsxs($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full"},children:[a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:Te("base.700","base.900")(o),opacity:.7,borderRadius:"base",alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx($,{sx:{position:"absolute",top:.5,insetInlineStart:.5,insetInlineEnd:.5,bottom:.5,opacity:1,borderWidth:2,borderColor:t?Te("base.50","base.50")(o):Te("base.200","base.300")(o),borderRadius:"lg",borderStyle:"dashed",transitionProperty:"common",transitionDuration:"0.1s",alignItems:"center",justifyContent:"center"},children:a.jsx(Ie,{sx:{fontSize:"2xl",fontWeight:600,transform:t?"scale(1.1)":"scale(1)",color:t?Te("base.50","base.50")(o):Te("base.200","base.300")(o),transitionProperty:"common",transitionDuration:"0.1s"},children:n})})]})},r.current)},F8=i.memo(Vre),Ure=e=>{const{dropLabel:t,data:n,disabled:r}=e,o=i.useRef(Ya()),{isOver:s,setNodeRef:l,active:c}=$8({id:o.current,disabled:r,data:n});return a.jsx(Ie,{ref:l,position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",pointerEvents:c?"auto":"none",children:a.jsx(hr,{children:L8(n,c)&&a.jsx(F8,{isOver:s,label:t})})})},u2=i.memo(Ure),Gre=({isSelected:e,isHovered:t})=>a.jsx(Ie,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e?1:.7,transitionProperty:"common",transitionDuration:"0.1s",pointerEvents:"none",shadow:e?t?"hoverSelected.light":"selected.light":t?"hoverUnselected.light":void 0,_dark:{shadow:e?t?"hoverSelected.dark":"selected.dark":t?"hoverUnselected.dark":void 0}}}),d2=i.memo(Gre),Kre=()=>{const{t:e}=W();return a.jsx($,{sx:{position:"absolute",insetInlineEnd:0,top:0,p:1},children:a.jsx(Sa,{variant:"solid",sx:{bg:"accent.400",_dark:{bg:"accent.500"}},children:e("common.auto")})})},z8=i.memo(Kre);function f2(e){const[t,n]=i.useState(!1),[r,o]=i.useState(!1),[s,l]=i.useState(!1),[c,d]=i.useState([0,0]),f=i.useRef(null);i.useEffect(()=>{if(t)setTimeout(()=>{o(!0),setTimeout(()=>{l(!0)})});else{l(!1);const g=setTimeout(()=>{o(t)},1e3);return()=>clearTimeout(g)}},[t]);const m=i.useCallback(()=>{n(!1),l(!1),o(!1)},[]);Yy(m),DB("contextmenu",g=>{var b;(b=f.current)!=null&&b.contains(g.target)||g.target===f.current?(g.preventDefault(),n(!0),d([g.pageX,g.pageY])):n(!1)});const h=i.useCallback(()=>{var g,b;(b=(g=e.menuProps)==null?void 0:g.onClose)==null||b.call(g),n(!1)},[e.menuProps]);return a.jsxs(a.Fragment,{children:[e.children(f),r&&a.jsx(Uc,{...e.portalProps,children:a.jsxs(of,{isOpen:s,gutter:0,...e.menuProps,onClose:h,children:[a.jsx(sf,{"aria-hidden":!0,w:1,h:1,style:{position:"absolute",left:c[0],top:c[1],cursor:"default"},...e.menuButtonProps}),e.renderMenu()]})})]})}const qg=e=>{const{boardName:t}=Wd(void 0,{selectFromResult:({data:n})=>{const r=n==null?void 0:n.find(s=>s.board_id===e);return{boardName:(r==null?void 0:r.board_name)||PI("boards.uncategorized")}}});return t},qre=({board:e,setBoardToDelete:t})=>{const{t:n}=W(),r=i.useCallback(()=>{t&&t(e)},[e,t]);return a.jsxs(a.Fragment,{children:[e.image_count>0&&a.jsx(a.Fragment,{}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClick:r,children:n("boards.deleteBoard")})]})},Xre=i.memo(qre),Qre=()=>a.jsx(a.Fragment,{}),Yre=i.memo(Qre),Zre=({board:e,board_id:t,setBoardToDelete:n,children:r})=>{const{t:o}=W(),s=te(),l=i.useMemo(()=>fe(pe,({gallery:w})=>{const S=w.autoAddBoardId===t,j=w.autoAssignBoardOnClick;return{isAutoAdd:S,autoAssignBoardOnClick:j}}),[t]),{isAutoAdd:c,autoAssignBoardOnClick:d}=H(l),f=qg(t),m=Mt("bulkDownload").isFeatureEnabled,[h]=EI(),g=i.useCallback(()=>{s(Kh(t))},[t,s]),b=i.useCallback(async()=>{try{const w=await h({image_names:[],board_id:t}).unwrap();s(lt({title:o("gallery.preparingDownload"),status:"success",...w.response?{description:w.response,duration:null,isClosable:!0}:{}}))}catch{s(lt({title:o("gallery.preparingDownloadFailed"),status:"error"}))}},[o,t,h,s]),y=i.useCallback(w=>{w.preventDefault()},[]),x=i.useCallback(()=>a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:y,children:a.jsxs(_d,{title:f,children:[a.jsx(At,{icon:a.jsx(nl,{}),isDisabled:c||d,onClick:g,children:o("boards.menuItemAutoAdd")}),m&&a.jsx(At,{icon:a.jsx(ou,{}),onClickCapture:b,children:o("boards.downloadBoard")}),!e&&a.jsx(Yre,{}),e&&a.jsx(Xre,{board:e,setBoardToDelete:n})]})}),[d,e,f,b,g,c,m,n,y,o]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:x,children:r})},B8=i.memo(Zre),Jre=({board:e,isSelected:t,setBoardToDelete:n})=>{const r=te(),o=i.useMemo(()=>fe(pe,({gallery:O})=>{const T=e.board_id===O.autoAddBoardId,U=O.autoAssignBoardOnClick;return{isSelectedForAutoAdd:T,autoAssignBoardOnClick:U}}),[e.board_id]),{isSelectedForAutoAdd:s,autoAssignBoardOnClick:l}=H(o),[c,d]=i.useState(!1),f=i.useCallback(()=>{d(!0)},[]),m=i.useCallback(()=>{d(!1)},[]),{data:h}=wx(e.board_id),{data:g}=Sx(e.board_id),b=i.useMemo(()=>{if(!((h==null?void 0:h.total)===void 0||(g==null?void 0:g.total)===void 0))return`${h.total} image${h.total===1?"":"s"}, ${g.total} asset${g.total===1?"":"s"}`},[g,h]),{currentData:y}=jo(e.cover_image_name??Br),{board_name:x,board_id:w}=e,[S,j]=i.useState(x),_=i.useCallback(()=>{r(MI({boardId:w})),l&&r(Kh(w))},[w,l,r]),[I,{isLoading:E}]=mA(),M=i.useMemo(()=>({id:w,actionType:"ADD_TO_BOARD",context:{boardId:w}}),[w]),D=i.useCallback(async O=>{if(!O.trim()){j(x);return}if(O!==x)try{const{board_name:T}=await I({board_id:w,changes:{board_name:O}}).unwrap();j(T)}catch{j(x)}},[w,x,I]),R=i.useCallback(O=>{j(O)},[]),{t:N}=W();return a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx($,{onMouseOver:f,onMouseOut:m,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",w:"full",h:"full"},children:a.jsx(B8,{board:e,board_id:w,setBoardToDelete:n,children:O=>a.jsx(Ut,{label:b,openDelay:1e3,hasArrow:!0,children:a.jsxs($,{ref:O,onClick:_,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[y!=null&&y.thumbnail_url?a.jsx(Ca,{src:y==null?void 0:y.thumbnail_url,draggable:!1,sx:{objectFit:"cover",w:"full",h:"full",maxH:"full",borderRadius:"base",borderBottomRadius:"lg"}}):a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(An,{boxSize:12,as:Xte,sx:{mt:-6,opacity:.7,color:"base.500",_dark:{color:"base.500"}}})}),s&&a.jsx(z8,{}),a.jsx(d2,{isSelected:t,isHovered:c}),a.jsx($,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:t?"accent.400":"base.500",color:t?"base.50":"base.100",_dark:{bg:t?"accent.500":"base.600",color:t?"base.50":"base.100"},lineHeight:"short",fontSize:"xs"},children:a.jsxs(ef,{value:S,isDisabled:E,submitOnBlur:!0,onChange:R,onSubmit:D,sx:{w:"full"},children:[a.jsx(Jd,{sx:{p:0,fontWeight:t?700:500,textAlign:"center",overflow:"hidden",textOverflow:"ellipsis"},noOfLines:1}),a.jsx(Zd,{sx:{p:0,_focusVisible:{p:0,textAlign:"center",boxShadow:"none"}}})]})}),a.jsx(u2,{data:M,dropLabel:a.jsx(be,{fontSize:"md",children:N("unifiedCanvas.move")})})]})})})})})},eoe=i.memo(Jre),toe=fe(pe,({gallery:e})=>{const{autoAddBoardId:t,autoAssignBoardOnClick:n}=e;return{autoAddBoardId:t,autoAssignBoardOnClick:n}}),H8=i.memo(({isSelected:e})=>{const t=te(),{autoAddBoardId:n,autoAssignBoardOnClick:r}=H(toe),o=qg("none"),s=i.useCallback(()=>{t(MI({boardId:"none"})),r&&t(Kh("none"))},[t,r]),[l,c]=i.useState(!1),{data:d}=wx("none"),{data:f}=Sx("none"),m=i.useMemo(()=>{if(!((d==null?void 0:d.total)===void 0||(f==null?void 0:f.total)===void 0))return`${d.total} image${d.total===1?"":"s"}, ${f.total} asset${f.total===1?"":"s"}`},[f,d]),h=i.useCallback(()=>{c(!0)},[]),g=i.useCallback(()=>{c(!1)},[]),b=i.useMemo(()=>({id:"no_board",actionType:"REMOVE_FROM_BOARD"}),[]),{t:y}=W();return a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx($,{onMouseOver:h,onMouseOut:g,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",borderRadius:"base",w:"full",h:"full"},children:a.jsx(B8,{board_id:"none",children:x=>a.jsx(Ut,{label:m,openDelay:1e3,hasArrow:!0,children:a.jsxs($,{ref:x,onClick:s,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",sx:{opacity:.4,filter:"grayscale(1)",mt:-6,w:16,h:16,minW:16,minH:16,userSelect:"none"}})}),n==="none"&&a.jsx(z8,{}),a.jsx($,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:e?"accent.400":"base.500",color:e?"base.50":"base.100",_dark:{bg:e?"accent.500":"base.600",color:e?"base.50":"base.100"},lineHeight:"short",fontSize:"xs",fontWeight:e?700:500},children:o}),a.jsx(d2,{isSelected:e,isHovered:l}),a.jsx(u2,{data:b,dropLabel:a.jsx(be,{fontSize:"md",children:y("unifiedCanvas.move")})})]})})})})})});H8.displayName="HoverableBoard";const noe=i.memo(H8),roe=fe([pe],({gallery:e})=>{const{selectedBoardId:t,boardSearchText:n}=e;return{selectedBoardId:t,boardSearchText:n}}),ooe=e=>{const{isOpen:t}=e,{selectedBoardId:n,boardSearchText:r}=H(roe),{data:o}=Wd(),s=r?o==null?void 0:o.filter(d=>d.board_name.toLowerCase().includes(r.toLowerCase())):o,[l,c]=i.useState();return a.jsxs(a.Fragment,{children:[a.jsx(Xd,{in:t,animateOpacity:!0,children:a.jsxs($,{layerStyle:"first",sx:{flexDir:"column",gap:2,p:2,mt:2,borderRadius:"base"},children:[a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(Hre,{}),a.jsx(Lre,{})]}),a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"move",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsxs(sl,{className:"list-container","data-testid":"boards-list",sx:{gridTemplateColumns:"repeat(auto-fill, minmax(108px, 1fr));",maxH:346},children:[a.jsx(Sd,{sx:{p:1.5},"data-testid":"no-board",children:a.jsx(noe,{isSelected:n==="none"})}),s&&s.map((d,f)=>a.jsx(Sd,{sx:{p:1.5},"data-testid":`board-${f}`,children:a.jsx(eoe,{board:d,isSelected:n===d.board_id,setBoardToDelete:c})},d.board_id))]})})]})}),a.jsx(Sne,{boardToDelete:l,setBoardToDelete:c})]})},soe=i.memo(ooe),aoe=fe([pe],e=>{const{selectedBoardId:t}=e.gallery;return{selectedBoardId:t}}),loe=e=>{const{isOpen:t,onToggle:n}=e,{selectedBoardId:r}=H(aoe),o=qg(r),s=i.useMemo(()=>o.length>20?`${o.substring(0,20)}...`:o,[o]);return a.jsxs($,{as:ol,onClick:n,size:"sm",sx:{position:"relative",gap:2,w:"full",justifyContent:"space-between",alignItems:"center",px:2},children:[a.jsx(be,{noOfLines:1,sx:{fontWeight:600,w:"100%",textAlign:"center",color:"base.800",_dark:{color:"base.200"}},children:s}),a.jsx(Kg,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]})},ioe=i.memo(loe),coe=e=>{const{triggerComponent:t,children:n,hasArrow:r=!0,isLazy:o=!0,...s}=e;return a.jsxs(lf,{isLazy:o,...s,children:[a.jsx(yg,{children:t}),a.jsxs(cf,{shadow:"dark-lg",children:[r&&a.jsx(m6,{}),n]})]})},xf=i.memo(coe),uoe=e=>{const{label:t,...n}=e,{colorMode:r}=ya();return a.jsx(og,{colorScheme:"accent",...n,children:a.jsx(be,{sx:{fontSize:"sm",color:Te("base.800","base.200")(r)},children:t})})},yr=i.memo(uoe);function doe(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 16c1.671 0 3-1.331 3-3s-1.329-3-3-3-3 1.331-3 3 1.329 3 3 3z"}},{tag:"path",attr:{d:"M20.817 11.186a8.94 8.94 0 0 0-1.355-3.219 9.053 9.053 0 0 0-2.43-2.43 8.95 8.95 0 0 0-3.219-1.355 9.028 9.028 0 0 0-1.838-.18V2L8 5l3.975 3V6.002c.484-.002.968.044 1.435.14a6.961 6.961 0 0 1 2.502 1.053 7.005 7.005 0 0 1 1.892 1.892A6.967 6.967 0 0 1 19 13a7.032 7.032 0 0 1-.55 2.725 7.11 7.11 0 0 1-.644 1.188 7.2 7.2 0 0 1-.858 1.039 7.028 7.028 0 0 1-3.536 1.907 7.13 7.13 0 0 1-2.822 0 6.961 6.961 0 0 1-2.503-1.054 7.002 7.002 0 0 1-1.89-1.89A6.996 6.996 0 0 1 5 13H3a9.02 9.02 0 0 0 1.539 5.034 9.096 9.096 0 0 0 2.428 2.428A8.95 8.95 0 0 0 12 22a9.09 9.09 0 0 0 1.814-.183 9.014 9.014 0 0 0 3.218-1.355 8.886 8.886 0 0 0 1.331-1.099 9.228 9.228 0 0 0 1.1-1.332A8.952 8.952 0 0 0 21 13a9.09 9.09 0 0 0-.183-1.814z"}}]})(e)}const W8=_e((e,t)=>{const[n,r]=i.useState(!1),{label:o,value:s,min:l=1,max:c=100,step:d=1,onChange:f,tooltipSuffix:m="",withSliderMarks:h=!1,withInput:g=!1,isInteger:b=!1,inputWidth:y=16,withReset:x=!1,hideTooltip:w=!1,isCompact:S=!1,isDisabled:j=!1,sliderMarks:_,handleReset:I,sliderFormControlProps:E,sliderFormLabelProps:M,sliderMarkProps:D,sliderTrackProps:R,sliderThumbProps:N,sliderNumberInputProps:O,sliderNumberInputFieldProps:T,sliderNumberInputStepperProps:U,sliderTooltipProps:G,sliderIAIIconButtonProps:q,...Y}=e,Q=te(),{t:V}=W(),[se,ee]=i.useState(String(s));i.useEffect(()=>{ee(s)},[s]);const le=i.useMemo(()=>O!=null&&O.min?O.min:l,[l,O==null?void 0:O.min]),ae=i.useMemo(()=>O!=null&&O.max?O.max:c,[c,O==null?void 0:O.max]),ce=i.useCallback(Z=>{f(Z)},[f]),J=i.useCallback(Z=>{Z.target.value===""&&(Z.target.value=String(le));const me=Zl(b?Math.floor(Number(Z.target.value)):Number(se),le,ae),ve=Ku(me,d);f(ve),ee(ve)},[b,se,le,ae,f,d]),re=i.useCallback(Z=>{ee(Z)},[]),A=i.useCallback(()=>{I&&I()},[I]),L=i.useCallback(Z=>{Z.target instanceof HTMLDivElement&&Z.target.focus()},[]),K=i.useCallback(Z=>{Z.shiftKey&&Q(zr(!0))},[Q]),ne=i.useCallback(Z=>{Z.shiftKey||Q(zr(!1))},[Q]),z=i.useCallback(()=>r(!0),[]),oe=i.useCallback(()=>r(!1),[]),X=i.useCallback(()=>f(Number(se)),[se,f]);return a.jsxs(Gt,{ref:t,onClick:L,sx:S?{display:"flex",flexDirection:"row",alignItems:"center",columnGap:4,margin:0,padding:0}:{},isDisabled:j,...E,children:[o&&a.jsx(ln,{sx:g?{mb:-1.5}:{},...M,children:o}),a.jsxs(ug,{w:"100%",gap:2,alignItems:"center",children:[a.jsxs(Sy,{"aria-label":o,value:s,min:l,max:c,step:d,onChange:ce,onMouseEnter:z,onMouseLeave:oe,focusThumbOnChange:!1,isDisabled:j,...Y,children:[h&&!_&&a.jsxs(a.Fragment,{children:[a.jsx(Zi,{value:l,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...D,children:l}),a.jsx(Zi,{value:c,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...D,children:c})]}),h&&_&&a.jsx(a.Fragment,{children:_.map((Z,me)=>me===0?a.jsx(Zi,{value:Z,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...D,children:Z},Z):me===_.length-1?a.jsx(Zi,{value:Z,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...D,children:Z},Z):a.jsx(Zi,{value:Z,sx:{transform:"translateX(-50%)"},...D,children:Z},Z))}),a.jsx(jy,{...R,children:a.jsx(_y,{})}),a.jsx(Ut,{hasArrow:!0,placement:"top",isOpen:n,label:`${s}${m}`,hidden:w,...G,children:a.jsx(ky,{...N,zIndex:0})})]}),g&&a.jsxs(mg,{min:le,max:ae,step:d,value:se,onChange:re,onBlur:J,focusInputOnChange:!1,...O,children:[a.jsx(gg,{onKeyDown:K,onKeyUp:ne,minWidth:y,...T}),a.jsxs(hg,{...U,children:[a.jsx(bg,{onClick:X}),a.jsx(vg,{onClick:X})]})]}),x&&a.jsx(Fe,{size:"sm","aria-label":V("accessibility.reset"),tooltip:V("accessibility.reset"),icon:a.jsx(doe,{}),isDisabled:j,onClick:A,...q})]})]})});W8.displayName="IAISlider";const nt=i.memo(W8),V8=i.forwardRef(({label:e,tooltip:t,description:n,disabled:r,...o},s)=>a.jsx(Ut,{label:t,placement:"top",hasArrow:!0,openDelay:500,children:a.jsx(Ie,{ref:s,...o,children:a.jsxs(Ie,{children:[a.jsx(Oc,{children:e}),n&&a.jsx(Oc,{size:"xs",color:"base.600",children:n})]})})}));V8.displayName="IAIMantineSelectItemWithTooltip";const xl=i.memo(V8),foe=fe([pe],({gallery:e})=>{const{autoAddBoardId:t,autoAssignBoardOnClick:n}=e;return{autoAddBoardId:t,autoAssignBoardOnClick:n}}),poe=()=>{const e=te(),{t}=W(),{autoAddBoardId:n,autoAssignBoardOnClick:r}=H(foe),o=i.useRef(null),{boards:s,hasBoards:l}=Wd(void 0,{selectFromResult:({data:f})=>{const m=[{label:"None",value:"none"}];return f==null||f.forEach(({board_id:h,board_name:g})=>{m.push({label:g,value:h})}),{boards:m,hasBoards:m.length>1}}}),c=i.useCallback(f=>{f&&e(Kh(f))},[e]),d=i.useCallback((f,m)=>{var h;return((h=m.label)==null?void 0:h.toLowerCase().includes(f.toLowerCase().trim()))||m.value.toLowerCase().includes(f.toLowerCase().trim())},[]);return a.jsx(sn,{label:t("boards.autoAddBoard"),inputRef:o,autoFocus:!0,placeholder:t("boards.selectBoard"),value:n,data:s,nothingFound:t("boards.noMatching"),itemComponent:xl,disabled:!l||r,filter:d,onChange:c})},moe=i.memo(poe),hoe=fe([pe],e=>{const{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r}=e.gallery;return{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r}}),goe=()=>{const e=te(),{t}=W(),{galleryImageMinimumWidth:n,shouldAutoSwitch:r,autoAssignBoardOnClick:o}=H(hoe),s=i.useCallback(f=>{e(Fw(f))},[e]),l=i.useCallback(()=>{e(Fw(64))},[e]),c=i.useCallback(f=>{e(hA(f.target.checked))},[e]),d=i.useCallback(f=>e(gA(f.target.checked)),[e]);return a.jsx(xf,{triggerComponent:a.jsx(Fe,{tooltip:t("gallery.gallerySettings"),"aria-label":t("gallery.gallerySettings"),size:"sm",icon:a.jsx(QM,{})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(nt,{value:n,onChange:s,min:45,max:256,hideTooltip:!0,label:t("gallery.galleryImageSize"),withReset:!0,handleReset:l}),a.jsx(_n,{label:t("gallery.autoSwitchNewImages"),isChecked:r,onChange:c}),a.jsx(yr,{label:t("gallery.autoAssignBoardOnClick"),isChecked:o,onChange:d}),a.jsx(moe,{})]})})},voe=i.memo(goe),boe=e=>e.image?a.jsx(wg,{sx:{w:`${e.image.width}px`,h:"auto",objectFit:"contain",aspectRatio:`${e.image.width}/${e.image.height}`}}):a.jsx($,{sx:{opacity:.7,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(va,{size:"xl"})}),Tn=e=>{const{icon:t=si,boxSize:n=16,sx:r,...o}=e;return a.jsxs($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...r},...o,children:[t&&a.jsx(An,{as:t,boxSize:n,opacity:.7}),e.label&&a.jsx(be,{textAlign:"center",children:e.label})]})},U8=e=>{const{sx:t,...n}=e;return a.jsxs($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...t},...n,children:[a.jsx(va,{size:"xl"}),e.label&&a.jsx(be,{textAlign:"center",children:e.label})]})},Gb=(e,t)=>e>(t.endIndex-t.startIndex)/2+t.startIndex?"end":"start",lc=xA({virtuosoRef:void 0,virtuosoRangeRef:void 0}),xoe=fe([pe,kx],(e,t)=>{var j,_;const{data:n,status:r}=vA.endpoints.listImages.select(t)(e),{data:o}=e.gallery.galleryView==="images"?zw.endpoints.getBoardImagesTotal.select(t.board_id??"none")(e):zw.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(e),s=e.gallery.selection[e.gallery.selection.length-1],l=r==="pending";if(!n||!s||(o==null?void 0:o.total)===0)return{isFetching:l,queryArgs:t,isOnFirstImage:!0,isOnLastImage:!0};const c={...t,offset:n.ids.length,limit:OI},d=bA.getSelectors(),f=d.selectAll(n),m=f.findIndex(I=>I.image_name===s.image_name),h=Zl(m+1,0,f.length-1),g=Zl(m-1,0,f.length-1),b=(j=f[h])==null?void 0:j.image_name,y=(_=f[g])==null?void 0:_.image_name,x=b?d.selectById(n,b):void 0,w=y?d.selectById(n,y):void 0,S=f.length;return{loadedImagesCount:f.length,currentImageIndex:m,areMoreImagesAvailable:((o==null?void 0:o.total)??0)>S,isFetching:r==="pending",nextImage:x,prevImage:w,nextImageIndex:h,prevImageIndex:g,queryArgs:c}}),G8=()=>{const e=te(),{nextImage:t,nextImageIndex:n,prevImage:r,prevImageIndex:o,areMoreImagesAvailable:s,isFetching:l,queryArgs:c,loadedImagesCount:d,currentImageIndex:f}=H(xoe),m=i.useCallback(()=>{var w,S;r&&e(Bw(r));const y=(w=lc.get().virtuosoRangeRef)==null?void 0:w.current,x=(S=lc.get().virtuosoRef)==null?void 0:S.current;!y||!x||o!==void 0&&(oy.endIndex)&&x.scrollToIndex({index:o,behavior:"smooth",align:Gb(o,y)})},[e,r,o]),h=i.useCallback(()=>{var w,S;t&&e(Bw(t));const y=(w=lc.get().virtuosoRangeRef)==null?void 0:w.current,x=(S=lc.get().virtuosoRef)==null?void 0:S.current;!y||!x||n!==void 0&&(ny.endIndex)&&x.scrollToIndex({index:n,behavior:"smooth",align:Gb(n,y)})},[e,t,n]),[g]=DI(),b=i.useCallback(()=>{g(c)},[g,c]);return{handlePrevImage:m,handleNextImage:h,isOnFirstImage:f===0,isOnLastImage:f!==void 0&&f===d-1,nextImage:t,prevImage:r,areMoreImagesAvailable:s,handleLoadMoreImages:b,isFetching:l}},Xg=0,yl=1,lu=2,K8=4;function q8(e,t){return n=>e(t(n))}function yoe(e,t){return t(e)}function X8(e,t){return n=>e(t,n)}function Gj(e,t){return()=>e(t)}function Qg(e,t){return t(e),e}function Cn(...e){return e}function Coe(e){e()}function Kj(e){return()=>e}function woe(...e){return()=>{e.map(Coe)}}function p2(e){return e!==void 0}function iu(){}function Zt(e,t){return e(yl,t)}function St(e,t){e(Xg,t)}function m2(e){e(lu)}function to(e){return e(K8)}function at(e,t){return Zt(e,X8(t,Xg))}function ha(e,t){const n=e(yl,r=>{n(),t(r)});return n}function Nt(){const e=[];return(t,n)=>{switch(t){case lu:e.splice(0,e.length);return;case yl:return e.push(n),()=>{const r=e.indexOf(n);r>-1&&e.splice(r,1)};case Xg:e.slice().forEach(r=>{r(n)});return;default:throw new Error(`unrecognized action ${t}`)}}}function Be(e){let t=e;const n=Nt();return(r,o)=>{switch(r){case yl:o(t);break;case Xg:t=o;break;case K8:return t}return n(r,o)}}function Soe(e){let t,n;const r=()=>t&&t();return function(o,s){switch(o){case yl:return s?n===s?void 0:(r(),n=s,t=Zt(e,s),t):(r(),iu);case lu:r(),n=null;return;default:throw new Error(`unrecognized action ${o}`)}}}function ro(e){return Qg(Nt(),t=>at(e,t))}function wr(e,t){return Qg(Be(t),n=>at(e,n))}function koe(...e){return t=>e.reduceRight(yoe,t)}function Ee(e,...t){const n=koe(...t);return(r,o)=>{switch(r){case yl:return Zt(e,n(o));case lu:m2(e);return}}}function Q8(e,t){return e===t}function vn(e=Q8){let t;return n=>r=>{e(t,r)||(t=r,n(r))}}function gt(e){return t=>n=>{e(n)&&t(n)}}function Ze(e){return t=>q8(t,e)}function Zs(e){return t=>()=>t(e)}function js(e,t){return n=>r=>n(t=e(t,r))}function Fc(e){return t=>n=>{e>0?e--:t(n)}}function Qa(e){let t=null,n;return r=>o=>{t=o,!n&&(n=setTimeout(()=>{n=void 0,r(t)},e))}}function qj(e){let t,n;return r=>o=>{t=o,n&&clearTimeout(n),n=setTimeout(()=>{r(t)},e)}}function Pt(...e){const t=new Array(e.length);let n=0,r=null;const o=Math.pow(2,e.length)-1;return e.forEach((s,l)=>{const c=Math.pow(2,l);Zt(s,d=>{const f=n;n=n|c,t[l]=d,f!==o&&n===o&&r&&(r(),r=null)})}),s=>l=>{const c=()=>s([l].concat(t));n===o?c():r=c}}function Xj(...e){return function(t,n){switch(t){case yl:return woe(...e.map(r=>Zt(r,n)));case lu:return;default:throw new Error(`unrecognized action ${t}`)}}}function ht(e,t=Q8){return Ee(e,vn(t))}function er(...e){const t=Nt(),n=new Array(e.length);let r=0;const o=Math.pow(2,e.length)-1;return e.forEach((s,l)=>{const c=Math.pow(2,l);Zt(s,d=>{n[l]=d,r=r|c,r===o&&St(t,n)})}),function(s,l){switch(s){case yl:return r===o&&l(n),Zt(t,l);case lu:return m2(t);default:throw new Error(`unrecognized action ${s}`)}}}function Yt(e,t=[],{singleton:n}={singleton:!0}){return{id:joe(),constructor:e,dependencies:t,singleton:n}}const joe=()=>Symbol();function _oe(e){const t=new Map,n=({id:r,constructor:o,dependencies:s,singleton:l})=>{if(l&&t.has(r))return t.get(r);const c=o(s.map(d=>n(d)));return l&&t.set(r,c),c};return n(e)}function Ioe(e,t){const n={},r={};let o=0;const s=e.length;for(;o(w[S]=j=>{const _=x[t.methods[S]];St(_,j)},w),{})}function m(x){return l.reduce((w,S)=>(w[S]=Soe(x[t.events[S]]),w),{})}return{Component:B.forwardRef((x,w)=>{const{children:S,...j}=x,[_]=B.useState(()=>Qg(_oe(e),E=>d(E,j))),[I]=B.useState(Gj(m,_));return Qp(()=>{for(const E of l)E in j&&Zt(I[E],j[E]);return()=>{Object.values(I).map(m2)}},[j,I,_]),Qp(()=>{d(_,j)}),B.useImperativeHandle(w,Kj(f(_))),B.createElement(c.Provider,{value:_},n?B.createElement(n,Ioe([...r,...o,...l],j),S):S)}),usePublisher:x=>B.useCallback(X8(St,B.useContext(c)[x]),[x]),useEmitterValue:x=>{const S=B.useContext(c)[x],[j,_]=B.useState(Gj(to,S));return Qp(()=>Zt(S,I=>{I!==j&&_(Kj(I))}),[S,j]),j},useEmitter:(x,w)=>{const j=B.useContext(c)[x];Qp(()=>Zt(j,w),[w,j])}}}const Poe=typeof document<"u"?B.useLayoutEffect:B.useEffect,Eoe=Poe;var oo=(e=>(e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR",e))(oo||{});const Moe={0:"debug",1:"log",2:"warn",3:"error"},Ooe=()=>typeof globalThis>"u"?window:globalThis,Cl=Yt(()=>{const e=Be(3);return{log:Be((n,r,o=1)=>{var s;const l=(s=Ooe().VIRTUOSO_LOG_LEVEL)!=null?s:to(e);o>=l&&console[Moe[o]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",n,r)}),logLevel:e}},[],{singleton:!0});function h2(e,t=!0){const n=B.useRef(null);let r=o=>{};if(typeof ResizeObserver<"u"){const o=B.useMemo(()=>new ResizeObserver(s=>{const l=s[0].target;l.offsetParent!==null&&e(l)}),[e]);r=s=>{s&&t?(o.observe(s),n.current=s):(n.current&&o.unobserve(n.current),n.current=null)}}return{ref:n,callbackRef:r}}function mi(e,t=!0){return h2(e,t).callbackRef}function Doe(e,t,n,r,o,s,l){const c=B.useCallback(d=>{const f=Roe(d.children,t,"offsetHeight",o);let m=d.parentElement;for(;!m.dataset.virtuosoScroller;)m=m.parentElement;const h=m.lastElementChild.dataset.viewportType==="window",g=l?l.scrollTop:h?window.pageYOffset||document.documentElement.scrollTop:m.scrollTop,b=l?l.scrollHeight:h?document.documentElement.scrollHeight:m.scrollHeight,y=l?l.offsetHeight:h?window.innerHeight:m.offsetHeight;r({scrollTop:Math.max(g,0),scrollHeight:b,viewportHeight:y}),s==null||s(Aoe("row-gap",getComputedStyle(d).rowGap,o)),f!==null&&e(f)},[e,t,o,s,l,r]);return h2(c,n)}function Roe(e,t,n,r){const o=e.length;if(o===0)return null;const s=[];for(let l=0;l{const g=h.target,b=g===window||g===document,y=b?window.pageYOffset||document.documentElement.scrollTop:g.scrollTop,x=b?document.documentElement.scrollHeight:g.scrollHeight,w=b?window.innerHeight:g.offsetHeight,S=()=>{e({scrollTop:Math.max(y,0),scrollHeight:x,viewportHeight:w})};h.suppressFlushSync?S():yA.flushSync(S),l.current!==null&&(y===l.current||y<=0||y===x-w)&&(l.current=null,t(!0),c.current&&(clearTimeout(c.current),c.current=null))},[e,t]);B.useEffect(()=>{const h=o||s.current;return r(o||s.current),d({target:h,suppressFlushSync:!0}),h.addEventListener("scroll",d,{passive:!0}),()=>{r(null),h.removeEventListener("scroll",d)}},[s,d,n,r,o]);function f(h){const g=s.current;if(!g||"offsetHeight"in g&&g.offsetHeight===0)return;const b=h.behavior==="smooth";let y,x,w;g===window?(x=Math.max(dl(document.documentElement,"height"),document.documentElement.scrollHeight),y=window.innerHeight,w=document.documentElement.scrollTop):(x=g.scrollHeight,y=dl(g,"height"),w=g.scrollTop);const S=x-y;if(h.top=Math.ceil(Math.max(Math.min(S,h.top),0)),Z8(y,x)||h.top===w){e({scrollTop:w,scrollHeight:x,viewportHeight:y}),b&&t(!0);return}b?(l.current=h.top,c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{c.current=null,l.current=null,t(!0)},1e3)):l.current=null,g.scrollTo(h)}function m(h){s.current.scrollBy(h)}return{scrollerRef:s,scrollByCallback:m,scrollToCallback:f}}const Ir=Yt(()=>{const e=Nt(),t=Nt(),n=Be(0),r=Nt(),o=Be(0),s=Nt(),l=Nt(),c=Be(0),d=Be(0),f=Be(0),m=Be(0),h=Nt(),g=Nt(),b=Be(!1);return at(Ee(e,Ze(({scrollTop:y})=>y)),t),at(Ee(e,Ze(({scrollHeight:y})=>y)),l),at(t,o),{scrollContainerState:e,scrollTop:t,viewportHeight:s,headerHeight:c,fixedHeaderHeight:d,fixedFooterHeight:f,footerHeight:m,scrollHeight:l,smoothScrollTargetReached:r,scrollTo:h,scrollBy:g,statefulScrollTop:o,deviation:n,scrollingInProgress:b}},[],{singleton:!0}),Rd={lvl:0};function e7(e,t,n,r=Rd,o=Rd){return{k:e,v:t,lvl:n,l:r,r:o}}function on(e){return e===Rd}function Sc(){return Rd}function Kb(e,t){if(on(e))return Rd;const{k:n,l:r,r:o}=e;if(t===n){if(on(r))return o;if(on(o))return r;{const[s,l]=t7(r);return gm(Kn(e,{k:s,v:l,l:n7(r)}))}}else return tt&&(c=c.concat(qb(s,t,n))),r>=t&&r<=n&&c.push({k:r,v:o}),r<=n&&(c=c.concat(qb(l,t,n))),c}function Hl(e){return on(e)?[]:[...Hl(e.l),{k:e.k,v:e.v},...Hl(e.r)]}function t7(e){return on(e.r)?[e.k,e.v]:t7(e.r)}function n7(e){return on(e.r)?e.l:gm(Kn(e,{r:n7(e.r)}))}function Kn(e,t){return e7(t.k!==void 0?t.k:e.k,t.v!==void 0?t.v:e.v,t.lvl!==void 0?t.lvl:e.lvl,t.l!==void 0?t.l:e.l,t.r!==void 0?t.r:e.r)}function g1(e){return on(e)||e.lvl>e.r.lvl}function Qj(e){return Xb(o7(e))}function gm(e){const{l:t,r:n,lvl:r}=e;if(n.lvl>=r-1&&t.lvl>=r-1)return e;if(r>n.lvl+1){if(g1(t))return o7(Kn(e,{lvl:r-1}));if(!on(t)&&!on(t.r))return Kn(t.r,{l:Kn(t,{r:t.r.l}),r:Kn(e,{l:t.r.r,lvl:r-1}),lvl:r});throw new Error("Unexpected empty nodes")}else{if(g1(e))return Xb(Kn(e,{lvl:r-1}));if(!on(n)&&!on(n.l)){const o=n.l,s=g1(o)?n.lvl-1:n.lvl;return Kn(o,{l:Kn(e,{r:o.l,lvl:r-1}),r:Xb(Kn(n,{l:o.r,lvl:s})),lvl:o.lvl+1})}else throw new Error("Unexpected empty nodes")}}function Yg(e,t,n){if(on(e))return[];const r=us(e,t)[0];return Toe(qb(e,r,n))}function r7(e,t){const n=e.length;if(n===0)return[];let{index:r,value:o}=t(e[0]);const s=[];for(let l=1;l({index:t,value:n}))}function Xb(e){const{r:t,lvl:n}=e;return!on(t)&&!on(t.r)&&t.lvl===n&&t.r.lvl===n?Kn(t,{l:Kn(e,{r:t.l}),lvl:n+1}):e}function o7(e){const{l:t}=e;return!on(t)&&t.lvl===e.lvl?Kn(t,{r:Kn(e,{l:t.r})}):e}function Nh(e,t,n,r=0){let o=e.length-1;for(;r<=o;){const s=Math.floor((r+o)/2),l=e[s],c=n(l,t);if(c===0)return s;if(c===-1){if(o-r<2)return s-1;o=s-1}else{if(o===r)return s;r=s+1}}throw new Error(`Failed binary finding record in array - ${e.join(",")}, searched for ${t}`)}function s7(e,t,n){return e[Nh(e,t,n)]}function Noe(e,t,n,r){const o=Nh(e,t,r),s=Nh(e,n,r,o);return e.slice(o,s+1)}const g2=Yt(()=>({recalcInProgress:Be(!1)}),[],{singleton:!0});function $oe(e){const{size:t,startIndex:n,endIndex:r}=e;return o=>o.start===n&&(o.end===r||o.end===1/0)&&o.value===t}function Yj(e,t){let n=0,r=0;for(;n=m||o===g)&&(e=Kb(e,m)):(f=g!==o,d=!0),h>l&&l>=m&&g!==o&&(e=eo(e,l+1,g));f&&(e=eo(e,s,o))}return[e,n]}function Foe(){return{offsetTree:[],sizeTree:Sc(),groupOffsetTree:Sc(),lastIndex:0,lastOffset:0,lastSize:0,groupIndices:[]}}function v2({index:e},t){return t===e?0:t0&&(t=Math.max(t,s7(e,r,v2).offset)),r7(Noe(e,t,n,zoe),Boe)}function Qb(e,t,n,r){let o=e,s=0,l=0,c=0,d=0;if(t!==0){d=Nh(o,t-1,v2),c=o[d].offset;const m=us(n,t-1);s=m[0],l=m[1],o.length&&o[d].size===us(n,t)[1]&&(d-=1),o=o.slice(0,d+1)}else o=[];for(const{start:f,value:m}of Yg(n,t,1/0)){const h=f-s,g=h*l+c+h*r;o.push({offset:g,size:m,index:f}),s=f,c=g,l=m}return{offsetTree:o,lastIndex:s,lastOffset:c,lastSize:l}}function Woe(e,[t,n,r,o]){t.length>0&&r("received item sizes",t,oo.DEBUG);const s=e.sizeTree;let l=s,c=0;if(n.length>0&&on(s)&&t.length===2){const g=t[0].size,b=t[1].size;l=n.reduce((y,x)=>eo(eo(y,x,g),x+1,b),l)}else[l,c]=Loe(l,t);if(l===s)return e;const{offsetTree:d,lastIndex:f,lastSize:m,lastOffset:h}=Qb(e.offsetTree,c,l,o);return{sizeTree:l,offsetTree:d,lastIndex:f,lastOffset:h,lastSize:m,groupOffsetTree:n.reduce((g,b)=>eo(g,b,Td(b,d,o)),Sc()),groupIndices:n}}function Td(e,t,n){if(t.length===0)return 0;const{offset:r,index:o,size:s}=s7(t,e,v2),l=e-o,c=s*l+(l-1)*n+r;return c>0?c+n:c}function Voe(e){return typeof e.groupIndex<"u"}function a7(e,t,n){if(Voe(e))return t.groupIndices[e.groupIndex]+1;{const r=e.index==="LAST"?n:e.index;let o=l7(r,t);return o=Math.max(0,o,Math.min(n,o)),o}}function l7(e,t){if(!Zg(t))return e;let n=0;for(;t.groupIndices[n]<=e+n;)n++;return e+n}function Zg(e){return!on(e.groupOffsetTree)}function Uoe(e){return Hl(e).map(({k:t,v:n},r,o)=>{const s=o[r+1],l=s?s.k-1:1/0;return{startIndex:t,endIndex:l,size:n}})}const Goe={offsetHeight:"height",offsetWidth:"width"},Bs=Yt(([{log:e},{recalcInProgress:t}])=>{const n=Nt(),r=Nt(),o=wr(r,0),s=Nt(),l=Nt(),c=Be(0),d=Be([]),f=Be(void 0),m=Be(void 0),h=Be((E,M)=>dl(E,Goe[M])),g=Be(void 0),b=Be(0),y=Foe(),x=wr(Ee(n,Pt(d,e,b),js(Woe,y),vn()),y),w=wr(Ee(d,vn(),js((E,M)=>({prev:E.current,current:M}),{prev:[],current:[]}),Ze(({prev:E})=>E)),[]);at(Ee(d,gt(E=>E.length>0),Pt(x,b),Ze(([E,M,D])=>{const R=E.reduce((N,O,T)=>eo(N,O,Td(O,M.offsetTree,D)||T),Sc());return{...M,groupIndices:E,groupOffsetTree:R}})),x),at(Ee(r,Pt(x),gt(([E,{lastIndex:M}])=>E[{startIndex:E,endIndex:M,size:D}])),n),at(f,m);const S=wr(Ee(f,Ze(E=>E===void 0)),!0);at(Ee(m,gt(E=>E!==void 0&&on(to(x).sizeTree)),Ze(E=>[{startIndex:0,endIndex:0,size:E}])),n);const j=ro(Ee(n,Pt(x),js(({sizes:E},[M,D])=>({changed:D!==E,sizes:D}),{changed:!1,sizes:y}),Ze(E=>E.changed)));Zt(Ee(c,js((E,M)=>({diff:E.prev-M,prev:M}),{diff:0,prev:0}),Ze(E=>E.diff)),E=>{const{groupIndices:M}=to(x);if(E>0)St(t,!0),St(s,E+Yj(E,M));else if(E<0){const D=to(w);D.length>0&&(E-=Yj(-E,D)),St(l,E)}}),Zt(Ee(c,Pt(e)),([E,M])=>{E<0&&M("`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value",{firstItemIndex:c},oo.ERROR)});const _=ro(s);at(Ee(s,Pt(x),Ze(([E,M])=>{const D=M.groupIndices.length>0,R=[],N=M.lastSize;if(D){const O=Ad(M.sizeTree,0);let T=0,U=0;for(;T{let se=Y.ranges;return Y.prevSize!==0&&(se=[...Y.ranges,{startIndex:Y.prevIndex,endIndex:Q+E-1,size:Y.prevSize}]),{ranges:se,prevIndex:Q+E,prevSize:V}},{ranges:R,prevIndex:E,prevSize:0}).ranges}return Hl(M.sizeTree).reduce((O,{k:T,v:U})=>({ranges:[...O.ranges,{startIndex:O.prevIndex,endIndex:T+E-1,size:O.prevSize}],prevIndex:T+E,prevSize:U}),{ranges:[],prevIndex:0,prevSize:N}).ranges})),n);const I=ro(Ee(l,Pt(x,b),Ze(([E,{offsetTree:M},D])=>{const R=-E;return Td(R,M,D)})));return at(Ee(l,Pt(x,b),Ze(([E,M,D])=>{if(M.groupIndices.length>0){if(on(M.sizeTree))return M;let N=Sc();const O=to(w);let T=0,U=0,G=0;for(;T<-E;){G=O[U];const Y=O[U+1]-G-1;U++,T+=Y+1}if(N=Hl(M.sizeTree).reduce((Y,{k:Q,v:V})=>eo(Y,Math.max(0,Q+E),V),N),T!==-E){const Y=Ad(M.sizeTree,G);N=eo(N,0,Y);const Q=us(M.sizeTree,-E+1)[1];N=eo(N,1,Q)}return{...M,sizeTree:N,...Qb(M.offsetTree,0,N,D)}}else{const N=Hl(M.sizeTree).reduce((O,{k:T,v:U})=>eo(O,Math.max(0,T+E),U),Sc());return{...M,sizeTree:N,...Qb(M.offsetTree,0,N,D)}}})),x),{data:g,totalCount:r,sizeRanges:n,groupIndices:d,defaultItemSize:m,fixedItemSize:f,unshiftWith:s,shiftWith:l,shiftWithOffset:I,beforeUnshiftWith:_,firstItemIndex:c,gap:b,sizes:x,listRefresh:j,statefulTotalCount:o,trackItemSizes:S,itemSize:h}},Cn(Cl,g2),{singleton:!0}),Koe=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function i7(e){const t=typeof e=="number"?{index:e}:e;return t.align||(t.align="start"),(!t.behavior||!Koe)&&(t.behavior="auto"),t.offset||(t.offset=0),t}const yf=Yt(([{sizes:e,totalCount:t,listRefresh:n,gap:r},{scrollingInProgress:o,viewportHeight:s,scrollTo:l,smoothScrollTargetReached:c,headerHeight:d,footerHeight:f,fixedHeaderHeight:m,fixedFooterHeight:h},{log:g}])=>{const b=Nt(),y=Be(0);let x=null,w=null,S=null;function j(){x&&(x(),x=null),S&&(S(),S=null),w&&(clearTimeout(w),w=null),St(o,!1)}return at(Ee(b,Pt(e,s,t,y,d,f,g),Pt(r,m,h),Ze(([[_,I,E,M,D,R,N,O],T,U,G])=>{const q=i7(_),{align:Y,behavior:Q,offset:V}=q,se=M-1,ee=a7(q,I,se);let le=Td(ee,I.offsetTree,T)+R;Y==="end"?(le+=U+us(I.sizeTree,ee)[1]-E+G,ee===se&&(le+=N)):Y==="center"?le+=(U+us(I.sizeTree,ee)[1]-E+G)/2:le-=D,V&&(le+=V);const ae=ce=>{j(),ce?(O("retrying to scroll to",{location:_},oo.DEBUG),St(b,_)):O("list did not change, scroll successful",{},oo.DEBUG)};if(j(),Q==="smooth"){let ce=!1;S=Zt(n,J=>{ce=ce||J}),x=ha(c,()=>{ae(ce)})}else x=ha(Ee(n,qoe(150)),ae);return w=setTimeout(()=>{j()},1200),St(o,!0),O("scrolling from index to",{index:ee,top:le,behavior:Q},oo.DEBUG),{top:le,behavior:Q}})),l),{scrollToIndex:b,topListHeight:y}},Cn(Bs,Ir,Cl),{singleton:!0});function qoe(e){return t=>{const n=setTimeout(()=>{t(!1)},e);return r=>{r&&(t(!0),clearTimeout(n))}}}const Nd="up",fd="down",Xoe="none",Qoe={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollTop:0,viewportHeight:0,scrollHeight:0}},Yoe=0,Cf=Yt(([{scrollContainerState:e,scrollTop:t,viewportHeight:n,headerHeight:r,footerHeight:o,scrollBy:s}])=>{const l=Be(!1),c=Be(!0),d=Nt(),f=Nt(),m=Be(4),h=Be(Yoe),g=wr(Ee(Xj(Ee(ht(t),Fc(1),Zs(!0)),Ee(ht(t),Fc(1),Zs(!1),qj(100))),vn()),!1),b=wr(Ee(Xj(Ee(s,Zs(!0)),Ee(s,Zs(!1),qj(200))),vn()),!1);at(Ee(er(ht(t),ht(h)),Ze(([j,_])=>j<=_),vn()),c),at(Ee(c,Qa(50)),f);const y=ro(Ee(er(e,ht(n),ht(r),ht(o),ht(m)),js((j,[{scrollTop:_,scrollHeight:I},E,M,D,R])=>{const N=_+E-I>-R,O={viewportHeight:E,scrollTop:_,scrollHeight:I};if(N){let U,G;return _>j.state.scrollTop?(U="SCROLLED_DOWN",G=j.state.scrollTop-_):(U="SIZE_DECREASED",G=j.state.scrollTop-_||j.scrollTopDelta),{atBottom:!0,state:O,atBottomBecause:U,scrollTopDelta:G}}let T;return O.scrollHeight>j.state.scrollHeight?T="SIZE_INCREASED":Ej&&j.atBottom===_.atBottom))),x=wr(Ee(e,js((j,{scrollTop:_,scrollHeight:I,viewportHeight:E})=>{if(Z8(j.scrollHeight,I))return{scrollTop:_,scrollHeight:I,jump:0,changed:!1};{const M=I-(_+E)<1;return j.scrollTop!==_&&M?{scrollHeight:I,scrollTop:_,jump:j.scrollTop-_,changed:!0}:{scrollHeight:I,scrollTop:_,jump:0,changed:!0}}},{scrollHeight:0,jump:0,scrollTop:0,changed:!1}),gt(j=>j.changed),Ze(j=>j.jump)),0);at(Ee(y,Ze(j=>j.atBottom)),l),at(Ee(l,Qa(50)),d);const w=Be(fd);at(Ee(e,Ze(({scrollTop:j})=>j),vn(),js((j,_)=>to(b)?{direction:j.direction,prevScrollTop:_}:{direction:_j.direction)),w),at(Ee(e,Qa(50),Zs(Xoe)),w);const S=Be(0);return at(Ee(g,gt(j=>!j),Zs(0)),S),at(Ee(t,Qa(100),Pt(g),gt(([j,_])=>!!_),js(([j,_],[I])=>[_,I],[0,0]),Ze(([j,_])=>_-j)),S),{isScrolling:g,isAtTop:c,isAtBottom:l,atBottomState:y,atTopStateChange:f,atBottomStateChange:d,scrollDirection:w,atBottomThreshold:m,atTopThreshold:h,scrollVelocity:S,lastJumpDueToItemResize:x}},Cn(Ir)),wl=Yt(([{log:e}])=>{const t=Be(!1),n=ro(Ee(t,gt(r=>r),vn()));return Zt(t,r=>{r&&to(e)("props updated",{},oo.DEBUG)}),{propsReady:t,didMount:n}},Cn(Cl),{singleton:!0});function b2(e,t){e==0?t():requestAnimationFrame(()=>b2(e-1,t))}function x2(e,t){const n=t-1;return typeof e=="number"?e:e.index==="LAST"?n:e.index}const wf=Yt(([{sizes:e,listRefresh:t,defaultItemSize:n},{scrollTop:r},{scrollToIndex:o},{didMount:s}])=>{const l=Be(!0),c=Be(0),d=Be(!1);return at(Ee(s,Pt(c),gt(([f,m])=>!!m),Zs(!1)),l),Zt(Ee(er(t,s),Pt(l,e,n,d),gt(([[,f],m,{sizeTree:h},g,b])=>f&&(!on(h)||p2(g))&&!m&&!b),Pt(c)),([,f])=>{St(d,!0),b2(3,()=>{ha(r,()=>St(l,!0)),St(o,f)})}),{scrolledToInitialItem:l,initialTopMostItemIndex:c}},Cn(Bs,Ir,yf,wl),{singleton:!0});function Zj(e){return e?e==="smooth"?"smooth":"auto":!1}const Zoe=(e,t)=>typeof e=="function"?Zj(e(t)):t&&Zj(e),Joe=Yt(([{totalCount:e,listRefresh:t},{isAtBottom:n,atBottomState:r},{scrollToIndex:o},{scrolledToInitialItem:s},{propsReady:l,didMount:c},{log:d},{scrollingInProgress:f}])=>{const m=Be(!1),h=Nt();let g=null;function b(x){St(o,{index:"LAST",align:"end",behavior:x})}Zt(Ee(er(Ee(ht(e),Fc(1)),c),Pt(ht(m),n,s,f),Ze(([[x,w],S,j,_,I])=>{let E=w&&_,M="auto";return E&&(M=Zoe(S,j||I),E=E&&!!M),{totalCount:x,shouldFollow:E,followOutputBehavior:M}}),gt(({shouldFollow:x})=>x)),({totalCount:x,followOutputBehavior:w})=>{g&&(g(),g=null),g=ha(t,()=>{to(d)("following output to ",{totalCount:x},oo.DEBUG),b(w),g=null})});function y(x){const w=ha(r,S=>{x&&!S.atBottom&&S.notAtBottomBecause==="SIZE_INCREASED"&&!g&&(to(d)("scrolling to bottom due to increased size",{},oo.DEBUG),b("auto"))});setTimeout(w,100)}return Zt(Ee(er(ht(m),e,l),gt(([x,,w])=>x&&w),js(({value:x},[,w])=>({refreshed:x===w,value:w}),{refreshed:!1,value:0}),gt(({refreshed:x})=>x),Pt(m,e)),([,x])=>{y(x!==!1)}),Zt(h,()=>{y(to(m)!==!1)}),Zt(er(ht(m),r),([x,w])=>{x&&!w.atBottom&&w.notAtBottomBecause==="VIEWPORT_HEIGHT_DECREASING"&&b("auto")}),{followOutput:m,autoscrollToBottom:h}},Cn(Bs,Cf,yf,wf,wl,Cl,Ir));function ese(e){return e.reduce((t,n)=>(t.groupIndices.push(t.totalCount),t.totalCount+=n+1,t),{totalCount:0,groupIndices:[]})}const c7=Yt(([{totalCount:e,groupIndices:t,sizes:n},{scrollTop:r,headerHeight:o}])=>{const s=Nt(),l=Nt(),c=ro(Ee(s,Ze(ese)));return at(Ee(c,Ze(d=>d.totalCount)),e),at(Ee(c,Ze(d=>d.groupIndices)),t),at(Ee(er(r,n,o),gt(([d,f])=>Zg(f)),Ze(([d,f,m])=>us(f.groupOffsetTree,Math.max(d-m,0),"v")[0]),vn(),Ze(d=>[d])),l),{groupCounts:s,topItemsIndexes:l}},Cn(Bs,Ir));function $d(e,t){return!!(e&&e[0]===t[0]&&e[1]===t[1])}function u7(e,t){return!!(e&&e.startIndex===t.startIndex&&e.endIndex===t.endIndex)}const $h="top",Lh="bottom",Jj="none";function e_(e,t,n){return typeof e=="number"?n===Nd&&t===$h||n===fd&&t===Lh?e:0:n===Nd?t===$h?e.main:e.reverse:t===Lh?e.main:e.reverse}function t_(e,t){return typeof e=="number"?e:e[t]||0}const y2=Yt(([{scrollTop:e,viewportHeight:t,deviation:n,headerHeight:r,fixedHeaderHeight:o}])=>{const s=Nt(),l=Be(0),c=Be(0),d=Be(0),f=wr(Ee(er(ht(e),ht(t),ht(r),ht(s,$d),ht(d),ht(l),ht(o),ht(n),ht(c)),Ze(([m,h,g,[b,y],x,w,S,j,_])=>{const I=m-j,E=w+S,M=Math.max(g-I,0);let D=Jj;const R=t_(_,$h),N=t_(_,Lh);return b-=j,b+=g+S,y+=g+S,y-=j,b>m+E-R&&(D=Nd),ym!=null),vn($d)),[0,0]);return{listBoundary:s,overscan:d,topListHeight:l,increaseViewportBy:c,visibleRange:f}},Cn(Ir),{singleton:!0});function tse(e,t,n){if(Zg(t)){const r=l7(e,t);return[{index:us(t.groupOffsetTree,r)[0],size:0,offset:0},{index:r,size:0,offset:0,data:n&&n[0]}]}return[{index:e,size:0,offset:0,data:n&&n[0]}]}const v1={items:[],topItems:[],offsetTop:0,offsetBottom:0,top:0,bottom:0,topListHeight:0,totalCount:0,firstItemIndex:0};function n_(e,t,n){if(e.length===0)return[];if(!Zg(t))return e.map(f=>({...f,index:f.index+n,originalIndex:f.index}));const r=e[0].index,o=e[e.length-1].index,s=[],l=Yg(t.groupOffsetTree,r,o);let c,d=0;for(const f of e){(!c||c.end0){f=e[0].offset;const x=e[e.length-1];m=x.offset+x.size}const h=n-d,g=c+h*l+(h-1)*r,b=f,y=g-m;return{items:n_(e,o,s),topItems:n_(t,o,s),topListHeight:t.reduce((x,w)=>w.size+x,0),offsetTop:f,offsetBottom:y,top:b,bottom:m,totalCount:n,firstItemIndex:s}}function d7(e,t,n,r,o,s){let l=0;if(n.groupIndices.length>0)for(const m of n.groupIndices){if(m-l>=e)break;l++}const c=e+l,d=x2(t,c),f=Array.from({length:c}).map((m,h)=>({index:h+d,size:0,offset:0,data:s[h+d]}));return vm(f,[],c,o,n,r)}const hi=Yt(([{sizes:e,totalCount:t,data:n,firstItemIndex:r,gap:o},s,{visibleRange:l,listBoundary:c,topListHeight:d},{scrolledToInitialItem:f,initialTopMostItemIndex:m},{topListHeight:h},g,{didMount:b},{recalcInProgress:y}])=>{const x=Be([]),w=Be(0),S=Nt();at(s.topItemsIndexes,x);const j=wr(Ee(er(b,y,ht(l,$d),ht(t),ht(e),ht(m),f,ht(x),ht(r),ht(o),n),gt(([M,D,,R,,,,,,,N])=>{const O=N&&N.length!==R;return M&&!D&&!O}),Ze(([,,[M,D],R,N,O,T,U,G,q,Y])=>{const Q=N,{sizeTree:V,offsetTree:se}=Q,ee=to(w);if(R===0)return{...v1,totalCount:R};if(M===0&&D===0)return ee===0?{...v1,totalCount:R}:d7(ee,O,N,G,q,Y||[]);if(on(V))return ee>0?null:vm(tse(x2(O,R),Q,Y),[],R,q,Q,G);const le=[];if(U.length>0){const A=U[0],L=U[U.length-1];let K=0;for(const ne of Yg(V,A,L)){const z=ne.value,oe=Math.max(ne.start,A),X=Math.min(ne.end,L);for(let Z=oe;Z<=X;Z++)le.push({index:Z,size:z,offset:K,data:Y&&Y[Z]}),K+=z}}if(!T)return vm([],le,R,q,Q,G);const ae=U.length>0?U[U.length-1]+1:0,ce=Hoe(se,M,D,ae);if(ce.length===0)return null;const J=R-1,re=Qg([],A=>{for(const L of ce){const K=L.value;let ne=K.offset,z=L.start;const oe=K.size;if(K.offset=D);Z++)A.push({index:Z,size:oe,offset:ne,data:Y&&Y[Z]}),ne+=oe+q}});return vm(re,le,R,q,Q,G)}),gt(M=>M!==null),vn()),v1);at(Ee(n,gt(p2),Ze(M=>M==null?void 0:M.length)),t),at(Ee(j,Ze(M=>M.topListHeight)),h),at(h,d),at(Ee(j,Ze(M=>[M.top,M.bottom])),c),at(Ee(j,Ze(M=>M.items)),S);const _=ro(Ee(j,gt(({items:M})=>M.length>0),Pt(t,n),gt(([{items:M},D])=>M[M.length-1].originalIndex===D-1),Ze(([,M,D])=>[M-1,D]),vn($d),Ze(([M])=>M))),I=ro(Ee(j,Qa(200),gt(({items:M,topItems:D})=>M.length>0&&M[0].originalIndex===D.length),Ze(({items:M})=>M[0].index),vn())),E=ro(Ee(j,gt(({items:M})=>M.length>0),Ze(({items:M})=>{let D=0,R=M.length-1;for(;M[D].type==="group"&&DD;)R--;return{startIndex:M[D].index,endIndex:M[R].index}}),vn(u7)));return{listState:j,topItemsIndexes:x,endReached:_,startReached:I,rangeChanged:E,itemsRendered:S,initialItemCount:w,...g}},Cn(Bs,c7,y2,wf,yf,Cf,wl,g2),{singleton:!0}),nse=Yt(([{sizes:e,firstItemIndex:t,data:n,gap:r},{initialTopMostItemIndex:o},{initialItemCount:s,listState:l},{didMount:c}])=>(at(Ee(c,Pt(s),gt(([,d])=>d!==0),Pt(o,e,t,r,n),Ze(([[,d],f,m,h,g,b=[]])=>d7(d,f,m,h,g,b))),l),{}),Cn(Bs,wf,hi,wl),{singleton:!0}),f7=Yt(([{scrollVelocity:e}])=>{const t=Be(!1),n=Nt(),r=Be(!1);return at(Ee(e,Pt(r,t,n),gt(([o,s])=>!!s),Ze(([o,s,l,c])=>{const{exit:d,enter:f}=s;if(l){if(d(o,c))return!1}else if(f(o,c))return!0;return l}),vn()),t),Zt(Ee(er(t,e,n),Pt(r)),([[o,s,l],c])=>o&&c&&c.change&&c.change(s,l)),{isSeeking:t,scrollSeekConfiguration:r,scrollVelocity:e,scrollSeekRangeChanged:n}},Cn(Cf),{singleton:!0}),rse=Yt(([{topItemsIndexes:e}])=>{const t=Be(0);return at(Ee(t,gt(n=>n>0),Ze(n=>Array.from({length:n}).map((r,o)=>o))),e),{topItemCount:t}},Cn(hi)),p7=Yt(([{footerHeight:e,headerHeight:t,fixedHeaderHeight:n,fixedFooterHeight:r},{listState:o}])=>{const s=Nt(),l=wr(Ee(er(e,r,t,n,o),Ze(([c,d,f,m,h])=>c+d+f+m+h.offsetBottom+h.bottom)),0);return at(ht(l),s),{totalListHeight:l,totalListHeightChanged:s}},Cn(Ir,hi),{singleton:!0});function m7(e){let t=!1,n;return()=>(t||(t=!0,n=e()),n)}const ose=m7(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),sse=Yt(([{scrollBy:e,scrollTop:t,deviation:n,scrollingInProgress:r},{isScrolling:o,isAtBottom:s,scrollDirection:l,lastJumpDueToItemResize:c},{listState:d},{beforeUnshiftWith:f,shiftWithOffset:m,sizes:h,gap:g},{log:b},{recalcInProgress:y}])=>{const x=ro(Ee(d,Pt(c),js(([,S,j,_],[{items:I,totalCount:E,bottom:M,offsetBottom:D},R])=>{const N=M+D;let O=0;return j===E&&S.length>0&&I.length>0&&(I[0].originalIndex===0&&S[0].originalIndex===0||(O=N-_,O!==0&&(O+=R))),[O,I,E,N]},[0,[],0,0]),gt(([S])=>S!==0),Pt(t,l,r,s,b,y),gt(([,S,j,_,,,I])=>!I&&!_&&S!==0&&j===Nd),Ze(([[S],,,,,j])=>(j("Upward scrolling compensation",{amount:S},oo.DEBUG),S))));function w(S){S>0?(St(e,{top:-S,behavior:"auto"}),St(n,0)):(St(n,0),St(e,{top:-S,behavior:"auto"}))}return Zt(Ee(x,Pt(n,o)),([S,j,_])=>{_&&ose()?St(n,j-S):w(-S)}),Zt(Ee(er(wr(o,!1),n,y),gt(([S,j,_])=>!S&&!_&&j!==0),Ze(([S,j])=>j),Qa(1)),w),at(Ee(m,Ze(S=>({top:-S}))),e),Zt(Ee(f,Pt(h,g),Ze(([S,{lastSize:j,groupIndices:_,sizeTree:I},E])=>{function M(D){return D*(j+E)}if(_.length===0)return M(S);{let D=0;const R=Ad(I,0);let N=0,O=0;for(;NS&&(D-=R,T=S-N+1),N+=T,D+=M(T),O++}return D}})),S=>{St(n,S),requestAnimationFrame(()=>{St(e,{top:S}),requestAnimationFrame(()=>{St(n,0),St(y,!1)})})}),{deviation:n}},Cn(Ir,Cf,hi,Bs,Cl,g2)),ase=Yt(([{didMount:e},{scrollTo:t},{listState:n}])=>{const r=Be(0);return Zt(Ee(e,Pt(r),gt(([,o])=>o!==0),Ze(([,o])=>({top:o}))),o=>{ha(Ee(n,Fc(1),gt(s=>s.items.length>1)),()=>{requestAnimationFrame(()=>{St(t,o)})})}),{initialScrollTop:r}},Cn(wl,Ir,hi),{singleton:!0}),lse=Yt(([{viewportHeight:e},{totalListHeight:t}])=>{const n=Be(!1),r=wr(Ee(er(n,e,t),gt(([o])=>o),Ze(([,o,s])=>Math.max(0,o-s)),Qa(0),vn()),0);return{alignToBottom:n,paddingTopAddition:r}},Cn(Ir,p7),{singleton:!0}),C2=Yt(([{scrollTo:e,scrollContainerState:t}])=>{const n=Nt(),r=Nt(),o=Nt(),s=Be(!1),l=Be(void 0);return at(Ee(er(n,r),Ze(([{viewportHeight:c,scrollTop:d,scrollHeight:f},{offsetTop:m}])=>({scrollTop:Math.max(0,d-m),scrollHeight:f,viewportHeight:c}))),t),at(Ee(e,Pt(r),Ze(([c,{offsetTop:d}])=>({...c,top:c.top+d}))),o),{useWindowScroll:s,customScrollParent:l,windowScrollContainerState:n,windowViewportRect:r,windowScrollTo:o}},Cn(Ir)),ise=({itemTop:e,itemBottom:t,viewportTop:n,viewportBottom:r,locationParams:{behavior:o,align:s,...l}})=>er?{...l,behavior:o,align:s??"end"}:null,cse=Yt(([{sizes:e,totalCount:t,gap:n},{scrollTop:r,viewportHeight:o,headerHeight:s,fixedHeaderHeight:l,fixedFooterHeight:c,scrollingInProgress:d},{scrollToIndex:f}])=>{const m=Nt();return at(Ee(m,Pt(e,o,t,s,l,c,r),Pt(n),Ze(([[h,g,b,y,x,w,S,j],_])=>{const{done:I,behavior:E,align:M,calculateViewLocation:D=ise,...R}=h,N=a7(h,g,y-1),O=Td(N,g.offsetTree,_)+x+w,T=O+us(g.sizeTree,N)[1],U=j+w,G=j+b-S,q=D({itemTop:O,itemBottom:T,viewportTop:U,viewportBottom:G,locationParams:{behavior:E,align:M,...R}});return q?I&&ha(Ee(d,gt(Y=>Y===!1),Fc(to(d)?1:2)),I):I&&I(),q}),gt(h=>h!==null)),f),{scrollIntoView:m}},Cn(Bs,Ir,yf,hi,Cl),{singleton:!0}),use=Yt(([{sizes:e,sizeRanges:t},{scrollTop:n},{initialTopMostItemIndex:r},{didMount:o},{useWindowScroll:s,windowScrollContainerState:l,windowViewportRect:c}])=>{const d=Nt(),f=Be(void 0),m=Be(null),h=Be(null);return at(l,m),at(c,h),Zt(Ee(d,Pt(e,n,s,m,h)),([g,b,y,x,w,S])=>{const j=Uoe(b.sizeTree);x&&w!==null&&S!==null&&(y=w.scrollTop-S.offsetTop),g({ranges:j,scrollTop:y})}),at(Ee(f,gt(p2),Ze(dse)),r),at(Ee(o,Pt(f),gt(([,g])=>g!==void 0),vn(),Ze(([,g])=>g.ranges)),t),{getState:d,restoreStateFrom:f}},Cn(Bs,Ir,wf,wl,C2));function dse(e){return{offset:e.scrollTop,index:0,align:"start"}}const fse=Yt(([e,t,n,r,o,s,l,c,d,f])=>({...e,...t,...n,...r,...o,...s,...l,...c,...d,...f}),Cn(y2,nse,wl,f7,p7,ase,lse,C2,cse,Cl)),pse=Yt(([{totalCount:e,sizeRanges:t,fixedItemSize:n,defaultItemSize:r,trackItemSizes:o,itemSize:s,data:l,firstItemIndex:c,groupIndices:d,statefulTotalCount:f,gap:m,sizes:h},{initialTopMostItemIndex:g,scrolledToInitialItem:b},y,x,w,{listState:S,topItemsIndexes:j,..._},{scrollToIndex:I},E,{topItemCount:M},{groupCounts:D},R])=>(at(_.rangeChanged,R.scrollSeekRangeChanged),at(Ee(R.windowViewportRect,Ze(N=>N.visibleHeight)),y.viewportHeight),{totalCount:e,data:l,firstItemIndex:c,sizeRanges:t,initialTopMostItemIndex:g,scrolledToInitialItem:b,topItemsIndexes:j,topItemCount:M,groupCounts:D,fixedItemHeight:n,defaultItemHeight:r,gap:m,...w,statefulTotalCount:f,listState:S,scrollToIndex:I,trackItemSizes:o,itemSize:s,groupIndices:d,..._,...R,...y,sizes:h,...x}),Cn(Bs,wf,Ir,use,Joe,hi,yf,sse,rse,c7,fse)),b1="-webkit-sticky",r_="sticky",h7=m7(()=>{if(typeof document>"u")return r_;const e=document.createElement("div");return e.style.position=b1,e.style.position===b1?b1:r_});function g7(e,t){const n=B.useRef(null),r=B.useCallback(c=>{if(c===null||!c.offsetParent)return;const d=c.getBoundingClientRect(),f=d.width;let m,h;if(t){const g=t.getBoundingClientRect(),b=d.top-g.top;m=g.height-Math.max(0,b),h=b+t.scrollTop}else m=window.innerHeight-Math.max(0,d.top),h=d.top+window.pageYOffset;n.current={offsetTop:h,visibleHeight:m,visibleWidth:f},e(n.current)},[e,t]),{callbackRef:o,ref:s}=h2(r),l=B.useCallback(()=>{r(s.current)},[r,s]);return B.useEffect(()=>{if(t){t.addEventListener("scroll",l);const c=new ResizeObserver(l);return c.observe(t),()=>{t.removeEventListener("scroll",l),c.unobserve(t)}}else return window.addEventListener("scroll",l),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l),window.removeEventListener("resize",l)}},[l,t]),o}const v7=B.createContext(void 0),b7=B.createContext(void 0);function x7(e){return e}const mse=Yt(()=>{const e=Be(d=>`Item ${d}`),t=Be(null),n=Be(d=>`Group ${d}`),r=Be({}),o=Be(x7),s=Be("div"),l=Be(iu),c=(d,f=null)=>wr(Ee(r,Ze(m=>m[d]),vn()),f);return{context:t,itemContent:e,groupContent:n,components:r,computeItemKey:o,headerFooterTag:s,scrollerRef:l,FooterComponent:c("Footer"),HeaderComponent:c("Header"),TopItemListComponent:c("TopItemList"),ListComponent:c("List","div"),ItemComponent:c("Item","div"),GroupComponent:c("Group","div"),ScrollerComponent:c("Scroller","div"),EmptyPlaceholder:c("EmptyPlaceholder"),ScrollSeekPlaceholder:c("ScrollSeekPlaceholder")}}),hse=Yt(([e,t])=>({...e,...t}),Cn(pse,mse)),gse=({height:e})=>B.createElement("div",{style:{height:e}}),vse={position:h7(),zIndex:1,overflowAnchor:"none"},bse={overflowAnchor:"none"},o_=B.memo(function({showTopList:t=!1}){const n=Tt("listState"),r=Co("sizeRanges"),o=Tt("useWindowScroll"),s=Tt("customScrollParent"),l=Co("windowScrollContainerState"),c=Co("scrollContainerState"),d=s||o?l:c,f=Tt("itemContent"),m=Tt("context"),h=Tt("groupContent"),g=Tt("trackItemSizes"),b=Tt("itemSize"),y=Tt("log"),x=Co("gap"),{callbackRef:w}=Doe(r,b,g,t?iu:d,y,x,s),[S,j]=B.useState(0);w2("deviation",q=>{S!==q&&j(q)});const _=Tt("EmptyPlaceholder"),I=Tt("ScrollSeekPlaceholder")||gse,E=Tt("ListComponent"),M=Tt("ItemComponent"),D=Tt("GroupComponent"),R=Tt("computeItemKey"),N=Tt("isSeeking"),O=Tt("groupIndices").length>0,T=Tt("paddingTopAddition"),U=Tt("scrolledToInitialItem"),G=t?{}:{boxSizing:"border-box",paddingTop:n.offsetTop+T,paddingBottom:n.offsetBottom,marginTop:S,...U?{}:{visibility:"hidden"}};return!t&&n.totalCount===0&&_?B.createElement(_,Nr(_,m)):B.createElement(E,{...Nr(E,m),ref:w,style:G,"data-test-id":t?"virtuoso-top-item-list":"virtuoso-item-list"},(t?n.topItems:n.items).map(q=>{const Y=q.originalIndex,Q=R(Y+n.firstItemIndex,q.data,m);return N?B.createElement(I,{...Nr(I,m),key:Q,index:q.index,height:q.size,type:q.type||"item",...q.type==="group"?{}:{groupIndex:q.groupIndex}}):q.type==="group"?B.createElement(D,{...Nr(D,m),key:Q,"data-index":Y,"data-known-size":q.size,"data-item-index":q.index,style:vse},h(q.index,m)):B.createElement(M,{...Nr(M,m),...Cse(M,q.data),key:Q,"data-index":Y,"data-known-size":q.size,"data-item-index":q.index,"data-item-group-index":q.groupIndex,style:bse},O?f(q.index,q.groupIndex,q.data,m):f(q.index,q.data,m))}))}),xse={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},Jg={width:"100%",height:"100%",position:"absolute",top:0},yse={width:"100%",position:h7(),top:0,zIndex:1};function Nr(e,t){if(typeof e!="string")return{context:t}}function Cse(e,t){return{item:typeof e=="string"?void 0:t}}const wse=B.memo(function(){const t=Tt("HeaderComponent"),n=Co("headerHeight"),r=Tt("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=Tt("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),Sse=B.memo(function(){const t=Tt("FooterComponent"),n=Co("footerHeight"),r=Tt("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=Tt("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null});function y7({usePublisher:e,useEmitter:t,useEmitterValue:n}){return B.memo(function({style:s,children:l,...c}){const d=e("scrollContainerState"),f=n("ScrollerComponent"),m=e("smoothScrollTargetReached"),h=n("scrollerRef"),g=n("context"),{scrollerRef:b,scrollByCallback:y,scrollToCallback:x}=J8(d,m,f,h);return t("scrollTo",x),t("scrollBy",y),B.createElement(f,{ref:b,style:{...xse,...s},"data-test-id":"virtuoso-scroller","data-virtuoso-scroller":!0,tabIndex:0,...c,...Nr(f,g)},l)})}function C7({usePublisher:e,useEmitter:t,useEmitterValue:n}){return B.memo(function({style:s,children:l,...c}){const d=e("windowScrollContainerState"),f=n("ScrollerComponent"),m=e("smoothScrollTargetReached"),h=n("totalListHeight"),g=n("deviation"),b=n("customScrollParent"),y=n("context"),{scrollerRef:x,scrollByCallback:w,scrollToCallback:S}=J8(d,m,f,iu,b);return Eoe(()=>(x.current=b||window,()=>{x.current=null}),[x,b]),t("windowScrollTo",S),t("scrollBy",w),B.createElement(f,{style:{position:"relative",...s,...h!==0?{height:h+g}:{}},"data-virtuoso-scroller":!0,...c,...Nr(f,y)},l)})}const kse=({children:e})=>{const t=B.useContext(v7),n=Co("viewportHeight"),r=Co("fixedItemHeight"),o=mi(q8(n,s=>dl(s,"height")));return B.useEffect(()=>{t&&(n(t.viewportHeight),r(t.itemHeight))},[t,n,r]),B.createElement("div",{style:Jg,ref:o,"data-viewport-type":"element"},e)},jse=({children:e})=>{const t=B.useContext(v7),n=Co("windowViewportRect"),r=Co("fixedItemHeight"),o=Tt("customScrollParent"),s=g7(n,o);return B.useEffect(()=>{t&&(r(t.itemHeight),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:100}))},[t,n,r]),B.createElement("div",{ref:s,style:Jg,"data-viewport-type":"window"},e)},_se=({children:e})=>{const t=Tt("TopItemListComponent"),n=Tt("headerHeight"),r={...yse,marginTop:`${n}px`},o=Tt("context");return B.createElement(t||"div",{style:r,context:o},e)},Ise=B.memo(function(t){const n=Tt("useWindowScroll"),r=Tt("topItemsIndexes").length>0,o=Tt("customScrollParent"),s=o||n?Mse:Ese,l=o||n?jse:kse;return B.createElement(s,{...t},r&&B.createElement(_se,null,B.createElement(o_,{showTopList:!0})),B.createElement(l,null,B.createElement(wse,null),B.createElement(o_,null),B.createElement(Sse,null)))}),{Component:Pse,usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}=Y8(hse,{required:{},optional:{restoreStateFrom:"restoreStateFrom",context:"context",followOutput:"followOutput",itemContent:"itemContent",groupContent:"groupContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",totalCount:"totalCount",groupCounts:"groupCounts",topItemCount:"topItemCount",firstItemIndex:"firstItemIndex",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedItemHeight:"fixedItemHeight",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy",autoscrollToBottom:"autoscrollToBottom",getState:"getState"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},Ise),Ese=y7({usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}),Mse=C7({usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}),Ose=Pse,s_={items:[],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},Dse={items:[{index:0}],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},{round:a_,ceil:l_,floor:Fh,min:x1,max:pd}=Math;function Rse(e){return{...Dse,items:e}}function i_(e,t,n){return Array.from({length:t-e+1}).map((r,o)=>{const s=n===null?null:n[o+e];return{index:o+e,data:s}})}function Ase(e,t){return e&&e.column===t.column&&e.row===t.row}function Yp(e,t){return e&&e.width===t.width&&e.height===t.height}const Tse=Yt(([{overscan:e,visibleRange:t,listBoundary:n},{scrollTop:r,viewportHeight:o,scrollBy:s,scrollTo:l,smoothScrollTargetReached:c,scrollContainerState:d,footerHeight:f,headerHeight:m},h,g,{propsReady:b,didMount:y},{windowViewportRect:x,useWindowScroll:w,customScrollParent:S,windowScrollContainerState:j,windowScrollTo:_},I])=>{const E=Be(0),M=Be(0),D=Be(s_),R=Be({height:0,width:0}),N=Be({height:0,width:0}),O=Nt(),T=Nt(),U=Be(0),G=Be(null),q=Be({row:0,column:0}),Y=Nt(),Q=Nt(),V=Be(!1),se=Be(0),ee=Be(!0),le=Be(!1);Zt(Ee(y,Pt(se),gt(([L,K])=>!!K)),()=>{St(ee,!1),St(M,0)}),Zt(Ee(er(y,ee,N,R,se,le),gt(([L,K,ne,z,,oe])=>L&&!K&&ne.height!==0&&z.height!==0&&!oe)),([,,,,L])=>{St(le,!0),b2(1,()=>{St(O,L)}),ha(Ee(r),()=>{St(n,[0,0]),St(ee,!0)})}),at(Ee(Q,gt(L=>L!=null&&L.scrollTop>0),Zs(0)),M),Zt(Ee(y,Pt(Q),gt(([,L])=>L!=null)),([,L])=>{L&&(St(R,L.viewport),St(N,L==null?void 0:L.item),St(q,L.gap),L.scrollTop>0&&(St(V,!0),ha(Ee(r,Fc(1)),K=>{St(V,!1)}),St(l,{top:L.scrollTop})))}),at(Ee(R,Ze(({height:L})=>L)),o),at(Ee(er(ht(R,Yp),ht(N,Yp),ht(q,(L,K)=>L&&L.column===K.column&&L.row===K.row),ht(r)),Ze(([L,K,ne,z])=>({viewport:L,item:K,gap:ne,scrollTop:z}))),Y),at(Ee(er(ht(E),t,ht(q,Ase),ht(N,Yp),ht(R,Yp),ht(G),ht(M),ht(V),ht(ee),ht(se)),gt(([,,,,,,,L])=>!L),Ze(([L,[K,ne],z,oe,X,Z,me,,ve,de])=>{const{row:ke,column:we}=z,{height:Re,width:Qe}=oe,{width:$e}=X;if(me===0&&(L===0||$e===0))return s_;if(Qe===0){const st=x2(de,L),mt=st===0?Math.max(me-1,0):st;return Rse(i_(st,mt,Z))}const vt=w7($e,Qe,we);let it,ot;ve?K===0&&ne===0&&me>0?(it=0,ot=me-1):(it=vt*Fh((K+ke)/(Re+ke)),ot=vt*l_((ne+ke)/(Re+ke))-1,ot=x1(L-1,pd(ot,vt-1)),it=x1(ot,pd(0,it))):(it=0,ot=-1);const Ce=i_(it,ot,Z),{top:Me,bottom:qe}=c_(X,z,oe,Ce),dt=l_(L/vt),Ue=dt*Re+(dt-1)*ke-qe;return{items:Ce,offsetTop:Me,offsetBottom:Ue,top:Me,bottom:qe,itemHeight:Re,itemWidth:Qe}})),D),at(Ee(G,gt(L=>L!==null),Ze(L=>L.length)),E),at(Ee(er(R,N,D,q),gt(([L,K,{items:ne}])=>ne.length>0&&K.height!==0&&L.height!==0),Ze(([L,K,{items:ne},z])=>{const{top:oe,bottom:X}=c_(L,z,K,ne);return[oe,X]}),vn($d)),n);const ae=Be(!1);at(Ee(r,Pt(ae),Ze(([L,K])=>K||L!==0)),ae);const ce=ro(Ee(ht(D),gt(({items:L})=>L.length>0),Pt(E,ae),gt(([{items:L},K,ne])=>ne&&L[L.length-1].index===K-1),Ze(([,L])=>L-1),vn())),J=ro(Ee(ht(D),gt(({items:L})=>L.length>0&&L[0].index===0),Zs(0),vn())),re=ro(Ee(ht(D),Pt(V),gt(([{items:L},K])=>L.length>0&&!K),Ze(([{items:L}])=>({startIndex:L[0].index,endIndex:L[L.length-1].index})),vn(u7),Qa(0)));at(re,g.scrollSeekRangeChanged),at(Ee(O,Pt(R,N,E,q),Ze(([L,K,ne,z,oe])=>{const X=i7(L),{align:Z,behavior:me,offset:ve}=X;let de=X.index;de==="LAST"&&(de=z-1),de=pd(0,de,x1(z-1,de));let ke=Yb(K,oe,ne,de);return Z==="end"?ke=a_(ke-K.height+ne.height):Z==="center"&&(ke=a_(ke-K.height/2+ne.height/2)),ve&&(ke+=ve),{top:ke,behavior:me}})),l);const A=wr(Ee(D,Ze(L=>L.offsetBottom+L.bottom)),0);return at(Ee(x,Ze(L=>({width:L.visibleWidth,height:L.visibleHeight}))),R),{data:G,totalCount:E,viewportDimensions:R,itemDimensions:N,scrollTop:r,scrollHeight:T,overscan:e,scrollBy:s,scrollTo:l,scrollToIndex:O,smoothScrollTargetReached:c,windowViewportRect:x,windowScrollTo:_,useWindowScroll:w,customScrollParent:S,windowScrollContainerState:j,deviation:U,scrollContainerState:d,footerHeight:f,headerHeight:m,initialItemCount:M,gap:q,restoreStateFrom:Q,...g,initialTopMostItemIndex:se,gridState:D,totalListHeight:A,...h,startReached:J,endReached:ce,rangeChanged:re,stateChanged:Y,propsReady:b,stateRestoreInProgress:V,...I}},Cn(y2,Ir,Cf,f7,wl,C2,Cl));function c_(e,t,n,r){const{height:o}=n;if(o===void 0||r.length===0)return{top:0,bottom:0};const s=Yb(e,t,n,r[0].index),l=Yb(e,t,n,r[r.length-1].index)+o;return{top:s,bottom:l}}function Yb(e,t,n,r){const o=w7(e.width,n.width,t.column),s=Fh(r/o),l=s*n.height+pd(0,s-1)*t.row;return l>0?l+t.row:l}function w7(e,t,n){return pd(1,Fh((e+n)/(Fh(t)+n)))}const Nse=Yt(()=>{const e=Be(f=>`Item ${f}`),t=Be({}),n=Be(null),r=Be("virtuoso-grid-item"),o=Be("virtuoso-grid-list"),s=Be(x7),l=Be("div"),c=Be(iu),d=(f,m=null)=>wr(Ee(t,Ze(h=>h[f]),vn()),m);return{context:n,itemContent:e,components:t,computeItemKey:s,itemClassName:r,listClassName:o,headerFooterTag:l,scrollerRef:c,FooterComponent:d("Footer"),HeaderComponent:d("Header"),ListComponent:d("List","div"),ItemComponent:d("Item","div"),ScrollerComponent:d("Scroller","div"),ScrollSeekPlaceholder:d("ScrollSeekPlaceholder","div")}}),$se=Yt(([e,t])=>({...e,...t}),Cn(Tse,Nse)),Lse=B.memo(function(){const t=jn("gridState"),n=jn("listClassName"),r=jn("itemClassName"),o=jn("itemContent"),s=jn("computeItemKey"),l=jn("isSeeking"),c=ss("scrollHeight"),d=jn("ItemComponent"),f=jn("ListComponent"),m=jn("ScrollSeekPlaceholder"),h=jn("context"),g=ss("itemDimensions"),b=ss("gap"),y=jn("log"),x=jn("stateRestoreInProgress"),w=mi(S=>{const j=S.parentElement.parentElement.scrollHeight;c(j);const _=S.firstChild;if(_){const{width:I,height:E}=_.getBoundingClientRect();g({width:I,height:E})}b({row:u_("row-gap",getComputedStyle(S).rowGap,y),column:u_("column-gap",getComputedStyle(S).columnGap,y)})});return x?null:B.createElement(f,{ref:w,className:n,...Nr(f,h),style:{paddingTop:t.offsetTop,paddingBottom:t.offsetBottom},"data-test-id":"virtuoso-item-list"},t.items.map(S=>{const j=s(S.index,S.data,h);return l?B.createElement(m,{key:j,...Nr(m,h),index:S.index,height:t.itemHeight,width:t.itemWidth}):B.createElement(d,{...Nr(d,h),className:r,"data-index":S.index,key:j},o(S.index,S.data,h))}))}),Fse=B.memo(function(){const t=jn("HeaderComponent"),n=ss("headerHeight"),r=jn("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=jn("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),zse=B.memo(function(){const t=jn("FooterComponent"),n=ss("footerHeight"),r=jn("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=jn("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),Bse=({children:e})=>{const t=B.useContext(b7),n=ss("itemDimensions"),r=ss("viewportDimensions"),o=mi(s=>{r(s.getBoundingClientRect())});return B.useEffect(()=>{t&&(r({height:t.viewportHeight,width:t.viewportWidth}),n({height:t.itemHeight,width:t.itemWidth}))},[t,r,n]),B.createElement("div",{style:Jg,ref:o},e)},Hse=({children:e})=>{const t=B.useContext(b7),n=ss("windowViewportRect"),r=ss("itemDimensions"),o=jn("customScrollParent"),s=g7(n,o);return B.useEffect(()=>{t&&(r({height:t.itemHeight,width:t.itemWidth}),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:t.viewportWidth}))},[t,n,r]),B.createElement("div",{ref:s,style:Jg},e)},Wse=B.memo(function({...t}){const n=jn("useWindowScroll"),r=jn("customScrollParent"),o=r||n?Gse:Use,s=r||n?Hse:Bse;return B.createElement(o,{...t},B.createElement(s,null,B.createElement(Fse,null),B.createElement(Lse,null),B.createElement(zse,null)))}),{Component:Vse,usePublisher:ss,useEmitterValue:jn,useEmitter:S7}=Y8($se,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",restoreStateFrom:"restoreStateFrom",initialTopMostItemIndex:"initialTopMostItemIndex"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",stateChanged:"stateChanged"}},Wse),Use=y7({usePublisher:ss,useEmitterValue:jn,useEmitter:S7}),Gse=C7({usePublisher:ss,useEmitterValue:jn,useEmitter:S7});function u_(e,t,n){return t!=="normal"&&!(t!=null&&t.endsWith("px"))&&n(`${e} was not resolved to pixel value correctly`,t,oo.WARN),t==="normal"?0:parseInt(t??"0",10)}const Kse=Vse,qse=e=>{const t=H(s=>s.gallery.galleryView),{data:n}=wx(e),{data:r}=Sx(e),o=i.useMemo(()=>t==="images"?n==null?void 0:n.total:r==null?void 0:r.total,[t,r,n]);return{totalImages:n,totalAssets:r,currentViewTotal:o}},Xse=({imageDTO:e})=>a.jsx($,{sx:{pointerEvents:"none",flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,p:2,alignItems:"flex-start",gap:2},children:a.jsxs(Sa,{variant:"solid",colorScheme:"base",children:[e.width," × ",e.height]})}),Qse=i.memo(Xse),S2=({postUploadAction:e,isDisabled:t})=>{const n=H(d=>d.gallery.autoAddBoardId),[r]=CI(),o=i.useCallback(d=>{const f=d[0];f&&r({file:f,image_category:"user",is_intermediate:!1,postUploadAction:e??{type:"TOAST"},board_id:n==="none"?void 0:n})},[n,e,r]),{getRootProps:s,getInputProps:l,open:c}=Ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},onDropAccepted:o,disabled:t,noDrag:!0,multiple:!1});return{getUploadButtonProps:s,getUploadInputProps:l,openUploader:c}};function Yse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"}}]})(e)}function Zse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"}}]})(e)}function Jse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"}}]})(e)}function k2(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"}}]})(e)}function j2(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"}}]})(e)}function k7(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3z"}}]})(e)}const eae=()=>{const{t:e}=W(),t=te(),n=H(x=>x.gallery.selection),r=qh(jx),o=Mt("bulkDownload").isFeatureEnabled,[s]=_x(),[l]=Ix(),[c]=EI(),d=i.useCallback(()=>{t(RI(n)),t(yx(!0))},[t,n]),f=i.useCallback(()=>{t(Xh(n))},[t,n]),m=i.useCallback(()=>{s({imageDTOs:n})},[s,n]),h=i.useCallback(()=>{l({imageDTOs:n})},[l,n]),g=i.useCallback(async()=>{try{const x=await c({image_names:n.map(w=>w.image_name)}).unwrap();t(lt({title:e("gallery.preparingDownload"),status:"success",...x.response?{description:x.response,duration:null,isClosable:!0}:{}}))}catch{t(lt({title:e("gallery.preparingDownloadFailed"),status:"error"}))}},[e,n,c,t]),b=i.useMemo(()=>n.every(x=>x.starred),[n]),y=i.useMemo(()=>n.every(x=>!x.starred),[n]);return a.jsxs(a.Fragment,{children:[b&&a.jsx(At,{icon:r?r.on.icon:a.jsx(k2,{}),onClickCapture:h,children:r?r.off.text:"Unstar All"}),(y||!b&&!y)&&a.jsx(At,{icon:r?r.on.icon:a.jsx(j2,{}),onClickCapture:m,children:r?r.on.text:"Star All"}),o&&a.jsx(At,{icon:a.jsx(ou,{}),onClickCapture:g,children:e("gallery.downloadSelection")}),a.jsx(At,{icon:a.jsx(BM,{}),onClickCapture:d,children:e("boards.changeBoard")}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClickCapture:f,children:e("gallery.deleteSelection")})]})},tae=i.memo(eae),nae=()=>i.useCallback(async t=>new Promise(n=>{const r=new Image;r.onload=()=>{const o=document.createElement("canvas");o.width=r.width,o.height=r.height;const s=o.getContext("2d");s&&(s.drawImage(r,0,0),n(new Promise(l=>{o.toBlob(function(c){l(c)},"image/png")})))},r.crossOrigin=AI.get()?"use-credentials":"anonymous",r.src=t}),[]),j7=()=>{const e=zs(),{t}=W(),n=nae(),r=i.useMemo(()=>!!navigator.clipboard&&!!window.ClipboardItem,[]),o=i.useCallback(async s=>{r||e({title:t("toast.problemCopyingImage"),description:"Your browser doesn't support the Clipboard API.",status:"error",duration:2500,isClosable:!0});try{const l=await n(s);if(!l)throw new Error("Unable to create Blob");CA(l),e({title:t("toast.imageCopied"),status:"success",duration:2500,isClosable:!0})}catch(l){e({title:t("toast.problemCopyingImage"),description:String(l),status:"error",duration:2500,isClosable:!0})}},[n,r,t,e]);return{isClipboardAPIAvailable:r,copyImageToClipboard:o}};Px("gallery/requestedBoardImagesDeletion");const rae=Px("gallery/sentImageToCanvas"),_7=Px("gallery/sentImageToImg2Img"),oae=fe(pe,({generation:e})=>e.model),Sf=()=>{const e=te(),t=zs(),{t:n}=W(),r=H(oae),o=i.useCallback(()=>{t({title:n("toast.parameterSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),s=i.useCallback(A=>{t({title:n("toast.parameterNotSet"),description:A,status:"warning",duration:2500,isClosable:!0})},[n,t]),l=i.useCallback(()=>{t({title:n("toast.parametersSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),c=i.useCallback(A=>{t({title:n("toast.parametersNotSet"),status:"warning",description:A,duration:2500,isClosable:!0})},[n,t]),d=i.useCallback((A,L,K,ne)=>{if(bp(A)||xp(L)||Tu(K)||_v(ne)){bp(A)&&e(nd(A)),xp(L)&&e(rd(L)),Tu(K)&&e(od(K)),Tu(ne)&&e(sd(ne)),o();return}s()},[e,o,s]),f=i.useCallback(A=>{if(!bp(A)){s();return}e(nd(A)),o()},[e,o,s]),m=i.useCallback(A=>{if(!xp(A)){s();return}e(rd(A)),o()},[e,o,s]),h=i.useCallback(A=>{if(!Tu(A)){s();return}e(od(A)),o()},[e,o,s]),g=i.useCallback(A=>{if(!_v(A)){s();return}e(sd(A)),o()},[e,o,s]),b=i.useCallback(A=>{if(!Hw(A)){s();return}e(ym(A)),o()},[e,o,s]),y=i.useCallback(A=>{if(!Iv(A)){s();return}e(Cm(A)),o()},[e,o,s]),x=i.useCallback(A=>{if(!Ww(A)){s();return}e(wm(A)),o()},[e,o,s]),w=i.useCallback(A=>{if(!Vw(A)){s();return}e(N1(A)),o()},[e,o,s]),S=i.useCallback(A=>{if(!Pv(A)){s();return}e($1(A)),o()},[e,o,s]),j=i.useCallback(A=>{if(!Uw(A)&&!na(A)){s();return}na(A)?e(nc(null)):e(nc(A)),o()},[e,o,s]),_=i.useCallback(A=>{if(!Ev(A)){s();return}e(Sm(A)),o()},[e,o,s]),I=i.useCallback(A=>{if(!Mv(A)){s();return}e(Za(A)),o()},[e,o,s]),E=i.useCallback(A=>{if(!Ov(A)){s();return}e(Ja(A)),o()},[e,o,s]),M=i.useCallback((A,L)=>{if(!Mv(A)){c();return}if(!Ov(L)){c();return}e(Ja(L)),e(Za(A)),l()},[e,l,c]),D=i.useCallback(A=>{if(!yp(A)){s();return}e(km(A)),o()},[e,o,s]),R=i.useCallback(A=>{if(!Gw(A)){s();return}e(L1(A)),o()},[e,o,s]),N=i.useCallback(A=>{if(!yp(A)){s();return}e(jm(A)),o()},[e,o,s]),O=i.useCallback(A=>{if(!Kw(A)){s();return}e(F1(A)),o()},[e,o,s]),{data:T}=Vd(void 0),U=i.useCallback(A=>{if(!TI(A.lora))return{lora:null,error:"Invalid LoRA model"};const{base_model:L,model_name:K}=A.lora,ne=T?wA.getSelectors().selectById(T,`${L}/lora/${K}`):void 0;return ne?(ne==null?void 0:ne.base_model)===(r==null?void 0:r.base_model)?{lora:ne,error:null}:{lora:null,error:"LoRA incompatible with currently-selected model"}:{lora:null,error:"LoRA model is not installed"}},[T,r==null?void 0:r.base_model]),G=i.useCallback(A=>{const L=U(A);if(!L.lora){s(L.error);return}e(qw({...L.lora,weight:A.weight})),o()},[U,e,o,s]),{data:q}=Ex(void 0),Y=i.useCallback(A=>{if(!_m(A.control_model))return{controlnet:null,error:"Invalid ControlNet model"};const{image:L,control_model:K,control_weight:ne,begin_step_percent:z,end_step_percent:oe,control_mode:X,resize_mode:Z}=A,me=q?NI.getSelectors().selectById(q,`${K.base_model}/controlnet/${K.model_name}`):void 0;if(!me)return{controlnet:null,error:"ControlNet model is not installed"};if(!((me==null?void 0:me.base_model)===(r==null?void 0:r.base_model)))return{controlnet:null,error:"ControlNet incompatible with currently-selected model"};const de="none",ke=jr.none.default;return{controlnet:{type:"controlnet",isEnabled:!0,model:me,weight:typeof ne=="number"?ne:Nu.weight,beginStepPct:z||Nu.beginStepPct,endStepPct:oe||Nu.endStepPct,controlMode:X||Nu.controlMode,resizeMode:Z||Nu.resizeMode,controlImage:(L==null?void 0:L.image_name)||null,processedControlImage:(L==null?void 0:L.image_name)||null,processorType:de,processorNode:ke,shouldAutoConfig:!0,id:Ya()},error:null}},[q,r==null?void 0:r.base_model]),Q=i.useCallback(A=>{const L=Y(A);if(!L.controlnet){s(L.error);return}e(Ti(L.controlnet)),o()},[Y,e,o,s]),{data:V}=Mx(void 0),se=i.useCallback(A=>{if(!_m(A.t2i_adapter_model))return{controlnet:null,error:"Invalid ControlNet model"};const{image:L,t2i_adapter_model:K,weight:ne,begin_step_percent:z,end_step_percent:oe,resize_mode:X}=A,Z=V?$I.getSelectors().selectById(V,`${K.base_model}/t2i_adapter/${K.model_name}`):void 0;if(!Z)return{controlnet:null,error:"ControlNet model is not installed"};if(!((Z==null?void 0:Z.base_model)===(r==null?void 0:r.base_model)))return{t2iAdapter:null,error:"ControlNet incompatible with currently-selected model"};const ve="none",de=jr.none.default;return{t2iAdapter:{type:"t2i_adapter",isEnabled:!0,model:Z,weight:typeof ne=="number"?ne:Cp.weight,beginStepPct:z||Cp.beginStepPct,endStepPct:oe||Cp.endStepPct,resizeMode:X||Cp.resizeMode,controlImage:(L==null?void 0:L.image_name)||null,processedControlImage:(L==null?void 0:L.image_name)||null,processorType:ve,processorNode:de,shouldAutoConfig:!0,id:Ya()},error:null}},[r==null?void 0:r.base_model,V]),ee=i.useCallback(A=>{const L=se(A);if(!L.t2iAdapter){s(L.error);return}e(Ti(L.t2iAdapter)),o()},[se,e,o,s]),{data:le}=Ox(void 0),ae=i.useCallback(A=>{if(!SA(A==null?void 0:A.ip_adapter_model))return{ipAdapter:null,error:"Invalid IP Adapter model"};const{image:L,ip_adapter_model:K,weight:ne,begin_step_percent:z,end_step_percent:oe}=A,X=le?LI.getSelectors().selectById(le,`${K.base_model}/ip_adapter/${K.model_name}`):void 0;return X?(X==null?void 0:X.base_model)===(r==null?void 0:r.base_model)?{ipAdapter:{id:Ya(),type:"ip_adapter",isEnabled:!0,controlImage:(L==null?void 0:L.image_name)??null,model:X,weight:ne??Dv.weight,beginStepPct:z??Dv.beginStepPct,endStepPct:oe??Dv.endStepPct},error:null}:{ipAdapter:null,error:"IP Adapter incompatible with currently-selected model"}:{ipAdapter:null,error:"IP Adapter model is not installed"}},[le,r==null?void 0:r.base_model]),ce=i.useCallback(A=>{const L=ae(A);if(!L.ipAdapter){s(L.error);return}e(Ti(L.ipAdapter)),o()},[ae,e,o,s]),J=i.useCallback(A=>{e(Qh(A))},[e]),re=i.useCallback(A=>{if(!A){c();return}const{cfg_scale:L,cfg_rescale_multiplier:K,height:ne,model:z,positive_prompt:oe,negative_prompt:X,scheduler:Z,vae:me,seed:ve,steps:de,width:ke,strength:we,hrf_enabled:Re,hrf_strength:Qe,hrf_method:$e,positive_style_prompt:vt,negative_style_prompt:it,refiner_model:ot,refiner_cfg_scale:Ce,refiner_steps:Me,refiner_scheduler:qe,refiner_positive_aesthetic_score:dt,refiner_negative_aesthetic_score:ye,refiner_start:Ue,loras:st,controlnets:mt,ipAdapters:Pe,t2iAdapters:Ne}=A;Iv(L)&&e(Cm(L)),Ww(K)&&e(wm(K)),Vw(z)&&e(N1(z)),bp(oe)&&e(nd(oe)),xp(X)&&e(rd(X)),Pv(Z)&&e($1(Z)),(Uw(me)||na(me))&&(na(me)?e(nc(null)):e(nc(me))),Hw(ve)&&e(ym(ve)),Ev(de)&&e(Sm(de)),Mv(ke)&&e(Za(ke)),Ov(ne)&&e(Ja(ne)),yp(we)&&e(km(we)),Gw(Re)&&e(L1(Re)),yp(Qe)&&e(jm(Qe)),Kw($e)&&e(F1($e)),Tu(vt)&&e(od(vt)),_v(it)&&e(sd(it)),kA(ot)&&e(FI(ot)),Ev(Me)&&e(z1(Me)),Iv(Ce)&&e(B1(Ce)),Pv(qe)&&e(zI(qe)),jA(dt)&&e(H1(dt)),_A(ye)&&e(W1(ye)),IA(Ue)&&e(V1(Ue)),e(PA()),st==null||st.forEach(kt=>{const Se=U(kt);Se.lora&&e(qw({...Se.lora,weight:kt.weight}))}),e(kI()),mt==null||mt.forEach(kt=>{const Se=Y(kt);Se.controlnet&&e(Ti(Se.controlnet))}),Pe==null||Pe.forEach(kt=>{const Se=ae(kt);Se.ipAdapter&&e(Ti(Se.ipAdapter))}),Ne==null||Ne.forEach(kt=>{const Se=se(kt);Se.t2iAdapter&&e(Ti(Se.t2iAdapter))}),l()},[e,l,c,U,Y,ae,se]);return{recallBothPrompts:d,recallPositivePrompt:f,recallNegativePrompt:m,recallSDXLPositiveStylePrompt:h,recallSDXLNegativeStylePrompt:g,recallSeed:b,recallCfgScale:y,recallCfgRescaleMultiplier:x,recallModel:w,recallScheduler:S,recallVaeModel:j,recallSteps:_,recallWidth:I,recallHeight:E,recallWidthAndHeight:M,recallStrength:D,recallHrfEnabled:R,recallHrfStrength:N,recallHrfMethod:O,recallLoRA:G,recallControlNet:Q,recallIPAdapter:ce,recallT2IAdapter:ee,recallAllParameters:re,sendToImageToImage:J}},I7=({onSuccess:e,onError:t})=>{const n=te(),r=zs(),{t:o}=W(),[s,l]=EA();return{getAndLoadEmbeddedWorkflow:i.useCallback(async d=>{try{const f=await s(d);n(Dx({workflow:f.data,asCopy:!0})),e&&e()}catch{r({title:o("toast.problemRetrievingWorkflow"),status:"error"}),t&&t()}},[s,n,e,r,o,t]),getAndLoadEmbeddedWorkflowResult:l}};function sae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M125.7 160H176c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32s32 14.3 32 32v51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z"}}]})(e)}function aae(e){return De({tag:"svg",attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z"}}]})(e)}function lae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"}}]})(e)}function e0(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z"}}]})(e)}function P7(e){return De({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z"}}]})(e)}function iae(e){return De({tag:"svg",attr:{viewBox:"0 0 576 512"},child:[{tag:"path",attr:{d:"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6V105.5L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0h18.1c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z"}}]})(e)}function cae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z"}}]})(e)}function uae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"}}]})(e)}function dae(e,t,n){var r=this,o=i.useRef(null),s=i.useRef(0),l=i.useRef(null),c=i.useRef([]),d=i.useRef(),f=i.useRef(),m=i.useRef(e),h=i.useRef(!0);m.current=e;var g=typeof window<"u",b=!t&&t!==0&&g;if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var y=!!(n=n||{}).leading,x=!("trailing"in n)||!!n.trailing,w="maxWait"in n,S="debounceOnServer"in n&&!!n.debounceOnServer,j=w?Math.max(+n.maxWait||0,t):null;i.useEffect(function(){return h.current=!0,function(){h.current=!1}},[]);var _=i.useMemo(function(){var I=function(O){var T=c.current,U=d.current;return c.current=d.current=null,s.current=O,f.current=m.current.apply(U,T)},E=function(O,T){b&&cancelAnimationFrame(l.current),l.current=b?requestAnimationFrame(O):setTimeout(O,T)},M=function(O){if(!h.current)return!1;var T=O-o.current;return!o.current||T>=t||T<0||w&&O-s.current>=j},D=function(O){return l.current=null,x&&c.current?I(O):(c.current=d.current=null,f.current)},R=function O(){var T=Date.now();if(M(T))return D(T);if(h.current){var U=t-(T-o.current),G=w?Math.min(U,j-(T-s.current)):U;E(O,G)}},N=function(){if(g||S){var O=Date.now(),T=M(O);if(c.current=[].slice.call(arguments),d.current=r,o.current=O,T){if(!l.current&&h.current)return s.current=o.current,E(R,t),y?I(o.current):f.current;if(w)return E(R,t),I(o.current)}return l.current||E(R,t),f.current}};return N.cancel=function(){l.current&&(b?cancelAnimationFrame(l.current):clearTimeout(l.current)),s.current=0,c.current=o.current=d.current=l.current=null},N.isPending=function(){return!!l.current},N.flush=function(){return l.current?D(Date.now()):f.current},N},[y,w,t,j,x,b,g,S]);return _}function fae(e,t){return e===t}function pae(e,t){return t}function kc(e,t,n){var r=n&&n.equalityFn||fae,o=i.useReducer(pae,e),s=o[0],l=o[1],c=dae(i.useCallback(function(f){return l(f)},[l]),t,n),d=i.useRef(e);return r(d.current,e)||(c(e),d.current=e),[s,c]}const _2=e=>{const t=H(s=>s.config.metadataFetchDebounce??300),[n]=kc(e,t),{data:r,isLoading:o}=BI(n??Br);return{metadata:r,isLoading:o}},mae=e=>{const{imageDTO:t}=e,n=te(),{t:r}=W(),o=zs(),s=Mt("unifiedCanvas").isFeatureEnabled,l=qh(jx),{metadata:c,isLoading:d}=_2(t==null?void 0:t.image_name),{getAndLoadEmbeddedWorkflow:f,getAndLoadEmbeddedWorkflowResult:m}=I7({}),h=i.useCallback(()=>{f(t.image_name)},[f,t.image_name]),[g]=_x(),[b]=Ix(),{isClipboardAPIAvailable:y,copyImageToClipboard:x}=j7(),w=i.useCallback(()=>{t&&n(Xh([t]))},[n,t]),{recallBothPrompts:S,recallSeed:j,recallAllParameters:_}=Sf(),I=i.useCallback(()=>{S(c==null?void 0:c.positive_prompt,c==null?void 0:c.negative_prompt,c==null?void 0:c.positive_style_prompt,c==null?void 0:c.negative_style_prompt)},[c==null?void 0:c.negative_prompt,c==null?void 0:c.positive_prompt,c==null?void 0:c.positive_style_prompt,c==null?void 0:c.negative_style_prompt,S]),E=i.useCallback(()=>{j(c==null?void 0:c.seed)},[c==null?void 0:c.seed,j]),M=i.useCallback(()=>{n(_7()),n(Qh(t))},[n,t]),D=i.useCallback(()=>{n(rae()),Jr.flushSync(()=>{n(Js("unifiedCanvas"))}),n(HI(t)),o({title:r("toast.sentToUnifiedCanvas"),status:"success",duration:2500,isClosable:!0})},[n,t,r,o]),R=i.useCallback(()=>{_(c)},[c,_]),N=i.useCallback(()=>{n(RI([t])),n(yx(!0))},[n,t]),O=i.useCallback(()=>{x(t.image_url)},[x,t.image_url]),T=i.useCallback(()=>{t&&g({imageDTOs:[t]})},[g,t]),U=i.useCallback(()=>{t&&b({imageDTOs:[t]})},[b,t]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"a",href:t.image_url,target:"_blank",icon:a.jsx(Xy,{}),children:r("common.openInNewTab")}),y&&a.jsx(At,{icon:a.jsx(ru,{}),onClickCapture:O,children:r("parameters.copyImage")}),a.jsx(At,{as:"a",download:!0,href:t.image_url,target:"_blank",icon:a.jsx(ou,{}),w:"100%",children:r("parameters.downloadImage")}),a.jsx(At,{icon:m.isLoading?a.jsx(Zp,{}):a.jsx(e0,{}),onClickCapture:h,isDisabled:!t.has_workflow,children:r("nodes.loadWorkflow")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(GM,{}),onClickCapture:I,isDisabled:d||(c==null?void 0:c.positive_prompt)===void 0&&(c==null?void 0:c.negative_prompt)===void 0,children:r("parameters.usePrompt")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(KM,{}),onClickCapture:E,isDisabled:d||(c==null?void 0:c.seed)===void 0,children:r("parameters.useSeed")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(NM,{}),onClickCapture:R,isDisabled:d||!c,children:r("parameters.useAll")}),a.jsx(At,{icon:a.jsx(xj,{}),onClickCapture:M,id:"send-to-img2img",children:r("parameters.sendToImg2Img")}),s&&a.jsx(At,{icon:a.jsx(xj,{}),onClickCapture:D,id:"send-to-canvas",children:r("parameters.sendToUnifiedCanvas")}),a.jsx(At,{icon:a.jsx(BM,{}),onClickCapture:N,children:r("boards.changeBoard")}),t.starred?a.jsx(At,{icon:l?l.off.icon:a.jsx(j2,{}),onClickCapture:U,children:l?l.off.text:r("gallery.unstarImage")}):a.jsx(At,{icon:l?l.on.icon:a.jsx(k2,{}),onClickCapture:T,children:l?l.on.text:r("gallery.starImage")}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClickCapture:w,children:r("gallery.deleteImage")})]})},E7=i.memo(mae),Zp=()=>a.jsx($,{w:"14px",alignItems:"center",justifyContent:"center",children:a.jsx(va,{size:"xs"})}),hae=fe([pe],({gallery:e})=>({selectionCount:e.selection.length})),gae=({imageDTO:e,children:t})=>{const{selectionCount:n}=H(hae),r=i.useCallback(s=>{s.preventDefault()},[]),o=i.useCallback(()=>e?n>1?a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:r,children:a.jsx(tae,{})}):a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:r,children:a.jsx(E7,{imageDTO:e})}):null,[e,n,r]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:o,children:t})},vae=i.memo(gae),bae=e=>{const{data:t,disabled:n,...r}=e,o=i.useRef(Ya()),{attributes:s,listeners:l,setNodeRef:c}=Wre({id:o.current,disabled:n,data:t});return a.jsx(Ie,{ref:c,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,...s,...l,...r})},xae=i.memo(bae),yae=a.jsx(An,{as:$g,sx:{boxSize:16}}),Cae=a.jsx(Tn,{icon:si}),wae=e=>{const{imageDTO:t,onError:n,onClick:r,withMetadataOverlay:o=!1,isDropDisabled:s=!1,isDragDisabled:l=!1,isUploadDisabled:c=!1,minSize:d=24,postUploadAction:f,imageSx:m,fitContainer:h=!1,droppableData:g,draggableData:b,dropLabel:y,isSelected:x=!1,thumbnail:w=!1,noContentFallback:S=Cae,uploadElement:j=yae,useThumbailFallback:_,withHoverOverlay:I=!1,children:E,onMouseOver:M,onMouseOut:D,dataTestId:R}=e,{colorMode:N}=ya(),[O,T]=i.useState(!1),U=i.useCallback(V=>{M&&M(V),T(!0)},[M]),G=i.useCallback(V=>{D&&D(V),T(!1)},[D]),{getUploadButtonProps:q,getUploadInputProps:Y}=S2({postUploadAction:f,isDisabled:c}),Q=c?{}:{cursor:"pointer",bg:Te("base.200","base.700")(N),_hover:{bg:Te("base.300","base.650")(N),color:Te("base.500","base.300")(N)}};return a.jsx(vae,{imageDTO:t,children:V=>a.jsxs($,{ref:V,onMouseOver:U,onMouseOut:G,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative",minW:d||void 0,minH:d||void 0,userSelect:"none",cursor:l||!t?"default":"pointer"},children:[t&&a.jsxs($,{sx:{w:"full",h:"full",position:h?"absolute":"relative",alignItems:"center",justifyContent:"center"},children:[a.jsx(Ca,{src:w?t.thumbnail_url:t.image_url,fallbackStrategy:"beforeLoadOrError",fallbackSrc:_?t.thumbnail_url:void 0,fallback:_?void 0:a.jsx(boe,{image:t}),onError:n,draggable:!1,sx:{w:t.width,objectFit:"contain",maxW:"full",maxH:"full",borderRadius:"base",...m},"data-testid":R}),o&&a.jsx(Qse,{imageDTO:t}),a.jsx(d2,{isSelected:x,isHovered:I?O:!1})]}),!t&&!c&&a.jsx(a.Fragment,{children:a.jsxs($,{sx:{minH:d,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",transitionProperty:"common",transitionDuration:"0.1s",color:Te("base.500","base.500")(N),...Q},...q(),children:[a.jsx("input",{...Y()}),j]})}),!t&&c&&S,t&&!l&&a.jsx(xae,{data:b,disabled:l||!t,onClick:r}),E,!s&&a.jsx(u2,{data:g,disabled:s,dropLabel:y})]})})},fl=i.memo(wae),Sae=e=>{const{onClick:t,tooltip:n,icon:r,styleOverrides:o}=e,s=ia("drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))","drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))");return a.jsx(Fe,{onClick:t,"aria-label":n,tooltip:n,icon:r,size:"sm",variant:"link",sx:{position:"absolute",top:1,insetInlineEnd:1,p:0,minW:0,svg:{transitionProperty:"common",transitionDuration:"normal",fill:"base.100",_hover:{fill:"base.50"},filter:s},...o},"data-testid":n})},jc=i.memo(Sae),kae=()=>a.jsx(wg,{sx:{position:"relative",height:"full",width:"full","::before":{content:"''",display:"block",pt:"100%"}},children:a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,height:"full",width:"full"}})}),jae=i.memo(kae),_ae=fe([pe,kx],({gallery:e},t)=>{const n=e.selection;return{queryArgs:t,selection:n}}),Iae=e=>{const t=te(),{queryArgs:n,selection:r}=H(_ae),{imageDTOs:o}=WI(n,{selectFromResult:f=>({imageDTOs:f.data?MA.selectAll(f.data):[]})}),s=Mt("multiselect").isFeatureEnabled,l=i.useCallback(f=>{var m;if(e){if(!s){t($u([e]));return}if(f.shiftKey){const h=e.image_name,g=(m=r[r.length-1])==null?void 0:m.image_name,b=o.findIndex(x=>x.image_name===g),y=o.findIndex(x=>x.image_name===h);if(b>-1&&y>-1){const x=Math.min(b,y),w=Math.max(b,y),S=o.slice(x,w+1);t($u(r.concat(S)))}}else f.ctrlKey||f.metaKey?r.some(h=>h.image_name===e.image_name)&&r.length>1?t($u(r.filter(h=>h.image_name!==e.image_name))):t($u(r.concat(e))):t($u([e]))}},[t,e,o,r,s]),c=i.useMemo(()=>e?r.some(f=>f.image_name===e.image_name):!1,[e,r]),d=i.useMemo(()=>r.length,[r.length]);return{selection:r,selectionCount:d,isSelected:c,handleClick:l}},Pae=(e,t,n,r)=>{const o=i.useRef(null);return i.useEffect(()=>{if(!e||n!==1||!r.rootRef.current||!r.virtuosoRef.current||!r.virtuosoRangeRef.current||!o.current)return;const s=o.current.getBoundingClientRect(),l=r.rootRef.current.getBoundingClientRect();s.top>=l.top&&s.bottom<=l.bottom&&s.left>=l.left&&s.right<=l.right||r.virtuosoRef.current.scrollToIndex({index:t,behavior:"smooth",align:Gb(t,r.virtuosoRangeRef.current)})},[e,t,n,r]),o},Eae=e=>{const t=te(),{imageName:n,virtuosoContext:r}=e,{currentData:o}=jo(n),s=H(R=>R.hotkeys.shift),{t:l}=W(),{handleClick:c,isSelected:d,selection:f,selectionCount:m}=Iae(o),h=qh(jx),g=Pae(d,e.index,m,r),b=i.useCallback(R=>{R.stopPropagation(),o&&t(Xh([o]))},[t,o]),y=i.useMemo(()=>{if(m>1)return{id:"gallery-image",payloadType:"IMAGE_DTOS",payload:{imageDTOs:f}};if(o)return{id:"gallery-image",payloadType:"IMAGE_DTO",payload:{imageDTO:o}}},[o,f,m]),[x]=_x(),[w]=Ix(),S=i.useCallback(()=>{o&&(o.starred&&w({imageDTOs:[o]}),o.starred||x({imageDTOs:[o]}))},[x,w,o]),[j,_]=i.useState(!1),I=i.useCallback(()=>{_(!0)},[]),E=i.useCallback(()=>{_(!1)},[]),M=i.useMemo(()=>{if(o!=null&&o.starred)return h?h.on.icon:a.jsx(j2,{size:"20"});if(!(o!=null&&o.starred)&&j)return h?h.off.icon:a.jsx(k2,{size:"20"})},[o==null?void 0:o.starred,j,h]),D=i.useMemo(()=>o!=null&&o.starred?h?h.off.text:"Unstar":o!=null&&o.starred?"":h?h.on.text:"Star",[o==null?void 0:o.starred,h]);return o?a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none"},"data-testid":`image-${o.image_name}`,children:a.jsx($,{ref:g,userSelect:"none",sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1"},children:a.jsx(fl,{onClick:c,imageDTO:o,draggableData:y,isSelected:d,minSize:0,imageSx:{w:"full",h:"full"},isDropDisabled:!0,isUploadDisabled:!0,thumbnail:!0,withHoverOverlay:!0,onMouseOver:I,onMouseOut:E,children:a.jsxs(a.Fragment,{children:[a.jsx(jc,{onClick:S,icon:M,tooltip:D}),j&&s&&a.jsx(jc,{onClick:b,icon:a.jsx(ao,{}),tooltip:l("gallery.deleteImage"),styleOverrides:{bottom:2,top:"auto"}})]})})})}):a.jsx(jae,{})},Mae=i.memo(Eae),Oae=_e((e,t)=>a.jsx(Ie,{className:"item-container",ref:t,p:1.5,"data-testid":"image-item-container",children:e.children})),Dae=i.memo(Oae),Rae=_e((e,t)=>{const n=H(r=>r.gallery.galleryImageMinimumWidth);return a.jsx(sl,{...e,className:"list-container",ref:t,sx:{gridTemplateColumns:`repeat(auto-fill, minmax(${n}px, 1fr));`},"data-testid":"image-list-container",children:e.children})}),Aae=i.memo(Rae),Tae={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},Nae=()=>{const{t:e}=W(),t=i.useRef(null),[n,r]=i.useState(null),[o,s]=c2(Tae),l=H(E=>E.gallery.selectedBoardId),{currentViewTotal:c}=qse(l),d=H(kx),f=i.useRef(null),m=i.useRef(null),{currentData:h,isFetching:g,isSuccess:b,isError:y}=WI(d),[x]=DI(),w=i.useMemo(()=>!h||!c?!1:h.ids.length{w&&x({...d,offset:(h==null?void 0:h.ids.length)??0,limit:OI})},[w,x,d,h==null?void 0:h.ids.length]),j=i.useMemo(()=>({virtuosoRef:m,rootRef:t,virtuosoRangeRef:f}),[]),_=i.useCallback((E,M,D)=>a.jsx(Mae,{index:E,imageName:M,virtuosoContext:D},M),[]);i.useEffect(()=>{const{current:E}=t;return n&&E&&o({target:E,elements:{viewport:n}}),()=>{var M;return(M=s())==null?void 0:M.destroy()}},[n,o,s]);const I=i.useCallback(E=>{f.current=E},[]);return i.useEffect(()=>{lc.setKey("virtuosoRef",m),lc.setKey("virtuosoRangeRef",f)},[]),h?b&&(h==null?void 0:h.ids.length)===0?a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(Tn,{label:e("gallery.noImagesInGallery"),icon:si})}):b&&h?a.jsxs(a.Fragment,{children:[a.jsx(Ie,{ref:t,"data-overlayscrollbars":"",h:"100%",children:a.jsx(Kse,{style:{height:"100%"},data:h.ids,endReached:S,components:{Item:Dae,List:Aae},scrollerRef:r,itemContent:_,ref:m,rangeChanged:I,context:j,overscan:10})}),a.jsx(Xe,{onClick:S,isDisabled:!w,isLoading:g,loadingText:e("gallery.loading"),flexShrink:0,children:`Load More (${h.ids.length} of ${c})`})]}):y?a.jsx(Ie,{sx:{w:"full",h:"full"},children:a.jsx(Tn,{label:e("gallery.unableToLoad"),icon:kte})}):null:a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(Tn,{label:e("gallery.loading"),icon:si})})},$ae=i.memo(Nae),Lae=fe([pe],e=>{const{galleryView:t}=e.gallery;return{galleryView:t}}),Fae=()=>{const{t:e}=W(),t=i.useRef(null),n=i.useRef(null),{galleryView:r}=H(Lae),o=te(),{isOpen:s,onToggle:l}=sr({defaultIsOpen:!0}),c=i.useCallback(()=>{o(Xw("images"))},[o]),d=i.useCallback(()=>{o(Xw("assets"))},[o]);return a.jsxs(F5,{layerStyle:"first",sx:{flexDirection:"column",h:"full",w:"full",borderRadius:"base",p:2},children:[a.jsxs(Ie,{sx:{w:"full"},children:[a.jsxs($,{ref:t,sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:[a.jsx(ioe,{isOpen:s,onToggle:l}),a.jsx(voe,{})]}),a.jsx(Ie,{children:a.jsx(soe,{isOpen:s})})]}),a.jsxs($,{ref:n,direction:"column",gap:2,h:"full",w:"full",children:[a.jsx($,{sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:a.jsx(ci,{index:r==="images"?0:1,variant:"unstyled",size:"sm",sx:{w:"full"},children:a.jsx(ui,{children:a.jsxs($t,{isAttached:!0,sx:{w:"full"},children:[a.jsx(mr,{as:Xe,size:"sm",isChecked:r==="images",onClick:c,sx:{w:"full"},leftIcon:a.jsx(Tte,{}),"data-testid":"images-tab",children:e("parameters.images")}),a.jsx(mr,{as:Xe,size:"sm",isChecked:r==="assets",onClick:d,sx:{w:"full"},leftIcon:a.jsx(Gte,{}),"data-testid":"assets-tab",children:e("gallery.assets")})]})})})}),a.jsx($ae,{})]})]})},zae=i.memo(Fae),Bae={paramNegativeConditioning:{placement:"right"},controlNet:{href:"https://support.invoke.ai/support/solutions/articles/151000105880"},lora:{href:"https://support.invoke.ai/support/solutions/articles/151000159072"},compositingCoherenceMode:{href:"https://support.invoke.ai/support/solutions/articles/151000158838"},infillMethod:{href:"https://support.invoke.ai/support/solutions/articles/151000158841"},scaleBeforeProcessing:{href:"https://support.invoke.ai/support/solutions/articles/151000158841"},paramIterations:{href:"https://support.invoke.ai/support/solutions/articles/151000159073"},paramPositiveConditioning:{href:"https://support.invoke.ai/support/solutions/articles/151000096606-tips-on-crafting-prompts",placement:"right"},paramScheduler:{placement:"right",href:"https://support.invoke.ai/support/solutions/articles/151000159073"},paramModel:{placement:"right",href:"https://support.invoke.ai/support/solutions/articles/151000096601-what-is-a-model-which-should-i-use-"},paramRatio:{gutter:16},controlNetControlMode:{placement:"right"},controlNetResizeMode:{placement:"right"},paramVAE:{placement:"right"},paramVAEPrecision:{placement:"right"}},Hae=1e3,Wae=[{name:"preventOverflow",options:{padding:10}}],M7=_e(({feature:e,children:t,wrapperProps:n,...r},o)=>{const{t:s}=W(),l=H(g=>g.system.shouldEnableInformationalPopovers),c=i.useMemo(()=>Bae[e],[e]),d=i.useMemo(()=>OA(DA(c,["image","href","buttonLabel"]),r),[c,r]),f=i.useMemo(()=>s(`popovers.${e}.heading`),[e,s]),m=i.useMemo(()=>s(`popovers.${e}.paragraphs`,{returnObjects:!0})??[],[e,s]),h=i.useCallback(()=>{c!=null&&c.href&&window.open(c.href)},[c==null?void 0:c.href]);return l?a.jsxs(lf,{isLazy:!0,closeOnBlur:!1,trigger:"hover",variant:"informational",openDelay:Hae,modifiers:Wae,placement:"top",...d,children:[a.jsx(yg,{children:a.jsx(Ie,{ref:o,w:"full",...n,children:t})}),a.jsx(Uc,{children:a.jsxs(cf,{w:96,children:[a.jsx(h6,{}),a.jsx(Cg,{children:a.jsxs($,{sx:{gap:2,flexDirection:"column",alignItems:"flex-start"},children:[f&&a.jsxs(a.Fragment,{children:[a.jsx(or,{size:"sm",children:f}),a.jsx(On,{})]}),(c==null?void 0:c.image)&&a.jsxs(a.Fragment,{children:[a.jsx(Ca,{sx:{objectFit:"contain",maxW:"60%",maxH:"60%",backgroundColor:"white"},src:c.image,alt:"Optional Image"}),a.jsx(On,{})]}),m.map(g=>a.jsx(be,{children:g},g)),(c==null?void 0:c.href)&&a.jsxs(a.Fragment,{children:[a.jsx(On,{}),a.jsx(ol,{pt:1,onClick:h,leftIcon:a.jsx(Xy,{}),alignSelf:"flex-end",variant:"link",children:s("common.learnMore")??f})]})]})})]})})]}):a.jsx(Ie,{ref:o,w:"full",...n,children:t})});M7.displayName="IAIInformationalPopover";const Ot=i.memo(M7),I2=e=>{e.stopPropagation()},zh=/^-?(0\.)?\.?$/,O7=_e((e,t)=>{const{label:n,isDisabled:r=!1,showStepper:o=!0,isInvalid:s,value:l,onChange:c,min:d,max:f,isInteger:m=!0,formControlProps:h,formLabelProps:g,numberInputFieldProps:b,numberInputStepperProps:y,tooltipProps:x,...w}=e,S=te(),[j,_]=i.useState(String(l));i.useEffect(()=>{!j.match(zh)&&l!==Number(j)&&_(String(l))},[l,j]);const I=i.useCallback(R=>{_(R),R.match(zh)||c(m?Math.floor(Number(R)):Number(R))},[m,c]),E=i.useCallback(R=>{const N=Zl(m?Math.floor(Number(R.target.value)):Number(R.target.value),d,f);_(String(N)),c(N)},[m,f,d,c]),M=i.useCallback(R=>{R.shiftKey&&S(zr(!0))},[S]),D=i.useCallback(R=>{R.shiftKey||S(zr(!1))},[S]);return a.jsx(Ut,{...x,children:a.jsxs(Gt,{ref:t,isDisabled:r,isInvalid:s,...h,children:[n&&a.jsx(ln,{...g,children:n}),a.jsxs(mg,{value:j,min:d,max:f,keepWithinRange:!0,clampValueOnBlur:!1,onChange:I,onBlur:E,...w,onPaste:I2,children:[a.jsx(gg,{...b,onKeyDown:M,onKeyUp:D}),o&&a.jsxs(hg,{children:[a.jsx(bg,{...y}),a.jsx(vg,{...y})]})]})]})})});O7.displayName="IAINumberInput";const _s=i.memo(O7),Vae=fe([pe],e=>{const{initial:t,min:n,sliderMax:r,inputMax:o,fineStep:s,coarseStep:l}=e.config.sd.iterations,{iterations:c}=e.generation,{shouldUseSliders:d}=e.ui,f=e.hotkeys.shift?s:l;return{iterations:c,initial:t,min:n,sliderMax:r,inputMax:o,step:f,shouldUseSliders:d}}),Uae=({asSlider:e})=>{const{iterations:t,initial:n,min:r,sliderMax:o,inputMax:s,step:l,shouldUseSliders:c}=H(Vae),d=te(),{t:f}=W(),m=i.useCallback(g=>{d(Qw(g))},[d]),h=i.useCallback(()=>{d(Qw(n))},[d,n]);return e||c?a.jsx(Ot,{feature:"paramIterations",children:a.jsx(nt,{label:f("parameters.iterations"),step:l,min:r,max:o,onChange:m,handleReset:h,value:t,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s}})}):a.jsx(Ot,{feature:"paramIterations",children:a.jsx(_s,{label:f("parameters.iterations"),step:l,min:r,max:s,onChange:m,value:t,numberInputFieldProps:{textAlign:"center"}})})},ds=i.memo(Uae),Gae=()=>{const e=H(f=>f.system.isConnected),{data:t}=Ls(),[n,{isLoading:r}]=Rx(),o=te(),{t:s}=W(),l=i.useMemo(()=>t==null?void 0:t.queue.item_id,[t==null?void 0:t.queue.item_id]),c=i.useCallback(async()=>{if(l)try{await n(l).unwrap(),o(lt({title:s("queue.cancelSucceeded"),status:"success"}))}catch{o(lt({title:s("queue.cancelFailed"),status:"error"}))}},[l,o,s,n]),d=i.useMemo(()=>!e||na(l),[e,l]);return{cancelQueueItem:c,isLoading:r,currentQueueItemId:l,isDisabled:d}},Kae=({label:e,tooltip:t,icon:n,onClick:r,isDisabled:o,colorScheme:s,asIconButton:l,isLoading:c,loadingText:d,sx:f})=>l?a.jsx(Fe,{"aria-label":e,tooltip:t,icon:n,onClick:r,isDisabled:o,colorScheme:s,isLoading:c,sx:f,"data-testid":e}):a.jsx(Xe,{"aria-label":e,tooltip:t,leftIcon:n,onClick:r,isDisabled:o,colorScheme:s,isLoading:c,loadingText:d??e,flexGrow:1,sx:f,"data-testid":e,children:e}),gi=i.memo(Kae),qae=({asIconButton:e,sx:t})=>{const{t:n}=W(),{cancelQueueItem:r,isLoading:o,isDisabled:s}=Gae();return a.jsx(gi,{isDisabled:s,isLoading:o,asIconButton:e,label:n("queue.cancel"),tooltip:n("queue.cancelTooltip"),icon:a.jsx(Nc,{}),onClick:r,colorScheme:"error",sx:t})},D7=i.memo(qae),Xae=()=>{const{t:e}=W(),t=te(),{data:n}=Ls(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=VI({fixedCacheKey:"clearQueue"}),l=i.useCallback(async()=>{if(n!=null&&n.queue.total)try{await o().unwrap(),t(lt({title:e("queue.clearSucceeded"),status:"success"})),t(Ax(void 0)),t(Tx(void 0))}catch{t(lt({title:e("queue.clearFailed"),status:"error"}))}},[n==null?void 0:n.queue.total,o,t,e]),c=i.useMemo(()=>!r||!(n!=null&&n.queue.total),[r,n==null?void 0:n.queue.total]);return{clearQueue:l,isLoading:s,queueStatus:n,isDisabled:c}},Qae=_e((e,t)=>{const{t:n}=W(),{acceptButtonText:r=n("common.accept"),acceptCallback:o,cancelButtonText:s=n("common.cancel"),cancelCallback:l,children:c,title:d,triggerComponent:f}=e,{isOpen:m,onOpen:h,onClose:g}=sr(),b=i.useRef(null),y=i.useCallback(()=>{o(),g()},[o,g]),x=i.useCallback(()=>{l&&l(),g()},[l,g]);return a.jsxs(a.Fragment,{children:[i.cloneElement(f,{onClick:h,ref:t}),a.jsx(Zc,{isOpen:m,leastDestructiveRef:b,onClose:g,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:d}),a.jsx(Mo,{children:c}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:b,onClick:x,children:s}),a.jsx(Xe,{colorScheme:"error",onClick:y,ml:3,children:r})]})]})})})]})}),t0=i.memo(Qae),Yae=({asIconButton:e,sx:t})=>{const{t:n}=W(),{clearQueue:r,isLoading:o,isDisabled:s}=Xae();return a.jsxs(t0,{title:n("queue.clearTooltip"),acceptCallback:r,acceptButtonText:n("queue.clear"),triggerComponent:a.jsx(gi,{isDisabled:s,isLoading:o,asIconButton:e,label:n("queue.clear"),tooltip:n("queue.clearTooltip"),icon:a.jsx(ao,{}),colorScheme:"error",sx:t}),children:[a.jsx(be,{children:n("queue.clearQueueAlertDialog")}),a.jsx("br",{}),a.jsx(be,{children:n("queue.clearQueueAlertDialog2")})]})},P2=i.memo(Yae),Zae=()=>{const e=te(),{t}=W(),n=H(f=>f.system.isConnected),{data:r}=Ls(),[o,{isLoading:s}]=UI({fixedCacheKey:"pauseProcessor"}),l=i.useMemo(()=>!!(r!=null&&r.processor.is_started),[r==null?void 0:r.processor.is_started]),c=i.useCallback(async()=>{if(l)try{await o().unwrap(),e(lt({title:t("queue.pauseSucceeded"),status:"success"}))}catch{e(lt({title:t("queue.pauseFailed"),status:"error"}))}},[l,o,e,t]),d=i.useMemo(()=>!n||!l,[n,l]);return{pauseProcessor:c,isLoading:s,isStarted:l,isDisabled:d}},Jae=({asIconButton:e})=>{const{t}=W(),{pauseProcessor:n,isLoading:r,isDisabled:o}=Zae();return a.jsx(gi,{asIconButton:e,label:t("queue.pause"),tooltip:t("queue.pauseTooltip"),isDisabled:o,isLoading:r,icon:a.jsx(Bte,{}),onClick:n,colorScheme:"gold"})},R7=i.memo(Jae),ele=fe([pe,tr],({controlAdapters:e,generation:t,system:n,nodes:r,dynamicPrompts:o},s)=>{const{initialImage:l,model:c}=t,{isConnected:d}=n,f=[];return d||f.push(wt.t("parameters.invoke.systemDisconnected")),s==="img2img"&&!l&&f.push(wt.t("parameters.invoke.noInitialImageSelected")),s==="nodes"?r.shouldValidateGraph&&(r.nodes.length||f.push(wt.t("parameters.invoke.noNodesInGraph")),r.nodes.forEach(m=>{if(!Jt(m))return;const h=r.nodeTemplates[m.data.type];if(!h){f.push(wt.t("parameters.invoke.missingNodeTemplate"));return}const g=RA([m],r.edges);qn(m.data.inputs,b=>{const y=h.inputs[b.name],x=g.some(w=>w.target===m.id&&w.targetHandle===b.name);if(!y){f.push(wt.t("parameters.invoke.missingFieldTemplate"));return}if(y.required&&b.value===void 0&&!x){f.push(wt.t("parameters.invoke.missingInputForField",{nodeLabel:m.data.label||h.title,fieldLabel:b.label||y.title}));return}})})):(o.prompts.length===0&&f.push(wt.t("parameters.invoke.noPrompts")),c||f.push(wt.t("parameters.invoke.noModelSelected")),AA(e).forEach((m,h)=>{m.isEnabled&&(m.model?m.model.base_model!==(c==null?void 0:c.base_model)&&f.push(wt.t("parameters.invoke.incompatibleBaseModelForControlAdapter",{number:h+1})):f.push(wt.t("parameters.invoke.noModelForControlAdapter",{number:h+1})),(!m.controlImage||Gc(m)&&!m.processedControlImage&&m.processorType!=="none")&&f.push(wt.t("parameters.invoke.noControlImageForControlAdapter",{number:h+1})))})),{isReady:!f.length,reasons:f}}),E2=()=>{const{isReady:e,reasons:t}=H(ele);return{isReady:e,reasons:t}},A7=()=>{const e=te(),t=H(tr),{isReady:n}=E2(),[r,{isLoading:o}]=Yh({fixedCacheKey:"enqueueBatch"}),s=i.useMemo(()=>!n,[n]);return{queueBack:i.useCallback(()=>{s||(e(Nx()),e(GI({tabName:t,prepend:!1})))},[e,s,t]),isLoading:o,isDisabled:s}},tle=fe([pe],({gallery:e})=>{const{autoAddBoardId:t}=e;return{autoAddBoardId:t}}),nle=({prepend:e=!1})=>{const{t}=W(),{isReady:n,reasons:r}=E2(),{autoAddBoardId:o}=H(tle),s=qg(o),[l,{isLoading:c}]=Yh({fixedCacheKey:"enqueueBatch"}),d=i.useMemo(()=>t(c?"queue.enqueueing":n?e?"queue.queueFront":"queue.queueBack":"queue.notReady"),[c,n,e,t]);return a.jsxs($,{flexDir:"column",gap:1,children:[a.jsx(be,{fontWeight:600,children:d}),r.length>0&&a.jsx(cg,{children:r.map((f,m)=>a.jsx(ts,{children:a.jsx(be,{fontWeight:400,children:f})},`${f}.${m}`))}),a.jsx(N7,{}),a.jsxs(be,{fontWeight:400,fontStyle:"oblique 10deg",children:[t("parameters.invoke.addingImagesTo")," ",a.jsx(be,{as:"span",fontWeight:600,children:s||t("boards.uncategorized")})]})]})},T7=i.memo(nle),N7=i.memo(()=>a.jsx(On,{opacity:.2,borderColor:"base.50",_dark:{borderColor:"base.900"}}));N7.displayName="StyledDivider";const rle=()=>a.jsx(Ie,{pos:"relative",w:4,h:4,children:a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",pos:"absolute",top:-.5,insetInlineStart:-.5,w:5,h:5,minW:5,minH:5,filter:"saturate(0)"})}),ole=i.memo(rle),sle=({asIconButton:e,sx:t})=>{const{t:n}=W(),{queueBack:r,isLoading:o,isDisabled:s}=A7();return a.jsx(gi,{asIconButton:e,colorScheme:"accent",label:n("parameters.invoke.invoke"),isDisabled:s,isLoading:o,onClick:r,tooltip:a.jsx(T7,{}),sx:t,icon:e?a.jsx(ole,{}):void 0})},$7=i.memo(sle),L7=()=>{const e=te(),t=H(tr),{isReady:n}=E2(),[r,{isLoading:o}]=Yh({fixedCacheKey:"enqueueBatch"}),s=Mt("prependQueue").isFeatureEnabled,l=i.useMemo(()=>!n||!s,[n,s]);return{queueFront:i.useCallback(()=>{l||(e(Nx()),e(GI({tabName:t,prepend:!0})))},[e,l,t]),isLoading:o,isDisabled:l}},ale=({asIconButton:e,sx:t})=>{const{t:n}=W(),{queueFront:r,isLoading:o,isDisabled:s}=L7();return a.jsx(gi,{asIconButton:e,colorScheme:"base",label:n("queue.queueFront"),isDisabled:s,isLoading:o,onClick:r,tooltip:a.jsx(T7,{prepend:!0}),icon:a.jsx(aae,{}),sx:t})},lle=i.memo(ale),ile=()=>{const e=te(),t=H(f=>f.system.isConnected),{data:n}=Ls(),{t:r}=W(),[o,{isLoading:s}]=KI({fixedCacheKey:"resumeProcessor"}),l=i.useMemo(()=>!!(n!=null&&n.processor.is_started),[n==null?void 0:n.processor.is_started]),c=i.useCallback(async()=>{if(!l)try{await o().unwrap(),e(lt({title:r("queue.resumeSucceeded"),status:"success"}))}catch{e(lt({title:r("queue.resumeFailed"),status:"error"}))}},[l,o,e,r]),d=i.useMemo(()=>!t||l,[t,l]);return{resumeProcessor:c,isLoading:s,isStarted:l,isDisabled:d}},cle=({asIconButton:e})=>{const{t}=W(),{resumeProcessor:n,isLoading:r,isDisabled:o}=ile();return a.jsx(gi,{asIconButton:e,label:t("queue.resume"),tooltip:t("queue.resumeTooltip"),isDisabled:o,isLoading:r,icon:a.jsx(Hte,{}),onClick:n,colorScheme:"green"})},F7=i.memo(cle),ule=fe(pe,({system:e})=>{var t;return{isConnected:e.isConnected,hasSteps:!!e.denoiseProgress,value:(((t=e.denoiseProgress)==null?void 0:t.percentage)??0)*100}}),dle=()=>{const{t:e}=W(),{data:t}=Ls(),{hasSteps:n,value:r,isConnected:o}=H(ule);return a.jsx(x6,{value:r,"aria-label":e("accessibility.invokeProgressBar"),isIndeterminate:o&&!!(t!=null&&t.queue.in_progress)&&!n,h:"full",w:"full",borderRadius:2,colorScheme:"accent"})},fle=i.memo(dle),ple=()=>{const e=Mt("pauseQueue").isFeatureEnabled,t=Mt("resumeQueue").isFeatureEnabled,n=Mt("prependQueue").isFeatureEnabled;return a.jsxs($,{layerStyle:"first",sx:{w:"full",position:"relative",borderRadius:"base",p:2,gap:2,flexDir:"column"},children:[a.jsxs($,{gap:2,w:"full",children:[a.jsxs($t,{isAttached:!0,flexGrow:2,children:[a.jsx($7,{}),n?a.jsx(lle,{asIconButton:!0}):a.jsx(a.Fragment,{}),a.jsx(D7,{asIconButton:!0})]}),a.jsxs($t,{isAttached:!0,children:[t?a.jsx(F7,{asIconButton:!0}):a.jsx(a.Fragment,{}),e?a.jsx(R7,{asIconButton:!0}):a.jsx(a.Fragment,{})]}),a.jsx(P2,{asIconButton:!0})]}),a.jsx($,{h:3,w:"full",children:a.jsx(fle,{})}),a.jsx(B7,{})]})},z7=i.memo(ple),B7=i.memo(()=>{const{t:e}=W(),t=te(),{hasItems:n,pending:r}=Ls(void 0,{selectFromResult:({data:s})=>{if(!s)return{hasItems:!1,pending:0};const{pending:l,in_progress:c}=s.queue;return{hasItems:l+c>0,pending:l}}}),o=i.useCallback(()=>{t(Js("queue"))},[t]);return a.jsxs($,{justifyContent:"space-between",alignItems:"center",pe:1,"data-testid":"queue-count",children:[a.jsx(Wr,{}),a.jsx(ol,{onClick:o,size:"sm",variant:"link",fontWeight:400,opacity:.7,fontStyle:"oblique 10deg",children:n?e("queue.queuedCount",{pending:r}):e("queue.queueEmpty")})]})});B7.displayName="QueueCounts";const{createElement:zc,createContext:mle,forwardRef:H7,useCallback:Qs,useContext:W7,useEffect:la,useImperativeHandle:V7,useLayoutEffect:hle,useMemo:gle,useRef:Zr,useState:md}=xx,d_=xx["useId".toString()],hd=hle,vle=typeof d_=="function"?d_:()=>null;let ble=0;function M2(e=null){const t=vle(),n=Zr(e||t||null);return n.current===null&&(n.current=""+ble++),n.current}const n0=mle(null);n0.displayName="PanelGroupContext";function U7({children:e=null,className:t="",collapsedSize:n=0,collapsible:r=!1,defaultSize:o=null,forwardedRef:s,id:l=null,maxSize:c=null,minSize:d,onCollapse:f=null,onResize:m=null,order:h=null,style:g={},tagName:b="div"}){const y=W7(n0);if(y===null)throw Error("Panel components must be rendered within a PanelGroup container");const x=M2(l),{collapsePanel:w,expandPanel:S,getPanelSize:j,getPanelStyle:_,registerPanel:I,resizePanel:E,units:M,unregisterPanel:D}=y;d==null&&(M==="percentages"?d=10:d=0);const R=Zr({onCollapse:f,onResize:m});la(()=>{R.current.onCollapse=f,R.current.onResize=m});const N=_(x,o),O=Zr({size:f_(N)}),T=Zr({callbacksRef:R,collapsedSize:n,collapsible:r,defaultSize:o,id:x,idWasAutoGenerated:l==null,maxSize:c,minSize:d,order:h});return hd(()=>{O.current.size=f_(N),T.current.callbacksRef=R,T.current.collapsedSize=n,T.current.collapsible=r,T.current.defaultSize=o,T.current.id=x,T.current.idWasAutoGenerated=l==null,T.current.maxSize=c,T.current.minSize=d,T.current.order=h}),hd(()=>(I(x,T),()=>{D(x)}),[h,x,I,D]),V7(s,()=>({collapse:()=>w(x),expand:()=>S(x),getCollapsed(){return O.current.size===0},getId(){return x},getSize(U){return j(x,U)},resize:(U,G)=>E(x,U,G)}),[w,S,j,x,E]),zc(b,{children:e,className:t,"data-panel":"","data-panel-collapsible":r||void 0,"data-panel-id":x,"data-panel-size":parseFloat(""+N.flexGrow).toFixed(1),id:`data-panel-id-${x}`,style:{...N,...g}})}const rl=H7((e,t)=>zc(U7,{...e,forwardedRef:t}));U7.displayName="Panel";rl.displayName="forwardRef(Panel)";function f_(e){const{flexGrow:t}=e;return typeof t=="string"?parseFloat(t):t}const ai=10;function Ju(e,t,n,r,o,s,l,c){const{id:d,panels:f,units:m}=t,h=m==="pixels"?Ga(d):NaN,{sizes:g}=c||{},b=g||s,y=Tr(f),x=b.concat();let w=0;{const _=o<0?r:n,I=y.findIndex(R=>R.current.id===_),E=y[I],M=b[I],D=Zb(m,h,E,M,M+Math.abs(o),e);if(M===D)return b;D===0&&M>0&&l.set(_,M),o=o<0?M-D:D-M}let S=o<0?n:r,j=y.findIndex(_=>_.current.id===S);for(;;){const _=y[j],I=b[j],E=Math.abs(o)-Math.abs(w),M=Zb(m,h,_,I,I-E,e);if(I!==M&&(M===0&&I>0&&l.set(_.current.id,I),w+=I-M,x[j]=M,w.toPrecision(ai).localeCompare(Math.abs(o).toPrecision(ai),void 0,{numeric:!0})>=0))break;if(o<0){if(--j<0)break}else if(++j>=y.length)break}return w===0?b:(S=o<0?r:n,j=y.findIndex(_=>_.current.id===S),x[j]=b[j]+w,x)}function Ki(e,t,n){t.forEach((r,o)=>{const s=e[o];if(!s)return;const{callbacksRef:l,collapsedSize:c,collapsible:d,id:f}=s.current,m=n[f];if(m!==r){n[f]=r;const{onCollapse:h,onResize:g}=l.current;g&&g(r,m),d&&h&&((m==null||m===c)&&r!==c?h(!1):m!==c&&r===c&&h(!0))}})}function xle({groupId:e,panels:t,units:n}){const r=n==="pixels"?Ga(e):NaN,o=Tr(t),s=Array(o.length);let l=0,c=100;for(let d=0;dl.current.id===e);if(n<0)return[null,null];const r=n===t.length-1,o=r?t[n-1].current.id:e,s=r?e:t[n+1].current.id;return[o,s]}function Ga(e){const t=Ld(e);if(t==null)return NaN;const n=t.getAttribute("data-panel-group-direction"),r=O2(e);return n==="horizontal"?t.offsetWidth-r.reduce((o,s)=>o+s.offsetWidth,0):t.offsetHeight-r.reduce((o,s)=>o+s.offsetHeight,0)}function G7(e,t,n){if(e.size===1)return"100";const o=Tr(e).findIndex(l=>l.current.id===t),s=n[o];return s==null?"0":s.toPrecision(ai)}function yle(e){const t=document.querySelector(`[data-panel-id="${e}"]`);return t||null}function Ld(e){const t=document.querySelector(`[data-panel-group-id="${e}"]`);return t||null}function r0(e){const t=document.querySelector(`[data-panel-resize-handle-id="${e}"]`);return t||null}function Cle(e){return K7().findIndex(r=>r.getAttribute("data-panel-resize-handle-id")===e)??null}function K7(){return Array.from(document.querySelectorAll("[data-panel-resize-handle-id]"))}function O2(e){return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${e}"]`))}function D2(e,t,n){var d,f,m,h;const r=r0(t),o=O2(e),s=r?o.indexOf(r):-1,l=((f=(d=n[s])==null?void 0:d.current)==null?void 0:f.id)??null,c=((h=(m=n[s+1])==null?void 0:m.current)==null?void 0:h.id)??null;return[l,c]}function Tr(e){return Array.from(e.values()).sort((t,n)=>{const r=t.current.order,o=n.current.order;return r==null&&o==null?0:r==null?-1:o==null?1:r-o})}function Zb(e,t,n,r,o,s=null){var m;let{collapsedSize:l,collapsible:c,maxSize:d,minSize:f}=n.current;if(e==="pixels"&&(l=l/t*100,d!=null&&(d=d/t*100),f=f/t*100),c){if(r>l){if(o<=f/2+l)return l}else if(!((m=s==null?void 0:s.type)==null?void 0:m.startsWith("key"))&&o100)&&(t.current.minSize=0),o!=null&&(o<0||e==="percentages"&&o>100)&&(t.current.maxSize=null),r!==null&&(r<0||e==="percentages"&&r>100?t.current.defaultSize=null:ro&&(t.current.defaultSize=o))}function C1({groupId:e,panels:t,nextSizes:n,prevSizes:r,units:o}){n=[...n];const s=Tr(t),l=o==="pixels"?Ga(e):NaN;let c=0;for(let d=0;d{const{direction:l,panels:c}=e.current,d=Ld(t);q7(d!=null,`No group found for id "${t}"`);const{height:f,width:m}=d.getBoundingClientRect(),g=O2(t).map(b=>{const y=b.getAttribute("data-panel-resize-handle-id"),x=Tr(c),[w,S]=D2(t,y,x);if(w==null||S==null)return()=>{};let j=0,_=100,I=0,E=0;x.forEach(T=>{const{id:U,maxSize:G,minSize:q}=T.current;U===w?(j=q,_=G??100):(I+=q,E+=G??100)});const M=Math.min(_,100-I),D=Math.max(j,(x.length-1)*100-E),R=G7(c,w,o);b.setAttribute("aria-valuemax",""+Math.round(M)),b.setAttribute("aria-valuemin",""+Math.round(D)),b.setAttribute("aria-valuenow",""+Math.round(parseInt(R)));const N=T=>{if(!T.defaultPrevented)switch(T.key){case"Enter":{T.preventDefault();const U=x.findIndex(G=>G.current.id===w);if(U>=0){const G=x[U],q=o[U];if(q!=null){let Y=0;q.toPrecision(ai)<=G.current.minSize.toPrecision(ai)?Y=l==="horizontal"?m:f:Y=-(l==="horizontal"?m:f);const Q=Ju(T,e.current,w,S,Y,o,s.current,null);o!==Q&&r(Q)}}break}}};b.addEventListener("keydown",N);const O=yle(w);return O!=null&&b.setAttribute("aria-controls",O.id),()=>{b.removeAttribute("aria-valuemax"),b.removeAttribute("aria-valuemin"),b.removeAttribute("aria-valuenow"),b.removeEventListener("keydown",N),O!=null&&b.removeAttribute("aria-controls")}});return()=>{g.forEach(b=>b())}},[e,t,n,s,r,o])}function kle({disabled:e,handleId:t,resizeHandler:n}){la(()=>{if(e||n==null)return;const r=r0(t);if(r==null)return;const o=s=>{if(!s.defaultPrevented)switch(s.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{s.preventDefault(),n(s);break}case"F6":{s.preventDefault();const l=K7(),c=Cle(t);q7(c!==null);const d=s.shiftKey?c>0?c-1:l.length-1:c+1{r.removeEventListener("keydown",o)}},[e,t,n])}function w1(e,t){if(e.length!==t.length)return!1;for(let n=0;nD.current.id===I),M=r[E];if(M.current.collapsible){const D=m[E];(D===0||D.toPrecision(ai)===M.current.minSize.toPrecision(ai))&&(S=S<0?-M.current.minSize*y:M.current.minSize*y)}return S}else return X7(e,n,o,c,d)}function _le(e){return e.type==="keydown"}function Jb(e){return e.type.startsWith("mouse")}function ex(e){return e.type.startsWith("touch")}let tx=null,Wl=null;function Q7(e){switch(e){case"horizontal":return"ew-resize";case"horizontal-max":return"w-resize";case"horizontal-min":return"e-resize";case"vertical":return"ns-resize";case"vertical-max":return"n-resize";case"vertical-min":return"s-resize"}}function Ile(){Wl!==null&&(document.head.removeChild(Wl),tx=null,Wl=null)}function S1(e){if(tx===e)return;tx=e;const t=Q7(e);Wl===null&&(Wl=document.createElement("style"),document.head.appendChild(Wl)),Wl.innerHTML=`*{cursor: ${t}!important;}`}function Ple(e,t=10){let n=null;return(...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...o)},t)}}function Y7(e){return e.map(t=>{const{minSize:n,order:r}=t.current;return r?`${r}:${n}`:`${n}`}).sort((t,n)=>t.localeCompare(n)).join(",")}function Z7(e,t){try{const n=t.getItem(`PanelGroup:sizes:${e}`);if(n){const r=JSON.parse(n);if(typeof r=="object"&&r!=null)return r}}catch{}return null}function Ele(e,t,n){const r=Z7(e,n);if(r){const o=Y7(t);return r[o]??null}return null}function Mle(e,t,n,r){const o=Y7(t),s=Z7(e,r)||{};s[o]=n;try{r.setItem(`PanelGroup:sizes:${e}`,JSON.stringify(s))}catch(l){console.error(l)}}const k1={};function p_(e){try{if(typeof localStorage<"u")e.getItem=t=>localStorage.getItem(t),e.setItem=(t,n)=>{localStorage.setItem(t,n)};else throw new Error("localStorage not supported in this environment")}catch(t){console.error(t),e.getItem=()=>null,e.setItem=()=>{}}}const ed={getItem:e=>(p_(ed),ed.getItem(e)),setItem:(e,t)=>{p_(ed),ed.setItem(e,t)}};function J7({autoSaveId:e,children:t=null,className:n="",direction:r,disablePointerEventsDuringResize:o=!1,forwardedRef:s,id:l=null,onLayout:c,storage:d=ed,style:f={},tagName:m="div",units:h="percentages"}){const g=M2(l),[b,y]=md(null),[x,w]=md(new Map),S=Zr(null);Zr({didLogDefaultSizeWarning:!1,didLogIdAndOrderWarning:!1,didLogInvalidLayoutWarning:!1,prevPanelIds:[]});const j=Zr({onLayout:c});la(()=>{j.current.onLayout=c});const _=Zr({}),[I,E]=md([]),M=Zr(new Map),D=Zr(0),R=Zr({direction:r,id:g,panels:x,sizes:I,units:h});V7(s,()=>({getId:()=>g,getLayout:ee=>{const{sizes:le,units:ae}=R.current;if((ee??ae)==="pixels"){const J=Ga(g);return le.map(re=>re/100*J)}else return le},setLayout:(ee,le)=>{const{id:ae,panels:ce,sizes:J,units:re}=R.current;if((le||re)==="pixels"){const ne=Ga(ae);ee=ee.map(z=>z/ne*100)}const A=_.current,L=Tr(ce),K=C1({groupId:ae,panels:ce,nextSizes:ee,prevSizes:J,units:re});w1(J,K)||(E(K),Ki(L,K,A))}}),[g]),hd(()=>{R.current.direction=r,R.current.id=g,R.current.panels=x,R.current.sizes=I,R.current.units=h}),Sle({committedValuesRef:R,groupId:g,panels:x,setSizes:E,sizes:I,panelSizeBeforeCollapse:M}),la(()=>{const{onLayout:ee}=j.current,{panels:le,sizes:ae}=R.current;if(ae.length>0){ee&&ee(ae);const ce=_.current,J=Tr(le);Ki(J,ae,ce)}},[I]),hd(()=>{const{id:ee,sizes:le,units:ae}=R.current;if(le.length===x.size)return;let ce=null;if(e){const J=Tr(x);ce=Ele(e,J,d)}if(ce!=null){const J=C1({groupId:ee,panels:x,nextSizes:ce,prevSizes:ce,units:ae});E(J)}else{const J=xle({groupId:ee,panels:x,units:ae});E(J)}},[e,x,d]),la(()=>{if(e){if(I.length===0||I.length!==x.size)return;const ee=Tr(x);k1[e]||(k1[e]=Ple(Mle,100)),k1[e](e,ee,I,d)}},[e,x,I,d]),hd(()=>{if(h==="pixels"){const ee=new ResizeObserver(()=>{const{panels:le,sizes:ae}=R.current,ce=C1({groupId:g,panels:le,nextSizes:ae,prevSizes:ae,units:h});w1(ae,ce)||E(ce)});return ee.observe(Ld(g)),()=>{ee.disconnect()}}},[g,h]);const N=Qs((ee,le)=>{const{panels:ae,units:ce}=R.current,re=Tr(ae).findIndex(K=>K.current.id===ee),A=I[re];if((le??ce)==="pixels"){const K=Ga(g);return A/100*K}else return A},[g,I]),O=Qs((ee,le)=>{const{panels:ae}=R.current;return ae.size===0?{flexBasis:0,flexGrow:le??void 0,flexShrink:1,overflow:"hidden"}:{flexBasis:0,flexGrow:G7(ae,ee,I),flexShrink:1,overflow:"hidden",pointerEvents:o&&b!==null?"none":void 0}},[b,o,I]),T=Qs((ee,le)=>{const{units:ae}=R.current;wle(ae,le),w(ce=>{if(ce.has(ee))return ce;const J=new Map(ce);return J.set(ee,le),J})},[]),U=Qs(ee=>ae=>{ae.preventDefault();const{direction:ce,panels:J,sizes:re}=R.current,A=Tr(J),[L,K]=D2(g,ee,A);if(L==null||K==null)return;let ne=jle(ae,g,ee,A,ce,re,S.current);if(ne===0)return;const oe=Ld(g).getBoundingClientRect(),X=ce==="horizontal";document.dir==="rtl"&&X&&(ne=-ne);const Z=X?oe.width:oe.height,me=ne/Z*100,ve=Ju(ae,R.current,L,K,me,re,M.current,S.current),de=!w1(re,ve);if((Jb(ae)||ex(ae))&&D.current!=me&&S1(de?X?"horizontal":"vertical":X?ne<0?"horizontal-min":"horizontal-max":ne<0?"vertical-min":"vertical-max"),de){const ke=_.current;E(ve),Ki(A,ve,ke)}D.current=me},[g]),G=Qs(ee=>{w(le=>{if(!le.has(ee))return le;const ae=new Map(le);return ae.delete(ee),ae})},[]),q=Qs(ee=>{const{panels:le,sizes:ae}=R.current,ce=le.get(ee);if(ce==null)return;const{collapsedSize:J,collapsible:re}=ce.current;if(!re)return;const A=Tr(le),L=A.indexOf(ce);if(L<0)return;const K=ae[L];if(K===J)return;M.current.set(ee,K);const[ne,z]=y1(ee,A);if(ne==null||z==null)return;const X=L===A.length-1?K:J-K,Z=Ju(null,R.current,ne,z,X,ae,M.current,null);if(ae!==Z){const me=_.current;E(Z),Ki(A,Z,me)}},[]),Y=Qs(ee=>{const{panels:le,sizes:ae}=R.current,ce=le.get(ee);if(ce==null)return;const{collapsedSize:J,minSize:re}=ce.current,A=M.current.get(ee)||re;if(!A)return;const L=Tr(le),K=L.indexOf(ce);if(K<0||ae[K]!==J)return;const[z,oe]=y1(ee,L);if(z==null||oe==null)return;const Z=K===L.length-1?J-A:A,me=Ju(null,R.current,z,oe,Z,ae,M.current,null);if(ae!==me){const ve=_.current;E(me),Ki(L,me,ve)}},[]),Q=Qs((ee,le,ae)=>{const{id:ce,panels:J,sizes:re,units:A}=R.current;if((ae||A)==="pixels"){const Qe=Ga(ce);le=le/Qe*100}const L=J.get(ee);if(L==null)return;let{collapsedSize:K,collapsible:ne,maxSize:z,minSize:oe}=L.current;if(A==="pixels"){const Qe=Ga(ce);oe=oe/Qe*100,z!=null&&(z=z/Qe*100)}const X=Tr(J),Z=X.indexOf(L);if(Z<0)return;const me=re[Z];if(me===le)return;ne&&le===K||(le=Math.min(z??100,Math.max(oe,le)));const[ve,de]=y1(ee,X);if(ve==null||de==null)return;const we=Z===X.length-1?me-le:le-me,Re=Ju(null,R.current,ve,de,we,re,M.current,null);if(re!==Re){const Qe=_.current;E(Re),Ki(X,Re,Qe)}},[]),V=gle(()=>({activeHandleId:b,collapsePanel:q,direction:r,expandPanel:Y,getPanelSize:N,getPanelStyle:O,groupId:g,registerPanel:T,registerResizeHandle:U,resizePanel:Q,startDragging:(ee,le)=>{if(y(ee),Jb(le)||ex(le)){const ae=r0(ee);S.current={dragHandleRect:ae.getBoundingClientRect(),dragOffset:X7(le,ee,r),sizes:R.current.sizes}}},stopDragging:()=>{Ile(),y(null),S.current=null},units:h,unregisterPanel:G}),[b,q,r,Y,N,O,g,T,U,Q,h,G]),se={display:"flex",flexDirection:r==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return zc(n0.Provider,{children:zc(m,{children:t,className:n,"data-panel-group":"","data-panel-group-direction":r,"data-panel-group-id":g,"data-panel-group-units":h,style:{...se,...f}}),value:V})}const o0=H7((e,t)=>zc(J7,{...e,forwardedRef:t}));J7.displayName="PanelGroup";o0.displayName="forwardRef(PanelGroup)";function nx({children:e=null,className:t="",disabled:n=!1,id:r=null,onDragging:o,style:s={},tagName:l="div"}){const c=Zr(null),d=Zr({onDragging:o});la(()=>{d.current.onDragging=o});const f=W7(n0);if(f===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{activeHandleId:m,direction:h,groupId:g,registerResizeHandle:b,startDragging:y,stopDragging:x}=f,w=M2(r),S=m===w,[j,_]=md(!1),[I,E]=md(null),M=Qs(()=>{c.current.blur(),x();const{onDragging:N}=d.current;N&&N(!1)},[x]);la(()=>{if(n)E(null);else{const R=b(w);E(()=>R)}},[n,w,b]),la(()=>{if(n||I==null||!S)return;const R=U=>{I(U)},N=U=>{I(U)},T=c.current.ownerDocument;return T.body.addEventListener("contextmenu",M),T.body.addEventListener("mousemove",R),T.body.addEventListener("touchmove",R),T.body.addEventListener("mouseleave",N),window.addEventListener("mouseup",M),window.addEventListener("touchend",M),()=>{T.body.removeEventListener("contextmenu",M),T.body.removeEventListener("mousemove",R),T.body.removeEventListener("touchmove",R),T.body.removeEventListener("mouseleave",N),window.removeEventListener("mouseup",M),window.removeEventListener("touchend",M)}},[h,n,S,I,M]),kle({disabled:n,handleId:w,resizeHandler:I});const D={cursor:Q7(h),touchAction:"none",userSelect:"none"};return zc(l,{children:e,className:t,"data-resize-handle-active":S?"pointer":j?"keyboard":void 0,"data-panel-group-direction":h,"data-panel-group-id":g,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":w,onBlur:()=>_(!1),onFocus:()=>_(!0),onMouseDown:R=>{y(w,R.nativeEvent);const{onDragging:N}=d.current;N&&N(!0)},onMouseUp:M,onTouchCancel:M,onTouchEnd:M,onTouchStart:R=>{y(w,R.nativeEvent);const{onDragging:N}=d.current;N&&N(!0)},ref:c,role:"separator",style:{...D,...s},tabIndex:0})}nx.displayName="PanelResizeHandle";const Ole=e=>{const{direction:t="horizontal",collapsedDirection:n,isCollapsed:r=!1,...o}=e,s=ia("base.100","base.850"),l=ia("base.300","base.700");return t==="horizontal"?a.jsx(nx,{style:{visibility:r?"hidden":"visible",width:r?0:"auto"},children:a.jsx($,{className:"resize-handle-horizontal",sx:{w:n?2.5:4,h:"full",justifyContent:n?n==="left"?"flex-start":"flex-end":"center",alignItems:"center",div:{bg:s},_hover:{div:{bg:l}}},...o,children:a.jsx(Ie,{sx:{w:1,h:"calc(100% - 1rem)",borderRadius:"base",transitionProperty:"common",transitionDuration:"normal"}})})}):a.jsx(nx,{style:{visibility:r?"hidden":"visible",width:r?0:"auto"},children:a.jsx($,{className:"resize-handle-vertical",sx:{w:"full",h:n?2.5:4,alignItems:n?n==="top"?"flex-start":"flex-end":"center",justifyContent:"center",div:{bg:s},_hover:{div:{bg:l}}},...o,children:a.jsx(Ie,{sx:{h:1,w:"calc(100% - 1rem)",borderRadius:"base",transitionProperty:"common",transitionDuration:"normal"}})})})},Bh=i.memo(Ole),R2=()=>{const e=te(),t=H(o=>o.ui.panels),n=i.useCallback(o=>t[o]??"",[t]),r=i.useCallback((o,s)=>{e(TA({name:o,value:s}))},[e]);return{getItem:n,setItem:r}};const Dle=e=>{const{label:t,data:n,fileName:r,withDownload:o=!0,withCopy:s=!0}=e,l=i.useMemo(()=>NA(n)?n:JSON.stringify(n,null,2),[n]),c=i.useCallback(()=>{navigator.clipboard.writeText(l)},[l]),d=i.useCallback(()=>{const m=new Blob([l]),h=document.createElement("a");h.href=URL.createObjectURL(m),h.download=`${r||t}.json`,document.body.appendChild(h),h.click(),h.remove()},[l,t,r]),{t:f}=W();return a.jsxs($,{layerStyle:"second",sx:{borderRadius:"base",flexGrow:1,w:"full",h:"full",position:"relative"},children:[a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"auto",p:4,fontSize:"sm"},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsx("pre",{children:l})})}),a.jsxs($,{sx:{position:"absolute",top:0,insetInlineEnd:0,p:2},children:[o&&a.jsx(Ut,{label:`${f("gallery.download")} ${t} JSON`,children:a.jsx(rs,{"aria-label":`${f("gallery.download")} ${t} JSON`,icon:a.jsx(ou,{}),variant:"ghost",opacity:.7,onClick:d})}),s&&a.jsx(Ut,{label:`${f("gallery.copy")} ${t} JSON`,children:a.jsx(rs,{"aria-label":`${f("gallery.copy")} ${t} JSON`,icon:a.jsx(ru,{}),variant:"ghost",opacity:.7,onClick:c})})]})]})},pl=i.memo(Dle),Rle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(r=>r.id===t);return{data:n==null?void 0:n.data}}),Ale=()=>{const{data:e}=H(Rle);return e?a.jsx(pl,{data:e,label:"Node Data"}):a.jsx(Tn,{label:"No node selected",icon:null})},Tle=i.memo(Ale),Nle=({children:e,maxHeight:t})=>a.jsx($,{sx:{w:"full",h:"full",maxHeight:t,position:"relative"},children:a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}},children:e})})}),Sl=i.memo(Nle),$le=({output:e})=>{const{image:t}=e,{data:n}=jo(t.image_name);return a.jsx(fl,{imageDTO:n})},Lle=i.memo($le),Fle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(s=>s.id===t),r=n?e.nodeTemplates[n.data.type]:void 0,o=e.nodeExecutionStates[t??"__UNKNOWN_NODE__"];return{node:n,template:r,nes:o}}),zle=()=>{const{node:e,template:t,nes:n}=H(Fle),{t:r}=W();return!e||!n||!Jt(e)?a.jsx(Tn,{label:r("nodes.noNodeSelected"),icon:null}):n.outputs.length===0?a.jsx(Tn,{label:r("nodes.noOutputRecorded"),icon:null}):a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsx($,{sx:{position:"relative",flexDir:"column",alignItems:"flex-start",p:1,gap:2,h:"full",w:"full"},children:(t==null?void 0:t.outputType)==="image_output"?n.outputs.map((o,s)=>a.jsx(Lle,{output:o},Hle(o,s))):a.jsx(pl,{data:n.outputs,label:r("nodes.nodeOutputs")})})})})},Ble=i.memo(zle),Hle=(e,t)=>`${e.type}-${t}`,Wle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(o=>o.id===t);return{template:n?e.nodeTemplates[n.data.type]:void 0}}),Vle=()=>{const{template:e}=H(Wle),{t}=W();return e?a.jsx(pl,{data:e,label:t("nodes.nodeTemplate")}):a.jsx(Tn,{label:t("nodes.noNodeSelected"),icon:null})},Ule=i.memo(Vle),Gle=_e((e,t)=>{const n=te(),r=i.useCallback(s=>{s.shiftKey&&n(zr(!0))},[n]),o=i.useCallback(s=>{s.shiftKey||n(zr(!1))},[n]);return a.jsx(B6,{ref:t,onPaste:I2,onKeyDown:r,onKeyUp:o,...e})}),ga=i.memo(Gle),A2=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return o==null?void 0:o.data}),[e]);return H(t)},Kle=({nodeId:e})=>{const t=te(),n=A2(e),{t:r}=W(),o=i.useCallback(s=>{t($A({nodeId:e,notes:s.target.value}))},[t,e]);return Im(n)?a.jsxs(Gt,{children:[a.jsx(ln,{children:r("nodes.notes")}),a.jsx(ga,{value:n==null?void 0:n.notes,onChange:o,rows:10})]}):null},qle=i.memo(Kle),eO=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.label:!1}),[e]);return H(t)},tO=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return!1;const s=o?r.nodeTemplates[o.data.type]:void 0;return s==null?void 0:s.title}),[e]);return H(t)},Xle=({nodeId:e,title:t})=>{const n=te(),r=eO(e),o=tO(e),{t:s}=W(),[l,c]=i.useState(""),d=i.useCallback(async m=>{n(qI({nodeId:e,label:m})),c(r||t||o||s("nodes.problemSettingTitle"))},[n,e,t,o,r,s]),f=i.useCallback(m=>{c(m)},[]);return i.useEffect(()=>{c(r||t||o||s("nodes.problemSettingTitle"))},[r,o,t,s]),a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsxs(ef,{as:$,value:l,onChange:f,onSubmit:d,w:"full",fontWeight:600,children:[a.jsx(Jd,{noOfLines:1}),a.jsx(Zd,{className:"nodrag",_focusVisible:{boxShadow:"none"}})]})})},Qle=i.memo(Xle),Yle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(o=>o.id===t),r=n?e.nodeTemplates[n.data.type]:void 0;return{node:n,template:r}}),Zle=()=>{const{node:e,template:t}=H(Yle),{t:n}=W();return!t||!Jt(e)?a.jsx(Tn,{label:n("nodes.noNodeSelected"),icon:null}):a.jsx(nO,{node:e,template:t})},Jle=i.memo(Zle),nO=i.memo(({node:e,template:t})=>{const{t:n}=W(),r=i.useMemo(()=>$x(e,t),[e,t]);return a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsxs($,{sx:{flexDir:"column",position:"relative",p:1,gap:2,w:"full"},children:[a.jsx(Qle,{nodeId:e.data.id}),a.jsxs(ug,{children:[a.jsxs(Gt,{children:[a.jsx(ln,{children:n("nodes.nodeType")}),a.jsx(be,{fontSize:"sm",fontWeight:600,children:t.title})]}),a.jsx($,{flexDir:"row",alignItems:"center",justifyContent:"space-between",w:"full",children:a.jsxs(Gt,{isInvalid:r,children:[a.jsx(ln,{children:n("nodes.nodeVersion")}),a.jsx(be,{fontSize:"sm",fontWeight:600,children:e.data.version})]})})]}),a.jsx(qle,{nodeId:e.data.id})]})})})});nO.displayName="Content";const eie=()=>{const{t:e}=W();return a.jsx($,{layerStyle:"first",sx:{flexDir:"column",w:"full",h:"full",borderRadius:"base",p:2,gap:2},children:a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[a.jsxs(ui,{children:[a.jsx(mr,{children:e("common.details")}),a.jsx(mr,{children:e("common.outputs")}),a.jsx(mr,{children:e("common.data")}),a.jsx(mr,{children:e("common.template")})]}),a.jsxs(eu,{children:[a.jsx($r,{children:a.jsx(Jle,{})}),a.jsx($r,{children:a.jsx(Ble,{})}),a.jsx($r,{children:a.jsx(Tle,{})}),a.jsx($r,{children:a.jsx(Ule,{})})]})]})})},tie=i.memo(eie),nie={display:"flex",flexDirection:"row",alignItems:"center",gap:10},rie=e=>{const{label:t="",labelPos:n="top",isDisabled:r=!1,isInvalid:o,formControlProps:s,...l}=e,c=te(),d=i.useCallback(m=>{m.shiftKey&&c(zr(!0))},[c]),f=i.useCallback(m=>{m.shiftKey||c(zr(!1))},[c]);return a.jsxs(Gt,{isInvalid:o,isDisabled:r,...s,style:n==="side"?nie:void 0,children:[t!==""&&a.jsx(ln,{children:t}),a.jsx(Qc,{...l,onPaste:I2,onKeyDown:d,onKeyUp:f})]})},yo=i.memo(rie),oie=fe(pe,({workflow:e})=>{const{author:t,name:n,description:r,tags:o,version:s,contact:l,notes:c}=e;return{name:n,author:t,description:r,tags:o,version:s,contact:l,notes:c}}),sie=()=>{const{author:e,name:t,description:n,tags:r,version:o,contact:s,notes:l}=H(oie),c=te(),d=i.useCallback(w=>{c(XI(w.target.value))},[c]),f=i.useCallback(w=>{c(LA(w.target.value))},[c]),m=i.useCallback(w=>{c(FA(w.target.value))},[c]),h=i.useCallback(w=>{c(zA(w.target.value))},[c]),g=i.useCallback(w=>{c(BA(w.target.value))},[c]),b=i.useCallback(w=>{c(HA(w.target.value))},[c]),y=i.useCallback(w=>{c(WA(w.target.value))},[c]),{t:x}=W();return a.jsx(Sl,{children:a.jsxs($,{sx:{flexDir:"column",alignItems:"flex-start",gap:2,h:"full"},children:[a.jsxs($,{sx:{gap:2,w:"full"},children:[a.jsx(yo,{label:x("nodes.workflowName"),value:t,onChange:d}),a.jsx(yo,{label:x("nodes.workflowVersion"),value:o,onChange:h})]}),a.jsxs($,{sx:{gap:2,w:"full"},children:[a.jsx(yo,{label:x("nodes.workflowAuthor"),value:e,onChange:f}),a.jsx(yo,{label:x("nodes.workflowContact"),value:s,onChange:m})]}),a.jsx(yo,{label:x("nodes.workflowTags"),value:r,onChange:b}),a.jsxs(Gt,{as:$,sx:{flexDir:"column"},children:[a.jsx(ln,{children:x("nodes.workflowDescription")}),a.jsx(ga,{onChange:g,value:n,fontSize:"sm",sx:{resize:"none"}})]}),a.jsxs(Gt,{as:$,sx:{flexDir:"column",h:"full"},children:[a.jsx(ln,{children:x("nodes.workflowNotes")}),a.jsx(ga,{onChange:y,value:l,fontSize:"sm",sx:{h:"full",resize:"none"}})]})]})})},aie=i.memo(sie),s0=()=>{const e=H(c=>c.nodes.nodes),t=H(c=>c.nodes.edges),n=H(c=>c.workflow),[r]=kc(e,300),[o]=kc(t,300),[s]=kc(n,300);return i.useMemo(()=>VA({nodes:r,edges:o,workflow:s}),[r,o,s])},lie=()=>{const e=s0(),{t}=W();return a.jsx($,{sx:{flexDir:"column",alignItems:"flex-start",gap:2,h:"full"},children:a.jsx(pl,{data:e,label:t("nodes.workflow")})})},iie=i.memo(lie),cie=({isSelected:e,isHovered:t})=>{const n=i.useMemo(()=>{if(e&&t)return"nodeHoveredSelected.light";if(e)return"nodeSelected.light";if(t)return"nodeHovered.light"},[t,e]),r=i.useMemo(()=>{if(e&&t)return"nodeHoveredSelected.dark";if(e)return"nodeSelected.dark";if(t)return"nodeHovered.dark"},[t,e]);return a.jsx(Ie,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e||t?1:.5,transitionProperty:"common",transitionDuration:"0.1s",pointerEvents:"none",shadow:n,_dark:{shadow:r}}})},rO=i.memo(cie),oO=e=>{const t=te(),n=i.useMemo(()=>fe(pe,({nodes:l})=>l.mouseOverNode===e),[e]),r=H(n),o=i.useCallback(()=>{!r&&t(Yw(e))},[t,e,r]),s=i.useCallback(()=>{r&&t(Yw(null))},[t,r]);return{isMouseOverNode:r,handleMouseOver:o,handleMouseOut:s}},sO=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{var l;const s=o.nodes.find(c=>c.id===e);if(Jt(s))return(l=s==null?void 0:s.data.inputs[t])==null?void 0:l.label}),[t,e]);return H(n)},aO=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{var d;const l=s.nodes.find(f=>f.id===e);if(!Jt(l))return;const c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return(d=c==null?void 0:c[Lx[n]][t])==null?void 0:d.title}),[t,n,e]);return H(r)},lO=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s==null?void 0:s.data.inputs[t]}),[t,e]);return H(n)},iO=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e);if(!Jt(l))return;const c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return c==null?void 0:c[Lx[n]][t]}),[t,n,e]);return H(r)},cO=e=>{const{t}=W();return i.useMemo(()=>{if(!e)return"";const{name:r}=e;return e.isCollection?t("nodes.collectionFieldType",{name:r}):e.isCollectionOrScalar?t("nodes.collectionOrScalarFieldType",{name:r}):r},[e,t])},uie=({nodeId:e,fieldName:t,kind:n})=>{const r=lO(e,t),o=iO(e,t,n),s=UA(o),l=cO(o==null?void 0:o.type),{t:c}=W(),d=i.useMemo(()=>GA(r)?r.label&&(o!=null&&o.title)?`${r.label} (${o.title})`:r.label&&!o?r.label:!r.label&&o?o.title:c("nodes.unknownField"):(o==null?void 0:o.title)||c("nodes.unknownField"),[r,o,c]);return a.jsxs($,{sx:{flexDir:"column"},children:[a.jsx(be,{sx:{fontWeight:600},children:d}),o&&a.jsx(be,{sx:{opacity:.7,fontStyle:"oblique 5deg"},children:o.description}),l&&a.jsxs(be,{children:[c("parameters.type"),": ",l]}),s&&a.jsxs(be,{children:[c("common.input"),": ",KA(o.input)]})]})},T2=i.memo(uie),die=_e((e,t)=>{const{nodeId:n,fieldName:r,kind:o,isMissingInput:s=!1,withTooltip:l=!1}=e,c=sO(n,r),d=aO(n,r,o),{t:f}=W(),m=te(),[h,g]=i.useState(c||d||f("nodes.unknownField")),b=i.useCallback(async x=>{x&&(x===c||x===d)||(g(x||d||f("nodes.unknownField")),m(qA({nodeId:n,fieldName:r,label:x})))},[c,d,m,n,r,f]),y=i.useCallback(x=>{g(x)},[]);return i.useEffect(()=>{g(c||d||f("nodes.unknownField"))},[c,d,f]),a.jsx(Ut,{label:l?a.jsx(T2,{nodeId:n,fieldName:r,kind:"input"}):void 0,openDelay:Zh,placement:"top",hasArrow:!0,children:a.jsx($,{ref:t,sx:{position:"relative",overflow:"hidden",alignItems:"center",justifyContent:"flex-start",gap:1,h:"full"},children:a.jsxs(ef,{value:h,onChange:y,onSubmit:b,as:$,sx:{position:"relative",alignItems:"center",h:"full"},children:[a.jsx(Jd,{sx:{p:0,fontWeight:s?600:400,textAlign:"left",_hover:{fontWeight:"600 !important"}},noOfLines:1}),a.jsx(Zd,{className:"nodrag",sx:{p:0,w:"full",fontWeight:600,color:"base.900",_dark:{color:"base.100"},_focusVisible:{p:0,textAlign:"left",boxShadow:"none"}}}),a.jsx(dO,{})]})})})}),uO=i.memo(die),dO=i.memo(()=>{const{isEditing:e,getEditButtonProps:t}=K3(),n=i.useCallback(r=>{const{onClick:o}=t();o&&(o(r),r.preventDefault())},[t]);return e?null:a.jsx($,{onClick:n,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,cursor:"text"})});dO.displayName="EditableControls";const fie=e=>{var c;const{nodeId:t,field:n}=e,r=te(),{data:o,hasBoards:s}=Wd(void 0,{selectFromResult:({data:d})=>{const f=[{label:"None",value:"none"}];return d==null||d.forEach(({board_id:m,board_name:h})=>{f.push({label:h,value:m})}),{data:f,hasBoards:f.length>1}}}),l=i.useCallback(d=>{r(XA({nodeId:t,fieldName:n.name,value:d&&d!=="none"?{board_id:d}:void 0}))},[r,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",value:((c=n.value)==null?void 0:c.board_id)??"none",data:o,onChange:l,disabled:!s})},pie=i.memo(fie),mie=e=>{const{nodeId:t,field:n}=e,r=te(),o=i.useCallback(s=>{r(QA({nodeId:t,fieldName:n.name,value:s.target.checked}))},[r,n.name,t]);return a.jsx(Iy,{className:"nodrag",onChange:o,isChecked:n.value})},hie=i.memo(mie);function a0(){return(a0=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function rx(e){var t=i.useRef(e),n=i.useRef(function(r){t.current&&t.current(r)});return t.current=e,n.current}var Bc=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e0:w.buttons>0)&&o.current?s(m_(o.current,w,c.current)):x(!1)},y=function(){return x(!1)};function x(w){var S=d.current,j=ox(o.current),_=w?j.addEventListener:j.removeEventListener;_(S?"touchmove":"mousemove",b),_(S?"touchend":"mouseup",y)}return[function(w){var S=w.nativeEvent,j=o.current;if(j&&(h_(S),!function(I,E){return E&&!gd(I)}(S,d.current)&&j)){if(gd(S)){d.current=!0;var _=S.changedTouches||[];_.length&&(c.current=_[0].identifier)}j.focus(),s(m_(j,S,c.current)),x(!0)}},function(w){var S=w.which||w.keyCode;S<37||S>40||(w.preventDefault(),l({left:S===39?.05:S===37?-.05:0,top:S===40?.05:S===38?-.05:0}))},x]},[l,s]),m=f[0],h=f[1],g=f[2];return i.useEffect(function(){return g},[g]),B.createElement("div",a0({},r,{onTouchStart:m,onMouseDown:m,className:"react-colorful__interactive",ref:o,onKeyDown:h,tabIndex:0,role:"slider"}))}),l0=function(e){return e.filter(Boolean).join(" ")},$2=function(e){var t=e.color,n=e.left,r=e.top,o=r===void 0?.5:r,s=l0(["react-colorful__pointer",e.className]);return B.createElement("div",{className:s,style:{top:100*o+"%",left:100*n+"%"}},B.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},Sr=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n},pO=function(e){var t=e.s,n=e.v,r=e.a,o=(200-t)*n/100;return{h:Sr(e.h),s:Sr(o>0&&o<200?t*n/100/(o<=100?o:200-o)*100:0),l:Sr(o/2),a:Sr(r,2)}},sx=function(e){var t=pO(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},j1=function(e){var t=pO(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},gie=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var s=Math.floor(t),l=r*(1-n),c=r*(1-(t-s)*n),d=r*(1-(1-t+s)*n),f=s%6;return{r:Sr(255*[r,c,l,l,d,r][f]),g:Sr(255*[d,r,r,c,l,l][f]),b:Sr(255*[l,l,d,r,r,c][f]),a:Sr(o,2)}},vie=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,s=Math.max(t,n,r),l=s-Math.min(t,n,r),c=l?s===t?(n-r)/l:s===n?2+(r-t)/l:4+(t-n)/l:0;return{h:Sr(60*(c<0?c+6:c)),s:Sr(s?l/s*100:0),v:Sr(s/255*100),a:o}},bie=B.memo(function(e){var t=e.hue,n=e.onChange,r=l0(["react-colorful__hue",e.className]);return B.createElement("div",{className:r},B.createElement(N2,{onMove:function(o){n({h:360*o.left})},onKey:function(o){n({h:Bc(t+360*o.left,0,360)})},"aria-label":"Hue","aria-valuenow":Sr(t),"aria-valuemax":"360","aria-valuemin":"0"},B.createElement($2,{className:"react-colorful__hue-pointer",left:t/360,color:sx({h:t,s:100,v:100,a:1})})))}),xie=B.memo(function(e){var t=e.hsva,n=e.onChange,r={backgroundColor:sx({h:t.h,s:100,v:100,a:1})};return B.createElement("div",{className:"react-colorful__saturation",style:r},B.createElement(N2,{onMove:function(o){n({s:100*o.left,v:100-100*o.top})},onKey:function(o){n({s:Bc(t.s+100*o.left,0,100),v:Bc(t.v-100*o.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+Sr(t.s)+"%, Brightness "+Sr(t.v)+"%"},B.createElement($2,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:sx(t)})))}),mO=function(e,t){if(e===t)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0};function yie(e,t,n){var r=rx(n),o=i.useState(function(){return e.toHsva(t)}),s=o[0],l=o[1],c=i.useRef({color:t,hsva:s});i.useEffect(function(){if(!e.equal(t,c.current.color)){var f=e.toHsva(t);c.current={hsva:f,color:t},l(f)}},[t,e]),i.useEffect(function(){var f;mO(s,c.current.hsva)||e.equal(f=e.fromHsva(s),c.current.color)||(c.current={hsva:s,color:f},r(f))},[s,e,r]);var d=i.useCallback(function(f){l(function(m){return Object.assign({},m,f)})},[]);return[s,d]}var Cie=typeof window<"u"?i.useLayoutEffect:i.useEffect,wie=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},g_=new Map,Sie=function(e){Cie(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!g_.has(t)){var n=t.createElement("style");n.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,g_.set(t,n);var r=wie();r&&n.setAttribute("nonce",r),t.head.appendChild(n)}},[])},kie=function(e){var t=e.className,n=e.hsva,r=e.onChange,o={backgroundImage:"linear-gradient(90deg, "+j1(Object.assign({},n,{a:0}))+", "+j1(Object.assign({},n,{a:1}))+")"},s=l0(["react-colorful__alpha",t]),l=Sr(100*n.a);return B.createElement("div",{className:s},B.createElement("div",{className:"react-colorful__alpha-gradient",style:o}),B.createElement(N2,{onMove:function(c){r({a:c.left})},onKey:function(c){r({a:Bc(n.a+c.left)})},"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},B.createElement($2,{className:"react-colorful__alpha-pointer",left:n.a,color:j1(n)})))},jie=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,s=e.onChange,l=fO(e,["className","colorModel","color","onChange"]),c=i.useRef(null);Sie(c);var d=yie(n,o,s),f=d[0],m=d[1],h=l0(["react-colorful",t]);return B.createElement("div",a0({},l,{ref:c,className:h}),B.createElement(xie,{hsva:f,onChange:m}),B.createElement(bie,{hue:f.h,onChange:m}),B.createElement(kie,{hsva:f,onChange:m,className:"react-colorful__last-control"}))},_ie={defaultColor:{r:0,g:0,b:0,a:1},toHsva:vie,fromHsva:gie,equal:mO},hO=function(e){return B.createElement(jie,a0({},e,{colorModel:_ie}))};const Iie=e=>{const{nodeId:t,field:n}=e,r=te(),o=i.useCallback(s=>{r(YA({nodeId:t,fieldName:n.name,value:s}))},[r,n.name,t]);return a.jsx(hO,{className:"nodrag",color:n.value,onChange:o})},Pie=i.memo(Iie),gO=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=ZA.safeParse({base_model:n,model_name:o});if(!s.success){t.error({controlNetModelId:e,errors:s.error.format()},"Failed to parse ControlNet model id");return}return s.data},Eie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Ex(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/controlnet/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=gO(f);m&&o(JA({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},Mie=i.memo(Eie),Oie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),s=i.useCallback(l=>{o(eT({nodeId:t,fieldName:n.name,value:l.target.value}))},[o,n.name,t]);return a.jsx(w6,{className:"nowheel nodrag",onChange:s,value:n.value,children:r.options.map(l=>a.jsx("option",{value:l,children:r.ui_choice_labels?r.ui_choice_labels[l]:l},l))})},Die=i.memo(Oie),Rie=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=tT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({ipAdapterModelId:e,errors:s.error.format()},"Failed to parse IP-Adapter model id");return}return s.data},Aie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Ox(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/ip_adapter/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=Rie(f);m&&o(nT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},Tie=i.memo(Aie),Nie=e=>{var h;const{nodeId:t,field:n}=e,r=te(),o=H(g=>g.system.isConnected),{currentData:s,isError:l}=jo(((h=n.value)==null?void 0:h.image_name)??Br),c=i.useCallback(()=>{r(rT({nodeId:t,fieldName:n.name,value:void 0}))},[r,n.name,t]),d=i.useMemo(()=>{if(s)return{id:`node-${t}-${n.name}`,payloadType:"IMAGE_DTO",payload:{imageDTO:s}}},[n.name,s,t]),f=i.useMemo(()=>({id:`node-${t}-${n.name}`,actionType:"SET_NODES_IMAGE",context:{nodeId:t,fieldName:n.name}}),[n.name,t]),m=i.useMemo(()=>({type:"SET_NODES_IMAGE",nodeId:t,fieldName:n.name}),[t,n.name]);return i.useEffect(()=>{o&&l&&c()},[c,o,l]),a.jsx($,{className:"nodrag",sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(fl,{imageDTO:s,droppableData:f,draggableData:d,postUploadAction:m,useThumbailFallback:!0,uploadElement:a.jsx(vO,{}),dropLabel:a.jsx(bO,{}),minSize:8,children:a.jsx(jc,{onClick:c,icon:s?a.jsx(Ng,{}):void 0,tooltip:"Reset Image"})})})},$ie=i.memo(Nie),vO=i.memo(()=>{const{t:e}=W();return a.jsx(be,{fontSize:16,fontWeight:600,children:e("gallery.dropOrUpload")})});vO.displayName="UploadElement";const bO=i.memo(()=>{const{t:e}=W();return a.jsx(be,{fontSize:16,fontWeight:600,children:e("gallery.drop")})});bO.displayName="DropLabel";const Lie=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=oT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({loraModelId:e,errors:s.error.format()},"Failed to parse LoRA model id");return}return s.data},Fie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Vd(),{t:l}=W(),c=i.useMemo(()=>{if(!s)return[];const h=[];return qn(s.entities,(g,b)=>{g&&h.push({value:b,label:g.model_name,group:xn[g.base_model]})}),h.sort((g,b)=>g.disabled&&!b.disabled?1:-1)},[s]),d=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/lora/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r==null?void 0:r.base_model,r==null?void 0:r.model_name]),f=i.useCallback(h=>{if(!h)return;const g=Lie(h);g&&o(sT({nodeId:t,fieldName:n.name,value:g}))},[o,n.name,t]),m=i.useCallback((h,g)=>{var b;return((b=g.label)==null?void 0:b.toLowerCase().includes(h.toLowerCase().trim()))||g.value.toLowerCase().includes(h.toLowerCase().trim())},[]);return(s==null?void 0:s.ids.length)===0?a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:l("models.noLoRAsLoaded")})}):a.jsx(sn,{className:"nowheel nodrag",value:(d==null?void 0:d.id)??null,placeholder:c.length>0?l("models.selectLoRA"):l("models.noLoRAsAvailable"),data:c,nothingFound:l("models.noMatchingLoRAs"),itemComponent:xl,disabled:c.length===0,filter:m,error:!d,onChange:f,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}})},zie=i.memo(Fie),i0=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=aT.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data};function cu(e){const{iconMode:t=!1,...n}=e,r=te(),{t:o}=W(),[s,{isLoading:l}]=lT(),c=i.useCallback(()=>{s().unwrap().then(d=>{r(lt(rn({title:`${o("modelManager.modelsSynced")}`,status:"success"})))}).catch(d=>{d&&r(lt(rn({title:`${o("modelManager.modelSyncFailed")}`,status:"error"})))})},[r,s,o]);return t?a.jsx(Fe,{icon:a.jsx(XM,{}),tooltip:o("modelManager.syncModels"),"aria-label":o("modelManager.syncModels"),isLoading:l,onClick:c,size:"sm",...n}):a.jsx(Xe,{isLoading:l,onClick:c,minW:"max-content",...n,children:o("modelManager.syncModels")})}const Bie=e=>{var y,x;const{nodeId:t,field:n}=e,r=te(),o=Mt("syncModels").isFeatureEnabled,{t:s}=W(),{data:l,isLoading:c}=vd(Zw),{data:d,isLoading:f}=as(Zw),m=i.useMemo(()=>c||f,[c,f]),h=i.useMemo(()=>{if(!d)return[];const w=[];return qn(d.entities,(S,j)=>{S&&w.push({value:j,label:S.model_name,group:xn[S.base_model]})}),l&&qn(l.entities,(S,j)=>{S&&w.push({value:j,label:S.model_name,group:xn[S.base_model]})}),w},[d,l]),g=i.useMemo(()=>{var w,S,j,_;return((d==null?void 0:d.entities[`${(w=n.value)==null?void 0:w.base_model}/main/${(S=n.value)==null?void 0:S.model_name}`])||(l==null?void 0:l.entities[`${(j=n.value)==null?void 0:j.base_model}/onnx/${(_=n.value)==null?void 0:_.model_name}`]))??null},[(y=n.value)==null?void 0:y.base_model,(x=n.value)==null?void 0:x.model_name,d==null?void 0:d.entities,l==null?void 0:l.entities]),b=i.useCallback(w=>{if(!w)return;const S=i0(w);S&&r(QI({nodeId:t,fieldName:n.name,value:S}))},[r,n.name,t]);return a.jsxs($,{sx:{w:"full",alignItems:"center",gap:2},children:[m?a.jsx(be,{variant:"subtext",children:"Loading..."}):a.jsx(sn,{className:"nowheel nodrag",tooltip:g==null?void 0:g.description,value:g==null?void 0:g.id,placeholder:h.length>0?s("models.selectModel"):s("models.noModelsAvailable"),data:h,error:!g,disabled:h.length===0,onChange:b,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),o&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},Hie=i.memo(Bie),Wie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),[s,l]=i.useState(String(n.value)),c=i.useMemo(()=>r.type.name==="IntegerField",[r.type]),d=i.useCallback(f=>{l(f),f.match(zh)||o(iT({nodeId:t,fieldName:n.name,value:c?Math.floor(Number(f)):Number(f)}))},[o,n.name,c,t]);return i.useEffect(()=>{!s.match(zh)&&n.value!==Number(s)&&l(String(n.value))},[n.value,s]),a.jsxs(mg,{onChange:d,value:s,step:c?1:.1,precision:c?0:3,children:[a.jsx(gg,{className:"nodrag"}),a.jsxs(hg,{children:[a.jsx(bg,{}),a.jsx(vg,{})]})]})},Vie=i.memo(Wie),Uie=e=>{var h,g;const{nodeId:t,field:n}=e,r=te(),{t:o}=W(),s=Mt("syncModels").isFeatureEnabled,{data:l,isLoading:c}=as(Fx),d=i.useMemo(()=>{if(!l)return[];const b=[];return qn(l.entities,(y,x)=>{y&&b.push({value:x,label:y.model_name,group:xn[y.base_model]})}),b},[l]),f=i.useMemo(()=>{var b,y;return(l==null?void 0:l.entities[`${(b=n.value)==null?void 0:b.base_model}/main/${(y=n.value)==null?void 0:y.model_name}`])??null},[(h=n.value)==null?void 0:h.base_model,(g=n.value)==null?void 0:g.model_name,l==null?void 0:l.entities]),m=i.useCallback(b=>{if(!b)return;const y=i0(b);y&&r(cT({nodeId:t,fieldName:n.name,value:y}))},[r,n.name,t]);return c?a.jsx(sn,{label:o("modelManager.model"),placeholder:o("models.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{className:"nowheel nodrag",tooltip:f==null?void 0:f.description,value:f==null?void 0:f.id,placeholder:d.length>0?o("models.selectModel"):o("models.noModelsAvailable"),data:d,error:!f,disabled:d.length===0,onChange:m,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),s&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},Gie=i.memo(Uie),Kie=e=>{var g,b;const{nodeId:t,field:n}=e,r=te(),{t:o}=W(),s=Mt("syncModels").isFeatureEnabled,{data:l}=vd(Jw),{data:c,isLoading:d}=as(Jw),f=i.useMemo(()=>{if(!c)return[];const y=[];return qn(c.entities,(x,w)=>{!x||x.base_model!=="sdxl"||y.push({value:w,label:x.model_name,group:xn[x.base_model]})}),l&&qn(l.entities,(x,w)=>{!x||x.base_model!=="sdxl"||y.push({value:w,label:x.model_name,group:xn[x.base_model]})}),y},[c,l]),m=i.useMemo(()=>{var y,x,w,S;return((c==null?void 0:c.entities[`${(y=n.value)==null?void 0:y.base_model}/main/${(x=n.value)==null?void 0:x.model_name}`])||(l==null?void 0:l.entities[`${(w=n.value)==null?void 0:w.base_model}/onnx/${(S=n.value)==null?void 0:S.model_name}`]))??null},[(g=n.value)==null?void 0:g.base_model,(b=n.value)==null?void 0:b.model_name,c==null?void 0:c.entities,l==null?void 0:l.entities]),h=i.useCallback(y=>{if(!y)return;const x=i0(y);x&&r(QI({nodeId:t,fieldName:n.name,value:x}))},[r,n.name,t]);return d?a.jsx(sn,{label:o("modelManager.model"),placeholder:o("models.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{className:"nowheel nodrag",tooltip:m==null?void 0:m.description,value:m==null?void 0:m.id,placeholder:f.length>0?o("models.selectModel"):o("models.noModelsAvailable"),data:f,error:!m,disabled:f.length===0,onChange:h,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),s&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},qie=i.memo(Kie),Xie=fe([pe],({ui:e})=>{const{favoriteSchedulers:t}=e;return{data:Hr(Gh,(r,o)=>({value:o,label:r,group:t.includes(o)?"Favorites":void 0})).sort((r,o)=>r.label.localeCompare(o.label))}}),Qie=e=>{const{nodeId:t,field:n}=e,r=te(),{data:o}=H(Xie),s=i.useCallback(l=>{l&&r(uT({nodeId:t,fieldName:n.name,value:l}))},[r,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",value:n.value,data:o,onChange:s})},Yie=i.memo(Qie),Zie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),s=i.useCallback(l=>{o(dT({nodeId:t,fieldName:n.name,value:l.target.value}))},[o,n.name,t]);return r.ui_component==="textarea"?a.jsx(ga,{className:"nodrag",onChange:s,value:n.value,rows:5,resize:"none"}):a.jsx(yo,{onChange:s,value:n.value})},Jie=i.memo(Zie),ece=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=fT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({t2iAdapterModelId:e,errors:s.error.format()},"Failed to parse T2I-Adapter model id");return}return s.data},tce=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Mx(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/t2i_adapter/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=ece(f);m&&o(pT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},nce=i.memo(tce),xO=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=mT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({vaeModelId:e,errors:s.error.format()},"Failed to parse VAE model id");return}return s.data},rce=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=YI(),l=i.useMemo(()=>{if(!s)return[];const f=[{value:"default",label:"Default",group:"Default"}];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f.sort((m,h)=>m.disabled&&!h.disabled?1:-1)},[s]),c=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r]),d=i.useCallback(f=>{if(!f)return;const m=xO(f);m&&o(hT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",itemComponent:xl,tooltip:c==null?void 0:c.description,value:(c==null?void 0:c.id)??"default",placeholder:"Default",data:l,onChange:d,disabled:l.length===0,error:!c,clearable:!0,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}})},oce=i.memo(rce),sce=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=lO(e,t),o=iO(e,t,"input");return(o==null?void 0:o.fieldKind)==="output"?a.jsxs(Ie,{p:2,children:[n("nodes.outputFieldInInput"),": ",r==null?void 0:r.type.name]}):gT(r)&&vT(o)?a.jsx(Jie,{nodeId:e,field:r,fieldTemplate:o}):bT(r)&&xT(o)?a.jsx(hie,{nodeId:e,field:r,fieldTemplate:o}):yT(r)&&CT(o)||wT(r)&&ST(o)?a.jsx(Vie,{nodeId:e,field:r,fieldTemplate:o}):kT(r)&&jT(o)?a.jsx(Die,{nodeId:e,field:r,fieldTemplate:o}):_T(r)&&IT(o)?a.jsx($ie,{nodeId:e,field:r,fieldTemplate:o}):PT(r)&&ET(o)?a.jsx(pie,{nodeId:e,field:r,fieldTemplate:o}):MT(r)&&OT(o)?a.jsx(Hie,{nodeId:e,field:r,fieldTemplate:o}):DT(r)&&RT(o)?a.jsx(Gie,{nodeId:e,field:r,fieldTemplate:o}):AT(r)&&TT(o)?a.jsx(oce,{nodeId:e,field:r,fieldTemplate:o}):NT(r)&&$T(o)?a.jsx(zie,{nodeId:e,field:r,fieldTemplate:o}):LT(r)&&FT(o)?a.jsx(Mie,{nodeId:e,field:r,fieldTemplate:o}):zT(r)&&BT(o)?a.jsx(Tie,{nodeId:e,field:r,fieldTemplate:o}):HT(r)&&WT(o)?a.jsx(nce,{nodeId:e,field:r,fieldTemplate:o}):VT(r)&&UT(o)?a.jsx(Pie,{nodeId:e,field:r,fieldTemplate:o}):GT(r)&&KT(o)?a.jsx(qie,{nodeId:e,field:r,fieldTemplate:o}):qT(r)&&XT(o)?a.jsx(Yie,{nodeId:e,field:r,fieldTemplate:o}):r&&o?null:a.jsx(Ie,{p:1,children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownFieldType",{type:r==null?void 0:r.type.name})})})},yO=i.memo(sce),ace=({nodeId:e,fieldName:t})=>{const n=te(),{isMouseOverNode:r,handleMouseOut:o,handleMouseOver:s}=oO(e),{t:l}=W(),c=i.useCallback(()=>{n(ZI({nodeId:e,fieldName:t}))},[n,t,e]);return a.jsxs($,{onMouseEnter:s,onMouseLeave:o,layerStyle:"second",sx:{position:"relative",borderRadius:"base",w:"full",p:2},children:[a.jsxs(Gt,{as:$,sx:{flexDir:"column",gap:1,flexShrink:1},children:[a.jsxs(ln,{sx:{display:"flex",alignItems:"center",mb:0},children:[a.jsx(uO,{nodeId:e,fieldName:t,kind:"input"}),a.jsx(Wr,{}),a.jsx(Ut,{label:a.jsx(T2,{nodeId:e,fieldName:t,kind:"input"}),openDelay:Zh,placement:"top",hasArrow:!0,children:a.jsx($,{h:"full",alignItems:"center",children:a.jsx(An,{as:HM})})}),a.jsx(Fe,{"aria-label":l("nodes.removeLinearView"),tooltip:l("nodes.removeLinearView"),variant:"ghost",size:"sm",onClick:c,icon:a.jsx(ao,{})})]}),a.jsx(yO,{nodeId:e,fieldName:t})]}),a.jsx(rO,{isSelected:!1,isHovered:r})]})},lce=i.memo(ace),ice=fe(pe,({workflow:e})=>({fields:e.exposedFields})),cce=()=>{const{fields:e}=H(ice),{t}=W();return a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsx($,{sx:{position:"relative",flexDir:"column",alignItems:"flex-start",p:1,gap:2,h:"full",w:"full"},children:e.length?e.map(({nodeId:n,fieldName:r})=>a.jsx(lce,{nodeId:n,fieldName:r},`${n}.${r}`)):a.jsx(Tn,{label:t("nodes.noFieldsLinearview"),icon:null})})})})},uce=i.memo(cce),dce=()=>{const{t:e}=W();return a.jsx($,{layerStyle:"first",sx:{flexDir:"column",w:"full",h:"full",borderRadius:"base",p:2,gap:2},children:a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[a.jsxs(ui,{children:[a.jsx(mr,{children:e("common.linear")}),a.jsx(mr,{children:e("common.details")}),a.jsx(mr,{children:"JSON"})]}),a.jsxs(eu,{children:[a.jsx($r,{children:a.jsx(uce,{})}),a.jsx($r,{children:a.jsx(aie,{})}),a.jsx($r,{children:a.jsx(iie,{})})]})]})})},fce=i.memo(dce),pce=()=>{const[e,t]=i.useState(!1),[n,r]=i.useState(!1),o=i.useRef(null),s=R2(),l=i.useCallback(()=>{o.current&&o.current.setLayout([50,50])},[]);return a.jsxs($,{sx:{flexDir:"column",gap:2,height:"100%",width:"100%"},children:[a.jsx(z7,{}),a.jsx($,{layerStyle:"first",sx:{w:"full",position:"relative",borderRadius:"base",p:2,pb:3,gap:2,flexDir:"column"},children:a.jsx(ds,{asSlider:!0})}),a.jsxs(o0,{ref:o,id:"workflow-panel-group",autoSaveId:"workflow-panel-group",direction:"vertical",style:{height:"100%",width:"100%"},storage:s,children:[a.jsx(rl,{id:"workflow",collapsible:!0,onCollapse:t,minSize:25,children:a.jsx(fce,{})}),a.jsx(Bh,{direction:"vertical",onDoubleClick:l,collapsedDirection:e?"top":n?"bottom":void 0}),a.jsx(rl,{id:"inspector",collapsible:!0,onCollapse:r,minSize:25,children:a.jsx(tie,{})})]})]})},mce=i.memo(pce),v_=(e,t)=>{const n=i.useRef(null),[r,o]=i.useState(()=>{var f;return!!((f=n.current)!=null&&f.getCollapsed())}),s=i.useCallback(()=>{var f;(f=n.current)!=null&&f.getCollapsed()?Jr.flushSync(()=>{var m;(m=n.current)==null||m.expand()}):Jr.flushSync(()=>{var m;(m=n.current)==null||m.collapse()})},[]),l=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.expand()})},[]),c=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.collapse()})},[]),d=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.resize(e,t)})},[e,t]);return{ref:n,minSize:e,isCollapsed:r,setIsCollapsed:o,reset:d,toggle:s,expand:l,collapse:c}},hce=({isGalleryCollapsed:e,galleryPanelRef:t})=>{const{t:n}=W(),r=i.useCallback(()=>{var o;(o=t.current)==null||o.expand()},[t]);return e?a.jsx(Uc,{children:a.jsx($,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineEnd:"1.63rem",children:a.jsx(Fe,{tooltip:"Show Gallery (G)",tooltipProps:{placement:"top"},"aria-label":n("accessibility.showGalleryPanel"),onClick:r,icon:a.jsx(Jse,{}),sx:{p:0,px:3,h:48,borderEndRadius:0}})})}):null},gce=i.memo(hce),Jp={borderStartRadius:0,flexGrow:1},vce=({isSidePanelCollapsed:e,sidePanelRef:t})=>{const{t:n}=W(),r=i.useCallback(()=>{var o;(o=t.current)==null||o.expand()},[t]);return e?a.jsx(Uc,{children:a.jsxs($,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineStart:"5.13rem",direction:"column",gap:2,h:48,children:[a.jsxs($t,{isAttached:!0,orientation:"vertical",flexGrow:3,children:[a.jsx(Fe,{tooltip:n("parameters.showOptionsPanel"),"aria-label":n("parameters.showOptionsPanel"),onClick:r,sx:Jp,icon:a.jsx(qM,{})}),a.jsx($7,{asIconButton:!0,sx:Jp}),a.jsx(D7,{asIconButton:!0,sx:Jp})]}),a.jsx(P2,{asIconButton:!0,sx:Jp})]})}):null},bce=i.memo(vce),xce=e=>{const{label:t,activeLabel:n,children:r,defaultIsOpen:o=!1}=e,{isOpen:s,onToggle:l}=sr({defaultIsOpen:o}),{colorMode:c}=ya();return a.jsxs(Ie,{children:[a.jsxs($,{onClick:l,sx:{alignItems:"center",p:2,px:4,gap:2,borderTopRadius:"base",borderBottomRadius:s?0:"base",bg:Te("base.250","base.750")(c),color:Te("base.900","base.100")(c),_hover:{bg:Te("base.300","base.700")(c)},fontSize:"sm",fontWeight:600,cursor:"pointer",transitionProperty:"common",transitionDuration:"normal",userSelect:"none"},"data-testid":`${t} collapsible`,children:[t,a.jsx(hr,{children:n&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(be,{sx:{color:"accent.500",_dark:{color:"accent.300"}},children:n})},"statusText")}),a.jsx(Wr,{}),a.jsx(Kg,{sx:{w:"1rem",h:"1rem",transform:s?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]}),a.jsx(Xd,{in:s,animateOpacity:!0,style:{overflow:"unset"},children:a.jsx(Ie,{sx:{p:4,pb:4,borderBottomRadius:"base",bg:"base.150",_dark:{bg:"base.800"}},children:r})})]})},_r=i.memo(xce),yce=fe(pe,e=>{const{maxPrompts:t,combinatorial:n}=e.dynamicPrompts,{min:r,sliderMax:o,inputMax:s}=e.config.sd.dynamicPrompts.maxPrompts;return{maxPrompts:t,min:r,sliderMax:o,inputMax:s,isDisabled:!n}}),Cce=()=>{const{maxPrompts:e,min:t,sliderMax:n,inputMax:r,isDisabled:o}=H(yce),s=te(),{t:l}=W(),c=i.useCallback(f=>{s(QT(f))},[s]),d=i.useCallback(()=>{s(YT())},[s]);return a.jsx(Ot,{feature:"dynamicPromptsMaxPrompts",children:a.jsx(nt,{label:l("dynamicPrompts.maxPrompts"),isDisabled:o,min:t,max:n,value:e,onChange:c,sliderNumberInputProps:{max:r},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})})},wce=i.memo(Cce),Sce=fe(pe,e=>{const{isLoading:t,isError:n,prompts:r,parsingError:o}=e.dynamicPrompts;return{prompts:r,parsingError:o,isError:n,isLoading:t}}),kce={"&::marker":{color:"base.500",_dark:{color:"base.500"}}},jce=()=>{const{t:e}=W(),{prompts:t,parsingError:n,isLoading:r,isError:o}=H(Sce);return o?a.jsx(Ot,{feature:"dynamicPrompts",children:a.jsx($,{w:"full",h:"full",layerStyle:"second",alignItems:"center",justifyContent:"center",p:8,children:a.jsx(Tn,{icon:lae,label:"Problem generating prompts"})})}):a.jsx(Ot,{feature:"dynamicPrompts",children:a.jsxs(Gt,{isInvalid:!!n,children:[a.jsxs(ln,{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",children:[e("dynamicPrompts.promptsPreview")," (",t.length,")",n&&` - ${n}`]}),a.jsxs($,{h:64,pos:"relative",layerStyle:"third",borderRadius:"base",p:2,children:[a.jsx(Sl,{children:a.jsx(N5,{stylePosition:"inside",ms:0,children:t.map((s,l)=>a.jsx(ts,{fontSize:"sm",sx:kce,children:a.jsx(be,{as:"span",children:s})},`${s}.${l}`))})}),r&&a.jsx($,{pos:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,layerStyle:"second",opacity:.7,alignItems:"center",justifyContent:"center",children:a.jsx(va,{})})]})]})})},_ce=i.memo(jce),CO=i.forwardRef(({label:e,description:t,...n},r)=>a.jsx(Ie,{ref:r,...n,children:a.jsxs(Ie,{children:[a.jsx(be,{fontWeight:600,children:e}),t&&a.jsx(be,{size:"xs",variant:"subtext",children:t})]})}));CO.displayName="IAIMantineSelectItemWithDescription";const Ice=i.memo(CO),Pce=()=>{const e=te(),{t}=W(),n=H(s=>s.dynamicPrompts.seedBehaviour),r=i.useMemo(()=>[{value:"PER_ITERATION",label:t("dynamicPrompts.seedBehaviour.perIterationLabel"),description:t("dynamicPrompts.seedBehaviour.perIterationDesc")},{value:"PER_PROMPT",label:t("dynamicPrompts.seedBehaviour.perPromptLabel"),description:t("dynamicPrompts.seedBehaviour.perPromptDesc")}],[t]),o=i.useCallback(s=>{s&&e(ZT(s))},[e]);return a.jsx(Ot,{feature:"dynamicPromptsSeedBehaviour",children:a.jsx(yn,{label:t("dynamicPrompts.seedBehaviour.label"),value:n,data:r,itemComponent:Ice,onChange:o})})},Ece=i.memo(Pce),Mce=()=>{const{t:e}=W(),t=i.useMemo(()=>fe(pe,({dynamicPrompts:o})=>{const s=o.prompts.length;if(s>1)return e("dynamicPrompts.promptsWithCount_other",{count:s})}),[e]),n=H(t);return Mt("dynamicPrompting").isFeatureEnabled?a.jsx(_r,{label:e("dynamicPrompts.dynamicPrompts"),activeLabel:n,children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(_ce,{}),a.jsx(Ece,{}),a.jsx(wce,{})]})}):null},uu=i.memo(Mce),Oce=e=>{const t=te(),{lora:n}=e,r=i.useCallback(l=>{t(JT({id:n.id,weight:l}))},[t,n.id]),o=i.useCallback(()=>{t(e9(n.id))},[t,n.id]),s=i.useCallback(()=>{t(t9(n.id))},[t,n.id]);return a.jsx(Ot,{feature:"lora",children:a.jsxs($,{sx:{gap:2.5,alignItems:"flex-end"},children:[a.jsx(nt,{label:n.model_name,value:n.weight,onChange:r,min:-1,max:2,step:.01,withInput:!0,withReset:!0,handleReset:o,withSliderMarks:!0,sliderMarks:[-1,0,1,2],sliderNumberInputProps:{min:-50,max:50}}),a.jsx(Fe,{size:"sm",onClick:s,tooltip:"Remove LoRA","aria-label":"Remove LoRA",icon:a.jsx(ao,{}),colorScheme:"error"})]})})},Dce=i.memo(Oce),Rce=fe(pe,({lora:e})=>({lorasArray:Hr(e.loras)})),Ace=()=>{const{lorasArray:e}=H(Rce);return a.jsx(a.Fragment,{children:e.map((t,n)=>a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[n>0&&a.jsx(On,{pt:1}),a.jsx(Dce,{lora:t})]},t.model_name))})},Tce=i.memo(Ace),Nce=fe(pe,({lora:e})=>({loras:e.loras})),$ce=()=>{const e=te(),{loras:t}=H(Nce),{data:n}=Vd(),{t:r}=W(),o=H(d=>d.generation.model),s=i.useMemo(()=>{if(!n)return[];const d=[];return qn(n.entities,(f,m)=>{if(!f||m in t)return;const h=(o==null?void 0:o.base_model)!==f.base_model;d.push({value:m,label:f.model_name,disabled:h,group:xn[f.base_model],tooltip:h?`Incompatible base model: ${f.base_model}`:void 0})}),d.sort((f,m)=>f.label&&!m.label?1:-1),d.sort((f,m)=>f.disabled&&!m.disabled?1:-1)},[t,n,o==null?void 0:o.base_model]),l=i.useCallback(d=>{if(!d)return;const f=n==null?void 0:n.entities[d];f&&e(n9(f))},[e,n==null?void 0:n.entities]),c=i.useCallback((d,f)=>{var m;return((m=f.label)==null?void 0:m.toLowerCase().includes(d.toLowerCase().trim()))||f.value.toLowerCase().includes(d.toLowerCase().trim())},[]);return(n==null?void 0:n.ids.length)===0?a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:r("models.noLoRAsInstalled")})}):a.jsx(sn,{placeholder:s.length===0?"All LoRAs added":r("models.addLora"),value:null,data:s,nothingFound:"No matching LoRAs",itemComponent:xl,disabled:s.length===0,filter:c,onChange:l,"data-testid":"add-lora"})},Lce=i.memo($ce),Fce=fe(pe,e=>{const t=JI(e.lora.loras);return{activeLabel:t>0?`${t} Active`:void 0}}),zce=()=>{const{t:e}=W(),{activeLabel:t}=H(Fce);return Mt("lora").isFeatureEnabled?a.jsx(_r,{label:e("modelManager.loraModels"),activeLabel:t,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Lce,{}),a.jsx(Tce,{})]})}):null},du=i.memo(zce),Bce=()=>{const e=te(),t=H(o=>o.generation.shouldUseCpuNoise),{t:n}=W(),r=i.useCallback(o=>{e(r9(o.target.checked))},[e]);return a.jsx(Ot,{feature:"noiseUseCPU",children:a.jsx(_n,{label:n("parameters.useCpuNoise"),isChecked:t,onChange:r})})},Hce=fe(pe,({generation:e})=>{const{seamlessXAxis:t}=e;return{seamlessXAxis:t}}),Wce=()=>{const{t:e}=W(),{seamlessXAxis:t}=H(Hce),n=te(),r=i.useCallback(o=>{n(o9(o.target.checked))},[n]);return a.jsx(_n,{label:e("parameters.seamlessXAxis"),"aria-label":e("parameters.seamlessXAxis"),isChecked:t,onChange:r})},Vce=i.memo(Wce),Uce=fe(pe,({generation:e})=>{const{seamlessYAxis:t}=e;return{seamlessYAxis:t}}),Gce=()=>{const{t:e}=W(),{seamlessYAxis:t}=H(Uce),n=te(),r=i.useCallback(o=>{n(s9(o.target.checked))},[n]);return a.jsx(_n,{label:e("parameters.seamlessYAxis"),"aria-label":e("parameters.seamlessYAxis"),isChecked:t,onChange:r})},Kce=i.memo(Gce),qce=()=>{const{t:e}=W();return Mt("seamless").isFeatureEnabled?a.jsxs(Gt,{children:[a.jsx(ln,{children:e("parameters.seamlessTiling")})," ",a.jsxs($,{sx:{gap:5},children:[a.jsx(Ie,{flexGrow:1,children:a.jsx(Vce,{})}),a.jsx(Ie,{flexGrow:1,children:a.jsx(Kce,{})})]})]}):null},Xce=i.memo(qce),Qce=fe([pe],({generation:e,hotkeys:t})=>{const{cfgRescaleMultiplier:n}=e,{shift:r}=t;return{cfgRescaleMultiplier:n,shift:r}}),Yce=()=>{const{cfgRescaleMultiplier:e,shift:t}=H(Qce),n=te(),{t:r}=W(),o=i.useCallback(l=>n(wm(l)),[n]),s=i.useCallback(()=>n(wm(0)),[n]);return a.jsx(Ot,{feature:"paramCFGRescaleMultiplier",children:a.jsx(nt,{label:r("parameters.cfgRescaleMultiplier"),step:t?.01:.05,min:0,max:.99,onChange:o,handleReset:s,value:e,sliderNumberInputProps:{max:.99},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1})})},Zce=i.memo(Yce);function Jce(){const e=H(d=>d.generation.clipSkip),{model:t}=H(d=>d.generation),n=te(),{t:r}=W(),o=i.useCallback(d=>{n(eS(d))},[n]),s=i.useCallback(()=>{n(eS(0))},[n]),l=i.useMemo(()=>t?wp[t.base_model].maxClip:wp["sd-1"].maxClip,[t]),c=i.useMemo(()=>t?wp[t.base_model].markers:wp["sd-1"].markers,[t]);return(t==null?void 0:t.base_model)==="sdxl"?null:a.jsx(Ot,{feature:"clipSkip",placement:"top",children:a.jsx(nt,{label:r("parameters.clipSkip"),"aria-label":r("parameters.clipSkip"),min:0,max:l,step:1,value:e,onChange:o,withSliderMarks:!0,sliderMarks:c,withInput:!0,withReset:!0,handleReset:s})})}const eue=fe(pe,e=>{const{clipSkip:t,model:n,seamlessXAxis:r,seamlessYAxis:o,shouldUseCpuNoise:s,cfgRescaleMultiplier:l}=e.generation;return{clipSkip:t,model:n,seamlessXAxis:r,seamlessYAxis:o,shouldUseCpuNoise:s,cfgRescaleMultiplier:l}});function fu(){const{clipSkip:e,model:t,seamlessXAxis:n,seamlessYAxis:r,shouldUseCpuNoise:o,cfgRescaleMultiplier:s}=H(eue),{t:l}=W(),c=i.useMemo(()=>{const d=[];return o||d.push(l("parameters.gpuNoise")),e>0&&t&&t.base_model!=="sdxl"&&d.push(l("parameters.clipSkipWithLayerCount",{layerCount:e})),n&&r?d.push(l("parameters.seamlessX&Y")):n?d.push(l("parameters.seamlessX")):r&&d.push(l("parameters.seamlessY")),s&&d.push(l("parameters.cfgRescale")),d.join(", ")},[s,e,t,n,r,o,l]);return a.jsx(_r,{label:l("common.advanced"),activeLabel:c,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Xce,{}),a.jsx(On,{}),t&&(t==null?void 0:t.base_model)!=="sdxl"&&a.jsxs(a.Fragment,{children:[a.jsx(Jce,{}),a.jsx(On,{pt:2})]}),a.jsx(Bce,{}),a.jsx(On,{}),a.jsx(Zce,{})]})})}const _a=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return((o=Ao(r,e))==null?void 0:o.isEnabled)??!1}),[e]);return H(t)},tue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.model}),[e]);return H(t)},wO=e=>{const{data:t}=Ex(),n=i.useMemo(()=>t?NI.getSelectors().selectAll(t):[],[t]),{data:r}=Mx(),o=i.useMemo(()=>r?$I.getSelectors().selectAll(r):[],[r]),{data:s}=Ox(),l=i.useMemo(()=>s?LI.getSelectors().selectAll(s):[],[s]);return e==="controlnet"?n:e==="t2i_adapter"?o:e==="ip_adapter"?l:[]},SO=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.type}),[e]);return H(t)},nue=fe(pe,({generation:e})=>{const{model:t}=e;return{mainModel:t}}),rue=({id:e})=>{const t=_a(e),n=SO(e),r=tue(e),o=te(),{mainModel:s}=H(nue),{t:l}=W(),c=wO(n),d=i.useMemo(()=>{if(!c)return[];const h=[];return c.forEach(g=>{if(!g)return;const b=(g==null?void 0:g.base_model)!==(s==null?void 0:s.base_model);h.push({value:g.id,label:g.model_name,group:xn[g.base_model],disabled:b,tooltip:b?`${l("controlnet.incompatibleBaseModel")} ${g.base_model}`:void 0})}),h.sort((g,b)=>g.disabled?1:b.disabled?-1:g.label.localeCompare(b.label)),h},[s==null?void 0:s.base_model,c,l]),f=i.useMemo(()=>c.find(h=>(h==null?void 0:h.id)===`${r==null?void 0:r.base_model}/${n}/${r==null?void 0:r.model_name}`),[n,r==null?void 0:r.base_model,r==null?void 0:r.model_name,c]),m=i.useCallback(h=>{if(!h)return;const g=gO(h);g&&o(a9({id:e,model:g}))},[o,e]);return a.jsx(sn,{itemComponent:xl,data:d,error:!f||(s==null?void 0:s.base_model)!==f.base_model,placeholder:l("controlnet.selectModel"),value:(f==null?void 0:f.id)??null,onChange:m,disabled:!t,tooltip:f==null?void 0:f.description})},oue=i.memo(rue),sue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.weight}),[e]);return H(t)},aue=({id:e})=>{const t=_a(e),n=sue(e),r=te(),{t:o}=W(),s=i.useCallback(l=>{r(l9({id:e,weight:l}))},[r,e]);return na(n)?null:a.jsx(Ot,{feature:"controlNetWeight",children:a.jsx(nt,{isDisabled:!t,label:o("controlnet.weight"),value:n,onChange:s,min:0,max:2,step:.01,withSliderMarks:!0,sliderMarks:[0,1,2]})})},lue=i.memo(aue),iue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.controlImage}),[e]);return H(t)},cue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processedControlImage:void 0}),[e]);return H(t)},uue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processorType:void 0}),[e]);return H(t)},due=fe(pe,({controlAdapters:e,gallery:t,system:n})=>{const{pendingControlImages:r}=e,{autoAddBoardId:o}=t,{isConnected:s}=n;return{pendingControlImages:r,autoAddBoardId:o,isConnected:s}}),fue=({isSmall:e,id:t})=>{const n=iue(t),r=cue(t),o=uue(t),s=te(),{t:l}=W(),{pendingControlImages:c,autoAddBoardId:d,isConnected:f}=H(due),m=H(tr),[h,g]=i.useState(!1),{currentData:b,isError:y}=jo(n??Br),{currentData:x,isError:w}=jo(r??Br),[S]=i9(),[j]=c9(),[_]=u9(),I=i.useCallback(()=>{s(d9({id:t,controlImage:null}))},[t,s]),E=i.useCallback(async()=>{x&&(await S({imageDTO:x,is_intermediate:!1}).unwrap(),d!=="none"?j({imageDTO:x,board_id:d}):_({imageDTO:x}))},[x,S,d,j,_]),M=i.useCallback(()=>{b&&(m==="unifiedCanvas"?s(es({width:b.width,height:b.height})):(s(Za(b.width)),s(Ja(b.height))))},[b,m,s]),D=i.useCallback(()=>{g(!0)},[]),R=i.useCallback(()=>{g(!1)},[]),N=i.useMemo(()=>{if(b)return{id:t,payloadType:"IMAGE_DTO",payload:{imageDTO:b}}},[b,t]),O=i.useMemo(()=>({id:t,actionType:"SET_CONTROL_ADAPTER_IMAGE",context:{id:t}}),[t]),T=i.useMemo(()=>({type:"SET_CONTROL_ADAPTER_IMAGE",id:t}),[t]),U=b&&x&&!h&&!c.includes(t)&&o!=="none";return i.useEffect(()=>{f&&(y||w)&&I()},[I,f,y,w]),a.jsxs($,{onMouseEnter:D,onMouseLeave:R,sx:{position:"relative",w:"full",h:e?28:366,alignItems:"center",justifyContent:"center"},children:[a.jsx(fl,{draggableData:N,droppableData:O,imageDTO:b,isDropDisabled:U,postUploadAction:T}),a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",opacity:U?1:0,transitionProperty:"common",transitionDuration:"normal",pointerEvents:"none"},children:a.jsx(fl,{draggableData:N,droppableData:O,imageDTO:x,isUploadDisabled:!0})}),a.jsxs(a.Fragment,{children:[a.jsx(jc,{onClick:I,icon:b?a.jsx(Ng,{}):void 0,tooltip:l("controlnet.resetControlImage")}),a.jsx(jc,{onClick:E,icon:b?a.jsx(gf,{size:16}):void 0,tooltip:l("controlnet.saveControlImage"),styleOverrides:{marginTop:6}}),a.jsx(jc,{onClick:M,icon:b?a.jsx(Qy,{size:16}):void 0,tooltip:l("controlnet.setControlImageDimensions"),styleOverrides:{marginTop:12}})]}),c.includes(t)&&a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",alignItems:"center",justifyContent:"center",opacity:.8,borderRadius:"base",bg:"base.400",_dark:{bg:"base.900"}},children:a.jsx(va,{size:"xl",sx:{color:"base.100",_dark:{color:"base.400"}}})})]})},b_=i.memo(fue),No=()=>{const e=te();return i.useCallback((n,r)=>{e(f9({id:n,params:r}))},[e])};function $o(e){return a.jsx($,{sx:{flexDirection:"column",gap:2,pb:2},children:e.children})}const x_=jr.canny_image_processor.default,pue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{low_threshold:o,high_threshold:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{low_threshold:g})},[t,l]),f=i.useCallback(()=>{l(t,{low_threshold:x_.low_threshold})},[t,l]),m=i.useCallback(g=>{l(t,{high_threshold:g})},[t,l]),h=i.useCallback(()=>{l(t,{high_threshold:x_.high_threshold})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{isDisabled:!r,label:c("controlnet.lowThreshold"),value:o,onChange:d,handleReset:f,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0}),a.jsx(nt,{isDisabled:!r,label:c("controlnet.highThreshold"),value:s,onChange:m,handleReset:h,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0})]})},mue=i.memo(pue),hue=jr.color_map_image_processor.default,gue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{color_map_tile_size:o}=n,s=No(),{t:l}=W(),c=i.useCallback(f=>{s(t,{color_map_tile_size:f})},[t,s]),d=i.useCallback(()=>{s(t,{color_map_tile_size:hue.color_map_tile_size})},[t,s]);return a.jsx($o,{children:a.jsx(nt,{isDisabled:!r,label:l("controlnet.colorMapTileSize"),value:o,onChange:c,handleReset:d,withReset:!0,min:1,max:256,step:1,withInput:!0,withSliderMarks:!0,sliderNumberInputProps:{max:4096}})})},vue=i.memo(gue),Wu=jr.content_shuffle_image_processor.default,bue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,w:l,h:c,f:d}=n,f=No(),{t:m}=W(),h=i.useCallback(E=>{f(t,{detect_resolution:E})},[t,f]),g=i.useCallback(()=>{f(t,{detect_resolution:Wu.detect_resolution})},[t,f]),b=i.useCallback(E=>{f(t,{image_resolution:E})},[t,f]),y=i.useCallback(()=>{f(t,{image_resolution:Wu.image_resolution})},[t,f]),x=i.useCallback(E=>{f(t,{w:E})},[t,f]),w=i.useCallback(()=>{f(t,{w:Wu.w})},[t,f]),S=i.useCallback(E=>{f(t,{h:E})},[t,f]),j=i.useCallback(()=>{f(t,{h:Wu.h})},[t,f]),_=i.useCallback(E=>{f(t,{f:E})},[t,f]),I=i.useCallback(()=>{f(t,{f:Wu.f})},[t,f]);return a.jsxs($o,{children:[a.jsx(nt,{label:m("controlnet.detectResolution"),value:s,onChange:h,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.imageResolution"),value:o,onChange:b,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.w"),value:l,onChange:x,handleReset:w,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.h"),value:c,onChange:S,handleReset:j,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.f"),value:d,onChange:_,handleReset:I,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},xue=i.memo(bue),y_=jr.hed_image_processor.default,yue=e=>{const{controlNetId:t,processorNode:{detect_resolution:n,image_resolution:r,scribble:o},isEnabled:s}=e,l=No(),{t:c}=W(),d=i.useCallback(b=>{l(t,{detect_resolution:b})},[t,l]),f=i.useCallback(b=>{l(t,{image_resolution:b})},[t,l]),m=i.useCallback(b=>{l(t,{scribble:b.target.checked})},[t,l]),h=i.useCallback(()=>{l(t,{detect_resolution:y_.detect_resolution})},[t,l]),g=i.useCallback(()=>{l(t,{image_resolution:y_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:n,onChange:d,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!s}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:r,onChange:f,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!s}),a.jsx(_n,{label:c("controlnet.scribble"),isChecked:o,onChange:m,isDisabled:!s})]})},Cue=i.memo(yue),C_=jr.lineart_anime_image_processor.default,wue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{detect_resolution:g})},[t,l]),f=i.useCallback(g=>{l(t,{image_resolution:g})},[t,l]),m=i.useCallback(()=>{l(t,{detect_resolution:C_.detect_resolution})},[t,l]),h=i.useCallback(()=>{l(t,{image_resolution:C_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:s,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:o,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Sue=i.memo(wue),w_=jr.lineart_image_processor.default,kue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,coarse:l}=n,c=No(),{t:d}=W(),f=i.useCallback(y=>{c(t,{detect_resolution:y})},[t,c]),m=i.useCallback(y=>{c(t,{image_resolution:y})},[t,c]),h=i.useCallback(()=>{c(t,{detect_resolution:w_.detect_resolution})},[t,c]),g=i.useCallback(()=>{c(t,{image_resolution:w_.image_resolution})},[t,c]),b=i.useCallback(y=>{c(t,{coarse:y.target.checked})},[t,c]);return a.jsxs($o,{children:[a.jsx(nt,{label:d("controlnet.detectResolution"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:d("controlnet.imageResolution"),value:o,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:d("controlnet.coarse"),isChecked:l,onChange:b,isDisabled:!r})]})},jue=i.memo(kue),S_=jr.mediapipe_face_processor.default,_ue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{max_faces:o,min_confidence:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{max_faces:g})},[t,l]),f=i.useCallback(g=>{l(t,{min_confidence:g})},[t,l]),m=i.useCallback(()=>{l(t,{max_faces:S_.max_faces})},[t,l]),h=i.useCallback(()=>{l(t,{min_confidence:S_.min_confidence})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.maxFaces"),value:o,onChange:d,handleReset:m,withReset:!0,min:1,max:20,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.minConfidence"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Iue=i.memo(_ue),k_=jr.midas_depth_image_processor.default,Pue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{a_mult:o,bg_th:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{a_mult:g})},[t,l]),f=i.useCallback(g=>{l(t,{bg_th:g})},[t,l]),m=i.useCallback(()=>{l(t,{a_mult:k_.a_mult})},[t,l]),h=i.useCallback(()=>{l(t,{bg_th:k_.bg_th})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.amult"),value:o,onChange:d,handleReset:m,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.bgth"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Eue=i.memo(Pue),em=jr.mlsd_image_processor.default,Mue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,thr_d:l,thr_v:c}=n,d=No(),{t:f}=W(),m=i.useCallback(j=>{d(t,{detect_resolution:j})},[t,d]),h=i.useCallback(j=>{d(t,{image_resolution:j})},[t,d]),g=i.useCallback(j=>{d(t,{thr_d:j})},[t,d]),b=i.useCallback(j=>{d(t,{thr_v:j})},[t,d]),y=i.useCallback(()=>{d(t,{detect_resolution:em.detect_resolution})},[t,d]),x=i.useCallback(()=>{d(t,{image_resolution:em.image_resolution})},[t,d]),w=i.useCallback(()=>{d(t,{thr_d:em.thr_d})},[t,d]),S=i.useCallback(()=>{d(t,{thr_v:em.thr_v})},[t,d]);return a.jsxs($o,{children:[a.jsx(nt,{label:f("controlnet.detectResolution"),value:s,onChange:m,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.imageResolution"),value:o,onChange:h,handleReset:x,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.w"),value:l,onChange:g,handleReset:w,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.h"),value:c,onChange:b,handleReset:S,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Oue=i.memo(Mue),j_=jr.normalbae_image_processor.default,Due=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{detect_resolution:g})},[t,l]),f=i.useCallback(g=>{l(t,{image_resolution:g})},[t,l]),m=i.useCallback(()=>{l(t,{detect_resolution:j_.detect_resolution})},[t,l]),h=i.useCallback(()=>{l(t,{image_resolution:j_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:s,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:o,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Rue=i.memo(Due),__=jr.openpose_image_processor.default,Aue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,hand_and_face:l}=n,c=No(),{t:d}=W(),f=i.useCallback(y=>{c(t,{detect_resolution:y})},[t,c]),m=i.useCallback(y=>{c(t,{image_resolution:y})},[t,c]),h=i.useCallback(()=>{c(t,{detect_resolution:__.detect_resolution})},[t,c]),g=i.useCallback(()=>{c(t,{image_resolution:__.image_resolution})},[t,c]),b=i.useCallback(y=>{c(t,{hand_and_face:y.target.checked})},[t,c]);return a.jsxs($o,{children:[a.jsx(nt,{label:d("controlnet.detectResolution"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:d("controlnet.imageResolution"),value:o,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:d("controlnet.handAndFace"),isChecked:l,onChange:b,isDisabled:!r})]})},Tue=i.memo(Aue),I_=jr.pidi_image_processor.default,Nue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,scribble:l,safe:c}=n,d=No(),{t:f}=W(),m=i.useCallback(w=>{d(t,{detect_resolution:w})},[t,d]),h=i.useCallback(w=>{d(t,{image_resolution:w})},[t,d]),g=i.useCallback(()=>{d(t,{detect_resolution:I_.detect_resolution})},[t,d]),b=i.useCallback(()=>{d(t,{image_resolution:I_.image_resolution})},[t,d]),y=i.useCallback(w=>{d(t,{scribble:w.target.checked})},[t,d]),x=i.useCallback(w=>{d(t,{safe:w.target.checked})},[t,d]);return a.jsxs($o,{children:[a.jsx(nt,{label:f("controlnet.detectResolution"),value:s,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.imageResolution"),value:o,onChange:h,handleReset:b,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:f("controlnet.scribble"),isChecked:l,onChange:y}),a.jsx(_n,{label:f("controlnet.safe"),isChecked:c,onChange:x,isDisabled:!r})]})},$ue=i.memo(Nue),Lue=e=>null,Fue=i.memo(Lue),kO=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processorNode:void 0}),[e]);return H(t)},zue=({id:e})=>{const t=_a(e),n=kO(e);return n?n.type==="canny_image_processor"?a.jsx(mue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="color_map_image_processor"?a.jsx(vue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="hed_image_processor"?a.jsx(Cue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="lineart_image_processor"?a.jsx(jue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="content_shuffle_image_processor"?a.jsx(xue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="lineart_anime_image_processor"?a.jsx(Sue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="mediapipe_face_processor"?a.jsx(Iue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="midas_depth_image_processor"?a.jsx(Eue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="mlsd_image_processor"?a.jsx(Oue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="normalbae_image_processor"?a.jsx(Rue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="openpose_image_processor"?a.jsx(Tue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="pidi_image_processor"?a.jsx($ue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="zoe_depth_image_processor"?a.jsx(Fue,{controlNetId:e,processorNode:n,isEnabled:t}):null:null},Bue=i.memo(zue),Hue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&Gc(o))return o.shouldAutoConfig}),[e]);return H(t)},Wue=({id:e})=>{const t=_a(e),n=Hue(e),r=te(),{t:o}=W(),s=i.useCallback(()=>{r(p9({id:e}))},[e,r]);return na(n)?null:a.jsx(_n,{label:o("controlnet.autoConfigure"),"aria-label":o("controlnet.autoConfigure"),isChecked:n,onChange:s,isDisabled:!t})},Vue=i.memo(Wue),Uue=e=>{const{id:t}=e,n=te(),{t:r}=W(),o=i.useCallback(()=>{n(m9({id:t}))},[t,n]),s=i.useCallback(()=>{n(h9({id:t}))},[t,n]);return a.jsxs($,{sx:{gap:2},children:[a.jsx(Fe,{size:"sm",icon:a.jsx(si,{}),tooltip:r("controlnet.importImageFromCanvas"),"aria-label":r("controlnet.importImageFromCanvas"),onClick:o}),a.jsx(Fe,{size:"sm",icon:a.jsx(UM,{}),tooltip:r("controlnet.importMaskFromCanvas"),"aria-label":r("controlnet.importMaskFromCanvas"),onClick:s})]})},Gue=i.memo(Uue),Kue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o?{beginStepPct:o.beginStepPct,endStepPct:o.endStepPct}:void 0}),[e]);return H(t)},P_=e=>`${Math.round(e*100)}%`,que=({id:e})=>{const t=_a(e),n=Kue(e),r=te(),{t:o}=W(),s=i.useCallback(l=>{r(g9({id:e,beginStepPct:l[0]})),r(v9({id:e,endStepPct:l[1]}))},[r,e]);return n?a.jsx(Ot,{feature:"controlNetBeginEnd",children:a.jsxs(Gt,{isDisabled:!t,children:[a.jsx(ln,{children:o("controlnet.beginEndStepPercent")}),a.jsx(ug,{w:"100%",gap:2,alignItems:"center",children:a.jsxs(O6,{"aria-label":["Begin Step %","End Step %!"],value:[n.beginStepPct,n.endStepPct],onChange:s,min:0,max:1,step:.01,minStepsBetweenThumbs:5,isDisabled:!t,children:[a.jsx(D6,{children:a.jsx(R6,{})}),a.jsx(Ut,{label:P_(n.beginStepPct),placement:"top",hasArrow:!0,children:a.jsx(bb,{index:0})}),a.jsx(Ut,{label:P_(n.endStepPct),placement:"top",hasArrow:!0,children:a.jsx(bb,{index:1})}),a.jsx(dm,{value:0,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},children:"0%"}),a.jsx(dm,{value:.5,sx:{insetInlineStart:"50% !important",transform:"translateX(-50%)"},children:"50%"}),a.jsx(dm,{value:1,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},children:"100%"})]})})]})}):null},Xue=i.memo(que),Que=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&b9(o))return o.controlMode}),[e]);return H(t)};function Yue({id:e}){const t=_a(e),n=Que(e),r=te(),{t:o}=W(),s=[{label:o("controlnet.balanced"),value:"balanced"},{label:o("controlnet.prompt"),value:"more_prompt"},{label:o("controlnet.control"),value:"more_control"},{label:o("controlnet.megaControl"),value:"unbalanced"}],l=i.useCallback(c=>{r(x9({id:e,controlMode:c}))},[e,r]);return n?a.jsx(Ot,{feature:"controlNetControlMode",children:a.jsx(yn,{disabled:!t,label:o("controlnet.controlMode"),data:s,value:n,onChange:l})}):null}const Zue=e=>e.config,Jue=fe(Zue,e=>Hr(jr,n=>({value:n.type,label:n.label})).sort((n,r)=>n.value==="none"?-1:r.value==="none"?1:n.label.localeCompare(r.label)).filter(n=>!e.sd.disabledControlNetProcessors.includes(n.value))),ede=({id:e})=>{const t=_a(e),n=kO(e),r=te(),o=H(Jue),{t:s}=W(),l=i.useCallback(c=>{r(y9({id:e,processorType:c}))},[e,r]);return n?a.jsx(sn,{label:s("controlnet.processor"),value:n.type??"canny_image_processor",data:o,onChange:l,disabled:!t}):null},tde=i.memo(ede),nde=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&Gc(o))return o.resizeMode}),[e]);return H(t)};function rde({id:e}){const t=_a(e),n=nde(e),r=te(),{t:o}=W(),s=[{label:o("controlnet.resize"),value:"just_resize"},{label:o("controlnet.crop"),value:"crop_resize"},{label:o("controlnet.fill"),value:"fill_resize"}],l=i.useCallback(c=>{r(C9({id:e,resizeMode:c}))},[e,r]);return n?a.jsx(Ot,{feature:"controlNetResizeMode",children:a.jsx(yn,{disabled:!t,label:o("controlnet.resizeMode"),data:s,value:n,onChange:l})}):null}const ode=e=>{const{id:t,number:n}=e,r=SO(t),o=te(),{t:s}=W(),l=H(tr),c=_a(t),[d,f]=ene(!1),m=i.useCallback(()=>{o(w9({id:t}))},[t,o]),h=i.useCallback(()=>{o(S9(t))},[t,o]),g=i.useCallback(b=>{o(k9({id:t,isEnabled:b.target.checked}))},[t,o]);return r?a.jsxs($,{sx:{flexDir:"column",gap:3,p:2,borderRadius:"base",position:"relative",bg:"base.250",_dark:{bg:"base.750"}},children:[a.jsx($,{sx:{gap:2,alignItems:"center",justifyContent:"space-between"},children:a.jsx(_n,{label:s(`controlnet.${r}`,{number:n}),"aria-label":s("controlnet.toggleControlNet"),isChecked:c,onChange:g,formControlProps:{w:"full"},formLabelProps:{fontWeight:600}})}),a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(Ie,{sx:{w:"full",minW:0,transitionProperty:"common",transitionDuration:"0.1s"},children:a.jsx(oue,{id:t})}),l==="unifiedCanvas"&&a.jsx(Gue,{id:t}),a.jsx(Fe,{size:"sm",tooltip:s("controlnet.duplicate"),"aria-label":s("controlnet.duplicate"),onClick:h,icon:a.jsx(ru,{})}),a.jsx(Fe,{size:"sm",tooltip:s("controlnet.delete"),"aria-label":s("controlnet.delete"),colorScheme:"error",onClick:m,icon:a.jsx(ao,{})}),a.jsx(Fe,{size:"sm",tooltip:s(d?"controlnet.hideAdvanced":"controlnet.showAdvanced"),"aria-label":s(d?"controlnet.hideAdvanced":"controlnet.showAdvanced"),onClick:f,variant:"ghost",sx:{_hover:{bg:"none"}},icon:a.jsx(Kg,{sx:{boxSize:4,color:"base.700",transform:d?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal",_dark:{color:"base.300"}}})})]}),a.jsxs($,{sx:{w:"full",flexDirection:"column",gap:3},children:[a.jsxs($,{sx:{gap:4,w:"full",alignItems:"center"},children:[a.jsxs($,{sx:{flexDir:"column",gap:3,h:28,w:"full",paddingInlineStart:1,paddingInlineEnd:d?1:0,pb:2,justifyContent:"space-between"},children:[a.jsx(lue,{id:t}),a.jsx(Xue,{id:t})]}),!d&&a.jsx($,{sx:{alignItems:"center",justifyContent:"center",h:28,w:28,aspectRatio:"1/1"},children:a.jsx(b_,{id:t,isSmall:!0})})]}),a.jsxs($,{sx:{gap:2},children:[a.jsx(Yue,{id:t}),a.jsx(rde,{id:t})]}),a.jsx(tde,{id:t})]}),d&&a.jsxs(a.Fragment,{children:[a.jsx(b_,{id:t}),a.jsx(Vue,{id:t}),a.jsx(Bue,{id:t})]})]}):null},sde=i.memo(ode),_1=e=>{const t=H(c=>{var d;return(d=c.generation.model)==null?void 0:d.base_model}),n=te(),r=wO(e),o=i.useMemo(()=>{const c=r.filter(d=>t?d.base_model===t:!0)[0];return c||r[0]},[t,r]),s=i.useMemo(()=>!o,[o]);return[i.useCallback(()=>{s||n(j9({type:e,overrides:{model:o}}))},[n,o,s,e]),s]},ade=fe([pe],({controlAdapters:e})=>{const t=[];let n=!1;const r=_9(e).filter(m=>m.isEnabled).length,o=I9(e).length;r>0&&t.push(`${r} IP`),r>o&&(n=!0);const s=P9(e).filter(m=>m.isEnabled).length,l=E9(e).length;s>0&&t.push(`${s} ControlNet`),s>l&&(n=!0);const c=M9(e).filter(m=>m.isEnabled).length,d=O9(e).length;return c>0&&t.push(`${c} T2I`),c>d&&(n=!0),{controlAdapterIds:D9(e).map(String),activeLabel:t.join(", "),isError:n}}),lde=()=>{const{t:e}=W(),{controlAdapterIds:t,activeLabel:n}=H(ade),r=Mt("controlNet").isFeatureDisabled,[o,s]=_1("controlnet"),[l,c]=_1("ip_adapter"),[d,f]=_1("t2i_adapter");return r?null:a.jsx(_r,{label:e("controlnet.controlAdapter_other"),activeLabel:n,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsxs($t,{size:"sm",w:"full",justifyContent:"space-between",children:[a.jsx(Xe,{tooltip:e("controlnet.addControlNet"),leftIcon:a.jsx(nl,{}),onClick:o,"data-testid":"add controlnet",flexGrow:1,isDisabled:s,children:e("common.controlNet")}),a.jsx(Xe,{tooltip:e("controlnet.addIPAdapter"),leftIcon:a.jsx(nl,{}),onClick:l,"data-testid":"add ip adapter",flexGrow:1,isDisabled:c,children:e("common.ipAdapter")}),a.jsx(Xe,{tooltip:e("controlnet.addT2IAdapter"),leftIcon:a.jsx(nl,{}),onClick:d,"data-testid":"add t2i adapter",flexGrow:1,isDisabled:f,children:e("common.t2iAdapter")})]}),t.map((m,h)=>a.jsxs(i.Fragment,{children:[a.jsx(On,{}),a.jsx(sde,{id:m,number:h+1})]},m))]})})},pu=i.memo(lde),ide=e=>{const{onClick:t}=e,{t:n}=W();return a.jsx(Fe,{size:"sm","aria-label":n("embedding.addEmbedding"),tooltip:n("embedding.addEmbedding"),icon:a.jsx(LM,{}),sx:{p:2,color:"base.500",_hover:{color:"base.600"},_active:{color:"base.700"},_dark:{color:"base.500",_hover:{color:"base.400"},_active:{color:"base.300"}}},variant:"link",onClick:t})},c0=i.memo(ide),cde="28rem",ude=e=>{const{onSelect:t,isOpen:n,onClose:r,children:o}=e,{data:s}=R9(),l=i.useRef(null),{t:c}=W(),d=H(g=>g.generation.model),f=i.useMemo(()=>{if(!s)return[];const g=[];return qn(s.entities,(b,y)=>{if(!b)return;const x=(d==null?void 0:d.base_model)!==b.base_model;g.push({value:b.model_name,label:b.model_name,group:xn[b.base_model],disabled:x,tooltip:x?`${c("embedding.incompatibleModel")} ${b.base_model}`:void 0})}),g.sort((b,y)=>{var x;return b.label&&y.label?(x=b.label)!=null&&x.localeCompare(y.label)?-1:1:-1}),g.sort((b,y)=>b.disabled&&!y.disabled?1:-1)},[s,d==null?void 0:d.base_model,c]),m=i.useCallback(g=>{g&&t(g)},[t]),h=i.useCallback((g,b)=>{var y;return((y=b.label)==null?void 0:y.toLowerCase().includes(g.toLowerCase().trim()))||b.value.toLowerCase().includes(g.toLowerCase().trim())},[]);return a.jsxs(lf,{initialFocusRef:l,isOpen:n,onClose:r,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[a.jsx(yg,{children:o}),a.jsx(cf,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:a.jsx(Cg,{sx:{p:0,w:`calc(${cde} - 2rem )`},children:f.length===0?a.jsx($,{sx:{justifyContent:"center",p:2,fontSize:"sm",color:"base.500",_dark:{color:"base.700"}},children:a.jsx(be,{children:c("embedding.noEmbeddingsLoaded")})}):a.jsx(sn,{inputRef:l,autoFocus:!0,placeholder:c("embedding.addEmbedding"),value:null,data:f,nothingFound:c("embedding.noMatchingEmbedding"),itemComponent:xl,disabled:f.length===0,onDropdownClose:r,filter:h,onChange:m})})})]})},u0=i.memo(ude),dde=()=>{const e=H(h=>h.generation.negativePrompt),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),s=te(),{t:l}=W(),c=i.useCallback(h=>{s(rd(h.target.value))},[s]),d=i.useCallback(h=>{h.key==="<"&&o()},[o]),f=i.useCallback(h=>{if(!t.current)return;const g=t.current.selectionStart;if(g===void 0)return;let b=e.slice(0,g);b[b.length-1]!=="<"&&(b+="<"),b+=`${h}>`;const y=b.length;b+=e.slice(g),Jr.flushSync(()=>{s(rd(b))}),t.current.selectionEnd=y,r()},[s,r,e]),m=Mt("embedding").isFeatureEnabled;return a.jsxs(Gt,{children:[a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(Ot,{feature:"paramNegativeConditioning",placement:"right",children:a.jsx(ga,{id:"negativePrompt",name:"negativePrompt",ref:t,value:e,placeholder:l("parameters.negativePromptPlaceholder"),onChange:c,resize:"vertical",fontSize:"sm",minH:16,...m&&{onKeyDown:d}})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},jO=i.memo(dde),fde=fe([pe],({generation:e})=>({prompt:e.positivePrompt})),pde=()=>{const e=te(),{prompt:t}=H(fde),n=i.useRef(null),{isOpen:r,onClose:o,onOpen:s}=sr(),{t:l}=W(),c=i.useCallback(h=>{e(nd(h.target.value))},[e]);tt("alt+a",()=>{var h;(h=n.current)==null||h.focus()},[]);const d=i.useCallback(h=>{if(!n.current)return;const g=n.current.selectionStart;if(g===void 0)return;let b=t.slice(0,g);b[b.length-1]!=="<"&&(b+="<"),b+=`${h}>`;const y=b.length;b+=t.slice(g),Jr.flushSync(()=>{e(nd(b))}),n.current.selectionStart=y,n.current.selectionEnd=y,o()},[e,o,t]),f=Mt("embedding").isFeatureEnabled,m=i.useCallback(h=>{f&&h.key==="<"&&s()},[s,f]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(Gt,{children:a.jsx(u0,{isOpen:r,onClose:o,onSelect:d,children:a.jsx(Ot,{feature:"paramPositiveConditioning",placement:"right",children:a.jsx(ga,{id:"prompt",name:"prompt",ref:n,value:t,placeholder:l("parameters.positivePromptPlaceholder"),onChange:c,onKeyDown:m,resize:"vertical",minH:32})})})}),!r&&f&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:s})})]})},_O=i.memo(pde);function mde(){const e=H(o=>o.sdxl.shouldConcatSDXLStylePrompt),t=te(),{t:n}=W(),r=i.useCallback(()=>{t(A9(!e))},[t,e]);return a.jsx(Fe,{"aria-label":n("sdxl.concatPromptStyle"),tooltip:n("sdxl.concatPromptStyle"),variant:"outline",isChecked:e,onClick:r,icon:a.jsx(WM,{}),size:"xs",sx:{position:"absolute",insetInlineEnd:1,top:6,border:"none",color:e?"accent.500":"base.500",_hover:{bg:"none"}}})}const E_={position:"absolute",bg:"none",w:"full",minH:2,borderRadius:0,borderLeft:"none",borderRight:"none",zIndex:2,maskImage:"radial-gradient(circle at center, black, black 65%, black 30%, black 15%, transparent)"};function IO(){return a.jsxs($,{children:[a.jsx(Ie,{as:Mn.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"1px",borderTop:"none",borderColor:"base.400",...E_,_dark:{borderColor:"accent.500"}}}),a.jsx(Ie,{as:Mn.div,initial:{opacity:0,scale:0},animate:{opacity:[0,1,1,1],scale:[0,.75,1.5,1],transition:{duration:.42,times:[0,.25,.5,1]}},exit:{opacity:0,scale:0},sx:{zIndex:3,position:"absolute",left:"48%",top:"3px",p:1,borderRadius:4,bg:"accent.400",color:"base.50",_dark:{bg:"accent.500"}},children:a.jsx(WM,{size:12})}),a.jsx(Ie,{as:Mn.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"17px",borderBottom:"none",borderColor:"base.400",...E_,_dark:{borderColor:"accent.500"}}})]})}const hde=fe([pe],({sdxl:e})=>{const{negativeStylePrompt:t,shouldConcatSDXLStylePrompt:n}=e;return{prompt:t,shouldConcatSDXLStylePrompt:n}}),gde=()=>{const e=te(),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),{t:s}=W(),{prompt:l,shouldConcatSDXLStylePrompt:c}=H(hde),d=i.useCallback(g=>{e(sd(g.target.value))},[e]),f=i.useCallback(g=>{if(!t.current)return;const b=t.current.selectionStart;if(b===void 0)return;let y=l.slice(0,b);y[y.length-1]!=="<"&&(y+="<"),y+=`${g}>`;const x=y.length;y+=l.slice(b),Jr.flushSync(()=>{e(sd(y))}),t.current.selectionStart=x,t.current.selectionEnd=x,r()},[e,r,l]),m=Mt("embedding").isFeatureEnabled,h=i.useCallback(g=>{m&&g.key==="<"&&o()},[o,m]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(hr,{children:c&&a.jsx(Ie,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(IO,{})})}),a.jsx(Gt,{children:a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(ga,{id:"prompt",name:"prompt",ref:t,value:l,placeholder:s("sdxl.negStylePrompt"),onChange:d,onKeyDown:h,resize:"vertical",fontSize:"sm",minH:16})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},vde=i.memo(gde),bde=fe([pe],({sdxl:e})=>{const{positiveStylePrompt:t,shouldConcatSDXLStylePrompt:n}=e;return{prompt:t,shouldConcatSDXLStylePrompt:n}}),xde=()=>{const e=te(),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),{t:s}=W(),{prompt:l,shouldConcatSDXLStylePrompt:c}=H(bde),d=i.useCallback(g=>{e(od(g.target.value))},[e]),f=i.useCallback(g=>{if(!t.current)return;const b=t.current.selectionStart;if(b===void 0)return;let y=l.slice(0,b);y[y.length-1]!=="<"&&(y+="<"),y+=`${g}>`;const x=y.length;y+=l.slice(b),Jr.flushSync(()=>{e(od(y))}),t.current.selectionStart=x,t.current.selectionEnd=x,r()},[e,r,l]),m=Mt("embedding").isFeatureEnabled,h=i.useCallback(g=>{m&&g.key==="<"&&o()},[o,m]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(hr,{children:c&&a.jsx(Ie,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(IO,{})})}),a.jsx(Gt,{children:a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(ga,{id:"prompt",name:"prompt",ref:t,value:l,placeholder:s("sdxl.posStylePrompt"),onChange:d,onKeyDown:h,resize:"vertical",minH:16})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},yde=i.memo(xde);function L2(){return a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(_O,{}),a.jsx(mde,{}),a.jsx(yde,{}),a.jsx(jO,{}),a.jsx(vde,{})]})}const kl=()=>{const{isRefinerAvailable:e}=as(Fx,{selectFromResult:({data:t})=>({isRefinerAvailable:t?t.ids.length>0:!1})});return e},Cde=fe([pe],({sdxl:e,ui:t,hotkeys:n})=>{const{refinerCFGScale:r}=e,{shouldUseSliders:o}=t,{shift:s}=n;return{refinerCFGScale:r,shouldUseSliders:o,shift:s}}),wde=()=>{const{refinerCFGScale:e,shouldUseSliders:t,shift:n}=H(Cde),r=kl(),o=te(),{t:s}=W(),l=i.useCallback(d=>o(B1(d)),[o]),c=i.useCallback(()=>o(B1(7)),[o]);return t?a.jsx(nt,{label:s("sdxl.cfgScale"),step:n?.1:.5,min:1,max:20,onChange:l,handleReset:c,value:e,sliderNumberInputProps:{max:200},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!r}):a.jsx(_s,{label:s("sdxl.cfgScale"),step:.5,min:1,max:200,onChange:l,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"},isDisabled:!r})},Sde=i.memo(wde),kde=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=T9.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data},jde=fe(pe,e=>({model:e.sdxl.refinerModel})),_de=()=>{const e=te(),t=Mt("syncModels").isFeatureEnabled,{model:n}=H(jde),{t:r}=W(),{data:o,isLoading:s}=as(Fx),l=i.useMemo(()=>{if(!o)return[];const f=[];return qn(o.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[o]),c=i.useMemo(()=>(o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])??null,[o==null?void 0:o.entities,n]),d=i.useCallback(f=>{if(!f)return;const m=kde(f);m&&e(FI(m))},[e]);return s?a.jsx(sn,{label:r("sdxl.refinermodel"),placeholder:r("sdxl.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{tooltip:c==null?void 0:c.description,label:r("sdxl.refinermodel"),value:c==null?void 0:c.id,placeholder:l.length>0?r("sdxl.selectAModel"):r("sdxl.noModelsAvailable"),data:l,error:l.length===0,disabled:l.length===0,onChange:d,w:"100%"}),t&&a.jsx(Ie,{mt:7,children:a.jsx(cu,{iconMode:!0})})]})},Ide=i.memo(_de),Pde=fe([pe],({sdxl:e,hotkeys:t})=>{const{refinerNegativeAestheticScore:n}=e,{shift:r}=t;return{refinerNegativeAestheticScore:n,shift:r}}),Ede=()=>{const{refinerNegativeAestheticScore:e,shift:t}=H(Pde),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>r(W1(c)),[r]),l=i.useCallback(()=>r(W1(2.5)),[r]);return a.jsx(nt,{label:o("sdxl.negAestheticScore"),step:t?.1:.5,min:1,max:10,onChange:s,handleReset:l,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Mde=i.memo(Ede),Ode=fe([pe],({sdxl:e,hotkeys:t})=>{const{refinerPositiveAestheticScore:n}=e,{shift:r}=t;return{refinerPositiveAestheticScore:n,shift:r}}),Dde=()=>{const{refinerPositiveAestheticScore:e,shift:t}=H(Ode),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>r(H1(c)),[r]),l=i.useCallback(()=>r(H1(6)),[r]);return a.jsx(nt,{label:o("sdxl.posAestheticScore"),step:t?.1:.5,min:1,max:10,onChange:s,handleReset:l,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Rde=i.memo(Dde),Ade=fe(pe,({ui:e,sdxl:t})=>{const{refinerScheduler:n}=t,{favoriteSchedulers:r}=e,o=Hr(Gh,(s,l)=>({value:l,label:s,group:r.includes(l)?"Favorites":void 0})).sort((s,l)=>s.label.localeCompare(l.label));return{refinerScheduler:n,data:o}}),Tde=()=>{const e=te(),{t}=W(),{refinerScheduler:n,data:r}=H(Ade),o=kl(),s=i.useCallback(l=>{l&&e(zI(l))},[e]);return a.jsx(sn,{w:"100%",label:t("sdxl.scheduler"),value:n,data:r,onChange:s,disabled:!o})},Nde=i.memo(Tde),$de=fe([pe],({sdxl:e})=>{const{refinerStart:t}=e;return{refinerStart:t}}),Lde=()=>{const{refinerStart:e}=H($de),t=te(),n=kl(),r=i.useCallback(l=>t(V1(l)),[t]),{t:o}=W(),s=i.useCallback(()=>t(V1(.8)),[t]);return a.jsx(nt,{label:o("sdxl.refinerStart"),step:.01,min:0,max:1,onChange:r,handleReset:s,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Fde=i.memo(Lde),zde=fe([pe],({sdxl:e,ui:t})=>{const{refinerSteps:n}=e,{shouldUseSliders:r}=t;return{refinerSteps:n,shouldUseSliders:r}}),Bde=()=>{const{refinerSteps:e,shouldUseSliders:t}=H(zde),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>{r(z1(c))},[r]),l=i.useCallback(()=>{r(z1(20))},[r]);return t?a.jsx(nt,{label:o("sdxl.steps"),min:1,max:100,step:1,onChange:s,handleReset:l,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:500},isDisabled:!n}):a.jsx(_s,{label:o("sdxl.steps"),min:1,max:500,step:1,onChange:s,value:e,numberInputFieldProps:{textAlign:"center"},isDisabled:!n})},Hde=i.memo(Bde);function Wde(){const e=H(s=>s.sdxl.shouldUseSDXLRefiner),t=kl(),n=te(),{t:r}=W(),o=i.useCallback(s=>{n(N9(s.target.checked))},[n]);return a.jsx(_n,{label:r("sdxl.useRefiner"),isChecked:e,onChange:o,isDisabled:!t})}const Vde=fe(pe,e=>{const{shouldUseSDXLRefiner:t}=e.sdxl,{shouldUseSliders:n}=e.ui;return{activeLabel:t?"Enabled":void 0,shouldUseSliders:n}}),Ude=()=>{const{activeLabel:e,shouldUseSliders:t}=H(Vde),{t:n}=W();return kl()?a.jsx(_r,{label:n("sdxl.refiner"),activeLabel:e,children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(Wde,{}),a.jsx(Ide,{}),a.jsxs($,{gap:2,flexDirection:t?"column":"row",children:[a.jsx(Hde,{}),a.jsx(Sde,{})]}),a.jsx(Nde,{}),a.jsx(Rde,{}),a.jsx(Mde,{}),a.jsx(Fde,{})]})}):a.jsx(_r,{label:n("sdxl.refiner"),activeLabel:e,children:a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:n("models.noRefinerModelsInstalled")})})})},F2=i.memo(Ude),Gde=fe([pe],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:l,inputMax:c}=t.sd.guidance,{cfgScale:d}=e,{shouldUseSliders:f}=n,{shift:m}=r;return{cfgScale:d,initial:o,min:s,sliderMax:l,inputMax:c,shouldUseSliders:f,shift:m}}),Kde=()=>{const{cfgScale:e,initial:t,min:n,sliderMax:r,inputMax:o,shouldUseSliders:s,shift:l}=H(Gde),c=te(),{t:d}=W(),f=i.useCallback(h=>c(Cm(h)),[c]),m=i.useCallback(()=>c(Cm(t)),[c,t]);return s?a.jsx(Ot,{feature:"paramCFGScale",children:a.jsx(nt,{label:d("parameters.cfgScale"),step:l?.1:.5,min:n,max:r,onChange:f,handleReset:m,value:e,sliderNumberInputProps:{max:o},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1})}):a.jsx(Ot,{feature:"paramCFGScale",children:a.jsx(_s,{label:d("parameters.cfgScale"),step:.5,min:n,max:o,onChange:f,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"}})})},Ds=i.memo(Kde),qde=fe(pe,e=>({model:e.generation.model})),Xde=()=>{const e=te(),{t}=W(),{model:n}=H(qde),r=Mt("syncModels").isFeatureEnabled,{data:o,isLoading:s}=as(tS),{data:l,isLoading:c}=vd(tS),d=H(tr),f=i.useMemo(()=>{if(!o)return[];const g=[];return qn(o.entities,(b,y)=>{b&&g.push({value:y,label:b.model_name,group:xn[b.base_model]})}),qn(l==null?void 0:l.entities,(b,y)=>{!b||d==="unifiedCanvas"||d==="img2img"||g.push({value:y,label:b.model_name,group:xn[b.base_model]})}),g},[o,l,d]),m=i.useMemo(()=>((o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])||(l==null?void 0:l.entities[`${n==null?void 0:n.base_model}/onnx/${n==null?void 0:n.model_name}`]))??null,[o==null?void 0:o.entities,n,l==null?void 0:l.entities]),h=i.useCallback(g=>{if(!g)return;const b=i0(g);b&&e(N1(b))},[e]);return s||c?a.jsx(sn,{label:t("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:3,children:[a.jsx(Ot,{feature:"paramModel",children:a.jsx(sn,{tooltip:m==null?void 0:m.description,label:t("modelManager.model"),value:m==null?void 0:m.id,placeholder:f.length>0?"Select a model":"No models available",data:f,error:f.length===0,disabled:f.length===0,onChange:h,w:"100%"})}),r&&a.jsx(Ie,{mt:6,children:a.jsx(cu,{iconMode:!0})})]})},Qde=i.memo(Xde),Yde=fe(pe,({generation:e})=>{const{model:t,vae:n}=e;return{model:t,vae:n}}),Zde=()=>{const e=te(),{t}=W(),{model:n,vae:r}=H(Yde),{data:o}=YI(),s=i.useMemo(()=>{if(!o)return[];const d=[{value:"default",label:"Default",group:"Default"}];return qn(o.entities,(f,m)=>{if(!f)return;const h=(n==null?void 0:n.base_model)!==f.base_model;d.push({value:m,label:f.model_name,group:xn[f.base_model],disabled:h,tooltip:h?`Incompatible base model: ${f.base_model}`:void 0})}),d.sort((f,m)=>f.disabled&&!m.disabled?1:-1)},[o,n==null?void 0:n.base_model]),l=i.useMemo(()=>(o==null?void 0:o.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[o==null?void 0:o.entities,r]),c=i.useCallback(d=>{if(!d||d==="default"){e(nc(null));return}const f=xO(d);f&&e(nc(f))},[e]);return a.jsx(Ot,{feature:"paramVAE",children:a.jsx(sn,{itemComponent:xl,tooltip:l==null?void 0:l.description,label:t("modelManager.vae"),value:(l==null?void 0:l.id)??"default",placeholder:"Default",data:s,onChange:c,disabled:s.length===0,clearable:!0})})},Jde=i.memo(Zde),efe=fe([pe],({ui:e,generation:t})=>{const{scheduler:n}=t,{favoriteSchedulers:r}=e,o=Hr(Gh,(s,l)=>({value:l,label:s,group:r.includes(l)?"Favorites":void 0})).sort((s,l)=>s.label.localeCompare(l.label));return{scheduler:n,data:o}}),tfe=()=>{const e=te(),{t}=W(),{scheduler:n,data:r}=H(efe),o=i.useCallback(s=>{s&&e($1(s))},[e]);return a.jsx(Ot,{feature:"paramScheduler",children:a.jsx(sn,{label:t("parameters.scheduler"),value:n,data:r,onChange:o})})},nfe=i.memo(tfe),rfe=fe(pe,({generation:e})=>{const{vaePrecision:t}=e;return{vaePrecision:t}}),ofe=["fp16","fp32"],sfe=()=>{const{t:e}=W(),t=te(),{vaePrecision:n}=H(rfe),r=i.useCallback(o=>{o&&t($9(o))},[t]);return a.jsx(Ot,{feature:"paramVAEPrecision",children:a.jsx(yn,{label:e("modelManager.vaePrecision"),value:n,data:ofe,onChange:r})})},afe=i.memo(sfe),lfe=()=>{const e=Mt("vae").isFeatureEnabled;return a.jsxs($,{gap:3,w:"full",flexWrap:e?"wrap":"nowrap",children:[a.jsx(Ie,{w:"full",children:a.jsx(Qde,{})}),a.jsx(Ie,{w:"full",children:a.jsx(nfe,{})}),e&&a.jsxs($,{w:"full",gap:3,children:[a.jsx(Jde,{}),a.jsx(afe,{})]})]})},Rs=i.memo(lfe),PO=[{name:wt.t("parameters.aspectRatioFree"),value:null},{name:"2:3",value:2/3},{name:"16:9",value:16/9},{name:"1:1",value:1/1}],EO=PO.map(e=>e.value);function MO(){const e=H(s=>s.generation.aspectRatio),t=te(),n=H(s=>s.generation.shouldFitToWidthHeight),r=H(tr),o=i.useCallback(s=>{t(Xo(s.value)),t(bd(!1))},[t]);return a.jsx($t,{isAttached:!0,children:PO.map(s=>a.jsx(Xe,{size:"sm",isChecked:e===s.value,isDisabled:r==="img2img"?!n:!1,onClick:o.bind(null,s),children:s.name},s.name))})}const ife=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{min:r,sliderMax:o,inputMax:s,fineStep:l,coarseStep:c}=n.sd.height,{model:d,height:f}=e,{aspectRatio:m}=e,h=t.shift?l:c;return{model:d,height:f,min:r,sliderMax:o,inputMax:s,step:h,aspectRatio:m}}),cfe=e=>{const{model:t,height:n,min:r,sliderMax:o,inputMax:s,step:l,aspectRatio:c}=H(ife),d=te(),{t:f}=W(),m=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,h=i.useCallback(b=>{if(d(Ja(b)),c){const y=kr(b*c,8);d(Za(y))}},[d,c]),g=i.useCallback(()=>{if(d(Ja(m)),c){const b=kr(m*c,8);d(Za(b))}},[d,m,c]);return a.jsx(nt,{label:f("parameters.height"),value:n,min:r,step:l,max:o,onChange:h,handleReset:g,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},ufe=i.memo(cfe),dfe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{min:r,sliderMax:o,inputMax:s,fineStep:l,coarseStep:c}=n.sd.width,{model:d,width:f,aspectRatio:m}=e,h=t.shift?l:c;return{model:d,width:f,min:r,sliderMax:o,inputMax:s,step:h,aspectRatio:m}}),ffe=e=>{const{model:t,width:n,min:r,sliderMax:o,inputMax:s,step:l,aspectRatio:c}=H(dfe),d=te(),{t:f}=W(),m=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,h=i.useCallback(b=>{if(d(Za(b)),c){const y=kr(b/c,8);d(Ja(y))}},[d,c]),g=i.useCallback(()=>{if(d(Za(m)),c){const b=kr(m/c,8);d(Ja(b))}},[d,m,c]);return a.jsx(nt,{label:f("parameters.width"),value:n,min:r,step:l,max:o,onChange:h,handleReset:g,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},pfe=i.memo(ffe),mfe=fe([pe,tr],({generation:e},t)=>{const{shouldFitToWidthHeight:n,shouldLockAspectRatio:r,width:o,height:s}=e;return{activeTabName:t,shouldFitToWidthHeight:n,shouldLockAspectRatio:r,width:o,height:s}});function Hc(){const{t:e}=W(),t=te(),{activeTabName:n,shouldFitToWidthHeight:r,shouldLockAspectRatio:o,width:s,height:l}=H(mfe),c=i.useCallback(()=>{o?(t(bd(!1)),EO.includes(s/l)?t(Xo(s/l)):t(Xo(null))):(t(bd(!0)),t(Xo(s/l)))},[o,s,l,t]),d=i.useCallback(()=>{t(L9()),t(Xo(null)),o&&t(Xo(l/s))},[t,o,s,l]);return a.jsxs($,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.150",_dark:{bg:"base.750"}},children:[a.jsx(Ot,{feature:"paramRatio",children:a.jsxs(Gt,{as:$,flexDir:"row",alignItems:"center",gap:2,children:[a.jsx(ln,{children:e("parameters.aspectRatio")}),a.jsx(Wr,{}),a.jsx(MO,{}),a.jsx(Fe,{tooltip:e("ui.swapSizes"),"aria-label":e("ui.swapSizes"),size:"sm",icon:a.jsx(k7,{}),fontSize:20,isDisabled:n==="img2img"?!r:!1,onClick:d}),a.jsx(Fe,{tooltip:e("ui.lockRatio"),"aria-label":e("ui.lockRatio"),size:"sm",icon:a.jsx(VM,{}),isChecked:o,isDisabled:n==="img2img"?!r:!1,onClick:c})]})}),a.jsx($,{gap:2,alignItems:"center",children:a.jsxs($,{gap:2,flexDirection:"column",width:"full",children:[a.jsx(pfe,{isDisabled:n==="img2img"?!r:!1}),a.jsx(ufe,{isDisabled:n==="img2img"?!r:!1})]})})]})}const hfe=fe([pe],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:l,inputMax:c,fineStep:d,coarseStep:f}=t.sd.steps,{steps:m}=e,{shouldUseSliders:h}=n,g=r.shift?d:f;return{steps:m,initial:o,min:s,sliderMax:l,inputMax:c,step:g,shouldUseSliders:h}}),gfe=()=>{const{steps:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s,shouldUseSliders:l}=H(hfe),c=te(),{t:d}=W(),f=i.useCallback(g=>{c(Sm(g))},[c]),m=i.useCallback(()=>{c(Sm(t))},[c,t]),h=i.useCallback(()=>{c(Nx())},[c]);return l?a.jsx(Ot,{feature:"paramSteps",children:a.jsx(nt,{label:d("parameters.steps"),min:n,max:r,step:s,onChange:f,handleReset:m,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:o}})}):a.jsx(Ot,{feature:"paramSteps",children:a.jsx(_s,{label:d("parameters.steps"),min:n,max:o,step:s,onChange:f,value:e,numberInputFieldProps:{textAlign:"center"},onBlur:h})})},As=i.memo(gfe);function OO(){const e=te(),t=H(o=>o.generation.shouldFitToWidthHeight),n=i.useCallback(o=>{e(F9(o.target.checked))},[e]),{t:r}=W();return a.jsx(_n,{label:r("parameters.imageFit"),isChecked:t,onChange:n})}function vfe(){const e=H(l=>l.generation.seed),t=H(l=>l.generation.shouldRandomizeSeed),n=H(l=>l.generation.shouldGenerateVariations),{t:r}=W(),o=te(),s=i.useCallback(l=>o(ym(l)),[o]);return a.jsx(_s,{label:r("parameters.seed"),step:1,precision:0,flexGrow:1,min:e3,max:t3,isDisabled:t,isInvalid:e<0&&n,onChange:s,value:e})}const bfe=(e,t)=>Math.floor(Math.random()*(t-e+1)+e);function xfe(){const e=te(),t=H(o=>o.generation.shouldRandomizeSeed),{t:n}=W(),r=i.useCallback(()=>e(ym(bfe(e3,t3))),[e]);return a.jsx(Fe,{size:"sm",isDisabled:t,"aria-label":n("parameters.shuffle"),tooltip:n("parameters.shuffle"),onClick:r,icon:a.jsx(Wte,{})})}const yfe=()=>{const e=te(),{t}=W(),n=H(o=>o.generation.shouldRandomizeSeed),r=i.useCallback(o=>e(z9(o.target.checked)),[e]);return a.jsx(_n,{label:t("common.random"),isChecked:n,onChange:r})},Cfe=i.memo(yfe),wfe=()=>a.jsx(Ot,{feature:"paramSeed",children:a.jsxs($,{sx:{gap:3,alignItems:"flex-end"},children:[a.jsx(vfe,{}),a.jsx(xfe,{}),a.jsx(Cfe,{})]})}),Ts=i.memo(wfe),DO=_e((e,t)=>a.jsxs($,{ref:t,sx:{flexDir:"column",gap:2,bg:"base.100",px:4,pt:2,pb:4,borderRadius:"base",_dark:{bg:"base.750"}},children:[a.jsx(be,{fontSize:"sm",fontWeight:"bold",sx:{color:"base.600",_dark:{color:"base.300"}},children:e.label}),e.children]}));DO.displayName="SubSettingsWrapper";const Wc=i.memo(DO),Sfe=fe([pe],({sdxl:e})=>{const{sdxlImg2ImgDenoisingStrength:t}=e;return{sdxlImg2ImgDenoisingStrength:t}}),kfe=()=>{const{sdxlImg2ImgDenoisingStrength:e}=H(Sfe),t=te(),{t:n}=W(),r=i.useCallback(s=>t(nS(s)),[t]),o=i.useCallback(()=>{t(nS(.7))},[t]);return a.jsx(Ot,{feature:"paramDenoisingStrength",children:a.jsx(Wc,{children:a.jsx(nt,{label:n("sdxl.denoisingStrength"),step:.01,min:0,max:1,onChange:r,handleReset:o,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0})})})},RO=i.memo(kfe),jfe=fe([pe],({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}}),_fe=()=>{const{t:e}=W(),{shouldUseSliders:t,activeLabel:n}=H(jfe);return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}),a.jsx(RO,{}),a.jsx(OO,{})]})})},Ife=i.memo(_fe),Pfe=()=>a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(Ife,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(fu,{})]}),Efe=i.memo(Pfe),z2=()=>{const{t:e}=W(),t=H(l=>l.generation.shouldRandomizeSeed),n=H(l=>l.generation.iterations),r=i.useMemo(()=>n===1?e("parameters.iterationsWithCount_one",{count:1}):e("parameters.iterationsWithCount_other",{count:n}),[n,e]),o=i.useMemo(()=>e(t?"parameters.randomSeed":"parameters.manualSeed"),[t,e]);return{iterationsAndSeedLabel:i.useMemo(()=>[r,o].join(", "),[r,o]),iterationsLabel:r,seedLabel:o}},Mfe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsx($,{sx:{flexDirection:"column",gap:3},children:t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]})})})},AO=i.memo(Mfe),Ofe=()=>a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(AO,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(fu,{})]}),Dfe=i.memo(Ofe),Rfe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceMode),{t:n}=W(),r=i.useMemo(()=>[{label:n("parameters.unmasked"),value:"unmasked"},{label:n("unifiedCanvas.mask"),value:"mask"},{label:n("parameters.maskEdge"),value:"edge"}],[n]),o=i.useCallback(s=>{s&&e(B9(s))},[e]);return a.jsx(Ot,{feature:"compositingCoherenceMode",children:a.jsx(yn,{label:n("parameters.coherenceMode"),data:r,value:t,onChange:o})})},Afe=i.memo(Rfe),Tfe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceSteps),{t:n}=W(),r=i.useCallback(s=>{e(rS(s))},[e]),o=i.useCallback(()=>{e(rS(20))},[e]);return a.jsx(Ot,{feature:"compositingCoherenceSteps",children:a.jsx(nt,{label:n("parameters.coherenceSteps"),min:1,max:100,step:1,sliderNumberInputProps:{max:999},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})},Nfe=i.memo(Tfe),$fe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceStrength),{t:n}=W(),r=i.useCallback(s=>{e(oS(s))},[e]),o=i.useCallback(()=>{e(oS(.3))},[e]);return a.jsx(Ot,{feature:"compositingStrength",children:a.jsx(nt,{label:n("parameters.coherenceStrength"),min:0,max:1,step:.01,sliderNumberInputProps:{max:999},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})},Lfe=i.memo($fe);function Ffe(){const e=te(),t=H(s=>s.generation.maskBlur),{t:n}=W(),r=i.useCallback(s=>{e(sS(s))},[e]),o=i.useCallback(()=>{e(sS(16))},[e]);return a.jsx(Ot,{feature:"compositingBlur",children:a.jsx(nt,{label:n("parameters.maskBlur"),min:0,max:64,sliderNumberInputProps:{max:512},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})}const zfe=[{label:"Box Blur",value:"box"},{label:"Gaussian Blur",value:"gaussian"}];function Bfe(){const e=H(o=>o.generation.maskBlurMethod),t=te(),{t:n}=W(),r=i.useCallback(o=>{o&&t(H9(o))},[t]);return a.jsx(Ot,{feature:"compositingBlurMethod",children:a.jsx(yn,{value:e,onChange:r,label:n("parameters.maskBlurMethod"),data:zfe})})}const Hfe=()=>{const{t:e}=W();return a.jsx(_r,{label:e("parameters.compositingSettingsHeader"),children:a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsxs(Wc,{label:e("parameters.coherencePassHeader"),children:[a.jsx(Afe,{}),a.jsx(Nfe,{}),a.jsx(Lfe,{})]}),a.jsx(On,{}),a.jsxs(Wc,{label:e("parameters.maskAdjustmentsHeader"),children:[a.jsx(Ffe,{}),a.jsx(Bfe,{})]})]})})},TO=i.memo(Hfe),Wfe=fe([pe],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}}),Vfe=()=>{const e=te(),{infillMethod:t}=H(Wfe),{data:n,isLoading:r}=_I(),o=n==null?void 0:n.infill_methods,{t:s}=W(),l=i.useCallback(c=>{e(W9(c))},[e]);return a.jsx(Ot,{feature:"infillMethod",children:a.jsx(yn,{disabled:(o==null?void 0:o.length)===0,placeholder:r?"Loading...":void 0,label:s("parameters.infillMethod"),value:t,data:o??[],onChange:l})})},Ufe=i.memo(Vfe),Gfe=fe([pe],({generation:e})=>{const{infillPatchmatchDownscaleSize:t,infillMethod:n}=e;return{infillPatchmatchDownscaleSize:t,infillMethod:n}}),Kfe=()=>{const e=te(),{infillPatchmatchDownscaleSize:t,infillMethod:n}=H(Gfe),{t:r}=W(),o=i.useCallback(l=>{e(aS(l))},[e]),s=i.useCallback(()=>{e(aS(2))},[e]);return a.jsx(nt,{isDisabled:n!=="patchmatch",label:r("parameters.patchmatchDownScaleSize"),min:1,max:10,value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},qfe=i.memo(Kfe),Xfe=fe([pe],({generation:e})=>{const{infillTileSize:t,infillMethod:n}=e;return{infillTileSize:t,infillMethod:n}}),Qfe=()=>{const e=te(),{infillTileSize:t,infillMethod:n}=H(Xfe),{t:r}=W(),o=i.useCallback(l=>{e(lS(l))},[e]),s=i.useCallback(()=>{e(lS(32))},[e]);return a.jsx(nt,{isDisabled:n!=="tile",label:r("parameters.tileSize"),min:16,max:64,sliderNumberInputProps:{max:256},value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},Yfe=i.memo(Qfe),Zfe=fe([pe],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}});function Jfe(){const{infillMethod:e}=H(Zfe);return a.jsxs($,{children:[e==="tile"&&a.jsx(Yfe,{}),e==="patchmatch"&&a.jsx(qfe,{})]})}const epe=fe([pe],({canvas:e})=>{const{boundingBoxScaleMethod:t}=e;return{boundingBoxScale:t}}),tpe=()=>{const e=te(),{boundingBoxScale:t}=H(epe),{t:n}=W(),r=i.useCallback(o=>{e(V9(o))},[e]);return a.jsx(Ot,{feature:"scaleBeforeProcessing",children:a.jsx(sn,{label:n("parameters.scaleBeforeProcessing"),data:U9,value:t,onChange:r})})},npe=i.memo(tpe),rpe=fe([pe],({generation:e,canvas:t})=>{const{scaledBoundingBoxDimensions:n,boundingBoxScaleMethod:r}=t,{model:o,aspectRatio:s}=e;return{model:o,scaledBoundingBoxDimensions:n,isManual:r==="manual",aspectRatio:s}}),ope=()=>{const e=te(),{model:t,isManual:n,scaledBoundingBoxDimensions:r,aspectRatio:o}=H(rpe),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{let m=r.width;const h=Math.floor(f);o&&(m=kr(h*o,64)),e(Pm({width:m,height:h}))},[o,e,r.width]),d=i.useCallback(()=>{let f=r.width;const m=Math.floor(s);o&&(f=kr(m*o,64)),e(Pm({width:f,height:m}))},[o,e,s,r.width]);return a.jsx(nt,{isDisabled:!n,label:l("parameters.scaledHeight"),min:64,max:1536,step:64,value:r.height,onChange:c,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},spe=i.memo(ope),ape=fe([pe],({canvas:e,generation:t})=>{const{boundingBoxScaleMethod:n,scaledBoundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,scaledBoundingBoxDimensions:r,aspectRatio:s,isManual:n==="manual"}}),lpe=()=>{const e=te(),{model:t,isManual:n,scaledBoundingBoxDimensions:r,aspectRatio:o}=H(ape),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{const m=Math.floor(f);let h=r.height;o&&(h=kr(m/o,64)),e(Pm({width:m,height:h}))},[o,e,r.height]),d=i.useCallback(()=>{const f=Math.floor(s);let m=r.height;o&&(m=kr(f/o,64)),e(Pm({width:f,height:m}))},[o,e,s,r.height]);return a.jsx(nt,{isDisabled:!n,label:l("parameters.scaledWidth"),min:64,max:1536,step:64,value:r.width,onChange:c,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},ipe=i.memo(lpe),cpe=()=>{const{t:e}=W();return a.jsx(_r,{label:e("parameters.infillScalingHeader"),children:a.jsxs($,{sx:{gap:2,flexDirection:"column"},children:[a.jsxs(Wc,{children:[a.jsx(Ufe,{}),a.jsx(Jfe,{})]}),a.jsx(On,{}),a.jsxs(Wc,{children:[a.jsx(npe,{}),a.jsx(ipe,{}),a.jsx(spe,{})]})]})})},NO=i.memo(cpe),Lo=fe([pe],({canvas:e})=>e.batchIds.length>0||e.layerState.stagingArea.images.length>0),upe=fe([pe,Lo],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,boundingBoxDimensions:r,isStaging:n,aspectRatio:s}}),dpe=()=>{const e=te(),{model:t,boundingBoxDimensions:n,isStaging:r,aspectRatio:o}=H(upe),{t:s}=W(),l=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,c=i.useCallback(f=>{if(e(es({...n,height:Math.floor(f)})),o){const m=kr(f*o,64);e(es({width:m,height:Math.floor(f)}))}},[o,n,e]),d=i.useCallback(()=>{if(e(es({...n,height:Math.floor(l)})),o){const f=kr(l*o,64);e(es({width:f,height:Math.floor(l)}))}},[o,n,e,l]);return a.jsx(nt,{label:s("parameters.boundingBoxHeight"),min:64,max:1536,step:64,value:n.height,onChange:c,isDisabled:r,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},fpe=i.memo(dpe),ppe=fe([pe,Lo],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,boundingBoxDimensions:r,isStaging:n,aspectRatio:s}}),mpe=()=>{const e=te(),{model:t,boundingBoxDimensions:n,isStaging:r,aspectRatio:o}=H(ppe),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{if(e(es({...n,width:Math.floor(f)})),o){const m=kr(f/o,64);e(es({width:Math.floor(f),height:m}))}},[o,n,e]),d=i.useCallback(()=>{if(e(es({...n,width:Math.floor(s)})),o){const f=kr(s/o,64);e(es({width:Math.floor(s),height:f}))}},[o,n,e,s]);return a.jsx(nt,{label:l("parameters.boundingBoxWidth"),min:64,max:1536,step:64,value:n.width,onChange:c,isDisabled:r,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},hpe=i.memo(mpe),gpe=fe([pe],({generation:e,canvas:t})=>{const{shouldFitToWidthHeight:n,shouldLockAspectRatio:r}=e,{boundingBoxDimensions:o}=t;return{shouldFitToWidthHeight:n,shouldLockAspectRatio:r,boundingBoxDimensions:o}});function Hh(){const e=te(),{t}=W(),{shouldLockAspectRatio:n,boundingBoxDimensions:r}=H(gpe),o=i.useCallback(()=>{n?(e(bd(!1)),EO.includes(r.width/r.height)?e(Xo(r.width/r.height)):e(Xo(null))):(e(bd(!0)),e(Xo(r.width/r.height)))},[n,r,e]),s=i.useCallback(()=>{e(G9()),e(Xo(null)),n&&e(Xo(r.height/r.width))},[e,n,r]);return a.jsxs($,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.100",_dark:{bg:"base.750"}},children:[a.jsx(Ot,{feature:"paramRatio",children:a.jsxs(Gt,{as:$,flexDir:"row",alignItems:"center",gap:2,children:[a.jsx(ln,{children:t("parameters.aspectRatio")}),a.jsx(Wr,{}),a.jsx(MO,{}),a.jsx(Fe,{tooltip:t("ui.swapSizes"),"aria-label":t("ui.swapSizes"),size:"sm",icon:a.jsx(k7,{}),fontSize:20,onClick:s}),a.jsx(Fe,{tooltip:t("ui.lockRatio"),"aria-label":t("ui.lockRatio"),size:"sm",icon:a.jsx(VM,{}),isChecked:n,onClick:o})]})}),a.jsx(hpe,{}),a.jsx(fpe,{})]})}const vpe=fe(pe,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}}),bpe=()=>{const{t:e}=W(),{shouldUseSliders:t,activeLabel:n}=H(vpe);return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}),a.jsx(RO,{})]})})},xpe=i.memo(bpe);function ype(){return a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(xpe,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(NO,{}),a.jsx(TO,{}),a.jsx(fu,{})]})}function B2(){return a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(_O,{}),a.jsx(jO,{})]})}function Cpe(){const e=H(l=>l.generation.horizontalSymmetrySteps),t=H(l=>l.generation.steps),n=te(),{t:r}=W(),o=i.useCallback(l=>{n(iS(l))},[n]),s=i.useCallback(()=>{n(iS(0))},[n]);return a.jsx(nt,{label:r("parameters.hSymmetryStep"),value:e,onChange:o,min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})}function wpe(){const e=H(r=>r.generation.shouldUseSymmetry),t=te(),n=i.useCallback(r=>{t(K9(r.target.checked))},[t]);return a.jsx(_n,{label:"Enable Symmetry",isChecked:e,onChange:n})}function Spe(){const e=H(l=>l.generation.verticalSymmetrySteps),t=H(l=>l.generation.steps),n=te(),{t:r}=W(),o=i.useCallback(l=>{n(cS(l))},[n]),s=i.useCallback(()=>{n(cS(0))},[n]);return a.jsx(nt,{label:r("parameters.vSymmetryStep"),value:e,onChange:o,min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})}const kpe=fe(pe,e=>({activeLabel:e.generation.shouldUseSymmetry?"Enabled":void 0})),jpe=()=>{const{t:e}=W(),{activeLabel:t}=H(kpe);return Mt("symmetry").isFeatureEnabled?a.jsx(_r,{label:e("parameters.symmetry"),activeLabel:t,children:a.jsxs($,{sx:{gap:2,flexDirection:"column"},children:[a.jsx(wpe,{}),a.jsx(Cpe,{}),a.jsx(Spe,{})]})}):null},H2=i.memo(jpe),_pe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:l,fineStep:c,coarseStep:d}=n.sd.img2imgStrength,{img2imgStrength:f}=e,m=t.shift?c:d;return{img2imgStrength:f,initial:r,min:o,sliderMax:s,inputMax:l,step:m}}),Ipe=()=>{const{img2imgStrength:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s}=H(_pe),l=te(),{t:c}=W(),d=i.useCallback(m=>l(km(m)),[l]),f=i.useCallback(()=>{l(km(t))},[l,t]);return a.jsx(Ot,{feature:"paramDenoisingStrength",children:a.jsx(Wc,{children:a.jsx(nt,{label:`${c("parameters.denoisingStrength")}`,step:s,min:n,max:r,onChange:d,handleReset:f,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0,sliderNumberInputProps:{max:o}})})})},$O=i.memo(Ipe),Ppe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}),a.jsx($O,{}),a.jsx(OO,{})]})})},Epe=i.memo(Ppe),Mpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(Epe,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(fu,{})]}),Ope=i.memo(Mpe),Dpe=fe(pe,({generation:e})=>{const{hrfMethod:t,hrfEnabled:n}=e;return{hrfMethod:t,hrfEnabled:n}}),Rpe=["ESRGAN","bilinear"],Ape=()=>{const e=te(),{t}=W(),{hrfMethod:n,hrfEnabled:r}=H(Dpe),o=i.useCallback(s=>{s&&e(F1(s))},[e]);return a.jsx(yn,{label:t("hrf.upscaleMethod"),value:n,data:Rpe,onChange:o,disabled:!r})},Tpe=i.memo(Ape),Npe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:l,fineStep:c,coarseStep:d}=n.sd.hrfStrength,{hrfStrength:f,hrfEnabled:m}=e,h=t.shift?c:d;return{hrfStrength:f,initial:r,min:o,sliderMax:s,inputMax:l,step:h,hrfEnabled:m}}),$pe=()=>{const{hrfStrength:e,initial:t,min:n,sliderMax:r,step:o,hrfEnabled:s}=H(Npe),l=te(),{t:c}=W(),d=i.useCallback(()=>{l(jm(t))},[l,t]),f=i.useCallback(m=>{l(jm(m))},[l]);return a.jsx(Ut,{label:c("hrf.strengthTooltip"),placement:"right",hasArrow:!0,children:a.jsx(nt,{label:c("parameters.denoisingStrength"),min:n,max:r,step:o,value:e,onChange:f,withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d,isDisabled:!s})})},Lpe=i.memo($pe);function Fpe(){const e=te(),{t}=W(),n=H(o=>o.generation.hrfEnabled),r=i.useCallback(o=>e(L1(o.target.checked)),[e]);return a.jsx(_n,{label:t("hrf.enableHrf"),isChecked:n,onChange:r,tooltip:t("hrf.enableHrfTooltip")})}const zpe=fe(pe,e=>{const{hrfEnabled:t}=e.generation;return{hrfEnabled:t}});function Bpe(){const{t:e}=W(),t=Mt("hrf").isFeatureEnabled,{hrfEnabled:n}=H(zpe),r=i.useMemo(()=>{if(n)return e("common.on")},[e,n]);return t?a.jsx(_r,{label:e("hrf.hrf"),activeLabel:r,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Fpe,{}),a.jsx(Lpe,{}),a.jsx(Tpe,{})]})}):null}const Hpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(AO,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(Bpe,{}),a.jsx(fu,{})]}),Wpe=i.memo(Hpe),Vpe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}),a.jsx($O,{})]})})},Upe=i.memo(Vpe),Gpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(Upe,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(NO,{}),a.jsx(TO,{}),a.jsx(fu,{})]}),Kpe=i.memo(Gpe),qpe=()=>{const e=H(tr),t=H(n=>n.generation.model);return e==="txt2img"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(Dfe,{}):a.jsx(Wpe,{})}):e==="img2img"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(Efe,{}):a.jsx(Ope,{})}):e==="unifiedCanvas"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(ype,{}):a.jsx(Kpe,{})}):null},Xpe=i.memo(qpe),bm=i.memo(e=>a.jsxs($,{sx:{w:"full",h:"full",flexDir:"column",gap:2},children:[a.jsx(z7,{}),a.jsx($,{layerStyle:"first",sx:{w:"full",h:"full",position:"relative",borderRadius:"base",p:2},children:a.jsx($,{sx:{w:"full",h:"full",position:"relative"},children:a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:800,theme:"os-theme-dark"},overflow:{x:"hidden"}},children:a.jsx($,{sx:{gap:2,flexDirection:"column",h:"full",w:"full"},children:e.children})})})})})]}));bm.displayName="ParametersPanelWrapper";const Qpe=fe([pe],e=>{const{initialImage:t}=e.generation,{isConnected:n}=e.system;return{initialImage:t,isResetButtonDisabled:!t,isConnected:n}}),Ype=()=>{const e=te(),{initialImage:t,isConnected:n}=H(Qpe),{currentData:r,isError:o}=jo((t==null?void 0:t.imageName)??Br),s=i.useMemo(()=>{if(r)return{id:"initial-image",payloadType:"IMAGE_DTO",payload:{imageDTO:r}}},[r]),l=i.useMemo(()=>({id:"initial-image",actionType:"SET_INITIAL_IMAGE"}),[]);return i.useEffect(()=>{o&&n&&e(n3())},[e,n,o]),a.jsx(fl,{imageDTO:r,droppableData:l,draggableData:s,isUploadDisabled:!0,fitContainer:!0,dropLabel:"Set as Initial Image",noContentFallback:a.jsx(Tn,{label:"No initial image selected"}),dataTestId:"initial-image"})},Zpe=i.memo(Ype),Jpe=fe([pe],e=>{const{initialImage:t}=e.generation;return{isResetButtonDisabled:!t,initialImage:t}}),eme={type:"SET_INITIAL_IMAGE"},tme=()=>{const{recallWidthAndHeight:e}=Sf(),{t}=W(),{isResetButtonDisabled:n,initialImage:r}=H(Jpe),o=te(),{getUploadButtonProps:s,getUploadInputProps:l}=S2({postUploadAction:eme}),c=i.useCallback(()=>{o(n3())},[o]),d=i.useCallback(()=>{r&&e(r.width,r.height)},[r,e]);return tt("shift+d",d,[r]),a.jsxs($,{layerStyle:"first",sx:{position:"relative",flexDirection:"column",height:"full",width:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",p:2,gap:4},children:[a.jsxs($,{sx:{w:"full",flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[a.jsx(be,{sx:{ps:2,fontWeight:600,userSelect:"none",color:"base.700",_dark:{color:"base.200"}},children:t("metadata.initImage")}),a.jsx(Wr,{}),a.jsx(Fe,{tooltip:"Upload Initial Image","aria-label":"Upload Initial Image",icon:a.jsx($g,{}),...s()}),a.jsx(Fe,{tooltip:`${t("parameters.useSize")} (Shift+D)`,"aria-label":`${t("parameters.useSize")} (Shift+D)`,icon:a.jsx(Qy,{}),onClick:d,isDisabled:n}),a.jsx(Fe,{tooltip:"Reset Initial Image","aria-label":"Reset Initial Image",icon:a.jsx(Ng,{}),onClick:c,isDisabled:n})]}),a.jsx(Zpe,{}),a.jsx("input",{...l()})]})},nme=i.memo(tme),rme=e=>{const{onClick:t,isDisabled:n}=e,{t:r}=W(),o=H(s=>s.system.isConnected);return a.jsx(Fe,{onClick:t,icon:a.jsx(ao,{}),tooltip:`${r("gallery.deleteImage")} (Del)`,"aria-label":`${r("gallery.deleteImage")} (Del)`,isDisabled:n||!o,colorScheme:"error"})},LO=()=>{const[e,{isLoading:t}]=Yh({fixedCacheKey:"enqueueBatch"}),[n,{isLoading:r}]=KI({fixedCacheKey:"resumeProcessor"}),[o,{isLoading:s}]=UI({fixedCacheKey:"pauseProcessor"}),[l,{isLoading:c}]=Rx({fixedCacheKey:"cancelQueueItem"}),[d,{isLoading:f}]=VI({fixedCacheKey:"clearQueue"}),[m,{isLoading:h}]=r3({fixedCacheKey:"pruneQueue"});return t||r||s||c||f||h},ome=[{label:"RealESRGAN x2 Plus",value:"RealESRGAN_x2plus.pth",tooltip:"Attempts to retain sharpness, low smoothing",group:"x2 Upscalers"},{label:"RealESRGAN x4 Plus",value:"RealESRGAN_x4plus.pth",tooltip:"Best for photos and highly detailed images, medium smoothing",group:"x4 Upscalers"},{label:"RealESRGAN x4 Plus (anime 6B)",value:"RealESRGAN_x4plus_anime_6B.pth",tooltip:"Best for anime/manga, high smoothing",group:"x4 Upscalers"},{label:"ESRGAN SRx4",value:"ESRGAN_SRx4_DF2KOST_official-ff704c30.pth",tooltip:"Retains sharpness, low smoothing",group:"x4 Upscalers"}];function sme(){const{t:e}=W(),t=H(o=>o.postprocessing.esrganModelName),n=te(),r=i.useCallback(o=>n(q9(o)),[n]);return a.jsx(yn,{label:e("models.esrganModel"),value:t,itemComponent:xl,onChange:r,data:ome})}const ame=e=>{const{imageDTO:t}=e,n=te(),r=LO(),{t:o}=W(),{isOpen:s,onOpen:l,onClose:c}=sr(),{isAllowedToUpscale:d,detail:f}=X9(t),m=i.useCallback(()=>{c(),!(!t||!d)&&n(o3({imageDTO:t}))},[n,t,d,c]);return a.jsx(xf,{isOpen:s,onClose:c,triggerComponent:a.jsx(Fe,{tooltip:o("parameters.upscale"),onClick:l,icon:a.jsx(zM,{}),"aria-label":o("parameters.upscale")}),children:a.jsxs($,{sx:{flexDirection:"column",gap:4},children:[a.jsx(sme,{}),a.jsx(Xe,{tooltip:f,size:"sm",isDisabled:!t||r||!d,onClick:m,children:o("parameters.upscaleImage")})]})})},lme=i.memo(ame),ime=fe([pe,tr],({gallery:e,system:t,ui:n,config:r},o)=>{const{isConnected:s,shouldConfirmOnDelete:l,denoiseProgress:c}=t,{shouldShowImageDetails:d,shouldHidePreview:f,shouldShowProgressInViewer:m}=n,{shouldFetchMetadataFromApi:h}=r,g=e.selection[e.selection.length-1];return{shouldConfirmOnDelete:l,isConnected:s,shouldDisableToolbarButtons:!!(c!=null&&c.progress_image)||!g,shouldShowImageDetails:d,activeTabName:o,shouldHidePreview:f,shouldShowProgressInViewer:m,lastSelectedImage:g,shouldFetchMetadataFromApi:h}}),cme=()=>{const e=te(),{isConnected:t,shouldDisableToolbarButtons:n,shouldShowImageDetails:r,lastSelectedImage:o,shouldShowProgressInViewer:s}=H(ime),l=Mt("upscaling").isFeatureEnabled,c=LO(),d=zs(),{t:f}=W(),{recallBothPrompts:m,recallSeed:h,recallWidthAndHeight:g,recallAllParameters:b}=Sf(),{currentData:y}=jo((o==null?void 0:o.image_name)??Br),{metadata:x,isLoading:w}=_2(o==null?void 0:o.image_name),{getAndLoadEmbeddedWorkflow:S,getAndLoadEmbeddedWorkflowResult:j}=I7({}),_=i.useCallback(()=>{!o||!o.has_workflow||S(o.image_name)},[S,o]);tt("w",_,[o]);const I=i.useCallback(()=>{b(x)},[x,b]);tt("a",I,[x]);const E=i.useCallback(()=>{h(x==null?void 0:x.seed)},[x==null?void 0:x.seed,h]);tt("s",E,[x]);const M=i.useCallback(()=>{m(x==null?void 0:x.positive_prompt,x==null?void 0:x.negative_prompt,x==null?void 0:x.positive_style_prompt,x==null?void 0:x.negative_style_prompt)},[x==null?void 0:x.negative_prompt,x==null?void 0:x.positive_prompt,x==null?void 0:x.positive_style_prompt,x==null?void 0:x.negative_style_prompt,m]);tt("p",M,[x]);const D=i.useCallback(()=>{g(x==null?void 0:x.width,x==null?void 0:x.height)},[x==null?void 0:x.width,x==null?void 0:x.height,g]);tt("d",D,[x]);const R=i.useCallback(()=>{e(_7()),e(Qh(y))},[e,y]);tt("shift+i",R,[y]);const N=i.useCallback(()=>{y&&e(o3({imageDTO:y}))},[e,y]),O=i.useCallback(()=>{y&&e(Xh([y]))},[e,y]);tt("Shift+U",()=>{N()},{enabled:()=>!!(l&&!n&&t)},[l,y,n,t]);const T=i.useCallback(()=>e(Q9(!r)),[e,r]);tt("i",()=>{y?T():d({title:f("toast.metadataLoadFailed"),status:"error",duration:2500,isClosable:!0})},[y,r,d]),tt("delete",()=>{O()},[e,y]);const U=i.useCallback(()=>{e(II(!s))},[e,s]);return a.jsx(a.Fragment,{children:a.jsxs($,{sx:{flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[a.jsx($t,{isAttached:!0,isDisabled:n,children:a.jsxs(of,{isLazy:!0,children:[a.jsx(sf,{as:Fe,"aria-label":f("parameters.imageActions"),tooltip:f("parameters.imageActions"),isDisabled:!y,icon:a.jsx(P7,{})}),a.jsx(al,{motionProps:Yl,children:y&&a.jsx(E7,{imageDTO:y})})]})}),a.jsxs($t,{isAttached:!0,isDisabled:n,children:[a.jsx(Fe,{icon:a.jsx(e0,{}),tooltip:`${f("nodes.loadWorkflow")} (W)`,"aria-label":`${f("nodes.loadWorkflow")} (W)`,isDisabled:!(y!=null&&y.has_workflow),onClick:_,isLoading:j.isLoading}),a.jsx(Fe,{isLoading:w,icon:a.jsx(GM,{}),tooltip:`${f("parameters.usePrompt")} (P)`,"aria-label":`${f("parameters.usePrompt")} (P)`,isDisabled:!(x!=null&&x.positive_prompt),onClick:M}),a.jsx(Fe,{isLoading:w,icon:a.jsx(KM,{}),tooltip:`${f("parameters.useSeed")} (S)`,"aria-label":`${f("parameters.useSeed")} (S)`,isDisabled:(x==null?void 0:x.seed)===null||(x==null?void 0:x.seed)===void 0,onClick:E}),a.jsx(Fe,{isLoading:w,icon:a.jsx(Qy,{}),tooltip:`${f("parameters.useSize")} (D)`,"aria-label":`${f("parameters.useSize")} (D)`,isDisabled:(x==null?void 0:x.height)===null||(x==null?void 0:x.height)===void 0||(x==null?void 0:x.width)===null||(x==null?void 0:x.width)===void 0,onClick:D}),a.jsx(Fe,{isLoading:w,icon:a.jsx(NM,{}),tooltip:`${f("parameters.useAll")} (A)`,"aria-label":`${f("parameters.useAll")} (A)`,isDisabled:!x,onClick:I})]}),l&&a.jsx($t,{isAttached:!0,isDisabled:c,children:l&&a.jsx(lme,{imageDTO:y})}),a.jsx($t,{isAttached:!0,children:a.jsx(Fe,{icon:a.jsx(LM,{}),tooltip:`${f("parameters.info")} (I)`,"aria-label":`${f("parameters.info")} (I)`,isChecked:r,onClick:T})}),a.jsx($t,{isAttached:!0,children:a.jsx(Fe,{"aria-label":f("settings.displayInProgress"),tooltip:f("settings.displayInProgress"),icon:a.jsx(Ate,{}),isChecked:s,onClick:U})}),a.jsx($t,{isAttached:!0,children:a.jsx(rme,{onClick:O})})]})})},ume=i.memo(cme),dme=()=>{const e=H(n=>{var r;return(r=n.system.denoiseProgress)==null?void 0:r.progress_image}),t=H(n=>n.system.shouldAntialiasProgressImage);return e?a.jsx(Ca,{src:e.dataURL,width:e.width,height:e.height,draggable:!1,"data-testid":"progress-image",sx:{objectFit:"contain",maxWidth:"full",maxHeight:"full",height:"auto",position:"absolute",borderRadius:"base",imageRendering:t?"auto":"pixelated"}}):null},fme=i.memo(dme);function pme(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M245.09 327.74v-37.32c57.07 0 84.51 13.47 108.58 38.68 5.4 5.65 15 1.32 14.29-6.43-5.45-61.45-34.14-117.09-122.87-117.09v-37.32a8.32 8.32 0 00-14.05-6L146.58 242a8.2 8.2 0 000 11.94L231 333.71a8.32 8.32 0 0014.09-5.97z"}},{tag:"path",attr:{fill:"none",strokeMiterlimit:"10",strokeWidth:"32",d:"M256 64C150 64 64 150 64 256s86 192 192 192 192-86 192-192S362 64 256 64z"}}]})(e)}const mme=({label:e,value:t,onClick:n,isLink:r,labelPosition:o,withCopy:s=!1})=>{const{t:l}=W(),c=i.useCallback(()=>navigator.clipboard.writeText(t.toString()),[t]);return t?a.jsxs($,{gap:2,children:[n&&a.jsx(Ut,{label:`Recall ${e}`,children:a.jsx(rs,{"aria-label":l("accessibility.useThisParameter"),icon:a.jsx(pme,{}),size:"xs",variant:"ghost",fontSize:20,onClick:n})}),s&&a.jsx(Ut,{label:`Copy ${e}`,children:a.jsx(rs,{"aria-label":`Copy ${e}`,icon:a.jsx(ru,{}),size:"xs",variant:"ghost",fontSize:14,onClick:c})}),a.jsxs($,{direction:o?"column":"row",children:[a.jsxs(be,{fontWeight:"semibold",whiteSpace:"pre-wrap",pr:2,children:[e,":"]}),r?a.jsxs(ig,{href:t.toString(),isExternal:!0,wordBreak:"break-all",children:[t.toString()," ",a.jsx(T8,{mx:"2px"})]}):a.jsx(be,{overflowY:"scroll",wordBreak:"break-all",children:t.toString()})]})]}):null},Rn=i.memo(mme),hme=e=>{var ne;const{metadata:t}=e,{t:n}=W(),{recallPositivePrompt:r,recallNegativePrompt:o,recallSeed:s,recallCfgScale:l,recallCfgRescaleMultiplier:c,recallModel:d,recallScheduler:f,recallVaeModel:m,recallSteps:h,recallWidth:g,recallHeight:b,recallStrength:y,recallHrfEnabled:x,recallHrfStrength:w,recallHrfMethod:S,recallLoRA:j,recallControlNet:_,recallIPAdapter:I,recallT2IAdapter:E}=Sf(),M=i.useCallback(()=>{r(t==null?void 0:t.positive_prompt)},[t==null?void 0:t.positive_prompt,r]),D=i.useCallback(()=>{o(t==null?void 0:t.negative_prompt)},[t==null?void 0:t.negative_prompt,o]),R=i.useCallback(()=>{s(t==null?void 0:t.seed)},[t==null?void 0:t.seed,s]),N=i.useCallback(()=>{d(t==null?void 0:t.model)},[t==null?void 0:t.model,d]),O=i.useCallback(()=>{g(t==null?void 0:t.width)},[t==null?void 0:t.width,g]),T=i.useCallback(()=>{b(t==null?void 0:t.height)},[t==null?void 0:t.height,b]),U=i.useCallback(()=>{f(t==null?void 0:t.scheduler)},[t==null?void 0:t.scheduler,f]),G=i.useCallback(()=>{m(t==null?void 0:t.vae)},[t==null?void 0:t.vae,m]),q=i.useCallback(()=>{h(t==null?void 0:t.steps)},[t==null?void 0:t.steps,h]),Y=i.useCallback(()=>{l(t==null?void 0:t.cfg_scale)},[t==null?void 0:t.cfg_scale,l]),Q=i.useCallback(()=>{c(t==null?void 0:t.cfg_rescale_multiplier)},[t==null?void 0:t.cfg_rescale_multiplier,c]),V=i.useCallback(()=>{y(t==null?void 0:t.strength)},[t==null?void 0:t.strength,y]),se=i.useCallback(()=>{x(t==null?void 0:t.hrf_enabled)},[t==null?void 0:t.hrf_enabled,x]),ee=i.useCallback(()=>{w(t==null?void 0:t.hrf_strength)},[t==null?void 0:t.hrf_strength,w]),le=i.useCallback(()=>{S(t==null?void 0:t.hrf_method)},[t==null?void 0:t.hrf_method,S]),ae=i.useCallback(z=>{j(z)},[j]),ce=i.useCallback(z=>{_(z)},[_]),J=i.useCallback(z=>{I(z)},[I]),re=i.useCallback(z=>{E(z)},[E]),A=i.useMemo(()=>t!=null&&t.controlnets?t.controlnets.filter(z=>_m(z.control_model)):[],[t==null?void 0:t.controlnets]),L=i.useMemo(()=>t!=null&&t.ipAdapters?t.ipAdapters.filter(z=>_m(z.ip_adapter_model)):[],[t==null?void 0:t.ipAdapters]),K=i.useMemo(()=>t!=null&&t.t2iAdapters?t.t2iAdapters.filter(z=>Y9(z.t2i_adapter_model)):[],[t==null?void 0:t.t2iAdapters]);return!t||Object.keys(t).length===0?null:a.jsxs(a.Fragment,{children:[t.created_by&&a.jsx(Rn,{label:n("metadata.createdBy"),value:t.created_by}),t.generation_mode&&a.jsx(Rn,{label:n("metadata.generationMode"),value:t.generation_mode}),t.positive_prompt&&a.jsx(Rn,{label:n("metadata.positivePrompt"),labelPosition:"top",value:t.positive_prompt,onClick:M}),t.negative_prompt&&a.jsx(Rn,{label:n("metadata.negativePrompt"),labelPosition:"top",value:t.negative_prompt,onClick:D}),t.seed!==void 0&&t.seed!==null&&a.jsx(Rn,{label:n("metadata.seed"),value:t.seed,onClick:R}),t.model!==void 0&&t.model!==null&&t.model.model_name&&a.jsx(Rn,{label:n("metadata.model"),value:t.model.model_name,onClick:N}),t.width&&a.jsx(Rn,{label:n("metadata.width"),value:t.width,onClick:O}),t.height&&a.jsx(Rn,{label:n("metadata.height"),value:t.height,onClick:T}),t.scheduler&&a.jsx(Rn,{label:n("metadata.scheduler"),value:t.scheduler,onClick:U}),a.jsx(Rn,{label:n("metadata.vae"),value:((ne=t.vae)==null?void 0:ne.model_name)??"Default",onClick:G}),t.steps&&a.jsx(Rn,{label:n("metadata.steps"),value:t.steps,onClick:q}),t.cfg_scale!==void 0&&t.cfg_scale!==null&&a.jsx(Rn,{label:n("metadata.cfgScale"),value:t.cfg_scale,onClick:Y}),t.cfg_rescale_multiplier!==void 0&&t.cfg_rescale_multiplier!==null&&a.jsx(Rn,{label:n("metadata.cfgRescaleMultiplier"),value:t.cfg_rescale_multiplier,onClick:Q}),t.strength&&a.jsx(Rn,{label:n("metadata.strength"),value:t.strength,onClick:V}),t.hrf_enabled&&a.jsx(Rn,{label:n("hrf.metadata.enabled"),value:t.hrf_enabled,onClick:se}),t.hrf_enabled&&t.hrf_strength&&a.jsx(Rn,{label:n("hrf.metadata.strength"),value:t.hrf_strength,onClick:ee}),t.hrf_enabled&&t.hrf_method&&a.jsx(Rn,{label:n("hrf.metadata.method"),value:t.hrf_method,onClick:le}),t.loras&&t.loras.map((z,oe)=>{if(TI(z.lora))return a.jsx(Rn,{label:"LoRA",value:`${z.lora.model_name} - ${z.weight}`,onClick:ae.bind(null,z)},oe)}),A.map((z,oe)=>{var X;return a.jsx(Rn,{label:"ControlNet",value:`${(X=z.control_model)==null?void 0:X.model_name} - ${z.control_weight}`,onClick:ce.bind(null,z)},oe)}),L.map((z,oe)=>{var X;return a.jsx(Rn,{label:"IP Adapter",value:`${(X=z.ip_adapter_model)==null?void 0:X.model_name} - ${z.weight}`,onClick:J.bind(null,z)},oe)}),K.map((z,oe)=>{var X;return a.jsx(Rn,{label:"T2I Adapter",value:`${(X=z.t2i_adapter_model)==null?void 0:X.model_name} - ${z.weight}`,onClick:re.bind(null,z)},oe)})]})},gme=i.memo(hme),vme=e=>{const t=H(s=>s.config.workflowFetchDebounce??300),[n]=kc(e!=null&&e.has_workflow?e.image_name:null,t),{data:r,isLoading:o}=Z9(n??Br);return{workflow:r,isLoading:o}},bme=({image:e})=>{const{t}=W(),{workflow:n}=vme(e);return n?a.jsx(pl,{data:n,label:t("metadata.workflow")}):a.jsx(Tn,{label:t("nodes.noWorkflow")})},xme=i.memo(bme),yme=({image:e})=>{const{t}=W(),{metadata:n}=_2(e.image_name);return a.jsxs($,{layerStyle:"first",sx:{padding:4,gap:1,flexDirection:"column",width:"full",height:"full",borderRadius:"base",position:"absolute",overflow:"hidden"},children:[a.jsxs($,{gap:2,children:[a.jsxs(be,{fontWeight:"semibold",children:[t("common.file"),":"]}),a.jsxs(ig,{href:e.image_url,isExternal:!0,maxW:"calc(100% - 3rem)",children:[e.image_name,a.jsx(T8,{mx:"2px"})]})]}),a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},isLazy:!0,children:[a.jsxs(ui,{children:[a.jsx(mr,{children:t("metadata.recallParameters")}),a.jsx(mr,{children:t("metadata.metadata")}),a.jsx(mr,{children:t("metadata.imageDetails")}),a.jsx(mr,{children:t("metadata.workflow")})]}),a.jsxs(eu,{children:[a.jsx($r,{children:n?a.jsx(Sl,{children:a.jsx(gme,{metadata:n})}):a.jsx(Tn,{label:t("metadata.noRecallParameters")})}),a.jsx($r,{children:n?a.jsx(pl,{data:n,label:t("metadata.metadata")}):a.jsx(Tn,{label:t("metadata.noMetaData")})}),a.jsx($r,{children:e?a.jsx(pl,{data:e,label:t("metadata.imageDetails")}):a.jsx(Tn,{label:t("metadata.noImageDetails")})}),a.jsx($r,{children:a.jsx(xme,{image:e})})]})]})]})},Cme=i.memo(yme),I1={color:"base.100",pointerEvents:"auto"},wme=()=>{const{t:e}=W(),{handlePrevImage:t,handleNextImage:n,isOnFirstImage:r,isOnLastImage:o,handleLoadMoreImages:s,areMoreImagesAvailable:l,isFetching:c}=G8();return a.jsxs(Ie,{sx:{position:"relative",height:"100%",width:"100%"},children:[a.jsx(Ie,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineStart:0},children:!r&&a.jsx(rs,{"aria-label":e("accessibility.previousImage"),icon:a.jsx(cte,{size:64}),variant:"unstyled",onClick:t,boxSize:16,sx:I1})}),a.jsxs(Ie,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineEnd:0},children:[!o&&a.jsx(rs,{"aria-label":e("accessibility.nextImage"),icon:a.jsx(ute,{size:64}),variant:"unstyled",onClick:n,boxSize:16,sx:I1}),o&&l&&!c&&a.jsx(rs,{"aria-label":e("accessibility.loadMore"),icon:a.jsx(ite,{size:64}),variant:"unstyled",onClick:s,boxSize:16,sx:I1}),o&&l&&c&&a.jsx($,{sx:{w:16,h:16,alignItems:"center",justifyContent:"center"},children:a.jsx(va,{opacity:.5,size:"xl"})})]})]})},FO=i.memo(wme),Sme=fe([pe,J9],({ui:e,system:t},n)=>{const{shouldShowImageDetails:r,shouldHidePreview:o,shouldShowProgressInViewer:s}=e,{denoiseProgress:l}=t;return{shouldShowImageDetails:r,shouldHidePreview:o,imageName:n==null?void 0:n.image_name,hasDenoiseProgress:!!l,shouldShowProgressInViewer:s}}),kme=()=>{const{shouldShowImageDetails:e,imageName:t,hasDenoiseProgress:n,shouldShowProgressInViewer:r}=H(Sme),{handlePrevImage:o,handleNextImage:s,isOnLastImage:l,handleLoadMoreImages:c,areMoreImagesAvailable:d,isFetching:f}=G8();tt("left",()=>{o()},[o]),tt("right",()=>{if(l&&d&&!f){c();return}l||s()},[l,d,c,f,s]);const{currentData:m}=jo(t??Br),h=i.useMemo(()=>{if(m)return{id:"current-image",payloadType:"IMAGE_DTO",payload:{imageDTO:m}}},[m]),g=i.useMemo(()=>({id:"current-image",actionType:"SET_CURRENT_IMAGE"}),[]),[b,y]=i.useState(!1),x=i.useRef(0),{t:w}=W(),S=i.useCallback(()=>{y(!0),window.clearTimeout(x.current)},[]),j=i.useCallback(()=>{x.current=window.setTimeout(()=>{y(!1)},500)},[]);return a.jsxs($,{onMouseOver:S,onMouseOut:j,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative"},children:[n&&r?a.jsx(fme,{}):a.jsx(fl,{imageDTO:m,droppableData:g,draggableData:h,isUploadDisabled:!0,fitContainer:!0,useThumbailFallback:!0,dropLabel:w("gallery.setCurrentImage"),noContentFallback:a.jsx(Tn,{icon:si,label:w("gallery.noImageSelected")}),dataTestId:"image-preview"}),e&&m&&a.jsx(Ie,{sx:{position:"absolute",top:"0",width:"full",height:"full",borderRadius:"base"},children:a.jsx(Cme,{image:m})}),a.jsx(hr,{children:!e&&m&&b&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:"0",width:"100%",height:"100%",pointerEvents:"none"},children:a.jsx(FO,{})},"nextPrevButtons")})]})},jme=i.memo(kme),_me=()=>a.jsxs($,{sx:{position:"relative",flexDirection:"column",height:"100%",width:"100%",rowGap:4,alignItems:"center",justifyContent:"center"},children:[a.jsx(ume,{}),a.jsx(jme,{})]}),Ime=i.memo(_me),Pme=()=>a.jsx(Ie,{layerStyle:"first",sx:{position:"relative",width:"100%",height:"100%",p:2,borderRadius:"base"},children:a.jsx($,{sx:{width:"100%",height:"100%"},children:a.jsx(Ime,{})})}),zO=i.memo(Pme),Eme=()=>{const e=i.useRef(null),t=i.useCallback(()=>{e.current&&e.current.setLayout([50,50])},[]),n=R2();return a.jsx(Ie,{sx:{w:"full",h:"full"},children:a.jsxs(o0,{ref:e,autoSaveId:"imageTab.content",direction:"horizontal",style:{height:"100%",width:"100%"},storage:n,units:"percentages",children:[a.jsx(rl,{id:"imageTab.content.initImage",order:0,defaultSize:50,minSize:25,style:{position:"relative"},children:a.jsx(nme,{})}),a.jsx(Bh,{onDoubleClick:t}),a.jsx(rl,{id:"imageTab.content.selectedImage",order:1,defaultSize:50,minSize:25,children:a.jsx(zO,{})})]})})},Mme=i.memo(Eme);var Ome=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var r,o,s;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(o=r;o--!==0;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(s=Object.keys(t),r=s.length,r!==Object.keys(n).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(n,s[o]))return!1;for(o=r;o--!==0;){var l=s[o];if(!e(t[l],n[l]))return!1}return!0}return t!==t&&n!==n};const M_=Bd(Ome);function ax(e){return e===null||typeof e!="object"?{}:Object.keys(e).reduce((t,n)=>{const r=e[n];return r!=null&&r!==!1&&(t[n]=r),t},{})}var Dme=Object.defineProperty,O_=Object.getOwnPropertySymbols,Rme=Object.prototype.hasOwnProperty,Ame=Object.prototype.propertyIsEnumerable,D_=(e,t,n)=>t in e?Dme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Tme=(e,t)=>{for(var n in t||(t={}))Rme.call(t,n)&&D_(e,n,t[n]);if(O_)for(var n of O_(t))Ame.call(t,n)&&D_(e,n,t[n]);return e};function BO(e,t){if(t===null||typeof t!="object")return{};const n=Tme({},t);return Object.keys(t).forEach(r=>{r.includes(`${String(e)}.`)&&delete n[r]}),n}const Nme="__MANTINE_FORM_INDEX__";function R_(e,t){return t?typeof t=="boolean"?t:Array.isArray(t)?t.includes(e.replace(/[.][0-9]/g,`.${Nme}`)):!1:!1}function A_(e,t,n){typeof n.value=="object"&&(n.value=ic(n.value)),!n.enumerable||n.get||n.set||!n.configurable||!n.writable||t==="__proto__"?Object.defineProperty(e,t,n):e[t]=n.value}function ic(e){if(typeof e!="object")return e;var t=0,n,r,o,s=Object.prototype.toString.call(e);if(s==="[object Object]"?o=Object.create(e.__proto__||null):s==="[object Array]"?o=Array(e.length):s==="[object Set]"?(o=new Set,e.forEach(function(l){o.add(ic(l))})):s==="[object Map]"?(o=new Map,e.forEach(function(l,c){o.set(ic(c),ic(l))})):s==="[object Date]"?o=new Date(+e):s==="[object RegExp]"?o=new RegExp(e.source,e.flags):s==="[object DataView]"?o=new e.constructor(ic(e.buffer)):s==="[object ArrayBuffer]"?o=e.slice(0):s.slice(-6)==="Array]"&&(o=new e.constructor(e)),o){for(r=Object.getOwnPropertySymbols(e);t0,errors:t}}function lx(e,t,n="",r={}){return typeof e!="object"||e===null?r:Object.keys(e).reduce((o,s)=>{const l=e[s],c=`${n===""?"":`${n}.`}${s}`,d=ea(c,t);let f=!1;return typeof l=="function"&&(o[c]=l(d,t,c)),typeof l=="object"&&Array.isArray(d)&&(f=!0,d.forEach((m,h)=>lx(l,t,`${c}.${h}`,o))),typeof l=="object"&&typeof d=="object"&&d!==null&&(f||lx(l,t,c,o)),o},r)}function ix(e,t){return T_(typeof e=="function"?e(t):lx(e,t))}function tm(e,t,n){if(typeof e!="string")return{hasError:!1,error:null};const r=ix(t,n),o=Object.keys(r.errors).find(s=>e.split(".").every((l,c)=>l===s.split(".")[c]));return{hasError:!!o,error:o?r.errors[o]:null}}function $me(e,{from:t,to:n},r){const o=ea(e,r);if(!Array.isArray(o))return r;const s=[...o],l=o[t];return s.splice(t,1),s.splice(n,0,l),d0(e,s,r)}var Lme=Object.defineProperty,N_=Object.getOwnPropertySymbols,Fme=Object.prototype.hasOwnProperty,zme=Object.prototype.propertyIsEnumerable,$_=(e,t,n)=>t in e?Lme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Bme=(e,t)=>{for(var n in t||(t={}))Fme.call(t,n)&&$_(e,n,t[n]);if(N_)for(var n of N_(t))zme.call(t,n)&&$_(e,n,t[n]);return e};function Hme(e,{from:t,to:n},r){const o=`${e}.${t}`,s=`${e}.${n}`,l=Bme({},r);return Object.keys(r).every(c=>{let d,f;if(c.startsWith(o)&&(d=c,f=c.replace(o,s)),c.startsWith(s)&&(d=c.replace(s,o),f=c),d&&f){const m=l[d],h=l[f];return h===void 0?delete l[d]:l[d]=h,m===void 0?delete l[f]:l[f]=m,!1}return!0}),l}function Wme(e,t,n){const r=ea(e,n);return Array.isArray(r)?d0(e,r.filter((o,s)=>s!==t),n):n}var Vme=Object.defineProperty,L_=Object.getOwnPropertySymbols,Ume=Object.prototype.hasOwnProperty,Gme=Object.prototype.propertyIsEnumerable,F_=(e,t,n)=>t in e?Vme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Kme=(e,t)=>{for(var n in t||(t={}))Ume.call(t,n)&&F_(e,n,t[n]);if(L_)for(var n of L_(t))Gme.call(t,n)&&F_(e,n,t[n]);return e};function z_(e,t){const n=e.substring(t.length+1).split(".")[0];return parseInt(n,10)}function B_(e,t,n,r){if(t===void 0)return n;const o=`${String(e)}`;let s=n;r===-1&&(s=BO(`${o}.${t}`,s));const l=Kme({},s),c=new Set;return Object.entries(s).filter(([d])=>{if(!d.startsWith(`${o}.`))return!1;const f=z_(d,o);return Number.isNaN(f)?!1:f>=t}).forEach(([d,f])=>{const m=z_(d,o),h=d.replace(`${o}.${m}`,`${o}.${m+r}`);l[h]=f,c.add(h),c.has(d)||delete l[d]}),l}function qme(e,t,n,r){const o=ea(e,r);if(!Array.isArray(o))return r;const s=[...o];return s.splice(typeof n=="number"?n:s.length,0,t),d0(e,s,r)}function H_(e,t){const n=Object.keys(e);if(typeof t=="string"){const r=n.filter(o=>o.startsWith(`${t}.`));return e[t]||r.some(o=>e[o])||!1}return n.some(r=>e[r])}function Xme(e){return t=>{if(!t)e(t);else if(typeof t=="function")e(t);else if(typeof t=="object"&&"nativeEvent"in t){const{currentTarget:n}=t;n instanceof HTMLInputElement?n.type==="checkbox"?e(n.checked):e(n.value):(n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)&&e(n.value)}else e(t)}}var Qme=Object.defineProperty,Yme=Object.defineProperties,Zme=Object.getOwnPropertyDescriptors,W_=Object.getOwnPropertySymbols,Jme=Object.prototype.hasOwnProperty,ehe=Object.prototype.propertyIsEnumerable,V_=(e,t,n)=>t in e?Qme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ha=(e,t)=>{for(var n in t||(t={}))Jme.call(t,n)&&V_(e,n,t[n]);if(W_)for(var n of W_(t))ehe.call(t,n)&&V_(e,n,t[n]);return e},P1=(e,t)=>Yme(e,Zme(t));function vi({initialValues:e={},initialErrors:t={},initialDirty:n={},initialTouched:r={},clearInputErrorOnChange:o=!0,validateInputOnChange:s=!1,validateInputOnBlur:l=!1,transformValues:c=f=>f,validate:d}={}){const[f,m]=i.useState(r),[h,g]=i.useState(n),[b,y]=i.useState(e),[x,w]=i.useState(ax(t)),S=i.useRef(e),j=A=>{S.current=A},_=i.useCallback(()=>m({}),[]),I=A=>{const L=A?Ha(Ha({},b),A):b;j(L),g({})},E=i.useCallback(A=>w(L=>ax(typeof A=="function"?A(L):A)),[]),M=i.useCallback(()=>w({}),[]),D=i.useCallback(()=>{y(e),M(),j(e),g({}),_()},[]),R=i.useCallback((A,L)=>E(K=>P1(Ha({},K),{[A]:L})),[]),N=i.useCallback(A=>E(L=>{if(typeof A!="string")return L;const K=Ha({},L);return delete K[A],K}),[]),O=i.useCallback(A=>g(L=>{if(typeof A!="string")return L;const K=BO(A,L);return delete K[A],K}),[]),T=i.useCallback((A,L)=>{const K=R_(A,s);O(A),m(ne=>P1(Ha({},ne),{[A]:!0})),y(ne=>{const z=d0(A,L,ne);if(K){const oe=tm(A,d,z);oe.hasError?R(A,oe.error):N(A)}return z}),!K&&o&&R(A,null)},[]),U=i.useCallback(A=>{y(L=>{const K=typeof A=="function"?A(L):A;return Ha(Ha({},L),K)}),o&&M()},[]),G=i.useCallback((A,L)=>{O(A),y(K=>$me(A,L,K)),w(K=>Hme(A,L,K))},[]),q=i.useCallback((A,L)=>{O(A),y(K=>Wme(A,L,K)),w(K=>B_(A,L,K,-1))},[]),Y=i.useCallback((A,L,K)=>{O(A),y(ne=>qme(A,L,K,ne)),w(ne=>B_(A,K,ne,1))},[]),Q=i.useCallback(()=>{const A=ix(d,b);return w(A.errors),A},[b,d]),V=i.useCallback(A=>{const L=tm(A,d,b);return L.hasError?R(A,L.error):N(A),L},[b,d]),se=(A,{type:L="input",withError:K=!0,withFocus:ne=!0}={})=>{const oe={onChange:Xme(X=>T(A,X))};return K&&(oe.error=x[A]),L==="checkbox"?oe.checked=ea(A,b):oe.value=ea(A,b),ne&&(oe.onFocus=()=>m(X=>P1(Ha({},X),{[A]:!0})),oe.onBlur=()=>{if(R_(A,l)){const X=tm(A,d,b);X.hasError?R(A,X.error):N(A)}}),oe},ee=(A,L)=>K=>{K==null||K.preventDefault();const ne=Q();ne.hasErrors?L==null||L(ne.errors,b,K):A==null||A(c(b),K)},le=A=>c(A||b),ae=i.useCallback(A=>{A.preventDefault(),D()},[]),ce=A=>{if(A){const K=ea(A,h);if(typeof K=="boolean")return K;const ne=ea(A,b),z=ea(A,S.current);return!M_(ne,z)}return Object.keys(h).length>0?H_(h):!M_(b,S.current)},J=i.useCallback(A=>H_(f,A),[f]),re=i.useCallback(A=>A?!tm(A,d,b).hasError:!ix(d,b).hasErrors,[b,d]);return{values:b,errors:x,setValues:U,setErrors:E,setFieldValue:T,setFieldError:R,clearFieldError:N,clearErrors:M,reset:D,validate:Q,validateField:V,reorderListItem:G,removeListItem:q,insertListItem:Y,getInputProps:se,onSubmit:ee,onReset:ae,isDirty:ce,isTouched:J,setTouched:m,setDirty:g,resetTouched:_,resetDirty:I,isValid:re,getTransformedValues:le}}function En(e){const{...t}=e,{base50:n,base100:r,base200:o,base300:s,base800:l,base700:c,base900:d,accent500:f,accent300:m}=hf(),{colorMode:h}=ya(),g=i.useCallback(()=>({input:{color:Te(d,r)(h),backgroundColor:Te(n,d)(h),borderColor:Te(o,l)(h),borderWidth:2,outline:"none",":focus":{borderColor:Te(m,f)(h)}},label:{color:Te(c,s)(h),fontWeight:"normal",marginBottom:4}}),[m,f,r,o,s,n,c,l,d,h]);return a.jsx(_M,{styles:g,...t})}const the=[{value:"sd-1",label:xn["sd-1"]},{value:"sd-2",label:xn["sd-2"]},{value:"sdxl",label:xn.sdxl},{value:"sdxl-refiner",label:xn["sdxl-refiner"]}];function kf(e){const{...t}=e,{t:n}=W();return a.jsx(yn,{label:n("modelManager.baseModel"),data:the,...t})}function WO(e){const{data:t}=s3(),{...n}=e;return a.jsx(yn,{label:"Config File",placeholder:"Select A Config File",data:t||[],...n})}const nhe=[{value:"normal",label:"Normal"},{value:"inpaint",label:"Inpaint"},{value:"depth",label:"Depth"}];function f0(e){const{...t}=e,{t:n}=W();return a.jsx(yn,{label:n("modelManager.variant"),data:nhe,...t})}function Wh(e,t=!0){let n;t?n=new RegExp("[^\\\\/]+(?=\\.)"):n=new RegExp("[^\\\\/]+(?=[\\\\/]?$)");const r=e.match(n);return r?r[0]:""}function VO(e){const{t}=W(),n=te(),{model_path:r}=e,o=vi({initialValues:{model_name:r?Wh(r):"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"checkpoint",error:void 0,vae:"",variant:"normal",config:"configs\\stable-diffusion\\v1-inference.yaml"}}),[s]=a3(),[l,c]=i.useState(!1),d=h=>{s({body:h}).unwrap().then(g=>{n(lt(rn({title:t("modelManager.modelAdded",{modelName:h.model_name}),status:"success"}))),o.reset(),r&&n(Ud(null))}).catch(g=>{g&&n(lt(rn({title:t("toast.modelAddFailed"),status:"error"})))})},f=i.useCallback(h=>{if(o.values.model_name===""){const g=Wh(h.currentTarget.value);g&&o.setFieldValue("model_name",g)}},[o]),m=i.useCallback(()=>c(h=>!h),[]);return a.jsx("form",{onSubmit:o.onSubmit(h=>d(h)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",gap:2,children:[a.jsx(En,{label:t("modelManager.model"),required:!0,...o.getInputProps("model_name")}),a.jsx(kf,{label:t("modelManager.baseModel"),...o.getInputProps("base_model")}),a.jsx(En,{label:t("modelManager.modelLocation"),required:!0,...o.getInputProps("path"),onBlur:f}),a.jsx(En,{label:t("modelManager.description"),...o.getInputProps("description")}),a.jsx(En,{label:t("modelManager.vaeLocation"),...o.getInputProps("vae")}),a.jsx(f0,{label:t("modelManager.variant"),...o.getInputProps("variant")}),a.jsxs($,{flexDirection:"column",width:"100%",gap:2,children:[l?a.jsx(En,{required:!0,label:t("modelManager.customConfigFileLocation"),...o.getInputProps("config")}):a.jsx(WO,{required:!0,width:"100%",...o.getInputProps("config")}),a.jsx(yr,{isChecked:l,onChange:m,label:t("modelManager.useCustomConfig")}),a.jsx(Xe,{mt:2,type:"submit",children:t("modelManager.addModel")})]})]})})}function UO(e){const{t}=W(),n=te(),{model_path:r}=e,[o]=a3(),s=vi({initialValues:{model_name:r?Wh(r,!1):"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"diffusers",error:void 0,vae:"",variant:"normal"}}),l=d=>{o({body:d}).unwrap().then(f=>{n(lt(rn({title:t("modelManager.modelAdded",{modelName:d.model_name}),status:"success"}))),s.reset(),r&&n(Ud(null))}).catch(f=>{f&&n(lt(rn({title:t("toast.modelAddFailed"),status:"error"})))})},c=i.useCallback(d=>{if(s.values.model_name===""){const f=Wh(d.currentTarget.value,!1);f&&s.setFieldValue("model_name",f)}},[s]);return a.jsx("form",{onSubmit:s.onSubmit(d=>l(d)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",gap:2,children:[a.jsx(En,{required:!0,label:t("modelManager.model"),...s.getInputProps("model_name")}),a.jsx(kf,{label:t("modelManager.baseModel"),...s.getInputProps("base_model")}),a.jsx(En,{required:!0,label:t("modelManager.modelLocation"),placeholder:t("modelManager.modelLocationValidationMsg"),...s.getInputProps("path"),onBlur:c}),a.jsx(En,{label:t("modelManager.description"),...s.getInputProps("description")}),a.jsx(En,{label:t("modelManager.vaeLocation"),...s.getInputProps("vae")}),a.jsx(f0,{label:t("modelManager.variant"),...s.getInputProps("variant")}),a.jsx(Xe,{mt:2,type:"submit",children:t("modelManager.addModel")})]})})}function rhe(){const[e,t]=i.useState("diffusers"),{t:n}=W(),r=i.useCallback(s=>{s&&t(s)},[]),o=i.useMemo(()=>[{label:n("modelManager.diffusersModels"),value:"diffusers"},{label:n("modelManager.checkpointOrSafetensors"),value:"checkpoint"}],[n]);return a.jsxs($,{flexDirection:"column",gap:4,width:"100%",children:[a.jsx(yn,{label:n("modelManager.modelType"),value:e,data:o,onChange:r}),a.jsxs($,{sx:{p:4,borderRadius:4,bg:"base.300",_dark:{bg:"base.850"}},children:[e==="diffusers"&&a.jsx(UO,{}),e==="checkpoint"&&a.jsx(VO,{})]})]})}const ohe=[{label:"None",value:"none"},{label:"v_prediction",value:"v_prediction"},{label:"epsilon",value:"epsilon"},{label:"sample",value:"sample"}];function she(){const e=te(),{t}=W(),[n,{isLoading:r}]=l3(),o=vi({initialValues:{location:"",prediction_type:void 0}}),s=l=>{const c={location:l.location,prediction_type:l.prediction_type==="none"?void 0:l.prediction_type};n({body:c}).unwrap().then(d=>{e(lt(rn({title:t("toast.modelAddedSimple"),status:"success"}))),o.reset()}).catch(d=>{d&&e(lt(rn({title:`${d.data.detail} `,status:"error"})))})};return a.jsx("form",{onSubmit:o.onSubmit(l=>s(l)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",width:"100%",gap:4,children:[a.jsx(En,{label:t("modelManager.modelLocation"),placeholder:t("modelManager.simpleModelDesc"),w:"100%",...o.getInputProps("location")}),a.jsx(yn,{label:t("modelManager.predictionType"),data:ohe,defaultValue:"none",...o.getInputProps("prediction_type")}),a.jsx(Xe,{type:"submit",isLoading:r,children:t("modelManager.addModel")})]})})}function ahe(){const{t:e}=W(),[t,n]=i.useState("simple"),r=i.useCallback(()=>n("simple"),[]),o=i.useCallback(()=>n("advanced"),[]);return a.jsxs($,{flexDirection:"column",width:"100%",overflow:"scroll",maxHeight:window.innerHeight-250,gap:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{size:"sm",isChecked:t=="simple",onClick:r,children:e("common.simple")}),a.jsx(Xe,{size:"sm",isChecked:t=="advanced",onClick:o,children:e("common.advanced")})]}),a.jsxs($,{sx:{p:4,borderRadius:4,background:"base.200",_dark:{background:"base.800"}},children:[t==="simple"&&a.jsx(she,{}),t==="advanced"&&a.jsx(rhe,{})]})]})}function lhe(e){const{...t}=e;return a.jsx(bE,{w:"100%",...t,children:e.children})}function ihe(){const e=H(w=>w.modelmanager.searchFolder),[t,n]=i.useState(""),{data:r}=as(Bl),{foundModels:o,alreadyInstalled:s,filteredModels:l}=i3({search_path:e||""},{selectFromResult:({data:w})=>{const S=gL(r==null?void 0:r.entities),j=Hr(S,"path"),_=dL(w,j),I=CL(w,j);return{foundModels:w,alreadyInstalled:U_(I,t),filteredModels:U_(_,t)}}}),[c,{isLoading:d}]=l3(),f=te(),{t:m}=W(),h=i.useCallback(w=>{const S=w.currentTarget.id.split("\\").splice(-1)[0];c({body:{location:w.currentTarget.id}}).unwrap().then(j=>{f(lt(rn({title:`Added Model: ${S}`,status:"success"})))}).catch(j=>{j&&f(lt(rn({title:m("toast.modelAddFailed"),status:"error"})))})},[f,c,m]),g=i.useCallback(w=>{n(w.target.value)},[]),b=i.useCallback(w=>f(Ud(w)),[f]),y=({models:w,showActions:S=!0})=>w.map(j=>a.jsxs($,{sx:{p:4,gap:4,alignItems:"center",borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{w:"100%",sx:{flexDirection:"column",minW:"25%"},children:[a.jsx(be,{sx:{fontWeight:600},children:j.split("\\").slice(-1)[0]}),a.jsx(be,{sx:{fontSize:"sm",color:"base.600",_dark:{color:"base.400"}},children:j})]}),S?a.jsxs($,{gap:2,children:[a.jsx(Xe,{id:j,onClick:h,isLoading:d,children:m("modelManager.quickAdd")}),a.jsx(Xe,{onClick:b.bind(null,j),isLoading:d,children:m("modelManager.advanced")})]}):a.jsx(be,{sx:{fontWeight:600,p:2,borderRadius:4,color:"accent.50",bg:"accent.400",_dark:{color:"accent.100",bg:"accent.600"}},children:m("common.installed")})]},j));return(()=>e?!o||o.length===0?a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",height:96,userSelect:"none",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(be,{variant:"subtext",children:m("modelManager.noModels")})}):a.jsxs($,{sx:{flexDirection:"column",gap:2,w:"100%",minW:"50%"},children:[a.jsx(yo,{onChange:g,label:m("modelManager.search"),labelPos:"side"}),a.jsxs($,{p:2,gap:2,children:[a.jsxs(be,{sx:{fontWeight:600},children:[m("modelManager.modelsFound"),": ",o.length]}),a.jsxs(be,{sx:{fontWeight:600,color:"accent.500",_dark:{color:"accent.200"}},children:[m("common.notInstalled"),": ",l.length]})]}),a.jsx(lhe,{offsetScrollbars:!0,children:a.jsxs($,{gap:2,flexDirection:"column",children:[y({models:l}),y({models:s,showActions:!1})]})})]}):null)()}const U_=(e,t)=>{const n=[];return qn(e,r=>{if(!r)return null;r.includes(t)&&n.push(r)}),n};function che(){const e=H(m=>m.modelmanager.advancedAddScanModel),{t}=W(),n=i.useMemo(()=>[{label:t("modelManager.diffusersModels"),value:"diffusers"},{label:t("modelManager.checkpointOrSafetensors"),value:"checkpoint"}],[t]),[r,o]=i.useState("diffusers"),[s,l]=i.useState(!0);i.useEffect(()=>{e&&[".ckpt",".safetensors",".pth",".pt"].some(m=>e.endsWith(m))?o("checkpoint"):o("diffusers")},[e,o,s]);const c=te(),d=i.useCallback(()=>c(Ud(null)),[c]),f=i.useCallback(m=>{m&&(o(m),l(m==="checkpoint"))},[]);return e?a.jsxs(Ie,{as:Mn.div,initial:{x:-100,opacity:0},animate:{x:0,opacity:1,transition:{duration:.2}},sx:{display:"flex",flexDirection:"column",minWidth:"40%",maxHeight:window.innerHeight-300,overflow:"scroll",p:4,gap:4,borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{justifyContent:"space-between",alignItems:"center",children:[a.jsx(be,{size:"xl",fontWeight:600,children:s||r==="checkpoint"?"Add Checkpoint Model":"Add Diffusers Model"}),a.jsx(Fe,{icon:a.jsx(Nc,{}),"aria-label":t("modelManager.closeAdvanced"),onClick:d,size:"sm"})]}),a.jsx(yn,{label:t("modelManager.modelType"),value:r,data:n,onChange:f}),s?a.jsx(VO,{model_path:e},e):a.jsx(UO,{model_path:e},e)]}):null}function uhe(){const e=te(),{t}=W(),n=H(d=>d.modelmanager.searchFolder),{refetch:r}=i3({search_path:n||""}),o=vi({initialValues:{folder:""}}),s=i.useCallback(d=>{e(uS(d.folder))},[e]),l=i.useCallback(()=>{r()},[r]),c=i.useCallback(()=>{e(uS(null)),e(Ud(null))},[e]);return a.jsx("form",{onSubmit:o.onSubmit(d=>s(d)),style:{width:"100%"},children:a.jsxs($,{sx:{w:"100%",gap:2,borderRadius:4,alignItems:"center"},children:[a.jsxs($,{w:"100%",alignItems:"center",gap:4,minH:12,children:[a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",minW:"max-content",_dark:{color:"base.300"}},children:t("common.folder")}),n?a.jsx($,{sx:{w:"100%",p:2,px:4,bg:"base.300",borderRadius:4,fontSize:"sm",fontWeight:"bold",_dark:{bg:"base.700"}},children:n}):a.jsx(yo,{w:"100%",size:"md",...o.getInputProps("folder")})]}),a.jsxs($,{gap:2,children:[n?a.jsx(Fe,{"aria-label":t("modelManager.scanAgain"),tooltip:t("modelManager.scanAgain"),icon:a.jsx(XM,{}),onClick:l,fontSize:18,size:"sm"}):a.jsx(Fe,{"aria-label":t("modelManager.findModels"),tooltip:t("modelManager.findModels"),icon:a.jsx(Ute,{}),fontSize:18,size:"sm",type:"submit"}),a.jsx(Fe,{"aria-label":t("modelManager.clearCheckpointFolder"),tooltip:t("modelManager.clearCheckpointFolder"),icon:a.jsx(ao,{}),size:"sm",onClick:c,isDisabled:!n,colorScheme:"red"})]})]})})}const dhe=i.memo(uhe);function fhe(){return a.jsxs($,{flexDirection:"column",w:"100%",gap:4,children:[a.jsx(dhe,{}),a.jsxs($,{gap:4,children:[a.jsx($,{sx:{maxHeight:window.innerHeight-300,overflow:"scroll",gap:4,w:"100%"},children:a.jsx(ihe,{})}),a.jsx(che,{})]})]})}function phe(){const[e,t]=i.useState("add"),{t:n}=W(),r=i.useCallback(()=>t("add"),[]),o=i.useCallback(()=>t("scan"),[]);return a.jsxs($,{flexDirection:"column",gap:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{onClick:r,isChecked:e=="add",size:"sm",width:"100%",children:n("modelManager.addModel")}),a.jsx(Xe,{onClick:o,isChecked:e=="scan",size:"sm",width:"100%",children:n("modelManager.scanForModels")})]}),e=="add"&&a.jsx(ahe,{}),e=="scan"&&a.jsx(fhe,{})]})}const mhe=[{label:"Stable Diffusion 1",value:"sd-1"},{label:"Stable Diffusion 2",value:"sd-2"}];function hhe(){var K,ne;const{t:e}=W(),t=te(),{data:n}=as(Bl),[r,{isLoading:o}]=eN(),[s,l]=i.useState("sd-1"),c=wS(n==null?void 0:n.entities,(z,oe)=>(z==null?void 0:z.model_format)==="diffusers"&&(z==null?void 0:z.base_model)==="sd-1"),d=wS(n==null?void 0:n.entities,(z,oe)=>(z==null?void 0:z.model_format)==="diffusers"&&(z==null?void 0:z.base_model)==="sd-2"),f=i.useMemo(()=>({"sd-1":c,"sd-2":d}),[c,d]),[m,h]=i.useState(((K=Object.keys(f[s]))==null?void 0:K[0])??null),[g,b]=i.useState(((ne=Object.keys(f[s]))==null?void 0:ne[1])??null),[y,x]=i.useState(null),[w,S]=i.useState(""),[j,_]=i.useState(.5),[I,E]=i.useState("weighted_sum"),[M,D]=i.useState("root"),[R,N]=i.useState(""),[O,T]=i.useState(!1),U=Object.keys(f[s]).filter(z=>z!==g&&z!==y),G=Object.keys(f[s]).filter(z=>z!==m&&z!==y),q=Object.keys(f[s]).filter(z=>z!==m&&z!==g),Y=i.useCallback(z=>{l(z),h(null),b(null)},[]),Q=i.useCallback(z=>{h(z)},[]),V=i.useCallback(z=>{b(z)},[]),se=i.useCallback(z=>{z?(x(z),E("weighted_sum")):(x(null),E("add_difference"))},[]),ee=i.useCallback(z=>S(z.target.value),[]),le=i.useCallback(z=>_(z),[]),ae=i.useCallback(()=>_(.5),[]),ce=i.useCallback(z=>E(z),[]),J=i.useCallback(z=>D(z),[]),re=i.useCallback(z=>N(z.target.value),[]),A=i.useCallback(z=>T(z.target.checked),[]),L=i.useCallback(()=>{const z=[];let oe=[m,g,y];oe=oe.filter(Z=>Z!==null),oe.forEach(Z=>{var ve;const me=(ve=Z==null?void 0:Z.split("/"))==null?void 0:ve[2];me&&z.push(me)});const X={model_names:z,merged_model_name:w!==""?w:z.join("-"),alpha:j,interp:I,force:O,merge_dest_directory:M==="root"?void 0:R};r({base_model:s,body:{body:X}}).unwrap().then(Z=>{t(lt(rn({title:e("modelManager.modelsMerged"),status:"success"})))}).catch(Z=>{Z&&t(lt(rn({title:e("modelManager.modelsMergeFailed"),status:"error"})))})},[s,t,r,w,j,R,O,I,M,m,y,g,e]);return a.jsxs($,{flexDirection:"column",rowGap:4,children:[a.jsxs($,{sx:{flexDirection:"column",rowGap:1},children:[a.jsx(be,{children:e("modelManager.modelMergeHeaderHelp1")}),a.jsx(be,{fontSize:"sm",variant:"subtext",children:e("modelManager.modelMergeHeaderHelp2")})]}),a.jsxs($,{columnGap:4,children:[a.jsx(yn,{label:e("modelManager.modelType"),w:"100%",data:mhe,value:s,onChange:Y}),a.jsx(sn,{label:e("modelManager.modelOne"),w:"100%",value:m,placeholder:e("modelManager.selectModel"),data:U,onChange:Q}),a.jsx(sn,{label:e("modelManager.modelTwo"),w:"100%",placeholder:e("modelManager.selectModel"),value:g,data:G,onChange:V}),a.jsx(sn,{label:e("modelManager.modelThree"),data:q,w:"100%",placeholder:e("modelManager.selectModel"),clearable:!0,onChange:se})]}),a.jsx(yo,{label:e("modelManager.mergedModelName"),value:w,onChange:ee}),a.jsxs($,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(nt,{label:e("modelManager.alpha"),min:.01,max:.99,step:.01,value:j,onChange:le,withInput:!0,withReset:!0,handleReset:ae,withSliderMarks:!0}),a.jsx(be,{variant:"subtext",fontSize:"sm",children:e("modelManager.modelMergeAlphaHelp")})]}),a.jsxs($,{sx:{padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(be,{fontWeight:500,fontSize:"sm",variant:"subtext",children:e("modelManager.interpolationType")}),a.jsx($m,{value:I,onChange:ce,children:a.jsx($,{columnGap:4,children:y===null?a.jsxs(a.Fragment,{children:[a.jsx(Ys,{value:"weighted_sum",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.weightedSum")})}),a.jsx(Ys,{value:"sigmoid",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.sigmoid")})}),a.jsx(Ys,{value:"inv_sigmoid",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.inverseSigmoid")})})]}):a.jsx(Ys,{value:"add_difference",children:a.jsx(Ut,{label:e("modelManager.modelMergeInterpAddDifferenceHelp"),children:a.jsx(be,{fontSize:"sm",children:e("modelManager.addDifference")})})})})})]}),a.jsxs($,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.900"}},children:[a.jsxs($,{columnGap:4,children:[a.jsx(be,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:e("modelManager.mergedModelSaveLocation")}),a.jsx($m,{value:M,onChange:J,children:a.jsxs($,{columnGap:4,children:[a.jsx(Ys,{value:"root",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.invokeAIFolder")})}),a.jsx(Ys,{value:"custom",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.custom")})})]})})]}),M==="custom"&&a.jsx(yo,{label:e("modelManager.mergedModelCustomSaveLocation"),value:R,onChange:re})]}),a.jsx(yr,{label:e("modelManager.ignoreMismatch"),isChecked:O,onChange:A,fontWeight:"500"}),a.jsx(Xe,{onClick:L,isLoading:o,isDisabled:m===null||g===null,children:e("modelManager.merge")})]})}function ghe(e){const{model:t}=e,n=te(),{t:r}=W(),[o,{isLoading:s}]=tN(),[l,c]=i.useState("InvokeAIRoot"),[d,f]=i.useState("");i.useEffect(()=>{c("InvokeAIRoot")},[t]);const m=i.useCallback(()=>{c("InvokeAIRoot")},[]),h=i.useCallback(y=>{c(y)},[]),g=i.useCallback(y=>{f(y.target.value)},[]),b=i.useCallback(()=>{const y={base_model:t.base_model,model_name:t.model_name,convert_dest_directory:l==="Custom"?d:void 0};if(l==="Custom"&&d===""){n(lt(rn({title:r("modelManager.noCustomLocationProvided"),status:"error"})));return}n(lt(rn({title:`${r("modelManager.convertingModelBegin")}: ${t.model_name}`,status:"info"}))),o(y).unwrap().then(()=>{n(lt(rn({title:`${r("modelManager.modelConverted")}: ${t.model_name}`,status:"success"})))}).catch(()=>{n(lt(rn({title:`${r("modelManager.modelConversionFailed")}: ${t.model_name}`,status:"error"})))})},[o,d,n,t.base_model,t.model_name,l,r]);return a.jsxs(t0,{title:`${r("modelManager.convert")} ${t.model_name}`,acceptCallback:b,cancelCallback:m,acceptButtonText:`${r("modelManager.convert")}`,triggerComponent:a.jsxs(Xe,{size:"sm","aria-label":r("modelManager.convertToDiffusers"),className:" modal-close-btn",isLoading:s,children:["🧨 ",r("modelManager.convertToDiffusers")]}),motionPreset:"slideInBottom",children:[a.jsxs($,{flexDirection:"column",rowGap:4,children:[a.jsx(be,{children:r("modelManager.convertToDiffusersHelpText1")}),a.jsxs(cg,{children:[a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText2")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText3")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText4")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText5")})]}),a.jsx(be,{children:r("modelManager.convertToDiffusersHelpText6")})]}),a.jsxs($,{flexDir:"column",gap:2,children:[a.jsxs($,{marginTop:4,flexDir:"column",gap:2,children:[a.jsx(be,{fontWeight:"600",children:r("modelManager.convertToDiffusersSaveLocation")}),a.jsx($m,{value:l,onChange:h,children:a.jsxs($,{gap:4,children:[a.jsx(Ys,{value:"InvokeAIRoot",children:a.jsx(Ut,{label:"Save converted model in the InvokeAI root folder",children:r("modelManager.invokeRoot")})}),a.jsx(Ys,{value:"Custom",children:a.jsx(Ut,{label:"Save converted model in a custom folder",children:r("modelManager.custom")})})]})})]}),l==="Custom"&&a.jsxs($,{flexDirection:"column",rowGap:2,children:[a.jsx(be,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:r("modelManager.customSaveLocation")}),a.jsx(yo,{value:d,onChange:g,width:"full"})]})]})]})}function vhe(e){const{model:t}=e,[n,{isLoading:r}]=c3(),{data:o}=s3(),[s,l]=i.useState(!1);i.useEffect(()=>{o!=null&&o.includes(t.config)||l(!0)},[o,t.config]);const c=te(),{t:d}=W(),f=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"main",path:t.path?t.path:"",description:t.description?t.description:"",model_format:"checkpoint",vae:t.vae?t.vae:"",config:t.config?t.config:"",variant:t.variant},validate:{path:g=>g.trim().length===0?"Must provide a path":null}}),m=i.useCallback(()=>l(g=>!g),[]),h=i.useCallback(g=>{const b={base_model:t.base_model,model_name:t.model_name,body:g};n(b).unwrap().then(y=>{f.setValues(y),c(lt(rn({title:d("modelManager.modelUpdated"),status:"success"})))}).catch(y=>{f.reset(),c(lt(rn({title:d("modelManager.modelUpdateFailed"),status:"error"})))})},[f,c,t.base_model,t.model_name,d,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{justifyContent:"space-between",alignItems:"center",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",d("modelManager.model")]})]}),[""].includes(t.base_model)?a.jsx(Sa,{sx:{p:2,borderRadius:4,bg:"error.200",_dark:{bg:"error.400"}},children:d("modelManager.conversionNotSupported")}):a.jsx(ghe,{model:t})]}),a.jsx(On,{}),a.jsx($,{flexDirection:"column",maxHeight:window.innerHeight-270,overflowY:"scroll",children:a.jsx("form",{onSubmit:f.onSubmit(g=>h(g)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:d("modelManager.name"),...f.getInputProps("model_name")}),a.jsx(En,{label:d("modelManager.description"),...f.getInputProps("description")}),a.jsx(kf,{required:!0,...f.getInputProps("base_model")}),a.jsx(f0,{required:!0,...f.getInputProps("variant")}),a.jsx(En,{required:!0,label:d("modelManager.modelLocation"),...f.getInputProps("path")}),a.jsx(En,{label:d("modelManager.vaeLocation"),...f.getInputProps("vae")}),a.jsxs($,{flexDirection:"column",gap:2,children:[s?a.jsx(En,{required:!0,label:d("modelManager.config"),...f.getInputProps("config")}):a.jsx(WO,{required:!0,...f.getInputProps("config")}),a.jsx(yr,{isChecked:s,onChange:m,label:"Use Custom Config"})]}),a.jsx(Xe,{type:"submit",isLoading:r,children:d("modelManager.updateModel")})]})})})]})}function bhe(e){const{model:t}=e,[n,{isLoading:r}]=c3(),o=te(),{t:s}=W(),l=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"main",path:t.path?t.path:"",description:t.description?t.description:"",model_format:"diffusers",vae:t.vae?t.vae:"",variant:t.variant},validate:{path:d=>d.trim().length===0?"Must provide a path":null}}),c=i.useCallback(d=>{const f={base_model:t.base_model,model_name:t.model_name,body:d};n(f).unwrap().then(m=>{l.setValues(m),o(lt(rn({title:s("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{l.reset(),o(lt(rn({title:s("modelManager.modelUpdateFailed"),status:"error"})))})},[l,o,t.base_model,t.model_name,s,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",s("modelManager.model")]})]}),a.jsx(On,{}),a.jsx("form",{onSubmit:l.onSubmit(d=>c(d)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:s("modelManager.name"),...l.getInputProps("model_name")}),a.jsx(En,{label:s("modelManager.description"),...l.getInputProps("description")}),a.jsx(kf,{required:!0,...l.getInputProps("base_model")}),a.jsx(f0,{required:!0,...l.getInputProps("variant")}),a.jsx(En,{required:!0,label:s("modelManager.modelLocation"),...l.getInputProps("path")}),a.jsx(En,{label:s("modelManager.vaeLocation"),...l.getInputProps("vae")}),a.jsx(Xe,{type:"submit",isLoading:r,children:s("modelManager.updateModel")})]})})]})}function xhe(e){const{model:t}=e,[n,{isLoading:r}]=nN(),o=te(),{t:s}=W(),l=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"lora",path:t.path?t.path:"",description:t.description?t.description:"",model_format:t.model_format},validate:{path:d=>d.trim().length===0?"Must provide a path":null}}),c=i.useCallback(d=>{const f={base_model:t.base_model,model_name:t.model_name,body:d};n(f).unwrap().then(m=>{l.setValues(m),o(lt(rn({title:s("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{l.reset(),o(lt(rn({title:s("modelManager.modelUpdateFailed"),status:"error"})))})},[o,l,t.base_model,t.model_name,s,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",s("modelManager.model")," ⋅"," ",rN[t.model_format]," ",s("common.format")]})]}),a.jsx(On,{}),a.jsx("form",{onSubmit:l.onSubmit(d=>c(d)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:s("modelManager.name"),...l.getInputProps("model_name")}),a.jsx(En,{label:s("modelManager.description"),...l.getInputProps("description")}),a.jsx(kf,{...l.getInputProps("base_model")}),a.jsx(En,{label:s("modelManager.modelLocation"),...l.getInputProps("path")}),a.jsx(Xe,{type:"submit",isLoading:r,children:s("modelManager.updateModel")})]})})]})}function yhe(e){const{t}=W(),n=te(),[r]=oN(),[o]=sN(),{model:s,isSelected:l,setSelectedModelId:c}=e,d=i.useCallback(()=>{c(s.id)},[s.id,c]),f=i.useCallback(()=>{const m={main:r,lora:o,onnx:r}[s.model_type];m(s).unwrap().then(h=>{n(lt(rn({title:`${t("modelManager.modelDeleted")}: ${s.model_name}`,status:"success"})))}).catch(h=>{h&&n(lt(rn({title:`${t("modelManager.modelDeleteFailed")}: ${s.model_name}`,status:"error"})))}),c(void 0)},[r,o,s,c,n,t]);return a.jsxs($,{sx:{gap:2,alignItems:"center",w:"full"},children:[a.jsx($,{as:Xe,isChecked:l,sx:{justifyContent:"start",p:2,borderRadius:"base",w:"full",alignItems:"center",bg:l?"accent.400":"base.100",color:l?"base.50":"base.800",_hover:{bg:l?"accent.500":"base.300",color:l?"base.50":"base.800"},_dark:{color:l?"base.50":"base.100",bg:l?"accent.600":"base.850",_hover:{color:l?"base.50":"base.100",bg:l?"accent.550":"base.700"}}},onClick:d,children:a.jsxs($,{gap:4,alignItems:"center",children:[a.jsx(Sa,{minWidth:14,p:.5,fontSize:"sm",variant:"solid",children:aN[s.base_model]}),a.jsx(Ut,{label:s.description,hasArrow:!0,placement:"bottom",children:a.jsx(be,{sx:{fontWeight:500},children:s.model_name})})]})}),a.jsx(t0,{title:t("modelManager.deleteModel"),acceptCallback:f,acceptButtonText:t("modelManager.delete"),triggerComponent:a.jsx(Fe,{icon:a.jsx(Fre,{}),"aria-label":t("modelManager.deleteConfig"),colorScheme:"error"}),children:a.jsxs($,{rowGap:4,flexDirection:"column",children:[a.jsx("p",{style:{fontWeight:"bold"},children:t("modelManager.deleteMsg1")}),a.jsx("p",{children:t("modelManager.deleteMsg2")})]})})]})}const Che=e=>{const{selectedModelId:t,setSelectedModelId:n}=e,{t:r}=W(),[o,s]=i.useState(""),[l,c]=i.useState("all"),{filteredDiffusersModels:d,isLoadingDiffusersModels:f}=as(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredDiffusersModels:Vu(_,"main","diffusers",o),isLoadingDiffusersModels:I})}),{filteredCheckpointModels:m,isLoadingCheckpointModels:h}=as(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredCheckpointModels:Vu(_,"main","checkpoint",o),isLoadingCheckpointModels:I})}),{filteredLoraModels:g,isLoadingLoraModels:b}=Vd(void 0,{selectFromResult:({data:_,isLoading:I})=>({filteredLoraModels:Vu(_,"lora",void 0,o),isLoadingLoraModels:I})}),{filteredOnnxModels:y,isLoadingOnnxModels:x}=vd(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredOnnxModels:Vu(_,"onnx","onnx",o),isLoadingOnnxModels:I})}),{filteredOliveModels:w,isLoadingOliveModels:S}=vd(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredOliveModels:Vu(_,"onnx","olive",o),isLoadingOliveModels:I})}),j=i.useCallback(_=>{s(_.target.value)},[]);return a.jsx($,{flexDirection:"column",rowGap:4,width:"50%",minWidth:"50%",children:a.jsxs($,{flexDirection:"column",gap:4,paddingInlineEnd:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{onClick:c.bind(null,"all"),isChecked:l==="all",size:"sm",children:r("modelManager.allModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"diffusers"),isChecked:l==="diffusers",children:r("modelManager.diffusersModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"checkpoint"),isChecked:l==="checkpoint",children:r("modelManager.checkpointModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"onnx"),isChecked:l==="onnx",children:r("modelManager.onnxModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"olive"),isChecked:l==="olive",children:r("modelManager.oliveModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"lora"),isChecked:l==="lora",children:r("modelManager.loraModels")})]}),a.jsx(yo,{onChange:j,label:r("modelManager.search"),labelPos:"side"}),a.jsxs($,{flexDirection:"column",gap:4,maxHeight:window.innerHeight-280,overflow:"scroll",children:[f&&a.jsx(tc,{loadingMessage:"Loading Diffusers..."}),["all","diffusers"].includes(l)&&!f&&d.length>0&&a.jsx(ec,{title:"Diffusers",modelList:d,selected:{selectedModelId:t,setSelectedModelId:n}},"diffusers"),h&&a.jsx(tc,{loadingMessage:"Loading Checkpoints..."}),["all","checkpoint"].includes(l)&&!h&&m.length>0&&a.jsx(ec,{title:"Checkpoints",modelList:m,selected:{selectedModelId:t,setSelectedModelId:n}},"checkpoints"),b&&a.jsx(tc,{loadingMessage:"Loading LoRAs..."}),["all","lora"].includes(l)&&!b&&g.length>0&&a.jsx(ec,{title:"LoRAs",modelList:g,selected:{selectedModelId:t,setSelectedModelId:n}},"loras"),S&&a.jsx(tc,{loadingMessage:"Loading Olives..."}),["all","olive"].includes(l)&&!S&&w.length>0&&a.jsx(ec,{title:"Olives",modelList:w,selected:{selectedModelId:t,setSelectedModelId:n}},"olive"),x&&a.jsx(tc,{loadingMessage:"Loading ONNX..."}),["all","onnx"].includes(l)&&!x&&y.length>0&&a.jsx(ec,{title:"ONNX",modelList:y,selected:{selectedModelId:t,setSelectedModelId:n}},"onnx")]})]})})},whe=i.memo(Che),Vu=(e,t,n,r)=>{const o=[];return qn(e==null?void 0:e.entities,s=>{if(!s)return;const l=s.model_name.toLowerCase().includes(r.toLowerCase()),c=n===void 0||s.model_format===n,d=s.model_type===t;l&&c&&d&&o.push(s)}),o},W2=i.memo(e=>a.jsx($,{flexDirection:"column",gap:4,borderRadius:4,p:4,sx:{bg:"base.200",_dark:{bg:"base.800"}},children:e.children}));W2.displayName="StyledModelContainer";const ec=i.memo(e=>{const{title:t,modelList:n,selected:r}=e;return a.jsx(W2,{children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(be,{variant:"subtext",fontSize:"sm",children:t}),n.map(o=>a.jsx(yhe,{model:o,isSelected:r.selectedModelId===o.id,setSelectedModelId:r.setSelectedModelId},o.id))]})})});ec.displayName="ModelListWrapper";const tc=i.memo(({loadingMessage:e})=>a.jsx(W2,{children:a.jsxs($,{justifyContent:"center",alignItems:"center",flexDirection:"column",p:4,gap:8,children:[a.jsx(va,{}),a.jsx(be,{variant:"subtext",children:e||"Fetching..."})]})}));tc.displayName="FetchingModelsLoader";function She(){const[e,t]=i.useState(),{mainModel:n}=as(Bl,{selectFromResult:({data:s})=>({mainModel:e?s==null?void 0:s.entities[e]:void 0})}),{loraModel:r}=Vd(void 0,{selectFromResult:({data:s})=>({loraModel:e?s==null?void 0:s.entities[e]:void 0})}),o=n||r;return a.jsxs($,{sx:{gap:8,w:"full",h:"full"},children:[a.jsx(whe,{selectedModelId:e,setSelectedModelId:t}),a.jsx(khe,{model:o})]})}const khe=e=>{const{t}=W(),{model:n}=e;return(n==null?void 0:n.model_format)==="checkpoint"?a.jsx(vhe,{model:n},n.id):(n==null?void 0:n.model_format)==="diffusers"?a.jsx(bhe,{model:n},n.id):(n==null?void 0:n.model_type)==="lora"?a.jsx(xhe,{model:n},n.id):a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",maxH:96,userSelect:"none"},children:a.jsx(be,{variant:"subtext",children:t("modelManager.noModelSelected")})})};function jhe(){const{t:e}=W();return a.jsxs($,{sx:{w:"full",p:4,borderRadius:4,gap:4,justifyContent:"space-between",alignItems:"center",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(be,{sx:{fontWeight:600},children:e("modelManager.syncModels")}),a.jsx(be,{fontSize:"sm",sx:{_dark:{color:"base.400"}},children:e("modelManager.syncModelsDesc")})]}),a.jsx(cu,{})]})}function _he(){return a.jsx($,{children:a.jsx(jhe,{})})}const Ihe=()=>{const{t:e}=W(),t=i.useMemo(()=>[{id:"modelManager",label:e("modelManager.modelManager"),content:a.jsx(She,{})},{id:"importModels",label:e("modelManager.importModels"),content:a.jsx(phe,{})},{id:"mergeModels",label:e("modelManager.mergeModels"),content:a.jsx(hhe,{})},{id:"settings",label:e("modelManager.settings"),content:a.jsx(_he,{})}],[e]);return a.jsxs(ci,{isLazy:!0,variant:"line",layerStyle:"first",sx:{w:"full",h:"full",p:4,gap:4,borderRadius:"base"},children:[a.jsx(ui,{children:t.map(n=>a.jsx(mr,{sx:{borderTopRadius:"base"},children:n.label},n.id))}),a.jsx(eu,{sx:{w:"full",h:"full"},children:t.map(n=>a.jsx($r,{sx:{w:"full",h:"full"},children:n.content},n.id))})]})},Phe=i.memo(Ihe),Ehe=e=>{const t=Ya();return{...u3,id:t,type:"current_image",position:e,data:{id:t,type:"current_image",isOpen:!0,label:"Current Image"}}},Mhe=e=>{const t=Ya();return{...u3,id:t,type:"notes",position:e,data:{id:t,isOpen:!0,label:"Notes",notes:"",type:"notes"}}},Ohe=fe([e=>e.nodes],e=>e.nodeTemplates),Dhe=()=>{const e=H(Ohe),t=zx();return i.useCallback(n=>{var d;let r=window.innerWidth/2,o=window.innerHeight/2;const s=(d=document.querySelector("#workflow-editor"))==null?void 0:d.getBoundingClientRect();s&&(r=s.width/2-U1/2,o=s.height/2-U1/2);const l=t.project({x:r,y:o});if(n==="current_image")return Ehe(l);if(n==="notes")return Mhe(l);const c=e[n];return lN(l,c)},[e,t])},GO=i.forwardRef(({label:e,description:t,...n},r)=>a.jsx("div",{ref:r,...n,children:a.jsxs("div",{children:[a.jsx(be,{fontWeight:600,children:e}),a.jsx(be,{size:"xs",sx:{color:"base.600",_dark:{color:"base.500"}},children:t})]})}));GO.displayName="AddNodePopoverSelectItem";const Rhe=(e,t)=>{const n=new RegExp(e.trim().replace(/[-[\]{}()*+!<=:?./\\^$|#,]/g,"").split(" ").join(".*"),"gi");return n.test(t.label)||n.test(t.description)||t.tags.some(r=>n.test(r))},Ahe=()=>{const e=te(),t=Dhe(),n=zs(),{t:r}=W(),o=H(w=>w.nodes.connectionStartFieldType),s=H(w=>{var S;return(S=w.nodes.connectionStartParams)==null?void 0:S.handleType}),l=fe([pe],({nodes:w})=>{const S=o?pL(w.nodeTemplates,_=>{const I=s=="source"?_.inputs:_.outputs;return Jo(I,E=>{const M=s=="source"?o:E.type,D=s=="target"?o:E.type;return Bx(M,D)})}):Hr(w.nodeTemplates),j=Hr(S,_=>({label:_.title,value:_.type,description:_.description,tags:_.tags}));return o===null&&(j.push({label:r("nodes.currentImage"),value:"current_image",description:r("nodes.currentImageDescription"),tags:["progress"]}),j.push({label:r("nodes.notes"),value:"notes",description:r("nodes.notesDescription"),tags:["notes"]})),j.sort((_,I)=>_.label.localeCompare(I.label)),{data:j}}),{data:c}=H(l),d=H(w=>w.nodes.isAddNodePopoverOpen),f=i.useRef(null),m=i.useCallback(w=>{const S=t(w);if(!S){const j=r("nodes.unknownNode",{nodeType:w});n({status:"error",title:j});return}e(iN(S))},[e,t,n,r]),h=i.useCallback(w=>{w&&m(w)},[m]),g=i.useCallback(()=>{e(cN())},[e]),b=i.useCallback(()=>{e(d3())},[e]),y=i.useCallback(w=>{w.preventDefault(),b(),setTimeout(()=>{var S;(S=f.current)==null||S.focus()},0)},[b]),x=i.useCallback(()=>{g()},[g]);return tt(["shift+a","space"],y),tt(["escape"],x),a.jsxs(lf,{initialFocusRef:f,isOpen:d,onClose:g,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[a.jsx(p6,{children:a.jsx($,{sx:{position:"absolute",top:"15%",insetInlineStart:"50%",pointerEvents:"none"}})}),a.jsx(cf,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:a.jsx(Cg,{sx:{p:0},children:a.jsx(sn,{inputRef:f,selectOnBlur:!1,placeholder:r("nodes.nodeSearch"),value:null,data:c,maxDropdownHeight:400,nothingFound:r("nodes.noMatchingNodes"),itemComponent:GO,filter:Rhe,onChange:h,hoverOnSearchChange:!0,onDropdownClose:g,sx:{width:"32rem",input:{padding:"0.5rem"}}})})})]})},The=i.memo(Ahe),Nhe=()=>{const e=zx(),t=H(r=>r.nodes.shouldValidateGraph);return i.useCallback(({source:r,sourceHandle:o,target:s,targetHandle:l})=>{const c=e.getEdges(),d=e.getNodes();if(!(r&&o&&s&&l))return!1;const f=e.getNode(r),m=e.getNode(s);if(!(f&&m&&f.data&&m.data))return!1;const h=f.data.outputs[o],g=m.data.inputs[l];return!h||!g||r===s?!1:t?c.find(b=>{b.target===s&&b.targetHandle===l&&b.source===r&&b.sourceHandle})||c.find(b=>b.target===s&&b.targetHandle===l)&&g.type.name!=="CollectionItemField"||!Bx(h.type,g.type)?!1:f3(r,s,d,c):!0},[e,t])},_c=e=>`var(--invokeai-colors-${e.split(".").join("-")})`,V2=e=>{if(!e)return _c("base.500");const t=uN[e.name];return _c(t||"base.500")},$he=fe(pe,({nodes:e})=>{const{shouldAnimateEdges:t,connectionStartFieldType:n,shouldColorEdges:r}=e,o=r?V2(n):_c("base.500");let s="react-flow__custom_connection-path";return t&&(s=s.concat(" animated")),{stroke:o,className:s}}),Lhe=({fromX:e,fromY:t,fromPosition:n,toX:r,toY:o,toPosition:s})=>{const{stroke:l,className:c}=H($he),d={sourceX:e,sourceY:t,sourcePosition:n,targetX:r,targetY:o,targetPosition:s},[f]=Hx(d);return a.jsx("g",{children:a.jsx("path",{fill:"none",stroke:l,strokeWidth:2,className:c,d:f,style:{opacity:.8}})})},Fhe=i.memo(Lhe),KO=(e,t,n,r,o)=>fe(pe,({nodes:s})=>{var g,b;const l=s.nodes.find(y=>y.id===e),c=s.nodes.find(y=>y.id===n),d=Jt(l)&&Jt(c),f=(l==null?void 0:l.selected)||(c==null?void 0:c.selected)||o,m=d?(b=(g=l==null?void 0:l.data)==null?void 0:g.outputs[t||""])==null?void 0:b.type:void 0,h=m&&s.shouldColorEdges?V2(m):_c("base.500");return{isSelected:f,shouldAnimate:s.shouldAnimateEdges&&f,stroke:h}}),zhe=({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:o,targetPosition:s,markerEnd:l,data:c,selected:d,source:f,target:m,sourceHandleId:h,targetHandleId:g})=>{const b=i.useMemo(()=>KO(f,h,m,g,d),[d,f,h,m,g]),{isSelected:y,shouldAnimate:x}=H(b),[w,S,j]=Hx({sourceX:e,sourceY:t,sourcePosition:o,targetX:n,targetY:r,targetPosition:s}),{base500:_}=hf();return a.jsxs(a.Fragment,{children:[a.jsx(p3,{path:w,markerEnd:l,style:{strokeWidth:y?3:2,stroke:_,opacity:y?.8:.5,animation:x?"dashdraw 0.5s linear infinite":void 0,strokeDasharray:x?5:"none"}}),(c==null?void 0:c.count)&&c.count>1&&a.jsx(dN,{children:a.jsx($,{sx:{position:"absolute",transform:`translate(-50%, -50%) translate(${S}px,${j}px)`},className:"nodrag nopan",children:a.jsx(Sa,{variant:"solid",sx:{bg:"base.500",opacity:y?.8:.5,boxShadow:"base"},children:c.count})})})]})},Bhe=i.memo(zhe),Hhe=({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:o,targetPosition:s,markerEnd:l,selected:c,source:d,target:f,sourceHandleId:m,targetHandleId:h})=>{const g=i.useMemo(()=>KO(d,m,f,h,c),[d,m,f,h,c]),{isSelected:b,shouldAnimate:y,stroke:x}=H(g),[w]=Hx({sourceX:e,sourceY:t,sourcePosition:o,targetX:n,targetY:r,targetPosition:s});return a.jsx(p3,{path:w,markerEnd:l,style:{strokeWidth:b?3:2,stroke:x,opacity:b?.8:.5,animation:y?"dashdraw 0.5s linear infinite":void 0,strokeDasharray:y?5:"none"}})},Whe=i.memo(Hhe),Vhe=e=>{const{nodeId:t,width:n,children:r,selected:o}=e,{isMouseOverNode:s,handleMouseOut:l,handleMouseOver:c}=oO(t),d=i.useMemo(()=>fe(pe,({nodes:j})=>{var _;return((_=j.nodeExecutionStates[t])==null?void 0:_.status)===ta.enum.IN_PROGRESS}),[t]),f=H(d),[m,h,g,b]=Zo("shadows",["nodeInProgress.light","nodeInProgress.dark","shadows.xl","shadows.base"]),y=te(),x=ia(m,h),w=H(j=>j.nodes.nodeOpacity),S=i.useCallback(j=>{!j.ctrlKey&&!j.altKey&&!j.metaKey&&!j.shiftKey&&y(fN(t)),y(m3())},[y,t]);return a.jsxs(Ie,{onClick:S,onMouseEnter:c,onMouseLeave:l,className:Kc,sx:{h:"full",position:"relative",borderRadius:"base",w:n??U1,transitionProperty:"common",transitionDuration:"0.1s",cursor:"grab",opacity:w},children:[a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",pointerEvents:"none",shadow:`${g}, ${b}, ${b}`,zIndex:-1}}),a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"md",pointerEvents:"none",transitionProperty:"common",transitionDuration:"0.1s",opacity:.7,shadow:f?x:void 0,zIndex:-1}}),r,a.jsx(rO,{isSelected:o,isHovered:s})]})},p0=i.memo(Vhe),Uhe=fe(pe,({system:e,gallery:t})=>{var r;return{imageDTO:t.selection[t.selection.length-1],progressImage:(r=e.denoiseProgress)==null?void 0:r.progress_image}}),Ghe=e=>{const{progressImage:t,imageDTO:n}=pN(Uhe);return t?a.jsx(E1,{nodeProps:e,children:a.jsx(Ca,{src:t.dataURL,sx:{w:"full",h:"full",objectFit:"contain",borderRadius:"base"}})}):n?a.jsx(E1,{nodeProps:e,children:a.jsx(fl,{imageDTO:n,isDragDisabled:!0,useThumbailFallback:!0})}):a.jsx(E1,{nodeProps:e,children:a.jsx(Tn,{})})},Khe=i.memo(Ghe),E1=e=>{const[t,n]=i.useState(!1),r=i.useCallback(()=>{n(!0)},[]),o=i.useCallback(()=>{n(!1)},[]),{t:s}=W();return a.jsx(p0,{nodeId:e.nodeProps.id,selected:e.nodeProps.selected,width:384,children:a.jsxs($,{onMouseEnter:r,onMouseLeave:o,className:Kc,sx:{position:"relative",flexDirection:"column"},children:[a.jsx($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",alignItems:"center",justifyContent:"center",h:8},children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",_dark:{color:"base.200"}},children:s("nodes.currentImage")})}),a.jsxs($,{layerStyle:"nodeBody",sx:{w:"full",h:"full",borderBottomRadius:"base",p:2},children:[e.children,t&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:40,left:-2,right:-2,bottom:0,pointerEvents:"none"},children:a.jsx(FO,{})},"nextPrevButtons")]})]})})},U2=e=>{const t=e.filter(o=>!o.ui_hidden),n=t.filter(o=>!na(o.ui_order)).sort((o,s)=>(o.ui_order??0)-(s.ui_order??0)),r=t.filter(o=>na(o.ui_order));return n.concat(r).map(o=>o.name).filter(o=>o!=="is_intermediate")},qhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(c=>c.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];if(!s)return[];const l=Hr(s.inputs).filter(c=>(["any","direct"].includes(c.input)||c.type.isCollectionOrScalar)&&hx(h3).includes(c.type.name));return U2(l)}),[e]);return H(t)},Xhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(c=>c.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];if(!s)return[];const l=Hr(s.inputs).filter(c=>c.input==="connection"&&!c.type.isCollectionOrScalar||!hx(h3).includes(c.type.name));return U2(l)}),[e]);return H(t)},Qhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];return s?U2(Hr(s.outputs)):[]}),[e]);return H(t)},G2=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?Jo(o.data.outputs,s=>s.type.name==="ImageField"&&o.data.type!=="image"):!1}),[e]);return H(t)},Yhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.isIntermediate:!1}),[e]);return H(t)},Zhe=({nodeId:e})=>{const{t}=W(),n=te(),r=G2(e),o=Yhe(e),s=i.useCallback(l=>{n(mN({nodeId:e,isIntermediate:!l.target.checked}))},[n,e]);return r?a.jsxs(Gt,{as:$,sx:{alignItems:"center",gap:2,w:"auto"},children:[a.jsx(ln,{sx:{fontSize:"xs",mb:"1px"},children:t("hotkeys.saveToGallery.title")}),a.jsx(og,{className:"nopan",size:"sm",onChange:s,isChecked:!o})]}):null},Jhe=i.memo(Zhe),ege=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.useCache:!1}),[e]);return H(t)},tge=({nodeId:e})=>{const t=te(),n=ege(e),r=i.useCallback(s=>{t(hN({nodeId:e,useCache:s.target.checked}))},[t,e]),{t:o}=W();return a.jsxs(Gt,{as:$,sx:{alignItems:"center",gap:2,w:"auto"},children:[a.jsx(ln,{sx:{fontSize:"xs",mb:"1px"},children:o("invocationCache.useCache")}),a.jsx(og,{className:"nopan",size:"sm",onChange:r,isChecked:n})]})},nge=i.memo(tge),rge=({nodeId:e})=>{const t=G2(e),n=Mt("invocationCache").isFeatureEnabled;return a.jsxs($,{className:Kc,layerStyle:"nodeFooter",sx:{w:"full",borderBottomRadius:"base",px:2,py:0,h:6,justifyContent:"space-between"},children:[n&&a.jsx(nge,{nodeId:e}),t&&a.jsx(Jhe,{nodeId:e})]})},oge=i.memo(rge),sge=({nodeId:e,isOpen:t})=>{const n=te(),r=gN(),o=i.useCallback(()=>{n(vN({nodeId:e,isOpen:!t})),r(e)},[n,t,e,r]);return a.jsx(Fe,{className:"nodrag",onClick:o,"aria-label":"Minimize",sx:{minW:8,w:8,h:8,color:"base.500",_dark:{color:"base.500"},_hover:{color:"base.700",_dark:{color:"base.300"}}},variant:"link",icon:a.jsx(Kg,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})})},K2=i.memo(sge),age=({nodeId:e,title:t})=>{const n=te(),r=eO(e),o=tO(e),{t:s}=W(),[l,c]=i.useState(""),d=i.useCallback(async m=>{n(qI({nodeId:e,label:m})),c(r||t||o||s("nodes.problemSettingTitle"))},[n,e,t,o,r,s]),f=i.useCallback(m=>{c(m)},[]);return i.useEffect(()=>{c(r||t||o||s("nodes.problemSettingTitle"))},[r,o,t,s]),a.jsx($,{sx:{overflow:"hidden",w:"full",h:"full",alignItems:"center",justifyContent:"center",cursor:"text"},children:a.jsxs(ef,{as:$,value:l,onChange:f,onSubmit:d,sx:{alignItems:"center",position:"relative",w:"full",h:"full"},children:[a.jsx(Jd,{fontSize:"sm",sx:{p:0,w:"full"},noOfLines:1}),a.jsx(Zd,{className:"nodrag",fontSize:"sm",sx:{p:0,fontWeight:700,_focusVisible:{p:0,boxShadow:"none"}}}),a.jsx(lge,{})]})})},qO=i.memo(age);function lge(){const{isEditing:e,getEditButtonProps:t}=K3(),n=i.useCallback(r=>{const{onClick:o}=t();o&&o(r)},[t]);return e?null:a.jsx(Ie,{className:Kc,onDoubleClick:n,sx:{position:"absolute",w:"full",h:"full",top:0,cursor:"grab"}})}const ige=({nodeId:e})=>{const t=A2(e),{base400:n,base600:r}=hf(),o=ia(n,r),s=i.useMemo(()=>({borderWidth:0,borderRadius:"3px",width:"1rem",height:"1rem",backgroundColor:o,zIndex:-1}),[o]);return Im(t)?a.jsxs(a.Fragment,{children:[a.jsx(qu,{type:"target",id:`${t.id}-collapsed-target`,isConnectable:!1,position:rc.Left,style:{...s,left:"-0.5rem"}}),Hr(t.inputs,l=>a.jsx(qu,{type:"target",id:l.name,isConnectable:!1,position:rc.Left,style:{visibility:"hidden"}},`${t.id}-${l.name}-collapsed-input-handle`)),a.jsx(qu,{type:"source",id:`${t.id}-collapsed-source`,isConnectable:!1,position:rc.Right,style:{...s,right:"-0.5rem"}}),Hr(t.outputs,l=>a.jsx(qu,{type:"source",id:l.name,isConnectable:!1,position:rc.Right,style:{visibility:"hidden"}},`${t.id}-${l.name}-collapsed-output-handle`))]}):null},cge=i.memo(ige),uge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);return r.nodeTemplates[(o==null?void 0:o.data.type)??""]}),[e]);return H(t)},dge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e),c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return{node:l,template:c}}),[e]),{node:n,template:r}=H(t);return i.useMemo(()=>Jt(n)&&r?$x(n,r):!1,[n,r])},fge=({nodeId:e})=>{const t=dge(e);return a.jsx(Ut,{label:a.jsx(XO,{nodeId:e}),placement:"top",shouldWrapChildren:!0,children:a.jsx(An,{as:HM,sx:{display:"block",boxSize:4,w:8,color:t?"error.400":"base.400"}})})},pge=i.memo(fge),XO=i.memo(({nodeId:e})=>{const t=A2(e),n=uge(e),{t:r}=W(),o=i.useMemo(()=>t!=null&&t.label&&(n!=null&&n.title)?`${t.label} (${n.title})`:t!=null&&t.label&&!n?t.label:!(t!=null&&t.label)&&n?n.title:r("nodes.unknownNode"),[t,n,r]),s=i.useMemo(()=>!Im(t)||!n?null:t.version?n.version?dS(t.version,n.version,"<")?a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.updateNode"),")"]}):dS(t.version,n.version,">")?a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.updateApp"),")"]}):a.jsxs(be,{as:"span",children:[r("nodes.version")," ",t.version]}):a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.unknownTemplate"),")"]}):a.jsx(be,{as:"span",sx:{color:"error.500"},children:r("nodes.versionUnknown")}),[t,n,r]);return Im(t)?a.jsxs($,{sx:{flexDir:"column"},children:[a.jsx(be,{as:"span",sx:{fontWeight:600},children:o}),(n==null?void 0:n.nodePack)&&a.jsxs(be,{opacity:.7,children:[r("nodes.nodePack"),": ",n.nodePack]}),a.jsx(be,{sx:{opacity:.7,fontStyle:"oblique 5deg"},children:n==null?void 0:n.description}),s,(t==null?void 0:t.notes)&&a.jsx(be,{children:t.notes})]}):a.jsx(be,{sx:{fontWeight:600},children:r("nodes.unknownNode")})});XO.displayName="TooltipContent";const M1=3,G_={circle:{transitionProperty:"none",transitionDuration:"0s"},".chakra-progress__track":{stroke:"transparent"}},mge=({nodeId:e})=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>r.nodeExecutionStates[e]),[e]),n=H(t);return n?a.jsx(Ut,{label:a.jsx(QO,{nodeExecutionState:n}),placement:"top",children:a.jsx($,{className:Kc,sx:{w:5,h:"full",alignItems:"center",justifyContent:"flex-end"},children:a.jsx(YO,{nodeExecutionState:n})})}):null},hge=i.memo(mge),QO=i.memo(({nodeExecutionState:e})=>{const{status:t,progress:n,progressImage:r}=e,{t:o}=W();return t===ta.enum.PENDING?a.jsx(be,{children:o("queue.pending")}):t===ta.enum.IN_PROGRESS?r?a.jsxs($,{sx:{pos:"relative",pt:1.5,pb:.5},children:[a.jsx(Ca,{src:r.dataURL,sx:{w:32,h:32,borderRadius:"base",objectFit:"contain"}}),n!==null&&a.jsxs(Sa,{variant:"solid",sx:{pos:"absolute",top:2.5,insetInlineEnd:1},children:[Math.round(n*100),"%"]})]}):n!==null?a.jsxs(be,{children:[o("nodes.executionStateInProgress")," (",Math.round(n*100),"%)"]}):a.jsx(be,{children:o("nodes.executionStateInProgress")}):t===ta.enum.COMPLETED?a.jsx(be,{children:o("nodes.executionStateCompleted")}):t===ta.enum.FAILED?a.jsx(be,{children:o("nodes.executionStateError")}):null});QO.displayName="TooltipLabel";const YO=i.memo(e=>{const{progress:t,status:n}=e.nodeExecutionState;return n===ta.enum.PENDING?a.jsx(An,{as:wte,sx:{boxSize:M1,color:"base.600",_dark:{color:"base.300"}}}):n===ta.enum.IN_PROGRESS?t===null?a.jsx(hb,{isIndeterminate:!0,size:"14px",color:"base.500",thickness:14,sx:G_}):a.jsx(hb,{value:Math.round(t*100),size:"14px",color:"base.500",thickness:14,sx:G_}):n===ta.enum.COMPLETED?a.jsx(An,{as:$M,sx:{boxSize:M1,color:"ok.600",_dark:{color:"ok.300"}}}):n===ta.enum.FAILED?a.jsx(An,{as:_te,sx:{boxSize:M1,color:"error.600",_dark:{color:"error.300"}}}):null});YO.displayName="StatusIcon";const gge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return!1;const s=r.nodeTemplates[(o==null?void 0:o.data.type)??""];return s==null?void 0:s.classification}),[e]);return H(t)},vge=({nodeId:e})=>{const t=gge(e);return!t||t==="stable"?null:a.jsx(Ut,{label:a.jsx(ZO,{classification:t}),placement:"top",shouldWrapChildren:!0,children:a.jsx(An,{as:xge(t),sx:{display:"block",boxSize:4,color:"base.400"}})})},bge=i.memo(vge),ZO=i.memo(({classification:e})=>{const{t}=W();return e==="beta"?t("nodes.betaDesc"):e==="prototype"?t("nodes.prototypeDesc"):null});ZO.displayName="ClassificationTooltipContent";const xge=e=>{if(e==="beta")return iae;if(e==="prototype")return Ote},yge=({nodeId:e,isOpen:t})=>a.jsxs($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:t?0:"base",alignItems:"center",justifyContent:"space-between",h:8,textAlign:"center",fontWeight:500,color:"base.700",_dark:{color:"base.200"}},children:[a.jsx(K2,{nodeId:e,isOpen:t}),a.jsx(bge,{nodeId:e}),a.jsx(qO,{nodeId:e}),a.jsxs($,{alignItems:"center",children:[a.jsx(hge,{nodeId:e}),a.jsx(pge,{nodeId:e})]}),!t&&a.jsx(cge,{nodeId:e})]}),Cge=i.memo(yge),wge=(e,t,n,r)=>fe(pe,o=>{if(!r)return wt.t("nodes.noFieldType");const{connectionStartFieldType:s,connectionStartParams:l,nodes:c,edges:d}=o.nodes;if(!l||!s)return wt.t("nodes.noConnectionInProgress");const{handleType:f,nodeId:m,handleId:h}=l;if(!f||!m||!h)return wt.t("nodes.noConnectionData");const g=n==="target"?r:s,b=n==="source"?r:s;if(e===m)return wt.t("nodes.cannotConnectToSelf");if(n===f)return n==="source"?wt.t("nodes.cannotConnectOutputToOutput"):wt.t("nodes.cannotConnectInputToInput");const y=n==="target"?e:m,x=n==="target"?t:h,w=n==="source"?e:m,S=n==="source"?t:h;if(d.find(_=>{_.target===y&&_.targetHandle===x&&_.source===w&&_.sourceHandle}))return wt.t("nodes.cannotDuplicateConnection");if(d.find(_=>_.target===y&&_.targetHandle===x)&&g.name!=="CollectionItemField")return wt.t("nodes.inputMayOnlyHaveOneConnection");if(!Bx(b,g))return wt.t("nodes.fieldTypesMustMatch");if(!f3(f==="source"?m:e,f==="source"?e:m,c,d))return wt.t("nodes.connectionWouldCreateCycle")}),Sge=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e);if(!Jt(l))return;const c=l.data[Lx[n]][t];return c==null?void 0:c.type}),[t,n,e]);return H(r)},kge=fe(pe,({nodes:e})=>e.connectionStartFieldType!==null&&e.connectionStartParams!==null),JO=({nodeId:e,fieldName:t,kind:n})=>{const r=Sge(e,t,n),o=i.useMemo(()=>fe(pe,({nodes:g})=>!!g.edges.filter(b=>(n==="input"?b.target:b.source)===e&&(n==="input"?b.targetHandle:b.sourceHandle)===t).length),[t,n,e]),s=i.useMemo(()=>wge(e,t,n==="input"?"target":"source",r),[e,t,n,r]),l=i.useMemo(()=>fe(pe,({nodes:g})=>{var b,y,x;return((b=g.connectionStartParams)==null?void 0:b.nodeId)===e&&((y=g.connectionStartParams)==null?void 0:y.handleId)===t&&((x=g.connectionStartParams)==null?void 0:x.handleType)==={input:"target",output:"source"}[n]}),[t,n,e]),c=H(o),d=H(kge),f=H(l),m=H(s),h=i.useMemo(()=>!!(d&&m&&!f),[m,d,f]);return{isConnected:c,isConnectionInProgress:d,isConnectionStartField:f,connectionError:m,shouldDim:h}},jge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{var l;const s=o.nodes.find(c=>c.id===e);if(Jt(s))return((l=s==null?void 0:s.data.inputs[t])==null?void 0:l.value)!==void 0}),[t,e]);return H(n)},_ge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s.data.inputs[t]}),[t,e]);return H(n)},Ige=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(c=>c.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""];return l==null?void 0:l.inputs[t]}),[t,e]);return H(n)},Pge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(d=>d.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""],c=l==null?void 0:l.inputs[t];return c==null?void 0:c.input}),[t,e]);return H(n)},Ege=({nodeId:e,fieldName:t,kind:n,children:r})=>{const o=te(),s=sO(e,t),l=aO(e,t,n),c=Pge(e,t),{t:d}=W(),f=i.useCallback(S=>{S.preventDefault()},[]),m=i.useMemo(()=>fe(pe,({workflow:S})=>({isExposed:!!S.exposedFields.find(_=>_.nodeId===e&&_.fieldName===t)})),[t,e]),h=i.useMemo(()=>c&&["any","direct"].includes(c),[c]),{isExposed:g}=H(m),b=i.useCallback(()=>{o(bN({nodeId:e,fieldName:t}))},[o,t,e]),y=i.useCallback(()=>{o(ZI({nodeId:e,fieldName:t}))},[o,t,e]),x=i.useMemo(()=>{const S=[];return h&&!g&&S.push(a.jsx(At,{icon:a.jsx(nl,{}),onClick:b,children:d("nodes.addLinearView")},`${e}.${t}.expose-field`)),h&&g&&S.push(a.jsx(At,{icon:a.jsx(Fte,{}),onClick:y,children:d("nodes.removeLinearView")},`${e}.${t}.unexpose-field`)),S},[t,b,y,g,h,e,d]),w=i.useCallback(()=>x.length?a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:f,children:a.jsx(_d,{title:s||l||d("nodes.unknownField"),children:x})}):null,[l,s,x,f,d]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:w,children:r})},Mge=i.memo(Ege),Oge=e=>{const{fieldTemplate:t,handleType:n,isConnectionInProgress:r,isConnectionStartField:o,connectionError:s}=e,{name:l}=t,c=t.type,d=cO(c),f=i.useMemo(()=>{const h=xN.some(y=>y===c.name),g=V2(c),b={backgroundColor:c.isCollection||c.isCollectionOrScalar?_c("base.900"):g,position:"absolute",width:"1rem",height:"1rem",borderWidth:c.isCollection||c.isCollectionOrScalar?4:0,borderStyle:"solid",borderColor:g,borderRadius:h?4:"100%",zIndex:1};return n==="target"?b.insetInlineStart="-1rem":b.insetInlineEnd="-1rem",r&&!o&&s&&(b.filter="opacity(0.4) grayscale(0.7)"),r&&s?o?b.cursor="grab":b.cursor="not-allowed":b.cursor="crosshair",b},[s,n,r,o,c]),m=i.useMemo(()=>r&&s?s:d,[s,d,r]);return a.jsx(Ut,{label:m,placement:n==="target"?"start":"end",hasArrow:!0,openDelay:Zh,children:a.jsx(qu,{type:n,id:l,position:n==="target"?rc.Left:rc.Right,style:f})})},eD=i.memo(Oge),Dge=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=Ige(e,t),o=_ge(e,t),s=jge(e,t),{isConnected:l,isConnectionInProgress:c,isConnectionStartField:d,connectionError:f,shouldDim:m}=JO({nodeId:e,fieldName:t,kind:"input"}),h=i.useMemo(()=>{if(!r||!r.required)return!1;if(!l&&r.input==="connection"||!s&&!l&&r.input==="any")return!0},[r,l,s]);return!r||!o?a.jsx(cx,{shouldDim:m,children:a.jsx(Gt,{sx:{alignItems:"stretch",justifyContent:"space-between",gap:2,h:"full",w:"full"},children:a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownInput",{name:(o==null?void 0:o.label)??(r==null?void 0:r.title)??t})})})}):a.jsxs(cx,{shouldDim:m,children:[a.jsxs(Gt,{isInvalid:h,isDisabled:l,sx:{alignItems:"stretch",justifyContent:"space-between",ps:r.input==="direct"?0:2,gap:2,h:"full",w:"full"},children:[a.jsx(Mge,{nodeId:e,fieldName:t,kind:"input",children:g=>a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full"},children:a.jsx(uO,{ref:g,nodeId:e,fieldName:t,kind:"input",isMissingInput:h,withTooltip:!0})})}),a.jsx(Ie,{children:a.jsx(yO,{nodeId:e,fieldName:t})})]}),r.input!=="direct"&&a.jsx(eD,{fieldTemplate:r,handleType:"target",isConnectionInProgress:c,isConnectionStartField:d,connectionError:f})]})},K_=i.memo(Dge),cx=i.memo(({shouldDim:e,children:t})=>a.jsx($,{sx:{position:"relative",minH:8,py:.5,alignItems:"center",opacity:e?.5:1,transitionProperty:"opacity",transitionDuration:"0.1s",w:"full",h:"full"},children:t}));cx.displayName="InputFieldWrapper";const Rge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s.data.outputs[t]}),[t,e]);return H(n)},Age=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(c=>c.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""];return l==null?void 0:l.outputs[t]}),[t,e]);return H(n)},Tge=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=Age(e,t),o=Rge(e,t),{isConnected:s,isConnectionInProgress:l,isConnectionStartField:c,connectionError:d,shouldDim:f}=JO({nodeId:e,fieldName:t,kind:"output"});return!r||!o?a.jsx(ux,{shouldDim:f,children:a.jsx(Gt,{sx:{alignItems:"stretch",justifyContent:"space-between",gap:2,h:"full",w:"full"},children:a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownOutput",{name:(r==null?void 0:r.title)??t})})})}):a.jsxs(ux,{shouldDim:f,children:[a.jsx(Ut,{label:a.jsx(T2,{nodeId:e,fieldName:t,kind:"output"}),openDelay:Zh,placement:"top",shouldWrapChildren:!0,hasArrow:!0,children:a.jsx(Gt,{isDisabled:s,pe:2,children:a.jsx(ln,{sx:{mb:0,fontWeight:500},children:r==null?void 0:r.title})})}),a.jsx(eD,{fieldTemplate:r,handleType:"source",isConnectionInProgress:l,isConnectionStartField:c,connectionError:d})]})},Nge=i.memo(Tge),ux=i.memo(({shouldDim:e,children:t})=>a.jsx($,{sx:{position:"relative",minH:8,py:.5,alignItems:"center",opacity:e?.5:1,transitionProperty:"opacity",transitionDuration:"0.1s",justifyContent:"flex-end"},children:t}));ux.displayName="OutputFieldWrapper";const $ge=e=>{const t=G2(e),n=Mt("invocationCache").isFeatureEnabled;return i.useMemo(()=>t||n,[t,n])},Lge=({nodeId:e,isOpen:t,label:n,type:r,selected:o})=>{const s=Xhe(e),l=qhe(e),c=$ge(e),d=Qhe(e);return a.jsxs(p0,{nodeId:e,selected:o,children:[a.jsx(Cge,{nodeId:e,isOpen:t,label:n,selected:o,type:r}),t&&a.jsxs(a.Fragment,{children:[a.jsx($,{layerStyle:"nodeBody",sx:{flexDirection:"column",w:"full",h:"full",py:2,gap:1,borderBottomRadius:c?0:"base"},children:a.jsxs($,{sx:{flexDir:"column",px:2,w:"full",h:"full"},children:[a.jsxs(sl,{gridTemplateColumns:"1fr auto",gridAutoRows:"1fr",children:[s.map((f,m)=>a.jsx(Sd,{gridColumnStart:1,gridRowStart:m+1,children:a.jsx(K_,{nodeId:e,fieldName:f})},`${e}.${f}.input-field`)),d.map((f,m)=>a.jsx(Sd,{gridColumnStart:2,gridRowStart:m+1,children:a.jsx(Nge,{nodeId:e,fieldName:f})},`${e}.${f}.output-field`))]}),l.map(f=>a.jsx(K_,{nodeId:e,fieldName:f},`${e}.${f}.input-field`))]})}),c&&a.jsx(oge,{nodeId:e})]})]})},Fge=i.memo(Lge),zge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.nodePack:!1}),[e]);return H(t)},Bge=({nodeId:e,isOpen:t,label:n,type:r,selected:o})=>{const{t:s}=W(),l=zge(e);return a.jsxs(p0,{nodeId:e,selected:o,children:[a.jsxs($,{className:Kc,layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:t?0:"base",alignItems:"center",h:8,fontWeight:600,fontSize:"sm"},children:[a.jsx(K2,{nodeId:e,isOpen:t}),a.jsx(be,{sx:{w:"full",textAlign:"center",pe:8,color:"error.500",_dark:{color:"error.300"}},children:n?`${n} (${r})`:r})]}),t&&a.jsx($,{layerStyle:"nodeBody",sx:{userSelect:"auto",flexDirection:"column",w:"full",h:"full",p:4,gap:1,borderBottomRadius:"base",fontSize:"sm"},children:a.jsxs($,{gap:2,flexDir:"column",children:[a.jsxs(be,{as:"span",children:[s("nodes.unknownNodeType"),":"," ",a.jsx(be,{as:"span",fontWeight:600,children:r})]}),l&&a.jsxs(be,{as:"span",children:[s("nodes.nodePack"),":"," ",a.jsx(be,{as:"span",fontWeight:600,children:l})]})]})})]})},Hge=i.memo(Bge),Wge=e=>{const{data:t,selected:n}=e,{id:r,type:o,isOpen:s,label:l}=t,c=i.useMemo(()=>fe(pe,({nodes:f})=>!!f.nodeTemplates[o]),[o]);return H(c)?a.jsx(Fge,{nodeId:r,isOpen:s,label:l,type:o,selected:n}):a.jsx(Hge,{nodeId:r,isOpen:s,label:l,type:o,selected:n})},Vge=i.memo(Wge),Uge=e=>{const{id:t,data:n,selected:r}=e,{notes:o,isOpen:s}=n,l=te(),c=i.useCallback(d=>{l(yN({nodeId:t,value:d.target.value}))},[l,t]);return a.jsxs(p0,{nodeId:t,selected:r,children:[a.jsxs($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:s?0:"base",alignItems:"center",justifyContent:"space-between",h:8},children:[a.jsx(K2,{nodeId:t,isOpen:s}),a.jsx(qO,{nodeId:t,title:"Notes"}),a.jsx(Ie,{minW:8})]}),s&&a.jsx(a.Fragment,{children:a.jsx($,{layerStyle:"nodeBody",className:"nopan",sx:{cursor:"auto",flexDirection:"column",borderBottomRadius:"base",w:"full",h:"full",p:2,gap:1},children:a.jsx($,{className:"nopan",sx:{flexDir:"column",w:"full",h:"full"},children:a.jsx(ga,{value:o,onChange:c,rows:8,resize:"none",sx:{fontSize:"xs"}})})})})]})},Gge=i.memo(Uge),Kge=["Delete","Backspace"],qge={collapsed:Bhe,default:Whe},Xge={invocation:Vge,current_image:Khe,notes:Gge},Qge={hideAttribution:!0},Yge=fe(pe,({nodes:e})=>{const{shouldSnapToGrid:t,selectionMode:n}=e;return{shouldSnapToGrid:t,selectionMode:n}}),Zge=()=>{const e=te(),t=H(O=>O.nodes.nodes),n=H(O=>O.nodes.edges),r=H(O=>O.nodes.viewport),{shouldSnapToGrid:o,selectionMode:s}=H(Yge),l=i.useRef(null),c=i.useRef(),d=Nhe(),[f]=Zo("radii",["base"]),m=i.useCallback(O=>{e(CN(O))},[e]),h=i.useCallback(O=>{e(wN(O))},[e]),g=i.useCallback((O,T)=>{e(SN(T))},[e]),b=i.useCallback(O=>{e(fS(O))},[e]),y=i.useCallback(()=>{e(kN({cursorPosition:c.current}))},[e]),x=i.useCallback(O=>{e(jN(O))},[e]),w=i.useCallback(O=>{e(_N(O))},[e]),S=i.useCallback(({nodes:O,edges:T})=>{e(IN(O?O.map(U=>U.id):[])),e(PN(T?T.map(U=>U.id):[]))},[e]),j=i.useCallback((O,T)=>{e(EN(T))},[e]),_=i.useCallback(()=>{e(m3())},[e]),I=i.useCallback(O=>{pS.set(O),O.fitView()},[]),E=i.useCallback(O=>{var U,G;const T=(U=l.current)==null?void 0:U.getBoundingClientRect();if(T){const q=(G=pS.get())==null?void 0:G.project({x:O.clientX-T.left,y:O.clientY-T.top});c.current=q}},[]),M=i.useRef(),D=i.useCallback((O,T,U)=>{M.current=O,e(MN(T.id)),e(ON())},[e]),R=i.useCallback((O,T)=>{e(fS(T))},[e]),N=i.useCallback((O,T,U)=>{var G,q;!("touches"in O)&&((G=M.current)==null?void 0:G.clientX)===O.clientX&&((q=M.current)==null?void 0:q.clientY)===O.clientY&&e(DN(T)),M.current=void 0},[e]);return tt(["Ctrl+c","Meta+c"],O=>{O.preventDefault(),e(RN())}),tt(["Ctrl+a","Meta+a"],O=>{O.preventDefault(),e(AN())}),tt(["Ctrl+v","Meta+v"],O=>{O.preventDefault(),e(TN({cursorPosition:c.current}))}),a.jsx(NN,{id:"workflow-editor",ref:l,defaultViewport:r,nodeTypes:Xge,edgeTypes:qge,nodes:t,edges:n,onInit:I,onMouseMove:E,onNodesChange:m,onEdgesChange:h,onEdgesDelete:x,onEdgeUpdate:R,onEdgeUpdateStart:D,onEdgeUpdateEnd:N,onNodesDelete:w,onConnectStart:g,onConnect:b,onConnectEnd:y,onMoveEnd:j,connectionLineComponent:Fhe,onSelectionChange:S,isValidConnection:d,minZoom:.1,snapToGrid:o,snapGrid:[25,25],connectionRadius:30,proOptions:Qge,style:{borderRadius:f},onPaneClick:_,deleteKeyCode:Kge,selectionMode:s,children:a.jsx($L,{})})};function Jge(){const e=te(),t=H(o=>o.nodes.nodeOpacity),{t:n}=W(),r=i.useCallback(o=>{e($N(o))},[e]);return a.jsx($,{alignItems:"center",children:a.jsxs(Sy,{"aria-label":n("nodes.nodeOpacity"),value:t,min:.5,max:1,step:.01,onChange:r,orientation:"vertical",defaultValue:30,h:"calc(100% - 0.5rem)",children:[a.jsx(jy,{children:a.jsx(_y,{})}),a.jsx(ky,{})]})})}const e0e=()=>{const{t:e}=W(),{zoomIn:t,zoomOut:n,fitView:r}=zx(),o=te(),s=H(m=>m.nodes.shouldShowMinimapPanel),l=i.useCallback(()=>{t()},[t]),c=i.useCallback(()=>{n()},[n]),d=i.useCallback(()=>{r()},[r]),f=i.useCallback(()=>{o(LN(!s))},[s,o]);return a.jsxs($t,{isAttached:!0,orientation:"vertical",children:[a.jsx(Fe,{tooltip:e("nodes.zoomInNodes"),"aria-label":e("nodes.zoomInNodes"),onClick:l,icon:a.jsx(uae,{})}),a.jsx(Fe,{tooltip:e("nodes.zoomOutNodes"),"aria-label":e("nodes.zoomOutNodes"),onClick:c,icon:a.jsx(cae,{})}),a.jsx(Fe,{tooltip:e("nodes.fitViewportNodes"),"aria-label":e("nodes.fitViewportNodes"),onClick:d,icon:a.jsx(zM,{})}),a.jsx(Fe,{tooltip:e(s?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),"aria-label":e(s?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),isChecked:s,onClick:f,icon:a.jsx(Lte,{})})]})},t0e=i.memo(e0e),n0e=()=>a.jsxs($,{sx:{gap:2,position:"absolute",bottom:2,insetInlineStart:2},children:[a.jsx(t0e,{}),a.jsx(Jge,{})]}),r0e=i.memo(n0e),o0e=je(OL),s0e=()=>{const e=H(r=>r.nodes.shouldShowMinimapPanel),t=ia("var(--invokeai-colors-accent-300)","var(--invokeai-colors-accent-600)"),n=ia("var(--invokeai-colors-blackAlpha-300)","var(--invokeai-colors-blackAlpha-600)");return a.jsx($,{sx:{gap:2,position:"absolute",bottom:2,insetInlineEnd:2},children:e&&a.jsx(o0e,{pannable:!0,zoomable:!0,nodeBorderRadius:15,sx:{m:"0 !important",backgroundColor:"base.200 !important",borderRadius:"base",_dark:{backgroundColor:"base.500 !important"},svg:{borderRadius:"inherit"}},nodeColor:t,maskColor:n})})},a0e=i.memo(s0e),l0e=()=>{const e=te(),{t}=W(),n=i.useCallback(()=>{e(d3())},[e]);return a.jsx(Fe,{tooltip:t("nodes.addNodeToolTip"),"aria-label":t("nodes.addNode"),icon:a.jsx(nl,{}),onClick:n,pointerEvents:"auto"})},i0e=i.memo(l0e),c0e=fe(pe,e=>{const t=e.nodes.nodes,n=e.nodes.nodeTemplates;return t.filter(Jt).some(o=>{const s=n[o.data.type];return s?$x(o,s):!1})}),u0e=()=>H(c0e),d0e=()=>{const e=te(),{t}=W(),n=u0e(),r=i.useCallback(()=>{e(FN())},[e]);return n?a.jsx(Xe,{leftIcon:a.jsx(jte,{}),onClick:r,pointerEvents:"auto",children:t("nodes.updateAllNodes")}):null},f0e=i.memo(d0e),p0e=()=>{const{t:e}=W(),t=H(o=>o.workflow.name),n=H(o=>o.workflow.isTouched),r=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs(be,{m:2,fontSize:"lg",userSelect:"none",noOfLines:1,wordBreak:"break-all",fontWeight:600,opacity:.8,children:[t||e("workflows.unnamedWorkflow"),n&&r?` (${e("common.unsaved")})`:""]})},m0e=i.memo(p0e),tD=i.createContext(null);var h0e=/d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|W{1,2}|[LlopSZN]|"[^"]*"|'[^']*'/g,g0e=/\b(?:[A-Z]{1,3}[A-Z][TC])(?:[-+]\d{4})?|((?:Australian )?(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time)\b/g,v0e=/[^-+\dA-Z]/g;function nm(e,t,n,r){if(arguments.length===1&&typeof e=="string"&&!/\d/.test(e)&&(t=e,e=void 0),e=e||e===0?e:new Date,e instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");t=String(cc[t]||t||cc.default);var o=t.slice(0,4);(o==="UTC:"||o==="GMT:")&&(t=t.slice(4),n=!0,o==="GMT:"&&(r=!0));var s=function(){return n?"getUTC":"get"},l=function(){return e[s()+"Date"]()},c=function(){return e[s()+"Day"]()},d=function(){return e[s()+"Month"]()},f=function(){return e[s()+"FullYear"]()},m=function(){return e[s()+"Hours"]()},h=function(){return e[s()+"Minutes"]()},g=function(){return e[s()+"Seconds"]()},b=function(){return e[s()+"Milliseconds"]()},y=function(){return n?0:e.getTimezoneOffset()},x=function(){return b0e(e)},w=function(){return x0e(e)},S={d:function(){return l()},dd:function(){return Yr(l())},ddd:function(){return Rr.dayNames[c()]},DDD:function(){return q_({y:f(),m:d(),d:l(),_:s(),dayName:Rr.dayNames[c()],short:!0})},dddd:function(){return Rr.dayNames[c()+7]},DDDD:function(){return q_({y:f(),m:d(),d:l(),_:s(),dayName:Rr.dayNames[c()+7]})},m:function(){return d()+1},mm:function(){return Yr(d()+1)},mmm:function(){return Rr.monthNames[d()]},mmmm:function(){return Rr.monthNames[d()+12]},yy:function(){return String(f()).slice(2)},yyyy:function(){return Yr(f(),4)},h:function(){return m()%12||12},hh:function(){return Yr(m()%12||12)},H:function(){return m()},HH:function(){return Yr(m())},M:function(){return h()},MM:function(){return Yr(h())},s:function(){return g()},ss:function(){return Yr(g())},l:function(){return Yr(b(),3)},L:function(){return Yr(Math.floor(b()/10))},t:function(){return m()<12?Rr.timeNames[0]:Rr.timeNames[1]},tt:function(){return m()<12?Rr.timeNames[2]:Rr.timeNames[3]},T:function(){return m()<12?Rr.timeNames[4]:Rr.timeNames[5]},TT:function(){return m()<12?Rr.timeNames[6]:Rr.timeNames[7]},Z:function(){return r?"GMT":n?"UTC":y0e(e)},o:function(){return(y()>0?"-":"+")+Yr(Math.floor(Math.abs(y())/60)*100+Math.abs(y())%60,4)},p:function(){return(y()>0?"-":"+")+Yr(Math.floor(Math.abs(y())/60),2)+":"+Yr(Math.floor(Math.abs(y())%60),2)},S:function(){return["th","st","nd","rd"][l()%10>3?0:(l()%100-l()%10!=10)*l()%10]},W:function(){return x()},WW:function(){return Yr(x())},N:function(){return w()}};return t.replace(h0e,function(j){return j in S?S[j]():j.slice(1,j.length-1)})}var cc={default:"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",paddedShortDate:"mm/dd/yyyy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},Rr={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],timeNames:["a","p","am","pm","A","P","AM","PM"]},Yr=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return String(t).padStart(n,"0")},q_=function(t){var n=t.y,r=t.m,o=t.d,s=t._,l=t.dayName,c=t.short,d=c===void 0?!1:c,f=new Date,m=new Date;m.setDate(m[s+"Date"]()-1);var h=new Date;h.setDate(h[s+"Date"]()+1);var g=function(){return f[s+"Date"]()},b=function(){return f[s+"Month"]()},y=function(){return f[s+"FullYear"]()},x=function(){return m[s+"Date"]()},w=function(){return m[s+"Month"]()},S=function(){return m[s+"FullYear"]()},j=function(){return h[s+"Date"]()},_=function(){return h[s+"Month"]()},I=function(){return h[s+"FullYear"]()};return y()===n&&b()===r&&g()===o?d?"Tdy":"Today":S()===n&&w()===r&&x()===o?d?"Ysd":"Yesterday":I()===n&&_()===r&&j()===o?d?"Tmw":"Tomorrow":l},b0e=function(t){var n=new Date(t.getFullYear(),t.getMonth(),t.getDate());n.setDate(n.getDate()-(n.getDay()+6)%7+3);var r=new Date(n.getFullYear(),0,4);r.setDate(r.getDate()-(r.getDay()+6)%7+3);var o=n.getTimezoneOffset()-r.getTimezoneOffset();n.setHours(n.getHours()-o);var s=(n-r)/(864e5*7);return 1+Math.floor(s)},x0e=function(t){var n=t.getDay();return n===0&&(n=7),n},y0e=function(t){return(String(t).match(g0e)||[""]).pop().replace(v0e,"").replace(/GMT\+0000/g,"UTC")};const nD=zN.injectEndpoints({endpoints:e=>({getWorkflow:e.query({query:t=>`workflows/i/${t}`,providesTags:(t,n,r)=>[{type:"Workflow",id:r}],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:o}=n;try{await o,r(nD.util.invalidateTags([{type:"WorkflowsRecent",id:Fa}]))}catch{}}}),deleteWorkflow:e.mutation({query:t=>({url:`workflows/i/${t}`,method:"DELETE"}),invalidatesTags:(t,n,r)=>[{type:"Workflow",id:Fa},{type:"Workflow",id:r},{type:"WorkflowsRecent",id:Fa}]}),createWorkflow:e.mutation({query:t=>({url:"workflows/",method:"POST",body:{workflow:t}}),invalidatesTags:[{type:"Workflow",id:Fa},{type:"WorkflowsRecent",id:Fa}]}),updateWorkflow:e.mutation({query:t=>({url:`workflows/i/${t.id}`,method:"PATCH",body:{workflow:t}}),invalidatesTags:(t,n,r)=>[{type:"WorkflowsRecent",id:Fa},{type:"Workflow",id:Fa},{type:"Workflow",id:r.id}]}),listWorkflows:e.query({query:t=>({url:"workflows/",params:t}),providesTags:[{type:"Workflow",id:Fa}]})})}),{useLazyGetWorkflowQuery:C0e,useCreateWorkflowMutation:rD,useDeleteWorkflowMutation:w0e,useUpdateWorkflowMutation:S0e,useListWorkflowsQuery:k0e}=nD,j0e=({onSuccess:e,onError:t})=>{const n=zs(),{t:r}=W(),[o,s]=w0e();return{deleteWorkflow:i.useCallback(async c=>{try{await o(c).unwrap(),n({title:r("toast.workflowDeleted")}),e&&e()}catch{n({title:r("toast.problemDeletingWorkflow"),status:"error"}),t&&t()}},[o,n,r,e,t]),deleteWorkflowResult:s}},_0e=({onSuccess:e,onError:t})=>{const n=te(),r=zs(),{t:o}=W(),[s,l]=C0e();return{getAndLoadWorkflow:i.useCallback(async d=>{try{const f=await s(d).unwrap();n(Dx({workflow:f.workflow,asCopy:!1})),e&&e()}catch{r({title:o("toast.problemRetrievingWorkflow"),status:"error"}),t&&t()}},[s,n,e,r,o,t]),getAndLoadWorkflowResult:l}},oD=()=>{const e=i.useContext(tD);if(!e)throw new Error("useWorkflowLibraryContext must be used within a WorkflowLibraryContext.Provider");return e},I0e=({workflowDTO:e})=>{const{t}=W(),n=H(h=>h.workflow.id),{onClose:r}=oD(),{deleteWorkflow:o,deleteWorkflowResult:s}=j0e({}),{getAndLoadWorkflow:l,getAndLoadWorkflowResult:c}=_0e({onSuccess:r}),d=i.useCallback(()=>{o(e.workflow_id)},[o,e.workflow_id]),f=i.useCallback(()=>{l(e.workflow_id)},[l,e.workflow_id]),m=i.useMemo(()=>n===e.workflow_id,[n,e.workflow_id]);return a.jsx($,{w:"full",children:a.jsxs($,{w:"full",alignItems:"center",gap:2,h:12,children:[a.jsxs($,{flexDir:"column",flexGrow:1,h:"full",children:[a.jsxs($,{alignItems:"center",w:"full",h:"50%",children:[a.jsx(or,{size:"sm",variant:m?"accent":void 0,children:e.name||t("workflows.unnamedWorkflow")}),a.jsx(Wr,{}),e.category==="user"&&a.jsxs(be,{fontSize:"sm",variant:"subtext",children:[t("common.updated"),":"," ",nm(e.updated_at,cc.shortDate)," ",nm(e.updated_at,cc.shortTime)]})]}),a.jsxs($,{alignItems:"center",w:"full",h:"50%",children:[e.description?a.jsx(be,{fontSize:"sm",noOfLines:1,children:e.description}):a.jsx(be,{fontSize:"sm",variant:"subtext",fontStyle:"italic",noOfLines:1,children:t("workflows.noDescription")}),a.jsx(Wr,{}),e.category==="user"&&a.jsxs(be,{fontSize:"sm",variant:"subtext",children:[t("common.created"),":"," ",nm(e.created_at,cc.shortDate)," ",nm(e.created_at,cc.shortTime)]})]})]}),a.jsx(Xe,{isDisabled:m,onClick:f,isLoading:c.isLoading,"aria-label":t("workflows.openWorkflow"),children:t("common.load")}),e.category==="user"&&a.jsx(Xe,{colorScheme:"error",isDisabled:m,onClick:d,isLoading:s.isLoading,"aria-label":t("workflows.deleteWorkflow"),children:t("common.delete")})]})},e.workflow_id)},P0e=i.memo(I0e),Nl=7,E0e=({page:e,setPage:t,data:n})=>{const{t:r}=W(),o=i.useCallback(()=>{t(c=>Math.max(c-1,0))},[t]),s=i.useCallback(()=>{t(c=>Math.min(c+1,n.pages-1))},[n.pages,t]),l=i.useMemo(()=>{const c=[];let d=n.pages>Nl?Math.max(0,e-Math.floor(Nl/2)):0;const f=n.pages>Nl?Math.min(n.pages,d+Nl):n.pages;f-dNl&&(d=f-Nl);for(let m=d;mt(m)});return c},[n.pages,e,t]);return a.jsxs($t,{children:[a.jsx(Fe,{variant:"ghost",onClick:o,isDisabled:e===0,"aria-label":r("common.prevPage"),icon:a.jsx(gte,{})}),l.map(c=>a.jsx(Xe,{w:10,isDisabled:n.pages===1,onClick:c.page===e?void 0:c.onClick,variant:c.page===e?"invokeAI":"ghost",transitionDuration:"0s",children:c.page+1},c.page)),a.jsx(Fe,{variant:"ghost",onClick:s,isDisabled:e===n.pages-1,"aria-label":r("common.nextPage"),icon:a.jsx(vte,{})})]})},M0e=i.memo(E0e),X_=10,O0e=[{value:"opened_at",label:"Opened"},{value:"created_at",label:"Created"},{value:"updated_at",label:"Updated"},{value:"name",label:"Name"}],D0e=[{value:"ASC",label:"Ascending"},{value:"DESC",label:"Descending"}],R0e=()=>{const{t:e}=W(),[t,n]=i.useState("user"),[r,o]=i.useState(0),[s,l]=i.useState(""),[c,d]=i.useState("opened_at"),[f,m]=i.useState("ASC"),[h]=kc(s,500),g=i.useMemo(()=>t==="user"?{page:r,per_page:X_,order_by:c,direction:f,category:t,query:h}:{page:r,per_page:X_,order_by:"name",direction:"ASC",category:t,query:h},[t,h,f,c,r]),{data:b,isLoading:y,isError:x,isFetching:w}=k0e(g),S=i.useCallback(R=>{!R||R===c||(d(R),o(0))},[c]),j=i.useCallback(R=>{!R||R===f||(m(R),o(0))},[f]),_=i.useCallback(()=>{l(""),o(0)},[]),I=i.useCallback(R=>{R.key==="Escape"&&(_(),R.preventDefault(),o(0))},[_]),E=i.useCallback(R=>{l(R.target.value),o(0)},[]),M=i.useCallback(()=>{n("user"),o(0)},[]),D=i.useCallback(()=>{n("default"),o(0)},[]);return a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:4,alignItems:"center",h:10,flexShrink:0,flexGrow:0,children:[a.jsxs($t,{children:[a.jsx(Xe,{variant:t==="user"?void 0:"ghost",onClick:M,isChecked:t==="user",children:e("workflows.userWorkflows")}),a.jsx(Xe,{variant:t==="default"?void 0:"ghost",onClick:D,isChecked:t==="default",children:e("workflows.defaultWorkflows")})]}),a.jsx(Wr,{}),t==="user"&&a.jsxs(a.Fragment,{children:[a.jsx(yn,{label:e("common.orderBy"),value:c,data:O0e,onChange:S,formControlProps:{w:48,display:"flex",alignItems:"center",gap:2},disabled:w}),a.jsx(yn,{label:e("common.direction"),value:f,data:D0e,onChange:j,formControlProps:{w:48,display:"flex",alignItems:"center",gap:2},disabled:w})]}),a.jsxs(cy,{w:"20rem",children:[a.jsx(Qc,{placeholder:e("workflows.searchWorkflows"),value:s,onKeyDown:I,onChange:E,"data-testid":"workflow-search-input"}),s.trim().length&&a.jsx(lg,{children:a.jsx(rs,{onClick:_,size:"xs",variant:"ghost","aria-label":e("workflows.clearWorkflowSearchFilter"),opacity:.5,icon:a.jsx(N8,{boxSize:2})})})]})]}),a.jsx(On,{}),y?a.jsx(U8,{label:e("workflows.loading")}):!b||x?a.jsx(Tn,{label:e("workflows.problemLoading")}):b.items.length?a.jsx(Sl,{children:a.jsx($,{w:"full",h:"full",gap:2,px:1,flexDir:"column",children:b.items.map(R=>a.jsx(P0e,{workflowDTO:R},R.workflow_id))})}):a.jsx(Tn,{label:e("workflows.noUserWorkflows")}),a.jsx(On,{}),b&&a.jsx($,{w:"full",justifyContent:"space-around",children:a.jsx(M0e,{data:b,page:r,setPage:o})})]})},A0e=i.memo(R0e),T0e=e=>a.jsx($,{w:"full",h:"full",flexDir:"column",layerStyle:"second",py:2,px:4,gap:2,borderRadius:"base",children:e.children}),N0e=i.memo(T0e),$0e=()=>a.jsx(N0e,{children:a.jsx(A0e,{})}),L0e=i.memo($0e),F0e=()=>{const{t:e}=W(),{isOpen:t,onClose:n}=oD();return a.jsxs(ni,{isOpen:t,onClose:n,isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{w:"80%",h:"80%",minW:"unset",minH:"unset",maxW:"unset",maxH:"unset",children:[a.jsx(Po,{children:e("workflows.workflowLibrary")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsx(L0e,{})}),a.jsx(ls,{})]})]})},z0e=i.memo(F0e),B0e=()=>{const{t:e}=W(),t=sr();return a.jsxs(tD.Provider,{value:t,children:[a.jsx(Xe,{leftIcon:a.jsx(Dte,{}),onClick:t.onOpen,pointerEvents:"auto",children:e("workflows.workflowLibrary")}),a.jsx(z0e,{})]})},H0e=i.memo(B0e),W0e=()=>{const e=s0();return i.useCallback(()=>{const n=new Blob([JSON.stringify(e,null,2)]),r=document.createElement("a");r.href=URL.createObjectURL(n),r.download=`${e.name||"My Workflow"}.json`,document.body.appendChild(r),r.click(),r.remove()},[e])},V0e=()=>{const{t:e}=W(),t=W0e();return a.jsx(At,{as:"button",icon:a.jsx(ou,{}),onClick:t,children:e("workflows.downloadWorkflow")})},U0e=i.memo(V0e),G0e=()=>{const{t:e}=W(),t=te(),{isOpen:n,onOpen:r,onClose:o}=sr(),s=i.useRef(null),l=H(f=>f.workflow.isTouched),c=i.useCallback(()=>{t(BN()),t(lt(rn({title:e("workflows.newWorkflowCreated"),status:"success"}))),o()},[t,o,e]),d=i.useCallback(()=>{if(!l){c();return}r()},[c,l,r]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"button",icon:a.jsx(e0,{}),onClick:d,children:e("nodes.newWorkflow")}),a.jsxs(Zc,{isOpen:n,onClose:o,leastDestructiveRef:s,isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:e("nodes.newWorkflow")}),a.jsx(Mo,{py:4,children:a.jsxs($,{flexDir:"column",gap:2,children:[a.jsx(be,{children:e("nodes.newWorkflowDesc")}),a.jsx(be,{variant:"subtext",children:e("nodes.newWorkflowDesc2")})]})}),a.jsxs(ls,{children:[a.jsx(ol,{ref:s,onClick:o,children:e("common.cancel")}),a.jsx(ol,{colorScheme:"error",ml:3,onClick:c,children:e("common.accept")})]})]})]})]})},K0e=i.memo(G0e),q0e=()=>{const{t:e}=W(),t=te(),n=s0(),[r,o]=rD(),s=tg(),l=i.useRef();return{saveWorkflowAs:i.useCallback(async({name:d,onSuccess:f,onError:m})=>{l.current=s({title:e("workflows.savingWorkflow"),status:"loading",duration:null,isClosable:!1});try{n.id=void 0,n.name=d;const h=await r(n).unwrap();t(g3(h.workflow.id)),t(XI(h.workflow.name)),t(v3()),f&&f(),s.update(l.current,{title:e("workflows.workflowSaved"),status:"success",duration:1e3,isClosable:!0})}catch{m&&m(),s.update(l.current,{title:e("workflows.problemSavingWorkflow"),status:"error",duration:1e3,isClosable:!0})}},[s,n,r,t,e]),isLoading:o.isLoading,isError:o.isError}},Q_=e=>`${e.trim()} (copy)`,X0e=()=>{const e=H(g=>g.workflow.name),{t}=W(),{saveWorkflowAs:n}=q0e(),[r,o]=i.useState(Q_(e)),{isOpen:s,onOpen:l,onClose:c}=sr(),d=i.useRef(null),f=i.useCallback(()=>{o(Q_(e)),l()},[e,l]),m=i.useCallback(async()=>{n({name:r,onSuccess:c,onError:c})},[r,c,n]),h=i.useCallback(g=>{o(g.target.value)},[]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"button",icon:a.jsx(xte,{}),onClick:f,children:t("workflows.saveWorkflowAs")}),a.jsx(Zc,{isOpen:s,onClose:c,leastDestructiveRef:d,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:t("workflows.saveWorkflowAs")}),a.jsx(Mo,{children:a.jsxs(Gt,{children:[a.jsx(ln,{children:t("workflows.workflowName")}),a.jsx(Qc,{ref:d,value:r,onChange:h,placeholder:t("workflows.workflowName")})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{onClick:c,children:t("common.cancel")}),a.jsx(Xe,{colorScheme:"accent",onClick:m,ml:3,children:t("common.saveAs")})]})]})})})]})},Q0e=i.memo(X0e),Y0e=e=>!!e.id,Z0e=()=>{const{t:e}=W(),t=te(),n=s0(),[r,o]=S0e(),[s,l]=rD(),c=tg(),d=i.useRef();return{saveWorkflow:i.useCallback(async()=>{d.current=c({title:e("workflows.savingWorkflow"),status:"loading",duration:null,isClosable:!1});try{if(Y0e(n))await r(n).unwrap();else{const m=await s(n).unwrap();t(g3(m.workflow.id))}t(v3()),c.update(d.current,{title:e("workflows.workflowSaved"),status:"success",duration:1e3,isClosable:!0})}catch{c.update(d.current,{title:e("workflows.problemSavingWorkflow"),status:"error",duration:1e3,isClosable:!0})}},[n,r,t,c,e,s]),isLoading:o.isLoading||l.isLoading,isError:o.isError||l.isError}},J0e=()=>{const{t:e}=W(),{saveWorkflow:t}=Z0e();return a.jsx(At,{as:"button",icon:a.jsx(gf,{}),onClick:t,children:e("workflows.saveWorkflow")})},eve=i.memo(J0e),tve=()=>{const{t:e}=W(),t=te(),n=i.useCallback(()=>{t(HN())},[t]);return a.jsx(Xe,{leftIcon:a.jsx(qte,{}),tooltip:e("nodes.reloadNodeTemplates"),"aria-label":e("nodes.reloadNodeTemplates"),onClick:n,children:e("nodes.reloadNodeTemplates")})},nve=i.memo(tve),Uu={fontWeight:600},rve=fe(pe,({nodes:e})=>{const{shouldAnimateEdges:t,shouldValidateGraph:n,shouldSnapToGrid:r,shouldColorEdges:o,selectionMode:s}=e;return{shouldAnimateEdges:t,shouldValidateGraph:n,shouldSnapToGrid:r,shouldColorEdges:o,selectionModeIsChecked:s===WN.Full}}),ove=({children:e})=>{const{isOpen:t,onOpen:n,onClose:r}=sr(),o=te(),{shouldAnimateEdges:s,shouldValidateGraph:l,shouldSnapToGrid:c,shouldColorEdges:d,selectionModeIsChecked:f}=H(rve),m=i.useCallback(w=>{o(VN(w.target.checked))},[o]),h=i.useCallback(w=>{o(UN(w.target.checked))},[o]),g=i.useCallback(w=>{o(GN(w.target.checked))},[o]),b=i.useCallback(w=>{o(KN(w.target.checked))},[o]),y=i.useCallback(w=>{o(qN(w.target.checked))},[o]),{t:x}=W();return a.jsxs(a.Fragment,{children:[e({onOpen:n}),a.jsxs(ni,{isOpen:t,onClose:r,size:"2xl",isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{children:[a.jsx(Po,{children:x("nodes.workflowSettings")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsxs($,{sx:{flexDirection:"column",gap:4,py:4},children:[a.jsx(or,{size:"sm",children:x("parameters.general")}),a.jsx(_n,{formLabelProps:Uu,onChange:h,isChecked:s,label:x("nodes.animatedEdges"),helperText:x("nodes.animatedEdgesHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:c,onChange:g,label:x("nodes.snapToGrid"),helperText:x("nodes.snapToGridHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:d,onChange:b,label:x("nodes.colorCodeEdges"),helperText:x("nodes.colorCodeEdgesHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:f,onChange:y,label:x("nodes.fullyContainNodes"),helperText:x("nodes.fullyContainNodesHelp")}),a.jsx(or,{size:"sm",pt:4,children:x("common.advanced")}),a.jsx(_n,{formLabelProps:Uu,isChecked:l,onChange:m,label:x("nodes.validateConnections"),helperText:x("nodes.validateConnectionsHelp")}),a.jsx(nve,{})]})})]})]})]})},sve=i.memo(ove),ave=()=>{const{t:e}=W();return a.jsx(sve,{children:({onOpen:t})=>a.jsx(At,{as:"button",icon:a.jsx(FM,{}),onClick:t,children:e("nodes.workflowSettings")})})},lve=i.memo(ave),ive=({resetRef:e})=>{const t=te(),n=H6("nodes"),{t:r}=W();return i.useCallback(s=>{var c;if(!s)return;const l=new FileReader;l.onload=async()=>{const d=l.result;try{const f=JSON.parse(String(d));t(Dx({workflow:f,asCopy:!0}))}catch{n.error(r("nodes.unableToLoadWorkflow")),t(lt(rn({title:r("nodes.unableToLoadWorkflow"),status:"error"}))),l.abort()}},l.readAsText(s),(c=e.current)==null||c.call(e)},[t,n,e,r])},cve=()=>{const{t:e}=W(),t=i.useRef(null),n=ive({resetRef:t});return a.jsx(uM,{resetRef:t,accept:"application/json",onChange:n,children:r=>a.jsx(At,{as:"button",icon:a.jsx($g,{}),...r,children:e("workflows.uploadWorkflow")})})},uve=i.memo(cve),dve=()=>{const{t:e}=W(),{isOpen:t,onOpen:n,onClose:r}=sr();Yy(r);const o=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs(of,{isOpen:t,onOpen:n,onClose:r,children:[a.jsx(sf,{as:Fe,"aria-label":e("workflows.workflowEditorMenu"),icon:a.jsx(P7,{}),pointerEvents:"auto"}),a.jsxs(al,{motionProps:Yl,pointerEvents:"auto",children:[o&&a.jsx(eve,{}),o&&a.jsx(Q0e,{}),a.jsx(U0e,{}),a.jsx(uve,{}),a.jsx(K0e,{}),a.jsx(n6,{}),a.jsx(lve,{})]})]})},fve=i.memo(dve),pve=()=>{const e=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs($,{sx:{gap:2,top:2,left:2,right:2,position:"absolute",alignItems:"center",pointerEvents:"none"},children:[a.jsx(i0e,{}),a.jsx(f0e,{}),a.jsx(Wr,{}),a.jsx(m0e,{}),a.jsx(Wr,{}),e&&a.jsx(H0e,{}),a.jsx(fve,{})]})},mve=i.memo(pve),hve=()=>{const e=H(n=>n.nodes.isReady),{t}=W();return a.jsxs($,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base",alignItems:"center",justifyContent:"center"},children:[a.jsx(hr,{children:e&&a.jsxs(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.2}},exit:{opacity:0,transition:{duration:.2}},style:{position:"relative",width:"100%",height:"100%"},children:[a.jsx(Zge,{}),a.jsx(The,{}),a.jsx(mve,{}),a.jsx(r0e,{}),a.jsx(a0e,{})]})}),a.jsx(hr,{children:!e&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.2}},exit:{opacity:0,transition:{duration:.2}},style:{position:"absolute",width:"100%",height:"100%"},children:a.jsx($,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:a.jsx(Tn,{label:t("nodes.loadingNodes"),icon:Yse})})})})]})},gve=i.memo(hve),vve=()=>a.jsx(XN,{children:a.jsx(gve,{})}),bve=i.memo(vve),xve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=QN({fixedCacheKey:"clearInvocationCache"}),l=i.useMemo(()=>!(n!=null&&n.size)||!r,[n==null?void 0:n.size,r]);return{clearInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.clearSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.clearFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},yve=()=>{const{t:e}=W(),{clearInvocationCache:t,isDisabled:n,isLoading:r}=xve();return a.jsx(Xe,{isDisabled:n,isLoading:r,onClick:t,children:e("invocationCache.clear")})},Cve=i.memo(yve),wve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=YN({fixedCacheKey:"disableInvocationCache"}),l=i.useMemo(()=>!(n!=null&&n.enabled)||!r||(n==null?void 0:n.max_size)===0,[n==null?void 0:n.enabled,n==null?void 0:n.max_size,r]);return{disableInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.disableSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.disableFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},Sve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=ZN({fixedCacheKey:"enableInvocationCache"}),l=i.useMemo(()=>(n==null?void 0:n.enabled)||!r||(n==null?void 0:n.max_size)===0,[n==null?void 0:n.enabled,n==null?void 0:n.max_size,r]);return{enableInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.enableSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.enableFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},kve=()=>{const{t:e}=W(),{data:t}=Gd(),{enableInvocationCache:n,isDisabled:r,isLoading:o}=Sve(),{disableInvocationCache:s,isDisabled:l,isLoading:c}=wve();return t!=null&&t.enabled?a.jsx(Xe,{isDisabled:l,isLoading:c,onClick:s,children:e("invocationCache.disable")}):a.jsx(Xe,{isDisabled:r,isLoading:o,onClick:n,children:e("invocationCache.enable")})},jve=i.memo(kve),_ve=({children:e,...t})=>a.jsx(N6,{alignItems:"center",justifyContent:"center",w:"full",h:"full",layerStyle:"second",borderRadius:"base",py:2,px:3,gap:6,flexWrap:"nowrap",...t,children:e}),sD=i.memo(_ve),Ive={'&[aria-disabled="true"]':{color:"base.400",_dark:{color:"base.500"}}},Pve=({label:e,value:t,isDisabled:n=!1,...r})=>a.jsxs(T6,{flexGrow:1,textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap","aria-disabled":n,sx:Ive,...r,children:[a.jsx($6,{textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap",children:e}),a.jsx(L6,{children:t})]}),Cs=i.memo(Pve),Eve=()=>{const{t:e}=W(),{data:t}=Gd(void 0);return a.jsxs(sD,{children:[a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.cacheSize"),value:(t==null?void 0:t.size)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.hits"),value:(t==null?void 0:t.hits)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.misses"),value:(t==null?void 0:t.misses)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.maxCacheSize"),value:(t==null?void 0:t.max_size)??0}),a.jsxs($t,{w:24,orientation:"vertical",size:"xs",children:[a.jsx(Cve,{}),a.jsx(jve,{})]})]})},Mve=i.memo(Eve),aD=e=>{const t=H(c=>c.system.isConnected),[n,{isLoading:r}]=Rx(),o=te(),{t:s}=W();return{cancelQueueItem:i.useCallback(async()=>{try{await n(e).unwrap(),o(lt({title:s("queue.cancelSucceeded"),status:"success"}))}catch{o(lt({title:s("queue.cancelFailed"),status:"error"}))}},[o,e,s,n]),isLoading:r,isDisabled:!t}},lD=(e,t)=>Number(((Date.parse(t)-Date.parse(e))/1e3).toFixed(2)),Y_={pending:{colorScheme:"cyan",translationKey:"queue.pending"},in_progress:{colorScheme:"yellow",translationKey:"queue.in_progress"},completed:{colorScheme:"green",translationKey:"queue.completed"},failed:{colorScheme:"red",translationKey:"queue.failed"},canceled:{colorScheme:"orange",translationKey:"queue.canceled"}},Ove=({status:e})=>{const{t}=W();return a.jsx(Sa,{colorScheme:Y_[e].colorScheme,children:t(Y_[e].translationKey)})},Dve=i.memo(Ove),Rve=e=>{const t=H(d=>d.system.isConnected),{isCanceled:n}=JN({batch_id:e},{selectFromResult:({data:d})=>d?{isCanceled:(d==null?void 0:d.in_progress)===0&&(d==null?void 0:d.pending)===0}:{isCanceled:!0}}),[r,{isLoading:o}]=e$({fixedCacheKey:"cancelByBatchIds"}),s=te(),{t:l}=W();return{cancelBatch:i.useCallback(async()=>{if(!n)try{await r({batch_ids:[e]}).unwrap(),s(lt({title:l("queue.cancelBatchSucceeded"),status:"success"}))}catch{s(lt({title:l("queue.cancelBatchFailed"),status:"error"}))}},[e,s,n,l,r]),isLoading:o,isCanceled:n,isDisabled:!t}},Ave=({queueItemDTO:e})=>{const{session_id:t,batch_id:n,item_id:r}=e,{t:o}=W(),{cancelBatch:s,isLoading:l,isCanceled:c}=Rve(n),{cancelQueueItem:d,isLoading:f}=aD(r),{data:m}=t$(r),h=i.useMemo(()=>{if(!m)return o("common.loading");if(!m.completed_at||!m.started_at)return o(`queue.${m.status}`);const g=lD(m.started_at,m.completed_at);return m.status==="completed"?`${o("queue.completedIn")} ${g}${g===1?"":"s"}`:`${g}s`},[m,o]);return a.jsxs($,{layerStyle:"third",flexDir:"column",p:2,pt:0,borderRadius:"base",gap:2,children:[a.jsxs($,{layerStyle:"second",p:2,gap:2,justifyContent:"space-between",alignItems:"center",borderRadius:"base",h:20,children:[a.jsx(rm,{label:o("queue.status"),data:h}),a.jsx(rm,{label:o("queue.item"),data:r}),a.jsx(rm,{label:o("queue.batch"),data:n}),a.jsx(rm,{label:o("queue.session"),data:t}),a.jsxs($t,{size:"xs",orientation:"vertical",children:[a.jsx(Xe,{onClick:d,isLoading:f,isDisabled:m?["canceled","completed","failed"].includes(m.status):!0,"aria-label":o("queue.cancelItem"),icon:a.jsx(Nc,{}),colorScheme:"error",children:o("queue.cancelItem")}),a.jsx(Xe,{onClick:s,isLoading:l,isDisabled:c,"aria-label":o("queue.cancelBatch"),icon:a.jsx(Nc,{}),colorScheme:"error",children:o("queue.cancelBatch")})]})]}),(m==null?void 0:m.error)&&a.jsxs($,{layerStyle:"second",p:3,gap:1,justifyContent:"space-between",alignItems:"flex-start",borderRadius:"base",flexDir:"column",children:[a.jsx(or,{size:"sm",color:"error.500",_dark:{color:"error.400"},children:o("common.error")}),a.jsx("pre",{children:m.error})]}),a.jsx($,{layerStyle:"second",h:512,w:"full",borderRadius:"base",alignItems:"center",justifyContent:"center",children:m?a.jsx(Sl,{children:a.jsx(pl,{label:"Queue Item",data:m})}):a.jsx(va,{opacity:.5})})]})},Tve=i.memo(Ave),rm=({label:e,data:t})=>a.jsxs($,{flexDir:"column",justifyContent:"flex-start",p:1,gap:1,overflow:"hidden",h:"full",w:"full",children:[a.jsx(or,{size:"md",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",children:e}),a.jsx(be,{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",children:t})]}),Ss={number:"3rem",statusBadge:"5.7rem",statusDot:2,time:"4rem",batchId:"5rem",fieldValues:"auto",actions:"auto"},Z_={bg:"base.300",_dark:{bg:"base.750"}},Nve={_hover:Z_,"&[aria-selected='true']":Z_},$ve=({index:e,item:t,context:n})=>{const{t:r}=W(),o=i.useCallback(()=>{n.toggleQueueItem(t.item_id)},[n,t.item_id]),{cancelQueueItem:s,isLoading:l}=aD(t.item_id),c=i.useCallback(h=>{h.stopPropagation(),s()},[s]),d=i.useMemo(()=>n.openQueueItems.includes(t.item_id),[n.openQueueItems,t.item_id]),f=i.useMemo(()=>!t.completed_at||!t.started_at?void 0:`${lD(t.started_at,t.completed_at)}s`,[t]),m=i.useMemo(()=>["canceled","completed","failed"].includes(t.status),[t.status]);return a.jsxs($,{flexDir:"column","aria-selected":d,fontSize:"sm",borderRadius:"base",justifyContent:"center",sx:Nve,"data-testid":"queue-item",children:[a.jsxs($,{minH:9,alignItems:"center",gap:4,p:1.5,cursor:"pointer",onClick:o,children:[a.jsx($,{w:Ss.number,justifyContent:"flex-end",alignItems:"center",flexShrink:0,children:a.jsx(be,{variant:"subtext",children:e+1})}),a.jsx($,{w:Ss.statusBadge,alignItems:"center",flexShrink:0,children:a.jsx(Dve,{status:t.status})}),a.jsx($,{w:Ss.time,alignItems:"center",flexShrink:0,children:f||"-"}),a.jsx($,{w:Ss.batchId,flexShrink:0,children:a.jsx(be,{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",alignItems:"center",children:t.batch_id})}),a.jsx($,{alignItems:"center",overflow:"hidden",flexGrow:1,children:t.field_values&&a.jsx($,{gap:2,w:"full",whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",children:t.field_values.filter(h=>h.node_path!=="metadata_accumulator").map(({node_path:h,field_name:g,value:b})=>a.jsxs(be,{as:"span",children:[a.jsxs(be,{as:"span",fontWeight:600,children:[h,".",g]}),": ",b]},`${t.item_id}.${h}.${g}.${b}`))})}),a.jsx($,{alignItems:"center",w:Ss.actions,pe:3,children:a.jsx($t,{size:"xs",variant:"ghost",children:a.jsx(Fe,{onClick:c,isDisabled:m,isLoading:l,"aria-label":r("queue.cancelItem"),icon:a.jsx(Nc,{})})})})]}),a.jsx(Xd,{in:d,transition:{enter:{duration:.1},exit:{duration:.1}},unmountOnExit:!0,children:a.jsx(Tve,{queueItemDTO:t})})]})},Lve=i.memo($ve),Fve=i.memo(_e((e,t)=>a.jsx($,{...e,ref:t,flexDirection:"column",gap:.5,children:e.children}))),zve=i.memo(Fve),Bve=()=>{const{t:e}=W();return a.jsxs($,{alignItems:"center",gap:4,p:1,pb:2,textTransform:"uppercase",fontWeight:700,fontSize:"xs",letterSpacing:1,children:[a.jsx($,{w:Ss.number,justifyContent:"flex-end",alignItems:"center",children:a.jsx(be,{variant:"subtext",children:"#"})}),a.jsx($,{ps:.5,w:Ss.statusBadge,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.status")})}),a.jsx($,{ps:.5,w:Ss.time,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.time")})}),a.jsx($,{ps:.5,w:Ss.batchId,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.batch")})}),a.jsx($,{ps:.5,w:Ss.fieldValues,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.batchFieldValues")})})]})},Hve=i.memo(Bve),Wve={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},Vve=fe(pe,({queue:e})=>{const{listCursor:t,listPriority:n}=e;return{listCursor:t,listPriority:n}}),Uve=(e,t)=>t.item_id,Gve={List:zve},Kve=(e,t,n)=>a.jsx(Lve,{index:e,item:t,context:n}),qve=()=>{const{listCursor:e,listPriority:t}=H(Vve),n=te(),r=i.useRef(null),[o,s]=i.useState(null),[l,c]=c2(Wve),{t:d}=W();i.useEffect(()=>{const{current:S}=r;return o&&S&&l({target:S,elements:{viewport:o}}),()=>{var j;return(j=c())==null?void 0:j.destroy()}},[o,l,c]);const{data:f,isLoading:m}=n$({cursor:e,priority:t}),h=i.useMemo(()=>f?r$.getSelectors().selectAll(f):[],[f]),g=i.useCallback(()=>{if(!(f!=null&&f.has_more))return;const S=h[h.length-1];S&&(n(Ax(S.item_id)),n(Tx(S.priority)))},[n,f==null?void 0:f.has_more,h]),[b,y]=i.useState([]),x=i.useCallback(S=>{y(j=>j.includes(S)?j.filter(_=>_!==S):[...j,S])},[]),w=i.useMemo(()=>({openQueueItems:b,toggleQueueItem:x}),[b,x]);return m?a.jsx(U8,{}):h.length?a.jsxs($,{w:"full",h:"full",flexDir:"column",children:[a.jsx(Hve,{}),a.jsx($,{ref:r,w:"full",h:"full",alignItems:"center",justifyContent:"center",children:a.jsx(Ose,{data:h,endReached:g,scrollerRef:s,itemContent:Kve,computeItemKey:Uve,components:Gve,context:w})})]}):a.jsx($,{w:"full",h:"full",alignItems:"center",justifyContent:"center",children:a.jsx(or,{color:"base.400",_dark:{color:"base.500"},children:d("queue.queueEmpty")})})},Xve=i.memo(qve),Qve=()=>{const{data:e}=Ls(),{t}=W();return a.jsxs(sD,{"data-testid":"queue-status",children:[a.jsx(Cs,{label:t("queue.in_progress"),value:(e==null?void 0:e.queue.in_progress)??0}),a.jsx(Cs,{label:t("queue.pending"),value:(e==null?void 0:e.queue.pending)??0}),a.jsx(Cs,{label:t("queue.completed"),value:(e==null?void 0:e.queue.completed)??0}),a.jsx(Cs,{label:t("queue.failed"),value:(e==null?void 0:e.queue.failed)??0}),a.jsx(Cs,{label:t("queue.canceled"),value:(e==null?void 0:e.queue.canceled)??0}),a.jsx(Cs,{label:t("queue.total"),value:(e==null?void 0:e.queue.total)??0})]})},Yve=i.memo(Qve);function Zve(e){return De({tag:"svg",attr:{fill:"currentColor",viewBox:"0 0 16 16"},child:[{tag:"path",attr:{d:"M7.657 6.247c.11-.33.576-.33.686 0l.645 1.937a2.89 2.89 0 0 0 1.829 1.828l1.936.645c.33.11.33.576 0 .686l-1.937.645a2.89 2.89 0 0 0-1.828 1.829l-.645 1.936a.361.361 0 0 1-.686 0l-.645-1.937a2.89 2.89 0 0 0-1.828-1.828l-1.937-.645a.361.361 0 0 1 0-.686l1.937-.645a2.89 2.89 0 0 0 1.828-1.828l.645-1.937zM3.794 1.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387A1.734 1.734 0 0 0 4.593 5.69l-.387 1.162a.217.217 0 0 1-.412 0L3.407 5.69A1.734 1.734 0 0 0 2.31 4.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387A1.734 1.734 0 0 0 3.407 2.31l.387-1.162zM10.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732L9.1 2.137a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L10.863.1z"}}]})(e)}const Jve=()=>{const e=te(),{t}=W(),n=H(d=>d.system.isConnected),[r,{isLoading:o}]=r3({fixedCacheKey:"pruneQueue"}),{finishedCount:s}=Ls(void 0,{selectFromResult:({data:d})=>d?{finishedCount:d.queue.completed+d.queue.canceled+d.queue.failed}:{finishedCount:0}}),l=i.useCallback(async()=>{if(s)try{const d=await r().unwrap();e(lt({title:t("queue.pruneSucceeded",{item_count:d.deleted}),status:"success"})),e(Ax(void 0)),e(Tx(void 0))}catch{e(lt({title:t("queue.pruneFailed"),status:"error"}))}},[s,r,e,t]),c=i.useMemo(()=>!n||!s,[s,n]);return{pruneQueue:l,isLoading:o,finishedCount:s,isDisabled:c}},e1e=({asIconButton:e})=>{const{t}=W(),{pruneQueue:n,isLoading:r,finishedCount:o,isDisabled:s}=Jve();return a.jsx(gi,{isDisabled:s,isLoading:r,asIconButton:e,label:t("queue.prune"),tooltip:t("queue.pruneTooltip",{item_count:o}),icon:a.jsx(Zve,{}),onClick:n,colorScheme:"blue"})},t1e=i.memo(e1e),n1e=()=>{const e=Mt("pauseQueue").isFeatureEnabled,t=Mt("resumeQueue").isFeatureEnabled;return a.jsxs($,{layerStyle:"second",borderRadius:"base",p:2,gap:2,children:[e||t?a.jsxs($t,{w:28,orientation:"vertical",isAttached:!0,size:"sm",children:[t?a.jsx(F7,{}):a.jsx(a.Fragment,{}),e?a.jsx(R7,{}):a.jsx(a.Fragment,{})]}):a.jsx(a.Fragment,{}),a.jsxs($t,{w:28,orientation:"vertical",isAttached:!0,size:"sm",children:[a.jsx(t1e,{}),a.jsx(P2,{})]})]})},r1e=i.memo(n1e),o1e=()=>{const e=Mt("invocationCache").isFeatureEnabled;return a.jsxs($,{layerStyle:"first",borderRadius:"base",w:"full",h:"full",p:2,flexDir:"column",gap:2,children:[a.jsxs($,{gap:2,w:"full",children:[a.jsx(r1e,{}),a.jsx(Yve,{}),e&&a.jsx(Mve,{})]}),a.jsx(Ie,{layerStyle:"second",p:2,borderRadius:"base",w:"full",h:"full",children:a.jsx(Xve,{})})]})},s1e=i.memo(o1e),a1e=()=>a.jsx(s1e,{}),l1e=i.memo(a1e),i1e=()=>a.jsx(zO,{}),c1e=i.memo(i1e),u1e=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,isMovingBoundingBox:r}=e;return{tool:n,isStaging:t,isMovingBoundingBox:r}}),d1e=()=>{const e=te(),{tool:t,isStaging:n,isMovingBoundingBox:r}=H(u1e);return{handleDragStart:i.useCallback(()=>{(t==="move"||n)&&!r&&e(Em(!0))},[e,r,n,t]),handleDragMove:i.useCallback(o=>{if(!((t==="move"||n)&&!r))return;const s={x:o.target.x(),y:o.target.y()};e(b3(s))},[e,r,n,t]),handleDragEnd:i.useCallback(()=>{(t==="move"||n)&&!r&&e(Em(!1))},[e,r,n,t])}},f1e=fe([pe,tr,Lo],({canvas:e},t,n)=>{const{cursorPosition:r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:l,isMaskEnabled:c,shouldSnapToGrid:d}=e;return{activeTabName:t,isCursorOnCanvas:!!r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:l,isStaging:n,isMaskEnabled:c,shouldSnapToGrid:d}}),p1e=()=>{const e=te(),{activeTabName:t,shouldShowBoundingBox:n,tool:r,isStaging:o,isMaskEnabled:s,shouldSnapToGrid:l}=H(f1e),c=i.useRef(null),d=x3(),f=()=>e(y3());tt(["shift+c"],()=>{f()},{enabled:()=>!o,preventDefault:!0},[]);const m=()=>e(Wx(!s));tt(["h"],()=>{m()},{enabled:()=>!o,preventDefault:!0},[s]),tt(["n"],()=>{e(Mm(!l))},{enabled:!0,preventDefault:!0},[l]),tt("esc",()=>{e(o$())},{enabled:()=>!0,preventDefault:!0}),tt("shift+h",()=>{e(s$(!n))},{enabled:()=>!o,preventDefault:!0},[t,n]),tt(["space"],h=>{h.repeat||(d==null||d.container().focus(),r!=="move"&&(c.current=r,e(fc("move"))),r==="move"&&c.current&&c.current!=="move"&&(e(fc(c.current)),c.current="move"))},{keyup:!0,keydown:!0,preventDefault:!0},[r,c])},q2=e=>{const t=e.getPointerPosition(),n=e.getAbsoluteTransform().copy();if(!t||!n)return;const r=n.invert().point(t);return{x:r.x,y:r.y}},iD=()=>{const e=te(),t=G1(),n=x3();return{updateColorUnderCursor:()=>{if(!n||!t)return;const r=n.getPointerPosition();if(!r)return;const o=a$.pixelRatio,[s,l,c,d]=t.getContext().getImageData(r.x*o,r.y*o,1,1).data;s===void 0||l===void 0||c===void 0||d===void 0||e(l$({r:s,g:l,b:c,a:d}))},commitColorUnderCursor:()=>{e(i$())}}},m1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r}=t;return{tool:r,activeTabName:e,isStaging:n}}),h1e=e=>{const t=te(),{tool:n,isStaging:r}=H(m1e),{commitColorUnderCursor:o}=iD();return i.useCallback(s=>{if(!e.current)return;if(e.current.container().focus(),n==="move"||r){t(Em(!0));return}if(n==="colorPicker"){o();return}const l=q2(e.current);l&&(s.evt.preventDefault(),t(C3(!0)),t(c$([l.x,l.y])))},[e,n,r,t,o])},g1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}}),v1e=(e,t,n)=>{const r=te(),{isDrawing:o,tool:s,isStaging:l}=H(g1e),{updateColorUnderCursor:c}=iD();return i.useCallback(()=>{if(!e.current)return;const d=q2(e.current);if(d){if(r(u$(d)),n.current=d,s==="colorPicker"){c();return}!o||s==="move"||l||(t.current=!0,r(w3([d.x,d.y])))}},[t,r,o,l,n,e,s,c])},b1e=()=>{const e=te();return i.useCallback(()=>{e(d$())},[e])},x1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}}),y1e=(e,t)=>{const n=te(),{tool:r,isDrawing:o,isStaging:s}=H(x1e);return i.useCallback(()=>{if(r==="move"||s){n(Em(!1));return}if(!t.current&&o&&e.current){const l=q2(e.current);if(!l)return;n(w3([l.x,l.y]))}else t.current=!1;n(C3(!1))},[t,n,o,s,e,r])},C1e=fe([pe],({canvas:e})=>{const{isMoveStageKeyHeld:t,stageScale:n}=e;return{isMoveStageKeyHeld:t,stageScale:n}}),w1e=e=>{const t=te(),{isMoveStageKeyHeld:n,stageScale:r}=H(C1e);return i.useCallback(o=>{if(!e.current||n)return;o.evt.preventDefault();const s=e.current.getPointerPosition();if(!s)return;const l={x:(s.x-e.current.x())/r,y:(s.y-e.current.y())/r};let c=o.evt.deltaY;o.evt.ctrlKey&&(c=-c);const d=Zl(r*m$**c,p$,f$),f={x:s.x-l.x*d,y:s.y-l.y*d};t(h$(d)),t(b3(f))},[e,n,r,t])};var dx={exports:{}};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Konva=void 0;var n=mS;Object.defineProperty(t,"Konva",{enumerable:!0,get:function(){return n.Konva}});const r=mS;e.exports=r.Konva})(dx,dx.exports);var S1e=dx.exports;const Fd=Bd(S1e);var cD={exports:{}};/** - * @license React - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var k1e=function(t){var n={},r=i,o=sm,s=Object.assign;function l(u){for(var p="https://reactjs.org/docs/error-decoder.html?invariant="+u,v=1;vie||k[F]!==P[ie]){var ge=` -`+k[F].replace(" at new "," at ");return u.displayName&&ge.includes("")&&(ge=ge.replace("",u.displayName)),ge}while(1<=F&&0<=ie);break}}}finally{hu=!1,Error.prepareStackTrace=v}return(u=u?u.displayName||u.name:"")?_l(u):""}var v0=Object.prototype.hasOwnProperty,Ma=[],rt=-1;function Dt(u){return{current:u}}function _t(u){0>rt||(u.current=Ma[rt],Ma[rt]=null,rt--)}function Rt(u,p){rt++,Ma[rt]=u.current,u.current=p}var lr={},an=Dt(lr),$n=Dt(!1),br=lr;function wi(u,p){var v=u.type.contextTypes;if(!v)return lr;var C=u.stateNode;if(C&&C.__reactInternalMemoizedUnmaskedChildContext===p)return C.__reactInternalMemoizedMaskedChildContext;var k={},P;for(P in v)k[P]=p[P];return C&&(u=u.stateNode,u.__reactInternalMemoizedUnmaskedChildContext=p,u.__reactInternalMemoizedMaskedChildContext=k),k}function Pr(u){return u=u.childContextTypes,u!=null}function If(){_t($n),_t(an)}function Y2(u,p,v){if(an.current!==lr)throw Error(l(168));Rt(an,p),Rt($n,v)}function Z2(u,p,v){var C=u.stateNode;if(p=p.childContextTypes,typeof C.getChildContext!="function")return v;C=C.getChildContext();for(var k in C)if(!(k in p))throw Error(l(108,R(u)||"Unknown",k));return s({},v,C)}function Pf(u){return u=(u=u.stateNode)&&u.__reactInternalMemoizedMergedChildContext||lr,br=an.current,Rt(an,u),Rt($n,$n.current),!0}function J2(u,p,v){var C=u.stateNode;if(!C)throw Error(l(169));v?(u=Z2(u,p,br),C.__reactInternalMemoizedMergedChildContext=u,_t($n),_t(an),Rt(an,u)):_t($n),Rt($n,v)}var Bo=Math.clz32?Math.clz32:SD,CD=Math.log,wD=Math.LN2;function SD(u){return u>>>=0,u===0?32:31-(CD(u)/wD|0)|0}var Ef=64,Mf=4194304;function vu(u){switch(u&-u){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return u&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return u&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return u}}function Of(u,p){var v=u.pendingLanes;if(v===0)return 0;var C=0,k=u.suspendedLanes,P=u.pingedLanes,F=v&268435455;if(F!==0){var ie=F&~k;ie!==0?C=vu(ie):(P&=F,P!==0&&(C=vu(P)))}else F=v&~k,F!==0?C=vu(F):P!==0&&(C=vu(P));if(C===0)return 0;if(p!==0&&p!==C&&!(p&k)&&(k=C&-C,P=p&-p,k>=P||k===16&&(P&4194240)!==0))return p;if(C&4&&(C|=v&16),p=u.entangledLanes,p!==0)for(u=u.entanglements,p&=C;0v;v++)p.push(u);return p}function bu(u,p,v){u.pendingLanes|=p,p!==536870912&&(u.suspendedLanes=0,u.pingedLanes=0),u=u.eventTimes,p=31-Bo(p),u[p]=v}function _D(u,p){var v=u.pendingLanes&~p;u.pendingLanes=p,u.suspendedLanes=0,u.pingedLanes=0,u.expiredLanes&=p,u.mutableReadLanes&=p,u.entangledLanes&=p,p=u.entanglements;var C=u.eventTimes;for(u=u.expirationTimes;0>=F,k-=F,Vs=1<<32-Bo(p)+k|v<Ft?(Jn=yt,yt=null):Jn=yt.sibling;var zt=He(he,yt,xe[Ft],We);if(zt===null){yt===null&&(yt=Jn);break}u&&yt&&zt.alternate===null&&p(he,yt),ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt,yt=Jn}if(Ft===xe.length)return v(he,yt),mn&&Pl(he,Ft),ct;if(yt===null){for(;FtFt?(Jn=yt,yt=null):Jn=yt.sibling;var La=He(he,yt,zt.value,We);if(La===null){yt===null&&(yt=Jn);break}u&&yt&&La.alternate===null&&p(he,yt),ue=P(La,ue,Ft),Ct===null?ct=La:Ct.sibling=La,Ct=La,yt=Jn}if(zt.done)return v(he,yt),mn&&Pl(he,Ft),ct;if(yt===null){for(;!zt.done;Ft++,zt=xe.next())zt=xt(he,zt.value,We),zt!==null&&(ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt);return mn&&Pl(he,Ft),ct}for(yt=C(he,yt);!zt.done;Ft++,zt=xe.next())zt=dn(yt,he,Ft,zt.value,We),zt!==null&&(u&&zt.alternate!==null&&yt.delete(zt.key===null?Ft:zt.key),ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt);return u&&yt.forEach(function(dR){return p(he,dR)}),mn&&Pl(he,Ft),ct}function Xs(he,ue,xe,We){if(typeof xe=="object"&&xe!==null&&xe.type===m&&xe.key===null&&(xe=xe.props.children),typeof xe=="object"&&xe!==null){switch(xe.$$typeof){case d:e:{for(var ct=xe.key,Ct=ue;Ct!==null;){if(Ct.key===ct){if(ct=xe.type,ct===m){if(Ct.tag===7){v(he,Ct.sibling),ue=k(Ct,xe.props.children),ue.return=he,he=ue;break e}}else if(Ct.elementType===ct||typeof ct=="object"&&ct!==null&&ct.$$typeof===_&&bC(ct)===Ct.type){v(he,Ct.sibling),ue=k(Ct,xe.props),ue.ref=yu(he,Ct,xe),ue.return=he,he=ue;break e}v(he,Ct);break}else p(he,Ct);Ct=Ct.sibling}xe.type===m?(ue=Tl(xe.props.children,he.mode,We,xe.key),ue.return=he,he=ue):(We=hp(xe.type,xe.key,xe.props,null,he.mode,We),We.ref=yu(he,ue,xe),We.return=he,he=We)}return F(he);case f:e:{for(Ct=xe.key;ue!==null;){if(ue.key===Ct)if(ue.tag===4&&ue.stateNode.containerInfo===xe.containerInfo&&ue.stateNode.implementation===xe.implementation){v(he,ue.sibling),ue=k(ue,xe.children||[]),ue.return=he,he=ue;break e}else{v(he,ue);break}else p(he,ue);ue=ue.sibling}ue=jv(xe,he.mode,We),ue.return=he,he=ue}return F(he);case _:return Ct=xe._init,Xs(he,ue,Ct(xe._payload),We)}if(Y(xe))return tn(he,ue,xe,We);if(M(xe))return Dr(he,ue,xe,We);Wf(he,xe)}return typeof xe=="string"&&xe!==""||typeof xe=="number"?(xe=""+xe,ue!==null&&ue.tag===6?(v(he,ue.sibling),ue=k(ue,xe),ue.return=he,he=ue):(v(he,ue),ue=kv(xe,he.mode,We),ue.return=he,he=ue),F(he)):v(he,ue)}return Xs}var Pi=xC(!0),yC=xC(!1),Cu={},po=Dt(Cu),wu=Dt(Cu),Ei=Dt(Cu);function hs(u){if(u===Cu)throw Error(l(174));return u}function L0(u,p){Rt(Ei,p),Rt(wu,u),Rt(po,Cu),u=V(p),_t(po),Rt(po,u)}function Mi(){_t(po),_t(wu),_t(Ei)}function CC(u){var p=hs(Ei.current),v=hs(po.current);p=se(v,u.type,p),v!==p&&(Rt(wu,u),Rt(po,p))}function F0(u){wu.current===u&&(_t(po),_t(wu))}var wn=Dt(0);function Vf(u){for(var p=u;p!==null;){if(p.tag===13){var v=p.memoizedState;if(v!==null&&(v=v.dehydrated,v===null||Fo(v)||zo(v)))return p}else if(p.tag===19&&p.memoizedProps.revealOrder!==void 0){if(p.flags&128)return p}else if(p.child!==null){p.child.return=p,p=p.child;continue}if(p===u)break;for(;p.sibling===null;){if(p.return===null||p.return===u)return null;p=p.return}p.sibling.return=p.return,p=p.sibling}return null}var z0=[];function B0(){for(var u=0;uv?v:4,u(!0);var C=H0.transition;H0.transition={};try{u(!1),p()}finally{Lt=v,H0.transition=C}}function FC(){return mo().memoizedState}function LD(u,p,v){var C=Ta(u);if(v={lane:C,action:v,hasEagerState:!1,eagerState:null,next:null},zC(u))BC(p,v);else if(v=uC(u,p,v,C),v!==null){var k=dr();ho(v,u,C,k),HC(v,p,C)}}function FD(u,p,v){var C=Ta(u),k={lane:C,action:v,hasEagerState:!1,eagerState:null,next:null};if(zC(u))BC(p,k);else{var P=u.alternate;if(u.lanes===0&&(P===null||P.lanes===0)&&(P=p.lastRenderedReducer,P!==null))try{var F=p.lastRenderedState,ie=P(F,v);if(k.hasEagerState=!0,k.eagerState=ie,Ho(ie,F)){var ge=p.interleaved;ge===null?(k.next=k,A0(p)):(k.next=ge.next,ge.next=k),p.interleaved=k;return}}catch{}finally{}v=uC(u,p,k,C),v!==null&&(k=dr(),ho(v,u,C,k),HC(v,p,C))}}function zC(u){var p=u.alternate;return u===Sn||p!==null&&p===Sn}function BC(u,p){Su=Gf=!0;var v=u.pending;v===null?p.next=p:(p.next=v.next,v.next=p),u.pending=p}function HC(u,p,v){if(v&4194240){var C=p.lanes;C&=u.pendingLanes,v|=C,p.lanes=v,y0(u,v)}}var Xf={readContext:fo,useCallback:ir,useContext:ir,useEffect:ir,useImperativeHandle:ir,useInsertionEffect:ir,useLayoutEffect:ir,useMemo:ir,useReducer:ir,useRef:ir,useState:ir,useDebugValue:ir,useDeferredValue:ir,useTransition:ir,useMutableSource:ir,useSyncExternalStore:ir,useId:ir,unstable_isNewReconciler:!1},zD={readContext:fo,useCallback:function(u,p){return gs().memoizedState=[u,p===void 0?null:p],u},useContext:fo,useEffect:OC,useImperativeHandle:function(u,p,v){return v=v!=null?v.concat([u]):null,Kf(4194308,4,AC.bind(null,p,u),v)},useLayoutEffect:function(u,p){return Kf(4194308,4,u,p)},useInsertionEffect:function(u,p){return Kf(4,2,u,p)},useMemo:function(u,p){var v=gs();return p=p===void 0?null:p,u=u(),v.memoizedState=[u,p],u},useReducer:function(u,p,v){var C=gs();return p=v!==void 0?v(p):p,C.memoizedState=C.baseState=p,u={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:u,lastRenderedState:p},C.queue=u,u=u.dispatch=LD.bind(null,Sn,u),[C.memoizedState,u]},useRef:function(u){var p=gs();return u={current:u},p.memoizedState=u},useState:EC,useDebugValue:X0,useDeferredValue:function(u){return gs().memoizedState=u},useTransition:function(){var u=EC(!1),p=u[0];return u=$D.bind(null,u[1]),gs().memoizedState=u,[p,u]},useMutableSource:function(){},useSyncExternalStore:function(u,p,v){var C=Sn,k=gs();if(mn){if(v===void 0)throw Error(l(407));v=v()}else{if(v=p(),Zn===null)throw Error(l(349));Ml&30||kC(C,p,v)}k.memoizedState=v;var P={value:v,getSnapshot:p};return k.queue=P,OC(_C.bind(null,C,P,u),[u]),C.flags|=2048,_u(9,jC.bind(null,C,P,v,p),void 0,null),v},useId:function(){var u=gs(),p=Zn.identifierPrefix;if(mn){var v=Us,C=Vs;v=(C&~(1<<32-Bo(C)-1)).toString(32)+v,p=":"+p+"R"+v,v=ku++,0gv&&(p.flags|=128,C=!0,Eu(k,!1),p.lanes=4194304)}else{if(!C)if(u=Vf(P),u!==null){if(p.flags|=128,C=!0,u=u.updateQueue,u!==null&&(p.updateQueue=u,p.flags|=4),Eu(k,!0),k.tail===null&&k.tailMode==="hidden"&&!P.alternate&&!mn)return cr(p),null}else 2*Qn()-k.renderingStartTime>gv&&v!==1073741824&&(p.flags|=128,C=!0,Eu(k,!1),p.lanes=4194304);k.isBackwards?(P.sibling=p.child,p.child=P):(u=k.last,u!==null?u.sibling=P:p.child=P,k.last=P)}return k.tail!==null?(p=k.tail,k.rendering=p,k.tail=p.sibling,k.renderingStartTime=Qn(),p.sibling=null,u=wn.current,Rt(wn,C?u&1|2:u&1),p):(cr(p),null);case 22:case 23:return Cv(),v=p.memoizedState!==null,u!==null&&u.memoizedState!==null!==v&&(p.flags|=8192),v&&p.mode&1?Qr&1073741824&&(cr(p),X&&p.subtreeFlags&6&&(p.flags|=8192)):cr(p),null;case 24:return null;case 25:return null}throw Error(l(156,p.tag))}function qD(u,p){switch(_0(p),p.tag){case 1:return Pr(p.type)&&If(),u=p.flags,u&65536?(p.flags=u&-65537|128,p):null;case 3:return Mi(),_t($n),_t(an),B0(),u=p.flags,u&65536&&!(u&128)?(p.flags=u&-65537|128,p):null;case 5:return F0(p),null;case 13:if(_t(wn),u=p.memoizedState,u!==null&&u.dehydrated!==null){if(p.alternate===null)throw Error(l(340));ji()}return u=p.flags,u&65536?(p.flags=u&-65537|128,p):null;case 19:return _t(wn),null;case 4:return Mi(),null;case 10:return D0(p.type._context),null;case 22:case 23:return Cv(),null;case 24:return null;default:return null}}var ep=!1,ur=!1,XD=typeof WeakSet=="function"?WeakSet:Set,Ke=null;function Di(u,p){var v=u.ref;if(v!==null)if(typeof v=="function")try{v(null)}catch(C){hn(u,p,C)}else v.current=null}function ov(u,p,v){try{v()}catch(C){hn(u,p,C)}}var lw=!1;function QD(u,p){for(ee(u.containerInfo),Ke=p;Ke!==null;)if(u=Ke,p=u.child,(u.subtreeFlags&1028)!==0&&p!==null)p.return=u,Ke=p;else for(;Ke!==null;){u=Ke;try{var v=u.alternate;if(u.flags&1024)switch(u.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var C=v.memoizedProps,k=v.memoizedState,P=u.stateNode,F=P.getSnapshotBeforeUpdate(u.elementType===u.type?C:Vo(u.type,C),k);P.__reactInternalSnapshotBeforeUpdate=F}break;case 3:X&&Ht(u.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;default:throw Error(l(163))}}catch(ie){hn(u,u.return,ie)}if(p=u.sibling,p!==null){p.return=u.return,Ke=p;break}Ke=u.return}return v=lw,lw=!1,v}function Mu(u,p,v){var C=p.updateQueue;if(C=C!==null?C.lastEffect:null,C!==null){var k=C=C.next;do{if((k.tag&u)===u){var P=k.destroy;k.destroy=void 0,P!==void 0&&ov(p,v,P)}k=k.next}while(k!==C)}}function tp(u,p){if(p=p.updateQueue,p=p!==null?p.lastEffect:null,p!==null){var v=p=p.next;do{if((v.tag&u)===u){var C=v.create;v.destroy=C()}v=v.next}while(v!==p)}}function sv(u){var p=u.ref;if(p!==null){var v=u.stateNode;switch(u.tag){case 5:u=Q(v);break;default:u=v}typeof p=="function"?p(u):p.current=u}}function iw(u){var p=u.alternate;p!==null&&(u.alternate=null,iw(p)),u.child=null,u.deletions=null,u.sibling=null,u.tag===5&&(p=u.stateNode,p!==null&&we(p)),u.stateNode=null,u.return=null,u.dependencies=null,u.memoizedProps=null,u.memoizedState=null,u.pendingProps=null,u.stateNode=null,u.updateQueue=null}function cw(u){return u.tag===5||u.tag===3||u.tag===4}function uw(u){e:for(;;){for(;u.sibling===null;){if(u.return===null||cw(u.return))return null;u=u.return}for(u.sibling.return=u.return,u=u.sibling;u.tag!==5&&u.tag!==6&&u.tag!==18;){if(u.flags&2||u.child===null||u.tag===4)continue e;u.child.return=u,u=u.child}if(!(u.flags&2))return u.stateNode}}function av(u,p,v){var C=u.tag;if(C===5||C===6)u=u.stateNode,p?kt(v,u,p):Ue(v,u);else if(C!==4&&(u=u.child,u!==null))for(av(u,p,v),u=u.sibling;u!==null;)av(u,p,v),u=u.sibling}function lv(u,p,v){var C=u.tag;if(C===5||C===6)u=u.stateNode,p?Ne(v,u,p):ye(v,u);else if(C!==4&&(u=u.child,u!==null))for(lv(u,p,v),u=u.sibling;u!==null;)lv(u,p,v),u=u.sibling}var nr=null,Uo=!1;function bs(u,p,v){for(v=v.child;v!==null;)iv(u,p,v),v=v.sibling}function iv(u,p,v){if(fs&&typeof fs.onCommitFiberUnmount=="function")try{fs.onCommitFiberUnmount(Df,v)}catch{}switch(v.tag){case 5:ur||Di(v,p);case 6:if(X){var C=nr,k=Uo;nr=null,bs(u,p,v),nr=C,Uo=k,nr!==null&&(Uo?Ve(nr,v.stateNode):Se(nr,v.stateNode))}else bs(u,p,v);break;case 18:X&&nr!==null&&(Uo?Vn(nr,v.stateNode):g0(nr,v.stateNode));break;case 4:X?(C=nr,k=Uo,nr=v.stateNode.containerInfo,Uo=!0,bs(u,p,v),nr=C,Uo=k):(Z&&(C=v.stateNode.containerInfo,k=pn(C),Wt(C,k)),bs(u,p,v));break;case 0:case 11:case 14:case 15:if(!ur&&(C=v.updateQueue,C!==null&&(C=C.lastEffect,C!==null))){k=C=C.next;do{var P=k,F=P.destroy;P=P.tag,F!==void 0&&(P&2||P&4)&&ov(v,p,F),k=k.next}while(k!==C)}bs(u,p,v);break;case 1:if(!ur&&(Di(v,p),C=v.stateNode,typeof C.componentWillUnmount=="function"))try{C.props=v.memoizedProps,C.state=v.memoizedState,C.componentWillUnmount()}catch(ie){hn(v,p,ie)}bs(u,p,v);break;case 21:bs(u,p,v);break;case 22:v.mode&1?(ur=(C=ur)||v.memoizedState!==null,bs(u,p,v),ur=C):bs(u,p,v);break;default:bs(u,p,v)}}function dw(u){var p=u.updateQueue;if(p!==null){u.updateQueue=null;var v=u.stateNode;v===null&&(v=u.stateNode=new XD),p.forEach(function(C){var k=sR.bind(null,u,C);v.has(C)||(v.add(C),C.then(k,k))})}}function Go(u,p){var v=p.deletions;if(v!==null)for(var C=0;C";case rp:return":has("+(dv(u)||"")+")";case op:return'[role="'+u.value+'"]';case ap:return'"'+u.value+'"';case sp:return'[data-testname="'+u.value+'"]';default:throw Error(l(365))}}function vw(u,p){var v=[];u=[u,0];for(var C=0;Ck&&(k=F),C&=~P}if(C=k,C=Qn()-C,C=(120>C?120:480>C?480:1080>C?1080:1920>C?1920:3e3>C?3e3:4320>C?4320:1960*ZD(C/1960))-C,10u?16:u,Aa===null)var C=!1;else{if(u=Aa,Aa=null,dp=0,It&6)throw Error(l(331));var k=It;for(It|=4,Ke=u.current;Ke!==null;){var P=Ke,F=P.child;if(Ke.flags&16){var ie=P.deletions;if(ie!==null){for(var ge=0;geQn()-hv?Dl(u,0):mv|=v),Or(u,p)}function _w(u,p){p===0&&(u.mode&1?(p=Mf,Mf<<=1,!(Mf&130023424)&&(Mf=4194304)):p=1);var v=dr();u=ms(u,p),u!==null&&(bu(u,p,v),Or(u,v))}function oR(u){var p=u.memoizedState,v=0;p!==null&&(v=p.retryLane),_w(u,v)}function sR(u,p){var v=0;switch(u.tag){case 13:var C=u.stateNode,k=u.memoizedState;k!==null&&(v=k.retryLane);break;case 19:C=u.stateNode;break;default:throw Error(l(314))}C!==null&&C.delete(p),_w(u,v)}var Iw;Iw=function(u,p,v){if(u!==null)if(u.memoizedProps!==p.pendingProps||$n.current)Er=!0;else{if(!(u.lanes&v)&&!(p.flags&128))return Er=!1,GD(u,p,v);Er=!!(u.flags&131072)}else Er=!1,mn&&p.flags&1048576&&oC(p,Tf,p.index);switch(p.lanes=0,p.tag){case 2:var C=p.type;Yf(u,p),u=p.pendingProps;var k=wi(p,an.current);Ii(p,v),k=V0(null,p,C,u,k,v);var P=U0();return p.flags|=1,typeof k=="object"&&k!==null&&typeof k.render=="function"&&k.$$typeof===void 0?(p.tag=1,p.memoizedState=null,p.updateQueue=null,Pr(C)?(P=!0,Pf(p)):P=!1,p.memoizedState=k.state!==null&&k.state!==void 0?k.state:null,T0(p),k.updater=Hf,p.stateNode=k,k._reactInternals=p,$0(p,C,u,v),p=J0(null,p,C,!0,P,v)):(p.tag=0,mn&&P&&j0(p),xr(null,p,k,v),p=p.child),p;case 16:C=p.elementType;e:{switch(Yf(u,p),u=p.pendingProps,k=C._init,C=k(C._payload),p.type=C,k=p.tag=lR(C),u=Vo(C,u),k){case 0:p=Z0(null,p,C,u,v);break e;case 1:p=JC(null,p,C,u,v);break e;case 11:p=qC(null,p,C,u,v);break e;case 14:p=XC(null,p,C,Vo(C.type,u),v);break e}throw Error(l(306,C,""))}return p;case 0:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),Z0(u,p,C,k,v);case 1:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),JC(u,p,C,k,v);case 3:e:{if(ew(p),u===null)throw Error(l(387));C=p.pendingProps,P=p.memoizedState,k=P.element,dC(u,p),Bf(p,C,null,v);var F=p.memoizedState;if(C=F.element,me&&P.isDehydrated)if(P={element:C,isDehydrated:!1,cache:F.cache,pendingSuspenseBoundaries:F.pendingSuspenseBoundaries,transitions:F.transitions},p.updateQueue.baseState=P,p.memoizedState=P,p.flags&256){k=Oi(Error(l(423)),p),p=tw(u,p,C,v,k);break e}else if(C!==k){k=Oi(Error(l(424)),p),p=tw(u,p,C,v,k);break e}else for(me&&(uo=Je(p.stateNode.containerInfo),Xr=p,mn=!0,Wo=null,xu=!1),v=yC(p,null,C,v),p.child=v;v;)v.flags=v.flags&-3|4096,v=v.sibling;else{if(ji(),C===k){p=Ks(u,p,v);break e}xr(u,p,C,v)}p=p.child}return p;case 5:return CC(p),u===null&&P0(p),C=p.type,k=p.pendingProps,P=u!==null?u.memoizedProps:null,F=k.children,A(C,k)?F=null:P!==null&&A(C,P)&&(p.flags|=32),ZC(u,p),xr(u,p,F,v),p.child;case 6:return u===null&&P0(p),null;case 13:return nw(u,p,v);case 4:return L0(p,p.stateNode.containerInfo),C=p.pendingProps,u===null?p.child=Pi(p,null,C,v):xr(u,p,C,v),p.child;case 11:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),qC(u,p,C,k,v);case 7:return xr(u,p,p.pendingProps,v),p.child;case 8:return xr(u,p,p.pendingProps.children,v),p.child;case 12:return xr(u,p,p.pendingProps.children,v),p.child;case 10:e:{if(C=p.type._context,k=p.pendingProps,P=p.memoizedProps,F=k.value,cC(p,C,F),P!==null)if(Ho(P.value,F)){if(P.children===k.children&&!$n.current){p=Ks(u,p,v);break e}}else for(P=p.child,P!==null&&(P.return=p);P!==null;){var ie=P.dependencies;if(ie!==null){F=P.child;for(var ge=ie.firstContext;ge!==null;){if(ge.context===C){if(P.tag===1){ge=Gs(-1,v&-v),ge.tag=2;var Oe=P.updateQueue;if(Oe!==null){Oe=Oe.shared;var Ye=Oe.pending;Ye===null?ge.next=ge:(ge.next=Ye.next,Ye.next=ge),Oe.pending=ge}}P.lanes|=v,ge=P.alternate,ge!==null&&(ge.lanes|=v),R0(P.return,v,p),ie.lanes|=v;break}ge=ge.next}}else if(P.tag===10)F=P.type===p.type?null:P.child;else if(P.tag===18){if(F=P.return,F===null)throw Error(l(341));F.lanes|=v,ie=F.alternate,ie!==null&&(ie.lanes|=v),R0(F,v,p),F=P.sibling}else F=P.child;if(F!==null)F.return=P;else for(F=P;F!==null;){if(F===p){F=null;break}if(P=F.sibling,P!==null){P.return=F.return,F=P;break}F=F.return}P=F}xr(u,p,k.children,v),p=p.child}return p;case 9:return k=p.type,C=p.pendingProps.children,Ii(p,v),k=fo(k),C=C(k),p.flags|=1,xr(u,p,C,v),p.child;case 14:return C=p.type,k=Vo(C,p.pendingProps),k=Vo(C.type,k),XC(u,p,C,k,v);case 15:return QC(u,p,p.type,p.pendingProps,v);case 17:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),Yf(u,p),p.tag=1,Pr(C)?(u=!0,Pf(p)):u=!1,Ii(p,v),gC(p,C,k),$0(p,C,k,v),J0(null,p,C,!0,u,v);case 19:return ow(u,p,v);case 22:return YC(u,p,v)}throw Error(l(156,p.tag))};function Pw(u,p){return C0(u,p)}function aR(u,p,v,C){this.tag=u,this.key=v,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=p,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=C,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function go(u,p,v,C){return new aR(u,p,v,C)}function Sv(u){return u=u.prototype,!(!u||!u.isReactComponent)}function lR(u){if(typeof u=="function")return Sv(u)?1:0;if(u!=null){if(u=u.$$typeof,u===x)return 11;if(u===j)return 14}return 2}function $a(u,p){var v=u.alternate;return v===null?(v=go(u.tag,p,u.key,u.mode),v.elementType=u.elementType,v.type=u.type,v.stateNode=u.stateNode,v.alternate=u,u.alternate=v):(v.pendingProps=p,v.type=u.type,v.flags=0,v.subtreeFlags=0,v.deletions=null),v.flags=u.flags&14680064,v.childLanes=u.childLanes,v.lanes=u.lanes,v.child=u.child,v.memoizedProps=u.memoizedProps,v.memoizedState=u.memoizedState,v.updateQueue=u.updateQueue,p=u.dependencies,v.dependencies=p===null?null:{lanes:p.lanes,firstContext:p.firstContext},v.sibling=u.sibling,v.index=u.index,v.ref=u.ref,v}function hp(u,p,v,C,k,P){var F=2;if(C=u,typeof u=="function")Sv(u)&&(F=1);else if(typeof u=="string")F=5;else e:switch(u){case m:return Tl(v.children,k,P,p);case h:F=8,k|=8;break;case g:return u=go(12,v,p,k|2),u.elementType=g,u.lanes=P,u;case w:return u=go(13,v,p,k),u.elementType=w,u.lanes=P,u;case S:return u=go(19,v,p,k),u.elementType=S,u.lanes=P,u;case I:return gp(v,k,P,p);default:if(typeof u=="object"&&u!==null)switch(u.$$typeof){case b:F=10;break e;case y:F=9;break e;case x:F=11;break e;case j:F=14;break e;case _:F=16,C=null;break e}throw Error(l(130,u==null?u:typeof u,""))}return p=go(F,v,p,k),p.elementType=u,p.type=C,p.lanes=P,p}function Tl(u,p,v,C){return u=go(7,u,C,p),u.lanes=v,u}function gp(u,p,v,C){return u=go(22,u,C,p),u.elementType=I,u.lanes=v,u.stateNode={isHidden:!1},u}function kv(u,p,v){return u=go(6,u,null,p),u.lanes=v,u}function jv(u,p,v){return p=go(4,u.children!==null?u.children:[],u.key,p),p.lanes=v,p.stateNode={containerInfo:u.containerInfo,pendingChildren:null,implementation:u.implementation},p}function iR(u,p,v,C,k){this.tag=p,this.containerInfo=u,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=z,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=x0(0),this.expirationTimes=x0(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=x0(0),this.identifierPrefix=C,this.onRecoverableError=k,me&&(this.mutableSourceEagerHydrationData=null)}function Ew(u,p,v,C,k,P,F,ie,ge){return u=new iR(u,p,v,ie,ge),p===1?(p=1,P===!0&&(p|=8)):p=0,P=go(3,null,null,p),u.current=P,P.stateNode=u,P.memoizedState={element:C,isDehydrated:v,cache:null,transitions:null,pendingSuspenseBoundaries:null},T0(P),u}function Mw(u){if(!u)return lr;u=u._reactInternals;e:{if(N(u)!==u||u.tag!==1)throw Error(l(170));var p=u;do{switch(p.tag){case 3:p=p.stateNode.context;break e;case 1:if(Pr(p.type)){p=p.stateNode.__reactInternalMemoizedMergedChildContext;break e}}p=p.return}while(p!==null);throw Error(l(171))}if(u.tag===1){var v=u.type;if(Pr(v))return Z2(u,v,p)}return p}function Ow(u){var p=u._reactInternals;if(p===void 0)throw typeof u.render=="function"?Error(l(188)):(u=Object.keys(u).join(","),Error(l(268,u)));return u=U(p),u===null?null:u.stateNode}function Dw(u,p){if(u=u.memoizedState,u!==null&&u.dehydrated!==null){var v=u.retryLane;u.retryLane=v!==0&&v=Oe&&P>=xt&&k<=Ye&&F<=He){u.splice(p,1);break}else if(C!==Oe||v.width!==ge.width||HeF){if(!(P!==xt||v.height!==ge.height||Yek)){Oe>C&&(ge.width+=Oe-C,ge.x=C),YeP&&(ge.height+=xt-P,ge.y=P),Hev&&(v=F)),F ")+` - -No matching component was found for: - `)+u.join(" > ")}return null},n.getPublicRootInstance=function(u){if(u=u.current,!u.child)return null;switch(u.child.tag){case 5:return Q(u.child.stateNode);default:return u.child.stateNode}},n.injectIntoDevTools=function(u){if(u={bundleType:u.bundleType,version:u.version,rendererPackageName:u.rendererPackageName,rendererConfig:u.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:c.ReactCurrentDispatcher,findHostInstanceByFiber:cR,findFiberByHostInstance:u.findFiberByHostInstance||uR,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0"},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")u=!1;else{var p=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(p.isDisabled||!p.supportsFiber)u=!0;else{try{Df=p.inject(u),fs=p}catch{}u=!!p.checkDCE}}return u},n.isAlreadyRendering=function(){return!1},n.observeVisibleRects=function(u,p,v,C){if(!$e)throw Error(l(363));u=fv(u,p);var k=dt(u,v,C).disconnect;return{disconnect:function(){k()}}},n.registerMutableSourceForHydration=function(u,p){var v=p._getVersion;v=v(p._source),u.mutableSourceEagerHydrationData==null?u.mutableSourceEagerHydrationData=[p,v]:u.mutableSourceEagerHydrationData.push(p,v)},n.runWithPriority=function(u,p){var v=Lt;try{return Lt=u,p()}finally{Lt=v}},n.shouldError=function(){return null},n.shouldSuspend=function(){return!1},n.updateContainer=function(u,p,v,C){var k=p.current,P=dr(),F=Ta(k);return v=Mw(v),p.context===null?p.context=v:p.pendingContext=v,p=Gs(P,F),p.payload={element:u},C=C===void 0?null:C,C!==null&&(p.callback=C),u=Da(k,p,F),u!==null&&(ho(u,k,F,P),zf(u,k,F)),F},n};cD.exports=k1e;var j1e=cD.exports;const _1e=Bd(j1e);var uD={exports:{}},bi={};/** - * @license React - * react-reconciler-constants.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */bi.ConcurrentRoot=1;bi.ContinuousEventPriority=4;bi.DefaultEventPriority=16;bi.DiscreteEventPriority=1;bi.IdleEventPriority=536870912;bi.LegacyRoot=0;uD.exports=bi;var dD=uD.exports;const J_={children:!0,ref:!0,key:!0,style:!0,forwardedRef:!0,unstable_applyCache:!0,unstable_applyDrawHitFromCache:!0};let eI=!1,tI=!1;const X2=".react-konva-event",I1e=`ReactKonva: You have a Konva node with draggable = true and position defined but no onDragMove or onDragEnd events are handled. -Position of a node will be changed during drag&drop, so you should update state of the react app as well. -Consider to add onDragMove or onDragEnd events. -For more info see: https://github.com/konvajs/react-konva/issues/256 -`,P1e=`ReactKonva: You are using "zIndex" attribute for a Konva node. -react-konva may get confused with ordering. Just define correct order of elements in your render function of a component. -For more info see: https://github.com/konvajs/react-konva/issues/194 -`,E1e={};function m0(e,t,n=E1e){if(!eI&&"zIndex"in t&&(console.warn(P1e),eI=!0),!tI&&t.draggable){var r=t.x!==void 0||t.y!==void 0,o=t.onDragEnd||t.onDragMove;r&&!o&&(console.warn(I1e),tI=!0)}for(var s in n)if(!J_[s]){var l=s.slice(0,2)==="on",c=n[s]!==t[s];if(l&&c){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),e.off(d,n[s])}var f=!t.hasOwnProperty(s);f&&e.setAttr(s,void 0)}var m=t._useStrictMode,h={},g=!1;const b={};for(var s in t)if(!J_[s]){var l=s.slice(0,2)==="on",y=n[s]!==t[s];if(l&&y){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),t[s]&&(b[d]=t[s])}!l&&(t[s]!==n[s]||m&&t[s]!==e.getAttr(s))&&(g=!0,h[s]=t[s])}g&&(e.setAttrs(h),jl(e));for(var d in b)e.on(d+X2,b[d])}function jl(e){if(!g$.Konva.autoDrawEnabled){var t=e.getLayer()||e.getStage();t&&t.batchDraw()}}const fD={},M1e={};Fd.Node.prototype._applyProps=m0;function O1e(e,t){if(typeof t=="string"){console.error(`Do not use plain text as child of Konva.Node. You are using text: ${t}`);return}e.add(t),jl(e)}function D1e(e,t,n){let r=Fd[e];r||(console.error(`Konva has no node with the type ${e}. Group will be used instead. If you use minimal version of react-konva, just import required nodes into Konva: "import "konva/lib/shapes/${e}" If you want to render DOM elements as part of canvas tree take a look into this demo: https://konvajs.github.io/docs/react/DOM_Portal.html`),r=Fd.Group);const o={},s={};for(var l in t){var c=l.slice(0,2)==="on";c?s[l]=t[l]:o[l]=t[l]}const d=new r(o);return m0(d,s),d}function R1e(e,t,n){console.error(`Text components are not supported for now in ReactKonva. Your text is: "${e}"`)}function A1e(e,t,n){return!1}function T1e(e){return e}function N1e(){return null}function $1e(){return null}function L1e(e,t,n,r){return M1e}function F1e(){}function z1e(e){}function B1e(e,t){return!1}function H1e(){return fD}function W1e(){return fD}const V1e=setTimeout,U1e=clearTimeout,G1e=-1;function K1e(e,t){return!1}const q1e=!1,X1e=!0,Q1e=!0;function Y1e(e,t){t.parent===e?t.moveToTop():e.add(t),jl(e)}function Z1e(e,t){t.parent===e?t.moveToTop():e.add(t),jl(e)}function pD(e,t,n){t._remove(),e.add(t),t.setZIndex(n.getZIndex()),jl(e)}function J1e(e,t,n){pD(e,t,n)}function ebe(e,t){t.destroy(),t.off(X2),jl(e)}function tbe(e,t){t.destroy(),t.off(X2),jl(e)}function nbe(e,t,n){console.error(`Text components are not yet supported in ReactKonva. You text is: "${n}"`)}function rbe(e,t,n){}function obe(e,t,n,r,o){m0(e,o,r)}function sbe(e){e.hide(),jl(e)}function abe(e){}function lbe(e,t){(t.visible==null||t.visible)&&e.show()}function ibe(e,t){}function cbe(e){}function ube(){}const dbe=()=>dD.DefaultEventPriority,fbe=Object.freeze(Object.defineProperty({__proto__:null,appendChild:Y1e,appendChildToContainer:Z1e,appendInitialChild:O1e,cancelTimeout:U1e,clearContainer:cbe,commitMount:rbe,commitTextUpdate:nbe,commitUpdate:obe,createInstance:D1e,createTextInstance:R1e,detachDeletedInstance:ube,finalizeInitialChildren:A1e,getChildHostContext:W1e,getCurrentEventPriority:dbe,getPublicInstance:T1e,getRootHostContext:H1e,hideInstance:sbe,hideTextInstance:abe,idlePriority:sm.unstable_IdlePriority,insertBefore:pD,insertInContainerBefore:J1e,isPrimaryRenderer:q1e,noTimeout:G1e,now:sm.unstable_now,prepareForCommit:N1e,preparePortalMount:$1e,prepareUpdate:L1e,removeChild:ebe,removeChildFromContainer:tbe,resetAfterCommit:F1e,resetTextContent:z1e,run:sm.unstable_runWithPriority,scheduleTimeout:V1e,shouldDeprioritizeSubtree:B1e,shouldSetTextContent:K1e,supportsMutation:Q1e,unhideInstance:lbe,unhideTextInstance:ibe,warnsIfNotActing:X1e},Symbol.toStringTag,{value:"Module"}));var pbe=Object.defineProperty,mbe=Object.defineProperties,hbe=Object.getOwnPropertyDescriptors,nI=Object.getOwnPropertySymbols,gbe=Object.prototype.hasOwnProperty,vbe=Object.prototype.propertyIsEnumerable,rI=(e,t,n)=>t in e?pbe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,oI=(e,t)=>{for(var n in t||(t={}))gbe.call(t,n)&&rI(e,n,t[n]);if(nI)for(var n of nI(t))vbe.call(t,n)&&rI(e,n,t[n]);return e},bbe=(e,t)=>mbe(e,hbe(t));function mD(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){const o=mD(r,t,n);if(o)return o;r=t?null:r.sibling}}function hD(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}const Q2=hD(i.createContext(null));class gD extends i.Component{render(){return i.createElement(Q2.Provider,{value:this._reactInternals},this.props.children)}}const{ReactCurrentOwner:sI,ReactCurrentDispatcher:aI}=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function xbe(){const e=i.useContext(Q2);if(e===null)throw new Error("its-fine: useFiber must be called within a !");const t=i.useId();return i.useMemo(()=>{for(const r of[sI==null?void 0:sI.current,e,e==null?void 0:e.alternate]){if(!r)continue;const o=mD(r,!1,s=>{let l=s.memoizedState;for(;l;){if(l.memoizedState===t)return!0;l=l.next}});if(o)return o}},[e,t])}function ybe(){var e,t;const n=xbe(),[r]=i.useState(()=>new Map);r.clear();let o=n;for(;o;){const s=(e=o.type)==null?void 0:e._context;s&&s!==Q2&&!r.has(s)&&r.set(s,(t=aI==null?void 0:aI.current)==null?void 0:t.readContext(hD(s))),o=o.return}return r}function Cbe(){const e=ybe();return i.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>i.createElement(t,null,i.createElement(n.Provider,bbe(oI({},r),{value:e.get(n)}))),t=>i.createElement(gD,oI({},t))),[e])}function wbe(e){const t=B.useRef({});return B.useLayoutEffect(()=>{t.current=e}),B.useLayoutEffect(()=>()=>{t.current={}},[]),t.current}const Sbe=e=>{const t=B.useRef(),n=B.useRef(),r=B.useRef(),o=wbe(e),s=Cbe(),l=c=>{const{forwardedRef:d}=e;d&&(typeof d=="function"?d(c):d.current=c)};return B.useLayoutEffect(()=>(n.current=new Fd.Stage({width:e.width,height:e.height,container:t.current}),l(n.current),r.current=td.createContainer(n.current,dD.LegacyRoot,!1,null),td.updateContainer(B.createElement(s,{},e.children),r.current),()=>{Fd.isBrowser&&(l(null),td.updateContainer(null,r.current,null),n.current.destroy())}),[]),B.useLayoutEffect(()=>{l(n.current),m0(n.current,e,o),td.updateContainer(B.createElement(s,{},e.children),r.current,null)}),B.createElement("div",{ref:t,id:e.id,accessKey:e.accessKey,className:e.className,role:e.role,style:e.style,tabIndex:e.tabIndex,title:e.title})},Gu="Layer",Ns="Group",$s="Rect",$l="Circle",Vh="Line",vD="Image",kbe="Text",jbe="Transformer",td=_1e(fbe);td.injectIntoDevTools({findHostInstanceByFiber:()=>null,bundleType:0,version:B.version,rendererPackageName:"react-konva"});const _be=B.forwardRef((e,t)=>B.createElement(gD,{},B.createElement(Sbe,{...e,forwardedRef:t}))),Ibe=fe(pe,({canvas:e})=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,stageDimensions:r,stageScale:o,shouldDarkenOutsideBoundingBox:s,stageCoordinates:l}=e;return{boundingBoxCoordinates:t,boundingBoxDimensions:n,shouldDarkenOutsideBoundingBox:s,stageCoordinates:l,stageDimensions:r,stageScale:o}}),Pbe=()=>{const{boundingBoxCoordinates:e,boundingBoxDimensions:t,shouldDarkenOutsideBoundingBox:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=H(Ibe);return a.jsxs(Ns,{children:[a.jsx($s,{offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fill:"rgba(0,0,0,0.4)",listening:!1,visible:n}),a.jsx($s,{x:e.x,y:e.y,width:t.width,height:t.height,fill:"rgb(255,255,255)",listening:!1,visible:n,globalCompositeOperation:"destination-out"})]})},Ebe=i.memo(Pbe),Mbe=fe([pe],({canvas:e})=>{const{stageScale:t,stageCoordinates:n,stageDimensions:r}=e;return{stageScale:t,stageCoordinates:n,stageDimensions:r}}),Obe=()=>{const{stageScale:e,stageCoordinates:t,stageDimensions:n}=H(Mbe),{colorMode:r}=ya(),[o,s]=i.useState([]),[l,c]=Zo("colors",["base.800","base.200"]),d=i.useCallback(f=>f/e,[e]);return i.useLayoutEffect(()=>{const{width:f,height:m}=n,{x:h,y:g}=t,b={x1:0,y1:0,x2:f,y2:m,offset:{x:d(h),y:d(g)}},y={x:Math.ceil(d(h)/64)*64,y:Math.ceil(d(g)/64)*64},x={x1:-y.x,y1:-y.y,x2:d(f)-y.x+64,y2:d(m)-y.y+64},S={x1:Math.min(b.x1,x.x1),y1:Math.min(b.y1,x.y1),x2:Math.max(b.x2,x.x2),y2:Math.max(b.y2,x.y2)},j=S.x2-S.x1,_=S.y2-S.y1,I=Math.round(j/64)+1,E=Math.round(_/64)+1,M=hS(0,I).map(R=>a.jsx(Vh,{x:S.x1+R*64,y:S.y1,points:[0,0,0,_],stroke:r==="dark"?l:c,strokeWidth:1},`x_${R}`)),D=hS(0,E).map(R=>a.jsx(Vh,{x:S.x1,y:S.y1+R*64,points:[0,0,j,0],stroke:r==="dark"?l:c,strokeWidth:1},`y_${R}`));s(M.concat(D))},[e,t,n,d,r,l,c]),a.jsx(Ns,{children:o})},Dbe=i.memo(Obe),Rbe=v$([pe],({system:e,canvas:t})=>{const{denoiseProgress:n}=e,{boundingBox:r}=t.layerState.stagingArea,{batchIds:o}=t;return{boundingBox:r,progressImage:n&&o.includes(n.batch_id)?n.progress_image:void 0}}),Abe=e=>{const{...t}=e,{progressImage:n,boundingBox:r}=H(Rbe),[o,s]=i.useState(null);return i.useEffect(()=>{if(!n)return;const l=new Image;l.onload=()=>{s(l)},l.src=n.dataURL},[n]),n&&r&&o?a.jsx(vD,{x:r.x,y:r.y,width:r.width,height:r.height,image:o,listening:!1,...t}):null},Tbe=i.memo(Abe),Ql=e=>{const{r:t,g:n,b:r,a:o}=e;return`rgba(${t}, ${n}, ${r}, ${o})`},Nbe=fe(pe,({canvas:e})=>{const{maskColor:t,stageCoordinates:n,stageDimensions:r,stageScale:o}=e;return{stageCoordinates:n,stageDimensions:r,stageScale:o,maskColorString:Ql(t)}}),lI=e=>`data:image/svg+xml;utf8, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -`.replaceAll("black",e),$be=e=>{const{...t}=e,{maskColorString:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=H(Nbe),[l,c]=i.useState(null),[d,f]=i.useState(0),m=i.useRef(null),h=i.useCallback(()=>{f(d+1),setTimeout(h,500)},[d]);return i.useEffect(()=>{if(l)return;const g=new Image;g.onload=()=>{c(g)},g.src=lI(n)},[l,n]),i.useEffect(()=>{l&&(l.src=lI(n))},[l,n]),i.useEffect(()=>{const g=setInterval(()=>f(b=>(b+1)%5),50);return()=>clearInterval(g)},[]),!l||!Ni(r.x)||!Ni(r.y)||!Ni(s)||!Ni(o.width)||!Ni(o.height)?null:a.jsx($s,{ref:m,offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fillPatternImage:l,fillPatternOffsetY:Ni(d)?d:0,fillPatternRepeat:"repeat",fillPatternScale:{x:1/s,y:1/s},listening:!0,globalCompositeOperation:"source-in",...t})},Lbe=i.memo($be),Fbe=fe([pe],({canvas:e})=>({objects:e.layerState.objects})),zbe=e=>{const{...t}=e,{objects:n}=H(Fbe);return a.jsx(Ns,{listening:!1,...t,children:n.filter(b$).map((r,o)=>a.jsx(Vh,{points:r.points,stroke:"rgb(0,0,0)",strokeWidth:r.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:r.tool==="brush"?"source-over":"destination-out"},o))})},Bbe=i.memo(zbe);var Ll=i,Hbe=function(t,n,r){const o=Ll.useRef("loading"),s=Ll.useRef(),[l,c]=Ll.useState(0),d=Ll.useRef(),f=Ll.useRef(),m=Ll.useRef();return(d.current!==t||f.current!==n||m.current!==r)&&(o.current="loading",s.current=void 0,d.current=t,f.current=n,m.current=r),Ll.useLayoutEffect(function(){if(!t)return;var h=document.createElement("img");function g(){o.current="loaded",s.current=h,c(Math.random())}function b(){o.current="failed",s.current=void 0,c(Math.random())}return h.addEventListener("load",g),h.addEventListener("error",b),n&&(h.crossOrigin=n),r&&(h.referrerPolicy=r),h.src=t,function(){h.removeEventListener("load",g),h.removeEventListener("error",b)}},[t,n,r]),[s.current,o.current]};const Wbe=Bd(Hbe),Vbe=({canvasImage:e})=>{const[t,n,r,o]=Zo("colors",["base.400","base.500","base.700","base.900"]),s=ia(t,n),l=ia(r,o),{t:c}=W();return a.jsxs(Ns,{children:[a.jsx($s,{x:e.x,y:e.y,width:e.width,height:e.height,fill:s}),a.jsx(kbe,{x:e.x,y:e.y,width:e.width,height:e.height,align:"center",verticalAlign:"middle",fontFamily:'"Inter Variable", sans-serif',fontSize:e.width/16,fontStyle:"600",text:c("common.imageFailedToLoad"),fill:l})]})},Ube=i.memo(Vbe),Gbe=e=>{const{x:t,y:n,imageName:r}=e.canvasImage,{currentData:o,isError:s}=jo(r??Br),[l,c]=Wbe((o==null?void 0:o.image_url)??"",AI.get()?"use-credentials":"anonymous");return s||c==="failed"?a.jsx(Ube,{canvasImage:e.canvasImage}):a.jsx(vD,{x:t,y:n,image:l,listening:!1})},bD=i.memo(Gbe),Kbe=fe([pe],({canvas:e})=>{const{layerState:{objects:t}}=e;return{objects:t}}),qbe=()=>{const{objects:e}=H(Kbe);return e?a.jsx(Ns,{name:"outpainting-objects",listening:!1,children:e.map((t,n)=>{if(x$(t))return a.jsx(bD,{canvasImage:t},n);if(y$(t)){const r=a.jsx(Vh,{points:t.points,stroke:t.color?Ql(t.color):"rgb(0,0,0)",strokeWidth:t.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:t.tool==="brush"?"source-over":"destination-out"},n);return t.clip?a.jsx(Ns,{clipX:t.clip.x,clipY:t.clip.y,clipWidth:t.clip.width,clipHeight:t.clip.height,children:r},n):r}else{if(C$(t))return a.jsx($s,{x:t.x,y:t.y,width:t.width,height:t.height,fill:Ql(t.color)},n);if(w$(t))return a.jsx($s,{x:t.x,y:t.y,width:t.width,height:t.height,fill:"rgb(255, 255, 255)",globalCompositeOperation:"destination-out"},n)}})}):null},Xbe=i.memo(qbe),Qbe=fe([pe],({canvas:e})=>{const{layerState:t,shouldShowStagingImage:n,shouldShowStagingOutline:r,boundingBoxCoordinates:o,boundingBoxDimensions:s}=e,{selectedImageIndex:l,images:c,boundingBox:d}=t.stagingArea;return{currentStagingAreaImage:c.length>0&&l!==void 0?c[l]:void 0,isOnFirstImage:l===0,isOnLastImage:l===c.length-1,shouldShowStagingImage:n,shouldShowStagingOutline:r,x:(d==null?void 0:d.x)??o.x,y:(d==null?void 0:d.y)??o.y,width:(d==null?void 0:d.width)??s.width,height:(d==null?void 0:d.height)??s.height}}),Ybe=e=>{const{...t}=e,{currentStagingAreaImage:n,shouldShowStagingImage:r,shouldShowStagingOutline:o,x:s,y:l,width:c,height:d}=H(Qbe);return a.jsxs(Ns,{...t,children:[r&&n&&a.jsx(bD,{canvasImage:n}),o&&a.jsxs(Ns,{children:[a.jsx($s,{x:s,y:l,width:c,height:d,strokeWidth:1,stroke:"white",strokeScaleEnabled:!1}),a.jsx($s,{x:s,y:l,width:c,height:d,dash:[4,4],strokeWidth:1,stroke:"black",strokeScaleEnabled:!1})]})]})},Zbe=i.memo(Ybe),Jbe=fe([pe],({canvas:e})=>{const{layerState:{stagingArea:{images:t,selectedImageIndex:n}},shouldShowStagingOutline:r,shouldShowStagingImage:o}=e;return{currentIndex:n,total:t.length,currentStagingAreaImage:t.length>0?t[n]:void 0,shouldShowStagingImage:o,shouldShowStagingOutline:r}}),exe=()=>{const e=te(),{currentStagingAreaImage:t,shouldShowStagingImage:n,currentIndex:r,total:o}=H(Jbe),{t:s}=W(),l=i.useCallback(()=>{e(gS(!0))},[e]),c=i.useCallback(()=>{e(gS(!1))},[e]),d=i.useCallback(()=>e(S$()),[e]),f=i.useCallback(()=>e(k$()),[e]),m=i.useCallback(()=>e(j$()),[e]);tt(["left"],d,{enabled:()=>!0,preventDefault:!0}),tt(["right"],f,{enabled:()=>!0,preventDefault:!0}),tt(["enter"],()=>m,{enabled:()=>!0,preventDefault:!0});const{data:h}=jo((t==null?void 0:t.imageName)??Br),g=i.useCallback(()=>{e(_$(!n))},[e,n]),b=i.useCallback(()=>{h&&e(I$({imageDTO:h}))},[e,h]),y=i.useCallback(()=>{e(P$())},[e]);return t?a.jsxs($,{pos:"absolute",bottom:4,gap:2,w:"100%",align:"center",justify:"center",onMouseEnter:l,onMouseLeave:c,children:[a.jsxs($t,{isAttached:!0,borderRadius:"base",shadow:"dark-lg",children:[a.jsx(Fe,{tooltip:`${s("unifiedCanvas.previous")} (Left)`,"aria-label":`${s("unifiedCanvas.previous")} (Left)`,icon:a.jsx(dte,{}),onClick:d,colorScheme:"accent",isDisabled:!n}),a.jsx(Xe,{colorScheme:"base",pointerEvents:"none",isDisabled:!n,minW:20,children:`${r+1}/${o}`}),a.jsx(Fe,{tooltip:`${s("unifiedCanvas.next")} (Right)`,"aria-label":`${s("unifiedCanvas.next")} (Right)`,icon:a.jsx(fte,{}),onClick:f,colorScheme:"accent",isDisabled:!n})]}),a.jsxs($t,{isAttached:!0,borderRadius:"base",shadow:"dark-lg",children:[a.jsx(Fe,{tooltip:`${s("unifiedCanvas.accept")} (Enter)`,"aria-label":`${s("unifiedCanvas.accept")} (Enter)`,icon:a.jsx($M,{}),onClick:m,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s(n?"unifiedCanvas.showResultsOn":"unifiedCanvas.showResultsOff"),"aria-label":s(n?"unifiedCanvas.showResultsOn":"unifiedCanvas.showResultsOff"),"data-alert":!n,icon:n?a.jsx(Ete,{}):a.jsx(Pte,{}),onClick:g,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s("unifiedCanvas.saveToGallery"),"aria-label":s("unifiedCanvas.saveToGallery"),isDisabled:!h||!h.is_intermediate,icon:a.jsx(gf,{}),onClick:b,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s("unifiedCanvas.discardAll"),"aria-label":s("unifiedCanvas.discardAll"),icon:a.jsx(Nc,{}),onClick:y,colorScheme:"error",fontSize:20})]})]}):null},txe=i.memo(exe),uc=e=>Math.round(e*100)/100,nxe=()=>{const e=H(c=>c.canvas.layerState),t=H(c=>c.canvas.boundingBoxCoordinates),n=H(c=>c.canvas.boundingBoxDimensions),r=H(c=>c.canvas.isMaskEnabled),o=H(c=>c.canvas.shouldPreserveMaskedArea),[s,l]=i.useState();return i.useEffect(()=>{l(void 0)},[e,t,n,r,o]),nne(async()=>{const c=await E$(e,t,n,r,o);if(!c)return;const{baseImageData:d,maskImageData:f}=c,m=M$(d,f);l(m)},1e3,[e,t,n,r,o]),s},rxe=()=>{const e=nxe(),{t}=W(),n=i.useMemo(()=>({txt2img:t("common.txt2img"),img2img:t("common.img2img"),inpaint:t("common.inpaint"),outpaint:t("common.outpaint")}),[t]);return a.jsxs(Ie,{children:[t("accessibility.mode"),":"," ",e?n[e]:"..."]})},oxe=i.memo(rxe),sxe=fe([pe],({canvas:e})=>{const{cursorPosition:t}=e,{cursorX:n,cursorY:r}=t?{cursorX:t.x,cursorY:t.y}:{cursorX:-1,cursorY:-1};return{cursorCoordinatesString:`(${uc(n)}, ${uc(r)})`}});function axe(){const{cursorCoordinatesString:e}=H(sxe),{t}=W();return a.jsx(Ie,{children:`${t("unifiedCanvas.cursorPosition")}: ${e}`})}const fx="var(--invokeai-colors-warning-500)",lxe=fe([pe],({canvas:e})=>{const{stageDimensions:{width:t,height:n},stageCoordinates:{x:r,y:o},boundingBoxDimensions:{width:s,height:l},scaledBoundingBoxDimensions:{width:c,height:d},boundingBoxCoordinates:{x:f,y:m},stageScale:h,shouldShowCanvasDebugInfo:g,layer:b,boundingBoxScaleMethod:y,shouldPreserveMaskedArea:x}=e;let w="inherit";return(y==="none"&&(s<512||l<512)||y==="manual"&&c*d<512*512)&&(w=fx),{activeLayerColor:b==="mask"?fx:"inherit",layer:b,boundingBoxColor:w,boundingBoxCoordinatesString:`(${uc(f)}, ${uc(m)})`,boundingBoxDimensionsString:`${s}×${l}`,scaledBoundingBoxDimensionsString:`${c}×${d}`,canvasCoordinatesString:`${uc(r)}×${uc(o)}`,canvasDimensionsString:`${t}×${n}`,canvasScaleString:Math.round(h*100),shouldShowCanvasDebugInfo:g,shouldShowBoundingBox:y!=="auto",shouldShowScaledBoundingBox:y!=="none",shouldPreserveMaskedArea:x}}),ixe=()=>{const{activeLayerColor:e,layer:t,boundingBoxColor:n,boundingBoxCoordinatesString:r,boundingBoxDimensionsString:o,scaledBoundingBoxDimensionsString:s,shouldShowScaledBoundingBox:l,canvasCoordinatesString:c,canvasDimensionsString:d,canvasScaleString:f,shouldShowCanvasDebugInfo:m,shouldShowBoundingBox:h,shouldPreserveMaskedArea:g}=H(lxe),{t:b}=W();return a.jsxs($,{sx:{flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,opacity:.65,display:"flex",fontSize:"sm",padding:1,px:2,minWidth:48,margin:1,borderRadius:"base",pointerEvents:"none",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(oxe,{}),a.jsx(Ie,{style:{color:e},children:`${b("unifiedCanvas.activeLayer")}: ${b(`unifiedCanvas.${t}`)}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasScale")}: ${f}%`}),g&&a.jsxs(Ie,{style:{color:fx},children:[b("unifiedCanvas.preserveMaskedArea"),": ",b("common.on")]}),h&&a.jsx(Ie,{style:{color:n},children:`${b("unifiedCanvas.boundingBox")}: ${o}`}),l&&a.jsx(Ie,{style:{color:n},children:`${b("unifiedCanvas.scaledBoundingBox")}: ${s}`}),m&&a.jsxs(a.Fragment,{children:[a.jsx(Ie,{children:`${b("unifiedCanvas.boundingBoxPosition")}: ${r}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasDimensions")}: ${d}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasPosition")}: ${c}`}),a.jsx(axe,{})]})]})},cxe=i.memo(ixe),uxe=fe([pe],({canvas:e,generation:t})=>{const{boundingBoxCoordinates:n,boundingBoxDimensions:r,stageScale:o,isDrawing:s,isTransformingBoundingBox:l,isMovingBoundingBox:c,tool:d,shouldSnapToGrid:f}=e,{aspectRatio:m}=t;return{boundingBoxCoordinates:n,boundingBoxDimensions:r,isDrawing:s,isMovingBoundingBox:c,isTransformingBoundingBox:l,stageScale:o,shouldSnapToGrid:f,tool:d,hitStrokeWidth:20/o,aspectRatio:m}}),dxe=e=>{const{...t}=e,n=te(),{boundingBoxCoordinates:r,boundingBoxDimensions:o,isDrawing:s,isMovingBoundingBox:l,isTransformingBoundingBox:c,stageScale:d,shouldSnapToGrid:f,tool:m,hitStrokeWidth:h,aspectRatio:g}=H(uxe),b=i.useRef(null),y=i.useRef(null),[x,w]=i.useState(!1);i.useEffect(()=>{var G;!b.current||!y.current||(b.current.nodes([y.current]),(G=b.current.getLayer())==null||G.batchDraw())},[]);const S=64*d;tt("N",()=>{n(Mm(!f))});const j=i.useCallback(G=>{if(!f){n(Rv({x:Math.floor(G.target.x()),y:Math.floor(G.target.y())}));return}const q=G.target.x(),Y=G.target.y(),Q=kr(q,64),V=kr(Y,64);G.target.x(Q),G.target.y(V),n(Rv({x:Q,y:V}))},[n,f]),_=i.useCallback(()=>{if(!y.current)return;const G=y.current,q=G.scaleX(),Y=G.scaleY(),Q=Math.round(G.width()*q),V=Math.round(G.height()*Y),se=Math.round(G.x()),ee=Math.round(G.y());if(g){const le=kr(Q/g,64);n(es({width:Q,height:le}))}else n(es({width:Q,height:V}));n(Rv({x:f?Ku(se,64):se,y:f?Ku(ee,64):ee})),G.scaleX(1),G.scaleY(1)},[n,f,g]),I=i.useCallback((G,q,Y)=>{const Q=G.x%S,V=G.y%S;return{x:Ku(q.x,S)+Q,y:Ku(q.y,S)+V}},[S]),E=i.useCallback(()=>{n(Av(!0))},[n]),M=i.useCallback(()=>{n(Av(!1)),n(Tv(!1)),n(Sp(!1)),w(!1)},[n]),D=i.useCallback(()=>{n(Tv(!0))},[n]),R=i.useCallback(()=>{n(Av(!1)),n(Tv(!1)),n(Sp(!1)),w(!1)},[n]),N=i.useCallback(()=>{w(!0)},[]),O=i.useCallback(()=>{!c&&!l&&w(!1)},[l,c]),T=i.useCallback(()=>{n(Sp(!0))},[n]),U=i.useCallback(()=>{n(Sp(!1))},[n]);return a.jsxs(Ns,{...t,children:[a.jsx($s,{height:o.height,width:o.width,x:r.x,y:r.y,onMouseEnter:T,onMouseOver:T,onMouseLeave:U,onMouseOut:U}),a.jsx($s,{draggable:!0,fillEnabled:!1,height:o.height,hitStrokeWidth:h,listening:!s&&m==="move",onDragStart:D,onDragEnd:R,onDragMove:j,onMouseDown:D,onMouseOut:O,onMouseOver:N,onMouseEnter:N,onMouseUp:R,onTransform:_,onTransformEnd:M,ref:y,stroke:x?"rgba(255,255,255,0.7)":"white",strokeWidth:(x?8:1)/d,width:o.width,x:r.x,y:r.y}),a.jsx(jbe,{anchorCornerRadius:3,anchorDragBoundFunc:I,anchorFill:"rgba(212,216,234,1)",anchorSize:15,anchorStroke:"rgb(42,42,42)",borderDash:[4,4],borderEnabled:!0,borderStroke:"black",draggable:!1,enabledAnchors:m==="move"?void 0:[],flipEnabled:!1,ignoreStroke:!0,keepRatio:!1,listening:!s&&m==="move",onDragStart:D,onDragEnd:R,onMouseDown:E,onMouseUp:M,onTransformEnd:M,ref:b,rotateEnabled:!1})]})},fxe=i.memo(dxe),pxe=fe(pe,({canvas:e})=>{const{cursorPosition:t,brushSize:n,colorPickerColor:r,maskColor:o,brushColor:s,tool:l,layer:c,shouldShowBrush:d,isMovingBoundingBox:f,isTransformingBoundingBox:m,stageScale:h,stageDimensions:g,boundingBoxCoordinates:b,boundingBoxDimensions:y,shouldRestrictStrokesToBox:x}=e,w=x?{clipX:b.x,clipY:b.y,clipWidth:y.width,clipHeight:y.height}:{};return{cursorPosition:t,brushX:t?t.x:g.width/2,brushY:t?t.y:g.height/2,radius:n/2,colorPickerOuterRadius:vS/h,colorPickerInnerRadius:(vS-K1+1)/h,maskColorString:Ql({...o,a:.5}),brushColorString:Ql(s),colorPickerColorString:Ql(r),tool:l,layer:c,shouldShowBrush:d,shouldDrawBrushPreview:!(f||m||!t)&&d,strokeWidth:1.5/h,dotRadius:1.5/h,clip:w}}),mxe=e=>{const{...t}=e,{brushX:n,brushY:r,radius:o,maskColorString:s,tool:l,layer:c,shouldDrawBrushPreview:d,dotRadius:f,strokeWidth:m,brushColorString:h,colorPickerColorString:g,colorPickerInnerRadius:b,colorPickerOuterRadius:y,clip:x}=H(pxe);return d?a.jsxs(Ns,{listening:!1,...x,...t,children:[l==="colorPicker"?a.jsxs(a.Fragment,{children:[a.jsx($l,{x:n,y:r,radius:y,stroke:h,strokeWidth:K1,strokeScaleEnabled:!1}),a.jsx($l,{x:n,y:r,radius:b,stroke:g,strokeWidth:K1,strokeScaleEnabled:!1})]}):a.jsxs(a.Fragment,{children:[a.jsx($l,{x:n,y:r,radius:o,fill:c==="mask"?s:h,globalCompositeOperation:l==="eraser"?"destination-out":"source-out"}),a.jsx($l,{x:n,y:r,radius:o,stroke:"rgba(255,255,255,0.4)",strokeWidth:m*2,strokeEnabled:!0,listening:!1}),a.jsx($l,{x:n,y:r,radius:o,stroke:"rgba(0,0,0,1)",strokeWidth:m,strokeEnabled:!0,listening:!1})]}),a.jsx($l,{x:n,y:r,radius:f*2,fill:"rgba(255,255,255,0.4)",listening:!1}),a.jsx($l,{x:n,y:r,radius:f,fill:"rgba(0,0,0,1)",listening:!1})]}):null},hxe=i.memo(mxe),gxe=fe([pe,Lo],({canvas:e},t)=>{const{isMaskEnabled:n,stageScale:r,shouldShowBoundingBox:o,isTransformingBoundingBox:s,isMouseOverBoundingBox:l,isMovingBoundingBox:c,stageDimensions:d,stageCoordinates:f,tool:m,isMovingStage:h,shouldShowIntermediates:g,shouldShowGrid:b,shouldRestrictStrokesToBox:y,shouldAntialias:x}=e;let w="none";return m==="move"||t?h?w="grabbing":w="grab":s?w=void 0:y&&!l&&(w="default"),{isMaskEnabled:n,isModifyingBoundingBox:s||c,shouldShowBoundingBox:o,shouldShowGrid:b,stageCoordinates:f,stageCursor:w,stageDimensions:d,stageScale:r,tool:m,isStaging:t,shouldShowIntermediates:g,shouldAntialias:x}}),vxe=je(_be,{shouldForwardProp:e=>!["sx"].includes(e)}),bxe=()=>{const{isMaskEnabled:e,isModifyingBoundingBox:t,shouldShowBoundingBox:n,shouldShowGrid:r,stageCoordinates:o,stageCursor:s,stageDimensions:l,stageScale:c,tool:d,isStaging:f,shouldShowIntermediates:m,shouldAntialias:h}=H(gxe);p1e();const g=te(),b=i.useRef(null),y=i.useRef(null),x=i.useRef(null),w=i.useCallback(G=>{O$(G),y.current=G},[]),S=i.useCallback(G=>{D$(G),x.current=G},[]),j=i.useRef({x:0,y:0}),_=i.useRef(!1),I=w1e(y),E=h1e(y),M=y1e(y,_),D=v1e(y,_,j),R=b1e(),{handleDragStart:N,handleDragMove:O,handleDragEnd:T}=d1e(),U=i.useCallback(G=>G.evt.preventDefault(),[]);return i.useEffect(()=>{if(!b.current)return;const G=new ResizeObserver(Q=>{for(const V of Q)if(V.contentBoxSize){const{width:se,height:ee}=V.contentRect;g(bS({width:se,height:ee}))}});G.observe(b.current);const{width:q,height:Y}=b.current.getBoundingClientRect();return g(bS({width:q,height:Y})),()=>{G.disconnect()}},[g]),a.jsxs($,{id:"canvas-container",ref:b,sx:{position:"relative",height:"100%",width:"100%",borderRadius:"base"},children:[a.jsx(Ie,{sx:{position:"absolute"},children:a.jsxs(vxe,{tabIndex:-1,ref:w,sx:{outline:"none",overflow:"hidden",cursor:s||void 0,canvas:{outline:"none"}},x:o.x,y:o.y,width:l.width,height:l.height,scale:{x:c,y:c},onTouchStart:E,onTouchMove:D,onTouchEnd:M,onMouseDown:E,onMouseLeave:R,onMouseMove:D,onMouseUp:M,onDragStart:N,onDragMove:O,onDragEnd:T,onContextMenu:U,onWheel:I,draggable:(d==="move"||f)&&!t,children:[a.jsx(Gu,{id:"grid",visible:r,children:a.jsx(Dbe,{})}),a.jsx(Gu,{id:"base",ref:S,listening:!1,imageSmoothingEnabled:h,children:a.jsx(Xbe,{})}),a.jsxs(Gu,{id:"mask",visible:e&&!f,listening:!1,children:[a.jsx(Bbe,{visible:!0,listening:!1}),a.jsx(Lbe,{listening:!1})]}),a.jsx(Gu,{children:a.jsx(Ebe,{})}),a.jsxs(Gu,{id:"preview",imageSmoothingEnabled:h,children:[!f&&a.jsx(hxe,{visible:d!=="move",listening:!1}),a.jsx(Zbe,{visible:f}),m&&a.jsx(Tbe,{}),a.jsx(fxe,{visible:n&&!f})]})]})}),a.jsx(cxe,{}),a.jsx(txe,{})]})},xxe=i.memo(bxe);function yxe(e,t,n=250){const[r,o]=i.useState(0);return i.useEffect(()=>{const s=setTimeout(()=>{r===1&&e(),o(0)},n);return r===2&&t(),()=>clearTimeout(s)},[r,e,t,n]),()=>o(s=>s+1)}const O1={width:6,height:6,borderColor:"base.100"},Cxe={".react-colorful__hue-pointer":O1,".react-colorful__saturation-pointer":O1,".react-colorful__alpha-pointer":O1,gap:2,flexDir:"column"},om="4.2rem",wxe=e=>{const{color:t,onChange:n,withNumberInput:r,...o}=e,s=i.useCallback(f=>n({...t,r:f}),[t,n]),l=i.useCallback(f=>n({...t,g:f}),[t,n]),c=i.useCallback(f=>n({...t,b:f}),[t,n]),d=i.useCallback(f=>n({...t,a:f}),[t,n]);return a.jsxs($,{sx:Cxe,children:[a.jsx(hO,{color:t,onChange:n,style:{width:"100%"},...o}),r&&a.jsxs($,{children:[a.jsx(_s,{value:t.r,onChange:s,min:0,max:255,step:1,label:"Red",w:om}),a.jsx(_s,{value:t.g,onChange:l,min:0,max:255,step:1,label:"Green",w:om}),a.jsx(_s,{value:t.b,onChange:c,min:0,max:255,step:1,label:"Blue",w:om}),a.jsx(_s,{value:t.a,onChange:d,step:.1,min:0,max:1,label:"Alpha",w:om,isInteger:!1})]})]})},xD=i.memo(wxe),Sxe=fe([pe,Lo],({canvas:e},t)=>{const{maskColor:n,layer:r,isMaskEnabled:o,shouldPreserveMaskedArea:s}=e;return{layer:r,maskColor:n,maskColorString:Ql(n),isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:t}}),kxe=()=>{const e=te(),{t}=W(),{layer:n,maskColor:r,isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:l}=H(Sxe);tt(["q"],()=>{c()},{enabled:()=>!l,preventDefault:!0},[n]),tt(["shift+c"],()=>{d()},{enabled:()=>!l,preventDefault:!0},[]),tt(["h"],()=>{f()},{enabled:()=>!l,preventDefault:!0},[o]);const c=i.useCallback(()=>{e(S3(n==="mask"?"base":"mask"))},[e,n]),d=i.useCallback(()=>{e(y3())},[e]),f=i.useCallback(()=>{e(Wx(!o))},[e,o]),m=i.useCallback(async()=>{e(R$())},[e]),h=i.useCallback(b=>{e(A$(b.target.checked))},[e]),g=i.useCallback(b=>{e(T$(b))},[e]);return a.jsx(xf,{triggerComponent:a.jsx($t,{children:a.jsx(Fe,{"aria-label":t("unifiedCanvas.maskingOptions"),tooltip:t("unifiedCanvas.maskingOptions"),icon:a.jsx(UM,{}),isChecked:n==="mask",isDisabled:l})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(yr,{label:`${t("unifiedCanvas.enableMask")} (H)`,isChecked:o,onChange:f}),a.jsx(yr,{label:t("unifiedCanvas.preserveMaskedArea"),isChecked:s,onChange:h}),a.jsx(Ie,{sx:{paddingTop:2,paddingBottom:2},children:a.jsx(xD,{color:r,onChange:g})}),a.jsx(Xe,{size:"sm",leftIcon:a.jsx(gf,{}),onClick:m,children:t("unifiedCanvas.saveMask")}),a.jsx(Xe,{size:"sm",leftIcon:a.jsx(ao,{}),onClick:d,children:t("unifiedCanvas.clearMask")})]})})},jxe=i.memo(kxe),_xe=fe([pe,tr],({canvas:e},t)=>{const{futureLayerStates:n}=e;return{canRedo:n.length>0,activeTabName:t}});function Ixe(){const e=te(),{canRedo:t,activeTabName:n}=H(_xe),{t:r}=W(),o=i.useCallback(()=>{e(N$())},[e]);return tt(["meta+shift+z","ctrl+shift+z","control+y","meta+y"],()=>{o()},{enabled:()=>t,preventDefault:!0},[n,t]),a.jsx(Fe,{"aria-label":`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,tooltip:`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,icon:a.jsx(Vte,{}),onClick:o,isDisabled:!t})}const Pxe=()=>{const e=H(Lo),t=te(),{t:n}=W(),r=i.useCallback(()=>t($$()),[t]);return a.jsxs(t0,{title:n("unifiedCanvas.clearCanvasHistory"),acceptCallback:r,acceptButtonText:n("unifiedCanvas.clearHistory"),triggerComponent:a.jsx(Xe,{size:"sm",leftIcon:a.jsx(ao,{}),isDisabled:e,children:n("unifiedCanvas.clearCanvasHistory")}),children:[a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryMessage")}),a.jsx("br",{}),a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryConfirm")})]})},Exe=i.memo(Pxe),Mxe=fe([pe],({canvas:e})=>{const{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:l,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:f}=e;return{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:l,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:f}}),Oxe=()=>{const e=te(),{t}=W(),{shouldAutoSave:n,shouldCropToBoundingBoxOnSave:r,shouldDarkenOutsideBoundingBox:o,shouldShowCanvasDebugInfo:s,shouldShowGrid:l,shouldShowIntermediates:c,shouldSnapToGrid:d,shouldRestrictStrokesToBox:f,shouldAntialias:m}=H(Mxe);tt(["n"],()=>{e(Mm(!d))},{enabled:!0,preventDefault:!0},[d]);const h=i.useCallback(I=>e(Mm(I.target.checked)),[e]),g=i.useCallback(I=>e(L$(I.target.checked)),[e]),b=i.useCallback(I=>e(F$(I.target.checked)),[e]),y=i.useCallback(I=>e(z$(I.target.checked)),[e]),x=i.useCallback(I=>e(B$(I.target.checked)),[e]),w=i.useCallback(I=>e(H$(I.target.checked)),[e]),S=i.useCallback(I=>e(W$(I.target.checked)),[e]),j=i.useCallback(I=>e(V$(I.target.checked)),[e]),_=i.useCallback(I=>e(U$(I.target.checked)),[e]);return a.jsx(xf,{isLazy:!1,triggerComponent:a.jsx(Fe,{tooltip:t("unifiedCanvas.canvasSettings"),"aria-label":t("unifiedCanvas.canvasSettings"),icon:a.jsx(QM,{})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(yr,{label:t("unifiedCanvas.showIntermediates"),isChecked:c,onChange:g}),a.jsx(yr,{label:t("unifiedCanvas.showGrid"),isChecked:l,onChange:b}),a.jsx(yr,{label:t("unifiedCanvas.snapToGrid"),isChecked:d,onChange:h}),a.jsx(yr,{label:t("unifiedCanvas.darkenOutsideSelection"),isChecked:o,onChange:y}),a.jsx(yr,{label:t("unifiedCanvas.autoSaveToGallery"),isChecked:n,onChange:x}),a.jsx(yr,{label:t("unifiedCanvas.saveBoxRegionOnly"),isChecked:r,onChange:w}),a.jsx(yr,{label:t("unifiedCanvas.limitStrokesToBox"),isChecked:f,onChange:S}),a.jsx(yr,{label:t("unifiedCanvas.showCanvasDebugInfo"),isChecked:s,onChange:j}),a.jsx(yr,{label:t("unifiedCanvas.antialiasing"),isChecked:m,onChange:_}),a.jsx(Exe,{})]})})},Dxe=i.memo(Oxe),Rxe=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,brushColor:r,brushSize:o}=e;return{tool:n,isStaging:t,brushColor:r,brushSize:o}}),Axe=()=>{const e=te(),{tool:t,brushColor:n,brushSize:r,isStaging:o}=H(Rxe),{t:s}=W();tt(["b"],()=>{l()},{enabled:()=>!o,preventDefault:!0},[]),tt(["e"],()=>{c()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["c"],()=>{d()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["shift+f"],()=>{f()},{enabled:()=>!o,preventDefault:!0}),tt(["delete","backspace"],()=>{m()},{enabled:()=>!o,preventDefault:!0}),tt(["BracketLeft"],()=>{r-5<=5?e(kp(Math.max(r-1,1))):e(kp(Math.max(r-5,1)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["BracketRight"],()=>{e(kp(Math.min(r+5,500)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["Shift+BracketLeft"],()=>{e(Nv({...n,a:Zl(n.a-.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]),tt(["Shift+BracketRight"],()=>{e(Nv({...n,a:Zl(n.a+.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]);const l=i.useCallback(()=>{e(fc("brush"))},[e]),c=i.useCallback(()=>{e(fc("eraser"))},[e]),d=i.useCallback(()=>{e(fc("colorPicker"))},[e]),f=i.useCallback(()=>{e(G$())},[e]),m=i.useCallback(()=>{e(K$())},[e]),h=i.useCallback(b=>{e(kp(b))},[e]),g=i.useCallback(b=>{e(Nv(b))},[e]);return a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.brush")} (B)`,tooltip:`${s("unifiedCanvas.brush")} (B)`,icon:a.jsx(zte,{}),isChecked:t==="brush"&&!o,onClick:l,isDisabled:o}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.eraser")} (E)`,tooltip:`${s("unifiedCanvas.eraser")} (E)`,icon:a.jsx(Ste,{}),isChecked:t==="eraser"&&!o,isDisabled:o,onClick:c}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,tooltip:`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,icon:a.jsx(Mte,{}),isDisabled:o,onClick:f}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,tooltip:`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,icon:a.jsx(nl,{style:{transform:"rotate(45deg)"}}),isDisabled:o,onClick:m}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.colorPicker")} (C)`,tooltip:`${s("unifiedCanvas.colorPicker")} (C)`,icon:a.jsx(Ite,{}),isChecked:t==="colorPicker"&&!o,isDisabled:o,onClick:d}),a.jsx(xf,{triggerComponent:a.jsx(Fe,{"aria-label":s("unifiedCanvas.brushOptions"),tooltip:s("unifiedCanvas.brushOptions"),icon:a.jsx(qM,{})}),children:a.jsxs($,{minWidth:60,direction:"column",gap:4,width:"100%",children:[a.jsx($,{gap:4,justifyContent:"space-between",children:a.jsx(nt,{label:s("unifiedCanvas.brushSize"),value:r,withInput:!0,onChange:h,sliderNumberInputProps:{max:500}})}),a.jsx(Ie,{sx:{width:"100%",paddingTop:2,paddingBottom:2},children:a.jsx(xD,{withNumberInput:!0,color:n,onChange:g})})]})})]})},Txe=i.memo(Axe),Nxe=fe([pe,tr],({canvas:e},t)=>{const{pastLayerStates:n}=e;return{canUndo:n.length>0,activeTabName:t}});function $xe(){const e=te(),{t}=W(),{canUndo:n,activeTabName:r}=H(Nxe),o=i.useCallback(()=>{e(q$())},[e]);return tt(["meta+z","ctrl+z"],()=>{o()},{enabled:()=>n,preventDefault:!0},[r,n]),a.jsx(Fe,{"aria-label":`${t("unifiedCanvas.undo")} (Ctrl+Z)`,tooltip:`${t("unifiedCanvas.undo")} (Ctrl+Z)`,icon:a.jsx(Ng,{}),onClick:o,isDisabled:!n})}const Lxe=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,shouldCropToBoundingBoxOnSave:r,layer:o,isMaskEnabled:s}=e;return{isStaging:t,isMaskEnabled:s,tool:n,layer:o,shouldCropToBoundingBoxOnSave:r}}),Fxe=()=>{const e=te(),{isStaging:t,isMaskEnabled:n,layer:r,tool:o}=H(Lxe),s=G1(),{t:l}=W(),{isClipboardAPIAvailable:c}=j7(),{getUploadButtonProps:d,getUploadInputProps:f}=S2({postUploadAction:{type:"SET_CANVAS_INITIAL_IMAGE"}});tt(["v"],()=>{m()},{enabled:()=>!t,preventDefault:!0},[]),tt(["r"],()=>{g()},{enabled:()=>!0,preventDefault:!0},[s]),tt(["shift+m"],()=>{y()},{enabled:()=>!t,preventDefault:!0},[s]),tt(["shift+s"],()=>{x()},{enabled:()=>!t,preventDefault:!0},[s]),tt(["meta+c","ctrl+c"],()=>{w()},{enabled:()=>!t&&c,preventDefault:!0},[s,c]),tt(["shift+d"],()=>{S()},{enabled:()=>!t,preventDefault:!0},[s]);const m=i.useCallback(()=>{e(fc("move"))},[e]),h=yxe(()=>g(!1),()=>g(!0)),g=(_=!1)=>{const I=G1();if(!I)return;const E=I.getClientRect({skipTransform:!0});e(eL({contentRect:E,shouldScaleTo1:_}))},b=i.useCallback(()=>{e(jI())},[e]),y=i.useCallback(()=>{e(X$())},[e]),x=i.useCallback(()=>{e(Q$())},[e]),w=i.useCallback(()=>{c&&e(Y$())},[e,c]),S=i.useCallback(()=>{e(Z$())},[e]),j=i.useCallback(_=>{const I=_;e(S3(I)),I==="mask"&&!n&&e(Wx(!0))},[e,n]);return a.jsxs($,{sx:{alignItems:"center",gap:2,flexWrap:"wrap"},children:[a.jsx(Ie,{w:24,children:a.jsx(yn,{tooltip:`${l("unifiedCanvas.layer")} (Q)`,value:r,data:J$,onChange:j,disabled:t})}),a.jsx(jxe,{}),a.jsx(Txe,{}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.move")} (V)`,tooltip:`${l("unifiedCanvas.move")} (V)`,icon:a.jsx(pte,{}),isChecked:o==="move"||t,onClick:m}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.resetView")} (R)`,tooltip:`${l("unifiedCanvas.resetView")} (R)`,icon:a.jsx(yte,{}),onClick:h})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.mergeVisible")} (Shift+M)`,tooltip:`${l("unifiedCanvas.mergeVisible")} (Shift+M)`,icon:a.jsx($te,{}),onClick:y,isDisabled:t}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.saveToGallery")} (Shift+S)`,tooltip:`${l("unifiedCanvas.saveToGallery")} (Shift+S)`,icon:a.jsx(gf,{}),onClick:x,isDisabled:t}),c&&a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,tooltip:`${l("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,icon:a.jsx(ru,{}),onClick:w,isDisabled:t}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.downloadAsImage")} (Shift+D)`,tooltip:`${l("unifiedCanvas.downloadAsImage")} (Shift+D)`,icon:a.jsx(ou,{}),onClick:S,isDisabled:t})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx($xe,{}),a.jsx(Ixe,{})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("common.upload")}`,tooltip:`${l("common.upload")}`,icon:a.jsx($g,{}),isDisabled:t,...d()}),a.jsx("input",{...f()}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.clearCanvas")}`,tooltip:`${l("unifiedCanvas.clearCanvas")}`,icon:a.jsx(ao,{}),onClick:b,colorScheme:"error",isDisabled:t})]}),a.jsx($t,{isAttached:!0,children:a.jsx(Dxe,{})})]})},zxe=i.memo(Fxe),iI={id:"canvas-intial-image",actionType:"SET_CANVAS_INITIAL_IMAGE"},Bxe=()=>{const{t:e}=W(),{isOver:t,setNodeRef:n,active:r}=$8({id:"unifiedCanvas",data:iI});return a.jsxs($,{layerStyle:"first",ref:n,tabIndex:-1,sx:{flexDirection:"column",alignItems:"center",gap:4,p:2,borderRadius:"base",w:"full",h:"full"},children:[a.jsx(zxe,{}),a.jsx(xxe,{}),L8(iI,r)&&a.jsx(F8,{isOver:t,label:e("toast.setCanvasInitialImage")})]})},Hxe=i.memo(Bxe),Wxe=()=>a.jsx(Hxe,{}),Vxe=i.memo(Wxe),Uxe=[{id:"txt2img",translationKey:"common.txt2img",icon:a.jsx(An,{as:Rte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(c1e,{})},{id:"img2img",translationKey:"common.img2img",icon:a.jsx(An,{as:si,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Mme,{})},{id:"unifiedCanvas",translationKey:"common.unifiedCanvas",icon:a.jsx(An,{as:Zse,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Vxe,{})},{id:"nodes",translationKey:"common.nodes",icon:a.jsx(An,{as:e0,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(bve,{})},{id:"modelManager",translationKey:"modelManager.modelManager",icon:a.jsx(An,{as:Cte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Phe,{})},{id:"queue",translationKey:"queue.queue",icon:a.jsx(An,{as:Kte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(l1e,{})}],Gxe=fe([pe],({config:e})=>{const{disabledTabs:t}=e;return Uxe.filter(r=>!t.includes(r.id))}),Kxe=448,qxe=448,Xxe=360,Qxe=["modelManager","queue"],Yxe=["modelManager","queue"],Zxe=()=>{const e=H(tL),t=H(tr),n=H(Gxe),{t:r}=W(),o=te(),s=i.useCallback(O=>{O.target instanceof HTMLElement&&O.target.blur()},[]),l=i.useMemo(()=>n.map(O=>a.jsx(Ut,{hasArrow:!0,label:String(r(O.translationKey)),placement:"end",children:a.jsxs(mr,{onClick:s,children:[a.jsx(L3,{children:String(r(O.translationKey))}),O.icon]})},O.id)),[n,r,s]),c=i.useMemo(()=>n.map(O=>a.jsx($r,{children:O.content},O.id)),[n]),d=i.useCallback(O=>{const T=n[O];T&&o(Js(T.id))},[o,n]),{minSize:f,isCollapsed:m,setIsCollapsed:h,ref:g,reset:b,expand:y,collapse:x,toggle:w}=v_(Kxe,"pixels"),{ref:S,minSize:j,isCollapsed:_,setIsCollapsed:I,reset:E,expand:M,collapse:D,toggle:R}=v_(Xxe,"pixels");tt("f",()=>{_||m?(M(),y()):(x(),D())},[o,_,m]),tt(["t","o"],()=>{w()},[o]),tt("g",()=>{R()},[o]);const N=R2();return a.jsxs(ci,{variant:"appTabs",defaultIndex:e,index:e,onChange:d,sx:{flexGrow:1,gap:4},isLazy:!0,children:[a.jsxs(ui,{sx:{pt:2,gap:4,flexDir:"column"},children:[l,a.jsx(Wr,{})]}),a.jsxs(o0,{id:"app",autoSaveId:"app",direction:"horizontal",style:{height:"100%",width:"100%"},storage:N,units:"pixels",children:[!Yxe.includes(t)&&a.jsxs(a.Fragment,{children:[a.jsx(rl,{order:0,id:"side",ref:g,defaultSize:f,minSize:f,onCollapse:h,collapsible:!0,children:t==="nodes"?a.jsx(mce,{}):a.jsx(Xpe,{})}),a.jsx(Bh,{onDoubleClick:b,collapsedDirection:m?"left":void 0}),a.jsx(bce,{isSidePanelCollapsed:m,sidePanelRef:g})]}),a.jsx(rl,{id:"main",order:1,minSize:qxe,children:a.jsx(eu,{style:{height:"100%",width:"100%"},children:c})}),!Qxe.includes(t)&&a.jsxs(a.Fragment,{children:[a.jsx(Bh,{onDoubleClick:E,collapsedDirection:_?"right":void 0}),a.jsx(rl,{id:"gallery",ref:S,order:2,defaultSize:j,minSize:j,onCollapse:I,collapsible:!0,children:a.jsx(zae,{})}),a.jsx(gce,{isGalleryCollapsed:_,galleryPanelRef:S})]})]})]})},Jxe=i.memo(Zxe),eye=i.createContext(null),D1={didCatch:!1,error:null};class tye extends i.Component{constructor(t){super(t),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=D1}static getDerivedStateFromError(t){return{didCatch:!0,error:t}}resetErrorBoundary(){const{error:t}=this.state;if(t!==null){for(var n,r,o=arguments.length,s=new Array(o),l=0;l0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return e.length!==t.length||e.some((n,r)=>!Object.is(n,t[r]))}function rye(e={}){let t;if(e.repoUrl)t=e.repoUrl;else if(e.user&&e.repo)t=`https://github.com/${e.user}/${e.repo}`;else throw new Error("You need to specify either the `repoUrl` option or both the `user` and `repo` options");const n=new URL(`${t}/issues/new`),r=["body","title","labels","template","milestone","assignee","projects"];for(const o of r){let s=e[o];if(s!==void 0){if(o==="labels"||o==="projects"){if(!Array.isArray(s))throw new TypeError(`The \`${o}\` option should be an array`);s=s.join(",")}n.searchParams.set(o,s)}}return n.toString()}const oye=[EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(e=>[e.name,e]),sye=new Map(oye),aye=sye,lye=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1}],px=new WeakSet,iye=e=>{px.add(e);const t=e.toJSON();return px.delete(e),t},cye=e=>aye.get(e)??Error,yD=({from:e,seen:t,to:n,forceEnumerable:r,maxDepth:o,depth:s,useToJSON:l,serialize:c})=>{if(!n)if(Array.isArray(e))n=[];else if(!c&&cI(e)){const f=cye(e.name);n=new f}else n={};if(t.push(e),s>=o)return n;if(l&&typeof e.toJSON=="function"&&!px.has(e))return iye(e);const d=f=>yD({from:f,seen:[...t],forceEnumerable:r,maxDepth:o,depth:s,useToJSON:l,serialize:c});for(const[f,m]of Object.entries(e)){if(m&&m instanceof Uint8Array&&m.constructor.name==="Buffer"){n[f]="[object Buffer]";continue}if(m!==null&&typeof m=="object"&&typeof m.pipe=="function"){n[f]="[object Stream]";continue}if(typeof m!="function"){if(!m||typeof m!="object"){try{n[f]=m}catch{}continue}if(!t.includes(e[f])){s++,n[f]=d(e[f]);continue}n[f]="[Circular]"}}for(const{property:f,enumerable:m}of lye)typeof e[f]<"u"&&e[f]!==null&&Object.defineProperty(n,f,{value:cI(e[f])?d(e[f]):e[f],enumerable:r?!0:m,configurable:!0,writable:!0});return n};function uye(e,t={}){const{maxDepth:n=Number.POSITIVE_INFINITY,useToJSON:r=!0}=t;return typeof e=="object"&&e!==null?yD({from:e,seen:[],forceEnumerable:!0,maxDepth:n,depth:0,useToJSON:r,serialize:!0}):typeof e=="function"?`[Function: ${e.name||"anonymous"}]`:e}function cI(e){return!!e&&typeof e=="object"&&"name"in e&&"message"in e&&"stack"in e}const dye=({error:e,resetErrorBoundary:t})=>{const n=tg(),{t:r}=W(),o=i.useCallback(()=>{const l=JSON.stringify(uye(e),null,2);navigator.clipboard.writeText(`\`\`\` -${l} -\`\`\``),n({title:"Error Copied"})},[e,n]),s=i.useMemo(()=>rye({user:"invoke-ai",repo:"InvokeAI",template:"BUG_REPORT.yml",title:`[bug]: ${e.name}: ${e.message}`}),[e.message,e.name]);return a.jsx($,{layerStyle:"body",sx:{w:"100vw",h:"100vh",alignItems:"center",justifyContent:"center",p:4},children:a.jsxs($,{layerStyle:"first",sx:{flexDir:"column",borderRadius:"base",justifyContent:"center",gap:8,p:16},children:[a.jsx(or,{children:r("common.somethingWentWrong")}),a.jsx($,{layerStyle:"second",sx:{px:8,py:4,borderRadius:"base",gap:4,justifyContent:"space-between",alignItems:"center"},children:a.jsxs(be,{sx:{fontWeight:600,color:"error.500",_dark:{color:"error.400"}},children:[e.name,": ",e.message]})}),a.jsxs($,{sx:{gap:4},children:[a.jsx(Xe,{leftIcon:a.jsx(sae,{}),onClick:t,children:r("accessibility.resetUI")}),a.jsx(Xe,{leftIcon:a.jsx(ru,{}),onClick:o,children:r("common.copyError")}),a.jsx(ig,{href:s,isExternal:!0,children:a.jsx(Xe,{leftIcon:a.jsx(Xy,{}),children:r("accessibility.createIssue")})})]})]})})},fye=i.memo(dye),pye=fe([pe],({hotkeys:e})=>{const{shift:t,ctrl:n,meta:r}=e;return{shift:t,ctrl:n,meta:r}}),mye=()=>{const e=te(),{shift:t,ctrl:n,meta:r}=H(pye),{queueBack:o,isDisabled:s,isLoading:l}=A7();tt(["ctrl+enter","meta+enter"],o,{enabled:()=>!s&&!l,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[o,s,l]);const{queueFront:c,isDisabled:d,isLoading:f}=L7();return tt(["ctrl+shift+enter","meta+shift+enter"],c,{enabled:()=>!d&&!f,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[c,d,f]),tt("*",()=>{pm("shift")?!t&&e(zr(!0)):t&&e(zr(!1)),pm("ctrl")?!n&&e(xS(!0)):n&&e(xS(!1)),pm("meta")?!r&&e(yS(!0)):r&&e(yS(!1))},{keyup:!0,keydown:!0},[t,n,r]),tt("1",()=>{e(Js("txt2img"))}),tt("2",()=>{e(Js("img2img"))}),tt("3",()=>{e(Js("unifiedCanvas"))}),tt("4",()=>{e(Js("nodes"))}),tt("5",()=>{e(Js("modelManager"))}),null},hye=i.memo(mye),gye=e=>{const t=te(),{recallAllParameters:n}=Sf(),r=zs(),{currentData:o}=jo((e==null?void 0:e.imageName)??Br),{currentData:s}=BI((e==null?void 0:e.imageName)??Br),l=i.useCallback(()=>{o&&(t(HI(o)),t(Js("unifiedCanvas")),r({title:PI("toast.sentToUnifiedCanvas"),status:"info",duration:2500,isClosable:!0}))},[t,r,o]),c=i.useCallback(()=>{o&&t(Qh(o))},[t,o]),d=i.useCallback(()=>{s&&n(s)},[s]);return i.useEffect(()=>{e&&e.action==="sendToCanvas"&&l()},[e,l]),i.useEffect(()=>{e&&e.action==="sendToImg2Img"&&c()},[e,c]),i.useEffect(()=>{e&&e.action==="useAllParameters"&&d()},[e,d]),{handleSendToCanvas:l,handleSendToImg2Img:c,handleUseAllMetadata:d}},vye=e=>(gye(e.selectedImage),null),bye=i.memo(vye),xye={},yye=({config:e=xye,selectedImage:t})=>{const n=H(e8),r=H6("system"),o=te(),s=JM();nL();const l=i.useCallback(()=>(s(),location.reload(),!1),[s]);i.useEffect(()=>{wt.changeLanguage(n)},[n]),i.useEffect(()=>{JI(e)&&(r.info({config:e},"Received config"),o(rL(e)))},[o,e,r]),i.useEffect(()=>{o(oL())},[o]);const c=qh(sL);return a.jsxs(tye,{onReset:l,FallbackComponent:fye,children:[a.jsx(sl,{w:"100vw",h:"100vh",position:"relative",overflow:"hidden",children:a.jsx(SK,{children:a.jsxs(sl,{sx:{gap:4,p:4,gridAutoRows:"min-content auto",w:"full",h:"full"},children:[c||a.jsx(Cne,{}),a.jsx($,{sx:{gap:4,w:"full",h:"full"},children:a.jsx(Jxe,{})})]})})}),a.jsx(rte,{}),a.jsx(Jee,{}),a.jsx(fG,{}),a.jsx(hye,{}),a.jsx(bye,{selectedImage:t})]})},_ye=i.memo(yye);export{_ye as default}; diff --git a/invokeai/frontend/web/dist/assets/App-6125620a.css b/invokeai/frontend/web/dist/assets/App-6125620a.css deleted file mode 100644 index b231132262..0000000000 --- a/invokeai/frontend/web/dist/assets/App-6125620a.css +++ /dev/null @@ -1 +0,0 @@ -.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;-webkit-animation:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:rgba(255,255,255,.5);padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:rgba(0,89,220,.08);border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%} diff --git a/invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js b/invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js deleted file mode 100644 index 739242a035..0000000000 --- a/invokeai/frontend/web/dist/assets/MantineProvider-11ad6165.js +++ /dev/null @@ -1 +0,0 @@ -import{R as d,iE as _,r as h,iP as X}from"./index-31d28826.js";const Y={dark:["#C1C2C5","#A6A7AB","#909296","#5c5f66","#373A40","#2C2E33","#25262b","#1A1B1E","#141517","#101113"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]};function q(r){return()=>({fontFamily:r.fontFamily||"sans-serif"})}var J=Object.defineProperty,x=Object.getOwnPropertySymbols,K=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,z=(r,e,o)=>e in r?J(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,j=(r,e)=>{for(var o in e||(e={}))K.call(e,o)&&z(r,o,e[o]);if(x)for(var o of x(e))Q.call(e,o)&&z(r,o,e[o]);return r};function Z(r){return e=>({WebkitTapHighlightColor:"transparent",[e||"&:focus"]:j({},r.focusRing==="always"||r.focusRing==="auto"?r.focusRingStyles.styles(r):r.focusRingStyles.resetStyles(r)),[e?e.replace(":focus",":focus:not(:focus-visible)"):"&:focus:not(:focus-visible)"]:j({},r.focusRing==="auto"||r.focusRing==="never"?r.focusRingStyles.resetStyles(r):null)})}function y(r){return e=>typeof r.primaryShade=="number"?r.primaryShade:r.primaryShade[e||r.colorScheme]}function w(r){const e=y(r);return(o,n,a=!0,t=!0)=>{if(typeof o=="string"&&o.includes(".")){const[s,l]=o.split("."),g=parseInt(l,10);if(s in r.colors&&g>=0&&g<10)return r.colors[s][typeof n=="number"&&!t?n:g]}const i=typeof n=="number"?n:e();return o in r.colors?r.colors[o][i]:a?r.colors[r.primaryColor][i]:o}}function T(r){let e="";for(let o=1;o{const a={from:(n==null?void 0:n.from)||r.defaultGradient.from,to:(n==null?void 0:n.to)||r.defaultGradient.to,deg:(n==null?void 0:n.deg)||r.defaultGradient.deg};return`linear-gradient(${a.deg}deg, ${e(a.from,o(),!1)} 0%, ${e(a.to,o(),!1)} 100%)`}}function D(r){return e=>{if(typeof e=="number")return`${e/16}${r}`;if(typeof e=="string"){const o=e.replace("px","");if(!Number.isNaN(Number(o)))return`${Number(o)/16}${r}`}return e}}const u=D("rem"),k=D("em");function V({size:r,sizes:e,units:o}){return r in e?e[r]:typeof r=="number"?o==="em"?k(r):u(r):r||e.md}function S(r){return typeof r=="number"?r:typeof r=="string"&&r.includes("rem")?Number(r.replace("rem",""))*16:typeof r=="string"&&r.includes("em")?Number(r.replace("em",""))*16:Number(r)}function er(r){return e=>`@media (min-width: ${k(S(V({size:e,sizes:r.breakpoints})))})`}function or(r){return e=>`@media (max-width: ${k(S(V({size:e,sizes:r.breakpoints}))-1)})`}function nr(r){return/^#?([0-9A-F]{3}){1,2}$/i.test(r)}function tr(r){let e=r.replace("#","");if(e.length===3){const i=e.split("");e=[i[0],i[0],i[1],i[1],i[2],i[2]].join("")}const o=parseInt(e,16),n=o>>16&255,a=o>>8&255,t=o&255;return{r:n,g:a,b:t,a:1}}function ar(r){const[e,o,n,a]=r.replace(/[^0-9,.]/g,"").split(",").map(Number);return{r:e,g:o,b:n,a:a||1}}function C(r){return nr(r)?tr(r):r.startsWith("rgb")?ar(r):{r:0,g:0,b:0,a:1}}function p(r,e){if(typeof r!="string"||e>1||e<0)return"rgba(0, 0, 0, 1)";if(r.startsWith("var(--"))return r;const{r:o,g:n,b:a}=C(r);return`rgba(${o}, ${n}, ${a}, ${e})`}function ir(r=0){return{position:"absolute",top:u(r),right:u(r),left:u(r),bottom:u(r)}}function sr(r,e){if(typeof r=="string"&&r.startsWith("var(--"))return r;const{r:o,g:n,b:a,a:t}=C(r),i=1-e,s=l=>Math.round(l*i);return`rgba(${s(o)}, ${s(n)}, ${s(a)}, ${t})`}function lr(r,e){if(typeof r=="string"&&r.startsWith("var(--"))return r;const{r:o,g:n,b:a,a:t}=C(r),i=s=>Math.round(s+(255-s)*e);return`rgba(${i(o)}, ${i(n)}, ${i(a)}, ${t})`}function fr(r){return e=>{if(typeof e=="number")return u(e);const o=typeof r.defaultRadius=="number"?r.defaultRadius:r.radius[r.defaultRadius]||r.defaultRadius;return r.radius[e]||e||o}}function cr(r,e){if(typeof r=="string"&&r.includes(".")){const[o,n]=r.split("."),a=parseInt(n,10);if(o in e.colors&&a>=0&&a<10)return{isSplittedColor:!0,key:o,shade:a}}return{isSplittedColor:!1}}function dr(r){const e=w(r),o=y(r),n=G(r);return({variant:a,color:t,gradient:i,primaryFallback:s})=>{const l=cr(t,r);switch(a){case"light":return{border:"transparent",background:p(e(t,r.colorScheme==="dark"?8:0,s,!1),r.colorScheme==="dark"?.2:1),color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),hover:p(e(t,r.colorScheme==="dark"?7:1,s,!1),r.colorScheme==="dark"?.25:.65)};case"subtle":return{border:"transparent",background:"transparent",color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),hover:p(e(t,r.colorScheme==="dark"?8:0,s,!1),r.colorScheme==="dark"?.2:1)};case"outline":return{border:e(t,r.colorScheme==="dark"?5:o("light")),background:"transparent",color:e(t,r.colorScheme==="dark"?5:o("light")),hover:r.colorScheme==="dark"?p(e(t,5,s,!1),.05):p(e(t,0,s,!1),.35)};case"default":return{border:r.colorScheme==="dark"?r.colors.dark[4]:r.colors.gray[4],background:r.colorScheme==="dark"?r.colors.dark[6]:r.white,color:r.colorScheme==="dark"?r.white:r.black,hover:r.colorScheme==="dark"?r.colors.dark[5]:r.colors.gray[0]};case"white":return{border:"transparent",background:r.white,color:e(t,o()),hover:null};case"transparent":return{border:"transparent",color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),background:"transparent",hover:null};case"gradient":return{background:n(i),color:r.white,border:"transparent",hover:null};default:{const g=o(),$=l.isSplittedColor?l.shade:g,O=l.isSplittedColor?l.key:t;return{border:"transparent",background:e(O,$,s),color:r.white,hover:e(O,$===9?8:$+1)}}}}}function ur(r){return e=>{const o=y(r)(e);return r.colors[r.primaryColor][o]}}function pr(r){return{"@media (hover: hover)":{"&:hover":r},"@media (hover: none)":{"&:active":r}}}function gr(r){return()=>({userSelect:"none",color:r.colorScheme==="dark"?r.colors.dark[3]:r.colors.gray[5]})}function br(r){return()=>r.colorScheme==="dark"?r.colors.dark[2]:r.colors.gray[6]}const f={fontStyles:q,themeColor:w,focusStyles:Z,linearGradient:B,radialGradient:rr,smallerThan:or,largerThan:er,rgba:p,cover:ir,darken:sr,lighten:lr,radius:fr,variant:dr,primaryShade:y,hover:pr,gradient:G,primaryColor:ur,placeholderStyles:gr,dimmed:br};var mr=Object.defineProperty,yr=Object.defineProperties,Sr=Object.getOwnPropertyDescriptors,R=Object.getOwnPropertySymbols,vr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,F=(r,e,o)=>e in r?mr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,hr=(r,e)=>{for(var o in e||(e={}))vr.call(e,o)&&F(r,o,e[o]);if(R)for(var o of R(e))_r.call(e,o)&&F(r,o,e[o]);return r},kr=(r,e)=>yr(r,Sr(e));function U(r){return kr(hr({},r),{fn:{fontStyles:f.fontStyles(r),themeColor:f.themeColor(r),focusStyles:f.focusStyles(r),largerThan:f.largerThan(r),smallerThan:f.smallerThan(r),radialGradient:f.radialGradient,linearGradient:f.linearGradient,gradient:f.gradient(r),rgba:f.rgba,cover:f.cover,lighten:f.lighten,darken:f.darken,primaryShade:f.primaryShade(r),radius:f.radius(r),variant:f.variant(r),hover:f.hover,primaryColor:f.primaryColor(r),placeholderStyles:f.placeholderStyles(r),dimmed:f.dimmed(r)}})}const $r={dir:"ltr",primaryShade:{light:6,dark:8},focusRing:"auto",loader:"oval",colorScheme:"light",white:"#fff",black:"#000",defaultRadius:"sm",transitionTimingFunction:"ease",colors:Y,lineHeight:1.55,fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",primaryColor:"blue",respectReducedMotion:!0,cursorType:"default",defaultGradient:{from:"indigo",to:"cyan",deg:45},shadows:{xs:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.1)",sm:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 0.625rem 0.9375rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.4375rem 0.4375rem -0.3125rem",md:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.25rem 1.5625rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.625rem 0.625rem -0.3125rem",lg:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.75rem 1.4375rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 0.75rem 0.75rem -0.4375rem",xl:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 2.25rem 1.75rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 1.0625rem 1.0625rem -0.4375rem"},fontSizes:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},radius:{xs:"0.125rem",sm:"0.25rem",md:"0.5rem",lg:"1rem",xl:"2rem"},spacing:{xs:"0.625rem",sm:"0.75rem",md:"1rem",lg:"1.25rem",xl:"1.5rem"},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},headings:{fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontWeight:700,sizes:{h1:{fontSize:"2.125rem",lineHeight:1.3,fontWeight:void 0},h2:{fontSize:"1.625rem",lineHeight:1.35,fontWeight:void 0},h3:{fontSize:"1.375rem",lineHeight:1.4,fontWeight:void 0},h4:{fontSize:"1.125rem",lineHeight:1.45,fontWeight:void 0},h5:{fontSize:"1rem",lineHeight:1.5,fontWeight:void 0},h6:{fontSize:"0.875rem",lineHeight:1.5,fontWeight:void 0}}},other:{},components:{},activeStyles:{transform:"translateY(0.0625rem)"},datesLocale:"en",globalStyles:void 0,focusRingStyles:{styles:r=>({outlineOffset:"0.125rem",outline:`0.125rem solid ${r.colors[r.primaryColor][r.colorScheme==="dark"?7:5]}`}),resetStyles:()=>({outline:"none"}),inputStyles:r=>({outline:"none",borderColor:r.colors[r.primaryColor][typeof r.primaryShade=="object"?r.primaryShade[r.colorScheme]:r.primaryShade]})}},E=U($r);var Pr=Object.defineProperty,wr=Object.defineProperties,Cr=Object.getOwnPropertyDescriptors,H=Object.getOwnPropertySymbols,Er=Object.prototype.hasOwnProperty,Or=Object.prototype.propertyIsEnumerable,M=(r,e,o)=>e in r?Pr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,xr=(r,e)=>{for(var o in e||(e={}))Er.call(e,o)&&M(r,o,e[o]);if(H)for(var o of H(e))Or.call(e,o)&&M(r,o,e[o]);return r},zr=(r,e)=>wr(r,Cr(e));function jr({theme:r}){return d.createElement(_,{styles:{"*, *::before, *::after":{boxSizing:"border-box"},html:{colorScheme:r.colorScheme==="dark"?"dark":"light"},body:zr(xr({},r.fn.fontStyles()),{backgroundColor:r.colorScheme==="dark"?r.colors.dark[7]:r.white,color:r.colorScheme==="dark"?r.colors.dark[0]:r.black,lineHeight:r.lineHeight,fontSize:r.fontSizes.md,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"})}})}function b(r,e,o,n=u){Object.keys(e).forEach(a=>{r[`--mantine-${o}-${a}`]=n(e[a])})}function Rr({theme:r}){const e={"--mantine-color-white":r.white,"--mantine-color-black":r.black,"--mantine-transition-timing-function":r.transitionTimingFunction,"--mantine-line-height":`${r.lineHeight}`,"--mantine-font-family":r.fontFamily,"--mantine-font-family-monospace":r.fontFamilyMonospace,"--mantine-font-family-headings":r.headings.fontFamily,"--mantine-heading-font-weight":`${r.headings.fontWeight}`};b(e,r.shadows,"shadow"),b(e,r.fontSizes,"font-size"),b(e,r.radius,"radius"),b(e,r.spacing,"spacing"),b(e,r.breakpoints,"breakpoints",k),Object.keys(r.colors).forEach(n=>{r.colors[n].forEach((a,t)=>{e[`--mantine-color-${n}-${t}`]=a})});const o=r.headings.sizes;return Object.keys(o).forEach(n=>{e[`--mantine-${n}-font-size`]=o[n].fontSize,e[`--mantine-${n}-line-height`]=`${o[n].lineHeight}`}),d.createElement(_,{styles:{":root":e}})}var Fr=Object.defineProperty,Hr=Object.defineProperties,Mr=Object.getOwnPropertyDescriptors,I=Object.getOwnPropertySymbols,Ir=Object.prototype.hasOwnProperty,Ar=Object.prototype.propertyIsEnumerable,A=(r,e,o)=>e in r?Fr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,c=(r,e)=>{for(var o in e||(e={}))Ir.call(e,o)&&A(r,o,e[o]);if(I)for(var o of I(e))Ar.call(e,o)&&A(r,o,e[o]);return r},P=(r,e)=>Hr(r,Mr(e));function Nr(r,e){var o;if(!e)return r;const n=Object.keys(r).reduce((a,t)=>{if(t==="headings"&&e.headings){const i=e.headings.sizes?Object.keys(r.headings.sizes).reduce((s,l)=>(s[l]=c(c({},r.headings.sizes[l]),e.headings.sizes[l]),s),{}):r.headings.sizes;return P(c({},a),{headings:P(c(c({},r.headings),e.headings),{sizes:i})})}if(t==="breakpoints"&&e.breakpoints){const i=c(c({},r.breakpoints),e.breakpoints);return P(c({},a),{breakpoints:Object.fromEntries(Object.entries(i).sort((s,l)=>S(s[1])-S(l[1])))})}return a[t]=typeof e[t]=="object"?c(c({},r[t]),e[t]):typeof e[t]=="number"||typeof e[t]=="boolean"||typeof e[t]=="function"?e[t]:e[t]||r[t],a},{});if(e!=null&&e.fontFamily&&!((o=e==null?void 0:e.headings)!=null&&o.fontFamily)&&(n.headings.fontFamily=e.fontFamily),!(n.primaryColor in n.colors))throw new Error("MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color");return n}function Wr(r,e){return U(Nr(r,e))}function Tr(r){return Object.keys(r).reduce((e,o)=>(r[o]!==void 0&&(e[o]=r[o]),e),{})}const Gr={html:{fontFamily:"sans-serif",lineHeight:"1.15",textSizeAdjust:"100%"},body:{margin:0},"article, aside, footer, header, nav, section, figcaption, figure, main":{display:"block"},h1:{fontSize:"2em"},hr:{boxSizing:"content-box",height:0,overflow:"visible"},pre:{fontFamily:"monospace, monospace",fontSize:"1em"},a:{background:"transparent",textDecorationSkip:"objects"},"a:active, a:hover":{outlineWidth:0},"abbr[title]":{borderBottom:"none",textDecoration:"underline"},"b, strong":{fontWeight:"bolder"},"code, kbp, samp":{fontFamily:"monospace, monospace",fontSize:"1em"},dfn:{fontStyle:"italic"},mark:{backgroundColor:"#ff0",color:"#000"},small:{fontSize:"80%"},"sub, sup":{fontSize:"75%",lineHeight:0,position:"relative",verticalAlign:"baseline"},sup:{top:"-0.5em"},sub:{bottom:"-0.25em"},"audio, video":{display:"inline-block"},"audio:not([controls])":{display:"none",height:0},img:{borderStyle:"none",verticalAlign:"middle"},"svg:not(:root)":{overflow:"hidden"},"button, input, optgroup, select, textarea":{fontFamily:"sans-serif",fontSize:"100%",lineHeight:"1.15",margin:0},"button, input":{overflow:"visible"},"button, select":{textTransform:"none"},"button, [type=reset], [type=submit]":{WebkitAppearance:"button"},"button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner":{borderStyle:"none",padding:0},"button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring":{outline:`${u(1)} dotted ButtonText`},legend:{boxSizing:"border-box",color:"inherit",display:"table",maxWidth:"100%",padding:0,whiteSpace:"normal"},progress:{display:"inline-block",verticalAlign:"baseline"},textarea:{overflow:"auto"},"[type=checkbox], [type=radio]":{boxSizing:"border-box",padding:0},"[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button":{height:"auto"},"[type=search]":{appearance:"none"},"[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration":{appearance:"none"},"::-webkit-file-upload-button":{appearance:"button",font:"inherit"},"details, menu":{display:"block"},summary:{display:"list-item"},canvas:{display:"inline-block"},template:{display:"none"}};function Dr(){return d.createElement(_,{styles:Gr})}var Vr=Object.defineProperty,N=Object.getOwnPropertySymbols,Ur=Object.prototype.hasOwnProperty,Lr=Object.prototype.propertyIsEnumerable,W=(r,e,o)=>e in r?Vr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,m=(r,e)=>{for(var o in e||(e={}))Ur.call(e,o)&&W(r,o,e[o]);if(N)for(var o of N(e))Lr.call(e,o)&&W(r,o,e[o]);return r};const v=h.createContext({theme:E});function L(){var r;return((r=h.useContext(v))==null?void 0:r.theme)||E}function qr(r){const e=L(),o=n=>{var a,t,i,s;return{styles:((a=e.components[n])==null?void 0:a.styles)||{},classNames:((t=e.components[n])==null?void 0:t.classNames)||{},variants:(i=e.components[n])==null?void 0:i.variants,sizes:(s=e.components[n])==null?void 0:s.sizes}};return Array.isArray(r)?r.map(o):[o(r)]}function Jr(){var r;return(r=h.useContext(v))==null?void 0:r.emotionCache}function Kr(r,e,o){var n;const a=L(),t=(n=a.components[r])==null?void 0:n.defaultProps,i=typeof t=="function"?t(a):t;return m(m(m({},e),i),Tr(o))}function Xr({theme:r,emotionCache:e,withNormalizeCSS:o=!1,withGlobalStyles:n=!1,withCSSVariables:a=!1,inherit:t=!1,children:i}){const s=h.useContext(v),l=Wr(E,t?m(m({},s.theme),r):r);return d.createElement(X,{theme:l},d.createElement(v.Provider,{value:{theme:l,emotionCache:e}},o&&d.createElement(Dr,null),n&&d.createElement(jr,{theme:l}),a&&d.createElement(Rr,{theme:l}),typeof l.globalStyles=="function"&&d.createElement(_,{styles:l.globalStyles(l)}),i))}Xr.displayName="@mantine/core/MantineProvider";export{Xr as M,L as a,qr as b,V as c,Kr as d,Tr as f,S as g,u as r,Jr as u}; diff --git a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css deleted file mode 100644 index 95c048737d..0000000000 --- a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css +++ /dev/null @@ -1,9 +0,0 @@ -@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-ext-wght-normal-1c3007b8.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-wght-normal-eba94878.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-ext-wght-normal-81f77e51.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-wght-normal-d92c6cbc.woff2) format("woff2-variations");unicode-range:U+0370-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-vietnamese-wght-normal-15df7612.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-ext-wght-normal-a2bfd9fe.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-wght-normal-88df0b5a.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}/*! -* OverlayScrollbars -* Version: 2.4.5 -* -* Copyright (c) Rene Haas | KingSora. -* https://github.com/KingSora -* -* Released under the MIT license. -*/.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;top:0;right:0;bottom:0;left:0;transform:scale(.1)}.os-size-observer:before{content:"";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0px;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}.os-environment{scroll-behavior:auto!important;--os-custom-prop: -1;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:var(--os-custom-prop)}.os-environment div{width:200%;height:200%;margin:10px 0}.os-environment.os-environment-flexbox-glue{display:flex;flex-direction:row;flex-wrap:nowrap;height:auto;width:auto;min-height:200px;min-width:200px}.os-environment.os-environment-flexbox-glue div{flex:auto;width:auto;height:auto;max-height:100%;max-width:100%;margin:0}.os-environment.os-environment-flexbox-glue-max{max-height:200px}.os-environment.os-environment-flexbox-glue-max div{overflow:visible}.os-environment.os-environment-flexbox-glue-max div:before{content:"";display:block;height:999px;width:999px}.os-environment,[data-overlayscrollbars-viewport]{-ms-overflow-style:scrollbar!important}[data-overlayscrollbars-initialize],[data-overlayscrollbars~=scrollbarHidden],[data-overlayscrollbars-viewport~=scrollbarHidden],.os-scrollbar-hidden.os-environment{scrollbar-width:none!important}[data-overlayscrollbars-initialize]::-webkit-scrollbar,[data-overlayscrollbars-initialize]::-webkit-scrollbar-corner,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner,.os-scrollbar-hidden.os-environment::-webkit-scrollbar,.os-scrollbar-hidden.os-environment::-webkit-scrollbar-corner{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars],html.os-scrollbar-hidden,html.os-scrollbar-hidden>body{box-sizing:border-box;margin:0;width:100%;height:100%}html[data-overlayscrollbars]>body{overflow:visible}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{box-sizing:inherit;position:relative;flex:auto!important;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0}[data-overlayscrollbars-viewport]{--os-vaw: 0;--os-vah: 0}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:"";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:var(--os-vaw);height:var(--os-vah)}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{overflow:hidden}[data-overlayscrollbars~=host],[data-overlayscrollbars~=viewport]{position:relative;overflow:hidden}[data-overlayscrollbars~=overflowVisible],[data-overlayscrollbars-padding~=overflowVisible],[data-overlayscrollbars-viewport~=overflowVisible]{overflow:visible}[data-overlayscrollbars-overflow-x=hidden]{overflow-x:hidden}[data-overlayscrollbars-overflow-x=scroll]{overflow-x:scroll}[data-overlayscrollbars-overflow-x=hidden]{overflow-y:hidden}[data-overlayscrollbars-overflow-y=scroll]{overflow-y:scroll}[data-overlayscrollbars~=scrollbarPressed],[data-overlayscrollbars~=scrollbarPressed] [data-overlayscrollbars-viewport]{scroll-behavior:auto!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}.os-scrollbar{contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none}.os-scrollbar-track{position:relative;direction:ltr!important;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible,.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0}.os-scrollbar-vertical .os-scrollbar-handle{right:0}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}.os-scrollbar{--os-size: 0;--os-padding-perpendicular: 0;--os-padding-axis: 0;--os-track-border-radius: 0;--os-track-bg: none;--os-track-bg-hover: none;--os-track-bg-active: none;--os-track-border: none;--os-track-border-hover: none;--os-track-border-active: none;--os-handle-border-radius: 0;--os-handle-bg: none;--os-handle-bg-hover: none;--os-handle-bg-active: none;--os-handle-border: none;--os-handle-border-hover: none;--os-handle-border-active: none;--os-handle-min-size: 33px;--os-handle-max-size: none;--os-handle-perpendicular-size: 100%;--os-handle-perpendicular-size-hover: 100%;--os-handle-perpendicular-size-active: 100%;--os-handle-interactive-area-offset: 0}.os-scrollbar .os-scrollbar-track{border:var(--os-track-border);border-radius:var(--os-track-border-radius);background:var(--os-track-bg);transition:opacity .15s,background-color .15s,border-color .15s}.os-scrollbar .os-scrollbar-track:hover{border:var(--os-track-border-hover);background:var(--os-track-bg-hover)}.os-scrollbar .os-scrollbar-track:active{border:var(--os-track-border-active);background:var(--os-track-bg-active)}.os-scrollbar .os-scrollbar-handle{border:var(--os-handle-border);border-radius:var(--os-handle-border-radius);background:var(--os-handle-bg)}.os-scrollbar .os-scrollbar-handle:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;display:block}.os-scrollbar .os-scrollbar-handle:hover{border:var(--os-handle-border-hover);background:var(--os-handle-bg-hover)}.os-scrollbar .os-scrollbar-handle:active{border:var(--os-handle-border-active);background:var(--os-handle-bg-active)}.os-scrollbar-horizontal{padding:var(--os-padding-perpendicular) var(--os-padding-axis);right:var(--os-size);height:var(--os-size)}.os-scrollbar-horizontal.os-scrollbar-rtl{left:var(--os-size);right:0}.os-scrollbar-horizontal .os-scrollbar-handle{min-width:var(--os-handle-min-size);max-width:var(--os-handle-max-size);height:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,height .15s}.os-scrollbar-horizontal .os-scrollbar-handle:before{top:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal:hover .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-horizontal:active .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-active)}.os-scrollbar-vertical{padding:var(--os-padding-axis) var(--os-padding-perpendicular);bottom:var(--os-size);width:var(--os-size)}.os-scrollbar-vertical .os-scrollbar-handle{min-height:var(--os-handle-min-size);max-height:var(--os-handle-max-size);width:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,width .15s}.os-scrollbar-vertical .os-scrollbar-handle:before{left:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);left:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical:hover .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-vertical:active .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-active)}[data-overlayscrollbars~=updating]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}.os-theme-dark,.os-theme-light{box-sizing:border-box;--os-size: 10px;--os-padding-perpendicular: 2px;--os-padding-axis: 2px;--os-track-border-radius: 10px;--os-handle-interactive-area-offset: 4px;--os-handle-border-radius: 10px}.os-theme-dark{--os-handle-bg: rgba(0, 0, 0, .44);--os-handle-bg-hover: rgba(0, 0, 0, .55);--os-handle-bg-active: rgba(0, 0, 0, .66)}.os-theme-light{--os-handle-bg: rgba(255, 255, 255, .44);--os-handle-bg-hover: rgba(255, 255, 255, .55);--os-handle-bg-active: rgba(255, 255, 255, .66)}.os-no-css-vars.os-theme-dark.os-scrollbar .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar .os-scrollbar-handle,.os-no-css-vars.os-theme-dark.os-scrollbar .os-scrollbar-track,.os-no-css-vars.os-theme-light.os-scrollbar .os-scrollbar-track{border-radius:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal{padding:2px;right:10px;height:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-cornerless{right:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-rtl,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-rtl{left:10px;right:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-rtl.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-rtl.os-scrollbar-cornerless{left:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle{min-width:33px;max-width:none}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before{top:-6px;bottom:-2px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical,.os-no-css-vars.os-theme-light.os-scrollbar-vertical{padding:2px;bottom:10px;width:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-vertical.os-scrollbar-cornerless{bottom:0}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle{min-height:33px;max-height:none}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before{left:-6px;right:-2px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:-6px;left:-2px}.os-no-css-vars.os-theme-dark .os-scrollbar-handle{background:rgba(0,0,0,.44)}.os-no-css-vars.os-theme-dark:hover .os-scrollbar-handle{background:rgba(0,0,0,.55)}.os-no-css-vars.os-theme-dark:active .os-scrollbar-handle{background:rgba(0,0,0,.66)}.os-no-css-vars.os-theme-light .os-scrollbar-handle{background:rgba(255,255,255,.44)}.os-no-css-vars.os-theme-light:hover .os-scrollbar-handle{background:rgba(255,255,255,.55)}.os-no-css-vars.os-theme-light:active .os-scrollbar-handle{background:rgba(255,255,255,.66)}.os-scrollbar{--os-handle-bg: var(--invokeai-colors-accentAlpha-500);--os-handle-bg-hover: var(--invokeai-colors-accentAlpha-700);--os-handle-bg-active: var(--invokeai-colors-accentAlpha-800);--os-handle-min-size: 50px} diff --git a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js deleted file mode 100644 index eac5ca0c41..0000000000 --- a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-5513dc99.js +++ /dev/null @@ -1,280 +0,0 @@ -import{D as s,iE as T,r as l,Z as A,iF as D,a7 as R,iG as z,iH as j,iI as V,iJ as F,iK as G,iL as W,iM as K,at as H,iN as Z,iO as J}from"./index-31d28826.js";import{M as U}from"./MantineProvider-11ad6165.js";var P=String.raw,E=P` - :root, - :host { - --chakra-vh: 100vh; - } - - @supports (height: -webkit-fill-available) { - :root, - :host { - --chakra-vh: -webkit-fill-available; - } - } - - @supports (height: -moz-fill-available) { - :root, - :host { - --chakra-vh: -moz-fill-available; - } - } - - @supports (height: 100dvh) { - :root, - :host { - --chakra-vh: 100dvh; - } - } -`,Y=()=>s.jsx(T,{styles:E}),B=({scope:e=""})=>s.jsx(T,{styles:P` - html { - line-height: 1.5; - -webkit-text-size-adjust: 100%; - font-family: system-ui, sans-serif; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - -moz-osx-font-smoothing: grayscale; - touch-action: manipulation; - } - - body { - position: relative; - min-height: 100%; - margin: 0; - font-feature-settings: "kern"; - } - - ${e} :where(*, *::before, *::after) { - border-width: 0; - border-style: solid; - box-sizing: border-box; - word-wrap: break-word; - } - - main { - display: block; - } - - ${e} hr { - border-top-width: 1px; - box-sizing: content-box; - height: 0; - overflow: visible; - } - - ${e} :where(pre, code, kbd,samp) { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; - font-size: 1em; - } - - ${e} a { - background-color: transparent; - color: inherit; - text-decoration: inherit; - } - - ${e} abbr[title] { - border-bottom: none; - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - } - - ${e} :where(b, strong) { - font-weight: bold; - } - - ${e} small { - font-size: 80%; - } - - ${e} :where(sub,sup) { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - - ${e} sub { - bottom: -0.25em; - } - - ${e} sup { - top: -0.5em; - } - - ${e} img { - border-style: none; - } - - ${e} :where(button, input, optgroup, select, textarea) { - font-family: inherit; - font-size: 100%; - line-height: 1.15; - margin: 0; - } - - ${e} :where(button, input) { - overflow: visible; - } - - ${e} :where(button, select) { - text-transform: none; - } - - ${e} :where( - button::-moz-focus-inner, - [type="button"]::-moz-focus-inner, - [type="reset"]::-moz-focus-inner, - [type="submit"]::-moz-focus-inner - ) { - border-style: none; - padding: 0; - } - - ${e} fieldset { - padding: 0.35em 0.75em 0.625em; - } - - ${e} legend { - box-sizing: border-box; - color: inherit; - display: table; - max-width: 100%; - padding: 0; - white-space: normal; - } - - ${e} progress { - vertical-align: baseline; - } - - ${e} textarea { - overflow: auto; - } - - ${e} :where([type="checkbox"], [type="radio"]) { - box-sizing: border-box; - padding: 0; - } - - ${e} input[type="number"]::-webkit-inner-spin-button, - ${e} input[type="number"]::-webkit-outer-spin-button { - -webkit-appearance: none !important; - } - - ${e} input[type="number"] { - -moz-appearance: textfield; - } - - ${e} input[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; - } - - ${e} input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none !important; - } - - ${e} ::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit; - } - - ${e} details { - display: block; - } - - ${e} summary { - display: list-item; - } - - template { - display: none; - } - - [hidden] { - display: none !important; - } - - ${e} :where( - blockquote, - dl, - dd, - h1, - h2, - h3, - h4, - h5, - h6, - hr, - figure, - p, - pre - ) { - margin: 0; - } - - ${e} button { - background: transparent; - padding: 0; - } - - ${e} fieldset { - margin: 0; - padding: 0; - } - - ${e} :where(ol, ul) { - margin: 0; - padding: 0; - } - - ${e} textarea { - resize: vertical; - } - - ${e} :where(button, [role="button"]) { - cursor: pointer; - } - - ${e} button::-moz-focus-inner { - border: 0 !important; - } - - ${e} table { - border-collapse: collapse; - } - - ${e} :where(h1, h2, h3, h4, h5, h6) { - font-size: inherit; - font-weight: inherit; - } - - ${e} :where(button, input, optgroup, select, textarea) { - padding: 0; - line-height: inherit; - color: inherit; - } - - ${e} :where(img, svg, video, canvas, audio, iframe, embed, object) { - display: block; - } - - ${e} :where(img, video) { - max-width: 100%; - height: auto; - } - - [data-js-focus-visible] - :focus:not([data-focus-visible-added]):not( - [data-focus-visible-disabled] - ) { - outline: none; - box-shadow: none; - } - - ${e} select::-ms-expand { - display: none; - } - - ${E} - `}),g={light:"chakra-ui-light",dark:"chakra-ui-dark"};function Q(e={}){const{preventTransition:o=!0}=e,n={setDataset:r=>{const t=o?n.preventTransition():void 0;document.documentElement.dataset.theme=r,document.documentElement.style.colorScheme=r,t==null||t()},setClassName(r){document.body.classList.add(r?g.dark:g.light),document.body.classList.remove(r?g.light:g.dark)},query(){return window.matchMedia("(prefers-color-scheme: dark)")},getSystemTheme(r){var t;return((t=n.query().matches)!=null?t:r==="dark")?"dark":"light"},addListener(r){const t=n.query(),i=a=>{r(a.matches?"dark":"light")};return typeof t.addListener=="function"?t.addListener(i):t.addEventListener("change",i),()=>{typeof t.removeListener=="function"?t.removeListener(i):t.removeEventListener("change",i)}},preventTransition(){const r=document.createElement("style");return r.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(r),()=>{window.getComputedStyle(document.body),requestAnimationFrame(()=>{requestAnimationFrame(()=>{document.head.removeChild(r)})})}}};return n}var X="chakra-ui-color-mode";function L(e){return{ssr:!1,type:"localStorage",get(o){if(!(globalThis!=null&&globalThis.document))return o;let n;try{n=localStorage.getItem(e)||o}catch{}return n||o},set(o){try{localStorage.setItem(e,o)}catch{}}}}var ee=L(X),M=()=>{};function S(e,o){return e.type==="cookie"&&e.ssr?e.get(o):o}function O(e){const{value:o,children:n,options:{useSystemColorMode:r,initialColorMode:t,disableTransitionOnChange:i}={},colorModeManager:a=ee}=e,d=t==="dark"?"dark":"light",[u,p]=l.useState(()=>S(a,d)),[y,b]=l.useState(()=>S(a)),{getSystemTheme:w,setClassName:k,setDataset:x,addListener:$}=l.useMemo(()=>Q({preventTransition:i}),[i]),f=t==="system"&&!u?y:u,c=l.useCallback(m=>{const v=m==="system"?w():m;p(v),k(v==="dark"),x(v),a.set(v)},[a,w,k,x]);A(()=>{t==="system"&&b(w())},[]),l.useEffect(()=>{const m=a.get();if(m){c(m);return}if(t==="system"){c("system");return}c(d)},[a,d,t,c]);const C=l.useCallback(()=>{c(f==="dark"?"light":"dark")},[f,c]);l.useEffect(()=>{if(r)return $(c)},[r,$,c]);const I=l.useMemo(()=>({colorMode:o??f,toggleColorMode:o?M:C,setColorMode:o?M:c,forced:o!==void 0}),[f,C,c,o]);return s.jsx(D.Provider,{value:I,children:n})}O.displayName="ColorModeProvider";var te=["borders","breakpoints","colors","components","config","direction","fonts","fontSizes","fontWeights","letterSpacings","lineHeights","radii","shadows","sizes","space","styles","transition","zIndices"];function re(e){return R(e)?te.every(o=>Object.prototype.hasOwnProperty.call(e,o)):!1}function h(e){return typeof e=="function"}function oe(...e){return o=>e.reduce((n,r)=>r(n),o)}var ne=e=>function(...n){let r=[...n],t=n[n.length-1];return re(t)&&r.length>1?r=r.slice(0,r.length-1):t=e,oe(...r.map(i=>a=>h(i)?i(a):ae(a,i)))(t)},ie=ne(j);function ae(...e){return z({},...e,_)}function _(e,o,n,r){if((h(e)||h(o))&&Object.prototype.hasOwnProperty.call(r,n))return(...t)=>{const i=h(e)?e(...t):e,a=h(o)?o(...t):o;return z({},i,a,_)}}var N=l.createContext({getDocument(){return document},getWindow(){return window}});N.displayName="EnvironmentContext";function q(e){const{children:o,environment:n,disabled:r}=e,t=l.useRef(null),i=l.useMemo(()=>n||{getDocument:()=>{var d,u;return(u=(d=t.current)==null?void 0:d.ownerDocument)!=null?u:document},getWindow:()=>{var d,u;return(u=(d=t.current)==null?void 0:d.ownerDocument.defaultView)!=null?u:window}},[n]),a=!r||!n;return s.jsxs(N.Provider,{value:i,children:[o,a&&s.jsx("span",{id:"__chakra_env",hidden:!0,ref:t})]})}q.displayName="EnvironmentProvider";var se=e=>{const{children:o,colorModeManager:n,portalZIndex:r,resetScope:t,resetCSS:i=!0,theme:a={},environment:d,cssVarsRoot:u,disableEnvironment:p,disableGlobalStyle:y}=e,b=s.jsx(q,{environment:d,disabled:p,children:o});return s.jsx(V,{theme:a,cssVarsRoot:u,children:s.jsxs(O,{colorModeManager:n,options:a.config,children:[i?s.jsx(B,{scope:t}):s.jsx(Y,{}),!y&&s.jsx(F,{}),r?s.jsx(G,{zIndex:r,children:b}):b]})})},le=e=>function({children:n,theme:r=e,toastOptions:t,...i}){return s.jsxs(se,{theme:r,...i,children:[s.jsx(W,{value:t==null?void 0:t.defaultOptions,children:n}),s.jsx(K,{...t})]})},de=le(j);const ue=()=>l.useMemo(()=>({colorScheme:"dark",fontFamily:"'Inter Variable', sans-serif",components:{ScrollArea:{defaultProps:{scrollbarSize:10},styles:{scrollbar:{"&:hover":{backgroundColor:"var(--invokeai-colors-baseAlpha-300)"}},thumb:{backgroundColor:"var(--invokeai-colors-baseAlpha-300)"}}}}}),[]);const ce=L("@@invokeai-color-mode");function me({children:e}){const{i18n:o}=H(),n=o.dir(),r=l.useMemo(()=>ie({...Z,direction:n}),[n]);l.useEffect(()=>{document.body.dir=n},[n]);const t=ue();return s.jsx(U,{theme:t,children:s.jsx(de,{theme:r,colorModeManager:ce,toastOptions:J,children:e})})}const fe=l.memo(me);export{fe as default}; diff --git a/invokeai/frontend/web/dist/assets/favicon-0d253ced.ico b/invokeai/frontend/web/dist/assets/favicon-0d253ced.ico deleted file mode 100644 index 413340efb28b6a92b207d5180b836a7cc97f3694..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118734 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 LhQiW2^zQ!yaVtbM diff --git a/invokeai/frontend/web/dist/assets/index-31d28826.js b/invokeai/frontend/web/dist/assets/index-31d28826.js deleted file mode 100644 index 5761d54025..0000000000 --- a/invokeai/frontend/web/dist/assets/index-31d28826.js +++ /dev/null @@ -1,155 +0,0 @@ -var oq=Object.defineProperty;var sq=(e,t,n)=>t in e?oq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Kl=(e,t,n)=>(sq(e,typeof t!="symbol"?t+"":t,n),n),sx=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y=(e,t,n)=>(sx(e,t,"read from private field"),n?n.call(e):t.get(e)),Bt=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Ni=(e,t,n,r)=>(sx(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n);var th=(e,t,n,r)=>({set _(i){Ni(e,t,i,n)},get _(){return Y(e,t,r)}}),Wo=(e,t,n)=>(sx(e,t,"access private method"),n);function MO(e,t){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var He=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ml(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var RO={exports:{}},Tb={},OO={exports:{}},Ke={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var rm=Symbol.for("react.element"),aq=Symbol.for("react.portal"),lq=Symbol.for("react.fragment"),cq=Symbol.for("react.strict_mode"),uq=Symbol.for("react.profiler"),dq=Symbol.for("react.provider"),fq=Symbol.for("react.context"),hq=Symbol.for("react.forward_ref"),pq=Symbol.for("react.suspense"),gq=Symbol.for("react.memo"),mq=Symbol.for("react.lazy"),_k=Symbol.iterator;function yq(e){return e===null||typeof e!="object"?null:(e=_k&&e[_k]||e["@@iterator"],typeof e=="function"?e:null)}var $O={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},NO=Object.assign,FO={};function Tf(e,t,n){this.props=e,this.context=t,this.refs=FO,this.updater=n||$O}Tf.prototype.isReactComponent={};Tf.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Tf.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function DO(){}DO.prototype=Tf.prototype;function vE(e,t,n){this.props=e,this.context=t,this.refs=FO,this.updater=n||$O}var bE=vE.prototype=new DO;bE.constructor=vE;NO(bE,Tf.prototype);bE.isPureReactComponent=!0;var Sk=Array.isArray,LO=Object.prototype.hasOwnProperty,_E={current:null},BO={key:!0,ref:!0,__self:!0,__source:!0};function zO(e,t,n){var r,i={},o=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(o=""+t.key),t)LO.call(t,r)&&!BO.hasOwnProperty(r)&&(i[r]=t[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,V=$[z];if(0>>1;zi(te,N))eei(j,te)?($[z]=j,$[ee]=N,z=ee):($[z]=te,$[X]=N,z=X);else if(eei(j,N))$[z]=j,$[ee]=N,z=ee;else break e}}return D}function i($,D){var N=$.sortIndex-D.sortIndex;return N!==0?N:$.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,a=s.now();e.unstable_now=function(){return s.now()-a}}var l=[],c=[],u=1,d=null,f=3,h=!1,p=!1,m=!1,_=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function g($){for(var D=n(c);D!==null;){if(D.callback===null)r(c);else if(D.startTime<=$)r(c),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(c)}}function b($){if(m=!1,g($),!p)if(n(l)!==null)p=!0,O(S);else{var D=n(c);D!==null&&F(b,D.startTime-$)}}function S($,D){p=!1,m&&(m=!1,v(x),x=-1),h=!0;var N=f;try{for(g(D),d=n(l);d!==null&&(!(d.expirationTime>D)||$&&!R());){var z=d.callback;if(typeof z=="function"){d.callback=null,f=d.priorityLevel;var V=z(d.expirationTime<=D);D=e.unstable_now(),typeof V=="function"?d.callback=V:d===n(l)&&r(l),g(D)}else r(l);d=n(l)}if(d!==null)var H=!0;else{var X=n(c);X!==null&&F(b,X.startTime-D),H=!1}return H}finally{d=null,f=N,h=!1}}var w=!1,C=null,x=-1,k=5,A=-1;function R(){return!(e.unstable_now()-A$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):k=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(f){case 1:case 2:case 3:var D=3;break;default:D=f}var N=f;f=D;try{return $()}finally{f=N}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,D){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var N=f;f=$;try{return D()}finally{f=N}},e.unstable_scheduleCallback=function($,D,N){var z=e.unstable_now();switch(typeof N=="object"&&N!==null?(N=N.delay,N=typeof N=="number"&&0z?($.sortIndex=N,t(c,$),n(l)===null&&$===n(c)&&(m?(v(x),x=-1):m=!0,F(b,N-z))):($.sortIndex=V,t(l,$),p||h||(p=!0,O(S))),$},e.unstable_shouldYield=R,e.unstable_wrapCallback=function($){var D=f;return function(){var N=f;f=D;try{return $.apply(this,arguments)}finally{f=N}}}})(GO);UO.exports=GO;var kq=UO.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var HO=I,wi=kq;function ne(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yC=Object.prototype.hasOwnProperty,Pq=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,wk={},Ck={};function Iq(e){return yC.call(Ck,e)?!0:yC.call(wk,e)?!1:Pq.test(e)?Ck[e]=!0:(wk[e]=!0,!1)}function Mq(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Rq(e,t,n,r){if(t===null||typeof t>"u"||Mq(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Br(e,t,n,r,i,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var ir={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ir[e]=new Br(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ir[t]=new Br(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ir[e]=new Br(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ir[e]=new Br(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ir[e]=new Br(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ir[e]=new Br(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ir[e]=new Br(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ir[e]=new Br(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ir[e]=new Br(e,5,!1,e.toLowerCase(),null,!1,!1)});var xE=/[\-:]([a-z])/g;function wE(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ir[e]=new Br(e,1,!1,e.toLowerCase(),null,!1,!1)});ir.xlinkHref=new Br("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ir[e]=new Br(e,1,!1,e.toLowerCase(),null,!0,!0)});function CE(e,t,n,r){var i=ir.hasOwnProperty(t)?ir[t]:null;(i!==null?i.type!==0:r||!(2a||i[s]!==o[a]){var l=` -`+i[s].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=s&&0<=a);break}}}finally{cx=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Dh(e):""}function Oq(e){switch(e.tag){case 5:return Dh(e.type);case 16:return Dh("Lazy");case 13:return Dh("Suspense");case 19:return Dh("SuspenseList");case 0:case 2:case 15:return e=ux(e.type,!1),e;case 11:return e=ux(e.type.render,!1),e;case 1:return e=ux(e.type,!0),e;default:return""}}function SC(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Qu:return"Fragment";case Xu:return"Portal";case vC:return"Profiler";case EE:return"StrictMode";case bC:return"Suspense";case _C:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case KO:return(e.displayName||"Context")+".Consumer";case qO:return(e._context.displayName||"Context")+".Provider";case TE:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case AE:return t=e.displayName||null,t!==null?t:SC(e.type)||"Memo";case La:t=e._payload,e=e._init;try{return SC(e(t))}catch{}}return null}function $q(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return SC(t);case 8:return t===EE?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ml(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function QO(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Nq(e){var t=QO(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(s){r=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function m0(e){e._valueTracker||(e._valueTracker=Nq(e))}function YO(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=QO(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Tv(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function xC(e,t){var n=t.checked;return Kt({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Tk(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ml(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function ZO(e,t){t=t.checked,t!=null&&CE(e,"checked",t,!1)}function wC(e,t){ZO(e,t);var n=ml(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?CC(e,t.type,n):t.hasOwnProperty("defaultValue")&&CC(e,t.type,ml(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ak(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function CC(e,t,n){(t!=="number"||Tv(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Lh=Array.isArray;function xd(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=y0.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Op(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var np={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Fq=["Webkit","ms","Moz","O"];Object.keys(np).forEach(function(e){Fq.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),np[t]=np[e]})});function n7(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||np.hasOwnProperty(e)&&np[e]?(""+t).trim():t+"px"}function r7(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=n7(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var Dq=Kt({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function AC(e,t){if(t){if(Dq[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ne(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ne(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(ne(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ne(62))}}function kC(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var PC=null;function kE(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var IC=null,wd=null,Cd=null;function Ik(e){if(e=sm(e)){if(typeof IC!="function")throw Error(ne(280));var t=e.stateNode;t&&(t=Mb(t),IC(e.stateNode,e.type,t))}}function i7(e){wd?Cd?Cd.push(e):Cd=[e]:wd=e}function o7(){if(wd){var e=wd,t=Cd;if(Cd=wd=null,Ik(e),t)for(e=0;e>>=0,e===0?32:31-(Kq(e)/Xq|0)|0}var v0=64,b0=4194304;function Bh(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Iv(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,o=e.pingedLanes,s=n&268435455;if(s!==0){var a=s&~i;a!==0?r=Bh(a):(o&=s,o!==0&&(r=Bh(o)))}else s=n&~i,s!==0?r=Bh(s):o!==0&&(r=Bh(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&i)&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function im(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ao(t),e[t]=n}function Jq(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=ip),Bk=String.fromCharCode(32),zk=!1;function E7(e,t){switch(e){case"keyup":return AK.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function T7(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Yu=!1;function PK(e,t){switch(e){case"compositionend":return T7(t);case"keypress":return t.which!==32?null:(zk=!0,Bk);case"textInput":return e=t.data,e===Bk&&zk?null:e;default:return null}}function IK(e,t){if(Yu)return e==="compositionend"||!FE&&E7(e,t)?(e=w7(),Ly=OE=Za=null,Yu=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Gk(n)}}function I7(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?I7(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function M7(){for(var e=window,t=Tv();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Tv(e.document)}return t}function DE(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function BK(e){var t=M7(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&I7(n.ownerDocument.documentElement,n)){if(r!==null&&DE(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!e.extend&&o>r&&(i=r,r=o,o=i),i=Hk(n,o);var s=Hk(n,r);i&&s&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Zu=null,FC=null,sp=null,DC=!1;function Wk(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;DC||Zu==null||Zu!==Tv(r)||(r=Zu,"selectionStart"in r&&DE(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),sp&&Bp(sp,r)||(sp=r,r=Ov(FC,"onSelect"),0td||(e.current=UC[td],UC[td]=null,td--)}function kt(e,t){td++,UC[td]=e.current,e.current=t}var yl={},vr=Ol(yl),Yr=Ol(!1),Vc=yl;function Zd(e,t){var n=e.type.contextTypes;if(!n)return yl;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Zr(e){return e=e.childContextTypes,e!=null}function Nv(){Ft(Yr),Ft(vr)}function Jk(e,t,n){if(vr.current!==yl)throw Error(ne(168));kt(vr,t),kt(Yr,n)}function z7(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in t))throw Error(ne(108,$q(e)||"Unknown",i));return Kt({},n,r)}function Fv(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||yl,Vc=vr.current,kt(vr,e),kt(Yr,Yr.current),!0}function eP(e,t,n){var r=e.stateNode;if(!r)throw Error(ne(169));n?(e=z7(e,t,Vc),r.__reactInternalMemoizedMergedChildContext=e,Ft(Yr),Ft(vr),kt(vr,e)):Ft(Yr),kt(Yr,n)}var Bs=null,Rb=!1,Cx=!1;function j7(e){Bs===null?Bs=[e]:Bs.push(e)}function YK(e){Rb=!0,j7(e)}function $l(){if(!Cx&&Bs!==null){Cx=!0;var e=0,t=mt;try{var n=Bs;for(mt=1;e>=s,i-=s,qs=1<<32-Ao(t)+i|n<x?(k=C,C=null):k=C.sibling;var A=f(v,C,g[x],b);if(A===null){C===null&&(C=k);break}e&&C&&A.alternate===null&&t(v,C),y=o(A,y,x),w===null?S=A:w.sibling=A,w=A,C=k}if(x===g.length)return n(v,C),zt&&rc(v,x),S;if(C===null){for(;xx?(k=C,C=null):k=C.sibling;var R=f(v,C,A.value,b);if(R===null){C===null&&(C=k);break}e&&C&&R.alternate===null&&t(v,C),y=o(R,y,x),w===null?S=R:w.sibling=R,w=R,C=k}if(A.done)return n(v,C),zt&&rc(v,x),S;if(C===null){for(;!A.done;x++,A=g.next())A=d(v,A.value,b),A!==null&&(y=o(A,y,x),w===null?S=A:w.sibling=A,w=A);return zt&&rc(v,x),S}for(C=r(v,C);!A.done;x++,A=g.next())A=h(C,v,x,A.value,b),A!==null&&(e&&A.alternate!==null&&C.delete(A.key===null?x:A.key),y=o(A,y,x),w===null?S=A:w.sibling=A,w=A);return e&&C.forEach(function(L){return t(v,L)}),zt&&rc(v,x),S}function _(v,y,g,b){if(typeof g=="object"&&g!==null&&g.type===Qu&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case g0:e:{for(var S=g.key,w=y;w!==null;){if(w.key===S){if(S=g.type,S===Qu){if(w.tag===7){n(v,w.sibling),y=i(w,g.props.children),y.return=v,v=y;break e}}else if(w.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===La&&aP(S)===w.type){n(v,w.sibling),y=i(w,g.props),y.ref=ah(v,w,g),y.return=v,v=y;break e}n(v,w);break}else t(v,w);w=w.sibling}g.type===Qu?(y=Pc(g.props.children,v.mode,b,g.key),y.return=v,v=y):(b=Wy(g.type,g.key,g.props,null,v.mode,b),b.ref=ah(v,y,g),b.return=v,v=b)}return s(v);case Xu:e:{for(w=g.key;y!==null;){if(y.key===w)if(y.tag===4&&y.stateNode.containerInfo===g.containerInfo&&y.stateNode.implementation===g.implementation){n(v,y.sibling),y=i(y,g.children||[]),y.return=v,v=y;break e}else{n(v,y);break}else t(v,y);y=y.sibling}y=Rx(g,v.mode,b),y.return=v,v=y}return s(v);case La:return w=g._init,_(v,y,w(g._payload),b)}if(Lh(g))return p(v,y,g,b);if(nh(g))return m(v,y,g,b);T0(v,g)}return typeof g=="string"&&g!==""||typeof g=="number"?(g=""+g,y!==null&&y.tag===6?(n(v,y.sibling),y=i(y,g),y.return=v,v=y):(n(v,y),y=Mx(g,v.mode,b),y.return=v,v=y),s(v)):n(v,y)}return _}var ef=X7(!0),Q7=X7(!1),am={},hs=Ol(am),Up=Ol(am),Gp=Ol(am);function _c(e){if(e===am)throw Error(ne(174));return e}function WE(e,t){switch(kt(Gp,t),kt(Up,e),kt(hs,am),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:TC(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=TC(t,e)}Ft(hs),kt(hs,t)}function tf(){Ft(hs),Ft(Up),Ft(Gp)}function Y7(e){_c(Gp.current);var t=_c(hs.current),n=TC(t,e.type);t!==n&&(kt(Up,e),kt(hs,n))}function qE(e){Up.current===e&&(Ft(hs),Ft(Up))}var Ht=Ol(0);function Vv(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ex=[];function KE(){for(var e=0;en?n:4,e(!0);var r=Tx.transition;Tx.transition={};try{e(!1),t()}finally{mt=n,Tx.transition=r}}function h$(){return Zi().memoizedState}function tX(e,t,n){var r=ll(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},p$(e))g$(t,n);else if(n=H7(e,t,n,r),n!==null){var i=Nr();ko(n,e,r,i),m$(n,t,r)}}function nX(e,t,n){var r=ll(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(p$(e))g$(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,a=o(s,n);if(i.hasEagerState=!0,i.eagerState=a,$o(a,s)){var l=t.interleaved;l===null?(i.next=i,GE(t)):(i.next=l.next,l.next=i),t.interleaved=i;return}}catch{}finally{}n=H7(e,t,i,r),n!==null&&(i=Nr(),ko(n,e,r,i),m$(n,t,r))}}function p$(e){var t=e.alternate;return e===qt||t!==null&&t===qt}function g$(e,t){ap=Uv=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function m$(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,IE(e,n)}}var Gv={readContext:Yi,useCallback:cr,useContext:cr,useEffect:cr,useImperativeHandle:cr,useInsertionEffect:cr,useLayoutEffect:cr,useMemo:cr,useReducer:cr,useRef:cr,useState:cr,useDebugValue:cr,useDeferredValue:cr,useTransition:cr,useMutableSource:cr,useSyncExternalStore:cr,useId:cr,unstable_isNewReconciler:!1},rX={readContext:Yi,useCallback:function(e,t){return Qo().memoizedState=[e,t===void 0?null:t],e},useContext:Yi,useEffect:cP,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Vy(4194308,4,l$.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Vy(4194308,4,e,t)},useInsertionEffect:function(e,t){return Vy(4,2,e,t)},useMemo:function(e,t){var n=Qo();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Qo();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=tX.bind(null,qt,e),[r.memoizedState,e]},useRef:function(e){var t=Qo();return e={current:e},t.memoizedState=e},useState:lP,useDebugValue:JE,useDeferredValue:function(e){return Qo().memoizedState=e},useTransition:function(){var e=lP(!1),t=e[0];return e=eX.bind(null,e[1]),Qo().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=qt,i=Qo();if(zt){if(n===void 0)throw Error(ne(407));n=n()}else{if(n=t(),Ln===null)throw Error(ne(349));Gc&30||e$(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,cP(n$.bind(null,r,o,e),[e]),r.flags|=2048,qp(9,t$.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Qo(),t=Ln.identifierPrefix;if(zt){var n=Ks,r=qs;n=(r&~(1<<32-Ao(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Hp++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[os]=t,e[Vp]=r,E$(e,t,!1,!1),t.stateNode=e;e:{switch(s=kC(n,r),n){case"dialog":Mt("cancel",e),Mt("close",e),i=r;break;case"iframe":case"object":case"embed":Mt("load",e),i=r;break;case"video":case"audio":for(i=0;irf&&(t.flags|=128,r=!0,lh(o,!1),t.lanes=4194304)}else{if(!r)if(e=Vv(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),lh(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!zt)return ur(t),null}else 2*cn()-o.renderingStartTime>rf&&n!==1073741824&&(t.flags|=128,r=!0,lh(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(n=o.last,n!==null?n.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=cn(),t.sibling=null,n=Ht.current,kt(Ht,r?n&1|2:n&1),t):(ur(t),null);case 22:case 23:return o4(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?fi&1073741824&&(ur(t),t.subtreeFlags&6&&(t.flags|=8192)):ur(t),null;case 24:return null;case 25:return null}throw Error(ne(156,t.tag))}function dX(e,t){switch(BE(t),t.tag){case 1:return Zr(t.type)&&Nv(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return tf(),Ft(Yr),Ft(vr),KE(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return qE(t),null;case 13:if(Ft(Ht),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(ne(340));Jd()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ft(Ht),null;case 4:return tf(),null;case 10:return UE(t.type._context),null;case 22:case 23:return o4(),null;case 24:return null;default:return null}}var k0=!1,gr=!1,fX=typeof WeakSet=="function"?WeakSet:Set,ye=null;function od(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Zt(e,t,r)}else n.current=null}function t5(e,t,n){try{n()}catch(r){Zt(e,t,r)}}var vP=!1;function hX(e,t){if(LC=Mv,e=M7(),DE(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var s=0,a=-1,l=-1,c=0,u=0,d=e,f=null;t:for(;;){for(var h;d!==n||i!==0&&d.nodeType!==3||(a=s+i),d!==o||r!==0&&d.nodeType!==3||(l=s+r),d.nodeType===3&&(s+=d.nodeValue.length),(h=d.firstChild)!==null;)f=d,d=h;for(;;){if(d===e)break t;if(f===n&&++c===i&&(a=s),f===o&&++u===r&&(l=s),(h=d.nextSibling)!==null)break;d=f,f=d.parentNode}d=h}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(BC={focusedElem:e,selectionRange:n},Mv=!1,ye=t;ye!==null;)if(t=ye,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ye=e;else for(;ye!==null;){t=ye;try{var p=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(p!==null){var m=p.memoizedProps,_=p.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:yo(t.type,m),_);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var g=t.stateNode.containerInfo;g.nodeType===1?g.textContent="":g.nodeType===9&&g.documentElement&&g.removeChild(g.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(ne(163))}}catch(b){Zt(t,t.return,b)}if(e=t.sibling,e!==null){e.return=t.return,ye=e;break}ye=t.return}return p=vP,vP=!1,p}function lp(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&t5(t,n,o)}i=i.next}while(i!==r)}}function Nb(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function n5(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function k$(e){var t=e.alternate;t!==null&&(e.alternate=null,k$(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[os],delete t[Vp],delete t[VC],delete t[XK],delete t[QK])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function P$(e){return e.tag===5||e.tag===3||e.tag===4}function bP(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||P$(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function r5(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=$v));else if(r!==4&&(e=e.child,e!==null))for(r5(e,t,n),e=e.sibling;e!==null;)r5(e,t,n),e=e.sibling}function i5(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(i5(e,t,n),e=e.sibling;e!==null;)i5(e,t,n),e=e.sibling}var Zn=null,bo=!1;function Aa(e,t,n){for(n=n.child;n!==null;)I$(e,t,n),n=n.sibling}function I$(e,t,n){if(fs&&typeof fs.onCommitFiberUnmount=="function")try{fs.onCommitFiberUnmount(Ab,n)}catch{}switch(n.tag){case 5:gr||od(n,t);case 6:var r=Zn,i=bo;Zn=null,Aa(e,t,n),Zn=r,bo=i,Zn!==null&&(bo?(e=Zn,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Zn.removeChild(n.stateNode));break;case 18:Zn!==null&&(bo?(e=Zn,n=n.stateNode,e.nodeType===8?wx(e.parentNode,n):e.nodeType===1&&wx(e,n),Dp(e)):wx(Zn,n.stateNode));break;case 4:r=Zn,i=bo,Zn=n.stateNode.containerInfo,bo=!0,Aa(e,t,n),Zn=r,bo=i;break;case 0:case 11:case 14:case 15:if(!gr&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&t5(n,t,s),i=i.next}while(i!==r)}Aa(e,t,n);break;case 1:if(!gr&&(od(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){Zt(n,t,a)}Aa(e,t,n);break;case 21:Aa(e,t,n);break;case 22:n.mode&1?(gr=(r=gr)||n.memoizedState!==null,Aa(e,t,n),gr=r):Aa(e,t,n);break;default:Aa(e,t,n)}}function _P(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new fX),t.forEach(function(r){var i=xX.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function po(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=s),r&=~o}if(r=i,r=cn()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*gX(r/1960))-r,10e?16:e,Ja===null)var r=!1;else{if(e=Ja,Ja=null,qv=0,it&6)throw Error(ne(331));var i=it;for(it|=4,ye=e.current;ye!==null;){var o=ye,s=o.child;if(ye.flags&16){var a=o.deletions;if(a!==null){for(var l=0;lcn()-r4?kc(e,0):n4|=n),Jr(e,t)}function L$(e,t){t===0&&(e.mode&1?(t=b0,b0<<=1,!(b0&130023424)&&(b0=4194304)):t=1);var n=Nr();e=la(e,t),e!==null&&(im(e,t,n),Jr(e,n))}function SX(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),L$(e,n)}function xX(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(ne(314))}r!==null&&r.delete(t),L$(e,n)}var B$;B$=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Yr.current)Xr=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Xr=!1,cX(e,t,n);Xr=!!(e.flags&131072)}else Xr=!1,zt&&t.flags&1048576&&V7(t,Lv,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Uy(e,t),e=t.pendingProps;var i=Zd(t,vr.current);Td(t,n),i=QE(null,t,r,e,i,n);var o=YE();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Zr(r)?(o=!0,Fv(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,HE(t),i.updater=Ob,t.stateNode=i,i._reactInternals=t,KC(t,r,e,n),t=YC(null,t,r,!0,o,n)):(t.tag=0,zt&&o&&LE(t),Rr(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Uy(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=CX(r),e=yo(r,e),i){case 0:t=QC(null,t,r,e,n);break e;case 1:t=gP(null,t,r,e,n);break e;case 11:t=hP(null,t,r,e,n);break e;case 14:t=pP(null,t,r,yo(r.type,e),n);break e}throw Error(ne(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),QC(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),gP(e,t,r,i,n);case 3:e:{if(x$(t),e===null)throw Error(ne(387));r=t.pendingProps,o=t.memoizedState,i=o.element,W7(e,t),jv(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=nf(Error(ne(423)),t),t=mP(e,t,r,n,i);break e}else if(r!==i){i=nf(Error(ne(424)),t),t=mP(e,t,r,n,i);break e}else for(vi=ol(t.stateNode.containerInfo.firstChild),_i=t,zt=!0,So=null,n=Q7(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jd(),r===i){t=ca(e,t,n);break e}Rr(e,t,r,n)}t=t.child}return t;case 5:return Y7(t),e===null&&HC(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,s=i.children,zC(r,i)?s=null:o!==null&&zC(r,o)&&(t.flags|=32),S$(e,t),Rr(e,t,s,n),t.child;case 6:return e===null&&HC(t),null;case 13:return w$(e,t,n);case 4:return WE(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=ef(t,null,r,n):Rr(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),hP(e,t,r,i,n);case 7:return Rr(e,t,t.pendingProps,n),t.child;case 8:return Rr(e,t,t.pendingProps.children,n),t.child;case 12:return Rr(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,o=t.memoizedProps,s=i.value,kt(Bv,r._currentValue),r._currentValue=s,o!==null)if($o(o.value,s)){if(o.children===i.children&&!Yr.current){t=ca(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var a=o.dependencies;if(a!==null){s=o.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Js(-1,n&-n),l.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var u=c.pending;u===null?l.next=l:(l.next=u.next,u.next=l),c.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),WC(o.return,n,t),a.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(ne(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),WC(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Rr(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,Td(t,n),i=Yi(i),r=r(i),t.flags|=1,Rr(e,t,r,n),t.child;case 14:return r=t.type,i=yo(r,t.pendingProps),i=yo(r.type,i),pP(e,t,r,i,n);case 15:return b$(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),Uy(e,t),t.tag=1,Zr(r)?(e=!0,Fv(t)):e=!1,Td(t,n),K7(t,r,i),KC(t,r,i,n),YC(null,t,r,!0,e,n);case 19:return C$(e,t,n);case 22:return _$(e,t,n)}throw Error(ne(156,t.tag))};function z$(e,t){return f7(e,t)}function wX(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ki(e,t,n,r){return new wX(e,t,n,r)}function a4(e){return e=e.prototype,!(!e||!e.isReactComponent)}function CX(e){if(typeof e=="function")return a4(e)?1:0;if(e!=null){if(e=e.$$typeof,e===TE)return 11;if(e===AE)return 14}return 2}function cl(e,t){var n=e.alternate;return n===null?(n=Ki(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Wy(e,t,n,r,i,o){var s=2;if(r=e,typeof e=="function")a4(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Qu:return Pc(n.children,i,o,t);case EE:s=8,i|=8;break;case vC:return e=Ki(12,n,t,i|2),e.elementType=vC,e.lanes=o,e;case bC:return e=Ki(13,n,t,i),e.elementType=bC,e.lanes=o,e;case _C:return e=Ki(19,n,t,i),e.elementType=_C,e.lanes=o,e;case XO:return Db(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case qO:s=10;break e;case KO:s=9;break e;case TE:s=11;break e;case AE:s=14;break e;case La:s=16,r=null;break e}throw Error(ne(130,e==null?e:typeof e,""))}return t=Ki(s,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function Pc(e,t,n,r){return e=Ki(7,e,r,t),e.lanes=n,e}function Db(e,t,n,r){return e=Ki(22,e,r,t),e.elementType=XO,e.lanes=n,e.stateNode={isHidden:!1},e}function Mx(e,t,n){return e=Ki(6,e,null,t),e.lanes=n,e}function Rx(e,t,n){return t=Ki(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function EX(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=fx(0),this.expirationTimes=fx(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=fx(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function l4(e,t,n,r,i,o,s,a,l){return e=new EX(e,t,n,a,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Ki(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},HE(o),e}function TX(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(G$)}catch(e){console.error(e)}}G$(),VO.exports=ki;var gi=VO.exports;const pze=Ml(gi);var kP=gi;mC.createRoot=kP.createRoot,mC.hydrateRoot=kP.hydrateRoot;const MX="modulepreload",RX=function(e,t){return new URL(e,t).href},PP={},H$=function(t,n,r){if(!n||n.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=RX(o,r),o in PP)return;PP[o]=!0;const s=o.endsWith(".css"),a=s?'[rel="stylesheet"]':"";if(!!r)for(let u=i.length-1;u>=0;u--){const d=i[u];if(d.href===o&&(!s||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${a}`))return;const c=document.createElement("link");if(c.rel=s?"stylesheet":MX,s||(c.as="script",c.crossOrigin=""),c.href=o,document.head.appendChild(c),s)return new Promise((u,d)=>{c.addEventListener("load",u),c.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=o,window.dispatchEvent(s),!s.defaultPrevented)throw o})};let Ar=[],to=(e,t)=>{let n=[],r={get(){return r.lc||r.listen(()=>{})(),r.value},l:t||0,lc:0,listen(i,o){return r.lc=n.push(i,o||r.l)/2,()=>{let s=n.indexOf(i);~s&&(n.splice(s,2),--r.lc||r.off())}},notify(i){let o=!Ar.length;for(let s=0;s{r.has(o)&&n(i,o)})}let $X=(e={})=>{let t=to(e);return t.setKey=function(n,r){typeof r>"u"?n in t.value&&(t.value={...t.value},delete t.value[n],t.notify(n)):t.value[n]!==r&&(t.value={...t.value,[n]:r},t.notify(n))},t};function Ox(e,t={}){let n=I.useCallback(i=>t.keys?OX(e,t.keys,i):e.listen(i),[t.keys,e]),r=e.get.bind(e);return I.useSyncExternalStore(n,r,r)}const Qv=to(),Yv=to(),Zv=to(!1);var W$={exports:{}},q$={};/** - * @license React - * use-sync-external-store-with-selector.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var lm=I;function NX(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var FX=typeof Object.is=="function"?Object.is:NX,DX=lm.useSyncExternalStore,LX=lm.useRef,BX=lm.useEffect,zX=lm.useMemo,jX=lm.useDebugValue;q$.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=LX(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=zX(function(){function l(h){if(!c){if(c=!0,u=h,h=r(h),i!==void 0&&s.hasValue){var p=s.value;if(i(p,h))return d=p}return d=h}if(p=d,FX(u,h))return p;var m=r(h);return i!==void 0&&i(p,m)?p:(u=h,d=m)}var c=!1,u,d,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,i]);var a=DX(e,o[0],o[1]);return BX(function(){s.hasValue=!0,s.value=a},[a]),jX(a),a};W$.exports=q$;var VX=W$.exports;function UX(e){e()}var K$=UX,GX=e=>K$=e,HX=()=>K$,bi="default"in Ev?Q:Ev,IP=Symbol.for("react-redux-context"),MP=typeof globalThis<"u"?globalThis:{};function WX(){if(!bi.createContext)return{};const e=MP[IP]??(MP[IP]=new Map);let t=e.get(bi.createContext);return t||(t=bi.createContext(null),e.set(bi.createContext,t)),t}var vl=WX(),qX=()=>{throw new Error("uSES not initialized!")};function f4(e=vl){return function(){return bi.useContext(e)}}var X$=f4(),Q$=qX,KX=e=>{Q$=e},XX=(e,t)=>e===t;function QX(e=vl){const t=e===vl?X$:f4(e);return function(r,i={}){const{equalityFn:o=XX,devModeChecks:s={}}=typeof i=="function"?{equalityFn:i}:i,{store:a,subscription:l,getServerState:c,stabilityCheck:u,identityFunctionCheck:d}=t();bi.useRef(!0);const f=bi.useCallback({[r.name](p){return r(p)}}[r.name],[r,u,s.stabilityCheck]),h=Q$(l.addNestedSub,a.getState,c||a.getState,f,o);return bi.useDebugValue(h),h}}var Y$=QX();function YX(){const e=HX();let t=null,n=null;return{clear(){t=null,n=null},notify(){e(()=>{let r=t;for(;r;)r.callback(),r=r.next})},get(){let r=[],i=t;for(;i;)r.push(i),i=i.next;return r},subscribe(r){let i=!0,o=n={callback:r,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){!i||t===null||(i=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}var RP={notify(){},get:()=>[]};function ZX(e,t){let n,r=RP,i=0,o=!1;function s(m){u();const _=r.subscribe(m);let v=!1;return()=>{v||(v=!0,_(),d())}}function a(){r.notify()}function l(){p.onStateChange&&p.onStateChange()}function c(){return o}function u(){i++,n||(n=t?t.addNestedSub(l):e.subscribe(l),r=YX())}function d(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=RP)}function f(){o||(o=!0,u())}function h(){o&&(o=!1,d())}const p={addNestedSub:s,notifyNestedSubs:a,handleChangeWrapper:l,isSubscribed:c,trySubscribe:f,tryUnsubscribe:h,getListeners:()=>r};return p}var JX=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",eQ=JX?bi.useLayoutEffect:bi.useEffect;function OP(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function Jv(e,t){if(OP(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let i=0;i{const c=ZX(e);return{store:e,subscription:c,getServerState:r?()=>r:void 0,stabilityCheck:i,identityFunctionCheck:o}},[e,r,i,o]),a=bi.useMemo(()=>e.getState(),[e]);eQ(()=>{const{subscription:c}=s;return c.onStateChange=c.notifyNestedSubs,c.trySubscribe(),a!==e.getState()&&c.notifyNestedSubs(),()=>{c.tryUnsubscribe(),c.onStateChange=void 0}},[s,a]);const l=t||vl;return bi.createElement(l.Provider,{value:s},n)}var nQ=tQ;function Z$(e=vl){const t=e===vl?X$:f4(e);return function(){const{store:r}=t();return r}}var J$=Z$();function rQ(e=vl){const t=e===vl?J$:Z$(e);return function(){return t().dispatch}}var eN=rQ();KX(VX.useSyncExternalStoreWithSelector);GX(gi.unstable_batchedUpdates);var iQ=gi.unstable_batchedUpdates;const tN=()=>eN(),nN=Y$,rN="default",In=to(rN);function Yn(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var oQ=(()=>typeof Symbol=="function"&&Symbol.observable||"@@observable")(),$P=oQ,$x=()=>Math.random().toString(36).substring(7).split("").join("."),sQ={INIT:`@@redux/INIT${$x()}`,REPLACE:`@@redux/REPLACE${$x()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${$x()}`},e1=sQ;function _s(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function iN(e,t,n){if(typeof e!="function")throw new Error(Yn(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Yn(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Yn(1));return n(iN)(e,t)}let r=e,i=t,o=new Map,s=o,a=0,l=!1;function c(){s===o&&(s=new Map,o.forEach((_,v)=>{s.set(v,_)}))}function u(){if(l)throw new Error(Yn(3));return i}function d(_){if(typeof _!="function")throw new Error(Yn(4));if(l)throw new Error(Yn(5));let v=!0;c();const y=a++;return s.set(y,_),function(){if(v){if(l)throw new Error(Yn(6));v=!1,c(),s.delete(y),o=null}}}function f(_){if(!_s(_))throw new Error(Yn(7));if(typeof _.type>"u")throw new Error(Yn(8));if(typeof _.type!="string")throw new Error(Yn(17));if(l)throw new Error(Yn(9));try{l=!0,i=r(i,_)}finally{l=!1}return(o=s).forEach(y=>{y()}),_}function h(_){if(typeof _!="function")throw new Error(Yn(10));r=_,f({type:e1.REPLACE})}function p(){const _=d;return{subscribe(v){if(typeof v!="object"||v===null)throw new Error(Yn(11));function y(){const b=v;b.next&&b.next(u())}return y(),{unsubscribe:_(y)}},[$P](){return this}}}return f({type:e1.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:h,[$P]:p}}function aQ(e){Object.keys(e).forEach(t=>{const n=e[t];if(typeof n(void 0,{type:e1.INIT})>"u")throw new Error(Yn(12));if(typeof n(void 0,{type:e1.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Yn(13))})}function Vb(e){const t=Object.keys(e),n={};for(let o=0;o"u")throw a&&a.type,new Error(Yn(14));c[d]=p,l=l||p!==h}return l=l||r.length!==Object.keys(s).length,l?c:s}}function t1(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function lQ(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Yn(15))};const s={getState:i.getState,dispatch:(l,...c)=>o(l,...c)},a=e.map(l=>l(s));return o=t1(...a)(i.dispatch),{...i,dispatch:o}}}function Ub(e){return _s(e)&&"type"in e&&typeof e.type=="string"}var h4=Symbol.for("immer-nothing"),dp=Symbol.for("immer-draftable"),ei=Symbol.for("immer-state");function tr(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var qc=Object.getPrototypeOf;function Ji(e){return!!e&&!!e[ei]}function No(e){var t;return e?oN(e)||Array.isArray(e)||!!e[dp]||!!((t=e.constructor)!=null&&t[dp])||cm(e)||um(e):!1}var cQ=Object.prototype.constructor.toString();function oN(e){if(!e||typeof e!="object")return!1;const t=qc(e);if(t===null)return!0;const n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object?!0:typeof n=="function"&&Function.toString.call(n)===cQ}function uQ(e){return Ji(e)||tr(15,e),e[ei].base_}function of(e,t){Kc(e)===0?Object.entries(e).forEach(([n,r])=>{t(n,r,e)}):e.forEach((n,r)=>t(r,n,e))}function Kc(e){const t=e[ei];return t?t.type_:Array.isArray(e)?1:cm(e)?2:um(e)?3:0}function Xp(e,t){return Kc(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Nx(e,t){return Kc(e)===2?e.get(t):e[t]}function sN(e,t,n){const r=Kc(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function dQ(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function cm(e){return e instanceof Map}function um(e){return e instanceof Set}function oc(e){return e.copy_||e.base_}function c5(e,t){if(cm(e))return new Map(e);if(um(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);if(!t&&oN(e))return qc(e)?{...e}:Object.assign(Object.create(null),e);const n=Object.getOwnPropertyDescriptors(e);delete n[ei];let r=Reflect.ownKeys(n);for(let i=0;i1&&(e.set=e.add=e.clear=e.delete=fQ),Object.freeze(e),t&&of(e,(n,r)=>p4(r,!0))),e}function fQ(){tr(2)}function Gb(e){return Object.isFrozen(e)}var u5={};function Xc(e){const t=u5[e];return t||tr(0,e),t}function hQ(e,t){u5[e]||(u5[e]=t)}var Qp;function aN(){return Qp}function pQ(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function NP(e,t){t&&(Xc("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function d5(e){f5(e),e.drafts_.forEach(gQ),e.drafts_=null}function f5(e){e===Qp&&(Qp=e.parent_)}function FP(e){return Qp=pQ(Qp,e)}function gQ(e){const t=e[ei];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function DP(e,t){t.unfinalizedDrafts_=t.drafts_.length;const n=t.drafts_[0];return e!==void 0&&e!==n?(n[ei].modified_&&(d5(t),tr(4)),No(e)&&(e=n1(t,e),t.parent_||r1(t,e)),t.patches_&&Xc("Patches").generateReplacementPatches_(n[ei].base_,e,t.patches_,t.inversePatches_)):e=n1(t,n,[]),d5(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==h4?e:void 0}function n1(e,t,n){if(Gb(t))return t;const r=t[ei];if(!r)return of(t,(i,o)=>LP(e,r,t,i,o,n)),t;if(r.scope_!==e)return t;if(!r.modified_)return r1(e,r.base_,!0),r.base_;if(!r.finalized_){r.finalized_=!0,r.scope_.unfinalizedDrafts_--;const i=r.copy_;let o=i,s=!1;r.type_===3&&(o=new Set(i),i.clear(),s=!0),of(o,(a,l)=>LP(e,r,i,a,l,n,s)),r1(e,i,!1),n&&e.patches_&&Xc("Patches").generatePatches_(r,n,e.patches_,e.inversePatches_)}return r.copy_}function LP(e,t,n,r,i,o,s){if(Ji(i)){const a=o&&t&&t.type_!==3&&!Xp(t.assigned_,r)?o.concat(r):void 0,l=n1(e,i,a);if(sN(n,r,l),Ji(l))e.canAutoFreeze_=!1;else return}else s&&n.add(i);if(No(i)&&!Gb(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;n1(e,i),(!t||!t.scope_.parent_)&&r1(e,i)}}function r1(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&p4(t,n)}function mQ(e,t){const n=Array.isArray(e),r={type_:n?1:0,scope_:t?t.scope_:aN(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=r,o=g4;n&&(i=[r],o=Yp);const{revoke:s,proxy:a}=Proxy.revocable(i,o);return r.draft_=a,r.revoke_=s,a}var g4={get(e,t){if(t===ei)return e;const n=oc(e);if(!Xp(n,t))return yQ(e,n,t);const r=n[t];return e.finalized_||!No(r)?r:r===Fx(e.base_,t)?(Dx(e),e.copy_[t]=p5(r,e)):r},has(e,t){return t in oc(e)},ownKeys(e){return Reflect.ownKeys(oc(e))},set(e,t,n){const r=lN(oc(e),t);if(r!=null&&r.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){const i=Fx(oc(e),t),o=i==null?void 0:i[ei];if(o&&o.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(dQ(n,i)&&(n!==void 0||Xp(e.base_,t)))return!0;Dx(e),h5(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_[t]=!0),!0},deleteProperty(e,t){return Fx(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,Dx(e),h5(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const n=oc(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty(){tr(11)},getPrototypeOf(e){return qc(e.base_)},setPrototypeOf(){tr(12)}},Yp={};of(g4,(e,t)=>{Yp[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});Yp.deleteProperty=function(e,t){return Yp.set.call(this,e,t,void 0)};Yp.set=function(e,t,n){return g4.set.call(this,e[0],t,n,e[0])};function Fx(e,t){const n=e[ei];return(n?oc(n):e)[t]}function yQ(e,t,n){var i;const r=lN(t,n);return r?"value"in r?r.value:(i=r.get)==null?void 0:i.call(e.draft_):void 0}function lN(e,t){if(!(t in e))return;let n=qc(e);for(;n;){const r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=qc(n)}}function h5(e){e.modified_||(e.modified_=!0,e.parent_&&h5(e.parent_))}function Dx(e){e.copy_||(e.copy_=c5(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var vQ=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,n,r)=>{if(typeof t=="function"&&typeof n!="function"){const o=n;n=t;const s=this;return function(l=o,...c){return s.produce(l,u=>n.call(this,u,...c))}}typeof n!="function"&&tr(6),r!==void 0&&typeof r!="function"&&tr(7);let i;if(No(t)){const o=FP(this),s=p5(t,void 0);let a=!0;try{i=n(s),a=!1}finally{a?d5(o):f5(o)}return NP(o,r),DP(i,o)}else if(!t||typeof t!="object"){if(i=n(t),i===void 0&&(i=t),i===h4&&(i=void 0),this.autoFreeze_&&p4(i,!0),r){const o=[],s=[];Xc("Patches").generateReplacementPatches_(t,i,o,s),r(o,s)}return i}else tr(1,t)},this.produceWithPatches=(t,n)=>{if(typeof t=="function")return(s,...a)=>this.produceWithPatches(s,l=>t(l,...a));let r,i;return[this.produce(t,n,(s,a)=>{r=s,i=a}),r,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){No(e)||tr(8),Ji(e)&&(e=cN(e));const t=FP(this),n=p5(e,void 0);return n[ei].isManual_=!0,f5(t),n}finishDraft(e,t){const n=e&&e[ei];(!n||!n.isManual_)&&tr(9);const{scope_:r}=n;return NP(r,t),DP(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){const i=t[n];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}n>-1&&(t=t.slice(n+1));const r=Xc("Patches").applyPatches_;return Ji(e)?r(e,t):this.produce(e,i=>r(i,t))}};function p5(e,t){const n=cm(e)?Xc("MapSet").proxyMap_(e,t):um(e)?Xc("MapSet").proxySet_(e,t):mQ(e,t);return(t?t.scope_:aN()).drafts_.push(n),n}function cN(e){return Ji(e)||tr(10,e),uN(e)}function uN(e){if(!No(e)||Gb(e))return e;const t=e[ei];let n;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=c5(e,t.scope_.immer_.useStrictShallowCopy_)}else n=c5(e,!0);return of(n,(r,i)=>{sN(n,r,uN(i))}),t&&(t.finalized_=!1),n}function bQ(){const t="replace",n="add",r="remove";function i(f,h,p,m){switch(f.type_){case 0:case 2:return s(f,h,p,m);case 1:return o(f,h,p,m);case 3:return a(f,h,p,m)}}function o(f,h,p,m){let{base_:_,assigned_:v}=f,y=f.copy_;y.length<_.length&&([_,y]=[y,_],[p,m]=[m,p]);for(let g=0;g<_.length;g++)if(v[g]&&y[g]!==_[g]){const b=h.concat([g]);p.push({op:t,path:b,value:d(y[g])}),m.push({op:t,path:b,value:d(_[g])})}for(let g=_.length;g{const b=Nx(_,y),S=Nx(v,y),w=g?Xp(_,y)?t:n:r;if(b===S&&w===t)return;const C=h.concat(y);p.push(w===r?{op:w,path:C}:{op:w,path:C,value:S}),m.push(w===n?{op:r,path:C}:w===r?{op:n,path:C,value:d(b)}:{op:t,path:C,value:d(b)})})}function a(f,h,p,m){let{base_:_,copy_:v}=f,y=0;_.forEach(g=>{if(!v.has(g)){const b=h.concat([y]);p.push({op:r,path:b,value:g}),m.unshift({op:n,path:b,value:g})}y++}),y=0,v.forEach(g=>{if(!_.has(g)){const b=h.concat([y]);p.push({op:n,path:b,value:g}),m.unshift({op:r,path:b,value:g})}y++})}function l(f,h,p,m){p.push({op:t,path:[],value:h===h4?void 0:h}),m.push({op:t,path:[],value:f})}function c(f,h){return h.forEach(p=>{const{path:m,op:_}=p;let v=f;for(let S=0;S[p,u(m)]));if(um(f))return new Set(Array.from(f).map(u));const h=Object.create(qc(f));for(const p in f)h[p]=u(f[p]);return Xp(f,dp)&&(h[dp]=f[dp]),h}function d(f){return Ji(f)?u(f):f}hQ("Patches",{applyPatches_:c,generatePatches_:i,generateReplacementPatches_:l})}var Ci=new vQ,Pf=Ci.produce,dN=Ci.produceWithPatches.bind(Ci);Ci.setAutoFreeze.bind(Ci);Ci.setUseStrictShallowCopy.bind(Ci);var BP=Ci.applyPatches.bind(Ci);Ci.createDraft.bind(Ci);Ci.finishDraft.bind(Ci);var i1="NOT_FOUND";function _Q(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function SQ(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(n=>typeof n=="function")){const n=e.map(r=>typeof r=="function"?`function ${r.name||"unnamed"}()`:typeof r).join(", ");throw new TypeError(`${t}[${n}]`)}}var zP=e=>Array.isArray(e)?e:[e];function xQ(e){const t=Array.isArray(e[0])?e[0]:e;return SQ(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function wQ(e,t){const n=[],{length:r}=e;for(let i=0;it(a,c.key));if(l>-1){const c=n[l];return l>0&&(n.splice(l,1),n.unshift(c)),c.value}return i1}function i(a,l){r(a)===i1&&(n.unshift({key:a,value:l}),n.length>e&&n.pop())}function o(){return n}function s(){n=[]}return{get:r,put:i,getEntries:o,clear:s}}var TQ=(e,t)=>e===t;function AQ(e){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;const{length:i}=n;for(let o=0;oo(h.value,u));f&&(u=f.value,a!==0&&a--)}l.put(arguments,u)}return u}return c.clearCache=()=>{l.clear(),c.resetResultsCount()},c.resultsCount=()=>a,c.resetResultsCount=()=>{a=0},c}var PQ=class{constructor(e){this.value=e}deref(){return this.value}},IQ=typeof WeakRef<"u"?WeakRef:PQ,MQ=0,jP=1;function M0(){return{s:MQ,v:void 0,o:null,p:null}}function Zp(e,t={}){let n=M0();const{resultEqualityCheck:r}=t;let i,o=0;function s(){let a=n;const{length:l}=arguments;for(let d=0,f=l;d{n=M0(),s.resetResultsCount()},s.resultsCount=()=>o,s.resetResultsCount=()=>{o=0},s}function m4(e,...t){const n=typeof e=="function"?{memoize:e,memoizeOptions:t}:e;return(...i)=>{let o=0,s=0,a,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),_Q(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const u={...n,...l},{memoize:d,memoizeOptions:f=[],argsMemoize:h=Zp,argsMemoizeOptions:p=[],devModeChecks:m={}}=u,_=zP(f),v=zP(p),y=xQ(i),g=d(function(){return o++,c.apply(null,arguments)},..._),b=h(function(){s++;const w=wQ(y,arguments);return a=g.apply(null,w),a},...v);return Object.assign(b,{resultFunc:c,memoizedResultFunc:g,dependencies:y,dependencyRecomputations:()=>s,resetDependencyRecomputations:()=>{s=0},lastResult:()=>a,recomputations:()=>o,resetRecomputations:()=>{o=0},memoize:d,argsMemoize:h})}}var fp=m4(Zp);function fN(e){return({dispatch:n,getState:r})=>i=>o=>typeof o=="function"?o(n,r,e):i(o)}var RQ=fN(),OQ=fN,$Q=(...e)=>{const t=m4(...e);return(...n)=>{const r=t(...n),i=(o,...s)=>r(Ji(o)?cN(o):o,...s);return Object.assign(i,r),i}},NQ=$Q(Zp),FQ=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?t1:t1.apply(null,arguments)},DQ=e=>e&&typeof e.match=="function";function he(e,t){function n(...r){if(t){let i=t(...r);if(!i)throw new Error(yr(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:r[0]}}return n.toString=()=>`${e}`,n.type=e,n.match=r=>Ub(r)&&r.type===e,n}function LQ(e){return Ub(e)&&Object.keys(e).every(BQ)}function BQ(e){return["type","payload","error","meta"].indexOf(e)>-1}function VP(e,t){for(const n of e)if(t(n))return n}var hN=class jh extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,jh.prototype)}static get[Symbol.species](){return jh}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new jh(...t[0].concat(this)):new jh(...t.concat(this))}};function UP(e){return No(e)?Pf(e,()=>{}):e}function GP(e,t,n){if(e.has(t)){let i=e.get(t);return n.update&&(i=n.update(i,t,e),e.set(t,i)),i}if(!n.insert)throw new Error(yr(10));const r=n.insert(t,e);return e.set(t,r),r}function zQ(e){return typeof e=="boolean"}var jQ=()=>function(t){const{thunk:n=!0,immutableCheck:r=!0,serializableCheck:i=!0,actionCreatorCheck:o=!0}=t??{};let s=new hN;return n&&(zQ(n)?s.push(RQ):s.push(OQ(n.extraArgument))),s},ad="RTK_autoBatch",uh=()=>e=>({payload:e,meta:{[ad]:!0}}),pN=e=>t=>{setTimeout(t,e)},VQ=typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:pN(10),gN=(e={type:"raf"})=>t=>(...n)=>{const r=t(...n);let i=!0,o=!1,s=!1;const a=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?VQ:e.type==="callback"?e.queueNotification:pN(e.timeout),c=()=>{s=!1,o&&(o=!1,a.forEach(u=>u()))};return Object.assign({},r,{subscribe(u){const d=()=>i&&u(),f=r.subscribe(d);return a.add(u),()=>{f(),a.delete(u)}},dispatch(u){var d;try{return i=!((d=u==null?void 0:u.meta)!=null&&d[ad]),o=!i,o&&(s||(s=!0,l(c))),r.dispatch(u)}finally{i=!0}}})},UQ=e=>function(n){const{autoBatch:r=!0}=n??{};let i=new hN(e);return r&&i.push(gN(typeof r=="object"?r:void 0)),i},GQ=!0;function HQ(e){const t=jQ(),{reducer:n=void 0,middleware:r,devTools:i=!0,preloadedState:o=void 0,enhancers:s=void 0}=e||{};let a;if(typeof n=="function")a=n;else if(_s(n))a=Vb(n);else throw new Error(yr(1));let l;typeof r=="function"?l=r(t):l=t();let c=t1;i&&(c=FQ({trace:!GQ,...typeof i=="object"&&i}));const u=lQ(...l),d=UQ(u);let f=typeof s=="function"?s(d):d();const h=c(...f);return iN(a,o,h)}function mN(e){const t={},n=[];let r;const i={addCase(o,s){const a=typeof o=="string"?o:o.type;if(!a)throw new Error(yr(28));if(a in t)throw new Error(yr(29));return t[a]=s,i},addMatcher(o,s){return n.push({matcher:o,reducer:s}),i},addDefaultCase(o){return r=o,i}};return e(i),[t,n,r]}function WQ(e){return typeof e=="function"}function qQ(e,t){let[n,r,i]=mN(t),o;if(WQ(e))o=()=>UP(e());else{const a=UP(e);o=()=>a}function s(a=o(),l){let c=[n[l.type],...r.filter(({matcher:u})=>u(l)).map(({reducer:u})=>u)];return c.filter(u=>!!u).length===0&&(c=[i]),c.reduce((u,d)=>{if(d)if(Ji(u)){const h=d(u,l);return h===void 0?u:h}else{if(No(u))return Pf(u,f=>d(f,l));{const f=d(u,l);if(f===void 0){if(u===null)return u;throw new Error(yr(9))}return f}}return u},a)}return s.getInitialState=o,s}var KQ="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",y4=(e=21)=>{let t="",n=e;for(;n--;)t+=KQ[Math.random()*64|0];return t},yN=(e,t)=>DQ(e)?e.match(t):e(t);function br(...e){return t=>e.some(n=>yN(n,t))}function hp(...e){return t=>e.every(n=>yN(n,t))}function Hb(e,t){if(!e||!e.meta)return!1;const n=typeof e.meta.requestId=="string",r=t.indexOf(e.meta.requestStatus)>-1;return n&&r}function dm(e){return typeof e[0]=="function"&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function v4(...e){return e.length===0?t=>Hb(t,["pending"]):dm(e)?t=>{const n=e.map(i=>i.pending);return br(...n)(t)}:v4()(e[0])}function sf(...e){return e.length===0?t=>Hb(t,["rejected"]):dm(e)?t=>{const n=e.map(i=>i.rejected);return br(...n)(t)}:sf()(e[0])}function fm(...e){const t=n=>n&&n.meta&&n.meta.rejectedWithValue;return e.length===0?n=>hp(sf(...e),t)(n):dm(e)?n=>hp(sf(...e),t)(n):fm()(e[0])}function bl(...e){return e.length===0?t=>Hb(t,["fulfilled"]):dm(e)?t=>{const n=e.map(i=>i.fulfilled);return br(...n)(t)}:bl()(e[0])}function g5(...e){return e.length===0?t=>Hb(t,["pending","fulfilled","rejected"]):dm(e)?t=>{const n=[];for(const i of e)n.push(i.pending,i.rejected,i.fulfilled);return br(...n)(t)}:g5()(e[0])}var XQ=["name","message","stack","code"],Lx=class{constructor(e,t){Kl(this,"_type");this.payload=e,this.meta=t}},HP=class{constructor(e,t){Kl(this,"_type");this.payload=e,this.meta=t}},QQ=e=>{if(typeof e=="object"&&e!==null){const t={};for(const n of XQ)typeof e[n]=="string"&&(t[n]=e[n]);return t}return{message:String(e)}},m5=(()=>{function e(t,n,r){const i=he(t+"/fulfilled",(l,c,u,d)=>({payload:l,meta:{...d||{},arg:u,requestId:c,requestStatus:"fulfilled"}})),o=he(t+"/pending",(l,c,u)=>({payload:void 0,meta:{...u||{},arg:c,requestId:l,requestStatus:"pending"}})),s=he(t+"/rejected",(l,c,u,d,f)=>({payload:d,error:(r&&r.serializeError||QQ)(l||"Rejected"),meta:{...f||{},arg:u,requestId:c,rejectedWithValue:!!d,requestStatus:"rejected",aborted:(l==null?void 0:l.name)==="AbortError",condition:(l==null?void 0:l.name)==="ConditionError"}}));function a(l){return(c,u,d)=>{const f=r!=null&&r.idGenerator?r.idGenerator(l):y4(),h=new AbortController;let p;function m(v){p=v,h.abort()}const _=async function(){var g,b;let v;try{let S=(g=r==null?void 0:r.condition)==null?void 0:g.call(r,l,{getState:u,extra:d});if(ZQ(S)&&(S=await S),S===!1||h.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};const w=new Promise((C,x)=>h.signal.addEventListener("abort",()=>x({name:"AbortError",message:p||"Aborted"})));c(o(f,l,(b=r==null?void 0:r.getPendingMeta)==null?void 0:b.call(r,{requestId:f,arg:l},{getState:u,extra:d}))),v=await Promise.race([w,Promise.resolve(n(l,{dispatch:c,getState:u,extra:d,requestId:f,signal:h.signal,abort:m,rejectWithValue:(C,x)=>new Lx(C,x),fulfillWithValue:(C,x)=>new HP(C,x)})).then(C=>{if(C instanceof Lx)throw C;return C instanceof HP?i(C.payload,f,l,C.meta):i(C,f,l)})])}catch(S){v=S instanceof Lx?s(null,f,l,S.payload,S.meta):s(S,f,l)}return r&&!r.dispatchConditionRejection&&s.match(v)&&v.meta.condition||c(v),v}();return Object.assign(_,{abort:m,requestId:f,arg:l,unwrap(){return _.then(YQ)}})}}return Object.assign(a,{pending:o,rejected:s,fulfilled:i,settled:br(s,i),typePrefix:t})}return e.withTypes=()=>e,e})();function YQ(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}function ZQ(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}var JQ=Symbol.for("rtk-slice-createasyncthunk");function eY(e,t){return`${e}/${t}`}function tY({creators:e}={}){var n;const t=(n=e==null?void 0:e.asyncThunk)==null?void 0:n[JQ];return function(i){const{name:o,reducerPath:s=o}=i;if(!o)throw new Error(yr(11));typeof process<"u";const a=(typeof i.reducers=="function"?i.reducers(rY()):i.reducers)||{},l=Object.keys(a),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},u={addCase(_,v){const y=typeof _=="string"?_:_.type;if(!y)throw new Error(yr(12));if(y in c.sliceCaseReducersByType)throw new Error(yr(13));return c.sliceCaseReducersByType[y]=v,u},addMatcher(_,v){return c.sliceMatchers.push({matcher:_,reducer:v}),u},exposeAction(_,v){return c.actionCreators[_]=v,u},exposeCaseReducer(_,v){return c.sliceCaseReducersByName[_]=v,u}};l.forEach(_=>{const v=a[_],y={reducerName:_,type:eY(o,_),createNotation:typeof i.reducers=="function"};oY(v)?aY(y,v,u,t):iY(y,v,u)});function d(){const[_={},v=[],y=void 0]=typeof i.extraReducers=="function"?mN(i.extraReducers):[i.extraReducers],g={..._,...c.sliceCaseReducersByType};return qQ(i.initialState,b=>{for(let S in g)b.addCase(S,g[S]);for(let S of c.sliceMatchers)b.addMatcher(S.matcher,S.reducer);for(let S of v)b.addMatcher(S.matcher,S.reducer);y&&b.addDefaultCase(y)})}const f=_=>_,h=new WeakMap;let p;const m={name:o,reducerPath:s,reducer(_,v){return p||(p=d()),p(_,v)},actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState(){return p||(p=d()),p.getInitialState()},getSelectors(_=f){const v=GP(h,this,{insert:()=>new WeakMap});return GP(v,_,{insert:()=>{const y={};for(const[g,b]of Object.entries(i.selectors??{}))y[g]=nY(this,b,_,this!==m);return y}})},selectSlice(_){let v=_[this.reducerPath];return typeof v>"u"&&this!==m&&(v=this.getInitialState()),v},get selectors(){return this.getSelectors(this.selectSlice)},injectInto(_,{reducerPath:v,...y}={}){const g=v??this.reducerPath;return _.inject({reducerPath:g,reducer:this.reducer},y),{...this,reducerPath:g}}};return m}}function nY(e,t,n,r){function i(o,...s){let a=n.call(e,o);return typeof a>"u"&&r&&(a=e.getInitialState()),t(a,...s)}return i.unwrapped=t,i}var jt=tY();function rY(){function e(t,n){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...n}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...n){return t(...n)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,n){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:n}},asyncThunk:e}}function iY({type:e,reducerName:t,createNotation:n},r,i){let o,s;if("reducer"in r){if(n&&!sY(r))throw new Error(yr(17));o=r.reducer,s=r.prepare}else o=r;i.addCase(e,o).exposeCaseReducer(t,o).exposeAction(t,s?he(e,s):he(e))}function oY(e){return e._reducerDefinitionType==="asyncThunk"}function sY(e){return e._reducerDefinitionType==="reducerWithPrepare"}function aY({type:e,reducerName:t},n,r,i){if(!i)throw new Error(yr(18));const{payloadCreator:o,fulfilled:s,pending:a,rejected:l,settled:c,options:u}=n,d=i(e,o,u);r.exposeAction(t,d),s&&r.addCase(d.fulfilled,s),a&&r.addCase(d.pending,a),l&&r.addCase(d.rejected,l),c&&r.addMatcher(d.settled,c),r.exposeCaseReducer(t,{fulfilled:s||R0,pending:a||R0,rejected:l||R0,settled:c||R0})}function R0(){}function lY(){return{ids:[],entities:{}}}function cY(){function e(t={}){return Object.assign(lY(),t)}return{getInitialState:e}}function uY(){function e(t,n={}){const{createSelector:r=NQ}=n,i=d=>d.ids,o=d=>d.entities,s=r(i,o,(d,f)=>d.map(h=>f[h])),a=(d,f)=>f,l=(d,f)=>d[f],c=r(i,d=>d.length);if(!t)return{selectIds:i,selectEntities:o,selectAll:s,selectTotal:c,selectById:r(o,a,l)};const u=r(t,o);return{selectIds:r(t,i),selectEntities:u,selectAll:r(t,s),selectTotal:r(t,c),selectById:r(u,a,l)}}return{getSelectors:e}}var dY=Ji;function fY(e){const t=ln((n,r)=>e(r));return function(r){return t(r,void 0)}}function ln(e){return function(n,r){function i(s){return LQ(s)}const o=s=>{i(r)?e(r.payload,s):e(r,s)};return dY(n)?(o(n),n):Pf(n,o)}}function ld(e,t){return t(e)}function Ic(e){return Array.isArray(e)||(e=Object.values(e)),e}function vN(e,t,n){e=Ic(e);const r=[],i=[];for(const o of e){const s=ld(o,t);s in n.entities?i.push({id:s,changes:o}):r.push(o)}return[r,i]}function bN(e){function t(p,m){const _=ld(p,e);_ in m.entities||(m.ids.push(_),m.entities[_]=p)}function n(p,m){p=Ic(p);for(const _ of p)t(_,m)}function r(p,m){const _=ld(p,e);_ in m.entities||m.ids.push(_),m.entities[_]=p}function i(p,m){p=Ic(p);for(const _ of p)r(_,m)}function o(p,m){p=Ic(p),m.ids=[],m.entities={},n(p,m)}function s(p,m){return a([p],m)}function a(p,m){let _=!1;p.forEach(v=>{v in m.entities&&(delete m.entities[v],_=!0)}),_&&(m.ids=m.ids.filter(v=>v in m.entities))}function l(p){Object.assign(p,{ids:[],entities:{}})}function c(p,m,_){const v=_.entities[m.id];if(v===void 0)return!1;const y=Object.assign({},v,m.changes),g=ld(y,e),b=g!==m.id;return b&&(p[m.id]=g,delete _.entities[m.id]),_.entities[g]=y,b}function u(p,m){return d([p],m)}function d(p,m){const _={},v={};p.forEach(g=>{g.id in m.entities&&(v[g.id]={id:g.id,changes:{...v[g.id]?v[g.id].changes:null,...g.changes}})}),p=Object.values(v),p.length>0&&p.filter(b=>c(_,b,m)).length>0&&(m.ids=Object.values(m.entities).map(b=>ld(b,e)))}function f(p,m){return h([p],m)}function h(p,m){const[_,v]=vN(p,e,m);d(v,m),n(_,m)}return{removeAll:fY(l),addOne:ln(t),addMany:ln(n),setOne:ln(r),setMany:ln(i),setAll:ln(o),updateOne:ln(u),updateMany:ln(d),upsertOne:ln(f),upsertMany:ln(h),removeOne:ln(s),removeMany:ln(a)}}function hY(e,t){const{removeOne:n,removeMany:r,removeAll:i}=bN(e);function o(v,y){return s([v],y)}function s(v,y){v=Ic(v);const g=v.filter(b=>!(ld(b,e)in y.entities));g.length!==0&&m(g,y)}function a(v,y){return l([v],y)}function l(v,y){v=Ic(v),v.length!==0&&m(v,y)}function c(v,y){v=Ic(v),y.entities={},y.ids=[],s(v,y)}function u(v,y){return d([v],y)}function d(v,y){let g=!1;for(let b of v){const S=y.entities[b.id];if(!S)continue;g=!0,Object.assign(S,b.changes);const w=e(S);b.id!==w&&(delete y.entities[b.id],y.entities[w]=S)}g&&_(y)}function f(v,y){return h([v],y)}function h(v,y){const[g,b]=vN(v,e,y);d(b,y),s(g,y)}function p(v,y){if(v.length!==y.length)return!1;for(let g=0;g{y.entities[e(g)]=g}),_(y)}function _(v){const y=Object.values(v.entities);y.sort(t);const g=y.map(e),{ids:b}=v;p(b,g)||(v.ids=g)}return{removeOne:n,removeMany:r,removeAll:i,addOne:ln(o),updateOne:ln(u),upsertOne:ln(f),setOne:ln(a),setMany:ln(l),setAll:ln(c),addMany:ln(s),updateMany:ln(d),upsertMany:ln(h)}}function jo(e={}){const{selectId:t,sortComparer:n}={sortComparer:!1,selectId:s=>s.id,...e},r=cY(),i=uY(),o=n?hY(t,n):bN(t);return{selectId:t,sortComparer:n,...r,...i,...o}}var b4=(e,t)=>{if(typeof e!="function")throw new Error(yr(32))},y5=()=>{},_N=(e,t=y5)=>(e.catch(t),e),SN=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),Mc=(e,t)=>{const n=e.signal;n.aborted||("reason"in n||Object.defineProperty(n,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},pY="task",xN="listener",wN="completed",_4="cancelled",gY=`task-${_4}`,mY=`task-${wN}`,v5=`${xN}-${_4}`,yY=`${xN}-${wN}`,Wb=class{constructor(e){Kl(this,"name","TaskAbortError");Kl(this,"message");this.code=e,this.message=`${pY} ${_4} (reason: ${e})`}},Rc=e=>{if(e.aborted){const{reason:t}=e;throw new Wb(t)}};function CN(e,t){let n=y5;return new Promise((r,i)=>{const o=()=>i(new Wb(e.reason));if(e.aborted){o();return}n=SN(e,o),t.finally(()=>n()).then(r,i)}).finally(()=>{n=y5})}var vY=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(n){return{status:n instanceof Wb?"cancelled":"rejected",error:n}}finally{t==null||t()}},o1=e=>t=>_N(CN(e,t).then(n=>(Rc(e),n))),EN=e=>{const t=o1(e);return n=>t(new Promise(r=>setTimeout(r,n)))},{assign:bY}=Object,WP={},qb="listenerMiddleware",_Y=(e,t)=>{const n=r=>SN(e,()=>Mc(r,e.reason));return(r,i)=>{b4(r);const o=new AbortController;n(o);const s=vY(async()=>{Rc(e),Rc(o.signal);const a=await r({pause:o1(o.signal),delay:EN(o.signal),signal:o.signal});return Rc(o.signal),a},()=>Mc(o,mY));return i!=null&&i.autoJoin&&t.push(s),{result:o1(e)(s),cancel(){Mc(o,gY)}}}},SY=(e,t)=>{const n=async(r,i)=>{Rc(t);let o=()=>{};const a=[new Promise((l,c)=>{let u=e({predicate:r,effect:(d,f)=>{f.unsubscribe(),l([d,f.getState(),f.getOriginalState()])}});o=()=>{u(),c()}})];i!=null&&a.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await CN(t,Promise.race(a));return Rc(t),l}finally{o()}};return(r,i)=>_N(n(r,i))},TN=e=>{let{type:t,actionCreator:n,matcher:r,predicate:i,effect:o}=e;if(t)i=he(t).match;else if(n)t=n.type,i=n.match;else if(r)i=r;else if(!i)throw new Error(yr(21));return b4(o),{predicate:i,type:t,effect:o}},xY=e=>{const{type:t,predicate:n,effect:r}=TN(e);return{id:y4(),effect:r,type:t,predicate:n,pending:new Set,unsubscribe:()=>{throw new Error(yr(22))}}},b5=e=>{e.pending.forEach(t=>{Mc(t,v5)})},wY=e=>()=>{e.forEach(b5),e.clear()},qP=(e,t,n)=>{try{e(t,n)}catch(r){setTimeout(()=>{throw r},0)}},CY=he(`${qb}/add`),EY=he(`${qb}/removeAll`),TY=he(`${qb}/remove`),AY=(...e)=>{console.error(`${qb}/error`,...e)};function kY(e={}){const t=new Map,{extra:n,onError:r=AY}=e;b4(r);const i=u=>(u.unsubscribe=()=>t.delete(u.id),t.set(u.id,u),d=>{u.unsubscribe(),d!=null&&d.cancelActive&&b5(u)}),o=u=>{let d=VP(Array.from(t.values()),f=>f.effect===u.effect);return d||(d=xY(u)),i(d)},s=u=>{const{type:d,effect:f,predicate:h}=TN(u),p=VP(Array.from(t.values()),m=>(typeof d=="string"?m.type===d:m.predicate===h)&&m.effect===f);return p&&(p.unsubscribe(),u.cancelActive&&b5(p)),!!p},a=async(u,d,f,h)=>{const p=new AbortController,m=SY(o,p.signal),_=[];try{u.pending.add(p),await Promise.resolve(u.effect(d,bY({},f,{getOriginalState:h,condition:(v,y)=>m(v,y).then(Boolean),take:m,delay:EN(p.signal),pause:o1(p.signal),extra:n,signal:p.signal,fork:_Y(p.signal,_),unsubscribe:u.unsubscribe,subscribe:()=>{t.set(u.id,u)},cancelActiveListeners:()=>{u.pending.forEach((v,y,g)=>{v!==p&&(Mc(v,v5),g.delete(v))})},cancel:()=>{Mc(p,v5),u.pending.delete(p)},throwIfCancelled:()=>{Rc(p.signal)}})))}catch(v){v instanceof Wb||qP(r,v,{raisedBy:"effect"})}finally{await Promise.allSettled(_),Mc(p,yY),u.pending.delete(p)}},l=wY(t);return{middleware:u=>d=>f=>{if(!Ub(f))return d(f);if(CY.match(f))return o(f.payload);if(EY.match(f)){l();return}if(TY.match(f))return s(f.payload);let h=u.getState();const p=()=>{if(h===WP)throw new Error(yr(23));return h};let m;try{if(m=d(f),t.size>0){let _=u.getState();const v=Array.from(t.values());for(let y of v){let g=!1;try{g=y.predicate(f,_,h)}catch(b){g=!1,qP(r,b,{raisedBy:"predicate"})}g&&a(y,f,u,p)}}}finally{h=WP}return m},startListening:o,stopListening:s,clearListeners:l}}function yr(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}const PY={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class s1{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||PY,this.options=n,this.debug=n.debug}log(){for(var t=arguments.length,n=new Array(t),r=0;r{this.observers[r]=this.observers[r]||[],this.observers[r].push(n)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t]=this.observers[t].filter(r=>r!==n)}}emit(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{s(...r)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(s=>{s.apply(s,[t,...r])})}}function dh(){let e,t;const n=new Promise((r,i)=>{e=r,t=i});return n.resolve=e,n.reject=t,n}function KP(e){return e==null?"":""+e}function IY(e,t,n){e.forEach(r=>{t[r]&&(n[r]=t[r])})}function S4(e,t,n){function r(s){return s&&s.indexOf("###")>-1?s.replace(/###/g,"."):s}function i(){return!e||typeof e=="string"}const o=typeof t!="string"?[].concat(t):t.split(".");for(;o.length>1;){if(i())return{};const s=r(o.shift());!e[s]&&n&&(e[s]=new n),Object.prototype.hasOwnProperty.call(e,s)?e=e[s]:e={}}return i()?{}:{obj:e,k:r(o.shift())}}function XP(e,t,n){const{obj:r,k:i}=S4(e,t,Object);r[i]=n}function MY(e,t,n,r){const{obj:i,k:o}=S4(e,t,Object);i[o]=i[o]||[],r&&(i[o]=i[o].concat(n)),r||i[o].push(n)}function a1(e,t){const{obj:n,k:r}=S4(e,t);if(n)return n[r]}function RY(e,t,n){const r=a1(e,n);return r!==void 0?r:a1(t,n)}function AN(e,t,n){for(const r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):AN(e[r],t[r],n):e[r]=t[r]);return e}function ku(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var OY={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function $Y(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,t=>OY[t]):e}const NY=[" ",",","?","!",";"];function FY(e,t,n){t=t||"",n=n||"";const r=NY.filter(s=>t.indexOf(s)<0&&n.indexOf(s)<0);if(r.length===0)return!0;const i=new RegExp(`(${r.map(s=>s==="?"?"\\?":s).join("|")})`);let o=!i.test(e);if(!o){const s=e.indexOf(n);s>0&&!i.test(e.substring(0,s))&&(o=!0)}return o}function l1(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!e)return;if(e[t])return e[t];const r=t.split(n);let i=e;for(let o=0;oo+s;)s++,a=r.slice(o,o+s).join(n),l=i[a];if(l===void 0)return;if(l===null)return null;if(t.endsWith(a)){if(typeof l=="string")return l;if(a&&typeof l[a]=="string")return l[a]}const c=r.slice(o+s).join(n);return c?l1(l,c,n):void 0}i=i[r[o]]}return i}function c1(e){return e&&e.indexOf("_")>0?e.replace("_","-"):e}class QP extends Kb{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const o=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,s=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let a=[t,n];r&&typeof r!="string"&&(a=a.concat(r)),r&&typeof r=="string"&&(a=a.concat(o?r.split(o):r)),t.indexOf(".")>-1&&(a=t.split("."));const l=a1(this.data,a);return l||!s||typeof r!="string"?l:l1(this.data&&this.data[t]&&this.data[t][n],r,o)}addResource(t,n,r,i){let o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator;let a=[t,n];r&&(a=a.concat(s?r.split(s):r)),t.indexOf(".")>-1&&(a=t.split("."),i=n,n=a[1]),this.addNamespaces(n),XP(this.data,a,i),o.silent||this.emit("added",t,n,r,i)}addResources(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const o in r)(typeof r[o]=="string"||Object.prototype.toString.apply(r[o])==="[object Array]")&&this.addResource(t,n,o,r[o],{silent:!0});i.silent||this.emit("added",t,n,r)}addResourceBundle(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},a=[t,n];t.indexOf(".")>-1&&(a=t.split("."),i=r,r=n,n=a[1]),this.addNamespaces(n);let l=a1(this.data,a)||{};i?AN(l,r,o):l={...l,...r},XP(this.data,a,l),s.silent||this.emit("added",t,n,r)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(t,n)}:this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(i=>n[i]&&Object.keys(n[i]).length>0)}toJSON(){return this.data}}var kN={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(o=>{this.processors[o]&&(t=this.processors[o].process(t,n,r,i))}),t}};const YP={};class u1 extends Kb{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),IY(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=cs.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;const r=this.resolve(t,n);return r&&r.res!==void 0}extractFromKey(t,n){let r=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let o=n.ns||this.options.defaultNS||[];const s=r&&t.indexOf(r)>-1,a=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!FY(t,r,i);if(s&&!a){const l=t.match(this.interpolator.nestingRegexp);if(l&&l.length>0)return{key:t,namespaces:o};const c=t.split(r);(r!==i||r===i&&this.options.ns.indexOf(c[0])>-1)&&(o=c.shift()),t=c.join(i)}return typeof o=="string"&&(o=[o]),{key:t,namespaces:o}}translate(t,n,r){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);const i=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:s,namespaces:a}=this.extractFromKey(t[t.length-1],n),l=a[a.length-1],c=n.lng||this.language,u=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(c&&c.toLowerCase()==="cimode"){if(u){const b=n.nsSeparator||this.options.nsSeparator;return i?{res:`${l}${b}${s}`,usedKey:s,exactUsedKey:s,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:`${l}${b}${s}`}return i?{res:s,usedKey:s,exactUsedKey:s,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:s}const d=this.resolve(t,n);let f=d&&d.res;const h=d&&d.usedKey||s,p=d&&d.exactUsedKey||s,m=Object.prototype.toString.apply(f),_=["[object Number]","[object Function]","[object RegExp]"],v=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject;if(y&&f&&(typeof f!="string"&&typeof f!="boolean"&&typeof f!="number")&&_.indexOf(m)<0&&!(typeof v=="string"&&m==="[object Array]")){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const b=this.options.returnedObjectHandler?this.options.returnedObjectHandler(h,f,{...n,ns:a}):`key '${s} (${this.language})' returned an object instead of string.`;return i?(d.res=b,d.usedParams=this.getUsedParamsDetails(n),d):b}if(o){const b=m==="[object Array]",S=b?[]:{},w=b?p:h;for(const C in f)if(Object.prototype.hasOwnProperty.call(f,C)){const x=`${w}${o}${C}`;S[C]=this.translate(x,{...n,joinArrays:!1,ns:a}),S[C]===x&&(S[C]=f[C])}f=S}}else if(y&&typeof v=="string"&&m==="[object Array]")f=f.join(v),f&&(f=this.extendTranslation(f,t,n,r));else{let b=!1,S=!1;const w=n.count!==void 0&&typeof n.count!="string",C=u1.hasDefaultValue(n),x=w?this.pluralResolver.getSuffix(c,n.count,n):"",k=n.ordinal&&w?this.pluralResolver.getSuffix(c,n.count,{ordinal:!1}):"",A=n[`defaultValue${x}`]||n[`defaultValue${k}`]||n.defaultValue;!this.isValidLookup(f)&&C&&(b=!0,f=A),this.isValidLookup(f)||(S=!0,f=s);const L=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&S?void 0:f,M=C&&A!==f&&this.options.updateMissing;if(S||b||M){if(this.logger.log(M?"updateKey":"missingKey",c,l,s,M?A:f),o){const F=this.resolve(s,{...n,keySeparator:!1});F&&F.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let E=[];const P=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&P&&P[0])for(let F=0;F{const N=C&&D!==f?D:L;this.options.missingKeyHandler?this.options.missingKeyHandler(F,l,$,N,M,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(F,l,$,N,M,n),this.emit("missingKey",F,l,$,f)};this.options.saveMissing&&(this.options.saveMissingPlurals&&w?E.forEach(F=>{this.pluralResolver.getSuffixes(F,n).forEach($=>{O([F],s+$,n[`defaultValue${$}`]||A)})}):O(E,s,A))}f=this.extendTranslation(f,t,n,d,r),S&&f===s&&this.options.appendNamespaceToMissingKey&&(f=`${l}:${s}`),(S||b)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?f=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${s}`:s,b?f:void 0):f=this.options.parseMissingKeyHandler(f))}return i?(d.res=f,d.usedParams=this.getUsedParamsDetails(n),d):f}extendTranslation(t,n,r,i,o){var s=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const c=typeof t=="string"&&(r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let u;if(c){const f=t.match(this.interpolator.nestingRegexp);u=f&&f.length}let d=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(d={...this.options.interpolation.defaultVariables,...d}),t=this.interpolator.interpolate(t,d,r.lng||this.language,r),c){const f=t.match(this.interpolator.nestingRegexp),h=f&&f.length;u1&&arguments[1]!==void 0?arguments[1]:{},r,i,o,s,a;return typeof t=="string"&&(t=[t]),t.forEach(l=>{if(this.isValidLookup(r))return;const c=this.extractFromKey(l,n),u=c.key;i=u;let d=c.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));const f=n.count!==void 0&&typeof n.count!="string",h=f&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),p=n.context!==void 0&&(typeof n.context=="string"||typeof n.context=="number")&&n.context!=="",m=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);d.forEach(_=>{this.isValidLookup(r)||(a=_,!YP[`${m[0]}-${_}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(a)&&(YP[`${m[0]}-${_}`]=!0,this.logger.warn(`key "${i}" for languages "${m.join(", ")}" won't get resolved as namespace "${a}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),m.forEach(v=>{if(this.isValidLookup(r))return;s=v;const y=[u];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(y,u,v,_,n);else{let b;f&&(b=this.pluralResolver.getSuffix(v,n.count,n));const S=`${this.options.pluralSeparator}zero`,w=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(f&&(y.push(u+b),n.ordinal&&b.indexOf(w)===0&&y.push(u+b.replace(w,this.options.pluralSeparator)),h&&y.push(u+S)),p){const C=`${u}${this.options.contextSeparator}${n.context}`;y.push(C),f&&(y.push(C+b),n.ordinal&&b.indexOf(w)===0&&y.push(C+b.replace(w,this.options.pluralSeparator)),h&&y.push(C+S))}}let g;for(;g=y.pop();)this.isValidLookup(r)||(o=g,r=this.getResource(v,_,g,n))}))})}),{res:r,usedKey:i,exactUsedKey:o,usedLng:s,usedNS:a}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,r,i):this.resourceStore.getResource(t,n,r,i)}getUsedParamsDetails(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=t.replace&&typeof t.replace!="string";let i=r?t.replace:t;if(r&&typeof t.count<"u"&&(i.count=t.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(const o of n)delete i[o]}return i}static hasDefaultValue(t){const n="defaultValue";for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&n===r.substring(0,n.length)&&t[r]!==void 0)return!0;return!1}}function Bx(e){return e.charAt(0).toUpperCase()+e.slice(1)}class ZP{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=cs.create("languageUtils")}getScriptPartFromCode(t){if(t=c1(t),!t||t.indexOf("-")<0)return null;const n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=c1(t),!t||t.indexOf("-")<0)return t;const n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(typeof t=="string"&&t.indexOf("-")>-1){const n=["hans","hant","latn","cyrl","cans","mong","arab"];let r=t.split("-");return this.options.lowerCaseLng?r=r.map(i=>i.toLowerCase()):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bx(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bx(r[1].toLowerCase())),n.indexOf(r[2].toLowerCase())>-1&&(r[2]=Bx(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(r=>{if(n)return;const i=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(i))&&(n=i)}),!n&&this.options.supportedLngs&&t.forEach(r=>{if(n)return;const i=this.getLanguagePartFromCode(r);if(this.isSupportedCode(i))return n=i;n=this.options.supportedLngs.find(o=>{if(o===i)return o;if(!(o.indexOf("-")<0&&i.indexOf("-")<0)&&o.indexOf(i)===0)return o})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Object.prototype.toString.apply(t)==="[object Array]")return t;if(!n)return t.default||[];let r=t[n];return r||(r=t[this.getScriptPartFromCode(n)]),r||(r=t[this.formatLanguageCode(n)]),r||(r=t[this.getLanguagePartFromCode(n)]),r||(r=t.default),r||[]}toResolveHierarchy(t,n){const r=this.getFallbackCodes(n||this.options.fallbackLng||[],t),i=[],o=s=>{s&&(this.isSupportedCode(s)?i.push(s):this.logger.warn(`rejecting language code not found in supportedLngs: ${s}`))};return typeof t=="string"&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&o(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&o(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&o(this.getLanguagePartFromCode(t))):typeof t=="string"&&o(this.formatLanguageCode(t)),r.forEach(s=>{i.indexOf(s)<0&&o(this.formatLanguageCode(s))}),i}}let DY=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],LY={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}};const BY=["v1","v2","v3"],zY=["v4"],JP={zero:0,one:1,two:2,few:3,many:4,other:5};function jY(){const e={};return DY.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:LY[t.fc]}})}),e}class VY{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=t,this.options=n,this.logger=cs.create("pluralResolver"),(!this.options.compatibilityJSON||zY.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=jY()}addRule(t,n){this.rules[t]=n}getRule(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(c1(t),{type:n.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(t,r).map(i=>`${n}${i}`)}getSuffixes(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((i,o)=>JP[i]-JP[o]).map(i=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${i}`):r.numbers.map(i=>this.getSuffix(t,i,n)):[]}getSuffix(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=this.getRule(t,r);return i?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${i.select(n)}`:this.getSuffixRetroCompatible(i,n):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,n){const r=t.noAbs?t.plurals(n):t.plurals(Math.abs(n));let i=t.numbers[r];this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1&&(i===2?i="plural":i===1&&(i=""));const o=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return this.options.compatibilityJSON==="v1"?i===1?"":typeof i=="number"?`_plural_${i.toString()}`:o():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1?o():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!BY.includes(this.options.compatibilityJSON)}}function e6(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=RY(e,t,n);return!o&&i&&typeof n=="string"&&(o=l1(e,n,r),o===void 0&&(o=l1(t,n,r))),o}class UY{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=cs.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(n=>n),this.init(t)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const n=t.interpolation;this.escape=n.escape!==void 0?n.escape:$Y,this.escapeValue=n.escapeValue!==void 0?n.escapeValue:!0,this.useRawValueToEscape=n.useRawValueToEscape!==void 0?n.useRawValueToEscape:!1,this.prefix=n.prefix?ku(n.prefix):n.prefixEscaped||"{{",this.suffix=n.suffix?ku(n.suffix):n.suffixEscaped||"}}",this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||",",this.unescapePrefix=n.unescapeSuffix?"":n.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":n.unescapeSuffix||"",this.nestingPrefix=n.nestingPrefix?ku(n.nestingPrefix):n.nestingPrefixEscaped||ku("$t("),this.nestingSuffix=n.nestingSuffix?ku(n.nestingSuffix):n.nestingSuffixEscaped||ku(")"),this.nestingOptionsSeparator=n.nestingOptionsSeparator?n.nestingOptionsSeparator:n.nestingOptionsSeparator||",",this.maxReplaces=n.maxReplaces?n.maxReplaces:1e3,this.alwaysFormat=n.alwaysFormat!==void 0?n.alwaysFormat:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=`${this.prefix}(.+?)${this.suffix}`;this.regexp=new RegExp(t,"g");const n=`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;this.regexpUnescape=new RegExp(n,"g");const r=`${this.nestingPrefix}(.+?)${this.nestingSuffix}`;this.nestingRegexp=new RegExp(r,"g")}interpolate(t,n,r,i){let o,s,a;const l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function c(p){return p.replace(/\$/g,"$$$$")}const u=p=>{if(p.indexOf(this.formatSeparator)<0){const y=e6(n,l,p,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(y,void 0,r,{...i,...n,interpolationkey:p}):y}const m=p.split(this.formatSeparator),_=m.shift().trim(),v=m.join(this.formatSeparator).trim();return this.format(e6(n,l,_,this.options.keySeparator,this.options.ignoreJSONStructure),v,r,{...i,...n,interpolationkey:_})};this.resetRegExp();const d=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,f=i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:p=>c(p)},{regex:this.regexp,safeValue:p=>this.escapeValue?c(this.escape(p)):c(p)}].forEach(p=>{for(a=0;o=p.regex.exec(t);){const m=o[1].trim();if(s=u(m),s===void 0)if(typeof d=="function"){const v=d(t,o,i);s=typeof v=="string"?v:""}else if(i&&Object.prototype.hasOwnProperty.call(i,m))s="";else if(f){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${m} for interpolating ${t}`),s="";else typeof s!="string"&&!this.useRawValueToEscape&&(s=KP(s));const _=p.safeValue(s);if(t=t.replace(o[0],_),f?(p.regex.lastIndex+=s.length,p.regex.lastIndex-=o[0].length):p.regex.lastIndex=0,a++,a>=this.maxReplaces)break}}),t}nest(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i,o,s;function a(l,c){const u=this.nestingOptionsSeparator;if(l.indexOf(u)<0)return l;const d=l.split(new RegExp(`${u}[ ]*{`));let f=`{${d[1]}`;l=d[0],f=this.interpolate(f,s);const h=f.match(/'/g),p=f.match(/"/g);(h&&h.length%2===0&&!p||p.length%2!==0)&&(f=f.replace(/'/g,'"'));try{s=JSON.parse(f),c&&(s={...c,...s})}catch(m){return this.logger.warn(`failed parsing options string in nesting for key ${l}`,m),`${l}${u}${f}`}return delete s.defaultValue,l}for(;i=this.nestingRegexp.exec(t);){let l=[];s={...r},s=s.replace&&typeof s.replace!="string"?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let c=!1;if(i[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(i[1])){const u=i[1].split(this.formatSeparator).map(d=>d.trim());i[1]=u.shift(),l=u,c=!0}if(o=n(a.call(this,i[1].trim(),s),s),o&&i[0]===t&&typeof o!="string")return o;typeof o!="string"&&(o=KP(o)),o||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${t}`),o=""),c&&(o=l.reduce((u,d)=>this.format(u,d,r.lng,{...r,interpolationkey:i[1].trim()}),o.trim())),t=t.replace(i[0],o),this.regexp.lastIndex=0}return t}}function GY(e){let t=e.toLowerCase().trim();const n={};if(e.indexOf("(")>-1){const r=e.split("(");t=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);t==="currency"&&i.indexOf(":")<0?n.currency||(n.currency=i.trim()):t==="relativetime"&&i.indexOf(":")<0?n.range||(n.range=i.trim()):i.split(";").forEach(s=>{if(!s)return;const[a,...l]=s.split(":"),c=l.join(":").trim().replace(/^'+|'+$/g,"");n[a.trim()]||(n[a.trim()]=c),c==="false"&&(n[a.trim()]=!1),c==="true"&&(n[a.trim()]=!0),isNaN(c)||(n[a.trim()]=parseInt(c,10))})}return{formatName:t,formatOptions:n}}function Pu(e){const t={};return function(r,i,o){const s=i+JSON.stringify(o);let a=t[s];return a||(a=e(c1(i),o),t[s]=a),a(r)}}class HY{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=cs.create("formatter"),this.options=t,this.formats={number:Pu((n,r)=>{const i=new Intl.NumberFormat(n,{...r});return o=>i.format(o)}),currency:Pu((n,r)=>{const i=new Intl.NumberFormat(n,{...r,style:"currency"});return o=>i.format(o)}),datetime:Pu((n,r)=>{const i=new Intl.DateTimeFormat(n,{...r});return o=>i.format(o)}),relativetime:Pu((n,r)=>{const i=new Intl.RelativeTimeFormat(n,{...r});return o=>i.format(o,r.range||"day")}),list:Pu((n,r)=>{const i=new Intl.ListFormat(n,{...r});return o=>i.format(o)})},this.init(t)}init(t){const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||","}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Pu(n)}format(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n.split(this.formatSeparator).reduce((a,l)=>{const{formatName:c,formatOptions:u}=GY(l);if(this.formats[c]){let d=a;try{const f=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},h=f.locale||f.lng||i.locale||i.lng||r;d=this.formats[c](a,h,{...u,...i,...f})}catch(f){this.logger.warn(f)}return d}else this.logger.warn(`there was no format function for ${c}`);return a},t)}}function WY(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}class qY extends Kb{constructor(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=t,this.store=n,this.services=r,this.languageUtils=r.languageUtils,this.options=i,this.logger=cs.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,i.backend,i)}queueLoad(t,n,r,i){const o={},s={},a={},l={};return t.forEach(c=>{let u=!0;n.forEach(d=>{const f=`${c}|${d}`;!r.reload&&this.store.hasResourceBundle(c,d)?this.state[f]=2:this.state[f]<0||(this.state[f]===1?s[f]===void 0&&(s[f]=!0):(this.state[f]=1,u=!1,s[f]===void 0&&(s[f]=!0),o[f]===void 0&&(o[f]=!0),l[d]===void 0&&(l[d]=!0)))}),u||(a[c]=!0)}),(Object.keys(o).length||Object.keys(s).length)&&this.queue.push({pending:s,pendingCount:Object.keys(s).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(o),pending:Object.keys(s),toLoadLanguages:Object.keys(a),toLoadNamespaces:Object.keys(l)}}loaded(t,n,r){const i=t.split("|"),o=i[0],s=i[1];n&&this.emit("failedLoading",o,s,n),r&&this.store.addResourceBundle(o,s,r),this.state[t]=n?-1:2;const a={};this.queue.forEach(l=>{MY(l.loaded,[o],s),WY(l,t),n&&l.errors.push(n),l.pendingCount===0&&!l.done&&(Object.keys(l.loaded).forEach(c=>{a[c]||(a[c]={});const u=l.loaded[c];u.length&&u.forEach(d=>{a[c][d]===void 0&&(a[c][d]=!0)})}),l.done=!0,l.errors.length?l.callback(l.errors):l.callback())}),this.emit("loaded",a),this.queue=this.queue.filter(l=>!l.done)}read(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,s=arguments.length>5?arguments[5]:void 0;if(!t.length)return s(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:r,tried:i,wait:o,callback:s});return}this.readingCalls++;const a=(c,u)=>{if(this.readingCalls--,this.waitingReads.length>0){const d=this.waitingReads.shift();this.read(d.lng,d.ns,d.fcName,d.tried,d.wait,d.callback)}if(c&&u&&i{this.read.call(this,t,n,r,i+1,o*2,s)},o);return}s(c,u)},l=this.backend[r].bind(this.backend);if(l.length===2){try{const c=l(t,n);c&&typeof c.then=="function"?c.then(u=>a(null,u)).catch(a):a(null,c)}catch(c){a(c)}return}return l(t,n,a)}prepareLoading(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);const o=this.queueLoad(t,n,r,i);if(!o.toLoad.length)return o.pending.length||i(),null;o.toLoad.forEach(s=>{this.loadOne(s)})}load(t,n,r){this.prepareLoading(t,n,{},r)}reload(t,n,r){this.prepareLoading(t,n,{reload:!0},r)}loadOne(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const r=t.split("|"),i=r[0],o=r[1];this.read(i,o,"read",void 0,void 0,(s,a)=>{s&&this.logger.warn(`${n}loading namespace ${o} for language ${i} failed`,s),!s&&a&&this.logger.log(`${n}loaded namespace ${o} for language ${i}`,a),this.loaded(t,s,a)})}saveMissing(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)){this.logger.warn(`did not save key "${r}" as the namespace "${n}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if(this.backend&&this.backend.create){const l={...s,isUpdate:o},c=this.backend.create.bind(this.backend);if(c.length<6)try{let u;c.length===5?u=c(t,n,r,i,l):u=c(t,n,r,i),u&&typeof u.then=="function"?u.then(d=>a(null,d)).catch(a):a(null,u)}catch(u){a(u)}else c(t,n,r,i,a,l)}!t||!t[0]||this.store.addResource(t[0],n,r,i)}}}function t6(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){let n={};if(typeof t[1]=="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const r=t[3]||t[2];Object.keys(r).forEach(i=>{n[i]=r[i]})}return n},interpolation:{escapeValue:!0,format:(e,t,n,r)=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function n6(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function O0(){}function KY(e){Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}class Jp extends Kb{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=n6(t),this.services={},this.logger=cs,this.modules={external:[]},KY(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(){var t=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;typeof n=="function"&&(r=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(typeof n.ns=="string"?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const i=t6();this.options={...i,...this.options,...n6(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);function o(u){return u?typeof u=="function"?new u:u:null}if(!this.options.isClone){this.modules.logger?cs.init(o(this.modules.logger),this.options):cs.init(null,this.options);let u;this.modules.formatter?u=this.modules.formatter:typeof Intl<"u"&&(u=HY);const d=new ZP(this.options);this.store=new QP(this.options.resources,this.options);const f=this.services;f.logger=cs,f.resourceStore=this.store,f.languageUtils=d,f.pluralResolver=new VY(d,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),u&&(!this.options.interpolation.format||this.options.interpolation.format===i.interpolation.format)&&(f.formatter=o(u),f.formatter.init(f,this.options),this.options.interpolation.format=f.formatter.format.bind(f.formatter)),f.interpolator=new UY(this.options),f.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},f.backendConnector=new qY(o(this.modules.backend),f.resourceStore,f,this.options),f.backendConnector.on("*",function(h){for(var p=arguments.length,m=new Array(p>1?p-1:0),_=1;_1?p-1:0),_=1;_{h.init&&h.init(this)})}if(this.format=this.options.interpolation.format,r||(r=O0),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const u=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);u.length>0&&u[0]!=="dev"&&(this.options.lng=u[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(u=>{this[u]=function(){return t.store[u](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(u=>{this[u]=function(){return t.store[u](...arguments),t}});const l=dh(),c=()=>{const u=(d,f)=>{this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(f),r(d,f)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return u(null,this.t.bind(this));this.changeLanguage(this.options.lng,u)};return this.options.resources||!this.options.initImmediate?c():setTimeout(c,0),l}loadResources(t){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O0;const i=typeof t=="string"?t:this.language;if(typeof t=="function"&&(r=t),!this.options.resources||this.options.partialBundledLanguages){if(i&&i.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const o=[],s=a=>{if(!a||a==="cimode")return;this.services.languageUtils.toResolveHierarchy(a).forEach(c=>{c!=="cimode"&&o.indexOf(c)<0&&o.push(c)})};i?s(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(l=>s(l)),this.options.preload&&this.options.preload.forEach(a=>s(a)),this.services.backendConnector.load(o,this.options.ns,a=>{!a&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(a)})}else r(null)}reloadResources(t,n,r){const i=dh();return t||(t=this.languages),n||(n=this.options.ns),r||(r=O0),this.services.backendConnector.reload(t,n,o=>{i.resolve(),r(o)}),i}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&kN.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!(["cimode","dev"].indexOf(t)>-1))for(let n=0;n-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}}changeLanguage(t,n){var r=this;this.isLanguageChangingTo=t;const i=dh();this.emit("languageChanging",t);const o=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},s=(l,c)=>{c?(o(c),this.translator.changeLanguage(c),this.isLanguageChangingTo=void 0,this.emit("languageChanged",c),this.logger.log("languageChanged",c)):this.isLanguageChangingTo=void 0,i.resolve(function(){return r.t(...arguments)}),n&&n(l,function(){return r.t(...arguments)})},a=l=>{!t&&!l&&this.services.languageDetector&&(l=[]);const c=typeof l=="string"?l:this.services.languageUtils.getBestMatchFromCodes(l);c&&(this.language||o(c),this.translator.language||this.translator.changeLanguage(c),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(c)),this.loadResources(c,u=>{s(u,c)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(t),i}getFixedT(t,n,r){var i=this;const o=function(s,a){let l;if(typeof a!="object"){for(var c=arguments.length,u=new Array(c>2?c-2:0),d=2;d`${l.keyPrefix}${f}${p}`):h=l.keyPrefix?`${l.keyPrefix}${f}${s}`:s,i.t(h,l)};return typeof t=="string"?o.lng=t:o.lngs=t,o.ns=n,o.keyPrefix=r,o}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=n.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,o=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const c=this.services.backendConnector.state[`${a}|${l}`];return c===-1||c===2};if(n.precheck){const a=n.precheck(this,s);if(a!==void 0)return a}return!!(this.hasResourceBundle(r,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||s(r,t)&&(!i||s(o,t)))}loadNamespaces(t,n){const r=dh();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),n&&n(i)}),r):(n&&n(),Promise.resolve())}loadLanguages(t,n){const r=dh();typeof t=="string"&&(t=[t]);const i=this.options.preload||[],o=t.filter(s=>i.indexOf(s)<0);return o.length?(this.options.preload=i.concat(o),this.loadResources(s=>{r.resolve(),n&&n(s)}),r):(n&&n(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)return"rtl";const n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=this.services&&this.services.languageUtils||new ZP(t6());return n.indexOf(r.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new Jp(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O0;const r=t.forkResourceStore;r&&delete t.forkResourceStore;const i={...this.options,...t,isClone:!0},o=new Jp(i);return(t.debug!==void 0||t.prefix!==void 0)&&(o.logger=o.logger.clone(t)),["store","services","language"].forEach(a=>{o[a]=this[a]}),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},r&&(o.store=new QP(this.store.data,i),o.services.resourceStore=o.store),o.translator=new u1(o.services,i),o.translator.on("*",function(a){for(var l=arguments.length,c=new Array(l>1?l-1:0),u=1;u0){if(++t>=jZ)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function HZ(e){return function(){return e}}var WZ=function(){try{var e=cu(Object,"defineProperty");return e({},"",{}),e}catch{}}();const f1=WZ;var qZ=f1?function(e,t){return f1(e,"toString",{configurable:!0,enumerable:!1,value:HZ(t),writable:!0})}:Qb;const KZ=qZ;var XZ=GZ(KZ);const $N=XZ;function NN(e,t){for(var n=-1,r=e==null?0:e.length;++n-1}var tJ=9007199254740991,nJ=/^(?:0|[1-9]\d*)$/;function Yb(e,t){var n=typeof e;return t=t??tJ,!!t&&(n=="number"||n!="symbol"&&nJ.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=oJ}function Mf(e){return e!=null&&C4(e.length)&&!x4(e)}function Jb(e,t,n){if(!_r(n))return!1;var r=typeof t;return(r=="number"?Mf(n)&&Yb(t,n.length):r=="string"&&t in n)?hm(n[t],e):!1}function LN(e){return DN(function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&typeof o=="function"?(i--,o):void 0,s&&Jb(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=Object(t);++r-1}function _ee(e,t){var n=this.__data__,r=t_(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function ma(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(a)?t>1?WN(a,t-1,n,r,i):P4(i,a):r||(i[i.length]=a)}return i}function Dee(e){var t=e==null?0:e.length;return t?WN(e,1):[]}function qN(e){return $N(FN(e,void 0,Dee),e+"")}var Lee=UN(Object.getPrototypeOf,Object);const I4=Lee;var Bee="[object Object]",zee=Function.prototype,jee=Object.prototype,KN=zee.toString,Vee=jee.hasOwnProperty,Uee=KN.call(Object);function XN(e){if(!Ei(e)||Ts(e)!=Bee)return!1;var t=I4(e);if(t===null)return!0;var n=Vee.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&KN.call(n)==Uee}function QN(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++r=r?e:QN(e,t,n)}var Gee="\\ud800-\\udfff",Hee="\\u0300-\\u036f",Wee="\\ufe20-\\ufe2f",qee="\\u20d0-\\u20ff",Kee=Hee+Wee+qee,Xee="\\ufe0e\\ufe0f",Qee="\\u200d",Yee=RegExp("["+Qee+Gee+Kee+Xee+"]");function i_(e){return Yee.test(e)}function Zee(e){return e.split("")}var ZN="\\ud800-\\udfff",Jee="\\u0300-\\u036f",ete="\\ufe20-\\ufe2f",tte="\\u20d0-\\u20ff",nte=Jee+ete+tte,rte="\\ufe0e\\ufe0f",ite="["+ZN+"]",S5="["+nte+"]",x5="\\ud83c[\\udffb-\\udfff]",ote="(?:"+S5+"|"+x5+")",JN="[^"+ZN+"]",eF="(?:\\ud83c[\\udde6-\\uddff]){2}",tF="[\\ud800-\\udbff][\\udc00-\\udfff]",ste="\\u200d",nF=ote+"?",rF="["+rte+"]?",ate="(?:"+ste+"(?:"+[JN,eF,tF].join("|")+")"+rF+nF+")*",lte=rF+nF+ate,cte="(?:"+[JN+S5+"?",S5,eF,tF,ite].join("|")+")",ute=RegExp(x5+"(?="+x5+")|"+cte+lte,"g");function dte(e){return e.match(ute)||[]}function iF(e){return i_(e)?dte(e):Zee(e)}function fte(e){return function(t){t=af(t);var n=i_(t)?iF(t):void 0,r=n?n[0]:t.charAt(0),i=n?YN(n,1).join(""):t.slice(1);return r[e]()+i}}var hte=fte("toUpperCase");const oF=hte;function sF(e,t,n,r){var i=-1,o=e==null?0:e.length;for(r&&o&&(n=e[++i]);++i=t?e:t)),e}function el(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=qy(n),n=n===n?n:0),t!==void 0&&(t=qy(t),t=t===t?t:0),rne(qy(e),t,n)}function ine(){this.__data__=new ma,this.size=0}function one(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function sne(e){return this.__data__.get(e)}function ane(e){return this.__data__.has(e)}var lne=200;function cne(e,t){var n=this.__data__;if(n instanceof ma){var r=n.__data__;if(!rg||r.lengtha))return!1;var c=o.get(e),u=o.get(t);if(c&&u)return c==t&&u==e;var d=-1,f=!0,h=n&Gre?new ig:void 0;for(o.set(e,t),o.set(t,e);++d1),o}),If(e,EF(e),n),r&&(n=gp(n,Jie|eoe|toe,Zie));for(var i=t.length;i--;)Yie(n,t[i]);return n});const uu=noe;function roe(e,t,n,r){if(!_r(e))return e;t=Rf(t,e);for(var i=-1,o=t.length,s=o-1,a=e;a!=null&&++it){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Toe();return Eoe(e+i*(t-e+Coe("1e-"+((i+"").length-1))),t)}return woe(e,t)}var koe=Math.ceil,Poe=Math.max;function Ioe(e,t,n,r){for(var i=-1,o=Poe(koe((t-e)/(n||1)),0),s=Array(o);o--;)s[r?o:++i]=e,e+=n;return s}function Moe(e){return function(t,n,r){return r&&typeof r!="number"&&Jb(t,n,r)&&(n=r=void 0),t=kd(t),n===void 0?(n=t,t=0):n=kd(n),r=r===void 0?t=o)return e;var a=n-XF(r);if(a<1)return r;var l=s?YN(s,0,a).join(""):e.slice(0,a);if(i===void 0)return l+r;if(s&&(a+=l.length-a),Kie(i)){if(e.slice(a).search(i)){var c,u=l;for(i.global||(i=RegExp(i.source,af(joe.exec(i))+"g")),i.lastIndex=0;c=i.exec(u);)var d=c.index;l=l.slice(0,d===void 0?a:d)}}else if(e.indexOf(d1(i),a)!=a){var f=l.lastIndexOf(i);f>-1&&(l=l.slice(0,f))}return l+r}var Voe=1/0,Uoe=Pd&&1/O4(new Pd([,-0]))[1]==Voe?function(e){return new Pd(e)}:zZ;const Goe=Uoe;var Hoe=200;function QF(e,t,n){var r=-1,i=eJ,o=e.length,s=!0,a=[],l=a;if(n)s=!1,i=Bie;else if(o>=Hoe){var c=t?null:Goe(e);if(c)return O4(c);s=!1,i=RF,l=new ig}else l=t?[]:a;e:for(;++rt===0?0:n===2?Math.floor((e+1+1)/2)/Math.floor((t+1)/2):(e+1+1)/(t+1),pi=e=>typeof e=="string"?{title:e,status:"info",isClosable:!0,duration:2500}:{status:"info",isClosable:!0,duration:2500,...e},gD={isInitialized:!1,isConnected:!1,shouldConfirmOnDelete:!0,enableImageDebugging:!1,toastQueue:[],denoiseProgress:null,shouldAntialiasProgressImage:!1,consoleLogLevel:"debug",shouldLogToConsole:!0,language:"en",shouldUseNSFWChecker:!1,shouldUseWatermarker:!1,shouldEnableInformationalPopovers:!1,status:"DISCONNECTED"},mD=jt({name:"system",initialState:gD,reducers:{setShouldConfirmOnDelete:(e,t)=>{e.shouldConfirmOnDelete=t.payload},setEnableImageDebugging:(e,t)=>{e.enableImageDebugging=t.payload},addToast:(e,t)=>{e.toastQueue.push(t.payload)},clearToastQueue:e=>{e.toastQueue=[]},consoleLogLevelChanged:(e,t)=>{e.consoleLogLevel=t.payload},shouldLogToConsoleChanged:(e,t)=>{e.shouldLogToConsole=t.payload},shouldAntialiasProgressImageChanged:(e,t)=>{e.shouldAntialiasProgressImage=t.payload},languageChanged:(e,t)=>{e.language=t.payload},shouldUseNSFWCheckerChanged(e,t){e.shouldUseNSFWChecker=t.payload},shouldUseWatermarkerChanged(e,t){e.shouldUseWatermarker=t.payload},setShouldEnableInformationalPopovers(e,t){e.shouldEnableInformationalPopovers=t.payload},isInitializedChanged(e,t){e.isInitialized=t.payload}},extraReducers(e){e.addCase(F4,t=>{t.isConnected=!0,t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(eD,t=>{t.isConnected=!1,t.denoiseProgress=null,t.status="DISCONNECTED"}),e.addCase(D4,t=>{t.denoiseProgress=null,t.status="PROCESSING"}),e.addCase(z4,(t,n)=>{const{step:r,total_steps:i,order:o,progress_image:s,graph_execution_state_id:a,queue_batch_id:l}=n.payload.data;t.denoiseProgress={step:r,total_steps:i,order:o,percentage:Yoe(r,i,o),progress_image:s,session_id:a,batch_id:l},t.status="PROCESSING"}),e.addCase(B4,t=>{t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(iD,t=>{t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(aD,t=>{t.status="LOADING_MODEL"}),e.addCase(cD,t=>{t.status="CONNECTED"}),e.addCase(d_,(t,n)=>{["completed","canceled","failed"].includes(n.payload.data.queue_item.status)&&(t.status="CONNECTED",t.denoiseProgress=null)}),e.addMatcher(nse,(t,n)=>{t.toastQueue.push(pi({title:J("toast.serverError"),status:"error",description:N4(n.payload.data.error_type)}))})}}),{setShouldConfirmOnDelete:gze,setEnableImageDebugging:mze,addToast:Ve,clearToastQueue:yze,consoleLogLevelChanged:vze,shouldLogToConsoleChanged:bze,shouldAntialiasProgressImageChanged:_ze,languageChanged:Sze,shouldUseNSFWCheckerChanged:Zoe,shouldUseWatermarkerChanged:Joe,setShouldEnableInformationalPopovers:xze,isInitializedChanged:ese}=mD.actions,tse=mD.reducer,nse=br(u_,dD,hD),rse=e=>{const{socket:t,dispatch:n}=e;t.on("connect",()=>{n(ZF());const r=In.get();t.emit("subscribe_queue",{queue_id:r})}),t.on("connect_error",r=>{r&&r.message&&r.data==="ERR_UNAUTHENTICATED"&&n(Ve(pi({title:r.message,status:"error",duration:1e4})))}),t.on("disconnect",()=>{n(JF())}),t.on("invocation_started",r=>{n(tD({data:r}))}),t.on("generator_progress",r=>{n(oD({data:r}))}),t.on("invocation_error",r=>{n(nD({data:r}))}),t.on("invocation_complete",r=>{n(L4({data:r}))}),t.on("graph_execution_state_complete",r=>{n(rD({data:r}))}),t.on("model_load_started",r=>{n(sD({data:r}))}),t.on("model_load_completed",r=>{n(lD({data:r}))}),t.on("session_retrieval_error",r=>{n(uD({data:r}))}),t.on("invocation_retrieval_error",r=>{n(fD({data:r}))}),t.on("queue_item_status_changed",r=>{n(pD({data:r}))})},Ss=Object.create(null);Ss.open="0";Ss.close="1";Ss.ping="2";Ss.pong="3";Ss.message="4";Ss.upgrade="5";Ss.noop="6";const Ky=Object.create(null);Object.keys(Ss).forEach(e=>{Ky[Ss[e]]=e});const I5={type:"error",data:"parser error"},yD=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",vD=typeof ArrayBuffer=="function",bD=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,j4=({type:e,data:t},n,r)=>yD&&t instanceof Blob?n?r(t):j6(t,r):vD&&(t instanceof ArrayBuffer||bD(t))?n?r(t):j6(new Blob([t]),r):r(Ss[e]+(t||"")),j6=(e,t)=>{const n=new FileReader;return n.onload=function(){const r=n.result.split(",")[1];t("b"+(r||""))},n.readAsDataURL(e)};function V6(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let Ux;function ise(e,t){if(yD&&e.data instanceof Blob)return e.data.arrayBuffer().then(V6).then(t);if(vD&&(e.data instanceof ArrayBuffer||bD(e.data)))return t(V6(e.data));j4(e,!1,n=>{Ux||(Ux=new TextEncoder),t(Ux.encode(n))})}const U6="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Vh=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let e=0;e{let t=e.length*.75,n=e.length,r,i=0,o,s,a,l;e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);const c=new ArrayBuffer(t),u=new Uint8Array(c);for(r=0;r>4,u[i++]=(s&15)<<4|a>>2,u[i++]=(a&3)<<6|l&63;return c},sse=typeof ArrayBuffer=="function",V4=(e,t)=>{if(typeof e!="string")return{type:"message",data:_D(e,t)};const n=e.charAt(0);return n==="b"?{type:"message",data:ase(e.substring(1),t)}:Ky[n]?e.length>1?{type:Ky[n],data:e.substring(1)}:{type:Ky[n]}:I5},ase=(e,t)=>{if(sse){const n=ose(e);return _D(n,t)}else return{base64:!0,data:e}},_D=(e,t)=>{switch(t){case"blob":return e instanceof Blob?e:new Blob([e]);case"arraybuffer":default:return e instanceof ArrayBuffer?e:e.buffer}},SD=String.fromCharCode(30),lse=(e,t)=>{const n=e.length,r=new Array(n);let i=0;e.forEach((o,s)=>{j4(o,!1,a=>{r[s]=a,++i===n&&t(r.join(SD))})})},cse=(e,t)=>{const n=e.split(SD),r=[];for(let i=0;i{const r=n.length;let i;if(r<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,r);else if(r<65536){i=new Uint8Array(3);const o=new DataView(i.buffer);o.setUint8(0,126),o.setUint16(1,r)}else{i=new Uint8Array(9);const o=new DataView(i.buffer);o.setUint8(0,127),o.setBigUint64(1,BigInt(r))}e.data&&typeof e.data!="string"&&(i[0]|=128),t.enqueue(i),t.enqueue(n)})}})}let Gx;function N0(e){return e.reduce((t,n)=>t+n.length,0)}function F0(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let i=0;iMath.pow(2,53-32)-1){a.enqueue(I5);break}i=u*Math.pow(2,32)+c.getUint32(4),r=3}else{if(N0(n)e){a.enqueue(I5);break}}}})}const xD=4;function vn(e){if(e)return fse(e)}function fse(e){for(var t in vn.prototype)e[t]=vn.prototype[t];return e}vn.prototype.on=vn.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this};vn.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this};vn.prototype.off=vn.prototype.removeListener=vn.prototype.removeAllListeners=vn.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(arguments.length==1)return delete this._callbacks["$"+e],this;for(var r,i=0;itypeof self<"u"?self:typeof window<"u"?window:Function("return this")())();function wD(e,...t){return t.reduce((n,r)=>(e.hasOwnProperty(r)&&(n[r]=e[r]),n),{})}const hse=qi.setTimeout,pse=qi.clearTimeout;function f_(e,t){t.useNativeTimers?(e.setTimeoutFn=hse.bind(qi),e.clearTimeoutFn=pse.bind(qi)):(e.setTimeoutFn=qi.setTimeout.bind(qi),e.clearTimeoutFn=qi.clearTimeout.bind(qi))}const gse=1.33;function mse(e){return typeof e=="string"?yse(e):Math.ceil((e.byteLength||e.size)*gse)}function yse(e){let t=0,n=0;for(let r=0,i=e.length;r=57344?n+=3:(r++,n+=4);return n}function vse(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t}function bse(e){let t={},n=e.split("&");for(let r=0,i=n.length;r0);return t}function ED(){const e=W6(+new Date);return e!==H6?(G6=0,H6=e):e+"."+W6(G6++)}for(;D0{this.readyState="paused",t()};if(this.polling||!this.writable){let r=0;this.polling&&(r++,this.once("pollComplete",function(){--r||n()})),this.writable||(r++,this.once("drain",function(){--r||n()}))}else n()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const n=r=>{if(this.readyState==="opening"&&r.type==="open"&&this.onOpen(),r.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(r)};cse(t,this.socket.binaryType).forEach(n),this.readyState!=="closed"&&(this.polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this.poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,lse(t,n=>{this.doWrite(n,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",n=this.query||{};return this.opts.timestampRequests!==!1&&(n[this.opts.timestampParam]=ED()),!this.supportsBinary&&!n.sid&&(n.b64=1),this.createUri(t,n)}request(t={}){return Object.assign(t,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new Md(this.uri(),t)}doWrite(t,n){const r=this.request({method:"POST",data:t});r.on("success",n),r.on("error",(i,o)=>{this.onError("xhr post error",i,o)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(n,r)=>{this.onError("xhr poll error",n,r)}),this.pollXhr=t}}let Md=class Xy extends vn{constructor(t,n){super(),f_(this,n),this.opts=n,this.method=n.method||"GET",this.uri=t,this.data=n.data!==void 0?n.data:null,this.create()}create(){var t;const n=wD(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this.opts.xd;const r=this.xhr=new AD(n);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let i in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(i)&&r.setRequestHeader(i,this.opts.extraHeaders[i])}}catch{}if(this.method==="POST")try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{r.setRequestHeader("Accept","*/*")}catch{}(t=this.opts.cookieJar)===null||t===void 0||t.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var i;r.readyState===3&&((i=this.opts.cookieJar)===null||i===void 0||i.parseCookies(r)),r.readyState===4&&(r.status===200||r.status===1223?this.onLoad():this.setTimeoutFn(()=>{this.onError(typeof r.status=="number"?r.status:0)},0))},r.send(this.data)}catch(i){this.setTimeoutFn(()=>{this.onError(i)},0);return}typeof document<"u"&&(this.index=Xy.requestsCount++,Xy.requests[this.index]=this)}onError(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}cleanup(t){if(!(typeof this.xhr>"u"||this.xhr===null)){if(this.xhr.onreadystatechange=wse,t)try{this.xhr.abort()}catch{}typeof document<"u"&&delete Xy.requests[this.index],this.xhr=null}}onLoad(){const t=this.xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}};Md.requestsCount=0;Md.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",q6);else if(typeof addEventListener=="function"){const e="onpagehide"in qi?"pagehide":"unload";addEventListener(e,q6,!1)}}function q6(){for(let e in Md.requests)Md.requests.hasOwnProperty(e)&&Md.requests[e].abort()}const G4=(()=>typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,n)=>n(t,0))(),L0=qi.WebSocket||qi.MozWebSocket,K6=!0,Tse="arraybuffer",X6=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class Ase extends U4{constructor(t){super(t),this.supportsBinary=!t.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const t=this.uri(),n=this.opts.protocols,r=X6?{}:wD(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=K6&&!X6?n?new L0(t,n):new L0(t):new L0(t,n,r)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let n=0;n{const s={};try{K6&&this.ws.send(o)}catch{}i&&G4(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",n=this.query||{};return this.opts.timestampRequests&&(n[this.opts.timestampParam]=ED()),this.supportsBinary||(n.b64=1),this.createUri(t,n)}check(){return!!L0}}class kse extends U4{get name(){return"webtransport"}doOpen(){typeof WebTransport=="function"&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this.transport.ready.then(()=>{this.transport.createBidirectionalStream().then(t=>{const n=dse(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=t.readable.pipeThrough(n).getReader(),i=use();i.readable.pipeTo(t.writable),this.writer=i.writable.getWriter();const o=()=>{r.read().then(({done:a,value:l})=>{a||(this.onPacket(l),o())}).catch(a=>{})};o();const s={type:"open"};this.query.sid&&(s.data=`{"sid":"${this.query.sid}"}`),this.writer.write(s).then(()=>this.onOpen())})}))}write(t){this.writable=!1;for(let n=0;n{i&&G4(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this.transport)===null||t===void 0||t.close()}}const Pse={websocket:Ase,webtransport:kse,polling:Ese},Ise=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Mse=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function R5(e){const t=e,n=e.indexOf("["),r=e.indexOf("]");n!=-1&&r!=-1&&(e=e.substring(0,n)+e.substring(n,r).replace(/:/g,";")+e.substring(r,e.length));let i=Ise.exec(e||""),o={},s=14;for(;s--;)o[Mse[s]]=i[s]||"";return n!=-1&&r!=-1&&(o.source=t,o.host=o.host.substring(1,o.host.length-1).replace(/;/g,":"),o.authority=o.authority.replace("[","").replace("]","").replace(/;/g,":"),o.ipv6uri=!0),o.pathNames=Rse(o,o.path),o.queryKey=Ose(o,o.query),o}function Rse(e,t){const n=/\/{2,9}/g,r=t.replace(n,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&r.splice(0,1),t.slice(-1)=="/"&&r.splice(r.length-1,1),r}function Ose(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,i,o){i&&(n[i]=o)}),n}let kD=class Hu extends vn{constructor(t,n={}){super(),this.binaryType=Tse,this.writeBuffer=[],t&&typeof t=="object"&&(n=t,t=null),t?(t=R5(t),n.hostname=t.host,n.secure=t.protocol==="https"||t.protocol==="wss",n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=R5(n.host).host),f_(this,n),this.secure=n.secure!=null?n.secure:typeof location<"u"&&location.protocol==="https:",n.hostname&&!n.port&&(n.port=this.secure?"443":"80"),this.hostname=n.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=n.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=n.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},n),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=bse(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,typeof addEventListener=="function"&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(t){const n=Object.assign({},this.opts.query);n.EIO=xD,n.transport=t,this.id&&(n.sid=this.id);const r=Object.assign({},this.opts,{query:n,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new Pse[t](r)}open(){let t;if(this.opts.rememberUpgrade&&Hu.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}else t=this.transports[0];this.readyState="opening";try{t=this.createTransport(t)}catch{this.transports.shift(),this.open();return}t.open(),this.setTransport(t)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",n=>this.onClose("transport close",n))}probe(t){let n=this.createTransport(t),r=!1;Hu.priorWebsocketSuccess=!1;const i=()=>{r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",d=>{if(!r)if(d.type==="pong"&&d.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",n),!n)return;Hu.priorWebsocketSuccess=n.name==="websocket",this.transport.pause(()=>{r||this.readyState!=="closed"&&(u(),this.setTransport(n),n.send([{type:"upgrade"}]),this.emitReserved("upgrade",n),n=null,this.upgrading=!1,this.flush())})}else{const f=new Error("probe error");f.transport=n.name,this.emitReserved("upgradeError",f)}}))};function o(){r||(r=!0,u(),n.close(),n=null)}const s=d=>{const f=new Error("probe error: "+d);f.transport=n.name,o(),this.emitReserved("upgradeError",f)};function a(){s("transport closed")}function l(){s("socket closed")}function c(d){n&&d.name!==n.name&&o()}const u=()=>{n.removeListener("open",i),n.removeListener("error",s),n.removeListener("close",a),this.off("close",l),this.off("upgrading",c)};n.once("open",i),n.once("error",s),n.once("close",a),this.once("close",l),this.once("upgrading",c),this.upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{r||n.open()},200):n.open()}onOpen(){if(this.readyState="open",Hu.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush(),this.readyState==="open"&&this.opts.upgrade){let t=0;const n=this.upgrades.length;for(;t{this.onClose("ping timeout")},this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let n=1;for(let r=0;r0&&n>this.maxPayload)return this.writeBuffer.slice(0,r);n+=2}return this.writeBuffer}write(t,n,r){return this.sendPacket("message",t,n,r),this}send(t,n,r){return this.sendPacket("message",t,n,r),this}sendPacket(t,n,r,i){if(typeof n=="function"&&(i=n,n=void 0),typeof r=="function"&&(i=r,r=null),this.readyState==="closing"||this.readyState==="closed")return;r=r||{},r.compress=r.compress!==!1;const o={type:t,data:n,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),i&&this.once("flush",i),this.flush()}close(){const t=()=>{this.onClose("forced close"),this.transport.close()},n=()=>{this.off("upgrade",n),this.off("upgradeError",n),t()},r=()=>{this.once("upgrade",n),this.once("upgradeError",n)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():t()}):this.upgrading?r():t()),this}onError(t){Hu.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(t,n){(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")&&(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),typeof removeEventListener=="function"&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",t,n),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(t){const n=[];let r=0;const i=t.length;for(;rtypeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,PD=Object.prototype.toString,Dse=typeof Blob=="function"||typeof Blob<"u"&&PD.call(Blob)==="[object BlobConstructor]",Lse=typeof File=="function"||typeof File<"u"&&PD.call(File)==="[object FileConstructor]";function H4(e){return Nse&&(e instanceof ArrayBuffer||Fse(e))||Dse&&e instanceof Blob||Lse&&e instanceof File}function Qy(e,t){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let n=0,r=e.length;n=0&&e.num{delete this.acks[t];for(let s=0;s{this.io.clearTimeoutFn(o),n.apply(this,[null,...s])}}emitWithAck(t,...n){const r=this.flags.timeout!==void 0||this._opts.ackTimeout!==void 0;return new Promise((i,o)=>{n.push((s,a)=>r?s?o(s):i(a):i(s)),this.emit(t,...n)})}_addToQueue(t){let n;typeof t[t.length-1]=="function"&&(n=t.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((i,...o)=>r!==this._queue[0]?void 0:(i!==null?r.tryCount>this._opts.retries&&(this._queue.shift(),n&&n(i)):(this._queue.shift(),n&&n(null,...o)),r.pending=!1,this._drainQueue())),this._queue.push(r),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const n=this._queue[0];n.pending&&!t||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:Ye.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,n)}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case Ye.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Ye.EVENT:case Ye.BINARY_EVENT:this.onevent(t);break;case Ye.ACK:case Ye.BINARY_ACK:this.onack(t);break;case Ye.DISCONNECT:this.ondisconnect();break;case Ye.CONNECT_ERROR:this.destroy();const r=new Error(t.data.message);r.data=t.data.data,this.emitReserved("connect_error",r);break}}onevent(t){const n=t.data||[];t.id!=null&&n.push(this.ack(t.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const n=this._anyListeners.slice();for(const r of n)r.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const n=this;let r=!1;return function(...i){r||(r=!0,n.packet({type:Ye.ACK,id:t,data:i}))}}onack(t){const n=this.acks[t.id];typeof n=="function"&&(n.apply(this,t.data),delete this.acks[t.id])}onconnect(t,n){this.id=t,this.recovered=n&&this._pid===n,this._pid=n,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:Ye.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const n=this._anyListeners;for(let r=0;r0&&e.jitter<=1?e.jitter:0,this.attempts=0}$f.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+n:e-n}return Math.min(e,this.max)|0};$f.prototype.reset=function(){this.attempts=0};$f.prototype.setMin=function(e){this.ms=e};$f.prototype.setMax=function(e){this.max=e};$f.prototype.setJitter=function(e){this.jitter=e};class N5 extends vn{constructor(t,n){var r;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(n=t,t=void 0),n=n||{},n.path=n.path||"/socket.io",this.opts=n,f_(this,n),this.reconnection(n.reconnection!==!1),this.reconnectionAttempts(n.reconnectionAttempts||1/0),this.reconnectionDelay(n.reconnectionDelay||1e3),this.reconnectionDelayMax(n.reconnectionDelayMax||5e3),this.randomizationFactor((r=n.randomizationFactor)!==null&&r!==void 0?r:.5),this.backoff=new $f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(n.timeout==null?2e4:n.timeout),this._readyState="closed",this.uri=t;const i=n.parser||Hse;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=n.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var n;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(n=this.backoff)===null||n===void 0||n.setMin(t),this)}randomizationFactor(t){var n;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(n=this.backoff)===null||n===void 0||n.setJitter(t),this)}reconnectionDelayMax(t){var n;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(n=this.backoff)===null||n===void 0||n.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new kD(this.uri,this.opts);const n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const i=_o(n,"open",function(){r.onopen(),t&&t()}),o=a=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",a),t?t(a):this.maybeReconnectOnOpen()},s=_o(n,"error",o);if(this._timeout!==!1){const a=this._timeout,l=this.setTimeoutFn(()=>{i(),o(new Error("timeout")),n.close()},a);this.opts.autoUnref&&l.unref(),this.subs.push(()=>{this.clearTimeoutFn(l)})}return this.subs.push(i),this.subs.push(s),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(_o(t,"ping",this.onping.bind(this)),_o(t,"data",this.ondata.bind(this)),_o(t,"error",this.onerror.bind(this)),_o(t,"close",this.onclose.bind(this)),_o(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(n){this.onclose("parse error",n)}}ondecoded(t){G4(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,n){let r=this.nsps[t];return r?this._autoConnect&&!r.active&&r.connect():(r=new ID(this,t,n),this.nsps[t]=r),r}_destroy(t){const n=Object.keys(this.nsps);for(const r of n)if(this.nsps[r].active)return;this._close()}_packet(t){const n=this.encoder.encode(t);for(let r=0;rt()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(t,n){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,n),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const n=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(i=>{i?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",i)):t.onreconnect()}))},n);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const hh={};function Yy(e,t){typeof e=="object"&&(t=e,e=void 0),t=t||{};const n=$se(e,t.path||"/socket.io"),r=n.source,i=n.id,o=n.path,s=hh[i]&&o in hh[i].nsps,a=t.forceNew||t["force new connection"]||t.multiplex===!1||s;let l;return a?l=new N5(r,t):(hh[i]||(hh[i]=new N5(r,t)),l=hh[i]),n.query&&!t.query&&(t.query=n.queryKey),l.socket(n.path,t)}Object.assign(Yy,{Manager:N5,Socket:ID,io:Yy,connect:Yy});const g1=$X({}),Hx=to(!1),wze=()=>{const e=tN(),t=Ox(Yv),n=Ox(Qv),r=Ox(g1),i=I.useMemo(()=>{const s=window.location.protocol==="https:"?"wss":"ws";return t?t.replace(/^https?:\/\//i,""):`${s}://${window.location.host}`},[t]),o=I.useMemo(()=>{const s={timeout:6e4,path:"/ws/socket.io",autoConnect:!1,forceNew:!0};return n&&(s.auth={token:n},s.transports=["websocket","polling"]),{...s,...r}},[n,r]);I.useEffect(()=>{if(Hx.get())return;const s=Yy(i,o);return rse({dispatch:e,socket:s}),s.connect(),Zv.get()&&(window.$socketOptions=g1,console.log("Socket initialized",s)),Hx.set(!0),()=>{Zv.get()&&(window.$socketOptions=void 0,console.log("Socket teardown",s)),s.disconnect(),Hx.set(!1)}},[e,o,i])},Y6=to(void 0),Z6=to(void 0),F5=to(),MD=to(),B0=(e,t)=>Math.floor(e/t)*t,Or=(e,t)=>Math.round(e/t)*t,RD={shouldUpdateImagesOnConnect:!1,shouldFetchMetadataFromApi:!1,disabledTabs:[],disabledFeatures:["lightbox","faceRestore","batches","bulkDownload"],disabledSDFeatures:["variation","symmetry","hires","perlinNoise","noiseThreshold"],nodesAllowlist:void 0,nodesDenylist:void 0,canRestoreDeletedImagesFromBin:!0,sd:{disabledControlNetModels:[],disabledControlNetProcessors:[],iterations:{initial:1,min:1,sliderMax:1e3,inputMax:1e4,fineStep:1,coarseStep:1},width:{initial:512,min:64,sliderMax:1536,inputMax:4096,fineStep:8,coarseStep:64},height:{initial:512,min:64,sliderMax:1536,inputMax:4096,fineStep:8,coarseStep:64},steps:{initial:30,min:1,sliderMax:100,inputMax:500,fineStep:1,coarseStep:1},guidance:{initial:7,min:1,sliderMax:20,inputMax:200,fineStep:.1,coarseStep:.5},img2imgStrength:{initial:.7,min:0,sliderMax:1,inputMax:1,fineStep:.01,coarseStep:.05},hrfStrength:{initial:.45,min:0,sliderMax:1,inputMax:1,fineStep:.01,coarseStep:.05},dynamicPrompts:{maxPrompts:{initial:100,min:1,sliderMax:1e3,inputMax:1e4}}}},OD=jt({name:"config",initialState:RD,reducers:{configChanged:(e,t)=>{Id(e,t.payload)}}}),{configChanged:qse}=OD.actions,Kse=OD.reducer;let z0;const Xse=new Uint8Array(16);function Qse(){if(!z0&&(z0=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!z0))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return z0(Xse)}const Qn=[];for(let e=0;e<256;++e)Qn.push((e+256).toString(16).slice(1));function Yse(e,t=0){return Qn[e[t+0]]+Qn[e[t+1]]+Qn[e[t+2]]+Qn[e[t+3]]+"-"+Qn[e[t+4]]+Qn[e[t+5]]+"-"+Qn[e[t+6]]+Qn[e[t+7]]+"-"+Qn[e[t+8]]+Qn[e[t+9]]+"-"+Qn[e[t+10]]+Qn[e[t+11]]+Qn[e[t+12]]+Qn[e[t+13]]+Qn[e[t+14]]+Qn[e[t+15]]}const Zse=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),J6={randomUUID:Zse};function ul(e,t,n){if(J6.randomUUID&&!t&&!e)return J6.randomUUID();e=e||{};const r=e.random||(e.rng||Qse)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){n=n||0;for(let i=0;i<16;++i)t[n+i]=r[i];return t}return Yse(r)}const hc={none:{type:"none",get label(){return Oe.t("controlnet.none")},get description(){return Oe.t("controlnet.noneDescription")},default:{type:"none"}},canny_image_processor:{type:"canny_image_processor",get label(){return Oe.t("controlnet.canny")},get description(){return Oe.t("controlnet.cannyDescription")},default:{id:"canny_image_processor",type:"canny_image_processor",low_threshold:100,high_threshold:200}},color_map_image_processor:{type:"color_map_image_processor",get label(){return Oe.t("controlnet.colorMap")},get description(){return Oe.t("controlnet.colorMapDescription")},default:{id:"color_map_image_processor",type:"color_map_image_processor",color_map_tile_size:64}},content_shuffle_image_processor:{type:"content_shuffle_image_processor",get label(){return Oe.t("controlnet.contentShuffle")},get description(){return Oe.t("controlnet.contentShuffleDescription")},default:{id:"content_shuffle_image_processor",type:"content_shuffle_image_processor",detect_resolution:512,image_resolution:512,h:512,w:512,f:256}},hed_image_processor:{type:"hed_image_processor",get label(){return Oe.t("controlnet.hed")},get description(){return Oe.t("controlnet.hedDescription")},default:{id:"hed_image_processor",type:"hed_image_processor",detect_resolution:512,image_resolution:512,scribble:!1}},lineart_anime_image_processor:{type:"lineart_anime_image_processor",get label(){return Oe.t("controlnet.lineartAnime")},get description(){return Oe.t("controlnet.lineartAnimeDescription")},default:{id:"lineart_anime_image_processor",type:"lineart_anime_image_processor",detect_resolution:512,image_resolution:512}},lineart_image_processor:{type:"lineart_image_processor",get label(){return Oe.t("controlnet.lineart")},get description(){return Oe.t("controlnet.lineartDescription")},default:{id:"lineart_image_processor",type:"lineart_image_processor",detect_resolution:512,image_resolution:512,coarse:!1}},mediapipe_face_processor:{type:"mediapipe_face_processor",get label(){return Oe.t("controlnet.mediapipeFace")},get description(){return Oe.t("controlnet.mediapipeFaceDescription")},default:{id:"mediapipe_face_processor",type:"mediapipe_face_processor",max_faces:1,min_confidence:.5}},midas_depth_image_processor:{type:"midas_depth_image_processor",get label(){return Oe.t("controlnet.depthMidas")},get description(){return Oe.t("controlnet.depthMidasDescription")},default:{id:"midas_depth_image_processor",type:"midas_depth_image_processor",a_mult:2,bg_th:.1}},mlsd_image_processor:{type:"mlsd_image_processor",get label(){return Oe.t("controlnet.mlsd")},get description(){return Oe.t("controlnet.mlsdDescription")},default:{id:"mlsd_image_processor",type:"mlsd_image_processor",detect_resolution:512,image_resolution:512,thr_d:.1,thr_v:.1}},normalbae_image_processor:{type:"normalbae_image_processor",get label(){return Oe.t("controlnet.normalBae")},get description(){return Oe.t("controlnet.normalBaeDescription")},default:{id:"normalbae_image_processor",type:"normalbae_image_processor",detect_resolution:512,image_resolution:512}},openpose_image_processor:{type:"openpose_image_processor",get label(){return Oe.t("controlnet.openPose")},get description(){return Oe.t("controlnet.openPoseDescription")},default:{id:"openpose_image_processor",type:"openpose_image_processor",detect_resolution:512,image_resolution:512,hand_and_face:!1}},pidi_image_processor:{type:"pidi_image_processor",get label(){return Oe.t("controlnet.pidi")},get description(){return Oe.t("controlnet.pidiDescription")},default:{id:"pidi_image_processor",type:"pidi_image_processor",detect_resolution:512,image_resolution:512,scribble:!1,safe:!1}},zoe_depth_image_processor:{type:"zoe_depth_image_processor",get label(){return Oe.t("controlnet.depthZoe")},get description(){return Oe.t("controlnet.depthZoeDescription")},default:{id:"zoe_depth_image_processor",type:"zoe_depth_image_processor"}}},j0={canny:"canny_image_processor",mlsd:"mlsd_image_processor",depth:"midas_depth_image_processor",bae:"normalbae_image_processor",sketch:"pidi_image_processor",scribble:"lineart_image_processor",lineart:"lineart_image_processor",lineart_anime:"lineart_anime_image_processor",softedge:"hed_image_processor",shuffle:"content_shuffle_image_processor",openpose:"openpose_image_processor",mediapipe:"mediapipe_face_processor",pidi:"pidi_image_processor",zoe:"zoe_depth_image_processor",color:"color_map_image_processor"},Jse={type:"controlnet",isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,controlMode:"balanced",resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:hc.canny_image_processor.default,shouldAutoConfig:!0},eae={type:"t2i_adapter",isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:hc.canny_image_processor.default,shouldAutoConfig:!0},tae={type:"ip_adapter",isEnabled:!0,controlImage:null,model:null,weight:1,beginStepPct:0,endStepPct:1},eI=(e,t,n={})=>{switch(t){case"controlnet":return Id(Ge(Jse),{id:e,...n});case"t2i_adapter":return Id(Ge(eae),{id:e,...n});case"ip_adapter":return Id(Ge(tae),{id:e,...n});default:throw new Error(`Unknown control adapter type: ${t}`)}},q4=he("controlAdapters/imageProcessed"),h_=e=>e.type==="controlnet",$D=e=>e.type==="ip_adapter",K4=e=>e.type==="t2i_adapter",hi=e=>h_(e)||K4(e),an=jo({selectId:e=>e.id}),{selectById:li,selectAll:As,selectEntities:Cze,selectIds:Eze,selectTotal:Tze}=an.getSelectors(),D5=an.getInitialState({pendingControlImages:[]}),nae=e=>As(e).filter(h_),rae=e=>As(e).filter(h_).filter(t=>t.isEnabled&&t.model&&(!!t.processedControlImage||t.processorType==="none"&&!!t.controlImage)),iae=e=>As(e).filter($D),oae=e=>As(e).filter($D).filter(t=>t.isEnabled&&t.model&&!!t.controlImage),sae=e=>As(e).filter(K4),aae=e=>As(e).filter(K4).filter(t=>t.isEnabled&&t.model&&(!!t.processedControlImage||t.processorType==="none"&&!!t.controlImage)),ND=jt({name:"controlAdapters",initialState:D5,reducers:{controlAdapterAdded:{reducer:(e,t)=>{const{id:n,type:r,overrides:i}=t.payload;an.addOne(e,eI(n,r,i))},prepare:({type:e,overrides:t})=>({payload:{id:ul(),type:e,overrides:t}})},controlAdapterRecalled:(e,t)=>{an.addOne(e,t.payload)},controlAdapterDuplicated:{reducer:(e,t)=>{const{id:n,newId:r}=t.payload,i=li(e,n);if(!i)return;const o=Id(Ge(i),{id:r,isEnabled:!0});an.addOne(e,o)},prepare:e=>({payload:{id:e,newId:ul()}})},controlAdapterAddedFromImage:{reducer:(e,t)=>{const{id:n,type:r,controlImage:i}=t.payload;an.addOne(e,eI(n,r,{controlImage:i}))},prepare:e=>({payload:{...e,id:ul()}})},controlAdapterRemoved:(e,t)=>{an.removeOne(e,t.payload.id)},controlAdapterIsEnabledChanged:(e,t)=>{const{id:n,isEnabled:r}=t.payload;an.updateOne(e,{id:n,changes:{isEnabled:r}})},controlAdapterImageChanged:(e,t)=>{const{id:n,controlImage:r}=t.payload,i=li(e,n);i&&(an.updateOne(e,{id:n,changes:{controlImage:r,processedControlImage:null}}),r!==null&&hi(i)&&i.processorType!=="none"&&e.pendingControlImages.push(n))},controlAdapterProcessedImageChanged:(e,t)=>{const{id:n,processedControlImage:r}=t.payload,i=li(e,n);i&&hi(i)&&(an.updateOne(e,{id:n,changes:{processedControlImage:r}}),e.pendingControlImages=e.pendingControlImages.filter(o=>o!==n))},controlAdapterModelCleared:(e,t)=>{an.updateOne(e,{id:t.payload.id,changes:{model:null}})},controlAdapterModelChanged:(e,t)=>{const{id:n,model:r}=t.payload,i=li(e,n);if(!i)return;if(!hi(i)){an.updateOne(e,{id:n,changes:{model:r}});return}const o={id:n,changes:{model:r}};if(o.changes.processedControlImage=null,i.shouldAutoConfig){let s;for(const a in j0)if(r.model_name.includes(a)){s=j0[a];break}s?(o.changes.processorType=s,o.changes.processorNode=hc[s].default):(o.changes.processorType="none",o.changes.processorNode=hc.none.default)}an.updateOne(e,o)},controlAdapterWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload;an.updateOne(e,{id:n,changes:{weight:r}})},controlAdapterBeginStepPctChanged:(e,t)=>{const{id:n,beginStepPct:r}=t.payload;an.updateOne(e,{id:n,changes:{beginStepPct:r}})},controlAdapterEndStepPctChanged:(e,t)=>{const{id:n,endStepPct:r}=t.payload;an.updateOne(e,{id:n,changes:{endStepPct:r}})},controlAdapterControlModeChanged:(e,t)=>{const{id:n,controlMode:r}=t.payload,i=li(e,n);!i||!h_(i)||an.updateOne(e,{id:n,changes:{controlMode:r}})},controlAdapterResizeModeChanged:(e,t)=>{const{id:n,resizeMode:r}=t.payload,i=li(e,n);!i||!hi(i)||an.updateOne(e,{id:n,changes:{resizeMode:r}})},controlAdapterProcessorParamsChanged:(e,t)=>{const{id:n,params:r}=t.payload,i=li(e,n);if(!i||!hi(i)||!i.processorNode)return;const o=Id(Ge(i.processorNode),r);an.updateOne(e,{id:n,changes:{shouldAutoConfig:!1,processorNode:o}})},controlAdapterProcessortTypeChanged:(e,t)=>{const{id:n,processorType:r}=t.payload,i=li(e,n);if(!i||!hi(i))return;const o=Ge(hc[r].default);an.updateOne(e,{id:n,changes:{processorType:r,processedControlImage:null,processorNode:o,shouldAutoConfig:!1}})},controlAdapterAutoConfigToggled:(e,t)=>{var o;const{id:n}=t.payload,r=li(e,n);if(!r||!hi(r))return;const i={id:n,changes:{shouldAutoConfig:!r.shouldAutoConfig}};if(i.changes.shouldAutoConfig){let s;for(const a in j0)if((o=r.model)!=null&&o.model_name.includes(a)){s=j0[a];break}s?(i.changes.processorType=s,i.changes.processorNode=hc[s].default):(i.changes.processorType="none",i.changes.processorNode=hc.none.default)}an.updateOne(e,i)},controlAdaptersReset:()=>Ge(D5),pendingControlImagesCleared:e=>{e.pendingControlImages=[]}},extraReducers:e=>{e.addCase(q4,(t,n)=>{const r=li(t,n.payload.id);r&&r.controlImage!==null&&(t.pendingControlImages=Woe(t.pendingControlImages.concat(n.payload.id)))}),e.addCase(u_,t=>{t.pendingControlImages=[]})}}),{controlAdapterAdded:lae,controlAdapterRecalled:cae,controlAdapterDuplicated:Aze,controlAdapterAddedFromImage:uae,controlAdapterRemoved:kze,controlAdapterImageChanged:Nl,controlAdapterProcessedImageChanged:X4,controlAdapterIsEnabledChanged:Q4,controlAdapterModelChanged:tI,controlAdapterWeightChanged:Pze,controlAdapterBeginStepPctChanged:Ize,controlAdapterEndStepPctChanged:Mze,controlAdapterControlModeChanged:Rze,controlAdapterResizeModeChanged:Oze,controlAdapterProcessorParamsChanged:dae,controlAdapterProcessortTypeChanged:fae,controlAdaptersReset:hae,controlAdapterAutoConfigToggled:nI,pendingControlImagesCleared:pae,controlAdapterModelCleared:Wx}=ND.actions,gae=ND.reducer,mae=br(lae,uae,cae),$ze={any:"Any","sd-1":"Stable Diffusion 1.x","sd-2":"Stable Diffusion 2.x",sdxl:"Stable Diffusion XL","sdxl-refiner":"Stable Diffusion XL Refiner"},Nze={any:"Any","sd-1":"SD1","sd-2":"SD2",sdxl:"SDXL","sdxl-refiner":"SDXLR"},yae={any:{maxClip:0,markers:[]},"sd-1":{maxClip:12,markers:[0,1,2,3,4,8,12]},"sd-2":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},sdxl:{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},"sdxl-refiner":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]}},Fze={lycoris:"LyCORIS",diffusers:"Diffusers"},Dze={euler:"Euler",deis:"DEIS",ddim:"DDIM",ddpm:"DDPM",dpmpp_sde:"DPM++ SDE",dpmpp_2s:"DPM++ 2S",dpmpp_2m:"DPM++ 2M",dpmpp_2m_sde:"DPM++ 2M SDE",heun:"Heun",kdpm_2:"KDPM 2",lms:"LMS",pndm:"PNDM",unipc:"UniPC",euler_k:"Euler Karras",dpmpp_sde_k:"DPM++ SDE Karras",dpmpp_2s_k:"DPM++ 2S Karras",dpmpp_2m_k:"DPM++ 2M Karras",dpmpp_2m_sde_k:"DPM++ 2M SDE Karras",heun_k:"Heun Karras",lms_k:"LMS Karras",euler_a:"Euler Ancestral",kdpm_2_a:"KDPM 2 Ancestral",lcm:"LCM"},vae=0,mp=4294967295;var st;(function(e){e.assertEqual=i=>i;function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{const o={};for(const s of i)o[s]=s;return o},e.getValidEnumValues=i=>{const o=e.objectKeys(i).filter(a=>typeof i[i[a]]!="number"),s={};for(const a of o)s[a]=i[a];return e.objectValues(s)},e.objectValues=i=>e.objectKeys(i).map(function(o){return i[o]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const o=[];for(const s in i)Object.prototype.hasOwnProperty.call(i,s)&&o.push(s);return o},e.find=(i,o)=>{for(const s of i)if(o(s))return s},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&isFinite(i)&&Math.floor(i)===i;function r(i,o=" | "){return i.map(s=>typeof s=="string"?`'${s}'`:s).join(o)}e.joinValues=r,e.jsonStringifyReplacer=(i,o)=>typeof o=="bigint"?o.toString():o})(st||(st={}));var L5;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(L5||(L5={}));const de=st.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Wa=e=>{switch(typeof e){case"undefined":return de.undefined;case"string":return de.string;case"number":return isNaN(e)?de.nan:de.number;case"boolean":return de.boolean;case"function":return de.function;case"bigint":return de.bigint;case"symbol":return de.symbol;case"object":return Array.isArray(e)?de.array:e===null?de.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?de.promise:typeof Map<"u"&&e instanceof Map?de.map:typeof Set<"u"&&e instanceof Set?de.set:typeof Date<"u"&&e instanceof Date?de.date:de.object;default:return de.unknown}},re=st.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),bae=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class Io extends Error{constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}get errors(){return this.issues}format(t){const n=t||function(o){return o.message},r={_errors:[]},i=o=>{for(const s of o.issues)if(s.code==="invalid_union")s.unionErrors.map(i);else if(s.code==="invalid_return_type")i(s.returnTypeError);else if(s.code==="invalid_arguments")i(s.argumentsError);else if(s.path.length===0)r._errors.push(n(s));else{let a=r,l=0;for(;ln.message){const n={},r=[];for(const i of this.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}Io.create=e=>new Io(e);const sg=(e,t)=>{let n;switch(e.code){case re.invalid_type:e.received===de.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case re.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,st.jsonStringifyReplacer)}`;break;case re.unrecognized_keys:n=`Unrecognized key(s) in object: ${st.joinValues(e.keys,", ")}`;break;case re.invalid_union:n="Invalid input";break;case re.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${st.joinValues(e.options)}`;break;case re.invalid_enum_value:n=`Invalid enum value. Expected ${st.joinValues(e.options)}, received '${e.received}'`;break;case re.invalid_arguments:n="Invalid function arguments";break;case re.invalid_return_type:n="Invalid function return type";break;case re.invalid_date:n="Invalid date";break;case re.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:st.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case re.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case re.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case re.custom:n="Invalid input";break;case re.invalid_intersection_types:n="Intersection results could not be merged";break;case re.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case re.not_finite:n="Number must be finite";break;default:n=t.defaultError,st.assertNever(e)}return{message:n}};let FD=sg;function _ae(e){FD=e}function m1(){return FD}const y1=e=>{const{data:t,path:n,errorMaps:r,issueData:i}=e,o=[...n,...i.path||[]],s={...i,path:o};let a="";const l=r.filter(c=>!!c).slice().reverse();for(const c of l)a=c(s,{data:t,defaultError:a}).message;return{...i,path:o,message:i.message||a}},Sae=[];function ge(e,t){const n=y1({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,m1(),sg].filter(r=>!!r)});e.common.issues.push(n)}class Sr{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const i of n){if(i.status==="aborted")return Ne;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const i of n)r.push({key:await i.key,value:await i.value});return Sr.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const i of n){const{key:o,value:s}=i;if(o.status==="aborted"||s.status==="aborted")return Ne;o.status==="dirty"&&t.dirty(),s.status==="dirty"&&t.dirty(),o.value!=="__proto__"&&(typeof s.value<"u"||i.alwaysSet)&&(r[o.value]=s.value)}return{status:t.value,value:r}}}const Ne=Object.freeze({status:"aborted"}),DD=e=>({status:"dirty",value:e}),Dr=e=>({status:"valid",value:e}),B5=e=>e.status==="aborted",z5=e=>e.status==="dirty",ag=e=>e.status==="valid",v1=e=>typeof Promise<"u"&&e instanceof Promise;var ke;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(ke||(ke={}));class xs{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const rI=(e,t)=>{if(ag(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new Io(e.common.issues);return this._error=n,this._error}}};function Fe(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(s,a)=>s.code!=="invalid_type"?{message:a.defaultError}:typeof a.data>"u"?{message:r??a.defaultError}:{message:n??a.defaultError},description:i}}class De{constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(t){return Wa(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:Wa(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Sr,ctx:{common:t.parent.common,data:t.data,parsedType:Wa(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(v1(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){var r;const i={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wa(t)},o=this._parseSync({data:t,path:i.path,parent:i});return rI(i,o)}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wa(t)},i=this._parse({data:t,path:r.path,parent:r}),o=await(v1(i)?i:Promise.resolve(i));return rI(r,o)}refine(t,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,o)=>{const s=t(i),a=()=>o.addIssue({code:re.custom,...r(i)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(a(),!1)):s?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new Do({schema:this,typeName:Ie.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}optional(){return ea.create(this,this._def)}nullable(){return eu.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Mo.create(this,this._def)}promise(){return uf.create(this,this._def)}or(t){return dg.create([this,t],this._def)}and(t){return fg.create(this,t,this._def)}transform(t){return new Do({...Fe(this._def),schema:this,typeName:Ie.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new yg({...Fe(this._def),innerType:this,defaultValue:n,typeName:Ie.ZodDefault})}brand(){return new BD({typeName:Ie.ZodBranded,type:this,...Fe(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new x1({...Fe(this._def),innerType:this,catchValue:n,typeName:Ie.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return gm.create(this,t)}readonly(){return C1.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const xae=/^c[^\s-]{8,}$/i,wae=/^[a-z][a-z0-9]*$/,Cae=/^[0-9A-HJKMNP-TV-Z]{26}$/,Eae=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Tae=/^(?!\.)(?!.*\.\.)([A-Z0-9_+-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Aae="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let qx;const kae=/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,Pae=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,Iae=e=>e.precision?e.offset?new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`):new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}Z$`):e.precision===0?e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"):e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$");function Mae(e,t){return!!((t==="v4"||!t)&&kae.test(e)||(t==="v6"||!t)&&Pae.test(e))}class To extends De{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==de.string){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.string,received:o.parsedType}),Ne}const r=new Sr;let i;for(const o of this._def.checks)if(o.kind==="min")t.data.lengtho.value&&(i=this._getOrReturnCtx(t,i),ge(i,{code:re.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),r.dirty());else if(o.kind==="length"){const s=t.data.length>o.value,a=t.data.lengtht.test(i),{validation:n,code:re.invalid_string,...ke.errToObj(r)})}_addCheck(t){return new To({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...ke.errToObj(t)})}url(t){return this._addCheck({kind:"url",...ke.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...ke.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...ke.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...ke.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...ke.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...ke.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...ke.errToObj(t)})}datetime(t){var n;return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(n=t==null?void 0:t.offset)!==null&&n!==void 0?n:!1,...ke.errToObj(t==null?void 0:t.message)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...ke.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...ke.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...ke.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...ke.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...ke.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...ke.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...ke.errToObj(n)})}nonempty(t){return this.min(1,ke.errToObj(t))}trim(){return new To({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new To({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new To({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new To({checks:[],typeName:Ie.ZodString,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...Fe(e)})};function Rae(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,o=parseInt(e.toFixed(i).replace(".","")),s=parseInt(t.toFixed(i).replace(".",""));return o%s/Math.pow(10,i)}class Sl extends De{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==de.number){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.number,received:o.parsedType}),Ne}let r;const i=new Sr;for(const o of this._def.checks)o.kind==="int"?st.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),ge(r,{code:re.invalid_type,expected:"integer",received:"float",message:o.message}),i.dirty()):o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:!1,message:o.message}),i.dirty()):o.kind==="multipleOf"?Rae(t.data,o.value)!==0&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):o.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_finite,message:o.message}),i.dirty()):st.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ke.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ke.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ke.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ke.toString(n))}setLimit(t,n,r,i){return new Sl({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ke.toString(i)}]})}_addCheck(t){return new Sl({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:ke.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:ke.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:ke.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:ke.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:ke.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ke.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:ke.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:ke.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:ke.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&st.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.valuenew Sl({checks:[],typeName:Ie.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class xl extends De{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce&&(t.data=BigInt(t.data)),this._getType(t)!==de.bigint){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.bigint,received:o.parsedType}),Ne}let r;const i=new Sr;for(const o of this._def.checks)o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),i.dirty()):o.kind==="multipleOf"?t.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):st.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ke.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ke.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ke.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ke.toString(n))}setLimit(t,n,r,i){return new xl({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ke.toString(i)}]})}_addCheck(t){return new xl({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:ke.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:ke.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:ke.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:ke.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ke.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new xl({checks:[],typeName:Ie.ZodBigInt,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...Fe(e)})};class lg extends De{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==de.boolean){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.boolean,received:r.parsedType}),Ne}return Dr(t.data)}}lg.create=e=>new lg({typeName:Ie.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class Zc extends De{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==de.date){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.date,received:o.parsedType}),Ne}if(isNaN(t.data.getTime())){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_date}),Ne}const r=new Sr;let i;for(const o of this._def.checks)o.kind==="min"?t.data.getTime()o.value&&(i=this._getOrReturnCtx(t,i),ge(i,{code:re.too_big,message:o.message,inclusive:!0,exact:!1,maximum:o.value,type:"date"}),r.dirty()):st.assertNever(o);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new Zc({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:ke.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:ke.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Zc({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:Ie.ZodDate,...Fe(e)});class b1 extends De{_parse(t){if(this._getType(t)!==de.symbol){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.symbol,received:r.parsedType}),Ne}return Dr(t.data)}}b1.create=e=>new b1({typeName:Ie.ZodSymbol,...Fe(e)});class cg extends De{_parse(t){if(this._getType(t)!==de.undefined){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.undefined,received:r.parsedType}),Ne}return Dr(t.data)}}cg.create=e=>new cg({typeName:Ie.ZodUndefined,...Fe(e)});class ug extends De{_parse(t){if(this._getType(t)!==de.null){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.null,received:r.parsedType}),Ne}return Dr(t.data)}}ug.create=e=>new ug({typeName:Ie.ZodNull,...Fe(e)});class cf extends De{constructor(){super(...arguments),this._any=!0}_parse(t){return Dr(t.data)}}cf.create=e=>new cf({typeName:Ie.ZodAny,...Fe(e)});class Oc extends De{constructor(){super(...arguments),this._unknown=!0}_parse(t){return Dr(t.data)}}Oc.create=e=>new Oc({typeName:Ie.ZodUnknown,...Fe(e)});class ua extends De{_parse(t){const n=this._getOrReturnCtx(t);return ge(n,{code:re.invalid_type,expected:de.never,received:n.parsedType}),Ne}}ua.create=e=>new ua({typeName:Ie.ZodNever,...Fe(e)});class _1 extends De{_parse(t){if(this._getType(t)!==de.undefined){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.void,received:r.parsedType}),Ne}return Dr(t.data)}}_1.create=e=>new _1({typeName:Ie.ZodVoid,...Fe(e)});class Mo extends De{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==de.array)return ge(n,{code:re.invalid_type,expected:de.array,received:n.parsedType}),Ne;if(i.exactLength!==null){const s=n.data.length>i.exactLength.value,a=n.data.lengthi.maxLength.value&&(ge(n,{code:re.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((s,a)=>i.type._parseAsync(new xs(n,s,n.path,a)))).then(s=>Sr.mergeArray(r,s));const o=[...n.data].map((s,a)=>i.type._parseSync(new xs(n,s,n.path,a)));return Sr.mergeArray(r,o)}get element(){return this._def.type}min(t,n){return new Mo({...this._def,minLength:{value:t,message:ke.toString(n)}})}max(t,n){return new Mo({...this._def,maxLength:{value:t,message:ke.toString(n)}})}length(t,n){return new Mo({...this._def,exactLength:{value:t,message:ke.toString(n)}})}nonempty(t){return this.min(1,t)}}Mo.create=(e,t)=>new Mo({type:e,minLength:null,maxLength:null,exactLength:null,typeName:Ie.ZodArray,...Fe(t)});function Wu(e){if(e instanceof Gt){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=ea.create(Wu(r))}return new Gt({...e._def,shape:()=>t})}else return e instanceof Mo?new Mo({...e._def,type:Wu(e.element)}):e instanceof ea?ea.create(Wu(e.unwrap())):e instanceof eu?eu.create(Wu(e.unwrap())):e instanceof ws?ws.create(e.items.map(t=>Wu(t))):e}class Gt extends De{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=st.objectKeys(t);return this._cached={shape:t,keys:n}}_parse(t){if(this._getType(t)!==de.object){const c=this._getOrReturnCtx(t);return ge(c,{code:re.invalid_type,expected:de.object,received:c.parsedType}),Ne}const{status:r,ctx:i}=this._processInputParams(t),{shape:o,keys:s}=this._getCached(),a=[];if(!(this._def.catchall instanceof ua&&this._def.unknownKeys==="strip"))for(const c in i.data)s.includes(c)||a.push(c);const l=[];for(const c of s){const u=o[c],d=i.data[c];l.push({key:{status:"valid",value:c},value:u._parse(new xs(i,d,i.path,c)),alwaysSet:c in i.data})}if(this._def.catchall instanceof ua){const c=this._def.unknownKeys;if(c==="passthrough")for(const u of a)l.push({key:{status:"valid",value:u},value:{status:"valid",value:i.data[u]}});else if(c==="strict")a.length>0&&(ge(i,{code:re.unrecognized_keys,keys:a}),r.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const u of a){const d=i.data[u];l.push({key:{status:"valid",value:u},value:c._parse(new xs(i,d,i.path,u)),alwaysSet:u in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const c=[];for(const u of l){const d=await u.key;c.push({key:d,value:await u.value,alwaysSet:u.alwaysSet})}return c}).then(c=>Sr.mergeObjectSync(r,c)):Sr.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(t){return ke.errToObj,new Gt({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{var i,o,s,a;const l=(s=(o=(i=this._def).errorMap)===null||o===void 0?void 0:o.call(i,n,r).message)!==null&&s!==void 0?s:r.defaultError;return n.code==="unrecognized_keys"?{message:(a=ke.errToObj(t).message)!==null&&a!==void 0?a:l}:{message:l}}}:{}})}strip(){return new Gt({...this._def,unknownKeys:"strip"})}passthrough(){return new Gt({...this._def,unknownKeys:"passthrough"})}extend(t){return new Gt({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new Gt({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:Ie.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new Gt({...this._def,catchall:t})}pick(t){const n={};return st.objectKeys(t).forEach(r=>{t[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new Gt({...this._def,shape:()=>n})}omit(t){const n={};return st.objectKeys(this.shape).forEach(r=>{t[r]||(n[r]=this.shape[r])}),new Gt({...this._def,shape:()=>n})}deepPartial(){return Wu(this)}partial(t){const n={};return st.objectKeys(this.shape).forEach(r=>{const i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}),new Gt({...this._def,shape:()=>n})}required(t){const n={};return st.objectKeys(this.shape).forEach(r=>{if(t&&!t[r])n[r]=this.shape[r];else{let o=this.shape[r];for(;o instanceof ea;)o=o._def.innerType;n[r]=o}}),new Gt({...this._def,shape:()=>n})}keyof(){return LD(st.objectKeys(this.shape))}}Gt.create=(e,t)=>new Gt({shape:()=>e,unknownKeys:"strip",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});Gt.strictCreate=(e,t)=>new Gt({shape:()=>e,unknownKeys:"strict",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});Gt.lazycreate=(e,t)=>new Gt({shape:e,unknownKeys:"strip",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});class dg extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function i(o){for(const a of o)if(a.result.status==="valid")return a.result;for(const a of o)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;const s=o.map(a=>new Io(a.ctx.common.issues));return ge(n,{code:re.invalid_union,unionErrors:s}),Ne}if(n.common.async)return Promise.all(r.map(async o=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await o._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(i);{let o;const s=[];for(const l of r){const c={...n,common:{...n.common,issues:[]},parent:null},u=l._parseSync({data:n.data,path:n.path,parent:c});if(u.status==="valid")return u;u.status==="dirty"&&!o&&(o={result:u,ctx:c}),c.common.issues.length&&s.push(c.common.issues)}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;const a=s.map(l=>new Io(l));return ge(n,{code:re.invalid_union,unionErrors:a}),Ne}}get options(){return this._def.options}}dg.create=(e,t)=>new dg({options:e,typeName:Ie.ZodUnion,...Fe(t)});const Zy=e=>e instanceof pg?Zy(e.schema):e instanceof Do?Zy(e.innerType()):e instanceof gg?[e.value]:e instanceof wl?e.options:e instanceof mg?Object.keys(e.enum):e instanceof yg?Zy(e._def.innerType):e instanceof cg?[void 0]:e instanceof ug?[null]:null;class p_ extends De{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.object)return ge(n,{code:re.invalid_type,expected:de.object,received:n.parsedType}),Ne;const r=this.discriminator,i=n.data[r],o=this.optionsMap.get(i);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(ge(n,{code:re.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),Ne)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){const i=new Map;for(const o of n){const s=Zy(o.shape[t]);if(!s)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const a of s){if(i.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);i.set(a,o)}}return new p_({typeName:Ie.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Fe(r)})}}function j5(e,t){const n=Wa(e),r=Wa(t);if(e===t)return{valid:!0,data:e};if(n===de.object&&r===de.object){const i=st.objectKeys(t),o=st.objectKeys(e).filter(a=>i.indexOf(a)!==-1),s={...e,...t};for(const a of o){const l=j5(e[a],t[a]);if(!l.valid)return{valid:!1};s[a]=l.data}return{valid:!0,data:s}}else if(n===de.array&&r===de.array){if(e.length!==t.length)return{valid:!1};const i=[];for(let o=0;o{if(B5(o)||B5(s))return Ne;const a=j5(o.value,s.value);return a.valid?((z5(o)||z5(s))&&n.dirty(),{status:n.value,value:a.data}):(ge(r,{code:re.invalid_intersection_types}),Ne)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,s])=>i(o,s)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}fg.create=(e,t,n)=>new fg({left:e,right:t,typeName:Ie.ZodIntersection,...Fe(n)});class ws extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.array)return ge(r,{code:re.invalid_type,expected:de.array,received:r.parsedType}),Ne;if(r.data.lengththis._def.items.length&&(ge(r,{code:re.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const o=[...r.data].map((s,a)=>{const l=this._def.items[a]||this._def.rest;return l?l._parse(new xs(r,s,r.path,a)):null}).filter(s=>!!s);return r.common.async?Promise.all(o).then(s=>Sr.mergeArray(n,s)):Sr.mergeArray(n,o)}get items(){return this._def.items}rest(t){return new ws({...this._def,rest:t})}}ws.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ws({items:e,typeName:Ie.ZodTuple,rest:null,...Fe(t)})};class hg extends De{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.object)return ge(r,{code:re.invalid_type,expected:de.object,received:r.parsedType}),Ne;const i=[],o=this._def.keyType,s=this._def.valueType;for(const a in r.data)i.push({key:o._parse(new xs(r,a,r.path,a)),value:s._parse(new xs(r,r.data[a],r.path,a))});return r.common.async?Sr.mergeObjectAsync(n,i):Sr.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof De?new hg({keyType:t,valueType:n,typeName:Ie.ZodRecord,...Fe(r)}):new hg({keyType:To.create(),valueType:t,typeName:Ie.ZodRecord,...Fe(n)})}}class S1 extends De{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.map)return ge(r,{code:re.invalid_type,expected:de.map,received:r.parsedType}),Ne;const i=this._def.keyType,o=this._def.valueType,s=[...r.data.entries()].map(([a,l],c)=>({key:i._parse(new xs(r,a,r.path,[c,"key"])),value:o._parse(new xs(r,l,r.path,[c,"value"]))}));if(r.common.async){const a=new Map;return Promise.resolve().then(async()=>{for(const l of s){const c=await l.key,u=await l.value;if(c.status==="aborted"||u.status==="aborted")return Ne;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(c.value,u.value)}return{status:n.value,value:a}})}else{const a=new Map;for(const l of s){const c=l.key,u=l.value;if(c.status==="aborted"||u.status==="aborted")return Ne;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(c.value,u.value)}return{status:n.value,value:a}}}}S1.create=(e,t,n)=>new S1({valueType:t,keyType:e,typeName:Ie.ZodMap,...Fe(n)});class Jc extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.set)return ge(r,{code:re.invalid_type,expected:de.set,received:r.parsedType}),Ne;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(ge(r,{code:re.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const o=this._def.valueType;function s(l){const c=new Set;for(const u of l){if(u.status==="aborted")return Ne;u.status==="dirty"&&n.dirty(),c.add(u.value)}return{status:n.value,value:c}}const a=[...r.data.values()].map((l,c)=>o._parse(new xs(r,l,r.path,c)));return r.common.async?Promise.all(a).then(l=>s(l)):s(a)}min(t,n){return new Jc({...this._def,minSize:{value:t,message:ke.toString(n)}})}max(t,n){return new Jc({...this._def,maxSize:{value:t,message:ke.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}Jc.create=(e,t)=>new Jc({valueType:e,minSize:null,maxSize:null,typeName:Ie.ZodSet,...Fe(t)});class Rd extends De{constructor(){super(...arguments),this.validate=this.implement}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.function)return ge(n,{code:re.invalid_type,expected:de.function,received:n.parsedType}),Ne;function r(a,l){return y1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,m1(),sg].filter(c=>!!c),issueData:{code:re.invalid_arguments,argumentsError:l}})}function i(a,l){return y1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,m1(),sg].filter(c=>!!c),issueData:{code:re.invalid_return_type,returnTypeError:l}})}const o={errorMap:n.common.contextualErrorMap},s=n.data;if(this._def.returns instanceof uf){const a=this;return Dr(async function(...l){const c=new Io([]),u=await a._def.args.parseAsync(l,o).catch(h=>{throw c.addIssue(r(l,h)),c}),d=await Reflect.apply(s,this,u);return await a._def.returns._def.type.parseAsync(d,o).catch(h=>{throw c.addIssue(i(d,h)),c})})}else{const a=this;return Dr(function(...l){const c=a._def.args.safeParse(l,o);if(!c.success)throw new Io([r(l,c.error)]);const u=Reflect.apply(s,this,c.data),d=a._def.returns.safeParse(u,o);if(!d.success)throw new Io([i(u,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new Rd({...this._def,args:ws.create(t).rest(Oc.create())})}returns(t){return new Rd({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new Rd({args:t||ws.create([]).rest(Oc.create()),returns:n||Oc.create(),typeName:Ie.ZodFunction,...Fe(r)})}}class pg extends De{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}pg.create=(e,t)=>new pg({getter:e,typeName:Ie.ZodLazy,...Fe(t)});class gg extends De{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return ge(n,{received:n.data,code:re.invalid_literal,expected:this._def.value}),Ne}return{status:"valid",value:t.data}}get value(){return this._def.value}}gg.create=(e,t)=>new gg({value:e,typeName:Ie.ZodLiteral,...Fe(t)});function LD(e,t){return new wl({values:e,typeName:Ie.ZodEnum,...Fe(t)})}class wl extends De{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return ge(n,{expected:st.joinValues(r),received:n.parsedType,code:re.invalid_type}),Ne}if(this._def.values.indexOf(t.data)===-1){const n=this._getOrReturnCtx(t),r=this._def.values;return ge(n,{received:n.data,code:re.invalid_enum_value,options:r}),Ne}return Dr(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t){return wl.create(t)}exclude(t){return wl.create(this.options.filter(n=>!t.includes(n)))}}wl.create=LD;class mg extends De{_parse(t){const n=st.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==de.string&&r.parsedType!==de.number){const i=st.objectValues(n);return ge(r,{expected:st.joinValues(i),received:r.parsedType,code:re.invalid_type}),Ne}if(n.indexOf(t.data)===-1){const i=st.objectValues(n);return ge(r,{received:r.data,code:re.invalid_enum_value,options:i}),Ne}return Dr(t.data)}get enum(){return this._def.values}}mg.create=(e,t)=>new mg({values:e,typeName:Ie.ZodNativeEnum,...Fe(t)});class uf extends De{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.promise&&n.common.async===!1)return ge(n,{code:re.invalid_type,expected:de.promise,received:n.parsedType}),Ne;const r=n.parsedType===de.promise?n.data:Promise.resolve(n.data);return Dr(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}uf.create=(e,t)=>new uf({type:e,typeName:Ie.ZodPromise,...Fe(t)});class Do extends De{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Ie.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null,o={addIssue:s=>{ge(r,s),s.fatal?n.abort():n.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),i.type==="preprocess"){const s=i.transform(r.data,o);return r.common.issues.length?{status:"dirty",value:r.data}:r.common.async?Promise.resolve(s).then(a=>this._def.schema._parseAsync({data:a,path:r.path,parent:r})):this._def.schema._parseSync({data:s,path:r.path,parent:r})}if(i.type==="refinement"){const s=a=>{const l=i.refinement(a,o);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?Ne:(a.status==="dirty"&&n.dirty(),s(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?Ne:(a.status==="dirty"&&n.dirty(),s(a.value).then(()=>({status:n.value,value:a.value}))))}if(i.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!ag(s))return s;const a=i.transform(s.value,o);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>ag(s)?Promise.resolve(i.transform(s.value,o)).then(a=>({status:n.value,value:a})):s);st.assertNever(i)}}Do.create=(e,t,n)=>new Do({schema:e,typeName:Ie.ZodEffects,effect:t,...Fe(n)});Do.createWithPreprocess=(e,t,n)=>new Do({schema:t,effect:{type:"preprocess",transform:e},typeName:Ie.ZodEffects,...Fe(n)});class ea extends De{_parse(t){return this._getType(t)===de.undefined?Dr(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}ea.create=(e,t)=>new ea({innerType:e,typeName:Ie.ZodOptional,...Fe(t)});class eu extends De{_parse(t){return this._getType(t)===de.null?Dr(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}eu.create=(e,t)=>new eu({innerType:e,typeName:Ie.ZodNullable,...Fe(t)});class yg extends De{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===de.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}yg.create=(e,t)=>new yg({innerType:e,typeName:Ie.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...Fe(t)});class x1 extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return v1(i)?i.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new Io(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Io(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}x1.create=(e,t)=>new x1({innerType:e,typeName:Ie.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...Fe(t)});class w1 extends De{_parse(t){if(this._getType(t)!==de.nan){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.nan,received:r.parsedType}),Ne}return{status:"valid",value:t.data}}}w1.create=e=>new w1({typeName:Ie.ZodNaN,...Fe(e)});const Oae=Symbol("zod_brand");class BD extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class gm extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?Ne:o.status==="dirty"?(n.dirty(),DD(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?Ne:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new gm({in:t,out:n,typeName:Ie.ZodPipeline})}}class C1 extends De{_parse(t){const n=this._def.innerType._parse(t);return ag(n)&&(n.value=Object.freeze(n.value)),n}}C1.create=(e,t)=>new C1({innerType:e,typeName:Ie.ZodReadonly,...Fe(t)});const zD=(e,t={},n)=>e?cf.create().superRefine((r,i)=>{var o,s;if(!e(r)){const a=typeof t=="function"?t(r):typeof t=="string"?{message:t}:t,l=(s=(o=a.fatal)!==null&&o!==void 0?o:n)!==null&&s!==void 0?s:!0,c=typeof a=="string"?{message:a}:a;i.addIssue({code:"custom",...c,fatal:l})}}):cf.create(),$ae={object:Gt.lazycreate};var Ie;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(Ie||(Ie={}));const Nae=(e,t={message:`Input not instance of ${e.name}`})=>zD(n=>n instanceof e,t),jD=To.create,VD=Sl.create,Fae=w1.create,Dae=xl.create,UD=lg.create,Lae=Zc.create,Bae=b1.create,zae=cg.create,jae=ug.create,Vae=cf.create,Uae=Oc.create,Gae=ua.create,Hae=_1.create,Wae=Mo.create,qae=Gt.create,Kae=Gt.strictCreate,Xae=dg.create,Qae=p_.create,Yae=fg.create,Zae=ws.create,Jae=hg.create,ele=S1.create,tle=Jc.create,nle=Rd.create,rle=pg.create,ile=gg.create,ole=wl.create,sle=mg.create,ale=uf.create,iI=Do.create,lle=ea.create,cle=eu.create,ule=Do.createWithPreprocess,dle=gm.create,fle=()=>jD().optional(),hle=()=>VD().optional(),ple=()=>UD().optional(),gle={string:e=>To.create({...e,coerce:!0}),number:e=>Sl.create({...e,coerce:!0}),boolean:e=>lg.create({...e,coerce:!0}),bigint:e=>xl.create({...e,coerce:!0}),date:e=>Zc.create({...e,coerce:!0})},mle=Ne;var T=Object.freeze({__proto__:null,defaultErrorMap:sg,setErrorMap:_ae,getErrorMap:m1,makeIssue:y1,EMPTY_PATH:Sae,addIssueToContext:ge,ParseStatus:Sr,INVALID:Ne,DIRTY:DD,OK:Dr,isAborted:B5,isDirty:z5,isValid:ag,isAsync:v1,get util(){return st},get objectUtil(){return L5},ZodParsedType:de,getParsedType:Wa,ZodType:De,ZodString:To,ZodNumber:Sl,ZodBigInt:xl,ZodBoolean:lg,ZodDate:Zc,ZodSymbol:b1,ZodUndefined:cg,ZodNull:ug,ZodAny:cf,ZodUnknown:Oc,ZodNever:ua,ZodVoid:_1,ZodArray:Mo,ZodObject:Gt,ZodUnion:dg,ZodDiscriminatedUnion:p_,ZodIntersection:fg,ZodTuple:ws,ZodRecord:hg,ZodMap:S1,ZodSet:Jc,ZodFunction:Rd,ZodLazy:pg,ZodLiteral:gg,ZodEnum:wl,ZodNativeEnum:mg,ZodPromise:uf,ZodEffects:Do,ZodTransformer:Do,ZodOptional:ea,ZodNullable:eu,ZodDefault:yg,ZodCatch:x1,ZodNaN:w1,BRAND:Oae,ZodBranded:BD,ZodPipeline:gm,ZodReadonly:C1,custom:zD,Schema:De,ZodSchema:De,late:$ae,get ZodFirstPartyTypeKind(){return Ie},coerce:gle,any:Vae,array:Wae,bigint:Dae,boolean:UD,date:Lae,discriminatedUnion:Qae,effect:iI,enum:ole,function:nle,instanceof:Nae,intersection:Yae,lazy:rle,literal:ile,map:ele,nan:Fae,nativeEnum:sle,never:Gae,null:jae,nullable:cle,number:VD,object:qae,oboolean:ple,onumber:hle,optional:lle,ostring:fle,pipeline:dle,preprocess:ule,promise:ale,record:Jae,set:tle,strictObject:Kae,string:jD,symbol:Bae,transformer:iI,tuple:Zae,undefined:zae,union:Xae,unknown:Uae,void:Hae,NEVER:mle,ZodIssueCode:re,quotelessJson:bae,ZodError:Io});const mm=T.object({image_name:T.string().trim().min(1)}),yle=T.object({board_id:T.string().trim().min(1)}),vle=T.object({r:T.number().int().min(0).max(255),g:T.number().int().min(0).max(255),b:T.number().int().min(0).max(255),a:T.number().int().min(0).max(255)}),ble=T.enum(["stable","beta","prototype"]),GD=T.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a","lcm"]),Y4=T.enum(["any","sd-1","sd-2","sdxl","sdxl-refiner"]),_le=T.enum(["onnx","main","vae","lora","controlnet","embedding"]),Z4=T.string().trim().min(1),Nf=T.object({model_name:Z4,base_model:Y4}),HD=T.object({model_name:Z4,base_model:Y4,model_type:T.literal("main")}),WD=T.object({model_name:Z4,base_model:Y4,model_type:T.literal("onnx")}),qD=T.union([HD,WD]),KD=T.object({model_name:T.string().min(1),base_model:T.literal("sdxl-refiner"),model_type:T.literal("main")}),Sle=T.enum(["unet","text_encoder","text_encoder_2","tokenizer","tokenizer_2","vae","vae_decoder","vae_encoder","scheduler","safety_checker"]),J4=Nf,df=Nf.extend({model_type:_le,submodel:Sle.optional()}),eT=Nf,tT=Nf,nT=Nf,rT=Nf,XD=df.extend({weight:T.number().optional()});T.object({unet:df,scheduler:df,loras:T.array(XD)});T.object({tokenizer:df,text_encoder:df,skipped_layers:T.number(),loras:T.array(XD)});T.object({vae:df});const xle=T.object({image:mm,control_model:tT,control_weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),control_mode:T.enum(["balanced","more_prompt","more_control","unbalanced"]).optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),wle=T.object({image:mm,ip_adapter_model:nT,weight:T.number(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional()}),Cle=T.object({image:mm,t2i_adapter_model:rT,weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),Ele=T.object({dataURL:T.string(),width:T.number().int(),height:T.number().int()}),Tle=T.object({image:mm,width:T.number().int().gt(0),height:T.number().int().gt(0),type:T.literal("image_output")}),QD=e=>Tle.safeParse(e).success,Ale=T.string(),Lze=e=>Ale.safeParse(e).success,kle=T.string(),Bze=e=>kle.safeParse(e).success,Ple=T.string(),zze=e=>Ple.safeParse(e).success,Ile=T.string(),jze=e=>Ile.safeParse(e).success,Mle=T.number().int().min(1),Vze=e=>Mle.safeParse(e).success,Rle=T.number().min(1),Uze=e=>Rle.safeParse(e).success,Ole=T.number().gte(0).lt(1),Gze=e=>Ole.safeParse(e).success,$le=GD,Hze=e=>$le.safeParse(e).success,Nle=T.number().int().min(0).max(mp),Wze=e=>Nle.safeParse(e).success,YD=T.number().multipleOf(8).min(64),qze=e=>YD.safeParse(e).success,Fle=YD,Kze=e=>Fle.safeParse(e).success,g_=qD,Xze=e=>g_.safeParse(e).success,ZD=KD,Qze=e=>ZD.safeParse(e).success,JD=J4,Yze=e=>JD.safeParse(e).success,Dle=eT,Zze=e=>Dle.safeParse(e).success,Lle=tT,Jze=e=>Lle.safeParse(e).success,Ble=nT,eje=e=>Ble.safeParse(e).success,zle=rT,tje=e=>zle.safeParse(e).success,jle=T.number().min(0).max(1),nje=e=>jle.safeParse(e).success;T.enum(["fp16","fp32"]);const Vle=T.enum(["ESRGAN","bilinear"]),rje=e=>Vle.safeParse(e).success,Ule=T.boolean(),ije=e=>Ule.safeParse(e).success&&e!==null&&e!==void 0,eL=T.number().min(1).max(10),oje=e=>eL.safeParse(e).success,Gle=eL,sje=e=>Gle.safeParse(e).success,Hle=T.number().min(0).max(1),aje=e=>Hle.safeParse(e).success;T.enum(["box","gaussian"]);T.enum(["unmasked","mask","edge"]);const iT={hrfStrength:.45,hrfEnabled:!1,hrfMethod:"ESRGAN",cfgScale:7.5,cfgRescaleMultiplier:0,height:512,img2imgStrength:.75,infillMethod:"patchmatch",iterations:1,perlin:0,positivePrompt:"",negativePrompt:"",scheduler:"euler",maskBlur:16,maskBlurMethod:"box",canvasCoherenceMode:"unmasked",canvasCoherenceSteps:20,canvasCoherenceStrength:.3,seed:0,seedWeights:"",shouldFitToWidthHeight:!0,shouldGenerateVariations:!1,shouldRandomizeSeed:!0,steps:50,threshold:0,infillTileSize:32,infillPatchmatchDownscaleSize:1,variationAmount:.1,width:512,shouldUseSymmetry:!1,horizontalSymmetrySteps:0,verticalSymmetrySteps:0,model:null,vae:null,vaePrecision:"fp32",seamlessXAxis:!1,seamlessYAxis:!1,clipSkip:0,shouldUseCpuNoise:!0,shouldShowAdvancedOptions:!1,aspectRatio:null,shouldLockAspectRatio:!1},Wle=iT,tL=jt({name:"generation",initialState:Wle,reducers:{setPositivePrompt:(e,t)=>{e.positivePrompt=t.payload},setNegativePrompt:(e,t)=>{e.negativePrompt=t.payload},setIterations:(e,t)=>{e.iterations=t.payload},setSteps:(e,t)=>{e.steps=t.payload},clampSymmetrySteps:e=>{e.horizontalSymmetrySteps=el(e.horizontalSymmetrySteps,0,e.steps),e.verticalSymmetrySteps=el(e.verticalSymmetrySteps,0,e.steps)},setCfgScale:(e,t)=>{e.cfgScale=t.payload},setCfgRescaleMultiplier:(e,t)=>{e.cfgRescaleMultiplier=t.payload},setThreshold:(e,t)=>{e.threshold=t.payload},setPerlin:(e,t)=>{e.perlin=t.payload},setHeight:(e,t)=>{e.height=t.payload},setWidth:(e,t)=>{e.width=t.payload},toggleSize:e=>{const[t,n]=[e.width,e.height];e.width=n,e.height=t},setScheduler:(e,t)=>{e.scheduler=t.payload},setSeed:(e,t)=>{e.seed=t.payload,e.shouldRandomizeSeed=!1},setImg2imgStrength:(e,t)=>{e.img2imgStrength=t.payload},setSeamlessXAxis:(e,t)=>{e.seamlessXAxis=t.payload},setSeamlessYAxis:(e,t)=>{e.seamlessYAxis=t.payload},setShouldFitToWidthHeight:(e,t)=>{e.shouldFitToWidthHeight=t.payload},resetSeed:e=>{e.seed=-1},setShouldGenerateVariations:(e,t)=>{e.shouldGenerateVariations=t.payload},setVariationAmount:(e,t)=>{e.variationAmount=t.payload},setSeedWeights:(e,t)=>{e.seedWeights=t.payload,e.shouldGenerateVariations=!0,e.variationAmount=0},resetParametersState:e=>({...e,...iT}),setShouldRandomizeSeed:(e,t)=>{e.shouldRandomizeSeed=t.payload},clearInitialImage:e=>{e.initialImage=void 0},setMaskBlur:(e,t)=>{e.maskBlur=t.payload},setMaskBlurMethod:(e,t)=>{e.maskBlurMethod=t.payload},setCanvasCoherenceMode:(e,t)=>{e.canvasCoherenceMode=t.payload},setCanvasCoherenceSteps:(e,t)=>{e.canvasCoherenceSteps=t.payload},setCanvasCoherenceStrength:(e,t)=>{e.canvasCoherenceStrength=t.payload},setInfillMethod:(e,t)=>{e.infillMethod=t.payload},setInfillTileSize:(e,t)=>{e.infillTileSize=t.payload},setInfillPatchmatchDownscaleSize:(e,t)=>{e.infillPatchmatchDownscaleSize=t.payload},setShouldUseSymmetry:(e,t)=>{e.shouldUseSymmetry=t.payload},setHorizontalSymmetrySteps:(e,t)=>{e.horizontalSymmetrySteps=t.payload},setVerticalSymmetrySteps:(e,t)=>{e.verticalSymmetrySteps=t.payload},initialImageChanged:(e,t)=>{const{image_name:n,width:r,height:i}=t.payload;e.initialImage={imageName:n,width:r,height:i}},modelChanged:(e,t)=>{if(e.model=t.payload,e.model===null)return;const{maxClip:n}=yae[e.model.base_model];e.clipSkip=el(e.clipSkip,0,n)},vaeSelected:(e,t)=>{e.vae=t.payload},vaePrecisionChanged:(e,t)=>{e.vaePrecision=t.payload},setClipSkip:(e,t)=>{e.clipSkip=t.payload},setHrfStrength:(e,t)=>{e.hrfStrength=t.payload},setHrfEnabled:(e,t)=>{e.hrfEnabled=t.payload},setHrfMethod:(e,t)=>{e.hrfMethod=t.payload},shouldUseCpuNoiseChanged:(e,t)=>{e.shouldUseCpuNoise=t.payload},setAspectRatio:(e,t)=>{const n=t.payload;e.aspectRatio=n,n&&(e.height=Or(e.width/n,8))},setShouldLockAspectRatio:(e,t)=>{e.shouldLockAspectRatio=t.payload}},extraReducers:e=>{e.addCase(qse,(t,n)=>{var i;const r=(i=n.payload.sd)==null?void 0:i.defaultModel;if(r&&!t.model){const[o,s,a]=r.split("/"),l=g_.safeParse({model_name:a,base_model:o,model_type:s});l.success&&(t.model=l.data)}}),e.addMatcher(mae,(t,n)=>{n.payload.type==="t2i_adapter"&&(t.width=Or(t.width,64),t.height=Or(t.height,64))})}}),{clampSymmetrySteps:lje,clearInitialImage:oT,resetParametersState:cje,resetSeed:uje,setCfgScale:dje,setCfgRescaleMultiplier:fje,setWidth:oI,setHeight:sI,toggleSize:hje,setImg2imgStrength:pje,setInfillMethod:qle,setIterations:gje,setPerlin:mje,setPositivePrompt:Kle,setNegativePrompt:yje,setScheduler:vje,setMaskBlur:bje,setMaskBlurMethod:_je,setCanvasCoherenceMode:Sje,setCanvasCoherenceSteps:xje,setCanvasCoherenceStrength:wje,setSeed:Cje,setSeedWeights:Eje,setShouldFitToWidthHeight:Tje,setShouldGenerateVariations:Aje,setShouldRandomizeSeed:kje,setSteps:Pje,setThreshold:Ije,setInfillTileSize:Mje,setInfillPatchmatchDownscaleSize:Rje,setVariationAmount:Oje,setShouldUseSymmetry:$je,setHorizontalSymmetrySteps:Nje,setVerticalSymmetrySteps:Fje,initialImageChanged:m_,modelChanged:tl,vaeSelected:nL,setSeamlessXAxis:Dje,setSeamlessYAxis:Lje,setClipSkip:Bje,setHrfEnabled:zje,setHrfStrength:jje,setHrfMethod:Vje,shouldUseCpuNoiseChanged:Uje,setAspectRatio:Xle,setShouldLockAspectRatio:Gje,vaePrecisionChanged:Hje}=tL.actions,Qle=tL.reducer,V0=(e,t,n,r,i,o,s)=>{const a=Math.floor(e/2-(n+i/2)*s),l=Math.floor(t/2-(r+o/2)*s);return{x:a,y:l}},U0=(e,t,n,r,i=.95)=>{const o=e*i/n,s=t*i/r,a=Math.min(1,Math.min(o,s));return a||1},Wje=.999,qje=.1,Kje=20,G0=.95,Xje=30,Qje=10,Yle=e=>({x:Math.floor(e.x),y:Math.floor(e.y)}),Iu=e=>{const{width:t,height:n}=e,r={width:t,height:n},i=512*512,o=t/n;let s=t*n,a=448;for(;s1?(r.width=a,r.height=Or(a/o,64)):o<1&&(r.height=a,r.width=Or(a*o,64)),s=r.width*r.height;return r},Zle=e=>({width:Or(e.width,64),height:Or(e.height,64)}),Yje=[{label:"Base",value:"base"},{label:"Mask",value:"mask"}],Zje=[{label:"None",value:"none"},{label:"Auto",value:"auto"},{label:"Manual",value:"manual"}],rL=e=>e.kind==="line"&&e.layer==="mask",Jje=e=>e.kind==="line"&&e.layer==="base",Jle=e=>e.kind==="image"&&e.layer==="base",eVe=e=>e.kind==="fillRect"&&e.layer==="base",tVe=e=>e.kind==="eraseRect"&&e.layer==="base",ece=e=>e.kind==="line",tce={listCursor:void 0,listPriority:void 0,selectedQueueItem:void 0,resumeProcessorOnEnqueue:!0},nce=tce,iL=jt({name:"queue",initialState:nce,reducers:{listCursorChanged:(e,t)=>{e.listCursor=t.payload},listPriorityChanged:(e,t)=>{e.listPriority=t.payload},listParamsReset:e=>{e.listCursor=void 0,e.listPriority=void 0},queueItemSelectionToggled:(e,t)=>{e.selectedQueueItem===t.payload?e.selectedQueueItem=void 0:e.selectedQueueItem=t.payload},resumeProcessorOnEnqueueChanged:(e,t)=>{e.resumeProcessorOnEnqueue=t.payload}}}),{listCursorChanged:nVe,listPriorityChanged:rVe,listParamsReset:rce,queueItemSelectionToggled:iVe,resumeProcessorOnEnqueueChanged:oVe}=iL.actions,ice=iL.reducer,oL="%[a-f0-9]{2}",aI=new RegExp("("+oL+")|([^%]+?)","gi"),lI=new RegExp("("+oL+")+","gi");function V5(e,t){try{return[decodeURIComponent(e.join(""))]}catch{}if(e.length===1)return e;t=t||1;const n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],V5(n),V5(r))}function oce(e){try{return decodeURIComponent(e)}catch{let t=e.match(aI)||[];for(let n=1;ne==null,uce=e=>encodeURIComponent(e).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),U5=Symbol("encodeFragmentIdentifier");function dce(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const i=n.length;return r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),"[",i,"]"].join("")]:[...n,[pn(t,e),"[",pn(i,e),"]=",pn(r,e)].join("")]};case"bracket":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),"[]"].join("")]:[...n,[pn(t,e),"[]=",pn(r,e)].join("")];case"colon-list-separator":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),":list="].join("")]:[...n,[pn(t,e),":list=",pn(r,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t=e.arrayFormat==="bracket-separator"?"[]=":"=";return n=>(r,i)=>i===void 0||e.skipNull&&i===null||e.skipEmptyString&&i===""?r:(i=i===null?"":i,r.length===0?[[pn(n,e),t,pn(i,e)].join("")]:[[r,pn(i,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,pn(t,e)]:[...n,[pn(t,e),"=",pn(r,e)].join("")]}}function fce(e){let t;switch(e.arrayFormat){case"index":return(n,r,i)=>{if(t=/\[(\d*)]$/.exec(n),n=n.replace(/\[\d*]$/,""),!t){i[n]=r;return}i[n]===void 0&&(i[n]={}),i[n][t[1]]=r};case"bracket":return(n,r,i)=>{if(t=/(\[])$/.exec(n),n=n.replace(/\[]$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"colon-list-separator":return(n,r,i)=>{if(t=/(:list)$/.exec(n),n=n.replace(/:list$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"comma":case"separator":return(n,r,i)=>{const o=typeof r=="string"&&r.includes(e.arrayFormatSeparator),s=typeof r=="string"&&!o&&zs(r,e).includes(e.arrayFormatSeparator);r=s?zs(r,e):r;const a=o||s?r.split(e.arrayFormatSeparator).map(l=>zs(l,e)):r===null?r:zs(r,e);i[n]=a};case"bracket-separator":return(n,r,i)=>{const o=/(\[])$/.test(n);if(n=n.replace(/\[]$/,""),!o){i[n]=r&&zs(r,e);return}const s=r===null?[]:r.split(e.arrayFormatSeparator).map(a=>zs(a,e));if(i[n]===void 0){i[n]=s;return}i[n]=[...i[n],...s]};default:return(n,r,i)=>{if(i[n]===void 0){i[n]=r;return}i[n]=[...[i[n]].flat(),r]}}}function aL(e){if(typeof e!="string"||e.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function pn(e,t){return t.encode?t.strict?uce(e):encodeURIComponent(e):e}function zs(e,t){return t.decode?ace(e):e}function lL(e){return Array.isArray(e)?e.sort():typeof e=="object"?lL(Object.keys(e)).sort((t,n)=>Number(t)-Number(n)).map(t=>e[t]):e}function cL(e){const t=e.indexOf("#");return t!==-1&&(e=e.slice(0,t)),e}function hce(e){let t="";const n=e.indexOf("#");return n!==-1&&(t=e.slice(n)),t}function cI(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?e=Number(e):t.parseBooleans&&e!==null&&(e.toLowerCase()==="true"||e.toLowerCase()==="false")&&(e=e.toLowerCase()==="true"),e}function sT(e){e=cL(e);const t=e.indexOf("?");return t===-1?"":e.slice(t+1)}function aT(e,t){t={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,...t},aL(t.arrayFormatSeparator);const n=fce(t),r=Object.create(null);if(typeof e!="string"||(e=e.trim().replace(/^[?#&]/,""),!e))return r;for(const i of e.split("&")){if(i==="")continue;const o=t.decode?i.replace(/\+/g," "):i;let[s,a]=sL(o,"=");s===void 0&&(s=o),a=a===void 0?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?a:zs(a,t),n(zs(s,t),a,r)}for(const[i,o]of Object.entries(r))if(typeof o=="object"&&o!==null)for(const[s,a]of Object.entries(o))o[s]=cI(a,t);else r[i]=cI(o,t);return t.sort===!1?r:(t.sort===!0?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((i,o)=>{const s=r[o];return s&&typeof s=="object"&&!Array.isArray(s)?i[o]=lL(s):i[o]=s,i},Object.create(null))}function uL(e,t){if(!e)return"";t={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...t},aL(t.arrayFormatSeparator);const n=s=>t.skipNull&&cce(e[s])||t.skipEmptyString&&e[s]==="",r=dce(t),i={};for(const[s,a]of Object.entries(e))n(s)||(i[s]=a);const o=Object.keys(i);return t.sort!==!1&&o.sort(t.sort),o.map(s=>{const a=e[s];return a===void 0?"":a===null?pn(s,t):Array.isArray(a)?a.length===0&&t.arrayFormat==="bracket-separator"?pn(s,t)+"[]":a.reduce(r(s),[]).join("&"):pn(s,t)+"="+pn(a,t)}).filter(s=>s.length>0).join("&")}function dL(e,t){var i;t={decode:!0,...t};let[n,r]=sL(e,"#");return n===void 0&&(n=e),{url:((i=n==null?void 0:n.split("?"))==null?void 0:i[0])??"",query:aT(sT(e),t),...t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:zs(r,t)}:{}}}function fL(e,t){t={encode:!0,strict:!0,[U5]:!0,...t};const n=cL(e.url).split("?")[0]||"",r=sT(e.url),i={...aT(r,{sort:!1}),...e.query};let o=uL(i,t);o&&(o=`?${o}`);let s=hce(e.url);if(e.fragmentIdentifier){const a=new URL(n);a.hash=e.fragmentIdentifier,s=t[U5]?a.hash:`#${e.fragmentIdentifier}`}return`${n}${o}${s}`}function hL(e,t,n){n={parseFragmentIdentifier:!0,[U5]:!1,...n};const{url:r,query:i,fragmentIdentifier:o}=dL(e,n);return fL({url:r,query:lce(i,t),fragmentIdentifier:o},n)}function pce(e,t,n){const r=Array.isArray(t)?i=>!t.includes(i):(i,o)=>!t(i,o);return hL(e,r,n)}const yp=Object.freeze(Object.defineProperty({__proto__:null,exclude:pce,extract:sT,parse:aT,parseUrl:dL,pick:hL,stringify:uL,stringifyUrl:fL},Symbol.toStringTag,{value:"Module"}));var pL=(e=>(e.uninitialized="uninitialized",e.pending="pending",e.fulfilled="fulfilled",e.rejected="rejected",e))(pL||{});function gce(e){return{status:e,isUninitialized:e==="uninitialized",isLoading:e==="pending",isSuccess:e==="fulfilled",isError:e==="rejected"}}function mce(e){return new RegExp("(^|:)//").test(e)}var yce=e=>e.replace(/\/$/,""),vce=e=>e.replace(/^\//,"");function bce(e,t){if(!e)return t;if(!t)return e;if(mce(t))return t;const n=e.endsWith("/")||!t.startsWith("?")?"/":"";return e=yce(e),t=vce(t),`${e}${n}${t}`}var uI=e=>[].concat(...e);function _ce(){return typeof navigator>"u"||navigator.onLine===void 0?!0:navigator.onLine}function Sce(){return typeof document>"u"?!0:document.visibilityState!=="hidden"}var dI=_s;function gL(e,t){if(e===t||!(dI(e)&&dI(t)||Array.isArray(e)&&Array.isArray(t)))return t;const n=Object.keys(t),r=Object.keys(e);let i=n.length===r.length;const o=Array.isArray(t)?[]:{};for(const s of n)o[s]=gL(e[s],t[s]),i&&(i=e[s]===o[s]);return i?e:o}var fI=(...e)=>fetch(...e),xce=e=>e.status>=200&&e.status<=299,wce=e=>/ion\/(vnd\.api\+)?json/.test(e.get("content-type")||"");function hI(e){if(!_s(e))return e;const t={...e};for(const[n,r]of Object.entries(t))r===void 0&&delete t[n];return t}function Cce({baseUrl:e,prepareHeaders:t=d=>d,fetchFn:n=fI,paramsSerializer:r,isJsonContentType:i=wce,jsonContentType:o="application/json",jsonReplacer:s,timeout:a,responseHandler:l,validateStatus:c,...u}={}){return typeof fetch>"u"&&n===fI&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),async(f,h)=>{const{signal:p,getState:m,extra:_,endpoint:v,forced:y,type:g}=h;let b,{url:S,headers:w=new Headers(u.headers),params:C=void 0,responseHandler:x=l??"json",validateStatus:k=c??xce,timeout:A=a,...R}=typeof f=="string"?{url:f}:f,L={...u,signal:p,...R};w=new Headers(hI(w)),L.headers=await t(w,{getState:m,extra:_,endpoint:v,forced:y,type:g})||w;const M=V=>typeof V=="object"&&(_s(V)||Array.isArray(V)||typeof V.toJSON=="function");if(!L.headers.has("content-type")&&M(L.body)&&L.headers.set("content-type",o),M(L.body)&&i(L.headers)&&(L.body=JSON.stringify(L.body,s)),C){const V=~S.indexOf("?")?"&":"?",H=r?r(C):new URLSearchParams(hI(C));S+=V+H}S=bce(e,S);const E=new Request(S,L);b={request:new Request(S,L)};let O,F=!1,$=A&&setTimeout(()=>{F=!0,h.abort()},A);try{O=await n(E)}catch(V){return{error:{status:F?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(V)},meta:b}}finally{$&&clearTimeout($)}const D=O.clone();b.response=D;let N,z="";try{let V;if(await Promise.all([d(O,x).then(H=>N=H,H=>V=H),D.text().then(H=>z=H,()=>{})]),V)throw V}catch(V){return{error:{status:"PARSING_ERROR",originalStatus:O.status,data:z,error:String(V)},meta:b}}return k(O,N)?{data:N,meta:b}:{error:{status:O.status,data:N},meta:b}};async function d(f,h){if(typeof h=="function")return h(f);if(h==="content-type"&&(h=i(f.headers)?"json":"text"),h==="json"){const p=await f.text();return p.length?JSON.parse(p):null}return f.text()}}var pI=class{constructor(e,t=void 0){this.value=e,this.meta=t}},lT=he("__rtkq/focused"),mL=he("__rtkq/unfocused"),cT=he("__rtkq/online"),yL=he("__rtkq/offline");function vL(e){return e.type==="query"}function Ece(e){return e.type==="mutation"}function uT(e,t,n,r,i,o){return Tce(e)?e(t,n,r,i).map(G5).map(o):Array.isArray(e)?e.map(G5).map(o):[]}function Tce(e){return typeof e=="function"}function G5(e){return typeof e=="string"?{type:e}:e}function gI(e){return e!=null}function Od(e){let t=0;for(const n in e)t++;return t}var vg=Symbol("forceQueryFn"),H5=e=>typeof e[vg]=="function";function Ace({serializeQueryArgs:e,queryThunk:t,mutationThunk:n,api:r,context:i}){const o=new Map,s=new Map,{unsubscribeQueryResult:a,removeMutationResult:l,updateSubscriptionOptions:c}=r.internalActions;return{buildInitiateQuery:p,buildInitiateMutation:m,getRunningQueryThunk:u,getRunningMutationThunk:d,getRunningQueriesThunk:f,getRunningMutationsThunk:h};function u(_,v){return y=>{var S;const g=i.endpointDefinitions[_],b=e({queryArgs:v,endpointDefinition:g,endpointName:_});return(S=o.get(y))==null?void 0:S[b]}}function d(_,v){return y=>{var g;return(g=s.get(y))==null?void 0:g[v]}}function f(){return _=>Object.values(o.get(_)||{}).filter(gI)}function h(){return _=>Object.values(s.get(_)||{}).filter(gI)}function p(_,v){const y=(g,{subscribe:b=!0,forceRefetch:S,subscriptionOptions:w,[vg]:C}={})=>(x,k)=>{var z;const A=e({queryArgs:g,endpointDefinition:v,endpointName:_}),R=t({type:"query",subscribe:b,forceRefetch:S,subscriptionOptions:w,endpointName:_,originalArgs:g,queryCacheKey:A,[vg]:C}),L=r.endpoints[_].select(g),M=x(R),E=L(k()),{requestId:P,abort:O}=M,F=E.requestId!==P,$=(z=o.get(x))==null?void 0:z[A],D=()=>L(k()),N=Object.assign(C?M.then(D):F&&!$?Promise.resolve(E):Promise.all([$,M]).then(D),{arg:g,requestId:P,subscriptionOptions:w,queryCacheKey:A,abort:O,async unwrap(){const V=await N;if(V.isError)throw V.error;return V.data},refetch:()=>x(y(g,{subscribe:!1,forceRefetch:!0})),unsubscribe(){b&&x(a({queryCacheKey:A,requestId:P}))},updateSubscriptionOptions(V){N.subscriptionOptions=V,x(c({endpointName:_,requestId:P,queryCacheKey:A,options:V}))}});if(!$&&!F&&!C){const V=o.get(x)||{};V[A]=N,o.set(x,V),N.then(()=>{delete V[A],Od(V)||o.delete(x)})}return N};return y}function m(_){return(v,{track:y=!0,fixedCacheKey:g}={})=>(b,S)=>{const w=n({type:"mutation",endpointName:_,originalArgs:v,track:y,fixedCacheKey:g}),C=b(w),{requestId:x,abort:k,unwrap:A}=C,R=C.unwrap().then(P=>({data:P})).catch(P=>({error:P})),L=()=>{b(l({requestId:x,fixedCacheKey:g}))},M=Object.assign(R,{arg:C.arg,requestId:x,abort:k,unwrap:A,reset:L}),E=s.get(b)||{};return s.set(b,E),E[x]=M,M.then(()=>{delete E[x],Od(E)||s.delete(b)}),g&&(E[g]=M,M.then(()=>{E[g]===M&&(delete E[g],Od(E)||s.delete(b))})),M}}}function mI(e){return e}function kce({reducerPath:e,baseQuery:t,context:{endpointDefinitions:n},serializeQueryArgs:r,api:i,assertTagType:o}){const s=(y,g,b,S)=>(w,C)=>{const x=n[y],k=r({queryArgs:g,endpointDefinition:x,endpointName:y});if(w(i.internalActions.queryResultPatched({queryCacheKey:k,patches:b})),!S)return;const A=i.endpoints[y].select(g)(C()),R=uT(x.providesTags,A.data,void 0,g,{},o);w(i.internalActions.updateProvidedBy({queryCacheKey:k,providedTags:R}))},a=(y,g,b,S=!0)=>(w,C)=>{const k=i.endpoints[y].select(g)(C());let A={patches:[],inversePatches:[],undo:()=>w(i.util.patchQueryData(y,g,A.inversePatches,S))};if(k.status==="uninitialized")return A;let R;if("data"in k)if(No(k.data)){const[L,M,E]=dN(k.data,b);A.patches.push(...M),A.inversePatches.push(...E),R=L}else R=b(k.data),A.patches.push({op:"replace",path:[],value:R}),A.inversePatches.push({op:"replace",path:[],value:k.data});return w(i.util.patchQueryData(y,g,A.patches,S)),A},l=(y,g,b)=>S=>S(i.endpoints[y].initiate(g,{subscribe:!1,forceRefetch:!0,[vg]:()=>({data:b})})),c=async(y,{signal:g,abort:b,rejectWithValue:S,fulfillWithValue:w,dispatch:C,getState:x,extra:k})=>{const A=n[y.endpointName];try{let R=mI,L;const M={signal:g,abort:b,dispatch:C,getState:x,extra:k,endpoint:y.endpointName,type:y.type,forced:y.type==="query"?u(y,x()):void 0},E=y.type==="query"?y[vg]:void 0;if(E?L=E():A.query?(L=await t(A.query(y.originalArgs),M,A.extraOptions),A.transformResponse&&(R=A.transformResponse)):L=await A.queryFn(y.originalArgs,M,A.extraOptions,P=>t(P,M,A.extraOptions)),typeof process<"u",L.error)throw new pI(L.error,L.meta);return w(await R(L.data,L.meta,y.originalArgs),{fulfilledTimeStamp:Date.now(),baseQueryMeta:L.meta,[ad]:!0})}catch(R){let L=R;if(L instanceof pI){let M=mI;A.query&&A.transformErrorResponse&&(M=A.transformErrorResponse);try{return S(await M(L.value,L.meta,y.originalArgs),{baseQueryMeta:L.meta,[ad]:!0})}catch(E){L=E}}throw typeof process<"u",console.error(L),L}};function u(y,g){var x,k,A;const b=(k=(x=g[e])==null?void 0:x.queries)==null?void 0:k[y.queryCacheKey],S=(A=g[e])==null?void 0:A.config.refetchOnMountOrArgChange,w=b==null?void 0:b.fulfilledTimeStamp,C=y.forceRefetch??(y.subscribe&&S);return C?C===!0||(Number(new Date)-Number(w))/1e3>=C:!1}const d=m5(`${e}/executeQuery`,c,{getPendingMeta(){return{startedTimeStamp:Date.now(),[ad]:!0}},condition(y,{getState:g}){var A,R,L;const b=g(),S=(R=(A=b[e])==null?void 0:A.queries)==null?void 0:R[y.queryCacheKey],w=S==null?void 0:S.fulfilledTimeStamp,C=y.originalArgs,x=S==null?void 0:S.originalArgs,k=n[y.endpointName];return H5(y)?!0:(S==null?void 0:S.status)==="pending"?!1:u(y,b)||vL(k)&&((L=k==null?void 0:k.forceRefetch)!=null&&L.call(k,{currentArg:C,previousArg:x,endpointState:S,state:b}))?!0:!w},dispatchConditionRejection:!0}),f=m5(`${e}/executeMutation`,c,{getPendingMeta(){return{startedTimeStamp:Date.now(),[ad]:!0}}}),h=y=>"force"in y,p=y=>"ifOlderThan"in y,m=(y,g,b)=>(S,w)=>{const C=h(b)&&b.force,x=p(b)&&b.ifOlderThan,k=(R=!0)=>i.endpoints[y].initiate(g,{forceRefetch:R}),A=i.endpoints[y].select(g)(w());if(C)S(k());else if(x){const R=A==null?void 0:A.fulfilledTimeStamp;if(!R){S(k());return}(Number(new Date)-Number(new Date(R)))/1e3>=x&&S(k())}else S(k(!1))};function _(y){return g=>{var b,S;return((S=(b=g==null?void 0:g.meta)==null?void 0:b.arg)==null?void 0:S.endpointName)===y}}function v(y,g){return{matchPending:hp(v4(y),_(g)),matchFulfilled:hp(bl(y),_(g)),matchRejected:hp(sf(y),_(g))}}return{queryThunk:d,mutationThunk:f,prefetch:m,updateQueryData:a,upsertQueryData:l,patchQueryData:s,buildMatchThunkActions:v}}function bL(e,t,n,r){return uT(n[e.meta.arg.endpointName][t],bl(e)?e.payload:void 0,fm(e)?e.payload:void 0,e.meta.arg.originalArgs,"baseQueryMeta"in e.meta?e.meta.baseQueryMeta:void 0,r)}function H0(e,t,n){const r=e[t];r&&n(r)}function bg(e){return("arg"in e?e.arg.fixedCacheKey:e.fixedCacheKey)??e.requestId}function yI(e,t,n){const r=e[bg(t)];r&&n(r)}var ph={};function Pce({reducerPath:e,queryThunk:t,mutationThunk:n,context:{endpointDefinitions:r,apiUid:i,extractRehydrationInfo:o,hasRehydrationInfo:s},assertTagType:a,config:l}){const c=he(`${e}/resetApiState`),u=jt({name:`${e}/queries`,initialState:ph,reducers:{removeQueryResult:{reducer(g,{payload:{queryCacheKey:b}}){delete g[b]},prepare:uh()},queryResultPatched:{reducer(g,{payload:{queryCacheKey:b,patches:S}}){H0(g,b,w=>{w.data=BP(w.data,S.concat())})},prepare:uh()}},extraReducers(g){g.addCase(t.pending,(b,{meta:S,meta:{arg:w}})=>{var x;const C=H5(w);b[x=w.queryCacheKey]??(b[x]={status:"uninitialized",endpointName:w.endpointName}),H0(b,w.queryCacheKey,k=>{k.status="pending",k.requestId=C&&k.requestId?k.requestId:S.requestId,w.originalArgs!==void 0&&(k.originalArgs=w.originalArgs),k.startedTimeStamp=S.startedTimeStamp})}).addCase(t.fulfilled,(b,{meta:S,payload:w})=>{H0(b,S.arg.queryCacheKey,C=>{if(C.requestId!==S.requestId&&!H5(S.arg))return;const{merge:x}=r[S.arg.endpointName];if(C.status="fulfilled",x)if(C.data!==void 0){const{fulfilledTimeStamp:k,arg:A,baseQueryMeta:R,requestId:L}=S;let M=Pf(C.data,E=>x(E,w,{arg:A.originalArgs,baseQueryMeta:R,fulfilledTimeStamp:k,requestId:L}));C.data=M}else C.data=w;else C.data=r[S.arg.endpointName].structuralSharing??!0?gL(Ji(C.data)?uQ(C.data):C.data,w):w;delete C.error,C.fulfilledTimeStamp=S.fulfilledTimeStamp})}).addCase(t.rejected,(b,{meta:{condition:S,arg:w,requestId:C},error:x,payload:k})=>{H0(b,w.queryCacheKey,A=>{if(!S){if(A.requestId!==C)return;A.status="rejected",A.error=k??x}})}).addMatcher(s,(b,S)=>{const{queries:w}=o(S);for(const[C,x]of Object.entries(w))((x==null?void 0:x.status)==="fulfilled"||(x==null?void 0:x.status)==="rejected")&&(b[C]=x)})}}),d=jt({name:`${e}/mutations`,initialState:ph,reducers:{removeMutationResult:{reducer(g,{payload:b}){const S=bg(b);S in g&&delete g[S]},prepare:uh()}},extraReducers(g){g.addCase(n.pending,(b,{meta:S,meta:{requestId:w,arg:C,startedTimeStamp:x}})=>{C.track&&(b[bg(S)]={requestId:w,status:"pending",endpointName:C.endpointName,startedTimeStamp:x})}).addCase(n.fulfilled,(b,{payload:S,meta:w})=>{w.arg.track&&yI(b,w,C=>{C.requestId===w.requestId&&(C.status="fulfilled",C.data=S,C.fulfilledTimeStamp=w.fulfilledTimeStamp)})}).addCase(n.rejected,(b,{payload:S,error:w,meta:C})=>{C.arg.track&&yI(b,C,x=>{x.requestId===C.requestId&&(x.status="rejected",x.error=S??w)})}).addMatcher(s,(b,S)=>{const{mutations:w}=o(S);for(const[C,x]of Object.entries(w))((x==null?void 0:x.status)==="fulfilled"||(x==null?void 0:x.status)==="rejected")&&C!==(x==null?void 0:x.requestId)&&(b[C]=x)})}}),f=jt({name:`${e}/invalidation`,initialState:ph,reducers:{updateProvidedBy:{reducer(g,b){var C,x;const{queryCacheKey:S,providedTags:w}=b.payload;for(const k of Object.values(g))for(const A of Object.values(k)){const R=A.indexOf(S);R!==-1&&A.splice(R,1)}for(const{type:k,id:A}of w){const R=(C=g[k]??(g[k]={}))[x=A||"__internal_without_id"]??(C[x]=[]);R.includes(S)||R.push(S)}},prepare:uh()}},extraReducers(g){g.addCase(u.actions.removeQueryResult,(b,{payload:{queryCacheKey:S}})=>{for(const w of Object.values(b))for(const C of Object.values(w)){const x=C.indexOf(S);x!==-1&&C.splice(x,1)}}).addMatcher(s,(b,S)=>{var C,x;const{provided:w}=o(S);for(const[k,A]of Object.entries(w))for(const[R,L]of Object.entries(A)){const M=(C=b[k]??(b[k]={}))[x=R||"__internal_without_id"]??(C[x]=[]);for(const E of L)M.includes(E)||M.push(E)}}).addMatcher(br(bl(t),fm(t)),(b,S)=>{const w=bL(S,"providesTags",r,a),{queryCacheKey:C}=S.meta.arg;f.caseReducers.updateProvidedBy(b,f.actions.updateProvidedBy({queryCacheKey:C,providedTags:w}))})}}),h=jt({name:`${e}/subscriptions`,initialState:ph,reducers:{updateSubscriptionOptions(g,b){},unsubscribeQueryResult(g,b){},internal_getRTKQSubscriptions(){}}}),p=jt({name:`${e}/internalSubscriptions`,initialState:ph,reducers:{subscriptionsUpdated:{reducer(g,b){return BP(g,b.payload)},prepare:uh()}}}),m=jt({name:`${e}/config`,initialState:{online:_ce(),focused:Sce(),middlewareRegistered:!1,...l},reducers:{middlewareRegistered(g,{payload:b}){g.middlewareRegistered=g.middlewareRegistered==="conflict"||i!==b?"conflict":!0}},extraReducers:g=>{g.addCase(cT,b=>{b.online=!0}).addCase(yL,b=>{b.online=!1}).addCase(lT,b=>{b.focused=!0}).addCase(mL,b=>{b.focused=!1}).addMatcher(s,b=>({...b}))}}),_=Vb({queries:u.reducer,mutations:d.reducer,provided:f.reducer,subscriptions:p.reducer,config:m.reducer}),v=(g,b)=>_(c.match(b)?void 0:g,b),y={...m.actions,...u.actions,...h.actions,...p.actions,...d.actions,...f.actions,resetApiState:c};return{reducer:v,actions:y}}var Sc=Symbol.for("RTKQ/skipToken"),_L={status:"uninitialized"},vI=Pf(_L,()=>{}),bI=Pf(_L,()=>{});function Ice({serializeQueryArgs:e,reducerPath:t}){const n=u=>vI,r=u=>bI;return{buildQuerySelector:s,buildMutationSelector:a,selectInvalidatedBy:l,selectCachedArgsForQuery:c};function i(u){return{...u,...gce(u.status)}}function o(u){return u[t]}function s(u,d){return f=>{const h=e({queryArgs:f,endpointDefinition:d,endpointName:u});return fp(f===Sc?n:_=>{var v,y;return((y=(v=o(_))==null?void 0:v.queries)==null?void 0:y[h])??vI},i)}}function a(){return u=>{let d;return typeof u=="object"?d=bg(u)??Sc:d=u,fp(d===Sc?r:p=>{var m,_;return((_=(m=o(p))==null?void 0:m.mutations)==null?void 0:_[d])??bI},i)}}function l(u,d){const f=u[t],h=new Set;for(const p of d.map(G5)){const m=f.provided[p.type];if(!m)continue;let _=(p.id!==void 0?m[p.id]:uI(Object.values(m)))??[];for(const v of _)h.add(v)}return uI(Array.from(h.values()).map(p=>{const m=f.queries[p];return m?[{queryCacheKey:p,endpointName:m.endpointName,originalArgs:m.originalArgs}]:[]}))}function c(u,d){return Object.values(u[t].queries).filter(f=>(f==null?void 0:f.endpointName)===d&&f.status!=="uninitialized").map(f=>f.originalArgs)}}var Mu=WeakMap?new WeakMap:void 0,_I=({endpointName:e,queryArgs:t})=>{let n="";const r=Mu==null?void 0:Mu.get(t);if(typeof r=="string")n=r;else{const i=JSON.stringify(t,(o,s)=>_s(s)?Object.keys(s).sort().reduce((a,l)=>(a[l]=s[l],a),{}):s);_s(t)&&(Mu==null||Mu.set(t,i)),n=i}return`${e}(${n})`};function Mce(...e){return function(n){const r=Zp(c=>{var u;return(u=n.extractRehydrationInfo)==null?void 0:u.call(n,c,{reducerPath:n.reducerPath??"api"})}),i={reducerPath:"api",keepUnusedDataFor:60,refetchOnMountOrArgChange:!1,refetchOnFocus:!1,refetchOnReconnect:!1,invalidationBehavior:"delayed",...n,extractRehydrationInfo:r,serializeQueryArgs(c){let u=_I;if("serializeQueryArgs"in c.endpointDefinition){const d=c.endpointDefinition.serializeQueryArgs;u=f=>{const h=d(f);return typeof h=="string"?h:_I({...f,queryArgs:h})}}else n.serializeQueryArgs&&(u=n.serializeQueryArgs);return u(c)},tagTypes:[...n.tagTypes||[]]},o={endpointDefinitions:{},batch(c){c()},apiUid:y4(),extractRehydrationInfo:r,hasRehydrationInfo:Zp(c=>r(c)!=null)},s={injectEndpoints:l,enhanceEndpoints({addTagTypes:c,endpoints:u}){if(c)for(const d of c)i.tagTypes.includes(d)||i.tagTypes.push(d);if(u)for(const[d,f]of Object.entries(u))typeof f=="function"?f(o.endpointDefinitions[d]):Object.assign(o.endpointDefinitions[d]||{},f);return s}},a=e.map(c=>c.init(s,i,o));function l(c){const u=c.endpoints({query:d=>({...d,type:"query"}),mutation:d=>({...d,type:"mutation"})});for(const[d,f]of Object.entries(u)){if(!c.overrideExisting&&d in o.endpointDefinitions){typeof process<"u";continue}o.endpointDefinitions[d]=f;for(const h of a)h.injectEndpoint(d,f)}return s}return s.injectEndpoints({endpoints:n.endpoints})}}function Rce(e){for(let t in e)return!1;return!0}var Oce=2147483647/1e3-1,$ce=({reducerPath:e,api:t,context:n,internalState:r})=>{const{removeQueryResult:i,unsubscribeQueryResult:o}=t.internalActions;function s(u){const d=r.currentSubscriptions[u];return!!d&&!Rce(d)}const a={},l=(u,d,f)=>{var h;if(o.match(u)){const p=d.getState()[e],{queryCacheKey:m}=u.payload;c(m,(h=p.queries[m])==null?void 0:h.endpointName,d,p.config)}if(t.util.resetApiState.match(u))for(const[p,m]of Object.entries(a))m&&clearTimeout(m),delete a[p];if(n.hasRehydrationInfo(u)){const p=d.getState()[e],{queries:m}=n.extractRehydrationInfo(u);for(const[_,v]of Object.entries(m))c(_,v==null?void 0:v.endpointName,d,p.config)}};function c(u,d,f,h){const p=n.endpointDefinitions[d],m=(p==null?void 0:p.keepUnusedDataFor)??h.keepUnusedDataFor;if(m===1/0)return;const _=Math.max(0,Math.min(m,Oce));if(!s(u)){const v=a[u];v&&clearTimeout(v),a[u]=setTimeout(()=>{s(u)||f.dispatch(i({queryCacheKey:u})),delete a[u]},_*1e3)}}return l},Nce=({reducerPath:e,context:t,context:{endpointDefinitions:n},mutationThunk:r,queryThunk:i,api:o,assertTagType:s,refetchQuery:a,internalState:l})=>{const{removeQueryResult:c}=o.internalActions,u=br(bl(r),fm(r)),d=br(bl(r,i),sf(r,i));let f=[];const h=(_,v)=>{u(_)?m(bL(_,"invalidatesTags",n,s),v):d(_)?m([],v):o.util.invalidateTags.match(_)&&m(uT(_.payload,void 0,void 0,void 0,void 0,s),v)};function p(_){var v,y;for(const g in _.queries)if(((v=_.queries[g])==null?void 0:v.status)==="pending")return!0;for(const g in _.mutations)if(((y=_.mutations[g])==null?void 0:y.status)==="pending")return!0;return!1}function m(_,v){const y=v.getState(),g=y[e];if(f.push(..._),g.config.invalidationBehavior==="delayed"&&p(g))return;const b=f;if(f=[],b.length===0)return;const S=o.util.selectInvalidatedBy(y,b);t.batch(()=>{const w=Array.from(S.values());for(const{queryCacheKey:C}of w){const x=g.queries[C],k=l.currentSubscriptions[C]??{};x&&(Od(k)===0?v.dispatch(c({queryCacheKey:C})):x.status!=="uninitialized"&&v.dispatch(a(x,C)))}})}return h},Fce=({reducerPath:e,queryThunk:t,api:n,refetchQuery:r,internalState:i})=>{const o={},s=(f,h)=>{(n.internalActions.updateSubscriptionOptions.match(f)||n.internalActions.unsubscribeQueryResult.match(f))&&l(f.payload,h),(t.pending.match(f)||t.rejected.match(f)&&f.meta.condition)&&l(f.meta.arg,h),(t.fulfilled.match(f)||t.rejected.match(f)&&!f.meta.condition)&&a(f.meta.arg,h),n.util.resetApiState.match(f)&&u()};function a({queryCacheKey:f},h){const m=h.getState()[e].queries[f],_=i.currentSubscriptions[f];if(!m||m.status==="uninitialized")return;const v=d(_);if(!Number.isFinite(v))return;const y=o[f];y!=null&&y.timeout&&(clearTimeout(y.timeout),y.timeout=void 0);const g=Date.now()+v,b=o[f]={nextPollTimestamp:g,pollingInterval:v,timeout:setTimeout(()=>{b.timeout=void 0,h.dispatch(r(m,f))},v)}}function l({queryCacheKey:f},h){const m=h.getState()[e].queries[f],_=i.currentSubscriptions[f];if(!m||m.status==="uninitialized")return;const v=d(_);if(!Number.isFinite(v)){c(f);return}const y=o[f],g=Date.now()+v;(!y||g{const{removeQueryResult:o}=n.internalActions,s=(l,c)=>{lT.match(l)&&a(c,"refetchOnFocus"),cT.match(l)&&a(c,"refetchOnReconnect")};function a(l,c){const u=l.getState()[e],d=u.queries,f=i.currentSubscriptions;t.batch(()=>{for(const h of Object.keys(f)){const p=d[h],m=f[h];if(!m||!p)continue;(Object.values(m).some(v=>v[c]===!0)||Object.values(m).every(v=>v[c]===void 0)&&u.config[c])&&(Od(m)===0?l.dispatch(o({queryCacheKey:h})):p.status!=="uninitialized"&&l.dispatch(r(p,h)))}})}return s},SI=new Error("Promise never resolved before cacheEntryRemoved."),Lce=({api:e,reducerPath:t,context:n,queryThunk:r,mutationThunk:i,internalState:o})=>{const s=g5(r),a=g5(i),l=bl(r,i),c={},u=(h,p,m)=>{const _=d(h);if(r.pending.match(h)){const v=m[t].queries[_],y=p.getState()[t].queries[_];!v&&y&&f(h.meta.arg.endpointName,h.meta.arg.originalArgs,_,p,h.meta.requestId)}else if(i.pending.match(h))p.getState()[t].mutations[_]&&f(h.meta.arg.endpointName,h.meta.arg.originalArgs,_,p,h.meta.requestId);else if(l(h)){const v=c[_];v!=null&&v.valueResolved&&(v.valueResolved({data:h.payload,meta:h.meta.baseQueryMeta}),delete v.valueResolved)}else if(e.internalActions.removeQueryResult.match(h)||e.internalActions.removeMutationResult.match(h)){const v=c[_];v&&(delete c[_],v.cacheEntryRemoved())}else if(e.util.resetApiState.match(h))for(const[v,y]of Object.entries(c))delete c[v],y.cacheEntryRemoved()};function d(h){return s(h)?h.meta.arg.queryCacheKey:a(h)?h.meta.requestId:e.internalActions.removeQueryResult.match(h)?h.payload.queryCacheKey:e.internalActions.removeMutationResult.match(h)?bg(h.payload):""}function f(h,p,m,_,v){const y=n.endpointDefinitions[h],g=y==null?void 0:y.onCacheEntryAdded;if(!g)return;let b={};const S=new Promise(R=>{b.cacheEntryRemoved=R}),w=Promise.race([new Promise(R=>{b.valueResolved=R}),S.then(()=>{throw SI})]);w.catch(()=>{}),c[m]=b;const C=e.endpoints[h].select(y.type==="query"?p:m),x=_.dispatch((R,L,M)=>M),k={..._,getCacheEntry:()=>C(_.getState()),requestId:v,extra:x,updateCachedData:y.type==="query"?R=>_.dispatch(e.util.updateQueryData(h,p,R)):void 0,cacheDataLoaded:w,cacheEntryRemoved:S},A=g(p,k);Promise.resolve(A).catch(R=>{if(R!==SI)throw R})}return u},Bce=({api:e,context:t,queryThunk:n,mutationThunk:r})=>{const i=v4(n,r),o=sf(n,r),s=bl(n,r),a={};return(c,u)=>{var d,f;if(i(c)){const{requestId:h,arg:{endpointName:p,originalArgs:m}}=c.meta,_=t.endpointDefinitions[p],v=_==null?void 0:_.onQueryStarted;if(v){const y={},g=new Promise((C,x)=>{y.resolve=C,y.reject=x});g.catch(()=>{}),a[h]=y;const b=e.endpoints[p].select(_.type==="query"?m:h),S=u.dispatch((C,x,k)=>k),w={...u,getCacheEntry:()=>b(u.getState()),requestId:h,extra:S,updateCachedData:_.type==="query"?C=>u.dispatch(e.util.updateQueryData(p,m,C)):void 0,queryFulfilled:g};v(m,w)}}else if(s(c)){const{requestId:h,baseQueryMeta:p}=c.meta;(d=a[h])==null||d.resolve({data:c.payload,meta:p}),delete a[h]}else if(o(c)){const{requestId:h,rejectedWithValue:p,baseQueryMeta:m}=c.meta;(f=a[h])==null||f.reject({error:c.payload??c.error,isUnhandledError:!p,meta:m}),delete a[h]}}},zce=({api:e,context:{apiUid:t},reducerPath:n})=>(r,i)=>{e.util.resetApiState.match(r)&&i.dispatch(e.internalActions.middlewareRegistered(t)),typeof process<"u"},jce=({api:e,queryThunk:t,internalState:n})=>{const r=`${e.reducerPath}/subscriptions`;let i=null,o=null;const{updateSubscriptionOptions:s,unsubscribeQueryResult:a}=e.internalActions,l=(h,p)=>{var _,v,y;if(s.match(p)){const{queryCacheKey:g,requestId:b,options:S}=p.payload;return(_=h==null?void 0:h[g])!=null&&_[b]&&(h[g][b]=S),!0}if(a.match(p)){const{queryCacheKey:g,requestId:b}=p.payload;return h[g]&&delete h[g][b],!0}if(e.internalActions.removeQueryResult.match(p))return delete h[p.payload.queryCacheKey],!0;if(t.pending.match(p)){const{meta:{arg:g,requestId:b}}=p,S=h[v=g.queryCacheKey]??(h[v]={});return S[`${b}_running`]={},g.subscribe&&(S[b]=g.subscriptionOptions??S[b]??{}),!0}let m=!1;if(t.fulfilled.match(p)||t.rejected.match(p)){const g=h[p.meta.arg.queryCacheKey]||{},b=`${p.meta.requestId}_running`;m||(m=!!g[b]),delete g[b]}if(t.rejected.match(p)){const{meta:{condition:g,arg:b,requestId:S}}=p;if(g&&b.subscribe){const w=h[y=b.queryCacheKey]??(h[y]={});w[S]=b.subscriptionOptions??w[S]??{},m=!0}}return m},c=()=>n.currentSubscriptions,f={getSubscriptions:c,getSubscriptionCount:h=>{const m=c()[h]??{};return Od(m)},isRequestSubscribed:(h,p)=>{var _;const m=c();return!!((_=m==null?void 0:m[h])!=null&&_[p])}};return(h,p)=>{if(i||(i=JSON.parse(JSON.stringify(n.currentSubscriptions))),e.util.resetApiState.match(h))return i=n.currentSubscriptions={},o=null,[!0,!1];if(e.internalActions.internal_getRTKQSubscriptions.match(h))return[!1,f];const m=l(n.currentSubscriptions,h);let _=!0;if(m){o||(o=setTimeout(()=>{const g=JSON.parse(JSON.stringify(n.currentSubscriptions)),[,b]=dN(i,()=>g);p.next(e.internalActions.subscriptionsUpdated(b)),i=g,o=null},500));const v=typeof h.type=="string"&&!!h.type.startsWith(r),y=t.rejected.match(h)&&h.meta.condition&&!!h.meta.arg.subscribe;_=!v&&!y}return[_,!1]}};function Vce(e){const{reducerPath:t,queryThunk:n,api:r,context:i}=e,{apiUid:o}=i,s={invalidateTags:he(`${t}/invalidateTags`)},a=d=>d.type.startsWith(`${t}/`),l=[zce,$ce,Nce,Fce,Lce,Bce];return{middleware:d=>{let f=!1;const p={...e,internalState:{currentSubscriptions:{}},refetchQuery:u,isThisApiSliceAction:a},m=l.map(y=>y(p)),_=jce(p),v=Dce(p);return y=>g=>{if(!Ub(g))return y(g);f||(f=!0,d.dispatch(r.internalActions.middlewareRegistered(o)));const b={...d,next:y},S=d.getState(),[w,C]=_(g,b,S);let x;if(w?x=y(g):x=C,d.getState()[t]&&(v(g,b,S),a(g)||i.hasRehydrationInfo(g)))for(let k of m)k(g,b,S);return x}},actions:s};function u(d,f,h={}){return n({type:"query",endpointName:d.endpointName,originalArgs:d.originalArgs,subscribe:!1,forceRefetch:!0,queryCacheKey:f,...h})}}function ka(e,...t){return Object.assign(e,...t)}var xI=Symbol(),Uce=()=>({name:xI,init(e,{baseQuery:t,tagTypes:n,reducerPath:r,serializeQueryArgs:i,keepUnusedDataFor:o,refetchOnMountOrArgChange:s,refetchOnFocus:a,refetchOnReconnect:l,invalidationBehavior:c},u){bQ();const d=F=>(typeof process<"u",F);Object.assign(e,{reducerPath:r,endpoints:{},internalActions:{onOnline:cT,onOffline:yL,onFocus:lT,onFocusLost:mL},util:{}});const{queryThunk:f,mutationThunk:h,patchQueryData:p,updateQueryData:m,upsertQueryData:_,prefetch:v,buildMatchThunkActions:y}=kce({baseQuery:t,reducerPath:r,context:u,api:e,serializeQueryArgs:i,assertTagType:d}),{reducer:g,actions:b}=Pce({context:u,queryThunk:f,mutationThunk:h,reducerPath:r,assertTagType:d,config:{refetchOnFocus:a,refetchOnReconnect:l,refetchOnMountOrArgChange:s,keepUnusedDataFor:o,reducerPath:r,invalidationBehavior:c}});ka(e.util,{patchQueryData:p,updateQueryData:m,upsertQueryData:_,prefetch:v,resetApiState:b.resetApiState}),ka(e.internalActions,b);const{middleware:S,actions:w}=Vce({reducerPath:r,context:u,queryThunk:f,mutationThunk:h,api:e,assertTagType:d});ka(e.util,w),ka(e,{reducer:g,middleware:S});const{buildQuerySelector:C,buildMutationSelector:x,selectInvalidatedBy:k,selectCachedArgsForQuery:A}=Ice({serializeQueryArgs:i,reducerPath:r});ka(e.util,{selectInvalidatedBy:k,selectCachedArgsForQuery:A});const{buildInitiateQuery:R,buildInitiateMutation:L,getRunningMutationThunk:M,getRunningMutationsThunk:E,getRunningQueriesThunk:P,getRunningQueryThunk:O}=Ace({queryThunk:f,mutationThunk:h,api:e,serializeQueryArgs:i,context:u});return ka(e.util,{getRunningMutationThunk:M,getRunningMutationsThunk:E,getRunningQueryThunk:O,getRunningQueriesThunk:P}),{name:xI,injectEndpoint(F,$){var N;const D=e;(N=D.endpoints)[F]??(N[F]={}),vL($)?ka(D.endpoints[F],{name:F,select:C(F,$),initiate:R(F,$)},y(f,F)):Ece($)&&ka(D.endpoints[F],{name:F,select:x(),initiate:L(F)},y(h,F))}}}});function wI(e,t,n,r){const i=I.useMemo(()=>({queryArgs:e,serialized:typeof e=="object"?t({queryArgs:e,endpointDefinition:n,endpointName:r}):e}),[e,t,n,r]),o=I.useRef(i);return I.useEffect(()=>{o.current.serialized!==i.serialized&&(o.current=i)},[i]),o.current.serialized===i.serialized?o.current.queryArgs:e}var Kx=Symbol();function Xx(e){const t=I.useRef(e);return I.useEffect(()=>{Jv(t.current,e)||(t.current=e)},[e]),Jv(t.current,e)?t.current:e}var Ru=WeakMap?new WeakMap:void 0,Gce=({endpointName:e,queryArgs:t})=>{let n="";const r=Ru==null?void 0:Ru.get(t);if(typeof r=="string")n=r;else{const i=JSON.stringify(t,(o,s)=>_s(s)?Object.keys(s).sort().reduce((a,l)=>(a[l]=s[l],a),{}):s);_s(t)&&(Ru==null||Ru.set(t,i)),n=i}return`${e}(${n})`},Hce=typeof window<"u"&&window.document&&window.document.createElement?I.useLayoutEffect:I.useEffect,Wce=e=>e.isUninitialized?{...e,isUninitialized:!1,isFetching:!0,isLoading:e.data===void 0,status:pL.pending}:e;function qce({api:e,moduleOptions:{batch:t,hooks:{useDispatch:n,useSelector:r,useStore:i},unstable__sideEffectsInRender:o},serializeQueryArgs:s,context:a}){const l=o?h=>h():I.useEffect;return{buildQueryHooks:d,buildMutationHook:f,usePrefetch:u};function c(h,p,m){if(p!=null&&p.endpointName&&h.isUninitialized){const{endpointName:S}=p,w=a.endpointDefinitions[S];s({queryArgs:p.originalArgs,endpointDefinition:w,endpointName:S})===s({queryArgs:m,endpointDefinition:w,endpointName:S})&&(p=void 0)}let _=h.isSuccess?h.data:p==null?void 0:p.data;_===void 0&&(_=h.data);const v=_!==void 0,y=h.isLoading,g=!v&&y,b=h.isSuccess||y&&v;return{...h,data:_,currentData:h.data,isFetching:y,isLoading:g,isSuccess:b}}function u(h,p){const m=n(),_=Xx(p);return I.useCallback((v,y)=>m(e.util.prefetch(h,v,{..._,...y})),[h,m,_])}function d(h){const p=(v,{refetchOnReconnect:y,refetchOnFocus:g,refetchOnMountOrArgChange:b,skip:S=!1,pollingInterval:w=0}={})=>{const{initiate:C}=e.endpoints[h],x=n(),k=I.useRef();if(!k.current){const $=x(e.internalActions.internal_getRTKQSubscriptions());k.current=$}const A=wI(S?Sc:v,Gce,a.endpointDefinitions[h],h),R=Xx({refetchOnReconnect:y,refetchOnFocus:g,pollingInterval:w}),L=I.useRef(!1),M=I.useRef();let{queryCacheKey:E,requestId:P}=M.current||{},O=!1;E&&P&&(O=k.current.isRequestSubscribed(E,P));const F=!O&&L.current;return l(()=>{L.current=O}),l(()=>{F&&(M.current=void 0)},[F]),l(()=>{var N;const $=M.current;if(typeof process<"u",A===Sc){$==null||$.unsubscribe(),M.current=void 0;return}const D=(N=M.current)==null?void 0:N.subscriptionOptions;if(!$||$.arg!==A){$==null||$.unsubscribe();const z=x(C(A,{subscriptionOptions:R,forceRefetch:b}));M.current=z}else R!==D&&$.updateSubscriptionOptions(R)},[x,C,b,A,R,F]),I.useEffect(()=>()=>{var $;($=M.current)==null||$.unsubscribe(),M.current=void 0},[]),I.useMemo(()=>({refetch:()=>{var $;if(!M.current)throw new Error(yr(38));return($=M.current)==null?void 0:$.refetch()}}),[])},m=({refetchOnReconnect:v,refetchOnFocus:y,pollingInterval:g=0}={})=>{const{initiate:b}=e.endpoints[h],S=n(),[w,C]=I.useState(Kx),x=I.useRef(),k=Xx({refetchOnReconnect:v,refetchOnFocus:y,pollingInterval:g});l(()=>{var M,E;const L=(M=x.current)==null?void 0:M.subscriptionOptions;k!==L&&((E=x.current)==null||E.updateSubscriptionOptions(k))},[k]);const A=I.useRef(k);l(()=>{A.current=k},[k]);const R=I.useCallback(function(L,M=!1){let E;return t(()=>{var P;(P=x.current)==null||P.unsubscribe(),x.current=E=S(b(L,{subscriptionOptions:A.current,forceRefetch:!M})),C(L)}),E},[S,b]);return I.useEffect(()=>()=>{var L;(L=x==null?void 0:x.current)==null||L.unsubscribe()},[]),I.useEffect(()=>{w!==Kx&&!x.current&&R(w,!0)},[w,R]),I.useMemo(()=>[R,w],[R,w])},_=(v,{skip:y=!1,selectFromResult:g}={})=>{const{select:b}=e.endpoints[h],S=wI(y?Sc:v,s,a.endpointDefinitions[h],h),w=I.useRef(),C=I.useMemo(()=>fp([b(S),(L,M)=>M,L=>S],c),[b,S]),x=I.useMemo(()=>g?fp([C],g,{devModeChecks:{identityFunctionCheck:"never"}}):C,[C,g]),k=r(L=>x(L,w.current),Jv),A=i(),R=C(A.getState(),w.current);return Hce(()=>{w.current=R},[R]),k};return{useQueryState:_,useQuerySubscription:p,useLazyQuerySubscription:m,useLazyQuery(v){const[y,g]=m(v),b=_(g,{...v,skip:g===Kx}),S=I.useMemo(()=>({lastArg:g}),[g]);return I.useMemo(()=>[y,b,S],[y,b,S])},useQuery(v,y){const g=p(v,y),b=_(v,{selectFromResult:v===Sc||y!=null&&y.skip?void 0:Wce,...y}),{data:S,status:w,isLoading:C,isSuccess:x,isError:k,error:A}=b;return I.useDebugValue({data:S,status:w,isLoading:C,isSuccess:x,isError:k,error:A}),I.useMemo(()=>({...b,...g}),[b,g])}}}function f(h){return({selectFromResult:p,fixedCacheKey:m}={})=>{const{select:_,initiate:v}=e.endpoints[h],y=n(),[g,b]=I.useState();I.useEffect(()=>()=>{g!=null&&g.arg.fixedCacheKey||g==null||g.reset()},[g]);const S=I.useCallback(function(N){const z=y(v(N,{fixedCacheKey:m}));return b(z),z},[y,v,m]),{requestId:w}=g||{},C=I.useMemo(()=>_({fixedCacheKey:m,requestId:g==null?void 0:g.requestId}),[m,g,_]),x=I.useMemo(()=>p?fp([C],p):C,[p,C]),k=r(x,Jv),A=m==null?g==null?void 0:g.arg.originalArgs:void 0,R=I.useCallback(()=>{t(()=>{g&&b(void 0),m&&y(e.internalActions.removeMutationResult({requestId:w,fixedCacheKey:m}))})},[y,m,g,w]),{endpointName:L,data:M,status:E,isLoading:P,isSuccess:O,isError:F,error:$}=k;I.useDebugValue({endpointName:L,data:M,status:E,isLoading:P,isSuccess:O,isError:F,error:$});const D=I.useMemo(()=>({...k,originalArgs:A,reset:R}),[k,A,R]);return I.useMemo(()=>[S,D],[S,D])}}}function Kce(e){return e.type==="query"}function Xce(e){return e.type==="mutation"}function Qx(e){return e.replace(e[0],e[0].toUpperCase())}function W0(e,...t){return Object.assign(e,...t)}var Qce=Symbol(),Yce=({batch:e=iQ,hooks:t={useDispatch:eN,useSelector:Y$,useStore:J$},unstable__sideEffectsInRender:n=!1,...r}={})=>({name:Qce,init(i,{serializeQueryArgs:o},s){const a=i,{buildQueryHooks:l,buildMutationHook:c,usePrefetch:u}=qce({api:i,moduleOptions:{batch:e,hooks:t,unstable__sideEffectsInRender:n},serializeQueryArgs:o,context:s});return W0(a,{usePrefetch:u}),W0(s,{batch:e}),{injectEndpoint(d,f){if(Kce(f)){const{useQuery:h,useLazyQuery:p,useLazyQuerySubscription:m,useQueryState:_,useQuerySubscription:v}=l(d);W0(a.endpoints[d],{useQuery:h,useLazyQuery:p,useLazyQuerySubscription:m,useQueryState:_,useQuerySubscription:v}),i[`use${Qx(d)}Query`]=h,i[`useLazy${Qx(d)}Query`]=p}else if(Xce(f)){const h=c(d);W0(a.endpoints[d],{useMutation:h}),i[`use${Qx(d)}Mutation`]=h}}}}}),Zce=Mce(Uce(),Yce());const Jce=["AppVersion","AppConfig","Board","BoardImagesTotal","BoardAssetsTotal","Image","ImageNameList","ImageList","ImageMetadata","ImageWorkflow","ImageMetadataFromFile","IntermediatesCount","SessionQueueItem","SessionQueueStatus","SessionProcessorStatus","CurrentSessionQueueItem","NextSessionQueueItem","BatchStatus","InvocationCacheStatus","Model","T2IAdapterModel","MainModel","OnnxModel","VaeModel","IPAdapterModel","TextualInversionModel","ControlNetModel","LoRAModel","SDXLRefinerModel","Workflow","WorkflowsRecent"],Ir="LIST",eue=async(e,t,n)=>{const r=Yv.get(),i=Qv.get(),o=F5.get();return Cce({baseUrl:`${r??""}/api/v1`,prepareHeaders:a=>(i&&a.set("Authorization",`Bearer ${i}`),o&&a.set("project-id",o),a)})(e,t,n)},Lo=Zce({baseQuery:eue,reducerPath:"api",tagTypes:Jce,endpoints:()=>({})}),tue=e=>{const t=e?yp.stringify(e,{arrayFormat:"none"}):void 0;return t?`queue/${In.get()}/list?${t}`:`queue/${In.get()}/list`},pc=jo({selectId:e=>String(e.item_id),sortComparer:(e,t)=>e.priority>t.priority?-1:e.priorityt.item_id?1:0}),en=Lo.injectEndpoints({endpoints:e=>({enqueueBatch:e.mutation({query:t=>({url:`queue/${In.get()}/enqueue_batch`,body:t,method:"POST"}),invalidatesTags:["SessionQueueStatus","CurrentSessionQueueItem","NextSessionQueueItem"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),resumeProcessor:e.mutation({query:()=>({url:`queue/${In.get()}/processor/resume`,method:"PUT"}),invalidatesTags:["CurrentSessionQueueItem","SessionQueueStatus"]}),pauseProcessor:e.mutation({query:()=>({url:`queue/${In.get()}/processor/pause`,method:"PUT"}),invalidatesTags:["CurrentSessionQueueItem","SessionQueueStatus"]}),pruneQueue:e.mutation({query:()=>({url:`queue/${In.get()}/prune`,method:"PUT"}),invalidatesTags:["SessionQueueStatus","BatchStatus"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),clearQueue:e.mutation({query:()=>({url:`queue/${In.get()}/clear`,method:"PUT"}),invalidatesTags:["SessionQueueStatus","SessionProcessorStatus","BatchStatus","CurrentSessionQueueItem","NextSessionQueueItem"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),getCurrentQueueItem:e.query({query:()=>({url:`queue/${In.get()}/current`,method:"GET"}),providesTags:t=>{const n=["CurrentSessionQueueItem"];return t&&n.push({type:"SessionQueueItem",id:t.item_id}),n}}),getNextQueueItem:e.query({query:()=>({url:`queue/${In.get()}/next`,method:"GET"}),providesTags:t=>{const n=["NextSessionQueueItem"];return t&&n.push({type:"SessionQueueItem",id:t.item_id}),n}}),getQueueStatus:e.query({query:()=>({url:`queue/${In.get()}/status`,method:"GET"}),providesTags:["SessionQueueStatus"]}),getBatchStatus:e.query({query:({batch_id:t})=>({url:`queue/${In.get()}/b/${t}/status`,method:"GET"}),providesTags:t=>t?[{type:"BatchStatus",id:t.batch_id}]:[]}),getQueueItem:e.query({query:t=>({url:`queue/${In.get()}/i/${t}`,method:"GET"}),providesTags:t=>t?[{type:"SessionQueueItem",id:t.item_id}]:[]}),cancelQueueItem:e.mutation({query:t=>({url:`queue/${In.get()}/i/${t}/cancel`,method:"PUT"}),onQueryStarted:async(t,{dispatch:n,queryFulfilled:r})=>{try{const{data:i}=await r;n(en.util.updateQueryData("listQueueItems",void 0,o=>{pc.updateOne(o,{id:String(t),changes:{status:i.status,completed_at:i.completed_at,updated_at:i.updated_at}})}))}catch{}},invalidatesTags:t=>t?[{type:"SessionQueueItem",id:t.item_id},{type:"BatchStatus",id:t.batch_id}]:[]}),cancelByBatchIds:e.mutation({query:t=>({url:`queue/${In.get()}/cancel_by_batch_ids`,method:"PUT",body:t}),onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}},invalidatesTags:["SessionQueueStatus","BatchStatus"]}),listQueueItems:e.query({query:t=>({url:tue(t),method:"GET"}),serializeQueryArgs:()=>`queue/${In.get()}/list`,transformResponse:t=>pc.addMany(pc.getInitialState({has_more:t.has_more}),t.items),merge:(t,n)=>{pc.addMany(t,pc.getSelectors().selectAll(n)),t.has_more=n.has_more},forceRefetch:({currentArg:t,previousArg:n})=>t!==n,keepUnusedDataFor:60*5})})}),{useCancelByBatchIdsMutation:sVe,useEnqueueBatchMutation:aVe,usePauseProcessorMutation:lVe,useResumeProcessorMutation:cVe,useClearQueueMutation:uVe,usePruneQueueMutation:dVe,useGetCurrentQueueItemQuery:fVe,useGetQueueStatusQuery:hVe,useGetQueueItemQuery:pVe,useGetNextQueueItemQuery:gVe,useListQueueItemsQuery:mVe,useCancelQueueItemMutation:yVe,useGetBatchStatusQuery:vVe}=en,q0=e=>{e(en.util.updateQueryData("listQueueItems",void 0,t=>{pc.removeAll(t),t.has_more=!1})),e(rce()),e(en.endpoints.listQueueItems.initiate(void 0))},Uh={objects:[],stagingArea:{images:[],selectedImageIndex:-1}},SL={boundingBoxCoordinates:{x:0,y:0},boundingBoxDimensions:{width:512,height:512},boundingBoxPreviewFill:{r:0,g:0,b:0,a:.5},boundingBoxScaleMethod:"none",brushColor:{r:90,g:90,b:255,a:1},brushSize:50,colorPickerColor:{r:90,g:90,b:255,a:1},cursorPosition:null,futureLayerStates:[],isDrawing:!1,isMaskEnabled:!0,isMouseOverBoundingBox:!1,isMoveBoundingBoxKeyHeld:!1,isMoveStageKeyHeld:!1,isMovingBoundingBox:!1,isMovingStage:!1,isTransformingBoundingBox:!1,layer:"base",layerState:Uh,maskColor:{r:255,g:90,b:90,a:1},maxHistory:128,minimumStageScale:1,pastLayerStates:[],scaledBoundingBoxDimensions:{width:512,height:512},shouldAntialias:!0,shouldAutoSave:!1,shouldCropToBoundingBoxOnSave:!1,shouldDarkenOutsideBoundingBox:!1,shouldLockBoundingBox:!1,shouldPreserveMaskedArea:!1,shouldRestrictStrokesToBox:!0,shouldShowBoundingBox:!0,shouldShowBrush:!0,shouldShowBrushPreview:!1,shouldShowCanvasDebugInfo:!1,shouldShowCheckboardTransparency:!1,shouldShowGrid:!0,shouldShowIntermediates:!0,shouldShowStagingImage:!0,shouldShowStagingOutline:!0,shouldSnapToGrid:!0,stageCoordinates:{x:0,y:0},stageDimensions:{width:0,height:0},stageScale:1,tool:"brush",batchIds:[]},xL=jt({name:"canvas",initialState:SL,reducers:{setTool:(e,t)=>{const n=t.payload;e.tool=t.payload,n!=="move"&&(e.isTransformingBoundingBox=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1)},setLayer:(e,t)=>{e.layer=t.payload},toggleTool:e=>{const t=e.tool;t!=="move"&&(e.tool=t==="brush"?"eraser":"brush")},setMaskColor:(e,t)=>{e.maskColor=t.payload},setBrushColor:(e,t)=>{e.brushColor=t.payload},setBrushSize:(e,t)=>{e.brushSize=t.payload},clearMask:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.layerState.objects=e.layerState.objects.filter(t=>!rL(t)),e.futureLayerStates=[],e.shouldPreserveMaskedArea=!1},toggleShouldInvertMask:e=>{e.shouldPreserveMaskedArea=!e.shouldPreserveMaskedArea},toggleShouldShowMask:e=>{e.isMaskEnabled=!e.isMaskEnabled},setShouldPreserveMaskedArea:(e,t)=>{e.shouldPreserveMaskedArea=t.payload},setIsMaskEnabled:(e,t)=>{e.isMaskEnabled=t.payload,e.layer=t.payload?"mask":"base"},setShouldShowCheckboardTransparency:(e,t)=>{e.shouldShowCheckboardTransparency=t.payload},setShouldShowBrushPreview:(e,t)=>{e.shouldShowBrushPreview=t.payload},setShouldShowBrush:(e,t)=>{e.shouldShowBrush=t.payload},setCursorPosition:(e,t)=>{e.cursorPosition=t.payload},setInitialCanvasImage:(e,t)=>{const n=t.payload,{width:r,height:i}=n,{stageDimensions:o}=e,s={width:B0(el(r,64,512),64),height:B0(el(i,64,512),64)},a={x:Or(r/2-s.width/2,64),y:Or(i/2-s.height/2,64)};if(e.boundingBoxScaleMethod==="auto"){const u=Iu(s);e.scaledBoundingBoxDimensions=u}e.boundingBoxDimensions=s,e.boundingBoxCoordinates=a,e.pastLayerStates.push(Ge(e.layerState)),e.layerState={...Ge(Uh),objects:[{kind:"image",layer:"base",x:0,y:0,width:r,height:i,imageName:n.image_name}]},e.futureLayerStates=[],e.batchIds=[];const l=U0(o.width,o.height,r,i,G0),c=V0(o.width,o.height,0,0,r,i,l);e.stageScale=l,e.stageCoordinates=c},setBoundingBoxDimensions:(e,t)=>{const n=Zle(t.payload);if(e.boundingBoxDimensions=n,e.boundingBoxScaleMethod==="auto"){const r=Iu(n);e.scaledBoundingBoxDimensions=r}},flipBoundingBoxAxes:e=>{const[t,n]=[e.boundingBoxDimensions.width,e.boundingBoxDimensions.height],[r,i]=[e.scaledBoundingBoxDimensions.width,e.scaledBoundingBoxDimensions.height];e.boundingBoxDimensions={width:n,height:t},e.scaledBoundingBoxDimensions={width:i,height:r}},setBoundingBoxCoordinates:(e,t)=>{e.boundingBoxCoordinates=Yle(t.payload)},setStageCoordinates:(e,t)=>{e.stageCoordinates=t.payload},setBoundingBoxPreviewFill:(e,t)=>{e.boundingBoxPreviewFill=t.payload},setStageScale:(e,t)=>{e.stageScale=t.payload},setShouldDarkenOutsideBoundingBox:(e,t)=>{e.shouldDarkenOutsideBoundingBox=t.payload},setIsDrawing:(e,t)=>{e.isDrawing=t.payload},clearCanvasHistory:e=>{e.pastLayerStates=[],e.futureLayerStates=[]},setShouldLockBoundingBox:(e,t)=>{e.shouldLockBoundingBox=t.payload},toggleShouldLockBoundingBox:e=>{e.shouldLockBoundingBox=!e.shouldLockBoundingBox},setShouldShowBoundingBox:(e,t)=>{e.shouldShowBoundingBox=t.payload},setIsTransformingBoundingBox:(e,t)=>{e.isTransformingBoundingBox=t.payload},setIsMovingBoundingBox:(e,t)=>{e.isMovingBoundingBox=t.payload},setIsMouseOverBoundingBox:(e,t)=>{e.isMouseOverBoundingBox=t.payload},setIsMoveBoundingBoxKeyHeld:(e,t)=>{e.isMoveBoundingBoxKeyHeld=t.payload},setIsMoveStageKeyHeld:(e,t)=>{e.isMoveStageKeyHeld=t.payload},canvasBatchIdAdded:(e,t)=>{e.batchIds.push(t.payload)},canvasBatchIdsReset:e=>{e.batchIds=[]},stagingAreaInitialized:(e,t)=>{const{boundingBox:n}=t.payload;e.layerState.stagingArea={boundingBox:n,images:[],selectedImageIndex:-1}},addImageToStagingArea:(e,t)=>{const n=t.payload;!n||!e.layerState.stagingArea.boundingBox||(e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea.images.push({kind:"image",layer:"base",...e.layerState.stagingArea.boundingBox,imageName:n.image_name}),e.layerState.stagingArea.selectedImageIndex=e.layerState.stagingArea.images.length-1,e.futureLayerStates=[])},discardStagedImages:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea=Ge(Ge(Uh)).stagingArea,e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0,e.batchIds=[]},addFillRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,brushColor:r}=e;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"fillRect",layer:"base",...t,...n,color:r}),e.futureLayerStates=[]},addEraseRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n}=e;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"eraseRect",layer:"base",...t,...n}),e.futureLayerStates=[]},addLine:(e,t)=>{const{tool:n,layer:r,brushColor:i,brushSize:o,shouldRestrictStrokesToBox:s}=e;if(n==="move"||n==="colorPicker")return;const a=o/2,l=r==="base"&&n==="brush"?{color:i}:{};e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const c={kind:"line",layer:r,tool:n,strokeWidth:a,points:t.payload,...l};s&&(c.clip={...e.boundingBoxCoordinates,...e.boundingBoxDimensions}),e.layerState.objects.push(c),e.futureLayerStates=[]},addPointToCurrentLine:(e,t)=>{const n=e.layerState.objects.findLast(ece);n&&n.points.push(...t.payload)},undo:e=>{const t=e.pastLayerStates.pop();t&&(e.futureLayerStates.unshift(Ge(e.layerState)),e.futureLayerStates.length>e.maxHistory&&e.futureLayerStates.pop(),e.layerState=t)},redo:e=>{const t=e.futureLayerStates.shift();t&&(e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState=t)},setShouldShowGrid:(e,t)=>{e.shouldShowGrid=t.payload},setIsMovingStage:(e,t)=>{e.isMovingStage=t.payload},setShouldSnapToGrid:(e,t)=>{e.shouldSnapToGrid=t.payload},setShouldAutoSave:(e,t)=>{e.shouldAutoSave=t.payload},setShouldShowIntermediates:(e,t)=>{e.shouldShowIntermediates=t.payload},resetCanvas:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.layerState=Ge(Uh),e.futureLayerStates=[],e.batchIds=[]},canvasResized:(e,t)=>{const{width:n,height:r}=t.payload,i={width:Math.floor(n),height:Math.floor(r)};if(e.stageDimensions=i,!e.layerState.objects.find(Jle)){const o=U0(i.width,i.height,512,512,G0),s=V0(i.width,i.height,0,0,512,512,o),a={width:512,height:512};if(e.stageScale=o,e.stageCoordinates=s,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=a,e.boundingBoxScaleMethod==="auto"){const l=Iu(a);e.scaledBoundingBoxDimensions=l}}},resetCanvasView:(e,t)=>{const{contentRect:n,shouldScaleTo1:r}=t.payload,{stageDimensions:{width:i,height:o}}=e,{x:s,y:a,width:l,height:c}=n;if(l!==0&&c!==0){const u=r?1:U0(i,o,l,c,G0),d=V0(i,o,s,a,l,c,u);e.stageScale=u,e.stageCoordinates=d}else{const u=U0(i,o,512,512,G0),d=V0(i,o,0,0,512,512,u),f={width:512,height:512};if(e.stageScale=u,e.stageCoordinates=d,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=f,e.boundingBoxScaleMethod==="auto"){const h=Iu(f);e.scaledBoundingBoxDimensions=h}}},nextStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex+1,n=e.layerState.stagingArea.images.length-1;e.layerState.stagingArea.selectedImageIndex=t>n?0:t},prevStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex-1,n=e.layerState.stagingArea.images.length-1;e.layerState.stagingArea.selectedImageIndex=t<0?n:t},commitStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const{images:t,selectedImageIndex:n}=e.layerState.stagingArea;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const r=t[n];r&&e.layerState.objects.push({...r}),e.layerState.stagingArea=Ge(Uh).stagingArea,e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0,e.batchIds=[]},fitBoundingBoxToStage:e=>{const{boundingBoxDimensions:t,boundingBoxCoordinates:n,stageDimensions:r,stageScale:i}=e,o=r.width/i,s=r.height/i;if(n.x<0||n.x+t.width>o||n.y<0||n.y+t.height>s){const a={width:B0(el(o,64,512),64),height:B0(el(s,64,512),64)},l={x:Or(o/2-a.width/2,64),y:Or(s/2-a.height/2,64)};if(e.boundingBoxDimensions=a,e.boundingBoxCoordinates=l,e.boundingBoxScaleMethod==="auto"){const c=Iu(a);e.scaledBoundingBoxDimensions=c}}},setBoundingBoxScaleMethod:(e,t)=>{if(e.boundingBoxScaleMethod=t.payload,t.payload==="auto"){const n=Iu(e.boundingBoxDimensions);e.scaledBoundingBoxDimensions=n}},setScaledBoundingBoxDimensions:(e,t)=>{e.scaledBoundingBoxDimensions=t.payload},setShouldShowStagingImage:(e,t)=>{e.shouldShowStagingImage=t.payload},setShouldShowStagingOutline:(e,t)=>{e.shouldShowStagingOutline=t.payload},setShouldShowCanvasDebugInfo:(e,t)=>{e.shouldShowCanvasDebugInfo=t.payload},setShouldRestrictStrokesToBox:(e,t)=>{e.shouldRestrictStrokesToBox=t.payload},setShouldAntialias:(e,t)=>{e.shouldAntialias=t.payload},setShouldCropToBoundingBoxOnSave:(e,t)=>{e.shouldCropToBoundingBoxOnSave=t.payload},setColorPickerColor:(e,t)=>{e.colorPickerColor=t.payload},commitColorPickerColor:e=>{e.brushColor={...e.colorPickerColor,a:e.brushColor.a},e.tool="brush"},setMergedCanvas:(e,t)=>{e.pastLayerStates.push(Ge(e.layerState)),e.futureLayerStates=[],e.layerState.objects=[t.payload]},resetCanvasInteractionState:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMoveBoundingBoxKeyHeld=!1,e.isMoveStageKeyHeld=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1,e.isTransformingBoundingBox=!1},mouseLeftCanvas:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isTransformingBoundingBox=!1}},extraReducers:e=>{e.addCase(d_,(t,n)=>{const r=n.payload.data.batch_status;t.batchIds.includes(r.batch_id)&&r.in_progress===0&&r.pending===0&&(t.batchIds=t.batchIds.filter(i=>i!==r.batch_id))}),e.addCase(Xle,(t,n)=>{const r=n.payload;r&&(t.boundingBoxDimensions.height=Or(t.boundingBoxDimensions.width/r,64),t.scaledBoundingBoxDimensions.height=Or(t.scaledBoundingBoxDimensions.width/r,64))}),e.addMatcher(en.endpoints.clearQueue.matchFulfilled,t=>{t.batchIds=[]}),e.addMatcher(en.endpoints.cancelByBatchIds.matchFulfilled,(t,n)=>{t.batchIds=t.batchIds.filter(r=>!n.meta.arg.originalArgs.batch_ids.includes(r))})}}),{addEraseRect:bVe,addFillRect:_Ve,addImageToStagingArea:nue,addLine:SVe,addPointToCurrentLine:xVe,clearCanvasHistory:wVe,clearMask:CVe,commitColorPickerColor:EVe,commitStagingAreaImage:rue,discardStagedImages:iue,fitBoundingBoxToStage:TVe,mouseLeftCanvas:AVe,nextStagingAreaImage:kVe,prevStagingAreaImage:PVe,redo:IVe,resetCanvas:dT,resetCanvasInteractionState:MVe,resetCanvasView:RVe,setBoundingBoxCoordinates:OVe,setBoundingBoxDimensions:CI,setBoundingBoxPreviewFill:$Ve,setBoundingBoxScaleMethod:NVe,flipBoundingBoxAxes:FVe,setBrushColor:DVe,setBrushSize:LVe,setColorPickerColor:BVe,setCursorPosition:zVe,setInitialCanvasImage:wL,setIsDrawing:jVe,setIsMaskEnabled:VVe,setIsMouseOverBoundingBox:UVe,setIsMoveBoundingBoxKeyHeld:GVe,setIsMoveStageKeyHeld:HVe,setIsMovingBoundingBox:WVe,setIsMovingStage:qVe,setIsTransformingBoundingBox:KVe,setLayer:XVe,setMaskColor:QVe,setMergedCanvas:oue,setShouldAutoSave:YVe,setShouldCropToBoundingBoxOnSave:ZVe,setShouldDarkenOutsideBoundingBox:JVe,setShouldLockBoundingBox:eUe,setShouldPreserveMaskedArea:tUe,setShouldShowBoundingBox:nUe,setShouldShowBrush:rUe,setShouldShowBrushPreview:iUe,setShouldShowCanvasDebugInfo:oUe,setShouldShowCheckboardTransparency:sUe,setShouldShowGrid:aUe,setShouldShowIntermediates:lUe,setShouldShowStagingImage:cUe,setShouldShowStagingOutline:uUe,setShouldSnapToGrid:dUe,setStageCoordinates:fUe,setStageScale:hUe,setTool:pUe,toggleShouldLockBoundingBox:gUe,toggleTool:mUe,undo:yUe,setScaledBoundingBoxDimensions:vUe,setShouldRestrictStrokesToBox:bUe,stagingAreaInitialized:sue,setShouldAntialias:_Ue,canvasResized:SUe,canvasBatchIdAdded:aue,canvasBatchIdsReset:lue}=xL.actions,cue=xL.reducer,uue={isModalOpen:!1,imagesToChange:[]},CL=jt({name:"changeBoardModal",initialState:uue,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToChangeSelected:(e,t)=>{e.imagesToChange=t.payload},changeBoardReset:e=>{e.imagesToChange=[],e.isModalOpen=!1}}}),{isModalOpenChanged:xUe,imagesToChangeSelected:wUe,changeBoardReset:CUe}=CL.actions,due=CL.reducer,fue={imagesToDelete:[],isModalOpen:!1},EL=jt({name:"deleteImageModal",initialState:fue,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToDeleteSelected:(e,t)=>{e.imagesToDelete=t.payload},imageDeletionCanceled:e=>{e.imagesToDelete=[],e.isModalOpen=!1}}}),{isModalOpenChanged:fT,imagesToDeleteSelected:hue,imageDeletionCanceled:EUe}=EL.actions,pue=EL.reducer,hT={maxPrompts:100,combinatorial:!0,prompts:[],parsingError:void 0,isError:!1,isLoading:!1,seedBehaviour:"PER_ITERATION"},gue=hT,TL=jt({name:"dynamicPrompts",initialState:gue,reducers:{maxPromptsChanged:(e,t)=>{e.maxPrompts=t.payload},maxPromptsReset:e=>{e.maxPrompts=hT.maxPrompts},combinatorialToggled:e=>{e.combinatorial=!e.combinatorial},promptsChanged:(e,t)=>{e.prompts=t.payload},parsingErrorChanged:(e,t)=>{e.parsingError=t.payload},isErrorChanged:(e,t)=>{e.isError=t.payload},isLoadingChanged:(e,t)=>{e.isLoading=t.payload},seedBehaviourChanged:(e,t)=>{e.seedBehaviour=t.payload}}}),{maxPromptsChanged:mue,maxPromptsReset:yue,combinatorialToggled:vue,promptsChanged:bue,parsingErrorChanged:_ue,isErrorChanged:EI,isLoadingChanged:Yx,seedBehaviourChanged:TUe}=TL.actions,Sue=TL.reducer,Rn=["general"],Pr=["control","mask","user","other"],xue=100,K0=20,wue=(e,t)=>{const n=new Date(e),r=new Date(t);return n>r?1:n{if(!e)return!1;const n=_g.selectAll(e);if(n.length<=1)return!0;const r=[],i=[];for(let o=0;o=a}else{const o=i[i.length-1];if(!o)return!1;const s=new Date(t.created_at),a=new Date(o.created_at);return s>=a}},Fi=e=>Rn.includes(e.image_category)?Rn:Pr,Ot=jo({selectId:e=>e.image_name,sortComparer:(e,t)=>e.starred&&!t.starred?-1:!e.starred&&t.starred?1:wue(t.created_at,e.created_at)}),_g=Ot.getSelectors(),Vi=e=>`images/?${yp.stringify(e,{arrayFormat:"none"})}`,Qe=Lo.injectEndpoints({endpoints:e=>({listBoards:e.query({query:t=>({url:"boards/",params:t}),providesTags:t=>{const n=[{type:"Board",id:Ir}];return t&&n.push(...t.items.map(({board_id:r})=>({type:"Board",id:r}))),n}}),listAllBoards:e.query({query:()=>({url:"boards/",params:{all:!0}}),providesTags:t=>{const n=[{type:"Board",id:Ir}];return t&&n.push(...t.map(({board_id:r})=>({type:"Board",id:r}))),n}}),listAllImageNamesForBoard:e.query({query:t=>({url:`boards/${t}/image_names`}),providesTags:(t,n,r)=>[{type:"ImageNameList",id:r}],keepUnusedDataFor:0}),getBoardImagesTotal:e.query({query:t=>({url:Vi({board_id:t??"none",categories:Rn,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardImagesTotal",id:r??"none"}],transformResponse:t=>({total:t.total})}),getBoardAssetsTotal:e.query({query:t=>({url:Vi({board_id:t??"none",categories:Pr,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardAssetsTotal",id:r??"none"}],transformResponse:t=>({total:t.total})}),createBoard:e.mutation({query:t=>({url:"boards/",method:"POST",params:{board_name:t}}),invalidatesTags:[{type:"Board",id:Ir}]}),updateBoard:e.mutation({query:({board_id:t,changes:n})=>({url:`boards/${t}`,method:"PATCH",body:n}),invalidatesTags:(t,n,r)=>[{type:"Board",id:r.board_id}]})})}),{useListBoardsQuery:AUe,useListAllBoardsQuery:kUe,useGetBoardImagesTotalQuery:PUe,useGetBoardAssetsTotalQuery:IUe,useCreateBoardMutation:MUe,useUpdateBoardMutation:RUe,useListAllImageNamesForBoardQuery:OUe}=Qe;var AL={},y_={},v_={};Object.defineProperty(v_,"__esModule",{value:!0});v_.createLogMethods=void 0;var Cue=function(){return{debug:console.debug.bind(console),error:console.error.bind(console),fatal:console.error.bind(console),info:console.info.bind(console),trace:console.debug.bind(console),warn:console.warn.bind(console)}};v_.createLogMethods=Cue;var pT={},b_={};Object.defineProperty(b_,"__esModule",{value:!0});b_.boolean=void 0;const Eue=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return e.valueOf()===1;case"[object Boolean]":return e.valueOf();default:return!1}};b_.boolean=Eue;var __={};Object.defineProperty(__,"__esModule",{value:!0});__.isBooleanable=void 0;const Tue=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};__.isBooleanable=Tue;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isBooleanable=e.boolean=void 0;const t=b_;Object.defineProperty(e,"boolean",{enumerable:!0,get:function(){return t.boolean}});const n=__;Object.defineProperty(e,"isBooleanable",{enumerable:!0,get:function(){return n.isBooleanable}})})(pT);var TI=Object.prototype.toString,kL=function(t){var n=TI.call(t),r=n==="[object Arguments]";return r||(r=n!=="[object Array]"&&t!==null&&typeof t=="object"&&typeof t.length=="number"&&t.length>=0&&TI.call(t.callee)==="[object Function]"),r},Zx,AI;function Aue(){if(AI)return Zx;AI=1;var e;if(!Object.keys){var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=kL,i=Object.prototype.propertyIsEnumerable,o=!i.call({toString:null},"toString"),s=i.call(function(){},"prototype"),a=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],l=function(f){var h=f.constructor;return h&&h.prototype===f},c={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},u=function(){if(typeof window>"u")return!1;for(var f in window)try{if(!c["$"+f]&&t.call(window,f)&&window[f]!==null&&typeof window[f]=="object")try{l(window[f])}catch{return!0}}catch{return!0}return!1}(),d=function(f){if(typeof window>"u"||!u)return l(f);try{return l(f)}catch{return!1}};e=function(h){var p=h!==null&&typeof h=="object",m=n.call(h)==="[object Function]",_=r(h),v=p&&n.call(h)==="[object String]",y=[];if(!p&&!m&&!_)throw new TypeError("Object.keys called on a non-object");var g=s&&m;if(v&&h.length>0&&!t.call(h,0))for(var b=0;b0)for(var S=0;S"u"||!On?qe:On(Uint8Array),Nc={"%AggregateError%":typeof AggregateError>"u"?qe:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?qe:ArrayBuffer,"%ArrayIteratorPrototype%":Ou&&On?On([][Symbol.iterator]()):qe,"%AsyncFromSyncIteratorPrototype%":qe,"%AsyncFunction%":qu,"%AsyncGenerator%":qu,"%AsyncGeneratorFunction%":qu,"%AsyncIteratorPrototype%":qu,"%Atomics%":typeof Atomics>"u"?qe:Atomics,"%BigInt%":typeof BigInt>"u"?qe:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?qe:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?qe:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?qe:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?qe:Float32Array,"%Float64Array%":typeof Float64Array>"u"?qe:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?qe:FinalizationRegistry,"%Function%":IL,"%GeneratorFunction%":qu,"%Int8Array%":typeof Int8Array>"u"?qe:Int8Array,"%Int16Array%":typeof Int16Array>"u"?qe:Int16Array,"%Int32Array%":typeof Int32Array>"u"?qe:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Ou&&On?On(On([][Symbol.iterator]())):qe,"%JSON%":typeof JSON=="object"?JSON:qe,"%Map%":typeof Map>"u"?qe:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Ou||!On?qe:On(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?qe:Promise,"%Proxy%":typeof Proxy>"u"?qe:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?qe:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?qe:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Ou||!On?qe:On(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?qe:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Ou&&On?On(""[Symbol.iterator]()):qe,"%Symbol%":Ou?Symbol:qe,"%SyntaxError%":ff,"%ThrowTypeError%":Kue,"%TypedArray%":Que,"%TypeError%":$d,"%Uint8Array%":typeof Uint8Array>"u"?qe:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?qe:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?qe:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?qe:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?qe:WeakMap,"%WeakRef%":typeof WeakRef>"u"?qe:WeakRef,"%WeakSet%":typeof WeakSet>"u"?qe:WeakSet};if(On)try{null.error}catch(e){var Yue=On(On(e));Nc["%Error.prototype%"]=Yue}var Zue=function e(t){var n;if(t==="%AsyncFunction%")n=Jx("async function () {}");else if(t==="%GeneratorFunction%")n=Jx("function* () {}");else if(t==="%AsyncGeneratorFunction%")n=Jx("async function* () {}");else if(t==="%AsyncGenerator%"){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if(t==="%AsyncIteratorPrototype%"){var i=e("%AsyncGenerator%");i&&On&&(n=On(i.prototype))}return Nc[t]=n,n},OI={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},ym=PL,E1=que,Jue=ym.call(Function.call,Array.prototype.concat),ede=ym.call(Function.apply,Array.prototype.splice),$I=ym.call(Function.call,String.prototype.replace),T1=ym.call(Function.call,String.prototype.slice),tde=ym.call(Function.call,RegExp.prototype.exec),nde=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,rde=/\\(\\)?/g,ide=function(t){var n=T1(t,0,1),r=T1(t,-1);if(n==="%"&&r!=="%")throw new ff("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&n!=="%")throw new ff("invalid intrinsic syntax, expected opening `%`");var i=[];return $I(t,nde,function(o,s,a,l){i[i.length]=a?$I(l,rde,"$1"):s||o}),i},ode=function(t,n){var r=t,i;if(E1(OI,r)&&(i=OI[r],r="%"+i[0]+"%"),E1(Nc,r)){var o=Nc[r];if(o===qu&&(o=Zue(r)),typeof o>"u"&&!n)throw new $d("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:o}}throw new ff("intrinsic "+t+" does not exist!")},sde=function(t,n){if(typeof t!="string"||t.length===0)throw new $d("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof n!="boolean")throw new $d('"allowMissing" argument must be a boolean');if(tde(/^%?[^%]*%?$/,t)===null)throw new ff("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=ide(t),i=r.length>0?r[0]:"",o=ode("%"+i+"%",n),s=o.name,a=o.value,l=!1,c=o.alias;c&&(i=c[0],ede(r,Jue([0,1],c)));for(var u=1,d=!0;u=r.length){var m=$c(a,f);d=!!m,d&&"get"in m&&!("originalValue"in m.get)?a=m.get:a=a[f]}else d=E1(a,f),a=a[f];d&&!l&&(Nc[s]=a)}}return a},ade=sde,W5=ade("%Object.defineProperty%",!0),q5=function(){if(W5)try{return W5({},"a",{value:1}),!0}catch{return!1}return!1};q5.hasArrayLengthDefineBug=function(){if(!q5())return null;try{return W5([],"length",{value:1}).length!==1}catch{return!0}};var lde=q5,cde=Iue,ude=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",dde=Object.prototype.toString,fde=Array.prototype.concat,ML=Object.defineProperty,hde=function(e){return typeof e=="function"&&dde.call(e)==="[object Function]"},pde=lde(),RL=ML&&pde,gde=function(e,t,n,r){if(t in e){if(r===!0){if(e[t]===n)return}else if(!hde(r)||!r())return}RL?ML(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n},OL=function(e,t){var n=arguments.length>2?arguments[2]:{},r=cde(t);ude&&(r=fde.call(r,Object.getOwnPropertySymbols(t)));for(var i=0;i":return t>e;case":<":return t=":return t>=e;case":<=":return t<=e;default:throw new Error("Unimplemented comparison operator: ".concat(n))}};C_.testComparisonRange=Dde;var E_={};Object.defineProperty(E_,"__esModule",{value:!0});E_.testRange=void 0;var Lde=function(e,t){return typeof e=="number"?!(et.max||e===t.max&&!t.maxInclusive):!1};E_.testRange=Lde;(function(e){var t=He&&He.__assign||function(){return t=Object.assign||function(u){for(var d,f=1,h=arguments.length;f0?{path:l.path,query:new RegExp("("+l.keywords.map(function(c){return(0,jde.escapeRegexString)(c.trim())}).join("|")+")")}:{path:l.path}})};T_.highlight=Ude;var A_={},zL={exports:{}};(function(e){(function(t,n){e.exports?e.exports=n():t.nearley=n()})(He,function(){function t(c,u,d){return this.id=++t.highestId,this.name=c,this.symbols=u,this.postprocess=d,this}t.highestId=0,t.prototype.toString=function(c){var u=typeof c>"u"?this.symbols.map(l).join(" "):this.symbols.slice(0,c).map(l).join(" ")+" ● "+this.symbols.slice(c).map(l).join(" ");return this.name+" → "+u};function n(c,u,d,f){this.rule=c,this.dot=u,this.reference=d,this.data=[],this.wantedBy=f,this.isComplete=this.dot===c.symbols.length}n.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},n.prototype.nextState=function(c){var u=new n(this.rule,this.dot+1,this.reference,this.wantedBy);return u.left=this,u.right=c,u.isComplete&&(u.data=u.build(),u.right=void 0),u},n.prototype.build=function(){var c=[],u=this;do c.push(u.right.data),u=u.left;while(u.left);return c.reverse(),c},n.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,s.fail))};function r(c,u){this.grammar=c,this.index=u,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(c){for(var u=this.states,d=this.wants,f=this.completed,h=0;h0&&u.push(" ^ "+f+" more lines identical to this"),f=0,u.push(" "+m)),d=m}},s.prototype.getSymbolDisplay=function(c){return a(c)},s.prototype.buildFirstStateStack=function(c,u){if(u.indexOf(c)!==-1)return null;if(c.wantedBy.length===0)return[c];var d=c.wantedBy[0],f=[c].concat(u),h=this.buildFirstStateStack(d,f);return h===null?null:[c].concat(h)},s.prototype.save=function(){var c=this.table[this.current];return c.lexerState=this.lexerState,c},s.prototype.restore=function(c){var u=c.index;this.current=u,this.table[u]=c,this.table.splice(u+1),this.lexerState=c.lexerState,this.results=this.finish()},s.prototype.rewind=function(c){if(!this.options.keepHistory)throw new Error("set option `keepHistory` to enable rewinding");this.restore(this.table[c])},s.prototype.finish=function(){var c=[],u=this.grammar.start,d=this.table[this.table.length-1];return d.states.forEach(function(f){f.rule.name===u&&f.dot===f.rule.symbols.length&&f.reference===0&&f.data!==s.fail&&c.push(f)}),c.map(function(f){return f.data})};function a(c){var u=typeof c;if(u==="string")return c;if(u==="object"){if(c.literal)return JSON.stringify(c.literal);if(c instanceof RegExp)return"character matching "+c;if(c.type)return c.type+" token";if(c.test)return"token matching "+String(c.test);throw new Error("Unknown symbol type: "+c)}}function l(c){var u=typeof c;if(u==="string")return c;if(u==="object"){if(c.literal)return JSON.stringify(c.literal);if(c instanceof RegExp)return c.toString();if(c.type)return"%"+c.type;if(c.test)return"<"+String(c.test)+">";throw new Error("Unknown symbol type: "+c)}}return{Parser:s,Grammar:i,Rule:t}})})(zL);var Gde=zL.exports,tu={},jL={},Fl={};Fl.__esModule=void 0;Fl.__esModule=!0;var Hde=typeof Object.setPrototypeOf=="function",Wde=typeof Object.getPrototypeOf=="function",qde=typeof Object.defineProperty=="function",Kde=typeof Object.create=="function",Xde=typeof Object.prototype.hasOwnProperty=="function",Qde=function(t,n){Hde?Object.setPrototypeOf(t,n):t.__proto__=n};Fl.setPrototypeOf=Qde;var Yde=function(t){return Wde?Object.getPrototypeOf(t):t.__proto__||t.prototype};Fl.getPrototypeOf=Yde;var NI=!1,Zde=function e(t,n,r){if(qde&&!NI)try{Object.defineProperty(t,n,r)}catch{NI=!0,e(t,n,r)}else t[n]=r.value};Fl.defineProperty=Zde;var VL=function(t,n){return Xde?t.hasOwnProperty(t,n):t[n]===void 0};Fl.hasOwnProperty=VL;var Jde=function(t,n){if(Kde)return Object.create(t,n);var r=function(){};r.prototype=t;var i=new r;if(typeof n>"u")return i;if(typeof n=="null")throw new Error("PropertyDescriptors must not be null.");if(typeof n=="object")for(var o in n)VL(n,o)&&(i[o]=n[o].value);return i};Fl.objectCreate=Jde;(function(e){e.__esModule=void 0,e.__esModule=!0;var t=Fl,n=t.setPrototypeOf,r=t.getPrototypeOf,i=t.defineProperty,o=t.objectCreate,s=new Error().toString()==="[object Error]",a="";function l(c){var u=this.constructor,d=u.name||function(){var _=u.toString().match(/^function\s*([^\s(]+)/);return _===null?a||"Error":_[1]}(),f=d==="Error",h=f?a:d,p=Error.apply(this,arguments);if(n(p,r(this)),!(p instanceof u)||!(p instanceof l)){var p=this;Error.apply(this,arguments),i(p,"message",{configurable:!0,enumerable:!1,value:c,writable:!0})}if(i(p,"name",{configurable:!0,enumerable:!1,value:h,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(p,f?l:u),p.stack===void 0){var m=new Error(c);m.name=p.name,p.stack=m.stack}return s&&i(p,"toString",{configurable:!0,enumerable:!1,value:function(){return(this.name||"Error")+(typeof this.message>"u"?"":": "+this.message)},writable:!0}),p}a=l.name||"ExtendableError",l.prototype=o(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),e.ExtendableError=l,e.default=e.ExtendableError})(jL);var UL=He&&He.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},e(t,n)};return function(t,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(tu,"__esModule",{value:!0});tu.SyntaxError=tu.LiqeError=void 0;var efe=jL,GL=function(e){UL(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(efe.ExtendableError);tu.LiqeError=GL;var tfe=function(e){UL(t,e);function t(n,r,i,o){var s=e.call(this,n)||this;return s.message=n,s.offset=r,s.line=i,s.column=o,s}return t}(GL);tu.SyntaxError=tfe;var mT={},A1=He&&He.__assign||function(){return A1=Object.assign||function(e){for(var t,n=1,r=arguments.length;n"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$2"]},{name:"comparison_operator$subexpression$1$string$3",symbols:[{literal:":"},{literal:"<"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$3"]},{name:"comparison_operator$subexpression$1$string$4",symbols:[{literal:":"},{literal:">"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$4"]},{name:"comparison_operator$subexpression$1$string$5",symbols:[{literal:":"},{literal:"<"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$5"]},{name:"comparison_operator",symbols:["comparison_operator$subexpression$1"],postprocess:function(e,t){return{location:{start:t,end:t+e[0][0].length},type:"ComparisonOperator",operator:e[0][0]}}},{name:"regex",symbols:["regex_body","regex_flags"],postprocess:function(e){return e.join("")}},{name:"regex_body$ebnf$1",symbols:[]},{name:"regex_body$ebnf$1",symbols:["regex_body$ebnf$1","regex_body_char"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_body",symbols:[{literal:"/"},"regex_body$ebnf$1",{literal:"/"}],postprocess:function(e){return"/"+e[1].join("")+"/"}},{name:"regex_body_char",symbols:[/[^\\]/],postprocess:Os},{name:"regex_body_char",symbols:[{literal:"\\"},/[^\\]/],postprocess:function(e){return"\\"+e[1]}},{name:"regex_flags",symbols:[]},{name:"regex_flags$ebnf$1",symbols:[/[gmiyusd]/]},{name:"regex_flags$ebnf$1",symbols:["regex_flags$ebnf$1",/[gmiyusd]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_flags",symbols:["regex_flags$ebnf$1"],postprocess:function(e){return e[0].join("")}},{name:"unquoted_value$ebnf$1",symbols:[]},{name:"unquoted_value$ebnf$1",symbols:["unquoted_value$ebnf$1",/[a-zA-Z\.\-_*@#$]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"unquoted_value",symbols:[/[a-zA-Z_*@#$]/,"unquoted_value$ebnf$1"],postprocess:function(e){return e[0]+e[1].join("")}}],ParserStart:"main"};mT.default=nfe;var HL={},k_={},_m={};Object.defineProperty(_m,"__esModule",{value:!0});_m.isSafePath=void 0;var rfe=/^(\.(?:[_a-zA-Z][a-zA-Z\d_]*|\0|[1-9]\d*))+$/u,ife=function(e){return rfe.test(e)};_m.isSafePath=ife;Object.defineProperty(k_,"__esModule",{value:!0});k_.createGetValueFunctionBody=void 0;var ofe=_m,sfe=function(e){if(!(0,ofe.isSafePath)(e))throw new Error("Unsafe path.");var t="return subject"+e;return t.replace(/(\.(\d+))/g,".[$2]").replace(/\./g,"?.")};k_.createGetValueFunctionBody=sfe;(function(e){var t=He&&He.__assign||function(){return t=Object.assign||function(o){for(var s,a=1,l=arguments.length;a\d+) col (?\d+)/,ffe=function(e){if(e.trim()==="")return{location:{end:0,start:0},type:"EmptyExpression"};var t=new qL.default.Parser(ufe),n;try{n=t.feed(e).results}catch(o){if(typeof(o==null?void 0:o.message)=="string"&&typeof(o==null?void 0:o.offset)=="number"){var r=o.message.match(dfe);throw r?new afe.SyntaxError("Syntax error at line ".concat(r.groups.line," column ").concat(r.groups.column),o.offset,Number(r.groups.line),Number(r.groups.column)):o}throw o}if(n.length===0)throw new Error("Found no parsings.");if(n.length>1)throw new Error("Ambiguous results.");var i=(0,cfe.hydrateAst)(n[0]);return i};A_.parse=ffe;var P_={};Object.defineProperty(P_,"__esModule",{value:!0});P_.test=void 0;var hfe=vm,pfe=function(e,t){return(0,hfe.filter)(e,[t]).length===1};P_.test=pfe;var KL={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.serialize=void 0;var t=function(o,s){return s==="double"?'"'.concat(o,'"'):s==="single"?"'".concat(o,"'"):o},n=function(o){if(o.type==="LiteralExpression")return o.quoted&&typeof o.value=="string"?t(o.value,o.quotes):String(o.value);if(o.type==="RegexExpression")return String(o.value);if(o.type==="RangeExpression"){var s=o.range,a=s.min,l=s.max,c=s.minInclusive,u=s.maxInclusive;return"".concat(c?"[":"{").concat(a," TO ").concat(l).concat(u?"]":"}")}if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")},r=function(o){if(o.type!=="Tag")throw new Error("Expected a tag expression.");var s=o.field,a=o.expression,l=o.operator;if(s.type==="ImplicitField")return n(a);var c=s.quoted?t(s.name,s.quotes):s.name,u=" ".repeat(a.location.start-l.location.end);return c+l.operator+u+n(a)},i=function(o){if(o.type==="ParenthesizedExpression"){if(!("location"in o.expression))throw new Error("Expected location in expression.");if(!o.location.end)throw new Error("Expected location end.");var s=" ".repeat(o.expression.location.start-(o.location.start+1)),a=" ".repeat(o.location.end-o.expression.location.end-1);return"(".concat(s).concat((0,e.serialize)(o.expression)).concat(a,")")}if(o.type==="Tag")return r(o);if(o.type==="LogicalExpression"){var l="";return o.operator.type==="BooleanOperator"?(l+=" ".repeat(o.operator.location.start-o.left.location.end),l+=o.operator.operator,l+=" ".repeat(o.right.location.start-o.operator.location.end)):l=" ".repeat(o.right.location.start-o.left.location.end),"".concat((0,e.serialize)(o.left)).concat(l).concat((0,e.serialize)(o.right))}if(o.type==="UnaryOperator")return(o.operator==="NOT"?"NOT ":o.operator)+(0,e.serialize)(o.operand);if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")};e.serialize=i})(KL);var I_={};Object.defineProperty(I_,"__esModule",{value:!0});I_.isSafeUnquotedExpression=void 0;var gfe=function(e){return/^[#$*@A-Z_a-z][#$*.@A-Z_a-z-]*$/.test(e)};I_.isSafeUnquotedExpression=gfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isSafeUnquotedExpression=e.serialize=e.SyntaxError=e.LiqeError=e.test=e.parse=e.highlight=e.filter=void 0;var t=vm;Object.defineProperty(e,"filter",{enumerable:!0,get:function(){return t.filter}});var n=T_;Object.defineProperty(e,"highlight",{enumerable:!0,get:function(){return n.highlight}});var r=A_;Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return r.parse}});var i=P_;Object.defineProperty(e,"test",{enumerable:!0,get:function(){return i.test}});var o=tu;Object.defineProperty(e,"LiqeError",{enumerable:!0,get:function(){return o.LiqeError}}),Object.defineProperty(e,"SyntaxError",{enumerable:!0,get:function(){return o.SyntaxError}});var s=KL;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return s.serialize}});var a=I_;Object.defineProperty(e,"isSafeUnquotedExpression",{enumerable:!0,get:function(){return a.isSafeUnquotedExpression}})})(BL);var Sm={},XL={},nu={};Object.defineProperty(nu,"__esModule",{value:!0});nu.ROARR_LOG_FORMAT_VERSION=nu.ROARR_VERSION=void 0;nu.ROARR_VERSION="5.0.0";nu.ROARR_LOG_FORMAT_VERSION="2.0.0";var Ff={};Object.defineProperty(Ff,"__esModule",{value:!0});Ff.logLevels=void 0;Ff.logLevels={debug:20,error:50,fatal:60,info:30,trace:10,warn:40};var QL={},M_={};Object.defineProperty(M_,"__esModule",{value:!0});M_.hasOwnProperty=void 0;const mfe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);M_.hasOwnProperty=mfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasOwnProperty=void 0;var t=M_;Object.defineProperty(e,"hasOwnProperty",{enumerable:!0,get:function(){return t.hasOwnProperty}})})(QL);var R_={};Object.defineProperty(R_,"__esModule",{value:!0});R_.isBrowser=void 0;const yfe=()=>typeof window<"u";R_.isBrowser=yfe;var O_={};Object.defineProperty(O_,"__esModule",{value:!0});O_.isTruthy=void 0;const vfe=e=>["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());O_.isTruthy=vfe;var YL={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createMockLogger=void 0;const t=Ff,n=(i,o)=>(s,a,l,c,u,d,f,h,p,m)=>{i.child({logLevel:o})(s,a,l,c,u,d,f,h,p,m)},r=(i,o)=>{const s=()=>{};return s.adopt=async a=>a(),s.child=()=>(0,e.createMockLogger)(i,o),s.getContext=()=>({}),s.debug=n(s,t.logLevels.debug),s.debugOnce=n(s,t.logLevels.debug),s.error=n(s,t.logLevels.error),s.errorOnce=n(s,t.logLevels.error),s.fatal=n(s,t.logLevels.fatal),s.fatalOnce=n(s,t.logLevels.fatal),s.info=n(s,t.logLevels.info),s.infoOnce=n(s,t.logLevels.info),s.trace=n(s,t.logLevels.trace),s.traceOnce=n(s,t.logLevels.trace),s.warn=n(s,t.logLevels.warn),s.warnOnce=n(s,t.logLevels.warn),s};e.createMockLogger=r})(YL);var ZL={},$_={},N_={};Object.defineProperty(N_,"__esModule",{value:!0});N_.tokenize=void 0;const bfe=/(?:%(?([+0-]|-\+))?(?\d+)?(?\d+\$)?(?\.\d+)?(?[%BCESb-iosux]))|(\\%)/g,_fe=e=>{let t;const n=[];let r=0,i=0,o=null;for(;(t=bfe.exec(e))!==null;){t.index>i&&(o={literal:e.slice(i,t.index),type:"literal"},n.push(o));const s=t[0];i=t.index+s.length,s==="\\%"||s==="%%"?o&&o.type==="literal"?o.literal+="%":(o={literal:"%",type:"literal"},n.push(o)):t.groups&&(o={conversion:t.groups.conversion,flag:t.groups.flag||null,placeholder:s,position:t.groups.position?Number.parseInt(t.groups.position,10)-1:r++,precision:t.groups.precision?Number.parseInt(t.groups.precision.slice(1),10):null,type:"placeholder",width:t.groups.width?Number.parseInt(t.groups.width,10):null},n.push(o))}return i<=e.length-1&&(o&&o.type==="literal"?o.literal+=e.slice(i):n.push({literal:e.slice(i),type:"literal"})),n};N_.tokenize=_fe;Object.defineProperty($_,"__esModule",{value:!0});$_.createPrintf=void 0;const FI=pT,Sfe=N_,xfe=(e,t)=>t.placeholder,wfe=e=>{var t;const n=(o,s,a)=>a==="-"?o.padEnd(s," "):a==="-+"?((Number(o)>=0?"+":"")+o).padEnd(s," "):a==="+"?((Number(o)>=0?"+":"")+o).padStart(s," "):a==="0"?o.padStart(s,"0"):o.padStart(s," "),r=(t=e==null?void 0:e.formatUnboundExpression)!==null&&t!==void 0?t:xfe,i={};return(o,...s)=>{let a=i[o];a||(a=i[o]=Sfe.tokenize(o));let l="";for(const c of a)if(c.type==="literal")l+=c.literal;else{let u=s[c.position];if(u===void 0)l+=r(o,c,s);else if(c.conversion==="b")l+=FI.boolean(u)?"true":"false";else if(c.conversion==="B")l+=FI.boolean(u)?"TRUE":"FALSE";else if(c.conversion==="c")l+=u;else if(c.conversion==="C")l+=String(u).toUpperCase();else if(c.conversion==="i"||c.conversion==="d")u=String(Math.trunc(u)),c.width!==null&&(u=n(u,c.width,c.flag)),l+=u;else if(c.conversion==="e")l+=Number(u).toExponential();else if(c.conversion==="E")l+=Number(u).toExponential().toUpperCase();else if(c.conversion==="f")c.precision!==null&&(u=Number(u).toFixed(c.precision)),c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else if(c.conversion==="o")l+=(Number.parseInt(String(u),10)>>>0).toString(8);else if(c.conversion==="s")c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else if(c.conversion==="S")c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=String(u).toUpperCase();else if(c.conversion==="u")l+=Number.parseInt(String(u),10)>>>0;else if(c.conversion==="x")u=(Number.parseInt(String(u),10)>>>0).toString(16),c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else throw new Error("Unknown format specifier.")}return l}};$_.createPrintf=wfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.printf=e.createPrintf=void 0;const t=$_;Object.defineProperty(e,"createPrintf",{enumerable:!0,get:function(){return t.createPrintf}}),e.printf=t.createPrintf()})(ZL);var K5={exports:{}};(function(e,t){const{hasOwnProperty:n}=Object.prototype,r=_();r.configure=_,r.stringify=r,r.default=r,t.stringify=r,t.configure=_,e.exports=r;const i=/[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/;function o(v){return v.length<5e3&&!i.test(v)?`"${v}"`:JSON.stringify(v)}function s(v){if(v.length>200)return v.sort();for(let y=1;yg;)v[b]=v[b-1],b--;v[b]=g}return v}const a=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function l(v){return a.call(v)!==void 0&&v.length!==0}function c(v,y,g){v.length= 1`)}return g===void 0?1/0:g}function h(v){return v===1?"1 item":`${v} items`}function p(v){const y=new Set;for(const g of v)(typeof g=="string"||typeof g=="number")&&y.add(String(g));return y}function m(v){if(n.call(v,"strict")){const y=v.strict;if(typeof y!="boolean")throw new TypeError('The "strict" argument must be of type boolean');if(y)return g=>{let b=`Object can not safely be stringified. Received type ${typeof g}`;throw typeof g!="function"&&(b+=` (${g.toString()})`),new Error(b)}}}function _(v){v={...v};const y=m(v);y&&(v.bigint===void 0&&(v.bigint=!1),"circularValue"in v||(v.circularValue=Error));const g=u(v),b=d(v,"bigint"),S=d(v,"deterministic"),w=f(v,"maximumDepth"),C=f(v,"maximumBreadth");function x(M,E,P,O,F,$){let D=E[M];switch(typeof D=="object"&&D!==null&&typeof D.toJSON=="function"&&(D=D.toJSON(M)),D=O.call(E,M,D),typeof D){case"string":return o(D);case"object":{if(D===null)return"null";if(P.indexOf(D)!==-1)return g;let N="",z=",";const V=$;if(Array.isArray(D)){if(D.length===0)return"[]";if(wC){const be=D.length-C-1;N+=`${z}"... ${h(be)} not stringified"`}return F!==""&&(N+=` -${V}`),P.pop(),`[${N}]`}let H=Object.keys(D);const X=H.length;if(X===0)return"{}";if(wC){const q=X-C;N+=`${ee}"...":${te}"${h(q)} not stringified"`,ee=z}return F!==""&&ee.length>1&&(N=` -${$}${N} -${V}`),P.pop(),`{${N}}`}case"number":return isFinite(D)?String(D):y?y(D):"null";case"boolean":return D===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(D);default:return y?y(D):void 0}}function k(M,E,P,O,F,$){switch(typeof E=="object"&&E!==null&&typeof E.toJSON=="function"&&(E=E.toJSON(M)),typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(P.indexOf(E)!==-1)return g;const D=$;let N="",z=",";if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const j=E.length-C-1;N+=`${z}"... ${h(j)} not stringified"`}return F!==""&&(N+=` -${D}`),P.pop(),`[${N}]`}P.push(E);let V="";F!==""&&($+=F,z=`, -${$}`,V=" ");let H="";for(const X of O){const te=k(X,E[X],P,O,F,$);te!==void 0&&(N+=`${H}${o(X)}:${V}${te}`,H=z)}return F!==""&&H.length>1&&(N=` -${$}${N} -${D}`),P.pop(),`{${N}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function A(M,E,P,O,F){switch(typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(typeof E.toJSON=="function"){if(E=E.toJSON(M),typeof E!="object")return A(M,E,P,O,F);if(E===null)return"null"}if(P.indexOf(E)!==-1)return g;const $=F;if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const oe=E.length-C-1;te+=`${ee}"... ${h(oe)} not stringified"`}return te+=` -${$}`,P.pop(),`[${te}]`}let D=Object.keys(E);const N=D.length;if(N===0)return"{}";if(wC){const te=N-C;V+=`${H}"...": "${h(te)} not stringified"`,H=z}return H!==""&&(V=` -${F}${V} -${$}`),P.pop(),`{${V}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function R(M,E,P){switch(typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(typeof E.toJSON=="function"){if(E=E.toJSON(M),typeof E!="object")return R(M,E,P);if(E===null)return"null"}if(P.indexOf(E)!==-1)return g;let O="";if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const X=E.length-C-1;O+=`,"... ${h(X)} not stringified"`}return P.pop(),`[${O}]`}let F=Object.keys(E);const $=F.length;if($===0)return"{}";if(wC){const z=$-C;O+=`${D}"...":"${h(z)} not stringified"`}return P.pop(),`{${O}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function L(M,E,P){if(arguments.length>1){let O="";if(typeof P=="number"?O=" ".repeat(Math.min(P,10)):typeof P=="string"&&(O=P.slice(0,10)),E!=null){if(typeof E=="function")return x("",{"":M},[],E,O,"");if(Array.isArray(E))return k("",M,[],p(E),O,"")}if(O.length!==0)return A("",M,[],O,"")}return R("",M,[])}return L}})(K5,K5.exports);var JL=K5.exports;(function(e){var t=He&&He.__importDefault||function(b){return b&&b.__esModule?b:{default:b}};Object.defineProperty(e,"__esModule",{value:!0}),e.createLogger=void 0;const n=nu,r=Ff,i=QL,o=R_,s=O_,a=YL,l=ZL,c=t(JL);let u=!1;const d=()=>globalThis.ROARR,f=()=>({messageContext:{},transforms:[]}),h=()=>{const b=d().asyncLocalStorage;if(!b)throw new Error("AsyncLocalContext is unavailable.");const S=b.getStore();return S||f()},p=()=>!!d().asyncLocalStorage,m=()=>{if(p()){const b=h();return(0,i.hasOwnProperty)(b,"sequenceRoot")&&(0,i.hasOwnProperty)(b,"sequence")&&typeof b.sequence=="number"?String(b.sequenceRoot)+"."+String(b.sequence++):String(d().sequence++)}return String(d().sequence++)},_=(b,S)=>(w,C,x,k,A,R,L,M,E,P)=>{b.child({logLevel:S})(w,C,x,k,A,R,L,M,E,P)},v=1e3,y=(b,S)=>(w,C,x,k,A,R,L,M,E,P)=>{const O=(0,c.default)({a:w,b:C,c:x,d:k,e:A,f:R,g:L,h:M,i:E,j:P,logLevel:S});if(!O)throw new Error("Expected key to be a string");const F=d().onceLog;F.has(O)||(F.add(O),F.size>v&&F.clear(),b.child({logLevel:S})(w,C,x,k,A,R,L,M,E,P))},g=(b,S={},w=[])=>{var C;if(!(0,o.isBrowser)()&&typeof process<"u"&&!(0,s.isTruthy)((C={}.ROARR_LOG)!==null&&C!==void 0?C:""))return(0,a.createMockLogger)(b,S);const x=(k,A,R,L,M,E,P,O,F,$)=>{const D=Date.now(),N=m();let z;p()?z=h():z=f();let V,H;if(typeof k=="string"?V={...z.messageContext,...S}:V={...z.messageContext,...S,...k},typeof k=="string"&&A===void 0)H=k;else if(typeof k=="string"){if(!k.includes("%"))throw new Error("When a string parameter is followed by other arguments, then it is assumed that you are attempting to format a message using printf syntax. You either forgot to add printf bindings or if you meant to add context to the log message, pass them in an object as the first parameter.");H=(0,l.printf)(k,A,R,L,M,E,P,O,F,$)}else{let te=A;if(typeof A!="string")if(A===void 0)te="";else throw new TypeError("Message must be a string. Received "+typeof A+".");H=(0,l.printf)(te,R,L,M,E,P,O,F,$)}let X={context:V,message:H,sequence:N,time:D,version:n.ROARR_LOG_FORMAT_VERSION};for(const te of[...z.transforms,...w])if(X=te(X),typeof X!="object"||X===null)throw new Error("Message transform function must return a message object.");b(X)};return x.child=k=>{let A;return p()?A=h():A=f(),typeof k=="function"?(0,e.createLogger)(b,{...A.messageContext,...S,...k},[k,...w]):(0,e.createLogger)(b,{...A.messageContext,...S,...k},w)},x.getContext=()=>{let k;return p()?k=h():k=f(),{...k.messageContext,...S}},x.adopt=async(k,A)=>{if(!p())return u===!1&&(u=!0,b({context:{logLevel:r.logLevels.warn,package:"roarr"},message:"async_hooks are unavailable; Roarr.adopt will not function as expected",sequence:m(),time:Date.now(),version:n.ROARR_LOG_FORMAT_VERSION})),k();const R=h();let L;(0,i.hasOwnProperty)(R,"sequenceRoot")&&(0,i.hasOwnProperty)(R,"sequence")&&typeof R.sequence=="number"?L=R.sequenceRoot+"."+String(R.sequence++):L=String(d().sequence++);let M={...R.messageContext};const E=[...R.transforms];typeof A=="function"?E.push(A):M={...M,...A};const P=d().asyncLocalStorage;if(!P)throw new Error("Async local context unavailable.");return P.run({messageContext:M,sequence:0,sequenceRoot:L,transforms:E},()=>k())},x.debug=_(x,r.logLevels.debug),x.debugOnce=y(x,r.logLevels.debug),x.error=_(x,r.logLevels.error),x.errorOnce=y(x,r.logLevels.error),x.fatal=_(x,r.logLevels.fatal),x.fatalOnce=y(x,r.logLevels.fatal),x.info=_(x,r.logLevels.info),x.infoOnce=y(x,r.logLevels.info),x.trace=_(x,r.logLevels.trace),x.traceOnce=y(x,r.logLevels.trace),x.warn=_(x,r.logLevels.warn),x.warnOnce=y(x,r.logLevels.warn),x};e.createLogger=g})(XL);var F_={},Cfe=function(t,n){for(var r=t.split("."),i=n.split("."),o=0;o<3;o++){var s=Number(r[o]),a=Number(i[o]);if(s>a)return 1;if(a>s)return-1;if(!isNaN(s)&&isNaN(a))return 1;if(isNaN(s)&&!isNaN(a))return-1}return 0},Efe=He&&He.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(F_,"__esModule",{value:!0});F_.createRoarrInitialGlobalStateBrowser=void 0;const DI=nu,LI=Efe(Cfe),Tfe=e=>{const t=(e.versions||[]).concat();return t.length>1&&t.sort(LI.default),t.includes(DI.ROARR_VERSION)||t.push(DI.ROARR_VERSION),t.sort(LI.default),{sequence:0,...e,versions:t}};F_.createRoarrInitialGlobalStateBrowser=Tfe;var D_={};Object.defineProperty(D_,"__esModule",{value:!0});D_.stringify=void 0;const Afe=JL,kfe=(0,Afe.configure)({deterministic:!1,maximumBreadth:10,maximumDepth:10,strict:!1}),Pfe=e=>{var t;try{return(t=kfe(e))!==null&&t!==void 0?t:""}catch(n){throw console.error("[roarr] could not serialize value",e),n}};D_.stringify=Pfe;var L_={};Object.defineProperty(L_,"__esModule",{value:!0});L_.getLogLevelName=void 0;const Ife=e=>e<=10?"trace":e<=20?"debug":e<=30?"info":e<=40?"warn":e<=50?"error":"fatal";L_.getLogLevelName=Ife;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.getLogLevelName=e.logLevels=e.Roarr=e.ROARR=void 0;const t=XL,n=F_,r=D_,i=(0,n.createRoarrInitialGlobalStateBrowser)(globalThis.ROARR||{});e.ROARR=i,globalThis.ROARR=i;const o=c=>(0,r.stringify)(c),s=(0,t.createLogger)(c=>{var u;i.write&&i.write(((u=i.serializeMessage)!==null&&u!==void 0?u:o)(c))});e.Roarr=s;var a=Ff;Object.defineProperty(e,"logLevels",{enumerable:!0,get:function(){return a.logLevels}});var l=L_;Object.defineProperty(e,"getLogLevelName",{enumerable:!0,get:function(){return l.getLogLevelName}})})(Sm);var BI=He&&He.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i0?m("%c ".concat(p," %c").concat(f?" [".concat(String(f),"]:"):"","%c ").concat(c.message," %O"),v,y,g,h):m("%c ".concat(p," %c").concat(f?" [".concat(String(f),"]:"):"","%c ").concat(c.message),v,y,g)}}:function(l){var c=JSON.parse(l),u=c.context,d=u.logLevel,f=u.namespace,h=BI(u,["logLevel","namespace"]);if(!(a&&!(0,X5.test)(a,c))){var p=(0,zI.getLogLevelName)(Number(d)),m=s[p];Object.keys(h).length>0?m("".concat(p," ").concat(f?" [".concat(String(f),"]:"):""," ").concat(c.message),h):m("".concat(p," ").concat(f?" [".concat(String(f),"]:"):""," ").concat(c.message))}}};y_.createLogWriter=Lfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createLogWriter=void 0;var t=y_;Object.defineProperty(e,"createLogWriter",{enumerable:!0,get:function(){return t.createLogWriter}})})(AL);Sm.ROARR.write=AL.createLogWriter();const eB={};Sm.Roarr.child(eB);const B_=to(Sm.Roarr.child(eB)),ue=e=>B_.get().child({namespace:e}),$Ue=["trace","debug","info","warn","error","fatal"],NUe={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},tB=T.object({lora:eT.deepPartial(),weight:T.number()}),Bfe=xle.deepPartial(),zfe=wle.deepPartial(),jfe=Cle.deepPartial(),Vfe=KD.deepPartial(),Ufe=T.union([HD.deepPartial(),WD.deepPartial()]),Gfe=J4.deepPartial(),Hfe=T.object({app_version:T.string().nullish().catch(null),generation_mode:T.string().nullish().catch(null),created_by:T.string().nullish().catch(null),positive_prompt:T.string().nullish().catch(null),negative_prompt:T.string().nullish().catch(null),width:T.number().int().nullish().catch(null),height:T.number().int().nullish().catch(null),seed:T.number().int().nullish().catch(null),rand_device:T.string().nullish().catch(null),cfg_scale:T.number().nullish().catch(null),cfg_rescale_multiplier:T.number().nullish().catch(null),steps:T.number().int().nullish().catch(null),scheduler:T.string().nullish().catch(null),clip_skip:T.number().int().nullish().catch(null),model:Ufe.nullish().catch(null),controlnets:T.array(Bfe).nullish().catch(null),ipAdapters:T.array(zfe).nullish().catch(null),t2iAdapters:T.array(jfe).nullish().catch(null),loras:T.array(tB).nullish().catch(null),vae:Gfe.nullish().catch(null),strength:T.number().nullish().catch(null),hrf_enabled:T.boolean().nullish().catch(null),hrf_strength:T.number().nullish().catch(null),hrf_method:T.string().nullish().catch(null),init_image:T.string().nullish().catch(null),positive_style_prompt:T.string().nullish().catch(null),negative_style_prompt:T.string().nullish().catch(null),refiner_model:Vfe.nullish().catch(null),refiner_cfg_scale:T.number().nullish().catch(null),refiner_steps:T.number().int().nullish().catch(null),refiner_scheduler:T.string().nullish().catch(null),refiner_positive_aesthetic_score:T.number().nullish().catch(null),refiner_negative_aesthetic_score:T.number().nullish().catch(null),refiner_start:T.number().nullish().catch(null)}).passthrough(),ce=Lo.injectEndpoints({endpoints:e=>({listImages:e.query({query:t=>({url:Vi(t),method:"GET"}),providesTags:(t,n,{board_id:r,categories:i})=>[{type:"ImageList",id:Vi({board_id:r,categories:i})}],serializeQueryArgs:({queryArgs:t})=>{const{board_id:n,categories:r}=t;return Vi({board_id:n,categories:r})},transformResponse(t){const{items:n}=t;return Ot.addMany(Ot.getInitialState(),n)},merge:(t,n)=>{Ot.addMany(t,_g.selectAll(n))},forceRefetch({currentArg:t,previousArg:n}){return(t==null?void 0:t.offset)!==(n==null?void 0:n.offset)},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;_g.selectAll(i).forEach(o=>{n(ce.util.upsertQueryData("getImageDTO",o.image_name,o))})}catch{}},keepUnusedDataFor:86400}),getIntermediatesCount:e.query({query:()=>({url:"images/intermediates"}),providesTags:["IntermediatesCount"]}),clearIntermediates:e.mutation({query:()=>({url:"images/intermediates",method:"DELETE"}),invalidatesTags:["IntermediatesCount"]}),getImageDTO:e.query({query:t=>({url:`images/i/${t}`}),providesTags:(t,n,r)=>[{type:"Image",id:r}],keepUnusedDataFor:86400}),getImageMetadata:e.query({query:t=>({url:`images/i/${t}/metadata`}),providesTags:(t,n,r)=>[{type:"ImageMetadata",id:r}],transformResponse:t=>{if(t){const n=Hfe.safeParse(t);if(n.success)return n.data;ue("images").warn("Problem parsing metadata")}},keepUnusedDataFor:86400}),getImageWorkflow:e.query({query:t=>({url:`images/i/${t}/workflow`}),providesTags:(t,n,r)=>[{type:"ImageWorkflow",id:r}],keepUnusedDataFor:86400}),deleteImage:e.mutation({query:({image_name:t})=>({url:`images/i/${t}`,method:"DELETE"}),async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){const{image_name:i,board_id:o}=t,s=Pr.includes(t.image_category),a={board_id:o??"none",categories:Fi(t)},l=[];l.push(n(ce.util.updateQueryData("listImages",a,c=>{Ot.removeOne(c,i)}))),l.push(n(Qe.util.updateQueryData(s?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",c=>{c.total=Math.max(c.total-1,0)})));try{await r}catch{l.forEach(c=>{c.undo()})}}}),deleteImages:e.mutation({query:({imageDTOs:t})=>({url:"images/delete",method:"POST",body:{image_names:t.map(r=>r.image_name)}}),async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;i.deleted_images.length{const a=o[s];if(a){const l={board_id:a.board_id??"none",categories:Fi(a)};n(ce.util.updateQueryData("listImages",l,u=>{Ot.removeOne(u,s)}));const c=Pr.includes(a.image_category);n(Qe.util.updateQueryData(c?"getBoardAssetsTotal":"getBoardImagesTotal",a.board_id??"none",u=>{u.total=Math.max(u.total-1,0)}))}})}catch{}}}),changeImageIsIntermediate:e.mutation({query:({imageDTO:t,is_intermediate:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{is_intermediate:n}}),async onQueryStarted({imageDTO:t,is_intermediate:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[];s.push(r(ce.util.updateQueryData("getImageDTO",t.image_name,c=>{Object.assign(c,{is_intermediate:n})})));const a=Fi(t),l=Pr.includes(t.image_category);if(n)s.push(r(ce.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:a},c=>{Ot.removeOne(c,t.image_name)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",c=>{c.total=Math.max(c.total-1,0)})));else{s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",p=>{p.total+=1})));const c={board_id:t.board_id??"none",categories:a},u=ce.endpoints.listImages.select(c)(o()),{data:d}=Rn.includes(t.image_category)?Qe.endpoints.getBoardImagesTotal.select(t.board_id??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(o()),f=u.data&&u.data.ids.length>=((d==null?void 0:d.total)??0),h=Xl(u.data,t);(f||h)&&s.push(r(ce.util.updateQueryData("listImages",c,p=>{Ot.upsertOne(p,t)})))}try{await i}catch{s.forEach(c=>c.undo())}}}),changeImageSessionId:e.mutation({query:({imageDTO:t,session_id:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{session_id:n}}),async onQueryStarted({imageDTO:t,session_id:n},{dispatch:r,queryFulfilled:i}){const o=[];o.push(r(ce.util.updateQueryData("getImageDTO",t.image_name,s=>{Object.assign(s,{session_id:n})})));try{await i}catch{o.forEach(s=>s.undo())}}}),starImages:e.mutation({query:({imageDTOs:t})=>({url:"images/star",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{if(r[0]){const i=Fi(r[0]),o=r[0].board_id??void 0;return[{type:"ImageList",id:Vi({board_id:o,categories:i})},{type:"Board",id:o}]}return[]},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,s=t.filter(c=>o.updated_image_names.includes(c.image_name));if(!s[0])return;const a=Fi(s[0]),l=s[0].board_id;s.forEach(c=>{const{image_name:u}=c;n(ce.util.updateQueryData("getImageDTO",u,_=>{_.starred=!0}));const d={board_id:l??"none",categories:a},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(l??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,c):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...c,starred:!0})}))})}catch{}}}),unstarImages:e.mutation({query:({imageDTOs:t})=>({url:"images/unstar",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{if(r[0]){const i=Fi(r[0]),o=r[0].board_id??void 0;return[{type:"ImageList",id:Vi({board_id:o,categories:i})},{type:"Board",id:o}]}return[]},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,s=t.filter(c=>o.updated_image_names.includes(c.image_name));if(!s[0])return;const a=Fi(s[0]),l=s[0].board_id;s.forEach(c=>{const{image_name:u}=c;n(ce.util.updateQueryData("getImageDTO",u,_=>{_.starred=!1}));const d={board_id:l??"none",categories:a},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(l??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,c):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...c,starred:!1})}))})}catch{}}}),uploadImage:e.mutation({query:({file:t,image_category:n,is_intermediate:r,session_id:i,board_id:o,crop_visible:s})=>{const a=new FormData;return a.append("file",t),{url:"images/upload",method:"POST",body:a,params:{image_category:n,is_intermediate:r,session_id:i,board_id:o==="none"?void 0:o,crop_visible:s}}},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;if(i.is_intermediate)return;n(ce.util.upsertQueryData("getImageDTO",i.image_name,i));const o=Fi(i);n(ce.util.updateQueryData("listImages",{board_id:i.board_id??"none",categories:o},s=>{Ot.addOne(s,i)})),n(Qe.util.updateQueryData("getBoardAssetsTotal",i.board_id??"none",s=>{s.total+=1}))}catch{}}}),deleteBoard:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE"}),invalidatesTags:()=>[{type:"Board",id:Ir},{type:"ImageList",id:Vi({board_id:"none",categories:Rn})},{type:"ImageList",id:Vi({board_id:"none",categories:Pr})}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r,{deleted_board_images:o}=i;o.forEach(l=>{n(ce.util.updateQueryData("getImageDTO",l,c=>{c.board_id=void 0}))}),n(Qe.util.updateQueryData("getBoardAssetsTotal",t,l=>{l.total=0})),n(Qe.util.updateQueryData("getBoardImagesTotal",t,l=>{l.total=0}));const s=[{categories:Rn},{categories:Pr}],a=o.map(l=>({id:l,changes:{board_id:void 0}}));s.forEach(l=>{n(ce.util.updateQueryData("listImages",l,c=>{Ot.updateMany(c,a)}))})}catch{}}}),deleteBoardAndImages:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE",params:{include_images:!0}}),invalidatesTags:()=>[{type:"Board",id:Ir},{type:"ImageList",id:Vi({board_id:"none",categories:Rn})},{type:"ImageList",id:Vi({board_id:"none",categories:Pr})}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r,{deleted_images:o}=i;[{categories:Rn},{categories:Pr}].forEach(a=>{n(ce.util.updateQueryData("listImages",a,l=>{Ot.removeMany(l,o)}))}),n(Qe.util.updateQueryData("getBoardAssetsTotal",t,a=>{a.total=0})),n(Qe.util.updateQueryData("getBoardImagesTotal",t,a=>{a.total=0}))}catch{}}}),addImageToBoard:e.mutation({query:({board_id:t,imageDTO:n})=>{const{image_name:r}=n;return{url:"board_images/",method:"POST",body:{board_id:t,image_name:r}}},invalidatesTags:(t,n,{board_id:r})=>[{type:"Board",id:r}],async onQueryStarted({board_id:t,imageDTO:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[],a=Fi(n),l=Pr.includes(n.image_category);if(s.push(r(ce.util.updateQueryData("getImageDTO",n.image_name,c=>{c.board_id=t}))),!n.is_intermediate){s.push(r(ce.util.updateQueryData("listImages",{board_id:n.board_id??"none",categories:a},p=>{Ot.removeOne(p,n.image_name)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",n.board_id??"none",p=>{p.total=Math.max(p.total-1,0)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t??"none",p=>{p.total+=1})));const c={board_id:t??"none",categories:a},u=ce.endpoints.listImages.select(c)(o()),{data:d}=Rn.includes(n.image_category)?Qe.endpoints.getBoardImagesTotal.select(n.board_id??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(n.board_id??"none")(o()),f=u.data&&u.data.ids.length>=((d==null?void 0:d.total)??0),h=Xl(u.data,n);(f||h)&&s.push(r(ce.util.updateQueryData("listImages",c,p=>{Ot.addOne(p,n)})))}try{await i}catch{s.forEach(c=>c.undo())}}}),removeImageFromBoard:e.mutation({query:({imageDTO:t})=>{const{image_name:n}=t;return{url:"board_images/",method:"DELETE",body:{image_name:n}}},invalidatesTags:(t,n,{imageDTO:r})=>{const{board_id:i}=r;return[{type:"Board",id:i??"none"}]},async onQueryStarted({imageDTO:t},{dispatch:n,queryFulfilled:r,getState:i}){const o=Fi(t),s=[],a=Pr.includes(t.image_category);s.push(n(ce.util.updateQueryData("getImageDTO",t.image_name,h=>{h.board_id=void 0}))),s.push(n(ce.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:o},h=>{Ot.removeOne(h,t.image_name)}))),s.push(n(Qe.util.updateQueryData(a?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",h=>{h.total=Math.max(h.total-1,0)}))),s.push(n(Qe.util.updateQueryData(a?"getBoardAssetsTotal":"getBoardImagesTotal","none",h=>{h.total+=1})));const l={board_id:"none",categories:o},c=ce.endpoints.listImages.select(l)(i()),{data:u}=Rn.includes(t.image_category)?Qe.endpoints.getBoardImagesTotal.select(t.board_id??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(i()),d=c.data&&c.data.ids.length>=((u==null?void 0:u.total)??0),f=Xl(c.data,t);(d||f)&&s.push(n(ce.util.updateQueryData("listImages",l,h=>{Ot.upsertOne(h,t)})));try{await r}catch{s.forEach(h=>h.undo())}}}),addImagesToBoard:e.mutation({query:({board_id:t,imageDTOs:n})=>({url:"board_images/batch",method:"POST",body:{image_names:n.map(r=>r.image_name),board_id:t}}),invalidatesTags:(t,n,{board_id:r})=>[{type:"Board",id:r??"none"}],async onQueryStarted({board_id:t,imageDTOs:n},{dispatch:r,queryFulfilled:i,getState:o}){try{const{data:s}=await i,{added_image_names:a}=s;a.forEach(l=>{r(ce.util.updateQueryData("getImageDTO",l,y=>{y.board_id=t==="none"?void 0:t}));const c=n.find(y=>y.image_name===l);if(!c)return;const u=Fi(c),d=c.board_id,f=Pr.includes(c.image_category);r(ce.util.updateQueryData("listImages",{board_id:d??"none",categories:u},y=>{Ot.removeOne(y,c.image_name)})),r(Qe.util.updateQueryData(f?"getBoardAssetsTotal":"getBoardImagesTotal",d??"none",y=>{y.total=Math.max(y.total-1,0)})),r(Qe.util.updateQueryData(f?"getBoardAssetsTotal":"getBoardImagesTotal",t??"none",y=>{y.total+=1}));const h={board_id:t,categories:u},p=ce.endpoints.listImages.select(h)(o()),{data:m}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(t??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(t??"none")(o()),_=p.data&&p.data.ids.length>=((m==null?void 0:m.total)??0),v=((m==null?void 0:m.total)??0)>=K0?Xl(p.data,c):!0;(_||v)&&r(ce.util.updateQueryData("listImages",h,y=>{Ot.upsertOne(y,{...c,board_id:t})}))})}catch{}}}),removeImagesFromBoard:e.mutation({query:({imageDTOs:t})=>({url:"board_images/batch/delete",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{const i=[],o=[];return t==null||t.removed_image_names.forEach(s=>{var l;const a=(l=r.find(c=>c.image_name===s))==null?void 0:l.board_id;!a||i.includes(a)||o.push({type:"Board",id:a})}),o},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{removed_image_names:s}=o;s.forEach(a=>{n(ce.util.updateQueryData("getImageDTO",a,_=>{_.board_id=void 0}));const l=t.find(_=>_.image_name===a);if(!l)return;const c=Fi(l),u=Pr.includes(l.image_category);n(ce.util.updateQueryData("listImages",{board_id:l.board_id??"none",categories:c},_=>{Ot.removeOne(_,l.image_name)})),n(Qe.util.updateQueryData(u?"getBoardAssetsTotal":"getBoardImagesTotal",l.board_id??"none",_=>{_.total=Math.max(_.total-1,0)})),n(Qe.util.updateQueryData(u?"getBoardAssetsTotal":"getBoardImagesTotal","none",_=>{_.total+=1}));const d={board_id:"none",categories:c},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(l.image_category)?Qe.endpoints.getBoardImagesTotal.select(l.board_id??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l.board_id??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,l):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...l,board_id:"none"})}))})}catch{}}}),bulkDownloadImages:e.mutation({query:({image_names:t,board_id:n})=>({url:"images/download",method:"POST",body:{image_names:t,board_id:n}})})})}),{useGetIntermediatesCountQuery:FUe,useListImagesQuery:DUe,useLazyListImagesQuery:LUe,useGetImageDTOQuery:BUe,useGetImageMetadataQuery:zUe,useGetImageWorkflowQuery:jUe,useLazyGetImageWorkflowQuery:VUe,useDeleteImageMutation:UUe,useDeleteImagesMutation:GUe,useUploadImageMutation:HUe,useClearIntermediatesMutation:WUe,useAddImagesToBoardMutation:qUe,useRemoveImagesFromBoardMutation:KUe,useAddImageToBoardMutation:XUe,useRemoveImageFromBoardMutation:QUe,useChangeImageIsIntermediateMutation:YUe,useChangeImageSessionIdMutation:ZUe,useDeleteBoardAndImagesMutation:JUe,useDeleteBoardMutation:eGe,useStarImagesMutation:tGe,useUnstarImagesMutation:nGe,useBulkDownloadImagesMutation:rGe}=ce,nB={selection:[],shouldAutoSwitch:!0,autoAssignBoardOnClick:!0,autoAddBoardId:"none",galleryImageMinimumWidth:96,selectedBoardId:"none",galleryView:"images",boardSearchText:""},rB=jt({name:"gallery",initialState:nB,reducers:{imageSelected:(e,t)=>{e.selection=t.payload?[t.payload]:[]},selectionChanged:(e,t)=>{e.selection=YF(t.payload,n=>n.image_name)},shouldAutoSwitchChanged:(e,t)=>{e.shouldAutoSwitch=t.payload},setGalleryImageMinimumWidth:(e,t)=>{e.galleryImageMinimumWidth=t.payload},autoAssignBoardOnClickChanged:(e,t)=>{e.autoAssignBoardOnClick=t.payload},boardIdSelected:(e,t)=>{e.selectedBoardId=t.payload.boardId,e.galleryView="images"},autoAddBoardIdChanged:(e,t)=>{if(!t.payload){e.autoAddBoardId="none";return}e.autoAddBoardId=t.payload},galleryViewChanged:(e,t)=>{e.galleryView=t.payload},boardSearchTextChanged:(e,t)=>{e.boardSearchText=t.payload}},extraReducers:e=>{e.addMatcher(qfe,(t,n)=>{const r=n.meta.arg.originalArgs;r===t.selectedBoardId&&(t.selectedBoardId="none",t.galleryView="images"),r===t.autoAddBoardId&&(t.autoAddBoardId="none")}),e.addMatcher(Qe.endpoints.listAllBoards.matchFulfilled,(t,n)=>{const r=n.payload;t.autoAddBoardId&&(r.map(i=>i.board_id).includes(t.autoAddBoardId)||(t.autoAddBoardId="none"))})}}),{imageSelected:ps,shouldAutoSwitchChanged:iGe,autoAssignBoardOnClickChanged:oGe,setGalleryImageMinimumWidth:sGe,boardIdSelected:vp,autoAddBoardIdChanged:aGe,galleryViewChanged:Q5,selectionChanged:iB,boardSearchTextChanged:lGe}=rB.actions,Wfe=rB.reducer,qfe=br(ce.endpoints.deleteBoard.matchFulfilled,ce.endpoints.deleteBoardAndImages.matchFulfilled),VI={weight:.75},Kfe={loras:{}},oB=jt({name:"lora",initialState:Kfe,reducers:{loraAdded:(e,t)=>{const{model_name:n,id:r,base_model:i}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,...VI}},loraRecalled:(e,t)=>{const{model_name:n,id:r,base_model:i,weight:o}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,weight:o}},loraRemoved:(e,t)=>{const n=t.payload;delete e.loras[n]},lorasCleared:e=>{e.loras={}},loraWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload,i=e.loras[n];i&&(i.weight=r)},loraWeightReset:(e,t)=>{const n=t.payload,r=e.loras[n];r&&(r.weight=VI.weight)}}}),{loraAdded:cGe,loraRemoved:sB,loraWeightChanged:uGe,loraWeightReset:dGe,lorasCleared:fGe,loraRecalled:hGe}=oB.actions,Xfe=oB.reducer,Qfe={searchFolder:null,advancedAddScanModel:null},aB=jt({name:"modelmanager",initialState:Qfe,reducers:{setSearchFolder:(e,t)=>{e.searchFolder=t.payload},setAdvancedAddScanModel:(e,t)=>{e.advancedAddScanModel=t.payload}}}),{setSearchFolder:pGe,setAdvancedAddScanModel:gGe}=aB.actions,Yfe=aB.reducer,Zfe=he("nodes/textToImageGraphBuilt"),Jfe=he("nodes/imageToImageGraphBuilt"),lB=he("nodes/canvasGraphBuilt"),ehe=he("nodes/nodesGraphBuilt"),the=br(Zfe,Jfe,lB,ehe),nhe=he("nodes/workflowLoadRequested"),rhe=he("nodes/updateAllNodesRequested"),yT=he("workflow/workflowLoaded"),mGe=500,yGe=320,ihe="node-drag-handle",cB={dragHandle:`.${ihe}`},vGe={input:"inputs",output:"outputs"},bGe=["IPAdapterModelField","ControlNetModelField","LoRAModelField","MainModelField","ONNXModelField","SDXLMainModelField","SDXLRefinerModelField","VaeModelField","UNetField","VaeField","ClipField","T2IAdapterModelField","IPAdapterModelField"],_Ge={BoardField:"purple.500",BooleanField:"green.500",ClipField:"green.500",ColorField:"pink.300",ConditioningField:"cyan.500",ControlField:"teal.500",ControlNetModelField:"teal.500",EnumField:"blue.500",FloatField:"orange.500",ImageField:"purple.500",IntegerField:"red.500",IPAdapterField:"teal.500",IPAdapterModelField:"teal.500",LatentsField:"pink.500",LoRAModelField:"teal.500",MainModelField:"teal.500",ONNXModelField:"teal.500",SDXLMainModelField:"teal.500",SDXLRefinerModelField:"teal.500",StringField:"yellow.500",T2IAdapterField:"teal.500",T2IAdapterModelField:"teal.500",UNetField:"red.500",VaeField:"blue.500",VaeModelField:"teal.500"},ohe=T.enum(["connection","direct","any"]),she=T.enum(["none","textarea","slider"]),uB=T.object({id:T.string().trim().min(1),name:T.string().trim().min(1)}),Bn=uB.extend({fieldKind:T.literal("input"),label:T.string().nullish()}),zn=uB.extend({fieldKind:T.literal("output")}),dB=T.object({name:T.string().min(1),title:T.string().min(1),description:T.string().nullish(),ui_hidden:T.boolean(),ui_type:T.string().nullish(),ui_order:T.number().int().nullish()}),jn=dB.extend({fieldKind:T.literal("input"),input:ohe,required:T.boolean(),ui_component:she.nullish(),ui_choice_labels:T.record(T.string()).nullish()}),Vn=dB.extend({fieldKind:T.literal("output")}),Un=T.object({isCollection:T.boolean(),isCollectionOrScalar:T.boolean()}),ahe=T.object({nodeId:T.string().trim().min(1),fieldName:T.string().trim().min(1)}),xm=Un.extend({name:T.literal("IntegerField")}),z_=T.number().int(),fB=Bn.extend({type:xm,value:z_}),lhe=zn.extend({type:xm}),hB=jn.extend({type:xm,default:z_,multipleOf:T.number().int().optional(),maximum:T.number().int().optional(),exclusiveMaximum:T.number().int().optional(),minimum:T.number().int().optional(),exclusiveMinimum:T.number().int().optional()}),che=Vn.extend({type:xm}),SGe=e=>fB.safeParse(e).success,xGe=e=>hB.safeParse(e).success,wm=Un.extend({name:T.literal("FloatField")}),j_=T.number(),pB=Bn.extend({type:wm,value:j_}),uhe=zn.extend({type:wm}),gB=jn.extend({type:wm,default:j_,multipleOf:T.number().optional(),maximum:T.number().optional(),exclusiveMaximum:T.number().optional(),minimum:T.number().optional(),exclusiveMinimum:T.number().optional()}),dhe=Vn.extend({type:wm}),wGe=e=>pB.safeParse(e).success,CGe=e=>gB.safeParse(e).success,Cm=Un.extend({name:T.literal("StringField")}),V_=T.string(),mB=Bn.extend({type:Cm,value:V_}),fhe=zn.extend({type:Cm}),yB=jn.extend({type:Cm,default:V_,maxLength:T.number().int().optional(),minLength:T.number().int().optional()}),hhe=Vn.extend({type:Cm}),EGe=e=>mB.safeParse(e).success,TGe=e=>yB.safeParse(e).success,Em=Un.extend({name:T.literal("BooleanField")}),U_=T.boolean(),vB=Bn.extend({type:Em,value:U_}),phe=zn.extend({type:Em}),bB=jn.extend({type:Em,default:U_}),ghe=Vn.extend({type:Em}),AGe=e=>vB.safeParse(e).success,kGe=e=>bB.safeParse(e).success,Tm=Un.extend({name:T.literal("EnumField")}),G_=T.string(),_B=Bn.extend({type:Tm,value:G_}),mhe=zn.extend({type:Tm}),SB=jn.extend({type:Tm,default:G_,options:T.array(T.string()),labels:T.record(T.string()).optional()}),yhe=Vn.extend({type:Tm}),PGe=e=>_B.safeParse(e).success,IGe=e=>SB.safeParse(e).success,Am=Un.extend({name:T.literal("ImageField")}),H_=mm.optional(),xB=Bn.extend({type:Am,value:H_}),vhe=zn.extend({type:Am}),wB=jn.extend({type:Am,default:H_}),bhe=Vn.extend({type:Am}),vT=e=>xB.safeParse(e).success,MGe=e=>wB.safeParse(e).success,km=Un.extend({name:T.literal("BoardField")}),W_=yle.optional(),CB=Bn.extend({type:km,value:W_}),_he=zn.extend({type:km}),EB=jn.extend({type:km,default:W_}),She=Vn.extend({type:km}),RGe=e=>CB.safeParse(e).success,OGe=e=>EB.safeParse(e).success,Pm=Un.extend({name:T.literal("ColorField")}),q_=vle.optional(),TB=Bn.extend({type:Pm,value:q_}),xhe=zn.extend({type:Pm}),AB=jn.extend({type:Pm,default:q_}),whe=Vn.extend({type:Pm}),Che=e=>TB.safeParse(e).success,$Ge=e=>AB.safeParse(e).success,Im=Un.extend({name:T.literal("MainModelField")}),Df=qD.optional(),kB=Bn.extend({type:Im,value:Df}),Ehe=zn.extend({type:Im}),PB=jn.extend({type:Im,default:Df}),The=Vn.extend({type:Im}),NGe=e=>kB.safeParse(e).success,FGe=e=>PB.safeParse(e).success,Mm=Un.extend({name:T.literal("SDXLMainModelField")}),bT=Df,IB=Bn.extend({type:Mm,value:bT}),Ahe=zn.extend({type:Mm}),MB=jn.extend({type:Mm,default:bT}),khe=Vn.extend({type:Mm}),DGe=e=>IB.safeParse(e).success,LGe=e=>MB.safeParse(e).success,Rm=Un.extend({name:T.literal("SDXLRefinerModelField")}),K_=Df,RB=Bn.extend({type:Rm,value:K_}),Phe=zn.extend({type:Rm}),OB=jn.extend({type:Rm,default:K_}),Ihe=Vn.extend({type:Rm}),BGe=e=>RB.safeParse(e).success,zGe=e=>OB.safeParse(e).success,Om=Un.extend({name:T.literal("VAEModelField")}),X_=J4.optional(),$B=Bn.extend({type:Om,value:X_}),Mhe=zn.extend({type:Om}),NB=jn.extend({type:Om,default:X_}),Rhe=Vn.extend({type:Om}),jGe=e=>$B.safeParse(e).success,VGe=e=>NB.safeParse(e).success,$m=Un.extend({name:T.literal("LoRAModelField")}),Q_=eT.optional(),FB=Bn.extend({type:$m,value:Q_}),Ohe=zn.extend({type:$m}),DB=jn.extend({type:$m,default:Q_}),$he=Vn.extend({type:$m}),UGe=e=>FB.safeParse(e).success,GGe=e=>DB.safeParse(e).success,Nm=Un.extend({name:T.literal("ControlNetModelField")}),Y_=tT.optional(),LB=Bn.extend({type:Nm,value:Y_}),Nhe=zn.extend({type:Nm}),BB=jn.extend({type:Nm,default:Y_}),Fhe=Vn.extend({type:Nm}),HGe=e=>LB.safeParse(e).success,WGe=e=>BB.safeParse(e).success,Fm=Un.extend({name:T.literal("IPAdapterModelField")}),Z_=nT.optional(),zB=Bn.extend({type:Fm,value:Z_}),Dhe=zn.extend({type:Fm}),jB=jn.extend({type:Fm,default:Z_}),Lhe=Vn.extend({type:Fm}),qGe=e=>zB.safeParse(e).success,KGe=e=>jB.safeParse(e).success,Dm=Un.extend({name:T.literal("T2IAdapterModelField")}),J_=rT.optional(),VB=Bn.extend({type:Dm,value:J_}),Bhe=zn.extend({type:Dm}),UB=jn.extend({type:Dm,default:J_}),zhe=Vn.extend({type:Dm}),XGe=e=>VB.safeParse(e).success,QGe=e=>UB.safeParse(e).success,Lm=Un.extend({name:T.literal("SchedulerField")}),eS=GD.optional(),GB=Bn.extend({type:Lm,value:eS}),jhe=zn.extend({type:Lm}),HB=jn.extend({type:Lm,default:eS}),Vhe=Vn.extend({type:Lm}),YGe=e=>GB.safeParse(e).success,ZGe=e=>HB.safeParse(e).success,Bm=Un.extend({name:T.string().min(1)}),_T=T.undefined().catch(void 0),Uhe=Bn.extend({type:Bm,value:_T}),Ghe=zn.extend({type:Bm}),WB=jn.extend({type:Bm,default:_T,input:T.literal("connection")}),Hhe=Vn.extend({type:Bm}),qB=T.union([xm,wm,Cm,Em,Tm,Am,km,Im,Mm,Rm,Om,$m,Nm,Fm,Dm,Pm,Lm]),Whe=e=>qB.safeParse(e).success;T.union([qB,Bm]);const qhe=T.union([z_,j_,V_,U_,G_,H_,W_,Df,bT,K_,X_,Q_,Y_,Z_,J_,q_,eS]);T.union([qhe,_T]);const Khe=T.union([fB,pB,mB,vB,_B,xB,CB,kB,IB,RB,$B,FB,LB,zB,VB,TB,GB]),KB=T.union([Khe,Uhe]),JGe=e=>KB.safeParse(e).success,Xhe=T.union([lhe,uhe,fhe,phe,mhe,vhe,_he,Ehe,Ahe,Phe,Mhe,Ohe,Nhe,Dhe,Bhe,xhe,jhe]),Qhe=T.union([Xhe,Ghe]),Yhe=T.union([hB,gB,yB,bB,SB,wB,EB,PB,MB,OB,NB,DB,BB,jB,UB,AB,HB,WB]),XB=T.union([Yhe,WB]),eHe=e=>XB.safeParse(e).success,Zhe=T.union([che,dhe,hhe,ghe,yhe,bhe,She,The,khe,Ihe,Rhe,$he,Fhe,Lhe,zhe,whe,Vhe]),Jhe=T.union([Zhe,Hhe]),nw=T.coerce.number().int().min(0),tS=T.string().refine(e=>{const[t,n,r]=e.split(".");return nw.safeParse(t).success&&nw.safeParse(n).success&&nw.safeParse(r).success}),epe=tS.transform(e=>{const[t,n,r]=e.split(".");return{major:Number(t),minor:Number(n),patch:Number(r)}});T.object({type:T.string(),title:T.string(),description:T.string(),tags:T.array(T.string().min(1)),inputs:T.record(XB),outputs:T.record(Jhe),outputType:T.string().min(1),version:tS,useCache:T.boolean(),nodePack:T.string().min(1).nullish(),classification:ble});const QB=T.object({id:T.string().trim().min(1),type:T.string().trim().min(1),label:T.string(),isOpen:T.boolean(),notes:T.string(),isIntermediate:T.boolean(),useCache:T.boolean(),version:tS,nodePack:T.string().min(1).nullish(),inputs:T.record(KB),outputs:T.record(Qhe)}),YB=T.object({id:T.string().trim().min(1),type:T.literal("notes"),label:T.string(),isOpen:T.boolean(),notes:T.string()}),tpe=T.object({id:T.string().trim().min(1),type:T.literal("current_image"),label:T.string(),isOpen:T.boolean()});T.union([QB,YB,tpe]);const Sn=e=>!!(e&&e.type==="invocation"),Y5=e=>!!(e&&e.type==="notes"),tHe=e=>!!(e&&!["notes","current_image"].includes(e.type)),gc=T.enum(["PENDING","IN_PROGRESS","COMPLETED","FAILED"]);T.object({nodeId:T.string().trim().min(1),status:gc,progress:T.number().nullable(),progressImage:Ele.nullable(),error:T.string().nullable(),outputs:T.array(T.any())});T.object({type:T.union([T.literal("default"),T.literal("collapsed")])});function no(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?cpe:lpe;tz.useSyncExternalStore=hf.useSyncExternalStore!==void 0?hf.useSyncExternalStore:upe;ez.exports=tz;var dpe=ez.exports;/** - * @license React - * use-sync-external-store-shim/with-selector.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var nS=I,fpe=dpe;function hpe(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var ppe=typeof Object.is=="function"?Object.is:hpe,gpe=fpe.useSyncExternalStore,mpe=nS.useRef,ype=nS.useEffect,vpe=nS.useMemo,bpe=nS.useDebugValue;JB.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=mpe(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=vpe(function(){function l(h){if(!c){if(c=!0,u=h,h=r(h),i!==void 0&&s.hasValue){var p=s.value;if(i(p,h))return d=p}return d=h}if(p=d,ppe(u,h))return p;var m=r(h);return i!==void 0&&i(p,m)?p:(u=h,d=m)}var c=!1,u,d,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,i]);var a=gpe(e,o[0],o[1]);return ype(function(){s.hasValue=!0,s.value=a},[a]),bpe(a),a};ZB.exports=JB;var _pe=ZB.exports;const Spe=Ml(_pe),UI=e=>{let t;const n=new Set,r=(l,c)=>{const u=typeof l=="function"?l(t):l;if(!Object.is(u,t)){const d=t;t=c??typeof u!="object"?u:Object.assign({},t,u),n.forEach(f=>f(t,d))}},i=()=>t,a={setState:r,getState:i,subscribe:l=>(n.add(l),()=>n.delete(l)),destroy:()=>{n.clear()}};return t=e(r,i,a),a},xpe=e=>e?UI(e):UI,{useSyncExternalStoreWithSelector:wpe}=Spe;function nz(e,t=e.getState,n){const r=wpe(e.subscribe,e.getState,e.getServerState||e.getState,t,n);return I.useDebugValue(r),r}const GI=(e,t)=>{const n=xpe(e),r=(i,o=t)=>nz(n,i,o);return Object.assign(r,n),r},Cpe=(e,t)=>e?GI(e,t):GI;function ti(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,i]of e)if(!Object.is(i,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r=0;r{}};function rS(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}tv.prototype=rS.prototype={constructor:tv,on:function(e,t){var n=this._,r=Tpe(e+"",n),i,o=-1,s=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(i),r=0,i,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),WI.hasOwnProperty(t)?{space:WI[t],local:e}:e}function kpe(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Z5&&t.documentElement.namespaceURI===Z5?t.createElement(e):t.createElementNS(n,e)}}function Ppe(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function rz(e){var t=iS(e);return(t.local?Ppe:kpe)(t)}function Ipe(){}function ST(e){return e==null?Ipe:function(){return this.querySelector(e)}}function Mpe(e){typeof e!="function"&&(e=ST(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i=g&&(g=y+1);!(S=_[g])&&++g=0;)(s=r[i])&&(o&&s.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(s,o),o=s);return this}function nge(e){e||(e=rge);function t(d,f){return d&&f?e(d.__data__,f.__data__):!d-!f}for(var n=this._groups,r=n.length,i=new Array(r),o=0;ot?1:e>=t?0:NaN}function ige(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function oge(){return Array.from(this)}function sge(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?yge:typeof t=="function"?bge:vge)(e,t,n??"")):pf(this.node(),e)}function pf(e,t){return e.style.getPropertyValue(t)||lz(e).getComputedStyle(e,null).getPropertyValue(t)}function Sge(e){return function(){delete this[e]}}function xge(e,t){return function(){this[e]=t}}function wge(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Cge(e,t){return arguments.length>1?this.each((t==null?Sge:typeof t=="function"?wge:xge)(e,t)):this.node()[e]}function cz(e){return e.trim().split(/^|\s+/)}function xT(e){return e.classList||new uz(e)}function uz(e){this._node=e,this._names=cz(e.getAttribute("class")||"")}uz.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function dz(e,t){for(var n=xT(e),r=-1,i=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function Zge(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,o;n()=>e;function J5(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:o,x:s,y:a,dx:l,dy:c,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:a,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:c,enumerable:!0,configurable:!0},_:{value:u}})}J5.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function lme(e){return!e.ctrlKey&&!e.button}function cme(){return this.parentNode}function ume(e,t){return t??{x:e.x,y:e.y}}function dme(){return navigator.maxTouchPoints||"ontouchstart"in this}function fme(){var e=lme,t=cme,n=ume,r=dme,i={},o=rS("start","drag","end"),s=0,a,l,c,u,d=0;function f(b){b.on("mousedown.drag",h).filter(r).on("touchstart.drag",_).on("touchmove.drag",v,ame).on("touchend.drag touchcancel.drag",y).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(b,S){if(!(u||!e.call(this,b,S))){var w=g(this,t.call(this,b,S),b,S,"mouse");w&&(xo(b.view).on("mousemove.drag",p,Sg).on("mouseup.drag",m,Sg),gz(b.view),iw(b),c=!1,a=b.clientX,l=b.clientY,w("start",b))}}function p(b){if(Nd(b),!c){var S=b.clientX-a,w=b.clientY-l;c=S*S+w*w>d}i.mouse("drag",b)}function m(b){xo(b.view).on("mousemove.drag mouseup.drag",null),mz(b.view,c),Nd(b),i.mouse("end",b)}function _(b,S){if(e.call(this,b,S)){var w=b.changedTouches,C=t.call(this,b,S),x=w.length,k,A;for(k=0;k>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Q0(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Q0(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=pme.exec(e))?new Qr(t[1],t[2],t[3],1):(t=gme.exec(e))?new Qr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=mme.exec(e))?Q0(t[1],t[2],t[3],t[4]):(t=yme.exec(e))?Q0(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=vme.exec(e))?JI(t[1],t[2]/100,t[3]/100,1):(t=bme.exec(e))?JI(t[1],t[2]/100,t[3]/100,t[4]):qI.hasOwnProperty(e)?QI(qI[e]):e==="transparent"?new Qr(NaN,NaN,NaN,0):null}function QI(e){return new Qr(e>>16&255,e>>8&255,e&255,1)}function Q0(e,t,n,r){return r<=0&&(e=t=n=NaN),new Qr(e,t,n,r)}function xme(e){return e instanceof jm||(e=Cg(e)),e?(e=e.rgb(),new Qr(e.r,e.g,e.b,e.opacity)):new Qr}function e3(e,t,n,r){return arguments.length===1?xme(e):new Qr(e,t,n,r??1)}function Qr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}wT(Qr,e3,yz(jm,{brighter(e){return e=e==null?P1:Math.pow(P1,e),new Qr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?xg:Math.pow(xg,e),new Qr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Qr(Fc(this.r),Fc(this.g),Fc(this.b),I1(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:YI,formatHex:YI,formatHex8:wme,formatRgb:ZI,toString:ZI}));function YI(){return`#${xc(this.r)}${xc(this.g)}${xc(this.b)}`}function wme(){return`#${xc(this.r)}${xc(this.g)}${xc(this.b)}${xc((isNaN(this.opacity)?1:this.opacity)*255)}`}function ZI(){const e=I1(this.opacity);return`${e===1?"rgb(":"rgba("}${Fc(this.r)}, ${Fc(this.g)}, ${Fc(this.b)}${e===1?")":`, ${e})`}`}function I1(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Fc(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function xc(e){return e=Fc(e),(e<16?"0":"")+e.toString(16)}function JI(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new wo(e,t,n,r)}function vz(e){if(e instanceof wo)return new wo(e.h,e.s,e.l,e.opacity);if(e instanceof jm||(e=Cg(e)),!e)return new wo;if(e instanceof wo)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),o=Math.max(t,n,r),s=NaN,a=o-i,l=(o+i)/2;return a?(t===o?s=(n-r)/a+(n0&&l<1?0:s,new wo(s,a,l,e.opacity)}function Cme(e,t,n,r){return arguments.length===1?vz(e):new wo(e,t,n,r??1)}function wo(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}wT(wo,Cme,yz(jm,{brighter(e){return e=e==null?P1:Math.pow(P1,e),new wo(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?xg:Math.pow(xg,e),new wo(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Qr(ow(e>=240?e-240:e+120,i,r),ow(e,i,r),ow(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new wo(e8(this.h),Y0(this.s),Y0(this.l),I1(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=I1(this.opacity);return`${e===1?"hsl(":"hsla("}${e8(this.h)}, ${Y0(this.s)*100}%, ${Y0(this.l)*100}%${e===1?")":`, ${e})`}`}}));function e8(e){return e=(e||0)%360,e<0?e+360:e}function Y0(e){return Math.max(0,Math.min(1,e||0))}function ow(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const bz=e=>()=>e;function Eme(e,t){return function(n){return e+n*t}}function Tme(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function Ame(e){return(e=+e)==1?_z:function(t,n){return n-t?Tme(t,n,e):bz(isNaN(t)?n:t)}}function _z(e,t){var n=t-e;return n?Eme(e,n):bz(isNaN(e)?t:e)}const t8=function e(t){var n=Ame(t);function r(i,o){var s=n((i=e3(i)).r,(o=e3(o)).r),a=n(i.g,o.g),l=n(i.b,o.b),c=_z(i.opacity,o.opacity);return function(u){return i.r=s(u),i.g=a(u),i.b=l(u),i.opacity=c(u),i+""}}return r.gamma=e,r}(1);function za(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var t3=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,sw=new RegExp(t3.source,"g");function kme(e){return function(){return e}}function Pme(e){return function(t){return e(t)+""}}function Ime(e,t){var n=t3.lastIndex=sw.lastIndex=0,r,i,o,s=-1,a=[],l=[];for(e=e+"",t=t+"";(r=t3.exec(e))&&(i=sw.exec(t));)(o=i.index)>n&&(o=t.slice(n,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,l.push({i:s,x:za(r,i)})),n=sw.lastIndex;return n180?u+=360:u-c>180&&(c+=360),f.push({i:d.push(i(d)+"rotate(",null,r)-2,x:za(c,u)})):u&&d.push(i(d)+"rotate("+u+r)}function a(c,u,d,f){c!==u?f.push({i:d.push(i(d)+"skewX(",null,r)-2,x:za(c,u)}):u&&d.push(i(d)+"skewX("+u+r)}function l(c,u,d,f,h,p){if(c!==d||u!==f){var m=h.push(i(h)+"scale(",null,",",null,")");p.push({i:m-4,x:za(c,d)},{i:m-2,x:za(u,f)})}else(d!==1||f!==1)&&h.push(i(h)+"scale("+d+","+f+")")}return function(c,u){var d=[],f=[];return c=e(c),u=e(u),o(c.translateX,c.translateY,u.translateX,u.translateY,d,f),s(c.rotate,u.rotate,d,f),a(c.skewX,u.skewX,d,f),l(c.scaleX,c.scaleY,u.scaleX,u.scaleY,d,f),c=u=null,function(h){for(var p=-1,m=f.length,_;++p=0&&e._call.call(void 0,t),e=e._next;--gf}function i8(){ru=(R1=Eg.now())+oS,gf=Gh=0;try{zme()}finally{gf=0,Vme(),ru=0}}function jme(){var e=Eg.now(),t=e-R1;t>wz&&(oS-=t,R1=e)}function Vme(){for(var e,t=M1,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:M1=n);Hh=e,r3(r)}function r3(e){if(!gf){Gh&&(Gh=clearTimeout(Gh));var t=e-ru;t>24?(e<1/0&&(Gh=setTimeout(i8,e-Eg.now()-oS)),gh&&(gh=clearInterval(gh))):(gh||(R1=Eg.now(),gh=setInterval(jme,wz)),gf=1,Cz(i8))}}function o8(e,t,n){var r=new O1;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var Ume=rS("start","end","cancel","interrupt"),Gme=[],Tz=0,s8=1,i3=2,nv=3,a8=4,o3=5,rv=6;function sS(e,t,n,r,i,o){var s=e.__transition;if(!s)e.__transition={};else if(n in s)return;Hme(e,n,{name:t,index:r,group:i,on:Ume,tween:Gme,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Tz})}function ET(e,t){var n=Vo(e,t);if(n.state>Tz)throw new Error("too late; already scheduled");return n}function ks(e,t){var n=Vo(e,t);if(n.state>nv)throw new Error("too late; already running");return n}function Vo(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Hme(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Ez(o,0,n.time);function o(c){n.state=s8,n.timer.restart(s,n.delay,n.time),n.delay<=c&&s(c-n.delay)}function s(c){var u,d,f,h;if(n.state!==s8)return l();for(u in r)if(h=r[u],h.name===n.name){if(h.state===nv)return o8(s);h.state===a8?(h.state=rv,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete r[u]):+ui3&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function S0e(e,t,n){var r,i,o=_0e(t)?ET:ks;return function(){var s=o(this,e),a=s.on;a!==r&&(i=(r=a).copy()).on(t,n),s.on=i}}function x0e(e,t){var n=this._id;return arguments.length<2?Vo(this.node(),n).on.on(e):this.each(S0e(n,e,t))}function w0e(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function C0e(){return this.on("end.remove",w0e(this._id))}function E0e(e){var t=this._name,n=this._id;typeof e!="function"&&(e=ST(e));for(var r=this._groups,i=r.length,o=new Array(i),s=0;s()=>e;function Q0e(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Xs(e,t,n){this.k=e,this.x=t,this.y=n}Xs.prototype={constructor:Xs,scale:function(e){return e===1?this:new Xs(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Xs(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var dl=new Xs(1,0,0);Xs.prototype;function aw(e){e.stopImmediatePropagation()}function mh(e){e.preventDefault(),e.stopImmediatePropagation()}function Y0e(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Z0e(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function l8(){return this.__zoom||dl}function J0e(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function eye(){return navigator.maxTouchPoints||"ontouchstart"in this}function tye(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),s>o?(o+s)/2:Math.min(0,o)||Math.max(0,s))}function nye(){var e=Y0e,t=Z0e,n=tye,r=J0e,i=eye,o=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],a=250,l=Lme,c=rS("start","zoom","end"),u,d,f,h=500,p=150,m=0,_=10;function v(E){E.property("__zoom",l8).on("wheel.zoom",x,{passive:!1}).on("mousedown.zoom",k).on("dblclick.zoom",A).filter(i).on("touchstart.zoom",R).on("touchmove.zoom",L).on("touchend.zoom touchcancel.zoom",M).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}v.transform=function(E,P,O,F){var $=E.selection?E.selection():E;$.property("__zoom",l8),E!==$?S(E,P,O,F):$.interrupt().each(function(){w(this,arguments).event(F).start().zoom(null,typeof P=="function"?P.apply(this,arguments):P).end()})},v.scaleBy=function(E,P,O,F){v.scaleTo(E,function(){var $=this.__zoom.k,D=typeof P=="function"?P.apply(this,arguments):P;return $*D},O,F)},v.scaleTo=function(E,P,O,F){v.transform(E,function(){var $=t.apply(this,arguments),D=this.__zoom,N=O==null?b($):typeof O=="function"?O.apply(this,arguments):O,z=D.invert(N),V=typeof P=="function"?P.apply(this,arguments):P;return n(g(y(D,V),N,z),$,s)},O,F)},v.translateBy=function(E,P,O,F){v.transform(E,function(){return n(this.__zoom.translate(typeof P=="function"?P.apply(this,arguments):P,typeof O=="function"?O.apply(this,arguments):O),t.apply(this,arguments),s)},null,F)},v.translateTo=function(E,P,O,F,$){v.transform(E,function(){var D=t.apply(this,arguments),N=this.__zoom,z=F==null?b(D):typeof F=="function"?F.apply(this,arguments):F;return n(dl.translate(z[0],z[1]).scale(N.k).translate(typeof P=="function"?-P.apply(this,arguments):-P,typeof O=="function"?-O.apply(this,arguments):-O),D,s)},F,$)};function y(E,P){return P=Math.max(o[0],Math.min(o[1],P)),P===E.k?E:new Xs(P,E.x,E.y)}function g(E,P,O){var F=P[0]-O[0]*E.k,$=P[1]-O[1]*E.k;return F===E.x&&$===E.y?E:new Xs(E.k,F,$)}function b(E){return[(+E[0][0]+ +E[1][0])/2,(+E[0][1]+ +E[1][1])/2]}function S(E,P,O,F){E.on("start.zoom",function(){w(this,arguments).event(F).start()}).on("interrupt.zoom end.zoom",function(){w(this,arguments).event(F).end()}).tween("zoom",function(){var $=this,D=arguments,N=w($,D).event(F),z=t.apply($,D),V=O==null?b(z):typeof O=="function"?O.apply($,D):O,H=Math.max(z[1][0]-z[0][0],z[1][1]-z[0][1]),X=$.__zoom,te=typeof P=="function"?P.apply($,D):P,ee=l(X.invert(V).concat(H/X.k),te.invert(V).concat(H/te.k));return function(j){if(j===1)j=te;else{var q=ee(j),Z=H/q[2];j=new Xs(Z,V[0]-q[0]*Z,V[1]-q[1]*Z)}N.zoom(null,j)}})}function w(E,P,O){return!O&&E.__zooming||new C(E,P)}function C(E,P){this.that=E,this.args=P,this.active=0,this.sourceEvent=null,this.extent=t.apply(E,P),this.taps=0}C.prototype={event:function(E){return E&&(this.sourceEvent=E),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(E,P){return this.mouse&&E!=="mouse"&&(this.mouse[1]=P.invert(this.mouse[0])),this.touch0&&E!=="touch"&&(this.touch0[1]=P.invert(this.touch0[0])),this.touch1&&E!=="touch"&&(this.touch1[1]=P.invert(this.touch1[0])),this.that.__zoom=P,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(E){var P=xo(this.that).datum();c.call(E,this.that,new Q0e(E,{sourceEvent:this.sourceEvent,target:v,type:E,transform:this.that.__zoom,dispatch:c}),P)}};function x(E,...P){if(!e.apply(this,arguments))return;var O=w(this,P).event(E),F=this.__zoom,$=Math.max(o[0],Math.min(o[1],F.k*Math.pow(2,r.apply(this,arguments)))),D=Jo(E);if(O.wheel)(O.mouse[0][0]!==D[0]||O.mouse[0][1]!==D[1])&&(O.mouse[1]=F.invert(O.mouse[0]=D)),clearTimeout(O.wheel);else{if(F.k===$)return;O.mouse=[D,F.invert(D)],iv(this),O.start()}mh(E),O.wheel=setTimeout(N,p),O.zoom("mouse",n(g(y(F,$),O.mouse[0],O.mouse[1]),O.extent,s));function N(){O.wheel=null,O.end()}}function k(E,...P){if(f||!e.apply(this,arguments))return;var O=E.currentTarget,F=w(this,P,!0).event(E),$=xo(E.view).on("mousemove.zoom",V,!0).on("mouseup.zoom",H,!0),D=Jo(E,O),N=E.clientX,z=E.clientY;gz(E.view),aw(E),F.mouse=[D,this.__zoom.invert(D)],iv(this),F.start();function V(X){if(mh(X),!F.moved){var te=X.clientX-N,ee=X.clientY-z;F.moved=te*te+ee*ee>m}F.event(X).zoom("mouse",n(g(F.that.__zoom,F.mouse[0]=Jo(X,O),F.mouse[1]),F.extent,s))}function H(X){$.on("mousemove.zoom mouseup.zoom",null),mz(X.view,F.moved),mh(X),F.event(X).end()}}function A(E,...P){if(e.apply(this,arguments)){var O=this.__zoom,F=Jo(E.changedTouches?E.changedTouches[0]:E,this),$=O.invert(F),D=O.k*(E.shiftKey?.5:2),N=n(g(y(O,D),F,$),t.apply(this,P),s);mh(E),a>0?xo(this).transition().duration(a).call(S,N,F,E):xo(this).call(v.transform,N,F,E)}}function R(E,...P){if(e.apply(this,arguments)){var O=E.touches,F=O.length,$=w(this,P,E.changedTouches.length===F).event(E),D,N,z,V;for(aw(E),N=0;N"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,t)=>`Couldn't create edge for ${e?"target":"source"} handle id: "${e?t.targetHandle:t.sourceHandle}", edge id: ${t.id}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`},Iz=fa.error001();function rn(e,t){const n=I.useContext(aS);if(n===null)throw new Error(Iz);return nz(n,e,t)}const Gn=()=>{const e=I.useContext(aS);if(e===null)throw new Error(Iz);return I.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe,destroy:e.destroy}),[e])},iye=e=>e.userSelectionActive?"none":"all";function oye({position:e,children:t,className:n,style:r,...i}){const o=rn(iye),s=`${e}`.split("-");return Q.createElement("div",{className:no(["react-flow__panel",n,...s]),style:{...r,pointerEvents:o},...i},t)}function sye({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:Q.createElement(oye,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro"},Q.createElement("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution"},"React Flow"))}const aye=({x:e,y:t,label:n,labelStyle:r={},labelShowBg:i=!0,labelBgStyle:o={},labelBgPadding:s=[2,4],labelBgBorderRadius:a=2,children:l,className:c,...u})=>{const d=I.useRef(null),[f,h]=I.useState({x:0,y:0,width:0,height:0}),p=no(["react-flow__edge-textwrapper",c]);return I.useEffect(()=>{if(d.current){const m=d.current.getBBox();h({x:m.x,y:m.y,width:m.width,height:m.height})}},[n]),typeof n>"u"||!n?null:Q.createElement("g",{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:p,visibility:f.width?"visible":"hidden",...u},i&&Q.createElement("rect",{width:f.width+2*s[0],x:-s[0],y:-s[1],height:f.height+2*s[1],className:"react-flow__edge-textbg",style:o,rx:a,ry:a}),Q.createElement("text",{className:"react-flow__edge-text",y:f.height/2,dy:"0.3em",ref:d,style:r},n),l)};var lye=I.memo(aye);const AT=e=>({width:e.offsetWidth,height:e.offsetHeight}),mf=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),kT=(e={x:0,y:0},t)=>({x:mf(e.x,t[0][0],t[1][0]),y:mf(e.y,t[0][1],t[1][1])}),c8=(e,t,n)=>en?-mf(Math.abs(e-n),1,50)/50:0,Mz=(e,t)=>{const n=c8(e.x,35,t.width-35)*20,r=c8(e.y,35,t.height-35)*20;return[n,r]},Rz=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},Oz=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Tg=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),$z=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),u8=e=>({...e.positionAbsolute||{x:0,y:0},width:e.width||0,height:e.height||0}),nHe=(e,t)=>$z(Oz(Tg(e),Tg(t))),s3=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},cye=e=>Xi(e.width)&&Xi(e.height)&&Xi(e.x)&&Xi(e.y),Xi=e=>!isNaN(e)&&isFinite(e),Tn=Symbol.for("internals"),Nz=["Enter"," ","Escape"],uye=(e,t)=>{},dye=e=>"nativeEvent"in e;function a3(e){var i,o;const t=dye(e)?e.nativeEvent:e,n=((o=(i=t.composedPath)==null?void 0:i.call(t))==null?void 0:o[0])||e.target;return["INPUT","SELECT","TEXTAREA"].includes(n==null?void 0:n.nodeName)||(n==null?void 0:n.hasAttribute("contenteditable"))||!!(n!=null&&n.closest(".nokey"))}const Fz=e=>"clientX"in e,fl=(e,t)=>{var o,s;const n=Fz(e),r=n?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,i=n?e.clientY:(s=e.touches)==null?void 0:s[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:i-((t==null?void 0:t.top)??0)}},$1=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0},Vm=({id:e,path:t,labelX:n,labelY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h=20})=>Q.createElement(Q.Fragment,null,Q.createElement("path",{id:e,style:u,d:t,fill:"none",className:"react-flow__edge-path",markerEnd:d,markerStart:f}),h&&Q.createElement("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}),i&&Xi(n)&&Xi(r)?Q.createElement(lye,{x:n,y:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c}):null);Vm.displayName="BaseEdge";function yh(e,t,n){return n===void 0?n:r=>{const i=t().edges.find(o=>o.id===e);i&&n(r,{...i})}}function Dz({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e)/2,o=n{const[_,v,y]=Bz({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o});return Q.createElement(Vm,{path:_,labelX:v,labelY:y,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:m})});PT.displayName="SimpleBezierEdge";const f8={[Te.Left]:{x:-1,y:0},[Te.Right]:{x:1,y:0},[Te.Top]:{x:0,y:-1},[Te.Bottom]:{x:0,y:1}},fye=({source:e,sourcePosition:t=Te.Bottom,target:n})=>t===Te.Left||t===Te.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function hye({source:e,sourcePosition:t=Te.Bottom,target:n,targetPosition:r=Te.Top,center:i,offset:o}){const s=f8[t],a=f8[r],l={x:e.x+s.x*o,y:e.y+s.y*o},c={x:n.x+a.x*o,y:n.y+a.y*o},u=fye({source:l,sourcePosition:t,target:c}),d=u.x!==0?"x":"y",f=u[d];let h=[],p,m;const _={x:0,y:0},v={x:0,y:0},[y,g,b,S]=Dz({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[d]*a[d]===-1){p=i.x||y,m=i.y||g;const C=[{x:p,y:l.y},{x:p,y:c.y}],x=[{x:l.x,y:m},{x:c.x,y:m}];s[d]===f?h=d==="x"?C:x:h=d==="x"?x:C}else{const C=[{x:l.x,y:c.y}],x=[{x:c.x,y:l.y}];if(d==="x"?h=s.x===f?x:C:h=s.y===f?C:x,t===r){const M=Math.abs(e[d]-n[d]);if(M<=o){const E=Math.min(o-1,o-M);s[d]===f?_[d]=(l[d]>e[d]?-1:1)*E:v[d]=(c[d]>n[d]?-1:1)*E}}if(t!==r){const M=d==="x"?"y":"x",E=s[d]===a[M],P=l[M]>c[M],O=l[M]=L?(p=(k.x+A.x)/2,m=h[0].y):(p=h[0].x,m=(k.y+A.y)/2)}return[[e,{x:l.x+_.x,y:l.y+_.y},...h,{x:c.x+v.x,y:c.y+v.y},n],p,m,b,S]}function pye(e,t,n,r){const i=Math.min(h8(e,t)/2,h8(t,n)/2,r),{x:o,y:s}=t;if(e.x===o&&o===n.x||e.y===s&&s===n.y)return`L${o} ${s}`;if(e.y===s){const c=e.x{let g="";return y>0&&y{const[v,y,g]=l3({sourceX:e,sourceY:t,sourcePosition:d,targetX:n,targetY:r,targetPosition:f,borderRadius:m==null?void 0:m.borderRadius,offset:m==null?void 0:m.offset});return Q.createElement(Vm,{path:v,labelX:y,labelY:g,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:h,markerStart:p,interactionWidth:_})});lS.displayName="SmoothStepEdge";const IT=I.memo(e=>{var t;return Q.createElement(lS,{...e,pathOptions:I.useMemo(()=>{var n;return{borderRadius:0,offset:(n=e.pathOptions)==null?void 0:n.offset}},[(t=e.pathOptions)==null?void 0:t.offset])})});IT.displayName="StepEdge";function gye({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[i,o,s,a]=Dz({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,o,s,a]}const MT=I.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h})=>{const[p,m,_]=gye({sourceX:e,sourceY:t,targetX:n,targetY:r});return Q.createElement(Vm,{path:p,labelX:m,labelY:_,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h})});MT.displayName="StraightEdge";function ey(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function p8({pos:e,x1:t,y1:n,x2:r,y2:i,c:o}){switch(e){case Te.Left:return[t-ey(t-r,o),n];case Te.Right:return[t+ey(r-t,o),n];case Te.Top:return[t,n-ey(n-i,o)];case Te.Bottom:return[t,n+ey(i-n,o)]}}function zz({sourceX:e,sourceY:t,sourcePosition:n=Te.Bottom,targetX:r,targetY:i,targetPosition:o=Te.Top,curvature:s=.25}){const[a,l]=p8({pos:n,x1:e,y1:t,x2:r,y2:i,c:s}),[c,u]=p8({pos:o,x1:r,y1:i,x2:e,y2:t,c:s}),[d,f,h,p]=Lz({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:a,sourceControlY:l,targetControlX:c,targetControlY:u});return[`M${e},${t} C${a},${l} ${c},${u} ${r},${i}`,d,f,h,p]}const F1=I.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i=Te.Bottom,targetPosition:o=Te.Top,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,pathOptions:m,interactionWidth:_})=>{const[v,y,g]=zz({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o,curvature:m==null?void 0:m.curvature});return Q.createElement(Vm,{path:v,labelX:y,labelY:g,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:_})});F1.displayName="BezierEdge";const RT=I.createContext(null),mye=RT.Provider;RT.Consumer;const yye=()=>I.useContext(RT),vye=e=>"id"in e&&"source"in e&&"target"in e,jz=e=>"id"in e&&!("source"in e)&&!("target"in e),bye=(e,t,n)=>{if(!jz(e))return[];const r=n.filter(i=>i.source===e.id).map(i=>i.target);return t.filter(i=>r.includes(i.id))},_ye=(e,t,n)=>{if(!jz(e))return[];const r=n.filter(i=>i.target===e.id).map(i=>i.source);return t.filter(i=>r.includes(i.id))},Vz=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`reactflow__edge-${e}${t||""}-${n}${r||""}`,c3=(e,t)=>typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`,Sye=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),Wh=(e,t)=>{if(!e.source||!e.target)return t;let n;return vye(e)?n={...e}:n={...e,id:Vz(e)},Sye(n,t)?t:t.concat(n)},xye=(e,t,n,r={shouldReplaceId:!0})=>{const{id:i,...o}=e;if(!t.source||!t.target||!n.find(l=>l.id===i))return n;const a={...o,id:r.shouldReplaceId?Vz(t):i,source:t.source,target:t.target,sourceHandle:t.sourceHandle,targetHandle:t.targetHandle};return n.filter(l=>l.id!==i).concat(a)},u3=({x:e,y:t},[n,r,i],o,[s,a])=>{const l={x:(e-n)/i,y:(t-r)/i};return o?{x:s*Math.round(l.x/s),y:a*Math.round(l.y/a)}:l},Uz=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r}),Dd=(e,t=[0,0])=>{if(!e)return{x:0,y:0,positionAbsolute:{x:0,y:0}};const n=(e.width??0)*t[0],r=(e.height??0)*t[1],i={x:e.position.x-n,y:e.position.y-r};return{...i,positionAbsolute:e.positionAbsolute?{x:e.positionAbsolute.x-n,y:e.positionAbsolute.y-r}:i}},OT=(e,t=[0,0])=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,i)=>{const{x:o,y:s}=Dd(i,t).positionAbsolute;return Oz(r,Tg({x:o,y:s,width:i.width||0,height:i.height||0}))},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return $z(n)},Gz=(e,t,[n,r,i]=[0,0,1],o=!1,s=!1,a=[0,0])=>{const l={x:(t.x-n)/i,y:(t.y-r)/i,width:t.width/i,height:t.height/i},c=[];return e.forEach(u=>{const{width:d,height:f,selectable:h=!0,hidden:p=!1}=u;if(s&&!h||p)return!1;const{positionAbsolute:m}=Dd(u,a),_={x:m.x,y:m.y,width:d||0,height:f||0},v=s3(l,_),y=typeof d>"u"||typeof f>"u"||d===null||f===null,g=o&&v>0,b=(d||0)*(f||0);(y||g||v>=b||u.dragging)&&c.push(u)}),c},$T=(e,t)=>{const n=e.map(r=>r.id);return t.filter(r=>n.includes(r.source)||n.includes(r.target))},Hz=(e,t,n,r,i,o=.1)=>{const s=t/(e.width*(1+o)),a=n/(e.height*(1+o)),l=Math.min(s,a),c=mf(l,r,i),u=e.x+e.width/2,d=e.y+e.height/2,f=t/2-u*c,h=n/2-d*c;return{x:f,y:h,zoom:c}},ac=(e,t=0)=>e.transition().duration(t);function g8(e,t,n,r){return(t[n]||[]).reduce((i,o)=>{var s,a;return`${e.id}-${o.id}-${n}`!==r&&i.push({id:o.id||null,type:n,nodeId:e.id,x:(((s=e.positionAbsolute)==null?void 0:s.x)??0)+o.x+o.width/2,y:(((a=e.positionAbsolute)==null?void 0:a.y)??0)+o.y+o.height/2}),i},[])}function wye(e,t,n,r,i,o){const{x:s,y:a}=fl(e),c=t.elementsFromPoint(s,a).find(p=>p.classList.contains("react-flow__handle"));if(c){const p=c.getAttribute("data-nodeid");if(p){const m=NT(void 0,c),_=c.getAttribute("data-handleid"),v=o({nodeId:p,id:_,type:m});if(v){const y=i.find(g=>g.nodeId===p&&g.type===m&&g.id===_);return{handle:{id:_,type:m,nodeId:p,x:(y==null?void 0:y.x)||n.x,y:(y==null?void 0:y.y)||n.y},validHandleResult:v}}}}let u=[],d=1/0;if(i.forEach(p=>{const m=Math.sqrt((p.x-n.x)**2+(p.y-n.y)**2);if(m<=r){const _=o(p);m<=d&&(mp.isValid),h=u.some(({handle:p})=>p.type==="target");return u.find(({handle:p,validHandleResult:m})=>h?p.type==="target":f?m.isValid:!0)||u[0]}const Cye={source:null,target:null,sourceHandle:null,targetHandle:null},Wz=()=>({handleDomNode:null,isValid:!1,connection:Cye,endHandle:null});function qz(e,t,n,r,i,o,s){const a=i==="target",l=s.querySelector(`.react-flow__handle[data-id="${e==null?void 0:e.nodeId}-${e==null?void 0:e.id}-${e==null?void 0:e.type}"]`),c={...Wz(),handleDomNode:l};if(l){const u=NT(void 0,l),d=l.getAttribute("data-nodeid"),f=l.getAttribute("data-handleid"),h=l.classList.contains("connectable"),p=l.classList.contains("connectableend"),m={source:a?d:n,sourceHandle:a?f:r,target:a?n:d,targetHandle:a?r:f};c.connection=m,h&&p&&(t===iu.Strict?a&&u==="source"||!a&&u==="target":d!==n||f!==r)&&(c.endHandle={nodeId:d,handleId:f,type:u},c.isValid=o(m))}return c}function Eye({nodes:e,nodeId:t,handleId:n,handleType:r}){return e.reduce((i,o)=>{if(o[Tn]){const{handleBounds:s}=o[Tn];let a=[],l=[];s&&(a=g8(o,s,"source",`${t}-${n}-${r}`),l=g8(o,s,"target",`${t}-${n}-${r}`)),i.push(...a,...l)}return i},[])}function NT(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function lw(e){e==null||e.classList.remove("valid","connecting","react-flow__handle-valid","react-flow__handle-connecting")}function Tye(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function Kz({event:e,handleId:t,nodeId:n,onConnect:r,isTarget:i,getState:o,setState:s,isValidConnection:a,edgeUpdaterType:l,onEdgeUpdateEnd:c}){const u=Rz(e.target),{connectionMode:d,domNode:f,autoPanOnConnect:h,connectionRadius:p,onConnectStart:m,panBy:_,getNodes:v,cancelConnection:y}=o();let g=0,b;const{x:S,y:w}=fl(e),C=u==null?void 0:u.elementFromPoint(S,w),x=NT(l,C),k=f==null?void 0:f.getBoundingClientRect();if(!k||!x)return;let A,R=fl(e,k),L=!1,M=null,E=!1,P=null;const O=Eye({nodes:v(),nodeId:n,handleId:t,handleType:x}),F=()=>{if(!h)return;const[N,z]=Mz(R,k);_({x:N,y:z}),g=requestAnimationFrame(F)};s({connectionPosition:R,connectionStatus:null,connectionNodeId:n,connectionHandleId:t,connectionHandleType:x,connectionStartHandle:{nodeId:n,handleId:t,type:x},connectionEndHandle:null}),m==null||m(e,{nodeId:n,handleId:t,handleType:x});function $(N){const{transform:z}=o();R=fl(N,k);const{handle:V,validHandleResult:H}=wye(N,u,u3(R,z,!1,[1,1]),p,O,X=>qz(X,d,n,t,i?"target":"source",a,u));if(b=V,L||(F(),L=!0),P=H.handleDomNode,M=H.connection,E=H.isValid,s({connectionPosition:b&&E?Uz({x:b.x,y:b.y},z):R,connectionStatus:Tye(!!b,E),connectionEndHandle:H.endHandle}),!b&&!E&&!P)return lw(A);M.source!==M.target&&P&&(lw(A),A=P,P.classList.add("connecting","react-flow__handle-connecting"),P.classList.toggle("valid",E),P.classList.toggle("react-flow__handle-valid",E))}function D(N){var z,V;(b||P)&&M&&E&&(r==null||r(M)),(V=(z=o()).onConnectEnd)==null||V.call(z,N),l&&(c==null||c(N)),lw(A),y(),cancelAnimationFrame(g),L=!1,E=!1,M=null,P=null,u.removeEventListener("mousemove",$),u.removeEventListener("mouseup",D),u.removeEventListener("touchmove",$),u.removeEventListener("touchend",D)}u.addEventListener("mousemove",$),u.addEventListener("mouseup",D),u.addEventListener("touchmove",$),u.addEventListener("touchend",D)}const m8=()=>!0,Aye=e=>({connectionStartHandle:e.connectionStartHandle,connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName}),kye=(e,t,n)=>r=>{const{connectionStartHandle:i,connectionEndHandle:o,connectionClickStartHandle:s}=r;return{connecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.handleId)===t&&(i==null?void 0:i.type)===n||(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.handleId)===t&&(o==null?void 0:o.type)===n,clickConnecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.handleId)===t&&(s==null?void 0:s.type)===n}},Xz=I.forwardRef(({type:e="source",position:t=Te.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,id:s,onConnect:a,children:l,className:c,onMouseDown:u,onTouchStart:d,...f},h)=>{var k,A;const p=s||null,m=e==="target",_=Gn(),v=yye(),{connectOnClick:y,noPanClassName:g}=rn(Aye,ti),{connecting:b,clickConnecting:S}=rn(kye(v,p,e),ti);v||(A=(k=_.getState()).onError)==null||A.call(k,"010",fa.error010());const w=R=>{const{defaultEdgeOptions:L,onConnect:M,hasDefaultEdges:E}=_.getState(),P={...L,...R};if(E){const{edges:O,setEdges:F}=_.getState();F(Wh(P,O))}M==null||M(P),a==null||a(P)},C=R=>{if(!v)return;const L=Fz(R);i&&(L&&R.button===0||!L)&&Kz({event:R,handleId:p,nodeId:v,onConnect:w,isTarget:m,getState:_.getState,setState:_.setState,isValidConnection:n||_.getState().isValidConnection||m8}),L?u==null||u(R):d==null||d(R)},x=R=>{const{onClickConnectStart:L,onClickConnectEnd:M,connectionClickStartHandle:E,connectionMode:P,isValidConnection:O}=_.getState();if(!v||!E&&!i)return;if(!E){L==null||L(R,{nodeId:v,handleId:p,handleType:e}),_.setState({connectionClickStartHandle:{nodeId:v,type:e,handleId:p}});return}const F=Rz(R.target),$=n||O||m8,{connection:D,isValid:N}=qz({nodeId:v,id:p,type:e},P,E.nodeId,E.handleId||null,E.type,$,F);N&&w(D),M==null||M(R),_.setState({connectionClickStartHandle:null})};return Q.createElement("div",{"data-handleid":p,"data-nodeid":v,"data-handlepos":t,"data-id":`${v}-${p}-${e}`,className:no(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",g,c,{source:!m,target:m,connectable:r,connectablestart:i,connectableend:o,connecting:S,connectionindicator:r&&(i&&!b||o&&b)}]),onMouseDown:C,onTouchStart:C,onClick:y?x:void 0,ref:h,...f},l)});Xz.displayName="Handle";var D1=I.memo(Xz);const Qz=({data:e,isConnectable:t,targetPosition:n=Te.Top,sourcePosition:r=Te.Bottom})=>Q.createElement(Q.Fragment,null,Q.createElement(D1,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,Q.createElement(D1,{type:"source",position:r,isConnectable:t}));Qz.displayName="DefaultNode";var d3=I.memo(Qz);const Yz=({data:e,isConnectable:t,sourcePosition:n=Te.Bottom})=>Q.createElement(Q.Fragment,null,e==null?void 0:e.label,Q.createElement(D1,{type:"source",position:n,isConnectable:t}));Yz.displayName="InputNode";var Zz=I.memo(Yz);const Jz=({data:e,isConnectable:t,targetPosition:n=Te.Top})=>Q.createElement(Q.Fragment,null,Q.createElement(D1,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label);Jz.displayName="OutputNode";var ej=I.memo(Jz);const FT=()=>null;FT.displayName="GroupNode";const Pye=e=>({selectedNodes:e.getNodes().filter(t=>t.selected),selectedEdges:e.edges.filter(t=>t.selected)}),ty=e=>e.id;function Iye(e,t){return ti(e.selectedNodes.map(ty),t.selectedNodes.map(ty))&&ti(e.selectedEdges.map(ty),t.selectedEdges.map(ty))}const tj=I.memo(({onSelectionChange:e})=>{const t=Gn(),{selectedNodes:n,selectedEdges:r}=rn(Pye,Iye);return I.useEffect(()=>{const i={nodes:n,edges:r};e==null||e(i),t.getState().onSelectionChange.forEach(o=>o(i))},[n,r,e]),null});tj.displayName="SelectionListener";const Mye=e=>!!e.onSelectionChange;function Rye({onSelectionChange:e}){const t=rn(Mye);return e||t?Q.createElement(tj,{onSelectionChange:e}):null}const Oye=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset});function $u(e,t){I.useEffect(()=>{typeof e<"u"&&t(e)},[e])}function je(e,t,n){I.useEffect(()=>{typeof t<"u"&&n({[e]:t})},[t])}const $ye=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:i,onConnectStart:o,onConnectEnd:s,onClickConnectStart:a,onClickConnectEnd:l,nodesDraggable:c,nodesConnectable:u,nodesFocusable:d,edgesFocusable:f,edgesUpdatable:h,elevateNodesOnSelect:p,minZoom:m,maxZoom:_,nodeExtent:v,onNodesChange:y,onEdgesChange:g,elementsSelectable:b,connectionMode:S,snapGrid:w,snapToGrid:C,translateExtent:x,connectOnClick:k,defaultEdgeOptions:A,fitView:R,fitViewOptions:L,onNodesDelete:M,onEdgesDelete:E,onNodeDrag:P,onNodeDragStart:O,onNodeDragStop:F,onSelectionDrag:$,onSelectionDragStart:D,onSelectionDragStop:N,noPanClassName:z,nodeOrigin:V,rfId:H,autoPanOnConnect:X,autoPanOnNodeDrag:te,onError:ee,connectionRadius:j,isValidConnection:q,nodeDragThreshold:Z})=>{const{setNodes:oe,setEdges:be,setDefaultNodesAndEdges:Me,setMinZoom:lt,setMaxZoom:Le,setTranslateExtent:we,setNodeExtent:pt,reset:vt}=rn(Oye,ti),Ce=Gn();return I.useEffect(()=>{const ii=r==null?void 0:r.map(sn=>({...sn,...A}));return Me(n,ii),()=>{vt()}},[]),je("defaultEdgeOptions",A,Ce.setState),je("connectionMode",S,Ce.setState),je("onConnect",i,Ce.setState),je("onConnectStart",o,Ce.setState),je("onConnectEnd",s,Ce.setState),je("onClickConnectStart",a,Ce.setState),je("onClickConnectEnd",l,Ce.setState),je("nodesDraggable",c,Ce.setState),je("nodesConnectable",u,Ce.setState),je("nodesFocusable",d,Ce.setState),je("edgesFocusable",f,Ce.setState),je("edgesUpdatable",h,Ce.setState),je("elementsSelectable",b,Ce.setState),je("elevateNodesOnSelect",p,Ce.setState),je("snapToGrid",C,Ce.setState),je("snapGrid",w,Ce.setState),je("onNodesChange",y,Ce.setState),je("onEdgesChange",g,Ce.setState),je("connectOnClick",k,Ce.setState),je("fitViewOnInit",R,Ce.setState),je("fitViewOnInitOptions",L,Ce.setState),je("onNodesDelete",M,Ce.setState),je("onEdgesDelete",E,Ce.setState),je("onNodeDrag",P,Ce.setState),je("onNodeDragStart",O,Ce.setState),je("onNodeDragStop",F,Ce.setState),je("onSelectionDrag",$,Ce.setState),je("onSelectionDragStart",D,Ce.setState),je("onSelectionDragStop",N,Ce.setState),je("noPanClassName",z,Ce.setState),je("nodeOrigin",V,Ce.setState),je("rfId",H,Ce.setState),je("autoPanOnConnect",X,Ce.setState),je("autoPanOnNodeDrag",te,Ce.setState),je("onError",ee,Ce.setState),je("connectionRadius",j,Ce.setState),je("isValidConnection",q,Ce.setState),je("nodeDragThreshold",Z,Ce.setState),$u(e,oe),$u(t,be),$u(m,lt),$u(_,Le),$u(x,we),$u(v,pt),null},y8={display:"none"},Nye={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},nj="react-flow__node-desc",rj="react-flow__edge-desc",Fye="react-flow__aria-live",Dye=e=>e.ariaLiveMessage;function Lye({rfId:e}){const t=rn(Dye);return Q.createElement("div",{id:`${Fye}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:Nye},t)}function Bye({rfId:e,disableKeyboardA11y:t}){return Q.createElement(Q.Fragment,null,Q.createElement("div",{id:`${nj}-${e}`,style:y8},"Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "),Q.createElement("div",{id:`${rj}-${e}`,style:y8},"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."),!t&&Q.createElement(Lye,{rfId:e}))}var Ag=(e=null,t={actInsideInputWithModifier:!0})=>{const[n,r]=I.useState(!1),i=I.useRef(!1),o=I.useRef(new Set([])),[s,a]=I.useMemo(()=>{if(e!==null){const c=(Array.isArray(e)?e:[e]).filter(d=>typeof d=="string").map(d=>d.split("+")),u=c.reduce((d,f)=>d.concat(...f),[]);return[c,u]}return[[],[]]},[e]);return I.useEffect(()=>{const l=typeof document<"u"?document:null,c=(t==null?void 0:t.target)||l;if(e!==null){const u=h=>{if(i.current=h.ctrlKey||h.metaKey||h.shiftKey,(!i.current||i.current&&!t.actInsideInputWithModifier)&&a3(h))return!1;const m=b8(h.code,a);o.current.add(h[m]),v8(s,o.current,!1)&&(h.preventDefault(),r(!0))},d=h=>{if((!i.current||i.current&&!t.actInsideInputWithModifier)&&a3(h))return!1;const m=b8(h.code,a);v8(s,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(h[m]),h.key==="Meta"&&o.current.clear(),i.current=!1},f=()=>{o.current.clear(),r(!1)};return c==null||c.addEventListener("keydown",u),c==null||c.addEventListener("keyup",d),window.addEventListener("blur",f),()=>{c==null||c.removeEventListener("keydown",u),c==null||c.removeEventListener("keyup",d),window.removeEventListener("blur",f)}}},[e,r]),n};function v8(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function b8(e,t){return t.includes(e)?"code":"key"}function ij(e,t,n,r){var s,a;if(!e.parentNode)return n;const i=t.get(e.parentNode),o=Dd(i,r);return ij(i,t,{x:(n.x??0)+o.x,y:(n.y??0)+o.y,z:(((s=i[Tn])==null?void 0:s.z)??0)>(n.z??0)?((a=i[Tn])==null?void 0:a.z)??0:n.z??0},r)}function oj(e,t,n){e.forEach(r=>{var i;if(r.parentNode&&!e.has(r.parentNode))throw new Error(`Parent node ${r.parentNode} not found`);if(r.parentNode||n!=null&&n[r.id]){const{x:o,y:s,z:a}=ij(r,e,{...r.position,z:((i=r[Tn])==null?void 0:i.z)??0},t);r.positionAbsolute={x:o,y:s},r[Tn].z=a,n!=null&&n[r.id]&&(r[Tn].isParent=!0)}})}function cw(e,t,n,r){const i=new Map,o={},s=r?1e3:0;return e.forEach(a=>{var d;const l=(Xi(a.zIndex)?a.zIndex:0)+(a.selected?s:0),c=t.get(a.id),u={width:c==null?void 0:c.width,height:c==null?void 0:c.height,...a,positionAbsolute:{x:a.position.x,y:a.position.y}};a.parentNode&&(u.parentNode=a.parentNode,o[a.parentNode]=!0),Object.defineProperty(u,Tn,{enumerable:!1,value:{handleBounds:(d=c==null?void 0:c[Tn])==null?void 0:d.handleBounds,z:l}}),i.set(a.id,u)}),oj(i,n,o),i}function sj(e,t={}){const{getNodes:n,width:r,height:i,minZoom:o,maxZoom:s,d3Zoom:a,d3Selection:l,fitViewOnInitDone:c,fitViewOnInit:u,nodeOrigin:d}=e(),f=t.initial&&!c&&u;if(a&&l&&(f||!t.initial)){const p=n().filter(_=>{var y;const v=t.includeHiddenNodes?_.width&&_.height:!_.hidden;return(y=t.nodes)!=null&&y.length?v&&t.nodes.some(g=>g.id===_.id):v}),m=p.every(_=>_.width&&_.height);if(p.length>0&&m){const _=OT(p,d),{x:v,y,zoom:g}=Hz(_,r,i,t.minZoom??o,t.maxZoom??s,t.padding??.1),b=dl.translate(v,y).scale(g);return typeof t.duration=="number"&&t.duration>0?a.transform(ac(l,t.duration),b):a.transform(l,b),!0}}return!1}function zye(e,t){return e.forEach(n=>{const r=t.get(n.id);r&&t.set(r.id,{...r,[Tn]:r[Tn],selected:n.selected})}),new Map(t)}function jye(e,t){return t.map(n=>{const r=e.find(i=>i.id===n.id);return r&&(n.selected=r.selected),n})}function ny({changedNodes:e,changedEdges:t,get:n,set:r}){const{nodeInternals:i,edges:o,onNodesChange:s,onEdgesChange:a,hasDefaultNodes:l,hasDefaultEdges:c}=n();e!=null&&e.length&&(l&&r({nodeInternals:zye(e,i)}),s==null||s(e)),t!=null&&t.length&&(c&&r({edges:jye(t,o)}),a==null||a(t))}const Nu=()=>{},Vye={zoomIn:Nu,zoomOut:Nu,zoomTo:Nu,getZoom:()=>1,setViewport:Nu,getViewport:()=>({x:0,y:0,zoom:1}),fitView:()=>!1,setCenter:Nu,fitBounds:Nu,project:e=>e,screenToFlowPosition:e=>e,flowToScreenPosition:e=>e,viewportInitialized:!1},Uye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection}),Gye=()=>{const e=Gn(),{d3Zoom:t,d3Selection:n}=rn(Uye,ti);return I.useMemo(()=>n&&t?{zoomIn:i=>t.scaleBy(ac(n,i==null?void 0:i.duration),1.2),zoomOut:i=>t.scaleBy(ac(n,i==null?void 0:i.duration),1/1.2),zoomTo:(i,o)=>t.scaleTo(ac(n,o==null?void 0:o.duration),i),getZoom:()=>e.getState().transform[2],setViewport:(i,o)=>{const[s,a,l]=e.getState().transform,c=dl.translate(i.x??s,i.y??a).scale(i.zoom??l);t.transform(ac(n,o==null?void 0:o.duration),c)},getViewport:()=>{const[i,o,s]=e.getState().transform;return{x:i,y:o,zoom:s}},fitView:i=>sj(e.getState,i),setCenter:(i,o,s)=>{const{width:a,height:l,maxZoom:c}=e.getState(),u=typeof(s==null?void 0:s.zoom)<"u"?s.zoom:c,d=a/2-i*u,f=l/2-o*u,h=dl.translate(d,f).scale(u);t.transform(ac(n,s==null?void 0:s.duration),h)},fitBounds:(i,o)=>{const{width:s,height:a,minZoom:l,maxZoom:c}=e.getState(),{x:u,y:d,zoom:f}=Hz(i,s,a,l,c,(o==null?void 0:o.padding)??.1),h=dl.translate(u,d).scale(f);t.transform(ac(n,o==null?void 0:o.duration),h)},project:i=>{const{transform:o,snapToGrid:s,snapGrid:a}=e.getState();return console.warn("[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position"),u3(i,o,s,a)},screenToFlowPosition:i=>{const{transform:o,snapToGrid:s,snapGrid:a,domNode:l}=e.getState();if(!l)return i;const{x:c,y:u}=l.getBoundingClientRect(),d={x:i.x-c,y:i.y-u};return u3(d,o,s,a)},flowToScreenPosition:i=>{const{transform:o,domNode:s}=e.getState();if(!s)return i;const{x:a,y:l}=s.getBoundingClientRect(),c=Uz(i,o);return{x:c.x+a,y:c.y+l}},viewportInitialized:!0}:Vye,[t,n])};function aj(){const e=Gye(),t=Gn(),n=I.useCallback(()=>t.getState().getNodes().map(m=>({...m})),[]),r=I.useCallback(m=>t.getState().nodeInternals.get(m),[]),i=I.useCallback(()=>{const{edges:m=[]}=t.getState();return m.map(_=>({..._}))},[]),o=I.useCallback(m=>{const{edges:_=[]}=t.getState();return _.find(v=>v.id===m)},[]),s=I.useCallback(m=>{const{getNodes:_,setNodes:v,hasDefaultNodes:y,onNodesChange:g}=t.getState(),b=_(),S=typeof m=="function"?m(b):m;if(y)v(S);else if(g){const w=S.length===0?b.map(C=>({type:"remove",id:C.id})):S.map(C=>({item:C,type:"reset"}));g(w)}},[]),a=I.useCallback(m=>{const{edges:_=[],setEdges:v,hasDefaultEdges:y,onEdgesChange:g}=t.getState(),b=typeof m=="function"?m(_):m;if(y)v(b);else if(g){const S=b.length===0?_.map(w=>({type:"remove",id:w.id})):b.map(w=>({item:w,type:"reset"}));g(S)}},[]),l=I.useCallback(m=>{const _=Array.isArray(m)?m:[m],{getNodes:v,setNodes:y,hasDefaultNodes:g,onNodesChange:b}=t.getState();if(g){const w=[...v(),..._];y(w)}else if(b){const S=_.map(w=>({item:w,type:"add"}));b(S)}},[]),c=I.useCallback(m=>{const _=Array.isArray(m)?m:[m],{edges:v=[],setEdges:y,hasDefaultEdges:g,onEdgesChange:b}=t.getState();if(g)y([...v,..._]);else if(b){const S=_.map(w=>({item:w,type:"add"}));b(S)}},[]),u=I.useCallback(()=>{const{getNodes:m,edges:_=[],transform:v}=t.getState(),[y,g,b]=v;return{nodes:m().map(S=>({...S})),edges:_.map(S=>({...S})),viewport:{x:y,y:g,zoom:b}}},[]),d=I.useCallback(({nodes:m,edges:_})=>{const{nodeInternals:v,getNodes:y,edges:g,hasDefaultNodes:b,hasDefaultEdges:S,onNodesDelete:w,onEdgesDelete:C,onNodesChange:x,onEdgesChange:k}=t.getState(),A=(m||[]).map(P=>P.id),R=(_||[]).map(P=>P.id),L=y().reduce((P,O)=>{const F=!A.includes(O.id)&&O.parentNode&&P.find(D=>D.id===O.parentNode);return(typeof O.deletable=="boolean"?O.deletable:!0)&&(A.includes(O.id)||F)&&P.push(O),P},[]),M=g.filter(P=>typeof P.deletable=="boolean"?P.deletable:!0),E=M.filter(P=>R.includes(P.id));if(L||E){const P=$T(L,M),O=[...E,...P],F=O.reduce(($,D)=>($.includes(D.id)||$.push(D.id),$),[]);if((S||b)&&(S&&t.setState({edges:g.filter($=>!F.includes($.id))}),b&&(L.forEach($=>{v.delete($.id)}),t.setState({nodeInternals:new Map(v)}))),F.length>0&&(C==null||C(O),k&&k(F.map($=>({id:$,type:"remove"})))),L.length>0&&(w==null||w(L),x)){const $=L.map(D=>({id:D.id,type:"remove"}));x($)}}},[]),f=I.useCallback(m=>{const _=cye(m),v=_?null:t.getState().nodeInternals.get(m.id);return[_?m:u8(v),v,_]},[]),h=I.useCallback((m,_=!0,v)=>{const[y,g,b]=f(m);return y?(v||t.getState().getNodes()).filter(S=>{if(!b&&(S.id===g.id||!S.positionAbsolute))return!1;const w=u8(S),C=s3(w,y);return _&&C>0||C>=y.width*y.height}):[]},[]),p=I.useCallback((m,_,v=!0)=>{const[y]=f(m);if(!y)return!1;const g=s3(y,_);return v&&g>0||g>=y.width*y.height},[]);return I.useMemo(()=>({...e,getNodes:n,getNode:r,getEdges:i,getEdge:o,setNodes:s,setEdges:a,addNodes:l,addEdges:c,toObject:u,deleteElements:d,getIntersectingNodes:h,isNodeIntersecting:p}),[e,n,r,i,o,s,a,l,c,u,d,h,p])}const Hye={actInsideInputWithModifier:!1};var Wye=({deleteKeyCode:e,multiSelectionKeyCode:t})=>{const n=Gn(),{deleteElements:r}=aj(),i=Ag(e,Hye),o=Ag(t);I.useEffect(()=>{if(i){const{edges:s,getNodes:a}=n.getState(),l=a().filter(u=>u.selected),c=s.filter(u=>u.selected);r({nodes:l,edges:c}),n.setState({nodesSelectionActive:!1})}},[i]),I.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])};function qye(e){const t=Gn();I.useEffect(()=>{let n;const r=()=>{var o,s;if(!e.current)return;const i=AT(e.current);(i.height===0||i.width===0)&&((s=(o=t.getState()).onError)==null||s.call(o,"004",fa.error004())),t.setState({width:i.width||500,height:i.height||500})};return r(),window.addEventListener("resize",r),e.current&&(n=new ResizeObserver(()=>r()),n.observe(e.current)),()=>{window.removeEventListener("resize",r),n&&e.current&&n.unobserve(e.current)}},[])}const DT={position:"absolute",width:"100%",height:"100%",top:0,left:0},Kye=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,ry=e=>({x:e.x,y:e.y,zoom:e.k}),Fu=(e,t)=>e.target.closest(`.${t}`),_8=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),S8=e=>{const t=e.ctrlKey&&$1()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t},Xye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection,d3ZoomHandler:e.d3ZoomHandler,userSelectionActive:e.userSelectionActive}),Qye=({onMove:e,onMoveStart:t,onMoveEnd:n,onPaneContextMenu:r,zoomOnScroll:i=!0,zoomOnPinch:o=!0,panOnScroll:s=!1,panOnScrollSpeed:a=.5,panOnScrollMode:l=wc.Free,zoomOnDoubleClick:c=!0,elementsSelectable:u,panOnDrag:d=!0,defaultViewport:f,translateExtent:h,minZoom:p,maxZoom:m,zoomActivationKeyCode:_,preventScrolling:v=!0,children:y,noWheelClassName:g,noPanClassName:b})=>{const S=I.useRef(),w=Gn(),C=I.useRef(!1),x=I.useRef(!1),k=I.useRef(null),A=I.useRef({x:0,y:0,zoom:0}),{d3Zoom:R,d3Selection:L,d3ZoomHandler:M,userSelectionActive:E}=rn(Xye,ti),P=Ag(_),O=I.useRef(0),F=I.useRef(!1),$=I.useRef();return qye(k),I.useEffect(()=>{if(k.current){const D=k.current.getBoundingClientRect(),N=nye().scaleExtent([p,m]).translateExtent(h),z=xo(k.current).call(N),V=dl.translate(f.x,f.y).scale(mf(f.zoom,p,m)),H=[[0,0],[D.width,D.height]],X=N.constrain()(V,H,h);N.transform(z,X),N.wheelDelta(S8),w.setState({d3Zoom:N,d3Selection:z,d3ZoomHandler:z.on("wheel.zoom"),transform:[X.x,X.y,X.k],domNode:k.current.closest(".react-flow")})}},[]),I.useEffect(()=>{L&&R&&(s&&!P&&!E?L.on("wheel.zoom",D=>{if(Fu(D,g))return!1;D.preventDefault(),D.stopImmediatePropagation();const N=L.property("__zoom").k||1,z=$1();if(D.ctrlKey&&o&&z){const Z=Jo(D),oe=S8(D),be=N*Math.pow(2,oe);R.scaleTo(L,be,Z,D);return}const V=D.deltaMode===1?20:1;let H=l===wc.Vertical?0:D.deltaX*V,X=l===wc.Horizontal?0:D.deltaY*V;!z&&D.shiftKey&&l!==wc.Vertical&&(H=D.deltaY*V,X=0),R.translateBy(L,-(H/N)*a,-(X/N)*a,{internal:!0});const te=ry(L.property("__zoom")),{onViewportChangeStart:ee,onViewportChange:j,onViewportChangeEnd:q}=w.getState();clearTimeout($.current),F.current||(F.current=!0,t==null||t(D,te),ee==null||ee(te)),F.current&&(e==null||e(D,te),j==null||j(te),$.current=setTimeout(()=>{n==null||n(D,te),q==null||q(te),F.current=!1},150))},{passive:!1}):typeof M<"u"&&L.on("wheel.zoom",function(D,N){if(!v||Fu(D,g))return null;D.preventDefault(),M.call(this,D,N)},{passive:!1}))},[E,s,l,L,R,M,P,o,v,g,t,e,n]),I.useEffect(()=>{R&&R.on("start",D=>{var V,H;if(!D.sourceEvent||D.sourceEvent.internal)return null;O.current=(V=D.sourceEvent)==null?void 0:V.button;const{onViewportChangeStart:N}=w.getState(),z=ry(D.transform);C.current=!0,A.current=z,((H=D.sourceEvent)==null?void 0:H.type)==="mousedown"&&w.setState({paneDragging:!0}),N==null||N(z),t==null||t(D.sourceEvent,z)})},[R,t]),I.useEffect(()=>{R&&(E&&!C.current?R.on("zoom",null):E||R.on("zoom",D=>{var z;const{onViewportChange:N}=w.getState();if(w.setState({transform:[D.transform.x,D.transform.y,D.transform.k]}),x.current=!!(r&&_8(d,O.current??0)),(e||N)&&!((z=D.sourceEvent)!=null&&z.internal)){const V=ry(D.transform);N==null||N(V),e==null||e(D.sourceEvent,V)}}))},[E,R,e,d,r]),I.useEffect(()=>{R&&R.on("end",D=>{if(!D.sourceEvent||D.sourceEvent.internal)return null;const{onViewportChangeEnd:N}=w.getState();if(C.current=!1,w.setState({paneDragging:!1}),r&&_8(d,O.current??0)&&!x.current&&r(D.sourceEvent),x.current=!1,(n||N)&&Kye(A.current,D.transform)){const z=ry(D.transform);A.current=z,clearTimeout(S.current),S.current=setTimeout(()=>{N==null||N(z),n==null||n(D.sourceEvent,z)},s?150:0)}})},[R,s,d,n,r]),I.useEffect(()=>{R&&R.filter(D=>{const N=P||i,z=o&&D.ctrlKey;if((d===!0||Array.isArray(d)&&d.includes(1))&&D.button===1&&D.type==="mousedown"&&(Fu(D,"react-flow__node")||Fu(D,"react-flow__edge")))return!0;if(!d&&!N&&!s&&!c&&!o||E||!c&&D.type==="dblclick"||Fu(D,g)&&D.type==="wheel"||Fu(D,b)&&(D.type!=="wheel"||s&&D.type==="wheel"&&!P)||!o&&D.ctrlKey&&D.type==="wheel"||!N&&!s&&!z&&D.type==="wheel"||!d&&(D.type==="mousedown"||D.type==="touchstart")||Array.isArray(d)&&!d.includes(D.button)&&(D.type==="mousedown"||D.type==="touchstart"))return!1;const V=Array.isArray(d)&&d.includes(D.button)||!D.button||D.button<=1;return(!D.ctrlKey||D.type==="wheel")&&V})},[E,R,i,o,s,c,d,u,P]),Q.createElement("div",{className:"react-flow__renderer",ref:k,style:DT},y)},Yye=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Zye(){const{userSelectionActive:e,userSelectionRect:t}=rn(Yye,ti);return e&&t?Q.createElement("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}function x8(e,t){const n=e.find(r=>r.id===t.parentNode);if(n){const r=t.position.x+t.width-n.width,i=t.position.y+t.height-n.height;if(r>0||i>0||t.position.x<0||t.position.y<0){if(n.style={...n.style},n.style.width=n.style.width??n.width,n.style.height=n.style.height??n.height,r>0&&(n.style.width+=r),i>0&&(n.style.height+=i),t.position.x<0){const o=Math.abs(t.position.x);n.position.x=n.position.x-o,n.style.width+=o,t.position.x=0}if(t.position.y<0){const o=Math.abs(t.position.y);n.position.y=n.position.y-o,n.style.height+=o,t.position.y=0}n.width=n.style.width,n.height=n.style.height}}}function lj(e,t){if(e.some(r=>r.type==="reset"))return e.filter(r=>r.type==="reset").map(r=>r.item);const n=e.filter(r=>r.type==="add").map(r=>r.item);return t.reduce((r,i)=>{const o=e.filter(a=>a.id===i.id);if(o.length===0)return r.push(i),r;const s={...i};for(const a of o)if(a)switch(a.type){case"select":{s.selected=a.selected;break}case"position":{typeof a.position<"u"&&(s.position=a.position),typeof a.positionAbsolute<"u"&&(s.positionAbsolute=a.positionAbsolute),typeof a.dragging<"u"&&(s.dragging=a.dragging),s.expandParent&&x8(r,s);break}case"dimensions":{typeof a.dimensions<"u"&&(s.width=a.dimensions.width,s.height=a.dimensions.height),typeof a.updateStyle<"u"&&(s.style={...s.style||{},...a.dimensions}),typeof a.resizing=="boolean"&&(s.resizing=a.resizing),s.expandParent&&x8(r,s);break}case"remove":return r}return r.push(s),r},n)}function lc(e,t){return lj(e,t)}function Ql(e,t){return lj(e,t)}const ja=(e,t)=>({id:e,type:"select",selected:t});function cd(e,t){return e.reduce((n,r)=>{const i=t.includes(r.id);return!r.selected&&i?(r.selected=!0,n.push(ja(r.id,!0))):r.selected&&!i&&(r.selected=!1,n.push(ja(r.id,!1))),n},[])}const uw=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},Jye=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging}),cj=I.memo(({isSelecting:e,selectionMode:t=Cl.Full,panOnDrag:n,onSelectionStart:r,onSelectionEnd:i,onPaneClick:o,onPaneContextMenu:s,onPaneScroll:a,onPaneMouseEnter:l,onPaneMouseMove:c,onPaneMouseLeave:u,children:d})=>{const f=I.useRef(null),h=Gn(),p=I.useRef(0),m=I.useRef(0),_=I.useRef(),{userSelectionActive:v,elementsSelectable:y,dragging:g}=rn(Jye,ti),b=()=>{h.setState({userSelectionActive:!1,userSelectionRect:null}),p.current=0,m.current=0},S=M=>{o==null||o(M),h.getState().resetSelectedElements(),h.setState({nodesSelectionActive:!1})},w=M=>{if(Array.isArray(n)&&(n!=null&&n.includes(2))){M.preventDefault();return}s==null||s(M)},C=a?M=>a(M):void 0,x=M=>{const{resetSelectedElements:E,domNode:P}=h.getState();if(_.current=P==null?void 0:P.getBoundingClientRect(),!y||!e||M.button!==0||M.target!==f.current||!_.current)return;const{x:O,y:F}=fl(M,_.current);E(),h.setState({userSelectionRect:{width:0,height:0,startX:O,startY:F,x:O,y:F}}),r==null||r(M)},k=M=>{const{userSelectionRect:E,nodeInternals:P,edges:O,transform:F,onNodesChange:$,onEdgesChange:D,nodeOrigin:N,getNodes:z}=h.getState();if(!e||!_.current||!E)return;h.setState({userSelectionActive:!0,nodesSelectionActive:!1});const V=fl(M,_.current),H=E.startX??0,X=E.startY??0,te={...E,x:V.xoe.id),Z=j.map(oe=>oe.id);if(p.current!==Z.length){p.current=Z.length;const oe=cd(ee,Z);oe.length&&($==null||$(oe))}if(m.current!==q.length){m.current=q.length;const oe=cd(O,q);oe.length&&(D==null||D(oe))}h.setState({userSelectionRect:te})},A=M=>{if(M.button!==0)return;const{userSelectionRect:E}=h.getState();!v&&E&&M.target===f.current&&(S==null||S(M)),h.setState({nodesSelectionActive:p.current>0}),b(),i==null||i(M)},R=M=>{v&&(h.setState({nodesSelectionActive:p.current>0}),i==null||i(M)),b()},L=y&&(e||v);return Q.createElement("div",{className:no(["react-flow__pane",{dragging:g,selection:e}]),onClick:L?void 0:uw(S,f),onContextMenu:uw(w,f),onWheel:uw(C,f),onMouseEnter:L?void 0:l,onMouseDown:L?x:void 0,onMouseMove:L?k:c,onMouseUp:L?A:void 0,onMouseLeave:L?R:u,ref:f,style:DT},d,Q.createElement(Zye,null))});cj.displayName="Pane";function uj(e,t){if(!e.parentNode)return!1;const n=t.get(e.parentNode);return n?n.selected?!0:uj(n,t):!1}function w8(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n.current)return!1;r=r.parentElement}while(r);return!1}function eve(e,t,n,r){return Array.from(e.values()).filter(i=>(i.selected||i.id===r)&&(!i.parentNode||!uj(i,e))&&(i.draggable||t&&typeof i.draggable>"u")).map(i=>{var o,s;return{id:i.id,position:i.position||{x:0,y:0},positionAbsolute:i.positionAbsolute||{x:0,y:0},distance:{x:n.x-(((o=i.positionAbsolute)==null?void 0:o.x)??0),y:n.y-(((s=i.positionAbsolute)==null?void 0:s.y)??0)},delta:{x:0,y:0},extent:i.extent,parentNode:i.parentNode,width:i.width,height:i.height,expandParent:i.expandParent}})}function tve(e,t){return!t||t==="parent"?t:[t[0],[t[1][0]-(e.width||0),t[1][1]-(e.height||0)]]}function dj(e,t,n,r,i=[0,0],o){const s=tve(e,e.extent||r);let a=s;if(e.extent==="parent"&&!e.expandParent)if(e.parentNode&&e.width&&e.height){const u=n.get(e.parentNode),{x:d,y:f}=Dd(u,i).positionAbsolute;a=u&&Xi(d)&&Xi(f)&&Xi(u.width)&&Xi(u.height)?[[d+e.width*i[0],f+e.height*i[1]],[d+u.width-e.width+e.width*i[0],f+u.height-e.height+e.height*i[1]]]:a}else o==null||o("005",fa.error005()),a=s;else if(e.extent&&e.parentNode&&e.extent!=="parent"){const u=n.get(e.parentNode),{x:d,y:f}=Dd(u,i).positionAbsolute;a=[[e.extent[0][0]+d,e.extent[0][1]+f],[e.extent[1][0]+d,e.extent[1][1]+f]]}let l={x:0,y:0};if(e.parentNode){const u=n.get(e.parentNode);l=Dd(u,i).positionAbsolute}const c=a&&a!=="parent"?kT(t,a):t;return{position:{x:c.x-l.x,y:c.y-l.y},positionAbsolute:c}}function dw({nodeId:e,dragItems:t,nodeInternals:n}){const r=t.map(i=>({...n.get(i.id),position:i.position,positionAbsolute:i.positionAbsolute}));return[e?r.find(i=>i.id===e):r[0],r]}const C8=(e,t,n,r)=>{const i=t.querySelectorAll(e);if(!i||!i.length)return null;const o=Array.from(i),s=t.getBoundingClientRect(),a={x:s.width*r[0],y:s.height*r[1]};return o.map(l=>{const c=l.getBoundingClientRect();return{id:l.getAttribute("data-handleid"),position:l.getAttribute("data-handlepos"),x:(c.left-s.left-a.x)/n,y:(c.top-s.top-a.y)/n,...AT(l)}})};function vh(e,t,n){return n===void 0?n:r=>{const i=t().nodeInternals.get(e);i&&n(r,{...i})}}function f3({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:o,multiSelectionActive:s,nodeInternals:a,onError:l}=t.getState(),c=a.get(e);if(!c){l==null||l("012",fa.error012(e));return}t.setState({nodesSelectionActive:!1}),c.selected?(n||c.selected&&s)&&(o({nodes:[c],edges:[]}),requestAnimationFrame(()=>{var u;return(u=r==null?void 0:r.current)==null?void 0:u.blur()})):i([e])}function nve(){const e=Gn();return I.useCallback(({sourceEvent:n})=>{const{transform:r,snapGrid:i,snapToGrid:o}=e.getState(),s=n.touches?n.touches[0].clientX:n.clientX,a=n.touches?n.touches[0].clientY:n.clientY,l={x:(s-r[0])/r[2],y:(a-r[1])/r[2]};return{xSnapped:o?i[0]*Math.round(l.x/i[0]):l.x,ySnapped:o?i[1]*Math.round(l.y/i[1]):l.y,...l}},[])}function fw(e){return(t,n,r)=>e==null?void 0:e(t,r)}function fj({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,selectNodesOnDrag:s}){const a=Gn(),[l,c]=I.useState(!1),u=I.useRef([]),d=I.useRef({x:null,y:null}),f=I.useRef(0),h=I.useRef(null),p=I.useRef({x:0,y:0}),m=I.useRef(null),_=I.useRef(!1),v=I.useRef(!1),y=nve();return I.useEffect(()=>{if(e!=null&&e.current){const g=xo(e.current),b=({x:C,y:x})=>{const{nodeInternals:k,onNodeDrag:A,onSelectionDrag:R,updateNodePositions:L,nodeExtent:M,snapGrid:E,snapToGrid:P,nodeOrigin:O,onError:F}=a.getState();d.current={x:C,y:x};let $=!1,D={x:0,y:0,x2:0,y2:0};if(u.current.length>1&&M){const z=OT(u.current,O);D=Tg(z)}if(u.current=u.current.map(z=>{const V={x:C-z.distance.x,y:x-z.distance.y};P&&(V.x=E[0]*Math.round(V.x/E[0]),V.y=E[1]*Math.round(V.y/E[1]));const H=[[M[0][0],M[0][1]],[M[1][0],M[1][1]]];u.current.length>1&&M&&!z.extent&&(H[0][0]=z.positionAbsolute.x-D.x+M[0][0],H[1][0]=z.positionAbsolute.x+(z.width??0)-D.x2+M[1][0],H[0][1]=z.positionAbsolute.y-D.y+M[0][1],H[1][1]=z.positionAbsolute.y+(z.height??0)-D.y2+M[1][1]);const X=dj(z,V,k,H,O,F);return $=$||z.position.x!==X.position.x||z.position.y!==X.position.y,z.position=X.position,z.positionAbsolute=X.positionAbsolute,z}),!$)return;L(u.current,!0,!0),c(!0);const N=i?A:fw(R);if(N&&m.current){const[z,V]=dw({nodeId:i,dragItems:u.current,nodeInternals:k});N(m.current,z,V)}},S=()=>{if(!h.current)return;const[C,x]=Mz(p.current,h.current);if(C!==0||x!==0){const{transform:k,panBy:A}=a.getState();d.current.x=(d.current.x??0)-C/k[2],d.current.y=(d.current.y??0)-x/k[2],A({x:C,y:x})&&b(d.current)}f.current=requestAnimationFrame(S)},w=C=>{var O;const{nodeInternals:x,multiSelectionActive:k,nodesDraggable:A,unselectNodesAndEdges:R,onNodeDragStart:L,onSelectionDragStart:M}=a.getState();v.current=!0;const E=i?L:fw(M);(!s||!o)&&!k&&i&&((O=x.get(i))!=null&&O.selected||R()),i&&o&&s&&f3({id:i,store:a,nodeRef:e});const P=y(C);if(d.current=P,u.current=eve(x,A,P,i),E&&u.current){const[F,$]=dw({nodeId:i,dragItems:u.current,nodeInternals:x});E(C.sourceEvent,F,$)}};if(t)g.on(".drag",null);else{const C=fme().on("start",x=>{const{domNode:k,nodeDragThreshold:A}=a.getState();A===0&&w(x);const R=y(x);d.current=R,h.current=(k==null?void 0:k.getBoundingClientRect())||null,p.current=fl(x.sourceEvent,h.current)}).on("drag",x=>{var L,M;const k=y(x),{autoPanOnNodeDrag:A,nodeDragThreshold:R}=a.getState();if(!_.current&&v.current&&A&&(_.current=!0,S()),!v.current){const E=k.xSnapped-(((L=d==null?void 0:d.current)==null?void 0:L.x)??0),P=k.ySnapped-(((M=d==null?void 0:d.current)==null?void 0:M.y)??0);Math.sqrt(E*E+P*P)>R&&w(x)}(d.current.x!==k.xSnapped||d.current.y!==k.ySnapped)&&u.current&&v.current&&(m.current=x.sourceEvent,p.current=fl(x.sourceEvent,h.current),b(k))}).on("end",x=>{if(v.current&&(c(!1),_.current=!1,v.current=!1,cancelAnimationFrame(f.current),u.current)){const{updateNodePositions:k,nodeInternals:A,onNodeDragStop:R,onSelectionDragStop:L}=a.getState(),M=i?R:fw(L);if(k(u.current,!1,!1),M){const[E,P]=dw({nodeId:i,dragItems:u.current,nodeInternals:A});M(x.sourceEvent,E,P)}}}).filter(x=>{const k=x.target;return!x.button&&(!n||!w8(k,`.${n}`,e))&&(!r||w8(k,r,e))});return g.call(C),()=>{g.on(".drag",null)}}}},[e,t,n,r,o,a,i,s,y]),l}function hj(){const e=Gn();return I.useCallback(n=>{const{nodeInternals:r,nodeExtent:i,updateNodePositions:o,getNodes:s,snapToGrid:a,snapGrid:l,onError:c,nodesDraggable:u}=e.getState(),d=s().filter(y=>y.selected&&(y.draggable||u&&typeof y.draggable>"u")),f=a?l[0]:5,h=a?l[1]:5,p=n.isShiftPressed?4:1,m=n.x*f*p,_=n.y*h*p,v=d.map(y=>{if(y.positionAbsolute){const g={x:y.positionAbsolute.x+m,y:y.positionAbsolute.y+_};a&&(g.x=l[0]*Math.round(g.x/l[0]),g.y=l[1]*Math.round(g.y/l[1]));const{positionAbsolute:b,position:S}=dj(y,g,r,i,void 0,c);y.position=S,y.positionAbsolute=b}return y});o(v,!0,!1)},[])}const Ld={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};var bh=e=>{const t=({id:n,type:r,data:i,xPos:o,yPos:s,xPosOrigin:a,yPosOrigin:l,selected:c,onClick:u,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,onContextMenu:p,onDoubleClick:m,style:_,className:v,isDraggable:y,isSelectable:g,isConnectable:b,isFocusable:S,selectNodesOnDrag:w,sourcePosition:C,targetPosition:x,hidden:k,resizeObserver:A,dragHandle:R,zIndex:L,isParent:M,noDragClassName:E,noPanClassName:P,initialized:O,disableKeyboardA11y:F,ariaLabel:$,rfId:D})=>{const N=Gn(),z=I.useRef(null),V=I.useRef(C),H=I.useRef(x),X=I.useRef(r),te=g||y||u||d||f||h,ee=hj(),j=vh(n,N.getState,d),q=vh(n,N.getState,f),Z=vh(n,N.getState,h),oe=vh(n,N.getState,p),be=vh(n,N.getState,m),Me=we=>{const{nodeDragThreshold:pt}=N.getState();if(g&&(!w||!y||pt>0)&&f3({id:n,store:N,nodeRef:z}),u){const vt=N.getState().nodeInternals.get(n);vt&&u(we,{...vt})}},lt=we=>{if(!a3(we))if(Nz.includes(we.key)&&g){const pt=we.key==="Escape";f3({id:n,store:N,unselect:pt,nodeRef:z})}else!F&&y&&c&&Object.prototype.hasOwnProperty.call(Ld,we.key)&&(N.setState({ariaLiveMessage:`Moved selected node ${we.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~o}, y: ${~~s}`}),ee({x:Ld[we.key].x,y:Ld[we.key].y,isShiftPressed:we.shiftKey}))};I.useEffect(()=>{if(z.current&&!k){const we=z.current;return A==null||A.observe(we),()=>A==null?void 0:A.unobserve(we)}},[k]),I.useEffect(()=>{const we=X.current!==r,pt=V.current!==C,vt=H.current!==x;z.current&&(we||pt||vt)&&(we&&(X.current=r),pt&&(V.current=C),vt&&(H.current=x),N.getState().updateNodeDimensions([{id:n,nodeElement:z.current,forceUpdate:!0}]))},[n,r,C,x]);const Le=fj({nodeRef:z,disabled:k||!y,noDragClassName:E,handleSelector:R,nodeId:n,isSelectable:g,selectNodesOnDrag:w});return k?null:Q.createElement("div",{className:no(["react-flow__node",`react-flow__node-${r}`,{[P]:y},v,{selected:c,selectable:g,parent:M,dragging:Le}]),ref:z,style:{zIndex:L,transform:`translate(${a}px,${l}px)`,pointerEvents:te?"all":"none",visibility:O?"visible":"hidden",..._},"data-id":n,"data-testid":`rf__node-${n}`,onMouseEnter:j,onMouseMove:q,onMouseLeave:Z,onContextMenu:oe,onClick:Me,onDoubleClick:be,onKeyDown:S?lt:void 0,tabIndex:S?0:void 0,role:S?"button":void 0,"aria-describedby":F?void 0:`${nj}-${D}`,"aria-label":$},Q.createElement(mye,{value:n},Q.createElement(e,{id:n,data:i,type:r,xPos:o,yPos:s,selected:c,isConnectable:b,sourcePosition:C,targetPosition:x,dragging:Le,dragHandle:R,zIndex:L})))};return t.displayName="NodeWrapper",I.memo(t)};const rve=e=>{const t=e.getNodes().filter(n=>n.selected);return{...OT(t,e.nodeOrigin),transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`,userSelectionActive:e.userSelectionActive}};function ive({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Gn(),{width:i,height:o,x:s,y:a,transformString:l,userSelectionActive:c}=rn(rve,ti),u=hj(),d=I.useRef(null);if(I.useEffect(()=>{var p;n||(p=d.current)==null||p.focus({preventScroll:!0})},[n]),fj({nodeRef:d}),c||!i||!o)return null;const f=e?p=>{const m=r.getState().getNodes().filter(_=>_.selected);e(p,m)}:void 0,h=p=>{Object.prototype.hasOwnProperty.call(Ld,p.key)&&u({x:Ld[p.key].x,y:Ld[p.key].y,isShiftPressed:p.shiftKey})};return Q.createElement("div",{className:no(["react-flow__nodesselection","react-flow__container",t]),style:{transform:l}},Q.createElement("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:h,style:{width:i,height:o,top:a,left:s}}))}var ove=I.memo(ive);const sve=e=>e.nodesSelectionActive,pj=({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,deleteKeyCode:a,onMove:l,onMoveStart:c,onMoveEnd:u,selectionKeyCode:d,selectionOnDrag:f,selectionMode:h,onSelectionStart:p,onSelectionEnd:m,multiSelectionKeyCode:_,panActivationKeyCode:v,zoomActivationKeyCode:y,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:S,panOnScroll:w,panOnScrollSpeed:C,panOnScrollMode:x,zoomOnDoubleClick:k,panOnDrag:A,defaultViewport:R,translateExtent:L,minZoom:M,maxZoom:E,preventScrolling:P,onSelectionContextMenu:O,noWheelClassName:F,noPanClassName:$,disableKeyboardA11y:D})=>{const N=rn(sve),z=Ag(d),V=Ag(v),H=V||A,X=V||w,te=z||f&&H!==!0;return Wye({deleteKeyCode:a,multiSelectionKeyCode:_}),Q.createElement(Qye,{onMove:l,onMoveStart:c,onMoveEnd:u,onPaneContextMenu:o,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:S,panOnScroll:X,panOnScrollSpeed:C,panOnScrollMode:x,zoomOnDoubleClick:k,panOnDrag:!z&&H,defaultViewport:R,translateExtent:L,minZoom:M,maxZoom:E,zoomActivationKeyCode:y,preventScrolling:P,noWheelClassName:F,noPanClassName:$},Q.createElement(cj,{onSelectionStart:p,onSelectionEnd:m,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,panOnDrag:H,isSelecting:!!te,selectionMode:h},e,N&&Q.createElement(ove,{onSelectionContextMenu:O,noPanClassName:$,disableKeyboardA11y:D})))};pj.displayName="FlowRenderer";var ave=I.memo(pj);function lve(e){return rn(I.useCallback(n=>e?Gz(n.nodeInternals,{x:0,y:0,width:n.width,height:n.height},n.transform,!0):n.getNodes(),[e]))}function cve(e){const t={input:bh(e.input||Zz),default:bh(e.default||d3),output:bh(e.output||ej),group:bh(e.group||FT)},n={},r=Object.keys(e).filter(i=>!["input","default","output","group"].includes(i)).reduce((i,o)=>(i[o]=bh(e[o]||d3),i),n);return{...t,...r}}const uve=({x:e,y:t,width:n,height:r,origin:i})=>!n||!r?{x:e,y:t}:i[0]<0||i[1]<0||i[0]>1||i[1]>1?{x:e,y:t}:{x:e-n*i[0],y:t-r*i[1]},dve=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,updateNodeDimensions:e.updateNodeDimensions,onError:e.onError}),gj=e=>{const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,updateNodeDimensions:o,onError:s}=rn(dve,ti),a=lve(e.onlyRenderVisibleElements),l=I.useRef(),c=I.useMemo(()=>{if(typeof ResizeObserver>"u")return null;const u=new ResizeObserver(d=>{const f=d.map(h=>({id:h.target.getAttribute("data-id"),nodeElement:h.target,forceUpdate:!0}));o(f)});return l.current=u,u},[]);return I.useEffect(()=>()=>{var u;(u=l==null?void 0:l.current)==null||u.disconnect()},[]),Q.createElement("div",{className:"react-flow__nodes",style:DT},a.map(u=>{var S,w;let d=u.type||"default";e.nodeTypes[d]||(s==null||s("003",fa.error003(d)),d="default");const f=e.nodeTypes[d]||e.nodeTypes.default,h=!!(u.draggable||t&&typeof u.draggable>"u"),p=!!(u.selectable||i&&typeof u.selectable>"u"),m=!!(u.connectable||n&&typeof u.connectable>"u"),_=!!(u.focusable||r&&typeof u.focusable>"u"),v=e.nodeExtent?kT(u.positionAbsolute,e.nodeExtent):u.positionAbsolute,y=(v==null?void 0:v.x)??0,g=(v==null?void 0:v.y)??0,b=uve({x:y,y:g,width:u.width??0,height:u.height??0,origin:e.nodeOrigin});return Q.createElement(f,{key:u.id,id:u.id,className:u.className,style:u.style,type:d,data:u.data,sourcePosition:u.sourcePosition||Te.Bottom,targetPosition:u.targetPosition||Te.Top,hidden:u.hidden,xPos:y,yPos:g,xPosOrigin:b.x,yPosOrigin:b.y,selectNodesOnDrag:e.selectNodesOnDrag,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,selected:!!u.selected,isDraggable:h,isSelectable:p,isConnectable:m,isFocusable:_,resizeObserver:c,dragHandle:u.dragHandle,zIndex:((S=u[Tn])==null?void 0:S.z)??0,isParent:!!((w=u[Tn])!=null&&w.isParent),noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,initialized:!!u.width&&!!u.height,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,ariaLabel:u.ariaLabel})}))};gj.displayName="NodeRenderer";var fve=I.memo(gj);const hve=(e,t,n)=>n===Te.Left?e-t:n===Te.Right?e+t:e,pve=(e,t,n)=>n===Te.Top?e-t:n===Te.Bottom?e+t:e,E8="react-flow__edgeupdater",T8=({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:o,onMouseOut:s,type:a})=>Q.createElement("circle",{onMouseDown:i,onMouseEnter:o,onMouseOut:s,className:no([E8,`${E8}-${a}`]),cx:hve(t,r,e),cy:pve(n,r,e),r,stroke:"transparent",fill:"transparent"}),gve=()=>!0;var Du=e=>{const t=({id:n,className:r,type:i,data:o,onClick:s,onEdgeDoubleClick:a,selected:l,animated:c,label:u,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,style:_,source:v,target:y,sourceX:g,sourceY:b,targetX:S,targetY:w,sourcePosition:C,targetPosition:x,elementsSelectable:k,hidden:A,sourceHandleId:R,targetHandleId:L,onContextMenu:M,onMouseEnter:E,onMouseMove:P,onMouseLeave:O,edgeUpdaterRadius:F,onEdgeUpdate:$,onEdgeUpdateStart:D,onEdgeUpdateEnd:N,markerEnd:z,markerStart:V,rfId:H,ariaLabel:X,isFocusable:te,isUpdatable:ee,pathOptions:j,interactionWidth:q})=>{const Z=I.useRef(null),[oe,be]=I.useState(!1),[Me,lt]=I.useState(!1),Le=Gn(),we=I.useMemo(()=>`url(#${c3(V,H)})`,[V,H]),pt=I.useMemo(()=>`url(#${c3(z,H)})`,[z,H]);if(A)return null;const vt=Yt=>{var hn;const{edges:It,addSelectedEdges:oi,unselectNodesAndEdges:Oi,multiSelectionActive:ho}=Le.getState(),Ur=It.find(si=>si.id===n);Ur&&(k&&(Le.setState({nodesSelectionActive:!1}),Ur.selected&&ho?(Oi({nodes:[],edges:[Ur]}),(hn=Z.current)==null||hn.blur()):oi([n])),s&&s(Yt,Ur))},Ce=yh(n,Le.getState,a),ii=yh(n,Le.getState,M),sn=yh(n,Le.getState,E),jr=yh(n,Le.getState,P),sr=yh(n,Le.getState,O),fn=(Yt,It)=>{if(Yt.button!==0)return;const{edges:oi,isValidConnection:Oi}=Le.getState(),ho=It?y:v,Ur=(It?L:R)||null,hn=It?"target":"source",si=Oi||gve,Gl=It,Go=oi.find(_t=>_t.id===n);lt(!0),D==null||D(Yt,Go,hn);const Hl=_t=>{lt(!1),N==null||N(_t,Go,hn)};Kz({event:Yt,handleId:Ur,nodeId:ho,onConnect:_t=>$==null?void 0:$(Go,_t),isTarget:Gl,getState:Le.getState,setState:Le.setState,isValidConnection:si,edgeUpdaterType:hn,onEdgeUpdateEnd:Hl})},Vr=Yt=>fn(Yt,!0),fo=Yt=>fn(Yt,!1),Ri=()=>be(!0),ar=()=>be(!1),Wn=!k&&!s,wr=Yt=>{var It;if(Nz.includes(Yt.key)&&k){const{unselectNodesAndEdges:oi,addSelectedEdges:Oi,edges:ho}=Le.getState();Yt.key==="Escape"?((It=Z.current)==null||It.blur(),oi({edges:[ho.find(hn=>hn.id===n)]})):Oi([n])}};return Q.createElement("g",{className:no(["react-flow__edge",`react-flow__edge-${i}`,r,{selected:l,animated:c,inactive:Wn,updating:oe}]),onClick:vt,onDoubleClick:Ce,onContextMenu:ii,onMouseEnter:sn,onMouseMove:jr,onMouseLeave:sr,onKeyDown:te?wr:void 0,tabIndex:te?0:void 0,role:te?"button":"img","data-testid":`rf__edge-${n}`,"aria-label":X===null?void 0:X||`Edge from ${v} to ${y}`,"aria-describedby":te?`${rj}-${H}`:void 0,ref:Z},!Me&&Q.createElement(e,{id:n,source:v,target:y,selected:l,animated:c,label:u,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,data:o,style:_,sourceX:g,sourceY:b,targetX:S,targetY:w,sourcePosition:C,targetPosition:x,sourceHandleId:R,targetHandleId:L,markerStart:we,markerEnd:pt,pathOptions:j,interactionWidth:q}),ee&&Q.createElement(Q.Fragment,null,(ee==="source"||ee===!0)&&Q.createElement(T8,{position:C,centerX:g,centerY:b,radius:F,onMouseDown:Vr,onMouseEnter:Ri,onMouseOut:ar,type:"source"}),(ee==="target"||ee===!0)&&Q.createElement(T8,{position:x,centerX:S,centerY:w,radius:F,onMouseDown:fo,onMouseEnter:Ri,onMouseOut:ar,type:"target"})))};return t.displayName="EdgeWrapper",I.memo(t)};function mve(e){const t={default:Du(e.default||F1),straight:Du(e.bezier||MT),step:Du(e.step||IT),smoothstep:Du(e.step||lS),simplebezier:Du(e.simplebezier||PT)},n={},r=Object.keys(e).filter(i=>!["default","bezier"].includes(i)).reduce((i,o)=>(i[o]=Du(e[o]||F1),i),n);return{...t,...r}}function A8(e,t,n=null){const r=((n==null?void 0:n.x)||0)+t.x,i=((n==null?void 0:n.y)||0)+t.y,o=(n==null?void 0:n.width)||t.width,s=(n==null?void 0:n.height)||t.height;switch(e){case Te.Top:return{x:r+o/2,y:i};case Te.Right:return{x:r+o,y:i+s/2};case Te.Bottom:return{x:r+o/2,y:i+s};case Te.Left:return{x:r,y:i+s/2}}}function k8(e,t){return e?e.length===1||!t?e[0]:t&&e.find(n=>n.id===t)||null:null}const yve=(e,t,n,r,i,o)=>{const s=A8(n,e,t),a=A8(o,r,i);return{sourceX:s.x,sourceY:s.y,targetX:a.x,targetY:a.y}};function vve({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:r,targetWidth:i,targetHeight:o,width:s,height:a,transform:l}){const c={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+r,t.y+o)};c.x===c.x2&&(c.x2+=1),c.y===c.y2&&(c.y2+=1);const u=Tg({x:(0-l[0])/l[2],y:(0-l[1])/l[2],width:s/l[2],height:a/l[2]}),d=Math.max(0,Math.min(u.x2,c.x2)-Math.max(u.x,c.x)),f=Math.max(0,Math.min(u.y2,c.y2)-Math.max(u.y,c.y));return Math.ceil(d*f)>0}function P8(e){var r,i,o,s,a;const t=((r=e==null?void 0:e[Tn])==null?void 0:r.handleBounds)||null,n=t&&(e==null?void 0:e.width)&&(e==null?void 0:e.height)&&typeof((i=e==null?void 0:e.positionAbsolute)==null?void 0:i.x)<"u"&&typeof((o=e==null?void 0:e.positionAbsolute)==null?void 0:o.y)<"u";return[{x:((s=e==null?void 0:e.positionAbsolute)==null?void 0:s.x)||0,y:((a=e==null?void 0:e.positionAbsolute)==null?void 0:a.y)||0,width:(e==null?void 0:e.width)||0,height:(e==null?void 0:e.height)||0},t,!!n]}const bve=[{level:0,isMaxLevel:!0,edges:[]}];function _ve(e,t,n=!1){let r=-1;const i=e.reduce((s,a)=>{var u,d;const l=Xi(a.zIndex);let c=l?a.zIndex:0;if(n){const f=t.get(a.target),h=t.get(a.source),p=a.selected||(f==null?void 0:f.selected)||(h==null?void 0:h.selected),m=Math.max(((u=h==null?void 0:h[Tn])==null?void 0:u.z)||0,((d=f==null?void 0:f[Tn])==null?void 0:d.z)||0,1e3);c=(l?a.zIndex:0)+(p?m:0)}return s[c]?s[c].push(a):s[c]=[a],r=c>r?c:r,s},{}),o=Object.entries(i).map(([s,a])=>{const l=+s;return{edges:a,level:l,isMaxLevel:l===r}});return o.length===0?bve:o}function Sve(e,t,n){const r=rn(I.useCallback(i=>e?i.edges.filter(o=>{const s=t.get(o.source),a=t.get(o.target);return(s==null?void 0:s.width)&&(s==null?void 0:s.height)&&(a==null?void 0:a.width)&&(a==null?void 0:a.height)&&vve({sourcePos:s.positionAbsolute||{x:0,y:0},targetPos:a.positionAbsolute||{x:0,y:0},sourceWidth:s.width,sourceHeight:s.height,targetWidth:a.width,targetHeight:a.height,width:i.width,height:i.height,transform:i.transform})}):i.edges,[e,t]));return _ve(r,t,n)}const xve=({color:e="none",strokeWidth:t=1})=>Q.createElement("polyline",{style:{stroke:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",fill:"none",points:"-5,-4 0,0 -5,4"}),wve=({color:e="none",strokeWidth:t=1})=>Q.createElement("polyline",{style:{stroke:e,fill:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"}),I8={[N1.Arrow]:xve,[N1.ArrowClosed]:wve};function Cve(e){const t=Gn();return I.useMemo(()=>{var i,o;return Object.prototype.hasOwnProperty.call(I8,e)?I8[e]:((o=(i=t.getState()).onError)==null||o.call(i,"009",fa.error009(e)),null)},[e])}const Eve=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:o="strokeWidth",strokeWidth:s,orient:a="auto-start-reverse"})=>{const l=Cve(t);return l?Q.createElement("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:a,refX:"0",refY:"0"},Q.createElement(l,{color:n,strokeWidth:s})):null},Tve=({defaultColor:e,rfId:t})=>n=>{const r=[];return n.edges.reduce((i,o)=>([o.markerStart,o.markerEnd].forEach(s=>{if(s&&typeof s=="object"){const a=c3(s,t);r.includes(a)||(i.push({id:a,color:s.color||e,...s}),r.push(a))}}),i),[]).sort((i,o)=>i.id.localeCompare(o.id))},mj=({defaultColor:e,rfId:t})=>{const n=rn(I.useCallback(Tve({defaultColor:e,rfId:t}),[e,t]),(r,i)=>!(r.length!==i.length||r.some((o,s)=>o.id!==i[s].id)));return Q.createElement("defs",null,n.map(r=>Q.createElement(Eve,{id:r.id,key:r.id,type:r.type,color:r.color,width:r.width,height:r.height,markerUnits:r.markerUnits,strokeWidth:r.strokeWidth,orient:r.orient})))};mj.displayName="MarkerDefinitions";var Ave=I.memo(mj);const kve=e=>({nodesConnectable:e.nodesConnectable,edgesFocusable:e.edgesFocusable,edgesUpdatable:e.edgesUpdatable,elementsSelectable:e.elementsSelectable,width:e.width,height:e.height,connectionMode:e.connectionMode,nodeInternals:e.nodeInternals,onError:e.onError}),yj=({defaultMarkerColor:e,onlyRenderVisibleElements:t,elevateEdgesOnSelect:n,rfId:r,edgeTypes:i,noPanClassName:o,onEdgeUpdate:s,onEdgeContextMenu:a,onEdgeMouseEnter:l,onEdgeMouseMove:c,onEdgeMouseLeave:u,onEdgeClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,children:_})=>{const{edgesFocusable:v,edgesUpdatable:y,elementsSelectable:g,width:b,height:S,connectionMode:w,nodeInternals:C,onError:x}=rn(kve,ti),k=Sve(t,C,n);return b?Q.createElement(Q.Fragment,null,k.map(({level:A,edges:R,isMaxLevel:L})=>Q.createElement("svg",{key:A,style:{zIndex:A},width:b,height:S,className:"react-flow__edges react-flow__container"},L&&Q.createElement(Ave,{defaultColor:e,rfId:r}),Q.createElement("g",null,R.map(M=>{const[E,P,O]=P8(C.get(M.source)),[F,$,D]=P8(C.get(M.target));if(!O||!D)return null;let N=M.type||"default";i[N]||(x==null||x("011",fa.error011(N)),N="default");const z=i[N]||i.default,V=w===iu.Strict?$.target:($.target??[]).concat($.source??[]),H=k8(P.source,M.sourceHandle),X=k8(V,M.targetHandle),te=(H==null?void 0:H.position)||Te.Bottom,ee=(X==null?void 0:X.position)||Te.Top,j=!!(M.focusable||v&&typeof M.focusable>"u"),q=typeof s<"u"&&(M.updatable||y&&typeof M.updatable>"u");if(!H||!X)return x==null||x("008",fa.error008(H,M)),null;const{sourceX:Z,sourceY:oe,targetX:be,targetY:Me}=yve(E,H,te,F,X,ee);return Q.createElement(z,{key:M.id,id:M.id,className:no([M.className,o]),type:N,data:M.data,selected:!!M.selected,animated:!!M.animated,hidden:!!M.hidden,label:M.label,labelStyle:M.labelStyle,labelShowBg:M.labelShowBg,labelBgStyle:M.labelBgStyle,labelBgPadding:M.labelBgPadding,labelBgBorderRadius:M.labelBgBorderRadius,style:M.style,source:M.source,target:M.target,sourceHandleId:M.sourceHandle,targetHandleId:M.targetHandle,markerEnd:M.markerEnd,markerStart:M.markerStart,sourceX:Z,sourceY:oe,targetX:be,targetY:Me,sourcePosition:te,targetPosition:ee,elementsSelectable:g,onEdgeUpdate:s,onContextMenu:a,onMouseEnter:l,onMouseMove:c,onMouseLeave:u,onClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,rfId:r,ariaLabel:M.ariaLabel,isFocusable:j,isUpdatable:q,pathOptions:"pathOptions"in M?M.pathOptions:void 0,interactionWidth:M.interactionWidth})})))),_):null};yj.displayName="EdgeRenderer";var Pve=I.memo(yj);const Ive=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function Mve({children:e}){const t=rn(Ive);return Q.createElement("div",{className:"react-flow__viewport react-flow__container",style:{transform:t}},e)}function Rve(e){const t=aj(),n=I.useRef(!1);I.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const Ove={[Te.Left]:Te.Right,[Te.Right]:Te.Left,[Te.Top]:Te.Bottom,[Te.Bottom]:Te.Top},vj=({nodeId:e,handleType:t,style:n,type:r=qa.Bezier,CustomComponent:i,connectionStatus:o})=>{var w,C,x;const{fromNode:s,handleId:a,toX:l,toY:c,connectionMode:u}=rn(I.useCallback(k=>({fromNode:k.nodeInternals.get(e),handleId:k.connectionHandleId,toX:(k.connectionPosition.x-k.transform[0])/k.transform[2],toY:(k.connectionPosition.y-k.transform[1])/k.transform[2],connectionMode:k.connectionMode}),[e]),ti),d=(w=s==null?void 0:s[Tn])==null?void 0:w.handleBounds;let f=d==null?void 0:d[t];if(u===iu.Loose&&(f=f||(d==null?void 0:d[t==="source"?"target":"source"])),!s||!f)return null;const h=a?f.find(k=>k.id===a):f[0],p=h?h.x+h.width/2:(s.width??0)/2,m=h?h.y+h.height/2:s.height??0,_=(((C=s.positionAbsolute)==null?void 0:C.x)??0)+p,v=(((x=s.positionAbsolute)==null?void 0:x.y)??0)+m,y=h==null?void 0:h.position,g=y?Ove[y]:null;if(!y||!g)return null;if(i)return Q.createElement(i,{connectionLineType:r,connectionLineStyle:n,fromNode:s,fromHandle:h,fromX:_,fromY:v,toX:l,toY:c,fromPosition:y,toPosition:g,connectionStatus:o});let b="";const S={sourceX:_,sourceY:v,sourcePosition:y,targetX:l,targetY:c,targetPosition:g};return r===qa.Bezier?[b]=zz(S):r===qa.Step?[b]=l3({...S,borderRadius:0}):r===qa.SmoothStep?[b]=l3(S):r===qa.SimpleBezier?[b]=Bz(S):b=`M${_},${v} ${l},${c}`,Q.createElement("path",{d:b,fill:"none",className:"react-flow__connection-path",style:n})};vj.displayName="ConnectionLine";const $ve=e=>({nodeId:e.connectionNodeId,handleType:e.connectionHandleType,nodesConnectable:e.nodesConnectable,connectionStatus:e.connectionStatus,width:e.width,height:e.height});function Nve({containerStyle:e,style:t,type:n,component:r}){const{nodeId:i,handleType:o,nodesConnectable:s,width:a,height:l,connectionStatus:c}=rn($ve,ti);return!(i&&o&&a&&s)?null:Q.createElement("svg",{style:e,width:a,height:l,className:"react-flow__edges react-flow__connectionline react-flow__container"},Q.createElement("g",{className:no(["react-flow__connection",c])},Q.createElement(vj,{nodeId:i,handleType:o,style:t,type:n,CustomComponent:r,connectionStatus:c})))}function M8(e,t){return I.useRef(null),Gn(),I.useMemo(()=>t(e),[e])}const bj=({nodeTypes:e,edgeTypes:t,onMove:n,onMoveStart:r,onMoveEnd:i,onInit:o,onNodeClick:s,onEdgeClick:a,onNodeDoubleClick:l,onEdgeDoubleClick:c,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,onSelectionContextMenu:p,onSelectionStart:m,onSelectionEnd:_,connectionLineType:v,connectionLineStyle:y,connectionLineComponent:g,connectionLineContainerStyle:b,selectionKeyCode:S,selectionOnDrag:w,selectionMode:C,multiSelectionKeyCode:x,panActivationKeyCode:k,zoomActivationKeyCode:A,deleteKeyCode:R,onlyRenderVisibleElements:L,elementsSelectable:M,selectNodesOnDrag:E,defaultViewport:P,translateExtent:O,minZoom:F,maxZoom:$,preventScrolling:D,defaultMarkerColor:N,zoomOnScroll:z,zoomOnPinch:V,panOnScroll:H,panOnScrollSpeed:X,panOnScrollMode:te,zoomOnDoubleClick:ee,panOnDrag:j,onPaneClick:q,onPaneMouseEnter:Z,onPaneMouseMove:oe,onPaneMouseLeave:be,onPaneScroll:Me,onPaneContextMenu:lt,onEdgeUpdate:Le,onEdgeContextMenu:we,onEdgeMouseEnter:pt,onEdgeMouseMove:vt,onEdgeMouseLeave:Ce,edgeUpdaterRadius:ii,onEdgeUpdateStart:sn,onEdgeUpdateEnd:jr,noDragClassName:sr,noWheelClassName:fn,noPanClassName:Vr,elevateEdgesOnSelect:fo,disableKeyboardA11y:Ri,nodeOrigin:ar,nodeExtent:Wn,rfId:wr})=>{const Yt=M8(e,cve),It=M8(t,mve);return Rve(o),Q.createElement(ave,{onPaneClick:q,onPaneMouseEnter:Z,onPaneMouseMove:oe,onPaneMouseLeave:be,onPaneContextMenu:lt,onPaneScroll:Me,deleteKeyCode:R,selectionKeyCode:S,selectionOnDrag:w,selectionMode:C,onSelectionStart:m,onSelectionEnd:_,multiSelectionKeyCode:x,panActivationKeyCode:k,zoomActivationKeyCode:A,elementsSelectable:M,onMove:n,onMoveStart:r,onMoveEnd:i,zoomOnScroll:z,zoomOnPinch:V,zoomOnDoubleClick:ee,panOnScroll:H,panOnScrollSpeed:X,panOnScrollMode:te,panOnDrag:j,defaultViewport:P,translateExtent:O,minZoom:F,maxZoom:$,onSelectionContextMenu:p,preventScrolling:D,noDragClassName:sr,noWheelClassName:fn,noPanClassName:Vr,disableKeyboardA11y:Ri},Q.createElement(Mve,null,Q.createElement(Pve,{edgeTypes:It,onEdgeClick:a,onEdgeDoubleClick:c,onEdgeUpdate:Le,onlyRenderVisibleElements:L,onEdgeContextMenu:we,onEdgeMouseEnter:pt,onEdgeMouseMove:vt,onEdgeMouseLeave:Ce,onEdgeUpdateStart:sn,onEdgeUpdateEnd:jr,edgeUpdaterRadius:ii,defaultMarkerColor:N,noPanClassName:Vr,elevateEdgesOnSelect:!!fo,disableKeyboardA11y:Ri,rfId:wr},Q.createElement(Nve,{style:y,type:v,component:g,containerStyle:b})),Q.createElement("div",{className:"react-flow__edgelabel-renderer"}),Q.createElement(fve,{nodeTypes:Yt,onNodeClick:s,onNodeDoubleClick:l,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,selectNodesOnDrag:E,onlyRenderVisibleElements:L,noPanClassName:Vr,noDragClassName:sr,disableKeyboardA11y:Ri,nodeOrigin:ar,nodeExtent:Wn,rfId:wr})))};bj.displayName="GraphView";var Fve=I.memo(bj);const h3=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Pa={rfId:"1",width:0,height:0,transform:[0,0,1],nodeInternals:new Map,edges:[],onNodesChange:null,onEdgesChange:null,hasDefaultNodes:!1,hasDefaultEdges:!1,d3Zoom:null,d3Selection:null,d3ZoomHandler:void 0,minZoom:.5,maxZoom:2,translateExtent:h3,nodeExtent:h3,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionNodeId:null,connectionHandleId:null,connectionHandleType:"source",connectionPosition:{x:0,y:0},connectionStatus:null,connectionMode:iu.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:[0,0],nodeDragThreshold:0,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesUpdatable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,fitViewOnInit:!1,fitViewOnInitDone:!1,fitViewOnInitOptions:void 0,onSelectionChange:[],multiSelectionActive:!1,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,connectionRadius:20,onError:uye,isValidConnection:void 0},Dve=()=>Cpe((e,t)=>({...Pa,setNodes:n=>{const{nodeInternals:r,nodeOrigin:i,elevateNodesOnSelect:o}=t();e({nodeInternals:cw(n,r,i,o)})},getNodes:()=>Array.from(t().nodeInternals.values()),setEdges:n=>{const{defaultEdgeOptions:r={}}=t();e({edges:n.map(i=>({...r,...i}))})},setDefaultNodesAndEdges:(n,r)=>{const i=typeof n<"u",o=typeof r<"u",s=i?cw(n,new Map,t().nodeOrigin,t().elevateNodesOnSelect):new Map;e({nodeInternals:s,edges:o?r:[],hasDefaultNodes:i,hasDefaultEdges:o})},updateNodeDimensions:n=>{const{onNodesChange:r,nodeInternals:i,fitViewOnInit:o,fitViewOnInitDone:s,fitViewOnInitOptions:a,domNode:l,nodeOrigin:c}=t(),u=l==null?void 0:l.querySelector(".react-flow__viewport");if(!u)return;const d=window.getComputedStyle(u),{m22:f}=new window.DOMMatrixReadOnly(d.transform),h=n.reduce((m,_)=>{const v=i.get(_.id);if(v){const y=AT(_.nodeElement);!!(y.width&&y.height&&(v.width!==y.width||v.height!==y.height||_.forceUpdate))&&(i.set(v.id,{...v,[Tn]:{...v[Tn],handleBounds:{source:C8(".source",_.nodeElement,f,c),target:C8(".target",_.nodeElement,f,c)}},...y}),m.push({id:v.id,type:"dimensions",dimensions:y}))}return m},[]);oj(i,c);const p=s||o&&!s&&sj(t,{initial:!0,...a});e({nodeInternals:new Map(i),fitViewOnInitDone:p}),(h==null?void 0:h.length)>0&&(r==null||r(h))},updateNodePositions:(n,r=!0,i=!1)=>{const{triggerNodeChanges:o}=t(),s=n.map(a=>{const l={id:a.id,type:"position",dragging:i};return r&&(l.positionAbsolute=a.positionAbsolute,l.position=a.position),l});o(s)},triggerNodeChanges:n=>{const{onNodesChange:r,nodeInternals:i,hasDefaultNodes:o,nodeOrigin:s,getNodes:a,elevateNodesOnSelect:l}=t();if(n!=null&&n.length){if(o){const c=lc(n,a()),u=cw(c,i,s,l);e({nodeInternals:u})}r==null||r(n)}},addSelectedNodes:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ja(l,!0)):(s=cd(o(),n),a=cd(i,[])),ny({changedNodes:s,changedEdges:a,get:t,set:e})},addSelectedEdges:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ja(l,!0)):(s=cd(i,n),a=cd(o(),[])),ny({changedNodes:a,changedEdges:s,get:t,set:e})},unselectNodesAndEdges:({nodes:n,edges:r}={})=>{const{edges:i,getNodes:o}=t(),s=n||o(),a=r||i,l=s.map(u=>(u.selected=!1,ja(u.id,!1))),c=a.map(u=>ja(u.id,!1));ny({changedNodes:l,changedEdges:c,get:t,set:e})},setMinZoom:n=>{const{d3Zoom:r,maxZoom:i}=t();r==null||r.scaleExtent([n,i]),e({minZoom:n})},setMaxZoom:n=>{const{d3Zoom:r,minZoom:i}=t();r==null||r.scaleExtent([i,n]),e({maxZoom:n})},setTranslateExtent:n=>{var r;(r=t().d3Zoom)==null||r.translateExtent(n),e({translateExtent:n})},resetSelectedElements:()=>{const{edges:n,getNodes:r}=t(),o=r().filter(a=>a.selected).map(a=>ja(a.id,!1)),s=n.filter(a=>a.selected).map(a=>ja(a.id,!1));ny({changedNodes:o,changedEdges:s,get:t,set:e})},setNodeExtent:n=>{const{nodeInternals:r}=t();r.forEach(i=>{i.positionAbsolute=kT(i.position,n)}),e({nodeExtent:n,nodeInternals:new Map(r)})},panBy:n=>{const{transform:r,width:i,height:o,d3Zoom:s,d3Selection:a,translateExtent:l}=t();if(!s||!a||!n.x&&!n.y)return!1;const c=dl.translate(r[0]+n.x,r[1]+n.y).scale(r[2]),u=[[0,0],[i,o]],d=s==null?void 0:s.constrain()(c,u,l);return s.transform(a,d),r[0]!==d.x||r[1]!==d.y||r[2]!==d.k},cancelConnection:()=>e({connectionNodeId:Pa.connectionNodeId,connectionHandleId:Pa.connectionHandleId,connectionHandleType:Pa.connectionHandleType,connectionStatus:Pa.connectionStatus,connectionStartHandle:Pa.connectionStartHandle,connectionEndHandle:Pa.connectionEndHandle}),reset:()=>e({...Pa})}),Object.is),_j=({children:e})=>{const t=I.useRef(null);return t.current||(t.current=Dve()),Q.createElement(rye,{value:t.current},e)};_j.displayName="ReactFlowProvider";const Sj=({children:e})=>I.useContext(aS)?Q.createElement(Q.Fragment,null,e):Q.createElement(_j,null,e);Sj.displayName="ReactFlowWrapper";const Lve={input:Zz,default:d3,output:ej,group:FT},Bve={default:F1,straight:MT,step:IT,smoothstep:lS,simplebezier:PT},zve=[0,0],jve=[15,15],Vve={x:0,y:0,zoom:1},Uve={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},Gve=I.forwardRef(({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:o=Lve,edgeTypes:s=Bve,onNodeClick:a,onEdgeClick:l,onInit:c,onMove:u,onMoveStart:d,onMoveEnd:f,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:_,onClickConnectEnd:v,onNodeMouseEnter:y,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:w,onNodeDragStart:C,onNodeDrag:x,onNodeDragStop:k,onNodesDelete:A,onEdgesDelete:R,onSelectionChange:L,onSelectionDragStart:M,onSelectionDrag:E,onSelectionDragStop:P,onSelectionContextMenu:O,onSelectionStart:F,onSelectionEnd:$,connectionMode:D=iu.Strict,connectionLineType:N=qa.Bezier,connectionLineStyle:z,connectionLineComponent:V,connectionLineContainerStyle:H,deleteKeyCode:X="Backspace",selectionKeyCode:te="Shift",selectionOnDrag:ee=!1,selectionMode:j=Cl.Full,panActivationKeyCode:q="Space",multiSelectionKeyCode:Z=$1()?"Meta":"Control",zoomActivationKeyCode:oe=$1()?"Meta":"Control",snapToGrid:be=!1,snapGrid:Me=jve,onlyRenderVisibleElements:lt=!1,selectNodesOnDrag:Le=!0,nodesDraggable:we,nodesConnectable:pt,nodesFocusable:vt,nodeOrigin:Ce=zve,edgesFocusable:ii,edgesUpdatable:sn,elementsSelectable:jr,defaultViewport:sr=Vve,minZoom:fn=.5,maxZoom:Vr=2,translateExtent:fo=h3,preventScrolling:Ri=!0,nodeExtent:ar,defaultMarkerColor:Wn="#b1b1b7",zoomOnScroll:wr=!0,zoomOnPinch:Yt=!0,panOnScroll:It=!1,panOnScrollSpeed:oi=.5,panOnScrollMode:Oi=wc.Free,zoomOnDoubleClick:ho=!0,panOnDrag:Ur=!0,onPaneClick:hn,onPaneMouseEnter:si,onPaneMouseMove:Gl,onPaneMouseLeave:Go,onPaneScroll:Hl,onPaneContextMenu:Ut,children:_t,onEdgeUpdate:qn,onEdgeContextMenu:Pn,onEdgeDoubleClick:lr,onEdgeMouseEnter:Cr,onEdgeMouseMove:Gr,onEdgeMouseLeave:Ho,onEdgeUpdateStart:Er,onEdgeUpdateEnd:Kn,edgeUpdaterRadius:Ms=10,onNodesChange:Ca,onEdgesChange:Ea,noDragClassName:wu="nodrag",noWheelClassName:Rs="nowheel",noPanClassName:Tr="nopan",fitView:Wl=!1,fitViewOptions:j2,connectOnClick:V2=!0,attributionPosition:U2,proOptions:G2,defaultEdgeOptions:Ta,elevateNodesOnSelect:H2=!0,elevateEdgesOnSelect:W2=!1,disableKeyboardA11y:u0=!1,autoPanOnConnect:q2=!0,autoPanOnNodeDrag:K2=!0,connectionRadius:X2=20,isValidConnection:Yf,onError:Q2,style:Cu,id:Eu,nodeDragThreshold:Y2,...Tu},d0)=>{const Zf=Eu||"1";return Q.createElement("div",{...Tu,style:{...Cu,...Uve},ref:d0,className:no(["react-flow",i]),"data-testid":"rf__wrapper",id:Eu},Q.createElement(Sj,null,Q.createElement(Fve,{onInit:c,onMove:u,onMoveStart:d,onMoveEnd:f,onNodeClick:a,onEdgeClick:l,onNodeMouseEnter:y,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:w,nodeTypes:o,edgeTypes:s,connectionLineType:N,connectionLineStyle:z,connectionLineComponent:V,connectionLineContainerStyle:H,selectionKeyCode:te,selectionOnDrag:ee,selectionMode:j,deleteKeyCode:X,multiSelectionKeyCode:Z,panActivationKeyCode:q,zoomActivationKeyCode:oe,onlyRenderVisibleElements:lt,selectNodesOnDrag:Le,defaultViewport:sr,translateExtent:fo,minZoom:fn,maxZoom:Vr,preventScrolling:Ri,zoomOnScroll:wr,zoomOnPinch:Yt,zoomOnDoubleClick:ho,panOnScroll:It,panOnScrollSpeed:oi,panOnScrollMode:Oi,panOnDrag:Ur,onPaneClick:hn,onPaneMouseEnter:si,onPaneMouseMove:Gl,onPaneMouseLeave:Go,onPaneScroll:Hl,onPaneContextMenu:Ut,onSelectionContextMenu:O,onSelectionStart:F,onSelectionEnd:$,onEdgeUpdate:qn,onEdgeContextMenu:Pn,onEdgeDoubleClick:lr,onEdgeMouseEnter:Cr,onEdgeMouseMove:Gr,onEdgeMouseLeave:Ho,onEdgeUpdateStart:Er,onEdgeUpdateEnd:Kn,edgeUpdaterRadius:Ms,defaultMarkerColor:Wn,noDragClassName:wu,noWheelClassName:Rs,noPanClassName:Tr,elevateEdgesOnSelect:W2,rfId:Zf,disableKeyboardA11y:u0,nodeOrigin:Ce,nodeExtent:ar}),Q.createElement($ye,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:_,onClickConnectEnd:v,nodesDraggable:we,nodesConnectable:pt,nodesFocusable:vt,edgesFocusable:ii,edgesUpdatable:sn,elementsSelectable:jr,elevateNodesOnSelect:H2,minZoom:fn,maxZoom:Vr,nodeExtent:ar,onNodesChange:Ca,onEdgesChange:Ea,snapToGrid:be,snapGrid:Me,connectionMode:D,translateExtent:fo,connectOnClick:V2,defaultEdgeOptions:Ta,fitView:Wl,fitViewOptions:j2,onNodesDelete:A,onEdgesDelete:R,onNodeDragStart:C,onNodeDrag:x,onNodeDragStop:k,onSelectionDrag:E,onSelectionDragStart:M,onSelectionDragStop:P,noPanClassName:Tr,nodeOrigin:Ce,rfId:Zf,autoPanOnConnect:q2,autoPanOnNodeDrag:K2,onError:Q2,connectionRadius:X2,isValidConnection:Yf,nodeDragThreshold:Y2}),Q.createElement(Rye,{onSelectionChange:L}),_t,Q.createElement(sye,{proOptions:G2,position:U2}),Q.createElement(Bye,{rfId:Zf,disableKeyboardA11y:u0})))});Gve.displayName="ReactFlow";const Hve=e=>{var t;return(t=e.domNode)==null?void 0:t.querySelector(".react-flow__edgelabel-renderer")};function rHe({children:e}){const t=rn(Hve);return t?gi.createPortal(e,t):null}function iHe(){const e=Gn();return I.useCallback(t=>{const{domNode:n,updateNodeDimensions:r}=e.getState(),o=(Array.isArray(t)?t:[t]).reduce((s,a)=>{const l=n==null?void 0:n.querySelector(`.react-flow__node[data-id="${a}"]`);return l&&s.push({id:a,nodeElement:l,forceUpdate:!0}),s},[]);requestAnimationFrame(()=>r(o))},[])}function Wve(){const e=[];return function(t,n){if(typeof n!="object"||n===null)return n;for(;e.length>0&&e.at(-1)!==this;)e.pop();return e.includes(n)?"[Circular]":(e.push(n),n)}}const kg=m5("nodes/receivedOpenAPISchema",async(e,{rejectWithValue:t})=>{try{const n=[window.location.origin,"openapi.json"].join("/"),i=await(await fetch(n)).json();return JSON.parse(JSON.stringify(i,Wve()))}catch(n){return t({error:n})}});var qve="\0",Yl="\0",R8="",Wr,Ac,di,Jg,Wd,qd,Ui,ts,Qa,ns,Ya,js,Vs,Kd,Xd,Us,vo,em,p3,PO;let Kve=(PO=class{constructor(t){Bt(this,em);Bt(this,Wr,!0);Bt(this,Ac,!1);Bt(this,di,!1);Bt(this,Jg,void 0);Bt(this,Wd,()=>{});Bt(this,qd,()=>{});Bt(this,Ui,{});Bt(this,ts,{});Bt(this,Qa,{});Bt(this,ns,{});Bt(this,Ya,{});Bt(this,js,{});Bt(this,Vs,{});Bt(this,Kd,0);Bt(this,Xd,0);Bt(this,Us,void 0);Bt(this,vo,void 0);t&&(Ni(this,Wr,t.hasOwnProperty("directed")?t.directed:!0),Ni(this,Ac,t.hasOwnProperty("multigraph")?t.multigraph:!1),Ni(this,di,t.hasOwnProperty("compound")?t.compound:!1)),Y(this,di)&&(Ni(this,Us,{}),Ni(this,vo,{}),Y(this,vo)[Yl]={})}isDirected(){return Y(this,Wr)}isMultigraph(){return Y(this,Ac)}isCompound(){return Y(this,di)}setGraph(t){return Ni(this,Jg,t),this}graph(){return Y(this,Jg)}setDefaultNodeLabel(t){return Ni(this,Wd,t),typeof t!="function"&&Ni(this,Wd,()=>t),this}nodeCount(){return Y(this,Kd)}nodes(){return Object.keys(Y(this,Ui))}sources(){var t=this;return this.nodes().filter(n=>Object.keys(Y(t,ts)[n]).length===0)}sinks(){var t=this;return this.nodes().filter(n=>Object.keys(Y(t,ns)[n]).length===0)}setNodes(t,n){var r=arguments,i=this;return t.forEach(function(o){r.length>1?i.setNode(o,n):i.setNode(o)}),this}setNode(t,n){return Y(this,Ui).hasOwnProperty(t)?(arguments.length>1&&(Y(this,Ui)[t]=n),this):(Y(this,Ui)[t]=arguments.length>1?n:Y(this,Wd).call(this,t),Y(this,di)&&(Y(this,Us)[t]=Yl,Y(this,vo)[t]={},Y(this,vo)[Yl][t]=!0),Y(this,ts)[t]={},Y(this,Qa)[t]={},Y(this,ns)[t]={},Y(this,Ya)[t]={},++th(this,Kd)._,this)}node(t){return Y(this,Ui)[t]}hasNode(t){return Y(this,Ui).hasOwnProperty(t)}removeNode(t){var n=this;if(Y(this,Ui).hasOwnProperty(t)){var r=i=>n.removeEdge(Y(n,js)[i]);delete Y(this,Ui)[t],Y(this,di)&&(Wo(this,em,p3).call(this,t),delete Y(this,Us)[t],this.children(t).forEach(function(i){n.setParent(i)}),delete Y(this,vo)[t]),Object.keys(Y(this,ts)[t]).forEach(r),delete Y(this,ts)[t],delete Y(this,Qa)[t],Object.keys(Y(this,ns)[t]).forEach(r),delete Y(this,ns)[t],delete Y(this,Ya)[t],--th(this,Kd)._}return this}setParent(t,n){if(!Y(this,di))throw new Error("Cannot set parent in a non-compound graph");if(n===void 0)n=Yl;else{n+="";for(var r=n;r!==void 0;r=this.parent(r))if(r===t)throw new Error("Setting "+n+" as parent of "+t+" would create a cycle");this.setNode(n)}return this.setNode(t),Wo(this,em,p3).call(this,t),Y(this,Us)[t]=n,Y(this,vo)[n][t]=!0,this}parent(t){if(Y(this,di)){var n=Y(this,Us)[t];if(n!==Yl)return n}}children(t=Yl){if(Y(this,di)){var n=Y(this,vo)[t];if(n)return Object.keys(n)}else{if(t===Yl)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var n=Y(this,Qa)[t];if(n)return Object.keys(n)}successors(t){var n=Y(this,Ya)[t];if(n)return Object.keys(n)}neighbors(t){var n=this.predecessors(t);if(n){const i=new Set(n);for(var r of this.successors(t))i.add(r);return Array.from(i.values())}}isLeaf(t){var n;return this.isDirected()?n=this.successors(t):n=this.neighbors(t),n.length===0}filterNodes(t){var n=new this.constructor({directed:Y(this,Wr),multigraph:Y(this,Ac),compound:Y(this,di)});n.setGraph(this.graph());var r=this;Object.entries(Y(this,Ui)).forEach(function([s,a]){t(s)&&n.setNode(s,a)}),Object.values(Y(this,js)).forEach(function(s){n.hasNode(s.v)&&n.hasNode(s.w)&&n.setEdge(s,r.edge(s))});var i={};function o(s){var a=r.parent(s);return a===void 0||n.hasNode(a)?(i[s]=a,a):a in i?i[a]:o(a)}return Y(this,di)&&n.nodes().forEach(s=>n.setParent(s,o(s))),n}setDefaultEdgeLabel(t){return Ni(this,qd,t),typeof t!="function"&&Ni(this,qd,()=>t),this}edgeCount(){return Y(this,Xd)}edges(){return Object.values(Y(this,js))}setPath(t,n){var r=this,i=arguments;return t.reduce(function(o,s){return i.length>1?r.setEdge(o,s,n):r.setEdge(o,s),s}),this}setEdge(){var t,n,r,i,o=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(t=s.v,n=s.w,r=s.name,arguments.length===2&&(i=arguments[1],o=!0)):(t=s,n=arguments[1],r=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,n=""+n,r!==void 0&&(r=""+r);var a=qh(Y(this,Wr),t,n,r);if(Y(this,Vs).hasOwnProperty(a))return o&&(Y(this,Vs)[a]=i),this;if(r!==void 0&&!Y(this,Ac))throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(n),Y(this,Vs)[a]=o?i:Y(this,qd).call(this,t,n,r);var l=Xve(Y(this,Wr),t,n,r);return t=l.v,n=l.w,Object.freeze(l),Y(this,js)[a]=l,O8(Y(this,Qa)[n],t),O8(Y(this,Ya)[t],n),Y(this,ts)[n][a]=l,Y(this,ns)[t][a]=l,th(this,Xd)._++,this}edge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r);return Y(this,Vs)[i]}edgeAsObj(){const t=this.edge(...arguments);return typeof t!="object"?{label:t}:t}hasEdge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r);return Y(this,Vs).hasOwnProperty(i)}removeEdge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r),o=Y(this,js)[i];return o&&(t=o.v,n=o.w,delete Y(this,Vs)[i],delete Y(this,js)[i],$8(Y(this,Qa)[n],t),$8(Y(this,Ya)[t],n),delete Y(this,ts)[n][i],delete Y(this,ns)[t][i],th(this,Xd)._--),this}inEdges(t,n){var r=Y(this,ts)[t];if(r){var i=Object.values(r);return n?i.filter(o=>o.v===n):i}}outEdges(t,n){var r=Y(this,ns)[t];if(r){var i=Object.values(r);return n?i.filter(o=>o.w===n):i}}nodeEdges(t,n){var r=this.inEdges(t,n);if(r)return r.concat(this.outEdges(t,n))}},Wr=new WeakMap,Ac=new WeakMap,di=new WeakMap,Jg=new WeakMap,Wd=new WeakMap,qd=new WeakMap,Ui=new WeakMap,ts=new WeakMap,Qa=new WeakMap,ns=new WeakMap,Ya=new WeakMap,js=new WeakMap,Vs=new WeakMap,Kd=new WeakMap,Xd=new WeakMap,Us=new WeakMap,vo=new WeakMap,em=new WeakSet,p3=function(t){delete Y(this,vo)[Y(this,Us)[t]][t]},PO);function O8(e,t){e[t]?e[t]++:e[t]=1}function $8(e,t){--e[t]||delete e[t]}function qh(e,t,n,r){var i=""+t,o=""+n;if(!e&&i>o){var s=i;i=o,o=s}return i+R8+o+R8+(r===void 0?qve:r)}function Xve(e,t,n,r){var i=""+t,o=""+n;if(!e&&i>o){var s=i;i=o,o=s}var a={v:i,w:o};return r&&(a.name=r),a}function hw(e,t){return qh(e,t.v,t.w,t.name)}var LT=Kve,Qve="2.1.13",Yve={Graph:LT,version:Qve},Zve=LT,Jve={write:e1e,read:r1e};function e1e(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:t1e(e),edges:n1e(e)};return e.graph()!==void 0&&(t.value=structuredClone(e.graph())),t}function t1e(e){return e.nodes().map(function(t){var n=e.node(t),r=e.parent(t),i={v:t};return n!==void 0&&(i.value=n),r!==void 0&&(i.parent=r),i})}function n1e(e){return e.edges().map(function(t){var n=e.edge(t),r={v:t.v,w:t.w};return t.name!==void 0&&(r.name=t.name),n!==void 0&&(r.value=n),r})}function r1e(e){var t=new Zve(e.options).setGraph(e.value);return e.nodes.forEach(function(n){t.setNode(n.v,n.value),n.parent&&t.setParent(n.v,n.parent)}),e.edges.forEach(function(n){t.setEdge({v:n.v,w:n.w,name:n.name},n.value)}),t}var i1e=o1e;function o1e(e){var t={},n=[],r;function i(o){t.hasOwnProperty(o)||(t[o]=!0,r.push(o),e.successors(o).forEach(i),e.predecessors(o).forEach(i))}return e.nodes().forEach(function(o){r=[],i(o),r.length&&n.push(r)}),n}var fr,Gs,tm,g3,nm,m3,Qd,ov,IO;let s1e=(IO=class{constructor(){Bt(this,tm);Bt(this,nm);Bt(this,Qd);Bt(this,fr,[]);Bt(this,Gs,{})}size(){return Y(this,fr).length}keys(){return Y(this,fr).map(function(t){return t.key})}has(t){return Y(this,Gs).hasOwnProperty(t)}priority(t){var n=Y(this,Gs)[t];if(n!==void 0)return Y(this,fr)[n].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return Y(this,fr)[0].key}add(t,n){var r=Y(this,Gs);if(t=String(t),!r.hasOwnProperty(t)){var i=Y(this,fr),o=i.length;return r[t]=o,i.push({key:t,priority:n}),Wo(this,nm,m3).call(this,o),!0}return!1}removeMin(){Wo(this,Qd,ov).call(this,0,Y(this,fr).length-1);var t=Y(this,fr).pop();return delete Y(this,Gs)[t.key],Wo(this,tm,g3).call(this,0),t.key}decrease(t,n){var r=Y(this,Gs)[t];if(n>Y(this,fr)[r].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+Y(this,fr)[r].priority+" New: "+n);Y(this,fr)[r].priority=n,Wo(this,nm,m3).call(this,r)}},fr=new WeakMap,Gs=new WeakMap,tm=new WeakSet,g3=function(t){var n=Y(this,fr),r=2*t,i=r+1,o=t;r>1,!(n[i].priority1;function c1e(e,t,n,r){return u1e(e,String(t),n||l1e,r||function(i){return e.outEdges(i)})}function u1e(e,t,n,r){var i={},o=new a1e,s,a,l=function(c){var u=c.v!==s?c.v:c.w,d=i[u],f=n(c),h=a.distance+f;if(f<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+c+" Weight: "+f);h0&&(s=o.removeMin(),a=i[s],a.distance!==Number.POSITIVE_INFINITY);)r(s).forEach(l);return i}var d1e=wj,f1e=h1e;function h1e(e,t,n){return e.nodes().reduce(function(r,i){return r[i]=d1e(e,i,t,n),r},{})}var Cj=p1e;function p1e(e){var t=0,n=[],r={},i=[];function o(s){var a=r[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach(function(u){r.hasOwnProperty(u)?r[u].onStack&&(a.lowlink=Math.min(a.lowlink,r[u].index)):(o(u),a.lowlink=Math.min(a.lowlink,r[u].lowlink))}),a.lowlink===a.index){var l=[],c;do c=n.pop(),r[c].onStack=!1,l.push(c);while(s!==c);i.push(l)}}return e.nodes().forEach(function(s){r.hasOwnProperty(s)||o(s)}),i}var g1e=Cj,m1e=y1e;function y1e(e){return g1e(e).filter(function(t){return t.length>1||t.length===1&&e.hasEdge(t[0],t[0])})}var v1e=_1e,b1e=()=>1;function _1e(e,t,n){return S1e(e,t||b1e,n||function(r){return e.outEdges(r)})}function S1e(e,t,n){var r={},i=e.nodes();return i.forEach(function(o){r[o]={},r[o][o]={distance:0},i.forEach(function(s){o!==s&&(r[o][s]={distance:Number.POSITIVE_INFINITY})}),n(o).forEach(function(s){var a=s.v===o?s.w:s.v,l=t(s);r[o][a]={distance:l,predecessor:o}})}),i.forEach(function(o){var s=r[o];i.forEach(function(a){var l=r[a];i.forEach(function(c){var u=l[o],d=s[c],f=l[c],h=u.distance+d.distance;he.successors(a):a=>e.neighbors(a),i=n==="post"?E1e:T1e,o=[],s={};return t.forEach(a=>{if(!e.hasNode(a))throw new Error("Graph does not have node: "+a);i(a,r,s,o)}),o}function E1e(e,t,n,r){for(var i=[[e,!1]];i.length>0;){var o=i.pop();o[1]?r.push(o[0]):n.hasOwnProperty(o[0])||(n[o[0]]=!0,i.push([o[0],!0]),kj(t(o[0]),s=>i.push([s,!1])))}}function T1e(e,t,n,r){for(var i=[e];i.length>0;){var o=i.pop();n.hasOwnProperty(o)||(n[o]=!0,r.push(o),kj(t(o),s=>i.push(s)))}}function kj(e,t){for(var n=e.length;n--;)t(e[n],n,e);return e}var A1e=Aj,k1e=P1e;function P1e(e,t){return A1e(e,t,"post")}var I1e=Aj,M1e=R1e;function R1e(e,t){return I1e(e,t,"pre")}var O1e=LT,$1e=xj,N1e=F1e;function F1e(e,t){var n=new O1e,r={},i=new $1e,o;function s(l){var c=l.v===o?l.w:l.v,u=i.priority(c);if(u!==void 0){var d=t(l);d0;){if(o=i.removeMin(),r.hasOwnProperty(o))n.setEdge(o,r[o]);else{if(a)throw new Error("Input graph is not connected: "+e);a=!0}e.nodeEdges(o).forEach(s)}return n}var D1e={components:i1e,dijkstra:wj,dijkstraAll:f1e,findCycles:m1e,floydWarshall:v1e,isAcyclic:x1e,postorder:k1e,preorder:M1e,prim:N1e,tarjan:Cj,topsort:Tj},F8=Yve,L1e={Graph:F8.Graph,json:Jve,alg:D1e,version:F8.version};const D8=Ml(L1e),L8=(e,t,n,r)=>{const i=new D8.Graph;return n.forEach(o=>{i.setNode(o.id)}),r.forEach(o=>{i.setEdge(o.source,o.target)}),i.setEdge(e,t),D8.alg.isAcyclic(i)},B1e=(e,t)=>{if(e.name==="CollectionField"&&t.name==="CollectionField")return!1;if($4(e,t))return!0;const n=e.name==="CollectionItemField"&&!t.isCollection,r=t.name==="CollectionItemField"&&!e.isCollection&&!e.isCollectionOrScalar,i=t.isCollectionOrScalar&&e.name===t.name,o=e.name==="CollectionField"&&(t.isCollection||t.isCollectionOrScalar),s=t.name==="CollectionField"&&e.isCollection,a=!e.isCollection&&!e.isCollectionOrScalar&&!t.isCollection&&!t.isCollectionOrScalar,l=a&&e.name==="IntegerField"&&t.name==="FloatField",c=a&&(e.name==="IntegerField"||e.name==="FloatField")&&t.name==="StringField",u=t.name==="AnyField";return n||r||i||o||s||l||c||u},B8=(e,t,n,r,i)=>{let o=!0;return t==="source"?e.find(s=>s.target===r.id&&s.targetHandle===i.name)&&(o=!1):e.find(s=>s.source===r.id&&s.sourceHandle===i.name)&&(o=!1),B1e(n,i.type)||(o=!1),o},z8=(e,t,n,r,i,o,s)=>{if(e.id===r)return null;const a=o=="source"?e.data.inputs:e.data.outputs;if(a[i]){const l=a[i],c=o=="source"?r:e.id,u=o=="source"?e.id:r,d=o=="source"?i:l.name,f=o=="source"?l.name:i,h=L8(c,u,t,n),p=B8(n,o,s,e,l);if(h&&p)return{source:c,sourceHandle:d,target:u,targetHandle:f}}for(const l in a){const c=a[l],u=o=="source"?r:e.id,d=o=="source"?e.id:r,f=o=="source"?i:c.name,h=o=="source"?c.name:i,p=L8(u,d,t,n),m=B8(n,o,s,e,c);if(p&&m)return{source:u,sourceHandle:f,target:d,targetHandle:h}}return null},j8=(e,t,n)=>{let r=t,i=n;for(;e.find(o=>o.position.x===r&&o.position.y===i);)r=r+50,i=i+50;return{x:r,y:i}},pw={status:gc.enum.PENDING,error:null,progress:null,progressImage:null,outputs:[]},Pj={nodes:[],edges:[],nodeTemplates:{},isReady:!1,connectionStartParams:null,connectionStartFieldType:null,connectionMade:!1,modifyingEdge:!1,addNewNodePosition:null,shouldShowMinimapPanel:!0,shouldValidateGraph:!0,shouldAnimateEdges:!0,shouldSnapToGrid:!1,shouldColorEdges:!0,isAddNodePopoverOpen:!1,nodeOpacity:1,selectedNodes:[],selectedEdges:[],nodeExecutionStates:{},viewport:{x:0,y:0,zoom:1},mouseOverField:null,mouseOverNode:null,nodesToCopy:[],edgesToCopy:[],selectionMode:Cl.Partial},kr=(e,t,n)=>{var c,u;const{nodeId:r,fieldName:i,value:o}=t.payload,s=e.nodes.findIndex(d=>d.id===r),a=(c=e.nodes)==null?void 0:c[s];if(!Sn(a))return;const l=(u=a.data)==null?void 0:u.inputs[i];!l||s<0||!n.safeParse(o).success||(l.value=o)},Ij=jt({name:"nodes",initialState:Pj,reducers:{nodesChanged:(e,t)=>{e.nodes=lc(t.payload,e.nodes)},nodeReplaced:(e,t)=>{const n=e.nodes.findIndex(r=>r.id===t.payload.nodeId);n<0||(e.nodes[n]=t.payload.node)},nodeAdded:(e,t)=>{var i,o;const n=t.payload,r=j8(e.nodes,((i=e.addNewNodePosition)==null?void 0:i.x)??n.position.x,((o=e.addNewNodePosition)==null?void 0:o.y)??n.position.y);if(n.position=r,n.selected=!0,e.nodes=lc(e.nodes.map(s=>({id:s.id,type:"select",selected:!1})),e.nodes),e.edges=Ql(e.edges.map(s=>({id:s.id,type:"select",selected:!1})),e.edges),e.nodes.push(n),!!Sn(n)){if(e.nodeExecutionStates[n.id]={nodeId:n.id,...pw},e.connectionStartParams){const{nodeId:s,handleId:a,handleType:l}=e.connectionStartParams;if(s&&a&&l&&e.connectionStartFieldType){const c=z8(n,e.nodes,e.edges,s,a,l,e.connectionStartFieldType);c&&(e.edges=Wh({...c,type:"default"},e.edges))}}e.connectionStartParams=null,e.connectionStartFieldType=null}},edgeChangeStarted:e=>{e.modifyingEdge=!0},edgesChanged:(e,t)=>{e.edges=Ql(t.payload,e.edges)},edgeAdded:(e,t)=>{e.edges=Wh(t.payload,e.edges)},edgeUpdated:(e,t)=>{const{oldEdge:n,newConnection:r}=t.payload;e.edges=xye(n,r,e.edges)},connectionStarted:(e,t)=>{var l;e.connectionStartParams=t.payload,e.connectionMade=e.modifyingEdge;const{nodeId:n,handleId:r,handleType:i}=t.payload;if(!n||!r)return;const o=e.nodes.findIndex(c=>c.id===n),s=(l=e.nodes)==null?void 0:l[o];if(!Sn(s))return;const a=i==="source"?s.data.outputs[r]:s.data.inputs[r];e.connectionStartFieldType=(a==null?void 0:a.type)??null},connectionMade:(e,t)=>{e.connectionStartFieldType&&(e.edges=Wh({...t.payload,type:"default"},e.edges),e.connectionMade=!0)},connectionEnded:(e,t)=>{var n;if(e.connectionMade)e.connectionStartParams=null,e.connectionStartFieldType=null;else if(e.mouseOverNode){const r=e.nodes.findIndex(o=>o.id===e.mouseOverNode),i=(n=e.nodes)==null?void 0:n[r];if(i&&e.connectionStartParams){const{nodeId:o,handleId:s,handleType:a}=e.connectionStartParams;if(o&&s&&a&&e.connectionStartFieldType){const l=z8(i,e.nodes,e.edges,o,s,a,e.connectionStartFieldType);l&&(e.edges=Wh({...l,type:"default"},e.edges))}}e.connectionStartParams=null,e.connectionStartFieldType=null}else e.addNewNodePosition=t.payload.cursorPosition,e.isAddNodePopoverOpen=!0;e.modifyingEdge=!1},fieldLabelChanged:(e,t)=>{const{nodeId:n,fieldName:r,label:i}=t.payload,o=e.nodes.find(a=>a.id===n);if(!Sn(o))return;const s=o.data.inputs[r];s&&(s.label=i)},nodeUseCacheChanged:(e,t)=>{var s;const{nodeId:n,useCache:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.useCache=r)},nodeIsIntermediateChanged:(e,t)=>{var s;const{nodeId:n,isIntermediate:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.isIntermediate=r)},nodeIsOpenChanged:(e,t)=>{var a;const{nodeId:n,isOpen:r}=t.payload,i=e.nodes.findIndex(l=>l.id===n),o=(a=e.nodes)==null?void 0:a[i];if(!Sn(o)&&!Y5(o)||(o.data.isOpen=r,!Sn(o)))return;const s=$T([o],e.edges);if(r)s.forEach(l=>{delete l.hidden}),s.forEach(l=>{l.type==="collapsed"&&(e.edges=e.edges.filter(c=>c.id!==l.id))});else{const l=_ye(o,e.nodes,e.edges).filter(d=>Sn(d)&&d.data.isOpen===!1),c=bye(o,e.nodes,e.edges).filter(d=>Sn(d)&&d.data.isOpen===!1),u=[];s.forEach(d=>{var f,h;if(d.target===n&&l.find(p=>p.id===d.source)){d.hidden=!0;const p=u.find(m=>m.source===d.source&&m.target===d.target);p?p.data={count:(((f=p.data)==null?void 0:f.count)??0)+1}:u.push({id:`${d.source}-${d.target}-collapsed`,source:d.source,target:d.target,type:"collapsed",data:{count:1},updatable:!1})}if(d.source===n&&c.find(p=>p.id===d.target)){const p=u.find(m=>m.source===d.source&&m.target===d.target);d.hidden=!0,p?p.data={count:(((h=p.data)==null?void 0:h.count)??0)+1}:u.push({id:`${d.source}-${d.target}-collapsed`,source:d.source,target:d.target,type:"collapsed",data:{count:1},updatable:!1})}}),u.length&&(e.edges=Ql(u.map(d=>({type:"add",item:d})),e.edges))}},edgeDeleted:(e,t)=>{e.edges=e.edges.filter(n=>n.id!==t.payload)},edgesDeleted:(e,t)=>{const r=t.payload.filter(i=>i.type==="collapsed");if(r.length){const i=[];r.forEach(o=>{e.edges.forEach(s=>{s.source===o.source&&s.target===o.target&&i.push({id:s.id,type:"remove"})})}),e.edges=Ql(i,e.edges)}},nodesDeleted:(e,t)=>{t.payload.forEach(n=>{Sn(n)&&delete e.nodeExecutionStates[n.id]})},nodeLabelChanged:(e,t)=>{var s;const{nodeId:n,label:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.label=r)},nodeNotesChanged:(e,t)=>{var s;const{nodeId:n,notes:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.notes=r)},nodeExclusivelySelected:(e,t)=>{const n=t.payload;e.nodes=lc(e.nodes.map(r=>({id:r.id,type:"select",selected:r.id===n})),e.nodes)},selectedNodesChanged:(e,t)=>{e.selectedNodes=t.payload},selectedEdgesChanged:(e,t)=>{e.selectedEdges=t.payload},fieldStringValueChanged:(e,t)=>{kr(e,t,V_)},fieldNumberValueChanged:(e,t)=>{kr(e,t,z_.or(j_))},fieldBooleanValueChanged:(e,t)=>{kr(e,t,U_)},fieldBoardValueChanged:(e,t)=>{kr(e,t,W_)},fieldImageValueChanged:(e,t)=>{kr(e,t,H_)},fieldColorValueChanged:(e,t)=>{kr(e,t,q_)},fieldMainModelValueChanged:(e,t)=>{kr(e,t,Df)},fieldRefinerModelValueChanged:(e,t)=>{kr(e,t,K_)},fieldVaeModelValueChanged:(e,t)=>{kr(e,t,X_)},fieldLoRAModelValueChanged:(e,t)=>{kr(e,t,Q_)},fieldControlNetModelValueChanged:(e,t)=>{kr(e,t,Y_)},fieldIPAdapterModelValueChanged:(e,t)=>{kr(e,t,Z_)},fieldT2IAdapterModelValueChanged:(e,t)=>{kr(e,t,J_)},fieldEnumModelValueChanged:(e,t)=>{kr(e,t,G_)},fieldSchedulerValueChanged:(e,t)=>{kr(e,t,eS)},notesNodeValueChanged:(e,t)=>{var s;const{nodeId:n,value:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Y5(o)&&(o.data.notes=r)},shouldShowMinimapPanelChanged:(e,t)=>{e.shouldShowMinimapPanel=t.payload},nodeTemplatesBuilt:(e,t)=>{e.nodeTemplates=t.payload,e.isReady=!0},nodeEditorReset:e=>{e.nodes=[],e.edges=[]},shouldValidateGraphChanged:(e,t)=>{e.shouldValidateGraph=t.payload},shouldAnimateEdgesChanged:(e,t)=>{e.shouldAnimateEdges=t.payload},shouldSnapToGridChanged:(e,t)=>{e.shouldSnapToGrid=t.payload},shouldColorEdgesChanged:(e,t)=>{e.shouldColorEdges=t.payload},nodeOpacityChanged:(e,t)=>{e.nodeOpacity=t.payload},viewportChanged:(e,t)=>{e.viewport=t.payload},mouseOverFieldChanged:(e,t)=>{e.mouseOverField=t.payload},mouseOverNodeChanged:(e,t)=>{e.mouseOverNode=t.payload},selectedAll:e=>{e.nodes=lc(e.nodes.map(t=>({id:t.id,type:"select",selected:!0})),e.nodes),e.edges=Ql(e.edges.map(t=>({id:t.id,type:"select",selected:!0})),e.edges)},selectionCopied:e=>{if(e.nodesToCopy=e.nodes.filter(t=>t.selected).map(Ge),e.edgesToCopy=e.edges.filter(t=>t.selected).map(Ge),e.nodesToCopy.length>0){const t={x:0,y:0};e.nodesToCopy.forEach(n=>{const r=.15*(n.width??0),i=.5*(n.height??0);t.x+=n.position.x+r,t.y+=n.position.y+i}),t.x/=e.nodesToCopy.length,t.y/=e.nodesToCopy.length,e.nodesToCopy.forEach(n=>{n.position.x-=t.x,n.position.y-=t.y})}},selectionPasted:(e,t)=>{const{cursorPosition:n}=t.payload,r=e.nodesToCopy.map(Ge),i=r.map(u=>u.data.id),o=e.edgesToCopy.filter(u=>i.includes(u.source)&&i.includes(u.target)).map(Ge);o.forEach(u=>u.selected=!0),r.forEach(u=>{const d=ul();o.forEach(h=>{h.source===u.data.id&&(h.source=d,h.id=h.id.replace(u.data.id,d)),h.target===u.data.id&&(h.target=d,h.id=h.id.replace(u.data.id,d))}),u.selected=!0,u.id=d,u.data.id=d;const f=j8(e.nodes,u.position.x+((n==null?void 0:n.x)??0),u.position.y+((n==null?void 0:n.y)??0));u.position=f});const s=r.map(u=>({item:u,type:"add"})),a=e.nodes.map(u=>({id:u.data.id,type:"select",selected:!1})),l=o.map(u=>({item:u,type:"add"})),c=e.edges.map(u=>({id:u.id,type:"select",selected:!1}));e.nodes=lc(s.concat(a),e.nodes),e.edges=Ql(l.concat(c),e.edges),r.forEach(u=>{e.nodeExecutionStates[u.id]={nodeId:u.id,...pw}})},addNodePopoverOpened:e=>{e.addNewNodePosition=null,e.isAddNodePopoverOpen=!0},addNodePopoverClosed:e=>{e.isAddNodePopoverOpen=!1,e.connectionStartParams=null,e.connectionStartFieldType=null},addNodePopoverToggled:e=>{e.isAddNodePopoverOpen=!e.isAddNodePopoverOpen},selectionModeChanged:(e,t)=>{e.selectionMode=t.payload?Cl.Full:Cl.Partial}},extraReducers:e=>{e.addCase(kg.pending,t=>{t.isReady=!1}),e.addCase(yT,(t,n)=>{const{nodes:r,edges:i}=n.payload;t.nodes=lc(r.map(o=>({item:{...o,...cB},type:"add"})),[]),t.edges=Ql(i.map(o=>({item:o,type:"add"})),[]),t.nodeExecutionStates=r.reduce((o,s)=>(o[s.id]={nodeId:s.id,...pw},o),{})}),e.addCase(D4,(t,n)=>{const{source_node_id:r}=n.payload.data,i=t.nodeExecutionStates[r];i&&(i.status=gc.enum.IN_PROGRESS)}),e.addCase(B4,(t,n)=>{const{source_node_id:r,result:i}=n.payload.data,o=t.nodeExecutionStates[r];o&&(o.status=gc.enum.COMPLETED,o.progress!==null&&(o.progress=1),o.outputs.push(i))}),e.addCase(u_,(t,n)=>{const{source_node_id:r}=n.payload.data,i=t.nodeExecutionStates[r];i&&(i.status=gc.enum.FAILED,i.error=n.payload.data.error,i.progress=null,i.progressImage=null)}),e.addCase(z4,(t,n)=>{const{source_node_id:r,step:i,total_steps:o,progress_image:s}=n.payload.data,a=t.nodeExecutionStates[r];a&&(a.status=gc.enum.IN_PROGRESS,a.progress=(i+1)/o,a.progressImage=s??null)}),e.addCase(d_,(t,n)=>{["in_progress"].includes(n.payload.data.queue_item.status)&&Fo(t.nodeExecutionStates,r=>{r.status=gc.enum.PENDING,r.error=null,r.progress=null,r.progressImage=null,r.outputs=[]})})}}),{addNodePopoverClosed:aHe,addNodePopoverOpened:lHe,addNodePopoverToggled:cHe,connectionEnded:z1e,connectionMade:j1e,connectionStarted:uHe,edgeDeleted:V1e,edgeChangeStarted:dHe,edgesChanged:U1e,edgesDeleted:G1e,edgeUpdated:H1e,fieldBoardValueChanged:W1e,fieldBooleanValueChanged:q1e,fieldColorValueChanged:K1e,fieldControlNetModelValueChanged:X1e,fieldEnumModelValueChanged:Q1e,fieldImageValueChanged:Um,fieldIPAdapterModelValueChanged:Y1e,fieldT2IAdapterModelValueChanged:Z1e,fieldLabelChanged:J1e,fieldLoRAModelValueChanged:ebe,fieldMainModelValueChanged:tbe,fieldNumberValueChanged:nbe,fieldRefinerModelValueChanged:rbe,fieldSchedulerValueChanged:ibe,fieldStringValueChanged:obe,fieldVaeModelValueChanged:sbe,mouseOverFieldChanged:fHe,mouseOverNodeChanged:hHe,nodeAdded:abe,nodeReplaced:Mj,nodeEditorReset:Rj,nodeExclusivelySelected:pHe,nodeIsIntermediateChanged:lbe,nodeIsOpenChanged:cbe,nodeLabelChanged:ube,nodeNotesChanged:dbe,nodeOpacityChanged:gHe,nodesChanged:fbe,nodesDeleted:Oj,nodeTemplatesBuilt:$j,nodeUseCacheChanged:hbe,notesNodeValueChanged:pbe,selectedAll:mHe,selectedEdgesChanged:yHe,selectedNodesChanged:vHe,selectionCopied:bHe,selectionModeChanged:_He,selectionPasted:gbe,shouldAnimateEdgesChanged:SHe,shouldColorEdgesChanged:xHe,shouldShowMinimapPanelChanged:wHe,shouldSnapToGridChanged:CHe,shouldValidateGraphChanged:EHe,viewportChanged:THe,edgeAdded:mbe}=Ij.actions,ybe=br(z1e,j1e,V1e,U1e,G1e,H1e,W1e,q1e,K1e,X1e,Q1e,Um,Y1e,Z1e,J1e,ebe,tbe,nbe,rbe,ibe,obe,sbe,abe,Mj,lbe,cbe,ube,dbe,fbe,Oj,hbe,pbe,gbe,mbe),vbe=Ij.reducer,gw={name:"",author:"",description:"",version:"",contact:"",tags:"",notes:"",exposedFields:[],meta:{version:"2.0.0",category:"user"},isTouched:!0},Nj=jt({name:"workflow",initialState:gw,reducers:{workflowExposedFieldAdded:(e,t)=>{e.exposedFields=YF(e.exposedFields.concat(t.payload),n=>`${n.nodeId}-${n.fieldName}`),e.isTouched=!0},workflowExposedFieldRemoved:(e,t)=>{e.exposedFields=e.exposedFields.filter(n=>!$4(n,t.payload)),e.isTouched=!0},workflowNameChanged:(e,t)=>{e.name=t.payload,e.isTouched=!0},workflowDescriptionChanged:(e,t)=>{e.description=t.payload,e.isTouched=!0},workflowTagsChanged:(e,t)=>{e.tags=t.payload,e.isTouched=!0},workflowAuthorChanged:(e,t)=>{e.author=t.payload,e.isTouched=!0},workflowNotesChanged:(e,t)=>{e.notes=t.payload,e.isTouched=!0},workflowVersionChanged:(e,t)=>{e.version=t.payload,e.isTouched=!0},workflowContactChanged:(e,t)=>{e.contact=t.payload,e.isTouched=!0},workflowIDChanged:(e,t)=>{e.id=t.payload},workflowReset:()=>Ge(gw),workflowSaved:e=>{e.isTouched=!1}},extraReducers:e=>{e.addCase(yT,(t,n)=>{const{nodes:r,edges:i,...o}=n.payload;return{...Ge(o),isTouched:!0}}),e.addCase(Oj,(t,n)=>{n.payload.forEach(r=>{t.exposedFields=t.exposedFields.filter(i=>i.nodeId!==r.id)})}),e.addCase(Rj,()=>Ge(gw)),e.addMatcher(ybe,t=>{t.isTouched=!0})}}),{workflowExposedFieldAdded:bbe,workflowExposedFieldRemoved:AHe,workflowNameChanged:kHe,workflowDescriptionChanged:PHe,workflowTagsChanged:IHe,workflowAuthorChanged:MHe,workflowNotesChanged:RHe,workflowVersionChanged:OHe,workflowContactChanged:$He,workflowIDChanged:NHe,workflowReset:FHe,workflowSaved:DHe}=Nj.actions,_be=Nj.reducer,Fj={esrganModelName:"RealESRGAN_x4plus.pth"},Dj=jt({name:"postprocessing",initialState:Fj,reducers:{esrganModelNameChanged:(e,t)=>{e.esrganModelName=t.payload}}}),{esrganModelNameChanged:LHe}=Dj.actions,Sbe=Dj.reducer,Lj={positiveStylePrompt:"",negativeStylePrompt:"",shouldConcatSDXLStylePrompt:!0,shouldUseSDXLRefiner:!1,sdxlImg2ImgDenoisingStrength:.7,refinerModel:null,refinerSteps:20,refinerCFGScale:7.5,refinerScheduler:"euler",refinerPositiveAestheticScore:6,refinerNegativeAestheticScore:2.5,refinerStart:.8},Bj=jt({name:"sdxl",initialState:Lj,reducers:{setPositiveStylePromptSDXL:(e,t)=>{e.positiveStylePrompt=t.payload},setNegativeStylePromptSDXL:(e,t)=>{e.negativeStylePrompt=t.payload},setShouldConcatSDXLStylePrompt:(e,t)=>{e.shouldConcatSDXLStylePrompt=t.payload},setShouldUseSDXLRefiner:(e,t)=>{e.shouldUseSDXLRefiner=t.payload},setSDXLImg2ImgDenoisingStrength:(e,t)=>{e.sdxlImg2ImgDenoisingStrength=t.payload},refinerModelChanged:(e,t)=>{e.refinerModel=t.payload},setRefinerSteps:(e,t)=>{e.refinerSteps=t.payload},setRefinerCFGScale:(e,t)=>{e.refinerCFGScale=t.payload},setRefinerScheduler:(e,t)=>{e.refinerScheduler=t.payload},setRefinerPositiveAestheticScore:(e,t)=>{e.refinerPositiveAestheticScore=t.payload},setRefinerNegativeAestheticScore:(e,t)=>{e.refinerNegativeAestheticScore=t.payload},setRefinerStart:(e,t)=>{e.refinerStart=t.payload}}}),{setPositiveStylePromptSDXL:BHe,setNegativeStylePromptSDXL:zHe,setShouldConcatSDXLStylePrompt:jHe,setShouldUseSDXLRefiner:xbe,setSDXLImg2ImgDenoisingStrength:VHe,refinerModelChanged:V8,setRefinerSteps:UHe,setRefinerCFGScale:GHe,setRefinerScheduler:HHe,setRefinerPositiveAestheticScore:WHe,setRefinerNegativeAestheticScore:qHe,setRefinerStart:KHe}=Bj.actions,wbe=Bj.reducer,zj={shift:!1,ctrl:!1,meta:!1},jj=jt({name:"hotkeys",initialState:zj,reducers:{shiftKeyPressed:(e,t)=>{e.shift=t.payload},ctrlKeyPressed:(e,t)=>{e.ctrl=t.payload},metaKeyPressed:(e,t)=>{e.meta=t.payload}}}),{shiftKeyPressed:XHe,ctrlKeyPressed:QHe,metaKeyPressed:YHe}=jj.actions,Cbe=jj.reducer,Vj={activeTab:"txt2img",shouldShowImageDetails:!1,shouldUseCanvasBetaLayout:!1,shouldShowExistingModelsInSearch:!1,shouldUseSliders:!1,shouldHidePreview:!1,shouldShowProgressInViewer:!0,shouldShowEmbeddingPicker:!1,shouldAutoChangeDimensions:!1,favoriteSchedulers:[],globalMenuCloseTrigger:0,panels:{}},Uj=jt({name:"ui",initialState:Vj,reducers:{setActiveTab:(e,t)=>{e.activeTab=t.payload},setShouldShowImageDetails:(e,t)=>{e.shouldShowImageDetails=t.payload},setShouldUseCanvasBetaLayout:(e,t)=>{e.shouldUseCanvasBetaLayout=t.payload},setShouldHidePreview:(e,t)=>{e.shouldHidePreview=t.payload},setShouldShowExistingModelsInSearch:(e,t)=>{e.shouldShowExistingModelsInSearch=t.payload},setShouldUseSliders:(e,t)=>{e.shouldUseSliders=t.payload},setShouldShowProgressInViewer:(e,t)=>{e.shouldShowProgressInViewer=t.payload},favoriteSchedulersChanged:(e,t)=>{e.favoriteSchedulers=t.payload},toggleEmbeddingPicker:e=>{e.shouldShowEmbeddingPicker=!e.shouldShowEmbeddingPicker},setShouldAutoChangeDimensions:(e,t)=>{e.shouldAutoChangeDimensions=t.payload},bumpGlobalMenuCloseTrigger:e=>{e.globalMenuCloseTrigger+=1},panelsChanged:(e,t)=>{e.panels[t.payload.name]=t.payload.value}},extraReducers(e){e.addCase(m_,t=>{t.activeTab="img2img"})}}),{setActiveTab:Gj,setShouldShowImageDetails:ZHe,setShouldUseCanvasBetaLayout:JHe,setShouldShowExistingModelsInSearch:eWe,setShouldUseSliders:tWe,setShouldHidePreview:nWe,setShouldShowProgressInViewer:rWe,favoriteSchedulersChanged:iWe,toggleEmbeddingPicker:oWe,setShouldAutoChangeDimensions:sWe,bumpGlobalMenuCloseTrigger:aWe,panelsChanged:lWe}=Uj.actions,Ebe=Uj.reducer;function cS(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function Hj(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const r=cS(n);return(i,o)=>r.then(s=>o(s.transaction(t,i).objectStore(t)))}let mw;function BT(){return mw||(mw=Hj("keyval-store","keyval")),mw}function Tbe(e,t=BT()){return t("readonly",n=>cS(n.get(e)))}function Abe(e,t,n=BT()){return n("readwrite",r=>(r.put(t,e),cS(r.transaction)))}function cWe(e=BT()){return e("readwrite",t=>(t.clear(),cS(t.transaction)))}var zT=Object.defineProperty,kbe=Object.getOwnPropertyDescriptor,Pbe=Object.getOwnPropertyNames,Ibe=Object.prototype.hasOwnProperty,Mbe=(e,t)=>{for(var n in t)zT(e,n,{get:t[n],enumerable:!0})},Rbe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Pbe(t))!Ibe.call(e,i)&&i!==n&&zT(e,i,{get:()=>t[i],enumerable:!(r=kbe(t,i))||r.enumerable});return e},Obe=e=>Rbe(zT({},"__esModule",{value:!0}),e),Wj={};Mbe(Wj,{__DO_NOT_USE__ActionTypes:()=>Pg,applyMiddleware:()=>jbe,bindActionCreators:()=>zbe,combineReducers:()=>Bbe,compose:()=>qj,createStore:()=>VT,isAction:()=>Vbe,isPlainObject:()=>jT,legacy_createStore:()=>Dbe});var $be=Obe(Wj);function Mn(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Nbe=(()=>typeof Symbol=="function"&&Symbol.observable||"@@observable")(),U8=Nbe,yw=()=>Math.random().toString(36).substring(7).split("").join("."),Fbe={INIT:`@@redux/INIT${yw()}`,REPLACE:`@@redux/REPLACE${yw()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${yw()}`},Pg=Fbe;function jT(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function VT(e,t,n){if(typeof e!="function")throw new Error(Mn(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Mn(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Mn(1));return n(VT)(e,t)}let r=e,i=t,o=new Map,s=o,a=0,l=!1;function c(){s===o&&(s=new Map,o.forEach((_,v)=>{s.set(v,_)}))}function u(){if(l)throw new Error(Mn(3));return i}function d(_){if(typeof _!="function")throw new Error(Mn(4));if(l)throw new Error(Mn(5));let v=!0;c();const y=a++;return s.set(y,_),function(){if(v){if(l)throw new Error(Mn(6));v=!1,c(),s.delete(y),o=null}}}function f(_){if(!jT(_))throw new Error(Mn(7));if(typeof _.type>"u")throw new Error(Mn(8));if(typeof _.type!="string")throw new Error(Mn(17));if(l)throw new Error(Mn(9));try{l=!0,i=r(i,_)}finally{l=!1}return(o=s).forEach(y=>{y()}),_}function h(_){if(typeof _!="function")throw new Error(Mn(10));r=_,f({type:Pg.REPLACE})}function p(){const _=d;return{subscribe(v){if(typeof v!="object"||v===null)throw new Error(Mn(11));function y(){const b=v;b.next&&b.next(u())}return y(),{unsubscribe:_(y)}},[U8](){return this}}}return f({type:Pg.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:h,[U8]:p}}function Dbe(e,t,n){return VT(e,t,n)}function Lbe(e){Object.keys(e).forEach(t=>{const n=e[t];if(typeof n(void 0,{type:Pg.INIT})>"u")throw new Error(Mn(12));if(typeof n(void 0,{type:Pg.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Mn(13))})}function Bbe(e){const t=Object.keys(e),n={};for(let o=0;o"u")throw a&&a.type,new Error(Mn(14));c[d]=p,l=l||p!==h}return l=l||r.length!==Object.keys(s).length,l?c:s}}function G8(e,t){return function(...n){return t(e.apply(this,n))}}function zbe(e,t){if(typeof e=="function")return G8(e,t);if(typeof e!="object"||e===null)throw new Error(Mn(16));const n={};for(const r in e){const i=e[r];typeof i=="function"&&(n[r]=G8(i,t))}return n}function qj(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function jbe(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Mn(15))};const s={getState:i.getState,dispatch:(l,...c)=>o(l,...c)},a=e.map(l=>l(s));return o=qj(...a)(i.dispatch),{...i,dispatch:o}}}function Vbe(e){return jT(e)&&"type"in e&&typeof e.type=="string"}Xj=Kj=void 0;var Ube=$be,Gbe=function(){var t=[],n=[],r=void 0,i=function(c){return r=c,function(u){return function(d){return Ube.compose.apply(void 0,n)(u)(d)}}},o=function(){for(var c,u,d=arguments.length,f=Array(d),h=0;h=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(c){throw c},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,s=!1,a;return{s:function(){n=n.call(e)},n:function(){var c=n.next();return o=c.done,c},e:function(c){s=!0,a=c},f:function(){try{!o&&n.return!=null&&n.return()}finally{if(s)throw a}}}}function Yj(e,t){if(e){if(typeof e=="string")return K8(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return K8(e,t)}}function K8(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,i=r.prefix,o=r.driver,s=r.persistWholeStore,a=r.serialize;try{var l=s?a_e:l_e;yield l(t,n,{prefix:i,driver:o,serialize:a})}catch(c){console.warn("redux-remember: persist error",c)}});return function(){return e.apply(this,arguments)}}();function Z8(e,t,n,r,i,o,s){try{var a=e[o](s),l=a.value}catch(c){n(c);return}a.done?t(l):Promise.resolve(l).then(r,i)}function J8(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(l){Z8(o,r,i,s,a,"next",l)}function a(l){Z8(o,r,i,s,a,"throw",l)}s(void 0)})}}var u_e=function(){var e=J8(function*(t,n,r){var i=r.prefix,o=r.driver,s=r.serialize,a=r.unserialize,l=r.persistThrottle,c=r.persistDebounce,u=r.persistWholeStore;yield n_e(t,n,{prefix:i,driver:o,unserialize:a,persistWholeStore:u});var d={},f=function(){var h=J8(function*(){var p=Qj(t.getState(),n);yield c_e(p,d,{prefix:i,driver:o,serialize:s,persistWholeStore:u}),GT(p,d)||t.dispatch({type:Kbe,payload:p}),d=p});return function(){return h.apply(this,arguments)}}();c&&c>0?t.subscribe(Qbe(f,c)):t.subscribe(Xbe(f,l))});return function(n,r,i){return e.apply(this,arguments)}}();const d_e=u_e;function Mg(e){"@babel/helpers - typeof";return Mg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mg(e)}function eM(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function _w(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:n.state,o=arguments.length>1?arguments[1]:void 0;o.type&&((o==null?void 0:o.type)==="@@INIT"||o!=null&&(r=o.type)!==null&&r!==void 0&&r.startsWith("@@redux/INIT"))&&(n.state=_w({},i));var s=typeof t=="function"?t:Vb(t);switch(o.type){case v3:{var a=_w(_w({},n.state),(o==null?void 0:o.payload)||{});return n.state=s(a,{type:v3,payload:a}),n.state}default:return s(i,o)}}},m_e=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=r.prefix,o=i===void 0?"@@remember-":i,s=r.serialize,a=s===void 0?function(v,y){return JSON.stringify(v)}:s,l=r.unserialize,c=l===void 0?function(v,y){return JSON.parse(v)}:l,u=r.persistThrottle,d=u===void 0?100:u,f=r.persistDebounce,h=r.persistWholeStore,p=h===void 0?!1:h,m=r.initActionType;if(!t)throw Error("redux-remember error: driver required");if(!Array.isArray(n))throw Error("redux-remember error: rememberedKeys needs to be an array");var _=function(y){return function(g,b,S){var w=!1,C=function(A){return d_e(A,n,{driver:t,prefix:o,serialize:a,unserialize:c,persistThrottle:d,persistDebounce:f,persistWholeStore:p})},x=y(function(k,A){return!w&&m&&A.type===m&&(w=!0,setTimeout(function(){return C(x)},0)),g(k,A)},b,S);return m||(w=!0,C(x)),x}};return _};const tM="@@invokeai-",y_e=["cursorPosition"],v_e=["pendingControlImages"],b_e=["prompts"],__e=["selection","selectedBoardId","galleryView"],S_e=["nodeTemplates","connectionStartParams","connectionStartFieldType","selectedNodes","selectedEdges","isReady","nodesToCopy","edgesToCopy","connectionMade","modifyingEdge","addNewNodePosition"],x_e=[],w_e=[],C_e=["isInitialized","isConnected","denoiseProgress","status"],E_e=["shouldShowImageDetails","globalMenuCloseTrigger","panels"],T_e={canvas:y_e,gallery:__e,generation:x_e,nodes:S_e,postprocessing:w_e,system:C_e,ui:E_e,controlNet:v_e,dynamicPrompts:b_e},A_e=(e,t)=>{const n=uu(e,T_e[t]??[]);return JSON.stringify(n)},k_e={canvas:SL,gallery:nB,generation:iT,nodes:Pj,postprocessing:Fj,system:gD,config:RD,ui:Vj,hotkeys:zj,controlAdapters:D5,dynamicPrompts:hT,sdxl:Lj},P_e=(e,t)=>zF(JSON.parse(e),k_e[t]),I_e=e=>{if(the(e)&&e.payload.nodes){const t={};return{...e,payload:{...e.payload,nodes:t}}}return kg.fulfilled.match(e)?{...e,payload:""}:$j.match(e)?{...e,payload:""}:e},M_e=["canvas/setCursorPosition","canvas/setStageCoordinates","canvas/setStageScale","canvas/setIsDrawing","canvas/setBoundingBoxCoordinates","canvas/setBoundingBoxDimensions","canvas/setIsDrawing","canvas/addPointToCurrentLine","socket/socketGeneratorProgress","socket/appSocketGeneratorProgress","@@REMEMBER_PERSISTED"],R_e=e=>e,O_e=br(rue,iue),$_e=()=>{fe({matcher:O_e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{batchIds:o}=i.canvas;try{const s=t(en.endpoints.cancelByBatchIds.initiate({batch_ids:o},{fixedCacheKey:"cancelByBatchIds"})),{canceled:a}=await s.unwrap();s.reset(),a>0&&(r.debug(`Canceled ${a} canvas batches`),t(Ve({title:J("queue.cancelBatchSucceeded"),status:"success"}))),t(lue())}catch{r.error("Failed to cancel canvas batches"),t(Ve({title:J("queue.cancelBatchFailed"),status:"error"}))}}})};he("app/appStarted");const N_e=()=>{fe({matcher:ce.endpoints.listImages.matchFulfilled,effect:async(e,{dispatch:t,unsubscribe:n,cancelActiveListeners:r})=>{if(e.meta.arg.queryCacheKey!==Vi({board_id:"none",categories:Rn}))return;r(),n();const i=e.payload;if(i.ids.length>0){const o=Ot.getSelectors().selectAll(i)[0];t(ps(o??null))}}})},F_e=()=>{fe({matcher:en.endpoints.enqueueBatch.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{data:r}=en.endpoints.getQueueStatus.select()(n());!r||r.processor.is_started||t(en.endpoints.resumeProcessor.initiate(void 0,{fixedCacheKey:"resumeProcessor"}))}})},Jj=Lo.injectEndpoints({endpoints:e=>({getAppVersion:e.query({query:()=>({url:"app/version",method:"GET"}),providesTags:["AppVersion"],keepUnusedDataFor:864e5}),getAppConfig:e.query({query:()=>({url:"app/config",method:"GET"}),providesTags:["AppConfig"],keepUnusedDataFor:864e5}),getInvocationCacheStatus:e.query({query:()=>({url:"app/invocation_cache/status",method:"GET"}),providesTags:["InvocationCacheStatus"]}),clearInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache",method:"DELETE"}),invalidatesTags:["InvocationCacheStatus"]}),enableInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache/enable",method:"PUT"}),invalidatesTags:["InvocationCacheStatus"]}),disableInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache/disable",method:"PUT"}),invalidatesTags:["InvocationCacheStatus"]})})}),{useGetAppVersionQuery:uWe,useGetAppConfigQuery:dWe,useClearInvocationCacheMutation:fWe,useDisableInvocationCacheMutation:hWe,useEnableInvocationCacheMutation:pWe,useGetInvocationCacheStatusQuery:gWe}=Jj,D_e=()=>{fe({matcher:Jj.endpoints.getAppConfig.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const{infill_methods:r=[],nsfw_methods:i=[],watermarking_methods:o=[]}=e.payload,s=t().generation.infillMethod;r.includes(s)||n(qle(r[0])),i.includes("nsfw_checker")||n(Zoe(!1)),o.includes("invisible_watermark")||n(Joe(!1))}})},L_e=he("app/appStarted"),B_e=()=>{fe({actionCreator:L_e,effect:async(e,{unsubscribe:t,cancelActiveListeners:n})=>{n(),t()}})};function z_e(e){if(e.sheet)return e.sheet;for(var t=0;t0?er(Lf,--ni):0,yf--,mn===10&&(yf=1,fS--),mn}function Si(){return mn=ni2||Og(mn)>3?"":" "}function J_e(e,t){for(;--t&&Si()&&!(mn<48||mn>102||mn>57&&mn<65||mn>70&&mn<97););return Gm(e,sv()+(t<6&&ms()==32&&Si()==32))}function S3(e){for(;Si();)switch(mn){case e:return ni;case 34:case 39:e!==34&&e!==39&&S3(mn);break;case 40:e===41&&S3(e);break;case 92:Si();break}return ni}function eSe(e,t){for(;Si()&&e+mn!==47+10;)if(e+mn===42+42&&ms()===47)break;return"/*"+Gm(t,ni-1)+"*"+dS(e===47?e:Si())}function tSe(e){for(;!Og(ms());)Si();return Gm(e,ni)}function nSe(e){return oV(lv("",null,null,null,[""],e=iV(e),0,[0],e))}function lv(e,t,n,r,i,o,s,a,l){for(var c=0,u=0,d=s,f=0,h=0,p=0,m=1,_=1,v=1,y=0,g="",b=i,S=o,w=r,C=g;_;)switch(p=y,y=Si()){case 40:if(p!=108&&er(C,d-1)==58){_3(C+=dt(av(y),"&","&\f"),"&\f")!=-1&&(v=-1);break}case 34:case 39:case 91:C+=av(y);break;case 9:case 10:case 13:case 32:C+=Z_e(p);break;case 92:C+=J_e(sv()-1,7);continue;case 47:switch(ms()){case 42:case 47:iy(rSe(eSe(Si(),sv()),t,n),l);break;default:C+="/"}break;case 123*m:a[c++]=rs(C)*v;case 125*m:case 59:case 0:switch(y){case 0:case 125:_=0;case 59+u:v==-1&&(C=dt(C,/\f/g,"")),h>0&&rs(C)-d&&iy(h>32?rM(C+";",r,n,d-1):rM(dt(C," ","")+";",r,n,d-2),l);break;case 59:C+=";";default:if(iy(w=nM(C,t,n,c,u,i,a,g,b=[],S=[],d),o),y===123)if(u===0)lv(C,t,w,w,b,o,d,a,S);else switch(f===99&&er(C,3)===110?100:f){case 100:case 108:case 109:case 115:lv(e,w,w,r&&iy(nM(e,w,w,0,0,i,a,g,i,b=[],d),S),i,S,d,a,r?b:S);break;default:lv(C,w,w,w,[""],S,0,a,S)}}c=u=h=0,m=v=1,g=C="",d=s;break;case 58:d=1+rs(C),h=p;default:if(m<1){if(y==123)--m;else if(y==125&&m++==0&&Y_e()==125)continue}switch(C+=dS(y),y*m){case 38:v=u>0?1:(C+="\f",-1);break;case 44:a[c++]=(rs(C)-1)*v,v=1;break;case 64:ms()===45&&(C+=av(Si())),f=ms(),u=d=rs(g=C+=tSe(sv())),y++;break;case 45:p===45&&rs(C)==2&&(m=0)}}return o}function nM(e,t,n,r,i,o,s,a,l,c,u){for(var d=i-1,f=i===0?o:[""],h=qT(f),p=0,m=0,_=0;p0?f[v]+" "+y:dt(y,/&\f/g,f[v])))&&(l[_++]=g);return hS(e,t,n,i===0?HT:a,l,c,u)}function rSe(e,t,n){return hS(e,t,n,eV,dS(Q_e()),Rg(e,2,-2),0)}function rM(e,t,n,r){return hS(e,t,n,WT,Rg(e,0,r),Rg(e,r+1,-1),r)}function Bd(e,t){for(var n="",r=qT(e),i=0;i6)switch(er(e,t+1)){case 109:if(er(e,t+4)!==45)break;case 102:return dt(e,/(.+:)(.+)-([^]+)/,"$1"+ut+"$2-$3$1"+B1+(er(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~_3(e,"stretch")?aV(dt(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(er(e,t+1)!==115)break;case 6444:switch(er(e,rs(e)-3-(~_3(e,"!important")&&10))){case 107:return dt(e,":",":"+ut)+e;case 101:return dt(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+ut+(er(e,14)===45?"inline-":"")+"box$3$1"+ut+"$2$3$1"+dr+"$2box$3")+e}break;case 5936:switch(er(e,t+11)){case 114:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return ut+e+dr+e+e}return e}var fSe=function(t,n,r,i){if(t.length>-1&&!t.return)switch(t.type){case WT:t.return=aV(t.value,t.length);break;case tV:return Bd([_h(t,{value:dt(t.value,"@","@"+ut)})],i);case HT:if(t.length)return X_e(t.props,function(o){switch(K_e(o,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Bd([_h(t,{props:[dt(o,/:(read-\w+)/,":"+B1+"$1")]})],i);case"::placeholder":return Bd([_h(t,{props:[dt(o,/:(plac\w+)/,":"+ut+"input-$1")]}),_h(t,{props:[dt(o,/:(plac\w+)/,":"+B1+"$1")]}),_h(t,{props:[dt(o,/:(plac\w+)/,dr+"input-$1")]})],i)}return""})}},hSe=[fSe],pSe=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(m){var _=m.getAttribute("data-emotion");_.indexOf(" ")!==-1&&(document.head.appendChild(m),m.setAttribute("data-s",""))})}var i=t.stylisPlugins||hSe,o={},s,a=[];s=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(m){for(var _=m.getAttribute("data-emotion").split(" "),v=1;v<_.length;v++)o[_[v]]=!0;a.push(m)});var l,c=[uSe,dSe];{var u,d=[iSe,sSe(function(m){u.insert(m)})],f=oSe(c.concat(i,d)),h=function(_){return Bd(nSe(_),f)};l=function(_,v,y,g){u=y,h(_?_+"{"+v.styles+"}":v.styles),g&&(p.inserted[v.name]=!0)}}var p={key:n,sheet:new V_e({key:n,container:s,nonce:t.nonce,speedy:t.speedy,prepend:t.prepend,insertionPoint:t.insertionPoint}),nonce:t.nonce,inserted:o,registered:{},insert:l};return p.sheet.hydrate(a),p};function z1(){return z1=Object.assign?Object.assign.bind():function(e){for(var t=1;t=4;++r,i-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(i){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var TSe={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},ASe=/[A-Z]|^ms/g,kSe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,pV=function(t){return t.charCodeAt(1)===45},sM=function(t){return t!=null&&typeof t!="boolean"},Sw=sV(function(e){return pV(e)?e:e.replace(ASe,"-$&").toLowerCase()}),aM=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(kSe,function(r,i,o){return is={name:i,styles:o,next:is},i})}return TSe[t]!==1&&!pV(t)&&typeof n=="number"&&n!==0?n+"px":n};function $g(e,t,n){if(n==null)return"";if(n.__emotion_styles!==void 0)return n;switch(typeof n){case"boolean":return"";case"object":{if(n.anim===1)return is={name:n.name,styles:n.styles,next:is},n.name;if(n.styles!==void 0){var r=n.next;if(r!==void 0)for(;r!==void 0;)is={name:r.name,styles:r.styles,next:is},r=r.next;var i=n.styles+";";return i}return PSe(e,t,n)}case"function":{if(e!==void 0){var o=is,s=n(e);return is=o,$g(e,t,s)}break}}if(t==null)return n;var a=t[n];return a!==void 0?a:n}function PSe(e,t,n){var r="";if(Array.isArray(n))for(var i=0;iie.jsx("div",{className:"chakra-portal-zIndex",style:{position:"absolute",zIndex:e.zIndex,top:0,left:0,right:0},children:e.children}),GSe=e=>{const{appendToParentPortal:t,children:n}=e,[r,i]=I.useState(null),o=I.useRef(null),[,s]=I.useState({});I.useEffect(()=>s({}),[]);const a=jSe(),l=BSe();j1(()=>{if(!r)return;const u=r.ownerDocument,d=t?a??u.body:u.body;if(!d)return;o.current=u.createElement("div"),o.current.className=ZT,d.appendChild(o.current),s({});const f=o.current;return()=>{d.contains(f)&&d.removeChild(f)}},[r]);const c=l!=null&&l.zIndex?ie.jsx(USe,{zIndex:l==null?void 0:l.zIndex,children:n}):n;return o.current?gi.createPortal(ie.jsx(bV,{value:o.current,children:c}),o.current):ie.jsx("span",{ref:u=>{u&&i(u)}})},HSe=e=>{const{children:t,containerRef:n,appendToParentPortal:r}=e,i=n.current,o=i??(typeof window<"u"?document.body:void 0),s=I.useMemo(()=>{const l=i==null?void 0:i.ownerDocument.createElement("div");return l&&(l.className=ZT),l},[i]),[,a]=I.useState({});return j1(()=>a({}),[]),j1(()=>{if(!(!s||!o))return o.appendChild(s),()=>{o.removeChild(s)}},[s,o]),o&&s?gi.createPortal(ie.jsx(bV,{value:r?s:null,children:t}),s):null};function CS(e){const t={appendToParentPortal:!0,...e},{containerRef:n,...r}=t;return n?ie.jsx(HSe,{containerRef:n,...r}):ie.jsx(GSe,{...r})}CS.className=ZT;CS.selector=VSe;CS.displayName="Portal";function _V(){const e=I.useContext(Ng);if(!e)throw Error("useTheme: `theme` is undefined. Seems you forgot to wrap your app in `` or ``");return e}var JT=I.createContext({});JT.displayName="ColorModeContext";function ES(){const e=I.useContext(JT);if(e===void 0)throw new Error("useColorMode must be used within a ColorModeProvider");return e}function mWe(e,t){const{colorMode:n}=ES();return n==="dark"?t:e}function WSe(){const e=ES(),t=_V();return{...e,theme:t}}function qSe(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__breakpoints)==null?void 0:a.asArray)==null?void 0:l[s]};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function KSe(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__cssMap)==null?void 0:a[s])==null?void 0:l.value};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function yWe(e,t,n){const r=_V();return XSe(e,t,n)(r)}function XSe(e,t,n){const r=Array.isArray(t)?t:[t],i=Array.isArray(n)?n:[n];return o=>{const s=i.filter(Boolean),a=r.map((l,c)=>{var u,d;if(e==="breakpoints")return qSe(o,l,(u=s[c])!=null?u:l);const f=`${e}.${l}`;return KSe(o,f,(d=s[c])!=null?d:l)});return Array.isArray(t)?a:a[0]}}var Dl=(...e)=>e.filter(Boolean).join(" ");function QSe(){return!1}function ys(e){const t=typeof e;return e!=null&&(t==="object"||t==="function")&&!Array.isArray(e)}var vWe=e=>{const{condition:t,message:n}=e;t&&QSe()&&console.warn(n)};function us(e,...t){return YSe(e)?e(...t):e}var YSe=e=>typeof e=="function",bWe=e=>e?"":void 0,_We=e=>e?!0:void 0;function SWe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function xWe(...e){return function(n){e.forEach(r=>{r==null||r(n)})}}var V1={exports:{}};V1.exports;(function(e,t){var n=200,r="__lodash_hash_undefined__",i=800,o=16,s=9007199254740991,a="[object Arguments]",l="[object Array]",c="[object AsyncFunction]",u="[object Boolean]",d="[object Date]",f="[object Error]",h="[object Function]",p="[object GeneratorFunction]",m="[object Map]",_="[object Number]",v="[object Null]",y="[object Object]",g="[object Proxy]",b="[object RegExp]",S="[object Set]",w="[object String]",C="[object Undefined]",x="[object WeakMap]",k="[object ArrayBuffer]",A="[object DataView]",R="[object Float32Array]",L="[object Float64Array]",M="[object Int8Array]",E="[object Int16Array]",P="[object Int32Array]",O="[object Uint8Array]",F="[object Uint8ClampedArray]",$="[object Uint16Array]",D="[object Uint32Array]",N=/[\\^$.*+?()[\]{}|]/g,z=/^\[object .+?Constructor\]$/,V=/^(?:0|[1-9]\d*)$/,H={};H[R]=H[L]=H[M]=H[E]=H[P]=H[O]=H[F]=H[$]=H[D]=!0,H[a]=H[l]=H[k]=H[u]=H[A]=H[d]=H[f]=H[h]=H[m]=H[_]=H[y]=H[b]=H[S]=H[w]=H[x]=!1;var X=typeof He=="object"&&He&&He.Object===Object&&He,te=typeof self=="object"&&self&&self.Object===Object&&self,ee=X||te||Function("return this")(),j=t&&!t.nodeType&&t,q=j&&!0&&e&&!e.nodeType&&e,Z=q&&q.exports===j,oe=Z&&X.process,be=function(){try{var B=q&&q.require&&q.require("util").types;return B||oe&&oe.binding&&oe.binding("util")}catch{}}(),Me=be&&be.isTypedArray;function lt(B,U,K){switch(K.length){case 0:return B.call(U);case 1:return B.call(U,K[0]);case 2:return B.call(U,K[0],K[1]);case 3:return B.call(U,K[0],K[1],K[2])}return B.apply(U,K)}function Le(B,U){for(var K=-1,pe=Array(B);++K-1}function Rs(B,U){var K=this.__data__,pe=Cu(K,B);return pe<0?(++this.size,K.push([B,U])):K[pe][1]=U,this}Kn.prototype.clear=Ms,Kn.prototype.delete=Ca,Kn.prototype.get=Ea,Kn.prototype.has=wu,Kn.prototype.set=Rs;function Tr(B){var U=-1,K=B==null?0:B.length;for(this.clear();++U1?K[et-1]:void 0,Dt=et>2?K[2]:void 0;for(St=B.length>3&&typeof St=="function"?(et--,St):void 0,Dt&&GW(K[0],K[1],Dt)&&(St=et<3?void 0:St,et=1),U=Object(U);++pe-1&&B%1==0&&B0){if(++U>=i)return arguments[0]}else U=0;return B.apply(void 0,arguments)}}function ZW(B){if(B!=null){try{return sr.call(B)}catch{}try{return B+""}catch{}}return""}function h0(B,U){return B===U||B!==B&&U!==U}var ex=d0(function(){return arguments}())?d0:function(B){return Jf(B)&&fn.call(B,"callee")&&!ho.call(B,"callee")},tx=Array.isArray;function nx(B){return B!=null&&gk(B.length)&&!rx(B)}function JW(B){return Jf(B)&&nx(B)}var pk=Gl||iq;function rx(B){if(!ql(B))return!1;var U=Tu(B);return U==h||U==p||U==c||U==g}function gk(B){return typeof B=="number"&&B>-1&&B%1==0&&B<=s}function ql(B){var U=typeof B;return B!=null&&(U=="object"||U=="function")}function Jf(B){return B!=null&&typeof B=="object"}function eq(B){if(!Jf(B)||Tu(B)!=y)return!1;var U=oi(B);if(U===null)return!0;var K=fn.call(U,"constructor")&&U.constructor;return typeof K=="function"&&K instanceof K&&sr.call(K)==Ri}var mk=Me?we(Me):IW;function tq(B){return BW(B,yk(B))}function yk(B){return nx(B)?X2(B,!0):MW(B)}var nq=zW(function(B,U,K,pe){dk(B,U,K,pe)});function rq(B){return function(){return B}}function vk(B){return B}function iq(){return!1}e.exports=nq})(V1,V1.exports);var ZSe=V1.exports;const ds=Ml(ZSe);var JSe=e=>/!(important)?$/.test(e),uM=e=>typeof e=="string"?e.replace(/!(important)?$/,"").trim():e,e2e=(e,t)=>n=>{const r=String(t),i=JSe(r),o=uM(r),s=e?`${e}.${o}`:o;let a=ys(n.__cssMap)&&s in n.__cssMap?n.__cssMap[s].varRef:t;return a=uM(a),i?`${a} !important`:a};function eA(e){const{scale:t,transform:n,compose:r}=e;return(o,s)=>{var a;const l=e2e(t,o)(s);let c=(a=n==null?void 0:n(l,s))!=null?a:l;return r&&(c=r(c,s)),c}}var oy=(...e)=>t=>e.reduce((n,r)=>r(n),t);function Di(e,t){return n=>{const r={property:n,scale:e};return r.transform=eA({scale:e,transform:t}),r}}var t2e=({rtl:e,ltr:t})=>n=>n.direction==="rtl"?e:t;function n2e(e){const{property:t,scale:n,transform:r}=e;return{scale:n,property:t2e(t),transform:n?eA({scale:n,compose:r}):r}}var SV=["rotate(var(--chakra-rotate, 0))","scaleX(var(--chakra-scale-x, 1))","scaleY(var(--chakra-scale-y, 1))","skewX(var(--chakra-skew-x, 0))","skewY(var(--chakra-skew-y, 0))"];function r2e(){return["translateX(var(--chakra-translate-x, 0))","translateY(var(--chakra-translate-y, 0))",...SV].join(" ")}function i2e(){return["translate3d(var(--chakra-translate-x, 0), var(--chakra-translate-y, 0), 0)",...SV].join(" ")}var o2e={"--chakra-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-sepia":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-drop-shadow":"var(--chakra-empty,/*!*/ /*!*/)",filter:["var(--chakra-blur)","var(--chakra-brightness)","var(--chakra-contrast)","var(--chakra-grayscale)","var(--chakra-hue-rotate)","var(--chakra-invert)","var(--chakra-saturate)","var(--chakra-sepia)","var(--chakra-drop-shadow)"].join(" ")},s2e={backdropFilter:["var(--chakra-backdrop-blur)","var(--chakra-backdrop-brightness)","var(--chakra-backdrop-contrast)","var(--chakra-backdrop-grayscale)","var(--chakra-backdrop-hue-rotate)","var(--chakra-backdrop-invert)","var(--chakra-backdrop-opacity)","var(--chakra-backdrop-saturate)","var(--chakra-backdrop-sepia)"].join(" "),"--chakra-backdrop-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-opacity":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-sepia":"var(--chakra-empty,/*!*/ /*!*/)"};function a2e(e){return{"--chakra-ring-offset-shadow":"var(--chakra-ring-inset) 0 0 0 var(--chakra-ring-offset-width) var(--chakra-ring-offset-color)","--chakra-ring-shadow":"var(--chakra-ring-inset) 0 0 0 calc(var(--chakra-ring-width) + var(--chakra-ring-offset-width)) var(--chakra-ring-color)","--chakra-ring-width":e,boxShadow:["var(--chakra-ring-offset-shadow)","var(--chakra-ring-shadow)","var(--chakra-shadow, 0 0 #0000)"].join(", ")}}var l2e={"row-reverse":{space:"--chakra-space-x-reverse",divide:"--chakra-divide-x-reverse"},"column-reverse":{space:"--chakra-space-y-reverse",divide:"--chakra-divide-y-reverse"}},x3={"to-t":"to top","to-tr":"to top right","to-r":"to right","to-br":"to bottom right","to-b":"to bottom","to-bl":"to bottom left","to-l":"to left","to-tl":"to top left"},c2e=new Set(Object.values(x3)),w3=new Set(["none","-moz-initial","inherit","initial","revert","unset"]),u2e=e=>e.trim();function d2e(e,t){if(e==null||w3.has(e))return e;if(!(C3(e)||w3.has(e)))return`url('${e}')`;const i=/(^[a-z-A-Z]+)\((.*)\)/g.exec(e),o=i==null?void 0:i[1],s=i==null?void 0:i[2];if(!o||!s)return e;const a=o.includes("-gradient")?o:`${o}-gradient`,[l,...c]=s.split(",").map(u2e).filter(Boolean);if((c==null?void 0:c.length)===0)return e;const u=l in x3?x3[l]:l;c.unshift(u);const d=c.map(f=>{if(c2e.has(f))return f;const h=f.indexOf(" "),[p,m]=h!==-1?[f.substr(0,h),f.substr(h+1)]:[f],_=C3(m)?m:m&&m.split(" "),v=`colors.${p}`,y=v in t.__cssMap?t.__cssMap[v].varRef:p;return _?[y,...Array.isArray(_)?_:[_]].join(" "):y});return`${a}(${d.join(", ")})`}var C3=e=>typeof e=="string"&&e.includes("(")&&e.includes(")"),f2e=(e,t)=>d2e(e,t??{});function h2e(e){return/^var\(--.+\)$/.test(e)}var p2e=e=>{const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}},Ko=e=>t=>`${e}(${t})`,Ze={filter(e){return e!=="auto"?e:o2e},backdropFilter(e){return e!=="auto"?e:s2e},ring(e){return a2e(Ze.px(e))},bgClip(e){return e==="text"?{color:"transparent",backgroundClip:"text"}:{backgroundClip:e}},transform(e){return e==="auto"?r2e():e==="auto-gpu"?i2e():e},vh(e){return e==="$100vh"?"var(--chakra-vh)":e},px(e){if(e==null)return e;const{unitless:t}=p2e(e);return t||typeof e=="number"?`${e}px`:e},fraction(e){return typeof e!="number"||e>1?e:`${e*100}%`},float(e,t){const n={left:"right",right:"left"};return t.direction==="rtl"?n[e]:e},degree(e){if(h2e(e)||e==null)return e;const t=typeof e=="string"&&!e.endsWith("deg");return typeof e=="number"||t?`${e}deg`:e},gradient:f2e,blur:Ko("blur"),opacity:Ko("opacity"),brightness:Ko("brightness"),contrast:Ko("contrast"),dropShadow:Ko("drop-shadow"),grayscale:Ko("grayscale"),hueRotate:e=>Ko("hue-rotate")(Ze.degree(e)),invert:Ko("invert"),saturate:Ko("saturate"),sepia:Ko("sepia"),bgImage(e){return e==null||C3(e)||w3.has(e)?e:`url(${e})`},outline(e){const t=String(e)==="0"||String(e)==="none";return e!==null&&t?{outline:"2px solid transparent",outlineOffset:"2px"}:{outline:e}},flexDirection(e){var t;const{space:n,divide:r}=(t=l2e[e])!=null?t:{},i={flexDirection:e};return n&&(i[n]=1),r&&(i[r]=1),i}},G={borderWidths:Di("borderWidths"),borderStyles:Di("borderStyles"),colors:Di("colors"),borders:Di("borders"),gradients:Di("gradients",Ze.gradient),radii:Di("radii",Ze.px),space:Di("space",oy(Ze.vh,Ze.px)),spaceT:Di("space",oy(Ze.vh,Ze.px)),degreeT(e){return{property:e,transform:Ze.degree}},prop(e,t,n){return{property:e,scale:t,...t&&{transform:eA({scale:t,transform:n})}}},propT(e,t){return{property:e,transform:t}},sizes:Di("sizes",oy(Ze.vh,Ze.px)),sizesT:Di("sizes",oy(Ze.vh,Ze.fraction)),shadows:Di("shadows"),logical:n2e,blur:Di("blur",Ze.blur)},cv={background:G.colors("background"),backgroundColor:G.colors("backgroundColor"),backgroundImage:G.gradients("backgroundImage"),backgroundSize:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundAttachment:!0,backgroundClip:{transform:Ze.bgClip},bgSize:G.prop("backgroundSize"),bgPosition:G.prop("backgroundPosition"),bg:G.colors("background"),bgColor:G.colors("backgroundColor"),bgPos:G.prop("backgroundPosition"),bgRepeat:G.prop("backgroundRepeat"),bgAttachment:G.prop("backgroundAttachment"),bgGradient:G.gradients("backgroundImage"),bgClip:{transform:Ze.bgClip}};Object.assign(cv,{bgImage:cv.backgroundImage,bgImg:cv.backgroundImage});var ct={border:G.borders("border"),borderWidth:G.borderWidths("borderWidth"),borderStyle:G.borderStyles("borderStyle"),borderColor:G.colors("borderColor"),borderRadius:G.radii("borderRadius"),borderTop:G.borders("borderTop"),borderBlockStart:G.borders("borderBlockStart"),borderTopLeftRadius:G.radii("borderTopLeftRadius"),borderStartStartRadius:G.logical({scale:"radii",property:{ltr:"borderTopLeftRadius",rtl:"borderTopRightRadius"}}),borderEndStartRadius:G.logical({scale:"radii",property:{ltr:"borderBottomLeftRadius",rtl:"borderBottomRightRadius"}}),borderTopRightRadius:G.radii("borderTopRightRadius"),borderStartEndRadius:G.logical({scale:"radii",property:{ltr:"borderTopRightRadius",rtl:"borderTopLeftRadius"}}),borderEndEndRadius:G.logical({scale:"radii",property:{ltr:"borderBottomRightRadius",rtl:"borderBottomLeftRadius"}}),borderRight:G.borders("borderRight"),borderInlineEnd:G.borders("borderInlineEnd"),borderBottom:G.borders("borderBottom"),borderBlockEnd:G.borders("borderBlockEnd"),borderBottomLeftRadius:G.radii("borderBottomLeftRadius"),borderBottomRightRadius:G.radii("borderBottomRightRadius"),borderLeft:G.borders("borderLeft"),borderInlineStart:{property:"borderInlineStart",scale:"borders"},borderInlineStartRadius:G.logical({scale:"radii",property:{ltr:["borderTopLeftRadius","borderBottomLeftRadius"],rtl:["borderTopRightRadius","borderBottomRightRadius"]}}),borderInlineEndRadius:G.logical({scale:"radii",property:{ltr:["borderTopRightRadius","borderBottomRightRadius"],rtl:["borderTopLeftRadius","borderBottomLeftRadius"]}}),borderX:G.borders(["borderLeft","borderRight"]),borderInline:G.borders("borderInline"),borderY:G.borders(["borderTop","borderBottom"]),borderBlock:G.borders("borderBlock"),borderTopWidth:G.borderWidths("borderTopWidth"),borderBlockStartWidth:G.borderWidths("borderBlockStartWidth"),borderTopColor:G.colors("borderTopColor"),borderBlockStartColor:G.colors("borderBlockStartColor"),borderTopStyle:G.borderStyles("borderTopStyle"),borderBlockStartStyle:G.borderStyles("borderBlockStartStyle"),borderBottomWidth:G.borderWidths("borderBottomWidth"),borderBlockEndWidth:G.borderWidths("borderBlockEndWidth"),borderBottomColor:G.colors("borderBottomColor"),borderBlockEndColor:G.colors("borderBlockEndColor"),borderBottomStyle:G.borderStyles("borderBottomStyle"),borderBlockEndStyle:G.borderStyles("borderBlockEndStyle"),borderLeftWidth:G.borderWidths("borderLeftWidth"),borderInlineStartWidth:G.borderWidths("borderInlineStartWidth"),borderLeftColor:G.colors("borderLeftColor"),borderInlineStartColor:G.colors("borderInlineStartColor"),borderLeftStyle:G.borderStyles("borderLeftStyle"),borderInlineStartStyle:G.borderStyles("borderInlineStartStyle"),borderRightWidth:G.borderWidths("borderRightWidth"),borderInlineEndWidth:G.borderWidths("borderInlineEndWidth"),borderRightColor:G.colors("borderRightColor"),borderInlineEndColor:G.colors("borderInlineEndColor"),borderRightStyle:G.borderStyles("borderRightStyle"),borderInlineEndStyle:G.borderStyles("borderInlineEndStyle"),borderTopRadius:G.radii(["borderTopLeftRadius","borderTopRightRadius"]),borderBottomRadius:G.radii(["borderBottomLeftRadius","borderBottomRightRadius"]),borderLeftRadius:G.radii(["borderTopLeftRadius","borderBottomLeftRadius"]),borderRightRadius:G.radii(["borderTopRightRadius","borderBottomRightRadius"])};Object.assign(ct,{rounded:ct.borderRadius,roundedTop:ct.borderTopRadius,roundedTopLeft:ct.borderTopLeftRadius,roundedTopRight:ct.borderTopRightRadius,roundedTopStart:ct.borderStartStartRadius,roundedTopEnd:ct.borderStartEndRadius,roundedBottom:ct.borderBottomRadius,roundedBottomLeft:ct.borderBottomLeftRadius,roundedBottomRight:ct.borderBottomRightRadius,roundedBottomStart:ct.borderEndStartRadius,roundedBottomEnd:ct.borderEndEndRadius,roundedLeft:ct.borderLeftRadius,roundedRight:ct.borderRightRadius,roundedStart:ct.borderInlineStartRadius,roundedEnd:ct.borderInlineEndRadius,borderStart:ct.borderInlineStart,borderEnd:ct.borderInlineEnd,borderTopStartRadius:ct.borderStartStartRadius,borderTopEndRadius:ct.borderStartEndRadius,borderBottomStartRadius:ct.borderEndStartRadius,borderBottomEndRadius:ct.borderEndEndRadius,borderStartRadius:ct.borderInlineStartRadius,borderEndRadius:ct.borderInlineEndRadius,borderStartWidth:ct.borderInlineStartWidth,borderEndWidth:ct.borderInlineEndWidth,borderStartColor:ct.borderInlineStartColor,borderEndColor:ct.borderInlineEndColor,borderStartStyle:ct.borderInlineStartStyle,borderEndStyle:ct.borderInlineEndStyle});var g2e={color:G.colors("color"),textColor:G.colors("color"),fill:G.colors("fill"),stroke:G.colors("stroke")},E3={boxShadow:G.shadows("boxShadow"),mixBlendMode:!0,blendMode:G.prop("mixBlendMode"),backgroundBlendMode:!0,bgBlendMode:G.prop("backgroundBlendMode"),opacity:!0};Object.assign(E3,{shadow:E3.boxShadow});var m2e={filter:{transform:Ze.filter},blur:G.blur("--chakra-blur"),brightness:G.propT("--chakra-brightness",Ze.brightness),contrast:G.propT("--chakra-contrast",Ze.contrast),hueRotate:G.propT("--chakra-hue-rotate",Ze.hueRotate),invert:G.propT("--chakra-invert",Ze.invert),saturate:G.propT("--chakra-saturate",Ze.saturate),dropShadow:G.propT("--chakra-drop-shadow",Ze.dropShadow),backdropFilter:{transform:Ze.backdropFilter},backdropBlur:G.blur("--chakra-backdrop-blur"),backdropBrightness:G.propT("--chakra-backdrop-brightness",Ze.brightness),backdropContrast:G.propT("--chakra-backdrop-contrast",Ze.contrast),backdropHueRotate:G.propT("--chakra-backdrop-hue-rotate",Ze.hueRotate),backdropInvert:G.propT("--chakra-backdrop-invert",Ze.invert),backdropSaturate:G.propT("--chakra-backdrop-saturate",Ze.saturate)},U1={alignItems:!0,alignContent:!0,justifyItems:!0,justifyContent:!0,flexWrap:!0,flexDirection:{transform:Ze.flexDirection},flex:!0,flexFlow:!0,flexGrow:!0,flexShrink:!0,flexBasis:G.sizes("flexBasis"),justifySelf:!0,alignSelf:!0,order:!0,placeItems:!0,placeContent:!0,placeSelf:!0,gap:G.space("gap"),rowGap:G.space("rowGap"),columnGap:G.space("columnGap")};Object.assign(U1,{flexDir:U1.flexDirection});var xV={gridGap:G.space("gridGap"),gridColumnGap:G.space("gridColumnGap"),gridRowGap:G.space("gridRowGap"),gridColumn:!0,gridRow:!0,gridAutoFlow:!0,gridAutoColumns:!0,gridColumnStart:!0,gridColumnEnd:!0,gridRowStart:!0,gridRowEnd:!0,gridAutoRows:!0,gridTemplate:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridArea:!0},y2e={appearance:!0,cursor:!0,resize:!0,userSelect:!0,pointerEvents:!0,outline:{transform:Ze.outline},outlineOffset:!0,outlineColor:G.colors("outlineColor")},zi={width:G.sizesT("width"),inlineSize:G.sizesT("inlineSize"),height:G.sizes("height"),blockSize:G.sizes("blockSize"),boxSize:G.sizes(["width","height"]),minWidth:G.sizes("minWidth"),minInlineSize:G.sizes("minInlineSize"),minHeight:G.sizes("minHeight"),minBlockSize:G.sizes("minBlockSize"),maxWidth:G.sizes("maxWidth"),maxInlineSize:G.sizes("maxInlineSize"),maxHeight:G.sizes("maxHeight"),maxBlockSize:G.sizes("maxBlockSize"),overflow:!0,overflowX:!0,overflowY:!0,overscrollBehavior:!0,overscrollBehaviorX:!0,overscrollBehaviorY:!0,display:!0,aspectRatio:!0,hideFrom:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (min-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r.minW)!=null?i:e})`]:{display:"none"}}}},hideBelow:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (max-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r._minW)!=null?i:e})`]:{display:"none"}}}},verticalAlign:!0,boxSizing:!0,boxDecorationBreak:!0,float:G.propT("float",Ze.float),objectFit:!0,objectPosition:!0,visibility:!0,isolation:!0};Object.assign(zi,{w:zi.width,h:zi.height,minW:zi.minWidth,maxW:zi.maxWidth,minH:zi.minHeight,maxH:zi.maxHeight,overscroll:zi.overscrollBehavior,overscrollX:zi.overscrollBehaviorX,overscrollY:zi.overscrollBehaviorY});var v2e={listStyleType:!0,listStylePosition:!0,listStylePos:G.prop("listStylePosition"),listStyleImage:!0,listStyleImg:G.prop("listStyleImage")};function b2e(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},S2e=_2e(b2e),x2e={border:"0px",clip:"rect(0, 0, 0, 0)",width:"1px",height:"1px",margin:"-1px",padding:"0px",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},w2e={position:"static",width:"auto",height:"auto",clip:"auto",padding:"0",margin:"0",overflow:"visible",whiteSpace:"normal"},xw=(e,t,n)=>{const r={},i=S2e(e,t,{});for(const o in i)o in n&&n[o]!=null||(r[o]=i[o]);return r},C2e={srOnly:{transform(e){return e===!0?x2e:e==="focusable"?w2e:{}}},layerStyle:{processResult:!0,transform:(e,t,n)=>xw(t,`layerStyles.${e}`,n)},textStyle:{processResult:!0,transform:(e,t,n)=>xw(t,`textStyles.${e}`,n)},apply:{processResult:!0,transform:(e,t,n)=>xw(t,e,n)}},bp={position:!0,pos:G.prop("position"),zIndex:G.prop("zIndex","zIndices"),inset:G.spaceT("inset"),insetX:G.spaceT(["left","right"]),insetInline:G.spaceT("insetInline"),insetY:G.spaceT(["top","bottom"]),insetBlock:G.spaceT("insetBlock"),top:G.spaceT("top"),insetBlockStart:G.spaceT("insetBlockStart"),bottom:G.spaceT("bottom"),insetBlockEnd:G.spaceT("insetBlockEnd"),left:G.spaceT("left"),insetInlineStart:G.logical({scale:"space",property:{ltr:"left",rtl:"right"}}),right:G.spaceT("right"),insetInlineEnd:G.logical({scale:"space",property:{ltr:"right",rtl:"left"}})};Object.assign(bp,{insetStart:bp.insetInlineStart,insetEnd:bp.insetInlineEnd});var E2e={ring:{transform:Ze.ring},ringColor:G.colors("--chakra-ring-color"),ringOffset:G.prop("--chakra-ring-offset-width"),ringOffsetColor:G.colors("--chakra-ring-offset-color"),ringInset:G.prop("--chakra-ring-inset")},Rt={margin:G.spaceT("margin"),marginTop:G.spaceT("marginTop"),marginBlockStart:G.spaceT("marginBlockStart"),marginRight:G.spaceT("marginRight"),marginInlineEnd:G.spaceT("marginInlineEnd"),marginBottom:G.spaceT("marginBottom"),marginBlockEnd:G.spaceT("marginBlockEnd"),marginLeft:G.spaceT("marginLeft"),marginInlineStart:G.spaceT("marginInlineStart"),marginX:G.spaceT(["marginInlineStart","marginInlineEnd"]),marginInline:G.spaceT("marginInline"),marginY:G.spaceT(["marginTop","marginBottom"]),marginBlock:G.spaceT("marginBlock"),padding:G.space("padding"),paddingTop:G.space("paddingTop"),paddingBlockStart:G.space("paddingBlockStart"),paddingRight:G.space("paddingRight"),paddingBottom:G.space("paddingBottom"),paddingBlockEnd:G.space("paddingBlockEnd"),paddingLeft:G.space("paddingLeft"),paddingInlineStart:G.space("paddingInlineStart"),paddingInlineEnd:G.space("paddingInlineEnd"),paddingX:G.space(["paddingInlineStart","paddingInlineEnd"]),paddingInline:G.space("paddingInline"),paddingY:G.space(["paddingTop","paddingBottom"]),paddingBlock:G.space("paddingBlock")};Object.assign(Rt,{m:Rt.margin,mt:Rt.marginTop,mr:Rt.marginRight,me:Rt.marginInlineEnd,marginEnd:Rt.marginInlineEnd,mb:Rt.marginBottom,ml:Rt.marginLeft,ms:Rt.marginInlineStart,marginStart:Rt.marginInlineStart,mx:Rt.marginX,my:Rt.marginY,p:Rt.padding,pt:Rt.paddingTop,py:Rt.paddingY,px:Rt.paddingX,pb:Rt.paddingBottom,pl:Rt.paddingLeft,ps:Rt.paddingInlineStart,paddingStart:Rt.paddingInlineStart,pr:Rt.paddingRight,pe:Rt.paddingInlineEnd,paddingEnd:Rt.paddingInlineEnd});var T2e={textDecorationColor:G.colors("textDecorationColor"),textDecoration:!0,textDecor:{property:"textDecoration"},textDecorationLine:!0,textDecorationStyle:!0,textDecorationThickness:!0,textUnderlineOffset:!0,textShadow:G.shadows("textShadow")},A2e={clipPath:!0,transform:G.propT("transform",Ze.transform),transformOrigin:!0,translateX:G.spaceT("--chakra-translate-x"),translateY:G.spaceT("--chakra-translate-y"),skewX:G.degreeT("--chakra-skew-x"),skewY:G.degreeT("--chakra-skew-y"),scaleX:G.prop("--chakra-scale-x"),scaleY:G.prop("--chakra-scale-y"),scale:G.prop(["--chakra-scale-x","--chakra-scale-y"]),rotate:G.degreeT("--chakra-rotate")},k2e={transition:!0,transitionDelay:!0,animation:!0,willChange:!0,transitionDuration:G.prop("transitionDuration","transition.duration"),transitionProperty:G.prop("transitionProperty","transition.property"),transitionTimingFunction:G.prop("transitionTimingFunction","transition.easing")},P2e={fontFamily:G.prop("fontFamily","fonts"),fontSize:G.prop("fontSize","fontSizes",Ze.px),fontWeight:G.prop("fontWeight","fontWeights"),lineHeight:G.prop("lineHeight","lineHeights"),letterSpacing:G.prop("letterSpacing","letterSpacings"),textAlign:!0,fontStyle:!0,textIndent:!0,wordBreak:!0,overflowWrap:!0,textOverflow:!0,textTransform:!0,whiteSpace:!0,isTruncated:{transform(e){if(e===!0)return{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}},noOfLines:{static:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:"var(--chakra-line-clamp)"},property:"--chakra-line-clamp"}},I2e={scrollBehavior:!0,scrollSnapAlign:!0,scrollSnapStop:!0,scrollSnapType:!0,scrollMargin:G.spaceT("scrollMargin"),scrollMarginTop:G.spaceT("scrollMarginTop"),scrollMarginBottom:G.spaceT("scrollMarginBottom"),scrollMarginLeft:G.spaceT("scrollMarginLeft"),scrollMarginRight:G.spaceT("scrollMarginRight"),scrollMarginX:G.spaceT(["scrollMarginLeft","scrollMarginRight"]),scrollMarginY:G.spaceT(["scrollMarginTop","scrollMarginBottom"]),scrollPadding:G.spaceT("scrollPadding"),scrollPaddingTop:G.spaceT("scrollPaddingTop"),scrollPaddingBottom:G.spaceT("scrollPaddingBottom"),scrollPaddingLeft:G.spaceT("scrollPaddingLeft"),scrollPaddingRight:G.spaceT("scrollPaddingRight"),scrollPaddingX:G.spaceT(["scrollPaddingLeft","scrollPaddingRight"]),scrollPaddingY:G.spaceT(["scrollPaddingTop","scrollPaddingBottom"])};function wV(e){return ys(e)&&e.reference?e.reference:String(e)}var TS=(e,...t)=>t.map(wV).join(` ${e} `).replace(/calc/g,""),dM=(...e)=>`calc(${TS("+",...e)})`,fM=(...e)=>`calc(${TS("-",...e)})`,T3=(...e)=>`calc(${TS("*",...e)})`,hM=(...e)=>`calc(${TS("/",...e)})`,pM=e=>{const t=wV(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:T3(t,-1)},mc=Object.assign(e=>({add:(...t)=>mc(dM(e,...t)),subtract:(...t)=>mc(fM(e,...t)),multiply:(...t)=>mc(T3(e,...t)),divide:(...t)=>mc(hM(e,...t)),negate:()=>mc(pM(e)),toString:()=>e.toString()}),{add:dM,subtract:fM,multiply:T3,divide:hM,negate:pM});function M2e(e,t="-"){return e.replace(/\s+/g,t)}function R2e(e){const t=M2e(e.toString());return $2e(O2e(t))}function O2e(e){return e.includes("\\.")?e:!Number.isInteger(parseFloat(e.toString()))?e.replace(".","\\."):e}function $2e(e){return e.replace(/[!-,/:-@[-^`{-~]/g,"\\$&")}function N2e(e,t=""){return[t,e].filter(Boolean).join("-")}function F2e(e,t){return`var(${e}${t?`, ${t}`:""})`}function D2e(e,t=""){return R2e(`--${N2e(e,t)}`)}function Ae(e,t,n){const r=D2e(e,n);return{variable:r,reference:F2e(r,t)}}function L2e(e,t){const n={};for(const r of t){if(Array.isArray(r)){const[i,o]=r;n[i]=Ae(`${e}-${i}`,o);continue}n[r]=Ae(`${e}-${r}`)}return n}function B2e(e){const t=e==null?0:e.length;return t?e[t-1]:void 0}function z2e(e){const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}}function A3(e){if(e==null)return e;const{unitless:t}=z2e(e);return t||typeof e=="number"?`${e}px`:e}var CV=(e,t)=>parseInt(e[1],10)>parseInt(t[1],10)?1:-1,tA=e=>Object.fromEntries(Object.entries(e).sort(CV));function gM(e){const t=tA(e);return Object.assign(Object.values(t),t)}function j2e(e){const t=Object.keys(tA(e));return new Set(t)}function mM(e){var t;if(!e)return e;e=(t=A3(e))!=null?t:e;const n=-.02;return typeof e=="number"?`${e+n}`:e.replace(/(\d+\.?\d*)/u,r=>`${parseFloat(r)+n}`)}function Kh(e,t){const n=["@media screen"];return e&&n.push("and",`(min-width: ${A3(e)})`),t&&n.push("and",`(max-width: ${A3(t)})`),n.join(" ")}function V2e(e){var t;if(!e)return null;e.base=(t=e.base)!=null?t:"0px";const n=gM(e),r=Object.entries(e).sort(CV).map(([s,a],l,c)=>{var u;let[,d]=(u=c[l+1])!=null?u:[];return d=parseFloat(d)>0?mM(d):void 0,{_minW:mM(a),breakpoint:s,minW:a,maxW:d,maxWQuery:Kh(null,d),minWQuery:Kh(a),minMaxQuery:Kh(a,d)}}),i=j2e(e),o=Array.from(i.values());return{keys:i,normalized:n,isResponsive(s){const a=Object.keys(s);return a.length>0&&a.every(l=>i.has(l))},asObject:tA(e),asArray:gM(e),details:r,get(s){return r.find(a=>a.breakpoint===s)},media:[null,...n.map(s=>Kh(s)).slice(1)],toArrayValue(s){if(!ys(s))throw new Error("toArrayValue: value must be an object");const a=o.map(l=>{var c;return(c=s[l])!=null?c:null});for(;B2e(a)===null;)a.pop();return a},toObjectValue(s){if(!Array.isArray(s))throw new Error("toObjectValue: value must be an array");return s.reduce((a,l,c)=>{const u=o[c];return u!=null&&l!=null&&(a[u]=l),a},{})}}}var Xn={hover:(e,t)=>`${e}:hover ${t}, ${e}[data-hover] ${t}`,focus:(e,t)=>`${e}:focus ${t}, ${e}[data-focus] ${t}`,focusVisible:(e,t)=>`${e}:focus-visible ${t}`,focusWithin:(e,t)=>`${e}:focus-within ${t}`,active:(e,t)=>`${e}:active ${t}, ${e}[data-active] ${t}`,disabled:(e,t)=>`${e}:disabled ${t}, ${e}[data-disabled] ${t}`,invalid:(e,t)=>`${e}:invalid ${t}, ${e}[data-invalid] ${t}`,checked:(e,t)=>`${e}:checked ${t}, ${e}[data-checked] ${t}`,indeterminate:(e,t)=>`${e}:indeterminate ${t}, ${e}[aria-checked=mixed] ${t}, ${e}[data-indeterminate] ${t}`,readOnly:(e,t)=>`${e}:read-only ${t}, ${e}[readonly] ${t}, ${e}[data-read-only] ${t}`,expanded:(e,t)=>`${e}:read-only ${t}, ${e}[aria-expanded=true] ${t}, ${e}[data-expanded] ${t}`,placeholderShown:(e,t)=>`${e}:placeholder-shown ${t}`},Ia=e=>EV(t=>e(t,"&"),"[role=group]","[data-group]",".group"),Ns=e=>EV(t=>e(t,"~ &"),"[data-peer]",".peer"),EV=(e,...t)=>t.map(e).join(", "),AS={_hover:"&:hover, &[data-hover]",_active:"&:active, &[data-active]",_focus:"&:focus, &[data-focus]",_highlighted:"&[data-highlighted]",_focusWithin:"&:focus-within",_focusVisible:"&:focus-visible, &[data-focus-visible]",_disabled:"&:disabled, &[disabled], &[aria-disabled=true], &[data-disabled]",_readOnly:"&[aria-readonly=true], &[readonly], &[data-readonly]",_before:"&::before",_after:"&::after",_empty:"&:empty",_expanded:"&[aria-expanded=true], &[data-expanded]",_checked:"&[aria-checked=true], &[data-checked]",_grabbed:"&[aria-grabbed=true], &[data-grabbed]",_pressed:"&[aria-pressed=true], &[data-pressed]",_invalid:"&[aria-invalid=true], &[data-invalid]",_valid:"&[data-valid], &[data-state=valid]",_loading:"&[data-loading], &[aria-busy=true]",_selected:"&[aria-selected=true], &[data-selected]",_hidden:"&[hidden], &[data-hidden]",_autofill:"&:-webkit-autofill",_even:"&:nth-of-type(even)",_odd:"&:nth-of-type(odd)",_first:"&:first-of-type",_firstLetter:"&::first-letter",_last:"&:last-of-type",_notFirst:"&:not(:first-of-type)",_notLast:"&:not(:last-of-type)",_visited:"&:visited",_activeLink:"&[aria-current=page]",_activeStep:"&[aria-current=step]",_indeterminate:"&:indeterminate, &[aria-checked=mixed], &[data-indeterminate]",_groupHover:Ia(Xn.hover),_peerHover:Ns(Xn.hover),_groupFocus:Ia(Xn.focus),_peerFocus:Ns(Xn.focus),_groupFocusVisible:Ia(Xn.focusVisible),_peerFocusVisible:Ns(Xn.focusVisible),_groupActive:Ia(Xn.active),_peerActive:Ns(Xn.active),_groupDisabled:Ia(Xn.disabled),_peerDisabled:Ns(Xn.disabled),_groupInvalid:Ia(Xn.invalid),_peerInvalid:Ns(Xn.invalid),_groupChecked:Ia(Xn.checked),_peerChecked:Ns(Xn.checked),_groupFocusWithin:Ia(Xn.focusWithin),_peerFocusWithin:Ns(Xn.focusWithin),_peerPlaceholderShown:Ns(Xn.placeholderShown),_placeholder:"&::placeholder",_placeholderShown:"&:placeholder-shown",_fullScreen:"&:fullscreen",_selection:"&::selection",_rtl:"[dir=rtl] &, &[dir=rtl]",_ltr:"[dir=ltr] &, &[dir=ltr]",_mediaDark:"@media (prefers-color-scheme: dark)",_mediaReduceMotion:"@media (prefers-reduced-motion: reduce)",_dark:".chakra-ui-dark &:not([data-theme]),[data-theme=dark] &:not([data-theme]),&[data-theme=dark]",_light:".chakra-ui-light &:not([data-theme]),[data-theme=light] &:not([data-theme]),&[data-theme=light]",_horizontal:"&[data-orientation=horizontal]",_vertical:"&[data-orientation=vertical]"},TV=Object.keys(AS);function yM(e,t){return Ae(String(e).replace(/\./g,"-"),void 0,t)}function U2e(e,t){let n={};const r={};for(const[i,o]of Object.entries(e)){const{isSemantic:s,value:a}=o,{variable:l,reference:c}=yM(i,t==null?void 0:t.cssVarPrefix);if(!s){if(i.startsWith("space")){const f=i.split("."),[h,...p]=f,m=`${h}.-${p.join(".")}`,_=mc.negate(a),v=mc.negate(c);r[m]={value:_,var:l,varRef:v}}n[l]=a,r[i]={value:a,var:l,varRef:c};continue}const u=f=>{const p=[String(i).split(".")[0],f].join(".");if(!e[p])return f;const{reference:_}=yM(p,t==null?void 0:t.cssVarPrefix);return _},d=ys(a)?a:{default:a};n=ds(n,Object.entries(d).reduce((f,[h,p])=>{var m,_;if(!p)return f;const v=u(`${p}`);if(h==="default")return f[l]=v,f;const y=(_=(m=AS)==null?void 0:m[h])!=null?_:h;return f[y]={[l]:v},f},{})),r[i]={value:c,var:l,varRef:c}}return{cssVars:n,cssMap:r}}function G2e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function H2e(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function W2e(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function vM(e,t,n={}){const{stop:r,getKey:i}=n;function o(s,a=[]){var l;if(W2e(s)||Array.isArray(s)){const c={};for(const[u,d]of Object.entries(s)){const f=(l=i==null?void 0:i(u))!=null?l:u,h=[...a,f];if(r!=null&&r(s,h))return t(s,a);c[f]=o(d,h)}return c}return t(s,a)}return o(e)}var q2e=["colors","borders","borderWidths","borderStyles","fonts","fontSizes","fontWeights","gradients","letterSpacings","lineHeights","radii","space","shadows","sizes","zIndices","transition","blur","breakpoints"];function K2e(e){return H2e(e,q2e)}function X2e(e){return e.semanticTokens}function Q2e(e){const{__cssMap:t,__cssVars:n,__breakpoints:r,...i}=e;return i}var Y2e=e=>TV.includes(e)||e==="default";function Z2e({tokens:e,semanticTokens:t}){const n={};return vM(e,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!1,value:r})}),vM(t,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!0,value:r})},{stop:r=>Object.keys(r).every(Y2e)}),n}function J2e(e){var t;const n=Q2e(e),r=K2e(n),i=X2e(n),o=Z2e({tokens:r,semanticTokens:i}),s=(t=n.config)==null?void 0:t.cssVarPrefix,{cssMap:a,cssVars:l}=U2e(o,{cssVarPrefix:s});return Object.assign(n,{__cssVars:{...{"--chakra-ring-inset":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-ring-offset-width":"0px","--chakra-ring-offset-color":"#fff","--chakra-ring-color":"rgba(66, 153, 225, 0.6)","--chakra-ring-offset-shadow":"0 0 #0000","--chakra-ring-shadow":"0 0 #0000","--chakra-space-x-reverse":"0","--chakra-space-y-reverse":"0"},...l},__cssMap:a,__breakpoints:V2e(n.breakpoints)}),n}var nA=ds({},cv,ct,g2e,U1,zi,m2e,E2e,y2e,xV,C2e,bp,E3,Rt,I2e,P2e,T2e,A2e,v2e,k2e),exe=Object.assign({},Rt,zi,U1,xV,bp),wWe=Object.keys(exe),txe=[...Object.keys(nA),...TV],nxe={...nA,...AS},rxe=e=>e in nxe,ixe=e=>t=>{if(!t.__breakpoints)return e;const{isResponsive:n,toArrayValue:r,media:i}=t.__breakpoints,o={};for(const s in e){let a=us(e[s],t);if(a==null)continue;if(a=ys(a)&&n(a)?r(a):a,!Array.isArray(a)){o[s]=a;continue}const l=a.slice(0,i.length).length;for(let c=0;ce.startsWith("--")&&typeof t=="string"&&!sxe(t),lxe=(e,t)=>{var n,r;if(t==null)return t;const i=l=>{var c,u;return(u=(c=e.__cssMap)==null?void 0:c[l])==null?void 0:u.varRef},o=l=>{var c;return(c=i(l))!=null?c:l},[s,a]=oxe(t);return t=(r=(n=i(s))!=null?n:o(a))!=null?r:o(t),t};function cxe(e){const{configs:t={},pseudos:n={},theme:r}=e,i=(o,s=!1)=>{var a,l,c;const u=us(o,r),d=ixe(u)(r);let f={};for(let h in d){const p=d[h];let m=us(p,r);h in n&&(h=n[h]),axe(h,m)&&(m=lxe(r,m));let _=t[h];if(_===!0&&(_={property:h}),ys(m)){f[h]=(a=f[h])!=null?a:{},f[h]=ds({},f[h],i(m,!0));continue}let v=(c=(l=_==null?void 0:_.transform)==null?void 0:l.call(_,m,r,u))!=null?c:m;v=_!=null&&_.processResult?i(v,!0):v;const y=us(_==null?void 0:_.property,r);if(!s&&(_!=null&&_.static)){const g=us(_.static,r);f=ds({},f,g)}if(y&&Array.isArray(y)){for(const g of y)f[g]=v;continue}if(y){y==="&"&&ys(v)?f=ds({},f,v):f[y]=v;continue}if(ys(v)){f=ds({},f,v);continue}f[h]=v}return f};return i}var AV=e=>t=>cxe({theme:t,pseudos:AS,configs:nA})(e);function Be(e){return{definePartsStyle(t){return t},defineMultiStyleConfig(t){return{parts:e,...t}}}}function uxe(e,t){if(Array.isArray(e))return e;if(ys(e))return t(e);if(e!=null)return[e]}function dxe(e,t){for(let n=t+1;n{ds(c,{[g]:f?y[g]:{[v]:y[g]}})});continue}if(!h){f?ds(c,y):c[v]=y;continue}c[v]=y}}return c}}function hxe(e){return t=>{var n;const{variant:r,size:i,theme:o}=t,s=fxe(o);return ds({},us((n=e.baseStyle)!=null?n:{},t),s(e,"sizes",i,t),s(e,"variants",r,t))}}function CWe(e,t,n){var r,i,o;return(o=(i=(r=e.__cssMap)==null?void 0:r[`${t}.${n}`])==null?void 0:i.varRef)!=null?o:n}function Wm(e){return G2e(e,["styleConfig","size","variant","colorScheme"])}var pxe={common:"background-color, border-color, color, fill, stroke, opacity, box-shadow, transform",colors:"background-color, border-color, color, fill, stroke",dimensions:"width, height",position:"left, right, top, bottom",background:"background-color, background-image, background-position"},gxe={"ease-in":"cubic-bezier(0.4, 0, 1, 1)","ease-out":"cubic-bezier(0, 0, 0.2, 1)","ease-in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},mxe={"ultra-fast":"50ms",faster:"100ms",fast:"150ms",normal:"200ms",slow:"300ms",slower:"400ms","ultra-slow":"500ms"},yxe={property:pxe,easing:gxe,duration:mxe},vxe=yxe,bxe={hide:-1,auto:"auto",base:0,docked:10,dropdown:1e3,sticky:1100,banner:1200,overlay:1300,modal:1400,popover:1500,skipLink:1600,toast:1700,tooltip:1800},_xe=bxe,Sxe={none:0,"1px":"1px solid","2px":"2px solid","4px":"4px solid","8px":"8px solid"},xxe=Sxe,wxe={base:"0em",sm:"30em",md:"48em",lg:"62em",xl:"80em","2xl":"96em"},Cxe=wxe,Exe={transparent:"transparent",current:"currentColor",black:"#000000",white:"#FFFFFF",whiteAlpha:{50:"rgba(255, 255, 255, 0.04)",100:"rgba(255, 255, 255, 0.06)",200:"rgba(255, 255, 255, 0.08)",300:"rgba(255, 255, 255, 0.16)",400:"rgba(255, 255, 255, 0.24)",500:"rgba(255, 255, 255, 0.36)",600:"rgba(255, 255, 255, 0.48)",700:"rgba(255, 255, 255, 0.64)",800:"rgba(255, 255, 255, 0.80)",900:"rgba(255, 255, 255, 0.92)"},blackAlpha:{50:"rgba(0, 0, 0, 0.04)",100:"rgba(0, 0, 0, 0.06)",200:"rgba(0, 0, 0, 0.08)",300:"rgba(0, 0, 0, 0.16)",400:"rgba(0, 0, 0, 0.24)",500:"rgba(0, 0, 0, 0.36)",600:"rgba(0, 0, 0, 0.48)",700:"rgba(0, 0, 0, 0.64)",800:"rgba(0, 0, 0, 0.80)",900:"rgba(0, 0, 0, 0.92)"},gray:{50:"#F7FAFC",100:"#EDF2F7",200:"#E2E8F0",300:"#CBD5E0",400:"#A0AEC0",500:"#718096",600:"#4A5568",700:"#2D3748",800:"#1A202C",900:"#171923"},red:{50:"#FFF5F5",100:"#FED7D7",200:"#FEB2B2",300:"#FC8181",400:"#F56565",500:"#E53E3E",600:"#C53030",700:"#9B2C2C",800:"#822727",900:"#63171B"},orange:{50:"#FFFAF0",100:"#FEEBC8",200:"#FBD38D",300:"#F6AD55",400:"#ED8936",500:"#DD6B20",600:"#C05621",700:"#9C4221",800:"#7B341E",900:"#652B19"},yellow:{50:"#FFFFF0",100:"#FEFCBF",200:"#FAF089",300:"#F6E05E",400:"#ECC94B",500:"#D69E2E",600:"#B7791F",700:"#975A16",800:"#744210",900:"#5F370E"},green:{50:"#F0FFF4",100:"#C6F6D5",200:"#9AE6B4",300:"#68D391",400:"#48BB78",500:"#38A169",600:"#2F855A",700:"#276749",800:"#22543D",900:"#1C4532"},teal:{50:"#E6FFFA",100:"#B2F5EA",200:"#81E6D9",300:"#4FD1C5",400:"#38B2AC",500:"#319795",600:"#2C7A7B",700:"#285E61",800:"#234E52",900:"#1D4044"},blue:{50:"#ebf8ff",100:"#bee3f8",200:"#90cdf4",300:"#63b3ed",400:"#4299e1",500:"#3182ce",600:"#2b6cb0",700:"#2c5282",800:"#2a4365",900:"#1A365D"},cyan:{50:"#EDFDFD",100:"#C4F1F9",200:"#9DECF9",300:"#76E4F7",400:"#0BC5EA",500:"#00B5D8",600:"#00A3C4",700:"#0987A0",800:"#086F83",900:"#065666"},purple:{50:"#FAF5FF",100:"#E9D8FD",200:"#D6BCFA",300:"#B794F4",400:"#9F7AEA",500:"#805AD5",600:"#6B46C1",700:"#553C9A",800:"#44337A",900:"#322659"},pink:{50:"#FFF5F7",100:"#FED7E2",200:"#FBB6CE",300:"#F687B3",400:"#ED64A6",500:"#D53F8C",600:"#B83280",700:"#97266D",800:"#702459",900:"#521B41"},linkedin:{50:"#E8F4F9",100:"#CFEDFB",200:"#9BDAF3",300:"#68C7EC",400:"#34B3E4",500:"#00A0DC",600:"#008CC9",700:"#0077B5",800:"#005E93",900:"#004471"},facebook:{50:"#E8F4F9",100:"#D9DEE9",200:"#B7C2DA",300:"#6482C0",400:"#4267B2",500:"#385898",600:"#314E89",700:"#29487D",800:"#223B67",900:"#1E355B"},messenger:{50:"#D0E6FF",100:"#B9DAFF",200:"#A2CDFF",300:"#7AB8FF",400:"#2E90FF",500:"#0078FF",600:"#0063D1",700:"#0052AC",800:"#003C7E",900:"#002C5C"},whatsapp:{50:"#dffeec",100:"#b9f5d0",200:"#90edb3",300:"#65e495",400:"#3cdd78",500:"#22c35e",600:"#179848",700:"#0c6c33",800:"#01421c",900:"#001803"},twitter:{50:"#E5F4FD",100:"#C8E9FB",200:"#A8DCFA",300:"#83CDF7",400:"#57BBF5",500:"#1DA1F2",600:"#1A94DA",700:"#1681BF",800:"#136B9E",900:"#0D4D71"},telegram:{50:"#E3F2F9",100:"#C5E4F3",200:"#A2D4EC",300:"#7AC1E4",400:"#47A9DA",500:"#0088CC",600:"#007AB8",700:"#006BA1",800:"#005885",900:"#003F5E"}},Txe=Exe,Axe={none:"0",sm:"0.125rem",base:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},kxe=Axe,Pxe={xs:"0 0 0 1px rgba(0, 0, 0, 0.05)",sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",md:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",xl:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)","2xl":"0 25px 50px -12px rgba(0, 0, 0, 0.25)",outline:"0 0 0 3px rgba(66, 153, 225, 0.6)",inner:"inset 0 2px 4px 0 rgba(0,0,0,0.06)",none:"none","dark-lg":"rgba(0, 0, 0, 0.1) 0px 0px 0px 1px, rgba(0, 0, 0, 0.2) 0px 5px 10px, rgba(0, 0, 0, 0.4) 0px 15px 40px"},Ixe=Pxe,Mxe={none:0,sm:"4px",base:"8px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},Rxe=Mxe,Oxe={letterSpacings:{tighter:"-0.05em",tight:"-0.025em",normal:"0",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeights:{normal:"normal",none:1,shorter:1.25,short:1.375,base:1.5,tall:1.625,taller:"2",3:".75rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem"},fontWeights:{hairline:100,thin:200,light:300,normal:400,medium:500,semibold:600,bold:700,extrabold:800,black:900},fonts:{heading:'-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',body:'-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',mono:'SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace'},fontSizes:{"3xs":"0.45rem","2xs":"0.625rem",xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem","7xl":"4.5rem","8xl":"6rem","9xl":"8rem"}},kV=Oxe,PV={px:"1px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem",12:"3rem",14:"3.5rem",16:"4rem",20:"5rem",24:"6rem",28:"7rem",32:"8rem",36:"9rem",40:"10rem",44:"11rem",48:"12rem",52:"13rem",56:"14rem",60:"15rem",64:"16rem",72:"18rem",80:"20rem",96:"24rem"},$xe={max:"max-content",min:"min-content",full:"100%","3xs":"14rem","2xs":"16rem",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem","8xl":"90rem",prose:"60ch"},Nxe={sm:"640px",md:"768px",lg:"1024px",xl:"1280px"},Fxe={...PV,...$xe,container:Nxe},IV=Fxe,Dxe={breakpoints:Cxe,zIndices:_xe,radii:kxe,blur:Rxe,colors:Txe,...kV,sizes:IV,shadows:Ixe,space:PV,borders:xxe,transition:vxe},{defineMultiStyleConfig:Lxe,definePartsStyle:Xh}=Be(["stepper","step","title","description","indicator","separator","icon","number"]),Hs=Ae("stepper-indicator-size"),ud=Ae("stepper-icon-size"),dd=Ae("stepper-title-font-size"),Qh=Ae("stepper-description-font-size"),Sh=Ae("stepper-accent-color"),Bxe=Xh(({colorScheme:e})=>({stepper:{display:"flex",justifyContent:"space-between",gap:"4","&[data-orientation=vertical]":{flexDirection:"column",alignItems:"flex-start"},"&[data-orientation=horizontal]":{flexDirection:"row",alignItems:"center"},[Sh.variable]:`colors.${e}.500`,_dark:{[Sh.variable]:`colors.${e}.200`}},title:{fontSize:dd.reference,fontWeight:"medium"},description:{fontSize:Qh.reference,color:"chakra-subtle-text"},number:{fontSize:dd.reference},step:{flexShrink:0,position:"relative",display:"flex",gap:"2","&[data-orientation=horizontal]":{alignItems:"center"},flex:"1","&:last-of-type:not([data-stretch])":{flex:"initial"}},icon:{flexShrink:0,width:ud.reference,height:ud.reference},indicator:{flexShrink:0,borderRadius:"full",width:Hs.reference,height:Hs.reference,display:"flex",justifyContent:"center",alignItems:"center","&[data-status=active]":{borderWidth:"2px",borderColor:Sh.reference},"&[data-status=complete]":{bg:Sh.reference,color:"chakra-inverse-text"},"&[data-status=incomplete]":{borderWidth:"2px"}},separator:{bg:"chakra-border-color",flex:"1","&[data-status=complete]":{bg:Sh.reference},"&[data-orientation=horizontal]":{width:"100%",height:"2px",marginStart:"2"},"&[data-orientation=vertical]":{width:"2px",position:"absolute",height:"100%",maxHeight:`calc(100% - ${Hs.reference} - 8px)`,top:`calc(${Hs.reference} + 4px)`,insetStart:`calc(${Hs.reference} / 2 - 1px)`}}})),zxe=Lxe({baseStyle:Bxe,sizes:{xs:Xh({stepper:{[Hs.variable]:"sizes.4",[ud.variable]:"sizes.3",[dd.variable]:"fontSizes.xs",[Qh.variable]:"fontSizes.xs"}}),sm:Xh({stepper:{[Hs.variable]:"sizes.6",[ud.variable]:"sizes.4",[dd.variable]:"fontSizes.sm",[Qh.variable]:"fontSizes.xs"}}),md:Xh({stepper:{[Hs.variable]:"sizes.8",[ud.variable]:"sizes.5",[dd.variable]:"fontSizes.md",[Qh.variable]:"fontSizes.sm"}}),lg:Xh({stepper:{[Hs.variable]:"sizes.10",[ud.variable]:"sizes.6",[dd.variable]:"fontSizes.lg",[Qh.variable]:"fontSizes.md"}})},defaultProps:{size:"md",colorScheme:"blue"}});function ht(e,t={}){let n=!1;function r(){if(!n){n=!0;return}throw new Error("[anatomy] .part(...) should only be called once. Did you mean to use .extend(...) ?")}function i(...u){r();for(const d of u)t[d]=l(d);return ht(e,t)}function o(...u){for(const d of u)d in t||(t[d]=l(d));return ht(e,t)}function s(){return Object.fromEntries(Object.entries(t).map(([d,f])=>[d,f.selector]))}function a(){return Object.fromEntries(Object.entries(t).map(([d,f])=>[d,f.className]))}function l(u){const h=`chakra-${(["container","root"].includes(u??"")?[e]:[e,u]).filter(Boolean).join("__")}`;return{className:h,selector:`.${h}`,toString:()=>u}}return{parts:i,toPart:l,extend:o,selectors:s,classnames:a,get keys(){return Object.keys(t)},__type:{}}}var MV=ht("accordion").parts("root","container","button","panel").extend("icon"),jxe=ht("alert").parts("title","description","container").extend("icon","spinner"),Vxe=ht("avatar").parts("label","badge","container").extend("excessLabel","group"),Uxe=ht("breadcrumb").parts("link","item","container").extend("separator");ht("button").parts();var RV=ht("checkbox").parts("control","icon","container").extend("label");ht("progress").parts("track","filledTrack").extend("label");var Gxe=ht("drawer").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),OV=ht("editable").parts("preview","input","textarea"),Hxe=ht("form").parts("container","requiredIndicator","helperText"),Wxe=ht("formError").parts("text","icon"),$V=ht("input").parts("addon","field","element","group"),qxe=ht("list").parts("container","item","icon"),NV=ht("menu").parts("button","list","item").extend("groupTitle","icon","command","divider"),FV=ht("modal").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),DV=ht("numberinput").parts("root","field","stepperGroup","stepper");ht("pininput").parts("field");var LV=ht("popover").parts("content","header","body","footer").extend("popper","arrow","closeButton"),BV=ht("progress").parts("label","filledTrack","track"),Kxe=ht("radio").parts("container","control","label"),zV=ht("select").parts("field","icon"),jV=ht("slider").parts("container","track","thumb","filledTrack","mark"),Xxe=ht("stat").parts("container","label","helpText","number","icon"),VV=ht("switch").parts("container","track","thumb","label"),Qxe=ht("table").parts("table","thead","tbody","tr","th","td","tfoot","caption"),UV=ht("tabs").parts("root","tab","tablist","tabpanel","tabpanels","indicator"),Yxe=ht("tag").parts("container","label","closeButton"),Zxe=ht("card").parts("container","header","body","footer");ht("stepper").parts("stepper","step","title","description","indicator","separator","icon","number");function Cc(e,t,n){return Math.min(Math.max(e,n),t)}class Jxe extends Error{constructor(t){super(`Failed to parse color: "${t}"`)}}var Yh=Jxe;function rA(e){if(typeof e!="string")throw new Yh(e);if(e.trim().toLowerCase()==="transparent")return[0,0,0,0];let t=e.trim();t=awe.test(e)?nwe(e):e;const n=rwe.exec(t);if(n){const s=Array.from(n).slice(1);return[...s.slice(0,3).map(a=>parseInt(Fg(a,2),16)),parseInt(Fg(s[3]||"f",2),16)/255]}const r=iwe.exec(t);if(r){const s=Array.from(r).slice(1);return[...s.slice(0,3).map(a=>parseInt(a,16)),parseInt(s[3]||"ff",16)/255]}const i=owe.exec(t);if(i){const s=Array.from(i).slice(1);return[...s.slice(0,3).map(a=>parseInt(a,10)),parseFloat(s[3]||"1")]}const o=swe.exec(t);if(o){const[s,a,l,c]=Array.from(o).slice(1).map(parseFloat);if(Cc(0,100,a)!==a)throw new Yh(e);if(Cc(0,100,l)!==l)throw new Yh(e);return[...lwe(s,a,l),Number.isNaN(c)?1:c]}throw new Yh(e)}function ewe(e){let t=5381,n=e.length;for(;n;)t=t*33^e.charCodeAt(--n);return(t>>>0)%2341}const bM=e=>parseInt(e.replace(/_/g,""),36),twe="1q29ehhb 1n09sgk7 1kl1ekf_ _yl4zsno 16z9eiv3 1p29lhp8 _bd9zg04 17u0____ _iw9zhe5 _to73___ _r45e31e _7l6g016 _jh8ouiv _zn3qba8 1jy4zshs 11u87k0u 1ro9yvyo 1aj3xael 1gz9zjz0 _3w8l4xo 1bf1ekf_ _ke3v___ _4rrkb__ 13j776yz _646mbhl _nrjr4__ _le6mbhl 1n37ehkb _m75f91n _qj3bzfz 1939yygw 11i5z6x8 _1k5f8xs 1509441m 15t5lwgf _ae2th1n _tg1ugcv 1lp1ugcv 16e14up_ _h55rw7n _ny9yavn _7a11xb_ 1ih442g9 _pv442g9 1mv16xof 14e6y7tu 1oo9zkds 17d1cisi _4v9y70f _y98m8kc 1019pq0v 12o9zda8 _348j4f4 1et50i2o _8epa8__ _ts6senj 1o350i2o 1mi9eiuo 1259yrp0 1ln80gnw _632xcoy 1cn9zldc _f29edu4 1n490c8q _9f9ziet 1b94vk74 _m49zkct 1kz6s73a 1eu9dtog _q58s1rz 1dy9sjiq __u89jo3 _aj5nkwg _ld89jo3 13h9z6wx _qa9z2ii _l119xgq _bs5arju 1hj4nwk9 1qt4nwk9 1ge6wau6 14j9zlcw 11p1edc_ _ms1zcxe _439shk6 _jt9y70f _754zsow 1la40eju _oq5p___ _x279qkz 1fa5r3rv _yd2d9ip _424tcku _8y1di2_ _zi2uabw _yy7rn9h 12yz980_ __39ljp6 1b59zg0x _n39zfzp 1fy9zest _b33k___ _hp9wq92 1il50hz4 _io472ub _lj9z3eo 19z9ykg0 _8t8iu3a 12b9bl4a 1ak5yw0o _896v4ku _tb8k8lv _s59zi6t _c09ze0p 1lg80oqn 1id9z8wb _238nba5 1kq6wgdi _154zssg _tn3zk49 _da9y6tc 1sg7cv4f _r12jvtt 1gq5fmkz 1cs9rvci _lp9jn1c _xw1tdnb 13f9zje6 16f6973h _vo7ir40 _bt5arjf _rc45e4t _hr4e100 10v4e100 _hc9zke2 _w91egv_ _sj2r1kk 13c87yx8 _vqpds__ _ni8ggk8 _tj9yqfb 1ia2j4r4 _7x9b10u 1fc9ld4j 1eq9zldr _5j9lhpx _ez9zl6o _md61fzm".split(" ").reduce((e,t)=>{const n=bM(t.substring(0,3)),r=bM(t.substring(3)).toString(16);let i="";for(let o=0;o<6-r.length;o++)i+="0";return e[n]=`${i}${r}`,e},{});function nwe(e){const t=e.toLowerCase().trim(),n=twe[ewe(t)];if(!n)throw new Yh(e);return`#${n}`}const Fg=(e,t)=>Array.from(Array(t)).map(()=>e).join(""),rwe=new RegExp(`^#${Fg("([a-f0-9])",3)}([a-f0-9])?$`,"i"),iwe=new RegExp(`^#${Fg("([a-f0-9]{2})",3)}([a-f0-9]{2})?$`,"i"),owe=new RegExp(`^rgba?\\(\\s*(\\d+)\\s*${Fg(",\\s*(\\d+)\\s*",2)}(?:,\\s*([\\d.]+))?\\s*\\)$`,"i"),swe=/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i,awe=/^[a-z]+$/i,_M=e=>Math.round(e*255),lwe=(e,t,n)=>{let r=n/100;if(t===0)return[r,r,r].map(_M);const i=(e%360+360)%360/60,o=(1-Math.abs(2*r-1))*(t/100),s=o*(1-Math.abs(i%2-1));let a=0,l=0,c=0;i>=0&&i<1?(a=o,l=s):i>=1&&i<2?(a=s,l=o):i>=2&&i<3?(l=o,c=s):i>=3&&i<4?(l=s,c=o):i>=4&&i<5?(a=s,c=o):i>=5&&i<6&&(a=o,c=s);const u=r-o/2,d=a+u,f=l+u,h=c+u;return[d,f,h].map(_M)};function cwe(e,t,n,r){return`rgba(${Cc(0,255,e).toFixed()}, ${Cc(0,255,t).toFixed()}, ${Cc(0,255,n).toFixed()}, ${parseFloat(Cc(0,1,r).toFixed(3))})`}function uwe(e,t){const[n,r,i,o]=rA(e);return cwe(n,r,i,o-t)}function dwe(e){const[t,n,r,i]=rA(e);let o=s=>{const a=Cc(0,255,s).toString(16);return a.length===1?`0${a}`:a};return`#${o(t)}${o(n)}${o(r)}${i<1?o(Math.round(i*255)):""}`}function fwe(e,t,n,r,i){for(t=t.split?t.split("."):t,r=0;rObject.keys(e).length===0,$r=(e,t,n)=>{const r=fwe(e,`colors.${t}`,t);try{return dwe(r),r}catch{return n??"#000000"}},pwe=e=>{const[t,n,r]=rA(e);return(t*299+n*587+r*114)/1e3},gwe=e=>t=>{const n=$r(t,e);return pwe(n)<128?"dark":"light"},mwe=e=>t=>gwe(e)(t)==="dark",vf=(e,t)=>n=>{const r=$r(n,e);return uwe(r,1-t)};function SM(e="1rem",t="rgba(255, 255, 255, 0.15)"){return{backgroundImage:`linear-gradient( - 45deg, - ${t} 25%, - transparent 25%, - transparent 50%, - ${t} 50%, - ${t} 75%, - transparent 75%, - transparent - )`,backgroundSize:`${e} ${e}`}}var ywe=()=>`#${Math.floor(Math.random()*16777215).toString(16).padEnd(6,"0")}`;function vwe(e){const t=ywe();return!e||hwe(e)?t:e.string&&e.colors?_we(e.string,e.colors):e.string&&!e.colors?bwe(e.string):e.colors&&!e.string?Swe(e.colors):t}function bwe(e){let t=0;if(e.length===0)return t.toString();for(let r=0;r>r*8&255;n+=`00${i.toString(16)}`.substr(-2)}return n}function _we(e,t){let n=0;if(e.length===0)return t[0];for(let r=0;rn.colorMode==="dark"?t:e}function iA(e){const{orientation:t,vertical:n,horizontal:r}=e;return t?t==="vertical"?n:r:{}}function GV(e){return ys(e)&&e.reference?e.reference:String(e)}var kS=(e,...t)=>t.map(GV).join(` ${e} `).replace(/calc/g,""),xM=(...e)=>`calc(${kS("+",...e)})`,wM=(...e)=>`calc(${kS("-",...e)})`,k3=(...e)=>`calc(${kS("*",...e)})`,CM=(...e)=>`calc(${kS("/",...e)})`,EM=e=>{const t=GV(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:k3(t,-1)},Ws=Object.assign(e=>({add:(...t)=>Ws(xM(e,...t)),subtract:(...t)=>Ws(wM(e,...t)),multiply:(...t)=>Ws(k3(e,...t)),divide:(...t)=>Ws(CM(e,...t)),negate:()=>Ws(EM(e)),toString:()=>e.toString()}),{add:xM,subtract:wM,multiply:k3,divide:CM,negate:EM});function xwe(e){return!Number.isInteger(parseFloat(e.toString()))}function wwe(e,t="-"){return e.replace(/\s+/g,t)}function HV(e){const t=wwe(e.toString());return t.includes("\\.")?e:xwe(e)?t.replace(".","\\."):e}function Cwe(e,t=""){return[t,HV(e)].filter(Boolean).join("-")}function Ewe(e,t){return`var(${HV(e)}${t?`, ${t}`:""})`}function Twe(e,t=""){return`--${Cwe(e,t)}`}function Xt(e,t){const n=Twe(e,t==null?void 0:t.prefix);return{variable:n,reference:Ewe(n,Awe(t==null?void 0:t.fallback))}}function Awe(e){return typeof e=="string"?e:e==null?void 0:e.reference}var{defineMultiStyleConfig:kwe,definePartsStyle:uv}=Be(VV.keys),_p=Xt("switch-track-width"),Dc=Xt("switch-track-height"),ww=Xt("switch-track-diff"),Pwe=Ws.subtract(_p,Dc),P3=Xt("switch-thumb-x"),xh=Xt("switch-bg"),Iwe=e=>{const{colorScheme:t}=e;return{borderRadius:"full",p:"0.5",width:[_p.reference],height:[Dc.reference],transitionProperty:"common",transitionDuration:"fast",[xh.variable]:"colors.gray.300",_dark:{[xh.variable]:"colors.whiteAlpha.400"},_focusVisible:{boxShadow:"outline"},_disabled:{opacity:.4,cursor:"not-allowed"},_checked:{[xh.variable]:`colors.${t}.500`,_dark:{[xh.variable]:`colors.${t}.200`}},bg:xh.reference}},Mwe={bg:"white",transitionProperty:"transform",transitionDuration:"normal",borderRadius:"inherit",width:[Dc.reference],height:[Dc.reference],_checked:{transform:`translateX(${P3.reference})`}},Rwe=uv(e=>({container:{[ww.variable]:Pwe,[P3.variable]:ww.reference,_rtl:{[P3.variable]:Ws(ww).negate().toString()}},track:Iwe(e),thumb:Mwe})),Owe={sm:uv({container:{[_p.variable]:"1.375rem",[Dc.variable]:"sizes.3"}}),md:uv({container:{[_p.variable]:"1.875rem",[Dc.variable]:"sizes.4"}}),lg:uv({container:{[_p.variable]:"2.875rem",[Dc.variable]:"sizes.6"}})},$we=kwe({baseStyle:Rwe,sizes:Owe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:Nwe,definePartsStyle:zd}=Be(Qxe.keys),Fwe=zd({table:{fontVariantNumeric:"lining-nums tabular-nums",borderCollapse:"collapse",width:"full"},th:{fontFamily:"heading",fontWeight:"bold",textTransform:"uppercase",letterSpacing:"wider",textAlign:"start"},td:{textAlign:"start"},caption:{mt:4,fontFamily:"heading",textAlign:"center",fontWeight:"medium"}}),G1={"&[data-is-numeric=true]":{textAlign:"end"}},Dwe=zd(e=>{const{colorScheme:t}=e;return{th:{color:W("gray.600","gray.400")(e),borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},td:{borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},caption:{color:W("gray.600","gray.100")(e)},tfoot:{tr:{"&:last-of-type":{th:{borderBottomWidth:0}}}}}}),Lwe=zd(e=>{const{colorScheme:t}=e;return{th:{color:W("gray.600","gray.400")(e),borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},td:{borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},caption:{color:W("gray.600","gray.100")(e)},tbody:{tr:{"&:nth-of-type(odd)":{"th, td":{borderBottomWidth:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e)},td:{background:W(`${t}.100`,`${t}.700`)(e)}}}},tfoot:{tr:{"&:last-of-type":{th:{borderBottomWidth:0}}}}}}),Bwe={simple:Dwe,striped:Lwe,unstyled:{}},zwe={sm:zd({th:{px:"4",py:"1",lineHeight:"4",fontSize:"xs"},td:{px:"4",py:"2",fontSize:"sm",lineHeight:"4"},caption:{px:"4",py:"2",fontSize:"xs"}}),md:zd({th:{px:"6",py:"3",lineHeight:"4",fontSize:"xs"},td:{px:"6",py:"4",lineHeight:"5"},caption:{px:"6",py:"2",fontSize:"sm"}}),lg:zd({th:{px:"8",py:"4",lineHeight:"5",fontSize:"sm"},td:{px:"8",py:"5",lineHeight:"6"},caption:{px:"6",py:"2",fontSize:"md"}})},jwe=Nwe({baseStyle:Fwe,variants:Bwe,sizes:zwe,defaultProps:{variant:"simple",size:"md",colorScheme:"gray"}}),Kr=Ae("tabs-color"),Co=Ae("tabs-bg"),sy=Ae("tabs-border-color"),{defineMultiStyleConfig:Vwe,definePartsStyle:vs}=Be(UV.keys),Uwe=e=>{const{orientation:t}=e;return{display:t==="vertical"?"flex":"block"}},Gwe=e=>{const{isFitted:t}=e;return{flex:t?1:void 0,transitionProperty:"common",transitionDuration:"normal",_focusVisible:{zIndex:1,boxShadow:"outline"},_disabled:{cursor:"not-allowed",opacity:.4}}},Hwe=e=>{const{align:t="start",orientation:n}=e;return{justifyContent:{end:"flex-end",center:"center",start:"flex-start"}[t],flexDirection:n==="vertical"?"column":"row"}},Wwe={p:4},qwe=vs(e=>({root:Uwe(e),tab:Gwe(e),tablist:Hwe(e),tabpanel:Wwe})),Kwe={sm:vs({tab:{py:1,px:4,fontSize:"sm"}}),md:vs({tab:{fontSize:"md",py:2,px:4}}),lg:vs({tab:{fontSize:"lg",py:3,px:4}})},Xwe=vs(e=>{const{colorScheme:t,orientation:n}=e,r=n==="vertical",i=r?"borderStart":"borderBottom",o=r?"marginStart":"marginBottom";return{tablist:{[i]:"2px solid",borderColor:"inherit"},tab:{[i]:"2px solid",borderColor:"transparent",[o]:"-2px",_selected:{[Kr.variable]:`colors.${t}.600`,_dark:{[Kr.variable]:`colors.${t}.300`},borderColor:"currentColor"},_active:{[Co.variable]:"colors.gray.200",_dark:{[Co.variable]:"colors.whiteAlpha.300"}},_disabled:{_active:{bg:"none"}},color:Kr.reference,bg:Co.reference}}}),Qwe=vs(e=>{const{colorScheme:t}=e;return{tab:{borderTopRadius:"md",border:"1px solid",borderColor:"transparent",mb:"-1px",[sy.variable]:"transparent",_selected:{[Kr.variable]:`colors.${t}.600`,[sy.variable]:"colors.white",_dark:{[Kr.variable]:`colors.${t}.300`,[sy.variable]:"colors.gray.800"},borderColor:"inherit",borderBottomColor:sy.reference},color:Kr.reference},tablist:{mb:"-1px",borderBottom:"1px solid",borderColor:"inherit"}}}),Ywe=vs(e=>{const{colorScheme:t}=e;return{tab:{border:"1px solid",borderColor:"inherit",[Co.variable]:"colors.gray.50",_dark:{[Co.variable]:"colors.whiteAlpha.50"},mb:"-1px",_notLast:{marginEnd:"-1px"},_selected:{[Co.variable]:"colors.white",[Kr.variable]:`colors.${t}.600`,_dark:{[Co.variable]:"colors.gray.800",[Kr.variable]:`colors.${t}.300`},borderColor:"inherit",borderTopColor:"currentColor",borderBottomColor:"transparent"},color:Kr.reference,bg:Co.reference},tablist:{mb:"-1px",borderBottom:"1px solid",borderColor:"inherit"}}}),Zwe=vs(e=>{const{colorScheme:t,theme:n}=e;return{tab:{borderRadius:"full",fontWeight:"semibold",color:"gray.600",_selected:{color:$r(n,`${t}.700`),bg:$r(n,`${t}.100`)}}}}),Jwe=vs(e=>{const{colorScheme:t}=e;return{tab:{borderRadius:"full",fontWeight:"semibold",[Kr.variable]:"colors.gray.600",_dark:{[Kr.variable]:"inherit"},_selected:{[Kr.variable]:"colors.white",[Co.variable]:`colors.${t}.600`,_dark:{[Kr.variable]:"colors.gray.800",[Co.variable]:`colors.${t}.300`}},color:Kr.reference,bg:Co.reference}}}),eCe=vs({}),tCe={line:Xwe,enclosed:Qwe,"enclosed-colored":Ywe,"soft-rounded":Zwe,"solid-rounded":Jwe,unstyled:eCe},nCe=Vwe({baseStyle:qwe,sizes:Kwe,variants:tCe,defaultProps:{size:"md",variant:"line",colorScheme:"blue"}}),un=L2e("badge",["bg","color","shadow"]),rCe={px:1,textTransform:"uppercase",fontSize:"xs",borderRadius:"sm",fontWeight:"bold",bg:un.bg.reference,color:un.color.reference,boxShadow:un.shadow.reference},iCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.500`,.6)(n);return{[un.bg.variable]:`colors.${t}.500`,[un.color.variable]:"colors.white",_dark:{[un.bg.variable]:r,[un.color.variable]:"colors.whiteAlpha.800"}}},oCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.200`,.16)(n);return{[un.bg.variable]:`colors.${t}.100`,[un.color.variable]:`colors.${t}.800`,_dark:{[un.bg.variable]:r,[un.color.variable]:`colors.${t}.200`}}},sCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.200`,.8)(n);return{[un.color.variable]:`colors.${t}.500`,_dark:{[un.color.variable]:r},[un.shadow.variable]:`inset 0 0 0px 1px ${un.color.reference}`}},aCe={solid:iCe,subtle:oCe,outline:sCe},Sp={baseStyle:rCe,variants:aCe,defaultProps:{variant:"subtle",colorScheme:"gray"}},{defineMultiStyleConfig:lCe,definePartsStyle:Lc}=Be(Yxe.keys),TM=Ae("tag-bg"),AM=Ae("tag-color"),Cw=Ae("tag-shadow"),dv=Ae("tag-min-height"),fv=Ae("tag-min-width"),hv=Ae("tag-font-size"),pv=Ae("tag-padding-inline"),cCe={fontWeight:"medium",lineHeight:1.2,outline:0,[AM.variable]:un.color.reference,[TM.variable]:un.bg.reference,[Cw.variable]:un.shadow.reference,color:AM.reference,bg:TM.reference,boxShadow:Cw.reference,borderRadius:"md",minH:dv.reference,minW:fv.reference,fontSize:hv.reference,px:pv.reference,_focusVisible:{[Cw.variable]:"shadows.outline"}},uCe={lineHeight:1.2,overflow:"visible"},dCe={fontSize:"lg",w:"5",h:"5",transitionProperty:"common",transitionDuration:"normal",borderRadius:"full",marginStart:"1.5",marginEnd:"-1",opacity:.5,_disabled:{opacity:.4},_focusVisible:{boxShadow:"outline",bg:"rgba(0, 0, 0, 0.14)"},_hover:{opacity:.8},_active:{opacity:1}},fCe=Lc({container:cCe,label:uCe,closeButton:dCe}),hCe={sm:Lc({container:{[dv.variable]:"sizes.5",[fv.variable]:"sizes.5",[hv.variable]:"fontSizes.xs",[pv.variable]:"space.2"},closeButton:{marginEnd:"-2px",marginStart:"0.35rem"}}),md:Lc({container:{[dv.variable]:"sizes.6",[fv.variable]:"sizes.6",[hv.variable]:"fontSizes.sm",[pv.variable]:"space.2"}}),lg:Lc({container:{[dv.variable]:"sizes.8",[fv.variable]:"sizes.8",[hv.variable]:"fontSizes.md",[pv.variable]:"space.3"}})},pCe={subtle:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.subtle(e)}}),solid:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.solid(e)}}),outline:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.outline(e)}})},gCe=lCe({variants:pCe,baseStyle:fCe,sizes:hCe,defaultProps:{size:"md",variant:"subtle",colorScheme:"gray"}}),{definePartsStyle:Qs,defineMultiStyleConfig:mCe}=Be($V.keys),fd=Ae("input-height"),hd=Ae("input-font-size"),pd=Ae("input-padding"),gd=Ae("input-border-radius"),yCe=Qs({addon:{height:fd.reference,fontSize:hd.reference,px:pd.reference,borderRadius:gd.reference},field:{width:"100%",height:fd.reference,fontSize:hd.reference,px:pd.reference,borderRadius:gd.reference,minWidth:0,outline:0,position:"relative",appearance:"none",transitionProperty:"common",transitionDuration:"normal",_disabled:{opacity:.4,cursor:"not-allowed"}}}),Ma={lg:{[hd.variable]:"fontSizes.lg",[pd.variable]:"space.4",[gd.variable]:"radii.md",[fd.variable]:"sizes.12"},md:{[hd.variable]:"fontSizes.md",[pd.variable]:"space.4",[gd.variable]:"radii.md",[fd.variable]:"sizes.10"},sm:{[hd.variable]:"fontSizes.sm",[pd.variable]:"space.3",[gd.variable]:"radii.sm",[fd.variable]:"sizes.8"},xs:{[hd.variable]:"fontSizes.xs",[pd.variable]:"space.2",[gd.variable]:"radii.sm",[fd.variable]:"sizes.6"}},vCe={lg:Qs({field:Ma.lg,group:Ma.lg}),md:Qs({field:Ma.md,group:Ma.md}),sm:Qs({field:Ma.sm,group:Ma.sm}),xs:Qs({field:Ma.xs,group:Ma.xs})};function oA(e){const{focusBorderColor:t,errorBorderColor:n}=e;return{focusBorderColor:t||W("blue.500","blue.300")(e),errorBorderColor:n||W("red.500","red.300")(e)}}var bCe=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{border:"1px solid",borderColor:"inherit",bg:"inherit",_hover:{borderColor:W("gray.300","whiteAlpha.400")(e)},_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r),boxShadow:`0 0 0 1px ${$r(t,r)}`},_focusVisible:{zIndex:1,borderColor:$r(t,n),boxShadow:`0 0 0 1px ${$r(t,n)}`}},addon:{border:"1px solid",borderColor:W("inherit","whiteAlpha.50")(e),bg:W("gray.100","whiteAlpha.300")(e)}}}),_Ce=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{border:"2px solid",borderColor:"transparent",bg:W("gray.100","whiteAlpha.50")(e),_hover:{bg:W("gray.200","whiteAlpha.100")(e)},_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r)},_focusVisible:{bg:"transparent",borderColor:$r(t,n)}},addon:{border:"2px solid",borderColor:"transparent",bg:W("gray.100","whiteAlpha.50")(e)}}}),SCe=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{borderBottom:"1px solid",borderColor:"inherit",borderRadius:"0",px:"0",bg:"transparent",_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r),boxShadow:`0px 1px 0px 0px ${$r(t,r)}`},_focusVisible:{borderColor:$r(t,n),boxShadow:`0px 1px 0px 0px ${$r(t,n)}`}},addon:{borderBottom:"2px solid",borderColor:"inherit",borderRadius:"0",px:"0",bg:"transparent"}}}),xCe=Qs({field:{bg:"transparent",px:"0",height:"auto"},addon:{bg:"transparent",px:"0",height:"auto"}}),wCe={outline:bCe,filled:_Ce,flushed:SCe,unstyled:xCe},ft=mCe({baseStyle:yCe,sizes:vCe,variants:wCe,defaultProps:{size:"md",variant:"outline"}}),kM,CCe={...(kM=ft.baseStyle)==null?void 0:kM.field,paddingY:"2",minHeight:"20",lineHeight:"short",verticalAlign:"top"},PM,IM,ECe={outline:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.outline(e).field)!=null?n:{}},flushed:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.flushed(e).field)!=null?n:{}},filled:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.filled(e).field)!=null?n:{}},unstyled:(IM=(PM=ft.variants)==null?void 0:PM.unstyled.field)!=null?IM:{}},MM,RM,OM,$M,NM,FM,DM,LM,TCe={xs:(RM=(MM=ft.sizes)==null?void 0:MM.xs.field)!=null?RM:{},sm:($M=(OM=ft.sizes)==null?void 0:OM.sm.field)!=null?$M:{},md:(FM=(NM=ft.sizes)==null?void 0:NM.md.field)!=null?FM:{},lg:(LM=(DM=ft.sizes)==null?void 0:DM.lg.field)!=null?LM:{}},ACe={baseStyle:CCe,sizes:TCe,variants:ECe,defaultProps:{size:"md",variant:"outline"}},ay=Xt("tooltip-bg"),Ew=Xt("tooltip-fg"),kCe=Xt("popper-arrow-bg"),PCe={bg:ay.reference,color:Ew.reference,[ay.variable]:"colors.gray.700",[Ew.variable]:"colors.whiteAlpha.900",_dark:{[ay.variable]:"colors.gray.300",[Ew.variable]:"colors.gray.900"},[kCe.variable]:ay.reference,px:"2",py:"0.5",borderRadius:"sm",fontWeight:"medium",fontSize:"sm",boxShadow:"md",maxW:"xs",zIndex:"tooltip"},ICe={baseStyle:PCe},{defineMultiStyleConfig:MCe,definePartsStyle:Zh}=Be(BV.keys),RCe=e=>{const{colorScheme:t,theme:n,isIndeterminate:r,hasStripe:i}=e,o=W(SM(),SM("1rem","rgba(0,0,0,0.1)"))(e),s=W(`${t}.500`,`${t}.200`)(e),a=`linear-gradient( - to right, - transparent 0%, - ${$r(n,s)} 50%, - transparent 100% - )`;return{...!r&&i&&o,...r?{bgImage:a}:{bgColor:s}}},OCe={lineHeight:"1",fontSize:"0.25em",fontWeight:"bold",color:"white"},$Ce=e=>({bg:W("gray.100","whiteAlpha.300")(e)}),NCe=e=>({transitionProperty:"common",transitionDuration:"slow",...RCe(e)}),FCe=Zh(e=>({label:OCe,filledTrack:NCe(e),track:$Ce(e)})),DCe={xs:Zh({track:{h:"1"}}),sm:Zh({track:{h:"2"}}),md:Zh({track:{h:"3"}}),lg:Zh({track:{h:"4"}})},LCe=MCe({sizes:DCe,baseStyle:FCe,defaultProps:{size:"md",colorScheme:"blue"}}),BCe=e=>typeof e=="function";function Fr(e,...t){return BCe(e)?e(...t):e}var{definePartsStyle:gv,defineMultiStyleConfig:zCe}=Be(RV.keys),xp=Ae("checkbox-size"),jCe=e=>{const{colorScheme:t}=e;return{w:xp.reference,h:xp.reference,transitionProperty:"box-shadow",transitionDuration:"normal",border:"2px solid",borderRadius:"sm",borderColor:"inherit",color:"white",_checked:{bg:W(`${t}.500`,`${t}.200`)(e),borderColor:W(`${t}.500`,`${t}.200`)(e),color:W("white","gray.900")(e),_hover:{bg:W(`${t}.600`,`${t}.300`)(e),borderColor:W(`${t}.600`,`${t}.300`)(e)},_disabled:{borderColor:W("gray.200","transparent")(e),bg:W("gray.200","whiteAlpha.300")(e),color:W("gray.500","whiteAlpha.500")(e)}},_indeterminate:{bg:W(`${t}.500`,`${t}.200`)(e),borderColor:W(`${t}.500`,`${t}.200`)(e),color:W("white","gray.900")(e)},_disabled:{bg:W("gray.100","whiteAlpha.100")(e),borderColor:W("gray.100","transparent")(e)},_focusVisible:{boxShadow:"outline"},_invalid:{borderColor:W("red.500","red.300")(e)}}},VCe={_disabled:{cursor:"not-allowed"}},UCe={userSelect:"none",_disabled:{opacity:.4}},GCe={transitionProperty:"transform",transitionDuration:"normal"},HCe=gv(e=>({icon:GCe,container:VCe,control:Fr(jCe,e),label:UCe})),WCe={sm:gv({control:{[xp.variable]:"sizes.3"},label:{fontSize:"sm"},icon:{fontSize:"3xs"}}),md:gv({control:{[xp.variable]:"sizes.4"},label:{fontSize:"md"},icon:{fontSize:"2xs"}}),lg:gv({control:{[xp.variable]:"sizes.5"},label:{fontSize:"lg"},icon:{fontSize:"2xs"}})},H1=zCe({baseStyle:HCe,sizes:WCe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:qCe,definePartsStyle:mv}=Be(Kxe.keys),KCe=e=>{var t;const n=(t=Fr(H1.baseStyle,e))==null?void 0:t.control;return{...n,borderRadius:"full",_checked:{...n==null?void 0:n._checked,_before:{content:'""',display:"inline-block",pos:"relative",w:"50%",h:"50%",borderRadius:"50%",bg:"currentColor"}}}},XCe=mv(e=>{var t,n,r,i;return{label:(n=(t=H1).baseStyle)==null?void 0:n.call(t,e).label,container:(i=(r=H1).baseStyle)==null?void 0:i.call(r,e).container,control:KCe(e)}}),QCe={md:mv({control:{w:"4",h:"4"},label:{fontSize:"md"}}),lg:mv({control:{w:"5",h:"5"},label:{fontSize:"lg"}}),sm:mv({control:{width:"3",height:"3"},label:{fontSize:"sm"}})},YCe=qCe({baseStyle:XCe,sizes:QCe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:ZCe,definePartsStyle:JCe}=Be(zV.keys),ly=Ae("select-bg"),BM,e5e={...(BM=ft.baseStyle)==null?void 0:BM.field,appearance:"none",paddingBottom:"1px",lineHeight:"normal",bg:ly.reference,[ly.variable]:"colors.white",_dark:{[ly.variable]:"colors.gray.700"},"> option, > optgroup":{bg:ly.reference}},t5e={width:"6",height:"100%",insetEnd:"2",position:"relative",color:"currentColor",fontSize:"xl",_disabled:{opacity:.5}},n5e=JCe({field:e5e,icon:t5e}),cy={paddingInlineEnd:"8"},zM,jM,VM,UM,GM,HM,WM,qM,r5e={lg:{...(zM=ft.sizes)==null?void 0:zM.lg,field:{...(jM=ft.sizes)==null?void 0:jM.lg.field,...cy}},md:{...(VM=ft.sizes)==null?void 0:VM.md,field:{...(UM=ft.sizes)==null?void 0:UM.md.field,...cy}},sm:{...(GM=ft.sizes)==null?void 0:GM.sm,field:{...(HM=ft.sizes)==null?void 0:HM.sm.field,...cy}},xs:{...(WM=ft.sizes)==null?void 0:WM.xs,field:{...(qM=ft.sizes)==null?void 0:qM.xs.field,...cy},icon:{insetEnd:"1"}}},i5e=ZCe({baseStyle:n5e,sizes:r5e,variants:ft.variants,defaultProps:ft.defaultProps}),Tw=Ae("skeleton-start-color"),Aw=Ae("skeleton-end-color"),o5e={[Tw.variable]:"colors.gray.100",[Aw.variable]:"colors.gray.400",_dark:{[Tw.variable]:"colors.gray.800",[Aw.variable]:"colors.gray.600"},background:Tw.reference,borderColor:Aw.reference,opacity:.7,borderRadius:"sm"},s5e={baseStyle:o5e},kw=Ae("skip-link-bg"),a5e={borderRadius:"md",fontWeight:"semibold",_focusVisible:{boxShadow:"outline",padding:"4",position:"fixed",top:"6",insetStart:"6",[kw.variable]:"colors.white",_dark:{[kw.variable]:"colors.gray.700"},bg:kw.reference}},l5e={baseStyle:a5e},{defineMultiStyleConfig:c5e,definePartsStyle:PS}=Be(jV.keys),Dg=Ae("slider-thumb-size"),Lg=Ae("slider-track-size"),Ka=Ae("slider-bg"),u5e=e=>{const{orientation:t}=e;return{display:"inline-block",position:"relative",cursor:"pointer",_disabled:{opacity:.6,cursor:"default",pointerEvents:"none"},...iA({orientation:t,vertical:{h:"100%"},horizontal:{w:"100%"}})}},d5e=e=>({...iA({orientation:e.orientation,horizontal:{h:Lg.reference},vertical:{w:Lg.reference}}),overflow:"hidden",borderRadius:"sm",[Ka.variable]:"colors.gray.200",_dark:{[Ka.variable]:"colors.whiteAlpha.200"},_disabled:{[Ka.variable]:"colors.gray.300",_dark:{[Ka.variable]:"colors.whiteAlpha.300"}},bg:Ka.reference}),f5e=e=>{const{orientation:t}=e;return{...iA({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",_active:{transform:"translateX(-50%) scale(1.15)"}},horizontal:{top:"50%",transform:"translateY(-50%)",_active:{transform:"translateY(-50%) scale(1.15)"}}}),w:Dg.reference,h:Dg.reference,display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",outline:0,zIndex:1,borderRadius:"full",bg:"white",boxShadow:"base",border:"1px solid",borderColor:"transparent",transitionProperty:"transform",transitionDuration:"normal",_focusVisible:{boxShadow:"outline"},_disabled:{bg:"gray.300"}}},h5e=e=>{const{colorScheme:t}=e;return{width:"inherit",height:"inherit",[Ka.variable]:`colors.${t}.500`,_dark:{[Ka.variable]:`colors.${t}.200`},bg:Ka.reference}},p5e=PS(e=>({container:u5e(e),track:d5e(e),thumb:f5e(e),filledTrack:h5e(e)})),g5e=PS({container:{[Dg.variable]:"sizes.4",[Lg.variable]:"sizes.1"}}),m5e=PS({container:{[Dg.variable]:"sizes.3.5",[Lg.variable]:"sizes.1"}}),y5e=PS({container:{[Dg.variable]:"sizes.2.5",[Lg.variable]:"sizes.0.5"}}),v5e={lg:g5e,md:m5e,sm:y5e},b5e=c5e({baseStyle:p5e,sizes:v5e,defaultProps:{size:"md",colorScheme:"blue"}}),yc=Xt("spinner-size"),_5e={width:[yc.reference],height:[yc.reference]},S5e={xs:{[yc.variable]:"sizes.3"},sm:{[yc.variable]:"sizes.4"},md:{[yc.variable]:"sizes.6"},lg:{[yc.variable]:"sizes.8"},xl:{[yc.variable]:"sizes.12"}},x5e={baseStyle:_5e,sizes:S5e,defaultProps:{size:"md"}},{defineMultiStyleConfig:w5e,definePartsStyle:WV}=Be(Xxe.keys),C5e={fontWeight:"medium"},E5e={opacity:.8,marginBottom:"2"},T5e={verticalAlign:"baseline",fontWeight:"semibold"},A5e={marginEnd:1,w:"3.5",h:"3.5",verticalAlign:"middle"},k5e=WV({container:{},label:C5e,helpText:E5e,number:T5e,icon:A5e}),P5e={md:WV({label:{fontSize:"sm"},helpText:{fontSize:"sm"},number:{fontSize:"2xl"}})},I5e=w5e({baseStyle:k5e,sizes:P5e,defaultProps:{size:"md"}}),Pw=Ae("kbd-bg"),M5e={[Pw.variable]:"colors.gray.100",_dark:{[Pw.variable]:"colors.whiteAlpha.100"},bg:Pw.reference,borderRadius:"md",borderWidth:"1px",borderBottomWidth:"3px",fontSize:"0.8em",fontWeight:"bold",lineHeight:"normal",px:"0.4em",whiteSpace:"nowrap"},R5e={baseStyle:M5e},O5e={transitionProperty:"common",transitionDuration:"fast",transitionTimingFunction:"ease-out",cursor:"pointer",textDecoration:"none",outline:"none",color:"inherit",_hover:{textDecoration:"underline"},_focusVisible:{boxShadow:"outline"}},$5e={baseStyle:O5e},{defineMultiStyleConfig:N5e,definePartsStyle:F5e}=Be(qxe.keys),D5e={marginEnd:"2",display:"inline",verticalAlign:"text-bottom"},L5e=F5e({icon:D5e}),B5e=N5e({baseStyle:L5e}),{defineMultiStyleConfig:z5e,definePartsStyle:j5e}=Be(NV.keys),es=Ae("menu-bg"),Iw=Ae("menu-shadow"),V5e={[es.variable]:"#fff",[Iw.variable]:"shadows.sm",_dark:{[es.variable]:"colors.gray.700",[Iw.variable]:"shadows.dark-lg"},color:"inherit",minW:"3xs",py:"2",zIndex:1,borderRadius:"md",borderWidth:"1px",bg:es.reference,boxShadow:Iw.reference},U5e={py:"1.5",px:"3",transitionProperty:"background",transitionDuration:"ultra-fast",transitionTimingFunction:"ease-in",_focus:{[es.variable]:"colors.gray.100",_dark:{[es.variable]:"colors.whiteAlpha.100"}},_active:{[es.variable]:"colors.gray.200",_dark:{[es.variable]:"colors.whiteAlpha.200"}},_expanded:{[es.variable]:"colors.gray.100",_dark:{[es.variable]:"colors.whiteAlpha.100"}},_disabled:{opacity:.4,cursor:"not-allowed"},bg:es.reference},G5e={mx:4,my:2,fontWeight:"semibold",fontSize:"sm"},H5e={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},W5e={opacity:.6},q5e={border:0,borderBottom:"1px solid",borderColor:"inherit",my:"2",opacity:.6},K5e={transitionProperty:"common",transitionDuration:"normal"},X5e=j5e({button:K5e,list:V5e,item:U5e,groupTitle:G5e,icon:H5e,command:W5e,divider:q5e}),Q5e=z5e({baseStyle:X5e}),{defineMultiStyleConfig:Y5e,definePartsStyle:I3}=Be(FV.keys),Mw=Ae("modal-bg"),Rw=Ae("modal-shadow"),Z5e={bg:"blackAlpha.600",zIndex:"modal"},J5e=e=>{const{isCentered:t,scrollBehavior:n}=e;return{display:"flex",zIndex:"modal",justifyContent:"center",alignItems:t?"center":"flex-start",overflow:n==="inside"?"hidden":"auto",overscrollBehaviorY:"none"}},e3e=e=>{const{isCentered:t,scrollBehavior:n}=e;return{borderRadius:"md",color:"inherit",my:t?"auto":"16",mx:t?"auto":void 0,zIndex:"modal",maxH:n==="inside"?"calc(100% - 7.5rem)":void 0,[Mw.variable]:"colors.white",[Rw.variable]:"shadows.lg",_dark:{[Mw.variable]:"colors.gray.700",[Rw.variable]:"shadows.dark-lg"},bg:Mw.reference,boxShadow:Rw.reference}},t3e={px:"6",py:"4",fontSize:"xl",fontWeight:"semibold"},n3e={position:"absolute",top:"2",insetEnd:"3"},r3e=e=>{const{scrollBehavior:t}=e;return{px:"6",py:"2",flex:"1",overflow:t==="inside"?"auto":void 0}},i3e={px:"6",py:"4"},o3e=I3(e=>({overlay:Z5e,dialogContainer:Fr(J5e,e),dialog:Fr(e3e,e),header:t3e,closeButton:n3e,body:Fr(r3e,e),footer:i3e}));function go(e){return I3(e==="full"?{dialog:{maxW:"100vw",minH:"$100vh",my:"0",borderRadius:"0"}}:{dialog:{maxW:e}})}var s3e={xs:go("xs"),sm:go("sm"),md:go("md"),lg:go("lg"),xl:go("xl"),"2xl":go("2xl"),"3xl":go("3xl"),"4xl":go("4xl"),"5xl":go("5xl"),"6xl":go("6xl"),full:go("full")},a3e=Y5e({baseStyle:o3e,sizes:s3e,defaultProps:{size:"md"}}),{defineMultiStyleConfig:l3e,definePartsStyle:qV}=Be(DV.keys),sA=Xt("number-input-stepper-width"),KV=Xt("number-input-input-padding"),c3e=Ws(sA).add("0.5rem").toString(),Ow=Xt("number-input-bg"),$w=Xt("number-input-color"),Nw=Xt("number-input-border-color"),u3e={[sA.variable]:"sizes.6",[KV.variable]:c3e},d3e=e=>{var t,n;return(n=(t=Fr(ft.baseStyle,e))==null?void 0:t.field)!=null?n:{}},f3e={width:sA.reference},h3e={borderStart:"1px solid",borderStartColor:Nw.reference,color:$w.reference,bg:Ow.reference,[$w.variable]:"colors.chakra-body-text",[Nw.variable]:"colors.chakra-border-color",_dark:{[$w.variable]:"colors.whiteAlpha.800",[Nw.variable]:"colors.whiteAlpha.300"},_active:{[Ow.variable]:"colors.gray.200",_dark:{[Ow.variable]:"colors.whiteAlpha.300"}},_disabled:{opacity:.4,cursor:"not-allowed"}},p3e=qV(e=>{var t;return{root:u3e,field:(t=Fr(d3e,e))!=null?t:{},stepperGroup:f3e,stepper:h3e}});function uy(e){var t,n,r;const i=(t=ft.sizes)==null?void 0:t[e],o={lg:"md",md:"md",sm:"sm",xs:"sm"},s=(r=(n=i.field)==null?void 0:n.fontSize)!=null?r:"md",a=kV.fontSizes[s];return qV({field:{...i.field,paddingInlineEnd:KV.reference,verticalAlign:"top"},stepper:{fontSize:Ws(a).multiply(.75).toString(),_first:{borderTopEndRadius:o[e]},_last:{borderBottomEndRadius:o[e],mt:"-1px",borderTopWidth:1}}})}var g3e={xs:uy("xs"),sm:uy("sm"),md:uy("md"),lg:uy("lg")},m3e=l3e({baseStyle:p3e,sizes:g3e,variants:ft.variants,defaultProps:ft.defaultProps}),KM,y3e={...(KM=ft.baseStyle)==null?void 0:KM.field,textAlign:"center"},v3e={lg:{fontSize:"lg",w:12,h:12,borderRadius:"md"},md:{fontSize:"md",w:10,h:10,borderRadius:"md"},sm:{fontSize:"sm",w:8,h:8,borderRadius:"sm"},xs:{fontSize:"xs",w:6,h:6,borderRadius:"sm"}},XM,QM,b3e={outline:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.outline,e))==null?void 0:n.field)!=null?r:{}},flushed:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.flushed,e))==null?void 0:n.field)!=null?r:{}},filled:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.filled,e))==null?void 0:n.field)!=null?r:{}},unstyled:(QM=(XM=ft.variants)==null?void 0:XM.unstyled.field)!=null?QM:{}},_3e={baseStyle:y3e,sizes:v3e,variants:b3e,defaultProps:ft.defaultProps},{defineMultiStyleConfig:S3e,definePartsStyle:x3e}=Be(LV.keys),dy=Xt("popper-bg"),w3e=Xt("popper-arrow-bg"),YM=Xt("popper-arrow-shadow-color"),C3e={zIndex:10},E3e={[dy.variable]:"colors.white",bg:dy.reference,[w3e.variable]:dy.reference,[YM.variable]:"colors.gray.200",_dark:{[dy.variable]:"colors.gray.700",[YM.variable]:"colors.whiteAlpha.300"},width:"xs",border:"1px solid",borderColor:"inherit",borderRadius:"md",boxShadow:"sm",zIndex:"inherit",_focusVisible:{outline:0,boxShadow:"outline"}},T3e={px:3,py:2,borderBottomWidth:"1px"},A3e={px:3,py:2},k3e={px:3,py:2,borderTopWidth:"1px"},P3e={position:"absolute",borderRadius:"md",top:1,insetEnd:2,padding:2},I3e=x3e({popper:C3e,content:E3e,header:T3e,body:A3e,footer:k3e,closeButton:P3e}),M3e=S3e({baseStyle:I3e}),{definePartsStyle:M3,defineMultiStyleConfig:R3e}=Be(Gxe.keys),Fw=Ae("drawer-bg"),Dw=Ae("drawer-box-shadow");function Lu(e){return M3(e==="full"?{dialog:{maxW:"100vw",h:"100vh"}}:{dialog:{maxW:e}})}var O3e={bg:"blackAlpha.600",zIndex:"modal"},$3e={display:"flex",zIndex:"modal",justifyContent:"center"},N3e=e=>{const{isFullHeight:t}=e;return{...t&&{height:"100vh"},zIndex:"modal",maxH:"100vh",color:"inherit",[Fw.variable]:"colors.white",[Dw.variable]:"shadows.lg",_dark:{[Fw.variable]:"colors.gray.700",[Dw.variable]:"shadows.dark-lg"},bg:Fw.reference,boxShadow:Dw.reference}},F3e={px:"6",py:"4",fontSize:"xl",fontWeight:"semibold"},D3e={position:"absolute",top:"2",insetEnd:"3"},L3e={px:"6",py:"2",flex:"1",overflow:"auto"},B3e={px:"6",py:"4"},z3e=M3(e=>({overlay:O3e,dialogContainer:$3e,dialog:Fr(N3e,e),header:F3e,closeButton:D3e,body:L3e,footer:B3e})),j3e={xs:Lu("xs"),sm:Lu("md"),md:Lu("lg"),lg:Lu("2xl"),xl:Lu("4xl"),full:Lu("full")},V3e=R3e({baseStyle:z3e,sizes:j3e,defaultProps:{size:"xs"}}),{definePartsStyle:U3e,defineMultiStyleConfig:G3e}=Be(OV.keys),H3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal"},W3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},q3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},K3e=U3e({preview:H3e,input:W3e,textarea:q3e}),X3e=G3e({baseStyle:K3e}),{definePartsStyle:Q3e,defineMultiStyleConfig:Y3e}=Be(Hxe.keys),jd=Ae("form-control-color"),Z3e={marginStart:"1",[jd.variable]:"colors.red.500",_dark:{[jd.variable]:"colors.red.300"},color:jd.reference},J3e={mt:"2",[jd.variable]:"colors.gray.600",_dark:{[jd.variable]:"colors.whiteAlpha.600"},color:jd.reference,lineHeight:"normal",fontSize:"sm"},eEe=Q3e({container:{width:"100%",position:"relative"},requiredIndicator:Z3e,helperText:J3e}),tEe=Y3e({baseStyle:eEe}),{definePartsStyle:nEe,defineMultiStyleConfig:rEe}=Be(Wxe.keys),Vd=Ae("form-error-color"),iEe={[Vd.variable]:"colors.red.500",_dark:{[Vd.variable]:"colors.red.300"},color:Vd.reference,mt:"2",fontSize:"sm",lineHeight:"normal"},oEe={marginEnd:"0.5em",[Vd.variable]:"colors.red.500",_dark:{[Vd.variable]:"colors.red.300"},color:Vd.reference},sEe=nEe({text:iEe,icon:oEe}),aEe=rEe({baseStyle:sEe}),lEe={fontSize:"md",marginEnd:"3",mb:"2",fontWeight:"medium",transitionProperty:"common",transitionDuration:"normal",opacity:1,_disabled:{opacity:.4}},cEe={baseStyle:lEe},uEe={fontFamily:"heading",fontWeight:"bold"},dEe={"4xl":{fontSize:["6xl",null,"7xl"],lineHeight:1},"3xl":{fontSize:["5xl",null,"6xl"],lineHeight:1},"2xl":{fontSize:["4xl",null,"5xl"],lineHeight:[1.2,null,1]},xl:{fontSize:["3xl",null,"4xl"],lineHeight:[1.33,null,1.2]},lg:{fontSize:["2xl",null,"3xl"],lineHeight:[1.33,null,1.2]},md:{fontSize:"xl",lineHeight:1.2},sm:{fontSize:"md",lineHeight:1.2},xs:{fontSize:"sm",lineHeight:1.2}},fEe={baseStyle:uEe,sizes:dEe,defaultProps:{size:"xl"}},{defineMultiStyleConfig:hEe,definePartsStyle:pEe}=Be(Uxe.keys),Lw=Ae("breadcrumb-link-decor"),gEe={transitionProperty:"common",transitionDuration:"fast",transitionTimingFunction:"ease-out",outline:"none",color:"inherit",textDecoration:Lw.reference,[Lw.variable]:"none","&:not([aria-current=page])":{cursor:"pointer",_hover:{[Lw.variable]:"underline"},_focusVisible:{boxShadow:"outline"}}},mEe=pEe({link:gEe}),yEe=hEe({baseStyle:mEe}),vEe={lineHeight:"1.2",borderRadius:"md",fontWeight:"semibold",transitionProperty:"common",transitionDuration:"normal",_focusVisible:{boxShadow:"outline"},_disabled:{opacity:.4,cursor:"not-allowed",boxShadow:"none"},_hover:{_disabled:{bg:"initial"}}},XV=e=>{const{colorScheme:t,theme:n}=e;if(t==="gray")return{color:W("gray.800","whiteAlpha.900")(e),_hover:{bg:W("gray.100","whiteAlpha.200")(e)},_active:{bg:W("gray.200","whiteAlpha.300")(e)}};const r=vf(`${t}.200`,.12)(n),i=vf(`${t}.200`,.24)(n);return{color:W(`${t}.600`,`${t}.200`)(e),bg:"transparent",_hover:{bg:W(`${t}.50`,r)(e)},_active:{bg:W(`${t}.100`,i)(e)}}},bEe=e=>{const{colorScheme:t}=e,n=W("gray.200","whiteAlpha.300")(e);return{border:"1px solid",borderColor:t==="gray"?n:"currentColor",".chakra-button__group[data-attached][data-orientation=horizontal] > &:not(:last-of-type)":{marginEnd:"-1px"},".chakra-button__group[data-attached][data-orientation=vertical] > &:not(:last-of-type)":{marginBottom:"-1px"},...Fr(XV,e)}},_Ee={yellow:{bg:"yellow.400",color:"black",hoverBg:"yellow.500",activeBg:"yellow.600"},cyan:{bg:"cyan.400",color:"black",hoverBg:"cyan.500",activeBg:"cyan.600"}},SEe=e=>{var t;const{colorScheme:n}=e;if(n==="gray"){const l=W("gray.100","whiteAlpha.200")(e);return{bg:l,color:W("gray.800","whiteAlpha.900")(e),_hover:{bg:W("gray.200","whiteAlpha.300")(e),_disabled:{bg:l}},_active:{bg:W("gray.300","whiteAlpha.400")(e)}}}const{bg:r=`${n}.500`,color:i="white",hoverBg:o=`${n}.600`,activeBg:s=`${n}.700`}=(t=_Ee[n])!=null?t:{},a=W(r,`${n}.200`)(e);return{bg:a,color:W(i,"gray.800")(e),_hover:{bg:W(o,`${n}.300`)(e),_disabled:{bg:a}},_active:{bg:W(s,`${n}.400`)(e)}}},xEe=e=>{const{colorScheme:t}=e;return{padding:0,height:"auto",lineHeight:"normal",verticalAlign:"baseline",color:W(`${t}.500`,`${t}.200`)(e),_hover:{textDecoration:"underline",_disabled:{textDecoration:"none"}},_active:{color:W(`${t}.700`,`${t}.500`)(e)}}},wEe={bg:"none",color:"inherit",display:"inline",lineHeight:"inherit",m:"0",p:"0"},CEe={ghost:XV,outline:bEe,solid:SEe,link:xEe,unstyled:wEe},EEe={lg:{h:"12",minW:"12",fontSize:"lg",px:"6"},md:{h:"10",minW:"10",fontSize:"md",px:"4"},sm:{h:"8",minW:"8",fontSize:"sm",px:"3"},xs:{h:"6",minW:"6",fontSize:"xs",px:"2"}},TEe={baseStyle:vEe,variants:CEe,sizes:EEe,defaultProps:{variant:"solid",size:"md",colorScheme:"gray"}},{definePartsStyle:Bc,defineMultiStyleConfig:AEe}=Be(Zxe.keys),W1=Ae("card-bg"),ta=Ae("card-padding"),QV=Ae("card-shadow"),yv=Ae("card-radius"),YV=Ae("card-border-width","0"),ZV=Ae("card-border-color"),kEe=Bc({container:{[W1.variable]:"colors.chakra-body-bg",backgroundColor:W1.reference,boxShadow:QV.reference,borderRadius:yv.reference,color:"chakra-body-text",borderWidth:YV.reference,borderColor:ZV.reference},body:{padding:ta.reference,flex:"1 1 0%"},header:{padding:ta.reference},footer:{padding:ta.reference}}),PEe={sm:Bc({container:{[yv.variable]:"radii.base",[ta.variable]:"space.3"}}),md:Bc({container:{[yv.variable]:"radii.md",[ta.variable]:"space.5"}}),lg:Bc({container:{[yv.variable]:"radii.xl",[ta.variable]:"space.7"}})},IEe={elevated:Bc({container:{[QV.variable]:"shadows.base",_dark:{[W1.variable]:"colors.gray.700"}}}),outline:Bc({container:{[YV.variable]:"1px",[ZV.variable]:"colors.chakra-border-color"}}),filled:Bc({container:{[W1.variable]:"colors.chakra-subtle-bg"}}),unstyled:{body:{[ta.variable]:0},header:{[ta.variable]:0},footer:{[ta.variable]:0}}},MEe=AEe({baseStyle:kEe,variants:IEe,sizes:PEe,defaultProps:{variant:"elevated",size:"md"}}),wp=Xt("close-button-size"),wh=Xt("close-button-bg"),REe={w:[wp.reference],h:[wp.reference],borderRadius:"md",transitionProperty:"common",transitionDuration:"normal",_disabled:{opacity:.4,cursor:"not-allowed",boxShadow:"none"},_hover:{[wh.variable]:"colors.blackAlpha.100",_dark:{[wh.variable]:"colors.whiteAlpha.100"}},_active:{[wh.variable]:"colors.blackAlpha.200",_dark:{[wh.variable]:"colors.whiteAlpha.200"}},_focusVisible:{boxShadow:"outline"},bg:wh.reference},OEe={lg:{[wp.variable]:"sizes.10",fontSize:"md"},md:{[wp.variable]:"sizes.8",fontSize:"xs"},sm:{[wp.variable]:"sizes.6",fontSize:"2xs"}},$Ee={baseStyle:REe,sizes:OEe,defaultProps:{size:"md"}},{variants:NEe,defaultProps:FEe}=Sp,DEe={fontFamily:"mono",fontSize:"sm",px:"0.2em",borderRadius:"sm",bg:un.bg.reference,color:un.color.reference,boxShadow:un.shadow.reference},LEe={baseStyle:DEe,variants:NEe,defaultProps:FEe},BEe={w:"100%",mx:"auto",maxW:"prose",px:"4"},zEe={baseStyle:BEe},jEe={opacity:.6,borderColor:"inherit"},VEe={borderStyle:"solid"},UEe={borderStyle:"dashed"},GEe={solid:VEe,dashed:UEe},HEe={baseStyle:jEe,variants:GEe,defaultProps:{variant:"solid"}},{definePartsStyle:WEe,defineMultiStyleConfig:qEe}=Be(MV.keys),KEe={borderTopWidth:"1px",borderColor:"inherit",_last:{borderBottomWidth:"1px"}},XEe={transitionProperty:"common",transitionDuration:"normal",fontSize:"md",_focusVisible:{boxShadow:"outline"},_hover:{bg:"blackAlpha.50"},_disabled:{opacity:.4,cursor:"not-allowed"},px:"4",py:"2"},QEe={pt:"2",px:"4",pb:"5"},YEe={fontSize:"1.25em"},ZEe=WEe({container:KEe,button:XEe,panel:QEe,icon:YEe}),JEe=qEe({baseStyle:ZEe}),{definePartsStyle:qm,defineMultiStyleConfig:e4e}=Be(jxe.keys),xi=Ae("alert-fg"),ha=Ae("alert-bg"),t4e=qm({container:{bg:ha.reference,px:"4",py:"3"},title:{fontWeight:"bold",lineHeight:"6",marginEnd:"2"},description:{lineHeight:"6"},icon:{color:xi.reference,flexShrink:0,marginEnd:"3",w:"5",h:"6"},spinner:{color:xi.reference,flexShrink:0,marginEnd:"3",w:"5",h:"5"}});function aA(e){const{theme:t,colorScheme:n}=e,r=vf(`${n}.200`,.16)(t);return{light:`colors.${n}.100`,dark:r}}var n4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark}}}}),r4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark},paddingStart:"3",borderStartWidth:"4px",borderStartColor:xi.reference}}}),i4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark},pt:"2",borderTopWidth:"4px",borderTopColor:xi.reference}}}),o4e=qm(e=>{const{colorScheme:t}=e;return{container:{[xi.variable]:"colors.white",[ha.variable]:`colors.${t}.600`,_dark:{[xi.variable]:"colors.gray.900",[ha.variable]:`colors.${t}.200`},color:xi.reference}}}),s4e={subtle:n4e,"left-accent":r4e,"top-accent":i4e,solid:o4e},a4e=e4e({baseStyle:t4e,variants:s4e,defaultProps:{variant:"subtle",colorScheme:"blue"}}),{definePartsStyle:JV,defineMultiStyleConfig:l4e}=Be(Vxe.keys),Ud=Ae("avatar-border-color"),Cp=Ae("avatar-bg"),Bg=Ae("avatar-font-size"),bf=Ae("avatar-size"),c4e={borderRadius:"full",border:"0.2em solid",borderColor:Ud.reference,[Ud.variable]:"white",_dark:{[Ud.variable]:"colors.gray.800"}},u4e={bg:Cp.reference,fontSize:Bg.reference,width:bf.reference,height:bf.reference,lineHeight:"1",[Cp.variable]:"colors.gray.200",_dark:{[Cp.variable]:"colors.whiteAlpha.400"}},d4e=e=>{const{name:t,theme:n}=e,r=t?vwe({string:t}):"colors.gray.400",i=mwe(r)(n);let o="white";return i||(o="gray.800"),{bg:Cp.reference,fontSize:Bg.reference,color:o,borderColor:Ud.reference,verticalAlign:"top",width:bf.reference,height:bf.reference,"&:not([data-loaded])":{[Cp.variable]:r},[Ud.variable]:"colors.white",_dark:{[Ud.variable]:"colors.gray.800"}}},f4e={fontSize:Bg.reference,lineHeight:"1"},h4e=JV(e=>({badge:Fr(c4e,e),excessLabel:Fr(u4e,e),container:Fr(d4e,e),label:f4e}));function Ra(e){const t=e!=="100%"?IV[e]:void 0;return JV({container:{[bf.variable]:t??e,[Bg.variable]:`calc(${t??e} / 2.5)`},excessLabel:{[bf.variable]:t??e,[Bg.variable]:`calc(${t??e} / 2.5)`}})}var p4e={"2xs":Ra(4),xs:Ra(6),sm:Ra(8),md:Ra(12),lg:Ra(16),xl:Ra(24),"2xl":Ra(32),full:Ra("100%")},g4e=l4e({baseStyle:h4e,sizes:p4e,defaultProps:{size:"md"}}),m4e={Accordion:JEe,Alert:a4e,Avatar:g4e,Badge:Sp,Breadcrumb:yEe,Button:TEe,Checkbox:H1,CloseButton:$Ee,Code:LEe,Container:zEe,Divider:HEe,Drawer:V3e,Editable:X3e,Form:tEe,FormError:aEe,FormLabel:cEe,Heading:fEe,Input:ft,Kbd:R5e,Link:$5e,List:B5e,Menu:Q5e,Modal:a3e,NumberInput:m3e,PinInput:_3e,Popover:M3e,Progress:LCe,Radio:YCe,Select:i5e,Skeleton:s5e,SkipLink:l5e,Slider:b5e,Spinner:x5e,Stat:I5e,Switch:$we,Table:jwe,Tabs:nCe,Tag:gCe,Textarea:ACe,Tooltip:ICe,Card:MEe,Stepper:zxe},y4e={colors:{"chakra-body-text":{_light:"gray.800",_dark:"whiteAlpha.900"},"chakra-body-bg":{_light:"white",_dark:"gray.800"},"chakra-border-color":{_light:"gray.200",_dark:"whiteAlpha.300"},"chakra-inverse-text":{_light:"white",_dark:"gray.800"},"chakra-subtle-bg":{_light:"gray.100",_dark:"gray.700"},"chakra-subtle-text":{_light:"gray.600",_dark:"gray.400"},"chakra-placeholder-color":{_light:"gray.500",_dark:"whiteAlpha.400"}}},v4e={global:{body:{fontFamily:"body",color:"chakra-body-text",bg:"chakra-body-bg",transitionProperty:"background-color",transitionDuration:"normal",lineHeight:"base"},"*::placeholder":{color:"chakra-placeholder-color"},"*, *::before, &::after":{borderColor:"chakra-border-color"}}},b4e="ltr",_4e={useSystemColorMode:!1,initialColorMode:"light",cssVarPrefix:"chakra"},S4e={semanticTokens:y4e,direction:b4e,...Dxe,components:m4e,styles:v4e,config:_4e};function x4e(e,t){const n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n}function w4e(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},eU=C4e(w4e);function tU(e,t){const n={};return Object.keys(e).forEach(r=>{const i=e[r];t(i,r,e)&&(n[r]=i)}),n}var nU=e=>tU(e,t=>t!=null);function E4e(e){return typeof e=="function"}function rU(e,...t){return E4e(e)?e(...t):e}function EWe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}var T4e=typeof Element<"u",A4e=typeof Map=="function",k4e=typeof Set=="function",P4e=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function vv(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,r,i;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!vv(e[r],t[r]))return!1;return!0}var o;if(A4e&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;for(o=e.entries();!(r=o.next()).done;)if(!vv(r.value[1],t.get(r.value[0])))return!1;return!0}if(k4e&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;return!0}if(P4e&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[r]))return!1;if(T4e&&e instanceof Element)return!1;for(r=n;r--!==0;)if(!((i[r]==="_owner"||i[r]==="__v"||i[r]==="__o")&&e.$$typeof)&&!vv(e[i[r]],t[i[r]]))return!1;return!0}return e!==e&&t!==t}var I4e=function(t,n){try{return vv(t,n)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}};const M4e=Ml(I4e);function iU(e,t={}){var n;const{styleConfig:r,...i}=t,{theme:o,colorMode:s}=WSe(),a=e?eU(o,`components.${e}`):void 0,l=r||a,c=ds({theme:o,colorMode:s},(n=l==null?void 0:l.defaultProps)!=null?n:{},nU(x4e(i,["children"]))),u=I.useRef({});if(l){const f=hxe(l)(c);M4e(u.current,f)||(u.current=f)}return u.current}function Km(e,t={}){return iU(e,t)}function R4e(e,t={}){return iU(e,t)}var O4e=new Set([...txe,"textStyle","layerStyle","apply","noOfLines","focusBorderColor","errorBorderColor","as","__css","css","sx"]),$4e=new Set(["htmlWidth","htmlHeight","htmlSize","htmlTranslate"]);function N4e(e){return $4e.has(e)||!O4e.has(e)}function F4e(e,...t){if(e==null)throw new TypeError("Cannot convert undefined or null to object");const n={...e};for(const r of t)if(r!=null)for(const i in r)Object.prototype.hasOwnProperty.call(r,i)&&(i in n&&delete n[i],n[i]=r[i]);return n}function D4e(e){const t=Object.assign({},e);for(let n in t)t[n]===void 0&&delete t[n];return t}var L4e=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,B4e=sV(function(e){return L4e.test(e)||e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)<91}),z4e=B4e,j4e=function(t){return t!=="theme"},ZM=function(t){return typeof t=="string"&&t.charCodeAt(0)>96?z4e:j4e},JM=function(t,n,r){var i;if(n){var o=n.shouldForwardProp;i=t.__emotion_forwardProp&&o?function(s){return t.__emotion_forwardProp(s)&&o(s)}:o}return typeof i!="function"&&r&&(i=t.__emotion_forwardProp),i},V4e=function(t){var n=t.cache,r=t.serialized,i=t.isStringTag;return fV(n,r,i),MSe(function(){return hV(n,r,i)}),null},U4e=function e(t,n){var r=t.__emotion_real===t,i=r&&t.__emotion_base||t,o,s;n!==void 0&&(o=n.label,s=n.target);var a=JM(t,n,r),l=a||ZM(i),c=!l("as");return function(){var u=arguments,d=r&&t.__emotion_styles!==void 0?t.__emotion_styles.slice(0):[];if(o!==void 0&&d.push("label:"+o+";"),u[0]==null||u[0].raw===void 0)d.push.apply(d,u);else{d.push(u[0][0]);for(var f=u.length,h=1;ht=>{const{theme:n,css:r,__css:i,sx:o,...s}=t,a=tU(s,(d,f)=>rxe(f)),l=rU(e,t),c=F4e({},i,l,nU(a),o),u=AV(c)(t.theme);return r?[u,r]:u};function Bw(e,t){const{baseStyle:n,...r}=t??{};r.shouldForwardProp||(r.shouldForwardProp=N4e);const i=W4e({baseStyle:n}),o=H4e(e,r)(i);return Q.forwardRef(function(l,c){const{colorMode:u,forced:d}=ES();return Q.createElement(o,{ref:c,"data-theme":d?u:void 0,...l})})}function q4e(){const e=new Map;return new Proxy(Bw,{apply(t,n,r){return Bw(...r)},get(t,n){return e.has(n)||e.set(n,Bw(n)),e.get(n)}})}var or=q4e();function Mi(e){return I.forwardRef(e)}function K4e(e={}){const{strict:t=!0,errorMessage:n="useContext: `context` is undefined. Seems you forgot to wrap component within the Provider",name:r}=e,i=I.createContext(void 0);i.displayName=r;function o(){var s;const a=I.useContext(i);if(!a&&t){const l=new Error(n);throw l.name="ContextError",(s=Error.captureStackTrace)==null||s.call(Error,l,o),l}return a}return[i.Provider,o,i]}function X4e(e){const{cssVarsRoot:t,theme:n,children:r}=e,i=I.useMemo(()=>J2e(n),[n]);return ie.jsxs($Se,{theme:i,children:[ie.jsx(Q4e,{root:t}),r]})}function Q4e({root:e=":host, :root"}){const t=[e,"[data-theme]"].join(",");return ie.jsx(vV,{styles:n=>({[t]:n.__cssVars})})}K4e({name:"StylesContext",errorMessage:"useStyles: `styles` is undefined. Seems you forgot to wrap the components in `` "});function TWe(){const{colorMode:e}=ES();return ie.jsx(vV,{styles:t=>{const n=eU(t,"styles.global"),r=rU(n,{theme:t,colorMode:e});return r?AV(r)(t):void 0}})}var Y4e=(e,t)=>e.find(n=>n.id===t);function t9(e,t){const n=oU(e,t),r=n?e[n].findIndex(i=>i.id===t):-1;return{position:n,index:r}}function oU(e,t){for(const[n,r]of Object.entries(e))if(Y4e(r,t))return n}function Z4e(e){const t=e.includes("right"),n=e.includes("left");let r="center";return t&&(r="flex-end"),n&&(r="flex-start"),{display:"flex",flexDirection:"column",alignItems:r}}function J4e(e){const n=e==="top"||e==="bottom"?"0 auto":void 0,r=e.includes("top")?"env(safe-area-inset-top, 0px)":void 0,i=e.includes("bottom")?"env(safe-area-inset-bottom, 0px)":void 0,o=e.includes("left")?void 0:"env(safe-area-inset-right, 0px)",s=e.includes("right")?void 0:"env(safe-area-inset-left, 0px)";return{position:"fixed",zIndex:"var(--toast-z-index, 5500)",pointerEvents:"none",display:"flex",flexDirection:"column",margin:n,top:r,bottom:i,right:o,left:s}}function eTe(e,t=[]){const n=I.useRef(e);return I.useEffect(()=>{n.current=e}),I.useCallback((...r)=>{var i;return(i=n.current)==null?void 0:i.call(n,...r)},t)}function tTe(e,t){const n=eTe(e);I.useEffect(()=>{if(t==null)return;let r=null;return r=window.setTimeout(()=>{n()},t),()=>{r&&window.clearTimeout(r)}},[t,n])}function n9(e,t){const n=I.useRef(!1),r=I.useRef(!1);I.useEffect(()=>{if(n.current&&r.current)return e();r.current=!0},t),I.useEffect(()=>(n.current=!0,()=>{n.current=!1}),[])}const sU=I.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"}),IS=I.createContext({}),Xm=I.createContext(null),MS=typeof document<"u",lA=MS?I.useLayoutEffect:I.useEffect,aU=I.createContext({strict:!1}),cA=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),nTe="framerAppearId",lU="data-"+cA(nTe);function rTe(e,t,n,r){const{visualElement:i}=I.useContext(IS),o=I.useContext(aU),s=I.useContext(Xm),a=I.useContext(sU).reducedMotion,l=I.useRef();r=r||o.renderer,!l.current&&r&&(l.current=r(e,{visualState:t,parent:i,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:a}));const c=l.current;I.useInsertionEffect(()=>{c&&c.update(n,s)});const u=I.useRef(!!(n[lU]&&!window.HandoffComplete));return lA(()=>{c&&(c.render(),u.current&&c.animationState&&c.animationState.animateChanges())}),I.useEffect(()=>{c&&(c.updateFeatures(),!u.current&&c.animationState&&c.animationState.animateChanges(),u.current&&(u.current=!1,window.HandoffComplete=!0))}),c}function md(e){return typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function iTe(e,t,n){return I.useCallback(r=>{r&&e.mount&&e.mount(r),t&&(r?t.mount(r):t.unmount()),n&&(typeof n=="function"?n(r):md(n)&&(n.current=r))},[t])}function zg(e){return typeof e=="string"||Array.isArray(e)}function RS(e){return typeof e=="object"&&typeof e.start=="function"}const uA=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],dA=["initial",...uA];function OS(e){return RS(e.animate)||dA.some(t=>zg(e[t]))}function cU(e){return!!(OS(e)||e.variants)}function oTe(e,t){if(OS(e)){const{initial:n,animate:r}=e;return{initial:n===!1||zg(n)?n:void 0,animate:zg(r)?r:void 0}}return e.inherit!==!1?t:{}}function sTe(e){const{initial:t,animate:n}=oTe(e,I.useContext(IS));return I.useMemo(()=>({initial:t,animate:n}),[r9(t),r9(n)])}function r9(e){return Array.isArray(e)?e.join(" "):e}const i9={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},jg={};for(const e in i9)jg[e]={isEnabled:t=>i9[e].some(n=>!!t[n])};function aTe(e){for(const t in e)jg[t]={...jg[t],...e[t]}}const fA=I.createContext({}),uU=I.createContext({}),lTe=Symbol.for("motionComponentSymbol");function cTe({preloadedFeatures:e,createVisualElement:t,useRender:n,useVisualState:r,Component:i}){e&&aTe(e);function o(a,l){let c;const u={...I.useContext(sU),...a,layoutId:uTe(a)},{isStatic:d}=u,f=sTe(a),h=r(a,d);if(!d&&MS){f.visualElement=rTe(i,h,u,t);const p=I.useContext(uU),m=I.useContext(aU).strict;f.visualElement&&(c=f.visualElement.loadFeatures(u,m,e,p))}return I.createElement(IS.Provider,{value:f},c&&f.visualElement?I.createElement(c,{visualElement:f.visualElement,...u}):null,n(i,a,iTe(h,f.visualElement,l),h,d,f.visualElement))}const s=I.forwardRef(o);return s[lTe]=i,s}function uTe({layoutId:e}){const t=I.useContext(fA).id;return t&&e!==void 0?t+"-"+e:e}function dTe(e){function t(r,i={}){return cTe(e(r,i))}if(typeof Proxy>"u")return t;const n=new Map;return new Proxy(t,{get:(r,i)=>(n.has(i)||n.set(i,t(i)),n.get(i))})}const fTe=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function hA(e){return typeof e!="string"||e.includes("-")?!1:!!(fTe.indexOf(e)>-1||/[A-Z]/.test(e))}const K1={};function hTe(e){Object.assign(K1,e)}const Qm=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],du=new Set(Qm);function dU(e,{layout:t,layoutId:n}){return du.has(e)||e.startsWith("origin")||(t||n!==void 0)&&(!!K1[e]||e==="opacity")}const ri=e=>!!(e&&e.getVelocity),pTe={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},gTe=Qm.length;function mTe(e,{enableHardwareAcceleration:t=!0,allowTransformNone:n=!0},r,i){let o="";for(let s=0;st=>typeof t=="string"&&t.startsWith(e),hU=fU("--"),R3=fU("var(--"),yTe=/var\s*\(\s*--[\w-]+(\s*,\s*(?:(?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)+)?\s*\)/g,vTe=(e,t)=>t&&typeof e=="number"?t.transform(e):e,El=(e,t,n)=>Math.min(Math.max(n,e),t),fu={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Ep={...fu,transform:e=>El(0,1,e)},fy={...fu,default:1},Tp=e=>Math.round(e*1e5)/1e5,$S=/(-)?([\d]*\.?[\d])+/g,pU=/(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))/gi,bTe=/^(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))$/i;function Ym(e){return typeof e=="string"}const Zm=e=>({test:t=>Ym(t)&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),Na=Zm("deg"),bs=Zm("%"),Pe=Zm("px"),_Te=Zm("vh"),STe=Zm("vw"),o9={...bs,parse:e=>bs.parse(e)/100,transform:e=>bs.transform(e*100)},s9={...fu,transform:Math.round},gU={borderWidth:Pe,borderTopWidth:Pe,borderRightWidth:Pe,borderBottomWidth:Pe,borderLeftWidth:Pe,borderRadius:Pe,radius:Pe,borderTopLeftRadius:Pe,borderTopRightRadius:Pe,borderBottomRightRadius:Pe,borderBottomLeftRadius:Pe,width:Pe,maxWidth:Pe,height:Pe,maxHeight:Pe,size:Pe,top:Pe,right:Pe,bottom:Pe,left:Pe,padding:Pe,paddingTop:Pe,paddingRight:Pe,paddingBottom:Pe,paddingLeft:Pe,margin:Pe,marginTop:Pe,marginRight:Pe,marginBottom:Pe,marginLeft:Pe,rotate:Na,rotateX:Na,rotateY:Na,rotateZ:Na,scale:fy,scaleX:fy,scaleY:fy,scaleZ:fy,skew:Na,skewX:Na,skewY:Na,distance:Pe,translateX:Pe,translateY:Pe,translateZ:Pe,x:Pe,y:Pe,z:Pe,perspective:Pe,transformPerspective:Pe,opacity:Ep,originX:o9,originY:o9,originZ:Pe,zIndex:s9,fillOpacity:Ep,strokeOpacity:Ep,numOctaves:s9};function pA(e,t,n,r){const{style:i,vars:o,transform:s,transformOrigin:a}=e;let l=!1,c=!1,u=!0;for(const d in t){const f=t[d];if(hU(d)){o[d]=f;continue}const h=gU[d],p=vTe(f,h);if(du.has(d)){if(l=!0,s[d]=p,!u)continue;f!==(h.default||0)&&(u=!1)}else d.startsWith("origin")?(c=!0,a[d]=p):i[d]=p}if(t.transform||(l||r?i.transform=mTe(e.transform,n,u,r):i.transform&&(i.transform="none")),c){const{originX:d="50%",originY:f="50%",originZ:h=0}=a;i.transformOrigin=`${d} ${f} ${h}`}}const gA=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function mU(e,t,n){for(const r in t)!ri(t[r])&&!dU(r,n)&&(e[r]=t[r])}function xTe({transformTemplate:e},t,n){return I.useMemo(()=>{const r=gA();return pA(r,t,{enableHardwareAcceleration:!n},e),Object.assign({},r.vars,r.style)},[t])}function wTe(e,t,n){const r=e.style||{},i={};return mU(i,r,e),Object.assign(i,xTe(e,t,n)),e.transformValues?e.transformValues(i):i}function CTe(e,t,n){const r={},i=wTe(e,t,n);return e.drag&&e.dragListener!==!1&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(r.tabIndex=0),r.style=i,r}const ETe=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","transformValues","custom","inherit","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","ignoreStrict","viewport"]);function X1(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||ETe.has(e)}let yU=e=>!X1(e);function TTe(e){e&&(yU=t=>t.startsWith("on")?!X1(t):e(t))}try{TTe(require("@emotion/is-prop-valid").default)}catch{}function ATe(e,t,n){const r={};for(const i in e)i==="values"&&typeof e.values=="object"||(yU(i)||n===!0&&X1(i)||!t&&!X1(i)||e.draggable&&i.startsWith("onDrag"))&&(r[i]=e[i]);return r}function a9(e,t,n){return typeof e=="string"?e:Pe.transform(t+n*e)}function kTe(e,t,n){const r=a9(t,e.x,e.width),i=a9(n,e.y,e.height);return`${r} ${i}`}const PTe={offset:"stroke-dashoffset",array:"stroke-dasharray"},ITe={offset:"strokeDashoffset",array:"strokeDasharray"};function MTe(e,t,n=1,r=0,i=!0){e.pathLength=1;const o=i?PTe:ITe;e[o.offset]=Pe.transform(-r);const s=Pe.transform(t),a=Pe.transform(n);e[o.array]=`${s} ${a}`}function mA(e,{attrX:t,attrY:n,attrScale:r,originX:i,originY:o,pathLength:s,pathSpacing:a=1,pathOffset:l=0,...c},u,d,f){if(pA(e,c,u,f),d){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:h,style:p,dimensions:m}=e;h.transform&&(m&&(p.transform=h.transform),delete h.transform),m&&(i!==void 0||o!==void 0||p.transform)&&(p.transformOrigin=kTe(m,i!==void 0?i:.5,o!==void 0?o:.5)),t!==void 0&&(h.x=t),n!==void 0&&(h.y=n),r!==void 0&&(h.scale=r),s!==void 0&&MTe(h,s,a,l,!1)}const vU=()=>({...gA(),attrs:{}}),yA=e=>typeof e=="string"&&e.toLowerCase()==="svg";function RTe(e,t,n,r){const i=I.useMemo(()=>{const o=vU();return mA(o,t,{enableHardwareAcceleration:!1},yA(r),e.transformTemplate),{...o.attrs,style:{...o.style}}},[t]);if(e.style){const o={};mU(o,e.style,e),i.style={...o,...i.style}}return i}function OTe(e=!1){return(n,r,i,{latestValues:o},s)=>{const l=(hA(n)?RTe:CTe)(r,o,s,n),u={...ATe(r,typeof n=="string",e),...l,ref:i},{children:d}=r,f=I.useMemo(()=>ri(d)?d.get():d,[d]);return I.createElement(n,{...u,children:f})}}function bU(e,{style:t,vars:n},r,i){Object.assign(e.style,t,i&&i.getProjectionStyles(r));for(const o in n)e.style.setProperty(o,n[o])}const _U=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function SU(e,t,n,r){bU(e,t,void 0,r);for(const i in t.attrs)e.setAttribute(_U.has(i)?i:cA(i),t.attrs[i])}function vA(e,t){const{style:n}=e,r={};for(const i in n)(ri(n[i])||t.style&&ri(t.style[i])||dU(i,e))&&(r[i]=n[i]);return r}function xU(e,t){const n=vA(e,t);for(const r in e)if(ri(e[r])||ri(t[r])){const i=Qm.indexOf(r)!==-1?"attr"+r.charAt(0).toUpperCase()+r.substring(1):r;n[i]=e[r]}return n}function bA(e,t,n,r={},i={}){return typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),t}function wU(e){const t=I.useRef(null);return t.current===null&&(t.current=e()),t.current}const Q1=e=>Array.isArray(e),$Te=e=>!!(e&&typeof e=="object"&&e.mix&&e.toValue),NTe=e=>Q1(e)?e[e.length-1]||0:e;function bv(e){const t=ri(e)?e.get():e;return $Te(t)?t.toValue():t}function FTe({scrapeMotionValuesFromProps:e,createRenderState:t,onMount:n},r,i,o){const s={latestValues:DTe(r,i,o,e),renderState:t()};return n&&(s.mount=a=>n(r,a,s)),s}const CU=e=>(t,n)=>{const r=I.useContext(IS),i=I.useContext(Xm),o=()=>FTe(e,t,r,i);return n?o():wU(o)};function DTe(e,t,n,r){const i={},o=r(e,{});for(const f in o)i[f]=bv(o[f]);let{initial:s,animate:a}=e;const l=OS(e),c=cU(e);t&&c&&!l&&e.inherit!==!1&&(s===void 0&&(s=t.initial),a===void 0&&(a=t.animate));let u=n?n.initial===!1:!1;u=u||s===!1;const d=u?a:s;return d&&typeof d!="boolean"&&!RS(d)&&(Array.isArray(d)?d:[d]).forEach(h=>{const p=bA(e,h);if(!p)return;const{transitionEnd:m,transition:_,...v}=p;for(const y in v){let g=v[y];if(Array.isArray(g)){const b=u?g.length-1:0;g=g[b]}g!==null&&(i[y]=g)}for(const y in m)i[y]=m[y]}),i}const tn=e=>e;class l9{constructor(){this.order=[],this.scheduled=new Set}add(t){if(!this.scheduled.has(t))return this.scheduled.add(t),this.order.push(t),!0}remove(t){const n=this.order.indexOf(t);n!==-1&&(this.order.splice(n,1),this.scheduled.delete(t))}clear(){this.order.length=0,this.scheduled.clear()}}function LTe(e){let t=new l9,n=new l9,r=0,i=!1,o=!1;const s=new WeakSet,a={schedule:(l,c=!1,u=!1)=>{const d=u&&i,f=d?t:n;return c&&s.add(l),f.add(l)&&d&&i&&(r=t.order.length),l},cancel:l=>{n.remove(l),s.delete(l)},process:l=>{if(i){o=!0;return}if(i=!0,[t,n]=[n,t],n.clear(),r=t.order.length,r)for(let c=0;c(d[f]=LTe(()=>n=!0),d),{}),s=d=>o[d].process(i),a=()=>{const d=performance.now();n=!1,i.delta=r?1e3/60:Math.max(Math.min(d-i.timestamp,BTe),1),i.timestamp=d,i.isProcessing=!0,hy.forEach(s),i.isProcessing=!1,n&&t&&(r=!1,e(a))},l=()=>{n=!0,r=!0,i.isProcessing||e(a)};return{schedule:hy.reduce((d,f)=>{const h=o[f];return d[f]=(p,m=!1,_=!1)=>(n||l(),h.schedule(p,m,_)),d},{}),cancel:d=>hy.forEach(f=>o[f].cancel(d)),state:i,steps:o}}const{schedule:Pt,cancel:pa,state:$n,steps:zw}=zTe(typeof requestAnimationFrame<"u"?requestAnimationFrame:tn,!0),jTe={useVisualState:CU({scrapeMotionValuesFromProps:xU,createRenderState:vU,onMount:(e,t,{renderState:n,latestValues:r})=>{Pt.read(()=>{try{n.dimensions=typeof t.getBBox=="function"?t.getBBox():t.getBoundingClientRect()}catch{n.dimensions={x:0,y:0,width:0,height:0}}}),Pt.render(()=>{mA(n,r,{enableHardwareAcceleration:!1},yA(t.tagName),e.transformTemplate),SU(t,n)})}})},VTe={useVisualState:CU({scrapeMotionValuesFromProps:vA,createRenderState:gA})};function UTe(e,{forwardMotionProps:t=!1},n,r){return{...hA(e)?jTe:VTe,preloadedFeatures:n,useRender:OTe(t),createVisualElement:r,Component:e}}function Ys(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n)}const EU=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1;function NS(e,t="page"){return{point:{x:e[t+"X"],y:e[t+"Y"]}}}const GTe=e=>t=>EU(t)&&e(t,NS(t));function na(e,t,n,r){return Ys(e,t,GTe(n),r)}const HTe=(e,t)=>n=>t(e(n)),hl=(...e)=>e.reduce(HTe);function TU(e){let t=null;return()=>{const n=()=>{t=null};return t===null?(t=e,n):!1}}const c9=TU("dragHorizontal"),u9=TU("dragVertical");function AU(e){let t=!1;if(e==="y")t=u9();else if(e==="x")t=c9();else{const n=c9(),r=u9();n&&r?t=()=>{n(),r()}:(n&&n(),r&&r())}return t}function kU(){const e=AU(!0);return e?(e(),!1):!0}class Ll{constructor(t){this.isMounted=!1,this.node=t}update(){}}function d9(e,t){const n="pointer"+(t?"enter":"leave"),r="onHover"+(t?"Start":"End"),i=(o,s)=>{if(o.type==="touch"||kU())return;const a=e.getProps();e.animationState&&a.whileHover&&e.animationState.setActive("whileHover",t),a[r]&&Pt.update(()=>a[r](o,s))};return na(e.current,n,i,{passive:!e.getProps()[r]})}class WTe extends Ll{mount(){this.unmount=hl(d9(this.node,!0),d9(this.node,!1))}unmount(){}}class qTe extends Ll{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=hl(Ys(this.node.current,"focus",()=>this.onFocus()),Ys(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}const PU=(e,t)=>t?e===t?!0:PU(e,t.parentElement):!1;function jw(e,t){if(!t)return;const n=new PointerEvent("pointer"+e);t(n,NS(n))}class KTe extends Ll{constructor(){super(...arguments),this.removeStartListeners=tn,this.removeEndListeners=tn,this.removeAccessibleListeners=tn,this.startPointerPress=(t,n)=>{if(this.removeEndListeners(),this.isPressing)return;const r=this.node.getProps(),o=na(window,"pointerup",(a,l)=>{if(!this.checkPressEnd())return;const{onTap:c,onTapCancel:u}=this.node.getProps();Pt.update(()=>{PU(this.node.current,a.target)?c&&c(a,l):u&&u(a,l)})},{passive:!(r.onTap||r.onPointerUp)}),s=na(window,"pointercancel",(a,l)=>this.cancelPress(a,l),{passive:!(r.onTapCancel||r.onPointerCancel)});this.removeEndListeners=hl(o,s),this.startPress(t,n)},this.startAccessiblePress=()=>{const t=o=>{if(o.key!=="Enter"||this.isPressing)return;const s=a=>{a.key!=="Enter"||!this.checkPressEnd()||jw("up",(l,c)=>{const{onTap:u}=this.node.getProps();u&&Pt.update(()=>u(l,c))})};this.removeEndListeners(),this.removeEndListeners=Ys(this.node.current,"keyup",s),jw("down",(a,l)=>{this.startPress(a,l)})},n=Ys(this.node.current,"keydown",t),r=()=>{this.isPressing&&jw("cancel",(o,s)=>this.cancelPress(o,s))},i=Ys(this.node.current,"blur",r);this.removeAccessibleListeners=hl(n,i)}}startPress(t,n){this.isPressing=!0;const{onTapStart:r,whileTap:i}=this.node.getProps();i&&this.node.animationState&&this.node.animationState.setActive("whileTap",!0),r&&Pt.update(()=>r(t,n))}checkPressEnd(){return this.removeEndListeners(),this.isPressing=!1,this.node.getProps().whileTap&&this.node.animationState&&this.node.animationState.setActive("whileTap",!1),!kU()}cancelPress(t,n){if(!this.checkPressEnd())return;const{onTapCancel:r}=this.node.getProps();r&&Pt.update(()=>r(t,n))}mount(){const t=this.node.getProps(),n=na(this.node.current,"pointerdown",this.startPointerPress,{passive:!(t.onTapStart||t.onPointerStart)}),r=Ys(this.node.current,"focus",this.startAccessiblePress);this.removeStartListeners=hl(n,r)}unmount(){this.removeStartListeners(),this.removeEndListeners(),this.removeAccessibleListeners()}}const O3=new WeakMap,Vw=new WeakMap,XTe=e=>{const t=O3.get(e.target);t&&t(e)},QTe=e=>{e.forEach(XTe)};function YTe({root:e,...t}){const n=e||document;Vw.has(n)||Vw.set(n,{});const r=Vw.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(QTe,{root:e,...t})),r[i]}function ZTe(e,t,n){const r=YTe(t);return O3.set(e,n),r.observe(e),()=>{O3.delete(e),r.unobserve(e)}}const JTe={some:0,all:1};class eAe extends Ll{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:t={}}=this.node.getProps(),{root:n,margin:r,amount:i="some",once:o}=t,s={root:n?n.current:void 0,rootMargin:r,threshold:typeof i=="number"?i:JTe[i]},a=l=>{const{isIntersecting:c}=l;if(this.isInView===c||(this.isInView=c,o&&!c&&this.hasEnteredView))return;c&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",c);const{onViewportEnter:u,onViewportLeave:d}=this.node.getProps(),f=c?u:d;f&&f(l)};return ZTe(this.node.current,s,a)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:n}=this.node;["amount","margin","root"].some(tAe(t,n))&&this.startObserver()}unmount(){}}function tAe({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}const nAe={inView:{Feature:eAe},tap:{Feature:KTe},focus:{Feature:qTe},hover:{Feature:WTe}};function IU(e,t){if(!Array.isArray(t))return!1;const n=t.length;if(n!==e.length)return!1;for(let r=0;rt[r]=n.get()),t}function iAe(e){const t={};return e.values.forEach((n,r)=>t[r]=n.getVelocity()),t}function FS(e,t,n){const r=e.getProps();return bA(r,t,n!==void 0?n:r.custom,rAe(e),iAe(e))}let oAe=tn,_A=tn;const pl=e=>e*1e3,ra=e=>e/1e3,sAe={current:!1},MU=e=>Array.isArray(e)&&typeof e[0]=="number";function RU(e){return!!(!e||typeof e=="string"&&OU[e]||MU(e)||Array.isArray(e)&&e.every(RU))}const Jh=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,OU={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Jh([0,.65,.55,1]),circOut:Jh([.55,0,1,.45]),backIn:Jh([.31,.01,.66,-.59]),backOut:Jh([.33,1.53,.69,.99])};function $U(e){if(e)return MU(e)?Jh(e):Array.isArray(e)?e.map($U):OU[e]}function aAe(e,t,n,{delay:r=0,duration:i,repeat:o=0,repeatType:s="loop",ease:a,times:l}={}){const c={[t]:n};l&&(c.offset=l);const u=$U(a);return Array.isArray(u)&&(c.easing=u),e.animate(c,{delay:r,duration:i,easing:Array.isArray(u)?"linear":u,fill:"both",iterations:o+1,direction:s==="reverse"?"alternate":"normal"})}function lAe(e,{repeat:t,repeatType:n="loop"}){const r=t&&n!=="loop"&&t%2===1?0:e.length-1;return e[r]}const NU=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,cAe=1e-7,uAe=12;function dAe(e,t,n,r,i){let o,s,a=0;do s=t+(n-t)/2,o=NU(s,r,i)-e,o>0?n=s:t=s;while(Math.abs(o)>cAe&&++adAe(o,0,1,e,n);return o=>o===0||o===1?o:NU(i(o),t,r)}const fAe=Jm(.42,0,1,1),hAe=Jm(0,0,.58,1),FU=Jm(.42,0,.58,1),pAe=e=>Array.isArray(e)&&typeof e[0]!="number",DU=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,LU=e=>t=>1-e(1-t),BU=e=>1-Math.sin(Math.acos(e)),SA=LU(BU),gAe=DU(SA),zU=Jm(.33,1.53,.69,.99),xA=LU(zU),mAe=DU(xA),yAe=e=>(e*=2)<1?.5*xA(e):.5*(2-Math.pow(2,-10*(e-1))),vAe={linear:tn,easeIn:fAe,easeInOut:FU,easeOut:hAe,circIn:BU,circInOut:gAe,circOut:SA,backIn:xA,backInOut:mAe,backOut:zU,anticipate:yAe},f9=e=>{if(Array.isArray(e)){_A(e.length===4);const[t,n,r,i]=e;return Jm(t,n,r,i)}else if(typeof e=="string")return vAe[e];return e},wA=(e,t)=>n=>!!(Ym(n)&&bTe.test(n)&&n.startsWith(e)||t&&Object.prototype.hasOwnProperty.call(n,t)),jU=(e,t,n)=>r=>{if(!Ym(r))return r;const[i,o,s,a]=r.match($S);return{[e]:parseFloat(i),[t]:parseFloat(o),[n]:parseFloat(s),alpha:a!==void 0?parseFloat(a):1}},bAe=e=>El(0,255,e),Uw={...fu,transform:e=>Math.round(bAe(e))},Ec={test:wA("rgb","red"),parse:jU("red","green","blue"),transform:({red:e,green:t,blue:n,alpha:r=1})=>"rgba("+Uw.transform(e)+", "+Uw.transform(t)+", "+Uw.transform(n)+", "+Tp(Ep.transform(r))+")"};function _Ae(e){let t="",n="",r="",i="";return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}const $3={test:wA("#"),parse:_Ae,transform:Ec.transform},yd={test:wA("hsl","hue"),parse:jU("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>"hsla("+Math.round(e)+", "+bs.transform(Tp(t))+", "+bs.transform(Tp(n))+", "+Tp(Ep.transform(r))+")"},Mr={test:e=>Ec.test(e)||$3.test(e)||yd.test(e),parse:e=>Ec.test(e)?Ec.parse(e):yd.test(e)?yd.parse(e):$3.parse(e),transform:e=>Ym(e)?e:e.hasOwnProperty("red")?Ec.transform(e):yd.transform(e)},Wt=(e,t,n)=>-n*e+n*t+e;function Gw(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function SAe({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,o=0,s=0;if(!t)i=o=s=n;else{const a=n<.5?n*(1+t):n+t-n*t,l=2*n-a;i=Gw(l,a,e+1/3),o=Gw(l,a,e),s=Gw(l,a,e-1/3)}return{red:Math.round(i*255),green:Math.round(o*255),blue:Math.round(s*255),alpha:r}}const Hw=(e,t,n)=>{const r=e*e;return Math.sqrt(Math.max(0,n*(t*t-r)+r))},xAe=[$3,Ec,yd],wAe=e=>xAe.find(t=>t.test(e));function h9(e){const t=wAe(e);let n=t.parse(e);return t===yd&&(n=SAe(n)),n}const VU=(e,t)=>{const n=h9(e),r=h9(t),i={...n};return o=>(i.red=Hw(n.red,r.red,o),i.green=Hw(n.green,r.green,o),i.blue=Hw(n.blue,r.blue,o),i.alpha=Wt(n.alpha,r.alpha,o),Ec.transform(i))};function CAe(e){var t,n;return isNaN(e)&&Ym(e)&&(((t=e.match($S))===null||t===void 0?void 0:t.length)||0)+(((n=e.match(pU))===null||n===void 0?void 0:n.length)||0)>0}const UU={regex:yTe,countKey:"Vars",token:"${v}",parse:tn},GU={regex:pU,countKey:"Colors",token:"${c}",parse:Mr.parse},HU={regex:$S,countKey:"Numbers",token:"${n}",parse:fu.parse};function Ww(e,{regex:t,countKey:n,token:r,parse:i}){const o=e.tokenised.match(t);o&&(e["num"+n]=o.length,e.tokenised=e.tokenised.replace(t,r),e.values.push(...o.map(i)))}function Y1(e){const t=e.toString(),n={value:t,tokenised:t,values:[],numVars:0,numColors:0,numNumbers:0};return n.value.includes("var(--")&&Ww(n,UU),Ww(n,GU),Ww(n,HU),n}function WU(e){return Y1(e).values}function qU(e){const{values:t,numColors:n,numVars:r,tokenised:i}=Y1(e),o=t.length;return s=>{let a=i;for(let l=0;ltypeof e=="number"?0:e;function TAe(e){const t=WU(e);return qU(e)(t.map(EAe))}const Tl={test:CAe,parse:WU,createTransformer:qU,getAnimatableNone:TAe},KU=(e,t)=>n=>`${n>0?t:e}`;function XU(e,t){return typeof e=="number"?n=>Wt(e,t,n):Mr.test(e)?VU(e,t):e.startsWith("var(")?KU(e,t):YU(e,t)}const QU=(e,t)=>{const n=[...e],r=n.length,i=e.map((o,s)=>XU(o,t[s]));return o=>{for(let s=0;s{const n={...e,...t},r={};for(const i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=XU(e[i],t[i]));return i=>{for(const o in r)n[o]=r[o](i);return n}},YU=(e,t)=>{const n=Tl.createTransformer(t),r=Y1(e),i=Y1(t);return r.numVars===i.numVars&&r.numColors===i.numColors&&r.numNumbers>=i.numNumbers?hl(QU(r.values,i.values),n):KU(e,t)},Vg=(e,t,n)=>{const r=t-e;return r===0?1:(n-e)/r},p9=(e,t)=>n=>Wt(e,t,n);function kAe(e){return typeof e=="number"?p9:typeof e=="string"?Mr.test(e)?VU:YU:Array.isArray(e)?QU:typeof e=="object"?AAe:p9}function PAe(e,t,n){const r=[],i=n||kAe(e[0]),o=e.length-1;for(let s=0;st[0];e[0]>e[o-1]&&(e=[...e].reverse(),t=[...t].reverse());const s=PAe(t,r,i),a=s.length,l=c=>{let u=0;if(a>1)for(;ul(El(e[0],e[o-1],c)):l}function IAe(e,t){const n=e[e.length-1];for(let r=1;r<=t;r++){const i=Vg(0,t,r);e.push(Wt(n,1,i))}}function MAe(e){const t=[0];return IAe(t,e.length-1),t}function RAe(e,t){return e.map(n=>n*t)}function OAe(e,t){return e.map(()=>t||FU).splice(0,e.length-1)}function Z1({duration:e=300,keyframes:t,times:n,ease:r="easeInOut"}){const i=pAe(r)?r.map(f9):f9(r),o={done:!1,value:t[0]},s=RAe(n&&n.length===t.length?n:MAe(t),e),a=ZU(s,t,{ease:Array.isArray(i)?i:OAe(t,i)});return{calculatedDuration:e,next:l=>(o.value=a(l),o.done=l>=e,o)}}function JU(e,t){return t?e*(1e3/t):0}const $Ae=5;function eG(e,t,n){const r=Math.max(t-$Ae,0);return JU(n-e(r),t-r)}const qw=.001,NAe=.01,g9=10,FAe=.05,DAe=1;function LAe({duration:e=800,bounce:t=.25,velocity:n=0,mass:r=1}){let i,o;oAe(e<=pl(g9));let s=1-t;s=El(FAe,DAe,s),e=El(NAe,g9,ra(e)),s<1?(i=c=>{const u=c*s,d=u*e,f=u-n,h=N3(c,s),p=Math.exp(-d);return qw-f/h*p},o=c=>{const d=c*s*e,f=d*n+n,h=Math.pow(s,2)*Math.pow(c,2)*e,p=Math.exp(-d),m=N3(Math.pow(c,2),s);return(-i(c)+qw>0?-1:1)*((f-h)*p)/m}):(i=c=>{const u=Math.exp(-c*e),d=(c-n)*e+1;return-qw+u*d},o=c=>{const u=Math.exp(-c*e),d=(n-c)*(e*e);return u*d});const a=5/e,l=zAe(i,o,a);if(e=pl(e),isNaN(l))return{stiffness:100,damping:10,duration:e};{const c=Math.pow(l,2)*r;return{stiffness:c,damping:s*2*Math.sqrt(r*c),duration:e}}}const BAe=12;function zAe(e,t,n){let r=n;for(let i=1;ie[n]!==void 0)}function UAe(e){let t={velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1,...e};if(!m9(e,VAe)&&m9(e,jAe)){const n=LAe(e);t={...t,...n,velocity:0,mass:1},t.isResolvedFromDuration=!0}return t}function tG({keyframes:e,restDelta:t,restSpeed:n,...r}){const i=e[0],o=e[e.length-1],s={done:!1,value:i},{stiffness:a,damping:l,mass:c,velocity:u,duration:d,isResolvedFromDuration:f}=UAe(r),h=u?-ra(u):0,p=l/(2*Math.sqrt(a*c)),m=o-i,_=ra(Math.sqrt(a/c)),v=Math.abs(m)<5;n||(n=v?.01:2),t||(t=v?.005:.5);let y;if(p<1){const g=N3(_,p);y=b=>{const S=Math.exp(-p*_*b);return o-S*((h+p*_*m)/g*Math.sin(g*b)+m*Math.cos(g*b))}}else if(p===1)y=g=>o-Math.exp(-_*g)*(m+(h+_*m)*g);else{const g=_*Math.sqrt(p*p-1);y=b=>{const S=Math.exp(-p*_*b),w=Math.min(g*b,300);return o-S*((h+p*_*m)*Math.sinh(w)+g*m*Math.cosh(w))/g}}return{calculatedDuration:f&&d||null,next:g=>{const b=y(g);if(f)s.done=g>=d;else{let S=h;g!==0&&(p<1?S=eG(y,g,b):S=0);const w=Math.abs(S)<=n,C=Math.abs(o-b)<=t;s.done=w&&C}return s.value=s.done?o:b,s}}}function y9({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:o=500,modifyTarget:s,min:a,max:l,restDelta:c=.5,restSpeed:u}){const d=e[0],f={done:!1,value:d},h=x=>a!==void 0&&xl,p=x=>a===void 0?l:l===void 0||Math.abs(a-x)-m*Math.exp(-x/r),g=x=>v+y(x),b=x=>{const k=y(x),A=g(x);f.done=Math.abs(k)<=c,f.value=f.done?v:A};let S,w;const C=x=>{h(f.value)&&(S=x,w=tG({keyframes:[f.value,p(f.value)],velocity:eG(g,x,f.value),damping:i,stiffness:o,restDelta:c,restSpeed:u}))};return C(0),{calculatedDuration:null,next:x=>{let k=!1;return!w&&S===void 0&&(k=!0,b(x),C(x)),S!==void 0&&x>S?w.next(x-S):(!k&&b(x),f)}}}const GAe=e=>{const t=({timestamp:n})=>e(n);return{start:()=>Pt.update(t,!0),stop:()=>pa(t),now:()=>$n.isProcessing?$n.timestamp:performance.now()}},v9=2e4;function b9(e){let t=0;const n=50;let r=e.next(t);for(;!r.done&&t=v9?1/0:t}const HAe={decay:y9,inertia:y9,tween:Z1,keyframes:Z1,spring:tG};function J1({autoplay:e=!0,delay:t=0,driver:n=GAe,keyframes:r,type:i="keyframes",repeat:o=0,repeatDelay:s=0,repeatType:a="loop",onPlay:l,onStop:c,onComplete:u,onUpdate:d,...f}){let h=1,p=!1,m,_;const v=()=>{_=new Promise(z=>{m=z})};v();let y;const g=HAe[i]||Z1;let b;g!==Z1&&typeof r[0]!="number"&&(b=ZU([0,100],r,{clamp:!1}),r=[0,100]);const S=g({...f,keyframes:r});let w;a==="mirror"&&(w=g({...f,keyframes:[...r].reverse(),velocity:-(f.velocity||0)}));let C="idle",x=null,k=null,A=null;S.calculatedDuration===null&&o&&(S.calculatedDuration=b9(S));const{calculatedDuration:R}=S;let L=1/0,M=1/0;R!==null&&(L=R+s,M=L*(o+1)-s);let E=0;const P=z=>{if(k===null)return;h>0&&(k=Math.min(k,z)),h<0&&(k=Math.min(z-M/h,k)),x!==null?E=x:E=Math.round(z-k)*h;const V=E-t*(h>=0?1:-1),H=h>=0?V<0:V>M;E=Math.max(V,0),C==="finished"&&x===null&&(E=M);let X=E,te=S;if(o){const Z=E/L;let oe=Math.floor(Z),be=Z%1;!be&&Z>=1&&(be=1),be===1&&oe--,oe=Math.min(oe,o+1);const Me=!!(oe%2);Me&&(a==="reverse"?(be=1-be,s&&(be-=s/L)):a==="mirror"&&(te=w));let lt=El(0,1,be);E>M&&(lt=a==="reverse"&&Me?1:0),X=lt*L}const ee=H?{done:!1,value:r[0]}:te.next(X);b&&(ee.value=b(ee.value));let{done:j}=ee;!H&&R!==null&&(j=h>=0?E>=M:E<=0);const q=x===null&&(C==="finished"||C==="running"&&j);return d&&d(ee.value),q&&$(),ee},O=()=>{y&&y.stop(),y=void 0},F=()=>{C="idle",O(),m(),v(),k=A=null},$=()=>{C="finished",u&&u(),O(),m()},D=()=>{if(p)return;y||(y=n(P));const z=y.now();l&&l(),x!==null?k=z-x:(!k||C==="finished")&&(k=z),C==="finished"&&v(),A=k,x=null,C="running",y.start()};e&&D();const N={then(z,V){return _.then(z,V)},get time(){return ra(E)},set time(z){z=pl(z),E=z,x!==null||!y||h===0?x=z:k=y.now()-z/h},get duration(){const z=S.calculatedDuration===null?b9(S):S.calculatedDuration;return ra(z)},get speed(){return h},set speed(z){z===h||!y||(h=z,N.time=ra(E))},get state(){return C},play:D,pause:()=>{C="paused",x=E},stop:()=>{p=!0,C!=="idle"&&(C="idle",c&&c(),F())},cancel:()=>{A!==null&&P(A),F()},complete:()=>{C="finished"},sample:z=>(k=0,P(z))};return N}function WAe(e){let t;return()=>(t===void 0&&(t=e()),t)}const qAe=WAe(()=>Object.hasOwnProperty.call(Element.prototype,"animate")),KAe=new Set(["opacity","clipPath","filter","transform","backgroundColor"]),py=10,XAe=2e4,QAe=(e,t)=>t.type==="spring"||e==="backgroundColor"||!RU(t.ease);function YAe(e,t,{onUpdate:n,onComplete:r,...i}){if(!(qAe()&&KAe.has(t)&&!i.repeatDelay&&i.repeatType!=="mirror"&&i.damping!==0&&i.type!=="inertia"))return!1;let s=!1,a,l;const c=()=>{l=new Promise(y=>{a=y})};c();let{keyframes:u,duration:d=300,ease:f,times:h}=i;if(QAe(t,i)){const y=J1({...i,repeat:0,delay:0});let g={done:!1,value:u[0]};const b=[];let S=0;for(;!g.done&&Sp.cancel(),_=()=>{Pt.update(m),a(),c()};return p.onfinish=()=>{e.set(lAe(u,i)),r&&r(),_()},{then(y,g){return l.then(y,g)},attachTimeline(y){return p.timeline=y,p.onfinish=null,tn},get time(){return ra(p.currentTime||0)},set time(y){p.currentTime=pl(y)},get speed(){return p.playbackRate},set speed(y){p.playbackRate=y},get duration(){return ra(d)},play:()=>{s||(p.play(),pa(m))},pause:()=>p.pause(),stop:()=>{if(s=!0,p.playState==="idle")return;const{currentTime:y}=p;if(y){const g=J1({...i,autoplay:!1});e.setWithVelocity(g.sample(y-py).value,g.sample(y).value,py)}_()},complete:()=>p.finish(),cancel:_}}function ZAe({keyframes:e,delay:t,onUpdate:n,onComplete:r}){const i=()=>(n&&n(e[e.length-1]),r&&r(),{time:0,speed:1,duration:0,play:tn,pause:tn,stop:tn,then:o=>(o(),Promise.resolve()),cancel:tn,complete:tn});return t?J1({keyframes:[0,1],duration:0,delay:t,onComplete:i}):i()}const JAe={type:"spring",stiffness:500,damping:25,restSpeed:10},eke=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),tke={type:"keyframes",duration:.8},nke={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},rke=(e,{keyframes:t})=>t.length>2?tke:du.has(e)?e.startsWith("scale")?eke(t[1]):JAe:nke,F3=(e,t)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&(Tl.test(t)||t==="0")&&!t.startsWith("url(")),ike=new Set(["brightness","contrast","saturate","opacity"]);function oke(e){const[t,n]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[r]=n.match($S)||[];if(!r)return e;const i=n.replace(r,"");let o=ike.has(t)?1:0;return r!==n&&(o*=100),t+"("+o+i+")"}const ske=/([a-z-]*)\(.*?\)/g,D3={...Tl,getAnimatableNone:e=>{const t=e.match(ske);return t?t.map(oke).join(" "):e}},ake={...gU,color:Mr,backgroundColor:Mr,outlineColor:Mr,fill:Mr,stroke:Mr,borderColor:Mr,borderTopColor:Mr,borderRightColor:Mr,borderBottomColor:Mr,borderLeftColor:Mr,filter:D3,WebkitFilter:D3},CA=e=>ake[e];function nG(e,t){let n=CA(e);return n!==D3&&(n=Tl),n.getAnimatableNone?n.getAnimatableNone(t):void 0}const rG=e=>/^0[^.\s]+$/.test(e);function lke(e){if(typeof e=="number")return e===0;if(e!==null)return e==="none"||e==="0"||rG(e)}function cke(e,t,n,r){const i=F3(t,n);let o;Array.isArray(n)?o=[...n]:o=[null,n];const s=r.from!==void 0?r.from:e.get();let a;const l=[];for(let c=0;ci=>{const o=EA(r,e)||{},s=o.delay||r.delay||0;let{elapsed:a=0}=r;a=a-pl(s);const l=cke(t,e,n,o),c=l[0],u=l[l.length-1],d=F3(e,c),f=F3(e,u);let h={keyframes:l,velocity:t.getVelocity(),ease:"easeOut",...o,delay:-a,onUpdate:p=>{t.set(p),o.onUpdate&&o.onUpdate(p)},onComplete:()=>{i(),o.onComplete&&o.onComplete()}};if(uke(o)||(h={...h,...rke(e,h)}),h.duration&&(h.duration=pl(h.duration)),h.repeatDelay&&(h.repeatDelay=pl(h.repeatDelay)),!d||!f||sAe.current||o.type===!1)return ZAe(h);if(t.owner&&t.owner.current instanceof HTMLElement&&!t.owner.getProps().onUpdate){const p=YAe(t,e,h);if(p)return p}return J1(h)};function eb(e){return!!(ri(e)&&e.add)}const iG=e=>/^\-?\d*\.?\d+$/.test(e);function AA(e,t){e.indexOf(t)===-1&&e.push(t)}function kA(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}class PA{constructor(){this.subscriptions=[]}add(t){return AA(this.subscriptions,t),()=>kA(this.subscriptions,t)}notify(t,n,r){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](t,n,r);else for(let o=0;o!isNaN(parseFloat(e));class fke{constructor(t,n={}){this.version="10.16.15",this.timeDelta=0,this.lastUpdated=0,this.canTrackVelocity=!1,this.events={},this.updateAndNotify=(r,i=!0)=>{this.prev=this.current,this.current=r;const{delta:o,timestamp:s}=$n;this.lastUpdated!==s&&(this.timeDelta=o,this.lastUpdated=s,Pt.postRender(this.scheduleVelocityCheck)),this.prev!==this.current&&this.events.change&&this.events.change.notify(this.current),this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()),i&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.scheduleVelocityCheck=()=>Pt.postRender(this.velocityCheck),this.velocityCheck=({timestamp:r})=>{r!==this.lastUpdated&&(this.prev=this.current,this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=dke(this.current),this.owner=n.owner}onChange(t){return this.on("change",t)}on(t,n){this.events[t]||(this.events[t]=new PA);const r=this.events[t].add(n);return t==="change"?()=>{r(),Pt.read(()=>{this.events.change.getSize()||this.stop()})}:r}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,n){this.passiveEffect=t,this.stopPassiveEffect=n}set(t,n=!0){!n||!this.passiveEffect?this.updateAndNotify(t,n):this.passiveEffect(t,this.updateAndNotify)}setWithVelocity(t,n,r){this.set(n),this.prev=t,this.timeDelta=r}jump(t){this.updateAndNotify(t),this.prev=t,this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return this.current}getPrevious(){return this.prev}getVelocity(){return this.canTrackVelocity?JU(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0}start(t){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=t(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function _f(e,t){return new fke(e,t)}const oG=e=>t=>t.test(e),hke={test:e=>e==="auto",parse:e=>e},sG=[fu,Pe,bs,Na,STe,_Te,hke],Ch=e=>sG.find(oG(e)),pke=[...sG,Mr,Tl],gke=e=>pke.find(oG(e));function mke(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,_f(n))}function yke(e,t){const n=FS(e,t);let{transitionEnd:r={},transition:i={},...o}=n?e.makeTargetAnimatable(n,!1):{};o={...o,...r};for(const s in o){const a=NTe(o[s]);mke(e,s,a)}}function vke(e,t,n){var r,i;const o=Object.keys(t).filter(a=>!e.hasValue(a)),s=o.length;if(s)for(let a=0;al.remove(d))),c.push(v)}return s&&Promise.all(c).then(()=>{s&&yke(e,s)}),c}function L3(e,t,n={}){const r=FS(e,t,n.custom);let{transition:i=e.getDefaultTransition()||{}}=r||{};n.transitionOverride&&(i=n.transitionOverride);const o=r?()=>Promise.all(aG(e,r,n)):()=>Promise.resolve(),s=e.variantChildren&&e.variantChildren.size?(l=0)=>{const{delayChildren:c=0,staggerChildren:u,staggerDirection:d}=i;return wke(e,t,c+l,u,d,n)}:()=>Promise.resolve(),{when:a}=i;if(a){const[l,c]=a==="beforeChildren"?[o,s]:[s,o];return l().then(()=>c())}else return Promise.all([o(),s(n.delay)])}function wke(e,t,n=0,r=0,i=1,o){const s=[],a=(e.variantChildren.size-1)*r,l=i===1?(c=0)=>c*r:(c=0)=>a-c*r;return Array.from(e.variantChildren).sort(Cke).forEach((c,u)=>{c.notify("AnimationStart",t),s.push(L3(c,t,{...o,delay:n+l(u)}).then(()=>c.notify("AnimationComplete",t)))}),Promise.all(s)}function Cke(e,t){return e.sortNodePosition(t)}function Eke(e,t,n={}){e.notify("AnimationStart",t);let r;if(Array.isArray(t)){const i=t.map(o=>L3(e,o,n));r=Promise.all(i)}else if(typeof t=="string")r=L3(e,t,n);else{const i=typeof t=="function"?FS(e,t,n.custom):t;r=Promise.all(aG(e,i,n))}return r.then(()=>e.notify("AnimationComplete",t))}const Tke=[...uA].reverse(),Ake=uA.length;function kke(e){return t=>Promise.all(t.map(({animation:n,options:r})=>Eke(e,n,r)))}function Pke(e){let t=kke(e);const n=Mke();let r=!0;const i=(l,c)=>{const u=FS(e,c);if(u){const{transition:d,transitionEnd:f,...h}=u;l={...l,...h,...f}}return l};function o(l){t=l(e)}function s(l,c){const u=e.getProps(),d=e.getVariantContext(!0)||{},f=[],h=new Set;let p={},m=1/0;for(let v=0;vm&&S;const A=Array.isArray(b)?b:[b];let R=A.reduce(i,{});w===!1&&(R={});const{prevResolvedValues:L={}}=g,M={...L,...R},E=P=>{k=!0,h.delete(P),g.needsAnimating[P]=!0};for(const P in M){const O=R[P],F=L[P];p.hasOwnProperty(P)||(O!==F?Q1(O)&&Q1(F)?!IU(O,F)||x?E(P):g.protectedKeys[P]=!0:O!==void 0?E(P):h.add(P):O!==void 0&&h.has(P)?E(P):g.protectedKeys[P]=!0)}g.prevProp=b,g.prevResolvedValues=R,g.isActive&&(p={...p,...R}),r&&e.blockInitialAnimation&&(k=!1),k&&!C&&f.push(...A.map(P=>({animation:P,options:{type:y,...l}})))}if(h.size){const v={};h.forEach(y=>{const g=e.getBaseTarget(y);g!==void 0&&(v[y]=g)}),f.push({animation:v})}let _=!!f.length;return r&&(u.initial===!1||u.initial===u.animate)&&!e.manuallyAnimateOnMount&&(_=!1),r=!1,_?t(f):Promise.resolve()}function a(l,c,u){var d;if(n[l].isActive===c)return Promise.resolve();(d=e.variantChildren)===null||d===void 0||d.forEach(h=>{var p;return(p=h.animationState)===null||p===void 0?void 0:p.setActive(l,c)}),n[l].isActive=c;const f=s(u,l);for(const h in n)n[h].protectedKeys={};return f}return{animateChanges:s,setActive:a,setAnimateFunction:o,getState:()=>n}}function Ike(e,t){return typeof t=="string"?t!==e:Array.isArray(t)?!IU(t,e):!1}function Zl(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function Mke(){return{animate:Zl(!0),whileInView:Zl(),whileHover:Zl(),whileTap:Zl(),whileDrag:Zl(),whileFocus:Zl(),exit:Zl()}}class Rke extends Ll{constructor(t){super(t),t.animationState||(t.animationState=Pke(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();this.unmount(),RS(t)&&(this.unmount=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:n}=this.node.prevProps||{};t!==n&&this.updateAnimationControlsSubscription()}unmount(){}}let Oke=0;class $ke extends Ll{constructor(){super(...arguments),this.id=Oke++}update(){if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:n,custom:r}=this.node.presenceContext,{isPresent:i}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===i)return;const o=this.node.animationState.setActive("exit",!t,{custom:r??this.node.getProps().custom});n&&!t&&o.then(()=>n(this.id))}mount(){const{register:t}=this.node.presenceContext||{};t&&(this.unmount=t(this.id))}unmount(){}}const Nke={animation:{Feature:Rke},exit:{Feature:$ke}},_9=(e,t)=>Math.abs(e-t);function Fke(e,t){const n=_9(e.x,t.x),r=_9(e.y,t.y);return Math.sqrt(n**2+r**2)}class lG{constructor(t,n,{transformPagePoint:r,contextWindow:i}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const u=Xw(this.lastMoveEventInfo,this.history),d=this.startEvent!==null,f=Fke(u.offset,{x:0,y:0})>=3;if(!d&&!f)return;const{point:h}=u,{timestamp:p}=$n;this.history.push({...h,timestamp:p});const{onStart:m,onMove:_}=this.handlers;d||(m&&m(this.lastMoveEvent,u),this.startEvent=this.lastMoveEvent),_&&_(this.lastMoveEvent,u)},this.handlePointerMove=(u,d)=>{this.lastMoveEvent=u,this.lastMoveEventInfo=Kw(d,this.transformPagePoint),Pt.update(this.updatePoint,!0)},this.handlePointerUp=(u,d)=>{if(this.end(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const{onEnd:f,onSessionEnd:h}=this.handlers,p=Xw(u.type==="pointercancel"?this.lastMoveEventInfo:Kw(d,this.transformPagePoint),this.history);this.startEvent&&f&&f(u,p),h&&h(u,p)},!EU(t))return;this.handlers=n,this.transformPagePoint=r,this.contextWindow=i||window;const o=NS(t),s=Kw(o,this.transformPagePoint),{point:a}=s,{timestamp:l}=$n;this.history=[{...a,timestamp:l}];const{onSessionStart:c}=n;c&&c(t,Xw(s,this.history)),this.removeListeners=hl(na(this.contextWindow,"pointermove",this.handlePointerMove),na(this.contextWindow,"pointerup",this.handlePointerUp),na(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),pa(this.updatePoint)}}function Kw(e,t){return t?{point:t(e.point)}:e}function S9(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Xw({point:e},t){return{point:e,delta:S9(e,cG(t)),offset:S9(e,Dke(t)),velocity:Lke(t,.1)}}function Dke(e){return e[0]}function cG(e){return e[e.length-1]}function Lke(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const i=cG(e);for(;n>=0&&(r=e[n],!(i.timestamp-r.timestamp>pl(t)));)n--;if(!r)return{x:0,y:0};const o=ra(i.timestamp-r.timestamp);if(o===0)return{x:0,y:0};const s={x:(i.x-r.x)/o,y:(i.y-r.y)/o};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}function Ai(e){return e.max-e.min}function B3(e,t=0,n=.01){return Math.abs(e-t)<=n}function x9(e,t,n,r=.5){e.origin=r,e.originPoint=Wt(t.min,t.max,e.origin),e.scale=Ai(n)/Ai(t),(B3(e.scale,1,1e-4)||isNaN(e.scale))&&(e.scale=1),e.translate=Wt(n.min,n.max,e.origin)-e.originPoint,(B3(e.translate)||isNaN(e.translate))&&(e.translate=0)}function Ap(e,t,n,r){x9(e.x,t.x,n.x,r?r.originX:void 0),x9(e.y,t.y,n.y,r?r.originY:void 0)}function w9(e,t,n){e.min=n.min+t.min,e.max=e.min+Ai(t)}function Bke(e,t,n){w9(e.x,t.x,n.x),w9(e.y,t.y,n.y)}function C9(e,t,n){e.min=t.min-n.min,e.max=e.min+Ai(t)}function kp(e,t,n){C9(e.x,t.x,n.x),C9(e.y,t.y,n.y)}function zke(e,{min:t,max:n},r){return t!==void 0&&en&&(e=r?Wt(n,e,r.max):Math.min(e,n)),e}function E9(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function jke(e,{top:t,left:n,bottom:r,right:i}){return{x:E9(e.x,n,i),y:E9(e.y,t,r)}}function T9(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.minr?n=Vg(t.min,t.max-r,e.min):r>i&&(n=Vg(e.min,e.max-i,t.min)),El(0,1,n)}function Gke(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}const z3=.35;function Hke(e=z3){return e===!1?e=0:e===!0&&(e=z3),{x:A9(e,"left","right"),y:A9(e,"top","bottom")}}function A9(e,t,n){return{min:k9(e,t),max:k9(e,n)}}function k9(e,t){return typeof e=="number"?e:e[t]||0}const P9=()=>({translate:0,scale:1,origin:0,originPoint:0}),vd=()=>({x:P9(),y:P9()}),I9=()=>({min:0,max:0}),gn=()=>({x:I9(),y:I9()});function Yo(e){return[e("x"),e("y")]}function uG({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function Wke({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function qke(e,t){if(!t)return e;const n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function Qw(e){return e===void 0||e===1}function j3({scale:e,scaleX:t,scaleY:n}){return!Qw(e)||!Qw(t)||!Qw(n)}function cc(e){return j3(e)||dG(e)||e.z||e.rotate||e.rotateX||e.rotateY}function dG(e){return M9(e.x)||M9(e.y)}function M9(e){return e&&e!=="0%"}function tb(e,t,n){const r=e-n,i=t*r;return n+i}function R9(e,t,n,r,i){return i!==void 0&&(e=tb(e,i,r)),tb(e,n,r)+t}function V3(e,t=0,n=1,r,i){e.min=R9(e.min,t,n,r,i),e.max=R9(e.max,t,n,r,i)}function fG(e,{x:t,y:n}){V3(e.x,t.translate,t.scale,t.originPoint),V3(e.y,n.translate,n.scale,n.originPoint)}function Kke(e,t,n,r=!1){const i=n.length;if(!i)return;t.x=t.y=1;let o,s;for(let a=0;a1.0000000000001||e<.999999999999?e:1}function Va(e,t){e.min=e.min+t,e.max=e.max+t}function $9(e,t,[n,r,i]){const o=t[i]!==void 0?t[i]:.5,s=Wt(e.min,e.max,o);V3(e,t[n],t[r],s,t.scale)}const Xke=["x","scaleX","originX"],Qke=["y","scaleY","originY"];function bd(e,t){$9(e.x,t,Xke),$9(e.y,t,Qke)}function hG(e,t){return uG(qke(e.getBoundingClientRect(),t))}function Yke(e,t,n){const r=hG(e,n),{scroll:i}=t;return i&&(Va(r.x,i.offset.x),Va(r.y,i.offset.y)),r}const pG=({current:e})=>e?e.ownerDocument.defaultView:null,Zke=new WeakMap;class Jke{constructor(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=gn(),this.visualElement=t}start(t,{snapToCursor:n=!1}={}){const{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;const i=l=>{this.stopAnimation(),n&&this.snapToCursor(NS(l,"page").point)},o=(l,c)=>{const{drag:u,dragPropagation:d,onDragStart:f}=this.getProps();if(u&&!d&&(this.openGlobalLock&&this.openGlobalLock(),this.openGlobalLock=AU(u),!this.openGlobalLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),Yo(p=>{let m=this.getAxisMotionValue(p).get()||0;if(bs.test(m)){const{projection:_}=this.visualElement;if(_&&_.layout){const v=_.layout.layoutBox[p];v&&(m=Ai(v)*(parseFloat(m)/100))}}this.originPoint[p]=m}),f&&Pt.update(()=>f(l,c),!1,!0);const{animationState:h}=this.visualElement;h&&h.setActive("whileDrag",!0)},s=(l,c)=>{const{dragPropagation:u,dragDirectionLock:d,onDirectionLock:f,onDrag:h}=this.getProps();if(!u&&!this.openGlobalLock)return;const{offset:p}=c;if(d&&this.currentDirection===null){this.currentDirection=ePe(p),this.currentDirection!==null&&f&&f(this.currentDirection);return}this.updateAxis("x",c.point,p),this.updateAxis("y",c.point,p),this.visualElement.render(),h&&h(l,c)},a=(l,c)=>this.stop(l,c);this.panSession=new lG(t,{onSessionStart:i,onStart:o,onMove:s,onSessionEnd:a},{transformPagePoint:this.visualElement.getTransformPagePoint(),contextWindow:pG(this.visualElement)})}stop(t,n){const r=this.isDragging;if(this.cancel(),!r)return;const{velocity:i}=n;this.startAnimation(i);const{onDragEnd:o}=this.getProps();o&&Pt.update(()=>o(t,n))}cancel(){this.isDragging=!1;const{projection:t,animationState:n}=this.visualElement;t&&(t.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:r}=this.getProps();!r&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(t,n,r){const{drag:i}=this.getProps();if(!r||!gy(t,i,this.currentDirection))return;const o=this.getAxisMotionValue(t);let s=this.originPoint[t]+r[t];this.constraints&&this.constraints[t]&&(s=zke(s,this.constraints[t],this.elastic[t])),o.set(s)}resolveConstraints(){var t;const{dragConstraints:n,dragElastic:r}=this.getProps(),i=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(t=this.visualElement.projection)===null||t===void 0?void 0:t.layout,o=this.constraints;n&&md(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):n&&i?this.constraints=jke(i.layoutBox,n):this.constraints=!1,this.elastic=Hke(r),o!==this.constraints&&i&&this.constraints&&!this.hasMutatedConstraints&&Yo(s=>{this.getAxisMotionValue(s)&&(this.constraints[s]=Gke(i.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:n}=this.getProps();if(!t||!md(t))return!1;const r=t.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const o=Yke(r,i.root,this.visualElement.getTransformPagePoint());let s=Vke(i.layout.layoutBox,o);if(n){const a=n(Wke(s));this.hasMutatedConstraints=!!a,a&&(s=uG(a))}return s}startAnimation(t){const{drag:n,dragMomentum:r,dragElastic:i,dragTransition:o,dragSnapToOrigin:s,onDragTransitionEnd:a}=this.getProps(),l=this.constraints||{},c=Yo(u=>{if(!gy(u,n,this.currentDirection))return;let d=l&&l[u]||{};s&&(d={min:0,max:0});const f=i?200:1e6,h=i?40:1e7,p={type:"inertia",velocity:r?t[u]:0,bounceStiffness:f,bounceDamping:h,timeConstant:750,restDelta:1,restSpeed:10,...o,...d};return this.startAxisValueAnimation(u,p)});return Promise.all(c).then(a)}startAxisValueAnimation(t,n){const r=this.getAxisMotionValue(t);return r.start(TA(t,r,0,n))}stopAnimation(){Yo(t=>this.getAxisMotionValue(t).stop())}getAxisMotionValue(t){const n="_drag"+t.toUpperCase(),r=this.visualElement.getProps(),i=r[n];return i||this.visualElement.getValue(t,(r.initial?r.initial[t]:void 0)||0)}snapToCursor(t){Yo(n=>{const{drag:r}=this.getProps();if(!gy(n,r,this.currentDirection))return;const{projection:i}=this.visualElement,o=this.getAxisMotionValue(n);if(i&&i.layout){const{min:s,max:a}=i.layout.layoutBox[n];o.set(t[n]-Wt(s,a,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:n}=this.getProps(),{projection:r}=this.visualElement;if(!md(n)||!r||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};Yo(s=>{const a=this.getAxisMotionValue(s);if(a){const l=a.get();i[s]=Uke({min:l,max:l},this.constraints[s])}});const{transformTemplate:o}=this.visualElement.getProps();this.visualElement.current.style.transform=o?o({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.resolveConstraints(),Yo(s=>{if(!gy(s,t,null))return;const a=this.getAxisMotionValue(s),{min:l,max:c}=this.constraints[s];a.set(Wt(l,c,i[s]))})}addListeners(){if(!this.visualElement.current)return;Zke.set(this.visualElement,this);const t=this.visualElement.current,n=na(t,"pointerdown",l=>{const{drag:c,dragListener:u=!0}=this.getProps();c&&u&&this.start(l)}),r=()=>{const{dragConstraints:l}=this.getProps();md(l)&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,o=i.addEventListener("measure",r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),r();const s=Ys(window,"resize",()=>this.scalePositionWithinConstraints()),a=i.addEventListener("didUpdate",({delta:l,hasLayoutChanged:c})=>{this.isDragging&&c&&(Yo(u=>{const d=this.getAxisMotionValue(u);d&&(this.originPoint[u]+=l[u].translate,d.set(d.get()+l[u].translate))}),this.visualElement.render())});return()=>{s(),n(),o(),a&&a()}}getProps(){const t=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:r=!1,dragPropagation:i=!1,dragConstraints:o=!1,dragElastic:s=z3,dragMomentum:a=!0}=t;return{...t,drag:n,dragDirectionLock:r,dragPropagation:i,dragConstraints:o,dragElastic:s,dragMomentum:a}}}function gy(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function ePe(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}class tPe extends Ll{constructor(t){super(t),this.removeGroupControls=tn,this.removeListeners=tn,this.controls=new Jke(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||tn}unmount(){this.removeGroupControls(),this.removeListeners()}}const N9=e=>(t,n)=>{e&&Pt.update(()=>e(t,n))};class nPe extends Ll{constructor(){super(...arguments),this.removePointerDownListener=tn}onPointerDown(t){this.session=new lG(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:pG(this.node)})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:n,onPan:r,onPanEnd:i}=this.node.getProps();return{onSessionStart:N9(t),onStart:N9(n),onMove:r,onEnd:(o,s)=>{delete this.session,i&&Pt.update(()=>i(o,s))}}}mount(){this.removePointerDownListener=na(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}function rPe(){const e=I.useContext(Xm);if(e===null)return[!0,null];const{isPresent:t,onExitComplete:n,register:r}=e,i=I.useId();return I.useEffect(()=>r(i),[]),!t&&n?[!1,()=>n&&n(i)]:[!0]}function iPe(){return oPe(I.useContext(Xm))}function oPe(e){return e===null?!0:e.isPresent}const _v={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function F9(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}const Eh={correct:(e,t)=>{if(!t.target)return e;if(typeof e=="string")if(Pe.test(e))e=parseFloat(e);else return e;const n=F9(e,t.target.x),r=F9(e,t.target.y);return`${n}% ${r}%`}},sPe={correct:(e,{treeScale:t,projectionDelta:n})=>{const r=e,i=Tl.parse(e);if(i.length>5)return r;const o=Tl.createTransformer(e),s=typeof i[0]!="number"?1:0,a=n.x.scale*t.x,l=n.y.scale*t.y;i[0+s]/=a,i[1+s]/=l;const c=Wt(a,l,.5);return typeof i[2+s]=="number"&&(i[2+s]/=c),typeof i[3+s]=="number"&&(i[3+s]/=c),o(i)}};class aPe extends Q.Component{componentDidMount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r,layoutId:i}=this.props,{projection:o}=t;hTe(lPe),o&&(n.group&&n.group.add(o),r&&r.register&&i&&r.register(o),o.root.didUpdate(),o.addEventListener("animationComplete",()=>{this.safeToRemove()}),o.setOptions({...o.options,onExitComplete:()=>this.safeToRemove()})),_v.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:n,visualElement:r,drag:i,isPresent:o}=this.props,s=r.projection;return s&&(s.isPresent=o,i||t.layoutDependency!==n||n===void 0?s.willUpdate():this.safeToRemove(),t.isPresent!==o&&(o?s.promote():s.relegate()||Pt.postRender(()=>{const a=s.getStack();(!a||!a.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:t}=this.props.visualElement;t&&(t.root.didUpdate(),queueMicrotask(()=>{!t.currentAnimation&&t.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r}=this.props,{projection:i}=t;i&&(i.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(i),r&&r.deregister&&r.deregister(i))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function gG(e){const[t,n]=rPe(),r=I.useContext(fA);return Q.createElement(aPe,{...e,layoutGroup:r,switchLayoutGroup:I.useContext(uU),isPresent:t,safeToRemove:n})}const lPe={borderRadius:{...Eh,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:Eh,borderTopRightRadius:Eh,borderBottomLeftRadius:Eh,borderBottomRightRadius:Eh,boxShadow:sPe},mG=["TopLeft","TopRight","BottomLeft","BottomRight"],cPe=mG.length,D9=e=>typeof e=="string"?parseFloat(e):e,L9=e=>typeof e=="number"||Pe.test(e);function uPe(e,t,n,r,i,o){i?(e.opacity=Wt(0,n.opacity!==void 0?n.opacity:1,dPe(r)),e.opacityExit=Wt(t.opacity!==void 0?t.opacity:1,0,fPe(r))):o&&(e.opacity=Wt(t.opacity!==void 0?t.opacity:1,n.opacity!==void 0?n.opacity:1,r));for(let s=0;srt?1:n(Vg(e,t,r))}function z9(e,t){e.min=t.min,e.max=t.max}function Li(e,t){z9(e.x,t.x),z9(e.y,t.y)}function j9(e,t,n,r,i){return e-=t,e=tb(e,1/n,r),i!==void 0&&(e=tb(e,1/i,r)),e}function hPe(e,t=0,n=1,r=.5,i,o=e,s=e){if(bs.test(t)&&(t=parseFloat(t),t=Wt(s.min,s.max,t/100)-s.min),typeof t!="number")return;let a=Wt(o.min,o.max,r);e===o&&(a-=t),e.min=j9(e.min,t,n,a,i),e.max=j9(e.max,t,n,a,i)}function V9(e,t,[n,r,i],o,s){hPe(e,t[n],t[r],t[i],t.scale,o,s)}const pPe=["x","scaleX","originX"],gPe=["y","scaleY","originY"];function U9(e,t,n,r){V9(e.x,t,pPe,n?n.x:void 0,r?r.x:void 0),V9(e.y,t,gPe,n?n.y:void 0,r?r.y:void 0)}function G9(e){return e.translate===0&&e.scale===1}function vG(e){return G9(e.x)&&G9(e.y)}function mPe(e,t){return e.x.min===t.x.min&&e.x.max===t.x.max&&e.y.min===t.y.min&&e.y.max===t.y.max}function bG(e,t){return Math.round(e.x.min)===Math.round(t.x.min)&&Math.round(e.x.max)===Math.round(t.x.max)&&Math.round(e.y.min)===Math.round(t.y.min)&&Math.round(e.y.max)===Math.round(t.y.max)}function H9(e){return Ai(e.x)/Ai(e.y)}class yPe{constructor(){this.members=[]}add(t){AA(this.members,t),t.scheduleRender()}remove(t){if(kA(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(t){const n=this.members.findIndex(i=>t===i);if(n===0)return!1;let r;for(let i=n;i>=0;i--){const o=this.members[i];if(o.isPresent!==!1){r=o;break}}return r?(this.promote(r),!0):!1}promote(t,n){const r=this.lead;if(t!==r&&(this.prevLead=r,this.lead=t,t.show(),r)){r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,n&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues),t.root&&t.root.isUpdating&&(t.isLayoutDirty=!0);const{crossfade:i}=t.options;i===!1&&r.hide()}}exitAnimationComplete(){this.members.forEach(t=>{const{options:n,resumingFrom:r}=t;n.onExitComplete&&n.onExitComplete(),r&&r.options.onExitComplete&&r.options.onExitComplete()})}scheduleRender(){this.members.forEach(t=>{t.instance&&t.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function W9(e,t,n){let r="";const i=e.x.translate/t.x,o=e.y.translate/t.y;if((i||o)&&(r=`translate3d(${i}px, ${o}px, 0) `),(t.x!==1||t.y!==1)&&(r+=`scale(${1/t.x}, ${1/t.y}) `),n){const{rotate:l,rotateX:c,rotateY:u}=n;l&&(r+=`rotate(${l}deg) `),c&&(r+=`rotateX(${c}deg) `),u&&(r+=`rotateY(${u}deg) `)}const s=e.x.scale*t.x,a=e.y.scale*t.y;return(s!==1||a!==1)&&(r+=`scale(${s}, ${a})`),r||"none"}const vPe=(e,t)=>e.depth-t.depth;class bPe{constructor(){this.children=[],this.isDirty=!1}add(t){AA(this.children,t),this.isDirty=!0}remove(t){kA(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(vPe),this.isDirty=!1,this.children.forEach(t)}}function _Pe(e,t){const n=performance.now(),r=({timestamp:i})=>{const o=i-n;o>=t&&(pa(r),e(o-t))};return Pt.read(r,!0),()=>pa(r)}function SPe(e){window.MotionDebug&&window.MotionDebug.record(e)}function xPe(e){return e instanceof SVGElement&&e.tagName!=="svg"}function wPe(e,t,n){const r=ri(e)?e:_f(e);return r.start(TA("",r,t,n)),r.animation}const q9=["","X","Y","Z"],CPe={visibility:"hidden"},K9=1e3;let EPe=0;const uc={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0};function _G({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(s={},a=t==null?void 0:t()){this.id=EPe++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,uc.totalNodes=uc.resolvedTargetDeltas=uc.recalculatedProjection=0,this.nodes.forEach(kPe),this.nodes.forEach(OPe),this.nodes.forEach($Pe),this.nodes.forEach(PPe),SPe(uc)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=a?a.root||a:this,this.path=a?[...a.path,a]:[],this.parent=a,this.depth=a?a.depth+1:0;for(let l=0;lthis.root.updateBlockedByResize=!1;e(s,()=>{this.root.updateBlockedByResize=!0,d&&d(),d=_Pe(f,250),_v.hasAnimatedSinceResize&&(_v.hasAnimatedSinceResize=!1,this.nodes.forEach(Q9))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&u&&(l||c)&&this.addEventListener("didUpdate",({delta:d,hasLayoutChanged:f,hasRelativeTargetChanged:h,layout:p})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||u.getDefaultTransition()||BPe,{onLayoutAnimationStart:_,onLayoutAnimationComplete:v}=u.getProps(),y=!this.targetLayout||!bG(this.targetLayout,p)||h,g=!f&&h;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||g||f&&(y||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(d,g);const b={...EA(m,"layout"),onPlay:_,onComplete:v};(u.shouldReduceMotion||this.options.layoutRoot)&&(b.delay=0,b.type=!1),this.startAnimation(b)}else f||Q9(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=p})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,pa(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(NPe),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let u=0;uthis.update()))}clearAllSnapshots(){this.nodes.forEach(IPe),this.sharedNodes.forEach(FPe)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,Pt.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){Pt.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let l=0;l{const S=b/1e3;Y9(d.x,s.x,S),Y9(d.y,s.y,S),this.setTargetDelta(d),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(kp(f,this.layout.layoutBox,this.relativeParent.layout.layoutBox),DPe(this.relativeTarget,this.relativeTargetOrigin,f,S),g&&mPe(this.relativeTarget,g)&&(this.isProjectionDirty=!1),g||(g=gn()),Li(g,this.relativeTarget)),m&&(this.animationValues=u,uPe(u,c,this.latestValues,S,y,v)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=S},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&(pa(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Pt.update(()=>{_v.hasAnimatedSinceResize=!0,this.currentAnimation=wPe(0,K9,{...s,onUpdate:a=>{this.mixTargetDelta(a),s.onUpdate&&s.onUpdate(a)},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(K9),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:a,target:l,layout:c,latestValues:u}=s;if(!(!a||!l||!c)){if(this!==s&&this.layout&&c&&SG(this.options.animationType,this.layout.layoutBox,c.layoutBox)){l=this.target||gn();const d=Ai(this.layout.layoutBox.x);l.x.min=s.target.x.min,l.x.max=l.x.min+d;const f=Ai(this.layout.layoutBox.y);l.y.min=s.target.y.min,l.y.max=l.y.min+f}Li(a,l),bd(a,u),Ap(this.projectionDeltaWithTransform,this.layoutCorrected,a,u)}}registerSharedNode(s,a){this.sharedNodes.has(s)||this.sharedNodes.set(s,new yPe),this.sharedNodes.get(s).add(a);const c=a.options.initialPromotionConfig;a.promote({transition:c?c.transition:void 0,preserveFollowOpacity:c&&c.shouldPreserveFollowOpacity?c.shouldPreserveFollowOpacity(a):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var s;const{layoutId:a}=this.options;return a?((s=this.getStack())===null||s===void 0?void 0:s.lead)||this:this}getPrevLead(){var s;const{layoutId:a}=this.options;return a?(s=this.getStack())===null||s===void 0?void 0:s.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:a,preserveFollowOpacity:l}={}){const c=this.getStack();c&&c.promote(this,l),s&&(this.projectionDelta=void 0,this.needsReset=!0),a&&this.setOptions({transition:a})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetRotation(){const{visualElement:s}=this.options;if(!s)return;let a=!1;const{latestValues:l}=s;if((l.rotate||l.rotateX||l.rotateY||l.rotateZ)&&(a=!0),!a)return;const c={};for(let u=0;u{var a;return(a=s.currentAnimation)===null||a===void 0?void 0:a.stop()}),this.root.nodes.forEach(X9),this.root.sharedNodes.clear()}}}function TPe(e){e.updateLayout()}function APe(e){var t;const n=((t=e.resumeFrom)===null||t===void 0?void 0:t.snapshot)||e.snapshot;if(e.isLead()&&e.layout&&n&&e.hasListeners("didUpdate")){const{layoutBox:r,measuredBox:i}=e.layout,{animationType:o}=e.options,s=n.source!==e.layout.source;o==="size"?Yo(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Ai(f);f.min=r[d].min,f.max=f.min+h}):SG(o,n.layoutBox,r)&&Yo(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Ai(r[d]);f.max=f.min+h,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[d].max=e.relativeTarget[d].min+h)});const a=vd();Ap(a,r,n.layoutBox);const l=vd();s?Ap(l,e.applyTransform(i,!0),n.measuredBox):Ap(l,r,n.layoutBox);const c=!vG(a);let u=!1;if(!e.resumeFrom){const d=e.getClosestProjectingParent();if(d&&!d.resumeFrom){const{snapshot:f,layout:h}=d;if(f&&h){const p=gn();kp(p,n.layoutBox,f.layoutBox);const m=gn();kp(m,r,h.layoutBox),bG(p,m)||(u=!0),d.options.layoutRoot&&(e.relativeTarget=m,e.relativeTargetOrigin=p,e.relativeParent=d)}}}e.notifyListeners("didUpdate",{layout:r,snapshot:n,delta:l,layoutDelta:a,hasLayoutChanged:c,hasRelativeTargetChanged:u})}else if(e.isLead()){const{onExitComplete:r}=e.options;r&&r()}e.options.transition=void 0}function kPe(e){uc.totalNodes++,e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function PPe(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function IPe(e){e.clearSnapshot()}function X9(e){e.clearMeasurements()}function MPe(e){e.isLayoutDirty=!1}function RPe(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function Q9(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function OPe(e){e.resolveTargetDelta()}function $Pe(e){e.calcProjection()}function NPe(e){e.resetRotation()}function FPe(e){e.removeLeadSnapshot()}function Y9(e,t,n){e.translate=Wt(t.translate,0,n),e.scale=Wt(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function Z9(e,t,n,r){e.min=Wt(t.min,n.min,r),e.max=Wt(t.max,n.max,r)}function DPe(e,t,n,r){Z9(e.x,t.x,n.x,r),Z9(e.y,t.y,n.y,r)}function LPe(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const BPe={duration:.45,ease:[.4,0,.1,1]},J9=e=>typeof navigator<"u"&&navigator.userAgent.toLowerCase().includes(e),eR=J9("applewebkit/")&&!J9("chrome/")?Math.round:tn;function tR(e){e.min=eR(e.min),e.max=eR(e.max)}function zPe(e){tR(e.x),tR(e.y)}function SG(e,t,n){return e==="position"||e==="preserve-aspect"&&!B3(H9(t),H9(n),.2)}const jPe=_G({attachResizeListener:(e,t)=>Ys(e,"resize",t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),Yw={current:void 0},xG=_G({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!Yw.current){const e=new jPe({});e.mount(window),e.setOptions({layoutScroll:!0}),Yw.current=e}return Yw.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),VPe={pan:{Feature:nPe},drag:{Feature:tPe,ProjectionNode:xG,MeasureLayout:gG}},UPe=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;function GPe(e){const t=UPe.exec(e);if(!t)return[,];const[,n,r]=t;return[n,r]}function U3(e,t,n=1){const[r,i]=GPe(e);if(!r)return;const o=window.getComputedStyle(t).getPropertyValue(r);if(o){const s=o.trim();return iG(s)?parseFloat(s):s}else return R3(i)?U3(i,t,n+1):i}function HPe(e,{...t},n){const r=e.current;if(!(r instanceof Element))return{target:t,transitionEnd:n};n&&(n={...n}),e.values.forEach(i=>{const o=i.get();if(!R3(o))return;const s=U3(o,r);s&&i.set(s)});for(const i in t){const o=t[i];if(!R3(o))continue;const s=U3(o,r);s&&(t[i]=s,n||(n={}),n[i]===void 0&&(n[i]=o))}return{target:t,transitionEnd:n}}const WPe=new Set(["width","height","top","left","right","bottom","x","y","translateX","translateY"]),wG=e=>WPe.has(e),qPe=e=>Object.keys(e).some(wG),nR=e=>e===fu||e===Pe,rR=(e,t)=>parseFloat(e.split(", ")[t]),iR=(e,t)=>(n,{transform:r})=>{if(r==="none"||!r)return 0;const i=r.match(/^matrix3d\((.+)\)$/);if(i)return rR(i[1],t);{const o=r.match(/^matrix\((.+)\)$/);return o?rR(o[1],e):0}},KPe=new Set(["x","y","z"]),XPe=Qm.filter(e=>!KPe.has(e));function QPe(e){const t=[];return XPe.forEach(n=>{const r=e.getValue(n);r!==void 0&&(t.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))}),t.length&&e.render(),t}const Sf={width:({x:e},{paddingLeft:t="0",paddingRight:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),height:({y:e},{paddingTop:t="0",paddingBottom:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:iR(4,13),y:iR(5,14)};Sf.translateX=Sf.x;Sf.translateY=Sf.y;const YPe=(e,t,n)=>{const r=t.measureViewportBox(),i=t.current,o=getComputedStyle(i),{display:s}=o,a={};s==="none"&&t.setStaticValue("display",e.display||"block"),n.forEach(c=>{a[c]=Sf[c](r,o)}),t.render();const l=t.measureViewportBox();return n.forEach(c=>{const u=t.getValue(c);u&&u.jump(a[c]),e[c]=Sf[c](l,o)}),e},ZPe=(e,t,n={},r={})=>{t={...t},r={...r};const i=Object.keys(t).filter(wG);let o=[],s=!1;const a=[];if(i.forEach(l=>{const c=e.getValue(l);if(!e.hasValue(l))return;let u=n[l],d=Ch(u);const f=t[l];let h;if(Q1(f)){const p=f.length,m=f[0]===null?1:0;u=f[m],d=Ch(u);for(let _=m;_=0?window.pageYOffset:null,c=YPe(t,e,a);return o.length&&o.forEach(([u,d])=>{e.getValue(u).set(d)}),e.render(),MS&&l!==null&&window.scrollTo({top:l}),{target:c,transitionEnd:r}}else return{target:t,transitionEnd:r}};function JPe(e,t,n,r){return qPe(t)?ZPe(e,t,n,r):{target:t,transitionEnd:r}}const e6e=(e,t,n,r)=>{const i=HPe(e,t,r);return t=i.target,r=i.transitionEnd,JPe(e,t,n,r)},G3={current:null},CG={current:!1};function t6e(){if(CG.current=!0,!!MS)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>G3.current=e.matches;e.addListener(t),t()}else G3.current=!1}function n6e(e,t,n){const{willChange:r}=t;for(const i in t){const o=t[i],s=n[i];if(ri(o))e.addValue(i,o),eb(r)&&r.add(i);else if(ri(s))e.addValue(i,_f(o,{owner:e})),eb(r)&&r.remove(i);else if(s!==o)if(e.hasValue(i)){const a=e.getValue(i);!a.hasAnimated&&a.set(o)}else{const a=e.getStaticValue(i);e.addValue(i,_f(a!==void 0?a:o,{owner:e}))}}for(const i in n)t[i]===void 0&&e.removeValue(i);return t}const oR=new WeakMap,EG=Object.keys(jg),r6e=EG.length,sR=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"],i6e=dA.length;class o6e{constructor({parent:t,props:n,presenceContext:r,reducedMotionConfig:i,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.scheduleRender=()=>Pt.render(this.render,!1,!0);const{latestValues:a,renderState:l}=o;this.latestValues=a,this.baseTarget={...a},this.initialValues=n.initial?{...a}:{},this.renderState=l,this.parent=t,this.props=n,this.presenceContext=r,this.depth=t?t.depth+1:0,this.reducedMotionConfig=i,this.options=s,this.isControllingVariants=OS(n),this.isVariantNode=cU(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(t&&t.current);const{willChange:c,...u}=this.scrapeMotionValuesFromProps(n,{});for(const d in u){const f=u[d];a[d]!==void 0&&ri(f)&&(f.set(a[d],!1),eb(c)&&c.add(d))}}scrapeMotionValuesFromProps(t,n){return{}}mount(t){this.current=t,oR.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,r)=>this.bindToMotionValue(r,n)),CG.current||t6e(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:G3.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){oR.delete(this.current),this.projection&&this.projection.unmount(),pa(this.notifyUpdate),pa(this.render),this.valueSubscriptions.forEach(t=>t()),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const t in this.events)this.events[t].clear();for(const t in this.features)this.features[t].unmount();this.current=null}bindToMotionValue(t,n){const r=du.has(t),i=n.on("change",s=>{this.latestValues[t]=s,this.props.onUpdate&&Pt.update(this.notifyUpdate,!1,!0),r&&this.projection&&(this.projection.isTransformDirty=!0)}),o=n.on("renderRequest",this.scheduleRender);this.valueSubscriptions.set(t,()=>{i(),o()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}loadFeatures({children:t,...n},r,i,o){let s,a;for(let l=0;lthis.scheduleRender(),animationType:typeof c=="string"?c:"both",initialPromotionConfig:o,layoutScroll:f,layoutRoot:h})}return a}updateFeatures(){for(const t in this.features){const n=this.features[t];n.isMounted?n.update():(n.mount(),n.isMounted=!0)}}triggerBuild(){this.build(this.renderState,this.latestValues,this.options,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):gn()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,n){this.latestValues[t]=n}makeTargetAnimatable(t,n=!0){return this.makeTargetAnimatableFromInstance(t,this.props,n)}update(t,n){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let r=0;rn.variantChildren.delete(t)}addValue(t,n){n!==this.values.get(t)&&(this.removeValue(t),this.bindToMotionValue(t,n)),this.values.set(t,n),this.latestValues[t]=n.get()}removeValue(t){this.values.delete(t);const n=this.valueSubscriptions.get(t);n&&(n(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,n){if(this.props.values&&this.props.values[t])return this.props.values[t];let r=this.values.get(t);return r===void 0&&n!==void 0&&(r=_f(n,{owner:this}),this.addValue(t,r)),r}readValue(t){var n;return this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:(n=this.getBaseTargetFromProps(this.props,t))!==null&&n!==void 0?n:this.readValueFromInstance(this.current,t,this.options)}setBaseTarget(t,n){this.baseTarget[t]=n}getBaseTarget(t){var n;const{initial:r}=this.props,i=typeof r=="string"||typeof r=="object"?(n=bA(this.props,r))===null||n===void 0?void 0:n[t]:void 0;if(r&&i!==void 0)return i;const o=this.getBaseTargetFromProps(this.props,t);return o!==void 0&&!ri(o)?o:this.initialValues[t]!==void 0&&i===void 0?void 0:this.baseTarget[t]}on(t,n){return this.events[t]||(this.events[t]=new PA),this.events[t].add(n)}notify(t,...n){this.events[t]&&this.events[t].notify(...n)}}class TG extends o6e{sortInstanceNodePosition(t,n){return t.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(t,n){return t.style?t.style[n]:void 0}removeValueFromRenderState(t,{vars:n,style:r}){delete n[t],delete r[t]}makeTargetAnimatableFromInstance({transition:t,transitionEnd:n,...r},{transformValues:i},o){let s=_ke(r,t||{},this);if(i&&(n&&(n=i(n)),r&&(r=i(r)),s&&(s=i(s))),o){vke(this,r,s);const a=e6e(this,r,s,n);n=a.transitionEnd,r=a.target}return{transition:t,transitionEnd:n,...r}}}function s6e(e){return window.getComputedStyle(e)}class a6e extends TG{readValueFromInstance(t,n){if(du.has(n)){const r=CA(n);return r&&r.default||0}else{const r=s6e(t),i=(hU(n)?r.getPropertyValue(n):r[n])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(t,{transformPagePoint:n}){return hG(t,n)}build(t,n,r,i){pA(t,n,r,i.transformTemplate)}scrapeMotionValuesFromProps(t,n){return vA(t,n)}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;ri(t)&&(this.childSubscription=t.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}renderInstance(t,n,r,i){bU(t,n,r,i)}}class l6e extends TG{constructor(){super(...arguments),this.isSVGTag=!1}getBaseTargetFromProps(t,n){return t[n]}readValueFromInstance(t,n){if(du.has(n)){const r=CA(n);return r&&r.default||0}return n=_U.has(n)?n:cA(n),t.getAttribute(n)}measureInstanceViewportBox(){return gn()}scrapeMotionValuesFromProps(t,n){return xU(t,n)}build(t,n,r,i){mA(t,n,r,this.isSVGTag,i.transformTemplate)}renderInstance(t,n,r,i){SU(t,n,r,i)}mount(t){this.isSVGTag=yA(t.tagName),super.mount(t)}}const c6e=(e,t)=>hA(e)?new l6e(t,{enableHardwareAcceleration:!1}):new a6e(t,{enableHardwareAcceleration:!0}),u6e={layout:{ProjectionNode:xG,MeasureLayout:gG}},d6e={...Nke,...nAe,...VPe,...u6e},AG=dTe((e,t)=>UTe(e,t,d6e,c6e));function kG(){const e=I.useRef(!1);return lA(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function f6e(){const e=kG(),[t,n]=I.useState(0),r=I.useCallback(()=>{e.current&&n(t+1)},[t]);return[I.useCallback(()=>Pt.postRender(r),[r]),t]}class h6e extends I.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(n&&t.isPresent&&!this.props.isPresent){const r=this.props.sizeRef.current;r.height=n.offsetHeight||0,r.width=n.offsetWidth||0,r.top=n.offsetTop,r.left=n.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function p6e({children:e,isPresent:t}){const n=I.useId(),r=I.useRef(null),i=I.useRef({width:0,height:0,top:0,left:0});return I.useInsertionEffect(()=>{const{width:o,height:s,top:a,left:l}=i.current;if(t||!r.current||!o||!s)return;r.current.dataset.motionPopId=n;const c=document.createElement("style");return document.head.appendChild(c),c.sheet&&c.sheet.insertRule(` - [data-motion-pop-id="${n}"] { - position: absolute !important; - width: ${o}px !important; - height: ${s}px !important; - top: ${a}px !important; - left: ${l}px !important; - } - `),()=>{document.head.removeChild(c)}},[t]),I.createElement(h6e,{isPresent:t,childRef:r,sizeRef:i},I.cloneElement(e,{ref:r}))}const Zw=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:o,mode:s})=>{const a=wU(g6e),l=I.useId(),c=I.useMemo(()=>({id:l,initial:t,isPresent:n,custom:i,onExitComplete:u=>{a.set(u,!0);for(const d of a.values())if(!d)return;r&&r()},register:u=>(a.set(u,!1),()=>a.delete(u))}),o?void 0:[n]);return I.useMemo(()=>{a.forEach((u,d)=>a.set(d,!1))},[n]),I.useEffect(()=>{!n&&!a.size&&r&&r()},[n]),s==="popLayout"&&(e=I.createElement(p6e,{isPresent:n},e)),I.createElement(Xm.Provider,{value:c},e)};function g6e(){return new Map}function m6e(e){return I.useEffect(()=>()=>e(),[])}const dc=e=>e.key||"";function y6e(e,t){e.forEach(n=>{const r=dc(n);t.set(r,n)})}function v6e(e){const t=[];return I.Children.forEach(e,n=>{I.isValidElement(n)&&t.push(n)}),t}const PG=({children:e,custom:t,initial:n=!0,onExitComplete:r,exitBeforeEnter:i,presenceAffectsLayout:o=!0,mode:s="sync"})=>{const a=I.useContext(fA).forceRender||f6e()[0],l=kG(),c=v6e(e);let u=c;const d=I.useRef(new Map).current,f=I.useRef(u),h=I.useRef(new Map).current,p=I.useRef(!0);if(lA(()=>{p.current=!1,y6e(c,h),f.current=u}),m6e(()=>{p.current=!0,h.clear(),d.clear()}),p.current)return I.createElement(I.Fragment,null,u.map(y=>I.createElement(Zw,{key:dc(y),isPresent:!0,initial:n?void 0:!1,presenceAffectsLayout:o,mode:s},y)));u=[...u];const m=f.current.map(dc),_=c.map(dc),v=m.length;for(let y=0;y{if(_.indexOf(g)!==-1)return;const b=h.get(g);if(!b)return;const S=m.indexOf(g);let w=y;if(!w){const C=()=>{d.delete(g);const x=Array.from(h.keys()).filter(k=>!_.includes(k));if(x.forEach(k=>h.delete(k)),f.current=c.filter(k=>{const A=dc(k);return A===g||x.includes(A)}),!d.size){if(l.current===!1)return;a(),r&&r()}};w=I.createElement(Zw,{key:dc(b),isPresent:!1,onExitComplete:C,custom:t,presenceAffectsLayout:o,mode:s},b),d.set(g,w)}u.splice(S,0,w)}),u=u.map(y=>{const g=y.key;return d.has(g)?y:I.createElement(Zw,{key:dc(y),isPresent:!0,presenceAffectsLayout:o,mode:s},y)}),I.createElement(I.Fragment,null,d.size?u:u.map(y=>I.cloneElement(y)))};var b6e={initial:e=>{const{position:t}=e,n=["top","bottom"].includes(t)?"y":"x";let r=["top-right","bottom-right"].includes(t)?1:-1;return t==="bottom"&&(r=1),{opacity:0,[n]:r*24}},animate:{opacity:1,y:0,x:0,scale:1,transition:{duration:.4,ease:[.4,0,.2,1]}},exit:{opacity:0,scale:.85,transition:{duration:.2,ease:[.4,0,1,1]}}},IG=I.memo(e=>{const{id:t,message:n,onCloseComplete:r,onRequestRemove:i,requestClose:o=!1,position:s="bottom",duration:a=5e3,containerStyle:l,motionVariants:c=b6e,toastSpacing:u="0.5rem"}=e,[d,f]=I.useState(a),h=iPe();n9(()=>{h||r==null||r()},[h]),n9(()=>{f(a)},[a]);const p=()=>f(null),m=()=>f(a),_=()=>{h&&i()};I.useEffect(()=>{h&&o&&i()},[h,o,i]),tTe(_,d);const v=I.useMemo(()=>({pointerEvents:"auto",maxWidth:560,minWidth:300,margin:u,...l}),[l,u]),y=I.useMemo(()=>Z4e(s),[s]);return ie.jsx(AG.div,{layout:!0,className:"chakra-toast",variants:c,initial:"initial",animate:"animate",exit:"exit",onHoverStart:p,onHoverEnd:m,custom:{position:s},style:y,children:ie.jsx(or.div,{role:"status","aria-atomic":"true",className:"chakra-toast__inner",__css:v,children:us(n,{id:t,onClose:_})})})});IG.displayName="ToastComponent";function _6e(e,t){var n;const r=e??"bottom",o={"top-start":{ltr:"top-left",rtl:"top-right"},"top-end":{ltr:"top-right",rtl:"top-left"},"bottom-start":{ltr:"bottom-left",rtl:"bottom-right"},"bottom-end":{ltr:"bottom-right",rtl:"bottom-left"}}[r];return(n=o==null?void 0:o[t])!=null?n:r}var aR={path:ie.jsxs("g",{stroke:"currentColor",strokeWidth:"1.5",children:[ie.jsx("path",{strokeLinecap:"round",fill:"none",d:"M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"}),ie.jsx("path",{fill:"currentColor",strokeLinecap:"round",d:"M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"}),ie.jsx("circle",{fill:"none",strokeMiterlimit:"10",cx:"12",cy:"12",r:"11.25"})]}),viewBox:"0 0 24 24"},e0=Mi((e,t)=>{const{as:n,viewBox:r,color:i="currentColor",focusable:o=!1,children:s,className:a,__css:l,...c}=e,u=Dl("chakra-icon",a),d=Km("Icon",e),f={w:"1em",h:"1em",display:"inline-block",lineHeight:"1em",flexShrink:0,color:i,...l,...d},h={ref:t,focusable:o,className:u,__css:f},p=r??aR.viewBox;if(n&&typeof n!="string")return ie.jsx(or.svg,{as:n,...h,...c});const m=s??aR.path;return ie.jsx(or.svg,{verticalAlign:"middle",viewBox:p,...h,...c,children:m})});e0.displayName="Icon";function S6e(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.014,12.014,0,0,0,12,0Zm6.927,8.2-6.845,9.289a1.011,1.011,0,0,1-1.43.188L5.764,13.769a1,1,0,1,1,1.25-1.562l4.076,3.261,6.227-8.451A1,1,0,1,1,18.927,8.2Z"})})}function x6e(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm.25,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12.25,5ZM14.5,18.5h-4a1,1,0,0,1,0-2h.75a.25.25,0,0,0,.25-.25v-4.5a.25.25,0,0,0-.25-.25H10.5a1,1,0,0,1,0-2h1a2,2,0,0,1,2,2v4.75a.25.25,0,0,0,.25.25h.75a1,1,0,1,1,0,2Z"})})}function lR(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z"})})}var w6e=FSe({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),IA=Mi((e,t)=>{const n=Km("Spinner",e),{label:r="Loading...",thickness:i="2px",speed:o="0.45s",emptyColor:s="transparent",className:a,...l}=Wm(e),c=Dl("chakra-spinner",a),u={display:"inline-block",borderColor:"currentColor",borderStyle:"solid",borderRadius:"99999px",borderWidth:i,borderBottomColor:s,borderLeftColor:s,animation:`${w6e} ${o} linear infinite`,...n};return ie.jsx(or.div,{ref:t,__css:u,className:c,...l,children:r&&ie.jsx(or.span,{srOnly:!0,children:r})})});IA.displayName="Spinner";var[C6e,MA]=Hm({name:"AlertContext",hookName:"useAlertContext",providerName:""}),[E6e,RA]=Hm({name:"AlertStylesContext",hookName:"useAlertStyles",providerName:""}),MG={info:{icon:x6e,colorScheme:"blue"},warning:{icon:lR,colorScheme:"orange"},success:{icon:S6e,colorScheme:"green"},error:{icon:lR,colorScheme:"red"},loading:{icon:IA,colorScheme:"blue"}};function T6e(e){return MG[e].colorScheme}function A6e(e){return MG[e].icon}var RG=Mi(function(t,n){const r=RA(),{status:i}=MA(),o={display:"inline",...r.description};return ie.jsx(or.div,{ref:n,"data-status":i,...t,className:Dl("chakra-alert__desc",t.className),__css:o})});RG.displayName="AlertDescription";function OG(e){const{status:t}=MA(),n=A6e(t),r=RA(),i=t==="loading"?r.spinner:r.icon;return ie.jsx(or.span,{display:"inherit","data-status":t,...e,className:Dl("chakra-alert__icon",e.className),__css:i,children:e.children||ie.jsx(n,{h:"100%",w:"100%"})})}OG.displayName="AlertIcon";var $G=Mi(function(t,n){const r=RA(),{status:i}=MA();return ie.jsx(or.div,{ref:n,"data-status":i,...t,className:Dl("chakra-alert__title",t.className),__css:r.title})});$G.displayName="AlertTitle";var NG=Mi(function(t,n){var r;const{status:i="info",addRole:o=!0,...s}=Wm(t),a=(r=t.colorScheme)!=null?r:T6e(i),l=R4e("Alert",{...t,colorScheme:a}),c={width:"100%",display:"flex",alignItems:"center",position:"relative",overflow:"hidden",...l.container};return ie.jsx(C6e,{value:{status:i},children:ie.jsx(E6e,{value:l,children:ie.jsx(or.div,{"data-status":i,role:o?"alert":void 0,ref:n,...s,className:Dl("chakra-alert",t.className),__css:c})})})});NG.displayName="Alert";function k6e(e){return ie.jsx(e0,{focusable:"false","aria-hidden":!0,...e,children:ie.jsx("path",{fill:"currentColor",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"})})}var FG=Mi(function(t,n){const r=Km("CloseButton",t),{children:i,isDisabled:o,__css:s,...a}=Wm(t),l={outline:0,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0};return ie.jsx(or.button,{type:"button","aria-label":"Close",ref:n,disabled:o,__css:{...l,...r,...s},...a,children:i||ie.jsx(k6e,{width:"1em",height:"1em"})})});FG.displayName="CloseButton";var P6e={top:[],"top-left":[],"top-right":[],"bottom-left":[],bottom:[],"bottom-right":[]},ss=I6e(P6e);function I6e(e){let t=e;const n=new Set,r=i=>{t=i(t),n.forEach(o=>o())};return{getState:()=>t,subscribe:i=>(n.add(i),()=>{r(()=>e),n.delete(i)}),removeToast:(i,o)=>{r(s=>({...s,[o]:s[o].filter(a=>a.id!=i)}))},notify:(i,o)=>{const s=M6e(i,o),{position:a,id:l}=s;return r(c=>{var u,d;const h=a.includes("top")?[s,...(u=c[a])!=null?u:[]]:[...(d=c[a])!=null?d:[],s];return{...c,[a]:h}}),l},update:(i,o)=>{i&&r(s=>{const a={...s},{position:l,index:c}=t9(a,i);return l&&c!==-1&&(a[l][c]={...a[l][c],...o,message:DG(o)}),a})},closeAll:({positions:i}={})=>{r(o=>(i??["bottom","bottom-right","bottom-left","top","top-left","top-right"]).reduce((l,c)=>(l[c]=o[c].map(u=>({...u,requestClose:!0})),l),{...o}))},close:i=>{r(o=>{const s=oU(o,i);return s?{...o,[s]:o[s].map(a=>a.id==i?{...a,requestClose:!0}:a)}:o})},isActive:i=>!!t9(ss.getState(),i).position}}var cR=0;function M6e(e,t={}){var n,r;cR+=1;const i=(n=t.id)!=null?n:cR,o=(r=t.position)!=null?r:"bottom";return{id:i,message:e,position:o,duration:t.duration,onCloseComplete:t.onCloseComplete,onRequestRemove:()=>ss.removeToast(String(i),o),status:t.status,requestClose:!1,containerStyle:t.containerStyle}}var R6e=e=>{const{status:t,variant:n="solid",id:r,title:i,isClosable:o,onClose:s,description:a,colorScheme:l,icon:c}=e,u=r?{root:`toast-${r}`,title:`toast-${r}-title`,description:`toast-${r}-description`}:void 0;return ie.jsxs(NG,{addRole:!1,status:t,variant:n,id:u==null?void 0:u.root,alignItems:"start",borderRadius:"md",boxShadow:"lg",paddingEnd:8,textAlign:"start",width:"auto",colorScheme:l,children:[ie.jsx(OG,{children:c}),ie.jsxs(or.div,{flex:"1",maxWidth:"100%",children:[i&&ie.jsx($G,{id:u==null?void 0:u.title,children:i}),a&&ie.jsx(RG,{id:u==null?void 0:u.description,display:"block",children:a})]}),o&&ie.jsx(FG,{size:"sm",onClick:s,position:"absolute",insetEnd:1,top:1})]})};function DG(e={}){const{render:t,toastComponent:n=R6e}=e;return i=>typeof t=="function"?t({...i,...e}):ie.jsx(n,{...i,...e})}function O6e(e,t){const n=i=>{var o;return{...t,...i,position:_6e((o=i==null?void 0:i.position)!=null?o:t==null?void 0:t.position,e)}},r=i=>{const o=n(i),s=DG(o);return ss.notify(s,o)};return r.update=(i,o)=>{ss.update(i,n(o))},r.promise=(i,o)=>{const s=r({...o.loading,status:"loading",duration:null});i.then(a=>r.update(s,{status:"success",duration:5e3,...us(o.success,a)})).catch(a=>r.update(s,{status:"error",duration:5e3,...us(o.error,a)}))},r.closeAll=ss.closeAll,r.close=ss.close,r.isActive=ss.isActive,r}var[kWe,PWe]=Hm({name:"ToastOptionsContext",strict:!1}),$6e=e=>{const t=I.useSyncExternalStore(ss.subscribe,ss.getState,ss.getState),{motionVariants:n,component:r=IG,portalProps:i}=e,s=Object.keys(t).map(a=>{const l=t[a];return ie.jsx("div",{role:"region","aria-live":"polite","aria-label":`Notifications-${a}`,id:`chakra-toast-manager-${a}`,style:J4e(a),children:ie.jsx(PG,{initial:!1,children:l.map(c=>ie.jsx(r,{motionVariants:n,...c},c.id))})},a)});return ie.jsx(CS,{...i,children:s})},N6e={duration:5e3,variant:"solid"},Bu={theme:S4e,colorMode:"light",toggleColorMode:()=>{},setColorMode:()=>{},defaultOptions:N6e,forced:!1};function F6e({theme:e=Bu.theme,colorMode:t=Bu.colorMode,toggleColorMode:n=Bu.toggleColorMode,setColorMode:r=Bu.setColorMode,defaultOptions:i=Bu.defaultOptions,motionVariants:o,toastSpacing:s,component:a,forced:l}=Bu){const c={colorMode:t,setColorMode:r,toggleColorMode:n,forced:l};return{ToastContainer:()=>ie.jsx(X4e,{theme:e,children:ie.jsx(JT.Provider,{value:c,children:ie.jsx($6e,{defaultOptions:i,motionVariants:o,toastSpacing:s,component:a})})}),toast:O6e(e.direction,i)}}var H3=Mi(function(t,n){const{htmlWidth:r,htmlHeight:i,alt:o,...s}=t;return ie.jsx("img",{width:r,height:i,ref:n,alt:o,...s})});H3.displayName="NativeImage";function D6e(e){const{loading:t,src:n,srcSet:r,onLoad:i,onError:o,crossOrigin:s,sizes:a,ignoreFallback:l}=e,[c,u]=I.useState("pending");I.useEffect(()=>{u(n?"loading":"pending")},[n]);const d=I.useRef(),f=I.useCallback(()=>{if(!n)return;h();const p=new Image;p.src=n,s&&(p.crossOrigin=s),r&&(p.srcset=r),a&&(p.sizes=a),t&&(p.loading=t),p.onload=m=>{h(),u("loaded"),i==null||i(m)},p.onerror=m=>{h(),u("failed"),o==null||o(m)},d.current=p},[n,s,r,a,i,o,t]),h=()=>{d.current&&(d.current.onload=null,d.current.onerror=null,d.current=null)};return j1(()=>{if(!l)return c==="loading"&&f(),()=>{h()}},[c,f,l]),l?"loaded":c}var L6e=(e,t)=>e!=="loaded"&&t==="beforeLoadOrError"||e==="failed"&&t==="onError";function B6e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var OA=Mi(function(t,n){const{fallbackSrc:r,fallback:i,src:o,srcSet:s,align:a,fit:l,loading:c,ignoreFallback:u,crossOrigin:d,fallbackStrategy:f="beforeLoadOrError",referrerPolicy:h,...p}=t,m=r!==void 0||i!==void 0,_=c!=null||u||!m,v=D6e({...t,crossOrigin:d,ignoreFallback:_}),y=L6e(v,f),g={ref:n,objectFit:l,objectPosition:a,..._?p:B6e(p,["onError","onLoad"])};return y?i||ie.jsx(or.img,{as:H3,className:"chakra-image__placeholder",src:r,...g}):ie.jsx(or.img,{as:H3,src:o,srcSet:s,crossOrigin:d,loading:c,referrerPolicy:h,className:"chakra-image",...g})});OA.displayName="Image";var LG=Mi(function(t,n){const r=Km("Text",t),{className:i,align:o,decoration:s,casing:a,...l}=Wm(t),c=D4e({textAlign:t.align,textDecoration:t.decoration,textTransform:t.casing});return ie.jsx(or.p,{ref:n,className:Dl("chakra-text",t.className),...c,...l,__css:r})});LG.displayName="Text";var W3=Mi(function(t,n){const r=Km("Heading",t),{className:i,...o}=Wm(t);return ie.jsx(or.h2,{ref:n,className:Dl("chakra-heading",t.className),...o,__css:r})});W3.displayName="Heading";var nb=or("div");nb.displayName="Box";var BG=Mi(function(t,n){const{size:r,centerContent:i=!0,...o}=t,s=i?{display:"flex",alignItems:"center",justifyContent:"center"}:{};return ie.jsx(nb,{ref:n,boxSize:r,__css:{...s,flexShrink:0,flexGrow:0},...o})});BG.displayName="Square";var z6e=Mi(function(t,n){const{size:r,...i}=t;return ie.jsx(BG,{size:r,ref:n,borderRadius:"9999px",...i})});z6e.displayName="Circle";var $A=Mi(function(t,n){const{direction:r,align:i,justify:o,wrap:s,basis:a,grow:l,shrink:c,...u}=t,d={display:"flex",flexDirection:r,alignItems:i,justifyContent:o,flexWrap:s,flexBasis:a,flexGrow:l,flexShrink:c};return ie.jsx(or.div,{ref:n,__css:d,...u})});$A.displayName="Flex";const tt=e=>{try{return JSON.parse(JSON.stringify(e))}catch{return"Error parsing object"}},j6e=T.object({status:T.literal(422),data:T.object({detail:T.array(T.object({loc:T.array(T.string()),msg:T.string(),type:T.string()}))})});function Hr(e,t,n=!1){e=String(e),t=String(t);const r=Array.from({length:21},(s,a)=>a*50),i=[0,5,10,15,20,25,30,35,40,45,50,55,59,64,68,73,77,82,86,95,100];return r.reduce((s,a,l)=>{const c=n?i[l]/100:1,u=n?50:i[r.length-1-l];return s[a]=`hsl(${e} ${t}% ${u}% / ${c})`,s},{})}const my={H:220,S:16},yy={H:250,S:42},vy={H:47,S:42},by={H:40,S:70},_y={H:28,S:42},Sy={H:113,S:42},xy={H:0,S:42},V6e={base:Hr(my.H,my.S),baseAlpha:Hr(my.H,my.S,!0),accent:Hr(yy.H,yy.S),accentAlpha:Hr(yy.H,yy.S,!0),working:Hr(vy.H,vy.S),workingAlpha:Hr(vy.H,vy.S,!0),gold:Hr(by.H,by.S),goldAlpha:Hr(by.H,by.S,!0),warning:Hr(_y.H,_y.S),warningAlpha:Hr(_y.H,_y.S,!0),ok:Hr(Sy.H,Sy.S),okAlpha:Hr(Sy.H,Sy.S,!0),error:Hr(xy.H,xy.S),errorAlpha:Hr(xy.H,xy.S,!0)},{definePartsStyle:U6e,defineMultiStyleConfig:G6e}=Be(MV.keys),H6e={border:"none"},W6e=e=>{const{colorScheme:t}=e;return{fontWeight:"600",fontSize:"sm",border:"none",borderRadius:"base",bg:W(`${t}.200`,`${t}.700`)(e),color:W(`${t}.900`,`${t}.100`)(e),_hover:{bg:W(`${t}.250`,`${t}.650`)(e)},_expanded:{bg:W(`${t}.250`,`${t}.650`)(e),borderBottomRadius:"none",_hover:{bg:W(`${t}.300`,`${t}.600`)(e)}}}},q6e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.100`,`${t}.800`)(e),borderRadius:"base",borderTopRadius:"none"}},K6e={},X6e=U6e(e=>({container:H6e,button:W6e(e),panel:q6e(e),icon:K6e})),Q6e=G6e({variants:{invokeAI:X6e},defaultProps:{variant:"invokeAI",colorScheme:"base"}}),Y6e=e=>{const{colorScheme:t}=e;if(t==="base"){const r={bg:W("base.150","base.700")(e),color:W("base.300","base.500")(e),svg:{fill:W("base.300","base.500")(e)},opacity:1},i={bg:"none",color:W("base.300","base.500")(e),svg:{fill:W("base.500","base.500")(e)},opacity:1};return{bg:W("base.250","base.600")(e),color:W("base.850","base.100")(e),borderRadius:"base",svg:{fill:W("base.850","base.100")(e)},_hover:{bg:W("base.300","base.500")(e),color:W("base.900","base.50")(e),svg:{fill:W("base.900","base.50")(e)},_disabled:r},_disabled:r,'&[data-progress="true"]':{...i,_hover:i}}}const n={bg:W(`${t}.400`,`${t}.700`)(e),color:W(`${t}.600`,`${t}.500`)(e),svg:{fill:W(`${t}.600`,`${t}.500`)(e),filter:"unset"},opacity:.7,filter:"saturate(65%)"};return{bg:W(`${t}.400`,`${t}.600`)(e),color:W("base.50","base.100")(e),borderRadius:"base",svg:{fill:W("base.50","base.100")(e)},_disabled:n,_hover:{bg:W(`${t}.500`,`${t}.500`)(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)},_disabled:n}}},Z6e=e=>{const{colorScheme:t}=e,n=W("gray.200","whiteAlpha.300")(e);return{border:"1px solid",borderColor:t==="gray"?n:"currentColor",_hover:{bg:W(`${t}.500`,`${t}.500`)(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)}},".chakra-button__group[data-attached][data-orientation=horizontal] > &:not(:last-of-type)":{marginEnd:"-1px"},".chakra-button__group[data-attached][data-orientation=vertical] > &:not(:last-of-type)":{marginBottom:"-1px"}}},J6e={variants:{invokeAI:Y6e,invokeAIOutline:Z6e},defaultProps:{variant:"invokeAI",colorScheme:"base"}},{definePartsStyle:eIe,defineMultiStyleConfig:tIe}=Be(RV.keys),nIe=e=>{const{colorScheme:t}=e;return{bg:W("base.200","base.700")(e),borderColor:W("base.300","base.600")(e),color:W("base.900","base.100")(e),_checked:{bg:W(`${t}.300`,`${t}.500`)(e),borderColor:W(`${t}.300`,`${t}.500`)(e),color:W(`${t}.900`,`${t}.100`)(e),_hover:{bg:W(`${t}.400`,`${t}.500`)(e),borderColor:W(`${t}.400`,`${t}.500`)(e)},_disabled:{borderColor:"transparent",bg:"whiteAlpha.300",color:"whiteAlpha.500"}},_indeterminate:{bg:W(`${t}.300`,`${t}.600`)(e),borderColor:W(`${t}.300`,`${t}.600`)(e),color:W(`${t}.900`,`${t}.100`)(e)},_disabled:{bg:"whiteAlpha.100",borderColor:"transparent"},_focusVisible:{boxShadow:"none",outline:"none"},_invalid:{borderColor:W("error.600","error.300")(e)}}},rIe=eIe(e=>({control:nIe(e)})),iIe=tIe({variants:{invokeAI:rIe},defaultProps:{variant:"invokeAI",colorScheme:"accent"}}),{definePartsStyle:oIe,defineMultiStyleConfig:sIe}=Be(OV.keys),aIe={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal"},lIe=e=>({borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6},"::selection":{color:W("accent.900","accent.50")(e),bg:W("accent.200","accent.400")(e)}}),cIe={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},uIe=oIe(e=>({preview:aIe,input:lIe(e),textarea:cIe})),dIe=sIe({variants:{invokeAI:uIe},defaultProps:{size:"sm",variant:"invokeAI"}}),fIe=e=>({fontSize:"sm",marginEnd:0,mb:1,fontWeight:"400",transitionProperty:"common",transitionDuration:"normal",whiteSpace:"nowrap",_disabled:{opacity:.4},color:W("base.700","base.300")(e),_invalid:{color:W("error.500","error.300")(e)}}),hIe={variants:{invokeAI:fIe},defaultProps:{variant:"invokeAI"}},DS=e=>({outline:"none",borderWidth:2,borderStyle:"solid",borderColor:W("base.200","base.800")(e),bg:W("base.50","base.900")(e),borderRadius:"base",color:W("base.900","base.100")(e),boxShadow:"none",_hover:{borderColor:W("base.300","base.600")(e)},_focus:{borderColor:W("accent.200","accent.600")(e),boxShadow:"none",_hover:{borderColor:W("accent.300","accent.500")(e)}},_invalid:{borderColor:W("error.300","error.600")(e),boxShadow:"none",_hover:{borderColor:W("error.400","error.500")(e)}},_disabled:{borderColor:W("base.300","base.700")(e),bg:W("base.300","base.700")(e),color:W("base.600","base.400")(e),_hover:{borderColor:W("base.300","base.700")(e)}},_placeholder:{color:W("base.700","base.400")(e)},"::selection":{bg:W("accent.200","accent.400")(e)}}),{definePartsStyle:pIe,defineMultiStyleConfig:gIe}=Be($V.keys),mIe=pIe(e=>({field:DS(e)})),yIe=gIe({variants:{invokeAI:mIe},defaultProps:{size:"sm",variant:"invokeAI"}}),{definePartsStyle:vIe,defineMultiStyleConfig:bIe}=Be(NV.keys),_Ie=vIe(e=>({button:{fontWeight:500,bg:W("base.300","base.500")(e),color:W("base.900","base.100")(e),_hover:{bg:W("base.400","base.600")(e),color:W("base.900","base.50")(e),fontWeight:600}},list:{zIndex:9999,color:W("base.900","base.150")(e),bg:W("base.200","base.800")(e),shadow:"dark-lg",border:"none"},item:{fontSize:"sm",bg:W("base.200","base.800")(e),_hover:{bg:W("base.300","base.700")(e),svg:{opacity:1}},_focus:{bg:W("base.400","base.600")(e)},svg:{opacity:.7,fontSize:14}},divider:{borderColor:W("base.400","base.700")(e)}})),SIe=bIe({variants:{invokeAI:_Ie},defaultProps:{variant:"invokeAI"}}),IWe={variants:{enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.07,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.07,easings:"easeOut"}}}},{defineMultiStyleConfig:xIe,definePartsStyle:wIe}=Be(FV.keys),CIe=e=>({bg:W("blackAlpha.700","blackAlpha.700")(e)}),EIe={},TIe=()=>({layerStyle:"first",maxH:"80vh"}),AIe=()=>({fontWeight:"600",fontSize:"lg",layerStyle:"first",borderTopRadius:"base",borderInlineEndRadius:"base"}),kIe={},PIe={overflowY:"scroll"},IIe={},MIe=wIe(e=>({overlay:CIe(e),dialogContainer:EIe,dialog:TIe(),header:AIe(),closeButton:kIe,body:PIe,footer:IIe})),RIe=xIe({variants:{invokeAI:MIe},defaultProps:{variant:"invokeAI",size:"lg"}}),{defineMultiStyleConfig:OIe,definePartsStyle:$Ie}=Be(DV.keys),NIe=e=>({height:8}),FIe=e=>({border:"none",fontWeight:"600",height:"auto",py:1,ps:2,pe:6,...DS(e)}),DIe=e=>({display:"flex"}),LIe=e=>({border:"none",px:2,py:0,mx:-2,my:0,svg:{color:W("base.700","base.300")(e),width:2.5,height:2.5,_hover:{color:W("base.900","base.100")(e)}}}),BIe=$Ie(e=>({root:NIe(e),field:FIe(e),stepperGroup:DIe(e),stepper:LIe(e)})),zIe=OIe({variants:{invokeAI:BIe},defaultProps:{size:"sm",variant:"invokeAI"}}),{defineMultiStyleConfig:jIe,definePartsStyle:zG}=Be(LV.keys),jG=Xt("popper-bg"),VG=Xt("popper-arrow-bg"),UG=Xt("popper-arrow-shadow-color"),VIe=e=>({[VG.variable]:W("colors.base.100","colors.base.800")(e),[jG.variable]:W("colors.base.100","colors.base.800")(e),[UG.variable]:W("colors.base.400","colors.base.600")(e),minW:"unset",width:"unset",p:4,bg:W("base.100","base.800")(e),border:"none",shadow:"dark-lg"}),UIe=e=>({[VG.variable]:W("colors.base.100","colors.base.700")(e),[jG.variable]:W("colors.base.100","colors.base.700")(e),[UG.variable]:W("colors.base.400","colors.base.400")(e),p:4,bg:W("base.100","base.700")(e),border:"none",shadow:"dark-lg"}),GIe=zG(e=>({content:VIe(e),body:{padding:0}})),HIe=zG(e=>({content:UIe(e),body:{padding:0}})),WIe=jIe({variants:{invokeAI:GIe,informational:HIe},defaultProps:{variant:"invokeAI"}}),{defineMultiStyleConfig:qIe,definePartsStyle:KIe}=Be(BV.keys),XIe=e=>({bg:"accentAlpha.700"}),QIe=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.200`,`${t}.700`)(e)}},YIe=KIe(e=>({filledTrack:XIe(e),track:QIe(e)})),ZIe=qIe({variants:{invokeAI:YIe},defaultProps:{variant:"invokeAI"}}),JIe={"::-webkit-scrollbar":{display:"none"},scrollbarWidth:"none"},{definePartsStyle:e8e,defineMultiStyleConfig:t8e}=Be(zV.keys),n8e=e=>({color:W("base.200","base.300")(e)}),r8e=e=>({fontWeight:"600",...DS(e)}),i8e=e8e(e=>({field:r8e(e),icon:n8e(e)})),o8e=t8e({variants:{invokeAI:i8e},defaultProps:{size:"sm",variant:"invokeAI"}}),uR=Ae("skeleton-start-color"),dR=Ae("skeleton-end-color"),s8e={borderRadius:"base",maxW:"full",maxH:"full",_light:{[uR.variable]:"colors.base.250",[dR.variable]:"colors.base.450"},_dark:{[uR.variable]:"colors.base.700",[dR.variable]:"colors.base.500"}},a8e={variants:{invokeAI:s8e},defaultProps:{variant:"invokeAI"}},{definePartsStyle:l8e,defineMultiStyleConfig:c8e}=Be(jV.keys),u8e=e=>({bg:W("base.400","base.600")(e),h:1.5}),d8e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.400`,`${t}.600`)(e),h:1.5}},f8e=e=>({w:e.orientation==="horizontal"?2:4,h:e.orientation==="horizontal"?4:2,bg:W("base.50","base.100")(e)}),h8e=e=>({fontSize:"2xs",fontWeight:"500",color:W("base.700","base.400")(e),mt:2,insetInlineStart:"unset"}),p8e=l8e(e=>({container:{_disabled:{opacity:.6,cursor:"default",pointerEvents:"none"}},track:u8e(e),filledTrack:d8e(e),thumb:f8e(e),mark:h8e(e)})),g8e=c8e({variants:{invokeAI:p8e},defaultProps:{variant:"invokeAI",colorScheme:"accent"}}),{defineMultiStyleConfig:m8e,definePartsStyle:y8e}=Be(VV.keys),v8e=e=>{const{colorScheme:t}=e;return{bg:W("base.300","base.600")(e),_focusVisible:{boxShadow:"none"},_checked:{bg:W(`${t}.400`,`${t}.500`)(e)}}},b8e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.50`,`${t}.50`)(e)}},_8e=y8e(e=>({container:{},track:v8e(e),thumb:b8e(e)})),S8e=m8e({variants:{invokeAI:_8e},defaultProps:{size:"md",variant:"invokeAI",colorScheme:"accent"}}),{defineMultiStyleConfig:x8e,definePartsStyle:GG}=Be(UV.keys),w8e=e=>({display:"flex",columnGap:4}),C8e=e=>({}),E8e=e=>{const{colorScheme:t}=e;return{display:"flex",flexDirection:"column",gap:1,color:W("base.700","base.400")(e),button:{fontSize:"sm",padding:2,borderRadius:"base",textShadow:W("0 0 0.3rem var(--invokeai-colors-accent-100)","0 0 0.3rem var(--invokeai-colors-accent-900)")(e),svg:{fill:W("base.700","base.300")(e)},_selected:{bg:W("accent.400","accent.600")(e),color:W("base.50","base.100")(e),svg:{fill:W("base.50","base.100")(e),filter:W(`drop-shadow(0px 0px 0.3rem var(--invokeai-colors-${t}-600))`,`drop-shadow(0px 0px 0.3rem var(--invokeai-colors-${t}-800))`)(e)},_hover:{bg:W("accent.500","accent.500")(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)}}},_hover:{bg:W("base.100","base.800")(e),color:W("base.900","base.50")(e),svg:{fill:W("base.800","base.100")(e)}}}}},T8e=e=>({padding:0,height:"100%"}),A8e=GG(e=>({root:w8e(e),tab:C8e(e),tablist:E8e(e),tabpanel:T8e(e)})),k8e=GG(e=>({tab:{borderTopRadius:"base",px:4,py:1,fontSize:"sm",color:W("base.600","base.400")(e),fontWeight:500,_selected:{color:W("accent.600","accent.400")(e)}},tabpanel:{p:0,pt:4,w:"full",h:"full"},tabpanels:{w:"full",h:"full"}})),P8e=x8e({variants:{line:k8e,appTabs:A8e},defaultProps:{variant:"appTabs",colorScheme:"accent"}}),I8e=e=>({color:W("error.500","error.400")(e)}),M8e=e=>({color:W("base.500","base.400")(e)}),R8e={variants:{subtext:M8e,error:I8e}},O8e=e=>({...DS(e),"::-webkit-scrollbar":{display:"initial"},"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, - var(--invokeai-colors-base-50) 0%, - var(--invokeai-colors-base-50) 70%, - var(--invokeai-colors-base-200) 70%, - var(--invokeai-colors-base-200) 100%)`},_disabled:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, - var(--invokeai-colors-base-50) 0%, - var(--invokeai-colors-base-50) 70%, - var(--invokeai-colors-base-200) 70%, - var(--invokeai-colors-base-200) 100%)`}},_dark:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, - var(--invokeai-colors-base-900) 0%, - var(--invokeai-colors-base-900) 70%, - var(--invokeai-colors-base-800) 70%, - var(--invokeai-colors-base-800) 100%)`},_disabled:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, - var(--invokeai-colors-base-900) 0%, - var(--invokeai-colors-base-900) 70%, - var(--invokeai-colors-base-800) 70%, - var(--invokeai-colors-base-800) 100%)`}}},p:2}),$8e={variants:{invokeAI:O8e},defaultProps:{size:"md",variant:"invokeAI"}},N8e=Xt("popper-arrow-bg"),F8e=e=>({borderRadius:"base",shadow:"dark-lg",bg:W("base.700","base.200")(e),[N8e.variable]:W("colors.base.700","colors.base.200")(e),pb:1.5}),D8e={baseStyle:F8e},fR={backgroundColor:"accentAlpha.150 !important",borderColor:"accentAlpha.700 !important",borderRadius:"base !important",borderStyle:"dashed !important",_dark:{borderColor:"accent.400 !important"}},L8e={".react-flow__nodesselection-rect":{...fR,padding:"1rem !important",boxSizing:"content-box !important",transform:"translate(-1rem, -1rem) !important"},".react-flow__selection":fR},B8e=e=>({color:W("accent.500","accent.300")(e)}),z8e={variants:{accent:B8e}},j8e={config:{cssVarPrefix:"invokeai",initialColorMode:"dark",useSystemColorMode:!1},layerStyles:{body:{bg:"base.50",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.50"}},first:{bg:"base.100",color:"base.900",".chakra-ui-dark &":{bg:"base.850",color:"base.100"}},second:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.800",color:"base.100"}},third:{bg:"base.300",color:"base.900",".chakra-ui-dark &":{bg:"base.750",color:"base.100"}},nodeBody:{bg:"base.100",color:"base.900",".chakra-ui-dark &":{bg:"base.800",color:"base.100"}},nodeHeader:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.100"}},nodeFooter:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.100"}}},styles:{global:()=>({layerStyle:"body","*":{...JIe},...L8e})},direction:"ltr",fonts:{body:"'Inter Variable', sans-serif",heading:"'Inter Variable', sans-serif"},shadows:{light:{accent:"0 0 10px 0 var(--invokeai-colors-accent-300)",accentHover:"0 0 10px 0 var(--invokeai-colors-accent-400)",ok:"0 0 7px var(--invokeai-colors-ok-600)",working:"0 0 7px var(--invokeai-colors-working-600)",error:"0 0 7px var(--invokeai-colors-error-600)"},dark:{accent:"0 0 10px 0 var(--invokeai-colors-accent-600)",accentHover:"0 0 10px 0 var(--invokeai-colors-accent-500)",ok:"0 0 7px var(--invokeai-colors-ok-400)",working:"0 0 7px var(--invokeai-colors-working-400)",error:"0 0 7px var(--invokeai-colors-error-400)"},selected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 4px var(--invokeai-colors-accent-400)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 4px var(--invokeai-colors-accent-500)"},hoverSelected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 4px var(--invokeai-colors-accent-500)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 4px var(--invokeai-colors-accent-400)"},hoverUnselected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 3px var(--invokeai-colors-accent-500)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 3px var(--invokeai-colors-accent-400)"},nodeSelected:{light:"0 0 0 3px var(--invokeai-colors-accent-400)",dark:"0 0 0 3px var(--invokeai-colors-accent-500)"},nodeHovered:{light:"0 0 0 2px var(--invokeai-colors-accent-500)",dark:"0 0 0 2px var(--invokeai-colors-accent-400)"},nodeHoveredSelected:{light:"0 0 0 3px var(--invokeai-colors-accent-500)",dark:"0 0 0 3px var(--invokeai-colors-accent-400)"},nodeInProgress:{light:"0 0 0 2px var(--invokeai-colors-accent-500), 0 0 10px 2px var(--invokeai-colors-accent-600)",dark:"0 0 0 2px var(--invokeai-colors-yellow-400), 0 0 20px 2px var(--invokeai-colors-orange-700)"}},colors:V6e,components:{Button:J6e,Input:yIe,Editable:dIe,Textarea:$8e,Tabs:P8e,Progress:ZIe,Accordion:Q6e,FormLabel:hIe,Switch:S8e,NumberInput:zIe,Select:o8e,Skeleton:a8e,Slider:g8e,Popover:WIe,Modal:RIe,Checkbox:iIe,Menu:SIe,Text:R8e,Tooltip:D8e,Heading:z8e}},V8e={defaultOptions:{isClosable:!0,position:"bottom-right"}},{toast:Th}=F6e({theme:j8e,defaultOptions:V8e.defaultOptions}),U8e=()=>{fe({matcher:en.endpoints.enqueueBatch.matchFulfilled,effect:async e=>{const t=e.payload,n=e.meta.arg.originalArgs;ue("queue").debug({enqueueResult:tt(t)},"Batch enqueued"),Th.isActive("batch-queued")||Th({id:"batch-queued",title:J("queue.batchQueued"),description:J("queue.batchQueuedDesc",{count:t.enqueued,direction:n.prepend?J("queue.front"):J("queue.back")}),duration:1e3,status:"success"})}}),fe({matcher:en.endpoints.enqueueBatch.matchRejected,effect:async e=>{const t=e.payload,n=e.meta.arg.originalArgs;if(!t){Th({title:J("queue.batchFailedToQueue"),status:"error",description:"Unknown Error"}),ue("queue").error({batchConfig:tt(n),error:tt(t)},J("queue.batchFailedToQueue"));return}const r=j6e.safeParse(t);r.success?r.data.data.detail.map(i=>{Th({id:"batch-failed-to-queue",title:z6(oF(i.msg),{length:128}),status:"error",description:z6(`Path: - ${i.loc.join(".")}`,{length:128})})}):t.status!==403&&Th({title:J("queue.batchFailedToQueue"),description:J("common.unknownError"),status:"error"}),ue("queue").error({batchConfig:tt(n),error:tt(t)},J("queue.batchFailedToQueue"))}})},hu=m4({memoize:kQ,memoizeOptions:{resultEqualityCheck:$4}}),HG=(e,t)=>{var d;const{generation:n,canvas:r,nodes:i,controlAdapters:o}=e,s=((d=n.initialImage)==null?void 0:d.imageName)===t,a=r.layerState.objects.some(f=>f.kind==="image"&&f.imageName===t),l=i.nodes.filter(Sn).some(f=>Gu(f.data.inputs,h=>{var p;return vT(h)&&((p=h.value)==null?void 0:p.image_name)===t})),c=As(o).some(f=>f.controlImage===t||hi(f)&&f.processedControlImage===t);return{isInitialImage:s,isCanvasImage:a,isNodesImage:l,isControlImage:c}},G8e=hu([e=>e],e=>{const{imagesToDelete:t}=e.deleteImageModal;return t.length?t.map(r=>HG(e,r.image_name)):[]}),H8e=()=>{fe({matcher:ce.endpoints.deleteBoardAndImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{deleted_images:r}=e.payload;let i=!1,o=!1,s=!1,a=!1;const l=n();r.forEach(c=>{const u=HG(l,c);u.isInitialImage&&!i&&(t(oT()),i=!0),u.isCanvasImage&&!o&&(t(dT()),o=!0),u.isNodesImage&&!s&&(t(Rj()),s=!0),u.isControlImage&&!a&&(t(hae()),a=!0)})}})},W8e=()=>{fe({matcher:br(vp,Q5),effect:async(e,{getState:t,dispatch:n,condition:r,cancelActiveListeners:i})=>{i();const o=t(),s=vp.match(e)?e.payload.boardId:o.gallery.selectedBoardId,l=(Q5.match(e)?e.payload:o.gallery.galleryView)==="images"?Rn:Pr,c={board_id:s??"none",categories:l};if(await r(()=>ce.endpoints.listImages.select(c)(t()).isSuccess,5e3)){const{data:d}=ce.endpoints.listImages.select(c)(t());if(d&&vp.match(e)&&e.payload.selectedImageName){const f=_g.selectAll(d)[0],h=_g.selectById(d,e.payload.selectedImageName);n(ps(h||f||null))}else n(ps(null))}else n(ps(null))}})},q8e=he("canvas/canvasSavedToGallery"),K8e=he("canvas/canvasMaskSavedToGallery"),X8e=he("canvas/canvasCopiedToClipboard"),Q8e=he("canvas/canvasDownloadedAsImage"),Y8e=he("canvas/canvasMerged"),Z8e=he("canvas/stagingAreaImageSaved"),J8e=he("canvas/canvasMaskToControlAdapter"),eMe=he("canvas/canvasImageToControlAdapter");let WG=null,qG=null;const MWe=e=>{WG=e},LS=()=>WG,RWe=e=>{qG=e},tMe=()=>qG,nMe=async e=>new Promise((t,n)=>{e.toBlob(r=>{if(r){t(r);return}n("Unable to create Blob")})}),rb=async(e,t)=>await nMe(e.toCanvas(t)),BS=async(e,t=!1)=>{const n=LS();if(!n)throw new Error("Problem getting base layer blob");const{shouldCropToBoundingBoxOnSave:r,boundingBoxCoordinates:i,boundingBoxDimensions:o}=e.canvas,s=n.clone();s.scale({x:1,y:1});const a=s.getAbsolutePosition(),l=r||t?{x:i.x+a.x,y:i.y+a.y,width:o.width,height:o.height}:s.getClientRect();return rb(s,l)},rMe=(e,t="image/png")=>{navigator.clipboard.write([new ClipboardItem({[t]:e})])},iMe=()=>{fe({actionCreator:X8e,effect:async(e,{dispatch:t,getState:n})=>{const r=B_.get().child({namespace:"canvasCopiedToClipboardListener"}),i=n();try{const o=BS(i);rMe(o)}catch(o){r.error(String(o)),t(Ve({title:J("toast.problemCopyingCanvas"),description:J("toast.problemCopyingCanvasDesc"),status:"error"}));return}t(Ve({title:J("toast.canvasCopiedClipboard"),status:"success"}))}})},oMe=(e,t)=>{const n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),r.remove()},sMe=()=>{fe({actionCreator:Q8e,effect:async(e,{dispatch:t,getState:n})=>{const r=B_.get().child({namespace:"canvasSavedToGalleryListener"}),i=n();let o;try{o=await BS(i)}catch(s){r.error(String(s)),t(Ve({title:J("toast.problemDownloadingCanvas"),description:J("toast.problemDownloadingCanvasDesc"),status:"error"}));return}oMe(o,"canvas.png"),t(Ve({title:J("toast.canvasDownloaded"),status:"success"}))}})},aMe=()=>{fe({actionCreator:eMe,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{id:o}=e.payload;let s;try{s=await BS(i,!0)}catch(u){r.error(String(u)),t(Ve({title:J("toast.problemSavingCanvas"),description:J("toast.problemSavingCanvasDesc"),status:"error"}));return}const{autoAddBoardId:a}=i.gallery,l=await t(ce.endpoints.uploadImage.initiate({file:new File([s],"savedCanvas.png",{type:"image/png"}),image_category:"control",is_intermediate:!1,board_id:a==="none"?void 0:a,crop_visible:!1,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasSentControlnetAssets")}}})).unwrap(),{image_name:c}=l;t(Nl({id:o,controlImage:c}))}})};var NA={exports:{}},zS={},KG={},Ue={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e._registerNode=e.Konva=e.glob=void 0;const t=Math.PI/180;function n(){return typeof window<"u"&&({}.toString.call(window)==="[object Window]"||{}.toString.call(window)==="[object global]")}e.glob=typeof He<"u"?He:typeof window<"u"?window:typeof WorkerGlobalScope<"u"?self:{},e.Konva={_global:e.glob,version:"9.2.3",isBrowser:n(),isUnminified:/param/.test((function(i){}).toString()),dblClickWindow:400,getAngle(i){return e.Konva.angleDeg?i*t:i},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,pixelRatio:typeof window<"u"&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return e.Konva.DD.isDragging},isDragReady(){return!!e.Konva.DD.node},releaseCanvasOnDestroy:!0,document:e.glob.document,_injectGlobal(i){e.glob.Konva=i}};const r=i=>{e.Konva[i.prototype.getClassName()]=i};e._registerNode=r,e.Konva._injectGlobal(e.Konva)})(Ue);var Qt={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Util=e.Transform=void 0;const t=Ue;class n{constructor(b=[1,0,0,1,0,0]){this.dirty=!1,this.m=b&&b.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new n(this.m)}copyInto(b){b.m[0]=this.m[0],b.m[1]=this.m[1],b.m[2]=this.m[2],b.m[3]=this.m[3],b.m[4]=this.m[4],b.m[5]=this.m[5]}point(b){var S=this.m;return{x:S[0]*b.x+S[2]*b.y+S[4],y:S[1]*b.x+S[3]*b.y+S[5]}}translate(b,S){return this.m[4]+=this.m[0]*b+this.m[2]*S,this.m[5]+=this.m[1]*b+this.m[3]*S,this}scale(b,S){return this.m[0]*=b,this.m[1]*=b,this.m[2]*=S,this.m[3]*=S,this}rotate(b){var S=Math.cos(b),w=Math.sin(b),C=this.m[0]*S+this.m[2]*w,x=this.m[1]*S+this.m[3]*w,k=this.m[0]*-w+this.m[2]*S,A=this.m[1]*-w+this.m[3]*S;return this.m[0]=C,this.m[1]=x,this.m[2]=k,this.m[3]=A,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(b,S){var w=this.m[0]+this.m[2]*S,C=this.m[1]+this.m[3]*S,x=this.m[2]+this.m[0]*b,k=this.m[3]+this.m[1]*b;return this.m[0]=w,this.m[1]=C,this.m[2]=x,this.m[3]=k,this}multiply(b){var S=this.m[0]*b.m[0]+this.m[2]*b.m[1],w=this.m[1]*b.m[0]+this.m[3]*b.m[1],C=this.m[0]*b.m[2]+this.m[2]*b.m[3],x=this.m[1]*b.m[2]+this.m[3]*b.m[3],k=this.m[0]*b.m[4]+this.m[2]*b.m[5]+this.m[4],A=this.m[1]*b.m[4]+this.m[3]*b.m[5]+this.m[5];return this.m[0]=S,this.m[1]=w,this.m[2]=C,this.m[3]=x,this.m[4]=k,this.m[5]=A,this}invert(){var b=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),S=this.m[3]*b,w=-this.m[1]*b,C=-this.m[2]*b,x=this.m[0]*b,k=b*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),A=b*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=S,this.m[1]=w,this.m[2]=C,this.m[3]=x,this.m[4]=k,this.m[5]=A,this}getMatrix(){return this.m}decompose(){var b=this.m[0],S=this.m[1],w=this.m[2],C=this.m[3],x=this.m[4],k=this.m[5],A=b*C-S*w;let R={x,y:k,rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(b!=0||S!=0){var L=Math.sqrt(b*b+S*S);R.rotation=S>0?Math.acos(b/L):-Math.acos(b/L),R.scaleX=L,R.scaleY=A/L,R.skewX=(b*w+S*C)/A,R.skewY=0}else if(w!=0||C!=0){var M=Math.sqrt(w*w+C*C);R.rotation=Math.PI/2-(C>0?Math.acos(-w/M):-Math.acos(w/M)),R.scaleX=A/M,R.scaleY=M,R.skewX=0,R.skewY=(b*w+S*C)/A}return R.rotation=e.Util._getRotation(R.rotation),R}}e.Transform=n;var r="[object Array]",i="[object Number]",o="[object String]",s="[object Boolean]",a=Math.PI/180,l=180/Math.PI,c="#",u="",d="0",f="Konva warning: ",h="Konva error: ",p="rgb(",m={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},_=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,v=[];const y=typeof requestAnimationFrame<"u"&&requestAnimationFrame||function(g){setTimeout(g,60)};e.Util={_isElement(g){return!!(g&&g.nodeType==1)},_isFunction(g){return!!(g&&g.constructor&&g.call&&g.apply)},_isPlainObject(g){return!!g&&g.constructor===Object},_isArray(g){return Object.prototype.toString.call(g)===r},_isNumber(g){return Object.prototype.toString.call(g)===i&&!isNaN(g)&&isFinite(g)},_isString(g){return Object.prototype.toString.call(g)===o},_isBoolean(g){return Object.prototype.toString.call(g)===s},isObject(g){return g instanceof Object},isValidSelector(g){if(typeof g!="string")return!1;var b=g[0];return b==="#"||b==="."||b===b.toUpperCase()},_sign(g){return g===0||g>0?1:-1},requestAnimFrame(g){v.push(g),v.length===1&&y(function(){const b=v;v=[],b.forEach(function(S){S()})})},createCanvasElement(){var g=document.createElement("canvas");try{g.style=g.style||{}}catch{}return g},createImageElement(){return document.createElement("img")},_isInDocument(g){for(;g=g.parentNode;)if(g==document)return!0;return!1},_urlToImage(g,b){var S=e.Util.createImageElement();S.onload=function(){b(S)},S.src=g},_rgbToHex(g,b,S){return((1<<24)+(g<<16)+(b<<8)+S).toString(16).slice(1)},_hexToRgb(g){g=g.replace(c,u);var b=parseInt(g,16);return{r:b>>16&255,g:b>>8&255,b:b&255}},getRandomColor(){for(var g=(Math.random()*16777215<<0).toString(16);g.length<6;)g=d+g;return c+g},getRGB(g){var b;return g in m?(b=m[g],{r:b[0],g:b[1],b:b[2]}):g[0]===c?this._hexToRgb(g.substring(1)):g.substr(0,4)===p?(b=_.exec(g.replace(/ /g,"")),{r:parseInt(b[1],10),g:parseInt(b[2],10),b:parseInt(b[3],10)}):{r:0,g:0,b:0}},colorToRGBA(g){return g=g||"black",e.Util._namedColorToRBA(g)||e.Util._hex3ColorToRGBA(g)||e.Util._hex4ColorToRGBA(g)||e.Util._hex6ColorToRGBA(g)||e.Util._hex8ColorToRGBA(g)||e.Util._rgbColorToRGBA(g)||e.Util._rgbaColorToRGBA(g)||e.Util._hslColorToRGBA(g)},_namedColorToRBA(g){var b=m[g.toLowerCase()];return b?{r:b[0],g:b[1],b:b[2],a:1}:null},_rgbColorToRGBA(g){if(g.indexOf("rgb(")===0){g=g.match(/rgb\(([^)]+)\)/)[1];var b=g.split(/ *, */).map(Number);return{r:b[0],g:b[1],b:b[2],a:1}}},_rgbaColorToRGBA(g){if(g.indexOf("rgba(")===0){g=g.match(/rgba\(([^)]+)\)/)[1];var b=g.split(/ *, */).map((S,w)=>S.slice(-1)==="%"?w===3?parseInt(S)/100:parseInt(S)/100*255:Number(S));return{r:b[0],g:b[1],b:b[2],a:b[3]}}},_hex8ColorToRGBA(g){if(g[0]==="#"&&g.length===9)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:parseInt(g.slice(7,9),16)/255}},_hex6ColorToRGBA(g){if(g[0]==="#"&&g.length===7)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:1}},_hex4ColorToRGBA(g){if(g[0]==="#"&&g.length===5)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:parseInt(g[4]+g[4],16)/255}},_hex3ColorToRGBA(g){if(g[0]==="#"&&g.length===4)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:1}},_hslColorToRGBA(g){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(g)){const[b,...S]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(g),w=Number(S[0])/360,C=Number(S[1])/100,x=Number(S[2])/100;let k,A,R;if(C===0)return R=x*255,{r:Math.round(R),g:Math.round(R),b:Math.round(R),a:1};x<.5?k=x*(1+C):k=x+C-x*C;const L=2*x-k,M=[0,0,0];for(let E=0;E<3;E++)A=w+1/3*-(E-1),A<0&&A++,A>1&&A--,6*A<1?R=L+(k-L)*6*A:2*A<1?R=k:3*A<2?R=L+(k-L)*(2/3-A)*6:R=L,M[E]=R*255;return{r:Math.round(M[0]),g:Math.round(M[1]),b:Math.round(M[2]),a:1}}},haveIntersection(g,b){return!(b.x>g.x+g.width||b.x+b.widthg.y+g.height||b.y+b.height1?(k=S,A=w,R=(S-C)*(S-C)+(w-x)*(w-x)):(k=g+M*(S-g),A=b+M*(w-b),R=(k-C)*(k-C)+(A-x)*(A-x))}return[k,A,R]},_getProjectionToLine(g,b,S){var w=e.Util.cloneObject(g),C=Number.MAX_VALUE;return b.forEach(function(x,k){if(!(!S&&k===b.length-1)){var A=b[(k+1)%b.length],R=e.Util._getProjectionToSegment(x.x,x.y,A.x,A.y,g.x,g.y),L=R[0],M=R[1],E=R[2];Eb.length){var k=b;b=g,g=k}for(w=0;w{b.width=0,b.height=0})},drawRoundedRectPath(g,b,S,w){let C=0,x=0,k=0,A=0;typeof w=="number"?C=x=k=A=Math.min(w,b/2,S/2):(C=Math.min(w[0]||0,b/2,S/2),x=Math.min(w[1]||0,b/2,S/2),A=Math.min(w[2]||0,b/2,S/2),k=Math.min(w[3]||0,b/2,S/2)),g.moveTo(C,0),g.lineTo(b-x,0),g.arc(b-x,x,x,Math.PI*3/2,0,!1),g.lineTo(b,S-A),g.arc(b-A,S-A,A,0,Math.PI/2,!1),g.lineTo(k,S),g.arc(k,S-k,k,Math.PI/2,Math.PI,!1),g.lineTo(0,C),g.arc(C,C,C,Math.PI,Math.PI*3/2,!1)}}})(Qt);var Vt={},ze={},xe={};Object.defineProperty(xe,"__esModule",{value:!0});xe.getComponentValidator=xe.getBooleanValidator=xe.getNumberArrayValidator=xe.getFunctionValidator=xe.getStringOrGradientValidator=xe.getStringValidator=xe.getNumberOrAutoValidator=xe.getNumberOrArrayOfNumbersValidator=xe.getNumberValidator=xe.alphaComponent=xe.RGBComponent=void 0;const va=Ue,nn=Qt;function ba(e){return nn.Util._isString(e)?'"'+e+'"':Object.prototype.toString.call(e)==="[object Number]"||nn.Util._isBoolean(e)?e:Object.prototype.toString.call(e)}function lMe(e){return e>255?255:e<0?0:Math.round(e)}xe.RGBComponent=lMe;function cMe(e){return e>1?1:e<1e-4?1e-4:e}xe.alphaComponent=cMe;function uMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isNumber(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a number.'),e}}xe.getNumberValidator=uMe;function dMe(e){if(va.Konva.isUnminified)return function(t,n){let r=nn.Util._isNumber(t),i=nn.Util._isArray(t)&&t.length==e;return!r&&!i&&nn.Util.warn(ba(t)+' is a not valid value for "'+n+'" attribute. The value should be a number or Array('+e+")"),t}}xe.getNumberOrArrayOfNumbersValidator=dMe;function fMe(){if(va.Konva.isUnminified)return function(e,t){var n=nn.Util._isNumber(e),r=e==="auto";return n||r||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a number or "auto".'),e}}xe.getNumberOrAutoValidator=fMe;function hMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isString(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a string.'),e}}xe.getStringValidator=hMe;function pMe(){if(va.Konva.isUnminified)return function(e,t){const n=nn.Util._isString(e),r=Object.prototype.toString.call(e)==="[object CanvasGradient]"||e&&e.addColorStop;return n||r||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a string or a native gradient.'),e}}xe.getStringOrGradientValidator=pMe;function gMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isFunction(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a function.'),e}}xe.getFunctionValidator=gMe;function mMe(){if(va.Konva.isUnminified)return function(e,t){const n=Int8Array?Object.getPrototypeOf(Int8Array):null;return n&&e instanceof n||(nn.Util._isArray(e)?e.forEach(function(r){nn.Util._isNumber(r)||nn.Util.warn('"'+t+'" attribute has non numeric element '+r+". Make sure that all elements are numbers.")}):nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a array of numbers.')),e}}xe.getNumberArrayValidator=mMe;function yMe(){if(va.Konva.isUnminified)return function(e,t){var n=e===!0||e===!1;return n||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a boolean.'),e}}xe.getBooleanValidator=yMe;function vMe(e){if(va.Konva.isUnminified)return function(t,n){return t==null||nn.Util.isObject(t)||nn.Util.warn(ba(t)+' is a not valid value for "'+n+'" attribute. The value should be an object with properties '+e),t}}xe.getComponentValidator=vMe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Factory=void 0;const t=Qt,n=xe;var r="get",i="set";e.Factory={addGetterSetter(o,s,a,l,c){e.Factory.addGetter(o,s,a),e.Factory.addSetter(o,s,l,c),e.Factory.addOverloadedGetterSetter(o,s)},addGetter(o,s,a){var l=r+t.Util._capitalize(s);o.prototype[l]=o.prototype[l]||function(){var c=this.attrs[s];return c===void 0?a:c}},addSetter(o,s,a,l){var c=i+t.Util._capitalize(s);o.prototype[c]||e.Factory.overWriteSetter(o,s,a,l)},overWriteSetter(o,s,a,l){var c=i+t.Util._capitalize(s);o.prototype[c]=function(u){return a&&u!==void 0&&u!==null&&(u=a.call(this,u,s)),this._setAttr(s,u),l&&l.call(this),this}},addComponentsGetterSetter(o,s,a,l,c){var u=a.length,d=t.Util._capitalize,f=r+d(s),h=i+d(s),p,m;o.prototype[f]=function(){var v={};for(p=0;p{this._setAttr(s+d(b),void 0)}),this._fireChangeEvent(s,y,v),c&&c.call(this),this},e.Factory.addOverloadedGetterSetter(o,s)},addOverloadedGetterSetter(o,s){var a=t.Util._capitalize(s),l=i+a,c=r+a;o.prototype[s]=function(){return arguments.length?(this[l](arguments[0]),this):this[c]()}},addDeprecatedGetterSetter(o,s,a,l){t.Util.error("Adding deprecated "+s);var c=r+t.Util._capitalize(s),u=s+" property is deprecated and will be removed soon. Look at Konva change log for more information.";o.prototype[c]=function(){t.Util.error(u);var d=this.attrs[s];return d===void 0?a:d},e.Factory.addSetter(o,s,l,function(){t.Util.error(u)}),e.Factory.addOverloadedGetterSetter(o,s)},backCompat(o,s){t.Util.each(s,function(a,l){var c=o.prototype[l],u=r+t.Util._capitalize(a),d=i+t.Util._capitalize(a);function f(){c.apply(this,arguments),t.Util.error('"'+a+'" method is deprecated and will be removed soon. Use ""'+l+'" instead.')}o.prototype[a]=f,o.prototype[u]=f,o.prototype[d]=f})},afterSetFilter(){this._filterUpToDate=!1}}})(ze);var Ro={},ia={};Object.defineProperty(ia,"__esModule",{value:!0});ia.HitContext=ia.SceneContext=ia.Context=void 0;const XG=Qt,bMe=Ue;function _Me(e){var t=[],n=e.length,r=XG.Util,i,o;for(i=0;itypeof u=="number"?Math.floor(u):u)),o+=SMe+c.join(hR)+xMe)):(o+=a.property,t||(o+=AMe+a.val)),o+=EMe;return o}clearTrace(){this.traceArr=[]}_trace(t){var n=this.traceArr,r;n.push(t),r=n.length,r>=PMe&&n.shift()}reset(){var t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){var n=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,n.getWidth()/n.pixelRatio,n.getHeight()/n.pixelRatio)}_applyLineCap(t){const n=t.attrs.lineCap;n&&this.setAttr("lineCap",n)}_applyOpacity(t){var n=t.getAbsoluteOpacity();n!==1&&this.setAttr("globalAlpha",n)}_applyLineJoin(t){const n=t.attrs.lineJoin;n&&this.setAttr("lineJoin",n)}setAttr(t,n){this._context[t]=n}arc(t,n,r,i,o,s){this._context.arc(t,n,r,i,o,s)}arcTo(t,n,r,i,o){this._context.arcTo(t,n,r,i,o)}beginPath(){this._context.beginPath()}bezierCurveTo(t,n,r,i,o,s){this._context.bezierCurveTo(t,n,r,i,o,s)}clearRect(t,n,r,i){this._context.clearRect(t,n,r,i)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,n){var r=arguments;if(r.length===2)return this._context.createImageData(t,n);if(r.length===1)return this._context.createImageData(t)}createLinearGradient(t,n,r,i){return this._context.createLinearGradient(t,n,r,i)}createPattern(t,n){return this._context.createPattern(t,n)}createRadialGradient(t,n,r,i,o,s){return this._context.createRadialGradient(t,n,r,i,o,s)}drawImage(t,n,r,i,o,s,a,l,c){var u=arguments,d=this._context;u.length===3?d.drawImage(t,n,r):u.length===5?d.drawImage(t,n,r,i,o):u.length===9&&d.drawImage(t,n,r,i,o,s,a,l,c)}ellipse(t,n,r,i,o,s,a,l){this._context.ellipse(t,n,r,i,o,s,a,l)}isPointInPath(t,n,r,i){return r?this._context.isPointInPath(r,t,n,i):this._context.isPointInPath(t,n,i)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,n,r,i){this._context.fillRect(t,n,r,i)}strokeRect(t,n,r,i){this._context.strokeRect(t,n,r,i)}fillText(t,n,r,i){i?this._context.fillText(t,n,r,i):this._context.fillText(t,n,r)}measureText(t){return this._context.measureText(t)}getImageData(t,n,r,i){return this._context.getImageData(t,n,r,i)}lineTo(t,n){this._context.lineTo(t,n)}moveTo(t,n){this._context.moveTo(t,n)}rect(t,n,r,i){this._context.rect(t,n,r,i)}putImageData(t,n,r){this._context.putImageData(t,n,r)}quadraticCurveTo(t,n,r,i){this._context.quadraticCurveTo(t,n,r,i)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,n){this._context.scale(t,n)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):"mozDash"in this._context?this._context.mozDash=t:"webkitLineDash"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,n,r,i,o,s){this._context.setTransform(t,n,r,i,o,s)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,n,r,i){this._context.strokeText(t,n,r,i)}transform(t,n,r,i,o,s){this._context.transform(t,n,r,i,o,s)}translate(t,n){this._context.translate(t,n)}_enableTrace(){var t=this,n=pR.length,r=this.setAttr,i,o,s=function(a){var l=t[a],c;t[a]=function(){return o=_Me(Array.prototype.slice.call(arguments,0)),c=l.apply(t,arguments),t._trace({method:a,args:o}),c}};for(i=0;i{i.dragStatus==="dragging"&&(r=!0)}),r},justDragged:!1,get node(){var r;return e.DD._dragElements.forEach(i=>{r=i.node}),r},_dragElements:new Map,_drag(r){const i=[];e.DD._dragElements.forEach((o,s)=>{const{node:a}=o,l=a.getStage();l.setPointersPositions(r),o.pointerId===void 0&&(o.pointerId=n.Util._getFirstPointerId(r));const c=l._changedPointerPositions.find(f=>f.id===o.pointerId);if(c){if(o.dragStatus!=="dragging"){var u=a.dragDistance(),d=Math.max(Math.abs(c.x-o.startPointerPos.x),Math.abs(c.y-o.startPointerPos.y));if(d{o.fire("dragmove",{type:"dragmove",target:o,evt:r},!0)})},_endDragBefore(r){const i=[];e.DD._dragElements.forEach(o=>{const{node:s}=o,a=s.getStage();if(r&&a.setPointersPositions(r),!a._changedPointerPositions.find(u=>u.id===o.pointerId))return;(o.dragStatus==="dragging"||o.dragStatus==="stopped")&&(e.DD.justDragged=!0,t.Konva._mouseListenClick=!1,t.Konva._touchListenClick=!1,t.Konva._pointerListenClick=!1,o.dragStatus="stopped");const c=o.node.getLayer()||o.node instanceof t.Konva.Stage&&o.node;c&&i.indexOf(c)===-1&&i.push(c)}),i.forEach(o=>{o.draw()})},_endDragAfter(r){e.DD._dragElements.forEach((i,o)=>{i.dragStatus==="stopped"&&i.node.fire("dragend",{type:"dragend",target:i.node,evt:r},!0),i.dragStatus!=="dragging"&&e.DD._dragElements.delete(o)})}},t.Konva.isBrowser&&(window.addEventListener("mouseup",e.DD._endDragBefore,!0),window.addEventListener("touchend",e.DD._endDragBefore,!0),window.addEventListener("mousemove",e.DD._drag),window.addEventListener("touchmove",e.DD._drag),window.addEventListener("mouseup",e.DD._endDragAfter,!1),window.addEventListener("touchend",e.DD._endDragAfter,!1))})(US);Object.defineProperty(Vt,"__esModule",{value:!0});Vt.Node=void 0;const We=Qt,t0=ze,Cy=Ro,Jl=Ue,Bi=US,dn=xe;var Sv="absoluteOpacity",Ey="allEventListeners",Ds="absoluteTransform",gR="absoluteScale",ec="canvas",DMe="Change",LMe="children",BMe="konva",q3="listening",mR="mouseenter",yR="mouseleave",vR="set",bR="Shape",xv=" ",_R="stage",Fa="transform",zMe="Stage",K3="visible",jMe=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(xv);let VMe=1;class $e{constructor(t){this._id=VMe++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){(t===Fa||t===Ds)&&this._cache.get(t)?this._cache.get(t).dirty=!0:t?this._cache.delete(t):this._cache.clear()}_getCache(t,n){var r=this._cache.get(t),i=t===Fa||t===Ds,o=r===void 0||i&&r.dirty===!0;return o&&(r=n.call(this),this._cache.set(t,r)),r}_calculate(t,n,r){if(!this._attachedDepsListeners.get(t)){const i=n.map(o=>o+"Change.konva").join(xv);this.on(i,()=>{this._clearCache(t)}),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,r)}_getCanvasCache(){return this._cache.get(ec)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===Ds&&this.fire("absoluteTransformChange")}clearCache(){if(this._cache.has(ec)){const{scene:t,filter:n,hit:r}=this._cache.get(ec);We.Util.releaseCanvas(t,n,r),this._cache.delete(ec)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){var n=t||{},r={};(n.x===void 0||n.y===void 0||n.width===void 0||n.height===void 0)&&(r=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));var i=Math.ceil(n.width||r.width),o=Math.ceil(n.height||r.height),s=n.pixelRatio,a=n.x===void 0?Math.floor(r.x):n.x,l=n.y===void 0?Math.floor(r.y):n.y,c=n.offset||0,u=n.drawBorder||!1,d=n.hitCanvasPixelRatio||1;if(!i||!o){We.Util.error("Can not cache the node. Width or height of the node equals 0. Caching is skipped.");return}i+=c*2+1,o+=c*2+1,a-=c,l-=c;var f=new Cy.SceneCanvas({pixelRatio:s,width:i,height:o}),h=new Cy.SceneCanvas({pixelRatio:s,width:0,height:0,willReadFrequently:!0}),p=new Cy.HitCanvas({pixelRatio:d,width:i,height:o}),m=f.getContext(),_=p.getContext();return p.isCache=!0,f.isCache=!0,this._cache.delete(ec),this._filterUpToDate=!1,n.imageSmoothingEnabled===!1&&(f.getContext()._context.imageSmoothingEnabled=!1,h.getContext()._context.imageSmoothingEnabled=!1),m.save(),_.save(),m.translate(-a,-l),_.translate(-a,-l),this._isUnderCache=!0,this._clearSelfAndDescendantCache(Sv),this._clearSelfAndDescendantCache(gR),this.drawScene(f,this),this.drawHit(p,this),this._isUnderCache=!1,m.restore(),_.restore(),u&&(m.save(),m.beginPath(),m.rect(0,0,i,o),m.closePath(),m.setAttr("strokeStyle","red"),m.setAttr("lineWidth",5),m.stroke(),m.restore()),this._cache.set(ec,{scene:f,filter:h,hit:p,x:a,y:l}),this._requestDraw(),this}isCached(){return this._cache.has(ec)}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_transformedRect(t,n){var r=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}],i=1/0,o=1/0,s=-1/0,a=-1/0,l=this.getAbsoluteTransform(n);return r.forEach(function(c){var u=l.point(c);i===void 0&&(i=s=u.x,o=a=u.y),i=Math.min(i,u.x),o=Math.min(o,u.y),s=Math.max(s,u.x),a=Math.max(a,u.y)}),{x:i,y:o,width:s-i,height:a-o}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const n=this._getCanvasCache();t.translate(n.x,n.y);var r=this._getCachedSceneCanvas(),i=r.pixelRatio;t.drawImage(r._canvas,0,0,r.width/i,r.height/i),t.restore()}_drawCachedHitCanvas(t){var n=this._getCanvasCache(),r=n.hit;t.save(),t.translate(n.x,n.y),t.drawImage(r._canvas,0,0,r.width/r.pixelRatio,r.height/r.pixelRatio),t.restore()}_getCachedSceneCanvas(){var t=this.filters(),n=this._getCanvasCache(),r=n.scene,i=n.filter,o=i.getContext(),s,a,l,c;if(t){if(!this._filterUpToDate){var u=r.pixelRatio;i.setSize(r.width/r.pixelRatio,r.height/r.pixelRatio);try{for(s=t.length,o.clear(),o.drawImage(r._canvas,0,0,r.getWidth()/u,r.getHeight()/u),a=o.getImageData(0,0,i.getWidth(),i.getHeight()),l=0;l{var n,r;if(!t)return this;for(n in t)n!==LMe&&(r=vR+We.Util._capitalize(n),We.Util._isFunction(this[r])?this[r](t[n]):this._setAttr(n,t[n]))}),this}isListening(){return this._getCache(q3,this._isListening)}_isListening(t){if(!this.listening())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isListening(t):!0}isVisible(){return this._getCache(K3,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isVisible(t):!0}shouldDrawHit(t,n=!1){if(t)return this._isVisible(t)&&this._isListening(t);var r=this.getLayer(),i=!1;Bi.DD._dragElements.forEach(s=>{s.dragStatus==="dragging"&&(s.node.nodeType==="Stage"||s.node.getLayer()===r)&&(i=!0)});var o=!n&&!Jl.Konva.hitOnDragEnabled&&i;return this.isListening()&&this.isVisible()&&!o}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){var t=this.getDepth(),n=this,r=0,i,o,s,a;function l(u){for(i=[],o=u.length,s=0;s0&&i[0].getDepth()<=t&&l(i)}const c=this.getStage();return n.nodeType!==zMe&&c&&l(c.getChildren()),r}getDepth(){for(var t=0,n=this.parent;n;)t++,n=n.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(Fa),this._clearSelfAndDescendantCache(Ds)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges(()=>{this.x(t.x),this.y(t.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const t=this.getStage();if(!t)return null;var n=t.getPointerPosition();if(!n)return null;var r=this.getAbsoluteTransform().copy();return r.invert(),r.point(n)}getAbsolutePosition(t){let n=!1,r=this.parent;for(;r;){if(r.isCached()){n=!0;break}r=r.parent}n&&!t&&(t=!0);var i=this.getAbsoluteTransform(t).getMatrix(),o=new We.Transform,s=this.offset();return o.m=i.slice(),o.translate(s.x,s.y),o.getTranslation()}setAbsolutePosition(t){const{x:n,y:r,...i}=this._clearTransform();this.attrs.x=n,this.attrs.y=r,this._clearCache(Fa);var o=this._getAbsoluteTransform().copy();return o.invert(),o.translate(t.x,t.y),t={x:this.attrs.x+o.getTranslation().x,y:this.attrs.y+o.getTranslation().y},this._setTransform(i),this.setPosition({x:t.x,y:t.y}),this._clearCache(Fa),this._clearSelfAndDescendantCache(Ds),this}_setTransform(t){var n;for(n in t)this.attrs[n]=t[n]}_clearTransform(){var t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){var n=t.x,r=t.y,i=this.x(),o=this.y();return n!==void 0&&(i+=n),r!==void 0&&(o+=r),this.setPosition({x:i,y:o}),this}_eachAncestorReverse(t,n){var r=[],i=this.getParent(),o,s;if(!(n&&n._id===this._id)){for(r.unshift(this);i&&(!n||i._id!==n._id);)r.unshift(i),i=i.parent;for(o=r.length,s=0;s0?(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0):!1}moveToBottom(){if(!this.parent)return We.Util.warn("Node has no parent. moveToBottom function is ignored."),!1;var t=this.index;return t>0?(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0):!1}setZIndex(t){if(!this.parent)return We.Util.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&We.Util.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");var n=this.index;return this.parent.children.splice(n,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(Sv,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){var t=this.opacity(),n=this.getParent();return n&&!n._isUnderCache&&(t*=n.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){var t={},n=this.getAttrs(),r,i,o,s,a;t.attrs={};for(r in n)i=n[r],a=We.Util.isObject(i)&&!We.Util._isPlainObject(i)&&!We.Util._isArray(i),!a&&(o=typeof this[r]=="function"&&this[r],delete n[r],s=o?o.call(this):null,n[r]=i,s!==i&&(t.attrs[r]=i));return t.className=this.getClassName(),We.Util._prepareToStringify(t)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,n,r){var i=[];n&&this._isMatch(t)&&i.push(this);for(var o=this.parent;o;){if(o===r)return i;o._isMatch(t)&&i.push(o),o=o.parent}return i}isAncestorOf(t){return!1}findAncestor(t,n,r){return this.findAncestors(t,n,r)[0]}_isMatch(t){if(!t)return!1;if(typeof t=="function")return t(this);var n=t.replace(/ /g,"").split(","),r=n.length,i,o;for(i=0;i{try{const i=t==null?void 0:t.callback;i&&delete t.callback,We.Util._urlToImage(this.toDataURL(t),function(o){n(o),i==null||i(o)})}catch(i){r(i)}})}toBlob(t){return new Promise((n,r)=>{try{const i=t==null?void 0:t.callback;i&&delete t.callback,this.toCanvas(t).toBlob(o=>{n(o),i==null||i(o)})}catch(i){r(i)}})}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return this.attrs.dragDistance!==void 0?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():Jl.Konva.dragDistance}_off(t,n,r){var i=this.eventListeners[t],o,s,a;for(o=0;o=0;if(r&&!this.isDragging()){var i=!1;Bi.DD._dragElements.forEach(o=>{this.isAncestorOf(o.node)&&(i=!0)}),i||this._createDragElement(t)}})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();var t=this.getStage();if(!t)return;const n=Bi.DD._dragElements.get(this._id),r=n&&n.dragStatus==="dragging",i=n&&n.dragStatus==="ready";r?this.stopDrag():i&&Bi.DD._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const n=this.getStage();if(!n)return!1;const r={x:-t.x,y:-t.y,width:n.width()+2*t.x,height:n.height()+2*t.y};return We.Util.haveIntersection(r,this.getClientRect())}static create(t,n){return We.Util._isString(t)&&(t=JSON.parse(t)),this._createNode(t,n)}static _createNode(t,n){var r=$e.prototype.getClassName.call(t),i=t.children,o,s,a;n&&(t.attrs.container=n),Jl.Konva[r]||(We.Util.warn('Can not find a node with class name "'+r+'". Fallback to "Shape".'),r="Shape");const l=Jl.Konva[r];if(o=new l(t.attrs),i)for(s=i.length,a=0;a0}removeChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.destroy()}),this.children=[],this._requestDraw(),this}add(...t){if(t.length===0)return this;if(t.length>1){for(var n=0;n0?n[0]:void 0}_generalFind(t,n){var r=[];return this._descendants(i=>{const o=i._isMatch(t);return o&&r.push(i),!!(o&&n)}),r}_descendants(t){let n=!1;const r=this.getChildren();for(const i of r){if(n=t(i),n)return!0;if(i.hasChildren()&&(n=i._descendants(t),n))return!0}return!1}toObject(){var t=Jw.Node.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach(n=>{t.children.push(n.toObject())}),t}isAncestorOf(t){for(var n=t.getParent();n;){if(n._id===this._id)return!0;n=n.getParent()}return!1}clone(t){var n=Jw.Node.prototype.clone.call(this,t);return this.getChildren().forEach(function(r){n.add(r.clone())}),n}getAllIntersections(t){var n=[];return this.find("Shape").forEach(r=>{r.isVisible()&&r.intersects(t)&&n.push(r)}),n}_clearSelfAndDescendantCache(t){var n;super._clearSelfAndDescendantCache(t),!this.isCached()&&((n=this.children)===null||n===void 0||n.forEach(function(r){r._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;(t=this.children)===null||t===void 0||t.forEach(function(n,r){n.index=r}),this._requestDraw()}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas(),o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.scene,l=i&&i.isCache;if(!this.isVisible()&&!l)return this;if(a){o.save();var c=this.getAbsoluteTransform(n).getMatrix();o.transform(c[0],c[1],c[2],c[3],c[4],c[5]),this._drawCachedSceneCanvas(o),o.restore()}else this._drawChildren("drawScene",i,n);return this}drawHit(t,n){if(!this.shouldDrawHit(n))return this;var r=this.getLayer(),i=t||r&&r.hitCanvas,o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.hit;if(a){o.save();var l=this.getAbsoluteTransform(n).getMatrix();o.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedHitCanvas(o),o.restore()}else this._drawChildren("drawHit",i,n);return this}_drawChildren(t,n,r){var i,o=n&&n.getContext(),s=this.clipWidth(),a=this.clipHeight(),l=this.clipFunc(),c=s&&a||l;const u=r===this;if(c){o.save();var d=this.getAbsoluteTransform(r),f=d.getMatrix();o.transform(f[0],f[1],f[2],f[3],f[4],f[5]),o.beginPath();let _;if(l)_=l.call(this,o,this);else{var h=this.clipX(),p=this.clipY();o.rect(h,p,s,a)}o.clip.apply(o,_),f=d.copy().invert().getMatrix(),o.transform(f[0],f[1],f[2],f[3],f[4],f[5])}var m=!u&&this.globalCompositeOperation()!=="source-over"&&t==="drawScene";m&&(o.save(),o._applyGlobalCompositeOperation(this)),(i=this.children)===null||i===void 0||i.forEach(function(_){_[t](n,r)}),m&&o.restore(),c&&o.restore()}getClientRect(t={}){var n,r=t.skipTransform,i=t.relativeTo,o,s,a,l,c={x:1/0,y:1/0,width:0,height:0},u=this;(n=this.children)===null||n===void 0||n.forEach(function(m){if(m.visible()){var _=m.getClientRect({relativeTo:u,skipShadow:t.skipShadow,skipStroke:t.skipStroke});_.width===0&&_.height===0||(o===void 0?(o=_.x,s=_.y,a=_.x+_.width,l=_.y+_.height):(o=Math.min(o,_.x),s=Math.min(s,_.y),a=Math.max(a,_.x+_.width),l=Math.max(l,_.y+_.height)))}});for(var d=this.find("Shape"),f=!1,h=0;hee.indexOf("pointer")>=0?"pointer":ee.indexOf("touch")>=0?"touch":"mouse",V=ee=>{const j=z(ee);if(j==="pointer")return i.Konva.pointerEventsEnabled&&N.pointer;if(j==="touch")return N.touch;if(j==="mouse")return N.mouse};function H(ee={}){return(ee.clipFunc||ee.clipWidth||ee.clipHeight)&&t.Util.warn("Stage does not support clipping. Please use clip for Layers or Groups."),ee}const X="Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);";e.stages=[];class te extends r.Container{constructor(j){super(H(j)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),e.stages.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",()=>{H(this.attrs)}),this._checkVisibility()}_validateAdd(j){const q=j.getType()==="Layer",Z=j.getType()==="FastLayer";q||Z||t.Util.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const j=this.visible()?"":"none";this.content.style.display=j}setContainer(j){if(typeof j===u){if(j.charAt(0)==="."){var q=j.slice(1);j=document.getElementsByClassName(q)[0]}else{var Z;j.charAt(0)!=="#"?Z=j:Z=j.slice(1),j=document.getElementById(Z)}if(!j)throw"Can not find container in document with id "+Z}return this._setAttr("container",j),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),j.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){var j=this.children,q=j.length,Z;for(Z=0;Z-1&&e.stages.splice(q,1),t.Util.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const j=this._pointerPositions[0]||this._changedPointerPositions[0];return j?{x:j.x,y:j.y}:(t.Util.warn(X),null)}_getPointerById(j){return this._pointerPositions.find(q=>q.id===j)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(j){j=j||{},j.x=j.x||0,j.y=j.y||0,j.width=j.width||this.width(),j.height=j.height||this.height();var q=new o.SceneCanvas({width:j.width,height:j.height,pixelRatio:j.pixelRatio||1}),Z=q.getContext()._context,oe=this.children;return(j.x||j.y)&&Z.translate(-1*j.x,-1*j.y),oe.forEach(function(be){if(be.isVisible()){var Me=be._toKonvaCanvas(j);Z.drawImage(Me._canvas,j.x,j.y,Me.getWidth()/Me.getPixelRatio(),Me.getHeight()/Me.getPixelRatio())}}),q}getIntersection(j){if(!j)return null;var q=this.children,Z=q.length,oe=Z-1,be;for(be=oe;be>=0;be--){const Me=q[be].getIntersection(j);if(Me)return Me}return null}_resizeDOM(){var j=this.width(),q=this.height();this.content&&(this.content.style.width=j+d,this.content.style.height=q+d),this.bufferCanvas.setSize(j,q),this.bufferHitCanvas.setSize(j,q),this.children.forEach(Z=>{Z.setSize({width:j,height:q}),Z.draw()})}add(j,...q){if(arguments.length>1){for(var Z=0;Z$&&t.Util.warn("The stage has "+oe+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),j.setSize({width:this.width(),height:this.height()}),j.draw(),i.Konva.isBrowser&&this.content.appendChild(j.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(j){return l.hasPointerCapture(j,this)}setPointerCapture(j){l.setPointerCapture(j,this)}releaseCapture(j){l.releaseCapture(j,this)}getLayers(){return this.children}_bindContentEvents(){i.Konva.isBrowser&&D.forEach(([j,q])=>{this.content.addEventListener(j,Z=>{this[q](Z)},{passive:!1})})}_pointerenter(j){this.setPointersPositions(j);const q=V(j.type);q&&this._fire(q.pointerenter,{evt:j,target:this,currentTarget:this})}_pointerover(j){this.setPointersPositions(j);const q=V(j.type);q&&this._fire(q.pointerover,{evt:j,target:this,currentTarget:this})}_getTargetShape(j){let q=this[j+"targetShape"];return q&&!q.getStage()&&(q=null),q}_pointerleave(j){const q=V(j.type),Z=z(j.type);if(q){this.setPointersPositions(j);var oe=this._getTargetShape(Z),be=!s.DD.isDragging||i.Konva.hitOnDragEnabled;oe&&be?(oe._fireAndBubble(q.pointerout,{evt:j}),oe._fireAndBubble(q.pointerleave,{evt:j}),this._fire(q.pointerleave,{evt:j,target:this,currentTarget:this}),this[Z+"targetShape"]=null):be&&(this._fire(q.pointerleave,{evt:j,target:this,currentTarget:this}),this._fire(q.pointerout,{evt:j,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}}_pointerdown(j){const q=V(j.type),Z=z(j.type);if(q){this.setPointersPositions(j);var oe=!1;this._changedPointerPositions.forEach(be=>{var Me=this.getIntersection(be);if(s.DD.justDragged=!1,i.Konva["_"+Z+"ListenClick"]=!0,!Me||!Me.isListening())return;i.Konva.capturePointerEventsEnabled&&Me.setPointerCapture(be.id),this[Z+"ClickStartShape"]=Me,Me._fireAndBubble(q.pointerdown,{evt:j,pointerId:be.id}),oe=!0;const lt=j.type.indexOf("touch")>=0;Me.preventDefault()&&j.cancelable&<&&j.preventDefault()}),oe||this._fire(q.pointerdown,{evt:j,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}}_pointermove(j){const q=V(j.type),Z=z(j.type);if(!q)return;s.DD.isDragging&&s.DD.node.preventDefault()&&j.cancelable&&j.preventDefault(),this.setPointersPositions(j);var oe=!s.DD.isDragging||i.Konva.hitOnDragEnabled;if(!oe)return;var be={};let Me=!1;var lt=this._getTargetShape(Z);this._changedPointerPositions.forEach(Le=>{const we=l.getCapturedShape(Le.id)||this.getIntersection(Le),pt=Le.id,vt={evt:j,pointerId:pt};var Ce=lt!==we;if(Ce&<&&(lt._fireAndBubble(q.pointerout,{...vt},we),lt._fireAndBubble(q.pointerleave,{...vt},we)),we){if(be[we._id])return;be[we._id]=!0}we&&we.isListening()?(Me=!0,Ce&&(we._fireAndBubble(q.pointerover,{...vt},lt),we._fireAndBubble(q.pointerenter,{...vt},lt),this[Z+"targetShape"]=we),we._fireAndBubble(q.pointermove,{...vt})):lt&&(this._fire(q.pointerover,{evt:j,target:this,currentTarget:this,pointerId:pt}),this[Z+"targetShape"]=null)}),Me||this._fire(q.pointermove,{evt:j,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(j){const q=V(j.type),Z=z(j.type);if(!q)return;this.setPointersPositions(j);const oe=this[Z+"ClickStartShape"],be=this[Z+"ClickEndShape"];var Me={};let lt=!1;this._changedPointerPositions.forEach(Le=>{const we=l.getCapturedShape(Le.id)||this.getIntersection(Le);if(we){if(we.releaseCapture(Le.id),Me[we._id])return;Me[we._id]=!0}const pt=Le.id,vt={evt:j,pointerId:pt};let Ce=!1;i.Konva["_"+Z+"InDblClickWindow"]?(Ce=!0,clearTimeout(this[Z+"DblTimeout"])):s.DD.justDragged||(i.Konva["_"+Z+"InDblClickWindow"]=!0,clearTimeout(this[Z+"DblTimeout"])),this[Z+"DblTimeout"]=setTimeout(function(){i.Konva["_"+Z+"InDblClickWindow"]=!1},i.Konva.dblClickWindow),we&&we.isListening()?(lt=!0,this[Z+"ClickEndShape"]=we,we._fireAndBubble(q.pointerup,{...vt}),i.Konva["_"+Z+"ListenClick"]&&oe&&oe===we&&(we._fireAndBubble(q.pointerclick,{...vt}),Ce&&be&&be===we&&we._fireAndBubble(q.pointerdblclick,{...vt}))):(this[Z+"ClickEndShape"]=null,i.Konva["_"+Z+"ListenClick"]&&this._fire(q.pointerclick,{evt:j,target:this,currentTarget:this,pointerId:pt}),Ce&&this._fire(q.pointerdblclick,{evt:j,target:this,currentTarget:this,pointerId:pt}))}),lt||this._fire(q.pointerup,{evt:j,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),i.Konva["_"+Z+"ListenClick"]=!1,j.cancelable&&Z!=="touch"&&j.preventDefault()}_contextmenu(j){this.setPointersPositions(j);var q=this.getIntersection(this.getPointerPosition());q&&q.isListening()?q._fireAndBubble(L,{evt:j}):this._fire(L,{evt:j,target:this,currentTarget:this})}_wheel(j){this.setPointersPositions(j);var q=this.getIntersection(this.getPointerPosition());q&&q.isListening()?q._fireAndBubble(F,{evt:j}):this._fire(F,{evt:j,target:this,currentTarget:this})}_pointercancel(j){this.setPointersPositions(j);const q=l.getCapturedShape(j.pointerId)||this.getIntersection(this.getPointerPosition());q&&q._fireAndBubble(S,l.createEvent(j)),l.releaseCapture(j.pointerId)}_lostpointercapture(j){l.releaseCapture(j.pointerId)}setPointersPositions(j){var q=this._getContentPosition(),Z=null,oe=null;j=j||window.event,j.touches!==void 0?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(j.touches,be=>{this._pointerPositions.push({id:be.identifier,x:(be.clientX-q.left)/q.scaleX,y:(be.clientY-q.top)/q.scaleY})}),Array.prototype.forEach.call(j.changedTouches||j.touches,be=>{this._changedPointerPositions.push({id:be.identifier,x:(be.clientX-q.left)/q.scaleX,y:(be.clientY-q.top)/q.scaleY})})):(Z=(j.clientX-q.left)/q.scaleX,oe=(j.clientY-q.top)/q.scaleY,this.pointerPos={x:Z,y:oe},this._pointerPositions=[{x:Z,y:oe,id:t.Util._getFirstPointerId(j)}],this._changedPointerPositions=[{x:Z,y:oe,id:t.Util._getFirstPointerId(j)}])}_setPointerPosition(j){t.Util.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(j)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};var j=this.content.getBoundingClientRect();return{top:j.top,left:j.left,scaleX:j.width/this.content.clientWidth||1,scaleY:j.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new o.SceneCanvas({width:this.width(),height:this.height()}),this.bufferHitCanvas=new o.HitCanvas({pixelRatio:1,width:this.width(),height:this.height()}),!!i.Konva.isBrowser){var j=this.container();if(!j)throw"Stage has no container. A container is required.";j.innerHTML="",this.content=document.createElement("div"),this.content.style.position="relative",this.content.style.userSelect="none",this.content.className="konvajs-content",this.content.setAttribute("role","presentation"),j.appendChild(this.content),this._resizeDOM()}}cache(){return t.Util.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(j){j.batchDraw()}),this}}e.Stage=te,te.prototype.nodeType=c,(0,a._registerNode)(te),n.Factory.addGetterSetter(te,"container")})(ZG);var n0={},An={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Shape=e.shapes=void 0;const t=Ue,n=Qt,r=ze,i=Vt,o=xe,s=Ue,a=mi;var l="hasShadow",c="shadowRGBA",u="patternImage",d="linearGradient",f="radialGradient";let h;function p(){return h||(h=n.Util.createCanvasElement().getContext("2d"),h)}e.shapes={};function m(k){const A=this.attrs.fillRule;A?k.fill(A):k.fill()}function _(k){k.stroke()}function v(k){k.fill()}function y(k){k.stroke()}function g(){this._clearCache(l)}function b(){this._clearCache(c)}function S(){this._clearCache(u)}function w(){this._clearCache(d)}function C(){this._clearCache(f)}class x extends i.Node{constructor(A){super(A);let R;for(;R=n.Util.getRandomColor(),!(R&&!(R in e.shapes)););this.colorKey=R,e.shapes[R]=this}getContext(){return n.Util.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return n.Util.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(l,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&this.shadowOpacity()!==0&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(u,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){var A=p();const R=A.createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat");if(R&&R.setTransform){const L=new n.Transform;L.translate(this.fillPatternX(),this.fillPatternY()),L.rotate(t.Konva.getAngle(this.fillPatternRotation())),L.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),L.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const M=L.getMatrix(),E=typeof DOMMatrix>"u"?{a:M[0],b:M[1],c:M[2],d:M[3],e:M[4],f:M[5]}:new DOMMatrix(M);R.setTransform(E)}return R}}_getLinearGradient(){return this._getCache(d,this.__getLinearGradient)}__getLinearGradient(){var A=this.fillLinearGradientColorStops();if(A){for(var R=p(),L=this.fillLinearGradientStartPoint(),M=this.fillLinearGradientEndPoint(),E=R.createLinearGradient(L.x,L.y,M.x,M.y),P=0;Pthis.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate("hasStroke",["strokeEnabled","strokeWidth","stroke","strokeLinearGradientColorStops"],()=>this.strokeEnabled()&&this.strokeWidth()&&!!(this.stroke()||this.strokeLinearGradientColorStops()))}hasHitStroke(){const A=this.hitStrokeWidth();return A==="auto"?this.hasStroke():this.strokeEnabled()&&!!A}intersects(A){var R=this.getStage();if(!R)return!1;const L=R.bufferHitCanvas;return L.getContext().clear(),this.drawHit(L,void 0,!0),L.context.getImageData(Math.round(A.x),Math.round(A.y),1,1).data[3]>0}destroy(){return i.Node.prototype.destroy.call(this),delete e.shapes[this.colorKey],delete this.colorKey,this}_useBufferCanvas(A){var R;if(!this.getStage()||!((R=this.attrs.perfectDrawEnabled)!==null&&R!==void 0?R:!0))return!1;const M=A||this.hasFill(),E=this.hasStroke(),P=this.getAbsoluteOpacity()!==1;if(M&&E&&P)return!0;const O=this.hasShadow(),F=this.shadowForStrokeEnabled();return!!(M&&E&&O&&F)}setStrokeHitEnabled(A){n.Util.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),A?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return this.hitStrokeWidth()!==0}getSelfRect(){var A=this.size();return{x:this._centroid?-A.width/2:0,y:this._centroid?-A.height/2:0,width:A.width,height:A.height}}getClientRect(A={}){const R=A.skipTransform,L=A.relativeTo,M=this.getSelfRect(),P=!A.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,O=M.width+P,F=M.height+P,$=!A.skipShadow&&this.hasShadow(),D=$?this.shadowOffsetX():0,N=$?this.shadowOffsetY():0,z=O+Math.abs(D),V=F+Math.abs(N),H=$&&this.shadowBlur()||0,X=z+H*2,te=V+H*2,ee={width:X,height:te,x:-(P/2+H)+Math.min(D,0)+M.x,y:-(P/2+H)+Math.min(N,0)+M.y};return R?ee:this._transformedRect(ee,L)}drawScene(A,R){var L=this.getLayer(),M=A||L.getCanvas(),E=M.getContext(),P=this._getCanvasCache(),O=this.getSceneFunc(),F=this.hasShadow(),$,D,N,z=M.isCache,V=R===this;if(!this.isVisible()&&!V)return this;if(P){E.save();var H=this.getAbsoluteTransform(R).getMatrix();return E.transform(H[0],H[1],H[2],H[3],H[4],H[5]),this._drawCachedSceneCanvas(E),E.restore(),this}if(!O)return this;if(E.save(),this._useBufferCanvas()&&!z){$=this.getStage(),D=$.bufferCanvas,N=D.getContext(),N.clear(),N.save(),N._applyLineJoin(this);var X=this.getAbsoluteTransform(R).getMatrix();N.transform(X[0],X[1],X[2],X[3],X[4],X[5]),O.call(this,N,this),N.restore();var te=D.pixelRatio;F&&E._applyShadow(this),E._applyOpacity(this),E._applyGlobalCompositeOperation(this),E.drawImage(D._canvas,0,0,D.width/te,D.height/te)}else{if(E._applyLineJoin(this),!V){var X=this.getAbsoluteTransform(R).getMatrix();E.transform(X[0],X[1],X[2],X[3],X[4],X[5]),E._applyOpacity(this),E._applyGlobalCompositeOperation(this)}F&&E._applyShadow(this),O.call(this,E,this)}return E.restore(),this}drawHit(A,R,L=!1){if(!this.shouldDrawHit(R,L))return this;var M=this.getLayer(),E=A||M.hitCanvas,P=E&&E.getContext(),O=this.hitFunc()||this.sceneFunc(),F=this._getCanvasCache(),$=F&&F.hit;if(this.colorKey||n.Util.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),$){P.save();var D=this.getAbsoluteTransform(R).getMatrix();return P.transform(D[0],D[1],D[2],D[3],D[4],D[5]),this._drawCachedHitCanvas(P),P.restore(),this}if(!O)return this;if(P.save(),P._applyLineJoin(this),!(this===R)){var z=this.getAbsoluteTransform(R).getMatrix();P.transform(z[0],z[1],z[2],z[3],z[4],z[5])}return O.call(this,P,this),P.restore(),this}drawHitFromCache(A=0){var R=this._getCanvasCache(),L=this._getCachedSceneCanvas(),M=R.hit,E=M.getContext(),P=M.getWidth(),O=M.getHeight(),F,$,D,N,z,V;E.clear(),E.drawImage(L._canvas,0,0,P,O);try{for(F=E.getImageData(0,0,P,O),$=F.data,D=$.length,N=n.Util._hexToRgb(this.colorKey),z=0;zA?($[z]=N.r,$[z+1]=N.g,$[z+2]=N.b,$[z+3]=255):$[z+3]=0;E.putImageData(F,0,0)}catch(H){n.Util.error("Unable to draw hit graph from cached scene canvas. "+H.message)}return this}hasPointerCapture(A){return a.hasPointerCapture(A,this)}setPointerCapture(A){a.setPointerCapture(A,this)}releaseCapture(A){a.releaseCapture(A,this)}}e.Shape=x,x.prototype._fillFunc=m,x.prototype._strokeFunc=_,x.prototype._fillFuncHit=v,x.prototype._strokeFuncHit=y,x.prototype._centroid=!1,x.prototype.nodeType="Shape",(0,s._registerNode)(x),x.prototype.eventListeners={},x.prototype.on.call(x.prototype,"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",g),x.prototype.on.call(x.prototype,"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",b),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",S),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",w),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",C),r.Factory.addGetterSetter(x,"stroke",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(x,"strokeWidth",2,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillAfterStrokeEnabled",!1),r.Factory.addGetterSetter(x,"hitStrokeWidth","auto",(0,o.getNumberOrAutoValidator)()),r.Factory.addGetterSetter(x,"strokeHitEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"perfectDrawEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"shadowForStrokeEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"lineJoin"),r.Factory.addGetterSetter(x,"lineCap"),r.Factory.addGetterSetter(x,"sceneFunc"),r.Factory.addGetterSetter(x,"hitFunc"),r.Factory.addGetterSetter(x,"dash"),r.Factory.addGetterSetter(x,"dashOffset",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowColor",void 0,(0,o.getStringValidator)()),r.Factory.addGetterSetter(x,"shadowBlur",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowOpacity",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"shadowOffset",["x","y"]),r.Factory.addGetterSetter(x,"shadowOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternImage"),r.Factory.addGetterSetter(x,"fill",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(x,"fillPatternX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillLinearGradientColorStops"),r.Factory.addGetterSetter(x,"strokeLinearGradientColorStops"),r.Factory.addGetterSetter(x,"fillRadialGradientStartRadius",0),r.Factory.addGetterSetter(x,"fillRadialGradientEndRadius",0),r.Factory.addGetterSetter(x,"fillRadialGradientColorStops"),r.Factory.addGetterSetter(x,"fillPatternRepeat","repeat"),r.Factory.addGetterSetter(x,"fillEnabled",!0),r.Factory.addGetterSetter(x,"strokeEnabled",!0),r.Factory.addGetterSetter(x,"shadowEnabled",!0),r.Factory.addGetterSetter(x,"dashEnabled",!0),r.Factory.addGetterSetter(x,"strokeScaleEnabled",!0),r.Factory.addGetterSetter(x,"fillPriority","color"),r.Factory.addComponentsGetterSetter(x,"fillPatternOffset",["x","y"]),r.Factory.addGetterSetter(x,"fillPatternOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"fillPatternScale",["x","y"]),r.Factory.addGetterSetter(x,"fillPatternScaleX",1,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternScaleY",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"fillLinearGradientStartPoint",["x","y"]),r.Factory.addComponentsGetterSetter(x,"strokeLinearGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillLinearGradientStartPointX",0),r.Factory.addGetterSetter(x,"strokeLinearGradientStartPointX",0),r.Factory.addGetterSetter(x,"fillLinearGradientStartPointY",0),r.Factory.addGetterSetter(x,"strokeLinearGradientStartPointY",0),r.Factory.addComponentsGetterSetter(x,"fillLinearGradientEndPoint",["x","y"]),r.Factory.addComponentsGetterSetter(x,"strokeLinearGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillLinearGradientEndPointX",0),r.Factory.addGetterSetter(x,"strokeLinearGradientEndPointX",0),r.Factory.addGetterSetter(x,"fillLinearGradientEndPointY",0),r.Factory.addGetterSetter(x,"strokeLinearGradientEndPointY",0),r.Factory.addComponentsGetterSetter(x,"fillRadialGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillRadialGradientStartPointX",0),r.Factory.addGetterSetter(x,"fillRadialGradientStartPointY",0),r.Factory.addComponentsGetterSetter(x,"fillRadialGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillRadialGradientEndPointX",0),r.Factory.addGetterSetter(x,"fillRadialGradientEndPointY",0),r.Factory.addGetterSetter(x,"fillPatternRotation",0),r.Factory.addGetterSetter(x,"fillRule",void 0,(0,o.getStringValidator)()),r.Factory.backCompat(x,{dashArray:"dash",getDashArray:"getDash",setDashArray:"getDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"})})(An);Object.defineProperty(n0,"__esModule",{value:!0});n0.Layer=void 0;const Fs=Qt,eC=pu,zu=Vt,DA=ze,SR=Ro,qMe=xe,KMe=An,XMe=Ue;var QMe="#",YMe="beforeDraw",ZMe="draw",tH=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],JMe=tH.length;class zf extends eC.Container{constructor(t){super(t),this.canvas=new SR.SceneCanvas,this.hitCanvas=new SR.HitCanvas({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);var n=this.getStage();return n&&n.content&&(n.content.removeChild(this.getNativeCanvasElement()),t{this.draw(),this._waitingForDraw=!1})),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;for(var n=1,r=!1;;){for(let i=0;i0)return{antialiased:!0};return{}}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas();return this._fire(YMe,{node:this}),this.clearBeforeDraw()&&i.getContext().clear(),eC.Container.prototype.drawScene.call(this,i,n),this._fire(ZMe,{node:this}),this}drawHit(t,n){var r=this.getLayer(),i=t||r&&r.hitCanvas;return r&&r.clearBeforeDraw()&&r.getHitCanvas().getContext().clear(),eC.Container.prototype.drawHit.call(this,i,n),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){Fs.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return Fs.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(!(!this.parent||!this.parent.content)){var t=this.parent,n=!!this.hitCanvas._canvas.parentNode;n?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}}destroy(){return Fs.Util.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}n0.Layer=zf;zf.prototype.nodeType="Layer";(0,XMe._registerNode)(zf);DA.Factory.addGetterSetter(zf,"imageSmoothingEnabled",!0);DA.Factory.addGetterSetter(zf,"clearBeforeDraw",!0);DA.Factory.addGetterSetter(zf,"hitGraphEnabled",!0,(0,qMe.getBooleanValidator)());var HS={};Object.defineProperty(HS,"__esModule",{value:!0});HS.FastLayer=void 0;const e9e=Qt,t9e=n0,n9e=Ue;class LA extends t9e.Layer{constructor(t){super(t),this.listening(!1),e9e.Util.warn('Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}HS.FastLayer=LA;LA.prototype.nodeType="FastLayer";(0,n9e._registerNode)(LA);var jf={};Object.defineProperty(jf,"__esModule",{value:!0});jf.Group=void 0;const r9e=Qt,i9e=pu,o9e=Ue;class BA extends i9e.Container{_validateAdd(t){var n=t.getType();n!=="Group"&&n!=="Shape"&&r9e.Util.throw("You may only add groups and shapes to groups.")}}jf.Group=BA;BA.prototype.nodeType="Group";(0,o9e._registerNode)(BA);var Vf={};Object.defineProperty(Vf,"__esModule",{value:!0});Vf.Animation=void 0;const tC=Ue,xR=Qt,nC=function(){return tC.glob.performance&&tC.glob.performance.now?function(){return tC.glob.performance.now()}:function(){return new Date().getTime()}}();class as{constructor(t,n){this.id=as.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:nC(),frameRate:0},this.func=t,this.setLayers(n)}setLayers(t){let n=[];return t&&(n=Array.isArray(t)?t:[t]),this.layers=n,this}getLayers(){return this.layers}addLayer(t){const n=this.layers,r=n.length;for(let i=0;ithis.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():p<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=p,this.update())}getTime(){return this._time}setPosition(p){this.prevPos=this._pos,this.propFunc(p),this._pos=p}getPosition(p){return p===void 0&&(p=this._time),this.func(p,this.begin,this._change,this.duration)}play(){this.state=a,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onPlay")}reverse(){this.state=l,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onReverse")}seek(p){this.pause(),this._time=p,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){var p=this.getTimer()-this._startTime;this.state===a?this.setTime(p):this.state===l&&this.setTime(this.duration-p)}pause(){this.state=s,this.fire("onPause")}getTimer(){return new Date().getTime()}}class f{constructor(p){var m=this,_=p.node,v=_._id,y,g=p.easing||e.Easings.Linear,b=!!p.yoyo,S;typeof p.duration>"u"?y=.3:p.duration===0?y=.001:y=p.duration,this.node=_,this._id=c++;var w=_.getLayer()||(_ instanceof i.Konva.Stage?_.getLayers():null);w||t.Util.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new n.Animation(function(){m.tween.onEnterFrame()},w),this.tween=new d(S,function(C){m._tweenFunc(C)},g,0,1,y*1e3,b),this._addListeners(),f.attrs[v]||(f.attrs[v]={}),f.attrs[v][this._id]||(f.attrs[v][this._id]={}),f.tweens[v]||(f.tweens[v]={});for(S in p)o[S]===void 0&&this._addAttr(S,p[S]);this.reset(),this.onFinish=p.onFinish,this.onReset=p.onReset,this.onUpdate=p.onUpdate}_addAttr(p,m){var _=this.node,v=_._id,y,g,b,S,w,C,x,k;if(b=f.tweens[v][p],b&&delete f.attrs[v][b][p],y=_.getAttr(p),t.Util._isArray(m))if(g=[],w=Math.max(m.length,y.length),p==="points"&&m.length!==y.length&&(m.length>y.length?(x=y,y=t.Util._prepareArrayForTween(y,m,_.closed())):(C=m,m=t.Util._prepareArrayForTween(m,y,_.closed()))),p.indexOf("fill")===0)for(S=0;S{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueEnd&&p.setAttr("points",m.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueStart&&p.points(m.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(p){return this.tween.seek(p*1e3),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var p=this.node._id,m=this._id,_=f.tweens[p],v;this.pause();for(v in _)delete f.tweens[p][v];delete f.attrs[p][m]}}e.Tween=f,f.attrs={},f.tweens={},r.Node.prototype.to=function(h){var p=h.onFinish;h.node=this,h.onFinish=function(){this.destroy(),p&&p()};var m=new f(h);m.play()},e.Easings={BackEaseIn(h,p,m,_){var v=1.70158;return m*(h/=_)*h*((v+1)*h-v)+p},BackEaseOut(h,p,m,_){var v=1.70158;return m*((h=h/_-1)*h*((v+1)*h+v)+1)+p},BackEaseInOut(h,p,m,_){var v=1.70158;return(h/=_/2)<1?m/2*(h*h*(((v*=1.525)+1)*h-v))+p:m/2*((h-=2)*h*(((v*=1.525)+1)*h+v)+2)+p},ElasticEaseIn(h,p,m,_,v,y){var g=0;return h===0?p:(h/=_)===1?p+m:(y||(y=_*.3),!v||v0?t:n),u=s*n,d=a*(a>0?t:n),f=l*(l>0?n:t);return{x:c,y:r?-1*f:d,width:u-c,height:f-d}}}WS.Arc=_a;_a.prototype._centroid=!0;_a.prototype.className="Arc";_a.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,a9e._registerNode)(_a);qS.Factory.addGetterSetter(_a,"innerRadius",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"outerRadius",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"angle",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"clockwise",!1,(0,KS.getBooleanValidator)());var XS={},r0={};Object.defineProperty(r0,"__esModule",{value:!0});r0.Line=void 0;const QS=ze,l9e=An,rH=xe,c9e=Ue;function X3(e,t,n,r,i,o,s){var a=Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2)),l=Math.sqrt(Math.pow(i-n,2)+Math.pow(o-r,2)),c=s*a/(a+l),u=s*l/(a+l),d=n-c*(i-e),f=r-c*(o-t),h=n+u*(i-e),p=r+u*(o-t);return[d,f,h,p]}function CR(e,t){var n=e.length,r=[],i,o;for(i=2;i4){for(a=this.getTensionPoints(),l=a.length,c=o?0:4,o||t.quadraticCurveTo(a[0],a[1],a[2],a[3]);c{let c,u,d;c=l/2,u=0;for(let h=0;h<20;h++)d=c*e.tValues[20][h]+c,u+=e.cValues[20][h]*r(s,a,d);return c*u};e.getCubicArcLength=t;const n=(s,a,l)=>{l===void 0&&(l=1);const c=s[0]-2*s[1]+s[2],u=a[0]-2*a[1]+a[2],d=2*s[1]-2*s[0],f=2*a[1]-2*a[0],h=4*(c*c+u*u),p=4*(c*d+u*f),m=d*d+f*f;if(h===0)return l*Math.sqrt(Math.pow(s[2]-s[0],2)+Math.pow(a[2]-a[0],2));const _=p/(2*h),v=m/h,y=l+_,g=v-_*_,b=y*y+g>0?Math.sqrt(y*y+g):0,S=_*_+g>0?Math.sqrt(_*_+g):0,w=_+Math.sqrt(_*_+g)!==0?g*Math.log(Math.abs((y+b)/(_+S))):0;return Math.sqrt(h)/2*(y*b-_*S+w)};e.getQuadraticArcLength=n;function r(s,a,l){const c=i(1,l,s),u=i(1,l,a),d=c*c+u*u;return Math.sqrt(d)}const i=(s,a,l)=>{const c=l.length-1;let u,d;if(c===0)return 0;if(s===0){d=0;for(let f=0;f<=c;f++)d+=e.binomialCoefficients[c][f]*Math.pow(1-a,c-f)*Math.pow(a,f)*l[f];return d}else{u=new Array(c);for(let f=0;f{let c=1,u=s/a,d=(s-l(u))/a,f=0;for(;c>.001;){const h=l(u+d),p=Math.abs(s-h)/a;if(p500)break}return u};e.t2length=o})(iH);Object.defineProperty(Uf,"__esModule",{value:!0});Uf.Path=void 0;const u9e=ze,d9e=An,f9e=Ue,ju=iH;class _n extends d9e.Shape{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=_n.parsePathData(this.data()),this.pathLength=_n.getPathLength(this.dataArray)}_sceneFunc(t){var n=this.dataArray;t.beginPath();for(var r=!1,i=0;iu?c:u,_=c>u?1:c/u,v=c>u?u/c:1;t.translate(a,l),t.rotate(h),t.scale(_,v),t.arc(0,0,m,d,d+f,1-p),t.scale(1/_,1/v),t.rotate(-h),t.translate(-a,-l);break;case"z":r=!0,t.closePath();break}}!r&&!this.hasFill()?t.strokeShape(this):t.fillStrokeShape(this)}getSelfRect(){var t=[];this.dataArray.forEach(function(c){if(c.command==="A"){var u=c.points[4],d=c.points[5],f=c.points[4]+d,h=Math.PI/180;if(Math.abs(u-f)f;p-=h){const m=_n.getPointOnEllipticalArc(c.points[0],c.points[1],c.points[2],c.points[3],p,0);t.push(m.x,m.y)}else for(let p=u+h;pn[i].pathLength;)t-=n[i].pathLength,++i;if(i===o)return r=n[i-1].points.slice(-2),{x:r[0],y:r[1]};if(t<.01)return r=n[i].points.slice(0,2),{x:r[0],y:r[1]};var s=n[i],a=s.points;switch(s.command){case"L":return _n.getPointOnLine(t,s.start.x,s.start.y,a[0],a[1]);case"C":return _n.getPointOnCubicBezier((0,ju.t2length)(t,_n.getPathLength(n),m=>(0,ju.getCubicArcLength)([s.start.x,a[0],a[2],a[4]],[s.start.y,a[1],a[3],a[5]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3],a[4],a[5]);case"Q":return _n.getPointOnQuadraticBezier((0,ju.t2length)(t,_n.getPathLength(n),m=>(0,ju.getQuadraticArcLength)([s.start.x,a[0],a[2]],[s.start.y,a[1],a[3]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3]);case"A":var l=a[0],c=a[1],u=a[2],d=a[3],f=a[4],h=a[5],p=a[6];return f+=h*t/s.pathLength,_n.getPointOnEllipticalArc(l,c,u,d,f,p)}return null}static getPointOnLine(t,n,r,i,o,s,a){s===void 0&&(s=n),a===void 0&&(a=r);var l=(o-r)/(i-n+1e-8),c=Math.sqrt(t*t/(1+l*l));i0&&!isNaN(p[0]);){var y="",g=[],b=l,S=c,w,C,x,k,A,R,L,M,E,P;switch(h){case"l":l+=p.shift(),c+=p.shift(),y="L",g.push(l,c);break;case"L":l=p.shift(),c=p.shift(),g.push(l,c);break;case"m":var O=p.shift(),F=p.shift();if(l+=O,c+=F,y="M",s.length>2&&s[s.length-1].command==="z"){for(var $=s.length-2;$>=0;$--)if(s[$].command==="M"){l=s[$].points[0]+O,c=s[$].points[1]+F;break}}g.push(l,c),h="l";break;case"M":l=p.shift(),c=p.shift(),y="M",g.push(l,c),h="L";break;case"h":l+=p.shift(),y="L",g.push(l,c);break;case"H":l=p.shift(),y="L",g.push(l,c);break;case"v":c+=p.shift(),y="L",g.push(l,c);break;case"V":c=p.shift(),y="L",g.push(l,c);break;case"C":g.push(p.shift(),p.shift(),p.shift(),p.shift()),l=p.shift(),c=p.shift(),g.push(l,c);break;case"c":g.push(l+p.shift(),c+p.shift(),l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="C",g.push(l,c);break;case"S":C=l,x=c,w=s[s.length-1],w.command==="C"&&(C=l+(l-w.points[2]),x=c+(c-w.points[3])),g.push(C,x,p.shift(),p.shift()),l=p.shift(),c=p.shift(),y="C",g.push(l,c);break;case"s":C=l,x=c,w=s[s.length-1],w.command==="C"&&(C=l+(l-w.points[2]),x=c+(c-w.points[3])),g.push(C,x,l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="C",g.push(l,c);break;case"Q":g.push(p.shift(),p.shift()),l=p.shift(),c=p.shift(),g.push(l,c);break;case"q":g.push(l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="Q",g.push(l,c);break;case"T":C=l,x=c,w=s[s.length-1],w.command==="Q"&&(C=l+(l-w.points[0]),x=c+(c-w.points[1])),l=p.shift(),c=p.shift(),y="Q",g.push(C,x,l,c);break;case"t":C=l,x=c,w=s[s.length-1],w.command==="Q"&&(C=l+(l-w.points[0]),x=c+(c-w.points[1])),l+=p.shift(),c+=p.shift(),y="Q",g.push(C,x,l,c);break;case"A":k=p.shift(),A=p.shift(),R=p.shift(),L=p.shift(),M=p.shift(),E=l,P=c,l=p.shift(),c=p.shift(),y="A",g=this.convertEndpointToCenterParameterization(E,P,l,c,L,M,k,A,R);break;case"a":k=p.shift(),A=p.shift(),R=p.shift(),L=p.shift(),M=p.shift(),E=l,P=c,l+=p.shift(),c+=p.shift(),y="A",g=this.convertEndpointToCenterParameterization(E,P,l,c,L,M,k,A,R);break}s.push({command:y||h,points:g,start:{x:b,y:S},pathLength:this.calcLength(b,S,y||h,g)})}(h==="z"||h==="Z")&&s.push({command:"z",points:[],start:void 0,pathLength:0})}return s}static calcLength(t,n,r,i){var o,s,a,l,c=_n;switch(r){case"L":return c.getLineLength(t,n,i[0],i[1]);case"C":return(0,ju.getCubicArcLength)([t,i[0],i[2],i[4]],[n,i[1],i[3],i[5]],1);case"Q":return(0,ju.getQuadraticArcLength)([t,i[0],i[2]],[n,i[1],i[3]],1);case"A":o=0;var u=i[4],d=i[5],f=i[4]+d,h=Math.PI/180;if(Math.abs(u-f)f;l-=h)a=c.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],l,0),o+=c.getLineLength(s.x,s.y,a.x,a.y),s=a;else for(l=u+h;l1&&(a*=Math.sqrt(h),l*=Math.sqrt(h));var p=Math.sqrt((a*a*(l*l)-a*a*(f*f)-l*l*(d*d))/(a*a*(f*f)+l*l*(d*d)));o===s&&(p*=-1),isNaN(p)&&(p=0);var m=p*a*f/l,_=p*-l*d/a,v=(t+r)/2+Math.cos(u)*m-Math.sin(u)*_,y=(n+i)/2+Math.sin(u)*m+Math.cos(u)*_,g=function(A){return Math.sqrt(A[0]*A[0]+A[1]*A[1])},b=function(A,R){return(A[0]*R[0]+A[1]*R[1])/(g(A)*g(R))},S=function(A,R){return(A[0]*R[1]=1&&(k=0),s===0&&k>0&&(k=k-2*Math.PI),s===1&&k<0&&(k=k+2*Math.PI),[v,y,a,l,w,k,u,s]}}Uf.Path=_n;_n.prototype.className="Path";_n.prototype._attrsAffectingSize=["data"];(0,f9e._registerNode)(_n);u9e.Factory.addGetterSetter(_n,"data");Object.defineProperty(XS,"__esModule",{value:!0});XS.Arrow=void 0;const YS=ze,h9e=r0,oH=xe,p9e=Ue,ER=Uf;class mu extends h9e.Line{_sceneFunc(t){super._sceneFunc(t);var n=Math.PI*2,r=this.points(),i=r,o=this.tension()!==0&&r.length>4;o&&(i=this.getTensionPoints());var s=this.pointerLength(),a=r.length,l,c;if(o){const f=[i[i.length-4],i[i.length-3],i[i.length-2],i[i.length-1],r[a-2],r[a-1]],h=ER.Path.calcLength(i[i.length-4],i[i.length-3],"C",f),p=ER.Path.getPointOnQuadraticBezier(Math.min(1,1-s/h),f[0],f[1],f[2],f[3],f[4],f[5]);l=r[a-2]-p.x,c=r[a-1]-p.y}else l=r[a-2]-r[a-4],c=r[a-1]-r[a-3];var u=(Math.atan2(c,l)+n)%n,d=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(r[a-2],r[a-1]),t.rotate(u),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(r[0],r[1]),o?(l=(i[0]+i[2])/2-r[0],c=(i[1]+i[3])/2-r[1]):(l=r[2]-r[0],c=r[3]-r[1]),t.rotate((Math.atan2(-c,-l)+n)%n),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){var n=this.dashEnabled();n&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),n&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),n=this.pointerWidth()/2;return{x:t.x-n,y:t.y-n,width:t.width+n*2,height:t.height+n*2}}}XS.Arrow=mu;mu.prototype.className="Arrow";(0,p9e._registerNode)(mu);YS.Factory.addGetterSetter(mu,"pointerLength",10,(0,oH.getNumberValidator)());YS.Factory.addGetterSetter(mu,"pointerWidth",10,(0,oH.getNumberValidator)());YS.Factory.addGetterSetter(mu,"pointerAtBeginning",!1);YS.Factory.addGetterSetter(mu,"pointerAtEnding",!0);var ZS={};Object.defineProperty(ZS,"__esModule",{value:!0});ZS.Circle=void 0;const g9e=ze,m9e=An,y9e=xe,v9e=Ue;class Gf extends m9e.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,Math.PI*2,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}}ZS.Circle=Gf;Gf.prototype._centroid=!0;Gf.prototype.className="Circle";Gf.prototype._attrsAffectingSize=["radius"];(0,v9e._registerNode)(Gf);g9e.Factory.addGetterSetter(Gf,"radius",0,(0,y9e.getNumberValidator)());var JS={};Object.defineProperty(JS,"__esModule",{value:!0});JS.Ellipse=void 0;const zA=ze,b9e=An,sH=xe,_9e=Ue;class zl extends b9e.Shape{_sceneFunc(t){var n=this.radiusX(),r=this.radiusY();t.beginPath(),t.save(),n!==r&&t.scale(1,r/n),t.arc(0,0,n,0,Math.PI*2,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radiusX()*2}getHeight(){return this.radiusY()*2}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}JS.Ellipse=zl;zl.prototype.className="Ellipse";zl.prototype._centroid=!0;zl.prototype._attrsAffectingSize=["radiusX","radiusY"];(0,_9e._registerNode)(zl);zA.Factory.addComponentsGetterSetter(zl,"radius",["x","y"]);zA.Factory.addGetterSetter(zl,"radiusX",0,(0,sH.getNumberValidator)());zA.Factory.addGetterSetter(zl,"radiusY",0,(0,sH.getNumberValidator)());var e2={};Object.defineProperty(e2,"__esModule",{value:!0});e2.Image=void 0;const rC=Qt,yu=ze,S9e=An,x9e=Ue,i0=xe;let Ps=class aH extends S9e.Shape{constructor(t){super(t),this.on("imageChange.konva",()=>{this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&t.readyState===4||t&&t.addEventListener&&t.addEventListener("load",()=>{this._requestDraw()})}_useBufferCanvas(){return super._useBufferCanvas(!0)}_sceneFunc(t){const n=this.getWidth(),r=this.getHeight(),i=this.cornerRadius(),o=this.attrs.image;let s;if(o){const a=this.attrs.cropWidth,l=this.attrs.cropHeight;a&&l?s=[o,this.cropX(),this.cropY(),a,l,0,0,n,r]:s=[o,0,0,n,r]}(this.hasFill()||this.hasStroke()||i)&&(t.beginPath(),i?rC.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)),o&&(i&&t.clip(),t.drawImage.apply(t,s))}_hitFunc(t){var n=this.width(),r=this.height(),i=this.cornerRadius();t.beginPath(),i?rC.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,n;return(t=this.attrs.width)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.width}getHeight(){var t,n;return(t=this.attrs.height)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.height}static fromURL(t,n,r=null){var i=rC.Util.createImageElement();i.onload=function(){var o=new aH({image:i});n(o)},i.onerror=r,i.crossOrigin="Anonymous",i.src=t}};e2.Image=Ps;Ps.prototype.className="Image";(0,x9e._registerNode)(Ps);yu.Factory.addGetterSetter(Ps,"cornerRadius",0,(0,i0.getNumberOrArrayOfNumbersValidator)(4));yu.Factory.addGetterSetter(Ps,"image");yu.Factory.addComponentsGetterSetter(Ps,"crop",["x","y","width","height"]);yu.Factory.addGetterSetter(Ps,"cropX",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropY",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropWidth",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropHeight",0,(0,i0.getNumberValidator)());var xf={};Object.defineProperty(xf,"__esModule",{value:!0});xf.Tag=xf.Label=void 0;const t2=ze,w9e=An,C9e=jf,jA=xe,lH=Ue;var cH=["fontFamily","fontSize","fontStyle","padding","lineHeight","text","width","height","pointerDirection","pointerWidth","pointerHeight"],E9e="Change.konva",T9e="none",Q3="up",Y3="right",Z3="down",J3="left",A9e=cH.length;class VA extends C9e.Group{constructor(t){super(t),this.on("add.konva",function(n){this._addListeners(n.child),this._sync()})}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}_addListeners(t){var n=this,r,i=function(){n._sync()};for(r=0;r{n=Math.min(n,s.x),r=Math.max(r,s.x),i=Math.min(i,s.y),o=Math.max(o,s.y)}),{x:n,y:i,width:r-n,height:o-i}}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}r2.RegularPolygon=bu;bu.prototype.className="RegularPolygon";bu.prototype._centroid=!0;bu.prototype._attrsAffectingSize=["radius"];(0,$9e._registerNode)(bu);uH.Factory.addGetterSetter(bu,"radius",0,(0,dH.getNumberValidator)());uH.Factory.addGetterSetter(bu,"sides",0,(0,dH.getNumberValidator)());var i2={};Object.defineProperty(i2,"__esModule",{value:!0});i2.Ring=void 0;const fH=ze,N9e=An,hH=xe,F9e=Ue;var TR=Math.PI*2;class _u extends N9e.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,TR,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),TR,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}i2.Ring=_u;_u.prototype.className="Ring";_u.prototype._centroid=!0;_u.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,F9e._registerNode)(_u);fH.Factory.addGetterSetter(_u,"innerRadius",0,(0,hH.getNumberValidator)());fH.Factory.addGetterSetter(_u,"outerRadius",0,(0,hH.getNumberValidator)());var o2={};Object.defineProperty(o2,"__esModule",{value:!0});o2.Sprite=void 0;const Su=ze,D9e=An,L9e=Vf,pH=xe,B9e=Ue;class Is extends D9e.Shape{constructor(t){super(t),this._updated=!0,this.anim=new L9e.Animation(()=>{var n=this._updated;return this._updated=!1,n}),this.on("animationChange.konva",function(){this.frameIndex(0)}),this.on("frameIndexChange.konva",function(){this._updated=!0}),this.on("frameRateChange.konva",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+0],l=o[i+1],c=o[i+2],u=o[i+3],d=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,c,u),t.closePath(),t.fillStrokeShape(this)),d)if(s){var f=s[n],h=r*2;t.drawImage(d,a,l,c,u,f[h+0],f[h+1],c,u)}else t.drawImage(d,a,l,c,u,0,0,c,u)}_hitFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+2],l=o[i+3];if(t.beginPath(),s){var c=s[n],u=r*2;t.rect(c[u+0],c[u+1],a,l)}else t.rect(0,0,a,l);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){var t=this;this.interval=setInterval(function(){t._updateIndex()},1e3/this.frameRate())}start(){if(!this.isRunning()){var t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){var t=this.frameIndex(),n=this.animation(),r=this.animations(),i=r[n],o=i.length/4;t{t=t.trim();const n=t.indexOf(" ")>=0,r=t.indexOf('"')>=0||t.indexOf("'")>=0;return n&&!r&&(t=`"${t}"`),t}).join(", ")}var Ay;function oC(){return Ay||(Ay=eE.Util.createCanvasElement().getContext(W9e),Ay)}function rRe(e){e.fillText(this._partialText,this._partialTextX,this._partialTextY)}function iRe(e){e.setAttr("miterLimit",2),e.strokeText(this._partialText,this._partialTextX,this._partialTextY)}function oRe(e){return e=e||{},!e.fillLinearGradientColorStops&&!e.fillRadialGradientColorStops&&!e.fillPatternImage&&(e.fill=e.fill||"black"),e}class on extends V9e.Shape{constructor(t){super(oRe(t)),this._partialTextX=0,this._partialTextY=0;for(var n=0;n1&&(y+=s)}}}_hitFunc(t){var n=this.getWidth(),r=this.getHeight();t.beginPath(),t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}setText(t){var n=eE.Util._isString(t)?t:t==null?"":t+"";return this._setAttr(q9e,n),this}getWidth(){var t=this.attrs.width===Vu||this.attrs.width===void 0;return t?this.getTextWidth()+this.padding()*2:this.attrs.width}getHeight(){var t=this.attrs.height===Vu||this.attrs.height===void 0;return t?this.fontSize()*this.textArr.length*this.lineHeight()+this.padding()*2:this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return eE.Util.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var n=oC(),r=this.fontSize(),i;return n.save(),n.font=this._getContextFont(),i=n.measureText(t),n.restore(),{width:i.width,height:r}}_getContextFont(){return this.fontStyle()+Ty+this.fontVariant()+Ty+(this.fontSize()+Y9e)+nRe(this.fontFamily())}_addTextLine(t){this.align()===Ah&&(t=t.trim());var r=this._getTextWidth(t);return this.textArr.push({text:t,width:r,lastInParagraph:!1})}_getTextWidth(t){var n=this.letterSpacing(),r=t.length;return oC().measureText(t).width+(r?n*(r-1):0)}_setTextData(){var t=this.text().split(` -`),n=+this.fontSize(),r=0,i=this.lineHeight()*n,o=this.attrs.width,s=this.attrs.height,a=o!==Vu&&o!==void 0,l=s!==Vu&&s!==void 0,c=this.padding(),u=o-c*2,d=s-c*2,f=0,h=this.wrap(),p=h!==IR,m=h!==eRe&&p,_=this.ellipsis();this.textArr=[],oC().font=this._getContextFont();for(var v=_?this._getTextWidth(iC):0,y=0,g=t.length;yu)for(;b.length>0;){for(var w=0,C=b.length,x="",k=0;w>>1,R=b.slice(0,A+1),L=this._getTextWidth(R)+v;L<=u?(w=A+1,x=R,k=L):C=A}if(x){if(m){var M,E=b[x.length],P=E===Ty||E===AR;P&&k<=u?M=x.length:M=Math.max(x.lastIndexOf(Ty),x.lastIndexOf(AR))+1,M>0&&(w=M,x=x.slice(0,w),k=this._getTextWidth(x))}x=x.trimRight(),this._addTextLine(x),r=Math.max(r,k),f+=i;var O=this._shouldHandleEllipsis(f);if(O){this._tryToAddEllipsisToLastLine();break}if(b=b.slice(w),b=b.trimLeft(),b.length>0&&(S=this._getTextWidth(b),S<=u)){this._addTextLine(b),f+=i,r=Math.max(r,S);break}}else break}else this._addTextLine(b),f+=i,r=Math.max(r,S),this._shouldHandleEllipsis(f)&&yd)break}this.textHeight=n,this.textWidth=r}_shouldHandleEllipsis(t){var n=+this.fontSize(),r=this.lineHeight()*n,i=this.attrs.height,o=i!==Vu&&i!==void 0,s=this.padding(),a=i-s*2,l=this.wrap(),c=l!==IR;return!c||o&&t+r>a}_tryToAddEllipsisToLastLine(){var t=this.attrs.width,n=t!==Vu&&t!==void 0,r=this.padding(),i=t-r*2,o=this.ellipsis(),s=this.textArr[this.textArr.length-1];if(!(!s||!o)){if(n){var a=this._getTextWidth(s.text+iC)n?null:kh.Path.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=kh.Path.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();var n=this.textDecoration(),r=this.fill(),i=this.fontSize(),o=this.glyphInfo;n==="underline"&&t.beginPath();for(var s=0;s=1){var r=n[0].p0;t.moveTo(r.x,r.y)}for(var i=0;ie+`.${CH}`).join(" "),OR="nodesRect",hRe=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange"],pRe={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135};const gRe="ontouchstart"in mo.Konva._global;function mRe(e,t,n){if(e==="rotater")return n;t+=bt.Util.degToRad(pRe[e]||0);var r=(bt.Util.radToDeg(t)%360+360)%360;return bt.Util._inRange(r,315+22.5,360)||bt.Util._inRange(r,0,22.5)?"ns-resize":bt.Util._inRange(r,45-22.5,45+22.5)?"nesw-resize":bt.Util._inRange(r,90-22.5,90+22.5)?"ew-resize":bt.Util._inRange(r,135-22.5,135+22.5)?"nwse-resize":bt.Util._inRange(r,180-22.5,180+22.5)?"ns-resize":bt.Util._inRange(r,225-22.5,225+22.5)?"nesw-resize":bt.Util._inRange(r,270-22.5,270+22.5)?"ew-resize":bt.Util._inRange(r,315-22.5,315+22.5)?"nwse-resize":(bt.Util.error("Transformer has unknown angle for cursor detection: "+r),"pointer")}var ob=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"],$R=1e8;function yRe(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}function EH(e,t,n){const r=n.x+(e.x-n.x)*Math.cos(t)-(e.y-n.y)*Math.sin(t),i=n.y+(e.x-n.x)*Math.sin(t)+(e.y-n.y)*Math.cos(t);return{...e,rotation:e.rotation+t,x:r,y:i}}function vRe(e,t){const n=yRe(e);return EH(e,t,n)}function bRe(e,t,n){let r=t;for(let i=0;ii.isAncestorOf(this)?(bt.Util.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),!1):!0);this._nodes=t=n,t.length===1&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(i=>{const o=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()},s=i._attrsAffectingSize.map(a=>a+"Change."+this._getEventNamespace()).join(" ");i.on(s,o),i.on(hRe.map(a=>a+`.${this._getEventNamespace()}`).join(" "),o),i.on(`absoluteTransformChange.${this._getEventNamespace()}`,o),this._proxyDrag(i)}),this._resetTransformCache();var r=!!this.findOne(".top-left");return r&&this.update(),this}_proxyDrag(t){let n;t.on(`dragstart.${this._getEventNamespace()}`,r=>{n=t.getAbsolutePosition(),!this.isDragging()&&t!==this.findOne(".back")&&this.startDrag(r,!1)}),t.on(`dragmove.${this._getEventNamespace()}`,r=>{if(!n)return;const i=t.getAbsolutePosition(),o=i.x-n.x,s=i.y-n.y;this.nodes().forEach(a=>{if(a===t||a.isDragging())return;const l=a.getAbsolutePosition();a.setAbsolutePosition({x:l.x+o,y:l.y+s}),a.startDrag(r)}),n=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(t=>{t.off("."+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(OR),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_getNodeRect(){return this._getCache(OR,this.__getNodeRect)}__getNodeShape(t,n=this.rotation(),r){var i=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),o=t.getAbsoluteScale(r),s=t.getAbsolutePosition(r),a=i.x*o.x-t.offsetX()*o.x,l=i.y*o.y-t.offsetY()*o.y;const c=(mo.Konva.getAngle(t.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2),u={x:s.x+a*Math.cos(c)+l*Math.sin(-c),y:s.y+l*Math.cos(c)+a*Math.sin(c),width:i.width*o.x,height:i.height*o.y,rotation:c};return EH(u,-mo.Konva.getAngle(n),{x:0,y:0})}__getNodeRect(){var t=this.getNode();if(!t)return{x:-$R,y:-$R,width:0,height:0,rotation:0};const n=[];this.nodes().map(c=>{const u=c.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()});var d=[{x:u.x,y:u.y},{x:u.x+u.width,y:u.y},{x:u.x+u.width,y:u.y+u.height},{x:u.x,y:u.y+u.height}],f=c.getAbsoluteTransform();d.forEach(function(h){var p=f.point(h);n.push(p)})});const r=new bt.Transform;r.rotate(-mo.Konva.getAngle(this.rotation()));var i=1/0,o=1/0,s=-1/0,a=-1/0;n.forEach(function(c){var u=r.point(c);i===void 0&&(i=s=u.x,o=a=u.y),i=Math.min(i,u.x),o=Math.min(o,u.y),s=Math.max(s,u.x),a=Math.max(a,u.y)}),r.invert();const l=r.point({x:i,y:o});return{x:l.x,y:l.y,width:s-i,height:a-o,rotation:mo.Konva.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),ob.forEach(t=>{this._createAnchor(t)}),this._createAnchor("rotater")}_createAnchor(t){var n=new uRe.Rect({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" _anchor",dragDistance:0,draggable:!0,hitStrokeWidth:gRe?10:"auto"}),r=this;n.on("mousedown touchstart",function(i){r._handleMouseDown(i)}),n.on("dragstart",i=>{n.stopDrag(),i.cancelBubble=!0}),n.on("dragend",i=>{i.cancelBubble=!0}),n.on("mouseenter",()=>{var i=mo.Konva.getAngle(this.rotation()),o=this.rotateAnchorCursor(),s=mRe(t,i,o);n.getStage().content&&(n.getStage().content.style.cursor=s),this._cursorChange=!0}),n.on("mouseout",()=>{n.getStage().content&&(n.getStage().content.style.cursor=""),this._cursorChange=!1}),this.add(n)}_createBack(){var t=new cRe.Shape({name:"back",width:0,height:0,draggable:!0,sceneFunc(n,r){var i=r.getParent(),o=i.padding();n.beginPath(),n.rect(-o,-o,r.width()+o*2,r.height()+o*2),n.moveTo(r.width()/2,-o),i.rotateEnabled()&&n.lineTo(r.width()/2,-i.rotateAnchorOffset()*bt.Util._sign(r.height())-o),n.fillStrokeShape(r)},hitFunc:(n,r)=>{if(this.shouldOverdrawWholeArea()){var i=this.padding();n.beginPath(),n.rect(-i,-i,r.width()+i*2,r.height()+i*2),n.fillStrokeShape(r)}}});this.add(t),this._proxyDrag(t),t.on("dragstart",n=>{n.cancelBubble=!0}),t.on("dragmove",n=>{n.cancelBubble=!0}),t.on("dragend",n=>{n.cancelBubble=!0}),this.on("dragmove",n=>{this.update()})}_handleMouseDown(t){this._movingAnchorName=t.target.name().split(" ")[0];var n=this._getNodeRect(),r=n.width,i=n.height,o=Math.sqrt(Math.pow(r,2)+Math.pow(i,2));this.sin=Math.abs(i/o),this.cos=Math.abs(r/o),typeof window<"u"&&(window.addEventListener("mousemove",this._handleMouseMove),window.addEventListener("touchmove",this._handleMouseMove),window.addEventListener("mouseup",this._handleMouseUp,!0),window.addEventListener("touchend",this._handleMouseUp,!0)),this._transforming=!0;var s=t.target.getAbsolutePosition(),a=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-s.x,y:a.y-s.y},this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach(l=>{l._fire("transformstart",{evt:t.evt,target:l})})}_handleMouseMove(t){var n,r,i,o=this.findOne("."+this._movingAnchorName),s=o.getStage();s.setPointersPositions(t);const a=s.getPointerPosition();let l={x:a.x-this._anchorDragOffset.x,y:a.y-this._anchorDragOffset.y};const c=o.getAbsolutePosition();this.anchorDragBoundFunc()&&(l=this.anchorDragBoundFunc()(c,l,t)),o.setAbsolutePosition(l);const u=o.getAbsolutePosition();if(!(c.x===u.x&&c.y===u.y)){if(this._movingAnchorName==="rotater"){var d=this._getNodeRect();n=o.x()-d.width/2,r=-o.y()+d.height/2;let M=Math.atan2(-r,n)+Math.PI/2;d.height<0&&(M-=Math.PI);var f=mo.Konva.getAngle(this.rotation());const E=f+M,P=mo.Konva.getAngle(this.rotationSnapTolerance()),F=bRe(this.rotationSnaps(),E,P)-d.rotation,$=vRe(d,F);this._fitNodesInto($,t);return}var h=this.shiftBehavior(),p;h==="inverted"?p=this.keepRatio()&&!t.shiftKey:h==="none"?p=this.keepRatio():p=this.keepRatio()||t.shiftKey;var g=this.centeredScaling()||t.altKey;if(this._movingAnchorName==="top-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-right").x(),y:this.findOne(".bottom-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(m.y-o.y(),2));var _=this.findOne(".top-left").x()>m.x?-1:1,v=this.findOne(".top-left").y()>m.y?-1:1;n=i*this.cos*_,r=i*this.sin*v,this.findOne(".top-left").x(m.x-n),this.findOne(".top-left").y(m.y-r)}}else if(this._movingAnchorName==="top-center")this.findOne(".top-left").y(o.y());else if(this._movingAnchorName==="top-right"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-left").x(),y:this.findOne(".bottom-left").y()};i=Math.sqrt(Math.pow(o.x()-m.x,2)+Math.pow(m.y-o.y(),2));var _=this.findOne(".top-right").x()m.y?-1:1;n=i*this.cos*_,r=i*this.sin*v,this.findOne(".top-right").x(m.x+n),this.findOne(".top-right").y(m.y-r)}var y=o.position();this.findOne(".top-left").y(y.y),this.findOne(".bottom-right").x(y.x)}else if(this._movingAnchorName==="middle-left")this.findOne(".top-left").x(o.x());else if(this._movingAnchorName==="middle-right")this.findOne(".bottom-right").x(o.x());else if(this._movingAnchorName==="bottom-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-right").x(),y:this.findOne(".top-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(o.y()-m.y,2));var _=m.x{r._fire("transformend",{evt:t,target:r})}),this._movingAnchorName=null}}_fitNodesInto(t,n){var r=this._getNodeRect();const i=1;if(bt.Util._inRange(t.width,-this.padding()*2-i,i)){this.update();return}if(bt.Util._inRange(t.height,-this.padding()*2-i,i)){this.update();return}var o=new bt.Transform;if(o.rotate(mo.Konva.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const f=o.point({x:-this.padding()*2,y:0});t.x+=f.x,t.y+=f.y,t.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace("left","right"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const f=o.point({x:this.padding()*2,y:0});this._movingAnchorName=this._movingAnchorName.replace("right","left"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.width+=this.padding()*2}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const f=o.point({x:0,y:-this.padding()*2});t.x+=f.x,t.y+=f.y,this._movingAnchorName=this._movingAnchorName.replace("top","bottom"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const f=o.point({x:0,y:this.padding()*2});this._movingAnchorName=this._movingAnchorName.replace("bottom","top"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2}if(this.boundBoxFunc()){const f=this.boundBoxFunc()(r,t);f?t=f:bt.Util.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}const s=1e7,a=new bt.Transform;a.translate(r.x,r.y),a.rotate(r.rotation),a.scale(r.width/s,r.height/s);const l=new bt.Transform,c=t.width/s,u=t.height/s;this.flipEnabled()===!1?(l.translate(t.x,t.y),l.rotate(t.rotation),l.translate(t.width<0?t.width:0,t.height<0?t.height:0),l.scale(Math.abs(c),Math.abs(u))):(l.translate(t.x,t.y),l.rotate(t.rotation),l.scale(c,u));const d=l.multiply(a.invert());this._nodes.forEach(f=>{var h;const p=f.getParent().getAbsoluteTransform(),m=f.getTransform().copy();m.translate(f.offsetX(),f.offsetY());const _=new bt.Transform;_.multiply(p.copy().invert()).multiply(d).multiply(p).multiply(m);const v=_.decompose();f.setAttrs(v),this._fire("transform",{evt:n,target:f}),f._fire("transform",{evt:n,target:f}),(h=f.getLayer())===null||h===void 0||h.batchDraw()}),this.rotation(bt.Util._getRotation(t.rotation)),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,n){this.findOne(t).setAttrs(n)}update(){var t,n=this._getNodeRect();this.rotation(bt.Util._getRotation(n.rotation));var r=n.width,i=n.height,o=this.enabledAnchors(),s=this.resizeEnabled(),a=this.padding(),l=this.anchorSize();const c=this.find("._anchor");c.forEach(d=>{d.setAttrs({width:l,height:l,offsetX:l/2,offsetY:l/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(".top-left",{x:0,y:0,offsetX:l/2+a,offsetY:l/2+a,visible:s&&o.indexOf("top-left")>=0}),this._batchChangeChild(".top-center",{x:r/2,y:0,offsetY:l/2+a,visible:s&&o.indexOf("top-center")>=0}),this._batchChangeChild(".top-right",{x:r,y:0,offsetX:l/2-a,offsetY:l/2+a,visible:s&&o.indexOf("top-right")>=0}),this._batchChangeChild(".middle-left",{x:0,y:i/2,offsetX:l/2+a,visible:s&&o.indexOf("middle-left")>=0}),this._batchChangeChild(".middle-right",{x:r,y:i/2,offsetX:l/2-a,visible:s&&o.indexOf("middle-right")>=0}),this._batchChangeChild(".bottom-left",{x:0,y:i,offsetX:l/2+a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-left")>=0}),this._batchChangeChild(".bottom-center",{x:r/2,y:i,offsetY:l/2-a,visible:s&&o.indexOf("bottom-center")>=0}),this._batchChangeChild(".bottom-right",{x:r,y:i,offsetX:l/2-a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-right")>=0}),this._batchChangeChild(".rotater",{x:r/2,y:-this.rotateAnchorOffset()*bt.Util._sign(i)-a,visible:this.rotateEnabled()}),this._batchChangeChild(".back",{width:r,height:i,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const u=this.anchorStyleFunc();u&&c.forEach(d=>{u(d)}),(t=this.getLayer())===null||t===void 0||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();var t=this.findOne("."+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),RR.Group.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return MR.Node.prototype.toObject.call(this)}clone(t){var n=MR.Node.prototype.clone.call(this,t);return n}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}l2.Transformer=ot;function _Re(e){return e instanceof Array||bt.Util.warn("enabledAnchors value should be an array"),e instanceof Array&&e.forEach(function(t){ob.indexOf(t)===-1&&bt.Util.warn("Unknown anchor name: "+t+". Available names are: "+ob.join(", "))}),e||[]}ot.prototype.className="Transformer";(0,dRe._registerNode)(ot);gt.Factory.addGetterSetter(ot,"enabledAnchors",ob,_Re);gt.Factory.addGetterSetter(ot,"flipEnabled",!0,(0,Ul.getBooleanValidator)());gt.Factory.addGetterSetter(ot,"resizeEnabled",!0);gt.Factory.addGetterSetter(ot,"anchorSize",10,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"rotateEnabled",!0);gt.Factory.addGetterSetter(ot,"rotationSnaps",[]);gt.Factory.addGetterSetter(ot,"rotateAnchorOffset",50,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"rotateAnchorCursor","crosshair");gt.Factory.addGetterSetter(ot,"rotationSnapTolerance",5,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderEnabled",!0);gt.Factory.addGetterSetter(ot,"anchorStroke","rgb(0, 161, 255)");gt.Factory.addGetterSetter(ot,"anchorStrokeWidth",1,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"anchorFill","white");gt.Factory.addGetterSetter(ot,"anchorCornerRadius",0,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderStroke","rgb(0, 161, 255)");gt.Factory.addGetterSetter(ot,"borderStrokeWidth",1,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderDash");gt.Factory.addGetterSetter(ot,"keepRatio",!0);gt.Factory.addGetterSetter(ot,"shiftBehavior","default");gt.Factory.addGetterSetter(ot,"centeredScaling",!1);gt.Factory.addGetterSetter(ot,"ignoreStroke",!1);gt.Factory.addGetterSetter(ot,"padding",0,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"node");gt.Factory.addGetterSetter(ot,"nodes");gt.Factory.addGetterSetter(ot,"boundBoxFunc");gt.Factory.addGetterSetter(ot,"anchorDragBoundFunc");gt.Factory.addGetterSetter(ot,"anchorStyleFunc");gt.Factory.addGetterSetter(ot,"shouldOverdrawWholeArea",!1);gt.Factory.addGetterSetter(ot,"useSingleNodeRotation",!0);gt.Factory.backCompat(ot,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});var c2={};Object.defineProperty(c2,"__esModule",{value:!0});c2.Wedge=void 0;const u2=ze,SRe=An,xRe=Ue,TH=xe,wRe=Ue;class Sa extends SRe.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,xRe.Konva.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}c2.Wedge=Sa;Sa.prototype.className="Wedge";Sa.prototype._centroid=!0;Sa.prototype._attrsAffectingSize=["radius"];(0,wRe._registerNode)(Sa);u2.Factory.addGetterSetter(Sa,"radius",0,(0,TH.getNumberValidator)());u2.Factory.addGetterSetter(Sa,"angle",0,(0,TH.getNumberValidator)());u2.Factory.addGetterSetter(Sa,"clockwise",!1);u2.Factory.backCompat(Sa,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});var d2={};Object.defineProperty(d2,"__esModule",{value:!0});d2.Blur=void 0;const NR=ze,CRe=Vt,ERe=xe;function FR(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var TRe=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],ARe=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function kRe(e,t){var n=e.data,r=e.width,i=e.height,o,s,a,l,c,u,d,f,h,p,m,_,v,y,g,b,S,w,C,x,k,A,R,L,M=t+t+1,E=r-1,P=i-1,O=t+1,F=O*(O+1)/2,$=new FR,D=null,N=$,z=null,V=null,H=TRe[t],X=ARe[t];for(a=1;a>X,R!==0?(R=255/R,n[u]=(f*H>>X)*R,n[u+1]=(h*H>>X)*R,n[u+2]=(p*H>>X)*R):n[u]=n[u+1]=n[u+2]=0,f-=_,h-=v,p-=y,m-=g,_-=z.r,v-=z.g,y-=z.b,g-=z.a,l=d+((l=o+t+1)>X,R>0?(R=255/R,n[l]=(f*H>>X)*R,n[l+1]=(h*H>>X)*R,n[l+2]=(p*H>>X)*R):n[l]=n[l+1]=n[l+2]=0,f-=_,h-=v,p-=y,m-=g,_-=z.r,v-=z.g,y-=z.b,g-=z.a,l=o+((l=s+O)0&&kRe(t,n)};d2.Blur=PRe;NR.Factory.addGetterSetter(CRe.Node,"blurRadius",0,(0,ERe.getNumberValidator)(),NR.Factory.afterSetFilter);var f2={};Object.defineProperty(f2,"__esModule",{value:!0});f2.Brighten=void 0;const DR=ze,IRe=Vt,MRe=xe,RRe=function(e){var t=this.brightness()*255,n=e.data,r=n.length,i;for(i=0;i255?255:i,o=o<0?0:o>255?255:o,s=s<0?0:s>255?255:s,n[a]=i,n[a+1]=o,n[a+2]=s};h2.Contrast=NRe;LR.Factory.addGetterSetter(ORe.Node,"contrast",0,(0,$Re.getNumberValidator)(),LR.Factory.afterSetFilter);var p2={};Object.defineProperty(p2,"__esModule",{value:!0});p2.Emboss=void 0;const Al=ze,g2=Vt,FRe=Qt,AH=xe,DRe=function(e){var t=this.embossStrength()*10,n=this.embossWhiteLevel()*255,r=this.embossDirection(),i=this.embossBlend(),o=0,s=0,a=e.data,l=e.width,c=e.height,u=l*4,d=c;switch(r){case"top-left":o=-1,s=-1;break;case"top":o=-1,s=0;break;case"top-right":o=-1,s=1;break;case"right":o=0,s=1;break;case"bottom-right":o=1,s=1;break;case"bottom":o=1,s=0;break;case"bottom-left":o=1,s=-1;break;case"left":o=0,s=-1;break;default:FRe.Util.error("Unknown emboss direction: "+r)}do{var f=(d-1)*u,h=o;d+h<1&&(h=0),d+h>c&&(h=0);var p=(d-1+h)*l*4,m=l;do{var _=f+(m-1)*4,v=s;m+v<1&&(v=0),m+v>l&&(v=0);var y=p+(m-1+v)*4,g=a[_]-a[y],b=a[_+1]-a[y+1],S=a[_+2]-a[y+2],w=g,C=w>0?w:-w,x=b>0?b:-b,k=S>0?S:-S;if(x>C&&(w=b),k>C&&(w=S),w*=t,i){var A=a[_]+w,R=a[_+1]+w,L=a[_+2]+w;a[_]=A>255?255:A<0?0:A,a[_+1]=R>255?255:R<0?0:R,a[_+2]=L>255?255:L<0?0:L}else{var M=n-w;M<0?M=0:M>255&&(M=255),a[_]=a[_+1]=a[_+2]=M}}while(--m)}while(--d)};p2.Emboss=DRe;Al.Factory.addGetterSetter(g2.Node,"embossStrength",.5,(0,AH.getNumberValidator)(),Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossWhiteLevel",.5,(0,AH.getNumberValidator)(),Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossDirection","top-left",null,Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossBlend",!1,null,Al.Factory.afterSetFilter);var m2={};Object.defineProperty(m2,"__esModule",{value:!0});m2.Enhance=void 0;const BR=ze,LRe=Vt,BRe=xe;function lC(e,t,n,r,i){var o=n-t,s=i-r,a;return o===0?r+s/2:s===0?r:(a=(e-t)/o,a=s*a+r,a)}const zRe=function(e){var t=e.data,n=t.length,r=t[0],i=r,o,s=t[1],a=s,l,c=t[2],u=c,d,f,h=this.enhance();if(h!==0){for(f=0;fi&&(i=o),l=t[f+1],la&&(a=l),d=t[f+2],du&&(u=d);i===r&&(i=255,r=0),a===s&&(a=255,s=0),u===c&&(u=255,c=0);var p,m,_,v,y,g,b,S,w;for(h>0?(m=i+h*(255-i),_=r-h*(r-0),y=a+h*(255-a),g=s-h*(s-0),S=u+h*(255-u),w=c-h*(c-0)):(p=(i+r)*.5,m=i+h*(i-p),_=r+h*(r-p),v=(a+s)*.5,y=a+h*(a-v),g=s+h*(s-v),b=(u+c)*.5,S=u+h*(u-b),w=c+h*(c-b)),f=0;fv?_:v;var y=s,g=o,b,S,w=360/g*Math.PI/180,C,x;for(S=0;Sg?y:g;var b=s,S=o,w,C,x=n.polarRotation||0,k,A;for(u=0;ut&&(b=g,S=0,w=-1),i=0;i=0&&h=0&&p=0&&h=0&&p=255*4?255:0}return s}function tOe(e,t,n){for(var r=[.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111],i=Math.round(Math.sqrt(r.length)),o=Math.floor(i/2),s=[],a=0;a=0&&h=0&&p=n))for(o=m;o<_;o+=1)o>=r||(s=(n*o+i)*4,a+=b[s+0],l+=b[s+1],c+=b[s+2],u+=b[s+3],g+=1);for(a=a/g,l=l/g,c=c/g,u=u/g,i=h;i=n))for(o=m;o<_;o+=1)o>=r||(s=(n*o+i)*4,b[s+0]=a,b[s+1]=l,b[s+2]=c,b[s+3]=u)}};C2.Pixelate=cOe;UR.Factory.addGetterSetter(aOe.Node,"pixelSize",8,(0,lOe.getNumberValidator)(),UR.Factory.afterSetFilter);var E2={};Object.defineProperty(E2,"__esModule",{value:!0});E2.Posterize=void 0;const GR=ze,uOe=Vt,dOe=xe,fOe=function(e){var t=Math.round(this.levels()*254)+1,n=e.data,r=n.length,i=255/t,o;for(o=0;o255?255:e<0?0:Math.round(e)});ab.Factory.addGetterSetter(XA.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});ab.Factory.addGetterSetter(XA.Node,"blue",0,hOe.RGBComponent,ab.Factory.afterSetFilter);var A2={};Object.defineProperty(A2,"__esModule",{value:!0});A2.RGBA=void 0;const Gg=ze,k2=Vt,gOe=xe,mOe=function(e){var t=e.data,n=t.length,r=this.red(),i=this.green(),o=this.blue(),s=this.alpha(),a,l;for(a=0;a255?255:e<0?0:Math.round(e)});Gg.Factory.addGetterSetter(k2.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});Gg.Factory.addGetterSetter(k2.Node,"blue",0,gOe.RGBComponent,Gg.Factory.afterSetFilter);Gg.Factory.addGetterSetter(k2.Node,"alpha",1,function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e});var P2={};Object.defineProperty(P2,"__esModule",{value:!0});P2.Sepia=void 0;const yOe=function(e){var t=e.data,n=t.length,r,i,o,s;for(r=0;r127&&(c=255-c),u>127&&(u=255-u),d>127&&(d=255-d),t[l]=c,t[l+1]=u,t[l+2]=d}while(--a)}while(--o)};I2.Solarize=vOe;var M2={};Object.defineProperty(M2,"__esModule",{value:!0});M2.Threshold=void 0;const HR=ze,bOe=Vt,_Oe=xe,SOe=function(e){var t=this.threshold()*255,n=e.data,r=n.length,i;for(i=0;i{const{width:r,height:i}=t,o=document.createElement("div"),s=new Ih.Stage({container:o,width:r,height:i}),a=new Ih.Layer,l=new Ih.Layer;return a.add(new Ih.Rect({...t,fill:n?"black":"white"})),e.forEach(c=>l.add(new Ih.Line({points:c.points,stroke:n?"white":"black",strokeWidth:c.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,globalCompositeOperation:c.tool==="brush"?"source-over":"destination-out"}))),s.add(a),s.add(l),o.remove(),s},a7e=async(e,t,n)=>new Promise((r,i)=>{const o=document.createElement("canvas");o.width=t,o.height=n;const s=o.getContext("2d"),a=new Image;if(!s){o.remove(),i("Unable to get context");return}a.onload=function(){s.drawImage(a,0,0),o.remove(),r(s.getImageData(0,0,t,n))},a.src=e}),KR=async(e,t)=>{const n=e.toDataURL(t);return await a7e(n,t.width,t.height)},QA=async(e,t,n,r,i)=>{const o=ue("canvas"),s=LS(),a=tMe();if(!s||!a){o.error("Unable to find canvas / stage");return}const l={...t,...n},c=s.clone();c.scale({x:1,y:1});const u=c.getAbsolutePosition(),d={x:l.x+u.x,y:l.y+u.y,width:l.width,height:l.height},f=await rb(c,d),h=await KR(c,d),p=await s7e(r?e.objects.filter(rL):[],l,i),m=await rb(p,l),_=await KR(p,l);return{baseBlob:f,baseImageData:h,maskBlob:m,maskImageData:_}},l7e=()=>{fe({actionCreator:K8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),o=await QA(i.canvas.layerState,i.canvas.boundingBoxCoordinates,i.canvas.boundingBoxDimensions,i.canvas.isMaskEnabled,i.canvas.shouldPreserveMaskedArea);if(!o)return;const{maskBlob:s}=o;if(!s){r.error("Problem getting mask layer blob"),t(Ve({title:J("toast.problemSavingMask"),description:J("toast.problemSavingMaskDesc"),status:"error"}));return}const{autoAddBoardId:a}=i.gallery;t(ce.endpoints.uploadImage.initiate({file:new File([s],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!1,board_id:a==="none"?void 0:a,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.maskSavedAssets")}}}))}})},c7e=()=>{fe({actionCreator:J8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{id:o}=e.payload,s=await QA(i.canvas.layerState,i.canvas.boundingBoxCoordinates,i.canvas.boundingBoxDimensions,i.canvas.isMaskEnabled,i.canvas.shouldPreserveMaskedArea);if(!s)return;const{maskBlob:a}=s;if(!a){r.error("Problem getting mask layer blob"),t(Ve({title:J("toast.problemImportingMask"),description:J("toast.problemImportingMaskDesc"),status:"error"}));return}const{autoAddBoardId:l}=i.gallery,c=await t(ce.endpoints.uploadImage.initiate({file:new File([a],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!1,board_id:l==="none"?void 0:l,crop_visible:!1,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.maskSentControlnetAssets")}}})).unwrap(),{image_name:u}=c;t(Nl({id:o,controlImage:u}))}})},u7e=async()=>{const e=LS();if(!e)return;const t=e.clone();return t.scale({x:1,y:1}),rb(t,t.getClientRect())},d7e=()=>{fe({actionCreator:Y8e,effect:async(e,{dispatch:t})=>{const n=B_.get().child({namespace:"canvasCopiedToClipboardListener"}),r=await u7e();if(!r){n.error("Problem getting base layer blob"),t(Ve({title:J("toast.problemMergingCanvas"),description:J("toast.problemMergingCanvasDesc"),status:"error"}));return}const i=LS();if(!i){n.error("Problem getting canvas base layer"),t(Ve({title:J("toast.problemMergingCanvas"),description:J("toast.problemMergingCanvasDesc"),status:"error"}));return}const o=i.getClientRect({relativeTo:i.getParent()??void 0}),s=await t(ce.endpoints.uploadImage.initiate({file:new File([r],"mergedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasMerged")}}})).unwrap(),{image_name:a}=s;t(oue({kind:"image",layer:"base",imageName:a,...o}))}})},f7e=()=>{fe({actionCreator:q8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n();let o;try{o=await BS(i)}catch(a){r.error(String(a)),t(Ve({title:J("toast.problemSavingCanvas"),description:J("toast.problemSavingCanvasDesc"),status:"error"}));return}const{autoAddBoardId:s}=i.gallery;t(ce.endpoints.uploadImage.initiate({file:new File([o],"savedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!1,board_id:s==="none"?void 0:s,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasSavedGallery")}}}))}})},h7e=(e,t,n)=>{if(!(dae.match(e)||tI.match(e)||Nl.match(e)||fae.match(e)||nI.match(e)))return!1;const{id:i}=e.payload,o=li(n.controlAdapters,i),s=li(t.controlAdapters,i);if(!o||!hi(o)||!s||!hi(s)||nI.match(e)&&o.shouldAutoConfig===!0)return!1;const{controlImage:a,processorType:l,shouldAutoConfig:c}=s;return tI.match(e)&&!c?!1:l!=="none"&&!!a},p7e=()=>{fe({predicate:h7e,effect:async(e,{dispatch:t,cancelActiveListeners:n,delay:r})=>{const i=ue("session"),{id:o}=e.payload;n(),i.trace("ControlNet auto-process triggered"),await r(300),t(q4({id:o}))}})},g7e=()=>{fe({actionCreator:q4,effect:async(e,{dispatch:t,getState:n,take:r})=>{const i=ue("session"),{id:o}=e.payload,s=li(n().controlAdapters,o);if(!(s!=null&&s.controlImage)||!hi(s)){i.error("Unable to process ControlNet image");return}if(s.processorType==="none"||s.processorNode.type==="none")return;const a=s.processorNode.id,l={prepend:!0,batch:{graph:{nodes:{[s.processorNode.id]:{...s.processorNode,is_intermediate:!0,use_cache:!1,image:{image_name:s.controlImage}}}},runs:1}};try{const c=t(en.endpoints.enqueueBatch.initiate(l,{fixedCacheKey:"enqueueBatch"})),u=await c.unwrap();c.reset(),i.debug({enqueueResult:tt(u)},J("queue.graphQueued"));const[d]=await r(f=>L4.match(f)&&f.payload.data.queue_batch_id===u.batch.batch_id&&f.payload.data.source_node_id===a);if(QD(d.payload.data.result)){const{image_name:f}=d.payload.data.result.image,[{payload:h}]=await r(m=>ce.endpoints.getImageDTO.matchFulfilled(m)&&m.payload.image_name===f),p=h;i.debug({controlNetId:e.payload,processedControlImage:p},"ControlNet image processed"),t(X4({id:o,processedControlImage:p.image_name}))}}catch(c){if(i.error({enqueueBatchArg:tt(l)},J("queue.graphFailedToQueue")),c instanceof Object&&"data"in c&&"status"in c&&c.status===403){t(pae()),t(Nl({id:o,controlImage:null}));return}t(Ve({title:J("queue.graphFailedToQueue"),status:"error"}))}}})},YA=he("app/enqueueRequested");he("app/batchEnqueued");const m7e=e=>{const t=window.open("");t&&e.forEach(n=>{const r=new Image;r.src=n.base64,t.document.write(n.caption),t.document.write("
"),t.document.write(r.outerHTML),t.document.write("

")})},XR=e=>new Promise((t,n)=>{const r=new FileReader;r.onload=i=>t(r.result),r.onerror=i=>n(r.error),r.onabort=i=>n(new Error("Read aborted")),r.readAsDataURL(e)}),y7e=e=>{let t=!0,n=!1;const r=e.length;let i=3;for(i;i{const t=e.length;let n=0;for(n;n{const{isPartiallyTransparent:n,isFullyTransparent:r}=y7e(e.data),i=v7e(t.data);return n?r?"txt2img":"outpaint":i?"inpaint":"img2img"},ve="positive_conditioning",Se="negative_conditioning",le="denoise_latents",Ku="denoise_latents_hrf",_e="latents_to_image",Xa="latents_to_image_hrf_hr",fc="latents_to_image_hrf_lr",Mh="image_to_latents_hrf",Da="resize_hrf",ep="esrgan_hrf",zc="linear_ui_output",gl="nsfw_checker",Tc="invisible_watermark",me="noise",Rh="noise_hrf",Oo="main_model_loader",R2="onnx_model_loader",ci="vae_loader",IH="lora_loader",at="clip_skip",Nt="image_to_latents",ls="resize_image",jc="img2img_resize",ae="canvas_output",At="inpaint_image",_7e="scaled_inpaint_image",Dn="inpaint_image_resize_up",nr="inpaint_image_resize_down",rt="inpaint_infill",Zs="inpaint_infill_resize_down",S7e="inpaint_final_image",Et="inpaint_create_mask",x7e="inpaint_mask",Re="canvas_coherence_denoise_latents",nt="canvas_coherence_noise",kl="canvas_coherence_noise_increment",Jt="canvas_coherence_mask_edge",Je="canvas_coherence_inpaint_create_mask",Gd="tomask",hr="mask_blur",Jn="mask_combine",Tt="mask_resize_up",mr="mask_resize_down",w7e="img_paste",Oh="control_net_collect",Py="ip_adapter_collect",$h="t2i_adapter_collect",yi="core_metadata",tp="esrgan",C7e="scale_image",pr="sdxl_model_loader",se="sdxl_denoise_latents",tc="sdxl_refiner_model_loader",Iy="sdxl_refiner_positive_conditioning",My="sdxl_refiner_negative_conditioning",Xo="sdxl_refiner_denoise_latents",ji="refiner_inpaint_create_mask",Cn="seamless",Eo="refiner_seamless",E7e=[ae,_e,Xa,gl,Tc,tp,ep,Da,fc,jc,At,_7e,Dn,nr,rt,Zs,S7e,Et,x7e,w7e,C7e],MH="text_to_image_graph",tE="image_to_image_graph",RH="canvas_text_to_image_graph",nE="canvas_image_to_image_graph",O2="canvas_inpaint_graph",$2="canvas_outpaint_graph",ZA="sdxl_text_to_image_graph",lb="sxdl_image_to_image_graph",N2="sdxl_canvas_text_to_image_graph",Hg="sdxl_canvas_image_to_image_graph",Pl="sdxl_canvas_inpaint_graph",Il="sdxl_canvas_outpaint_graph",xa=(e,t,n)=>{e.nodes[yi]={id:yi,type:"core_metadata",...t},e.edges.push({source:{node_id:yi,field:"metadata"},destination:{node_id:n,field:"metadata"}})},Bo=(e,t)=>{const n=e.nodes[yi];n&&Object.assign(n,t)},Nh=(e,t)=>{const n=e.nodes[yi];n&&delete n[t]},Fh=e=>!!e.nodes[yi],T7e=(e,t)=>{e.edges=e.edges.filter(n=>n.source.node_id!==yi),e.edges.push({source:{node_id:yi,field:"metadata"},destination:{node_id:t,field:"metadata"}})},ro=(e,t,n)=>{const r=rae(e.controlAdapters).filter(o=>{var s,a;return((s=o.model)==null?void 0:s.base_model)===((a=e.generation.model)==null?void 0:a.base_model)}),i=[];if(r.length){const o={id:Oh,type:"collect",is_intermediate:!0};t.nodes[Oh]=o,t.edges.push({source:{node_id:Oh,field:"collection"},destination:{node_id:n,field:"control"}}),Re in t.nodes&&t.edges.push({source:{node_id:Oh,field:"collection"},destination:{node_id:Re,field:"control"}}),r.forEach(s=>{if(!s.model)return;const{id:a,controlImage:l,processedControlImage:c,beginStepPct:u,endStepPct:d,controlMode:f,resizeMode:h,model:p,processorType:m,weight:_}=s,v={id:`control_net_${a}`,type:"controlnet",is_intermediate:!0,begin_step_percent:u,end_step_percent:d,control_mode:f,resize_mode:h,control_model:p,control_weight:_};if(c&&m!=="none")v.image={image_name:c};else if(l)v.image={image_name:l};else return;t.nodes[v.id]=v,i.push(uu(v,["id","type","is_intermediate"])),t.edges.push({source:{node_id:v.id,field:"control"},destination:{node_id:Oh,field:"item"}})}),Bo(t,{controlnets:i})}},io=(e,t,n)=>{const r=oae(e.controlAdapters).filter(i=>{var o,s;return((o=i.model)==null?void 0:o.base_model)===((s=e.generation.model)==null?void 0:s.base_model)});if(r.length){const i={id:Py,type:"collect",is_intermediate:!0};t.nodes[Py]=i,t.edges.push({source:{node_id:Py,field:"collection"},destination:{node_id:n,field:"ip_adapter"}}),Re in t.nodes&&t.edges.push({source:{node_id:Py,field:"collection"},destination:{node_id:Re,field:"ip_adapter"}});const o=[];r.forEach(s=>{if(!s.model)return;const{id:a,weight:l,model:c,beginStepPct:u,endStepPct:d}=s,f={id:`ip_adapter_${a}`,type:"ip_adapter",is_intermediate:!0,weight:l,ip_adapter_model:c,begin_step_percent:u,end_step_percent:d};if(s.controlImage)f.image={image_name:s.controlImage};else return;t.nodes[f.id]=f,o.push(uu(f,["id","type","is_intermediate"])),t.edges.push({source:{node_id:f.id,field:"ip_adapter"},destination:{node_id:i.id,field:"item"}})}),Bo(t,{ipAdapters:o})}},A7e=["txt2img","img2img","unifiedCanvas","nodes","modelManager","queue"],JA=hu(e=>e,({ui:e})=>jF(e.activeTab)?e.activeTab:"txt2img"),$We=hu(e=>e,({ui:e,config:t})=>{const r=A7e.filter(i=>!t.disabledTabs.includes(i)).indexOf(e.activeTab);return r===-1?0:r}),oo=(e,t)=>{const r=JA(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,{autoAddBoardId:i}=e.gallery,o={id:zc,type:"linear_ui_output",is_intermediate:r,use_cache:!1,board:i==="none"?void 0:{board_id:i}};t.nodes[zc]=o;const s={node_id:zc,field:"image"};Tc in t.nodes?t.edges.push({source:{node_id:Tc,field:"image"},destination:s}):gl in t.nodes?t.edges.push({source:{node_id:gl,field:"image"},destination:s}):ae in t.nodes?t.edges.push({source:{node_id:ae,field:"image"},destination:s}):Xa in t.nodes?t.edges.push({source:{node_id:Xa,field:"image"},destination:s}):_e in t.nodes&&t.edges.push({source:{node_id:_e,field:"image"},destination:s})},Hf=(e,t,n,r=Oo)=>{const{loras:i}=e.lora,o=c_(i);if(o===0)return;t.edges=t.edges.filter(c=>!(c.source.node_id===r&&["unet"].includes(c.source.field))),t.edges=t.edges.filter(c=>!(c.source.node_id===at&&["clip"].includes(c.source.field)));let s="",a=0;const l=[];Fo(i,c=>{const{model_name:u,base_model:d,weight:f}=c,h=`${IH}_${u.replace(".","_")}`,p={type:"lora_loader",id:h,is_intermediate:!0,lora:{model_name:u,base_model:d},weight:f};l.push({lora:{model_name:u,base_model:d},weight:f}),t.nodes[h]=p,a===0?(t.edges.push({source:{node_id:r,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:at,field:"clip"},destination:{node_id:h,field:"clip"}})):(t.edges.push({source:{node_id:s,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:s,field:"clip"},destination:{node_id:h,field:"clip"}})),a===o-1&&(t.edges.push({source:{node_id:h,field:"unet"},destination:{node_id:n,field:"unet"}}),t.id&&[O2,$2].includes(t.id)&&t.edges.push({source:{node_id:h,field:"unet"},destination:{node_id:Re,field:"unet"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:ve,field:"clip"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:Se,field:"clip"}})),s=h,a+=1}),Bo(t,{loras:l})},so=(e,t,n=_e)=>{const r=t.nodes[n];if(!r)return;r.is_intermediate=!0,r.use_cache=!0;const i={id:gl,type:"img_nsfw",is_intermediate:!0};t.nodes[gl]=i,t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:gl,field:"image"}})},ao=(e,t,n)=>{const{seamlessXAxis:r,seamlessYAxis:i}=e.generation;t.nodes[Cn]={id:Cn,type:"seamless",seamless_x:r,seamless_y:i},r&&Bo(t,{seamless_x:r}),i&&Bo(t,{seamless_y:i});let o=le;(t.id===ZA||t.id===lb||t.id===N2||t.id===Hg||t.id===Pl||t.id===Il)&&(o=se),t.edges=t.edges.filter(s=>!(s.source.node_id===n&&["unet"].includes(s.source.field))&&!(s.source.node_id===n&&["vae"].includes(s.source.field))),t.edges.push({source:{node_id:n,field:"unet"},destination:{node_id:Cn,field:"unet"}},{source:{node_id:n,field:"vae"},destination:{node_id:Cn,field:"vae"}},{source:{node_id:Cn,field:"unet"},destination:{node_id:o,field:"unet"}}),(t.id==O2||t.id===$2||t.id===Pl||t.id===Il)&&t.edges.push({source:{node_id:Cn,field:"unet"},destination:{node_id:Re,field:"unet"}})},lo=(e,t,n)=>{const r=aae(e.controlAdapters).filter(i=>{var o,s;return((o=i.model)==null?void 0:o.base_model)===((s=e.generation.model)==null?void 0:s.base_model)});if(r.length){const i={id:$h,type:"collect",is_intermediate:!0};t.nodes[$h]=i,t.edges.push({source:{node_id:$h,field:"collection"},destination:{node_id:n,field:"t2i_adapter"}}),Re in t.nodes&&t.edges.push({source:{node_id:$h,field:"collection"},destination:{node_id:Re,field:"t2i_adapter"}});const o=[];r.forEach(s=>{if(!s.model)return;const{id:a,controlImage:l,processedControlImage:c,beginStepPct:u,endStepPct:d,resizeMode:f,model:h,processorType:p,weight:m}=s,_={id:`t2i_adapter_${a}`,type:"t2i_adapter",is_intermediate:!0,begin_step_percent:u,end_step_percent:d,resize_mode:f,t2i_adapter_model:h,weight:m};if(c&&p!=="none")_.image={image_name:c};else if(l)_.image={image_name:l};else return;t.nodes[_.id]=_,o.push(uu(_,["id","type","is_intermediate"])),t.edges.push({source:{node_id:_.id,field:"t2i_adapter"},destination:{node_id:$h,field:"item"}})}),Bo(t,{t2iAdapters:o})}},co=(e,t,n=Oo)=>{const{vae:r,canvasCoherenceMode:i}=e.generation,{boundingBoxScaleMethod:o}=e.canvas,{shouldUseSDXLRefiner:s}=e.sdxl,a=["auto","manual"].includes(o),l=!r;l||(t.nodes[ci]={type:"vae_loader",id:ci,is_intermediate:!0,vae_model:r});const c=n==R2;(t.id===MH||t.id===tE||t.id===ZA||t.id===lb)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:_e,field:"vae"}}),(t.id===RH||t.id===nE||t.id===N2||t.id==Hg)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:a?_e:ae,field:"vae"}}),(t.id===tE||t.id===lb||t.id===nE||t.id===Hg)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Nt,field:"vae"}}),(t.id===O2||t.id===$2||t.id===Pl||t.id===Il)&&(t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:At,field:"vae"}},{source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Et,field:"vae"}},{source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:_e,field:"vae"}}),i!=="unmasked"&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Je,field:"vae"}})),s&&(t.id===Pl||t.id===Il)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:ji,field:"vae"}}),r&&Bo(t,{vae:r})},uo=(e,t,n=_e)=>{const i=JA(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,o=t.nodes[n],s=t.nodes[gl];if(!o)return;const a={id:Tc,type:"img_watermark",is_intermediate:i};t.nodes[Tc]=a,o.is_intermediate=!0,o.use_cache=!0,s?(s.is_intermediate=!0,t.edges.push({source:{node_id:gl,field:"image"},destination:{node_id:Tc,field:"image"}})):t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:Tc,field:"image"}})},k7e=(e,t)=>{const n=ue("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,cfgRescaleMultiplier:a,scheduler:l,seed:c,steps:u,img2imgStrength:d,vaePrecision:f,clipSkip:h,shouldUseCpuNoise:p,seamlessXAxis:m,seamlessYAxis:_}=e.generation,{width:v,height:y}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:g,boundingBoxScaleMethod:b}=e.canvas,S=f==="fp32",w=!0,C=["auto","manual"].includes(b);if(!o)throw n.error("No model found in state"),new Error("No model found in state");let x=Oo;const k=p,A={id:nE,nodes:{[x]:{type:"main_model_loader",id:x,is_intermediate:w,model:o},[at]:{type:"clip_skip",id:at,is_intermediate:w,skipped_layers:h},[ve]:{type:"compel",id:ve,is_intermediate:w,prompt:r},[Se]:{type:"compel",id:Se,is_intermediate:w,prompt:i},[me]:{type:"noise",id:me,is_intermediate:w,use_cpu:k,seed:c,width:C?g.width:v,height:C?g.height:y},[Nt]:{type:"i2l",id:Nt,is_intermediate:w},[le]:{type:"denoise_latents",id:le,is_intermediate:w,cfg_scale:s,scheduler:l,steps:u,denoising_start:1-d,denoising_end:1},[ae]:{type:"l2i",id:ae,is_intermediate:w,use_cache:!1}},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:le,field:"latents"}}]};return C?(A.nodes[jc]={id:jc,type:"img_resize",is_intermediate:w,image:t,width:g.width,height:g.height},A.nodes[_e]={id:_e,type:"l2i",is_intermediate:w,fp32:S},A.nodes[ae]={id:ae,type:"img_resize",is_intermediate:w,width:v,height:y,use_cache:!1},A.edges.push({source:{node_id:jc,field:"image"},destination:{node_id:Nt,field:"image"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(A.nodes[ae]={type:"l2i",id:ae,is_intermediate:w,fp32:S,use_cache:!1},A.nodes[Nt].image=t,A.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(A,{generation_mode:"img2img",cfg_scale:s,cfg_rescale_multiplier:a,width:C?g.width:v,height:C?g.height:y,positive_prompt:r,negative_prompt:i,model:o,seed:c,steps:u,rand_device:k?"cpu":"cuda",scheduler:l,clip_skip:h,strength:d,init_image:t.image_name},ae),(m||_)&&(ao(e,A,x),x=Cn),Hf(e,A,le),co(e,A,x),ro(e,A,le),io(e,A,le),lo(e,A,le),e.system.shouldUseNSFWChecker&&so(e,A,ae),e.system.shouldUseWatermarker&&uo(e,A,ae),oo(e,A),A},P7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,img2imgStrength:u,seed:d,vaePrecision:f,shouldUseCpuNoise:h,maskBlur:p,maskBlurMethod:m,canvasCoherenceMode:_,canvasCoherenceSteps:v,canvasCoherenceStrength:y,clipSkip:g,seamlessXAxis:b,seamlessYAxis:S}=e.generation;if(!s)throw r.error("No Image found in state"),new Error("No Image found in state");const{width:w,height:C}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:x,boundingBoxScaleMethod:k}=e.canvas,A=!0,R=f==="fp32",L=["auto","manual"].includes(k);let M=Oo;const E=h,P={id:O2,nodes:{[M]:{type:"main_model_loader",id:M,is_intermediate:A,model:s},[at]:{type:"clip_skip",id:at,is_intermediate:A,skipped_layers:g},[ve]:{type:"compel",id:ve,is_intermediate:A,prompt:i},[Se]:{type:"compel",id:Se,is_intermediate:A,prompt:o},[hr]:{type:"img_blur",id:hr,is_intermediate:A,radius:p,blur_type:m},[At]:{type:"i2l",id:At,is_intermediate:A,fp32:R},[me]:{type:"noise",id:me,use_cpu:E,seed:d,is_intermediate:A},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:A,fp32:R},[le]:{type:"denoise_latents",id:le,is_intermediate:A,steps:c,cfg_scale:a,scheduler:l,denoising_start:1-u,denoising_end:1},[nt]:{type:"noise",id:nt,use_cpu:E,seed:d+1,is_intermediate:A},[kl]:{type:"add",id:kl,b:1,is_intermediate:A},[Re]:{type:"denoise_latents",id:Re,is_intermediate:A,steps:v,cfg_scale:a,scheduler:l,denoising_start:1-y,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:A,fp32:R},[ae]:{type:"color_correct",id:ae,is_intermediate:A,reference:t,use_cache:!1}},edges:[{source:{node_id:M,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:M,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:hr,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:le,field:"denoise_mask"}},{source:{node_id:M,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(L){const O=x.width,F=x.height;P.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:A,width:O,height:F,image:t},P.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:A,width:O,height:F,image:n},P.nodes[nr]={type:"img_resize",id:nr,is_intermediate:A,width:w,height:C},P.nodes[mr]={type:"img_resize",id:mr,is_intermediate:A,width:w,height:C},P.nodes[me].width=O,P.nodes[me].height=F,P.nodes[nt].width=O,P.nodes[nt].height=F,P.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:hr,field:"image"}},{source:{node_id:Dn,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else P.nodes[me].width=w,P.nodes[me].height=C,P.nodes[nt].width=w,P.nodes[nt].height=C,P.nodes[At]={...P.nodes[At],image:t},P.nodes[hr]={...P.nodes[hr],image:n},P.nodes[Et]={...P.nodes[Et],image:t},P.edges.push({source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:ae,field:"mask"}});return _!=="unmasked"&&(P.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:A,fp32:R},L?P.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:Je,field:"image"}}):P.nodes[Je]={...P.nodes[Je],image:t},_==="mask"&&(L?P.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):P.nodes[Je]={...P.nodes[Je],mask:n}),_==="edge"&&(P.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:A,edge_blur:p,edge_size:p*2,low_threshold:100,high_threshold:200},L?P.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):P.nodes[Jt]={...P.nodes[Jt],image:n},P.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),P.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(b||S)&&(ao(e,P,M),M=Cn),co(e,P,M),Hf(e,P,le,M),ro(e,P,le),io(e,P,le),lo(e,P,le),e.system.shouldUseNSFWChecker&&so(e,P,ae),e.system.shouldUseWatermarker&&uo(e,P,ae),oo(e,P),P},I7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,img2imgStrength:u,seed:d,vaePrecision:f,shouldUseCpuNoise:h,maskBlur:p,canvasCoherenceMode:m,canvasCoherenceSteps:_,canvasCoherenceStrength:v,infillTileSize:y,infillPatchmatchDownscaleSize:g,infillMethod:b,clipSkip:S,seamlessXAxis:w,seamlessYAxis:C}=e.generation;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:x,height:k}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:A,boundingBoxScaleMethod:R}=e.canvas,L=f==="fp32",M=!0,E=["auto","manual"].includes(R);let P=Oo;const O=h,F={id:$2,nodes:{[P]:{type:"main_model_loader",id:P,is_intermediate:M,model:s},[at]:{type:"clip_skip",id:at,is_intermediate:M,skipped_layers:S},[ve]:{type:"compel",id:ve,is_intermediate:M,prompt:i},[Se]:{type:"compel",id:Se,is_intermediate:M,prompt:o},[Gd]:{type:"tomask",id:Gd,is_intermediate:M,image:t},[Jn]:{type:"mask_combine",id:Jn,is_intermediate:M,mask2:n},[At]:{type:"i2l",id:At,is_intermediate:M,fp32:L},[me]:{type:"noise",id:me,use_cpu:O,seed:d,is_intermediate:M},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:M,fp32:L},[le]:{type:"denoise_latents",id:le,is_intermediate:M,steps:c,cfg_scale:a,scheduler:l,denoising_start:1-u,denoising_end:1},[nt]:{type:"noise",id:nt,use_cpu:O,seed:d+1,is_intermediate:M},[kl]:{type:"add",id:kl,b:1,is_intermediate:M},[Re]:{type:"denoise_latents",id:Re,is_intermediate:M,steps:_,cfg_scale:a,scheduler:l,denoising_start:1-v,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:M,fp32:L},[ae]:{type:"color_correct",id:ae,is_intermediate:M,use_cache:!1}},edges:[{source:{node_id:P,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:P,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:rt,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Gd,field:"image"},destination:{node_id:Jn,field:"mask1"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:E?Tt:Jn,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:le,field:"denoise_mask"}},{source:{node_id:P,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:rt,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(b==="patchmatch"&&(F.nodes[rt]={type:"infill_patchmatch",id:rt,is_intermediate:M,downscale:g}),b==="lama"&&(F.nodes[rt]={type:"infill_lama",id:rt,is_intermediate:M}),b==="cv2"&&(F.nodes[rt]={type:"infill_cv2",id:rt,is_intermediate:M}),b==="tile"&&(F.nodes[rt]={type:"infill_tile",id:rt,is_intermediate:M,tile_size:y}),E){const $=A.width,D=A.height;F.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:M,width:$,height:D,image:t},F.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:M,width:$,height:D},F.nodes[nr]={type:"img_resize",id:nr,is_intermediate:M,width:x,height:k},F.nodes[Zs]={type:"img_resize",id:Zs,is_intermediate:M,width:x,height:k},F.nodes[mr]={type:"img_resize",id:mr,is_intermediate:M,width:x,height:k},F.nodes[me].width=$,F.nodes[me].height=D,F.nodes[nt].width=$,F.nodes[nt].height=D,F.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:rt,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:Tt,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:rt,field:"image"},destination:{node_id:Zs,field:"image"}},{source:{node_id:Zs,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else F.nodes[rt]={...F.nodes[rt],image:t},F.nodes[me].width=x,F.nodes[me].height=k,F.nodes[nt].width=x,F.nodes[nt].height=k,F.nodes[At]={...F.nodes[At],image:t},F.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:ae,field:"mask"}});return m!=="unmasked"&&(F.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:M,fp32:L},F.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:Je,field:"image"}}),m==="mask"&&(E?F.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):F.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Je,field:"mask"}})),m==="edge"&&(F.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:M,edge_blur:p,edge_size:p*2,low_threshold:100,high_threshold:200},E?F.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):F.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Jt,field:"image"}}),F.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),F.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(w||C)&&(ao(e,F,P),P=Cn),co(e,F,P),Hf(e,F,le,P),ro(e,F,le),io(e,F,le),lo(e,F,le),e.system.shouldUseNSFWChecker&&so(e,F,ae),e.system.shouldUseWatermarker&&uo(e,F,ae),oo(e,F),F},Wf=(e,t,n,r=pr)=>{const{loras:i}=e.lora,o=c_(i);if(o===0)return;const s=[],a=r;let l=r;[Cn,ji].includes(r)&&(l=pr),t.edges=t.edges.filter(d=>!(d.source.node_id===a&&["unet"].includes(d.source.field))&&!(d.source.node_id===l&&["clip"].includes(d.source.field))&&!(d.source.node_id===l&&["clip2"].includes(d.source.field)));let c="",u=0;Fo(i,d=>{const{model_name:f,base_model:h,weight:p}=d,m=`${IH}_${f.replace(".","_")}`,_={type:"sdxl_lora_loader",id:m,is_intermediate:!0,lora:{model_name:f,base_model:h},weight:p};s.push(tB.parse({lora:{model_name:f,base_model:h},weight:p})),t.nodes[m]=_,u===0?(t.edges.push({source:{node_id:a,field:"unet"},destination:{node_id:m,field:"unet"}}),t.edges.push({source:{node_id:l,field:"clip"},destination:{node_id:m,field:"clip"}}),t.edges.push({source:{node_id:l,field:"clip2"},destination:{node_id:m,field:"clip2"}})):(t.edges.push({source:{node_id:c,field:"unet"},destination:{node_id:m,field:"unet"}}),t.edges.push({source:{node_id:c,field:"clip"},destination:{node_id:m,field:"clip"}}),t.edges.push({source:{node_id:c,field:"clip2"},destination:{node_id:m,field:"clip2"}})),u===o-1&&(t.edges.push({source:{node_id:m,field:"unet"},destination:{node_id:n,field:"unet"}}),t.id&&[Pl,Il].includes(t.id)&&t.edges.push({source:{node_id:m,field:"unet"},destination:{node_id:Re,field:"unet"}}),t.edges.push({source:{node_id:m,field:"clip"},destination:{node_id:ve,field:"clip"}}),t.edges.push({source:{node_id:m,field:"clip"},destination:{node_id:Se,field:"clip"}}),t.edges.push({source:{node_id:m,field:"clip2"},destination:{node_id:ve,field:"clip2"}}),t.edges.push({source:{node_id:m,field:"clip2"},destination:{node_id:Se,field:"clip2"}})),c=m,u+=1}),Bo(t,{loras:s})},xu=(e,t)=>{const{positivePrompt:n,negativePrompt:r}=e.generation,{positiveStylePrompt:i,negativeStylePrompt:o,shouldConcatSDXLStylePrompt:s}=e.sdxl,a=s||t?[n,i].join(" "):i,l=s||t?[r,o].join(" "):o;return{joinedPositiveStylePrompt:a,joinedNegativeStylePrompt:l}},qf=(e,t,n,r,i,o)=>{const{refinerModel:s,refinerPositiveAestheticScore:a,refinerNegativeAestheticScore:l,refinerSteps:c,refinerScheduler:u,refinerCFGScale:d,refinerStart:f}=e.sdxl,{seamlessXAxis:h,seamlessYAxis:p,vaePrecision:m}=e.generation,{boundingBoxScaleMethod:_}=e.canvas,v=m==="fp32",y=["auto","manual"].includes(_);if(!s)return;Bo(t,{refiner_model:s,refiner_positive_aesthetic_score:a,refiner_negative_aesthetic_score:l,refiner_cfg_scale:d,refiner_scheduler:u,refiner_start:f,refiner_steps:c});const g=r||pr,{joinedPositiveStylePrompt:b,joinedNegativeStylePrompt:S}=xu(e,!0);t.edges=t.edges.filter(w=>!(w.source.node_id===n&&["latents"].includes(w.source.field))),t.edges=t.edges.filter(w=>!(w.source.node_id===g&&["vae"].includes(w.source.field))),t.nodes[tc]={type:"sdxl_refiner_model_loader",id:tc,model:s},t.nodes[Iy]={type:"sdxl_refiner_compel_prompt",id:Iy,style:b,aesthetic_score:a},t.nodes[My]={type:"sdxl_refiner_compel_prompt",id:My,style:S,aesthetic_score:l},t.nodes[Xo]={type:"denoise_latents",id:Xo,cfg_scale:d,steps:c,scheduler:u,denoising_start:f,denoising_end:1},h||p?(t.nodes[Eo]={id:Eo,type:"seamless",seamless_x:h,seamless_y:p},t.edges.push({source:{node_id:tc,field:"unet"},destination:{node_id:Eo,field:"unet"}},{source:{node_id:tc,field:"vae"},destination:{node_id:Eo,field:"vae"}},{source:{node_id:Eo,field:"unet"},destination:{node_id:Xo,field:"unet"}})):t.edges.push({source:{node_id:tc,field:"unet"},destination:{node_id:Xo,field:"unet"}}),t.edges.push({source:{node_id:tc,field:"clip2"},destination:{node_id:Iy,field:"clip2"}},{source:{node_id:tc,field:"clip2"},destination:{node_id:My,field:"clip2"}},{source:{node_id:Iy,field:"conditioning"},destination:{node_id:Xo,field:"positive_conditioning"}},{source:{node_id:My,field:"conditioning"},destination:{node_id:Xo,field:"negative_conditioning"}},{source:{node_id:n,field:"latents"},destination:{node_id:Xo,field:"latents"}}),(t.id===Pl||t.id===Il)&&(t.nodes[ji]={type:"create_denoise_mask",id:ji,is_intermediate:!0,fp32:v},y?t.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:ji,field:"image"}}):t.nodes[ji]={...t.nodes[ji],image:i},t.id===Pl&&(y?t.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:ji,field:"mask"}}):t.nodes[ji]={...t.nodes[ji],mask:o}),t.id===Il&&t.edges.push({source:{node_id:y?Tt:Jn,field:"image"},destination:{node_id:ji,field:"mask"}}),t.edges.push({source:{node_id:ji,field:"denoise_mask"},destination:{node_id:Xo,field:"denoise_mask"}})),t.id===N2||t.id===Hg?t.edges.push({source:{node_id:Xo,field:"latents"},destination:{node_id:y?_e:ae,field:"latents"}}):t.edges.push({source:{node_id:Xo,field:"latents"},destination:{node_id:_e,field:"latents"}})},M7e=(e,t)=>{const n=ue("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,cfgRescaleMultiplier:a,scheduler:l,seed:c,steps:u,vaePrecision:d,shouldUseCpuNoise:f,seamlessXAxis:h,seamlessYAxis:p}=e.generation,{shouldUseSDXLRefiner:m,refinerStart:_,sdxlImg2ImgDenoisingStrength:v}=e.sdxl,{width:y,height:g}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:b,boundingBoxScaleMethod:S}=e.canvas,w=d==="fp32",C=!0,x=["auto","manual"].includes(S);if(!o)throw n.error("No model found in state"),new Error("No model found in state");let k=pr;const A=f,{joinedPositiveStylePrompt:R,joinedNegativeStylePrompt:L}=xu(e),M={id:Hg,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:o},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:r,style:R},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:i,style:L},[me]:{type:"noise",id:me,is_intermediate:C,use_cpu:A,seed:c,width:x?b.width:y,height:x?b.height:g},[Nt]:{type:"i2l",id:Nt,is_intermediate:C,fp32:w},[se]:{type:"denoise_latents",id:se,is_intermediate:C,cfg_scale:s,scheduler:l,steps:u,denoising_start:m?Math.min(_,1-v):1-v,denoising_end:m?_:1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:se,field:"latents"}}]};return x?(M.nodes[jc]={id:jc,type:"img_resize",is_intermediate:C,image:t,width:b.width,height:b.height},M.nodes[_e]={id:_e,type:"l2i",is_intermediate:C,fp32:w},M.nodes[ae]={id:ae,type:"img_resize",is_intermediate:C,width:y,height:g,use_cache:!1},M.edges.push({source:{node_id:jc,field:"image"},destination:{node_id:Nt,field:"image"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(M.nodes[ae]={type:"l2i",id:ae,is_intermediate:C,fp32:w,use_cache:!1},M.nodes[Nt].image=t,M.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(M,{generation_mode:"img2img",cfg_scale:s,cfg_rescale_multiplier:a,width:x?b.width:y,height:x?b.height:g,positive_prompt:r,negative_prompt:i,model:o,seed:c,steps:u,rand_device:A?"cpu":"cuda",scheduler:l,strength:v,init_image:t.image_name},ae),(h||p)&&(ao(e,M,k),k=Cn),m&&(qf(e,M,se,k),(h||p)&&(k=Eo)),co(e,M,k),Wf(e,M,se,k),ro(e,M,se),io(e,M,se),lo(e,M,se),e.system.shouldUseNSFWChecker&&so(e,M,ae),e.system.shouldUseWatermarker&&uo(e,M,ae),oo(e,M),M},R7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,seed:u,vaePrecision:d,shouldUseCpuNoise:f,maskBlur:h,maskBlurMethod:p,canvasCoherenceMode:m,canvasCoherenceSteps:_,canvasCoherenceStrength:v,seamlessXAxis:y,seamlessYAxis:g}=e.generation,{sdxlImg2ImgDenoisingStrength:b,shouldUseSDXLRefiner:S,refinerStart:w}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:C,height:x}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:k,boundingBoxScaleMethod:A}=e.canvas,R=d==="fp32",L=!0,M=["auto","manual"].includes(A);let E=pr;const P=f,{joinedPositiveStylePrompt:O,joinedNegativeStylePrompt:F}=xu(e),$={id:Pl,nodes:{[E]:{type:"sdxl_model_loader",id:E,model:s},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:i,style:O},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:o,style:F},[hr]:{type:"img_blur",id:hr,is_intermediate:L,radius:h,blur_type:p},[At]:{type:"i2l",id:At,is_intermediate:L,fp32:R},[me]:{type:"noise",id:me,use_cpu:P,seed:u,is_intermediate:L},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:L,fp32:R},[se]:{type:"denoise_latents",id:se,is_intermediate:L,steps:c,cfg_scale:a,scheduler:l,denoising_start:S?Math.min(w,1-b):1-b,denoising_end:S?w:1},[nt]:{type:"noise",id:nt,use_cpu:P,seed:u+1,is_intermediate:L},[kl]:{type:"add",id:kl,b:1,is_intermediate:L},[Re]:{type:"denoise_latents",id:Re,is_intermediate:L,steps:_,cfg_scale:a,scheduler:l,denoising_start:1-v,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:L,fp32:R},[ae]:{type:"color_correct",id:ae,is_intermediate:L,reference:t,use_cache:!1}},edges:[{source:{node_id:E,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:E,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:E,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:E,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:E,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:hr,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:se,field:"denoise_mask"}},{source:{node_id:E,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(M){const D=k.width,N=k.height;$.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:L,width:D,height:N,image:t},$.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:L,width:D,height:N,image:n},$.nodes[nr]={type:"img_resize",id:nr,is_intermediate:L,width:C,height:x},$.nodes[mr]={type:"img_resize",id:mr,is_intermediate:L,width:C,height:x},$.nodes[me].width=D,$.nodes[me].height=N,$.nodes[nt].width=D,$.nodes[nt].height=N,$.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:hr,field:"image"}},{source:{node_id:Dn,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else $.nodes[me].width=C,$.nodes[me].height=x,$.nodes[nt].width=C,$.nodes[nt].height=x,$.nodes[At]={...$.nodes[At],image:t},$.nodes[hr]={...$.nodes[hr],image:n},$.nodes[Et]={...$.nodes[Et],image:t},$.edges.push({source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:ae,field:"mask"}});return m!=="unmasked"&&($.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:L,fp32:R},M?$.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:Je,field:"image"}}):$.nodes[Je]={...$.nodes[Je],image:t},m==="mask"&&(M?$.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):$.nodes[Je]={...$.nodes[Je],mask:n}),m==="edge"&&($.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:L,edge_blur:h,edge_size:h*2,low_threshold:100,high_threshold:200},M?$.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):$.nodes[Jt]={...$.nodes[Jt],image:n},$.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),$.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(y||g)&&(ao(e,$,E),E=Cn),S&&(qf(e,$,Re,E,t,n),(y||g)&&(E=Eo)),co(e,$,E),Wf(e,$,se,E),ro(e,$,se),io(e,$,se),lo(e,$,se),e.system.shouldUseNSFWChecker&&so(e,$,ae),e.system.shouldUseWatermarker&&uo(e,$,ae),oo(e,$),$},O7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,seed:u,vaePrecision:d,shouldUseCpuNoise:f,maskBlur:h,canvasCoherenceMode:p,canvasCoherenceSteps:m,canvasCoherenceStrength:_,infillTileSize:v,infillPatchmatchDownscaleSize:y,infillMethod:g,seamlessXAxis:b,seamlessYAxis:S}=e.generation,{sdxlImg2ImgDenoisingStrength:w,shouldUseSDXLRefiner:C,refinerStart:x}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:k,height:A}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:R,boundingBoxScaleMethod:L}=e.canvas,M=d==="fp32",E=!0,P=["auto","manual"].includes(L);let O=pr;const F=f,{joinedPositiveStylePrompt:$,joinedNegativeStylePrompt:D}=xu(e),N={id:Il,nodes:{[pr]:{type:"sdxl_model_loader",id:pr,model:s},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:i,style:$},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:o,style:D},[Gd]:{type:"tomask",id:Gd,is_intermediate:E,image:t},[Jn]:{type:"mask_combine",id:Jn,is_intermediate:E,mask2:n},[At]:{type:"i2l",id:At,is_intermediate:E,fp32:M},[me]:{type:"noise",id:me,use_cpu:F,seed:u,is_intermediate:E},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:E,fp32:M},[se]:{type:"denoise_latents",id:se,is_intermediate:E,steps:c,cfg_scale:a,scheduler:l,denoising_start:C?Math.min(x,1-w):1-w,denoising_end:C?x:1},[nt]:{type:"noise",id:nt,use_cpu:F,seed:u+1,is_intermediate:E},[kl]:{type:"add",id:kl,b:1,is_intermediate:E},[Re]:{type:"denoise_latents",id:Re,is_intermediate:E,steps:m,cfg_scale:a,scheduler:l,denoising_start:1-_,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:E,fp32:M},[ae]:{type:"color_correct",id:ae,is_intermediate:E,use_cache:!1}},edges:[{source:{node_id:pr,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:pr,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:pr,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:pr,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:pr,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:rt,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Gd,field:"image"},destination:{node_id:Jn,field:"mask1"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:P?Tt:Jn,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:se,field:"denoise_mask"}},{source:{node_id:O,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:rt,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(g==="patchmatch"&&(N.nodes[rt]={type:"infill_patchmatch",id:rt,is_intermediate:E,downscale:y}),g==="lama"&&(N.nodes[rt]={type:"infill_lama",id:rt,is_intermediate:E}),g==="cv2"&&(N.nodes[rt]={type:"infill_cv2",id:rt,is_intermediate:E}),g==="tile"&&(N.nodes[rt]={type:"infill_tile",id:rt,is_intermediate:E,tile_size:v}),P){const z=R.width,V=R.height;N.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:E,width:z,height:V,image:t},N.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:E,width:z,height:V},N.nodes[nr]={type:"img_resize",id:nr,is_intermediate:E,width:k,height:A},N.nodes[Zs]={type:"img_resize",id:Zs,is_intermediate:E,width:k,height:A},N.nodes[mr]={type:"img_resize",id:mr,is_intermediate:E,width:k,height:A},N.nodes[me].width=z,N.nodes[me].height=V,N.nodes[nt].width=z,N.nodes[nt].height=V,N.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:rt,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:Tt,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:rt,field:"image"},destination:{node_id:Zs,field:"image"}},{source:{node_id:Zs,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else N.nodes[rt]={...N.nodes[rt],image:t},N.nodes[me].width=k,N.nodes[me].height=A,N.nodes[nt].width=k,N.nodes[nt].height=A,N.nodes[At]={...N.nodes[At],image:t},N.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:ae,field:"mask"}});return p!=="unmasked"&&(N.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:E,fp32:M},N.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:Je,field:"image"}}),p==="mask"&&(P?N.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):N.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Je,field:"mask"}})),p==="edge"&&(N.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:E,edge_blur:h,edge_size:h*2,low_threshold:100,high_threshold:200},P?N.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):N.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Jt,field:"image"}}),N.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),N.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(b||S)&&(ao(e,N,O),O=Cn),C&&(qf(e,N,Re,O,t),(b||S)&&(O=Eo)),co(e,N,O),Wf(e,N,se,O),ro(e,N,se),io(e,N,se),lo(e,N,se),e.system.shouldUseNSFWChecker&&so(e,N,ae),e.system.shouldUseWatermarker&&uo(e,N,ae),oo(e,N),N},$7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,vaePrecision:u,shouldUseCpuNoise:d,seamlessXAxis:f,seamlessYAxis:h}=e.generation,{width:p,height:m}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:_,boundingBoxScaleMethod:v}=e.canvas,y=u==="fp32",g=!0,b=["auto","manual"].includes(v),{shouldUseSDXLRefiner:S,refinerStart:w}=e.sdxl;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const C=d,x=i.model_type==="onnx";let k=x?R2:pr;const A=x?"onnx_model_loader":"sdxl_model_loader",R=x?{type:"t2l_onnx",id:se,is_intermediate:g,cfg_scale:o,scheduler:a,steps:c}:{type:"denoise_latents",id:se,is_intermediate:g,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:S?w:1},{joinedPositiveStylePrompt:L,joinedNegativeStylePrompt:M}=xu(e),E={id:N2,nodes:{[k]:{type:A,id:k,is_intermediate:g,model:i},[ve]:{type:x?"prompt_onnx":"sdxl_compel_prompt",id:ve,is_intermediate:g,prompt:n,style:L},[Se]:{type:x?"prompt_onnx":"sdxl_compel_prompt",id:Se,is_intermediate:g,prompt:r,style:M},[me]:{type:"noise",id:me,is_intermediate:g,seed:l,width:b?_.width:p,height:b?_.height:m,use_cpu:C},[R.id]:R},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}}]};return b?(E.nodes[_e]={id:_e,type:x?"l2i_onnx":"l2i",is_intermediate:g,fp32:y},E.nodes[ae]={id:ae,type:"img_resize",is_intermediate:g,width:p,height:m,use_cache:!1},E.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(E.nodes[ae]={type:x?"l2i_onnx":"l2i",id:ae,is_intermediate:g,fp32:y,use_cache:!1},E.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(E,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,width:b?_.width:p,height:b?_.height:m,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:C?"cpu":"cuda",scheduler:a},ae),(f||h)&&(ao(e,E,k),k=Cn),S&&(qf(e,E,se,k),(f||h)&&(k=Eo)),Wf(e,E,se,k),co(e,E,k),ro(e,E,se),io(e,E,se),lo(e,E,se),e.system.shouldUseNSFWChecker&&so(e,E,ae),e.system.shouldUseWatermarker&&uo(e,E,ae),oo(e,E),E},N7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,vaePrecision:u,clipSkip:d,shouldUseCpuNoise:f,seamlessXAxis:h,seamlessYAxis:p}=e.generation,{width:m,height:_}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:v,boundingBoxScaleMethod:y}=e.canvas,g=u==="fp32",b=!0,S=["auto","manual"].includes(y);if(!i)throw t.error("No model found in state"),new Error("No model found in state");const w=f,C=i.model_type==="onnx";let x=C?R2:Oo;const k=C?"onnx_model_loader":"main_model_loader",A=C?{type:"t2l_onnx",id:le,is_intermediate:b,cfg_scale:o,scheduler:a,steps:c}:{type:"denoise_latents",id:le,is_intermediate:b,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:1},R={id:RH,nodes:{[x]:{type:k,id:x,is_intermediate:b,model:i},[at]:{type:"clip_skip",id:at,is_intermediate:b,skipped_layers:d},[ve]:{type:C?"prompt_onnx":"compel",id:ve,is_intermediate:b,prompt:n},[Se]:{type:C?"prompt_onnx":"compel",id:Se,is_intermediate:b,prompt:r},[me]:{type:"noise",id:me,is_intermediate:b,seed:l,width:S?v.width:m,height:S?v.height:_,use_cpu:w},[A.id]:A},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}}]};return S?(R.nodes[_e]={id:_e,type:C?"l2i_onnx":"l2i",is_intermediate:b,fp32:g},R.nodes[ae]={id:ae,type:"img_resize",is_intermediate:b,width:m,height:_,use_cache:!1},R.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(R.nodes[ae]={type:C?"l2i_onnx":"l2i",id:ae,is_intermediate:b,fp32:g,use_cache:!1},R.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(R,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,width:S?v.width:m,height:S?v.height:_,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:w?"cpu":"cuda",scheduler:a,clip_skip:d},ae),(h||p)&&(ao(e,R,x),x=Cn),co(e,R,x),Hf(e,R,le,x),ro(e,R,le),io(e,R,le),lo(e,R,le),e.system.shouldUseNSFWChecker&&so(e,R,ae),e.system.shouldUseWatermarker&&uo(e,R,ae),oo(e,R),R},F7e=(e,t,n,r)=>{let i;if(t==="txt2img")e.generation.model&&e.generation.model.base_model==="sdxl"?i=$7e(e):i=N7e(e);else if(t==="img2img"){if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=M7e(e,n):i=k7e(e,n)}else if(t==="inpaint"){if(!n||!r)throw new Error("Missing canvas init and mask images");e.generation.model&&e.generation.model.base_model==="sdxl"?i=R7e(e,n,r):i=P7e(e,n,r)}else{if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=O7e(e,n,r):i=I7e(e,n,r)}return i},cC=({count:e,start:t,min:n=vae,max:r=mp})=>{const i=t??Aoe(n,r),o=[];for(let s=i;s{const{iterations:r,model:i,shouldRandomizeSeed:o,seed:s}=e.generation,{shouldConcatSDXLStylePrompt:a,positiveStylePrompt:l}=e.sdxl,{prompts:c,seedBehaviour:u}=e.dynamicPrompts,d=[];if(c.length===1){const h=cC({count:r,start:o?void 0:s}),p=[];t.nodes[me]&&p.push({node_path:me,field_name:"seed",items:h}),Fh(t)&&(Nh(t,"seed"),p.push({node_path:yi,field_name:"seed",items:h})),t.nodes[nt]&&p.push({node_path:nt,field_name:"seed",items:h.map(m=>(m+1)%mp)}),d.push(p)}else{const h=[],p=[];if(u==="PER_PROMPT"){const _=cC({count:c.length*r,start:o?void 0:s});t.nodes[me]&&h.push({node_path:me,field_name:"seed",items:_}),Fh(t)&&(Nh(t,"seed"),h.push({node_path:yi,field_name:"seed",items:_})),t.nodes[nt]&&h.push({node_path:nt,field_name:"seed",items:_.map(v=>(v+1)%mp)})}else{const _=cC({count:r,start:o?void 0:s});t.nodes[me]&&p.push({node_path:me,field_name:"seed",items:_}),Fh(t)&&(Nh(t,"seed"),p.push({node_path:yi,field_name:"seed",items:_})),t.nodes[nt]&&p.push({node_path:nt,field_name:"seed",items:_.map(v=>(v+1)%mp)}),d.push(p)}const m=u==="PER_PROMPT"?Ooe(r).flatMap(()=>c):c;if(t.nodes[ve]&&h.push({node_path:ve,field_name:"prompt",items:m}),Fh(t)&&(Nh(t,"positive_prompt"),h.push({node_path:yi,field_name:"positive_prompt",items:m})),a&&(i==null?void 0:i.base_model)==="sdxl"){const _=m.map(v=>[v,l].join(" "));t.nodes[ve]&&h.push({node_path:ve,field_name:"style",items:_}),Fh(t)&&(Nh(t,"positive_style_prompt"),h.push({node_path:yi,field_name:"positive_style_prompt",items:m}))}d.push(h)}return{prepend:n,batch:{graph:t,runs:1,data:d}}},D7e=()=>{fe({predicate:e=>YA.match(e)&&e.payload.tabName==="unifiedCanvas",effect:async(e,{getState:t,dispatch:n})=>{const r=ue("queue"),{prepend:i}=e.payload,o=t(),{layerState:s,boundingBoxCoordinates:a,boundingBoxDimensions:l,isMaskEnabled:c,shouldPreserveMaskedArea:u}=o.canvas,d=await QA(s,a,l,c,u);if(!d){r.error("Unable to create canvas data");return}const{baseBlob:f,baseImageData:h,maskBlob:p,maskImageData:m}=d,_=b7e(h,m);if(o.system.enableImageDebugging){const S=await XR(f),w=await XR(p);m7e([{base64:w,caption:"mask b64"},{base64:S,caption:"image b64"}])}r.debug(`Generation mode: ${_}`);let v,y;["img2img","inpaint","outpaint"].includes(_)&&(v=await n(ce.endpoints.uploadImage.initiate({file:new File([f],"canvasInitImage.png",{type:"image/png"}),image_category:"general",is_intermediate:!0})).unwrap()),["inpaint","outpaint"].includes(_)&&(y=await n(ce.endpoints.uploadImage.initiate({file:new File([p],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!0})).unwrap());const g=F7e(o,_,v,y);r.debug({graph:tt(g)},"Canvas graph built"),n(lB(g));const b=OH(o,g,i);try{const S=n(en.endpoints.enqueueBatch.initiate(b,{fixedCacheKey:"enqueueBatch"})),w=await S.unwrap();S.reset();const C=w.batch.batch_id;o.canvas.layerState.stagingArea.boundingBox||n(sue({boundingBox:{...o.canvas.boundingBoxCoordinates,...o.canvas.boundingBoxDimensions}})),n(aue(C))}catch{}}})},L7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,initialImage:u,img2imgStrength:d,shouldFitToWidthHeight:f,width:h,height:p,clipSkip:m,shouldUseCpuNoise:_,vaePrecision:v,seamlessXAxis:y,seamlessYAxis:g}=e.generation;if(!u)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const b=v==="fp32",S=!0;let w=Oo;const C=_,x={id:tE,nodes:{[w]:{type:"main_model_loader",id:w,model:i,is_intermediate:S},[at]:{type:"clip_skip",id:at,skipped_layers:m,is_intermediate:S},[ve]:{type:"compel",id:ve,prompt:n,is_intermediate:S},[Se]:{type:"compel",id:Se,prompt:r,is_intermediate:S},[me]:{type:"noise",id:me,use_cpu:C,seed:l,is_intermediate:S},[_e]:{type:"l2i",id:_e,fp32:b,is_intermediate:S},[le]:{type:"denoise_latents",id:le,cfg_scale:o,scheduler:a,steps:c,denoising_start:1-d,denoising_end:1,is_intermediate:S},[Nt]:{type:"i2l",id:Nt,fp32:b,is_intermediate:S,use_cache:!1}},edges:[{source:{node_id:w,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:w,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(f&&(u.width!==h||u.height!==p)){const k={id:ls,type:"img_resize",image:{image_name:u.imageName},is_intermediate:!0,width:h,height:p};x.nodes[ls]=k,x.edges.push({source:{node_id:ls,field:"image"},destination:{node_id:Nt,field:"image"}}),x.edges.push({source:{node_id:ls,field:"width"},destination:{node_id:me,field:"width"}}),x.edges.push({source:{node_id:ls,field:"height"},destination:{node_id:me,field:"height"}})}else x.nodes[Nt].image={image_name:u.imageName},x.edges.push({source:{node_id:Nt,field:"width"},destination:{node_id:me,field:"width"}}),x.edges.push({source:{node_id:Nt,field:"height"},destination:{node_id:me,field:"height"}});return xa(x,{generation_mode:"img2img",cfg_scale:o,cfg_rescale_multiplier:s,height:p,width:h,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:C?"cpu":"cuda",scheduler:a,clip_skip:m,strength:d,init_image:u.imageName},_e),(y||g)&&(ao(e,x,w),w=Cn),co(e,x,w),Hf(e,x,le,w),ro(e,x,le),io(e,x,le),lo(e,x,le),e.system.shouldUseNSFWChecker&&so(e,x),e.system.shouldUseWatermarker&&uo(e,x),oo(e,x),x},B7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,initialImage:u,shouldFitToWidthHeight:d,width:f,height:h,shouldUseCpuNoise:p,vaePrecision:m,seamlessXAxis:_,seamlessYAxis:v}=e.generation,{positiveStylePrompt:y,negativeStylePrompt:g,shouldUseSDXLRefiner:b,refinerStart:S,sdxlImg2ImgDenoisingStrength:w}=e.sdxl;if(!u)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const C=m==="fp32",x=!0;let k=pr;const A=p,{joinedPositiveStylePrompt:R,joinedNegativeStylePrompt:L}=xu(e),M={id:lb,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:i,is_intermediate:x},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:n,style:R,is_intermediate:x},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:r,style:L,is_intermediate:x},[me]:{type:"noise",id:me,use_cpu:A,seed:l,is_intermediate:x},[_e]:{type:"l2i",id:_e,fp32:C,is_intermediate:x},[se]:{type:"denoise_latents",id:se,cfg_scale:o,scheduler:a,steps:c,denoising_start:b?Math.min(S,1-w):1-w,denoising_end:b?S:1,is_intermediate:x},[Nt]:{type:"i2l",id:Nt,fp32:C,is_intermediate:x,use_cache:!1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(d&&(u.width!==f||u.height!==h)){const E={id:ls,type:"img_resize",image:{image_name:u.imageName},is_intermediate:!0,width:f,height:h};M.nodes[ls]=E,M.edges.push({source:{node_id:ls,field:"image"},destination:{node_id:Nt,field:"image"}}),M.edges.push({source:{node_id:ls,field:"width"},destination:{node_id:me,field:"width"}}),M.edges.push({source:{node_id:ls,field:"height"},destination:{node_id:me,field:"height"}})}else M.nodes[Nt].image={image_name:u.imageName},M.edges.push({source:{node_id:Nt,field:"width"},destination:{node_id:me,field:"width"}}),M.edges.push({source:{node_id:Nt,field:"height"},destination:{node_id:me,field:"height"}});return xa(M,{generation_mode:"sdxl_img2img",cfg_scale:o,cfg_rescale_multiplier:s,height:h,width:f,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:A?"cpu":"cuda",scheduler:a,strength:w,init_image:u.imageName,positive_style_prompt:y,negative_style_prompt:g},_e),(_||v)&&(ao(e,M,k),k=Cn),b&&(qf(e,M,se),(_||v)&&(k=Eo)),co(e,M,k),Wf(e,M,se,k),ro(e,M,se),io(e,M,se),lo(e,M,se),e.system.shouldUseNSFWChecker&&so(e,M),e.system.shouldUseWatermarker&&uo(e,M),oo(e,M),M},z7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,width:u,height:d,shouldUseCpuNoise:f,vaePrecision:h,seamlessXAxis:p,seamlessYAxis:m}=e.generation,{positiveStylePrompt:_,negativeStylePrompt:v,shouldUseSDXLRefiner:y,refinerStart:g}=e.sdxl,b=f;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const S=h==="fp32",w=!0,{joinedPositiveStylePrompt:C,joinedNegativeStylePrompt:x}=xu(e);let k=pr;const A={id:ZA,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:i,is_intermediate:w},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:n,style:C,is_intermediate:w},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:r,style:x,is_intermediate:w},[me]:{type:"noise",id:me,seed:l,width:u,height:d,use_cpu:b,is_intermediate:w},[se]:{type:"denoise_latents",id:se,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:y?g:1,is_intermediate:w},[_e]:{type:"l2i",id:_e,fp32:S,is_intermediate:w,use_cache:!1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}}]};return xa(A,{generation_mode:"sdxl_txt2img",cfg_scale:o,cfg_rescale_multiplier:s,height:d,width:u,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:b?"cpu":"cuda",scheduler:a,positive_style_prompt:_,negative_style_prompt:v},_e),(p||m)&&(ao(e,A,k),k=Cn),y&&(qf(e,A,se),(p||m)&&(k=Eo)),co(e,A,k),Wf(e,A,se,k),ro(e,A,se),io(e,A,se),lo(e,A,se),e.system.shouldUseNSFWChecker&&so(e,A),e.system.shouldUseWatermarker&&uo(e,A),oo(e,A),A};function j7e(e){const t=["vae","control","ip_adapter","metadata","unet","positive_conditioning","negative_conditioning"],n=[];e.edges.forEach(r=>{r.destination.node_id===le&&t.includes(r.destination.field)&&n.push({source:{node_id:r.source.node_id,field:r.source.field},destination:{node_id:Ku,field:r.destination.field}})}),e.edges=e.edges.concat(n)}function V7e(e,t,n){const r=t/n;let i;e=="sdxl"?i=1024:i=512;const o=Math.floor(i*.5),s=i*i;let a,l;r>1?(l=Math.max(o,Math.sqrt(s/r)),a=l*r):(a=Math.max(o,Math.sqrt(s*r)),l=a/r),a=Math.min(t,a),l=Math.min(n,l);const c=Or(Math.floor(a),8),u=Or(Math.floor(l),8);return{newWidth:c,newHeight:u}}const U7e=(e,t)=>{var _;if(!e.generation.hrfEnabled||e.config.disabledSDFeatures.includes("hrf")||((_=e.generation.model)==null?void 0:_.model_type)==="onnx")return;const n=ue("txt2img"),{vae:r,hrfStrength:i,hrfEnabled:o,hrfMethod:s}=e.generation,a=!r,l=e.generation.width,c=e.generation.height,u=e.generation.model?e.generation.model.base_model:"sd1",{newWidth:d,newHeight:f}=V7e(u,l,c),h=t.nodes[le],p=t.nodes[me],m=t.nodes[_e];if(!h){n.error("originalDenoiseLatentsNode is undefined");return}if(!p){n.error("originalNoiseNode is undefined");return}if(!m){n.error("originalLatentsToImageNode is undefined");return}if(p&&(p.width=d,p.height=f),t.nodes[fc]={type:"l2i",id:fc,fp32:m==null?void 0:m.fp32,is_intermediate:!0},t.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:fc,field:"latents"}},{source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:fc,field:"vae"}}),t.nodes[Da]={id:Da,type:"img_resize",is_intermediate:!0,width:l,height:c},s=="ESRGAN"){let v="RealESRGAN_x2plus.pth";l*c/(d*f)>2&&(v="RealESRGAN_x4plus.pth"),t.nodes[ep]={id:ep,type:"esrgan",model_name:v,is_intermediate:!0},t.edges.push({source:{node_id:fc,field:"image"},destination:{node_id:ep,field:"image"}},{source:{node_id:ep,field:"image"},destination:{node_id:Da,field:"image"}})}else t.edges.push({source:{node_id:fc,field:"image"},destination:{node_id:Da,field:"image"}});t.nodes[Rh]={type:"noise",id:Rh,seed:p==null?void 0:p.seed,use_cpu:p==null?void 0:p.use_cpu,is_intermediate:!0},t.edges.push({source:{node_id:Da,field:"height"},destination:{node_id:Rh,field:"height"}},{source:{node_id:Da,field:"width"},destination:{node_id:Rh,field:"width"}}),t.nodes[Mh]={type:"i2l",id:Mh,is_intermediate:!0},t.edges.push({source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:Mh,field:"vae"}},{source:{node_id:Da,field:"image"},destination:{node_id:Mh,field:"image"}}),t.nodes[Ku]={type:"denoise_latents",id:Ku,is_intermediate:!0,cfg_scale:h==null?void 0:h.cfg_scale,scheduler:h==null?void 0:h.scheduler,steps:h==null?void 0:h.steps,denoising_start:1-e.generation.hrfStrength,denoising_end:1},t.edges.push({source:{node_id:Mh,field:"latents"},destination:{node_id:Ku,field:"latents"}},{source:{node_id:Rh,field:"noise"},destination:{node_id:Ku,field:"noise"}}),j7e(t),t.nodes[Xa]={type:"l2i",id:Xa,fp32:m==null?void 0:m.fp32,is_intermediate:!0},t.edges.push({source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:Xa,field:"vae"}},{source:{node_id:Ku,field:"latents"},destination:{node_id:Xa,field:"latents"}}),Bo(t,{hrf_strength:i,hrf_enabled:o,hrf_method:s}),T7e(t,Xa)},G7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,steps:l,width:c,height:u,clipSkip:d,shouldUseCpuNoise:f,vaePrecision:h,seamlessXAxis:p,seamlessYAxis:m,seed:_}=e.generation,v=f;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const y=h==="fp32",g=!0,b=i.model_type==="onnx";let S=b?R2:Oo;const w=b?"onnx_model_loader":"main_model_loader",C=b?{type:"t2l_onnx",id:le,is_intermediate:g,cfg_scale:o,scheduler:a,steps:l}:{type:"denoise_latents",id:le,is_intermediate:g,cfg_scale:o,cfg_rescale_multiplier:s,scheduler:a,steps:l,denoising_start:0,denoising_end:1},x={id:MH,nodes:{[S]:{type:w,id:S,is_intermediate:g,model:i},[at]:{type:"clip_skip",id:at,skipped_layers:d,is_intermediate:g},[ve]:{type:b?"prompt_onnx":"compel",id:ve,prompt:n,is_intermediate:g},[Se]:{type:b?"prompt_onnx":"compel",id:Se,prompt:r,is_intermediate:g},[me]:{type:"noise",id:me,seed:_,width:c,height:u,use_cpu:v,is_intermediate:g},[C.id]:C,[_e]:{type:b?"l2i_onnx":"l2i",id:_e,fp32:y,is_intermediate:g,use_cache:!1}},edges:[{source:{node_id:S,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:S,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}}]};return xa(x,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,height:u,width:c,positive_prompt:n,negative_prompt:r,model:i,seed:_,steps:l,rand_device:v?"cpu":"cuda",scheduler:a,clip_skip:d},_e),(p||m)&&(ao(e,x,S),S=Cn),co(e,x,S),Hf(e,x,le,S),ro(e,x,le),io(e,x,le),lo(e,x,le),e.generation.hrfEnabled&&!b&&U7e(e,x),e.system.shouldUseNSFWChecker&&so(e,x),e.system.shouldUseWatermarker&&uo(e,x),oo(e,x),x},H7e=()=>{fe({predicate:e=>YA.match(e)&&(e.payload.tabName==="txt2img"||e.payload.tabName==="img2img"),effect:async(e,{getState:t,dispatch:n})=>{const r=t(),i=r.generation.model,{prepend:o}=e.payload;let s;i&&i.base_model==="sdxl"?e.payload.tabName==="txt2img"?s=z7e(r):s=B7e(r):e.payload.tabName==="txt2img"?s=G7e(r):s=L7e(r);const a=OH(r,s,o);n(en.endpoints.enqueueBatch.initiate(a,{fixedCacheKey:"enqueueBatch"})).reset()}})},W7e=e=>{if(Che(e)&&e.value){const t=Ge(e.value),{r:n,g:r,b:i,a:o}=e.value,s=Math.max(0,Math.min(o*255,255));return Object.assign(t,{r:n,g:r,b:i,a:s}),t}return e.value},q7e=e=>{const{nodes:t,edges:n}=e,i=t.filter(Sn).reduce((l,c)=>{const{id:u,data:d}=c,{type:f,inputs:h,isIntermediate:p}=d,m=og(h,(v,y,g)=>{const b=W7e(y);return v[g]=b,v},{});m.use_cache=c.data.useCache;const _={type:f,id:u,...m,is_intermediate:p};return Object.assign(l,{[u]:_}),l},{}),s=n.filter(l=>l.type!=="collapsed").reduce((l,c)=>{const{source:u,target:d,sourceHandle:f,targetHandle:h}=c;return l.push({source:{node_id:u,field:f},destination:{node_id:d,field:h}}),l},[]);return s.forEach(l=>{const c=i[l.destination.node_id],u=l.destination.field;i[l.destination.node_id]=uu(c,u)}),{id:ul(),nodes:i,edges:s}},$H=T.object({x:T.number(),y:T.number()}).default({x:0,y:0}),cb=T.number().gt(0).nullish(),K7e=T.enum(["user","default"]),NH=T.object({id:T.string().trim().min(1),type:T.literal("invocation"),data:QB,width:cb,height:cb,position:$H}),X7e=T.object({id:T.string().trim().min(1),type:T.literal("notes"),data:YB,width:cb,height:cb,position:$H}),FH=T.union([NH,X7e]),Q7e=e=>NH.safeParse(e).success,DH=T.object({id:T.string().trim().min(1),source:T.string().trim().min(1),target:T.string().trim().min(1)}),Y7e=DH.extend({type:T.literal("default"),sourceHandle:T.string().trim().min(1),targetHandle:T.string().trim().min(1)}),Z7e=DH.extend({type:T.literal("collapsed")}),LH=T.union([Y7e,Z7e]),BH=T.object({id:T.string().min(1).optional(),name:T.string(),author:T.string(),description:T.string(),version:T.string(),contact:T.string(),tags:T.string(),notes:T.string(),nodes:T.array(FH),edges:T.array(LH),exposedFields:T.array(ahe),meta:T.object({category:K7e.default("user"),version:T.literal("2.0.0")})}),J7e=/[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*/u;function e$e(e){return e.length===1?e[0].toString():e.reduce((t,n)=>{if(typeof n=="number")return t+"["+n.toString()+"]";if(n.includes('"'))return t+'["'+t$e(n)+'"]';if(!J7e.test(n))return t+'["'+n+'"]';const r=t.length===0?"":".";return t+r+n},"")}function t$e(e){return e.replace(/"/g,'\\"')}function n$e(e){return e.length!==0}const r$e=99,i$e="; ",o$e=", or ",zH="Validation error",s$e=": ";class a$e extends Error{constructor(n,r=[]){super(n);Kl(this,"details");Kl(this,"name");this.details=r,this.name="ZodValidationError"}toString(){return this.message}}function jH(e){const{issue:t,issueSeparator:n,unionSeparator:r,includePath:i}=e;if(t.code==="invalid_union")return t.unionErrors.reduce((o,s)=>{const a=s.issues.map(l=>jH({issue:l,issueSeparator:n,unionSeparator:r,includePath:i})).join(n);return o.includes(a)||o.push(a),o},[]).join(r);if(i&&n$e(t.path)){if(t.path.length===1){const o=t.path[0];if(typeof o=="number")return`${t.message} at index ${o}`}return`${t.message} at "${e$e(t.path)}"`}return t.message}function l$e(e,t,n){return t!==null?e.length>0?[t,e].join(n):t:e.length>0?e:zH}function rE(e,t={}){const{maxIssuesInMessage:n=r$e,issueSeparator:r=i$e,unionSeparator:i=o$e,prefixSeparator:o=s$e,prefix:s=zH,includePath:a=!0}=t,l=e.errors.slice(0,n).map(u=>jH({issue:u,issueSeparator:r,unionSeparator:i,includePath:a})).join(r),c=l$e(l,s,o);return new a$e(c,e.errors)}const c$e=({nodes:e,edges:t,workflow:n})=>{const r=uu(Ge(n),"isTouched"),i=Ge(e),o=Ge(t),s={...r,nodes:[],edges:[]};return i.filter(a=>Sn(a)||Y5(a)).forEach(a=>{const l=FH.safeParse(a);if(!l.success){const{message:c}=rE(l.error,{prefix:Oe.t("nodes.unableToParseNode")});ue("nodes").warn({node:tt(a)},c);return}s.nodes.push(l.data)}),o.forEach(a=>{const l=LH.safeParse(a);if(!l.success){const{message:c}=rE(l.error,{prefix:Oe.t("nodes.unableToParseEdge")});ue("nodes").warn({edge:tt(a)},c);return}s.edges.push(l.data)}),s},u$e=()=>{fe({predicate:e=>YA.match(e)&&e.payload.tabName==="nodes",effect:async(e,{getState:t,dispatch:n})=>{const r=t(),{nodes:i,edges:o}=r.nodes,s=r.workflow,a=q7e(r.nodes),l=c$e({nodes:i,edges:o,workflow:s});delete l.id;const c={batch:{graph:a,workflow:l,runs:r.generation.iterations},prepend:e.payload.prepend};n(en.endpoints.enqueueBatch.initiate(c,{fixedCacheKey:"enqueueBatch"})).reset()}})},d$e=()=>{fe({matcher:ce.endpoints.addImageToBoard.matchFulfilled,effect:e=>{const t=ue("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Image added to board")}})},f$e=()=>{fe({matcher:ce.endpoints.addImageToBoard.matchRejected,effect:e=>{const t=ue("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Problem adding image to board")}})},ek=he("deleteImageModal/imageDeletionConfirmed"),NWe=hu(e=>e,e=>e.gallery.selection[e.gallery.selection.length-1]),VH=hu([e=>e],e=>{const{selectedBoardId:t,galleryView:n}=e.gallery;return{board_id:t,categories:n==="images"?Rn:Pr,offset:0,limit:xue,is_intermediate:!1}}),h$e=()=>{fe({actionCreator:ek,effect:async(e,{dispatch:t,getState:n,condition:r})=>{var f;const{imageDTOs:i,imagesUsage:o}=e.payload;if(i.length!==1||o.length!==1)return;const s=i[0],a=o[0];if(!s||!a)return;t(fT(!1));const l=n(),c=(f=l.gallery.selection[l.gallery.selection.length-1])==null?void 0:f.image_name;if(s&&(s==null?void 0:s.image_name)===c){const{image_name:h}=s,p=VH(l),{data:m}=ce.endpoints.listImages.select(p)(l),_=m?Ot.getSelectors().selectAll(m):[],v=_.findIndex(S=>S.image_name===h),y=_.filter(S=>S.image_name!==h),g=el(v,0,y.length-1),b=y[g];t(ps(b||null))}a.isCanvasImage&&t(dT()),i.forEach(h=>{var p;((p=n().generation.initialImage)==null?void 0:p.imageName)===h.image_name&&t(oT()),Fo(As(n().controlAdapters),m=>{(m.controlImage===h.image_name||hi(m)&&m.processedControlImage===h.image_name)&&(t(Nl({id:m.id,controlImage:null})),t(X4({id:m.id,processedControlImage:null})))}),n().nodes.nodes.forEach(m=>{Sn(m)&&Fo(m.data.inputs,_=>{var v;vT(_)&&((v=_.value)==null?void 0:v.image_name)===h.image_name&&t(Um({nodeId:m.data.id,fieldName:_.name,value:void 0}))})})});const{requestId:u}=t(ce.endpoints.deleteImage.initiate(s));await r(h=>ce.endpoints.deleteImage.matchFulfilled(h)&&h.meta.requestId===u,3e4)&&t(Lo.util.invalidateTags([{type:"Board",id:s.board_id??"none"}]))}})},p$e=()=>{fe({actionCreator:ek,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTOs:r,imagesUsage:i}=e.payload;if(!(r.length<=1||i.length<=1))try{await t(ce.endpoints.deleteImages.initiate({imageDTOs:r})).unwrap();const o=n(),s=VH(o),{data:a}=ce.endpoints.listImages.select(s)(o),l=a?Ot.getSelectors().selectAll(a)[0]:void 0;t(ps(l||null)),t(fT(!1)),i.some(c=>c.isCanvasImage)&&t(dT()),r.forEach(c=>{var u;((u=n().generation.initialImage)==null?void 0:u.imageName)===c.image_name&&t(oT()),Fo(As(n().controlAdapters),d=>{(d.controlImage===c.image_name||hi(d)&&d.processedControlImage===c.image_name)&&(t(Nl({id:d.id,controlImage:null})),t(X4({id:d.id,processedControlImage:null})))}),n().nodes.nodes.forEach(d=>{Sn(d)&&Fo(d.data.inputs,f=>{var h;vT(f)&&((h=f.value)==null?void 0:h.image_name)===c.image_name&&t(Um({nodeId:d.data.id,fieldName:f.name,value:void 0}))})})})}catch{}}})},g$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchPending,effect:()=>{}})},m$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchFulfilled,effect:e=>{ue("images").debug({imageDTO:e.meta.arg.originalArgs},"Image deleted")}})},y$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchRejected,effect:e=>{ue("images").debug({imageDTO:e.meta.arg.originalArgs},"Unable to delete image")}})},UH=he("dnd/dndDropped"),v$e=()=>{fe({actionCreator:UH,effect:async(e,{dispatch:t})=>{const n=ue("dnd"),{activeData:r,overData:i}=e.payload;if(r.payloadType==="IMAGE_DTO"?n.debug({activeData:r,overData:i},"Image dropped"):r.payloadType==="IMAGE_DTOS"?n.debug({activeData:r,overData:i},`Images (${r.payload.imageDTOs.length}) dropped`):r.payloadType==="NODE_FIELD"?n.debug({activeData:tt(r),overData:tt(i)},"Node field dropped"):n.debug({activeData:r,overData:i},"Unknown payload dropped"),i.actionType==="ADD_FIELD_TO_LINEAR"&&r.payloadType==="NODE_FIELD"){const{nodeId:o,field:s}=r.payload;t(bbe({nodeId:o,fieldName:s.name}))}if(i.actionType==="SET_CURRENT_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(ps(r.payload.imageDTO));return}if(i.actionType==="SET_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(m_(r.payload.imageDTO));return}if(i.actionType==="SET_CONTROL_ADAPTER_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{id:o}=i.context;t(Nl({id:o,controlImage:r.payload.imageDTO.image_name})),t(Q4({id:o,isEnabled:!0}));return}if(i.actionType==="SET_CANVAS_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(wL(r.payload.imageDTO));return}if(i.actionType==="SET_NODES_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{fieldName:o,nodeId:s}=i.context;t(Um({nodeId:s,fieldName:o,value:r.payload.imageDTO}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload,{boardId:s}=i.context;t(ce.endpoints.addImageToBoard.initiate({imageDTO:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload;t(ce.endpoints.removeImageFromBoard.initiate({imageDTO:o}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload,{boardId:s}=i.context;t(ce.endpoints.addImagesToBoard.initiate({imageDTOs:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload;t(ce.endpoints.removeImagesFromBoard.initiate({imageDTOs:o}));return}}})},b$e=()=>{fe({matcher:ce.endpoints.removeImageFromBoard.matchFulfilled,effect:e=>{const t=ue("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Image removed from board")}})},_$e=()=>{fe({matcher:ce.endpoints.removeImageFromBoard.matchRejected,effect:e=>{const t=ue("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Problem removing image from board")}})},S$e=()=>{fe({actionCreator:hue,effect:async(e,{dispatch:t,getState:n})=>{const r=e.payload,i=n(),{shouldConfirmOnDelete:o}=i.system,s=G8e(n()),a=s.some(l=>l.isCanvasImage)||s.some(l=>l.isInitialImage)||s.some(l=>l.isControlImage)||s.some(l=>l.isNodesImage);if(o||a){t(fT(!0));return}t(ek({imageDTOs:r,imagesUsage:s}))}})},x$e=()=>{fe({matcher:ce.endpoints.uploadImage.matchFulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=ue("images"),i=e.payload,o=n(),{autoAddBoardId:s}=o.gallery;r.debug({imageDTO:i},"Image uploaded");const{postUploadAction:a}=e.meta.arg.originalArgs;if(e.payload.is_intermediate&&!a)return;const l={title:J("toast.imageUploaded"),status:"success"};if((a==null?void 0:a.type)==="TOAST"){const{toastOptions:c}=a;if(!s||s==="none")t(Ve({...l,...c}));else{t(ce.endpoints.addImageToBoard.initiate({board_id:s,imageDTO:i}));const{data:u}=Qe.endpoints.listAllBoards.select()(o),d=u==null?void 0:u.find(h=>h.board_id===s),f=d?`${J("toast.addedToBoard")} ${d.board_name}`:`${J("toast.addedToBoard")} ${s}`;t(Ve({...l,description:f}))}return}if((a==null?void 0:a.type)==="SET_CANVAS_INITIAL_IMAGE"){t(wL(i)),t(Ve({...l,description:J("toast.setAsCanvasInitialImage")}));return}if((a==null?void 0:a.type)==="SET_CONTROL_ADAPTER_IMAGE"){const{id:c}=a;t(Q4({id:c,isEnabled:!0})),t(Nl({id:c,controlImage:i.image_name})),t(Ve({...l,description:J("toast.setControlImage")}));return}if((a==null?void 0:a.type)==="SET_INITIAL_IMAGE"){t(m_(i)),t(Ve({...l,description:J("toast.setInitialImage")}));return}if((a==null?void 0:a.type)==="SET_NODES_IMAGE"){const{nodeId:c,fieldName:u}=a;t(Um({nodeId:c,fieldName:u,value:i})),t(Ve({...l,description:`${J("toast.setNodeField")} ${u}`}));return}}})},w$e=()=>{fe({matcher:ce.endpoints.uploadImage.matchRejected,effect:(e,{dispatch:t})=>{const n=ue("images"),r={arg:{...uu(e.meta.arg.originalArgs,["file","postUploadAction"]),file:""}};n.error({...r},"Image upload failed"),t(Ve({title:J("toast.imageUploadFailed"),description:e.error.message,status:"error"}))}})},C$e=()=>{fe({matcher:ce.endpoints.starImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{updated_image_names:r}=e.payload,i=n(),{selection:o}=i.gallery,s=[];o.forEach(a=>{r.includes(a.image_name)?s.push({...a,starred:!0}):s.push(a)}),t(iB(s))}})},E$e=()=>{fe({matcher:ce.endpoints.unstarImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{updated_image_names:r}=e.payload,i=n(),{selection:o}=i.gallery,s=[];o.forEach(a=>{r.includes(a.image_name)?s.push({...a,starred:!1}):s.push(a)}),t(iB(s))}})},T$e=he("generation/initialImageSelected"),A$e=he("generation/modelSelected"),k$e=()=>{fe({actionCreator:T$e,effect:(e,{dispatch:t})=>{if(!e.payload){t(Ve(pi({title:J("toast.imageNotLoadedDesc"),status:"error"})));return}t(m_(e.payload)),t(Ve(pi(J("toast.sentToImageToImage"))))}})},P$e=()=>{fe({actionCreator:A$e,effect:(e,{getState:t,dispatch:n})=>{var l,c;const r=ue("models"),i=t(),o=g_.safeParse(e.payload);if(!o.success){r.error({error:o.error.format()},"Failed to parse main model");return}const s=o.data,{base_model:a}=s;if(((l=i.generation.model)==null?void 0:l.base_model)!==a){let u=0;Fo(i.lora.loras,(f,h)=>{f.base_model!==a&&(n(sB(h)),u+=1)});const{vae:d}=i.generation;d&&d.base_model!==a&&(n(nL(null)),u+=1),As(i.controlAdapters).forEach(f=>{var h;((h=f.model)==null?void 0:h.base_model)!==a&&(n(Q4({id:f.id,isEnabled:!1})),u+=1)}),u>0&&n(Ve(pi({title:J("toast.baseModelChangedCleared",{count:u}),status:"warning"})))}((c=i.generation.model)==null?void 0:c.base_model)!==s.base_model&&i.ui.shouldAutoChangeDimensions&&(["sdxl","sdxl-refiner"].includes(s.base_model)?(n(oI(1024)),n(sI(1024)),n(CI({width:1024,height:1024}))):(n(oI(512)),n(sI(512)),n(CI({width:512,height:512})))),n(tl(s))}})},Wg=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),QR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),YR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),ZR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),JR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),eO=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),tO=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),iE=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),I$e=({base_model:e,model_type:t,model_name:n})=>`${e}/${t}/${n}`,Oa=e=>{const t=[];return e.forEach(n=>{const r={...Ge(n),id:I$e(n)};t.push(r)}),t},Zo=Lo.injectEndpoints({endpoints:e=>({getOnnxModels:e.query({query:t=>{const n={model_type:"onnx",base_models:t};return`models/?${yp.stringify(n,{arrayFormat:"none"})}`},providesTags:t=>{const n=[{type:"OnnxModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"OnnxModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return QR.setAll(QR.getInitialState(),n)}}),getMainModels:e.query({query:t=>{const n={model_type:"main",base_models:t};return`models/?${yp.stringify(n,{arrayFormat:"none"})}`},providesTags:t=>{const n=[{type:"MainModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"MainModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return Wg.setAll(Wg.getInitialState(),n)}}),updateMainModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/main/${n}`,method:"PATCH",body:r}),invalidatesTags:["Model"]}),importMainModels:e.mutation({query:({body:t})=>({url:"models/import",method:"POST",body:t}),invalidatesTags:["Model"]}),addMainModels:e.mutation({query:({body:t})=>({url:"models/add",method:"POST",body:t}),invalidatesTags:["Model"]}),deleteMainModels:e.mutation({query:({base_model:t,model_name:n,model_type:r})=>({url:`models/${t}/${r}/${n}`,method:"DELETE"}),invalidatesTags:["Model"]}),convertMainModels:e.mutation({query:({base_model:t,model_name:n,convert_dest_directory:r})=>({url:`models/convert/${t}/main/${n}`,method:"PUT",params:{convert_dest_directory:r}}),invalidatesTags:["Model"]}),mergeMainModels:e.mutation({query:({base_model:t,body:n})=>({url:`models/merge/${t}`,method:"PUT",body:n}),invalidatesTags:["Model"]}),syncModels:e.mutation({query:()=>({url:"models/sync",method:"POST"}),invalidatesTags:["Model"]}),getLoRAModels:e.query({query:()=>({url:"models/",params:{model_type:"lora"}}),providesTags:t=>{const n=[{type:"LoRAModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"LoRAModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return YR.setAll(YR.getInitialState(),n)}}),updateLoRAModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/lora/${n}`,method:"PATCH",body:r}),invalidatesTags:[{type:"LoRAModel",id:Ir}]}),deleteLoRAModels:e.mutation({query:({base_model:t,model_name:n})=>({url:`models/${t}/lora/${n}`,method:"DELETE"}),invalidatesTags:[{type:"LoRAModel",id:Ir}]}),getControlNetModels:e.query({query:()=>({url:"models/",params:{model_type:"controlnet"}}),providesTags:t=>{const n=[{type:"ControlNetModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"ControlNetModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return ZR.setAll(ZR.getInitialState(),n)}}),getIPAdapterModels:e.query({query:()=>({url:"models/",params:{model_type:"ip_adapter"}}),providesTags:t=>{const n=[{type:"IPAdapterModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"IPAdapterModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return JR.setAll(JR.getInitialState(),n)}}),getT2IAdapterModels:e.query({query:()=>({url:"models/",params:{model_type:"t2i_adapter"}}),providesTags:t=>{const n=[{type:"T2IAdapterModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"T2IAdapterModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return eO.setAll(eO.getInitialState(),n)}}),getVaeModels:e.query({query:()=>({url:"models/",params:{model_type:"vae"}}),providesTags:t=>{const n=[{type:"VaeModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"VaeModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return iE.setAll(iE.getInitialState(),n)}}),getTextualInversionModels:e.query({query:()=>({url:"models/",params:{model_type:"embedding"}}),providesTags:t=>{const n=[{type:"TextualInversionModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"TextualInversionModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return tO.setAll(tO.getInitialState(),n)}}),getModelsInFolder:e.query({query:t=>({url:`/models/search?${yp.stringify(t,{})}`})}),getCheckpointConfigs:e.query({query:()=>({url:"/models/ckpt_confs"})})})}),{useGetMainModelsQuery:FWe,useGetOnnxModelsQuery:DWe,useGetControlNetModelsQuery:LWe,useGetIPAdapterModelsQuery:BWe,useGetT2IAdapterModelsQuery:zWe,useGetLoRAModelsQuery:jWe,useGetTextualInversionModelsQuery:VWe,useGetVaeModelsQuery:UWe,useUpdateMainModelsMutation:GWe,useDeleteMainModelsMutation:HWe,useImportMainModelsMutation:WWe,useAddMainModelsMutation:qWe,useConvertMainModelsMutation:KWe,useMergeMainModelsMutation:XWe,useDeleteLoRAModelsMutation:QWe,useUpdateLoRAModelsMutation:YWe,useSyncModelsMutation:ZWe,useGetModelsInFolderQuery:JWe,useGetCheckpointConfigsQuery:eqe}=Zo,M$e=()=>{fe({predicate:e=>Zo.endpoints.getMainModels.matchFulfilled(e)&&!e.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`Main models loaded (${e.payload.ids.length})`);const i=t().generation.model,o=Wg.getSelectors().selectAll(e.payload);if(o.length===0){n(tl(null));return}if(i?o.some(l=>l.model_name===i.model_name&&l.base_model===i.base_model&&l.model_type===i.model_type):!1)return;const a=g_.safeParse(o[0]);if(!a.success){r.error({error:a.error.format()},"Failed to parse main model");return}n(tl(a.data))}}),fe({predicate:e=>Zo.endpoints.getMainModels.matchFulfilled(e)&&e.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`SDXL Refiner models loaded (${e.payload.ids.length})`);const i=t().sdxl.refinerModel,o=Wg.getSelectors().selectAll(e.payload);if(o.length===0){n(V8(null)),n(xbe(!1));return}if(i?o.some(l=>l.model_name===i.model_name&&l.base_model===i.base_model&&l.model_type===i.model_type):!1)return;const a=ZD.safeParse(o[0]);if(!a.success){r.error({error:a.error.format()},"Failed to parse SDXL Refiner Model");return}n(V8(a.data))}}),fe({matcher:Zo.endpoints.getVaeModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`VAEs loaded (${e.payload.ids.length})`);const i=t().generation.vae;if(i===null||Gu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(i==null?void 0:i.model_name)&&(l==null?void 0:l.base_model)===(i==null?void 0:i.base_model)))return;const s=iE.getSelectors().selectAll(e.payload)[0];if(!s){n(tl(null));return}const a=JD.safeParse(s);if(!a.success){r.error({error:a.error.format()},"Failed to parse VAE model");return}n(nL(a.data))}}),fe({matcher:Zo.endpoints.getLoRAModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`LoRAs loaded (${e.payload.ids.length})`);const i=t().lora.loras;Fo(i,(o,s)=>{Gu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(o==null?void 0:o.model_name)&&(l==null?void 0:l.base_model)===(o==null?void 0:o.base_model))||n(sB(s))})}}),fe({matcher:Zo.endpoints.getControlNetModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`),nae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getT2IAdapterModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`),sae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getIPAdapterModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`IP Adapter models loaded (${e.payload.ids.length})`),iae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getTextualInversionModels.matchFulfilled,effect:async e=>{ue("models").info({models:e.payload.entities},`Embeddings loaded (${e.payload.ids.length})`)}})},R$e=Lo.injectEndpoints({endpoints:e=>({dynamicPrompts:e.query({query:t=>({url:"utilities/dynamicprompts",body:t,method:"POST"}),keepUnusedDataFor:86400})})}),O$e=br(Kle,vue,mue,yue,F4),$$e=()=>{fe({matcher:O$e,effect:async(e,{dispatch:t,getState:n,cancelActiveListeners:r,delay:i})=>{r(),await i(1e3);const o=n();if(o.config.disabledFeatures.includes("dynamicPrompting"))return;const{positivePrompt:s}=o.generation,{maxPrompts:a}=o.dynamicPrompts;t(Yx(!0));try{const l=t(R$e.endpoints.dynamicPrompts.initiate({prompt:s,max_prompts:a})),c=await l.unwrap();l.unsubscribe(),t(bue(c.prompts)),t(_ue(c.error)),t(EI(!1)),t(Yx(!1))}catch{t(EI(!0)),t(Yx(!1))}}})};class oE extends Error{constructor(t){super(t),this.name=this.constructor.name}}class sE extends Error{constructor(t){super(t),this.name=this.constructor.name}}class GH extends Error{constructor(t){super(t),this.name=this.constructor.name}}class ui extends Error{constructor(t){super(t),this.name=this.constructor.name}}const _d=e=>!!(e&&!("$ref"in e)),nO=e=>!!(e&&!("$ref"in e)&&e.type==="array"),Ry=e=>!!(e&&!("$ref"in e)&&e.type!=="array"),nc=e=>!!(e&&"$ref"in e),N$e=e=>"class"in e&&e.class==="invocation",F$e=e=>"class"in e&&e.class==="output",aE=e=>!("$ref"in e),D$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"IntegerField",isCollection:n,isCollectionOrScalar:r},default:e.default??0};return e.multipleOf!==void 0&&(i.multipleOf=e.multipleOf),e.maximum!==void 0&&(i.maximum=e.maximum),e.exclusiveMaximum!==void 0&&p1(e.exclusiveMaximum)&&(i.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(i.minimum=e.minimum),e.exclusiveMinimum!==void 0&&p1(e.exclusiveMinimum)&&(i.exclusiveMinimum=e.exclusiveMinimum),i},L$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"FloatField",isCollection:n,isCollectionOrScalar:r},default:e.default??0};return e.multipleOf!==void 0&&(i.multipleOf=e.multipleOf),e.maximum!==void 0&&(i.maximum=e.maximum),e.exclusiveMaximum!==void 0&&p1(e.exclusiveMaximum)&&(i.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(i.minimum=e.minimum),e.exclusiveMinimum!==void 0&&p1(e.exclusiveMinimum)&&(i.exclusiveMinimum=e.exclusiveMinimum),i},B$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"StringField",isCollection:n,isCollectionOrScalar:r},default:e.default??""};return e.minLength!==void 0&&(i.minLength=e.minLength),e.maxLength!==void 0&&(i.maxLength=e.maxLength),i},z$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"BooleanField",isCollection:n,isCollectionOrScalar:r},default:e.default??!1}),j$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"MainModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),V$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SDXLMainModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),U$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SDXLRefinerModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),G$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"VAEModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),H$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"LoRAModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),W$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ControlNetModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),q$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"IPAdapterModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),K$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"T2IAdapterModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),X$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"BoardField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),Q$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ImageField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),Y$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{let i=[];if(e.anyOf){const s=e.anyOf.filter(l=>!(_d(l)&&l.type==="null")),a=s[0];s.length!==1||!_d(a)?i=[]:i=a.enum??[]}else i=e.enum??[];if(i.length===0)throw new ui(J("nodes.unableToExtractEnumOptions"));return{...t,type:{name:"EnumField",isCollection:n,isCollectionOrScalar:r},options:i,ui_choice_labels:e.ui_choice_labels,default:e.default??i[0]}},Z$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ColorField",isCollection:n,isCollectionOrScalar:r},default:e.default??{r:127,g:127,b:127,a:255}}),J$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SchedulerField",isCollection:n,isCollectionOrScalar:r},default:e.default??"euler"}),eNe={BoardField:X$e,BooleanField:z$e,ColorField:Z$e,ControlNetModelField:W$e,EnumField:Y$e,FloatField:L$e,ImageField:Q$e,IntegerField:D$e,IPAdapterModelField:q$e,LoRAModelField:H$e,MainModelField:j$e,SchedulerField:J$e,SDXLMainModelField:V$e,SDXLRefinerModelField:U$e,StringField:B$e,T2IAdapterModelField:K$e,VAEModelField:G$e},tNe=(e,t,n)=>{const{input:r,ui_hidden:i,ui_component:o,ui_type:s,ui_order:a,ui_choice_labels:l,orig_required:c}=e,u={name:t,title:e.title??(t?N4(t):""),required:c,description:e.description??"",fieldKind:"input",input:r,ui_hidden:i,ui_component:o,ui_type:s,ui_order:a,ui_choice_labels:l};if(Whe(n)){const f=eNe[n.name];return f({schemaObject:e,baseField:u,isCollection:n.isCollection,isCollectionOrScalar:n.isCollectionOrScalar})}return{...u,input:"connection",type:n,default:void 0}},nNe=(e,t,n)=>{const{title:r,description:i,ui_hidden:o,ui_type:s,ui_order:a}=e;return{fieldKind:"output",name:t,title:r??(t?N4(t):""),description:i??"",type:n,ui_hidden:o,ui_type:s,ui_order:a}},$a=e=>e.$ref.split("/").slice(-1)[0],uC={integer:"IntegerField",number:"FloatField",string:"StringField",boolean:"BooleanField"},rNe=e=>e==="CollectionField",lE=e=>{if(aE(e)){const{ui_type:t}=e;if(t)return{name:t,isCollection:rNe(t),isCollectionOrScalar:!1}}if(_d(e)){if(e.type){if(e.enum)return{name:"EnumField",isCollection:!1,isCollectionOrScalar:!1};if(e.type){if(e.type==="array"){if(_d(e.items)){const n=e.items.type;if(!n||bn(n))throw new ui(J("nodes.unsupportedArrayItemType",{type:n}));const r=uC[n];if(!r)throw new ui(J("nodes.unsupportedArrayItemType",{type:n}));return{name:r,isCollection:!0,isCollectionOrScalar:!1}}const t=$a(e.items);if(!t)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:t,isCollection:!0,isCollectionOrScalar:!1}}else if(!bn(e.type)){const t=uC[e.type];if(!t)throw new ui(J("nodes.unsupportedArrayItemType",{type:e.type}));return{name:t,isCollection:!1,isCollectionOrScalar:!1}}}}else if(e.allOf){const t=e.allOf;if(t&&t[0]&&nc(t[0])){const n=$a(t[0]);if(!n)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:n,isCollection:!1,isCollectionOrScalar:!1}}}else if(e.anyOf){const t=e.anyOf.filter(i=>!(_d(i)&&i.type==="null"));if(t.length===1){if(nc(t[0])){const i=$a(t[0]);if(!i)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:i,isCollection:!1,isCollectionOrScalar:!1}}else if(_d(t[0]))return lE(t[0])}if(t.length!==2)throw new ui(J("nodes.unsupportedAnyOfLength",{count:t.length}));let n,r;if(nO(t[0])){const i=t[0].items,o=t[1];nc(i)&&nc(o)?(n=$a(i),r=$a(o)):Ry(i)&&Ry(o)&&(n=i.type,r=o.type)}else if(nO(t[1])){const i=t[0],o=t[1].items;nc(i)&&nc(o)?(n=$a(i),r=$a(o)):Ry(i)&&Ry(o)&&(n=i.type,r=o.type)}if(n&&n===r)return{name:uC[n]??n,isCollection:!1,isCollectionOrScalar:!0};throw new ui(J("nodes.unsupportedMismatchedUnion",{firstType:n,secondType:r}))}}else if(nc(e)){const t=$a(e);if(!t)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:t,isCollection:!1,isCollectionOrScalar:!1}}throw new ui(J("nodes.unableToParseFieldType"))},iNe=["id","type","use_cache"],oNe=["type"],sNe=["IsIntermediate"],aNe=["graph","linear_ui_output"],lNe=(e,t)=>!!(iNe.includes(t)||e==="collect"&&t==="collection"||e==="iterate"&&t==="index"),cNe=e=>!!sNe.includes(e),uNe=(e,t)=>!oNe.includes(t),dNe=e=>!aNe.includes(e.properties.type.default),fNe=(e,t=void 0,n=void 0)=>{var o;return Object.values(((o=e.components)==null?void 0:o.schemas)??{}).filter(N$e).filter(dNe).filter(s=>t?t.includes(s.properties.type.default):!0).filter(s=>n?!n.includes(s.properties.type.default):!0).reduce((s,a)=>{var w,C;const l=a.properties.type.default,c=a.title.replace("Invocation",""),u=a.tags??[],d=a.description??"",f=a.version,h=a.node_pack,p=a.classification,m=og(a.properties,(x,k,A)=>{if(lNe(l,A))return ue("nodes").trace({node:l,field:A,schema:tt(k)},"Skipped reserved input field"),x;if(!aE(k))return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Unhandled input property"),x;try{const R=lE(k);if(cNe(R.name))return x;const L=tNe(k,A,R);x[A]=L}catch(R){R instanceof ui&&ue("nodes").warn({node:l,field:A,schema:tt(k)},J("nodes.inputFieldTypeParseError",{node:l,field:A,message:R.message}))}return x},{}),_=a.output.$ref.split("/").pop();if(!_)return ue("nodes").warn({outputRefObject:tt(a.output)},"No output schema name found in ref object"),s;const v=(C=(w=e.components)==null?void 0:w.schemas)==null?void 0:C[_];if(!v)return ue("nodes").warn({outputSchemaName:_},"Output schema not found"),s;if(!F$e(v))return ue("nodes").error({outputSchema:tt(v)},"Invalid output schema"),s;const y=v.properties.type.default,g=og(v.properties,(x,k,A)=>{if(!uNe(l,A))return ue("nodes").trace({node:l,field:A,schema:tt(k)},"Skipped reserved output field"),x;if(!aE(k))return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Unhandled output property"),x;try{const R=lE(k);if(!R)return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Missing output field type"),x;const L=nNe(k,A,R);x[A]=L}catch(R){R instanceof ui&&ue("nodes").warn({node:l,field:A,schema:tt(k)},J("nodes.outputFieldTypeParseError",{node:l,field:A,message:R.message}))}return x},{}),b=a.properties.use_cache.default,S={title:c,type:l,version:f,tags:u,description:d,outputType:y,inputs:m,outputs:g,useCache:b,nodePack:h,classification:p};return Object.assign(s,{[l]:S}),s},{})},hNe=()=>{fe({actionCreator:kg.fulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=ue("system"),i=e.payload;r.debug({schemaJSON:i},"Received OpenAPI schema");const{nodesAllowlist:o,nodesDenylist:s}=n().config,a=fNe(i,o,s);r.debug({nodeTemplates:tt(a)},`Built ${c_(a)} node templates`),t($j(a))}}),fe({actionCreator:kg.rejected,effect:e=>{ue("system").error({error:tt(e.error)},"Problem retrieving OpenAPI Schema")}})},pNe=()=>{fe({actionCreator:ZF,effect:(e,{dispatch:t,getState:n})=>{ue("socketio").debug("Connected");const{nodes:i,config:o,system:s}=n(),{disabledTabs:a}=o;!c_(i.nodeTemplates)&&!a.includes("nodes")&&t(kg()),s.isInitialized?t(Lo.util.resetApiState()):t(ese(!0)),t(F4(e.payload))}})},gNe=()=>{fe({actionCreator:JF,effect:(e,{dispatch:t})=>{ue("socketio").debug("Disconnected"),t(eD(e.payload))}})},mNe=()=>{fe({actionCreator:oD,effect:(e,{dispatch:t})=>{ue("socketio").trace(e.payload,"Generator progress"),t(z4(e.payload))}})},yNe=()=>{fe({actionCreator:rD,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Session complete"),t(iD(e.payload))}})},vNe=["load_image","image"],bNe=()=>{fe({actionCreator:L4,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("socketio"),{data:i}=e.payload;r.debug({data:tt(i)},`Invocation complete (${e.payload.data.node.type})`);const{result:o,node:s,queue_batch_id:a,source_node_id:l}=i;if(QD(o)&&!vNe.includes(s.type)&&!E7e.includes(l)){const{image_name:c}=o.image,{canvas:u,gallery:d}=n(),f=t(ce.endpoints.getImageDTO.initiate(c,{forceRefetch:!0})),h=await f.unwrap();if(f.unsubscribe(),u.batchIds.includes(a)&&[zc].includes(i.source_node_id)&&t(nue(h)),!h.is_intermediate){t(ce.util.updateQueryData("listImages",{board_id:h.board_id??"none",categories:Rn},m=>{Ot.addOne(m,h)})),t(Qe.util.updateQueryData("getBoardImagesTotal",h.board_id??"none",m=>{m.total+=1})),t(ce.util.invalidateTags([{type:"Board",id:h.board_id??"none"}]));const{shouldAutoSwitch:p}=d;p&&(d.galleryView!=="images"&&t(Q5("images")),h.board_id&&h.board_id!==d.selectedBoardId&&t(vp({boardId:h.board_id,selectedImageName:h.image_name})),!h.board_id&&d.selectedBoardId!=="none"&&t(vp({boardId:"none",selectedImageName:h.image_name})),t(ps(h)))}}t(B4(e.payload))}})},_Ne=()=>{fe({actionCreator:nD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Invocation error (${e.payload.data.node.type})`),t(u_(e.payload))}})},SNe=()=>{fe({actionCreator:fD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Invocation retrieval error (${e.payload.data.graph_execution_state_id})`),t(hD(e.payload))}})},xNe=()=>{fe({actionCreator:tD,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,`Invocation started (${e.payload.data.node.type})`),t(D4(e.payload))}})},wNe=()=>{fe({actionCreator:sD,effect:(e,{dispatch:t})=>{const n=ue("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load started: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(aD(e.payload))}}),fe({actionCreator:lD,effect:(e,{dispatch:t})=>{const n=ue("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load complete: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(cD(e.payload))}})},CNe=()=>{fe({actionCreator:pD,effect:async(e,{dispatch:t})=>{const n=ue("socketio"),{queue_item:r,batch_status:i,queue_status:o}=e.payload.data;n.debug(e.payload,`Queue item ${r.item_id} status updated: ${r.status}`),t(en.util.updateQueryData("listQueueItems",void 0,s=>{pc.updateOne(s,{id:String(r.item_id),changes:r})})),t(en.util.updateQueryData("getQueueStatus",void 0,s=>{s&&Object.assign(s.queue,o)})),t(en.util.updateQueryData("getBatchStatus",{batch_id:i.batch_id},()=>i)),t(en.util.updateQueryData("getQueueItem",r.item_id,s=>{s&&Object.assign(s,r)})),t(en.util.invalidateTags(["CurrentSessionQueueItem","NextSessionQueueItem","InvocationCacheStatus"])),t(d_(e.payload))}})},ENe=()=>{fe({actionCreator:uD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Session retrieval error (${e.payload.data.graph_execution_state_id})`),t(dD(e.payload))}})},TNe=()=>{fe({actionCreator:qoe,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Subscribed"),t(Koe(e.payload))}})},ANe=()=>{fe({actionCreator:Xoe,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Unsubscribed"),t(Qoe(e.payload))}})},kNe=()=>{fe({actionCreator:Z8e,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTO:r}=e.payload;try{const i=await t(ce.endpoints.changeImageIsIntermediate.initiate({imageDTO:r,is_intermediate:!1})).unwrap(),{autoAddBoardId:o}=n().gallery;o&&o!=="none"&&await t(ce.endpoints.addImageToBoard.initiate({imageDTO:i,board_id:o})),t(Ve({title:J("toast.imageSaved"),status:"success"}))}catch(i){t(Ve({title:J("toast.imageSavingFailed"),description:i==null?void 0:i.message,status:"error"}))}}})},tqe=["sd-1","sd-2","sdxl","sdxl-refiner"],PNe=["sd-1","sd-2","sdxl"],nqe=["sdxl"],rqe=["sd-1","sd-2"],iqe=["sdxl-refiner"],INe=()=>{fe({actionCreator:Gj,effect:async(e,{getState:t,dispatch:n})=>{var i;if(e.payload==="unifiedCanvas"){const o=(i=t().generation.model)==null?void 0:i.base_model;if(o&&["sd-1","sd-2","sdxl"].includes(o))return;try{const s=n(Zo.endpoints.getMainModels.initiate(PNe)),a=await s.unwrap();if(s.unsubscribe(),!a.ids.length){n(tl(null));return}const c=Wg.getSelectors().selectAll(a).filter(h=>["sd-1","sd-2","sxdl"].includes(h.base_model))[0];if(!c){n(tl(null));return}const{base_model:u,model_name:d,model_type:f}=c;n(tl({base_model:u,model_name:d,model_type:f}))}catch{n(tl(null))}}}})},MNe=({image_name:e,esrganModelName:t,autoAddBoardId:n})=>{const r={id:tp,type:"esrgan",image:{image_name:e},model_name:t,is_intermediate:!0},i={id:zc,type:"linear_ui_output",use_cache:!1,is_intermediate:!1,board:n==="none"?void 0:{board_id:n}},o={id:"adhoc-esrgan-graph",nodes:{[tp]:r,[zc]:i},edges:[{source:{node_id:tp,field:"image"},destination:{node_id:zc,field:"image"}}]};return xa(o,{},tp),Bo(o,{esrgan_model:t}),o};function RNe(){if(console&&console.warn){for(var e=arguments.length,t=new Array(e),n=0;n()=>{if(e.isInitialized)t();else{const n=()=>{setTimeout(()=>{e.off("initialized",n)},0),t()};e.on("initialized",n)}};function iO(e,t,n){e.loadNamespaces(t,HH(e,n))}function oO(e,t,n,r){typeof n=="string"&&(n=[n]),n.forEach(i=>{e.options.ns.indexOf(i)<0&&e.options.ns.push(i)}),e.loadLanguages(t,HH(e,r))}function ONe(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const r=t.languages[0],i=t.options?t.options.fallbackLng:!1,o=t.languages[t.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const c=t.services.backendConnector.state[`${a}|${l}`];return c===-1||c===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(r,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||s(r,e)&&(!i||s(o,e)))}function $Ne(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!t.languages||!t.languages.length?(cE("i18n.languages were undefined or empty",t.languages),!0):t.options.ignoreJSONStructure!==void 0?t.hasLoadedNamespace(e,{lng:n.lng,precheck:(i,o)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&i.services.backendConnector.backend&&i.isLanguageChangingTo&&!o(i.isLanguageChangingTo,e))return!1}}):ONe(e,t,n)}const NNe=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,FNe={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},DNe=e=>FNe[e],LNe=e=>e.replace(NNe,DNe);let uE={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:LNe};function BNe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};uE={...uE,...e}}function zNe(){return uE}let WH;function jNe(e){WH=e}function VNe(){return WH}const UNe={type:"3rdParty",init(e){BNe(e.options.react),jNe(e)}},GNe=I.createContext();class HNe{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const WNe=(e,t)=>{const n=I.useRef();return I.useEffect(()=>{n.current=t?n.current:e},[e,t]),n.current};function qH(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:n}=t,{i18n:r,defaultNS:i}=I.useContext(GNe)||{},o=n||r||VNe();if(o&&!o.reportNamespaces&&(o.reportNamespaces=new HNe),!o){cE("You will need to pass in an i18next instance by using initReactI18next");const g=(S,w)=>typeof w=="string"?w:w&&typeof w=="object"&&typeof w.defaultValue=="string"?w.defaultValue:Array.isArray(S)?S[S.length-1]:S,b=[g,{},!1];return b.t=g,b.i18n={},b.ready=!1,b}o.options.react&&o.options.react.wait!==void 0&&cE("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const s={...zNe(),...o.options.react,...t},{useSuspense:a,keyPrefix:l}=s;let c=e||i||o.options&&o.options.defaultNS;c=typeof c=="string"?[c]:c||["translation"],o.reportNamespaces.addUsedNamespaces&&o.reportNamespaces.addUsedNamespaces(c);const u=(o.isInitialized||o.initializedStoreOnce)&&c.every(g=>$Ne(g,o,s));function d(){return o.getFixedT(t.lng||null,s.nsMode==="fallback"?c:c[0],l)}const[f,h]=I.useState(d);let p=c.join();t.lng&&(p=`${t.lng}${p}`);const m=WNe(p),_=I.useRef(!0);I.useEffect(()=>{const{bindI18n:g,bindI18nStore:b}=s;_.current=!0,!u&&!a&&(t.lng?oO(o,t.lng,c,()=>{_.current&&h(d)}):iO(o,c,()=>{_.current&&h(d)})),u&&m&&m!==p&&_.current&&h(d);function S(){_.current&&h(d)}return g&&o&&o.on(g,S),b&&o&&o.store.on(b,S),()=>{_.current=!1,g&&o&&g.split(" ").forEach(w=>o.off(w,S)),b&&o&&b.split(" ").forEach(w=>o.store.off(w,S))}},[o,p]);const v=I.useRef(!0);I.useEffect(()=>{_.current&&!v.current&&h(d),v.current=!1},[o,l]);const y=[f,o,u];if(y.t=f,y.i18n=o,y.ready=u,u||!u&&!a)return y;throw new Promise(g=>{t.lng?oO(o,t.lng,c,()=>g()):iO(o,c,()=>g())})}const qNe=(e,t)=>{if(!e||!t)return;const{width:n,height:r}=e,i=r*4*n*4,o=r*2*n*2;return{x4:i,x2:o}},KNe=(e,t)=>{if(!e||!t)return{x4:!0,x2:!0};const n={x4:!1,x2:!1};return e.x4<=t&&(n.x4=!0),e.x2<=t&&(n.x2=!0),n},XNe=(e,t)=>{if(!(!e||!t)&&!(e.x4&&e.x2)){if(!e.x2&&!e.x4)return"parameters.isAllowedToUpscale.tooLarge";if(!e.x4&&e.x2&&t===4)return"parameters.isAllowedToUpscale.useX2Model"}},KH=e=>hu(tW,({postprocessing:t,config:n})=>{const{esrganModelName:r}=t,{maxUpscalePixels:i}=n,o=qNe(e,i),s=KNe(o,i),a=r.includes("x2")?2:4,l=XNe(s,a);return{isAllowedToUpscale:a===2?s.x2:s.x4,detailTKey:l}}),oqe=e=>{const{t}=qH(),n=I.useMemo(()=>KH(e),[e]),{isAllowedToUpscale:r,detailTKey:i}=nN(n);return{isAllowedToUpscale:r,detail:i?t(i):void 0}},QNe=he("upscale/upscaleRequested"),YNe=()=>{fe({actionCreator:QNe,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("session"),{imageDTO:i}=e.payload,{image_name:o}=i,s=n(),{isAllowedToUpscale:a,detailTKey:l}=KH(i)(s);if(!a){r.error({imageDTO:i},J(l??"parameters.isAllowedToUpscale.tooLarge")),t(Ve({title:J(l??"parameters.isAllowedToUpscale.tooLarge"),status:"error"}));return}const{esrganModelName:c}=s.postprocessing,{autoAddBoardId:u}=s.gallery,d={prepend:!0,batch:{graph:MNe({image_name:o,esrganModelName:c,autoAddBoardId:u}),runs:1}};try{const f=t(en.endpoints.enqueueBatch.initiate(d,{fixedCacheKey:"enqueueBatch"})),h=await f.unwrap();f.reset(),r.debug({enqueueResult:tt(h)},J("queue.graphQueued"))}catch(f){if(r.error({enqueueBatchArg:tt(d)},J("queue.graphFailedToQueue")),f instanceof Object&&"status"in f&&f.status===403)return;t(Ve({title:J("queue.graphFailedToQueue"),status:"error"}))}}})},ZNe=to(null),JNe=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,ub=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");const t=e.match(JNe);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},sO=e=>e==="*"||e==="x"||e==="X",aO=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},eFe=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],tFe=(e,t)=>{if(sO(e)||sO(t))return 0;const[n,r]=eFe(aO(e),aO(t));return n>r?1:n{for(let n=0;n{const n=ub(e),r=ub(t),i=n.pop(),o=r.pop(),s=Sd(n,r);return s!==0?s:i&&o?Sd(i.split("."),o.split(".")):i||o?i?-1:1:0},rFe=(e,t,n)=>{iFe(n);const r=nFe(e,t);return XH[n].includes(r)},XH={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},lO=Object.keys(XH),iFe=e=>{if(typeof e!="string")throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`);if(lO.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${lO.join("|")}`)},wv=(e,t)=>{if(t=t.replace(/([><=]+)\s+/g,"$1"),t.includes("||"))return t.split("||").some(_=>wv(e,_));if(t.includes(" - ")){const[_,v]=t.split(" - ",2);return wv(e,`>=${_} <=${v}`)}else if(t.includes(" "))return t.trim().replace(/\s{2,}/g," ").split(" ").every(_=>wv(e,_));const n=t.match(/^([<>=~^]+)/),r=n?n[1]:"=";if(r!=="^"&&r!=="~")return rFe(e,t,r);const[i,o,s,,a]=ub(e),[l,c,u,,d]=ub(t),f=[i,o,s],h=[l,c??"x",u??"x"];if(d&&(!a||Sd(f,h)!==0||Sd(a.split("."),d.split("."))===-1))return!1;const p=h.findIndex(_=>_!=="0")+1,m=r==="~"?2:p>1?p:1;return!(Sd(f.slice(0,m),h.slice(0,m))!==0||Sd(f.slice(m),h.slice(m))===-1)},oFe={EnumField:"",BoardField:void 0,BooleanField:!1,ColorField:{r:0,g:0,b:0,a:1},FloatField:0,ImageField:void 0,IntegerField:0,IPAdapterModelField:void 0,LoRAModelField:void 0,MainModelField:void 0,SchedulerField:"euler",SDXLMainModelField:void 0,SDXLRefinerModelField:void 0,StringField:"",T2IAdapterModelField:void 0,VAEModelField:void 0,ControlNetModelField:void 0},sFe=(e,t)=>({id:e,name:t.name,type:t.type,label:"",fieldKind:"input",value:t.default??HN(oFe,t.type.name)}),aFe=(e,t)=>{const n=ul(),{type:r}=t,i=og(t.inputs,(a,l,c)=>{const u=ul(),d=sFe(u,l);return a[c]=d,a},{}),o=og(t.outputs,(a,l,c)=>{const d={id:ul(),name:c,type:l.type,fieldKind:"output"};return a[c]=d,a},{});return{...cB,id:n,type:"invocation",position:e,data:{id:n,type:r,version:t.version,label:"",notes:"",isOpen:!0,isIntermediate:r!=="save_image",useCache:t.useCache,inputs:i,outputs:o}}},tk=(e,t)=>e.data.type!==t.type?!0:e.data.version!==t.version,lFe=(e,t)=>{if(!tk(e,t)||e.data.type!==t.type)return!1;const r=epe.parse(t.version).major;return wv(e.data.version,`^${r}`)},cFe=(e,t)=>{if(!lFe(e,t)||e.data.type!==t.type)throw new GH(`Unable to update node ${e.id}`);const r=aFe(e.position,t),i=Ge(e);return i.data.version=t.version,zF(i,r),i.data.inputs=B6(i.data.inputs,Qc(r.data.inputs)),i.data.outputs=B6(i.data.outputs,Qc(r.data.outputs)),i},uFe={BoardField:{name:"BoardField",isCollection:!1,isCollectionOrScalar:!1},boolean:{name:"BooleanField",isCollection:!1,isCollectionOrScalar:!1},BooleanCollection:{name:"BooleanField",isCollection:!0,isCollectionOrScalar:!1},BooleanPolymorphic:{name:"BooleanField",isCollection:!1,isCollectionOrScalar:!0},ColorField:{name:"ColorField",isCollection:!1,isCollectionOrScalar:!1},ColorCollection:{name:"ColorField",isCollection:!0,isCollectionOrScalar:!1},ColorPolymorphic:{name:"ColorField",isCollection:!1,isCollectionOrScalar:!0},ControlNetModelField:{name:"ControlNetModelField",isCollection:!1,isCollectionOrScalar:!1},enum:{name:"EnumField",isCollection:!1,isCollectionOrScalar:!1},float:{name:"FloatField",isCollection:!1,isCollectionOrScalar:!1},FloatCollection:{name:"FloatField",isCollection:!0,isCollectionOrScalar:!1},FloatPolymorphic:{name:"FloatField",isCollection:!1,isCollectionOrScalar:!0},ImageCollection:{name:"ImageField",isCollection:!0,isCollectionOrScalar:!1},ImageField:{name:"ImageField",isCollection:!1,isCollectionOrScalar:!1},ImagePolymorphic:{name:"ImageField",isCollection:!1,isCollectionOrScalar:!0},integer:{name:"IntegerField",isCollection:!1,isCollectionOrScalar:!1},IntegerCollection:{name:"IntegerField",isCollection:!0,isCollectionOrScalar:!1},IntegerPolymorphic:{name:"IntegerField",isCollection:!1,isCollectionOrScalar:!0},IPAdapterModelField:{name:"IPAdapterModelField",isCollection:!1,isCollectionOrScalar:!1},LoRAModelField:{name:"LoRAModelField",isCollection:!1,isCollectionOrScalar:!1},MainModelField:{name:"MainModelField",isCollection:!1,isCollectionOrScalar:!1},Scheduler:{name:"SchedulerField",isCollection:!1,isCollectionOrScalar:!1},SDXLMainModelField:{name:"SDXLMainModelField",isCollection:!1,isCollectionOrScalar:!1},SDXLRefinerModelField:{name:"SDXLRefinerModelField",isCollection:!1,isCollectionOrScalar:!1},string:{name:"StringField",isCollection:!1,isCollectionOrScalar:!1},StringCollection:{name:"StringField",isCollection:!0,isCollectionOrScalar:!1},StringPolymorphic:{name:"StringField",isCollection:!1,isCollectionOrScalar:!0},T2IAdapterModelField:{name:"T2IAdapterModelField",isCollection:!1,isCollectionOrScalar:!1},VaeModelField:{name:"VAEModelField",isCollection:!1,isCollectionOrScalar:!1}},dFe={Any:{name:"AnyField",isCollection:!1,isCollectionOrScalar:!1},ClipField:{name:"ClipField",isCollection:!1,isCollectionOrScalar:!1},Collection:{name:"CollectionField",isCollection:!0,isCollectionOrScalar:!1},CollectionItem:{name:"CollectionItemField",isCollection:!1,isCollectionOrScalar:!1},ConditioningCollection:{name:"ConditioningField",isCollection:!0,isCollectionOrScalar:!1},ConditioningField:{name:"ConditioningField",isCollection:!1,isCollectionOrScalar:!1},ConditioningPolymorphic:{name:"ConditioningField",isCollection:!1,isCollectionOrScalar:!0},ControlCollection:{name:"ControlField",isCollection:!0,isCollectionOrScalar:!1},ControlField:{name:"ControlField",isCollection:!1,isCollectionOrScalar:!1},ControlPolymorphic:{name:"ControlField",isCollection:!1,isCollectionOrScalar:!0},DenoiseMaskField:{name:"DenoiseMaskField",isCollection:!1,isCollectionOrScalar:!1},IPAdapterField:{name:"IPAdapterField",isCollection:!1,isCollectionOrScalar:!1},IPAdapterCollection:{name:"IPAdapterField",isCollection:!0,isCollectionOrScalar:!1},IPAdapterPolymorphic:{name:"IPAdapterField",isCollection:!1,isCollectionOrScalar:!0},LatentsField:{name:"LatentsField",isCollection:!1,isCollectionOrScalar:!1},LatentsCollection:{name:"LatentsField",isCollection:!0,isCollectionOrScalar:!1},LatentsPolymorphic:{name:"LatentsField",isCollection:!1,isCollectionOrScalar:!0},MetadataField:{name:"MetadataField",isCollection:!1,isCollectionOrScalar:!1},MetadataCollection:{name:"MetadataField",isCollection:!0,isCollectionOrScalar:!1},MetadataItemField:{name:"MetadataItemField",isCollection:!1,isCollectionOrScalar:!1},MetadataItemCollection:{name:"MetadataItemField",isCollection:!0,isCollectionOrScalar:!1},MetadataItemPolymorphic:{name:"MetadataItemField",isCollection:!1,isCollectionOrScalar:!0},ONNXModelField:{name:"ONNXModelField",isCollection:!1,isCollectionOrScalar:!1},T2IAdapterField:{name:"T2IAdapterField",isCollection:!1,isCollectionOrScalar:!1},T2IAdapterCollection:{name:"T2IAdapterField",isCollection:!0,isCollectionOrScalar:!1},T2IAdapterPolymorphic:{name:"T2IAdapterField",isCollection:!1,isCollectionOrScalar:!0},UNetField:{name:"UNetField",isCollection:!1,isCollectionOrScalar:!1},VaeField:{name:"VaeField",isCollection:!1,isCollectionOrScalar:!1}},cO={...uFe,...dFe},fFe=T.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a","lcm"]),nk=T.enum(["any","sd-1","sd-2","sdxl","sdxl-refiner"]),hFe=T.object({model_name:T.string().min(1),base_model:nk,model_type:T.literal("main")}),pFe=T.object({model_name:T.string().min(1),base_model:nk,model_type:T.literal("onnx")}),rk=T.union([hFe,pFe]),gFe=T.enum(["Any","BoardField","boolean","BooleanCollection","BooleanPolymorphic","ClipField","Collection","CollectionItem","ColorCollection","ColorField","ColorPolymorphic","ConditioningCollection","ConditioningField","ConditioningPolymorphic","ControlCollection","ControlField","ControlNetModelField","ControlPolymorphic","DenoiseMaskField","enum","float","FloatCollection","FloatPolymorphic","ImageCollection","ImageField","ImagePolymorphic","integer","IntegerCollection","IntegerPolymorphic","IPAdapterCollection","IPAdapterField","IPAdapterModelField","IPAdapterPolymorphic","LatentsCollection","LatentsField","LatentsPolymorphic","LoRAModelField","MainModelField","MetadataField","MetadataCollection","MetadataItemField","MetadataItemCollection","MetadataItemPolymorphic","ONNXModelField","Scheduler","SDXLMainModelField","SDXLRefinerModelField","string","StringCollection","StringPolymorphic","T2IAdapterCollection","T2IAdapterField","T2IAdapterModelField","T2IAdapterPolymorphic","UNetField","VaeField","VaeModelField"]),QH=T.object({id:T.string().trim().min(1),name:T.string().trim().min(1),type:gFe}),mFe=QH.extend({fieldKind:T.literal("output")}),Ee=QH.extend({fieldKind:T.literal("input"),label:T.string()}),wa=T.object({model_name:T.string().trim().min(1),base_model:nk}),Kf=T.object({image_name:T.string().trim().min(1)}),yFe=T.object({board_id:T.string().trim().min(1)}),db=T.object({latents_name:T.string().trim().min(1),seed:T.number().int().optional()}),fb=T.object({conditioning_name:T.string().trim().min(1)}),vFe=T.object({mask_name:T.string().trim().min(1),masked_latents_name:T.string().trim().min(1).optional()}),bFe=Ee.extend({type:T.literal("integer"),value:T.number().int().optional()}),_Fe=Ee.extend({type:T.literal("IntegerCollection"),value:T.array(T.number().int()).optional()}),SFe=Ee.extend({type:T.literal("IntegerPolymorphic"),value:T.number().int().optional()}),xFe=Ee.extend({type:T.literal("float"),value:T.number().optional()}),wFe=Ee.extend({type:T.literal("FloatCollection"),value:T.array(T.number()).optional()}),CFe=Ee.extend({type:T.literal("FloatPolymorphic"),value:T.number().optional()}),EFe=Ee.extend({type:T.literal("string"),value:T.string().optional()}),TFe=Ee.extend({type:T.literal("StringCollection"),value:T.array(T.string()).optional()}),AFe=Ee.extend({type:T.literal("StringPolymorphic"),value:T.string().optional()}),kFe=Ee.extend({type:T.literal("boolean"),value:T.boolean().optional()}),PFe=Ee.extend({type:T.literal("BooleanCollection"),value:T.array(T.boolean()).optional()}),IFe=Ee.extend({type:T.literal("BooleanPolymorphic"),value:T.boolean().optional()}),MFe=Ee.extend({type:T.literal("enum"),value:T.string().optional()}),RFe=Ee.extend({type:T.literal("LatentsField"),value:db.optional()}),OFe=Ee.extend({type:T.literal("LatentsCollection"),value:T.array(db).optional()}),$Fe=Ee.extend({type:T.literal("LatentsPolymorphic"),value:T.union([db,T.array(db)]).optional()}),NFe=Ee.extend({type:T.literal("DenoiseMaskField"),value:vFe.optional()}),FFe=Ee.extend({type:T.literal("ConditioningField"),value:fb.optional()}),DFe=Ee.extend({type:T.literal("ConditioningCollection"),value:T.array(fb).optional()}),LFe=Ee.extend({type:T.literal("ConditioningPolymorphic"),value:T.union([fb,T.array(fb)]).optional()}),BFe=wa,hb=T.object({image:Kf,control_model:BFe,control_weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),control_mode:T.enum(["balanced","more_prompt","more_control","unbalanced"]).optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),zFe=Ee.extend({type:T.literal("ControlField"),value:hb.optional()}),jFe=Ee.extend({type:T.literal("ControlPolymorphic"),value:T.union([hb,T.array(hb)]).optional()}),VFe=Ee.extend({type:T.literal("ControlCollection"),value:T.array(hb).optional()}),UFe=wa,pb=T.object({image:Kf,ip_adapter_model:UFe,weight:T.number(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional()}),GFe=Ee.extend({type:T.literal("IPAdapterField"),value:pb.optional()}),HFe=Ee.extend({type:T.literal("IPAdapterPolymorphic"),value:T.union([pb,T.array(pb)]).optional()}),WFe=Ee.extend({type:T.literal("IPAdapterCollection"),value:T.array(pb).optional()}),qFe=wa,gb=T.object({image:Kf,t2i_adapter_model:qFe,weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),KFe=Ee.extend({type:T.literal("T2IAdapterField"),value:gb.optional()}),XFe=Ee.extend({type:T.literal("T2IAdapterPolymorphic"),value:T.union([gb,T.array(gb)]).optional()}),QFe=Ee.extend({type:T.literal("T2IAdapterCollection"),value:T.array(gb).optional()}),YFe=T.enum(["onnx","main","vae","lora","controlnet","embedding"]),ZFe=T.enum(["unet","text_encoder","text_encoder_2","tokenizer","tokenizer_2","vae","vae_decoder","vae_encoder","scheduler","safety_checker"]),Ef=wa.extend({model_type:YFe,submodel:ZFe.optional()}),YH=Ef.extend({weight:T.number().optional()}),JFe=T.object({unet:Ef,scheduler:Ef,loras:T.array(YH)}),eDe=Ee.extend({type:T.literal("UNetField"),value:JFe.optional()}),tDe=T.object({tokenizer:Ef,text_encoder:Ef,skipped_layers:T.number(),loras:T.array(YH)}),nDe=Ee.extend({type:T.literal("ClipField"),value:tDe.optional()}),rDe=T.object({vae:Ef}),iDe=Ee.extend({type:T.literal("VaeField"),value:rDe.optional()}),oDe=Ee.extend({type:T.literal("ImageField"),value:Kf.optional()}),sDe=Ee.extend({type:T.literal("BoardField"),value:yFe.optional()}),aDe=Ee.extend({type:T.literal("ImagePolymorphic"),value:Kf.optional()}),lDe=Ee.extend({type:T.literal("ImageCollection"),value:T.array(Kf).optional()}),cDe=Ee.extend({type:T.literal("MainModelField"),value:rk.optional()}),uDe=Ee.extend({type:T.literal("SDXLMainModelField"),value:rk.optional()}),dDe=Ee.extend({type:T.literal("SDXLRefinerModelField"),value:rk.optional()}),fDe=wa,hDe=Ee.extend({type:T.literal("VaeModelField"),value:fDe.optional()}),pDe=wa,gDe=Ee.extend({type:T.literal("LoRAModelField"),value:pDe.optional()}),mDe=wa,yDe=Ee.extend({type:T.literal("ControlNetModelField"),value:mDe.optional()}),vDe=wa,bDe=Ee.extend({type:T.literal("IPAdapterModelField"),value:vDe.optional()}),_De=wa,SDe=Ee.extend({type:T.literal("T2IAdapterModelField"),value:_De.optional()}),xDe=Ee.extend({type:T.literal("Collection"),value:T.array(T.any()).optional()}),wDe=Ee.extend({type:T.literal("CollectionItem"),value:T.any().optional()}),mb=T.object({label:T.string(),value:T.any()}),CDe=Ee.extend({type:T.literal("MetadataItemField"),value:mb.optional()}),EDe=Ee.extend({type:T.literal("MetadataItemCollection"),value:T.array(mb).optional()}),TDe=Ee.extend({type:T.literal("MetadataItemPolymorphic"),value:T.union([mb,T.array(mb)]).optional()}),ZH=T.record(T.any()),ADe=Ee.extend({type:T.literal("MetadataField"),value:ZH.optional()}),kDe=Ee.extend({type:T.literal("MetadataCollection"),value:T.array(ZH).optional()}),yb=T.object({r:T.number().int().min(0).max(255),g:T.number().int().min(0).max(255),b:T.number().int().min(0).max(255),a:T.number().int().min(0).max(255)}),PDe=Ee.extend({type:T.literal("ColorField"),value:yb.optional()}),IDe=Ee.extend({type:T.literal("ColorCollection"),value:T.array(yb).optional()}),MDe=Ee.extend({type:T.literal("ColorPolymorphic"),value:T.union([yb,T.array(yb)]).optional()}),RDe=Ee.extend({type:T.literal("Scheduler"),value:fFe.optional()}),ODe=Ee.extend({type:T.literal("Any"),value:T.any().optional()}),$De=T.discriminatedUnion("type",[ODe,sDe,PFe,kFe,IFe,nDe,xDe,wDe,PDe,IDe,MDe,FFe,DFe,LFe,zFe,yDe,VFe,jFe,NFe,MFe,wFe,xFe,CFe,lDe,aDe,oDe,_Fe,SFe,bFe,GFe,bDe,WFe,HFe,RFe,OFe,$Fe,gDe,cDe,RDe,uDe,dDe,TFe,AFe,EFe,KFe,SDe,QFe,XFe,eDe,iDe,hDe,CDe,EDe,TDe,ADe,kDe]),NDe=T.string().refine(e=>{const[t,n,r]=e.split(".");return t!==void 0&&Number.isInteger(Number(t))&&n!==void 0&&Number.isInteger(Number(n))&&r!==void 0&&Number.isInteger(Number(r))}),FDe=T.object({id:T.string().trim().min(1),type:T.string().trim().min(1),inputs:T.record($De),outputs:T.record(mFe),label:T.string(),isOpen:T.boolean(),notes:T.string(),embedWorkflow:T.boolean(),isIntermediate:T.boolean(),useCache:T.boolean().default(!0),version:NDe.optional()}),DDe=T.object({id:T.string().trim().min(1),type:T.literal("notes"),label:T.string(),isOpen:T.boolean(),notes:T.string()}),JH=T.object({x:T.number(),y:T.number()}).default({x:0,y:0}),vb=T.number().gt(0).nullish(),LDe=T.object({id:T.string().trim().min(1),type:T.literal("invocation"),data:FDe,width:vb,height:vb,position:JH}),BDe=T.object({id:T.string().trim().min(1),type:T.literal("notes"),data:DDe,width:vb,height:vb,position:JH}),zDe=T.discriminatedUnion("type",[LDe,BDe]),jDe=T.object({source:T.string().trim().min(1),sourceHandle:T.string().trim().min(1),target:T.string().trim().min(1),targetHandle:T.string().trim().min(1),id:T.string().trim().min(1),type:T.literal("default")}),VDe=T.object({source:T.string().trim().min(1),target:T.string().trim().min(1),id:T.string().trim().min(1),type:T.literal("collapsed")}),UDe=T.union([jDe,VDe]),GDe=T.object({nodeId:T.string().trim().min(1),fieldName:T.string().trim().min(1)}),HDe=T.object({name:T.string().default(""),author:T.string().default(""),description:T.string().default(""),version:T.string().default(""),contact:T.string().default(""),tags:T.string().default(""),notes:T.string().default(""),nodes:T.array(zDe).default([]),edges:T.array(UDe).default([]),exposedFields:T.array(GDe).default([]),meta:T.object({version:T.literal("1.0.0")})}),WDe=T.object({meta:T.object({version:tS})}),qDe=e=>{var n;const t=(n=MD.get())==null?void 0:n.getState().nodes.nodeTemplates;if(!t)throw new Error(J("app.storeNotInitialized"));return e.nodes.forEach(r=>{var i;if(r.type==="invocation"){Fo(r.data.inputs,a=>{const l=cO[a.type];if(!l)throw new sE(J("nodes.unknownFieldType",{type:a.type}));a.type=l}),Fo(r.data.outputs,a=>{const l=cO[a.type];if(!l)throw new sE(J("nodes.unknownFieldType",{type:a.type}));a.type=l});const o=t[r.data.type],s=o?o.nodePack:J("common.unknown");r.data.nodePack=s,(i=r.data).version||(i.version="1.0.0")}}),e.meta.version="2.0.0",e.meta.category="user",BH.parse(e)},KDe=e=>{const t=WDe.safeParse(e);if(!t.success)throw new oE(J("nodes.unableToGetWorkflowVersion"));const{version:n}=t.data.meta;if(n==="1.0.0"){const r=HDe.parse(e);return qDe(r)}if(n==="2.0.0")return BH.parse(e);throw new oE(J("nodes.unrecognizedWorkflowVersion",{version:n}))},XDe=(e,t)=>{const n=KDe(e);n.meta.category==="default"&&(n.meta.category="user",n.id=void 0);const{nodes:r,edges:i}=n,o=[],s=r.filter(Q7e),a=VF(s,"id");return s.forEach(l=>{const c=t[l.data.type];if(!c){const u=J("nodes.missingTemplate",{node:l.id,type:l.data.type});o.push({message:u,data:tt(l)});return}if(tk(l,c)){const u=J("nodes.mismatchedVersion",{node:l.id,type:l.data.type});o.push({message:u,data:tt({node:l,nodeTemplate:c})});return}}),i.forEach((l,c)=>{const u=a[l.source],d=a[l.target],f=u?t[u.data.type]:void 0,h=d?t[d.data.type]:void 0,p=[];if(u||p.push(J("nodes.sourceNodeDoesNotExist",{node:l.source})),f||p.push(J("nodes.missingTemplate",{node:l.source,type:u==null?void 0:u.data.type})),u&&f&&l.type==="default"&&!(l.sourceHandle in f.outputs)&&p.push(J("nodes.sourceNodeFieldDoesNotExist",{node:l.source,field:l.sourceHandle})),d||p.push(J("nodes.targetNodeDoesNotExist",{node:l.target})),h||p.push(J("nodes.missingTemplate",{node:l.target,type:d==null?void 0:d.data.type})),d&&h&&l.type==="default"&&!(l.targetHandle in h.inputs)&&p.push(J("nodes.targetNodeFieldDoesNotExist",{node:l.target,field:l.targetHandle})),p.length){delete i[c];const m=l.type==="default"?`${l.source}.${l.sourceHandle}`:l.source,_=l.type==="default"?`${l.source}.${l.targetHandle}`:l.target;o.push({message:J("nodes.deletedInvalidEdge",{source:m,target:_}),issues:p,data:l})}}),{workflow:n,warnings:o}},QDe=()=>{fe({actionCreator:nhe,effect:(e,{dispatch:t,getState:n})=>{const r=ue("nodes"),{workflow:i,asCopy:o}=e.payload,s=n().nodes.nodeTemplates;try{const{workflow:a,warnings:l}=XDe(i,s);o&&delete a.id,t(yT(a)),l.length?(t(Ve(pi({title:J("toast.loadedWithWarnings"),status:"warning"}))),l.forEach(({message:c,...u})=>{r.warn(u,c)})):t(Ve(pi({title:J("toast.workflowLoaded"),status:"success"}))),t(Gj("nodes")),requestAnimationFrame(()=>{var c;(c=ZNe.get())==null||c.fitView()})}catch(a){if(a instanceof oE)r.error({error:tt(a)},a.message),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:a.message})));else if(a instanceof sE)r.error({error:tt(a)},a.message),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:a.message})));else if(a instanceof T.ZodError){const{message:l}=rE(a,{prefix:J("nodes.workflowValidation")});r.error({error:tt(a)},l),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:l})))}else r.error({error:tt(a)},J("nodes.unknownErrorValidatingWorkflow")),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:J("nodes.unknownErrorValidatingWorkflow")})))}}})},YDe=()=>{fe({actionCreator:rhe,effect:(e,{dispatch:t,getState:n})=>{const r=ue("nodes"),i=n().nodes.nodes,o=n().nodes.nodeTemplates;let s=0;i.filter(Sn).forEach(a=>{const l=o[a.data.type];if(!l){s++;return}if(tk(a,l))try{const c=cFe(a,l);t(Mj({nodeId:c.id,node:c}))}catch(c){c instanceof GH&&s++}}),s?(r.warn(J("nodes.unableToUpdateNodes",{count:s})),t(Ve(pi({title:J("nodes.unableToUpdateNodes",{count:s})})))):t(Ve(pi({title:J("nodes.allNodesUpdated"),status:"success"})))}})},eW=kY(),fe=eW.startListening;x$e();w$e();k$e();h$e();p$e();g$e();m$e();y$e();H8e();S$e();C$e();E$e();D7e();u$e();H7e();F_e();U8e();f7e();l7e();aMe();c7e();sMe();iMe();d7e();kNe();$_e();mNe();yNe();bNe();_Ne();xNe();pNe();gNe();TNe();ANe();wNe();ENe();SNe();CNe();g7e();p7e();d$e();f$e();b$e();_$e();W8e();hNe();QDe();YDe();v$e();P$e();B_e();M$e();D_e();N_e();YNe();INe();$$e();const ZDe=T.object({payload:T.object({status:T.literal(403),data:T.object({detail:T.string()})})}),JDe=e=>t=>n=>{if(fm(n))try{const r=ZDe.parse(n),{dispatch:i}=e,o=r.payload.data.detail!=="Forbidden"?r.payload.data.detail:void 0;i(Ve({title:J("common.somethingWentWrong"),status:"error",description:o}))}catch{}return t(n)},eLe={canvas:cue,gallery:Wfe,generation:Qle,nodes:vbe,postprocessing:Sbe,system:tse,config:Kse,ui:Ebe,hotkeys:Cbe,controlAdapters:gae,dynamicPrompts:Sue,deleteImageModal:pue,changeBoardModal:due,lora:Xfe,modelmanager:Yfe,sdxl:wbe,queue:ice,workflow:_be,[Lo.reducerPath]:Lo.reducer},tLe=Vb(eLe),nLe=g_e(tLe),rLe=["canvas","gallery","generation","sdxl","nodes","workflow","postprocessing","system","ui","controlAdapters","dynamicPrompts","lora","modelmanager"],uO=Hj("invoke","invoke-store"),iLe={getItem:e=>Tbe(e,uO),setItem:(e,t)=>Abe(e,t,uO)},oLe=(e,t=!0)=>HQ({reducer:nLe,middleware:n=>n({serializableCheck:!1,immutableCheck:!1}).concat(Lo.middleware).concat(Hbe).concat(JDe).prepend(eW.middleware),enhancers:n=>{const r=n().concat(gN());return t&&r.push(m_e(iLe,rLe,{persistDebounce:300,serialize:A_e,unserialize:P_e,prefix:e?`${tM}${e}-`:tM})),r},devTools:{actionSanitizer:I_e,stateSanitizer:R_e,trace:!0,predicate:(n,r)=>!M_e.includes(r.type)}}),tW=e=>e,sLe=""+new URL("logo-13003d72.png",import.meta.url).href,aLe=()=>ie.jsxs($A,{position:"relative",width:"100vw",height:"100vh",alignItems:"center",justifyContent:"center",bg:"#151519",children:[ie.jsx(OA,{src:sLe,w:"8rem",h:"8rem"}),ie.jsx(IA,{label:"Loading",color:"grey",position:"absolute",size:"sm",width:"24px !important",height:"24px !important",right:"1.5rem",bottom:"1.5rem"})]}),lLe=I.memo(aLe),F2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Xf(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function ik(e){return"nodeType"in e}function zr(e){var t,n;return e?Xf(e)?e:ik(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}function ok(e){const{Document:t}=zr(e);return e instanceof t}function s0(e){return Xf(e)?!1:e instanceof zr(e).HTMLElement}function nW(e){return e instanceof zr(e).SVGElement}function Qf(e){return e?Xf(e)?e.document:ik(e)?ok(e)?e:s0(e)||nW(e)?e.ownerDocument:document:document:document}const Cs=F2?I.useLayoutEffect:I.useEffect;function D2(e){const t=I.useRef(e);return Cs(()=>{t.current=e}),I.useCallback(function(){for(var n=arguments.length,r=new Array(n),i=0;i{e.current=setInterval(r,i)},[]),n=I.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[t,n]}function qg(e,t){t===void 0&&(t=[e]);const n=I.useRef(e);return Cs(()=>{n.current!==e&&(n.current=e)},t),n}function a0(e,t){const n=I.useRef();return I.useMemo(()=>{const r=e(n.current);return n.current=r,r},[...t])}function bb(e){const t=D2(e),n=I.useRef(null),r=I.useCallback(i=>{i!==n.current&&(t==null||t(i,n.current)),n.current=i},[]);return[n,r]}function _b(e){const t=I.useRef();return I.useEffect(()=>{t.current=e},[e]),t.current}let dC={};function L2(e,t){return I.useMemo(()=>{if(t)return t;const n=dC[e]==null?0:dC[e]+1;return dC[e]=n,e+"-"+n},[e,t])}function rW(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{const a=Object.entries(s);for(const[l,c]of a){const u=o[l];u!=null&&(o[l]=u+e*c)}return o},{...t})}}const Hd=rW(1),Sb=rW(-1);function uLe(e){return"clientX"in e&&"clientY"in e}function sk(e){if(!e)return!1;const{KeyboardEvent:t}=zr(e.target);return t&&e instanceof t}function dLe(e){if(!e)return!1;const{TouchEvent:t}=zr(e.target);return t&&e instanceof t}function Kg(e){if(dLe(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return uLe(e)?{x:e.clientX,y:e.clientY}:null}const Xg=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[Xg.Translate.toString(e),Xg.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),dO="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function fLe(e){return e.matches(dO)?e:e.querySelector(dO)}const hLe={display:"none"};function pLe(e){let{id:t,value:n}=e;return Q.createElement("div",{id:t,style:hLe},n)}function gLe(e){let{id:t,announcement:n,ariaLiveType:r="assertive"}=e;const i={position:"fixed",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return Q.createElement("div",{id:t,style:i,role:"status","aria-live":r,"aria-atomic":!0},n)}function mLe(){const[e,t]=I.useState("");return{announce:I.useCallback(r=>{r!=null&&t(r)},[]),announcement:e}}const iW=I.createContext(null);function yLe(e){const t=I.useContext(iW);I.useEffect(()=>{if(!t)throw new Error("useDndMonitor must be used within a children of ");return t(e)},[e,t])}function vLe(){const[e]=I.useState(()=>new Set),t=I.useCallback(r=>(e.add(r),()=>e.delete(r)),[e]);return[I.useCallback(r=>{let{type:i,event:o}=r;e.forEach(s=>{var a;return(a=s[i])==null?void 0:a.call(s,o)})},[e]),t]}const bLe={draggable:` - To pick up a draggable item, press the space bar. - While dragging, use the arrow keys to move the item. - Press space again to drop the item in its new position, or press escape to cancel. - `},_Le={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was moved over droppable area "+n.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was dropped over droppable area "+n.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function SLe(e){let{announcements:t=_Le,container:n,hiddenTextDescribedById:r,screenReaderInstructions:i=bLe}=e;const{announce:o,announcement:s}=mLe(),a=L2("DndLiveRegion"),[l,c]=I.useState(!1);if(I.useEffect(()=>{c(!0)},[]),yLe(I.useMemo(()=>({onDragStart(d){let{active:f}=d;o(t.onDragStart({active:f}))},onDragMove(d){let{active:f,over:h}=d;t.onDragMove&&o(t.onDragMove({active:f,over:h}))},onDragOver(d){let{active:f,over:h}=d;o(t.onDragOver({active:f,over:h}))},onDragEnd(d){let{active:f,over:h}=d;o(t.onDragEnd({active:f,over:h}))},onDragCancel(d){let{active:f,over:h}=d;o(t.onDragCancel({active:f,over:h}))}}),[o,t])),!l)return null;const u=Q.createElement(Q.Fragment,null,Q.createElement(pLe,{id:r,value:i.draggable}),Q.createElement(gLe,{id:a,announcement:s}));return n?gi.createPortal(u,n):u}var wn;(function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"})(wn||(wn={}));function xb(){}function fO(e,t){return I.useMemo(()=>({sensor:e,options:t??{}}),[e,t])}function xLe(){for(var e=arguments.length,t=new Array(e),n=0;n[...t].filter(r=>r!=null),[...t])}const zo=Object.freeze({x:0,y:0});function wLe(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function CLe(e,t){const n=Kg(e);if(!n)return"0 0";const r={x:(n.x-t.left)/t.width*100,y:(n.y-t.top)/t.height*100};return r.x+"% "+r.y+"%"}function ELe(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function TLe(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function ALe(e){let{left:t,top:n,height:r,width:i}=e;return[{x:t,y:n},{x:t+i,y:n},{x:t,y:n+r},{x:t+i,y:n+r}]}function kLe(e,t){if(!e||e.length===0)return null;const[n]=e;return t?n[t]:n}function PLe(e,t){const n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),i=Math.min(t.left+t.width,e.left+e.width),o=Math.min(t.top+t.height,e.top+e.height),s=i-r,a=o-n;if(r{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const i=[];for(const o of r){const{id:s}=o,a=n.get(s);if(a){const l=PLe(a,t);l>0&&i.push({id:s,data:{droppableContainer:o,value:l}})}}return i.sort(TLe)};function MLe(e,t){const{top:n,left:r,bottom:i,right:o}=t;return n<=e.y&&e.y<=i&&r<=e.x&&e.x<=o}const RLe=e=>{let{droppableContainers:t,droppableRects:n,pointerCoordinates:r}=e;if(!r)return[];const i=[];for(const o of t){const{id:s}=o,a=n.get(s);if(a&&MLe(r,a)){const c=ALe(a).reduce((d,f)=>d+wLe(r,f),0),u=Number((c/4).toFixed(4));i.push({id:s,data:{droppableContainer:o,value:u}})}}return i.sort(ELe)};function OLe(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}function oW(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:zo}function $Le(e){return function(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;o({...s,top:s.top+e*a.y,bottom:s.bottom+e*a.y,left:s.left+e*a.x,right:s.right+e*a.x}),{...n})}}const NLe=$Le(1);function sW(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function FLe(e,t,n){const r=sW(t);if(!r)return e;const{scaleX:i,scaleY:o,x:s,y:a}=r,l=e.left-s-(1-i)*parseFloat(n),c=e.top-a-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),u=i?e.width/i:e.width,d=o?e.height/o:e.height;return{width:u,height:d,top:c,right:l+u,bottom:c+d,left:l}}const DLe={ignoreTransform:!1};function l0(e,t){t===void 0&&(t=DLe);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:c,transformOrigin:u}=zr(e).getComputedStyle(e);c&&(n=FLe(n,c,u))}const{top:r,left:i,width:o,height:s,bottom:a,right:l}=n;return{top:r,left:i,width:o,height:s,bottom:a,right:l}}function hO(e){return l0(e,{ignoreTransform:!0})}function LLe(e){const t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}function BLe(e,t){return t===void 0&&(t=zr(e).getComputedStyle(e)),t.position==="fixed"}function zLe(e,t){t===void 0&&(t=zr(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const o=t[i];return typeof o=="string"?n.test(o):!1})}function ak(e,t){const n=[];function r(i){if(t!=null&&n.length>=t||!i)return n;if(ok(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!s0(i)||nW(i)||n.includes(i))return n;const o=zr(e).getComputedStyle(i);return i!==e&&zLe(i,o)&&n.push(i),BLe(i,o)?n:r(i.parentNode)}return e?r(e):n}function aW(e){const[t]=ak(e,1);return t??null}function fC(e){return!F2||!e?null:Xf(e)?e:ik(e)?ok(e)||e===Qf(e).scrollingElement?window:s0(e)?e:null:null}function lW(e){return Xf(e)?e.scrollX:e.scrollLeft}function cW(e){return Xf(e)?e.scrollY:e.scrollTop}function dE(e){return{x:lW(e),y:cW(e)}}var Fn;(function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"})(Fn||(Fn={}));function uW(e){return!F2||!e?!1:e===document.scrollingElement}function dW(e){const t={x:0,y:0},n=uW(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height},i=e.scrollTop<=t.y,o=e.scrollLeft<=t.x,s=e.scrollTop>=r.y,a=e.scrollLeft>=r.x;return{isTop:i,isLeft:o,isBottom:s,isRight:a,maxScroll:r,minScroll:t}}const jLe={x:.2,y:.2};function VLe(e,t,n,r,i){let{top:o,left:s,right:a,bottom:l}=n;r===void 0&&(r=10),i===void 0&&(i=jLe);const{isTop:c,isBottom:u,isLeft:d,isRight:f}=dW(e),h={x:0,y:0},p={x:0,y:0},m={height:t.height*i.y,width:t.width*i.x};return!c&&o<=t.top+m.height?(h.y=Fn.Backward,p.y=r*Math.abs((t.top+m.height-o)/m.height)):!u&&l>=t.bottom-m.height&&(h.y=Fn.Forward,p.y=r*Math.abs((t.bottom-m.height-l)/m.height)),!f&&a>=t.right-m.width?(h.x=Fn.Forward,p.x=r*Math.abs((t.right-m.width-a)/m.width)):!d&&s<=t.left+m.width&&(h.x=Fn.Backward,p.x=r*Math.abs((t.left+m.width-s)/m.width)),{direction:h,speed:p}}function ULe(e){if(e===document.scrollingElement){const{innerWidth:o,innerHeight:s}=window;return{top:0,left:0,right:o,bottom:s,width:o,height:s}}const{top:t,left:n,right:r,bottom:i}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:i,width:e.clientWidth,height:e.clientHeight}}function fW(e){return e.reduce((t,n)=>Hd(t,dE(n)),zo)}function GLe(e){return e.reduce((t,n)=>t+lW(n),0)}function HLe(e){return e.reduce((t,n)=>t+cW(n),0)}function hW(e,t){if(t===void 0&&(t=l0),!e)return;const{top:n,left:r,bottom:i,right:o}=t(e);aW(e)&&(i<=0||o<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const WLe=[["x",["left","right"],GLe],["y",["top","bottom"],HLe]];class lk{constructor(t,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const r=ak(n),i=fW(r);this.rect={...t},this.width=t.width,this.height=t.height;for(const[o,s,a]of WLe)for(const l of s)Object.defineProperty(this,l,{get:()=>{const c=a(r),u=i[o]-c;return this.rect[l]+u},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Pp{constructor(t){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var r;return(r=this.target)==null?void 0:r.removeEventListener(...n)})},this.target=t}add(t,n,r){var i;(i=this.target)==null||i.addEventListener(t,n,r),this.listeners.push([t,n,r])}}function qLe(e){const{EventTarget:t}=zr(e);return e instanceof t?e:Qf(e)}function hC(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return typeof t=="number"?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t?r>t.y:!1}var Gi;(function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"})(Gi||(Gi={}));function pO(e){e.preventDefault()}function KLe(e){e.stopPropagation()}var Ct;(function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"})(Ct||(Ct={}));const pW={start:[Ct.Space,Ct.Enter],cancel:[Ct.Esc],end:[Ct.Space,Ct.Enter]},XLe=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case Ct.Right:return{...n,x:n.x+25};case Ct.Left:return{...n,x:n.x-25};case Ct.Down:return{...n,y:n.y+25};case Ct.Up:return{...n,y:n.y-25}}};class gW{constructor(t){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=t;const{event:{target:n}}=t;this.props=t,this.listeners=new Pp(Qf(n)),this.windowListeners=new Pp(zr(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Gi.Resize,this.handleCancel),this.windowListeners.add(Gi.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(Gi.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:t,onStart:n}=this.props,r=t.node.current;r&&hW(r),n(zo)}handleKeyDown(t){if(sk(t)){const{active:n,context:r,options:i}=this.props,{keyboardCodes:o=pW,coordinateGetter:s=XLe,scrollBehavior:a="smooth"}=i,{code:l}=t;if(o.end.includes(l)){this.handleEnd(t);return}if(o.cancel.includes(l)){this.handleCancel(t);return}const{collisionRect:c}=r.current,u=c?{x:c.left,y:c.top}:zo;this.referenceCoordinates||(this.referenceCoordinates=u);const d=s(t,{active:n,context:r.current,currentCoordinates:u});if(d){const f=Sb(d,u),h={x:0,y:0},{scrollableAncestors:p}=r.current;for(const m of p){const _=t.code,{isTop:v,isRight:y,isLeft:g,isBottom:b,maxScroll:S,minScroll:w}=dW(m),C=ULe(m),x={x:Math.min(_===Ct.Right?C.right-C.width/2:C.right,Math.max(_===Ct.Right?C.left:C.left+C.width/2,d.x)),y:Math.min(_===Ct.Down?C.bottom-C.height/2:C.bottom,Math.max(_===Ct.Down?C.top:C.top+C.height/2,d.y))},k=_===Ct.Right&&!y||_===Ct.Left&&!g,A=_===Ct.Down&&!b||_===Ct.Up&&!v;if(k&&x.x!==d.x){const R=m.scrollLeft+f.x,L=_===Ct.Right&&R<=S.x||_===Ct.Left&&R>=w.x;if(L&&!f.y){m.scrollTo({left:R,behavior:a});return}L?h.x=m.scrollLeft-R:h.x=_===Ct.Right?m.scrollLeft-S.x:m.scrollLeft-w.x,h.x&&m.scrollBy({left:-h.x,behavior:a});break}else if(A&&x.y!==d.y){const R=m.scrollTop+f.y,L=_===Ct.Down&&R<=S.y||_===Ct.Up&&R>=w.y;if(L&&!f.x){m.scrollTo({top:R,behavior:a});return}L?h.y=m.scrollTop-R:h.y=_===Ct.Down?m.scrollTop-S.y:m.scrollTop-w.y,h.y&&m.scrollBy({top:-h.y,behavior:a});break}}this.handleMove(t,Hd(Sb(d,this.referenceCoordinates),h))}}}handleMove(t,n){const{onMove:r}=this.props;t.preventDefault(),r(n)}handleEnd(t){const{onEnd:n}=this.props;t.preventDefault(),this.detach(),n()}handleCancel(t){const{onCancel:n}=this.props;t.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}gW.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=pW,onActivation:i}=t,{active:o}=n;const{code:s}=e.nativeEvent;if(r.start.includes(s)){const a=o.activatorNode.current;return a&&e.target!==a?!1:(e.preventDefault(),i==null||i({event:e.nativeEvent}),!0)}return!1}}];function gO(e){return!!(e&&"distance"in e)}function mO(e){return!!(e&&"delay"in e)}class ck{constructor(t,n,r){var i;r===void 0&&(r=qLe(t.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=t,this.events=n;const{event:o}=t,{target:s}=o;this.props=t,this.events=n,this.document=Qf(s),this.documentListeners=new Pp(this.document),this.listeners=new Pp(r),this.windowListeners=new Pp(zr(s)),this.initialCoordinates=(i=Kg(o))!=null?i:zo,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:t,props:{options:{activationConstraint:n,bypassActivationConstraint:r}}}=this;if(this.listeners.add(t.move.name,this.handleMove,{passive:!1}),this.listeners.add(t.end.name,this.handleEnd),this.windowListeners.add(Gi.Resize,this.handleCancel),this.windowListeners.add(Gi.DragStart,pO),this.windowListeners.add(Gi.VisibilityChange,this.handleCancel),this.windowListeners.add(Gi.ContextMenu,pO),this.documentListeners.add(Gi.Keydown,this.handleKeydown),n){if(r!=null&&r({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(mO(n)){this.timeoutId=setTimeout(this.handleStart,n.delay);return}if(gO(n))return}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:t}=this,{onStart:n}=this.props;t&&(this.activated=!0,this.documentListeners.add(Gi.Click,KLe,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Gi.SelectionChange,this.removeTextSelection),n(t))}handleMove(t){var n;const{activated:r,initialCoordinates:i,props:o}=this,{onMove:s,options:{activationConstraint:a}}=o;if(!i)return;const l=(n=Kg(t))!=null?n:zo,c=Sb(i,l);if(!r&&a){if(gO(a)){if(a.tolerance!=null&&hC(c,a.tolerance))return this.handleCancel();if(hC(c,a.distance))return this.handleStart()}return mO(a)&&hC(c,a.tolerance)?this.handleCancel():void 0}t.cancelable&&t.preventDefault(),s(l)}handleEnd(){const{onEnd:t}=this.props;this.detach(),t()}handleCancel(){const{onCancel:t}=this.props;this.detach(),t()}handleKeydown(t){t.code===Ct.Esc&&this.handleCancel()}removeTextSelection(){var t;(t=this.document.getSelection())==null||t.removeAllRanges()}}const QLe={move:{name:"pointermove"},end:{name:"pointerup"}};class mW extends ck{constructor(t){const{event:n}=t,r=Qf(n.target);super(t,QLe,r)}}mW.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!n.isPrimary||n.button!==0?!1:(r==null||r({event:n}),!0)}}];const YLe={move:{name:"mousemove"},end:{name:"mouseup"}};var fE;(function(e){e[e.RightClick=2]="RightClick"})(fE||(fE={}));class yW extends ck{constructor(t){super(t,YLe,Qf(t.event.target))}}yW.activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button===fE.RightClick?!1:(r==null||r({event:n}),!0)}}];const pC={move:{name:"touchmove"},end:{name:"touchend"}};class vW extends ck{constructor(t){super(t,pC)}static setup(){return window.addEventListener(pC.move.name,t,{capture:!1,passive:!1}),function(){window.removeEventListener(pC.move.name,t)};function t(){}}}vW.activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:i}=n;return i.length>1?!1:(r==null||r({event:n}),!0)}}];var Ip;(function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"})(Ip||(Ip={}));var wb;(function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"})(wb||(wb={}));function ZLe(e){let{acceleration:t,activator:n=Ip.Pointer,canScroll:r,draggingRect:i,enabled:o,interval:s=5,order:a=wb.TreeOrder,pointerCoordinates:l,scrollableAncestors:c,scrollableAncestorRects:u,delta:d,threshold:f}=e;const h=eBe({delta:d,disabled:!o}),[p,m]=cLe(),_=I.useRef({x:0,y:0}),v=I.useRef({x:0,y:0}),y=I.useMemo(()=>{switch(n){case Ip.Pointer:return l?{top:l.y,bottom:l.y,left:l.x,right:l.x}:null;case Ip.DraggableRect:return i}},[n,i,l]),g=I.useRef(null),b=I.useCallback(()=>{const w=g.current;if(!w)return;const C=_.current.x*v.current.x,x=_.current.y*v.current.y;w.scrollBy(C,x)},[]),S=I.useMemo(()=>a===wb.TreeOrder?[...c].reverse():c,[a,c]);I.useEffect(()=>{if(!o||!c.length||!y){m();return}for(const w of S){if((r==null?void 0:r(w))===!1)continue;const C=c.indexOf(w),x=u[C];if(!x)continue;const{direction:k,speed:A}=VLe(w,x,y,t,f);for(const R of["x","y"])h[R][k[R]]||(A[R]=0,k[R]=0);if(A.x>0||A.y>0){m(),g.current=w,p(b,s),_.current=A,v.current=k;return}}_.current={x:0,y:0},v.current={x:0,y:0},m()},[t,b,r,m,o,s,JSON.stringify(y),JSON.stringify(h),p,c,S,u,JSON.stringify(f)])}const JLe={x:{[Fn.Backward]:!1,[Fn.Forward]:!1},y:{[Fn.Backward]:!1,[Fn.Forward]:!1}};function eBe(e){let{delta:t,disabled:n}=e;const r=_b(t);return a0(i=>{if(n||!r||!i)return JLe;const o={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[Fn.Backward]:i.x[Fn.Backward]||o.x===-1,[Fn.Forward]:i.x[Fn.Forward]||o.x===1},y:{[Fn.Backward]:i.y[Fn.Backward]||o.y===-1,[Fn.Forward]:i.y[Fn.Forward]||o.y===1}}},[n,t,r])}function tBe(e,t){const n=t!==null?e.get(t):void 0,r=n?n.node.current:null;return a0(i=>{var o;return t===null?null:(o=r??i)!=null?o:null},[r,t])}function nBe(e,t){return I.useMemo(()=>e.reduce((n,r)=>{const{sensor:i}=r,o=i.activators.map(s=>({eventName:s.eventName,handler:t(s.handler,r)}));return[...n,...o]},[]),[e,t])}var Qg;(function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"})(Qg||(Qg={}));var hE;(function(e){e.Optimized="optimized"})(hE||(hE={}));const yO=new Map;function rBe(e,t){let{dragging:n,dependencies:r,config:i}=t;const[o,s]=I.useState(null),{frequency:a,measure:l,strategy:c}=i,u=I.useRef(e),d=_(),f=qg(d),h=I.useCallback(function(v){v===void 0&&(v=[]),!f.current&&s(y=>y===null?v:y.concat(v.filter(g=>!y.includes(g))))},[f]),p=I.useRef(null),m=a0(v=>{if(d&&!n)return yO;if(!v||v===yO||u.current!==e||o!=null){const y=new Map;for(let g of e){if(!g)continue;if(o&&o.length>0&&!o.includes(g.id)&&g.rect.current){y.set(g.id,g.rect.current);continue}const b=g.node.current,S=b?new lk(l(b),b):null;g.rect.current=S,S&&y.set(g.id,S)}return y}return v},[e,o,n,d,l]);return I.useEffect(()=>{u.current=e},[e]),I.useEffect(()=>{d||h()},[n,d]),I.useEffect(()=>{o&&o.length>0&&s(null)},[JSON.stringify(o)]),I.useEffect(()=>{d||typeof a!="number"||p.current!==null||(p.current=setTimeout(()=>{h(),p.current=null},a))},[a,d,h,...r]),{droppableRects:m,measureDroppableContainers:h,measuringScheduled:o!=null};function _(){switch(c){case Qg.Always:return!1;case Qg.BeforeDragging:return n;default:return!n}}}function uk(e,t){return a0(n=>e?n||(typeof t=="function"?t(e):e):null,[t,e])}function iBe(e,t){return uk(e,t)}function oBe(e){let{callback:t,disabled:n}=e;const r=D2(t),i=I.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(r)},[r,n]);return I.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function B2(e){let{callback:t,disabled:n}=e;const r=D2(t),i=I.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(r)},[n]);return I.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function sBe(e){return new lk(l0(e),e)}function vO(e,t,n){t===void 0&&(t=sBe);const[r,i]=I.useReducer(a,null),o=oBe({callback(l){if(e)for(const c of l){const{type:u,target:d}=c;if(u==="childList"&&d instanceof HTMLElement&&d.contains(e)){i();break}}}}),s=B2({callback:i});return Cs(()=>{i(),e?(s==null||s.observe(e),o==null||o.observe(document.body,{childList:!0,subtree:!0})):(s==null||s.disconnect(),o==null||o.disconnect())},[e]),r;function a(l){if(!e)return null;if(e.isConnected===!1){var c;return(c=l??n)!=null?c:null}const u=t(e);return JSON.stringify(l)===JSON.stringify(u)?l:u}}function aBe(e){const t=uk(e);return oW(e,t)}const bO=[];function lBe(e){const t=I.useRef(e),n=a0(r=>e?r&&r!==bO&&e&&t.current&&e.parentNode===t.current.parentNode?r:ak(e):bO,[e]);return I.useEffect(()=>{t.current=e},[e]),n}function cBe(e){const[t,n]=I.useState(null),r=I.useRef(e),i=I.useCallback(o=>{const s=fC(o.target);s&&n(a=>a?(a.set(s,dE(s)),new Map(a)):null)},[]);return I.useEffect(()=>{const o=r.current;if(e!==o){s(o);const a=e.map(l=>{const c=fC(l);return c?(c.addEventListener("scroll",i,{passive:!0}),[c,dE(c)]):null}).filter(l=>l!=null);n(a.length?new Map(a):null),r.current=e}return()=>{s(e),s(o)};function s(a){a.forEach(l=>{const c=fC(l);c==null||c.removeEventListener("scroll",i)})}},[i,e]),I.useMemo(()=>e.length?t?Array.from(t.values()).reduce((o,s)=>Hd(o,s),zo):fW(e):zo,[e,t])}function _O(e,t){t===void 0&&(t=[]);const n=I.useRef(null);return I.useEffect(()=>{n.current=null},t),I.useEffect(()=>{const r=e!==zo;r&&!n.current&&(n.current=e),!r&&n.current&&(n.current=null)},[e]),n.current?Sb(e,n.current):zo}function uBe(e){I.useEffect(()=>{if(!F2)return;const t=e.map(n=>{let{sensor:r}=n;return r.setup==null?void 0:r.setup()});return()=>{for(const n of t)n==null||n()}},e.map(t=>{let{sensor:n}=t;return n}))}function dBe(e,t){return I.useMemo(()=>e.reduce((n,r)=>{let{eventName:i,handler:o}=r;return n[i]=s=>{o(s,t)},n},{}),[e,t])}function bW(e){return I.useMemo(()=>e?LLe(e):null,[e])}const gC=[];function fBe(e,t){t===void 0&&(t=l0);const[n]=e,r=bW(n?zr(n):null),[i,o]=I.useReducer(a,gC),s=B2({callback:o});return e.length>0&&i===gC&&o(),Cs(()=>{e.length?e.forEach(l=>s==null?void 0:s.observe(l)):(s==null||s.disconnect(),o())},[e]),i;function a(){return e.length?e.map(l=>uW(l)?r:new lk(t(l),l)):gC}}function _W(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return s0(t)?t:e}function hBe(e){let{measure:t}=e;const[n,r]=I.useState(null),i=I.useCallback(c=>{for(const{target:u}of c)if(s0(u)){r(d=>{const f=t(u);return d?{...d,width:f.width,height:f.height}:f});break}},[t]),o=B2({callback:i}),s=I.useCallback(c=>{const u=_W(c);o==null||o.disconnect(),u&&(o==null||o.observe(u)),r(u?t(u):null)},[t,o]),[a,l]=bb(s);return I.useMemo(()=>({nodeRef:a,rect:n,setRef:l}),[n,a,l])}const pBe=[{sensor:mW,options:{}},{sensor:gW,options:{}}],gBe={current:{}},Cv={draggable:{measure:hO},droppable:{measure:hO,strategy:Qg.WhileDragging,frequency:hE.Optimized},dragOverlay:{measure:l0}};class Mp extends Map{get(t){var n;return t!=null&&(n=super.get(t))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(t=>{let{disabled:n}=t;return!n})}getNodeFor(t){var n,r;return(n=(r=this.get(t))==null?void 0:r.node.current)!=null?n:void 0}}const mBe={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Mp,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:xb},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Cv,measureDroppableContainers:xb,windowRect:null,measuringScheduled:!1},SW={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:xb,draggableNodes:new Map,over:null,measureDroppableContainers:xb},c0=I.createContext(SW),xW=I.createContext(mBe);function yBe(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Mp}}}function vBe(e,t){switch(t.type){case wn.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case wn.DragMove:return e.draggable.active?{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}}:e;case wn.DragEnd:case wn.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case wn.RegisterDroppable:{const{element:n}=t,{id:r}=n,i=new Mp(e.droppable.containers);return i.set(r,n),{...e,droppable:{...e.droppable,containers:i}}}case wn.SetDroppableDisabled:{const{id:n,key:r,disabled:i}=t,o=e.droppable.containers.get(n);if(!o||r!==o.key)return e;const s=new Mp(e.droppable.containers);return s.set(n,{...o,disabled:i}),{...e,droppable:{...e.droppable,containers:s}}}case wn.UnregisterDroppable:{const{id:n,key:r}=t,i=e.droppable.containers.get(n);if(!i||r!==i.key)return e;const o=new Mp(e.droppable.containers);return o.delete(n),{...e,droppable:{...e.droppable,containers:o}}}default:return e}}function bBe(e){let{disabled:t}=e;const{active:n,activatorEvent:r,draggableNodes:i}=I.useContext(c0),o=_b(r),s=_b(n==null?void 0:n.id);return I.useEffect(()=>{if(!t&&!r&&o&&s!=null){if(!sk(o)||document.activeElement===o.target)return;const a=i.get(s);if(!a)return;const{activatorNode:l,node:c}=a;if(!l.current&&!c.current)return;requestAnimationFrame(()=>{for(const u of[l.current,c.current]){if(!u)continue;const d=fLe(u);if(d){d.focus();break}}})}},[r,t,i,s,o]),null}function wW(e,t){let{transform:n,...r}=t;return e!=null&&e.length?e.reduce((i,o)=>o({transform:i,...r}),n):n}function _Be(e){return I.useMemo(()=>({draggable:{...Cv.draggable,...e==null?void 0:e.draggable},droppable:{...Cv.droppable,...e==null?void 0:e.droppable},dragOverlay:{...Cv.dragOverlay,...e==null?void 0:e.dragOverlay}}),[e==null?void 0:e.draggable,e==null?void 0:e.droppable,e==null?void 0:e.dragOverlay])}function SBe(e){let{activeNode:t,measure:n,initialRect:r,config:i=!0}=e;const o=I.useRef(!1),{x:s,y:a}=typeof i=="boolean"?{x:i,y:i}:i;Cs(()=>{if(!s&&!a||!t){o.current=!1;return}if(o.current||!r)return;const c=t==null?void 0:t.node.current;if(!c||c.isConnected===!1)return;const u=n(c),d=oW(u,r);if(s||(d.x=0),a||(d.y=0),o.current=!0,Math.abs(d.x)>0||Math.abs(d.y)>0){const f=aW(c);f&&f.scrollBy({top:d.y,left:d.x})}},[t,s,a,r,n])}const z2=I.createContext({...zo,scaleX:1,scaleY:1});var Ua;(function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"})(Ua||(Ua={}));const xBe=I.memo(function(t){var n,r,i,o;let{id:s,accessibility:a,autoScroll:l=!0,children:c,sensors:u=pBe,collisionDetection:d=ILe,measuring:f,modifiers:h,...p}=t;const m=I.useReducer(vBe,void 0,yBe),[_,v]=m,[y,g]=vLe(),[b,S]=I.useState(Ua.Uninitialized),w=b===Ua.Initialized,{draggable:{active:C,nodes:x,translate:k},droppable:{containers:A}}=_,R=C?x.get(C):null,L=I.useRef({initial:null,translated:null}),M=I.useMemo(()=>{var Ut;return C!=null?{id:C,data:(Ut=R==null?void 0:R.data)!=null?Ut:gBe,rect:L}:null},[C,R]),E=I.useRef(null),[P,O]=I.useState(null),[F,$]=I.useState(null),D=qg(p,Object.values(p)),N=L2("DndDescribedBy",s),z=I.useMemo(()=>A.getEnabled(),[A]),V=_Be(f),{droppableRects:H,measureDroppableContainers:X,measuringScheduled:te}=rBe(z,{dragging:w,dependencies:[k.x,k.y],config:V.droppable}),ee=tBe(x,C),j=I.useMemo(()=>F?Kg(F):null,[F]),q=Hl(),Z=iBe(ee,V.draggable.measure);SBe({activeNode:C?x.get(C):null,config:q.layoutShiftCompensation,initialRect:Z,measure:V.draggable.measure});const oe=vO(ee,V.draggable.measure,Z),be=vO(ee?ee.parentElement:null),Me=I.useRef({activatorEvent:null,active:null,activeNode:ee,collisionRect:null,collisions:null,droppableRects:H,draggableNodes:x,draggingNode:null,draggingNodeRect:null,droppableContainers:A,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),lt=A.getNodeFor((n=Me.current.over)==null?void 0:n.id),Le=hBe({measure:V.dragOverlay.measure}),we=(r=Le.nodeRef.current)!=null?r:ee,pt=w?(i=Le.rect)!=null?i:oe:null,vt=!!(Le.nodeRef.current&&Le.rect),Ce=aBe(vt?null:oe),ii=bW(we?zr(we):null),sn=lBe(w?lt??ee:null),jr=fBe(sn),sr=wW(h,{transform:{x:k.x-Ce.x,y:k.y-Ce.y,scaleX:1,scaleY:1},activatorEvent:F,active:M,activeNodeRect:oe,containerNodeRect:be,draggingNodeRect:pt,over:Me.current.over,overlayNodeRect:Le.rect,scrollableAncestors:sn,scrollableAncestorRects:jr,windowRect:ii}),fn=j?Hd(j,k):null,Vr=cBe(sn),fo=_O(Vr),Ri=_O(Vr,[oe]),ar=Hd(sr,fo),Wn=pt?NLe(pt,sr):null,wr=M&&Wn?d({active:M,collisionRect:Wn,droppableRects:H,droppableContainers:z,pointerCoordinates:fn}):null,Yt=kLe(wr,"id"),[It,oi]=I.useState(null),Oi=vt?sr:Hd(sr,Ri),ho=OLe(Oi,(o=It==null?void 0:It.rect)!=null?o:null,oe),Ur=I.useCallback((Ut,_t)=>{let{sensor:qn,options:Pn}=_t;if(E.current==null)return;const lr=x.get(E.current);if(!lr)return;const Cr=Ut.nativeEvent,Gr=new qn({active:E.current,activeNode:lr,event:Cr,options:Pn,context:Me,onStart(Er){const Kn=E.current;if(Kn==null)return;const Ms=x.get(Kn);if(!Ms)return;const{onDragStart:Ca}=D.current,Ea={active:{id:Kn,data:Ms.data,rect:L}};gi.unstable_batchedUpdates(()=>{Ca==null||Ca(Ea),S(Ua.Initializing),v({type:wn.DragStart,initialCoordinates:Er,active:Kn}),y({type:"onDragStart",event:Ea})})},onMove(Er){v({type:wn.DragMove,coordinates:Er})},onEnd:Ho(wn.DragEnd),onCancel:Ho(wn.DragCancel)});gi.unstable_batchedUpdates(()=>{O(Gr),$(Ut.nativeEvent)});function Ho(Er){return async function(){const{active:Ms,collisions:Ca,over:Ea,scrollAdjustedTranslate:wu}=Me.current;let Rs=null;if(Ms&&wu){const{cancelDrop:Tr}=D.current;Rs={activatorEvent:Cr,active:Ms,collisions:Ca,delta:wu,over:Ea},Er===wn.DragEnd&&typeof Tr=="function"&&await Promise.resolve(Tr(Rs))&&(Er=wn.DragCancel)}E.current=null,gi.unstable_batchedUpdates(()=>{v({type:Er}),S(Ua.Uninitialized),oi(null),O(null),$(null);const Tr=Er===wn.DragEnd?"onDragEnd":"onDragCancel";if(Rs){const Wl=D.current[Tr];Wl==null||Wl(Rs),y({type:Tr,event:Rs})}})}}},[x]),hn=I.useCallback((Ut,_t)=>(qn,Pn)=>{const lr=qn.nativeEvent,Cr=x.get(Pn);if(E.current!==null||!Cr||lr.dndKit||lr.defaultPrevented)return;const Gr={active:Cr};Ut(qn,_t.options,Gr)===!0&&(lr.dndKit={capturedBy:_t.sensor},E.current=Pn,Ur(qn,_t))},[x,Ur]),si=nBe(u,hn);uBe(u),Cs(()=>{oe&&b===Ua.Initializing&&S(Ua.Initialized)},[oe,b]),I.useEffect(()=>{const{onDragMove:Ut}=D.current,{active:_t,activatorEvent:qn,collisions:Pn,over:lr}=Me.current;if(!_t||!qn)return;const Cr={active:_t,activatorEvent:qn,collisions:Pn,delta:{x:ar.x,y:ar.y},over:lr};gi.unstable_batchedUpdates(()=>{Ut==null||Ut(Cr),y({type:"onDragMove",event:Cr})})},[ar.x,ar.y]),I.useEffect(()=>{const{active:Ut,activatorEvent:_t,collisions:qn,droppableContainers:Pn,scrollAdjustedTranslate:lr}=Me.current;if(!Ut||E.current==null||!_t||!lr)return;const{onDragOver:Cr}=D.current,Gr=Pn.get(Yt),Ho=Gr&&Gr.rect.current?{id:Gr.id,rect:Gr.rect.current,data:Gr.data,disabled:Gr.disabled}:null,Er={active:Ut,activatorEvent:_t,collisions:qn,delta:{x:lr.x,y:lr.y},over:Ho};gi.unstable_batchedUpdates(()=>{oi(Ho),Cr==null||Cr(Er),y({type:"onDragOver",event:Er})})},[Yt]),Cs(()=>{Me.current={activatorEvent:F,active:M,activeNode:ee,collisionRect:Wn,collisions:wr,droppableRects:H,draggableNodes:x,draggingNode:we,draggingNodeRect:pt,droppableContainers:A,over:It,scrollableAncestors:sn,scrollAdjustedTranslate:ar},L.current={initial:pt,translated:Wn}},[M,ee,wr,Wn,x,we,pt,H,A,It,sn,ar]),ZLe({...q,delta:k,draggingRect:Wn,pointerCoordinates:fn,scrollableAncestors:sn,scrollableAncestorRects:jr});const Gl=I.useMemo(()=>({active:M,activeNode:ee,activeNodeRect:oe,activatorEvent:F,collisions:wr,containerNodeRect:be,dragOverlay:Le,draggableNodes:x,droppableContainers:A,droppableRects:H,over:It,measureDroppableContainers:X,scrollableAncestors:sn,scrollableAncestorRects:jr,measuringConfiguration:V,measuringScheduled:te,windowRect:ii}),[M,ee,oe,F,wr,be,Le,x,A,H,It,X,sn,jr,V,te,ii]),Go=I.useMemo(()=>({activatorEvent:F,activators:si,active:M,activeNodeRect:oe,ariaDescribedById:{draggable:N},dispatch:v,draggableNodes:x,over:It,measureDroppableContainers:X}),[F,si,M,oe,v,N,x,It,X]);return Q.createElement(iW.Provider,{value:g},Q.createElement(c0.Provider,{value:Go},Q.createElement(xW.Provider,{value:Gl},Q.createElement(z2.Provider,{value:ho},c)),Q.createElement(bBe,{disabled:(a==null?void 0:a.restoreFocus)===!1})),Q.createElement(SLe,{...a,hiddenTextDescribedById:N}));function Hl(){const Ut=(P==null?void 0:P.autoScrollEnabled)===!1,_t=typeof l=="object"?l.enabled===!1:l===!1,qn=w&&!Ut&&!_t;return typeof l=="object"?{...l,enabled:qn}:{enabled:qn}}}),wBe=I.createContext(null),SO="button",CBe="Droppable";function sqe(e){let{id:t,data:n,disabled:r=!1,attributes:i}=e;const o=L2(CBe),{activators:s,activatorEvent:a,active:l,activeNodeRect:c,ariaDescribedById:u,draggableNodes:d,over:f}=I.useContext(c0),{role:h=SO,roleDescription:p="draggable",tabIndex:m=0}=i??{},_=(l==null?void 0:l.id)===t,v=I.useContext(_?z2:wBe),[y,g]=bb(),[b,S]=bb(),w=dBe(s,t),C=qg(n);Cs(()=>(d.set(t,{id:t,key:o,node:y,activatorNode:b,data:C}),()=>{const k=d.get(t);k&&k.key===o&&d.delete(t)}),[d,t]);const x=I.useMemo(()=>({role:h,tabIndex:m,"aria-disabled":r,"aria-pressed":_&&h===SO?!0:void 0,"aria-roledescription":p,"aria-describedby":u.draggable}),[r,h,m,_,p,u.draggable]);return{active:l,activatorEvent:a,activeNodeRect:c,attributes:x,isDragging:_,listeners:r?void 0:w,node:y,over:f,setNodeRef:g,setActivatorNodeRef:S,transform:v}}function EBe(){return I.useContext(xW)}const TBe="Droppable",ABe={timeout:25};function aqe(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:i}=e;const o=L2(TBe),{active:s,dispatch:a,over:l,measureDroppableContainers:c}=I.useContext(c0),u=I.useRef({disabled:n}),d=I.useRef(!1),f=I.useRef(null),h=I.useRef(null),{disabled:p,updateMeasurementsFor:m,timeout:_}={...ABe,...i},v=qg(m??r),y=I.useCallback(()=>{if(!d.current){d.current=!0;return}h.current!=null&&clearTimeout(h.current),h.current=setTimeout(()=>{c(Array.isArray(v.current)?v.current:[v.current]),h.current=null},_)},[_]),g=B2({callback:y,disabled:p||!s}),b=I.useCallback((x,k)=>{g&&(k&&(g.unobserve(k),d.current=!1),x&&g.observe(x))},[g]),[S,w]=bb(b),C=qg(t);return I.useEffect(()=>{!g||!S.current||(g.disconnect(),d.current=!1,g.observe(S.current))},[S,g]),Cs(()=>(a({type:wn.RegisterDroppable,element:{id:r,key:o,disabled:n,node:S,rect:f,data:C}}),()=>a({type:wn.UnregisterDroppable,key:o,id:r})),[r]),I.useEffect(()=>{n!==u.current.disabled&&(a({type:wn.SetDroppableDisabled,id:r,key:o,disabled:n}),u.current.disabled=n)},[r,o,n,a]),{active:s,rect:f,isOver:(l==null?void 0:l.id)===r,node:S,over:l,setNodeRef:w}}function kBe(e){let{animation:t,children:n}=e;const[r,i]=I.useState(null),[o,s]=I.useState(null),a=_b(n);return!n&&!r&&a&&i(a),Cs(()=>{if(!o)return;const l=r==null?void 0:r.key,c=r==null?void 0:r.props.id;if(l==null||c==null){i(null);return}Promise.resolve(t(c,o)).then(()=>{i(null)})},[t,r,o]),Q.createElement(Q.Fragment,null,n,r?I.cloneElement(r,{ref:s}):null)}const PBe={x:0,y:0,scaleX:1,scaleY:1};function IBe(e){let{children:t}=e;return Q.createElement(c0.Provider,{value:SW},Q.createElement(z2.Provider,{value:PBe},t))}const MBe={position:"fixed",touchAction:"none"},RBe=e=>sk(e)?"transform 250ms ease":void 0,OBe=I.forwardRef((e,t)=>{let{as:n,activatorEvent:r,adjustScale:i,children:o,className:s,rect:a,style:l,transform:c,transition:u=RBe}=e;if(!a)return null;const d=i?c:{...c,scaleX:1,scaleY:1},f={...MBe,width:a.width,height:a.height,top:a.top,left:a.left,transform:Xg.Transform.toString(d),transformOrigin:i&&r?CLe(r,a):void 0,transition:typeof u=="function"?u(r):u,...l};return Q.createElement(n,{className:s,style:f,ref:t},o)}),$Be=e=>t=>{let{active:n,dragOverlay:r}=t;const i={},{styles:o,className:s}=e;if(o!=null&&o.active)for(const[a,l]of Object.entries(o.active))l!==void 0&&(i[a]=n.node.style.getPropertyValue(a),n.node.style.setProperty(a,l));if(o!=null&&o.dragOverlay)for(const[a,l]of Object.entries(o.dragOverlay))l!==void 0&&r.node.style.setProperty(a,l);return s!=null&&s.active&&n.node.classList.add(s.active),s!=null&&s.dragOverlay&&r.node.classList.add(s.dragOverlay),function(){for(const[l,c]of Object.entries(i))n.node.style.setProperty(l,c);s!=null&&s.active&&n.node.classList.remove(s.active)}},NBe=e=>{let{transform:{initial:t,final:n}}=e;return[{transform:Xg.Transform.toString(t)},{transform:Xg.Transform.toString(n)}]},FBe={duration:250,easing:"ease",keyframes:NBe,sideEffects:$Be({styles:{active:{opacity:"0"}}})};function DBe(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:i}=e;return D2((o,s)=>{if(t===null)return;const a=n.get(o);if(!a)return;const l=a.node.current;if(!l)return;const c=_W(s);if(!c)return;const{transform:u}=zr(s).getComputedStyle(s),d=sW(u);if(!d)return;const f=typeof t=="function"?t:LBe(t);return hW(l,i.draggable.measure),f({active:{id:o,data:a.data,node:l,rect:i.draggable.measure(l)},draggableNodes:n,dragOverlay:{node:s,rect:i.dragOverlay.measure(c)},droppableContainers:r,measuringConfiguration:i,transform:d})})}function LBe(e){const{duration:t,easing:n,sideEffects:r,keyframes:i}={...FBe,...e};return o=>{let{active:s,dragOverlay:a,transform:l,...c}=o;if(!t)return;const u={x:a.rect.left-s.rect.left,y:a.rect.top-s.rect.top},d={scaleX:l.scaleX!==1?s.rect.width*l.scaleX/a.rect.width:1,scaleY:l.scaleY!==1?s.rect.height*l.scaleY/a.rect.height:1},f={x:l.x-u.x,y:l.y-u.y,...d},h=i({...c,active:s,dragOverlay:a,transform:{initial:l,final:f}}),[p]=h,m=h[h.length-1];if(JSON.stringify(p)===JSON.stringify(m))return;const _=r==null?void 0:r({active:s,dragOverlay:a,...c}),v=a.node.animate(h,{duration:t,easing:n,fill:"forwards"});return new Promise(y=>{v.onfinish=()=>{_==null||_(),y()}})}}let xO=0;function BBe(e){return I.useMemo(()=>{if(e!=null)return xO++,xO},[e])}const zBe=Q.memo(e=>{let{adjustScale:t=!1,children:n,dropAnimation:r,style:i,transition:o,modifiers:s,wrapperElement:a="div",className:l,zIndex:c=999}=e;const{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:h,draggableNodes:p,droppableContainers:m,dragOverlay:_,over:v,measuringConfiguration:y,scrollableAncestors:g,scrollableAncestorRects:b,windowRect:S}=EBe(),w=I.useContext(z2),C=BBe(d==null?void 0:d.id),x=wW(s,{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:h,draggingNodeRect:_.rect,over:v,overlayNodeRect:_.rect,scrollableAncestors:g,scrollableAncestorRects:b,transform:w,windowRect:S}),k=uk(f),A=DBe({config:r,draggableNodes:p,droppableContainers:m,measuringConfiguration:y}),R=k?_.setRef:void 0;return Q.createElement(IBe,null,Q.createElement(kBe,{animation:A},d&&C?Q.createElement(OBe,{key:C,id:d.id,ref:R,as:a,activatorEvent:u,adjustScale:t,className:l,transition:o,rect:k,style:{zIndex:c,...i},transform:x},n):null))}),jBe=hu([tW,JA],({nodes:e},t)=>t==="nodes"?e.viewport.zoom:1),VBe=()=>{const e=nN(jBe);return I.useCallback(({activatorEvent:n,draggingNodeRect:r,transform:i})=>{if(r&&n){const o=Kg(n);if(!o)return i;const s=o.x-r.left,a=o.y-r.top,l=i.x+s-r.width/2,c=i.y+a-r.height/2,u=i.scaleX*e,d=i.scaleY*e;return{x:l,y:c,scaleX:u,scaleY:d}}return i},[e])},UBe=e=>{if(!e.pointerCoordinates)return[];const t=document.elementsFromPoint(e.pointerCoordinates.x,e.pointerCoordinates.y),n=e.droppableContainers.filter(r=>r.node.current?t.includes(r.node.current):!1);return RLe({...e,droppableContainers:n})};function GBe(e){return ie.jsx(xBe,{...e})}const Oy=28,wO={w:Oy,h:Oy,maxW:Oy,maxH:Oy,shadow:"dark-lg",borderRadius:"lg",opacity:.3,bg:"base.800",color:"base.50",_dark:{borderColor:"base.200",bg:"base.900",color:"base.100"}},HBe=e=>{const{t}=qH();if(!e.dragData)return null;if(e.dragData.payloadType==="NODE_FIELD"){const{field:n,fieldTemplate:r}=e.dragData.payload;return ie.jsx(nb,{sx:{position:"relative",p:2,px:3,opacity:.7,bg:"base.300",borderRadius:"base",boxShadow:"dark-lg",whiteSpace:"nowrap",fontSize:"sm"},children:ie.jsx(LG,{children:n.label||r.title})})}if(e.dragData.payloadType==="IMAGE_DTO"){const{thumbnail_url:n,width:r,height:i}=e.dragData.payload.imageDTO;return ie.jsx(nb,{sx:{position:"relative",width:"full",height:"full",display:"flex",alignItems:"center",justifyContent:"center"},children:ie.jsx(OA,{sx:{...wO},objectFit:"contain",src:n,width:r,height:i})})}return e.dragData.payloadType==="IMAGE_DTOS"?ie.jsxs($A,{sx:{position:"relative",alignItems:"center",justifyContent:"center",flexDir:"column",...wO},children:[ie.jsx(W3,{children:e.dragData.payload.imageDTOs.length}),ie.jsx(W3,{size:"sm",children:t("parameters.images")})]}):null},WBe=I.memo(HBe),qBe=e=>{const[t,n]=I.useState(null),r=ue("images"),i=tN(),o=I.useCallback(d=>{r.trace({dragData:tt(d.active.data.current)},"Drag started");const f=d.active.data.current;f&&n(f)},[r]),s=I.useCallback(d=>{var h;r.trace({dragData:tt(d.active.data.current)},"Drag ended");const f=(h=d.over)==null?void 0:h.data.current;!t||!f||(i(UH({overData:f,activeData:t})),n(null))},[t,i,r]),a=fO(yW,{activationConstraint:{distance:10}}),l=fO(vW,{activationConstraint:{distance:10}}),c=xLe(a,l),u=VBe();return ie.jsxs(GBe,{onDragStart:o,onDragEnd:s,sensors:c,collisionDetection:UBe,autoScroll:!1,children:[e.children,ie.jsx(zBe,{dropAnimation:null,modifiers:[u],style:{width:"min-content",height:"min-content",cursor:"grabbing",userSelect:"none",padding:"10rem"},children:ie.jsx(PG,{children:t&&ie.jsx(AG.div,{layout:!0,initial:{opacity:0,scale:.7},animate:{opacity:1,scale:1,transition:{duration:.1}},children:ie.jsx(WBe,{dragData:t})},"overlay-drag-image")})})]})},KBe=I.memo(qBe);function pE(e){"@babel/helpers - typeof";return pE=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pE(e)}var CW=[],XBe=CW.forEach,QBe=CW.slice;function gE(e){return XBe.call(QBe.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function EW(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest>"u"?"undefined":pE(XMLHttpRequest))==="object"}function YBe(e){return!!e&&typeof e.then=="function"}function ZBe(e){return YBe(e)?e:Promise.resolve(e)}function JBe(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var mE={exports:{}},$y={exports:{}},CO;function eze(){return CO||(CO=1,function(e,t){var n=typeof globalThis<"u"&&globalThis||typeof self<"u"&&self||typeof He<"u"&&He,r=function(){function o(){this.fetch=!1,this.DOMException=n.DOMException}return o.prototype=n,new o}();(function(o){(function(s){var a=typeof o<"u"&&o||typeof self<"u"&&self||typeof a<"u"&&a,l={searchParams:"URLSearchParams"in a,iterable:"Symbol"in a&&"iterator"in Symbol,blob:"FileReader"in a&&"Blob"in a&&function(){try{return new Blob,!0}catch{return!1}}(),formData:"FormData"in a,arrayBuffer:"ArrayBuffer"in a};function c(P){return P&&DataView.prototype.isPrototypeOf(P)}if(l.arrayBuffer)var u=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],d=ArrayBuffer.isView||function(P){return P&&u.indexOf(Object.prototype.toString.call(P))>-1};function f(P){if(typeof P!="string"&&(P=String(P)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(P)||P==="")throw new TypeError('Invalid character in header field name: "'+P+'"');return P.toLowerCase()}function h(P){return typeof P!="string"&&(P=String(P)),P}function p(P){var O={next:function(){var F=P.shift();return{done:F===void 0,value:F}}};return l.iterable&&(O[Symbol.iterator]=function(){return O}),O}function m(P){this.map={},P instanceof m?P.forEach(function(O,F){this.append(F,O)},this):Array.isArray(P)?P.forEach(function(O){this.append(O[0],O[1])},this):P&&Object.getOwnPropertyNames(P).forEach(function(O){this.append(O,P[O])},this)}m.prototype.append=function(P,O){P=f(P),O=h(O);var F=this.map[P];this.map[P]=F?F+", "+O:O},m.prototype.delete=function(P){delete this.map[f(P)]},m.prototype.get=function(P){return P=f(P),this.has(P)?this.map[P]:null},m.prototype.has=function(P){return this.map.hasOwnProperty(f(P))},m.prototype.set=function(P,O){this.map[f(P)]=h(O)},m.prototype.forEach=function(P,O){for(var F in this.map)this.map.hasOwnProperty(F)&&P.call(O,this.map[F],F,this)},m.prototype.keys=function(){var P=[];return this.forEach(function(O,F){P.push(F)}),p(P)},m.prototype.values=function(){var P=[];return this.forEach(function(O){P.push(O)}),p(P)},m.prototype.entries=function(){var P=[];return this.forEach(function(O,F){P.push([F,O])}),p(P)},l.iterable&&(m.prototype[Symbol.iterator]=m.prototype.entries);function _(P){if(P.bodyUsed)return Promise.reject(new TypeError("Already read"));P.bodyUsed=!0}function v(P){return new Promise(function(O,F){P.onload=function(){O(P.result)},P.onerror=function(){F(P.error)}})}function y(P){var O=new FileReader,F=v(O);return O.readAsArrayBuffer(P),F}function g(P){var O=new FileReader,F=v(O);return O.readAsText(P),F}function b(P){for(var O=new Uint8Array(P),F=new Array(O.length),$=0;$-1?O:P}function k(P,O){if(!(this instanceof k))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');O=O||{};var F=O.body;if(P instanceof k){if(P.bodyUsed)throw new TypeError("Already read");this.url=P.url,this.credentials=P.credentials,O.headers||(this.headers=new m(P.headers)),this.method=P.method,this.mode=P.mode,this.signal=P.signal,!F&&P._bodyInit!=null&&(F=P._bodyInit,P.bodyUsed=!0)}else this.url=String(P);if(this.credentials=O.credentials||this.credentials||"same-origin",(O.headers||!this.headers)&&(this.headers=new m(O.headers)),this.method=x(O.method||this.method||"GET"),this.mode=O.mode||this.mode||null,this.signal=O.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&F)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(F),(this.method==="GET"||this.method==="HEAD")&&(O.cache==="no-store"||O.cache==="no-cache")){var $=/([?&])_=[^&]*/;if($.test(this.url))this.url=this.url.replace($,"$1_="+new Date().getTime());else{var D=/\?/;this.url+=(D.test(this.url)?"&":"?")+"_="+new Date().getTime()}}}k.prototype.clone=function(){return new k(this,{body:this._bodyInit})};function A(P){var O=new FormData;return P.trim().split("&").forEach(function(F){if(F){var $=F.split("="),D=$.shift().replace(/\+/g," "),N=$.join("=").replace(/\+/g," ");O.append(decodeURIComponent(D),decodeURIComponent(N))}}),O}function R(P){var O=new m,F=P.replace(/\r?\n[\t ]+/g," ");return F.split("\r").map(function($){return $.indexOf(` -`)===0?$.substr(1,$.length):$}).forEach(function($){var D=$.split(":"),N=D.shift().trim();if(N){var z=D.join(":").trim();O.append(N,z)}}),O}w.call(k.prototype);function L(P,O){if(!(this instanceof L))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');O||(O={}),this.type="default",this.status=O.status===void 0?200:O.status,this.ok=this.status>=200&&this.status<300,this.statusText=O.statusText===void 0?"":""+O.statusText,this.headers=new m(O.headers),this.url=O.url||"",this._initBody(P)}w.call(L.prototype),L.prototype.clone=function(){return new L(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new m(this.headers),url:this.url})},L.error=function(){var P=new L(null,{status:0,statusText:""});return P.type="error",P};var M=[301,302,303,307,308];L.redirect=function(P,O){if(M.indexOf(O)===-1)throw new RangeError("Invalid status code");return new L(null,{status:O,headers:{location:P}})},s.DOMException=a.DOMException;try{new s.DOMException}catch{s.DOMException=function(O,F){this.message=O,this.name=F;var $=Error(O);this.stack=$.stack},s.DOMException.prototype=Object.create(Error.prototype),s.DOMException.prototype.constructor=s.DOMException}function E(P,O){return new Promise(function(F,$){var D=new k(P,O);if(D.signal&&D.signal.aborted)return $(new s.DOMException("Aborted","AbortError"));var N=new XMLHttpRequest;function z(){N.abort()}N.onload=function(){var H={status:N.status,statusText:N.statusText,headers:R(N.getAllResponseHeaders()||"")};H.url="responseURL"in N?N.responseURL:H.headers.get("X-Request-URL");var X="response"in N?N.response:N.responseText;setTimeout(function(){F(new L(X,H))},0)},N.onerror=function(){setTimeout(function(){$(new TypeError("Network request failed"))},0)},N.ontimeout=function(){setTimeout(function(){$(new TypeError("Network request failed"))},0)},N.onabort=function(){setTimeout(function(){$(new s.DOMException("Aborted","AbortError"))},0)};function V(H){try{return H===""&&a.location.href?a.location.href:H}catch{return H}}N.open(D.method,V(D.url),!0),D.credentials==="include"?N.withCredentials=!0:D.credentials==="omit"&&(N.withCredentials=!1),"responseType"in N&&(l.blob?N.responseType="blob":l.arrayBuffer&&D.headers.get("Content-Type")&&D.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(N.responseType="arraybuffer")),O&&typeof O.headers=="object"&&!(O.headers instanceof m)?Object.getOwnPropertyNames(O.headers).forEach(function(H){N.setRequestHeader(H,h(O.headers[H]))}):D.headers.forEach(function(H,X){N.setRequestHeader(X,H)}),D.signal&&(D.signal.addEventListener("abort",z),N.onreadystatechange=function(){N.readyState===4&&D.signal.removeEventListener("abort",z)}),N.send(typeof D._bodyInit>"u"?null:D._bodyInit)})}return E.polyfill=!0,a.fetch||(a.fetch=E,a.Headers=m,a.Request=k,a.Response=L),s.Headers=m,s.Request=k,s.Response=L,s.fetch=E,s})({})})(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=n.fetch?n:r;t=i.fetch,t.default=i.fetch,t.fetch=i.fetch,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,e.exports=t}($y,$y.exports)),$y.exports}(function(e,t){var n;if(typeof fetch=="function"&&(typeof He<"u"&&He.fetch?n=He.fetch:typeof window<"u"&&window.fetch?n=window.fetch:n=fetch),typeof JBe<"u"&&(typeof window>"u"||typeof window.document>"u")){var r=n||eze();r.default&&(r=r.default),t.default=r,e.exports=t.default}})(mE,mE.exports);var TW=mE.exports;const AW=Ml(TW),EO=MO({__proto__:null,default:AW},[TW]);function Cb(e){"@babel/helpers - typeof";return Cb=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Cb(e)}var oa;typeof fetch=="function"&&(typeof global<"u"&&global.fetch?oa=global.fetch:typeof window<"u"&&window.fetch?oa=window.fetch:oa=fetch);var Yg;EW()&&(typeof global<"u"&&global.XMLHttpRequest?Yg=global.XMLHttpRequest:typeof window<"u"&&window.XMLHttpRequest&&(Yg=window.XMLHttpRequest));var Eb;typeof ActiveXObject=="function"&&(typeof global<"u"&&global.ActiveXObject?Eb=global.ActiveXObject:typeof window<"u"&&window.ActiveXObject&&(Eb=window.ActiveXObject));!oa&&EO&&!Yg&&!Eb&&(oa=AW||EO);typeof oa!="function"&&(oa=void 0);var yE=function(t,n){if(n&&Cb(n)==="object"){var r="";for(var i in n)r+="&"+encodeURIComponent(i)+"="+encodeURIComponent(n[i]);if(!r)return t;t=t+(t.indexOf("?")!==-1?"&":"?")+r.slice(1)}return t},TO=function(t,n,r){var i=function(s){if(!s.ok)return r(s.statusText||"Error",{status:s.status});s.text().then(function(a){r(null,{status:s.status,data:a})}).catch(r)};typeof fetch=="function"?fetch(t,n).then(i).catch(r):oa(t,n).then(i).catch(r)},AO=!1,tze=function(t,n,r,i){t.queryStringParams&&(n=yE(n,t.queryStringParams));var o=gE({},typeof t.customHeaders=="function"?t.customHeaders():t.customHeaders);typeof window>"u"&&typeof global<"u"&&typeof global.process<"u"&&global.process.versions&&global.process.versions.node&&(o["User-Agent"]="i18next-http-backend (node/".concat(global.process.version,"; ").concat(global.process.platform," ").concat(global.process.arch,")")),r&&(o["Content-Type"]="application/json");var s=typeof t.requestOptions=="function"?t.requestOptions(r):t.requestOptions,a=gE({method:r?"POST":"GET",body:r?t.stringify(r):void 0,headers:o},AO?{}:s);try{TO(n,a,i)}catch(l){if(!s||Object.keys(s).length===0||!l.message||l.message.indexOf("not implemented")<0)return i(l);try{Object.keys(s).forEach(function(c){delete a[c]}),TO(n,a,i),AO=!0}catch(c){i(c)}}},nze=function(t,n,r,i){r&&Cb(r)==="object"&&(r=yE("",r).slice(1)),t.queryStringParams&&(n=yE(n,t.queryStringParams));try{var o;Yg?o=new Yg:o=new Eb("MSXML2.XMLHTTP.3.0"),o.open(r?"POST":"GET",n,1),t.crossDomain||o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.withCredentials=!!t.withCredentials,r&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.overrideMimeType&&o.overrideMimeType("application/json");var s=t.customHeaders;if(s=typeof s=="function"?s():s,s)for(var a in s)o.setRequestHeader(a,s[a]);o.onreadystatechange=function(){o.readyState>3&&i(o.status>=400?o.statusText:null,{status:o.status,data:o.responseText})},o.send(r)}catch(l){console&&console.log(l)}},rze=function(t,n,r,i){if(typeof r=="function"&&(i=r,r=void 0),i=i||function(){},oa&&n.indexOf("file:")!==0)return tze(t,n,r,i);if(EW()||typeof ActiveXObject=="function")return nze(t,n,r,i);i(new Error("No fetch and no xhr implementation found!"))};function Zg(e){"@babel/helpers - typeof";return Zg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zg(e)}function ize(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kO(e,t){for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ize(this,e),this.services=t,this.options=n,this.allOptions=r,this.type="backend",this.init(t,n,r)}return oze(e,[{key:"init",value:function(n){var r=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=gE(i,this.options||{},lze()),this.allOptions=o,this.services&&this.options.reloadInterval&&setInterval(function(){return r.reload()},this.options.reloadInterval)}},{key:"readMulti",value:function(n,r,i){this._readAny(n,n,r,r,i)}},{key:"read",value:function(n,r,i){this._readAny([n],n,[r],r,i)}},{key:"_readAny",value:function(n,r,i,o,s){var a=this,l=this.options.loadPath;typeof this.options.loadPath=="function"&&(l=this.options.loadPath(n,i)),l=ZBe(l),l.then(function(c){if(!c)return s(null,{});var u=a.services.interpolator.interpolate(c,{lng:n.join("+"),ns:i.join("+")});a.loadUrl(u,s,r,o)})}},{key:"loadUrl",value:function(n,r,i,o){var s=this,a=typeof i=="string"?[i]:i,l=typeof o=="string"?[o]:o,c=this.options.parseLoadPayload(a,l);this.options.request(this.options,n,c,function(u,d){if(d&&(d.status>=500&&d.status<600||!d.status))return r("failed loading "+n+"; status code: "+d.status,!0);if(d&&d.status>=400&&d.status<500)return r("failed loading "+n+"; status code: "+d.status,!1);if(!d&&u&&u.message&&u.message.indexOf("Failed to fetch")>-1)return r("failed loading "+n+": "+u.message,!0);if(u)return r(u,!1);var f,h;try{typeof d.data=="string"?f=s.options.parse(d.data,i,o):f=d.data}catch{h="failed parsing "+n+" to json"}if(h)return r(h,!1);r(null,f)})}},{key:"create",value:function(n,r,i,o,s){var a=this;if(this.options.addPath){typeof n=="string"&&(n=[n]);var l=this.options.parsePayload(r,i,o),c=0,u=[],d=[];n.forEach(function(f){var h=a.options.addPath;typeof a.options.addPath=="function"&&(h=a.options.addPath(f,r));var p=a.services.interpolator.interpolate(h,{lng:f,ns:r});a.options.request(a.options,p,l,function(m,_){c+=1,u.push(m),d.push(_),c===n.length&&typeof s=="function"&&s(u,d)})})}}},{key:"reload",value:function(){var n=this,r=this.services,i=r.backendConnector,o=r.languageUtils,s=r.logger,a=i.language;if(!(a&&a.toLowerCase()==="cimode")){var l=[],c=function(d){var f=o.toResolveHierarchy(d);f.forEach(function(h){l.indexOf(h)<0&&l.push(h)})};c(a),this.allOptions.preload&&this.allOptions.preload.forEach(function(u){return c(u)}),l.forEach(function(u){n.allOptions.ns.forEach(function(d){i.read(u,d,"read",null,null,function(f,h){f&&s.warn("loading namespace ".concat(d," for language ").concat(u," failed"),f),!f&&h&&s.log("loaded namespace ".concat(d," for language ").concat(u),h),i.loaded("".concat(u,"|").concat(d),f,h)})})})}}}]),e}();PW.type="backend";Oe.use(PW).use(UNe).init({fallbackLng:"en",debug:!1,backend:{loadPath:"/locales/{{lng}}.json"},interpolation:{escapeValue:!1},returnNull:!1});const cze=I.lazy(()=>H$(()=>import("./App-0865fac0.js"),["./App-0865fac0.js","./MantineProvider-11ad6165.js","./App-6125620a.css"],import.meta.url)),uze=I.lazy(()=>H$(()=>import("./ThemeLocaleProvider-5513dc99.js"),["./ThemeLocaleProvider-5513dc99.js","./MantineProvider-11ad6165.js","./ThemeLocaleProvider-0667edb8.css"],import.meta.url)),dze=({apiUrl:e,token:t,config:n,headerComponent:r,middleware:i,projectId:o,queueId:s,selectedImage:a,customStarUi:l,socketOptions:c,isDebugging:u=!1})=>{I.useEffect(()=>(t&&Qv.set(t),e&&Yv.set(e),o&&F5.set(o),s&&In.set(s),Xj(),i&&i.length>0&&Kj(...i),()=>{Yv.set(void 0),Qv.set(void 0),F5.set(void 0),In.set(rN)}),[e,t,i,o,s]),I.useEffect(()=>(l&&Y6.set(l),()=>{Y6.set(void 0)}),[l]),I.useEffect(()=>(r&&Z6.set(r),()=>{Z6.set(void 0)}),[r]),I.useEffect(()=>(c&&g1.set(c),()=>{g1.set({})}),[c]),I.useEffect(()=>(u&&Zv.set(u),()=>{Zv.set(!1)}),[u]);const d=I.useMemo(()=>oLe(o),[o]);return I.useEffect(()=>{MD.set(d)},[d]),ie.jsx(Q.StrictMode,{children:ie.jsx(nQ,{store:d,children:ie.jsx(Q.Suspense,{fallback:ie.jsx(lLe,{}),children:ie.jsx(uze,{children:ie.jsx(KBe,{children:ie.jsx(cze,{config:n,selectedImage:a})})})})})})},fze=I.memo(dze);mC.createRoot(document.getElementById("root")).render(ie.jsx(fze,{}));export{FSe as $,nHe as A,OT as B,Mi as C,ie as D,WSe as E,PWe as F,O6e as G,Hm as H,e0 as I,or as J,Dl as K,eTe as L,SWe as M,vWe as N,PG as O,oye as P,AG as Q,Q as R,ig as S,R4e as T,Wm as U,IA as V,Km as W,bWe as X,_We as Y,j1 as Z,n9 as _,MN as a,WUe as a$,xWe as a0,us as a1,Ml as a2,z1 as a3,rU as a4,EWe as a5,D4e as a6,ys as a7,_V as a8,CS as a9,YT as aA,hV as aB,CSe as aC,gi as aD,Ev as aE,ES as aF,XHe as aG,kUe as aH,qUe as aI,KUe as aJ,CUe as aK,xUe as aL,LG as aM,Gu as aN,G8e as aO,HG as aP,gze as aQ,EUe as aR,fT as aS,ek as aT,uWe as aU,OA as aV,sLe as aW,cWe as aX,uO as aY,Oe as aZ,FUe as a_,rPe as aa,FG as ab,wWe as ac,Ae as ad,yWe as ae,CWe as af,hu as ag,tW as ah,nN as ai,NUe as aj,Sm as ak,AL as al,eB as am,B_ as an,ue as ao,tN as ap,yze as aq,Ve as ar,pi as as,qH as at,nb as au,$A as av,W3 as aw,JA as ax,HUe as ay,pSe as az,e_ as b,Kle as b$,hVe as b0,hae as b1,dT as b2,Dze as b3,iWe as b4,bze as b5,dWe as b6,vze as b7,Sze as b8,Zoe as b9,el as bA,B0 as bB,sGe as bC,iGe as bD,oGe as bE,VH as bF,ce as bG,Qe as bH,K0 as bI,Ot as bJ,$X as bK,ps as bL,LUe as bM,pze as bN,Ox as bO,Y6 as bP,tGe as bQ,nGe as bR,wUe as bS,hue as bT,Qv as bU,rMe as bV,he as bW,Lze as bX,Bze as bY,zze as bZ,jze as b_,Joe as ba,tWe as bb,rWe as bc,_ze as bd,sWe as be,xze as bf,mze as bg,$Ue as bh,IWe as bi,OUe as bj,Sc as bk,eGe as bl,JUe as bm,MUe as bn,lGe as bo,aqe as bp,sqe as bq,ul as br,J as bs,rGe as bt,aGe as bu,PUe as bv,IUe as bw,BUe as bx,vp as by,RUe as bz,eJ as c,mWe as c$,yje as c0,BHe as c1,zHe as c2,Wze as c3,Cje as c4,Uze as c5,dje as c6,Gze as c7,fje as c8,Xze as c9,Jse as cA,cae as cB,zWe as cC,eO as cD,eae as cE,BWe as cF,eje as cG,JR as cH,tae as cI,T$e as cJ,Qze as cK,V8 as cL,UHe as cM,GHe as cN,HHe as cO,oje as cP,WHe as cQ,sje as cR,qHe as cS,aje as cT,KHe as cU,fGe as cV,VUe as cW,nhe as cX,zUe as cY,Gj as cZ,wL as c_,A$e as ca,Hze as cb,vje as cc,Yze as cd,nL as ce,Vze as cf,Pje as cg,qze as ch,oI as ci,Kze as cj,sI as ck,nje as cl,pje as cm,ije as cn,zje as co,jje as cp,rje as cq,Vje as cr,jWe as cs,Zze as ct,YR as cu,hGe as cv,LWe as cw,Jze as cx,ZR as cy,hc as cz,Bie as d,rbe as d$,DUe as d0,_g as d1,iB as d2,Q5 as d3,Id as d4,uu as d5,gje as d6,yVe as d7,uVe as d8,nVe as d9,hHe as dA,vGe as dB,eHe as dC,JGe as dD,N4 as dE,J1e as dF,mGe as dG,W1e as dH,q1e as dI,K1e as dJ,Lle as dK,X1e as dL,$ze as dM,Q1e as dN,Ble as dO,Y1e as dP,Um as dQ,Dle as dR,ebe as dS,g_ as dT,ZWe as dU,DWe as dV,rqe as dW,FWe as dX,tbe as dY,nbe as dZ,iqe as d_,rVe as da,lVe as db,Sn as dc,$T as dd,Fo as de,As as df,hi as dg,aVe as dh,lje as di,YA as dj,cVe as dk,lWe as dl,jF as dm,dbe as dn,tHe as dp,ube as dq,tk as dr,kHe as ds,MHe as dt,$He as du,OHe as dv,PHe as dw,IHe as dx,RHe as dy,c$e as dz,RF as e,CI as e$,nqe as e0,ibe as e1,obe as e2,zle as e3,Z1e as e4,JD as e5,UWe as e6,sbe as e7,EGe as e8,TGe as e9,Che as eA,$Ge as eB,DGe as eC,LGe as eD,YGe as eE,ZGe as eF,AHe as eG,mue as eH,yue as eI,TUe as eJ,uGe as eK,dGe as eL,sB as eM,cGe as eN,c_ as eO,Uje as eP,Dje as eQ,Lje as eR,Bje as eS,yae as eT,li as eU,tI as eV,Pze as eW,YUe as eX,XUe as eY,QUe as eZ,Nl as e_,AGe as ea,kGe as eb,SGe as ec,xGe as ed,wGe as ee,CGe as ef,PGe as eg,IGe as eh,vT as ei,MGe as ej,RGe as ek,OGe as el,NGe as em,FGe as en,BGe as eo,zGe as ep,jGe as eq,VGe as er,UGe as es,GGe as et,HGe as eu,WGe as ev,qGe as ew,KGe as ex,XGe as ey,QGe as ez,DN as f,WWe as f$,dae as f0,nI as f1,eMe as f2,J8e as f3,Ize as f4,Mze as f5,h_ as f6,Rze as f7,fae as f8,Oze as f9,Sje as fA,xje as fB,wje as fC,bje as fD,_je as fE,qle as fF,Rje as fG,Mje as fH,NVe as fI,Zje as fJ,vUe as fK,FVe as fL,Nje as fM,$je as fN,Fje as fO,oT as fP,dVe as fQ,LHe as fR,oqe as fS,QNe as fT,ZHe as fU,tje as fV,jUe as fW,NWe as fX,eqe as fY,qWe as fZ,gGe as f_,kze as fa,Aze as fb,Q4 as fc,lae as fd,iae as fe,oae as ff,nae as fg,rae as fh,sae as fi,aae as fj,Eze as fk,VWe as fl,jHe as fm,ZD as fn,xbe as fo,PNe as fp,Hje as fq,Xle as fr,Gje as fs,Or as ft,hje as fu,Tje as fv,vae as fw,mp as fx,kje as fy,VHe as fz,WN as g,Rj as g$,tqe as g0,JWe as g1,pGe as g2,XWe as g3,KWe as g4,GWe as g5,YWe as g6,Fze as g7,HWe as g8,QWe as g9,rFe as gA,bbe as gB,bGe as gC,pbe as gD,fbe as gE,U1e as gF,uHe as gG,j1e as gH,z1e as gI,G1e as gJ,Oj as gK,vHe as gL,yHe as gM,THe as gN,ZNe as gO,V1e as gP,dHe as gQ,mbe as gR,bHe as gS,mHe as gT,gbe as gU,Gve as gV,gHe as gW,wHe as gX,rhe as gY,Lo as gZ,Ir as g_,Nze as ga,cB as gb,aj as gc,yGe as gd,aFe as ge,abe as gf,aHe as gg,lHe as gh,B1e as gi,L8 as gj,_Ge as gk,zz as gl,Vm as gm,rHe as gn,gc as go,pHe as gp,aWe as gq,ihe as gr,Y$ as gs,eNe as gt,lbe as gu,hbe as gv,iHe as gw,cbe as gx,D1 as gy,Te as gz,a_ as h,WVe as h$,NHe as h0,DHe as h1,kg as h2,Cl as h3,EHe as h4,SHe as h5,CHe as h6,xHe as h7,_He as h8,_j as h9,AVe as hA,Kje as hB,qje as hC,Wje as hD,hUe as hE,KG as hF,kq as hG,Ue as hH,Ooe as hI,fp as hJ,p1 as hK,rL as hL,Jle as hM,Jje as hN,eVe as hO,tVe as hP,uUe as hQ,PVe as hR,kVe as hS,rue as hT,cUe as hU,Z8e as hV,iue as hW,QA as hX,b7e as hY,OVe as hZ,KVe as h_,gWe as ha,fWe as hb,hWe as hc,pWe as hd,vVe as he,sVe as hf,pVe as hg,mVe as hh,pc as hi,qVe as hj,fUe as hk,dUe as hl,MVe as hm,nUe as hn,pUe as ho,tMe as hp,CVe as hq,VVe as hr,Ih as hs,BVe as ht,EVe as hu,LS as hv,jVe as hw,SVe as hx,zVe as hy,xVe as hz,Oie as i,UVe as i0,Xje as i1,Qje as i2,SUe as i3,RWe as i4,MWe as i5,XVe as i6,K8e as i7,tUe as i8,QVe as i9,wze as iA,qse as iB,L_e as iC,Z6 as iD,vV as iE,JT as iF,ds as iG,S4e as iH,X4e as iI,TWe as iJ,zSe as iK,kWe as iL,$6e as iM,j8e as iN,V8e as iO,$Se as iP,IVe as ia,wVe as ib,lUe as ic,aUe as id,JVe as ie,YVe as ig,ZVe as ih,bUe as ii,oUe as ij,_Ue as ik,_Ve as il,bVe as im,LVe as io,DVe as ip,yUe as iq,Y8e as ir,q8e as is,X8e as it,Q8e as iu,Yje as iv,RVe as iw,$We as ix,QHe as iy,YHe as iz,bn as j,hne as k,s_ as l,Mf as m,Qc as n,EF as o,ioe as p,no as q,I as r,Dd as s,Gn as t,rn as u,xo as v,ti as w,dl as x,Jo as y,nye as z}; diff --git a/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 b/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 deleted file mode 100644 index a61a0be57fbc830196e18e6c35fdf7ae5f59274e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27284 zcmV(_K-9l?Pew8T0RR910BV!~6951J0M0l70BR)w0RR9100000000000000000000 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 CAH|aZ diff --git a/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 b/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 deleted file mode 100644 index eb38b38ea077b5d58f9c998955e33c8974eb527f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22480 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 diff --git a/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 b/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 deleted file mode 100644 index 3df865d7f007da9783223387e875bfc1b6f48c0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79940 zcmV)YK&-!aPew8T0RR910XRee6951J0?Hf!0XNYA0RR9100000000000000000000 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

lPo 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 uSC)aGdS)4Xj0pe` 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 Ang9R* diff --git a/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 b/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 deleted file mode 100644 index ce21ca172eabc84c2ad452ae1e254ad6ba5c30c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10540 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 dk(7PGKf - - - - - - - - InvokeAI - A Stable Diffusion Toolkit - - - - - - -

- - - diff --git a/invokeai/frontend/web/dist/locales/ar.json b/invokeai/frontend/web/dist/locales/ar.json deleted file mode 100644 index 7354b21ea0..0000000000 --- a/invokeai/frontend/web/dist/locales/ar.json +++ /dev/null @@ -1,504 +0,0 @@ -{ - "common": { - "hotkeysLabel": "مفاتيح الأختصار", - "languagePickerLabel": "منتقي اللغة", - "reportBugLabel": "بلغ عن خطأ", - "settingsLabel": "إعدادات", - "img2img": "صورة إلى صورة", - "unifiedCanvas": "لوحة موحدة", - "nodes": "عقد", - "langArabic": "العربية", - "nodesDesc": "نظام مبني على العقد لإنتاج الصور قيد التطوير حاليًا. تبقى على اتصال مع تحديثات حول هذه الميزة المذهلة.", - "postProcessing": "معالجة بعد الإصدار", - "postProcessDesc1": "Invoke AI توفر مجموعة واسعة من ميزات المعالجة بعد الإصدار. تحسين الصور واستعادة الوجوه متاحين بالفعل في واجهة الويب. يمكنك الوصول إليهم من الخيارات المتقدمة في قائمة الخيارات في علامة التبويب Text To Image و Image To Image. يمكن أيضًا معالجة الصور مباشرةً باستخدام أزرار الإجراء على الصورة فوق عرض الصورة الحالي أو في العارض.", - "postProcessDesc2": "سيتم إصدار واجهة رسومية مخصصة قريبًا لتسهيل عمليات المعالجة بعد الإصدار المتقدمة.", - "postProcessDesc3": "واجهة سطر الأوامر Invoke AI توفر ميزات أخرى عديدة بما في ذلك Embiggen.", - "training": "تدريب", - "trainingDesc1": "تدفق خاص مخصص لتدريب تضميناتك الخاصة ونقاط التحقق باستخدام العكس النصي و دريم بوث من واجهة الويب.", - "trainingDesc2": " استحضر الذكاء الصناعي يدعم بالفعل تدريب تضمينات مخصصة باستخدام العكس النصي باستخدام السكريبت الرئيسي.", - "upload": "رفع", - "close": "إغلاق", - "load": "تحميل", - "back": "الى الخلف", - "statusConnected": "متصل", - "statusDisconnected": "غير متصل", - "statusError": "خطأ", - "statusPreparing": "جاري التحضير", - "statusProcessingCanceled": "تم إلغاء المعالجة", - "statusProcessingComplete": "اكتمال المعالجة", - "statusGenerating": "جاري التوليد", - "statusGeneratingTextToImage": "جاري توليد النص إلى الصورة", - "statusGeneratingImageToImage": "جاري توليد الصورة إلى الصورة", - "statusGeneratingInpainting": "جاري توليد Inpainting", - "statusGeneratingOutpainting": "جاري توليد Outpainting", - "statusGenerationComplete": "اكتمال التوليد", - "statusIterationComplete": "اكتمال التكرار", - "statusSavingImage": "جاري حفظ الصورة", - "statusRestoringFaces": "جاري استعادة الوجوه", - "statusRestoringFacesGFPGAN": "تحسيت الوجوه (جي إف بي جان)", - "statusRestoringFacesCodeFormer": "تحسين الوجوه (كود فورمر)", - "statusUpscaling": "تحسين الحجم", - "statusUpscalingESRGAN": "تحسين الحجم (إي إس آر جان)", - "statusLoadingModel": "تحميل النموذج", - "statusModelChanged": "تغير النموذج" - }, - "gallery": { - "generations": "الأجيال", - "showGenerations": "عرض الأجيال", - "uploads": "التحميلات", - "showUploads": "عرض التحميلات", - "galleryImageSize": "حجم الصورة", - "galleryImageResetSize": "إعادة ضبط الحجم", - "gallerySettings": "إعدادات المعرض", - "maintainAspectRatio": "الحفاظ على نسبة الأبعاد", - "autoSwitchNewImages": "التبديل التلقائي إلى الصور الجديدة", - "singleColumnLayout": "تخطيط عمود واحد", - "allImagesLoaded": "تم تحميل جميع الصور", - "loadMore": "تحميل المزيد", - "noImagesInGallery": "لا توجد صور في المعرض" - }, - "hotkeys": { - "keyboardShortcuts": "مفاتيح الأزرار المختصرة", - "appHotkeys": "مفاتيح التطبيق", - "generalHotkeys": "مفاتيح عامة", - "galleryHotkeys": "مفاتيح المعرض", - "unifiedCanvasHotkeys": "مفاتيح اللوحةالموحدة ", - "invoke": { - "title": "أدعو", - "desc": "إنشاء صورة" - }, - "cancel": { - "title": "إلغاء", - "desc": "إلغاء إنشاء الصورة" - }, - "focusPrompt": { - "title": "تركيز الإشعار", - "desc": "تركيز منطقة الإدخال الإشعار" - }, - "toggleOptions": { - "title": "تبديل الخيارات", - "desc": "فتح وإغلاق لوحة الخيارات" - }, - "pinOptions": { - "title": "خيارات التثبيت", - "desc": "ثبت لوحة الخيارات" - }, - "toggleViewer": { - "title": "تبديل العارض", - "desc": "فتح وإغلاق مشاهد الصور" - }, - "toggleGallery": { - "title": "تبديل المعرض", - "desc": "فتح وإغلاق درابزين المعرض" - }, - "maximizeWorkSpace": { - "title": "تكبير مساحة العمل", - "desc": "إغلاق اللوحات وتكبير مساحة العمل" - }, - "changeTabs": { - "title": "تغيير الألسنة", - "desc": "التبديل إلى مساحة عمل أخرى" - }, - "consoleToggle": { - "title": "تبديل الطرفية", - "desc": "فتح وإغلاق الطرفية" - }, - "setPrompt": { - "title": "ضبط التشعب", - "desc": "استخدم تشعب الصورة الحالية" - }, - "setSeed": { - "title": "ضبط البذور", - "desc": "استخدم بذور الصورة الحالية" - }, - "setParameters": { - "title": "ضبط المعلمات", - "desc": "استخدم جميع المعلمات الخاصة بالصورة الحالية" - }, - "restoreFaces": { - "title": "استعادة الوجوه", - "desc": "استعادة الصورة الحالية" - }, - "upscale": { - "title": "تحسين الحجم", - "desc": "تحسين حجم الصورة الحالية" - }, - "showInfo": { - "title": "عرض المعلومات", - "desc": "عرض معلومات البيانات الخاصة بالصورة الحالية" - }, - "sendToImageToImage": { - "title": "أرسل إلى صورة إلى صورة", - "desc": "أرسل الصورة الحالية إلى صورة إلى صورة" - }, - "deleteImage": { - "title": "حذف الصورة", - "desc": "حذف الصورة الحالية" - }, - "closePanels": { - "title": "أغلق اللوحات", - "desc": "يغلق اللوحات المفتوحة" - }, - "previousImage": { - "title": "الصورة السابقة", - "desc": "عرض الصورة السابقة في الصالة" - }, - "nextImage": { - "title": "الصورة التالية", - "desc": "عرض الصورة التالية في الصالة" - }, - "toggleGalleryPin": { - "title": "تبديل تثبيت الصالة", - "desc": "يثبت ويفتح تثبيت الصالة على الواجهة الرسومية" - }, - "increaseGalleryThumbSize": { - "title": "زيادة حجم صورة الصالة", - "desc": "يزيد حجم الصور المصغرة في الصالة" - }, - "decreaseGalleryThumbSize": { - "title": "انقاص حجم صورة الصالة", - "desc": "ينقص حجم الصور المصغرة في الصالة" - }, - "selectBrush": { - "title": "تحديد الفرشاة", - "desc": "يحدد الفرشاة على اللوحة" - }, - "selectEraser": { - "title": "تحديد الممحاة", - "desc": "يحدد الممحاة على اللوحة" - }, - "decreaseBrushSize": { - "title": "تصغير حجم الفرشاة", - "desc": "يصغر حجم الفرشاة/الممحاة على اللوحة" - }, - "increaseBrushSize": { - "title": "زيادة حجم الفرشاة", - "desc": "يزيد حجم فرشة اللوحة / الممحاة" - }, - "decreaseBrushOpacity": { - "title": "تخفيض شفافية الفرشاة", - "desc": "يخفض شفافية فرشة اللوحة" - }, - "increaseBrushOpacity": { - "title": "زيادة شفافية الفرشاة", - "desc": "يزيد شفافية فرشة اللوحة" - }, - "moveTool": { - "title": "أداة التحريك", - "desc": "يتيح التحرك في اللوحة" - }, - "fillBoundingBox": { - "title": "ملء الصندوق المحدد", - "desc": "يملأ الصندوق المحدد بلون الفرشاة" - }, - "eraseBoundingBox": { - "title": "محو الصندوق المحدد", - "desc": "يمحو منطقة الصندوق المحدد" - }, - "colorPicker": { - "title": "اختيار منتقي اللون", - "desc": "يختار منتقي اللون الخاص باللوحة" - }, - "toggleSnap": { - "title": "تبديل التأكيد", - "desc": "يبديل تأكيد الشبكة" - }, - "quickToggleMove": { - "title": "تبديل سريع للتحريك", - "desc": "يبديل مؤقتا وضع التحريك" - }, - "toggleLayer": { - "title": "تبديل الطبقة", - "desc": "يبديل إختيار الطبقة القناع / الأساسية" - }, - "clearMask": { - "title": "مسح القناع", - "desc": "مسح القناع بأكمله" - }, - "hideMask": { - "title": "إخفاء الكمامة", - "desc": "إخفاء وإظهار الكمامة" - }, - "showHideBoundingBox": { - "title": "إظهار / إخفاء علبة التحديد", - "desc": "تبديل ظهور علبة التحديد" - }, - "mergeVisible": { - "title": "دمج الطبقات الظاهرة", - "desc": "دمج جميع الطبقات الظاهرة في اللوحة" - }, - "saveToGallery": { - "title": "حفظ إلى صالة الأزياء", - "desc": "حفظ اللوحة الحالية إلى صالة الأزياء" - }, - "copyToClipboard": { - "title": "نسخ إلى الحافظة", - "desc": "نسخ اللوحة الحالية إلى الحافظة" - }, - "downloadImage": { - "title": "تنزيل الصورة", - "desc": "تنزيل اللوحة الحالية" - }, - "undoStroke": { - "title": "تراجع عن الخط", - "desc": "تراجع عن خط الفرشاة" - }, - "redoStroke": { - "title": "إعادة الخط", - "desc": "إعادة خط الفرشاة" - }, - "resetView": { - "title": "إعادة تعيين العرض", - "desc": "إعادة تعيين عرض اللوحة" - }, - "previousStagingImage": { - "title": "الصورة السابقة في المرحلة التجريبية", - "desc": "الصورة السابقة في منطقة المرحلة التجريبية" - }, - "nextStagingImage": { - "title": "الصورة التالية في المرحلة التجريبية", - "desc": "الصورة التالية في منطقة المرحلة التجريبية" - }, - "acceptStagingImage": { - "title": "قبول الصورة في المرحلة التجريبية", - "desc": "قبول الصورة الحالية في منطقة المرحلة التجريبية" - } - }, - "modelManager": { - "modelManager": "مدير النموذج", - "model": "نموذج", - "allModels": "جميع النماذج", - "checkpointModels": "نقاط التحقق", - "diffusersModels": "المصادر المتعددة", - "safetensorModels": "التنسورات الآمنة", - "modelAdded": "تمت إضافة النموذج", - "modelUpdated": "تم تحديث النموذج", - "modelEntryDeleted": "تم حذف مدخل النموذج", - "cannotUseSpaces": "لا يمكن استخدام المساحات", - "addNew": "إضافة جديد", - "addNewModel": "إضافة نموذج جديد", - "addCheckpointModel": "إضافة نقطة تحقق / نموذج التنسور الآمن", - "addDiffuserModel": "إضافة مصادر متعددة", - "addManually": "إضافة يدويًا", - "manual": "يدوي", - "name": "الاسم", - "nameValidationMsg": "أدخل اسما لنموذجك", - "description": "الوصف", - "descriptionValidationMsg": "أضف وصفا لنموذجك", - "config": "تكوين", - "configValidationMsg": "مسار الملف الإعدادي لنموذجك.", - "modelLocation": "موقع النموذج", - "modelLocationValidationMsg": "موقع النموذج على الجهاز الخاص بك.", - "repo_id": "معرف المستودع", - "repoIDValidationMsg": "المستودع الإلكتروني لنموذجك", - "vaeLocation": "موقع فاي إي", - "vaeLocationValidationMsg": "موقع فاي إي على الجهاز الخاص بك.", - "vaeRepoID": "معرف مستودع فاي إي", - "vaeRepoIDValidationMsg": "المستودع الإلكتروني فاي إي", - "width": "عرض", - "widthValidationMsg": "عرض افتراضي لنموذجك.", - "height": "ارتفاع", - "heightValidationMsg": "ارتفاع افتراضي لنموذجك.", - "addModel": "أضف نموذج", - "updateModel": "تحديث النموذج", - "availableModels": "النماذج المتاحة", - "search": "بحث", - "load": "تحميل", - "active": "نشط", - "notLoaded": "غير محمل", - "cached": "مخبأ", - "checkpointFolder": "مجلد التدقيق", - "clearCheckpointFolder": "مسح مجلد التدقيق", - "findModels": "إيجاد النماذج", - "scanAgain": "فحص مرة أخرى", - "modelsFound": "النماذج الموجودة", - "selectFolder": "حدد المجلد", - "selected": "تم التحديد", - "selectAll": "حدد الكل", - "deselectAll": "إلغاء تحديد الكل", - "showExisting": "إظهار الموجود", - "addSelected": "أضف المحدد", - "modelExists": "النموذج موجود", - "selectAndAdd": "حدد وأضف النماذج المدرجة أدناه", - "noModelsFound": "لم يتم العثور على نماذج", - "delete": "حذف", - "deleteModel": "حذف النموذج", - "deleteConfig": "حذف التكوين", - "deleteMsg1": "هل أنت متأكد من رغبتك في حذف إدخال النموذج هذا من استحضر الذكاء الصناعي", - "deleteMsg2": "هذا لن يحذف ملف نقطة التحكم للنموذج من القرص الخاص بك. يمكنك إعادة إضافتهم إذا كنت ترغب في ذلك.", - "formMessageDiffusersModelLocation": "موقع النموذج للمصعد", - "formMessageDiffusersModelLocationDesc": "يرجى إدخال واحد على الأقل.", - "formMessageDiffusersVAELocation": "موقع فاي إي", - "formMessageDiffusersVAELocationDesc": "إذا لم يتم توفيره، سيبحث استحضر الذكاء الصناعي عن ملف فاي إي داخل موقع النموذج المعطى أعلاه." - }, - "parameters": { - "images": "الصور", - "steps": "الخطوات", - "cfgScale": "مقياس الإعداد الذاتي للجملة", - "width": "عرض", - "height": "ارتفاع", - "seed": "بذرة", - "randomizeSeed": "تبديل بذرة", - "shuffle": "تشغيل", - "noiseThreshold": "عتبة الضوضاء", - "perlinNoise": "ضجيج برلين", - "variations": "تباينات", - "variationAmount": "كمية التباين", - "seedWeights": "أوزان البذور", - "faceRestoration": "استعادة الوجه", - "restoreFaces": "استعادة الوجوه", - "type": "نوع", - "strength": "قوة", - "upscaling": "تصغير", - "upscale": "تصغير", - "upscaleImage": "تصغير الصورة", - "scale": "مقياس", - "otherOptions": "خيارات أخرى", - "seamlessTiling": "تجهيز بلاستيكي بدون تشققات", - "hiresOptim": "تحسين الدقة العالية", - "imageFit": "ملائمة الصورة الأولية لحجم الخرج", - "codeformerFidelity": "الوثوقية", - "scaleBeforeProcessing": "تحجيم قبل المعالجة", - "scaledWidth": "العرض المحجوب", - "scaledHeight": "الارتفاع المحجوب", - "infillMethod": "طريقة التعبئة", - "tileSize": "حجم البلاطة", - "boundingBoxHeader": "صندوق التحديد", - "seamCorrectionHeader": "تصحيح التشقق", - "infillScalingHeader": "التعبئة والتحجيم", - "img2imgStrength": "قوة صورة إلى صورة", - "toggleLoopback": "تبديل الإعادة", - "sendTo": "أرسل إلى", - "sendToImg2Img": "أرسل إلى صورة إلى صورة", - "sendToUnifiedCanvas": "أرسل إلى الخطوط الموحدة", - "copyImage": "نسخ الصورة", - "copyImageToLink": "نسخ الصورة إلى الرابط", - "downloadImage": "تحميل الصورة", - "openInViewer": "فتح في العارض", - "closeViewer": "إغلاق العارض", - "usePrompt": "استخدم المحث", - "useSeed": "استخدام البذور", - "useAll": "استخدام الكل", - "useInitImg": "استخدام الصورة الأولية", - "info": "معلومات", - "initialImage": "الصورة الأولية", - "showOptionsPanel": "إظهار لوحة الخيارات" - }, - "settings": { - "models": "موديلات", - "displayInProgress": "عرض الصور المؤرشفة", - "saveSteps": "حفظ الصور كل n خطوات", - "confirmOnDelete": "تأكيد عند الحذف", - "displayHelpIcons": "عرض أيقونات المساعدة", - "enableImageDebugging": "تمكين التصحيح عند التصوير", - "resetWebUI": "إعادة تعيين واجهة الويب", - "resetWebUIDesc1": "إعادة تعيين واجهة الويب يعيد فقط ذاكرة التخزين المؤقت للمتصفح لصورك وإعداداتك المذكورة. لا يحذف أي صور من القرص.", - "resetWebUIDesc2": "إذا لم تظهر الصور في الصالة أو إذا كان شيء آخر غير ناجح، يرجى المحاولة إعادة تعيين قبل تقديم مشكلة على جيت هب.", - "resetComplete": "تم إعادة تعيين واجهة الويب. تحديث الصفحة لإعادة التحميل." - }, - "toast": { - "tempFoldersEmptied": "تم تفريغ مجلد المؤقت", - "uploadFailed": "فشل التحميل", - "uploadFailedUnableToLoadDesc": "تعذر تحميل الملف", - "downloadImageStarted": "بدأ تنزيل الصورة", - "imageCopied": "تم نسخ الصورة", - "imageLinkCopied": "تم نسخ رابط الصورة", - "imageNotLoaded": "لم يتم تحميل أي صورة", - "imageNotLoadedDesc": "لم يتم العثور على صورة لإرسالها إلى وحدة الصورة", - "imageSavedToGallery": "تم حفظ الصورة في المعرض", - "canvasMerged": "تم دمج الخط", - "sentToImageToImage": "تم إرسال إلى صورة إلى صورة", - "sentToUnifiedCanvas": "تم إرسال إلى لوحة موحدة", - "parametersSet": "تم تعيين المعلمات", - "parametersNotSet": "لم يتم تعيين المعلمات", - "parametersNotSetDesc": "لم يتم العثور على معلمات بيانية لهذه الصورة.", - "parametersFailed": "حدث مشكلة في تحميل المعلمات", - "parametersFailedDesc": "تعذر تحميل صورة البدء.", - "seedSet": "تم تعيين البذرة", - "seedNotSet": "لم يتم تعيين البذرة", - "seedNotSetDesc": "تعذر العثور على البذرة لهذه الصورة.", - "promptSet": "تم تعيين الإشعار", - "promptNotSet": "Prompt Not Set", - "promptNotSetDesc": "تعذر العثور على الإشعار لهذه الصورة.", - "upscalingFailed": "فشل التحسين", - "faceRestoreFailed": "فشل استعادة الوجه", - "metadataLoadFailed": "فشل تحميل البيانات الوصفية", - "initialImageSet": "تم تعيين الصورة الأولية", - "initialImageNotSet": "لم يتم تعيين الصورة الأولية", - "initialImageNotSetDesc": "تعذر تحميل الصورة الأولية" - }, - "tooltip": { - "feature": { - "prompt": "هذا هو حقل التحذير. يشمل التحذير عناصر الإنتاج والمصطلحات الأسلوبية. يمكنك إضافة الأوزان (أهمية الرمز) في التحذير أيضًا، ولكن أوامر CLI والمعلمات لن تعمل.", - "gallery": "تعرض Gallery منتجات من مجلد الإخراج عندما يتم إنشاؤها. تخزن الإعدادات داخل الملفات ويتم الوصول إليها عن طريق قائمة السياق.", - "other": "ستمكن هذه الخيارات من وضع عمليات معالجة بديلة لـاستحضر الذكاء الصناعي. سيؤدي 'الزخرفة بلا جدران' إلى إنشاء أنماط تكرارية في الإخراج. 'دقة عالية' هي الإنتاج خلال خطوتين عبر صورة إلى صورة: استخدم هذا الإعداد عندما ترغب في توليد صورة أكبر وأكثر تجانبًا دون العيوب. ستستغرق الأشياء وقتًا أطول من نص إلى صورة المعتاد.", - "seed": "يؤثر قيمة البذور على الضوضاء الأولي الذي يتم تكوين الصورة منه. يمكنك استخدام البذور الخاصة بالصور السابقة. 'عتبة الضوضاء' يتم استخدامها لتخفيف العناصر الخللية في قيم CFG العالية (جرب مدى 0-10), و Perlin لإضافة ضوضاء Perlin أثناء الإنتاج: كلا منهما يعملان على إضافة التنوع إلى النتائج الخاصة بك.", - "variations": "جرب التغيير مع قيمة بين 0.1 و 1.0 لتغيير النتائج لبذور معينة. التغييرات المثيرة للاهتمام للبذور تكون بين 0.1 و 0.3.", - "upscale": "استخدم إي إس آر جان لتكبير الصورة على الفور بعد الإنتاج.", - "faceCorrection": "تصحيح الوجه باستخدام جي إف بي جان أو كود فورمر: يكتشف الخوارزمية الوجوه في الصورة وتصحح أي عيوب. قيمة عالية ستغير الصورة أكثر، مما يؤدي إلى وجوه أكثر جمالا. كود فورمر بدقة أعلى يحتفظ بالصورة الأصلية على حساب تصحيح وجه أكثر قوة.", - "imageToImage": "تحميل صورة إلى صورة أي صورة كأولية، والتي يتم استخدامها لإنشاء صورة جديدة مع التشعيب. كلما كانت القيمة أعلى، كلما تغيرت نتيجة الصورة. من الممكن أن تكون القيم بين 0.0 و 1.0، وتوصي النطاق الموصى به هو .25-.75", - "boundingBox": "مربع الحدود هو نفس الإعدادات العرض والارتفاع لنص إلى صورة أو صورة إلى صورة. فقط المنطقة في المربع سيتم معالجتها.", - "seamCorrection": "يتحكم بالتعامل مع الخطوط المرئية التي تحدث بين الصور المولدة في سطح اللوحة.", - "infillAndScaling": "إدارة أساليب التعبئة (المستخدمة على المناطق المخفية أو الممحوة في سطح اللوحة) والزيادة في الحجم (مفيدة لحجوزات الإطارات الصغيرة)." - } - }, - "unifiedCanvas": { - "layer": "طبقة", - "base": "قاعدة", - "mask": "قناع", - "maskingOptions": "خيارات القناع", - "enableMask": "مكن القناع", - "preserveMaskedArea": "الحفاظ على المنطقة المقنعة", - "clearMask": "مسح القناع", - "brush": "فرشاة", - "eraser": "ممحاة", - "fillBoundingBox": "ملئ إطار الحدود", - "eraseBoundingBox": "مسح إطار الحدود", - "colorPicker": "اختيار اللون", - "brushOptions": "خيارات الفرشاة", - "brushSize": "الحجم", - "move": "تحريك", - "resetView": "إعادة تعيين العرض", - "mergeVisible": "دمج الظاهر", - "saveToGallery": "حفظ إلى المعرض", - "copyToClipboard": "نسخ إلى الحافظة", - "downloadAsImage": "تنزيل على شكل صورة", - "undo": "تراجع", - "redo": "إعادة", - "clearCanvas": "مسح سبيكة الكاملة", - "canvasSettings": "إعدادات سبيكة الكاملة", - "showIntermediates": "إظهار الوسطاء", - "showGrid": "إظهار الشبكة", - "snapToGrid": "الالتفاف إلى الشبكة", - "darkenOutsideSelection": "تعمية خارج التحديد", - "autoSaveToGallery": "حفظ تلقائي إلى المعرض", - "saveBoxRegionOnly": "حفظ منطقة الصندوق فقط", - "limitStrokesToBox": "تحديد عدد الخطوط إلى الصندوق", - "showCanvasDebugInfo": "إظهار معلومات تصحيح سبيكة الكاملة", - "clearCanvasHistory": "مسح تاريخ سبيكة الكاملة", - "clearHistory": "مسح التاريخ", - "clearCanvasHistoryMessage": "مسح تاريخ اللوحة تترك اللوحة الحالية عائمة، ولكن تمسح بشكل غير قابل للتراجع تاريخ التراجع والإعادة.", - "clearCanvasHistoryConfirm": "هل أنت متأكد من رغبتك في مسح تاريخ اللوحة؟", - "emptyTempImageFolder": "إفراغ مجلد الصور المؤقتة", - "emptyFolder": "إفراغ المجلد", - "emptyTempImagesFolderMessage": "إفراغ مجلد الصور المؤقتة يؤدي أيضًا إلى إعادة تعيين اللوحة الموحدة بشكل كامل. وهذا يشمل كل تاريخ التراجع / الإعادة والصور في منطقة التخزين وطبقة الأساس لللوحة.", - "emptyTempImagesFolderConfirm": "هل أنت متأكد من رغبتك في إفراغ مجلد الصور المؤقتة؟", - "activeLayer": "الطبقة النشطة", - "canvasScale": "مقياس اللوحة", - "boundingBox": "صندوق الحدود", - "scaledBoundingBox": "صندوق الحدود المكبر", - "boundingBoxPosition": "موضع صندوق الحدود", - "canvasDimensions": "أبعاد اللوحة", - "canvasPosition": "موضع اللوحة", - "cursorPosition": "موضع المؤشر", - "previous": "السابق", - "next": "التالي", - "accept": "قبول", - "showHide": "إظهار/إخفاء", - "discardAll": "تجاهل الكل", - "betaClear": "مسح", - "betaDarkenOutside": "ظل الخارج", - "betaLimitToBox": "تحديد إلى الصندوق", - "betaPreserveMasked": "المحافظة على المخفية" - } -} diff --git a/invokeai/frontend/web/dist/locales/de.json b/invokeai/frontend/web/dist/locales/de.json deleted file mode 100644 index d9b64f8fc6..0000000000 --- a/invokeai/frontend/web/dist/locales/de.json +++ /dev/null @@ -1,1012 +0,0 @@ -{ - "common": { - "languagePickerLabel": "Sprachauswahl", - "reportBugLabel": "Fehler melden", - "settingsLabel": "Einstellungen", - "img2img": "Bild zu Bild", - "nodes": "Knoten Editor", - "langGerman": "Deutsch", - "nodesDesc": "Ein knotenbasiertes System, für die Erzeugung von Bildern, ist derzeit in der Entwicklung. Bleiben Sie gespannt auf Updates zu dieser fantastischen Funktion.", - "postProcessing": "Nachbearbeitung", - "postProcessDesc1": "InvokeAI bietet eine breite Palette von Nachbearbeitungsfunktionen. Bildhochskalierung und Gesichtsrekonstruktion sind bereits in der WebUI verfügbar. Sie können sie über das Menü Erweiterte Optionen der Reiter Text in Bild und Bild in Bild aufrufen. Sie können Bilder auch direkt bearbeiten, indem Sie die Schaltflächen für Bildaktionen oberhalb der aktuellen Bildanzeige oder im Viewer verwenden.", - "postProcessDesc2": "Eine spezielle Benutzeroberfläche wird in Kürze veröffentlicht, um erweiterte Nachbearbeitungs-Workflows zu erleichtern.", - "postProcessDesc3": "Die InvokeAI Kommandozeilen-Schnittstelle bietet verschiedene andere Funktionen, darunter Embiggen.", - "training": "trainieren", - "trainingDesc1": "Ein spezieller Arbeitsablauf zum Trainieren Ihrer eigenen Embeddings und Checkpoints mit Textual Inversion und Dreambooth über die Weboberfläche.", - "trainingDesc2": "InvokeAI unterstützt bereits das Training von benutzerdefinierten Embeddings mit Textual Inversion unter Verwendung des Hauptskripts.", - "upload": "Hochladen", - "close": "Schließen", - "load": "Laden", - "statusConnected": "Verbunden", - "statusDisconnected": "Getrennt", - "statusError": "Fehler", - "statusPreparing": "Vorbereiten", - "statusProcessingCanceled": "Verarbeitung abgebrochen", - "statusProcessingComplete": "Verarbeitung komplett", - "statusGenerating": "Generieren", - "statusGeneratingTextToImage": "Erzeugen von Text zu Bild", - "statusGeneratingImageToImage": "Erzeugen von Bild zu Bild", - "statusGeneratingInpainting": "Erzeuge Inpainting", - "statusGeneratingOutpainting": "Erzeuge Outpainting", - "statusGenerationComplete": "Generierung abgeschlossen", - "statusIterationComplete": "Iteration abgeschlossen", - "statusSavingImage": "Speichere Bild", - "statusRestoringFaces": "Gesichter restaurieren", - "statusRestoringFacesGFPGAN": "Gesichter restaurieren (GFPGAN)", - "statusRestoringFacesCodeFormer": "Gesichter restaurieren (CodeFormer)", - "statusUpscaling": "Hochskalierung", - "statusUpscalingESRGAN": "Hochskalierung (ESRGAN)", - "statusLoadingModel": "Laden des Modells", - "statusModelChanged": "Modell Geändert", - "cancel": "Abbrechen", - "accept": "Annehmen", - "back": "Zurück", - "langEnglish": "Englisch", - "langDutch": "Niederländisch", - "langFrench": "Französisch", - "langItalian": "Italienisch", - "langPortuguese": "Portugiesisch", - "langRussian": "Russisch", - "langUkranian": "Ukrainisch", - "hotkeysLabel": "Tastenkombinationen", - "githubLabel": "Github", - "discordLabel": "Discord", - "txt2img": "Text zu Bild", - "postprocessing": "Nachbearbeitung", - "langPolish": "Polnisch", - "langJapanese": "Japanisch", - "langArabic": "Arabisch", - "langKorean": "Koreanisch", - "langHebrew": "Hebräisch", - "langSpanish": "Spanisch", - "t2iAdapter": "T2I Adapter", - "communityLabel": "Gemeinschaft", - "dontAskMeAgain": "Frag mich nicht nochmal", - "loadingInvokeAI": "Lade Invoke AI", - "statusMergedModels": "Modelle zusammengeführt", - "areYouSure": "Bist du dir sicher?", - "statusConvertingModel": "Model konvertieren", - "on": "An", - "nodeEditor": "Knoten Editor", - "statusMergingModels": "Modelle zusammenführen", - "langSimplifiedChinese": "Vereinfachtes Chinesisch", - "ipAdapter": "IP Adapter", - "controlAdapter": "Control Adapter", - "auto": "Automatisch", - "controlNet": "ControlNet", - "imageFailedToLoad": "Kann Bild nicht laden", - "statusModelConverted": "Model konvertiert", - "modelManager": "Model Manager", - "lightMode": "Heller Modus", - "generate": "Erstellen", - "learnMore": "Mehr lernen", - "darkMode": "Dunkler Modus", - "loading": "Lade", - "random": "Zufall", - "batch": "Stapel-Manager", - "advanced": "Erweitert", - "langBrPortuguese": "Portugiesisch (Brasilien)", - "unifiedCanvas": "Einheitliche Leinwand", - "openInNewTab": "In einem neuem Tab öffnen", - "statusProcessing": "wird bearbeitet", - "linear": "Linear", - "imagePrompt": "Bild Prompt", - "checkpoint": "Checkpoint", - "inpaint": "inpaint", - "simple": "Einfach", - "template": "Vorlage", - "outputs": "Ausgabe", - "data": "Daten", - "safetensors": "Safetensors", - "outpaint": "outpaint", - "details": "Details", - "format": "Format", - "unknown": "Unbekannt", - "folder": "Ordner", - "error": "Fehler", - "installed": "Installiert", - "ai": "KI", - "file": "Datei", - "somethingWentWrong": "Etwas ist schief gelaufen", - "copyError": "$t(gallery.copy) Fehler", - "input": "Eingabe", - "notInstalled": "Nicht $t(common.installed)" - }, - "gallery": { - "generations": "Erzeugungen", - "showGenerations": "Zeige Erzeugnisse", - "uploads": "Uploads", - "showUploads": "Zeige Uploads", - "galleryImageSize": "Bildgröße", - "galleryImageResetSize": "Größe zurücksetzen", - "gallerySettings": "Galerie-Einstellungen", - "maintainAspectRatio": "Seitenverhältnis beibehalten", - "autoSwitchNewImages": "Automatisch zu neuen Bildern wechseln", - "singleColumnLayout": "Einspaltiges Layout", - "allImagesLoaded": "Alle Bilder geladen", - "loadMore": "Mehr laden", - "noImagesInGallery": "Keine Bilder in der Galerie", - "loading": "Lade", - "preparingDownload": "bereite Download vor", - "preparingDownloadFailed": "Problem beim Download vorbereiten", - "deleteImage": "Lösche Bild", - "copy": "Kopieren", - "download": "Runterladen", - "setCurrentImage": "Setze aktuelle Bild", - "featuresWillReset": "Wenn Sie dieses Bild löschen, werden diese Funktionen sofort zurückgesetzt.", - "deleteImageBin": "Gelöschte Bilder werden an den Papierkorb Ihres Betriebssystems gesendet.", - "unableToLoad": "Galerie kann nicht geladen werden", - "downloadSelection": "Auswahl herunterladen", - "currentlyInUse": "Dieses Bild wird derzeit in den folgenden Funktionen verwendet:", - "deleteImagePermanent": "Gelöschte Bilder können nicht wiederhergestellt werden.", - "autoAssignBoardOnClick": "Board per Klick automatisch zuweisen", - "noImageSelected": "Kein Bild ausgewählt" - }, - "hotkeys": { - "keyboardShortcuts": "Tastenkürzel", - "appHotkeys": "App-Tastenkombinationen", - "generalHotkeys": "Allgemeine Tastenkürzel", - "galleryHotkeys": "Galerie Tastenkürzel", - "unifiedCanvasHotkeys": "Unified Canvas Tastenkürzel", - "invoke": { - "desc": "Ein Bild erzeugen", - "title": "Invoke" - }, - "cancel": { - "title": "Abbrechen", - "desc": "Bilderzeugung abbrechen" - }, - "focusPrompt": { - "title": "Fokussiere Prompt", - "desc": "Fokussieren des Eingabefeldes für den Prompt" - }, - "toggleOptions": { - "title": "Optionen umschalten", - "desc": "Öffnen und Schließen des Optionsfeldes" - }, - "pinOptions": { - "title": "Optionen anheften", - "desc": "Anheften des Optionsfeldes" - }, - "toggleViewer": { - "title": "Bildbetrachter umschalten", - "desc": "Bildbetrachter öffnen und schließen" - }, - "toggleGallery": { - "title": "Galerie umschalten", - "desc": "Öffnen und Schließen des Galerie-Schubfachs" - }, - "maximizeWorkSpace": { - "title": "Arbeitsbereich maximieren", - "desc": "Schließen Sie die Panels und maximieren Sie den Arbeitsbereich" - }, - "changeTabs": { - "title": "Tabs wechseln", - "desc": "Zu einem anderen Arbeitsbereich wechseln" - }, - "consoleToggle": { - "title": "Konsole Umschalten", - "desc": "Konsole öffnen und schließen" - }, - "setPrompt": { - "title": "Prompt setzen", - "desc": "Verwende den Prompt des aktuellen Bildes" - }, - "setSeed": { - "title": "Seed setzen", - "desc": "Verwende den Seed des aktuellen Bildes" - }, - "setParameters": { - "title": "Parameter setzen", - "desc": "Alle Parameter des aktuellen Bildes verwenden" - }, - "restoreFaces": { - "title": "Gesicht restaurieren", - "desc": "Das aktuelle Bild restaurieren" - }, - "upscale": { - "title": "Hochskalieren", - "desc": "Das aktuelle Bild hochskalieren" - }, - "showInfo": { - "title": "Info anzeigen", - "desc": "Metadaten des aktuellen Bildes anzeigen" - }, - "sendToImageToImage": { - "title": "An Bild zu Bild senden", - "desc": "Aktuelles Bild an Bild zu Bild senden" - }, - "deleteImage": { - "title": "Bild löschen", - "desc": "Aktuelles Bild löschen" - }, - "closePanels": { - "title": "Panels schließen", - "desc": "Schließt offene Panels" - }, - "previousImage": { - "title": "Vorheriges Bild", - "desc": "Vorheriges Bild in der Galerie anzeigen" - }, - "nextImage": { - "title": "Nächstes Bild", - "desc": "Nächstes Bild in Galerie anzeigen" - }, - "toggleGalleryPin": { - "title": "Galerie anheften umschalten", - "desc": "Heftet die Galerie an die Benutzeroberfläche bzw. löst die sie" - }, - "increaseGalleryThumbSize": { - "title": "Größe der Galeriebilder erhöhen", - "desc": "Vergrößert die Galerie-Miniaturansichten" - }, - "decreaseGalleryThumbSize": { - "title": "Größe der Galeriebilder verringern", - "desc": "Verringert die Größe der Galerie-Miniaturansichten" - }, - "selectBrush": { - "title": "Pinsel auswählen", - "desc": "Wählt den Leinwandpinsel aus" - }, - "selectEraser": { - "title": "Radiergummi auswählen", - "desc": "Wählt den Radiergummi für die Leinwand aus" - }, - "decreaseBrushSize": { - "title": "Pinselgröße verkleinern", - "desc": "Verringert die Größe des Pinsels/Radiergummis" - }, - "increaseBrushSize": { - "title": "Pinselgröße erhöhen", - "desc": "Erhöht die Größe des Pinsels/Radiergummis" - }, - "decreaseBrushOpacity": { - "title": "Deckkraft des Pinsels vermindern", - "desc": "Verringert die Deckkraft des Pinsels" - }, - "increaseBrushOpacity": { - "title": "Deckkraft des Pinsels erhöhen", - "desc": "Erhöht die Deckkraft des Pinsels" - }, - "moveTool": { - "title": "Verschieben Werkzeug", - "desc": "Ermöglicht die Navigation auf der Leinwand" - }, - "fillBoundingBox": { - "title": "Begrenzungsrahmen füllen", - "desc": "Füllt den Begrenzungsrahmen mit Pinselfarbe" - }, - "eraseBoundingBox": { - "title": "Begrenzungsrahmen löschen", - "desc": "Löscht den Bereich des Begrenzungsrahmens" - }, - "colorPicker": { - "title": "Farbpipette", - "desc": "Farben aus dem Bild aufnehmen" - }, - "toggleSnap": { - "title": "Einrasten umschalten", - "desc": "Schaltet Einrasten am Raster ein und aus" - }, - "quickToggleMove": { - "title": "Schnell Verschiebemodus", - "desc": "Schaltet vorübergehend den Verschiebemodus um" - }, - "toggleLayer": { - "title": "Ebene umschalten", - "desc": "Schaltet die Auswahl von Maske/Basisebene um" - }, - "clearMask": { - "title": "Lösche Maske", - "desc": "Die gesamte Maske löschen" - }, - "hideMask": { - "title": "Maske ausblenden", - "desc": "Maske aus- und einblenden" - }, - "showHideBoundingBox": { - "title": "Begrenzungsrahmen ein-/ausblenden", - "desc": "Sichtbarkeit des Begrenzungsrahmens ein- und ausschalten" - }, - "mergeVisible": { - "title": "Sichtbares Zusammenführen", - "desc": "Alle sichtbaren Ebenen der Leinwand zusammenführen" - }, - "saveToGallery": { - "title": "In Galerie speichern", - "desc": "Aktuelle Leinwand in Galerie speichern" - }, - "copyToClipboard": { - "title": "In die Zwischenablage kopieren", - "desc": "Aktuelle Leinwand in die Zwischenablage kopieren" - }, - "downloadImage": { - "title": "Bild herunterladen", - "desc": "Aktuelle Leinwand herunterladen" - }, - "undoStroke": { - "title": "Pinselstrich rückgängig machen", - "desc": "Einen Pinselstrich rückgängig machen" - }, - "redoStroke": { - "title": "Pinselstrich wiederherstellen", - "desc": "Einen Pinselstrich wiederherstellen" - }, - "resetView": { - "title": "Ansicht zurücksetzen", - "desc": "Leinwandansicht zurücksetzen" - }, - "previousStagingImage": { - "title": "Vorheriges Staging-Bild", - "desc": "Bild des vorherigen Staging-Bereichs" - }, - "nextStagingImage": { - "title": "Nächstes Staging-Bild", - "desc": "Bild des nächsten Staging-Bereichs" - }, - "acceptStagingImage": { - "title": "Staging-Bild akzeptieren", - "desc": "Akzeptieren Sie das aktuelle Bild des Staging-Bereichs" - }, - "nodesHotkeys": "Knoten Tastenkürzel", - "addNodes": { - "title": "Knotenpunkt hinzufügen", - "desc": "Öffnet das Menü zum Hinzufügen von Knoten" - } - }, - "modelManager": { - "modelAdded": "Model hinzugefügt", - "modelUpdated": "Model aktualisiert", - "modelEntryDeleted": "Modelleintrag gelöscht", - "cannotUseSpaces": "Leerzeichen können nicht verwendet werden", - "addNew": "Neue hinzufügen", - "addNewModel": "Neues Model hinzufügen", - "addManually": "Manuell hinzufügen", - "nameValidationMsg": "Geben Sie einen Namen für Ihr Model ein", - "description": "Beschreibung", - "descriptionValidationMsg": "Fügen Sie eine Beschreibung für Ihr Model hinzu", - "config": "Konfiguration", - "configValidationMsg": "Pfad zur Konfigurationsdatei Ihres Models.", - "modelLocation": "Ort des Models", - "modelLocationValidationMsg": "Pfad zum Speicherort Ihres Models", - "vaeLocation": "VAE Ort", - "vaeLocationValidationMsg": "Pfad zum Speicherort Ihres VAE.", - "width": "Breite", - "widthValidationMsg": "Standardbreite Ihres Models.", - "height": "Höhe", - "heightValidationMsg": "Standardbhöhe Ihres Models.", - "addModel": "Model hinzufügen", - "updateModel": "Model aktualisieren", - "availableModels": "Verfügbare Models", - "search": "Suche", - "load": "Laden", - "active": "Aktiv", - "notLoaded": "nicht geladen", - "cached": "zwischengespeichert", - "checkpointFolder": "Checkpoint-Ordner", - "clearCheckpointFolder": "Checkpoint-Ordner löschen", - "findModels": "Models finden", - "scanAgain": "Erneut scannen", - "modelsFound": "Models gefunden", - "selectFolder": "Ordner auswählen", - "selected": "Ausgewählt", - "selectAll": "Alles auswählen", - "deselectAll": "Alle abwählen", - "showExisting": "Vorhandene anzeigen", - "addSelected": "Auswahl hinzufügen", - "modelExists": "Model existiert", - "selectAndAdd": "Unten aufgeführte Models auswählen und hinzufügen", - "noModelsFound": "Keine Models gefunden", - "delete": "Löschen", - "deleteModel": "Model löschen", - "deleteConfig": "Konfiguration löschen", - "deleteMsg1": "Möchten Sie diesen Model-Eintrag wirklich aus InvokeAI löschen?", - "deleteMsg2": "Dadurch WIRD das Modell von der Festplatte gelöscht WENN es im InvokeAI Root Ordner liegt. Wenn es in einem anderem Ordner liegt wird das Modell NICHT von der Festplatte gelöscht.", - "customConfig": "Benutzerdefinierte Konfiguration", - "invokeRoot": "InvokeAI Ordner", - "formMessageDiffusersVAELocationDesc": "Falls nicht angegeben, sucht InvokeAI nach der VAE-Datei innerhalb des oben angegebenen Modell Speicherortes.", - "checkpointModels": "Kontrollpunkte", - "convert": "Umwandeln", - "addCheckpointModel": "Kontrollpunkt / SafeTensors Modell hinzufügen", - "allModels": "Alle Modelle", - "alpha": "Alpha", - "addDifference": "Unterschied hinzufügen", - "convertToDiffusersHelpText2": "Bei diesem Vorgang wird Ihr Eintrag im Modell-Manager durch die Diffusor-Version desselben Modells ersetzt.", - "convertToDiffusersHelpText5": "Bitte stellen Sie sicher, dass Sie über genügend Speicherplatz verfügen. Die Modelle sind in der Regel zwischen 2 GB und 7 GB groß.", - "convertToDiffusersHelpText3": "Ihre Kontrollpunktdatei auf der Festplatte wird NICHT gelöscht oder in irgendeiner Weise verändert. Sie können Ihren Kontrollpunkt dem Modell-Manager wieder hinzufügen, wenn Sie dies wünschen.", - "convertToDiffusersHelpText4": "Dies ist ein einmaliger Vorgang. Er kann je nach den Spezifikationen Ihres Computers etwa 30-60 Sekunden dauern.", - "convertToDiffusersHelpText6": "Möchten Sie dieses Modell konvertieren?", - "custom": "Benutzerdefiniert", - "modelConverted": "Modell umgewandelt", - "inverseSigmoid": "Inverses Sigmoid", - "invokeAIFolder": "Invoke AI Ordner", - "formMessageDiffusersModelLocationDesc": "Bitte geben Sie mindestens einen an.", - "customSaveLocation": "Benutzerdefinierter Speicherort", - "formMessageDiffusersVAELocation": "VAE Speicherort", - "mergedModelCustomSaveLocation": "Benutzerdefinierter Pfad", - "modelMergeHeaderHelp2": "Nur Diffusers sind für die Zusammenführung verfügbar. Wenn Sie ein Kontrollpunktmodell zusammenführen möchten, konvertieren Sie es bitte zuerst in Diffusers.", - "manual": "Manuell", - "modelManager": "Modell Manager", - "modelMergeAlphaHelp": "Alpha steuert die Überblendungsstärke für die Modelle. Niedrigere Alphawerte führen zu einem geringeren Einfluss des zweiten Modells.", - "modelMergeHeaderHelp1": "Sie können bis zu drei verschiedene Modelle miteinander kombinieren, um eine Mischung zu erstellen, die Ihren Bedürfnissen entspricht.", - "ignoreMismatch": "Unstimmigkeiten zwischen ausgewählten Modellen ignorieren", - "model": "Modell", - "convertToDiffusersSaveLocation": "Speicherort", - "pathToCustomConfig": "Pfad zur benutzerdefinierten Konfiguration", - "v1": "v1", - "modelMergeInterpAddDifferenceHelp": "In diesem Modus wird zunächst Modell 3 von Modell 2 subtrahiert. Die resultierende Version wird mit Modell 1 mit dem oben eingestellten Alphasatz gemischt.", - "modelTwo": "Modell 2", - "modelOne": "Modell 1", - "v2_base": "v2 (512px)", - "scanForModels": "Nach Modellen suchen", - "name": "Name", - "safetensorModels": "SafeTensors", - "pickModelType": "Modell Typ auswählen", - "sameFolder": "Gleicher Ordner", - "modelThree": "Modell 3", - "v2_768": "v2 (768px)", - "none": "Nix", - "repoIDValidationMsg": "Online Repo Ihres Modells", - "vaeRepoIDValidationMsg": "Online Repo Ihrer VAE", - "importModels": "Importiere Modelle", - "merge": "Zusammenführen", - "addDiffuserModel": "Diffusers hinzufügen", - "advanced": "Erweitert", - "closeAdvanced": "Schließe Erweitert", - "convertingModelBegin": "Konvertiere Modell. Bitte warten.", - "customConfigFileLocation": "Benutzerdefinierte Konfiguration Datei Speicherort", - "baseModel": "Basis Modell", - "convertToDiffusers": "Konvertiere zu Diffusers", - "diffusersModels": "Diffusers", - "noCustomLocationProvided": "Kein benutzerdefinierter Standort angegeben", - "onnxModels": "Onnx", - "vaeRepoID": "VAE-Repo-ID", - "weightedSum": "Gewichtete Summe", - "syncModelsDesc": "Wenn Ihre Modelle nicht mit dem Backend synchronisiert sind, können Sie sie mit dieser Option aktualisieren. Dies ist im Allgemeinen praktisch, wenn Sie Ihre models.yaml-Datei manuell aktualisieren oder Modelle zum InvokeAI-Stammordner hinzufügen, nachdem die Anwendung gestartet wurde.", - "vae": "VAE", - "noModels": "Keine Modelle gefunden", - "statusConverting": "Konvertieren", - "sigmoid": "Sigmoid", - "predictionType": "Vorhersagetyp (für Stable Diffusion 2.x-Modelle und gelegentliche Stable Diffusion 1.x-Modelle)", - "selectModel": "Wählen Sie Modell aus", - "repo_id": "Repo-ID", - "modelSyncFailed": "Modellsynchronisierung fehlgeschlagen", - "quickAdd": "Schnell hinzufügen", - "simpleModelDesc": "Geben Sie einen Pfad zu einem lokalen Diffusers-Modell, einem lokalen Checkpoint-/Safetensors-Modell, einer HuggingFace-Repo-ID oder einer Checkpoint-/Diffusers-Modell-URL an.", - "modelDeleted": "Modell gelöscht", - "inpainting": "v1 Inpainting", - "modelUpdateFailed": "Modellaktualisierung fehlgeschlagen", - "useCustomConfig": "Benutzerdefinierte Konfiguration verwenden", - "settings": "Einstellungen", - "modelConversionFailed": "Modellkonvertierung fehlgeschlagen", - "syncModels": "Modelle synchronisieren", - "mergedModelSaveLocation": "Speicherort", - "modelType": "Modelltyp", - "modelsMerged": "Modelle zusammengeführt", - "modelsMergeFailed": "Modellzusammenführung fehlgeschlagen", - "convertToDiffusersHelpText1": "Dieses Modell wird in das 🧨 Diffusers-Format konvertiert.", - "modelsSynced": "Modelle synchronisiert", - "vaePrecision": "VAE-Präzision", - "mergeModels": "Modelle zusammenführen", - "interpolationType": "Interpolationstyp", - "oliveModels": "Olives", - "variant": "Variante", - "loraModels": "LoRAs", - "modelDeleteFailed": "Modell konnte nicht gelöscht werden", - "mergedModelName": "Zusammengeführter Modellname", - "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", - "formMessageDiffusersModelLocation": "Diffusers Modell Speicherort", - "noModelSelected": "Kein Modell ausgewählt" - }, - "parameters": { - "images": "Bilder", - "steps": "Schritte", - "cfgScale": "CFG-Skala", - "width": "Breite", - "height": "Höhe", - "randomizeSeed": "Zufälliger Seed", - "shuffle": "Mischen", - "noiseThreshold": "Rausch-Schwellenwert", - "perlinNoise": "Perlin-Rauschen", - "variations": "Variationen", - "variationAmount": "Höhe der Abweichung", - "seedWeights": "Seed-Gewichte", - "faceRestoration": "Gesichtsrestaurierung", - "restoreFaces": "Gesichter wiederherstellen", - "type": "Art", - "strength": "Stärke", - "upscaling": "Hochskalierung", - "upscale": "Hochskalieren (Shift + U)", - "upscaleImage": "Bild hochskalieren", - "scale": "Maßstab", - "otherOptions": "Andere Optionen", - "seamlessTiling": "Nahtlose Kacheln", - "hiresOptim": "High-Res-Optimierung", - "imageFit": "Ausgangsbild an Ausgabegröße anpassen", - "codeformerFidelity": "Glaubwürdigkeit", - "scaleBeforeProcessing": "Skalieren vor der Verarbeitung", - "scaledWidth": "Skaliert W", - "scaledHeight": "Skaliert H", - "infillMethod": "Infill-Methode", - "tileSize": "Kachelgröße", - "boundingBoxHeader": "Begrenzungsrahmen", - "seamCorrectionHeader": "Nahtkorrektur", - "infillScalingHeader": "Infill und Skalierung", - "img2imgStrength": "Bild-zu-Bild-Stärke", - "toggleLoopback": "Loopback umschalten", - "sendTo": "Senden an", - "sendToImg2Img": "Senden an Bild zu Bild", - "sendToUnifiedCanvas": "Senden an Unified Canvas", - "copyImageToLink": "Bild-Link kopieren", - "downloadImage": "Bild herunterladen", - "openInViewer": "Im Viewer öffnen", - "closeViewer": "Viewer schließen", - "usePrompt": "Prompt verwenden", - "useSeed": "Seed verwenden", - "useAll": "Alle verwenden", - "useInitImg": "Ausgangsbild verwenden", - "initialImage": "Ursprüngliches Bild", - "showOptionsPanel": "Optionsleiste zeigen", - "cancel": { - "setType": "Abbruchart festlegen", - "immediate": "Sofort abbrechen", - "schedule": "Abbrechen nach der aktuellen Iteration", - "isScheduled": "Abbrechen" - }, - "copyImage": "Bild kopieren", - "denoisingStrength": "Stärke der Entrauschung", - "symmetry": "Symmetrie", - "imageToImage": "Bild zu Bild", - "info": "Information", - "general": "Allgemein", - "hiresStrength": "High Res Stärke", - "hidePreview": "Verstecke Vorschau", - "showPreview": "Zeige Vorschau" - }, - "settings": { - "displayInProgress": "Bilder in Bearbeitung anzeigen", - "saveSteps": "Speichern der Bilder alle n Schritte", - "confirmOnDelete": "Bestätigen beim Löschen", - "displayHelpIcons": "Hilfesymbole anzeigen", - "enableImageDebugging": "Bild-Debugging aktivieren", - "resetWebUI": "Web-Oberfläche zurücksetzen", - "resetWebUIDesc1": "Das Zurücksetzen der Web-Oberfläche setzt nur den lokalen Cache des Browsers mit Ihren Bildern und gespeicherten Einstellungen zurück. Es werden keine Bilder von der Festplatte gelöscht.", - "resetWebUIDesc2": "Wenn die Bilder nicht in der Galerie angezeigt werden oder etwas anderes nicht funktioniert, versuchen Sie bitte, die Einstellungen zurückzusetzen, bevor Sie einen Fehler auf GitHub melden.", - "resetComplete": "Die Web-Oberfläche wurde zurückgesetzt.", - "models": "Modelle", - "useSlidersForAll": "Schieberegler für alle Optionen verwenden" - }, - "toast": { - "tempFoldersEmptied": "Temp-Ordner geleert", - "uploadFailed": "Hochladen fehlgeschlagen", - "uploadFailedUnableToLoadDesc": "Datei kann nicht geladen werden", - "downloadImageStarted": "Bild wird heruntergeladen", - "imageCopied": "Bild kopiert", - "imageLinkCopied": "Bildlink kopiert", - "imageNotLoaded": "Kein Bild geladen", - "imageNotLoadedDesc": "Konnte kein Bild finden", - "imageSavedToGallery": "Bild in die Galerie gespeichert", - "canvasMerged": "Leinwand zusammengeführt", - "sentToImageToImage": "Gesendet an Bild zu Bild", - "sentToUnifiedCanvas": "Gesendet an Unified Canvas", - "parametersSet": "Parameter festlegen", - "parametersNotSet": "Parameter nicht festgelegt", - "parametersNotSetDesc": "Keine Metadaten für dieses Bild gefunden.", - "parametersFailed": "Problem beim Laden der Parameter", - "parametersFailedDesc": "Ausgangsbild kann nicht geladen werden.", - "seedSet": "Seed festlegen", - "seedNotSet": "Saatgut nicht festgelegt", - "seedNotSetDesc": "Für dieses Bild wurde kein Seed gefunden.", - "promptSet": "Prompt festgelegt", - "promptNotSet": "Prompt nicht festgelegt", - "promptNotSetDesc": "Für dieses Bild wurde kein Prompt gefunden.", - "upscalingFailed": "Hochskalierung fehlgeschlagen", - "faceRestoreFailed": "Gesichtswiederherstellung fehlgeschlagen", - "metadataLoadFailed": "Metadaten konnten nicht geladen werden", - "initialImageSet": "Ausgangsbild festgelegt", - "initialImageNotSet": "Ausgangsbild nicht festgelegt", - "initialImageNotSetDesc": "Ausgangsbild konnte nicht geladen werden" - }, - "tooltip": { - "feature": { - "prompt": "Dies ist das Prompt-Feld. Ein Prompt enthält Generierungsobjekte und stilistische Begriffe. Sie können auch Gewichtungen (Token-Bedeutung) dem Prompt hinzufügen, aber CLI-Befehle und Parameter funktionieren nicht.", - "gallery": "Die Galerie zeigt erzeugte Bilder aus dem Ausgabeordner an, sobald sie erstellt wurden. Die Einstellungen werden in den Dateien gespeichert und können über das Kontextmenü aufgerufen werden.", - "other": "Mit diesen Optionen werden alternative Verarbeitungsmodi für InvokeAI aktiviert. 'Nahtlose Kachelung' erzeugt sich wiederholende Muster in der Ausgabe. 'Hohe Auflösungen' werden in zwei Schritten mit img2img erzeugt: Verwenden Sie diese Einstellung, wenn Sie ein größeres und kohärenteres Bild ohne Artefakte wünschen. Es dauert länger als das normale txt2img.", - "seed": "Der Seed-Wert beeinflusst das Ausgangsrauschen, aus dem das Bild erstellt wird. Sie können die bereits vorhandenen Seeds von früheren Bildern verwenden. 'Der Rauschschwellenwert' wird verwendet, um Artefakte bei hohen CFG-Werten abzuschwächen (versuchen Sie es im Bereich 0-10), und Perlin, um während der Erzeugung Perlin-Rauschen hinzuzufügen: Beide dienen dazu, Ihre Ergebnisse zu variieren.", - "variations": "Versuchen Sie eine Variation mit einem Wert zwischen 0,1 und 1,0, um das Ergebnis für ein bestimmtes Seed zu ändern. Interessante Variationen des Seeds liegen zwischen 0,1 und 0,3.", - "upscale": "Verwenden Sie ESRGAN, um das Bild unmittelbar nach der Erzeugung zu vergrößern.", - "faceCorrection": "Gesichtskorrektur mit GFPGAN oder Codeformer: Der Algorithmus erkennt Gesichter im Bild und korrigiert alle Fehler. Ein hoher Wert verändert das Bild stärker, was zu attraktiveren Gesichtern führt. Codeformer mit einer höheren Genauigkeit bewahrt das Originalbild auf Kosten einer stärkeren Gesichtskorrektur.", - "imageToImage": "Bild zu Bild lädt ein beliebiges Bild als Ausgangsbild, aus dem dann zusammen mit dem Prompt ein neues Bild erzeugt wird. Je höher der Wert ist, desto stärker wird das Ergebnisbild verändert. Werte von 0,0 bis 1,0 sind möglich, der empfohlene Bereich ist .25-.75", - "boundingBox": "Der Begrenzungsrahmen ist derselbe wie die Einstellungen für Breite und Höhe bei Text zu Bild oder Bild zu Bild. Es wird nur der Bereich innerhalb des Rahmens verarbeitet.", - "seamCorrection": "Steuert die Behandlung von sichtbaren Übergängen, die zwischen den erzeugten Bildern auf der Leinwand auftreten.", - "infillAndScaling": "Verwalten Sie Infill-Methoden (für maskierte oder gelöschte Bereiche der Leinwand) und Skalierung (nützlich für kleine Begrenzungsrahmengrößen)." - } - }, - "unifiedCanvas": { - "layer": "Ebene", - "base": "Basis", - "mask": "Maske", - "maskingOptions": "Maskierungsoptionen", - "enableMask": "Maske aktivieren", - "preserveMaskedArea": "Maskierten Bereich bewahren", - "clearMask": "Maske löschen", - "brush": "Pinsel", - "eraser": "Radierer", - "fillBoundingBox": "Begrenzungsrahmen füllen", - "eraseBoundingBox": "Begrenzungsrahmen löschen", - "colorPicker": "Farbpipette", - "brushOptions": "Pinseloptionen", - "brushSize": "Größe", - "move": "Bewegen", - "resetView": "Ansicht zurücksetzen", - "mergeVisible": "Sichtbare Zusammenführen", - "saveToGallery": "In Galerie speichern", - "copyToClipboard": "In Zwischenablage kopieren", - "downloadAsImage": "Als Bild herunterladen", - "undo": "Rückgängig", - "redo": "Wiederherstellen", - "clearCanvas": "Leinwand löschen", - "canvasSettings": "Leinwand-Einstellungen", - "showIntermediates": "Zwischenprodukte anzeigen", - "showGrid": "Gitternetz anzeigen", - "snapToGrid": "Am Gitternetz einrasten", - "darkenOutsideSelection": "Außerhalb der Auswahl verdunkeln", - "autoSaveToGallery": "Automatisch in Galerie speichern", - "saveBoxRegionOnly": "Nur Auswahlbox speichern", - "limitStrokesToBox": "Striche auf Box beschränken", - "showCanvasDebugInfo": "Zusätzliche Informationen zur Leinwand anzeigen", - "clearCanvasHistory": "Leinwand-Verlauf löschen", - "clearHistory": "Verlauf löschen", - "clearCanvasHistoryMessage": "Wenn Sie den Verlauf der Leinwand löschen, bleibt die aktuelle Leinwand intakt, aber der Verlauf der Rückgängig- und Wiederherstellung wird unwiderruflich gelöscht.", - "clearCanvasHistoryConfirm": "Sind Sie sicher, dass Sie den Verlauf der Leinwand löschen möchten?", - "emptyTempImageFolder": "Temp-Image Ordner leeren", - "emptyFolder": "Leerer Ordner", - "emptyTempImagesFolderMessage": "Wenn Sie den Ordner für temporäre Bilder leeren, wird auch der Unified Canvas vollständig zurückgesetzt. Dies umfasst den gesamten Verlauf der Rückgängig-/Wiederherstellungsvorgänge, die Bilder im Bereitstellungsbereich und die Leinwand-Basisebene.", - "emptyTempImagesFolderConfirm": "Sind Sie sicher, dass Sie den temporären Ordner leeren wollen?", - "activeLayer": "Aktive Ebene", - "canvasScale": "Leinwand Maßstab", - "boundingBox": "Begrenzungsrahmen", - "scaledBoundingBox": "Skalierter Begrenzungsrahmen", - "boundingBoxPosition": "Begrenzungsrahmen Position", - "canvasDimensions": "Maße der Leinwand", - "canvasPosition": "Leinwandposition", - "cursorPosition": "Position des Cursors", - "previous": "Vorherige", - "next": "Nächste", - "accept": "Akzeptieren", - "showHide": "Einblenden/Ausblenden", - "discardAll": "Alles verwerfen", - "betaClear": "Löschen", - "betaDarkenOutside": "Außen abdunkeln", - "betaLimitToBox": "Begrenzung auf das Feld", - "betaPreserveMasked": "Maskiertes bewahren", - "antialiasing": "Kantenglättung", - "showResultsOn": "Zeige Ergebnisse (An)", - "showResultsOff": "Zeige Ergebnisse (Aus)" - }, - "accessibility": { - "modelSelect": "Model Auswahl", - "uploadImage": "Bild hochladen", - "previousImage": "Voriges Bild", - "useThisParameter": "Benutze diesen Parameter", - "copyMetadataJson": "Kopiere Metadaten JSON", - "zoomIn": "Vergrößern", - "rotateClockwise": "Im Uhrzeigersinn drehen", - "flipHorizontally": "Horizontal drehen", - "flipVertically": "Vertikal drehen", - "modifyConfig": "Optionen einstellen", - "toggleAutoscroll": "Auroscroll ein/ausschalten", - "toggleLogViewer": "Log Betrachter ein/ausschalten", - "showOptionsPanel": "Zeige Optionen", - "reset": "Zurücksetzten", - "nextImage": "Nächstes Bild", - "zoomOut": "Verkleinern", - "rotateCounterClockwise": "Gegen den Uhrzeigersinn verdrehen", - "showGalleryPanel": "Galeriefenster anzeigen", - "exitViewer": "Betrachten beenden", - "menu": "Menü", - "loadMore": "Mehr laden", - "invokeProgressBar": "Invoke Fortschrittsanzeige", - "mode": "Modus", - "resetUI": "$t(accessibility.reset) von UI", - "createIssue": "Ticket erstellen" - }, - "boards": { - "autoAddBoard": "Automatisches Hinzufügen zum Ordner", - "topMessage": "Dieser Ordner enthält Bilder die in den folgenden Funktionen verwendet werden:", - "move": "Bewegen", - "menuItemAutoAdd": "Automatisches Hinzufügen zu diesem Ordner", - "myBoard": "Meine Ordner", - "searchBoard": "Ordner durchsuchen...", - "noMatching": "Keine passenden Ordner", - "selectBoard": "Ordner aussuchen", - "cancel": "Abbrechen", - "addBoard": "Ordner hinzufügen", - "uncategorized": "Nicht kategorisiert", - "downloadBoard": "Ordner runterladen", - "changeBoard": "Ordner wechseln", - "loading": "Laden...", - "clearSearch": "Suche leeren", - "bottomMessage": "Durch das Löschen dieses Ordners und seiner Bilder werden alle Funktionen zurückgesetzt, die sie derzeit verwenden.", - "deleteBoardOnly": "Nur Ordner löschen", - "deleteBoard": "Löschen Ordner", - "deleteBoardAndImages": "Löschen Ordner und Bilder", - "deletedBoardsCannotbeRestored": "Gelöschte Ordner könnte nicht wiederhergestellt werden", - "movingImagesToBoard_one": "Verschiebe {{count}} Bild zu Ordner", - "movingImagesToBoard_other": "Verschiebe {{count}} Bilder in Ordner" - }, - "controlnet": { - "showAdvanced": "Zeige Erweitert", - "contentShuffleDescription": "Mischt den Inhalt von einem Bild", - "addT2IAdapter": "$t(common.t2iAdapter) hinzufügen", - "importImageFromCanvas": "Importieren Bild von Zeichenfläche", - "lineartDescription": "Konvertiere Bild zu Lineart", - "importMaskFromCanvas": "Importiere Maske von Zeichenfläche", - "hed": "HED", - "hideAdvanced": "Verstecke Erweitert", - "contentShuffle": "Inhalt mischen", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) ist aktiv, $t(common.t2iAdapter) ist deaktiviert", - "ipAdapterModel": "Adapter Modell", - "beginEndStepPercent": "Start / Ende Step Prozent", - "duplicate": "Kopieren", - "f": "F", - "h": "H", - "depthMidasDescription": "Tiefenmap erstellen mit Midas", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ist aktiv, $t(common.controlNet) ist deaktiviert", - "weight": "Breite", - "selectModel": "Wähle ein Modell", - "depthMidas": "Tiefe (Midas)", - "w": "W", - "addControlNet": "$t(common.controlNet) hinzufügen", - "none": "Kein", - "incompatibleBaseModel": "Inkompatibles Basismodell:", - "enableControlnet": "Aktiviere ControlNet", - "detectResolution": "Auflösung erkennen", - "controlNetT2IMutexDesc": "$t(common.controlNet) und $t(common.t2iAdapter) zur gleichen Zeit wird nicht unterstützt.", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "fill": "Füllen", - "addIPAdapter": "$t(common.ipAdapter) hinzufügen", - "colorMapDescription": "Erstelle eine Farbkarte von diesem Bild", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "imageResolution": "Bild Auflösung", - "depthZoe": "Tiefe (Zoe)", - "colorMap": "Farbe", - "lowThreshold": "Niedrige Schwelle", - "highThreshold": "Hohe Schwelle", - "toggleControlNet": "Schalten ControlNet um", - "delete": "Löschen", - "controlAdapter_one": "Control Adapter", - "controlAdapter_other": "Control Adapters", - "colorMapTileSize": "Tile Größe", - "depthZoeDescription": "Tiefenmap erstellen mit Zoe", - "setControlImageDimensions": "Setze Control Bild Auflösung auf Breite/Höhe", - "handAndFace": "Hand und Gesicht", - "enableIPAdapter": "Aktiviere IP Adapter", - "resize": "Größe ändern", - "resetControlImage": "Zurücksetzen vom Referenz Bild", - "balanced": "Ausgewogen", - "prompt": "Prompt", - "resizeMode": "Größenänderungsmodus", - "processor": "Prozessor", - "saveControlImage": "Speichere Referenz Bild", - "safe": "Speichern", - "ipAdapterImageFallback": "Kein IP Adapter Bild ausgewählt", - "resetIPAdapterImage": "Zurücksetzen vom IP Adapter Bild", - "pidi": "PIDI", - "normalBae": "Normales BAE", - "mlsdDescription": "Minimalistischer Liniensegmentdetektor", - "openPoseDescription": "Schätzung der menschlichen Pose mit Openpose", - "control": "Kontrolle", - "coarse": "Coarse", - "crop": "Zuschneiden", - "pidiDescription": "PIDI-Bildverarbeitung", - "mediapipeFace": "Mediapipe Gesichter", - "mlsd": "M-LSD", - "controlMode": "Steuermodus", - "cannyDescription": "Canny Ecken Erkennung", - "lineart": "Lineart", - "lineartAnimeDescription": "Lineart-Verarbeitung im Anime-Stil", - "minConfidence": "Minimales Vertrauen", - "megaControl": "Mega-Kontrolle", - "autoConfigure": "Prozessor automatisch konfigurieren", - "normalBaeDescription": "Normale BAE-Verarbeitung", - "noneDescription": "Es wurde keine Verarbeitung angewendet", - "openPose": "Openpose", - "lineartAnime": "Lineart Anime", - "mediapipeFaceDescription": "Gesichtserkennung mit Mediapipe", - "canny": "Canny", - "hedDescription": "Ganzheitlich verschachtelte Kantenerkennung", - "scribble": "Scribble", - "maxFaces": "Maximal Anzahl Gesichter" - }, - "queue": { - "status": "Status", - "cancelTooltip": "Aktuellen Aufgabe abbrechen", - "queueEmpty": "Warteschlange leer", - "in_progress": "In Arbeit", - "queueFront": "An den Anfang der Warteschlange tun", - "completed": "Fertig", - "queueBack": "In die Warteschlange", - "clearFailed": "Probleme beim leeren der Warteschlange", - "clearSucceeded": "Warteschlange geleert", - "pause": "Pause", - "cancelSucceeded": "Auftrag abgebrochen", - "queue": "Warteschlange", - "batch": "Stapel", - "pending": "Ausstehend", - "clear": "Leeren", - "prune": "Leeren", - "total": "Gesamt", - "canceled": "Abgebrochen", - "clearTooltip": "Abbrechen und alle Aufträge leeren", - "current": "Aktuell", - "failed": "Fehler", - "cancelItem": "Abbruch Auftrag", - "next": "Nächste", - "cancel": "Abbruch", - "session": "Sitzung", - "queueTotal": "{{total}} Gesamt", - "resume": "Wieder aufnehmen", - "item": "Auftrag", - "notReady": "Warteschlange noch nicht bereit", - "batchValues": "Stapel Werte", - "queueCountPrediction": "{{predicted}} zur Warteschlange hinzufügen", - "queuedCount": "{{pending}} wartenden Elemente", - "clearQueueAlertDialog": "Die Warteschlange leeren, stoppt den aktuellen Prozess und leert die Warteschlange komplett.", - "completedIn": "Fertig in", - "cancelBatchSucceeded": "Stapel abgebrochen", - "cancelBatch": "Stapel stoppen", - "enqueueing": "Stapel in der Warteschlange", - "queueMaxExceeded": "Maximum von {{max_queue_size}} Elementen erreicht, würde {{skip}} Elemente überspringen", - "cancelBatchFailed": "Problem beim Abbruch vom Stapel", - "clearQueueAlertDialog2": "bist du sicher die Warteschlange zu leeren?", - "pruneSucceeded": "{{item_count}} abgeschlossene Elemente aus der Warteschlange entfernt", - "pauseSucceeded": "Prozessor angehalten", - "cancelFailed": "Problem beim Stornieren des Auftrags", - "pauseFailed": "Problem beim Anhalten des Prozessors", - "front": "Vorne", - "pruneTooltip": "Bereinigen Sie {{item_count}} abgeschlossene Aufträge", - "resumeFailed": "Problem beim wieder aufnehmen von Prozessor", - "pruneFailed": "Problem beim leeren der Warteschlange", - "pauseTooltip": "Pause von Prozessor", - "back": "Hinten", - "resumeSucceeded": "Prozessor wieder aufgenommen", - "resumeTooltip": "Prozessor wieder aufnehmen", - "time": "Zeit" - }, - "metadata": { - "negativePrompt": "Negativ Beschreibung", - "metadata": "Meta-Data", - "strength": "Bild zu Bild stärke", - "imageDetails": "Bild Details", - "model": "Modell", - "noImageDetails": "Keine Bild Details gefunden", - "cfgScale": "CFG-Skala", - "fit": "Bild zu Bild passen", - "height": "Höhe", - "noMetaData": "Keine Meta-Data gefunden", - "width": "Breite", - "createdBy": "Erstellt von", - "steps": "Schritte", - "seamless": "Nahtlos", - "positivePrompt": "Positiver Prompt", - "generationMode": "Generierungsmodus", - "Threshold": "Noise Schwelle", - "seed": "Samen", - "perlin": "Perlin Noise", - "hiresFix": "Optimierung für hohe Auflösungen", - "initImage": "Erstes Bild", - "variations": "Samengewichtspaare", - "vae": "VAE", - "workflow": "Arbeitsablauf", - "scheduler": "Scheduler", - "noRecallParameters": "Es wurden keine Parameter zum Abrufen gefunden", - "recallParameters": "Recall Parameters" - }, - "popovers": { - "noiseUseCPU": { - "heading": "Nutze Prozessor rauschen" - }, - "paramModel": { - "heading": "Modell" - }, - "paramIterations": { - "heading": "Iterationen" - }, - "paramCFGScale": { - "heading": "CFG-Skala" - }, - "paramSteps": { - "heading": "Schritte" - }, - "lora": { - "heading": "LoRA Gewichte" - }, - "infillMethod": { - "heading": "Füllmethode" - }, - "paramVAE": { - "heading": "VAE" - } - }, - "ui": { - "lockRatio": "Verhältnis sperren", - "hideProgressImages": "Verstecke Prozess Bild", - "showProgressImages": "Zeige Prozess Bild" - }, - "invocationCache": { - "disable": "Deaktivieren", - "misses": "Cache Nötig", - "hits": "Cache Treffer", - "enable": "Aktivieren", - "clear": "Leeren", - "maxCacheSize": "Maximale Cache Größe", - "cacheSize": "Cache Größe" - }, - "embedding": { - "noMatchingEmbedding": "Keine passenden Embeddings", - "addEmbedding": "Embedding hinzufügen", - "incompatibleModel": "Inkompatibles Basismodell:", - "noEmbeddingsLoaded": "Kein Embedding geladen" - }, - "nodes": { - "booleanPolymorphicDescription": "Eine Sammlung boolescher Werte.", - "colorFieldDescription": "Eine RGBA-Farbe.", - "conditioningCollection": "Konditionierungssammlung", - "addNode": "Knoten hinzufügen", - "conditioningCollectionDescription": "Konditionierung kann zwischen Knoten weitergegeben werden.", - "colorPolymorphic": "Farbpolymorph", - "colorCodeEdgesHelp": "Farbkodieren Sie Kanten entsprechend ihren verbundenen Feldern", - "animatedEdges": "Animierte Kanten", - "booleanCollectionDescription": "Eine Sammlung boolescher Werte.", - "colorField": "Farbe", - "collectionItem": "Objekt in Sammlung", - "animatedEdgesHelp": "Animieren Sie ausgewählte Kanten und Kanten, die mit ausgewählten Knoten verbunden sind", - "cannotDuplicateConnection": "Es können keine doppelten Verbindungen erstellt werden", - "booleanPolymorphic": "Boolesche Polymorphie", - "colorPolymorphicDescription": "Eine Sammlung von Farben.", - "clipFieldDescription": "Tokenizer- und text_encoder-Untermodelle.", - "clipField": "Clip", - "colorCollection": "Eine Sammlung von Farben.", - "boolean": "Boolesche Werte", - "currentImage": "Aktuelles Bild", - "booleanDescription": "Boolesche Werte sind wahr oder falsch.", - "collection": "Sammlung", - "cannotConnectInputToInput": "Eingang kann nicht mit Eingang verbunden werden", - "conditioningField": "Konditionierung", - "cannotConnectOutputToOutput": "Ausgang kann nicht mit Ausgang verbunden werden", - "booleanCollection": "Boolesche Werte Sammlung", - "cannotConnectToSelf": "Es kann keine Verbindung zu sich selbst hergestellt werden", - "colorCodeEdges": "Farbkodierte Kanten", - "addNodeToolTip": "Knoten hinzufügen (Umschalt+A, Leertaste)", - "boardField": "Ordner", - "boardFieldDescription": "Ein Galerie Ordner" - }, - "hrf": { - "enableHrf": "Aktivieren Sie die Korrektur für hohe Auflösungen", - "upscaleMethod": "Vergrößerungsmethoden", - "enableHrfTooltip": "Generieren Sie mit einer niedrigeren Anfangsauflösung, skalieren Sie auf die Basisauflösung hoch und führen Sie dann Image-to-Image aus.", - "metadata": { - "strength": "Hochauflösender Fix Stärke", - "enabled": "Hochauflösender Fix aktiviert", - "method": "Hochauflösender Fix Methode" - }, - "hrf": "Hochauflösender Fix", - "hrfStrength": "Hochauflösende Fix Stärke", - "strengthTooltip": "Niedrigere Werte führen zu weniger Details, wodurch potenzielle Artefakte reduziert werden können." - }, - "models": { - "noMatchingModels": "Keine passenden Modelle", - "loading": "lade", - "noMatchingLoRAs": "Keine passenden LoRAs", - "noLoRAsAvailable": "Keine LoRAs verfügbar", - "noModelsAvailable": "Keine Modelle verfügbar", - "selectModel": "Wählen ein Modell aus", - "noRefinerModelsInstalled": "Keine SDXL Refiner-Modelle installiert", - "noLoRAsInstalled": "Keine LoRAs installiert", - "selectLoRA": "Wählen ein LoRA aus", - "esrganModel": "ESRGAN Modell", - "addLora": "LoRA hinzufügen" - } -} diff --git a/invokeai/frontend/web/dist/locales/en.json b/invokeai/frontend/web/dist/locales/en.json deleted file mode 100644 index f5f3f434f5..0000000000 --- a/invokeai/frontend/web/dist/locales/en.json +++ /dev/null @@ -1,1662 +0,0 @@ -{ - "accessibility": { - "copyMetadataJson": "Copy metadata JSON", - "createIssue": "Create Issue", - "exitViewer": "Exit Viewer", - "flipHorizontally": "Flip Horizontally", - "flipVertically": "Flip Vertically", - "invokeProgressBar": "Invoke progress bar", - "menu": "Menu", - "mode": "Mode", - "modelSelect": "Model Select", - "modifyConfig": "Modify Config", - "nextImage": "Next Image", - "previousImage": "Previous Image", - "reset": "Reset", - "resetUI": "$t(accessibility.reset) UI", - "rotateClockwise": "Rotate Clockwise", - "rotateCounterClockwise": "Rotate Counter-Clockwise", - "showGalleryPanel": "Show Gallery Panel", - "showOptionsPanel": "Show Side Panel", - "toggleAutoscroll": "Toggle autoscroll", - "toggleLogViewer": "Toggle Log Viewer", - "uploadImage": "Upload Image", - "useThisParameter": "Use this parameter", - "zoomIn": "Zoom In", - "zoomOut": "Zoom Out", - "loadMore": "Load More" - }, - "boards": { - "addBoard": "Add Board", - "autoAddBoard": "Auto-Add Board", - "bottomMessage": "Deleting this board and its images will reset any features currently using them.", - "cancel": "Cancel", - "changeBoard": "Change Board", - "clearSearch": "Clear Search", - "deleteBoard": "Delete Board", - "deleteBoardAndImages": "Delete Board and Images", - "deleteBoardOnly": "Delete Board Only", - "deletedBoardsCannotbeRestored": "Deleted boards cannot be restored", - "loading": "Loading...", - "menuItemAutoAdd": "Auto-add to this Board", - "move": "Move", - "movingImagesToBoard_one": "Moving {{count}} image to board:", - "movingImagesToBoard_other": "Moving {{count}} images to board:", - "myBoard": "My Board", - "noMatching": "No matching Boards", - "searchBoard": "Search Boards...", - "selectBoard": "Select a Board", - "topMessage": "This board contains images used in the following features:", - "uncategorized": "Uncategorized", - "downloadBoard": "Download Board" - }, - "common": { - "accept": "Accept", - "advanced": "Advanced", - "ai": "ai", - "areYouSure": "Are you sure?", - "auto": "Auto", - "back": "Back", - "batch": "Batch Manager", - "cancel": "Cancel", - "copyError": "$t(gallery.copy) Error", - "close": "Close", - "on": "On", - "checkpoint": "Checkpoint", - "communityLabel": "Community", - "controlNet": "ControlNet", - "controlAdapter": "Control Adapter", - "data": "Data", - "delete": "Delete", - "details": "Details", - "direction": "Direction", - "ipAdapter": "IP Adapter", - "t2iAdapter": "T2I Adapter", - "darkMode": "Dark Mode", - "discordLabel": "Discord", - "dontAskMeAgain": "Don't ask me again", - "error": "Error", - "file": "File", - "folder": "Folder", - "format": "format", - "generate": "Generate", - "githubLabel": "Github", - "hotkeysLabel": "Hotkeys", - "imagePrompt": "Image Prompt", - "imageFailedToLoad": "Unable to Load Image", - "img2img": "Image To Image", - "inpaint": "inpaint", - "input": "Input", - "installed": "Installed", - "langArabic": "العربية", - "langBrPortuguese": "Português do Brasil", - "langDutch": "Nederlands", - "langEnglish": "English", - "langFrench": "Français", - "langGerman": "German", - "langHebrew": "Hebrew", - "langItalian": "Italiano", - "langJapanese": "日本語", - "langKorean": "한국어", - "langPolish": "Polski", - "langPortuguese": "Português", - "langRussian": "Русский", - "langSimplifiedChinese": "简体中文", - "langSpanish": "Español", - "languagePickerLabel": "Language", - "langUkranian": "Украї́нська", - "lightMode": "Light Mode", - "linear": "Linear", - "load": "Load", - "loading": "Loading", - "loadingInvokeAI": "Loading Invoke AI", - "learnMore": "Learn More", - "modelManager": "Model Manager", - "nodeEditor": "Node Editor", - "nodes": "Workflow Editor", - "nodesDesc": "A node based system for the generation of images is under development currently. Stay tuned for updates about this amazing feature.", - "notInstalled": "Not $t(common.installed)", - "openInNewTab": "Open in New Tab", - "orderBy": "Order By", - "outpaint": "outpaint", - "outputs": "Outputs", - "postProcessDesc1": "Invoke AI offers a wide variety of post processing features. Image Upscaling and Face Restoration are already available in the WebUI. You can access them from the Advanced Options menu of the Text To Image and Image To Image tabs. You can also process images directly, using the image action buttons above the current image display or in the viewer.", - "postProcessDesc2": "A dedicated UI will be released soon to facilitate more advanced post processing workflows.", - "postProcessDesc3": "The Invoke AI Command Line Interface offers various other features including Embiggen.", - "postprocessing": "Post Processing", - "postProcessing": "Post Processing", - "random": "Random", - "reportBugLabel": "Report Bug", - "safetensors": "Safetensors", - "save": "Save", - "saveAs": "Save As", - "settingsLabel": "Settings", - "simple": "Simple", - "somethingWentWrong": "Something went wrong", - "statusConnected": "Connected", - "statusConvertingModel": "Converting Model", - "statusDisconnected": "Disconnected", - "statusError": "Error", - "statusGenerating": "Generating", - "statusGeneratingImageToImage": "Generating Image To Image", - "statusGeneratingInpainting": "Generating Inpainting", - "statusGeneratingOutpainting": "Generating Outpainting", - "statusGeneratingTextToImage": "Generating Text To Image", - "statusGenerationComplete": "Generation Complete", - "statusIterationComplete": "Iteration Complete", - "statusLoadingModel": "Loading Model", - "statusMergedModels": "Models Merged", - "statusMergingModels": "Merging Models", - "statusModelChanged": "Model Changed", - "statusModelConverted": "Model Converted", - "statusPreparing": "Preparing", - "statusProcessing": "Processing", - "statusProcessingCanceled": "Processing Canceled", - "statusProcessingComplete": "Processing Complete", - "statusRestoringFaces": "Restoring Faces", - "statusRestoringFacesCodeFormer": "Restoring Faces (CodeFormer)", - "statusRestoringFacesGFPGAN": "Restoring Faces (GFPGAN)", - "statusSavingImage": "Saving Image", - "statusUpscaling": "Upscaling", - "statusUpscalingESRGAN": "Upscaling (ESRGAN)", - "template": "Template", - "training": "Training", - "trainingDesc1": "A dedicated workflow for training your own embeddings and checkpoints using Textual Inversion and Dreambooth from the web interface.", - "trainingDesc2": "InvokeAI already supports training custom embeddourings using Textual Inversion using the main script.", - "txt2img": "Text To Image", - "unifiedCanvas": "Unified Canvas", - "unknown": "Unknown", - "upload": "Upload", - "updated": "Updated", - "created": "Created", - "prevPage": "Previous Page", - "nextPage": "Next Page", - "unknownError": "Unknown Error", - "unsaved": "Unsaved" - }, - "controlnet": { - "controlAdapter_one": "Control Adapter", - "controlAdapter_other": "Control Adapters", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "addControlNet": "Add $t(common.controlNet)", - "addIPAdapter": "Add $t(common.ipAdapter)", - "addT2IAdapter": "Add $t(common.t2iAdapter)", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) enabled, $t(common.t2iAdapter)s disabled", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) enabled, $t(common.controlNet)s disabled", - "controlNetT2IMutexDesc": "$t(common.controlNet) and $t(common.t2iAdapter) at same time is currently unsupported.", - "amult": "a_mult", - "autoConfigure": "Auto configure processor", - "balanced": "Balanced", - "beginEndStepPercent": "Begin / End Step Percentage", - "bgth": "bg_th", - "canny": "Canny", - "cannyDescription": "Canny edge detection", - "colorMap": "Color", - "colorMapDescription": "Generates a color map from the image", - "coarse": "Coarse", - "contentShuffle": "Content Shuffle", - "contentShuffleDescription": "Shuffles the content in an image", - "control": "Control", - "controlMode": "Control Mode", - "crop": "Crop", - "delete": "Delete", - "depthMidas": "Depth (Midas)", - "depthMidasDescription": "Depth map generation using Midas", - "depthZoe": "Depth (Zoe)", - "depthZoeDescription": "Depth map generation using Zoe", - "detectResolution": "Detect Resolution", - "duplicate": "Duplicate", - "enableControlnet": "Enable ControlNet", - "f": "F", - "fill": "Fill", - "h": "H", - "handAndFace": "Hand and Face", - "hed": "HED", - "hedDescription": "Holistically-Nested Edge Detection", - "hideAdvanced": "Hide Advanced", - "highThreshold": "High Threshold", - "imageResolution": "Image Resolution", - "colorMapTileSize": "Tile Size", - "importImageFromCanvas": "Import Image From Canvas", - "importMaskFromCanvas": "Import Mask From Canvas", - "incompatibleBaseModel": "Incompatible base model:", - "lineart": "Lineart", - "lineartAnime": "Lineart Anime", - "lineartAnimeDescription": "Anime-style lineart processing", - "lineartDescription": "Converts image to lineart", - "lowThreshold": "Low Threshold", - "maxFaces": "Max Faces", - "mediapipeFace": "Mediapipe Face", - "mediapipeFaceDescription": "Face detection using Mediapipe", - "megaControl": "Mega Control", - "minConfidence": "Min Confidence", - "mlsd": "M-LSD", - "mlsdDescription": "Minimalist Line Segment Detector", - "none": "None", - "noneDescription": "No processing applied", - "normalBae": "Normal BAE", - "normalBaeDescription": "Normal BAE processing", - "openPose": "Openpose", - "openPoseDescription": "Human pose estimation using Openpose", - "pidi": "PIDI", - "pidiDescription": "PIDI image processing", - "processor": "Processor", - "prompt": "Prompt", - "resetControlImage": "Reset Control Image", - "resize": "Resize", - "resizeMode": "Resize Mode", - "safe": "Safe", - "saveControlImage": "Save Control Image", - "scribble": "scribble", - "selectModel": "Select a model", - "setControlImageDimensions": "Set Control Image Dimensions To W/H", - "showAdvanced": "Show Advanced", - "toggleControlNet": "Toggle this ControlNet", - "w": "W", - "weight": "Weight", - "enableIPAdapter": "Enable IP Adapter", - "ipAdapterModel": "Adapter Model", - "resetIPAdapterImage": "Reset IP Adapter Image", - "ipAdapterImageFallback": "No IP Adapter Image Selected" - }, - "hrf": { - "hrf": "High Resolution Fix", - "enableHrf": "Enable High Resolution Fix", - "enableHrfTooltip": "Generate with a lower initial resolution, upscale to the base resolution, then run Image-to-Image.", - "upscaleMethod": "Upscale Method", - "hrfStrength": "High Resolution Fix Strength", - "strengthTooltip": "Lower values result in fewer details, which may reduce potential artifacts.", - "metadata": { - "enabled": "High Resolution Fix Enabled", - "strength": "High Resolution Fix Strength", - "method": "High Resolution Fix Method" - } - }, - "embedding": { - "addEmbedding": "Add Embedding", - "incompatibleModel": "Incompatible base model:", - "noEmbeddingsLoaded": "No Embeddings Loaded", - "noMatchingEmbedding": "No matching Embeddings" - }, - "queue": { - "queue": "Queue", - "queueFront": "Add to Front of Queue", - "queueBack": "Add to Queue", - "queueCountPrediction": "Add {{predicted}} to Queue", - "queueMaxExceeded": "Max of {{max_queue_size}} exceeded, would skip {{skip}}", - "queuedCount": "{{pending}} Pending", - "queueTotal": "{{total}} Total", - "queueEmpty": "Queue Empty", - "enqueueing": "Queueing Batch", - "resume": "Resume", - "resumeTooltip": "Resume Processor", - "resumeSucceeded": "Processor Resumed", - "resumeFailed": "Problem Resuming Processor", - "pause": "Pause", - "pauseTooltip": "Pause Processor", - "pauseSucceeded": "Processor Paused", - "pauseFailed": "Problem Pausing Processor", - "cancel": "Cancel", - "cancelTooltip": "Cancel Current Item", - "cancelSucceeded": "Item Canceled", - "cancelFailed": "Problem Canceling Item", - "prune": "Prune", - "pruneTooltip": "Prune {{item_count}} Completed Items", - "pruneSucceeded": "Pruned {{item_count}} Completed Items from Queue", - "pruneFailed": "Problem Pruning Queue", - "clear": "Clear", - "clearTooltip": "Cancel and Clear All Items", - "clearSucceeded": "Queue Cleared", - "clearFailed": "Problem Clearing Queue", - "cancelBatch": "Cancel Batch", - "cancelItem": "Cancel Item", - "cancelBatchSucceeded": "Batch Canceled", - "cancelBatchFailed": "Problem Canceling Batch", - "clearQueueAlertDialog": "Clearing the queue immediately cancels any processing items and clears the queue entirely.", - "clearQueueAlertDialog2": "Are you sure you want to clear the queue?", - "current": "Current", - "next": "Next", - "status": "Status", - "total": "Total", - "time": "Time", - "pending": "Pending", - "in_progress": "In Progress", - "completed": "Completed", - "failed": "Failed", - "canceled": "Canceled", - "completedIn": "Completed in", - "batch": "Batch", - "batchFieldValues": "Batch Field Values", - "item": "Item", - "session": "Session", - "batchValues": "Batch Values", - "notReady": "Unable to Queue", - "batchQueued": "Batch Queued", - "batchQueuedDesc_one": "Added {{count}} sessions to {{direction}} of queue", - "batchQueuedDesc_other": "Added {{count}} sessions to {{direction}} of queue", - "front": "front", - "back": "back", - "batchFailedToQueue": "Failed to Queue Batch", - "graphQueued": "Graph queued", - "graphFailedToQueue": "Failed to queue graph" - }, - "invocationCache": { - "invocationCache": "Invocation Cache", - "cacheSize": "Cache Size", - "maxCacheSize": "Max Cache Size", - "hits": "Cache Hits", - "misses": "Cache Misses", - "clear": "Clear", - "clearSucceeded": "Invocation Cache Cleared", - "clearFailed": "Problem Clearing Invocation Cache", - "enable": "Enable", - "enableSucceeded": "Invocation Cache Enabled", - "enableFailed": "Problem Enabling Invocation Cache", - "disable": "Disable", - "disableSucceeded": "Invocation Cache Disabled", - "disableFailed": "Problem Disabling Invocation Cache", - "useCache": "Use Cache" - }, - "gallery": { - "allImagesLoaded": "All Images Loaded", - "assets": "Assets", - "autoAssignBoardOnClick": "Auto-Assign Board on Click", - "autoSwitchNewImages": "Auto-Switch to New Images", - "copy": "Copy", - "currentlyInUse": "This image is currently in use in the following features:", - "drop": "Drop", - "dropOrUpload": "$t(gallery.drop) or Upload", - "dropToUpload": "$t(gallery.drop) to Upload", - "deleteImage": "Delete Image", - "deleteImageBin": "Deleted images will be sent to your operating system's Bin.", - "deleteImagePermanent": "Deleted images cannot be restored.", - "download": "Download", - "featuresWillReset": "If you delete this image, those features will immediately be reset.", - "galleryImageResetSize": "Reset Size", - "galleryImageSize": "Image Size", - "gallerySettings": "Gallery Settings", - "generations": "Generations", - "image": "image", - "loading": "Loading", - "loadMore": "Load More", - "maintainAspectRatio": "Maintain Aspect Ratio", - "noImageSelected": "No Image Selected", - "noImagesInGallery": "No Images to Display", - "setCurrentImage": "Set as Current Image", - "showGenerations": "Show Generations", - "showUploads": "Show Uploads", - "singleColumnLayout": "Single Column Layout", - "starImage": "Star Image", - "unstarImage": "Unstar Image", - "unableToLoad": "Unable to load Gallery", - "uploads": "Uploads", - "deleteSelection": "Delete Selection", - "downloadSelection": "Download Selection", - "preparingDownload": "Preparing Download", - "preparingDownloadFailed": "Problem Preparing Download", - "problemDeletingImages": "Problem Deleting Images", - "problemDeletingImagesDesc": "One or more images could not be deleted" - }, - "hotkeys": { - "acceptStagingImage": { - "desc": "Accept Current Staging Area Image", - "title": "Accept Staging Image" - }, - "addNodes": { - "desc": "Opens the add node menu", - "title": "Add Nodes" - }, - "appHotkeys": "App Hotkeys", - "cancel": { - "desc": "Cancel image generation", - "title": "Cancel" - }, - "changeTabs": { - "desc": "Switch to another workspace", - "title": "Change Tabs" - }, - "clearMask": { - "desc": "Clear the entire mask", - "title": "Clear Mask" - }, - "closePanels": { - "desc": "Closes open panels", - "title": "Close Panels" - }, - "colorPicker": { - "desc": "Selects the canvas color picker", - "title": "Select Color Picker" - }, - "consoleToggle": { - "desc": "Open and close console", - "title": "Console Toggle" - }, - "copyToClipboard": { - "desc": "Copy current canvas to clipboard", - "title": "Copy to Clipboard" - }, - "decreaseBrushOpacity": { - "desc": "Decreases the opacity of the canvas brush", - "title": "Decrease Brush Opacity" - }, - "decreaseBrushSize": { - "desc": "Decreases the size of the canvas brush/eraser", - "title": "Decrease Brush Size" - }, - "decreaseGalleryThumbSize": { - "desc": "Decreases gallery thumbnails size", - "title": "Decrease Gallery Image Size" - }, - "deleteImage": { - "desc": "Delete the current image", - "title": "Delete Image" - }, - "downloadImage": { - "desc": "Download current canvas", - "title": "Download Image" - }, - "eraseBoundingBox": { - "desc": "Erases the bounding box area", - "title": "Erase Bounding Box" - }, - "fillBoundingBox": { - "desc": "Fills the bounding box with brush color", - "title": "Fill Bounding Box" - }, - "focusPrompt": { - "desc": "Focus the prompt input area", - "title": "Focus Prompt" - }, - "galleryHotkeys": "Gallery Hotkeys", - "generalHotkeys": "General Hotkeys", - "hideMask": { - "desc": "Hide and unhide mask", - "title": "Hide Mask" - }, - "increaseBrushOpacity": { - "desc": "Increases the opacity of the canvas brush", - "title": "Increase Brush Opacity" - }, - "increaseBrushSize": { - "desc": "Increases the size of the canvas brush/eraser", - "title": "Increase Brush Size" - }, - "increaseGalleryThumbSize": { - "desc": "Increases gallery thumbnails size", - "title": "Increase Gallery Image Size" - }, - "invoke": { - "desc": "Generate an image", - "title": "Invoke" - }, - "keyboardShortcuts": "Keyboard Shortcuts", - "maximizeWorkSpace": { - "desc": "Close panels and maximize work area", - "title": "Maximize Workspace" - }, - "mergeVisible": { - "desc": "Merge all visible layers of canvas", - "title": "Merge Visible" - }, - "moveTool": { - "desc": "Allows canvas navigation", - "title": "Move Tool" - }, - "nextImage": { - "desc": "Display the next image in gallery", - "title": "Next Image" - }, - "nextStagingImage": { - "desc": "Next Staging Area Image", - "title": "Next Staging Image" - }, - "nodesHotkeys": "Nodes Hotkeys", - "pinOptions": { - "desc": "Pin the options panel", - "title": "Pin Options" - }, - "previousImage": { - "desc": "Display the previous image in gallery", - "title": "Previous Image" - }, - "previousStagingImage": { - "desc": "Previous Staging Area Image", - "title": "Previous Staging Image" - }, - "quickToggleMove": { - "desc": "Temporarily toggles Move mode", - "title": "Quick Toggle Move" - }, - "redoStroke": { - "desc": "Redo a brush stroke", - "title": "Redo Stroke" - }, - "resetView": { - "desc": "Reset Canvas View", - "title": "Reset View" - }, - "restoreFaces": { - "desc": "Restore the current image", - "title": "Restore Faces" - }, - "saveToGallery": { - "desc": "Save current canvas to gallery", - "title": "Save To Gallery" - }, - "selectBrush": { - "desc": "Selects the canvas brush", - "title": "Select Brush" - }, - "selectEraser": { - "desc": "Selects the canvas eraser", - "title": "Select Eraser" - }, - "sendToImageToImage": { - "desc": "Send current image to Image to Image", - "title": "Send To Image To Image" - }, - "setParameters": { - "desc": "Use all parameters of the current image", - "title": "Set Parameters" - }, - "setPrompt": { - "desc": "Use the prompt of the current image", - "title": "Set Prompt" - }, - "setSeed": { - "desc": "Use the seed of the current image", - "title": "Set Seed" - }, - "showHideBoundingBox": { - "desc": "Toggle visibility of bounding box", - "title": "Show/Hide Bounding Box" - }, - "showInfo": { - "desc": "Show metadata info of the current image", - "title": "Show Info" - }, - "toggleGallery": { - "desc": "Open and close the gallery drawer", - "title": "Toggle Gallery" - }, - "toggleGalleryPin": { - "desc": "Pins and unpins the gallery to the UI", - "title": "Toggle Gallery Pin" - }, - "toggleLayer": { - "desc": "Toggles mask/base layer selection", - "title": "Toggle Layer" - }, - "toggleOptions": { - "desc": "Open and close the options panel", - "title": "Toggle Options" - }, - "toggleSnap": { - "desc": "Toggles Snap to Grid", - "title": "Toggle Snap" - }, - "toggleViewer": { - "desc": "Open and close Image Viewer", - "title": "Toggle Viewer" - }, - "undoStroke": { - "desc": "Undo a brush stroke", - "title": "Undo Stroke" - }, - "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", - "upscale": { - "desc": "Upscale the current image", - "title": "Upscale" - } - }, - "metadata": { - "cfgScale": "CFG scale", - "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)", - "createdBy": "Created By", - "fit": "Image to image fit", - "generationMode": "Generation Mode", - "height": "Height", - "hiresFix": "High Resolution Optimization", - "imageDetails": "Image Details", - "initImage": "Initial image", - "metadata": "Metadata", - "model": "Model", - "negativePrompt": "Negative Prompt", - "noImageDetails": "No image details found", - "noMetaData": "No metadata found", - "noRecallParameters": "No parameters to recall found", - "perlin": "Perlin Noise", - "positivePrompt": "Positive Prompt", - "recallParameters": "Recall Parameters", - "scheduler": "Scheduler", - "seamless": "Seamless", - "seed": "Seed", - "steps": "Steps", - "strength": "Image to image strength", - "Threshold": "Noise Threshold", - "variations": "Seed-weight pairs", - "vae": "VAE", - "width": "Width", - "workflow": "Workflow" - }, - "modelManager": { - "active": "active", - "addCheckpointModel": "Add Checkpoint / Safetensor Model", - "addDifference": "Add Difference", - "addDiffuserModel": "Add Diffusers", - "addManually": "Add Manually", - "addModel": "Add Model", - "addNew": "Add New", - "addNewModel": "Add New Model", - "addSelected": "Add Selected", - "advanced": "Advanced", - "allModels": "All Models", - "alpha": "Alpha", - "availableModels": "Available Models", - "baseModel": "Base Model", - "cached": "cached", - "cannotUseSpaces": "Cannot Use Spaces", - "checkpointFolder": "Checkpoint Folder", - "checkpointModels": "Checkpoints", - "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", - "clearCheckpointFolder": "Clear Checkpoint Folder", - "closeAdvanced": "Close Advanced", - "config": "Config", - "configValidationMsg": "Path to the config file of your model.", - "conversionNotSupported": "Conversion Not Supported", - "convert": "Convert", - "convertingModelBegin": "Converting Model. Please wait.", - "convertToDiffusers": "Convert To Diffusers", - "convertToDiffusersHelpText1": "This model will be converted to the 🧨 Diffusers format.", - "convertToDiffusersHelpText2": "This process will replace your Model Manager entry with the Diffusers version of the same model.", - "convertToDiffusersHelpText3": "Your checkpoint file on disk WILL be deleted if it is in InvokeAI root folder. If it is in a custom location, then it WILL NOT be deleted.", - "convertToDiffusersHelpText4": "This is a one time process only. It might take around 30s-60s depending on the specifications of your computer.", - "convertToDiffusersHelpText5": "Please make sure you have enough disk space. Models generally vary between 2GB-7GB in size.", - "convertToDiffusersHelpText6": "Do you wish to convert this model?", - "convertToDiffusersSaveLocation": "Save Location", - "custom": "Custom", - "customConfig": "Custom Config", - "customConfigFileLocation": "Custom Config File Location", - "customSaveLocation": "Custom Save Location", - "delete": "Delete", - "deleteConfig": "Delete Config", - "deleteModel": "Delete Model", - "deleteMsg1": "Are you sure you want to delete this model from InvokeAI?", - "deleteMsg2": "This WILL delete the model from disk if it is in the InvokeAI root folder. If you are using a custom location, then the model WILL NOT be deleted from disk.", - "description": "Description", - "descriptionValidationMsg": "Add a description for your model", - "deselectAll": "Deselect All", - "diffusersModels": "Diffusers", - "findModels": "Find Models", - "formMessageDiffusersModelLocation": "Diffusers Model Location", - "formMessageDiffusersModelLocationDesc": "Please enter at least one.", - "formMessageDiffusersVAELocation": "VAE Location", - "formMessageDiffusersVAELocationDesc": "If not provided, InvokeAI will look for the VAE file inside the model location given above.", - "height": "Height", - "heightValidationMsg": "Default height of your model.", - "ignoreMismatch": "Ignore Mismatches Between Selected Models", - "importModels": "Import Models", - "inpainting": "v1 Inpainting", - "interpolationType": "Interpolation Type", - "inverseSigmoid": "Inverse Sigmoid", - "invokeAIFolder": "Invoke AI Folder", - "invokeRoot": "InvokeAI folder", - "load": "Load", - "loraModels": "LoRAs", - "manual": "Manual", - "merge": "Merge", - "mergedModelCustomSaveLocation": "Custom Path", - "mergedModelName": "Merged Model Name", - "mergedModelSaveLocation": "Save Location", - "mergeModels": "Merge Models", - "model": "Model", - "modelAdded": "Model Added", - "modelConversionFailed": "Model Conversion Failed", - "modelConverted": "Model Converted", - "modelDeleted": "Model Deleted", - "modelDeleteFailed": "Failed to delete model", - "modelEntryDeleted": "Model Entry Deleted", - "modelExists": "Model Exists", - "modelLocation": "Model Location", - "modelLocationValidationMsg": "Provide the path to a local folder where your Diffusers Model is stored", - "modelManager": "Model Manager", - "modelMergeAlphaHelp": "Alpha controls blend strength for the models. Lower alpha values lead to lower influence of the second model.", - "modelMergeHeaderHelp1": "You can merge up to three different models to create a blend that suits your needs.", - "modelMergeHeaderHelp2": "Only Diffusers are available for merging. If you want to merge a checkpoint model, please convert it to Diffusers first.", - "modelMergeInterpAddDifferenceHelp": "In this mode, Model 3 is first subtracted from Model 2. The resulting version is blended with Model 1 with the alpha rate set above.", - "modelOne": "Model 1", - "modelsFound": "Models Found", - "modelsMerged": "Models Merged", - "modelsMergeFailed": "Model Merge Failed", - "modelsSynced": "Models Synced", - "modelSyncFailed": "Model Sync Failed", - "modelThree": "Model 3", - "modelTwo": "Model 2", - "modelType": "Model Type", - "modelUpdated": "Model Updated", - "modelUpdateFailed": "Model Update Failed", - "name": "Name", - "nameValidationMsg": "Enter a name for your model", - "noCustomLocationProvided": "No Custom Location Provided", - "noModels": "No Models Found", - "noModelSelected": "No Model Selected", - "noModelsFound": "No Models Found", - "none": "none", - "notLoaded": "not loaded", - "oliveModels": "Olives", - "onnxModels": "Onnx", - "pathToCustomConfig": "Path To Custom Config", - "pickModelType": "Pick Model Type", - "predictionType": "Prediction Type (for Stable Diffusion 2.x Models and occasional Stable Diffusion 1.x Models)", - "quickAdd": "Quick Add", - "repo_id": "Repo ID", - "repoIDValidationMsg": "Online repository of your model", - "safetensorModels": "SafeTensors", - "sameFolder": "Same folder", - "scanAgain": "Scan Again", - "scanForModels": "Scan For Models", - "search": "Search", - "selectAll": "Select All", - "selectAndAdd": "Select and Add Models Listed Below", - "selected": "Selected", - "selectFolder": "Select Folder", - "selectModel": "Select Model", - "settings": "Settings", - "showExisting": "Show Existing", - "sigmoid": "Sigmoid", - "simpleModelDesc": "Provide a path to a local Diffusers model, local checkpoint / safetensors model a HuggingFace Repo ID, or a checkpoint/diffusers model URL.", - "statusConverting": "Converting", - "syncModels": "Sync Models", - "syncModelsDesc": "If your models are out of sync with the backend, you can refresh them up using this option. This is generally handy in cases where you manually update your models.yaml file or add models to the InvokeAI root folder after the application has booted.", - "updateModel": "Update Model", - "useCustomConfig": "Use Custom Config", - "v1": "v1", - "v2_768": "v2 (768px)", - "v2_base": "v2 (512px)", - "vae": "VAE", - "vaeLocation": "VAE Location", - "vaeLocationValidationMsg": "Path to where your VAE is located.", - "vaePrecision": "VAE Precision", - "vaeRepoID": "VAE Repo ID", - "vaeRepoIDValidationMsg": "Online repository of your VAE", - "variant": "Variant", - "weightedSum": "Weighted Sum", - "width": "Width", - "widthValidationMsg": "Default width of your model." - }, - "models": { - "addLora": "Add LoRA", - "esrganModel": "ESRGAN Model", - "loading": "loading", - "noLoRAsAvailable": "No LoRAs available", - "noLoRAsLoaded": "No LoRAs Loaded", - "noMatchingLoRAs": "No matching LoRAs", - "noMatchingModels": "No matching Models", - "noModelsAvailable": "No models available", - "selectLoRA": "Select a LoRA", - "selectModel": "Select a Model", - "noLoRAsInstalled": "No LoRAs installed", - "noRefinerModelsInstalled": "No SDXL Refiner models installed" - }, - "nodes": { - "addNode": "Add Node", - "addNodeToolTip": "Add Node (Shift+A, Space)", - "addLinearView": "Add to Linear View", - "animatedEdges": "Animated Edges", - "animatedEdgesHelp": "Animate selected edges and edges connected to selected nodes", - "boardField": "Board", - "boardFieldDescription": "A gallery board", - "boolean": "Booleans", - "booleanCollection": "Boolean Collection", - "booleanCollectionDescription": "A collection of booleans.", - "booleanDescription": "Booleans are true or false.", - "booleanPolymorphic": "Boolean Polymorphic", - "booleanPolymorphicDescription": "A collection of booleans.", - "cannotConnectInputToInput": "Cannot connect input to input", - "cannotConnectOutputToOutput": "Cannot connect output to output", - "cannotConnectToSelf": "Cannot connect to self", - "cannotDuplicateConnection": "Cannot create duplicate connections", - "nodePack": "Node pack", - "clipField": "Clip", - "clipFieldDescription": "Tokenizer and text_encoder submodels.", - "collection": "Collection", - "collectionFieldType": "{{name}} Collection", - "collectionOrScalarFieldType": "{{name}} Collection|Scalar", - "collectionDescription": "TODO", - "collectionItem": "Collection Item", - "collectionItemDescription": "TODO", - "colorCodeEdges": "Color-Code Edges", - "colorCodeEdgesHelp": "Color-code edges according to their connected fields", - "colorCollection": "A collection of colors.", - "colorCollectionDescription": "TODO", - "colorField": "Color", - "colorFieldDescription": "A RGBA color.", - "colorPolymorphic": "Color Polymorphic", - "colorPolymorphicDescription": "A collection of colors.", - "conditioningCollection": "Conditioning Collection", - "conditioningCollectionDescription": "Conditioning may be passed between nodes.", - "conditioningField": "Conditioning", - "conditioningFieldDescription": "Conditioning may be passed between nodes.", - "conditioningPolymorphic": "Conditioning Polymorphic", - "conditioningPolymorphicDescription": "Conditioning may be passed between nodes.", - "connectionWouldCreateCycle": "Connection would create a cycle", - "controlCollection": "Control Collection", - "controlCollectionDescription": "Control info passed between nodes.", - "controlField": "Control", - "controlFieldDescription": "Control info passed between nodes.", - "currentImage": "Current Image", - "currentImageDescription": "Displays the current image in the Node Editor", - "denoiseMaskField": "Denoise Mask", - "denoiseMaskFieldDescription": "Denoise Mask may be passed between nodes", - "doesNotExist": "does not exist", - "downloadWorkflow": "Download Workflow JSON", - "edge": "Edge", - "enum": "Enum", - "enumDescription": "Enums are values that may be one of a number of options.", - "executionStateCompleted": "Completed", - "executionStateError": "Error", - "executionStateInProgress": "In Progress", - "fieldTypesMustMatch": "Field types must match", - "fitViewportNodes": "Fit View", - "float": "Float", - "floatCollection": "Float Collection", - "floatCollectionDescription": "A collection of floats.", - "floatDescription": "Floats are numbers with a decimal point.", - "floatPolymorphic": "Float Polymorphic", - "floatPolymorphicDescription": "A collection of floats.", - "fullyContainNodes": "Fully Contain Nodes to Select", - "fullyContainNodesHelp": "Nodes must be fully inside the selection box to be selected", - "hideGraphNodes": "Hide Graph Overlay", - "hideLegendNodes": "Hide Field Type Legend", - "hideMinimapnodes": "Hide MiniMap", - "imageCollection": "Image Collection", - "imageCollectionDescription": "A collection of images.", - "imageField": "Image", - "imageFieldDescription": "Images may be passed between nodes.", - "imagePolymorphic": "Image Polymorphic", - "imagePolymorphicDescription": "A collection of images.", - "inputField": "Input Field", - "inputFields": "Input Fields", - "inputMayOnlyHaveOneConnection": "Input may only have one connection", - "inputNode": "Input Node", - "integer": "Integer", - "integerCollection": "Integer Collection", - "integerCollectionDescription": "A collection of integers.", - "integerDescription": "Integers are whole numbers, without a decimal point.", - "integerPolymorphic": "Integer Polymorphic", - "integerPolymorphicDescription": "A collection of integers.", - "invalidOutputSchema": "Invalid output schema", - "ipAdapter": "IP-Adapter", - "ipAdapterCollection": "IP-Adapters Collection", - "ipAdapterCollectionDescription": "A collection of IP-Adapters.", - "ipAdapterDescription": "An Image Prompt Adapter (IP-Adapter).", - "ipAdapterModel": "IP-Adapter Model", - "ipAdapterModelDescription": "IP-Adapter Model Field", - "ipAdapterPolymorphic": "IP-Adapter Polymorphic", - "ipAdapterPolymorphicDescription": "A collection of IP-Adapters.", - "latentsCollection": "Latents Collection", - "latentsCollectionDescription": "Latents may be passed between nodes.", - "latentsField": "Latents", - "latentsFieldDescription": "Latents may be passed between nodes.", - "latentsPolymorphic": "Latents Polymorphic", - "latentsPolymorphicDescription": "Latents may be passed between nodes.", - "loadingNodes": "Loading Nodes...", - "loadWorkflow": "Load Workflow", - "noWorkflow": "No Workflow", - "loRAModelField": "LoRA", - "loRAModelFieldDescription": "TODO", - "mainModelField": "Model", - "mainModelFieldDescription": "TODO", - "maybeIncompatible": "May be Incompatible With Installed", - "mismatchedVersion": "Invalid node: node {{node}} of type {{type}} has mismatched version (try updating?)", - "missingCanvaInitImage": "Missing canvas init image", - "missingCanvaInitMaskImages": "Missing canvas init and mask images", - "missingTemplate": "Invalid node: node {{node}} of type {{type}} missing template (not installed?)", - "sourceNodeDoesNotExist": "Invalid edge: source/output node {{node}} does not exist", - "targetNodeDoesNotExist": "Invalid edge: target/input node {{node}} does not exist", - "sourceNodeFieldDoesNotExist": "Invalid edge: source/output field {{node}}.{{field}} does not exist", - "targetNodeFieldDoesNotExist": "Invalid edge: target/input field {{node}}.{{field}} does not exist", - "deletedInvalidEdge": "Deleted invalid edge {{source}} -> {{target}}", - "noConnectionData": "No connection data", - "noConnectionInProgress": "No connection in progress", - "node": "Node", - "nodeOutputs": "Node Outputs", - "nodeSearch": "Search for nodes", - "nodeTemplate": "Node Template", - "nodeType": "Node Type", - "noFieldsLinearview": "No fields added to Linear View", - "noFieldType": "No field type", - "noImageFoundState": "No initial image found in state", - "noMatchingNodes": "No matching nodes", - "noNodeSelected": "No node selected", - "nodeOpacity": "Node Opacity", - "nodeVersion": "Node Version", - "noOutputRecorded": "No outputs recorded", - "noOutputSchemaName": "No output schema name found in ref object", - "notes": "Notes", - "notesDescription": "Add notes about your workflow", - "oNNXModelField": "ONNX Model", - "oNNXModelFieldDescription": "ONNX model field.", - "outputField": "Output Field", - "outputFieldInInput": "Output field in input", - "outputFields": "Output Fields", - "outputNode": "Output node", - "outputSchemaNotFound": "Output schema not found", - "pickOne": "Pick One", - "problemReadingMetadata": "Problem reading metadata from image", - "problemReadingWorkflow": "Problem reading workflow from image", - "problemSettingTitle": "Problem Setting Title", - "reloadNodeTemplates": "Reload Node Templates", - "removeLinearView": "Remove from Linear View", - "newWorkflow": "New Workflow", - "newWorkflowDesc": "Create a new workflow?", - "newWorkflowDesc2": "Your current workflow has unsaved changes.", - "scheduler": "Scheduler", - "schedulerDescription": "TODO", - "sDXLMainModelField": "SDXL Model", - "sDXLMainModelFieldDescription": "SDXL model field.", - "sDXLRefinerModelField": "Refiner Model", - "sDXLRefinerModelFieldDescription": "TODO", - "showGraphNodes": "Show Graph Overlay", - "showLegendNodes": "Show Field Type Legend", - "showMinimapnodes": "Show MiniMap", - "skipped": "Skipped", - "skippedReservedInput": "Skipped reserved input field", - "skippedReservedOutput": "Skipped reserved output field", - "skippingInputNoTemplate": "Skipping input field with no template", - "skippingReservedFieldType": "Skipping reserved field type", - "skippingUnknownInputType": "Skipping unknown input field type", - "skippingUnknownOutputType": "Skipping unknown output field type", - "snapToGrid": "Snap to Grid", - "snapToGridHelp": "Snap nodes to grid when moved", - "sourceNode": "Source node", - "string": "String", - "stringCollection": "String Collection", - "stringCollectionDescription": "A collection of strings.", - "stringDescription": "Strings are text.", - "stringPolymorphic": "String Polymorphic", - "stringPolymorphicDescription": "A collection of strings.", - "unableToLoadWorkflow": "Unable to Load Workflow", - "unableToParseEdge": "Unable to parse edge", - "unableToParseNode": "Unable to parse node", - "unableToUpdateNode": "Unable to update node", - "unableToValidateWorkflow": "Unable to Validate Workflow", - "unableToMigrateWorkflow": "Unable to Migrate Workflow", - "unknownErrorValidatingWorkflow": "Unknown error validating workflow", - "inputFieldTypeParseError": "Unable to parse type of input field {{node}}.{{field}} ({{message}})", - "outputFieldTypeParseError": "Unable to parse type of output field {{node}}.{{field}} ({{message}})", - "unableToExtractSchemaNameFromRef": "unable to extract schema name from ref", - "unsupportedArrayItemType": "unsupported array item type \"{{type}}\"", - "unsupportedAnyOfLength": "too many union members ({{count}})", - "unsupportedMismatchedUnion": "mismatched CollectionOrScalar type with base types {{firstType}} and {{secondType}}", - "unableToParseFieldType": "unable to parse field type", - "unableToExtractEnumOptions": "unable to extract enum options", - "uNetField": "UNet", - "uNetFieldDescription": "UNet submodel.", - "unhandledInputProperty": "Unhandled input property", - "unhandledOutputProperty": "Unhandled output property", - "unknownField": "Unknown field", - "unknownFieldType": "$t(nodes.unknownField) type: {{type}}", - "unknownNode": "Unknown Node", - "unknownNodeType": "Unknown node type", - "unknownTemplate": "Unknown Template", - "unknownInput": "Unknown input: {{name}}", - "unkownInvocation": "Unknown Invocation type", - "unknownOutput": "Unknown output: {{name}}", - "updateNode": "Update Node", - "updateApp": "Update App", - "updateAllNodes": "Update Nodes", - "allNodesUpdated": "All Nodes Updated", - "unableToUpdateNodes_one": "Unable to update {{count}} node", - "unableToUpdateNodes_other": "Unable to update {{count}} nodes", - "vaeField": "Vae", - "vaeFieldDescription": "Vae submodel.", - "vaeModelField": "VAE", - "vaeModelFieldDescription": "TODO", - "validateConnections": "Validate Connections and Graph", - "validateConnectionsHelp": "Prevent invalid connections from being made, and invalid graphs from being invoked", - "unableToGetWorkflowVersion": "Unable to get workflow schema version", - "unrecognizedWorkflowVersion": "Unrecognized workflow schema version {{version}}", - "version": "Version", - "versionUnknown": " Version Unknown", - "workflow": "Workflow", - "workflowAuthor": "Author", - "workflowContact": "Contact", - "workflowDescription": "Short Description", - "workflowName": "Name", - "workflowNotes": "Notes", - "workflowSettings": "Workflow Editor Settings", - "workflowTags": "Tags", - "workflowValidation": "Workflow Validation Error", - "workflowVersion": "Version", - "zoomInNodes": "Zoom In", - "zoomOutNodes": "Zoom Out", - "betaDesc": "This invocation is in beta. Until it is stable, it may have breaking changes during app updates. We plan to support this invocation long-term.", - "prototypeDesc": "This invocation is a prototype. It may have breaking changes during app updates and may be removed at any time." - }, - "parameters": { - "aspectRatio": "Aspect Ratio", - "aspectRatioFree": "Free", - "boundingBoxHeader": "Bounding Box", - "boundingBoxHeight": "Bounding Box Height", - "boundingBoxWidth": "Bounding Box Width", - "cancel": { - "cancel": "Cancel", - "immediate": "Cancel immediately", - "isScheduled": "Canceling", - "schedule": "Cancel after current iteration", - "setType": "Set cancel type" - }, - "cfgScale": "CFG Scale", - "cfgRescaleMultiplier": "CFG Rescale Multiplier", - "cfgRescale": "CFG Rescale", - "clipSkip": "CLIP Skip", - "clipSkipWithLayerCount": "CLIP Skip {{layerCount}}", - "closeViewer": "Close Viewer", - "codeformerFidelity": "Fidelity", - "coherenceMode": "Mode", - "coherencePassHeader": "Coherence Pass", - "coherenceSteps": "Steps", - "coherenceStrength": "Strength", - "compositingSettingsHeader": "Compositing Settings", - "controlNetControlMode": "Control Mode", - "copyImage": "Copy Image", - "copyImageToLink": "Copy Image To Link", - "denoisingStrength": "Denoising Strength", - "downloadImage": "Download Image", - "enableNoiseSettings": "Enable Noise Settings", - "faceRestoration": "Face Restoration", - "general": "General", - "height": "Height", - "hidePreview": "Hide Preview", - "hiresOptim": "High Res Optimization", - "hiresStrength": "High Res Strength", - "hSymmetryStep": "H Symmetry Step", - "imageFit": "Fit Initial Image To Output Size", - "images": "Images", - "imageToImage": "Image to Image", - "img2imgStrength": "Image To Image Strength", - "infillMethod": "Infill Method", - "infillScalingHeader": "Infill and Scaling", - "info": "Info", - "initialImage": "Initial Image", - "invoke": { - "addingImagesTo": "Adding images to", - "invoke": "Invoke", - "missingFieldTemplate": "Missing field template", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} missing input", - "missingNodeTemplate": "Missing node template", - "noControlImageForControlAdapter": "Control Adapter #{{number}} has no control image", - "noInitialImageSelected": "No initial image selected", - "noModelForControlAdapter": "Control Adapter #{{number}} has no model selected.", - "incompatibleBaseModelForControlAdapter": "Control Adapter #{{number}} model is invalid with main model.", - "noModelSelected": "No model selected", - "noPrompts": "No prompts generated", - "noNodesInGraph": "No nodes in graph", - "readyToInvoke": "Ready to Invoke", - "systemBusy": "System busy", - "systemDisconnected": "System disconnected", - "unableToInvoke": "Unable to Invoke" - }, - "maskAdjustmentsHeader": "Mask Adjustments", - "maskBlur": "Blur", - "maskBlurMethod": "Blur Method", - "maskEdge": "Mask Edge", - "negativePromptPlaceholder": "Negative Prompt", - "noiseSettings": "Noise", - "noiseThreshold": "Noise Threshold", - "openInViewer": "Open In Viewer", - "otherOptions": "Other Options", - "patchmatchDownScaleSize": "Downscale", - "perlinNoise": "Perlin Noise", - "positivePromptPlaceholder": "Positive Prompt", - "randomizeSeed": "Randomize Seed", - "manualSeed": "Manual Seed", - "randomSeed": "Random Seed", - "restoreFaces": "Restore Faces", - "iterations": "Iterations", - "iterationsWithCount_one": "{{count}} Iteration", - "iterationsWithCount_other": "{{count}} Iterations", - "scale": "Scale", - "scaleBeforeProcessing": "Scale Before Processing", - "scaledHeight": "Scaled H", - "scaledWidth": "Scaled W", - "scheduler": "Scheduler", - "seamCorrectionHeader": "Seam Correction", - "seamHighThreshold": "High", - "seamlessTiling": "Seamless Tiling", - "seamlessXAxis": "X Axis", - "seamlessYAxis": "Y Axis", - "seamlessX": "Seamless X", - "seamlessY": "Seamless Y", - "seamlessX&Y": "Seamless X & Y", - "seamLowThreshold": "Low", - "seed": "Seed", - "seedWeights": "Seed Weights", - "imageActions": "Image Actions", - "sendTo": "Send to", - "sendToImg2Img": "Send to Image to Image", - "sendToUnifiedCanvas": "Send To Unified Canvas", - "showOptionsPanel": "Show Side Panel (O or T)", - "showPreview": "Show Preview", - "shuffle": "Shuffle Seed", - "steps": "Steps", - "strength": "Strength", - "symmetry": "Symmetry", - "tileSize": "Tile Size", - "toggleLoopback": "Toggle Loopback", - "type": "Type", - "upscale": "Upscale (Shift + U)", - "upscaleImage": "Upscale Image", - "upscaling": "Upscaling", - "unmasked": "Unmasked", - "useAll": "Use All", - "useSize": "Use Size", - "useCpuNoise": "Use CPU Noise", - "cpuNoise": "CPU Noise", - "gpuNoise": "GPU Noise", - "useInitImg": "Use Initial Image", - "usePrompt": "Use Prompt", - "useSeed": "Use Seed", - "variationAmount": "Variation Amount", - "variations": "Variations", - "vSymmetryStep": "V Symmetry Step", - "width": "Width", - "isAllowedToUpscale": { - "useX2Model": "Image is too large to upscale with x4 model, use x2 model", - "tooLarge": "Image is too large to upscale, select smaller image" - } - }, - "dynamicPrompts": { - "combinatorial": "Combinatorial Generation", - "dynamicPrompts": "Dynamic Prompts", - "enableDynamicPrompts": "Enable Dynamic Prompts", - "maxPrompts": "Max Prompts", - "promptsPreview": "Prompts Preview", - "promptsWithCount_one": "{{count}} Prompt", - "promptsWithCount_other": "{{count}} Prompts", - "seedBehaviour": { - "label": "Seed Behaviour", - "perIterationLabel": "Seed per Iteration", - "perIterationDesc": "Use a different seed for each iteration", - "perPromptLabel": "Seed per Image", - "perPromptDesc": "Use a different seed for each image" - } - }, - "sdxl": { - "cfgScale": "CFG Scale", - "concatPromptStyle": "Concatenate Prompt & Style", - "denoisingStrength": "Denoising Strength", - "loading": "Loading...", - "negAestheticScore": "Negative Aesthetic Score", - "negStylePrompt": "Negative Style Prompt", - "noModelsAvailable": "No models available", - "posAestheticScore": "Positive Aesthetic Score", - "posStylePrompt": "Positive Style Prompt", - "refiner": "Refiner", - "refinermodel": "Refiner Model", - "refinerStart": "Refiner Start", - "scheduler": "Scheduler", - "selectAModel": "Select a model", - "steps": "Steps", - "useRefiner": "Use Refiner" - }, - "settings": { - "alternateCanvasLayout": "Alternate Canvas Layout", - "antialiasProgressImages": "Antialias Progress Images", - "autoChangeDimensions": "Update W/H To Model Defaults On Change", - "beta": "Beta", - "confirmOnDelete": "Confirm On Delete", - "consoleLogLevel": "Log Level", - "developer": "Developer", - "displayHelpIcons": "Display Help Icons", - "displayInProgress": "Display Progress Images", - "enableImageDebugging": "Enable Image Debugging", - "enableInformationalPopovers": "Enable Informational Popovers", - "enableInvisibleWatermark": "Enable Invisible Watermark", - "enableNodesEditor": "Enable Nodes Editor", - "enableNSFWChecker": "Enable NSFW Checker", - "experimental": "Experimental", - "favoriteSchedulers": "Favorite Schedulers", - "favoriteSchedulersPlaceholder": "No schedulers favorited", - "general": "General", - "generation": "Generation", - "models": "Models", - "resetComplete": "Web UI has been reset.", - "resetWebUI": "Reset Web UI", - "resetWebUIDesc1": "Resetting the web UI only resets the browser's local cache of your images and remembered settings. It does not delete any images from disk.", - "resetWebUIDesc2": "If images aren't showing up in the gallery or something else isn't working, please try resetting before submitting an issue on GitHub.", - "saveSteps": "Save images every n steps", - "shouldLogToConsole": "Console Logging", - "showAdvancedOptions": "Show Advanced Options", - "showProgressInViewer": "Show Progress Images in Viewer", - "ui": "User Interface", - "useSlidersForAll": "Use Sliders For All Options", - "clearIntermediatesDisabled": "Queue must be empty to clear intermediates", - "clearIntermediatesDesc1": "Clearing intermediates will reset your Canvas and ControlNet state.", - "clearIntermediatesDesc2": "Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space.", - "clearIntermediatesDesc3": "Your gallery images will not be deleted.", - "clearIntermediates": "Clear Intermediates", - "clearIntermediatesWithCount_one": "Clear {{count}} Intermediate", - "clearIntermediatesWithCount_other": "Clear {{count}} Intermediates", - "intermediatesCleared_one": "Cleared {{count}} Intermediate", - "intermediatesCleared_other": "Cleared {{count}} Intermediates", - "intermediatesClearedFailed": "Problem Clearing Intermediates", - "reloadingIn": "Reloading in" - }, - "toast": { - "addedToBoard": "Added to board", - "baseModelChangedCleared_one": "Base model changed, cleared or disabled {{count}} incompatible submodel", - "baseModelChangedCleared_other": "Base model changed, cleared or disabled {{count}} incompatible submodels", - "canceled": "Processing Canceled", - "canvasCopiedClipboard": "Canvas Copied to Clipboard", - "canvasDownloaded": "Canvas Downloaded", - "canvasMerged": "Canvas Merged", - "canvasSavedGallery": "Canvas Saved to Gallery", - "canvasSentControlnetAssets": "Canvas Sent to ControlNet & Assets", - "connected": "Connected to Server", - "disconnected": "Disconnected from Server", - "downloadImageStarted": "Image Download Started", - "faceRestoreFailed": "Face Restoration Failed", - "imageCopied": "Image Copied", - "imageLinkCopied": "Image Link Copied", - "imageNotLoaded": "No Image Loaded", - "imageNotLoadedDesc": "Could not find image", - "imageSaved": "Image Saved", - "imageSavedToGallery": "Image Saved to Gallery", - "imageSavingFailed": "Image Saving Failed", - "imageUploaded": "Image Uploaded", - "imageUploadFailed": "Image Upload Failed", - "initialImageNotSet": "Initial Image Not Set", - "initialImageNotSetDesc": "Could not load initial image", - "initialImageSet": "Initial Image Set", - "invalidUpload": "Invalid Upload", - "loadedWithWarnings": "Workflow Loaded with Warnings", - "maskSavedAssets": "Mask Saved to Assets", - "maskSentControlnetAssets": "Mask Sent to ControlNet & Assets", - "metadataLoadFailed": "Failed to load metadata", - "modelAdded": "Model Added: {{modelName}}", - "modelAddedSimple": "Model Added", - "modelAddFailed": "Model Add Failed", - "nodesBrokenConnections": "Cannot load. Some connections are broken.", - "nodesCorruptedGraph": "Cannot load. Graph seems to be corrupted.", - "nodesLoaded": "Nodes Loaded", - "nodesLoadedFailed": "Failed To Load Nodes", - "nodesNotValidGraph": "Not a valid InvokeAI Node Graph", - "nodesNotValidJSON": "Not a valid JSON", - "nodesSaved": "Nodes Saved", - "nodesUnrecognizedTypes": "Cannot load. Graph has unrecognized types", - "parameterNotSet": "Parameter not set", - "parameterSet": "Parameter set", - "parametersFailed": "Problem loading parameters", - "parametersFailedDesc": "Unable to load init image.", - "parametersNotSet": "Parameters Not Set", - "parametersNotSetDesc": "No metadata found for this image.", - "parametersSet": "Parameters Set", - "problemCopyingCanvas": "Problem Copying Canvas", - "problemCopyingCanvasDesc": "Unable to export base layer", - "problemCopyingImage": "Unable to Copy Image", - "problemCopyingImageLink": "Unable to Copy Image Link", - "problemDownloadingCanvas": "Problem Downloading Canvas", - "problemDownloadingCanvasDesc": "Unable to export base layer", - "problemImportingMask": "Problem Importing Mask", - "problemImportingMaskDesc": "Unable to export mask", - "problemMergingCanvas": "Problem Merging Canvas", - "problemMergingCanvasDesc": "Unable to export base layer", - "problemSavingCanvas": "Problem Saving Canvas", - "problemSavingCanvasDesc": "Unable to export base layer", - "problemSavingMask": "Problem Saving Mask", - "problemSavingMaskDesc": "Unable to export mask", - "promptNotSet": "Prompt Not Set", - "promptNotSetDesc": "Could not find prompt for this image.", - "promptSet": "Prompt Set", - "seedNotSet": "Seed Not Set", - "seedNotSetDesc": "Could not find seed for this image.", - "seedSet": "Seed Set", - "sentToImageToImage": "Sent To Image To Image", - "sentToUnifiedCanvas": "Sent to Unified Canvas", - "serverError": "Server Error", - "setAsCanvasInitialImage": "Set as canvas initial image", - "setCanvasInitialImage": "Set canvas initial image", - "setControlImage": "Set as control image", - "setIPAdapterImage": "Set as IP Adapter Image", - "setInitialImage": "Set as initial image", - "setNodeField": "Set as node field", - "tempFoldersEmptied": "Temp Folder Emptied", - "uploadFailed": "Upload failed", - "uploadFailedInvalidUploadDesc": "Must be single PNG or JPEG image", - "uploadFailedUnableToLoadDesc": "Unable to load file", - "upscalingFailed": "Upscaling Failed", - "workflowLoaded": "Workflow Loaded", - "problemRetrievingWorkflow": "Problem Retrieving Workflow", - "workflowDeleted": "Workflow Deleted", - "problemDeletingWorkflow": "Problem Deleting Workflow" - }, - "tooltip": { - "feature": { - "boundingBox": "The bounding box is the same as the Width and Height settings for Text to Image or Image to Image. Only the area in the box will be processed.", - "faceCorrection": "Face correction with GFPGAN or Codeformer: the algorithm detects faces in the image and corrects any defects. High value will change the image more, resulting in more attractive faces. Codeformer with a higher fidelity preserves the original image at the expense of stronger face correction.", - "gallery": "Gallery displays generations from the outputs folder as they're created. Settings are stored within files and accesed by context menu.", - "imageToImage": "Image to Image loads any image as initial, which is then used to generate a new one along with the prompt. The higher the value, the more the result image will change. Values from 0.0 to 1.0 are possible, the recommended range is .25-.75", - "infillAndScaling": "Manage infill methods (used on masked or erased areas of the canvas) and scaling (useful for small bounding box sizes).", - "other": "These options will enable alternative processing modes for Invoke. 'Seamless tiling' will create repeating patterns in the output. 'High resolution' is generation in two steps with img2img: use this setting when you want a larger and more coherent image without artifacts. It will take longer than usual txt2img.", - "prompt": "This is the prompt field. Prompt includes generation objects and stylistic terms. You can add weight (token importance) in the prompt as well, but CLI commands and parameters will not work.", - "seamCorrection": "Controls the handling of visible seams that occur between generated images on the canvas.", - "seed": "Seed value affects the initial noise from which the image is formed. You can use the already existing seeds from previous images. 'Noise Threshold' is used to mitigate artifacts at high CFG values (try the 0-10 range), and Perlin to add Perlin noise during generation: both serve to add variation to your outputs.", - "upscale": "Use ESRGAN to enlarge the image immediately after generation.", - "variations": "Try a variation with a value between 0.1 and 1.0 to change the result for a given seed. Interesting variations of the seed are between 0.1 and 0.3." - } - }, - "popovers": { - "clipSkip": { - "heading": "CLIP Skip", - "paragraphs": [ - "Choose how many layers of the CLIP model to skip.", - "Some models work better with certain CLIP Skip settings.", - "A higher value typically results in a less detailed image." - ] - }, - "paramNegativeConditioning": { - "heading": "Negative Prompt", - "paragraphs": [ - "The generation process avoids the concepts in the negative prompt. Use this to exclude qualities or objects from the output.", - "Supports Compel syntax and embeddings." - ] - }, - "paramPositiveConditioning": { - "heading": "Positive Prompt", - "paragraphs": [ - "Guides the generation process. You may use any words or phrases.", - "Compel and Dynamic Prompts syntaxes and embeddings." - ] - }, - "paramScheduler": { - "heading": "Scheduler", - "paragraphs": [ - "Scheduler defines how to iteratively add noise to an image or how to update a sample based on a model's output." - ] - }, - "compositingBlur": { - "heading": "Blur", - "paragraphs": ["The blur radius of the mask."] - }, - "compositingBlurMethod": { - "heading": "Blur Method", - "paragraphs": ["The method of blur applied to the masked area."] - }, - "compositingCoherencePass": { - "heading": "Coherence Pass", - "paragraphs": [ - "A second round of denoising helps to composite the Inpainted/Outpainted image." - ] - }, - "compositingCoherenceMode": { - "heading": "Mode", - "paragraphs": ["The mode of the Coherence Pass."] - }, - "compositingCoherenceSteps": { - "heading": "Steps", - "paragraphs": [ - "Number of denoising steps used in the Coherence Pass.", - "Same as the main Steps parameter." - ] - }, - "compositingStrength": { - "heading": "Strength", - "paragraphs": [ - "Denoising strength for the Coherence Pass.", - "Same as the Image to Image Denoising Strength parameter." - ] - }, - "compositingMaskAdjustments": { - "heading": "Mask Adjustments", - "paragraphs": ["Adjust the mask."] - }, - "controlNetBeginEnd": { - "heading": "Begin / End Step Percentage", - "paragraphs": [ - "Which steps of the denoising process will have the ControlNet applied.", - "ControlNets applied at the beginning of the process guide composition, and ControlNets applied at the end guide details." - ] - }, - "controlNetControlMode": { - "heading": "Control Mode", - "paragraphs": [ - "Lends more weight to either the prompt or ControlNet." - ] - }, - "controlNetResizeMode": { - "heading": "Resize Mode", - "paragraphs": [ - "How the ControlNet image will be fit to the image output size." - ] - }, - "controlNet": { - "heading": "ControlNet", - "paragraphs": [ - "ControlNets provide guidance to the generation process, helping create images with controlled composition, structure, or style, depending on the model selected." - ] - }, - "controlNetWeight": { - "heading": "Weight", - "paragraphs": [ - "How strongly the ControlNet will impact the generated image." - ] - }, - "dynamicPrompts": { - "heading": "Dynamic Prompts", - "paragraphs": [ - "Dynamic Prompts parses a single prompt into many.", - "The basic syntax is \"a {red|green|blue} ball\". This will produce three prompts: \"a red ball\", \"a green ball\" and \"a blue ball\".", - "You can use the syntax as many times as you like in a single prompt, but be sure to keep the number of prompts generated in check with the Max Prompts setting." - ] - }, - "dynamicPromptsMaxPrompts": { - "heading": "Max Prompts", - "paragraphs": [ - "Limits the number of prompts that can be generated by Dynamic Prompts." - ] - }, - "dynamicPromptsSeedBehaviour": { - "heading": "Seed Behaviour", - "paragraphs": [ - "Controls how the seed is used when generating prompts.", - "Per Iteration will use a unique seed for each iteration. Use this to explore prompt variations on a single seed.", - "For example, if you have 5 prompts, each image will use the same seed.", - "Per Image will use a unique seed for each image. This provides more variation." - ] - }, - "infillMethod": { - "heading": "Infill Method", - "paragraphs": ["Method to infill the selected area."] - }, - "lora": { - "heading": "LoRA Weight", - "paragraphs": [ - "Higher LoRA weight will lead to larger impacts on the final image." - ] - }, - "noiseUseCPU": { - "heading": "Use CPU Noise", - "paragraphs": [ - "Controls whether noise is generated on the CPU or GPU.", - "With CPU Noise enabled, a particular seed will produce the same image on any machine.", - "There is no performance impact to enabling CPU Noise." - ] - }, - "paramCFGScale": { - "heading": "CFG Scale", - "paragraphs": [ - "Controls how much your prompt influences the generation process." - ] - }, - "paramCFGRescaleMultiplier": { - "heading": "CFG Rescale Multiplier", - "paragraphs": [ - "Rescale multiplier for CFG guidance, used for models trained using zero-terminal SNR (ztsnr). Suggested value 0.7." - ] - }, - "paramDenoisingStrength": { - "heading": "Denoising Strength", - "paragraphs": [ - "How much noise is added to the input image.", - "0 will result in an identical image, while 1 will result in a completely new image." - ] - }, - "paramIterations": { - "heading": "Iterations", - "paragraphs": [ - "The number of images to generate.", - "If Dynamic Prompts is enabled, each of the prompts will be generated this many times." - ] - }, - "paramModel": { - "heading": "Model", - "paragraphs": [ - "Model used for the denoising steps.", - "Different models are typically trained to specialize in producing particular aesthetic results and content." - ] - }, - "paramRatio": { - "heading": "Aspect Ratio", - "paragraphs": [ - "The aspect ratio of the dimensions of the image generated.", - "An image size (in number of pixels) equivalent to 512x512 is recommended for SD1.5 models and a size equivalent to 1024x1024 is recommended for SDXL models." - ] - }, - "paramSeed": { - "heading": "Seed", - "paragraphs": [ - "Controls the starting noise used for generation.", - "Disable “Random Seed” to produce identical results with the same generation settings." - ] - }, - "paramSteps": { - "heading": "Steps", - "paragraphs": [ - "Number of steps that will be performed in each generation.", - "Higher step counts will typically create better images but will require more generation time." - ] - }, - "paramVAE": { - "heading": "VAE", - "paragraphs": [ - "Model used for translating AI output into the final image." - ] - }, - "paramVAEPrecision": { - "heading": "VAE Precision", - "paragraphs": [ - "The precision used during VAE encoding and decoding. FP16/half precision is more efficient, at the expense of minor image variations." - ] - }, - "scaleBeforeProcessing": { - "heading": "Scale Before Processing", - "paragraphs": [ - "Scales the selected area to the size best suited for the model before the image generation process." - ] - } - }, - "ui": { - "hideProgressImages": "Hide Progress Images", - "lockRatio": "Lock Ratio", - "showProgressImages": "Show Progress Images", - "swapSizes": "Swap Sizes" - }, - "unifiedCanvas": { - "accept": "Accept", - "activeLayer": "Active Layer", - "antialiasing": "Antialiasing", - "autoSaveToGallery": "Auto Save to Gallery", - "base": "Base", - "betaClear": "Clear", - "betaDarkenOutside": "Darken Outside", - "betaLimitToBox": "Limit To Box", - "betaPreserveMasked": "Preserve Masked", - "boundingBox": "Bounding Box", - "boundingBoxPosition": "Bounding Box Position", - "brush": "Brush", - "brushOptions": "Brush Options", - "brushSize": "Size", - "canvasDimensions": "Canvas Dimensions", - "canvasPosition": "Canvas Position", - "canvasScale": "Canvas Scale", - "canvasSettings": "Canvas Settings", - "clearCanvas": "Clear Canvas", - "clearCanvasHistory": "Clear Canvas History", - "clearCanvasHistoryConfirm": "Are you sure you want to clear the canvas history?", - "clearCanvasHistoryMessage": "Clearing the canvas history leaves your current canvas intact, but irreversibly clears the undo and redo history.", - "clearHistory": "Clear History", - "clearMask": "Clear Mask (Shift+C)", - "colorPicker": "Color Picker", - "copyToClipboard": "Copy to Clipboard", - "cursorPosition": "Cursor Position", - "darkenOutsideSelection": "Darken Outside Selection", - "discardAll": "Discard All", - "downloadAsImage": "Download As Image", - "emptyFolder": "Empty Folder", - "emptyTempImageFolder": "Empty Temp Image Folder", - "emptyTempImagesFolderConfirm": "Are you sure you want to empty the temp folder?", - "emptyTempImagesFolderMessage": "Emptying the temp image folder also fully resets the Unified Canvas. This includes all undo/redo history, images in the staging area, and the canvas base layer.", - "enableMask": "Enable Mask", - "eraseBoundingBox": "Erase Bounding Box", - "eraser": "Eraser", - "fillBoundingBox": "Fill Bounding Box", - "layer": "Layer", - "limitStrokesToBox": "Limit Strokes to Box", - "mask": "Mask", - "maskingOptions": "Masking Options", - "mergeVisible": "Merge Visible", - "move": "Move", - "next": "Next", - "preserveMaskedArea": "Preserve Masked Area", - "previous": "Previous", - "redo": "Redo", - "resetView": "Reset View", - "saveBoxRegionOnly": "Save Box Region Only", - "saveMask": "Save $t(unifiedCanvas.mask)", - "saveToGallery": "Save To Gallery", - "scaledBoundingBox": "Scaled Bounding Box", - "showCanvasDebugInfo": "Show Additional Canvas Info", - "showGrid": "Show Grid", - "showHide": "Show/Hide", - "showResultsOn": "Show Results (On)", - "showResultsOff": "Show Results (Off)", - "showIntermediates": "Show Intermediates", - "snapToGrid": "Snap to Grid", - "undo": "Undo" - }, - "workflows": { - "workflows": "Workflows", - "workflowLibrary": "Library", - "userWorkflows": "My Workflows", - "defaultWorkflows": "Default Workflows", - "openWorkflow": "Open Workflow", - "uploadWorkflow": "Load from File", - "deleteWorkflow": "Delete Workflow", - "unnamedWorkflow": "Unnamed Workflow", - "downloadWorkflow": "Save to File", - "saveWorkflow": "Save Workflow", - "saveWorkflowAs": "Save Workflow As", - "savingWorkflow": "Saving Workflow...", - "problemSavingWorkflow": "Problem Saving Workflow", - "workflowSaved": "Workflow Saved", - "noRecentWorkflows": "No Recent Workflows", - "noUserWorkflows": "No User Workflows", - "noSystemWorkflows": "No System Workflows", - "problemLoading": "Problem Loading Workflows", - "loading": "Loading Workflows", - "noDescription": "No description", - "searchWorkflows": "Search Workflows", - "clearWorkflowSearchFilter": "Clear Workflow Search Filter", - "workflowName": "Workflow Name", - "newWorkflowCreated": "New Workflow Created", - "workflowEditorMenu": "Workflow Editor Menu", - "workflowIsOpen": "Workflow is Open" - }, - "app": { - "storeNotInitialized": "Store is not initialized" - } -} diff --git a/invokeai/frontend/web/dist/locales/es.json b/invokeai/frontend/web/dist/locales/es.json deleted file mode 100644 index 4ce0072517..0000000000 --- a/invokeai/frontend/web/dist/locales/es.json +++ /dev/null @@ -1,732 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Atajos de teclado", - "languagePickerLabel": "Selector de idioma", - "reportBugLabel": "Reportar errores", - "settingsLabel": "Ajustes", - "img2img": "Imagen a Imagen", - "unifiedCanvas": "Lienzo Unificado", - "nodes": "Editor del flujo de trabajo", - "langSpanish": "Español", - "nodesDesc": "Un sistema de generación de imágenes basado en nodos, actualmente se encuentra en desarrollo. Mantente pendiente a nuestras actualizaciones acerca de esta fabulosa funcionalidad.", - "postProcessing": "Post-procesamiento", - "postProcessDesc1": "Invoke AI ofrece una gran variedad de funciones de post-procesamiento, El aumento de tamaño y Restauración de Rostros ya se encuentran disponibles en la interfaz web, puedes acceder desde el menú de Opciones Avanzadas en las pestañas de Texto a Imagen y de Imagen a Imagen. También puedes acceder a estas funciones directamente mediante el botón de acciones en el menú superior de la imagen actual o en el visualizador.", - "postProcessDesc2": "Una interfaz de usuario dedicada se lanzará pronto para facilitar flujos de trabajo de postprocesamiento más avanzado.", - "postProcessDesc3": "La Interfaz de Línea de Comandos de Invoke AI ofrece muchas otras características, incluyendo -Embiggen-.", - "training": "Entrenamiento", - "trainingDesc1": "Un flujo de trabajo dedicado para el entrenamiento de sus propios -embeddings- y puntos de control utilizando Inversión Textual y Dreambooth desde la interfaz web.", - "trainingDesc2": "InvokeAI ya admite el entrenamiento de incrustaciones personalizadas mediante la inversión textual mediante el script principal.", - "upload": "Subir imagen", - "close": "Cerrar", - "load": "Cargar", - "statusConnected": "Conectado", - "statusDisconnected": "Desconectado", - "statusError": "Error", - "statusPreparing": "Preparando", - "statusProcessingCanceled": "Procesamiento Cancelado", - "statusProcessingComplete": "Procesamiento Completo", - "statusGenerating": "Generando", - "statusGeneratingTextToImage": "Generando Texto a Imagen", - "statusGeneratingImageToImage": "Generando Imagen a Imagen", - "statusGeneratingInpainting": "Generando pintura interior", - "statusGeneratingOutpainting": "Generando pintura exterior", - "statusGenerationComplete": "Generación Completa", - "statusIterationComplete": "Iteración Completa", - "statusSavingImage": "Guardando Imagen", - "statusRestoringFaces": "Restaurando Rostros", - "statusRestoringFacesGFPGAN": "Restaurando Rostros (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restaurando Rostros (CodeFormer)", - "statusUpscaling": "Aumentando Tamaño", - "statusUpscalingESRGAN": "Restaurando Rostros(ESRGAN)", - "statusLoadingModel": "Cargando Modelo", - "statusModelChanged": "Modelo cambiado", - "statusMergedModels": "Modelos combinados", - "githubLabel": "Github", - "discordLabel": "Discord", - "langEnglish": "Inglés", - "langDutch": "Holandés", - "langFrench": "Francés", - "langGerman": "Alemán", - "langItalian": "Italiano", - "langArabic": "Árabe", - "langJapanese": "Japones", - "langPolish": "Polaco", - "langBrPortuguese": "Portugués brasileño", - "langRussian": "Ruso", - "langSimplifiedChinese": "Chino simplificado", - "langUkranian": "Ucraniano", - "back": "Atrás", - "statusConvertingModel": "Convertir el modelo", - "statusModelConverted": "Modelo adaptado", - "statusMergingModels": "Fusionar modelos", - "langPortuguese": "Portugués", - "langKorean": "Coreano", - "langHebrew": "Hebreo", - "loading": "Cargando", - "loadingInvokeAI": "Cargando invocar a la IA", - "postprocessing": "Tratamiento posterior", - "txt2img": "De texto a imagen", - "accept": "Aceptar", - "cancel": "Cancelar", - "linear": "Lineal", - "random": "Aleatorio", - "generate": "Generar", - "openInNewTab": "Abrir en una nueva pestaña", - "dontAskMeAgain": "No me preguntes de nuevo", - "areYouSure": "¿Estas seguro?", - "imagePrompt": "Indicación de imagen", - "batch": "Administrador de lotes", - "darkMode": "Modo oscuro", - "lightMode": "Modo claro", - "modelManager": "Administrador de modelos", - "communityLabel": "Comunidad" - }, - "gallery": { - "generations": "Generaciones", - "showGenerations": "Mostrar Generaciones", - "uploads": "Subidas de archivos", - "showUploads": "Mostar Subidas", - "galleryImageSize": "Tamaño de la imagen", - "galleryImageResetSize": "Restablecer tamaño de la imagen", - "gallerySettings": "Ajustes de la galería", - "maintainAspectRatio": "Mantener relación de aspecto", - "autoSwitchNewImages": "Auto seleccionar Imágenes nuevas", - "singleColumnLayout": "Diseño de una columna", - "allImagesLoaded": "Todas las imágenes cargadas", - "loadMore": "Cargar más", - "noImagesInGallery": "No hay imágenes para mostrar", - "deleteImage": "Eliminar Imagen", - "deleteImageBin": "Las imágenes eliminadas se enviarán a la papelera de tu sistema operativo.", - "deleteImagePermanent": "Las imágenes eliminadas no se pueden restaurar.", - "assets": "Activos", - "autoAssignBoardOnClick": "Asignación automática de tableros al hacer clic" - }, - "hotkeys": { - "keyboardShortcuts": "Atajos de teclado", - "appHotkeys": "Atajos de applicación", - "generalHotkeys": "Atajos generales", - "galleryHotkeys": "Atajos de galería", - "unifiedCanvasHotkeys": "Atajos de lienzo unificado", - "invoke": { - "title": "Invocar", - "desc": "Generar una imagen" - }, - "cancel": { - "title": "Cancelar", - "desc": "Cancelar el proceso de generación de imagen" - }, - "focusPrompt": { - "title": "Mover foco a Entrada de texto", - "desc": "Mover foco hacia el campo de texto de la Entrada" - }, - "toggleOptions": { - "title": "Alternar opciones", - "desc": "Mostar y ocultar el panel de opciones" - }, - "pinOptions": { - "title": "Fijar opciones", - "desc": "Fijar el panel de opciones" - }, - "toggleViewer": { - "title": "Alternar visor", - "desc": "Mostar y ocultar el visor de imágenes" - }, - "toggleGallery": { - "title": "Alternar galería", - "desc": "Mostar y ocultar la galería de imágenes" - }, - "maximizeWorkSpace": { - "title": "Maximizar espacio de trabajo", - "desc": "Cerrar otros páneles y maximizar el espacio de trabajo" - }, - "changeTabs": { - "title": "Cambiar", - "desc": "Cambiar entre áreas de trabajo" - }, - "consoleToggle": { - "title": "Alternar consola", - "desc": "Mostar y ocultar la consola" - }, - "setPrompt": { - "title": "Establecer Entrada", - "desc": "Usar el texto de entrada de la imagen actual" - }, - "setSeed": { - "title": "Establecer semilla", - "desc": "Usar la semilla de la imagen actual" - }, - "setParameters": { - "title": "Establecer parámetros", - "desc": "Usar todos los parámetros de la imagen actual" - }, - "restoreFaces": { - "title": "Restaurar rostros", - "desc": "Restaurar rostros en la imagen actual" - }, - "upscale": { - "title": "Aumentar resolución", - "desc": "Aumentar la resolución de la imagen actual" - }, - "showInfo": { - "title": "Mostrar información", - "desc": "Mostar metadatos de la imagen actual" - }, - "sendToImageToImage": { - "title": "Enviar hacia Imagen a Imagen", - "desc": "Enviar imagen actual hacia Imagen a Imagen" - }, - "deleteImage": { - "title": "Eliminar imagen", - "desc": "Eliminar imagen actual" - }, - "closePanels": { - "title": "Cerrar páneles", - "desc": "Cerrar los páneles abiertos" - }, - "previousImage": { - "title": "Imagen anterior", - "desc": "Muetra la imagen anterior en la galería" - }, - "nextImage": { - "title": "Imagen siguiente", - "desc": "Muetra la imagen siguiente en la galería" - }, - "toggleGalleryPin": { - "title": "Alternar fijado de galería", - "desc": "Fijar o desfijar la galería en la interfaz" - }, - "increaseGalleryThumbSize": { - "title": "Aumentar imagen en galería", - "desc": "Aumenta el tamaño de las miniaturas de la galería" - }, - "decreaseGalleryThumbSize": { - "title": "Reducir imagen en galería", - "desc": "Reduce el tamaño de las miniaturas de la galería" - }, - "selectBrush": { - "title": "Seleccionar pincel", - "desc": "Selecciona el pincel en el lienzo" - }, - "selectEraser": { - "title": "Seleccionar borrador", - "desc": "Selecciona el borrador en el lienzo" - }, - "decreaseBrushSize": { - "title": "Disminuir tamaño de herramienta", - "desc": "Disminuye el tamaño del pincel/borrador en el lienzo" - }, - "increaseBrushSize": { - "title": "Aumentar tamaño del pincel", - "desc": "Aumenta el tamaño del pincel en el lienzo" - }, - "decreaseBrushOpacity": { - "title": "Disminuir opacidad del pincel", - "desc": "Disminuye la opacidad del pincel en el lienzo" - }, - "increaseBrushOpacity": { - "title": "Aumentar opacidad del pincel", - "desc": "Aumenta la opacidad del pincel en el lienzo" - }, - "moveTool": { - "title": "Herramienta de movimiento", - "desc": "Permite navegar por el lienzo" - }, - "fillBoundingBox": { - "title": "Rellenar Caja contenedora", - "desc": "Rellena la caja contenedora con el color seleccionado" - }, - "eraseBoundingBox": { - "title": "Borrar Caja contenedora", - "desc": "Borra el contenido dentro de la caja contenedora" - }, - "colorPicker": { - "title": "Selector de color", - "desc": "Selecciona un color del lienzo" - }, - "toggleSnap": { - "title": "Alternar ajuste de cuadrícula", - "desc": "Activa o desactiva el ajuste automático a la cuadrícula" - }, - "quickToggleMove": { - "title": "Alternar movimiento rápido", - "desc": "Activa momentáneamente la herramienta de movimiento" - }, - "toggleLayer": { - "title": "Alternar capa", - "desc": "Alterna entre las capas de máscara y base" - }, - "clearMask": { - "title": "Limpiar máscara", - "desc": "Limpia toda la máscara actual" - }, - "hideMask": { - "title": "Ocultar máscara", - "desc": "Oculta o muetre la máscara actual" - }, - "showHideBoundingBox": { - "title": "Alternar caja contenedora", - "desc": "Muestra u oculta la caja contenedora" - }, - "mergeVisible": { - "title": "Consolida capas visibles", - "desc": "Consolida todas las capas visibles en una sola" - }, - "saveToGallery": { - "title": "Guardar en galería", - "desc": "Guardar la imagen actual del lienzo en la galería" - }, - "copyToClipboard": { - "title": "Copiar al portapapeles", - "desc": "Copiar el lienzo actual al portapapeles" - }, - "downloadImage": { - "title": "Descargar imagen", - "desc": "Descargar la imagen actual del lienzo" - }, - "undoStroke": { - "title": "Deshar trazo", - "desc": "Desahacer el último trazo del pincel" - }, - "redoStroke": { - "title": "Rehacer trazo", - "desc": "Rehacer el último trazo del pincel" - }, - "resetView": { - "title": "Restablecer vista", - "desc": "Restablecer la vista del lienzo" - }, - "previousStagingImage": { - "title": "Imagen anterior", - "desc": "Imagen anterior en el área de preparación" - }, - "nextStagingImage": { - "title": "Imagen siguiente", - "desc": "Siguiente imagen en el área de preparación" - }, - "acceptStagingImage": { - "title": "Aceptar imagen", - "desc": "Aceptar la imagen actual en el área de preparación" - }, - "addNodes": { - "title": "Añadir Nodos", - "desc": "Abre el menú para añadir nodos" - }, - "nodesHotkeys": "Teclas de acceso rápido a los nodos" - }, - "modelManager": { - "modelManager": "Gestor de Modelos", - "model": "Modelo", - "modelAdded": "Modelo añadido", - "modelUpdated": "Modelo actualizado", - "modelEntryDeleted": "Endrada de Modelo eliminada", - "cannotUseSpaces": "No se pueden usar Spaces", - "addNew": "Añadir nuevo", - "addNewModel": "Añadir nuevo modelo", - "addManually": "Añadir manualmente", - "manual": "Manual", - "name": "Nombre", - "nameValidationMsg": "Introduce un nombre para tu modelo", - "description": "Descripción", - "descriptionValidationMsg": "Introduce una descripción para tu modelo", - "config": "Configurar", - "configValidationMsg": "Ruta del archivo de configuración del modelo.", - "modelLocation": "Ubicación del Modelo", - "modelLocationValidationMsg": "Ruta del archivo de modelo.", - "vaeLocation": "Ubicación VAE", - "vaeLocationValidationMsg": "Ruta del archivo VAE.", - "width": "Ancho", - "widthValidationMsg": "Ancho predeterminado de tu modelo.", - "height": "Alto", - "heightValidationMsg": "Alto predeterminado de tu modelo.", - "addModel": "Añadir Modelo", - "updateModel": "Actualizar Modelo", - "availableModels": "Modelos disponibles", - "search": "Búsqueda", - "load": "Cargar", - "active": "activo", - "notLoaded": "no cargado", - "cached": "en caché", - "checkpointFolder": "Directorio de Checkpoint", - "clearCheckpointFolder": "Limpiar directorio de checkpoint", - "findModels": "Buscar modelos", - "scanAgain": "Escanear de nuevo", - "modelsFound": "Modelos encontrados", - "selectFolder": "Selecciona un directorio", - "selected": "Seleccionado", - "selectAll": "Seleccionar todo", - "deselectAll": "Deseleccionar todo", - "showExisting": "Mostrar existentes", - "addSelected": "Añadir seleccionados", - "modelExists": "Modelo existente", - "selectAndAdd": "Selecciona de la lista un modelo para añadir", - "noModelsFound": "No se encontró ningún modelo", - "delete": "Eliminar", - "deleteModel": "Eliminar Modelo", - "deleteConfig": "Eliminar Configuración", - "deleteMsg1": "¿Estás seguro de que deseas eliminar este modelo de InvokeAI?", - "deleteMsg2": "Esto eliminará el modelo del disco si está en la carpeta raíz de InvokeAI. Si está utilizando una ubicación personalizada, el modelo NO se eliminará del disco.", - "safetensorModels": "SafeTensors", - "addDiffuserModel": "Añadir difusores", - "inpainting": "v1 Repintado", - "repoIDValidationMsg": "Repositorio en línea de tu modelo", - "checkpointModels": "Puntos de control", - "convertToDiffusersHelpText4": "Este proceso se realiza una sola vez. Puede tardar entre 30 y 60 segundos dependiendo de las especificaciones de tu ordenador.", - "diffusersModels": "Difusores", - "addCheckpointModel": "Agregar modelo de punto de control/Modelo Safetensor", - "vaeRepoID": "Identificador del repositorio de VAE", - "vaeRepoIDValidationMsg": "Repositorio en línea de tú VAE", - "formMessageDiffusersModelLocation": "Difusores Modelo Ubicación", - "formMessageDiffusersModelLocationDesc": "Por favor, introduzca al menos uno.", - "formMessageDiffusersVAELocation": "Ubicación VAE", - "formMessageDiffusersVAELocationDesc": "Si no se proporciona, InvokeAI buscará el archivo VAE dentro de la ubicación del modelo indicada anteriormente.", - "convert": "Convertir", - "convertToDiffusers": "Convertir en difusores", - "convertToDiffusersHelpText1": "Este modelo se convertirá al formato 🧨 Difusores.", - "convertToDiffusersHelpText2": "Este proceso sustituirá su entrada del Gestor de Modelos por la versión de Difusores del mismo modelo.", - "convertToDiffusersHelpText3": "Tu archivo del punto de control en el disco se eliminará si está en la carpeta raíz de InvokeAI. Si está en una ubicación personalizada, NO se eliminará.", - "convertToDiffusersHelpText5": "Por favor, asegúrate de tener suficiente espacio en el disco. Los modelos generalmente varían entre 2 GB y 7 GB de tamaño.", - "convertToDiffusersHelpText6": "¿Desea transformar este modelo?", - "convertToDiffusersSaveLocation": "Guardar ubicación", - "v1": "v1", - "statusConverting": "Adaptar", - "modelConverted": "Modelo adaptado", - "sameFolder": "La misma carpeta", - "invokeRoot": "Carpeta InvokeAI", - "custom": "Personalizado", - "customSaveLocation": "Ubicación personalizada para guardar", - "merge": "Fusión", - "modelsMerged": "Modelos fusionados", - "mergeModels": "Combinar modelos", - "modelOne": "Modelo 1", - "modelTwo": "Modelo 2", - "modelThree": "Modelo 3", - "mergedModelName": "Nombre del modelo combinado", - "alpha": "Alfa", - "interpolationType": "Tipo de interpolación", - "mergedModelSaveLocation": "Guardar ubicación", - "mergedModelCustomSaveLocation": "Ruta personalizada", - "invokeAIFolder": "Invocar carpeta de la inteligencia artificial", - "modelMergeHeaderHelp2": "Sólo se pueden fusionar difusores. Si desea fusionar un modelo de punto de control, conviértalo primero en difusores.", - "modelMergeAlphaHelp": "Alfa controla la fuerza de mezcla de los modelos. Los valores alfa más bajos reducen la influencia del segundo modelo.", - "modelMergeInterpAddDifferenceHelp": "En este modo, el Modelo 3 se sustrae primero del Modelo 2. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente.", - "ignoreMismatch": "Ignorar discrepancias entre modelos seleccionados", - "modelMergeHeaderHelp1": "Puede unir hasta tres modelos diferentes para crear una combinación que se adapte a sus necesidades.", - "inverseSigmoid": "Sigmoideo inverso", - "weightedSum": "Modelo de suma ponderada", - "sigmoid": "Función sigmoide", - "allModels": "Todos los modelos", - "repo_id": "Identificador del repositorio", - "pathToCustomConfig": "Ruta a la configuración personalizada", - "customConfig": "Configuración personalizada", - "v2_base": "v2 (512px)", - "none": "ninguno", - "pickModelType": "Elige el tipo de modelo", - "v2_768": "v2 (768px)", - "addDifference": "Añadir una diferencia", - "scanForModels": "Buscar modelos", - "vae": "VAE", - "variant": "Variante", - "baseModel": "Modelo básico", - "modelConversionFailed": "Conversión al modelo fallida", - "selectModel": "Seleccionar un modelo", - "modelUpdateFailed": "Error al actualizar el modelo", - "modelsMergeFailed": "Fusión del modelo fallida", - "convertingModelBegin": "Convirtiendo el modelo. Por favor, espere.", - "modelDeleted": "Modelo eliminado", - "modelDeleteFailed": "Error al borrar el modelo", - "noCustomLocationProvided": "‐No se proporcionó una ubicación personalizada", - "importModels": "Importar los modelos", - "settings": "Ajustes", - "syncModels": "Sincronizar las plantillas", - "syncModelsDesc": "Si tus plantillas no están sincronizados con el backend, puedes actualizarlas usando esta opción. Esto suele ser útil en los casos en los que actualizas manualmente tu archivo models.yaml o añades plantillas a la carpeta raíz de InvokeAI después de que la aplicación haya arrancado.", - "modelsSynced": "Plantillas sincronizadas", - "modelSyncFailed": "La sincronización de la plantilla falló", - "loraModels": "LoRA", - "onnxModels": "Onnx", - "oliveModels": "Olives" - }, - "parameters": { - "images": "Imágenes", - "steps": "Pasos", - "cfgScale": "Escala CFG", - "width": "Ancho", - "height": "Alto", - "seed": "Semilla", - "randomizeSeed": "Semilla aleatoria", - "shuffle": "Semilla aleatoria", - "noiseThreshold": "Umbral de Ruido", - "perlinNoise": "Ruido Perlin", - "variations": "Variaciones", - "variationAmount": "Cantidad de Variación", - "seedWeights": "Peso de las semillas", - "faceRestoration": "Restauración de Rostros", - "restoreFaces": "Restaurar rostros", - "type": "Tipo", - "strength": "Fuerza", - "upscaling": "Aumento de resolución", - "upscale": "Aumentar resolución", - "upscaleImage": "Aumentar la resolución de la imagen", - "scale": "Escala", - "otherOptions": "Otras opciones", - "seamlessTiling": "Mosaicos sin parches", - "hiresOptim": "Optimización de Alta Resolución", - "imageFit": "Ajuste tamaño de imagen inicial al tamaño objetivo", - "codeformerFidelity": "Fidelidad", - "scaleBeforeProcessing": "Redimensionar antes de procesar", - "scaledWidth": "Ancho escalado", - "scaledHeight": "Alto escalado", - "infillMethod": "Método de relleno", - "tileSize": "Tamaño del mosaico", - "boundingBoxHeader": "Caja contenedora", - "seamCorrectionHeader": "Corrección de parches", - "infillScalingHeader": "Remplazo y escalado", - "img2imgStrength": "Peso de Imagen a Imagen", - "toggleLoopback": "Alternar Retroalimentación", - "sendTo": "Enviar a", - "sendToImg2Img": "Enviar a Imagen a Imagen", - "sendToUnifiedCanvas": "Enviar a Lienzo Unificado", - "copyImageToLink": "Copiar imagen a enlace", - "downloadImage": "Descargar imagen", - "openInViewer": "Abrir en Visor", - "closeViewer": "Cerrar Visor", - "usePrompt": "Usar Entrada", - "useSeed": "Usar Semilla", - "useAll": "Usar Todo", - "useInitImg": "Usar Imagen Inicial", - "info": "Información", - "initialImage": "Imagen Inicial", - "showOptionsPanel": "Mostrar panel de opciones", - "symmetry": "Simetría", - "vSymmetryStep": "Paso de simetría V", - "hSymmetryStep": "Paso de simetría H", - "cancel": { - "immediate": "Cancelar inmediatamente", - "schedule": "Cancelar tras la iteración actual", - "isScheduled": "Cancelando", - "setType": "Tipo de cancelación" - }, - "copyImage": "Copiar la imagen", - "general": "General", - "imageToImage": "Imagen a imagen", - "denoisingStrength": "Intensidad de la eliminación del ruido", - "hiresStrength": "Alta resistencia", - "showPreview": "Mostrar la vista previa", - "hidePreview": "Ocultar la vista previa", - "noiseSettings": "Ruido", - "seamlessXAxis": "Eje x", - "seamlessYAxis": "Eje y", - "scheduler": "Programador", - "boundingBoxWidth": "Anchura del recuadro", - "boundingBoxHeight": "Altura del recuadro", - "positivePromptPlaceholder": "Prompt Positivo", - "negativePromptPlaceholder": "Prompt Negativo", - "controlNetControlMode": "Modo de control", - "clipSkip": "Omitir el CLIP", - "aspectRatio": "Relación", - "maskAdjustmentsHeader": "Ajustes de la máscara", - "maskBlur": "Difuminar", - "maskBlurMethod": "Método del desenfoque", - "seamHighThreshold": "Alto", - "seamLowThreshold": "Bajo", - "coherencePassHeader": "Parámetros de la coherencia", - "compositingSettingsHeader": "Ajustes de la composición", - "coherenceSteps": "Pasos", - "coherenceStrength": "Fuerza", - "patchmatchDownScaleSize": "Reducir a escala", - "coherenceMode": "Modo" - }, - "settings": { - "models": "Modelos", - "displayInProgress": "Mostrar las imágenes del progreso", - "saveSteps": "Guardar imágenes cada n pasos", - "confirmOnDelete": "Confirmar antes de eliminar", - "displayHelpIcons": "Mostrar iconos de ayuda", - "enableImageDebugging": "Habilitar depuración de imágenes", - "resetWebUI": "Restablecer interfaz web", - "resetWebUIDesc1": "Al restablecer la interfaz web, solo se restablece la caché local del navegador de sus imágenes y la configuración guardada. No se elimina ninguna imagen de su disco duro.", - "resetWebUIDesc2": "Si las imágenes no se muestran en la galería o algo más no funciona, intente restablecer antes de reportar un incidente en GitHub.", - "resetComplete": "Se ha restablecido la interfaz web.", - "useSlidersForAll": "Utilice controles deslizantes para todas las opciones", - "general": "General", - "consoleLogLevel": "Nivel del registro", - "shouldLogToConsole": "Registro de la consola", - "developer": "Desarrollador", - "antialiasProgressImages": "Imágenes del progreso de Antialias", - "showProgressInViewer": "Mostrar las imágenes del progreso en el visor", - "ui": "Interfaz del usuario", - "generation": "Generación", - "favoriteSchedulers": "Programadores favoritos", - "favoriteSchedulersPlaceholder": "No hay programadores favoritos", - "showAdvancedOptions": "Mostrar las opciones avanzadas", - "alternateCanvasLayout": "Diseño alternativo del lienzo", - "beta": "Beta", - "enableNodesEditor": "Activar el editor de nodos", - "experimental": "Experimental", - "autoChangeDimensions": "Actualiza W/H a los valores predeterminados del modelo cuando se modifica" - }, - "toast": { - "tempFoldersEmptied": "Directorio temporal vaciado", - "uploadFailed": "Error al subir archivo", - "uploadFailedUnableToLoadDesc": "No se pudo cargar la imágen", - "downloadImageStarted": "Descargando imágen", - "imageCopied": "Imágen copiada", - "imageLinkCopied": "Enlace de imágen copiado", - "imageNotLoaded": "No se cargó la imágen", - "imageNotLoadedDesc": "No se pudo encontrar la imagen", - "imageSavedToGallery": "Imágen guardada en la galería", - "canvasMerged": "Lienzo consolidado", - "sentToImageToImage": "Enviar hacia Imagen a Imagen", - "sentToUnifiedCanvas": "Enviar hacia Lienzo Consolidado", - "parametersSet": "Parámetros establecidos", - "parametersNotSet": "Parámetros no establecidos", - "parametersNotSetDesc": "No se encontraron metadatos para esta imágen.", - "parametersFailed": "Error cargando parámetros", - "parametersFailedDesc": "No fue posible cargar la imagen inicial.", - "seedSet": "Semilla establecida", - "seedNotSet": "Semilla no establecida", - "seedNotSetDesc": "No se encontró una semilla para esta imágen.", - "promptSet": "Entrada establecida", - "promptNotSet": "Entrada no establecida", - "promptNotSetDesc": "No se encontró una entrada para esta imágen.", - "upscalingFailed": "Error al aumentar tamaño de imagn", - "faceRestoreFailed": "Restauración de rostro fallida", - "metadataLoadFailed": "Error al cargar metadatos", - "initialImageSet": "Imágen inicial establecida", - "initialImageNotSet": "Imagen inicial no establecida", - "initialImageNotSetDesc": "Error al establecer la imágen inicial", - "serverError": "Error en el servidor", - "disconnected": "Desconectado del servidor", - "canceled": "Procesando la cancelación", - "connected": "Conectado al servidor", - "problemCopyingImageLink": "No se puede copiar el enlace de la imagen", - "uploadFailedInvalidUploadDesc": "Debe ser una sola imagen PNG o JPEG", - "parameterSet": "Conjunto de parámetros", - "parameterNotSet": "Parámetro no configurado", - "nodesSaved": "Nodos guardados", - "nodesLoadedFailed": "Error al cargar los nodos", - "nodesLoaded": "Nodos cargados", - "problemCopyingImage": "No se puede copiar la imagen", - "nodesNotValidJSON": "JSON no válido", - "nodesCorruptedGraph": "No se puede cargar. El gráfico parece estar dañado.", - "nodesUnrecognizedTypes": "No se puede cargar. El gráfico tiene tipos no reconocidos", - "nodesNotValidGraph": "Gráfico del nodo InvokeAI no válido", - "nodesBrokenConnections": "No se puede cargar. Algunas conexiones están rotas." - }, - "tooltip": { - "feature": { - "prompt": "Este campo tomará todo el texto de entrada, incluidos tanto los términos de contenido como los estilísticos. Si bien se pueden incluir pesos en la solicitud, los comandos/parámetros estándar de línea de comandos no funcionarán.", - "gallery": "Conforme se generan nuevas invocaciones, los archivos del directorio de salida se mostrarán aquí. Las generaciones tienen opciones adicionales para configurar nuevas generaciones.", - "other": "Estas opciones habilitarán modos de procesamiento alternativos para Invoke. 'Seamless mosaico' creará patrones repetitivos en la salida. 'Alta resolución' es la generación en dos pasos con img2img: use esta configuración cuando desee una imagen más grande y más coherente sin artefactos. tomar más tiempo de lo habitual txt2img.", - "seed": "Los valores de semilla proporcionan un conjunto inicial de ruido que guían el proceso de eliminación de ruido y se pueden aleatorizar o rellenar con una semilla de una invocación anterior. La función Umbral se puede usar para mitigar resultados indeseables a valores CFG más altos (intente entre 0-10), y Perlin se puede usar para agregar ruido Perlin al proceso de eliminación de ruido. Ambos sirven para agregar variación a sus salidas.", - "variations": "Pruebe una variación con una cantidad entre 0 y 1 para cambiar la imagen de salida para la semilla establecida. Se encuentran variaciones interesantes en la semilla entre 0.1 y 0.3.", - "upscale": "Usando ESRGAN, puede aumentar la resolución de salida sin requerir un ancho/alto más alto en la generación inicial.", - "faceCorrection": "Usando GFPGAN o Codeformer, la corrección de rostros intentará identificar rostros en las salidas y corregir cualquier defecto/anormalidad. Los valores de fuerza más altos aplicarán una presión correctiva más fuerte en las salidas, lo que resultará en rostros más atractivos. Con Codeformer, una mayor fidelidad intentará preservar la imagen original, a expensas de la fuerza de corrección de rostros.", - "imageToImage": "Imagen a Imagen permite cargar una imagen inicial, que InvokeAI usará para guiar el proceso de generación, junto con una solicitud. Un valor más bajo para esta configuración se parecerá más a la imagen original. Se aceptan valores entre 0-1, y se recomienda un rango de .25-.75", - "boundingBox": "La caja delimitadora es análoga a las configuraciones de Ancho y Alto para Texto a Imagen o Imagen a Imagen. Solo se procesará el área en la caja.", - "seamCorrection": "Controla el manejo de parches visibles que pueden ocurrir cuando se pega una imagen generada de nuevo en el lienzo.", - "infillAndScaling": "Administra los métodos de relleno (utilizados en áreas enmascaradas o borradas del lienzo) y la escala (útil para tamaños de caja delimitadora pequeños)." - } - }, - "unifiedCanvas": { - "layer": "Capa", - "base": "Base", - "mask": "Máscara", - "maskingOptions": "Opciones de máscara", - "enableMask": "Habilitar Máscara", - "preserveMaskedArea": "Preservar área enmascarada", - "clearMask": "Limpiar máscara", - "brush": "Pincel", - "eraser": "Borrador", - "fillBoundingBox": "Rellenar Caja Contenedora", - "eraseBoundingBox": "Eliminar Caja Contenedora", - "colorPicker": "Selector de color", - "brushOptions": "Opciones de pincel", - "brushSize": "Tamaño", - "move": "Mover", - "resetView": "Restablecer vista", - "mergeVisible": "Consolidar vista", - "saveToGallery": "Guardar en galería", - "copyToClipboard": "Copiar al portapapeles", - "downloadAsImage": "Descargar como imagen", - "undo": "Deshacer", - "redo": "Rehacer", - "clearCanvas": "Limpiar lienzo", - "canvasSettings": "Ajustes de lienzo", - "showIntermediates": "Mostrar intermedios", - "showGrid": "Mostrar cuadrícula", - "snapToGrid": "Ajustar a cuadrícula", - "darkenOutsideSelection": "Oscurecer fuera de la selección", - "autoSaveToGallery": "Guardar automáticamente en galería", - "saveBoxRegionOnly": "Guardar solo región dentro de la caja", - "limitStrokesToBox": "Limitar trazos a la caja", - "showCanvasDebugInfo": "Mostrar la información adicional del lienzo", - "clearCanvasHistory": "Limpiar historial de lienzo", - "clearHistory": "Limpiar historial", - "clearCanvasHistoryMessage": "Limpiar el historial de lienzo también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", - "clearCanvasHistoryConfirm": "¿Está seguro de que desea limpiar el historial del lienzo?", - "emptyTempImageFolder": "Vaciar directorio de imágenes temporales", - "emptyFolder": "Vaciar directorio", - "emptyTempImagesFolderMessage": "Vaciar el directorio de imágenes temporales también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", - "emptyTempImagesFolderConfirm": "¿Está seguro de que desea vaciar el directorio temporal?", - "activeLayer": "Capa activa", - "canvasScale": "Escala de lienzo", - "boundingBox": "Caja contenedora", - "scaledBoundingBox": "Caja contenedora escalada", - "boundingBoxPosition": "Posición de caja contenedora", - "canvasDimensions": "Dimensiones de lienzo", - "canvasPosition": "Posición de lienzo", - "cursorPosition": "Posición del cursor", - "previous": "Anterior", - "next": "Siguiente", - "accept": "Aceptar", - "showHide": "Mostrar/Ocultar", - "discardAll": "Descartar todo", - "betaClear": "Limpiar", - "betaDarkenOutside": "Oscurecer fuera", - "betaLimitToBox": "Limitar a caja", - "betaPreserveMasked": "Preservar área enmascarada", - "antialiasing": "Suavizado" - }, - "accessibility": { - "invokeProgressBar": "Activar la barra de progreso", - "modelSelect": "Seleccionar modelo", - "reset": "Reiniciar", - "uploadImage": "Cargar imagen", - "previousImage": "Imagen anterior", - "nextImage": "Siguiente imagen", - "useThisParameter": "Utiliza este parámetro", - "copyMetadataJson": "Copiar los metadatos JSON", - "exitViewer": "Salir del visor", - "zoomIn": "Acercar", - "zoomOut": "Alejar", - "rotateCounterClockwise": "Girar en sentido antihorario", - "rotateClockwise": "Girar en sentido horario", - "flipHorizontally": "Voltear horizontalmente", - "flipVertically": "Voltear verticalmente", - "modifyConfig": "Modificar la configuración", - "toggleAutoscroll": "Activar el autodesplazamiento", - "toggleLogViewer": "Alternar el visor de registros", - "showOptionsPanel": "Mostrar el panel lateral", - "menu": "Menú" - }, - "ui": { - "hideProgressImages": "Ocultar el progreso de la imagen", - "showProgressImages": "Mostrar el progreso de la imagen", - "swapSizes": "Cambiar los tamaños", - "lockRatio": "Proporción del bloqueo" - }, - "nodes": { - "showGraphNodes": "Mostrar la superposición de los gráficos", - "zoomInNodes": "Acercar", - "hideMinimapnodes": "Ocultar el minimapa", - "fitViewportNodes": "Ajustar la vista", - "zoomOutNodes": "Alejar", - "hideGraphNodes": "Ocultar la superposición de los gráficos", - "hideLegendNodes": "Ocultar la leyenda del tipo de campo", - "showLegendNodes": "Mostrar la leyenda del tipo de campo", - "showMinimapnodes": "Mostrar el minimapa", - "reloadNodeTemplates": "Recargar las plantillas de nodos", - "loadWorkflow": "Cargar el flujo de trabajo", - "downloadWorkflow": "Descargar el flujo de trabajo en un archivo JSON" - } -} diff --git a/invokeai/frontend/web/dist/locales/fi.json b/invokeai/frontend/web/dist/locales/fi.json deleted file mode 100644 index cf7fc6701b..0000000000 --- a/invokeai/frontend/web/dist/locales/fi.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "accessibility": { - "reset": "Resetoi", - "useThisParameter": "Käytä tätä parametria", - "modelSelect": "Mallin Valinta", - "exitViewer": "Poistu katselimesta", - "uploadImage": "Lataa kuva", - "copyMetadataJson": "Kopioi metadata JSON:iin", - "invokeProgressBar": "Invoken edistymispalkki", - "nextImage": "Seuraava kuva", - "previousImage": "Edellinen kuva", - "zoomIn": "Lähennä", - "flipHorizontally": "Käännä vaakasuoraan", - "zoomOut": "Loitonna", - "rotateCounterClockwise": "Kierrä vastapäivään", - "rotateClockwise": "Kierrä myötäpäivään", - "flipVertically": "Käännä pystysuoraan", - "modifyConfig": "Muokkaa konfiguraatiota", - "toggleAutoscroll": "Kytke automaattinen vieritys", - "toggleLogViewer": "Kytke lokin katselutila", - "showOptionsPanel": "Näytä asetukset" - }, - "common": { - "postProcessDesc2": "Erillinen käyttöliittymä tullaan julkaisemaan helpottaaksemme työnkulkua jälkikäsittelyssä.", - "training": "Kouluta", - "statusLoadingModel": "Ladataan mallia", - "statusModelChanged": "Malli vaihdettu", - "statusConvertingModel": "Muunnetaan mallia", - "statusModelConverted": "Malli muunnettu", - "langFrench": "Ranska", - "langItalian": "Italia", - "languagePickerLabel": "Kielen valinta", - "hotkeysLabel": "Pikanäppäimet", - "reportBugLabel": "Raportoi Bugista", - "langPolish": "Puola", - "langDutch": "Hollanti", - "settingsLabel": "Asetukset", - "githubLabel": "Github", - "langGerman": "Saksa", - "langPortuguese": "Portugali", - "discordLabel": "Discord", - "langEnglish": "Englanti", - "langRussian": "Venäjä", - "langUkranian": "Ukraina", - "langSpanish": "Espanja", - "upload": "Lataa", - "statusMergedModels": "Mallit yhdistelty", - "img2img": "Kuva kuvaksi", - "nodes": "Solmut", - "nodesDesc": "Solmupohjainen järjestelmä kuvien generoimiseen on parhaillaan kehitteillä. Pysy kuulolla päivityksistä tähän uskomattomaan ominaisuuteen liittyen.", - "postProcessDesc1": "Invoke AI tarjoaa monenlaisia jälkikäsittelyominaisuukisa. Kuvan laadun skaalaus sekä kasvojen korjaus ovat jo saatavilla WebUI:ssä. Voit ottaa ne käyttöön lisäasetusten valikosta teksti kuvaksi sekä kuva kuvaksi -välilehdiltä. Voit myös suoraan prosessoida kuvia käyttämällä kuvan toimintapainikkeita nykyisen kuvan yläpuolella tai tarkastelussa.", - "postprocessing": "Jälkikäsitellään", - "postProcessing": "Jälkikäsitellään", - "cancel": "Peruuta", - "close": "Sulje", - "accept": "Hyväksy", - "statusConnected": "Yhdistetty", - "statusError": "Virhe", - "statusProcessingComplete": "Prosessointi valmis", - "load": "Lataa", - "back": "Takaisin", - "statusGeneratingTextToImage": "Generoidaan tekstiä kuvaksi", - "trainingDesc2": "InvokeAI tukee jo mukautettujen upotusten kouluttamista tekstin inversiolla käyttäen pääskriptiä.", - "statusDisconnected": "Yhteys katkaistu", - "statusPreparing": "Valmistellaan", - "statusIterationComplete": "Iteraatio valmis", - "statusMergingModels": "Yhdistellään malleja", - "statusProcessingCanceled": "Valmistelu peruutettu", - "statusSavingImage": "Tallennetaan kuvaa", - "statusGeneratingImageToImage": "Generoidaan kuvaa kuvaksi", - "statusRestoringFacesGFPGAN": "Korjataan kasvoja (GFPGAN)", - "statusRestoringFacesCodeFormer": "Korjataan kasvoja (CodeFormer)", - "statusGeneratingInpainting": "Generoidaan sisällemaalausta", - "statusGeneratingOutpainting": "Generoidaan ulosmaalausta", - "statusRestoringFaces": "Korjataan kasvoja", - "loadingInvokeAI": "Ladataan Invoke AI:ta", - "loading": "Ladataan", - "statusGenerating": "Generoidaan", - "txt2img": "Teksti kuvaksi", - "trainingDesc1": "Erillinen työnkulku omien upotusten ja tarkastuspisteiden kouluttamiseksi käyttäen tekstin inversiota ja dreamboothia selaimen käyttöliittymässä.", - "postProcessDesc3": "Invoke AI:n komentorivi tarjoaa paljon muita ominaisuuksia, kuten esimerkiksi Embiggenin.", - "unifiedCanvas": "Yhdistetty kanvas", - "statusGenerationComplete": "Generointi valmis" - }, - "gallery": { - "uploads": "Lataukset", - "showUploads": "Näytä lataukset", - "galleryImageResetSize": "Resetoi koko", - "maintainAspectRatio": "Säilytä kuvasuhde", - "galleryImageSize": "Kuvan koko", - "showGenerations": "Näytä generaatiot", - "singleColumnLayout": "Yhden sarakkeen asettelu", - "generations": "Generoinnit", - "gallerySettings": "Gallerian asetukset", - "autoSwitchNewImages": "Vaihda uusiin kuviin automaattisesti", - "allImagesLoaded": "Kaikki kuvat ladattu", - "noImagesInGallery": "Ei kuvia galleriassa", - "loadMore": "Lataa lisää" - }, - "hotkeys": { - "keyboardShortcuts": "näppäimistön pikavalinnat", - "appHotkeys": "Sovelluksen pikanäppäimet", - "generalHotkeys": "Yleiset pikanäppäimet", - "galleryHotkeys": "Gallerian pikanäppäimet", - "unifiedCanvasHotkeys": "Yhdistetyn kanvaan pikanäppäimet", - "cancel": { - "desc": "Peruuta kuvan luominen", - "title": "Peruuta" - }, - "invoke": { - "desc": "Luo kuva" - } - } -} diff --git a/invokeai/frontend/web/dist/locales/fr.json b/invokeai/frontend/web/dist/locales/fr.json deleted file mode 100644 index b7ab932fcc..0000000000 --- a/invokeai/frontend/web/dist/locales/fr.json +++ /dev/null @@ -1,531 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Raccourcis clavier", - "languagePickerLabel": "Sélecteur de langue", - "reportBugLabel": "Signaler un bug", - "settingsLabel": "Paramètres", - "img2img": "Image en image", - "unifiedCanvas": "Canvas unifié", - "nodes": "Nœuds", - "langFrench": "Français", - "nodesDesc": "Un système basé sur les nœuds pour la génération d'images est actuellement en développement. Restez à l'écoute pour des mises à jour à ce sujet.", - "postProcessing": "Post-traitement", - "postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu 'Options avancées' des onglets 'Texte vers image' et 'Image vers image'. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image au-dessus de l'affichage d'image actuel ou dans le visualiseur.", - "postProcessDesc2": "Une interface dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.", - "postProcessDesc3": "L'interface en ligne de commande d'Invoke AI offre diverses autres fonctionnalités, notamment Embiggen.", - "training": "Formation", - "trainingDesc1": "Un workflow dédié pour former vos propres embeddings et checkpoints en utilisant Textual Inversion et Dreambooth depuis l'interface web.", - "trainingDesc2": "InvokeAI prend déjà en charge la formation d'embeddings personnalisés en utilisant Textual Inversion en utilisant le script principal.", - "upload": "Télécharger", - "close": "Fermer", - "load": "Charger", - "back": "Retour", - "statusConnected": "En ligne", - "statusDisconnected": "Hors ligne", - "statusError": "Erreur", - "statusPreparing": "Préparation", - "statusProcessingCanceled": "Traitement annulé", - "statusProcessingComplete": "Traitement terminé", - "statusGenerating": "Génération", - "statusGeneratingTextToImage": "Génération Texte vers Image", - "statusGeneratingImageToImage": "Génération Image vers Image", - "statusGeneratingInpainting": "Génération de réparation", - "statusGeneratingOutpainting": "Génération de complétion", - "statusGenerationComplete": "Génération terminée", - "statusIterationComplete": "Itération terminée", - "statusSavingImage": "Sauvegarde de l'image", - "statusRestoringFaces": "Restauration des visages", - "statusRestoringFacesGFPGAN": "Restauration des visages (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restauration des visages (CodeFormer)", - "statusUpscaling": "Mise à échelle", - "statusUpscalingESRGAN": "Mise à échelle (ESRGAN)", - "statusLoadingModel": "Chargement du modèle", - "statusModelChanged": "Modèle changé", - "discordLabel": "Discord", - "githubLabel": "Github", - "accept": "Accepter", - "statusMergingModels": "Mélange des modèles", - "loadingInvokeAI": "Chargement de Invoke AI", - "cancel": "Annuler", - "langEnglish": "Anglais", - "statusConvertingModel": "Conversion du modèle", - "statusModelConverted": "Modèle converti", - "loading": "Chargement", - "statusMergedModels": "Modèles mélangés", - "txt2img": "Texte vers image", - "postprocessing": "Post-Traitement" - }, - "gallery": { - "generations": "Générations", - "showGenerations": "Afficher les générations", - "uploads": "Téléchargements", - "showUploads": "Afficher les téléchargements", - "galleryImageSize": "Taille de l'image", - "galleryImageResetSize": "Réinitialiser la taille", - "gallerySettings": "Paramètres de la galerie", - "maintainAspectRatio": "Maintenir le rapport d'aspect", - "autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images", - "singleColumnLayout": "Mise en page en colonne unique", - "allImagesLoaded": "Toutes les images chargées", - "loadMore": "Charger plus", - "noImagesInGallery": "Aucune image dans la galerie" - }, - "hotkeys": { - "keyboardShortcuts": "Raccourcis clavier", - "appHotkeys": "Raccourcis de l'application", - "generalHotkeys": "Raccourcis généraux", - "galleryHotkeys": "Raccourcis de la galerie", - "unifiedCanvasHotkeys": "Raccourcis du canvas unifié", - "invoke": { - "title": "Invoquer", - "desc": "Générer une image" - }, - "cancel": { - "title": "Annuler", - "desc": "Annuler la génération d'image" - }, - "focusPrompt": { - "title": "Prompt de focus", - "desc": "Mettre en focus la zone de saisie de la commande" - }, - "toggleOptions": { - "title": "Affichage des options", - "desc": "Afficher et masquer le panneau d'options" - }, - "pinOptions": { - "title": "Epinglage des options", - "desc": "Epingler le panneau d'options" - }, - "toggleViewer": { - "title": "Affichage de la visionneuse", - "desc": "Afficher et masquer la visionneuse d'image" - }, - "toggleGallery": { - "title": "Affichage de la galerie", - "desc": "Afficher et masquer la galerie" - }, - "maximizeWorkSpace": { - "title": "Maximiser la zone de travail", - "desc": "Fermer les panneaux et maximiser la zone de travail" - }, - "changeTabs": { - "title": "Changer d'onglet", - "desc": "Passer à un autre espace de travail" - }, - "consoleToggle": { - "title": "Affichage de la console", - "desc": "Afficher et masquer la console" - }, - "setPrompt": { - "title": "Définir le prompt", - "desc": "Utiliser le prompt de l'image actuelle" - }, - "setSeed": { - "title": "Définir la graine", - "desc": "Utiliser la graine de l'image actuelle" - }, - "setParameters": { - "title": "Définir les paramètres", - "desc": "Utiliser tous les paramètres de l'image actuelle" - }, - "restoreFaces": { - "title": "Restaurer les visages", - "desc": "Restaurer l'image actuelle" - }, - "upscale": { - "title": "Agrandir", - "desc": "Agrandir l'image actuelle" - }, - "showInfo": { - "title": "Afficher les informations", - "desc": "Afficher les informations de métadonnées de l'image actuelle" - }, - "sendToImageToImage": { - "title": "Envoyer à l'image à l'image", - "desc": "Envoyer l'image actuelle à l'image à l'image" - }, - "deleteImage": { - "title": "Supprimer l'image", - "desc": "Supprimer l'image actuelle" - }, - "closePanels": { - "title": "Fermer les panneaux", - "desc": "Fermer les panneaux ouverts" - }, - "previousImage": { - "title": "Image précédente", - "desc": "Afficher l'image précédente dans la galerie" - }, - "nextImage": { - "title": "Image suivante", - "desc": "Afficher l'image suivante dans la galerie" - }, - "toggleGalleryPin": { - "title": "Activer/désactiver l'épinglage de la galerie", - "desc": "Épingle ou dépingle la galerie à l'interface" - }, - "increaseGalleryThumbSize": { - "title": "Augmenter la taille des miniatures de la galerie", - "desc": "Augmente la taille des miniatures de la galerie" - }, - "decreaseGalleryThumbSize": { - "title": "Diminuer la taille des miniatures de la galerie", - "desc": "Diminue la taille des miniatures de la galerie" - }, - "selectBrush": { - "title": "Sélectionner un pinceau", - "desc": "Sélectionne le pinceau de la toile" - }, - "selectEraser": { - "title": "Sélectionner un gomme", - "desc": "Sélectionne la gomme de la toile" - }, - "decreaseBrushSize": { - "title": "Diminuer la taille du pinceau", - "desc": "Diminue la taille du pinceau/gomme de la toile" - }, - "increaseBrushSize": { - "title": "Augmenter la taille du pinceau", - "desc": "Augmente la taille du pinceau/gomme de la toile" - }, - "decreaseBrushOpacity": { - "title": "Diminuer l'opacité du pinceau", - "desc": "Diminue l'opacité du pinceau de la toile" - }, - "increaseBrushOpacity": { - "title": "Augmenter l'opacité du pinceau", - "desc": "Augmente l'opacité du pinceau de la toile" - }, - "moveTool": { - "title": "Outil de déplacement", - "desc": "Permet la navigation sur la toile" - }, - "fillBoundingBox": { - "title": "Remplir la boîte englobante", - "desc": "Remplit la boîte englobante avec la couleur du pinceau" - }, - "eraseBoundingBox": { - "title": "Effacer la boîte englobante", - "desc": "Efface la zone de la boîte englobante" - }, - "colorPicker": { - "title": "Sélectionnez le sélecteur de couleur", - "desc": "Sélectionne le sélecteur de couleur de la toile" - }, - "toggleSnap": { - "title": "Basculer Snap", - "desc": "Basculer Snap à la grille" - }, - "quickToggleMove": { - "title": "Basculer rapidement déplacer", - "desc": "Basculer temporairement le mode Déplacer" - }, - "toggleLayer": { - "title": "Basculer la couche", - "desc": "Basculer la sélection de la couche masque/base" - }, - "clearMask": { - "title": "Effacer le masque", - "desc": "Effacer entièrement le masque" - }, - "hideMask": { - "title": "Masquer le masque", - "desc": "Masquer et démasquer le masque" - }, - "showHideBoundingBox": { - "title": "Afficher/Masquer la boîte englobante", - "desc": "Basculer la visibilité de la boîte englobante" - }, - "mergeVisible": { - "title": "Fusionner visible", - "desc": "Fusionner toutes les couches visibles de la toile" - }, - "saveToGallery": { - "title": "Enregistrer dans la galerie", - "desc": "Enregistrer la toile actuelle dans la galerie" - }, - "copyToClipboard": { - "title": "Copier dans le presse-papiers", - "desc": "Copier la toile actuelle dans le presse-papiers" - }, - "downloadImage": { - "title": "Télécharger l'image", - "desc": "Télécharger la toile actuelle" - }, - "undoStroke": { - "title": "Annuler le trait", - "desc": "Annuler un coup de pinceau" - }, - "redoStroke": { - "title": "Rétablir le trait", - "desc": "Rétablir un coup de pinceau" - }, - "resetView": { - "title": "Réinitialiser la vue", - "desc": "Réinitialiser la vue de la toile" - }, - "previousStagingImage": { - "title": "Image de mise en scène précédente", - "desc": "Image précédente de la zone de mise en scène" - }, - "nextStagingImage": { - "title": "Image de mise en scène suivante", - "desc": "Image suivante de la zone de mise en scène" - }, - "acceptStagingImage": { - "title": "Accepter l'image de mise en scène", - "desc": "Accepter l'image actuelle de la zone de mise en scène" - } - }, - "modelManager": { - "modelManager": "Gestionnaire de modèle", - "model": "Modèle", - "allModels": "Tous les modèles", - "checkpointModels": "Points de contrôle", - "diffusersModels": "Diffuseurs", - "safetensorModels": "SafeTensors", - "modelAdded": "Modèle ajouté", - "modelUpdated": "Modèle mis à jour", - "modelEntryDeleted": "Entrée de modèle supprimée", - "cannotUseSpaces": "Ne peut pas utiliser d'espaces", - "addNew": "Ajouter un nouveau", - "addNewModel": "Ajouter un nouveau modèle", - "addCheckpointModel": "Ajouter un modèle de point de contrôle / SafeTensor", - "addDiffuserModel": "Ajouter des diffuseurs", - "addManually": "Ajouter manuellement", - "manual": "Manuel", - "name": "Nom", - "nameValidationMsg": "Entrez un nom pour votre modèle", - "description": "Description", - "descriptionValidationMsg": "Ajoutez une description pour votre modèle", - "config": "Config", - "configValidationMsg": "Chemin vers le fichier de configuration de votre modèle.", - "modelLocation": "Emplacement du modèle", - "modelLocationValidationMsg": "Chemin vers où votre modèle est situé localement.", - "repo_id": "ID de dépôt", - "repoIDValidationMsg": "Dépôt en ligne de votre modèle", - "vaeLocation": "Emplacement VAE", - "vaeLocationValidationMsg": "Chemin vers où votre VAE est situé.", - "vaeRepoID": "ID de dépôt VAE", - "vaeRepoIDValidationMsg": "Dépôt en ligne de votre VAE", - "width": "Largeur", - "widthValidationMsg": "Largeur par défaut de votre modèle.", - "height": "Hauteur", - "heightValidationMsg": "Hauteur par défaut de votre modèle.", - "addModel": "Ajouter un modèle", - "updateModel": "Mettre à jour le modèle", - "availableModels": "Modèles disponibles", - "search": "Rechercher", - "load": "Charger", - "active": "actif", - "notLoaded": "non chargé", - "cached": "en cache", - "checkpointFolder": "Dossier de point de contrôle", - "clearCheckpointFolder": "Effacer le dossier de point de contrôle", - "findModels": "Trouver des modèles", - "scanAgain": "Scanner à nouveau", - "modelsFound": "Modèles trouvés", - "selectFolder": "Sélectionner un dossier", - "selected": "Sélectionné", - "selectAll": "Tout sélectionner", - "deselectAll": "Tout désélectionner", - "showExisting": "Afficher existant", - "addSelected": "Ajouter sélectionné", - "modelExists": "Modèle existant", - "selectAndAdd": "Sélectionner et ajouter les modèles listés ci-dessous", - "noModelsFound": "Aucun modèle trouvé", - "delete": "Supprimer", - "deleteModel": "Supprimer le modèle", - "deleteConfig": "Supprimer la configuration", - "deleteMsg1": "Voulez-vous vraiment supprimer cette entrée de modèle dans InvokeAI ?", - "deleteMsg2": "Cela n'effacera pas le fichier de point de contrôle du modèle de votre disque. Vous pouvez les réajouter si vous le souhaitez.", - "formMessageDiffusersModelLocation": "Emplacement du modèle de diffuseurs", - "formMessageDiffusersModelLocationDesc": "Veuillez en entrer au moins un.", - "formMessageDiffusersVAELocation": "Emplacement VAE", - "formMessageDiffusersVAELocationDesc": "Si non fourni, InvokeAI recherchera le fichier VAE à l'emplacement du modèle donné ci-dessus." - }, - "parameters": { - "images": "Images", - "steps": "Etapes", - "cfgScale": "CFG Echelle", - "width": "Largeur", - "height": "Hauteur", - "seed": "Graine", - "randomizeSeed": "Graine Aléatoire", - "shuffle": "Mélanger", - "noiseThreshold": "Seuil de Bruit", - "perlinNoise": "Bruit de Perlin", - "variations": "Variations", - "variationAmount": "Montant de Variation", - "seedWeights": "Poids des Graines", - "faceRestoration": "Restauration de Visage", - "restoreFaces": "Restaurer les Visages", - "type": "Type", - "strength": "Force", - "upscaling": "Agrandissement", - "upscale": "Agrandir", - "upscaleImage": "Image en Agrandissement", - "scale": "Echelle", - "otherOptions": "Autres Options", - "seamlessTiling": "Carreau Sans Joint", - "hiresOptim": "Optimisation Haute Résolution", - "imageFit": "Ajuster Image Initiale à la Taille de Sortie", - "codeformerFidelity": "Fidélité", - "scaleBeforeProcessing": "Echelle Avant Traitement", - "scaledWidth": "Larg. Échelle", - "scaledHeight": "Haut. Échelle", - "infillMethod": "Méthode de Remplissage", - "tileSize": "Taille des Tuiles", - "boundingBoxHeader": "Boîte Englobante", - "seamCorrectionHeader": "Correction des Joints", - "infillScalingHeader": "Remplissage et Mise à l'Échelle", - "img2imgStrength": "Force de l'Image à l'Image", - "toggleLoopback": "Activer/Désactiver la Boucle", - "sendTo": "Envoyer à", - "sendToImg2Img": "Envoyer à Image à Image", - "sendToUnifiedCanvas": "Envoyer au Canvas Unifié", - "copyImage": "Copier Image", - "copyImageToLink": "Copier l'Image en Lien", - "downloadImage": "Télécharger Image", - "openInViewer": "Ouvrir dans le visualiseur", - "closeViewer": "Fermer le visualiseur", - "usePrompt": "Utiliser la suggestion", - "useSeed": "Utiliser la graine", - "useAll": "Tout utiliser", - "useInitImg": "Utiliser l'image initiale", - "info": "Info", - "initialImage": "Image initiale", - "showOptionsPanel": "Afficher le panneau d'options" - }, - "settings": { - "models": "Modèles", - "displayInProgress": "Afficher les images en cours", - "saveSteps": "Enregistrer les images tous les n étapes", - "confirmOnDelete": "Confirmer la suppression", - "displayHelpIcons": "Afficher les icônes d'aide", - "enableImageDebugging": "Activer le débogage d'image", - "resetWebUI": "Réinitialiser l'interface Web", - "resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.", - "resetWebUIDesc2": "Si les images ne s'affichent pas dans la galerie ou si quelque chose d'autre ne fonctionne pas, veuillez essayer de réinitialiser avant de soumettre une demande sur GitHub.", - "resetComplete": "L'interface Web a été réinitialisée. Rafraîchissez la page pour recharger." - }, - "toast": { - "tempFoldersEmptied": "Dossiers temporaires vidés", - "uploadFailed": "Téléchargement échoué", - "uploadFailedUnableToLoadDesc": "Impossible de charger le fichier", - "downloadImageStarted": "Téléchargement de l'image démarré", - "imageCopied": "Image copiée", - "imageLinkCopied": "Lien d'image copié", - "imageNotLoaded": "Aucune image chargée", - "imageNotLoadedDesc": "Aucune image trouvée pour envoyer à module d'image", - "imageSavedToGallery": "Image enregistrée dans la galerie", - "canvasMerged": "Canvas fusionné", - "sentToImageToImage": "Envoyé à Image à Image", - "sentToUnifiedCanvas": "Envoyé à Canvas unifié", - "parametersSet": "Paramètres définis", - "parametersNotSet": "Paramètres non définis", - "parametersNotSetDesc": "Aucune métadonnée trouvée pour cette image.", - "parametersFailed": "Problème de chargement des paramètres", - "parametersFailedDesc": "Impossible de charger l'image d'initiation.", - "seedSet": "Graine définie", - "seedNotSet": "Graine non définie", - "seedNotSetDesc": "Impossible de trouver la graine pour cette image.", - "promptSet": "Invite définie", - "promptNotSet": "Invite non définie", - "promptNotSetDesc": "Impossible de trouver l'invite pour cette image.", - "upscalingFailed": "Échec de la mise à l'échelle", - "faceRestoreFailed": "Échec de la restauration du visage", - "metadataLoadFailed": "Échec du chargement des métadonnées", - "initialImageSet": "Image initiale définie", - "initialImageNotSet": "Image initiale non définie", - "initialImageNotSetDesc": "Impossible de charger l'image initiale" - }, - "tooltip": { - "feature": { - "prompt": "Ceci est le champ prompt. Le prompt inclut des objets de génération et des termes stylistiques. Vous pouvez également ajouter un poids (importance du jeton) dans le prompt, mais les commandes CLI et les paramètres ne fonctionneront pas.", - "gallery": "La galerie affiche les générations à partir du dossier de sortie à mesure qu'elles sont créées. Les paramètres sont stockés dans des fichiers et accessibles via le menu contextuel.", - "other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img : utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.", - "seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération : les deux servent à ajouter de la variété à vos sorties.", - "variations": "Essayez une variation avec une valeur comprise entre 0,1 et 1,0 pour changer le résultat pour une graine donnée. Des variations intéressantes de la graine sont entre 0,1 et 0,3.", - "upscale": "Utilisez ESRGAN pour agrandir l'image immédiatement après la génération.", - "faceCorrection": "Correction de visage avec GFPGAN ou Codeformer : l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.", - "imageToImage": "Image to Image charge n'importe quelle image en tant qu'initiale, qui est ensuite utilisée pour générer une nouvelle avec le prompt. Plus la valeur est élevée, plus l'image de résultat changera. Des valeurs de 0,0 à 1,0 sont possibles, la plage recommandée est de 0,25 à 0,75", - "boundingBox": "La boîte englobante est la même que les paramètres Largeur et Hauteur pour Texte à Image ou Image à Image. Seulement la zone dans la boîte sera traitée.", - "seamCorrection": "Contrôle la gestion des coutures visibles qui se produisent entre les images générées sur la toile.", - "infillAndScaling": "Gérer les méthodes de remplissage (utilisées sur les zones masquées ou effacées de la toile) et le redimensionnement (utile pour les petites tailles de boîte englobante)." - } - }, - "unifiedCanvas": { - "layer": "Couche", - "base": "Base", - "mask": "Masque", - "maskingOptions": "Options de masquage", - "enableMask": "Activer le masque", - "preserveMaskedArea": "Préserver la zone masquée", - "clearMask": "Effacer le masque", - "brush": "Pinceau", - "eraser": "Gomme", - "fillBoundingBox": "Remplir la boîte englobante", - "eraseBoundingBox": "Effacer la boîte englobante", - "colorPicker": "Sélecteur de couleur", - "brushOptions": "Options de pinceau", - "brushSize": "Taille", - "move": "Déplacer", - "resetView": "Réinitialiser la vue", - "mergeVisible": "Fusionner les visibles", - "saveToGallery": "Enregistrer dans la galerie", - "copyToClipboard": "Copier dans le presse-papiers", - "downloadAsImage": "Télécharger en tant qu'image", - "undo": "Annuler", - "redo": "Refaire", - "clearCanvas": "Effacer le canvas", - "canvasSettings": "Paramètres du canvas", - "showIntermediates": "Afficher les intermédiaires", - "showGrid": "Afficher la grille", - "snapToGrid": "Aligner sur la grille", - "darkenOutsideSelection": "Assombrir à l'extérieur de la sélection", - "autoSaveToGallery": "Enregistrement automatique dans la galerie", - "saveBoxRegionOnly": "Enregistrer uniquement la région de la boîte", - "limitStrokesToBox": "Limiter les traits à la boîte", - "showCanvasDebugInfo": "Afficher les informations de débogage du canvas", - "clearCanvasHistory": "Effacer l'historique du canvas", - "clearHistory": "Effacer l'historique", - "clearCanvasHistoryMessage": "Effacer l'historique du canvas laisse votre canvas actuel intact, mais efface de manière irréversible l'historique annuler et refaire.", - "clearCanvasHistoryConfirm": "Voulez-vous vraiment effacer l'historique du canvas ?", - "emptyTempImageFolder": "Vider le dossier d'images temporaires", - "emptyFolder": "Vider le dossier", - "emptyTempImagesFolderMessage": "Vider le dossier d'images temporaires réinitialise également complètement le canvas unifié. Cela inclut tout l'historique annuler/refaire, les images dans la zone de mise en attente et la couche de base du canvas.", - "emptyTempImagesFolderConfirm": "Voulez-vous vraiment vider le dossier temporaire ?", - "activeLayer": "Calque actif", - "canvasScale": "Échelle du canevas", - "boundingBox": "Boîte englobante", - "scaledBoundingBox": "Boîte englobante mise à l'échelle", - "boundingBoxPosition": "Position de la boîte englobante", - "canvasDimensions": "Dimensions du canevas", - "canvasPosition": "Position du canevas", - "cursorPosition": "Position du curseur", - "previous": "Précédent", - "next": "Suivant", - "accept": "Accepter", - "showHide": "Afficher/Masquer", - "discardAll": "Tout abandonner", - "betaClear": "Effacer", - "betaDarkenOutside": "Assombrir à l'extérieur", - "betaLimitToBox": "Limiter à la boîte", - "betaPreserveMasked": "Conserver masqué" - }, - "accessibility": { - "uploadImage": "Charger une image", - "reset": "Réinitialiser", - "nextImage": "Image suivante", - "previousImage": "Image précédente", - "useThisParameter": "Utiliser ce paramètre", - "zoomIn": "Zoom avant", - "zoomOut": "Zoom arrière", - "showOptionsPanel": "Montrer la page d'options", - "modelSelect": "Choix du modèle", - "invokeProgressBar": "Barre de Progression Invoke", - "copyMetadataJson": "Copie des métadonnées JSON", - "menu": "Menu" - } -} diff --git a/invokeai/frontend/web/dist/locales/he.json b/invokeai/frontend/web/dist/locales/he.json deleted file mode 100644 index dfb5ea0360..0000000000 --- a/invokeai/frontend/web/dist/locales/he.json +++ /dev/null @@ -1,575 +0,0 @@ -{ - "modelManager": { - "cannotUseSpaces": "לא ניתן להשתמש ברווחים", - "addNew": "הוסף חדש", - "vaeLocationValidationMsg": "נתיב למקום שבו ממוקם ה- VAE שלך.", - "height": "גובה", - "load": "טען", - "search": "חיפוש", - "heightValidationMsg": "גובה ברירת המחדל של המודל שלך.", - "addNewModel": "הוסף מודל חדש", - "allModels": "כל המודלים", - "checkpointModels": "נקודות ביקורת", - "diffusersModels": "מפזרים", - "safetensorModels": "טנסורים בטוחים", - "modelAdded": "מודל התווסף", - "modelUpdated": "מודל עודכן", - "modelEntryDeleted": "רשומת המודל נמחקה", - "addCheckpointModel": "הוסף נקודת ביקורת / מודל טנסור בטוח", - "addDiffuserModel": "הוסף מפזרים", - "addManually": "הוספה ידנית", - "manual": "ידני", - "name": "שם", - "description": "תיאור", - "descriptionValidationMsg": "הוסף תיאור למודל שלך", - "config": "תצורה", - "configValidationMsg": "נתיב לקובץ התצורה של המודל שלך.", - "modelLocation": "מיקום המודל", - "modelLocationValidationMsg": "נתיב למקום שבו המודל שלך ממוקם באופן מקומי.", - "repo_id": "מזהה מאגר", - "repoIDValidationMsg": "מאגר מקוון של המודל שלך", - "vaeLocation": "מיקום VAE", - "vaeRepoIDValidationMsg": "המאגר המקוון של VAE שלך", - "width": "רוחב", - "widthValidationMsg": "רוחב ברירת המחדל של המודל שלך.", - "addModel": "הוסף מודל", - "updateModel": "עדכן מודל", - "active": "פעיל", - "modelsFound": "מודלים נמצאו", - "cached": "נשמר במטמון", - "checkpointFolder": "תיקיית נקודות ביקורת", - "findModels": "מצא מודלים", - "scanAgain": "סרוק מחדש", - "selectFolder": "בחירת תיקייה", - "selected": "נבחר", - "selectAll": "בחר הכל", - "deselectAll": "ביטול בחירת הכל", - "showExisting": "הצג קיים", - "addSelected": "הוסף פריטים שנבחרו", - "modelExists": "המודל קיים", - "selectAndAdd": "בחר והוסך מודלים המפורטים להלן", - "deleteModel": "מחיקת מודל", - "deleteConfig": "מחיקת תצורה", - "formMessageDiffusersModelLocation": "מיקום מפזרי המודל", - "formMessageDiffusersModelLocationDesc": "נא להזין לפחות אחד.", - "convertToDiffusersHelpText5": "אנא ודא/י שיש לך מספיק מקום בדיסק. גדלי מודלים בדרך כלל הינם בין 4GB-7GB.", - "convertToDiffusersHelpText1": "מודל זה יומר לפורמט 🧨 המפזרים.", - "convertToDiffusersHelpText2": "תהליך זה יחליף את הרשומה של מנהל המודלים שלך בגרסת המפזרים של אותו המודל.", - "convertToDiffusersHelpText6": "האם ברצונך להמיר מודל זה?", - "convertToDiffusersSaveLocation": "שמירת מיקום", - "inpainting": "v1 צביעת תוך", - "statusConverting": "ממיר", - "modelConverted": "מודל הומר", - "sameFolder": "אותה תיקיה", - "custom": "התאמה אישית", - "merge": "מזג", - "modelsMerged": "מודלים מוזגו", - "mergeModels": "מזג מודלים", - "modelOne": "מודל 1", - "customSaveLocation": "מיקום שמירה מותאם אישית", - "alpha": "אלפא", - "mergedModelSaveLocation": "שמירת מיקום", - "mergedModelCustomSaveLocation": "נתיב מותאם אישית", - "ignoreMismatch": "התעלמות מאי-התאמות בין מודלים שנבחרו", - "modelMergeHeaderHelp1": "ניתן למזג עד שלושה מודלים שונים כדי ליצור שילוב שמתאים לצרכים שלכם.", - "modelMergeAlphaHelp": "אלפא שולט בחוזק מיזוג עבור המודלים. ערכי אלפא נמוכים יותר מובילים להשפעה נמוכה יותר של המודל השני.", - "nameValidationMsg": "הכנס שם למודל שלך", - "vaeRepoID": "מזהה מאגר ה VAE", - "modelManager": "מנהל המודלים", - "model": "מודל", - "availableModels": "מודלים זמינים", - "notLoaded": "לא נטען", - "clearCheckpointFolder": "נקה את תיקיית נקודות הביקורת", - "noModelsFound": "לא נמצאו מודלים", - "delete": "מחיקה", - "deleteMsg1": "האם אתה בטוח שברצונך למחוק רשומת מודל זו מ- InvokeAI?", - "deleteMsg2": "פעולה זו לא תמחק את קובץ נקודת הביקורת מהדיסק שלך. ניתן לקרוא אותם מחדש במידת הצורך.", - "formMessageDiffusersVAELocation": "מיקום VAE", - "formMessageDiffusersVAELocationDesc": "במידה ולא מסופק, InvokeAI תחפש את קובץ ה-VAE במיקום המודל המופיע לעיל.", - "convertToDiffusers": "המרה למפזרים", - "convert": "המרה", - "modelTwo": "מודל 2", - "modelThree": "מודל 3", - "mergedModelName": "שם מודל ממוזג", - "v1": "v1", - "invokeRoot": "תיקיית InvokeAI", - "customConfig": "תצורה מותאמת אישית", - "pathToCustomConfig": "נתיב לתצורה מותאמת אישית", - "interpolationType": "סוג אינטרפולציה", - "invokeAIFolder": "תיקיית InvokeAI", - "sigmoid": "סיגמואיד", - "weightedSum": "סכום משוקלל", - "modelMergeHeaderHelp2": "רק מפזרים זמינים למיזוג. אם ברצונך למזג מודל של נקודת ביקורת, המר אותו תחילה למפזרים.", - "inverseSigmoid": "הפוך סיגמואיד", - "convertToDiffusersHelpText3": "קובץ נקודת הביקורת שלך בדיסק לא יימחק או ישונה בכל מקרה. אתה יכול להוסיף את נקודת הביקורת שלך למנהל המודלים שוב אם תרצה בכך.", - "convertToDiffusersHelpText4": "זהו תהליך חד פעמי בלבד. התהליך עשוי לקחת בסביבות 30-60 שניות, תלוי במפרט המחשב שלך.", - "modelMergeInterpAddDifferenceHelp": "במצב זה, מודל 3 מופחת תחילה ממודל 2. הגרסה המתקבלת משולבת עם מודל 1 עם קצב האלפא שנקבע לעיל." - }, - "common": { - "nodesDesc": "מערכת מבוססת צמתים עבור יצירת תמונות עדיין תחת פיתוח. השארו קשובים לעדכונים עבור הפיצ׳ר המדהים הזה.", - "languagePickerLabel": "בחירת שפה", - "githubLabel": "גיטהאב", - "discordLabel": "דיסקורד", - "settingsLabel": "הגדרות", - "langEnglish": "אנגלית", - "langDutch": "הולנדית", - "langArabic": "ערבית", - "langFrench": "צרפתית", - "langGerman": "גרמנית", - "langJapanese": "יפנית", - "langBrPortuguese": "פורטוגזית", - "langRussian": "רוסית", - "langSimplifiedChinese": "סינית", - "langUkranian": "אוקראינית", - "langSpanish": "ספרדית", - "img2img": "תמונה לתמונה", - "unifiedCanvas": "קנבס מאוחד", - "nodes": "צמתים", - "postProcessing": "לאחר עיבוד", - "postProcessDesc2": "תצוגה ייעודית תשוחרר בקרוב על מנת לתמוך בתהליכים ועיבודים מורכבים.", - "postProcessDesc3": "ממשק שורת הפקודה של Invoke AI מציע תכונות שונות אחרות כולל Embiggen.", - "close": "סגירה", - "statusConnected": "מחובר", - "statusDisconnected": "מנותק", - "statusError": "שגיאה", - "statusPreparing": "בהכנה", - "statusProcessingCanceled": "עיבוד בוטל", - "statusProcessingComplete": "עיבוד הסתיים", - "statusGenerating": "מייצר", - "statusGeneratingTextToImage": "מייצר טקסט לתמונה", - "statusGeneratingImageToImage": "מייצר תמונה לתמונה", - "statusGeneratingInpainting": "מייצר ציור לתוך", - "statusGeneratingOutpainting": "מייצר ציור החוצה", - "statusIterationComplete": "איטרציה הסתיימה", - "statusRestoringFaces": "משחזר פרצופים", - "statusRestoringFacesCodeFormer": "משחזר פרצופים (CodeFormer)", - "statusUpscaling": "העלאת קנה מידה", - "statusUpscalingESRGAN": "העלאת קנה מידה (ESRGAN)", - "statusModelChanged": "מודל השתנה", - "statusConvertingModel": "ממיר מודל", - "statusModelConverted": "מודל הומר", - "statusMergingModels": "מיזוג מודלים", - "statusMergedModels": "מודלים מוזגו", - "hotkeysLabel": "מקשים חמים", - "reportBugLabel": "דווח באג", - "langItalian": "איטלקית", - "upload": "העלאה", - "langPolish": "פולנית", - "training": "אימון", - "load": "טעינה", - "back": "אחורה", - "statusSavingImage": "שומר תמונה", - "statusGenerationComplete": "ייצור הסתיים", - "statusRestoringFacesGFPGAN": "משחזר פרצופים (GFPGAN)", - "statusLoadingModel": "טוען מודל", - "trainingDesc2": "InvokeAI כבר תומך באימון הטמעות מותאמות אישית באמצעות היפוך טקסט באמצעות הסקריפט הראשי.", - "postProcessDesc1": "InvokeAI מציעה מגוון רחב של תכונות עיבוד שלאחר. העלאת קנה מידה של תמונה ושחזור פנים כבר זמינים בממשק המשתמש. ניתן לגשת אליהם מתפריט 'אפשרויות מתקדמות' בכרטיסיות 'טקסט לתמונה' ו'תמונה לתמונה'. ניתן גם לעבד תמונות ישירות, באמצעות לחצני הפעולה של התמונה מעל תצוגת התמונה הנוכחית או בתוך המציג.", - "trainingDesc1": "תהליך עבודה ייעודי לאימון ההטמעות ונקודות הביקורת שלך באמצעות היפוך טקסט ו-Dreambooth מממשק המשתמש." - }, - "hotkeys": { - "toggleGallery": { - "desc": "פתח וסגור את מגירת הגלריה", - "title": "הצג את הגלריה" - }, - "keyboardShortcuts": "קיצורי מקלדת", - "appHotkeys": "קיצורי אפליקציה", - "generalHotkeys": "קיצורי דרך כלליים", - "galleryHotkeys": "קיצורי דרך של הגלריה", - "unifiedCanvasHotkeys": "קיצורי דרך לקנבס המאוחד", - "invoke": { - "title": "הפעל", - "desc": "צור תמונה" - }, - "focusPrompt": { - "title": "התמקדות על הבקשה", - "desc": "התמקדות על איזור הקלדת הבקשה" - }, - "toggleOptions": { - "desc": "פתח וסגור את פאנל ההגדרות", - "title": "הצג הגדרות" - }, - "pinOptions": { - "title": "הצמד הגדרות", - "desc": "הצמד את פאנל ההגדרות" - }, - "toggleViewer": { - "title": "הצג את חלון ההצגה", - "desc": "פתח וסגור את מציג התמונות" - }, - "changeTabs": { - "title": "החלף לשוניות", - "desc": "החלף לאיזור עבודה אחר" - }, - "consoleToggle": { - "desc": "פתח וסגור את הקונסול", - "title": "הצג קונסול" - }, - "setPrompt": { - "title": "הגדרת בקשה", - "desc": "שימוש בבקשה של התמונה הנוכחית" - }, - "restoreFaces": { - "desc": "שחזור התמונה הנוכחית", - "title": "שחזור פרצופים" - }, - "upscale": { - "title": "הגדלת קנה מידה", - "desc": "הגדל את התמונה הנוכחית" - }, - "showInfo": { - "title": "הצג מידע", - "desc": "הצגת פרטי מטא-נתונים של התמונה הנוכחית" - }, - "sendToImageToImage": { - "title": "שלח לתמונה לתמונה", - "desc": "שלח תמונה נוכחית לתמונה לתמונה" - }, - "deleteImage": { - "title": "מחק תמונה", - "desc": "מחק את התמונה הנוכחית" - }, - "closePanels": { - "title": "סגור לוחות", - "desc": "סוגר לוחות פתוחים" - }, - "previousImage": { - "title": "תמונה קודמת", - "desc": "הצג את התמונה הקודמת בגלריה" - }, - "toggleGalleryPin": { - "title": "הצג את מצמיד הגלריה", - "desc": "הצמדה וביטול הצמדה של הגלריה לממשק המשתמש" - }, - "decreaseGalleryThumbSize": { - "title": "הקטנת גודל תמונת גלריה", - "desc": "מקטין את גודל התמונות הממוזערות של הגלריה" - }, - "selectBrush": { - "desc": "בוחר את מברשת הקנבס", - "title": "בחר מברשת" - }, - "selectEraser": { - "title": "בחר מחק", - "desc": "בוחר את מחק הקנבס" - }, - "decreaseBrushSize": { - "title": "הקטנת גודל המברשת", - "desc": "מקטין את גודל מברשת הקנבס/מחק" - }, - "increaseBrushSize": { - "desc": "מגדיל את גודל מברשת הקנבס/מחק", - "title": "הגדלת גודל המברשת" - }, - "decreaseBrushOpacity": { - "title": "הפחת את אטימות המברשת", - "desc": "מקטין את האטימות של מברשת הקנבס" - }, - "increaseBrushOpacity": { - "title": "הגדל את אטימות המברשת", - "desc": "מגביר את האטימות של מברשת הקנבס" - }, - "moveTool": { - "title": "כלי הזזה", - "desc": "מאפשר ניווט על קנבס" - }, - "fillBoundingBox": { - "desc": "ממלא את התיבה התוחמת בצבע מברשת", - "title": "מילוי תיבה תוחמת" - }, - "eraseBoundingBox": { - "desc": "מוחק את אזור התיבה התוחמת", - "title": "מחק תיבה תוחמת" - }, - "colorPicker": { - "title": "בחר בבורר צבעים", - "desc": "בוחר את בורר צבעי הקנבס" - }, - "toggleSnap": { - "title": "הפעל הצמדה", - "desc": "מפעיל הצמדה לרשת" - }, - "quickToggleMove": { - "title": "הפעלה מהירה להזזה", - "desc": "מפעיל זמנית את מצב ההזזה" - }, - "toggleLayer": { - "title": "הפעל שכבה", - "desc": "הפעל בחירת שכבת בסיס/מסיכה" - }, - "clearMask": { - "title": "נקה מסיכה", - "desc": "נקה את כל המסכה" - }, - "hideMask": { - "desc": "הסתרה והצגה של מסיכה", - "title": "הסתר מסיכה" - }, - "showHideBoundingBox": { - "title": "הצגה/הסתרה של תיבה תוחמת", - "desc": "הפעל תצוגה של התיבה התוחמת" - }, - "mergeVisible": { - "title": "מיזוג תוכן גלוי", - "desc": "מיזוג כל השכבות הגלויות של הקנבס" - }, - "saveToGallery": { - "title": "שמור לגלריה", - "desc": "שמור את הקנבס הנוכחי בגלריה" - }, - "copyToClipboard": { - "title": "העתק ללוח ההדבקה", - "desc": "העתק את הקנבס הנוכחי ללוח ההדבקה" - }, - "downloadImage": { - "title": "הורד תמונה", - "desc": "הורד את הקנבס הנוכחי" - }, - "undoStroke": { - "title": "בטל משיכה", - "desc": "בטל משיכת מברשת" - }, - "redoStroke": { - "title": "בצע שוב משיכה", - "desc": "ביצוע מחדש של משיכת מברשת" - }, - "resetView": { - "title": "איפוס תצוגה", - "desc": "אפס תצוגת קנבס" - }, - "previousStagingImage": { - "desc": "תמונת אזור ההערכות הקודמת", - "title": "תמונת הערכות קודמת" - }, - "nextStagingImage": { - "title": "תמנות הערכות הבאה", - "desc": "תמונת אזור ההערכות הבאה" - }, - "acceptStagingImage": { - "desc": "אשר את תמונת איזור ההערכות הנוכחית", - "title": "אשר תמונת הערכות" - }, - "cancel": { - "desc": "ביטול יצירת תמונה", - "title": "ביטול" - }, - "maximizeWorkSpace": { - "title": "מקסם את איזור העבודה", - "desc": "סגור פאנלים ומקסם את איזור העבודה" - }, - "setSeed": { - "title": "הגדר זרע", - "desc": "השתמש בזרע התמונה הנוכחית" - }, - "setParameters": { - "title": "הגדרת פרמטרים", - "desc": "שימוש בכל הפרמטרים של התמונה הנוכחית" - }, - "increaseGalleryThumbSize": { - "title": "הגדל את גודל תמונת הגלריה", - "desc": "מגדיל את התמונות הממוזערות של הגלריה" - }, - "nextImage": { - "title": "תמונה הבאה", - "desc": "הצג את התמונה הבאה בגלריה" - } - }, - "gallery": { - "uploads": "העלאות", - "galleryImageSize": "גודל תמונה", - "gallerySettings": "הגדרות גלריה", - "maintainAspectRatio": "שמור על יחס רוחב-גובה", - "autoSwitchNewImages": "החלף אוטומטית לתמונות חדשות", - "singleColumnLayout": "תצוגת עמודה אחת", - "allImagesLoaded": "כל התמונות נטענו", - "loadMore": "טען עוד", - "noImagesInGallery": "אין תמונות בגלריה", - "galleryImageResetSize": "איפוס גודל", - "generations": "דורות", - "showGenerations": "הצג דורות", - "showUploads": "הצג העלאות" - }, - "parameters": { - "images": "תמונות", - "steps": "צעדים", - "cfgScale": "סולם CFG", - "width": "רוחב", - "height": "גובה", - "seed": "זרע", - "imageToImage": "תמונה לתמונה", - "randomizeSeed": "זרע אקראי", - "variationAmount": "כמות וריאציה", - "seedWeights": "משקלי זרע", - "faceRestoration": "שחזור פנים", - "restoreFaces": "שחזר פנים", - "type": "סוג", - "strength": "חוזק", - "upscale": "הגדלת קנה מידה", - "upscaleImage": "הגדלת קנה מידת התמונה", - "denoisingStrength": "חוזק מנטרל הרעש", - "otherOptions": "אפשרויות אחרות", - "hiresOptim": "אופטימיזצית רזולוציה גבוהה", - "hiresStrength": "חוזק רזולוציה גבוהה", - "codeformerFidelity": "דבקות", - "scaleBeforeProcessing": "שנה קנה מידה לפני עיבוד", - "scaledWidth": "קנה מידה לאחר שינוי W", - "scaledHeight": "קנה מידה לאחר שינוי H", - "infillMethod": "שיטת מילוי", - "tileSize": "גודל אריח", - "boundingBoxHeader": "תיבה תוחמת", - "seamCorrectionHeader": "תיקון תפר", - "infillScalingHeader": "מילוי וקנה מידה", - "toggleLoopback": "הפעל לולאה חוזרת", - "symmetry": "סימטריה", - "vSymmetryStep": "צעד סימטריה V", - "hSymmetryStep": "צעד סימטריה H", - "cancel": { - "schedule": "ביטול לאחר האיטרציה הנוכחית", - "isScheduled": "מבטל", - "immediate": "ביטול מיידי", - "setType": "הגדר סוג ביטול" - }, - "sendTo": "שליחה אל", - "copyImage": "העתקת תמונה", - "downloadImage": "הורדת תמונה", - "sendToImg2Img": "שליחה לתמונה לתמונה", - "sendToUnifiedCanvas": "שליחה אל קנבס מאוחד", - "openInViewer": "פתח במציג", - "closeViewer": "סגור מציג", - "usePrompt": "שימוש בבקשה", - "useSeed": "שימוש בזרע", - "useAll": "שימוש בהכל", - "useInitImg": "שימוש בתמונה ראשונית", - "info": "פרטים", - "showOptionsPanel": "הצג חלונית אפשרויות", - "shuffle": "ערבוב", - "noiseThreshold": "סף רעש", - "perlinNoise": "רעש פרלין", - "variations": "וריאציות", - "imageFit": "התאמת תמונה ראשונית לגודל הפלט", - "general": "כללי", - "upscaling": "מגדיל את קנה מידה", - "scale": "סולם", - "seamlessTiling": "ריצוף חלק", - "img2imgStrength": "חוזק תמונה לתמונה", - "initialImage": "תמונה ראשונית", - "copyImageToLink": "העתקת תמונה לקישור" - }, - "settings": { - "models": "מודלים", - "displayInProgress": "הצגת תמונות בתהליך", - "confirmOnDelete": "אישור בעת המחיקה", - "useSlidersForAll": "שימוש במחוונים לכל האפשרויות", - "resetWebUI": "איפוס ממשק משתמש", - "resetWebUIDesc1": "איפוס ממשק המשתמש האינטרנטי מאפס רק את המטמון המקומי של הדפדפן של התמונות וההגדרות שנשמרו. זה לא מוחק תמונות מהדיסק.", - "resetComplete": "ממשק המשתמש אופס. יש לבצע רענון דף בכדי לטעון אותו מחדש.", - "enableImageDebugging": "הפעלת איתור באגים בתמונה", - "displayHelpIcons": "הצג סמלי עזרה", - "saveSteps": "שמירת תמונות כל n צעדים", - "resetWebUIDesc2": "אם תמונות לא מופיעות בגלריה או שמשהו אחר לא עובד, נא לנסות איפוס /או אתחול לפני שליחת תקלה ב-GitHub." - }, - "toast": { - "uploadFailed": "העלאה נכשלה", - "imageCopied": "התמונה הועתקה", - "imageLinkCopied": "קישור תמונה הועתק", - "imageNotLoadedDesc": "לא נמצאה תמונה לשליחה למודול תמונה לתמונה", - "imageSavedToGallery": "התמונה נשמרה בגלריה", - "canvasMerged": "קנבס מוזג", - "sentToImageToImage": "נשלח לתמונה לתמונה", - "sentToUnifiedCanvas": "נשלח אל קנבס מאוחד", - "parametersSet": "הגדרת פרמטרים", - "parametersNotSet": "פרמטרים לא הוגדרו", - "parametersNotSetDesc": "לא נמצאו מטא-נתונים עבור תמונה זו.", - "parametersFailedDesc": "לא ניתן לטעון תמונת התחלה.", - "seedSet": "זרע הוגדר", - "seedNotSetDesc": "לא ניתן היה למצוא זרע לתמונה זו.", - "promptNotSetDesc": "לא היתה אפשרות למצוא בקשה עבור תמונה זו.", - "metadataLoadFailed": "טעינת מטא-נתונים נכשלה", - "initialImageSet": "סט תמונה ראשוני", - "initialImageNotSet": "התמונה הראשונית לא הוגדרה", - "initialImageNotSetDesc": "לא ניתן היה לטעון את התמונה הראשונית", - "uploadFailedUnableToLoadDesc": "לא ניתן לטעון את הקובץ", - "tempFoldersEmptied": "התיקייה הזמנית רוקנה", - "downloadImageStarted": "הורדת התמונה החלה", - "imageNotLoaded": "לא נטענה תמונה", - "parametersFailed": "בעיה בטעינת פרמטרים", - "promptNotSet": "בקשה לא הוגדרה", - "upscalingFailed": "העלאת קנה המידה נכשלה", - "faceRestoreFailed": "שחזור הפנים נכשל", - "seedNotSet": "זרע לא הוגדר", - "promptSet": "בקשה הוגדרה" - }, - "tooltip": { - "feature": { - "gallery": "הגלריה מציגה יצירות מתיקיית הפלטים בעת יצירתם. ההגדרות מאוחסנות בתוך קבצים ונגישות באמצעות תפריט הקשר.", - "upscale": "השתמש ב-ESRGAN כדי להגדיל את התמונה מיד לאחר היצירה.", - "imageToImage": "תמונה לתמונה טוענת כל תמונה כראשונית, המשמשת לאחר מכן ליצירת תמונה חדשה יחד עם הבקשה. ככל שהערך גבוה יותר, כך תמונת התוצאה תשתנה יותר. ערכים מ- 0.0 עד 1.0 אפשריים, הטווח המומלץ הוא .25-.75", - "seamCorrection": "שליטה בטיפול בתפרים גלויים המתרחשים בין תמונות שנוצרו על בד הציור.", - "prompt": "זהו שדה הבקשה. הבקשה כוללת אובייקטי יצירה ומונחים סגנוניים. באפשרותך להוסיף משקל (חשיבות אסימון) גם בשורת הפקודה, אך פקודות ופרמטרים של CLI לא יפעלו.", - "variations": "נסה וריאציה עם ערך בין 0.1 ל- 1.0 כדי לשנות את התוצאה עבור זרע נתון. וריאציות מעניינות של הזרע הן בין 0.1 ל -0.3.", - "other": "אפשרויות אלה יאפשרו מצבי עיבוד חלופיים עבור ההרצה. 'ריצוף חלק' ייצור תבניות חוזרות בפלט. 'רזולוציה גבוהה' נוצר בשני שלבים עם img2img: השתמש בהגדרה זו כאשר אתה רוצה תמונה גדולה וקוהרנטית יותר ללא חפצים. פעולה זאת תקח יותר זמן מפעולת טקסט לתמונה רגילה.", - "faceCorrection": "תיקון פנים עם GFPGAN או Codeformer: האלגוריתם מזהה פרצופים בתמונה ומתקן כל פגם. ערך גבוה ישנה את התמונה יותר, וכתוצאה מכך הפרצופים יהיו אטרקטיביים יותר. Codeformer עם נאמנות גבוהה יותר משמר את התמונה המקורית על חשבון תיקון פנים חזק יותר.", - "seed": "ערך הזרע משפיע על הרעש הראשוני שממנו נוצרת התמונה. אתה יכול להשתמש בזרעים שכבר קיימים מתמונות קודמות. 'סף רעש' משמש להפחתת חפצים בערכי CFG גבוהים (נסה את טווח 0-10), ופרלין כדי להוסיף רעשי פרלין במהלך היצירה: שניהם משמשים להוספת וריאציה לתפוקות שלך.", - "infillAndScaling": "נהל שיטות מילוי (המשמשות באזורים עם מסיכה או אזורים שנמחקו בבד הציור) ושינוי קנה מידה (שימושי לגדלים קטנים של תיבות תוחמות).", - "boundingBox": "התיבה התוחמת זהה להגדרות 'רוחב' ו'גובה' עבור 'טקסט לתמונה' או 'תמונה לתמונה'. רק האזור בתיבה יעובד." - } - }, - "unifiedCanvas": { - "layer": "שכבה", - "base": "בסיס", - "maskingOptions": "אפשרויות מסכות", - "enableMask": "הפעלת מסיכה", - "colorPicker": "בוחר הצבעים", - "preserveMaskedArea": "שימור איזור ממוסך", - "clearMask": "ניקוי מסיכה", - "brush": "מברשת", - "eraser": "מחק", - "fillBoundingBox": "מילוי תיבה תוחמת", - "eraseBoundingBox": "מחק תיבה תוחמת", - "copyToClipboard": "העתק ללוח ההדבקה", - "downloadAsImage": "הורדה כתמונה", - "undo": "ביטול", - "redo": "ביצוע מחדש", - "clearCanvas": "ניקוי קנבס", - "showGrid": "הצגת רשת", - "snapToGrid": "הצמדה לרשת", - "darkenOutsideSelection": "הכהיית בחירה חיצונית", - "saveBoxRegionOnly": "שמירת איזור תיבה בלבד", - "limitStrokesToBox": "הגבלת משיכות לקופסא", - "showCanvasDebugInfo": "הצגת מידע איתור באגים בקנבס", - "clearCanvasHistory": "ניקוי הסטוריית קנבס", - "clearHistory": "ניקוי היסטוריה", - "clearCanvasHistoryConfirm": "האם את/ה בטוח/ה שברצונך לנקות את היסטוריית הקנבס?", - "emptyFolder": "ריקון תיקייה", - "emptyTempImagesFolderConfirm": "האם את/ה בטוח/ה שברצונך לרוקן את התיקיה הזמנית?", - "activeLayer": "שכבה פעילה", - "canvasScale": "קנה מידה של קנבס", - "betaLimitToBox": "הגבל לקופסא", - "betaDarkenOutside": "הכההת הבחוץ", - "canvasDimensions": "מידות קנבס", - "previous": "הקודם", - "next": "הבא", - "accept": "אישור", - "showHide": "הצג/הסתר", - "discardAll": "בטל הכל", - "betaClear": "איפוס", - "boundingBox": "תיבה תוחמת", - "scaledBoundingBox": "תיבה תוחמת לאחר שינוי קנה מידה", - "betaPreserveMasked": "שמר מסיכה", - "brushOptions": "אפשרויות מברשת", - "brushSize": "גודל", - "mergeVisible": "מיזוג תוכן גלוי", - "move": "הזזה", - "resetView": "איפוס תצוגה", - "saveToGallery": "שמור לגלריה", - "canvasSettings": "הגדרות קנבס", - "showIntermediates": "הצגת מתווכים", - "autoSaveToGallery": "שמירה אוטומטית בגלריה", - "emptyTempImageFolder": "ריקון תיקיית תמונות זמניות", - "clearCanvasHistoryMessage": "ניקוי היסטוריית הקנבס משאיר את הקנבס הנוכחי ללא שינוי, אך מנקה באופן בלתי הפיך את היסטוריית הביטול והביצוע מחדש.", - "emptyTempImagesFolderMessage": "ריקון תיקיית התמונה הזמנית גם מאפס באופן מלא את הקנבס המאוחד. זה כולל את כל היסטוריית הביטול/ביצוע מחדש, תמונות באזור ההערכות ושכבת הבסיס של בד הציור.", - "boundingBoxPosition": "מיקום תיבה תוחמת", - "canvasPosition": "מיקום קנבס", - "cursorPosition": "מיקום הסמן", - "mask": "מסכה" - } -} diff --git a/invokeai/frontend/web/dist/locales/it.json b/invokeai/frontend/web/dist/locales/it.json deleted file mode 100644 index 8c4b548f07..0000000000 --- a/invokeai/frontend/web/dist/locales/it.json +++ /dev/null @@ -1,1645 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Tasti di scelta rapida", - "languagePickerLabel": "Lingua", - "reportBugLabel": "Segnala un errore", - "settingsLabel": "Impostazioni", - "img2img": "Immagine a Immagine", - "unifiedCanvas": "Tela unificata", - "nodes": "Editor del flusso di lavoro", - "langItalian": "Italiano", - "nodesDesc": "Attualmente è in fase di sviluppo un sistema basato su nodi per la generazione di immagini. Resta sintonizzato per gli aggiornamenti su questa fantastica funzionalità.", - "postProcessing": "Post-elaborazione", - "postProcessDesc1": "Invoke AI offre un'ampia varietà di funzionalità di post-elaborazione. Ampliamento Immagine e Restaura Volti sono già disponibili nell'interfaccia Web. È possibile accedervi dal menu 'Opzioni avanzate' delle schede 'Testo a Immagine' e 'Immagine a Immagine'. È inoltre possibile elaborare le immagini direttamente, utilizzando i pulsanti di azione dell'immagine sopra la visualizzazione dell'immagine corrente o nel visualizzatore.", - "postProcessDesc2": "Presto verrà rilasciata un'interfaccia utente dedicata per facilitare flussi di lavoro di post-elaborazione più avanzati.", - "postProcessDesc3": "L'interfaccia da riga di comando di 'Invoke AI' offre varie altre funzionalità tra cui Embiggen.", - "training": "Addestramento", - "trainingDesc1": "Un flusso di lavoro dedicato per addestrare i tuoi Incorporamenti e Checkpoint utilizzando Inversione Testuale e Dreambooth dall'interfaccia web.", - "trainingDesc2": "InvokeAI supporta già l'addestramento di incorporamenti personalizzati utilizzando l'inversione testuale tramite lo script principale.", - "upload": "Caricamento", - "close": "Chiudi", - "load": "Carica", - "back": "Indietro", - "statusConnected": "Collegato", - "statusDisconnected": "Disconnesso", - "statusError": "Errore", - "statusPreparing": "Preparazione", - "statusProcessingCanceled": "Elaborazione annullata", - "statusProcessingComplete": "Elaborazione completata", - "statusGenerating": "Generazione in corso", - "statusGeneratingTextToImage": "Generazione Testo a Immagine", - "statusGeneratingImageToImage": "Generazione da Immagine a Immagine", - "statusGeneratingInpainting": "Generazione Inpainting", - "statusGeneratingOutpainting": "Generazione Outpainting", - "statusGenerationComplete": "Generazione completata", - "statusIterationComplete": "Iterazione completata", - "statusSavingImage": "Salvataggio dell'immagine", - "statusRestoringFaces": "Restaura volti", - "statusRestoringFacesGFPGAN": "Restaura volti (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restaura volti (CodeFormer)", - "statusUpscaling": "Ampliamento", - "statusUpscalingESRGAN": "Ampliamento (ESRGAN)", - "statusLoadingModel": "Caricamento del modello", - "statusModelChanged": "Modello cambiato", - "githubLabel": "GitHub", - "discordLabel": "Discord", - "langArabic": "Arabo", - "langEnglish": "Inglese", - "langFrench": "Francese", - "langGerman": "Tedesco", - "langJapanese": "Giapponese", - "langPolish": "Polacco", - "langBrPortuguese": "Portoghese Basiliano", - "langRussian": "Russo", - "langUkranian": "Ucraino", - "langSpanish": "Spagnolo", - "statusMergingModels": "Fusione Modelli", - "statusMergedModels": "Modelli fusi", - "langSimplifiedChinese": "Cinese semplificato", - "langDutch": "Olandese", - "statusModelConverted": "Modello Convertito", - "statusConvertingModel": "Conversione Modello", - "langKorean": "Coreano", - "langPortuguese": "Portoghese", - "loading": "Caricamento in corso", - "langHebrew": "Ebraico", - "loadingInvokeAI": "Caricamento Invoke AI", - "postprocessing": "Post Elaborazione", - "txt2img": "Testo a Immagine", - "accept": "Accetta", - "cancel": "Annulla", - "linear": "Lineare", - "generate": "Genera", - "random": "Casuale", - "openInNewTab": "Apri in una nuova scheda", - "areYouSure": "Sei sicuro?", - "dontAskMeAgain": "Non chiedermelo più", - "imagePrompt": "Prompt Immagine", - "darkMode": "Modalità scura", - "lightMode": "Modalità chiara", - "batch": "Gestione Lotto", - "modelManager": "Gestore modello", - "communityLabel": "Comunità", - "nodeEditor": "Editor dei nodi", - "statusProcessing": "Elaborazione in corso", - "advanced": "Avanzate", - "imageFailedToLoad": "Impossibile caricare l'immagine", - "learnMore": "Per saperne di più", - "ipAdapter": "Adattatore IP", - "t2iAdapter": "Adattatore T2I", - "controlAdapter": "Adattatore di Controllo", - "controlNet": "ControlNet", - "auto": "Automatico", - "simple": "Semplice", - "details": "Dettagli", - "format": "formato", - "unknown": "Sconosciuto", - "folder": "Cartella", - "error": "Errore", - "installed": "Installato", - "template": "Schema", - "outputs": "Uscite", - "data": "Dati", - "somethingWentWrong": "Qualcosa è andato storto", - "copyError": "$t(gallery.copy) Errore", - "input": "Ingresso", - "notInstalled": "Non $t(common.installed)", - "unknownError": "Errore sconosciuto", - "updated": "Aggiornato", - "save": "Salva", - "created": "Creato", - "prevPage": "Pagina precedente", - "delete": "Elimina", - "orderBy": "Ordinato per", - "nextPage": "Pagina successiva", - "saveAs": "Salva come", - "unsaved": "Non salvato", - "direction": "Direzione" - }, - "gallery": { - "generations": "Generazioni", - "showGenerations": "Mostra Generazioni", - "uploads": "Caricamenti", - "showUploads": "Mostra caricamenti", - "galleryImageSize": "Dimensione dell'immagine", - "galleryImageResetSize": "Ripristina dimensioni", - "gallerySettings": "Impostazioni della galleria", - "maintainAspectRatio": "Mantenere le proporzioni", - "autoSwitchNewImages": "Passaggio automatico a nuove immagini", - "singleColumnLayout": "Layout a colonna singola", - "allImagesLoaded": "Tutte le immagini caricate", - "loadMore": "Carica altro", - "noImagesInGallery": "Nessuna immagine da visualizzare", - "deleteImage": "Elimina l'immagine", - "deleteImagePermanent": "Le immagini eliminate non possono essere ripristinate.", - "deleteImageBin": "Le immagini eliminate verranno spostate nel Cestino del tuo sistema operativo.", - "assets": "Risorse", - "autoAssignBoardOnClick": "Assegna automaticamente la bacheca al clic", - "featuresWillReset": "Se elimini questa immagine, quelle funzionalità verranno immediatamente ripristinate.", - "loading": "Caricamento in corso", - "unableToLoad": "Impossibile caricare la Galleria", - "currentlyInUse": "Questa immagine è attualmente utilizzata nelle seguenti funzionalità:", - "copy": "Copia", - "download": "Scarica", - "setCurrentImage": "Imposta come immagine corrente", - "preparingDownload": "Preparazione del download", - "preparingDownloadFailed": "Problema durante la preparazione del download", - "downloadSelection": "Scarica gli elementi selezionati", - "noImageSelected": "Nessuna immagine selezionata", - "deleteSelection": "Elimina la selezione", - "image": "immagine", - "drop": "Rilascia", - "unstarImage": "Rimuovi preferenza immagine", - "dropOrUpload": "$t(gallery.drop) o carica", - "starImage": "Immagine preferita", - "dropToUpload": "$t(gallery.drop) per aggiornare", - "problemDeletingImagesDesc": "Impossibile eliminare una o più immagini", - "problemDeletingImages": "Problema durante l'eliminazione delle immagini" - }, - "hotkeys": { - "keyboardShortcuts": "Tasti rapidi", - "appHotkeys": "Tasti di scelta rapida dell'applicazione", - "generalHotkeys": "Tasti di scelta rapida generali", - "galleryHotkeys": "Tasti di scelta rapida della galleria", - "unifiedCanvasHotkeys": "Tasti di scelta rapida Tela Unificata", - "invoke": { - "title": "Invoke", - "desc": "Genera un'immagine" - }, - "cancel": { - "title": "Annulla", - "desc": "Annulla la generazione dell'immagine" - }, - "focusPrompt": { - "title": "Metti a fuoco il Prompt", - "desc": "Mette a fuoco l'area di immissione del prompt" - }, - "toggleOptions": { - "title": "Attiva/disattiva le opzioni", - "desc": "Apre e chiude il pannello delle opzioni" - }, - "pinOptions": { - "title": "Appunta le opzioni", - "desc": "Blocca il pannello delle opzioni" - }, - "toggleViewer": { - "title": "Attiva/disattiva visualizzatore", - "desc": "Apre e chiude il visualizzatore immagini" - }, - "toggleGallery": { - "title": "Attiva/disattiva Galleria", - "desc": "Apre e chiude il pannello della galleria" - }, - "maximizeWorkSpace": { - "title": "Massimizza lo spazio di lavoro", - "desc": "Chiude i pannelli e massimizza l'area di lavoro" - }, - "changeTabs": { - "title": "Cambia scheda", - "desc": "Passa a un'altra area di lavoro" - }, - "consoleToggle": { - "title": "Attiva/disattiva console", - "desc": "Apre e chiude la console" - }, - "setPrompt": { - "title": "Imposta Prompt", - "desc": "Usa il prompt dell'immagine corrente" - }, - "setSeed": { - "title": "Imposta seme", - "desc": "Usa il seme dell'immagine corrente" - }, - "setParameters": { - "title": "Imposta parametri", - "desc": "Utilizza tutti i parametri dell'immagine corrente" - }, - "restoreFaces": { - "title": "Restaura volti", - "desc": "Restaura l'immagine corrente" - }, - "upscale": { - "title": "Amplia", - "desc": "Amplia l'immagine corrente" - }, - "showInfo": { - "title": "Mostra informazioni", - "desc": "Mostra le informazioni sui metadati dell'immagine corrente" - }, - "sendToImageToImage": { - "title": "Invia a Immagine a Immagine", - "desc": "Invia l'immagine corrente a da Immagine a Immagine" - }, - "deleteImage": { - "title": "Elimina immagine", - "desc": "Elimina l'immagine corrente" - }, - "closePanels": { - "title": "Chiudi pannelli", - "desc": "Chiude i pannelli aperti" - }, - "previousImage": { - "title": "Immagine precedente", - "desc": "Visualizza l'immagine precedente nella galleria" - }, - "nextImage": { - "title": "Immagine successiva", - "desc": "Visualizza l'immagine successiva nella galleria" - }, - "toggleGalleryPin": { - "title": "Attiva/disattiva il blocco della galleria", - "desc": "Blocca/sblocca la galleria dall'interfaccia utente" - }, - "increaseGalleryThumbSize": { - "title": "Aumenta dimensione immagini nella galleria", - "desc": "Aumenta la dimensione delle miniature della galleria" - }, - "decreaseGalleryThumbSize": { - "title": "Riduci dimensione immagini nella galleria", - "desc": "Riduce le dimensioni delle miniature della galleria" - }, - "selectBrush": { - "title": "Seleziona Pennello", - "desc": "Seleziona il pennello della tela" - }, - "selectEraser": { - "title": "Seleziona Cancellino", - "desc": "Seleziona il cancellino della tela" - }, - "decreaseBrushSize": { - "title": "Riduci la dimensione del pennello", - "desc": "Riduce la dimensione del pennello/cancellino della tela" - }, - "increaseBrushSize": { - "title": "Aumenta la dimensione del pennello", - "desc": "Aumenta la dimensione del pennello/cancellino della tela" - }, - "decreaseBrushOpacity": { - "title": "Riduci l'opacità del pennello", - "desc": "Diminuisce l'opacità del pennello della tela" - }, - "increaseBrushOpacity": { - "title": "Aumenta l'opacità del pennello", - "desc": "Aumenta l'opacità del pennello della tela" - }, - "moveTool": { - "title": "Strumento Sposta", - "desc": "Consente la navigazione nella tela" - }, - "fillBoundingBox": { - "title": "Riempi riquadro di selezione", - "desc": "Riempie il riquadro di selezione con il colore del pennello" - }, - "eraseBoundingBox": { - "title": "Cancella riquadro di selezione", - "desc": "Cancella l'area del riquadro di selezione" - }, - "colorPicker": { - "title": "Seleziona Selettore colore", - "desc": "Seleziona il selettore colore della tela" - }, - "toggleSnap": { - "title": "Attiva/disattiva Aggancia", - "desc": "Attiva/disattiva Aggancia alla griglia" - }, - "quickToggleMove": { - "title": "Attiva/disattiva Sposta rapido", - "desc": "Attiva/disattiva temporaneamente la modalità Sposta" - }, - "toggleLayer": { - "title": "Attiva/disattiva livello", - "desc": "Attiva/disattiva la selezione del livello base/maschera" - }, - "clearMask": { - "title": "Cancella maschera", - "desc": "Cancella l'intera maschera" - }, - "hideMask": { - "title": "Nascondi maschera", - "desc": "Nasconde e mostra la maschera" - }, - "showHideBoundingBox": { - "title": "Mostra/Nascondi riquadro di selezione", - "desc": "Attiva/disattiva la visibilità del riquadro di selezione" - }, - "mergeVisible": { - "title": "Fondi il visibile", - "desc": "Fonde tutti gli strati visibili della tela" - }, - "saveToGallery": { - "title": "Salva nella galleria", - "desc": "Salva la tela corrente nella galleria" - }, - "copyToClipboard": { - "title": "Copia negli appunti", - "desc": "Copia la tela corrente negli appunti" - }, - "downloadImage": { - "title": "Scarica l'immagine", - "desc": "Scarica la tela corrente" - }, - "undoStroke": { - "title": "Annulla tratto", - "desc": "Annulla una pennellata" - }, - "redoStroke": { - "title": "Ripeti tratto", - "desc": "Ripeti una pennellata" - }, - "resetView": { - "title": "Reimposta vista", - "desc": "Ripristina la visualizzazione della tela" - }, - "previousStagingImage": { - "title": "Immagine della sessione precedente", - "desc": "Immagine dell'area della sessione precedente" - }, - "nextStagingImage": { - "title": "Immagine della sessione successivo", - "desc": "Immagine dell'area della sessione successiva" - }, - "acceptStagingImage": { - "title": "Accetta l'immagine della sessione", - "desc": "Accetta l'immagine dell'area della sessione corrente" - }, - "nodesHotkeys": "Tasti di scelta rapida dei Nodi", - "addNodes": { - "title": "Aggiungi Nodi", - "desc": "Apre il menu Aggiungi Nodi" - } - }, - "modelManager": { - "modelManager": "Gestione Modelli", - "model": "Modello", - "allModels": "Tutti i Modelli", - "checkpointModels": "Checkpoint", - "diffusersModels": "Diffusori", - "safetensorModels": "SafeTensor", - "modelAdded": "Modello Aggiunto", - "modelUpdated": "Modello Aggiornato", - "modelEntryDeleted": "Voce del modello eliminata", - "cannotUseSpaces": "Impossibile utilizzare gli spazi", - "addNew": "Aggiungi nuovo", - "addNewModel": "Aggiungi nuovo Modello", - "addCheckpointModel": "Aggiungi modello Checkpoint / Safetensor", - "addDiffuserModel": "Aggiungi Diffusori", - "addManually": "Aggiungi manualmente", - "manual": "Manuale", - "name": "Nome", - "nameValidationMsg": "Inserisci un nome per il modello", - "description": "Descrizione", - "descriptionValidationMsg": "Aggiungi una descrizione per il modello", - "config": "Configurazione", - "configValidationMsg": "Percorso del file di configurazione del modello.", - "modelLocation": "Posizione del modello", - "modelLocationValidationMsg": "Fornisci il percorso di una cartella locale in cui è archiviato il tuo modello di diffusori", - "repo_id": "Repo ID", - "repoIDValidationMsg": "Repository online del modello", - "vaeLocation": "Posizione file VAE", - "vaeLocationValidationMsg": "Percorso dove si trova il file VAE.", - "vaeRepoID": "VAE Repo ID", - "vaeRepoIDValidationMsg": "Repository online del file VAE", - "width": "Larghezza", - "widthValidationMsg": "Larghezza predefinita del modello.", - "height": "Altezza", - "heightValidationMsg": "Altezza predefinita del modello.", - "addModel": "Aggiungi modello", - "updateModel": "Aggiorna modello", - "availableModels": "Modelli disponibili", - "search": "Ricerca", - "load": "Carica", - "active": "attivo", - "notLoaded": "non caricato", - "cached": "memorizzato nella cache", - "checkpointFolder": "Cartella Checkpoint", - "clearCheckpointFolder": "Svuota cartella checkpoint", - "findModels": "Trova modelli", - "scanAgain": "Scansiona nuovamente", - "modelsFound": "Modelli trovati", - "selectFolder": "Seleziona cartella", - "selected": "Selezionato", - "selectAll": "Seleziona tutto", - "deselectAll": "Deseleziona tutto", - "showExisting": "Mostra esistenti", - "addSelected": "Aggiungi selezionato", - "modelExists": "Il modello esiste", - "selectAndAdd": "Seleziona e aggiungi i modelli elencati", - "noModelsFound": "Nessun modello trovato", - "delete": "Elimina", - "deleteModel": "Elimina modello", - "deleteConfig": "Elimina configurazione", - "deleteMsg1": "Sei sicuro di voler eliminare questo modello da InvokeAI?", - "deleteMsg2": "Questo eliminerà il modello dal disco se si trova nella cartella principale di InvokeAI. Se invece utilizzi una cartella personalizzata, il modello NON verrà eliminato dal disco.", - "formMessageDiffusersModelLocation": "Ubicazione modelli diffusori", - "formMessageDiffusersModelLocationDesc": "Inseriscine almeno uno.", - "formMessageDiffusersVAELocation": "Ubicazione file VAE", - "formMessageDiffusersVAELocationDesc": "Se non fornito, InvokeAI cercherà il file VAE all'interno dell'ubicazione del modello sopra indicata.", - "convert": "Converti", - "convertToDiffusers": "Converti in Diffusori", - "convertToDiffusersHelpText2": "Questo processo sostituirà la voce in Gestione Modelli con la versione Diffusori dello stesso modello.", - "convertToDiffusersHelpText4": "Questo è un processo una tantum. Potrebbero essere necessari circa 30-60 secondi a seconda delle specifiche del tuo computer.", - "convertToDiffusersHelpText5": "Assicurati di avere spazio su disco sufficiente. I modelli generalmente variano tra 2 GB e 7 GB di dimensioni.", - "convertToDiffusersHelpText6": "Vuoi convertire questo modello?", - "convertToDiffusersSaveLocation": "Ubicazione salvataggio", - "inpainting": "v1 Inpainting", - "customConfig": "Configurazione personalizzata", - "statusConverting": "Conversione in corso", - "modelConverted": "Modello convertito", - "sameFolder": "Stessa cartella", - "invokeRoot": "Cartella InvokeAI", - "merge": "Unisci", - "modelsMerged": "Modelli uniti", - "mergeModels": "Unisci Modelli", - "modelOne": "Modello 1", - "modelTwo": "Modello 2", - "mergedModelName": "Nome del modello unito", - "alpha": "Alpha", - "interpolationType": "Tipo di interpolazione", - "mergedModelCustomSaveLocation": "Percorso personalizzato", - "invokeAIFolder": "Cartella Invoke AI", - "ignoreMismatch": "Ignora le discrepanze tra i modelli selezionati", - "modelMergeHeaderHelp2": "Solo i diffusori sono disponibili per l'unione. Se desideri unire un modello Checkpoint, convertilo prima in Diffusori.", - "modelMergeInterpAddDifferenceHelp": "In questa modalità, il Modello 3 viene prima sottratto dal Modello 2. La versione risultante viene unita al Modello 1 con il tasso Alpha impostato sopra.", - "mergedModelSaveLocation": "Ubicazione salvataggio", - "convertToDiffusersHelpText1": "Questo modello verrà convertito nel formato 🧨 Diffusore.", - "custom": "Personalizzata", - "convertToDiffusersHelpText3": "Il file Checkpoint su disco verrà eliminato se si trova nella cartella principale di InvokeAI. Se si trova invece in una posizione personalizzata, NON verrà eliminato.", - "v1": "v1", - "pathToCustomConfig": "Percorso alla configurazione personalizzata", - "modelThree": "Modello 3", - "modelMergeHeaderHelp1": "Puoi unire fino a tre diversi modelli per creare una miscela adatta alle tue esigenze.", - "modelMergeAlphaHelp": "Il valore Alpha controlla la forza di miscelazione dei modelli. Valori Alpha più bassi attenuano l'influenza del secondo modello.", - "customSaveLocation": "Ubicazione salvataggio personalizzata", - "weightedSum": "Somma pesata", - "sigmoid": "Sigmoide", - "inverseSigmoid": "Sigmoide inverso", - "v2_base": "v2 (512px)", - "v2_768": "v2 (768px)", - "none": "nessuno", - "addDifference": "Aggiungi differenza", - "pickModelType": "Scegli il tipo di modello", - "scanForModels": "Cerca modelli", - "variant": "Variante", - "baseModel": "Modello Base", - "vae": "VAE", - "modelUpdateFailed": "Aggiornamento del modello non riuscito", - "modelConversionFailed": "Conversione del modello non riuscita", - "modelsMergeFailed": "Unione modelli non riuscita", - "selectModel": "Seleziona Modello", - "modelDeleted": "Modello eliminato", - "modelDeleteFailed": "Impossibile eliminare il modello", - "noCustomLocationProvided": "Nessuna posizione personalizzata fornita", - "convertingModelBegin": "Conversione del modello. Attendere prego.", - "importModels": "Importa Modelli", - "modelsSynced": "Modelli sincronizzati", - "modelSyncFailed": "Sincronizzazione modello non riuscita", - "settings": "Impostazioni", - "syncModels": "Sincronizza Modelli", - "syncModelsDesc": "Se i tuoi modelli non sono sincronizzati con il back-end, puoi aggiornarli utilizzando questa opzione. Questo è generalmente utile nei casi in cui aggiorni manualmente il tuo file models.yaml o aggiungi modelli alla cartella principale di InvokeAI dopo l'avvio dell'applicazione.", - "loraModels": "LoRA", - "oliveModels": "Olive", - "onnxModels": "ONNX", - "noModels": "Nessun modello trovato", - "predictionType": "Tipo di previsione (per modelli Stable Diffusion 2.x ed alcuni modelli Stable Diffusion 1.x)", - "quickAdd": "Aggiunta rapida", - "simpleModelDesc": "Fornire un percorso a un modello diffusori locale, un modello checkpoint/safetensor locale, un ID repository HuggingFace o un URL del modello checkpoint/diffusori.", - "advanced": "Avanzate", - "useCustomConfig": "Utilizza configurazione personalizzata", - "closeAdvanced": "Chiudi Avanzate", - "modelType": "Tipo di modello", - "customConfigFileLocation": "Posizione del file di configurazione personalizzato", - "vaePrecision": "Precisione VAE", - "noModelSelected": "Nessun modello selezionato", - "conversionNotSupported": "Conversione non supportata" - }, - "parameters": { - "images": "Immagini", - "steps": "Passi", - "cfgScale": "Scala CFG", - "width": "Larghezza", - "height": "Altezza", - "seed": "Seme", - "randomizeSeed": "Seme randomizzato", - "shuffle": "Mescola il seme", - "noiseThreshold": "Soglia del rumore", - "perlinNoise": "Rumore Perlin", - "variations": "Variazioni", - "variationAmount": "Quantità di variazione", - "seedWeights": "Pesi dei semi", - "faceRestoration": "Restauro volti", - "restoreFaces": "Restaura volti", - "type": "Tipo", - "strength": "Forza", - "upscaling": "Ampliamento", - "upscale": "Amplia (Shift + U)", - "upscaleImage": "Amplia Immagine", - "scale": "Scala", - "otherOptions": "Altre opzioni", - "seamlessTiling": "Piastrella senza cuciture", - "hiresOptim": "Ottimizzazione alta risoluzione", - "imageFit": "Adatta l'immagine iniziale alle dimensioni di output", - "codeformerFidelity": "Fedeltà", - "scaleBeforeProcessing": "Scala prima dell'elaborazione", - "scaledWidth": "Larghezza ridimensionata", - "scaledHeight": "Altezza ridimensionata", - "infillMethod": "Metodo di riempimento", - "tileSize": "Dimensione piastrella", - "boundingBoxHeader": "Rettangolo di selezione", - "seamCorrectionHeader": "Correzione della cucitura", - "infillScalingHeader": "Riempimento e ridimensionamento", - "img2imgStrength": "Forza da Immagine a Immagine", - "toggleLoopback": "Attiva/disattiva elaborazione ricorsiva", - "sendTo": "Invia a", - "sendToImg2Img": "Invia a Immagine a Immagine", - "sendToUnifiedCanvas": "Invia a Tela Unificata", - "copyImageToLink": "Copia l'immagine nel collegamento", - "downloadImage": "Scarica l'immagine", - "openInViewer": "Apri nel visualizzatore", - "closeViewer": "Chiudi visualizzatore", - "usePrompt": "Usa Prompt", - "useSeed": "Usa Seme", - "useAll": "Usa Tutto", - "useInitImg": "Usa l'immagine iniziale", - "info": "Informazioni", - "initialImage": "Immagine iniziale", - "showOptionsPanel": "Mostra il pannello laterale (O o T)", - "general": "Generale", - "denoisingStrength": "Forza di riduzione del rumore", - "copyImage": "Copia immagine", - "hiresStrength": "Forza Alta Risoluzione", - "imageToImage": "Immagine a Immagine", - "cancel": { - "schedule": "Annulla dopo l'iterazione corrente", - "isScheduled": "Annullamento", - "setType": "Imposta il tipo di annullamento", - "immediate": "Annulla immediatamente", - "cancel": "Annulla" - }, - "hSymmetryStep": "Passi Simmetria Orizzontale", - "vSymmetryStep": "Passi Simmetria Verticale", - "symmetry": "Simmetria", - "hidePreview": "Nascondi l'anteprima", - "showPreview": "Mostra l'anteprima", - "noiseSettings": "Rumore", - "seamlessXAxis": "Asse X", - "seamlessYAxis": "Asse Y", - "scheduler": "Campionatore", - "boundingBoxWidth": "Larghezza riquadro di delimitazione", - "boundingBoxHeight": "Altezza riquadro di delimitazione", - "positivePromptPlaceholder": "Prompt Positivo", - "negativePromptPlaceholder": "Prompt Negativo", - "controlNetControlMode": "Modalità di controllo", - "clipSkip": "CLIP Skip", - "aspectRatio": "Proporzioni", - "maskAdjustmentsHeader": "Regolazioni della maschera", - "maskBlur": "Sfocatura", - "maskBlurMethod": "Metodo di sfocatura", - "seamLowThreshold": "Basso", - "seamHighThreshold": "Alto", - "coherencePassHeader": "Passaggio di coerenza", - "coherenceSteps": "Passi", - "coherenceStrength": "Forza", - "compositingSettingsHeader": "Impostazioni di composizione", - "patchmatchDownScaleSize": "Ridimensiona", - "coherenceMode": "Modalità", - "invoke": { - "noNodesInGraph": "Nessun nodo nel grafico", - "noModelSelected": "Nessun modello selezionato", - "noPrompts": "Nessun prompt generato", - "noInitialImageSelected": "Nessuna immagine iniziale selezionata", - "readyToInvoke": "Pronto per invocare", - "addingImagesTo": "Aggiungi immagini a", - "systemBusy": "Sistema occupato", - "unableToInvoke": "Impossibile invocare", - "systemDisconnected": "Sistema disconnesso", - "noControlImageForControlAdapter": "L'adattatore di controllo #{{number}} non ha un'immagine di controllo", - "noModelForControlAdapter": "Nessun modello selezionato per l'adattatore di controllo #{{number}}.", - "incompatibleBaseModelForControlAdapter": "Il modello dell'adattatore di controllo #{{number}} non è compatibile con il modello principale.", - "missingNodeTemplate": "Modello di nodo mancante", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} ingresso mancante", - "missingFieldTemplate": "Modello di campo mancante" - }, - "enableNoiseSettings": "Abilita le impostazioni del rumore", - "cpuNoise": "Rumore CPU", - "gpuNoise": "Rumore GPU", - "useCpuNoise": "Usa la CPU per generare rumore", - "manualSeed": "Seme manuale", - "randomSeed": "Seme casuale", - "iterations": "Iterazioni", - "iterationsWithCount_one": "{{count}} Iterazione", - "iterationsWithCount_many": "{{count}} Iterazioni", - "iterationsWithCount_other": "{{count}} Iterazioni", - "seamlessX&Y": "Senza cuciture X & Y", - "isAllowedToUpscale": { - "useX2Model": "L'immagine è troppo grande per l'ampliamento con il modello x4, utilizza il modello x2", - "tooLarge": "L'immagine è troppo grande per l'ampliamento, seleziona un'immagine più piccola" - }, - "seamlessX": "Senza cuciture X", - "seamlessY": "Senza cuciture Y", - "imageActions": "Azioni Immagine", - "aspectRatioFree": "Libere", - "maskEdge": "Maschera i bordi", - "unmasked": "No maschera", - "cfgRescaleMultiplier": "Moltiplicatore riscala CFG", - "cfgRescale": "Riscala CFG", - "useSize": "Usa Dimensioni" - }, - "settings": { - "models": "Modelli", - "displayInProgress": "Visualizza le immagini di avanzamento", - "saveSteps": "Salva le immagini ogni n passaggi", - "confirmOnDelete": "Conferma l'eliminazione", - "displayHelpIcons": "Visualizza le icone della Guida", - "enableImageDebugging": "Abilita il debug dell'immagine", - "resetWebUI": "Reimposta l'interfaccia utente Web", - "resetWebUIDesc1": "Il ripristino dell'interfaccia utente Web reimposta solo la cache locale del browser delle immagini e le impostazioni memorizzate. Non cancella alcuna immagine dal disco.", - "resetWebUIDesc2": "Se le immagini non vengono visualizzate nella galleria o qualcos'altro non funziona, prova a reimpostare prima di segnalare un problema su GitHub.", - "resetComplete": "L'interfaccia utente Web è stata reimpostata.", - "useSlidersForAll": "Usa i cursori per tutte le opzioni", - "general": "Generale", - "consoleLogLevel": "Livello del registro", - "shouldLogToConsole": "Registrazione della console", - "developer": "Sviluppatore", - "antialiasProgressImages": "Anti aliasing delle immagini di avanzamento", - "showProgressInViewer": "Mostra le immagini di avanzamento nel visualizzatore", - "generation": "Generazione", - "ui": "Interfaccia Utente", - "favoriteSchedulersPlaceholder": "Nessun campionatore preferito", - "favoriteSchedulers": "Campionatori preferiti", - "showAdvancedOptions": "Mostra Opzioni Avanzate", - "alternateCanvasLayout": "Layout alternativo della tela", - "beta": "Beta", - "enableNodesEditor": "Abilita l'editor dei nodi", - "experimental": "Sperimentale", - "autoChangeDimensions": "Aggiorna L/A alle impostazioni predefinite del modello in caso di modifica", - "clearIntermediates": "Cancella le immagini intermedie", - "clearIntermediatesDesc3": "Le immagini della galleria non verranno eliminate.", - "clearIntermediatesDesc2": "Le immagini intermedie sono sottoprodotti della generazione, diversi dalle immagini risultanti nella galleria. La cancellazione degli intermedi libererà spazio su disco.", - "intermediatesCleared_one": "Cancellata {{count}} immagine intermedia", - "intermediatesCleared_many": "Cancellate {{count}} immagini intermedie", - "intermediatesCleared_other": "Cancellate {{count}} immagini intermedie", - "clearIntermediatesDesc1": "La cancellazione delle immagini intermedie ripristinerà lo stato di Tela Unificata e ControlNet.", - "intermediatesClearedFailed": "Problema con la cancellazione delle immagini intermedie", - "clearIntermediatesWithCount_one": "Cancella {{count}} immagine intermedia", - "clearIntermediatesWithCount_many": "Cancella {{count}} immagini intermedie", - "clearIntermediatesWithCount_other": "Cancella {{count}} immagini intermedie", - "clearIntermediatesDisabled": "La coda deve essere vuota per cancellare le immagini intermedie", - "enableNSFWChecker": "Abilita controllo NSFW", - "enableInvisibleWatermark": "Abilita filigrana invisibile", - "enableInformationalPopovers": "Abilita testo informativo a comparsa", - "reloadingIn": "Ricaricando in" - }, - "toast": { - "tempFoldersEmptied": "Cartella temporanea svuotata", - "uploadFailed": "Caricamento fallito", - "uploadFailedUnableToLoadDesc": "Impossibile caricare il file", - "downloadImageStarted": "Download dell'immagine avviato", - "imageCopied": "Immagine copiata", - "imageLinkCopied": "Collegamento immagine copiato", - "imageNotLoaded": "Nessuna immagine caricata", - "imageNotLoadedDesc": "Impossibile trovare l'immagine", - "imageSavedToGallery": "Immagine salvata nella Galleria", - "canvasMerged": "Tela unita", - "sentToImageToImage": "Inviato a Immagine a Immagine", - "sentToUnifiedCanvas": "Inviato a Tela Unificata", - "parametersSet": "Parametri impostati", - "parametersNotSet": "Parametri non impostati", - "parametersNotSetDesc": "Nessun metadato trovato per questa immagine.", - "parametersFailed": "Problema durante il caricamento dei parametri", - "parametersFailedDesc": "Impossibile caricare l'immagine iniziale.", - "seedSet": "Seme impostato", - "seedNotSet": "Seme non impostato", - "seedNotSetDesc": "Impossibile trovare il seme per questa immagine.", - "promptSet": "Prompt impostato", - "promptNotSet": "Prompt non impostato", - "promptNotSetDesc": "Impossibile trovare il prompt per questa immagine.", - "upscalingFailed": "Ampliamento non riuscito", - "faceRestoreFailed": "Restauro facciale non riuscito", - "metadataLoadFailed": "Impossibile caricare i metadati", - "initialImageSet": "Immagine iniziale impostata", - "initialImageNotSet": "Immagine iniziale non impostata", - "initialImageNotSetDesc": "Impossibile caricare l'immagine iniziale", - "serverError": "Errore del Server", - "disconnected": "Disconnesso dal Server", - "connected": "Connesso al Server", - "canceled": "Elaborazione annullata", - "problemCopyingImageLink": "Impossibile copiare il collegamento dell'immagine", - "uploadFailedInvalidUploadDesc": "Deve essere una singola immagine PNG o JPEG", - "parameterSet": "Parametro impostato", - "parameterNotSet": "Parametro non impostato", - "nodesLoadedFailed": "Impossibile caricare i nodi", - "nodesSaved": "Nodi salvati", - "nodesLoaded": "Nodi caricati", - "problemCopyingImage": "Impossibile copiare l'immagine", - "nodesNotValidGraph": "Grafico del nodo InvokeAI non valido", - "nodesCorruptedGraph": "Impossibile caricare. Il grafico sembra essere danneggiato.", - "nodesUnrecognizedTypes": "Impossibile caricare. Il grafico ha tipi di dati non riconosciuti", - "nodesNotValidJSON": "JSON non valido", - "nodesBrokenConnections": "Impossibile caricare. Alcune connessioni sono interrotte.", - "baseModelChangedCleared_one": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modello incompatibile", - "baseModelChangedCleared_many": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", - "baseModelChangedCleared_other": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", - "imageSavingFailed": "Salvataggio dell'immagine non riuscito", - "canvasSentControlnetAssets": "Tela inviata a ControlNet & Risorse", - "problemCopyingCanvasDesc": "Impossibile copiare la tela", - "loadedWithWarnings": "Flusso di lavoro caricato con avvisi", - "canvasCopiedClipboard": "Tela copiata negli appunti", - "maskSavedAssets": "Maschera salvata nelle risorse", - "modelAddFailed": "Aggiunta del modello non riuscita", - "problemDownloadingCanvas": "Problema durante il download della tela", - "problemMergingCanvas": "Problema nell'unione delle tele", - "imageUploaded": "Immagine caricata", - "addedToBoard": "Aggiunto alla bacheca", - "modelAddedSimple": "Modello aggiunto", - "problemImportingMaskDesc": "Impossibile importare la maschera", - "problemCopyingCanvas": "Problema durante la copia della tela", - "problemSavingCanvas": "Problema nel salvataggio della tela", - "canvasDownloaded": "Tela scaricata", - "problemMergingCanvasDesc": "Impossibile unire le tele", - "problemDownloadingCanvasDesc": "Impossibile scaricare la tela", - "imageSaved": "Immagine salvata", - "maskSentControlnetAssets": "Maschera inviata a ControlNet & Risorse", - "canvasSavedGallery": "Tela salvata nella Galleria", - "imageUploadFailed": "Caricamento immagine non riuscito", - "modelAdded": "Modello aggiunto: {{modelName}}", - "problemImportingMask": "Problema durante l'importazione della maschera", - "setInitialImage": "Imposta come immagine iniziale", - "setControlImage": "Imposta come immagine di controllo", - "setNodeField": "Imposta come campo nodo", - "problemSavingMask": "Problema nel salvataggio della maschera", - "problemSavingCanvasDesc": "Impossibile salvare la tela", - "setCanvasInitialImage": "Imposta l'immagine iniziale della tela", - "workflowLoaded": "Flusso di lavoro caricato", - "setIPAdapterImage": "Imposta come immagine per l'Adattatore IP", - "problemSavingMaskDesc": "Impossibile salvare la maschera", - "setAsCanvasInitialImage": "Imposta come immagine iniziale della tela", - "invalidUpload": "Caricamento non valido", - "problemDeletingWorkflow": "Problema durante l'eliminazione del flusso di lavoro", - "workflowDeleted": "Flusso di lavoro eliminato", - "problemRetrievingWorkflow": "Problema nel recupero del flusso di lavoro" - }, - "tooltip": { - "feature": { - "prompt": "Questo è il campo del prompt. Il prompt include oggetti di generazione e termini stilistici. Puoi anche aggiungere il peso (importanza del token) nel prompt, ma i comandi e i parametri dell'interfaccia a linea di comando non funzioneranno.", - "gallery": "Galleria visualizza le generazioni dalla cartella degli output man mano che vengono create. Le impostazioni sono memorizzate all'interno di file e accessibili dal menu contestuale.", - "other": "Queste opzioni abiliteranno modalità di elaborazione alternative per Invoke. 'Piastrella senza cuciture' creerà modelli ripetuti nell'output. 'Ottimizzazione Alta risoluzione' è la generazione in due passaggi con 'Immagine a Immagine': usa questa impostazione quando vuoi un'immagine più grande e più coerente senza artefatti. Ci vorrà più tempo del solito 'Testo a Immagine'.", - "seed": "Il valore del Seme influenza il rumore iniziale da cui è formata l'immagine. Puoi usare i semi già esistenti dalle immagini precedenti. 'Soglia del rumore' viene utilizzato per mitigare gli artefatti a valori CFG elevati (provare l'intervallo 0-10) e Perlin per aggiungere il rumore Perlin durante la generazione: entrambi servono per aggiungere variazioni ai risultati.", - "variations": "Prova una variazione con un valore compreso tra 0.1 e 1.0 per modificare il risultato per un dato seme. Variazioni interessanti del seme sono comprese tra 0.1 e 0.3.", - "upscale": "Utilizza ESRGAN per ingrandire l'immagine subito dopo la generazione.", - "faceCorrection": "Correzione del volto con GFPGAN o Codeformer: l'algoritmo rileva i volti nell'immagine e corregge eventuali difetti. Un valore alto cambierà maggiormente l'immagine, dando luogo a volti più attraenti. Codeformer con una maggiore fedeltà preserva l'immagine originale a scapito di una correzione facciale più forte.", - "imageToImage": "Da Immagine a Immagine carica qualsiasi immagine come iniziale, che viene quindi utilizzata per generarne una nuova in base al prompt. Più alto è il valore, più cambierà l'immagine risultante. Sono possibili valori da 0.0 a 1.0, l'intervallo consigliato è 0.25-0.75", - "boundingBox": "Il riquadro di selezione è lo stesso delle impostazioni Larghezza e Altezza per da Testo a Immagine o da Immagine a Immagine. Verrà elaborata solo l'area nella casella.", - "seamCorrection": "Controlla la gestione delle giunzioni visibili che si verificano tra le immagini generate sulla tela.", - "infillAndScaling": "Gestisce i metodi di riempimento (utilizzati su aree mascherate o cancellate dell'area di disegno) e il ridimensionamento (utile per i riquadri di selezione di piccole dimensioni)." - } - }, - "unifiedCanvas": { - "layer": "Livello", - "base": "Base", - "mask": "Maschera", - "maskingOptions": "Opzioni di mascheramento", - "enableMask": "Abilita maschera", - "preserveMaskedArea": "Mantieni area mascherata", - "clearMask": "Cancella maschera (Shift+C)", - "brush": "Pennello", - "eraser": "Cancellino", - "fillBoundingBox": "Riempi rettangolo di selezione", - "eraseBoundingBox": "Cancella rettangolo di selezione", - "colorPicker": "Selettore Colore", - "brushOptions": "Opzioni pennello", - "brushSize": "Dimensioni", - "move": "Sposta", - "resetView": "Reimposta vista", - "mergeVisible": "Fondi il visibile", - "saveToGallery": "Salva nella galleria", - "copyToClipboard": "Copia negli appunti", - "downloadAsImage": "Scarica come immagine", - "undo": "Annulla", - "redo": "Ripeti", - "clearCanvas": "Cancella la Tela", - "canvasSettings": "Impostazioni Tela", - "showIntermediates": "Mostra intermedi", - "showGrid": "Mostra griglia", - "snapToGrid": "Aggancia alla griglia", - "darkenOutsideSelection": "Scurisci l'esterno della selezione", - "autoSaveToGallery": "Salvataggio automatico nella Galleria", - "saveBoxRegionOnly": "Salva solo l'area di selezione", - "limitStrokesToBox": "Limita i tratti all'area di selezione", - "showCanvasDebugInfo": "Mostra ulteriori informazioni sulla Tela", - "clearCanvasHistory": "Cancella cronologia Tela", - "clearHistory": "Cancella la cronologia", - "clearCanvasHistoryMessage": "La cancellazione della cronologia della tela lascia intatta la tela corrente, ma cancella in modo irreversibile la cronologia degli annullamenti e dei ripristini.", - "clearCanvasHistoryConfirm": "Sei sicuro di voler cancellare la cronologia della Tela?", - "emptyTempImageFolder": "Svuota la cartella delle immagini temporanee", - "emptyFolder": "Svuota la cartella", - "emptyTempImagesFolderMessage": "Lo svuotamento della cartella delle immagini temporanee ripristina completamente anche la Tela Unificata. Ciò include tutta la cronologia di annullamento/ripristino, le immagini nell'area di staging e il livello di base della tela.", - "emptyTempImagesFolderConfirm": "Sei sicuro di voler svuotare la cartella temporanea?", - "activeLayer": "Livello attivo", - "canvasScale": "Scala della Tela", - "boundingBox": "Rettangolo di selezione", - "scaledBoundingBox": "Rettangolo di selezione scalato", - "boundingBoxPosition": "Posizione del Rettangolo di selezione", - "canvasDimensions": "Dimensioni della Tela", - "canvasPosition": "Posizione Tela", - "cursorPosition": "Posizione del cursore", - "previous": "Precedente", - "next": "Successivo", - "accept": "Accetta", - "showHide": "Mostra/nascondi", - "discardAll": "Scarta tutto", - "betaClear": "Svuota", - "betaDarkenOutside": "Oscura all'esterno", - "betaLimitToBox": "Limita al rettangolo", - "betaPreserveMasked": "Conserva quanto mascherato", - "antialiasing": "Anti aliasing", - "showResultsOn": "Mostra i risultati (attivato)", - "showResultsOff": "Mostra i risultati (disattivato)", - "saveMask": "Salva $t(unifiedCanvas.mask)" - }, - "accessibility": { - "modelSelect": "Seleziona modello", - "invokeProgressBar": "Barra di avanzamento generazione", - "uploadImage": "Carica immagine", - "previousImage": "Immagine precedente", - "nextImage": "Immagine successiva", - "useThisParameter": "Usa questo parametro", - "reset": "Reimposta", - "copyMetadataJson": "Copia i metadati JSON", - "exitViewer": "Esci dal visualizzatore", - "zoomIn": "Zoom avanti", - "zoomOut": "Zoom indietro", - "rotateCounterClockwise": "Ruotare in senso antiorario", - "rotateClockwise": "Ruotare in senso orario", - "flipHorizontally": "Capovolgi orizzontalmente", - "toggleLogViewer": "Attiva/disattiva visualizzatore registro", - "showOptionsPanel": "Mostra il pannello laterale", - "flipVertically": "Capovolgi verticalmente", - "toggleAutoscroll": "Attiva/disattiva lo scorrimento automatico", - "modifyConfig": "Modifica configurazione", - "menu": "Menu", - "showGalleryPanel": "Mostra il pannello Galleria", - "loadMore": "Carica altro", - "mode": "Modalità", - "resetUI": "$t(accessibility.reset) l'Interfaccia Utente", - "createIssue": "Segnala un problema" - }, - "ui": { - "hideProgressImages": "Nascondi avanzamento immagini", - "showProgressImages": "Mostra avanzamento immagini", - "swapSizes": "Scambia dimensioni", - "lockRatio": "Blocca le proporzioni" - }, - "nodes": { - "zoomOutNodes": "Rimpicciolire", - "hideGraphNodes": "Nascondi sovrapposizione grafico", - "hideLegendNodes": "Nascondi la legenda del tipo di campo", - "showLegendNodes": "Mostra legenda del tipo di campo", - "hideMinimapnodes": "Nascondi minimappa", - "showMinimapnodes": "Mostra minimappa", - "zoomInNodes": "Ingrandire", - "fitViewportNodes": "Adatta vista", - "showGraphNodes": "Mostra sovrapposizione grafico", - "reloadNodeTemplates": "Ricarica i modelli di nodo", - "loadWorkflow": "Importa flusso di lavoro JSON", - "downloadWorkflow": "Esporta flusso di lavoro JSON", - "scheduler": "Campionatore", - "addNode": "Aggiungi nodo", - "sDXLMainModelFieldDescription": "Campo del modello SDXL.", - "boardField": "Bacheca", - "animatedEdgesHelp": "Anima i bordi selezionati e i bordi collegati ai nodi selezionati", - "sDXLMainModelField": "Modello SDXL", - "executionStateInProgress": "In corso", - "executionStateError": "Errore", - "executionStateCompleted": "Completato", - "boardFieldDescription": "Una bacheca della galleria", - "addNodeToolTip": "Aggiungi nodo (Shift+A, Space)", - "sDXLRefinerModelField": "Modello Refiner", - "problemReadingMetadata": "Problema durante la lettura dei metadati dall'immagine", - "colorCodeEdgesHelp": "Bordi con codice colore in base ai campi collegati", - "animatedEdges": "Bordi animati", - "snapToGrid": "Aggancia alla griglia", - "validateConnections": "Convalida connessioni e grafico", - "validateConnectionsHelp": "Impedisce che vengano effettuate connessioni non valide e che vengano \"invocati\" grafici non validi", - "fullyContainNodesHelp": "I nodi devono essere completamente all'interno della casella di selezione per essere selezionati", - "fullyContainNodes": "Contenere completamente i nodi da selezionare", - "snapToGridHelp": "Aggancia i nodi alla griglia quando vengono spostati", - "workflowSettings": "Impostazioni Editor del flusso di lavoro", - "colorCodeEdges": "Bordi con codice colore", - "mainModelField": "Modello", - "noOutputRecorded": "Nessun output registrato", - "noFieldsLinearview": "Nessun campo aggiunto alla vista lineare", - "removeLinearView": "Rimuovi dalla vista lineare", - "workflowDescription": "Breve descrizione", - "workflowContact": "Contatto", - "workflowVersion": "Versione", - "workflow": "Flusso di lavoro", - "noWorkflow": "Nessun flusso di lavoro", - "workflowTags": "Tag", - "workflowValidation": "Errore di convalida del flusso di lavoro", - "workflowAuthor": "Autore", - "workflowName": "Nome", - "workflowNotes": "Note", - "unhandledInputProperty": "Proprietà di input non gestita", - "versionUnknown": " Versione sconosciuta", - "unableToValidateWorkflow": "Impossibile convalidare il flusso di lavoro", - "updateApp": "Aggiorna App", - "problemReadingWorkflow": "Problema durante la lettura del flusso di lavoro dall'immagine", - "unableToLoadWorkflow": "Impossibile caricare il flusso di lavoro", - "updateNode": "Aggiorna nodo", - "version": "Versione", - "notes": "Note", - "problemSettingTitle": "Problema nell'impostazione del titolo", - "unkownInvocation": "Tipo di invocazione sconosciuta", - "unknownTemplate": "Modello sconosciuto", - "nodeType": "Tipo di nodo", - "vaeField": "VAE", - "unhandledOutputProperty": "Proprietà di output non gestita", - "notesDescription": "Aggiunge note sul tuo flusso di lavoro", - "unknownField": "Campo sconosciuto", - "unknownNode": "Nodo sconosciuto", - "vaeFieldDescription": "Sotto modello VAE.", - "booleanPolymorphicDescription": "Una raccolta di booleani.", - "missingTemplate": "Nodo non valido: nodo {{node}} di tipo {{type}} modello mancante (non installato?)", - "outputSchemaNotFound": "Schema di output non trovato", - "colorFieldDescription": "Un colore RGBA.", - "maybeIncompatible": "Potrebbe essere incompatibile con quello installato", - "noNodeSelected": "Nessun nodo selezionato", - "colorPolymorphic": "Colore polimorfico", - "booleanCollectionDescription": "Una raccolta di booleani.", - "colorField": "Colore", - "nodeTemplate": "Modello di nodo", - "nodeOpacity": "Opacità del nodo", - "pickOne": "Sceglierne uno", - "outputField": "Campo di output", - "nodeSearch": "Cerca nodi", - "nodeOutputs": "Uscite del nodo", - "collectionItem": "Oggetto della raccolta", - "noConnectionInProgress": "Nessuna connessione in corso", - "noConnectionData": "Nessun dato di connessione", - "outputFields": "Campi di output", - "cannotDuplicateConnection": "Impossibile creare connessioni duplicate", - "booleanPolymorphic": "Polimorfico booleano", - "colorPolymorphicDescription": "Una collezione di colori polimorfici.", - "missingCanvaInitImage": "Immagine iniziale della tela mancante", - "clipFieldDescription": "Sottomodelli di tokenizzatore e codificatore di testo.", - "noImageFoundState": "Nessuna immagine iniziale trovata nello stato", - "clipField": "CLIP", - "noMatchingNodes": "Nessun nodo corrispondente", - "noFieldType": "Nessun tipo di campo", - "colorCollection": "Una collezione di colori.", - "noOutputSchemaName": "Nessun nome dello schema di output trovato nell'oggetto di riferimento", - "boolean": "Booleani", - "missingCanvaInitMaskImages": "Immagini di inizializzazione e maschera della tela mancanti", - "oNNXModelField": "Modello ONNX", - "node": "Nodo", - "booleanDescription": "I booleani sono veri o falsi.", - "collection": "Raccolta", - "cannotConnectInputToInput": "Impossibile collegare Input a Input", - "cannotConnectOutputToOutput": "Impossibile collegare Output ad Output", - "booleanCollection": "Raccolta booleana", - "cannotConnectToSelf": "Impossibile connettersi a se stesso", - "mismatchedVersion": "Nodo non valido: il nodo {{node}} di tipo {{type}} ha una versione non corrispondente (provare ad aggiornare?)", - "outputNode": "Nodo di Output", - "loadingNodes": "Caricamento nodi...", - "oNNXModelFieldDescription": "Campo del modello ONNX.", - "denoiseMaskFieldDescription": "La maschera di riduzione del rumore può essere passata tra i nodi", - "floatCollectionDescription": "Una raccolta di numeri virgola mobile.", - "enum": "Enumeratore", - "float": "In virgola mobile", - "doesNotExist": "non esiste", - "currentImageDescription": "Visualizza l'immagine corrente nell'editor dei nodi", - "fieldTypesMustMatch": "I tipi di campo devono corrispondere", - "edge": "Bordo", - "enumDescription": "Gli enumeratori sono valori che possono essere una delle diverse opzioni.", - "denoiseMaskField": "Maschera riduzione rumore", - "currentImage": "Immagine corrente", - "floatCollection": "Raccolta in virgola mobile", - "inputField": "Campo di Input", - "controlFieldDescription": "Informazioni di controllo passate tra i nodi.", - "skippingUnknownOutputType": "Tipo di campo di output sconosciuto saltato", - "latentsFieldDescription": "Le immagini latenti possono essere passate tra i nodi.", - "ipAdapterPolymorphicDescription": "Una raccolta di adattatori IP.", - "latentsPolymorphicDescription": "Le immagini latenti possono essere passate tra i nodi.", - "ipAdapterCollection": "Raccolta Adattatori IP", - "conditioningCollection": "Raccolta condizionamenti", - "ipAdapterPolymorphic": "Adattatore IP Polimorfico", - "integerPolymorphicDescription": "Una raccolta di numeri interi.", - "conditioningCollectionDescription": "Il condizionamento può essere passato tra i nodi.", - "skippingReservedFieldType": "Tipo di campo riservato saltato", - "conditioningPolymorphic": "Condizionamento Polimorfico", - "integer": "Numero Intero", - "latentsCollection": "Raccolta Latenti", - "sourceNode": "Nodo di origine", - "integerDescription": "Gli interi sono numeri senza punto decimale.", - "stringPolymorphic": "Stringa polimorfica", - "conditioningPolymorphicDescription": "Il condizionamento può essere passato tra i nodi.", - "skipped": "Saltato", - "imagePolymorphic": "Immagine Polimorfica", - "imagePolymorphicDescription": "Una raccolta di immagini.", - "floatPolymorphic": "Numeri in virgola mobile Polimorfici", - "ipAdapterCollectionDescription": "Una raccolta di adattatori IP.", - "stringCollectionDescription": "Una raccolta di stringhe.", - "unableToParseNode": "Impossibile analizzare il nodo", - "controlCollection": "Raccolta di Controllo", - "stringCollection": "Raccolta di stringhe", - "inputMayOnlyHaveOneConnection": "L'ingresso può avere solo una connessione", - "ipAdapter": "Adattatore IP", - "integerCollection": "Raccolta di numeri interi", - "controlCollectionDescription": "Informazioni di controllo passate tra i nodi.", - "skippedReservedInput": "Campo di input riservato saltato", - "inputNode": "Nodo di Input", - "imageField": "Immagine", - "skippedReservedOutput": "Campo di output riservato saltato", - "integerCollectionDescription": "Una raccolta di numeri interi.", - "conditioningFieldDescription": "Il condizionamento può essere passato tra i nodi.", - "stringDescription": "Le stringhe sono testo.", - "integerPolymorphic": "Numero intero Polimorfico", - "ipAdapterModel": "Modello Adattatore IP", - "latentsPolymorphic": "Latenti polimorfici", - "skippingInputNoTemplate": "Campo di input senza modello saltato", - "ipAdapterDescription": "Un adattatore di prompt di immagini (Adattatore IP).", - "stringPolymorphicDescription": "Una raccolta di stringhe.", - "skippingUnknownInputType": "Tipo di campo di input sconosciuto saltato", - "controlField": "Controllo", - "ipAdapterModelDescription": "Campo Modello adattatore IP", - "invalidOutputSchema": "Schema di output non valido", - "floatDescription": "I numeri in virgola mobile sono numeri con un punto decimale.", - "floatPolymorphicDescription": "Una raccolta di numeri in virgola mobile.", - "conditioningField": "Condizionamento", - "string": "Stringa", - "latentsField": "Latenti", - "connectionWouldCreateCycle": "La connessione creerebbe un ciclo", - "inputFields": "Campi di Input", - "uNetFieldDescription": "Sub-modello UNet.", - "imageCollectionDescription": "Una raccolta di immagini.", - "imageFieldDescription": "Le immagini possono essere passate tra i nodi.", - "unableToParseEdge": "Impossibile analizzare il bordo", - "latentsCollectionDescription": "Le immagini latenti possono essere passate tra i nodi.", - "imageCollection": "Raccolta Immagini", - "loRAModelField": "LoRA", - "updateAllNodes": "Aggiorna i nodi", - "unableToUpdateNodes_one": "Impossibile aggiornare {{count}} nodo", - "unableToUpdateNodes_many": "Impossibile aggiornare {{count}} nodi", - "unableToUpdateNodes_other": "Impossibile aggiornare {{count}} nodi", - "addLinearView": "Aggiungi alla vista Lineare", - "outputFieldInInput": "Campo di uscita in ingresso", - "unableToMigrateWorkflow": "Impossibile migrare il flusso di lavoro", - "unableToUpdateNode": "Impossibile aggiornare nodo", - "unknownErrorValidatingWorkflow": "Errore sconosciuto durante la convalida del flusso di lavoro", - "collectionFieldType": "{{name}} Raccolta", - "collectionOrScalarFieldType": "{{name}} Raccolta|Scalare", - "nodeVersion": "Versione Nodo", - "inputFieldTypeParseError": "Impossibile analizzare il tipo di campo di input {{node}}.{{field}} ({{message}})", - "unsupportedArrayItemType": "Tipo di elemento dell'array non supportato \"{{type}}\"", - "targetNodeFieldDoesNotExist": "Connessione non valida: il campo di destinazione/input {{node}}.{{field}} non esiste", - "unsupportedMismatchedUnion": "tipo CollectionOrScalar non corrispondente con tipi di base {{firstType}} e {{secondType}}", - "allNodesUpdated": "Tutti i nodi sono aggiornati", - "sourceNodeDoesNotExist": "Connessione non valida: il nodo di origine/output {{node}} non esiste", - "unableToExtractEnumOptions": "Impossibile estrarre le opzioni enum", - "unableToParseFieldType": "Impossibile analizzare il tipo di campo", - "unrecognizedWorkflowVersion": "Versione dello schema del flusso di lavoro non riconosciuta {{version}}", - "outputFieldTypeParseError": "Impossibile analizzare il tipo di campo di output {{node}}.{{field}} ({{message}})", - "sourceNodeFieldDoesNotExist": "Connessione non valida: il campo di origine/output {{node}}.{{field}} non esiste", - "unableToGetWorkflowVersion": "Impossibile ottenere la versione dello schema del flusso di lavoro", - "nodePack": "Pacchetto di nodi", - "unableToExtractSchemaNameFromRef": "Impossibile estrarre il nome dello schema dal riferimento", - "unknownOutput": "Output sconosciuto: {{name}}", - "unknownNodeType": "Tipo di nodo sconosciuto", - "targetNodeDoesNotExist": "Connessione non valida: il nodo di destinazione/input {{node}} non esiste", - "unknownFieldType": "$t(nodes.unknownField) tipo: {{type}}", - "deletedInvalidEdge": "Eliminata connessione non valida {{source}} -> {{target}}", - "unknownInput": "Input sconosciuto: {{name}}", - "prototypeDesc": "Questa invocazione è un prototipo. Potrebbe subire modifiche sostanziali durante gli aggiornamenti dell'app e potrebbe essere rimossa in qualsiasi momento.", - "betaDesc": "Questa invocazione è in versione beta. Fino a quando non sarà stabile, potrebbe subire modifiche importanti durante gli aggiornamenti dell'app. Abbiamo intenzione di supportare questa invocazione a lungo termine.", - "newWorkflow": "Nuovo flusso di lavoro", - "newWorkflowDesc": "Creare un nuovo flusso di lavoro?", - "newWorkflowDesc2": "Il flusso di lavoro attuale presenta modifiche non salvate.", - "unsupportedAnyOfLength": "unione di troppi elementi ({{count}})" - }, - "boards": { - "autoAddBoard": "Aggiungi automaticamente bacheca", - "menuItemAutoAdd": "Aggiungi automaticamente a questa Bacheca", - "cancel": "Annulla", - "addBoard": "Aggiungi Bacheca", - "bottomMessage": "L'eliminazione di questa bacheca e delle sue immagini ripristinerà tutte le funzionalità che le stanno attualmente utilizzando.", - "changeBoard": "Cambia Bacheca", - "loading": "Caricamento in corso ...", - "clearSearch": "Cancella Ricerca", - "topMessage": "Questa bacheca contiene immagini utilizzate nelle seguenti funzionalità:", - "move": "Sposta", - "myBoard": "Bacheca", - "searchBoard": "Cerca bacheche ...", - "noMatching": "Nessuna bacheca corrispondente", - "selectBoard": "Seleziona una Bacheca", - "uncategorized": "Non categorizzato", - "downloadBoard": "Scarica la bacheca", - "deleteBoardOnly": "solo la Bacheca", - "deleteBoard": "Elimina Bacheca", - "deleteBoardAndImages": "Bacheca e Immagini", - "deletedBoardsCannotbeRestored": "Le bacheche eliminate non possono essere ripristinate", - "movingImagesToBoard_one": "Spostare {{count}} immagine nella bacheca:", - "movingImagesToBoard_many": "Spostare {{count}} immagini nella bacheca:", - "movingImagesToBoard_other": "Spostare {{count}} immagini nella bacheca:" - }, - "controlnet": { - "contentShuffleDescription": "Rimescola il contenuto di un'immagine", - "contentShuffle": "Rimescola contenuto", - "beginEndStepPercent": "Percentuale passi Inizio / Fine", - "duplicate": "Duplica", - "balanced": "Bilanciato", - "depthMidasDescription": "Generazione di mappe di profondità usando Midas", - "control": "ControlNet", - "crop": "Ritaglia", - "depthMidas": "Profondità (Midas)", - "enableControlnet": "Abilita ControlNet", - "detectResolution": "Rileva risoluzione", - "controlMode": "Modalità Controllo", - "cannyDescription": "Canny rilevamento bordi", - "depthZoe": "Profondità (Zoe)", - "autoConfigure": "Configura automaticamente il processore", - "delete": "Elimina", - "depthZoeDescription": "Generazione di mappe di profondità usando Zoe", - "resize": "Ridimensiona", - "showAdvanced": "Mostra opzioni Avanzate", - "bgth": "Soglia rimozione sfondo", - "importImageFromCanvas": "Importa immagine dalla Tela", - "lineartDescription": "Converte l'immagine in lineart", - "importMaskFromCanvas": "Importa maschera dalla Tela", - "hideAdvanced": "Nascondi opzioni avanzate", - "ipAdapterModel": "Modello Adattatore", - "resetControlImage": "Reimposta immagine di controllo", - "f": "F", - "h": "H", - "prompt": "Prompt", - "openPoseDescription": "Stima della posa umana utilizzando Openpose", - "resizeMode": "Modalità ridimensionamento", - "weight": "Peso", - "selectModel": "Seleziona un modello", - "w": "W", - "processor": "Processore", - "none": "Nessuno", - "incompatibleBaseModel": "Modello base incompatibile:", - "pidiDescription": "Elaborazione immagini PIDI", - "fill": "Riempie", - "colorMapDescription": "Genera una mappa dei colori dall'immagine", - "lineartAnimeDescription": "Elaborazione lineart in stile anime", - "imageResolution": "Risoluzione dell'immagine", - "colorMap": "Colore", - "lowThreshold": "Soglia inferiore", - "highThreshold": "Soglia superiore", - "normalBaeDescription": "Elaborazione BAE normale", - "noneDescription": "Nessuna elaborazione applicata", - "saveControlImage": "Salva immagine di controllo", - "toggleControlNet": "Attiva/disattiva questo ControlNet", - "safe": "Sicuro", - "colorMapTileSize": "Dimensione piastrella", - "ipAdapterImageFallback": "Nessuna immagine dell'Adattatore IP selezionata", - "mediapipeFaceDescription": "Rilevamento dei volti tramite Mediapipe", - "hedDescription": "Rilevamento dei bordi nidificati olisticamente", - "setControlImageDimensions": "Imposta le dimensioni dell'immagine di controllo su L/A", - "resetIPAdapterImage": "Reimposta immagine Adattatore IP", - "handAndFace": "Mano e faccia", - "enableIPAdapter": "Abilita Adattatore IP", - "maxFaces": "Numero massimo di volti", - "addT2IAdapter": "Aggiungi $t(common.t2iAdapter)", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) abilitato, $t(common.t2iAdapter) disabilitati", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) abilitato, $t(common.controlNet) disabilitati", - "addControlNet": "Aggiungi $t(common.controlNet)", - "controlNetT2IMutexDesc": "$t(common.controlNet) e $t(common.t2iAdapter) contemporaneamente non sono attualmente supportati.", - "addIPAdapter": "Aggiungi $t(common.ipAdapter)", - "controlAdapter_one": "Adattatore di Controllo", - "controlAdapter_many": "Adattatori di Controllo", - "controlAdapter_other": "Adattatori di Controllo", - "megaControl": "Mega ControlNet", - "minConfidence": "Confidenza minima", - "scribble": "Scribble", - "amult": "Angolo di illuminazione", - "coarse": "Approssimativo" - }, - "queue": { - "queueFront": "Aggiungi all'inizio della coda", - "queueBack": "Aggiungi alla coda", - "queueCountPrediction": "Aggiungi {{predicted}} alla coda", - "queue": "Coda", - "status": "Stato", - "pruneSucceeded": "Rimossi {{item_count}} elementi completati dalla coda", - "cancelTooltip": "Annulla l'elemento corrente", - "queueEmpty": "Coda vuota", - "pauseSucceeded": "Elaborazione sospesa", - "in_progress": "In corso", - "notReady": "Impossibile mettere in coda", - "batchFailedToQueue": "Impossibile mettere in coda il lotto", - "completed": "Completati", - "batchValues": "Valori del lotto", - "cancelFailed": "Problema durante l'annullamento dell'elemento", - "batchQueued": "Lotto aggiunto alla coda", - "pauseFailed": "Problema durante la sospensione dell'elaborazione", - "clearFailed": "Problema nella cancellazione della coda", - "queuedCount": "{{pending}} In attesa", - "front": "inizio", - "clearSucceeded": "Coda cancellata", - "pause": "Sospendi", - "pruneTooltip": "Rimuovi {{item_count}} elementi completati", - "cancelSucceeded": "Elemento annullato", - "batchQueuedDesc_one": "Aggiunta {{count}} sessione a {{direction}} della coda", - "batchQueuedDesc_many": "Aggiunte {{count}} sessioni a {{direction}} della coda", - "batchQueuedDesc_other": "Aggiunte {{count}} sessioni a {{direction}} della coda", - "graphQueued": "Grafico in coda", - "batch": "Lotto", - "clearQueueAlertDialog": "Lo svuotamento della coda annulla immediatamente tutti gli elementi in elaborazione e cancella completamente la coda.", - "pending": "In attesa", - "completedIn": "Completato in", - "resumeFailed": "Problema nel riavvio dell'elaborazione", - "clear": "Cancella", - "prune": "Rimuovi", - "total": "Totale", - "canceled": "Annullati", - "pruneFailed": "Problema nel rimuovere la coda", - "cancelBatchSucceeded": "Lotto annullato", - "clearTooltip": "Annulla e cancella tutti gli elementi", - "current": "Attuale", - "pauseTooltip": "Sospende l'elaborazione", - "failed": "Falliti", - "cancelItem": "Annulla l'elemento", - "next": "Prossimo", - "cancelBatch": "Annulla lotto", - "back": "fine", - "cancel": "Annulla", - "session": "Sessione", - "queueTotal": "{{total}} Totale", - "resumeSucceeded": "Elaborazione ripresa", - "enqueueing": "Lotto in coda", - "resumeTooltip": "Riprendi l'elaborazione", - "resume": "Riprendi", - "cancelBatchFailed": "Problema durante l'annullamento del lotto", - "clearQueueAlertDialog2": "Sei sicuro di voler cancellare la coda?", - "item": "Elemento", - "graphFailedToQueue": "Impossibile mettere in coda il grafico", - "queueMaxExceeded": "È stato superato il limite massimo di {{max_queue_size}} e {{skip}} elementi verrebbero saltati", - "batchFieldValues": "Valori Campi Lotto", - "time": "Tempo" - }, - "embedding": { - "noMatchingEmbedding": "Nessun Incorporamento corrispondente", - "addEmbedding": "Aggiungi Incorporamento", - "incompatibleModel": "Modello base incompatibile:", - "noEmbeddingsLoaded": "Nessun incorporamento caricato" - }, - "models": { - "noMatchingModels": "Nessun modello corrispondente", - "loading": "caricamento", - "noMatchingLoRAs": "Nessun LoRA corrispondente", - "noLoRAsAvailable": "Nessun LoRA disponibile", - "noModelsAvailable": "Nessun modello disponibile", - "selectModel": "Seleziona un modello", - "selectLoRA": "Seleziona un LoRA", - "noRefinerModelsInstalled": "Nessun modello SDXL Refiner installato", - "noLoRAsInstalled": "Nessun LoRA installato", - "esrganModel": "Modello ESRGAN", - "addLora": "Aggiungi LoRA", - "noLoRAsLoaded": "Nessuna LoRA caricata" - }, - "invocationCache": { - "disable": "Disabilita", - "misses": "Non trovati in cache", - "enableFailed": "Problema nell'abilitazione della cache delle invocazioni", - "invocationCache": "Cache delle invocazioni", - "clearSucceeded": "Cache delle invocazioni svuotata", - "enableSucceeded": "Cache delle invocazioni abilitata", - "clearFailed": "Problema durante lo svuotamento della cache delle invocazioni", - "hits": "Trovati in cache", - "disableSucceeded": "Cache delle invocazioni disabilitata", - "disableFailed": "Problema durante la disabilitazione della cache delle invocazioni", - "enable": "Abilita", - "clear": "Svuota", - "maxCacheSize": "Dimensione max cache", - "cacheSize": "Dimensione cache", - "useCache": "Usa Cache" - }, - "dynamicPrompts": { - "seedBehaviour": { - "perPromptDesc": "Utilizza un seme diverso per ogni immagine", - "perIterationLabel": "Per iterazione", - "perIterationDesc": "Utilizza un seme diverso per ogni iterazione", - "perPromptLabel": "Per immagine", - "label": "Comportamento del seme" - }, - "enableDynamicPrompts": "Abilita prompt dinamici", - "combinatorial": "Generazione combinatoria", - "maxPrompts": "Numero massimo di prompt", - "promptsWithCount_one": "{{count}} Prompt", - "promptsWithCount_many": "{{count}} Prompt", - "promptsWithCount_other": "{{count}} Prompt", - "dynamicPrompts": "Prompt dinamici", - "promptsPreview": "Anteprima dei prompt" - }, - "popovers": { - "paramScheduler": { - "paragraphs": [ - "Il campionatore definisce come aggiungere in modo iterativo il rumore a un'immagine o come aggiornare un campione in base all'output di un modello." - ], - "heading": "Campionatore" - }, - "compositingMaskAdjustments": { - "heading": "Regolazioni della maschera", - "paragraphs": [ - "Regola la maschera." - ] - }, - "compositingCoherenceSteps": { - "heading": "Passi", - "paragraphs": [ - "Numero di passi di riduzione del rumore utilizzati nel Passaggio di Coerenza.", - "Uguale al parametro principale Passi." - ] - }, - "compositingBlur": { - "heading": "Sfocatura", - "paragraphs": [ - "Il raggio di sfocatura della maschera." - ] - }, - "compositingCoherenceMode": { - "heading": "Modalità", - "paragraphs": [ - "La modalità del Passaggio di Coerenza." - ] - }, - "clipSkip": { - "paragraphs": [ - "Scegli quanti livelli del modello CLIP saltare.", - "Alcuni modelli funzionano meglio con determinate impostazioni di CLIP Skip.", - "Un valore più alto in genere produce un'immagine meno dettagliata." - ] - }, - "compositingCoherencePass": { - "heading": "Passaggio di Coerenza", - "paragraphs": [ - "Un secondo ciclo di riduzione del rumore aiuta a comporre l'immagine Inpaint/Outpaint." - ] - }, - "compositingStrength": { - "heading": "Forza", - "paragraphs": [ - "Intensità di riduzione del rumore per il passaggio di coerenza.", - "Uguale al parametro intensità di riduzione del rumore da immagine a immagine." - ] - }, - "paramNegativeConditioning": { - "paragraphs": [ - "Il processo di generazione evita i concetti nel prompt negativo. Utilizzatelo per escludere qualità o oggetti dall'output.", - "Supporta la sintassi e gli incorporamenti di Compel." - ], - "heading": "Prompt negativo" - }, - "compositingBlurMethod": { - "heading": "Metodo di sfocatura", - "paragraphs": [ - "Il metodo di sfocatura applicato all'area mascherata." - ] - }, - "paramPositiveConditioning": { - "heading": "Prompt positivo", - "paragraphs": [ - "Guida il processo di generazione. Puoi usare qualsiasi parola o frase.", - "Supporta sintassi e incorporamenti di Compel e Prompt Dinamici." - ] - }, - "controlNetBeginEnd": { - "heading": "Percentuale passi Inizio / Fine", - "paragraphs": [ - "A quali passi del processo di rimozione del rumore verrà applicato ControlNet.", - "I ControlNet applicati all'inizio del processo guidano la composizione, mentre i ControlNet applicati alla fine guidano i dettagli." - ] - }, - "noiseUseCPU": { - "paragraphs": [ - "Controlla se viene generato rumore sulla CPU o sulla GPU.", - "Con il rumore della CPU abilitato, un seme particolare produrrà la stessa immagine su qualsiasi macchina.", - "Non vi è alcun impatto sulle prestazioni nell'abilitare il rumore della CPU." - ], - "heading": "Usa la CPU per generare rumore" - }, - "scaleBeforeProcessing": { - "paragraphs": [ - "Ridimensiona l'area selezionata alla dimensione più adatta al modello prima del processo di generazione dell'immagine." - ], - "heading": "Scala prima dell'elaborazione" - }, - "paramRatio": { - "heading": "Proporzioni", - "paragraphs": [ - "Le proporzioni delle dimensioni dell'immagine generata.", - "Per i modelli SD1.5 si consiglia una dimensione dell'immagine (in numero di pixel) equivalente a 512x512 mentre per i modelli SDXL si consiglia una dimensione equivalente a 1024x1024." - ] - }, - "dynamicPrompts": { - "paragraphs": [ - "Prompt Dinamici crea molte variazioni a partire da un singolo prompt.", - "La sintassi di base è \"a {red|green|blue} ball\". Ciò produrrà tre prompt: \"a red ball\", \"a green ball\" e \"a blue ball\".", - "Puoi utilizzare la sintassi quante volte vuoi in un singolo prompt, ma assicurati di tenere sotto controllo il numero di prompt generati con l'impostazione \"Numero massimo di prompt\"." - ], - "heading": "Prompt Dinamici" - }, - "paramVAE": { - "paragraphs": [ - "Modello utilizzato per tradurre l'output dell'intelligenza artificiale nell'immagine finale." - ], - "heading": "VAE" - }, - "paramIterations": { - "paragraphs": [ - "Il numero di immagini da generare.", - "Se i prompt dinamici sono abilitati, ciascuno dei prompt verrà generato questo numero di volte." - ], - "heading": "Iterazioni" - }, - "paramVAEPrecision": { - "heading": "Precisione VAE", - "paragraphs": [ - "La precisione utilizzata durante la codifica e decodifica VAE. FP16/mezza precisione è più efficiente, a scapito di minori variazioni dell'immagine." - ] - }, - "paramSeed": { - "paragraphs": [ - "Controlla il rumore iniziale utilizzato per la generazione.", - "Disabilita seme \"Casuale\" per produrre risultati identici con le stesse impostazioni di generazione." - ], - "heading": "Seme" - }, - "controlNetResizeMode": { - "heading": "Modalità ridimensionamento", - "paragraphs": [ - "Come l'immagine ControlNet verrà adattata alle dimensioni di output dell'immagine." - ] - }, - "dynamicPromptsSeedBehaviour": { - "paragraphs": [ - "Controlla il modo in cui viene utilizzato il seme durante la generazione dei prompt.", - "Per iterazione utilizzerà un seme univoco per ogni iterazione. Usalo per esplorare variazioni del prompt su un singolo seme.", - "Ad esempio, se hai 5 prompt, ogni immagine utilizzerà lo stesso seme.", - "Per immagine utilizzerà un seme univoco per ogni immagine. Ciò fornisce più variazione." - ], - "heading": "Comportamento del seme" - }, - "paramModel": { - "heading": "Modello", - "paragraphs": [ - "Modello utilizzato per i passaggi di riduzione del rumore.", - "Diversi modelli sono generalmente addestrati per specializzarsi nella produzione di particolari risultati e contenuti estetici." - ] - }, - "paramDenoisingStrength": { - "paragraphs": [ - "Quanto rumore viene aggiunto all'immagine in ingresso.", - "0 risulterà in un'immagine identica, mentre 1 risulterà in un'immagine completamente nuova." - ], - "heading": "Forza di riduzione del rumore" - }, - "dynamicPromptsMaxPrompts": { - "heading": "Numero massimo di prompt", - "paragraphs": [ - "Limita il numero di prompt che possono essere generati da Prompt Dinamici." - ] - }, - "infillMethod": { - "paragraphs": [ - "Metodo per riempire l'area selezionata." - ], - "heading": "Metodo di riempimento" - }, - "controlNetWeight": { - "heading": "Peso", - "paragraphs": [ - "Quanto forte sarà l'impatto di ControlNet sull'immagine generata." - ] - }, - "paramCFGScale": { - "heading": "Scala CFG", - "paragraphs": [ - "Controlla quanto il tuo prompt influenza il processo di generazione." - ] - }, - "controlNetControlMode": { - "paragraphs": [ - "Attribuisce più peso al prompt o a ControlNet." - ], - "heading": "Modalità di controllo" - }, - "paramSteps": { - "heading": "Passi", - "paragraphs": [ - "Numero di passi che verranno eseguiti in ogni generazione.", - "Un numero di passi più elevato generalmente creerà immagini migliori ma richiederà più tempo di generazione." - ] - }, - "lora": { - "heading": "Peso LoRA", - "paragraphs": [ - "Un peso LoRA più elevato porterà a impatti maggiori sull'immagine finale." - ] - }, - "controlNet": { - "paragraphs": [ - "ControlNet fornisce una guida al processo di generazione, aiutando a creare immagini con composizione, struttura o stile controllati, a seconda del modello selezionato." - ], - "heading": "ControlNet" - }, - "paramCFGRescaleMultiplier": { - "heading": "Moltiplicatore di riscala CFG", - "paragraphs": [ - "Moltiplicatore di riscala per la guida CFG, utilizzato per modelli addestrati utilizzando SNR a terminale zero (ztsnr). Valore suggerito 0.7." - ] - } - }, - "sdxl": { - "selectAModel": "Seleziona un modello", - "scheduler": "Campionatore", - "noModelsAvailable": "Nessun modello disponibile", - "denoisingStrength": "Forza di riduzione del rumore", - "concatPromptStyle": "Concatena Prompt & Stile", - "loading": "Caricamento...", - "steps": "Passi", - "refinerStart": "Inizio Affinamento", - "cfgScale": "Scala CFG", - "negStylePrompt": "Prompt Stile negativo", - "refiner": "Affinatore", - "negAestheticScore": "Punteggio estetico negativo", - "useRefiner": "Utilizza l'affinatore", - "refinermodel": "Modello Affinatore", - "posAestheticScore": "Punteggio estetico positivo", - "posStylePrompt": "Prompt Stile positivo" - }, - "metadata": { - "initImage": "Immagine iniziale", - "seamless": "Senza giunture", - "positivePrompt": "Prompt positivo", - "negativePrompt": "Prompt negativo", - "generationMode": "Modalità generazione", - "Threshold": "Livello di soglia del rumore", - "metadata": "Metadati", - "strength": "Forza Immagine a Immagine", - "seed": "Seme", - "imageDetails": "Dettagli dell'immagine", - "perlin": "Rumore Perlin", - "model": "Modello", - "noImageDetails": "Nessun dettaglio dell'immagine trovato", - "hiresFix": "Ottimizzazione Alta Risoluzione", - "cfgScale": "Scala CFG", - "fit": "Adatta Immagine a Immagine", - "height": "Altezza", - "variations": "Coppie Peso-Seme", - "noMetaData": "Nessun metadato trovato", - "width": "Larghezza", - "createdBy": "Creato da", - "workflow": "Flusso di lavoro", - "steps": "Passi", - "scheduler": "Campionatore", - "recallParameters": "Richiama i parametri", - "noRecallParameters": "Nessun parametro da richiamare trovato" - }, - "hrf": { - "enableHrf": "Abilita Correzione Alta Risoluzione", - "upscaleMethod": "Metodo di ampliamento", - "enableHrfTooltip": "Genera con una risoluzione iniziale inferiore, esegue l'ampliamento alla risoluzione di base, quindi esegue Immagine a Immagine.", - "metadata": { - "strength": "Forza della Correzione Alta Risoluzione", - "enabled": "Correzione Alta Risoluzione Abilitata", - "method": "Metodo della Correzione Alta Risoluzione" - }, - "hrf": "Correzione Alta Risoluzione", - "hrfStrength": "Forza della Correzione Alta Risoluzione", - "strengthTooltip": "Valori più bassi comportano meno dettagli, il che può ridurre potenziali artefatti." - }, - "workflows": { - "saveWorkflowAs": "Salva flusso di lavoro come", - "workflowEditorMenu": "Menu dell'editor del flusso di lavoro", - "noSystemWorkflows": "Nessun flusso di lavoro del sistema", - "workflowName": "Nome del flusso di lavoro", - "noUserWorkflows": "Nessun flusso di lavoro utente", - "defaultWorkflows": "Flussi di lavoro predefiniti", - "saveWorkflow": "Salva flusso di lavoro", - "openWorkflow": "Apri flusso di lavoro", - "clearWorkflowSearchFilter": "Cancella il filtro di ricerca del flusso di lavoro", - "workflowLibrary": "Libreria", - "noRecentWorkflows": "Nessun flusso di lavoro recente", - "workflowSaved": "Flusso di lavoro salvato", - "workflowIsOpen": "Il flusso di lavoro è aperto", - "unnamedWorkflow": "Flusso di lavoro senza nome", - "savingWorkflow": "Salvataggio del flusso di lavoro...", - "problemLoading": "Problema durante il caricamento dei flussi di lavoro", - "loading": "Caricamento dei flussi di lavoro", - "searchWorkflows": "Cerca flussi di lavoro", - "problemSavingWorkflow": "Problema durante il salvataggio del flusso di lavoro", - "deleteWorkflow": "Elimina flusso di lavoro", - "workflows": "Flussi di lavoro", - "noDescription": "Nessuna descrizione", - "userWorkflows": "I miei flussi di lavoro", - "newWorkflowCreated": "Nuovo flusso di lavoro creato", - "downloadWorkflow": "Salva su file", - "uploadWorkflow": "Carica da file" - }, - "app": { - "storeNotInitialized": "Il negozio non è inizializzato" - } -} diff --git a/invokeai/frontend/web/dist/locales/ja.json b/invokeai/frontend/web/dist/locales/ja.json deleted file mode 100644 index bfcbffd7d9..0000000000 --- a/invokeai/frontend/web/dist/locales/ja.json +++ /dev/null @@ -1,832 +0,0 @@ -{ - "common": { - "languagePickerLabel": "言語", - "reportBugLabel": "バグ報告", - "settingsLabel": "設定", - "langJapanese": "日本語", - "nodesDesc": "現在、画像生成のためのノードベースシステムを開発中です。機能についてのアップデートにご期待ください。", - "postProcessing": "後処理", - "postProcessDesc1": "Invoke AIは、多彩な後処理の機能を備えています。アップスケーリングと顔修復は、すでにWebUI上で利用可能です。これらは、[Text To Image]および[Image To Image]タブの[詳細オプション]メニューからアクセスできます。また、現在の画像表示の上やビューア内の画像アクションボタンを使って、画像を直接処理することもできます。", - "postProcessDesc2": "より高度な後処理の機能を実現するための専用UIを近日中にリリース予定です。", - "postProcessDesc3": "Invoke AI CLIでは、この他にもEmbiggenをはじめとする様々な機能を利用することができます。", - "training": "追加学習", - "trainingDesc1": "Textual InversionとDreamboothを使って、WebUIから独自のEmbeddingとチェックポイントを追加学習するための専用ワークフローです。", - "trainingDesc2": "InvokeAIは、すでにメインスクリプトを使ったTextual Inversionによるカスタム埋め込み追加学習にも対応しています。", - "upload": "アップロード", - "close": "閉じる", - "load": "ロード", - "back": "戻る", - "statusConnected": "接続済", - "statusDisconnected": "切断済", - "statusError": "エラー", - "statusPreparing": "準備中", - "statusProcessingCanceled": "処理をキャンセル", - "statusProcessingComplete": "処理完了", - "statusGenerating": "生成中", - "statusGeneratingTextToImage": "Text To Imageで生成中", - "statusGeneratingImageToImage": "Image To Imageで生成中", - "statusGenerationComplete": "生成完了", - "statusSavingImage": "画像を保存", - "statusRestoringFaces": "顔の修復", - "statusRestoringFacesGFPGAN": "顔の修復 (GFPGAN)", - "statusRestoringFacesCodeFormer": "顔の修復 (CodeFormer)", - "statusUpscaling": "アップスケーリング", - "statusUpscalingESRGAN": "アップスケーリング (ESRGAN)", - "statusLoadingModel": "モデルを読み込む", - "statusModelChanged": "モデルを変更", - "cancel": "キャンセル", - "accept": "同意", - "langBrPortuguese": "Português do Brasil", - "langRussian": "Русский", - "langSimplifiedChinese": "简体中文", - "langUkranian": "Украї́нська", - "langSpanish": "Español", - "img2img": "img2img", - "unifiedCanvas": "Unified Canvas", - "statusMergingModels": "モデルのマージ", - "statusModelConverted": "変換済モデル", - "statusGeneratingInpainting": "Inpaintingを生成", - "statusIterationComplete": "Iteration Complete", - "statusGeneratingOutpainting": "Outpaintingを生成", - "loading": "ロード中", - "loadingInvokeAI": "Invoke AIをロード中", - "statusConvertingModel": "モデルの変換", - "statusMergedModels": "マージ済モデル", - "githubLabel": "Github", - "hotkeysLabel": "ホットキー", - "langHebrew": "עברית", - "discordLabel": "Discord", - "langItalian": "Italiano", - "langEnglish": "English", - "langArabic": "アラビア語", - "langDutch": "Nederlands", - "langFrench": "Français", - "langGerman": "Deutsch", - "langPortuguese": "Português", - "nodes": "ワークフローエディター", - "langKorean": "한국어", - "langPolish": "Polski", - "txt2img": "txt2img", - "postprocessing": "Post Processing", - "t2iAdapter": "T2I アダプター", - "communityLabel": "コミュニティ", - "dontAskMeAgain": "次回から確認しない", - "areYouSure": "本当によろしいですか?", - "on": "オン", - "nodeEditor": "ノードエディター", - "ipAdapter": "IPアダプター", - "controlAdapter": "コントロールアダプター", - "auto": "自動", - "openInNewTab": "新しいタブで開く", - "controlNet": "コントロールネット", - "statusProcessing": "処理中", - "linear": "リニア", - "imageFailedToLoad": "画像が読み込めません", - "imagePrompt": "画像プロンプト", - "modelManager": "モデルマネージャー", - "lightMode": "ライトモード", - "generate": "生成", - "learnMore": "もっと学ぶ", - "darkMode": "ダークモード", - "random": "ランダム", - "batch": "バッチマネージャー", - "advanced": "高度な設定" - }, - "gallery": { - "uploads": "アップロード", - "showUploads": "アップロードした画像を見る", - "galleryImageSize": "画像のサイズ", - "galleryImageResetSize": "サイズをリセット", - "gallerySettings": "ギャラリーの設定", - "maintainAspectRatio": "アスペクト比を維持", - "singleColumnLayout": "1カラムレイアウト", - "allImagesLoaded": "すべての画像を読み込む", - "loadMore": "さらに読み込む", - "noImagesInGallery": "ギャラリーに画像がありません", - "generations": "生成", - "showGenerations": "生成過程を見る", - "autoSwitchNewImages": "新しい画像に自動切替" - }, - "hotkeys": { - "keyboardShortcuts": "キーボードショートカット", - "appHotkeys": "アプリのホットキー", - "generalHotkeys": "Generalのホットキー", - "galleryHotkeys": "ギャラリーのホットキー", - "unifiedCanvasHotkeys": "Unified Canvasのホットキー", - "invoke": { - "desc": "画像を生成", - "title": "Invoke" - }, - "cancel": { - "title": "キャンセル", - "desc": "画像の生成をキャンセル" - }, - "focusPrompt": { - "desc": "プロンプトテキストボックスにフォーカス", - "title": "プロジェクトにフォーカス" - }, - "toggleOptions": { - "title": "オプションパネルのトグル", - "desc": "オプションパネルの開閉" - }, - "pinOptions": { - "title": "ピン", - "desc": "オプションパネルを固定" - }, - "toggleViewer": { - "title": "ビュワーのトグル", - "desc": "ビュワーを開閉" - }, - "toggleGallery": { - "title": "ギャラリーのトグル", - "desc": "ギャラリードロワーの開閉" - }, - "maximizeWorkSpace": { - "title": "作業領域の最大化", - "desc": "パネルを閉じて、作業領域を最大に" - }, - "changeTabs": { - "title": "タブの切替", - "desc": "他の作業領域と切替" - }, - "consoleToggle": { - "title": "コンソールのトグル", - "desc": "コンソールの開閉" - }, - "setPrompt": { - "title": "プロンプトをセット", - "desc": "現在の画像のプロンプトを使用" - }, - "setSeed": { - "title": "シード値をセット", - "desc": "現在の画像のシード値を使用" - }, - "setParameters": { - "title": "パラメータをセット", - "desc": "現在の画像のすべてのパラメータを使用" - }, - "restoreFaces": { - "title": "顔の修復", - "desc": "現在の画像を修復" - }, - "upscale": { - "title": "アップスケール", - "desc": "現在の画像をアップスケール" - }, - "showInfo": { - "title": "情報を見る", - "desc": "現在の画像のメタデータ情報を表示" - }, - "sendToImageToImage": { - "title": "Image To Imageに転送", - "desc": "現在の画像をImage to Imageに転送" - }, - "deleteImage": { - "title": "画像を削除", - "desc": "現在の画像を削除" - }, - "closePanels": { - "title": "パネルを閉じる", - "desc": "開いているパネルを閉じる" - }, - "previousImage": { - "title": "前の画像", - "desc": "ギャラリー内の1つ前の画像を表示" - }, - "nextImage": { - "title": "次の画像", - "desc": "ギャラリー内の1つ後の画像を表示" - }, - "toggleGalleryPin": { - "title": "ギャラリードロワーの固定", - "desc": "ギャラリーをUIにピン留め/解除" - }, - "increaseGalleryThumbSize": { - "title": "ギャラリーの画像を拡大", - "desc": "ギャラリーのサムネイル画像を拡大" - }, - "decreaseGalleryThumbSize": { - "title": "ギャラリーの画像サイズを縮小", - "desc": "ギャラリーのサムネイル画像を縮小" - }, - "selectBrush": { - "title": "ブラシを選択", - "desc": "ブラシを選択" - }, - "selectEraser": { - "title": "消しゴムを選択", - "desc": "消しゴムを選択" - }, - "decreaseBrushSize": { - "title": "ブラシサイズを縮小", - "desc": "ブラシ/消しゴムのサイズを縮小" - }, - "increaseBrushSize": { - "title": "ブラシサイズを拡大", - "desc": "ブラシ/消しゴムのサイズを拡大" - }, - "decreaseBrushOpacity": { - "title": "ブラシの不透明度を下げる", - "desc": "キャンバスブラシの不透明度を下げる" - }, - "increaseBrushOpacity": { - "title": "ブラシの不透明度を上げる", - "desc": "キャンバスブラシの不透明度を上げる" - }, - "fillBoundingBox": { - "title": "バウンディングボックスを塗りつぶす", - "desc": "ブラシの色でバウンディングボックス領域を塗りつぶす" - }, - "eraseBoundingBox": { - "title": "バウンディングボックスを消す", - "desc": "バウンディングボックス領域を消す" - }, - "colorPicker": { - "title": "カラーピッカーを選択", - "desc": "カラーピッカーを選択" - }, - "toggleLayer": { - "title": "レイヤーを切替", - "desc": "マスク/ベースレイヤの選択を切替" - }, - "clearMask": { - "title": "マスクを消す", - "desc": "マスク全体を消す" - }, - "hideMask": { - "title": "マスクを非表示", - "desc": "マスクを表示/非表示" - }, - "showHideBoundingBox": { - "title": "バウンディングボックスを表示/非表示", - "desc": "バウンディングボックスの表示/非表示を切替" - }, - "saveToGallery": { - "title": "ギャラリーに保存", - "desc": "現在のキャンバスをギャラリーに保存" - }, - "copyToClipboard": { - "title": "クリップボードにコピー", - "desc": "現在のキャンバスをクリップボードにコピー" - }, - "downloadImage": { - "title": "画像をダウンロード", - "desc": "現在の画像をダウンロード" - }, - "resetView": { - "title": "キャンバスをリセット", - "desc": "キャンバスをリセット" - } - }, - "modelManager": { - "modelManager": "モデルマネージャ", - "model": "モデル", - "allModels": "すべてのモデル", - "modelAdded": "モデルを追加", - "modelUpdated": "モデルをアップデート", - "addNew": "新規に追加", - "addNewModel": "新規モデル追加", - "addCheckpointModel": "Checkpointを追加 / Safetensorモデル", - "addDiffuserModel": "Diffusersを追加", - "addManually": "手動で追加", - "manual": "手動", - "name": "名前", - "nameValidationMsg": "モデルの名前を入力", - "description": "概要", - "descriptionValidationMsg": "モデルの概要を入力", - "config": "Config", - "configValidationMsg": "モデルの設定ファイルへのパス", - "modelLocation": "モデルの場所", - "modelLocationValidationMsg": "ディフューザーモデルのあるローカルフォルダーのパスを入力してください", - "repo_id": "Repo ID", - "repoIDValidationMsg": "モデルのリモートリポジトリ", - "vaeLocation": "VAEの場所", - "vaeLocationValidationMsg": "Vaeが配置されている場所へのパス", - "vaeRepoIDValidationMsg": "Vaeのリモートリポジトリ", - "width": "幅", - "widthValidationMsg": "モデルのデフォルトの幅", - "height": "高さ", - "heightValidationMsg": "モデルのデフォルトの高さ", - "addModel": "モデルを追加", - "updateModel": "モデルをアップデート", - "availableModels": "モデルを有効化", - "search": "検索", - "load": "Load", - "active": "active", - "notLoaded": "読み込まれていません", - "cached": "キャッシュ済", - "checkpointFolder": "Checkpointフォルダ", - "clearCheckpointFolder": "Checkpointフォルダ内を削除", - "findModels": "モデルを見つける", - "scanAgain": "再度スキャン", - "modelsFound": "モデルを発見", - "selectFolder": "フォルダを選択", - "selected": "選択済", - "selectAll": "すべて選択", - "deselectAll": "すべて選択解除", - "showExisting": "既存を表示", - "addSelected": "選択済を追加", - "modelExists": "モデルの有無", - "selectAndAdd": "以下のモデルを選択し、追加できます。", - "noModelsFound": "モデルが見つかりません。", - "delete": "削除", - "deleteModel": "モデルを削除", - "deleteConfig": "設定を削除", - "deleteMsg1": "InvokeAIからこのモデルを削除してよろしいですか?", - "deleteMsg2": "これは、モデルがInvokeAIルートフォルダ内にある場合、ディスクからモデルを削除します。カスタム保存場所を使用している場合、モデルはディスクから削除されません。", - "formMessageDiffusersModelLocation": "Diffusersモデルの場所", - "formMessageDiffusersModelLocationDesc": "最低でも1つは入力してください。", - "formMessageDiffusersVAELocation": "VAEの場所s", - "formMessageDiffusersVAELocationDesc": "指定しない場合、InvokeAIは上記のモデルの場所にあるVAEファイルを探します。", - "importModels": "モデルをインポート", - "custom": "カスタム", - "none": "なし", - "convert": "変換", - "statusConverting": "変換中", - "cannotUseSpaces": "スペースは使えません", - "convertToDiffusersHelpText6": "このモデルを変換しますか?", - "checkpointModels": "チェックポイント", - "settings": "設定", - "convertingModelBegin": "モデルを変換しています...", - "baseModel": "ベースモデル", - "modelDeleteFailed": "モデルの削除ができませんでした", - "convertToDiffusers": "ディフューザーに変換", - "alpha": "アルファ", - "diffusersModels": "ディフューザー", - "pathToCustomConfig": "カスタム設定のパス", - "noCustomLocationProvided": "カスタムロケーションが指定されていません", - "modelConverted": "モデル変換が完了しました", - "weightedSum": "重み付け総和", - "inverseSigmoid": "逆シグモイド", - "invokeAIFolder": "Invoke AI フォルダ", - "syncModelsDesc": "モデルがバックエンドと同期していない場合、このオプションを使用してモデルを更新できます。通常、モデル.yamlファイルを手動で更新したり、アプリケーションの起動後にモデルをInvokeAIルートフォルダに追加した場合に便利です。", - "noModels": "モデルが見つかりません", - "sigmoid": "シグモイド", - "merge": "マージ", - "modelMergeInterpAddDifferenceHelp": "このモードでは、モデル3がまずモデル2から減算されます。その結果得られたバージョンが、上記で設定されたアルファ率でモデル1とブレンドされます。", - "customConfig": "カスタム設定", - "predictionType": "予測タイプ(安定したディフュージョン 2.x モデルおよび一部の安定したディフュージョン 1.x モデル用)", - "selectModel": "モデルを選択", - "modelSyncFailed": "モデルの同期に失敗しました", - "quickAdd": "クイック追加", - "simpleModelDesc": "ローカルのDiffusersモデル、ローカルのチェックポイント/safetensorsモデル、HuggingFaceリポジトリのID、またはチェックポイント/ DiffusersモデルのURLへのパスを指定してください。", - "customSaveLocation": "カスタム保存場所", - "advanced": "高度な設定", - "modelDeleted": "モデルが削除されました", - "convertToDiffusersHelpText2": "このプロセスでは、モデルマネージャーのエントリーを同じモデルのディフューザーバージョンに置き換えます。", - "modelUpdateFailed": "モデル更新が失敗しました", - "useCustomConfig": "カスタム設定を使用する", - "convertToDiffusersHelpText5": "十分なディスク空き容量があることを確認してください。モデルは一般的に2GBから7GBのサイズがあります。", - "modelConversionFailed": "モデル変換が失敗しました", - "modelEntryDeleted": "モデルエントリーが削除されました", - "syncModels": "モデルを同期", - "mergedModelSaveLocation": "保存場所", - "closeAdvanced": "高度な設定を閉じる", - "modelType": "モデルタイプ", - "modelsMerged": "モデルマージ完了", - "modelsMergeFailed": "モデルマージ失敗", - "scanForModels": "モデルをスキャン", - "customConfigFileLocation": "カスタム設定ファイルの場所", - "convertToDiffusersHelpText1": "このモデルは 🧨 Diffusers フォーマットに変換されます。", - "modelsSynced": "モデルが同期されました", - "invokeRoot": "InvokeAIフォルダ", - "mergedModelCustomSaveLocation": "カスタムパス", - "mergeModels": "マージモデル", - "interpolationType": "補間タイプ", - "modelMergeHeaderHelp2": "マージできるのはDiffusersのみです。チェックポイントモデルをマージしたい場合は、まずDiffusersに変換してください。", - "convertToDiffusersSaveLocation": "保存場所", - "pickModelType": "モデルタイプを選択", - "sameFolder": "同じフォルダ", - "convertToDiffusersHelpText3": "チェックポイントファイルは、InvokeAIルートフォルダ内にある場合、ディスクから削除されます。カスタムロケーションにある場合は、削除されません。", - "loraModels": "LoRA", - "modelMergeAlphaHelp": "アルファはモデルのブレンド強度を制御します。アルファ値が低いと、2番目のモデルの影響が低くなります。", - "addDifference": "差分を追加", - "modelMergeHeaderHelp1": "あなたのニーズに適したブレンドを作成するために、異なるモデルを最大3つまでマージすることができます。", - "ignoreMismatch": "選択されたモデル間の不一致を無視する", - "convertToDiffusersHelpText4": "これは一回限りのプロセスです。コンピュータの仕様によっては、約30秒から60秒かかる可能性があります。", - "mergedModelName": "マージされたモデル名" - }, - "parameters": { - "images": "画像", - "steps": "ステップ数", - "width": "幅", - "height": "高さ", - "seed": "シード値", - "randomizeSeed": "ランダムなシード値", - "shuffle": "シャッフル", - "seedWeights": "シード値の重み", - "faceRestoration": "顔の修復", - "restoreFaces": "顔の修復", - "strength": "強度", - "upscaling": "アップスケーリング", - "upscale": "アップスケール", - "upscaleImage": "画像をアップスケール", - "scale": "Scale", - "otherOptions": "その他のオプション", - "scaleBeforeProcessing": "処理前のスケール", - "scaledWidth": "幅のスケール", - "scaledHeight": "高さのスケール", - "boundingBoxHeader": "バウンディングボックス", - "img2imgStrength": "Image To Imageの強度", - "sendTo": "転送", - "sendToImg2Img": "Image to Imageに転送", - "sendToUnifiedCanvas": "Unified Canvasに転送", - "downloadImage": "画像をダウンロード", - "openInViewer": "ビュワーを開く", - "closeViewer": "ビュワーを閉じる", - "usePrompt": "プロンプトを使用", - "useSeed": "シード値を使用", - "useAll": "すべてを使用", - "info": "情報", - "showOptionsPanel": "オプションパネルを表示", - "aspectRatioFree": "自由", - "invoke": { - "noControlImageForControlAdapter": "コントロールアダプター #{{number}} に画像がありません", - "noModelForControlAdapter": "コントロールアダプター #{{number}} のモデルが選択されていません。" - }, - "aspectRatio": "縦横比", - "iterations": "生成回数", - "general": "基本設定" - }, - "settings": { - "models": "モデル", - "displayInProgress": "生成中の画像を表示する", - "saveSteps": "nステップごとに画像を保存", - "confirmOnDelete": "削除時に確認", - "displayHelpIcons": "ヘルプアイコンを表示", - "enableImageDebugging": "画像のデバッグを有効化", - "resetWebUI": "WebUIをリセット", - "resetWebUIDesc1": "WebUIのリセットは、画像と保存された設定のキャッシュをリセットするだけです。画像を削除するわけではありません。", - "resetWebUIDesc2": "もしギャラリーに画像が表示されないなど、何か問題が発生した場合はGitHubにissueを提出する前にリセットを試してください。", - "resetComplete": "WebUIはリセットされました。F5を押して再読み込みしてください。" - }, - "toast": { - "uploadFailed": "アップロード失敗", - "uploadFailedUnableToLoadDesc": "ファイルを読み込むことができません。", - "downloadImageStarted": "画像ダウンロード開始", - "imageCopied": "画像をコピー", - "imageLinkCopied": "画像のURLをコピー", - "imageNotLoaded": "画像を読み込めません。", - "imageNotLoadedDesc": "Image To Imageに転送する画像が見つかりません。", - "imageSavedToGallery": "画像をギャラリーに保存する", - "canvasMerged": "Canvas Merged", - "sentToImageToImage": "Image To Imageに転送", - "sentToUnifiedCanvas": "Unified Canvasに転送", - "parametersNotSetDesc": "この画像にはメタデータがありません。", - "parametersFailed": "パラメータ読み込みの不具合", - "parametersFailedDesc": "initイメージを読み込めません。", - "seedNotSetDesc": "この画像のシード値が見つかりません。", - "promptNotSetDesc": "この画像のプロンプトが見つかりませんでした。", - "upscalingFailed": "アップスケーリング失敗", - "faceRestoreFailed": "顔の修復に失敗", - "metadataLoadFailed": "メタデータの読み込みに失敗。" - }, - "tooltip": { - "feature": { - "prompt": "これはプロンプトフィールドです。プロンプトには生成オブジェクトや文法用語が含まれます。プロンプトにも重み(Tokenの重要度)を付けることができますが、CLIコマンドやパラメータは機能しません。", - "gallery": "ギャラリーは、出力先フォルダから生成物を表示します。設定はファイル内に保存され、コンテキストメニューからアクセスできます。.", - "seed": "シード値は、画像が形成される際の初期ノイズに影響します。以前の画像から既に存在するシードを使用することができます。ノイズしきい値は高いCFG値でのアーティファクトを軽減するために使用され、Perlinは生成中にPerlinノイズを追加します(0-10の範囲を試してみてください): どちらも出力にバリエーションを追加するのに役立ちます。", - "variations": "0.1から1.0の間の値で試し、付与されたシードに対する結果を変えてみてください。面白いバリュエーションは0.1〜0.3の間です。", - "upscale": "生成直後の画像をアップスケールするには、ESRGANを使用します。", - "faceCorrection": "GFPGANまたはCodeformerによる顔の修復: 画像内の顔を検出し不具合を修正するアルゴリズムです。高い値を設定すると画像がより変化し、より魅力的な顔になります。Codeformerは顔の修復を犠牲にして、元の画像をできる限り保持します。", - "imageToImage": "Image To Imageは任意の画像を初期値として読み込み、プロンプトとともに新しい画像を生成するために使用されます。値が高いほど結果画像はより変化します。0.0から1.0までの値が可能で、推奨範囲は0.25から0.75です。", - "boundingBox": "バウンディングボックスは、Text To ImageまたはImage To Imageの幅/高さの設定と同じです。ボックス内の領域のみが処理されます。", - "seamCorrection": "キャンバス上の生成された画像間に発生する可視可能な境界の処理を制御します。" - } - }, - "unifiedCanvas": { - "mask": "マスク", - "maskingOptions": "マスクのオプション", - "enableMask": "マスクを有効化", - "preserveMaskedArea": "マスク領域の保存", - "clearMask": "マスクを解除", - "brush": "ブラシ", - "eraser": "消しゴム", - "fillBoundingBox": "バウンディングボックスの塗りつぶし", - "eraseBoundingBox": "バウンディングボックスの消去", - "colorPicker": "カラーピッカー", - "brushOptions": "ブラシオプション", - "brushSize": "サイズ", - "saveToGallery": "ギャラリーに保存", - "copyToClipboard": "クリップボードにコピー", - "downloadAsImage": "画像としてダウンロード", - "undo": "取り消し", - "redo": "やり直し", - "clearCanvas": "キャンバスを片付ける", - "canvasSettings": "キャンバスの設定", - "showGrid": "グリッドを表示", - "darkenOutsideSelection": "外周を暗くする", - "autoSaveToGallery": "ギャラリーに自動保存", - "saveBoxRegionOnly": "ボックス領域のみ保存", - "showCanvasDebugInfo": "キャンバスのデバッグ情報を表示", - "clearCanvasHistory": "キャンバスの履歴を削除", - "clearHistory": "履歴を削除", - "clearCanvasHistoryMessage": "履歴を消去すると現在のキャンバスは残りますが、取り消しややり直しの履歴は不可逆的に消去されます。", - "clearCanvasHistoryConfirm": "履歴を削除しますか?", - "emptyTempImageFolder": "Empty Temp Image Folde", - "emptyFolder": "空のフォルダ", - "emptyTempImagesFolderMessage": "一時フォルダを空にすると、Unified Canvasも完全にリセットされます。これには、すべての取り消し/やり直しの履歴、ステージング領域の画像、およびキャンバスのベースレイヤーが含まれます。", - "emptyTempImagesFolderConfirm": "一時フォルダを削除しますか?", - "activeLayer": "Active Layer", - "canvasScale": "Canvas Scale", - "boundingBox": "バウンディングボックス", - "boundingBoxPosition": "バウンディングボックスの位置", - "canvasDimensions": "キャンバスの大きさ", - "canvasPosition": "キャンバスの位置", - "cursorPosition": "カーソルの位置", - "previous": "前", - "next": "次", - "accept": "同意", - "showHide": "表示/非表示", - "discardAll": "すべて破棄", - "snapToGrid": "グリッドにスナップ" - }, - "accessibility": { - "modelSelect": "モデルを選択", - "invokeProgressBar": "進捗バー", - "reset": "リセット", - "uploadImage": "画像をアップロード", - "previousImage": "前の画像", - "nextImage": "次の画像", - "useThisParameter": "このパラメータを使用する", - "copyMetadataJson": "メタデータをコピー(JSON)", - "zoomIn": "ズームイン", - "exitViewer": "ビューアーを終了", - "zoomOut": "ズームアウト", - "rotateCounterClockwise": "反時計回りに回転", - "rotateClockwise": "時計回りに回転", - "flipHorizontally": "水平方向に反転", - "flipVertically": "垂直方向に反転", - "toggleAutoscroll": "自動スクロールの切替", - "modifyConfig": "Modify Config", - "toggleLogViewer": "Log Viewerの切替", - "showOptionsPanel": "サイドパネルを表示", - "showGalleryPanel": "ギャラリーパネルを表示", - "menu": "メニュー", - "loadMore": "さらに読み込む" - }, - "controlnet": { - "resize": "リサイズ", - "showAdvanced": "高度な設定を表示", - "addT2IAdapter": "$t(common.t2iAdapter)を追加", - "importImageFromCanvas": "キャンバスから画像をインポート", - "lineartDescription": "画像を線画に変換", - "importMaskFromCanvas": "キャンバスからマスクをインポート", - "hideAdvanced": "高度な設定を非表示", - "ipAdapterModel": "アダプターモデル", - "resetControlImage": "コントロール画像をリセット", - "beginEndStepPercent": "開始 / 終了ステップパーセンテージ", - "duplicate": "複製", - "balanced": "バランス", - "prompt": "プロンプト", - "depthMidasDescription": "Midasを使用して深度マップを生成", - "openPoseDescription": "Openposeを使用してポーズを推定", - "control": "コントロール", - "resizeMode": "リサイズモード", - "weight": "重み", - "selectModel": "モデルを選択", - "crop": "切り抜き", - "w": "幅", - "processor": "プロセッサー", - "addControlNet": "$t(common.controlNet)を追加", - "none": "なし", - "incompatibleBaseModel": "互換性のないベースモデル:", - "enableControlnet": "コントロールネットを有効化", - "detectResolution": "検出解像度", - "controlNetT2IMutexDesc": "$t(common.controlNet)と$t(common.t2iAdapter)の同時使用は現在サポートされていません。", - "pidiDescription": "PIDI画像処理", - "controlMode": "コントロールモード", - "fill": "塗りつぶし", - "cannyDescription": "Canny 境界検出", - "addIPAdapter": "$t(common.ipAdapter)を追加", - "colorMapDescription": "画像からカラーマップを生成", - "lineartAnimeDescription": "アニメスタイルの線画処理", - "imageResolution": "画像解像度", - "megaControl": "メガコントロール", - "lowThreshold": "最低閾値", - "autoConfigure": "プロセッサーを自動設定", - "highThreshold": "最大閾値", - "saveControlImage": "コントロール画像を保存", - "toggleControlNet": "このコントロールネットを切り替え", - "delete": "削除", - "controlAdapter_other": "コントロールアダプター", - "colorMapTileSize": "タイルサイズ", - "ipAdapterImageFallback": "IPアダプターの画像が選択されていません", - "mediapipeFaceDescription": "Mediapipeを使用して顔を検出", - "depthZoeDescription": "Zoeを使用して深度マップを生成", - "setControlImageDimensions": "コントロール画像のサイズを幅と高さにセット", - "resetIPAdapterImage": "IP Adapterの画像をリセット", - "handAndFace": "手と顔", - "enableIPAdapter": "IP Adapterを有効化", - "amult": "a_mult", - "contentShuffleDescription": "画像の内容をシャッフルします", - "bgth": "bg_th", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) が有効化され、$t(common.t2iAdapter)s が無効化されました", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) が有効化され、$t(common.controlNet)s が無効化されました", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "minConfidence": "最小確信度", - "colorMap": "Color", - "noneDescription": "処理は行われていません", - "canny": "Canny", - "hedDescription": "階層的エッジ検出", - "maxFaces": "顔の最大数" - }, - "metadata": { - "seamless": "シームレス", - "Threshold": "ノイズ閾値", - "seed": "シード", - "width": "幅", - "workflow": "ワークフロー", - "steps": "ステップ", - "scheduler": "スケジューラー", - "positivePrompt": "ポジティブプロンプト", - "strength": "Image to Image 強度", - "perlin": "パーリンノイズ", - "recallParameters": "パラメータを呼び出す" - }, - "queue": { - "queueEmpty": "キューが空です", - "pauseSucceeded": "処理が一時停止されました", - "queueFront": "キューの先頭へ追加", - "queueBack": "キューに追加", - "queueCountPrediction": "{{predicted}}をキューに追加", - "queuedCount": "保留中 {{pending}}", - "pause": "一時停止", - "queue": "キュー", - "pauseTooltip": "処理を一時停止", - "cancel": "キャンセル", - "queueTotal": "合計 {{total}}", - "resumeSucceeded": "処理が再開されました", - "resumeTooltip": "処理を再開", - "resume": "再開", - "status": "ステータス", - "pruneSucceeded": "キューから完了アイテム{{item_count}}件を削除しました", - "cancelTooltip": "現在のアイテムをキャンセル", - "in_progress": "進行中", - "notReady": "キューに追加できません", - "batchFailedToQueue": "バッチをキューに追加できませんでした", - "completed": "完了", - "batchValues": "バッチの値", - "cancelFailed": "アイテムのキャンセルに問題があります", - "batchQueued": "バッチをキューに追加しました", - "pauseFailed": "処理の一時停止に問題があります", - "clearFailed": "キューのクリアに問題があります", - "front": "先頭", - "clearSucceeded": "キューがクリアされました", - "pruneTooltip": "{{item_count}} の完了アイテムを削除", - "cancelSucceeded": "アイテムがキャンセルされました", - "batchQueuedDesc_other": "{{count}} セッションをキューの{{direction}}に追加しました", - "graphQueued": "グラフをキューに追加しました", - "batch": "バッチ", - "clearQueueAlertDialog": "キューをクリアすると、処理中のアイテムは直ちにキャンセルされ、キューは完全にクリアされます。", - "pending": "保留中", - "resumeFailed": "処理の再開に問題があります", - "clear": "クリア", - "total": "合計", - "canceled": "キャンセル", - "pruneFailed": "キューの削除に問題があります", - "cancelBatchSucceeded": "バッチがキャンセルされました", - "clearTooltip": "全てのアイテムをキャンセルしてクリア", - "current": "現在", - "failed": "失敗", - "cancelItem": "項目をキャンセル", - "next": "次", - "cancelBatch": "バッチをキャンセル", - "session": "セッション", - "enqueueing": "バッチをキューに追加", - "queueMaxExceeded": "{{max_queue_size}} の最大値を超えたため、{{skip}} をスキップします", - "cancelBatchFailed": "バッチのキャンセルに問題があります", - "clearQueueAlertDialog2": "キューをクリアしてもよろしいですか?", - "item": "アイテム", - "graphFailedToQueue": "グラフをキューに追加できませんでした" - }, - "models": { - "noMatchingModels": "一致するモデルがありません", - "loading": "読み込み中", - "noMatchingLoRAs": "一致するLoRAがありません", - "noLoRAsAvailable": "使用可能なLoRAがありません", - "noModelsAvailable": "使用可能なモデルがありません", - "selectModel": "モデルを選択してください", - "selectLoRA": "LoRAを選択してください" - }, - "nodes": { - "addNode": "ノードを追加", - "boardField": "ボード", - "boolean": "ブーリアン", - "boardFieldDescription": "ギャラリーボード", - "addNodeToolTip": "ノードを追加 (Shift+A, Space)", - "booleanPolymorphicDescription": "ブーリアンのコレクション。", - "inputField": "入力フィールド", - "latentsFieldDescription": "潜在空間はノード間で伝達できます。", - "floatCollectionDescription": "浮動小数点のコレクション。", - "missingTemplate": "テンプレートが見つかりません", - "ipAdapterPolymorphicDescription": "IP-Adaptersのコレクション。", - "latentsPolymorphicDescription": "潜在空間はノード間で伝達できます。", - "colorFieldDescription": "RGBAカラー。", - "ipAdapterCollection": "IP-Adapterコレクション", - "conditioningCollection": "条件付きコレクション", - "hideGraphNodes": "グラフオーバーレイを非表示", - "loadWorkflow": "ワークフローを読み込み", - "integerPolymorphicDescription": "整数のコレクション。", - "hideLegendNodes": "フィールドタイプの凡例を非表示", - "float": "浮動小数点", - "booleanCollectionDescription": "ブーリアンのコレクション。", - "integer": "整数", - "colorField": "カラー", - "nodeTemplate": "ノードテンプレート", - "integerDescription": "整数は小数点を持たない数値です。", - "imagePolymorphicDescription": "画像のコレクション。", - "doesNotExist": "存在しません", - "ipAdapterCollectionDescription": "IP-Adaptersのコレクション。", - "inputMayOnlyHaveOneConnection": "入力は1つの接続しか持つことができません", - "nodeOutputs": "ノード出力", - "currentImageDescription": "ノードエディタ内の現在の画像を表示", - "downloadWorkflow": "ワークフローのJSONをダウンロード", - "integerCollection": "整数コレクション", - "collectionItem": "コレクションアイテム", - "fieldTypesMustMatch": "フィールドタイプが一致している必要があります", - "edge": "輪郭", - "inputNode": "入力ノード", - "imageField": "画像", - "animatedEdgesHelp": "選択したエッジおよび選択したノードに接続されたエッジをアニメーション化します", - "cannotDuplicateConnection": "重複した接続は作れません", - "noWorkflow": "ワークフローがありません", - "integerCollectionDescription": "整数のコレクション。", - "colorPolymorphicDescription": "カラーのコレクション。", - "missingCanvaInitImage": "キャンバスの初期画像が見つかりません", - "clipFieldDescription": "トークナイザーとテキストエンコーダーサブモデル。", - "fullyContainNodesHelp": "ノードは選択ボックス内に完全に存在する必要があります", - "clipField": "クリップ", - "nodeType": "ノードタイプ", - "executionStateInProgress": "処理中", - "executionStateError": "エラー", - "ipAdapterModel": "IP-Adapterモデル", - "ipAdapterDescription": "イメージプロンプトアダプター(IP-Adapter)。", - "missingCanvaInitMaskImages": "キャンバスの初期画像およびマスクが見つかりません", - "hideMinimapnodes": "ミニマップを非表示", - "fitViewportNodes": "全体を表示", - "executionStateCompleted": "完了", - "node": "ノード", - "currentImage": "現在の画像", - "controlField": "コントロール", - "booleanDescription": "ブーリアンはtrueかfalseです。", - "collection": "コレクション", - "ipAdapterModelDescription": "IP-Adapterモデルフィールド", - "cannotConnectInputToInput": "入力から入力には接続できません", - "invalidOutputSchema": "無効な出力スキーマ", - "floatDescription": "浮動小数点は、小数点を持つ数値です。", - "floatPolymorphicDescription": "浮動小数点のコレクション。", - "floatCollection": "浮動小数点コレクション", - "latentsField": "潜在空間", - "cannotConnectOutputToOutput": "出力から出力には接続できません", - "booleanCollection": "ブーリアンコレクション", - "cannotConnectToSelf": "自身のノードには接続できません", - "inputFields": "入力フィールド(複数)", - "colorCodeEdges": "カラー-Code Edges", - "imageCollectionDescription": "画像のコレクション。", - "loadingNodes": "ノードを読み込み中...", - "imageCollection": "画像コレクション" - }, - "boards": { - "autoAddBoard": "自動追加するボード", - "move": "移動", - "menuItemAutoAdd": "このボードに自動追加", - "myBoard": "マイボード", - "searchBoard": "ボードを検索...", - "noMatching": "一致するボードがありません", - "selectBoard": "ボードを選択", - "cancel": "キャンセル", - "addBoard": "ボードを追加", - "uncategorized": "未分類", - "downloadBoard": "ボードをダウンロード", - "changeBoard": "ボードを変更", - "loading": "ロード中...", - "topMessage": "このボードには、以下の機能で使用されている画像が含まれています:", - "bottomMessage": "このボードおよび画像を削除すると、現在これらを利用している機能はリセットされます。", - "clearSearch": "検索をクリア" - }, - "embedding": { - "noMatchingEmbedding": "一致する埋め込みがありません", - "addEmbedding": "埋め込みを追加", - "incompatibleModel": "互換性のないベースモデル:" - }, - "invocationCache": { - "invocationCache": "呼び出しキャッシュ", - "clearSucceeded": "呼び出しキャッシュをクリアしました", - "clearFailed": "呼び出しキャッシュのクリアに問題があります", - "enable": "有効", - "clear": "クリア", - "maxCacheSize": "最大キャッシュサイズ", - "cacheSize": "キャッシュサイズ" - }, - "popovers": { - "paramRatio": { - "heading": "縦横比", - "paragraphs": [ - "生成された画像の縦横比。" - ] - } - } -} diff --git a/invokeai/frontend/web/dist/locales/ko.json b/invokeai/frontend/web/dist/locales/ko.json deleted file mode 100644 index e5283f4113..0000000000 --- a/invokeai/frontend/web/dist/locales/ko.json +++ /dev/null @@ -1,920 +0,0 @@ -{ - "common": { - "languagePickerLabel": "언어 설정", - "reportBugLabel": "버그 리포트", - "githubLabel": "Github", - "settingsLabel": "설정", - "langArabic": "العربية", - "langEnglish": "English", - "langDutch": "Nederlands", - "unifiedCanvas": "통합 캔버스", - "langFrench": "Français", - "langGerman": "Deutsch", - "langItalian": "Italiano", - "langJapanese": "日本語", - "langBrPortuguese": "Português do Brasil", - "langRussian": "Русский", - "langSpanish": "Español", - "nodes": "Workflow Editor", - "nodesDesc": "이미지 생성을 위한 노드 기반 시스템은 현재 개발 중입니다. 이 놀라운 기능에 대한 업데이트를 계속 지켜봐 주세요.", - "postProcessing": "후처리", - "postProcessDesc2": "보다 진보된 후처리 작업을 위한 전용 UI가 곧 출시될 예정입니다.", - "postProcessDesc3": "Invoke AI CLI는 Embiggen을 비롯한 다양한 기능을 제공합니다.", - "training": "학습", - "trainingDesc1": "Textual Inversion과 Dreambooth를 이용해 Web UI에서 나만의 embedding 및 checkpoint를 교육하기 위한 전용 워크플로우입니다.", - "trainingDesc2": "InvokeAI는 이미 메인 스크립트를 사용한 Textual Inversion를 이용한 Custom embedding 학습을 지원하고 있습니다.", - "upload": "업로드", - "close": "닫기", - "load": "불러오기", - "back": "뒤로 가기", - "statusConnected": "연결됨", - "statusDisconnected": "연결 끊김", - "statusError": "에러", - "statusPreparing": "준비 중", - "langSimplifiedChinese": "简体中文", - "statusGenerating": "생성 중", - "statusGeneratingTextToImage": "텍스트->이미지 생성", - "statusGeneratingInpainting": "인페인팅 생성", - "statusGeneratingOutpainting": "아웃페인팅 생성", - "statusGenerationComplete": "생성 완료", - "statusRestoringFaces": "얼굴 복원", - "statusRestoringFacesGFPGAN": "얼굴 복원 (GFPGAN)", - "statusRestoringFacesCodeFormer": "얼굴 복원 (CodeFormer)", - "statusUpscaling": "업스케일링", - "statusUpscalingESRGAN": "업스케일링 (ESRGAN)", - "statusLoadingModel": "모델 로딩중", - "statusModelChanged": "모델 변경됨", - "statusConvertingModel": "모델 컨버팅", - "statusModelConverted": "모델 컨버팅됨", - "statusMergedModels": "모델 병합됨", - "statusMergingModels": "모델 병합중", - "hotkeysLabel": "단축키 설정", - "img2img": "이미지->이미지", - "discordLabel": "Discord", - "langPolish": "Polski", - "postProcessDesc1": "Invoke AI는 다양한 후처리 기능을 제공합니다. 이미지 업스케일링 및 얼굴 복원은 이미 Web UI에서 사용할 수 있습니다. 텍스트->이미지 또는 이미지->이미지 탭의 고급 옵션 메뉴에서 사용할 수 있습니다. 또한 현재 이미지 표시 위, 또는 뷰어에서 액션 버튼을 사용하여 이미지를 직접 처리할 수도 있습니다.", - "langUkranian": "Украї́нська", - "statusProcessingCanceled": "처리 취소됨", - "statusGeneratingImageToImage": "이미지->이미지 생성", - "statusProcessingComplete": "처리 완료", - "statusIterationComplete": "반복(Iteration) 완료", - "statusSavingImage": "이미지 저장", - "t2iAdapter": "T2I 어댑터", - "communityLabel": "커뮤니티", - "txt2img": "텍스트->이미지", - "dontAskMeAgain": "다시 묻지 마세요", - "loadingInvokeAI": "Invoke AI 불러오는 중", - "checkpoint": "체크포인트", - "format": "형식", - "unknown": "알려지지 않음", - "areYouSure": "확실하나요?", - "folder": "폴더", - "inpaint": "inpaint", - "updated": "업데이트 됨", - "on": "켜기", - "save": "저장", - "langPortuguese": "Português", - "created": "생성됨", - "nodeEditor": "Node Editor", - "error": "에러", - "prevPage": "이전 페이지", - "ipAdapter": "IP 어댑터", - "controlAdapter": "제어 어댑터", - "installed": "설치됨", - "accept": "수락", - "ai": "인공지능", - "auto": "자동", - "file": "파일", - "openInNewTab": "새 탭에서 열기", - "delete": "삭제", - "template": "템플릿", - "cancel": "취소", - "controlNet": "컨트롤넷", - "outputs": "결과물", - "unknownError": "알려지지 않은 에러", - "statusProcessing": "처리 중", - "linear": "선형", - "imageFailedToLoad": "이미지를 로드할 수 없음", - "direction": "방향", - "data": "데이터", - "somethingWentWrong": "뭔가 잘못됐어요", - "imagePrompt": "이미지 프롬프트", - "modelManager": "Model Manager", - "lightMode": "라이트 모드", - "safetensors": "Safetensors", - "outpaint": "outpaint", - "langKorean": "한국어", - "orderBy": "정렬 기준", - "generate": "생성", - "copyError": "$t(gallery.copy) 에러", - "learnMore": "더 알아보기", - "nextPage": "다음 페이지", - "saveAs": "다른 이름으로 저장", - "darkMode": "다크 모드", - "loading": "불러오는 중", - "random": "랜덤", - "langHebrew": "Hebrew", - "batch": "Batch 매니저", - "postprocessing": "후처리", - "advanced": "고급", - "unsaved": "저장되지 않음", - "input": "입력", - "details": "세부사항", - "notInstalled": "설치되지 않음" - }, - "gallery": { - "showGenerations": "생성된 이미지 보기", - "generations": "생성된 이미지", - "uploads": "업로드된 이미지", - "showUploads": "업로드된 이미지 보기", - "galleryImageSize": "이미지 크기", - "galleryImageResetSize": "사이즈 리셋", - "gallerySettings": "갤러리 설정", - "maintainAspectRatio": "종횡비 유지", - "deleteSelection": "선택 항목 삭제", - "featuresWillReset": "이 이미지를 삭제하면 해당 기능이 즉시 재설정됩니다.", - "deleteImageBin": "삭제된 이미지는 운영 체제의 Bin으로 전송됩니다.", - "assets": "자산", - "problemDeletingImagesDesc": "하나 이상의 이미지를 삭제할 수 없습니다", - "noImagesInGallery": "보여줄 이미지가 없음", - "autoSwitchNewImages": "새로운 이미지로 자동 전환", - "loading": "불러오는 중", - "unableToLoad": "갤러리를 로드할 수 없음", - "preparingDownload": "다운로드 준비", - "preparingDownloadFailed": "다운로드 준비 중 발생한 문제", - "singleColumnLayout": "단일 열 레이아웃", - "image": "이미지", - "loadMore": "더 불러오기", - "drop": "드랍", - "problemDeletingImages": "이미지 삭제 중 발생한 문제", - "downloadSelection": "선택 항목 다운로드", - "deleteImage": "이미지 삭제", - "currentlyInUse": "이 이미지는 현재 다음 기능에서 사용되고 있습니다:", - "allImagesLoaded": "불러온 모든 이미지", - "dropOrUpload": "$t(gallery.drop) 또는 업로드", - "copy": "복사", - "download": "다운로드", - "deleteImagePermanent": "삭제된 이미지는 복원할 수 없습니다.", - "noImageSelected": "선택된 이미지 없음", - "autoAssignBoardOnClick": "클릭 시 Board로 자동 할당", - "setCurrentImage": "현재 이미지로 설정", - "dropToUpload": "업로드를 위해 $t(gallery.drop)" - }, - "unifiedCanvas": { - "betaPreserveMasked": "마스크 레이어 유지" - }, - "accessibility": { - "previousImage": "이전 이미지", - "modifyConfig": "Config 수정", - "nextImage": "다음 이미지", - "mode": "모드", - "menu": "메뉴", - "modelSelect": "모델 선택", - "zoomIn": "확대하기", - "rotateClockwise": "시계방향으로 회전", - "uploadImage": "이미지 업로드", - "showGalleryPanel": "갤러리 패널 표시", - "useThisParameter": "해당 변수 사용", - "reset": "리셋", - "loadMore": "더 불러오기", - "zoomOut": "축소하기", - "rotateCounterClockwise": "반시계방향으로 회전", - "showOptionsPanel": "사이드 패널 표시", - "toggleAutoscroll": "자동 스크롤 전환", - "toggleLogViewer": "Log Viewer 전환" - }, - "modelManager": { - "pathToCustomConfig": "사용자 지정 구성 경로", - "importModels": "모델 가져오기", - "availableModels": "사용 가능한 모델", - "conversionNotSupported": "변환이 지원되지 않음", - "noCustomLocationProvided": "사용자 지정 위치가 제공되지 않음", - "onnxModels": "Onnx", - "vaeRepoID": "VAE Repo ID", - "modelExists": "모델 존재", - "custom": "사용자 지정", - "addModel": "모델 추가", - "none": "없음", - "modelConverted": "변환된 모델", - "width": "너비", - "weightedSum": "가중합", - "inverseSigmoid": "Inverse Sigmoid", - "invokeAIFolder": "Invoke AI 폴더", - "syncModelsDesc": "모델이 백엔드와 동기화되지 않은 경우 이 옵션을 사용하여 새로 고침할 수 있습니다. 이는 일반적으로 응용 프로그램이 부팅된 후 수동으로 모델.yaml 파일을 업데이트하거나 InvokeAI root 폴더에 모델을 추가하는 경우에 유용합니다.", - "convert": "변환", - "vae": "VAE", - "noModels": "모델을 찾을 수 없음", - "statusConverting": "변환중", - "sigmoid": "Sigmoid", - "deleteModel": "모델 삭제", - "modelLocation": "모델 위치", - "merge": "병합", - "v1": "v1", - "description": "Description", - "modelMergeInterpAddDifferenceHelp": "이 모드에서 모델 3은 먼저 모델 2에서 차감됩니다. 결과 버전은 위에 설정된 Alpha 비율로 모델 1과 혼합됩니다.", - "customConfig": "사용자 지정 구성", - "cannotUseSpaces": "공백을 사용할 수 없음", - "formMessageDiffusersModelLocationDesc": "적어도 하나 이상 입력해 주세요.", - "addDiffuserModel": "Diffusers 추가", - "search": "검색", - "predictionType": "예측 유형(안정 확산 2.x 모델 및 간혹 안정 확산 1.x 모델의 경우)", - "widthValidationMsg": "모형의 기본 너비.", - "selectAll": "모두 선택", - "vaeLocation": "VAE 위치", - "selectModel": "모델 선택", - "modelAdded": "추가된 모델", - "repo_id": "Repo ID", - "modelSyncFailed": "모델 동기화 실패", - "convertToDiffusersHelpText6": "이 모델을 변환하시겠습니까?", - "config": "구성", - "quickAdd": "빠른 추가", - "selected": "선택된", - "modelTwo": "모델 2", - "simpleModelDesc": "로컬 Difffusers 모델, 로컬 체크포인트/안전 센서 모델 HuggingFace Repo ID 또는 체크포인트/Diffusers 모델 URL의 경로를 제공합니다.", - "customSaveLocation": "사용자 정의 저장 위치", - "advanced": "고급", - "modelsFound": "발견된 모델", - "load": "불러오기", - "height": "높이", - "modelDeleted": "삭제된 모델", - "inpainting": "v1 Inpainting", - "vaeLocationValidationMsg": "VAE가 있는 경로.", - "convertToDiffusersHelpText2": "이 프로세스는 모델 관리자 항목을 동일한 모델의 Diffusers 버전으로 대체합니다.", - "modelUpdateFailed": "모델 업데이트 실패", - "modelUpdated": "업데이트된 모델", - "noModelsFound": "모델을 찾을 수 없음", - "useCustomConfig": "사용자 지정 구성 사용", - "formMessageDiffusersVAELocationDesc": "제공되지 않은 경우 호출AIA 파일을 위의 모델 위치 내에서 VAE 파일을 찾습니다.", - "formMessageDiffusersVAELocation": "VAE 위치", - "checkpointModels": "Checkpoints", - "modelOne": "모델 1", - "settings": "설정", - "heightValidationMsg": "모델의 기본 높이입니다.", - "selectAndAdd": "아래 나열된 모델 선택 및 추가", - "convertToDiffusersHelpText5": "디스크 공간이 충분한지 확인해 주세요. 모델은 일반적으로 2GB에서 7GB 사이로 다양합니다.", - "deleteConfig": "구성 삭제", - "deselectAll": "모두 선택 취소", - "modelConversionFailed": "모델 변환 실패", - "clearCheckpointFolder": "Checkpoint Folder 지우기", - "modelEntryDeleted": "모델 항목 삭제", - "deleteMsg1": "InvokeAI에서 이 모델을 삭제하시겠습니까?", - "syncModels": "동기화 모델", - "mergedModelSaveLocation": "위치 저장", - "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", - "modelType": "모델 유형", - "nameValidationMsg": "모델 이름 입력", - "cached": "cached", - "modelsMerged": "병합된 모델", - "formMessageDiffusersModelLocation": "Diffusers 모델 위치", - "modelsMergeFailed": "모델 병합 실패", - "convertingModelBegin": "모델 변환 중입니다. 잠시만 기다려 주십시오.", - "v2_base": "v2 (512px)", - "scanForModels": "모델 검색", - "modelLocationValidationMsg": "Diffusers 모델이 저장된 로컬 폴더의 경로 제공", - "name": "이름", - "selectFolder": "폴더 선택", - "updateModel": "모델 업데이트", - "addNewModel": "새로운 모델 추가", - "customConfigFileLocation": "사용자 지정 구성 파일 위치", - "descriptionValidationMsg": "모델에 대한 description 추가", - "safetensorModels": "SafeTensors", - "convertToDiffusersHelpText1": "이 모델은 🧨 Diffusers 형식으로 변환됩니다.", - "modelsSynced": "동기화된 모델", - "vaePrecision": "VAE 정밀도", - "invokeRoot": "InvokeAI 폴더", - "checkpointFolder": "Checkpoint Folder", - "mergedModelCustomSaveLocation": "사용자 지정 경로", - "mergeModels": "모델 병합", - "interpolationType": "Interpolation 타입", - "modelMergeHeaderHelp2": "Diffusers만 병합이 가능합니다. 체크포인트 모델 병합을 원하신다면 먼저 Diffusers로 변환해주세요.", - "convertToDiffusersSaveLocation": "위치 저장", - "deleteMsg2": "모델이 InvokeAI root 폴더에 있으면 디스크에서 모델이 삭제됩니다. 사용자 지정 위치를 사용하는 경우 모델이 디스크에서 삭제되지 않습니다.", - "oliveModels": "Olives", - "repoIDValidationMsg": "모델의 온라인 저장소", - "baseModel": "기본 모델", - "scanAgain": "다시 검색", - "pickModelType": "모델 유형 선택", - "sameFolder": "같은 폴더", - "addNew": "New 추가", - "manual": "매뉴얼", - "convertToDiffusersHelpText3": "디스크의 체크포인트 파일이 InvokeAI root 폴더에 있으면 삭제됩니다. 사용자 지정 위치에 있으면 삭제되지 않습니다.", - "addCheckpointModel": "체크포인트 / 안전 센서 모델 추가", - "configValidationMsg": "모델의 구성 파일에 대한 경로.", - "modelManager": "모델 매니저", - "variant": "Variant", - "vaeRepoIDValidationMsg": "VAE의 온라인 저장소", - "loraModels": "LoRAs", - "modelDeleteFailed": "모델을 삭제하지 못했습니다", - "convertToDiffusers": "Diffusers로 변환", - "allModels": "모든 모델", - "modelThree": "모델 3", - "findModels": "모델 찾기", - "notLoaded": "로드되지 않음", - "alpha": "Alpha", - "diffusersModels": "Diffusers", - "modelMergeAlphaHelp": "Alpha는 모델의 혼합 강도를 제어합니다. Alpha 값이 낮을수록 두 번째 모델의 영향력이 줄어듭니다.", - "addDifference": "Difference 추가", - "noModelSelected": "선택한 모델 없음", - "modelMergeHeaderHelp1": "최대 3개의 다른 모델을 병합하여 필요에 맞는 혼합물을 만들 수 있습니다.", - "ignoreMismatch": "선택한 모델 간의 불일치 무시", - "v2_768": "v2 (768px)", - "convertToDiffusersHelpText4": "이것은 한 번의 과정일 뿐입니다. 컴퓨터 사양에 따라 30-60초 정도 소요될 수 있습니다.", - "model": "모델", - "addManually": "Manually 추가", - "addSelected": "Selected 추가", - "mergedModelName": "병합된 모델 이름", - "delete": "삭제" - }, - "controlnet": { - "amult": "a_mult", - "resize": "크기 조정", - "showAdvanced": "고급 표시", - "contentShuffleDescription": "이미지에서 content 섞기", - "bgth": "bg_th", - "addT2IAdapter": "$t(common.t2iAdapter) 추가", - "pidi": "PIDI", - "importImageFromCanvas": "캔버스에서 이미지 가져오기", - "lineartDescription": "이미지->lineart 변환", - "normalBae": "Normal BAE", - "importMaskFromCanvas": "캔버스에서 Mask 가져오기", - "hed": "HED", - "contentShuffle": "Content Shuffle", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) 사용 가능, $t(common.t2iAdapter) 사용 불가능", - "ipAdapterModel": "Adapter 모델", - "resetControlImage": "Control Image 재설정", - "beginEndStepPercent": "Begin / End Step Percentage", - "mlsdDescription": "Minimalist Line Segment Detector", - "duplicate": "복제", - "balanced": "Balanced", - "f": "F", - "h": "H", - "prompt": "프롬프트", - "depthMidasDescription": "Midas를 사용하여 Depth map 생성하기", - "openPoseDescription": "Openpose를 이용한 사람 포즈 추정", - "control": "Control", - "resizeMode": "크기 조정 모드", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 사용 가능,$t(common.controlNet) 사용 불가능", - "coarse": "Coarse", - "weight": "Weight", - "selectModel": "모델 선택", - "crop": "Crop", - "depthMidas": "Depth (Midas)", - "w": "W", - "processor": "프로세서", - "addControlNet": "$t(common.controlNet) 추가", - "none": "해당없음", - "incompatibleBaseModel": "호환되지 않는 기본 모델:", - "enableControlnet": "사용 가능한 ControlNet", - "detectResolution": "해상도 탐지", - "controlNetT2IMutexDesc": "$t(common.controlNet)와 $t(common.t2iAdapter)는 현재 동시에 지원되지 않습니다.", - "pidiDescription": "PIDI image 처리", - "mediapipeFace": "Mediapipe Face", - "mlsd": "M-LSD", - "controlMode": "Control Mode", - "fill": "채우기", - "cannyDescription": "Canny 모서리 삭제", - "addIPAdapter": "$t(common.ipAdapter) 추가", - "lineart": "Lineart", - "colorMapDescription": "이미지에서 color map을 생성합니다", - "lineartAnimeDescription": "Anime-style lineart 처리", - "minConfidence": "Min Confidence", - "imageResolution": "이미지 해상도", - "megaControl": "Mega Control", - "depthZoe": "Depth (Zoe)", - "colorMap": "색", - "lowThreshold": "Low Threshold", - "autoConfigure": "프로세서 자동 구성", - "highThreshold": "High Threshold", - "normalBaeDescription": "Normal BAE 처리", - "noneDescription": "처리되지 않음", - "saveControlImage": "Control Image 저장", - "openPose": "Openpose", - "toggleControlNet": "해당 ControlNet으로 전환", - "delete": "삭제", - "controlAdapter_other": "Control Adapter(s)", - "safe": "Safe", - "colorMapTileSize": "타일 크기", - "lineartAnime": "Lineart Anime", - "ipAdapterImageFallback": "IP Adapter Image가 선택되지 않음", - "mediapipeFaceDescription": "Mediapipe를 사용하여 Face 탐지", - "canny": "Canny", - "depthZoeDescription": "Zoe를 사용하여 Depth map 생성하기", - "hedDescription": "Holistically-Nested 모서리 탐지", - "setControlImageDimensions": "Control Image Dimensions를 W/H로 설정", - "scribble": "scribble", - "resetIPAdapterImage": "IP Adapter Image 재설정", - "handAndFace": "Hand and Face", - "enableIPAdapter": "사용 가능한 IP Adapter", - "maxFaces": "Max Faces" - }, - "hotkeys": { - "toggleGalleryPin": { - "title": "Gallery Pin 전환", - "desc": "갤러리를 UI에 고정했다가 풉니다" - }, - "toggleSnap": { - "desc": "Snap을 Grid로 전환", - "title": "Snap 전환" - }, - "setSeed": { - "title": "시드 설정", - "desc": "현재 이미지의 시드 사용" - }, - "keyboardShortcuts": "키보드 바로 가기", - "decreaseGalleryThumbSize": { - "desc": "갤러리 미리 보기 크기 축소", - "title": "갤러리 이미지 크기 축소" - }, - "previousStagingImage": { - "title": "이전 스테이징 이미지", - "desc": "이전 스테이징 영역 이미지" - }, - "decreaseBrushSize": { - "title": "브러시 크기 줄이기", - "desc": "캔버스 브러시/지우개 크기 감소" - }, - "consoleToggle": { - "desc": "콘솔 열고 닫기", - "title": "콘솔 전환" - }, - "selectBrush": { - "desc": "캔버스 브러시를 선택", - "title": "브러시 선택" - }, - "upscale": { - "desc": "현재 이미지를 업스케일", - "title": "업스케일" - }, - "previousImage": { - "title": "이전 이미지", - "desc": "갤러리에 이전 이미지 표시" - }, - "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", - "toggleOptions": { - "desc": "옵션 패널을 열고 닫기", - "title": "옵션 전환" - }, - "selectEraser": { - "title": "지우개 선택", - "desc": "캔버스 지우개를 선택" - }, - "setPrompt": { - "title": "프롬프트 설정", - "desc": "현재 이미지의 프롬프트 사용" - }, - "acceptStagingImage": { - "desc": "현재 준비 영역 이미지 허용", - "title": "준비 이미지 허용" - }, - "resetView": { - "desc": "Canvas View 초기화", - "title": "View 초기화" - }, - "hideMask": { - "title": "Mask 숨김", - "desc": "mask 숨김/숨김 해제" - }, - "pinOptions": { - "title": "옵션 고정", - "desc": "옵션 패널을 고정" - }, - "toggleGallery": { - "desc": "gallery drawer 열기 및 닫기", - "title": "Gallery 전환" - }, - "quickToggleMove": { - "title": "빠른 토글 이동", - "desc": "일시적으로 이동 모드 전환" - }, - "generalHotkeys": "General Hotkeys", - "showHideBoundingBox": { - "desc": "bounding box 표시 전환", - "title": "Bounding box 표시/숨김" - }, - "showInfo": { - "desc": "현재 이미지의 metadata 정보 표시", - "title": "정보 표시" - }, - "copyToClipboard": { - "title": "클립보드로 복사", - "desc": "현재 캔버스를 클립보드로 복사" - }, - "restoreFaces": { - "title": "Faces 복원", - "desc": "현재 이미지 복원" - }, - "fillBoundingBox": { - "title": "Bounding Box 채우기", - "desc": "bounding box를 브러시 색으로 채웁니다" - }, - "closePanels": { - "desc": "열린 panels 닫기", - "title": "panels 닫기" - }, - "downloadImage": { - "desc": "현재 캔버스 다운로드", - "title": "이미지 다운로드" - }, - "setParameters": { - "title": "매개 변수 설정", - "desc": "현재 이미지의 모든 매개 변수 사용" - }, - "maximizeWorkSpace": { - "desc": "패널을 닫고 작업 면적을 극대화", - "title": "작업 공간 극대화" - }, - "galleryHotkeys": "Gallery Hotkeys", - "cancel": { - "desc": "이미지 생성 취소", - "title": "취소" - }, - "saveToGallery": { - "title": "갤러리에 저장", - "desc": "현재 캔버스를 갤러리에 저장" - }, - "eraseBoundingBox": { - "desc": "bounding box 영역을 지웁니다", - "title": "Bounding Box 지우기" - }, - "nextImage": { - "title": "다음 이미지", - "desc": "갤러리에 다음 이미지 표시" - }, - "colorPicker": { - "desc": "canvas color picker 선택", - "title": "Color Picker 선택" - }, - "invoke": { - "desc": "이미지 생성", - "title": "불러오기" - }, - "sendToImageToImage": { - "desc": "현재 이미지를 이미지로 보내기" - }, - "toggleLayer": { - "desc": "mask/base layer 선택 전환", - "title": "Layer 전환" - }, - "increaseBrushSize": { - "title": "브러시 크기 증가", - "desc": "캔버스 브러시/지우개 크기 증가" - }, - "appHotkeys": "App Hotkeys", - "deleteImage": { - "title": "이미지 삭제", - "desc": "현재 이미지 삭제" - }, - "moveTool": { - "desc": "캔버스 탐색 허용", - "title": "툴 옮기기" - }, - "clearMask": { - "desc": "전체 mask 제거", - "title": "Mask 제거" - }, - "increaseGalleryThumbSize": { - "title": "갤러리 이미지 크기 증가", - "desc": "갤러리 미리 보기 크기를 늘립니다" - }, - "increaseBrushOpacity": { - "desc": "캔버스 브러시의 불투명도를 높입니다", - "title": "브러시 불투명도 증가" - }, - "focusPrompt": { - "desc": "프롬프트 입력 영역에 초점을 맞춥니다", - "title": "프롬프트에 초점 맞추기" - }, - "decreaseBrushOpacity": { - "desc": "캔버스 브러시의 불투명도를 줄입니다", - "title": "브러시 불투명도 감소" - }, - "nextStagingImage": { - "desc": "다음 스테이징 영역 이미지", - "title": "다음 스테이징 이미지" - }, - "redoStroke": { - "title": "Stroke 다시 실행", - "desc": "brush stroke 다시 실행" - }, - "nodesHotkeys": "Nodes Hotkeys", - "addNodes": { - "desc": "노드 추가 메뉴 열기", - "title": "노드 추가" - }, - "toggleViewer": { - "desc": "이미지 뷰어 열기 및 닫기", - "title": "Viewer 전환" - }, - "undoStroke": { - "title": "Stroke 실행 취소", - "desc": "brush stroke 실행 취소" - }, - "changeTabs": { - "desc": "다른 workspace으로 전환", - "title": "탭 바꾸기" - }, - "mergeVisible": { - "desc": "캔버스의 보이는 모든 레이어 병합" - } - }, - "nodes": { - "inputField": "입력 필드", - "controlFieldDescription": "노드 간에 전달된 Control 정보입니다.", - "latentsFieldDescription": "노드 사이에 Latents를 전달할 수 있습니다.", - "denoiseMaskFieldDescription": "노드 간에 Denoise Mask가 전달될 수 있음", - "floatCollectionDescription": "실수 컬렉션.", - "missingTemplate": "잘못된 노드: {{type}} 유형의 {{node}} 템플릿 누락(설치되지 않으셨나요?)", - "outputSchemaNotFound": "Output schema가 발견되지 않음", - "ipAdapterPolymorphicDescription": "IP-Adapters 컬렉션.", - "latentsPolymorphicDescription": "노드 사이에 Latents를 전달할 수 있습니다.", - "colorFieldDescription": "RGBA 색.", - "mainModelField": "모델", - "ipAdapterCollection": "IP-Adapters 컬렉션", - "conditioningCollection": "Conditioning 컬렉션", - "maybeIncompatible": "설치된 것과 호환되지 않을 수 있음", - "ipAdapterPolymorphic": "IP-Adapter 다형성", - "noNodeSelected": "선택한 노드 없음", - "addNode": "노드 추가", - "hideGraphNodes": "그래프 오버레이 숨기기", - "enum": "Enum", - "loadWorkflow": "Workflow 불러오기", - "integerPolymorphicDescription": "정수 컬렉션.", - "noOutputRecorded": "기록된 출력 없음", - "conditioningCollectionDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", - "colorPolymorphic": "색상 다형성", - "colorCodeEdgesHelp": "연결된 필드에 따른 색상 코드 선", - "collectionDescription": "해야 할 일", - "hideLegendNodes": "필드 유형 범례 숨기기", - "addLinearView": "Linear View에 추가", - "float": "실수", - "targetNodeFieldDoesNotExist": "잘못된 모서리: 대상/입력 필드 {{node}}. {{field}}이(가) 없습니다", - "animatedEdges": "애니메이션 모서리", - "conditioningPolymorphic": "Conditioning 다형성", - "integer": "정수", - "colorField": "색", - "boardField": "Board", - "nodeTemplate": "노드 템플릿", - "latentsCollection": "Latents 컬렉션", - "nodeOpacity": "노드 불투명도", - "sourceNodeDoesNotExist": "잘못된 모서리: 소스/출력 노드 {{node}}이(가) 없습니다", - "pickOne": "하나 고르기", - "collectionItemDescription": "해야 할 일", - "integerDescription": "정수는 소수점이 없는 숫자입니다.", - "outputField": "출력 필드", - "conditioningPolymorphicDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", - "noFieldsLinearview": "Linear View에 추가된 필드 없음", - "imagePolymorphic": "이미지 다형성", - "nodeSearch": "노드 검색", - "imagePolymorphicDescription": "이미지 컬렉션.", - "floatPolymorphic": "실수 다형성", - "outputFieldInInput": "입력 중 출력필드", - "doesNotExist": "존재하지 않음", - "ipAdapterCollectionDescription": "IP-Adapters 컬렉션.", - "controlCollection": "Control 컬렉션", - "inputMayOnlyHaveOneConnection": "입력에 하나의 연결만 있을 수 있습니다", - "notes": "메모", - "nodeOutputs": "노드 결과물", - "currentImageDescription": "Node Editor에 현재 이미지를 표시합니다", - "downloadWorkflow": "Workflow JSON 다운로드", - "ipAdapter": "IP-Adapter", - "integerCollection": "정수 컬렉션", - "collectionItem": "컬렉션 아이템", - "noConnectionInProgress": "진행중인 연결이 없습니다", - "controlCollectionDescription": "노드 간에 전달된 Control 정보입니다.", - "noConnectionData": "연결 데이터 없음", - "outputFields": "출력 필드", - "fieldTypesMustMatch": "필드 유형은 일치해야 합니다", - "edge": "Edge", - "inputNode": "입력 노드", - "enumDescription": "Enums은 여러 옵션 중 하나일 수 있는 값입니다.", - "sourceNodeFieldDoesNotExist": "잘못된 모서리: 소스/출력 필드 {{node}}. {{field}}이(가) 없습니다", - "loRAModelFieldDescription": "해야 할 일", - "imageField": "이미지", - "animatedEdgesHelp": "선택한 노드에 연결된 선택한 가장자리 및 가장자리를 애니메이션화합니다", - "cannotDuplicateConnection": "중복 연결을 만들 수 없습니다", - "booleanPolymorphic": "Boolean 다형성", - "noWorkflow": "Workflow 없음", - "colorCollectionDescription": "해야 할 일", - "integerCollectionDescription": "정수 컬렉션.", - "colorPolymorphicDescription": "색의 컬렉션.", - "denoiseMaskField": "Denoise Mask", - "missingCanvaInitImage": "캔버스 init 이미지 누락", - "conditioningFieldDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", - "clipFieldDescription": "Tokenizer 및 text_encoder 서브모델.", - "fullyContainNodesHelp": "선택하려면 노드가 선택 상자 안에 완전히 있어야 합니다", - "noImageFoundState": "상태에서 초기 이미지를 찾을 수 없습니다", - "clipField": "Clip", - "nodePack": "Node pack", - "nodeType": "노드 유형", - "noMatchingNodes": "일치하는 노드 없음", - "fullyContainNodes": "선택할 노드 전체 포함", - "integerPolymorphic": "정수 다형성", - "executionStateInProgress": "진행중", - "noFieldType": "필드 유형 없음", - "colorCollection": "색의 컬렉션.", - "executionStateError": "에러", - "noOutputSchemaName": "ref 개체에 output schema 이름이 없습니다", - "ipAdapterModel": "IP-Adapter 모델", - "latentsPolymorphic": "Latents 다형성", - "ipAdapterDescription": "이미지 프롬프트 어댑터(IP-Adapter).", - "boolean": "Booleans", - "missingCanvaInitMaskImages": "캔버스 init 및 mask 이미지 누락", - "problemReadingMetadata": "이미지에서 metadata를 읽는 중 문제가 발생했습니다", - "hideMinimapnodes": "미니맵 숨기기", - "oNNXModelField": "ONNX 모델", - "executionStateCompleted": "완료된", - "node": "노드", - "currentImage": "현재 이미지", - "controlField": "Control", - "booleanDescription": "Booleans은 참 또는 거짓입니다.", - "collection": "컬렉션", - "ipAdapterModelDescription": "IP-Adapter 모델 필드", - "cannotConnectInputToInput": "입력을 입력에 연결할 수 없습니다", - "invalidOutputSchema": "잘못된 output schema", - "boardFieldDescription": "A gallery board", - "floatDescription": "실수는 소수점이 있는 숫자입니다.", - "floatPolymorphicDescription": "실수 컬렉션.", - "conditioningField": "Conditioning", - "collectionFieldType": "{{name}} 컬렉션", - "floatCollection": "실수 컬렉션", - "latentsField": "Latents", - "cannotConnectOutputToOutput": "출력을 출력에 연결할 수 없습니다", - "booleanCollection": "Boolean 컬렉션", - "connectionWouldCreateCycle": "연결하면 주기가 생성됩니다", - "cannotConnectToSelf": "자체에 연결할 수 없습니다", - "notesDescription": "Workflow에 대한 메모 추가", - "inputFields": "입력 필드", - "colorCodeEdges": "색상-코드 선", - "targetNodeDoesNotExist": "잘못된 모서리: 대상/입력 노드 {{node}}이(가) 없습니다", - "imageCollectionDescription": "이미지 컬렉션.", - "mismatchedVersion": "잘못된 노드: {{type}} 유형의 {{node}} 노드에 일치하지 않는 버전이 있습니다(업데이트 해보시겠습니까?)", - "imageFieldDescription": "노드 간에 이미지를 전달할 수 있습니다.", - "outputNode": "출력노드", - "addNodeToolTip": "노드 추가(Shift+A, Space)", - "collectionOrScalarFieldType": "{{name}} 컬렉션|Scalar", - "nodeVersion": "노드 버전", - "loadingNodes": "노드 로딩중...", - "mainModelFieldDescription": "해야 할 일", - "loRAModelField": "LoRA", - "deletedInvalidEdge": "잘못된 모서리 {{source}} -> {{target}} 삭제", - "latentsCollectionDescription": "노드 사이에 Latents를 전달할 수 있습니다.", - "oNNXModelFieldDescription": "ONNX 모델 필드.", - "imageCollection": "이미지 컬렉션" - }, - "queue": { - "status": "상태", - "pruneSucceeded": "Queue로부터 {{item_count}} 완성된 항목 잘라내기", - "cancelTooltip": "현재 항목 취소", - "queueEmpty": "비어있는 Queue", - "pauseSucceeded": "중지된 프로세서", - "in_progress": "진행 중", - "queueFront": "Front of Queue에 추가", - "notReady": "Queue를 생성할 수 없음", - "batchFailedToQueue": "Queue Batch에 실패", - "completed": "완성된", - "queueBack": "Queue에 추가", - "batchValues": "Batch 값들", - "cancelFailed": "항목 취소 중 발생한 문제", - "queueCountPrediction": "Queue에 {{predicted}} 추가", - "batchQueued": "Batch Queued", - "pauseFailed": "프로세서 중지 중 발생한 문제", - "clearFailed": "Queue 제거 중 발생한 문제", - "queuedCount": "{{pending}} Pending", - "front": "front", - "clearSucceeded": "제거된 Queue", - "pause": "중지", - "pruneTooltip": "{{item_count}} 완성된 항목 잘라내기", - "cancelSucceeded": "취소된 항목", - "batchQueuedDesc_other": "queue의 {{direction}}에 추가된 {{count}}세션", - "queue": "Queue", - "batch": "Batch", - "clearQueueAlertDialog": "Queue를 지우면 처리 항목이 즉시 취소되고 Queue가 완전히 지워집니다.", - "resumeFailed": "프로세서 재개 중 발생한 문제", - "clear": "제거하다", - "prune": "잘라내다", - "total": "총 개수", - "canceled": "취소된", - "pruneFailed": "Queue 잘라내는 중 발생한 문제", - "cancelBatchSucceeded": "취소된 Batch", - "clearTooltip": "모든 항목을 취소하고 제거", - "current": "최근", - "pauseTooltip": "프로세서 중지", - "failed": "실패한", - "cancelItem": "항목 취소", - "next": "다음", - "cancelBatch": "Batch 취소", - "back": "back", - "batchFieldValues": "Batch 필드 값들", - "cancel": "취소", - "session": "세션", - "time": "시간", - "queueTotal": "{{total}} Total", - "resumeSucceeded": "재개된 프로세서", - "enqueueing": "Queueing Batch", - "resumeTooltip": "프로세서 재개", - "resume": "재개", - "cancelBatchFailed": "Batch 취소 중 발생한 문제", - "clearQueueAlertDialog2": "Queue를 지우시겠습니까?", - "item": "항목", - "graphFailedToQueue": "queue graph에 실패" - }, - "metadata": { - "positivePrompt": "긍정적 프롬프트", - "negativePrompt": "부정적인 프롬프트", - "generationMode": "Generation Mode", - "Threshold": "Noise Threshold", - "metadata": "Metadata", - "seed": "시드", - "imageDetails": "이미지 세부 정보", - "perlin": "Perlin Noise", - "model": "모델", - "noImageDetails": "이미지 세부 정보를 찾을 수 없습니다", - "hiresFix": "고해상도 최적화", - "cfgScale": "CFG scale", - "initImage": "초기이미지", - "recallParameters": "매개변수 호출", - "height": "Height", - "variations": "Seed-weight 쌍", - "noMetaData": "metadata를 찾을 수 없습니다", - "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)", - "width": "너비", - "vae": "VAE", - "createdBy": "~에 의해 생성된", - "workflow": "작업의 흐름", - "steps": "단계", - "scheduler": "스케줄러", - "noRecallParameters": "호출할 매개 변수가 없습니다" - }, - "invocationCache": { - "useCache": "캐시 사용", - "disable": "이용 불가능한", - "misses": "캐시 미스", - "enableFailed": "Invocation 캐시를 사용하도록 설정하는 중 발생한 문제", - "invocationCache": "Invocation 캐시", - "clearSucceeded": "제거된 Invocation 캐시", - "enableSucceeded": "이용 가능한 Invocation 캐시", - "clearFailed": "Invocation 캐시 제거 중 발생한 문제", - "hits": "캐시 적중", - "disableSucceeded": "이용 불가능한 Invocation 캐시", - "disableFailed": "Invocation 캐시를 이용하지 못하게 설정 중 발생한 문제", - "enable": "이용 가능한", - "clear": "제거", - "maxCacheSize": "최대 캐시 크기", - "cacheSize": "캐시 크기" - }, - "embedding": { - "noEmbeddingsLoaded": "불러온 Embeddings이 없음", - "noMatchingEmbedding": "일치하는 Embeddings이 없음", - "addEmbedding": "Embedding 추가", - "incompatibleModel": "호환되지 않는 기본 모델:" - }, - "hrf": { - "enableHrf": "이용 가능한 고해상도 고정", - "upscaleMethod": "업스케일 방법", - "enableHrfTooltip": "낮은 초기 해상도로 생성하고 기본 해상도로 업스케일한 다음 Image-to-Image를 실행합니다.", - "metadata": { - "strength": "고해상도 고정 강도", - "enabled": "고해상도 고정 사용", - "method": "고해상도 고정 방법" - }, - "hrf": "고해상도 고정", - "hrfStrength": "고해상도 고정 강도" - }, - "models": { - "noLoRAsLoaded": "로드된 LoRA 없음", - "noMatchingModels": "일치하는 모델 없음", - "esrganModel": "ESRGAN 모델", - "loading": "로딩중", - "noMatchingLoRAs": "일치하는 LoRA 없음", - "noLoRAsAvailable": "사용 가능한 LoRA 없음", - "noModelsAvailable": "사용 가능한 모델이 없음", - "addLora": "LoRA 추가", - "selectModel": "모델 선택", - "noRefinerModelsInstalled": "SDXL Refiner 모델이 설치되지 않음", - "noLoRAsInstalled": "설치된 LoRA 없음", - "selectLoRA": "LoRA 선택" - }, - "boards": { - "autoAddBoard": "자동 추가 Board", - "topMessage": "이 보드에는 다음 기능에 사용되는 이미지가 포함되어 있습니다:", - "move": "이동", - "menuItemAutoAdd": "해당 Board에 자동 추가", - "myBoard": "나의 Board", - "searchBoard": "Board 찾는 중...", - "deleteBoardOnly": "Board만 삭제", - "noMatching": "일치하는 Board들이 없음", - "movingImagesToBoard_other": "{{count}}이미지를 Board로 이동시키기", - "selectBoard": "Board 선택", - "cancel": "취소", - "addBoard": "Board 추가", - "bottomMessage": "이 보드와 이미지를 삭제하면 현재 사용 중인 모든 기능이 재설정됩니다.", - "uncategorized": "미분류", - "downloadBoard": "Board 다운로드", - "changeBoard": "Board 바꾸기", - "loading": "불러오는 중...", - "clearSearch": "검색 지우기", - "deleteBoard": "Board 삭제", - "deleteBoardAndImages": "Board와 이미지 삭제", - "deletedBoardsCannotbeRestored": "삭제된 Board는 복원할 수 없습니다" - } -} diff --git a/invokeai/frontend/web/dist/locales/mn.json b/invokeai/frontend/web/dist/locales/mn.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/invokeai/frontend/web/dist/locales/mn.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/invokeai/frontend/web/dist/locales/nl.json b/invokeai/frontend/web/dist/locales/nl.json deleted file mode 100644 index 6be48de918..0000000000 --- a/invokeai/frontend/web/dist/locales/nl.json +++ /dev/null @@ -1,1504 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Sneltoetsen", - "languagePickerLabel": "Taal", - "reportBugLabel": "Meld bug", - "settingsLabel": "Instellingen", - "img2img": "Afbeelding naar afbeelding", - "unifiedCanvas": "Centraal canvas", - "nodes": "Werkstroom-editor", - "langDutch": "Nederlands", - "nodesDesc": "Een op knooppunten gebaseerd systeem voor het genereren van afbeeldingen is momenteel in ontwikkeling. Blijf op de hoogte voor nieuws over deze verbluffende functie.", - "postProcessing": "Naverwerking", - "postProcessDesc1": "Invoke AI biedt een breed scala aan naverwerkingsfuncties. Afbeeldingsopschaling en Gezichtsherstel zijn al beschikbaar in de web-UI. Je kunt ze openen via het menu Uitgebreide opties in de tabbladen Tekst naar afbeelding en Afbeelding naar afbeelding. Je kunt een afbeelding ook direct verwerken via de afbeeldingsactieknoppen boven de weergave van de huidigde afbeelding of in de Viewer.", - "postProcessDesc2": "Een individuele gebruikersinterface voor uitgebreidere naverwerkingsworkflows.", - "postProcessDesc3": "De opdrachtregelinterface van InvokeAI biedt diverse andere functies, waaronder Embiggen.", - "trainingDesc1": "Een individuele workflow in de webinterface voor het trainen van je eigen embeddings en checkpoints via Textual Inversion en Dreambooth.", - "trainingDesc2": "InvokeAI ondersteunt al het trainen van eigen embeddings via Textual Inversion via het hoofdscript.", - "upload": "Upload", - "close": "Sluit", - "load": "Laad", - "statusConnected": "Verbonden", - "statusDisconnected": "Niet verbonden", - "statusError": "Fout", - "statusPreparing": "Voorbereiden", - "statusProcessingCanceled": "Verwerking geannuleerd", - "statusProcessingComplete": "Verwerking voltooid", - "statusGenerating": "Genereren", - "statusGeneratingTextToImage": "Genereren van tekst naar afbeelding", - "statusGeneratingImageToImage": "Genereren van afbeelding naar afbeelding", - "statusGeneratingInpainting": "Genereren van Inpainting", - "statusGeneratingOutpainting": "Genereren van Outpainting", - "statusGenerationComplete": "Genereren voltooid", - "statusIterationComplete": "Iteratie voltooid", - "statusSavingImage": "Afbeelding bewaren", - "statusRestoringFaces": "Gezichten herstellen", - "statusRestoringFacesGFPGAN": "Gezichten herstellen (GFPGAN)", - "statusRestoringFacesCodeFormer": "Gezichten herstellen (CodeFormer)", - "statusUpscaling": "Opschaling", - "statusUpscalingESRGAN": "Opschaling (ESRGAN)", - "statusLoadingModel": "Laden van model", - "statusModelChanged": "Model gewijzigd", - "githubLabel": "Github", - "discordLabel": "Discord", - "langArabic": "Arabisch", - "langEnglish": "Engels", - "langFrench": "Frans", - "langGerman": "Duits", - "langItalian": "Italiaans", - "langJapanese": "Japans", - "langPolish": "Pools", - "langBrPortuguese": "Portugees (Brazilië)", - "langRussian": "Russisch", - "langSimplifiedChinese": "Chinees (vereenvoudigd)", - "langUkranian": "Oekraïens", - "langSpanish": "Spaans", - "training": "Training", - "back": "Terug", - "statusConvertingModel": "Omzetten van model", - "statusModelConverted": "Model omgezet", - "statusMergingModels": "Samenvoegen van modellen", - "statusMergedModels": "Modellen samengevoegd", - "cancel": "Annuleer", - "accept": "Akkoord", - "langPortuguese": "Portugees", - "loading": "Bezig met laden", - "loadingInvokeAI": "Bezig met laden van Invoke AI", - "langHebrew": "עברית", - "langKorean": "한국어", - "txt2img": "Tekst naar afbeelding", - "postprocessing": "Naverwerking", - "dontAskMeAgain": "Vraag niet opnieuw", - "imagePrompt": "Afbeeldingsprompt", - "random": "Willekeurig", - "generate": "Genereer", - "openInNewTab": "Open in nieuw tabblad", - "areYouSure": "Weet je het zeker?", - "linear": "Lineair", - "batch": "Seriebeheer", - "modelManager": "Modelbeheer", - "darkMode": "Donkere modus", - "lightMode": "Lichte modus", - "communityLabel": "Gemeenschap", - "t2iAdapter": "T2I-adapter", - "on": "Aan", - "nodeEditor": "Knooppunteditor", - "ipAdapter": "IP-adapter", - "controlAdapter": "Control-adapter", - "auto": "Autom.", - "controlNet": "ControlNet", - "statusProcessing": "Bezig met verwerken", - "imageFailedToLoad": "Kan afbeelding niet laden", - "learnMore": "Meer informatie", - "advanced": "Uitgebreid" - }, - "gallery": { - "generations": "Gegenereerde afbeeldingen", - "showGenerations": "Toon gegenereerde afbeeldingen", - "uploads": "Uploads", - "showUploads": "Toon uploads", - "galleryImageSize": "Afbeeldingsgrootte", - "galleryImageResetSize": "Herstel grootte", - "gallerySettings": "Instellingen galerij", - "maintainAspectRatio": "Behoud beeldverhoiding", - "autoSwitchNewImages": "Wissel autom. naar nieuwe afbeeldingen", - "singleColumnLayout": "Eenkolomsindeling", - "allImagesLoaded": "Alle afbeeldingen geladen", - "loadMore": "Laad meer", - "noImagesInGallery": "Geen afbeeldingen om te tonen", - "deleteImage": "Verwijder afbeelding", - "deleteImageBin": "Verwijderde afbeeldingen worden naar de prullenbak van je besturingssysteem gestuurd.", - "deleteImagePermanent": "Verwijderde afbeeldingen kunnen niet worden hersteld.", - "assets": "Eigen onderdelen", - "autoAssignBoardOnClick": "Ken automatisch bord toe bij klikken", - "featuresWillReset": "Als je deze afbeelding verwijdert, dan worden deze functies onmiddellijk teruggezet.", - "loading": "Bezig met laden", - "unableToLoad": "Kan galerij niet laden", - "preparingDownload": "Bezig met voorbereiden van download", - "preparingDownloadFailed": "Fout bij voorbereiden van download", - "downloadSelection": "Download selectie", - "currentlyInUse": "Deze afbeelding is momenteel in gebruik door de volgende functies:", - "copy": "Kopieer", - "download": "Download", - "setCurrentImage": "Stel in als huidige afbeelding" - }, - "hotkeys": { - "keyboardShortcuts": "Sneltoetsen", - "appHotkeys": "Appsneltoetsen", - "generalHotkeys": "Algemene sneltoetsen", - "galleryHotkeys": "Sneltoetsen galerij", - "unifiedCanvasHotkeys": "Sneltoetsen centraal canvas", - "invoke": { - "title": "Genereer", - "desc": "Genereert een afbeelding" - }, - "cancel": { - "title": "Annuleer", - "desc": "Annuleert het genereren van een afbeelding" - }, - "focusPrompt": { - "title": "Focus op invoer", - "desc": "Legt de focus op het invoertekstvak" - }, - "toggleOptions": { - "title": "Open/sluit Opties", - "desc": "Opent of sluit het deelscherm Opties" - }, - "pinOptions": { - "title": "Zet Opties vast", - "desc": "Zet het deelscherm Opties vast" - }, - "toggleViewer": { - "title": "Zet Viewer vast", - "desc": "Opent of sluit Afbeeldingsviewer" - }, - "toggleGallery": { - "title": "Zet Galerij vast", - "desc": "Opent of sluit het deelscherm Galerij" - }, - "maximizeWorkSpace": { - "title": "Maximaliseer werkgebied", - "desc": "Sluit deelschermen en maximaliseer het werkgebied" - }, - "changeTabs": { - "title": "Wissel van tabblad", - "desc": "Wissel naar een ander werkgebied" - }, - "consoleToggle": { - "title": "Open/sluit console", - "desc": "Opent of sluit de console" - }, - "setPrompt": { - "title": "Stel invoertekst in", - "desc": "Gebruikt de invoertekst van de huidige afbeelding" - }, - "setSeed": { - "title": "Stel seed in", - "desc": "Gebruikt de seed van de huidige afbeelding" - }, - "setParameters": { - "title": "Stel parameters in", - "desc": "Gebruikt alle parameters van de huidige afbeelding" - }, - "restoreFaces": { - "title": "Herstel gezichten", - "desc": "Herstelt de huidige afbeelding" - }, - "upscale": { - "title": "Schaal op", - "desc": "Schaalt de huidige afbeelding op" - }, - "showInfo": { - "title": "Toon info", - "desc": "Toont de metagegevens van de huidige afbeelding" - }, - "sendToImageToImage": { - "title": "Stuur naar Afbeelding naar afbeelding", - "desc": "Stuurt de huidige afbeelding naar Afbeelding naar afbeelding" - }, - "deleteImage": { - "title": "Verwijder afbeelding", - "desc": "Verwijdert de huidige afbeelding" - }, - "closePanels": { - "title": "Sluit deelschermen", - "desc": "Sluit geopende deelschermen" - }, - "previousImage": { - "title": "Vorige afbeelding", - "desc": "Toont de vorige afbeelding in de galerij" - }, - "nextImage": { - "title": "Volgende afbeelding", - "desc": "Toont de volgende afbeelding in de galerij" - }, - "toggleGalleryPin": { - "title": "Zet galerij vast/los", - "desc": "Zet de galerij vast of los aan de gebruikersinterface" - }, - "increaseGalleryThumbSize": { - "title": "Vergroot afbeeldingsgrootte galerij", - "desc": "Vergroot de grootte van de galerijminiaturen" - }, - "decreaseGalleryThumbSize": { - "title": "Verklein afbeeldingsgrootte galerij", - "desc": "Verkleint de grootte van de galerijminiaturen" - }, - "selectBrush": { - "title": "Kies penseel", - "desc": "Kiest de penseel op het canvas" - }, - "selectEraser": { - "title": "Kies gum", - "desc": "Kiest de gum op het canvas" - }, - "decreaseBrushSize": { - "title": "Verklein penseelgrootte", - "desc": "Verkleint de grootte van het penseel/gum op het canvas" - }, - "increaseBrushSize": { - "title": "Vergroot penseelgrootte", - "desc": "Vergroot de grootte van het penseel/gum op het canvas" - }, - "decreaseBrushOpacity": { - "title": "Verlaag ondoorzichtigheid penseel", - "desc": "Verlaagt de ondoorzichtigheid van de penseel op het canvas" - }, - "increaseBrushOpacity": { - "title": "Verhoog ondoorzichtigheid penseel", - "desc": "Verhoogt de ondoorzichtigheid van de penseel op het canvas" - }, - "moveTool": { - "title": "Verplaats canvas", - "desc": "Maakt canvasnavigatie mogelijk" - }, - "fillBoundingBox": { - "title": "Vul tekenvak", - "desc": "Vult het tekenvak met de penseelkleur" - }, - "eraseBoundingBox": { - "title": "Wis tekenvak", - "desc": "Wist het gebied van het tekenvak" - }, - "colorPicker": { - "title": "Kleurkiezer", - "desc": "Opent de kleurkiezer op het canvas" - }, - "toggleSnap": { - "title": "Zet uitlijnen aan/uit", - "desc": "Zet uitlijnen op raster aan/uit" - }, - "quickToggleMove": { - "title": "Verplaats canvas even", - "desc": "Verplaats kortstondig het canvas" - }, - "toggleLayer": { - "title": "Zet laag aan/uit", - "desc": "Wisselt tussen de masker- en basislaag" - }, - "clearMask": { - "title": "Wis masker", - "desc": "Wist het volledig masker" - }, - "hideMask": { - "title": "Toon/verberg masker", - "desc": "Toont of verbegt het masker" - }, - "showHideBoundingBox": { - "title": "Toon/verberg tekenvak", - "desc": "Wisselt de zichtbaarheid van het tekenvak" - }, - "mergeVisible": { - "title": "Voeg lagen samen", - "desc": "Voegt alle zichtbare lagen op het canvas samen" - }, - "saveToGallery": { - "title": "Bewaar in galerij", - "desc": "Bewaart het huidige canvas in de galerij" - }, - "copyToClipboard": { - "title": "Kopieer naar klembord", - "desc": "Kopieert het huidige canvas op het klembord" - }, - "downloadImage": { - "title": "Download afbeelding", - "desc": "Downloadt het huidige canvas" - }, - "undoStroke": { - "title": "Maak streek ongedaan", - "desc": "Maakt een penseelstreek ongedaan" - }, - "redoStroke": { - "title": "Herhaal streek", - "desc": "Voert een ongedaan gemaakte penseelstreek opnieuw uit" - }, - "resetView": { - "title": "Herstel weergave", - "desc": "Herstelt de canvasweergave" - }, - "previousStagingImage": { - "title": "Vorige sessie-afbeelding", - "desc": "Bladert terug naar de vorige afbeelding in het sessiegebied" - }, - "nextStagingImage": { - "title": "Volgende sessie-afbeelding", - "desc": "Bladert vooruit naar de volgende afbeelding in het sessiegebied" - }, - "acceptStagingImage": { - "title": "Accepteer sessie-afbeelding", - "desc": "Accepteert de huidige sessie-afbeelding" - }, - "addNodes": { - "title": "Voeg knooppunten toe", - "desc": "Opent het menu Voeg knooppunt toe" - }, - "nodesHotkeys": "Sneltoetsen knooppunten" - }, - "modelManager": { - "modelManager": "Modelonderhoud", - "model": "Model", - "modelAdded": "Model toegevoegd", - "modelUpdated": "Model bijgewerkt", - "modelEntryDeleted": "Modelregel verwijderd", - "cannotUseSpaces": "Spaties zijn niet toegestaan", - "addNew": "Voeg nieuwe toe", - "addNewModel": "Voeg nieuw model toe", - "addManually": "Voeg handmatig toe", - "manual": "Handmatig", - "name": "Naam", - "nameValidationMsg": "Geef een naam voor je model", - "description": "Beschrijving", - "descriptionValidationMsg": "Voeg een beschrijving toe voor je model", - "config": "Configuratie", - "configValidationMsg": "Pad naar het configuratiebestand van je model.", - "modelLocation": "Locatie model", - "modelLocationValidationMsg": "Geef het pad naar een lokale map waar je Diffusers-model wordt bewaard", - "vaeLocation": "Locatie VAE", - "vaeLocationValidationMsg": "Pad naar waar je VAE zich bevindt.", - "width": "Breedte", - "widthValidationMsg": "Standaardbreedte van je model.", - "height": "Hoogte", - "heightValidationMsg": "Standaardhoogte van je model.", - "addModel": "Voeg model toe", - "updateModel": "Werk model bij", - "availableModels": "Beschikbare modellen", - "search": "Zoek", - "load": "Laad", - "active": "actief", - "notLoaded": "niet geladen", - "cached": "gecachet", - "checkpointFolder": "Checkpointmap", - "clearCheckpointFolder": "Wis checkpointmap", - "findModels": "Zoek modellen", - "scanAgain": "Kijk opnieuw", - "modelsFound": "Gevonden modellen", - "selectFolder": "Kies map", - "selected": "Gekozen", - "selectAll": "Kies alles", - "deselectAll": "Kies niets", - "showExisting": "Toon bestaande", - "addSelected": "Voeg gekozen toe", - "modelExists": "Model bestaat", - "selectAndAdd": "Kies en voeg de hieronder opgesomde modellen toe", - "noModelsFound": "Geen modellen gevonden", - "delete": "Verwijder", - "deleteModel": "Verwijder model", - "deleteConfig": "Verwijder configuratie", - "deleteMsg1": "Weet je zeker dat je dit model wilt verwijderen uit InvokeAI?", - "deleteMsg2": "Hiermee ZAL het model van schijf worden verwijderd als het zich bevindt in de beginmap van InvokeAI. Als je het model vanaf een eigen locatie gebruikt, dan ZAL het model NIET van schijf worden verwijderd.", - "formMessageDiffusersVAELocationDesc": "Indien niet opgegeven, dan zal InvokeAI kijken naar het VAE-bestand in de hierboven gegeven modellocatie.", - "repoIDValidationMsg": "Online repository van je model", - "formMessageDiffusersModelLocation": "Locatie Diffusers-model", - "convertToDiffusersHelpText3": "Je checkpoint-bestand op de schijf ZAL worden verwijderd als het zich in de beginmap van InvokeAI bevindt. Het ZAL NIET worden verwijderd als het zich in een andere locatie bevindt.", - "convertToDiffusersHelpText6": "Wil je dit model omzetten?", - "allModels": "Alle modellen", - "checkpointModels": "Checkpoints", - "safetensorModels": "SafeTensors", - "addCheckpointModel": "Voeg Checkpoint-/SafeTensor-model toe", - "addDiffuserModel": "Voeg Diffusers-model toe", - "diffusersModels": "Diffusers", - "repo_id": "Repo-id", - "vaeRepoID": "Repo-id VAE", - "vaeRepoIDValidationMsg": "Online repository van je VAE", - "formMessageDiffusersModelLocationDesc": "Voer er minimaal een in.", - "formMessageDiffusersVAELocation": "Locatie VAE", - "convert": "Omzetten", - "convertToDiffusers": "Omzetten naar Diffusers", - "convertToDiffusersHelpText1": "Dit model wordt omgezet naar de🧨 Diffusers-indeling.", - "convertToDiffusersHelpText2": "Dit proces vervangt het onderdeel in Modelonderhoud met de Diffusers-versie van hetzelfde model.", - "convertToDiffusersHelpText4": "Dit is een eenmalig proces. Dit neemt ongeveer 30 tot 60 sec. in beslag, afhankelijk van de specificaties van je computer.", - "convertToDiffusersHelpText5": "Zorg ervoor dat je genoeg schijfruimte hebt. Modellen nemen gewoonlijk ongeveer 2 tot 7 GB ruimte in beslag.", - "convertToDiffusersSaveLocation": "Bewaarlocatie", - "v1": "v1", - "inpainting": "v1-inpainting", - "customConfig": "Eigen configuratie", - "pathToCustomConfig": "Pad naar eigen configuratie", - "statusConverting": "Omzetten", - "modelConverted": "Model omgezet", - "sameFolder": "Dezelfde map", - "invokeRoot": "InvokeAI-map", - "custom": "Eigen", - "customSaveLocation": "Eigen bewaarlocatie", - "merge": "Samenvoegen", - "modelsMerged": "Modellen samengevoegd", - "mergeModels": "Voeg modellen samen", - "modelOne": "Model 1", - "modelTwo": "Model 2", - "modelThree": "Model 3", - "mergedModelName": "Samengevoegde modelnaam", - "alpha": "Alfa", - "interpolationType": "Soort interpolatie", - "mergedModelSaveLocation": "Bewaarlocatie", - "mergedModelCustomSaveLocation": "Eigen pad", - "invokeAIFolder": "InvokeAI-map", - "ignoreMismatch": "Negeer discrepanties tussen gekozen modellen", - "modelMergeHeaderHelp1": "Je kunt tot drie verschillende modellen samenvoegen om een mengvorm te maken die aan je behoeften voldoet.", - "modelMergeHeaderHelp2": "Alleen Diffusers kunnen worden samengevoegd. Als je een Checkpointmodel wilt samenvoegen, zet deze eerst om naar Diffusers.", - "modelMergeAlphaHelp": "Alfa stuurt de mengsterkte aan voor de modellen. Lagere alfawaarden leiden tot een kleinere invloed op het tweede model.", - "modelMergeInterpAddDifferenceHelp": "In deze stand wordt model 3 eerst van model 2 afgehaald. Wat daar uitkomt wordt gemengd met model 1, gebruikmakend van de hierboven ingestelde alfawaarde.", - "inverseSigmoid": "Keer Sigmoid om", - "sigmoid": "Sigmoid", - "weightedSum": "Gewogen som", - "v2_base": "v2 (512px)", - "v2_768": "v2 (768px)", - "none": "geen", - "addDifference": "Voeg verschil toe", - "scanForModels": "Scan naar modellen", - "pickModelType": "Kies modelsoort", - "baseModel": "Basismodel", - "vae": "VAE", - "variant": "Variant", - "modelConversionFailed": "Omzetten model mislukt", - "modelUpdateFailed": "Bijwerken model mislukt", - "modelsMergeFailed": "Samenvoegen model mislukt", - "selectModel": "Kies model", - "settings": "Instellingen", - "modelDeleted": "Model verwijderd", - "noCustomLocationProvided": "Geen Aangepaste Locatie Opgegeven", - "syncModels": "Synchroniseer Modellen", - "modelsSynced": "Modellen Gesynchroniseerd", - "modelSyncFailed": "Synchronisatie modellen mislukt", - "modelDeleteFailed": "Model kon niet verwijderd worden", - "convertingModelBegin": "Model aan het converteren. Even geduld.", - "importModels": "Importeer Modellen", - "syncModelsDesc": "Als je modellen niet meer synchroon zijn met de backend, kan je ze met deze optie vernieuwen. Dit wordt meestal gebruikt in het geval je het bestand models.yaml met de hand bewerkt of als je modellen aan de beginmap van InvokeAI toevoegt nadat de applicatie gestart is.", - "loraModels": "LoRA's", - "onnxModels": "Onnx", - "oliveModels": "Olives", - "noModels": "Geen modellen gevonden", - "predictionType": "Soort voorspelling (voor Stable Diffusion 2.x-modellen en incidentele Stable Diffusion 1.x-modellen)", - "quickAdd": "Voeg snel toe", - "simpleModelDesc": "Geef een pad naar een lokaal Diffusers-model, lokale-checkpoint- / safetensors-model, een HuggingFace-repo-ID of een url naar een checkpoint- / Diffusers-model.", - "advanced": "Uitgebreid", - "useCustomConfig": "Gebruik eigen configuratie", - "closeAdvanced": "Sluit uitgebreid", - "modelType": "Soort model", - "customConfigFileLocation": "Locatie eigen configuratiebestand", - "vaePrecision": "Nauwkeurigheid VAE" - }, - "parameters": { - "images": "Afbeeldingen", - "steps": "Stappen", - "cfgScale": "CFG-schaal", - "width": "Breedte", - "height": "Hoogte", - "seed": "Seed", - "randomizeSeed": "Willekeurige seed", - "shuffle": "Mengseed", - "noiseThreshold": "Drempelwaarde ruis", - "perlinNoise": "Perlinruis", - "variations": "Variaties", - "variationAmount": "Hoeveelheid variatie", - "seedWeights": "Gewicht seed", - "faceRestoration": "Gezichtsherstel", - "restoreFaces": "Herstel gezichten", - "type": "Soort", - "strength": "Sterkte", - "upscaling": "Opschalen", - "upscale": "Vergroot (Shift + U)", - "upscaleImage": "Schaal afbeelding op", - "scale": "Schaal", - "otherOptions": "Andere opties", - "seamlessTiling": "Naadloze tegels", - "hiresOptim": "Hogeresolutie-optimalisatie", - "imageFit": "Pas initiële afbeelding in uitvoergrootte", - "codeformerFidelity": "Getrouwheid", - "scaleBeforeProcessing": "Schalen voor verwerking", - "scaledWidth": "Geschaalde B", - "scaledHeight": "Geschaalde H", - "infillMethod": "Infill-methode", - "tileSize": "Grootte tegel", - "boundingBoxHeader": "Tekenvak", - "seamCorrectionHeader": "Correctie naad", - "infillScalingHeader": "Infill en schaling", - "img2imgStrength": "Sterkte Afbeelding naar afbeelding", - "toggleLoopback": "Zet recursieve verwerking aan/uit", - "sendTo": "Stuur naar", - "sendToImg2Img": "Stuur naar Afbeelding naar afbeelding", - "sendToUnifiedCanvas": "Stuur naar Centraal canvas", - "copyImageToLink": "Stuur afbeelding naar koppeling", - "downloadImage": "Download afbeelding", - "openInViewer": "Open in Viewer", - "closeViewer": "Sluit Viewer", - "usePrompt": "Hergebruik invoertekst", - "useSeed": "Hergebruik seed", - "useAll": "Hergebruik alles", - "useInitImg": "Gebruik initiële afbeelding", - "info": "Info", - "initialImage": "Initiële afbeelding", - "showOptionsPanel": "Toon deelscherm Opties (O of T)", - "symmetry": "Symmetrie", - "hSymmetryStep": "Stap horiz. symmetrie", - "vSymmetryStep": "Stap vert. symmetrie", - "cancel": { - "immediate": "Annuleer direct", - "isScheduled": "Annuleren", - "setType": "Stel annuleervorm in", - "schedule": "Annuleer na huidige iteratie", - "cancel": "Annuleer" - }, - "general": "Algemeen", - "copyImage": "Kopieer afbeelding", - "imageToImage": "Afbeelding naar afbeelding", - "denoisingStrength": "Sterkte ontruisen", - "hiresStrength": "Sterkte hogere resolutie", - "scheduler": "Planner", - "noiseSettings": "Ruis", - "seamlessXAxis": "X-as", - "seamlessYAxis": "Y-as", - "hidePreview": "Verberg voorvertoning", - "showPreview": "Toon voorvertoning", - "boundingBoxWidth": "Tekenvak breedte", - "boundingBoxHeight": "Tekenvak hoogte", - "clipSkip": "Overslaan CLIP", - "aspectRatio": "Beeldverhouding", - "negativePromptPlaceholder": "Negatieve prompt", - "controlNetControlMode": "Aansturingsmodus", - "positivePromptPlaceholder": "Positieve prompt", - "maskAdjustmentsHeader": "Maskeraanpassingen", - "compositingSettingsHeader": "Instellingen afbeeldingsopbouw", - "coherencePassHeader": "Coherentiestap", - "maskBlur": "Vervaag", - "maskBlurMethod": "Vervagingsmethode", - "coherenceSteps": "Stappen", - "coherenceStrength": "Sterkte", - "seamHighThreshold": "Hoog", - "seamLowThreshold": "Laag", - "invoke": { - "noNodesInGraph": "Geen knooppunten in graaf", - "noModelSelected": "Geen model ingesteld", - "invoke": "Start", - "noPrompts": "Geen prompts gegenereerd", - "systemBusy": "Systeem is bezig", - "noInitialImageSelected": "Geen initiële afbeelding gekozen", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} invoer ontbreekt", - "noControlImageForControlAdapter": "Controle-adapter #{{number}} heeft geen controle-afbeelding", - "noModelForControlAdapter": "Control-adapter #{{number}} heeft geen model ingesteld staan.", - "unableToInvoke": "Kan niet starten", - "incompatibleBaseModelForControlAdapter": "Model van controle-adapter #{{number}} is ongeldig in combinatie met het hoofdmodel.", - "systemDisconnected": "Systeem is niet verbonden", - "missingNodeTemplate": "Knooppuntsjabloon ontbreekt", - "readyToInvoke": "Klaar om te starten", - "missingFieldTemplate": "Veldsjabloon ontbreekt", - "addingImagesTo": "Bezig met toevoegen van afbeeldingen aan" - }, - "seamlessX&Y": "Naadloos X en Y", - "isAllowedToUpscale": { - "useX2Model": "Afbeelding is te groot om te vergroten met het x4-model. Gebruik hiervoor het x2-model", - "tooLarge": "Afbeelding is te groot om te vergoten. Kies een kleinere afbeelding" - }, - "aspectRatioFree": "Vrij", - "cpuNoise": "CPU-ruis", - "patchmatchDownScaleSize": "Verklein", - "gpuNoise": "GPU-ruis", - "seamlessX": "Naadloos X", - "useCpuNoise": "Gebruik CPU-ruis", - "clipSkipWithLayerCount": "Overslaan CLIP {{layerCount}}", - "seamlessY": "Naadloos Y", - "manualSeed": "Handmatige seedwaarde", - "imageActions": "Afbeeldingshandeling", - "randomSeed": "Willekeurige seedwaarde", - "iterations": "Iteraties", - "iterationsWithCount_one": "{{count}} iteratie", - "iterationsWithCount_other": "{{count}} iteraties", - "enableNoiseSettings": "Schakel ruisinstellingen in", - "coherenceMode": "Modus" - }, - "settings": { - "models": "Modellen", - "displayInProgress": "Toon voortgangsafbeeldingen", - "saveSteps": "Bewaar afbeeldingen elke n stappen", - "confirmOnDelete": "Bevestig bij verwijderen", - "displayHelpIcons": "Toon hulppictogrammen", - "enableImageDebugging": "Schakel foutopsporing afbeelding in", - "resetWebUI": "Herstel web-UI", - "resetWebUIDesc1": "Herstel web-UI herstelt alleen de lokale afbeeldingscache en de onthouden instellingen van je browser. Het verwijdert geen afbeeldingen van schijf.", - "resetWebUIDesc2": "Als afbeeldingen niet getoond worden in de galerij of iets anders werkt niet, probeer dan eerst deze herstelfunctie voordat je een fout aanmeldt op GitHub.", - "resetComplete": "Webinterface is hersteld.", - "useSlidersForAll": "Gebruik schuifbalken voor alle opties", - "consoleLogLevel": "Niveau logboek", - "shouldLogToConsole": "Schrijf logboek naar console", - "developer": "Ontwikkelaar", - "general": "Algemeen", - "showProgressInViewer": "Toon voortgangsafbeeldingen in viewer", - "generation": "Genereren", - "ui": "Gebruikersinterface", - "antialiasProgressImages": "Voer anti-aliasing uit op voortgangsafbeeldingen", - "showAdvancedOptions": "Toon uitgebreide opties", - "favoriteSchedulers": "Favoriete planners", - "favoriteSchedulersPlaceholder": "Geen favoriete planners ingesteld", - "beta": "Bèta", - "experimental": "Experimenteel", - "alternateCanvasLayout": "Omwisselen Canvas Layout", - "enableNodesEditor": "Schakel Knooppunteditor in", - "autoChangeDimensions": "Werk B/H bij naar modelstandaard bij wijziging", - "clearIntermediates": "Wis tussentijdse afbeeldingen", - "clearIntermediatesDesc3": "Je galerijafbeeldingen zullen niet worden verwijderd.", - "clearIntermediatesWithCount_one": "Wis {{count}} tussentijdse afbeelding", - "clearIntermediatesWithCount_other": "Wis {{count}} tussentijdse afbeeldingen", - "clearIntermediatesDesc2": "Tussentijdse afbeeldingen zijn nevenproducten bij het genereren. Deze wijken af van de uitvoerafbeeldingen in de galerij. Als je tussentijdse afbeeldingen wist, wordt schijfruimte vrijgemaakt.", - "intermediatesCleared_one": "{{count}} tussentijdse afbeelding gewist", - "intermediatesCleared_other": "{{count}} tussentijdse afbeeldingen gewist", - "clearIntermediatesDesc1": "Als je tussentijdse afbeeldingen wist, dan wordt de staat hersteld van je canvas en van ControlNet.", - "intermediatesClearedFailed": "Fout bij wissen van tussentijdse afbeeldingen" - }, - "toast": { - "tempFoldersEmptied": "Tijdelijke map geleegd", - "uploadFailed": "Upload mislukt", - "uploadFailedUnableToLoadDesc": "Kan bestand niet laden", - "downloadImageStarted": "Afbeeldingsdownload gestart", - "imageCopied": "Afbeelding gekopieerd", - "imageLinkCopied": "Afbeeldingskoppeling gekopieerd", - "imageNotLoaded": "Geen afbeelding geladen", - "imageNotLoadedDesc": "Geen afbeeldingen gevonden", - "imageSavedToGallery": "Afbeelding opgeslagen naar galerij", - "canvasMerged": "Canvas samengevoegd", - "sentToImageToImage": "Gestuurd naar Afbeelding naar afbeelding", - "sentToUnifiedCanvas": "Gestuurd naar Centraal canvas", - "parametersSet": "Parameters ingesteld", - "parametersNotSet": "Parameters niet ingesteld", - "parametersNotSetDesc": "Geen metagegevens gevonden voor deze afbeelding.", - "parametersFailed": "Fout bij laden van parameters", - "parametersFailedDesc": "Kan initiële afbeelding niet laden.", - "seedSet": "Seed ingesteld", - "seedNotSet": "Seed niet ingesteld", - "seedNotSetDesc": "Kan seed niet vinden voor deze afbeelding.", - "promptSet": "Invoertekst ingesteld", - "promptNotSet": "Invoertekst niet ingesteld", - "promptNotSetDesc": "Kan invoertekst niet vinden voor deze afbeelding.", - "upscalingFailed": "Opschalen mislukt", - "faceRestoreFailed": "Gezichtsherstel mislukt", - "metadataLoadFailed": "Fout bij laden metagegevens", - "initialImageSet": "Initiële afbeelding ingesteld", - "initialImageNotSet": "Initiële afbeelding niet ingesteld", - "initialImageNotSetDesc": "Kan initiële afbeelding niet laden", - "serverError": "Serverfout", - "disconnected": "Verbinding met server verbroken", - "connected": "Verbonden met server", - "canceled": "Verwerking geannuleerd", - "uploadFailedInvalidUploadDesc": "Moet een enkele PNG- of JPEG-afbeelding zijn", - "problemCopyingImageLink": "Kan afbeeldingslink niet kopiëren", - "parameterNotSet": "Parameter niet ingesteld", - "parameterSet": "Instellen parameters", - "nodesSaved": "Knooppunten bewaard", - "nodesLoaded": "Knooppunten geladen", - "nodesLoadedFailed": "Laden knooppunten mislukt", - "problemCopyingImage": "Kan Afbeelding Niet Kopiëren", - "nodesNotValidJSON": "Ongeldige JSON", - "nodesCorruptedGraph": "Kan niet laden. Graph lijkt corrupt.", - "nodesUnrecognizedTypes": "Laden mislukt. Graph heeft onherkenbare types", - "nodesBrokenConnections": "Laden mislukt. Sommige verbindingen zijn verbroken.", - "nodesNotValidGraph": "Geen geldige knooppunten graph", - "baseModelChangedCleared_one": "Basismodel is gewijzigd: {{count}} niet-compatibel submodel weggehaald of uitgeschakeld", - "baseModelChangedCleared_other": "Basismodel is gewijzigd: {{count}} niet-compatibele submodellen weggehaald of uitgeschakeld", - "imageSavingFailed": "Fout bij bewaren afbeelding", - "canvasSentControlnetAssets": "Canvas gestuurd naar ControlNet en Assets", - "problemCopyingCanvasDesc": "Kan basislaag niet exporteren", - "loadedWithWarnings": "Werkstroom geladen met waarschuwingen", - "setInitialImage": "Ingesteld als initiële afbeelding", - "canvasCopiedClipboard": "Canvas gekopieerd naar klembord", - "setControlImage": "Ingesteld als controle-afbeelding", - "setNodeField": "Ingesteld als knooppuntveld", - "problemSavingMask": "Fout bij bewaren masker", - "problemSavingCanvasDesc": "Kan basislaag niet exporteren", - "maskSavedAssets": "Masker bewaard in Assets", - "modelAddFailed": "Fout bij toevoegen model", - "problemDownloadingCanvas": "Fout bij downloaden van canvas", - "problemMergingCanvas": "Fout bij samenvoegen canvas", - "setCanvasInitialImage": "Ingesteld als initiële canvasafbeelding", - "imageUploaded": "Afbeelding geüpload", - "addedToBoard": "Toegevoegd aan bord", - "workflowLoaded": "Werkstroom geladen", - "modelAddedSimple": "Model toegevoegd", - "problemImportingMaskDesc": "Kan masker niet exporteren", - "problemCopyingCanvas": "Fout bij kopiëren canvas", - "problemSavingCanvas": "Fout bij bewaren canvas", - "canvasDownloaded": "Canvas gedownload", - "setIPAdapterImage": "Ingesteld als IP-adapterafbeelding", - "problemMergingCanvasDesc": "Kan basislaag niet exporteren", - "problemDownloadingCanvasDesc": "Kan basislaag niet exporteren", - "problemSavingMaskDesc": "Kan masker niet exporteren", - "imageSaved": "Afbeelding bewaard", - "maskSentControlnetAssets": "Masker gestuurd naar ControlNet en Assets", - "canvasSavedGallery": "Canvas bewaard in galerij", - "imageUploadFailed": "Fout bij uploaden afbeelding", - "modelAdded": "Model toegevoegd: {{modelName}}", - "problemImportingMask": "Fout bij importeren masker" - }, - "tooltip": { - "feature": { - "prompt": "Dit is het invoertekstvak. De invoertekst bevat de te genereren voorwerpen en stylistische termen. Je kunt hiernaast in de invoertekst ook het gewicht (het belang van een trefwoord) toekennen. Opdrachten en parameters voor op de opdrachtregelinterface werken hier niet.", - "gallery": "De galerij toont gegenereerde afbeeldingen uit de uitvoermap nadat ze gegenereerd zijn. Instellingen worden opgeslagen binnen de bestanden zelf en zijn toegankelijk via het contextmenu.", - "other": "Deze opties maken alternative werkingsstanden voor Invoke mogelijk. De optie 'Naadloze tegels' maakt herhalende patronen in de uitvoer. 'Hoge resolutie' genereert in twee stappen via Afbeelding naar afbeelding: gebruik dit als je een grotere en coherentere afbeelding wilt zonder artifacten. Dit zal meer tijd in beslag nemen t.o.v. Tekst naar afbeelding.", - "seed": "Seedwaarden hebben invloed op de initiële ruis op basis waarvan de afbeelding wordt gevormd. Je kunt de al bestaande seeds van eerdere afbeeldingen gebruiken. De waarde 'Drempelwaarde ruis' wordt gebruikt om de hoeveelheid artifacten te verkleinen bij hoge CFG-waarden (beperk je tot 0 - 10). De Perlinruiswaarde wordt gebruikt om Perlinruis toe te voegen bij het genereren: beide dienen als variatie op de uitvoer.", - "variations": "Probeer een variatie met een waarden tussen 0,1 en 1,0 om het resultaat voor een bepaalde seed te beïnvloeden. Interessante seedvariaties ontstaan bij waarden tussen 0,1 en 0,3.", - "upscale": "Gebruik ESRGAN om de afbeelding direct na het genereren te vergroten.", - "faceCorrection": "Gezichtsherstel via GFPGAN of Codeformer: het algoritme herkent gezichten die voorkomen in de afbeelding en herstelt onvolkomenheden. Een hogere waarde heeft meer invloed op de afbeelding, wat leidt tot aantrekkelijkere gezichten. Codeformer met een hogere getrouwheid behoudt de oorspronkelijke afbeelding ten koste van een sterkere gezichtsherstel.", - "imageToImage": "Afbeelding naar afbeelding laadt een afbeelding als initiële afbeelding, welke vervolgens gebruikt wordt om een nieuwe afbeelding mee te maken i.c.m. de invoertekst. Hoe hoger de waarde, des te meer invloed dit heeft op de uiteindelijke afbeelding. Waarden tussen 0,1 en 1,0 zijn mogelijk. Aanbevolen waarden zijn 0,25 - 0,75", - "boundingBox": "Het tekenvak is gelijk aan de instellingen Breedte en Hoogte voor de functies Tekst naar afbeelding en Afbeelding naar afbeelding. Alleen het gebied in het tekenvak wordt verwerkt.", - "seamCorrection": "Heeft invloed op hoe wordt omgegaan met zichtbare naden die voorkomen tussen gegenereerde afbeeldingen op het canvas.", - "infillAndScaling": "Onderhoud van infillmethodes (gebruikt op gemaskeerde of gewiste gebieden op het canvas) en opschaling (nuttig bij kleine tekenvakken)." - } - }, - "unifiedCanvas": { - "layer": "Laag", - "base": "Basis", - "mask": "Masker", - "maskingOptions": "Maskeropties", - "enableMask": "Schakel masker in", - "preserveMaskedArea": "Behoud gemaskeerd gebied", - "clearMask": "Wis masker", - "brush": "Penseel", - "eraser": "Gum", - "fillBoundingBox": "Vul tekenvak", - "eraseBoundingBox": "Wis tekenvak", - "colorPicker": "Kleurenkiezer", - "brushOptions": "Penseelopties", - "brushSize": "Grootte", - "move": "Verplaats", - "resetView": "Herstel weergave", - "mergeVisible": "Voeg lagen samen", - "saveToGallery": "Bewaar in galerij", - "copyToClipboard": "Kopieer naar klembord", - "downloadAsImage": "Download als afbeelding", - "undo": "Maak ongedaan", - "redo": "Herhaal", - "clearCanvas": "Wis canvas", - "canvasSettings": "Canvasinstellingen", - "showIntermediates": "Toon tussenafbeeldingen", - "showGrid": "Toon raster", - "snapToGrid": "Lijn uit op raster", - "darkenOutsideSelection": "Verduister buiten selectie", - "autoSaveToGallery": "Bewaar automatisch naar galerij", - "saveBoxRegionOnly": "Bewaar alleen tekengebied", - "limitStrokesToBox": "Beperk streken tot tekenvak", - "showCanvasDebugInfo": "Toon aanvullende canvasgegevens", - "clearCanvasHistory": "Wis canvasgeschiedenis", - "clearHistory": "Wis geschiedenis", - "clearCanvasHistoryMessage": "Het wissen van de canvasgeschiedenis laat het huidige canvas ongemoeid, maar wist onherstelbaar de geschiedenis voor het ongedaan maken en herhalen.", - "clearCanvasHistoryConfirm": "Weet je zeker dat je de canvasgeschiedenis wilt wissen?", - "emptyTempImageFolder": "Leeg tijdelijke afbeeldingenmap", - "emptyFolder": "Leeg map", - "emptyTempImagesFolderMessage": "Het legen van de tijdelijke afbeeldingenmap herstelt ook volledig het Centraal canvas. Hieronder valt de geschiedenis voor het ongedaan maken en herhalen, de afbeeldingen in het sessiegebied en de basislaag van het canvas.", - "emptyTempImagesFolderConfirm": "Weet je zeker dat je de tijdelijke afbeeldingenmap wilt legen?", - "activeLayer": "Actieve laag", - "canvasScale": "Schaal canvas", - "boundingBox": "Tekenvak", - "scaledBoundingBox": "Geschaalde tekenvak", - "boundingBoxPosition": "Positie tekenvak", - "canvasDimensions": "Afmetingen canvas", - "canvasPosition": "Positie canvas", - "cursorPosition": "Positie cursor", - "previous": "Vorige", - "next": "Volgende", - "accept": "Accepteer", - "showHide": "Toon/verberg", - "discardAll": "Gooi alles weg", - "betaClear": "Wis", - "betaDarkenOutside": "Verduister buiten tekenvak", - "betaLimitToBox": "Beperk tot tekenvak", - "betaPreserveMasked": "Behoud masker", - "antialiasing": "Anti-aliasing", - "showResultsOn": "Toon resultaten (aan)", - "showResultsOff": "Toon resultaten (uit)" - }, - "accessibility": { - "exitViewer": "Stop viewer", - "zoomIn": "Zoom in", - "rotateCounterClockwise": "Draai tegen de klok in", - "modelSelect": "Modelkeuze", - "invokeProgressBar": "Voortgangsbalk Invoke", - "reset": "Herstel", - "uploadImage": "Upload afbeelding", - "previousImage": "Vorige afbeelding", - "nextImage": "Volgende afbeelding", - "useThisParameter": "Gebruik deze parameter", - "copyMetadataJson": "Kopieer metagegevens-JSON", - "zoomOut": "Zoom uit", - "rotateClockwise": "Draai met de klok mee", - "flipHorizontally": "Spiegel horizontaal", - "flipVertically": "Spiegel verticaal", - "modifyConfig": "Wijzig configuratie", - "toggleAutoscroll": "Autom. scrollen aan/uit", - "toggleLogViewer": "Logboekviewer aan/uit", - "showOptionsPanel": "Toon zijscherm", - "menu": "Menu", - "showGalleryPanel": "Toon deelscherm Galerij", - "loadMore": "Laad meer" - }, - "ui": { - "showProgressImages": "Toon voortgangsafbeeldingen", - "hideProgressImages": "Verberg voortgangsafbeeldingen", - "swapSizes": "Wissel afmetingen om", - "lockRatio": "Zet verhouding vast" - }, - "nodes": { - "zoomOutNodes": "Uitzoomen", - "fitViewportNodes": "Aanpassen aan beeld", - "hideMinimapnodes": "Minimap verbergen", - "showLegendNodes": "Typelegende veld tonen", - "zoomInNodes": "Inzoomen", - "hideGraphNodes": "Graph overlay verbergen", - "showGraphNodes": "Graph overlay tonen", - "showMinimapnodes": "Minimap tonen", - "hideLegendNodes": "Typelegende veld verbergen", - "reloadNodeTemplates": "Herlaad knooppuntsjablonen", - "loadWorkflow": "Laad werkstroom", - "downloadWorkflow": "Download JSON van werkstroom", - "booleanPolymorphicDescription": "Een verzameling Booleanse waarden.", - "scheduler": "Planner", - "inputField": "Invoerveld", - "controlFieldDescription": "Controlegegevens doorgegeven tussen knooppunten.", - "skippingUnknownOutputType": "Overslaan van onbekend soort uitvoerveld", - "latentsFieldDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", - "denoiseMaskFieldDescription": "Ontruisingsmasker kan worden doorgegeven tussen knooppunten", - "floatCollectionDescription": "Een verzameling zwevende-kommagetallen.", - "missingTemplate": "Ontbrekende sjabloon", - "outputSchemaNotFound": "Uitvoerschema niet gevonden", - "ipAdapterPolymorphicDescription": "Een verzameling IP-adapters.", - "workflowDescription": "Korte beschrijving", - "latentsPolymorphicDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", - "colorFieldDescription": "Een RGBA-kleur.", - "mainModelField": "Model", - "unhandledInputProperty": "Onverwerkt invoerkenmerk", - "versionUnknown": " Versie onbekend", - "ipAdapterCollection": "Verzameling IP-adapters", - "conditioningCollection": "Verzameling conditionering", - "maybeIncompatible": "Is mogelijk niet compatibel met geïnstalleerde knooppunten", - "ipAdapterPolymorphic": "Polymorfisme IP-adapter", - "noNodeSelected": "Geen knooppunt gekozen", - "addNode": "Voeg knooppunt toe", - "unableToValidateWorkflow": "Kan werkstroom niet valideren", - "enum": "Enumeratie", - "integerPolymorphicDescription": "Een verzameling gehele getallen.", - "noOutputRecorded": "Geen uitvoer opgenomen", - "updateApp": "Werk app bij", - "conditioningCollectionDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", - "colorPolymorphic": "Polymorfisme kleur", - "colorCodeEdgesHelp": "Kleurgecodeerde randen op basis van hun verbonden velden", - "collectionDescription": "TODO", - "float": "Zwevende-kommagetal", - "workflowContact": "Contactpersoon", - "skippingReservedFieldType": "Overslaan van gereserveerd veldsoort", - "animatedEdges": "Geanimeerde randen", - "booleanCollectionDescription": "Een verzameling van Booleanse waarden.", - "sDXLMainModelFieldDescription": "SDXL-modelveld.", - "conditioningPolymorphic": "Polymorfisme conditionering", - "integer": "Geheel getal", - "colorField": "Kleur", - "boardField": "Bord", - "nodeTemplate": "Sjabloon knooppunt", - "latentsCollection": "Verzameling latents", - "problemReadingWorkflow": "Fout bij lezen van werkstroom uit afbeelding", - "sourceNode": "Bronknooppunt", - "nodeOpacity": "Dekking knooppunt", - "pickOne": "Kies er een", - "collectionItemDescription": "TODO", - "integerDescription": "Gehele getallen zijn getallen zonder een decimaalteken.", - "outputField": "Uitvoerveld", - "unableToLoadWorkflow": "Kan werkstroom niet valideren", - "snapToGrid": "Lijn uit op raster", - "stringPolymorphic": "Polymorfisme tekenreeks", - "conditioningPolymorphicDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", - "noFieldsLinearview": "Geen velden toegevoegd aan lineaire weergave", - "skipped": "Overgeslagen", - "imagePolymorphic": "Polymorfisme afbeelding", - "nodeSearch": "Zoek naar knooppunten", - "updateNode": "Werk knooppunt bij", - "sDXLRefinerModelFieldDescription": "Beschrijving", - "imagePolymorphicDescription": "Een verzameling afbeeldingen.", - "floatPolymorphic": "Polymorfisme zwevende-kommagetal", - "version": "Versie", - "doesNotExist": "bestaat niet", - "ipAdapterCollectionDescription": "Een verzameling van IP-adapters.", - "stringCollectionDescription": "Een verzameling tekenreeksen.", - "unableToParseNode": "Kan knooppunt niet inlezen", - "controlCollection": "Controle-verzameling", - "validateConnections": "Valideer verbindingen en graaf", - "stringCollection": "Verzameling tekenreeksen", - "inputMayOnlyHaveOneConnection": "Invoer mag slechts een enkele verbinding hebben", - "notes": "Opmerkingen", - "uNetField": "UNet", - "nodeOutputs": "Uitvoer knooppunt", - "currentImageDescription": "Toont de huidige afbeelding in de knooppunteditor", - "validateConnectionsHelp": "Voorkom dat er ongeldige verbindingen worden gelegd en dat er ongeldige grafen worden aangeroepen", - "problemSettingTitle": "Fout bij instellen titel", - "ipAdapter": "IP-adapter", - "integerCollection": "Verzameling gehele getallen", - "collectionItem": "Verzamelingsonderdeel", - "noConnectionInProgress": "Geen verbinding bezig te maken", - "vaeModelField": "VAE", - "controlCollectionDescription": "Controlegegevens doorgegeven tussen knooppunten.", - "skippedReservedInput": "Overgeslagen gereserveerd invoerveld", - "workflowVersion": "Versie", - "noConnectionData": "Geen verbindingsgegevens", - "outputFields": "Uitvoervelden", - "fieldTypesMustMatch": "Veldsoorten moeten overeenkomen", - "workflow": "Werkstroom", - "edge": "Rand", - "inputNode": "Invoerknooppunt", - "enumDescription": "Enumeraties zijn waarden die uit een aantal opties moeten worden gekozen.", - "unkownInvocation": "Onbekende aanroepsoort", - "loRAModelFieldDescription": "TODO", - "imageField": "Afbeelding", - "skippedReservedOutput": "Overgeslagen gereserveerd uitvoerveld", - "animatedEdgesHelp": "Animeer gekozen randen en randen verbonden met de gekozen knooppunten", - "cannotDuplicateConnection": "Kan geen dubbele verbindingen maken", - "booleanPolymorphic": "Polymorfisme Booleaanse waarden", - "unknownTemplate": "Onbekend sjabloon", - "noWorkflow": "Geen werkstroom", - "removeLinearView": "Verwijder uit lineaire weergave", - "colorCollectionDescription": "TODO", - "integerCollectionDescription": "Een verzameling gehele getallen.", - "colorPolymorphicDescription": "Een verzameling kleuren.", - "sDXLMainModelField": "SDXL-model", - "workflowTags": "Labels", - "denoiseMaskField": "Ontruisingsmasker", - "schedulerDescription": "Beschrijving", - "missingCanvaInitImage": "Ontbrekende initialisatie-afbeelding voor canvas", - "conditioningFieldDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", - "clipFieldDescription": "Submodellen voor tokenizer en text_encoder.", - "fullyContainNodesHelp": "Knooppunten moeten zich volledig binnen het keuzevak bevinden om te worden gekozen", - "noImageFoundState": "Geen initiële afbeelding gevonden in de staat", - "workflowValidation": "Validatiefout werkstroom", - "clipField": "Clip", - "stringDescription": "Tekenreeksen zijn tekst.", - "nodeType": "Soort knooppunt", - "noMatchingNodes": "Geen overeenkomende knooppunten", - "fullyContainNodes": "Omvat knooppunten volledig om ze te kiezen", - "integerPolymorphic": "Polymorfisme geheel getal", - "executionStateInProgress": "Bezig", - "noFieldType": "Geen soort veld", - "colorCollection": "Een verzameling kleuren.", - "executionStateError": "Fout", - "noOutputSchemaName": "Geen naam voor uitvoerschema gevonden in referentieobject", - "ipAdapterModel": "Model IP-adapter", - "latentsPolymorphic": "Polymorfisme latents", - "vaeModelFieldDescription": "Beschrijving", - "skippingInputNoTemplate": "Overslaan van invoerveld zonder sjabloon", - "ipAdapterDescription": "Een Afbeeldingsprompt-adapter (IP-adapter).", - "boolean": "Booleaanse waarden", - "missingCanvaInitMaskImages": "Ontbrekende initialisatie- en maskerafbeeldingen voor canvas", - "problemReadingMetadata": "Fout bij lezen van metagegevens uit afbeelding", - "stringPolymorphicDescription": "Een verzameling tekenreeksen.", - "oNNXModelField": "ONNX-model", - "executionStateCompleted": "Voltooid", - "node": "Knooppunt", - "skippingUnknownInputType": "Overslaan van onbekend soort invoerveld", - "workflowAuthor": "Auteur", - "currentImage": "Huidige afbeelding", - "controlField": "Controle", - "workflowName": "Naam", - "booleanDescription": "Booleanse waarden zijn waar en onwaar.", - "collection": "Verzameling", - "ipAdapterModelDescription": "Modelveld IP-adapter", - "cannotConnectInputToInput": "Kan invoer niet aan invoer verbinden", - "invalidOutputSchema": "Ongeldig uitvoerschema", - "boardFieldDescription": "Een galerijbord", - "floatDescription": "Zwevende-kommagetallen zijn getallen met een decimaalteken.", - "floatPolymorphicDescription": "Een verzameling zwevende-kommagetallen.", - "vaeField": "Vae", - "conditioningField": "Conditionering", - "unhandledOutputProperty": "Onverwerkt uitvoerkenmerk", - "workflowNotes": "Opmerkingen", - "string": "Tekenreeks", - "floatCollection": "Verzameling zwevende-kommagetallen", - "latentsField": "Latents", - "cannotConnectOutputToOutput": "Kan uitvoer niet aan uitvoer verbinden", - "booleanCollection": "Verzameling Booleaanse waarden", - "connectionWouldCreateCycle": "Verbinding zou cyclisch worden", - "cannotConnectToSelf": "Kan niet aan zichzelf verbinden", - "notesDescription": "Voeg opmerkingen toe aan je werkstroom", - "unknownField": "Onbekend veld", - "inputFields": "Invoervelden", - "colorCodeEdges": "Kleurgecodeerde randen", - "uNetFieldDescription": "UNet-submodel.", - "unknownNode": "Onbekend knooppunt", - "imageCollectionDescription": "Een verzameling afbeeldingen.", - "mismatchedVersion": "Heeft niet-overeenkomende versie", - "vaeFieldDescription": "Vae-submodel.", - "imageFieldDescription": "Afbeeldingen kunnen worden doorgegeven tussen knooppunten.", - "outputNode": "Uitvoerknooppunt", - "addNodeToolTip": "Voeg knooppunt toe (Shift+A, spatie)", - "loadingNodes": "Bezig met laden van knooppunten...", - "snapToGridHelp": "Lijn knooppunten uit op raster bij verplaatsing", - "workflowSettings": "Instellingen werkstroomeditor", - "mainModelFieldDescription": "TODO", - "sDXLRefinerModelField": "Verfijningsmodel", - "loRAModelField": "LoRA", - "unableToParseEdge": "Kan rand niet inlezen", - "latentsCollectionDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", - "oNNXModelFieldDescription": "ONNX-modelveld.", - "imageCollection": "Afbeeldingsverzameling" - }, - "controlnet": { - "amult": "a_mult", - "resize": "Schaal", - "showAdvanced": "Toon uitgebreide opties", - "contentShuffleDescription": "Verschuift het materiaal in de afbeelding", - "bgth": "bg_th", - "addT2IAdapter": "Voeg $t(common.t2iAdapter) toe", - "pidi": "PIDI", - "importImageFromCanvas": "Importeer afbeelding uit canvas", - "lineartDescription": "Zet afbeelding om naar line-art", - "normalBae": "Normale BAE", - "importMaskFromCanvas": "Importeer masker uit canvas", - "hed": "HED", - "hideAdvanced": "Verberg uitgebreid", - "contentShuffle": "Verschuif materiaal", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) ingeschakeld, $t(common.t2iAdapter)s uitgeschakeld", - "ipAdapterModel": "Adaptermodel", - "resetControlImage": "Herstel controle-afbeelding", - "beginEndStepPercent": "Percentage begin-/eindstap", - "mlsdDescription": "Minimalistische herkenning lijnsegmenten", - "duplicate": "Maak kopie", - "balanced": "Gebalanceerd", - "f": "F", - "h": "H", - "prompt": "Prompt", - "depthMidasDescription": "Genereer diepteblad via Midas", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "openPoseDescription": "Menselijke pose-benadering via Openpose", - "control": "Controle", - "resizeMode": "Modus schaling", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ingeschakeld, $t(common.controlNet)s uitgeschakeld", - "coarse": "Grof", - "weight": "Gewicht", - "selectModel": "Kies een model", - "crop": "Snij bij", - "depthMidas": "Diepte (Midas)", - "w": "B", - "processor": "Verwerker", - "addControlNet": "Voeg $t(common.controlNet) toe", - "none": "Geen", - "incompatibleBaseModel": "Niet-compatibel basismodel:", - "enableControlnet": "Schakel ControlNet in", - "detectResolution": "Herken resolutie", - "controlNetT2IMutexDesc": "Gelijktijdig gebruik van $t(common.controlNet) en $t(common.t2iAdapter) wordt op dit moment niet ondersteund.", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "pidiDescription": "PIDI-afbeeldingsverwerking", - "mediapipeFace": "Mediapipe - Gezicht", - "mlsd": "M-LSD", - "controlMode": "Controlemodus", - "fill": "Vul", - "cannyDescription": "Herkenning Canny-rand", - "addIPAdapter": "Voeg $t(common.ipAdapter) toe", - "lineart": "Line-art", - "colorMapDescription": "Genereert een kleurenblad van de afbeelding", - "lineartAnimeDescription": "Lineartverwerking in anime-stijl", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "minConfidence": "Min. vertrouwensniveau", - "imageResolution": "Resolutie afbeelding", - "megaControl": "Zeer veel controle", - "depthZoe": "Diepte (Zoe)", - "colorMap": "Kleur", - "lowThreshold": "Lage drempelwaarde", - "autoConfigure": "Configureer verwerker automatisch", - "highThreshold": "Hoge drempelwaarde", - "normalBaeDescription": "Normale BAE-verwerking", - "noneDescription": "Geen verwerking toegepast", - "saveControlImage": "Bewaar controle-afbeelding", - "openPose": "Openpose", - "toggleControlNet": "Zet deze ControlNet aan/uit", - "delete": "Verwijder", - "controlAdapter_one": "Control-adapter", - "controlAdapter_other": "Control-adapters", - "safe": "Veilig", - "colorMapTileSize": "Grootte tegel", - "lineartAnime": "Line-art voor anime", - "ipAdapterImageFallback": "Geen IP-adapterafbeelding gekozen", - "mediapipeFaceDescription": "Gezichtsherkenning met Mediapipe", - "canny": "Canny", - "depthZoeDescription": "Genereer diepteblad via Zoe", - "hedDescription": "Herkenning van holistisch-geneste randen", - "setControlImageDimensions": "Stel afmetingen controle-afbeelding in op B/H", - "scribble": "Krabbel", - "resetIPAdapterImage": "Herstel IP-adapterafbeelding", - "handAndFace": "Hand en gezicht", - "enableIPAdapter": "Schakel IP-adapter in", - "maxFaces": "Max. gezichten" - }, - "dynamicPrompts": { - "seedBehaviour": { - "perPromptDesc": "Gebruik een verschillende seedwaarde per afbeelding", - "perIterationLabel": "Seedwaarde per iteratie", - "perIterationDesc": "Gebruik een verschillende seedwaarde per iteratie", - "perPromptLabel": "Seedwaarde per afbeelding", - "label": "Gedrag seedwaarde" - }, - "enableDynamicPrompts": "Schakel dynamische prompts in", - "combinatorial": "Combinatorisch genereren", - "maxPrompts": "Max. prompts", - "promptsWithCount_one": "{{count}} prompt", - "promptsWithCount_other": "{{count}} prompts", - "dynamicPrompts": "Dynamische prompts" - }, - "popovers": { - "noiseUseCPU": { - "paragraphs": [ - "Bepaalt of ruis wordt gegenereerd op de CPU of de GPU.", - "Met CPU-ruis ingeschakeld zal een bepaalde seedwaarde dezelfde afbeelding opleveren op welke machine dan ook.", - "Er is geen prestatieverschil bij het inschakelen van CPU-ruis." - ], - "heading": "Gebruik CPU-ruis" - }, - "paramScheduler": { - "paragraphs": [ - "De planner bepaalt hoe ruis per iteratie wordt toegevoegd aan een afbeelding of hoe een monster wordt bijgewerkt op basis van de uitvoer van een model." - ], - "heading": "Planner" - }, - "scaleBeforeProcessing": { - "paragraphs": [ - "Schaalt het gekozen gebied naar de grootte die het meest geschikt is voor het model, vooraf aan het proces van het afbeeldingen genereren." - ], - "heading": "Schaal vooraf aan verwerking" - }, - "compositingMaskAdjustments": { - "heading": "Aanpassingen masker", - "paragraphs": [ - "Pas het masker aan." - ] - }, - "paramRatio": { - "heading": "Beeldverhouding", - "paragraphs": [ - "De beeldverhouding van de afmetingen van de afbeelding die wordt gegenereerd.", - "Een afbeeldingsgrootte (in aantal pixels) equivalent aan 512x512 wordt aanbevolen voor SD1.5-modellen. Een grootte-equivalent van 1024x1024 wordt aanbevolen voor SDXL-modellen." - ] - }, - "compositingCoherenceSteps": { - "heading": "Stappen", - "paragraphs": [ - "Het aantal te gebruiken ontruisingsstappen in de coherentiefase.", - "Gelijk aan de hoofdparameter Stappen." - ] - }, - "dynamicPrompts": { - "paragraphs": [ - "Dynamische prompts vormt een enkele prompt om in vele.", - "De basissyntax is \"a {red|green|blue} ball\". Dit zal de volgende drie prompts geven: \"a red ball\", \"a green ball\" en \"a blue ball\".", - "Gebruik de syntax zo vaak als je wilt in een enkele prompt, maar zorg ervoor dat het aantal gegenereerde prompts in lijn ligt met de instelling Max. prompts." - ], - "heading": "Dynamische prompts" - }, - "paramVAE": { - "paragraphs": [ - "Het model gebruikt voor het vertalen van AI-uitvoer naar de uiteindelijke afbeelding." - ], - "heading": "VAE" - }, - "compositingBlur": { - "heading": "Vervaging", - "paragraphs": [ - "De vervagingsstraal van het masker." - ] - }, - "paramIterations": { - "paragraphs": [ - "Het aantal te genereren afbeeldingen.", - "Als dynamische prompts is ingeschakeld, dan zal elke prompt dit aantal keer gegenereerd worden." - ], - "heading": "Iteraties" - }, - "paramVAEPrecision": { - "heading": "Nauwkeurigheid VAE", - "paragraphs": [ - "De nauwkeurigheid gebruikt tijdens de VAE-codering en -decodering. FP16/halve nauwkeurig is efficiënter, ten koste van kleine afbeeldingsvariaties." - ] - }, - "compositingCoherenceMode": { - "heading": "Modus", - "paragraphs": [ - "De modus van de coherentiefase." - ] - }, - "paramSeed": { - "paragraphs": [ - "Bepaalt de startruis die gebruikt wordt bij het genereren.", - "Schakel \"Willekeurige seedwaarde\" uit om identieke resultaten te krijgen met dezelfde genereer-instellingen." - ], - "heading": "Seedwaarde" - }, - "controlNetResizeMode": { - "heading": "Schaalmodus", - "paragraphs": [ - "Hoe de ControlNet-afbeelding zal worden geschaald aan de uitvoergrootte van de afbeelding." - ] - }, - "controlNetBeginEnd": { - "paragraphs": [ - "Op welke stappen van het ontruisingsproces ControlNet worden toegepast.", - "ControlNets die worden toegepast aan het begin begeleiden het compositieproces. ControlNets die worden toegepast aan het eind zorgen voor details." - ], - "heading": "Percentage begin- / eindstap" - }, - "dynamicPromptsSeedBehaviour": { - "paragraphs": [ - "Bepaalt hoe de seedwaarde wordt gebruikt bij het genereren van prompts.", - "Per iteratie zal een unieke seedwaarde worden gebruikt voor elke iteratie. Gebruik dit om de promptvariaties binnen een enkele seedwaarde te verkennen.", - "Bijvoorbeeld: als je vijf prompts heb, dan zal voor elke afbeelding dezelfde seedwaarde gebruikt worden.", - "De optie Per afbeelding zal een unieke seedwaarde voor elke afbeelding gebruiken. Dit biedt meer variatie." - ], - "heading": "Gedrag seedwaarde" - }, - "clipSkip": { - "paragraphs": [ - "Kies hoeveel CLIP-modellagen je wilt overslaan.", - "Bepaalde modellen werken beter met bepaalde Overslaan CLIP-instellingen.", - "Een hogere waarde geeft meestal een minder gedetailleerde afbeelding." - ], - "heading": "Overslaan CLIP" - }, - "paramModel": { - "heading": "Model", - "paragraphs": [ - "Model gebruikt voor de ontruisingsstappen.", - "Verschillende modellen zijn meestal getraind om zich te specialiseren in het maken van bepaalde esthetische resultaten en materiaal." - ] - }, - "compositingCoherencePass": { - "heading": "Coherentiefase", - "paragraphs": [ - "Een tweede ronde ontruising helpt bij het samenstellen van de erin- of eruitgetekende afbeelding." - ] - }, - "paramDenoisingStrength": { - "paragraphs": [ - "Hoeveel ruis wordt toegevoegd aan de invoerafbeelding.", - "0 levert een identieke afbeelding op, waarbij 1 een volledig nieuwe afbeelding oplevert." - ], - "heading": "Ontruisingssterkte" - }, - "compositingStrength": { - "heading": "Sterkte", - "paragraphs": [ - "Ontruisingssterkte voor de coherentiefase.", - "Gelijk aan de parameter Ontruisingssterkte Afbeelding naar afbeelding." - ] - }, - "paramNegativeConditioning": { - "paragraphs": [ - "Het genereerproces voorkomt de gegeven begrippen in de negatieve prompt. Gebruik dit om bepaalde zaken of voorwerpen uit te sluiten van de uitvoerafbeelding.", - "Ondersteunt Compel-syntax en -embeddingen." - ], - "heading": "Negatieve prompt" - }, - "compositingBlurMethod": { - "heading": "Vervagingsmethode", - "paragraphs": [ - "De methode van de vervaging die wordt toegepast op het gemaskeerd gebied." - ] - }, - "dynamicPromptsMaxPrompts": { - "heading": "Max. prompts", - "paragraphs": [ - "Beperkt het aantal prompts die kunnen worden gegenereerd door dynamische prompts." - ] - }, - "infillMethod": { - "paragraphs": [ - "Methode om een gekozen gebied in te vullen." - ], - "heading": "Invulmethode" - }, - "controlNetWeight": { - "heading": "Gewicht", - "paragraphs": [ - "Hoe sterk ControlNet effect heeft op de gegeneerde afbeelding." - ] - }, - "controlNet": { - "heading": "ControlNet", - "paragraphs": [ - "ControlNets begeleidt het genereerproces, waarbij geholpen wordt bij het maken van afbeeldingen met aangestuurde compositie, structuur of stijl, afhankelijk van het gekozen model." - ] - }, - "paramCFGScale": { - "heading": "CFG-schaal", - "paragraphs": [ - "Bepaalt hoeveel je prompt invloed heeft op het genereerproces." - ] - }, - "controlNetControlMode": { - "paragraphs": [ - "Geeft meer gewicht aan ofwel de prompt danwel ControlNet." - ], - "heading": "Controlemodus" - }, - "paramSteps": { - "heading": "Stappen", - "paragraphs": [ - "Het aantal uit te voeren stappen tijdens elke generatie.", - "Een hoger aantal stappen geven meestal betere afbeeldingen, ten koste van een hogere benodigde tijd om te genereren." - ] - }, - "paramPositiveConditioning": { - "heading": "Positieve prompt", - "paragraphs": [ - "Begeleidt het generartieproces. Gebruik een woord of frase naar keuze.", - "Syntaxes en embeddings voor Compel en dynamische prompts." - ] - }, - "lora": { - "heading": "Gewicht LoRA", - "paragraphs": [ - "Een hogere LoRA-gewicht zal leiden tot een groter effect op de uiteindelijke afbeelding." - ] - } - }, - "metadata": { - "seamless": "Naadloos", - "positivePrompt": "Positieve prompt", - "negativePrompt": "Negatieve prompt", - "generationMode": "Genereermodus", - "Threshold": "Drempelwaarde ruis", - "metadata": "Metagegevens", - "strength": "Sterkte Afbeelding naar afbeelding", - "seed": "Seedwaarde", - "imageDetails": "Afbeeldingsdetails", - "perlin": "Perlin-ruis", - "model": "Model", - "noImageDetails": "Geen afbeeldingsdetails gevonden", - "hiresFix": "Optimalisatie voor hoge resolutie", - "cfgScale": "CFG-schaal", - "fit": "Schaal aanpassen in Afbeelding naar afbeelding", - "initImage": "Initiële afbeelding", - "recallParameters": "Opnieuw aan te roepen parameters", - "height": "Hoogte", - "variations": "Paren seedwaarde-gewicht", - "noMetaData": "Geen metagegevens gevonden", - "width": "Breedte", - "createdBy": "Gemaakt door", - "workflow": "Werkstroom", - "steps": "Stappen", - "scheduler": "Planner", - "noRecallParameters": "Geen opnieuw uit te voeren parameters gevonden" - }, - "queue": { - "status": "Status", - "pruneSucceeded": "{{item_count}} voltooide onderdelen uit wachtrij opgeruimd", - "cancelTooltip": "Annuleer huidig onderdeel", - "queueEmpty": "Wachtrij leeg", - "pauseSucceeded": "Verwerker onderbroken", - "in_progress": "Bezig", - "queueFront": "Voeg vooraan toe in wachtrij", - "notReady": "Fout bij plaatsen in wachtrij", - "batchFailedToQueue": "Fout bij reeks in wachtrij plaatsen", - "completed": "Voltooid", - "queueBack": "Voeg toe aan wachtrij", - "batchValues": "Reekswaarden", - "cancelFailed": "Fout bij annuleren onderdeel", - "queueCountPrediction": "Voeg {{predicted}} toe aan wachtrij", - "batchQueued": "Reeks in wachtrij geplaatst", - "pauseFailed": "Fout bij onderbreken verwerker", - "clearFailed": "Fout bij wissen van wachtrij", - "queuedCount": "{{pending}} wachtend", - "front": "begin", - "clearSucceeded": "Wachtrij gewist", - "pause": "Onderbreek", - "pruneTooltip": "Ruim {{item_count}} voltooide onderdelen op", - "cancelSucceeded": "Onderdeel geannuleerd", - "batchQueuedDesc_one": "Voeg {{count}} sessie toe aan het {{direction}} van de wachtrij", - "batchQueuedDesc_other": "Voeg {{count}} sessies toe aan het {{direction}} van de wachtrij", - "graphQueued": "Graaf in wachtrij geplaatst", - "queue": "Wachtrij", - "batch": "Reeks", - "clearQueueAlertDialog": "Als je de wachtrij onmiddellijk wist, dan worden alle onderdelen die bezig zijn geannuleerd en wordt de wachtrij volledig gewist.", - "pending": "Wachtend", - "completedIn": "Voltooid na", - "resumeFailed": "Fout bij hervatten verwerker", - "clear": "Wis", - "prune": "Ruim op", - "total": "Totaal", - "canceled": "Geannuleerd", - "pruneFailed": "Fout bij opruimen van wachtrij", - "cancelBatchSucceeded": "Reeks geannuleerd", - "clearTooltip": "Annuleer en wis alle onderdelen", - "current": "Huidig", - "pauseTooltip": "Onderbreek verwerker", - "failed": "Mislukt", - "cancelItem": "Annuleer onderdeel", - "next": "Volgende", - "cancelBatch": "Annuleer reeks", - "back": "eind", - "cancel": "Annuleer", - "session": "Sessie", - "queueTotal": "Totaal {{total}}", - "resumeSucceeded": "Verwerker hervat", - "enqueueing": "Bezig met toevoegen van reeks aan wachtrij", - "resumeTooltip": "Hervat verwerker", - "queueMaxExceeded": "Max. aantal van {{max_queue_size}} overschreden, {{skip}} worden overgeslagen", - "resume": "Hervat", - "cancelBatchFailed": "Fout bij annuleren van reeks", - "clearQueueAlertDialog2": "Weet je zeker dat je de wachtrij wilt wissen?", - "item": "Onderdeel", - "graphFailedToQueue": "Fout bij toevoegen graaf aan wachtrij" - }, - "sdxl": { - "refinerStart": "Startwaarde verfijning", - "selectAModel": "Kies een model", - "scheduler": "Planner", - "cfgScale": "CFG-schaal", - "negStylePrompt": "Negatieve-stijlprompt", - "noModelsAvailable": "Geen modellen beschikbaar", - "refiner": "Verfijning", - "negAestheticScore": "Negatieve esthetische score", - "useRefiner": "Gebruik verfijning", - "denoisingStrength": "Sterkte ontruising", - "refinermodel": "Verfijningsmodel", - "posAestheticScore": "Positieve esthetische score", - "concatPromptStyle": "Plak prompt- en stijltekst aan elkaar", - "loading": "Bezig met laden...", - "steps": "Stappen", - "posStylePrompt": "Positieve-stijlprompt" - }, - "models": { - "noMatchingModels": "Geen overeenkomend modellen", - "loading": "bezig met laden", - "noMatchingLoRAs": "Geen overeenkomende LoRA's", - "noLoRAsAvailable": "Geen LoRA's beschikbaar", - "noModelsAvailable": "Geen modellen beschikbaar", - "selectModel": "Kies een model", - "selectLoRA": "Kies een LoRA" - }, - "boards": { - "autoAddBoard": "Voeg automatisch bord toe", - "topMessage": "Dit bord bevat afbeeldingen die in gebruik zijn door de volgende functies:", - "move": "Verplaats", - "menuItemAutoAdd": "Voeg dit automatisch toe aan bord", - "myBoard": "Mijn bord", - "searchBoard": "Zoek borden...", - "noMatching": "Geen overeenkomende borden", - "selectBoard": "Kies een bord", - "cancel": "Annuleer", - "addBoard": "Voeg bord toe", - "bottomMessage": "Als je dit bord en alle afbeeldingen erop verwijdert, dan worden alle functies teruggezet die ervan gebruik maken.", - "uncategorized": "Zonder categorie", - "downloadBoard": "Download bord", - "changeBoard": "Wijzig bord", - "loading": "Bezig met laden...", - "clearSearch": "Maak zoekopdracht leeg" - }, - "invocationCache": { - "disable": "Schakel uit", - "misses": "Mislukt cacheverzoek", - "enableFailed": "Fout bij inschakelen aanroepcache", - "invocationCache": "Aanroepcache", - "clearSucceeded": "Aanroepcache gewist", - "enableSucceeded": "Aanroepcache ingeschakeld", - "clearFailed": "Fout bij wissen aanroepcache", - "hits": "Gelukt cacheverzoek", - "disableSucceeded": "Aanroepcache uitgeschakeld", - "disableFailed": "Fout bij uitschakelen aanroepcache", - "enable": "Schakel in", - "clear": "Wis", - "maxCacheSize": "Max. grootte cache", - "cacheSize": "Grootte cache" - }, - "embedding": { - "noMatchingEmbedding": "Geen overeenkomende embeddings", - "addEmbedding": "Voeg embedding toe", - "incompatibleModel": "Niet-compatibel basismodel:" - } -} diff --git a/invokeai/frontend/web/dist/locales/pl.json b/invokeai/frontend/web/dist/locales/pl.json deleted file mode 100644 index f77c0c4710..0000000000 --- a/invokeai/frontend/web/dist/locales/pl.json +++ /dev/null @@ -1,461 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Skróty klawiszowe", - "languagePickerLabel": "Wybór języka", - "reportBugLabel": "Zgłoś błąd", - "settingsLabel": "Ustawienia", - "img2img": "Obraz na obraz", - "unifiedCanvas": "Tryb uniwersalny", - "nodes": "Węzły", - "langPolish": "Polski", - "nodesDesc": "W tym miejscu powstanie graficzny system generowania obrazów oparty na węzłach. Jest na co czekać!", - "postProcessing": "Przetwarzanie końcowe", - "postProcessDesc1": "Invoke AI oferuje wiele opcji przetwarzania końcowego. Z poziomu przeglądarki dostępne jest już zwiększanie rozdzielczości oraz poprawianie twarzy. Znajdziesz je wśród ustawień w trybach \"Tekst na obraz\" oraz \"Obraz na obraz\". Są również obecne w pasku menu wyświetlanym nad podglądem wygenerowanego obrazu.", - "postProcessDesc2": "Niedługo zostanie udostępniony specjalny interfejs, który będzie oferował jeszcze więcej możliwości.", - "postProcessDesc3": "Z poziomu linii poleceń już teraz dostępne są inne opcje, takie jak skalowanie obrazu metodą Embiggen.", - "training": "Trenowanie", - "trainingDesc1": "W tym miejscu dostępny będzie system przeznaczony do tworzenia własnych zanurzeń (ang. embeddings) i punktów kontrolnych przy użyciu metod w rodzaju inwersji tekstowej lub Dreambooth.", - "trainingDesc2": "Obecnie jest możliwe tworzenie własnych zanurzeń przy użyciu skryptów wywoływanych z linii poleceń.", - "upload": "Prześlij", - "close": "Zamknij", - "load": "Załaduj", - "statusConnected": "Połączono z serwerem", - "statusDisconnected": "Odłączono od serwera", - "statusError": "Błąd", - "statusPreparing": "Przygotowywanie", - "statusProcessingCanceled": "Anulowano przetwarzanie", - "statusProcessingComplete": "Zakończono przetwarzanie", - "statusGenerating": "Przetwarzanie", - "statusGeneratingTextToImage": "Przetwarzanie tekstu na obraz", - "statusGeneratingImageToImage": "Przetwarzanie obrazu na obraz", - "statusGeneratingInpainting": "Przemalowywanie", - "statusGeneratingOutpainting": "Domalowywanie", - "statusGenerationComplete": "Zakończono generowanie", - "statusIterationComplete": "Zakończono iterację", - "statusSavingImage": "Zapisywanie obrazu", - "statusRestoringFaces": "Poprawianie twarzy", - "statusRestoringFacesGFPGAN": "Poprawianie twarzy (GFPGAN)", - "statusRestoringFacesCodeFormer": "Poprawianie twarzy (CodeFormer)", - "statusUpscaling": "Powiększanie obrazu", - "statusUpscalingESRGAN": "Powiększanie (ESRGAN)", - "statusLoadingModel": "Wczytywanie modelu", - "statusModelChanged": "Zmieniono model", - "githubLabel": "GitHub", - "discordLabel": "Discord", - "darkMode": "Tryb ciemny", - "lightMode": "Tryb jasny" - }, - "gallery": { - "generations": "Wygenerowane", - "showGenerations": "Pokaż wygenerowane obrazy", - "uploads": "Przesłane", - "showUploads": "Pokaż przesłane obrazy", - "galleryImageSize": "Rozmiar obrazów", - "galleryImageResetSize": "Resetuj rozmiar", - "gallerySettings": "Ustawienia galerii", - "maintainAspectRatio": "Zachowaj proporcje", - "autoSwitchNewImages": "Przełączaj na nowe obrazy", - "singleColumnLayout": "Układ jednokolumnowy", - "allImagesLoaded": "Koniec listy", - "loadMore": "Wczytaj więcej", - "noImagesInGallery": "Brak obrazów w galerii" - }, - "hotkeys": { - "keyboardShortcuts": "Skróty klawiszowe", - "appHotkeys": "Podstawowe", - "generalHotkeys": "Pomocnicze", - "galleryHotkeys": "Galeria", - "unifiedCanvasHotkeys": "Tryb uniwersalny", - "invoke": { - "title": "Wywołaj", - "desc": "Generuje nowy obraz" - }, - "cancel": { - "title": "Anuluj", - "desc": "Zatrzymuje generowanie obrazu" - }, - "focusPrompt": { - "title": "Aktywuj pole tekstowe", - "desc": "Aktywuje pole wprowadzania sugestii" - }, - "toggleOptions": { - "title": "Przełącz panel opcji", - "desc": "Wysuwa lub chowa panel opcji" - }, - "pinOptions": { - "title": "Przypnij opcje", - "desc": "Przypina panel opcji" - }, - "toggleViewer": { - "title": "Przełącz podgląd", - "desc": "Otwiera lub zamyka widok podglądu" - }, - "toggleGallery": { - "title": "Przełącz galerię", - "desc": "Wysuwa lub chowa galerię" - }, - "maximizeWorkSpace": { - "title": "Powiększ obraz roboczy", - "desc": "Chowa wszystkie panele, zostawia tylko podgląd obrazu" - }, - "changeTabs": { - "title": "Przełącznie trybu", - "desc": "Przełącza na n-ty tryb pracy" - }, - "consoleToggle": { - "title": "Przełącz konsolę", - "desc": "Otwiera lub chowa widok konsoli" - }, - "setPrompt": { - "title": "Skopiuj sugestie", - "desc": "Kopiuje sugestie z aktywnego obrazu" - }, - "setSeed": { - "title": "Skopiuj inicjator", - "desc": "Kopiuje inicjator z aktywnego obrazu" - }, - "setParameters": { - "title": "Skopiuj wszystko", - "desc": "Kopiuje wszystkie parametry z aktualnie aktywnego obrazu" - }, - "restoreFaces": { - "title": "Popraw twarze", - "desc": "Uruchamia proces poprawiania twarzy dla aktywnego obrazu" - }, - "upscale": { - "title": "Powiększ", - "desc": "Uruchamia proces powiększania aktywnego obrazu" - }, - "showInfo": { - "title": "Pokaż informacje", - "desc": "Pokazuje metadane zapisane w aktywnym obrazie" - }, - "sendToImageToImage": { - "title": "Użyj w trybie \"Obraz na obraz\"", - "desc": "Ustawia aktywny obraz jako źródło w trybie \"Obraz na obraz\"" - }, - "deleteImage": { - "title": "Usuń obraz", - "desc": "Usuwa aktywny obraz" - }, - "closePanels": { - "title": "Zamknij panele", - "desc": "Zamyka wszystkie otwarte panele" - }, - "previousImage": { - "title": "Poprzedni obraz", - "desc": "Aktywuje poprzedni obraz z galerii" - }, - "nextImage": { - "title": "Następny obraz", - "desc": "Aktywuje następny obraz z galerii" - }, - "toggleGalleryPin": { - "title": "Przypnij galerię", - "desc": "Przypina lub odpina widok galerii" - }, - "increaseGalleryThumbSize": { - "title": "Powiększ obrazy", - "desc": "Powiększa rozmiar obrazów w galerii" - }, - "decreaseGalleryThumbSize": { - "title": "Pomniejsz obrazy", - "desc": "Pomniejsza rozmiar obrazów w galerii" - }, - "selectBrush": { - "title": "Aktywuj pędzel", - "desc": "Aktywuje narzędzie malowania" - }, - "selectEraser": { - "title": "Aktywuj gumkę", - "desc": "Aktywuje narzędzie usuwania" - }, - "decreaseBrushSize": { - "title": "Zmniejsz rozmiar narzędzia", - "desc": "Zmniejsza rozmiar aktywnego narzędzia" - }, - "increaseBrushSize": { - "title": "Zwiększ rozmiar narzędzia", - "desc": "Zwiększa rozmiar aktywnego narzędzia" - }, - "decreaseBrushOpacity": { - "title": "Zmniejsz krycie", - "desc": "Zmniejsza poziom krycia pędzla" - }, - "increaseBrushOpacity": { - "title": "Zwiększ", - "desc": "Zwiększa poziom krycia pędzla" - }, - "moveTool": { - "title": "Aktywuj przesunięcie", - "desc": "Włącza narzędzie przesuwania" - }, - "fillBoundingBox": { - "title": "Wypełnij zaznaczenie", - "desc": "Wypełnia zaznaczony obszar aktualnym kolorem pędzla" - }, - "eraseBoundingBox": { - "title": "Wyczyść zaznaczenia", - "desc": "Usuwa całą zawartość zaznaczonego obszaru" - }, - "colorPicker": { - "title": "Aktywuj pipetę", - "desc": "Włącza narzędzie kopiowania koloru" - }, - "toggleSnap": { - "title": "Przyciąganie do siatki", - "desc": "Włącza lub wyłącza opcje przyciągania do siatki" - }, - "quickToggleMove": { - "title": "Szybkie przesunięcie", - "desc": "Tymczasowo włącza tryb przesuwania obszaru roboczego" - }, - "toggleLayer": { - "title": "Przełącz wartwę", - "desc": "Przełącza pomiędzy warstwą bazową i maskowania" - }, - "clearMask": { - "title": "Wyczyść maskę", - "desc": "Usuwa całą zawartość warstwy maskowania" - }, - "hideMask": { - "title": "Przełącz maskę", - "desc": "Pokazuje lub ukrywa podgląd maski" - }, - "showHideBoundingBox": { - "title": "Przełącz zaznaczenie", - "desc": "Pokazuje lub ukrywa podgląd zaznaczenia" - }, - "mergeVisible": { - "title": "Połącz widoczne", - "desc": "Łączy wszystkie widoczne maski w jeden obraz" - }, - "saveToGallery": { - "title": "Zapisz w galerii", - "desc": "Zapisuje całą zawartość płótna w galerii" - }, - "copyToClipboard": { - "title": "Skopiuj do schowka", - "desc": "Zapisuje zawartość płótna w schowku systemowym" - }, - "downloadImage": { - "title": "Pobierz obraz", - "desc": "Zapisuje zawartość płótna do pliku obrazu" - }, - "undoStroke": { - "title": "Cofnij", - "desc": "Cofa ostatnie pociągnięcie pędzlem" - }, - "redoStroke": { - "title": "Ponawia", - "desc": "Ponawia cofnięte pociągnięcie pędzlem" - }, - "resetView": { - "title": "Resetuj widok", - "desc": "Centruje widok płótna" - }, - "previousStagingImage": { - "title": "Poprzedni obraz tymczasowy", - "desc": "Pokazuje poprzedni obraz tymczasowy" - }, - "nextStagingImage": { - "title": "Następny obraz tymczasowy", - "desc": "Pokazuje następny obraz tymczasowy" - }, - "acceptStagingImage": { - "title": "Akceptuj obraz tymczasowy", - "desc": "Akceptuje aktualnie wybrany obraz tymczasowy" - } - }, - "parameters": { - "images": "L. obrazów", - "steps": "L. kroków", - "cfgScale": "Skala CFG", - "width": "Szerokość", - "height": "Wysokość", - "seed": "Inicjator", - "randomizeSeed": "Losowy inicjator", - "shuffle": "Losuj", - "noiseThreshold": "Poziom szumu", - "perlinNoise": "Szum Perlina", - "variations": "Wariacje", - "variationAmount": "Poziom zróżnicowania", - "seedWeights": "Wariacje inicjatora", - "faceRestoration": "Poprawianie twarzy", - "restoreFaces": "Popraw twarze", - "type": "Metoda", - "strength": "Siła", - "upscaling": "Powiększanie", - "upscale": "Powiększ", - "upscaleImage": "Powiększ obraz", - "scale": "Skala", - "otherOptions": "Pozostałe opcje", - "seamlessTiling": "Płynne scalanie", - "hiresOptim": "Optymalizacja wys. rozdzielczości", - "imageFit": "Przeskaluj oryginalny obraz", - "codeformerFidelity": "Dokładność", - "scaleBeforeProcessing": "Tryb skalowania", - "scaledWidth": "Sk. do szer.", - "scaledHeight": "Sk. do wys.", - "infillMethod": "Metoda wypełniania", - "tileSize": "Rozmiar kafelka", - "boundingBoxHeader": "Zaznaczony obszar", - "seamCorrectionHeader": "Scalanie", - "infillScalingHeader": "Wypełnienie i skalowanie", - "img2imgStrength": "Wpływ sugestii na obraz", - "toggleLoopback": "Wł/wył sprzężenie zwrotne", - "sendTo": "Wyślij do", - "sendToImg2Img": "Użyj w trybie \"Obraz na obraz\"", - "sendToUnifiedCanvas": "Użyj w trybie uniwersalnym", - "copyImageToLink": "Skopiuj adres obrazu", - "downloadImage": "Pobierz obraz", - "openInViewer": "Otwórz podgląd", - "closeViewer": "Zamknij podgląd", - "usePrompt": "Skopiuj sugestie", - "useSeed": "Skopiuj inicjator", - "useAll": "Skopiuj wszystko", - "useInitImg": "Użyj oryginalnego obrazu", - "info": "Informacje", - "initialImage": "Oryginalny obraz", - "showOptionsPanel": "Pokaż panel ustawień" - }, - "settings": { - "models": "Modele", - "displayInProgress": "Podgląd generowanego obrazu", - "saveSteps": "Zapisuj obrazy co X kroków", - "confirmOnDelete": "Potwierdzaj usuwanie", - "displayHelpIcons": "Wyświetlaj ikony pomocy", - "enableImageDebugging": "Włącz debugowanie obrazu", - "resetWebUI": "Zresetuj interfejs", - "resetWebUIDesc1": "Resetowanie interfejsu wyczyści jedynie dane i ustawienia zapisane w pamięci przeglądarki. Nie usunie żadnych obrazów z dysku.", - "resetWebUIDesc2": "Jeśli obrazy nie są poprawnie wyświetlane w galerii lub doświadczasz innych problemów, przed zgłoszeniem błędu spróbuj zresetować interfejs.", - "resetComplete": "Interfejs został zresetowany. Odśwież stronę, aby załadować ponownie." - }, - "toast": { - "tempFoldersEmptied": "Wyczyszczono folder tymczasowy", - "uploadFailed": "Błąd przesyłania obrazu", - "uploadFailedUnableToLoadDesc": "Błąd wczytywania obrazu", - "downloadImageStarted": "Rozpoczęto pobieranie", - "imageCopied": "Skopiowano obraz", - "imageLinkCopied": "Skopiowano link do obrazu", - "imageNotLoaded": "Nie wczytano obrazu", - "imageNotLoadedDesc": "Nie znaleziono obrazu, który można użyć w Obraz na obraz", - "imageSavedToGallery": "Zapisano obraz w galerii", - "canvasMerged": "Scalono widoczne warstwy", - "sentToImageToImage": "Wysłano do Obraz na obraz", - "sentToUnifiedCanvas": "Wysłano do trybu uniwersalnego", - "parametersSet": "Ustawiono parametry", - "parametersNotSet": "Nie ustawiono parametrów", - "parametersNotSetDesc": "Nie znaleziono metadanych dla wybranego obrazu", - "parametersFailed": "Problem z wczytaniem parametrów", - "parametersFailedDesc": "Problem z wczytaniem oryginalnego obrazu", - "seedSet": "Ustawiono inicjator", - "seedNotSet": "Nie ustawiono inicjatora", - "seedNotSetDesc": "Nie znaleziono inicjatora dla wybranego obrazu", - "promptSet": "Ustawiono sugestie", - "promptNotSet": "Nie ustawiono sugestii", - "promptNotSetDesc": "Nie znaleziono zapytania dla wybranego obrazu", - "upscalingFailed": "Błąd powiększania obrazu", - "faceRestoreFailed": "Błąd poprawiania twarzy", - "metadataLoadFailed": "Błąd wczytywania metadanych", - "initialImageSet": "Ustawiono oryginalny obraz", - "initialImageNotSet": "Nie ustawiono oryginalnego obrazu", - "initialImageNotSetDesc": "Błąd wczytywania oryginalnego obrazu" - }, - "tooltip": { - "feature": { - "prompt": "To pole musi zawierać cały tekst sugestii, w tym zarówno opis oczekiwanej zawartości, jak i terminy stylistyczne. Chociaż wagi mogą być zawarte w sugestiach, inne parametry znane z linii poleceń nie będą działać.", - "gallery": "W miarę generowania nowych wywołań w tym miejscu będą wyświetlane pliki z katalogu wyjściowego. Obrazy mają dodatkowo opcje konfiguracji nowych wywołań.", - "other": "Opcje umożliwią alternatywne tryby przetwarzania. Płynne scalanie będzie pomocne przy generowaniu powtarzających się wzorów. Optymalizacja wysokiej rozdzielczości wykonuje dwuetapowy cykl generowania i powinna być używana przy wyższych rozdzielczościach, gdy potrzebny jest bardziej spójny obraz/kompozycja.", - "seed": "Inicjator określa początkowy zestaw szumów, który kieruje procesem odszumiania i może być losowy lub pobrany z poprzedniego wywołania. Funkcja \"Poziom szumu\" może być użyta do złagodzenia saturacji przy wyższych wartościach CFG (spróbuj między 0-10), a Perlin może być użyty w celu dodania wariacji do twoich wyników.", - "variations": "Poziom zróżnicowania przyjmuje wartości od 0 do 1 i pozwala zmienić obraz wyjściowy dla ustawionego inicjatora. Interesujące wyniki uzyskuje się zwykle między 0,1 a 0,3.", - "upscale": "Korzystając z ESRGAN, możesz zwiększyć rozdzielczość obrazu wyjściowego bez konieczności zwiększania szerokości/wysokości w ustawieniach początkowych.", - "faceCorrection": "Poprawianie twarzy próbuje identyfikować twarze na obrazie wyjściowym i korygować wszelkie defekty/nieprawidłowości. W GFPGAN im większa siła, tym mocniejszy efekt. W metodzie Codeformer wyższa wartość oznacza bardziej wierne odtworzenie oryginalnej twarzy, nawet kosztem siły korekcji.", - "imageToImage": "Tryb \"Obraz na obraz\" pozwala na załadowanie obrazu wzorca, który obok wprowadzonych sugestii zostanie użyty porzez InvokeAI do wygenerowania nowego obrazu. Niższa wartość tego ustawienia będzie bardziej przypominać oryginalny obraz. Akceptowane są wartości od 0 do 1, a zalecany jest zakres od 0,25 do 0,75.", - "boundingBox": "Zaznaczony obszar odpowiada ustawieniom wysokości i szerokości w trybach Tekst na obraz i Obraz na obraz. Jedynie piksele znajdujące się w obszarze zaznaczenia zostaną uwzględnione podczas wywoływania nowego obrazu.", - "seamCorrection": "Opcje wpływające na poziom widoczności szwów, które mogą wystąpić, gdy wygenerowany obraz jest ponownie wklejany na płótno.", - "infillAndScaling": "Zarządzaj metodami wypełniania (używanymi na zamaskowanych lub wymazanych obszarach płótna) i skalowaniem (przydatne w przypadku zaznaczonego obszaru o b. małych rozmiarach)." - } - }, - "unifiedCanvas": { - "layer": "Warstwa", - "base": "Główna", - "mask": "Maska", - "maskingOptions": "Opcje maski", - "enableMask": "Włącz maskę", - "preserveMaskedArea": "Zachowaj obszar", - "clearMask": "Wyczyść maskę", - "brush": "Pędzel", - "eraser": "Gumka", - "fillBoundingBox": "Wypełnij zaznaczenie", - "eraseBoundingBox": "Wyczyść zaznaczenie", - "colorPicker": "Pipeta", - "brushOptions": "Ustawienia pędzla", - "brushSize": "Rozmiar", - "move": "Przesunięcie", - "resetView": "Resetuj widok", - "mergeVisible": "Scal warstwy", - "saveToGallery": "Zapisz w galerii", - "copyToClipboard": "Skopiuj do schowka", - "downloadAsImage": "Zapisz do pliku", - "undo": "Cofnij", - "redo": "Ponów", - "clearCanvas": "Wyczyść obraz", - "canvasSettings": "Ustawienia obrazu", - "showIntermediates": "Pokazuj stany pośrednie", - "showGrid": "Pokazuj siatkę", - "snapToGrid": "Przyciągaj do siatki", - "darkenOutsideSelection": "Przyciemnij poza zaznaczeniem", - "autoSaveToGallery": "Zapisuj automatycznie do galerii", - "saveBoxRegionOnly": "Zapisuj tylko zaznaczony obszar", - "limitStrokesToBox": "Rysuj tylko wewnątrz zaznaczenia", - "showCanvasDebugInfo": "Informacje dla developera", - "clearCanvasHistory": "Wyczyść historię operacji", - "clearHistory": "Wyczyść historię", - "clearCanvasHistoryMessage": "Wyczyszczenie historii nie będzie miało wpływu na sam obraz, ale niemożliwe będzie cofnięcie i otworzenie wszystkich wykonanych do tej pory operacji.", - "clearCanvasHistoryConfirm": "Czy na pewno chcesz wyczyścić historię operacji?", - "emptyTempImageFolder": "Wyczyść folder tymczasowy", - "emptyFolder": "Wyczyść", - "emptyTempImagesFolderMessage": "Wyczyszczenie folderu tymczasowego spowoduje usunięcie obrazu i maski w trybie uniwersalnym, historii operacji, oraz wszystkich wygenerowanych ale niezapisanych obrazów.", - "emptyTempImagesFolderConfirm": "Czy na pewno chcesz wyczyścić folder tymczasowy?", - "activeLayer": "Warstwa aktywna", - "canvasScale": "Poziom powiększenia", - "boundingBox": "Rozmiar zaznaczenia", - "scaledBoundingBox": "Rozmiar po skalowaniu", - "boundingBoxPosition": "Pozycja zaznaczenia", - "canvasDimensions": "Rozmiar płótna", - "canvasPosition": "Pozycja płótna", - "cursorPosition": "Pozycja kursora", - "previous": "Poprzedni", - "next": "Następny", - "accept": "Zaakceptuj", - "showHide": "Pokaż/Ukryj", - "discardAll": "Odrzuć wszystkie", - "betaClear": "Wyczyść", - "betaDarkenOutside": "Przyciemnienie", - "betaLimitToBox": "Ogranicz do zaznaczenia", - "betaPreserveMasked": "Zachowaj obszar" - }, - "accessibility": { - "zoomIn": "Przybliż", - "exitViewer": "Wyjdź z podglądu", - "modelSelect": "Wybór modelu", - "invokeProgressBar": "Pasek postępu", - "reset": "Zerowanie", - "useThisParameter": "Użyj tego parametru", - "copyMetadataJson": "Kopiuj metadane JSON", - "uploadImage": "Wgrywanie obrazu", - "previousImage": "Poprzedni obraz", - "nextImage": "Następny obraz", - "zoomOut": "Oddal", - "rotateClockwise": "Obróć zgodnie ze wskazówkami zegara", - "rotateCounterClockwise": "Obróć przeciwnie do wskazówek zegara", - "flipHorizontally": "Odwróć horyzontalnie", - "flipVertically": "Odwróć wertykalnie", - "modifyConfig": "Modyfikuj ustawienia", - "toggleAutoscroll": "Przełącz autoprzewijanie", - "toggleLogViewer": "Przełącz podgląd logów", - "showOptionsPanel": "Pokaż panel opcji", - "menu": "Menu" - } -} diff --git a/invokeai/frontend/web/dist/locales/pt.json b/invokeai/frontend/web/dist/locales/pt.json deleted file mode 100644 index ac9dd50b4d..0000000000 --- a/invokeai/frontend/web/dist/locales/pt.json +++ /dev/null @@ -1,602 +0,0 @@ -{ - "common": { - "langArabic": "العربية", - "reportBugLabel": "Reportar Bug", - "settingsLabel": "Configurações", - "langBrPortuguese": "Português do Brasil", - "languagePickerLabel": "Seletor de Idioma", - "langDutch": "Nederlands", - "langEnglish": "English", - "hotkeysLabel": "Hotkeys", - "langPolish": "Polski", - "langFrench": "Français", - "langGerman": "Deutsch", - "langItalian": "Italiano", - "langJapanese": "日本語", - "langSimplifiedChinese": "简体中文", - "langSpanish": "Espanhol", - "langRussian": "Русский", - "langUkranian": "Украї́нська", - "img2img": "Imagem para Imagem", - "unifiedCanvas": "Tela Unificada", - "nodes": "Nós", - "nodesDesc": "Um sistema baseado em nós para a geração de imagens está em desenvolvimento atualmente. Fique atento para atualizações sobre este recurso incrível.", - "postProcessDesc3": "A Interface de Linha de Comando do Invoke AI oferece vários outros recursos, incluindo o Embiggen.", - "postProcessing": "Pós Processamento", - "postProcessDesc1": "O Invoke AI oferece uma ampla variedade de recursos de pós-processamento. O aumento de resolução de imagem e a restauração de rosto já estão disponíveis na interface do usuário da Web. Você pode acessá-los no menu Opções Avançadas das guias Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da exibição da imagem atual ou no visualizador.", - "postProcessDesc2": "Em breve, uma interface do usuário dedicada será lançada para facilitar fluxos de trabalho de pós-processamento mais avançados.", - "trainingDesc1": "Um fluxo de trabalho dedicado para treinar seus próprios embeddings e checkpoints usando Textual Inversion e Dreambooth da interface da web.", - "trainingDesc2": "O InvokeAI já oferece suporte ao treinamento de embeddings personalizados usando a Inversão Textual por meio do script principal.", - "upload": "Upload", - "statusError": "Erro", - "statusGeneratingTextToImage": "Gerando Texto para Imagem", - "close": "Fechar", - "load": "Abrir", - "back": "Voltar", - "statusConnected": "Conectado", - "statusDisconnected": "Desconectado", - "statusPreparing": "Preparando", - "statusGenerating": "Gerando", - "statusProcessingCanceled": "Processamento Cancelado", - "statusProcessingComplete": "Processamento Completo", - "statusGeneratingImageToImage": "Gerando Imagem para Imagem", - "statusGeneratingInpainting": "Geração de Preenchimento de Lacunas", - "statusIterationComplete": "Iteração Completa", - "statusSavingImage": "Salvando Imagem", - "statusRestoringFacesGFPGAN": "Restaurando Faces (GFPGAN)", - "statusRestoringFaces": "Restaurando Faces", - "statusRestoringFacesCodeFormer": "Restaurando Faces (CodeFormer)", - "statusUpscaling": "Ampliando", - "statusUpscalingESRGAN": "Ampliando (ESRGAN)", - "statusConvertingModel": "Convertendo Modelo", - "statusModelConverted": "Modelo Convertido", - "statusLoadingModel": "Carregando Modelo", - "statusModelChanged": "Modelo Alterado", - "githubLabel": "Github", - "discordLabel": "Discord", - "training": "Treinando", - "statusGeneratingOutpainting": "Geração de Ampliação", - "statusGenerationComplete": "Geração Completa", - "statusMergingModels": "Mesclando Modelos", - "statusMergedModels": "Modelos Mesclados", - "loading": "A carregar", - "loadingInvokeAI": "A carregar Invoke AI", - "langPortuguese": "Português" - }, - "gallery": { - "galleryImageResetSize": "Resetar Imagem", - "gallerySettings": "Configurações de Galeria", - "maintainAspectRatio": "Mater Proporções", - "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", - "singleColumnLayout": "Disposição em Coluna Única", - "allImagesLoaded": "Todas as Imagens Carregadas", - "loadMore": "Carregar Mais", - "noImagesInGallery": "Sem Imagens na Galeria", - "generations": "Gerações", - "showGenerations": "Mostrar Gerações", - "uploads": "Enviados", - "showUploads": "Mostrar Enviados", - "galleryImageSize": "Tamanho da Imagem" - }, - "hotkeys": { - "generalHotkeys": "Atalhos Gerais", - "galleryHotkeys": "Atalhos da Galeria", - "toggleViewer": { - "title": "Ativar Visualizador", - "desc": "Abrir e fechar o Visualizador de Imagens" - }, - "maximizeWorkSpace": { - "desc": "Fechar painéis e maximixar área de trabalho", - "title": "Maximizar a Área de Trabalho" - }, - "changeTabs": { - "title": "Mudar Guias", - "desc": "Trocar para outra área de trabalho" - }, - "consoleToggle": { - "desc": "Abrir e fechar console", - "title": "Ativar Console" - }, - "setPrompt": { - "title": "Definir Prompt", - "desc": "Usar o prompt da imagem atual" - }, - "sendToImageToImage": { - "desc": "Manda a imagem atual para Imagem Para Imagem", - "title": "Mandar para Imagem Para Imagem" - }, - "previousImage": { - "desc": "Mostra a imagem anterior na galeria", - "title": "Imagem Anterior" - }, - "nextImage": { - "title": "Próxima Imagem", - "desc": "Mostra a próxima imagem na galeria" - }, - "decreaseGalleryThumbSize": { - "desc": "Diminui o tamanho das thumbs na galeria", - "title": "Diminuir Tamanho da Galeria de Imagem" - }, - "selectBrush": { - "title": "Selecionar Pincel", - "desc": "Seleciona o pincel" - }, - "selectEraser": { - "title": "Selecionar Apagador", - "desc": "Seleciona o apagador" - }, - "decreaseBrushSize": { - "title": "Diminuir Tamanho do Pincel", - "desc": "Diminui o tamanho do pincel/apagador" - }, - "increaseBrushOpacity": { - "desc": "Aumenta a opacidade do pincel", - "title": "Aumentar Opacidade do Pincel" - }, - "moveTool": { - "title": "Ferramenta Mover", - "desc": "Permite navegar pela tela" - }, - "decreaseBrushOpacity": { - "desc": "Diminui a opacidade do pincel", - "title": "Diminuir Opacidade do Pincel" - }, - "toggleSnap": { - "title": "Ativar Encaixe", - "desc": "Ativa Encaixar na Grade" - }, - "quickToggleMove": { - "title": "Ativar Mover Rapidamente", - "desc": "Temporariamente ativa o modo Mover" - }, - "toggleLayer": { - "title": "Ativar Camada", - "desc": "Ativa a seleção de camada de máscara/base" - }, - "clearMask": { - "title": "Limpar Máscara", - "desc": "Limpa toda a máscara" - }, - "hideMask": { - "title": "Esconder Máscara", - "desc": "Esconde e Revela a máscara" - }, - "mergeVisible": { - "title": "Fundir Visível", - "desc": "Fundir todas as camadas visíveis das telas" - }, - "downloadImage": { - "desc": "Descarregar a tela atual", - "title": "Descarregar Imagem" - }, - "undoStroke": { - "title": "Desfazer Traço", - "desc": "Desfaz um traço de pincel" - }, - "redoStroke": { - "title": "Refazer Traço", - "desc": "Refaz o traço de pincel" - }, - "keyboardShortcuts": "Atalhos de Teclado", - "appHotkeys": "Atalhos do app", - "invoke": { - "title": "Invocar", - "desc": "Gerar uma imagem" - }, - "cancel": { - "title": "Cancelar", - "desc": "Cancelar geração de imagem" - }, - "focusPrompt": { - "title": "Foco do Prompt", - "desc": "Foco da área de texto do prompt" - }, - "toggleOptions": { - "title": "Ativar Opções", - "desc": "Abrir e fechar o painel de opções" - }, - "pinOptions": { - "title": "Fixar Opções", - "desc": "Fixar o painel de opções" - }, - "closePanels": { - "title": "Fechar Painéis", - "desc": "Fecha os painéis abertos" - }, - "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", - "toggleGallery": { - "title": "Ativar Galeria", - "desc": "Abrir e fechar a gaveta da galeria" - }, - "setSeed": { - "title": "Definir Seed", - "desc": "Usar seed da imagem atual" - }, - "setParameters": { - "title": "Definir Parâmetros", - "desc": "Usar todos os parâmetros da imagem atual" - }, - "restoreFaces": { - "title": "Restaurar Rostos", - "desc": "Restaurar a imagem atual" - }, - "upscale": { - "title": "Redimensionar", - "desc": "Redimensionar a imagem atual" - }, - "showInfo": { - "title": "Mostrar Informações", - "desc": "Mostrar metadados de informações da imagem atual" - }, - "deleteImage": { - "title": "Apagar Imagem", - "desc": "Apaga a imagem atual" - }, - "toggleGalleryPin": { - "title": "Ativar Fixar Galeria", - "desc": "Fixa e desafixa a galeria na interface" - }, - "increaseGalleryThumbSize": { - "title": "Aumentar Tamanho da Galeria de Imagem", - "desc": "Aumenta o tamanho das thumbs na galeria" - }, - "increaseBrushSize": { - "title": "Aumentar Tamanho do Pincel", - "desc": "Aumenta o tamanho do pincel/apagador" - }, - "fillBoundingBox": { - "title": "Preencher Caixa Delimitadora", - "desc": "Preenche a caixa delimitadora com a cor do pincel" - }, - "eraseBoundingBox": { - "title": "Apagar Caixa Delimitadora", - "desc": "Apaga a área da caixa delimitadora" - }, - "colorPicker": { - "title": "Selecionar Seletor de Cor", - "desc": "Seleciona o seletor de cores" - }, - "showHideBoundingBox": { - "title": "Mostrar/Esconder Caixa Delimitadora", - "desc": "Ativa a visibilidade da caixa delimitadora" - }, - "saveToGallery": { - "title": "Gravara Na Galeria", - "desc": "Grava a tela atual na galeria" - }, - "copyToClipboard": { - "title": "Copiar para a Área de Transferência", - "desc": "Copia a tela atual para a área de transferência" - }, - "resetView": { - "title": "Resetar Visualização", - "desc": "Reseta Visualização da Tela" - }, - "previousStagingImage": { - "title": "Imagem de Preparação Anterior", - "desc": "Área de Imagem de Preparação Anterior" - }, - "nextStagingImage": { - "title": "Próxima Imagem de Preparação Anterior", - "desc": "Próxima Área de Imagem de Preparação Anterior" - }, - "acceptStagingImage": { - "title": "Aceitar Imagem de Preparação Anterior", - "desc": "Aceitar Área de Imagem de Preparação Anterior" - } - }, - "modelManager": { - "modelAdded": "Modelo Adicionado", - "modelUpdated": "Modelo Atualizado", - "modelEntryDeleted": "Entrada de modelo excluída", - "description": "Descrição", - "modelLocationValidationMsg": "Caminho para onde o seu modelo está localizado.", - "repo_id": "Repo ID", - "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", - "width": "Largura", - "widthValidationMsg": "Largura padrão do seu modelo.", - "height": "Altura", - "heightValidationMsg": "Altura padrão do seu modelo.", - "findModels": "Encontrar Modelos", - "scanAgain": "Digitalize Novamente", - "deselectAll": "Deselecionar Tudo", - "showExisting": "Mostrar Existente", - "deleteConfig": "Apagar Config", - "convertToDiffusersHelpText6": "Deseja converter este modelo?", - "mergedModelName": "Nome do modelo mesclado", - "alpha": "Alpha", - "interpolationType": "Tipo de Interpolação", - "modelMergeHeaderHelp1": "Pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", - "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro.", - "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", - "nameValidationMsg": "Insira um nome para o seu modelo", - "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", - "config": "Configuração", - "modelExists": "Modelo Existe", - "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", - "noModelsFound": "Nenhum Modelo Encontrado", - "v2_768": "v2 (768px)", - "inpainting": "v1 Inpainting", - "customConfig": "Configuração personalizada", - "pathToCustomConfig": "Caminho para configuração personalizada", - "statusConverting": "A converter", - "modelConverted": "Modelo Convertido", - "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", - "addDifference": "Adicionar diferença", - "pickModelType": "Escolha o tipo de modelo", - "safetensorModels": "SafeTensors", - "cannotUseSpaces": "Não pode usar espaços", - "addNew": "Adicionar Novo", - "addManually": "Adicionar Manualmente", - "manual": "Manual", - "name": "Nome", - "configValidationMsg": "Caminho para o ficheiro de configuração do seu modelo.", - "modelLocation": "Localização do modelo", - "repoIDValidationMsg": "Repositório Online do seu Modelo", - "updateModel": "Atualizar Modelo", - "availableModels": "Modelos Disponíveis", - "load": "Carregar", - "active": "Ativado", - "notLoaded": "Não carregado", - "deleteModel": "Apagar modelo", - "deleteMsg1": "Tem certeza de que deseja apagar esta entrada do modelo de InvokeAI?", - "deleteMsg2": "Isso não vai apagar o ficheiro de modelo checkpoint do seu disco. Pode lê-los, se desejar.", - "convertToDiffusers": "Converter para Diffusers", - "convertToDiffusersHelpText1": "Este modelo será convertido ao formato 🧨 Diffusers.", - "convertToDiffusersHelpText2": "Este processo irá substituir a sua entrada de Gestor de Modelos por uma versão Diffusers do mesmo modelo.", - "convertToDiffusersHelpText3": "O seu ficheiro de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Pode adicionar o seu ponto de verificação ao Gestor de modelos novamente, se desejar.", - "convertToDiffusersSaveLocation": "Local para Gravar", - "v2_base": "v2 (512px)", - "mergeModels": "Mesclar modelos", - "modelOne": "Modelo 1", - "modelTwo": "Modelo 2", - "modelThree": "Modelo 3", - "mergedModelSaveLocation": "Local de Salvamento", - "merge": "Mesclar", - "modelsMerged": "Modelos mesclados", - "mergedModelCustomSaveLocation": "Caminho Personalizado", - "invokeAIFolder": "Pasta Invoke AI", - "inverseSigmoid": "Sigmóide Inversa", - "none": "nenhum", - "modelManager": "Gerente de Modelo", - "model": "Modelo", - "allModels": "Todos os Modelos", - "checkpointModels": "Checkpoints", - "diffusersModels": "Diffusers", - "addNewModel": "Adicionar Novo modelo", - "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", - "addDiffuserModel": "Adicionar Diffusers", - "vaeLocation": "Localização VAE", - "vaeLocationValidationMsg": "Caminho para onde o seu VAE está localizado.", - "vaeRepoID": "VAE Repo ID", - "addModel": "Adicionar Modelo", - "search": "Procurar", - "cached": "Em cache", - "checkpointFolder": "Pasta de Checkpoint", - "clearCheckpointFolder": "Apagar Pasta de Checkpoint", - "modelsFound": "Modelos Encontrados", - "selectFolder": "Selecione a Pasta", - "selected": "Selecionada", - "selectAll": "Selecionar Tudo", - "addSelected": "Adicione Selecionado", - "delete": "Apagar", - "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", - "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", - "formMessageDiffusersVAELocation": "Localização do VAE", - "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo ficheiro VAE dentro do local do modelo.", - "convert": "Converter", - "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, a depender das especificações do seu computador.", - "convertToDiffusersHelpText5": "Por favor, certifique-se de que tenha espaço suficiente no disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", - "v1": "v1", - "sameFolder": "Mesma pasta", - "invokeRoot": "Pasta do InvokeAI", - "custom": "Personalizado", - "customSaveLocation": "Local de salvamento personalizado", - "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam numa influência menor do segundo modelo.", - "sigmoid": "Sigmóide", - "weightedSum": "Soma Ponderada" - }, - "parameters": { - "width": "Largura", - "seed": "Seed", - "hiresStrength": "Força da Alta Resolução", - "general": "Geral", - "randomizeSeed": "Seed Aleatório", - "shuffle": "Embaralhar", - "noiseThreshold": "Limite de Ruído", - "perlinNoise": "Ruído de Perlin", - "variations": "Variatções", - "seedWeights": "Pesos da Seed", - "restoreFaces": "Restaurar Rostos", - "faceRestoration": "Restauração de Rosto", - "type": "Tipo", - "denoisingStrength": "A força de remoção de ruído", - "scale": "Escala", - "otherOptions": "Outras Opções", - "seamlessTiling": "Ladrilho Sem Fronteira", - "hiresOptim": "Otimização de Alta Res", - "imageFit": "Caber Imagem Inicial No Tamanho de Saída", - "codeformerFidelity": "Fidelidade", - "tileSize": "Tamanho do Ladrilho", - "boundingBoxHeader": "Caixa Delimitadora", - "seamCorrectionHeader": "Correção de Fronteira", - "infillScalingHeader": "Preencimento e Escala", - "img2imgStrength": "Força de Imagem Para Imagem", - "toggleLoopback": "Ativar Loopback", - "symmetry": "Simetria", - "sendTo": "Mandar para", - "openInViewer": "Abrir No Visualizador", - "closeViewer": "Fechar Visualizador", - "usePrompt": "Usar Prompt", - "initialImage": "Imagem inicial", - "showOptionsPanel": "Mostrar Painel de Opções", - "strength": "Força", - "upscaling": "Redimensionando", - "upscale": "Redimensionar", - "upscaleImage": "Redimensionar Imagem", - "scaleBeforeProcessing": "Escala Antes do Processamento", - "images": "Imagems", - "steps": "Passos", - "cfgScale": "Escala CFG", - "height": "Altura", - "imageToImage": "Imagem para Imagem", - "variationAmount": "Quntidade de Variatções", - "scaledWidth": "L Escalada", - "scaledHeight": "A Escalada", - "infillMethod": "Método de Preenchimento", - "hSymmetryStep": "H Passo de Simetria", - "vSymmetryStep": "V Passo de Simetria", - "cancel": { - "immediate": "Cancelar imediatamente", - "schedule": "Cancelar após a iteração atual", - "isScheduled": "A cancelar", - "setType": "Definir tipo de cancelamento" - }, - "sendToImg2Img": "Mandar para Imagem Para Imagem", - "sendToUnifiedCanvas": "Mandar para Tela Unificada", - "copyImage": "Copiar imagem", - "copyImageToLink": "Copiar Imagem Para a Ligação", - "downloadImage": "Descarregar Imagem", - "useSeed": "Usar Seed", - "useAll": "Usar Todos", - "useInitImg": "Usar Imagem Inicial", - "info": "Informações" - }, - "settings": { - "confirmOnDelete": "Confirmar Antes de Apagar", - "displayHelpIcons": "Mostrar Ícones de Ajuda", - "enableImageDebugging": "Ativar Depuração de Imagem", - "useSlidersForAll": "Usar deslizadores para todas as opções", - "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", - "models": "Modelos", - "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", - "saveSteps": "Gravar imagens a cada n passos", - "resetWebUI": "Reiniciar Interface", - "resetWebUIDesc2": "Se as imagens não estão a aparecer na galeria ou algo mais não está a funcionar, favor tentar reiniciar antes de postar um problema no GitHub.", - "resetComplete": "A interface foi reiniciada. Atualize a página para carregar." - }, - "toast": { - "uploadFailed": "Envio Falhou", - "uploadFailedUnableToLoadDesc": "Não foj possível carregar o ficheiro", - "downloadImageStarted": "Download de Imagem Começou", - "imageNotLoadedDesc": "Nenhuma imagem encontrada a enviar para o módulo de imagem para imagem", - "imageLinkCopied": "Ligação de Imagem Copiada", - "imageNotLoaded": "Nenhuma Imagem Carregada", - "parametersFailed": "Problema ao carregar parâmetros", - "parametersFailedDesc": "Não foi possível carregar imagem incial.", - "seedSet": "Seed Definida", - "upscalingFailed": "Redimensionamento Falhou", - "promptNotSet": "Prompt Não Definido", - "tempFoldersEmptied": "Pasta de Ficheiros Temporários Esvaziada", - "imageCopied": "Imagem Copiada", - "imageSavedToGallery": "Imagem Salva na Galeria", - "canvasMerged": "Tela Fundida", - "sentToImageToImage": "Mandar Para Imagem Para Imagem", - "sentToUnifiedCanvas": "Enviada para a Tela Unificada", - "parametersSet": "Parâmetros Definidos", - "parametersNotSet": "Parâmetros Não Definidos", - "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", - "seedNotSet": "Seed Não Definida", - "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", - "promptSet": "Prompt Definido", - "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", - "faceRestoreFailed": "Restauração de Rosto Falhou", - "metadataLoadFailed": "Falha ao tentar carregar metadados", - "initialImageSet": "Imagem Inicial Definida", - "initialImageNotSet": "Imagem Inicial Não Definida", - "initialImageNotSetDesc": "Não foi possível carregar imagem incial" - }, - "tooltip": { - "feature": { - "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", - "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", - "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10) e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", - "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", - "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, a resultar em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", - "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", - "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em ficheiros e acessadas pelo menu de contexto.", - "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3.", - "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", - "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", - "infillAndScaling": "Gira os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos)." - } - }, - "unifiedCanvas": { - "emptyTempImagesFolderMessage": "Esvaziar a pasta de ficheiros de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", - "scaledBoundingBox": "Caixa Delimitadora Escalada", - "boundingBoxPosition": "Posição da Caixa Delimitadora", - "next": "Próximo", - "accept": "Aceitar", - "showHide": "Mostrar/Esconder", - "discardAll": "Descartar Todos", - "betaClear": "Limpar", - "betaDarkenOutside": "Escurecer Externamente", - "base": "Base", - "brush": "Pincel", - "showIntermediates": "Mostrar Intermediários", - "showGrid": "Mostrar Grade", - "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", - "boundingBox": "Caixa Delimitadora", - "canvasDimensions": "Dimensões da Tela", - "canvasPosition": "Posição da Tela", - "cursorPosition": "Posição do cursor", - "previous": "Anterior", - "betaLimitToBox": "Limitar á Caixa", - "layer": "Camada", - "mask": "Máscara", - "maskingOptions": "Opções de Mascaramento", - "enableMask": "Ativar Máscara", - "preserveMaskedArea": "Preservar Área da Máscara", - "clearMask": "Limpar Máscara", - "eraser": "Apagador", - "fillBoundingBox": "Preencher Caixa Delimitadora", - "eraseBoundingBox": "Apagar Caixa Delimitadora", - "colorPicker": "Seletor de Cor", - "brushOptions": "Opções de Pincel", - "brushSize": "Tamanho", - "move": "Mover", - "resetView": "Resetar Visualização", - "mergeVisible": "Fundir Visível", - "saveToGallery": "Gravar na Galeria", - "copyToClipboard": "Copiar para a Área de Transferência", - "downloadAsImage": "Descarregar Como Imagem", - "undo": "Desfazer", - "redo": "Refazer", - "clearCanvas": "Limpar Tela", - "canvasSettings": "Configurações de Tela", - "snapToGrid": "Encaixar na Grade", - "darkenOutsideSelection": "Escurecer Seleção Externa", - "autoSaveToGallery": "Gravar Automaticamente na Galeria", - "saveBoxRegionOnly": "Gravar Apenas a Região da Caixa", - "limitStrokesToBox": "Limitar Traços à Caixa", - "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", - "clearCanvasHistory": "Limpar o Histórico da Tela", - "clearHistory": "Limpar Históprico", - "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa a sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", - "emptyTempImageFolder": "Esvaziar a Pasta de Ficheiros de Imagem Temporários", - "emptyFolder": "Esvaziar Pasta", - "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de ficheiros de imagem temporários?", - "activeLayer": "Camada Ativa", - "canvasScale": "Escala da Tela", - "betaPreserveMasked": "Preservar Máscarado" - }, - "accessibility": { - "invokeProgressBar": "Invocar barra de progresso", - "reset": "Repôr", - "nextImage": "Próxima imagem", - "useThisParameter": "Usar este parâmetro", - "copyMetadataJson": "Copiar metadados JSON", - "zoomIn": "Ampliar", - "zoomOut": "Reduzir", - "rotateCounterClockwise": "Girar no sentido anti-horário", - "rotateClockwise": "Girar no sentido horário", - "flipVertically": "Espelhar verticalmente", - "modifyConfig": "Modificar config", - "toggleAutoscroll": "Alternar rolagem automática", - "showOptionsPanel": "Mostrar painel de opções", - "uploadImage": "Enviar imagem", - "previousImage": "Imagem anterior", - "flipHorizontally": "Espelhar horizontalmente", - "toggleLogViewer": "Alternar visualizador de registo" - } -} diff --git a/invokeai/frontend/web/dist/locales/pt_BR.json b/invokeai/frontend/web/dist/locales/pt_BR.json deleted file mode 100644 index 3b45dbbbf3..0000000000 --- a/invokeai/frontend/web/dist/locales/pt_BR.json +++ /dev/null @@ -1,577 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Teclas de atalho", - "languagePickerLabel": "Seletor de Idioma", - "reportBugLabel": "Relatar Bug", - "settingsLabel": "Configurações", - "img2img": "Imagem Para Imagem", - "unifiedCanvas": "Tela Unificada", - "nodes": "Nódulos", - "langBrPortuguese": "Português do Brasil", - "nodesDesc": "Um sistema baseado em nódulos para geração de imagens está em contrução. Fique ligado para atualizações sobre essa funcionalidade incrível.", - "postProcessing": "Pós-processamento", - "postProcessDesc1": "Invoke AI oferece uma variedade e funcionalidades de pós-processamento. Redimensionador de Imagem e Restauração Facial já estão disponíveis na interface. Você pode acessar elas no menu de Opções Avançadas na aba de Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da atual tela de imagens ou visualizador.", - "postProcessDesc2": "Uma interface dedicada será lançada em breve para facilitar fluxos de trabalho com opções mais avançadas de pós-processamento.", - "postProcessDesc3": "A interface do comando de linha da Invoke oferece várias funcionalidades incluindo Ampliação.", - "training": "Treinando", - "trainingDesc1": "Um fluxo de trabalho dedicado para treinar suas próprias incorporações e chockpoints usando Inversão Textual e Dreambooth na interface web.", - "trainingDesc2": "InvokeAI já suporta treinar incorporações personalizadas usando Inversão Textual com o script principal.", - "upload": "Enviar", - "close": "Fechar", - "load": "Carregar", - "statusConnected": "Conectado", - "statusDisconnected": "Disconectado", - "statusError": "Erro", - "statusPreparing": "Preparando", - "statusProcessingCanceled": "Processamento Canceledo", - "statusProcessingComplete": "Processamento Completo", - "statusGenerating": "Gerando", - "statusGeneratingTextToImage": "Gerando Texto Para Imagem", - "statusGeneratingImageToImage": "Gerando Imagem Para Imagem", - "statusGeneratingInpainting": "Gerando Inpainting", - "statusGeneratingOutpainting": "Gerando Outpainting", - "statusGenerationComplete": "Geração Completa", - "statusIterationComplete": "Iteração Completa", - "statusSavingImage": "Salvando Imagem", - "statusRestoringFaces": "Restaurando Rostos", - "statusRestoringFacesGFPGAN": "Restaurando Rostos (GFPGAN)", - "statusRestoringFacesCodeFormer": "Restaurando Rostos (CodeFormer)", - "statusUpscaling": "Redimensinando", - "statusUpscalingESRGAN": "Redimensinando (ESRGAN)", - "statusLoadingModel": "Carregando Modelo", - "statusModelChanged": "Modelo Alterado", - "githubLabel": "Github", - "discordLabel": "Discord", - "langArabic": "Árabe", - "langEnglish": "Inglês", - "langDutch": "Holandês", - "langFrench": "Francês", - "langGerman": "Alemão", - "langItalian": "Italiano", - "langJapanese": "Japonês", - "langPolish": "Polonês", - "langSimplifiedChinese": "Chinês", - "langUkranian": "Ucraniano", - "back": "Voltar", - "statusConvertingModel": "Convertendo Modelo", - "statusModelConverted": "Modelo Convertido", - "statusMergingModels": "Mesclando Modelos", - "statusMergedModels": "Modelos Mesclados", - "langRussian": "Russo", - "langSpanish": "Espanhol", - "loadingInvokeAI": "Carregando Invoke AI", - "loading": "Carregando" - }, - "gallery": { - "generations": "Gerações", - "showGenerations": "Mostrar Gerações", - "uploads": "Enviados", - "showUploads": "Mostrar Enviados", - "galleryImageSize": "Tamanho da Imagem", - "galleryImageResetSize": "Resetar Imagem", - "gallerySettings": "Configurações de Galeria", - "maintainAspectRatio": "Mater Proporções", - "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", - "singleColumnLayout": "Disposição em Coluna Única", - "allImagesLoaded": "Todas as Imagens Carregadas", - "loadMore": "Carregar Mais", - "noImagesInGallery": "Sem Imagens na Galeria" - }, - "hotkeys": { - "keyboardShortcuts": "Atalhos de Teclado", - "appHotkeys": "Atalhos do app", - "generalHotkeys": "Atalhos Gerais", - "galleryHotkeys": "Atalhos da Galeria", - "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", - "invoke": { - "title": "Invoke", - "desc": "Gerar uma imagem" - }, - "cancel": { - "title": "Cancelar", - "desc": "Cancelar geração de imagem" - }, - "focusPrompt": { - "title": "Foco do Prompt", - "desc": "Foco da área de texto do prompt" - }, - "toggleOptions": { - "title": "Ativar Opções", - "desc": "Abrir e fechar o painel de opções" - }, - "pinOptions": { - "title": "Fixar Opções", - "desc": "Fixar o painel de opções" - }, - "toggleViewer": { - "title": "Ativar Visualizador", - "desc": "Abrir e fechar o Visualizador de Imagens" - }, - "toggleGallery": { - "title": "Ativar Galeria", - "desc": "Abrir e fechar a gaveta da galeria" - }, - "maximizeWorkSpace": { - "title": "Maximizar a Área de Trabalho", - "desc": "Fechar painéis e maximixar área de trabalho" - }, - "changeTabs": { - "title": "Mudar Abas", - "desc": "Trocar para outra área de trabalho" - }, - "consoleToggle": { - "title": "Ativar Console", - "desc": "Abrir e fechar console" - }, - "setPrompt": { - "title": "Definir Prompt", - "desc": "Usar o prompt da imagem atual" - }, - "setSeed": { - "title": "Definir Seed", - "desc": "Usar seed da imagem atual" - }, - "setParameters": { - "title": "Definir Parâmetros", - "desc": "Usar todos os parâmetros da imagem atual" - }, - "restoreFaces": { - "title": "Restaurar Rostos", - "desc": "Restaurar a imagem atual" - }, - "upscale": { - "title": "Redimensionar", - "desc": "Redimensionar a imagem atual" - }, - "showInfo": { - "title": "Mostrar Informações", - "desc": "Mostrar metadados de informações da imagem atual" - }, - "sendToImageToImage": { - "title": "Mandar para Imagem Para Imagem", - "desc": "Manda a imagem atual para Imagem Para Imagem" - }, - "deleteImage": { - "title": "Apagar Imagem", - "desc": "Apaga a imagem atual" - }, - "closePanels": { - "title": "Fechar Painéis", - "desc": "Fecha os painéis abertos" - }, - "previousImage": { - "title": "Imagem Anterior", - "desc": "Mostra a imagem anterior na galeria" - }, - "nextImage": { - "title": "Próxima Imagem", - "desc": "Mostra a próxima imagem na galeria" - }, - "toggleGalleryPin": { - "title": "Ativar Fixar Galeria", - "desc": "Fixa e desafixa a galeria na interface" - }, - "increaseGalleryThumbSize": { - "title": "Aumentar Tamanho da Galeria de Imagem", - "desc": "Aumenta o tamanho das thumbs na galeria" - }, - "decreaseGalleryThumbSize": { - "title": "Diminuir Tamanho da Galeria de Imagem", - "desc": "Diminui o tamanho das thumbs na galeria" - }, - "selectBrush": { - "title": "Selecionar Pincel", - "desc": "Seleciona o pincel" - }, - "selectEraser": { - "title": "Selecionar Apagador", - "desc": "Seleciona o apagador" - }, - "decreaseBrushSize": { - "title": "Diminuir Tamanho do Pincel", - "desc": "Diminui o tamanho do pincel/apagador" - }, - "increaseBrushSize": { - "title": "Aumentar Tamanho do Pincel", - "desc": "Aumenta o tamanho do pincel/apagador" - }, - "decreaseBrushOpacity": { - "title": "Diminuir Opacidade do Pincel", - "desc": "Diminui a opacidade do pincel" - }, - "increaseBrushOpacity": { - "title": "Aumentar Opacidade do Pincel", - "desc": "Aumenta a opacidade do pincel" - }, - "moveTool": { - "title": "Ferramenta Mover", - "desc": "Permite navegar pela tela" - }, - "fillBoundingBox": { - "title": "Preencher Caixa Delimitadora", - "desc": "Preenche a caixa delimitadora com a cor do pincel" - }, - "eraseBoundingBox": { - "title": "Apagar Caixa Delimitadora", - "desc": "Apaga a área da caixa delimitadora" - }, - "colorPicker": { - "title": "Selecionar Seletor de Cor", - "desc": "Seleciona o seletor de cores" - }, - "toggleSnap": { - "title": "Ativar Encaixe", - "desc": "Ativa Encaixar na Grade" - }, - "quickToggleMove": { - "title": "Ativar Mover Rapidamente", - "desc": "Temporariamente ativa o modo Mover" - }, - "toggleLayer": { - "title": "Ativar Camada", - "desc": "Ativa a seleção de camada de máscara/base" - }, - "clearMask": { - "title": "Limpar Máscara", - "desc": "Limpa toda a máscara" - }, - "hideMask": { - "title": "Esconder Máscara", - "desc": "Esconde e Revela a máscara" - }, - "showHideBoundingBox": { - "title": "Mostrar/Esconder Caixa Delimitadora", - "desc": "Ativa a visibilidade da caixa delimitadora" - }, - "mergeVisible": { - "title": "Fundir Visível", - "desc": "Fundir todas as camadas visíveis em tela" - }, - "saveToGallery": { - "title": "Salvara Na Galeria", - "desc": "Salva a tela atual na galeria" - }, - "copyToClipboard": { - "title": "Copiar para a Área de Transferência", - "desc": "Copia a tela atual para a área de transferência" - }, - "downloadImage": { - "title": "Baixar Imagem", - "desc": "Baixa a tela atual" - }, - "undoStroke": { - "title": "Desfazer Traço", - "desc": "Desfaz um traço de pincel" - }, - "redoStroke": { - "title": "Refazer Traço", - "desc": "Refaz o traço de pincel" - }, - "resetView": { - "title": "Resetar Visualização", - "desc": "Reseta Visualização da Tela" - }, - "previousStagingImage": { - "title": "Imagem de Preparação Anterior", - "desc": "Área de Imagem de Preparação Anterior" - }, - "nextStagingImage": { - "title": "Próxima Imagem de Preparação Anterior", - "desc": "Próxima Área de Imagem de Preparação Anterior" - }, - "acceptStagingImage": { - "title": "Aceitar Imagem de Preparação Anterior", - "desc": "Aceitar Área de Imagem de Preparação Anterior" - } - }, - "modelManager": { - "modelManager": "Gerente de Modelo", - "model": "Modelo", - "modelAdded": "Modelo Adicionado", - "modelUpdated": "Modelo Atualizado", - "modelEntryDeleted": "Entrada de modelo excluída", - "cannotUseSpaces": "Não pode usar espaços", - "addNew": "Adicionar Novo", - "addNewModel": "Adicionar Novo modelo", - "addManually": "Adicionar Manualmente", - "manual": "Manual", - "name": "Nome", - "nameValidationMsg": "Insira um nome para o seu modelo", - "description": "Descrição", - "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", - "config": "Configuração", - "configValidationMsg": "Caminho para o arquivo de configuração do seu modelo.", - "modelLocation": "Localização do modelo", - "modelLocationValidationMsg": "Caminho para onde seu modelo está localizado.", - "vaeLocation": "Localização VAE", - "vaeLocationValidationMsg": "Caminho para onde seu VAE está localizado.", - "width": "Largura", - "widthValidationMsg": "Largura padrão do seu modelo.", - "height": "Altura", - "heightValidationMsg": "Altura padrão do seu modelo.", - "addModel": "Adicionar Modelo", - "updateModel": "Atualizar Modelo", - "availableModels": "Modelos Disponíveis", - "search": "Procurar", - "load": "Carregar", - "active": "Ativado", - "notLoaded": "Não carregado", - "cached": "Em cache", - "checkpointFolder": "Pasta de Checkpoint", - "clearCheckpointFolder": "Apagar Pasta de Checkpoint", - "findModels": "Encontrar Modelos", - "modelsFound": "Modelos Encontrados", - "selectFolder": "Selecione a Pasta", - "selected": "Selecionada", - "selectAll": "Selecionar Tudo", - "deselectAll": "Deselecionar Tudo", - "showExisting": "Mostrar Existente", - "addSelected": "Adicione Selecionado", - "modelExists": "Modelo Existe", - "delete": "Excluir", - "deleteModel": "Excluir modelo", - "deleteConfig": "Excluir Config", - "deleteMsg1": "Tem certeza de que deseja excluir esta entrada do modelo de InvokeAI?", - "deleteMsg2": "Isso não vai excluir o arquivo de modelo checkpoint do seu disco. Você pode lê-los, se desejar.", - "checkpointModels": "Checkpoints", - "diffusersModels": "Diffusers", - "safetensorModels": "SafeTensors", - "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", - "addDiffuserModel": "Adicionar Diffusers", - "repo_id": "Repo ID", - "vaeRepoID": "VAE Repo ID", - "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", - "scanAgain": "Digitalize Novamente", - "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", - "noModelsFound": "Nenhum Modelo Encontrado", - "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", - "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", - "formMessageDiffusersVAELocation": "Localização do VAE", - "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo arquivo VAE dentro do local do modelo.", - "convertToDiffusers": "Converter para Diffusers", - "convertToDiffusersHelpText1": "Este modelo será convertido para o formato 🧨 Diffusers.", - "convertToDiffusersHelpText5": "Por favor, certifique-se de que você tenha espaço suficiente em disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", - "convertToDiffusersHelpText6": "Você deseja converter este modelo?", - "convertToDiffusersSaveLocation": "Local para Salvar", - "v1": "v1", - "inpainting": "v1 Inpainting", - "customConfig": "Configuração personalizada", - "pathToCustomConfig": "Caminho para configuração personalizada", - "convertToDiffusersHelpText3": "Seu arquivo de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Você pode adicionar seu ponto de verificação ao Gerenciador de modelos novamente, se desejar.", - "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, dependendo das especificações do seu computador.", - "merge": "Mesclar", - "modelsMerged": "Modelos mesclados", - "mergeModels": "Mesclar modelos", - "modelOne": "Modelo 1", - "modelTwo": "Modelo 2", - "modelThree": "Modelo 3", - "statusConverting": "Convertendo", - "modelConverted": "Modelo Convertido", - "sameFolder": "Mesma pasta", - "invokeRoot": "Pasta do InvokeAI", - "custom": "Personalizado", - "customSaveLocation": "Local de salvamento personalizado", - "mergedModelName": "Nome do modelo mesclado", - "alpha": "Alpha", - "allModels": "Todos os Modelos", - "repoIDValidationMsg": "Repositório Online do seu Modelo", - "convert": "Converter", - "convertToDiffusersHelpText2": "Este processo irá substituir sua entrada de Gerenciador de Modelos por uma versão Diffusers do mesmo modelo.", - "mergedModelCustomSaveLocation": "Caminho Personalizado", - "mergedModelSaveLocation": "Local de Salvamento", - "interpolationType": "Tipo de Interpolação", - "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", - "invokeAIFolder": "Pasta Invoke AI", - "weightedSum": "Soma Ponderada", - "sigmoid": "Sigmóide", - "inverseSigmoid": "Sigmóide Inversa", - "modelMergeHeaderHelp1": "Você pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", - "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", - "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam em uma influência menor do segundo modelo.", - "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se você deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro." - }, - "parameters": { - "images": "Imagems", - "steps": "Passos", - "cfgScale": "Escala CFG", - "width": "Largura", - "height": "Altura", - "seed": "Seed", - "randomizeSeed": "Seed Aleatório", - "shuffle": "Embaralhar", - "noiseThreshold": "Limite de Ruído", - "perlinNoise": "Ruído de Perlin", - "variations": "Variatções", - "variationAmount": "Quntidade de Variatções", - "seedWeights": "Pesos da Seed", - "faceRestoration": "Restauração de Rosto", - "restoreFaces": "Restaurar Rostos", - "type": "Tipo", - "strength": "Força", - "upscaling": "Redimensionando", - "upscale": "Redimensionar", - "upscaleImage": "Redimensionar Imagem", - "scale": "Escala", - "otherOptions": "Outras Opções", - "seamlessTiling": "Ladrilho Sem Fronteira", - "hiresOptim": "Otimização de Alta Res", - "imageFit": "Caber Imagem Inicial No Tamanho de Saída", - "codeformerFidelity": "Fidelidade", - "scaleBeforeProcessing": "Escala Antes do Processamento", - "scaledWidth": "L Escalada", - "scaledHeight": "A Escalada", - "infillMethod": "Método de Preenchimento", - "tileSize": "Tamanho do Ladrilho", - "boundingBoxHeader": "Caixa Delimitadora", - "seamCorrectionHeader": "Correção de Fronteira", - "infillScalingHeader": "Preencimento e Escala", - "img2imgStrength": "Força de Imagem Para Imagem", - "toggleLoopback": "Ativar Loopback", - "sendTo": "Mandar para", - "sendToImg2Img": "Mandar para Imagem Para Imagem", - "sendToUnifiedCanvas": "Mandar para Tela Unificada", - "copyImageToLink": "Copiar Imagem Para Link", - "downloadImage": "Baixar Imagem", - "openInViewer": "Abrir No Visualizador", - "closeViewer": "Fechar Visualizador", - "usePrompt": "Usar Prompt", - "useSeed": "Usar Seed", - "useAll": "Usar Todos", - "useInitImg": "Usar Imagem Inicial", - "info": "Informações", - "initialImage": "Imagem inicial", - "showOptionsPanel": "Mostrar Painel de Opções", - "vSymmetryStep": "V Passo de Simetria", - "hSymmetryStep": "H Passo de Simetria", - "symmetry": "Simetria", - "copyImage": "Copiar imagem", - "hiresStrength": "Força da Alta Resolução", - "denoisingStrength": "A força de remoção de ruído", - "imageToImage": "Imagem para Imagem", - "cancel": { - "setType": "Definir tipo de cancelamento", - "isScheduled": "Cancelando", - "schedule": "Cancelar após a iteração atual", - "immediate": "Cancelar imediatamente" - }, - "general": "Geral" - }, - "settings": { - "models": "Modelos", - "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", - "saveSteps": "Salvar imagens a cada n passos", - "confirmOnDelete": "Confirmar Antes de Apagar", - "displayHelpIcons": "Mostrar Ícones de Ajuda", - "enableImageDebugging": "Ativar Depuração de Imagem", - "resetWebUI": "Reiniciar Interface", - "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", - "resetWebUIDesc2": "Se as imagens não estão aparecendo na galeria ou algo mais não está funcionando, favor tentar reiniciar antes de postar um problema no GitHub.", - "resetComplete": "A interface foi reiniciada. Atualize a página para carregar.", - "useSlidersForAll": "Usar deslizadores para todas as opções" - }, - "toast": { - "tempFoldersEmptied": "Pasta de Arquivos Temporários Esvaziada", - "uploadFailed": "Envio Falhou", - "uploadFailedUnableToLoadDesc": "Não foj possível carregar o arquivo", - "downloadImageStarted": "Download de Imagem Começou", - "imageCopied": "Imagem Copiada", - "imageLinkCopied": "Link de Imagem Copiada", - "imageNotLoaded": "Nenhuma Imagem Carregada", - "imageNotLoadedDesc": "Nenhuma imagem encontrar para mandar para o módulo de imagem para imagem", - "imageSavedToGallery": "Imagem Salva na Galeria", - "canvasMerged": "Tela Fundida", - "sentToImageToImage": "Mandar Para Imagem Para Imagem", - "sentToUnifiedCanvas": "Enviada para a Tela Unificada", - "parametersSet": "Parâmetros Definidos", - "parametersNotSet": "Parâmetros Não Definidos", - "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", - "parametersFailed": "Problema ao carregar parâmetros", - "parametersFailedDesc": "Não foi possível carregar imagem incial.", - "seedSet": "Seed Definida", - "seedNotSet": "Seed Não Definida", - "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", - "promptSet": "Prompt Definido", - "promptNotSet": "Prompt Não Definido", - "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", - "upscalingFailed": "Redimensionamento Falhou", - "faceRestoreFailed": "Restauração de Rosto Falhou", - "metadataLoadFailed": "Falha ao tentar carregar metadados", - "initialImageSet": "Imagem Inicial Definida", - "initialImageNotSet": "Imagem Inicial Não Definida", - "initialImageNotSetDesc": "Não foi possível carregar imagem incial" - }, - "unifiedCanvas": { - "layer": "Camada", - "base": "Base", - "mask": "Máscara", - "maskingOptions": "Opções de Mascaramento", - "enableMask": "Ativar Máscara", - "preserveMaskedArea": "Preservar Área da Máscara", - "clearMask": "Limpar Máscara", - "brush": "Pincel", - "eraser": "Apagador", - "fillBoundingBox": "Preencher Caixa Delimitadora", - "eraseBoundingBox": "Apagar Caixa Delimitadora", - "colorPicker": "Seletor de Cor", - "brushOptions": "Opções de Pincel", - "brushSize": "Tamanho", - "move": "Mover", - "resetView": "Resetar Visualização", - "mergeVisible": "Fundir Visível", - "saveToGallery": "Salvar na Galeria", - "copyToClipboard": "Copiar para a Área de Transferência", - "downloadAsImage": "Baixar Como Imagem", - "undo": "Desfazer", - "redo": "Refazer", - "clearCanvas": "Limpar Tela", - "canvasSettings": "Configurações de Tela", - "showIntermediates": "Mostrar Intermediários", - "showGrid": "Mostrar Grade", - "snapToGrid": "Encaixar na Grade", - "darkenOutsideSelection": "Escurecer Seleção Externa", - "autoSaveToGallery": "Salvar Automaticamente na Galeria", - "saveBoxRegionOnly": "Salvar Apenas a Região da Caixa", - "limitStrokesToBox": "Limitar Traços para a Caixa", - "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", - "clearCanvasHistory": "Limpar o Histórico da Tela", - "clearHistory": "Limpar Históprico", - "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", - "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", - "emptyTempImageFolder": "Esvaziar a Pasta de Arquivos de Imagem Temporários", - "emptyFolder": "Esvaziar Pasta", - "emptyTempImagesFolderMessage": "Esvaziar a pasta de arquivos de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", - "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de arquivos de imagem temporários?", - "activeLayer": "Camada Ativa", - "canvasScale": "Escala da Tela", - "boundingBox": "Caixa Delimitadora", - "scaledBoundingBox": "Caixa Delimitadora Escalada", - "boundingBoxPosition": "Posição da Caixa Delimitadora", - "canvasDimensions": "Dimensões da Tela", - "canvasPosition": "Posição da Tela", - "cursorPosition": "Posição do cursor", - "previous": "Anterior", - "next": "Próximo", - "accept": "Aceitar", - "showHide": "Mostrar/Esconder", - "discardAll": "Descartar Todos", - "betaClear": "Limpar", - "betaDarkenOutside": "Escurecer Externamente", - "betaLimitToBox": "Limitar Para a Caixa", - "betaPreserveMasked": "Preservar Máscarado" - }, - "tooltip": { - "feature": { - "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Você pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10), e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", - "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em arquivos e acessadas pelo menu de contexto.", - "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", - "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", - "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", - "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", - "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, resultando em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", - "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Você também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", - "infillAndScaling": "Gerencie os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos).", - "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", - "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3." - } - } -} diff --git a/invokeai/frontend/web/dist/locales/ro.json b/invokeai/frontend/web/dist/locales/ro.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/invokeai/frontend/web/dist/locales/ro.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/invokeai/frontend/web/dist/locales/ru.json b/invokeai/frontend/web/dist/locales/ru.json deleted file mode 100644 index 665a821eb1..0000000000 --- a/invokeai/frontend/web/dist/locales/ru.json +++ /dev/null @@ -1,1652 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Горячие клавиши", - "languagePickerLabel": "Язык", - "reportBugLabel": "Сообщить об ошибке", - "settingsLabel": "Настройки", - "img2img": "Изображение в изображение (img2img)", - "unifiedCanvas": "Единый холст", - "nodes": "Редактор рабочего процесса", - "langRussian": "Русский", - "nodesDesc": "Cистема генерации изображений на основе нодов (узлов) уже разрабатывается. Следите за новостями об этой замечательной функции.", - "postProcessing": "Постобработка", - "postProcessDesc1": "Invoke AI предлагает широкий спектр функций постобработки. Увеличение изображения (upscale) и восстановление лиц уже доступны в интерфейсе. Получите доступ к ним из меню 'Дополнительные параметры' на вкладках 'Текст в изображение' и 'Изображение в изображение'. Обрабатывайте изображения напрямую, используя кнопки действий с изображениями над текущим изображением или в режиме просмотра.", - "postProcessDesc2": "В ближайшее время будет выпущен специальный интерфейс для более продвинутых процессов постобработки.", - "postProcessDesc3": "Интерфейс командной строки Invoke AI предлагает различные другие функции, включая Embiggen.", - "training": "Обучение", - "trainingDesc1": "Специальный интерфейс для обучения собственных моделей с использованием Textual Inversion и Dreambooth.", - "trainingDesc2": "InvokeAI уже поддерживает обучение моделей с помощью TI, через интерфейс командной строки.", - "upload": "Загрузить", - "close": "Закрыть", - "load": "Загрузить", - "statusConnected": "Подключен", - "statusDisconnected": "Отключен", - "statusError": "Ошибка", - "statusPreparing": "Подготовка", - "statusProcessingCanceled": "Обработка прервана", - "statusProcessingComplete": "Обработка завершена", - "statusGenerating": "Генерация", - "statusGeneratingTextToImage": "Создаем изображение из текста", - "statusGeneratingImageToImage": "Создаем изображение из изображения", - "statusGeneratingInpainting": "Дополняем внутри", - "statusGeneratingOutpainting": "Дорисовываем снаружи", - "statusGenerationComplete": "Генерация завершена", - "statusIterationComplete": "Итерация завершена", - "statusSavingImage": "Сохранение изображения", - "statusRestoringFaces": "Восстановление лиц", - "statusRestoringFacesGFPGAN": "Восстановление лиц (GFPGAN)", - "statusRestoringFacesCodeFormer": "Восстановление лиц (CodeFormer)", - "statusUpscaling": "Увеличение", - "statusUpscalingESRGAN": "Увеличение (ESRGAN)", - "statusLoadingModel": "Загрузка модели", - "statusModelChanged": "Модель изменена", - "githubLabel": "Github", - "discordLabel": "Discord", - "statusMergingModels": "Слияние моделей", - "statusModelConverted": "Модель сконвертирована", - "statusMergedModels": "Модели объединены", - "loading": "Загрузка", - "loadingInvokeAI": "Загрузка Invoke AI", - "back": "Назад", - "statusConvertingModel": "Конвертация модели", - "cancel": "Отменить", - "accept": "Принять", - "langUkranian": "Украї́нська", - "langEnglish": "English", - "postprocessing": "Постобработка", - "langArabic": "العربية", - "langSpanish": "Español", - "langSimplifiedChinese": "简体中文", - "langDutch": "Nederlands", - "langFrench": "Français", - "langGerman": "German", - "langHebrew": "Hebrew", - "langItalian": "Italiano", - "langJapanese": "日本語", - "langKorean": "한국어", - "langPolish": "Polski", - "langPortuguese": "Português", - "txt2img": "Текст в изображение (txt2img)", - "langBrPortuguese": "Português do Brasil", - "linear": "Линейная обработка", - "dontAskMeAgain": "Больше не спрашивать", - "areYouSure": "Вы уверены?", - "random": "Случайное", - "generate": "Сгенерировать", - "openInNewTab": "Открыть в новой вкладке", - "imagePrompt": "Запрос", - "communityLabel": "Сообщество", - "lightMode": "Светлая тема", - "batch": "Пакетный менеджер", - "modelManager": "Менеджер моделей", - "darkMode": "Темная тема", - "nodeEditor": "Редактор Нодов (Узлов)", - "controlNet": "Controlnet", - "advanced": "Расширенные", - "t2iAdapter": "T2I Adapter", - "checkpoint": "Checkpoint", - "format": "Формат", - "unknown": "Неизвестно", - "folder": "Папка", - "inpaint": "Перерисовать", - "updated": "Обновлен", - "on": "На", - "save": "Сохранить", - "created": "Создано", - "error": "Ошибка", - "prevPage": "Предыдущая страница", - "simple": "Простой", - "ipAdapter": "IP Adapter", - "controlAdapter": "Адаптер контроля", - "installed": "Установлено", - "ai": "ИИ", - "auto": "Авто", - "file": "Файл", - "delete": "Удалить", - "template": "Шаблон", - "outputs": "результаты", - "unknownError": "Неизвестная ошибка", - "statusProcessing": "Обработка", - "imageFailedToLoad": "Невозможно загрузить изображение", - "direction": "Направление", - "data": "Данные", - "somethingWentWrong": "Что-то пошло не так", - "safetensors": "Safetensors", - "outpaint": "Расширить изображение", - "orderBy": "Сортировать по", - "copyError": "Ошибка $t(gallery.copy)", - "learnMore": "Узнать больше", - "nextPage": "Следущая страница", - "saveAs": "Сохранить как", - "unsaved": "несохраненный", - "input": "Вход", - "details": "Детали", - "notInstalled": "Нет $t(common.installed)" - }, - "gallery": { - "generations": "Генерации", - "showGenerations": "Показывать генерации", - "uploads": "Загрузки", - "showUploads": "Показывать загрузки", - "galleryImageSize": "Размер изображений", - "galleryImageResetSize": "Размер по умолчанию", - "gallerySettings": "Настройка галереи", - "maintainAspectRatio": "Сохранять пропорции", - "autoSwitchNewImages": "Автоматически выбирать новые", - "singleColumnLayout": "Одна колонка", - "allImagesLoaded": "Все изображения загружены", - "loadMore": "Показать больше", - "noImagesInGallery": "Изображений нет", - "deleteImagePermanent": "Удаленные изображения невозможно восстановить.", - "deleteImageBin": "Удаленные изображения будут отправлены в корзину вашей операционной системы.", - "deleteImage": "Удалить изображение", - "assets": "Ресурсы", - "autoAssignBoardOnClick": "Авто-назначение доски по клику", - "deleteSelection": "Удалить выделенное", - "featuresWillReset": "Если вы удалите это изображение, эти функции будут немедленно сброшены.", - "problemDeletingImagesDesc": "Не удалось удалить одно или несколько изображений", - "loading": "Загрузка", - "unableToLoad": "Невозможно загрузить галерею", - "preparingDownload": "Подготовка к скачиванию", - "preparingDownloadFailed": "Проблема с подготовкой к скачиванию", - "image": "изображение", - "drop": "перебросить", - "problemDeletingImages": "Проблема с удалением изображений", - "downloadSelection": "Скачать выделенное", - "currentlyInUse": "В настоящее время это изображение используется в следующих функциях:", - "unstarImage": "Удалить из избранного", - "dropOrUpload": "$t(gallery.drop) или загрузить", - "copy": "Копировать", - "download": "Скачать", - "noImageSelected": "Изображение не выбрано", - "setCurrentImage": "Установить как текущее изображение", - "starImage": "Добавить в избранное", - "dropToUpload": "$t(gallery.drop) чтоб загрузить" - }, - "hotkeys": { - "keyboardShortcuts": "Горячие клавиши", - "appHotkeys": "Горячие клавиши приложения", - "generalHotkeys": "Общие горячие клавиши", - "galleryHotkeys": "Горячие клавиши галереи", - "unifiedCanvasHotkeys": "Горячие клавиши Единого холста", - "invoke": { - "title": "Invoke", - "desc": "Сгенерировать изображение" - }, - "cancel": { - "title": "Отменить", - "desc": "Отменить генерацию изображения" - }, - "focusPrompt": { - "title": "Переключиться на ввод запроса", - "desc": "Переключение на область ввода запроса" - }, - "toggleOptions": { - "title": "Показать/скрыть параметры", - "desc": "Открывать и закрывать панель параметров" - }, - "pinOptions": { - "title": "Закрепить параметры", - "desc": "Закрепить панель параметров" - }, - "toggleViewer": { - "title": "Показать просмотр", - "desc": "Открывать и закрывать просмотрщик изображений" - }, - "toggleGallery": { - "title": "Показать галерею", - "desc": "Открывать и закрывать ящик галереи" - }, - "maximizeWorkSpace": { - "title": "Максимизировать рабочее пространство", - "desc": "Скрыть панели и максимизировать рабочую область" - }, - "changeTabs": { - "title": "Переключить вкладку", - "desc": "Переключиться на другую рабочую область" - }, - "consoleToggle": { - "title": "Показать консоль", - "desc": "Открывать и закрывать консоль" - }, - "setPrompt": { - "title": "Использовать запрос", - "desc": "Использовать запрос из текущего изображения" - }, - "setSeed": { - "title": "Использовать сид", - "desc": "Использовать сид текущего изображения" - }, - "setParameters": { - "title": "Использовать все параметры", - "desc": "Использовать все параметры текущего изображения" - }, - "restoreFaces": { - "title": "Восстановить лица", - "desc": "Восстановить лица на текущем изображении" - }, - "upscale": { - "title": "Увеличение", - "desc": "Увеличить текущеее изображение" - }, - "showInfo": { - "title": "Показать метаданные", - "desc": "Показать метаданные из текущего изображения" - }, - "sendToImageToImage": { - "title": "Отправить в img2img", - "desc": "Отправить текущее изображение в Image To Image" - }, - "deleteImage": { - "title": "Удалить изображение", - "desc": "Удалить текущее изображение" - }, - "closePanels": { - "title": "Закрыть панели", - "desc": "Закрывает открытые панели" - }, - "previousImage": { - "title": "Предыдущее изображение", - "desc": "Отображать предыдущее изображение в галерее" - }, - "nextImage": { - "title": "Следующее изображение", - "desc": "Отображение следующего изображения в галерее" - }, - "toggleGalleryPin": { - "title": "Закрепить галерею", - "desc": "Закрепляет и открепляет галерею" - }, - "increaseGalleryThumbSize": { - "title": "Увеличить размер миниатюр галереи", - "desc": "Увеличивает размер миниатюр галереи" - }, - "decreaseGalleryThumbSize": { - "title": "Уменьшает размер миниатюр галереи", - "desc": "Уменьшает размер миниатюр галереи" - }, - "selectBrush": { - "title": "Выбрать кисть", - "desc": "Выбирает кисть для холста" - }, - "selectEraser": { - "title": "Выбрать ластик", - "desc": "Выбирает ластик для холста" - }, - "decreaseBrushSize": { - "title": "Уменьшить размер кисти", - "desc": "Уменьшает размер кисти/ластика холста" - }, - "increaseBrushSize": { - "title": "Увеличить размер кисти", - "desc": "Увеличивает размер кисти/ластика холста" - }, - "decreaseBrushOpacity": { - "title": "Уменьшить непрозрачность кисти", - "desc": "Уменьшает непрозрачность кисти холста" - }, - "increaseBrushOpacity": { - "title": "Увеличить непрозрачность кисти", - "desc": "Увеличивает непрозрачность кисти холста" - }, - "moveTool": { - "title": "Инструмент перемещения", - "desc": "Позволяет перемещаться по холсту" - }, - "fillBoundingBox": { - "title": "Заполнить ограничивающую рамку", - "desc": "Заполняет ограничивающую рамку цветом кисти" - }, - "eraseBoundingBox": { - "title": "Стереть ограничивающую рамку", - "desc": "Стирает область ограничивающей рамки" - }, - "colorPicker": { - "title": "Выбрать цвет", - "desc": "Выбирает средство выбора цвета холста" - }, - "toggleSnap": { - "title": "Включить привязку", - "desc": "Включает/выключает привязку к сетке" - }, - "quickToggleMove": { - "title": "Быстрое переключение перемещения", - "desc": "Временно переключает режим перемещения" - }, - "toggleLayer": { - "title": "Переключить слой", - "desc": "Переключение маски/базового слоя" - }, - "clearMask": { - "title": "Очистить маску", - "desc": "Очистить всю маску" - }, - "hideMask": { - "title": "Скрыть маску", - "desc": "Скрывает/показывает маску" - }, - "showHideBoundingBox": { - "title": "Показать/скрыть ограничивающую рамку", - "desc": "Переключить видимость ограничивающей рамки" - }, - "mergeVisible": { - "title": "Объединить видимые", - "desc": "Объединить все видимые слои холста" - }, - "saveToGallery": { - "title": "Сохранить в галерею", - "desc": "Сохранить текущий холст в галерею" - }, - "copyToClipboard": { - "title": "Копировать в буфер обмена", - "desc": "Копировать текущий холст в буфер обмена" - }, - "downloadImage": { - "title": "Скачать изображение", - "desc": "Скачать содержимое холста" - }, - "undoStroke": { - "title": "Отменить кисть", - "desc": "Отменить мазок кисти" - }, - "redoStroke": { - "title": "Повторить кисть", - "desc": "Повторить мазок кисти" - }, - "resetView": { - "title": "Вид по умолчанию", - "desc": "Сбросить вид холста" - }, - "previousStagingImage": { - "title": "Предыдущее изображение", - "desc": "Предыдущая область изображения" - }, - "nextStagingImage": { - "title": "Следующее изображение", - "desc": "Следующая область изображения" - }, - "acceptStagingImage": { - "title": "Принять изображение", - "desc": "Принять текущее изображение" - }, - "addNodes": { - "desc": "Открывает меню добавления узла", - "title": "Добавление узлов" - }, - "nodesHotkeys": "Горячие клавиши узлов" - }, - "modelManager": { - "modelManager": "Менеджер моделей", - "model": "Модель", - "modelAdded": "Модель добавлена", - "modelUpdated": "Модель обновлена", - "modelEntryDeleted": "Запись о модели удалена", - "cannotUseSpaces": "Нельзя использовать пробелы", - "addNew": "Добавить новую", - "addNewModel": "Добавить новую модель", - "addManually": "Добавить вручную", - "manual": "Ручное", - "name": "Название", - "nameValidationMsg": "Введите название модели", - "description": "Описание", - "descriptionValidationMsg": "Введите описание модели", - "config": "Файл конфигурации", - "configValidationMsg": "Путь до файла конфигурации.", - "modelLocation": "Расположение модели", - "modelLocationValidationMsg": "Укажите путь к локальной папке, в которой хранится ваша модель Diffusers", - "vaeLocation": "Расположение VAE", - "vaeLocationValidationMsg": "Путь до файла VAE.", - "width": "Ширина", - "widthValidationMsg": "Исходная ширина изображений модели.", - "height": "Высота", - "heightValidationMsg": "Исходная высота изображений модели.", - "addModel": "Добавить модель", - "updateModel": "Обновить модель", - "availableModels": "Доступные модели", - "search": "Искать", - "load": "Загрузить", - "active": "активна", - "notLoaded": "не загружена", - "cached": "кэширована", - "checkpointFolder": "Папка с моделями", - "clearCheckpointFolder": "Очистить папку с моделями", - "findModels": "Найти модели", - "scanAgain": "Сканировать снова", - "modelsFound": "Найденные модели", - "selectFolder": "Выбрать папку", - "selected": "Выбраны", - "selectAll": "Выбрать все", - "deselectAll": "Снять выделение", - "showExisting": "Показывать добавленные", - "addSelected": "Добавить выбранные", - "modelExists": "Модель уже добавлена", - "selectAndAdd": "Выберите и добавьте модели из списка", - "noModelsFound": "Модели не найдены", - "delete": "Удалить", - "deleteModel": "Удалить модель", - "deleteConfig": "Удалить конфигурацию", - "deleteMsg1": "Вы точно хотите удалить модель из InvokeAI?", - "deleteMsg2": "Это приведет К УДАЛЕНИЮ модели С ДИСКА, если она находится в корневой папке Invoke. Если вы используете пользовательское расположение, то модель НЕ будет удалена с диска.", - "repoIDValidationMsg": "Онлайн-репозиторий модели", - "convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 2–7 Гб.", - "invokeAIFolder": "Каталог InvokeAI", - "ignoreMismatch": "Игнорировать несоответствия между выбранными моделями", - "addCheckpointModel": "Добавить модель Checkpoint/Safetensor", - "formMessageDiffusersModelLocationDesc": "Укажите хотя бы одно.", - "convertToDiffusersHelpText3": "Ваш файл контрольной точки НА ДИСКЕ будет УДАЛЕН, если он находится в корневой папке InvokeAI. Если он находится в пользовательском расположении, то он НЕ будет удален.", - "vaeRepoID": "ID репозитория VAE", - "mergedModelName": "Название объединенной модели", - "checkpointModels": "Модели Checkpoint", - "allModels": "Все модели", - "addDiffuserModel": "Добавить Diffusers", - "repo_id": "ID репозитория", - "formMessageDiffusersVAELocationDesc": "Если не указано, InvokeAI будет искать файл VAE рядом с моделью.", - "convert": "Преобразовать", - "convertToDiffusers": "Преобразовать в Diffusers", - "convertToDiffusersHelpText1": "Модель будет преобразована в формат 🧨 Diffusers.", - "convertToDiffusersHelpText4": "Это единоразовое действие. Оно может занять 30—60 секунд в зависимости от характеристик вашего компьютера.", - "convertToDiffusersHelpText6": "Вы хотите преобразовать эту модель?", - "statusConverting": "Преобразование", - "modelConverted": "Модель преобразована", - "invokeRoot": "Каталог InvokeAI", - "modelsMerged": "Модели объединены", - "mergeModels": "Объединить модели", - "scanForModels": "Просканировать модели", - "sigmoid": "Сигмоид", - "formMessageDiffusersModelLocation": "Расположение Diffusers-модели", - "modelThree": "Модель 3", - "modelMergeHeaderHelp2": "Только Diffusers-модели доступны для объединения. Если вы хотите объединить checkpoint-модели, сначала преобразуйте их в Diffusers.", - "pickModelType": "Выбрать тип модели", - "formMessageDiffusersVAELocation": "Расположение VAE", - "v1": "v1", - "convertToDiffusersSaveLocation": "Путь сохранения", - "customSaveLocation": "Пользовательский путь сохранения", - "alpha": "Альфа", - "diffusersModels": "Diffusers", - "customConfig": "Пользовательский конфиг", - "pathToCustomConfig": "Путь к пользовательскому конфигу", - "inpainting": "v1 Inpainting", - "sameFolder": "В ту же папку", - "modelOne": "Модель 1", - "mergedModelCustomSaveLocation": "Пользовательский путь", - "none": "пусто", - "addDifference": "Добавить разницу", - "vaeRepoIDValidationMsg": "Онлайн репозиторий VAE", - "convertToDiffusersHelpText2": "Этот процесс заменит вашу запись в менеджере моделей на версию той же модели в Diffusers.", - "custom": "Пользовательский", - "modelTwo": "Модель 2", - "mergedModelSaveLocation": "Путь сохранения", - "merge": "Объединить", - "interpolationType": "Тип интерполяции", - "modelMergeInterpAddDifferenceHelp": "В этом режиме Модель 3 сначала вычитается из Модели 2. Результирующая версия смешивается с Моделью 1 с установленным выше коэффициентом Альфа.", - "modelMergeHeaderHelp1": "Вы можете объединить до трех разных моделей, чтобы создать смешанную, соответствующую вашим потребностям.", - "modelMergeAlphaHelp": "Альфа влияет на силу смешивания моделей. Более низкие значения альфа приводят к меньшему влиянию второй модели.", - "inverseSigmoid": "Обратный Сигмоид", - "weightedSum": "Взвешенная сумма", - "safetensorModels": "SafeTensors", - "v2_768": "v2 (768px)", - "v2_base": "v2 (512px)", - "modelDeleted": "Модель удалена", - "importModels": "Импорт Моделей", - "variant": "Вариант", - "baseModel": "Базовая модель", - "modelsSynced": "Модели синхронизированы", - "modelSyncFailed": "Не удалось синхронизировать модели", - "vae": "VAE", - "modelDeleteFailed": "Не удалось удалить модель", - "noCustomLocationProvided": "Пользовательское местоположение не указано", - "convertingModelBegin": "Конвертация модели. Пожалуйста, подождите.", - "settings": "Настройки", - "selectModel": "Выберите модель", - "syncModels": "Синхронизация моделей", - "syncModelsDesc": "Если ваши модели не синхронизированы с серверной частью, вы можете обновить их, используя эту опцию. Обычно это удобно в тех случаях, когда вы вручную обновляете свой файл \"models.yaml\" или добавляете модели в корневую папку InvokeAI после загрузки приложения.", - "modelUpdateFailed": "Не удалось обновить модель", - "modelConversionFailed": "Не удалось сконвертировать модель", - "modelsMergeFailed": "Не удалось выполнить слияние моделей", - "loraModels": "Модели LoRA", - "onnxModels": "Модели Onnx", - "oliveModels": "Модели Olives", - "conversionNotSupported": "Преобразование не поддерживается", - "noModels": "Нет моделей", - "predictionType": "Тип прогноза (для моделей Stable Diffusion 2.x и периодических моделей Stable Diffusion 1.x)", - "quickAdd": "Быстрое добавление", - "simpleModelDesc": "Укажите путь к локальной модели Diffusers , локальной модели checkpoint / safetensors, идентификатор репозитория HuggingFace или URL-адрес модели контрольной checkpoint / diffusers.", - "advanced": "Продвинутый", - "useCustomConfig": "Использовать кастомный конфиг", - "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", - "closeAdvanced": "Скрыть расширенные", - "modelType": "Тип модели", - "customConfigFileLocation": "Расположение пользовательского файла конфигурации", - "vaePrecision": "Точность VAE", - "noModelSelected": "Модель не выбрана" - }, - "parameters": { - "images": "Изображения", - "steps": "Шаги", - "cfgScale": "Точность следования запросу (CFG)", - "width": "Ширина", - "height": "Высота", - "seed": "Сид", - "randomizeSeed": "Случайный сид", - "shuffle": "Обновить сид", - "noiseThreshold": "Порог шума", - "perlinNoise": "Шум Перлина", - "variations": "Вариации", - "variationAmount": "Кол-во вариаций", - "seedWeights": "Вес сида", - "faceRestoration": "Восстановление лиц", - "restoreFaces": "Восстановить лица", - "type": "Тип", - "strength": "Сила", - "upscaling": "Увеличение", - "upscale": "Увеличить", - "upscaleImage": "Увеличить изображение", - "scale": "Масштаб", - "otherOptions": "Другие параметры", - "seamlessTiling": "Бесшовность", - "hiresOptim": "Оптимизация High Res", - "imageFit": "Уместить изображение", - "codeformerFidelity": "Точность", - "scaleBeforeProcessing": "Масштабировать", - "scaledWidth": "Масштаб Ш", - "scaledHeight": "Масштаб В", - "infillMethod": "Способ заполнения", - "tileSize": "Размер области", - "boundingBoxHeader": "Ограничивающая рамка", - "seamCorrectionHeader": "Настройка шва", - "infillScalingHeader": "Заполнение и масштабирование", - "img2imgStrength": "Сила обработки img2img", - "toggleLoopback": "Зациклить обработку", - "sendTo": "Отправить", - "sendToImg2Img": "Отправить в img2img", - "sendToUnifiedCanvas": "Отправить на Единый холст", - "copyImageToLink": "Скопировать ссылку", - "downloadImage": "Скачать", - "openInViewer": "Открыть в просмотрщике", - "closeViewer": "Закрыть просмотрщик", - "usePrompt": "Использовать запрос", - "useSeed": "Использовать сид", - "useAll": "Использовать все", - "useInitImg": "Использовать как исходное", - "info": "Метаданные", - "initialImage": "Исходное изображение", - "showOptionsPanel": "Показать панель настроек", - "vSymmetryStep": "Шаг верт. симметрии", - "cancel": { - "immediate": "Отменить немедленно", - "schedule": "Отменить после текущей итерации", - "isScheduled": "Отмена", - "setType": "Установить тип отмены", - "cancel": "Отмена" - }, - "general": "Основное", - "hiresStrength": "Сила High Res", - "symmetry": "Симметрия", - "hSymmetryStep": "Шаг гор. симметрии", - "hidePreview": "Скрыть предпросмотр", - "imageToImage": "Изображение в изображение", - "denoisingStrength": "Сила шумоподавления", - "copyImage": "Скопировать изображение", - "showPreview": "Показать предпросмотр", - "noiseSettings": "Шум", - "seamlessXAxis": "Горизонтальная", - "seamlessYAxis": "Вертикальная", - "scheduler": "Планировщик", - "boundingBoxWidth": "Ширина ограничивающей рамки", - "boundingBoxHeight": "Высота ограничивающей рамки", - "positivePromptPlaceholder": "Запрос", - "negativePromptPlaceholder": "Исключающий запрос", - "controlNetControlMode": "Режим управления", - "clipSkip": "CLIP Пропуск", - "aspectRatio": "Соотношение", - "maskAdjustmentsHeader": "Настройка маски", - "maskBlur": "Размытие", - "maskBlurMethod": "Метод размытия", - "seamLowThreshold": "Низкий", - "seamHighThreshold": "Высокий", - "coherenceSteps": "Шагов", - "coherencePassHeader": "Порог Coherence", - "coherenceStrength": "Сила", - "compositingSettingsHeader": "Настройки компоновки", - "invoke": { - "noNodesInGraph": "Нет узлов в графе", - "noModelSelected": "Модель не выбрана", - "noPrompts": "Подсказки не создаются", - "systemBusy": "Система занята", - "noInitialImageSelected": "Исходное изображение не выбрано", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} отсутствует ввод", - "noControlImageForControlAdapter": "Адаптер контроля #{{number}} не имеет изображения", - "noModelForControlAdapter": "Не выбрана модель адаптера контроля #{{number}}.", - "unableToInvoke": "Невозможно вызвать", - "incompatibleBaseModelForControlAdapter": "Модель контрольного адаптера №{{number}} недействительна для основной модели.", - "systemDisconnected": "Система отключена", - "missingNodeTemplate": "Отсутствует шаблон узла", - "readyToInvoke": "Готово к вызову", - "missingFieldTemplate": "Отсутствует шаблон поля", - "addingImagesTo": "Добавление изображений в" - }, - "seamlessX&Y": "Бесшовный X & Y", - "isAllowedToUpscale": { - "useX2Model": "Изображение слишком велико для увеличения с помощью модели x4. Используйте модель x2", - "tooLarge": "Изображение слишком велико для увеличения. Выберите изображение меньшего размера" - }, - "aspectRatioFree": "Свободное", - "maskEdge": "Край маски", - "cpuNoise": "CPU шум", - "cfgRescaleMultiplier": "Множитель масштабирования CFG", - "cfgRescale": "Изменение масштаба CFG", - "patchmatchDownScaleSize": "уменьшить", - "gpuNoise": "GPU шум", - "seamlessX": "Бесшовный X", - "useCpuNoise": "Использовать шум CPU", - "clipSkipWithLayerCount": "CLIP пропуск {{layerCount}}", - "seamlessY": "Бесшовный Y", - "manualSeed": "Указанный сид", - "imageActions": "Действия с изображениями", - "randomSeed": "Случайный", - "iterations": "Кол-во", - "iterationsWithCount_one": "{{count}} Интеграция", - "iterationsWithCount_few": "{{count}} Итерации", - "iterationsWithCount_many": "{{count}} Итераций", - "useSize": "Использовать размер", - "unmasked": "Без маски", - "enableNoiseSettings": "Включить настройки шума", - "coherenceMode": "Режим" - }, - "settings": { - "models": "Модели", - "displayInProgress": "Показывать процесс генерации", - "saveSteps": "Сохранять каждые n щагов", - "confirmOnDelete": "Подтверждать удаление", - "displayHelpIcons": "Показывать значки подсказок", - "enableImageDebugging": "Включить отладку", - "resetWebUI": "Сброс настроек веб-интерфейса", - "resetWebUIDesc1": "Сброс настроек веб-интерфейса удаляет только локальный кэш браузера с вашими изображениями и настройками. Он не удаляет изображения с диска.", - "resetWebUIDesc2": "Если изображения не отображаются в галерее или не работает что-то еще, пожалуйста, попробуйте сбросить настройки, прежде чем сообщать о проблеме на GitHub.", - "resetComplete": "Настройки веб-интерфейса были сброшены.", - "useSlidersForAll": "Использовать ползунки для всех параметров", - "consoleLogLevel": "Уровень логирования", - "shouldLogToConsole": "Логи в консоль", - "developer": "Разработчик", - "general": "Основное", - "showProgressInViewer": "Показывать процесс генерации в Просмотрщике", - "antialiasProgressImages": "Сглаживать предпоказ процесса генерации", - "generation": "Поколение", - "ui": "Пользовательский интерфейс", - "favoriteSchedulers": "Избранные планировщики", - "favoriteSchedulersPlaceholder": "Нет избранных планировщиков", - "enableNodesEditor": "Включить редактор узлов", - "experimental": "Экспериментальные", - "beta": "Бета", - "alternateCanvasLayout": "Альтернативный слой холста", - "showAdvancedOptions": "Показать доп. параметры", - "autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении", - "clearIntermediates": "Очистить промежуточные", - "clearIntermediatesDesc3": "Изображения вашей галереи не будут удалены.", - "clearIntermediatesWithCount_one": "Очистить {{count}} промежуточное", - "clearIntermediatesWithCount_few": "Очистить {{count}} промежуточных", - "clearIntermediatesWithCount_many": "Очистить {{count}} промежуточных", - "enableNSFWChecker": "Включить NSFW проверку", - "clearIntermediatesDisabled": "Очередь должна быть пуста, чтобы очистить промежуточные продукты", - "clearIntermediatesDesc2": "Промежуточные изображения — это побочные продукты генерации, отличные от результирующих изображений в галерее. Очистка промежуточных файлов освободит место на диске.", - "enableInvisibleWatermark": "Включить невидимый водяной знак", - "enableInformationalPopovers": "Включить информационные всплывающие окна", - "intermediatesCleared_one": "Очищено {{count}} промежуточное", - "intermediatesCleared_few": "Очищено {{count}} промежуточных", - "intermediatesCleared_many": "Очищено {{count}} промежуточных", - "clearIntermediatesDesc1": "Очистка промежуточных элементов приведет к сбросу состояния Canvas и ControlNet.", - "intermediatesClearedFailed": "Проблема очистки промежуточных", - "reloadingIn": "Перезагрузка через" - }, - "toast": { - "tempFoldersEmptied": "Временная папка очищена", - "uploadFailed": "Загрузка не удалась", - "uploadFailedUnableToLoadDesc": "Невозможно загрузить файл", - "downloadImageStarted": "Скачивание изображения началось", - "imageCopied": "Изображение скопировано", - "imageLinkCopied": "Ссылка на изображение скопирована", - "imageNotLoaded": "Изображение не загружено", - "imageNotLoadedDesc": "Не удалось найти изображение", - "imageSavedToGallery": "Изображение сохранено в галерею", - "canvasMerged": "Холст объединен", - "sentToImageToImage": "Отправить в img2img", - "sentToUnifiedCanvas": "Отправлено на Единый холст", - "parametersSet": "Параметры заданы", - "parametersNotSet": "Параметры не заданы", - "parametersNotSetDesc": "Не найдены метаданные изображения.", - "parametersFailed": "Проблема с загрузкой параметров", - "parametersFailedDesc": "Невозможно загрузить исходное изображение.", - "seedSet": "Сид задан", - "seedNotSet": "Сид не задан", - "seedNotSetDesc": "Не удалось найти сид для изображения.", - "promptSet": "Запрос задан", - "promptNotSet": "Запрос не задан", - "promptNotSetDesc": "Не удалось найти запрос для изображения.", - "upscalingFailed": "Увеличение не удалось", - "faceRestoreFailed": "Восстановление лиц не удалось", - "metadataLoadFailed": "Не удалось загрузить метаданные", - "initialImageSet": "Исходное изображение задано", - "initialImageNotSet": "Исходное изображение не задано", - "initialImageNotSetDesc": "Не получилось загрузить исходное изображение", - "serverError": "Ошибка сервера", - "disconnected": "Отключено от сервера", - "connected": "Подключено к серверу", - "canceled": "Обработка отменена", - "problemCopyingImageLink": "Не удалось скопировать ссылку на изображение", - "uploadFailedInvalidUploadDesc": "Должно быть одно изображение в формате PNG или JPEG", - "parameterNotSet": "Параметр не задан", - "parameterSet": "Параметр задан", - "nodesLoaded": "Узлы загружены", - "problemCopyingImage": "Не удается скопировать изображение", - "nodesLoadedFailed": "Не удалось загрузить Узлы", - "nodesBrokenConnections": "Не удается загрузить. Некоторые соединения повреждены.", - "nodesUnrecognizedTypes": "Не удается загрузить. Граф имеет нераспознанные типы", - "nodesNotValidJSON": "Недопустимый JSON", - "nodesCorruptedGraph": "Не удается загрузить. Граф, похоже, поврежден.", - "nodesSaved": "Узлы сохранены", - "nodesNotValidGraph": "Недопустимый граф узлов InvokeAI", - "baseModelChangedCleared_one": "Базовая модель изменила, очистила или отключила {{count}} несовместимую подмодель", - "baseModelChangedCleared_few": "Базовая модель изменила, очистила или отключила {{count}} несовместимые подмодели", - "baseModelChangedCleared_many": "Базовая модель изменила, очистила или отключила {{count}} несовместимых подмоделей", - "imageSavingFailed": "Не удалось сохранить изображение", - "canvasSentControlnetAssets": "Холст отправлен в ControlNet и ресурсы", - "problemCopyingCanvasDesc": "Невозможно экспортировать базовый слой", - "loadedWithWarnings": "Рабочий процесс загружен с предупреждениями", - "setInitialImage": "Установить как исходное изображение", - "canvasCopiedClipboard": "Холст скопирован в буфер обмена", - "setControlImage": "Установить как контрольное изображение", - "setNodeField": "Установить как поле узла", - "problemSavingMask": "Проблема с сохранением маски", - "problemSavingCanvasDesc": "Невозможно экспортировать базовый слой", - "invalidUpload": "Неверная загрузка", - "maskSavedAssets": "Маска сохранена в ресурсах", - "modelAddFailed": "Не удалось добавить модель", - "problemDownloadingCanvas": "Проблема с скачиванием холста", - "setAsCanvasInitialImage": "Установить в качестве исходного изображения холста", - "problemMergingCanvas": "Проблема с объединением холста", - "setCanvasInitialImage": "Установить исходное изображение холста", - "imageUploaded": "Изображение загружено", - "addedToBoard": "Добавлено на доску", - "workflowLoaded": "Рабочий процесс загружен", - "problemDeletingWorkflow": "Проблема с удалением рабочего процесса", - "modelAddedSimple": "Модель добавлена", - "problemImportingMaskDesc": "Невозможно экспортировать маску", - "problemCopyingCanvas": "Проблема с копированием холста", - "workflowDeleted": "Рабочий процесс удален", - "problemSavingCanvas": "Проблема с сохранением холста", - "canvasDownloaded": "Холст скачан", - "setIPAdapterImage": "Установить как образ IP-адаптера", - "problemMergingCanvasDesc": "Невозможно экспортировать базовый слой", - "problemDownloadingCanvasDesc": "Невозможно экспортировать базовый слой", - "problemSavingMaskDesc": "Невозможно экспортировать маску", - "problemRetrievingWorkflow": "Проблема с получением рабочего процесса", - "imageSaved": "Изображение сохранено", - "maskSentControlnetAssets": "Маска отправлена в ControlNet и ресурсы", - "canvasSavedGallery": "Холст сохранен в галерею", - "imageUploadFailed": "Не удалось загрузить изображение", - "modelAdded": "Добавлена модель: {{modelName}}", - "problemImportingMask": "Проблема с импортом маски" - }, - "tooltip": { - "feature": { - "prompt": "Это поле для текста запроса, включая объекты генерации и стилистические термины. В запрос можно включить и коэффициенты веса (значимости токена), но консольные команды и параметры не будут работать.", - "gallery": "Здесь отображаются генерации из папки outputs по мере их появления.", - "other": "Эти опции включают альтернативные режимы обработки для Invoke. 'Бесшовный узор' создаст повторяющиеся узоры на выходе. 'Высокое разрешение' это генерация в два этапа с помощью img2img: используйте эту настройку, когда хотите получить цельное изображение большего размера без артефактов.", - "seed": "Значение сида влияет на начальный шум, из которого сформируется изображение. Можно использовать уже имеющийся сид из предыдущих изображений. 'Порог шума' используется для смягчения артефактов при высоких значениях CFG (попробуйте в диапазоне 0-10), а Перлин для добавления шума Перлина в процессе генерации: оба параметра служат для большей вариативности результатов.", - "variations": "Попробуйте вариацию со значением от 0.1 до 1.0, чтобы изменить результат для заданного сида. Интересные вариации сида находятся между 0.1 и 0.3.", - "upscale": "Используйте ESRGAN, чтобы увеличить изображение сразу после генерации.", - "faceCorrection": "Коррекция лиц с помощью GFPGAN или Codeformer: алгоритм определяет лица в готовом изображении и исправляет любые дефекты. Высокие значение силы меняет изображение сильнее, в результате лица будут выглядеть привлекательнее. У Codeformer более высокая точность сохранит исходное изображение в ущерб коррекции лица.", - "imageToImage": "'Изображение в изображение' загружает любое изображение, которое затем используется для генерации вместе с запросом. Чем больше значение, тем сильнее изменится изображение в результате. Возможны значения от 0 до 1, рекомендуется диапазон .25-.75", - "boundingBox": "'Ограничительная рамка' аналогична настройкам Ширина и Высота для 'Избражения из текста' или 'Изображения в изображение'. Будет обработана только область в рамке.", - "seamCorrection": "Управление обработкой видимых швов, возникающих между изображениями на холсте.", - "infillAndScaling": "Управление методами заполнения (используется для масок или стертых областей холста) и масштабирования (полезно для малых размеров ограничивающей рамки)." - } - }, - "unifiedCanvas": { - "layer": "Слой", - "base": "Базовый", - "mask": "Маска", - "maskingOptions": "Параметры маски", - "enableMask": "Включить маску", - "preserveMaskedArea": "Сохранять маскируемую область", - "clearMask": "Очистить маску", - "brush": "Кисть", - "eraser": "Ластик", - "fillBoundingBox": "Заполнить ограничивающую рамку", - "eraseBoundingBox": "Стереть ограничивающую рамку", - "colorPicker": "Пипетка", - "brushOptions": "Параметры кисти", - "brushSize": "Размер", - "move": "Переместить", - "resetView": "Сбросить вид", - "mergeVisible": "Объединить видимые", - "saveToGallery": "Сохранить в галерею", - "copyToClipboard": "Копировать в буфер обмена", - "downloadAsImage": "Скачать как изображение", - "undo": "Отменить", - "redo": "Повторить", - "clearCanvas": "Очистить холст", - "canvasSettings": "Настройки холста", - "showIntermediates": "Показывать процесс", - "showGrid": "Показать сетку", - "snapToGrid": "Привязать к сетке", - "darkenOutsideSelection": "Затемнить холст снаружи", - "autoSaveToGallery": "Автосохранение в галерее", - "saveBoxRegionOnly": "Сохранять только выделение", - "limitStrokesToBox": "Ограничить штрихи выделением", - "showCanvasDebugInfo": "Показать доп. информацию о холсте", - "clearCanvasHistory": "Очистить историю холста", - "clearHistory": "Очистить историю", - "clearCanvasHistoryMessage": "Очистка истории холста оставляет текущий холст нетронутым, но удаляет историю отмен и повторов.", - "clearCanvasHistoryConfirm": "Вы уверены, что хотите очистить историю холста?", - "emptyTempImageFolder": "Очистить временную папку", - "emptyFolder": "Очистить папку", - "emptyTempImagesFolderMessage": "Очищение папки временных изображений также полностью сбрасывает холст, включая всю историю отмены/повтора, размещаемые изображения и базовый слой холста.", - "emptyTempImagesFolderConfirm": "Вы уверены, что хотите очистить временную папку?", - "activeLayer": "Активный слой", - "canvasScale": "Масштаб холста", - "boundingBox": "Ограничивающая рамка", - "scaledBoundingBox": "Масштабирование рамки", - "boundingBoxPosition": "Позиция ограничивающей рамки", - "canvasDimensions": "Размеры холста", - "canvasPosition": "Положение холста", - "cursorPosition": "Положение курсора", - "previous": "Предыдущее", - "next": "Следующее", - "accept": "Принять", - "showHide": "Показать/Скрыть", - "discardAll": "Отменить все", - "betaClear": "Очистить", - "betaDarkenOutside": "Затемнить снаружи", - "betaLimitToBox": "Ограничить выделением", - "betaPreserveMasked": "Сохранять маскируемую область", - "antialiasing": "Не удалось скопировать ссылку на изображение", - "saveMask": "Сохранить $t(unifiedCanvas.mask)", - "showResultsOn": "Показывать результаты (вкл)", - "showResultsOff": "Показывать результаты (вЫкл)" - }, - "accessibility": { - "modelSelect": "Выбор модели", - "uploadImage": "Загрузить изображение", - "nextImage": "Следующее изображение", - "previousImage": "Предыдущее изображение", - "zoomIn": "Приблизить", - "zoomOut": "Отдалить", - "rotateClockwise": "Повернуть по часовой стрелке", - "rotateCounterClockwise": "Повернуть против часовой стрелки", - "flipVertically": "Перевернуть вертикально", - "flipHorizontally": "Отразить горизонтально", - "toggleAutoscroll": "Включить автопрокрутку", - "toggleLogViewer": "Показать или скрыть просмотрщик логов", - "showOptionsPanel": "Показать боковую панель", - "invokeProgressBar": "Индикатор выполнения", - "reset": "Сброс", - "modifyConfig": "Изменить конфиг", - "useThisParameter": "Использовать этот параметр", - "copyMetadataJson": "Скопировать метаданные JSON", - "exitViewer": "Закрыть просмотрщик", - "menu": "Меню", - "showGalleryPanel": "Показать панель галереи", - "mode": "Режим", - "loadMore": "Загрузить больше", - "resetUI": "$t(accessibility.reset) интерфейс", - "createIssue": "Сообщить о проблеме" - }, - "ui": { - "showProgressImages": "Показывать промежуточный итог", - "hideProgressImages": "Не показывать промежуточный итог", - "swapSizes": "Поменять местами размеры", - "lockRatio": "Зафиксировать пропорции" - }, - "nodes": { - "zoomInNodes": "Увеличьте масштаб", - "zoomOutNodes": "Уменьшите масштаб", - "fitViewportNodes": "Уместить вид", - "hideGraphNodes": "Скрыть оверлей графа", - "showGraphNodes": "Показать оверлей графа", - "showLegendNodes": "Показать тип поля", - "hideMinimapnodes": "Скрыть миникарту", - "hideLegendNodes": "Скрыть тип поля", - "showMinimapnodes": "Показать миникарту", - "loadWorkflow": "Загрузить рабочий процесс", - "reloadNodeTemplates": "Перезагрузить шаблоны узлов", - "downloadWorkflow": "Скачать JSON рабочего процесса", - "booleanPolymorphicDescription": "Коллекция логических значений.", - "addNode": "Добавить узел", - "addLinearView": "Добавить в линейный вид", - "animatedEdges": "Анимированные ребра", - "booleanCollectionDescription": "Коллекция логических значений.", - "boardField": "Доска", - "animatedEdgesHelp": "Анимация выбранных ребер и ребер, соединенных с выбранными узлами", - "booleanPolymorphic": "Логическое полиморфное", - "boolean": "Логические значения", - "booleanDescription": "Логические значения могут быть только true или false.", - "cannotConnectInputToInput": "Невозможно подключить вход к входу", - "boardFieldDescription": "Доска галереи", - "cannotConnectOutputToOutput": "Невозможно подключить выход к выходу", - "booleanCollection": "Логическая коллекция", - "addNodeToolTip": "Добавить узел (Shift+A, Пробел)", - "scheduler": "Планировщик", - "inputField": "Поле ввода", - "controlFieldDescription": "Информация об управлении, передаваемая между узлами.", - "skippingUnknownOutputType": "Пропуск неизвестного типа выходного поля", - "denoiseMaskFieldDescription": "Маска шумоподавления может передаваться между узлами", - "floatCollectionDescription": "Коллекция чисел Float.", - "missingTemplate": "Недопустимый узел: узел {{node}} типа {{type}} не имеет шаблона (не установлен?)", - "outputSchemaNotFound": "Схема вывода не найдена", - "ipAdapterPolymorphicDescription": "Коллекция IP-адаптеров.", - "workflowDescription": "Краткое описание", - "inputFieldTypeParseError": "Невозможно разобрать тип поля ввода {{node}}.{{field}} ({{message}})", - "colorFieldDescription": "Цвет RGBA.", - "mainModelField": "Модель", - "unhandledInputProperty": "Необработанное входное свойство", - "unsupportedAnyOfLength": "слишком много элементов объединения ({{count}})", - "versionUnknown": " Версия неизвестна", - "ipAdapterCollection": "Коллекция IP-адаптеров", - "conditioningCollection": "Коллекция условий", - "maybeIncompatible": "Может быть несовместимо с установленным", - "unsupportedArrayItemType": "неподдерживаемый тип элемента массива \"{{type}}\"", - "ipAdapterPolymorphic": "Полиморфный IP-адаптер", - "noNodeSelected": "Узел не выбран", - "unableToValidateWorkflow": "Невозможно проверить рабочий процесс", - "enum": "Перечисления", - "updateAllNodes": "Обновить узлы", - "integerPolymorphicDescription": "Коллекция целых чисел.", - "noOutputRecorded": "Выходы не зарегистрированы", - "updateApp": "Обновить приложение", - "conditioningCollectionDescription": "Условные обозначения могут передаваться между узлами.", - "colorPolymorphic": "Полиморфный цвет", - "colorCodeEdgesHelp": "Цветовая маркировка ребер в соответствии с их связанными полями", - "float": "Float", - "workflowContact": "Контакт", - "targetNodeFieldDoesNotExist": "Неверный край: целевое/вводное поле {{node}}.{{field}} не существует", - "skippingReservedFieldType": "Пропуск зарезервированного типа поля", - "unsupportedMismatchedUnion": "несовпадение типа CollectionOrScalar с базовыми типами {{firstType}} и {{secondType}}", - "sDXLMainModelFieldDescription": "Поле модели SDXL.", - "allNodesUpdated": "Все узлы обновлены", - "conditioningPolymorphic": "Полиморфные условия", - "integer": "Целое число", - "colorField": "Цвет", - "nodeTemplate": "Шаблон узла", - "problemReadingWorkflow": "Проблема с чтением рабочего процесса из изображения", - "sourceNode": "Исходный узел", - "nodeOpacity": "Непрозрачность узла", - "sourceNodeDoesNotExist": "Недопустимое ребро: исходный/выходной узел {{node}} не существует", - "pickOne": "Выбери один", - "integerDescription": "Целые числа — это числа без запятой или точки.", - "outputField": "Поле вывода", - "unableToLoadWorkflow": "Невозможно загрузить рабочий процесс", - "unableToExtractEnumOptions": "невозможно извлечь параметры перечисления", - "snapToGrid": "Привязка к сетке", - "stringPolymorphic": "Полиморфная строка", - "conditioningPolymorphicDescription": "Условие может быть передано между узлами.", - "noFieldsLinearview": "Нет полей, добавленных в линейный вид", - "skipped": "Пропущено", - "unableToParseFieldType": "невозможно проанализировать тип поля", - "imagePolymorphic": "Полиморфное изображение", - "nodeSearch": "Поиск узлов", - "updateNode": "Обновить узел", - "imagePolymorphicDescription": "Коллекция изображений.", - "floatPolymorphic": "Полиморфные Float", - "outputFieldInInput": "Поле вывода во входных данных", - "version": "Версия", - "doesNotExist": "не найдено", - "unrecognizedWorkflowVersion": "Неизвестная версия схемы рабочего процесса {{version}}", - "ipAdapterCollectionDescription": "Коллекция IP-адаптеров.", - "stringCollectionDescription": "Коллекция строк.", - "unableToParseNode": "Невозможно разобрать узел", - "controlCollection": "Контрольная коллекция", - "validateConnections": "Проверка соединений и графика", - "stringCollection": "Коллекция строк", - "inputMayOnlyHaveOneConnection": "Вход может иметь только одно соединение", - "notes": "Заметки", - "outputFieldTypeParseError": "Невозможно разобрать тип поля вывода {{node}}.{{field}} ({{message}})", - "uNetField": "UNet", - "nodeOutputs": "Выходы узла", - "currentImageDescription": "Отображает текущее изображение в редакторе узлов", - "validateConnectionsHelp": "Предотвратить создание недопустимых соединений и вызов недопустимых графиков", - "problemSettingTitle": "Проблема с настройкой названия", - "ipAdapter": "IP-адаптер", - "integerCollection": "Коллекция целых чисел", - "collectionItem": "Элемент коллекции", - "noConnectionInProgress": "Соединение не выполняется", - "vaeModelField": "VAE", - "controlCollectionDescription": "Информация об управлении, передаваемая между узлами.", - "skippedReservedInput": "Пропущено зарезервированное поле ввода", - "workflowVersion": "Версия", - "noConnectionData": "Нет данных о соединении", - "outputFields": "Поля вывода", - "fieldTypesMustMatch": "Типы полей должны совпадать", - "workflow": "Рабочий процесс", - "edge": "Край", - "inputNode": "Входной узел", - "enumDescription": "Перечисления - это значения, которые могут быть одним из нескольких вариантов.", - "unkownInvocation": "Неизвестный тип вызова", - "sourceNodeFieldDoesNotExist": "Неверный край: поле источника/вывода {{node}}.{{field}} не существует", - "imageField": "Изображение", - "skippedReservedOutput": "Пропущено зарезервированное поле вывода", - "cannotDuplicateConnection": "Невозможно создать дубликаты соединений", - "unknownTemplate": "Неизвестный шаблон", - "noWorkflow": "Нет рабочего процесса", - "removeLinearView": "Удалить из линейного вида", - "integerCollectionDescription": "Коллекция целых чисел.", - "colorPolymorphicDescription": "Коллекция цветов.", - "sDXLMainModelField": "Модель SDXL", - "workflowTags": "Теги", - "denoiseMaskField": "Маска шумоподавления", - "missingCanvaInitImage": "Отсутствует начальное изображение холста", - "conditioningFieldDescription": "Условие может быть передано между узлами.", - "clipFieldDescription": "Подмодели Tokenizer и text_encoder.", - "fullyContainNodesHelp": "Чтобы узлы были выбраны, они должны полностью находиться в поле выбора", - "unableToGetWorkflowVersion": "Не удалось получить версию схемы рабочего процесса", - "noImageFoundState": "Начальное изображение не найдено в состоянии", - "workflowValidation": "Ошибка проверки рабочего процесса", - "nodePack": "Пакет узлов", - "stringDescription": "Строки это просто текст.", - "nodeType": "Тип узла", - "noMatchingNodes": "Нет соответствующих узлов", - "fullyContainNodes": "Выбор узлов с полным содержанием", - "integerPolymorphic": "Целочисленные полиморфные", - "executionStateInProgress": "В процессе", - "unableToExtractSchemaNameFromRef": "невозможно извлечь имя схемы из ссылки", - "noFieldType": "Нет типа поля", - "colorCollection": "Коллекция цветов.", - "executionStateError": "Ошибка", - "noOutputSchemaName": "В объекте ref не найдено имя выходной схемы", - "ipAdapterModel": "Модель IP-адаптера", - "prototypeDesc": "Этот вызов является прототипом. Он может претерпевать изменения при обновлении приложения и может быть удален в любой момент.", - "unableToMigrateWorkflow": "Невозможно перенести рабочий процесс", - "skippingInputNoTemplate": "Пропуск поля ввода без шаблона", - "ipAdapterDescription": "Image Prompt Adapter (IP-адаптер).", - "missingCanvaInitMaskImages": "Отсутствуют начальные изображения холста и маски", - "problemReadingMetadata": "Проблема с чтением метаданных с изображения", - "unknownOutput": "Неизвестный вывод: {{name}}", - "stringPolymorphicDescription": "Коллекция строк.", - "oNNXModelField": "Модель ONNX", - "executionStateCompleted": "Выполнено", - "node": "Узел", - "skippingUnknownInputType": "Пропуск неизвестного типа поля", - "workflowAuthor": "Автор", - "currentImage": "Текущее изображение", - "controlField": "Контроль", - "workflowName": "Название", - "collection": "Коллекция", - "ipAdapterModelDescription": "Поле модели IP-адаптера", - "invalidOutputSchema": "Неверная схема вывода", - "unableToUpdateNode": "Невозможно обновить узел", - "floatDescription": "Float - это числа с запятой.", - "floatPolymorphicDescription": "Коллекция Float-ов.", - "vaeField": "VAE", - "conditioningField": "Обусловленность", - "unknownErrorValidatingWorkflow": "Неизвестная ошибка при проверке рабочего процесса", - "collectionFieldType": "Коллекция {{name}}", - "unhandledOutputProperty": "Необработанное выходное свойство", - "workflowNotes": "Примечания", - "string": "Строка", - "floatCollection": "Коллекция Float", - "unknownNodeType": "Неизвестный тип узла", - "unableToUpdateNodes_one": "Невозможно обновить {{count}} узел", - "unableToUpdateNodes_few": "Невозможно обновить {{count}} узла", - "unableToUpdateNodes_many": "Невозможно обновить {{count}} узлов", - "connectionWouldCreateCycle": "Соединение создаст цикл", - "cannotConnectToSelf": "Невозможно подключиться к самому себе", - "notesDescription": "Добавляйте заметки о своем рабочем процессе", - "unknownField": "Неизвестное поле", - "inputFields": "Поля ввода", - "colorCodeEdges": "Ребра с цветовой кодировкой", - "uNetFieldDescription": "Подмодель UNet.", - "unknownNode": "Неизвестный узел", - "targetNodeDoesNotExist": "Недопустимое ребро: целевой/входной узел {{node}} не существует", - "imageCollectionDescription": "Коллекция изображений.", - "mismatchedVersion": "Недопустимый узел: узел {{node}} типа {{type}} имеет несоответствующую версию (попробовать обновить?)", - "unknownFieldType": "$t(nodes.unknownField) тип: {{type}}", - "vaeFieldDescription": "Подмодель VAE.", - "imageFieldDescription": "Изображения могут передаваться между узлами.", - "outputNode": "Выходной узел", - "collectionOrScalarFieldType": "Коллекция | Скаляр {{name}}", - "betaDesc": "Этот вызов находится в бета-версии. Пока он не станет стабильным, в нем могут происходить изменения при обновлении приложений. Мы планируем поддерживать этот вызов в течение длительного времени.", - "nodeVersion": "Версия узла", - "loadingNodes": "Загрузка узлов...", - "snapToGridHelp": "Привязка узлов к сетке при перемещении", - "workflowSettings": "Настройки редактора рабочих процессов", - "sDXLRefinerModelField": "Модель перерисовщик", - "loRAModelField": "LoRA", - "deletedInvalidEdge": "Удалено недопустимое ребро {{source}} -> {{target}}", - "unableToParseEdge": "Невозможно разобрать край", - "unknownInput": "Неизвестный вход: {{name}}", - "oNNXModelFieldDescription": "Поле модели ONNX.", - "imageCollection": "Коллекция изображений" - }, - "controlnet": { - "amult": "a_mult", - "contentShuffleDescription": "Перетасовывает содержимое изображения", - "bgth": "bg_th", - "contentShuffle": "Перетасовка содержимого", - "beginEndStepPercent": "Процент начала/конца шага", - "duplicate": "Дублировать", - "balanced": "Сбалансированный", - "f": "F", - "depthMidasDescription": "Генерация карты глубины с использованием Midas", - "control": "Контроль", - "coarse": "Грубость обработки", - "crop": "Обрезка", - "depthMidas": "Глубина (Midas)", - "enableControlnet": "Включить ControlNet", - "detectResolution": "Определить разрешение", - "controlMode": "Режим контроля", - "cannyDescription": "Детектор границ Canny", - "depthZoe": "Глубина (Zoe)", - "autoConfigure": "Автонастройка процессора", - "delete": "Удалить", - "canny": "Canny", - "depthZoeDescription": "Генерация карты глубины с использованием Zoe", - "resize": "Изменить размер", - "showAdvanced": "Показать расширенные", - "addT2IAdapter": "Добавить $t(common.t2iAdapter)", - "importImageFromCanvas": "Импортировать изображение с холста", - "lineartDescription": "Конвертация изображения в контурный рисунок", - "normalBae": "Обычный BAE", - "importMaskFromCanvas": "Импортировать маску с холста", - "hideAdvanced": "Скрыть расширенные", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) включен, $t(common.t2iAdapter)s отключен", - "ipAdapterModel": "Модель адаптера", - "resetControlImage": "Сбросить контрольное изображение", - "prompt": "Запрос", - "controlnet": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.controlNet)", - "openPoseDescription": "Оценка позы человека с помощью Openpose", - "resizeMode": "Режим изменения размера", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) включен, $t(common.controlNet)s отключен", - "weight": "Вес", - "selectModel": "Выберите модель", - "w": "В", - "processor": "Процессор", - "addControlNet": "Добавить $t(common.controlNet)", - "none": "ничего", - "incompatibleBaseModel": "Несовместимая базовая модель:", - "controlNetT2IMutexDesc": "$t(common.controlNet) и $t(common.t2iAdapter) одновременно в настоящее время не поддерживаются.", - "ip_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.ipAdapter)", - "pidiDescription": "PIDI-обработка изображений", - "mediapipeFace": "Лицо Mediapipe", - "fill": "Заполнить", - "addIPAdapter": "Добавить $t(common.ipAdapter)", - "lineart": "Контурный рисунок", - "colorMapDescription": "Создает карту цветов из изображения", - "lineartAnimeDescription": "Создание контурных рисунков в стиле аниме", - "t2i_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.t2iAdapter)", - "minConfidence": "Минимальная уверенность", - "imageResolution": "Разрешение изображения", - "colorMap": "Цвет", - "lowThreshold": "Низкий порог", - "highThreshold": "Высокий порог", - "normalBaeDescription": "Обычная обработка BAE", - "noneDescription": "Обработка не применяется", - "saveControlImage": "Сохранить контрольное изображение", - "toggleControlNet": "Переключить эту ControlNet", - "controlAdapter_one": "Адаптер контроля", - "controlAdapter_few": "Адаптера контроля", - "controlAdapter_many": "Адаптеров контроля", - "safe": "Безопасный", - "colorMapTileSize": "Размер плитки", - "lineartAnime": "Контурный рисунок в стиле аниме", - "ipAdapterImageFallback": "Изображение IP Adapter не выбрано", - "mediapipeFaceDescription": "Обнаружение лиц с помощью Mediapipe", - "hedDescription": "Целостное обнаружение границ", - "setControlImageDimensions": "Установите размеры контрольного изображения на Ш/В", - "scribble": "каракули", - "resetIPAdapterImage": "Сбросить изображение IP Adapter", - "handAndFace": "Руки и Лицо", - "enableIPAdapter": "Включить IP Adapter", - "maxFaces": "Макс Лица", - "mlsdDescription": "Минималистичный детектор отрезков линии" - }, - "boards": { - "autoAddBoard": "Авто добавление Доски", - "topMessage": "Эта доска содержит изображения, используемые в следующих функциях:", - "move": "Перемещение", - "menuItemAutoAdd": "Авто добавление на эту доску", - "myBoard": "Моя Доска", - "searchBoard": "Поиск Доски...", - "noMatching": "Нет подходящих Досок", - "selectBoard": "Выбрать Доску", - "cancel": "Отменить", - "addBoard": "Добавить Доску", - "bottomMessage": "Удаление этой доски и ее изображений приведет к сбросу всех функций, использующихся их в данный момент.", - "uncategorized": "Без категории", - "changeBoard": "Изменить Доску", - "loading": "Загрузка...", - "clearSearch": "Очистить поиск", - "deleteBoardOnly": "Удалить только доску", - "movingImagesToBoard_one": "Перемещаем {{count}} изображение на доску:", - "movingImagesToBoard_few": "Перемещаем {{count}} изображения на доску:", - "movingImagesToBoard_many": "Перемещаем {{count}} изображений на доску:", - "downloadBoard": "Скачать доску", - "deleteBoard": "Удалить доску", - "deleteBoardAndImages": "Удалить доску и изображения", - "deletedBoardsCannotbeRestored": "Удаленные доски не подлежат восстановлению" - }, - "dynamicPrompts": { - "seedBehaviour": { - "perPromptDesc": "Используйте разные сиды для каждого изображения", - "perIterationLabel": "Сид на итерацию", - "perIterationDesc": "Используйте разные сиды для каждой итерации", - "perPromptLabel": "Сид для каждого изображения", - "label": "Поведение сида" - }, - "enableDynamicPrompts": "Динамические запросы", - "combinatorial": "Комбинаторная генерация", - "maxPrompts": "Максимум запросов", - "promptsPreview": "Предпросмотр запросов", - "promptsWithCount_one": "{{count}} Запрос", - "promptsWithCount_few": "{{count}} Запроса", - "promptsWithCount_many": "{{count}} Запросов", - "dynamicPrompts": "Динамические запросы" - }, - "popovers": { - "noiseUseCPU": { - "paragraphs": [ - "Определяет, генерируется ли шум на CPU или на GPU.", - "Если включен шум CPU, определенное начальное число будет создавать одно и то же изображение на любом компьютере.", - "Включение шума CPU не влияет на производительность." - ], - "heading": "Использовать шум CPU" - }, - "paramScheduler": { - "paragraphs": [ - "Планировщик определяет, как итеративно добавлять шум к изображению или как обновлять образец на основе выходных данных модели." - ], - "heading": "Планировщик" - }, - "scaleBeforeProcessing": { - "paragraphs": [ - "Масштабирует выбранную область до размера, наиболее подходящего для модели перед процессом создания изображения." - ], - "heading": "Масштабирование перед обработкой" - }, - "compositingMaskAdjustments": { - "heading": "Регулировка маски", - "paragraphs": [ - "Отрегулируйте маску." - ] - }, - "paramRatio": { - "heading": "Соотношение сторон", - "paragraphs": [ - "Соотношение сторон создаваемого изображения.", - "Размер изображения (в пикселях), эквивалентный 512x512, рекомендуется для моделей SD1.5, а размер, эквивалентный 1024x1024, рекомендуется для моделей SDXL." - ] - }, - "compositingCoherenceSteps": { - "heading": "Шаги", - "paragraphs": [ - null, - "То же, что и основной параметр «Шаги»." - ] - }, - "dynamicPrompts": { - "paragraphs": [ - "Динамические запросы превращают одно приглашение на множество.", - "Базовый синтакиси: \"a {red|green|blue} ball\". В итоге будет 3 запроса: \"a red ball\", \"a green ball\" и \"a blue ball\".", - "Вы можете использовать синтаксис столько раз, сколько захотите в одном запросе, но обязательно контролируйте количество генерируемых запросов с помощью параметра «Максимальное количество запросов»." - ], - "heading": "Динамические запросы" - }, - "paramVAE": { - "paragraphs": [ - "Модель, используемая для преобразования вывода AI в конечное изображение." - ], - "heading": "VAE" - }, - "compositingBlur": { - "heading": "Размытие", - "paragraphs": [ - "Радиус размытия маски." - ] - }, - "paramIterations": { - "paragraphs": [ - "Количество изображений, которые нужно сгенерировать.", - "Если динамические подсказки включены, каждое из подсказок будет генерироваться столько раз." - ], - "heading": "Итерации" - }, - "paramVAEPrecision": { - "heading": "Точность VAE", - "paragraphs": [ - "Точность, используемая во время кодирования и декодирования VAE. Точность FP16/половина более эффективна за счет незначительных изменений изображения." - ] - }, - "compositingCoherenceMode": { - "heading": "Режим" - }, - "paramSeed": { - "paragraphs": [ - "Управляет стартовым шумом, используемым для генерации.", - "Отключите «Случайное начальное число», чтобы получить идентичные результаты с теми же настройками генерации." - ], - "heading": "Сид" - }, - "controlNetResizeMode": { - "heading": "Режим изменения размера", - "paragraphs": [ - "Как изображение ControlNet будет соответствовать размеру выходного изображения." - ] - }, - "controlNetBeginEnd": { - "paragraphs": [ - "На каких этапах процесса шумоподавления будет применена ControlNet.", - "ControlNet, применяемые в начале процесса, направляют композицию, а ControlNet, применяемые в конце, направляют детали." - ], - "heading": "Процент начала/конца шага" - }, - "dynamicPromptsSeedBehaviour": { - "paragraphs": [ - "Управляет использованием сида при создании запросов.", - "Для каждой итерации будет использоваться уникальный сид. Используйте это, чтобы изучить варианты запросов для одного сида.", - "Например, если у вас 5 запросов, каждое изображение будет использовать один и то же сид.", - "для каждого изображения будет использоваться уникальный сид. Это обеспечивает большую вариативность." - ], - "heading": "Поведение сида" - }, - "clipSkip": { - "paragraphs": [ - "Выберите, сколько слоев модели CLIP нужно пропустить.", - "Некоторые модели работают лучше с определенными настройками пропуска CLIP.", - "Более высокое значение обычно приводит к менее детализированному изображению." - ], - "heading": "CLIP пропуск" - }, - "paramModel": { - "heading": "Модель", - "paragraphs": [ - "Модель, используемая для шагов шумоподавления.", - "Различные модели обычно обучаются, чтобы специализироваться на достижении определенных эстетических результатов и содержания." - ] - }, - "compositingCoherencePass": { - "heading": "Согласованность", - "paragraphs": [ - "Второй этап шумоподавления помогает исправить шов между изначальным изображением и перерисованной или расширенной частью." - ] - }, - "paramDenoisingStrength": { - "paragraphs": [ - "Количество шума, добавляемого к входному изображению.", - "0 приведет к идентичному изображению, а 1 - к совершенно новому." - ], - "heading": "Шумоподавление" - }, - "compositingStrength": { - "heading": "Сила", - "paragraphs": [ - null, - "То же, что параметр «Сила шумоподавления img2img»." - ] - }, - "paramNegativeConditioning": { - "paragraphs": [ - "Stable Diffusion пытается избежать указанных в отрицательном запросе концепций. Используйте это, чтобы исключить качества или объекты из вывода.", - "Поддерживает синтаксис Compel и встраивания." - ], - "heading": "Негативный запрос" - }, - "compositingBlurMethod": { - "heading": "Метод размытия", - "paragraphs": [ - "Метод размытия, примененный к замаскированной области." - ] - }, - "dynamicPromptsMaxPrompts": { - "heading": "Макс. запросы", - "paragraphs": [ - "Ограничивает количество запросов, которые могут быть созданы с помощью динамических запросов." - ] - }, - "paramCFGRescaleMultiplier": { - "heading": "Множитель масштабирования CFG", - "paragraphs": [ - "Множитель масштабирования CFG, используемый для моделей, обученных с использованием нулевого терминального SNR (ztsnr). Рекомендуемое значение 0,7." - ] - }, - "infillMethod": { - "paragraphs": [ - "Метод заполнения выбранной области." - ], - "heading": "Метод заполнения" - }, - "controlNetWeight": { - "heading": "Вес", - "paragraphs": [ - "Насколько сильно ControlNet повлияет на созданное изображение." - ] - }, - "controlNet": { - "heading": "ControlNet", - "paragraphs": [ - "Сети ControlNets обеспечивают руководство процессом генерации, помогая создавать изображения с контролируемой композицией, структурой или стилем, в зависимости от выбранной модели." - ] - }, - "paramCFGScale": { - "heading": "Шкала точности (CFG)", - "paragraphs": [ - "Контролирует, насколько ваш запрос влияет на процесс генерации." - ] - }, - "controlNetControlMode": { - "paragraphs": [ - "Придает больший вес либо запросу, либо ControlNet." - ], - "heading": "Режим управления" - }, - "paramSteps": { - "heading": "Шаги", - "paragraphs": [ - "Количество шагов, которые будут выполнены в ходе генерации.", - "Большее количество шагов обычно приводит к созданию более качественных изображений, но требует больше времени на создание." - ] - }, - "paramPositiveConditioning": { - "heading": "Запрос", - "paragraphs": [ - "Направляет процесс генерации. Вы можете использовать любые слова и фразы.", - "Большинство моделей Stable Diffusion работают только с запросом на английском языке, но бывают исключения." - ] - }, - "lora": { - "heading": "Вес LoRA", - "paragraphs": [ - "Более высокий вес LoRA приведет к большему влиянию на конечное изображение." - ] - } - }, - "metadata": { - "seamless": "Бесшовность", - "positivePrompt": "Запрос", - "negativePrompt": "Негативный запрос", - "generationMode": "Режим генерации", - "Threshold": "Шумовой порог", - "metadata": "Метаданные", - "strength": "Сила img2img", - "seed": "Сид", - "imageDetails": "Детали изображения", - "perlin": "Шум Перлига", - "model": "Модель", - "noImageDetails": "Детали изображения не найдены", - "hiresFix": "Оптимизация высокого разрешения", - "cfgScale": "Шкала точности", - "fit": "Соответствие изображения к изображению", - "initImage": "Исходное изображение", - "recallParameters": "Вызов параметров", - "height": "Высота", - "variations": "Пары сид-высота", - "noMetaData": "Метаданные не найдены", - "width": "Ширина", - "vae": "VAE", - "createdBy": "Сделано", - "workflow": "Рабочий процесс", - "steps": "Шаги", - "scheduler": "Планировщик", - "noRecallParameters": "Параметры для вызова не найдены", - "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)" - }, - "queue": { - "status": "Статус", - "pruneSucceeded": "Из очереди удалено {{item_count}} выполненных элементов", - "cancelTooltip": "Отменить текущий элемент", - "queueEmpty": "Очередь пуста", - "pauseSucceeded": "Рендеринг приостановлен", - "in_progress": "В процессе", - "queueFront": "Добавить в начало очереди", - "notReady": "Невозможно поставить в очередь", - "batchFailedToQueue": "Не удалось поставить пакет в очередь", - "completed": "Выполнено", - "queueBack": "Добавить в очередь", - "batchValues": "Пакетные значения", - "cancelFailed": "Проблема с отменой элемента", - "queueCountPrediction": "Добавить {{predicted}} в очередь", - "batchQueued": "Пакетная очередь", - "pauseFailed": "Проблема с приостановкой рендеринга", - "clearFailed": "Проблема с очисткой очереди", - "queuedCount": "{{pending}} Ожидание", - "front": "передний", - "clearSucceeded": "Очередь очищена", - "pause": "Пауза", - "pruneTooltip": "Удалить {{item_count}} выполненных задач", - "cancelSucceeded": "Элемент отменен", - "batchQueuedDesc_one": "Добавлен {{count}} сеанс в {{direction}} очереди", - "batchQueuedDesc_few": "Добавлено {{count}} сеанса в {{direction}} очереди", - "batchQueuedDesc_many": "Добавлено {{count}} сеансов в {{direction}} очереди", - "graphQueued": "График поставлен в очередь", - "queue": "Очередь", - "batch": "Пакет", - "clearQueueAlertDialog": "Очистка очереди немедленно отменяет все элементы обработки и полностью очищает очередь.", - "pending": "В ожидании", - "completedIn": "Завершено за", - "resumeFailed": "Проблема с возобновлением рендеринга", - "clear": "Очистить", - "prune": "Сократить", - "total": "Всего", - "canceled": "Отменено", - "pruneFailed": "Проблема с сокращением очереди", - "cancelBatchSucceeded": "Пакет отменен", - "clearTooltip": "Отменить все и очистить очередь", - "current": "Текущий", - "pauseTooltip": "Приостановить рендеринг", - "failed": "Неудачно", - "cancelItem": "Отменить элемент", - "next": "Следующий", - "cancelBatch": "Отменить пакет", - "back": "задний", - "batchFieldValues": "Пакетные значения полей", - "cancel": "Отмена", - "session": "Сессия", - "time": "Время", - "queueTotal": "{{total}} Всего", - "resumeSucceeded": "Рендеринг возобновлен", - "enqueueing": "Пакетная очередь", - "resumeTooltip": "Возобновить рендеринг", - "queueMaxExceeded": "Превышено максимальное значение {{max_queue_size}}, будет пропущен {{skip}}", - "resume": "Продолжить", - "cancelBatchFailed": "Проблема с отменой пакета", - "clearQueueAlertDialog2": "Вы уверены, что хотите очистить очередь?", - "item": "Элемент", - "graphFailedToQueue": "Не удалось поставить график в очередь" - }, - "sdxl": { - "refinerStart": "Запуск перерисовщика", - "selectAModel": "Выберите модель", - "scheduler": "Планировщик", - "cfgScale": "Шкала точности (CFG)", - "negStylePrompt": "Негативный запрос стиля", - "noModelsAvailable": "Нет доступных моделей", - "refiner": "Перерисовщик", - "negAestheticScore": "Отрицательная эстетическая оценка", - "useRefiner": "Использовать перерисовщик", - "denoisingStrength": "Шумоподавление", - "refinermodel": "Модель перерисовщик", - "posAestheticScore": "Положительная эстетическая оценка", - "concatPromptStyle": "Объединение запроса и стиля", - "loading": "Загрузка...", - "steps": "Шаги", - "posStylePrompt": "Запрос стиля" - }, - "invocationCache": { - "useCache": "Использовать кэш", - "disable": "Отключить", - "misses": "Промахи в кэше", - "enableFailed": "Проблема с включением кэша вызовов", - "invocationCache": "Кэш вызовов", - "clearSucceeded": "Кэш вызовов очищен", - "enableSucceeded": "Кэш вызовов включен", - "clearFailed": "Проблема с очисткой кэша вызовов", - "hits": "Попадания в кэш", - "disableSucceeded": "Кэш вызовов отключен", - "disableFailed": "Проблема с отключением кэша вызовов", - "enable": "Включить", - "clear": "Очистить", - "maxCacheSize": "Максимальный размер кэша", - "cacheSize": "Размер кэша" - }, - "workflows": { - "saveWorkflowAs": "Сохранить рабочий процесс как", - "workflowEditorMenu": "Меню редактора рабочего процесса", - "noSystemWorkflows": "Нет системных рабочих процессов", - "workflowName": "Имя рабочего процесса", - "noUserWorkflows": "Нет пользовательских рабочих процессов", - "defaultWorkflows": "Рабочие процессы по умолчанию", - "saveWorkflow": "Сохранить рабочий процесс", - "openWorkflow": "Открытый рабочий процесс", - "clearWorkflowSearchFilter": "Очистить фильтр поиска рабочих процессов", - "workflowLibrary": "Библиотека", - "downloadWorkflow": "Скачать рабочий процесс", - "noRecentWorkflows": "Нет недавних рабочих процессов", - "workflowSaved": "Рабочий процесс сохранен", - "workflowIsOpen": "Рабочий процесс открыт", - "unnamedWorkflow": "Безымянный рабочий процесс", - "savingWorkflow": "Сохранение рабочего процесса...", - "problemLoading": "Проблема с загрузкой рабочих процессов", - "loading": "Загрузка рабочих процессов", - "searchWorkflows": "Поиск рабочих процессов", - "problemSavingWorkflow": "Проблема с сохранением рабочего процесса", - "deleteWorkflow": "Удалить рабочий процесс", - "workflows": "Рабочие процессы", - "noDescription": "Без описания", - "uploadWorkflow": "Загрузить рабочий процесс", - "userWorkflows": "Мои рабочие процессы" - }, - "embedding": { - "noEmbeddingsLoaded": "встраивания не загружены", - "noMatchingEmbedding": "Нет подходящих встраиваний", - "addEmbedding": "Добавить встраивание", - "incompatibleModel": "Несовместимая базовая модель:" - }, - "hrf": { - "enableHrf": "Включить исправление высокого разрешения", - "upscaleMethod": "Метод увеличения", - "enableHrfTooltip": "Сгенерируйте с более низким начальным разрешением, увеличьте его до базового разрешения, а затем запустите Image-to-Image.", - "metadata": { - "strength": "Сила исправления высокого разрешения", - "enabled": "Исправление высокого разрешения включено", - "method": "Метод исправления высокого разрешения" - }, - "hrf": "Исправление высокого разрешения", - "hrfStrength": "Сила исправления высокого разрешения", - "strengthTooltip": "Более низкие значения приводят к меньшему количеству деталей, что может уменьшить потенциальные артефакты." - }, - "models": { - "noLoRAsLoaded": "LoRA не загружены", - "noMatchingModels": "Нет подходящих моделей", - "esrganModel": "Модель ESRGAN", - "loading": "загрузка", - "noMatchingLoRAs": "Нет подходящих LoRA", - "noLoRAsAvailable": "Нет доступных LoRA", - "noModelsAvailable": "Нет доступных моделей", - "addLora": "Добавить LoRA", - "selectModel": "Выберите модель", - "noRefinerModelsInstalled": "Модели SDXL Refiner не установлены", - "noLoRAsInstalled": "Нет установленных LoRA", - "selectLoRA": "Выберите LoRA" - }, - "app": { - "storeNotInitialized": "Магазин не инициализирован" - } -} diff --git a/invokeai/frontend/web/dist/locales/sv.json b/invokeai/frontend/web/dist/locales/sv.json deleted file mode 100644 index eef46c4513..0000000000 --- a/invokeai/frontend/web/dist/locales/sv.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "accessibility": { - "copyMetadataJson": "Kopiera metadata JSON", - "zoomIn": "Zooma in", - "exitViewer": "Avslutningsvisare", - "modelSelect": "Välj modell", - "uploadImage": "Ladda upp bild", - "invokeProgressBar": "Invoke förloppsmätare", - "nextImage": "Nästa bild", - "toggleAutoscroll": "Växla automatisk rullning", - "flipHorizontally": "Vänd vågrätt", - "flipVertically": "Vänd lodrätt", - "zoomOut": "Zooma ut", - "toggleLogViewer": "Växla logvisare", - "reset": "Starta om", - "previousImage": "Föregående bild", - "useThisParameter": "Använd denna parametern", - "rotateCounterClockwise": "Rotera moturs", - "rotateClockwise": "Rotera medurs", - "modifyConfig": "Ändra konfiguration", - "showOptionsPanel": "Visa inställningspanelen" - }, - "common": { - "hotkeysLabel": "Snabbtangenter", - "reportBugLabel": "Rapportera bugg", - "githubLabel": "Github", - "discordLabel": "Discord", - "settingsLabel": "Inställningar", - "langEnglish": "Engelska", - "langDutch": "Nederländska", - "langFrench": "Franska", - "langGerman": "Tyska", - "langItalian": "Italienska", - "langArabic": "العربية", - "langHebrew": "עברית", - "langPolish": "Polski", - "langPortuguese": "Português", - "langBrPortuguese": "Português do Brasil", - "langSimplifiedChinese": "简体中文", - "langJapanese": "日本語", - "langKorean": "한국어", - "langRussian": "Русский", - "unifiedCanvas": "Förenad kanvas", - "nodesDesc": "Ett nodbaserat system för bildgenerering är under utveckling. Håll utkik för uppdateringar om denna fantastiska funktion.", - "langUkranian": "Украї́нська", - "langSpanish": "Español", - "postProcessDesc2": "Ett dedikerat användargränssnitt kommer snart att släppas för att underlätta mer avancerade arbetsflöden av efterbehandling.", - "trainingDesc1": "Ett dedikerat arbetsflöde för träning av dina egna inbäddningar och kontrollpunkter genom Textual Inversion eller Dreambooth från webbgränssnittet.", - "trainingDesc2": "InvokeAI stöder redan träning av anpassade inbäddningar med hjälp av Textual Inversion genom huvudscriptet.", - "upload": "Ladda upp", - "close": "Stäng", - "cancel": "Avbryt", - "accept": "Acceptera", - "statusDisconnected": "Frånkopplad", - "statusGeneratingTextToImage": "Genererar text till bild", - "statusGeneratingImageToImage": "Genererar Bild till bild", - "statusGeneratingInpainting": "Genererar Måla i", - "statusGenerationComplete": "Generering klar", - "statusModelConverted": "Modell konverterad", - "statusMergingModels": "Sammanfogar modeller", - "loading": "Laddar", - "loadingInvokeAI": "Laddar Invoke AI", - "statusRestoringFaces": "Återskapar ansikten", - "languagePickerLabel": "Språkväljare", - "txt2img": "Text till bild", - "nodes": "Noder", - "img2img": "Bild till bild", - "postprocessing": "Efterbehandling", - "postProcessing": "Efterbehandling", - "load": "Ladda", - "training": "Träning", - "postProcessDesc1": "Invoke AI erbjuder ett brett utbud av efterbehandlingsfunktioner. Uppskalning och ansiktsåterställning finns redan tillgängligt i webbgränssnittet. Du kommer åt dem ifrån Avancerade inställningar-menyn under Bild till bild-fliken. Du kan också behandla bilder direkt genom att använda knappen bildåtgärder ovanför nuvarande bild eller i bildvisaren.", - "postProcessDesc3": "Invoke AI's kommandotolk erbjuder många olika funktioner, bland annat \"Förstora\".", - "statusGenerating": "Genererar", - "statusError": "Fel", - "back": "Bakåt", - "statusConnected": "Ansluten", - "statusPreparing": "Förbereder", - "statusProcessingCanceled": "Bearbetning avbruten", - "statusProcessingComplete": "Bearbetning färdig", - "statusGeneratingOutpainting": "Genererar Fyll ut", - "statusIterationComplete": "Itterering klar", - "statusSavingImage": "Sparar bild", - "statusRestoringFacesGFPGAN": "Återskapar ansikten (GFPGAN)", - "statusRestoringFacesCodeFormer": "Återskapar ansikten (CodeFormer)", - "statusUpscaling": "Skala upp", - "statusUpscalingESRGAN": "Uppskalning (ESRGAN)", - "statusModelChanged": "Modell ändrad", - "statusLoadingModel": "Laddar modell", - "statusConvertingModel": "Konverterar modell", - "statusMergedModels": "Modeller sammanfogade" - }, - "gallery": { - "generations": "Generationer", - "showGenerations": "Visa generationer", - "uploads": "Uppladdningar", - "showUploads": "Visa uppladdningar", - "galleryImageSize": "Bildstorlek", - "allImagesLoaded": "Alla bilder laddade", - "loadMore": "Ladda mer", - "galleryImageResetSize": "Återställ storlek", - "gallerySettings": "Galleriinställningar", - "maintainAspectRatio": "Behåll bildförhållande", - "noImagesInGallery": "Inga bilder i galleriet", - "autoSwitchNewImages": "Ändra automatiskt till nya bilder", - "singleColumnLayout": "Enkolumnslayout" - }, - "hotkeys": { - "generalHotkeys": "Allmänna snabbtangenter", - "galleryHotkeys": "Gallerisnabbtangenter", - "unifiedCanvasHotkeys": "Snabbtangenter för sammanslagskanvas", - "invoke": { - "title": "Anropa", - "desc": "Genererar en bild" - }, - "cancel": { - "title": "Avbryt", - "desc": "Avbryt bildgenerering" - }, - "focusPrompt": { - "desc": "Fokusera området för promptinmatning", - "title": "Fokusprompt" - }, - "pinOptions": { - "desc": "Nåla fast alternativpanelen", - "title": "Nåla fast alternativ" - }, - "toggleOptions": { - "title": "Växla inställningar", - "desc": "Öppna och stäng alternativpanelen" - }, - "toggleViewer": { - "title": "Växla visaren", - "desc": "Öppna och stäng bildvisaren" - }, - "toggleGallery": { - "title": "Växla galleri", - "desc": "Öppna eller stäng galleribyrån" - }, - "maximizeWorkSpace": { - "title": "Maximera arbetsyta", - "desc": "Stäng paneler och maximera arbetsyta" - }, - "changeTabs": { - "title": "Växla flik", - "desc": "Byt till en annan arbetsyta" - }, - "consoleToggle": { - "title": "Växla konsol", - "desc": "Öppna och stäng konsol" - }, - "setSeed": { - "desc": "Använd seed för nuvarande bild", - "title": "välj seed" - }, - "setParameters": { - "title": "Välj parametrar", - "desc": "Använd alla parametrar från nuvarande bild" - }, - "setPrompt": { - "desc": "Använd prompt för nuvarande bild", - "title": "Välj prompt" - }, - "restoreFaces": { - "title": "Återskapa ansikten", - "desc": "Återskapa nuvarande bild" - }, - "upscale": { - "title": "Skala upp", - "desc": "Skala upp nuvarande bild" - }, - "showInfo": { - "title": "Visa info", - "desc": "Visa metadata för nuvarande bild" - }, - "sendToImageToImage": { - "title": "Skicka till Bild till bild", - "desc": "Skicka nuvarande bild till Bild till bild" - }, - "deleteImage": { - "title": "Radera bild", - "desc": "Radera nuvarande bild" - }, - "closePanels": { - "title": "Stäng paneler", - "desc": "Stäng öppna paneler" - }, - "previousImage": { - "title": "Föregående bild", - "desc": "Visa föregående bild" - }, - "nextImage": { - "title": "Nästa bild", - "desc": "Visa nästa bild" - }, - "toggleGalleryPin": { - "title": "Växla gallerinål", - "desc": "Nålar fast eller nålar av galleriet i gränssnittet" - }, - "increaseGalleryThumbSize": { - "title": "Förstora galleriets bildstorlek", - "desc": "Förstora miniatyrbildernas storlek" - }, - "decreaseGalleryThumbSize": { - "title": "Minska gelleriets bildstorlek", - "desc": "Minska miniatyrbildernas storlek i galleriet" - }, - "decreaseBrushSize": { - "desc": "Förminska storleken på kanvas- pensel eller suddgummi", - "title": "Minska penselstorlek" - }, - "increaseBrushSize": { - "title": "Öka penselstorlek", - "desc": "Öka stoleken på kanvas- pensel eller suddgummi" - }, - "increaseBrushOpacity": { - "title": "Öka penselns opacitet", - "desc": "Öka opaciteten för kanvaspensel" - }, - "decreaseBrushOpacity": { - "desc": "Minska kanvaspenselns opacitet", - "title": "Minska penselns opacitet" - }, - "moveTool": { - "title": "Flytta", - "desc": "Tillåt kanvasnavigation" - }, - "fillBoundingBox": { - "title": "Fyll ram", - "desc": "Fyller ramen med pensels färg" - }, - "keyboardShortcuts": "Snabbtangenter", - "appHotkeys": "Appsnabbtangenter", - "selectBrush": { - "desc": "Välj kanvaspensel", - "title": "Välj pensel" - }, - "selectEraser": { - "desc": "Välj kanvassuddgummi", - "title": "Välj suddgummi" - }, - "eraseBoundingBox": { - "title": "Ta bort ram" - } - } -} diff --git a/invokeai/frontend/web/dist/locales/tr.json b/invokeai/frontend/web/dist/locales/tr.json deleted file mode 100644 index 0c222eecf7..0000000000 --- a/invokeai/frontend/web/dist/locales/tr.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "accessibility": { - "invokeProgressBar": "Invoke ilerleme durumu", - "nextImage": "Sonraki Resim", - "useThisParameter": "Kullanıcı parametreleri", - "copyMetadataJson": "Metadata verilerini kopyala (JSON)", - "exitViewer": "Görüntüleme Modundan Çık", - "zoomIn": "Yakınlaştır", - "zoomOut": "Uzaklaştır", - "rotateCounterClockwise": "Döndür (Saat yönünün tersine)", - "rotateClockwise": "Döndür (Saat yönünde)", - "flipHorizontally": "Yatay Çevir", - "flipVertically": "Dikey Çevir", - "modifyConfig": "Ayarları Değiştir", - "toggleAutoscroll": "Otomatik kaydırmayı aç/kapat", - "toggleLogViewer": "Günlük Görüntüleyici Aç/Kapa", - "showOptionsPanel": "Ayarlar Panelini Göster", - "modelSelect": "Model Seçin", - "reset": "Sıfırla", - "uploadImage": "Resim Yükle", - "previousImage": "Önceki Resim", - "menu": "Menü" - }, - "common": { - "hotkeysLabel": "Kısayol Tuşları", - "languagePickerLabel": "Dil Seçimi", - "reportBugLabel": "Hata Bildir", - "githubLabel": "Github", - "discordLabel": "Discord", - "settingsLabel": "Ayarlar", - "langArabic": "Arapça", - "langEnglish": "İngilizce", - "langDutch": "Hollandaca", - "langFrench": "Fransızca", - "langGerman": "Almanca", - "langItalian": "İtalyanca", - "langJapanese": "Japonca", - "langPolish": "Lehçe", - "langPortuguese": "Portekizce", - "langBrPortuguese": "Portekizcr (Brezilya)", - "langRussian": "Rusça", - "langSimplifiedChinese": "Çince (Basit)", - "langUkranian": "Ukraynaca", - "langSpanish": "İspanyolca", - "txt2img": "Metinden Resime", - "img2img": "Resimden Metine", - "linear": "Çizgisel", - "nodes": "Düğümler", - "postprocessing": "İşlem Sonrası", - "postProcessing": "İşlem Sonrası", - "postProcessDesc2": "Daha gelişmiş özellikler için ve iş akışını kolaylaştırmak için özel bir kullanıcı arayüzü çok yakında yayınlanacaktır.", - "postProcessDesc3": "Invoke AI komut satırı arayüzü, bir çok yeni özellik sunmaktadır.", - "langKorean": "Korece", - "unifiedCanvas": "Akıllı Tuval", - "nodesDesc": "Görüntülerin oluşturulmasında hazırladığımız yeni bir sistem geliştirme aşamasındadır. Bu harika özellikler ve çok daha fazlası için bizi takip etmeye devam edin.", - "postProcessDesc1": "Invoke AI son kullanıcıya yönelik bir çok özellik sunar. Görüntü kalitesi yükseltme, yüz restorasyonu WebUI üzerinden kullanılabilir. Metinden resime ve resimden metne araçlarına gelişmiş seçenekler menüsünden ulaşabilirsiniz. İsterseniz mevcut görüntü ekranının üzerindeki veya görüntüleyicideki görüntüyü doğrudan düzenleyebilirsiniz." - } -} diff --git a/invokeai/frontend/web/dist/locales/uk.json b/invokeai/frontend/web/dist/locales/uk.json deleted file mode 100644 index a85faee727..0000000000 --- a/invokeai/frontend/web/dist/locales/uk.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "common": { - "hotkeysLabel": "Гарячi клавіші", - "languagePickerLabel": "Мова", - "reportBugLabel": "Повідомити про помилку", - "settingsLabel": "Налаштування", - "img2img": "Зображення із зображення (img2img)", - "unifiedCanvas": "Універсальне полотно", - "nodes": "Вузли", - "langUkranian": "Украї́нська", - "nodesDesc": "Система генерації зображень на основі нодів (вузлів) вже розробляється. Слідкуйте за новинами про цю чудову функцію.", - "postProcessing": "Постобробка", - "postProcessDesc1": "Invoke AI пропонує широкий спектр функцій постобробки. Збільшення зображення (upscale) та відновлення облич вже доступні в інтерфейсі. Отримайте доступ до них з меню 'Додаткові параметри' на вкладках 'Зображення із тексту' та 'Зображення із зображення'. Обробляйте зображення безпосередньо, використовуючи кнопки дій із зображеннями над поточним зображенням або в режимі перегляду.", - "postProcessDesc2": "Найближчим часом буде випущено спеціальний інтерфейс для більш сучасних процесів постобробки.", - "postProcessDesc3": "Інтерфейс командного рядка Invoke AI пропонує різні інші функції, включаючи збільшення Embiggen.", - "training": "Навчання", - "trainingDesc1": "Спеціальний інтерфейс для навчання власних моделей з використанням Textual Inversion та Dreambooth.", - "trainingDesc2": "InvokeAI вже підтримує навчання моделей за допомогою TI, через інтерфейс командного рядка.", - "upload": "Завантажити", - "close": "Закрити", - "load": "Завантажити", - "statusConnected": "Підключено", - "statusDisconnected": "Відключено", - "statusError": "Помилка", - "statusPreparing": "Підготування", - "statusProcessingCanceled": "Обробка перервана", - "statusProcessingComplete": "Обробка завершена", - "statusGenerating": "Генерація", - "statusGeneratingTextToImage": "Генерація зображення із тексту", - "statusGeneratingImageToImage": "Генерація зображення із зображення", - "statusGeneratingInpainting": "Домальовка всередині", - "statusGeneratingOutpainting": "Домальовка зовні", - "statusGenerationComplete": "Генерація завершена", - "statusIterationComplete": "Iтерація завершена", - "statusSavingImage": "Збереження зображення", - "statusRestoringFaces": "Відновлення облич", - "statusRestoringFacesGFPGAN": "Відновлення облич (GFPGAN)", - "statusRestoringFacesCodeFormer": "Відновлення облич (CodeFormer)", - "statusUpscaling": "Збільшення", - "statusUpscalingESRGAN": "Збільшення (ESRGAN)", - "statusLoadingModel": "Завантаження моделі", - "statusModelChanged": "Модель змінено", - "cancel": "Скасувати", - "accept": "Підтвердити", - "back": "Назад", - "postprocessing": "Постобробка", - "statusModelConverted": "Модель сконвертована", - "statusMergingModels": "Злиття моделей", - "loading": "Завантаження", - "loadingInvokeAI": "Завантаження Invoke AI", - "langHebrew": "Іврит", - "langKorean": "Корейська", - "langPortuguese": "Португальська", - "langArabic": "Арабська", - "langSimplifiedChinese": "Китайська (спрощена)", - "langSpanish": "Іспанська", - "langEnglish": "Англійська", - "langGerman": "Німецька", - "langItalian": "Італійська", - "langJapanese": "Японська", - "langPolish": "Польська", - "langBrPortuguese": "Португальська (Бразилія)", - "langRussian": "Російська", - "githubLabel": "Github", - "txt2img": "Текст в зображення (txt2img)", - "discordLabel": "Discord", - "langDutch": "Голландська", - "langFrench": "Французька", - "statusMergedModels": "Моделі об'єднані", - "statusConvertingModel": "Конвертація моделі", - "linear": "Лінійна обробка" - }, - "gallery": { - "generations": "Генерації", - "showGenerations": "Показувати генерації", - "uploads": "Завантаження", - "showUploads": "Показувати завантаження", - "galleryImageSize": "Розмір зображень", - "galleryImageResetSize": "Аатоматичний розмір", - "gallerySettings": "Налаштування галереї", - "maintainAspectRatio": "Зберігати пропорції", - "autoSwitchNewImages": "Автоматично вибирати нові", - "singleColumnLayout": "Одна колонка", - "allImagesLoaded": "Всі зображення завантажені", - "loadMore": "Завантажити більше", - "noImagesInGallery": "Зображень немає" - }, - "hotkeys": { - "keyboardShortcuts": "Клавіатурні скорочення", - "appHotkeys": "Гарячі клавіші програми", - "generalHotkeys": "Загальні гарячі клавіші", - "galleryHotkeys": "Гарячі клавіші галереї", - "unifiedCanvasHotkeys": "Гарячі клавіші універсального полотна", - "invoke": { - "title": "Invoke", - "desc": "Згенерувати зображення" - }, - "cancel": { - "title": "Скасувати", - "desc": "Скасувати генерацію зображення" - }, - "focusPrompt": { - "title": "Переключитися на введення запиту", - "desc": "Перемикання на область введення запиту" - }, - "toggleOptions": { - "title": "Показати/приховати параметри", - "desc": "Відкривати і закривати панель параметрів" - }, - "pinOptions": { - "title": "Закріпити параметри", - "desc": "Закріпити панель параметрів" - }, - "toggleViewer": { - "title": "Показати перегляд", - "desc": "Відкривати і закривати переглядач зображень" - }, - "toggleGallery": { - "title": "Показати галерею", - "desc": "Відкривати і закривати скриньку галереї" - }, - "maximizeWorkSpace": { - "title": "Максимізувати робочий простір", - "desc": "Приховати панелі і максимізувати робочу область" - }, - "changeTabs": { - "title": "Переключити вкладку", - "desc": "Переключитися на іншу робочу область" - }, - "consoleToggle": { - "title": "Показати консоль", - "desc": "Відкривати і закривати консоль" - }, - "setPrompt": { - "title": "Використовувати запит", - "desc": "Використати запит із поточного зображення" - }, - "setSeed": { - "title": "Використовувати сід", - "desc": "Використовувати сід поточного зображення" - }, - "setParameters": { - "title": "Використовувати всі параметри", - "desc": "Використовувати всі параметри поточного зображення" - }, - "restoreFaces": { - "title": "Відновити обличчя", - "desc": "Відновити обличчя на поточному зображенні" - }, - "upscale": { - "title": "Збільшення", - "desc": "Збільшити поточне зображення" - }, - "showInfo": { - "title": "Показати метадані", - "desc": "Показати метадані з поточного зображення" - }, - "sendToImageToImage": { - "title": "Відправити в img2img", - "desc": "Надіслати поточне зображення в Image To Image" - }, - "deleteImage": { - "title": "Видалити зображення", - "desc": "Видалити поточне зображення" - }, - "closePanels": { - "title": "Закрити панелі", - "desc": "Закриває відкриті панелі" - }, - "previousImage": { - "title": "Попереднє зображення", - "desc": "Відображати попереднє зображення в галереї" - }, - "nextImage": { - "title": "Наступне зображення", - "desc": "Відображення наступного зображення в галереї" - }, - "toggleGalleryPin": { - "title": "Закріпити галерею", - "desc": "Закріплює і відкріплює галерею" - }, - "increaseGalleryThumbSize": { - "title": "Збільшити розмір мініатюр галереї", - "desc": "Збільшує розмір мініатюр галереї" - }, - "decreaseGalleryThumbSize": { - "title": "Зменшує розмір мініатюр галереї", - "desc": "Зменшує розмір мініатюр галереї" - }, - "selectBrush": { - "title": "Вибрати пензель", - "desc": "Вибирає пензель для полотна" - }, - "selectEraser": { - "title": "Вибрати ластик", - "desc": "Вибирає ластик для полотна" - }, - "decreaseBrushSize": { - "title": "Зменшити розмір пензля", - "desc": "Зменшує розмір пензля/ластика полотна" - }, - "increaseBrushSize": { - "title": "Збільшити розмір пензля", - "desc": "Збільшує розмір пензля/ластика полотна" - }, - "decreaseBrushOpacity": { - "title": "Зменшити непрозорість пензля", - "desc": "Зменшує непрозорість пензля полотна" - }, - "increaseBrushOpacity": { - "title": "Збільшити непрозорість пензля", - "desc": "Збільшує непрозорість пензля полотна" - }, - "moveTool": { - "title": "Інструмент переміщення", - "desc": "Дозволяє переміщатися по полотну" - }, - "fillBoundingBox": { - "title": "Заповнити обмежувальну рамку", - "desc": "Заповнює обмежувальну рамку кольором пензля" - }, - "eraseBoundingBox": { - "title": "Стерти обмежувальну рамку", - "desc": "Стирає область обмежувальної рамки" - }, - "colorPicker": { - "title": "Вибрати колір", - "desc": "Вибирає засіб вибору кольору полотна" - }, - "toggleSnap": { - "title": "Увімкнути прив'язку", - "desc": "Вмикає/вимикає прив'язку до сітки" - }, - "quickToggleMove": { - "title": "Швидке перемикання переміщення", - "desc": "Тимчасово перемикає режим переміщення" - }, - "toggleLayer": { - "title": "Переключити шар", - "desc": "Перемикання маски/базового шару" - }, - "clearMask": { - "title": "Очистити маску", - "desc": "Очистити всю маску" - }, - "hideMask": { - "title": "Приховати маску", - "desc": "Приховує/показує маску" - }, - "showHideBoundingBox": { - "title": "Показати/приховати обмежувальну рамку", - "desc": "Переключити видимість обмежувальної рамки" - }, - "mergeVisible": { - "title": "Об'єднати видимі", - "desc": "Об'єднати всі видимі шари полотна" - }, - "saveToGallery": { - "title": "Зберегти в галерею", - "desc": "Зберегти поточне полотно в галерею" - }, - "copyToClipboard": { - "title": "Копіювати в буфер обміну", - "desc": "Копіювати поточне полотно в буфер обміну" - }, - "downloadImage": { - "title": "Завантажити зображення", - "desc": "Завантажити вміст полотна" - }, - "undoStroke": { - "title": "Скасувати пензель", - "desc": "Скасувати мазок пензля" - }, - "redoStroke": { - "title": "Повторити мазок пензля", - "desc": "Повторити мазок пензля" - }, - "resetView": { - "title": "Вид за замовчуванням", - "desc": "Скинути вид полотна" - }, - "previousStagingImage": { - "title": "Попереднє зображення", - "desc": "Попереднє зображення" - }, - "nextStagingImage": { - "title": "Наступне зображення", - "desc": "Наступне зображення" - }, - "acceptStagingImage": { - "title": "Прийняти зображення", - "desc": "Прийняти поточне зображення" - } - }, - "modelManager": { - "modelManager": "Менеджер моделей", - "model": "Модель", - "modelAdded": "Модель додана", - "modelUpdated": "Модель оновлена", - "modelEntryDeleted": "Запис про модель видалено", - "cannotUseSpaces": "Не можна використовувати пробіли", - "addNew": "Додати нову", - "addNewModel": "Додати нову модель", - "addManually": "Додати вручну", - "manual": "Ручне", - "name": "Назва", - "nameValidationMsg": "Введіть назву моделі", - "description": "Опис", - "descriptionValidationMsg": "Введіть опис моделі", - "config": "Файл конфігурації", - "configValidationMsg": "Шлях до файлу конфігурації.", - "modelLocation": "Розташування моделі", - "modelLocationValidationMsg": "Шлях до файлу з моделлю.", - "vaeLocation": "Розтышування VAE", - "vaeLocationValidationMsg": "Шлях до VAE.", - "width": "Ширина", - "widthValidationMsg": "Початкова ширина зображень.", - "height": "Висота", - "heightValidationMsg": "Початкова висота зображень.", - "addModel": "Додати модель", - "updateModel": "Оновити модель", - "availableModels": "Доступні моделі", - "search": "Шукати", - "load": "Завантажити", - "active": "активна", - "notLoaded": "не завантажена", - "cached": "кешована", - "checkpointFolder": "Папка з моделями", - "clearCheckpointFolder": "Очистити папку з моделями", - "findModels": "Знайти моделі", - "scanAgain": "Сканувати знову", - "modelsFound": "Знайдені моделі", - "selectFolder": "Обрати папку", - "selected": "Обрані", - "selectAll": "Обрати всі", - "deselectAll": "Зняти выділення", - "showExisting": "Показувати додані", - "addSelected": "Додати обрані", - "modelExists": "Модель вже додана", - "selectAndAdd": "Оберіть і додайте моделі із списку", - "noModelsFound": "Моделі не знайдені", - "delete": "Видалити", - "deleteModel": "Видалити модель", - "deleteConfig": "Видалити конфігурацію", - "deleteMsg1": "Ви точно хочете видалити модель із InvokeAI?", - "deleteMsg2": "Це не призведе до видалення файлу моделі з диску. Позніше ви можете додати його знову.", - "allModels": "Усі моделі", - "diffusersModels": "Diffusers", - "scanForModels": "Сканувати моделі", - "convert": "Конвертувати", - "convertToDiffusers": "Конвертувати в Diffusers", - "formMessageDiffusersVAELocationDesc": "Якщо не надано, InvokeAI буде шукати файл VAE в розташуванні моделі, вказаній вище.", - "convertToDiffusersHelpText3": "Файл моделі на диску НЕ буде видалено або змінено. Ви можете знову додати його в Model Manager, якщо потрібно.", - "customConfig": "Користувальницький конфіг", - "invokeRoot": "Каталог InvokeAI", - "custom": "Користувальницький", - "modelTwo": "Модель 2", - "modelThree": "Модель 3", - "mergedModelName": "Назва об'єднаної моделі", - "alpha": "Альфа", - "interpolationType": "Тип інтерполяції", - "mergedModelSaveLocation": "Шлях збереження", - "mergedModelCustomSaveLocation": "Користувальницький шлях", - "invokeAIFolder": "Каталог InvokeAI", - "ignoreMismatch": "Ігнорувати невідповідності між вибраними моделями", - "modelMergeHeaderHelp2": "Тільки Diffusers-моделі доступні для об'єднання. Якщо ви хочете об'єднати checkpoint-моделі, спочатку перетворіть їх на Diffusers.", - "checkpointModels": "Checkpoints", - "repo_id": "ID репозиторію", - "v2_base": "v2 (512px)", - "repoIDValidationMsg": "Онлайн-репозиторій моделі", - "formMessageDiffusersModelLocationDesc": "Вкажіть хоча б одне.", - "formMessageDiffusersModelLocation": "Шлях до Diffusers-моделі", - "v2_768": "v2 (768px)", - "formMessageDiffusersVAELocation": "Шлях до VAE", - "convertToDiffusersHelpText5": "Переконайтеся, що у вас достатньо місця на диску. Моделі зазвичай займають від 4 до 7 Гб.", - "convertToDiffusersSaveLocation": "Шлях збереження", - "v1": "v1", - "convertToDiffusersHelpText6": "Ви хочете перетворити цю модель?", - "inpainting": "v1 Inpainting", - "modelConverted": "Модель перетворено", - "sameFolder": "У ту ж папку", - "statusConverting": "Перетворення", - "merge": "Об'єднати", - "mergeModels": "Об'єднати моделі", - "modelOne": "Модель 1", - "sigmoid": "Сігмоїд", - "weightedSum": "Зважена сума", - "none": "пусто", - "addDifference": "Додати різницю", - "pickModelType": "Вибрати тип моделі", - "convertToDiffusersHelpText4": "Це одноразова дія. Вона може зайняти від 30 до 60 секунд в залежності від характеристик вашого комп'ютера.", - "pathToCustomConfig": "Шлях до конфігу користувача", - "safetensorModels": "SafeTensors", - "addCheckpointModel": "Додати модель Checkpoint/Safetensor", - "addDiffuserModel": "Додати Diffusers", - "vaeRepoID": "ID репозиторію VAE", - "vaeRepoIDValidationMsg": "Онлайн-репозиторій VAE", - "modelMergeInterpAddDifferenceHelp": "У цьому режимі Модель 3 спочатку віднімається з Моделі 2. Результуюча версія змішується з Моделью 1 із встановленим вище коефіцієнтом Альфа.", - "customSaveLocation": "Користувальницький шлях збереження", - "modelMergeAlphaHelp": "Альфа впливає силу змішування моделей. Нижчі значення альфа призводять до меншого впливу другої моделі.", - "convertToDiffusersHelpText1": "Ця модель буде конвертована в формат 🧨 Diffusers.", - "convertToDiffusersHelpText2": "Цей процес замінить ваш запис в Model Manager на версію тієї ж моделі в Diffusers.", - "modelsMerged": "Моделі об'єднані", - "modelMergeHeaderHelp1": "Ви можете об'єднати до трьох різних моделей, щоб створити змішану, що відповідає вашим потребам.", - "inverseSigmoid": "Зворотній Сігмоїд" - }, - "parameters": { - "images": "Зображення", - "steps": "Кроки", - "cfgScale": "Рівень CFG", - "width": "Ширина", - "height": "Висота", - "seed": "Сід", - "randomizeSeed": "Випадковий сид", - "shuffle": "Оновити", - "noiseThreshold": "Поріг шуму", - "perlinNoise": "Шум Перліна", - "variations": "Варіації", - "variationAmount": "Кількість варіацій", - "seedWeights": "Вага сіду", - "faceRestoration": "Відновлення облич", - "restoreFaces": "Відновити обличчя", - "type": "Тип", - "strength": "Сила", - "upscaling": "Збільшення", - "upscale": "Збільшити", - "upscaleImage": "Збільшити зображення", - "scale": "Масштаб", - "otherOptions": "інші параметри", - "seamlessTiling": "Безшовний узор", - "hiresOptim": "Оптимізація High Res", - "imageFit": "Вмістити зображення", - "codeformerFidelity": "Точність", - "scaleBeforeProcessing": "Масштабувати", - "scaledWidth": "Масштаб Ш", - "scaledHeight": "Масштаб В", - "infillMethod": "Засіб заповнення", - "tileSize": "Розмір області", - "boundingBoxHeader": "Обмежуюча рамка", - "seamCorrectionHeader": "Налаштування шву", - "infillScalingHeader": "Заповнення і масштабування", - "img2imgStrength": "Сила обробки img2img", - "toggleLoopback": "Зациклити обробку", - "sendTo": "Надіслати", - "sendToImg2Img": "Надіслати у img2img", - "sendToUnifiedCanvas": "Надіслати на полотно", - "copyImageToLink": "Скопіювати посилання", - "downloadImage": "Завантажити", - "openInViewer": "Відкрити у переглядачі", - "closeViewer": "Закрити переглядач", - "usePrompt": "Використати запит", - "useSeed": "Використати сід", - "useAll": "Використати все", - "useInitImg": "Використати як початкове", - "info": "Метадані", - "initialImage": "Початкове зображення", - "showOptionsPanel": "Показати панель налаштувань", - "general": "Основне", - "cancel": { - "immediate": "Скасувати негайно", - "schedule": "Скасувати після поточної ітерації", - "isScheduled": "Відміна", - "setType": "Встановити тип скасування" - }, - "vSymmetryStep": "Крок верт. симетрії", - "hiresStrength": "Сила High Res", - "hidePreview": "Сховати попередній перегляд", - "showPreview": "Показати попередній перегляд", - "imageToImage": "Зображення до зображення", - "denoisingStrength": "Сила шумоподавлення", - "copyImage": "Копіювати зображення", - "symmetry": "Симетрія", - "hSymmetryStep": "Крок гор. симетрії" - }, - "settings": { - "models": "Моделі", - "displayInProgress": "Показувати процес генерації", - "saveSteps": "Зберігати кожні n кроків", - "confirmOnDelete": "Підтверджувати видалення", - "displayHelpIcons": "Показувати значки підказок", - "enableImageDebugging": "Увімкнути налагодження", - "resetWebUI": "Повернути початкові", - "resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.", - "resetWebUIDesc2": "Якщо зображення не відображаються в галереї або не працює ще щось, спробуйте скинути налаштування, перш ніж повідомляти про проблему на GitHub.", - "resetComplete": "Інтерфейс скинуто. Оновіть цю сторінку.", - "useSlidersForAll": "Використовувати повзунки для всіх параметрів" - }, - "toast": { - "tempFoldersEmptied": "Тимчасова папка очищена", - "uploadFailed": "Не вдалося завантажити", - "uploadFailedUnableToLoadDesc": "Неможливо завантажити файл", - "downloadImageStarted": "Завантаження зображення почалося", - "imageCopied": "Зображення скопійоване", - "imageLinkCopied": "Посилання на зображення скопійовано", - "imageNotLoaded": "Зображення не завантажено", - "imageNotLoadedDesc": "Не знайдено зображення для надсилання до img2img", - "imageSavedToGallery": "Зображення збережено в галерею", - "canvasMerged": "Полотно об'єднане", - "sentToImageToImage": "Надіслати до img2img", - "sentToUnifiedCanvas": "Надіслати на полотно", - "parametersSet": "Параметри задані", - "parametersNotSet": "Параметри не задані", - "parametersNotSetDesc": "Не знайдені метадані цього зображення.", - "parametersFailed": "Проблема із завантаженням параметрів", - "parametersFailedDesc": "Неможливо завантажити початкове зображення.", - "seedSet": "Сід заданий", - "seedNotSet": "Сід не заданий", - "seedNotSetDesc": "Не вдалося знайти сід для зображення.", - "promptSet": "Запит заданий", - "promptNotSet": "Запит не заданий", - "promptNotSetDesc": "Не вдалося знайти запит для зображення.", - "upscalingFailed": "Збільшення не вдалося", - "faceRestoreFailed": "Відновлення облич не вдалося", - "metadataLoadFailed": "Не вдалося завантажити метадані", - "initialImageSet": "Початкове зображення задане", - "initialImageNotSet": "Початкове зображення не задане", - "initialImageNotSetDesc": "Не вдалося завантажити початкове зображення", - "serverError": "Помилка сервера", - "disconnected": "Відключено від сервера", - "connected": "Підключено до сервера", - "canceled": "Обробку скасовано" - }, - "tooltip": { - "feature": { - "prompt": "Це поле для тексту запиту, включаючи об'єкти генерації та стилістичні терміни. У запит можна включити і коефіцієнти ваги (значущості токена), але консольні команди та параметри не працюватимуть.", - "gallery": "Тут відображаються генерації з папки outputs у міру їх появи.", - "other": "Ці опції включають альтернативні режими обробки для Invoke. 'Безшовний узор' створить на виході узори, що повторюються. 'Висока роздільна здатність' - це генерація у два етапи за допомогою img2img: використовуйте це налаштування, коли хочете отримати цільне зображення більшого розміру без артефактів.", - "seed": "Значення сіду впливає на початковий шум, з якого сформується зображення. Можна використовувати вже наявний сід із попередніх зображень. 'Поріг шуму' використовується для пом'якшення артефактів при високих значеннях CFG (спробуйте в діапазоні 0-10), а 'Перлін' - для додавання шуму Перліна в процесі генерації: обидва параметри служать для більшої варіативності результатів.", - "variations": "Спробуйте варіацію зі значенням від 0.1 до 1.0, щоб змінити результат для заданого сиду. Цікаві варіації сиду знаходяться між 0.1 і 0.3.", - "upscale": "Використовуйте ESRGAN, щоб збільшити зображення відразу після генерації.", - "faceCorrection": "Корекція облич за допомогою GFPGAN або Codeformer: алгоритм визначає обличчя у готовому зображенні та виправляє будь-які дефекти. Високі значення сили змінюють зображення сильніше, в результаті обличчя будуть виглядати привабливіше. У Codeformer більш висока точність збереже вихідне зображення на шкоду корекції обличчя.", - "imageToImage": "'Зображення до зображення' завантажує будь-яке зображення, яке потім використовується для генерації разом із запитом. Чим більше значення, тим сильніше зміниться зображення в результаті. Можливі значення від 0 до 1, рекомендується діапазон 0.25-0.75", - "boundingBox": "'Обмежуюча рамка' аналогічна налаштуванням 'Ширина' і 'Висота' для 'Зображення з тексту' або 'Зображення до зображення'. Буде оброблена тільки область у рамці.", - "seamCorrection": "Керування обробкою видимих швів, що виникають між зображеннями на полотні.", - "infillAndScaling": "Керування методами заповнення (використовується для масок або стертих частин полотна) та масштабування (корисно для малих розмірів обмежуючої рамки)." - } - }, - "unifiedCanvas": { - "layer": "Шар", - "base": "Базовий", - "mask": "Маска", - "maskingOptions": "Параметри маски", - "enableMask": "Увiмкнути маску", - "preserveMaskedArea": "Зберiгати замасковану область", - "clearMask": "Очистити маску", - "brush": "Пензель", - "eraser": "Гумка", - "fillBoundingBox": "Заповнити обмежуючу рамку", - "eraseBoundingBox": "Стерти обмежуючу рамку", - "colorPicker": "Пiпетка", - "brushOptions": "Параметри пензля", - "brushSize": "Розмiр", - "move": "Перемiстити", - "resetView": "Скинути вигляд", - "mergeVisible": "Об'єднати видимi", - "saveToGallery": "Зберегти до галереї", - "copyToClipboard": "Копiювати до буферу обмiну", - "downloadAsImage": "Завантажити як зображення", - "undo": "Вiдмiнити", - "redo": "Повторити", - "clearCanvas": "Очистити полотно", - "canvasSettings": "Налаштування полотна", - "showIntermediates": "Показувати процес", - "showGrid": "Показувати сiтку", - "snapToGrid": "Прив'язати до сітки", - "darkenOutsideSelection": "Затемнити полотно зовні", - "autoSaveToGallery": "Автозбереження до галереї", - "saveBoxRegionOnly": "Зберiгати тiльки видiлення", - "limitStrokesToBox": "Обмежити штрихи виділенням", - "showCanvasDebugInfo": "Показати дод. інформацію про полотно", - "clearCanvasHistory": "Очистити iсторiю полотна", - "clearHistory": "Очистити iсторiю", - "clearCanvasHistoryMessage": "Очищення історії полотна залишає поточне полотно незайманим, але видаляє історію скасування та повтору.", - "clearCanvasHistoryConfirm": "Ви впевнені, що хочете очистити історію полотна?", - "emptyTempImageFolder": "Очистити тимчасову папку", - "emptyFolder": "Очистити папку", - "emptyTempImagesFolderMessage": "Очищення папки тимчасових зображень також повністю скидає полотно, включаючи всю історію скасування/повтору, зображення та базовий шар полотна, що розміщуються.", - "emptyTempImagesFolderConfirm": "Ви впевнені, що хочете очистити тимчасову папку?", - "activeLayer": "Активний шар", - "canvasScale": "Масштаб полотна", - "boundingBox": "Обмежуюча рамка", - "scaledBoundingBox": "Масштабування рамки", - "boundingBoxPosition": "Позиція обмежуючої рамки", - "canvasDimensions": "Разміри полотна", - "canvasPosition": "Розташування полотна", - "cursorPosition": "Розташування курсора", - "previous": "Попереднє", - "next": "Наступне", - "accept": "Приняти", - "showHide": "Показати/Сховати", - "discardAll": "Відмінити все", - "betaClear": "Очистити", - "betaDarkenOutside": "Затемнити зовні", - "betaLimitToBox": "Обмежити виділенням", - "betaPreserveMasked": "Зберiгати замасковану область" - }, - "accessibility": { - "nextImage": "Наступне зображення", - "modelSelect": "Вибір моделі", - "invokeProgressBar": "Індикатор виконання", - "reset": "Скинути", - "uploadImage": "Завантажити зображення", - "useThisParameter": "Використовувати цей параметр", - "exitViewer": "Вийти з переглядача", - "zoomIn": "Збільшити", - "zoomOut": "Зменшити", - "rotateCounterClockwise": "Обертати проти годинникової стрілки", - "rotateClockwise": "Обертати за годинниковою стрілкою", - "toggleAutoscroll": "Увімкнути автопрокручування", - "toggleLogViewer": "Показати або приховати переглядач журналів", - "previousImage": "Попереднє зображення", - "copyMetadataJson": "Скопіювати метадані JSON", - "flipVertically": "Перевернути по вертикалі", - "flipHorizontally": "Відобразити по горизонталі", - "showOptionsPanel": "Показати опції", - "modifyConfig": "Змінити конфігурацію", - "menu": "Меню" - } -} diff --git a/invokeai/frontend/web/dist/locales/vi.json b/invokeai/frontend/web/dist/locales/vi.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/invokeai/frontend/web/dist/locales/vi.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/invokeai/frontend/web/dist/locales/zh_CN.json b/invokeai/frontend/web/dist/locales/zh_CN.json deleted file mode 100644 index b9f1a71370..0000000000 --- a/invokeai/frontend/web/dist/locales/zh_CN.json +++ /dev/null @@ -1,1663 +0,0 @@ -{ - "common": { - "hotkeysLabel": "快捷键", - "languagePickerLabel": "语言", - "reportBugLabel": "反馈错误", - "settingsLabel": "设置", - "img2img": "图生图", - "unifiedCanvas": "统一画布", - "nodes": "工作流编辑器", - "langSimplifiedChinese": "简体中文", - "nodesDesc": "一个基于节点的图像生成系统目前正在开发中。请持续关注关于这一功能的更新。", - "postProcessing": "后期处理", - "postProcessDesc1": "Invoke AI 提供各种各样的后期处理功能。图像放大和面部修复在网页界面中已经可用。你可以从文生图和图生图页面的高级选项菜单中访问它们。你也可以直接使用图像显示上方或查看器中的图像操作按钮处理图像。", - "postProcessDesc2": "一个专门的界面将很快发布,新的界面能够处理更复杂的后期处理流程。", - "postProcessDesc3": "Invoke AI 命令行界面提供例如 Embiggen 的各种其他功能。", - "training": "训练", - "trainingDesc1": "一个专门用于从 Web UI 使用 Textual Inversion 和 Dreambooth 训练自己的 Embedding 和 checkpoint 的工作流。", - "trainingDesc2": "InvokeAI 已经支持使用主脚本中的 Textual Inversion 来训练自定义 embeddouring。", - "upload": "上传", - "close": "关闭", - "load": "加载", - "statusConnected": "已连接", - "statusDisconnected": "未连接", - "statusError": "错误", - "statusPreparing": "准备中", - "statusProcessingCanceled": "处理已取消", - "statusProcessingComplete": "处理完成", - "statusGenerating": "生成中", - "statusGeneratingTextToImage": "文生图生成中", - "statusGeneratingImageToImage": "图生图生成中", - "statusGeneratingInpainting": "(Inpainting) 内补生成中", - "statusGeneratingOutpainting": "(Outpainting) 外扩生成中", - "statusGenerationComplete": "生成完成", - "statusIterationComplete": "迭代完成", - "statusSavingImage": "图像保存中", - "statusRestoringFaces": "面部修复中", - "statusRestoringFacesGFPGAN": "面部修复中 (GFPGAN)", - "statusRestoringFacesCodeFormer": "面部修复中 (CodeFormer)", - "statusUpscaling": "放大中", - "statusUpscalingESRGAN": "放大中 (ESRGAN)", - "statusLoadingModel": "模型加载中", - "statusModelChanged": "模型已切换", - "accept": "同意", - "cancel": "取消", - "dontAskMeAgain": "不要再次询问", - "areYouSure": "你确认吗?", - "imagePrompt": "图片提示词", - "langKorean": "朝鲜语", - "langPortuguese": "葡萄牙语", - "random": "随机", - "generate": "生成", - "openInNewTab": "在新的标签页打开", - "langUkranian": "乌克兰语", - "back": "返回", - "statusMergedModels": "模型已合并", - "statusConvertingModel": "转换模型中", - "statusModelConverted": "模型转换完成", - "statusMergingModels": "合并模型", - "githubLabel": "GitHub", - "discordLabel": "Discord", - "langPolish": "波兰语", - "langBrPortuguese": "葡萄牙语(巴西)", - "langDutch": "荷兰语", - "langFrench": "法语", - "langRussian": "俄语", - "langGerman": "德语", - "langHebrew": "希伯来语", - "langItalian": "意大利语", - "langJapanese": "日语", - "langSpanish": "西班牙语", - "langEnglish": "英语", - "langArabic": "阿拉伯语", - "txt2img": "文生图", - "postprocessing": "后期处理", - "loading": "加载中", - "loadingInvokeAI": "Invoke AI 加载中", - "linear": "线性的", - "batch": "批次管理器", - "communityLabel": "社区", - "modelManager": "模型管理器", - "nodeEditor": "节点编辑器", - "statusProcessing": "处理中", - "imageFailedToLoad": "无法加载图像", - "lightMode": "浅色模式", - "learnMore": "了解更多", - "darkMode": "深色模式", - "advanced": "高级", - "t2iAdapter": "T2I Adapter", - "ipAdapter": "IP Adapter", - "controlAdapter": "Control Adapter", - "controlNet": "ControlNet", - "on": "开", - "auto": "自动", - "checkpoint": "Checkpoint", - "inpaint": "内补重绘", - "simple": "简单", - "template": "模板", - "outputs": "输出", - "data": "数据", - "safetensors": "Safetensors", - "outpaint": "外扩绘制", - "details": "详情", - "format": "格式", - "unknown": "未知", - "folder": "文件夹", - "error": "错误", - "installed": "已安装", - "file": "文件", - "somethingWentWrong": "出了点问题", - "copyError": "$t(gallery.copy) 错误", - "input": "输入", - "notInstalled": "非 $t(common.installed)", - "delete": "删除", - "updated": "已上传", - "save": "保存", - "created": "已创建", - "prevPage": "上一页", - "unknownError": "未知错误", - "direction": "指向", - "orderBy": "排序方式:", - "nextPage": "下一页", - "saveAs": "保存为", - "unsaved": "未保存", - "ai": "ai" - }, - "gallery": { - "generations": "生成的图像", - "showGenerations": "显示生成的图像", - "uploads": "上传的图像", - "showUploads": "显示上传的图像", - "galleryImageSize": "预览大小", - "galleryImageResetSize": "重置预览大小", - "gallerySettings": "预览设置", - "maintainAspectRatio": "保持纵横比", - "autoSwitchNewImages": "自动切换到新图像", - "singleColumnLayout": "单列布局", - "allImagesLoaded": "所有图像已加载", - "loadMore": "加载更多", - "noImagesInGallery": "无图像可用于显示", - "deleteImage": "删除图片", - "deleteImageBin": "被删除的图片会发送到你操作系统的回收站。", - "deleteImagePermanent": "删除的图片无法被恢复。", - "assets": "素材", - "autoAssignBoardOnClick": "点击后自动分配面板", - "featuresWillReset": "如果您删除该图像,这些功能会立即被重置。", - "loading": "加载中", - "unableToLoad": "无法加载图库", - "currentlyInUse": "该图像目前在以下功能中使用:", - "copy": "复制", - "download": "下载", - "setCurrentImage": "设为当前图像", - "preparingDownload": "准备下载", - "preparingDownloadFailed": "准备下载时出现问题", - "downloadSelection": "下载所选内容", - "noImageSelected": "无选中的图像", - "deleteSelection": "删除所选内容", - "image": "图像", - "drop": "弃用", - "dropOrUpload": "$t(gallery.drop) 或上传", - "dropToUpload": "$t(gallery.drop) 以上传", - "problemDeletingImagesDesc": "有一张或多张图像无法被删除", - "problemDeletingImages": "删除图像时出现问题", - "unstarImage": "取消收藏图像", - "starImage": "收藏图像" - }, - "hotkeys": { - "keyboardShortcuts": "键盘快捷键", - "appHotkeys": "应用快捷键", - "generalHotkeys": "一般快捷键", - "galleryHotkeys": "图库快捷键", - "unifiedCanvasHotkeys": "统一画布快捷键", - "invoke": { - "title": "Invoke", - "desc": "生成图像" - }, - "cancel": { - "title": "取消", - "desc": "取消图像生成" - }, - "focusPrompt": { - "title": "打开提示词框", - "desc": "打开提示词文本框" - }, - "toggleOptions": { - "title": "切换选项卡", - "desc": "打开或关闭选项浮窗" - }, - "pinOptions": { - "title": "常开选项卡", - "desc": "保持选项浮窗常开" - }, - "toggleViewer": { - "title": "切换图像查看器", - "desc": "打开或关闭图像查看器" - }, - "toggleGallery": { - "title": "切换图库", - "desc": "打开或关闭图库" - }, - "maximizeWorkSpace": { - "title": "工作区最大化", - "desc": "关闭所有浮窗,将工作区域最大化" - }, - "changeTabs": { - "title": "切换选项卡", - "desc": "切换到另一个工作区" - }, - "consoleToggle": { - "title": "切换命令行", - "desc": "打开或关闭命令行" - }, - "setPrompt": { - "title": "使用当前提示词", - "desc": "使用当前图像的提示词" - }, - "setSeed": { - "title": "使用种子", - "desc": "使用当前图像的种子" - }, - "setParameters": { - "title": "使用当前参数", - "desc": "使用当前图像的所有参数" - }, - "restoreFaces": { - "title": "面部修复", - "desc": "对当前图像进行面部修复" - }, - "upscale": { - "title": "放大", - "desc": "对当前图像进行放大" - }, - "showInfo": { - "title": "显示信息", - "desc": "显示当前图像的元数据" - }, - "sendToImageToImage": { - "title": "发送到图生图", - "desc": "发送当前图像到图生图" - }, - "deleteImage": { - "title": "删除图像", - "desc": "删除当前图像" - }, - "closePanels": { - "title": "关闭浮窗", - "desc": "关闭目前打开的浮窗" - }, - "previousImage": { - "title": "上一张图像", - "desc": "显示图库中的上一张图像" - }, - "nextImage": { - "title": "下一张图像", - "desc": "显示图库中的下一张图像" - }, - "toggleGalleryPin": { - "title": "切换图库常开", - "desc": "开关图库在界面中的常开模式" - }, - "increaseGalleryThumbSize": { - "title": "增大预览尺寸", - "desc": "增大图库中预览的尺寸" - }, - "decreaseGalleryThumbSize": { - "title": "缩小预览尺寸", - "desc": "缩小图库中预览的尺寸" - }, - "selectBrush": { - "title": "选择刷子", - "desc": "选择统一画布上的刷子" - }, - "selectEraser": { - "title": "选择橡皮擦", - "desc": "选择统一画布上的橡皮擦" - }, - "decreaseBrushSize": { - "title": "减小刷子大小", - "desc": "减小统一画布上的刷子或橡皮擦的大小" - }, - "increaseBrushSize": { - "title": "增大刷子大小", - "desc": "增大统一画布上的刷子或橡皮擦的大小" - }, - "decreaseBrushOpacity": { - "title": "减小刷子不透明度", - "desc": "减小统一画布上的刷子的不透明度" - }, - "increaseBrushOpacity": { - "title": "增大刷子不透明度", - "desc": "增大统一画布上的刷子的不透明度" - }, - "moveTool": { - "title": "移动工具", - "desc": "画布允许导航" - }, - "fillBoundingBox": { - "title": "填充选择区域", - "desc": "在选择区域中填充刷子颜色" - }, - "eraseBoundingBox": { - "title": "擦除选择框", - "desc": "将选择区域擦除" - }, - "colorPicker": { - "title": "选择颜色拾取工具", - "desc": "选择画布颜色拾取工具" - }, - "toggleSnap": { - "title": "切换网格对齐", - "desc": "打开或关闭网格对齐" - }, - "quickToggleMove": { - "title": "快速切换移动模式", - "desc": "临时性地切换移动模式" - }, - "toggleLayer": { - "title": "切换图层", - "desc": "切换遮罩/基础层的选择" - }, - "clearMask": { - "title": "清除遮罩", - "desc": "清除整个遮罩" - }, - "hideMask": { - "title": "隐藏遮罩", - "desc": "隐藏或显示遮罩" - }, - "showHideBoundingBox": { - "title": "显示/隐藏框选区", - "desc": "切换框选区的的显示状态" - }, - "mergeVisible": { - "title": "合并可见层", - "desc": "将画板上可见层合并" - }, - "saveToGallery": { - "title": "保存至图库", - "desc": "将画布当前内容保存至图库" - }, - "copyToClipboard": { - "title": "复制到剪贴板", - "desc": "将画板当前内容复制到剪贴板" - }, - "downloadImage": { - "title": "下载图像", - "desc": "下载画板当前内容" - }, - "undoStroke": { - "title": "撤销画笔", - "desc": "撤销上一笔刷子的动作" - }, - "redoStroke": { - "title": "重做画笔", - "desc": "重做上一笔刷子的动作" - }, - "resetView": { - "title": "重置视图", - "desc": "重置画布视图" - }, - "previousStagingImage": { - "title": "上一张暂存图像", - "desc": "上一张暂存区中的图像" - }, - "nextStagingImage": { - "title": "下一张暂存图像", - "desc": "下一张暂存区中的图像" - }, - "acceptStagingImage": { - "title": "接受暂存图像", - "desc": "接受当前暂存区中的图像" - }, - "nodesHotkeys": "节点快捷键", - "addNodes": { - "title": "添加节点", - "desc": "打开添加节点菜单" - } - }, - "modelManager": { - "modelManager": "模型管理器", - "model": "模型", - "modelAdded": "已添加模型", - "modelUpdated": "模型已更新", - "modelEntryDeleted": "模型已删除", - "cannotUseSpaces": "不能使用空格", - "addNew": "添加", - "addNewModel": "添加新模型", - "addManually": "手动添加", - "manual": "手动", - "name": "名称", - "nameValidationMsg": "输入模型的名称", - "description": "描述", - "descriptionValidationMsg": "添加模型的描述", - "config": "配置", - "configValidationMsg": "模型配置文件的路径。", - "modelLocation": "模型位置", - "modelLocationValidationMsg": "提供 Diffusers 模型文件的本地存储路径", - "vaeLocation": "VAE 位置", - "vaeLocationValidationMsg": "VAE 文件的路径。", - "width": "宽度", - "widthValidationMsg": "模型的默认宽度。", - "height": "高度", - "heightValidationMsg": "模型的默认高度。", - "addModel": "添加模型", - "updateModel": "更新模型", - "availableModels": "可用模型", - "search": "检索", - "load": "加载", - "active": "活跃", - "notLoaded": "未加载", - "cached": "缓存", - "checkpointFolder": "模型检查点文件夹", - "clearCheckpointFolder": "清除 Checkpoint 模型文件夹", - "findModels": "寻找模型", - "modelsFound": "找到的模型", - "selectFolder": "选择文件夹", - "selected": "已选择", - "selectAll": "全选", - "deselectAll": "取消选择所有", - "showExisting": "显示已存在", - "addSelected": "添加选择", - "modelExists": "模型已存在", - "delete": "删除", - "deleteModel": "删除模型", - "deleteConfig": "删除配置", - "deleteMsg1": "您确定要将该模型从 InvokeAI 删除吗?", - "deleteMsg2": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除。若你正在使用自定义目录,则不会从磁盘中删除他们。", - "convertToDiffusersHelpText1": "模型会被转换成 🧨 Diffusers 格式。", - "convertToDiffusersHelpText2": "这个过程会替换你的模型管理器的入口中相同 Diffusers 版本的模型。", - "mergedModelSaveLocation": "保存路径", - "mergedModelCustomSaveLocation": "自定义路径", - "checkpointModels": "Checkpoints", - "formMessageDiffusersVAELocation": "VAE 路径", - "convertToDiffusersHelpText4": "这是一次性的处理过程。根据你电脑的配置不同耗时 30 - 60 秒。", - "convertToDiffusersHelpText6": "你希望转换这个模型吗?", - "interpolationType": "插值类型", - "modelTwo": "模型 2", - "modelThree": "模型 3", - "v2_768": "v2 (768px)", - "mergedModelName": "合并的模型名称", - "allModels": "全部模型", - "convertToDiffusers": "转换为 Diffusers", - "formMessageDiffusersModelLocation": "Diffusers 模型路径", - "custom": "自定义", - "formMessageDiffusersVAELocationDesc": "如果没有特别指定,InvokeAI 会从上面指定的模型路径中寻找 VAE 文件。", - "safetensorModels": "SafeTensors", - "modelsMerged": "模型合并完成", - "mergeModels": "合并模型", - "modelOne": "模型 1", - "diffusersModels": "Diffusers", - "scanForModels": "扫描模型", - "repo_id": "项目 ID", - "repoIDValidationMsg": "你的模型的在线项目地址", - "v1": "v1", - "invokeRoot": "InvokeAI 文件夹", - "inpainting": "v1 Inpainting", - "customSaveLocation": "自定义保存路径", - "scanAgain": "重新扫描", - "customConfig": "个性化配置", - "pathToCustomConfig": "个性化配置路径", - "modelConverted": "模型已转换", - "statusConverting": "转换中", - "sameFolder": "相同文件夹", - "invokeAIFolder": "Invoke AI 文件夹", - "ignoreMismatch": "忽略所选模型之间的不匹配", - "modelMergeHeaderHelp1": "您可以合并最多三种不同的模型,以创建符合您需求的混合模型。", - "modelMergeHeaderHelp2": "只有扩散器(Diffusers)可以用于模型合并。如果您想要合并一个检查点模型,请先将其转换为扩散器。", - "addCheckpointModel": "添加 Checkpoint / Safetensor 模型", - "addDiffuserModel": "添加 Diffusers 模型", - "vaeRepoID": "VAE 项目 ID", - "vaeRepoIDValidationMsg": "VAE 模型在线仓库地址", - "selectAndAdd": "选择下表中的模型并添加", - "noModelsFound": "未有找到模型", - "formMessageDiffusersModelLocationDesc": "请至少输入一个。", - "convertToDiffusersSaveLocation": "保存路径", - "convertToDiffusersHelpText3": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除. 若位于自定义目录, 则不会受影响.", - "v2_base": "v2 (512px)", - "convertToDiffusersHelpText5": "请确认你有足够的磁盘空间,模型大小通常在 2 GB - 7 GB 之间。", - "convert": "转换", - "merge": "合并", - "pickModelType": "选择模型类型", - "addDifference": "增加差异", - "none": "无", - "inverseSigmoid": "反 Sigmoid 函数", - "weightedSum": "加权求和", - "modelMergeAlphaHelp": "Alpha 参数控制模型的混合强度。较低的 Alpha 值会导致第二个模型的影响减弱。", - "sigmoid": "Sigmoid 函数", - "modelMergeInterpAddDifferenceHelp": "在这种模式下,首先从模型 2 中减去模型 3,得到的版本再用上述的 Alpha 值与模型1进行混合。", - "modelsSynced": "模型已同步", - "modelSyncFailed": "模型同步失败", - "modelDeleteFailed": "模型删除失败", - "syncModelsDesc": "如果您的模型与后端不同步,您可以使用此选项刷新它们。便于您在应用程序启动的情况下手动更新 models.yaml 文件或将模型添加到 InvokeAI 根文件夹。", - "selectModel": "选择模型", - "importModels": "导入模型", - "settings": "设置", - "syncModels": "同步模型", - "noCustomLocationProvided": "未提供自定义路径", - "modelDeleted": "模型已删除", - "modelUpdateFailed": "模型更新失败", - "modelConversionFailed": "模型转换失败", - "modelsMergeFailed": "模型融合失败", - "baseModel": "基底模型", - "convertingModelBegin": "模型转换中. 请稍候.", - "noModels": "未找到模型", - "predictionType": "预测类型(适用于 Stable Diffusion 2.x 模型和部分 Stable Diffusion 1.x 模型)", - "quickAdd": "快速添加", - "simpleModelDesc": "提供一个指向本地 Diffusers 模型的路径,本地 checkpoint / safetensors 模型或一个HuggingFace 项目 ID,又或者一个 checkpoint/diffusers 模型链接。", - "advanced": "高级", - "useCustomConfig": "使用自定义配置", - "closeAdvanced": "关闭高级", - "modelType": "模型类别", - "customConfigFileLocation": "自定义配置文件目录", - "variant": "变体", - "onnxModels": "Onnx", - "vae": "VAE", - "oliveModels": "Olive", - "loraModels": "LoRA", - "alpha": "Alpha", - "vaePrecision": "VAE 精度", - "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", - "noModelSelected": "无选中的模型", - "conversionNotSupported": "转换尚未支持" - }, - "parameters": { - "images": "图像", - "steps": "步数", - "cfgScale": "CFG 等级", - "width": "宽度", - "height": "高度", - "seed": "种子", - "randomizeSeed": "随机化种子", - "shuffle": "随机生成种子", - "noiseThreshold": "噪声阈值", - "perlinNoise": "Perlin 噪声", - "variations": "变种", - "variationAmount": "变种数量", - "seedWeights": "种子权重", - "faceRestoration": "面部修复", - "restoreFaces": "修复面部", - "type": "种类", - "strength": "强度", - "upscaling": "放大", - "upscale": "放大 (Shift + U)", - "upscaleImage": "放大图像", - "scale": "等级", - "otherOptions": "其他选项", - "seamlessTiling": "无缝拼贴", - "hiresOptim": "高分辨率优化", - "imageFit": "使生成图像长宽适配初始图像", - "codeformerFidelity": "保真度", - "scaleBeforeProcessing": "处理前缩放", - "scaledWidth": "缩放宽度", - "scaledHeight": "缩放长度", - "infillMethod": "填充方法", - "tileSize": "方格尺寸", - "boundingBoxHeader": "选择区域", - "seamCorrectionHeader": "接缝修正", - "infillScalingHeader": "内填充和缩放", - "img2imgStrength": "图生图强度", - "toggleLoopback": "切换环回", - "sendTo": "发送到", - "sendToImg2Img": "发送到图生图", - "sendToUnifiedCanvas": "发送到统一画布", - "copyImageToLink": "复制图像链接", - "downloadImage": "下载图像", - "openInViewer": "在查看器中打开", - "closeViewer": "关闭查看器", - "usePrompt": "使用提示", - "useSeed": "使用种子", - "useAll": "使用所有参数", - "useInitImg": "使用初始图像", - "info": "信息", - "initialImage": "初始图像", - "showOptionsPanel": "显示侧栏浮窗 (O 或 T)", - "seamlessYAxis": "Y 轴", - "seamlessXAxis": "X 轴", - "boundingBoxWidth": "边界框宽度", - "boundingBoxHeight": "边界框高度", - "denoisingStrength": "去噪强度", - "vSymmetryStep": "纵向对称步数", - "cancel": { - "immediate": "立即取消", - "isScheduled": "取消中", - "schedule": "当前迭代后取消", - "setType": "设定取消类型", - "cancel": "取消" - }, - "copyImage": "复制图片", - "showPreview": "显示预览", - "symmetry": "对称性", - "positivePromptPlaceholder": "正向提示词", - "negativePromptPlaceholder": "负向提示词", - "scheduler": "调度器", - "general": "通用", - "hiresStrength": "高分辨强度", - "hidePreview": "隐藏预览", - "hSymmetryStep": "横向对称步数", - "imageToImage": "图生图", - "noiseSettings": "噪音", - "controlNetControlMode": "控制模式", - "maskAdjustmentsHeader": "遮罩调整", - "maskBlur": "模糊", - "maskBlurMethod": "模糊方式", - "aspectRatio": "纵横比", - "seamLowThreshold": "降低", - "seamHighThreshold": "提升", - "invoke": { - "noNodesInGraph": "节点图中无节点", - "noModelSelected": "无已选中的模型", - "invoke": "调用", - "systemBusy": "系统繁忙", - "noInitialImageSelected": "无选中的初始图像", - "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} 缺失输入", - "unableToInvoke": "无法调用", - "systemDisconnected": "系统已断开连接", - "missingNodeTemplate": "缺失节点模板", - "missingFieldTemplate": "缺失模板", - "addingImagesTo": "添加图像到", - "noPrompts": "没有已生成的提示词", - "readyToInvoke": "准备调用", - "noControlImageForControlAdapter": "有 #{{number}} 个 Control Adapter 缺失控制图像", - "noModelForControlAdapter": "有 #{{number}} 个 Control Adapter 没有选择模型。", - "incompatibleBaseModelForControlAdapter": "有 #{{number}} 个 Control Adapter 模型与主模型不匹配。" - }, - "patchmatchDownScaleSize": "缩小", - "coherenceSteps": "步数", - "clipSkip": "CLIP 跳过层", - "compositingSettingsHeader": "合成设置", - "useCpuNoise": "使用 CPU 噪声", - "coherenceStrength": "强度", - "enableNoiseSettings": "启用噪声设置", - "coherenceMode": "模式", - "cpuNoise": "CPU 噪声", - "gpuNoise": "GPU 噪声", - "clipSkipWithLayerCount": "CLIP 跳过 {{layerCount}} 层", - "coherencePassHeader": "一致性层", - "manualSeed": "手动设定种子", - "imageActions": "图像操作", - "randomSeed": "随机种子", - "iterations": "迭代数", - "isAllowedToUpscale": { - "useX2Model": "图像太大,无法使用 x4 模型,使用 x2 模型作为替代", - "tooLarge": "图像太大无法进行放大,请选择更小的图像" - }, - "iterationsWithCount_other": "{{count}} 次迭代生成", - "seamlessX&Y": "无缝 X & Y", - "aspectRatioFree": "自由", - "seamlessX": "无缝 X", - "seamlessY": "无缝 Y", - "maskEdge": "遮罩边缘", - "unmasked": "取消遮罩", - "cfgRescaleMultiplier": "CFG 重缩放倍数", - "cfgRescale": "CFG 重缩放", - "useSize": "使用尺寸" - }, - "settings": { - "models": "模型", - "displayInProgress": "显示处理中的图像", - "saveSteps": "每n步保存图像", - "confirmOnDelete": "删除时确认", - "displayHelpIcons": "显示帮助按钮", - "enableImageDebugging": "开启图像调试", - "resetWebUI": "重置网页界面", - "resetWebUIDesc1": "重置网页只会重置浏览器中缓存的图像和设置,不会删除任何图像。", - "resetWebUIDesc2": "如果图像没有显示在图库中,或者其他东西不工作,请在GitHub上提交问题之前尝试重置。", - "resetComplete": "网页界面已重置。", - "showProgressInViewer": "在查看器中展示过程图片", - "antialiasProgressImages": "对过程图像应用抗锯齿", - "generation": "生成", - "ui": "用户界面", - "useSlidersForAll": "对所有参数使用滑动条设置", - "general": "通用", - "consoleLogLevel": "日志等级", - "shouldLogToConsole": "终端日志", - "developer": "开发者", - "alternateCanvasLayout": "切换统一画布布局", - "enableNodesEditor": "启用节点编辑器", - "favoriteSchedulersPlaceholder": "没有偏好的采样算法", - "showAdvancedOptions": "显示进阶选项", - "favoriteSchedulers": "采样算法偏好", - "autoChangeDimensions": "更改时将宽/高更新为模型默认值", - "experimental": "实验性", - "beta": "Beta", - "clearIntermediates": "清除中间产物", - "clearIntermediatesDesc3": "您图库中的图像不会被删除。", - "clearIntermediatesDesc2": "中间产物图像是生成过程中产生的副产品,与图库中的结果图像不同。清除中间产物可释放磁盘空间。", - "intermediatesCleared_other": "已清除 {{count}} 个中间产物", - "clearIntermediatesDesc1": "清除中间产物会重置您的画布和 ControlNet 状态。", - "intermediatesClearedFailed": "清除中间产物时出现问题", - "clearIntermediatesWithCount_other": "清除 {{count}} 个中间产物", - "clearIntermediatesDisabled": "队列为空才能清理中间产物", - "enableNSFWChecker": "启用成人内容检测器", - "enableInvisibleWatermark": "启用不可见水印", - "enableInformationalPopovers": "启用信息弹窗", - "reloadingIn": "重新加载中" - }, - "toast": { - "tempFoldersEmptied": "临时文件夹已清空", - "uploadFailed": "上传失败", - "uploadFailedUnableToLoadDesc": "无法加载文件", - "downloadImageStarted": "图像已开始下载", - "imageCopied": "图像已复制", - "imageLinkCopied": "图像链接已复制", - "imageNotLoaded": "没有加载图像", - "imageNotLoadedDesc": "找不到图片", - "imageSavedToGallery": "图像已保存到图库", - "canvasMerged": "画布已合并", - "sentToImageToImage": "已发送到图生图", - "sentToUnifiedCanvas": "已发送到统一画布", - "parametersSet": "参数已设定", - "parametersNotSet": "参数未设定", - "parametersNotSetDesc": "此图像不存在元数据。", - "parametersFailed": "加载参数失败", - "parametersFailedDesc": "加载初始图像失败。", - "seedSet": "种子已设定", - "seedNotSet": "种子未设定", - "seedNotSetDesc": "无法找到该图像的种子。", - "promptSet": "提示词已设定", - "promptNotSet": "提示词未设定", - "promptNotSetDesc": "无法找到该图像的提示词。", - "upscalingFailed": "放大失败", - "faceRestoreFailed": "面部修复失败", - "metadataLoadFailed": "加载元数据失败", - "initialImageSet": "初始图像已设定", - "initialImageNotSet": "初始图像未设定", - "initialImageNotSetDesc": "无法加载初始图像", - "problemCopyingImageLink": "无法复制图片链接", - "uploadFailedInvalidUploadDesc": "必须是单张的 PNG 或 JPEG 图片", - "disconnected": "服务器断开", - "connected": "服务器连接", - "parameterSet": "参数已设定", - "parameterNotSet": "参数未设定", - "serverError": "服务器错误", - "canceled": "处理取消", - "nodesLoaded": "节点已加载", - "nodesSaved": "节点已保存", - "problemCopyingImage": "无法复制图像", - "nodesCorruptedGraph": "无法加载。节点图似乎已损坏。", - "nodesBrokenConnections": "无法加载。部分连接已断开。", - "nodesUnrecognizedTypes": "无法加载。节点图有无法识别的节点类型", - "nodesNotValidJSON": "无效的 JSON", - "nodesNotValidGraph": "无效的 InvokeAi 节点图", - "nodesLoadedFailed": "节点加载失败", - "modelAddedSimple": "已添加模型", - "modelAdded": "已添加模型: {{modelName}}", - "imageSavingFailed": "图像保存失败", - "canvasSentControlnetAssets": "画布已发送到 ControlNet & 素材", - "problemCopyingCanvasDesc": "无法导出基础层", - "loadedWithWarnings": "已加载带有警告的工作流", - "setInitialImage": "设为初始图像", - "canvasCopiedClipboard": "画布已复制到剪贴板", - "setControlImage": "设为控制图像", - "setNodeField": "设为节点字段", - "problemSavingMask": "保存遮罩时出现问题", - "problemSavingCanvasDesc": "无法导出基础层", - "maskSavedAssets": "遮罩已保存到素材", - "modelAddFailed": "模型添加失败", - "problemDownloadingCanvas": "下载画布时出现问题", - "problemMergingCanvas": "合并画布时出现问题", - "setCanvasInitialImage": "设定画布初始图像", - "imageUploaded": "图像已上传", - "addedToBoard": "已添加到面板", - "workflowLoaded": "工作流已加载", - "problemImportingMaskDesc": "无法导出遮罩", - "problemCopyingCanvas": "复制画布时出现问题", - "problemSavingCanvas": "保存画布时出现问题", - "canvasDownloaded": "画布已下载", - "setIPAdapterImage": "设为 IP Adapter 图像", - "problemMergingCanvasDesc": "无法导出基础层", - "problemDownloadingCanvasDesc": "无法导出基础层", - "problemSavingMaskDesc": "无法导出遮罩", - "imageSaved": "图像已保存", - "maskSentControlnetAssets": "遮罩已发送到 ControlNet & 素材", - "canvasSavedGallery": "画布已保存到图库", - "imageUploadFailed": "图像上传失败", - "problemImportingMask": "导入遮罩时出现问题", - "baseModelChangedCleared_other": "基础模型已更改, 已清除或禁用 {{count}} 个不兼容的子模型", - "setAsCanvasInitialImage": "设为画布初始图像", - "invalidUpload": "无效的上传", - "problemDeletingWorkflow": "删除工作流时出现问题", - "workflowDeleted": "已删除工作流", - "problemRetrievingWorkflow": "检索工作流时发生问题" - }, - "unifiedCanvas": { - "layer": "图层", - "base": "基础层", - "mask": "遮罩", - "maskingOptions": "遮罩选项", - "enableMask": "启用遮罩", - "preserveMaskedArea": "保留遮罩区域", - "clearMask": "清除遮罩 (Shift+C)", - "brush": "刷子", - "eraser": "橡皮擦", - "fillBoundingBox": "填充选择区域", - "eraseBoundingBox": "取消选择区域", - "colorPicker": "颜色提取", - "brushOptions": "刷子选项", - "brushSize": "大小", - "move": "移动", - "resetView": "重置视图", - "mergeVisible": "合并可见层", - "saveToGallery": "保存至图库", - "copyToClipboard": "复制到剪贴板", - "downloadAsImage": "下载图像", - "undo": "撤销", - "redo": "重做", - "clearCanvas": "清除画布", - "canvasSettings": "画布设置", - "showIntermediates": "显示中间产物", - "showGrid": "显示网格", - "snapToGrid": "切换网格对齐", - "darkenOutsideSelection": "暗化外部区域", - "autoSaveToGallery": "自动保存至图库", - "saveBoxRegionOnly": "只保存框内区域", - "limitStrokesToBox": "限制画笔在框内", - "showCanvasDebugInfo": "显示附加画布信息", - "clearCanvasHistory": "清除画布历史", - "clearHistory": "清除历史", - "clearCanvasHistoryMessage": "清除画布历史不会影响当前画布,但会不可撤销地清除所有撤销/重做历史。", - "clearCanvasHistoryConfirm": "确认清除所有画布历史?", - "emptyTempImageFolder": "清除临时文件夹", - "emptyFolder": "清除文件夹", - "emptyTempImagesFolderMessage": "清空临时图像文件夹会完全重置统一画布。这包括所有的撤销/重做历史、暂存区的图像和画布基础层。", - "emptyTempImagesFolderConfirm": "确认清除临时文件夹?", - "activeLayer": "活跃图层", - "canvasScale": "画布缩放", - "boundingBox": "选择区域", - "scaledBoundingBox": "缩放选择区域", - "boundingBoxPosition": "选择区域位置", - "canvasDimensions": "画布长宽", - "canvasPosition": "画布位置", - "cursorPosition": "光标位置", - "previous": "上一张", - "next": "下一张", - "accept": "接受", - "showHide": "显示 / 隐藏", - "discardAll": "放弃所有", - "betaClear": "清除", - "betaDarkenOutside": "暗化外部区域", - "betaLimitToBox": "限制在框内", - "betaPreserveMasked": "保留遮罩层", - "antialiasing": "抗锯齿", - "showResultsOn": "显示结果 (开)", - "showResultsOff": "显示结果 (关)", - "saveMask": "保存 $t(unifiedCanvas.mask)" - }, - "accessibility": { - "modelSelect": "模型选择", - "invokeProgressBar": "Invoke 进度条", - "reset": "重置", - "nextImage": "下一张图片", - "useThisParameter": "使用此参数", - "uploadImage": "上传图片", - "previousImage": "上一张图片", - "copyMetadataJson": "复制 JSON 元数据", - "exitViewer": "退出查看器", - "zoomIn": "放大", - "zoomOut": "缩小", - "rotateCounterClockwise": "逆时针旋转", - "rotateClockwise": "顺时针旋转", - "flipHorizontally": "水平翻转", - "flipVertically": "垂直翻转", - "showOptionsPanel": "显示侧栏浮窗", - "toggleLogViewer": "切换日志查看器", - "modifyConfig": "修改配置", - "toggleAutoscroll": "切换自动缩放", - "menu": "菜单", - "showGalleryPanel": "显示图库浮窗", - "loadMore": "加载更多", - "mode": "模式", - "resetUI": "$t(accessibility.reset) UI", - "createIssue": "创建问题" - }, - "ui": { - "showProgressImages": "显示处理中的图片", - "hideProgressImages": "隐藏处理中的图片", - "swapSizes": "XY 尺寸互换", - "lockRatio": "锁定纵横比" - }, - "tooltip": { - "feature": { - "prompt": "这是提示词区域。提示词包括生成对象和风格术语。您也可以在提示词中添加权重(Token 的重要性),但命令行命令和参数不起作用。", - "imageToImage": "图生图模式加载任何图像作为初始图像,然后与提示词一起用于生成新图像。值越高,结果图像的变化就越大。可能的值为 0.0 到 1.0,建议的范围是 0.25 到 0.75", - "upscale": "使用 ESRGAN 可以在图片生成后立即放大图片。", - "variations": "尝试将变化值设置在 0.1 到 1.0 之间,以更改给定种子的结果。种子的变化在 0.1 到 0.3 之间会很有趣。", - "boundingBox": "边界框的高和宽的设定对文生图和图生图模式是一样的,只有边界框中的区域会被处理。", - "other": "这些选项将为 Invoke 启用替代处理模式。 \"无缝拼贴\" 将在输出中创建重复图案。\"高分辨率\" 是通过图生图进行两步生成:当您想要更大、更连贯且不带伪影的图像时,请使用此设置。这将比通常的文生图需要更长的时间。", - "faceCorrection": "使用 GFPGAN 或 Codeformer 进行人脸校正:该算法会检测图像中的人脸并纠正任何缺陷。较高的值将更改图像,并产生更有吸引力的人脸。在保留较高保真度的情况下使用 Codeformer 将导致更强的人脸校正,同时也会保留原始图像。", - "gallery": "图片库展示输出文件夹中的图片,设置和文件一起储存,可以通过内容菜单访问。", - "seed": "种子值影响形成图像的初始噪声。您可以使用以前图像中已存在的种子。 “噪声阈值”用于减轻在高 CFG 等级(尝试 0 - 10 范围)下的伪像,并使用 Perlin 在生成过程中添加 Perlin 噪声:这两者都可以为您的输出添加变化。", - "seamCorrection": "控制在画布上生成的图像之间出现的可见接缝的处理方式。", - "infillAndScaling": "管理填充方法(用于画布的遮罩或擦除区域)和缩放(对于较小的边界框大小非常有用)。" - } - }, - "nodes": { - "zoomInNodes": "放大", - "loadWorkflow": "加载工作流", - "zoomOutNodes": "缩小", - "reloadNodeTemplates": "重载节点模板", - "hideGraphNodes": "隐藏节点图信息", - "fitViewportNodes": "自适应视图", - "showMinimapnodes": "显示缩略图", - "hideMinimapnodes": "隐藏缩略图", - "showLegendNodes": "显示字段类型图例", - "hideLegendNodes": "隐藏字段类型图例", - "showGraphNodes": "显示节点图信息", - "downloadWorkflow": "下载工作流 JSON", - "workflowDescription": "简述", - "versionUnknown": " 未知版本", - "noNodeSelected": "无选中的节点", - "addNode": "添加节点", - "unableToValidateWorkflow": "无法验证工作流", - "noOutputRecorded": "无已记录输出", - "updateApp": "升级 App", - "colorCodeEdgesHelp": "根据连接区域对边缘编码颜色", - "workflowContact": "联系", - "animatedEdges": "边缘动效", - "nodeTemplate": "节点模板", - "pickOne": "选择一个", - "unableToLoadWorkflow": "无法加载工作流", - "snapToGrid": "对齐网格", - "noFieldsLinearview": "线性视图中未添加任何字段", - "nodeSearch": "检索节点", - "version": "版本", - "validateConnections": "验证连接和节点图", - "inputMayOnlyHaveOneConnection": "输入仅能有一个连接", - "notes": "注释", - "nodeOutputs": "节点输出", - "currentImageDescription": "在节点编辑器中显示当前图像", - "validateConnectionsHelp": "防止建立无效连接和调用无效节点图", - "problemSettingTitle": "设定标题时出现问题", - "noConnectionInProgress": "没有正在进行的连接", - "workflowVersion": "版本", - "noConnectionData": "无连接数据", - "fieldTypesMustMatch": "类型必须匹配", - "workflow": "工作流", - "unkownInvocation": "未知调用类型", - "animatedEdgesHelp": "为选中边缘和其连接的选中节点的边缘添加动画", - "unknownTemplate": "未知模板", - "removeLinearView": "从线性视图中移除", - "workflowTags": "标签", - "fullyContainNodesHelp": "节点必须完全位于选择框中才能被选中", - "workflowValidation": "工作流验证错误", - "noMatchingNodes": "无相匹配的节点", - "executionStateInProgress": "处理中", - "noFieldType": "无字段类型", - "executionStateError": "错误", - "executionStateCompleted": "已完成", - "workflowAuthor": "作者", - "currentImage": "当前图像", - "workflowName": "名称", - "cannotConnectInputToInput": "无法将输入连接到输入", - "workflowNotes": "注释", - "cannotConnectOutputToOutput": "无法将输出连接到输出", - "connectionWouldCreateCycle": "连接将创建一个循环", - "cannotConnectToSelf": "无法连接自己", - "notesDescription": "添加有关您的工作流的注释", - "unknownField": "未知", - "colorCodeEdges": "边缘颜色编码", - "unknownNode": "未知节点", - "addNodeToolTip": "添加节点 (Shift+A, Space)", - "loadingNodes": "加载节点中...", - "snapToGridHelp": "移动时将节点与网格对齐", - "workflowSettings": "工作流编辑器设置", - "booleanPolymorphicDescription": "一个布尔值合集。", - "scheduler": "调度器", - "inputField": "输入", - "controlFieldDescription": "节点间传递的控制信息。", - "skippingUnknownOutputType": "跳过未知类型的输出", - "latentsFieldDescription": "Latents 可以在节点间传递。", - "denoiseMaskFieldDescription": "去噪遮罩可以在节点间传递", - "missingTemplate": "无效的节点:类型为 {{type}} 的节点 {{node}} 缺失模板(无已安装模板?)", - "outputSchemaNotFound": "未找到输出模式", - "latentsPolymorphicDescription": "Latents 可以在节点间传递。", - "colorFieldDescription": "一种 RGBA 颜色。", - "mainModelField": "模型", - "unhandledInputProperty": "未处理的输入属性", - "maybeIncompatible": "可能与已安装的不兼容", - "collectionDescription": "待办事项", - "skippingReservedFieldType": "跳过保留类型", - "booleanCollectionDescription": "一个布尔值合集。", - "sDXLMainModelFieldDescription": "SDXL 模型。", - "boardField": "面板", - "problemReadingWorkflow": "从图像读取工作流时出现问题", - "sourceNode": "源节点", - "nodeOpacity": "节点不透明度", - "collectionItemDescription": "待办事项", - "integerDescription": "整数是没有与小数点的数字。", - "outputField": "输出", - "skipped": "跳过", - "updateNode": "更新节点", - "sDXLRefinerModelFieldDescription": "待办事项", - "imagePolymorphicDescription": "一个图像合集。", - "doesNotExist": "不存在", - "unableToParseNode": "无法解析节点", - "controlCollection": "控制合集", - "collectionItem": "项目合集", - "controlCollectionDescription": "节点间传递的控制信息。", - "skippedReservedInput": "跳过保留的输入", - "outputFields": "输出区域", - "edge": "边缘", - "inputNode": "输入节点", - "enumDescription": "枚举 (Enums) 可能是多个选项的一个数值。", - "loRAModelFieldDescription": "待办事项", - "imageField": "图像", - "skippedReservedOutput": "跳过保留的输出", - "noWorkflow": "无工作流", - "colorCollectionDescription": "待办事项", - "colorPolymorphicDescription": "一个颜色合集。", - "sDXLMainModelField": "SDXL 模型", - "denoiseMaskField": "去噪遮罩", - "schedulerDescription": "待办事项", - "missingCanvaInitImage": "缺失画布初始图像", - "clipFieldDescription": "词元分析器和文本编码器的子模型。", - "noImageFoundState": "状态中未发现初始图像", - "nodeType": "节点类型", - "fullyContainNodes": "完全包含节点来进行选择", - "noOutputSchemaName": "在 ref 对象中找不到输出模式名称", - "vaeModelFieldDescription": "待办事项", - "skippingInputNoTemplate": "跳过无模板的输入", - "missingCanvaInitMaskImages": "缺失初始化画布和遮罩图像", - "problemReadingMetadata": "从图像读取元数据时出现问题", - "oNNXModelField": "ONNX 模型", - "node": "节点", - "skippingUnknownInputType": "跳过未知类型的输入", - "booleanDescription": "布尔值为真或为假。", - "collection": "合集", - "invalidOutputSchema": "无效的输出模式", - "boardFieldDescription": "图库面板", - "floatDescription": "浮点数是带小数点的数字。", - "unhandledOutputProperty": "未处理的输出属性", - "string": "字符串", - "inputFields": "输入", - "uNetFieldDescription": "UNet 子模型。", - "mismatchedVersion": "无效的节点:类型为 {{type}} 的节点 {{node}} 版本不匹配(是否尝试更新?)", - "vaeFieldDescription": "Vae 子模型。", - "imageFieldDescription": "图像可以在节点间传递。", - "outputNode": "输出节点", - "mainModelFieldDescription": "待办事项", - "sDXLRefinerModelField": "Refiner 模型", - "unableToParseEdge": "无法解析边缘", - "latentsCollectionDescription": "Latents 可以在节点间传递。", - "oNNXModelFieldDescription": "ONNX 模型。", - "cannotDuplicateConnection": "无法创建重复的连接", - "ipAdapterModel": "IP-Adapter 模型", - "ipAdapterDescription": "图像提示词自适应 (IP-Adapter)。", - "ipAdapterModelDescription": "IP-Adapter 模型", - "floatCollectionDescription": "一个浮点数合集。", - "enum": "Enum (枚举)", - "integerPolymorphicDescription": "一个整数值合集。", - "float": "浮点", - "integer": "整数", - "colorField": "颜色", - "stringCollectionDescription": "一个字符串合集。", - "stringCollection": "字符串合集", - "uNetField": "UNet", - "integerCollection": "整数合集", - "vaeModelField": "VAE", - "integerCollectionDescription": "一个整数值合集。", - "clipField": "Clip", - "stringDescription": "字符串是指文本。", - "colorCollection": "一个颜色合集。", - "boolean": "布尔值", - "stringPolymorphicDescription": "一个字符串合集。", - "controlField": "控制信息", - "floatPolymorphicDescription": "一个浮点数合集。", - "vaeField": "Vae", - "floatCollection": "浮点合集", - "booleanCollection": "布尔值合集", - "imageCollectionDescription": "一个图像合集。", - "loRAModelField": "LoRA", - "imageCollection": "图像合集", - "ipAdapterPolymorphicDescription": "一个 IP-Adapters Collection 合集。", - "ipAdapterCollection": "IP-Adapters 合集", - "conditioningCollection": "条件合集", - "ipAdapterPolymorphic": "IP-Adapters 多态", - "conditioningCollectionDescription": "条件可以在节点间传递。", - "colorPolymorphic": "颜色多态", - "conditioningPolymorphic": "条件多态", - "latentsCollection": "Latents 合集", - "stringPolymorphic": "字符多态", - "conditioningPolymorphicDescription": "条件可以在节点间传递。", - "imagePolymorphic": "图像多态", - "floatPolymorphic": "浮点多态", - "ipAdapterCollectionDescription": "一个 IP-Adapters Collection 合集。", - "ipAdapter": "IP-Adapter", - "booleanPolymorphic": "布尔多态", - "conditioningFieldDescription": "条件可以在节点间传递。", - "integerPolymorphic": "整数多态", - "latentsPolymorphic": "Latents 多态", - "conditioningField": "条件", - "latentsField": "Latents", - "updateAllNodes": "更新节点", - "unableToUpdateNodes_other": "{{count}} 个节点无法完成更新", - "inputFieldTypeParseError": "无法解析 {{node}} 的输入类型 {{field}}。({{message}})", - "unsupportedArrayItemType": "不支持的数组类型 \"{{type}}\"", - "addLinearView": "添加到线性视图", - "targetNodeFieldDoesNotExist": "无效的边缘:{{node}} 的目标/输入区域 {{field}} 不存在", - "unsupportedMismatchedUnion": "合集或标量类型与基类 {{firstType}} 和 {{secondType}} 不匹配", - "allNodesUpdated": "已更新所有节点", - "sourceNodeDoesNotExist": "无效的边缘:{{node}} 的源/输出节点不存在", - "unableToExtractEnumOptions": "无法提取枚举选项", - "unableToParseFieldType": "无法解析类型", - "outputFieldInInput": "输入中的输出区域", - "unrecognizedWorkflowVersion": "无法识别的工作流架构版本:{{version}}", - "outputFieldTypeParseError": "无法解析 {{node}} 的输出类型 {{field}}。({{message}})", - "sourceNodeFieldDoesNotExist": "无效的边缘:{{node}} 的源/输出区域 {{field}} 不存在", - "unableToGetWorkflowVersion": "无法获取工作流架构版本", - "nodePack": "节点包", - "unableToExtractSchemaNameFromRef": "无法从参考中提取架构名", - "unableToMigrateWorkflow": "无法迁移工作流", - "unknownOutput": "未知输出:{{name}}", - "unableToUpdateNode": "无法更新节点", - "unknownErrorValidatingWorkflow": "验证工作流时出现未知错误", - "collectionFieldType": "{{name}} 合集", - "unknownNodeType": "未知节点类型", - "targetNodeDoesNotExist": "无效的边缘:{{node}} 的目标/输入节点不存在", - "unknownFieldType": "$t(nodes.unknownField) 类型:{{type}}", - "collectionOrScalarFieldType": "{{name}} 合集 | 标量", - "nodeVersion": "节点版本", - "deletedInvalidEdge": "已删除无效的边缘 {{source}} -> {{target}}", - "unknownInput": "未知输入:{{name}}", - "prototypeDesc": "此调用是一个原型 (prototype)。它可能会在本项目更新期间发生破坏性更改,并且随时可能被删除。", - "betaDesc": "此调用尚处于测试阶段。在稳定之前,它可能会在项目更新期间发生破坏性更改。本项目计划长期支持这种调用。", - "newWorkflow": "新建工作流", - "newWorkflowDesc": "是否创建一个新的工作流?", - "newWorkflowDesc2": "当前工作流有未保存的更改。", - "unsupportedAnyOfLength": "联合(union)数据类型数目过多 ({{count}})" - }, - "controlnet": { - "resize": "直接缩放", - "showAdvanced": "显示高级", - "contentShuffleDescription": "随机打乱图像内容", - "importImageFromCanvas": "从画布导入图像", - "lineartDescription": "将图像转换为线稿", - "importMaskFromCanvas": "从画布导入遮罩", - "hideAdvanced": "隐藏高级", - "ipAdapterModel": "Adapter 模型", - "resetControlImage": "重置控制图像", - "beginEndStepPercent": "开始 / 结束步数百分比", - "mlsdDescription": "简洁的分割线段(直线)检测器", - "duplicate": "复制", - "balanced": "平衡", - "prompt": "Prompt (提示词控制)", - "depthMidasDescription": "使用 Midas 生成深度图", - "openPoseDescription": "使用 Openpose 进行人体姿态估计", - "resizeMode": "缩放模式", - "weight": "权重", - "selectModel": "选择一个模型", - "crop": "裁剪", - "processor": "处理器", - "none": "无", - "incompatibleBaseModel": "不兼容的基础模型:", - "enableControlnet": "启用 ControlNet", - "detectResolution": "检测分辨率", - "pidiDescription": "像素差分 (PIDI) 图像处理", - "controlMode": "控制模式", - "fill": "填充", - "cannyDescription": "Canny 边缘检测", - "colorMapDescription": "从图像生成一张颜色图", - "imageResolution": "图像分辨率", - "autoConfigure": "自动配置处理器", - "normalBaeDescription": "法线 BAE 处理", - "noneDescription": "不应用任何处理", - "saveControlImage": "保存控制图像", - "toggleControlNet": "开关此 ControlNet", - "delete": "删除", - "colorMapTileSize": "分块大小", - "ipAdapterImageFallback": "无已选择的 IP Adapter 图像", - "mediapipeFaceDescription": "使用 Mediapipe 检测面部", - "depthZoeDescription": "使用 Zoe 生成深度图", - "hedDescription": "整体嵌套边缘检测", - "setControlImageDimensions": "设定控制图像尺寸宽/高为", - "resetIPAdapterImage": "重置 IP Adapter 图像", - "handAndFace": "手部和面部", - "enableIPAdapter": "启用 IP Adapter", - "amult": "角度倍率 (a_mult)", - "bgth": "背景移除阈值 (bg_th)", - "lineartAnimeDescription": "动漫风格线稿处理", - "minConfidence": "最小置信度", - "lowThreshold": "弱判断阈值", - "highThreshold": "强判断阈值", - "addT2IAdapter": "添加 $t(common.t2iAdapter)", - "controlNetEnabledT2IDisabled": "$t(common.controlNet) 已启用, $t(common.t2iAdapter) 已禁用", - "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 已启用, $t(common.controlNet) 已禁用", - "addControlNet": "添加 $t(common.controlNet)", - "controlNetT2IMutexDesc": "$t(common.controlNet) 和 $t(common.t2iAdapter) 目前不支持同时启用。", - "addIPAdapter": "添加 $t(common.ipAdapter)", - "safe": "保守模式", - "scribble": "草绘 (scribble)", - "maxFaces": "最大面部数", - "pidi": "PIDI", - "normalBae": "Normal BAE", - "hed": "HED", - "contentShuffle": "Content Shuffle", - "f": "F", - "h": "H", - "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "control": "Control (普通控制)", - "coarse": "Coarse", - "depthMidas": "Depth (Midas)", - "w": "W", - "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", - "mediapipeFace": "Mediapipe Face", - "mlsd": "M-LSD", - "lineart": "Lineart", - "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", - "megaControl": "Mega Control (超级控制)", - "depthZoe": "Depth (Zoe)", - "colorMap": "Color", - "openPose": "Openpose", - "controlAdapter_other": "Control Adapters", - "lineartAnime": "Lineart Anime", - "canny": "Canny" - }, - "queue": { - "status": "状态", - "cancelTooltip": "取消当前项目", - "queueEmpty": "队列为空", - "pauseSucceeded": "处理器已暂停", - "in_progress": "处理中", - "queueFront": "添加到队列前", - "completed": "已完成", - "queueBack": "添加到队列", - "cancelFailed": "取消项目时出现问题", - "pauseFailed": "暂停处理器时出现问题", - "clearFailed": "清除队列时出现问题", - "clearSucceeded": "队列已清除", - "pause": "暂停", - "cancelSucceeded": "项目已取消", - "queue": "队列", - "batch": "批处理", - "clearQueueAlertDialog": "清除队列时会立即取消所有处理中的项目并且会完全清除队列。", - "pending": "待定", - "completedIn": "完成于", - "resumeFailed": "恢复处理器时出现问题", - "clear": "清除", - "prune": "修剪", - "total": "总计", - "canceled": "已取消", - "pruneFailed": "修剪队列时出现问题", - "cancelBatchSucceeded": "批处理已取消", - "clearTooltip": "取消并清除所有项目", - "current": "当前", - "pauseTooltip": "暂停处理器", - "failed": "已失败", - "cancelItem": "取消项目", - "next": "下一个", - "cancelBatch": "取消批处理", - "cancel": "取消", - "resumeSucceeded": "处理器已恢复", - "resumeTooltip": "恢复处理器", - "resume": "恢复", - "cancelBatchFailed": "取消批处理时出现问题", - "clearQueueAlertDialog2": "您确定要清除队列吗?", - "item": "项目", - "pruneSucceeded": "从队列修剪 {{item_count}} 个已完成的项目", - "notReady": "无法排队", - "batchFailedToQueue": "批次加入队列失败", - "batchValues": "批次数", - "queueCountPrediction": "添加 {{predicted}} 到队列", - "batchQueued": "加入队列的批次", - "queuedCount": "{{pending}} 待处理", - "front": "前", - "pruneTooltip": "修剪 {{item_count}} 个已完成的项目", - "batchQueuedDesc_other": "在队列的 {{direction}} 中添加了 {{count}} 个会话", - "graphQueued": "节点图已加入队列", - "back": "后", - "session": "会话", - "queueTotal": "总计 {{total}}", - "enqueueing": "队列中的批次", - "queueMaxExceeded": "超出最大值 {{max_queue_size}},将跳过 {{skip}}", - "graphFailedToQueue": "节点图加入队列失败", - "batchFieldValues": "批处理值", - "time": "时间" - }, - "sdxl": { - "refinerStart": "Refiner 开始作用时机", - "selectAModel": "选择一个模型", - "scheduler": "调度器", - "cfgScale": "CFG 等级", - "negStylePrompt": "负向样式提示词", - "noModelsAvailable": "无可用模型", - "negAestheticScore": "负向美学评分", - "useRefiner": "启用 Refiner", - "denoisingStrength": "去噪强度", - "refinermodel": "Refiner 模型", - "posAestheticScore": "正向美学评分", - "concatPromptStyle": "连接提示词 & 样式", - "loading": "加载中...", - "steps": "步数", - "posStylePrompt": "正向样式提示词", - "refiner": "Refiner" - }, - "metadata": { - "positivePrompt": "正向提示词", - "negativePrompt": "负向提示词", - "generationMode": "生成模式", - "Threshold": "噪声阈值", - "metadata": "元数据", - "strength": "图生图强度", - "seed": "种子", - "imageDetails": "图像详细信息", - "perlin": "Perlin 噪声", - "model": "模型", - "noImageDetails": "未找到图像详细信息", - "hiresFix": "高分辨率优化", - "cfgScale": "CFG 等级", - "initImage": "初始图像", - "height": "高度", - "variations": "(成对/第二)种子权重", - "noMetaData": "未找到元数据", - "width": "宽度", - "createdBy": "创建者是", - "workflow": "工作流", - "steps": "步数", - "scheduler": "调度器", - "seamless": "无缝", - "fit": "图生图匹配", - "recallParameters": "召回参数", - "noRecallParameters": "未找到要召回的参数", - "vae": "VAE", - "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)" - }, - "models": { - "noMatchingModels": "无相匹配的模型", - "loading": "加载中", - "noMatchingLoRAs": "无相匹配的 LoRA", - "noLoRAsAvailable": "无可用 LoRA", - "noModelsAvailable": "无可用模型", - "selectModel": "选择一个模型", - "selectLoRA": "选择一个 LoRA", - "noRefinerModelsInstalled": "无已安装的 SDXL Refiner 模型", - "noLoRAsInstalled": "无已安装的 LoRA", - "esrganModel": "ESRGAN 模型", - "addLora": "添加 LoRA", - "noLoRAsLoaded": "无已加载的 LoRA" - }, - "boards": { - "autoAddBoard": "自动添加面板", - "topMessage": "该面板包含的图像正使用以下功能:", - "move": "移动", - "menuItemAutoAdd": "自动添加到该面板", - "myBoard": "我的面板", - "searchBoard": "检索面板...", - "noMatching": "没有相匹配的面板", - "selectBoard": "选择一个面板", - "cancel": "取消", - "addBoard": "添加面板", - "bottomMessage": "删除该面板并且将其对应的图像将重置当前使用该面板的所有功能。", - "uncategorized": "未分类", - "changeBoard": "更改面板", - "loading": "加载中...", - "clearSearch": "清除检索", - "downloadBoard": "下载面板", - "deleteBoardOnly": "仅删除面板", - "deleteBoard": "删除面板", - "deleteBoardAndImages": "删除面板和图像", - "deletedBoardsCannotbeRestored": "已删除的面板无法被恢复", - "movingImagesToBoard_other": "移动 {{count}} 张图像到面板:" - }, - "embedding": { - "noMatchingEmbedding": "不匹配的 Embedding", - "addEmbedding": "添加 Embedding", - "incompatibleModel": "不兼容的基础模型:", - "noEmbeddingsLoaded": "无已加载的 Embedding" - }, - "dynamicPrompts": { - "seedBehaviour": { - "perPromptDesc": "每次生成图像使用不同的种子", - "perIterationLabel": "每次迭代的种子", - "perIterationDesc": "每次迭代使用不同的种子", - "perPromptLabel": "每张图像的种子", - "label": "种子行为" - }, - "enableDynamicPrompts": "启用动态提示词", - "combinatorial": "组合生成", - "maxPrompts": "最大提示词数", - "dynamicPrompts": "动态提示词", - "promptsWithCount_other": "{{count}} 个提示词", - "promptsPreview": "提示词预览" - }, - "popovers": { - "compositingMaskAdjustments": { - "heading": "遮罩调整", - "paragraphs": [ - "调整遮罩。" - ] - }, - "paramRatio": { - "heading": "纵横比", - "paragraphs": [ - "生成图像的尺寸纵横比。", - "图像尺寸(单位:像素)建议 SD 1.5 模型使用等效 512x512 的尺寸,SDXL 模型使用等效 1024x1024 的尺寸。" - ] - }, - "compositingCoherenceSteps": { - "heading": "步数", - "paragraphs": [ - "一致性层中使用的去噪步数。", - "与主参数中的步数相同。" - ] - }, - "compositingBlur": { - "heading": "模糊", - "paragraphs": [ - "遮罩模糊半径。" - ] - }, - "noiseUseCPU": { - "heading": "使用 CPU 噪声", - "paragraphs": [ - "选择由 CPU 或 GPU 生成噪声。", - "启用 CPU 噪声后,特定的种子将会在不同的设备上产生下相同的图像。", - "启用 CPU 噪声不会对性能造成影响。" - ] - }, - "paramVAEPrecision": { - "heading": "VAE 精度", - "paragraphs": [ - "VAE 编解码过程种使用的精度。FP16/半精度以微小的图像变化为代价提高效率。" - ] - }, - "compositingCoherenceMode": { - "heading": "模式", - "paragraphs": [ - "一致性层模式。" - ] - }, - "controlNetResizeMode": { - "heading": "缩放模式", - "paragraphs": [ - "ControlNet 输入图像适应输出图像大小的方法。" - ] - }, - "clipSkip": { - "paragraphs": [ - "选择要跳过 CLIP 模型多少层。", - "部分模型跳过特定数值的层时效果会更好。", - "较高的数值通常会导致图像细节更少。" - ], - "heading": "CLIP 跳过层" - }, - "paramModel": { - "heading": "模型", - "paragraphs": [ - "用于去噪过程的模型。", - "不同的模型一般会通过接受训练来专门产生特定的美学内容和结果。" - ] - }, - "paramIterations": { - "heading": "迭代数", - "paragraphs": [ - "生成图像的数量。", - "若启用动态提示词,每种提示词都会生成这么多次。" - ] - }, - "compositingCoherencePass": { - "heading": "一致性层", - "paragraphs": [ - "第二轮去噪有助于合成内补/外扩图像。" - ] - }, - "compositingStrength": { - "heading": "强度", - "paragraphs": [ - "一致性层使用的去噪强度。", - "去噪强度与图生图的参数相同。" - ] - }, - "paramNegativeConditioning": { - "paragraphs": [ - "生成过程会避免生成负向提示词中的概念。使用此选项来使输出排除部分质量或对象。", - "支持 Compel 语法 和 embeddings。" - ], - "heading": "负向提示词" - }, - "compositingBlurMethod": { - "heading": "模糊方式", - "paragraphs": [ - "应用于遮罩区域的模糊方法。" - ] - }, - "paramScheduler": { - "heading": "调度器", - "paragraphs": [ - "调度器 (采样器) 定义如何在图像迭代过程中添加噪声,或者定义如何根据一个模型的输出来更新采样。" - ] - }, - "controlNetWeight": { - "heading": "权重", - "paragraphs": [ - "ControlNet 对生成图像的影响强度。" - ] - }, - "paramCFGScale": { - "heading": "CFG 等级", - "paragraphs": [ - "控制提示词对生成过程的影响程度。" - ] - }, - "paramSteps": { - "heading": "步数", - "paragraphs": [ - "每次生成迭代执行的步数。", - "通常情况下步数越多结果越好,但需要更多生成时间。" - ] - }, - "paramPositiveConditioning": { - "heading": "正向提示词", - "paragraphs": [ - "引导生成过程。您可以使用任何单词或短语。", - "Compel 语法、动态提示词语法和 embeddings。" - ] - }, - "lora": { - "heading": "LoRA 权重", - "paragraphs": [ - "更高的 LoRA 权重会对最终图像产生更大的影响。" - ] - }, - "infillMethod": { - "heading": "填充方法", - "paragraphs": [ - "填充选定区域的方式。" - ] - }, - "controlNetBeginEnd": { - "heading": "开始 / 结束步数百分比", - "paragraphs": [ - "去噪过程中在哪部分步数应用 ControlNet。", - "在组合处理开始阶段应用 ControlNet,且在引导细节生成的结束阶段应用 ControlNet。" - ] - }, - "scaleBeforeProcessing": { - "heading": "处理前缩放", - "paragraphs": [ - "生成图像前将所选区域缩放为最适合模型的大小。" - ] - }, - "paramDenoisingStrength": { - "heading": "去噪强度", - "paragraphs": [ - "为输入图像添加的噪声量。", - "输入 0 会导致结果图像和输入完全相同,输入 1 则会生成全新的图像。" - ] - }, - "paramSeed": { - "heading": "种子", - "paragraphs": [ - "控制用于生成的起始噪声。", - "禁用 “随机种子” 来以相同设置生成相同的结果。" - ] - }, - "controlNetControlMode": { - "heading": "控制模式", - "paragraphs": [ - "给提示词或 ControlNet 增加更大的权重。" - ] - }, - "dynamicPrompts": { - "paragraphs": [ - "动态提示词可将单个提示词解析为多个。", - "基本语法示例:\"a {red|green|blue} ball\"。这会产生三种提示词:\"a red ball\", \"a green ball\" 和 \"a blue ball\"。", - "可以在单个提示词中多次使用该语法,但务必请使用最大提示词设置来控制生成的提示词数量。" - ], - "heading": "动态提示词" - }, - "paramVAE": { - "paragraphs": [ - "用于将 AI 输出转换成最终图像的模型。" - ], - "heading": "VAE" - }, - "dynamicPromptsSeedBehaviour": { - "paragraphs": [ - "控制生成提示词时种子的使用方式。", - "每次迭代过程都会使用一个唯一的种子。使用本选项来探索单个种子的提示词变化。", - "例如,如果你有 5 种提示词,则生成的每个图像都会使用相同种子。", - "为每张图像使用独立的唯一种子。这可以提供更多变化。" - ], - "heading": "种子行为" - }, - "dynamicPromptsMaxPrompts": { - "heading": "最大提示词数量", - "paragraphs": [ - "限制动态提示词可生成的提示词数量。" - ] - }, - "controlNet": { - "paragraphs": [ - "ControlNet 为生成过程提供引导,为生成具有受控构图、结构、样式的图像提供帮助,具体的功能由所选的模型决定。" - ], - "heading": "ControlNet" - }, - "paramCFGRescaleMultiplier": { - "heading": "CFG 重缩放倍数", - "paragraphs": [ - "CFG 引导的重缩放倍率,用于通过 zero-terminal SNR (ztsnr) 训练的模型。推荐设为 0.7。" - ] - } - }, - "invocationCache": { - "disable": "禁用", - "misses": "缓存未中", - "enableFailed": "启用调用缓存时出现问题", - "invocationCache": "调用缓存", - "clearSucceeded": "调用缓存已清除", - "enableSucceeded": "调用缓存已启用", - "clearFailed": "清除调用缓存时出现问题", - "hits": "缓存命中", - "disableSucceeded": "调用缓存已禁用", - "disableFailed": "禁用调用缓存时出现问题", - "enable": "启用", - "clear": "清除", - "maxCacheSize": "最大缓存大小", - "cacheSize": "缓存大小", - "useCache": "使用缓存" - }, - "hrf": { - "enableHrf": "启用高分辨率修复", - "upscaleMethod": "放大方法", - "enableHrfTooltip": "使用较低的分辨率进行初始生成,放大到基础分辨率后进行图生图。", - "metadata": { - "strength": "高分辨率修复强度", - "enabled": "高分辨率修复已启用", - "method": "高分辨率修复方法" - }, - "hrf": "高分辨率修复", - "hrfStrength": "高分辨率修复强度", - "strengthTooltip": "值越低细节越少,但可以减少部分潜在的伪影。" - }, - "workflows": { - "saveWorkflowAs": "保存工作流为", - "workflowEditorMenu": "工作流编辑器菜单", - "noSystemWorkflows": "无系统工作流", - "workflowName": "工作流名称", - "noUserWorkflows": "无用户工作流", - "defaultWorkflows": "默认工作流", - "saveWorkflow": "保存工作流", - "openWorkflow": "打开工作流", - "clearWorkflowSearchFilter": "清除工作流检索过滤器", - "workflowLibrary": "工作流库", - "downloadWorkflow": "保存到文件", - "noRecentWorkflows": "无最近工作流", - "workflowSaved": "已保存工作流", - "workflowIsOpen": "工作流已打开", - "unnamedWorkflow": "未命名的工作流", - "savingWorkflow": "保存工作流中...", - "problemLoading": "加载工作流时出现问题", - "loading": "加载工作流中", - "searchWorkflows": "检索工作流", - "problemSavingWorkflow": "保存工作流时出现问题", - "deleteWorkflow": "删除工作流", - "workflows": "工作流", - "noDescription": "无描述", - "uploadWorkflow": "从文件中加载", - "userWorkflows": "我的工作流", - "newWorkflowCreated": "已创建新的工作流" - }, - "app": { - "storeNotInitialized": "商店尚未初始化" - } -} diff --git a/invokeai/frontend/web/dist/locales/zh_Hant.json b/invokeai/frontend/web/dist/locales/zh_Hant.json deleted file mode 100644 index fe51856117..0000000000 --- a/invokeai/frontend/web/dist/locales/zh_Hant.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "common": { - "nodes": "節點", - "img2img": "圖片轉圖片", - "langSimplifiedChinese": "簡體中文", - "statusError": "錯誤", - "statusDisconnected": "已中斷連線", - "statusConnected": "已連線", - "back": "返回", - "load": "載入", - "close": "關閉", - "langEnglish": "英語", - "settingsLabel": "設定", - "upload": "上傳", - "langArabic": "阿拉伯語", - "discordLabel": "Discord", - "nodesDesc": "使用Node生成圖像的系統正在開發中。敬請期待有關於這項功能的更新。", - "reportBugLabel": "回報錯誤", - "githubLabel": "GitHub", - "langKorean": "韓語", - "langPortuguese": "葡萄牙語", - "hotkeysLabel": "快捷鍵", - "languagePickerLabel": "切換語言", - "langDutch": "荷蘭語", - "langFrench": "法語", - "langGerman": "德語", - "langItalian": "義大利語", - "langJapanese": "日語", - "langPolish": "波蘭語", - "langBrPortuguese": "巴西葡萄牙語", - "langRussian": "俄語", - "langSpanish": "西班牙語", - "unifiedCanvas": "統一畫布", - "cancel": "取消", - "langHebrew": "希伯來語", - "txt2img": "文字轉圖片" - }, - "accessibility": { - "modelSelect": "選擇模型", - "invokeProgressBar": "Invoke 進度條", - "uploadImage": "上傳圖片", - "reset": "重設", - "nextImage": "下一張圖片", - "previousImage": "上一張圖片", - "flipHorizontally": "水平翻轉", - "useThisParameter": "使用此參數", - "zoomIn": "放大", - "zoomOut": "縮小", - "flipVertically": "垂直翻轉", - "modifyConfig": "修改配置", - "menu": "選單" - } -} From 53b835945ffe9d6562e65e9e4b377a1fde62ac39 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Thu, 28 Dec 2023 11:05:19 +1100 Subject: [PATCH 251/515] Updated with ruff formatting --- invokeai/backend/model_management/lora.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/backend/model_management/lora.py b/invokeai/backend/model_management/lora.py index 066381ac53..f5d66ca51a 100644 --- a/invokeai/backend/model_management/lora.py +++ b/invokeai/backend/model_management/lora.py @@ -217,7 +217,7 @@ class ModelPatcher: for ti_name, ti in ti_list: ti_embedding = _get_ti_embedding(text_encoder.get_input_embeddings(), ti) - + ti_tokens = [] for i in range(ti_embedding.shape[0]): embedding = ti_embedding[i] From 83a9e26cd87c41528722c94766d44404074e81bc Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Wed, 27 Dec 2023 23:46:28 -0600 Subject: [PATCH 252/515] Respect torch-sdp in config.yaml (#5353) If the user specifies `torch-sdp` as the attention type in `config.yaml`, we can go ahead and use it (if available) rather than always throwing an exception. --- invokeai/backend/stable_diffusion/diffusers_pipeline.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/invokeai/backend/stable_diffusion/diffusers_pipeline.py b/invokeai/backend/stable_diffusion/diffusers_pipeline.py index a17f0080b8..a85e3762dc 100644 --- a/invokeai/backend/stable_diffusion/diffusers_pipeline.py +++ b/invokeai/backend/stable_diffusion/diffusers_pipeline.py @@ -276,7 +276,11 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): self.disable_attention_slicing() return elif config.attention_type == "torch-sdp": - raise Exception("torch-sdp attention slicing not yet implemented") + if hasattr(torch.nn.functional, "scaled_dot_product_attention"): + # diffusers enables sdp automatically + return + else: + raise Exception("torch-sdp attention slicing not available") # the remainder if this code is called when attention_type=='auto' if self.unet.device.type == "cuda": @@ -284,7 +288,7 @@ class StableDiffusionGeneratorPipeline(StableDiffusionPipeline): self.enable_xformers_memory_efficient_attention() return elif hasattr(torch.nn.functional, "scaled_dot_product_attention"): - # diffusers enable sdp automatically + # diffusers enables sdp automatically return if self.unet.device.type == "cpu" or self.unet.device.type == "mps": From c9951cd86ba8e9ceeeb783cd292d5a2e0eaae1f3 Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Tue, 26 Dec 2023 06:51:02 -0600 Subject: [PATCH 253/515] Eliminate constant console deprecation warnings React Flow 11.10 eliminates the need to use project() and issues a deprecation warning to the console every time that onMouseMove is called (see https://reactflow.dev/whats-new/2023-11-10#rename-usereactflowproject-to-usereactflowscreentoflowposition). This code change eliminates that warning, --- .../web/src/features/nodes/components/flow/Flow.tsx | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx index dc6454b764..e11142b58b 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx @@ -157,14 +157,11 @@ export const Flow = () => { }, []); const onMouseMove = useCallback((event: MouseEvent) => { - const bounds = flowWrapper.current?.getBoundingClientRect(); - if (bounds) { - const pos = $flow.get()?.project({ - x: event.clientX - bounds.left, - y: event.clientY - bounds.top, - }); - cursorPosition.current = pos; - } + const pos = $flow.get()?.screenToFlowPosition({ + x: event.clientX, + y: event.clientY, + }); + cursorPosition.current = pos; }, []); // #region Updatable Edges From 84a001720c344f993ff476b6f2ca30aae49dd578 Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Tue, 26 Dec 2023 07:07:46 -0600 Subject: [PATCH 254/515] Added back bounds check --- .../web/src/features/nodes/components/flow/Flow.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx index e11142b58b..d98d3131c0 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx @@ -157,11 +157,13 @@ export const Flow = () => { }, []); const onMouseMove = useCallback((event: MouseEvent) => { - const pos = $flow.get()?.screenToFlowPosition({ - x: event.clientX, - y: event.clientY, - }); - cursorPosition.current = pos; + if (flowWrapper.current?.getBoundingClientRect()) { + const pos = $flow.get()?.screenToFlowPosition({ + x: event.clientX, + y: event.clientY, + }); + cursorPosition.current = pos; + } }, []); // #region Updatable Edges From f6664960caa1f2431c1ff1acd83ab9f53816d7dd Mon Sep 17 00:00:00 2001 From: Jonathan <34005131+JPPhoto@users.noreply.github.com> Date: Tue, 26 Dec 2023 08:14:22 -0600 Subject: [PATCH 255/515] Update useBuildNode.ts Added addition of the rect's top left coordinates to get equivalent behavior. --- .../frontend/web/src/features/nodes/hooks/useBuildNode.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/hooks/useBuildNode.ts b/invokeai/frontend/web/src/features/nodes/hooks/useBuildNode.ts index d4ebe8289b..c4e82d4436 100644 --- a/invokeai/frontend/web/src/features/nodes/hooks/useBuildNode.ts +++ b/invokeai/frontend/web/src/features/nodes/hooks/useBuildNode.ts @@ -38,11 +38,11 @@ export const useBuildNode = () => { ?.getBoundingClientRect(); if (rect) { - _x = rect.width / 2 - NODE_WIDTH / 2; - _y = rect.height / 2 - NODE_WIDTH / 2; + _x = rect.width / 2 - NODE_WIDTH / 2 + rect.left; + _y = rect.height / 2 - NODE_WIDTH / 2 + rect.top; } - const position = flow.project({ + const position = flow.screenToFlowPosition({ x: _x, y: _y, }); From 1b8651fa26f657ba54b1fff29d97bbc21be3b9dc Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 28 Dec 2023 20:42:36 +1100 Subject: [PATCH 256/515] fix(ui): do no create extraneous `pos` var --- .../frontend/web/src/features/nodes/components/flow/Flow.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx index d98d3131c0..4b3e8e8b1b 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/Flow.tsx @@ -158,11 +158,10 @@ export const Flow = () => { const onMouseMove = useCallback((event: MouseEvent) => { if (flowWrapper.current?.getBoundingClientRect()) { - const pos = $flow.get()?.screenToFlowPosition({ + cursorPosition.current = $flow.get()?.screenToFlowPosition({ x: event.clientX, y: event.clientY, }); - cursorPosition.current = pos; } }, []); From e57f5f129ca76b595db324390d9651fd0386104b Mon Sep 17 00:00:00 2001 From: gogurtenjoyer <36354352+gogurtenjoyer@users.noreply.github.com> Date: Thu, 28 Dec 2023 13:15:52 -0500 Subject: [PATCH 257/515] add nightmare promptgen to communityNodes.md --- docs/nodes/communityNodes.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/nodes/communityNodes.md b/docs/nodes/communityNodes.md index d730af8308..6347461f54 100644 --- a/docs/nodes/communityNodes.md +++ b/docs/nodes/communityNodes.md @@ -36,7 +36,8 @@ To use a community workflow, download the the `.json` node graph file and load i + [Mask Operations](#mask-operations) + [Match Histogram](#match-histogram) + [Metadata-Linked](#metadata-linked-nodes) - + [Negative Image](#negative-image) + + [Negative Image](#negative-image) + + [Nightmare Promptgen](#nightmare-promptgen) + [Oobabooga](#oobabooga) + [Prompt Tools](#prompt-tools) + [Remote Image](#remote-image) @@ -346,6 +347,13 @@ Node Link: https://github.com/VeyDlin/negative-image-node View:
+-------------------------------- +### Nightmare Promptgen + +**Description:** Nightmare Prompt Generator - Uses a local text generation model to create unique imaginative (but usually nightmarish) prompts for InvokeAI. By default, it allows you to choose from some gpt-neo models I finetuned on over 2500 of my own InvokeAI prompts in Compel format, but you're able to add your own, as well. Offers support for replacing any troublesome words with a random choice from list you can also define. + +**Node Link:** [https://github.com/gogurtenjoyer/nightmare-promptgen](https://github.com/gogurtenjoyer/nightmare-promptgen) + -------------------------------- ### Oobabooga From a6935ae7fbba34076a6251dab09f894746b83b70 Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Fri, 29 Dec 2023 12:26:50 +1100 Subject: [PATCH 258/515] Add Tiled Upscaling to default workflows --- .../default_workflows/Tiled Upscaling.json | 3341 +++++++++++++++++ 1 file changed, 3341 insertions(+) create mode 100644 invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling.json diff --git a/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling.json b/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling.json new file mode 100644 index 0000000000..5607aacce0 --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling.json @@ -0,0 +1,3341 @@ +{ + "name": "Tiled Upscaling (Beta)", + "author": "Invoke", + "description": "A workflow to upscale an input image with tiled upscaling. ", + "version": "1.0.0", + "contact": "invoke@invoke.ai", + "tags": "tiled, upscaling, sd1.5", + "notes": "", + "exposedFields": [ + { + "nodeId": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "fieldName": "model" + }, + { + "nodeId": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "fieldName": "image" + }, + { + "nodeId": "86fce904-9dc2-466f-837a-92fe15969b51", + "fieldName": "value" + }, + { + "nodeId": "b875cae6-d8a3-4fdc-b969-4d53cbd03f9a", + "fieldName": "a" + }, + { + "nodeId": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "fieldName": "strength" + }, + { + "nodeId": "d334f2da-016a-4524-9911-bdab85546888", + "fieldName": "end_step_percent" + } + ], + "meta": { + "category": "default", + "version": "2.0.0" + }, + "nodes": [ + { + "id": "b875cae6-d8a3-4fdc-b969-4d53cbd03f9a", + "type": "invocation", + "data": { + "id": "b875cae6-d8a3-4fdc-b969-4d53cbd03f9a", + "type": "float_math", + "label": "Creativity Input", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "operation": { + "id": "abdfce29-254b-4041-9950-58812b494caf", + "name": "operation", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "DIV" + }, + "a": { + "id": "0a91cbbc-8051-4afa-827d-27e4447958e3", + "name": "a", + "fieldKind": "input", + "label": "Creativity", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.3 + }, + "b": { + "id": "c6adb8a6-1153-4fe1-a975-ad55a4726dcf", + "name": "b", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 3.3 + } + }, + "outputs": { + "value": { + "id": "e56bf613-4186-4e73-98b4-840460847f93", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4007.507843708216, + "y": -621.6878478530825 + } + }, + { + "id": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "type": "invocation", + "data": { + "id": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "type": "float_to_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "f71591e3-d511-44d8-8141-ef6f9b76ff69", + "name": "value", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "multiple": { + "id": "ecc95dc2-3c9f-4124-94e7-d21dc24d0dea", + "name": "multiple", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 8 + }, + "method": { + "id": "60546d62-469a-46d1-bfe5-f15fc3ec9133", + "name": "method", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "Floor" + } + }, + "outputs": { + "value": { + "id": "9b6d4604-0dbc-4fde-9a1f-b619fb7ab5e2", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4470.518114882552, + "y": -246.9687512362472 + } + }, + { + "id": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "type": "invocation", + "data": { + "id": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "type": "image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "image": { + "id": "d726839c-212b-4723-ad69-37d4b9a60bc4", + "name": "image", + "fieldKind": "input", + "label": "Image to Upscale", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + } + }, + "outputs": { + "image": { + "id": "ee9021d1-67fe-4426-aff0-3d9ea4a3ef40", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "3ba04db1-a785-48c0-b266-bd456cdd39ff", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "37d3feb6-73be-4b69-aebb-fbd4e1ab2968", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 225, + "position": { + "x": -4478.124655079993, + "y": -559.029825378111 + } + }, + { + "id": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "type": "invocation", + "data": { + "id": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "type": "img_scale", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "0e64b057-342f-47f4-b2cd-2f32657e8170", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "b1223ea8-ce92-4d0a-af0e-ccd2c622dac6", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "scale_factor": { + "id": "45531c37-9f28-4f7f-bf1a-c82f6b48d250", + "name": "scale_factor", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 3 + }, + "resample_mode": { + "id": "1b1e6725-8253-4ca7-ad60-494065d75253", + "name": "resample_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "lanczos" + } + }, + "outputs": { + "image": { + "id": "19160625-a6ba-47aa-ab80-61ce6c9405c0", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "e9fcbcd2-ba12-4725-8fdd-733e2a27e3fa", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "30b38439-cc0b-44e0-bd9c-53ed3417829c", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4478.200192078582, + "y": 3.422855503409039 + } + }, + { + "id": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", + "type": "invocation", + "data": { + "id": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "prompt": { + "id": "521125b0-7e40-4ddb-853a-53adf0939f24", + "name": "prompt", + "fieldKind": "input", + "label": "Positive Prompt", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "f5c8a31e-ab35-43b2-836a-662eb9f7c8f5", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "3121af50-7c69-4cbf-ad04-002fa171de0d", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 259, + "position": { + "x": -4014.4136788915944, + "y": -1243.5677253775948 + } + }, + { + "id": "947c3f88-0305-4695-8355-df4abac64b1c", + "type": "invocation", + "data": { + "id": "947c3f88-0305-4695-8355-df4abac64b1c", + "type": "compel", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "prompt": { + "id": "51118c53-bc79-4633-867a-cb48ca7385ae", + "name": "prompt", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "StringField" + }, + "value": "" + }, + "clip": { + "id": "e70de740-ad11-4761-8279-150ba527d7c7", + "name": "clip", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + } + }, + "outputs": { + "conditioning": { + "id": "770dae76-23d5-41fc-8b42-b94ab341f036", + "name": "conditioning", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + } + } + }, + "width": 320, + "height": 259, + "position": { + "x": -4014.4136788915944, + "y": -968.5677253775948 + } + }, + { + "id": "b3513fed-ed42-408d-b382-128fdb0de523", + "type": "invocation", + "data": { + "id": "b3513fed-ed42-408d-b382-128fdb0de523", + "type": "noise", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.1", + "inputs": { + "seed": { + "id": "4416b4f5-00b6-4ec3-8f9a-169b46744590", + "name": "seed", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1 + }, + "width": { + "id": "dd9d05d5-dce9-40d6-90a2-1b0384f5a26e", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "90bcf269-32d3-4056-b83b-d73eb2f4e07b", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "use_cpu": { + "id": "b4b5f463-c3d9-4a02-87ad-d339c8a1504a", + "name": "use_cpu", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": true + } + }, + "outputs": { + "noise": { + "id": "98ae3703-2f01-4c60-8364-0b4f2941ff20", + "name": "noise", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "8a3a2b8e-7d49-467d-9fc3-d871f30ba4be", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "3c8a0a4a-7546-47e9-aac8-6e79ad496852", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -3661.44600187038, + "y": -86.98974389852648 + } + }, + { + "id": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5", + "type": "invocation", + "data": { + "id": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5", + "type": "iterate", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "inputs": { + "collection": { + "id": "e43583e9-40c0-437c-8e30-5659080bc7c2", + "name": "collection", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "CollectionField" + } + } + }, + "outputs": { + "item": { + "id": "f1361b3d-fac4-4f7c-a02d-1abacefb235c", + "name": "item", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "CollectionItemField" + } + }, + "index": { + "id": "1314c769-d526-4c32-b1e1-382ca8bedbfe", + "name": "index", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "total": { + "id": "50daab4e-5302-40f6-88d0-8cf758de23c3", + "name": "total", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -3651.5370216396627, + "y": 81.15992554066929 + } + }, + { + "id": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "type": "invocation", + "data": { + "id": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "type": "tile_to_properties", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "tile": { + "id": "1ab68ace-f778-44e7-8737-5062d56ca386", + "name": "tile", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "Tile" + } + } + }, + "outputs": { + "coords_top": { + "id": "8d4afe9f-159c-41df-bc2a-b253d4e925bd", + "name": "coords_top", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "coords_bottom": { + "id": "80045666-e047-42d7-8f29-09c6d3bc45d6", + "name": "coords_bottom", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "coords_left": { + "id": "06bdad45-3f4f-47be-9c2a-9ea0224a8cc5", + "name": "coords_left", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "coords_right": { + "id": "2b901623-4aa0-4573-8b4c-5437c36f9158", + "name": "coords_right", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "width": { + "id": "c5afe347-1584-47f2-90c4-41f3a0d85b03", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "e59e07e8-d20a-4a4c-89ed-c3b8264e6e64", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "overlap_top": { + "id": "1d721fe2-b3d5-4f68-96d2-5ead65c66c58", + "name": "overlap_top", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "overlap_bottom": { + "id": "d478b7a1-d87c-4156-b435-e72f3d9d66bc", + "name": "overlap_bottom", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "overlap_left": { + "id": "4fb54cd2-1c93-45da-bbb6-f3e63723c832", + "name": "overlap_left", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "overlap_right": { + "id": "b85afef8-7eda-4c13-ba4e-9afa7f8e1a9b", + "name": "overlap_right", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -3653.3418661289197, + "y": 134.9675219108736 + } + }, + { + "id": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "invocation", + "data": { + "id": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "img_crop", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "977a07c4-34c0-420c-82c0-0e887142a343", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "05d1a40f-3a2b-48e1-8835-a4eafeee95a1", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "x": { + "id": "f150d607-e367-4c48-953f-2dad94c29a80", + "name": "x", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "y": { + "id": "0f905f70-3d7e-436f-a216-2f00425fe5a1", + "name": "y", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "1afe44d9-88ef-4f6a-995d-c21f32be8daf", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "c337d0c8-f1d7-4039-849a-dc52d814cf38", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + } + }, + "outputs": { + "image": { + "id": "c119b74a-e89e-4d24-b404-44c7e26a221a", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "96bd6254-5e4b-40c2-b31d-f3e60338700c", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "2f9253d3-01f7-4c5b-a27d-f139c3e6ae29", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -3253.380472583465, + "y": -29.08699277598673 + } + }, + { + "id": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "type": "invocation", + "data": { + "id": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "type": "i2l", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "image": { + "id": "8399b2a5-2f35-4cba-8db5-1b0530dfb891", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "vae": { + "id": "d06acc3b-8f43-4fe8-afe1-05a4858c994a", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "16555094-353b-4424-9984-5ecbaaf530df", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "941a119a-bf06-47ff-9e1a-91580ad21ea0", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "latents": { + "id": "a864e559-2252-402e-82c5-5a1056d2801b", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "ff465bee-e1df-4380-84ca-5e909d237b7a", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "ec3402b6-6bbb-472e-a270-902156ecbc6a", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -2908.4791167517287, + "y": -408.87504820159086 + } + }, + { + "id": "d334f2da-016a-4524-9911-bdab85546888", + "type": "invocation", + "data": { + "id": "d334f2da-016a-4524-9911-bdab85546888", + "type": "controlnet", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "inputs": { + "image": { + "id": "4024804e-450c-4d06-ba2e-ad9cae2df3d4", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "control_model": { + "id": "17dc258d-9251-4442-bfb2-eabf92c874c9", + "name": "control_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlNetModelField" + }, + "value": { + "model_name": "tile", + "base_model": "sd-1" + } + }, + "control_weight": { + "id": "e03ca9bb-9675-401f-899f-612f64d1fdff", + "name": "control_weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 1 + }, + "begin_step_percent": { + "id": "27aa1f02-429f-4138-9581-5ad17f6aa4fc", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "641fa5b4-3588-489c-bf30-e9bdb61c5ddf", + "name": "end_step_percent", + "fieldKind": "input", + "label": "Structural Control", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "control_mode": { + "id": "92f970f8-8c41-49dd-aaba-f4edee3dc2cc", + "name": "control_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "more_control" + }, + "resize_mode": { + "id": "2d354911-0b7a-4fb2-9606-e6b8da305dab", + "name": "resize_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "just_resize" + } + }, + "outputs": { + "control": { + "id": "9358bb0b-91e7-4919-b62e-72ca38909cc0", + "name": "control", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ControlField" + } + } + } + }, + "width": 320, + "height": 508, + "position": { + "x": -2481.9569385477016, + "y": -181.06590482739782 + } + }, + { + "id": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "invocation", + "data": { + "id": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "denoise_latents", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.5.0", + "inputs": { + "positive_conditioning": { + "id": "5c9bfc87-020a-4523-8fe5-01806050e1ce", + "name": "positive_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "negative_conditioning": { + "id": "6e500cd5-d146-4af6-a657-f03ada787d77", + "name": "negative_conditioning", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ConditioningField" + } + }, + "noise": { + "id": "c7b7d1ab-e4e8-45b8-b743-05dfac50ebf7", + "name": "noise", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "steps": { + "id": "6d2b7b88-1abc-40b9-b22c-81936c6338d9", + "name": "steps", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 35 + }, + "cfg_scale": { + "id": "64bb1555-d2e9-4f9d-a03e-0ca8c47b573f", + "name": "cfg_scale", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 4 + }, + "denoising_start": { + "id": "f571390a-01f2-4c77-b903-020742606e42", + "name": "denoising_start", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.75 + }, + "denoising_end": { + "id": "047c9764-6c16-44c2-bddd-06b173dea40d", + "name": "denoising_end", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "scheduler": { + "id": "3241bf2a-c32e-4c39-9fd9-d56717c5716e", + "name": "scheduler", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "SchedulerField" + }, + "value": "unipc" + }, + "unet": { + "id": "09d864e1-c1bb-418f-a273-3b66093b44fd", + "name": "unet", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + }, + "control": { + "id": "95d15488-c49e-49b9-bc40-933ed5789f9c", + "name": "control", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ControlField" + } + }, + "ip_adapter": { + "id": "597d08fa-afac-4b5c-aa36-84d80a7c4e0b", + "name": "ip_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "IPAdapterField" + } + }, + "t2i_adapter": { + "id": "3bbbb638-805d-4753-9e1e-c65b2855a758", + "name": "t2i_adapter", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "T2IAdapterField" + } + }, + "latents": { + "id": "9dce213f-c109-4f3d-9a2a-bee180ce2fb8", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "denoise_mask": { + "id": "82a884da-9994-4ee2-957d-845c59910bcb", + "name": "denoise_mask", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "DenoiseMaskField" + } + }, + "cfg_rescale_multiplier": { + "id": "45124a3c-454c-47fc-9e70-450741ae61ca", + "name": "cfg_rescale_multiplier", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + } + }, + "outputs": { + "latents": { + "id": "96e37296-015c-4d50-9e67-82cf9210eb18", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "0979c96a-e281-4e59-aa04-b64d655c1398", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "b518453f-e5e1-4fa8-8680-2904962852f0", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 703, + "position": { + "x": -2493.8519134413505, + "y": -1006.415909408244 + } + }, + { + "id": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", + "type": "invocation", + "data": { + "id": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", + "type": "l2i", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "c1d525dc-e26f-4f1e-91d0-463a0c29a238", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "latents": { + "id": "2da05fe5-ef61-4a63-a851-55a73c0fbbf7", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "vae": { + "id": "84bf30f2-fbc5-4c6f-87fd-18bf325dd976", + "name": "vae", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "tiled": { + "id": "e57f105f-fe9e-4858-b97e-b8550b7119fc", + "name": "tiled", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + }, + "fp32": { + "id": "552072da-7812-4653-8603-ea73dd368027", + "name": "fp32", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BooleanField" + }, + "value": false + } + }, + "outputs": { + "image": { + "id": "5893fcb1-82eb-4ac3-8973-138404f43138", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "3d6f5bb3-015d-41f2-9292-cbc4693ceffe", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "62d1f3f6-bd59-4b64-b6e5-0a17bdfe06ec", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 266, + "position": { + "x": -1999.770193862987, + "y": -1075 + } + }, + { + "id": "ab6f5dda-4b60-4ddf-99f2-f61fb5937527", + "type": "invocation", + "data": { + "id": "ab6f5dda-4b60-4ddf-99f2-f61fb5937527", + "type": "pair_tile_image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "image": { + "id": "f7dd7e8a-0cdf-4e11-b879-902c46120ccc", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "tile": { + "id": "8f74c192-6f71-43d6-8c71-9e0d5db27494", + "name": "tile", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "Tile" + } + } + }, + "outputs": { + "tile_with_image": { + "id": "a409c935-3475-4588-a489-71cd25a870a5", + "name": "tile_with_image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "TileWithImage" + } + } + } + }, + "width": 320, + "height": 161, + "position": { + "x": -1528.3086883131245, + "y": -847.9775129915614 + } + }, + { + "id": "ca0d20d1-918f-44e0-8fc3-4704dc41f4da", + "type": "invocation", + "data": { + "id": "ca0d20d1-918f-44e0-8fc3-4704dc41f4da", + "type": "collect", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "item": { + "id": "84aff42a-1bff-434f-87f7-9f00031f53bf", + "name": "item", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "CollectionItemField" + } + } + }, + "outputs": { + "collection": { + "id": "7c9d37d2-9437-4e53-9f19-c429dd7d875b", + "name": "collection", + "fieldKind": "output", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "CollectionField" + } + } + } + }, + "width": 320, + "height": 104, + "position": { + "x": -1528.3086883131245, + "y": -647.9775129915615 + } + }, + { + "id": "7cedc866-2095-4bda-aa15-23f15d6273cb", + "type": "invocation", + "data": { + "id": "7cedc866-2095-4bda-aa15-23f15d6273cb", + "type": "merge_tiles_to_image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.1.0", + "inputs": { + "metadata": { + "id": "e84d21d9-dfe4-40b9-ae82-ef09f690e088", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "tiles_with_images": { + "id": "0890d582-c521-4b9e-b483-22fd20d750d0", + "name": "tiles_with_images", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "TileWithImage" + } + }, + "blend_amount": { + "id": "628083f2-b511-4862-8169-45d29b1a8caf", + "name": "blend_amount", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 32 + }, + "blend_mode": { + "id": "cbeb9607-554d-44db-a023-13b953c25381", + "name": "blend_mode", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "Seam" + } + }, + "outputs": { + "image": { + "id": "d95762fb-e567-40f7-96d7-27884ddfb124", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "789e595e-75e6-4857-9e8b-ec7f1f7c3f84", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "e2faab47-3a28-4f93-b202-da5fc77a8c47", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 282, + "position": { + "x": -1528.3086883131245, + "y": -522.9775129915615 + } + }, + { + "id": "234192f1-ee96-49be-a5d1-bad4c52a9012", + "type": "invocation", + "data": { + "id": "234192f1-ee96-49be-a5d1-bad4c52a9012", + "type": "save_image", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": false, + "useCache": false, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "c4de0a6e-2eb3-45cc-b7cf-e881cf0ff1df", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "3df32731-cc12-449e-b9c1-88e3d187cab0", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "board": { + "id": "07135787-90f1-4a5e-80f8-038429301bb5", + "name": "board", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "BoardField" + } + } + }, + "outputs": { + "image": { + "id": "a7053752-f8d8-48cc-9ee6-ac16ceacab36", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "3208e788-ffd4-4d1c-961f-f6f3ef8a6852", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "c354e825-e46f-457a-9937-1d057b2cda50", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 283, + "position": { + "x": -1128.3086883131245, + "y": -522.9775129915615 + } + }, + { + "id": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "invocation", + "data": { + "id": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "crop_latents", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "latents": { + "id": "d759d88e-a030-402f-a076-4fb40ddccb19", + "name": "latents", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "x": { + "id": "4e071700-cf0b-42c1-a7d7-943fdafa2a32", + "name": "x", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "y": { + "id": "04ab80ec-e464-4682-aebe-8ce8a23df284", + "name": "y", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "93247201-bfa7-425f-b67f-768ef84f152a", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "height": { + "id": "2ee694cd-aaba-4a65-bf58-1e3ccf44ea87", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + } + }, + "outputs": { + "latents": { + "id": "3b5be4fa-8555-432e-a5c3-4a6d3e19e0dc", + "name": "latents", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "LatentsField" + } + }, + "width": { + "id": "911083f7-f39e-4ecd-8233-ebd544264958", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "949c5c09-9c64-48ea-aa5d-aa83693291e1", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -3253.7161754850986, + "y": -78.2819050861178 + } + }, + { + "id": "287f134f-da8d-41d1-884e-5940e8f7b816", + "type": "invocation", + "data": { + "id": "287f134f-da8d-41d1-884e-5940e8f7b816", + "type": "ip_adapter", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "inputs": { + "image": { + "id": "ccbc635a-aac3-4601-bb73-93ef7e240d97", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "ImageField" + } + }, + "ip_adapter_model": { + "id": "b6253c55-423c-4010-9b7e-1e9085b06118", + "name": "ip_adapter_model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterModelField" + }, + "value": { + "model_name": "ip_adapter_plus_sd15", + "base_model": "sd-1" + } + }, + "weight": { + "id": "6ec84b66-7d91-40ad-994f-002d0d09d0bd", + "name": "weight", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": true, + "name": "FloatField" + }, + "value": 0.2 + }, + "begin_step_percent": { + "id": "740eefce-6e3a-46dd-beab-64aa0ed1051f", + "name": "begin_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "end_step_percent": { + "id": "754f0b18-d7e4-4afa-81c9-43cdeddc5342", + "name": "end_step_percent", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + } + }, + "outputs": { + "ip_adapter": { + "id": "c72f09f7-4cdd-4282-8b56-a3757060f6bb", + "name": "ip_adapter", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IPAdapterField" + } + } + } + }, + "width": 320, + "height": 394, + "position": { + "x": -2855.8555540799207, + "y": -183.58854843775742 + } + }, + { + "id": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "invocation", + "data": { + "id": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "calculate_image_tiles_even_split", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.1.0", + "inputs": { + "image_width": { + "id": "f2644471-405c-4dc8-85ab-3ca7e5ac627e", + "name": "image_width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "image_height": { + "id": "b2299311-c895-4ee8-a187-1138dfe66265", + "name": "image_height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 1024 + }, + "num_tiles_x": { + "id": "b97c22b2-3055-4bf3-b482-3fbb6ebd272a", + "name": "num_tiles_x", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2 + }, + "num_tiles_y": { + "id": "51cf107d-2e08-4e39-b6b7-ca1bdec2e021", + "name": "num_tiles_y", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2 + }, + "overlap": { + "id": "ea31fddd-9de6-4e2c-83b4-e81bd5366010", + "name": "overlap", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 128 + } + }, + "outputs": { + "tiles": { + "id": "8eda7e0a-620a-4559-b52f-31d851988cb4", + "name": "tiles", + "fieldKind": "output", + "type": { + "isCollection": true, + "isCollectionOrScalar": false, + "name": "Tile" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4101.266011341878, + "y": -49.381989859546415 + } + }, + { + "id": "86fce904-9dc2-466f-837a-92fe15969b51", + "type": "invocation", + "data": { + "id": "86fce904-9dc2-466f-837a-92fe15969b51", + "type": "integer", + "label": "Scale Factor", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "9ba98457-5a93-4b31-bea9-16b7779a2064", + "name": "value", + "fieldKind": "input", + "label": "Scale Factor", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2 + } + }, + "outputs": { + "value": { + "id": "094295ce-6d43-45bd-9b49-9ab7cd47f598", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4476.853041598589, + "y": -41.810810454906914 + } + }, + { + "id": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "type": "invocation", + "data": { + "id": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "type": "main_model_loader", + "label": "", + "isOpen": true, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "model": { + "id": "3e18c38b-a255-4124-9b7a-625400577065", + "name": "model", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MainModelField" + }, + "value": { + "model_name": "stable-diffusion-v1-5", + "base_model": "sd-1", + "model_type": "main" + } + } + }, + "outputs": { + "vae": { + "id": "ff9e0f73-c1f6-4c55-ab5c-561c8de8b44f", + "name": "vae", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "VaeField" + } + }, + "clip": { + "id": "e19ea6f8-402e-4e34-946f-be42fac9fda3", + "name": "clip", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ClipField" + } + }, + "unet": { + "id": "69a030e6-5980-45b1-a1e4-af5c9ca27705", + "name": "unet", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "UNetField" + } + } + } + }, + "width": 320, + "height": 226, + "position": { + "x": -4490.268183442608, + "y": -1114.7976814000015 + } + }, + { + "id": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "type": "invocation", + "data": { + "id": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "type": "float_to_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "f71591e3-d511-44d8-8141-ef6f9b76ff69", + "name": "value", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "multiple": { + "id": "ecc95dc2-3c9f-4124-94e7-d21dc24d0dea", + "name": "multiple", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 8 + }, + "method": { + "id": "60546d62-469a-46d1-bfe5-f15fc3ec9133", + "name": "method", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "Floor" + } + }, + "outputs": { + "value": { + "id": "9b6d4604-0dbc-4fde-9a1f-b619fb7ab5e2", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4472.251829335153, + "y": -287.93974602686 + } + }, + { + "id": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "type": "invocation", + "data": { + "id": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "type": "img_crop", + "label": "Compatibility Cropping Mo8", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "a330b568-df87-4a89-9c69-446912b8346d", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "7eaf8051-b9cb-450c-8f5c-f66470bfdef9", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "x": { + "id": "5dac8c5a-bf78-4704-ac73-6dec8c1d6232", + "name": "x", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "y": { + "id": "b1d96577-44a5-4581-abb4-3b0b91a97ecd", + "name": "y", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "width": { + "id": "a12ab043-5ccc-424c-9df9-39c30b582270", + "name": "width", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + }, + "height": { + "id": "87c6f9ad-a0ee-4b11-8491-d07496cefa39", + "name": "height", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 512 + } + }, + "outputs": { + "image": { + "id": "f535c601-fc54-46c5-9264-0f8554d1cf30", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "48db9864-5b3b-4a90-a42c-e5926a9c4008", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "341f6b31-2497-47e7-8e4e-b2b011103527", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4470.138475621539, + "y": -201.36850691108262 + } + }, + { + "id": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "type": "invocation", + "data": { + "id": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "type": "unsharp_mask", + "label": "Sharpening", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.2.0", + "inputs": { + "metadata": { + "id": "1ee3a7cd-8b35-46c0-b73b-00a85e618608", + "name": "metadata", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "MetadataField" + } + }, + "image": { + "id": "2a456cd8-5638-4548-9d8b-6c9cc5bb5ce3", + "name": "image", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "radius": { + "id": "9dc1071f-4a6d-42d5-94dd-8ca581cfc9aa", + "name": "radius", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 2 + }, + "strength": { + "id": "8b690a35-2708-42f3-9c32-46ef27ce7201", + "name": "strength", + "fieldKind": "input", + "label": "Sharpen Strength", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 50 + } + }, + "outputs": { + "image": { + "id": "8e038f60-d858-44c4-a168-3ce5f3ac3c65", + "name": "image", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "ImageField" + } + }, + "width": { + "id": "6205ee60-6b6b-4e6c-b2a9-cb381fc8d22c", + "name": "width", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + }, + "height": { + "id": "cbee91bd-31f6-45d5-958e-269c69da8330", + "name": "height", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -2904.1636287554056, + "y": -339.7161193204281 + } + }, + { + "id": "157d5318-fbc1-43e5-9ed4-5bbeda0594b0", + "type": "invocation", + "data": { + "id": "157d5318-fbc1-43e5-9ed4-5bbeda0594b0", + "type": "float_math", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "operation": { + "id": "ba14e021-7ed4-4f56-ace4-db33f8bc1d8a", + "name": "operation", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "SUB" + }, + "a": { + "id": "bc672f7a-bee1-4610-bd1a-4f207615ca87", + "name": "a", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.8 + }, + "b": { + "id": "599ffa9a-6431-438d-a63c-c8bec80f3174", + "name": "b", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + } + }, + "outputs": { + "value": { + "id": "474b602a-dd21-4df9-9d48-5e325a4e4a01", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4009.026283214496, + "y": -574.9200068395512 + } + }, + { + "id": "43515ab9-b46b-47db-bb46-7e0273c01d1a", + "type": "invocation", + "data": { + "id": "43515ab9-b46b-47db-bb46-7e0273c01d1a", + "type": "rand_int", + "label": "", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": false, + "version": "1.0.0", + "inputs": { + "low": { + "id": "c9a6b1f3-f809-4fbe-9858-43e4e0b77861", + "name": "low", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 0 + }, + "high": { + "id": "daa00853-0039-4849-9cc3-5975002df5d4", + "name": "high", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 2147483647 + } + }, + "outputs": { + "value": { + "id": "80187504-b76e-4735-bf4f-b02ecd398678", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -3658.0647708234524, + "y": -136.19433892512953 + } + }, + { + "id": "e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb", + "type": "invocation", + "data": { + "id": "e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb", + "type": "float_to_int", + "label": "Multiple Check", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "value": { + "id": "1554add4-fb98-4d55-a56c-96f269b70bd8", + "name": "value", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0 + }, + "multiple": { + "id": "62dd31fb-ca03-4c64-9031-b7750effa58b", + "name": "multiple", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + }, + "value": 8 + }, + "method": { + "id": "b4ed9dcf-16a7-4bc4-83e6-94b80c7b1d77", + "name": "method", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "Nearest" + } + }, + "outputs": { + "value": { + "id": "ba1b7bcc-ca53-4ebe-992d-378373a16f2d", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "IntegerField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4092.2410416963758, + "y": -180.31086509172079 + } + }, + { + "id": "f87a3783-ac5c-43f8-8f97-6688a2aefba5", + "type": "invocation", + "data": { + "id": "f87a3783-ac5c-43f8-8f97-6688a2aefba5", + "type": "float_math", + "label": "Pixel Summation", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "operation": { + "id": "76f062dc-c925-40ae-bd00-63be99b295b6", + "name": "operation", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "ADD" + }, + "a": { + "id": "a5cc821b-7978-4ad9-91b3-1ae45f650d87", + "name": "a", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "b": { + "id": "2cad036c-73ed-4ce3-b9aa-7b21b993f35b", + "name": "b", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + } + }, + "outputs": { + "value": { + "id": "20e1d294-cc54-46fb-9d6f-3105596e97a0", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4096.902679890686, + "y": -279.75914657034684 + } + }, + { + "id": "d62d4d15-e03a-4c10-86ba-3e58da98d2a4", + "type": "invocation", + "data": { + "id": "d62d4d15-e03a-4c10-86ba-3e58da98d2a4", + "type": "float_math", + "label": "Overlap Calc", + "isOpen": false, + "notes": "", + "isIntermediate": true, + "useCache": true, + "version": "1.0.0", + "inputs": { + "operation": { + "id": "5813a0ec-13a9-4494-82de-3c1b04d31271", + "name": "operation", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "EnumField" + }, + "value": "MUL" + }, + "a": { + "id": "2f807176-2cf2-4abd-b776-8ac048bb76bd", + "name": "a", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 1 + }, + "b": { + "id": "ee51fcda-bc3c-457c-80bd-343075754ddb", + "name": "b", + "fieldKind": "input", + "label": "", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + }, + "value": 0.075 + } + }, + "outputs": { + "value": { + "id": "5c4cb142-d8fe-45c8-909b-121883e067b0", + "name": "value", + "fieldKind": "output", + "type": { + "isCollection": false, + "isCollectionOrScalar": false, + "name": "FloatField" + } + } + } + }, + "width": 320, + "height": 32, + "position": { + "x": -4095.348800492582, + "y": -230.03500583103383 + } + } + ], + "edges": [ + { + "id": "3f99d25c-6b43-44ec-a61a-c7ff91712621-338b883c-3728-4f18-b3a6-6e7190c2f850-collapsed", + "source": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "target": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "type": "collapsed" + }, + { + "id": "36d25df7-6408-442b-89e2-b9aba11a72c3-3f99d25c-6b43-44ec-a61a-c7ff91712621-collapsed", + "source": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "target": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "type": "collapsed" + }, + { + "id": "b875cae6-d8a3-4fdc-b969-4d53cbd03f9a-157d5318-fbc1-43e5-9ed4-5bbeda0594b0-collapsed", + "source": "b875cae6-d8a3-4fdc-b969-4d53cbd03f9a", + "target": "157d5318-fbc1-43e5-9ed4-5bbeda0594b0", + "type": "collapsed" + }, + { + "id": "fad15012-0787-43a8-99dd-27f1518b5bc7-b3513fed-ed42-408d-b382-128fdb0de523-collapsed", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "b3513fed-ed42-408d-b382-128fdb0de523", + "type": "collapsed" + }, + { + "id": "fad15012-0787-43a8-99dd-27f1518b5bc7-36d25df7-6408-442b-89e2-b9aba11a72c3-collapsed", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "collapsed" + }, + { + "id": "fad15012-0787-43a8-99dd-27f1518b5bc7-1f86c8bf-06f9-4e28-abee-02f46f445ac4-collapsed", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "collapsed" + }, + { + "id": "86fce904-9dc2-466f-837a-92fe15969b51-fad15012-0787-43a8-99dd-27f1518b5bc7-collapsed", + "source": "86fce904-9dc2-466f-837a-92fe15969b51", + "target": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "type": "collapsed" + }, + { + "id": "23546dd5-a0ec-4842-9ad0-3857899b607a-fad15012-0787-43a8-99dd-27f1518b5bc7-collapsed", + "source": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "target": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "type": "collapsed" + }, + { + "id": "1f86c8bf-06f9-4e28-abee-02f46f445ac4-40de95ee-ebb5-43f7-a31a-299e76c8a5d5-collapsed", + "source": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "target": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5", + "type": "collapsed" + }, + { + "id": "86fce904-9dc2-466f-837a-92fe15969b51-1f86c8bf-06f9-4e28-abee-02f46f445ac4-collapsed", + "source": "86fce904-9dc2-466f-837a-92fe15969b51", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "collapsed" + }, + { + "id": "e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb-1f86c8bf-06f9-4e28-abee-02f46f445ac4-collapsed", + "source": "e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "collapsed" + }, + { + "id": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea-23546dd5-a0ec-4842-9ad0-3857899b607a-collapsed", + "source": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "target": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "type": "collapsed" + }, + { + "id": "7dbb756b-7d79-431c-a46d-d8f7b082c127-23546dd5-a0ec-4842-9ad0-3857899b607a-collapsed", + "source": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "target": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "type": "collapsed" + }, + { + "id": "23546dd5-a0ec-4842-9ad0-3857899b607a-f87a3783-ac5c-43f8-8f97-6688a2aefba5-collapsed", + "source": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "target": "f87a3783-ac5c-43f8-8f97-6688a2aefba5", + "type": "collapsed" + }, + { + "id": "f87a3783-ac5c-43f8-8f97-6688a2aefba5-d62d4d15-e03a-4c10-86ba-3e58da98d2a4-collapsed", + "source": "f87a3783-ac5c-43f8-8f97-6688a2aefba5", + "target": "d62d4d15-e03a-4c10-86ba-3e58da98d2a4", + "type": "collapsed" + }, + { + "id": "d62d4d15-e03a-4c10-86ba-3e58da98d2a4-e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb-collapsed", + "source": "d62d4d15-e03a-4c10-86ba-3e58da98d2a4", + "target": "e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb", + "type": "collapsed" + }, + { + "id": "b3513fed-ed42-408d-b382-128fdb0de523-54dd79ec-fb65-45a6-a5d7-f20109f88b49-collapsed", + "source": "b3513fed-ed42-408d-b382-128fdb0de523", + "target": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "collapsed" + }, + { + "id": "43515ab9-b46b-47db-bb46-7e0273c01d1a-b3513fed-ed42-408d-b382-128fdb0de523-collapsed", + "source": "43515ab9-b46b-47db-bb46-7e0273c01d1a", + "target": "b3513fed-ed42-408d-b382-128fdb0de523", + "type": "collapsed" + }, + { + "id": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b-54dd79ec-fb65-45a6-a5d7-f20109f88b49-collapsed", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "collapsed" + }, + { + "id": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5-857eb5ce-8e5e-4bda-8a33-3e52e57db67b-collapsed", + "source": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5", + "target": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "type": "collapsed" + }, + { + "id": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b-36d25df7-6408-442b-89e2-b9aba11a72c3-collapsed", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "collapsed" + }, + { + "id": "reactflow__edge-fad15012-0787-43a8-99dd-27f1518b5bc7width-b3513fed-ed42-408d-b382-128fdb0de523width", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "b3513fed-ed42-408d-b382-128fdb0de523", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-fad15012-0787-43a8-99dd-27f1518b5bc7height-b3513fed-ed42-408d-b382-128fdb0de523height", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "b3513fed-ed42-408d-b382-128fdb0de523", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-40de95ee-ebb5-43f7-a31a-299e76c8a5d5item-857eb5ce-8e5e-4bda-8a33-3e52e57db67btile", + "source": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5", + "target": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "type": "default", + "sourceHandle": "item", + "targetHandle": "tile" + }, + { + "id": "reactflow__edge-fad15012-0787-43a8-99dd-27f1518b5bc7image-36d25df7-6408-442b-89e2-b9aba11a72c3image", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bcoords_top-36d25df7-6408-442b-89e2-b9aba11a72c3y", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "default", + "sourceHandle": "coords_top", + "targetHandle": "y" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bcoords_left-36d25df7-6408-442b-89e2-b9aba11a72c3x", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "default", + "sourceHandle": "coords_left", + "targetHandle": "x" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bwidth-36d25df7-6408-442b-89e2-b9aba11a72c3width", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bheight-36d25df7-6408-442b-89e2-b9aba11a72c3height", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-9b2d8c58-ce8f-4162-a5a1-48de854040d6conditioning-1011539e-85de-4e02-a003-0b22358491b8positive_conditioning", + "source": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-947c3f88-0305-4695-8355-df4abac64b1cconditioning-1011539e-85de-4e02-a003-0b22358491b8negative_conditioning", + "source": "947c3f88-0305-4695-8355-df4abac64b1c", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-338b883c-3728-4f18-b3a6-6e7190c2f850latents-1011539e-85de-4e02-a003-0b22358491b8latents", + "source": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-1011539e-85de-4e02-a003-0b22358491b8latents-b76fe66f-7884-43ad-b72c-fadc81d7a73clatents", + "source": "1011539e-85de-4e02-a003-0b22358491b8", + "target": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-b76fe66f-7884-43ad-b72c-fadc81d7a73cimage-ab6f5dda-4b60-4ddf-99f2-f61fb5937527image", + "source": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", + "target": "ab6f5dda-4b60-4ddf-99f2-f61fb5937527", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-40de95ee-ebb5-43f7-a31a-299e76c8a5d5item-ab6f5dda-4b60-4ddf-99f2-f61fb5937527tile", + "source": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5", + "target": "ab6f5dda-4b60-4ddf-99f2-f61fb5937527", + "type": "default", + "sourceHandle": "item", + "targetHandle": "tile" + }, + { + "id": "reactflow__edge-ab6f5dda-4b60-4ddf-99f2-f61fb5937527tile_with_image-ca0d20d1-918f-44e0-8fc3-4704dc41f4daitem", + "source": "ab6f5dda-4b60-4ddf-99f2-f61fb5937527", + "target": "ca0d20d1-918f-44e0-8fc3-4704dc41f4da", + "type": "default", + "sourceHandle": "tile_with_image", + "targetHandle": "item" + }, + { + "id": "reactflow__edge-ca0d20d1-918f-44e0-8fc3-4704dc41f4dacollection-7cedc866-2095-4bda-aa15-23f15d6273cbtiles_with_images", + "source": "ca0d20d1-918f-44e0-8fc3-4704dc41f4da", + "target": "7cedc866-2095-4bda-aa15-23f15d6273cb", + "type": "default", + "sourceHandle": "collection", + "targetHandle": "tiles_with_images" + }, + { + "id": "reactflow__edge-7cedc866-2095-4bda-aa15-23f15d6273cbimage-234192f1-ee96-49be-a5d1-bad4c52a9012image", + "source": "7cedc866-2095-4bda-aa15-23f15d6273cb", + "target": "234192f1-ee96-49be-a5d1-bad4c52a9012", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-b3513fed-ed42-408d-b382-128fdb0de523noise-54dd79ec-fb65-45a6-a5d7-f20109f88b49latents", + "source": "b3513fed-ed42-408d-b382-128fdb0de523", + "target": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "default", + "sourceHandle": "noise", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bwidth-54dd79ec-fb65-45a6-a5d7-f20109f88b49width", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "default", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bheight-54dd79ec-fb65-45a6-a5d7-f20109f88b49height", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "default", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bcoords_left-54dd79ec-fb65-45a6-a5d7-f20109f88b49x", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "default", + "sourceHandle": "coords_left", + "targetHandle": "x" + }, + { + "id": "reactflow__edge-857eb5ce-8e5e-4bda-8a33-3e52e57db67bcoords_top-54dd79ec-fb65-45a6-a5d7-f20109f88b49y", + "source": "857eb5ce-8e5e-4bda-8a33-3e52e57db67b", + "target": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "type": "default", + "sourceHandle": "coords_top", + "targetHandle": "y" + }, + { + "id": "reactflow__edge-54dd79ec-fb65-45a6-a5d7-f20109f88b49latents-1011539e-85de-4e02-a003-0b22358491b8noise", + "source": "54dd79ec-fb65-45a6-a5d7-f20109f88b49", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "latents", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-287f134f-da8d-41d1-884e-5940e8f7b816ip_adapter-1011539e-85de-4e02-a003-0b22358491b8ip_adapter", + "source": "287f134f-da8d-41d1-884e-5940e8f7b816", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "ip_adapter", + "targetHandle": "ip_adapter" + }, + { + "id": "reactflow__edge-36d25df7-6408-442b-89e2-b9aba11a72c3image-287f134f-da8d-41d1-884e-5940e8f7b816image", + "source": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "target": "287f134f-da8d-41d1-884e-5940e8f7b816", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-1f86c8bf-06f9-4e28-abee-02f46f445ac4tiles-40de95ee-ebb5-43f7-a31a-299e76c8a5d5collection", + "source": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "target": "40de95ee-ebb5-43f7-a31a-299e76c8a5d5", + "type": "default", + "sourceHandle": "tiles", + "targetHandle": "collection" + }, + { + "id": "reactflow__edge-fad15012-0787-43a8-99dd-27f1518b5bc7width-1f86c8bf-06f9-4e28-abee-02f46f445ac4image_width", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "default", + "sourceHandle": "width", + "targetHandle": "image_width" + }, + { + "id": "reactflow__edge-fad15012-0787-43a8-99dd-27f1518b5bc7height-1f86c8bf-06f9-4e28-abee-02f46f445ac4image_height", + "source": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "default", + "sourceHandle": "height", + "targetHandle": "image_height" + }, + { + "id": "reactflow__edge-86fce904-9dc2-466f-837a-92fe15969b51value-fad15012-0787-43a8-99dd-27f1518b5bc7scale_factor", + "source": "86fce904-9dc2-466f-837a-92fe15969b51", + "target": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "type": "default", + "sourceHandle": "value", + "targetHandle": "scale_factor" + }, + { + "id": "reactflow__edge-86fce904-9dc2-466f-837a-92fe15969b51value-1f86c8bf-06f9-4e28-abee-02f46f445ac4num_tiles_x", + "source": "86fce904-9dc2-466f-837a-92fe15969b51", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "default", + "sourceHandle": "value", + "targetHandle": "num_tiles_x" + }, + { + "id": "reactflow__edge-86fce904-9dc2-466f-837a-92fe15969b51value-1f86c8bf-06f9-4e28-abee-02f46f445ac4num_tiles_y", + "source": "86fce904-9dc2-466f-837a-92fe15969b51", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "default", + "sourceHandle": "value", + "targetHandle": "num_tiles_y" + }, + { + "id": "reactflow__edge-2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5clip-9b2d8c58-ce8f-4162-a5a1-48de854040d6clip", + "source": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "target": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5clip-947c3f88-0305-4695-8355-df4abac64b1cclip", + "source": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "target": "947c3f88-0305-4695-8355-df4abac64b1c", + "type": "default", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-5ca87ace-edf9-49c7-a424-cd42416b86a7width-f5d9bf3b-2646-4b17-9894-20fd2b4218eavalue", + "source": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "target": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "type": "default", + "sourceHandle": "width", + "targetHandle": "value" + }, + { + "id": "reactflow__edge-5ca87ace-edf9-49c7-a424-cd42416b86a7height-7dbb756b-7d79-431c-a46d-d8f7b082c127value", + "source": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "target": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "type": "default", + "sourceHandle": "height", + "targetHandle": "value" + }, + { + "id": "reactflow__edge-f5d9bf3b-2646-4b17-9894-20fd2b4218eavalue-23546dd5-a0ec-4842-9ad0-3857899b607awidth", + "source": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "target": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "type": "default", + "sourceHandle": "value", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-7dbb756b-7d79-431c-a46d-d8f7b082c127value-23546dd5-a0ec-4842-9ad0-3857899b607aheight", + "source": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "target": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "type": "default", + "sourceHandle": "value", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-23546dd5-a0ec-4842-9ad0-3857899b607aimage-fad15012-0787-43a8-99dd-27f1518b5bc7image", + "source": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "target": "fad15012-0787-43a8-99dd-27f1518b5bc7", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-5ca87ace-edf9-49c7-a424-cd42416b86a7image-23546dd5-a0ec-4842-9ad0-3857899b607aimage", + "source": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "target": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-d334f2da-016a-4524-9911-bdab85546888control-1011539e-85de-4e02-a003-0b22358491b8control", + "source": "d334f2da-016a-4524-9911-bdab85546888", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "control", + "targetHandle": "control" + }, + { + "id": "reactflow__edge-36d25df7-6408-442b-89e2-b9aba11a72c3image-3f99d25c-6b43-44ec-a61a-c7ff91712621image", + "source": "36d25df7-6408-442b-89e2-b9aba11a72c3", + "target": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-3f99d25c-6b43-44ec-a61a-c7ff91712621image-338b883c-3728-4f18-b3a6-6e7190c2f850image", + "source": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "target": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-3f99d25c-6b43-44ec-a61a-c7ff91712621image-d334f2da-016a-4524-9911-bdab85546888image", + "source": "3f99d25c-6b43-44ec-a61a-c7ff91712621", + "target": "d334f2da-016a-4524-9911-bdab85546888", + "type": "default", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-b875cae6-d8a3-4fdc-b969-4d53cbd03f9avalue-157d5318-fbc1-43e5-9ed4-5bbeda0594b0b", + "source": "b875cae6-d8a3-4fdc-b969-4d53cbd03f9a", + "target": "157d5318-fbc1-43e5-9ed4-5bbeda0594b0", + "type": "default", + "sourceHandle": "value", + "targetHandle": "b" + }, + { + "id": "reactflow__edge-157d5318-fbc1-43e5-9ed4-5bbeda0594b0value-1011539e-85de-4e02-a003-0b22358491b8denoising_start", + "source": "157d5318-fbc1-43e5-9ed4-5bbeda0594b0", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "value", + "targetHandle": "denoising_start" + }, + { + "id": "reactflow__edge-43515ab9-b46b-47db-bb46-7e0273c01d1avalue-b3513fed-ed42-408d-b382-128fdb0de523seed", + "source": "43515ab9-b46b-47db-bb46-7e0273c01d1a", + "target": "b3513fed-ed42-408d-b382-128fdb0de523", + "type": "default", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bbvalue-1f86c8bf-06f9-4e28-abee-02f46f445ac4overlap", + "source": "e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb", + "target": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", + "type": "default", + "sourceHandle": "value", + "targetHandle": "overlap" + }, + { + "id": "reactflow__edge-23546dd5-a0ec-4842-9ad0-3857899b607awidth-f87a3783-ac5c-43f8-8f97-6688a2aefba5a", + "source": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "target": "f87a3783-ac5c-43f8-8f97-6688a2aefba5", + "type": "default", + "sourceHandle": "width", + "targetHandle": "a" + }, + { + "id": "reactflow__edge-23546dd5-a0ec-4842-9ad0-3857899b607aheight-f87a3783-ac5c-43f8-8f97-6688a2aefba5b", + "source": "23546dd5-a0ec-4842-9ad0-3857899b607a", + "target": "f87a3783-ac5c-43f8-8f97-6688a2aefba5", + "type": "default", + "sourceHandle": "height", + "targetHandle": "b" + }, + { + "id": "reactflow__edge-f87a3783-ac5c-43f8-8f97-6688a2aefba5value-d62d4d15-e03a-4c10-86ba-3e58da98d2a4a", + "source": "f87a3783-ac5c-43f8-8f97-6688a2aefba5", + "target": "d62d4d15-e03a-4c10-86ba-3e58da98d2a4", + "type": "default", + "sourceHandle": "value", + "targetHandle": "a" + }, + { + "id": "reactflow__edge-d62d4d15-e03a-4c10-86ba-3e58da98d2a4value-e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bbvalue", + "source": "d62d4d15-e03a-4c10-86ba-3e58da98d2a4", + "target": "e9b5a7e1-6e8a-4b95-aa7c-c92ba15080bb", + "type": "default", + "sourceHandle": "value", + "targetHandle": "value" + }, + { + "id": "reactflow__edge-2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5vae-b76fe66f-7884-43ad-b72c-fadc81d7a73cvae", + "source": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "target": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5vae-338b883c-3728-4f18-b3a6-6e7190c2f850vae", + "source": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "target": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "type": "default", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5unet-1011539e-85de-4e02-a003-0b22358491b8unet", + "source": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "target": "1011539e-85de-4e02-a003-0b22358491b8", + "type": "default", + "sourceHandle": "unet", + "targetHandle": "unet" + } + ] +} \ No newline at end of file From d8eb58cd58b3366804117d250721fa054671106a Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Fri, 29 Dec 2023 13:15:37 +1100 Subject: [PATCH 259/515] Add frontend build --- invokeai/frontend/web/.gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/invokeai/frontend/web/.gitignore b/invokeai/frontend/web/.gitignore index 402095f4be..4a44b2ed02 100644 --- a/invokeai/frontend/web/.gitignore +++ b/invokeai/frontend/web/.gitignore @@ -9,8 +9,8 @@ lerna-debug.log* node_modules # We want to distribute the repo -dist -dist/** +# dist +# dist/** dist-ssr *.local From fd074abdc4805522329368cd1a97364f69cdbcba Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Fri, 29 Dec 2023 13:16:23 +1100 Subject: [PATCH 260/515] Add frontend build --- .../frontend/web/dist/assets/App-6125620a.css | 1 + .../frontend/web/dist/assets/App-fe9505fe.js | 169 ++ .../dist/assets/MantineProvider-44862fff.js | 1 + .../assets/ThemeLocaleProvider-0667edb8.css | 9 + .../assets/ThemeLocaleProvider-687f0135.js | 280 +++ .../web/dist/assets/favicon-0d253ced.ico | Bin 0 -> 118734 bytes .../web/dist/assets/index-fbe0e055.js | 155 ++ ...er-cyrillic-ext-wght-normal-1c3007b8.woff2 | Bin 0 -> 27284 bytes .../inter-cyrillic-wght-normal-eba94878.woff2 | Bin 0 -> 17600 bytes ...inter-greek-ext-wght-normal-81f77e51.woff2 | Bin 0 -> 12732 bytes .../inter-greek-wght-normal-d92c6cbc.woff2 | Bin 0 -> 22480 bytes ...inter-latin-ext-wght-normal-a2bfd9fe.woff2 | Bin 0 -> 79940 bytes .../inter-latin-wght-normal-88df0b5a.woff2 | Bin 0 -> 46704 bytes ...nter-vietnamese-wght-normal-15df7612.woff2 | Bin 0 -> 10540 bytes .../web/dist/assets/logo-13003d72.png | Bin 0 -> 44115 bytes invokeai/frontend/web/dist/index.html | 25 + invokeai/frontend/web/dist/locales/ar.json | 504 +++++ invokeai/frontend/web/dist/locales/de.json | 1012 ++++++++++ invokeai/frontend/web/dist/locales/en.json | 1662 ++++++++++++++++ invokeai/frontend/web/dist/locales/es.json | 732 ++++++++ invokeai/frontend/web/dist/locales/fi.json | 114 ++ invokeai/frontend/web/dist/locales/fr.json | 531 ++++++ invokeai/frontend/web/dist/locales/he.json | 575 ++++++ invokeai/frontend/web/dist/locales/it.json | 1645 ++++++++++++++++ invokeai/frontend/web/dist/locales/ja.json | 832 +++++++++ invokeai/frontend/web/dist/locales/ko.json | 920 +++++++++ invokeai/frontend/web/dist/locales/mn.json | 1 + invokeai/frontend/web/dist/locales/nl.json | 1504 +++++++++++++++ invokeai/frontend/web/dist/locales/pl.json | 461 +++++ invokeai/frontend/web/dist/locales/pt.json | 602 ++++++ invokeai/frontend/web/dist/locales/pt_BR.json | 577 ++++++ invokeai/frontend/web/dist/locales/ro.json | 1 + invokeai/frontend/web/dist/locales/ru.json | 1652 ++++++++++++++++ invokeai/frontend/web/dist/locales/sv.json | 246 +++ invokeai/frontend/web/dist/locales/tr.json | 58 + invokeai/frontend/web/dist/locales/uk.json | 619 ++++++ invokeai/frontend/web/dist/locales/vi.json | 1 + invokeai/frontend/web/dist/locales/zh_CN.json | 1663 +++++++++++++++++ .../frontend/web/dist/locales/zh_Hant.json | 53 + 39 files changed, 16605 insertions(+) create mode 100644 invokeai/frontend/web/dist/assets/App-6125620a.css create mode 100644 invokeai/frontend/web/dist/assets/App-fe9505fe.js create mode 100644 invokeai/frontend/web/dist/assets/MantineProvider-44862fff.js create mode 100644 invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css create mode 100644 invokeai/frontend/web/dist/assets/ThemeLocaleProvider-687f0135.js create mode 100644 invokeai/frontend/web/dist/assets/favicon-0d253ced.ico create mode 100644 invokeai/frontend/web/dist/assets/index-fbe0e055.js create mode 100644 invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-eba94878.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-81f77e51.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-latin-wght-normal-88df0b5a.woff2 create mode 100644 invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 create mode 100644 invokeai/frontend/web/dist/assets/logo-13003d72.png create mode 100644 invokeai/frontend/web/dist/index.html create mode 100644 invokeai/frontend/web/dist/locales/ar.json create mode 100644 invokeai/frontend/web/dist/locales/de.json create mode 100644 invokeai/frontend/web/dist/locales/en.json create mode 100644 invokeai/frontend/web/dist/locales/es.json create mode 100644 invokeai/frontend/web/dist/locales/fi.json create mode 100644 invokeai/frontend/web/dist/locales/fr.json create mode 100644 invokeai/frontend/web/dist/locales/he.json create mode 100644 invokeai/frontend/web/dist/locales/it.json create mode 100644 invokeai/frontend/web/dist/locales/ja.json create mode 100644 invokeai/frontend/web/dist/locales/ko.json create mode 100644 invokeai/frontend/web/dist/locales/mn.json create mode 100644 invokeai/frontend/web/dist/locales/nl.json create mode 100644 invokeai/frontend/web/dist/locales/pl.json create mode 100644 invokeai/frontend/web/dist/locales/pt.json create mode 100644 invokeai/frontend/web/dist/locales/pt_BR.json create mode 100644 invokeai/frontend/web/dist/locales/ro.json create mode 100644 invokeai/frontend/web/dist/locales/ru.json create mode 100644 invokeai/frontend/web/dist/locales/sv.json create mode 100644 invokeai/frontend/web/dist/locales/tr.json create mode 100644 invokeai/frontend/web/dist/locales/uk.json create mode 100644 invokeai/frontend/web/dist/locales/vi.json create mode 100644 invokeai/frontend/web/dist/locales/zh_CN.json create mode 100644 invokeai/frontend/web/dist/locales/zh_Hant.json diff --git a/invokeai/frontend/web/dist/assets/App-6125620a.css b/invokeai/frontend/web/dist/assets/App-6125620a.css new file mode 100644 index 0000000000..b231132262 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/App-6125620a.css @@ -0,0 +1 @@ +.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;cursor:-webkit-grab;cursor:grab}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow .react-flow__edges{pointer-events:none;overflow:visible}.react-flow__edge-path,.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.react-flow__edge{pointer-events:visibleStroke;cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;-webkit-animation:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge:focus .react-flow__edge-path,.react-flow__edge:focus-visible .react-flow__edge-path{stroke:#555}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-textbg{fill:#fff}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connectionline{z-index:1001}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:-webkit-grab;cursor:grab}.react-flow__node.dragging{cursor:-webkit-grabbing;cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:-webkit-grab;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background:#1a192b;border:1px solid white;border-radius:100%}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:-4px;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{top:50%;left:-4px;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:rgba(255,255,255,.5);padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-default,.react-flow__node-input,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:3px;width:150px;font-size:12px;color:#222;text-align:center;border-width:1px;border-style:solid;border-color:#1a192b;background-color:#fff}.react-flow__node-default.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background-color:#f0f0f040}.react-flow__nodesselection-rect,.react-flow__selection{background:rgba(0,89,220,.08);border:1px dotted rgba(0,89,220,.8)}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:0 0 2px 1px #00000014}.react-flow__controls-button{border:none;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;display:flex;justify-content:center;align-items:center;width:16px;height:16px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:5px}.react-flow__controls-button:hover{background:#f4f4f4}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__minimap{background-color:#fff}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:#3367d9;transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:#3367d9;border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%} diff --git a/invokeai/frontend/web/dist/assets/App-fe9505fe.js b/invokeai/frontend/web/dist/assets/App-fe9505fe.js new file mode 100644 index 0000000000..b747b33791 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/App-fe9505fe.js @@ -0,0 +1,169 @@ +import{a as Vc,b as uI,S as dI,c as fI,d as pI,e as R1,f as mI,i as A1,g as fR,h as hI,j as gI,k as pR,l as mx,m as mR,n as hx,o as hR,p as gR,r as i,R as B,q as gx,u as xm,s as vR,t as bR,v as xR,z as yR,P as CR,w as vx,x as wR,y as SR,A as kR,B as jR,C as _e,D as a,I as An,E as _R,F as IR,G as PR,H as Kt,J as je,K as et,L as gn,M as ze,N as zd,O as hr,Q as Mn,T as Xn,U as cn,V as va,W as ml,X as ut,Y as wo,Z as dc,_ as ba,$ as xa,a0 as Uh,a1 as bx,a2 as Bd,a3 as bn,a4 as Rw,a5 as ER,a6 as vI,a7 as T1,a8 as Hd,a9 as Uc,aa as MR,ab as bI,ac as xI,ad as yI,ae as Zo,af as OR,ag as fe,ah as pe,ai as H,aj as DR,ak as Aw,al as RR,am as AR,an as TR,ao as hl,ap as te,aq as NR,ar as lt,as as rn,at as W,au as Ie,av as $,aw as or,ax as tr,ay as CI,az as $R,aA as LR,aB as FR,aC as zR,aD as Jr,aE as xx,aF as ya,aG as zr,aH as Wd,aI as BR,aJ as HR,aK as Tw,aL as yx,aM as be,aN as Jo,aO as WR,aP as wI,aQ as SI,aR as Nw,aS as VR,aT as UR,aU as GR,aV as Ca,aW as Cx,aX as KR,aY as qR,aZ as wt,a_ as XR,a$ as QR,b0 as Ls,b1 as kI,b2 as jI,b3 as Gh,b4 as YR,b5 as $w,b6 as _I,b7 as ZR,b8 as JR,b9 as eA,ba as tA,bb as nA,bc as II,bd as rA,be as oA,bf as sA,bg as aA,bh as lA,bi as Yl,bj as iA,bk as Br,bl as cA,bm as uA,bn as dA,bo as Lw,bp as fA,bq as pA,br as Ya,bs as PI,bt as EI,bu as Kh,bv as wx,bw as Sx,bx as jo,by as MI,bz as mA,bA as Zl,bB as Ku,bC as Fw,bD as hA,bE as gA,bF as kx,bG as vA,bH as zw,bI as OI,bJ as bA,bK as xA,bL as Bw,bM as DI,bN as yA,bO as qh,bP as jx,bQ as _x,bR as Ix,bS as RI,bT as Xh,bU as AI,bV as CA,bW as Px,bX as bp,bY as xp,bZ as Tu,b_ as _v,b$ as nd,c0 as rd,c1 as od,c2 as sd,c3 as Hw,c4 as ym,c5 as Iv,c6 as Cm,c7 as Ww,c8 as wm,c9 as Vw,ca as N1,cb as Pv,cc as $1,cd as Uw,ce as nc,cf as Ev,cg as Sm,ch as Mv,ci as Za,cj as Ov,ck as Ja,cl as yp,cm as km,cn as Gw,co as L1,cp as jm,cq as Kw,cr as F1,cs as Vd,ct as TI,cu as wA,cv as qw,cw as Ex,cx as _m,cy as NI,cz as jr,cA as Nu,cB as Ti,cC as Mx,cD as $I,cE as Cp,cF as Ox,cG as SA,cH as LI,cI as Dv,cJ as Qh,cK as kA,cL as FI,cM as z1,cN as B1,cO as zI,cP as jA,cQ as H1,cR as _A,cS as W1,cT as IA,cU as V1,cV as PA,cW as EA,cX as Dx,cY as BI,cZ as Js,c_ as HI,c$ as ia,d0 as WI,d1 as MA,d2 as $u,d3 as Xw,d4 as OA,d5 as DA,d6 as Qw,d7 as Rx,d8 as VI,d9 as Ax,da as Tx,db as UI,dc as Jt,dd as RA,de as qn,df as AA,dg as Gc,dh as Yh,di as Nx,dj as GI,dk as KI,dl as TA,dm as NA,dn as $A,dp as Im,dq as qI,dr as $x,ds as XI,dt as LA,du as FA,dv as zA,dw as BA,dx as HA,dy as WA,dz as VA,dA as Yw,dB as Lx,dC as UA,dD as GA,dE as KA,dF as qA,dG as Zh,dH as XA,dI as QA,dJ as YA,dK as ZA,dL as JA,dM as xn,dN as eT,dO as tT,dP as nT,dQ as rT,dR as oT,dS as sT,dT as aT,dU as lT,dV as vd,dW as Zw,dX as as,dY as QI,dZ as iT,d_ as Fx,d$ as cT,e0 as Jw,e1 as uT,e2 as dT,e3 as fT,e4 as pT,e5 as mT,e6 as YI,e7 as hT,e8 as gT,e9 as vT,ea as bT,eb as xT,ec as yT,ed as CT,ee as wT,ef as ST,eg as kT,eh as jT,ei as _T,ej as IT,ek as PT,el as ET,em as MT,en as OT,eo as DT,ep as RT,eq as AT,er as TT,es as NT,et as $T,eu as LT,ev as FT,ew as zT,ex as BT,ey as HT,ez as WT,eA as VT,eB as UT,eC as GT,eD as KT,eE as qT,eF as XT,eG as ZI,eH as QT,eI as YT,eJ as ZT,eK as JT,eL as e9,eM as t9,eN as n9,eO as JI,eP as r9,eQ as o9,eR as s9,eS,eT as wp,eU as Ao,eV as a9,eW as l9,eX as i9,eY as c9,eZ as u9,e_ as d9,e$ as es,f0 as f9,f1 as p9,f2 as m9,f3 as h9,f4 as g9,f5 as v9,f6 as b9,f7 as x9,f8 as y9,f9 as C9,fa as w9,fb as S9,fc as k9,fd as j9,fe as _9,ff as I9,fg as P9,fh as E9,fi as M9,fj as O9,fk as D9,fl as R9,fm as A9,fn as T9,fo as N9,fp as tS,fq as $9,fr as Xo,fs as bd,ft as kr,fu as L9,fv as F9,fw as e3,fx as t3,fy as z9,fz as nS,fA as B9,fB as rS,fC as oS,fD as sS,fE as H9,fF as W9,fG as aS,fH as lS,fI as V9,fJ as U9,fK as Pm,fL as G9,fM as iS,fN as K9,fO as cS,fP as n3,fQ as r3,fR as q9,fS as X9,fT as o3,fU as Q9,fV as Y9,fW as Z9,fX as J9,fY as s3,fZ as a3,f_ as Ud,f$ as l3,g0 as Bl,g1 as i3,g2 as uS,g3 as eN,g4 as tN,g5 as c3,g6 as nN,g7 as rN,g8 as oN,g9 as sN,ga as aN,gb as u3,gc as zx,gd as U1,ge as lN,gf as iN,gg as cN,gh as d3,gi as Bx,gj as f3,gk as uN,gl as Hx,gm as p3,gn as dN,go as ta,gp as fN,gq as m3,gr as Kc,gs as pN,gt as h3,gu as mN,gv as hN,gw as gN,gx as vN,gy as qu,gz as rc,gA as dS,gB as bN,gC as xN,gD as yN,gE as CN,gF as wN,gG as SN,gH as fS,gI as kN,gJ as jN,gK as _N,gL as IN,gM as PN,gN as EN,gO as pS,gP as MN,gQ as ON,gR as DN,gS as RN,gT as AN,gU as TN,gV as NN,gW as $N,gX as LN,gY as FN,gZ as zN,g_ as Fa,g$ as BN,h0 as g3,h1 as v3,h2 as HN,h3 as WN,h4 as VN,h5 as UN,h6 as GN,h7 as KN,h8 as qN,h9 as XN,ha as Gd,hb as QN,hc as YN,hd as ZN,he as JN,hf as e$,hg as t$,hh as n$,hi as r$,hj as Em,hk as b3,hl as Mm,hm as o$,hn as s$,ho as fc,hp as x3,hq as y3,hr as Wx,hs as a$,ht as l$,hu as i$,hv as G1,hw as C3,hx as c$,hy as u$,hz as w3,hA as d$,hB as f$,hC as p$,hD as m$,hE as h$,hF as mS,hG as sm,hH as g$,hI as hS,hJ as v$,hK as Ni,hL as b$,hM as x$,hN as y$,hO as C$,hP as w$,hQ as gS,hR as S$,hS as k$,hT as j$,hU as _$,hV as I$,hW as P$,hX as E$,hY as M$,hZ as Rv,h_ as Av,h$ as Tv,i0 as Sp,i1 as vS,i2 as K1,i3 as bS,i4 as O$,i5 as D$,i6 as S3,i7 as R$,i8 as A$,i9 as T$,ia as N$,ib as $$,ic as L$,id as F$,ie as z$,ig as B$,ih as H$,ii as W$,ij as V$,ik as U$,il as G$,im as K$,io as kp,ip as Nv,iq as q$,ir as X$,is as Q$,it as Y$,iu as Z$,iv as J$,iw as eL,ix as tL,iy as xS,iz as yS,iA as nL,iB as rL,iC as oL,iD as sL}from"./index-fbe0e055.js";import{u as k3,a as wa,b as aL,r as Ae,f as lL,g as CS,c as pt,d as Nn}from"./MantineProvider-44862fff.js";var iL=200;function cL(e,t,n,r){var o=-1,s=fI,l=!0,c=e.length,d=[],f=t.length;if(!c)return d;n&&(t=Vc(t,uI(n))),r?(s=pI,l=!1):t.length>=iL&&(s=R1,l=!1,t=new dI(t));e:for(;++o=120&&m.length>=120)?new dI(l&&m):void 0}m=e[0];var h=-1,g=c[0];e:for(;++h{const{background:y,backgroundColor:x}=s||{},w=l||y||x;return B.createElement("rect",{className:gx(["react-flow__minimap-node",{selected:b},f]),x:t,y:n,rx:m,ry:m,width:r,height:o,fill:w,stroke:c,strokeWidth:d,shapeRendering:h,onClick:g?S=>g(S,e):void 0})};j3.displayName="MiniMapNode";var wL=i.memo(j3);const SL=e=>e.nodeOrigin,kL=e=>e.getNodes().filter(t=>!t.hidden&&t.width&&t.height),$v=e=>e instanceof Function?e:()=>e;function jL({nodeStrokeColor:e="transparent",nodeColor:t="#e2e2e2",nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:o=2,nodeComponent:s=wL,onClick:l}){const c=xm(kL,vx),d=xm(SL),f=$v(t),m=$v(e),h=$v(n),g=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return B.createElement(B.Fragment,null,c.map(b=>{const{x:y,y:x}=vR(b,d).positionAbsolute;return B.createElement(s,{key:b.id,x:y,y:x,width:b.width,height:b.height,style:b.style,selected:b.selected,className:h(b),color:f(b),borderRadius:r,strokeColor:m(b),strokeWidth:o,shapeRendering:g,onClick:l,id:b.id})}))}var _L=i.memo(jL);const IL=200,PL=150,EL=e=>{const t=e.getNodes(),n={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:n,boundingRect:t.length>0?kR(jR(t,e.nodeOrigin),n):n,rfId:e.rfId}},ML="react-flow__minimap-desc";function _3({style:e,className:t,nodeStrokeColor:n="transparent",nodeColor:r="#e2e2e2",nodeClassName:o="",nodeBorderRadius:s=5,nodeStrokeWidth:l=2,nodeComponent:c,maskColor:d="rgb(240, 240, 240, 0.6)",maskStrokeColor:f="none",maskStrokeWidth:m=1,position:h="bottom-right",onClick:g,onNodeClick:b,pannable:y=!1,zoomable:x=!1,ariaLabel:w="React Flow mini map",inversePan:S=!1,zoomStep:j=10,offsetScale:_=5}){const I=bR(),E=i.useRef(null),{boundingRect:M,viewBB:D,rfId:R}=xm(EL,vx),N=(e==null?void 0:e.width)??IL,O=(e==null?void 0:e.height)??PL,T=M.width/N,U=M.height/O,G=Math.max(T,U),q=G*N,Y=G*O,Q=_*G,V=M.x-(q-M.width)/2-Q,se=M.y-(Y-M.height)/2-Q,ee=q+Q*2,le=Y+Q*2,ae=`${ML}-${R}`,ce=i.useRef(0);ce.current=G,i.useEffect(()=>{if(E.current){const A=xR(E.current),L=z=>{const{transform:oe,d3Selection:X,d3Zoom:Z}=I.getState();if(z.sourceEvent.type!=="wheel"||!X||!Z)return;const me=-z.sourceEvent.deltaY*(z.sourceEvent.deltaMode===1?.05:z.sourceEvent.deltaMode?1:.002)*j,ve=oe[2]*Math.pow(2,me);Z.scaleTo(X,ve)},K=z=>{const{transform:oe,d3Selection:X,d3Zoom:Z,translateExtent:me,width:ve,height:de}=I.getState();if(z.sourceEvent.type!=="mousemove"||!X||!Z)return;const ke=ce.current*Math.max(1,oe[2])*(S?-1:1),we={x:oe[0]-z.sourceEvent.movementX*ke,y:oe[1]-z.sourceEvent.movementY*ke},Re=[[0,0],[ve,de]],Qe=wR.translate(we.x,we.y).scale(oe[2]),$e=Z.constrain()(Qe,Re,me);Z.transform(X,$e)},ne=yR().on("zoom",y?K:null).on("zoom.wheel",x?L:null);return A.call(ne),()=>{A.on("zoom",null)}}},[y,x,S,j]);const J=g?A=>{const L=SR(A);g(A,{x:L[0],y:L[1]})}:void 0,re=b?(A,L)=>{const K=I.getState().nodeInternals.get(L);b(A,K)}:void 0;return B.createElement(CR,{position:h,style:e,className:gx(["react-flow__minimap",t]),"data-testid":"rf__minimap"},B.createElement("svg",{width:N,height:O,viewBox:`${V} ${se} ${ee} ${le}`,role:"img","aria-labelledby":ae,ref:E,onClick:J},w&&B.createElement("title",{id:ae},w),B.createElement(_L,{onClick:re,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:s,nodeClassName:o,nodeStrokeWidth:l,nodeComponent:c}),B.createElement("path",{className:"react-flow__minimap-mask",d:`M${V-Q},${se-Q}h${ee+Q*2}v${le+Q*2}h${-ee-Q*2}z + M${D.x},${D.y}h${D.width}v${D.height}h${-D.width}z`,fill:d,fillRule:"evenodd",stroke:f,strokeWidth:m,pointerEvents:"none"})))}_3.displayName="MiniMap";var OL=i.memo(_3),ns;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(ns||(ns={}));function DL({color:e,dimensions:t,lineWidth:n}){return B.createElement("path",{stroke:e,strokeWidth:n,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`})}function RL({color:e,radius:t}){return B.createElement("circle",{cx:t,cy:t,r:t,fill:e})}const AL={[ns.Dots]:"#91919a",[ns.Lines]:"#eee",[ns.Cross]:"#e2e2e2"},TL={[ns.Dots]:1,[ns.Lines]:1,[ns.Cross]:6},NL=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function I3({id:e,variant:t=ns.Dots,gap:n=20,size:r,lineWidth:o=1,offset:s=2,color:l,style:c,className:d}){const f=i.useRef(null),{transform:m,patternId:h}=xm(NL,vx),g=l||AL[t],b=r||TL[t],y=t===ns.Dots,x=t===ns.Cross,w=Array.isArray(n)?n:[n,n],S=[w[0]*m[2]||1,w[1]*m[2]||1],j=b*m[2],_=x?[j,j]:S,I=y?[j/s,j/s]:[_[0]/s,_[1]/s];return B.createElement("svg",{className:gx(["react-flow__background",d]),style:{...c,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:f,"data-testid":"rf__background"},B.createElement("pattern",{id:h+e,x:m[0]%S[0],y:m[1]%S[1],width:S[0],height:S[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${I[0]},-${I[1]})`},y?B.createElement(RL,{color:g,radius:j/s}):B.createElement(DL,{dimensions:_,color:g,lineWidth:o})),B.createElement("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${h+e})`}))}I3.displayName="Background";var $L=i.memo(I3);function LL(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var FL=LL();const P3=1/60*1e3,zL=typeof performance<"u"?()=>performance.now():()=>Date.now(),E3=typeof window<"u"?e=>window.requestAnimationFrame(e):e=>setTimeout(()=>e(zL()),P3);function BL(e){let t=[],n=[],r=0,o=!1,s=!1;const l=new WeakSet,c={schedule:(d,f=!1,m=!1)=>{const h=m&&o,g=h?t:n;return f&&l.add(d),g.indexOf(d)===-1&&(g.push(d),h&&o&&(r=t.length)),d},cancel:d=>{const f=n.indexOf(d);f!==-1&&n.splice(f,1),l.delete(d)},process:d=>{if(o){s=!0;return}if(o=!0,[t,n]=[n,t],n.length=0,r=t.length,r)for(let f=0;f(e[t]=BL(()=>xd=!0),e),{}),WL=Kd.reduce((e,t)=>{const n=Jh[t];return e[t]=(r,o=!1,s=!1)=>(xd||GL(),n.schedule(r,o,s)),e},{}),VL=Kd.reduce((e,t)=>(e[t]=Jh[t].cancel,e),{});Kd.reduce((e,t)=>(e[t]=()=>Jh[t].process(pc),e),{});const UL=e=>Jh[e].process(pc),M3=e=>{xd=!1,pc.delta=q1?P3:Math.max(Math.min(e-pc.timestamp,HL),1),pc.timestamp=e,X1=!0,Kd.forEach(UL),X1=!1,xd&&(q1=!1,E3(M3))},GL=()=>{xd=!0,q1=!0,X1||E3(M3)},SS=()=>pc;function eg(e){const{viewBox:t="0 0 24 24",d:n,displayName:r,defaultProps:o={}}=e,s=i.Children.toArray(e.path),l=_e((c,d)=>a.jsx(An,{ref:d,viewBox:t,...o,...c,children:s.length?s:a.jsx("path",{fill:"currentColor",d:n})}));return l.displayName=r,l}function tg(e){const{theme:t}=_R(),n=IR();return i.useMemo(()=>PR(t.direction,{...n,...e}),[e,t.direction,n])}var KL=Object.defineProperty,qL=(e,t,n)=>t in e?KL(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,In=(e,t,n)=>(qL(e,typeof t!="symbol"?t+"":t,n),n);function kS(e){return e.sort((t,n)=>{const r=t.compareDocumentPosition(n);if(r&Node.DOCUMENT_POSITION_FOLLOWING||r&Node.DOCUMENT_POSITION_CONTAINED_BY)return-1;if(r&Node.DOCUMENT_POSITION_PRECEDING||r&Node.DOCUMENT_POSITION_CONTAINS)return 1;if(r&Node.DOCUMENT_POSITION_DISCONNECTED||r&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC)throw Error("Cannot sort the given nodes.");return 0})}var XL=e=>typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE;function jS(e,t,n){let r=e+1;return n&&r>=t&&(r=0),r}function _S(e,t,n){let r=e-1;return n&&r<0&&(r=t),r}var Q1=typeof window<"u"?i.useLayoutEffect:i.useEffect,Om=e=>e,QL=class{constructor(){In(this,"descendants",new Map),In(this,"register",e=>{if(e!=null)return XL(e)?this.registerNode(e):t=>{this.registerNode(t,e)}}),In(this,"unregister",e=>{this.descendants.delete(e);const t=kS(Array.from(this.descendants.keys()));this.assignIndex(t)}),In(this,"destroy",()=>{this.descendants.clear()}),In(this,"assignIndex",e=>{this.descendants.forEach(t=>{const n=e.indexOf(t.node);t.index=n,t.node.dataset.index=t.index.toString()})}),In(this,"count",()=>this.descendants.size),In(this,"enabledCount",()=>this.enabledValues().length),In(this,"values",()=>Array.from(this.descendants.values()).sort((t,n)=>t.index-n.index)),In(this,"enabledValues",()=>this.values().filter(e=>!e.disabled)),In(this,"item",e=>{if(this.count()!==0)return this.values()[e]}),In(this,"enabledItem",e=>{if(this.enabledCount()!==0)return this.enabledValues()[e]}),In(this,"first",()=>this.item(0)),In(this,"firstEnabled",()=>this.enabledItem(0)),In(this,"last",()=>this.item(this.descendants.size-1)),In(this,"lastEnabled",()=>{const e=this.enabledValues().length-1;return this.enabledItem(e)}),In(this,"indexOf",e=>{var t,n;return e&&(n=(t=this.descendants.get(e))==null?void 0:t.index)!=null?n:-1}),In(this,"enabledIndexOf",e=>e==null?-1:this.enabledValues().findIndex(t=>t.node.isSameNode(e))),In(this,"next",(e,t=!0)=>{const n=jS(e,this.count(),t);return this.item(n)}),In(this,"nextEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=jS(r,this.enabledCount(),t);return this.enabledItem(o)}),In(this,"prev",(e,t=!0)=>{const n=_S(e,this.count()-1,t);return this.item(n)}),In(this,"prevEnabled",(e,t=!0)=>{const n=this.item(e);if(!n)return;const r=this.enabledIndexOf(n.node),o=_S(r,this.enabledCount()-1,t);return this.enabledItem(o)}),In(this,"registerNode",(e,t)=>{if(!e||this.descendants.has(e))return;const n=Array.from(this.descendants.keys()).concat(e),r=kS(n);t!=null&&t.disabled&&(t.disabled=!!t.disabled);const o={node:e,index:-1,...t};this.descendants.set(e,o),this.assignIndex(r)})}};function YL(e,t){if(e!=null){if(typeof e=="function"){e(t);return}try{e.current=t}catch{throw new Error(`Cannot assign value '${t}' to ref '${e}'`)}}}function Et(...e){return t=>{e.forEach(n=>{YL(n,t)})}}function ZL(...e){return i.useMemo(()=>Et(...e),e)}function JL(){const e=i.useRef(new QL);return Q1(()=>()=>e.current.destroy()),e.current}var[eF,O3]=Kt({name:"DescendantsProvider",errorMessage:"useDescendantsContext must be used within DescendantsProvider"});function tF(e){const t=O3(),[n,r]=i.useState(-1),o=i.useRef(null);Q1(()=>()=>{o.current&&t.unregister(o.current)},[]),Q1(()=>{if(!o.current)return;const l=Number(o.current.dataset.index);n!=l&&!Number.isNaN(l)&&r(l)});const s=Om(e?t.register(e):t.register);return{descendants:t,index:n,enabledIndex:t.enabledIndexOf(o.current),register:Et(s,o)}}function Vx(){return[Om(eF),()=>Om(O3()),()=>JL(),o=>tF(o)]}var[nF,ng]=Kt({name:"AccordionStylesContext",hookName:"useAccordionStyles",providerName:""}),[rF,Ux]=Kt({name:"AccordionItemContext",hookName:"useAccordionItemContext",providerName:""}),[oF,Sye,sF,aF]=Vx(),qi=_e(function(t,n){const{getButtonProps:r}=Ux(),o=r(t,n),l={display:"flex",alignItems:"center",width:"100%",outline:0,...ng().button};return a.jsx(je.button,{...o,className:et("chakra-accordion__button",t.className),__css:l})});qi.displayName="AccordionButton";function qd(e){const{value:t,defaultValue:n,onChange:r,shouldUpdate:o=(g,b)=>g!==b}=e,s=gn(r),l=gn(o),[c,d]=i.useState(n),f=t!==void 0,m=f?t:c,h=gn(g=>{const y=typeof g=="function"?g(m):g;l(m,y)&&(f||d(y),s(y))},[f,s,m,l]);return[m,h]}function lF(e){const{onChange:t,defaultIndex:n,index:r,allowMultiple:o,allowToggle:s,...l}=e;uF(e),dF(e);const c=sF(),[d,f]=i.useState(-1);i.useEffect(()=>()=>{f(-1)},[]);const[m,h]=qd({value:r,defaultValue(){return o?n??[]:n??-1},onChange:t});return{index:m,setIndex:h,htmlProps:l,getAccordionItemProps:b=>{let y=!1;return b!==null&&(y=Array.isArray(m)?m.includes(b):m===b),{isOpen:y,onChange:w=>{if(b!==null)if(o&&Array.isArray(m)){const S=w?m.concat(b):m.filter(j=>j!==b);h(S)}else w?h(b):s&&h(-1)}}},focusedIndex:d,setFocusedIndex:f,descendants:c}}var[iF,Gx]=Kt({name:"AccordionContext",hookName:"useAccordionContext",providerName:"Accordion"});function cF(e){const{isDisabled:t,isFocusable:n,id:r,...o}=e,{getAccordionItemProps:s,setFocusedIndex:l}=Gx(),c=i.useRef(null),d=i.useId(),f=r??d,m=`accordion-button-${f}`,h=`accordion-panel-${f}`;fF(e);const{register:g,index:b,descendants:y}=aF({disabled:t&&!n}),{isOpen:x,onChange:w}=s(b===-1?null:b);pF({isOpen:x,isDisabled:t});const S=()=>{w==null||w(!0)},j=()=>{w==null||w(!1)},_=i.useCallback(()=>{w==null||w(!x),l(b)},[b,l,x,w]),I=i.useCallback(R=>{const O={ArrowDown:()=>{const T=y.nextEnabled(b);T==null||T.node.focus()},ArrowUp:()=>{const T=y.prevEnabled(b);T==null||T.node.focus()},Home:()=>{const T=y.firstEnabled();T==null||T.node.focus()},End:()=>{const T=y.lastEnabled();T==null||T.node.focus()}}[R.key];O&&(R.preventDefault(),O(R))},[y,b]),E=i.useCallback(()=>{l(b)},[l,b]),M=i.useCallback(function(N={},O=null){return{...N,type:"button",ref:Et(g,c,O),id:m,disabled:!!t,"aria-expanded":!!x,"aria-controls":h,onClick:ze(N.onClick,_),onFocus:ze(N.onFocus,E),onKeyDown:ze(N.onKeyDown,I)}},[m,t,x,_,E,I,h,g]),D=i.useCallback(function(N={},O=null){return{...N,ref:O,role:"region",id:h,"aria-labelledby":m,hidden:!x}},[m,x,h]);return{isOpen:x,isDisabled:t,isFocusable:n,onOpen:S,onClose:j,getButtonProps:M,getPanelProps:D,htmlProps:o}}function uF(e){const t=e.index||e.defaultIndex,n=t!=null&&!Array.isArray(t)&&e.allowMultiple;zd({condition:!!n,message:`If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof t},`})}function dF(e){zd({condition:!!(e.allowMultiple&&e.allowToggle),message:"If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not"})}function fF(e){zd({condition:!!(e.isFocusable&&!e.isDisabled),message:`Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well. + `})}function pF(e){zd({condition:e.isOpen&&!!e.isDisabled,message:"Cannot open a disabled accordion item"})}function Xi(e){const{isOpen:t,isDisabled:n}=Ux(),{reduceMotion:r}=Gx(),o=et("chakra-accordion__icon",e.className),s=ng(),l={opacity:n?.4:1,transform:t?"rotate(-180deg)":void 0,transition:r?void 0:"transform 0.2s",transformOrigin:"center",...s.icon};return a.jsx(An,{viewBox:"0 0 24 24","aria-hidden":!0,className:o,__css:l,...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})})}Xi.displayName="AccordionIcon";var Qi=_e(function(t,n){const{children:r,className:o}=t,{htmlProps:s,...l}=cF(t),d={...ng().container,overflowAnchor:"none"},f=i.useMemo(()=>l,[l]);return a.jsx(rF,{value:f,children:a.jsx(je.div,{ref:n,...s,className:et("chakra-accordion__item",o),__css:d,children:typeof r=="function"?r({isExpanded:!!l.isOpen,isDisabled:!!l.isDisabled}):r})})});Qi.displayName="AccordionItem";var oc={ease:[.25,.1,.25,1],easeIn:[.4,0,1,1],easeOut:[0,0,.2,1],easeInOut:[.4,0,.2,1]},Vl={enter:{duration:.2,ease:oc.easeOut},exit:{duration:.1,ease:oc.easeIn}},oa={enter:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.enter}),exit:(e,t)=>({...e,delay:typeof t=="number"?t:t==null?void 0:t.exit})},mF=e=>e!=null&&parseInt(e.toString(),10)>0,IS={exit:{height:{duration:.2,ease:oc.ease},opacity:{duration:.3,ease:oc.ease}},enter:{height:{duration:.3,ease:oc.ease},opacity:{duration:.4,ease:oc.ease}}},hF={exit:({animateOpacity:e,startingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:mF(t)?1:0},height:t,transitionEnd:r==null?void 0:r.exit,transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(IS.exit,o)}},enter:({animateOpacity:e,endingHeight:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{...e&&{opacity:1},height:t,transitionEnd:r==null?void 0:r.enter,transition:(s=n==null?void 0:n.enter)!=null?s:oa.enter(IS.enter,o)}}},Xd=i.forwardRef((e,t)=>{const{in:n,unmountOnExit:r,animateOpacity:o=!0,startingHeight:s=0,endingHeight:l="auto",style:c,className:d,transition:f,transitionEnd:m,...h}=e,[g,b]=i.useState(!1);i.useEffect(()=>{const j=setTimeout(()=>{b(!0)});return()=>clearTimeout(j)},[]),zd({condition:Number(s)>0&&!!r,message:"startingHeight and unmountOnExit are mutually exclusive. You can't use them together"});const y=parseFloat(s.toString())>0,x={startingHeight:s,endingHeight:l,animateOpacity:o,transition:g?f:{enter:{duration:0}},transitionEnd:{enter:m==null?void 0:m.enter,exit:r?m==null?void 0:m.exit:{...m==null?void 0:m.exit,display:y?"block":"none"}}},w=r?n:!0,S=n||r?"enter":"exit";return a.jsx(hr,{initial:!1,custom:x,children:w&&a.jsx(Mn.div,{ref:t,...h,className:et("chakra-collapse",d),style:{overflow:"hidden",display:"block",...c},custom:x,variants:hF,initial:r?"exit":!1,animate:S,exit:"exit"})})});Xd.displayName="Collapse";var gF={enter:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:1,transition:(r=e==null?void 0:e.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({transition:e,transitionEnd:t,delay:n}={})=>{var r;return{opacity:0,transition:(r=e==null?void 0:e.exit)!=null?r:oa.exit(Vl.exit,n),transitionEnd:t==null?void 0:t.exit}}},D3={initial:"exit",animate:"enter",exit:"exit",variants:gF},vF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,className:s,transition:l,transitionEnd:c,delay:d,...f}=t,m=o||r?"enter":"exit",h=r?o&&r:!0,g={transition:l,transitionEnd:c,delay:d};return a.jsx(hr,{custom:g,children:h&&a.jsx(Mn.div,{ref:n,className:et("chakra-fade",s),custom:g,...D3,animate:m,...f})})});vF.displayName="Fade";var bF={exit:({reverse:e,initialScale:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,...e?{scale:t,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{scale:t,...r==null?void 0:r.exit}},transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(Vl.exit,o)}},enter:({transitionEnd:e,transition:t,delay:n})=>{var r;return{opacity:1,scale:1,transition:(r=t==null?void 0:t.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:e==null?void 0:e.enter}}},R3={initial:"exit",animate:"enter",exit:"exit",variants:bF},xF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,initialScale:l=.95,className:c,transition:d,transitionEnd:f,delay:m,...h}=t,g=r?o&&r:!0,b=o||r?"enter":"exit",y={initialScale:l,reverse:s,transition:d,transitionEnd:f,delay:m};return a.jsx(hr,{custom:y,children:g&&a.jsx(Mn.div,{ref:n,className:et("chakra-offset-slide",c),...R3,animate:b,custom:y,...h})})});xF.displayName="ScaleFade";var yF={initial:({offsetX:e,offsetY:t,transition:n,transitionEnd:r,delay:o})=>{var s;return{opacity:0,x:e,y:t,transition:(s=n==null?void 0:n.exit)!=null?s:oa.exit(Vl.exit,o),transitionEnd:r==null?void 0:r.exit}},enter:({transition:e,transitionEnd:t,delay:n})=>{var r;return{opacity:1,x:0,y:0,transition:(r=e==null?void 0:e.enter)!=null?r:oa.enter(Vl.enter,n),transitionEnd:t==null?void 0:t.enter}},exit:({offsetY:e,offsetX:t,transition:n,transitionEnd:r,reverse:o,delay:s})=>{var l;const c={x:t,y:e};return{opacity:0,transition:(l=n==null?void 0:n.exit)!=null?l:oa.exit(Vl.exit,s),...o?{...c,transitionEnd:r==null?void 0:r.exit}:{transitionEnd:{...c,...r==null?void 0:r.exit}}}}},Xu={initial:"initial",animate:"enter",exit:"exit",variants:yF},CF=i.forwardRef(function(t,n){const{unmountOnExit:r,in:o,reverse:s=!0,className:l,offsetX:c=0,offsetY:d=8,transition:f,transitionEnd:m,delay:h,...g}=t,b=r?o&&r:!0,y=o||r?"enter":"exit",x={offsetX:c,offsetY:d,reverse:s,transition:f,transitionEnd:m,delay:h};return a.jsx(hr,{custom:x,children:b&&a.jsx(Mn.div,{ref:n,className:et("chakra-offset-slide",l),custom:x,...Xu,animate:y,...g})})});CF.displayName="SlideFade";var Yi=_e(function(t,n){const{className:r,motionProps:o,...s}=t,{reduceMotion:l}=Gx(),{getPanelProps:c,isOpen:d}=Ux(),f=c(s,n),m=et("chakra-accordion__panel",r),h=ng();l||delete f.hidden;const g=a.jsx(je.div,{...f,__css:h.panel,className:m});return l?g:a.jsx(Xd,{in:d,...o,children:g})});Yi.displayName="AccordionPanel";var A3=_e(function({children:t,reduceMotion:n,...r},o){const s=Xn("Accordion",r),l=cn(r),{htmlProps:c,descendants:d,...f}=lF(l),m=i.useMemo(()=>({...f,reduceMotion:!!n}),[f,n]);return a.jsx(oF,{value:d,children:a.jsx(iF,{value:m,children:a.jsx(nF,{value:s,children:a.jsx(je.div,{ref:o,...c,className:et("chakra-accordion",r.className),__css:s.root,children:t})})})})});A3.displayName="Accordion";function rg(e){return i.Children.toArray(e).filter(t=>i.isValidElement(t))}var[wF,SF]=Kt({strict:!1,name:"ButtonGroupContext"}),kF={horizontal:{"> *:first-of-type:not(:last-of-type)":{borderEndRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderStartRadius:0}},vertical:{"> *:first-of-type:not(:last-of-type)":{borderBottomRadius:0},"> *:not(:first-of-type):not(:last-of-type)":{borderRadius:0},"> *:not(:first-of-type):last-of-type":{borderTopRadius:0}}},jF={horizontal:e=>({"& > *:not(style) ~ *:not(style)":{marginStart:e}}),vertical:e=>({"& > *:not(style) ~ *:not(style)":{marginTop:e}})},$t=_e(function(t,n){const{size:r,colorScheme:o,variant:s,className:l,spacing:c="0.5rem",isAttached:d,isDisabled:f,orientation:m="horizontal",...h}=t,g=et("chakra-button__group",l),b=i.useMemo(()=>({size:r,colorScheme:o,variant:s,isDisabled:f}),[r,o,s,f]);let y={display:"inline-flex",...d?kF[m]:jF[m](c)};const x=m==="vertical";return a.jsx(wF,{value:b,children:a.jsx(je.div,{ref:n,role:"group",__css:y,className:g,"data-attached":d?"":void 0,"data-orientation":m,flexDir:x?"column":void 0,...h})})});$t.displayName="ButtonGroup";function _F(e){const[t,n]=i.useState(!e);return{ref:i.useCallback(s=>{s&&n(s.tagName==="BUTTON")},[]),type:t?"button":void 0}}function Y1(e){const{children:t,className:n,...r}=e,o=i.isValidElement(t)?i.cloneElement(t,{"aria-hidden":!0,focusable:!1}):t,s=et("chakra-button__icon",n);return a.jsx(je.span,{display:"inline-flex",alignSelf:"center",flexShrink:0,...r,className:s,children:o})}Y1.displayName="ButtonIcon";function Z1(e){const{label:t,placement:n,spacing:r="0.5rem",children:o=a.jsx(va,{color:"currentColor",width:"1em",height:"1em"}),className:s,__css:l,...c}=e,d=et("chakra-button__spinner",s),f=n==="start"?"marginEnd":"marginStart",m=i.useMemo(()=>({display:"flex",alignItems:"center",position:t?"relative":"absolute",[f]:t?r:0,fontSize:"1em",lineHeight:"normal",...l}),[l,t,f,r]);return a.jsx(je.div,{className:d,...c,__css:m,children:o})}Z1.displayName="ButtonSpinner";var ol=_e((e,t)=>{const n=SF(),r=ml("Button",{...n,...e}),{isDisabled:o=n==null?void 0:n.isDisabled,isLoading:s,isActive:l,children:c,leftIcon:d,rightIcon:f,loadingText:m,iconSpacing:h="0.5rem",type:g,spinner:b,spinnerPlacement:y="start",className:x,as:w,...S}=cn(e),j=i.useMemo(()=>{const M={...r==null?void 0:r._focus,zIndex:1};return{display:"inline-flex",appearance:"none",alignItems:"center",justifyContent:"center",userSelect:"none",position:"relative",whiteSpace:"nowrap",verticalAlign:"middle",outline:"none",...r,...!!n&&{_focus:M}}},[r,n]),{ref:_,type:I}=_F(w),E={rightIcon:f,leftIcon:d,iconSpacing:h,children:c};return a.jsxs(je.button,{ref:ZL(t,_),as:w,type:g??I,"data-active":ut(l),"data-loading":ut(s),__css:j,className:et("chakra-button",x),...S,disabled:o||s,children:[s&&y==="start"&&a.jsx(Z1,{className:"chakra-button__spinner--start",label:m,placement:"start",spacing:h,children:b}),s?m||a.jsx(je.span,{opacity:0,children:a.jsx(PS,{...E})}):a.jsx(PS,{...E}),s&&y==="end"&&a.jsx(Z1,{className:"chakra-button__spinner--end",label:m,placement:"end",spacing:h,children:b})]})});ol.displayName="Button";function PS(e){const{leftIcon:t,rightIcon:n,children:r,iconSpacing:o}=e;return a.jsxs(a.Fragment,{children:[t&&a.jsx(Y1,{marginEnd:o,children:t}),r,n&&a.jsx(Y1,{marginStart:o,children:n})]})}var rs=_e((e,t)=>{const{icon:n,children:r,isRound:o,"aria-label":s,...l}=e,c=n||r,d=i.isValidElement(c)?i.cloneElement(c,{"aria-hidden":!0,focusable:!1}):null;return a.jsx(ol,{padding:"0",borderRadius:o?"full":void 0,ref:t,"aria-label":s,...l,children:d})});rs.displayName="IconButton";var[kye,IF]=Kt({name:"CheckboxGroupContext",strict:!1});function PF(e){const[t,n]=i.useState(e),[r,o]=i.useState(!1);return e!==t&&(o(!0),n(e)),r}function EF(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 12 10",style:{fill:"none",strokeWidth:2,stroke:"currentColor",strokeDasharray:16},...e,children:a.jsx("polyline",{points:"1.5 6 4.5 9 10.5 1"})})}function MF(e){return a.jsx(je.svg,{width:"1.2em",viewBox:"0 0 24 24",style:{stroke:"currentColor",strokeWidth:4},...e,children:a.jsx("line",{x1:"21",x2:"3",y1:"12",y2:"12"})})}function OF(e){const{isIndeterminate:t,isChecked:n,...r}=e,o=t?MF:EF;return n||t?a.jsx(je.div,{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:a.jsx(o,{...r})}):null}var[DF,T3]=Kt({name:"FormControlStylesContext",errorMessage:`useFormControlStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[RF,Qd]=Kt({strict:!1,name:"FormControlContext"});function AF(e){const{id:t,isRequired:n,isInvalid:r,isDisabled:o,isReadOnly:s,...l}=e,c=i.useId(),d=t||`field-${c}`,f=`${d}-label`,m=`${d}-feedback`,h=`${d}-helptext`,[g,b]=i.useState(!1),[y,x]=i.useState(!1),[w,S]=i.useState(!1),j=i.useCallback((D={},R=null)=>({id:h,...D,ref:Et(R,N=>{N&&x(!0)})}),[h]),_=i.useCallback((D={},R=null)=>({...D,ref:R,"data-focus":ut(w),"data-disabled":ut(o),"data-invalid":ut(r),"data-readonly":ut(s),id:D.id!==void 0?D.id:f,htmlFor:D.htmlFor!==void 0?D.htmlFor:d}),[d,o,w,r,s,f]),I=i.useCallback((D={},R=null)=>({id:m,...D,ref:Et(R,N=>{N&&b(!0)}),"aria-live":"polite"}),[m]),E=i.useCallback((D={},R=null)=>({...D,...l,ref:R,role:"group","data-focus":ut(w),"data-disabled":ut(o),"data-invalid":ut(r),"data-readonly":ut(s)}),[l,o,w,r,s]),M=i.useCallback((D={},R=null)=>({...D,ref:R,role:"presentation","aria-hidden":!0,children:D.children||"*"}),[]);return{isRequired:!!n,isInvalid:!!r,isReadOnly:!!s,isDisabled:!!o,isFocused:!!w,onFocus:()=>S(!0),onBlur:()=>S(!1),hasFeedbackText:g,setHasFeedbackText:b,hasHelpText:y,setHasHelpText:x,id:d,labelId:f,feedbackId:m,helpTextId:h,htmlProps:l,getHelpTextProps:j,getErrorMessageProps:I,getRootProps:E,getLabelProps:_,getRequiredIndicatorProps:M}}var Gt=_e(function(t,n){const r=Xn("Form",t),o=cn(t),{getRootProps:s,htmlProps:l,...c}=AF(o),d=et("chakra-form-control",t.className);return a.jsx(RF,{value:c,children:a.jsx(DF,{value:r,children:a.jsx(je.div,{...s({},n),className:d,__css:r.container})})})});Gt.displayName="FormControl";var N3=_e(function(t,n){const r=Qd(),o=T3(),s=et("chakra-form__helper-text",t.className);return a.jsx(je.div,{...r==null?void 0:r.getHelpTextProps(t,n),__css:o.helperText,className:s})});N3.displayName="FormHelperText";var ln=_e(function(t,n){var r;const o=ml("FormLabel",t),s=cn(t),{className:l,children:c,requiredIndicator:d=a.jsx($3,{}),optionalIndicator:f=null,...m}=s,h=Qd(),g=(r=h==null?void 0:h.getLabelProps(m,n))!=null?r:{ref:n,...m};return a.jsxs(je.label,{...g,className:et("chakra-form__label",s.className),__css:{display:"block",textAlign:"start",...o},children:[c,h!=null&&h.isRequired?d:f]})});ln.displayName="FormLabel";var $3=_e(function(t,n){const r=Qd(),o=T3();if(!(r!=null&&r.isRequired))return null;const s=et("chakra-form__required-indicator",t.className);return a.jsx(je.span,{...r==null?void 0:r.getRequiredIndicatorProps(t,n),__css:o.requiredIndicator,className:s})});$3.displayName="RequiredIndicator";function Kx(e){const{isDisabled:t,isInvalid:n,isReadOnly:r,isRequired:o,...s}=qx(e);return{...s,disabled:t,readOnly:r,required:o,"aria-invalid":wo(n),"aria-required":wo(o),"aria-readonly":wo(r)}}function qx(e){var t,n,r;const o=Qd(),{id:s,disabled:l,readOnly:c,required:d,isRequired:f,isInvalid:m,isReadOnly:h,isDisabled:g,onFocus:b,onBlur:y,...x}=e,w=e["aria-describedby"]?[e["aria-describedby"]]:[];return o!=null&&o.hasFeedbackText&&(o!=null&&o.isInvalid)&&w.push(o.feedbackId),o!=null&&o.hasHelpText&&w.push(o.helpTextId),{...x,"aria-describedby":w.join(" ")||void 0,id:s??(o==null?void 0:o.id),isDisabled:(t=l??g)!=null?t:o==null?void 0:o.isDisabled,isReadOnly:(n=c??h)!=null?n:o==null?void 0:o.isReadOnly,isRequired:(r=d??f)!=null?r:o==null?void 0:o.isRequired,isInvalid:m??(o==null?void 0:o.isInvalid),onFocus:ze(o==null?void 0:o.onFocus,b),onBlur:ze(o==null?void 0:o.onBlur,y)}}var Xx={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},L3=je("span",{baseStyle:Xx});L3.displayName="VisuallyHidden";var TF=je("input",{baseStyle:Xx});TF.displayName="VisuallyHiddenInput";var NF=()=>typeof document<"u",ES=!1,Yd=null,Jl=!1,J1=!1,eb=new Set;function Qx(e,t){eb.forEach(n=>n(e,t))}var $F=typeof window<"u"&&window.navigator!=null?/^Mac/.test(window.navigator.platform):!1;function LF(e){return!(e.metaKey||!$F&&e.altKey||e.ctrlKey||e.key==="Control"||e.key==="Shift"||e.key==="Meta")}function MS(e){Jl=!0,LF(e)&&(Yd="keyboard",Qx("keyboard",e))}function $i(e){if(Yd="pointer",e.type==="mousedown"||e.type==="pointerdown"){Jl=!0;const t=e.composedPath?e.composedPath()[0]:e.target;let n=!1;try{n=t.matches(":focus-visible")}catch{}if(n)return;Qx("pointer",e)}}function FF(e){return e.mozInputSource===0&&e.isTrusted?!0:e.detail===0&&!e.pointerType}function zF(e){FF(e)&&(Jl=!0,Yd="virtual")}function BF(e){e.target===window||e.target===document||(!Jl&&!J1&&(Yd="virtual",Qx("virtual",e)),Jl=!1,J1=!1)}function HF(){Jl=!1,J1=!0}function OS(){return Yd!=="pointer"}function WF(){if(!NF()||ES)return;const{focus:e}=HTMLElement.prototype;HTMLElement.prototype.focus=function(...n){Jl=!0,e.apply(this,n)},document.addEventListener("keydown",MS,!0),document.addEventListener("keyup",MS,!0),document.addEventListener("click",zF,!0),window.addEventListener("focus",BF,!0),window.addEventListener("blur",HF,!1),typeof PointerEvent<"u"?(document.addEventListener("pointerdown",$i,!0),document.addEventListener("pointermove",$i,!0),document.addEventListener("pointerup",$i,!0)):(document.addEventListener("mousedown",$i,!0),document.addEventListener("mousemove",$i,!0),document.addEventListener("mouseup",$i,!0)),ES=!0}function F3(e){WF(),e(OS());const t=()=>e(OS());return eb.add(t),()=>{eb.delete(t)}}function VF(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function z3(e={}){const t=qx(e),{isDisabled:n,isReadOnly:r,isRequired:o,isInvalid:s,id:l,onBlur:c,onFocus:d,"aria-describedby":f}=t,{defaultChecked:m,isChecked:h,isFocusable:g,onChange:b,isIndeterminate:y,name:x,value:w,tabIndex:S=void 0,"aria-label":j,"aria-labelledby":_,"aria-invalid":I,...E}=e,M=VF(E,["isDisabled","isReadOnly","isRequired","isInvalid","id","onBlur","onFocus","aria-describedby"]),D=gn(b),R=gn(c),N=gn(d),[O,T]=i.useState(!1),[U,G]=i.useState(!1),[q,Y]=i.useState(!1),[Q,V]=i.useState(!1);i.useEffect(()=>F3(T),[]);const se=i.useRef(null),[ee,le]=i.useState(!0),[ae,ce]=i.useState(!!m),J=h!==void 0,re=J?h:ae,A=i.useCallback(de=>{if(r||n){de.preventDefault();return}J||ce(re?de.target.checked:y?!0:de.target.checked),D==null||D(de)},[r,n,re,J,y,D]);dc(()=>{se.current&&(se.current.indeterminate=!!y)},[y]),ba(()=>{n&&G(!1)},[n,G]),dc(()=>{const de=se.current;if(!(de!=null&&de.form))return;const ke=()=>{ce(!!m)};return de.form.addEventListener("reset",ke),()=>{var we;return(we=de.form)==null?void 0:we.removeEventListener("reset",ke)}},[]);const L=n&&!g,K=i.useCallback(de=>{de.key===" "&&V(!0)},[V]),ne=i.useCallback(de=>{de.key===" "&&V(!1)},[V]);dc(()=>{if(!se.current)return;se.current.checked!==re&&ce(se.current.checked)},[se.current]);const z=i.useCallback((de={},ke=null)=>{const we=Re=>{U&&Re.preventDefault(),V(!0)};return{...de,ref:ke,"data-active":ut(Q),"data-hover":ut(q),"data-checked":ut(re),"data-focus":ut(U),"data-focus-visible":ut(U&&O),"data-indeterminate":ut(y),"data-disabled":ut(n),"data-invalid":ut(s),"data-readonly":ut(r),"aria-hidden":!0,onMouseDown:ze(de.onMouseDown,we),onMouseUp:ze(de.onMouseUp,()=>V(!1)),onMouseEnter:ze(de.onMouseEnter,()=>Y(!0)),onMouseLeave:ze(de.onMouseLeave,()=>Y(!1))}},[Q,re,n,U,O,q,y,s,r]),oe=i.useCallback((de={},ke=null)=>({...de,ref:ke,"data-active":ut(Q),"data-hover":ut(q),"data-checked":ut(re),"data-focus":ut(U),"data-focus-visible":ut(U&&O),"data-indeterminate":ut(y),"data-disabled":ut(n),"data-invalid":ut(s),"data-readonly":ut(r)}),[Q,re,n,U,O,q,y,s,r]),X=i.useCallback((de={},ke=null)=>({...M,...de,ref:Et(ke,we=>{we&&le(we.tagName==="LABEL")}),onClick:ze(de.onClick,()=>{var we;ee||((we=se.current)==null||we.click(),requestAnimationFrame(()=>{var Re;(Re=se.current)==null||Re.focus({preventScroll:!0})}))}),"data-disabled":ut(n),"data-checked":ut(re),"data-invalid":ut(s)}),[M,n,re,s,ee]),Z=i.useCallback((de={},ke=null)=>({...de,ref:Et(se,ke),type:"checkbox",name:x,value:w,id:l,tabIndex:S,onChange:ze(de.onChange,A),onBlur:ze(de.onBlur,R,()=>G(!1)),onFocus:ze(de.onFocus,N,()=>G(!0)),onKeyDown:ze(de.onKeyDown,K),onKeyUp:ze(de.onKeyUp,ne),required:o,checked:re,disabled:L,readOnly:r,"aria-label":j,"aria-labelledby":_,"aria-invalid":I?!!I:s,"aria-describedby":f,"aria-disabled":n,style:Xx}),[x,w,l,A,R,N,K,ne,o,re,L,r,j,_,I,s,f,n,S]),me=i.useCallback((de={},ke=null)=>({...de,ref:ke,onMouseDown:ze(de.onMouseDown,UF),"data-disabled":ut(n),"data-checked":ut(re),"data-invalid":ut(s)}),[re,n,s]);return{state:{isInvalid:s,isFocused:U,isChecked:re,isActive:Q,isHovered:q,isIndeterminate:y,isDisabled:n,isReadOnly:r,isRequired:o},getRootProps:X,getCheckboxProps:z,getIndicatorProps:oe,getInputProps:Z,getLabelProps:me,htmlProps:M}}function UF(e){e.preventDefault(),e.stopPropagation()}var GF={display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",userSelect:"none",flexShrink:0},KF={cursor:"pointer",display:"inline-flex",alignItems:"center",verticalAlign:"top",position:"relative"},qF=xa({from:{opacity:0,strokeDashoffset:16,transform:"scale(0.95)"},to:{opacity:1,strokeDashoffset:0,transform:"scale(1)"}}),XF=xa({from:{opacity:0},to:{opacity:1}}),QF=xa({from:{transform:"scaleX(0.65)"},to:{transform:"scaleX(1)"}}),og=_e(function(t,n){const r=IF(),o={...r,...t},s=Xn("Checkbox",o),l=cn(t),{spacing:c="0.5rem",className:d,children:f,iconColor:m,iconSize:h,icon:g=a.jsx(OF,{}),isChecked:b,isDisabled:y=r==null?void 0:r.isDisabled,onChange:x,inputProps:w,...S}=l;let j=b;r!=null&&r.value&&l.value&&(j=r.value.includes(l.value));let _=x;r!=null&&r.onChange&&l.value&&(_=Uh(r.onChange,x));const{state:I,getInputProps:E,getCheckboxProps:M,getLabelProps:D,getRootProps:R}=z3({...S,isDisabled:y,isChecked:j,onChange:_}),N=PF(I.isChecked),O=i.useMemo(()=>({animation:N?I.isIndeterminate?`${XF} 20ms linear, ${QF} 200ms linear`:`${qF} 200ms linear`:void 0,fontSize:h,color:m,...s.icon}),[m,h,N,I.isIndeterminate,s.icon]),T=i.cloneElement(g,{__css:O,isIndeterminate:I.isIndeterminate,isChecked:I.isChecked});return a.jsxs(je.label,{__css:{...KF,...s.container},className:et("chakra-checkbox",d),...R(),children:[a.jsx("input",{className:"chakra-checkbox__input",...E(w,n)}),a.jsx(je.span,{__css:{...GF,...s.control},className:"chakra-checkbox__control",...M(),children:T}),f&&a.jsx(je.span,{className:"chakra-checkbox__label",...D(),__css:{marginStart:c,...s.label},children:f})]})});og.displayName="Checkbox";function YF(e){const t=parseFloat(e);return typeof t!="number"||Number.isNaN(t)?0:t}function Yx(e,t){let n=YF(e);const r=10**(t??10);return n=Math.round(n*r)/r,t?n.toFixed(t):n.toString()}function tb(e){if(!Number.isFinite(e))return 0;let t=1,n=0;for(;Math.round(e*t)/t!==e;)t*=10,n+=1;return n}function Dm(e,t,n){return(e-t)*100/(n-t)}function B3(e,t,n){return(n-t)*e+t}function nb(e,t,n){const r=Math.round((e-t)/n)*n+t,o=tb(n);return Yx(r,o)}function mc(e,t,n){return e==null?e:(n{var O;return r==null?"":(O=Lv(r,s,n))!=null?O:""}),g=typeof o<"u",b=g?o:m,y=H3(Wa(b),s),x=n??y,w=i.useCallback(O=>{O!==b&&(g||h(O.toString()),f==null||f(O.toString(),Wa(O)))},[f,g,b]),S=i.useCallback(O=>{let T=O;return d&&(T=mc(T,l,c)),Yx(T,x)},[x,d,c,l]),j=i.useCallback((O=s)=>{let T;b===""?T=Wa(O):T=Wa(b)+O,T=S(T),w(T)},[S,s,w,b]),_=i.useCallback((O=s)=>{let T;b===""?T=Wa(-O):T=Wa(b)-O,T=S(T),w(T)},[S,s,w,b]),I=i.useCallback(()=>{var O;let T;r==null?T="":T=(O=Lv(r,s,n))!=null?O:l,w(T)},[r,n,s,w,l]),E=i.useCallback(O=>{var T;const U=(T=Lv(O,s,x))!=null?T:l;w(U)},[x,s,w,l]),M=Wa(b);return{isOutOfRange:M>c||M" `}),[ez,Zx]=Kt({name:"EditableContext",errorMessage:"useEditableContext: context is undefined. Seems you forgot to wrap the editable components in ``"}),V3={fontSize:"inherit",fontWeight:"inherit",textAlign:"inherit",bg:"transparent"},Zd=_e(function(t,n){const{getInputProps:r}=Zx(),o=W3(),s=r(t,n),l=et("chakra-editable__input",t.className);return a.jsx(je.input,{...s,__css:{outline:0,...V3,...o.input},className:l})});Zd.displayName="EditableInput";var Jd=_e(function(t,n){const{getPreviewProps:r}=Zx(),o=W3(),s=r(t,n),l=et("chakra-editable__preview",t.className);return a.jsx(je.span,{...s,__css:{cursor:"text",display:"inline-block",...V3,...o.preview},className:l})});Jd.displayName="EditablePreview";function Ul(e,t,n,r){const o=gn(n);return i.useEffect(()=>{const s=typeof e=="function"?e():e??document;if(!(!n||!s))return s.addEventListener(t,o,r),()=>{s.removeEventListener(t,o,r)}},[t,e,r,o,n]),()=>{const s=typeof e=="function"?e():e??document;s==null||s.removeEventListener(t,o,r)}}function tz(e){return"current"in e}var U3=()=>typeof window<"u";function nz(){var e;const t=navigator.userAgentData;return(e=t==null?void 0:t.platform)!=null?e:navigator.platform}var rz=e=>U3()&&e.test(navigator.vendor),oz=e=>U3()&&e.test(nz()),sz=()=>oz(/mac|iphone|ipad|ipod/i),az=()=>sz()&&rz(/apple/i);function G3(e){const{ref:t,elements:n,enabled:r}=e,o=()=>{var s,l;return(l=(s=t.current)==null?void 0:s.ownerDocument)!=null?l:document};Ul(o,"pointerdown",s=>{if(!az()||!r)return;const l=s.target,d=(n??[t]).some(f=>{const m=tz(f)?f.current:f;return(m==null?void 0:m.contains(l))||m===l});o().activeElement!==l&&d&&(s.preventDefault(),l.focus())})}function DS(e,t){return e?e===t||e.contains(t):!1}function lz(e={}){const{onChange:t,onCancel:n,onSubmit:r,onBlur:o,value:s,isDisabled:l,defaultValue:c,startWithEditView:d,isPreviewFocusable:f=!0,submitOnBlur:m=!0,selectAllOnFocus:h=!0,placeholder:g,onEdit:b,finalFocusRef:y,...x}=e,w=gn(b),S=!!(d&&!l),[j,_]=i.useState(S),[I,E]=qd({defaultValue:c||"",value:s,onChange:t}),[M,D]=i.useState(I),R=i.useRef(null),N=i.useRef(null),O=i.useRef(null),T=i.useRef(null),U=i.useRef(null);G3({ref:R,enabled:j,elements:[T,U]});const G=!j&&!l;dc(()=>{var z,oe;j&&((z=R.current)==null||z.focus(),h&&((oe=R.current)==null||oe.select()))},[]),ba(()=>{var z,oe,X,Z;if(!j){y?(z=y.current)==null||z.focus():(oe=O.current)==null||oe.focus();return}(X=R.current)==null||X.focus(),h&&((Z=R.current)==null||Z.select()),w==null||w()},[j,w,h]);const q=i.useCallback(()=>{G&&_(!0)},[G]),Y=i.useCallback(()=>{D(I)},[I]),Q=i.useCallback(()=>{_(!1),E(M),n==null||n(M),o==null||o(M)},[n,o,E,M]),V=i.useCallback(()=>{_(!1),D(I),r==null||r(I),o==null||o(M)},[I,r,o,M]);i.useEffect(()=>{if(j)return;const z=R.current;(z==null?void 0:z.ownerDocument.activeElement)===z&&(z==null||z.blur())},[j]);const se=i.useCallback(z=>{E(z.currentTarget.value)},[E]),ee=i.useCallback(z=>{const oe=z.key,Z={Escape:Q,Enter:me=>{!me.shiftKey&&!me.metaKey&&V()}}[oe];Z&&(z.preventDefault(),Z(z))},[Q,V]),le=i.useCallback(z=>{const oe=z.key,Z={Escape:Q}[oe];Z&&(z.preventDefault(),Z(z))},[Q]),ae=I.length===0,ce=i.useCallback(z=>{var oe;if(!j)return;const X=z.currentTarget.ownerDocument,Z=(oe=z.relatedTarget)!=null?oe:X.activeElement,me=DS(T.current,Z),ve=DS(U.current,Z);!me&&!ve&&(m?V():Q())},[m,V,Q,j]),J=i.useCallback((z={},oe=null)=>{const X=G&&f?0:void 0;return{...z,ref:Et(oe,N),children:ae?g:I,hidden:j,"aria-disabled":wo(l),tabIndex:X,onFocus:ze(z.onFocus,q,Y)}},[l,j,G,f,ae,q,Y,g,I]),re=i.useCallback((z={},oe=null)=>({...z,hidden:!j,placeholder:g,ref:Et(oe,R),disabled:l,"aria-disabled":wo(l),value:I,onBlur:ze(z.onBlur,ce),onChange:ze(z.onChange,se),onKeyDown:ze(z.onKeyDown,ee),onFocus:ze(z.onFocus,Y)}),[l,j,ce,se,ee,Y,g,I]),A=i.useCallback((z={},oe=null)=>({...z,hidden:!j,placeholder:g,ref:Et(oe,R),disabled:l,"aria-disabled":wo(l),value:I,onBlur:ze(z.onBlur,ce),onChange:ze(z.onChange,se),onKeyDown:ze(z.onKeyDown,le),onFocus:ze(z.onFocus,Y)}),[l,j,ce,se,le,Y,g,I]),L=i.useCallback((z={},oe=null)=>({"aria-label":"Edit",...z,type:"button",onClick:ze(z.onClick,q),ref:Et(oe,O),disabled:l}),[q,l]),K=i.useCallback((z={},oe=null)=>({...z,"aria-label":"Submit",ref:Et(U,oe),type:"button",onClick:ze(z.onClick,V),disabled:l}),[V,l]),ne=i.useCallback((z={},oe=null)=>({"aria-label":"Cancel",id:"cancel",...z,ref:Et(T,oe),type:"button",onClick:ze(z.onClick,Q),disabled:l}),[Q,l]);return{isEditing:j,isDisabled:l,isValueEmpty:ae,value:I,onEdit:q,onCancel:Q,onSubmit:V,getPreviewProps:J,getInputProps:re,getTextareaProps:A,getEditButtonProps:L,getSubmitButtonProps:K,getCancelButtonProps:ne,htmlProps:x}}var ef=_e(function(t,n){const r=Xn("Editable",t),o=cn(t),{htmlProps:s,...l}=lz(o),{isEditing:c,onSubmit:d,onCancel:f,onEdit:m}=l,h=et("chakra-editable",t.className),g=bx(t.children,{isEditing:c,onSubmit:d,onCancel:f,onEdit:m});return a.jsx(ez,{value:l,children:a.jsx(JF,{value:r,children:a.jsx(je.div,{ref:n,...s,className:h,children:g})})})});ef.displayName="Editable";function K3(){const{isEditing:e,getEditButtonProps:t,getCancelButtonProps:n,getSubmitButtonProps:r}=Zx();return{isEditing:e,getEditButtonProps:t,getCancelButtonProps:n,getSubmitButtonProps:r}}function iz(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var q3={exports:{}},cz="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",uz=cz,dz=uz;function X3(){}function Q3(){}Q3.resetWarningCache=X3;var fz=function(){function e(r,o,s,l,c,d){if(d!==dz){var f=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw f.name="Invariant Violation",f}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:Q3,resetWarningCache:X3};return n.PropTypes=n,n};q3.exports=fz();var pz=q3.exports;const nn=Bd(pz);var rb="data-focus-lock",Y3="data-focus-lock-disabled",mz="data-no-focus-lock",hz="data-autofocus-inside",gz="data-no-autofocus";function vz(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function bz(e,t){var n=i.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}function Z3(e,t){return bz(t||null,function(n){return e.forEach(function(r){return vz(r,n)})})}var Fv={width:"1px",height:"0px",padding:0,overflow:"hidden",position:"fixed",top:"1px",left:"1px"},ws=function(){return ws=Object.assign||function(t){for(var n,r=1,o=arguments.length;r0&&s[s.length-1])&&(f[0]===6||f[0]===2)){n=0;continue}if(f[0]===3&&(!s||f[1]>s[0]&&f[1]0)&&!(o=r.next()).done;)s.push(o.value)}catch(c){l={error:c}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(l)throw l.error}}return s}function ob(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,s;r=0}).sort(Tz)},Nz=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"],ny=Nz.join(","),$z="".concat(ny,", [data-focus-guard]"),g5=function(e,t){return Fs((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?$z:ny)?[r]:[],g5(r))},[])},Lz=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?sg([e.contentDocument.body],t):[e]},sg=function(e,t){return e.reduce(function(n,r){var o,s=g5(r,t),l=(o=[]).concat.apply(o,s.map(function(c){return Lz(c,t)}));return n.concat(l,r.parentNode?Fs(r.parentNode.querySelectorAll(ny)).filter(function(c){return c===r}):[])},[])},Fz=function(e){var t=e.querySelectorAll("[".concat(hz,"]"));return Fs(t).map(function(n){return sg([n])}).reduce(function(n,r){return n.concat(r)},[])},ry=function(e,t){return Fs(e).filter(function(n){return u5(t,n)}).filter(function(n){return Dz(n)})},AS=function(e,t){return t===void 0&&(t=new Map),Fs(e).filter(function(n){return d5(t,n)})},ab=function(e,t,n){return h5(ry(sg(e,n),t),!0,n)},TS=function(e,t){return h5(ry(sg(e),t),!1)},zz=function(e,t){return ry(Fz(e),t)},hc=function(e,t){return e.shadowRoot?hc(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:Fs(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?hc(o,t):!1}return hc(n,t)})},Bz=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(s&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(l,c){return!t.has(c)})},v5=function(e){return e.parentNode?v5(e.parentNode):e},oy=function(e){var t=Rm(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(rb);return n.push.apply(n,o?Bz(Fs(v5(r).querySelectorAll("[".concat(rb,'="').concat(o,'"]:not([').concat(Y3,'="disabled"])')))):[r]),n},[])},Hz=function(e){try{return e()}catch{return}},Cd=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?Cd(t.shadowRoot):t instanceof HTMLIFrameElement&&Hz(function(){return t.contentWindow.document})?Cd(t.contentWindow.document):t}},Wz=function(e,t){return e===t},Vz=function(e,t){return!!Fs(e.querySelectorAll("iframe")).some(function(n){return Wz(n,t)})},b5=function(e,t){return t===void 0&&(t=Cd(l5(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:oy(e).some(function(n){return hc(n,t)||Vz(n,t)})},Uz=function(e){e===void 0&&(e=document);var t=Cd(e);return t?Fs(e.querySelectorAll("[".concat(mz,"]"))).some(function(n){return hc(n,t)}):!1},Gz=function(e,t){return t.filter(m5).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},sy=function(e,t){return m5(e)&&e.name?Gz(e,t):e},Kz=function(e){var t=new Set;return e.forEach(function(n){return t.add(sy(n,e))}),e.filter(function(n){return t.has(n)})},NS=function(e){return e[0]&&e.length>1?sy(e[0],e):e[0]},$S=function(e,t){return e.length>1?e.indexOf(sy(e[t],e)):t},x5="NEW_FOCUS",qz=function(e,t,n,r){var o=e.length,s=e[0],l=e[o-1],c=ty(n);if(!(n&&e.indexOf(n)>=0)){var d=n!==void 0?t.indexOf(n):-1,f=r?t.indexOf(r):d,m=r?e.indexOf(r):-1,h=d-f,g=t.indexOf(s),b=t.indexOf(l),y=Kz(t),x=n!==void 0?y.indexOf(n):-1,w=x-(r?y.indexOf(r):d),S=$S(e,0),j=$S(e,o-1);if(d===-1||m===-1)return x5;if(!h&&m>=0)return m;if(d<=g&&c&&Math.abs(h)>1)return j;if(d>=b&&c&&Math.abs(h)>1)return S;if(h&&Math.abs(w)>1)return m;if(d<=g)return j;if(d>b)return S;if(h)return Math.abs(h)>1?m:(o+m+h)%o}},Xz=function(e){return function(t){var n,r=(n=f5(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},Qz=function(e,t,n){var r=e.map(function(s){var l=s.node;return l}),o=AS(r.filter(Xz(n)));return o&&o.length?NS(o):NS(AS(t))},lb=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&lb(e.parentNode.host||e.parentNode,t),t},zv=function(e,t){for(var n=lb(e),r=lb(t),o=0;o=0)return s}return!1},y5=function(e,t,n){var r=Rm(e),o=Rm(t),s=r[0],l=!1;return o.filter(Boolean).forEach(function(c){l=zv(l||c,c)||l,n.filter(Boolean).forEach(function(d){var f=zv(s,d);f&&(!l||hc(f,l)?l=f:l=zv(f,l))})}),l},Yz=function(e,t){return e.reduce(function(n,r){return n.concat(zz(r,t))},[])},Zz=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(Az)},Jz=function(e,t){var n=Cd(Rm(e).length>0?document:l5(e).ownerDocument),r=oy(e).filter(Am),o=y5(n||e,e,r),s=new Map,l=TS(r,s),c=ab(r,s).filter(function(b){var y=b.node;return Am(y)});if(!(!c[0]&&(c=l,!c[0]))){var d=TS([o],s).map(function(b){var y=b.node;return y}),f=Zz(d,c),m=f.map(function(b){var y=b.node;return y}),h=qz(m,d,n,t);if(h===x5){var g=Qz(l,m,Yz(r,s));if(g)return{node:g};console.warn("focus-lock: cannot find any node to move focus into");return}return h===void 0?h:f[h]}},eB=function(e){var t=oy(e).filter(Am),n=y5(e,e,t),r=new Map,o=ab([n],r,!0),s=ab(t,r).filter(function(l){var c=l.node;return Am(c)}).map(function(l){var c=l.node;return c});return o.map(function(l){var c=l.node,d=l.index;return{node:c,index:d,lockItem:s.indexOf(c)>=0,guard:ty(c)}})},tB=function(e,t){"focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus()},Bv=0,Hv=!1,C5=function(e,t,n){n===void 0&&(n={});var r=Jz(e,t);if(!Hv&&r){if(Bv>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),Hv=!0,setTimeout(function(){Hv=!1},1);return}Bv++,tB(r.node,n.focusOptions),Bv--}};function ay(e){setTimeout(e,1)}var nB=function(){return document&&document.activeElement===document.body},rB=function(){return nB()||Uz()},gc=null,sc=null,vc=null,wd=!1,oB=function(){return!0},sB=function(t){return(gc.whiteList||oB)(t)},aB=function(t,n){vc={observerNode:t,portaledElement:n}},lB=function(t){return vc&&vc.portaledElement===t};function LS(e,t,n,r){var o=null,s=e;do{var l=r[s];if(l.guard)l.node.dataset.focusAutoGuard&&(o=l);else if(l.lockItem){if(s!==e)return;o=null}else break}while((s+=n)!==t);o&&(o.node.tabIndex=0)}var iB=function(t){return t&&"current"in t?t.current:t},cB=function(t){return t?!!wd:wd==="meanwhile"},uB=function e(t,n,r){return n&&(n.host===t&&(!n.activeElement||r.contains(n.activeElement))||n.parentNode&&e(t,n.parentNode,r))},dB=function(t,n){return n.some(function(r){return uB(t,r,r)})},Tm=function(){var t=!1;if(gc){var n=gc,r=n.observed,o=n.persistentFocus,s=n.autoFocus,l=n.shards,c=n.crossFrame,d=n.focusOptions,f=r||vc&&vc.portaledElement,m=document&&document.activeElement;if(f){var h=[f].concat(l.map(iB).filter(Boolean));if((!m||sB(m))&&(o||cB(c)||!rB()||!sc&&s)&&(f&&!(b5(h)||m&&dB(m,h)||lB(m))&&(document&&!sc&&m&&!s?(m.blur&&m.blur(),document.body.focus()):(t=C5(h,sc,{focusOptions:d}),vc={})),wd=!1,sc=document&&document.activeElement),document){var g=document&&document.activeElement,b=eB(h),y=b.map(function(x){var w=x.node;return w}).indexOf(g);y>-1&&(b.filter(function(x){var w=x.guard,S=x.node;return w&&S.dataset.focusAutoGuard}).forEach(function(x){var w=x.node;return w.removeAttribute("tabIndex")}),LS(y,b.length,1,b),LS(y,-1,-1,b))}}}return t},w5=function(t){Tm()&&t&&(t.stopPropagation(),t.preventDefault())},ly=function(){return ay(Tm)},fB=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||aB(r,n)},pB=function(){return null},S5=function(){wd="just",ay(function(){wd="meanwhile"})},mB=function(){document.addEventListener("focusin",w5),document.addEventListener("focusout",ly),window.addEventListener("blur",S5)},hB=function(){document.removeEventListener("focusin",w5),document.removeEventListener("focusout",ly),window.removeEventListener("blur",S5)};function gB(e){return e.filter(function(t){var n=t.disabled;return!n})}function vB(e){var t=e.slice(-1)[0];t&&!gc&&mB();var n=gc,r=n&&t&&t.id===n.id;gc=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var s=o.id;return s===n.id}).length||n.returnFocus(!t)),t?(sc=null,(!r||n.observed!==t.observed)&&t.onActivation(),Tm(),ay(Tm)):(hB(),sc=null)}o5.assignSyncMedium(fB);s5.assignMedium(ly);yz.assignMedium(function(e){return e({moveFocusInside:C5,focusInside:b5})});const bB=Iz(gB,vB)(pB);var k5=i.forwardRef(function(t,n){return i.createElement(a5,bn({sideCar:bB,ref:n},t))}),j5=a5.propTypes||{};j5.sideCar;iz(j5,["sideCar"]);k5.propTypes={};const FS=k5;function _5(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function iy(e){var t;if(!_5(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function xB(e){var t,n;return(n=(t=I5(e))==null?void 0:t.defaultView)!=null?n:window}function I5(e){return _5(e)?e.ownerDocument:document}function yB(e){return I5(e).activeElement}function CB(e){const t=e.ownerDocument.defaultView||window,{overflow:n,overflowX:r,overflowY:o}=t.getComputedStyle(e);return/auto|scroll|overlay|hidden/.test(n+o+r)}function wB(e){return e.localName==="html"?e:e.assignedSlot||e.parentElement||e.ownerDocument.documentElement}function P5(e){return["html","body","#document"].includes(e.localName)?e.ownerDocument.body:iy(e)&&CB(e)?e:P5(wB(e))}var E5=e=>e.hasAttribute("tabindex"),SB=e=>E5(e)&&e.tabIndex===-1;function kB(e){return!!e.getAttribute("disabled")||!!e.getAttribute("aria-disabled")}function M5(e){return e.parentElement&&M5(e.parentElement)?!0:e.hidden}function jB(e){const t=e.getAttribute("contenteditable");return t!=="false"&&t!=null}function O5(e){if(!iy(e)||M5(e)||kB(e))return!1;const{localName:t}=e;if(["input","select","textarea","button"].indexOf(t)>=0)return!0;const r={a:()=>e.hasAttribute("href"),audio:()=>e.hasAttribute("controls"),video:()=>e.hasAttribute("controls")};return t in r?r[t]():jB(e)?!0:E5(e)}function _B(e){return e?iy(e)&&O5(e)&&!SB(e):!1}var IB=["input:not(:disabled):not([disabled])","select:not(:disabled):not([disabled])","textarea:not(:disabled):not([disabled])","embed","iframe","object","a[href]","area[href]","button:not(:disabled):not([disabled])","[tabindex]","audio[controls]","video[controls]","*[tabindex]:not([aria-disabled])","*[contenteditable]"],PB=IB.join(),EB=e=>e.offsetWidth>0&&e.offsetHeight>0;function D5(e){const t=Array.from(e.querySelectorAll(PB));return t.unshift(e),t.filter(n=>O5(n)&&EB(n))}var zS,MB=(zS=FS.default)!=null?zS:FS,R5=e=>{const{initialFocusRef:t,finalFocusRef:n,contentRef:r,restoreFocus:o,children:s,isDisabled:l,autoFocus:c,persistentFocus:d,lockFocusAcrossFrames:f}=e,m=i.useCallback(()=>{t!=null&&t.current?t.current.focus():r!=null&&r.current&&D5(r.current).length===0&&requestAnimationFrame(()=>{var y;(y=r.current)==null||y.focus()})},[t,r]),h=i.useCallback(()=>{var b;(b=n==null?void 0:n.current)==null||b.focus()},[n]),g=o&&!n;return a.jsx(MB,{crossFrame:f,persistentFocus:d,autoFocus:c,disabled:l,onActivation:m,onDeactivation:h,returnFocus:g,children:s})};R5.displayName="FocusLock";var OB=FL?i.useLayoutEffect:i.useEffect;function ib(e,t=[]){const n=i.useRef(e);return OB(()=>{n.current=e}),i.useCallback((...r)=>{var o;return(o=n.current)==null?void 0:o.call(n,...r)},t)}function DB(e,t,n,r){const o=ib(t);return i.useEffect(()=>{var s;const l=(s=Rw(n))!=null?s:document;if(t)return l.addEventListener(e,o,r),()=>{l.removeEventListener(e,o,r)}},[e,n,r,o,t]),()=>{var s;((s=Rw(n))!=null?s:document).removeEventListener(e,o,r)}}function RB(e,t){const n=i.useId();return i.useMemo(()=>e||[t,n].filter(Boolean).join("-"),[e,t,n])}function AB(e,t){const n=e!==void 0;return[n,n&&typeof e<"u"?e:t]}function sr(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=ib(n),l=ib(t),[c,d]=i.useState(e.defaultIsOpen||!1),[f,m]=AB(r,c),h=RB(o,"disclosure"),g=i.useCallback(()=>{f||d(!1),l==null||l()},[f,l]),b=i.useCallback(()=>{f||d(!0),s==null||s()},[f,s]),y=i.useCallback(()=>{(m?g:b)()},[m,b,g]);return{isOpen:!!m,onOpen:b,onClose:g,onToggle:y,isControlled:f,getButtonProps:(x={})=>({...x,"aria-expanded":m,"aria-controls":h,onClick:ER(x.onClick,y)}),getDisclosureProps:(x={})=>({...x,hidden:!m,id:h})}}var[TB,NB]=Kt({name:"InputGroupStylesContext",errorMessage:`useInputGroupStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),cy=_e(function(t,n){const r=Xn("Input",t),{children:o,className:s,...l}=cn(t),c=et("chakra-input__group",s),d={},f=rg(o),m=r.field;f.forEach(g=>{var b,y;r&&(m&&g.type.id==="InputLeftElement"&&(d.paddingStart=(b=m.height)!=null?b:m.h),m&&g.type.id==="InputRightElement"&&(d.paddingEnd=(y=m.height)!=null?y:m.h),g.type.id==="InputRightAddon"&&(d.borderEndRadius=0),g.type.id==="InputLeftAddon"&&(d.borderStartRadius=0))});const h=f.map(g=>{var b,y;const x=vI({size:((b=g.props)==null?void 0:b.size)||t.size,variant:((y=g.props)==null?void 0:y.variant)||t.variant});return g.type.id!=="Input"?i.cloneElement(g,x):i.cloneElement(g,Object.assign(x,d,g.props))});return a.jsx(je.div,{className:c,ref:n,__css:{width:"100%",display:"flex",position:"relative",isolation:"isolate",...r.group},"data-group":!0,...l,children:a.jsx(TB,{value:r,children:h})})});cy.displayName="InputGroup";var $B=je("div",{baseStyle:{display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",top:"0",zIndex:2}}),ag=_e(function(t,n){var r,o;const{placement:s="left",...l}=t,c=NB(),d=c.field,m={[s==="left"?"insetStart":"insetEnd"]:"0",width:(r=d==null?void 0:d.height)!=null?r:d==null?void 0:d.h,height:(o=d==null?void 0:d.height)!=null?o:d==null?void 0:d.h,fontSize:d==null?void 0:d.fontSize,...c.element};return a.jsx($B,{ref:n,__css:m,...l})});ag.id="InputElement";ag.displayName="InputElement";var A5=_e(function(t,n){const{className:r,...o}=t,s=et("chakra-input__left-element",r);return a.jsx(ag,{ref:n,placement:"left",className:s,...o})});A5.id="InputLeftElement";A5.displayName="InputLeftElement";var lg=_e(function(t,n){const{className:r,...o}=t,s=et("chakra-input__right-element",r);return a.jsx(ag,{ref:n,placement:"right",className:s,...o})});lg.id="InputRightElement";lg.displayName="InputRightElement";var Qc=_e(function(t,n){const{htmlSize:r,...o}=t,s=Xn("Input",o),l=cn(o),c=Kx(l),d=et("chakra-input",t.className);return a.jsx(je.input,{size:r,...c,__css:s.field,ref:n,className:d})});Qc.displayName="Input";Qc.id="Input";var ig=_e(function(t,n){const r=ml("Link",t),{className:o,isExternal:s,...l}=cn(t);return a.jsx(je.a,{target:s?"_blank":void 0,rel:s?"noopener":void 0,ref:n,className:et("chakra-link",o),...l,__css:r})});ig.displayName="Link";var[LB,T5]=Kt({name:"ListStylesContext",errorMessage:`useListStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),uy=_e(function(t,n){const r=Xn("List",t),{children:o,styleType:s="none",stylePosition:l,spacing:c,...d}=cn(t),f=rg(o),h=c?{["& > *:not(style) ~ *:not(style)"]:{mt:c}}:{};return a.jsx(LB,{value:r,children:a.jsx(je.ul,{ref:n,listStyleType:s,listStylePosition:l,role:"list",__css:{...r.container,...h},...d,children:f})})});uy.displayName="List";var N5=_e((e,t)=>{const{as:n,...r}=e;return a.jsx(uy,{ref:t,as:"ol",styleType:"decimal",marginStart:"1em",...r})});N5.displayName="OrderedList";var cg=_e(function(t,n){const{as:r,...o}=t;return a.jsx(uy,{ref:n,as:"ul",styleType:"initial",marginStart:"1em",...o})});cg.displayName="UnorderedList";var ts=_e(function(t,n){const r=T5();return a.jsx(je.li,{ref:n,...t,__css:r.item})});ts.displayName="ListItem";var FB=_e(function(t,n){const r=T5();return a.jsx(An,{ref:n,role:"presentation",...t,__css:r.icon})});FB.displayName="ListIcon";var sl=_e(function(t,n){const{templateAreas:r,gap:o,rowGap:s,columnGap:l,column:c,row:d,autoFlow:f,autoRows:m,templateRows:h,autoColumns:g,templateColumns:b,...y}=t,x={display:"grid",gridTemplateAreas:r,gridGap:o,gridRowGap:s,gridColumnGap:l,gridAutoColumns:g,gridColumn:c,gridRow:d,gridAutoFlow:f,gridAutoRows:m,gridTemplateRows:h,gridTemplateColumns:b};return a.jsx(je.div,{ref:n,__css:x,...y})});sl.displayName="Grid";function $5(e,t){return Array.isArray(e)?e.map(n=>n===null?null:t(n)):T1(e)?Object.keys(e).reduce((n,r)=>(n[r]=t(e[r]),n),{}):e!=null?t(e):null}var Wr=je("div",{baseStyle:{flex:1,justifySelf:"stretch",alignSelf:"stretch"}});Wr.displayName="Spacer";var L5=e=>a.jsx(je.div,{className:"chakra-stack__item",...e,__css:{display:"inline-block",flex:"0 0 auto",minWidth:0,...e.__css}});L5.displayName="StackItem";function zB(e){const{spacing:t,direction:n}=e,r={column:{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},"column-reverse":{my:t,mx:0,borderLeftWidth:0,borderBottomWidth:"1px"},row:{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0},"row-reverse":{mx:t,my:0,borderLeftWidth:"1px",borderBottomWidth:0}};return{"&":$5(n,o=>r[o])}}var dy=_e((e,t)=>{const{isInline:n,direction:r,align:o,justify:s,spacing:l="0.5rem",wrap:c,children:d,divider:f,className:m,shouldWrapChildren:h,...g}=e,b=n?"row":r??"column",y=i.useMemo(()=>zB({spacing:l,direction:b}),[l,b]),x=!!f,w=!h&&!x,S=i.useMemo(()=>{const _=rg(d);return w?_:_.map((I,E)=>{const M=typeof I.key<"u"?I.key:E,D=E+1===_.length,N=h?a.jsx(L5,{children:I},M):I;if(!x)return N;const O=i.cloneElement(f,{__css:y}),T=D?null:O;return a.jsxs(i.Fragment,{children:[N,T]},M)})},[f,y,x,w,h,d]),j=et("chakra-stack",m);return a.jsx(je.div,{ref:t,display:"flex",alignItems:o,justifyContent:s,flexDirection:b,flexWrap:c,gap:x?void 0:l,className:j,...g,children:S})});dy.displayName="Stack";var F5=_e((e,t)=>a.jsx(dy,{align:"center",...e,direction:"column",ref:t}));F5.displayName="VStack";var ug=_e((e,t)=>a.jsx(dy,{align:"center",...e,direction:"row",ref:t}));ug.displayName="HStack";function BS(e){return $5(e,t=>t==="auto"?"auto":`span ${t}/span ${t}`)}var Sd=_e(function(t,n){const{area:r,colSpan:o,colStart:s,colEnd:l,rowEnd:c,rowSpan:d,rowStart:f,...m}=t,h=vI({gridArea:r,gridColumn:BS(o),gridRow:BS(d),gridColumnStart:s,gridColumnEnd:l,gridRowStart:f,gridRowEnd:c});return a.jsx(je.div,{ref:n,__css:h,...m})});Sd.displayName="GridItem";var Sa=_e(function(t,n){const r=ml("Badge",t),{className:o,...s}=cn(t);return a.jsx(je.span,{ref:n,className:et("chakra-badge",t.className),...s,__css:{display:"inline-block",whiteSpace:"nowrap",verticalAlign:"middle",...r}})});Sa.displayName="Badge";var On=_e(function(t,n){const{borderLeftWidth:r,borderBottomWidth:o,borderTopWidth:s,borderRightWidth:l,borderWidth:c,borderStyle:d,borderColor:f,...m}=ml("Divider",t),{className:h,orientation:g="horizontal",__css:b,...y}=cn(t),x={vertical:{borderLeftWidth:r||l||c||"1px",height:"100%"},horizontal:{borderBottomWidth:o||s||c||"1px",width:"100%"}};return a.jsx(je.hr,{ref:n,"aria-orientation":g,...y,__css:{...m,border:"0",borderColor:f,borderStyle:d,...x[g],...b},className:et("chakra-divider",h)})});On.displayName="Divider";function BB(e){const{key:t}=e;return t.length===1||t.length>1&&/[^a-zA-Z0-9]/.test(t)}function HB(e={}){const{timeout:t=300,preventDefault:n=()=>!0}=e,[r,o]=i.useState([]),s=i.useRef(),l=()=>{s.current&&(clearTimeout(s.current),s.current=null)},c=()=>{l(),s.current=setTimeout(()=>{o([]),s.current=null},t)};i.useEffect(()=>l,[]);function d(f){return m=>{if(m.key==="Backspace"){const h=[...r];h.pop(),o(h);return}if(BB(m)){const h=r.concat(m.key);n(m)&&(m.preventDefault(),m.stopPropagation()),o(h),f(h.join("")),c()}}}return d}function WB(e,t,n,r){if(t==null)return r;if(!r)return e.find(l=>n(l).toLowerCase().startsWith(t.toLowerCase()));const o=e.filter(s=>n(s).toLowerCase().startsWith(t.toLowerCase()));if(o.length>0){let s;return o.includes(r)?(s=o.indexOf(r)+1,s===o.length&&(s=0),o[s]):(s=e.indexOf(o[0]),e[s])}return r}function VB(){const e=i.useRef(new Map),t=e.current,n=i.useCallback((o,s,l,c)=>{e.current.set(l,{type:s,el:o,options:c}),o.addEventListener(s,l,c)},[]),r=i.useCallback((o,s,l,c)=>{o.removeEventListener(s,l,c),e.current.delete(l)},[]);return i.useEffect(()=>()=>{t.forEach((o,s)=>{r(o.el,o.type,s,o.options)})},[r,t]),{add:n,remove:r}}function Wv(e){const t=e.target,{tagName:n,isContentEditable:r}=t;return n!=="INPUT"&&n!=="TEXTAREA"&&r!==!0}function z5(e={}){const{ref:t,isDisabled:n,isFocusable:r,clickOnEnter:o=!0,clickOnSpace:s=!0,onMouseDown:l,onMouseUp:c,onClick:d,onKeyDown:f,onKeyUp:m,tabIndex:h,onMouseOver:g,onMouseLeave:b,...y}=e,[x,w]=i.useState(!0),[S,j]=i.useState(!1),_=VB(),I=V=>{V&&V.tagName!=="BUTTON"&&w(!1)},E=x?h:h||0,M=n&&!r,D=i.useCallback(V=>{if(n){V.stopPropagation(),V.preventDefault();return}V.currentTarget.focus(),d==null||d(V)},[n,d]),R=i.useCallback(V=>{S&&Wv(V)&&(V.preventDefault(),V.stopPropagation(),j(!1),_.remove(document,"keyup",R,!1))},[S,_]),N=i.useCallback(V=>{if(f==null||f(V),n||V.defaultPrevented||V.metaKey||!Wv(V.nativeEvent)||x)return;const se=o&&V.key==="Enter";s&&V.key===" "&&(V.preventDefault(),j(!0)),se&&(V.preventDefault(),V.currentTarget.click()),_.add(document,"keyup",R,!1)},[n,x,f,o,s,_,R]),O=i.useCallback(V=>{if(m==null||m(V),n||V.defaultPrevented||V.metaKey||!Wv(V.nativeEvent)||x)return;s&&V.key===" "&&(V.preventDefault(),j(!1),V.currentTarget.click())},[s,x,n,m]),T=i.useCallback(V=>{V.button===0&&(j(!1),_.remove(document,"mouseup",T,!1))},[_]),U=i.useCallback(V=>{if(V.button!==0)return;if(n){V.stopPropagation(),V.preventDefault();return}x||j(!0),V.currentTarget.focus({preventScroll:!0}),_.add(document,"mouseup",T,!1),l==null||l(V)},[n,x,l,_,T]),G=i.useCallback(V=>{V.button===0&&(x||j(!1),c==null||c(V))},[c,x]),q=i.useCallback(V=>{if(n){V.preventDefault();return}g==null||g(V)},[n,g]),Y=i.useCallback(V=>{S&&(V.preventDefault(),j(!1)),b==null||b(V)},[S,b]),Q=Et(t,I);return x?{...y,ref:Q,type:"button","aria-disabled":M?void 0:n,disabled:M,onClick:D,onMouseDown:l,onMouseUp:c,onKeyUp:m,onKeyDown:f,onMouseOver:g,onMouseLeave:b}:{...y,ref:Q,role:"button","data-active":ut(S),"aria-disabled":n?"true":void 0,tabIndex:M?void 0:E,onClick:D,onMouseDown:U,onMouseUp:G,onKeyUp:O,onKeyDown:N,onMouseOver:q,onMouseLeave:Y}}function UB(e){const t=e.current;if(!t)return!1;const n=yB(t);return!n||t.contains(n)?!1:!!_B(n)}function B5(e,t){const{shouldFocus:n,visible:r,focusRef:o}=t,s=n&&!r;ba(()=>{if(!s||UB(e))return;const l=(o==null?void 0:o.current)||e.current;let c;if(l)return c=requestAnimationFrame(()=>{l.focus({preventScroll:!0})}),()=>{cancelAnimationFrame(c)}},[s,e,o])}var GB={preventScroll:!0,shouldFocus:!1};function KB(e,t=GB){const{focusRef:n,preventScroll:r,shouldFocus:o,visible:s}=t,l=qB(e)?e.current:e,c=o&&s,d=i.useRef(c),f=i.useRef(s);dc(()=>{!f.current&&s&&(d.current=c),f.current=s},[s,c]);const m=i.useCallback(()=>{if(!(!s||!l||!d.current)&&(d.current=!1,!l.contains(document.activeElement)))if(n!=null&&n.current)requestAnimationFrame(()=>{var h;(h=n.current)==null||h.focus({preventScroll:r})});else{const h=D5(l);h.length>0&&requestAnimationFrame(()=>{h[0].focus({preventScroll:r})})}},[s,r,l,n]);ba(()=>{m()},[m]),Ul(l,"transitionend",m)}function qB(e){return"current"in e}var Li=(e,t)=>({var:e,varRef:t?`var(${e}, ${t})`:`var(${e})`}),Fn={arrowShadowColor:Li("--popper-arrow-shadow-color"),arrowSize:Li("--popper-arrow-size","8px"),arrowSizeHalf:Li("--popper-arrow-size-half"),arrowBg:Li("--popper-arrow-bg"),transformOrigin:Li("--popper-transform-origin"),arrowOffset:Li("--popper-arrow-offset")};function XB(e){if(e.includes("top"))return"1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("bottom"))return"-1px -1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("right"))return"-1px 1px 0px 0 var(--popper-arrow-shadow-color)";if(e.includes("left"))return"1px -1px 0px 0 var(--popper-arrow-shadow-color)"}var QB={top:"bottom center","top-start":"bottom left","top-end":"bottom right",bottom:"top center","bottom-start":"top left","bottom-end":"top right",left:"right center","left-start":"right top","left-end":"right bottom",right:"left center","right-start":"left top","right-end":"left bottom"},YB=e=>QB[e],HS={scroll:!0,resize:!0};function ZB(e){let t;return typeof e=="object"?t={enabled:!0,options:{...HS,...e}}:t={enabled:e,options:HS},t}var JB={name:"matchWidth",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:({state:e})=>{e.styles.popper.width=`${e.rects.reference.width}px`},effect:({state:e})=>()=>{const t=e.elements.reference;e.elements.popper.style.width=`${t.offsetWidth}px`}},eH={name:"transformOrigin",enabled:!0,phase:"write",fn:({state:e})=>{WS(e)},effect:({state:e})=>()=>{WS(e)}},WS=e=>{e.elements.popper.style.setProperty(Fn.transformOrigin.var,YB(e.placement))},tH={name:"positionArrow",enabled:!0,phase:"afterWrite",fn:({state:e})=>{nH(e)}},nH=e=>{var t;if(!e.placement)return;const n=rH(e.placement);if((t=e.elements)!=null&&t.arrow&&n){Object.assign(e.elements.arrow.style,{[n.property]:n.value,width:Fn.arrowSize.varRef,height:Fn.arrowSize.varRef,zIndex:-1});const r={[Fn.arrowSizeHalf.var]:`calc(${Fn.arrowSize.varRef} / 2 - 1px)`,[Fn.arrowOffset.var]:`calc(${Fn.arrowSizeHalf.varRef} * -1)`};for(const o in r)e.elements.arrow.style.setProperty(o,r[o])}},rH=e=>{if(e.startsWith("top"))return{property:"bottom",value:Fn.arrowOffset.varRef};if(e.startsWith("bottom"))return{property:"top",value:Fn.arrowOffset.varRef};if(e.startsWith("left"))return{property:"right",value:Fn.arrowOffset.varRef};if(e.startsWith("right"))return{property:"left",value:Fn.arrowOffset.varRef}},oH={name:"innerArrow",enabled:!0,phase:"main",requires:["arrow"],fn:({state:e})=>{VS(e)},effect:({state:e})=>()=>{VS(e)}},VS=e=>{if(!e.elements.arrow)return;const t=e.elements.arrow.querySelector("[data-popper-arrow-inner]");if(!t)return;const n=XB(e.placement);n&&t.style.setProperty("--popper-arrow-default-shadow",n),Object.assign(t.style,{transform:"rotate(45deg)",background:Fn.arrowBg.varRef,top:0,left:0,width:"100%",height:"100%",position:"absolute",zIndex:"inherit",boxShadow:"var(--popper-arrow-shadow, var(--popper-arrow-default-shadow))"})},sH={"start-start":{ltr:"left-start",rtl:"right-start"},"start-end":{ltr:"left-end",rtl:"right-end"},"end-start":{ltr:"right-start",rtl:"left-start"},"end-end":{ltr:"right-end",rtl:"left-end"},start:{ltr:"left",rtl:"right"},end:{ltr:"right",rtl:"left"}},aH={"auto-start":"auto-end","auto-end":"auto-start","top-start":"top-end","top-end":"top-start","bottom-start":"bottom-end","bottom-end":"bottom-start"};function lH(e,t="ltr"){var n,r;const o=((n=sH[e])==null?void 0:n[t])||e;return t==="ltr"?o:(r=aH[e])!=null?r:o}var Lr="top",_o="bottom",Io="right",Fr="left",fy="auto",tf=[Lr,_o,Io,Fr],Ic="start",kd="end",iH="clippingParents",H5="viewport",Lu="popper",cH="reference",US=tf.reduce(function(e,t){return e.concat([t+"-"+Ic,t+"-"+kd])},[]),W5=[].concat(tf,[fy]).reduce(function(e,t){return e.concat([t,t+"-"+Ic,t+"-"+kd])},[]),uH="beforeRead",dH="read",fH="afterRead",pH="beforeMain",mH="main",hH="afterMain",gH="beforeWrite",vH="write",bH="afterWrite",xH=[uH,dH,fH,pH,mH,hH,gH,vH,bH];function Es(e){return e?(e.nodeName||"").toLowerCase():null}function so(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ei(e){var t=so(e).Element;return e instanceof t||e instanceof Element}function So(e){var t=so(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function py(e){if(typeof ShadowRoot>"u")return!1;var t=so(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function yH(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!So(s)||!Es(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(l){var c=o[l];c===!1?s.removeAttribute(l):s.setAttribute(l,c===!0?"":c)}))})}function CH(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],s=t.attributes[r]||{},l=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),c=l.reduce(function(d,f){return d[f]="",d},{});!So(o)||!Es(o)||(Object.assign(o.style,c),Object.keys(s).forEach(function(d){o.removeAttribute(d)}))})}}const wH={name:"applyStyles",enabled:!0,phase:"write",fn:yH,effect:CH,requires:["computeStyles"]};function Is(e){return e.split("-")[0]}var Gl=Math.max,Nm=Math.min,Pc=Math.round;function cb(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function V5(){return!/^((?!chrome|android).)*safari/i.test(cb())}function Ec(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),o=1,s=1;t&&So(e)&&(o=e.offsetWidth>0&&Pc(r.width)/e.offsetWidth||1,s=e.offsetHeight>0&&Pc(r.height)/e.offsetHeight||1);var l=ei(e)?so(e):window,c=l.visualViewport,d=!V5()&&n,f=(r.left+(d&&c?c.offsetLeft:0))/o,m=(r.top+(d&&c?c.offsetTop:0))/s,h=r.width/o,g=r.height/s;return{width:h,height:g,top:m,right:f+h,bottom:m+g,left:f,x:f,y:m}}function my(e){var t=Ec(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function U5(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&py(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function ca(e){return so(e).getComputedStyle(e)}function SH(e){return["table","td","th"].indexOf(Es(e))>=0}function gl(e){return((ei(e)?e.ownerDocument:e.document)||window.document).documentElement}function dg(e){return Es(e)==="html"?e:e.assignedSlot||e.parentNode||(py(e)?e.host:null)||gl(e)}function GS(e){return!So(e)||ca(e).position==="fixed"?null:e.offsetParent}function kH(e){var t=/firefox/i.test(cb()),n=/Trident/i.test(cb());if(n&&So(e)){var r=ca(e);if(r.position==="fixed")return null}var o=dg(e);for(py(o)&&(o=o.host);So(o)&&["html","body"].indexOf(Es(o))<0;){var s=ca(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function nf(e){for(var t=so(e),n=GS(e);n&&SH(n)&&ca(n).position==="static";)n=GS(n);return n&&(Es(n)==="html"||Es(n)==="body"&&ca(n).position==="static")?t:n||kH(e)||t}function hy(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function ad(e,t,n){return Gl(e,Nm(t,n))}function jH(e,t,n){var r=ad(e,t,n);return r>n?n:r}function G5(){return{top:0,right:0,bottom:0,left:0}}function K5(e){return Object.assign({},G5(),e)}function q5(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var _H=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,K5(typeof t!="number"?t:q5(t,tf))};function IH(e){var t,n=e.state,r=e.name,o=e.options,s=n.elements.arrow,l=n.modifiersData.popperOffsets,c=Is(n.placement),d=hy(c),f=[Fr,Io].indexOf(c)>=0,m=f?"height":"width";if(!(!s||!l)){var h=_H(o.padding,n),g=my(s),b=d==="y"?Lr:Fr,y=d==="y"?_o:Io,x=n.rects.reference[m]+n.rects.reference[d]-l[d]-n.rects.popper[m],w=l[d]-n.rects.reference[d],S=nf(s),j=S?d==="y"?S.clientHeight||0:S.clientWidth||0:0,_=x/2-w/2,I=h[b],E=j-g[m]-h[y],M=j/2-g[m]/2+_,D=ad(I,M,E),R=d;n.modifiersData[r]=(t={},t[R]=D,t.centerOffset=D-M,t)}}function PH(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||U5(t.elements.popper,o)&&(t.elements.arrow=o))}const EH={name:"arrow",enabled:!0,phase:"main",fn:IH,effect:PH,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Mc(e){return e.split("-")[1]}var MH={top:"auto",right:"auto",bottom:"auto",left:"auto"};function OH(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:Pc(n*o)/o||0,y:Pc(r*o)/o||0}}function KS(e){var t,n=e.popper,r=e.popperRect,o=e.placement,s=e.variation,l=e.offsets,c=e.position,d=e.gpuAcceleration,f=e.adaptive,m=e.roundOffsets,h=e.isFixed,g=l.x,b=g===void 0?0:g,y=l.y,x=y===void 0?0:y,w=typeof m=="function"?m({x:b,y:x}):{x:b,y:x};b=w.x,x=w.y;var S=l.hasOwnProperty("x"),j=l.hasOwnProperty("y"),_=Fr,I=Lr,E=window;if(f){var M=nf(n),D="clientHeight",R="clientWidth";if(M===so(n)&&(M=gl(n),ca(M).position!=="static"&&c==="absolute"&&(D="scrollHeight",R="scrollWidth")),M=M,o===Lr||(o===Fr||o===Io)&&s===kd){I=_o;var N=h&&M===E&&E.visualViewport?E.visualViewport.height:M[D];x-=N-r.height,x*=d?1:-1}if(o===Fr||(o===Lr||o===_o)&&s===kd){_=Io;var O=h&&M===E&&E.visualViewport?E.visualViewport.width:M[R];b-=O-r.width,b*=d?1:-1}}var T=Object.assign({position:c},f&&MH),U=m===!0?OH({x:b,y:x},so(n)):{x:b,y:x};if(b=U.x,x=U.y,d){var G;return Object.assign({},T,(G={},G[I]=j?"0":"",G[_]=S?"0":"",G.transform=(E.devicePixelRatio||1)<=1?"translate("+b+"px, "+x+"px)":"translate3d("+b+"px, "+x+"px, 0)",G))}return Object.assign({},T,(t={},t[I]=j?x+"px":"",t[_]=S?b+"px":"",t.transform="",t))}function DH(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,s=n.adaptive,l=s===void 0?!0:s,c=n.roundOffsets,d=c===void 0?!0:c,f={placement:Is(t.placement),variation:Mc(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,KS(Object.assign({},f,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:l,roundOffsets:d})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,KS(Object.assign({},f,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:d})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const RH={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:DH,data:{}};var jp={passive:!0};function AH(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,s=o===void 0?!0:o,l=r.resize,c=l===void 0?!0:l,d=so(t.elements.popper),f=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&f.forEach(function(m){m.addEventListener("scroll",n.update,jp)}),c&&d.addEventListener("resize",n.update,jp),function(){s&&f.forEach(function(m){m.removeEventListener("scroll",n.update,jp)}),c&&d.removeEventListener("resize",n.update,jp)}}const TH={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:AH,data:{}};var NH={left:"right",right:"left",bottom:"top",top:"bottom"};function am(e){return e.replace(/left|right|bottom|top/g,function(t){return NH[t]})}var $H={start:"end",end:"start"};function qS(e){return e.replace(/start|end/g,function(t){return $H[t]})}function gy(e){var t=so(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function vy(e){return Ec(gl(e)).left+gy(e).scrollLeft}function LH(e,t){var n=so(e),r=gl(e),o=n.visualViewport,s=r.clientWidth,l=r.clientHeight,c=0,d=0;if(o){s=o.width,l=o.height;var f=V5();(f||!f&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:l,x:c+vy(e),y:d}}function FH(e){var t,n=gl(e),r=gy(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=Gl(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),l=Gl(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),c=-r.scrollLeft+vy(e),d=-r.scrollTop;return ca(o||n).direction==="rtl"&&(c+=Gl(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:l,x:c,y:d}}function by(e){var t=ca(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function X5(e){return["html","body","#document"].indexOf(Es(e))>=0?e.ownerDocument.body:So(e)&&by(e)?e:X5(dg(e))}function ld(e,t){var n;t===void 0&&(t=[]);var r=X5(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=so(r),l=o?[s].concat(s.visualViewport||[],by(r)?r:[]):r,c=t.concat(l);return o?c:c.concat(ld(dg(l)))}function ub(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function zH(e,t){var n=Ec(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function XS(e,t,n){return t===H5?ub(LH(e,n)):ei(t)?zH(t,n):ub(FH(gl(e)))}function BH(e){var t=ld(dg(e)),n=["absolute","fixed"].indexOf(ca(e).position)>=0,r=n&&So(e)?nf(e):e;return ei(r)?t.filter(function(o){return ei(o)&&U5(o,r)&&Es(o)!=="body"}):[]}function HH(e,t,n,r){var o=t==="clippingParents"?BH(e):[].concat(t),s=[].concat(o,[n]),l=s[0],c=s.reduce(function(d,f){var m=XS(e,f,r);return d.top=Gl(m.top,d.top),d.right=Nm(m.right,d.right),d.bottom=Nm(m.bottom,d.bottom),d.left=Gl(m.left,d.left),d},XS(e,l,r));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}function Q5(e){var t=e.reference,n=e.element,r=e.placement,o=r?Is(r):null,s=r?Mc(r):null,l=t.x+t.width/2-n.width/2,c=t.y+t.height/2-n.height/2,d;switch(o){case Lr:d={x:l,y:t.y-n.height};break;case _o:d={x:l,y:t.y+t.height};break;case Io:d={x:t.x+t.width,y:c};break;case Fr:d={x:t.x-n.width,y:c};break;default:d={x:t.x,y:t.y}}var f=o?hy(o):null;if(f!=null){var m=f==="y"?"height":"width";switch(s){case Ic:d[f]=d[f]-(t[m]/2-n[m]/2);break;case kd:d[f]=d[f]+(t[m]/2-n[m]/2);break}}return d}function jd(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,s=n.strategy,l=s===void 0?e.strategy:s,c=n.boundary,d=c===void 0?iH:c,f=n.rootBoundary,m=f===void 0?H5:f,h=n.elementContext,g=h===void 0?Lu:h,b=n.altBoundary,y=b===void 0?!1:b,x=n.padding,w=x===void 0?0:x,S=K5(typeof w!="number"?w:q5(w,tf)),j=g===Lu?cH:Lu,_=e.rects.popper,I=e.elements[y?j:g],E=HH(ei(I)?I:I.contextElement||gl(e.elements.popper),d,m,l),M=Ec(e.elements.reference),D=Q5({reference:M,element:_,strategy:"absolute",placement:o}),R=ub(Object.assign({},_,D)),N=g===Lu?R:M,O={top:E.top-N.top+S.top,bottom:N.bottom-E.bottom+S.bottom,left:E.left-N.left+S.left,right:N.right-E.right+S.right},T=e.modifiersData.offset;if(g===Lu&&T){var U=T[o];Object.keys(O).forEach(function(G){var q=[Io,_o].indexOf(G)>=0?1:-1,Y=[Lr,_o].indexOf(G)>=0?"y":"x";O[G]+=U[Y]*q})}return O}function WH(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,s=n.rootBoundary,l=n.padding,c=n.flipVariations,d=n.allowedAutoPlacements,f=d===void 0?W5:d,m=Mc(r),h=m?c?US:US.filter(function(y){return Mc(y)===m}):tf,g=h.filter(function(y){return f.indexOf(y)>=0});g.length===0&&(g=h);var b=g.reduce(function(y,x){return y[x]=jd(e,{placement:x,boundary:o,rootBoundary:s,padding:l})[Is(x)],y},{});return Object.keys(b).sort(function(y,x){return b[y]-b[x]})}function VH(e){if(Is(e)===fy)return[];var t=am(e);return[qS(e),t,qS(t)]}function UH(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,l=n.altAxis,c=l===void 0?!0:l,d=n.fallbackPlacements,f=n.padding,m=n.boundary,h=n.rootBoundary,g=n.altBoundary,b=n.flipVariations,y=b===void 0?!0:b,x=n.allowedAutoPlacements,w=t.options.placement,S=Is(w),j=S===w,_=d||(j||!y?[am(w)]:VH(w)),I=[w].concat(_).reduce(function(re,A){return re.concat(Is(A)===fy?WH(t,{placement:A,boundary:m,rootBoundary:h,padding:f,flipVariations:y,allowedAutoPlacements:x}):A)},[]),E=t.rects.reference,M=t.rects.popper,D=new Map,R=!0,N=I[0],O=0;O=0,Y=q?"width":"height",Q=jd(t,{placement:T,boundary:m,rootBoundary:h,altBoundary:g,padding:f}),V=q?G?Io:Fr:G?_o:Lr;E[Y]>M[Y]&&(V=am(V));var se=am(V),ee=[];if(s&&ee.push(Q[U]<=0),c&&ee.push(Q[V]<=0,Q[se]<=0),ee.every(function(re){return re})){N=T,R=!1;break}D.set(T,ee)}if(R)for(var le=y?3:1,ae=function(A){var L=I.find(function(K){var ne=D.get(K);if(ne)return ne.slice(0,A).every(function(z){return z})});if(L)return N=L,"break"},ce=le;ce>0;ce--){var J=ae(ce);if(J==="break")break}t.placement!==N&&(t.modifiersData[r]._skip=!0,t.placement=N,t.reset=!0)}}const GH={name:"flip",enabled:!0,phase:"main",fn:UH,requiresIfExists:["offset"],data:{_skip:!1}};function QS(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function YS(e){return[Lr,Io,_o,Fr].some(function(t){return e[t]>=0})}function KH(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,l=jd(t,{elementContext:"reference"}),c=jd(t,{altBoundary:!0}),d=QS(l,r),f=QS(c,o,s),m=YS(d),h=YS(f);t.modifiersData[n]={referenceClippingOffsets:d,popperEscapeOffsets:f,isReferenceHidden:m,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":h})}const qH={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:KH};function XH(e,t,n){var r=Is(e),o=[Fr,Lr].indexOf(r)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,l=s[0],c=s[1];return l=l||0,c=(c||0)*o,[Fr,Io].indexOf(r)>=0?{x:c,y:l}:{x:l,y:c}}function QH(e){var t=e.state,n=e.options,r=e.name,o=n.offset,s=o===void 0?[0,0]:o,l=W5.reduce(function(m,h){return m[h]=XH(h,t.rects,s),m},{}),c=l[t.placement],d=c.x,f=c.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=f),t.modifiersData[r]=l}const YH={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:QH};function ZH(e){var t=e.state,n=e.name;t.modifiersData[n]=Q5({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const JH={name:"popperOffsets",enabled:!0,phase:"read",fn:ZH,data:{}};function eW(e){return e==="x"?"y":"x"}function tW(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=o===void 0?!0:o,l=n.altAxis,c=l===void 0?!1:l,d=n.boundary,f=n.rootBoundary,m=n.altBoundary,h=n.padding,g=n.tether,b=g===void 0?!0:g,y=n.tetherOffset,x=y===void 0?0:y,w=jd(t,{boundary:d,rootBoundary:f,padding:h,altBoundary:m}),S=Is(t.placement),j=Mc(t.placement),_=!j,I=hy(S),E=eW(I),M=t.modifiersData.popperOffsets,D=t.rects.reference,R=t.rects.popper,N=typeof x=="function"?x(Object.assign({},t.rects,{placement:t.placement})):x,O=typeof N=="number"?{mainAxis:N,altAxis:N}:Object.assign({mainAxis:0,altAxis:0},N),T=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,U={x:0,y:0};if(M){if(s){var G,q=I==="y"?Lr:Fr,Y=I==="y"?_o:Io,Q=I==="y"?"height":"width",V=M[I],se=V+w[q],ee=V-w[Y],le=b?-R[Q]/2:0,ae=j===Ic?D[Q]:R[Q],ce=j===Ic?-R[Q]:-D[Q],J=t.elements.arrow,re=b&&J?my(J):{width:0,height:0},A=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:G5(),L=A[q],K=A[Y],ne=ad(0,D[Q],re[Q]),z=_?D[Q]/2-le-ne-L-O.mainAxis:ae-ne-L-O.mainAxis,oe=_?-D[Q]/2+le+ne+K+O.mainAxis:ce+ne+K+O.mainAxis,X=t.elements.arrow&&nf(t.elements.arrow),Z=X?I==="y"?X.clientTop||0:X.clientLeft||0:0,me=(G=T==null?void 0:T[I])!=null?G:0,ve=V+z-me-Z,de=V+oe-me,ke=ad(b?Nm(se,ve):se,V,b?Gl(ee,de):ee);M[I]=ke,U[I]=ke-V}if(c){var we,Re=I==="x"?Lr:Fr,Qe=I==="x"?_o:Io,$e=M[E],vt=E==="y"?"height":"width",it=$e+w[Re],ot=$e-w[Qe],Ce=[Lr,Fr].indexOf(S)!==-1,Me=(we=T==null?void 0:T[E])!=null?we:0,qe=Ce?it:$e-D[vt]-R[vt]-Me+O.altAxis,dt=Ce?$e+D[vt]+R[vt]-Me-O.altAxis:ot,ye=b&&Ce?jH(qe,$e,dt):ad(b?qe:it,$e,b?dt:ot);M[E]=ye,U[E]=ye-$e}t.modifiersData[r]=U}}const nW={name:"preventOverflow",enabled:!0,phase:"main",fn:tW,requiresIfExists:["offset"]};function rW(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function oW(e){return e===so(e)||!So(e)?gy(e):rW(e)}function sW(e){var t=e.getBoundingClientRect(),n=Pc(t.width)/e.offsetWidth||1,r=Pc(t.height)/e.offsetHeight||1;return n!==1||r!==1}function aW(e,t,n){n===void 0&&(n=!1);var r=So(t),o=So(t)&&sW(t),s=gl(t),l=Ec(e,o,n),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(r||!r&&!n)&&((Es(t)!=="body"||by(s))&&(c=oW(t)),So(t)?(d=Ec(t,!0),d.x+=t.clientLeft,d.y+=t.clientTop):s&&(d.x=vy(s))),{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function lW(e){var t=new Map,n=new Set,r=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var l=[].concat(s.requires||[],s.requiresIfExists||[]);l.forEach(function(c){if(!n.has(c)){var d=t.get(c);d&&o(d)}}),r.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),r}function iW(e){var t=lW(e);return xH.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function cW(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function uW(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var ZS={placement:"bottom",modifiers:[],strategy:"absolute"};function JS(){for(var e=arguments.length,t=new Array(e),n=0;n{}),_=i.useCallback(()=>{var O;!t||!y.current||!x.current||((O=j.current)==null||O.call(j),w.current=pW(y.current,x.current,{placement:S,modifiers:[oH,tH,eH,{...JB,enabled:!!g},{name:"eventListeners",...ZB(l)},{name:"arrow",options:{padding:s}},{name:"offset",options:{offset:c??[0,d]}},{name:"flip",enabled:!!f,options:{padding:8}},{name:"preventOverflow",enabled:!!h,options:{boundary:m}},...n??[]],strategy:o}),w.current.forceUpdate(),j.current=w.current.destroy)},[S,t,n,g,l,s,c,d,f,h,m,o]);i.useEffect(()=>()=>{var O;!y.current&&!x.current&&((O=w.current)==null||O.destroy(),w.current=null)},[]);const I=i.useCallback(O=>{y.current=O,_()},[_]),E=i.useCallback((O={},T=null)=>({...O,ref:Et(I,T)}),[I]),M=i.useCallback(O=>{x.current=O,_()},[_]),D=i.useCallback((O={},T=null)=>({...O,ref:Et(M,T),style:{...O.style,position:o,minWidth:g?void 0:"max-content",inset:"0 auto auto 0"}}),[o,M,g]),R=i.useCallback((O={},T=null)=>{const{size:U,shadowColor:G,bg:q,style:Y,...Q}=O;return{...Q,ref:T,"data-popper-arrow":"",style:mW(O)}},[]),N=i.useCallback((O={},T=null)=>({...O,ref:T,"data-popper-arrow-inner":""}),[]);return{update(){var O;(O=w.current)==null||O.update()},forceUpdate(){var O;(O=w.current)==null||O.forceUpdate()},transformOrigin:Fn.transformOrigin.varRef,referenceRef:I,popperRef:M,getPopperProps:D,getArrowProps:R,getArrowInnerProps:N,getReferenceProps:E}}function mW(e){const{size:t,shadowColor:n,bg:r,style:o}=e,s={...o,position:"absolute"};return t&&(s["--popper-arrow-size"]=t),n&&(s["--popper-arrow-shadow-color"]=n),r&&(s["--popper-arrow-bg"]=r),s}function yy(e={}){const{onClose:t,onOpen:n,isOpen:r,id:o}=e,s=gn(n),l=gn(t),[c,d]=i.useState(e.defaultIsOpen||!1),f=r!==void 0?r:c,m=r!==void 0,h=i.useId(),g=o??`disclosure-${h}`,b=i.useCallback(()=>{m||d(!1),l==null||l()},[m,l]),y=i.useCallback(()=>{m||d(!0),s==null||s()},[m,s]),x=i.useCallback(()=>{f?b():y()},[f,y,b]);function w(j={}){return{...j,"aria-expanded":f,"aria-controls":g,onClick(_){var I;(I=j.onClick)==null||I.call(j,_),x()}}}function S(j={}){return{...j,hidden:!f,id:g}}return{isOpen:f,onOpen:y,onClose:b,onToggle:x,isControlled:m,getButtonProps:w,getDisclosureProps:S}}function hW(e){const{ref:t,handler:n,enabled:r=!0}=e,o=gn(n),l=i.useRef({isPointerDown:!1,ignoreEmulatedMouseEvents:!1}).current;i.useEffect(()=>{if(!r)return;const c=h=>{Vv(h,t)&&(l.isPointerDown=!0)},d=h=>{if(l.ignoreEmulatedMouseEvents){l.ignoreEmulatedMouseEvents=!1;return}l.isPointerDown&&n&&Vv(h,t)&&(l.isPointerDown=!1,o(h))},f=h=>{l.ignoreEmulatedMouseEvents=!0,n&&l.isPointerDown&&Vv(h,t)&&(l.isPointerDown=!1,o(h))},m=Y5(t.current);return m.addEventListener("mousedown",c,!0),m.addEventListener("mouseup",d,!0),m.addEventListener("touchstart",c,!0),m.addEventListener("touchend",f,!0),()=>{m.removeEventListener("mousedown",c,!0),m.removeEventListener("mouseup",d,!0),m.removeEventListener("touchstart",c,!0),m.removeEventListener("touchend",f,!0)}},[n,t,o,l,r])}function Vv(e,t){var n;const r=e.target;return r&&!Y5(r).contains(r)?!1:!((n=t.current)!=null&&n.contains(r))}function Y5(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function Z5(e){const{isOpen:t,ref:n}=e,[r,o]=i.useState(t),[s,l]=i.useState(!1);return i.useEffect(()=>{s||(o(t),l(!0))},[t,s,r]),Ul(()=>n.current,"animationend",()=>{o(t)}),{present:!(t?!1:!r),onComplete(){var d;const f=xB(n.current),m=new f.CustomEvent("animationend",{bubbles:!0});(d=n.current)==null||d.dispatchEvent(m)}}}function Cy(e){const{wasSelected:t,enabled:n,isSelected:r,mode:o="unmount"}=e;return!!(!n||r||o==="keepMounted"&&t)}var[gW,vW,bW,xW]=Vx(),[yW,rf]=Kt({strict:!1,name:"MenuContext"});function CW(e,...t){const n=i.useId(),r=e||n;return i.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}function J5(e){var t;return(t=e==null?void 0:e.ownerDocument)!=null?t:document}function e4(e){return J5(e).activeElement===e}function wW(e={}){const{id:t,closeOnSelect:n=!0,closeOnBlur:r=!0,initialFocusRef:o,autoSelect:s=!0,isLazy:l,isOpen:c,defaultIsOpen:d,onClose:f,onOpen:m,placement:h="bottom-start",lazyBehavior:g="unmount",direction:b,computePositionOnMount:y=!1,...x}=e,w=i.useRef(null),S=i.useRef(null),j=bW(),_=i.useCallback(()=>{requestAnimationFrame(()=>{var J;(J=w.current)==null||J.focus({preventScroll:!1})})},[]),I=i.useCallback(()=>{const J=setTimeout(()=>{var re;if(o)(re=o.current)==null||re.focus();else{const A=j.firstEnabled();A&&G(A.index)}});se.current.add(J)},[j,o]),E=i.useCallback(()=>{const J=setTimeout(()=>{const re=j.lastEnabled();re&&G(re.index)});se.current.add(J)},[j]),M=i.useCallback(()=>{m==null||m(),s?I():_()},[s,I,_,m]),{isOpen:D,onOpen:R,onClose:N,onToggle:O}=yy({isOpen:c,defaultIsOpen:d,onClose:f,onOpen:M});hW({enabled:D&&r,ref:w,handler:J=>{var re;(re=S.current)!=null&&re.contains(J.target)||N()}});const T=xy({...x,enabled:D||y,placement:h,direction:b}),[U,G]=i.useState(-1);ba(()=>{D||G(-1)},[D]),B5(w,{focusRef:S,visible:D,shouldFocus:!0});const q=Z5({isOpen:D,ref:w}),[Y,Q]=CW(t,"menu-button","menu-list"),V=i.useCallback(()=>{R(),_()},[R,_]),se=i.useRef(new Set([]));i.useEffect(()=>{const J=se.current;return()=>{J.forEach(re=>clearTimeout(re)),J.clear()}},[]);const ee=i.useCallback(()=>{R(),I()},[I,R]),le=i.useCallback(()=>{R(),E()},[R,E]),ae=i.useCallback(()=>{var J,re;const A=J5(w.current),L=(J=w.current)==null?void 0:J.contains(A.activeElement);if(!(D&&!L))return;const ne=(re=j.item(U))==null?void 0:re.node;ne==null||ne.focus({preventScroll:!0})},[D,U,j]),ce=i.useRef(null);return{openAndFocusMenu:V,openAndFocusFirstItem:ee,openAndFocusLastItem:le,onTransitionEnd:ae,unstable__animationState:q,descendants:j,popper:T,buttonId:Y,menuId:Q,forceUpdate:T.forceUpdate,orientation:"vertical",isOpen:D,onToggle:O,onOpen:R,onClose:N,menuRef:w,buttonRef:S,focusedIndex:U,closeOnSelect:n,closeOnBlur:r,autoSelect:s,setFocusedIndex:G,isLazy:l,lazyBehavior:g,initialFocusRef:o,rafId:ce}}function SW(e={},t=null){const n=rf(),{onToggle:r,popper:o,openAndFocusFirstItem:s,openAndFocusLastItem:l}=n,c=i.useCallback(d=>{const f=d.key,h={Enter:s,ArrowDown:s,ArrowUp:l}[f];h&&(d.preventDefault(),d.stopPropagation(),h(d))},[s,l]);return{...e,ref:Et(n.buttonRef,t,o.referenceRef),id:n.buttonId,"data-active":ut(n.isOpen),"aria-expanded":n.isOpen,"aria-haspopup":"menu","aria-controls":n.menuId,onClick:ze(e.onClick,r),onKeyDown:ze(e.onKeyDown,c)}}function db(e){var t;return IW(e)&&!!((t=e==null?void 0:e.getAttribute("role"))!=null&&t.startsWith("menuitem"))}function kW(e={},t=null){const n=rf();if(!n)throw new Error("useMenuContext: context is undefined. Seems you forgot to wrap component within
");const{focusedIndex:r,setFocusedIndex:o,menuRef:s,isOpen:l,onClose:c,menuId:d,isLazy:f,lazyBehavior:m,unstable__animationState:h}=n,g=vW(),b=HB({preventDefault:S=>S.key!==" "&&db(S.target)}),y=i.useCallback(S=>{if(!S.currentTarget.contains(S.target))return;const j=S.key,I={Tab:M=>M.preventDefault(),Escape:c,ArrowDown:()=>{const M=g.nextEnabled(r);M&&o(M.index)},ArrowUp:()=>{const M=g.prevEnabled(r);M&&o(M.index)}}[j];if(I){S.preventDefault(),I(S);return}const E=b(M=>{const D=WB(g.values(),M,R=>{var N,O;return(O=(N=R==null?void 0:R.node)==null?void 0:N.textContent)!=null?O:""},g.item(r));if(D){const R=g.indexOf(D.node);o(R)}});db(S.target)&&E(S)},[g,r,b,c,o]),x=i.useRef(!1);l&&(x.current=!0);const w=Cy({wasSelected:x.current,enabled:f,mode:m,isSelected:h.present});return{...e,ref:Et(s,t),children:w?e.children:null,tabIndex:-1,role:"menu",id:d,style:{...e.style,transformOrigin:"var(--popper-transform-origin)"},"aria-orientation":"vertical",onKeyDown:ze(e.onKeyDown,y)}}function jW(e={}){const{popper:t,isOpen:n}=rf();return t.getPopperProps({...e,style:{visibility:n?"visible":"hidden",...e.style}})}function _W(e={},t=null){const{onMouseEnter:n,onMouseMove:r,onMouseLeave:o,onClick:s,onFocus:l,isDisabled:c,isFocusable:d,closeOnSelect:f,type:m,...h}=e,g=rf(),{setFocusedIndex:b,focusedIndex:y,closeOnSelect:x,onClose:w,menuRef:S,isOpen:j,menuId:_,rafId:I}=g,E=i.useRef(null),M=`${_}-menuitem-${i.useId()}`,{index:D,register:R}=xW({disabled:c&&!d}),N=i.useCallback(V=>{n==null||n(V),!c&&b(D)},[b,D,c,n]),O=i.useCallback(V=>{r==null||r(V),E.current&&!e4(E.current)&&N(V)},[N,r]),T=i.useCallback(V=>{o==null||o(V),!c&&b(-1)},[b,c,o]),U=i.useCallback(V=>{s==null||s(V),db(V.currentTarget)&&(f??x)&&w()},[w,s,x,f]),G=i.useCallback(V=>{l==null||l(V),b(D)},[b,l,D]),q=D===y,Y=c&&!d;ba(()=>{if(j)return q&&!Y&&E.current?(I.current&&cancelAnimationFrame(I.current),I.current=requestAnimationFrame(()=>{var V;(V=E.current)==null||V.focus({preventScroll:!0}),I.current=null})):S.current&&!e4(S.current)&&S.current.focus({preventScroll:!0}),()=>{I.current&&cancelAnimationFrame(I.current)}},[q,Y,S,j]);const Q=z5({onClick:U,onFocus:G,onMouseEnter:N,onMouseMove:O,onMouseLeave:T,ref:Et(R,E,t),isDisabled:c,isFocusable:d});return{...h,...Q,type:m??Q.type,id:M,role:"menuitem",tabIndex:q?0:-1}}function IW(e){var t;if(!PW(e))return!1;const n=(t=e.ownerDocument.defaultView)!=null?t:window;return e instanceof n.HTMLElement}function PW(e){return e!=null&&typeof e=="object"&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}var[EW,li]=Kt({name:"MenuStylesContext",errorMessage:`useMenuStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),of=e=>{const{children:t}=e,n=Xn("Menu",e),r=cn(e),{direction:o}=Hd(),{descendants:s,...l}=wW({...r,direction:o}),c=i.useMemo(()=>l,[l]),{isOpen:d,onClose:f,forceUpdate:m}=c;return a.jsx(gW,{value:s,children:a.jsx(yW,{value:c,children:a.jsx(EW,{value:n,children:bx(t,{isOpen:d,onClose:f,forceUpdate:m})})})})};of.displayName="Menu";var e6=_e((e,t)=>{const n=li();return a.jsx(je.span,{ref:t,...e,__css:n.command,className:"chakra-menu__command"})});e6.displayName="MenuCommand";var MW=_e((e,t)=>{const{type:n,...r}=e,o=li(),s=r.as||n?n??void 0:"button",l=i.useMemo(()=>({textDecoration:"none",color:"inherit",userSelect:"none",display:"flex",width:"100%",alignItems:"center",textAlign:"start",flex:"0 0 auto",outline:0,...o.item}),[o.item]);return a.jsx(je.button,{ref:t,type:s,...r,__css:l})}),t6=e=>{const{className:t,children:n,...r}=e,o=li(),s=i.Children.only(n),l=i.isValidElement(s)?i.cloneElement(s,{focusable:"false","aria-hidden":!0,className:et("chakra-menu__icon",s.props.className)}):null,c=et("chakra-menu__icon-wrapper",t);return a.jsx(je.span,{className:c,...r,__css:o.icon,children:l})};t6.displayName="MenuIcon";var At=_e((e,t)=>{const{icon:n,iconSpacing:r="0.75rem",command:o,commandSpacing:s="0.75rem",children:l,...c}=e,d=_W(c,t),m=n||o?a.jsx("span",{style:{pointerEvents:"none",flex:1},children:l}):l;return a.jsxs(MW,{...d,className:et("chakra-menu__menuitem",d.className),children:[n&&a.jsx(t6,{fontSize:"0.8em",marginEnd:r,children:n}),m,o&&a.jsx(e6,{marginStart:s,children:o})]})});At.displayName="MenuItem";var OW={enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.2,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.1,easings:"easeOut"}}},DW=je(Mn.div),al=_e(function(t,n){var r,o;const{rootProps:s,motionProps:l,...c}=t,{isOpen:d,onTransitionEnd:f,unstable__animationState:m}=rf(),h=kW(c,n),g=jW(s),b=li();return a.jsx(je.div,{...g,__css:{zIndex:(o=t.zIndex)!=null?o:(r=b.list)==null?void 0:r.zIndex},children:a.jsx(DW,{variants:OW,initial:!1,animate:d?"enter":"exit",__css:{outline:0,...b.list},...l,className:et("chakra-menu__menu-list",h.className),...h,onUpdate:f,onAnimationComplete:Uh(m.onComplete,h.onAnimationComplete)})})});al.displayName="MenuList";var _d=_e((e,t)=>{const{title:n,children:r,className:o,...s}=e,l=et("chakra-menu__group__title",o),c=li();return a.jsxs("div",{ref:t,className:"chakra-menu__group",role:"group",children:[n&&a.jsx(je.p,{className:l,...s,__css:c.groupTitle,children:n}),r]})});_d.displayName="MenuGroup";var RW=_e((e,t)=>{const n=li();return a.jsx(je.button,{ref:t,...e,__css:{display:"inline-flex",appearance:"none",alignItems:"center",outline:0,...n.button}})}),sf=_e((e,t)=>{const{children:n,as:r,...o}=e,s=SW(o,t),l=r||RW;return a.jsx(l,{...s,className:et("chakra-menu__menu-button",e.className),children:a.jsx(je.span,{__css:{pointerEvents:"none",flex:"1 1 auto",minW:0},children:e.children})})});sf.displayName="MenuButton";var n6=e=>{const{className:t,...n}=e,r=li();return a.jsx(je.hr,{"aria-orientation":"horizontal",className:et("chakra-menu__divider",t),...n,__css:r.divider})};n6.displayName="MenuDivider";var AW={slideInBottom:{...Xu,custom:{offsetY:16,reverse:!0}},slideInRight:{...Xu,custom:{offsetX:16,reverse:!0}},slideInTop:{...Xu,custom:{offsetY:-16,reverse:!0}},slideInLeft:{...Xu,custom:{offsetX:-16,reverse:!0}},scale:{...R3,custom:{initialScale:.95,reverse:!0}},none:{}},TW=je(Mn.section),NW=e=>AW[e||"none"],r6=i.forwardRef((e,t)=>{const{preset:n,motionProps:r=NW(n),...o}=e;return a.jsx(TW,{ref:t,...r,...o})});r6.displayName="ModalTransition";var $W=Object.defineProperty,LW=(e,t,n)=>t in e?$W(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,FW=(e,t,n)=>(LW(e,typeof t!="symbol"?t+"":t,n),n),zW=class{constructor(){FW(this,"modals"),this.modals=new Map}add(e){return this.modals.set(e,this.modals.size+1),this.modals.size}remove(e){this.modals.delete(e)}isTopModal(e){return e?this.modals.get(e)===this.modals.size:!1}},fb=new zW;function o6(e,t){const[n,r]=i.useState(0);return i.useEffect(()=>{const o=e.current;if(o){if(t){const s=fb.add(o);r(s)}return()=>{fb.remove(o),r(0)}}},[t,e]),n}var BW=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Fi=new WeakMap,_p=new WeakMap,Ip={},Uv=0,s6=function(e){return e&&(e.host||s6(e.parentNode))},HW=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=s6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},WW=function(e,t,n,r){var o=HW(t,Array.isArray(e)?e:[e]);Ip[n]||(Ip[n]=new WeakMap);var s=Ip[n],l=[],c=new Set,d=new Set(o),f=function(h){!h||c.has(h)||(c.add(h),f(h.parentNode))};o.forEach(f);var m=function(h){!h||d.has(h)||Array.prototype.forEach.call(h.children,function(g){if(c.has(g))m(g);else{var b=g.getAttribute(r),y=b!==null&&b!=="false",x=(Fi.get(g)||0)+1,w=(s.get(g)||0)+1;Fi.set(g,x),s.set(g,w),l.push(g),x===1&&y&&_p.set(g,!0),w===1&&g.setAttribute(n,"true"),y||g.setAttribute(r,"true")}})};return m(t),c.clear(),Uv++,function(){l.forEach(function(h){var g=Fi.get(h)-1,b=s.get(h)-1;Fi.set(h,g),s.set(h,b),g||(_p.has(h)||h.removeAttribute(r),_p.delete(h)),b||h.removeAttribute(n)}),Uv--,Uv||(Fi=new WeakMap,Fi=new WeakMap,_p=new WeakMap,Ip={})}},VW=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||BW(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),WW(r,o,n,"aria-hidden")):function(){return null}};function UW(e){const{isOpen:t,onClose:n,id:r,closeOnOverlayClick:o=!0,closeOnEsc:s=!0,useInert:l=!0,onOverlayClick:c,onEsc:d}=e,f=i.useRef(null),m=i.useRef(null),[h,g,b]=KW(r,"chakra-modal","chakra-modal--header","chakra-modal--body");GW(f,t&&l);const y=o6(f,t),x=i.useRef(null),w=i.useCallback(N=>{x.current=N.target},[]),S=i.useCallback(N=>{N.key==="Escape"&&(N.stopPropagation(),s&&(n==null||n()),d==null||d())},[s,n,d]),[j,_]=i.useState(!1),[I,E]=i.useState(!1),M=i.useCallback((N={},O=null)=>({role:"dialog",...N,ref:Et(O,f),id:h,tabIndex:-1,"aria-modal":!0,"aria-labelledby":j?g:void 0,"aria-describedby":I?b:void 0,onClick:ze(N.onClick,T=>T.stopPropagation())}),[b,I,h,g,j]),D=i.useCallback(N=>{N.stopPropagation(),x.current===N.target&&fb.isTopModal(f.current)&&(o&&(n==null||n()),c==null||c())},[n,o,c]),R=i.useCallback((N={},O=null)=>({...N,ref:Et(O,m),onClick:ze(N.onClick,D),onKeyDown:ze(N.onKeyDown,S),onMouseDown:ze(N.onMouseDown,w)}),[S,w,D]);return{isOpen:t,onClose:n,headerId:g,bodyId:b,setBodyMounted:E,setHeaderMounted:_,dialogRef:f,overlayRef:m,getDialogProps:M,getDialogContainerProps:R,index:y}}function GW(e,t){const n=e.current;i.useEffect(()=>{if(!(!e.current||!t))return VW(e.current)},[t,e,n])}function KW(e,...t){const n=i.useId(),r=e||n;return i.useMemo(()=>t.map(o=>`${o}-${r}`),[r,t])}var[qW,Yc]=Kt({name:"ModalStylesContext",errorMessage:`useModalStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[XW,ti]=Kt({strict:!0,name:"ModalContext",errorMessage:"useModalContext: `context` is undefined. Seems you forgot to wrap modal components in ``"}),ni=e=>{const t={scrollBehavior:"outside",autoFocus:!0,trapFocus:!0,returnFocusOnClose:!0,blockScrollOnMount:!0,allowPinchZoom:!1,motionPreset:"scale",lockFocusAcrossFrames:!0,...e},{portalProps:n,children:r,autoFocus:o,trapFocus:s,initialFocusRef:l,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:f,allowPinchZoom:m,preserveScrollBarGap:h,motionPreset:g,lockFocusAcrossFrames:b,onCloseComplete:y}=t,x=Xn("Modal",t),S={...UW(t),autoFocus:o,trapFocus:s,initialFocusRef:l,finalFocusRef:c,returnFocusOnClose:d,blockScrollOnMount:f,allowPinchZoom:m,preserveScrollBarGap:h,motionPreset:g,lockFocusAcrossFrames:b};return a.jsx(XW,{value:S,children:a.jsx(qW,{value:x,children:a.jsx(hr,{onExitComplete:y,children:S.isOpen&&a.jsx(Uc,{...n,children:r})})})})};ni.displayName="Modal";var lm="right-scroll-bar-position",im="width-before-scroll-bar",QW="with-scroll-bars-hidden",YW="--removed-body-scroll-bar-size",a6=n5(),Gv=function(){},fg=i.forwardRef(function(e,t){var n=i.useRef(null),r=i.useState({onScrollCapture:Gv,onWheelCapture:Gv,onTouchMoveCapture:Gv}),o=r[0],s=r[1],l=e.forwardProps,c=e.children,d=e.className,f=e.removeScrollBar,m=e.enabled,h=e.shards,g=e.sideCar,b=e.noIsolation,y=e.inert,x=e.allowPinchZoom,w=e.as,S=w===void 0?"div":w,j=e.gapMode,_=J3(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noIsolation","inert","allowPinchZoom","as","gapMode"]),I=g,E=Z3([n,t]),M=ws(ws({},_),o);return i.createElement(i.Fragment,null,m&&i.createElement(I,{sideCar:a6,removeScrollBar:f,shards:h,noIsolation:b,inert:y,setCallbacks:s,allowPinchZoom:!!x,lockRef:n,gapMode:j}),l?i.cloneElement(i.Children.only(c),ws(ws({},M),{ref:E})):i.createElement(S,ws({},M,{className:d,ref:E}),c))});fg.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};fg.classNames={fullWidth:im,zeroRight:lm};var t4,ZW=function(){if(t4)return t4;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function JW(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=ZW();return t&&e.setAttribute("nonce",t),e}function eV(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function tV(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var nV=function(){var e=0,t=null;return{add:function(n){e==0&&(t=JW())&&(eV(t,n),tV(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},rV=function(){var e=nV();return function(t,n){i.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},l6=function(){var e=rV(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},oV={left:0,top:0,right:0,gap:0},Kv=function(e){return parseInt(e||"",10)||0},sV=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[Kv(n),Kv(r),Kv(o)]},aV=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return oV;var t=sV(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},lV=l6(),iV=function(e,t,n,r){var o=e.left,s=e.top,l=e.right,c=e.gap;return n===void 0&&(n="margin"),` + .`.concat(QW,` { + overflow: hidden `).concat(r,`; + padding-right: `).concat(c,"px ").concat(r,`; + } + body { + overflow: hidden `).concat(r,`; + overscroll-behavior: contain; + `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` + padding-left: `.concat(o,`px; + padding-top: `).concat(s,`px; + padding-right: `).concat(l,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(c,"px ").concat(r,`; + `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` + } + + .`).concat(lm,` { + right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(im,` { + margin-right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(lm," .").concat(lm,` { + right: 0 `).concat(r,`; + } + + .`).concat(im," .").concat(im,` { + margin-right: 0 `).concat(r,`; + } + + body { + `).concat(YW,": ").concat(c,`px; + } +`)},cV=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r,s=i.useMemo(function(){return aV(o)},[o]);return i.createElement(lV,{styles:iV(s,!t,o,n?"":"!important")})},pb=!1;if(typeof window<"u")try{var Pp=Object.defineProperty({},"passive",{get:function(){return pb=!0,!0}});window.addEventListener("test",Pp,Pp),window.removeEventListener("test",Pp,Pp)}catch{pb=!1}var zi=pb?{passive:!1}:!1,uV=function(e){return e.tagName==="TEXTAREA"},i6=function(e,t){var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!uV(e)&&n[t]==="visible")},dV=function(e){return i6(e,"overflowY")},fV=function(e){return i6(e,"overflowX")},n4=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=c6(e,r);if(o){var s=u6(e,r),l=s[1],c=s[2];if(l>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},pV=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},mV=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},c6=function(e,t){return e==="v"?dV(t):fV(t)},u6=function(e,t){return e==="v"?pV(t):mV(t)},hV=function(e,t){return e==="h"&&t==="rtl"?-1:1},gV=function(e,t,n,r,o){var s=hV(e,window.getComputedStyle(t).direction),l=s*r,c=n.target,d=t.contains(c),f=!1,m=l>0,h=0,g=0;do{var b=u6(e,c),y=b[0],x=b[1],w=b[2],S=x-w-s*y;(y||S)&&c6(e,c)&&(h+=S,g+=y),c instanceof ShadowRoot?c=c.host:c=c.parentNode}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(m&&(o&&Math.abs(h)<1||!o&&l>h)||!m&&(o&&Math.abs(g)<1||!o&&-l>g))&&(f=!0),f},Ep=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},r4=function(e){return[e.deltaX,e.deltaY]},o4=function(e){return e&&"current"in e?e.current:e},vV=function(e,t){return e[0]===t[0]&&e[1]===t[1]},bV=function(e){return` + .block-interactivity-`.concat(e,` {pointer-events: none;} + .allow-interactivity-`).concat(e,` {pointer-events: all;} +`)},xV=0,Bi=[];function yV(e){var t=i.useRef([]),n=i.useRef([0,0]),r=i.useRef(),o=i.useState(xV++)[0],s=i.useState(l6)[0],l=i.useRef(e);i.useEffect(function(){l.current=e},[e]),i.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var x=ob([e.lockRef.current],(e.shards||[]).map(o4),!0).filter(Boolean);return x.forEach(function(w){return w.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),x.forEach(function(w){return w.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=i.useCallback(function(x,w){if("touches"in x&&x.touches.length===2)return!l.current.allowPinchZoom;var S=Ep(x),j=n.current,_="deltaX"in x?x.deltaX:j[0]-S[0],I="deltaY"in x?x.deltaY:j[1]-S[1],E,M=x.target,D=Math.abs(_)>Math.abs(I)?"h":"v";if("touches"in x&&D==="h"&&M.type==="range")return!1;var R=n4(D,M);if(!R)return!0;if(R?E=D:(E=D==="v"?"h":"v",R=n4(D,M)),!R)return!1;if(!r.current&&"changedTouches"in x&&(_||I)&&(r.current=E),!E)return!0;var N=r.current||E;return gV(N,w,x,N==="h"?_:I,!0)},[]),d=i.useCallback(function(x){var w=x;if(!(!Bi.length||Bi[Bi.length-1]!==s)){var S="deltaY"in w?r4(w):Ep(w),j=t.current.filter(function(E){return E.name===w.type&&(E.target===w.target||w.target===E.shadowParent)&&vV(E.delta,S)})[0];if(j&&j.should){w.cancelable&&w.preventDefault();return}if(!j){var _=(l.current.shards||[]).map(o4).filter(Boolean).filter(function(E){return E.contains(w.target)}),I=_.length>0?c(w,_[0]):!l.current.noIsolation;I&&w.cancelable&&w.preventDefault()}}},[]),f=i.useCallback(function(x,w,S,j){var _={name:x,delta:w,target:S,should:j,shadowParent:CV(S)};t.current.push(_),setTimeout(function(){t.current=t.current.filter(function(I){return I!==_})},1)},[]),m=i.useCallback(function(x){n.current=Ep(x),r.current=void 0},[]),h=i.useCallback(function(x){f(x.type,r4(x),x.target,c(x,e.lockRef.current))},[]),g=i.useCallback(function(x){f(x.type,Ep(x),x.target,c(x,e.lockRef.current))},[]);i.useEffect(function(){return Bi.push(s),e.setCallbacks({onScrollCapture:h,onWheelCapture:h,onTouchMoveCapture:g}),document.addEventListener("wheel",d,zi),document.addEventListener("touchmove",d,zi),document.addEventListener("touchstart",m,zi),function(){Bi=Bi.filter(function(x){return x!==s}),document.removeEventListener("wheel",d,zi),document.removeEventListener("touchmove",d,zi),document.removeEventListener("touchstart",m,zi)}},[]);var b=e.removeScrollBar,y=e.inert;return i.createElement(i.Fragment,null,y?i.createElement(s,{styles:bV(o)}):null,b?i.createElement(cV,{gapMode:e.gapMode}):null)}function CV(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const wV=xz(a6,yV);var d6=i.forwardRef(function(e,t){return i.createElement(fg,ws({},e,{ref:t,sideCar:wV}))});d6.classNames=fg.classNames;const SV=d6;function kV(e){const{autoFocus:t,trapFocus:n,dialogRef:r,initialFocusRef:o,blockScrollOnMount:s,allowPinchZoom:l,finalFocusRef:c,returnFocusOnClose:d,preserveScrollBarGap:f,lockFocusAcrossFrames:m,isOpen:h}=ti(),[g,b]=MR();i.useEffect(()=>{!g&&b&&setTimeout(b)},[g,b]);const y=o6(r,h);return a.jsx(R5,{autoFocus:t,isDisabled:!n,initialFocusRef:o,finalFocusRef:c,restoreFocus:d,contentRef:r,lockFocusAcrossFrames:m,children:a.jsx(SV,{removeScrollBar:!f,allowPinchZoom:l,enabled:y===1&&s,forwardProps:!0,children:e.children})})}var ri=_e((e,t)=>{const{className:n,children:r,containerProps:o,motionProps:s,...l}=e,{getDialogProps:c,getDialogContainerProps:d}=ti(),f=c(l,t),m=d(o),h=et("chakra-modal__content",n),g=Yc(),b={display:"flex",flexDirection:"column",position:"relative",width:"100%",outline:0,...g.dialog},y={display:"flex",width:"100vw",height:"$100vh",position:"fixed",left:0,top:0,...g.dialogContainer},{motionPreset:x}=ti();return a.jsx(kV,{children:a.jsx(je.div,{...m,className:"chakra-modal__content-container",tabIndex:-1,__css:y,children:a.jsx(r6,{preset:x,motionProps:s,className:h,...f,__css:b,children:r})})})});ri.displayName="ModalContent";function Zc(e){const{leastDestructiveRef:t,...n}=e;return a.jsx(ni,{...n,initialFocusRef:t})}var Jc=_e((e,t)=>a.jsx(ri,{ref:t,role:"alertdialog",...e})),ls=_e((e,t)=>{const{className:n,...r}=e,o=et("chakra-modal__footer",n),l={display:"flex",alignItems:"center",justifyContent:"flex-end",...Yc().footer};return a.jsx(je.footer,{ref:t,...r,__css:l,className:o})});ls.displayName="ModalFooter";var Po=_e((e,t)=>{const{className:n,...r}=e,{headerId:o,setHeaderMounted:s}=ti();i.useEffect(()=>(s(!0),()=>s(!1)),[s]);const l=et("chakra-modal__header",n),d={flex:0,...Yc().header};return a.jsx(je.header,{ref:t,className:l,id:o,...r,__css:d})});Po.displayName="ModalHeader";var jV=je(Mn.div),Eo=_e((e,t)=>{const{className:n,transition:r,motionProps:o,...s}=e,l=et("chakra-modal__overlay",n),d={pos:"fixed",left:"0",top:"0",w:"100vw",h:"100vh",...Yc().overlay},{motionPreset:f}=ti(),h=o||(f==="none"?{}:D3);return a.jsx(jV,{...h,__css:d,ref:t,className:l,...s})});Eo.displayName="ModalOverlay";var Mo=_e((e,t)=>{const{className:n,...r}=e,{bodyId:o,setBodyMounted:s}=ti();i.useEffect(()=>(s(!0),()=>s(!1)),[s]);const l=et("chakra-modal__body",n),c=Yc();return a.jsx(je.div,{ref:t,className:l,id:o,...r,__css:c.body})});Mo.displayName="ModalBody";var af=_e((e,t)=>{const{onClick:n,className:r,...o}=e,{onClose:s}=ti(),l=et("chakra-modal__close-btn",r),c=Yc();return a.jsx(bI,{ref:t,__css:c.closeButton,className:l,onClick:ze(n,d=>{d.stopPropagation(),s()}),...o})});af.displayName="ModalCloseButton";var _V=e=>a.jsx(An,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M21,5H3C2.621,5,2.275,5.214,2.105,5.553C1.937,5.892,1.973,6.297,2.2,6.6l9,12 c0.188,0.252,0.485,0.4,0.8,0.4s0.611-0.148,0.8-0.4l9-12c0.228-0.303,0.264-0.708,0.095-1.047C21.725,5.214,21.379,5,21,5z"})}),IV=e=>a.jsx(An,{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M12.8,5.4c-0.377-0.504-1.223-0.504-1.6,0l-9,12c-0.228,0.303-0.264,0.708-0.095,1.047 C2.275,18.786,2.621,19,3,19h18c0.379,0,0.725-0.214,0.895-0.553c0.169-0.339,0.133-0.744-0.095-1.047L12.8,5.4z"})});function s4(e,t,n,r){i.useEffect(()=>{var o;if(!e.current||!r)return;const s=(o=e.current.ownerDocument.defaultView)!=null?o:window,l=Array.isArray(t)?t:[t],c=new s.MutationObserver(d=>{for(const f of d)f.type==="attributes"&&f.attributeName&&l.includes(f.attributeName)&&n(f)});return c.observe(e.current,{attributes:!0,attributeFilter:l}),()=>c.disconnect()})}function PV(e,t){const n=gn(e);i.useEffect(()=>{let r=null;const o=()=>n();return t!==null&&(r=window.setInterval(o,t)),()=>{r&&window.clearInterval(r)}},[t,n])}var EV=50,a4=300;function MV(e,t){const[n,r]=i.useState(!1),[o,s]=i.useState(null),[l,c]=i.useState(!0),d=i.useRef(null),f=()=>clearTimeout(d.current);PV(()=>{o==="increment"&&e(),o==="decrement"&&t()},n?EV:null);const m=i.useCallback(()=>{l&&e(),d.current=setTimeout(()=>{c(!1),r(!0),s("increment")},a4)},[e,l]),h=i.useCallback(()=>{l&&t(),d.current=setTimeout(()=>{c(!1),r(!0),s("decrement")},a4)},[t,l]),g=i.useCallback(()=>{c(!0),r(!1),f()},[]);return i.useEffect(()=>()=>f(),[]),{up:m,down:h,stop:g,isSpinning:n}}var OV=/^[Ee0-9+\-.]$/;function DV(e){return OV.test(e)}function RV(e,t){if(e.key==null)return!0;const n=e.ctrlKey||e.altKey||e.metaKey;return!(e.key.length===1)||n?!0:t(e.key)}function AV(e={}){const{focusInputOnChange:t=!0,clampValueOnBlur:n=!0,keepWithinRange:r=!0,min:o=Number.MIN_SAFE_INTEGER,max:s=Number.MAX_SAFE_INTEGER,step:l=1,isReadOnly:c,isDisabled:d,isRequired:f,isInvalid:m,pattern:h="[0-9]*(.[0-9]+)?",inputMode:g="decimal",allowMouseWheel:b,id:y,onChange:x,precision:w,name:S,"aria-describedby":j,"aria-label":_,"aria-labelledby":I,onFocus:E,onBlur:M,onInvalid:D,getAriaValueText:R,isValidCharacter:N,format:O,parse:T,...U}=e,G=gn(E),q=gn(M),Y=gn(D),Q=gn(N??DV),V=gn(R),se=ZF(e),{update:ee,increment:le,decrement:ae}=se,[ce,J]=i.useState(!1),re=!(c||d),A=i.useRef(null),L=i.useRef(null),K=i.useRef(null),ne=i.useRef(null),z=i.useCallback(ye=>ye.split("").filter(Q).join(""),[Q]),oe=i.useCallback(ye=>{var Ue;return(Ue=T==null?void 0:T(ye))!=null?Ue:ye},[T]),X=i.useCallback(ye=>{var Ue;return((Ue=O==null?void 0:O(ye))!=null?Ue:ye).toString()},[O]);ba(()=>{(se.valueAsNumber>s||se.valueAsNumber{if(!A.current)return;if(A.current.value!=se.value){const Ue=oe(A.current.value);se.setValue(z(Ue))}},[oe,z]);const Z=i.useCallback((ye=l)=>{re&&le(ye)},[le,re,l]),me=i.useCallback((ye=l)=>{re&&ae(ye)},[ae,re,l]),ve=MV(Z,me);s4(K,"disabled",ve.stop,ve.isSpinning),s4(ne,"disabled",ve.stop,ve.isSpinning);const de=i.useCallback(ye=>{if(ye.nativeEvent.isComposing)return;const st=oe(ye.currentTarget.value);ee(z(st)),L.current={start:ye.currentTarget.selectionStart,end:ye.currentTarget.selectionEnd}},[ee,z,oe]),ke=i.useCallback(ye=>{var Ue,st,mt;G==null||G(ye),L.current&&(ye.target.selectionStart=(st=L.current.start)!=null?st:(Ue=ye.currentTarget.value)==null?void 0:Ue.length,ye.currentTarget.selectionEnd=(mt=L.current.end)!=null?mt:ye.currentTarget.selectionStart)},[G]),we=i.useCallback(ye=>{if(ye.nativeEvent.isComposing)return;RV(ye,Q)||ye.preventDefault();const Ue=Re(ye)*l,st=ye.key,Pe={ArrowUp:()=>Z(Ue),ArrowDown:()=>me(Ue),Home:()=>ee(o),End:()=>ee(s)}[st];Pe&&(ye.preventDefault(),Pe(ye))},[Q,l,Z,me,ee,o,s]),Re=ye=>{let Ue=1;return(ye.metaKey||ye.ctrlKey)&&(Ue=.1),ye.shiftKey&&(Ue=10),Ue},Qe=i.useMemo(()=>{const ye=V==null?void 0:V(se.value);if(ye!=null)return ye;const Ue=se.value.toString();return Ue||void 0},[se.value,V]),$e=i.useCallback(()=>{let ye=se.value;if(se.value==="")return;/^[eE]/.test(se.value.toString())?se.setValue(""):(se.valueAsNumbers&&(ye=s),se.cast(ye))},[se,s,o]),vt=i.useCallback(()=>{J(!1),n&&$e()},[n,J,$e]),it=i.useCallback(()=>{t&&requestAnimationFrame(()=>{var ye;(ye=A.current)==null||ye.focus()})},[t]),ot=i.useCallback(ye=>{ye.preventDefault(),ve.up(),it()},[it,ve]),Ce=i.useCallback(ye=>{ye.preventDefault(),ve.down(),it()},[it,ve]);Ul(()=>A.current,"wheel",ye=>{var Ue,st;const Pe=((st=(Ue=A.current)==null?void 0:Ue.ownerDocument)!=null?st:document).activeElement===A.current;if(!b||!Pe)return;ye.preventDefault();const Ne=Re(ye)*l,kt=Math.sign(ye.deltaY);kt===-1?Z(Ne):kt===1&&me(Ne)},{passive:!1});const Me=i.useCallback((ye={},Ue=null)=>{const st=d||r&&se.isAtMax;return{...ye,ref:Et(Ue,K),role:"button",tabIndex:-1,onPointerDown:ze(ye.onPointerDown,mt=>{mt.button!==0||st||ot(mt)}),onPointerLeave:ze(ye.onPointerLeave,ve.stop),onPointerUp:ze(ye.onPointerUp,ve.stop),disabled:st,"aria-disabled":wo(st)}},[se.isAtMax,r,ot,ve.stop,d]),qe=i.useCallback((ye={},Ue=null)=>{const st=d||r&&se.isAtMin;return{...ye,ref:Et(Ue,ne),role:"button",tabIndex:-1,onPointerDown:ze(ye.onPointerDown,mt=>{mt.button!==0||st||Ce(mt)}),onPointerLeave:ze(ye.onPointerLeave,ve.stop),onPointerUp:ze(ye.onPointerUp,ve.stop),disabled:st,"aria-disabled":wo(st)}},[se.isAtMin,r,Ce,ve.stop,d]),dt=i.useCallback((ye={},Ue=null)=>{var st,mt,Pe,Ne;return{name:S,inputMode:g,type:"text",pattern:h,"aria-labelledby":I,"aria-label":_,"aria-describedby":j,id:y,disabled:d,...ye,readOnly:(st=ye.readOnly)!=null?st:c,"aria-readonly":(mt=ye.readOnly)!=null?mt:c,"aria-required":(Pe=ye.required)!=null?Pe:f,required:(Ne=ye.required)!=null?Ne:f,ref:Et(A,Ue),value:X(se.value),role:"spinbutton","aria-valuemin":o,"aria-valuemax":s,"aria-valuenow":Number.isNaN(se.valueAsNumber)?void 0:se.valueAsNumber,"aria-invalid":wo(m??se.isOutOfRange),"aria-valuetext":Qe,autoComplete:"off",autoCorrect:"off",onChange:ze(ye.onChange,de),onKeyDown:ze(ye.onKeyDown,we),onFocus:ze(ye.onFocus,ke,()=>J(!0)),onBlur:ze(ye.onBlur,q,vt)}},[S,g,h,I,_,X,j,y,d,f,c,m,se.value,se.valueAsNumber,se.isOutOfRange,o,s,Qe,de,we,ke,q,vt]);return{value:X(se.value),valueAsNumber:se.valueAsNumber,isFocused:ce,isDisabled:d,isReadOnly:c,getIncrementButtonProps:Me,getDecrementButtonProps:qe,getInputProps:dt,htmlProps:U}}var[TV,pg]=Kt({name:"NumberInputStylesContext",errorMessage:`useNumberInputStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),[NV,wy]=Kt({name:"NumberInputContext",errorMessage:"useNumberInputContext: `context` is undefined. Seems you forgot to wrap number-input's components within "}),mg=_e(function(t,n){const r=Xn("NumberInput",t),o=cn(t),s=qx(o),{htmlProps:l,...c}=AV(s),d=i.useMemo(()=>c,[c]);return a.jsx(NV,{value:d,children:a.jsx(TV,{value:r,children:a.jsx(je.div,{...l,ref:n,className:et("chakra-numberinput",t.className),__css:{position:"relative",zIndex:0,...r.root}})})})});mg.displayName="NumberInput";var hg=_e(function(t,n){const r=pg();return a.jsx(je.div,{"aria-hidden":!0,ref:n,...t,__css:{display:"flex",flexDirection:"column",position:"absolute",top:"0",insetEnd:"0px",margin:"1px",height:"calc(100% - 2px)",zIndex:1,...r.stepperGroup}})});hg.displayName="NumberInputStepper";var gg=_e(function(t,n){const{getInputProps:r}=wy(),o=r(t,n),s=pg();return a.jsx(je.input,{...o,className:et("chakra-numberinput__field",t.className),__css:{width:"100%",...s.field}})});gg.displayName="NumberInputField";var f6=je("div",{baseStyle:{display:"flex",justifyContent:"center",alignItems:"center",flex:1,transitionProperty:"common",transitionDuration:"normal",userSelect:"none",cursor:"pointer",lineHeight:"normal"}}),vg=_e(function(t,n){var r;const o=pg(),{getDecrementButtonProps:s}=wy(),l=s(t,n);return a.jsx(f6,{...l,__css:o.stepper,children:(r=t.children)!=null?r:a.jsx(_V,{})})});vg.displayName="NumberDecrementStepper";var bg=_e(function(t,n){var r;const{getIncrementButtonProps:o}=wy(),s=o(t,n),l=pg();return a.jsx(f6,{...s,__css:l.stepper,children:(r=t.children)!=null?r:a.jsx(IV,{})})});bg.displayName="NumberIncrementStepper";var[$V,ii]=Kt({name:"PopoverContext",errorMessage:"usePopoverContext: `context` is undefined. Seems you forgot to wrap all popover components within ``"}),[LV,xg]=Kt({name:"PopoverStylesContext",errorMessage:`usePopoverStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `});function yg(e){const t=i.Children.only(e.children),{getTriggerProps:n}=ii();return i.cloneElement(t,n(t.props,t.ref))}yg.displayName="PopoverTrigger";var Hi={click:"click",hover:"hover"};function FV(e={}){const{closeOnBlur:t=!0,closeOnEsc:n=!0,initialFocusRef:r,id:o,returnFocusOnClose:s=!0,autoFocus:l=!0,arrowSize:c,arrowShadowColor:d,trigger:f=Hi.click,openDelay:m=200,closeDelay:h=200,isLazy:g,lazyBehavior:b="unmount",computePositionOnMount:y,...x}=e,{isOpen:w,onClose:S,onOpen:j,onToggle:_}=yy(e),I=i.useRef(null),E=i.useRef(null),M=i.useRef(null),D=i.useRef(!1),R=i.useRef(!1);w&&(R.current=!0);const[N,O]=i.useState(!1),[T,U]=i.useState(!1),G=i.useId(),q=o??G,[Y,Q,V,se]=["popover-trigger","popover-content","popover-header","popover-body"].map(de=>`${de}-${q}`),{referenceRef:ee,getArrowProps:le,getPopperProps:ae,getArrowInnerProps:ce,forceUpdate:J}=xy({...x,enabled:w||!!y}),re=Z5({isOpen:w,ref:M});G3({enabled:w,ref:E}),B5(M,{focusRef:E,visible:w,shouldFocus:s&&f===Hi.click}),KB(M,{focusRef:r,visible:w,shouldFocus:l&&f===Hi.click});const A=Cy({wasSelected:R.current,enabled:g,mode:b,isSelected:re.present}),L=i.useCallback((de={},ke=null)=>{const we={...de,style:{...de.style,transformOrigin:Fn.transformOrigin.varRef,[Fn.arrowSize.var]:c?`${c}px`:void 0,[Fn.arrowShadowColor.var]:d},ref:Et(M,ke),children:A?de.children:null,id:Q,tabIndex:-1,role:"dialog",onKeyDown:ze(de.onKeyDown,Re=>{n&&Re.key==="Escape"&&S()}),onBlur:ze(de.onBlur,Re=>{const Qe=l4(Re),$e=qv(M.current,Qe),vt=qv(E.current,Qe);w&&t&&(!$e&&!vt)&&S()}),"aria-labelledby":N?V:void 0,"aria-describedby":T?se:void 0};return f===Hi.hover&&(we.role="tooltip",we.onMouseEnter=ze(de.onMouseEnter,()=>{D.current=!0}),we.onMouseLeave=ze(de.onMouseLeave,Re=>{Re.nativeEvent.relatedTarget!==null&&(D.current=!1,setTimeout(()=>S(),h))})),we},[A,Q,N,V,T,se,f,n,S,w,t,h,d,c]),K=i.useCallback((de={},ke=null)=>ae({...de,style:{visibility:w?"visible":"hidden",...de.style}},ke),[w,ae]),ne=i.useCallback((de,ke=null)=>({...de,ref:Et(ke,I,ee)}),[I,ee]),z=i.useRef(),oe=i.useRef(),X=i.useCallback(de=>{I.current==null&&ee(de)},[ee]),Z=i.useCallback((de={},ke=null)=>{const we={...de,ref:Et(E,ke,X),id:Y,"aria-haspopup":"dialog","aria-expanded":w,"aria-controls":Q};return f===Hi.click&&(we.onClick=ze(de.onClick,_)),f===Hi.hover&&(we.onFocus=ze(de.onFocus,()=>{z.current===void 0&&j()}),we.onBlur=ze(de.onBlur,Re=>{const Qe=l4(Re),$e=!qv(M.current,Qe);w&&t&&$e&&S()}),we.onKeyDown=ze(de.onKeyDown,Re=>{Re.key==="Escape"&&S()}),we.onMouseEnter=ze(de.onMouseEnter,()=>{D.current=!0,z.current=window.setTimeout(()=>j(),m)}),we.onMouseLeave=ze(de.onMouseLeave,()=>{D.current=!1,z.current&&(clearTimeout(z.current),z.current=void 0),oe.current=window.setTimeout(()=>{D.current===!1&&S()},h)})),we},[Y,w,Q,f,X,_,j,t,S,m,h]);i.useEffect(()=>()=>{z.current&&clearTimeout(z.current),oe.current&&clearTimeout(oe.current)},[]);const me=i.useCallback((de={},ke=null)=>({...de,id:V,ref:Et(ke,we=>{O(!!we)})}),[V]),ve=i.useCallback((de={},ke=null)=>({...de,id:se,ref:Et(ke,we=>{U(!!we)})}),[se]);return{forceUpdate:J,isOpen:w,onAnimationComplete:re.onComplete,onClose:S,getAnchorProps:ne,getArrowProps:le,getArrowInnerProps:ce,getPopoverPositionerProps:K,getPopoverProps:L,getTriggerProps:Z,getHeaderProps:me,getBodyProps:ve}}function qv(e,t){return e===t||(e==null?void 0:e.contains(t))}function l4(e){var t;const n=e.currentTarget.ownerDocument.activeElement;return(t=e.relatedTarget)!=null?t:n}function lf(e){const t=Xn("Popover",e),{children:n,...r}=cn(e),o=Hd(),s=FV({...r,direction:o.direction});return a.jsx($V,{value:s,children:a.jsx(LV,{value:t,children:bx(n,{isOpen:s.isOpen,onClose:s.onClose,forceUpdate:s.forceUpdate})})})}lf.displayName="Popover";function p6(e){const t=i.Children.only(e.children),{getAnchorProps:n}=ii();return i.cloneElement(t,n(t.props,t.ref))}p6.displayName="PopoverAnchor";var Xv=(e,t)=>t?`${e}.${t}, ${t}`:void 0;function m6(e){var t;const{bg:n,bgColor:r,backgroundColor:o,shadow:s,boxShadow:l,shadowColor:c}=e,{getArrowProps:d,getArrowInnerProps:f}=ii(),m=xg(),h=(t=n??r)!=null?t:o,g=s??l;return a.jsx(je.div,{...d(),className:"chakra-popover__arrow-positioner",children:a.jsx(je.div,{className:et("chakra-popover__arrow",e.className),...f(e),__css:{"--popper-arrow-shadow-color":Xv("colors",c),"--popper-arrow-bg":Xv("colors",h),"--popper-arrow-shadow":Xv("shadows",g),...m.arrow}})})}m6.displayName="PopoverArrow";var Cg=_e(function(t,n){const{getBodyProps:r}=ii(),o=xg();return a.jsx(je.div,{...r(t,n),className:et("chakra-popover__body",t.className),__css:o.body})});Cg.displayName="PopoverBody";var h6=_e(function(t,n){const{onClose:r}=ii(),o=xg();return a.jsx(bI,{size:"sm",onClick:r,className:et("chakra-popover__close-btn",t.className),__css:o.closeButton,ref:n,...t})});h6.displayName="PopoverCloseButton";function zV(e){if(e)return{enter:{...e.enter,visibility:"visible"},exit:{...e.exit,transitionEnd:{visibility:"hidden"}}}}var BV={exit:{opacity:0,scale:.95,transition:{duration:.1,ease:[.4,0,1,1]}},enter:{scale:1,opacity:1,transition:{duration:.15,ease:[0,0,.2,1]}}},HV=je(Mn.section),g6=_e(function(t,n){const{variants:r=BV,...o}=t,{isOpen:s}=ii();return a.jsx(HV,{ref:n,variants:zV(r),initial:!1,animate:s?"enter":"exit",...o})});g6.displayName="PopoverTransition";var cf=_e(function(t,n){const{rootProps:r,motionProps:o,...s}=t,{getPopoverProps:l,getPopoverPositionerProps:c,onAnimationComplete:d}=ii(),f=xg(),m={position:"relative",display:"flex",flexDirection:"column",...f.content};return a.jsx(je.div,{...c(r),__css:f.popper,className:"chakra-popover__popper",children:a.jsx(g6,{...o,...l(s,n),onAnimationComplete:Uh(d,s.onAnimationComplete),className:et("chakra-popover__content",t.className),__css:m})})});cf.displayName="PopoverContent";var mb=e=>a.jsx(je.circle,{cx:50,cy:50,r:42,fill:"transparent",...e});mb.displayName="Circle";function WV(e,t,n){return(e-t)*100/(n-t)}var VV=xa({"0%":{strokeDasharray:"1, 400",strokeDashoffset:"0"},"50%":{strokeDasharray:"400, 400",strokeDashoffset:"-100"},"100%":{strokeDasharray:"400, 400",strokeDashoffset:"-260"}}),UV=xa({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),GV=xa({"0%":{left:"-40%"},"100%":{left:"100%"}}),KV=xa({from:{backgroundPosition:"1rem 0"},to:{backgroundPosition:"0 0"}});function v6(e){const{value:t=0,min:n,max:r,valueText:o,getValueText:s,isIndeterminate:l,role:c="progressbar"}=e,d=WV(t,n,r);return{bind:{"data-indeterminate":l?"":void 0,"aria-valuemax":r,"aria-valuemin":n,"aria-valuenow":l?void 0:t,"aria-valuetext":(()=>{if(t!=null)return typeof s=="function"?s(t,d):o})(),role:c},percent:d,value:t}}var b6=e=>{const{size:t,isIndeterminate:n,...r}=e;return a.jsx(je.svg,{viewBox:"0 0 100 100",__css:{width:t,height:t,animation:n?`${UV} 2s linear infinite`:void 0},...r})};b6.displayName="Shape";var hb=_e((e,t)=>{var n;const{size:r="48px",max:o=100,min:s=0,valueText:l,getValueText:c,value:d,capIsRound:f,children:m,thickness:h="10px",color:g="#0078d4",trackColor:b="#edebe9",isIndeterminate:y,...x}=e,w=v6({min:s,max:o,value:d,valueText:l,getValueText:c,isIndeterminate:y}),S=y?void 0:((n=w.percent)!=null?n:0)*2.64,j=S==null?void 0:`${S} ${264-S}`,_=y?{css:{animation:`${VV} 1.5s linear infinite`}}:{strokeDashoffset:66,strokeDasharray:j,transitionProperty:"stroke-dasharray, stroke",transitionDuration:"0.6s",transitionTimingFunction:"ease"},I={display:"inline-block",position:"relative",verticalAlign:"middle",fontSize:r};return a.jsxs(je.div,{ref:t,className:"chakra-progress",...w.bind,...x,__css:I,children:[a.jsxs(b6,{size:r,isIndeterminate:y,children:[a.jsx(mb,{stroke:b,strokeWidth:h,className:"chakra-progress__track"}),a.jsx(mb,{stroke:g,strokeWidth:h,className:"chakra-progress__indicator",strokeLinecap:f?"round":void 0,opacity:w.value===0&&!y?0:void 0,..._})]}),m]})});hb.displayName="CircularProgress";var[qV,XV]=Kt({name:"ProgressStylesContext",errorMessage:`useProgressStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),QV=_e((e,t)=>{const{min:n,max:r,value:o,isIndeterminate:s,role:l,...c}=e,d=v6({value:o,min:n,max:r,isIndeterminate:s,role:l}),m={height:"100%",...XV().filledTrack};return a.jsx(je.div,{ref:t,style:{width:`${d.percent}%`,...c.style},...d.bind,...c,__css:m})}),x6=_e((e,t)=>{var n;const{value:r,min:o=0,max:s=100,hasStripe:l,isAnimated:c,children:d,borderRadius:f,isIndeterminate:m,"aria-label":h,"aria-labelledby":g,"aria-valuetext":b,title:y,role:x,...w}=cn(e),S=Xn("Progress",e),j=f??((n=S.track)==null?void 0:n.borderRadius),_={animation:`${KV} 1s linear infinite`},M={...!m&&l&&c&&_,...m&&{position:"absolute",willChange:"left",minWidth:"50%",animation:`${GV} 1s ease infinite normal none running`}},D={overflow:"hidden",position:"relative",...S.track};return a.jsx(je.div,{ref:t,borderRadius:j,__css:D,...w,children:a.jsxs(qV,{value:S,children:[a.jsx(QV,{"aria-label":h,"aria-labelledby":g,"aria-valuetext":b,min:o,max:s,value:r,isIndeterminate:m,css:M,borderRadius:j,title:y,role:x}),d]})})});x6.displayName="Progress";function YV(e){return e&&T1(e)&&T1(e.target)}function ZV(e={}){const{onChange:t,value:n,defaultValue:r,name:o,isDisabled:s,isFocusable:l,isNative:c,...d}=e,[f,m]=i.useState(r||""),h=typeof n<"u",g=h?n:f,b=i.useRef(null),y=i.useCallback(()=>{const E=b.current;if(!E)return;let M="input:not(:disabled):checked";const D=E.querySelector(M);if(D){D.focus();return}M="input:not(:disabled)";const R=E.querySelector(M);R==null||R.focus()},[]),w=`radio-${i.useId()}`,S=o||w,j=i.useCallback(E=>{const M=YV(E)?E.target.value:E;h||m(M),t==null||t(String(M))},[t,h]),_=i.useCallback((E={},M=null)=>({...E,ref:Et(M,b),role:"radiogroup"}),[]),I=i.useCallback((E={},M=null)=>({...E,ref:M,name:S,[c?"checked":"isChecked"]:g!=null?E.value===g:void 0,onChange(R){j(R)},"data-radiogroup":!0}),[c,S,j,g]);return{getRootProps:_,getRadioProps:I,name:S,ref:b,focus:y,setValue:m,value:g,onChange:j,isDisabled:s,isFocusable:l,htmlProps:d}}var[JV,y6]=Kt({name:"RadioGroupContext",strict:!1}),$m=_e((e,t)=>{const{colorScheme:n,size:r,variant:o,children:s,className:l,isDisabled:c,isFocusable:d,...f}=e,{value:m,onChange:h,getRootProps:g,name:b,htmlProps:y}=ZV(f),x=i.useMemo(()=>({name:b,size:r,onChange:h,colorScheme:n,value:m,variant:o,isDisabled:c,isFocusable:d}),[b,r,h,n,m,o,c,d]);return a.jsx(JV,{value:x,children:a.jsx(je.div,{...g(y,t),className:et("chakra-radio-group",l),children:s})})});$m.displayName="RadioGroup";var eU={border:"0",clip:"rect(0, 0, 0, 0)",height:"1px",width:"1px",margin:"-1px",padding:"0",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"};function tU(e={}){const{defaultChecked:t,isChecked:n,isFocusable:r,isDisabled:o,isReadOnly:s,isRequired:l,onChange:c,isInvalid:d,name:f,value:m,id:h,"data-radiogroup":g,"aria-describedby":b,...y}=e,x=`radio-${i.useId()}`,w=Qd(),j=!!y6()||!!g;let I=!!w&&!j?w.id:x;I=h??I;const E=o??(w==null?void 0:w.isDisabled),M=s??(w==null?void 0:w.isReadOnly),D=l??(w==null?void 0:w.isRequired),R=d??(w==null?void 0:w.isInvalid),[N,O]=i.useState(!1),[T,U]=i.useState(!1),[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),[V,se]=i.useState(!!t),ee=typeof n<"u",le=ee?n:V;i.useEffect(()=>F3(O),[]);const ae=i.useCallback(X=>{if(M||E){X.preventDefault();return}ee||se(X.target.checked),c==null||c(X)},[ee,E,M,c]),ce=i.useCallback(X=>{X.key===" "&&Q(!0)},[Q]),J=i.useCallback(X=>{X.key===" "&&Q(!1)},[Q]),re=i.useCallback((X={},Z=null)=>({...X,ref:Z,"data-active":ut(Y),"data-hover":ut(G),"data-disabled":ut(E),"data-invalid":ut(R),"data-checked":ut(le),"data-focus":ut(T),"data-focus-visible":ut(T&&N),"data-readonly":ut(M),"aria-hidden":!0,onMouseDown:ze(X.onMouseDown,()=>Q(!0)),onMouseUp:ze(X.onMouseUp,()=>Q(!1)),onMouseEnter:ze(X.onMouseEnter,()=>q(!0)),onMouseLeave:ze(X.onMouseLeave,()=>q(!1))}),[Y,G,E,R,le,T,M,N]),{onFocus:A,onBlur:L}=w??{},K=i.useCallback((X={},Z=null)=>{const me=E&&!r;return{...X,id:I,ref:Z,type:"radio",name:f,value:m,onChange:ze(X.onChange,ae),onBlur:ze(L,X.onBlur,()=>U(!1)),onFocus:ze(A,X.onFocus,()=>U(!0)),onKeyDown:ze(X.onKeyDown,ce),onKeyUp:ze(X.onKeyUp,J),checked:le,disabled:me,readOnly:M,required:D,"aria-invalid":wo(R),"aria-disabled":wo(me),"aria-required":wo(D),"data-readonly":ut(M),"aria-describedby":b,style:eU}},[E,r,I,f,m,ae,L,A,ce,J,le,M,D,R,b]);return{state:{isInvalid:R,isFocused:T,isChecked:le,isActive:Y,isHovered:G,isDisabled:E,isReadOnly:M,isRequired:D},getCheckboxProps:re,getRadioProps:re,getInputProps:K,getLabelProps:(X={},Z=null)=>({...X,ref:Z,onMouseDown:ze(X.onMouseDown,nU),"data-disabled":ut(E),"data-checked":ut(le),"data-invalid":ut(R)}),getRootProps:(X,Z=null)=>({...X,ref:Z,"data-disabled":ut(E),"data-checked":ut(le),"data-invalid":ut(R)}),htmlProps:y}}function nU(e){e.preventDefault(),e.stopPropagation()}function rU(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var Ys=_e((e,t)=>{var n;const r=y6(),{onChange:o,value:s}=e,l=Xn("Radio",{...r,...e}),c=cn(e),{spacing:d="0.5rem",children:f,isDisabled:m=r==null?void 0:r.isDisabled,isFocusable:h=r==null?void 0:r.isFocusable,inputProps:g,...b}=c;let y=e.isChecked;(r==null?void 0:r.value)!=null&&s!=null&&(y=r.value===s);let x=o;r!=null&&r.onChange&&s!=null&&(x=Uh(r.onChange,o));const w=(n=e==null?void 0:e.name)!=null?n:r==null?void 0:r.name,{getInputProps:S,getCheckboxProps:j,getLabelProps:_,getRootProps:I,htmlProps:E}=tU({...b,isChecked:y,isFocusable:h,isDisabled:m,onChange:x,name:w}),[M,D]=rU(E,xI),R=j(D),N=S(g,t),O=_(),T=Object.assign({},M,I()),U={display:"inline-flex",alignItems:"center",verticalAlign:"top",cursor:"pointer",position:"relative",...l.container},G={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,...l.control},q={userSelect:"none",marginStart:d,...l.label};return a.jsxs(je.label,{className:"chakra-radio",...T,__css:U,children:[a.jsx("input",{className:"chakra-radio__input",...N}),a.jsx(je.span,{className:"chakra-radio__control",...R,__css:G}),f&&a.jsx(je.span,{className:"chakra-radio__label",...O,__css:q,children:f})]})});Ys.displayName="Radio";var C6=_e(function(t,n){const{children:r,placeholder:o,className:s,...l}=t;return a.jsxs(je.select,{...l,ref:n,className:et("chakra-select",s),children:[o&&a.jsx("option",{value:"",children:o}),r]})});C6.displayName="SelectField";function oU(e,t){const n={},r={};for(const[o,s]of Object.entries(e))t.includes(o)?n[o]=s:r[o]=s;return[n,r]}var w6=_e((e,t)=>{var n;const r=Xn("Select",e),{rootProps:o,placeholder:s,icon:l,color:c,height:d,h:f,minH:m,minHeight:h,iconColor:g,iconSize:b,...y}=cn(e),[x,w]=oU(y,xI),S=Kx(w),j={width:"100%",height:"fit-content",position:"relative",color:c},_={paddingEnd:"2rem",...r.field,_focus:{zIndex:"unset",...(n=r.field)==null?void 0:n._focus}};return a.jsxs(je.div,{className:"chakra-select__wrapper",__css:j,...x,...o,children:[a.jsx(C6,{ref:t,height:f??d,minH:m??h,placeholder:s,...S,__css:_,children:e.children}),a.jsx(S6,{"data-disabled":ut(S.disabled),...(g||c)&&{color:g||c},__css:r.icon,...b&&{fontSize:b},children:l})]})});w6.displayName="Select";var sU=e=>a.jsx("svg",{viewBox:"0 0 24 24",...e,children:a.jsx("path",{fill:"currentColor",d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"})}),aU=je("div",{baseStyle:{position:"absolute",display:"inline-flex",alignItems:"center",justifyContent:"center",pointerEvents:"none",top:"50%",transform:"translateY(-50%)"}}),S6=e=>{const{children:t=a.jsx(sU,{}),...n}=e,r=i.cloneElement(t,{role:"presentation",className:"chakra-select__icon",focusable:!1,"aria-hidden":!0,style:{width:"1em",height:"1em",color:"currentColor"}});return a.jsx(aU,{...n,className:"chakra-select__icon-wrapper",children:i.isValidElement(t)?r:null})};S6.displayName="SelectIcon";function lU(){const e=i.useRef(!0);return i.useEffect(()=>{e.current=!1},[]),e.current}function iU(e){const t=i.useRef();return i.useEffect(()=>{t.current=e},[e]),t.current}var cU=je("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),gb=yI("skeleton-start-color"),vb=yI("skeleton-end-color"),uU=xa({from:{opacity:0},to:{opacity:1}}),dU=xa({from:{borderColor:gb.reference,background:gb.reference},to:{borderColor:vb.reference,background:vb.reference}}),wg=_e((e,t)=>{const n={...e,fadeDuration:typeof e.fadeDuration=="number"?e.fadeDuration:.4,speed:typeof e.speed=="number"?e.speed:.8},r=ml("Skeleton",n),o=lU(),{startColor:s="",endColor:l="",isLoaded:c,fadeDuration:d,speed:f,className:m,fitContent:h,...g}=cn(n),[b,y]=Zo("colors",[s,l]),x=iU(c),w=et("chakra-skeleton",m),S={...b&&{[gb.variable]:b},...y&&{[vb.variable]:y}};if(c){const j=o||x?"none":`${uU} ${d}s`;return a.jsx(je.div,{ref:t,className:w,__css:{animation:j},...g})}return a.jsx(cU,{ref:t,className:w,...g,__css:{width:h?"fit-content":void 0,...r,...S,_dark:{...r._dark,...S},animation:`${f}s linear infinite alternate ${dU}`}})});wg.displayName="Skeleton";var bo=e=>e?"":void 0,bc=e=>e?!0:void 0,vl=(...e)=>e.filter(Boolean).join(" ");function xc(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function fU(e){return{root:`slider-root-${e}`,getThumb:t=>`slider-thumb-${e}-${t}`,getInput:t=>`slider-input-${e}-${t}`,track:`slider-track-${e}`,innerTrack:`slider-filled-track-${e}`,getMarker:t=>`slider-marker-${e}-${t}`,output:`slider-output-${e}`}}function Qu(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}var cm={width:0,height:0},Mp=e=>e||cm;function k6(e){const{orientation:t,thumbPercents:n,thumbRects:r,isReversed:o}=e,s=x=>{var w;const S=(w=r[x])!=null?w:cm;return{position:"absolute",userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",touchAction:"none",...Qu({orientation:t,vertical:{bottom:`calc(${n[x]}% - ${S.height/2}px)`},horizontal:{left:`calc(${n[x]}% - ${S.width/2}px)`}})}},l=t==="vertical"?r.reduce((x,w)=>Mp(x).height>Mp(w).height?x:w,cm):r.reduce((x,w)=>Mp(x).width>Mp(w).width?x:w,cm),c={position:"relative",touchAction:"none",WebkitTapHighlightColor:"rgba(0,0,0,0)",userSelect:"none",outline:0,...Qu({orientation:t,vertical:l?{paddingLeft:l.width/2,paddingRight:l.width/2}:{},horizontal:l?{paddingTop:l.height/2,paddingBottom:l.height/2}:{}})},d={position:"absolute",...Qu({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",height:"100%"},horizontal:{top:"50%",transform:"translateY(-50%)",width:"100%"}})},f=n.length===1,m=[0,o?100-n[0]:n[0]],h=f?m:n;let g=h[0];!f&&o&&(g=100-g);const b=Math.abs(h[h.length-1]-h[0]),y={...d,...Qu({orientation:t,vertical:o?{height:`${b}%`,top:`${g}%`}:{height:`${b}%`,bottom:`${g}%`},horizontal:o?{width:`${b}%`,right:`${g}%`}:{width:`${b}%`,left:`${g}%`}})};return{trackStyle:d,innerTrackStyle:y,rootStyle:c,getThumbStyle:s}}function j6(e){const{isReversed:t,direction:n,orientation:r}=e;return n==="ltr"||r==="vertical"?t:!t}function pU(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function mU(e){const t=gU(e);return typeof t.PointerEvent<"u"&&e instanceof t.PointerEvent?e.pointerType==="mouse":e instanceof t.MouseEvent}function _6(e){return!!e.touches}function hU(e){return _6(e)&&e.touches.length>1}function gU(e){var t;return(t=e.view)!=null?t:window}function vU(e,t="page"){const n=e.touches[0]||e.changedTouches[0];return{x:n[`${t}X`],y:n[`${t}Y`]}}function bU(e,t="page"){return{x:e[`${t}X`],y:e[`${t}Y`]}}function I6(e,t="page"){return _6(e)?vU(e,t):bU(e,t)}function xU(e){return t=>{const n=mU(t);(!n||n&&t.button===0)&&e(t)}}function yU(e,t=!1){function n(o){e(o,{point:I6(o)})}return t?xU(n):n}function um(e,t,n,r){return pU(e,t,yU(n,t==="pointerdown"),r)}var CU=Object.defineProperty,wU=(e,t,n)=>t in e?CU(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ko=(e,t,n)=>(wU(e,typeof t!="symbol"?t+"":t,n),n),SU=class{constructor(e,t,n){Ko(this,"history",[]),Ko(this,"startEvent",null),Ko(this,"lastEvent",null),Ko(this,"lastEventInfo",null),Ko(this,"handlers",{}),Ko(this,"removeListeners",()=>{}),Ko(this,"threshold",3),Ko(this,"win"),Ko(this,"updatePoint",()=>{if(!(this.lastEvent&&this.lastEventInfo))return;const c=Qv(this.lastEventInfo,this.history),d=this.startEvent!==null,f=IU(c.offset,{x:0,y:0})>=this.threshold;if(!d&&!f)return;const{timestamp:m}=SS();this.history.push({...c.point,timestamp:m});const{onStart:h,onMove:g}=this.handlers;d||(h==null||h(this.lastEvent,c),this.startEvent=this.lastEvent),g==null||g(this.lastEvent,c)}),Ko(this,"onPointerMove",(c,d)=>{this.lastEvent=c,this.lastEventInfo=d,WL.update(this.updatePoint,!0)}),Ko(this,"onPointerUp",(c,d)=>{const f=Qv(d,this.history),{onEnd:m,onSessionEnd:h}=this.handlers;h==null||h(c,f),this.end(),!(!m||!this.startEvent)&&(m==null||m(c,f))});var r;if(this.win=(r=e.view)!=null?r:window,hU(e))return;this.handlers=t,n&&(this.threshold=n),e.stopPropagation(),e.preventDefault();const o={point:I6(e)},{timestamp:s}=SS();this.history=[{...o.point,timestamp:s}];const{onSessionStart:l}=t;l==null||l(e,Qv(o,this.history)),this.removeListeners=_U(um(this.win,"pointermove",this.onPointerMove),um(this.win,"pointerup",this.onPointerUp),um(this.win,"pointercancel",this.onPointerUp))}updateHandlers(e){this.handlers=e}end(){var e;(e=this.removeListeners)==null||e.call(this),VL.update(this.updatePoint)}};function i4(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Qv(e,t){return{point:e.point,delta:i4(e.point,t[t.length-1]),offset:i4(e.point,t[0]),velocity:jU(t,.1)}}var kU=e=>e*1e3;function jU(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const o=e[e.length-1];for(;n>=0&&(r=e[n],!(o.timestamp-r.timestamp>kU(t)));)n--;if(!r)return{x:0,y:0};const s=(o.timestamp-r.timestamp)/1e3;if(s===0)return{x:0,y:0};const l={x:(o.x-r.x)/s,y:(o.y-r.y)/s};return l.x===1/0&&(l.x=0),l.y===1/0&&(l.y=0),l}function _U(...e){return t=>e.reduce((n,r)=>r(n),t)}function Yv(e,t){return Math.abs(e-t)}function c4(e){return"x"in e&&"y"in e}function IU(e,t){if(typeof e=="number"&&typeof t=="number")return Yv(e,t);if(c4(e)&&c4(t)){const n=Yv(e.x,t.x),r=Yv(e.y,t.y);return Math.sqrt(n**2+r**2)}return 0}function P6(e){const t=i.useRef(null);return t.current=e,t}function E6(e,t){const{onPan:n,onPanStart:r,onPanEnd:o,onPanSessionStart:s,onPanSessionEnd:l,threshold:c}=t,d=!!(n||r||o||s||l),f=i.useRef(null),m=P6({onSessionStart:s,onSessionEnd:l,onStart:r,onMove:n,onEnd(h,g){f.current=null,o==null||o(h,g)}});i.useEffect(()=>{var h;(h=f.current)==null||h.updateHandlers(m.current)}),i.useEffect(()=>{const h=e.current;if(!h||!d)return;function g(b){f.current=new SU(b,m.current,c)}return um(h,"pointerdown",g)},[e,d,m,c]),i.useEffect(()=>()=>{var h;(h=f.current)==null||h.end(),f.current=null},[])}function PU(e,t){if(!e){t(void 0);return}t({width:e.offsetWidth,height:e.offsetHeight});const n=e.ownerDocument.defaultView??window,r=new n.ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const[s]=o;let l,c;if("borderBoxSize"in s){const d=s.borderBoxSize,f=Array.isArray(d)?d[0]:d;l=f.inlineSize,c=f.blockSize}else l=e.offsetWidth,c=e.offsetHeight;t({width:l,height:c})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}var EU=globalThis!=null&&globalThis.document?i.useLayoutEffect:i.useEffect;function MU(e,t){var n,r;if(!e||!e.parentElement)return;const o=(r=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?r:window,s=new o.MutationObserver(()=>{t()});return s.observe(e.parentElement,{childList:!0}),()=>{s.disconnect()}}function M6({getNodes:e,observeMutation:t=!0}){const[n,r]=i.useState([]),[o,s]=i.useState(0);return EU(()=>{const l=e(),c=l.map((d,f)=>PU(d,m=>{r(h=>[...h.slice(0,f),m,...h.slice(f+1)])}));if(t){const d=l[0];c.push(MU(d,()=>{s(f=>f+1)}))}return()=>{c.forEach(d=>{d==null||d()})}},[o]),n}function OU(e){return typeof e=="object"&&e!==null&&"current"in e}function DU(e){const[t]=M6({observeMutation:!1,getNodes(){return[OU(e)?e.current:e]}});return t}function RU(e){const{min:t=0,max:n=100,onChange:r,value:o,defaultValue:s,isReversed:l,direction:c="ltr",orientation:d="horizontal",id:f,isDisabled:m,isReadOnly:h,onChangeStart:g,onChangeEnd:b,step:y=1,getAriaValueText:x,"aria-valuetext":w,"aria-label":S,"aria-labelledby":j,name:_,focusThumbOnChange:I=!0,minStepsBetweenThumbs:E=0,...M}=e,D=gn(g),R=gn(b),N=gn(x),O=j6({isReversed:l,direction:c,orientation:d}),[T,U]=qd({value:o,defaultValue:s??[25,75],onChange:r});if(!Array.isArray(T))throw new TypeError(`[range-slider] You passed an invalid value for \`value\` or \`defaultValue\`, expected \`Array\` but got \`${typeof T}\``);const[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),[V,se]=i.useState(-1),ee=!(m||h),le=i.useRef(T),ae=T.map(Se=>mc(Se,t,n)),ce=E*y,J=AU(ae,t,n,ce),re=i.useRef({eventSource:null,value:[],valueBounds:[]});re.current.value=ae,re.current.valueBounds=J;const A=ae.map(Se=>n-Se+t),K=(O?A:ae).map(Se=>Dm(Se,t,n)),ne=d==="vertical",z=i.useRef(null),oe=i.useRef(null),X=M6({getNodes(){const Se=oe.current,Ve=Se==null?void 0:Se.querySelectorAll("[role=slider]");return Ve?Array.from(Ve):[]}}),Z=i.useId(),ve=fU(f??Z),de=i.useCallback(Se=>{var Ve,Ge;if(!z.current)return;re.current.eventSource="pointer";const Le=z.current.getBoundingClientRect(),{clientX:bt,clientY:fn}=(Ge=(Ve=Se.touches)==null?void 0:Ve[0])!=null?Ge:Se,Bt=ne?Le.bottom-fn:bt-Le.left,Ht=ne?Le.height:Le.width;let zn=Bt/Ht;return O&&(zn=1-zn),B3(zn,t,n)},[ne,O,n,t]),ke=(n-t)/10,we=y||(n-t)/100,Re=i.useMemo(()=>({setValueAtIndex(Se,Ve){if(!ee)return;const Ge=re.current.valueBounds[Se];Ve=parseFloat(nb(Ve,Ge.min,we)),Ve=mc(Ve,Ge.min,Ge.max);const Le=[...re.current.value];Le[Se]=Ve,U(Le)},setActiveIndex:se,stepUp(Se,Ve=we){const Ge=re.current.value[Se],Le=O?Ge-Ve:Ge+Ve;Re.setValueAtIndex(Se,Le)},stepDown(Se,Ve=we){const Ge=re.current.value[Se],Le=O?Ge+Ve:Ge-Ve;Re.setValueAtIndex(Se,Le)},reset(){U(le.current)}}),[we,O,U,ee]),Qe=i.useCallback(Se=>{const Ve=Se.key,Le={ArrowRight:()=>Re.stepUp(V),ArrowUp:()=>Re.stepUp(V),ArrowLeft:()=>Re.stepDown(V),ArrowDown:()=>Re.stepDown(V),PageUp:()=>Re.stepUp(V,ke),PageDown:()=>Re.stepDown(V,ke),Home:()=>{const{min:bt}=J[V];Re.setValueAtIndex(V,bt)},End:()=>{const{max:bt}=J[V];Re.setValueAtIndex(V,bt)}}[Ve];Le&&(Se.preventDefault(),Se.stopPropagation(),Le(Se),re.current.eventSource="keyboard")},[Re,V,ke,J]),{getThumbStyle:$e,rootStyle:vt,trackStyle:it,innerTrackStyle:ot}=i.useMemo(()=>k6({isReversed:O,orientation:d,thumbRects:X,thumbPercents:K}),[O,d,K,X]),Ce=i.useCallback(Se=>{var Ve;const Ge=Se??V;if(Ge!==-1&&I){const Le=ve.getThumb(Ge),bt=(Ve=oe.current)==null?void 0:Ve.ownerDocument.getElementById(Le);bt&&setTimeout(()=>bt.focus())}},[I,V,ve]);ba(()=>{re.current.eventSource==="keyboard"&&(R==null||R(re.current.value))},[ae,R]);const Me=Se=>{const Ve=de(Se)||0,Ge=re.current.value.map(Ht=>Math.abs(Ht-Ve)),Le=Math.min(...Ge);let bt=Ge.indexOf(Le);const fn=Ge.filter(Ht=>Ht===Le);fn.length>1&&Ve>re.current.value[bt]&&(bt=bt+fn.length-1),se(bt),Re.setValueAtIndex(bt,Ve),Ce(bt)},qe=Se=>{if(V==-1)return;const Ve=de(Se)||0;se(V),Re.setValueAtIndex(V,Ve),Ce(V)};E6(oe,{onPanSessionStart(Se){ee&&(q(!0),Me(Se),D==null||D(re.current.value))},onPanSessionEnd(){ee&&(q(!1),R==null||R(re.current.value))},onPan(Se){ee&&qe(Se)}});const dt=i.useCallback((Se={},Ve=null)=>({...Se,...M,id:ve.root,ref:Et(Ve,oe),tabIndex:-1,"aria-disabled":bc(m),"data-focused":bo(Y),style:{...Se.style,...vt}}),[M,m,Y,vt,ve]),ye=i.useCallback((Se={},Ve=null)=>({...Se,ref:Et(Ve,z),id:ve.track,"data-disabled":bo(m),style:{...Se.style,...it}}),[m,it,ve]),Ue=i.useCallback((Se={},Ve=null)=>({...Se,ref:Ve,id:ve.innerTrack,style:{...Se.style,...ot}}),[ot,ve]),st=i.useCallback((Se,Ve=null)=>{var Ge;const{index:Le,...bt}=Se,fn=ae[Le];if(fn==null)throw new TypeError(`[range-slider > thumb] Cannot find value at index \`${Le}\`. The \`value\` or \`defaultValue\` length is : ${ae.length}`);const Bt=J[Le];return{...bt,ref:Ve,role:"slider",tabIndex:ee?0:void 0,id:ve.getThumb(Le),"data-active":bo(G&&V===Le),"aria-valuetext":(Ge=N==null?void 0:N(fn))!=null?Ge:w==null?void 0:w[Le],"aria-valuemin":Bt.min,"aria-valuemax":Bt.max,"aria-valuenow":fn,"aria-orientation":d,"aria-disabled":bc(m),"aria-readonly":bc(h),"aria-label":S==null?void 0:S[Le],"aria-labelledby":S!=null&&S[Le]||j==null?void 0:j[Le],style:{...Se.style,...$e(Le)},onKeyDown:xc(Se.onKeyDown,Qe),onFocus:xc(Se.onFocus,()=>{Q(!0),se(Le)}),onBlur:xc(Se.onBlur,()=>{Q(!1),se(-1)})}},[ve,ae,J,ee,G,V,N,w,d,m,h,S,j,$e,Qe,Q]),mt=i.useCallback((Se={},Ve=null)=>({...Se,ref:Ve,id:ve.output,htmlFor:ae.map((Ge,Le)=>ve.getThumb(Le)).join(" "),"aria-live":"off"}),[ve,ae]),Pe=i.useCallback((Se,Ve=null)=>{const{value:Ge,...Le}=Se,bt=!(Gen),fn=Ge>=ae[0]&&Ge<=ae[ae.length-1];let Bt=Dm(Ge,t,n);Bt=O?100-Bt:Bt;const Ht={position:"absolute",pointerEvents:"none",...Qu({orientation:d,vertical:{bottom:`${Bt}%`},horizontal:{left:`${Bt}%`}})};return{...Le,ref:Ve,id:ve.getMarker(Se.value),role:"presentation","aria-hidden":!0,"data-disabled":bo(m),"data-invalid":bo(!bt),"data-highlighted":bo(fn),style:{...Se.style,...Ht}}},[m,O,n,t,d,ae,ve]),Ne=i.useCallback((Se,Ve=null)=>{const{index:Ge,...Le}=Se;return{...Le,ref:Ve,id:ve.getInput(Ge),type:"hidden",value:ae[Ge],name:Array.isArray(_)?_[Ge]:`${_}-${Ge}`}},[_,ae,ve]);return{state:{value:ae,isFocused:Y,isDragging:G,getThumbPercent:Se=>K[Se],getThumbMinValue:Se=>J[Se].min,getThumbMaxValue:Se=>J[Se].max},actions:Re,getRootProps:dt,getTrackProps:ye,getInnerTrackProps:Ue,getThumbProps:st,getMarkerProps:Pe,getInputProps:Ne,getOutputProps:mt}}function AU(e,t,n,r){return e.map((o,s)=>{const l=s===0?t:e[s-1]+r,c=s===e.length-1?n:e[s+1]-r;return{min:l,max:c}})}var[TU,Sg]=Kt({name:"SliderContext",errorMessage:"useSliderContext: `context` is undefined. Seems you forgot to wrap all slider components within "}),[NU,kg]=Kt({name:"RangeSliderStylesContext",errorMessage:`useRangeSliderStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),O6=_e(function(t,n){const r={orientation:"horizontal",...t},o=Xn("Slider",r),s=cn(r),{direction:l}=Hd();s.direction=l;const{getRootProps:c,...d}=RU(s),f=i.useMemo(()=>({...d,name:r.name}),[d,r.name]);return a.jsx(TU,{value:f,children:a.jsx(NU,{value:o,children:a.jsx(je.div,{...c({},n),className:"chakra-slider",__css:o.container,children:r.children})})})});O6.displayName="RangeSlider";var bb=_e(function(t,n){const{getThumbProps:r,getInputProps:o,name:s}=Sg(),l=kg(),c=r(t,n);return a.jsxs(je.div,{...c,className:vl("chakra-slider__thumb",t.className),__css:l.thumb,children:[c.children,s&&a.jsx("input",{...o({index:t.index})})]})});bb.displayName="RangeSliderThumb";var D6=_e(function(t,n){const{getTrackProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:vl("chakra-slider__track",t.className),__css:o.track,"data-testid":"chakra-range-slider-track"})});D6.displayName="RangeSliderTrack";var R6=_e(function(t,n){const{getInnerTrackProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:"chakra-slider__filled-track",__css:o.filledTrack})});R6.displayName="RangeSliderFilledTrack";var dm=_e(function(t,n){const{getMarkerProps:r}=Sg(),o=kg(),s=r(t,n);return a.jsx(je.div,{...s,className:vl("chakra-slider__marker",t.className),__css:o.mark})});dm.displayName="RangeSliderMark";function $U(e){var t;const{min:n=0,max:r=100,onChange:o,value:s,defaultValue:l,isReversed:c,direction:d="ltr",orientation:f="horizontal",id:m,isDisabled:h,isReadOnly:g,onChangeStart:b,onChangeEnd:y,step:x=1,getAriaValueText:w,"aria-valuetext":S,"aria-label":j,"aria-labelledby":_,name:I,focusThumbOnChange:E=!0,...M}=e,D=gn(b),R=gn(y),N=gn(w),O=j6({isReversed:c,direction:d,orientation:f}),[T,U]=qd({value:s,defaultValue:l??FU(n,r),onChange:o}),[G,q]=i.useState(!1),[Y,Q]=i.useState(!1),V=!(h||g),se=(r-n)/10,ee=x||(r-n)/100,le=mc(T,n,r),ae=r-le+n,J=Dm(O?ae:le,n,r),re=f==="vertical",A=P6({min:n,max:r,step:x,isDisabled:h,value:le,isInteractive:V,isReversed:O,isVertical:re,eventSource:null,focusThumbOnChange:E,orientation:f}),L=i.useRef(null),K=i.useRef(null),ne=i.useRef(null),z=i.useId(),oe=m??z,[X,Z]=[`slider-thumb-${oe}`,`slider-track-${oe}`],me=i.useCallback(Pe=>{var Ne,kt;if(!L.current)return;const Se=A.current;Se.eventSource="pointer";const Ve=L.current.getBoundingClientRect(),{clientX:Ge,clientY:Le}=(kt=(Ne=Pe.touches)==null?void 0:Ne[0])!=null?kt:Pe,bt=re?Ve.bottom-Le:Ge-Ve.left,fn=re?Ve.height:Ve.width;let Bt=bt/fn;O&&(Bt=1-Bt);let Ht=B3(Bt,Se.min,Se.max);return Se.step&&(Ht=parseFloat(nb(Ht,Se.min,Se.step))),Ht=mc(Ht,Se.min,Se.max),Ht},[re,O,A]),ve=i.useCallback(Pe=>{const Ne=A.current;Ne.isInteractive&&(Pe=parseFloat(nb(Pe,Ne.min,ee)),Pe=mc(Pe,Ne.min,Ne.max),U(Pe))},[ee,U,A]),de=i.useMemo(()=>({stepUp(Pe=ee){const Ne=O?le-Pe:le+Pe;ve(Ne)},stepDown(Pe=ee){const Ne=O?le+Pe:le-Pe;ve(Ne)},reset(){ve(l||0)},stepTo(Pe){ve(Pe)}}),[ve,O,le,ee,l]),ke=i.useCallback(Pe=>{const Ne=A.current,Se={ArrowRight:()=>de.stepUp(),ArrowUp:()=>de.stepUp(),ArrowLeft:()=>de.stepDown(),ArrowDown:()=>de.stepDown(),PageUp:()=>de.stepUp(se),PageDown:()=>de.stepDown(se),Home:()=>ve(Ne.min),End:()=>ve(Ne.max)}[Pe.key];Se&&(Pe.preventDefault(),Pe.stopPropagation(),Se(Pe),Ne.eventSource="keyboard")},[de,ve,se,A]),we=(t=N==null?void 0:N(le))!=null?t:S,Re=DU(K),{getThumbStyle:Qe,rootStyle:$e,trackStyle:vt,innerTrackStyle:it}=i.useMemo(()=>{const Pe=A.current,Ne=Re??{width:0,height:0};return k6({isReversed:O,orientation:Pe.orientation,thumbRects:[Ne],thumbPercents:[J]})},[O,Re,J,A]),ot=i.useCallback(()=>{A.current.focusThumbOnChange&&setTimeout(()=>{var Ne;return(Ne=K.current)==null?void 0:Ne.focus()})},[A]);ba(()=>{const Pe=A.current;ot(),Pe.eventSource==="keyboard"&&(R==null||R(Pe.value))},[le,R]);function Ce(Pe){const Ne=me(Pe);Ne!=null&&Ne!==A.current.value&&U(Ne)}E6(ne,{onPanSessionStart(Pe){const Ne=A.current;Ne.isInteractive&&(q(!0),ot(),Ce(Pe),D==null||D(Ne.value))},onPanSessionEnd(){const Pe=A.current;Pe.isInteractive&&(q(!1),R==null||R(Pe.value))},onPan(Pe){A.current.isInteractive&&Ce(Pe)}});const Me=i.useCallback((Pe={},Ne=null)=>({...Pe,...M,ref:Et(Ne,ne),tabIndex:-1,"aria-disabled":bc(h),"data-focused":bo(Y),style:{...Pe.style,...$e}}),[M,h,Y,$e]),qe=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Et(Ne,L),id:Z,"data-disabled":bo(h),style:{...Pe.style,...vt}}),[h,Z,vt]),dt=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Ne,style:{...Pe.style,...it}}),[it]),ye=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Et(Ne,K),role:"slider",tabIndex:V?0:void 0,id:X,"data-active":bo(G),"aria-valuetext":we,"aria-valuemin":n,"aria-valuemax":r,"aria-valuenow":le,"aria-orientation":f,"aria-disabled":bc(h),"aria-readonly":bc(g),"aria-label":j,"aria-labelledby":j?void 0:_,style:{...Pe.style,...Qe(0)},onKeyDown:xc(Pe.onKeyDown,ke),onFocus:xc(Pe.onFocus,()=>Q(!0)),onBlur:xc(Pe.onBlur,()=>Q(!1))}),[V,X,G,we,n,r,le,f,h,g,j,_,Qe,ke]),Ue=i.useCallback((Pe,Ne=null)=>{const kt=!(Pe.valuer),Se=le>=Pe.value,Ve=Dm(Pe.value,n,r),Ge={position:"absolute",pointerEvents:"none",...LU({orientation:f,vertical:{bottom:O?`${100-Ve}%`:`${Ve}%`},horizontal:{left:O?`${100-Ve}%`:`${Ve}%`}})};return{...Pe,ref:Ne,role:"presentation","aria-hidden":!0,"data-disabled":bo(h),"data-invalid":bo(!kt),"data-highlighted":bo(Se),style:{...Pe.style,...Ge}}},[h,O,r,n,f,le]),st=i.useCallback((Pe={},Ne=null)=>({...Pe,ref:Ne,type:"hidden",value:le,name:I}),[I,le]);return{state:{value:le,isFocused:Y,isDragging:G},actions:de,getRootProps:Me,getTrackProps:qe,getInnerTrackProps:dt,getThumbProps:ye,getMarkerProps:Ue,getInputProps:st}}function LU(e){const{orientation:t,vertical:n,horizontal:r}=e;return t==="vertical"?n:r}function FU(e,t){return t"}),[BU,_g]=Kt({name:"SliderStylesContext",hookName:"useSliderStyles",providerName:""}),Sy=_e((e,t)=>{var n;const r={...e,orientation:(n=e==null?void 0:e.orientation)!=null?n:"horizontal"},o=Xn("Slider",r),s=cn(r),{direction:l}=Hd();s.direction=l;const{getInputProps:c,getRootProps:d,...f}=$U(s),m=d(),h=c({},t);return a.jsx(zU,{value:f,children:a.jsx(BU,{value:o,children:a.jsxs(je.div,{...m,className:vl("chakra-slider",r.className),__css:o.container,children:[r.children,a.jsx("input",{...h})]})})})});Sy.displayName="Slider";var ky=_e((e,t)=>{const{getThumbProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__thumb",e.className),__css:r.thumb})});ky.displayName="SliderThumb";var jy=_e((e,t)=>{const{getTrackProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__track",e.className),__css:r.track})});jy.displayName="SliderTrack";var _y=_e((e,t)=>{const{getInnerTrackProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__filled-track",e.className),__css:r.filledTrack})});_y.displayName="SliderFilledTrack";var Zi=_e((e,t)=>{const{getMarkerProps:n}=jg(),r=_g(),o=n(e,t);return a.jsx(je.div,{...o,className:vl("chakra-slider__marker",e.className),__css:r.mark})});Zi.displayName="SliderMark";var[HU,A6]=Kt({name:"StatStylesContext",errorMessage:`useStatStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),T6=_e(function(t,n){const r=Xn("Stat",t),o={position:"relative",flex:"1 1 0%",...r.container},{className:s,children:l,...c}=cn(t);return a.jsx(HU,{value:r,children:a.jsx(je.div,{ref:n,...c,className:et("chakra-stat",s),__css:o,children:a.jsx("dl",{children:l})})})});T6.displayName="Stat";var N6=_e(function(t,n){return a.jsx(je.div,{...t,ref:n,role:"group",className:et("chakra-stat__group",t.className),__css:{display:"flex",flexWrap:"wrap",justifyContent:"space-around",alignItems:"flex-start"}})});N6.displayName="StatGroup";var $6=_e(function(t,n){const r=A6();return a.jsx(je.dt,{ref:n,...t,className:et("chakra-stat__label",t.className),__css:r.label})});$6.displayName="StatLabel";var L6=_e(function(t,n){const r=A6();return a.jsx(je.dd,{ref:n,...t,className:et("chakra-stat__number",t.className),__css:{...r.number,fontFeatureSettings:"pnum",fontVariantNumeric:"proportional-nums"}})});L6.displayName="StatNumber";var Iy=_e(function(t,n){const r=Xn("Switch",t),{spacing:o="0.5rem",children:s,...l}=cn(t),{getIndicatorProps:c,getInputProps:d,getCheckboxProps:f,getRootProps:m,getLabelProps:h}=z3(l),g=i.useMemo(()=>({display:"inline-block",position:"relative",verticalAlign:"middle",lineHeight:0,...r.container}),[r.container]),b=i.useMemo(()=>({display:"inline-flex",flexShrink:0,justifyContent:"flex-start",boxSizing:"content-box",cursor:"pointer",...r.track}),[r.track]),y=i.useMemo(()=>({userSelect:"none",marginStart:o,...r.label}),[o,r.label]);return a.jsxs(je.label,{...m(),className:et("chakra-switch",t.className),__css:g,children:[a.jsx("input",{className:"chakra-switch__input",...d({},n)}),a.jsx(je.span,{...f(),className:"chakra-switch__track",__css:b,children:a.jsx(je.span,{__css:r.thumb,className:"chakra-switch__thumb",...c()})}),s&&a.jsx(je.span,{className:"chakra-switch__label",...h(),__css:y,children:s})]})});Iy.displayName="Switch";var[WU,VU,UU,GU]=Vx();function KU(e){var t;const{defaultIndex:n,onChange:r,index:o,isManual:s,isLazy:l,lazyBehavior:c="unmount",orientation:d="horizontal",direction:f="ltr",...m}=e,[h,g]=i.useState(n??0),[b,y]=qd({defaultValue:n??0,value:o,onChange:r});i.useEffect(()=>{o!=null&&g(o)},[o]);const x=UU(),w=i.useId();return{id:`tabs-${(t=e.id)!=null?t:w}`,selectedIndex:b,focusedIndex:h,setSelectedIndex:y,setFocusedIndex:g,isManual:s,isLazy:l,lazyBehavior:c,orientation:d,descendants:x,direction:f,htmlProps:m}}var[qU,Ig]=Kt({name:"TabsContext",errorMessage:"useTabsContext: `context` is undefined. Seems you forgot to wrap all tabs components within "});function XU(e){const{focusedIndex:t,orientation:n,direction:r}=Ig(),o=VU(),s=i.useCallback(l=>{const c=()=>{var j;const _=o.nextEnabled(t);_&&((j=_.node)==null||j.focus())},d=()=>{var j;const _=o.prevEnabled(t);_&&((j=_.node)==null||j.focus())},f=()=>{var j;const _=o.firstEnabled();_&&((j=_.node)==null||j.focus())},m=()=>{var j;const _=o.lastEnabled();_&&((j=_.node)==null||j.focus())},h=n==="horizontal",g=n==="vertical",b=l.key,y=r==="ltr"?"ArrowLeft":"ArrowRight",x=r==="ltr"?"ArrowRight":"ArrowLeft",S={[y]:()=>h&&d(),[x]:()=>h&&c(),ArrowDown:()=>g&&c(),ArrowUp:()=>g&&d(),Home:f,End:m}[b];S&&(l.preventDefault(),S(l))},[o,t,n,r]);return{...e,role:"tablist","aria-orientation":n,onKeyDown:ze(e.onKeyDown,s)}}function QU(e){const{isDisabled:t=!1,isFocusable:n=!1,...r}=e,{setSelectedIndex:o,isManual:s,id:l,setFocusedIndex:c,selectedIndex:d}=Ig(),{index:f,register:m}=GU({disabled:t&&!n}),h=f===d,g=()=>{o(f)},b=()=>{c(f),!s&&!(t&&n)&&o(f)},y=z5({...r,ref:Et(m,e.ref),isDisabled:t,isFocusable:n,onClick:ze(e.onClick,g)}),x="button";return{...y,id:F6(l,f),role:"tab",tabIndex:h?0:-1,type:x,"aria-selected":h,"aria-controls":z6(l,f),onFocus:t?void 0:ze(e.onFocus,b)}}var[YU,ZU]=Kt({});function JU(e){const t=Ig(),{id:n,selectedIndex:r}=t,s=rg(e.children).map((l,c)=>i.createElement(YU,{key:c,value:{isSelected:c===r,id:z6(n,c),tabId:F6(n,c),selectedIndex:r}},l));return{...e,children:s}}function eG(e){const{children:t,...n}=e,{isLazy:r,lazyBehavior:o}=Ig(),{isSelected:s,id:l,tabId:c}=ZU(),d=i.useRef(!1);s&&(d.current=!0);const f=Cy({wasSelected:d.current,isSelected:s,enabled:r,mode:o});return{tabIndex:0,...n,children:f?t:null,role:"tabpanel","aria-labelledby":c,hidden:!s,id:l}}function F6(e,t){return`${e}--tab-${t}`}function z6(e,t){return`${e}--tabpanel-${t}`}var[tG,Pg]=Kt({name:"TabsStylesContext",errorMessage:`useTabsStyles returned is 'undefined'. Seems you forgot to wrap the components in "" `}),ci=_e(function(t,n){const r=Xn("Tabs",t),{children:o,className:s,...l}=cn(t),{htmlProps:c,descendants:d,...f}=KU(l),m=i.useMemo(()=>f,[f]),{isFitted:h,...g}=c,b={position:"relative",...r.root};return a.jsx(WU,{value:d,children:a.jsx(qU,{value:m,children:a.jsx(tG,{value:r,children:a.jsx(je.div,{className:et("chakra-tabs",s),ref:n,...g,__css:b,children:o})})})})});ci.displayName="Tabs";var ui=_e(function(t,n){const r=XU({...t,ref:n}),s={display:"flex",...Pg().tablist};return a.jsx(je.div,{...r,className:et("chakra-tabs__tablist",t.className),__css:s})});ui.displayName="TabList";var $r=_e(function(t,n){const r=eG({...t,ref:n}),o=Pg();return a.jsx(je.div,{outline:"0",...r,className:et("chakra-tabs__tab-panel",t.className),__css:o.tabpanel})});$r.displayName="TabPanel";var eu=_e(function(t,n){const r=JU(t),o=Pg();return a.jsx(je.div,{...r,width:"100%",ref:n,className:et("chakra-tabs__tab-panels",t.className),__css:o.tabpanels})});eu.displayName="TabPanels";var mr=_e(function(t,n){const r=Pg(),o=QU({...t,ref:n}),s={outline:"0",display:"flex",alignItems:"center",justifyContent:"center",...r.tab};return a.jsx(je.button,{...o,className:et("chakra-tabs__tab",t.className),__css:s})});mr.displayName="Tab";function nG(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var rG=["h","minH","height","minHeight"],B6=_e((e,t)=>{const n=ml("Textarea",e),{className:r,rows:o,...s}=cn(e),l=Kx(s),c=o?nG(n,rG):n;return a.jsx(je.textarea,{ref:t,rows:o,...l,className:et("chakra-textarea",r),__css:c})});B6.displayName="Textarea";var oG={exit:{scale:.85,opacity:0,transition:{opacity:{duration:.15,easings:"easeInOut"},scale:{duration:.2,easings:"easeInOut"}}},enter:{scale:1,opacity:1,transition:{opacity:{easings:"easeOut",duration:.2},scale:{duration:.2,ease:[.175,.885,.4,1.1]}}}},xb=e=>{var t;return((t=e.current)==null?void 0:t.ownerDocument)||document},fm=e=>{var t,n;return((n=(t=e.current)==null?void 0:t.ownerDocument)==null?void 0:n.defaultView)||window};function sG(e={}){const{openDelay:t=0,closeDelay:n=0,closeOnClick:r=!0,closeOnMouseDown:o,closeOnScroll:s,closeOnPointerDown:l=o,closeOnEsc:c=!0,onOpen:d,onClose:f,placement:m,id:h,isOpen:g,defaultIsOpen:b,arrowSize:y=10,arrowShadowColor:x,arrowPadding:w,modifiers:S,isDisabled:j,gutter:_,offset:I,direction:E,...M}=e,{isOpen:D,onOpen:R,onClose:N}=yy({isOpen:g,defaultIsOpen:b,onOpen:d,onClose:f}),{referenceRef:O,getPopperProps:T,getArrowInnerProps:U,getArrowProps:G}=xy({enabled:D,placement:m,arrowPadding:w,modifiers:S,gutter:_,offset:I,direction:E}),q=i.useId(),Q=`tooltip-${h??q}`,V=i.useRef(null),se=i.useRef(),ee=i.useCallback(()=>{se.current&&(clearTimeout(se.current),se.current=void 0)},[]),le=i.useRef(),ae=i.useCallback(()=>{le.current&&(clearTimeout(le.current),le.current=void 0)},[]),ce=i.useCallback(()=>{ae(),N()},[N,ae]),J=aG(V,ce),re=i.useCallback(()=>{if(!j&&!se.current){D&&J();const Z=fm(V);se.current=Z.setTimeout(R,t)}},[J,j,D,R,t]),A=i.useCallback(()=>{ee();const Z=fm(V);le.current=Z.setTimeout(ce,n)},[n,ce,ee]),L=i.useCallback(()=>{D&&r&&A()},[r,A,D]),K=i.useCallback(()=>{D&&l&&A()},[l,A,D]),ne=i.useCallback(Z=>{D&&Z.key==="Escape"&&A()},[D,A]);Ul(()=>xb(V),"keydown",c?ne:void 0),Ul(()=>{if(!s)return null;const Z=V.current;if(!Z)return null;const me=P5(Z);return me.localName==="body"?fm(V):me},"scroll",()=>{D&&s&&ce()},{passive:!0,capture:!0}),i.useEffect(()=>{j&&(ee(),D&&N())},[j,D,N,ee]),i.useEffect(()=>()=>{ee(),ae()},[ee,ae]),Ul(()=>V.current,"pointerleave",A);const z=i.useCallback((Z={},me=null)=>({...Z,ref:Et(V,me,O),onPointerEnter:ze(Z.onPointerEnter,de=>{de.pointerType!=="touch"&&re()}),onClick:ze(Z.onClick,L),onPointerDown:ze(Z.onPointerDown,K),onFocus:ze(Z.onFocus,re),onBlur:ze(Z.onBlur,A),"aria-describedby":D?Q:void 0}),[re,A,K,D,Q,L,O]),oe=i.useCallback((Z={},me=null)=>T({...Z,style:{...Z.style,[Fn.arrowSize.var]:y?`${y}px`:void 0,[Fn.arrowShadowColor.var]:x}},me),[T,y,x]),X=i.useCallback((Z={},me=null)=>{const ve={...Z.style,position:"relative",transformOrigin:Fn.transformOrigin.varRef};return{ref:me,...M,...Z,id:Q,role:"tooltip",style:ve}},[M,Q]);return{isOpen:D,show:re,hide:A,getTriggerProps:z,getTooltipProps:X,getTooltipPositionerProps:oe,getArrowProps:G,getArrowInnerProps:U}}var Zv="chakra-ui:close-tooltip";function aG(e,t){return i.useEffect(()=>{const n=xb(e);return n.addEventListener(Zv,t),()=>n.removeEventListener(Zv,t)},[t,e]),()=>{const n=xb(e),r=fm(e);n.dispatchEvent(new r.CustomEvent(Zv))}}function lG(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function iG(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}var cG=je(Mn.div),Ut=_e((e,t)=>{var n,r;const o=ml("Tooltip",e),s=cn(e),l=Hd(),{children:c,label:d,shouldWrapChildren:f,"aria-label":m,hasArrow:h,bg:g,portalProps:b,background:y,backgroundColor:x,bgColor:w,motionProps:S,...j}=s,_=(r=(n=y??x)!=null?n:g)!=null?r:w;if(_){o.bg=_;const T=OR(l,"colors",_);o[Fn.arrowBg.var]=T}const I=sG({...j,direction:l.direction}),E=typeof c=="string"||f;let M;if(E)M=a.jsx(je.span,{display:"inline-block",tabIndex:0,...I.getTriggerProps(),children:c});else{const T=i.Children.only(c);M=i.cloneElement(T,I.getTriggerProps(T.props,T.ref))}const D=!!m,R=I.getTooltipProps({},t),N=D?lG(R,["role","id"]):R,O=iG(R,["role","id"]);return d?a.jsxs(a.Fragment,{children:[M,a.jsx(hr,{children:I.isOpen&&a.jsx(Uc,{...b,children:a.jsx(je.div,{...I.getTooltipPositionerProps(),__css:{zIndex:o.zIndex,pointerEvents:"none"},children:a.jsxs(cG,{variants:oG,initial:"exit",animate:"enter",exit:"exit",...S,...N,__css:o,children:[d,D&&a.jsx(je.span,{srOnly:!0,...O,children:m}),h&&a.jsx(je.div,{"data-popper-arrow":!0,className:"chakra-tooltip__arrow-wrapper",children:a.jsx(je.div,{"data-popper-arrow-inner":!0,className:"chakra-tooltip__arrow",__css:{bg:o.bg}})})]})})})})]}):a.jsx(a.Fragment,{children:c})});Ut.displayName="Tooltip";const uG=fe(pe,({system:e})=>{const{consoleLogLevel:t,shouldLogToConsole:n}=e;return{consoleLogLevel:t,shouldLogToConsole:n}}),H6=e=>{const{consoleLogLevel:t,shouldLogToConsole:n}=H(uG);return i.useEffect(()=>{n?(localStorage.setItem("ROARR_LOG","true"),localStorage.setItem("ROARR_FILTER",`context.logLevel:>=${DR[t]}`)):localStorage.setItem("ROARR_LOG","false"),Aw.ROARR.write=RR.createLogWriter()},[t,n]),i.useEffect(()=>{const o={...AR};TR.set(Aw.Roarr.child(o))},[]),i.useMemo(()=>hl(e),[e])},dG=()=>{const e=te(),t=H(r=>r.system.toastQueue),n=tg();return i.useEffect(()=>{t.forEach(r=>{n(r)}),t.length>0&&e(NR())},[e,n,t]),null},zs=()=>{const e=te();return i.useCallback(n=>e(lt(rn(n))),[e])},fG=i.memo(dG);var pG=new Map([["aac","audio/aac"],["abw","application/x-abiword"],["arc","application/x-freearc"],["avif","image/avif"],["avi","video/x-msvideo"],["azw","application/vnd.amazon.ebook"],["bin","application/octet-stream"],["bmp","image/bmp"],["bz","application/x-bzip"],["bz2","application/x-bzip2"],["cda","application/x-cdf"],["csh","application/x-csh"],["css","text/css"],["csv","text/csv"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["eot","application/vnd.ms-fontobject"],["epub","application/epub+zip"],["gz","application/gzip"],["gif","image/gif"],["heic","image/heic"],["heif","image/heif"],["htm","text/html"],["html","text/html"],["ico","image/vnd.microsoft.icon"],["ics","text/calendar"],["jar","application/java-archive"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["js","text/javascript"],["json","application/json"],["jsonld","application/ld+json"],["mid","audio/midi"],["midi","audio/midi"],["mjs","text/javascript"],["mp3","audio/mpeg"],["mp4","video/mp4"],["mpeg","video/mpeg"],["mpkg","application/vnd.apple.installer+xml"],["odp","application/vnd.oasis.opendocument.presentation"],["ods","application/vnd.oasis.opendocument.spreadsheet"],["odt","application/vnd.oasis.opendocument.text"],["oga","audio/ogg"],["ogv","video/ogg"],["ogx","application/ogg"],["opus","audio/opus"],["otf","font/otf"],["png","image/png"],["pdf","application/pdf"],["php","application/x-httpd-php"],["ppt","application/vnd.ms-powerpoint"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["rar","application/vnd.rar"],["rtf","application/rtf"],["sh","application/x-sh"],["svg","image/svg+xml"],["swf","application/x-shockwave-flash"],["tar","application/x-tar"],["tif","image/tiff"],["tiff","image/tiff"],["ts","video/mp2t"],["ttf","font/ttf"],["txt","text/plain"],["vsd","application/vnd.visio"],["wav","audio/wav"],["weba","audio/webm"],["webm","video/webm"],["webp","image/webp"],["woff","font/woff"],["woff2","font/woff2"],["xhtml","application/xhtml+xml"],["xls","application/vnd.ms-excel"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["xml","application/xml"],["xul","application/vnd.mozilla.xul+xml"],["zip","application/zip"],["7z","application/x-7z-compressed"],["mkv","video/x-matroska"],["mov","video/quicktime"],["msg","application/vnd.ms-outlook"]]);function uf(e,t){var n=mG(e);if(typeof n.path!="string"){var r=e.webkitRelativePath;Object.defineProperty(n,"path",{value:typeof t=="string"?t:typeof r=="string"&&r.length>0?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return n}function mG(e){var t=e.name,n=t&&t.lastIndexOf(".")!==-1;if(n&&!e.type){var r=t.split(".").pop().toLowerCase(),o=pG.get(r);o&&Object.defineProperty(e,"type",{value:o,writable:!1,configurable:!1,enumerable:!0})}return e}var hG=[".DS_Store","Thumbs.db"];function gG(e){return qc(this,void 0,void 0,function(){return Xc(this,function(t){return Lm(e)&&vG(e.dataTransfer)?[2,CG(e.dataTransfer,e.type)]:bG(e)?[2,xG(e)]:Array.isArray(e)&&e.every(function(n){return"getFile"in n&&typeof n.getFile=="function"})?[2,yG(e)]:[2,[]]})})}function vG(e){return Lm(e)}function bG(e){return Lm(e)&&Lm(e.target)}function Lm(e){return typeof e=="object"&&e!==null}function xG(e){return yb(e.target.files).map(function(t){return uf(t)})}function yG(e){return qc(this,void 0,void 0,function(){var t;return Xc(this,function(n){switch(n.label){case 0:return[4,Promise.all(e.map(function(r){return r.getFile()}))];case 1:return t=n.sent(),[2,t.map(function(r){return uf(r)})]}})})}function CG(e,t){return qc(this,void 0,void 0,function(){var n,r;return Xc(this,function(o){switch(o.label){case 0:return e.items?(n=yb(e.items).filter(function(s){return s.kind==="file"}),t!=="drop"?[2,n]:[4,Promise.all(n.map(wG))]):[3,2];case 1:return r=o.sent(),[2,u4(W6(r))];case 2:return[2,u4(yb(e.files).map(function(s){return uf(s)}))]}})})}function u4(e){return e.filter(function(t){return hG.indexOf(t.name)===-1})}function yb(e){if(e===null)return[];for(var t=[],n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);nn)return[!1,h4(n)];if(e.sizen)return[!1,h4(n)]}return[!0,null]}function Fl(e){return e!=null}function LG(e){var t=e.files,n=e.accept,r=e.minSize,o=e.maxSize,s=e.multiple,l=e.maxFiles,c=e.validator;return!s&&t.length>1||s&&l>=1&&t.length>l?!1:t.every(function(d){var f=K6(d,n),m=Id(f,1),h=m[0],g=q6(d,r,o),b=Id(g,1),y=b[0],x=c?c(d):null;return h&&y&&!x})}function Fm(e){return typeof e.isPropagationStopped=="function"?e.isPropagationStopped():typeof e.cancelBubble<"u"?e.cancelBubble:!1}function Op(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,function(t){return t==="Files"||t==="application/x-moz-file"}):!!e.target&&!!e.target.files}function v4(e){e.preventDefault()}function FG(e){return e.indexOf("MSIE")!==-1||e.indexOf("Trident/")!==-1}function zG(e){return e.indexOf("Edge/")!==-1}function BG(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:window.navigator.userAgent;return FG(e)||zG(e)}function ys(){for(var e=arguments.length,t=new Array(e),n=0;n1?o-1:0),l=1;le.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oK(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,s;for(s=0;s=0)&&(n[o]=e[o]);return n}var Py=i.forwardRef(function(e,t){var n=e.children,r=zm(e,KG),o=Ey(r),s=o.open,l=zm(o,qG);return i.useImperativeHandle(t,function(){return{open:s}},[s]),B.createElement(i.Fragment,null,n(kn(kn({},l),{},{open:s})))});Py.displayName="Dropzone";var Z6={disabled:!1,getFilesFromEvent:gG,maxSize:1/0,minSize:0,multiple:!0,maxFiles:0,preventDropOnDocument:!0,noClick:!1,noKeyboard:!1,noDrag:!1,noDragEventsBubbling:!1,validator:null,useFsAccessApi:!0,autoFocus:!1};Py.defaultProps=Z6;Py.propTypes={children:nn.func,accept:nn.objectOf(nn.arrayOf(nn.string)),multiple:nn.bool,preventDropOnDocument:nn.bool,noClick:nn.bool,noKeyboard:nn.bool,noDrag:nn.bool,noDragEventsBubbling:nn.bool,minSize:nn.number,maxSize:nn.number,maxFiles:nn.number,disabled:nn.bool,getFilesFromEvent:nn.func,onFileDialogCancel:nn.func,onFileDialogOpen:nn.func,useFsAccessApi:nn.bool,autoFocus:nn.bool,onDragEnter:nn.func,onDragLeave:nn.func,onDragOver:nn.func,onDrop:nn.func,onDropAccepted:nn.func,onDropRejected:nn.func,onError:nn.func,validator:nn.func};var kb={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,acceptedFiles:[],fileRejections:[]};function Ey(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=kn(kn({},Z6),e),n=t.accept,r=t.disabled,o=t.getFilesFromEvent,s=t.maxSize,l=t.minSize,c=t.multiple,d=t.maxFiles,f=t.onDragEnter,m=t.onDragLeave,h=t.onDragOver,g=t.onDrop,b=t.onDropAccepted,y=t.onDropRejected,x=t.onFileDialogCancel,w=t.onFileDialogOpen,S=t.useFsAccessApi,j=t.autoFocus,_=t.preventDropOnDocument,I=t.noClick,E=t.noKeyboard,M=t.noDrag,D=t.noDragEventsBubbling,R=t.onError,N=t.validator,O=i.useMemo(function(){return VG(n)},[n]),T=i.useMemo(function(){return WG(n)},[n]),U=i.useMemo(function(){return typeof w=="function"?w:x4},[w]),G=i.useMemo(function(){return typeof x=="function"?x:x4},[x]),q=i.useRef(null),Y=i.useRef(null),Q=i.useReducer(sK,kb),V=Jv(Q,2),se=V[0],ee=V[1],le=se.isFocused,ae=se.isFileDialogActive,ce=i.useRef(typeof window<"u"&&window.isSecureContext&&S&&HG()),J=function(){!ce.current&&ae&&setTimeout(function(){if(Y.current){var Me=Y.current.files;Me.length||(ee({type:"closeDialog"}),G())}},300)};i.useEffect(function(){return window.addEventListener("focus",J,!1),function(){window.removeEventListener("focus",J,!1)}},[Y,ae,G,ce]);var re=i.useRef([]),A=function(Me){q.current&&q.current.contains(Me.target)||(Me.preventDefault(),re.current=[])};i.useEffect(function(){return _&&(document.addEventListener("dragover",v4,!1),document.addEventListener("drop",A,!1)),function(){_&&(document.removeEventListener("dragover",v4),document.removeEventListener("drop",A))}},[q,_]),i.useEffect(function(){return!r&&j&&q.current&&q.current.focus(),function(){}},[q,j,r]);var L=i.useCallback(function(Ce){R?R(Ce):console.error(Ce)},[R]),K=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce),re.current=[].concat(YG(re.current),[Ce.target]),Op(Ce)&&Promise.resolve(o(Ce)).then(function(Me){if(!(Fm(Ce)&&!D)){var qe=Me.length,dt=qe>0&&LG({files:Me,accept:O,minSize:l,maxSize:s,multiple:c,maxFiles:d,validator:N}),ye=qe>0&&!dt;ee({isDragAccept:dt,isDragReject:ye,isDragActive:!0,type:"setDraggedFiles"}),f&&f(Ce)}}).catch(function(Me){return L(Me)})},[o,f,L,D,O,l,s,c,d,N]),ne=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce);var Me=Op(Ce);if(Me&&Ce.dataTransfer)try{Ce.dataTransfer.dropEffect="copy"}catch{}return Me&&h&&h(Ce),!1},[h,D]),z=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce);var Me=re.current.filter(function(dt){return q.current&&q.current.contains(dt)}),qe=Me.indexOf(Ce.target);qe!==-1&&Me.splice(qe,1),re.current=Me,!(Me.length>0)&&(ee({type:"setDraggedFiles",isDragActive:!1,isDragAccept:!1,isDragReject:!1}),Op(Ce)&&m&&m(Ce))},[q,m,D]),oe=i.useCallback(function(Ce,Me){var qe=[],dt=[];Ce.forEach(function(ye){var Ue=K6(ye,O),st=Jv(Ue,2),mt=st[0],Pe=st[1],Ne=q6(ye,l,s),kt=Jv(Ne,2),Se=kt[0],Ve=kt[1],Ge=N?N(ye):null;if(mt&&Se&&!Ge)qe.push(ye);else{var Le=[Pe,Ve];Ge&&(Le=Le.concat(Ge)),dt.push({file:ye,errors:Le.filter(function(bt){return bt})})}}),(!c&&qe.length>1||c&&d>=1&&qe.length>d)&&(qe.forEach(function(ye){dt.push({file:ye,errors:[$G]})}),qe.splice(0)),ee({acceptedFiles:qe,fileRejections:dt,type:"setFiles"}),g&&g(qe,dt,Me),dt.length>0&&y&&y(dt,Me),qe.length>0&&b&&b(qe,Me)},[ee,c,O,l,s,d,g,b,y,N]),X=i.useCallback(function(Ce){Ce.preventDefault(),Ce.persist(),$e(Ce),re.current=[],Op(Ce)&&Promise.resolve(o(Ce)).then(function(Me){Fm(Ce)&&!D||oe(Me,Ce)}).catch(function(Me){return L(Me)}),ee({type:"reset"})},[o,oe,L,D]),Z=i.useCallback(function(){if(ce.current){ee({type:"openDialog"}),U();var Ce={multiple:c,types:T};window.showOpenFilePicker(Ce).then(function(Me){return o(Me)}).then(function(Me){oe(Me,null),ee({type:"closeDialog"})}).catch(function(Me){UG(Me)?(G(Me),ee({type:"closeDialog"})):GG(Me)?(ce.current=!1,Y.current?(Y.current.value=null,Y.current.click()):L(new Error("Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no was provided."))):L(Me)});return}Y.current&&(ee({type:"openDialog"}),U(),Y.current.value=null,Y.current.click())},[ee,U,G,S,oe,L,T,c]),me=i.useCallback(function(Ce){!q.current||!q.current.isEqualNode(Ce.target)||(Ce.key===" "||Ce.key==="Enter"||Ce.keyCode===32||Ce.keyCode===13)&&(Ce.preventDefault(),Z())},[q,Z]),ve=i.useCallback(function(){ee({type:"focus"})},[]),de=i.useCallback(function(){ee({type:"blur"})},[]),ke=i.useCallback(function(){I||(BG()?setTimeout(Z,0):Z())},[I,Z]),we=function(Me){return r?null:Me},Re=function(Me){return E?null:we(Me)},Qe=function(Me){return M?null:we(Me)},$e=function(Me){D&&Me.stopPropagation()},vt=i.useMemo(function(){return function(){var Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Ce.refKey,qe=Me===void 0?"ref":Me,dt=Ce.role,ye=Ce.onKeyDown,Ue=Ce.onFocus,st=Ce.onBlur,mt=Ce.onClick,Pe=Ce.onDragEnter,Ne=Ce.onDragOver,kt=Ce.onDragLeave,Se=Ce.onDrop,Ve=zm(Ce,XG);return kn(kn(Sb({onKeyDown:Re(ys(ye,me)),onFocus:Re(ys(Ue,ve)),onBlur:Re(ys(st,de)),onClick:we(ys(mt,ke)),onDragEnter:Qe(ys(Pe,K)),onDragOver:Qe(ys(Ne,ne)),onDragLeave:Qe(ys(kt,z)),onDrop:Qe(ys(Se,X)),role:typeof dt=="string"&&dt!==""?dt:"presentation"},qe,q),!r&&!E?{tabIndex:0}:{}),Ve)}},[q,me,ve,de,ke,K,ne,z,X,E,M,r]),it=i.useCallback(function(Ce){Ce.stopPropagation()},[]),ot=i.useMemo(function(){return function(){var Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Me=Ce.refKey,qe=Me===void 0?"ref":Me,dt=Ce.onChange,ye=Ce.onClick,Ue=zm(Ce,QG),st=Sb({accept:O,multiple:c,type:"file",style:{display:"none"},onChange:we(ys(dt,X)),onClick:we(ys(ye,it)),tabIndex:-1},qe,Y);return kn(kn({},st),Ue)}},[Y,n,c,X,r]);return kn(kn({},se),{},{isFocused:le&&!r,getRootProps:vt,getInputProps:ot,rootRef:q,inputRef:Y,open:we(Z)})}function sK(e,t){switch(t.type){case"focus":return kn(kn({},e),{},{isFocused:!0});case"blur":return kn(kn({},e),{},{isFocused:!1});case"openDialog":return kn(kn({},kb),{},{isFileDialogActive:!0});case"closeDialog":return kn(kn({},e),{},{isFileDialogActive:!1});case"setDraggedFiles":return kn(kn({},e),{},{isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject});case"setFiles":return kn(kn({},e),{},{acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections});case"reset":return kn({},kb);default:return e}}function x4(){}function jb(){return jb=Object.assign?Object.assign.bind():function(e){for(var t=1;t'),!0):t?e.some(function(n){return t.includes(n)})||e.includes("*"):!0}var fK=function(t,n,r){r===void 0&&(r=!1);var o=n.alt,s=n.meta,l=n.mod,c=n.shift,d=n.ctrl,f=n.keys,m=t.key,h=t.code,g=t.ctrlKey,b=t.metaKey,y=t.shiftKey,x=t.altKey,w=Ka(h),S=m.toLowerCase();if(!r){if(o===!x&&S!=="alt"||c===!y&&S!=="shift")return!1;if(l){if(!b&&!g)return!1}else if(s===!b&&S!=="meta"&&S!=="os"||d===!g&&S!=="ctrl"&&S!=="control")return!1}return f&&f.length===1&&(f.includes(S)||f.includes(w))?!0:f?pm(f):!f},pK=i.createContext(void 0),mK=function(){return i.useContext(pK)};function rP(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce(function(n,r){return n&&rP(e[r],t[r])},!0):e===t}var hK=i.createContext({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),gK=function(){return i.useContext(hK)};function vK(e){var t=i.useRef(void 0);return rP(t.current,e)||(t.current=e),t.current}var y4=function(t){t.stopPropagation(),t.preventDefault(),t.stopImmediatePropagation()},bK=typeof window<"u"?i.useLayoutEffect:i.useEffect;function tt(e,t,n,r){var o=i.useRef(null),s=i.useRef(!1),l=n instanceof Array?r instanceof Array?void 0:r:n,c=My(e)?e.join(l==null?void 0:l.splitKey):e,d=n instanceof Array?n:r instanceof Array?r:void 0,f=i.useCallback(t,d??[]),m=i.useRef(f);d?m.current=f:m.current=t;var h=vK(l),g=gK(),b=g.enabledScopes,y=mK();return bK(function(){if(!((h==null?void 0:h.enabled)===!1||!dK(b,h==null?void 0:h.scopes))){var x=function(I,E){var M;if(E===void 0&&(E=!1),!(uK(I)&&!nP(I,h==null?void 0:h.enableOnFormTags))&&!(h!=null&&h.ignoreEventWhen!=null&&h.ignoreEventWhen(I))){if(o.current!==null&&document.activeElement!==o.current&&!o.current.contains(document.activeElement)){y4(I);return}(M=I.target)!=null&&M.isContentEditable&&!(h!=null&&h.enableOnContentEditable)||e1(c,h==null?void 0:h.splitKey).forEach(function(D){var R,N=t1(D,h==null?void 0:h.combinationKey);if(fK(I,N,h==null?void 0:h.ignoreModifiers)||(R=N.keys)!=null&&R.includes("*")){if(E&&s.current)return;if(iK(I,N,h==null?void 0:h.preventDefault),!cK(I,N,h==null?void 0:h.enabled)){y4(I);return}m.current(I,N),E||(s.current=!0)}})}},w=function(I){I.key!==void 0&&(eP(Ka(I.code)),((h==null?void 0:h.keydown)===void 0&&(h==null?void 0:h.keyup)!==!0||h!=null&&h.keydown)&&x(I))},S=function(I){I.key!==void 0&&(tP(Ka(I.code)),s.current=!1,h!=null&&h.keyup&&x(I,!0))},j=o.current||(l==null?void 0:l.document)||document;return j.addEventListener("keyup",S),j.addEventListener("keydown",w),y&&e1(c,h==null?void 0:h.splitKey).forEach(function(_){return y.addHotkey(t1(_,h==null?void 0:h.combinationKey,h==null?void 0:h.description))}),function(){j.removeEventListener("keyup",S),j.removeEventListener("keydown",w),y&&e1(c,h==null?void 0:h.splitKey).forEach(function(_){return y.removeHotkey(t1(_,h==null?void 0:h.combinationKey,h==null?void 0:h.description))})}}},[c,h,b]),o}const xK=e=>{const{t}=W(),{isDragAccept:n,isDragReject:r,setIsHandlingUpload:o}=e;return tt("esc",()=>{o(!1)}),a.jsxs(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"100vw",height:"100vh",zIndex:999,backdropFilter:"blur(20px)"},children:[a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:"base.700",_dark:{bg:"base.900"},opacity:.7,alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,width:"full",height:"full",alignItems:"center",justifyContent:"center",p:4},children:a.jsx($,{sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",flexDir:"column",gap:4,borderWidth:3,borderRadius:"xl",borderStyle:"dashed",color:"base.100",borderColor:"base.100",_dark:{borderColor:"base.200"}},children:n?a.jsx(or,{size:"lg",children:t("gallery.dropToUpload")}):a.jsxs(a.Fragment,{children:[a.jsx(or,{size:"lg",children:t("toast.invalidUpload")}),a.jsx(or,{size:"md",children:t("toast.uploadFailedInvalidUploadDesc")})]})})})]})},yK=i.memo(xK),CK=fe([pe,tr],({gallery:e},t)=>{let n={type:"TOAST"};t==="unifiedCanvas"&&(n={type:"SET_CANVAS_INITIAL_IMAGE"}),t==="img2img"&&(n={type:"SET_INITIAL_IMAGE"});const{autoAddBoardId:r}=e;return{autoAddBoardId:r,postUploadAction:n}}),wK=e=>{const{children:t}=e,{autoAddBoardId:n,postUploadAction:r}=H(CK),o=zs(),{t:s}=W(),[l,c]=i.useState(!1),[d]=CI(),f=i.useCallback(I=>{c(!0),o({title:s("toast.uploadFailed"),description:I.errors.map(E=>E.message).join(` +`),status:"error"})},[s,o]),m=i.useCallback(async I=>{d({file:I,image_category:"user",is_intermediate:!1,postUploadAction:r,board_id:n==="none"?void 0:n})},[n,r,d]),h=i.useCallback((I,E)=>{if(E.length>1){o({title:s("toast.uploadFailed"),description:s("toast.uploadFailedInvalidUploadDesc"),status:"error"});return}E.forEach(M=>{f(M)}),I.forEach(M=>{m(M)})},[s,o,m,f]),g=i.useCallback(()=>{c(!0)},[]),{getRootProps:b,getInputProps:y,isDragAccept:x,isDragReject:w,isDragActive:S,inputRef:j}=Ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},noClick:!0,onDrop:h,onDragOver:g,multiple:!1});i.useEffect(()=>{const I=async E=>{var M,D;j.current&&(M=E.clipboardData)!=null&&M.files&&(j.current.files=E.clipboardData.files,(D=j.current)==null||D.dispatchEvent(new Event("change",{bubbles:!0})))};return document.addEventListener("paste",I),()=>{document.removeEventListener("paste",I)}},[j]);const _=i.useCallback(I=>{I.key},[]);return a.jsxs(Ie,{...b({style:{}}),onKeyDown:_,children:[a.jsx("input",{...y()}),t,a.jsx(hr,{children:S&&l&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(yK,{isDragAccept:x,isDragReject:w,setIsHandlingUpload:c})},"image-upload-overlay")})]})},SK=i.memo(wK),kK=_e((e,t)=>{const{children:n,tooltip:r="",tooltipProps:{placement:o="top",hasArrow:s=!0,...l}={},isChecked:c,...d}=e;return a.jsx(Ut,{label:r,placement:o,hasArrow:s,...l,children:a.jsx(ol,{ref:t,colorScheme:c?"accent":"base",...d,children:n})})}),Xe=i.memo(kK);function jK(e){const t=i.createContext(null);return[({children:o,value:s})=>B.createElement(t.Provider,{value:s},o),()=>{const o=i.useContext(t);if(o===null)throw new Error(e);return o}]}function oP(e){return Array.isArray(e)?e:[e]}const _K=()=>{};function IK(e,t={active:!0}){return typeof e!="function"||!t.active?t.onKeyDown||_K:n=>{var r;n.key==="Escape"&&(e(n),(r=t.onTrigger)==null||r.call(t))}}function sP({data:e}){const t=[],n=[],r=e.reduce((o,s,l)=>(s.group?o[s.group]?o[s.group].push(l):o[s.group]=[l]:n.push(l),o),{});return Object.keys(r).forEach(o=>{t.push(...r[o].map(s=>e[s]))}),t.push(...n.map(o=>e[o])),t}function aP(e){return Array.isArray(e)||e===null?!1:typeof e=="object"?e.type!==B.Fragment:!1}function lP(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;tr===t[o]).indexOf(!1)>=0)&&(n.current={v:e(),prevDeps:[...t]}),n.current.v}const MK=$R({key:"mantine",prepend:!0});function OK(){return k3()||MK}var DK=Object.defineProperty,C4=Object.getOwnPropertySymbols,RK=Object.prototype.hasOwnProperty,AK=Object.prototype.propertyIsEnumerable,w4=(e,t,n)=>t in e?DK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,TK=(e,t)=>{for(var n in t||(t={}))RK.call(t,n)&&w4(e,n,t[n]);if(C4)for(var n of C4(t))AK.call(t,n)&&w4(e,n,t[n]);return e};const n1="ref";function NK(e){let t;if(e.length!==1)return{args:e,ref:t};const[n]=e;if(!(n instanceof Object))return{args:e,ref:t};if(!(n1 in n))return{args:e,ref:t};t=n[n1];const r=TK({},n);return delete r[n1],{args:[r],ref:t}}const{cssFactory:$K}=(()=>{function e(n,r,o){const s=[],l=zR(n,s,o);return s.length<2?o:l+r(s)}function t(n){const{cache:r}=n,o=(...l)=>{const{ref:c,args:d}=NK(l),f=LR(d,r.registered);return FR(r,f,!1),`${r.key}-${f.name}${c===void 0?"":` ${c}`}`};return{css:o,cx:(...l)=>e(r.registered,o,iP(l))}}return{cssFactory:t}})();function cP(){const e=OK();return EK(()=>$K({cache:e}),[e])}function LK({cx:e,classes:t,context:n,classNames:r,name:o,cache:s}){const l=n.reduce((c,d)=>(Object.keys(d.classNames).forEach(f=>{typeof c[f]!="string"?c[f]=`${d.classNames[f]}`:c[f]=`${c[f]} ${d.classNames[f]}`}),c),{});return Object.keys(t).reduce((c,d)=>(c[d]=e(t[d],l[d],r!=null&&r[d],Array.isArray(o)?o.filter(Boolean).map(f=>`${(s==null?void 0:s.key)||"mantine"}-${f}-${d}`).join(" "):o?`${(s==null?void 0:s.key)||"mantine"}-${o}-${d}`:null),c),{})}var FK=Object.defineProperty,S4=Object.getOwnPropertySymbols,zK=Object.prototype.hasOwnProperty,BK=Object.prototype.propertyIsEnumerable,k4=(e,t,n)=>t in e?FK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,r1=(e,t)=>{for(var n in t||(t={}))zK.call(t,n)&&k4(e,n,t[n]);if(S4)for(var n of S4(t))BK.call(t,n)&&k4(e,n,t[n]);return e};function _b(e,t){return t&&Object.keys(t).forEach(n=>{e[n]?e[n]=r1(r1({},e[n]),t[n]):e[n]=r1({},t[n])}),e}function j4(e,t,n,r){const o=s=>typeof s=="function"?s(t,n||{},r):s||{};return Array.isArray(e)?e.map(s=>o(s.styles)).reduce((s,l)=>_b(s,l),{}):o(e)}function HK({ctx:e,theme:t,params:n,variant:r,size:o}){return e.reduce((s,l)=>(l.variants&&r in l.variants&&_b(s,l.variants[r](t,n,{variant:r,size:o})),l.sizes&&o in l.sizes&&_b(s,l.sizes[o](t,n,{variant:r,size:o})),s),{})}function gr(e){const t=typeof e=="function"?e:()=>e;function n(r,o){const s=wa(),l=aL(o==null?void 0:o.name),c=k3(),d={variant:o==null?void 0:o.variant,size:o==null?void 0:o.size},{css:f,cx:m}=cP(),h=t(s,r,d),g=j4(o==null?void 0:o.styles,s,r,d),b=j4(l,s,r,d),y=HK({ctx:l,theme:s,params:r,variant:o==null?void 0:o.variant,size:o==null?void 0:o.size}),x=Object.fromEntries(Object.keys(h).map(w=>{const S=m({[f(h[w])]:!(o!=null&&o.unstyled)},f(y[w]),f(b[w]),f(g[w]));return[w,S]}));return{classes:LK({cx:m,classes:x,context:l,classNames:o==null?void 0:o.classNames,name:o==null?void 0:o.name,cache:c}),cx:m,theme:s}}return n}function _4(e){return`___ref-${e||""}`}var WK=Object.defineProperty,VK=Object.defineProperties,UK=Object.getOwnPropertyDescriptors,I4=Object.getOwnPropertySymbols,GK=Object.prototype.hasOwnProperty,KK=Object.prototype.propertyIsEnumerable,P4=(e,t,n)=>t in e?WK(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Fu=(e,t)=>{for(var n in t||(t={}))GK.call(t,n)&&P4(e,n,t[n]);if(I4)for(var n of I4(t))KK.call(t,n)&&P4(e,n,t[n]);return e},zu=(e,t)=>VK(e,UK(t));const Bu={in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:`scale(.9) translateY(${Ae(10)})`},transitionProperty:"transform, opacity"},Dp={fade:{in:{opacity:1},out:{opacity:0},transitionProperty:"opacity"},scale:{in:{opacity:1,transform:"scale(1)"},out:{opacity:0,transform:"scale(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-y":{in:{opacity:1,transform:"scaleY(1)"},out:{opacity:0,transform:"scaleY(0)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"scale-x":{in:{opacity:1,transform:"scaleX(1)"},out:{opacity:0,transform:"scaleX(0)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"skew-up":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(-${Ae(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"skew-down":{in:{opacity:1,transform:"translateY(0) skew(0deg, 0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) skew(-10deg, -5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-left":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) rotate(-5deg)`},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"rotate-right":{in:{opacity:1,transform:"translateY(0) rotate(0deg)"},out:{opacity:0,transform:`translateY(${Ae(20)}) rotate(5deg)`},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-down":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(-100%)"},common:{transformOrigin:"top"},transitionProperty:"transform, opacity"},"slide-up":{in:{opacity:1,transform:"translateY(0)"},out:{opacity:0,transform:"translateY(100%)"},common:{transformOrigin:"bottom"},transitionProperty:"transform, opacity"},"slide-left":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(100%)"},common:{transformOrigin:"left"},transitionProperty:"transform, opacity"},"slide-right":{in:{opacity:1,transform:"translateX(0)"},out:{opacity:0,transform:"translateX(-100%)"},common:{transformOrigin:"right"},transitionProperty:"transform, opacity"},pop:zu(Fu({},Bu),{common:{transformOrigin:"center center"}}),"pop-bottom-left":zu(Fu({},Bu),{common:{transformOrigin:"bottom left"}}),"pop-bottom-right":zu(Fu({},Bu),{common:{transformOrigin:"bottom right"}}),"pop-top-left":zu(Fu({},Bu),{common:{transformOrigin:"top left"}}),"pop-top-right":zu(Fu({},Bu),{common:{transformOrigin:"top right"}})},E4=["mousedown","touchstart"];function qK(e,t,n){const r=i.useRef();return i.useEffect(()=>{const o=s=>{const{target:l}=s??{};if(Array.isArray(n)){const c=(l==null?void 0:l.hasAttribute("data-ignore-outside-clicks"))||!document.body.contains(l)&&l.tagName!=="HTML";n.every(f=>!!f&&!s.composedPath().includes(f))&&!c&&e()}else r.current&&!r.current.contains(l)&&e()};return(t||E4).forEach(s=>document.addEventListener(s,o)),()=>{(t||E4).forEach(s=>document.removeEventListener(s,o))}},[r,e,n]),r}function XK(e,t){try{return e.addEventListener("change",t),()=>e.removeEventListener("change",t)}catch{return e.addListener(t),()=>e.removeListener(t)}}function QK(e,t){return typeof t=="boolean"?t:typeof window<"u"&&"matchMedia"in window?window.matchMedia(e).matches:!1}function YK(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){const[r,o]=i.useState(n?t:QK(e,t)),s=i.useRef();return i.useEffect(()=>{if("matchMedia"in window)return s.current=window.matchMedia(e),o(s.current.matches),XK(s.current,l=>o(l.matches))},[e]),r}const uP=typeof document<"u"?i.useLayoutEffect:i.useEffect;function os(e,t){const n=i.useRef(!1);i.useEffect(()=>()=>{n.current=!1},[]),i.useEffect(()=>{if(n.current)return e();n.current=!0},t)}function ZK({opened:e,shouldReturnFocus:t=!0}){const n=i.useRef(),r=()=>{var o;n.current&&"focus"in n.current&&typeof n.current.focus=="function"&&((o=n.current)==null||o.focus({preventScroll:!0}))};return os(()=>{let o=-1;const s=l=>{l.key==="Tab"&&window.clearTimeout(o)};return document.addEventListener("keydown",s),e?n.current=document.activeElement:t&&(o=window.setTimeout(r,10)),()=>{window.clearTimeout(o),document.removeEventListener("keydown",s)}},[e,t]),r}const JK=/input|select|textarea|button|object/,dP="a, input, select, textarea, button, object, [tabindex]";function eq(e){return e.style.display==="none"}function tq(e){if(e.getAttribute("aria-hidden")||e.getAttribute("hidden")||e.getAttribute("type")==="hidden")return!1;let n=e;for(;n&&!(n===document.body||n.nodeType===11);){if(eq(n))return!1;n=n.parentNode}return!0}function fP(e){let t=e.getAttribute("tabindex");return t===null&&(t=void 0),parseInt(t,10)}function Ib(e){const t=e.nodeName.toLowerCase(),n=!Number.isNaN(fP(e));return(JK.test(t)&&!e.disabled||e instanceof HTMLAnchorElement&&e.href||n)&&tq(e)}function pP(e){const t=fP(e);return(Number.isNaN(t)||t>=0)&&Ib(e)}function nq(e){return Array.from(e.querySelectorAll(dP)).filter(pP)}function rq(e,t){const n=nq(e);if(!n.length){t.preventDefault();return}const r=n[t.shiftKey?0:n.length-1],o=e.getRootNode();if(!(r===o.activeElement||e===o.activeElement))return;t.preventDefault();const l=n[t.shiftKey?n.length-1:0];l&&l.focus()}function Dy(){return`mantine-${Math.random().toString(36).slice(2,11)}`}function oq(e,t="body > :not(script)"){const n=Dy(),r=Array.from(document.querySelectorAll(t)).map(o=>{var s;if((s=o==null?void 0:o.shadowRoot)!=null&&s.contains(e)||o.contains(e))return;const l=o.getAttribute("aria-hidden"),c=o.getAttribute("data-hidden"),d=o.getAttribute("data-focus-id");return o.setAttribute("data-focus-id",n),l===null||l==="false"?o.setAttribute("aria-hidden","true"):!c&&!d&&o.setAttribute("data-hidden",l),{node:o,ariaHidden:c||null}});return()=>{r.forEach(o=>{!o||n!==o.node.getAttribute("data-focus-id")||(o.ariaHidden===null?o.node.removeAttribute("aria-hidden"):o.node.setAttribute("aria-hidden",o.ariaHidden),o.node.removeAttribute("data-focus-id"),o.node.removeAttribute("data-hidden"))})}}function sq(e=!0){const t=i.useRef(),n=i.useRef(null),r=s=>{let l=s.querySelector("[data-autofocus]");if(!l){const c=Array.from(s.querySelectorAll(dP));l=c.find(pP)||c.find(Ib)||null,!l&&Ib(s)&&(l=s)}l&&l.focus({preventScroll:!0})},o=i.useCallback(s=>{if(e){if(s===null){n.current&&(n.current(),n.current=null);return}n.current=oq(s),t.current!==s&&(s?(setTimeout(()=>{s.getRootNode()&&r(s)}),t.current=s):t.current=null)}},[e]);return i.useEffect(()=>{if(!e)return;t.current&&setTimeout(()=>r(t.current));const s=l=>{l.key==="Tab"&&t.current&&rq(t.current,l)};return document.addEventListener("keydown",s),()=>{document.removeEventListener("keydown",s),n.current&&n.current()}},[e]),o}const aq=B["useId".toString()]||(()=>{});function lq(){const e=aq();return e?`mantine-${e.replace(/:/g,"")}`:""}function Ry(e){const t=lq(),[n,r]=i.useState(t);return uP(()=>{r(Dy())},[]),typeof e=="string"?e:typeof window>"u"?t:n}function M4(e,t,n){i.useEffect(()=>(window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)),[e,t])}function mP(e,t){typeof e=="function"?e(t):typeof e=="object"&&e!==null&&"current"in e&&(e.current=t)}function iq(...e){return t=>{e.forEach(n=>mP(n,t))}}function df(...e){return i.useCallback(iq(...e),e)}function Pd({value:e,defaultValue:t,finalValue:n,onChange:r=()=>{}}){const[o,s]=i.useState(t!==void 0?t:n),l=c=>{s(c),r==null||r(c)};return e!==void 0?[e,r,!0]:[o,l,!1]}function hP(e,t){return YK("(prefers-reduced-motion: reduce)",e,t)}const cq=e=>e<.5?2*e*e:-1+(4-2*e)*e,uq=({axis:e,target:t,parent:n,alignment:r,offset:o,isList:s})=>{if(!t||!n&&typeof document>"u")return 0;const l=!!n,d=(n||document.body).getBoundingClientRect(),f=t.getBoundingClientRect(),m=h=>f[h]-d[h];if(e==="y"){const h=m("top");if(h===0)return 0;if(r==="start"){const b=h-o;return b<=f.height*(s?0:1)||!s?b:0}const g=l?d.height:window.innerHeight;if(r==="end"){const b=h+o-g+f.height;return b>=-f.height*(s?0:1)||!s?b:0}return r==="center"?h-g/2+f.height/2:0}if(e==="x"){const h=m("left");if(h===0)return 0;if(r==="start"){const b=h-o;return b<=f.width||!s?b:0}const g=l?d.width:window.innerWidth;if(r==="end"){const b=h+o-g+f.width;return b>=-f.width||!s?b:0}return r==="center"?h-g/2+f.width/2:0}return 0},dq=({axis:e,parent:t})=>{if(!t&&typeof document>"u")return 0;const n=e==="y"?"scrollTop":"scrollLeft";if(t)return t[n];const{body:r,documentElement:o}=document;return r[n]+o[n]},fq=({axis:e,parent:t,distance:n})=>{if(!t&&typeof document>"u")return;const r=e==="y"?"scrollTop":"scrollLeft";if(t)t[r]=n;else{const{body:o,documentElement:s}=document;o[r]=n,s[r]=n}};function gP({duration:e=1250,axis:t="y",onScrollFinish:n,easing:r=cq,offset:o=0,cancelable:s=!0,isList:l=!1}={}){const c=i.useRef(0),d=i.useRef(0),f=i.useRef(!1),m=i.useRef(null),h=i.useRef(null),g=hP(),b=()=>{c.current&&cancelAnimationFrame(c.current)},y=i.useCallback(({alignment:w="start"}={})=>{var S;f.current=!1,c.current&&b();const j=(S=dq({parent:m.current,axis:t}))!=null?S:0,_=uq({parent:m.current,target:h.current,axis:t,alignment:w,offset:o,isList:l})-(m.current?0:j);function I(){d.current===0&&(d.current=performance.now());const M=performance.now()-d.current,D=g||e===0?1:M/e,R=j+_*r(D);fq({parent:m.current,axis:t,distance:R}),!f.current&&D<1?c.current=requestAnimationFrame(I):(typeof n=="function"&&n(),d.current=0,c.current=0,b())}I()},[t,e,r,l,o,n,g]),x=()=>{s&&(f.current=!0)};return M4("wheel",x,{passive:!0}),M4("touchmove",x,{passive:!0}),i.useEffect(()=>b,[]),{scrollableRef:m,targetRef:h,scrollIntoView:y,cancel:b}}var O4=Object.getOwnPropertySymbols,pq=Object.prototype.hasOwnProperty,mq=Object.prototype.propertyIsEnumerable,hq=(e,t)=>{var n={};for(var r in e)pq.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&O4)for(var r of O4(e))t.indexOf(r)<0&&mq.call(e,r)&&(n[r]=e[r]);return n};function Eg(e){const t=e,{m:n,mx:r,my:o,mt:s,mb:l,ml:c,mr:d,p:f,px:m,py:h,pt:g,pb:b,pl:y,pr:x,bg:w,c:S,opacity:j,ff:_,fz:I,fw:E,lts:M,ta:D,lh:R,fs:N,tt:O,td:T,w:U,miw:G,maw:q,h:Y,mih:Q,mah:V,bgsz:se,bgp:ee,bgr:le,bga:ae,pos:ce,top:J,left:re,bottom:A,right:L,inset:K,display:ne}=t,z=hq(t,["m","mx","my","mt","mb","ml","mr","p","px","py","pt","pb","pl","pr","bg","c","opacity","ff","fz","fw","lts","ta","lh","fs","tt","td","w","miw","maw","h","mih","mah","bgsz","bgp","bgr","bga","pos","top","left","bottom","right","inset","display"]);return{systemStyles:lL({m:n,mx:r,my:o,mt:s,mb:l,ml:c,mr:d,p:f,px:m,py:h,pt:g,pb:b,pl:y,pr:x,bg:w,c:S,opacity:j,ff:_,fz:I,fw:E,lts:M,ta:D,lh:R,fs:N,tt:O,td:T,w:U,miw:G,maw:q,h:Y,mih:Q,mah:V,bgsz:se,bgp:ee,bgr:le,bga:ae,pos:ce,top:J,left:re,bottom:A,right:L,inset:K,display:ne}),rest:z}}function gq(e,t){const n=Object.keys(e).filter(r=>r!=="base").sort((r,o)=>CS(pt({size:r,sizes:t.breakpoints}))-CS(pt({size:o,sizes:t.breakpoints})));return"base"in e?["base",...n]:n}function vq({value:e,theme:t,getValue:n,property:r}){if(e==null)return;if(typeof e=="object")return gq(e,t).reduce((l,c)=>{if(c==="base"&&e.base!==void 0){const f=n(e.base,t);return Array.isArray(r)?(r.forEach(m=>{l[m]=f}),l):(l[r]=f,l)}const d=n(e[c],t);return Array.isArray(r)?(l[t.fn.largerThan(c)]={},r.forEach(f=>{l[t.fn.largerThan(c)][f]=d}),l):(l[t.fn.largerThan(c)]={[r]:d},l)},{});const o=n(e,t);return Array.isArray(r)?r.reduce((s,l)=>(s[l]=o,s),{}):{[r]:o}}function bq(e,t){return e==="dimmed"?t.colorScheme==="dark"?t.colors.dark[2]:t.colors.gray[6]:t.fn.variant({variant:"filled",color:e,primaryFallback:!1}).background}function xq(e){return Ae(e)}function yq(e){return e}function Cq(e,t){return pt({size:e,sizes:t.fontSizes})}const wq=["-xs","-sm","-md","-lg","-xl"];function Sq(e,t){return wq.includes(e)?`calc(${pt({size:e.replace("-",""),sizes:t.spacing})} * -1)`:pt({size:e,sizes:t.spacing})}const kq={identity:yq,color:bq,size:xq,fontSize:Cq,spacing:Sq},jq={m:{type:"spacing",property:"margin"},mt:{type:"spacing",property:"marginTop"},mb:{type:"spacing",property:"marginBottom"},ml:{type:"spacing",property:"marginLeft"},mr:{type:"spacing",property:"marginRight"},mx:{type:"spacing",property:["marginRight","marginLeft"]},my:{type:"spacing",property:["marginTop","marginBottom"]},p:{type:"spacing",property:"padding"},pt:{type:"spacing",property:"paddingTop"},pb:{type:"spacing",property:"paddingBottom"},pl:{type:"spacing",property:"paddingLeft"},pr:{type:"spacing",property:"paddingRight"},px:{type:"spacing",property:["paddingRight","paddingLeft"]},py:{type:"spacing",property:["paddingTop","paddingBottom"]},bg:{type:"color",property:"background"},c:{type:"color",property:"color"},opacity:{type:"identity",property:"opacity"},ff:{type:"identity",property:"fontFamily"},fz:{type:"fontSize",property:"fontSize"},fw:{type:"identity",property:"fontWeight"},lts:{type:"size",property:"letterSpacing"},ta:{type:"identity",property:"textAlign"},lh:{type:"identity",property:"lineHeight"},fs:{type:"identity",property:"fontStyle"},tt:{type:"identity",property:"textTransform"},td:{type:"identity",property:"textDecoration"},w:{type:"spacing",property:"width"},miw:{type:"spacing",property:"minWidth"},maw:{type:"spacing",property:"maxWidth"},h:{type:"spacing",property:"height"},mih:{type:"spacing",property:"minHeight"},mah:{type:"spacing",property:"maxHeight"},bgsz:{type:"size",property:"backgroundSize"},bgp:{type:"identity",property:"backgroundPosition"},bgr:{type:"identity",property:"backgroundRepeat"},bga:{type:"identity",property:"backgroundAttachment"},pos:{type:"identity",property:"position"},top:{type:"identity",property:"top"},left:{type:"size",property:"left"},bottom:{type:"size",property:"bottom"},right:{type:"size",property:"right"},inset:{type:"size",property:"inset"},display:{type:"identity",property:"display"}};var _q=Object.defineProperty,D4=Object.getOwnPropertySymbols,Iq=Object.prototype.hasOwnProperty,Pq=Object.prototype.propertyIsEnumerable,R4=(e,t,n)=>t in e?_q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,A4=(e,t)=>{for(var n in t||(t={}))Iq.call(t,n)&&R4(e,n,t[n]);if(D4)for(var n of D4(t))Pq.call(t,n)&&R4(e,n,t[n]);return e};function T4(e,t,n=jq){return Object.keys(n).reduce((o,s)=>(s in e&&e[s]!==void 0&&o.push(vq({value:e[s],getValue:kq[n[s].type],property:n[s].property,theme:t})),o),[]).reduce((o,s)=>(Object.keys(s).forEach(l=>{typeof s[l]=="object"&&s[l]!==null&&l in o?o[l]=A4(A4({},o[l]),s[l]):o[l]=s[l]}),o),{})}function N4(e,t){return typeof e=="function"?e(t):e}function Eq(e,t,n){const r=wa(),{css:o,cx:s}=cP();return Array.isArray(e)?s(n,o(T4(t,r)),e.map(l=>o(N4(l,r)))):s(n,o(N4(e,r)),o(T4(t,r)))}var Mq=Object.defineProperty,Bm=Object.getOwnPropertySymbols,vP=Object.prototype.hasOwnProperty,bP=Object.prototype.propertyIsEnumerable,$4=(e,t,n)=>t in e?Mq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Oq=(e,t)=>{for(var n in t||(t={}))vP.call(t,n)&&$4(e,n,t[n]);if(Bm)for(var n of Bm(t))bP.call(t,n)&&$4(e,n,t[n]);return e},Dq=(e,t)=>{var n={};for(var r in e)vP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bm)for(var r of Bm(e))t.indexOf(r)<0&&bP.call(e,r)&&(n[r]=e[r]);return n};const xP=i.forwardRef((e,t)=>{var n=e,{className:r,component:o,style:s,sx:l}=n,c=Dq(n,["className","component","style","sx"]);const{systemStyles:d,rest:f}=Eg(c),m=o||"div";return B.createElement(m,Oq({ref:t,className:Eq(l,d,r),style:s},f))});xP.displayName="@mantine/core/Box";const Vr=xP;var Rq=Object.defineProperty,Aq=Object.defineProperties,Tq=Object.getOwnPropertyDescriptors,L4=Object.getOwnPropertySymbols,Nq=Object.prototype.hasOwnProperty,$q=Object.prototype.propertyIsEnumerable,F4=(e,t,n)=>t in e?Rq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,z4=(e,t)=>{for(var n in t||(t={}))Nq.call(t,n)&&F4(e,n,t[n]);if(L4)for(var n of L4(t))$q.call(t,n)&&F4(e,n,t[n]);return e},Lq=(e,t)=>Aq(e,Tq(t)),Fq=gr(e=>({root:Lq(z4(z4({},e.fn.focusStyles()),e.fn.fontStyles()),{cursor:"pointer",border:0,padding:0,appearance:"none",fontSize:e.fontSizes.md,backgroundColor:"transparent",textAlign:"left",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,textDecoration:"none",boxSizing:"border-box"})}));const zq=Fq;var Bq=Object.defineProperty,Hm=Object.getOwnPropertySymbols,yP=Object.prototype.hasOwnProperty,CP=Object.prototype.propertyIsEnumerable,B4=(e,t,n)=>t in e?Bq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hq=(e,t)=>{for(var n in t||(t={}))yP.call(t,n)&&B4(e,n,t[n]);if(Hm)for(var n of Hm(t))CP.call(t,n)&&B4(e,n,t[n]);return e},Wq=(e,t)=>{var n={};for(var r in e)yP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Hm)for(var r of Hm(e))t.indexOf(r)<0&&CP.call(e,r)&&(n[r]=e[r]);return n};const wP=i.forwardRef((e,t)=>{const n=Nn("UnstyledButton",{},e),{className:r,component:o="button",unstyled:s,variant:l}=n,c=Wq(n,["className","component","unstyled","variant"]),{classes:d,cx:f}=zq(null,{name:"UnstyledButton",unstyled:s,variant:l});return B.createElement(Vr,Hq({component:o,ref:t,className:f(d.root,r),type:o==="button"?"button":void 0},c))});wP.displayName="@mantine/core/UnstyledButton";const Vq=wP;var Uq=Object.defineProperty,Gq=Object.defineProperties,Kq=Object.getOwnPropertyDescriptors,H4=Object.getOwnPropertySymbols,qq=Object.prototype.hasOwnProperty,Xq=Object.prototype.propertyIsEnumerable,W4=(e,t,n)=>t in e?Uq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Pb=(e,t)=>{for(var n in t||(t={}))qq.call(t,n)&&W4(e,n,t[n]);if(H4)for(var n of H4(t))Xq.call(t,n)&&W4(e,n,t[n]);return e},V4=(e,t)=>Gq(e,Kq(t));const Qq=["subtle","filled","outline","light","default","transparent","gradient"],Rp={xs:Ae(18),sm:Ae(22),md:Ae(28),lg:Ae(34),xl:Ae(44)};function Yq({variant:e,theme:t,color:n,gradient:r}){const o=t.fn.variant({color:n,variant:e,gradient:r});return e==="gradient"?{border:0,backgroundImage:o.background,color:o.color,"&:hover":t.fn.hover({backgroundSize:"200%"})}:Qq.includes(e)?Pb({border:`${Ae(1)} solid ${o.border}`,backgroundColor:o.background,color:o.color},t.fn.hover({backgroundColor:o.hover})):null}var Zq=gr((e,{radius:t,color:n,gradient:r},{variant:o,size:s})=>({root:V4(Pb({position:"relative",borderRadius:e.fn.radius(t),padding:0,lineHeight:1,display:"flex",alignItems:"center",justifyContent:"center",height:pt({size:s,sizes:Rp}),minHeight:pt({size:s,sizes:Rp}),width:pt({size:s,sizes:Rp}),minWidth:pt({size:s,sizes:Rp})},Yq({variant:o,theme:e,color:n,gradient:r})),{"&:active":e.activeStyles,"& [data-action-icon-loader]":{maxWidth:"70%"},"&:disabled, &[data-disabled]":{color:e.colors.gray[e.colorScheme==="dark"?6:4],cursor:"not-allowed",backgroundColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),borderColor:o==="transparent"?void 0:e.fn.themeColor("gray",e.colorScheme==="dark"?8:1),backgroundImage:"none",pointerEvents:"none","&:active":{transform:"none"}},"&[data-loading]":{pointerEvents:"none","&::before":V4(Pb({content:'""'},e.fn.cover(Ae(-1))),{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.colors.dark[7],.5):"rgba(255, 255, 255, .5)",borderRadius:e.fn.radius(t),cursor:"not-allowed"})}})}));const Jq=Zq;var eX=Object.defineProperty,Wm=Object.getOwnPropertySymbols,SP=Object.prototype.hasOwnProperty,kP=Object.prototype.propertyIsEnumerable,U4=(e,t,n)=>t in e?eX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,G4=(e,t)=>{for(var n in t||(t={}))SP.call(t,n)&&U4(e,n,t[n]);if(Wm)for(var n of Wm(t))kP.call(t,n)&&U4(e,n,t[n]);return e},K4=(e,t)=>{var n={};for(var r in e)SP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Wm)for(var r of Wm(e))t.indexOf(r)<0&&kP.call(e,r)&&(n[r]=e[r]);return n};function tX(e){var t=e,{size:n,color:r}=t,o=K4(t,["size","color"]);const s=o,{style:l}=s,c=K4(s,["style"]);return B.createElement("svg",G4({viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg",fill:r,style:G4({width:n},l)},c),B.createElement("rect",{y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"30",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"60",width:"15",height:"140",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"90",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("rect",{x:"120",y:"10",width:"15",height:"120",rx:"6"},B.createElement("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})))}var nX=Object.defineProperty,Vm=Object.getOwnPropertySymbols,jP=Object.prototype.hasOwnProperty,_P=Object.prototype.propertyIsEnumerable,q4=(e,t,n)=>t in e?nX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,X4=(e,t)=>{for(var n in t||(t={}))jP.call(t,n)&&q4(e,n,t[n]);if(Vm)for(var n of Vm(t))_P.call(t,n)&&q4(e,n,t[n]);return e},Q4=(e,t)=>{var n={};for(var r in e)jP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Vm)for(var r of Vm(e))t.indexOf(r)<0&&_P.call(e,r)&&(n[r]=e[r]);return n};function rX(e){var t=e,{size:n,color:r}=t,o=Q4(t,["size","color"]);const s=o,{style:l}=s,c=Q4(s,["style"]);return B.createElement("svg",X4({viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg",stroke:r,style:X4({width:n,height:n},l)},c),B.createElement("g",{fill:"none",fillRule:"evenodd"},B.createElement("g",{transform:"translate(2.5 2.5)",strokeWidth:"5"},B.createElement("circle",{strokeOpacity:".5",cx:"16",cy:"16",r:"16"}),B.createElement("path",{d:"M32 16c0-9.94-8.06-16-16-16"},B.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 16 16",to:"360 16 16",dur:"1s",repeatCount:"indefinite"})))))}var oX=Object.defineProperty,Um=Object.getOwnPropertySymbols,IP=Object.prototype.hasOwnProperty,PP=Object.prototype.propertyIsEnumerable,Y4=(e,t,n)=>t in e?oX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Z4=(e,t)=>{for(var n in t||(t={}))IP.call(t,n)&&Y4(e,n,t[n]);if(Um)for(var n of Um(t))PP.call(t,n)&&Y4(e,n,t[n]);return e},J4=(e,t)=>{var n={};for(var r in e)IP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Um)for(var r of Um(e))t.indexOf(r)<0&&PP.call(e,r)&&(n[r]=e[r]);return n};function sX(e){var t=e,{size:n,color:r}=t,o=J4(t,["size","color"]);const s=o,{style:l}=s,c=J4(s,["style"]);return B.createElement("svg",Z4({viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg",fill:r,style:Z4({width:n},l)},c),B.createElement("circle",{cx:"15",cy:"15",r:"15"},B.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("circle",{cx:"60",cy:"15",r:"9",fillOpacity:"0.3"},B.createElement("animate",{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"0.5",to:"0.5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"})),B.createElement("circle",{cx:"105",cy:"15",r:"15"},B.createElement("animate",{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}),B.createElement("animate",{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"})))}var aX=Object.defineProperty,Gm=Object.getOwnPropertySymbols,EP=Object.prototype.hasOwnProperty,MP=Object.prototype.propertyIsEnumerable,ek=(e,t,n)=>t in e?aX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,lX=(e,t)=>{for(var n in t||(t={}))EP.call(t,n)&&ek(e,n,t[n]);if(Gm)for(var n of Gm(t))MP.call(t,n)&&ek(e,n,t[n]);return e},iX=(e,t)=>{var n={};for(var r in e)EP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Gm)for(var r of Gm(e))t.indexOf(r)<0&&MP.call(e,r)&&(n[r]=e[r]);return n};const o1={bars:tX,oval:rX,dots:sX},cX={xs:Ae(18),sm:Ae(22),md:Ae(36),lg:Ae(44),xl:Ae(58)},uX={size:"md"};function OP(e){const t=Nn("Loader",uX,e),{size:n,color:r,variant:o}=t,s=iX(t,["size","color","variant"]),l=wa(),c=o in o1?o:l.loader;return B.createElement(Vr,lX({role:"presentation",component:o1[c]||o1.bars,size:pt({size:n,sizes:cX}),color:l.fn.variant({variant:"filled",primaryFallback:!1,color:r||l.primaryColor}).background},s))}OP.displayName="@mantine/core/Loader";var dX=Object.defineProperty,Km=Object.getOwnPropertySymbols,DP=Object.prototype.hasOwnProperty,RP=Object.prototype.propertyIsEnumerable,tk=(e,t,n)=>t in e?dX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,nk=(e,t)=>{for(var n in t||(t={}))DP.call(t,n)&&tk(e,n,t[n]);if(Km)for(var n of Km(t))RP.call(t,n)&&tk(e,n,t[n]);return e},fX=(e,t)=>{var n={};for(var r in e)DP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Km)for(var r of Km(e))t.indexOf(r)<0&&RP.call(e,r)&&(n[r]=e[r]);return n};const pX={color:"gray",size:"md",variant:"subtle"},AP=i.forwardRef((e,t)=>{const n=Nn("ActionIcon",pX,e),{className:r,color:o,children:s,radius:l,size:c,variant:d,gradient:f,disabled:m,loaderProps:h,loading:g,unstyled:b,__staticSelector:y}=n,x=fX(n,["className","color","children","radius","size","variant","gradient","disabled","loaderProps","loading","unstyled","__staticSelector"]),{classes:w,cx:S,theme:j}=Jq({radius:l,color:o,gradient:f},{name:["ActionIcon",y],unstyled:b,size:c,variant:d}),_=B.createElement(OP,nk({color:j.fn.variant({color:o,variant:d}).color,size:"100%","data-action-icon-loader":!0},h));return B.createElement(Vq,nk({className:S(w.root,r),ref:t,disabled:m,"data-disabled":m||void 0,"data-loading":g||void 0,unstyled:b},x),g?_:s)});AP.displayName="@mantine/core/ActionIcon";const mX=AP;var hX=Object.defineProperty,gX=Object.defineProperties,vX=Object.getOwnPropertyDescriptors,qm=Object.getOwnPropertySymbols,TP=Object.prototype.hasOwnProperty,NP=Object.prototype.propertyIsEnumerable,rk=(e,t,n)=>t in e?hX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,bX=(e,t)=>{for(var n in t||(t={}))TP.call(t,n)&&rk(e,n,t[n]);if(qm)for(var n of qm(t))NP.call(t,n)&&rk(e,n,t[n]);return e},xX=(e,t)=>gX(e,vX(t)),yX=(e,t)=>{var n={};for(var r in e)TP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qm)for(var r of qm(e))t.indexOf(r)<0&&NP.call(e,r)&&(n[r]=e[r]);return n};function $P(e){const t=Nn("Portal",{},e),{children:n,target:r,className:o,innerRef:s}=t,l=yX(t,["children","target","className","innerRef"]),c=wa(),[d,f]=i.useState(!1),m=i.useRef();return uP(()=>(f(!0),m.current=r?typeof r=="string"?document.querySelector(r):r:document.createElement("div"),r||document.body.appendChild(m.current),()=>{!r&&document.body.removeChild(m.current)}),[r]),d?Jr.createPortal(B.createElement("div",xX(bX({className:o,dir:c.dir},l),{ref:s}),n),m.current):null}$P.displayName="@mantine/core/Portal";var CX=Object.defineProperty,Xm=Object.getOwnPropertySymbols,LP=Object.prototype.hasOwnProperty,FP=Object.prototype.propertyIsEnumerable,ok=(e,t,n)=>t in e?CX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,wX=(e,t)=>{for(var n in t||(t={}))LP.call(t,n)&&ok(e,n,t[n]);if(Xm)for(var n of Xm(t))FP.call(t,n)&&ok(e,n,t[n]);return e},SX=(e,t)=>{var n={};for(var r in e)LP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Xm)for(var r of Xm(e))t.indexOf(r)<0&&FP.call(e,r)&&(n[r]=e[r]);return n};function zP(e){var t=e,{withinPortal:n=!0,children:r}=t,o=SX(t,["withinPortal","children"]);return n?B.createElement($P,wX({},o),r):B.createElement(B.Fragment,null,r)}zP.displayName="@mantine/core/OptionalPortal";var kX=Object.defineProperty,Qm=Object.getOwnPropertySymbols,BP=Object.prototype.hasOwnProperty,HP=Object.prototype.propertyIsEnumerable,sk=(e,t,n)=>t in e?kX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ak=(e,t)=>{for(var n in t||(t={}))BP.call(t,n)&&sk(e,n,t[n]);if(Qm)for(var n of Qm(t))HP.call(t,n)&&sk(e,n,t[n]);return e},jX=(e,t)=>{var n={};for(var r in e)BP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Qm)for(var r of Qm(e))t.indexOf(r)<0&&HP.call(e,r)&&(n[r]=e[r]);return n};function WP(e){const t=e,{width:n,height:r,style:o}=t,s=jX(t,["width","height","style"]);return B.createElement("svg",ak({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:ak({width:n,height:r},o)},s),B.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}WP.displayName="@mantine/core/CloseIcon";var _X=Object.defineProperty,Ym=Object.getOwnPropertySymbols,VP=Object.prototype.hasOwnProperty,UP=Object.prototype.propertyIsEnumerable,lk=(e,t,n)=>t in e?_X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,IX=(e,t)=>{for(var n in t||(t={}))VP.call(t,n)&&lk(e,n,t[n]);if(Ym)for(var n of Ym(t))UP.call(t,n)&&lk(e,n,t[n]);return e},PX=(e,t)=>{var n={};for(var r in e)VP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ym)for(var r of Ym(e))t.indexOf(r)<0&&UP.call(e,r)&&(n[r]=e[r]);return n};const EX={xs:Ae(12),sm:Ae(16),md:Ae(20),lg:Ae(28),xl:Ae(34)},MX={size:"sm"},GP=i.forwardRef((e,t)=>{const n=Nn("CloseButton",MX,e),{iconSize:r,size:o,children:s}=n,l=PX(n,["iconSize","size","children"]),c=Ae(r||EX[o]);return B.createElement(mX,IX({ref:t,__staticSelector:"CloseButton",size:o},l),s||B.createElement(WP,{width:c,height:c}))});GP.displayName="@mantine/core/CloseButton";const KP=GP;var OX=Object.defineProperty,DX=Object.defineProperties,RX=Object.getOwnPropertyDescriptors,ik=Object.getOwnPropertySymbols,AX=Object.prototype.hasOwnProperty,TX=Object.prototype.propertyIsEnumerable,ck=(e,t,n)=>t in e?OX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ap=(e,t)=>{for(var n in t||(t={}))AX.call(t,n)&&ck(e,n,t[n]);if(ik)for(var n of ik(t))TX.call(t,n)&&ck(e,n,t[n]);return e},NX=(e,t)=>DX(e,RX(t));function $X({underline:e,strikethrough:t}){const n=[];return e&&n.push("underline"),t&&n.push("line-through"),n.length>0?n.join(" "):"none"}function LX({theme:e,color:t}){return t==="dimmed"?e.fn.dimmed():typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?e.fn.variant({variant:"filled",color:t}).background:t||"inherit"}function FX(e){return typeof e=="number"?{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical"}:null}function zX({theme:e,truncate:t}){return t==="start"?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",direction:e.dir==="ltr"?"rtl":"ltr",textAlign:e.dir==="ltr"?"right":"left"}:t?{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}:null}var BX=gr((e,{color:t,lineClamp:n,truncate:r,inline:o,inherit:s,underline:l,gradient:c,weight:d,transform:f,align:m,strikethrough:h,italic:g},{size:b})=>{const y=e.fn.variant({variant:"gradient",gradient:c});return{root:NX(Ap(Ap(Ap(Ap({},e.fn.fontStyles()),e.fn.focusStyles()),FX(n)),zX({theme:e,truncate:r})),{color:LX({color:t,theme:e}),fontFamily:s?"inherit":e.fontFamily,fontSize:s||b===void 0?"inherit":pt({size:b,sizes:e.fontSizes}),lineHeight:s?"inherit":o?1:e.lineHeight,textDecoration:$X({underline:l,strikethrough:h}),WebkitTapHighlightColor:"transparent",fontWeight:s?"inherit":d,textTransform:f,textAlign:m,fontStyle:g?"italic":void 0}),gradient:{backgroundImage:y.background,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}}});const HX=BX;var WX=Object.defineProperty,Zm=Object.getOwnPropertySymbols,qP=Object.prototype.hasOwnProperty,XP=Object.prototype.propertyIsEnumerable,uk=(e,t,n)=>t in e?WX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,VX=(e,t)=>{for(var n in t||(t={}))qP.call(t,n)&&uk(e,n,t[n]);if(Zm)for(var n of Zm(t))XP.call(t,n)&&uk(e,n,t[n]);return e},UX=(e,t)=>{var n={};for(var r in e)qP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Zm)for(var r of Zm(e))t.indexOf(r)<0&&XP.call(e,r)&&(n[r]=e[r]);return n};const GX={variant:"text"},QP=i.forwardRef((e,t)=>{const n=Nn("Text",GX,e),{className:r,size:o,weight:s,transform:l,color:c,align:d,variant:f,lineClamp:m,truncate:h,gradient:g,inline:b,inherit:y,underline:x,strikethrough:w,italic:S,classNames:j,styles:_,unstyled:I,span:E,__staticSelector:M}=n,D=UX(n,["className","size","weight","transform","color","align","variant","lineClamp","truncate","gradient","inline","inherit","underline","strikethrough","italic","classNames","styles","unstyled","span","__staticSelector"]),{classes:R,cx:N}=HX({color:c,lineClamp:m,truncate:h,inline:b,inherit:y,underline:x,strikethrough:w,italic:S,weight:s,transform:l,align:d,gradient:g},{unstyled:I,name:M||"Text",variant:f,size:o});return B.createElement(Vr,VX({ref:t,className:N(R.root,{[R.gradient]:f==="gradient"},r),component:E?"span":"div"},D))});QP.displayName="@mantine/core/Text";const Oc=QP,Tp={xs:Ae(1),sm:Ae(2),md:Ae(3),lg:Ae(4),xl:Ae(5)};function Np(e,t){const n=e.fn.variant({variant:"outline",color:t}).border;return typeof t=="string"&&(t in e.colors||t.split(".")[0]in e.colors)?n:t===void 0?e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]:t}var KX=gr((e,{color:t},{size:n,variant:r})=>({root:{},withLabel:{borderTop:"0 !important"},left:{"&::before":{display:"none"}},right:{"&::after":{display:"none"}},label:{display:"flex",alignItems:"center","&::before":{content:'""',flex:1,height:Ae(1),borderTop:`${pt({size:n,sizes:Tp})} ${r} ${Np(e,t)}`,marginRight:e.spacing.xs},"&::after":{content:'""',flex:1,borderTop:`${pt({size:n,sizes:Tp})} ${r} ${Np(e,t)}`,marginLeft:e.spacing.xs}},labelDefaultStyles:{color:t==="dark"?e.colors.dark[1]:e.fn.themeColor(t,e.colorScheme==="dark"?5:e.fn.primaryShade(),!1)},horizontal:{border:0,borderTopWidth:Ae(pt({size:n,sizes:Tp})),borderTopColor:Np(e,t),borderTopStyle:r,margin:0},vertical:{border:0,alignSelf:"stretch",height:"auto",borderLeftWidth:Ae(pt({size:n,sizes:Tp})),borderLeftColor:Np(e,t),borderLeftStyle:r}}));const qX=KX;var XX=Object.defineProperty,QX=Object.defineProperties,YX=Object.getOwnPropertyDescriptors,Jm=Object.getOwnPropertySymbols,YP=Object.prototype.hasOwnProperty,ZP=Object.prototype.propertyIsEnumerable,dk=(e,t,n)=>t in e?XX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fk=(e,t)=>{for(var n in t||(t={}))YP.call(t,n)&&dk(e,n,t[n]);if(Jm)for(var n of Jm(t))ZP.call(t,n)&&dk(e,n,t[n]);return e},ZX=(e,t)=>QX(e,YX(t)),JX=(e,t)=>{var n={};for(var r in e)YP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Jm)for(var r of Jm(e))t.indexOf(r)<0&&ZP.call(e,r)&&(n[r]=e[r]);return n};const eQ={orientation:"horizontal",size:"xs",labelPosition:"left",variant:"solid"},Eb=i.forwardRef((e,t)=>{const n=Nn("Divider",eQ,e),{className:r,color:o,orientation:s,size:l,label:c,labelPosition:d,labelProps:f,variant:m,styles:h,classNames:g,unstyled:b}=n,y=JX(n,["className","color","orientation","size","label","labelPosition","labelProps","variant","styles","classNames","unstyled"]),{classes:x,cx:w}=qX({color:o},{classNames:g,styles:h,unstyled:b,name:"Divider",variant:m,size:l}),S=s==="vertical",j=s==="horizontal",_=!!c&&j,I=!(f!=null&&f.color);return B.createElement(Vr,fk({ref:t,className:w(x.root,{[x.vertical]:S,[x.horizontal]:j,[x.withLabel]:_},r),role:"separator"},y),_&&B.createElement(Oc,ZX(fk({},f),{size:(f==null?void 0:f.size)||"xs",mt:Ae(2),className:w(x.label,x[d],{[x.labelDefaultStyles]:I})}),c))});Eb.displayName="@mantine/core/Divider";var tQ=Object.defineProperty,nQ=Object.defineProperties,rQ=Object.getOwnPropertyDescriptors,pk=Object.getOwnPropertySymbols,oQ=Object.prototype.hasOwnProperty,sQ=Object.prototype.propertyIsEnumerable,mk=(e,t,n)=>t in e?tQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hk=(e,t)=>{for(var n in t||(t={}))oQ.call(t,n)&&mk(e,n,t[n]);if(pk)for(var n of pk(t))sQ.call(t,n)&&mk(e,n,t[n]);return e},aQ=(e,t)=>nQ(e,rQ(t)),lQ=gr((e,t,{size:n})=>({item:aQ(hk({},e.fn.fontStyles()),{boxSizing:"border-box",wordBreak:"break-all",textAlign:"left",width:"100%",padding:`calc(${pt({size:n,sizes:e.spacing})} / 1.5) ${pt({size:n,sizes:e.spacing})}`,cursor:"pointer",fontSize:pt({size:n,sizes:e.fontSizes}),color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,borderRadius:e.fn.radius(),"&[data-hovered]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[1]},"&[data-selected]":hk({backgroundColor:e.fn.variant({variant:"filled"}).background,color:e.fn.variant({variant:"filled"}).color},e.fn.hover({backgroundColor:e.fn.variant({variant:"filled"}).hover})),"&[data-disabled]":{cursor:"default",color:e.colors.dark[2]}}),nothingFound:{boxSizing:"border-box",color:e.colors.gray[6],paddingTop:`calc(${pt({size:n,sizes:e.spacing})} / 2)`,paddingBottom:`calc(${pt({size:n,sizes:e.spacing})} / 2)`,textAlign:"center"},separator:{boxSizing:"border-box",textAlign:"left",width:"100%",padding:`calc(${pt({size:n,sizes:e.spacing})} / 1.5) ${pt({size:n,sizes:e.spacing})}`},separatorLabel:{color:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]}}));const iQ=lQ;var cQ=Object.defineProperty,gk=Object.getOwnPropertySymbols,uQ=Object.prototype.hasOwnProperty,dQ=Object.prototype.propertyIsEnumerable,vk=(e,t,n)=>t in e?cQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,fQ=(e,t)=>{for(var n in t||(t={}))uQ.call(t,n)&&vk(e,n,t[n]);if(gk)for(var n of gk(t))dQ.call(t,n)&&vk(e,n,t[n]);return e};function Ay({data:e,hovered:t,classNames:n,styles:r,isItemSelected:o,uuid:s,__staticSelector:l,onItemHover:c,onItemSelect:d,itemsRefs:f,itemComponent:m,size:h,nothingFound:g,creatable:b,createLabel:y,unstyled:x,variant:w}){const{classes:S}=iQ(null,{classNames:n,styles:r,unstyled:x,name:l,variant:w,size:h}),j=[],_=[];let I=null;const E=(D,R)=>{const N=typeof o=="function"?o(D.value):!1;return B.createElement(m,fQ({key:D.value,className:S.item,"data-disabled":D.disabled||void 0,"data-hovered":!D.disabled&&t===R||void 0,"data-selected":!D.disabled&&N||void 0,selected:N,onMouseEnter:()=>c(R),id:`${s}-${R}`,role:"option",tabIndex:-1,"aria-selected":t===R,ref:O=>{f&&f.current&&(f.current[D.value]=O)},onMouseDown:D.disabled?null:O=>{O.preventDefault(),d(D)},disabled:D.disabled,variant:w},D))};let M=null;if(e.forEach((D,R)=>{D.creatable?I=R:D.group?(M!==D.group&&(M=D.group,_.push(B.createElement("div",{className:S.separator,key:`__mantine-divider-${R}`},B.createElement(Eb,{classNames:{label:S.separatorLabel},label:D.group})))),_.push(E(D,R))):j.push(E(D,R))}),b){const D=e[I];j.push(B.createElement("div",{key:Dy(),className:S.item,"data-hovered":t===I||void 0,onMouseEnter:()=>c(I),onMouseDown:R=>{R.preventDefault(),d(D)},tabIndex:-1,ref:R=>{f&&f.current&&(f.current[D.value]=R)}},y))}return _.length>0&&j.length>0&&j.unshift(B.createElement("div",{className:S.separator,key:"empty-group-separator"},B.createElement(Eb,null))),_.length>0||j.length>0?B.createElement(B.Fragment,null,_,j):B.createElement(Oc,{size:h,unstyled:x,className:S.nothingFound},g)}Ay.displayName="@mantine/core/SelectItems";var pQ=Object.defineProperty,eh=Object.getOwnPropertySymbols,JP=Object.prototype.hasOwnProperty,eE=Object.prototype.propertyIsEnumerable,bk=(e,t,n)=>t in e?pQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mQ=(e,t)=>{for(var n in t||(t={}))JP.call(t,n)&&bk(e,n,t[n]);if(eh)for(var n of eh(t))eE.call(t,n)&&bk(e,n,t[n]);return e},hQ=(e,t)=>{var n={};for(var r in e)JP.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&eh)for(var r of eh(e))t.indexOf(r)<0&&eE.call(e,r)&&(n[r]=e[r]);return n};const Ty=i.forwardRef((e,t)=>{var n=e,{label:r,value:o}=n,s=hQ(n,["label","value"]);return B.createElement("div",mQ({ref:t},s),r||o)});Ty.displayName="@mantine/core/DefaultItem";function gQ(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function tE(...e){return t=>e.forEach(n=>gQ(n,t))}function di(...e){return i.useCallback(tE(...e),e)}const nE=i.forwardRef((e,t)=>{const{children:n,...r}=e,o=i.Children.toArray(n),s=o.find(bQ);if(s){const l=s.props.children,c=o.map(d=>d===s?i.Children.count(l)>1?i.Children.only(null):i.isValidElement(l)?l.props.children:null:d);return i.createElement(Mb,bn({},r,{ref:t}),i.isValidElement(l)?i.cloneElement(l,void 0,c):null)}return i.createElement(Mb,bn({},r,{ref:t}),n)});nE.displayName="Slot";const Mb=i.forwardRef((e,t)=>{const{children:n,...r}=e;return i.isValidElement(n)?i.cloneElement(n,{...xQ(r,n.props),ref:tE(t,n.ref)}):i.Children.count(n)>1?i.Children.only(null):null});Mb.displayName="SlotClone";const vQ=({children:e})=>i.createElement(i.Fragment,null,e);function bQ(e){return i.isValidElement(e)&&e.type===vQ}function xQ(e,t){const n={...t};for(const r in t){const o=e[r],s=t[r];/^on[A-Z]/.test(r)?o&&s?n[r]=(...c)=>{s(...c),o(...c)}:o&&(n[r]=o):r==="style"?n[r]={...o,...s}:r==="className"&&(n[r]=[o,s].filter(Boolean).join(" "))}return{...e,...n}}const yQ=["a","button","div","h2","h3","img","label","li","nav","ol","p","span","svg","ul"],ff=yQ.reduce((e,t)=>{const n=i.forwardRef((r,o)=>{const{asChild:s,...l}=r,c=s?nE:t;return i.useEffect(()=>{window[Symbol.for("radix-ui")]=!0},[]),i.createElement(c,bn({},l,{ref:o}))});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{}),Ob=globalThis!=null&&globalThis.document?i.useLayoutEffect:()=>{};function CQ(e,t){return i.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const pf=e=>{const{present:t,children:n}=e,r=wQ(t),o=typeof n=="function"?n({present:r.isPresent}):i.Children.only(n),s=di(r.ref,o.ref);return typeof n=="function"||r.isPresent?i.cloneElement(o,{ref:s}):null};pf.displayName="Presence";function wQ(e){const[t,n]=i.useState(),r=i.useRef({}),o=i.useRef(e),s=i.useRef("none"),l=e?"mounted":"unmounted",[c,d]=CQ(l,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return i.useEffect(()=>{const f=$p(r.current);s.current=c==="mounted"?f:"none"},[c]),Ob(()=>{const f=r.current,m=o.current;if(m!==e){const g=s.current,b=$p(f);e?d("MOUNT"):b==="none"||(f==null?void 0:f.display)==="none"?d("UNMOUNT"):d(m&&g!==b?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),Ob(()=>{if(t){const f=h=>{const b=$p(r.current).includes(h.animationName);h.target===t&&b&&Jr.flushSync(()=>d("ANIMATION_END"))},m=h=>{h.target===t&&(s.current=$p(r.current))};return t.addEventListener("animationstart",m),t.addEventListener("animationcancel",f),t.addEventListener("animationend",f),()=>{t.removeEventListener("animationstart",m),t.removeEventListener("animationcancel",f),t.removeEventListener("animationend",f)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:i.useCallback(f=>{f&&(r.current=getComputedStyle(f)),n(f)},[])}}function $p(e){return(e==null?void 0:e.animationName)||"none"}function SQ(e,t=[]){let n=[];function r(s,l){const c=i.createContext(l),d=n.length;n=[...n,l];function f(h){const{scope:g,children:b,...y}=h,x=(g==null?void 0:g[e][d])||c,w=i.useMemo(()=>y,Object.values(y));return i.createElement(x.Provider,{value:w},b)}function m(h,g){const b=(g==null?void 0:g[e][d])||c,y=i.useContext(b);if(y)return y;if(l!==void 0)return l;throw new Error(`\`${h}\` must be used within \`${s}\``)}return f.displayName=s+"Provider",[f,m]}const o=()=>{const s=n.map(l=>i.createContext(l));return function(c){const d=(c==null?void 0:c[e])||s;return i.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[r,kQ(o,...t)]}function kQ(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const l=r.reduce((c,{useScope:d,scopeName:f})=>{const h=d(s)[`__scope${f}`];return{...c,...h}},{});return i.useMemo(()=>({[`__scope${t.scopeName}`]:l}),[l])}};return n.scopeName=t.scopeName,n}function zl(e){const t=i.useRef(e);return i.useEffect(()=>{t.current=e}),i.useMemo(()=>(...n)=>{var r;return(r=t.current)===null||r===void 0?void 0:r.call(t,...n)},[])}const jQ=i.createContext(void 0);function _Q(e){const t=i.useContext(jQ);return e||t||"ltr"}function IQ(e,[t,n]){return Math.min(n,Math.max(t,e))}function Kl(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function PQ(e,t){return i.useReducer((n,r)=>{const o=t[n][r];return o??n},e)}const rE="ScrollArea",[oE,jye]=SQ(rE),[EQ,To]=oE(rE),MQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,type:r="hover",dir:o,scrollHideDelay:s=600,...l}=e,[c,d]=i.useState(null),[f,m]=i.useState(null),[h,g]=i.useState(null),[b,y]=i.useState(null),[x,w]=i.useState(null),[S,j]=i.useState(0),[_,I]=i.useState(0),[E,M]=i.useState(!1),[D,R]=i.useState(!1),N=di(t,T=>d(T)),O=_Q(o);return i.createElement(EQ,{scope:n,type:r,dir:O,scrollHideDelay:s,scrollArea:c,viewport:f,onViewportChange:m,content:h,onContentChange:g,scrollbarX:b,onScrollbarXChange:y,scrollbarXEnabled:E,onScrollbarXEnabledChange:M,scrollbarY:x,onScrollbarYChange:w,scrollbarYEnabled:D,onScrollbarYEnabledChange:R,onCornerWidthChange:j,onCornerHeightChange:I},i.createElement(ff.div,bn({dir:O},l,{ref:N,style:{position:"relative","--radix-scroll-area-corner-width":S+"px","--radix-scroll-area-corner-height":_+"px",...e.style}})))}),OQ="ScrollAreaViewport",DQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,children:r,...o}=e,s=To(OQ,n),l=i.useRef(null),c=di(t,l,s.onViewportChange);return i.createElement(i.Fragment,null,i.createElement("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"}}),i.createElement(ff.div,bn({"data-radix-scroll-area-viewport":""},o,{ref:c,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...e.style}}),i.createElement("div",{ref:s.onContentChange,style:{minWidth:"100%",display:"table"}},r)))}),ka="ScrollAreaScrollbar",RQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),{onScrollbarXEnabledChange:s,onScrollbarYEnabledChange:l}=o,c=e.orientation==="horizontal";return i.useEffect(()=>(c?s(!0):l(!0),()=>{c?s(!1):l(!1)}),[c,s,l]),o.type==="hover"?i.createElement(AQ,bn({},r,{ref:t,forceMount:n})):o.type==="scroll"?i.createElement(TQ,bn({},r,{ref:t,forceMount:n})):o.type==="auto"?i.createElement(sE,bn({},r,{ref:t,forceMount:n})):o.type==="always"?i.createElement(Ny,bn({},r,{ref:t})):null}),AQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),[s,l]=i.useState(!1);return i.useEffect(()=>{const c=o.scrollArea;let d=0;if(c){const f=()=>{window.clearTimeout(d),l(!0)},m=()=>{d=window.setTimeout(()=>l(!1),o.scrollHideDelay)};return c.addEventListener("pointerenter",f),c.addEventListener("pointerleave",m),()=>{window.clearTimeout(d),c.removeEventListener("pointerenter",f),c.removeEventListener("pointerleave",m)}}},[o.scrollArea,o.scrollHideDelay]),i.createElement(pf,{present:n||s},i.createElement(sE,bn({"data-state":s?"visible":"hidden"},r,{ref:t})))}),TQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=To(ka,e.__scopeScrollArea),s=e.orientation==="horizontal",l=Og(()=>d("SCROLL_END"),100),[c,d]=PQ("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return i.useEffect(()=>{if(c==="idle"){const f=window.setTimeout(()=>d("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(f)}},[c,o.scrollHideDelay,d]),i.useEffect(()=>{const f=o.viewport,m=s?"scrollLeft":"scrollTop";if(f){let h=f[m];const g=()=>{const b=f[m];h!==b&&(d("SCROLL"),l()),h=b};return f.addEventListener("scroll",g),()=>f.removeEventListener("scroll",g)}},[o.viewport,s,d,l]),i.createElement(pf,{present:n||c!=="hidden"},i.createElement(Ny,bn({"data-state":c==="hidden"?"hidden":"visible"},r,{ref:t,onPointerEnter:Kl(e.onPointerEnter,()=>d("POINTER_ENTER")),onPointerLeave:Kl(e.onPointerLeave,()=>d("POINTER_LEAVE"))})))}),sE=i.forwardRef((e,t)=>{const n=To(ka,e.__scopeScrollArea),{forceMount:r,...o}=e,[s,l]=i.useState(!1),c=e.orientation==="horizontal",d=Og(()=>{if(n.viewport){const f=n.viewport.offsetWidth{const{orientation:n="vertical",...r}=e,o=To(ka,e.__scopeScrollArea),s=i.useRef(null),l=i.useRef(0),[c,d]=i.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),f=cE(c.viewport,c.content),m={...r,sizes:c,onSizesChange:d,hasThumb:f>0&&f<1,onThumbChange:g=>s.current=g,onThumbPointerUp:()=>l.current=0,onThumbPointerDown:g=>l.current=g};function h(g,b){return WQ(g,l.current,c,b)}return n==="horizontal"?i.createElement(NQ,bn({},m,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const g=o.viewport.scrollLeft,b=xk(g,c,o.dir);s.current.style.transform=`translate3d(${b}px, 0, 0)`}},onWheelScroll:g=>{o.viewport&&(o.viewport.scrollLeft=g)},onDragScroll:g=>{o.viewport&&(o.viewport.scrollLeft=h(g,o.dir))}})):n==="vertical"?i.createElement($Q,bn({},m,{ref:t,onThumbPositionChange:()=>{if(o.viewport&&s.current){const g=o.viewport.scrollTop,b=xk(g,c);s.current.style.transform=`translate3d(0, ${b}px, 0)`}},onWheelScroll:g=>{o.viewport&&(o.viewport.scrollTop=g)},onDragScroll:g=>{o.viewport&&(o.viewport.scrollTop=h(g))}})):null}),NQ=i.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=To(ka,e.__scopeScrollArea),[l,c]=i.useState(),d=i.useRef(null),f=di(t,d,s.onScrollbarXChange);return i.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),i.createElement(lE,bn({"data-orientation":"horizontal"},o,{ref:f,sizes:n,style:{bottom:0,left:s.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:s.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":Mg(n)+"px",...e.style},onThumbPointerDown:m=>e.onThumbPointerDown(m.x),onDragScroll:m=>e.onDragScroll(m.x),onWheelScroll:(m,h)=>{if(s.viewport){const g=s.viewport.scrollLeft+m.deltaX;e.onWheelScroll(g),dE(g,h)&&m.preventDefault()}},onResize:()=>{d.current&&s.viewport&&l&&r({content:s.viewport.scrollWidth,viewport:s.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:th(l.paddingLeft),paddingEnd:th(l.paddingRight)}})}}))}),$Q=i.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,s=To(ka,e.__scopeScrollArea),[l,c]=i.useState(),d=i.useRef(null),f=di(t,d,s.onScrollbarYChange);return i.useEffect(()=>{d.current&&c(getComputedStyle(d.current))},[d]),i.createElement(lE,bn({"data-orientation":"vertical"},o,{ref:f,sizes:n,style:{top:0,right:s.dir==="ltr"?0:void 0,left:s.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":Mg(n)+"px",...e.style},onThumbPointerDown:m=>e.onThumbPointerDown(m.y),onDragScroll:m=>e.onDragScroll(m.y),onWheelScroll:(m,h)=>{if(s.viewport){const g=s.viewport.scrollTop+m.deltaY;e.onWheelScroll(g),dE(g,h)&&m.preventDefault()}},onResize:()=>{d.current&&s.viewport&&l&&r({content:s.viewport.scrollHeight,viewport:s.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:th(l.paddingTop),paddingEnd:th(l.paddingBottom)}})}}))}),[LQ,aE]=oE(ka),lE=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:o,onThumbChange:s,onThumbPointerUp:l,onThumbPointerDown:c,onThumbPositionChange:d,onDragScroll:f,onWheelScroll:m,onResize:h,...g}=e,b=To(ka,n),[y,x]=i.useState(null),w=di(t,N=>x(N)),S=i.useRef(null),j=i.useRef(""),_=b.viewport,I=r.content-r.viewport,E=zl(m),M=zl(d),D=Og(h,10);function R(N){if(S.current){const O=N.clientX-S.current.left,T=N.clientY-S.current.top;f({x:O,y:T})}}return i.useEffect(()=>{const N=O=>{const T=O.target;(y==null?void 0:y.contains(T))&&E(O,I)};return document.addEventListener("wheel",N,{passive:!1}),()=>document.removeEventListener("wheel",N,{passive:!1})},[_,y,I,E]),i.useEffect(M,[r,M]),Dc(y,D),Dc(b.content,D),i.createElement(LQ,{scope:n,scrollbar:y,hasThumb:o,onThumbChange:zl(s),onThumbPointerUp:zl(l),onThumbPositionChange:M,onThumbPointerDown:zl(c)},i.createElement(ff.div,bn({},g,{ref:w,style:{position:"absolute",...g.style},onPointerDown:Kl(e.onPointerDown,N=>{N.button===0&&(N.target.setPointerCapture(N.pointerId),S.current=y.getBoundingClientRect(),j.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",R(N))}),onPointerMove:Kl(e.onPointerMove,R),onPointerUp:Kl(e.onPointerUp,N=>{const O=N.target;O.hasPointerCapture(N.pointerId)&&O.releasePointerCapture(N.pointerId),document.body.style.webkitUserSelect=j.current,S.current=null})})))}),Db="ScrollAreaThumb",FQ=i.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=aE(Db,e.__scopeScrollArea);return i.createElement(pf,{present:n||o.hasThumb},i.createElement(zQ,bn({ref:t},r)))}),zQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,style:r,...o}=e,s=To(Db,n),l=aE(Db,n),{onThumbPositionChange:c}=l,d=di(t,h=>l.onThumbChange(h)),f=i.useRef(),m=Og(()=>{f.current&&(f.current(),f.current=void 0)},100);return i.useEffect(()=>{const h=s.viewport;if(h){const g=()=>{if(m(),!f.current){const b=VQ(h,c);f.current=b,c()}};return c(),h.addEventListener("scroll",g),()=>h.removeEventListener("scroll",g)}},[s.viewport,m,c]),i.createElement(ff.div,bn({"data-state":l.hasThumb?"visible":"hidden"},o,{ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:Kl(e.onPointerDownCapture,h=>{const b=h.target.getBoundingClientRect(),y=h.clientX-b.left,x=h.clientY-b.top;l.onThumbPointerDown({x:y,y:x})}),onPointerUp:Kl(e.onPointerUp,l.onThumbPointerUp)}))}),iE="ScrollAreaCorner",BQ=i.forwardRef((e,t)=>{const n=To(iE,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?i.createElement(HQ,bn({},e,{ref:t})):null}),HQ=i.forwardRef((e,t)=>{const{__scopeScrollArea:n,...r}=e,o=To(iE,n),[s,l]=i.useState(0),[c,d]=i.useState(0),f=!!(s&&c);return Dc(o.scrollbarX,()=>{var m;const h=((m=o.scrollbarX)===null||m===void 0?void 0:m.offsetHeight)||0;o.onCornerHeightChange(h),d(h)}),Dc(o.scrollbarY,()=>{var m;const h=((m=o.scrollbarY)===null||m===void 0?void 0:m.offsetWidth)||0;o.onCornerWidthChange(h),l(h)}),f?i.createElement(ff.div,bn({},r,{ref:t,style:{width:s,height:c,position:"absolute",right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:0,...e.style}})):null});function th(e){return e?parseInt(e,10):0}function cE(e,t){const n=e/t;return isNaN(n)?0:n}function Mg(e){const t=cE(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function WQ(e,t,n,r="ltr"){const o=Mg(n),s=o/2,l=t||s,c=o-l,d=n.scrollbar.paddingStart+l,f=n.scrollbar.size-n.scrollbar.paddingEnd-c,m=n.content-n.viewport,h=r==="ltr"?[0,m]:[m*-1,0];return uE([d,f],h)(e)}function xk(e,t,n="ltr"){const r=Mg(t),o=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,s=t.scrollbar.size-o,l=t.content-t.viewport,c=s-r,d=n==="ltr"?[0,l]:[l*-1,0],f=IQ(e,d);return uE([0,l],[0,c])(f)}function uE(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function dE(e,t){return e>0&&e{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return function o(){const s={left:e.scrollLeft,top:e.scrollTop},l=n.left!==s.left,c=n.top!==s.top;(l||c)&&t(),n=s,r=window.requestAnimationFrame(o)}(),()=>window.cancelAnimationFrame(r)};function Og(e,t){const n=zl(e),r=i.useRef(0);return i.useEffect(()=>()=>window.clearTimeout(r.current),[]),i.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function Dc(e,t){const n=zl(t);Ob(()=>{let r=0;if(e){const o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return o.observe(e),()=>{window.cancelAnimationFrame(r),o.unobserve(e)}}},[e,n])}const UQ=MQ,GQ=DQ,yk=RQ,Ck=FQ,KQ=BQ;var qQ=gr((e,{scrollbarSize:t,offsetScrollbars:n,scrollbarHovered:r,hidden:o})=>({root:{overflow:"hidden"},viewport:{width:"100%",height:"100%",paddingRight:n?Ae(t):void 0,paddingBottom:n?Ae(t):void 0},scrollbar:{display:o?"none":"flex",userSelect:"none",touchAction:"none",boxSizing:"border-box",padding:`calc(${Ae(t)} / 5)`,transition:"background-color 150ms ease, opacity 150ms ease","&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[8]:e.colors.gray[0],[`& .${_4("thumb")}`]:{backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.5):e.fn.rgba(e.black,.5)}},'&[data-orientation="vertical"]':{width:Ae(t)},'&[data-orientation="horizontal"]':{flexDirection:"column",height:Ae(t)},'&[data-state="hidden"]':{display:"none",opacity:0}},thumb:{ref:_4("thumb"),flex:1,backgroundColor:e.colorScheme==="dark"?e.fn.rgba(e.white,.4):e.fn.rgba(e.black,.4),borderRadius:Ae(t),position:"relative",transition:"background-color 150ms ease",display:o?"none":void 0,overflow:"hidden","&::before":{content:'""',position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:"100%",height:"100%",minWidth:Ae(44),minHeight:Ae(44)}},corner:{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],transition:"opacity 150ms ease",opacity:r?1:0,display:o?"none":void 0}}));const XQ=qQ;var QQ=Object.defineProperty,YQ=Object.defineProperties,ZQ=Object.getOwnPropertyDescriptors,nh=Object.getOwnPropertySymbols,fE=Object.prototype.hasOwnProperty,pE=Object.prototype.propertyIsEnumerable,wk=(e,t,n)=>t in e?QQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Rb=(e,t)=>{for(var n in t||(t={}))fE.call(t,n)&&wk(e,n,t[n]);if(nh)for(var n of nh(t))pE.call(t,n)&&wk(e,n,t[n]);return e},mE=(e,t)=>YQ(e,ZQ(t)),hE=(e,t)=>{var n={};for(var r in e)fE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&nh)for(var r of nh(e))t.indexOf(r)<0&&pE.call(e,r)&&(n[r]=e[r]);return n};const gE={scrollbarSize:12,scrollHideDelay:1e3,type:"hover",offsetScrollbars:!1},Dg=i.forwardRef((e,t)=>{const n=Nn("ScrollArea",gE,e),{children:r,className:o,classNames:s,styles:l,scrollbarSize:c,scrollHideDelay:d,type:f,dir:m,offsetScrollbars:h,viewportRef:g,onScrollPositionChange:b,unstyled:y,variant:x,viewportProps:w}=n,S=hE(n,["children","className","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","variant","viewportProps"]),[j,_]=i.useState(!1),I=wa(),{classes:E,cx:M}=XQ({scrollbarSize:c,offsetScrollbars:h,scrollbarHovered:j,hidden:f==="never"},{name:"ScrollArea",classNames:s,styles:l,unstyled:y,variant:x});return B.createElement(UQ,{type:f==="never"?"always":f,scrollHideDelay:d,dir:m||I.dir,ref:t,asChild:!0},B.createElement(Vr,Rb({className:M(E.root,o)},S),B.createElement(GQ,mE(Rb({},w),{className:E.viewport,ref:g,onScroll:typeof b=="function"?({currentTarget:D})=>b({x:D.scrollLeft,y:D.scrollTop}):void 0}),r),B.createElement(yk,{orientation:"horizontal",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1)},B.createElement(Ck,{className:E.thumb})),B.createElement(yk,{orientation:"vertical",className:E.scrollbar,forceMount:!0,onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1)},B.createElement(Ck,{className:E.thumb})),B.createElement(KQ,{className:E.corner})))}),vE=i.forwardRef((e,t)=>{const n=Nn("ScrollAreaAutosize",gE,e),{children:r,classNames:o,styles:s,scrollbarSize:l,scrollHideDelay:c,type:d,dir:f,offsetScrollbars:m,viewportRef:h,onScrollPositionChange:g,unstyled:b,sx:y,variant:x,viewportProps:w}=n,S=hE(n,["children","classNames","styles","scrollbarSize","scrollHideDelay","type","dir","offsetScrollbars","viewportRef","onScrollPositionChange","unstyled","sx","variant","viewportProps"]);return B.createElement(Vr,mE(Rb({},S),{ref:t,sx:[{display:"flex"},...oP(y)]}),B.createElement(Vr,{sx:{display:"flex",flexDirection:"column",flex:1}},B.createElement(Dg,{classNames:o,styles:s,scrollHideDelay:c,scrollbarSize:l,type:d,dir:f,offsetScrollbars:m,viewportRef:h,onScrollPositionChange:g,unstyled:b,variant:x,viewportProps:w},r)))});vE.displayName="@mantine/core/ScrollAreaAutosize";Dg.displayName="@mantine/core/ScrollArea";Dg.Autosize=vE;const bE=Dg;var JQ=Object.defineProperty,eY=Object.defineProperties,tY=Object.getOwnPropertyDescriptors,rh=Object.getOwnPropertySymbols,xE=Object.prototype.hasOwnProperty,yE=Object.prototype.propertyIsEnumerable,Sk=(e,t,n)=>t in e?JQ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,kk=(e,t)=>{for(var n in t||(t={}))xE.call(t,n)&&Sk(e,n,t[n]);if(rh)for(var n of rh(t))yE.call(t,n)&&Sk(e,n,t[n]);return e},nY=(e,t)=>eY(e,tY(t)),rY=(e,t)=>{var n={};for(var r in e)xE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&rh)for(var r of rh(e))t.indexOf(r)<0&&yE.call(e,r)&&(n[r]=e[r]);return n};const Rg=i.forwardRef((e,t)=>{var n=e,{style:r}=n,o=rY(n,["style"]);return B.createElement(bE,nY(kk({},o),{style:kk({width:"100%"},r),viewportProps:{tabIndex:-1},viewportRef:t}),o.children)});Rg.displayName="@mantine/core/SelectScrollArea";var oY=gr(()=>({dropdown:{},itemsWrapper:{padding:Ae(4),display:"flex",width:"100%",boxSizing:"border-box"}}));const sY=oY,is=Math.min,fr=Math.max,oh=Math.round,Lp=Math.floor,ll=e=>({x:e,y:e}),aY={left:"right",right:"left",bottom:"top",top:"bottom"},lY={start:"end",end:"start"};function Ab(e,t,n){return fr(e,is(t,n))}function ua(e,t){return typeof e=="function"?e(t):e}function cs(e){return e.split("-")[0]}function tu(e){return e.split("-")[1]}function $y(e){return e==="x"?"y":"x"}function Ly(e){return e==="y"?"height":"width"}function fi(e){return["top","bottom"].includes(cs(e))?"y":"x"}function Fy(e){return $y(fi(e))}function iY(e,t,n){n===void 0&&(n=!1);const r=tu(e),o=Fy(e),s=Ly(o);let l=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(l=sh(l)),[l,sh(l)]}function cY(e){const t=sh(e);return[Tb(e),t,Tb(t)]}function Tb(e){return e.replace(/start|end/g,t=>lY[t])}function uY(e,t,n){const r=["left","right"],o=["right","left"],s=["top","bottom"],l=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?s:l;default:return[]}}function dY(e,t,n,r){const o=tu(e);let s=uY(cs(e),n==="start",r);return o&&(s=s.map(l=>l+"-"+o),t&&(s=s.concat(s.map(Tb)))),s}function sh(e){return e.replace(/left|right|bottom|top/g,t=>aY[t])}function fY(e){return{top:0,right:0,bottom:0,left:0,...e}}function zy(e){return typeof e!="number"?fY(e):{top:e,right:e,bottom:e,left:e}}function Rc(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function jk(e,t,n){let{reference:r,floating:o}=e;const s=fi(t),l=Fy(t),c=Ly(l),d=cs(t),f=s==="y",m=r.x+r.width/2-o.width/2,h=r.y+r.height/2-o.height/2,g=r[c]/2-o[c]/2;let b;switch(d){case"top":b={x:m,y:r.y-o.height};break;case"bottom":b={x:m,y:r.y+r.height};break;case"right":b={x:r.x+r.width,y:h};break;case"left":b={x:r.x-o.width,y:h};break;default:b={x:r.x,y:r.y}}switch(tu(t)){case"start":b[l]-=g*(n&&f?-1:1);break;case"end":b[l]+=g*(n&&f?-1:1);break}return b}const pY=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:s=[],platform:l}=n,c=s.filter(Boolean),d=await(l.isRTL==null?void 0:l.isRTL(t));let f=await l.getElementRects({reference:e,floating:t,strategy:o}),{x:m,y:h}=jk(f,r,d),g=r,b={},y=0;for(let x=0;x({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:s,platform:l,elements:c,middlewareData:d}=t,{element:f,padding:m=0}=ua(e,t)||{};if(f==null)return{};const h=zy(m),g={x:n,y:r},b=Fy(o),y=Ly(b),x=await l.getDimensions(f),w=b==="y",S=w?"top":"left",j=w?"bottom":"right",_=w?"clientHeight":"clientWidth",I=s.reference[y]+s.reference[b]-g[b]-s.floating[y],E=g[b]-s.reference[b],M=await(l.getOffsetParent==null?void 0:l.getOffsetParent(f));let D=M?M[_]:0;(!D||!await(l.isElement==null?void 0:l.isElement(M)))&&(D=c.floating[_]||s.floating[y]);const R=I/2-E/2,N=D/2-x[y]/2-1,O=is(h[S],N),T=is(h[j],N),U=O,G=D-x[y]-T,q=D/2-x[y]/2+R,Y=Ab(U,q,G),Q=!d.arrow&&tu(o)!=null&&q!=Y&&s.reference[y]/2-(qU<=0)){var N,O;const U=(((N=s.flip)==null?void 0:N.index)||0)+1,G=E[U];if(G)return{data:{index:U,overflows:R},reset:{placement:G}};let q=(O=R.filter(Y=>Y.overflows[0]<=0).sort((Y,Q)=>Y.overflows[1]-Q.overflows[1])[0])==null?void 0:O.placement;if(!q)switch(b){case"bestFit":{var T;const Y=(T=R.map(Q=>[Q.placement,Q.overflows.filter(V=>V>0).reduce((V,se)=>V+se,0)]).sort((Q,V)=>Q[1]-V[1])[0])==null?void 0:T[0];Y&&(q=Y);break}case"initialPlacement":q=c;break}if(o!==q)return{reset:{placement:q}}}return{}}}};function CE(e){const t=is(...e.map(s=>s.left)),n=is(...e.map(s=>s.top)),r=fr(...e.map(s=>s.right)),o=fr(...e.map(s=>s.bottom));return{x:t,y:n,width:r-t,height:o-n}}function hY(e){const t=e.slice().sort((o,s)=>o.y-s.y),n=[];let r=null;for(let o=0;or.height/2?n.push([s]):n[n.length-1].push(s),r=s}return n.map(o=>Rc(CE(o)))}const gY=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){const{placement:n,elements:r,rects:o,platform:s,strategy:l}=t,{padding:c=2,x:d,y:f}=ua(e,t),m=Array.from(await(s.getClientRects==null?void 0:s.getClientRects(r.reference))||[]),h=hY(m),g=Rc(CE(m)),b=zy(c);function y(){if(h.length===2&&h[0].left>h[1].right&&d!=null&&f!=null)return h.find(w=>d>w.left-b.left&&dw.top-b.top&&f=2){if(fi(n)==="y"){const O=h[0],T=h[h.length-1],U=cs(n)==="top",G=O.top,q=T.bottom,Y=U?O.left:T.left,Q=U?O.right:T.right,V=Q-Y,se=q-G;return{top:G,bottom:q,left:Y,right:Q,width:V,height:se,x:Y,y:G}}const w=cs(n)==="left",S=fr(...h.map(O=>O.right)),j=is(...h.map(O=>O.left)),_=h.filter(O=>w?O.left===j:O.right===S),I=_[0].top,E=_[_.length-1].bottom,M=j,D=S,R=D-M,N=E-I;return{top:I,bottom:E,left:M,right:D,width:R,height:N,x:M,y:I}}return g}const x=await s.getElementRects({reference:{getBoundingClientRect:y},floating:r.floating,strategy:l});return o.reference.x!==x.reference.x||o.reference.y!==x.reference.y||o.reference.width!==x.reference.width||o.reference.height!==x.reference.height?{reset:{rects:x}}:{}}}};async function vY(e,t){const{placement:n,platform:r,elements:o}=e,s=await(r.isRTL==null?void 0:r.isRTL(o.floating)),l=cs(n),c=tu(n),d=fi(n)==="y",f=["left","top"].includes(l)?-1:1,m=s&&d?-1:1,h=ua(t,e);let{mainAxis:g,crossAxis:b,alignmentAxis:y}=typeof h=="number"?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...h};return c&&typeof y=="number"&&(b=c==="end"?y*-1:y),d?{x:b*m,y:g*f}:{x:g*f,y:b*m}}const bY=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){const{x:n,y:r}=t,o=await vY(t,e);return{x:n+o.x,y:r+o.y,data:o}}}},xY=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o}=t,{mainAxis:s=!0,crossAxis:l=!1,limiter:c={fn:w=>{let{x:S,y:j}=w;return{x:S,y:j}}},...d}=ua(e,t),f={x:n,y:r},m=await By(t,d),h=fi(cs(o)),g=$y(h);let b=f[g],y=f[h];if(s){const w=g==="y"?"top":"left",S=g==="y"?"bottom":"right",j=b+m[w],_=b-m[S];b=Ab(j,b,_)}if(l){const w=h==="y"?"top":"left",S=h==="y"?"bottom":"right",j=y+m[w],_=y-m[S];y=Ab(j,y,_)}const x=c.fn({...t,[g]:b,[h]:y});return{...x,data:{x:x.x-n,y:x.y-r}}}}},yY=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:s,middlewareData:l}=t,{offset:c=0,mainAxis:d=!0,crossAxis:f=!0}=ua(e,t),m={x:n,y:r},h=fi(o),g=$y(h);let b=m[g],y=m[h];const x=ua(c,t),w=typeof x=="number"?{mainAxis:x,crossAxis:0}:{mainAxis:0,crossAxis:0,...x};if(d){const _=g==="y"?"height":"width",I=s.reference[g]-s.floating[_]+w.mainAxis,E=s.reference[g]+s.reference[_]-w.mainAxis;bE&&(b=E)}if(f){var S,j;const _=g==="y"?"width":"height",I=["top","left"].includes(cs(o)),E=s.reference[h]-s.floating[_]+(I&&((S=l.offset)==null?void 0:S[h])||0)+(I?0:w.crossAxis),M=s.reference[h]+s.reference[_]+(I?0:((j=l.offset)==null?void 0:j[h])||0)-(I?w.crossAxis:0);yM&&(y=M)}return{[g]:b,[h]:y}}}},CY=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:r,platform:o,elements:s}=t,{apply:l=()=>{},...c}=ua(e,t),d=await By(t,c),f=cs(n),m=tu(n),h=fi(n)==="y",{width:g,height:b}=r.floating;let y,x;f==="top"||f==="bottom"?(y=f,x=m===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?"start":"end")?"left":"right"):(x=f,y=m==="end"?"top":"bottom");const w=b-d[y],S=g-d[x],j=!t.middlewareData.shift;let _=w,I=S;if(h){const M=g-d.left-d.right;I=m||j?is(S,M):M}else{const M=b-d.top-d.bottom;_=m||j?is(w,M):M}if(j&&!m){const M=fr(d.left,0),D=fr(d.right,0),R=fr(d.top,0),N=fr(d.bottom,0);h?I=g-2*(M!==0||D!==0?M+D:fr(d.left,d.right)):_=b-2*(R!==0||N!==0?R+N:fr(d.top,d.bottom))}await l({...t,availableWidth:I,availableHeight:_});const E=await o.getDimensions(s.floating);return g!==E.width||b!==E.height?{reset:{rects:!0}}:{}}}};function il(e){return wE(e)?(e.nodeName||"").toLowerCase():"#document"}function no(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function ja(e){var t;return(t=(wE(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function wE(e){return e instanceof Node||e instanceof no(e).Node}function da(e){return e instanceof Element||e instanceof no(e).Element}function Ms(e){return e instanceof HTMLElement||e instanceof no(e).HTMLElement}function Ik(e){return typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof no(e).ShadowRoot}function mf(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=Oo(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function wY(e){return["table","td","th"].includes(il(e))}function Hy(e){const t=Wy(),n=Oo(e);return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function SY(e){let t=Ac(e);for(;Ms(t)&&!Ag(t);){if(Hy(t))return t;t=Ac(t)}return null}function Wy(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Ag(e){return["html","body","#document"].includes(il(e))}function Oo(e){return no(e).getComputedStyle(e)}function Tg(e){return da(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ac(e){if(il(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Ik(e)&&e.host||ja(e);return Ik(t)?t.host:t}function SE(e){const t=Ac(e);return Ag(t)?e.ownerDocument?e.ownerDocument.body:e.body:Ms(t)&&mf(t)?t:SE(t)}function Ed(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=SE(e),s=o===((r=e.ownerDocument)==null?void 0:r.body),l=no(o);return s?t.concat(l,l.visualViewport||[],mf(o)?o:[],l.frameElement&&n?Ed(l.frameElement):[]):t.concat(o,Ed(o,[],n))}function kE(e){const t=Oo(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=Ms(e),s=o?e.offsetWidth:n,l=o?e.offsetHeight:r,c=oh(n)!==s||oh(r)!==l;return c&&(n=s,r=l),{width:n,height:r,$:c}}function Vy(e){return da(e)?e:e.contextElement}function yc(e){const t=Vy(e);if(!Ms(t))return ll(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:s}=kE(t);let l=(s?oh(n.width):n.width)/r,c=(s?oh(n.height):n.height)/o;return(!l||!Number.isFinite(l))&&(l=1),(!c||!Number.isFinite(c))&&(c=1),{x:l,y:c}}const kY=ll(0);function jE(e){const t=no(e);return!Wy()||!t.visualViewport?kY:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function jY(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==no(e)?!1:t}function oi(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),s=Vy(e);let l=ll(1);t&&(r?da(r)&&(l=yc(r)):l=yc(e));const c=jY(s,n,r)?jE(s):ll(0);let d=(o.left+c.x)/l.x,f=(o.top+c.y)/l.y,m=o.width/l.x,h=o.height/l.y;if(s){const g=no(s),b=r&&da(r)?no(r):r;let y=g.frameElement;for(;y&&r&&b!==g;){const x=yc(y),w=y.getBoundingClientRect(),S=Oo(y),j=w.left+(y.clientLeft+parseFloat(S.paddingLeft))*x.x,_=w.top+(y.clientTop+parseFloat(S.paddingTop))*x.y;d*=x.x,f*=x.y,m*=x.x,h*=x.y,d+=j,f+=_,y=no(y).frameElement}}return Rc({width:m,height:h,x:d,y:f})}function _Y(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=Ms(n),s=ja(n);if(n===s)return t;let l={scrollLeft:0,scrollTop:0},c=ll(1);const d=ll(0);if((o||!o&&r!=="fixed")&&((il(n)!=="body"||mf(s))&&(l=Tg(n)),Ms(n))){const f=oi(n);c=yc(n),d.x=f.x+n.clientLeft,d.y=f.y+n.clientTop}return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-l.scrollLeft*c.x+d.x,y:t.y*c.y-l.scrollTop*c.y+d.y}}function IY(e){return Array.from(e.getClientRects())}function _E(e){return oi(ja(e)).left+Tg(e).scrollLeft}function PY(e){const t=ja(e),n=Tg(e),r=e.ownerDocument.body,o=fr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),s=fr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let l=-n.scrollLeft+_E(e);const c=-n.scrollTop;return Oo(r).direction==="rtl"&&(l+=fr(t.clientWidth,r.clientWidth)-o),{width:o,height:s,x:l,y:c}}function EY(e,t){const n=no(e),r=ja(e),o=n.visualViewport;let s=r.clientWidth,l=r.clientHeight,c=0,d=0;if(o){s=o.width,l=o.height;const f=Wy();(!f||f&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}return{width:s,height:l,x:c,y:d}}function MY(e,t){const n=oi(e,!0,t==="fixed"),r=n.top+e.clientTop,o=n.left+e.clientLeft,s=Ms(e)?yc(e):ll(1),l=e.clientWidth*s.x,c=e.clientHeight*s.y,d=o*s.x,f=r*s.y;return{width:l,height:c,x:d,y:f}}function Pk(e,t,n){let r;if(t==="viewport")r=EY(e,n);else if(t==="document")r=PY(ja(e));else if(da(t))r=MY(t,n);else{const o=jE(e);r={...t,x:t.x-o.x,y:t.y-o.y}}return Rc(r)}function IE(e,t){const n=Ac(e);return n===t||!da(n)||Ag(n)?!1:Oo(n).position==="fixed"||IE(n,t)}function OY(e,t){const n=t.get(e);if(n)return n;let r=Ed(e,[],!1).filter(c=>da(c)&&il(c)!=="body"),o=null;const s=Oo(e).position==="fixed";let l=s?Ac(e):e;for(;da(l)&&!Ag(l);){const c=Oo(l),d=Hy(l);!d&&c.position==="fixed"&&(o=null),(s?!d&&!o:!d&&c.position==="static"&&!!o&&["absolute","fixed"].includes(o.position)||mf(l)&&!d&&IE(e,l))?r=r.filter(m=>m!==l):o=c,l=Ac(l)}return t.set(e,r),r}function DY(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const l=[...n==="clippingAncestors"?OY(t,this._c):[].concat(n),r],c=l[0],d=l.reduce((f,m)=>{const h=Pk(t,m,o);return f.top=fr(h.top,f.top),f.right=is(h.right,f.right),f.bottom=is(h.bottom,f.bottom),f.left=fr(h.left,f.left),f},Pk(t,c,o));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function RY(e){return kE(e)}function AY(e,t,n){const r=Ms(t),o=ja(t),s=n==="fixed",l=oi(e,!0,s,t);let c={scrollLeft:0,scrollTop:0};const d=ll(0);if(r||!r&&!s)if((il(t)!=="body"||mf(o))&&(c=Tg(t)),r){const f=oi(t,!0,s,t);d.x=f.x+t.clientLeft,d.y=f.y+t.clientTop}else o&&(d.x=_E(o));return{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function Ek(e,t){return!Ms(e)||Oo(e).position==="fixed"?null:t?t(e):e.offsetParent}function PE(e,t){const n=no(e);if(!Ms(e))return n;let r=Ek(e,t);for(;r&&wY(r)&&Oo(r).position==="static";)r=Ek(r,t);return r&&(il(r)==="html"||il(r)==="body"&&Oo(r).position==="static"&&!Hy(r))?n:r||SY(e)||n}const TY=async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||PE,s=this.getDimensions;return{reference:AY(t,await o(n),r),floating:{x:0,y:0,...await s(n)}}};function NY(e){return Oo(e).direction==="rtl"}const $Y={convertOffsetParentRelativeRectToViewportRelativeRect:_Y,getDocumentElement:ja,getClippingRect:DY,getOffsetParent:PE,getElementRects:TY,getClientRects:IY,getDimensions:RY,getScale:yc,isElement:da,isRTL:NY};function LY(e,t){let n=null,r;const o=ja(e);function s(){clearTimeout(r),n&&n.disconnect(),n=null}function l(c,d){c===void 0&&(c=!1),d===void 0&&(d=1),s();const{left:f,top:m,width:h,height:g}=e.getBoundingClientRect();if(c||t(),!h||!g)return;const b=Lp(m),y=Lp(o.clientWidth-(f+h)),x=Lp(o.clientHeight-(m+g)),w=Lp(f),j={rootMargin:-b+"px "+-y+"px "+-x+"px "+-w+"px",threshold:fr(0,is(1,d))||1};let _=!0;function I(E){const M=E[0].intersectionRatio;if(M!==d){if(!_)return l();M?l(!1,M):r=setTimeout(()=>{l(!1,1e-7)},100)}_=!1}try{n=new IntersectionObserver(I,{...j,root:o.ownerDocument})}catch{n=new IntersectionObserver(I,j)}n.observe(e)}return l(!0),s}function FY(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:d=!1}=r,f=Vy(e),m=o||s?[...f?Ed(f):[],...Ed(t)]:[];m.forEach(S=>{o&&S.addEventListener("scroll",n,{passive:!0}),s&&S.addEventListener("resize",n)});const h=f&&c?LY(f,n):null;let g=-1,b=null;l&&(b=new ResizeObserver(S=>{let[j]=S;j&&j.target===f&&b&&(b.unobserve(t),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{b&&b.observe(t)})),n()}),f&&!d&&b.observe(f),b.observe(t));let y,x=d?oi(e):null;d&&w();function w(){const S=oi(e);x&&(S.x!==x.x||S.y!==x.y||S.width!==x.width||S.height!==x.height)&&n(),x=S,y=requestAnimationFrame(w)}return n(),()=>{m.forEach(S=>{o&&S.removeEventListener("scroll",n),s&&S.removeEventListener("resize",n)}),h&&h(),b&&b.disconnect(),b=null,d&&cancelAnimationFrame(y)}}const zY=(e,t,n)=>{const r=new Map,o={platform:$Y,...n},s={...o.platform,_c:r};return pY(e,t,{...o,platform:s})},BY=e=>{const{element:t,padding:n}=e;function r(o){return Object.prototype.hasOwnProperty.call(o,"current")}return{name:"arrow",options:e,fn(o){return r(t)?t.current!=null?_k({element:t.current,padding:n}).fn(o):{}:t?_k({element:t,padding:n}).fn(o):{}}}};var mm=typeof document<"u"?i.useLayoutEffect:i.useEffect;function ah(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!ah(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const s=o[r];if(!(s==="_owner"&&e.$$typeof)&&!ah(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function Mk(e){const t=i.useRef(e);return mm(()=>{t.current=e}),t}function HY(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,whileElementsMounted:s,open:l}=e,[c,d]=i.useState({x:null,y:null,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,m]=i.useState(r);ah(f,r)||m(r);const h=i.useRef(null),g=i.useRef(null),b=i.useRef(c),y=Mk(s),x=Mk(o),[w,S]=i.useState(null),[j,_]=i.useState(null),I=i.useCallback(O=>{h.current!==O&&(h.current=O,S(O))},[]),E=i.useCallback(O=>{g.current!==O&&(g.current=O,_(O))},[]),M=i.useCallback(()=>{if(!h.current||!g.current)return;const O={placement:t,strategy:n,middleware:f};x.current&&(O.platform=x.current),zY(h.current,g.current,O).then(T=>{const U={...T,isPositioned:!0};D.current&&!ah(b.current,U)&&(b.current=U,Jr.flushSync(()=>{d(U)}))})},[f,t,n,x]);mm(()=>{l===!1&&b.current.isPositioned&&(b.current.isPositioned=!1,d(O=>({...O,isPositioned:!1})))},[l]);const D=i.useRef(!1);mm(()=>(D.current=!0,()=>{D.current=!1}),[]),mm(()=>{if(w&&j){if(y.current)return y.current(w,j,M);M()}},[w,j,M,y]);const R=i.useMemo(()=>({reference:h,floating:g,setReference:I,setFloating:E}),[I,E]),N=i.useMemo(()=>({reference:w,floating:j}),[w,j]);return i.useMemo(()=>({...c,update:M,refs:R,elements:N,reference:I,floating:E}),[c,M,R,N,I,E])}var WY=typeof document<"u"?i.useLayoutEffect:i.useEffect;function VY(){const e=new Map;return{emit(t,n){var r;(r=e.get(t))==null||r.forEach(o=>o(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){e.set(t,(e.get(t)||[]).filter(r=>r!==n))}}}const UY=i.createContext(null),GY=()=>i.useContext(UY);function KY(e){return(e==null?void 0:e.ownerDocument)||document}function qY(e){return KY(e).defaultView||window}function Fp(e){return e?e instanceof qY(e).Element:!1}const XY=xx["useInsertionEffect".toString()],QY=XY||(e=>e());function YY(e){const t=i.useRef(()=>{});return QY(()=>{t.current=e}),i.useCallback(function(){for(var n=arguments.length,r=new Array(n),o=0;oVY())[0],[f,m]=i.useState(null),h=i.useCallback(S=>{const j=Fp(S)?{getBoundingClientRect:()=>S.getBoundingClientRect(),contextElement:S}:S;o.refs.setReference(j)},[o.refs]),g=i.useCallback(S=>{(Fp(S)||S===null)&&(l.current=S,m(S)),(Fp(o.refs.reference.current)||o.refs.reference.current===null||S!==null&&!Fp(S))&&o.refs.setReference(S)},[o.refs]),b=i.useMemo(()=>({...o.refs,setReference:g,setPositionReference:h,domReference:l}),[o.refs,g,h]),y=i.useMemo(()=>({...o.elements,domReference:f}),[o.elements,f]),x=YY(n),w=i.useMemo(()=>({...o,refs:b,elements:y,dataRef:c,nodeId:r,events:d,open:t,onOpenChange:x}),[o,r,d,t,x,b,y]);return WY(()=>{const S=s==null?void 0:s.nodesRef.current.find(j=>j.id===r);S&&(S.context=w)}),i.useMemo(()=>({...o,context:w,refs:b,reference:g,positionReference:h}),[o,b,w,g,h])}function JY({opened:e,floating:t,position:n,positionDependencies:r}){const[o,s]=i.useState(0);i.useEffect(()=>{if(t.refs.reference.current&&t.refs.floating.current)return FY(t.refs.reference.current,t.refs.floating.current,t.update)},[t.refs.reference.current,t.refs.floating.current,e,o,n]),os(()=>{t.update()},r),os(()=>{s(l=>l+1)},[e])}function eZ(e){const t=[bY(e.offset)];return e.middlewares.shift&&t.push(xY({limiter:yY()})),e.middlewares.flip&&t.push(mY()),e.middlewares.inline&&t.push(gY()),t.push(BY({element:e.arrowRef,padding:e.arrowOffset})),t}function tZ(e){const[t,n]=Pd({value:e.opened,defaultValue:e.defaultOpened,finalValue:!1,onChange:e.onChange}),r=()=>{var l;(l=e.onClose)==null||l.call(e),n(!1)},o=()=>{var l,c;t?((l=e.onClose)==null||l.call(e),n(!1)):((c=e.onOpen)==null||c.call(e),n(!0))},s=ZY({placement:e.position,middleware:[...eZ(e),...e.width==="target"?[CY({apply({rects:l}){var c,d;Object.assign((d=(c=s.refs.floating.current)==null?void 0:c.style)!=null?d:{},{width:`${l.reference.width}px`})}})]:[]]});return JY({opened:e.opened,position:e.position,positionDependencies:e.positionDependencies,floating:s}),os(()=>{var l;(l=e.onPositionChange)==null||l.call(e,s.placement)},[s.placement]),os(()=>{var l,c;e.opened?(c=e.onOpen)==null||c.call(e):(l=e.onClose)==null||l.call(e)},[e.opened]),{floating:s,controlled:typeof e.opened=="boolean",opened:t,onClose:r,onToggle:o}}const EE={context:"Popover component was not found in the tree",children:"Popover.Target component children should be an element or a component that accepts ref. Fragments, strings, numbers and other primitive values are not supported"},[nZ,ME]=jK(EE.context);var rZ=Object.defineProperty,oZ=Object.defineProperties,sZ=Object.getOwnPropertyDescriptors,lh=Object.getOwnPropertySymbols,OE=Object.prototype.hasOwnProperty,DE=Object.prototype.propertyIsEnumerable,Ok=(e,t,n)=>t in e?rZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zp=(e,t)=>{for(var n in t||(t={}))OE.call(t,n)&&Ok(e,n,t[n]);if(lh)for(var n of lh(t))DE.call(t,n)&&Ok(e,n,t[n]);return e},aZ=(e,t)=>oZ(e,sZ(t)),lZ=(e,t)=>{var n={};for(var r in e)OE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&lh)for(var r of lh(e))t.indexOf(r)<0&&DE.call(e,r)&&(n[r]=e[r]);return n};const iZ={refProp:"ref",popupType:"dialog",shouldOverrideDefaultTargetId:!0},RE=i.forwardRef((e,t)=>{const n=Nn("PopoverTarget",iZ,e),{children:r,refProp:o,popupType:s,shouldOverrideDefaultTargetId:l}=n,c=lZ(n,["children","refProp","popupType","shouldOverrideDefaultTargetId"]);if(!aP(r))throw new Error(EE.children);const d=c,f=ME(),m=df(f.reference,r.ref,t),h=f.withRoles?{"aria-haspopup":s,"aria-expanded":f.opened,"aria-controls":f.getDropdownId(),id:l?f.getTargetId():r.props.id}:{};return i.cloneElement(r,zp(aZ(zp(zp(zp({},d),h),f.targetProps),{className:iP(f.targetProps.className,d.className,r.props.className),[o]:m}),f.controlled?null:{onClick:f.onToggle}))});RE.displayName="@mantine/core/PopoverTarget";var cZ=gr((e,{radius:t,shadow:n})=>({dropdown:{position:"absolute",backgroundColor:e.white,background:e.colorScheme==="dark"?e.colors.dark[6]:e.white,border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,padding:`${e.spacing.sm} ${e.spacing.md}`,boxShadow:e.shadows[n]||n||"none",borderRadius:e.fn.radius(t),"&:focus":{outline:0}},arrow:{backgroundColor:"inherit",border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[2]}`,zIndex:1}}));const uZ=cZ;var dZ=Object.defineProperty,Dk=Object.getOwnPropertySymbols,fZ=Object.prototype.hasOwnProperty,pZ=Object.prototype.propertyIsEnumerable,Rk=(e,t,n)=>t in e?dZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wi=(e,t)=>{for(var n in t||(t={}))fZ.call(t,n)&&Rk(e,n,t[n]);if(Dk)for(var n of Dk(t))pZ.call(t,n)&&Rk(e,n,t[n]);return e};const Ak={entering:"in",entered:"in",exiting:"out",exited:"out","pre-exiting":"out","pre-entering":"out"};function mZ({transition:e,state:t,duration:n,timingFunction:r}){const o={transitionDuration:`${n}ms`,transitionTimingFunction:r};return typeof e=="string"?e in Dp?Wi(Wi(Wi({transitionProperty:Dp[e].transitionProperty},o),Dp[e].common),Dp[e][Ak[t]]):null:Wi(Wi(Wi({transitionProperty:e.transitionProperty},o),e.common),e[Ak[t]])}function hZ({duration:e,exitDuration:t,timingFunction:n,mounted:r,onEnter:o,onExit:s,onEntered:l,onExited:c}){const d=wa(),f=hP(),m=d.respectReducedMotion?f:!1,[h,g]=i.useState(m?0:e),[b,y]=i.useState(r?"entered":"exited"),x=i.useRef(-1),w=S=>{const j=S?o:s,_=S?l:c;y(S?"pre-entering":"pre-exiting"),window.clearTimeout(x.current);const I=m?0:S?e:t;if(g(I),I===0)typeof j=="function"&&j(),typeof _=="function"&&_(),y(S?"entered":"exited");else{const E=window.setTimeout(()=>{typeof j=="function"&&j(),y(S?"entering":"exiting")},10);x.current=window.setTimeout(()=>{window.clearTimeout(E),typeof _=="function"&&_(),y(S?"entered":"exited")},I)}};return os(()=>{w(r)},[r]),i.useEffect(()=>()=>window.clearTimeout(x.current),[]),{transitionDuration:h,transitionStatus:b,transitionTimingFunction:n||d.transitionTimingFunction}}function AE({keepMounted:e,transition:t,duration:n=250,exitDuration:r=n,mounted:o,children:s,timingFunction:l,onExit:c,onEntered:d,onEnter:f,onExited:m}){const{transitionDuration:h,transitionStatus:g,transitionTimingFunction:b}=hZ({mounted:o,exitDuration:r,duration:n,timingFunction:l,onExit:c,onEntered:d,onEnter:f,onExited:m});return h===0?o?B.createElement(B.Fragment,null,s({})):e?s({display:"none"}):null:g==="exited"?e?s({display:"none"}):null:B.createElement(B.Fragment,null,s(mZ({transition:t,duration:h,state:g,timingFunction:b})))}AE.displayName="@mantine/core/Transition";function TE({children:e,active:t=!0,refProp:n="ref"}){const r=sq(t),o=df(r,e==null?void 0:e.ref);return aP(e)?i.cloneElement(e,{[n]:o}):e}TE.displayName="@mantine/core/FocusTrap";var gZ=Object.defineProperty,vZ=Object.defineProperties,bZ=Object.getOwnPropertyDescriptors,Tk=Object.getOwnPropertySymbols,xZ=Object.prototype.hasOwnProperty,yZ=Object.prototype.propertyIsEnumerable,Nk=(e,t,n)=>t in e?gZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,za=(e,t)=>{for(var n in t||(t={}))xZ.call(t,n)&&Nk(e,n,t[n]);if(Tk)for(var n of Tk(t))yZ.call(t,n)&&Nk(e,n,t[n]);return e},Bp=(e,t)=>vZ(e,bZ(t));function $k(e,t,n,r){return e==="center"||r==="center"?{top:t}:e==="end"?{bottom:n}:e==="start"?{top:n}:{}}function Lk(e,t,n,r,o){return e==="center"||r==="center"?{left:t}:e==="end"?{[o==="ltr"?"right":"left"]:n}:e==="start"?{[o==="ltr"?"left":"right"]:n}:{}}const CZ={bottom:"borderTopLeftRadius",left:"borderTopRightRadius",right:"borderBottomLeftRadius",top:"borderBottomRightRadius"};function wZ({position:e,arrowSize:t,arrowOffset:n,arrowRadius:r,arrowPosition:o,arrowX:s,arrowY:l,dir:c}){const[d,f="center"]=e.split("-"),m={width:Ae(t),height:Ae(t),transform:"rotate(45deg)",position:"absolute",[CZ[d]]:Ae(r)},h=Ae(-t/2);return d==="left"?Bp(za(za({},m),$k(f,l,n,o)),{right:h,borderLeftColor:"transparent",borderBottomColor:"transparent"}):d==="right"?Bp(za(za({},m),$k(f,l,n,o)),{left:h,borderRightColor:"transparent",borderTopColor:"transparent"}):d==="top"?Bp(za(za({},m),Lk(f,s,n,o,c)),{bottom:h,borderTopColor:"transparent",borderLeftColor:"transparent"}):d==="bottom"?Bp(za(za({},m),Lk(f,s,n,o,c)),{top:h,borderBottomColor:"transparent",borderRightColor:"transparent"}):{}}var SZ=Object.defineProperty,kZ=Object.defineProperties,jZ=Object.getOwnPropertyDescriptors,ih=Object.getOwnPropertySymbols,NE=Object.prototype.hasOwnProperty,$E=Object.prototype.propertyIsEnumerable,Fk=(e,t,n)=>t in e?SZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_Z=(e,t)=>{for(var n in t||(t={}))NE.call(t,n)&&Fk(e,n,t[n]);if(ih)for(var n of ih(t))$E.call(t,n)&&Fk(e,n,t[n]);return e},IZ=(e,t)=>kZ(e,jZ(t)),PZ=(e,t)=>{var n={};for(var r in e)NE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ih)for(var r of ih(e))t.indexOf(r)<0&&$E.call(e,r)&&(n[r]=e[r]);return n};const LE=i.forwardRef((e,t)=>{var n=e,{position:r,arrowSize:o,arrowOffset:s,arrowRadius:l,arrowPosition:c,visible:d,arrowX:f,arrowY:m}=n,h=PZ(n,["position","arrowSize","arrowOffset","arrowRadius","arrowPosition","visible","arrowX","arrowY"]);const g=wa();return d?B.createElement("div",IZ(_Z({},h),{ref:t,style:wZ({position:r,arrowSize:o,arrowOffset:s,arrowRadius:l,arrowPosition:c,dir:g.dir,arrowX:f,arrowY:m})})):null});LE.displayName="@mantine/core/FloatingArrow";var EZ=Object.defineProperty,MZ=Object.defineProperties,OZ=Object.getOwnPropertyDescriptors,ch=Object.getOwnPropertySymbols,FE=Object.prototype.hasOwnProperty,zE=Object.prototype.propertyIsEnumerable,zk=(e,t,n)=>t in e?EZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vi=(e,t)=>{for(var n in t||(t={}))FE.call(t,n)&&zk(e,n,t[n]);if(ch)for(var n of ch(t))zE.call(t,n)&&zk(e,n,t[n]);return e},Hp=(e,t)=>MZ(e,OZ(t)),DZ=(e,t)=>{var n={};for(var r in e)FE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ch)for(var r of ch(e))t.indexOf(r)<0&&zE.call(e,r)&&(n[r]=e[r]);return n};const RZ={};function BE(e){var t;const n=Nn("PopoverDropdown",RZ,e),{style:r,className:o,children:s,onKeyDownCapture:l}=n,c=DZ(n,["style","className","children","onKeyDownCapture"]),d=ME(),{classes:f,cx:m}=uZ({radius:d.radius,shadow:d.shadow},{name:d.__staticSelector,classNames:d.classNames,styles:d.styles,unstyled:d.unstyled,variant:d.variant}),h=ZK({opened:d.opened,shouldReturnFocus:d.returnFocus}),g=d.withRoles?{"aria-labelledby":d.getTargetId(),id:d.getDropdownId(),role:"dialog"}:{};return d.disabled?null:B.createElement(zP,Hp(Vi({},d.portalProps),{withinPortal:d.withinPortal}),B.createElement(AE,Hp(Vi({mounted:d.opened},d.transitionProps),{transition:d.transitionProps.transition||"fade",duration:(t=d.transitionProps.duration)!=null?t:150,keepMounted:d.keepMounted,exitDuration:typeof d.transitionProps.exitDuration=="number"?d.transitionProps.exitDuration:d.transitionProps.duration}),b=>{var y,x;return B.createElement(TE,{active:d.trapFocus},B.createElement(Vr,Vi(Hp(Vi({},g),{tabIndex:-1,ref:d.floating,style:Hp(Vi(Vi({},r),b),{zIndex:d.zIndex,top:(y=d.y)!=null?y:0,left:(x=d.x)!=null?x:0,width:d.width==="target"?void 0:Ae(d.width)}),className:m(f.dropdown,o),onKeyDownCapture:IK(d.onClose,{active:d.closeOnEscape,onTrigger:h,onKeyDown:l}),"data-position":d.placement}),c),s,B.createElement(LE,{ref:d.arrowRef,arrowX:d.arrowX,arrowY:d.arrowY,visible:d.withArrow,position:d.placement,arrowSize:d.arrowSize,arrowRadius:d.arrowRadius,arrowOffset:d.arrowOffset,arrowPosition:d.arrowPosition,className:f.arrow})))}))}BE.displayName="@mantine/core/PopoverDropdown";function AZ(e,t){if(e==="rtl"&&(t.includes("right")||t.includes("left"))){const[n,r]=t.split("-"),o=n==="right"?"left":"right";return r===void 0?o:`${o}-${r}`}return t}var Bk=Object.getOwnPropertySymbols,TZ=Object.prototype.hasOwnProperty,NZ=Object.prototype.propertyIsEnumerable,$Z=(e,t)=>{var n={};for(var r in e)TZ.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Bk)for(var r of Bk(e))t.indexOf(r)<0&&NZ.call(e,r)&&(n[r]=e[r]);return n};const LZ={position:"bottom",offset:8,positionDependencies:[],transitionProps:{transition:"fade",duration:150},middlewares:{flip:!0,shift:!0,inline:!1},arrowSize:7,arrowOffset:5,arrowRadius:0,arrowPosition:"side",closeOnClickOutside:!0,withinPortal:!1,closeOnEscape:!0,trapFocus:!1,withRoles:!0,returnFocus:!1,clickOutsideEvents:["mousedown","touchstart"],zIndex:Oy("popover"),__staticSelector:"Popover",width:"max-content"};function nu(e){var t,n,r,o,s,l;const c=i.useRef(null),d=Nn("Popover",LZ,e),{children:f,position:m,offset:h,onPositionChange:g,positionDependencies:b,opened:y,transitionProps:x,width:w,middlewares:S,withArrow:j,arrowSize:_,arrowOffset:I,arrowRadius:E,arrowPosition:M,unstyled:D,classNames:R,styles:N,closeOnClickOutside:O,withinPortal:T,portalProps:U,closeOnEscape:G,clickOutsideEvents:q,trapFocus:Y,onClose:Q,onOpen:V,onChange:se,zIndex:ee,radius:le,shadow:ae,id:ce,defaultOpened:J,__staticSelector:re,withRoles:A,disabled:L,returnFocus:K,variant:ne,keepMounted:z}=d,oe=$Z(d,["children","position","offset","onPositionChange","positionDependencies","opened","transitionProps","width","middlewares","withArrow","arrowSize","arrowOffset","arrowRadius","arrowPosition","unstyled","classNames","styles","closeOnClickOutside","withinPortal","portalProps","closeOnEscape","clickOutsideEvents","trapFocus","onClose","onOpen","onChange","zIndex","radius","shadow","id","defaultOpened","__staticSelector","withRoles","disabled","returnFocus","variant","keepMounted"]),[X,Z]=i.useState(null),[me,ve]=i.useState(null),de=Ry(ce),ke=wa(),we=tZ({middlewares:S,width:w,position:AZ(ke.dir,m),offset:typeof h=="number"?h+(j?_/2:0):h,arrowRef:c,arrowOffset:I,onPositionChange:g,positionDependencies:b,opened:y,defaultOpened:J,onChange:se,onOpen:V,onClose:Q});qK(()=>we.opened&&O&&we.onClose(),q,[X,me]);const Re=i.useCallback($e=>{Z($e),we.floating.reference($e)},[we.floating.reference]),Qe=i.useCallback($e=>{ve($e),we.floating.floating($e)},[we.floating.floating]);return B.createElement(nZ,{value:{returnFocus:K,disabled:L,controlled:we.controlled,reference:Re,floating:Qe,x:we.floating.x,y:we.floating.y,arrowX:(r=(n=(t=we.floating)==null?void 0:t.middlewareData)==null?void 0:n.arrow)==null?void 0:r.x,arrowY:(l=(s=(o=we.floating)==null?void 0:o.middlewareData)==null?void 0:s.arrow)==null?void 0:l.y,opened:we.opened,arrowRef:c,transitionProps:x,width:w,withArrow:j,arrowSize:_,arrowOffset:I,arrowRadius:E,arrowPosition:M,placement:we.floating.placement,trapFocus:Y,withinPortal:T,portalProps:U,zIndex:ee,radius:le,shadow:ae,closeOnEscape:G,onClose:we.onClose,onToggle:we.onToggle,getTargetId:()=>`${de}-target`,getDropdownId:()=>`${de}-dropdown`,withRoles:A,targetProps:oe,__staticSelector:re,classNames:R,styles:N,unstyled:D,variant:ne,keepMounted:z}},f)}nu.Target=RE;nu.Dropdown=BE;nu.displayName="@mantine/core/Popover";var FZ=Object.defineProperty,uh=Object.getOwnPropertySymbols,HE=Object.prototype.hasOwnProperty,WE=Object.prototype.propertyIsEnumerable,Hk=(e,t,n)=>t in e?FZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,zZ=(e,t)=>{for(var n in t||(t={}))HE.call(t,n)&&Hk(e,n,t[n]);if(uh)for(var n of uh(t))WE.call(t,n)&&Hk(e,n,t[n]);return e},BZ=(e,t)=>{var n={};for(var r in e)HE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&uh)for(var r of uh(e))t.indexOf(r)<0&&WE.call(e,r)&&(n[r]=e[r]);return n};function HZ(e){var t=e,{children:n,component:r="div",maxHeight:o=220,direction:s="column",id:l,innerRef:c,__staticSelector:d,styles:f,classNames:m,unstyled:h}=t,g=BZ(t,["children","component","maxHeight","direction","id","innerRef","__staticSelector","styles","classNames","unstyled"]);const{classes:b}=sY(null,{name:d,styles:f,classNames:m,unstyled:h});return B.createElement(nu.Dropdown,zZ({p:0,onMouseDown:y=>y.preventDefault()},g),B.createElement("div",{style:{maxHeight:Ae(o),display:"flex"}},B.createElement(Vr,{component:r||"div",id:`${l}-items`,"aria-labelledby":`${l}-label`,role:"listbox",onMouseDown:y=>y.preventDefault(),style:{flex:1,overflowY:r!==Rg?"auto":void 0},"data-combobox-popover":!0,tabIndex:-1,ref:c},B.createElement("div",{className:b.itemsWrapper,style:{flexDirection:s}},n))))}function el({opened:e,transitionProps:t={transition:"fade",duration:0},shadow:n,withinPortal:r,portalProps:o,children:s,__staticSelector:l,onDirectionChange:c,switchDirectionOnFlip:d,zIndex:f,dropdownPosition:m,positionDependencies:h=[],classNames:g,styles:b,unstyled:y,readOnly:x,variant:w}){return B.createElement(nu,{unstyled:y,classNames:g,styles:b,width:"target",withRoles:!1,opened:e,middlewares:{flip:m==="flip",shift:!1},position:m==="flip"?"bottom":m,positionDependencies:h,zIndex:f,__staticSelector:l,withinPortal:r,portalProps:o,transitionProps:t,shadow:n,disabled:x,onPositionChange:S=>d&&(c==null?void 0:c(S==="top"?"column-reverse":"column")),variant:w},s)}el.Target=nu.Target;el.Dropdown=HZ;var WZ=Object.defineProperty,VZ=Object.defineProperties,UZ=Object.getOwnPropertyDescriptors,dh=Object.getOwnPropertySymbols,VE=Object.prototype.hasOwnProperty,UE=Object.prototype.propertyIsEnumerable,Wk=(e,t,n)=>t in e?WZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Wp=(e,t)=>{for(var n in t||(t={}))VE.call(t,n)&&Wk(e,n,t[n]);if(dh)for(var n of dh(t))UE.call(t,n)&&Wk(e,n,t[n]);return e},GZ=(e,t)=>VZ(e,UZ(t)),KZ=(e,t)=>{var n={};for(var r in e)VE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&dh)for(var r of dh(e))t.indexOf(r)<0&&UE.call(e,r)&&(n[r]=e[r]);return n};function GE(e,t,n){const r=Nn(e,t,n),{label:o,description:s,error:l,required:c,classNames:d,styles:f,className:m,unstyled:h,__staticSelector:g,sx:b,errorProps:y,labelProps:x,descriptionProps:w,wrapperProps:S,id:j,size:_,style:I,inputContainer:E,inputWrapperOrder:M,withAsterisk:D,variant:R}=r,N=KZ(r,["label","description","error","required","classNames","styles","className","unstyled","__staticSelector","sx","errorProps","labelProps","descriptionProps","wrapperProps","id","size","style","inputContainer","inputWrapperOrder","withAsterisk","variant"]),O=Ry(j),{systemStyles:T,rest:U}=Eg(N),G=Wp({label:o,description:s,error:l,required:c,classNames:d,className:m,__staticSelector:g,sx:b,errorProps:y,labelProps:x,descriptionProps:w,unstyled:h,styles:f,id:O,size:_,style:I,inputContainer:E,inputWrapperOrder:M,withAsterisk:D,variant:R},S);return GZ(Wp({},U),{classNames:d,styles:f,unstyled:h,wrapperProps:Wp(Wp({},G),T),inputProps:{required:c,classNames:d,styles:f,unstyled:h,id:O,size:_,__staticSelector:g,error:l,variant:R}})}var qZ=gr((e,t,{size:n})=>({label:{display:"inline-block",fontSize:pt({size:n,sizes:e.fontSizes}),fontWeight:500,color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[9],wordBreak:"break-word",cursor:"default",WebkitTapHighlightColor:"transparent"},required:{color:e.fn.variant({variant:"filled",color:"red"}).background}}));const XZ=qZ;var QZ=Object.defineProperty,fh=Object.getOwnPropertySymbols,KE=Object.prototype.hasOwnProperty,qE=Object.prototype.propertyIsEnumerable,Vk=(e,t,n)=>t in e?QZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,YZ=(e,t)=>{for(var n in t||(t={}))KE.call(t,n)&&Vk(e,n,t[n]);if(fh)for(var n of fh(t))qE.call(t,n)&&Vk(e,n,t[n]);return e},ZZ=(e,t)=>{var n={};for(var r in e)KE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&fh)for(var r of fh(e))t.indexOf(r)<0&&qE.call(e,r)&&(n[r]=e[r]);return n};const JZ={labelElement:"label",size:"sm"},Uy=i.forwardRef((e,t)=>{const n=Nn("InputLabel",JZ,e),{labelElement:r,children:o,required:s,size:l,classNames:c,styles:d,unstyled:f,className:m,htmlFor:h,__staticSelector:g,variant:b,onMouseDown:y}=n,x=ZZ(n,["labelElement","children","required","size","classNames","styles","unstyled","className","htmlFor","__staticSelector","variant","onMouseDown"]),{classes:w,cx:S}=XZ(null,{name:["InputWrapper",g],classNames:c,styles:d,unstyled:f,variant:b,size:l});return B.createElement(Vr,YZ({component:r,ref:t,className:S(w.label,m),htmlFor:r==="label"?h:void 0,onMouseDown:j=>{y==null||y(j),!j.defaultPrevented&&j.detail>1&&j.preventDefault()}},x),o,s&&B.createElement("span",{className:w.required,"aria-hidden":!0}," *"))});Uy.displayName="@mantine/core/InputLabel";var eJ=gr((e,t,{size:n})=>({error:{wordBreak:"break-word",color:e.fn.variant({variant:"filled",color:"red"}).background,fontSize:`calc(${pt({size:n,sizes:e.fontSizes})} - ${Ae(2)})`,lineHeight:1.2,display:"block"}}));const tJ=eJ;var nJ=Object.defineProperty,ph=Object.getOwnPropertySymbols,XE=Object.prototype.hasOwnProperty,QE=Object.prototype.propertyIsEnumerable,Uk=(e,t,n)=>t in e?nJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rJ=(e,t)=>{for(var n in t||(t={}))XE.call(t,n)&&Uk(e,n,t[n]);if(ph)for(var n of ph(t))QE.call(t,n)&&Uk(e,n,t[n]);return e},oJ=(e,t)=>{var n={};for(var r in e)XE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ph)for(var r of ph(e))t.indexOf(r)<0&&QE.call(e,r)&&(n[r]=e[r]);return n};const sJ={size:"sm"},Gy=i.forwardRef((e,t)=>{const n=Nn("InputError",sJ,e),{children:r,className:o,classNames:s,styles:l,unstyled:c,size:d,__staticSelector:f,variant:m}=n,h=oJ(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:g,cx:b}=tJ(null,{name:["InputWrapper",f],classNames:s,styles:l,unstyled:c,variant:m,size:d});return B.createElement(Oc,rJ({className:b(g.error,o),ref:t},h),r)});Gy.displayName="@mantine/core/InputError";var aJ=gr((e,t,{size:n})=>({description:{wordBreak:"break-word",color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],fontSize:`calc(${pt({size:n,sizes:e.fontSizes})} - ${Ae(2)})`,lineHeight:1.2,display:"block"}}));const lJ=aJ;var iJ=Object.defineProperty,mh=Object.getOwnPropertySymbols,YE=Object.prototype.hasOwnProperty,ZE=Object.prototype.propertyIsEnumerable,Gk=(e,t,n)=>t in e?iJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,cJ=(e,t)=>{for(var n in t||(t={}))YE.call(t,n)&&Gk(e,n,t[n]);if(mh)for(var n of mh(t))ZE.call(t,n)&&Gk(e,n,t[n]);return e},uJ=(e,t)=>{var n={};for(var r in e)YE.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&mh)for(var r of mh(e))t.indexOf(r)<0&&ZE.call(e,r)&&(n[r]=e[r]);return n};const dJ={size:"sm"},Ky=i.forwardRef((e,t)=>{const n=Nn("InputDescription",dJ,e),{children:r,className:o,classNames:s,styles:l,unstyled:c,size:d,__staticSelector:f,variant:m}=n,h=uJ(n,["children","className","classNames","styles","unstyled","size","__staticSelector","variant"]),{classes:g,cx:b}=lJ(null,{name:["InputWrapper",f],classNames:s,styles:l,unstyled:c,variant:m,size:d});return B.createElement(Oc,cJ({color:"dimmed",className:b(g.description,o),ref:t,unstyled:c},h),r)});Ky.displayName="@mantine/core/InputDescription";const JE=i.createContext({offsetBottom:!1,offsetTop:!1,describedBy:void 0}),fJ=JE.Provider,pJ=()=>i.useContext(JE);function mJ(e,{hasDescription:t,hasError:n}){const r=e.findIndex(d=>d==="input"),o=e[r-1],s=e[r+1];return{offsetBottom:t&&s==="description"||n&&s==="error",offsetTop:t&&o==="description"||n&&o==="error"}}var hJ=Object.defineProperty,gJ=Object.defineProperties,vJ=Object.getOwnPropertyDescriptors,Kk=Object.getOwnPropertySymbols,bJ=Object.prototype.hasOwnProperty,xJ=Object.prototype.propertyIsEnumerable,qk=(e,t,n)=>t in e?hJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,yJ=(e,t)=>{for(var n in t||(t={}))bJ.call(t,n)&&qk(e,n,t[n]);if(Kk)for(var n of Kk(t))xJ.call(t,n)&&qk(e,n,t[n]);return e},CJ=(e,t)=>gJ(e,vJ(t)),wJ=gr(e=>({root:CJ(yJ({},e.fn.fontStyles()),{lineHeight:e.lineHeight})}));const SJ=wJ;var kJ=Object.defineProperty,jJ=Object.defineProperties,_J=Object.getOwnPropertyDescriptors,hh=Object.getOwnPropertySymbols,eM=Object.prototype.hasOwnProperty,tM=Object.prototype.propertyIsEnumerable,Xk=(e,t,n)=>t in e?kJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ba=(e,t)=>{for(var n in t||(t={}))eM.call(t,n)&&Xk(e,n,t[n]);if(hh)for(var n of hh(t))tM.call(t,n)&&Xk(e,n,t[n]);return e},Qk=(e,t)=>jJ(e,_J(t)),IJ=(e,t)=>{var n={};for(var r in e)eM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&hh)for(var r of hh(e))t.indexOf(r)<0&&tM.call(e,r)&&(n[r]=e[r]);return n};const PJ={labelElement:"label",size:"sm",inputContainer:e=>e,inputWrapperOrder:["label","description","input","error"]},nM=i.forwardRef((e,t)=>{const n=Nn("InputWrapper",PJ,e),{className:r,label:o,children:s,required:l,id:c,error:d,description:f,labelElement:m,labelProps:h,descriptionProps:g,errorProps:b,classNames:y,styles:x,size:w,inputContainer:S,__staticSelector:j,unstyled:_,inputWrapperOrder:I,withAsterisk:E,variant:M}=n,D=IJ(n,["className","label","children","required","id","error","description","labelElement","labelProps","descriptionProps","errorProps","classNames","styles","size","inputContainer","__staticSelector","unstyled","inputWrapperOrder","withAsterisk","variant"]),{classes:R,cx:N}=SJ(null,{classNames:y,styles:x,name:["InputWrapper",j],unstyled:_,variant:M,size:w}),O={classNames:y,styles:x,unstyled:_,size:w,variant:M,__staticSelector:j},T=typeof E=="boolean"?E:l,U=c?`${c}-error`:b==null?void 0:b.id,G=c?`${c}-description`:g==null?void 0:g.id,Y=`${!!d&&typeof d!="boolean"?U:""} ${f?G:""}`,Q=Y.trim().length>0?Y.trim():void 0,V=o&&B.createElement(Uy,Ba(Ba({key:"label",labelElement:m,id:c?`${c}-label`:void 0,htmlFor:c,required:T},O),h),o),se=f&&B.createElement(Ky,Qk(Ba(Ba({key:"description"},g),O),{size:(g==null?void 0:g.size)||O.size,id:(g==null?void 0:g.id)||G}),f),ee=B.createElement(i.Fragment,{key:"input"},S(s)),le=typeof d!="boolean"&&d&&B.createElement(Gy,Qk(Ba(Ba({},b),O),{size:(b==null?void 0:b.size)||O.size,key:"error",id:(b==null?void 0:b.id)||U}),d),ae=I.map(ce=>{switch(ce){case"label":return V;case"input":return ee;case"description":return se;case"error":return le;default:return null}});return B.createElement(fJ,{value:Ba({describedBy:Q},mJ(I,{hasDescription:!!se,hasError:!!le}))},B.createElement(Vr,Ba({className:N(R.root,r),ref:t},D),ae))});nM.displayName="@mantine/core/InputWrapper";var EJ=Object.defineProperty,gh=Object.getOwnPropertySymbols,rM=Object.prototype.hasOwnProperty,oM=Object.prototype.propertyIsEnumerable,Yk=(e,t,n)=>t in e?EJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,MJ=(e,t)=>{for(var n in t||(t={}))rM.call(t,n)&&Yk(e,n,t[n]);if(gh)for(var n of gh(t))oM.call(t,n)&&Yk(e,n,t[n]);return e},OJ=(e,t)=>{var n={};for(var r in e)rM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&gh)for(var r of gh(e))t.indexOf(r)<0&&oM.call(e,r)&&(n[r]=e[r]);return n};const DJ={},sM=i.forwardRef((e,t)=>{const n=Nn("InputPlaceholder",DJ,e),{sx:r}=n,o=OJ(n,["sx"]);return B.createElement(Vr,MJ({component:"span",sx:[s=>s.fn.placeholderStyles(),...oP(r)],ref:t},o))});sM.displayName="@mantine/core/InputPlaceholder";var RJ=Object.defineProperty,AJ=Object.defineProperties,TJ=Object.getOwnPropertyDescriptors,Zk=Object.getOwnPropertySymbols,NJ=Object.prototype.hasOwnProperty,$J=Object.prototype.propertyIsEnumerable,Jk=(e,t,n)=>t in e?RJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Vp=(e,t)=>{for(var n in t||(t={}))NJ.call(t,n)&&Jk(e,n,t[n]);if(Zk)for(var n of Zk(t))$J.call(t,n)&&Jk(e,n,t[n]);return e},s1=(e,t)=>AJ(e,TJ(t));const vo={xs:Ae(30),sm:Ae(36),md:Ae(42),lg:Ae(50),xl:Ae(60)},LJ=["default","filled","unstyled"];function FJ({theme:e,variant:t}){return LJ.includes(t)?t==="default"?{border:`${Ae(1)} solid ${e.colorScheme==="dark"?e.colors.dark[4]:e.colors.gray[4]}`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.white,transition:"border-color 100ms ease","&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:t==="filled"?{border:`${Ae(1)} solid transparent`,backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[1],"&:focus, &:focus-within":e.focusRingStyles.inputStyles(e)}:{borderWidth:0,color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,backgroundColor:"transparent",minHeight:Ae(28),outline:0,"&:focus, &:focus-within":{outline:"none",borderColor:"transparent"},"&:disabled":{backgroundColor:"transparent","&:focus, &:focus-within":{outline:"none",borderColor:"transparent"}}}:null}var zJ=gr((e,{multiline:t,radius:n,invalid:r,rightSectionWidth:o,withRightSection:s,iconWidth:l,offsetBottom:c,offsetTop:d,pointer:f},{variant:m,size:h})=>{const g=e.fn.variant({variant:"filled",color:"red"}).background,b=m==="default"||m==="filled"?{minHeight:pt({size:h,sizes:vo}),paddingLeft:`calc(${pt({size:h,sizes:vo})} / 3)`,paddingRight:s?o||pt({size:h,sizes:vo}):`calc(${pt({size:h,sizes:vo})} / 3)`,borderRadius:e.fn.radius(n)}:m==="unstyled"&&s?{paddingRight:o||pt({size:h,sizes:vo})}:null;return{wrapper:{position:"relative",marginTop:d?`calc(${e.spacing.xs} / 2)`:void 0,marginBottom:c?`calc(${e.spacing.xs} / 2)`:void 0,"&:has(input:disabled)":{"& .mantine-Input-rightSection":{display:"none"}}},input:s1(Vp(Vp(s1(Vp({},e.fn.fontStyles()),{height:t?m==="unstyled"?void 0:"auto":pt({size:h,sizes:vo}),WebkitTapHighlightColor:"transparent",lineHeight:t?e.lineHeight:`calc(${pt({size:h,sizes:vo})} - ${Ae(2)})`,appearance:"none",resize:"none",boxSizing:"border-box",fontSize:pt({size:h,sizes:e.fontSizes}),width:"100%",color:e.colorScheme==="dark"?e.colors.dark[0]:e.black,display:"block",textAlign:"left",cursor:f?"pointer":void 0}),FJ({theme:e,variant:m})),b),{"&:disabled, &[data-disabled]":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,cursor:"not-allowed",pointerEvents:"none","&::placeholder":{color:e.colors.dark[2]}},"&[data-invalid]":{color:g,borderColor:g,"&::placeholder":{opacity:1,color:g}},"&[data-with-icon]":{paddingLeft:typeof l=="number"?Ae(l):pt({size:h,sizes:vo})},"&::placeholder":s1(Vp({},e.fn.placeholderStyles()),{opacity:1}),"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button, &::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{appearance:"none"},"&[type=number]":{MozAppearance:"textfield"}}),icon:{pointerEvents:"none",position:"absolute",zIndex:1,left:0,top:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",width:l?Ae(l):pt({size:h,sizes:vo}),color:r?e.colors.red[e.colorScheme==="dark"?6:7]:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[5]},rightSection:{position:"absolute",top:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",width:o||pt({size:h,sizes:vo})}}});const BJ=zJ;var HJ=Object.defineProperty,WJ=Object.defineProperties,VJ=Object.getOwnPropertyDescriptors,vh=Object.getOwnPropertySymbols,aM=Object.prototype.hasOwnProperty,lM=Object.prototype.propertyIsEnumerable,ej=(e,t,n)=>t in e?HJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Up=(e,t)=>{for(var n in t||(t={}))aM.call(t,n)&&ej(e,n,t[n]);if(vh)for(var n of vh(t))lM.call(t,n)&&ej(e,n,t[n]);return e},tj=(e,t)=>WJ(e,VJ(t)),UJ=(e,t)=>{var n={};for(var r in e)aM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&vh)for(var r of vh(e))t.indexOf(r)<0&&lM.call(e,r)&&(n[r]=e[r]);return n};const GJ={size:"sm",variant:"default"},pi=i.forwardRef((e,t)=>{const n=Nn("Input",GJ,e),{className:r,error:o,required:s,disabled:l,variant:c,icon:d,style:f,rightSectionWidth:m,iconWidth:h,rightSection:g,rightSectionProps:b,radius:y,size:x,wrapperProps:w,classNames:S,styles:j,__staticSelector:_,multiline:I,sx:E,unstyled:M,pointer:D}=n,R=UJ(n,["className","error","required","disabled","variant","icon","style","rightSectionWidth","iconWidth","rightSection","rightSectionProps","radius","size","wrapperProps","classNames","styles","__staticSelector","multiline","sx","unstyled","pointer"]),{offsetBottom:N,offsetTop:O,describedBy:T}=pJ(),{classes:U,cx:G}=BJ({radius:y,multiline:I,invalid:!!o,rightSectionWidth:m?Ae(m):void 0,iconWidth:h,withRightSection:!!g,offsetBottom:N,offsetTop:O,pointer:D},{classNames:S,styles:j,name:["Input",_],unstyled:M,variant:c,size:x}),{systemStyles:q,rest:Y}=Eg(R);return B.createElement(Vr,Up(Up({className:G(U.wrapper,r),sx:E,style:f},q),w),d&&B.createElement("div",{className:U.icon},d),B.createElement(Vr,tj(Up({component:"input"},Y),{ref:t,required:s,"aria-invalid":!!o,"aria-describedby":T,disabled:l,"data-disabled":l||void 0,"data-with-icon":!!d||void 0,"data-invalid":!!o||void 0,className:U.input})),g&&B.createElement("div",tj(Up({},b),{className:U.rightSection}),g))});pi.displayName="@mantine/core/Input";pi.Wrapper=nM;pi.Label=Uy;pi.Description=Ky;pi.Error=Gy;pi.Placeholder=sM;const Tc=pi;var KJ=Object.defineProperty,bh=Object.getOwnPropertySymbols,iM=Object.prototype.hasOwnProperty,cM=Object.prototype.propertyIsEnumerable,nj=(e,t,n)=>t in e?KJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rj=(e,t)=>{for(var n in t||(t={}))iM.call(t,n)&&nj(e,n,t[n]);if(bh)for(var n of bh(t))cM.call(t,n)&&nj(e,n,t[n]);return e},qJ=(e,t)=>{var n={};for(var r in e)iM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&bh)for(var r of bh(e))t.indexOf(r)<0&&cM.call(e,r)&&(n[r]=e[r]);return n};const XJ={multiple:!1},uM=i.forwardRef((e,t)=>{const n=Nn("FileButton",XJ,e),{onChange:r,children:o,multiple:s,accept:l,name:c,form:d,resetRef:f,disabled:m,capture:h,inputProps:g}=n,b=qJ(n,["onChange","children","multiple","accept","name","form","resetRef","disabled","capture","inputProps"]),y=i.useRef(),x=()=>{!m&&y.current.click()},w=j=>{r(s?Array.from(j.currentTarget.files):j.currentTarget.files[0]||null)};return mP(f,()=>{y.current.value=""}),B.createElement(B.Fragment,null,o(rj({onClick:x},b)),B.createElement("input",rj({style:{display:"none"},type:"file",accept:l,multiple:s,onChange:w,ref:df(t,y),name:c,form:d,capture:h},g)))});uM.displayName="@mantine/core/FileButton";const dM={xs:Ae(16),sm:Ae(22),md:Ae(26),lg:Ae(30),xl:Ae(36)},QJ={xs:Ae(10),sm:Ae(12),md:Ae(14),lg:Ae(16),xl:Ae(18)};var YJ=gr((e,{disabled:t,radius:n,readOnly:r},{size:o,variant:s})=>({defaultValue:{display:"flex",alignItems:"center",backgroundColor:t?e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3]:e.colorScheme==="dark"?e.colors.dark[7]:s==="filled"?e.white:e.colors.gray[1],color:t?e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],height:pt({size:o,sizes:dM}),paddingLeft:`calc(${pt({size:o,sizes:e.spacing})} / 1.5)`,paddingRight:t||r?pt({size:o,sizes:e.spacing}):0,fontWeight:500,fontSize:pt({size:o,sizes:QJ}),borderRadius:pt({size:n,sizes:e.radius}),cursor:t?"not-allowed":"default",userSelect:"none",maxWidth:`calc(100% - ${Ae(10)})`},defaultValueRemove:{color:e.colorScheme==="dark"?e.colors.dark[0]:e.colors.gray[7],marginLeft:`calc(${pt({size:o,sizes:e.spacing})} / 6)`},defaultValueLabel:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}));const ZJ=YJ;var JJ=Object.defineProperty,xh=Object.getOwnPropertySymbols,fM=Object.prototype.hasOwnProperty,pM=Object.prototype.propertyIsEnumerable,oj=(e,t,n)=>t in e?JJ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,eee=(e,t)=>{for(var n in t||(t={}))fM.call(t,n)&&oj(e,n,t[n]);if(xh)for(var n of xh(t))pM.call(t,n)&&oj(e,n,t[n]);return e},tee=(e,t)=>{var n={};for(var r in e)fM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&xh)for(var r of xh(e))t.indexOf(r)<0&&pM.call(e,r)&&(n[r]=e[r]);return n};const nee={xs:16,sm:22,md:24,lg:26,xl:30};function mM(e){var t=e,{label:n,classNames:r,styles:o,className:s,onRemove:l,disabled:c,readOnly:d,size:f,radius:m="sm",variant:h,unstyled:g}=t,b=tee(t,["label","classNames","styles","className","onRemove","disabled","readOnly","size","radius","variant","unstyled"]);const{classes:y,cx:x}=ZJ({disabled:c,readOnly:d,radius:m},{name:"MultiSelect",classNames:r,styles:o,unstyled:g,size:f,variant:h});return B.createElement("div",eee({className:x(y.defaultValue,s)},b),B.createElement("span",{className:y.defaultValueLabel},n),!c&&!d&&B.createElement(KP,{"aria-hidden":!0,onMouseDown:l,size:nee[f],radius:2,color:"blue",variant:"transparent",iconSize:"70%",className:y.defaultValueRemove,tabIndex:-1,unstyled:g}))}mM.displayName="@mantine/core/MultiSelect/DefaultValue";function ree({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,disableSelectedItemFiltering:l}){if(!t&&s.length===0)return e;if(!t){const d=[];for(let f=0;fm===e[f].value&&!e[f].disabled))&&d.push(e[f]);return d}const c=[];for(let d=0;df===e[d].value&&!e[d].disabled),e[d])&&c.push(e[d]),!(c.length>=n));d+=1);return c}var oee=Object.defineProperty,yh=Object.getOwnPropertySymbols,hM=Object.prototype.hasOwnProperty,gM=Object.prototype.propertyIsEnumerable,sj=(e,t,n)=>t in e?oee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,aj=(e,t)=>{for(var n in t||(t={}))hM.call(t,n)&&sj(e,n,t[n]);if(yh)for(var n of yh(t))gM.call(t,n)&&sj(e,n,t[n]);return e},see=(e,t)=>{var n={};for(var r in e)hM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&yh)for(var r of yh(e))t.indexOf(r)<0&&gM.call(e,r)&&(n[r]=e[r]);return n};const aee={xs:Ae(14),sm:Ae(18),md:Ae(20),lg:Ae(24),xl:Ae(28)};function lee(e){var t=e,{size:n,error:r,style:o}=t,s=see(t,["size","error","style"]);const l=wa(),c=pt({size:n,sizes:aee});return B.createElement("svg",aj({viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:aj({color:r?l.colors.red[6]:l.colors.gray[6],width:c,height:c},o),"data-chevron":!0},s),B.createElement("path",{d:"M4.93179 5.43179C4.75605 5.60753 4.75605 5.89245 4.93179 6.06819C5.10753 6.24392 5.39245 6.24392 5.56819 6.06819L7.49999 4.13638L9.43179 6.06819C9.60753 6.24392 9.89245 6.24392 10.0682 6.06819C10.2439 5.89245 10.2439 5.60753 10.0682 5.43179L7.81819 3.18179C7.73379 3.0974 7.61933 3.04999 7.49999 3.04999C7.38064 3.04999 7.26618 3.0974 7.18179 3.18179L4.93179 5.43179ZM10.0682 9.56819C10.2439 9.39245 10.2439 9.10753 10.0682 8.93179C9.89245 8.75606 9.60753 8.75606 9.43179 8.93179L7.49999 10.8636L5.56819 8.93179C5.39245 8.75606 5.10753 8.75606 4.93179 8.93179C4.75605 9.10753 4.75605 9.39245 4.93179 9.56819L7.18179 11.8182C7.35753 11.9939 7.64245 11.9939 7.81819 11.8182L10.0682 9.56819Z",fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd"}))}var iee=Object.defineProperty,cee=Object.defineProperties,uee=Object.getOwnPropertyDescriptors,lj=Object.getOwnPropertySymbols,dee=Object.prototype.hasOwnProperty,fee=Object.prototype.propertyIsEnumerable,ij=(e,t,n)=>t in e?iee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,pee=(e,t)=>{for(var n in t||(t={}))dee.call(t,n)&&ij(e,n,t[n]);if(lj)for(var n of lj(t))fee.call(t,n)&&ij(e,n,t[n]);return e},mee=(e,t)=>cee(e,uee(t));function vM({shouldClear:e,clearButtonProps:t,onClear:n,size:r,error:o}){return e?B.createElement(KP,mee(pee({},t),{variant:"transparent",onClick:n,size:r,onMouseDown:s=>s.preventDefault()})):B.createElement(lee,{error:o,size:r})}vM.displayName="@mantine/core/SelectRightSection";var hee=Object.defineProperty,gee=Object.defineProperties,vee=Object.getOwnPropertyDescriptors,Ch=Object.getOwnPropertySymbols,bM=Object.prototype.hasOwnProperty,xM=Object.prototype.propertyIsEnumerable,cj=(e,t,n)=>t in e?hee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,a1=(e,t)=>{for(var n in t||(t={}))bM.call(t,n)&&cj(e,n,t[n]);if(Ch)for(var n of Ch(t))xM.call(t,n)&&cj(e,n,t[n]);return e},uj=(e,t)=>gee(e,vee(t)),bee=(e,t)=>{var n={};for(var r in e)bM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ch)for(var r of Ch(e))t.indexOf(r)<0&&xM.call(e,r)&&(n[r]=e[r]);return n};function yM(e){var t=e,{styles:n,rightSection:r,rightSectionWidth:o,theme:s}=t,l=bee(t,["styles","rightSection","rightSectionWidth","theme"]);if(r)return{rightSection:r,rightSectionWidth:o,styles:n};const c=typeof n=="function"?n(s):n;return{rightSection:!l.readOnly&&!(l.disabled&&l.shouldClear)&&B.createElement(vM,a1({},l)),styles:uj(a1({},c),{rightSection:uj(a1({},c==null?void 0:c.rightSection),{pointerEvents:l.shouldClear?void 0:"none"})})}}var xee=Object.defineProperty,yee=Object.defineProperties,Cee=Object.getOwnPropertyDescriptors,dj=Object.getOwnPropertySymbols,wee=Object.prototype.hasOwnProperty,See=Object.prototype.propertyIsEnumerable,fj=(e,t,n)=>t in e?xee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,kee=(e,t)=>{for(var n in t||(t={}))wee.call(t,n)&&fj(e,n,t[n]);if(dj)for(var n of dj(t))See.call(t,n)&&fj(e,n,t[n]);return e},jee=(e,t)=>yee(e,Cee(t)),_ee=gr((e,{invalid:t},{size:n})=>({wrapper:{position:"relative","&:has(input:disabled)":{cursor:"not-allowed",pointerEvents:"none","& .mantine-MultiSelect-input":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[1],color:e.colors.dark[2],opacity:.6,"&::placeholder":{color:e.colors.dark[2]}},"& .mantine-MultiSelect-defaultValue":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[3],color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7]}}},values:{minHeight:`calc(${pt({size:n,sizes:vo})} - ${Ae(2)})`,display:"flex",alignItems:"center",flexWrap:"wrap",marginLeft:`calc(-${e.spacing.xs} / 2)`,boxSizing:"border-box","&[data-clearable]":{marginRight:pt({size:n,sizes:vo})}},value:{margin:`calc(${e.spacing.xs} / 2 - ${Ae(2)}) calc(${e.spacing.xs} / 2)`},searchInput:jee(kee({},e.fn.fontStyles()),{flex:1,minWidth:Ae(60),backgroundColor:"transparent",border:0,outline:0,fontSize:pt({size:n,sizes:e.fontSizes}),padding:0,marginLeft:`calc(${e.spacing.xs} / 2)`,appearance:"none",color:"inherit",maxHeight:pt({size:n,sizes:dM}),"&::placeholder":{opacity:1,color:t?e.colors.red[e.fn.primaryShade()]:e.colorScheme==="dark"?e.colors.dark[3]:e.colors.gray[5]},"&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}),searchInputEmpty:{width:"100%"},searchInputInputHidden:{flex:0,width:0,minWidth:0,margin:0,overflow:"hidden"},searchInputPointer:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}},input:{cursor:"pointer","&:disabled":{cursor:"not-allowed",pointerEvents:"none"}}}));const Iee=_ee;var Pee=Object.defineProperty,Eee=Object.defineProperties,Mee=Object.getOwnPropertyDescriptors,wh=Object.getOwnPropertySymbols,CM=Object.prototype.hasOwnProperty,wM=Object.prototype.propertyIsEnumerable,pj=(e,t,n)=>t in e?Pee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ui=(e,t)=>{for(var n in t||(t={}))CM.call(t,n)&&pj(e,n,t[n]);if(wh)for(var n of wh(t))wM.call(t,n)&&pj(e,n,t[n]);return e},mj=(e,t)=>Eee(e,Mee(t)),Oee=(e,t)=>{var n={};for(var r in e)CM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&wh)for(var r of wh(e))t.indexOf(r)<0&&wM.call(e,r)&&(n[r]=e[r]);return n};function Dee(e,t,n){return t?!1:n.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function Ree(e,t){return!!e&&!t.some(n=>n.value.toLowerCase()===e.toLowerCase())}function hj(e,t){if(!Array.isArray(e))return;if(t.length===0)return[];const n=t.map(r=>typeof r=="object"?r.value:r);return e.filter(r=>n.includes(r))}const Aee={size:"sm",valueComponent:mM,itemComponent:Ty,transitionProps:{transition:"fade",duration:0},maxDropdownHeight:220,shadow:"sm",searchable:!1,filter:Dee,limit:1/0,clearSearchOnChange:!0,clearable:!1,clearSearchOnBlur:!1,disabled:!1,initiallyOpened:!1,creatable:!1,shouldCreate:Ree,switchDirectionOnFlip:!1,zIndex:Oy("popover"),selectOnBlur:!1,positionDependencies:[],dropdownPosition:"flip"},SM=i.forwardRef((e,t)=>{const n=Nn("MultiSelect",Aee,e),{className:r,style:o,required:s,label:l,description:c,size:d,error:f,classNames:m,styles:h,wrapperProps:g,value:b,defaultValue:y,data:x,onChange:w,valueComponent:S,itemComponent:j,id:_,transitionProps:I,maxDropdownHeight:E,shadow:M,nothingFound:D,onFocus:R,onBlur:N,searchable:O,placeholder:T,filter:U,limit:G,clearSearchOnChange:q,clearable:Y,clearSearchOnBlur:Q,variant:V,onSearchChange:se,searchValue:ee,disabled:le,initiallyOpened:ae,radius:ce,icon:J,rightSection:re,rightSectionWidth:A,creatable:L,getCreateLabel:K,shouldCreate:ne,onCreate:z,sx:oe,dropdownComponent:X,onDropdownClose:Z,onDropdownOpen:me,maxSelectedValues:ve,withinPortal:de,portalProps:ke,switchDirectionOnFlip:we,zIndex:Re,selectOnBlur:Qe,name:$e,dropdownPosition:vt,errorProps:it,labelProps:ot,descriptionProps:Ce,form:Me,positionDependencies:qe,onKeyDown:dt,unstyled:ye,inputContainer:Ue,inputWrapperOrder:st,readOnly:mt,withAsterisk:Pe,clearButtonProps:Ne,hoverOnSearchChange:kt,disableSelectedItemFiltering:Se}=n,Ve=Oee(n,["className","style","required","label","description","size","error","classNames","styles","wrapperProps","value","defaultValue","data","onChange","valueComponent","itemComponent","id","transitionProps","maxDropdownHeight","shadow","nothingFound","onFocus","onBlur","searchable","placeholder","filter","limit","clearSearchOnChange","clearable","clearSearchOnBlur","variant","onSearchChange","searchValue","disabled","initiallyOpened","radius","icon","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","onCreate","sx","dropdownComponent","onDropdownClose","onDropdownOpen","maxSelectedValues","withinPortal","portalProps","switchDirectionOnFlip","zIndex","selectOnBlur","name","dropdownPosition","errorProps","labelProps","descriptionProps","form","positionDependencies","onKeyDown","unstyled","inputContainer","inputWrapperOrder","readOnly","withAsterisk","clearButtonProps","hoverOnSearchChange","disableSelectedItemFiltering"]),{classes:Ge,cx:Le,theme:bt}=Iee({invalid:!!f},{name:"MultiSelect",classNames:m,styles:h,unstyled:ye,size:d,variant:V}),{systemStyles:fn,rest:Bt}=Eg(Ve),Ht=i.useRef(),zn=i.useRef({}),pn=Ry(_),[en,un]=i.useState(ae),[Wt,ar]=i.useState(-1),[vr,Bn]=i.useState("column"),[Hn,lo]=Pd({value:ee,defaultValue:"",finalValue:void 0,onChange:se}),[Fo,zo]=i.useState(!1),{scrollIntoView:Ia,targetRef:xi,scrollableRef:Pa}=gP({duration:0,offset:5,cancelable:!1,isList:!0}),yi=L&&typeof K=="function";let Je=null;const qt=x.map(rt=>typeof rt=="string"?{label:rt,value:rt}:rt),Wn=sP({data:qt}),[jt,Ea]=Pd({value:hj(b,x),defaultValue:hj(y,x),finalValue:[],onChange:w}),qr=i.useRef(!!ve&&ve{if(!mt){const Dt=jt.filter(_t=>_t!==rt);Ea(Dt),ve&&Dt.length{lo(rt.currentTarget.value),!le&&!qr.current&&O&&un(!0)},g0=rt=>{typeof R=="function"&&R(rt),!le&&!qr.current&&O&&un(!0)},Vn=ree({data:Wn,searchable:O,searchValue:Hn,limit:G,filter:U,value:jt,disableSelectedItemFiltering:Se});yi&&ne(Hn,Wn)&&(Je=K(Hn),Vn.push({label:Hn,value:Hn,creatable:!0}));const Hs=Math.min(Wt,Vn.length-1),_f=(rt,Dt,_t)=>{let Rt=rt;for(;_t(Rt);)if(Rt=Dt(Rt),!Vn[Rt].disabled)return Rt;return rt};os(()=>{ar(kt&&Hn?0:-1)},[Hn,kt]),os(()=>{!le&&jt.length>x.length&&un(!1),ve&&jt.length=ve&&(qr.current=!0,un(!1))},[jt]);const Ci=rt=>{if(!mt)if(q&&lo(""),jt.includes(rt.value))jf(rt.value);else{if(rt.creatable&&typeof z=="function"){const Dt=z(rt.value);typeof Dt<"u"&&Dt!==null&&Ea(typeof Dt=="string"?[...jt,Dt]:[...jt,Dt.value])}else Ea([...jt,rt.value]);jt.length===ve-1&&(qr.current=!0,un(!1)),Vn.length===1&&un(!1)}},mu=rt=>{typeof N=="function"&&N(rt),Qe&&Vn[Hs]&&en&&Ci(Vn[Hs]),Q&&lo(""),un(!1)},_l=rt=>{if(Fo||(dt==null||dt(rt),mt)||rt.key!=="Backspace"&&ve&&qr.current)return;const Dt=vr==="column",_t=()=>{ar(lr=>{var an;const $n=_f(lr,br=>br+1,br=>br{ar(lr=>{var an;const $n=_f(lr,br=>br-1,br=>br>0);return en&&(xi.current=zn.current[(an=Vn[$n])==null?void 0:an.value],Ia({alignment:Dt?"start":"end"})),$n})};switch(rt.key){case"ArrowUp":{rt.preventDefault(),un(!0),Dt?Rt():_t();break}case"ArrowDown":{rt.preventDefault(),un(!0),Dt?_t():Rt();break}case"Enter":{rt.preventDefault(),Vn[Hs]&&en?Ci(Vn[Hs]):un(!0);break}case" ":{O||(rt.preventDefault(),Vn[Hs]&&en?Ci(Vn[Hs]):un(!0));break}case"Backspace":{jt.length>0&&Hn.length===0&&(Ea(jt.slice(0,-1)),un(!0),ve&&(qr.current=!1));break}case"Home":{if(!O){rt.preventDefault(),en||un(!0);const lr=Vn.findIndex(an=>!an.disabled);ar(lr),Ia({alignment:Dt?"end":"start"})}break}case"End":{if(!O){rt.preventDefault(),en||un(!0);const lr=Vn.map(an=>!!an.disabled).lastIndexOf(!1);ar(lr),Ia({alignment:Dt?"end":"start"})}break}case"Escape":un(!1)}},hu=jt.map(rt=>{let Dt=Wn.find(_t=>_t.value===rt&&!_t.disabled);return!Dt&&yi&&(Dt={value:rt,label:rt}),Dt}).filter(rt=>!!rt).map((rt,Dt)=>B.createElement(S,mj(Ui({},rt),{variant:V,disabled:le,className:Ge.value,readOnly:mt,onRemove:_t=>{_t.preventDefault(),_t.stopPropagation(),jf(rt.value)},key:rt.value,size:d,styles:h,classNames:m,radius:ce,index:Dt}))),gu=rt=>jt.includes(rt),v0=()=>{var rt;lo(""),Ea([]),(rt=Ht.current)==null||rt.focus(),ve&&(qr.current=!1)},Ma=!mt&&(Vn.length>0?en:en&&!!D);return os(()=>{const rt=Ma?me:Z;typeof rt=="function"&&rt()},[Ma]),B.createElement(Tc.Wrapper,Ui(Ui({required:s,id:pn,label:l,error:f,description:c,size:d,className:r,style:o,classNames:m,styles:h,__staticSelector:"MultiSelect",sx:oe,errorProps:it,descriptionProps:Ce,labelProps:ot,inputContainer:Ue,inputWrapperOrder:st,unstyled:ye,withAsterisk:Pe,variant:V},fn),g),B.createElement(el,{opened:Ma,transitionProps:I,shadow:"sm",withinPortal:de,portalProps:ke,__staticSelector:"MultiSelect",onDirectionChange:Bn,switchDirectionOnFlip:we,zIndex:Re,dropdownPosition:vt,positionDependencies:[...qe,Hn],classNames:m,styles:h,unstyled:ye,variant:V},B.createElement(el.Target,null,B.createElement("div",{className:Ge.wrapper,role:"combobox","aria-haspopup":"listbox","aria-owns":en&&Ma?`${pn}-items`:null,"aria-controls":pn,"aria-expanded":en,onMouseLeave:()=>ar(-1),tabIndex:-1},B.createElement("input",{type:"hidden",name:$e,value:jt.join(","),form:Me,disabled:le}),B.createElement(Tc,Ui({__staticSelector:"MultiSelect",style:{overflow:"hidden"},component:"div",multiline:!0,size:d,variant:V,disabled:le,error:f,required:s,radius:ce,icon:J,unstyled:ye,onMouseDown:rt=>{var Dt;rt.preventDefault(),!le&&!qr.current&&un(!en),(Dt=Ht.current)==null||Dt.focus()},classNames:mj(Ui({},m),{input:Le({[Ge.input]:!O},m==null?void 0:m.input)})},yM({theme:bt,rightSection:re,rightSectionWidth:A,styles:h,size:d,shouldClear:Y&&jt.length>0,onClear:v0,error:f,disabled:le,clearButtonProps:Ne,readOnly:mt})),B.createElement("div",{className:Ge.values,"data-clearable":Y||void 0},hu,B.createElement("input",Ui({ref:df(t,Ht),type:"search",id:pn,className:Le(Ge.searchInput,{[Ge.searchInputPointer]:!O,[Ge.searchInputInputHidden]:!en&&jt.length>0||!O&&jt.length>0,[Ge.searchInputEmpty]:jt.length===0}),onKeyDown:_l,value:Hn,onChange:h0,onFocus:g0,onBlur:mu,readOnly:!O||qr.current||mt,placeholder:jt.length===0?T:void 0,disabled:le,"data-mantine-stop-propagation":en,autoComplete:"off",onCompositionStart:()=>zo(!0),onCompositionEnd:()=>zo(!1)},Bt)))))),B.createElement(el.Dropdown,{component:X||Rg,maxHeight:E,direction:vr,id:pn,innerRef:Pa,__staticSelector:"MultiSelect",classNames:m,styles:h},B.createElement(Ay,{data:Vn,hovered:Hs,classNames:m,styles:h,uuid:pn,__staticSelector:"MultiSelect",onItemHover:ar,onItemSelect:Ci,itemsRefs:zn,itemComponent:j,size:d,nothingFound:D,isItemSelected:gu,creatable:L&&!!Je,createLabel:Je,unstyled:ye,variant:V}))))});SM.displayName="@mantine/core/MultiSelect";var Tee=Object.defineProperty,Nee=Object.defineProperties,$ee=Object.getOwnPropertyDescriptors,Sh=Object.getOwnPropertySymbols,kM=Object.prototype.hasOwnProperty,jM=Object.prototype.propertyIsEnumerable,gj=(e,t,n)=>t in e?Tee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,l1=(e,t)=>{for(var n in t||(t={}))kM.call(t,n)&&gj(e,n,t[n]);if(Sh)for(var n of Sh(t))jM.call(t,n)&&gj(e,n,t[n]);return e},Lee=(e,t)=>Nee(e,$ee(t)),Fee=(e,t)=>{var n={};for(var r in e)kM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Sh)for(var r of Sh(e))t.indexOf(r)<0&&jM.call(e,r)&&(n[r]=e[r]);return n};const zee={type:"text",size:"sm",__staticSelector:"TextInput"},_M=i.forwardRef((e,t)=>{const n=GE("TextInput",zee,e),{inputProps:r,wrapperProps:o}=n,s=Fee(n,["inputProps","wrapperProps"]);return B.createElement(Tc.Wrapper,l1({},o),B.createElement(Tc,Lee(l1(l1({},r),s),{ref:t})))});_M.displayName="@mantine/core/TextInput";function Bee({data:e,searchable:t,limit:n,searchValue:r,filter:o,value:s,filterDataOnExactSearchMatch:l}){if(!t)return e;const c=s!=null&&e.find(f=>f.value===s)||null;if(c&&!l&&(c==null?void 0:c.label)===r){if(n){if(n>=e.length)return e;const f=e.indexOf(c),m=f+n,h=m-e.length;return h>0?e.slice(f-h):e.slice(f,m)}return e}const d=[];for(let f=0;f=n));f+=1);return d}var Hee=gr(()=>({input:{"&:not(:disabled)":{cursor:"pointer","&::selection":{backgroundColor:"transparent"}}}}));const Wee=Hee;var Vee=Object.defineProperty,Uee=Object.defineProperties,Gee=Object.getOwnPropertyDescriptors,kh=Object.getOwnPropertySymbols,IM=Object.prototype.hasOwnProperty,PM=Object.prototype.propertyIsEnumerable,vj=(e,t,n)=>t in e?Vee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hu=(e,t)=>{for(var n in t||(t={}))IM.call(t,n)&&vj(e,n,t[n]);if(kh)for(var n of kh(t))PM.call(t,n)&&vj(e,n,t[n]);return e},i1=(e,t)=>Uee(e,Gee(t)),Kee=(e,t)=>{var n={};for(var r in e)IM.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&kh)for(var r of kh(e))t.indexOf(r)<0&&PM.call(e,r)&&(n[r]=e[r]);return n};function qee(e,t){return t.label.toLowerCase().trim().includes(e.toLowerCase().trim())}function Xee(e,t){return!!e&&!t.some(n=>n.label.toLowerCase()===e.toLowerCase())}const Qee={required:!1,size:"sm",shadow:"sm",itemComponent:Ty,transitionProps:{transition:"fade",duration:0},initiallyOpened:!1,filter:qee,maxDropdownHeight:220,searchable:!1,clearable:!1,limit:1/0,disabled:!1,creatable:!1,shouldCreate:Xee,selectOnBlur:!1,switchDirectionOnFlip:!1,filterDataOnExactSearchMatch:!1,zIndex:Oy("popover"),positionDependencies:[],dropdownPosition:"flip"},qy=i.forwardRef((e,t)=>{const n=GE("Select",Qee,e),{inputProps:r,wrapperProps:o,shadow:s,data:l,value:c,defaultValue:d,onChange:f,itemComponent:m,onKeyDown:h,onBlur:g,onFocus:b,transitionProps:y,initiallyOpened:x,unstyled:w,classNames:S,styles:j,filter:_,maxDropdownHeight:I,searchable:E,clearable:M,nothingFound:D,limit:R,disabled:N,onSearchChange:O,searchValue:T,rightSection:U,rightSectionWidth:G,creatable:q,getCreateLabel:Y,shouldCreate:Q,selectOnBlur:V,onCreate:se,dropdownComponent:ee,onDropdownClose:le,onDropdownOpen:ae,withinPortal:ce,portalProps:J,switchDirectionOnFlip:re,zIndex:A,name:L,dropdownPosition:K,allowDeselect:ne,placeholder:z,filterDataOnExactSearchMatch:oe,form:X,positionDependencies:Z,readOnly:me,clearButtonProps:ve,hoverOnSearchChange:de}=n,ke=Kee(n,["inputProps","wrapperProps","shadow","data","value","defaultValue","onChange","itemComponent","onKeyDown","onBlur","onFocus","transitionProps","initiallyOpened","unstyled","classNames","styles","filter","maxDropdownHeight","searchable","clearable","nothingFound","limit","disabled","onSearchChange","searchValue","rightSection","rightSectionWidth","creatable","getCreateLabel","shouldCreate","selectOnBlur","onCreate","dropdownComponent","onDropdownClose","onDropdownOpen","withinPortal","portalProps","switchDirectionOnFlip","zIndex","name","dropdownPosition","allowDeselect","placeholder","filterDataOnExactSearchMatch","form","positionDependencies","readOnly","clearButtonProps","hoverOnSearchChange"]),{classes:we,cx:Re,theme:Qe}=Wee(),[$e,vt]=i.useState(x),[it,ot]=i.useState(-1),Ce=i.useRef(),Me=i.useRef({}),[qe,dt]=i.useState("column"),ye=qe==="column",{scrollIntoView:Ue,targetRef:st,scrollableRef:mt}=gP({duration:0,offset:5,cancelable:!1,isList:!0}),Pe=ne===void 0?M:ne,Ne=Je=>{if($e!==Je){vt(Je);const qt=Je?ae:le;typeof qt=="function"&&qt()}},kt=q&&typeof Y=="function";let Se=null;const Ve=l.map(Je=>typeof Je=="string"?{label:Je,value:Je}:Je),Ge=sP({data:Ve}),[Le,bt,fn]=Pd({value:c,defaultValue:d,finalValue:null,onChange:f}),Bt=Ge.find(Je=>Je.value===Le),[Ht,zn]=Pd({value:T,defaultValue:(Bt==null?void 0:Bt.label)||"",finalValue:void 0,onChange:O}),pn=Je=>{zn(Je),E&&typeof O=="function"&&O(Je)},en=()=>{var Je;me||(bt(null),fn||pn(""),(Je=Ce.current)==null||Je.focus())};i.useEffect(()=>{const Je=Ge.find(qt=>qt.value===Le);Je?pn(Je.label):(!kt||!Le)&&pn("")},[Le]),i.useEffect(()=>{Bt&&(!E||!$e)&&pn(Bt.label)},[Bt==null?void 0:Bt.label]);const un=Je=>{if(!me)if(Pe&&(Bt==null?void 0:Bt.value)===Je.value)bt(null),Ne(!1);else{if(Je.creatable&&typeof se=="function"){const qt=se(Je.value);typeof qt<"u"&&qt!==null&&bt(typeof qt=="string"?qt:qt.value)}else bt(Je.value);fn||pn(Je.label),ot(-1),Ne(!1),Ce.current.focus()}},Wt=Bee({data:Ge,searchable:E,limit:R,searchValue:Ht,filter:_,filterDataOnExactSearchMatch:oe,value:Le});kt&&Q(Ht,Wt)&&(Se=Y(Ht),Wt.push({label:Ht,value:Ht,creatable:!0}));const ar=(Je,qt,Wn)=>{let jt=Je;for(;Wn(jt);)if(jt=qt(jt),!Wt[jt].disabled)return jt;return Je};os(()=>{ot(de&&Ht?0:-1)},[Ht,de]);const vr=Le?Wt.findIndex(Je=>Je.value===Le):0,Bn=!me&&(Wt.length>0?$e:$e&&!!D),Hn=()=>{ot(Je=>{var qt;const Wn=ar(Je,jt=>jt-1,jt=>jt>0);return st.current=Me.current[(qt=Wt[Wn])==null?void 0:qt.value],Bn&&Ue({alignment:ye?"start":"end"}),Wn})},lo=()=>{ot(Je=>{var qt;const Wn=ar(Je,jt=>jt+1,jt=>jtwindow.setTimeout(()=>{var Je;st.current=Me.current[(Je=Wt[vr])==null?void 0:Je.value],Ue({alignment:ye?"end":"start"})},50);os(()=>{Bn&&Fo()},[Bn]);const zo=Je=>{switch(typeof h=="function"&&h(Je),Je.key){case"ArrowUp":{Je.preventDefault(),$e?ye?Hn():lo():(ot(vr),Ne(!0),Fo());break}case"ArrowDown":{Je.preventDefault(),$e?ye?lo():Hn():(ot(vr),Ne(!0),Fo());break}case"Home":{if(!E){Je.preventDefault(),$e||Ne(!0);const qt=Wt.findIndex(Wn=>!Wn.disabled);ot(qt),Bn&&Ue({alignment:ye?"end":"start"})}break}case"End":{if(!E){Je.preventDefault(),$e||Ne(!0);const qt=Wt.map(Wn=>!!Wn.disabled).lastIndexOf(!1);ot(qt),Bn&&Ue({alignment:ye?"end":"start"})}break}case"Escape":{Je.preventDefault(),Ne(!1),ot(-1);break}case" ":{E||(Je.preventDefault(),Wt[it]&&$e?un(Wt[it]):(Ne(!0),ot(vr),Fo()));break}case"Enter":E||Je.preventDefault(),Wt[it]&&$e&&(Je.preventDefault(),un(Wt[it]))}},Ia=Je=>{typeof g=="function"&&g(Je);const qt=Ge.find(Wn=>Wn.value===Le);V&&Wt[it]&&$e&&un(Wt[it]),pn((qt==null?void 0:qt.label)||""),Ne(!1)},xi=Je=>{typeof b=="function"&&b(Je),E&&Ne(!0)},Pa=Je=>{me||(pn(Je.currentTarget.value),M&&Je.currentTarget.value===""&&bt(null),ot(-1),Ne(!0))},yi=()=>{me||(Ne(!$e),Le&&!$e&&ot(vr))};return B.createElement(Tc.Wrapper,i1(Hu({},o),{__staticSelector:"Select"}),B.createElement(el,{opened:Bn,transitionProps:y,shadow:s,withinPortal:ce,portalProps:J,__staticSelector:"Select",onDirectionChange:dt,switchDirectionOnFlip:re,zIndex:A,dropdownPosition:K,positionDependencies:[...Z,Ht],classNames:S,styles:j,unstyled:w,variant:r.variant},B.createElement(el.Target,null,B.createElement("div",{role:"combobox","aria-haspopup":"listbox","aria-owns":Bn?`${r.id}-items`:null,"aria-controls":r.id,"aria-expanded":Bn,onMouseLeave:()=>ot(-1),tabIndex:-1},B.createElement("input",{type:"hidden",name:L,value:Le||"",form:X,disabled:N}),B.createElement(Tc,Hu(i1(Hu(Hu({autoComplete:"off",type:"search"},r),ke),{ref:df(t,Ce),onKeyDown:zo,__staticSelector:"Select",value:Ht,placeholder:z,onChange:Pa,"aria-autocomplete":"list","aria-controls":Bn?`${r.id}-items`:null,"aria-activedescendant":it>=0?`${r.id}-${it}`:null,onMouseDown:yi,onBlur:Ia,onFocus:xi,readOnly:!E||me,disabled:N,"data-mantine-stop-propagation":Bn,name:null,classNames:i1(Hu({},S),{input:Re({[we.input]:!E},S==null?void 0:S.input)})}),yM({theme:Qe,rightSection:U,rightSectionWidth:G,styles:j,size:r.size,shouldClear:M&&!!Bt,onClear:en,error:o.error,clearButtonProps:ve,disabled:N,readOnly:me}))))),B.createElement(el.Dropdown,{component:ee||Rg,maxHeight:I,direction:qe,id:r.id,innerRef:mt,__staticSelector:"Select",classNames:S,styles:j},B.createElement(Ay,{data:Wt,hovered:it,classNames:S,styles:j,isItemSelected:Je=>Je===Le,uuid:r.id,__staticSelector:"Select",onItemHover:ot,onItemSelect:un,itemsRefs:Me,itemComponent:m,size:r.size,nothingFound:D,creatable:kt&&!!Se,createLabel:Se,"aria-label":o.label,unstyled:w,variant:r.variant}))))});qy.displayName="@mantine/core/Select";const hf=()=>{const[e,t,n,r,o,s,l,c,d,f,m,h,g,b,y,x,w,S,j,_,I,E,M,D,R,N,O,T,U,G,q,Y,Q,V,se,ee,le,ae,ce,J,re,A,L,K,ne,z,oe,X,Z,me,ve,de,ke,we,Re,Qe,$e,vt,it,ot,Ce,Me,qe,dt,ye,Ue,st,mt,Pe,Ne,kt,Se,Ve,Ge,Le,bt]=Zo("colors",["base.50","base.100","base.150","base.200","base.250","base.300","base.350","base.400","base.450","base.500","base.550","base.600","base.650","base.700","base.750","base.800","base.850","base.900","base.950","accent.50","accent.100","accent.150","accent.200","accent.250","accent.300","accent.350","accent.400","accent.450","accent.500","accent.550","accent.600","accent.650","accent.700","accent.750","accent.800","accent.850","accent.900","accent.950","baseAlpha.50","baseAlpha.100","baseAlpha.150","baseAlpha.200","baseAlpha.250","baseAlpha.300","baseAlpha.350","baseAlpha.400","baseAlpha.450","baseAlpha.500","baseAlpha.550","baseAlpha.600","baseAlpha.650","baseAlpha.700","baseAlpha.750","baseAlpha.800","baseAlpha.850","baseAlpha.900","baseAlpha.950","accentAlpha.50","accentAlpha.100","accentAlpha.150","accentAlpha.200","accentAlpha.250","accentAlpha.300","accentAlpha.350","accentAlpha.400","accentAlpha.450","accentAlpha.500","accentAlpha.550","accentAlpha.600","accentAlpha.650","accentAlpha.700","accentAlpha.750","accentAlpha.800","accentAlpha.850","accentAlpha.900","accentAlpha.950"]);return{base50:e,base100:t,base150:n,base200:r,base250:o,base300:s,base350:l,base400:c,base450:d,base500:f,base550:m,base600:h,base650:g,base700:b,base750:y,base800:x,base850:w,base900:S,base950:j,accent50:_,accent100:I,accent150:E,accent200:M,accent250:D,accent300:R,accent350:N,accent400:O,accent450:T,accent500:U,accent550:G,accent600:q,accent650:Y,accent700:Q,accent750:V,accent800:se,accent850:ee,accent900:le,accent950:ae,baseAlpha50:ce,baseAlpha100:J,baseAlpha150:re,baseAlpha200:A,baseAlpha250:L,baseAlpha300:K,baseAlpha350:ne,baseAlpha400:z,baseAlpha450:oe,baseAlpha500:X,baseAlpha550:Z,baseAlpha600:me,baseAlpha650:ve,baseAlpha700:de,baseAlpha750:ke,baseAlpha800:we,baseAlpha850:Re,baseAlpha900:Qe,baseAlpha950:$e,accentAlpha50:vt,accentAlpha100:it,accentAlpha150:ot,accentAlpha200:Ce,accentAlpha250:Me,accentAlpha300:qe,accentAlpha350:dt,accentAlpha400:ye,accentAlpha450:Ue,accentAlpha500:st,accentAlpha550:mt,accentAlpha600:Pe,accentAlpha650:Ne,accentAlpha700:kt,accentAlpha750:Se,accentAlpha800:Ve,accentAlpha850:Ge,accentAlpha900:Le,accentAlpha950:bt}},Te=(e,t)=>n=>n==="light"?e:t,EM=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:l,base700:c,base800:d,base900:f,accent200:m,accent300:h,accent400:g,accent500:b,accent600:y}=hf(),{colorMode:x}=ya(),[w]=Zo("shadows",["dark-lg"]),[S,j,_]=Zo("space",[1,2,6]),[I]=Zo("radii",["base"]),[E]=Zo("lineHeights",["base"]);return i.useCallback(()=>({label:{color:Te(c,r)(x)},separatorLabel:{color:Te(s,s)(x),"::after":{borderTopColor:Te(r,c)(x)}},input:{border:"unset",backgroundColor:Te(e,f)(x),borderRadius:I,borderStyle:"solid",borderWidth:"2px",borderColor:Te(n,d)(x),color:Te(f,t)(x),minHeight:"unset",lineHeight:E,height:"auto",paddingRight:0,paddingLeft:0,paddingInlineStart:j,paddingInlineEnd:_,paddingTop:S,paddingBottom:S,fontWeight:600,"&:hover":{borderColor:Te(r,l)(x)},"&:focus":{borderColor:Te(h,y)(x)},"&:is(:focus, :hover)":{borderColor:Te(o,s)(x)},"&:focus-within":{borderColor:Te(m,y)(x)},"&[data-disabled]":{backgroundColor:Te(r,c)(x),color:Te(l,o)(x),cursor:"not-allowed"}},value:{backgroundColor:Te(t,f)(x),color:Te(f,t)(x),button:{color:Te(f,t)(x)},"&:hover":{backgroundColor:Te(r,c)(x),cursor:"pointer"}},dropdown:{backgroundColor:Te(n,d)(x),borderColor:Te(n,d)(x),boxShadow:w},item:{backgroundColor:Te(n,d)(x),color:Te(d,n)(x),padding:6,"&[data-hovered]":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)},"&[data-active]":{backgroundColor:Te(r,c)(x),"&:hover":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)}},"&[data-selected]":{backgroundColor:Te(g,y)(x),color:Te(e,t)(x),fontWeight:600,"&:hover":{backgroundColor:Te(b,b)(x),color:Te("white",e)(x)}},"&[data-disabled]":{color:Te(s,l)(x),cursor:"not-allowed"}},rightSection:{width:32,button:{color:Te(f,t)(x)}}}),[m,h,g,b,y,t,n,r,o,e,s,l,c,d,f,w,x,E,I,S,j,_])},MM=_e((e,t)=>{const{searchable:n=!0,tooltip:r,inputRef:o,onChange:s,label:l,disabled:c,...d}=e,f=te(),[m,h]=i.useState(""),g=i.useCallback(w=>{w.shiftKey&&f(zr(!0))},[f]),b=i.useCallback(w=>{w.shiftKey||f(zr(!1))},[f]),y=i.useCallback(w=>{s&&s(w)},[s]),x=EM();return a.jsx(Ut,{label:r,placement:"top",hasArrow:!0,children:a.jsxs(Gt,{ref:t,isDisabled:c,position:"static","data-testid":`select-${l||e.placeholder}`,children:[l&&a.jsx(ln,{children:l}),a.jsx(qy,{ref:o,disabled:c,searchValue:m,onSearchChange:h,onChange:y,onKeyDown:g,onKeyUp:b,searchable:n,maxDropdownHeight:300,styles:x,...d})]})})});MM.displayName="IAIMantineSearchableSelect";const sn=i.memo(MM),Yee=fe([pe],({changeBoardModal:e})=>{const{isModalOpen:t,imagesToChange:n}=e;return{isModalOpen:t,imagesToChange:n}}),Zee=()=>{const e=te(),[t,n]=i.useState(),{data:r,isFetching:o}=Wd(),{imagesToChange:s,isModalOpen:l}=H(Yee),[c]=BR(),[d]=HR(),{t:f}=W(),m=i.useMemo(()=>{const x=[{label:f("boards.uncategorized"),value:"none"}];return(r??[]).forEach(w=>x.push({label:w.board_name,value:w.board_id})),x},[r,f]),h=i.useCallback(()=>{e(Tw()),e(yx(!1))},[e]),g=i.useCallback(()=>{!s.length||!t||(t==="none"?d({imageDTOs:s}):c({imageDTOs:s,board_id:t}),n(null),e(Tw()))},[c,e,s,d,t]),b=i.useCallback(x=>n(x),[]),y=i.useRef(null);return a.jsx(Zc,{isOpen:l,onClose:h,leastDestructiveRef:y,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:f("boards.changeBoard")}),a.jsx(Mo,{children:a.jsxs($,{sx:{flexDir:"column",gap:4},children:[a.jsxs(be,{children:[f("boards.movingImagesToBoard",{count:s.length}),":"]}),a.jsx(sn,{placeholder:f(o?"boards.loading":"boards.selectBoard"),disabled:o,onChange:b,value:t,data:m})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:y,onClick:h,children:f("boards.cancel")}),a.jsx(Xe,{colorScheme:"accent",onClick:g,ml:3,children:f("boards.move")})]})]})})})},Jee=i.memo(Zee),OM=e=>{const{label:t,isDisabled:n=!1,width:r="auto",formControlProps:o,formLabelProps:s,tooltip:l,helperText:c,...d}=e;return a.jsx(Ut,{label:l,hasArrow:!0,placement:"top",isDisabled:!l,children:a.jsx(Gt,{isDisabled:n,width:r,alignItems:"center",...o,children:a.jsxs($,{sx:{flexDir:"column",w:"full"},children:[a.jsxs($,{sx:{alignItems:"center",w:"full"},children:[t&&a.jsx(ln,{my:1,flexGrow:1,sx:{cursor:n?"not-allowed":"pointer",...s==null?void 0:s.sx,pe:4},...s,children:t}),a.jsx(Iy,{...d})]}),c&&a.jsx(N3,{children:a.jsx(be,{variant:"subtext",children:c})})]})})})};OM.displayName="IAISwitch";const _n=i.memo(OM),ete=e=>{const{t}=W(),{imageUsage:n,topMessage:r=t("gallery.currentlyInUse"),bottomMessage:o=t("gallery.featuresWillReset")}=e;return!n||!Jo(n)?null:a.jsxs(a.Fragment,{children:[a.jsx(be,{children:r}),a.jsxs(cg,{sx:{paddingInlineStart:6},children:[n.isInitialImage&&a.jsx(ts,{children:t("common.img2img")}),n.isCanvasImage&&a.jsx(ts,{children:t("common.unifiedCanvas")}),n.isControlImage&&a.jsx(ts,{children:t("common.controlNet")}),n.isNodesImage&&a.jsx(ts,{children:t("common.nodeEditor")})]}),a.jsx(be,{children:o})]})},DM=i.memo(ete),tte=fe([pe,WR],(e,t)=>{const{system:n,config:r,deleteImageModal:o}=e,{shouldConfirmOnDelete:s}=n,{canRestoreDeletedImagesFromBin:l}=r,{imagesToDelete:c,isModalOpen:d}=o,f=(c??[]).map(({image_name:h})=>wI(e,h)),m={isInitialImage:Jo(f,h=>h.isInitialImage),isCanvasImage:Jo(f,h=>h.isCanvasImage),isNodesImage:Jo(f,h=>h.isNodesImage),isControlImage:Jo(f,h=>h.isControlImage)};return{shouldConfirmOnDelete:s,canRestoreDeletedImagesFromBin:l,imagesToDelete:c,imagesUsage:t,isModalOpen:d,imageUsageSummary:m}}),nte=()=>{const e=te(),{t}=W(),{shouldConfirmOnDelete:n,canRestoreDeletedImagesFromBin:r,imagesToDelete:o,imagesUsage:s,isModalOpen:l,imageUsageSummary:c}=H(tte),d=i.useCallback(g=>e(SI(!g.target.checked)),[e]),f=i.useCallback(()=>{e(Nw()),e(VR(!1))},[e]),m=i.useCallback(()=>{!o.length||!s.length||(e(Nw()),e(UR({imageDTOs:o,imagesUsage:s})))},[e,o,s]),h=i.useRef(null);return a.jsx(Zc,{isOpen:l,onClose:f,leastDestructiveRef:h,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:t("gallery.deleteImage")}),a.jsx(Mo,{children:a.jsxs($,{direction:"column",gap:3,children:[a.jsx(DM,{imageUsage:c}),a.jsx(On,{}),a.jsx(be,{children:t(r?"gallery.deleteImageBin":"gallery.deleteImagePermanent")}),a.jsx(be,{children:t("common.areYouSure")}),a.jsx(_n,{label:t("common.dontAskMeAgain"),isChecked:!n,onChange:d})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:h,onClick:f,children:t("boards.cancel")}),a.jsx(Xe,{colorScheme:"error",onClick:m,ml:3,children:t("controlnet.delete")})]})]})})})},rte=i.memo(nte),RM=_e((e,t)=>{const{role:n,tooltip:r="",tooltipProps:o,isChecked:s,...l}=e;return a.jsx(Ut,{label:r,hasArrow:!0,...o,...o!=null&&o.placement?{placement:o.placement}:{placement:"top"},children:a.jsx(rs,{ref:t,role:n,colorScheme:s?"accent":"base","data-testid":r,...l})})});RM.displayName="IAIIconButton";const Fe=i.memo(RM);var AM={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},bj=B.createContext&&B.createContext(AM),tl=globalThis&&globalThis.__assign||function(){return tl=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{const t=H(l=>l.config.disabledTabs),n=H(l=>l.config.disabledFeatures),r=H(l=>l.config.disabledSDFeatures),o=i.useMemo(()=>n.includes(e)||r.includes(e)||t.includes(e),[n,r,t,e]),s=i.useMemo(()=>!(n.includes(e)||r.includes(e)||t.includes(e)),[n,r,t,e]);return{isFeatureDisabled:o,isFeatureEnabled:s}};function Qte(e){const{title:t,hotkey:n,description:r}=e;return a.jsxs(sl,{sx:{gridTemplateColumns:"auto max-content",justifyContent:"space-between",alignItems:"center"},children:[a.jsxs(sl,{children:[a.jsx(be,{fontWeight:600,children:t}),r&&a.jsx(be,{sx:{fontSize:"sm"},variant:"subtext",children:r})]}),a.jsx(Ie,{sx:{fontSize:"sm",fontWeight:600,px:2,py:1},children:n})]})}function Yte({children:e}){const{isOpen:t,onOpen:n,onClose:r}=sr(),{t:o}=W(),s=[{title:o("hotkeys.invoke.title"),desc:o("hotkeys.invoke.desc"),hotkey:"Ctrl+Enter"},{title:o("hotkeys.cancel.title"),desc:o("hotkeys.cancel.desc"),hotkey:"Shift+X"},{title:o("hotkeys.focusPrompt.title"),desc:o("hotkeys.focusPrompt.desc"),hotkey:"Alt+A"},{title:o("hotkeys.toggleOptions.title"),desc:o("hotkeys.toggleOptions.desc"),hotkey:"O"},{title:o("hotkeys.toggleGallery.title"),desc:o("hotkeys.toggleGallery.desc"),hotkey:"G"},{title:o("hotkeys.maximizeWorkSpace.title"),desc:o("hotkeys.maximizeWorkSpace.desc"),hotkey:"F"},{title:o("hotkeys.changeTabs.title"),desc:o("hotkeys.changeTabs.desc"),hotkey:"1-5"}],l=[{title:o("hotkeys.setPrompt.title"),desc:o("hotkeys.setPrompt.desc"),hotkey:"P"},{title:o("hotkeys.setSeed.title"),desc:o("hotkeys.setSeed.desc"),hotkey:"S"},{title:o("hotkeys.setParameters.title"),desc:o("hotkeys.setParameters.desc"),hotkey:"A"},{title:o("hotkeys.upscale.title"),desc:o("hotkeys.upscale.desc"),hotkey:"Shift+U"},{title:o("hotkeys.showInfo.title"),desc:o("hotkeys.showInfo.desc"),hotkey:"I"},{title:o("hotkeys.sendToImageToImage.title"),desc:o("hotkeys.sendToImageToImage.desc"),hotkey:"Shift+I"},{title:o("hotkeys.deleteImage.title"),desc:o("hotkeys.deleteImage.desc"),hotkey:"Del"},{title:o("hotkeys.closePanels.title"),desc:o("hotkeys.closePanels.desc"),hotkey:"Esc"}],c=[{title:o("hotkeys.previousImage.title"),desc:o("hotkeys.previousImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextImage.title"),desc:o("hotkeys.nextImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.increaseGalleryThumbSize.title"),desc:o("hotkeys.increaseGalleryThumbSize.desc"),hotkey:"Shift+Up"},{title:o("hotkeys.decreaseGalleryThumbSize.title"),desc:o("hotkeys.decreaseGalleryThumbSize.desc"),hotkey:"Shift+Down"}],d=[{title:o("hotkeys.selectBrush.title"),desc:o("hotkeys.selectBrush.desc"),hotkey:"B"},{title:o("hotkeys.selectEraser.title"),desc:o("hotkeys.selectEraser.desc"),hotkey:"E"},{title:o("hotkeys.decreaseBrushSize.title"),desc:o("hotkeys.decreaseBrushSize.desc"),hotkey:"["},{title:o("hotkeys.increaseBrushSize.title"),desc:o("hotkeys.increaseBrushSize.desc"),hotkey:"]"},{title:o("hotkeys.decreaseBrushOpacity.title"),desc:o("hotkeys.decreaseBrushOpacity.desc"),hotkey:"Shift + ["},{title:o("hotkeys.increaseBrushOpacity.title"),desc:o("hotkeys.increaseBrushOpacity.desc"),hotkey:"Shift + ]"},{title:o("hotkeys.moveTool.title"),desc:o("hotkeys.moveTool.desc"),hotkey:"V"},{title:o("hotkeys.fillBoundingBox.title"),desc:o("hotkeys.fillBoundingBox.desc"),hotkey:"Shift + F"},{title:o("hotkeys.eraseBoundingBox.title"),desc:o("hotkeys.eraseBoundingBox.desc"),hotkey:"Delete / Backspace"},{title:o("hotkeys.colorPicker.title"),desc:o("hotkeys.colorPicker.desc"),hotkey:"C"},{title:o("hotkeys.toggleSnap.title"),desc:o("hotkeys.toggleSnap.desc"),hotkey:"N"},{title:o("hotkeys.quickToggleMove.title"),desc:o("hotkeys.quickToggleMove.desc"),hotkey:"Hold Space"},{title:o("hotkeys.toggleLayer.title"),desc:o("hotkeys.toggleLayer.desc"),hotkey:"Q"},{title:o("hotkeys.clearMask.title"),desc:o("hotkeys.clearMask.desc"),hotkey:"Shift+C"},{title:o("hotkeys.hideMask.title"),desc:o("hotkeys.hideMask.desc"),hotkey:"H"},{title:o("hotkeys.showHideBoundingBox.title"),desc:o("hotkeys.showHideBoundingBox.desc"),hotkey:"Shift+H"},{title:o("hotkeys.mergeVisible.title"),desc:o("hotkeys.mergeVisible.desc"),hotkey:"Shift+M"},{title:o("hotkeys.saveToGallery.title"),desc:o("hotkeys.saveToGallery.desc"),hotkey:"Shift+S"},{title:o("hotkeys.copyToClipboard.title"),desc:o("hotkeys.copyToClipboard.desc"),hotkey:"Ctrl+C"},{title:o("hotkeys.downloadImage.title"),desc:o("hotkeys.downloadImage.desc"),hotkey:"Shift+D"},{title:o("hotkeys.undoStroke.title"),desc:o("hotkeys.undoStroke.desc"),hotkey:"Ctrl+Z"},{title:o("hotkeys.redoStroke.title"),desc:o("hotkeys.redoStroke.desc"),hotkey:"Ctrl+Shift+Z, Ctrl+Y"},{title:o("hotkeys.resetView.title"),desc:o("hotkeys.resetView.desc"),hotkey:"R"},{title:o("hotkeys.previousStagingImage.title"),desc:o("hotkeys.previousStagingImage.desc"),hotkey:"Arrow Left"},{title:o("hotkeys.nextStagingImage.title"),desc:o("hotkeys.nextStagingImage.desc"),hotkey:"Arrow Right"},{title:o("hotkeys.acceptStagingImage.title"),desc:o("hotkeys.acceptStagingImage.desc"),hotkey:"Enter"}],f=[{title:o("hotkeys.addNodes.title"),desc:o("hotkeys.addNodes.desc"),hotkey:"Shift + A / Space"}],m=h=>a.jsx($,{flexDir:"column",gap:4,children:h.map((g,b)=>a.jsxs($,{flexDir:"column",px:2,gap:4,children:[a.jsx(Qte,{title:g.title,description:g.desc,hotkey:g.hotkey}),b{const{data:t}=GR(),n=i.useRef(null),r=YM(n);return a.jsxs($,{alignItems:"center",gap:5,ps:1,ref:n,children:[a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",sx:{w:"32px",h:"32px",minW:"32px",minH:"32px",userSelect:"none"}}),a.jsxs($,{sx:{gap:3,alignItems:"center"},children:[a.jsxs(be,{sx:{fontSize:"xl",userSelect:"none"},children:["invoke ",a.jsx("strong",{children:"ai"})]}),a.jsx(hr,{children:e&&r&&t&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsx(be,{sx:{fontWeight:600,marginTop:1,color:"base.300",fontSize:14},variant:"subtext",children:t.version})},"statusText")})]})]})},sne=i.memo(one),ZM=_e((e,t)=>{const{tooltip:n,formControlProps:r,inputRef:o,label:s,disabled:l,required:c,...d}=e,f=EM();return a.jsx(Ut,{label:n,placement:"top",hasArrow:!0,children:a.jsxs(Gt,{ref:t,isRequired:c,isDisabled:l,position:"static","data-testid":`select-${s||e.placeholder}`,...r,children:[a.jsx(ln,{children:s}),a.jsx(qy,{disabled:l,ref:o,styles:f,...d})]})})});ZM.displayName="IAIMantineSelect";const yn=i.memo(ZM),JM=()=>i.useCallback(()=>{KR(qR),localStorage.clear()},[]),e8=fe(pe,({system:e})=>e.language),ane={ar:wt.t("common.langArabic",{lng:"ar"}),nl:wt.t("common.langDutch",{lng:"nl"}),en:wt.t("common.langEnglish",{lng:"en"}),fr:wt.t("common.langFrench",{lng:"fr"}),de:wt.t("common.langGerman",{lng:"de"}),he:wt.t("common.langHebrew",{lng:"he"}),it:wt.t("common.langItalian",{lng:"it"}),ja:wt.t("common.langJapanese",{lng:"ja"}),ko:wt.t("common.langKorean",{lng:"ko"}),pl:wt.t("common.langPolish",{lng:"pl"}),pt_BR:wt.t("common.langBrPortuguese",{lng:"pt_BR"}),pt:wt.t("common.langPortuguese",{lng:"pt"}),ru:wt.t("common.langRussian",{lng:"ru"}),zh_CN:wt.t("common.langSimplifiedChinese",{lng:"zh_CN"}),es:wt.t("common.langSpanish",{lng:"es"}),uk:wt.t("common.langUkranian",{lng:"ua"})},lne={CONNECTED:"common.statusConnected",DISCONNECTED:"common.statusDisconnected",PROCESSING:"common.statusProcessing",ERROR:"common.statusError",LOADING_MODEL:"common.statusLoadingModel"};function qo(e){const{t}=W(),{label:n,textProps:r,useBadge:o=!1,badgeLabel:s=t("settings.experimental"),badgeProps:l,...c}=e;return a.jsxs($,{justifyContent:"space-between",py:1,children:[a.jsxs($,{gap:2,alignItems:"center",children:[a.jsx(be,{sx:{fontSize:14,_dark:{color:"base.300"}},...r,children:n}),o&&a.jsx(Sa,{size:"xs",sx:{px:2,color:"base.700",bg:"accent.200",_dark:{bg:"accent.500",color:"base.200"}},...l,children:s})]}),a.jsx(_n,{...c})]})}const ine=e=>a.jsx($,{sx:{flexDirection:"column",gap:2,p:4,borderRadius:"base",bg:"base.100",_dark:{bg:"base.900"}},children:e.children}),Ji=i.memo(ine);function cne(){const{t:e}=W(),t=te(),{data:n}=XR(void 0,{refetchOnMountOrArgChange:!0}),[r,{isLoading:o}]=QR(),{data:s}=Ls(),l=s&&(s.queue.in_progress>0||s.queue.pending>0),c=i.useCallback(()=>{l||r().unwrap().then(d=>{t(kI()),t(jI()),t(lt({title:e("settings.intermediatesCleared",{count:d}),status:"info"}))}).catch(()=>{t(lt({title:e("settings.intermediatesClearedFailed"),status:"error"}))})},[e,r,t,l]);return a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:e("settings.clearIntermediates")}),a.jsx(Xe,{tooltip:l?e("settings.clearIntermediatesDisabled"):void 0,colorScheme:"warning",onClick:c,isLoading:o,isDisabled:!n||l,children:e("settings.clearIntermediatesWithCount",{count:n??0})}),a.jsx(be,{fontWeight:"bold",children:e("settings.clearIntermediatesDesc1")}),a.jsx(be,{variant:"subtext",children:e("settings.clearIntermediatesDesc2")}),a.jsx(be,{variant:"subtext",children:e("settings.clearIntermediatesDesc3")})]})}const une=()=>{const{base50:e,base100:t,base200:n,base300:r,base400:o,base500:s,base600:l,base700:c,base800:d,base900:f,accent200:m,accent300:h,accent400:g,accent500:b,accent600:y}=hf(),{colorMode:x}=ya(),[w]=Zo("shadows",["dark-lg"]);return i.useCallback(()=>({label:{color:Te(c,r)(x)},separatorLabel:{color:Te(s,s)(x),"::after":{borderTopColor:Te(r,c)(x)}},searchInput:{":placeholder":{color:Te(r,c)(x)}},input:{backgroundColor:Te(e,f)(x),borderWidth:"2px",borderColor:Te(n,d)(x),color:Te(f,t)(x),paddingRight:24,fontWeight:600,"&:hover":{borderColor:Te(r,l)(x)},"&:focus":{borderColor:Te(h,y)(x)},"&:is(:focus, :hover)":{borderColor:Te(o,s)(x)},"&:focus-within":{borderColor:Te(m,y)(x)},"&[data-disabled]":{backgroundColor:Te(r,c)(x),color:Te(l,o)(x),cursor:"not-allowed"}},value:{backgroundColor:Te(n,d)(x),color:Te(f,t)(x),button:{color:Te(f,t)(x)},"&:hover":{backgroundColor:Te(r,c)(x),cursor:"pointer"}},dropdown:{backgroundColor:Te(n,d)(x),borderColor:Te(n,d)(x),boxShadow:w},item:{backgroundColor:Te(n,d)(x),color:Te(d,n)(x),padding:6,"&[data-hovered]":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)},"&[data-active]":{backgroundColor:Te(r,c)(x),"&:hover":{color:Te(f,t)(x),backgroundColor:Te(r,c)(x)}},"&[data-selected]":{backgroundColor:Te(g,y)(x),color:Te(e,t)(x),fontWeight:600,"&:hover":{backgroundColor:Te(b,b)(x),color:Te("white",e)(x)}},"&[data-disabled]":{color:Te(s,l)(x),cursor:"not-allowed"}},rightSection:{width:24,padding:20,button:{color:Te(f,t)(x)}}}),[m,h,g,b,y,t,n,r,o,e,s,l,c,d,f,w,x])},t8=_e((e,t)=>{const{searchable:n=!0,tooltip:r,inputRef:o,label:s,disabled:l,...c}=e,d=te(),f=i.useCallback(g=>{g.shiftKey&&d(zr(!0))},[d]),m=i.useCallback(g=>{g.shiftKey||d(zr(!1))},[d]),h=une();return a.jsx(Ut,{label:r,placement:"top",hasArrow:!0,isOpen:!0,children:a.jsxs(Gt,{ref:t,isDisabled:l,position:"static",children:[s&&a.jsx(ln,{children:s}),a.jsx(SM,{ref:o,disabled:l,onKeyDown:f,onKeyUp:m,searchable:n,maxDropdownHeight:300,styles:h,...c})]})})});t8.displayName="IAIMantineMultiSelect";const dne=i.memo(t8),fne=Hr(Gh,(e,t)=>({value:t,label:e})).sort((e,t)=>e.label.localeCompare(t.label));function pne(){const e=te(),{t}=W(),n=H(o=>o.ui.favoriteSchedulers),r=i.useCallback(o=>{e(YR(o))},[e]);return a.jsx(dne,{label:t("settings.favoriteSchedulers"),value:n,data:fne,onChange:r,clearable:!0,searchable:!0,maxSelectedValues:99,placeholder:t("settings.favoriteSchedulersPlaceholder")})}const mne=fe([pe],({system:e,ui:t})=>{const{shouldConfirmOnDelete:n,enableImageDebugging:r,consoleLogLevel:o,shouldLogToConsole:s,shouldAntialiasProgressImage:l,shouldUseNSFWChecker:c,shouldUseWatermarker:d,shouldEnableInformationalPopovers:f}=e,{shouldUseSliders:m,shouldShowProgressInViewer:h,shouldAutoChangeDimensions:g}=t;return{shouldConfirmOnDelete:n,enableImageDebugging:r,shouldUseSliders:m,shouldShowProgressInViewer:h,consoleLogLevel:o,shouldLogToConsole:s,shouldAntialiasProgressImage:l,shouldUseNSFWChecker:c,shouldUseWatermarker:d,shouldAutoChangeDimensions:g,shouldEnableInformationalPopovers:f}}),hne=({children:e,config:t})=>{const n=te(),{t:r}=W(),[o,s]=i.useState(3),l=(t==null?void 0:t.shouldShowDeveloperSettings)??!0,c=(t==null?void 0:t.shouldShowResetWebUiText)??!0,d=(t==null?void 0:t.shouldShowClearIntermediates)??!0,f=(t==null?void 0:t.shouldShowLocalizationToggle)??!0;i.useEffect(()=>{l||n($w(!1))},[l,n]);const{isNSFWCheckerAvailable:m,isWatermarkerAvailable:h}=_I(void 0,{selectFromResult:({data:X})=>({isNSFWCheckerAvailable:(X==null?void 0:X.nsfw_methods.includes("nsfw_checker"))??!1,isWatermarkerAvailable:(X==null?void 0:X.watermarking_methods.includes("invisible_watermark"))??!1})}),{isOpen:g,onOpen:b,onClose:y}=sr(),{isOpen:x,onOpen:w,onClose:S}=sr(),{shouldConfirmOnDelete:j,enableImageDebugging:_,shouldUseSliders:I,shouldShowProgressInViewer:E,consoleLogLevel:M,shouldLogToConsole:D,shouldAntialiasProgressImage:R,shouldUseNSFWChecker:N,shouldUseWatermarker:O,shouldAutoChangeDimensions:T,shouldEnableInformationalPopovers:U}=H(mne),G=JM(),q=i.useCallback(()=>{G(),y(),w(),setInterval(()=>s(X=>X-1),1e3)},[G,y,w]);i.useEffect(()=>{o<=0&&window.location.reload()},[o]);const Y=i.useCallback(X=>{n(ZR(X))},[n]),Q=i.useCallback(X=>{n(JR(X))},[n]),V=i.useCallback(X=>{n($w(X.target.checked))},[n]),{colorMode:se,toggleColorMode:ee}=ya(),le=Mt("localization").isFeatureEnabled,ae=H(e8),ce=i.useCallback(X=>{n(SI(X.target.checked))},[n]),J=i.useCallback(X=>{n(eA(X.target.checked))},[n]),re=i.useCallback(X=>{n(tA(X.target.checked))},[n]),A=i.useCallback(X=>{n(nA(X.target.checked))},[n]),L=i.useCallback(X=>{n(II(X.target.checked))},[n]),K=i.useCallback(X=>{n(rA(X.target.checked))},[n]),ne=i.useCallback(X=>{n(oA(X.target.checked))},[n]),z=i.useCallback(X=>{n(sA(X.target.checked))},[n]),oe=i.useCallback(X=>{n(aA(X.target.checked))},[n]);return a.jsxs(a.Fragment,{children:[i.cloneElement(e,{onClick:b}),a.jsxs(ni,{isOpen:g,onClose:y,size:"2xl",isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{children:[a.jsx(Po,{bg:"none",children:r("common.settingsLabel")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsxs($,{sx:{gap:4,flexDirection:"column"},children:[a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.general")}),a.jsx(qo,{label:r("settings.confirmOnDelete"),isChecked:j,onChange:ce})]}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.generation")}),a.jsx(pne,{}),a.jsx(qo,{label:r("settings.enableNSFWChecker"),isDisabled:!m,isChecked:N,onChange:J}),a.jsx(qo,{label:r("settings.enableInvisibleWatermark"),isDisabled:!h,isChecked:O,onChange:re})]}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.ui")}),a.jsx(qo,{label:r("common.darkMode"),isChecked:se==="dark",onChange:ee}),a.jsx(qo,{label:r("settings.useSlidersForAll"),isChecked:I,onChange:A}),a.jsx(qo,{label:r("settings.showProgressInViewer"),isChecked:E,onChange:L}),a.jsx(qo,{label:r("settings.antialiasProgressImages"),isChecked:R,onChange:K}),a.jsx(qo,{label:r("settings.autoChangeDimensions"),isChecked:T,onChange:ne}),f&&a.jsx(yn,{disabled:!le,label:r("common.languagePickerLabel"),value:ae,data:Object.entries(ane).map(([X,Z])=>({value:X,label:Z})),onChange:Q}),a.jsx(qo,{label:r("settings.enableInformationalPopovers"),isChecked:U,onChange:z})]}),l&&a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.developer")}),a.jsx(qo,{label:r("settings.shouldLogToConsole"),isChecked:D,onChange:V}),a.jsx(yn,{disabled:!D,label:r("settings.consoleLogLevel"),onChange:Y,value:M,data:lA.concat()}),a.jsx(qo,{label:r("settings.enableImageDebugging"),isChecked:_,onChange:oe})]}),d&&a.jsx(cne,{}),a.jsxs(Ji,{children:[a.jsx(or,{size:"sm",children:r("settings.resetWebUI")}),a.jsx(Xe,{colorScheme:"error",onClick:q,children:r("settings.resetWebUI")}),c&&a.jsxs(a.Fragment,{children:[a.jsx(be,{variant:"subtext",children:r("settings.resetWebUIDesc1")}),a.jsx(be,{variant:"subtext",children:r("settings.resetWebUIDesc2")})]})]})]})}),a.jsx(ls,{children:a.jsx(Xe,{onClick:y,children:r("common.close")})})]})]}),a.jsxs(ni,{closeOnOverlayClick:!1,isOpen:x,onClose:S,isCentered:!0,closeOnEsc:!1,children:[a.jsx(Eo,{backdropFilter:"blur(40px)"}),a.jsxs(ri,{children:[a.jsx(Po,{}),a.jsx(Mo,{children:a.jsx($,{justifyContent:"center",children:a.jsx(be,{fontSize:"lg",children:a.jsxs(be,{children:[r("settings.resetComplete")," ",r("settings.reloadingIn")," ",o,"..."]})})})}),a.jsx(ls,{})]})]})]})},gne=i.memo(hne),vne=fe(pe,({system:e})=>{const{isConnected:t,status:n}=e;return{isConnected:t,statusTranslationKey:lne[n]}}),wj={ok:"green.400",working:"yellow.400",error:"red.400"},Sj={ok:"green.600",working:"yellow.500",error:"red.500"},bne=()=>{const{isConnected:e,statusTranslationKey:t}=H(vne),{t:n}=W(),r=i.useRef(null),{data:o}=Ls(),s=i.useMemo(()=>e?o!=null&&o.queue.in_progress?"working":"ok":"error",[o==null?void 0:o.queue.in_progress,e]),l=YM(r);return a.jsxs($,{ref:r,h:"full",px:2,alignItems:"center",gap:5,children:[a.jsx(hr,{children:l&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.15}},exit:{opacity:0,transition:{delay:.8}},children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:"600",pb:"1px",userSelect:"none",color:Sj[s],_dark:{color:wj[s]}},children:n(t)})},"statusText")}),a.jsx(An,{as:bte,sx:{boxSize:"0.5rem",color:Sj[s],_dark:{color:wj[s]}}})]})},xne=i.memo(bne),Yy=e=>{const t=H(n=>n.ui.globalMenuCloseTrigger);i.useEffect(()=>{e()},[t,e])},yne=()=>{const{t:e}=W(),{isOpen:t,onOpen:n,onClose:r}=sr();Yy(r);const o=Mt("bugLink").isFeatureEnabled,s=Mt("discordLink").isFeatureEnabled,l=Mt("githubLink").isFeatureEnabled,c="http://github.com/invoke-ai/InvokeAI",d="https://discord.gg/ZmtBAhwWhy";return a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(sne,{}),a.jsx(Wr,{}),a.jsx(xne,{}),a.jsxs(of,{isOpen:t,onOpen:n,onClose:r,children:[a.jsx(sf,{as:Fe,variant:"link","aria-label":e("accessibility.menu"),icon:a.jsx(mte,{}),sx:{boxSize:8}}),a.jsxs(al,{motionProps:Yl,children:[a.jsxs(_d,{title:e("common.communityLabel"),children:[l&&a.jsx(At,{as:"a",href:c,target:"_blank",icon:a.jsx(lte,{}),children:e("common.githubLabel")}),o&&a.jsx(At,{as:"a",href:`${c}/issues`,target:"_blank",icon:a.jsx(hte,{}),children:e("common.reportBugLabel")}),s&&a.jsx(At,{as:"a",href:d,target:"_blank",icon:a.jsx(ate,{}),children:e("common.discordLabel")})]}),a.jsxs(_d,{title:e("common.settingsLabel"),children:[a.jsx(Yte,{children:a.jsx(At,{as:"button",icon:a.jsx(Nte,{}),children:e("common.hotkeysLabel")})}),a.jsx(gne,{children:a.jsx(At,{as:"button",icon:a.jsx(FM,{}),children:e("common.settingsLabel")})})]})]})]})]})},Cne=i.memo(yne),wne=e=>{const{boardToDelete:t,setBoardToDelete:n}=e,{t:r}=W(),o=H(j=>j.config.canRestoreDeletedImagesFromBin),{currentData:s,isFetching:l}=iA((t==null?void 0:t.board_id)??Br),c=i.useMemo(()=>fe([pe],j=>{const _=(s??[]).map(E=>wI(j,E));return{imageUsageSummary:{isInitialImage:Jo(_,E=>E.isInitialImage),isCanvasImage:Jo(_,E=>E.isCanvasImage),isNodesImage:Jo(_,E=>E.isNodesImage),isControlImage:Jo(_,E=>E.isControlImage)}}}),[s]),[d,{isLoading:f}]=cA(),[m,{isLoading:h}]=uA(),{imageUsageSummary:g}=H(c),b=i.useCallback(()=>{t&&(d(t.board_id),n(void 0))},[t,d,n]),y=i.useCallback(()=>{t&&(m(t.board_id),n(void 0))},[t,m,n]),x=i.useCallback(()=>{n(void 0)},[n]),w=i.useRef(null),S=i.useMemo(()=>h||f||l,[h,f,l]);return t?a.jsx(Zc,{isOpen:!!t,onClose:x,leastDestructiveRef:w,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsxs(Po,{fontSize:"lg",fontWeight:"bold",children:[r("controlnet.delete")," ",t.board_name]}),a.jsx(Mo,{children:a.jsxs($,{direction:"column",gap:3,children:[l?a.jsx(wg,{children:a.jsx($,{sx:{w:"full",h:32}})}):a.jsx(DM,{imageUsage:g,topMessage:r("boards.topMessage"),bottomMessage:r("boards.bottomMessage")}),a.jsx(be,{children:r("boards.deletedBoardsCannotbeRestored")}),a.jsx(be,{children:r(o?"gallery.deleteImageBin":"gallery.deleteImagePermanent")})]})}),a.jsx(ls,{children:a.jsxs($,{sx:{justifyContent:"space-between",width:"full",gap:2},children:[a.jsx(Xe,{ref:w,onClick:x,children:r("boards.cancel")}),a.jsx(Xe,{colorScheme:"warning",isLoading:S,onClick:b,children:r("boards.deleteBoardOnly")}),a.jsx(Xe,{colorScheme:"error",isLoading:S,onClick:y,children:r("boards.deleteBoardAndImages")})]})})]})})}):null},Sne=i.memo(wne);/*! + * OverlayScrollbars + * Version: 2.4.5 + * + * Copyright (c) Rene Haas | KingSora. + * https://github.com/KingSora + * + * Released under the MIT license. + */const Qo=(e,t)=>{const{o:n,u:r,_:o}=e;let s=n,l;const c=(m,h)=>{const g=s,b=m,y=h||(r?!r(g,b):g!==b);return(y||o)&&(s=b,l=g),[s,y,l]};return[t?m=>c(t(s,l),m):c,m=>[s,!!m,l]]},Zy=typeof window<"u",n8=Zy&&Node.ELEMENT_NODE,{toString:kne,hasOwnProperty:c1}=Object.prototype,jne=/^\[object (.+)\]$/,bl=e=>e===void 0,Lg=e=>e===null,_ne=e=>bl(e)||Lg(e)?`${e}`:kne.call(e).replace(jne,"$1").toLowerCase(),Ps=e=>typeof e=="number",vf=e=>typeof e=="string",r8=e=>typeof e=="boolean",Os=e=>typeof e=="function",Do=e=>Array.isArray(e),Md=e=>typeof e=="object"&&!Do(e)&&!Lg(e),Fg=e=>{const t=!!e&&e.length,n=Ps(t)&&t>-1&&t%1==0;return Do(e)||!Os(e)&&n?t>0&&Md(e)?t-1 in e:!0:!1},jh=e=>{if(!e||!Md(e)||_ne(e)!=="object")return!1;let t;const n="constructor",r=e[n],o=r&&r.prototype,s=c1.call(e,n),l=o&&c1.call(o,"isPrototypeOf");if(r&&!s&&!l)return!1;for(t in e);return bl(t)||c1.call(e,t)},id=e=>{const t=HTMLElement;return e?t?e instanceof t:e.nodeType===n8:!1},zg=e=>{const t=Element;return e?t?e instanceof t:e.nodeType===n8:!1};function Qt(e,t){if(Fg(e))for(let n=0;nt(e[n],n,e));return e}const Bg=(e,t)=>e.indexOf(t)>=0,Xa=(e,t)=>e.concat(t),Xt=(e,t,n)=>(!n&&!vf(t)&&Fg(t)?Array.prototype.push.apply(e,t):e.push(t),e),su=e=>{const t=Array.from,n=[];return t&&e?t(e):(e instanceof Set?e.forEach(r=>{Xt(n,r)}):Qt(e,r=>{Xt(n,r)}),n)},_h=e=>!!e&&!e.length,kj=e=>su(new Set(e)),Ro=(e,t,n)=>{Qt(e,o=>o&&o.apply(void 0,t||[])),!n&&(e.length=0)},Hg=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),fa=e=>e?Object.keys(e):[],Vt=(e,t,n,r,o,s,l)=>{const c=[t,n,r,o,s,l];return(typeof e!="object"||Lg(e))&&!Os(e)&&(e={}),Qt(c,d=>{Qt(d,(f,m)=>{const h=d[m];if(e===h)return!0;const g=Do(h);if(h&&jh(h)){const b=e[m];let y=b;g&&!Do(b)?y=[]:!g&&!jh(b)&&(y={}),e[m]=Vt(y,h)}else e[m]=g?h.slice():h})}),e},o8=(e,t)=>Qt(Vt({},e),(n,r,o)=>{n===void 0?delete o[r]:t&&n&&jh(n)&&(o[r]=o8(n,t))}),Jy=e=>{for(const t in e)return!1;return!0},Cr=(e,t,n)=>{if(bl(n))return e?e.getAttribute(t):null;e&&e.setAttribute(t,n)},s8=(e,t)=>new Set((Cr(e,t)||"").split(" ")),Ar=(e,t)=>{e&&e.removeAttribute(t)},ql=(e,t,n,r)=>{if(n){const o=s8(e,t);o[r?"add":"delete"](n);const s=su(o).join(" ").trim();Cr(e,t,s)}},Ine=(e,t,n)=>s8(e,t).has(n),Nb=Zy&&Element.prototype,a8=(e,t)=>{const n=[],r=t?zg(t)&&t:document;return r?Xt(n,r.querySelectorAll(e)):n},Pne=(e,t)=>{const n=t?zg(t)&&t:document;return n?n.querySelector(e):null},Ih=(e,t)=>zg(e)?(Nb.matches||Nb.msMatchesSelector).call(e,t):!1,$b=e=>e?su(e.childNodes):[],sa=e=>e&&e.parentElement,ac=(e,t)=>{if(zg(e)){const n=Nb.closest;if(n)return n.call(e,t);do{if(Ih(e,t))return e;e=sa(e)}while(e)}},Ene=(e,t,n)=>{const r=ac(e,t),o=e&&Pne(n,r),s=ac(o,t)===r;return r&&o?r===e||o===e||s&&ac(ac(e,n),t)!==r:!1},ko=()=>{},aa=e=>{if(Fg(e))Qt(su(e),t=>aa(t));else if(e){const t=sa(e);t&&t.removeChild(e)}},e2=(e,t,n)=>{if(n&&e){let r=t,o;return Fg(n)?(o=document.createDocumentFragment(),Qt(n,s=>{s===r&&(r=s.previousSibling),o.appendChild(s)})):o=n,t&&(r?r!==t&&(r=r.nextSibling):r=e.firstChild),e.insertBefore(o,r||null),()=>aa(n)}return ko},xo=(e,t)=>e2(e,null,t),Mne=(e,t)=>e2(sa(e),e,t),jj=(e,t)=>e2(sa(e),e&&e.nextSibling,t),Xl=e=>{const t=document.createElement("div");return Cr(t,"class",e),t},l8=e=>{const t=Xl();return t.innerHTML=e.trim(),Qt($b(t),n=>aa(n))},Ur=Zy?window:{},cd=Math.max,One=Math.min,Od=Math.round,i8=Ur.cancelAnimationFrame,c8=Ur.requestAnimationFrame,Ph=Ur.setTimeout,Lb=Ur.clearTimeout,Fb=e=>e.charAt(0).toUpperCase()+e.slice(1),Dne=()=>Xl().style,Rne=["-webkit-","-moz-","-o-","-ms-"],Ane=["WebKit","Moz","O","MS","webkit","moz","o","ms"],u1={},d1={},Tne=e=>{let t=d1[e];if(Hg(d1,e))return t;const n=Fb(e),r=Dne();return Qt(Rne,o=>{const s=o.replace(/-/g,"");return!(t=[e,o+e,s+n,Fb(s)+n].find(c=>r[c]!==void 0))}),d1[e]=t||""},Wg=e=>{let t=u1[e]||Ur[e];return Hg(u1,e)||(Qt(Ane,n=>(t=t||Ur[n+Fb(e)],!t)),u1[e]=t),t},Nne=Wg("MutationObserver"),_j=Wg("IntersectionObserver"),Eh=Wg("ResizeObserver"),zb=Wg("ScrollTimeline"),ft=(e,...t)=>e.bind(0,...t),Va=e=>{let t;const n=e?Ph:c8,r=e?Lb:i8;return[o=>{r(t),t=n(o,Os(e)?e():e)},()=>r(t)]},u8=(e,t)=>{let n,r,o,s=ko;const{v:l,p:c,g:d}=t||{},f=function(y){s(),Lb(n),n=r=void 0,s=ko,e.apply(this,y)},m=b=>d&&r?d(r,b):b,h=()=>{s!==ko&&f(m(o)||o)},g=function(){const y=su(arguments),x=Os(l)?l():l;if(Ps(x)&&x>=0){const S=Os(c)?c():c,j=Ps(S)&&S>=0,_=x>0?Ph:c8,I=x>0?Lb:i8,M=m(y)||y,D=f.bind(0,M);s();const R=_(D,x);s=()=>I(R),j&&!n&&(n=Ph(h,S)),r=o=M}else f(y)};return g.m=h,g},$ne=/[^\x20\t\r\n\f]+/g,d8=(e,t,n)=>{const r=e&&e.classList;let o,s=0,l=!1;if(r&&t&&vf(t)){const c=t.match($ne)||[];for(l=c.length>0;o=c[s++];)l=!!n(r,o)&&l}return l},t2=(e,t)=>{d8(e,t,(n,r)=>n.remove(r))},cl=(e,t)=>(d8(e,t,(n,r)=>n.add(r)),ft(t2,e,t)),Lne={opacity:1,zIndex:1},Gp=(e,t)=>{const n=e||"",r=t?parseFloat(n):parseInt(n,10);return r===r?r:0},Fne=(e,t)=>!Lne[e]&&Ps(t)?`${t}px`:t,Ij=(e,t,n)=>String((t!=null?t[n]||t.getPropertyValue(n):e.style[n])||""),zne=(e,t,n)=>{try{const{style:r}=e;bl(r[t])?r.setProperty(t,n):r[t]=Fne(t,n)}catch{}},f8=e=>{const t=e||0;return isFinite(t)?t:0};function pr(e,t){const n=vf(t);if(Do(t)||n){let o=n?"":{};if(e){const s=Ur.getComputedStyle(e,null);o=n?Ij(e,s,t):t.reduce((l,c)=>(l[c]=Ij(e,s,c),l),o)}return o}e&&Qt(t,(o,s)=>zne(e,s,t[s]))}const Dd=e=>pr(e,"direction")==="rtl",Pj=(e,t,n)=>{const r=t?`${t}-`:"",o=n?`-${n}`:"",s=`${r}top${o}`,l=`${r}right${o}`,c=`${r}bottom${o}`,d=`${r}left${o}`,f=pr(e,[s,l,c,d]);return{t:Gp(f[s],!0),r:Gp(f[l],!0),b:Gp(f[c],!0),l:Gp(f[d],!0)}},Gi=(e,t)=>`translate${Md(e)?`(${e.x},${e.y})`:`${t?"X":"Y"}(${e})`}`,Kp=e=>`${(f8(e)*100).toFixed(3)}%`,qp=e=>`${f8(e)}px`,p8="paddingTop",n2="paddingRight",r2="paddingLeft",Mh="paddingBottom",Oh="marginLeft",Dh="marginRight",ud="marginBottom",Yu="overflowX",Zu="overflowY",pa="width",ma="height",$c="hidden",Bne={w:0,h:0},Vg=(e,t)=>t?{w:t[`${e}Width`],h:t[`${e}Height`]}:Bne,Hne=e=>Vg("inner",e||Ur),dd=ft(Vg,"offset"),hm=ft(Vg,"client"),Rh=ft(Vg,"scroll"),Ah=e=>{const t=parseFloat(pr(e,pa))||0,n=parseFloat(pr(e,ma))||0;return{w:t-Od(t),h:n-Od(n)}},ks=e=>e.getBoundingClientRect(),Bb=e=>!!(e&&(e[ma]||e[pa])),m8=(e,t)=>{const n=Bb(e);return!Bb(t)&&n},Ug=(e,t,n,r)=>{if(e&&t){let o=!0;return Qt(n,s=>{const l=r?r(e[s]):e[s],c=r?r(t[s]):t[s];l!==c&&(o=!1)}),o}return!1},h8=(e,t)=>Ug(e,t,["w","h"]),g8=(e,t)=>Ug(e,t,["x","y"]),Wne=(e,t)=>Ug(e,t,["t","r","b","l"]),Ej=(e,t,n)=>Ug(e,t,[pa,ma],n&&(r=>Od(r)));let Xp;const Mj="passive",Vne=()=>{if(bl(Xp)){Xp=!1;try{Ur.addEventListener(Mj,ko,Object.defineProperty({},Mj,{get(){Xp=!0}}))}catch{}}return Xp},v8=e=>e.split(" "),Oj=(e,t,n,r)=>{Qt(v8(t),o=>{e.removeEventListener(o,n,r)})},Pn=(e,t,n,r)=>{var o;const s=Vne(),l=(o=s&&r&&r.S)!=null?o:s,c=r&&r.$||!1,d=r&&r.O||!1,f=s?{passive:l,capture:c}:c;return ft(Ro,v8(t).map(m=>{const h=d?g=>{Oj(e,m,h,c),n(g)}:n;return e.addEventListener(m,h,f),ft(Oj,e,m,h,c)}))},b8=e=>e.stopPropagation(),Dj=e=>e.preventDefault(),Une={x:0,y:0},f1=e=>{const t=e&&ks(e);return t?{x:t.left+Ur.pageYOffset,y:t.top+Ur.pageXOffset}:Une},x8=(e,t,n)=>n?n.n?-e:n.i?t-e:e:e,Gne=(e,t)=>[t&&t.i?e:0,x8(e,e,t)],ul=(e,t)=>{const{x:n,y:r}=Ps(t)?{x:t,y:t}:t||{};Ps(n)&&(e.scrollLeft=n),Ps(r)&&(e.scrollTop=r)},Lc=e=>({x:e.scrollLeft,y:e.scrollTop}),Rj=(e,t)=>{Qt(Do(t)?t:[t],e)},Hb=e=>{const t=new Map,n=(s,l)=>{if(s){const c=t.get(s);Rj(d=>{c&&c[d?"delete":"clear"](d)},l)}else t.forEach(c=>{c.clear()}),t.clear()},r=(s,l)=>{if(vf(s)){const f=t.get(s)||new Set;return t.set(s,f),Rj(m=>{Os(m)&&f.add(m)},l),ft(n,s,l)}r8(l)&&l&&n();const c=fa(s),d=[];return Qt(c,f=>{const m=s[f];m&&Xt(d,r(f,m))}),ft(Ro,d)},o=(s,l)=>{Qt(su(t.get(s)),c=>{l&&!_h(l)?c.apply(0,l):c()})};return r(e||{}),[r,n,o]},Aj=e=>JSON.stringify(e,(t,n)=>{if(Os(n))throw 0;return n}),Tj=(e,t)=>e?`${t}`.split(".").reduce((n,r)=>n&&Hg(n,r)?n[r]:void 0,e):void 0,Kne={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},y8=(e,t)=>{const n={},r=Xa(fa(t),fa(e));return Qt(r,o=>{const s=e[o],l=t[o];if(Md(s)&&Md(l))Vt(n[o]={},y8(s,l)),Jy(n[o])&&delete n[o];else if(Hg(t,o)&&l!==s){let c=!0;if(Do(s)||Do(l))try{Aj(s)===Aj(l)&&(c=!1)}catch{}c&&(n[o]=l)}}),n},qne=(e,t,n)=>r=>[Tj(e,r),n||Tj(t,r)!==void 0],bf="data-overlayscrollbars",C8="os-environment",w8=`${C8}-flexbox-glue`,Xne=`${w8}-max`,S8="os-scrollbar-hidden",p1=`${bf}-initialize`,Yo=bf,k8=`${Yo}-overflow-x`,j8=`${Yo}-overflow-y`,Cc="overflowVisible",Qne="scrollbarHidden",Nj="scrollbarPressed",Th="updating",Ua=`${bf}-viewport`,m1="arrange",_8="scrollbarHidden",wc=Cc,Wb=`${bf}-padding`,Yne=wc,$j=`${bf}-content`,o2="os-size-observer",Zne=`${o2}-appear`,Jne=`${o2}-listener`,ere="os-trinsic-observer",tre="os-no-css-vars",nre="os-theme-none",Kr="os-scrollbar",rre=`${Kr}-rtl`,ore=`${Kr}-horizontal`,sre=`${Kr}-vertical`,I8=`${Kr}-track`,s2=`${Kr}-handle`,are=`${Kr}-visible`,lre=`${Kr}-cornerless`,Lj=`${Kr}-transitionless`,Fj=`${Kr}-interaction`,zj=`${Kr}-unusable`,Vb=`${Kr}-auto-hide`,Bj=`${Vb}-hidden`,Hj=`${Kr}-wheel`,ire=`${I8}-interactive`,cre=`${s2}-interactive`,P8={},E8={},ure=e=>{Qt(e,t=>Qt(t,(n,r)=>{P8[r]=t[r]}))},M8=(e,t,n)=>fa(e).map(r=>{const{static:o,instance:s}=e[r],[l,c,d]=n||[],f=n?s:o;if(f){const m=n?f(l,c,t):f(t);return(d||E8)[r]=m}}),au=e=>E8[e],dre="__osOptionsValidationPlugin",fre="__osSizeObserverPlugin",a2="__osScrollbarsHidingPlugin",pre="__osClickScrollPlugin";let h1;const Wj=(e,t,n,r)=>{xo(e,t);const o=hm(t),s=dd(t),l=Ah(n);return r&&aa(t),{x:s.h-o.h+l.h,y:s.w-o.w+l.w}},mre=e=>{let t=!1;const n=cl(e,S8);try{t=pr(e,Tne("scrollbar-width"))==="none"||Ur.getComputedStyle(e,"::-webkit-scrollbar").getPropertyValue("display")==="none"}catch{}return n(),t},hre=(e,t)=>{pr(e,{[Yu]:$c,[Zu]:$c,direction:"rtl"}),ul(e,{x:0});const n=f1(e),r=f1(t);ul(e,{x:-999});const o=f1(t);return{i:n.x===r.x,n:r.x!==o.x}},gre=(e,t)=>{const n=cl(e,w8),r=ks(e),o=ks(t),s=Ej(o,r,!0),l=cl(e,Xne),c=ks(e),d=ks(t),f=Ej(d,c,!0);return n(),l(),s&&f},vre=()=>{const{body:e}=document,n=l8(`
`)[0],r=n.firstChild,[o,,s]=Hb(),[l,c]=Qo({o:Wj(e,n,r),u:g8},ft(Wj,e,n,r,!0)),[d]=c(),f=mre(n),m={x:d.x===0,y:d.y===0},h={elements:{host:null,padding:!f,viewport:w=>f&&w===w.ownerDocument.body&&w,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},g=Vt({},Kne),b=ft(Vt,{},g),y=ft(Vt,{},h),x={P:d,I:m,H:f,A:pr(n,"zIndex")==="-1",L:!!zb,V:hre(n,r),U:gre(n,r),B:ft(o,"r"),j:y,N:w=>Vt(h,w)&&y(),G:b,q:w=>Vt(g,w)&&b(),F:Vt({},h),W:Vt({},g)};return Ar(n,"style"),aa(n),Ur.addEventListener("resize",()=>{let w;if(!f&&(!m.x||!m.y)){const S=au(a2);w=!!(S?S.R():ko)(x,l)}s("r",[w])}),x},Gr=()=>(h1||(h1=vre()),h1),l2=(e,t)=>Os(t)?t.apply(0,e):t,bre=(e,t,n,r)=>{const o=bl(r)?n:r;return l2(e,o)||t.apply(0,e)},O8=(e,t,n,r)=>{const o=bl(r)?n:r,s=l2(e,o);return!!s&&(id(s)?s:t.apply(0,e))},xre=(e,t)=>{const{nativeScrollbarsOverlaid:n,body:r}=t||{},{I:o,H:s,j:l}=Gr(),{nativeScrollbarsOverlaid:c,body:d}=l().cancel,f=n??c,m=bl(r)?d:r,h=(o.x||o.y)&&f,g=e&&(Lg(m)?!s:m);return!!h||!!g},i2=new WeakMap,yre=(e,t)=>{i2.set(e,t)},Cre=e=>{i2.delete(e)},D8=e=>i2.get(e),wre=(e,t,n)=>{let r=!1;const o=n?new WeakMap:!1,s=()=>{r=!0},l=c=>{if(o&&n){const d=n.map(f=>{const[m,h]=f||[];return[h&&m?(c||a8)(m,e):[],h]});Qt(d,f=>Qt(f[0],m=>{const h=f[1],g=o.get(m)||[];if(e.contains(m)&&h){const y=Pn(m,h.trim(),x=>{r?(y(),o.delete(m)):t(x)});o.set(m,Xt(g,y))}else Ro(g),o.delete(m)}))}};return l(),[s,l]},Vj=(e,t,n,r)=>{let o=!1;const{X:s,Y:l,J:c,K:d,Z:f,tt:m}=r||{},h=u8(()=>o&&n(!0),{v:33,p:99}),[g,b]=wre(e,h,c),y=s||[],x=l||[],w=Xa(y,x),S=(_,I)=>{if(!_h(I)){const E=f||ko,M=m||ko,D=[],R=[];let N=!1,O=!1;if(Qt(I,T=>{const{attributeName:U,target:G,type:q,oldValue:Y,addedNodes:Q,removedNodes:V}=T,se=q==="attributes",ee=q==="childList",le=e===G,ae=se&&U,ce=ae?Cr(G,U||""):null,J=ae&&Y!==ce,re=Bg(x,U)&&J;if(t&&(ee||!le)){const A=se&&J,L=A&&d&&Ih(G,d),ne=(L?!E(G,U,Y,ce):!se||A)&&!M(T,!!L,e,r);Qt(Q,z=>Xt(D,z)),Qt(V,z=>Xt(D,z)),O=O||ne}!t&&le&&J&&!E(G,U,Y,ce)&&(Xt(R,U),N=N||re)}),b(T=>kj(D).reduce((U,G)=>(Xt(U,a8(T,G)),Ih(G,T)?Xt(U,G):U),[])),t)return!_&&O&&n(!1),[!1];if(!_h(R)||N){const T=[kj(R),N];return!_&&n.apply(0,T),T}}},j=new Nne(ft(S,!1));return[()=>(j.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:w,subtree:t,childList:t,characterData:t}),o=!0,()=>{o&&(g(),j.disconnect(),o=!1)}),()=>{if(o)return h.m(),S(!0,j.takeRecords())}]},R8=(e,t,n)=>{const{nt:o,ot:s}=n||{},l=au(fre),{V:c}=Gr(),d=ft(Dd,e),[f]=Qo({o:!1,_:!0});return()=>{const m=[],g=l8(`
`)[0],b=g.firstChild,y=x=>{const w=x instanceof ResizeObserverEntry,S=!w&&Do(x);let j=!1,_=!1,I=!0;if(w){const[E,,M]=f(x.contentRect),D=Bb(E),R=m8(E,M);_=!M||R,j=!_&&!D,I=!j}else S?[,I]=x:_=x===!0;if(o&&I){const E=S?x[0]:Dd(g);ul(g,{x:x8(3333333,3333333,E&&c),y:3333333})}j||t({st:S?x:void 0,et:!S,ot:_})};if(Eh){const x=new Eh(w=>y(w.pop()));x.observe(b),Xt(m,()=>{x.disconnect()})}else if(l){const[x,w]=l(b,y,s);Xt(m,Xa([cl(g,Zne),Pn(g,"animationstart",x)],w))}else return ko;if(o){const[x]=Qo({o:void 0},d);Xt(m,Pn(g,"scroll",w=>{const S=x(),[j,_,I]=S;_&&(t2(b,"ltr rtl"),cl(b,j?"rtl":"ltr"),y([!!j,_,I])),b8(w)}))}return ft(Ro,Xt(m,xo(e,g)))}},Sre=(e,t)=>{let n;const r=d=>d.h===0||d.isIntersecting||d.intersectionRatio>0,o=Xl(ere),[s]=Qo({o:!1}),l=(d,f)=>{if(d){const m=s(r(d)),[,h]=m;return h&&!f&&t(m)&&[m]}},c=(d,f)=>l(f.pop(),d);return[()=>{const d=[];if(_j)n=new _j(ft(c,!1),{root:e}),n.observe(o),Xt(d,()=>{n.disconnect()});else{const f=()=>{const m=dd(o);l(m)};Xt(d,R8(o,f)()),f()}return ft(Ro,Xt(d,xo(e,o)))},()=>n&&c(!0,n.takeRecords())]},kre=(e,t)=>{let n,r,o,s,l;const{H:c}=Gr(),d=`[${Yo}]`,f=`[${Ua}]`,m=["tabindex"],h=["wrap","cols","rows"],g=["id","class","style","open"],b={ct:!1,rt:Dd(e.lt)},{lt:y,it:x,ut:w,ft:S,_t:j,dt:_,vt:I}=e,{U:E,B:M}=Gr(),[D]=Qo({u:h8,o:{w:0,h:0}},()=>{const ae=_(wc,Cc),ce=_(m1,""),J=ce&&Lc(x);I(wc,Cc),I(m1,""),I("",Th,!0);const re=Rh(w),A=Rh(x),L=Ah(x);return I(wc,Cc,ae),I(m1,"",ce),I("",Th),ul(x,J),{w:A.w+re.w+L.w,h:A.h+re.h+L.h}}),R=S?h:Xa(g,h),N=u8(t,{v:()=>n,p:()=>r,g(ae,ce){const[J]=ae,[re]=ce;return[Xa(fa(J),fa(re)).reduce((A,L)=>(A[L]=J[L]||re[L],A),{})]}}),O=ae=>{Qt(ae||m,ce=>{if(Bg(m,ce)){const J=Cr(y,ce);vf(J)?Cr(x,ce,J):Ar(x,ce)}})},T=(ae,ce)=>{const[J,re]=ae,A={ht:re};return Vt(b,{ct:J}),!ce&&t(A),A},U=({et:ae,st:ce,ot:J})=>{const A=!(ae&&!J&&!ce)&&c?N:t,[L,K]=ce||[];ce&&Vt(b,{rt:L}),A({et:ae||J,ot:J,gt:K})},G=(ae,ce)=>{const[,J]=D(),re={bt:J};return J&&!ce&&(ae?t:N)(re),re},q=(ae,ce,J)=>{const re={wt:ce};return ce&&!J?N(re):j||O(ae),re},[Y,Q]=w||!E?Sre(y,T):[],V=!j&&R8(y,U,{ot:!0,nt:!0}),[se,ee]=Vj(y,!1,q,{Y:g,X:Xa(g,m)}),le=j&&Eh&&new Eh(ae=>{const ce=ae[ae.length-1].contentRect;U({et:!0,ot:m8(ce,l)}),l=ce});return[()=>{O(),le&&le.observe(y);const ae=V&&V(),ce=Y&&Y(),J=se(),re=M(A=>{const[,L]=D();N({yt:A,bt:L})});return()=>{le&&le.disconnect(),ae&&ae(),ce&&ce(),s&&s(),J(),re()}},({St:ae,$t:ce,xt:J})=>{const re={},[A]=ae("update.ignoreMutation"),[L,K]=ae("update.attributes"),[ne,z]=ae("update.elementEvents"),[oe,X]=ae("update.debounce"),Z=z||K,me=ce||J,ve=de=>Os(A)&&A(de);if(Z){o&&o(),s&&s();const[de,ke]=Vj(w||x,!0,G,{X:Xa(R,L||[]),J:ne,K:d,tt:(we,Re)=>{const{target:Qe,attributeName:$e}=we;return(!Re&&$e&&!j?Ene(Qe,d,f):!1)||!!ac(Qe,`.${Kr}`)||!!ve(we)}});s=de(),o=ke}if(X)if(N.m(),Do(oe)){const de=oe[0],ke=oe[1];n=Ps(de)&&de,r=Ps(ke)&&ke}else Ps(oe)?(n=oe,r=!1):(n=!1,r=!1);if(me){const de=ee(),ke=Q&&Q(),we=o&&o();de&&Vt(re,q(de[0],de[1],me)),ke&&Vt(re,T(ke[0],me)),we&&Vt(re,G(we[0],me))}return re},b]},Ub=(e,t,n)=>cd(e,One(t,n)),jre=(e,t,n)=>{const r=Od(t),[o,s]=Gne(r,n),l=(s-e)/s,c=e/o,d=e/s,f=n?n.n?l:n.i?c:d:d;return Ub(0,1,f)},A8=(e,t,n)=>{if(n){const d=t?pa:ma,{Ot:f,Ct:m}=n,h=ks(m)[d],g=ks(f)[d];return Ub(0,1,h/g)}const r=t?"x":"y",{Ht:o,zt:s}=e,l=s[r],c=o[r];return Ub(0,1,l/(l+c))},Uj=(e,t,n,r)=>{const o=A8(e,r,t);return 1/o*(1-o)*n},_re=(e,t,n,r)=>{const{j:o,A:s}=Gr(),{scrollbars:l}=o(),{slot:c}=l,{It:d,lt:f,it:m,At:h,Et:g,Tt:b,_t:y}=t,{scrollbars:x}=h?{}:e,{slot:w}=x||{},S=new Map,j=L=>zb&&new zb({source:g,axis:L}),_=j("x"),I=j("y"),E=O8([d,f,m],()=>y&&b?d:f,c,w),M=L=>y&&!b&&sa(L)===m,D=L=>{S.forEach((K,ne)=>{(L?Bg(Do(L)?L:[L],ne):!0)&&((K||[]).forEach(oe=>{oe&&oe.cancel()}),S.delete(ne))})},R=(L,K,ne)=>{const z=ne?cl:t2;Qt(L,oe=>{z(oe.Dt,K)})},N=(L,K)=>{Qt(L,ne=>{const[z,oe]=K(ne);pr(z,oe)})},O=(L,K,ne,z)=>K&&L.animate(ne,{timeline:K,composite:z}),T=(L,K)=>{N(L,ne=>{const{Ct:z}=ne;return[z,{[K?pa:ma]:Kp(A8(n,K))}]})},U=(L,K)=>{_&&I?L.forEach(ne=>{const{Dt:z,Ct:oe}=ne,X=ft(Uj,n,ne),Z=K&&Dd(z),me=X(Z?1:0,K),ve=X(Z?0:1,K);D(oe),S.set(oe,[O(oe,K?_:I,Vt({transform:[Gi(Kp(me),K),Gi(Kp(ve),K)]},Z?{clear:["left"]}:{}))])}):N(L,ne=>{const{Ct:z,Dt:oe}=ne,{V:X}=Gr(),Z=K?"x":"y",{Ht:me}=n,ve=Dd(oe),de=Uj(n,ne,jre(Lc(g)[Z],me[Z],K&&ve&&X),K);return[z,{transform:Gi(Kp(de),K)}]})},G=L=>{const{Dt:K}=L,ne=M(K)&&K,{x:z,y:oe}=Lc(g);return[ne,{transform:ne?Gi({x:qp(z),y:qp(oe)}):""}]},q=(L,K,ne,z)=>O(L,K,{transform:[Gi(qp(0),z),Gi(qp(cd(0,ne-.5)),z)]},"add"),Y=[],Q=[],V=[],se=(L,K,ne)=>{const z=r8(ne),oe=z?ne:!0,X=z?!ne:!0;oe&&R(Q,L,K),X&&R(V,L,K)},ee=()=>{T(Q,!0),T(V)},le=()=>{U(Q,!0),U(V)},ae=()=>{if(y)if(I&&I){const{Ht:L}=n;Xa(V,Q).forEach(({Dt:K})=>{D(K),M(K)&&S.set(K,[q(K,_,L.x,!0),q(K,I,L.y)])})}else N(Q,G),N(V,G)},ce=L=>{const K=L?ore:sre,ne=L?Q:V,z=_h(ne)?Lj:"",oe=Xl(`${Kr} ${K} ${z}`),X=Xl(I8),Z=Xl(s2),me={Dt:oe,Ot:X,Ct:Z};return s||cl(oe,tre),Xt(ne,me),Xt(Y,[xo(oe,X),xo(X,Z),ft(aa,oe),D,r(me,se,U,L)]),me},J=ft(ce,!0),re=ft(ce,!1),A=()=>(xo(E,Q[0].Dt),xo(E,V[0].Dt),Ph(()=>{se(Lj)},300),ft(Ro,Y));return J(),re(),[{kt:ee,Mt:le,Rt:ae,Pt:se,Lt:{L:_,Vt:Q,Ut:J,Bt:ft(N,Q)},jt:{L:I,Vt:V,Ut:re,Bt:ft(N,V)}},A]},Ire=(e,t,n)=>{const{lt:r,Et:o,Nt:s}=t;return(l,c,d,f)=>{const{Dt:m,Ot:h,Ct:g}=l,[b,y]=Va(333),[x,w]=Va(),S=ft(d,[l],f),j=!!o.scrollBy,_=`client${f?"X":"Y"}`,I=f?pa:ma,E=f?"left":"top",M=f?"w":"h",D=f?"x":"y",R=T=>T.propertyName.indexOf(I)>-1,N=()=>{const T="pointerup pointerleave pointercancel lostpointercapture",U=(G,q)=>Y=>{const{Ht:Q}=n,V=dd(h)[M]-dd(g)[M],ee=q*Y/V*Q[D];ul(o,{[D]:G+ee})};return Pn(h,"pointerdown",G=>{const q=ac(G.target,`.${s2}`)===g,Y=q?g:h,Q=e.scrollbars,{button:V,isPrimary:se,pointerType:ee}=G,{pointers:le}=Q,ae=V===0&&se&&Q[q?"dragScroll":"clickScroll"]&&(le||[]).includes(ee);if(ql(r,Yo,Nj,!0),ae){const ce=!q&&G.shiftKey,J=ft(ks,g),re=ft(ks,h),A=(we,Re)=>(we||J())[E]-(Re||re())[E],L=Od(ks(o)[I])/dd(o)[M]||1,K=U(Lc(o)[D]||0,1/L),ne=G[_],z=J(),oe=re(),X=z[I],Z=A(z,oe)+X/2,me=ne-oe[E],ve=q?0:me-Z,de=we=>{Ro(ke),Y.releasePointerCapture(we.pointerId)},ke=[ft(ql,r,Yo,Nj),Pn(s,T,de),Pn(s,"selectstart",we=>Dj(we),{S:!1}),Pn(h,T,de),Pn(h,"pointermove",we=>{const Re=we[_]-ne;(q||ce)&&K(ve+Re)})];if(ce)K(ve);else if(!q){const we=au(pre);we&&Xt(ke,we(K,A,ve,X,me))}Y.setPointerCapture(G.pointerId)}})};let O=!0;return ft(Ro,[Pn(m,"pointerenter",()=>{c(Fj,!0)}),Pn(m,"pointerleave pointercancel",()=>{c(Fj,!1)}),Pn(m,"wheel",T=>{const{deltaX:U,deltaY:G,deltaMode:q}=T;j&&O&&q===0&&sa(m)===r&&o.scrollBy({left:U,top:G,behavior:"smooth"}),O=!1,c(Hj,!0),b(()=>{O=!0,c(Hj)}),Dj(T)},{S:!1,$:!0}),Pn(g,"transitionstart",T=>{if(R(T)){const U=()=>{S(),x(U)};U()}}),Pn(g,"transitionend transitioncancel",T=>{R(T)&&(w(),S())}),Pn(m,"mousedown",ft(Pn,s,"click",b8,{O:!0,$:!0}),{$:!0}),N(),y,w])}},Pre=(e,t,n,r,o,s)=>{let l,c,d,f,m,h=ko,g=0;const[b,y]=Va(),[x,w]=Va(),[S,j]=Va(100),[_,I]=Va(100),[E,M]=Va(100),[D,R]=Va(()=>g),[N,O]=_re(e,o,r,Ire(t,o,r)),{lt:T,Gt:U,Tt:G}=o,{Pt:q,kt:Y,Mt:Q,Rt:V}=N,se=J=>{q(Vb,J,!0),q(Vb,J,!1)},ee=(J,re)=>{if(R(),J)q(Bj);else{const A=ft(q,Bj,!0);g>0&&!re?D(A):A()}},le=J=>J.pointerType==="mouse",ae=J=>{le(J)&&(f=c,f&&ee(!0))},ce=[j,R,I,M,w,y,()=>h(),Pn(T,"pointerover",ae,{O:!0}),Pn(T,"pointerenter",ae),Pn(T,"pointerleave",J=>{le(J)&&(f=!1,c&&ee(!1))}),Pn(T,"pointermove",J=>{le(J)&&l&&b(()=>{j(),ee(!0),_(()=>{l&&ee(!1)})})}),Pn(U,"scroll",J=>{x(()=>{Q(),d&&ee(!0),S(()=>{d&&!f&&ee(!1)})}),s(J),V()})];return[()=>ft(Ro,Xt(ce,O())),({St:J,xt:re,qt:A,Ft:L})=>{const{Wt:K,Xt:ne,Yt:z}=L||{},{gt:oe,ot:X}=A||{},{rt:Z}=n,{I:me}=Gr(),{Ht:ve,Jt:de,Kt:ke}=r,[we,Re]=J("showNativeOverlaidScrollbars"),[Qe,$e]=J("scrollbars.theme"),[vt,it]=J("scrollbars.visibility"),[ot,Ce]=J("scrollbars.autoHide"),[Me,qe]=J("scrollbars.autoHideSuspend"),[dt]=J("scrollbars.autoHideDelay"),[ye,Ue]=J("scrollbars.dragScroll"),[st,mt]=J("scrollbars.clickScroll"),Pe=X&&!re,Ne=ke.x||ke.y,kt=K||ne||oe||re,Se=z||it,Ve=we&&me.x&&me.y,Ge=(Le,bt)=>{const fn=vt==="visible"||vt==="auto"&&Le==="scroll";return q(are,fn,bt),fn};if(g=dt,Pe&&(Me&&Ne?(se(!1),h(),E(()=>{h=Pn(U,"scroll",ft(se,!0),{O:!0})})):se(!0)),Re&&q(nre,Ve),$e&&(q(m),q(Qe,!0),m=Qe),qe&&!Me&&se(!0),Ce&&(l=ot==="move",c=ot==="leave",d=ot!=="never",ee(!d,!0)),Ue&&q(cre,ye),mt&&q(ire,st),Se){const Le=Ge(de.x,!0),bt=Ge(de.y,!1);q(lre,!(Le&&bt))}kt&&(Y(),Q(),V(),q(zj,!ve.x,!0),q(zj,!ve.y,!1),q(rre,Z&&!G))},{},N]},Ere=e=>{const t=Gr(),{j:n,H:r}=t,o=au(a2),s=o&&o.C,{elements:l}=n(),{host:c,padding:d,viewport:f,content:m}=l,h=id(e),g=h?{}:e,{elements:b}=g,{host:y,padding:x,viewport:w,content:S}=b||{},j=h?e:g.target,_=Ih(j,"textarea"),I=j.ownerDocument,E=I.documentElement,M=j===I.body,D=I.defaultView,R=ft(bre,[j]),N=ft(O8,[j]),O=ft(l2,[j]),T=ft(Xl,""),U=ft(R,T,f),G=ft(N,T,m),q=U(w),Y=q===j,Q=Y&&M,V=!Y&&G(S),se=!Y&&id(q)&&q===V,ee=se&&!!O(m),le=ee?U():q,ae=ee?V:G(),J=Q?E:se?le:q,re=_?R(T,c,y):j,A=Q?J:re,L=se?ae:V,K=I.activeElement,ne=!Y&&D.top===D&&K===j,z={It:j,lt:A,it:J,Zt:!Y&&N(T,d,x),ut:L,Qt:!Y&&!r&&s&&s(t),Et:Q?E:J,Gt:Q?I:J,tn:D,Nt:I,ft:_,Tt:M,At:h,_t:Y,nn:se,dt:(Ce,Me)=>Ine(J,Y?Yo:Ua,Y?Me:Ce),vt:(Ce,Me,qe)=>ql(J,Y?Yo:Ua,Y?Me:Ce,qe)},oe=fa(z).reduce((Ce,Me)=>{const qe=z[Me];return Xt(Ce,qe&&id(qe)&&!sa(qe)?qe:!1)},[]),X=Ce=>Ce?Bg(oe,Ce):null,{It:Z,lt:me,Zt:ve,it:de,ut:ke,Qt:we}=z,Re=[()=>{Ar(me,Yo),Ar(me,p1),Ar(Z,p1),M&&(Ar(E,Yo),Ar(E,p1))}],Qe=_&&X(me);let $e=_?Z:$b([ke,de,ve,me,Z].find(Ce=>X(Ce)===!1));const vt=Q?Z:ke||de,it=ft(Ro,Re);return[z,()=>{Cr(me,Yo,Y?"viewport":"host"),Cr(ve,Wb,""),Cr(ke,$j,""),Y||Cr(de,Ua,"");const Ce=M&&!Y?cl(sa(j),S8):ko,Me=qe=>{xo(sa(qe),$b(qe)),aa(qe)};if(Qe&&(jj(Z,me),Xt(Re,()=>{jj(me,Z),aa(me)})),xo(vt,$e),xo(me,ve),xo(ve||me,!Y&&de),xo(de,ke),Xt(Re,()=>{Ce(),Ar(ve,Wb),Ar(ke,$j),Ar(de,k8),Ar(de,j8),Ar(de,Ua),X(ke)&&Me(ke),X(de)&&Me(de),X(ve)&&Me(ve)}),r&&!Y&&(ql(de,Ua,_8,!0),Xt(Re,ft(Ar,de,Ua))),we&&(Mne(de,we),Xt(Re,ft(aa,we))),ne){const qe="tabindex",dt=Cr(de,qe);Cr(de,qe,"-1"),de.focus();const ye=()=>dt?Cr(de,qe,dt):Ar(de,qe),Ue=Pn(I,"pointerdown keydown",()=>{ye(),Ue()});Xt(Re,[ye,Ue])}else K&&K.focus&&K.focus();return $e=0,it},it]},Mre=({ut:e})=>({qt:t,sn:n,xt:r})=>{const{U:o}=Gr(),{ht:s}=t||{},{ct:l}=n;(e||!o)&&(s||r)&&pr(e,{[ma]:l?"":"100%"})},Ore=({lt:e,Zt:t,it:n,_t:r},o)=>{const[s,l]=Qo({u:Wne,o:Pj()},ft(Pj,e,"padding",""));return({St:c,qt:d,sn:f,xt:m})=>{let[h,g]=l(m);const{H:b,U:y}=Gr(),{et:x,bt:w,gt:S}=d||{},{rt:j}=f,[_,I]=c("paddingAbsolute");(x||g||(m||!y&&w))&&([h,g]=s(m));const M=!r&&(I||S||g);if(M){const D=!_||!t&&!b,R=h.r+h.l,N=h.t+h.b,O={[Dh]:D&&!j?-R:0,[ud]:D?-N:0,[Oh]:D&&j?-R:0,top:D?-h.t:0,right:D?j?-h.r:"auto":0,left:D?j?"auto":-h.l:0,[pa]:D?`calc(100% + ${R}px)`:""},T={[p8]:D?h.t:0,[n2]:D?h.r:0,[Mh]:D?h.b:0,[r2]:D?h.l:0};pr(t||n,O),pr(n,T),Vt(o,{Zt:h,en:!D,D:t?T:Vt({},O,T)})}return{cn:M}}},Dre=({lt:e,Zt:t,it:n,Qt:r,_t:o,vt:s,Tt:l,tn:c},d)=>{const f=ft(cd,0),m="visible",h=42,g={u:h8,o:{w:0,h:0}},b={u:g8,o:{x:$c,y:$c}},y=(ce,J)=>{const re=Ur.devicePixelRatio%1!==0?1:0,A={w:f(ce.w-J.w),h:f(ce.h-J.h)};return{w:A.w>re?A.w:0,h:A.h>re?A.h:0}},x=ce=>ce.indexOf(m)===0,{P:w,U:S,H:j,I:_}=Gr(),I=au(a2),E=!o&&!j&&(_.x||_.y),M=l&&o,[D,R]=Qo(g,ft(Ah,n)),[N,O]=Qo(g,ft(Rh,n)),[T,U]=Qo(g),[G,q]=Qo(g),[Y]=Qo(b),Q=(ce,J)=>{if(pr(n,{[ma]:""}),J){const{en:re,Zt:A}=d,{rn:L,k:K}=ce,ne=Ah(e),z=hm(e),oe=pr(n,"boxSizing")==="content-box",X=re||oe?A.b+A.t:0,Z=!(_.x&&oe);pr(n,{[ma]:z.h+ne.h+(L.x&&Z?K.x:0)-X})}},V=(ce,J)=>{const re=!j&&!ce?h:0,A=(ve,de,ke)=>{const we=pr(n,ve),Qe=(J?J[ve]:we)==="scroll";return[we,Qe,Qe&&!j?de?re:ke:0,de&&!!re]},[L,K,ne,z]=A(Yu,_.x,w.x),[oe,X,Z,me]=A(Zu,_.y,w.y);return{Jt:{x:L,y:oe},rn:{x:K,y:X},k:{x:ne,y:Z},M:{x:z,y:me}}},se=(ce,J,re,A)=>{const L=(X,Z)=>{const me=x(X),ve=Z&&me&&X.replace(`${m}-`,"")||"";return[Z&&!me?X:"",x(ve)?"hidden":ve]},[K,ne]=L(re.x,J.x),[z,oe]=L(re.y,J.y);return A[Yu]=ne&&z?ne:K,A[Zu]=oe&&K?oe:z,V(ce,A)},ee=(ce,J,re,A)=>{const{k:L,M:K}=ce,{x:ne,y:z}=K,{x:oe,y:X}=L,{D:Z}=d,me=J?Oh:Dh,ve=J?r2:n2,de=Z[me],ke=Z[ud],we=Z[ve],Re=Z[Mh];A[pa]=`calc(100% + ${X+de*-1}px)`,A[me]=-X+de,A[ud]=-oe+ke,re&&(A[ve]=we+(z?X:0),A[Mh]=Re+(ne?oe:0))},[le,ae]=I?I.T(E,S,n,r,d,V,ee):[()=>E,()=>[ko]];return({St:ce,qt:J,sn:re,xt:A},{cn:L})=>{const{et:K,wt:ne,bt:z,ht:oe,gt:X,yt:Z}=J||{},{ct:me,rt:ve}=re,[de,ke]=ce("showNativeOverlaidScrollbars"),[we,Re]=ce("overflow"),Qe=de&&_.x&&_.y,$e=!o&&!S&&(K||z||ne||ke||oe),vt=K||L||z||X||Z||ke,it=x(we.x),ot=x(we.y),Ce=it||ot;let Me=R(A),qe=O(A),dt=U(A),ye=q(A),Ue;if(ke&&j&&s(_8,Qne,!Qe),$e&&(Ue=V(Qe),Q(Ue,me)),vt){Ce&&s(wc,Cc,!1);const[zn,pn]=ae(Qe,ve,Ue),[en,un]=Me=D(A),[Wt,ar]=qe=N(A),vr=hm(n);let Bn=Wt,Hn=vr;zn(),(ar||un||ke)&&pn&&!Qe&&le(pn,Wt,en,ve)&&(Hn=hm(n),Bn=Rh(n));const lo=Hne(c),Fo={w:f(cd(Wt.w,Bn.w)+en.w),h:f(cd(Wt.h,Bn.h)+en.h)},zo={w:f((M?lo.w:Hn.w+f(vr.w-Wt.w))+en.w),h:f((M?lo.h:Hn.h+f(vr.h-Wt.h))+en.h)};ye=G(zo),dt=T(y(Fo,zo),A)}const[st,mt]=ye,[Pe,Ne]=dt,[kt,Se]=qe,[Ve,Ge]=Me,Le={x:Pe.w>0,y:Pe.h>0},bt=it&&ot&&(Le.x||Le.y)||it&&Le.x&&!Le.y||ot&&Le.y&&!Le.x;if(L||X||Z||Ge||Se||mt||Ne||Re||ke||$e||vt){const zn={[Dh]:0,[ud]:0,[Oh]:0,[pa]:"",[Yu]:"",[Zu]:""},pn=se(Qe,Le,we,zn),en=le(pn,kt,Ve,ve);o||ee(pn,ve,en,zn),$e&&Q(pn,me),o?(Cr(e,k8,zn[Yu]),Cr(e,j8,zn[Zu])):pr(n,zn)}ql(e,Yo,Cc,bt),ql(t,Wb,Yne,bt),o||ql(n,Ua,wc,Ce);const[Bt,Ht]=Y(V(Qe).Jt);return Vt(d,{Jt:Bt,zt:{x:st.w,y:st.h},Ht:{x:Pe.w,y:Pe.h},Kt:Le}),{Yt:Ht,Wt:mt,Xt:Ne}}},Rre=e=>{const[t,n,r]=Ere(e),o={Zt:{t:0,r:0,b:0,l:0},en:!1,D:{[Dh]:0,[ud]:0,[Oh]:0,[p8]:0,[n2]:0,[Mh]:0,[r2]:0},zt:{x:0,y:0},Ht:{x:0,y:0},Jt:{x:$c,y:$c},Kt:{x:!1,y:!1}},{It:s,it:l,vt:c,_t:d}=t,{H:f,I:m,U:h}=Gr(),g=!f&&(m.x||m.y),b=[Mre(t),Ore(t,o),Dre(t,o)];return[n,y=>{const x={},S=(g||!h)&&Lc(l);return c("",Th,!0),Qt(b,j=>{Vt(x,j(y,x)||{})}),c("",Th),ul(l,S),!d&&ul(s,0),x},o,t,r]},Are=(e,t,n,r)=>{const[o,s,l,c,d]=Rre(e),[f,m,h]=kre(c,S=>{w({},S)}),[g,b,,y]=Pre(e,t,h,l,c,r),x=S=>fa(S).some(j=>!!S[j]),w=(S,j)=>{const{ln:_,xt:I,$t:E,an:M}=S,D=_||{},R=!!I,N={St:qne(t,D,R),ln:D,xt:R};if(M)return b(N),!1;const O=j||m(Vt({},N,{$t:E})),T=s(Vt({},N,{sn:h,qt:O}));b(Vt({},N,{qt:O,Ft:T}));const U=x(O),G=x(T),q=U||G||!Jy(D)||R;return q&&n(S,{qt:O,Ft:T}),q};return[()=>{const{It:S,it:j,Nt:_,Tt:I}=c,E=I?_.documentElement:S,M=Lc(E),D=[f(),o(),g()];return ul(j,M),ft(Ro,D)},w,()=>({un:h,fn:l}),{_n:c,dn:y},d]},ra=(e,t,n)=>{const{G:r}=Gr(),o=id(e),s=o?e:e.target,l=D8(s);if(t&&!l){let c=!1;const d=[],f={},m=O=>{const T=o8(O,!0),U=au(dre);return U?U(T,!0):T},h=Vt({},r(),m(t)),[g,b,y]=Hb(),[x,w,S]=Hb(n),j=(O,T)=>{S(O,T),y(O,T)},[_,I,E,M,D]=Are(e,h,({ln:O,xt:T},{qt:U,Ft:G})=>{const{et:q,gt:Y,ht:Q,bt:V,wt:se,ot:ee}=U,{Wt:le,Xt:ae,Yt:ce}=G;j("updated",[N,{updateHints:{sizeChanged:!!q,directionChanged:!!Y,heightIntrinsicChanged:!!Q,overflowEdgeChanged:!!le,overflowAmountChanged:!!ae,overflowStyleChanged:!!ce,contentMutation:!!V,hostMutation:!!se,appear:!!ee},changedOptions:O||{},force:!!T}])},O=>j("scroll",[N,O])),R=O=>{Cre(s),Ro(d),c=!0,j("destroyed",[N,O]),b(),w()},N={options(O,T){if(O){const U=T?r():{},G=y8(h,Vt(U,m(O)));Jy(G)||(Vt(h,G),I({ln:G}))}return Vt({},h)},on:x,off:(O,T)=>{O&&T&&w(O,T)},state(){const{un:O,fn:T}=E(),{rt:U}=O,{zt:G,Ht:q,Jt:Y,Kt:Q,Zt:V,en:se}=T;return Vt({},{overflowEdge:G,overflowAmount:q,overflowStyle:Y,hasOverflow:Q,padding:V,paddingAbsolute:se,directionRTL:U,destroyed:c})},elements(){const{It:O,lt:T,Zt:U,it:G,ut:q,Et:Y,Gt:Q}=M._n,{Lt:V,jt:se}=M.dn,ee=ae=>{const{Ct:ce,Ot:J,Dt:re}=ae;return{scrollbar:re,track:J,handle:ce}},le=ae=>{const{Vt:ce,Ut:J}=ae,re=ee(ce[0]);return Vt({},re,{clone:()=>{const A=ee(J());return I({an:!0}),A}})};return Vt({},{target:O,host:T,padding:U||G,viewport:G,content:q||G,scrollOffsetElement:Y,scrollEventElement:Q,scrollbarHorizontal:le(V),scrollbarVertical:le(se)})},update:O=>I({xt:O,$t:!0}),destroy:ft(R,!1),plugin:O=>f[fa(O)[0]]};return Xt(d,[D]),yre(s,N),M8(P8,ra,[N,g,f]),xre(M._n.Tt,!o&&e.cancel)?(R(!0),N):(Xt(d,_()),j("initialized",[N]),N.update(!0),N)}return l};ra.plugin=e=>{const t=Do(e),n=t?e:[e],r=n.map(o=>M8(o,ra)[0]);return ure(n),t?r:r[0]};ra.valid=e=>{const t=e&&e.elements,n=Os(t)&&t();return jh(n)&&!!D8(n.target)};ra.env=()=>{const{P:e,I:t,H:n,V:r,U:o,A:s,L:l,F:c,W:d,j:f,N:m,G:h,q:g}=Gr();return Vt({},{scrollbarsSize:e,scrollbarsOverlaid:t,scrollbarsHiding:n,rtlScrollBehavior:r,flexboxGlue:o,cssCustomProperties:s,scrollTimeline:l,staticDefaultInitialization:c,staticDefaultOptions:d,getDefaultInitialization:f,setDefaultInitialization:m,getDefaultOptions:h,setDefaultOptions:g})};const Tre=()=>{if(typeof window>"u"){const f=()=>{};return[f,f]}let e,t;const n=window,r=typeof n.requestIdleCallback=="function",o=n.requestAnimationFrame,s=n.cancelAnimationFrame,l=r?n.requestIdleCallback:o,c=r?n.cancelIdleCallback:s,d=()=>{c(e),s(t)};return[(f,m)=>{d(),e=l(r?()=>{d(),t=o(f)}:f,typeof m=="object"?m:{timeout:2233})},d]},c2=e=>{const{options:t,events:n,defer:r}=e||{},[o,s]=i.useMemo(Tre,[]),l=i.useRef(null),c=i.useRef(r),d=i.useRef(t),f=i.useRef(n);return i.useEffect(()=>{c.current=r},[r]),i.useEffect(()=>{const{current:m}=l;d.current=t,ra.valid(m)&&m.options(t||{},!0)},[t]),i.useEffect(()=>{const{current:m}=l;f.current=n,ra.valid(m)&&m.on(n||{},!0)},[n]),i.useEffect(()=>()=>{var m;s(),(m=l.current)==null||m.destroy()},[]),i.useMemo(()=>[m=>{const h=l.current;if(ra.valid(h))return;const g=c.current,b=d.current||{},y=f.current||{},x=()=>l.current=ra(m,b,y);g?o(x,g):x()},()=>l.current],[])},Nre=(e,t)=>{const{element:n="div",options:r,events:o,defer:s,children:l,...c}=e,d=n,f=i.useRef(null),m=i.useRef(null),[h,g]=c2({options:r,events:o,defer:s});return i.useEffect(()=>{const{current:b}=f,{current:y}=m;return b&&y&&h({target:b,elements:{viewport:y,content:y}}),()=>{var x;return(x=g())==null?void 0:x.destroy()}},[h,n]),i.useImperativeHandle(t,()=>({osInstance:g,getElement:()=>f.current}),[]),B.createElement(d,{"data-overlayscrollbars-initialize":"",ref:f,...c},B.createElement("div",{"data-overlayscrollbars-contents":"",ref:m},l))},Gg=i.forwardRef(Nre),$re=()=>{const{t:e}=W(),[t,{isLoading:n}]=dA(),r=e("boards.myBoard"),o=i.useCallback(()=>{t(r)},[t,r]);return a.jsx(Fe,{icon:a.jsx(nl,{}),isLoading:n,tooltip:e("boards.addBoard"),"aria-label":e("boards.addBoard"),onClick:o,size:"sm","data-testid":"add-board-button"})},Lre=i.memo($re);var T8=eg({displayName:"ExternalLinkIcon",path:a.jsxs("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"2",children:[a.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),a.jsx("path",{d:"M15 3h6v6"}),a.jsx("path",{d:"M10 14L21 3"})]})}),Kg=eg({d:"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z",displayName:"ChevronUpIcon"}),N8=eg({displayName:"CloseIcon",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"}),Fre=eg({displayName:"DeleteIcon",path:a.jsx("g",{fill:"currentColor",children:a.jsx("path",{d:"M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z"})})});const zre=fe([pe],({gallery:e})=>{const{boardSearchText:t}=e;return{boardSearchText:t}}),Bre=()=>{const e=te(),{boardSearchText:t}=H(zre),n=i.useRef(null),{t:r}=W(),o=i.useCallback(d=>{e(Lw(d))},[e]),s=i.useCallback(()=>{e(Lw(""))},[e]),l=i.useCallback(d=>{d.key==="Escape"&&s()},[s]),c=i.useCallback(d=>{o(d.target.value)},[o]);return i.useEffect(()=>{n.current&&n.current.focus()},[]),a.jsxs(cy,{children:[a.jsx(Qc,{ref:n,placeholder:r("boards.searchBoard"),value:t,onKeyDown:l,onChange:c,"data-testid":"board-search-input"}),t&&t.length&&a.jsx(lg,{children:a.jsx(rs,{onClick:s,size:"xs",variant:"ghost","aria-label":r("boards.clearSearch"),opacity:.5,icon:a.jsx(N8,{boxSize:2})})})]})},Hre=i.memo(Bre);function $8(e){return fA(e)}function Wre(e){return pA(e)}const L8=(e,t)=>{var o,s;if(!e||!(t!=null&&t.data.current))return!1;const{actionType:n}=e,{payloadType:r}=t.data.current;if(e.id===t.data.current.id)return!1;switch(n){case"ADD_FIELD_TO_LINEAR":return r==="NODE_FIELD";case"SET_CURRENT_IMAGE":return r==="IMAGE_DTO";case"SET_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_CONTROL_ADAPTER_IMAGE":return r==="IMAGE_DTO";case"SET_CANVAS_INITIAL_IMAGE":return r==="IMAGE_DTO";case"SET_NODES_IMAGE":return r==="IMAGE_DTO";case"SET_MULTI_NODES_IMAGE":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BATCH":return r==="IMAGE_DTO"||"IMAGE_DTOS";case"ADD_TO_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:c}=t.data.current.payload,d=c.board_id??"none",f=e.context.boardId;return d!==f}if(r==="IMAGE_DTOS"){const{imageDTOs:c}=t.data.current.payload,d=((o=c[0])==null?void 0:o.board_id)??"none",f=e.context.boardId;return d!==f}return!1}case"REMOVE_FROM_BOARD":{if(!(r==="IMAGE_DTO"||"IMAGE_DTOS"))return!1;if(r==="IMAGE_DTO"){const{imageDTO:c}=t.data.current.payload;return(c.board_id??"none")!=="none"}if(r==="IMAGE_DTOS"){const{imageDTOs:c}=t.data.current.payload;return(((s=c[0])==null?void 0:s.board_id)??"none")!=="none"}return!1}default:return!1}},Vre=e=>{const{isOver:t,label:n="Drop"}=e,r=i.useRef(Ya()),{colorMode:o}=ya();return a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsxs($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full"},children:[a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",bg:Te("base.700","base.900")(o),opacity:.7,borderRadius:"base",alignItems:"center",justifyContent:"center",transitionProperty:"common",transitionDuration:"0.1s"}}),a.jsx($,{sx:{position:"absolute",top:.5,insetInlineStart:.5,insetInlineEnd:.5,bottom:.5,opacity:1,borderWidth:2,borderColor:t?Te("base.50","base.50")(o):Te("base.200","base.300")(o),borderRadius:"lg",borderStyle:"dashed",transitionProperty:"common",transitionDuration:"0.1s",alignItems:"center",justifyContent:"center"},children:a.jsx(Ie,{sx:{fontSize:"2xl",fontWeight:600,transform:t?"scale(1.1)":"scale(1)",color:t?Te("base.50","base.50")(o):Te("base.200","base.300")(o),transitionProperty:"common",transitionDuration:"0.1s"},children:n})})]})},r.current)},F8=i.memo(Vre),Ure=e=>{const{dropLabel:t,data:n,disabled:r}=e,o=i.useRef(Ya()),{isOver:s,setNodeRef:l,active:c}=$8({id:o.current,disabled:r,data:n});return a.jsx(Ie,{ref:l,position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",pointerEvents:c?"auto":"none",children:a.jsx(hr,{children:L8(n,c)&&a.jsx(F8,{isOver:s,label:t})})})},u2=i.memo(Ure),Gre=({isSelected:e,isHovered:t})=>a.jsx(Ie,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e?1:.7,transitionProperty:"common",transitionDuration:"0.1s",pointerEvents:"none",shadow:e?t?"hoverSelected.light":"selected.light":t?"hoverUnselected.light":void 0,_dark:{shadow:e?t?"hoverSelected.dark":"selected.dark":t?"hoverUnselected.dark":void 0}}}),d2=i.memo(Gre),Kre=()=>{const{t:e}=W();return a.jsx($,{sx:{position:"absolute",insetInlineEnd:0,top:0,p:1},children:a.jsx(Sa,{variant:"solid",sx:{bg:"accent.400",_dark:{bg:"accent.500"}},children:e("common.auto")})})},z8=i.memo(Kre);function f2(e){const[t,n]=i.useState(!1),[r,o]=i.useState(!1),[s,l]=i.useState(!1),[c,d]=i.useState([0,0]),f=i.useRef(null);i.useEffect(()=>{if(t)setTimeout(()=>{o(!0),setTimeout(()=>{l(!0)})});else{l(!1);const g=setTimeout(()=>{o(t)},1e3);return()=>clearTimeout(g)}},[t]);const m=i.useCallback(()=>{n(!1),l(!1),o(!1)},[]);Yy(m),DB("contextmenu",g=>{var b;(b=f.current)!=null&&b.contains(g.target)||g.target===f.current?(g.preventDefault(),n(!0),d([g.pageX,g.pageY])):n(!1)});const h=i.useCallback(()=>{var g,b;(b=(g=e.menuProps)==null?void 0:g.onClose)==null||b.call(g),n(!1)},[e.menuProps]);return a.jsxs(a.Fragment,{children:[e.children(f),r&&a.jsx(Uc,{...e.portalProps,children:a.jsxs(of,{isOpen:s,gutter:0,...e.menuProps,onClose:h,children:[a.jsx(sf,{"aria-hidden":!0,w:1,h:1,style:{position:"absolute",left:c[0],top:c[1],cursor:"default"},...e.menuButtonProps}),e.renderMenu()]})})]})}const qg=e=>{const{boardName:t}=Wd(void 0,{selectFromResult:({data:n})=>{const r=n==null?void 0:n.find(s=>s.board_id===e);return{boardName:(r==null?void 0:r.board_name)||PI("boards.uncategorized")}}});return t},qre=({board:e,setBoardToDelete:t})=>{const{t:n}=W(),r=i.useCallback(()=>{t&&t(e)},[e,t]);return a.jsxs(a.Fragment,{children:[e.image_count>0&&a.jsx(a.Fragment,{}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClick:r,children:n("boards.deleteBoard")})]})},Xre=i.memo(qre),Qre=()=>a.jsx(a.Fragment,{}),Yre=i.memo(Qre),Zre=({board:e,board_id:t,setBoardToDelete:n,children:r})=>{const{t:o}=W(),s=te(),l=i.useMemo(()=>fe(pe,({gallery:w})=>{const S=w.autoAddBoardId===t,j=w.autoAssignBoardOnClick;return{isAutoAdd:S,autoAssignBoardOnClick:j}}),[t]),{isAutoAdd:c,autoAssignBoardOnClick:d}=H(l),f=qg(t),m=Mt("bulkDownload").isFeatureEnabled,[h]=EI(),g=i.useCallback(()=>{s(Kh(t))},[t,s]),b=i.useCallback(async()=>{try{const w=await h({image_names:[],board_id:t}).unwrap();s(lt({title:o("gallery.preparingDownload"),status:"success",...w.response?{description:w.response,duration:null,isClosable:!0}:{}}))}catch{s(lt({title:o("gallery.preparingDownloadFailed"),status:"error"}))}},[o,t,h,s]),y=i.useCallback(w=>{w.preventDefault()},[]),x=i.useCallback(()=>a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:y,children:a.jsxs(_d,{title:f,children:[a.jsx(At,{icon:a.jsx(nl,{}),isDisabled:c||d,onClick:g,children:o("boards.menuItemAutoAdd")}),m&&a.jsx(At,{icon:a.jsx(ou,{}),onClickCapture:b,children:o("boards.downloadBoard")}),!e&&a.jsx(Yre,{}),e&&a.jsx(Xre,{board:e,setBoardToDelete:n})]})}),[d,e,f,b,g,c,m,n,y,o]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:x,children:r})},B8=i.memo(Zre),Jre=({board:e,isSelected:t,setBoardToDelete:n})=>{const r=te(),o=i.useMemo(()=>fe(pe,({gallery:O})=>{const T=e.board_id===O.autoAddBoardId,U=O.autoAssignBoardOnClick;return{isSelectedForAutoAdd:T,autoAssignBoardOnClick:U}}),[e.board_id]),{isSelectedForAutoAdd:s,autoAssignBoardOnClick:l}=H(o),[c,d]=i.useState(!1),f=i.useCallback(()=>{d(!0)},[]),m=i.useCallback(()=>{d(!1)},[]),{data:h}=wx(e.board_id),{data:g}=Sx(e.board_id),b=i.useMemo(()=>{if(!((h==null?void 0:h.total)===void 0||(g==null?void 0:g.total)===void 0))return`${h.total} image${h.total===1?"":"s"}, ${g.total} asset${g.total===1?"":"s"}`},[g,h]),{currentData:y}=jo(e.cover_image_name??Br),{board_name:x,board_id:w}=e,[S,j]=i.useState(x),_=i.useCallback(()=>{r(MI({boardId:w})),l&&r(Kh(w))},[w,l,r]),[I,{isLoading:E}]=mA(),M=i.useMemo(()=>({id:w,actionType:"ADD_TO_BOARD",context:{boardId:w}}),[w]),D=i.useCallback(async O=>{if(!O.trim()){j(x);return}if(O!==x)try{const{board_name:T}=await I({board_id:w,changes:{board_name:O}}).unwrap();j(T)}catch{j(x)}},[w,x,I]),R=i.useCallback(O=>{j(O)},[]),{t:N}=W();return a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx($,{onMouseOver:f,onMouseOut:m,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",w:"full",h:"full"},children:a.jsx(B8,{board:e,board_id:w,setBoardToDelete:n,children:O=>a.jsx(Ut,{label:b,openDelay:1e3,hasArrow:!0,children:a.jsxs($,{ref:O,onClick:_,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[y!=null&&y.thumbnail_url?a.jsx(Ca,{src:y==null?void 0:y.thumbnail_url,draggable:!1,sx:{objectFit:"cover",w:"full",h:"full",maxH:"full",borderRadius:"base",borderBottomRadius:"lg"}}):a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(An,{boxSize:12,as:Xte,sx:{mt:-6,opacity:.7,color:"base.500",_dark:{color:"base.500"}}})}),s&&a.jsx(z8,{}),a.jsx(d2,{isSelected:t,isHovered:c}),a.jsx($,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:t?"accent.400":"base.500",color:t?"base.50":"base.100",_dark:{bg:t?"accent.500":"base.600",color:t?"base.50":"base.100"},lineHeight:"short",fontSize:"xs"},children:a.jsxs(ef,{value:S,isDisabled:E,submitOnBlur:!0,onChange:R,onSubmit:D,sx:{w:"full"},children:[a.jsx(Jd,{sx:{p:0,fontWeight:t?700:500,textAlign:"center",overflow:"hidden",textOverflow:"ellipsis"},noOfLines:1}),a.jsx(Zd,{sx:{p:0,_focusVisible:{p:0,textAlign:"center",boxShadow:"none"}}})]})}),a.jsx(u2,{data:M,dropLabel:a.jsx(be,{fontSize:"md",children:N("unifiedCanvas.move")})})]})})})})})},eoe=i.memo(Jre),toe=fe(pe,({gallery:e})=>{const{autoAddBoardId:t,autoAssignBoardOnClick:n}=e;return{autoAddBoardId:t,autoAssignBoardOnClick:n}}),H8=i.memo(({isSelected:e})=>{const t=te(),{autoAddBoardId:n,autoAssignBoardOnClick:r}=H(toe),o=qg("none"),s=i.useCallback(()=>{t(MI({boardId:"none"})),r&&t(Kh("none"))},[t,r]),[l,c]=i.useState(!1),{data:d}=wx("none"),{data:f}=Sx("none"),m=i.useMemo(()=>{if(!((d==null?void 0:d.total)===void 0||(f==null?void 0:f.total)===void 0))return`${d.total} image${d.total===1?"":"s"}, ${f.total} asset${f.total===1?"":"s"}`},[f,d]),h=i.useCallback(()=>{c(!0)},[]),g=i.useCallback(()=>{c(!1)},[]),b=i.useMemo(()=>({id:"no_board",actionType:"REMOVE_FROM_BOARD"}),[]),{t:y}=W();return a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none",userSelect:"none"},children:a.jsx($,{onMouseOver:h,onMouseOut:g,sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1",borderRadius:"base",w:"full",h:"full"},children:a.jsx(B8,{board_id:"none",children:x=>a.jsx(Ut,{label:m,openDelay:1e3,hasArrow:!0,children:a.jsxs($,{ref:x,onClick:s,sx:{w:"full",h:"full",position:"relative",justifyContent:"center",alignItems:"center",borderRadius:"base",cursor:"pointer",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center"},children:a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",sx:{opacity:.4,filter:"grayscale(1)",mt:-6,w:16,h:16,minW:16,minH:16,userSelect:"none"}})}),n==="none"&&a.jsx(z8,{}),a.jsx($,{sx:{position:"absolute",bottom:0,left:0,p:1,justifyContent:"center",alignItems:"center",w:"full",maxW:"full",borderBottomRadius:"base",bg:e?"accent.400":"base.500",color:e?"base.50":"base.100",_dark:{bg:e?"accent.500":"base.600",color:e?"base.50":"base.100"},lineHeight:"short",fontSize:"xs",fontWeight:e?700:500},children:o}),a.jsx(d2,{isSelected:e,isHovered:l}),a.jsx(u2,{data:b,dropLabel:a.jsx(be,{fontSize:"md",children:y("unifiedCanvas.move")})})]})})})})})});H8.displayName="HoverableBoard";const noe=i.memo(H8),roe=fe([pe],({gallery:e})=>{const{selectedBoardId:t,boardSearchText:n}=e;return{selectedBoardId:t,boardSearchText:n}}),ooe=e=>{const{isOpen:t}=e,{selectedBoardId:n,boardSearchText:r}=H(roe),{data:o}=Wd(),s=r?o==null?void 0:o.filter(d=>d.board_name.toLowerCase().includes(r.toLowerCase())):o,[l,c]=i.useState();return a.jsxs(a.Fragment,{children:[a.jsx(Xd,{in:t,animateOpacity:!0,children:a.jsxs($,{layerStyle:"first",sx:{flexDir:"column",gap:2,p:2,mt:2,borderRadius:"base"},children:[a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(Hre,{}),a.jsx(Lre,{})]}),a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"move",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsxs(sl,{className:"list-container","data-testid":"boards-list",sx:{gridTemplateColumns:"repeat(auto-fill, minmax(108px, 1fr));",maxH:346},children:[a.jsx(Sd,{sx:{p:1.5},"data-testid":"no-board",children:a.jsx(noe,{isSelected:n==="none"})}),s&&s.map((d,f)=>a.jsx(Sd,{sx:{p:1.5},"data-testid":`board-${f}`,children:a.jsx(eoe,{board:d,isSelected:n===d.board_id,setBoardToDelete:c})},d.board_id))]})})]})}),a.jsx(Sne,{boardToDelete:l,setBoardToDelete:c})]})},soe=i.memo(ooe),aoe=fe([pe],e=>{const{selectedBoardId:t}=e.gallery;return{selectedBoardId:t}}),loe=e=>{const{isOpen:t,onToggle:n}=e,{selectedBoardId:r}=H(aoe),o=qg(r),s=i.useMemo(()=>o.length>20?`${o.substring(0,20)}...`:o,[o]);return a.jsxs($,{as:ol,onClick:n,size:"sm",sx:{position:"relative",gap:2,w:"full",justifyContent:"space-between",alignItems:"center",px:2},children:[a.jsx(be,{noOfLines:1,sx:{fontWeight:600,w:"100%",textAlign:"center",color:"base.800",_dark:{color:"base.200"}},children:s}),a.jsx(Kg,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]})},ioe=i.memo(loe),coe=e=>{const{triggerComponent:t,children:n,hasArrow:r=!0,isLazy:o=!0,...s}=e;return a.jsxs(lf,{isLazy:o,...s,children:[a.jsx(yg,{children:t}),a.jsxs(cf,{shadow:"dark-lg",children:[r&&a.jsx(m6,{}),n]})]})},xf=i.memo(coe),uoe=e=>{const{label:t,...n}=e,{colorMode:r}=ya();return a.jsx(og,{colorScheme:"accent",...n,children:a.jsx(be,{sx:{fontSize:"sm",color:Te("base.800","base.200")(r)},children:t})})},yr=i.memo(uoe);function doe(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 16c1.671 0 3-1.331 3-3s-1.329-3-3-3-3 1.331-3 3 1.329 3 3 3z"}},{tag:"path",attr:{d:"M20.817 11.186a8.94 8.94 0 0 0-1.355-3.219 9.053 9.053 0 0 0-2.43-2.43 8.95 8.95 0 0 0-3.219-1.355 9.028 9.028 0 0 0-1.838-.18V2L8 5l3.975 3V6.002c.484-.002.968.044 1.435.14a6.961 6.961 0 0 1 2.502 1.053 7.005 7.005 0 0 1 1.892 1.892A6.967 6.967 0 0 1 19 13a7.032 7.032 0 0 1-.55 2.725 7.11 7.11 0 0 1-.644 1.188 7.2 7.2 0 0 1-.858 1.039 7.028 7.028 0 0 1-3.536 1.907 7.13 7.13 0 0 1-2.822 0 6.961 6.961 0 0 1-2.503-1.054 7.002 7.002 0 0 1-1.89-1.89A6.996 6.996 0 0 1 5 13H3a9.02 9.02 0 0 0 1.539 5.034 9.096 9.096 0 0 0 2.428 2.428A8.95 8.95 0 0 0 12 22a9.09 9.09 0 0 0 1.814-.183 9.014 9.014 0 0 0 3.218-1.355 8.886 8.886 0 0 0 1.331-1.099 9.228 9.228 0 0 0 1.1-1.332A8.952 8.952 0 0 0 21 13a9.09 9.09 0 0 0-.183-1.814z"}}]})(e)}const W8=_e((e,t)=>{const[n,r]=i.useState(!1),{label:o,value:s,min:l=1,max:c=100,step:d=1,onChange:f,tooltipSuffix:m="",withSliderMarks:h=!1,withInput:g=!1,isInteger:b=!1,inputWidth:y=16,withReset:x=!1,hideTooltip:w=!1,isCompact:S=!1,isDisabled:j=!1,sliderMarks:_,handleReset:I,sliderFormControlProps:E,sliderFormLabelProps:M,sliderMarkProps:D,sliderTrackProps:R,sliderThumbProps:N,sliderNumberInputProps:O,sliderNumberInputFieldProps:T,sliderNumberInputStepperProps:U,sliderTooltipProps:G,sliderIAIIconButtonProps:q,...Y}=e,Q=te(),{t:V}=W(),[se,ee]=i.useState(String(s));i.useEffect(()=>{ee(s)},[s]);const le=i.useMemo(()=>O!=null&&O.min?O.min:l,[l,O==null?void 0:O.min]),ae=i.useMemo(()=>O!=null&&O.max?O.max:c,[c,O==null?void 0:O.max]),ce=i.useCallback(Z=>{f(Z)},[f]),J=i.useCallback(Z=>{Z.target.value===""&&(Z.target.value=String(le));const me=Zl(b?Math.floor(Number(Z.target.value)):Number(se),le,ae),ve=Ku(me,d);f(ve),ee(ve)},[b,se,le,ae,f,d]),re=i.useCallback(Z=>{ee(Z)},[]),A=i.useCallback(()=>{I&&I()},[I]),L=i.useCallback(Z=>{Z.target instanceof HTMLDivElement&&Z.target.focus()},[]),K=i.useCallback(Z=>{Z.shiftKey&&Q(zr(!0))},[Q]),ne=i.useCallback(Z=>{Z.shiftKey||Q(zr(!1))},[Q]),z=i.useCallback(()=>r(!0),[]),oe=i.useCallback(()=>r(!1),[]),X=i.useCallback(()=>f(Number(se)),[se,f]);return a.jsxs(Gt,{ref:t,onClick:L,sx:S?{display:"flex",flexDirection:"row",alignItems:"center",columnGap:4,margin:0,padding:0}:{},isDisabled:j,...E,children:[o&&a.jsx(ln,{sx:g?{mb:-1.5}:{},...M,children:o}),a.jsxs(ug,{w:"100%",gap:2,alignItems:"center",children:[a.jsxs(Sy,{"aria-label":o,value:s,min:l,max:c,step:d,onChange:ce,onMouseEnter:z,onMouseLeave:oe,focusThumbOnChange:!1,isDisabled:j,...Y,children:[h&&!_&&a.jsxs(a.Fragment,{children:[a.jsx(Zi,{value:l,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...D,children:l}),a.jsx(Zi,{value:c,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...D,children:c})]}),h&&_&&a.jsx(a.Fragment,{children:_.map((Z,me)=>me===0?a.jsx(Zi,{value:Z,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},...D,children:Z},Z):me===_.length-1?a.jsx(Zi,{value:Z,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},...D,children:Z},Z):a.jsx(Zi,{value:Z,sx:{transform:"translateX(-50%)"},...D,children:Z},Z))}),a.jsx(jy,{...R,children:a.jsx(_y,{})}),a.jsx(Ut,{hasArrow:!0,placement:"top",isOpen:n,label:`${s}${m}`,hidden:w,...G,children:a.jsx(ky,{...N,zIndex:0})})]}),g&&a.jsxs(mg,{min:le,max:ae,step:d,value:se,onChange:re,onBlur:J,focusInputOnChange:!1,...O,children:[a.jsx(gg,{onKeyDown:K,onKeyUp:ne,minWidth:y,...T}),a.jsxs(hg,{...U,children:[a.jsx(bg,{onClick:X}),a.jsx(vg,{onClick:X})]})]}),x&&a.jsx(Fe,{size:"sm","aria-label":V("accessibility.reset"),tooltip:V("accessibility.reset"),icon:a.jsx(doe,{}),isDisabled:j,onClick:A,...q})]})]})});W8.displayName="IAISlider";const nt=i.memo(W8),V8=i.forwardRef(({label:e,tooltip:t,description:n,disabled:r,...o},s)=>a.jsx(Ut,{label:t,placement:"top",hasArrow:!0,openDelay:500,children:a.jsx(Ie,{ref:s,...o,children:a.jsxs(Ie,{children:[a.jsx(Oc,{children:e}),n&&a.jsx(Oc,{size:"xs",color:"base.600",children:n})]})})}));V8.displayName="IAIMantineSelectItemWithTooltip";const xl=i.memo(V8),foe=fe([pe],({gallery:e})=>{const{autoAddBoardId:t,autoAssignBoardOnClick:n}=e;return{autoAddBoardId:t,autoAssignBoardOnClick:n}}),poe=()=>{const e=te(),{t}=W(),{autoAddBoardId:n,autoAssignBoardOnClick:r}=H(foe),o=i.useRef(null),{boards:s,hasBoards:l}=Wd(void 0,{selectFromResult:({data:f})=>{const m=[{label:"None",value:"none"}];return f==null||f.forEach(({board_id:h,board_name:g})=>{m.push({label:g,value:h})}),{boards:m,hasBoards:m.length>1}}}),c=i.useCallback(f=>{f&&e(Kh(f))},[e]),d=i.useCallback((f,m)=>{var h;return((h=m.label)==null?void 0:h.toLowerCase().includes(f.toLowerCase().trim()))||m.value.toLowerCase().includes(f.toLowerCase().trim())},[]);return a.jsx(sn,{label:t("boards.autoAddBoard"),inputRef:o,autoFocus:!0,placeholder:t("boards.selectBoard"),value:n,data:s,nothingFound:t("boards.noMatching"),itemComponent:xl,disabled:!l||r,filter:d,onChange:c})},moe=i.memo(poe),hoe=fe([pe],e=>{const{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r}=e.gallery;return{galleryImageMinimumWidth:t,shouldAutoSwitch:n,autoAssignBoardOnClick:r}}),goe=()=>{const e=te(),{t}=W(),{galleryImageMinimumWidth:n,shouldAutoSwitch:r,autoAssignBoardOnClick:o}=H(hoe),s=i.useCallback(f=>{e(Fw(f))},[e]),l=i.useCallback(()=>{e(Fw(64))},[e]),c=i.useCallback(f=>{e(hA(f.target.checked))},[e]),d=i.useCallback(f=>e(gA(f.target.checked)),[e]);return a.jsx(xf,{triggerComponent:a.jsx(Fe,{tooltip:t("gallery.gallerySettings"),"aria-label":t("gallery.gallerySettings"),size:"sm",icon:a.jsx(QM,{})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(nt,{value:n,onChange:s,min:45,max:256,hideTooltip:!0,label:t("gallery.galleryImageSize"),withReset:!0,handleReset:l}),a.jsx(_n,{label:t("gallery.autoSwitchNewImages"),isChecked:r,onChange:c}),a.jsx(yr,{label:t("gallery.autoAssignBoardOnClick"),isChecked:o,onChange:d}),a.jsx(moe,{})]})})},voe=i.memo(goe),boe=e=>e.image?a.jsx(wg,{sx:{w:`${e.image.width}px`,h:"auto",objectFit:"contain",aspectRatio:`${e.image.width}/${e.image.height}`}}):a.jsx($,{sx:{opacity:.7,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(va,{size:"xl"})}),Tn=e=>{const{icon:t=si,boxSize:n=16,sx:r,...o}=e;return a.jsxs($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...r},...o,children:[t&&a.jsx(An,{as:t,boxSize:n,opacity:.7}),e.label&&a.jsx(be,{textAlign:"center",children:e.label})]})},U8=e=>{const{sx:t,...n}=e;return a.jsxs($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",flexDir:"column",gap:2,userSelect:"none",opacity:.7,color:"base.700",_dark:{color:"base.500"},...t},...n,children:[a.jsx(va,{size:"xl"}),e.label&&a.jsx(be,{textAlign:"center",children:e.label})]})},Gb=(e,t)=>e>(t.endIndex-t.startIndex)/2+t.startIndex?"end":"start",lc=xA({virtuosoRef:void 0,virtuosoRangeRef:void 0}),xoe=fe([pe,kx],(e,t)=>{var j,_;const{data:n,status:r}=vA.endpoints.listImages.select(t)(e),{data:o}=e.gallery.galleryView==="images"?zw.endpoints.getBoardImagesTotal.select(t.board_id??"none")(e):zw.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(e),s=e.gallery.selection[e.gallery.selection.length-1],l=r==="pending";if(!n||!s||(o==null?void 0:o.total)===0)return{isFetching:l,queryArgs:t,isOnFirstImage:!0,isOnLastImage:!0};const c={...t,offset:n.ids.length,limit:OI},d=bA.getSelectors(),f=d.selectAll(n),m=f.findIndex(I=>I.image_name===s.image_name),h=Zl(m+1,0,f.length-1),g=Zl(m-1,0,f.length-1),b=(j=f[h])==null?void 0:j.image_name,y=(_=f[g])==null?void 0:_.image_name,x=b?d.selectById(n,b):void 0,w=y?d.selectById(n,y):void 0,S=f.length;return{loadedImagesCount:f.length,currentImageIndex:m,areMoreImagesAvailable:((o==null?void 0:o.total)??0)>S,isFetching:r==="pending",nextImage:x,prevImage:w,nextImageIndex:h,prevImageIndex:g,queryArgs:c}}),G8=()=>{const e=te(),{nextImage:t,nextImageIndex:n,prevImage:r,prevImageIndex:o,areMoreImagesAvailable:s,isFetching:l,queryArgs:c,loadedImagesCount:d,currentImageIndex:f}=H(xoe),m=i.useCallback(()=>{var w,S;r&&e(Bw(r));const y=(w=lc.get().virtuosoRangeRef)==null?void 0:w.current,x=(S=lc.get().virtuosoRef)==null?void 0:S.current;!y||!x||o!==void 0&&(oy.endIndex)&&x.scrollToIndex({index:o,behavior:"smooth",align:Gb(o,y)})},[e,r,o]),h=i.useCallback(()=>{var w,S;t&&e(Bw(t));const y=(w=lc.get().virtuosoRangeRef)==null?void 0:w.current,x=(S=lc.get().virtuosoRef)==null?void 0:S.current;!y||!x||n!==void 0&&(ny.endIndex)&&x.scrollToIndex({index:n,behavior:"smooth",align:Gb(n,y)})},[e,t,n]),[g]=DI(),b=i.useCallback(()=>{g(c)},[g,c]);return{handlePrevImage:m,handleNextImage:h,isOnFirstImage:f===0,isOnLastImage:f!==void 0&&f===d-1,nextImage:t,prevImage:r,areMoreImagesAvailable:s,handleLoadMoreImages:b,isFetching:l}},Xg=0,yl=1,lu=2,K8=4;function q8(e,t){return n=>e(t(n))}function yoe(e,t){return t(e)}function X8(e,t){return n=>e(t,n)}function Gj(e,t){return()=>e(t)}function Qg(e,t){return t(e),e}function Cn(...e){return e}function Coe(e){e()}function Kj(e){return()=>e}function woe(...e){return()=>{e.map(Coe)}}function p2(e){return e!==void 0}function iu(){}function Zt(e,t){return e(yl,t)}function St(e,t){e(Xg,t)}function m2(e){e(lu)}function to(e){return e(K8)}function at(e,t){return Zt(e,X8(t,Xg))}function ha(e,t){const n=e(yl,r=>{n(),t(r)});return n}function Nt(){const e=[];return(t,n)=>{switch(t){case lu:e.splice(0,e.length);return;case yl:return e.push(n),()=>{const r=e.indexOf(n);r>-1&&e.splice(r,1)};case Xg:e.slice().forEach(r=>{r(n)});return;default:throw new Error(`unrecognized action ${t}`)}}}function Be(e){let t=e;const n=Nt();return(r,o)=>{switch(r){case yl:o(t);break;case Xg:t=o;break;case K8:return t}return n(r,o)}}function Soe(e){let t,n;const r=()=>t&&t();return function(o,s){switch(o){case yl:return s?n===s?void 0:(r(),n=s,t=Zt(e,s),t):(r(),iu);case lu:r(),n=null;return;default:throw new Error(`unrecognized action ${o}`)}}}function ro(e){return Qg(Nt(),t=>at(e,t))}function wr(e,t){return Qg(Be(t),n=>at(e,n))}function koe(...e){return t=>e.reduceRight(yoe,t)}function Ee(e,...t){const n=koe(...t);return(r,o)=>{switch(r){case yl:return Zt(e,n(o));case lu:m2(e);return}}}function Q8(e,t){return e===t}function vn(e=Q8){let t;return n=>r=>{e(t,r)||(t=r,n(r))}}function gt(e){return t=>n=>{e(n)&&t(n)}}function Ze(e){return t=>q8(t,e)}function Zs(e){return t=>()=>t(e)}function js(e,t){return n=>r=>n(t=e(t,r))}function Fc(e){return t=>n=>{e>0?e--:t(n)}}function Qa(e){let t=null,n;return r=>o=>{t=o,!n&&(n=setTimeout(()=>{n=void 0,r(t)},e))}}function qj(e){let t,n;return r=>o=>{t=o,n&&clearTimeout(n),n=setTimeout(()=>{r(t)},e)}}function Pt(...e){const t=new Array(e.length);let n=0,r=null;const o=Math.pow(2,e.length)-1;return e.forEach((s,l)=>{const c=Math.pow(2,l);Zt(s,d=>{const f=n;n=n|c,t[l]=d,f!==o&&n===o&&r&&(r(),r=null)})}),s=>l=>{const c=()=>s([l].concat(t));n===o?c():r=c}}function Xj(...e){return function(t,n){switch(t){case yl:return woe(...e.map(r=>Zt(r,n)));case lu:return;default:throw new Error(`unrecognized action ${t}`)}}}function ht(e,t=Q8){return Ee(e,vn(t))}function er(...e){const t=Nt(),n=new Array(e.length);let r=0;const o=Math.pow(2,e.length)-1;return e.forEach((s,l)=>{const c=Math.pow(2,l);Zt(s,d=>{n[l]=d,r=r|c,r===o&&St(t,n)})}),function(s,l){switch(s){case yl:return r===o&&l(n),Zt(t,l);case lu:return m2(t);default:throw new Error(`unrecognized action ${s}`)}}}function Yt(e,t=[],{singleton:n}={singleton:!0}){return{id:joe(),constructor:e,dependencies:t,singleton:n}}const joe=()=>Symbol();function _oe(e){const t=new Map,n=({id:r,constructor:o,dependencies:s,singleton:l})=>{if(l&&t.has(r))return t.get(r);const c=o(s.map(d=>n(d)));return l&&t.set(r,c),c};return n(e)}function Ioe(e,t){const n={},r={};let o=0;const s=e.length;for(;o(w[S]=j=>{const _=x[t.methods[S]];St(_,j)},w),{})}function m(x){return l.reduce((w,S)=>(w[S]=Soe(x[t.events[S]]),w),{})}return{Component:B.forwardRef((x,w)=>{const{children:S,...j}=x,[_]=B.useState(()=>Qg(_oe(e),E=>d(E,j))),[I]=B.useState(Gj(m,_));return Qp(()=>{for(const E of l)E in j&&Zt(I[E],j[E]);return()=>{Object.values(I).map(m2)}},[j,I,_]),Qp(()=>{d(_,j)}),B.useImperativeHandle(w,Kj(f(_))),B.createElement(c.Provider,{value:_},n?B.createElement(n,Ioe([...r,...o,...l],j),S):S)}),usePublisher:x=>B.useCallback(X8(St,B.useContext(c)[x]),[x]),useEmitterValue:x=>{const S=B.useContext(c)[x],[j,_]=B.useState(Gj(to,S));return Qp(()=>Zt(S,I=>{I!==j&&_(Kj(I))}),[S,j]),j},useEmitter:(x,w)=>{const j=B.useContext(c)[x];Qp(()=>Zt(j,w),[w,j])}}}const Poe=typeof document<"u"?B.useLayoutEffect:B.useEffect,Eoe=Poe;var oo=(e=>(e[e.DEBUG=0]="DEBUG",e[e.INFO=1]="INFO",e[e.WARN=2]="WARN",e[e.ERROR=3]="ERROR",e))(oo||{});const Moe={0:"debug",1:"log",2:"warn",3:"error"},Ooe=()=>typeof globalThis>"u"?window:globalThis,Cl=Yt(()=>{const e=Be(3);return{log:Be((n,r,o=1)=>{var s;const l=(s=Ooe().VIRTUOSO_LOG_LEVEL)!=null?s:to(e);o>=l&&console[Moe[o]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",n,r)}),logLevel:e}},[],{singleton:!0});function h2(e,t=!0){const n=B.useRef(null);let r=o=>{};if(typeof ResizeObserver<"u"){const o=B.useMemo(()=>new ResizeObserver(s=>{const l=s[0].target;l.offsetParent!==null&&e(l)}),[e]);r=s=>{s&&t?(o.observe(s),n.current=s):(n.current&&o.unobserve(n.current),n.current=null)}}return{ref:n,callbackRef:r}}function mi(e,t=!0){return h2(e,t).callbackRef}function Doe(e,t,n,r,o,s,l){const c=B.useCallback(d=>{const f=Roe(d.children,t,"offsetHeight",o);let m=d.parentElement;for(;!m.dataset.virtuosoScroller;)m=m.parentElement;const h=m.lastElementChild.dataset.viewportType==="window",g=l?l.scrollTop:h?window.pageYOffset||document.documentElement.scrollTop:m.scrollTop,b=l?l.scrollHeight:h?document.documentElement.scrollHeight:m.scrollHeight,y=l?l.offsetHeight:h?window.innerHeight:m.offsetHeight;r({scrollTop:Math.max(g,0),scrollHeight:b,viewportHeight:y}),s==null||s(Aoe("row-gap",getComputedStyle(d).rowGap,o)),f!==null&&e(f)},[e,t,o,s,l,r]);return h2(c,n)}function Roe(e,t,n,r){const o=e.length;if(o===0)return null;const s=[];for(let l=0;l{const g=h.target,b=g===window||g===document,y=b?window.pageYOffset||document.documentElement.scrollTop:g.scrollTop,x=b?document.documentElement.scrollHeight:g.scrollHeight,w=b?window.innerHeight:g.offsetHeight,S=()=>{e({scrollTop:Math.max(y,0),scrollHeight:x,viewportHeight:w})};h.suppressFlushSync?S():yA.flushSync(S),l.current!==null&&(y===l.current||y<=0||y===x-w)&&(l.current=null,t(!0),c.current&&(clearTimeout(c.current),c.current=null))},[e,t]);B.useEffect(()=>{const h=o||s.current;return r(o||s.current),d({target:h,suppressFlushSync:!0}),h.addEventListener("scroll",d,{passive:!0}),()=>{r(null),h.removeEventListener("scroll",d)}},[s,d,n,r,o]);function f(h){const g=s.current;if(!g||"offsetHeight"in g&&g.offsetHeight===0)return;const b=h.behavior==="smooth";let y,x,w;g===window?(x=Math.max(dl(document.documentElement,"height"),document.documentElement.scrollHeight),y=window.innerHeight,w=document.documentElement.scrollTop):(x=g.scrollHeight,y=dl(g,"height"),w=g.scrollTop);const S=x-y;if(h.top=Math.ceil(Math.max(Math.min(S,h.top),0)),Z8(y,x)||h.top===w){e({scrollTop:w,scrollHeight:x,viewportHeight:y}),b&&t(!0);return}b?(l.current=h.top,c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{c.current=null,l.current=null,t(!0)},1e3)):l.current=null,g.scrollTo(h)}function m(h){s.current.scrollBy(h)}return{scrollerRef:s,scrollByCallback:m,scrollToCallback:f}}const Ir=Yt(()=>{const e=Nt(),t=Nt(),n=Be(0),r=Nt(),o=Be(0),s=Nt(),l=Nt(),c=Be(0),d=Be(0),f=Be(0),m=Be(0),h=Nt(),g=Nt(),b=Be(!1);return at(Ee(e,Ze(({scrollTop:y})=>y)),t),at(Ee(e,Ze(({scrollHeight:y})=>y)),l),at(t,o),{scrollContainerState:e,scrollTop:t,viewportHeight:s,headerHeight:c,fixedHeaderHeight:d,fixedFooterHeight:f,footerHeight:m,scrollHeight:l,smoothScrollTargetReached:r,scrollTo:h,scrollBy:g,statefulScrollTop:o,deviation:n,scrollingInProgress:b}},[],{singleton:!0}),Rd={lvl:0};function e7(e,t,n,r=Rd,o=Rd){return{k:e,v:t,lvl:n,l:r,r:o}}function on(e){return e===Rd}function Sc(){return Rd}function Kb(e,t){if(on(e))return Rd;const{k:n,l:r,r:o}=e;if(t===n){if(on(r))return o;if(on(o))return r;{const[s,l]=t7(r);return gm(Kn(e,{k:s,v:l,l:n7(r)}))}}else return tt&&(c=c.concat(qb(s,t,n))),r>=t&&r<=n&&c.push({k:r,v:o}),r<=n&&(c=c.concat(qb(l,t,n))),c}function Hl(e){return on(e)?[]:[...Hl(e.l),{k:e.k,v:e.v},...Hl(e.r)]}function t7(e){return on(e.r)?[e.k,e.v]:t7(e.r)}function n7(e){return on(e.r)?e.l:gm(Kn(e,{r:n7(e.r)}))}function Kn(e,t){return e7(t.k!==void 0?t.k:e.k,t.v!==void 0?t.v:e.v,t.lvl!==void 0?t.lvl:e.lvl,t.l!==void 0?t.l:e.l,t.r!==void 0?t.r:e.r)}function g1(e){return on(e)||e.lvl>e.r.lvl}function Qj(e){return Xb(o7(e))}function gm(e){const{l:t,r:n,lvl:r}=e;if(n.lvl>=r-1&&t.lvl>=r-1)return e;if(r>n.lvl+1){if(g1(t))return o7(Kn(e,{lvl:r-1}));if(!on(t)&&!on(t.r))return Kn(t.r,{l:Kn(t,{r:t.r.l}),r:Kn(e,{l:t.r.r,lvl:r-1}),lvl:r});throw new Error("Unexpected empty nodes")}else{if(g1(e))return Xb(Kn(e,{lvl:r-1}));if(!on(n)&&!on(n.l)){const o=n.l,s=g1(o)?n.lvl-1:n.lvl;return Kn(o,{l:Kn(e,{r:o.l,lvl:r-1}),r:Xb(Kn(n,{l:o.r,lvl:s})),lvl:o.lvl+1})}else throw new Error("Unexpected empty nodes")}}function Yg(e,t,n){if(on(e))return[];const r=us(e,t)[0];return Toe(qb(e,r,n))}function r7(e,t){const n=e.length;if(n===0)return[];let{index:r,value:o}=t(e[0]);const s=[];for(let l=1;l({index:t,value:n}))}function Xb(e){const{r:t,lvl:n}=e;return!on(t)&&!on(t.r)&&t.lvl===n&&t.r.lvl===n?Kn(t,{l:Kn(e,{r:t.l}),lvl:n+1}):e}function o7(e){const{l:t}=e;return!on(t)&&t.lvl===e.lvl?Kn(t,{r:Kn(e,{l:t.r})}):e}function Nh(e,t,n,r=0){let o=e.length-1;for(;r<=o;){const s=Math.floor((r+o)/2),l=e[s],c=n(l,t);if(c===0)return s;if(c===-1){if(o-r<2)return s-1;o=s-1}else{if(o===r)return s;r=s+1}}throw new Error(`Failed binary finding record in array - ${e.join(",")}, searched for ${t}`)}function s7(e,t,n){return e[Nh(e,t,n)]}function Noe(e,t,n,r){const o=Nh(e,t,r),s=Nh(e,n,r,o);return e.slice(o,s+1)}const g2=Yt(()=>({recalcInProgress:Be(!1)}),[],{singleton:!0});function $oe(e){const{size:t,startIndex:n,endIndex:r}=e;return o=>o.start===n&&(o.end===r||o.end===1/0)&&o.value===t}function Yj(e,t){let n=0,r=0;for(;n=m||o===g)&&(e=Kb(e,m)):(f=g!==o,d=!0),h>l&&l>=m&&g!==o&&(e=eo(e,l+1,g));f&&(e=eo(e,s,o))}return[e,n]}function Foe(){return{offsetTree:[],sizeTree:Sc(),groupOffsetTree:Sc(),lastIndex:0,lastOffset:0,lastSize:0,groupIndices:[]}}function v2({index:e},t){return t===e?0:t0&&(t=Math.max(t,s7(e,r,v2).offset)),r7(Noe(e,t,n,zoe),Boe)}function Qb(e,t,n,r){let o=e,s=0,l=0,c=0,d=0;if(t!==0){d=Nh(o,t-1,v2),c=o[d].offset;const m=us(n,t-1);s=m[0],l=m[1],o.length&&o[d].size===us(n,t)[1]&&(d-=1),o=o.slice(0,d+1)}else o=[];for(const{start:f,value:m}of Yg(n,t,1/0)){const h=f-s,g=h*l+c+h*r;o.push({offset:g,size:m,index:f}),s=f,c=g,l=m}return{offsetTree:o,lastIndex:s,lastOffset:c,lastSize:l}}function Woe(e,[t,n,r,o]){t.length>0&&r("received item sizes",t,oo.DEBUG);const s=e.sizeTree;let l=s,c=0;if(n.length>0&&on(s)&&t.length===2){const g=t[0].size,b=t[1].size;l=n.reduce((y,x)=>eo(eo(y,x,g),x+1,b),l)}else[l,c]=Loe(l,t);if(l===s)return e;const{offsetTree:d,lastIndex:f,lastSize:m,lastOffset:h}=Qb(e.offsetTree,c,l,o);return{sizeTree:l,offsetTree:d,lastIndex:f,lastOffset:h,lastSize:m,groupOffsetTree:n.reduce((g,b)=>eo(g,b,Td(b,d,o)),Sc()),groupIndices:n}}function Td(e,t,n){if(t.length===0)return 0;const{offset:r,index:o,size:s}=s7(t,e,v2),l=e-o,c=s*l+(l-1)*n+r;return c>0?c+n:c}function Voe(e){return typeof e.groupIndex<"u"}function a7(e,t,n){if(Voe(e))return t.groupIndices[e.groupIndex]+1;{const r=e.index==="LAST"?n:e.index;let o=l7(r,t);return o=Math.max(0,o,Math.min(n,o)),o}}function l7(e,t){if(!Zg(t))return e;let n=0;for(;t.groupIndices[n]<=e+n;)n++;return e+n}function Zg(e){return!on(e.groupOffsetTree)}function Uoe(e){return Hl(e).map(({k:t,v:n},r,o)=>{const s=o[r+1],l=s?s.k-1:1/0;return{startIndex:t,endIndex:l,size:n}})}const Goe={offsetHeight:"height",offsetWidth:"width"},Bs=Yt(([{log:e},{recalcInProgress:t}])=>{const n=Nt(),r=Nt(),o=wr(r,0),s=Nt(),l=Nt(),c=Be(0),d=Be([]),f=Be(void 0),m=Be(void 0),h=Be((E,M)=>dl(E,Goe[M])),g=Be(void 0),b=Be(0),y=Foe(),x=wr(Ee(n,Pt(d,e,b),js(Woe,y),vn()),y),w=wr(Ee(d,vn(),js((E,M)=>({prev:E.current,current:M}),{prev:[],current:[]}),Ze(({prev:E})=>E)),[]);at(Ee(d,gt(E=>E.length>0),Pt(x,b),Ze(([E,M,D])=>{const R=E.reduce((N,O,T)=>eo(N,O,Td(O,M.offsetTree,D)||T),Sc());return{...M,groupIndices:E,groupOffsetTree:R}})),x),at(Ee(r,Pt(x),gt(([E,{lastIndex:M}])=>E[{startIndex:E,endIndex:M,size:D}])),n),at(f,m);const S=wr(Ee(f,Ze(E=>E===void 0)),!0);at(Ee(m,gt(E=>E!==void 0&&on(to(x).sizeTree)),Ze(E=>[{startIndex:0,endIndex:0,size:E}])),n);const j=ro(Ee(n,Pt(x),js(({sizes:E},[M,D])=>({changed:D!==E,sizes:D}),{changed:!1,sizes:y}),Ze(E=>E.changed)));Zt(Ee(c,js((E,M)=>({diff:E.prev-M,prev:M}),{diff:0,prev:0}),Ze(E=>E.diff)),E=>{const{groupIndices:M}=to(x);if(E>0)St(t,!0),St(s,E+Yj(E,M));else if(E<0){const D=to(w);D.length>0&&(E-=Yj(-E,D)),St(l,E)}}),Zt(Ee(c,Pt(e)),([E,M])=>{E<0&&M("`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value",{firstItemIndex:c},oo.ERROR)});const _=ro(s);at(Ee(s,Pt(x),Ze(([E,M])=>{const D=M.groupIndices.length>0,R=[],N=M.lastSize;if(D){const O=Ad(M.sizeTree,0);let T=0,U=0;for(;T{let se=Y.ranges;return Y.prevSize!==0&&(se=[...Y.ranges,{startIndex:Y.prevIndex,endIndex:Q+E-1,size:Y.prevSize}]),{ranges:se,prevIndex:Q+E,prevSize:V}},{ranges:R,prevIndex:E,prevSize:0}).ranges}return Hl(M.sizeTree).reduce((O,{k:T,v:U})=>({ranges:[...O.ranges,{startIndex:O.prevIndex,endIndex:T+E-1,size:O.prevSize}],prevIndex:T+E,prevSize:U}),{ranges:[],prevIndex:0,prevSize:N}).ranges})),n);const I=ro(Ee(l,Pt(x,b),Ze(([E,{offsetTree:M},D])=>{const R=-E;return Td(R,M,D)})));return at(Ee(l,Pt(x,b),Ze(([E,M,D])=>{if(M.groupIndices.length>0){if(on(M.sizeTree))return M;let N=Sc();const O=to(w);let T=0,U=0,G=0;for(;T<-E;){G=O[U];const Y=O[U+1]-G-1;U++,T+=Y+1}if(N=Hl(M.sizeTree).reduce((Y,{k:Q,v:V})=>eo(Y,Math.max(0,Q+E),V),N),T!==-E){const Y=Ad(M.sizeTree,G);N=eo(N,0,Y);const Q=us(M.sizeTree,-E+1)[1];N=eo(N,1,Q)}return{...M,sizeTree:N,...Qb(M.offsetTree,0,N,D)}}else{const N=Hl(M.sizeTree).reduce((O,{k:T,v:U})=>eo(O,Math.max(0,T+E),U),Sc());return{...M,sizeTree:N,...Qb(M.offsetTree,0,N,D)}}})),x),{data:g,totalCount:r,sizeRanges:n,groupIndices:d,defaultItemSize:m,fixedItemSize:f,unshiftWith:s,shiftWith:l,shiftWithOffset:I,beforeUnshiftWith:_,firstItemIndex:c,gap:b,sizes:x,listRefresh:j,statefulTotalCount:o,trackItemSizes:S,itemSize:h}},Cn(Cl,g2),{singleton:!0}),Koe=typeof document<"u"&&"scrollBehavior"in document.documentElement.style;function i7(e){const t=typeof e=="number"?{index:e}:e;return t.align||(t.align="start"),(!t.behavior||!Koe)&&(t.behavior="auto"),t.offset||(t.offset=0),t}const yf=Yt(([{sizes:e,totalCount:t,listRefresh:n,gap:r},{scrollingInProgress:o,viewportHeight:s,scrollTo:l,smoothScrollTargetReached:c,headerHeight:d,footerHeight:f,fixedHeaderHeight:m,fixedFooterHeight:h},{log:g}])=>{const b=Nt(),y=Be(0);let x=null,w=null,S=null;function j(){x&&(x(),x=null),S&&(S(),S=null),w&&(clearTimeout(w),w=null),St(o,!1)}return at(Ee(b,Pt(e,s,t,y,d,f,g),Pt(r,m,h),Ze(([[_,I,E,M,D,R,N,O],T,U,G])=>{const q=i7(_),{align:Y,behavior:Q,offset:V}=q,se=M-1,ee=a7(q,I,se);let le=Td(ee,I.offsetTree,T)+R;Y==="end"?(le+=U+us(I.sizeTree,ee)[1]-E+G,ee===se&&(le+=N)):Y==="center"?le+=(U+us(I.sizeTree,ee)[1]-E+G)/2:le-=D,V&&(le+=V);const ae=ce=>{j(),ce?(O("retrying to scroll to",{location:_},oo.DEBUG),St(b,_)):O("list did not change, scroll successful",{},oo.DEBUG)};if(j(),Q==="smooth"){let ce=!1;S=Zt(n,J=>{ce=ce||J}),x=ha(c,()=>{ae(ce)})}else x=ha(Ee(n,qoe(150)),ae);return w=setTimeout(()=>{j()},1200),St(o,!0),O("scrolling from index to",{index:ee,top:le,behavior:Q},oo.DEBUG),{top:le,behavior:Q}})),l),{scrollToIndex:b,topListHeight:y}},Cn(Bs,Ir,Cl),{singleton:!0});function qoe(e){return t=>{const n=setTimeout(()=>{t(!1)},e);return r=>{r&&(t(!0),clearTimeout(n))}}}const Nd="up",fd="down",Xoe="none",Qoe={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollTop:0,viewportHeight:0,scrollHeight:0}},Yoe=0,Cf=Yt(([{scrollContainerState:e,scrollTop:t,viewportHeight:n,headerHeight:r,footerHeight:o,scrollBy:s}])=>{const l=Be(!1),c=Be(!0),d=Nt(),f=Nt(),m=Be(4),h=Be(Yoe),g=wr(Ee(Xj(Ee(ht(t),Fc(1),Zs(!0)),Ee(ht(t),Fc(1),Zs(!1),qj(100))),vn()),!1),b=wr(Ee(Xj(Ee(s,Zs(!0)),Ee(s,Zs(!1),qj(200))),vn()),!1);at(Ee(er(ht(t),ht(h)),Ze(([j,_])=>j<=_),vn()),c),at(Ee(c,Qa(50)),f);const y=ro(Ee(er(e,ht(n),ht(r),ht(o),ht(m)),js((j,[{scrollTop:_,scrollHeight:I},E,M,D,R])=>{const N=_+E-I>-R,O={viewportHeight:E,scrollTop:_,scrollHeight:I};if(N){let U,G;return _>j.state.scrollTop?(U="SCROLLED_DOWN",G=j.state.scrollTop-_):(U="SIZE_DECREASED",G=j.state.scrollTop-_||j.scrollTopDelta),{atBottom:!0,state:O,atBottomBecause:U,scrollTopDelta:G}}let T;return O.scrollHeight>j.state.scrollHeight?T="SIZE_INCREASED":Ej&&j.atBottom===_.atBottom))),x=wr(Ee(e,js((j,{scrollTop:_,scrollHeight:I,viewportHeight:E})=>{if(Z8(j.scrollHeight,I))return{scrollTop:_,scrollHeight:I,jump:0,changed:!1};{const M=I-(_+E)<1;return j.scrollTop!==_&&M?{scrollHeight:I,scrollTop:_,jump:j.scrollTop-_,changed:!0}:{scrollHeight:I,scrollTop:_,jump:0,changed:!0}}},{scrollHeight:0,jump:0,scrollTop:0,changed:!1}),gt(j=>j.changed),Ze(j=>j.jump)),0);at(Ee(y,Ze(j=>j.atBottom)),l),at(Ee(l,Qa(50)),d);const w=Be(fd);at(Ee(e,Ze(({scrollTop:j})=>j),vn(),js((j,_)=>to(b)?{direction:j.direction,prevScrollTop:_}:{direction:_j.direction)),w),at(Ee(e,Qa(50),Zs(Xoe)),w);const S=Be(0);return at(Ee(g,gt(j=>!j),Zs(0)),S),at(Ee(t,Qa(100),Pt(g),gt(([j,_])=>!!_),js(([j,_],[I])=>[_,I],[0,0]),Ze(([j,_])=>_-j)),S),{isScrolling:g,isAtTop:c,isAtBottom:l,atBottomState:y,atTopStateChange:f,atBottomStateChange:d,scrollDirection:w,atBottomThreshold:m,atTopThreshold:h,scrollVelocity:S,lastJumpDueToItemResize:x}},Cn(Ir)),wl=Yt(([{log:e}])=>{const t=Be(!1),n=ro(Ee(t,gt(r=>r),vn()));return Zt(t,r=>{r&&to(e)("props updated",{},oo.DEBUG)}),{propsReady:t,didMount:n}},Cn(Cl),{singleton:!0});function b2(e,t){e==0?t():requestAnimationFrame(()=>b2(e-1,t))}function x2(e,t){const n=t-1;return typeof e=="number"?e:e.index==="LAST"?n:e.index}const wf=Yt(([{sizes:e,listRefresh:t,defaultItemSize:n},{scrollTop:r},{scrollToIndex:o},{didMount:s}])=>{const l=Be(!0),c=Be(0),d=Be(!1);return at(Ee(s,Pt(c),gt(([f,m])=>!!m),Zs(!1)),l),Zt(Ee(er(t,s),Pt(l,e,n,d),gt(([[,f],m,{sizeTree:h},g,b])=>f&&(!on(h)||p2(g))&&!m&&!b),Pt(c)),([,f])=>{St(d,!0),b2(3,()=>{ha(r,()=>St(l,!0)),St(o,f)})}),{scrolledToInitialItem:l,initialTopMostItemIndex:c}},Cn(Bs,Ir,yf,wl),{singleton:!0});function Zj(e){return e?e==="smooth"?"smooth":"auto":!1}const Zoe=(e,t)=>typeof e=="function"?Zj(e(t)):t&&Zj(e),Joe=Yt(([{totalCount:e,listRefresh:t},{isAtBottom:n,atBottomState:r},{scrollToIndex:o},{scrolledToInitialItem:s},{propsReady:l,didMount:c},{log:d},{scrollingInProgress:f}])=>{const m=Be(!1),h=Nt();let g=null;function b(x){St(o,{index:"LAST",align:"end",behavior:x})}Zt(Ee(er(Ee(ht(e),Fc(1)),c),Pt(ht(m),n,s,f),Ze(([[x,w],S,j,_,I])=>{let E=w&&_,M="auto";return E&&(M=Zoe(S,j||I),E=E&&!!M),{totalCount:x,shouldFollow:E,followOutputBehavior:M}}),gt(({shouldFollow:x})=>x)),({totalCount:x,followOutputBehavior:w})=>{g&&(g(),g=null),g=ha(t,()=>{to(d)("following output to ",{totalCount:x},oo.DEBUG),b(w),g=null})});function y(x){const w=ha(r,S=>{x&&!S.atBottom&&S.notAtBottomBecause==="SIZE_INCREASED"&&!g&&(to(d)("scrolling to bottom due to increased size",{},oo.DEBUG),b("auto"))});setTimeout(w,100)}return Zt(Ee(er(ht(m),e,l),gt(([x,,w])=>x&&w),js(({value:x},[,w])=>({refreshed:x===w,value:w}),{refreshed:!1,value:0}),gt(({refreshed:x})=>x),Pt(m,e)),([,x])=>{y(x!==!1)}),Zt(h,()=>{y(to(m)!==!1)}),Zt(er(ht(m),r),([x,w])=>{x&&!w.atBottom&&w.notAtBottomBecause==="VIEWPORT_HEIGHT_DECREASING"&&b("auto")}),{followOutput:m,autoscrollToBottom:h}},Cn(Bs,Cf,yf,wf,wl,Cl,Ir));function ese(e){return e.reduce((t,n)=>(t.groupIndices.push(t.totalCount),t.totalCount+=n+1,t),{totalCount:0,groupIndices:[]})}const c7=Yt(([{totalCount:e,groupIndices:t,sizes:n},{scrollTop:r,headerHeight:o}])=>{const s=Nt(),l=Nt(),c=ro(Ee(s,Ze(ese)));return at(Ee(c,Ze(d=>d.totalCount)),e),at(Ee(c,Ze(d=>d.groupIndices)),t),at(Ee(er(r,n,o),gt(([d,f])=>Zg(f)),Ze(([d,f,m])=>us(f.groupOffsetTree,Math.max(d-m,0),"v")[0]),vn(),Ze(d=>[d])),l),{groupCounts:s,topItemsIndexes:l}},Cn(Bs,Ir));function $d(e,t){return!!(e&&e[0]===t[0]&&e[1]===t[1])}function u7(e,t){return!!(e&&e.startIndex===t.startIndex&&e.endIndex===t.endIndex)}const $h="top",Lh="bottom",Jj="none";function e_(e,t,n){return typeof e=="number"?n===Nd&&t===$h||n===fd&&t===Lh?e:0:n===Nd?t===$h?e.main:e.reverse:t===Lh?e.main:e.reverse}function t_(e,t){return typeof e=="number"?e:e[t]||0}const y2=Yt(([{scrollTop:e,viewportHeight:t,deviation:n,headerHeight:r,fixedHeaderHeight:o}])=>{const s=Nt(),l=Be(0),c=Be(0),d=Be(0),f=wr(Ee(er(ht(e),ht(t),ht(r),ht(s,$d),ht(d),ht(l),ht(o),ht(n),ht(c)),Ze(([m,h,g,[b,y],x,w,S,j,_])=>{const I=m-j,E=w+S,M=Math.max(g-I,0);let D=Jj;const R=t_(_,$h),N=t_(_,Lh);return b-=j,b+=g+S,y+=g+S,y-=j,b>m+E-R&&(D=Nd),ym!=null),vn($d)),[0,0]);return{listBoundary:s,overscan:d,topListHeight:l,increaseViewportBy:c,visibleRange:f}},Cn(Ir),{singleton:!0});function tse(e,t,n){if(Zg(t)){const r=l7(e,t);return[{index:us(t.groupOffsetTree,r)[0],size:0,offset:0},{index:r,size:0,offset:0,data:n&&n[0]}]}return[{index:e,size:0,offset:0,data:n&&n[0]}]}const v1={items:[],topItems:[],offsetTop:0,offsetBottom:0,top:0,bottom:0,topListHeight:0,totalCount:0,firstItemIndex:0};function n_(e,t,n){if(e.length===0)return[];if(!Zg(t))return e.map(f=>({...f,index:f.index+n,originalIndex:f.index}));const r=e[0].index,o=e[e.length-1].index,s=[],l=Yg(t.groupOffsetTree,r,o);let c,d=0;for(const f of e){(!c||c.end0){f=e[0].offset;const x=e[e.length-1];m=x.offset+x.size}const h=n-d,g=c+h*l+(h-1)*r,b=f,y=g-m;return{items:n_(e,o,s),topItems:n_(t,o,s),topListHeight:t.reduce((x,w)=>w.size+x,0),offsetTop:f,offsetBottom:y,top:b,bottom:m,totalCount:n,firstItemIndex:s}}function d7(e,t,n,r,o,s){let l=0;if(n.groupIndices.length>0)for(const m of n.groupIndices){if(m-l>=e)break;l++}const c=e+l,d=x2(t,c),f=Array.from({length:c}).map((m,h)=>({index:h+d,size:0,offset:0,data:s[h+d]}));return vm(f,[],c,o,n,r)}const hi=Yt(([{sizes:e,totalCount:t,data:n,firstItemIndex:r,gap:o},s,{visibleRange:l,listBoundary:c,topListHeight:d},{scrolledToInitialItem:f,initialTopMostItemIndex:m},{topListHeight:h},g,{didMount:b},{recalcInProgress:y}])=>{const x=Be([]),w=Be(0),S=Nt();at(s.topItemsIndexes,x);const j=wr(Ee(er(b,y,ht(l,$d),ht(t),ht(e),ht(m),f,ht(x),ht(r),ht(o),n),gt(([M,D,,R,,,,,,,N])=>{const O=N&&N.length!==R;return M&&!D&&!O}),Ze(([,,[M,D],R,N,O,T,U,G,q,Y])=>{const Q=N,{sizeTree:V,offsetTree:se}=Q,ee=to(w);if(R===0)return{...v1,totalCount:R};if(M===0&&D===0)return ee===0?{...v1,totalCount:R}:d7(ee,O,N,G,q,Y||[]);if(on(V))return ee>0?null:vm(tse(x2(O,R),Q,Y),[],R,q,Q,G);const le=[];if(U.length>0){const A=U[0],L=U[U.length-1];let K=0;for(const ne of Yg(V,A,L)){const z=ne.value,oe=Math.max(ne.start,A),X=Math.min(ne.end,L);for(let Z=oe;Z<=X;Z++)le.push({index:Z,size:z,offset:K,data:Y&&Y[Z]}),K+=z}}if(!T)return vm([],le,R,q,Q,G);const ae=U.length>0?U[U.length-1]+1:0,ce=Hoe(se,M,D,ae);if(ce.length===0)return null;const J=R-1,re=Qg([],A=>{for(const L of ce){const K=L.value;let ne=K.offset,z=L.start;const oe=K.size;if(K.offset=D);Z++)A.push({index:Z,size:oe,offset:ne,data:Y&&Y[Z]}),ne+=oe+q}});return vm(re,le,R,q,Q,G)}),gt(M=>M!==null),vn()),v1);at(Ee(n,gt(p2),Ze(M=>M==null?void 0:M.length)),t),at(Ee(j,Ze(M=>M.topListHeight)),h),at(h,d),at(Ee(j,Ze(M=>[M.top,M.bottom])),c),at(Ee(j,Ze(M=>M.items)),S);const _=ro(Ee(j,gt(({items:M})=>M.length>0),Pt(t,n),gt(([{items:M},D])=>M[M.length-1].originalIndex===D-1),Ze(([,M,D])=>[M-1,D]),vn($d),Ze(([M])=>M))),I=ro(Ee(j,Qa(200),gt(({items:M,topItems:D})=>M.length>0&&M[0].originalIndex===D.length),Ze(({items:M})=>M[0].index),vn())),E=ro(Ee(j,gt(({items:M})=>M.length>0),Ze(({items:M})=>{let D=0,R=M.length-1;for(;M[D].type==="group"&&DD;)R--;return{startIndex:M[D].index,endIndex:M[R].index}}),vn(u7)));return{listState:j,topItemsIndexes:x,endReached:_,startReached:I,rangeChanged:E,itemsRendered:S,initialItemCount:w,...g}},Cn(Bs,c7,y2,wf,yf,Cf,wl,g2),{singleton:!0}),nse=Yt(([{sizes:e,firstItemIndex:t,data:n,gap:r},{initialTopMostItemIndex:o},{initialItemCount:s,listState:l},{didMount:c}])=>(at(Ee(c,Pt(s),gt(([,d])=>d!==0),Pt(o,e,t,r,n),Ze(([[,d],f,m,h,g,b=[]])=>d7(d,f,m,h,g,b))),l),{}),Cn(Bs,wf,hi,wl),{singleton:!0}),f7=Yt(([{scrollVelocity:e}])=>{const t=Be(!1),n=Nt(),r=Be(!1);return at(Ee(e,Pt(r,t,n),gt(([o,s])=>!!s),Ze(([o,s,l,c])=>{const{exit:d,enter:f}=s;if(l){if(d(o,c))return!1}else if(f(o,c))return!0;return l}),vn()),t),Zt(Ee(er(t,e,n),Pt(r)),([[o,s,l],c])=>o&&c&&c.change&&c.change(s,l)),{isSeeking:t,scrollSeekConfiguration:r,scrollVelocity:e,scrollSeekRangeChanged:n}},Cn(Cf),{singleton:!0}),rse=Yt(([{topItemsIndexes:e}])=>{const t=Be(0);return at(Ee(t,gt(n=>n>0),Ze(n=>Array.from({length:n}).map((r,o)=>o))),e),{topItemCount:t}},Cn(hi)),p7=Yt(([{footerHeight:e,headerHeight:t,fixedHeaderHeight:n,fixedFooterHeight:r},{listState:o}])=>{const s=Nt(),l=wr(Ee(er(e,r,t,n,o),Ze(([c,d,f,m,h])=>c+d+f+m+h.offsetBottom+h.bottom)),0);return at(ht(l),s),{totalListHeight:l,totalListHeightChanged:s}},Cn(Ir,hi),{singleton:!0});function m7(e){let t=!1,n;return()=>(t||(t=!0,n=e()),n)}const ose=m7(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),sse=Yt(([{scrollBy:e,scrollTop:t,deviation:n,scrollingInProgress:r},{isScrolling:o,isAtBottom:s,scrollDirection:l,lastJumpDueToItemResize:c},{listState:d},{beforeUnshiftWith:f,shiftWithOffset:m,sizes:h,gap:g},{log:b},{recalcInProgress:y}])=>{const x=ro(Ee(d,Pt(c),js(([,S,j,_],[{items:I,totalCount:E,bottom:M,offsetBottom:D},R])=>{const N=M+D;let O=0;return j===E&&S.length>0&&I.length>0&&(I[0].originalIndex===0&&S[0].originalIndex===0||(O=N-_,O!==0&&(O+=R))),[O,I,E,N]},[0,[],0,0]),gt(([S])=>S!==0),Pt(t,l,r,s,b,y),gt(([,S,j,_,,,I])=>!I&&!_&&S!==0&&j===Nd),Ze(([[S],,,,,j])=>(j("Upward scrolling compensation",{amount:S},oo.DEBUG),S))));function w(S){S>0?(St(e,{top:-S,behavior:"auto"}),St(n,0)):(St(n,0),St(e,{top:-S,behavior:"auto"}))}return Zt(Ee(x,Pt(n,o)),([S,j,_])=>{_&&ose()?St(n,j-S):w(-S)}),Zt(Ee(er(wr(o,!1),n,y),gt(([S,j,_])=>!S&&!_&&j!==0),Ze(([S,j])=>j),Qa(1)),w),at(Ee(m,Ze(S=>({top:-S}))),e),Zt(Ee(f,Pt(h,g),Ze(([S,{lastSize:j,groupIndices:_,sizeTree:I},E])=>{function M(D){return D*(j+E)}if(_.length===0)return M(S);{let D=0;const R=Ad(I,0);let N=0,O=0;for(;NS&&(D-=R,T=S-N+1),N+=T,D+=M(T),O++}return D}})),S=>{St(n,S),requestAnimationFrame(()=>{St(e,{top:S}),requestAnimationFrame(()=>{St(n,0),St(y,!1)})})}),{deviation:n}},Cn(Ir,Cf,hi,Bs,Cl,g2)),ase=Yt(([{didMount:e},{scrollTo:t},{listState:n}])=>{const r=Be(0);return Zt(Ee(e,Pt(r),gt(([,o])=>o!==0),Ze(([,o])=>({top:o}))),o=>{ha(Ee(n,Fc(1),gt(s=>s.items.length>1)),()=>{requestAnimationFrame(()=>{St(t,o)})})}),{initialScrollTop:r}},Cn(wl,Ir,hi),{singleton:!0}),lse=Yt(([{viewportHeight:e},{totalListHeight:t}])=>{const n=Be(!1),r=wr(Ee(er(n,e,t),gt(([o])=>o),Ze(([,o,s])=>Math.max(0,o-s)),Qa(0),vn()),0);return{alignToBottom:n,paddingTopAddition:r}},Cn(Ir,p7),{singleton:!0}),C2=Yt(([{scrollTo:e,scrollContainerState:t}])=>{const n=Nt(),r=Nt(),o=Nt(),s=Be(!1),l=Be(void 0);return at(Ee(er(n,r),Ze(([{viewportHeight:c,scrollTop:d,scrollHeight:f},{offsetTop:m}])=>({scrollTop:Math.max(0,d-m),scrollHeight:f,viewportHeight:c}))),t),at(Ee(e,Pt(r),Ze(([c,{offsetTop:d}])=>({...c,top:c.top+d}))),o),{useWindowScroll:s,customScrollParent:l,windowScrollContainerState:n,windowViewportRect:r,windowScrollTo:o}},Cn(Ir)),ise=({itemTop:e,itemBottom:t,viewportTop:n,viewportBottom:r,locationParams:{behavior:o,align:s,...l}})=>er?{...l,behavior:o,align:s??"end"}:null,cse=Yt(([{sizes:e,totalCount:t,gap:n},{scrollTop:r,viewportHeight:o,headerHeight:s,fixedHeaderHeight:l,fixedFooterHeight:c,scrollingInProgress:d},{scrollToIndex:f}])=>{const m=Nt();return at(Ee(m,Pt(e,o,t,s,l,c,r),Pt(n),Ze(([[h,g,b,y,x,w,S,j],_])=>{const{done:I,behavior:E,align:M,calculateViewLocation:D=ise,...R}=h,N=a7(h,g,y-1),O=Td(N,g.offsetTree,_)+x+w,T=O+us(g.sizeTree,N)[1],U=j+w,G=j+b-S,q=D({itemTop:O,itemBottom:T,viewportTop:U,viewportBottom:G,locationParams:{behavior:E,align:M,...R}});return q?I&&ha(Ee(d,gt(Y=>Y===!1),Fc(to(d)?1:2)),I):I&&I(),q}),gt(h=>h!==null)),f),{scrollIntoView:m}},Cn(Bs,Ir,yf,hi,Cl),{singleton:!0}),use=Yt(([{sizes:e,sizeRanges:t},{scrollTop:n},{initialTopMostItemIndex:r},{didMount:o},{useWindowScroll:s,windowScrollContainerState:l,windowViewportRect:c}])=>{const d=Nt(),f=Be(void 0),m=Be(null),h=Be(null);return at(l,m),at(c,h),Zt(Ee(d,Pt(e,n,s,m,h)),([g,b,y,x,w,S])=>{const j=Uoe(b.sizeTree);x&&w!==null&&S!==null&&(y=w.scrollTop-S.offsetTop),g({ranges:j,scrollTop:y})}),at(Ee(f,gt(p2),Ze(dse)),r),at(Ee(o,Pt(f),gt(([,g])=>g!==void 0),vn(),Ze(([,g])=>g.ranges)),t),{getState:d,restoreStateFrom:f}},Cn(Bs,Ir,wf,wl,C2));function dse(e){return{offset:e.scrollTop,index:0,align:"start"}}const fse=Yt(([e,t,n,r,o,s,l,c,d,f])=>({...e,...t,...n,...r,...o,...s,...l,...c,...d,...f}),Cn(y2,nse,wl,f7,p7,ase,lse,C2,cse,Cl)),pse=Yt(([{totalCount:e,sizeRanges:t,fixedItemSize:n,defaultItemSize:r,trackItemSizes:o,itemSize:s,data:l,firstItemIndex:c,groupIndices:d,statefulTotalCount:f,gap:m,sizes:h},{initialTopMostItemIndex:g,scrolledToInitialItem:b},y,x,w,{listState:S,topItemsIndexes:j,..._},{scrollToIndex:I},E,{topItemCount:M},{groupCounts:D},R])=>(at(_.rangeChanged,R.scrollSeekRangeChanged),at(Ee(R.windowViewportRect,Ze(N=>N.visibleHeight)),y.viewportHeight),{totalCount:e,data:l,firstItemIndex:c,sizeRanges:t,initialTopMostItemIndex:g,scrolledToInitialItem:b,topItemsIndexes:j,topItemCount:M,groupCounts:D,fixedItemHeight:n,defaultItemHeight:r,gap:m,...w,statefulTotalCount:f,listState:S,scrollToIndex:I,trackItemSizes:o,itemSize:s,groupIndices:d,..._,...R,...y,sizes:h,...x}),Cn(Bs,wf,Ir,use,Joe,hi,yf,sse,rse,c7,fse)),b1="-webkit-sticky",r_="sticky",h7=m7(()=>{if(typeof document>"u")return r_;const e=document.createElement("div");return e.style.position=b1,e.style.position===b1?b1:r_});function g7(e,t){const n=B.useRef(null),r=B.useCallback(c=>{if(c===null||!c.offsetParent)return;const d=c.getBoundingClientRect(),f=d.width;let m,h;if(t){const g=t.getBoundingClientRect(),b=d.top-g.top;m=g.height-Math.max(0,b),h=b+t.scrollTop}else m=window.innerHeight-Math.max(0,d.top),h=d.top+window.pageYOffset;n.current={offsetTop:h,visibleHeight:m,visibleWidth:f},e(n.current)},[e,t]),{callbackRef:o,ref:s}=h2(r),l=B.useCallback(()=>{r(s.current)},[r,s]);return B.useEffect(()=>{if(t){t.addEventListener("scroll",l);const c=new ResizeObserver(l);return c.observe(t),()=>{t.removeEventListener("scroll",l),c.unobserve(t)}}else return window.addEventListener("scroll",l),window.addEventListener("resize",l),()=>{window.removeEventListener("scroll",l),window.removeEventListener("resize",l)}},[l,t]),o}const v7=B.createContext(void 0),b7=B.createContext(void 0);function x7(e){return e}const mse=Yt(()=>{const e=Be(d=>`Item ${d}`),t=Be(null),n=Be(d=>`Group ${d}`),r=Be({}),o=Be(x7),s=Be("div"),l=Be(iu),c=(d,f=null)=>wr(Ee(r,Ze(m=>m[d]),vn()),f);return{context:t,itemContent:e,groupContent:n,components:r,computeItemKey:o,headerFooterTag:s,scrollerRef:l,FooterComponent:c("Footer"),HeaderComponent:c("Header"),TopItemListComponent:c("TopItemList"),ListComponent:c("List","div"),ItemComponent:c("Item","div"),GroupComponent:c("Group","div"),ScrollerComponent:c("Scroller","div"),EmptyPlaceholder:c("EmptyPlaceholder"),ScrollSeekPlaceholder:c("ScrollSeekPlaceholder")}}),hse=Yt(([e,t])=>({...e,...t}),Cn(pse,mse)),gse=({height:e})=>B.createElement("div",{style:{height:e}}),vse={position:h7(),zIndex:1,overflowAnchor:"none"},bse={overflowAnchor:"none"},o_=B.memo(function({showTopList:t=!1}){const n=Tt("listState"),r=Co("sizeRanges"),o=Tt("useWindowScroll"),s=Tt("customScrollParent"),l=Co("windowScrollContainerState"),c=Co("scrollContainerState"),d=s||o?l:c,f=Tt("itemContent"),m=Tt("context"),h=Tt("groupContent"),g=Tt("trackItemSizes"),b=Tt("itemSize"),y=Tt("log"),x=Co("gap"),{callbackRef:w}=Doe(r,b,g,t?iu:d,y,x,s),[S,j]=B.useState(0);w2("deviation",q=>{S!==q&&j(q)});const _=Tt("EmptyPlaceholder"),I=Tt("ScrollSeekPlaceholder")||gse,E=Tt("ListComponent"),M=Tt("ItemComponent"),D=Tt("GroupComponent"),R=Tt("computeItemKey"),N=Tt("isSeeking"),O=Tt("groupIndices").length>0,T=Tt("paddingTopAddition"),U=Tt("scrolledToInitialItem"),G=t?{}:{boxSizing:"border-box",paddingTop:n.offsetTop+T,paddingBottom:n.offsetBottom,marginTop:S,...U?{}:{visibility:"hidden"}};return!t&&n.totalCount===0&&_?B.createElement(_,Nr(_,m)):B.createElement(E,{...Nr(E,m),ref:w,style:G,"data-test-id":t?"virtuoso-top-item-list":"virtuoso-item-list"},(t?n.topItems:n.items).map(q=>{const Y=q.originalIndex,Q=R(Y+n.firstItemIndex,q.data,m);return N?B.createElement(I,{...Nr(I,m),key:Q,index:q.index,height:q.size,type:q.type||"item",...q.type==="group"?{}:{groupIndex:q.groupIndex}}):q.type==="group"?B.createElement(D,{...Nr(D,m),key:Q,"data-index":Y,"data-known-size":q.size,"data-item-index":q.index,style:vse},h(q.index,m)):B.createElement(M,{...Nr(M,m),...Cse(M,q.data),key:Q,"data-index":Y,"data-known-size":q.size,"data-item-index":q.index,"data-item-group-index":q.groupIndex,style:bse},O?f(q.index,q.groupIndex,q.data,m):f(q.index,q.data,m))}))}),xse={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},Jg={width:"100%",height:"100%",position:"absolute",top:0},yse={width:"100%",position:h7(),top:0,zIndex:1};function Nr(e,t){if(typeof e!="string")return{context:t}}function Cse(e,t){return{item:typeof e=="string"?void 0:t}}const wse=B.memo(function(){const t=Tt("HeaderComponent"),n=Co("headerHeight"),r=Tt("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=Tt("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),Sse=B.memo(function(){const t=Tt("FooterComponent"),n=Co("footerHeight"),r=Tt("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=Tt("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null});function y7({usePublisher:e,useEmitter:t,useEmitterValue:n}){return B.memo(function({style:s,children:l,...c}){const d=e("scrollContainerState"),f=n("ScrollerComponent"),m=e("smoothScrollTargetReached"),h=n("scrollerRef"),g=n("context"),{scrollerRef:b,scrollByCallback:y,scrollToCallback:x}=J8(d,m,f,h);return t("scrollTo",x),t("scrollBy",y),B.createElement(f,{ref:b,style:{...xse,...s},"data-test-id":"virtuoso-scroller","data-virtuoso-scroller":!0,tabIndex:0,...c,...Nr(f,g)},l)})}function C7({usePublisher:e,useEmitter:t,useEmitterValue:n}){return B.memo(function({style:s,children:l,...c}){const d=e("windowScrollContainerState"),f=n("ScrollerComponent"),m=e("smoothScrollTargetReached"),h=n("totalListHeight"),g=n("deviation"),b=n("customScrollParent"),y=n("context"),{scrollerRef:x,scrollByCallback:w,scrollToCallback:S}=J8(d,m,f,iu,b);return Eoe(()=>(x.current=b||window,()=>{x.current=null}),[x,b]),t("windowScrollTo",S),t("scrollBy",w),B.createElement(f,{style:{position:"relative",...s,...h!==0?{height:h+g}:{}},"data-virtuoso-scroller":!0,...c,...Nr(f,y)},l)})}const kse=({children:e})=>{const t=B.useContext(v7),n=Co("viewportHeight"),r=Co("fixedItemHeight"),o=mi(q8(n,s=>dl(s,"height")));return B.useEffect(()=>{t&&(n(t.viewportHeight),r(t.itemHeight))},[t,n,r]),B.createElement("div",{style:Jg,ref:o,"data-viewport-type":"element"},e)},jse=({children:e})=>{const t=B.useContext(v7),n=Co("windowViewportRect"),r=Co("fixedItemHeight"),o=Tt("customScrollParent"),s=g7(n,o);return B.useEffect(()=>{t&&(r(t.itemHeight),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:100}))},[t,n,r]),B.createElement("div",{ref:s,style:Jg,"data-viewport-type":"window"},e)},_se=({children:e})=>{const t=Tt("TopItemListComponent"),n=Tt("headerHeight"),r={...yse,marginTop:`${n}px`},o=Tt("context");return B.createElement(t||"div",{style:r,context:o},e)},Ise=B.memo(function(t){const n=Tt("useWindowScroll"),r=Tt("topItemsIndexes").length>0,o=Tt("customScrollParent"),s=o||n?Mse:Ese,l=o||n?jse:kse;return B.createElement(s,{...t},r&&B.createElement(_se,null,B.createElement(o_,{showTopList:!0})),B.createElement(l,null,B.createElement(wse,null),B.createElement(o_,null),B.createElement(Sse,null)))}),{Component:Pse,usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}=Y8(hse,{required:{},optional:{restoreStateFrom:"restoreStateFrom",context:"context",followOutput:"followOutput",itemContent:"itemContent",groupContent:"groupContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",totalCount:"totalCount",groupCounts:"groupCounts",topItemCount:"topItemCount",firstItemIndex:"firstItemIndex",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedItemHeight:"fixedItemHeight",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy",autoscrollToBottom:"autoscrollToBottom",getState:"getState"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},Ise),Ese=y7({usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}),Mse=C7({usePublisher:Co,useEmitterValue:Tt,useEmitter:w2}),Ose=Pse,s_={items:[],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},Dse={items:[{index:0}],offsetBottom:0,offsetTop:0,top:0,bottom:0,itemHeight:0,itemWidth:0},{round:a_,ceil:l_,floor:Fh,min:x1,max:pd}=Math;function Rse(e){return{...Dse,items:e}}function i_(e,t,n){return Array.from({length:t-e+1}).map((r,o)=>{const s=n===null?null:n[o+e];return{index:o+e,data:s}})}function Ase(e,t){return e&&e.column===t.column&&e.row===t.row}function Yp(e,t){return e&&e.width===t.width&&e.height===t.height}const Tse=Yt(([{overscan:e,visibleRange:t,listBoundary:n},{scrollTop:r,viewportHeight:o,scrollBy:s,scrollTo:l,smoothScrollTargetReached:c,scrollContainerState:d,footerHeight:f,headerHeight:m},h,g,{propsReady:b,didMount:y},{windowViewportRect:x,useWindowScroll:w,customScrollParent:S,windowScrollContainerState:j,windowScrollTo:_},I])=>{const E=Be(0),M=Be(0),D=Be(s_),R=Be({height:0,width:0}),N=Be({height:0,width:0}),O=Nt(),T=Nt(),U=Be(0),G=Be(null),q=Be({row:0,column:0}),Y=Nt(),Q=Nt(),V=Be(!1),se=Be(0),ee=Be(!0),le=Be(!1);Zt(Ee(y,Pt(se),gt(([L,K])=>!!K)),()=>{St(ee,!1),St(M,0)}),Zt(Ee(er(y,ee,N,R,se,le),gt(([L,K,ne,z,,oe])=>L&&!K&&ne.height!==0&&z.height!==0&&!oe)),([,,,,L])=>{St(le,!0),b2(1,()=>{St(O,L)}),ha(Ee(r),()=>{St(n,[0,0]),St(ee,!0)})}),at(Ee(Q,gt(L=>L!=null&&L.scrollTop>0),Zs(0)),M),Zt(Ee(y,Pt(Q),gt(([,L])=>L!=null)),([,L])=>{L&&(St(R,L.viewport),St(N,L==null?void 0:L.item),St(q,L.gap),L.scrollTop>0&&(St(V,!0),ha(Ee(r,Fc(1)),K=>{St(V,!1)}),St(l,{top:L.scrollTop})))}),at(Ee(R,Ze(({height:L})=>L)),o),at(Ee(er(ht(R,Yp),ht(N,Yp),ht(q,(L,K)=>L&&L.column===K.column&&L.row===K.row),ht(r)),Ze(([L,K,ne,z])=>({viewport:L,item:K,gap:ne,scrollTop:z}))),Y),at(Ee(er(ht(E),t,ht(q,Ase),ht(N,Yp),ht(R,Yp),ht(G),ht(M),ht(V),ht(ee),ht(se)),gt(([,,,,,,,L])=>!L),Ze(([L,[K,ne],z,oe,X,Z,me,,ve,de])=>{const{row:ke,column:we}=z,{height:Re,width:Qe}=oe,{width:$e}=X;if(me===0&&(L===0||$e===0))return s_;if(Qe===0){const st=x2(de,L),mt=st===0?Math.max(me-1,0):st;return Rse(i_(st,mt,Z))}const vt=w7($e,Qe,we);let it,ot;ve?K===0&&ne===0&&me>0?(it=0,ot=me-1):(it=vt*Fh((K+ke)/(Re+ke)),ot=vt*l_((ne+ke)/(Re+ke))-1,ot=x1(L-1,pd(ot,vt-1)),it=x1(ot,pd(0,it))):(it=0,ot=-1);const Ce=i_(it,ot,Z),{top:Me,bottom:qe}=c_(X,z,oe,Ce),dt=l_(L/vt),Ue=dt*Re+(dt-1)*ke-qe;return{items:Ce,offsetTop:Me,offsetBottom:Ue,top:Me,bottom:qe,itemHeight:Re,itemWidth:Qe}})),D),at(Ee(G,gt(L=>L!==null),Ze(L=>L.length)),E),at(Ee(er(R,N,D,q),gt(([L,K,{items:ne}])=>ne.length>0&&K.height!==0&&L.height!==0),Ze(([L,K,{items:ne},z])=>{const{top:oe,bottom:X}=c_(L,z,K,ne);return[oe,X]}),vn($d)),n);const ae=Be(!1);at(Ee(r,Pt(ae),Ze(([L,K])=>K||L!==0)),ae);const ce=ro(Ee(ht(D),gt(({items:L})=>L.length>0),Pt(E,ae),gt(([{items:L},K,ne])=>ne&&L[L.length-1].index===K-1),Ze(([,L])=>L-1),vn())),J=ro(Ee(ht(D),gt(({items:L})=>L.length>0&&L[0].index===0),Zs(0),vn())),re=ro(Ee(ht(D),Pt(V),gt(([{items:L},K])=>L.length>0&&!K),Ze(([{items:L}])=>({startIndex:L[0].index,endIndex:L[L.length-1].index})),vn(u7),Qa(0)));at(re,g.scrollSeekRangeChanged),at(Ee(O,Pt(R,N,E,q),Ze(([L,K,ne,z,oe])=>{const X=i7(L),{align:Z,behavior:me,offset:ve}=X;let de=X.index;de==="LAST"&&(de=z-1),de=pd(0,de,x1(z-1,de));let ke=Yb(K,oe,ne,de);return Z==="end"?ke=a_(ke-K.height+ne.height):Z==="center"&&(ke=a_(ke-K.height/2+ne.height/2)),ve&&(ke+=ve),{top:ke,behavior:me}})),l);const A=wr(Ee(D,Ze(L=>L.offsetBottom+L.bottom)),0);return at(Ee(x,Ze(L=>({width:L.visibleWidth,height:L.visibleHeight}))),R),{data:G,totalCount:E,viewportDimensions:R,itemDimensions:N,scrollTop:r,scrollHeight:T,overscan:e,scrollBy:s,scrollTo:l,scrollToIndex:O,smoothScrollTargetReached:c,windowViewportRect:x,windowScrollTo:_,useWindowScroll:w,customScrollParent:S,windowScrollContainerState:j,deviation:U,scrollContainerState:d,footerHeight:f,headerHeight:m,initialItemCount:M,gap:q,restoreStateFrom:Q,...g,initialTopMostItemIndex:se,gridState:D,totalListHeight:A,...h,startReached:J,endReached:ce,rangeChanged:re,stateChanged:Y,propsReady:b,stateRestoreInProgress:V,...I}},Cn(y2,Ir,Cf,f7,wl,C2,Cl));function c_(e,t,n,r){const{height:o}=n;if(o===void 0||r.length===0)return{top:0,bottom:0};const s=Yb(e,t,n,r[0].index),l=Yb(e,t,n,r[r.length-1].index)+o;return{top:s,bottom:l}}function Yb(e,t,n,r){const o=w7(e.width,n.width,t.column),s=Fh(r/o),l=s*n.height+pd(0,s-1)*t.row;return l>0?l+t.row:l}function w7(e,t,n){return pd(1,Fh((e+n)/(Fh(t)+n)))}const Nse=Yt(()=>{const e=Be(f=>`Item ${f}`),t=Be({}),n=Be(null),r=Be("virtuoso-grid-item"),o=Be("virtuoso-grid-list"),s=Be(x7),l=Be("div"),c=Be(iu),d=(f,m=null)=>wr(Ee(t,Ze(h=>h[f]),vn()),m);return{context:n,itemContent:e,components:t,computeItemKey:s,itemClassName:r,listClassName:o,headerFooterTag:l,scrollerRef:c,FooterComponent:d("Footer"),HeaderComponent:d("Header"),ListComponent:d("List","div"),ItemComponent:d("Item","div"),ScrollerComponent:d("Scroller","div"),ScrollSeekPlaceholder:d("ScrollSeekPlaceholder","div")}}),$se=Yt(([e,t])=>({...e,...t}),Cn(Tse,Nse)),Lse=B.memo(function(){const t=jn("gridState"),n=jn("listClassName"),r=jn("itemClassName"),o=jn("itemContent"),s=jn("computeItemKey"),l=jn("isSeeking"),c=ss("scrollHeight"),d=jn("ItemComponent"),f=jn("ListComponent"),m=jn("ScrollSeekPlaceholder"),h=jn("context"),g=ss("itemDimensions"),b=ss("gap"),y=jn("log"),x=jn("stateRestoreInProgress"),w=mi(S=>{const j=S.parentElement.parentElement.scrollHeight;c(j);const _=S.firstChild;if(_){const{width:I,height:E}=_.getBoundingClientRect();g({width:I,height:E})}b({row:u_("row-gap",getComputedStyle(S).rowGap,y),column:u_("column-gap",getComputedStyle(S).columnGap,y)})});return x?null:B.createElement(f,{ref:w,className:n,...Nr(f,h),style:{paddingTop:t.offsetTop,paddingBottom:t.offsetBottom},"data-test-id":"virtuoso-item-list"},t.items.map(S=>{const j=s(S.index,S.data,h);return l?B.createElement(m,{key:j,...Nr(m,h),index:S.index,height:t.itemHeight,width:t.itemWidth}):B.createElement(d,{...Nr(d,h),className:r,"data-index":S.index,key:j},o(S.index,S.data,h))}))}),Fse=B.memo(function(){const t=jn("HeaderComponent"),n=ss("headerHeight"),r=jn("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=jn("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),zse=B.memo(function(){const t=jn("FooterComponent"),n=ss("footerHeight"),r=jn("headerFooterTag"),o=mi(l=>n(dl(l,"height"))),s=jn("context");return t?B.createElement(r,{ref:o},B.createElement(t,Nr(t,s))):null}),Bse=({children:e})=>{const t=B.useContext(b7),n=ss("itemDimensions"),r=ss("viewportDimensions"),o=mi(s=>{r(s.getBoundingClientRect())});return B.useEffect(()=>{t&&(r({height:t.viewportHeight,width:t.viewportWidth}),n({height:t.itemHeight,width:t.itemWidth}))},[t,r,n]),B.createElement("div",{style:Jg,ref:o},e)},Hse=({children:e})=>{const t=B.useContext(b7),n=ss("windowViewportRect"),r=ss("itemDimensions"),o=jn("customScrollParent"),s=g7(n,o);return B.useEffect(()=>{t&&(r({height:t.itemHeight,width:t.itemWidth}),n({offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:t.viewportWidth}))},[t,n,r]),B.createElement("div",{ref:s,style:Jg},e)},Wse=B.memo(function({...t}){const n=jn("useWindowScroll"),r=jn("customScrollParent"),o=r||n?Gse:Use,s=r||n?Hse:Bse;return B.createElement(o,{...t},B.createElement(s,null,B.createElement(Fse,null),B.createElement(Lse,null),B.createElement(zse,null)))}),{Component:Vse,usePublisher:ss,useEmitterValue:jn,useEmitter:S7}=Y8($se,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",restoreStateFrom:"restoreStateFrom",initialTopMostItemIndex:"initialTopMostItemIndex"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",stateChanged:"stateChanged"}},Wse),Use=y7({usePublisher:ss,useEmitterValue:jn,useEmitter:S7}),Gse=C7({usePublisher:ss,useEmitterValue:jn,useEmitter:S7});function u_(e,t,n){return t!=="normal"&&!(t!=null&&t.endsWith("px"))&&n(`${e} was not resolved to pixel value correctly`,t,oo.WARN),t==="normal"?0:parseInt(t??"0",10)}const Kse=Vse,qse=e=>{const t=H(s=>s.gallery.galleryView),{data:n}=wx(e),{data:r}=Sx(e),o=i.useMemo(()=>t==="images"?n==null?void 0:n.total:r==null?void 0:r.total,[t,r,n]);return{totalImages:n,totalAssets:r,currentViewTotal:o}},Xse=({imageDTO:e})=>a.jsx($,{sx:{pointerEvents:"none",flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,p:2,alignItems:"flex-start",gap:2},children:a.jsxs(Sa,{variant:"solid",colorScheme:"base",children:[e.width," × ",e.height]})}),Qse=i.memo(Xse),S2=({postUploadAction:e,isDisabled:t})=>{const n=H(d=>d.gallery.autoAddBoardId),[r]=CI(),o=i.useCallback(d=>{const f=d[0];f&&r({file:f,image_category:"user",is_intermediate:!1,postUploadAction:e??{type:"TOAST"},board_id:n==="none"?void 0:n})},[n,e,r]),{getRootProps:s,getInputProps:l,open:c}=Ey({accept:{"image/png":[".png"],"image/jpeg":[".jpg",".jpeg",".png"]},onDropAccepted:o,disabled:t,noDrag:!0,multiple:!1});return{getUploadButtonProps:s,getUploadInputProps:l,openUploader:c}};function Yse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"}}]})(e)}function Zse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"}}]})(e)}function Jse(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"}}]})(e)}function k2(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"}}]})(e)}function j2(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"}}]})(e)}function k7(e){return De({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3z"}}]})(e)}const eae=()=>{const{t:e}=W(),t=te(),n=H(x=>x.gallery.selection),r=qh(jx),o=Mt("bulkDownload").isFeatureEnabled,[s]=_x(),[l]=Ix(),[c]=EI(),d=i.useCallback(()=>{t(RI(n)),t(yx(!0))},[t,n]),f=i.useCallback(()=>{t(Xh(n))},[t,n]),m=i.useCallback(()=>{s({imageDTOs:n})},[s,n]),h=i.useCallback(()=>{l({imageDTOs:n})},[l,n]),g=i.useCallback(async()=>{try{const x=await c({image_names:n.map(w=>w.image_name)}).unwrap();t(lt({title:e("gallery.preparingDownload"),status:"success",...x.response?{description:x.response,duration:null,isClosable:!0}:{}}))}catch{t(lt({title:e("gallery.preparingDownloadFailed"),status:"error"}))}},[e,n,c,t]),b=i.useMemo(()=>n.every(x=>x.starred),[n]),y=i.useMemo(()=>n.every(x=>!x.starred),[n]);return a.jsxs(a.Fragment,{children:[b&&a.jsx(At,{icon:r?r.on.icon:a.jsx(k2,{}),onClickCapture:h,children:r?r.off.text:"Unstar All"}),(y||!b&&!y)&&a.jsx(At,{icon:r?r.on.icon:a.jsx(j2,{}),onClickCapture:m,children:r?r.on.text:"Star All"}),o&&a.jsx(At,{icon:a.jsx(ou,{}),onClickCapture:g,children:e("gallery.downloadSelection")}),a.jsx(At,{icon:a.jsx(BM,{}),onClickCapture:d,children:e("boards.changeBoard")}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClickCapture:f,children:e("gallery.deleteSelection")})]})},tae=i.memo(eae),nae=()=>i.useCallback(async t=>new Promise(n=>{const r=new Image;r.onload=()=>{const o=document.createElement("canvas");o.width=r.width,o.height=r.height;const s=o.getContext("2d");s&&(s.drawImage(r,0,0),n(new Promise(l=>{o.toBlob(function(c){l(c)},"image/png")})))},r.crossOrigin=AI.get()?"use-credentials":"anonymous",r.src=t}),[]),j7=()=>{const e=zs(),{t}=W(),n=nae(),r=i.useMemo(()=>!!navigator.clipboard&&!!window.ClipboardItem,[]),o=i.useCallback(async s=>{r||e({title:t("toast.problemCopyingImage"),description:"Your browser doesn't support the Clipboard API.",status:"error",duration:2500,isClosable:!0});try{const l=await n(s);if(!l)throw new Error("Unable to create Blob");CA(l),e({title:t("toast.imageCopied"),status:"success",duration:2500,isClosable:!0})}catch(l){e({title:t("toast.problemCopyingImage"),description:String(l),status:"error",duration:2500,isClosable:!0})}},[n,r,t,e]);return{isClipboardAPIAvailable:r,copyImageToClipboard:o}};Px("gallery/requestedBoardImagesDeletion");const rae=Px("gallery/sentImageToCanvas"),_7=Px("gallery/sentImageToImg2Img"),oae=fe(pe,({generation:e})=>e.model),Sf=()=>{const e=te(),t=zs(),{t:n}=W(),r=H(oae),o=i.useCallback(()=>{t({title:n("toast.parameterSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),s=i.useCallback(A=>{t({title:n("toast.parameterNotSet"),description:A,status:"warning",duration:2500,isClosable:!0})},[n,t]),l=i.useCallback(()=>{t({title:n("toast.parametersSet"),status:"info",duration:2500,isClosable:!0})},[n,t]),c=i.useCallback(A=>{t({title:n("toast.parametersNotSet"),status:"warning",description:A,duration:2500,isClosable:!0})},[n,t]),d=i.useCallback((A,L,K,ne)=>{if(bp(A)||xp(L)||Tu(K)||_v(ne)){bp(A)&&e(nd(A)),xp(L)&&e(rd(L)),Tu(K)&&e(od(K)),Tu(ne)&&e(sd(ne)),o();return}s()},[e,o,s]),f=i.useCallback(A=>{if(!bp(A)){s();return}e(nd(A)),o()},[e,o,s]),m=i.useCallback(A=>{if(!xp(A)){s();return}e(rd(A)),o()},[e,o,s]),h=i.useCallback(A=>{if(!Tu(A)){s();return}e(od(A)),o()},[e,o,s]),g=i.useCallback(A=>{if(!_v(A)){s();return}e(sd(A)),o()},[e,o,s]),b=i.useCallback(A=>{if(!Hw(A)){s();return}e(ym(A)),o()},[e,o,s]),y=i.useCallback(A=>{if(!Iv(A)){s();return}e(Cm(A)),o()},[e,o,s]),x=i.useCallback(A=>{if(!Ww(A)){s();return}e(wm(A)),o()},[e,o,s]),w=i.useCallback(A=>{if(!Vw(A)){s();return}e(N1(A)),o()},[e,o,s]),S=i.useCallback(A=>{if(!Pv(A)){s();return}e($1(A)),o()},[e,o,s]),j=i.useCallback(A=>{if(!Uw(A)&&!na(A)){s();return}na(A)?e(nc(null)):e(nc(A)),o()},[e,o,s]),_=i.useCallback(A=>{if(!Ev(A)){s();return}e(Sm(A)),o()},[e,o,s]),I=i.useCallback(A=>{if(!Mv(A)){s();return}e(Za(A)),o()},[e,o,s]),E=i.useCallback(A=>{if(!Ov(A)){s();return}e(Ja(A)),o()},[e,o,s]),M=i.useCallback((A,L)=>{if(!Mv(A)){c();return}if(!Ov(L)){c();return}e(Ja(L)),e(Za(A)),l()},[e,l,c]),D=i.useCallback(A=>{if(!yp(A)){s();return}e(km(A)),o()},[e,o,s]),R=i.useCallback(A=>{if(!Gw(A)){s();return}e(L1(A)),o()},[e,o,s]),N=i.useCallback(A=>{if(!yp(A)){s();return}e(jm(A)),o()},[e,o,s]),O=i.useCallback(A=>{if(!Kw(A)){s();return}e(F1(A)),o()},[e,o,s]),{data:T}=Vd(void 0),U=i.useCallback(A=>{if(!TI(A.lora))return{lora:null,error:"Invalid LoRA model"};const{base_model:L,model_name:K}=A.lora,ne=T?wA.getSelectors().selectById(T,`${L}/lora/${K}`):void 0;return ne?(ne==null?void 0:ne.base_model)===(r==null?void 0:r.base_model)?{lora:ne,error:null}:{lora:null,error:"LoRA incompatible with currently-selected model"}:{lora:null,error:"LoRA model is not installed"}},[T,r==null?void 0:r.base_model]),G=i.useCallback(A=>{const L=U(A);if(!L.lora){s(L.error);return}e(qw({...L.lora,weight:A.weight})),o()},[U,e,o,s]),{data:q}=Ex(void 0),Y=i.useCallback(A=>{if(!_m(A.control_model))return{controlnet:null,error:"Invalid ControlNet model"};const{image:L,control_model:K,control_weight:ne,begin_step_percent:z,end_step_percent:oe,control_mode:X,resize_mode:Z}=A,me=q?NI.getSelectors().selectById(q,`${K.base_model}/controlnet/${K.model_name}`):void 0;if(!me)return{controlnet:null,error:"ControlNet model is not installed"};if(!((me==null?void 0:me.base_model)===(r==null?void 0:r.base_model)))return{controlnet:null,error:"ControlNet incompatible with currently-selected model"};const de="none",ke=jr.none.default;return{controlnet:{type:"controlnet",isEnabled:!0,model:me,weight:typeof ne=="number"?ne:Nu.weight,beginStepPct:z||Nu.beginStepPct,endStepPct:oe||Nu.endStepPct,controlMode:X||Nu.controlMode,resizeMode:Z||Nu.resizeMode,controlImage:(L==null?void 0:L.image_name)||null,processedControlImage:(L==null?void 0:L.image_name)||null,processorType:de,processorNode:ke,shouldAutoConfig:!0,id:Ya()},error:null}},[q,r==null?void 0:r.base_model]),Q=i.useCallback(A=>{const L=Y(A);if(!L.controlnet){s(L.error);return}e(Ti(L.controlnet)),o()},[Y,e,o,s]),{data:V}=Mx(void 0),se=i.useCallback(A=>{if(!_m(A.t2i_adapter_model))return{controlnet:null,error:"Invalid ControlNet model"};const{image:L,t2i_adapter_model:K,weight:ne,begin_step_percent:z,end_step_percent:oe,resize_mode:X}=A,Z=V?$I.getSelectors().selectById(V,`${K.base_model}/t2i_adapter/${K.model_name}`):void 0;if(!Z)return{controlnet:null,error:"ControlNet model is not installed"};if(!((Z==null?void 0:Z.base_model)===(r==null?void 0:r.base_model)))return{t2iAdapter:null,error:"ControlNet incompatible with currently-selected model"};const ve="none",de=jr.none.default;return{t2iAdapter:{type:"t2i_adapter",isEnabled:!0,model:Z,weight:typeof ne=="number"?ne:Cp.weight,beginStepPct:z||Cp.beginStepPct,endStepPct:oe||Cp.endStepPct,resizeMode:X||Cp.resizeMode,controlImage:(L==null?void 0:L.image_name)||null,processedControlImage:(L==null?void 0:L.image_name)||null,processorType:ve,processorNode:de,shouldAutoConfig:!0,id:Ya()},error:null}},[r==null?void 0:r.base_model,V]),ee=i.useCallback(A=>{const L=se(A);if(!L.t2iAdapter){s(L.error);return}e(Ti(L.t2iAdapter)),o()},[se,e,o,s]),{data:le}=Ox(void 0),ae=i.useCallback(A=>{if(!SA(A==null?void 0:A.ip_adapter_model))return{ipAdapter:null,error:"Invalid IP Adapter model"};const{image:L,ip_adapter_model:K,weight:ne,begin_step_percent:z,end_step_percent:oe}=A,X=le?LI.getSelectors().selectById(le,`${K.base_model}/ip_adapter/${K.model_name}`):void 0;return X?(X==null?void 0:X.base_model)===(r==null?void 0:r.base_model)?{ipAdapter:{id:Ya(),type:"ip_adapter",isEnabled:!0,controlImage:(L==null?void 0:L.image_name)??null,model:X,weight:ne??Dv.weight,beginStepPct:z??Dv.beginStepPct,endStepPct:oe??Dv.endStepPct},error:null}:{ipAdapter:null,error:"IP Adapter incompatible with currently-selected model"}:{ipAdapter:null,error:"IP Adapter model is not installed"}},[le,r==null?void 0:r.base_model]),ce=i.useCallback(A=>{const L=ae(A);if(!L.ipAdapter){s(L.error);return}e(Ti(L.ipAdapter)),o()},[ae,e,o,s]),J=i.useCallback(A=>{e(Qh(A))},[e]),re=i.useCallback(A=>{if(!A){c();return}const{cfg_scale:L,cfg_rescale_multiplier:K,height:ne,model:z,positive_prompt:oe,negative_prompt:X,scheduler:Z,vae:me,seed:ve,steps:de,width:ke,strength:we,hrf_enabled:Re,hrf_strength:Qe,hrf_method:$e,positive_style_prompt:vt,negative_style_prompt:it,refiner_model:ot,refiner_cfg_scale:Ce,refiner_steps:Me,refiner_scheduler:qe,refiner_positive_aesthetic_score:dt,refiner_negative_aesthetic_score:ye,refiner_start:Ue,loras:st,controlnets:mt,ipAdapters:Pe,t2iAdapters:Ne}=A;Iv(L)&&e(Cm(L)),Ww(K)&&e(wm(K)),Vw(z)&&e(N1(z)),bp(oe)&&e(nd(oe)),xp(X)&&e(rd(X)),Pv(Z)&&e($1(Z)),(Uw(me)||na(me))&&(na(me)?e(nc(null)):e(nc(me))),Hw(ve)&&e(ym(ve)),Ev(de)&&e(Sm(de)),Mv(ke)&&e(Za(ke)),Ov(ne)&&e(Ja(ne)),yp(we)&&e(km(we)),Gw(Re)&&e(L1(Re)),yp(Qe)&&e(jm(Qe)),Kw($e)&&e(F1($e)),Tu(vt)&&e(od(vt)),_v(it)&&e(sd(it)),kA(ot)&&e(FI(ot)),Ev(Me)&&e(z1(Me)),Iv(Ce)&&e(B1(Ce)),Pv(qe)&&e(zI(qe)),jA(dt)&&e(H1(dt)),_A(ye)&&e(W1(ye)),IA(Ue)&&e(V1(Ue)),e(PA()),st==null||st.forEach(kt=>{const Se=U(kt);Se.lora&&e(qw({...Se.lora,weight:kt.weight}))}),e(kI()),mt==null||mt.forEach(kt=>{const Se=Y(kt);Se.controlnet&&e(Ti(Se.controlnet))}),Pe==null||Pe.forEach(kt=>{const Se=ae(kt);Se.ipAdapter&&e(Ti(Se.ipAdapter))}),Ne==null||Ne.forEach(kt=>{const Se=se(kt);Se.t2iAdapter&&e(Ti(Se.t2iAdapter))}),l()},[e,l,c,U,Y,ae,se]);return{recallBothPrompts:d,recallPositivePrompt:f,recallNegativePrompt:m,recallSDXLPositiveStylePrompt:h,recallSDXLNegativeStylePrompt:g,recallSeed:b,recallCfgScale:y,recallCfgRescaleMultiplier:x,recallModel:w,recallScheduler:S,recallVaeModel:j,recallSteps:_,recallWidth:I,recallHeight:E,recallWidthAndHeight:M,recallStrength:D,recallHrfEnabled:R,recallHrfStrength:N,recallHrfMethod:O,recallLoRA:G,recallControlNet:Q,recallIPAdapter:ce,recallT2IAdapter:ee,recallAllParameters:re,sendToImageToImage:J}},I7=({onSuccess:e,onError:t})=>{const n=te(),r=zs(),{t:o}=W(),[s,l]=EA();return{getAndLoadEmbeddedWorkflow:i.useCallback(async d=>{try{const f=await s(d);n(Dx({workflow:f.data,asCopy:!0})),e&&e()}catch{r({title:o("toast.problemRetrievingWorkflow"),status:"error"}),t&&t()}},[s,n,e,r,o,t]),getAndLoadEmbeddedWorkflowResult:l}};function sae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M125.7 160H176c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32s32 14.3 32 32v51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z"}}]})(e)}function aae(e){return De({tag:"svg",attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z"}}]})(e)}function lae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"}}]})(e)}function e0(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z"}}]})(e)}function P7(e){return De({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z"}}]})(e)}function iae(e){return De({tag:"svg",attr:{viewBox:"0 0 576 512"},child:[{tag:"path",attr:{d:"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6V105.5L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0h18.1c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z"}}]})(e)}function cae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z"}}]})(e)}function uae(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"}}]})(e)}function dae(e,t,n){var r=this,o=i.useRef(null),s=i.useRef(0),l=i.useRef(null),c=i.useRef([]),d=i.useRef(),f=i.useRef(),m=i.useRef(e),h=i.useRef(!0);m.current=e;var g=typeof window<"u",b=!t&&t!==0&&g;if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var y=!!(n=n||{}).leading,x=!("trailing"in n)||!!n.trailing,w="maxWait"in n,S="debounceOnServer"in n&&!!n.debounceOnServer,j=w?Math.max(+n.maxWait||0,t):null;i.useEffect(function(){return h.current=!0,function(){h.current=!1}},[]);var _=i.useMemo(function(){var I=function(O){var T=c.current,U=d.current;return c.current=d.current=null,s.current=O,f.current=m.current.apply(U,T)},E=function(O,T){b&&cancelAnimationFrame(l.current),l.current=b?requestAnimationFrame(O):setTimeout(O,T)},M=function(O){if(!h.current)return!1;var T=O-o.current;return!o.current||T>=t||T<0||w&&O-s.current>=j},D=function(O){return l.current=null,x&&c.current?I(O):(c.current=d.current=null,f.current)},R=function O(){var T=Date.now();if(M(T))return D(T);if(h.current){var U=t-(T-o.current),G=w?Math.min(U,j-(T-s.current)):U;E(O,G)}},N=function(){if(g||S){var O=Date.now(),T=M(O);if(c.current=[].slice.call(arguments),d.current=r,o.current=O,T){if(!l.current&&h.current)return s.current=o.current,E(R,t),y?I(o.current):f.current;if(w)return E(R,t),I(o.current)}return l.current||E(R,t),f.current}};return N.cancel=function(){l.current&&(b?cancelAnimationFrame(l.current):clearTimeout(l.current)),s.current=0,c.current=o.current=d.current=l.current=null},N.isPending=function(){return!!l.current},N.flush=function(){return l.current?D(Date.now()):f.current},N},[y,w,t,j,x,b,g,S]);return _}function fae(e,t){return e===t}function pae(e,t){return t}function kc(e,t,n){var r=n&&n.equalityFn||fae,o=i.useReducer(pae,e),s=o[0],l=o[1],c=dae(i.useCallback(function(f){return l(f)},[l]),t,n),d=i.useRef(e);return r(d.current,e)||(c(e),d.current=e),[s,c]}const _2=e=>{const t=H(s=>s.config.metadataFetchDebounce??300),[n]=kc(e,t),{data:r,isLoading:o}=BI(n??Br);return{metadata:r,isLoading:o}},mae=e=>{const{imageDTO:t}=e,n=te(),{t:r}=W(),o=zs(),s=Mt("unifiedCanvas").isFeatureEnabled,l=qh(jx),{metadata:c,isLoading:d}=_2(t==null?void 0:t.image_name),{getAndLoadEmbeddedWorkflow:f,getAndLoadEmbeddedWorkflowResult:m}=I7({}),h=i.useCallback(()=>{f(t.image_name)},[f,t.image_name]),[g]=_x(),[b]=Ix(),{isClipboardAPIAvailable:y,copyImageToClipboard:x}=j7(),w=i.useCallback(()=>{t&&n(Xh([t]))},[n,t]),{recallBothPrompts:S,recallSeed:j,recallAllParameters:_}=Sf(),I=i.useCallback(()=>{S(c==null?void 0:c.positive_prompt,c==null?void 0:c.negative_prompt,c==null?void 0:c.positive_style_prompt,c==null?void 0:c.negative_style_prompt)},[c==null?void 0:c.negative_prompt,c==null?void 0:c.positive_prompt,c==null?void 0:c.positive_style_prompt,c==null?void 0:c.negative_style_prompt,S]),E=i.useCallback(()=>{j(c==null?void 0:c.seed)},[c==null?void 0:c.seed,j]),M=i.useCallback(()=>{n(_7()),n(Qh(t))},[n,t]),D=i.useCallback(()=>{n(rae()),Jr.flushSync(()=>{n(Js("unifiedCanvas"))}),n(HI(t)),o({title:r("toast.sentToUnifiedCanvas"),status:"success",duration:2500,isClosable:!0})},[n,t,r,o]),R=i.useCallback(()=>{_(c)},[c,_]),N=i.useCallback(()=>{n(RI([t])),n(yx(!0))},[n,t]),O=i.useCallback(()=>{x(t.image_url)},[x,t.image_url]),T=i.useCallback(()=>{t&&g({imageDTOs:[t]})},[g,t]),U=i.useCallback(()=>{t&&b({imageDTOs:[t]})},[b,t]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"a",href:t.image_url,target:"_blank",icon:a.jsx(Xy,{}),children:r("common.openInNewTab")}),y&&a.jsx(At,{icon:a.jsx(ru,{}),onClickCapture:O,children:r("parameters.copyImage")}),a.jsx(At,{as:"a",download:!0,href:t.image_url,target:"_blank",icon:a.jsx(ou,{}),w:"100%",children:r("parameters.downloadImage")}),a.jsx(At,{icon:m.isLoading?a.jsx(Zp,{}):a.jsx(e0,{}),onClickCapture:h,isDisabled:!t.has_workflow,children:r("nodes.loadWorkflow")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(GM,{}),onClickCapture:I,isDisabled:d||(c==null?void 0:c.positive_prompt)===void 0&&(c==null?void 0:c.negative_prompt)===void 0,children:r("parameters.usePrompt")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(KM,{}),onClickCapture:E,isDisabled:d||(c==null?void 0:c.seed)===void 0,children:r("parameters.useSeed")}),a.jsx(At,{icon:d?a.jsx(Zp,{}):a.jsx(NM,{}),onClickCapture:R,isDisabled:d||!c,children:r("parameters.useAll")}),a.jsx(At,{icon:a.jsx(xj,{}),onClickCapture:M,id:"send-to-img2img",children:r("parameters.sendToImg2Img")}),s&&a.jsx(At,{icon:a.jsx(xj,{}),onClickCapture:D,id:"send-to-canvas",children:r("parameters.sendToUnifiedCanvas")}),a.jsx(At,{icon:a.jsx(BM,{}),onClickCapture:N,children:r("boards.changeBoard")}),t.starred?a.jsx(At,{icon:l?l.off.icon:a.jsx(j2,{}),onClickCapture:U,children:l?l.off.text:r("gallery.unstarImage")}):a.jsx(At,{icon:l?l.on.icon:a.jsx(k2,{}),onClickCapture:T,children:l?l.on.text:r("gallery.starImage")}),a.jsx(At,{sx:{color:"error.600",_dark:{color:"error.300"}},icon:a.jsx(ao,{}),onClickCapture:w,children:r("gallery.deleteImage")})]})},E7=i.memo(mae),Zp=()=>a.jsx($,{w:"14px",alignItems:"center",justifyContent:"center",children:a.jsx(va,{size:"xs"})}),hae=fe([pe],({gallery:e})=>({selectionCount:e.selection.length})),gae=({imageDTO:e,children:t})=>{const{selectionCount:n}=H(hae),r=i.useCallback(s=>{s.preventDefault()},[]),o=i.useCallback(()=>e?n>1?a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:r,children:a.jsx(tae,{})}):a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:r,children:a.jsx(E7,{imageDTO:e})}):null,[e,n,r]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:o,children:t})},vae=i.memo(gae),bae=e=>{const{data:t,disabled:n,...r}=e,o=i.useRef(Ya()),{attributes:s,listeners:l,setNodeRef:c}=Wre({id:o.current,disabled:n,data:t});return a.jsx(Ie,{ref:c,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,...s,...l,...r})},xae=i.memo(bae),yae=a.jsx(An,{as:$g,sx:{boxSize:16}}),Cae=a.jsx(Tn,{icon:si}),wae=e=>{const{imageDTO:t,onError:n,onClick:r,withMetadataOverlay:o=!1,isDropDisabled:s=!1,isDragDisabled:l=!1,isUploadDisabled:c=!1,minSize:d=24,postUploadAction:f,imageSx:m,fitContainer:h=!1,droppableData:g,draggableData:b,dropLabel:y,isSelected:x=!1,thumbnail:w=!1,noContentFallback:S=Cae,uploadElement:j=yae,useThumbailFallback:_,withHoverOverlay:I=!1,children:E,onMouseOver:M,onMouseOut:D,dataTestId:R}=e,{colorMode:N}=ya(),[O,T]=i.useState(!1),U=i.useCallback(V=>{M&&M(V),T(!0)},[M]),G=i.useCallback(V=>{D&&D(V),T(!1)},[D]),{getUploadButtonProps:q,getUploadInputProps:Y}=S2({postUploadAction:f,isDisabled:c}),Q=c?{}:{cursor:"pointer",bg:Te("base.200","base.700")(N),_hover:{bg:Te("base.300","base.650")(N),color:Te("base.500","base.300")(N)}};return a.jsx(vae,{imageDTO:t,children:V=>a.jsxs($,{ref:V,onMouseOver:U,onMouseOut:G,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative",minW:d||void 0,minH:d||void 0,userSelect:"none",cursor:l||!t?"default":"pointer"},children:[t&&a.jsxs($,{sx:{w:"full",h:"full",position:h?"absolute":"relative",alignItems:"center",justifyContent:"center"},children:[a.jsx(Ca,{src:w?t.thumbnail_url:t.image_url,fallbackStrategy:"beforeLoadOrError",fallbackSrc:_?t.thumbnail_url:void 0,fallback:_?void 0:a.jsx(boe,{image:t}),onError:n,draggable:!1,sx:{w:t.width,objectFit:"contain",maxW:"full",maxH:"full",borderRadius:"base",...m},"data-testid":R}),o&&a.jsx(Qse,{imageDTO:t}),a.jsx(d2,{isSelected:x,isHovered:I?O:!1})]}),!t&&!c&&a.jsx(a.Fragment,{children:a.jsxs($,{sx:{minH:d,w:"full",h:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",transitionProperty:"common",transitionDuration:"0.1s",color:Te("base.500","base.500")(N),...Q},...q(),children:[a.jsx("input",{...Y()}),j]})}),!t&&c&&S,t&&!l&&a.jsx(xae,{data:b,disabled:l||!t,onClick:r}),E,!s&&a.jsx(u2,{data:g,disabled:s,dropLabel:y})]})})},fl=i.memo(wae),Sae=e=>{const{onClick:t,tooltip:n,icon:r,styleOverrides:o}=e,s=ia("drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))","drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))");return a.jsx(Fe,{onClick:t,"aria-label":n,tooltip:n,icon:r,size:"sm",variant:"link",sx:{position:"absolute",top:1,insetInlineEnd:1,p:0,minW:0,svg:{transitionProperty:"common",transitionDuration:"normal",fill:"base.100",_hover:{fill:"base.50"},filter:s},...o},"data-testid":n})},jc=i.memo(Sae),kae=()=>a.jsx(wg,{sx:{position:"relative",height:"full",width:"full","::before":{content:"''",display:"block",pt:"100%"}},children:a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,height:"full",width:"full"}})}),jae=i.memo(kae),_ae=fe([pe,kx],({gallery:e},t)=>{const n=e.selection;return{queryArgs:t,selection:n}}),Iae=e=>{const t=te(),{queryArgs:n,selection:r}=H(_ae),{imageDTOs:o}=WI(n,{selectFromResult:f=>({imageDTOs:f.data?MA.selectAll(f.data):[]})}),s=Mt("multiselect").isFeatureEnabled,l=i.useCallback(f=>{var m;if(e){if(!s){t($u([e]));return}if(f.shiftKey){const h=e.image_name,g=(m=r[r.length-1])==null?void 0:m.image_name,b=o.findIndex(x=>x.image_name===g),y=o.findIndex(x=>x.image_name===h);if(b>-1&&y>-1){const x=Math.min(b,y),w=Math.max(b,y),S=o.slice(x,w+1);t($u(r.concat(S)))}}else f.ctrlKey||f.metaKey?r.some(h=>h.image_name===e.image_name)&&r.length>1?t($u(r.filter(h=>h.image_name!==e.image_name))):t($u(r.concat(e))):t($u([e]))}},[t,e,o,r,s]),c=i.useMemo(()=>e?r.some(f=>f.image_name===e.image_name):!1,[e,r]),d=i.useMemo(()=>r.length,[r.length]);return{selection:r,selectionCount:d,isSelected:c,handleClick:l}},Pae=(e,t,n,r)=>{const o=i.useRef(null);return i.useEffect(()=>{if(!e||n!==1||!r.rootRef.current||!r.virtuosoRef.current||!r.virtuosoRangeRef.current||!o.current)return;const s=o.current.getBoundingClientRect(),l=r.rootRef.current.getBoundingClientRect();s.top>=l.top&&s.bottom<=l.bottom&&s.left>=l.left&&s.right<=l.right||r.virtuosoRef.current.scrollToIndex({index:t,behavior:"smooth",align:Gb(t,r.virtuosoRangeRef.current)})},[e,t,n,r]),o},Eae=e=>{const t=te(),{imageName:n,virtuosoContext:r}=e,{currentData:o}=jo(n),s=H(R=>R.hotkeys.shift),{t:l}=W(),{handleClick:c,isSelected:d,selection:f,selectionCount:m}=Iae(o),h=qh(jx),g=Pae(d,e.index,m,r),b=i.useCallback(R=>{R.stopPropagation(),o&&t(Xh([o]))},[t,o]),y=i.useMemo(()=>{if(m>1)return{id:"gallery-image",payloadType:"IMAGE_DTOS",payload:{imageDTOs:f}};if(o)return{id:"gallery-image",payloadType:"IMAGE_DTO",payload:{imageDTO:o}}},[o,f,m]),[x]=_x(),[w]=Ix(),S=i.useCallback(()=>{o&&(o.starred&&w({imageDTOs:[o]}),o.starred||x({imageDTOs:[o]}))},[x,w,o]),[j,_]=i.useState(!1),I=i.useCallback(()=>{_(!0)},[]),E=i.useCallback(()=>{_(!1)},[]),M=i.useMemo(()=>{if(o!=null&&o.starred)return h?h.on.icon:a.jsx(j2,{size:"20"});if(!(o!=null&&o.starred)&&j)return h?h.off.icon:a.jsx(k2,{size:"20"})},[o==null?void 0:o.starred,j,h]),D=i.useMemo(()=>o!=null&&o.starred?h?h.off.text:"Unstar":o!=null&&o.starred?"":h?h.on.text:"Star",[o==null?void 0:o.starred,h]);return o?a.jsx(Ie,{sx:{w:"full",h:"full",touchAction:"none"},"data-testid":`image-${o.image_name}`,children:a.jsx($,{ref:g,userSelect:"none",sx:{position:"relative",justifyContent:"center",alignItems:"center",aspectRatio:"1/1"},children:a.jsx(fl,{onClick:c,imageDTO:o,draggableData:y,isSelected:d,minSize:0,imageSx:{w:"full",h:"full"},isDropDisabled:!0,isUploadDisabled:!0,thumbnail:!0,withHoverOverlay:!0,onMouseOver:I,onMouseOut:E,children:a.jsxs(a.Fragment,{children:[a.jsx(jc,{onClick:S,icon:M,tooltip:D}),j&&s&&a.jsx(jc,{onClick:b,icon:a.jsx(ao,{}),tooltip:l("gallery.deleteImage"),styleOverrides:{bottom:2,top:"auto"}})]})})})}):a.jsx(jae,{})},Mae=i.memo(Eae),Oae=_e((e,t)=>a.jsx(Ie,{className:"item-container",ref:t,p:1.5,"data-testid":"image-item-container",children:e.children})),Dae=i.memo(Oae),Rae=_e((e,t)=>{const n=H(r=>r.gallery.galleryImageMinimumWidth);return a.jsx(sl,{...e,className:"list-container",ref:t,sx:{gridTemplateColumns:`repeat(auto-fill, minmax(${n}px, 1fr));`},"data-testid":"image-list-container",children:e.children})}),Aae=i.memo(Rae),Tae={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},Nae=()=>{const{t:e}=W(),t=i.useRef(null),[n,r]=i.useState(null),[o,s]=c2(Tae),l=H(E=>E.gallery.selectedBoardId),{currentViewTotal:c}=qse(l),d=H(kx),f=i.useRef(null),m=i.useRef(null),{currentData:h,isFetching:g,isSuccess:b,isError:y}=WI(d),[x]=DI(),w=i.useMemo(()=>!h||!c?!1:h.ids.length{w&&x({...d,offset:(h==null?void 0:h.ids.length)??0,limit:OI})},[w,x,d,h==null?void 0:h.ids.length]),j=i.useMemo(()=>({virtuosoRef:m,rootRef:t,virtuosoRangeRef:f}),[]),_=i.useCallback((E,M,D)=>a.jsx(Mae,{index:E,imageName:M,virtuosoContext:D},M),[]);i.useEffect(()=>{const{current:E}=t;return n&&E&&o({target:E,elements:{viewport:n}}),()=>{var M;return(M=s())==null?void 0:M.destroy()}},[n,o,s]);const I=i.useCallback(E=>{f.current=E},[]);return i.useEffect(()=>{lc.setKey("virtuosoRef",m),lc.setKey("virtuosoRangeRef",f)},[]),h?b&&(h==null?void 0:h.ids.length)===0?a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(Tn,{label:e("gallery.noImagesInGallery"),icon:si})}):b&&h?a.jsxs(a.Fragment,{children:[a.jsx(Ie,{ref:t,"data-overlayscrollbars":"",h:"100%",children:a.jsx(Kse,{style:{height:"100%"},data:h.ids,endReached:S,components:{Item:Dae,List:Aae},scrollerRef:r,itemContent:_,ref:m,rangeChanged:I,context:j,overscan:10})}),a.jsx(Xe,{onClick:S,isDisabled:!w,isLoading:g,loadingText:e("gallery.loading"),flexShrink:0,children:`Load More (${h.ids.length} of ${c})`})]}):y?a.jsx(Ie,{sx:{w:"full",h:"full"},children:a.jsx(Tn,{label:e("gallery.unableToLoad"),icon:kte})}):null:a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(Tn,{label:e("gallery.loading"),icon:si})})},$ae=i.memo(Nae),Lae=fe([pe],e=>{const{galleryView:t}=e.gallery;return{galleryView:t}}),Fae=()=>{const{t:e}=W(),t=i.useRef(null),n=i.useRef(null),{galleryView:r}=H(Lae),o=te(),{isOpen:s,onToggle:l}=sr({defaultIsOpen:!0}),c=i.useCallback(()=>{o(Xw("images"))},[o]),d=i.useCallback(()=>{o(Xw("assets"))},[o]);return a.jsxs(F5,{layerStyle:"first",sx:{flexDirection:"column",h:"full",w:"full",borderRadius:"base",p:2},children:[a.jsxs(Ie,{sx:{w:"full"},children:[a.jsxs($,{ref:t,sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:[a.jsx(ioe,{isOpen:s,onToggle:l}),a.jsx(voe,{})]}),a.jsx(Ie,{children:a.jsx(soe,{isOpen:s})})]}),a.jsxs($,{ref:n,direction:"column",gap:2,h:"full",w:"full",children:[a.jsx($,{sx:{alignItems:"center",justifyContent:"space-between",gap:2},children:a.jsx(ci,{index:r==="images"?0:1,variant:"unstyled",size:"sm",sx:{w:"full"},children:a.jsx(ui,{children:a.jsxs($t,{isAttached:!0,sx:{w:"full"},children:[a.jsx(mr,{as:Xe,size:"sm",isChecked:r==="images",onClick:c,sx:{w:"full"},leftIcon:a.jsx(Tte,{}),"data-testid":"images-tab",children:e("parameters.images")}),a.jsx(mr,{as:Xe,size:"sm",isChecked:r==="assets",onClick:d,sx:{w:"full"},leftIcon:a.jsx(Gte,{}),"data-testid":"assets-tab",children:e("gallery.assets")})]})})})}),a.jsx($ae,{})]})]})},zae=i.memo(Fae),Bae={paramNegativeConditioning:{placement:"right"},controlNet:{href:"https://support.invoke.ai/support/solutions/articles/151000105880"},lora:{href:"https://support.invoke.ai/support/solutions/articles/151000159072"},compositingCoherenceMode:{href:"https://support.invoke.ai/support/solutions/articles/151000158838"},infillMethod:{href:"https://support.invoke.ai/support/solutions/articles/151000158841"},scaleBeforeProcessing:{href:"https://support.invoke.ai/support/solutions/articles/151000158841"},paramIterations:{href:"https://support.invoke.ai/support/solutions/articles/151000159073"},paramPositiveConditioning:{href:"https://support.invoke.ai/support/solutions/articles/151000096606-tips-on-crafting-prompts",placement:"right"},paramScheduler:{placement:"right",href:"https://support.invoke.ai/support/solutions/articles/151000159073"},paramModel:{placement:"right",href:"https://support.invoke.ai/support/solutions/articles/151000096601-what-is-a-model-which-should-i-use-"},paramRatio:{gutter:16},controlNetControlMode:{placement:"right"},controlNetResizeMode:{placement:"right"},paramVAE:{placement:"right"},paramVAEPrecision:{placement:"right"}},Hae=1e3,Wae=[{name:"preventOverflow",options:{padding:10}}],M7=_e(({feature:e,children:t,wrapperProps:n,...r},o)=>{const{t:s}=W(),l=H(g=>g.system.shouldEnableInformationalPopovers),c=i.useMemo(()=>Bae[e],[e]),d=i.useMemo(()=>OA(DA(c,["image","href","buttonLabel"]),r),[c,r]),f=i.useMemo(()=>s(`popovers.${e}.heading`),[e,s]),m=i.useMemo(()=>s(`popovers.${e}.paragraphs`,{returnObjects:!0})??[],[e,s]),h=i.useCallback(()=>{c!=null&&c.href&&window.open(c.href)},[c==null?void 0:c.href]);return l?a.jsxs(lf,{isLazy:!0,closeOnBlur:!1,trigger:"hover",variant:"informational",openDelay:Hae,modifiers:Wae,placement:"top",...d,children:[a.jsx(yg,{children:a.jsx(Ie,{ref:o,w:"full",...n,children:t})}),a.jsx(Uc,{children:a.jsxs(cf,{w:96,children:[a.jsx(h6,{}),a.jsx(Cg,{children:a.jsxs($,{sx:{gap:2,flexDirection:"column",alignItems:"flex-start"},children:[f&&a.jsxs(a.Fragment,{children:[a.jsx(or,{size:"sm",children:f}),a.jsx(On,{})]}),(c==null?void 0:c.image)&&a.jsxs(a.Fragment,{children:[a.jsx(Ca,{sx:{objectFit:"contain",maxW:"60%",maxH:"60%",backgroundColor:"white"},src:c.image,alt:"Optional Image"}),a.jsx(On,{})]}),m.map(g=>a.jsx(be,{children:g},g)),(c==null?void 0:c.href)&&a.jsxs(a.Fragment,{children:[a.jsx(On,{}),a.jsx(ol,{pt:1,onClick:h,leftIcon:a.jsx(Xy,{}),alignSelf:"flex-end",variant:"link",children:s("common.learnMore")??f})]})]})})]})})]}):a.jsx(Ie,{ref:o,w:"full",...n,children:t})});M7.displayName="IAIInformationalPopover";const Ot=i.memo(M7),I2=e=>{e.stopPropagation()},zh=/^-?(0\.)?\.?$/,O7=_e((e,t)=>{const{label:n,isDisabled:r=!1,showStepper:o=!0,isInvalid:s,value:l,onChange:c,min:d,max:f,isInteger:m=!0,formControlProps:h,formLabelProps:g,numberInputFieldProps:b,numberInputStepperProps:y,tooltipProps:x,...w}=e,S=te(),[j,_]=i.useState(String(l));i.useEffect(()=>{!j.match(zh)&&l!==Number(j)&&_(String(l))},[l,j]);const I=i.useCallback(R=>{_(R),R.match(zh)||c(m?Math.floor(Number(R)):Number(R))},[m,c]),E=i.useCallback(R=>{const N=Zl(m?Math.floor(Number(R.target.value)):Number(R.target.value),d,f);_(String(N)),c(N)},[m,f,d,c]),M=i.useCallback(R=>{R.shiftKey&&S(zr(!0))},[S]),D=i.useCallback(R=>{R.shiftKey||S(zr(!1))},[S]);return a.jsx(Ut,{...x,children:a.jsxs(Gt,{ref:t,isDisabled:r,isInvalid:s,...h,children:[n&&a.jsx(ln,{...g,children:n}),a.jsxs(mg,{value:j,min:d,max:f,keepWithinRange:!0,clampValueOnBlur:!1,onChange:I,onBlur:E,...w,onPaste:I2,children:[a.jsx(gg,{...b,onKeyDown:M,onKeyUp:D}),o&&a.jsxs(hg,{children:[a.jsx(bg,{...y}),a.jsx(vg,{...y})]})]})]})})});O7.displayName="IAINumberInput";const _s=i.memo(O7),Vae=fe([pe],e=>{const{initial:t,min:n,sliderMax:r,inputMax:o,fineStep:s,coarseStep:l}=e.config.sd.iterations,{iterations:c}=e.generation,{shouldUseSliders:d}=e.ui,f=e.hotkeys.shift?s:l;return{iterations:c,initial:t,min:n,sliderMax:r,inputMax:o,step:f,shouldUseSliders:d}}),Uae=({asSlider:e})=>{const{iterations:t,initial:n,min:r,sliderMax:o,inputMax:s,step:l,shouldUseSliders:c}=H(Vae),d=te(),{t:f}=W(),m=i.useCallback(g=>{d(Qw(g))},[d]),h=i.useCallback(()=>{d(Qw(n))},[d,n]);return e||c?a.jsx(Ot,{feature:"paramIterations",children:a.jsx(nt,{label:f("parameters.iterations"),step:l,min:r,max:o,onChange:m,handleReset:h,value:t,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s}})}):a.jsx(Ot,{feature:"paramIterations",children:a.jsx(_s,{label:f("parameters.iterations"),step:l,min:r,max:s,onChange:m,value:t,numberInputFieldProps:{textAlign:"center"}})})},ds=i.memo(Uae),Gae=()=>{const e=H(f=>f.system.isConnected),{data:t}=Ls(),[n,{isLoading:r}]=Rx(),o=te(),{t:s}=W(),l=i.useMemo(()=>t==null?void 0:t.queue.item_id,[t==null?void 0:t.queue.item_id]),c=i.useCallback(async()=>{if(l)try{await n(l).unwrap(),o(lt({title:s("queue.cancelSucceeded"),status:"success"}))}catch{o(lt({title:s("queue.cancelFailed"),status:"error"}))}},[l,o,s,n]),d=i.useMemo(()=>!e||na(l),[e,l]);return{cancelQueueItem:c,isLoading:r,currentQueueItemId:l,isDisabled:d}},Kae=({label:e,tooltip:t,icon:n,onClick:r,isDisabled:o,colorScheme:s,asIconButton:l,isLoading:c,loadingText:d,sx:f})=>l?a.jsx(Fe,{"aria-label":e,tooltip:t,icon:n,onClick:r,isDisabled:o,colorScheme:s,isLoading:c,sx:f,"data-testid":e}):a.jsx(Xe,{"aria-label":e,tooltip:t,leftIcon:n,onClick:r,isDisabled:o,colorScheme:s,isLoading:c,loadingText:d??e,flexGrow:1,sx:f,"data-testid":e,children:e}),gi=i.memo(Kae),qae=({asIconButton:e,sx:t})=>{const{t:n}=W(),{cancelQueueItem:r,isLoading:o,isDisabled:s}=Gae();return a.jsx(gi,{isDisabled:s,isLoading:o,asIconButton:e,label:n("queue.cancel"),tooltip:n("queue.cancelTooltip"),icon:a.jsx(Nc,{}),onClick:r,colorScheme:"error",sx:t})},D7=i.memo(qae),Xae=()=>{const{t:e}=W(),t=te(),{data:n}=Ls(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=VI({fixedCacheKey:"clearQueue"}),l=i.useCallback(async()=>{if(n!=null&&n.queue.total)try{await o().unwrap(),t(lt({title:e("queue.clearSucceeded"),status:"success"})),t(Ax(void 0)),t(Tx(void 0))}catch{t(lt({title:e("queue.clearFailed"),status:"error"}))}},[n==null?void 0:n.queue.total,o,t,e]),c=i.useMemo(()=>!r||!(n!=null&&n.queue.total),[r,n==null?void 0:n.queue.total]);return{clearQueue:l,isLoading:s,queueStatus:n,isDisabled:c}},Qae=_e((e,t)=>{const{t:n}=W(),{acceptButtonText:r=n("common.accept"),acceptCallback:o,cancelButtonText:s=n("common.cancel"),cancelCallback:l,children:c,title:d,triggerComponent:f}=e,{isOpen:m,onOpen:h,onClose:g}=sr(),b=i.useRef(null),y=i.useCallback(()=>{o(),g()},[o,g]),x=i.useCallback(()=>{l&&l(),g()},[l,g]);return a.jsxs(a.Fragment,{children:[i.cloneElement(f,{onClick:h,ref:t}),a.jsx(Zc,{isOpen:m,leastDestructiveRef:b,onClose:g,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:d}),a.jsx(Mo,{children:c}),a.jsxs(ls,{children:[a.jsx(Xe,{ref:b,onClick:x,children:s}),a.jsx(Xe,{colorScheme:"error",onClick:y,ml:3,children:r})]})]})})})]})}),t0=i.memo(Qae),Yae=({asIconButton:e,sx:t})=>{const{t:n}=W(),{clearQueue:r,isLoading:o,isDisabled:s}=Xae();return a.jsxs(t0,{title:n("queue.clearTooltip"),acceptCallback:r,acceptButtonText:n("queue.clear"),triggerComponent:a.jsx(gi,{isDisabled:s,isLoading:o,asIconButton:e,label:n("queue.clear"),tooltip:n("queue.clearTooltip"),icon:a.jsx(ao,{}),colorScheme:"error",sx:t}),children:[a.jsx(be,{children:n("queue.clearQueueAlertDialog")}),a.jsx("br",{}),a.jsx(be,{children:n("queue.clearQueueAlertDialog2")})]})},P2=i.memo(Yae),Zae=()=>{const e=te(),{t}=W(),n=H(f=>f.system.isConnected),{data:r}=Ls(),[o,{isLoading:s}]=UI({fixedCacheKey:"pauseProcessor"}),l=i.useMemo(()=>!!(r!=null&&r.processor.is_started),[r==null?void 0:r.processor.is_started]),c=i.useCallback(async()=>{if(l)try{await o().unwrap(),e(lt({title:t("queue.pauseSucceeded"),status:"success"}))}catch{e(lt({title:t("queue.pauseFailed"),status:"error"}))}},[l,o,e,t]),d=i.useMemo(()=>!n||!l,[n,l]);return{pauseProcessor:c,isLoading:s,isStarted:l,isDisabled:d}},Jae=({asIconButton:e})=>{const{t}=W(),{pauseProcessor:n,isLoading:r,isDisabled:o}=Zae();return a.jsx(gi,{asIconButton:e,label:t("queue.pause"),tooltip:t("queue.pauseTooltip"),isDisabled:o,isLoading:r,icon:a.jsx(Bte,{}),onClick:n,colorScheme:"gold"})},R7=i.memo(Jae),ele=fe([pe,tr],({controlAdapters:e,generation:t,system:n,nodes:r,dynamicPrompts:o},s)=>{const{initialImage:l,model:c}=t,{isConnected:d}=n,f=[];return d||f.push(wt.t("parameters.invoke.systemDisconnected")),s==="img2img"&&!l&&f.push(wt.t("parameters.invoke.noInitialImageSelected")),s==="nodes"?r.shouldValidateGraph&&(r.nodes.length||f.push(wt.t("parameters.invoke.noNodesInGraph")),r.nodes.forEach(m=>{if(!Jt(m))return;const h=r.nodeTemplates[m.data.type];if(!h){f.push(wt.t("parameters.invoke.missingNodeTemplate"));return}const g=RA([m],r.edges);qn(m.data.inputs,b=>{const y=h.inputs[b.name],x=g.some(w=>w.target===m.id&&w.targetHandle===b.name);if(!y){f.push(wt.t("parameters.invoke.missingFieldTemplate"));return}if(y.required&&b.value===void 0&&!x){f.push(wt.t("parameters.invoke.missingInputForField",{nodeLabel:m.data.label||h.title,fieldLabel:b.label||y.title}));return}})})):(o.prompts.length===0&&f.push(wt.t("parameters.invoke.noPrompts")),c||f.push(wt.t("parameters.invoke.noModelSelected")),AA(e).forEach((m,h)=>{m.isEnabled&&(m.model?m.model.base_model!==(c==null?void 0:c.base_model)&&f.push(wt.t("parameters.invoke.incompatibleBaseModelForControlAdapter",{number:h+1})):f.push(wt.t("parameters.invoke.noModelForControlAdapter",{number:h+1})),(!m.controlImage||Gc(m)&&!m.processedControlImage&&m.processorType!=="none")&&f.push(wt.t("parameters.invoke.noControlImageForControlAdapter",{number:h+1})))})),{isReady:!f.length,reasons:f}}),E2=()=>{const{isReady:e,reasons:t}=H(ele);return{isReady:e,reasons:t}},A7=()=>{const e=te(),t=H(tr),{isReady:n}=E2(),[r,{isLoading:o}]=Yh({fixedCacheKey:"enqueueBatch"}),s=i.useMemo(()=>!n,[n]);return{queueBack:i.useCallback(()=>{s||(e(Nx()),e(GI({tabName:t,prepend:!1})))},[e,s,t]),isLoading:o,isDisabled:s}},tle=fe([pe],({gallery:e})=>{const{autoAddBoardId:t}=e;return{autoAddBoardId:t}}),nle=({prepend:e=!1})=>{const{t}=W(),{isReady:n,reasons:r}=E2(),{autoAddBoardId:o}=H(tle),s=qg(o),[l,{isLoading:c}]=Yh({fixedCacheKey:"enqueueBatch"}),d=i.useMemo(()=>t(c?"queue.enqueueing":n?e?"queue.queueFront":"queue.queueBack":"queue.notReady"),[c,n,e,t]);return a.jsxs($,{flexDir:"column",gap:1,children:[a.jsx(be,{fontWeight:600,children:d}),r.length>0&&a.jsx(cg,{children:r.map((f,m)=>a.jsx(ts,{children:a.jsx(be,{fontWeight:400,children:f})},`${f}.${m}`))}),a.jsx(N7,{}),a.jsxs(be,{fontWeight:400,fontStyle:"oblique 10deg",children:[t("parameters.invoke.addingImagesTo")," ",a.jsx(be,{as:"span",fontWeight:600,children:s||t("boards.uncategorized")})]})]})},T7=i.memo(nle),N7=i.memo(()=>a.jsx(On,{opacity:.2,borderColor:"base.50",_dark:{borderColor:"base.900"}}));N7.displayName="StyledDivider";const rle=()=>a.jsx(Ie,{pos:"relative",w:4,h:4,children:a.jsx(Ca,{src:Cx,alt:"invoke-ai-logo",pos:"absolute",top:-.5,insetInlineStart:-.5,w:5,h:5,minW:5,minH:5,filter:"saturate(0)"})}),ole=i.memo(rle),sle=({asIconButton:e,sx:t})=>{const{t:n}=W(),{queueBack:r,isLoading:o,isDisabled:s}=A7();return a.jsx(gi,{asIconButton:e,colorScheme:"accent",label:n("parameters.invoke.invoke"),isDisabled:s,isLoading:o,onClick:r,tooltip:a.jsx(T7,{}),sx:t,icon:e?a.jsx(ole,{}):void 0})},$7=i.memo(sle),L7=()=>{const e=te(),t=H(tr),{isReady:n}=E2(),[r,{isLoading:o}]=Yh({fixedCacheKey:"enqueueBatch"}),s=Mt("prependQueue").isFeatureEnabled,l=i.useMemo(()=>!n||!s,[n,s]);return{queueFront:i.useCallback(()=>{l||(e(Nx()),e(GI({tabName:t,prepend:!0})))},[e,l,t]),isLoading:o,isDisabled:l}},ale=({asIconButton:e,sx:t})=>{const{t:n}=W(),{queueFront:r,isLoading:o,isDisabled:s}=L7();return a.jsx(gi,{asIconButton:e,colorScheme:"base",label:n("queue.queueFront"),isDisabled:s,isLoading:o,onClick:r,tooltip:a.jsx(T7,{prepend:!0}),icon:a.jsx(aae,{}),sx:t})},lle=i.memo(ale),ile=()=>{const e=te(),t=H(f=>f.system.isConnected),{data:n}=Ls(),{t:r}=W(),[o,{isLoading:s}]=KI({fixedCacheKey:"resumeProcessor"}),l=i.useMemo(()=>!!(n!=null&&n.processor.is_started),[n==null?void 0:n.processor.is_started]),c=i.useCallback(async()=>{if(!l)try{await o().unwrap(),e(lt({title:r("queue.resumeSucceeded"),status:"success"}))}catch{e(lt({title:r("queue.resumeFailed"),status:"error"}))}},[l,o,e,r]),d=i.useMemo(()=>!t||l,[t,l]);return{resumeProcessor:c,isLoading:s,isStarted:l,isDisabled:d}},cle=({asIconButton:e})=>{const{t}=W(),{resumeProcessor:n,isLoading:r,isDisabled:o}=ile();return a.jsx(gi,{asIconButton:e,label:t("queue.resume"),tooltip:t("queue.resumeTooltip"),isDisabled:o,isLoading:r,icon:a.jsx(Hte,{}),onClick:n,colorScheme:"green"})},F7=i.memo(cle),ule=fe(pe,({system:e})=>{var t;return{isConnected:e.isConnected,hasSteps:!!e.denoiseProgress,value:(((t=e.denoiseProgress)==null?void 0:t.percentage)??0)*100}}),dle=()=>{const{t:e}=W(),{data:t}=Ls(),{hasSteps:n,value:r,isConnected:o}=H(ule);return a.jsx(x6,{value:r,"aria-label":e("accessibility.invokeProgressBar"),isIndeterminate:o&&!!(t!=null&&t.queue.in_progress)&&!n,h:"full",w:"full",borderRadius:2,colorScheme:"accent"})},fle=i.memo(dle),ple=()=>{const e=Mt("pauseQueue").isFeatureEnabled,t=Mt("resumeQueue").isFeatureEnabled,n=Mt("prependQueue").isFeatureEnabled;return a.jsxs($,{layerStyle:"first",sx:{w:"full",position:"relative",borderRadius:"base",p:2,gap:2,flexDir:"column"},children:[a.jsxs($,{gap:2,w:"full",children:[a.jsxs($t,{isAttached:!0,flexGrow:2,children:[a.jsx($7,{}),n?a.jsx(lle,{asIconButton:!0}):a.jsx(a.Fragment,{}),a.jsx(D7,{asIconButton:!0})]}),a.jsxs($t,{isAttached:!0,children:[t?a.jsx(F7,{asIconButton:!0}):a.jsx(a.Fragment,{}),e?a.jsx(R7,{asIconButton:!0}):a.jsx(a.Fragment,{})]}),a.jsx(P2,{asIconButton:!0})]}),a.jsx($,{h:3,w:"full",children:a.jsx(fle,{})}),a.jsx(B7,{})]})},z7=i.memo(ple),B7=i.memo(()=>{const{t:e}=W(),t=te(),{hasItems:n,pending:r}=Ls(void 0,{selectFromResult:({data:s})=>{if(!s)return{hasItems:!1,pending:0};const{pending:l,in_progress:c}=s.queue;return{hasItems:l+c>0,pending:l}}}),o=i.useCallback(()=>{t(Js("queue"))},[t]);return a.jsxs($,{justifyContent:"space-between",alignItems:"center",pe:1,"data-testid":"queue-count",children:[a.jsx(Wr,{}),a.jsx(ol,{onClick:o,size:"sm",variant:"link",fontWeight:400,opacity:.7,fontStyle:"oblique 10deg",children:n?e("queue.queuedCount",{pending:r}):e("queue.queueEmpty")})]})});B7.displayName="QueueCounts";const{createElement:zc,createContext:mle,forwardRef:H7,useCallback:Qs,useContext:W7,useEffect:la,useImperativeHandle:V7,useLayoutEffect:hle,useMemo:gle,useRef:Zr,useState:md}=xx,d_=xx["useId".toString()],hd=hle,vle=typeof d_=="function"?d_:()=>null;let ble=0;function M2(e=null){const t=vle(),n=Zr(e||t||null);return n.current===null&&(n.current=""+ble++),n.current}const n0=mle(null);n0.displayName="PanelGroupContext";function U7({children:e=null,className:t="",collapsedSize:n=0,collapsible:r=!1,defaultSize:o=null,forwardedRef:s,id:l=null,maxSize:c=null,minSize:d,onCollapse:f=null,onResize:m=null,order:h=null,style:g={},tagName:b="div"}){const y=W7(n0);if(y===null)throw Error("Panel components must be rendered within a PanelGroup container");const x=M2(l),{collapsePanel:w,expandPanel:S,getPanelSize:j,getPanelStyle:_,registerPanel:I,resizePanel:E,units:M,unregisterPanel:D}=y;d==null&&(M==="percentages"?d=10:d=0);const R=Zr({onCollapse:f,onResize:m});la(()=>{R.current.onCollapse=f,R.current.onResize=m});const N=_(x,o),O=Zr({size:f_(N)}),T=Zr({callbacksRef:R,collapsedSize:n,collapsible:r,defaultSize:o,id:x,idWasAutoGenerated:l==null,maxSize:c,minSize:d,order:h});return hd(()=>{O.current.size=f_(N),T.current.callbacksRef=R,T.current.collapsedSize=n,T.current.collapsible=r,T.current.defaultSize=o,T.current.id=x,T.current.idWasAutoGenerated=l==null,T.current.maxSize=c,T.current.minSize=d,T.current.order=h}),hd(()=>(I(x,T),()=>{D(x)}),[h,x,I,D]),V7(s,()=>({collapse:()=>w(x),expand:()=>S(x),getCollapsed(){return O.current.size===0},getId(){return x},getSize(U){return j(x,U)},resize:(U,G)=>E(x,U,G)}),[w,S,j,x,E]),zc(b,{children:e,className:t,"data-panel":"","data-panel-collapsible":r||void 0,"data-panel-id":x,"data-panel-size":parseFloat(""+N.flexGrow).toFixed(1),id:`data-panel-id-${x}`,style:{...N,...g}})}const rl=H7((e,t)=>zc(U7,{...e,forwardedRef:t}));U7.displayName="Panel";rl.displayName="forwardRef(Panel)";function f_(e){const{flexGrow:t}=e;return typeof t=="string"?parseFloat(t):t}const ai=10;function Ju(e,t,n,r,o,s,l,c){const{id:d,panels:f,units:m}=t,h=m==="pixels"?Ga(d):NaN,{sizes:g}=c||{},b=g||s,y=Tr(f),x=b.concat();let w=0;{const _=o<0?r:n,I=y.findIndex(R=>R.current.id===_),E=y[I],M=b[I],D=Zb(m,h,E,M,M+Math.abs(o),e);if(M===D)return b;D===0&&M>0&&l.set(_,M),o=o<0?M-D:D-M}let S=o<0?n:r,j=y.findIndex(_=>_.current.id===S);for(;;){const _=y[j],I=b[j],E=Math.abs(o)-Math.abs(w),M=Zb(m,h,_,I,I-E,e);if(I!==M&&(M===0&&I>0&&l.set(_.current.id,I),w+=I-M,x[j]=M,w.toPrecision(ai).localeCompare(Math.abs(o).toPrecision(ai),void 0,{numeric:!0})>=0))break;if(o<0){if(--j<0)break}else if(++j>=y.length)break}return w===0?b:(S=o<0?r:n,j=y.findIndex(_=>_.current.id===S),x[j]=b[j]+w,x)}function Ki(e,t,n){t.forEach((r,o)=>{const s=e[o];if(!s)return;const{callbacksRef:l,collapsedSize:c,collapsible:d,id:f}=s.current,m=n[f];if(m!==r){n[f]=r;const{onCollapse:h,onResize:g}=l.current;g&&g(r,m),d&&h&&((m==null||m===c)&&r!==c?h(!1):m!==c&&r===c&&h(!0))}})}function xle({groupId:e,panels:t,units:n}){const r=n==="pixels"?Ga(e):NaN,o=Tr(t),s=Array(o.length);let l=0,c=100;for(let d=0;dl.current.id===e);if(n<0)return[null,null];const r=n===t.length-1,o=r?t[n-1].current.id:e,s=r?e:t[n+1].current.id;return[o,s]}function Ga(e){const t=Ld(e);if(t==null)return NaN;const n=t.getAttribute("data-panel-group-direction"),r=O2(e);return n==="horizontal"?t.offsetWidth-r.reduce((o,s)=>o+s.offsetWidth,0):t.offsetHeight-r.reduce((o,s)=>o+s.offsetHeight,0)}function G7(e,t,n){if(e.size===1)return"100";const o=Tr(e).findIndex(l=>l.current.id===t),s=n[o];return s==null?"0":s.toPrecision(ai)}function yle(e){const t=document.querySelector(`[data-panel-id="${e}"]`);return t||null}function Ld(e){const t=document.querySelector(`[data-panel-group-id="${e}"]`);return t||null}function r0(e){const t=document.querySelector(`[data-panel-resize-handle-id="${e}"]`);return t||null}function Cle(e){return K7().findIndex(r=>r.getAttribute("data-panel-resize-handle-id")===e)??null}function K7(){return Array.from(document.querySelectorAll("[data-panel-resize-handle-id]"))}function O2(e){return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${e}"]`))}function D2(e,t,n){var d,f,m,h;const r=r0(t),o=O2(e),s=r?o.indexOf(r):-1,l=((f=(d=n[s])==null?void 0:d.current)==null?void 0:f.id)??null,c=((h=(m=n[s+1])==null?void 0:m.current)==null?void 0:h.id)??null;return[l,c]}function Tr(e){return Array.from(e.values()).sort((t,n)=>{const r=t.current.order,o=n.current.order;return r==null&&o==null?0:r==null?-1:o==null?1:r-o})}function Zb(e,t,n,r,o,s=null){var m;let{collapsedSize:l,collapsible:c,maxSize:d,minSize:f}=n.current;if(e==="pixels"&&(l=l/t*100,d!=null&&(d=d/t*100),f=f/t*100),c){if(r>l){if(o<=f/2+l)return l}else if(!((m=s==null?void 0:s.type)==null?void 0:m.startsWith("key"))&&o100)&&(t.current.minSize=0),o!=null&&(o<0||e==="percentages"&&o>100)&&(t.current.maxSize=null),r!==null&&(r<0||e==="percentages"&&r>100?t.current.defaultSize=null:ro&&(t.current.defaultSize=o))}function C1({groupId:e,panels:t,nextSizes:n,prevSizes:r,units:o}){n=[...n];const s=Tr(t),l=o==="pixels"?Ga(e):NaN;let c=0;for(let d=0;d{const{direction:l,panels:c}=e.current,d=Ld(t);q7(d!=null,`No group found for id "${t}"`);const{height:f,width:m}=d.getBoundingClientRect(),g=O2(t).map(b=>{const y=b.getAttribute("data-panel-resize-handle-id"),x=Tr(c),[w,S]=D2(t,y,x);if(w==null||S==null)return()=>{};let j=0,_=100,I=0,E=0;x.forEach(T=>{const{id:U,maxSize:G,minSize:q}=T.current;U===w?(j=q,_=G??100):(I+=q,E+=G??100)});const M=Math.min(_,100-I),D=Math.max(j,(x.length-1)*100-E),R=G7(c,w,o);b.setAttribute("aria-valuemax",""+Math.round(M)),b.setAttribute("aria-valuemin",""+Math.round(D)),b.setAttribute("aria-valuenow",""+Math.round(parseInt(R)));const N=T=>{if(!T.defaultPrevented)switch(T.key){case"Enter":{T.preventDefault();const U=x.findIndex(G=>G.current.id===w);if(U>=0){const G=x[U],q=o[U];if(q!=null){let Y=0;q.toPrecision(ai)<=G.current.minSize.toPrecision(ai)?Y=l==="horizontal"?m:f:Y=-(l==="horizontal"?m:f);const Q=Ju(T,e.current,w,S,Y,o,s.current,null);o!==Q&&r(Q)}}break}}};b.addEventListener("keydown",N);const O=yle(w);return O!=null&&b.setAttribute("aria-controls",O.id),()=>{b.removeAttribute("aria-valuemax"),b.removeAttribute("aria-valuemin"),b.removeAttribute("aria-valuenow"),b.removeEventListener("keydown",N),O!=null&&b.removeAttribute("aria-controls")}});return()=>{g.forEach(b=>b())}},[e,t,n,s,r,o])}function kle({disabled:e,handleId:t,resizeHandler:n}){la(()=>{if(e||n==null)return;const r=r0(t);if(r==null)return;const o=s=>{if(!s.defaultPrevented)switch(s.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{s.preventDefault(),n(s);break}case"F6":{s.preventDefault();const l=K7(),c=Cle(t);q7(c!==null);const d=s.shiftKey?c>0?c-1:l.length-1:c+1{r.removeEventListener("keydown",o)}},[e,t,n])}function w1(e,t){if(e.length!==t.length)return!1;for(let n=0;nD.current.id===I),M=r[E];if(M.current.collapsible){const D=m[E];(D===0||D.toPrecision(ai)===M.current.minSize.toPrecision(ai))&&(S=S<0?-M.current.minSize*y:M.current.minSize*y)}return S}else return X7(e,n,o,c,d)}function _le(e){return e.type==="keydown"}function Jb(e){return e.type.startsWith("mouse")}function ex(e){return e.type.startsWith("touch")}let tx=null,Wl=null;function Q7(e){switch(e){case"horizontal":return"ew-resize";case"horizontal-max":return"w-resize";case"horizontal-min":return"e-resize";case"vertical":return"ns-resize";case"vertical-max":return"n-resize";case"vertical-min":return"s-resize"}}function Ile(){Wl!==null&&(document.head.removeChild(Wl),tx=null,Wl=null)}function S1(e){if(tx===e)return;tx=e;const t=Q7(e);Wl===null&&(Wl=document.createElement("style"),document.head.appendChild(Wl)),Wl.innerHTML=`*{cursor: ${t}!important;}`}function Ple(e,t=10){let n=null;return(...o)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...o)},t)}}function Y7(e){return e.map(t=>{const{minSize:n,order:r}=t.current;return r?`${r}:${n}`:`${n}`}).sort((t,n)=>t.localeCompare(n)).join(",")}function Z7(e,t){try{const n=t.getItem(`PanelGroup:sizes:${e}`);if(n){const r=JSON.parse(n);if(typeof r=="object"&&r!=null)return r}}catch{}return null}function Ele(e,t,n){const r=Z7(e,n);if(r){const o=Y7(t);return r[o]??null}return null}function Mle(e,t,n,r){const o=Y7(t),s=Z7(e,r)||{};s[o]=n;try{r.setItem(`PanelGroup:sizes:${e}`,JSON.stringify(s))}catch(l){console.error(l)}}const k1={};function p_(e){try{if(typeof localStorage<"u")e.getItem=t=>localStorage.getItem(t),e.setItem=(t,n)=>{localStorage.setItem(t,n)};else throw new Error("localStorage not supported in this environment")}catch(t){console.error(t),e.getItem=()=>null,e.setItem=()=>{}}}const ed={getItem:e=>(p_(ed),ed.getItem(e)),setItem:(e,t)=>{p_(ed),ed.setItem(e,t)}};function J7({autoSaveId:e,children:t=null,className:n="",direction:r,disablePointerEventsDuringResize:o=!1,forwardedRef:s,id:l=null,onLayout:c,storage:d=ed,style:f={},tagName:m="div",units:h="percentages"}){const g=M2(l),[b,y]=md(null),[x,w]=md(new Map),S=Zr(null);Zr({didLogDefaultSizeWarning:!1,didLogIdAndOrderWarning:!1,didLogInvalidLayoutWarning:!1,prevPanelIds:[]});const j=Zr({onLayout:c});la(()=>{j.current.onLayout=c});const _=Zr({}),[I,E]=md([]),M=Zr(new Map),D=Zr(0),R=Zr({direction:r,id:g,panels:x,sizes:I,units:h});V7(s,()=>({getId:()=>g,getLayout:ee=>{const{sizes:le,units:ae}=R.current;if((ee??ae)==="pixels"){const J=Ga(g);return le.map(re=>re/100*J)}else return le},setLayout:(ee,le)=>{const{id:ae,panels:ce,sizes:J,units:re}=R.current;if((le||re)==="pixels"){const ne=Ga(ae);ee=ee.map(z=>z/ne*100)}const A=_.current,L=Tr(ce),K=C1({groupId:ae,panels:ce,nextSizes:ee,prevSizes:J,units:re});w1(J,K)||(E(K),Ki(L,K,A))}}),[g]),hd(()=>{R.current.direction=r,R.current.id=g,R.current.panels=x,R.current.sizes=I,R.current.units=h}),Sle({committedValuesRef:R,groupId:g,panels:x,setSizes:E,sizes:I,panelSizeBeforeCollapse:M}),la(()=>{const{onLayout:ee}=j.current,{panels:le,sizes:ae}=R.current;if(ae.length>0){ee&&ee(ae);const ce=_.current,J=Tr(le);Ki(J,ae,ce)}},[I]),hd(()=>{const{id:ee,sizes:le,units:ae}=R.current;if(le.length===x.size)return;let ce=null;if(e){const J=Tr(x);ce=Ele(e,J,d)}if(ce!=null){const J=C1({groupId:ee,panels:x,nextSizes:ce,prevSizes:ce,units:ae});E(J)}else{const J=xle({groupId:ee,panels:x,units:ae});E(J)}},[e,x,d]),la(()=>{if(e){if(I.length===0||I.length!==x.size)return;const ee=Tr(x);k1[e]||(k1[e]=Ple(Mle,100)),k1[e](e,ee,I,d)}},[e,x,I,d]),hd(()=>{if(h==="pixels"){const ee=new ResizeObserver(()=>{const{panels:le,sizes:ae}=R.current,ce=C1({groupId:g,panels:le,nextSizes:ae,prevSizes:ae,units:h});w1(ae,ce)||E(ce)});return ee.observe(Ld(g)),()=>{ee.disconnect()}}},[g,h]);const N=Qs((ee,le)=>{const{panels:ae,units:ce}=R.current,re=Tr(ae).findIndex(K=>K.current.id===ee),A=I[re];if((le??ce)==="pixels"){const K=Ga(g);return A/100*K}else return A},[g,I]),O=Qs((ee,le)=>{const{panels:ae}=R.current;return ae.size===0?{flexBasis:0,flexGrow:le??void 0,flexShrink:1,overflow:"hidden"}:{flexBasis:0,flexGrow:G7(ae,ee,I),flexShrink:1,overflow:"hidden",pointerEvents:o&&b!==null?"none":void 0}},[b,o,I]),T=Qs((ee,le)=>{const{units:ae}=R.current;wle(ae,le),w(ce=>{if(ce.has(ee))return ce;const J=new Map(ce);return J.set(ee,le),J})},[]),U=Qs(ee=>ae=>{ae.preventDefault();const{direction:ce,panels:J,sizes:re}=R.current,A=Tr(J),[L,K]=D2(g,ee,A);if(L==null||K==null)return;let ne=jle(ae,g,ee,A,ce,re,S.current);if(ne===0)return;const oe=Ld(g).getBoundingClientRect(),X=ce==="horizontal";document.dir==="rtl"&&X&&(ne=-ne);const Z=X?oe.width:oe.height,me=ne/Z*100,ve=Ju(ae,R.current,L,K,me,re,M.current,S.current),de=!w1(re,ve);if((Jb(ae)||ex(ae))&&D.current!=me&&S1(de?X?"horizontal":"vertical":X?ne<0?"horizontal-min":"horizontal-max":ne<0?"vertical-min":"vertical-max"),de){const ke=_.current;E(ve),Ki(A,ve,ke)}D.current=me},[g]),G=Qs(ee=>{w(le=>{if(!le.has(ee))return le;const ae=new Map(le);return ae.delete(ee),ae})},[]),q=Qs(ee=>{const{panels:le,sizes:ae}=R.current,ce=le.get(ee);if(ce==null)return;const{collapsedSize:J,collapsible:re}=ce.current;if(!re)return;const A=Tr(le),L=A.indexOf(ce);if(L<0)return;const K=ae[L];if(K===J)return;M.current.set(ee,K);const[ne,z]=y1(ee,A);if(ne==null||z==null)return;const X=L===A.length-1?K:J-K,Z=Ju(null,R.current,ne,z,X,ae,M.current,null);if(ae!==Z){const me=_.current;E(Z),Ki(A,Z,me)}},[]),Y=Qs(ee=>{const{panels:le,sizes:ae}=R.current,ce=le.get(ee);if(ce==null)return;const{collapsedSize:J,minSize:re}=ce.current,A=M.current.get(ee)||re;if(!A)return;const L=Tr(le),K=L.indexOf(ce);if(K<0||ae[K]!==J)return;const[z,oe]=y1(ee,L);if(z==null||oe==null)return;const Z=K===L.length-1?J-A:A,me=Ju(null,R.current,z,oe,Z,ae,M.current,null);if(ae!==me){const ve=_.current;E(me),Ki(L,me,ve)}},[]),Q=Qs((ee,le,ae)=>{const{id:ce,panels:J,sizes:re,units:A}=R.current;if((ae||A)==="pixels"){const Qe=Ga(ce);le=le/Qe*100}const L=J.get(ee);if(L==null)return;let{collapsedSize:K,collapsible:ne,maxSize:z,minSize:oe}=L.current;if(A==="pixels"){const Qe=Ga(ce);oe=oe/Qe*100,z!=null&&(z=z/Qe*100)}const X=Tr(J),Z=X.indexOf(L);if(Z<0)return;const me=re[Z];if(me===le)return;ne&&le===K||(le=Math.min(z??100,Math.max(oe,le)));const[ve,de]=y1(ee,X);if(ve==null||de==null)return;const we=Z===X.length-1?me-le:le-me,Re=Ju(null,R.current,ve,de,we,re,M.current,null);if(re!==Re){const Qe=_.current;E(Re),Ki(X,Re,Qe)}},[]),V=gle(()=>({activeHandleId:b,collapsePanel:q,direction:r,expandPanel:Y,getPanelSize:N,getPanelStyle:O,groupId:g,registerPanel:T,registerResizeHandle:U,resizePanel:Q,startDragging:(ee,le)=>{if(y(ee),Jb(le)||ex(le)){const ae=r0(ee);S.current={dragHandleRect:ae.getBoundingClientRect(),dragOffset:X7(le,ee,r),sizes:R.current.sizes}}},stopDragging:()=>{Ile(),y(null),S.current=null},units:h,unregisterPanel:G}),[b,q,r,Y,N,O,g,T,U,Q,h,G]),se={display:"flex",flexDirection:r==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return zc(n0.Provider,{children:zc(m,{children:t,className:n,"data-panel-group":"","data-panel-group-direction":r,"data-panel-group-id":g,"data-panel-group-units":h,style:{...se,...f}}),value:V})}const o0=H7((e,t)=>zc(J7,{...e,forwardedRef:t}));J7.displayName="PanelGroup";o0.displayName="forwardRef(PanelGroup)";function nx({children:e=null,className:t="",disabled:n=!1,id:r=null,onDragging:o,style:s={},tagName:l="div"}){const c=Zr(null),d=Zr({onDragging:o});la(()=>{d.current.onDragging=o});const f=W7(n0);if(f===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{activeHandleId:m,direction:h,groupId:g,registerResizeHandle:b,startDragging:y,stopDragging:x}=f,w=M2(r),S=m===w,[j,_]=md(!1),[I,E]=md(null),M=Qs(()=>{c.current.blur(),x();const{onDragging:N}=d.current;N&&N(!1)},[x]);la(()=>{if(n)E(null);else{const R=b(w);E(()=>R)}},[n,w,b]),la(()=>{if(n||I==null||!S)return;const R=U=>{I(U)},N=U=>{I(U)},T=c.current.ownerDocument;return T.body.addEventListener("contextmenu",M),T.body.addEventListener("mousemove",R),T.body.addEventListener("touchmove",R),T.body.addEventListener("mouseleave",N),window.addEventListener("mouseup",M),window.addEventListener("touchend",M),()=>{T.body.removeEventListener("contextmenu",M),T.body.removeEventListener("mousemove",R),T.body.removeEventListener("touchmove",R),T.body.removeEventListener("mouseleave",N),window.removeEventListener("mouseup",M),window.removeEventListener("touchend",M)}},[h,n,S,I,M]),kle({disabled:n,handleId:w,resizeHandler:I});const D={cursor:Q7(h),touchAction:"none",userSelect:"none"};return zc(l,{children:e,className:t,"data-resize-handle-active":S?"pointer":j?"keyboard":void 0,"data-panel-group-direction":h,"data-panel-group-id":g,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":w,onBlur:()=>_(!1),onFocus:()=>_(!0),onMouseDown:R=>{y(w,R.nativeEvent);const{onDragging:N}=d.current;N&&N(!0)},onMouseUp:M,onTouchCancel:M,onTouchEnd:M,onTouchStart:R=>{y(w,R.nativeEvent);const{onDragging:N}=d.current;N&&N(!0)},ref:c,role:"separator",style:{...D,...s},tabIndex:0})}nx.displayName="PanelResizeHandle";const Ole=e=>{const{direction:t="horizontal",collapsedDirection:n,isCollapsed:r=!1,...o}=e,s=ia("base.100","base.850"),l=ia("base.300","base.700");return t==="horizontal"?a.jsx(nx,{style:{visibility:r?"hidden":"visible",width:r?0:"auto"},children:a.jsx($,{className:"resize-handle-horizontal",sx:{w:n?2.5:4,h:"full",justifyContent:n?n==="left"?"flex-start":"flex-end":"center",alignItems:"center",div:{bg:s},_hover:{div:{bg:l}}},...o,children:a.jsx(Ie,{sx:{w:1,h:"calc(100% - 1rem)",borderRadius:"base",transitionProperty:"common",transitionDuration:"normal"}})})}):a.jsx(nx,{style:{visibility:r?"hidden":"visible",width:r?0:"auto"},children:a.jsx($,{className:"resize-handle-vertical",sx:{w:"full",h:n?2.5:4,alignItems:n?n==="top"?"flex-start":"flex-end":"center",justifyContent:"center",div:{bg:s},_hover:{div:{bg:l}}},...o,children:a.jsx(Ie,{sx:{h:1,w:"calc(100% - 1rem)",borderRadius:"base",transitionProperty:"common",transitionDuration:"normal"}})})})},Bh=i.memo(Ole),R2=()=>{const e=te(),t=H(o=>o.ui.panels),n=i.useCallback(o=>t[o]??"",[t]),r=i.useCallback((o,s)=>{e(TA({name:o,value:s}))},[e]);return{getItem:n,setItem:r}};const Dle=e=>{const{label:t,data:n,fileName:r,withDownload:o=!0,withCopy:s=!0}=e,l=i.useMemo(()=>NA(n)?n:JSON.stringify(n,null,2),[n]),c=i.useCallback(()=>{navigator.clipboard.writeText(l)},[l]),d=i.useCallback(()=>{const m=new Blob([l]),h=document.createElement("a");h.href=URL.createObjectURL(m),h.download=`${r||t}.json`,document.body.appendChild(h),h.click(),h.remove()},[l,t,r]),{t:f}=W();return a.jsxs($,{layerStyle:"second",sx:{borderRadius:"base",flexGrow:1,w:"full",h:"full",position:"relative"},children:[a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"auto",p:4,fontSize:"sm"},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"}},children:a.jsx("pre",{children:l})})}),a.jsxs($,{sx:{position:"absolute",top:0,insetInlineEnd:0,p:2},children:[o&&a.jsx(Ut,{label:`${f("gallery.download")} ${t} JSON`,children:a.jsx(rs,{"aria-label":`${f("gallery.download")} ${t} JSON`,icon:a.jsx(ou,{}),variant:"ghost",opacity:.7,onClick:d})}),s&&a.jsx(Ut,{label:`${f("gallery.copy")} ${t} JSON`,children:a.jsx(rs,{"aria-label":`${f("gallery.copy")} ${t} JSON`,icon:a.jsx(ru,{}),variant:"ghost",opacity:.7,onClick:c})})]})]})},pl=i.memo(Dle),Rle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(r=>r.id===t);return{data:n==null?void 0:n.data}}),Ale=()=>{const{data:e}=H(Rle);return e?a.jsx(pl,{data:e,label:"Node Data"}):a.jsx(Tn,{label:"No node selected",icon:null})},Tle=i.memo(Ale),Nle=({children:e,maxHeight:t})=>a.jsx($,{sx:{w:"full",h:"full",maxHeight:t,position:"relative"},children:a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}},children:e})})}),Sl=i.memo(Nle),$le=({output:e})=>{const{image:t}=e,{data:n}=jo(t.image_name);return a.jsx(fl,{imageDTO:n})},Lle=i.memo($le),Fle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(s=>s.id===t),r=n?e.nodeTemplates[n.data.type]:void 0,o=e.nodeExecutionStates[t??"__UNKNOWN_NODE__"];return{node:n,template:r,nes:o}}),zle=()=>{const{node:e,template:t,nes:n}=H(Fle),{t:r}=W();return!e||!n||!Jt(e)?a.jsx(Tn,{label:r("nodes.noNodeSelected"),icon:null}):n.outputs.length===0?a.jsx(Tn,{label:r("nodes.noOutputRecorded"),icon:null}):a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsx($,{sx:{position:"relative",flexDir:"column",alignItems:"flex-start",p:1,gap:2,h:"full",w:"full"},children:(t==null?void 0:t.outputType)==="image_output"?n.outputs.map((o,s)=>a.jsx(Lle,{output:o},Hle(o,s))):a.jsx(pl,{data:n.outputs,label:r("nodes.nodeOutputs")})})})})},Ble=i.memo(zle),Hle=(e,t)=>`${e.type}-${t}`,Wle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(o=>o.id===t);return{template:n?e.nodeTemplates[n.data.type]:void 0}}),Vle=()=>{const{template:e}=H(Wle),{t}=W();return e?a.jsx(pl,{data:e,label:t("nodes.nodeTemplate")}):a.jsx(Tn,{label:t("nodes.noNodeSelected"),icon:null})},Ule=i.memo(Vle),Gle=_e((e,t)=>{const n=te(),r=i.useCallback(s=>{s.shiftKey&&n(zr(!0))},[n]),o=i.useCallback(s=>{s.shiftKey||n(zr(!1))},[n]);return a.jsx(B6,{ref:t,onPaste:I2,onKeyDown:r,onKeyUp:o,...e})}),ga=i.memo(Gle),A2=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return o==null?void 0:o.data}),[e]);return H(t)},Kle=({nodeId:e})=>{const t=te(),n=A2(e),{t:r}=W(),o=i.useCallback(s=>{t($A({nodeId:e,notes:s.target.value}))},[t,e]);return Im(n)?a.jsxs(Gt,{children:[a.jsx(ln,{children:r("nodes.notes")}),a.jsx(ga,{value:n==null?void 0:n.notes,onChange:o,rows:10})]}):null},qle=i.memo(Kle),eO=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.label:!1}),[e]);return H(t)},tO=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return!1;const s=o?r.nodeTemplates[o.data.type]:void 0;return s==null?void 0:s.title}),[e]);return H(t)},Xle=({nodeId:e,title:t})=>{const n=te(),r=eO(e),o=tO(e),{t:s}=W(),[l,c]=i.useState(""),d=i.useCallback(async m=>{n(qI({nodeId:e,label:m})),c(r||t||o||s("nodes.problemSettingTitle"))},[n,e,t,o,r,s]),f=i.useCallback(m=>{c(m)},[]);return i.useEffect(()=>{c(r||t||o||s("nodes.problemSettingTitle"))},[r,o,t,s]),a.jsx($,{sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsxs(ef,{as:$,value:l,onChange:f,onSubmit:d,w:"full",fontWeight:600,children:[a.jsx(Jd,{noOfLines:1}),a.jsx(Zd,{className:"nodrag",_focusVisible:{boxShadow:"none"}})]})})},Qle=i.memo(Xle),Yle=fe(pe,({nodes:e})=>{const t=e.selectedNodes[e.selectedNodes.length-1],n=e.nodes.find(o=>o.id===t),r=n?e.nodeTemplates[n.data.type]:void 0;return{node:n,template:r}}),Zle=()=>{const{node:e,template:t}=H(Yle),{t:n}=W();return!t||!Jt(e)?a.jsx(Tn,{label:n("nodes.noNodeSelected"),icon:null}):a.jsx(nO,{node:e,template:t})},Jle=i.memo(Zle),nO=i.memo(({node:e,template:t})=>{const{t:n}=W(),r=i.useMemo(()=>$x(e,t),[e,t]);return a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsxs($,{sx:{flexDir:"column",position:"relative",p:1,gap:2,w:"full"},children:[a.jsx(Qle,{nodeId:e.data.id}),a.jsxs(ug,{children:[a.jsxs(Gt,{children:[a.jsx(ln,{children:n("nodes.nodeType")}),a.jsx(be,{fontSize:"sm",fontWeight:600,children:t.title})]}),a.jsx($,{flexDir:"row",alignItems:"center",justifyContent:"space-between",w:"full",children:a.jsxs(Gt,{isInvalid:r,children:[a.jsx(ln,{children:n("nodes.nodeVersion")}),a.jsx(be,{fontSize:"sm",fontWeight:600,children:e.data.version})]})})]}),a.jsx(qle,{nodeId:e.data.id})]})})})});nO.displayName="Content";const eie=()=>{const{t:e}=W();return a.jsx($,{layerStyle:"first",sx:{flexDir:"column",w:"full",h:"full",borderRadius:"base",p:2,gap:2},children:a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[a.jsxs(ui,{children:[a.jsx(mr,{children:e("common.details")}),a.jsx(mr,{children:e("common.outputs")}),a.jsx(mr,{children:e("common.data")}),a.jsx(mr,{children:e("common.template")})]}),a.jsxs(eu,{children:[a.jsx($r,{children:a.jsx(Jle,{})}),a.jsx($r,{children:a.jsx(Ble,{})}),a.jsx($r,{children:a.jsx(Tle,{})}),a.jsx($r,{children:a.jsx(Ule,{})})]})]})})},tie=i.memo(eie),nie={display:"flex",flexDirection:"row",alignItems:"center",gap:10},rie=e=>{const{label:t="",labelPos:n="top",isDisabled:r=!1,isInvalid:o,formControlProps:s,...l}=e,c=te(),d=i.useCallback(m=>{m.shiftKey&&c(zr(!0))},[c]),f=i.useCallback(m=>{m.shiftKey||c(zr(!1))},[c]);return a.jsxs(Gt,{isInvalid:o,isDisabled:r,...s,style:n==="side"?nie:void 0,children:[t!==""&&a.jsx(ln,{children:t}),a.jsx(Qc,{...l,onPaste:I2,onKeyDown:d,onKeyUp:f})]})},yo=i.memo(rie),oie=fe(pe,({workflow:e})=>{const{author:t,name:n,description:r,tags:o,version:s,contact:l,notes:c}=e;return{name:n,author:t,description:r,tags:o,version:s,contact:l,notes:c}}),sie=()=>{const{author:e,name:t,description:n,tags:r,version:o,contact:s,notes:l}=H(oie),c=te(),d=i.useCallback(w=>{c(XI(w.target.value))},[c]),f=i.useCallback(w=>{c(LA(w.target.value))},[c]),m=i.useCallback(w=>{c(FA(w.target.value))},[c]),h=i.useCallback(w=>{c(zA(w.target.value))},[c]),g=i.useCallback(w=>{c(BA(w.target.value))},[c]),b=i.useCallback(w=>{c(HA(w.target.value))},[c]),y=i.useCallback(w=>{c(WA(w.target.value))},[c]),{t:x}=W();return a.jsx(Sl,{children:a.jsxs($,{sx:{flexDir:"column",alignItems:"flex-start",gap:2,h:"full"},children:[a.jsxs($,{sx:{gap:2,w:"full"},children:[a.jsx(yo,{label:x("nodes.workflowName"),value:t,onChange:d}),a.jsx(yo,{label:x("nodes.workflowVersion"),value:o,onChange:h})]}),a.jsxs($,{sx:{gap:2,w:"full"},children:[a.jsx(yo,{label:x("nodes.workflowAuthor"),value:e,onChange:f}),a.jsx(yo,{label:x("nodes.workflowContact"),value:s,onChange:m})]}),a.jsx(yo,{label:x("nodes.workflowTags"),value:r,onChange:b}),a.jsxs(Gt,{as:$,sx:{flexDir:"column"},children:[a.jsx(ln,{children:x("nodes.workflowDescription")}),a.jsx(ga,{onChange:g,value:n,fontSize:"sm",sx:{resize:"none"}})]}),a.jsxs(Gt,{as:$,sx:{flexDir:"column",h:"full"},children:[a.jsx(ln,{children:x("nodes.workflowNotes")}),a.jsx(ga,{onChange:y,value:l,fontSize:"sm",sx:{h:"full",resize:"none"}})]})]})})},aie=i.memo(sie),s0=()=>{const e=H(c=>c.nodes.nodes),t=H(c=>c.nodes.edges),n=H(c=>c.workflow),[r]=kc(e,300),[o]=kc(t,300),[s]=kc(n,300);return i.useMemo(()=>VA({nodes:r,edges:o,workflow:s}),[r,o,s])},lie=()=>{const e=s0(),{t}=W();return a.jsx($,{sx:{flexDir:"column",alignItems:"flex-start",gap:2,h:"full"},children:a.jsx(pl,{data:e,label:t("nodes.workflow")})})},iie=i.memo(lie),cie=({isSelected:e,isHovered:t})=>{const n=i.useMemo(()=>{if(e&&t)return"nodeHoveredSelected.light";if(e)return"nodeSelected.light";if(t)return"nodeHovered.light"},[t,e]),r=i.useMemo(()=>{if(e&&t)return"nodeHoveredSelected.dark";if(e)return"nodeSelected.dark";if(t)return"nodeHovered.dark"},[t,e]);return a.jsx(Ie,{className:"selection-box",sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",opacity:e||t?1:.5,transitionProperty:"common",transitionDuration:"0.1s",pointerEvents:"none",shadow:n,_dark:{shadow:r}}})},rO=i.memo(cie),oO=e=>{const t=te(),n=i.useMemo(()=>fe(pe,({nodes:l})=>l.mouseOverNode===e),[e]),r=H(n),o=i.useCallback(()=>{!r&&t(Yw(e))},[t,e,r]),s=i.useCallback(()=>{r&&t(Yw(null))},[t,r]);return{isMouseOverNode:r,handleMouseOver:o,handleMouseOut:s}},sO=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{var l;const s=o.nodes.find(c=>c.id===e);if(Jt(s))return(l=s==null?void 0:s.data.inputs[t])==null?void 0:l.label}),[t,e]);return H(n)},aO=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{var d;const l=s.nodes.find(f=>f.id===e);if(!Jt(l))return;const c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return(d=c==null?void 0:c[Lx[n]][t])==null?void 0:d.title}),[t,n,e]);return H(r)},lO=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s==null?void 0:s.data.inputs[t]}),[t,e]);return H(n)},iO=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e);if(!Jt(l))return;const c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return c==null?void 0:c[Lx[n]][t]}),[t,n,e]);return H(r)},cO=e=>{const{t}=W();return i.useMemo(()=>{if(!e)return"";const{name:r}=e;return e.isCollection?t("nodes.collectionFieldType",{name:r}):e.isCollectionOrScalar?t("nodes.collectionOrScalarFieldType",{name:r}):r},[e,t])},uie=({nodeId:e,fieldName:t,kind:n})=>{const r=lO(e,t),o=iO(e,t,n),s=UA(o),l=cO(o==null?void 0:o.type),{t:c}=W(),d=i.useMemo(()=>GA(r)?r.label&&(o!=null&&o.title)?`${r.label} (${o.title})`:r.label&&!o?r.label:!r.label&&o?o.title:c("nodes.unknownField"):(o==null?void 0:o.title)||c("nodes.unknownField"),[r,o,c]);return a.jsxs($,{sx:{flexDir:"column"},children:[a.jsx(be,{sx:{fontWeight:600},children:d}),o&&a.jsx(be,{sx:{opacity:.7,fontStyle:"oblique 5deg"},children:o.description}),l&&a.jsxs(be,{children:[c("parameters.type"),": ",l]}),s&&a.jsxs(be,{children:[c("common.input"),": ",KA(o.input)]})]})},T2=i.memo(uie),die=_e((e,t)=>{const{nodeId:n,fieldName:r,kind:o,isMissingInput:s=!1,withTooltip:l=!1}=e,c=sO(n,r),d=aO(n,r,o),{t:f}=W(),m=te(),[h,g]=i.useState(c||d||f("nodes.unknownField")),b=i.useCallback(async x=>{x&&(x===c||x===d)||(g(x||d||f("nodes.unknownField")),m(qA({nodeId:n,fieldName:r,label:x})))},[c,d,m,n,r,f]),y=i.useCallback(x=>{g(x)},[]);return i.useEffect(()=>{g(c||d||f("nodes.unknownField"))},[c,d,f]),a.jsx(Ut,{label:l?a.jsx(T2,{nodeId:n,fieldName:r,kind:"input"}):void 0,openDelay:Zh,placement:"top",hasArrow:!0,children:a.jsx($,{ref:t,sx:{position:"relative",overflow:"hidden",alignItems:"center",justifyContent:"flex-start",gap:1,h:"full"},children:a.jsxs(ef,{value:h,onChange:y,onSubmit:b,as:$,sx:{position:"relative",alignItems:"center",h:"full"},children:[a.jsx(Jd,{sx:{p:0,fontWeight:s?600:400,textAlign:"left",_hover:{fontWeight:"600 !important"}},noOfLines:1}),a.jsx(Zd,{className:"nodrag",sx:{p:0,w:"full",fontWeight:600,color:"base.900",_dark:{color:"base.100"},_focusVisible:{p:0,textAlign:"left",boxShadow:"none"}}}),a.jsx(dO,{})]})})})}),uO=i.memo(die),dO=i.memo(()=>{const{isEditing:e,getEditButtonProps:t}=K3(),n=i.useCallback(r=>{const{onClick:o}=t();o&&(o(r),r.preventDefault())},[t]);return e?null:a.jsx($,{onClick:n,position:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,cursor:"text"})});dO.displayName="EditableControls";const fie=e=>{var c;const{nodeId:t,field:n}=e,r=te(),{data:o,hasBoards:s}=Wd(void 0,{selectFromResult:({data:d})=>{const f=[{label:"None",value:"none"}];return d==null||d.forEach(({board_id:m,board_name:h})=>{f.push({label:h,value:m})}),{data:f,hasBoards:f.length>1}}}),l=i.useCallback(d=>{r(XA({nodeId:t,fieldName:n.name,value:d&&d!=="none"?{board_id:d}:void 0}))},[r,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",value:((c=n.value)==null?void 0:c.board_id)??"none",data:o,onChange:l,disabled:!s})},pie=i.memo(fie),mie=e=>{const{nodeId:t,field:n}=e,r=te(),o=i.useCallback(s=>{r(QA({nodeId:t,fieldName:n.name,value:s.target.checked}))},[r,n.name,t]);return a.jsx(Iy,{className:"nodrag",onChange:o,isChecked:n.value})},hie=i.memo(mie);function a0(){return(a0=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function rx(e){var t=i.useRef(e),n=i.useRef(function(r){t.current&&t.current(r)});return t.current=e,n.current}var Bc=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e0:w.buttons>0)&&o.current?s(m_(o.current,w,c.current)):x(!1)},y=function(){return x(!1)};function x(w){var S=d.current,j=ox(o.current),_=w?j.addEventListener:j.removeEventListener;_(S?"touchmove":"mousemove",b),_(S?"touchend":"mouseup",y)}return[function(w){var S=w.nativeEvent,j=o.current;if(j&&(h_(S),!function(I,E){return E&&!gd(I)}(S,d.current)&&j)){if(gd(S)){d.current=!0;var _=S.changedTouches||[];_.length&&(c.current=_[0].identifier)}j.focus(),s(m_(j,S,c.current)),x(!0)}},function(w){var S=w.which||w.keyCode;S<37||S>40||(w.preventDefault(),l({left:S===39?.05:S===37?-.05:0,top:S===40?.05:S===38?-.05:0}))},x]},[l,s]),m=f[0],h=f[1],g=f[2];return i.useEffect(function(){return g},[g]),B.createElement("div",a0({},r,{onTouchStart:m,onMouseDown:m,className:"react-colorful__interactive",ref:o,onKeyDown:h,tabIndex:0,role:"slider"}))}),l0=function(e){return e.filter(Boolean).join(" ")},$2=function(e){var t=e.color,n=e.left,r=e.top,o=r===void 0?.5:r,s=l0(["react-colorful__pointer",e.className]);return B.createElement("div",{className:s,style:{top:100*o+"%",left:100*n+"%"}},B.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},Sr=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n},pO=function(e){var t=e.s,n=e.v,r=e.a,o=(200-t)*n/100;return{h:Sr(e.h),s:Sr(o>0&&o<200?t*n/100/(o<=100?o:200-o)*100:0),l:Sr(o/2),a:Sr(r,2)}},sx=function(e){var t=pO(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},j1=function(e){var t=pO(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},gie=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var s=Math.floor(t),l=r*(1-n),c=r*(1-(t-s)*n),d=r*(1-(1-t+s)*n),f=s%6;return{r:Sr(255*[r,c,l,l,d,r][f]),g:Sr(255*[d,r,r,c,l,l][f]),b:Sr(255*[l,l,d,r,r,c][f]),a:Sr(o,2)}},vie=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,s=Math.max(t,n,r),l=s-Math.min(t,n,r),c=l?s===t?(n-r)/l:s===n?2+(r-t)/l:4+(t-n)/l:0;return{h:Sr(60*(c<0?c+6:c)),s:Sr(s?l/s*100:0),v:Sr(s/255*100),a:o}},bie=B.memo(function(e){var t=e.hue,n=e.onChange,r=l0(["react-colorful__hue",e.className]);return B.createElement("div",{className:r},B.createElement(N2,{onMove:function(o){n({h:360*o.left})},onKey:function(o){n({h:Bc(t+360*o.left,0,360)})},"aria-label":"Hue","aria-valuenow":Sr(t),"aria-valuemax":"360","aria-valuemin":"0"},B.createElement($2,{className:"react-colorful__hue-pointer",left:t/360,color:sx({h:t,s:100,v:100,a:1})})))}),xie=B.memo(function(e){var t=e.hsva,n=e.onChange,r={backgroundColor:sx({h:t.h,s:100,v:100,a:1})};return B.createElement("div",{className:"react-colorful__saturation",style:r},B.createElement(N2,{onMove:function(o){n({s:100*o.left,v:100-100*o.top})},onKey:function(o){n({s:Bc(t.s+100*o.left,0,100),v:Bc(t.v-100*o.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+Sr(t.s)+"%, Brightness "+Sr(t.v)+"%"},B.createElement($2,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:sx(t)})))}),mO=function(e,t){if(e===t)return!0;for(var n in e)if(e[n]!==t[n])return!1;return!0};function yie(e,t,n){var r=rx(n),o=i.useState(function(){return e.toHsva(t)}),s=o[0],l=o[1],c=i.useRef({color:t,hsva:s});i.useEffect(function(){if(!e.equal(t,c.current.color)){var f=e.toHsva(t);c.current={hsva:f,color:t},l(f)}},[t,e]),i.useEffect(function(){var f;mO(s,c.current.hsva)||e.equal(f=e.fromHsva(s),c.current.color)||(c.current={hsva:s,color:f},r(f))},[s,e,r]);var d=i.useCallback(function(f){l(function(m){return Object.assign({},m,f)})},[]);return[s,d]}var Cie=typeof window<"u"?i.useLayoutEffect:i.useEffect,wie=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},g_=new Map,Sie=function(e){Cie(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!g_.has(t)){var n=t.createElement("style");n.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,g_.set(t,n);var r=wie();r&&n.setAttribute("nonce",r),t.head.appendChild(n)}},[])},kie=function(e){var t=e.className,n=e.hsva,r=e.onChange,o={backgroundImage:"linear-gradient(90deg, "+j1(Object.assign({},n,{a:0}))+", "+j1(Object.assign({},n,{a:1}))+")"},s=l0(["react-colorful__alpha",t]),l=Sr(100*n.a);return B.createElement("div",{className:s},B.createElement("div",{className:"react-colorful__alpha-gradient",style:o}),B.createElement(N2,{onMove:function(c){r({a:c.left})},onKey:function(c){r({a:Bc(n.a+c.left)})},"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},B.createElement($2,{className:"react-colorful__alpha-pointer",left:n.a,color:j1(n)})))},jie=function(e){var t=e.className,n=e.colorModel,r=e.color,o=r===void 0?n.defaultColor:r,s=e.onChange,l=fO(e,["className","colorModel","color","onChange"]),c=i.useRef(null);Sie(c);var d=yie(n,o,s),f=d[0],m=d[1],h=l0(["react-colorful",t]);return B.createElement("div",a0({},l,{ref:c,className:h}),B.createElement(xie,{hsva:f,onChange:m}),B.createElement(bie,{hue:f.h,onChange:m}),B.createElement(kie,{hsva:f,onChange:m,className:"react-colorful__last-control"}))},_ie={defaultColor:{r:0,g:0,b:0,a:1},toHsva:vie,fromHsva:gie,equal:mO},hO=function(e){return B.createElement(jie,a0({},e,{colorModel:_ie}))};const Iie=e=>{const{nodeId:t,field:n}=e,r=te(),o=i.useCallback(s=>{r(YA({nodeId:t,fieldName:n.name,value:s}))},[r,n.name,t]);return a.jsx(hO,{className:"nodrag",color:n.value,onChange:o})},Pie=i.memo(Iie),gO=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=ZA.safeParse({base_model:n,model_name:o});if(!s.success){t.error({controlNetModelId:e,errors:s.error.format()},"Failed to parse ControlNet model id");return}return s.data},Eie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Ex(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/controlnet/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=gO(f);m&&o(JA({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},Mie=i.memo(Eie),Oie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),s=i.useCallback(l=>{o(eT({nodeId:t,fieldName:n.name,value:l.target.value}))},[o,n.name,t]);return a.jsx(w6,{className:"nowheel nodrag",onChange:s,value:n.value,children:r.options.map(l=>a.jsx("option",{value:l,children:r.ui_choice_labels?r.ui_choice_labels[l]:l},l))})},Die=i.memo(Oie),Rie=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=tT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({ipAdapterModelId:e,errors:s.error.format()},"Failed to parse IP-Adapter model id");return}return s.data},Aie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Ox(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/ip_adapter/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=Rie(f);m&&o(nT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},Tie=i.memo(Aie),Nie=e=>{var h;const{nodeId:t,field:n}=e,r=te(),o=H(g=>g.system.isConnected),{currentData:s,isError:l}=jo(((h=n.value)==null?void 0:h.image_name)??Br),c=i.useCallback(()=>{r(rT({nodeId:t,fieldName:n.name,value:void 0}))},[r,n.name,t]),d=i.useMemo(()=>{if(s)return{id:`node-${t}-${n.name}`,payloadType:"IMAGE_DTO",payload:{imageDTO:s}}},[n.name,s,t]),f=i.useMemo(()=>({id:`node-${t}-${n.name}`,actionType:"SET_NODES_IMAGE",context:{nodeId:t,fieldName:n.name}}),[n.name,t]),m=i.useMemo(()=>({type:"SET_NODES_IMAGE",nodeId:t,fieldName:n.name}),[t,n.name]);return i.useEffect(()=>{o&&l&&c()},[c,o,l]),a.jsx($,{className:"nodrag",sx:{w:"full",h:"full",alignItems:"center",justifyContent:"center"},children:a.jsx(fl,{imageDTO:s,droppableData:f,draggableData:d,postUploadAction:m,useThumbailFallback:!0,uploadElement:a.jsx(vO,{}),dropLabel:a.jsx(bO,{}),minSize:8,children:a.jsx(jc,{onClick:c,icon:s?a.jsx(Ng,{}):void 0,tooltip:"Reset Image"})})})},$ie=i.memo(Nie),vO=i.memo(()=>{const{t:e}=W();return a.jsx(be,{fontSize:16,fontWeight:600,children:e("gallery.dropOrUpload")})});vO.displayName="UploadElement";const bO=i.memo(()=>{const{t:e}=W();return a.jsx(be,{fontSize:16,fontWeight:600,children:e("gallery.drop")})});bO.displayName="DropLabel";const Lie=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=oT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({loraModelId:e,errors:s.error.format()},"Failed to parse LoRA model id");return}return s.data},Fie=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Vd(),{t:l}=W(),c=i.useMemo(()=>{if(!s)return[];const h=[];return qn(s.entities,(g,b)=>{g&&h.push({value:b,label:g.model_name,group:xn[g.base_model]})}),h.sort((g,b)=>g.disabled&&!b.disabled?1:-1)},[s]),d=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/lora/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r==null?void 0:r.base_model,r==null?void 0:r.model_name]),f=i.useCallback(h=>{if(!h)return;const g=Lie(h);g&&o(sT({nodeId:t,fieldName:n.name,value:g}))},[o,n.name,t]),m=i.useCallback((h,g)=>{var b;return((b=g.label)==null?void 0:b.toLowerCase().includes(h.toLowerCase().trim()))||g.value.toLowerCase().includes(h.toLowerCase().trim())},[]);return(s==null?void 0:s.ids.length)===0?a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:l("models.noLoRAsLoaded")})}):a.jsx(sn,{className:"nowheel nodrag",value:(d==null?void 0:d.id)??null,placeholder:c.length>0?l("models.selectLoRA"):l("models.noLoRAsAvailable"),data:c,nothingFound:l("models.noMatchingLoRAs"),itemComponent:xl,disabled:c.length===0,filter:m,error:!d,onChange:f,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}})},zie=i.memo(Fie),i0=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=aT.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data};function cu(e){const{iconMode:t=!1,...n}=e,r=te(),{t:o}=W(),[s,{isLoading:l}]=lT(),c=i.useCallback(()=>{s().unwrap().then(d=>{r(lt(rn({title:`${o("modelManager.modelsSynced")}`,status:"success"})))}).catch(d=>{d&&r(lt(rn({title:`${o("modelManager.modelSyncFailed")}`,status:"error"})))})},[r,s,o]);return t?a.jsx(Fe,{icon:a.jsx(XM,{}),tooltip:o("modelManager.syncModels"),"aria-label":o("modelManager.syncModels"),isLoading:l,onClick:c,size:"sm",...n}):a.jsx(Xe,{isLoading:l,onClick:c,minW:"max-content",...n,children:o("modelManager.syncModels")})}const Bie=e=>{var y,x;const{nodeId:t,field:n}=e,r=te(),o=Mt("syncModels").isFeatureEnabled,{t:s}=W(),{data:l,isLoading:c}=vd(Zw),{data:d,isLoading:f}=as(Zw),m=i.useMemo(()=>c||f,[c,f]),h=i.useMemo(()=>{if(!d)return[];const w=[];return qn(d.entities,(S,j)=>{S&&w.push({value:j,label:S.model_name,group:xn[S.base_model]})}),l&&qn(l.entities,(S,j)=>{S&&w.push({value:j,label:S.model_name,group:xn[S.base_model]})}),w},[d,l]),g=i.useMemo(()=>{var w,S,j,_;return((d==null?void 0:d.entities[`${(w=n.value)==null?void 0:w.base_model}/main/${(S=n.value)==null?void 0:S.model_name}`])||(l==null?void 0:l.entities[`${(j=n.value)==null?void 0:j.base_model}/onnx/${(_=n.value)==null?void 0:_.model_name}`]))??null},[(y=n.value)==null?void 0:y.base_model,(x=n.value)==null?void 0:x.model_name,d==null?void 0:d.entities,l==null?void 0:l.entities]),b=i.useCallback(w=>{if(!w)return;const S=i0(w);S&&r(QI({nodeId:t,fieldName:n.name,value:S}))},[r,n.name,t]);return a.jsxs($,{sx:{w:"full",alignItems:"center",gap:2},children:[m?a.jsx(be,{variant:"subtext",children:"Loading..."}):a.jsx(sn,{className:"nowheel nodrag",tooltip:g==null?void 0:g.description,value:g==null?void 0:g.id,placeholder:h.length>0?s("models.selectModel"):s("models.noModelsAvailable"),data:h,error:!g,disabled:h.length===0,onChange:b,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),o&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},Hie=i.memo(Bie),Wie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),[s,l]=i.useState(String(n.value)),c=i.useMemo(()=>r.type.name==="IntegerField",[r.type]),d=i.useCallback(f=>{l(f),f.match(zh)||o(iT({nodeId:t,fieldName:n.name,value:c?Math.floor(Number(f)):Number(f)}))},[o,n.name,c,t]);return i.useEffect(()=>{!s.match(zh)&&n.value!==Number(s)&&l(String(n.value))},[n.value,s]),a.jsxs(mg,{onChange:d,value:s,step:c?1:.1,precision:c?0:3,children:[a.jsx(gg,{className:"nodrag"}),a.jsxs(hg,{children:[a.jsx(bg,{}),a.jsx(vg,{})]})]})},Vie=i.memo(Wie),Uie=e=>{var h,g;const{nodeId:t,field:n}=e,r=te(),{t:o}=W(),s=Mt("syncModels").isFeatureEnabled,{data:l,isLoading:c}=as(Fx),d=i.useMemo(()=>{if(!l)return[];const b=[];return qn(l.entities,(y,x)=>{y&&b.push({value:x,label:y.model_name,group:xn[y.base_model]})}),b},[l]),f=i.useMemo(()=>{var b,y;return(l==null?void 0:l.entities[`${(b=n.value)==null?void 0:b.base_model}/main/${(y=n.value)==null?void 0:y.model_name}`])??null},[(h=n.value)==null?void 0:h.base_model,(g=n.value)==null?void 0:g.model_name,l==null?void 0:l.entities]),m=i.useCallback(b=>{if(!b)return;const y=i0(b);y&&r(cT({nodeId:t,fieldName:n.name,value:y}))},[r,n.name,t]);return c?a.jsx(sn,{label:o("modelManager.model"),placeholder:o("models.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{className:"nowheel nodrag",tooltip:f==null?void 0:f.description,value:f==null?void 0:f.id,placeholder:d.length>0?o("models.selectModel"):o("models.noModelsAvailable"),data:d,error:!f,disabled:d.length===0,onChange:m,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),s&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},Gie=i.memo(Uie),Kie=e=>{var g,b;const{nodeId:t,field:n}=e,r=te(),{t:o}=W(),s=Mt("syncModels").isFeatureEnabled,{data:l}=vd(Jw),{data:c,isLoading:d}=as(Jw),f=i.useMemo(()=>{if(!c)return[];const y=[];return qn(c.entities,(x,w)=>{!x||x.base_model!=="sdxl"||y.push({value:w,label:x.model_name,group:xn[x.base_model]})}),l&&qn(l.entities,(x,w)=>{!x||x.base_model!=="sdxl"||y.push({value:w,label:x.model_name,group:xn[x.base_model]})}),y},[c,l]),m=i.useMemo(()=>{var y,x,w,S;return((c==null?void 0:c.entities[`${(y=n.value)==null?void 0:y.base_model}/main/${(x=n.value)==null?void 0:x.model_name}`])||(l==null?void 0:l.entities[`${(w=n.value)==null?void 0:w.base_model}/onnx/${(S=n.value)==null?void 0:S.model_name}`]))??null},[(g=n.value)==null?void 0:g.base_model,(b=n.value)==null?void 0:b.model_name,c==null?void 0:c.entities,l==null?void 0:l.entities]),h=i.useCallback(y=>{if(!y)return;const x=i0(y);x&&r(QI({nodeId:t,fieldName:n.name,value:x}))},[r,n.name,t]);return d?a.jsx(sn,{label:o("modelManager.model"),placeholder:o("models.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{className:"nowheel nodrag",tooltip:m==null?void 0:m.description,value:m==null?void 0:m.id,placeholder:f.length>0?o("models.selectModel"):o("models.noModelsAvailable"),data:f,error:!m,disabled:f.length===0,onChange:h,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}}),s&&a.jsx(cu,{className:"nodrag",iconMode:!0})]})},qie=i.memo(Kie),Xie=fe([pe],({ui:e})=>{const{favoriteSchedulers:t}=e;return{data:Hr(Gh,(r,o)=>({value:o,label:r,group:t.includes(o)?"Favorites":void 0})).sort((r,o)=>r.label.localeCompare(o.label))}}),Qie=e=>{const{nodeId:t,field:n}=e,r=te(),{data:o}=H(Xie),s=i.useCallback(l=>{l&&r(uT({nodeId:t,fieldName:n.name,value:l}))},[r,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",value:n.value,data:o,onChange:s})},Yie=i.memo(Qie),Zie=e=>{const{nodeId:t,field:n,fieldTemplate:r}=e,o=te(),s=i.useCallback(l=>{o(dT({nodeId:t,fieldName:n.name,value:l.target.value}))},[o,n.name,t]);return r.ui_component==="textarea"?a.jsx(ga,{className:"nodrag",onChange:s,value:n.value,rows:5,resize:"none"}):a.jsx(yo,{onChange:s,value:n.value})},Jie=i.memo(Zie),ece=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=fT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({t2iAdapterModelId:e,errors:s.error.format()},"Failed to parse T2I-Adapter model id");return}return s.data},tce=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=Mx(),l=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/t2i_adapter/${r==null?void 0:r.model_name}`])??null,[r==null?void 0:r.base_model,r==null?void 0:r.model_name,s==null?void 0:s.entities]),c=i.useMemo(()=>{if(!s)return[];const f=[];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[s]),d=i.useCallback(f=>{if(!f)return;const m=ece(f);m&&o(pT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(yn,{className:"nowheel nodrag",tooltip:l==null?void 0:l.description,value:(l==null?void 0:l.id)??null,placeholder:"Pick one",error:!l,data:c,onChange:d,sx:{width:"100%"}})},nce=i.memo(tce),xO=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=mT.safeParse({base_model:n,model_name:o});if(!s.success){t.error({vaeModelId:e,errors:s.error.format()},"Failed to parse VAE model id");return}return s.data},rce=e=>{const{nodeId:t,field:n}=e,r=n.value,o=te(),{data:s}=YI(),l=i.useMemo(()=>{if(!s)return[];const f=[{value:"default",label:"Default",group:"Default"}];return qn(s.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f.sort((m,h)=>m.disabled&&!h.disabled?1:-1)},[s]),c=i.useMemo(()=>(s==null?void 0:s.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[s==null?void 0:s.entities,r]),d=i.useCallback(f=>{if(!f)return;const m=xO(f);m&&o(hT({nodeId:t,fieldName:n.name,value:m}))},[o,n.name,t]);return a.jsx(sn,{className:"nowheel nodrag",itemComponent:xl,tooltip:c==null?void 0:c.description,value:(c==null?void 0:c.id)??"default",placeholder:"Default",data:l,onChange:d,disabled:l.length===0,error:!c,clearable:!0,sx:{width:"100%",".mantine-Select-dropdown":{width:"16rem !important"}}})},oce=i.memo(rce),sce=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=lO(e,t),o=iO(e,t,"input");return(o==null?void 0:o.fieldKind)==="output"?a.jsxs(Ie,{p:2,children:[n("nodes.outputFieldInInput"),": ",r==null?void 0:r.type.name]}):gT(r)&&vT(o)?a.jsx(Jie,{nodeId:e,field:r,fieldTemplate:o}):bT(r)&&xT(o)?a.jsx(hie,{nodeId:e,field:r,fieldTemplate:o}):yT(r)&&CT(o)||wT(r)&&ST(o)?a.jsx(Vie,{nodeId:e,field:r,fieldTemplate:o}):kT(r)&&jT(o)?a.jsx(Die,{nodeId:e,field:r,fieldTemplate:o}):_T(r)&&IT(o)?a.jsx($ie,{nodeId:e,field:r,fieldTemplate:o}):PT(r)&&ET(o)?a.jsx(pie,{nodeId:e,field:r,fieldTemplate:o}):MT(r)&&OT(o)?a.jsx(Hie,{nodeId:e,field:r,fieldTemplate:o}):DT(r)&&RT(o)?a.jsx(Gie,{nodeId:e,field:r,fieldTemplate:o}):AT(r)&&TT(o)?a.jsx(oce,{nodeId:e,field:r,fieldTemplate:o}):NT(r)&&$T(o)?a.jsx(zie,{nodeId:e,field:r,fieldTemplate:o}):LT(r)&&FT(o)?a.jsx(Mie,{nodeId:e,field:r,fieldTemplate:o}):zT(r)&&BT(o)?a.jsx(Tie,{nodeId:e,field:r,fieldTemplate:o}):HT(r)&&WT(o)?a.jsx(nce,{nodeId:e,field:r,fieldTemplate:o}):VT(r)&&UT(o)?a.jsx(Pie,{nodeId:e,field:r,fieldTemplate:o}):GT(r)&&KT(o)?a.jsx(qie,{nodeId:e,field:r,fieldTemplate:o}):qT(r)&&XT(o)?a.jsx(Yie,{nodeId:e,field:r,fieldTemplate:o}):r&&o?null:a.jsx(Ie,{p:1,children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownFieldType",{type:r==null?void 0:r.type.name})})})},yO=i.memo(sce),ace=({nodeId:e,fieldName:t})=>{const n=te(),{isMouseOverNode:r,handleMouseOut:o,handleMouseOver:s}=oO(e),{t:l}=W(),c=i.useCallback(()=>{n(ZI({nodeId:e,fieldName:t}))},[n,t,e]);return a.jsxs($,{onMouseEnter:s,onMouseLeave:o,layerStyle:"second",sx:{position:"relative",borderRadius:"base",w:"full",p:2},children:[a.jsxs(Gt,{as:$,sx:{flexDir:"column",gap:1,flexShrink:1},children:[a.jsxs(ln,{sx:{display:"flex",alignItems:"center",mb:0},children:[a.jsx(uO,{nodeId:e,fieldName:t,kind:"input"}),a.jsx(Wr,{}),a.jsx(Ut,{label:a.jsx(T2,{nodeId:e,fieldName:t,kind:"input"}),openDelay:Zh,placement:"top",hasArrow:!0,children:a.jsx($,{h:"full",alignItems:"center",children:a.jsx(An,{as:HM})})}),a.jsx(Fe,{"aria-label":l("nodes.removeLinearView"),tooltip:l("nodes.removeLinearView"),variant:"ghost",size:"sm",onClick:c,icon:a.jsx(ao,{})})]}),a.jsx(yO,{nodeId:e,fieldName:t})]}),a.jsx(rO,{isSelected:!1,isHovered:r})]})},lce=i.memo(ace),ice=fe(pe,({workflow:e})=>({fields:e.exposedFields})),cce=()=>{const{fields:e}=H(ice),{t}=W();return a.jsx(Ie,{sx:{position:"relative",w:"full",h:"full"},children:a.jsx(Sl,{children:a.jsx($,{sx:{position:"relative",flexDir:"column",alignItems:"flex-start",p:1,gap:2,h:"full",w:"full"},children:e.length?e.map(({nodeId:n,fieldName:r})=>a.jsx(lce,{nodeId:n,fieldName:r},`${n}.${r}`)):a.jsx(Tn,{label:t("nodes.noFieldsLinearview"),icon:null})})})})},uce=i.memo(cce),dce=()=>{const{t:e}=W();return a.jsx($,{layerStyle:"first",sx:{flexDir:"column",w:"full",h:"full",borderRadius:"base",p:2,gap:2},children:a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},children:[a.jsxs(ui,{children:[a.jsx(mr,{children:e("common.linear")}),a.jsx(mr,{children:e("common.details")}),a.jsx(mr,{children:"JSON"})]}),a.jsxs(eu,{children:[a.jsx($r,{children:a.jsx(uce,{})}),a.jsx($r,{children:a.jsx(aie,{})}),a.jsx($r,{children:a.jsx(iie,{})})]})]})})},fce=i.memo(dce),pce=()=>{const[e,t]=i.useState(!1),[n,r]=i.useState(!1),o=i.useRef(null),s=R2(),l=i.useCallback(()=>{o.current&&o.current.setLayout([50,50])},[]);return a.jsxs($,{sx:{flexDir:"column",gap:2,height:"100%",width:"100%"},children:[a.jsx(z7,{}),a.jsx($,{layerStyle:"first",sx:{w:"full",position:"relative",borderRadius:"base",p:2,pb:3,gap:2,flexDir:"column"},children:a.jsx(ds,{asSlider:!0})}),a.jsxs(o0,{ref:o,id:"workflow-panel-group",autoSaveId:"workflow-panel-group",direction:"vertical",style:{height:"100%",width:"100%"},storage:s,children:[a.jsx(rl,{id:"workflow",collapsible:!0,onCollapse:t,minSize:25,children:a.jsx(fce,{})}),a.jsx(Bh,{direction:"vertical",onDoubleClick:l,collapsedDirection:e?"top":n?"bottom":void 0}),a.jsx(rl,{id:"inspector",collapsible:!0,onCollapse:r,minSize:25,children:a.jsx(tie,{})})]})]})},mce=i.memo(pce),v_=(e,t)=>{const n=i.useRef(null),[r,o]=i.useState(()=>{var f;return!!((f=n.current)!=null&&f.getCollapsed())}),s=i.useCallback(()=>{var f;(f=n.current)!=null&&f.getCollapsed()?Jr.flushSync(()=>{var m;(m=n.current)==null||m.expand()}):Jr.flushSync(()=>{var m;(m=n.current)==null||m.collapse()})},[]),l=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.expand()})},[]),c=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.collapse()})},[]),d=i.useCallback(()=>{Jr.flushSync(()=>{var f;(f=n.current)==null||f.resize(e,t)})},[e,t]);return{ref:n,minSize:e,isCollapsed:r,setIsCollapsed:o,reset:d,toggle:s,expand:l,collapse:c}},hce=({isGalleryCollapsed:e,galleryPanelRef:t})=>{const{t:n}=W(),r=i.useCallback(()=>{var o;(o=t.current)==null||o.expand()},[t]);return e?a.jsx(Uc,{children:a.jsx($,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineEnd:"1.63rem",children:a.jsx(Fe,{tooltip:"Show Gallery (G)",tooltipProps:{placement:"top"},"aria-label":n("accessibility.showGalleryPanel"),onClick:r,icon:a.jsx(Jse,{}),sx:{p:0,px:3,h:48,borderEndRadius:0}})})}):null},gce=i.memo(hce),Jp={borderStartRadius:0,flexGrow:1},vce=({isSidePanelCollapsed:e,sidePanelRef:t})=>{const{t:n}=W(),r=i.useCallback(()=>{var o;(o=t.current)==null||o.expand()},[t]);return e?a.jsx(Uc,{children:a.jsxs($,{pos:"absolute",transform:"translate(0, -50%)",minW:8,top:"50%",insetInlineStart:"5.13rem",direction:"column",gap:2,h:48,children:[a.jsxs($t,{isAttached:!0,orientation:"vertical",flexGrow:3,children:[a.jsx(Fe,{tooltip:n("parameters.showOptionsPanel"),"aria-label":n("parameters.showOptionsPanel"),onClick:r,sx:Jp,icon:a.jsx(qM,{})}),a.jsx($7,{asIconButton:!0,sx:Jp}),a.jsx(D7,{asIconButton:!0,sx:Jp})]}),a.jsx(P2,{asIconButton:!0,sx:Jp})]})}):null},bce=i.memo(vce),xce=e=>{const{label:t,activeLabel:n,children:r,defaultIsOpen:o=!1}=e,{isOpen:s,onToggle:l}=sr({defaultIsOpen:o}),{colorMode:c}=ya();return a.jsxs(Ie,{children:[a.jsxs($,{onClick:l,sx:{alignItems:"center",p:2,px:4,gap:2,borderTopRadius:"base",borderBottomRadius:s?0:"base",bg:Te("base.250","base.750")(c),color:Te("base.900","base.100")(c),_hover:{bg:Te("base.300","base.700")(c)},fontSize:"sm",fontWeight:600,cursor:"pointer",transitionProperty:"common",transitionDuration:"normal",userSelect:"none"},"data-testid":`${t} collapsible`,children:[t,a.jsx(hr,{children:n&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},children:a.jsx(be,{sx:{color:"accent.500",_dark:{color:"accent.300"}},children:n})},"statusText")}),a.jsx(Wr,{}),a.jsx(Kg,{sx:{w:"1rem",h:"1rem",transform:s?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})]}),a.jsx(Xd,{in:s,animateOpacity:!0,style:{overflow:"unset"},children:a.jsx(Ie,{sx:{p:4,pb:4,borderBottomRadius:"base",bg:"base.150",_dark:{bg:"base.800"}},children:r})})]})},_r=i.memo(xce),yce=fe(pe,e=>{const{maxPrompts:t,combinatorial:n}=e.dynamicPrompts,{min:r,sliderMax:o,inputMax:s}=e.config.sd.dynamicPrompts.maxPrompts;return{maxPrompts:t,min:r,sliderMax:o,inputMax:s,isDisabled:!n}}),Cce=()=>{const{maxPrompts:e,min:t,sliderMax:n,inputMax:r,isDisabled:o}=H(yce),s=te(),{t:l}=W(),c=i.useCallback(f=>{s(QT(f))},[s]),d=i.useCallback(()=>{s(YT())},[s]);return a.jsx(Ot,{feature:"dynamicPromptsMaxPrompts",children:a.jsx(nt,{label:l("dynamicPrompts.maxPrompts"),isDisabled:o,min:t,max:n,value:e,onChange:c,sliderNumberInputProps:{max:r},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})})},wce=i.memo(Cce),Sce=fe(pe,e=>{const{isLoading:t,isError:n,prompts:r,parsingError:o}=e.dynamicPrompts;return{prompts:r,parsingError:o,isError:n,isLoading:t}}),kce={"&::marker":{color:"base.500",_dark:{color:"base.500"}}},jce=()=>{const{t:e}=W(),{prompts:t,parsingError:n,isLoading:r,isError:o}=H(Sce);return o?a.jsx(Ot,{feature:"dynamicPrompts",children:a.jsx($,{w:"full",h:"full",layerStyle:"second",alignItems:"center",justifyContent:"center",p:8,children:a.jsx(Tn,{icon:lae,label:"Problem generating prompts"})})}):a.jsx(Ot,{feature:"dynamicPrompts",children:a.jsxs(Gt,{isInvalid:!!n,children:[a.jsxs(ln,{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",children:[e("dynamicPrompts.promptsPreview")," (",t.length,")",n&&` - ${n}`]}),a.jsxs($,{h:64,pos:"relative",layerStyle:"third",borderRadius:"base",p:2,children:[a.jsx(Sl,{children:a.jsx(N5,{stylePosition:"inside",ms:0,children:t.map((s,l)=>a.jsx(ts,{fontSize:"sm",sx:kce,children:a.jsx(be,{as:"span",children:s})},`${s}.${l}`))})}),r&&a.jsx($,{pos:"absolute",w:"full",h:"full",top:0,insetInlineStart:0,layerStyle:"second",opacity:.7,alignItems:"center",justifyContent:"center",children:a.jsx(va,{})})]})]})})},_ce=i.memo(jce),CO=i.forwardRef(({label:e,description:t,...n},r)=>a.jsx(Ie,{ref:r,...n,children:a.jsxs(Ie,{children:[a.jsx(be,{fontWeight:600,children:e}),t&&a.jsx(be,{size:"xs",variant:"subtext",children:t})]})}));CO.displayName="IAIMantineSelectItemWithDescription";const Ice=i.memo(CO),Pce=()=>{const e=te(),{t}=W(),n=H(s=>s.dynamicPrompts.seedBehaviour),r=i.useMemo(()=>[{value:"PER_ITERATION",label:t("dynamicPrompts.seedBehaviour.perIterationLabel"),description:t("dynamicPrompts.seedBehaviour.perIterationDesc")},{value:"PER_PROMPT",label:t("dynamicPrompts.seedBehaviour.perPromptLabel"),description:t("dynamicPrompts.seedBehaviour.perPromptDesc")}],[t]),o=i.useCallback(s=>{s&&e(ZT(s))},[e]);return a.jsx(Ot,{feature:"dynamicPromptsSeedBehaviour",children:a.jsx(yn,{label:t("dynamicPrompts.seedBehaviour.label"),value:n,data:r,itemComponent:Ice,onChange:o})})},Ece=i.memo(Pce),Mce=()=>{const{t:e}=W(),t=i.useMemo(()=>fe(pe,({dynamicPrompts:o})=>{const s=o.prompts.length;if(s>1)return e("dynamicPrompts.promptsWithCount_other",{count:s})}),[e]),n=H(t);return Mt("dynamicPrompting").isFeatureEnabled?a.jsx(_r,{label:e("dynamicPrompts.dynamicPrompts"),activeLabel:n,children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(_ce,{}),a.jsx(Ece,{}),a.jsx(wce,{})]})}):null},uu=i.memo(Mce),Oce=e=>{const t=te(),{lora:n}=e,r=i.useCallback(l=>{t(JT({id:n.id,weight:l}))},[t,n.id]),o=i.useCallback(()=>{t(e9(n.id))},[t,n.id]),s=i.useCallback(()=>{t(t9(n.id))},[t,n.id]);return a.jsx(Ot,{feature:"lora",children:a.jsxs($,{sx:{gap:2.5,alignItems:"flex-end"},children:[a.jsx(nt,{label:n.model_name,value:n.weight,onChange:r,min:-1,max:2,step:.01,withInput:!0,withReset:!0,handleReset:o,withSliderMarks:!0,sliderMarks:[-1,0,1,2],sliderNumberInputProps:{min:-50,max:50}}),a.jsx(Fe,{size:"sm",onClick:s,tooltip:"Remove LoRA","aria-label":"Remove LoRA",icon:a.jsx(ao,{}),colorScheme:"error"})]})})},Dce=i.memo(Oce),Rce=fe(pe,({lora:e})=>({lorasArray:Hr(e.loras)})),Ace=()=>{const{lorasArray:e}=H(Rce);return a.jsx(a.Fragment,{children:e.map((t,n)=>a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[n>0&&a.jsx(On,{pt:1}),a.jsx(Dce,{lora:t})]},t.model_name))})},Tce=i.memo(Ace),Nce=fe(pe,({lora:e})=>({loras:e.loras})),$ce=()=>{const e=te(),{loras:t}=H(Nce),{data:n}=Vd(),{t:r}=W(),o=H(d=>d.generation.model),s=i.useMemo(()=>{if(!n)return[];const d=[];return qn(n.entities,(f,m)=>{if(!f||m in t)return;const h=(o==null?void 0:o.base_model)!==f.base_model;d.push({value:m,label:f.model_name,disabled:h,group:xn[f.base_model],tooltip:h?`Incompatible base model: ${f.base_model}`:void 0})}),d.sort((f,m)=>f.label&&!m.label?1:-1),d.sort((f,m)=>f.disabled&&!m.disabled?1:-1)},[t,n,o==null?void 0:o.base_model]),l=i.useCallback(d=>{if(!d)return;const f=n==null?void 0:n.entities[d];f&&e(n9(f))},[e,n==null?void 0:n.entities]),c=i.useCallback((d,f)=>{var m;return((m=f.label)==null?void 0:m.toLowerCase().includes(d.toLowerCase().trim()))||f.value.toLowerCase().includes(d.toLowerCase().trim())},[]);return(n==null?void 0:n.ids.length)===0?a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:r("models.noLoRAsInstalled")})}):a.jsx(sn,{placeholder:s.length===0?"All LoRAs added":r("models.addLora"),value:null,data:s,nothingFound:"No matching LoRAs",itemComponent:xl,disabled:s.length===0,filter:c,onChange:l,"data-testid":"add-lora"})},Lce=i.memo($ce),Fce=fe(pe,e=>{const t=JI(e.lora.loras);return{activeLabel:t>0?`${t} Active`:void 0}}),zce=()=>{const{t:e}=W(),{activeLabel:t}=H(Fce);return Mt("lora").isFeatureEnabled?a.jsx(_r,{label:e("modelManager.loraModels"),activeLabel:t,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Lce,{}),a.jsx(Tce,{})]})}):null},du=i.memo(zce),Bce=()=>{const e=te(),t=H(o=>o.generation.shouldUseCpuNoise),{t:n}=W(),r=i.useCallback(o=>{e(r9(o.target.checked))},[e]);return a.jsx(Ot,{feature:"noiseUseCPU",children:a.jsx(_n,{label:n("parameters.useCpuNoise"),isChecked:t,onChange:r})})},Hce=fe(pe,({generation:e})=>{const{seamlessXAxis:t}=e;return{seamlessXAxis:t}}),Wce=()=>{const{t:e}=W(),{seamlessXAxis:t}=H(Hce),n=te(),r=i.useCallback(o=>{n(o9(o.target.checked))},[n]);return a.jsx(_n,{label:e("parameters.seamlessXAxis"),"aria-label":e("parameters.seamlessXAxis"),isChecked:t,onChange:r})},Vce=i.memo(Wce),Uce=fe(pe,({generation:e})=>{const{seamlessYAxis:t}=e;return{seamlessYAxis:t}}),Gce=()=>{const{t:e}=W(),{seamlessYAxis:t}=H(Uce),n=te(),r=i.useCallback(o=>{n(s9(o.target.checked))},[n]);return a.jsx(_n,{label:e("parameters.seamlessYAxis"),"aria-label":e("parameters.seamlessYAxis"),isChecked:t,onChange:r})},Kce=i.memo(Gce),qce=()=>{const{t:e}=W();return Mt("seamless").isFeatureEnabled?a.jsxs(Gt,{children:[a.jsx(ln,{children:e("parameters.seamlessTiling")})," ",a.jsxs($,{sx:{gap:5},children:[a.jsx(Ie,{flexGrow:1,children:a.jsx(Vce,{})}),a.jsx(Ie,{flexGrow:1,children:a.jsx(Kce,{})})]})]}):null},Xce=i.memo(qce),Qce=fe([pe],({generation:e,hotkeys:t})=>{const{cfgRescaleMultiplier:n}=e,{shift:r}=t;return{cfgRescaleMultiplier:n,shift:r}}),Yce=()=>{const{cfgRescaleMultiplier:e,shift:t}=H(Qce),n=te(),{t:r}=W(),o=i.useCallback(l=>n(wm(l)),[n]),s=i.useCallback(()=>n(wm(0)),[n]);return a.jsx(Ot,{feature:"paramCFGRescaleMultiplier",children:a.jsx(nt,{label:r("parameters.cfgRescaleMultiplier"),step:t?.01:.05,min:0,max:.99,onChange:o,handleReset:s,value:e,sliderNumberInputProps:{max:.99},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1})})},Zce=i.memo(Yce);function Jce(){const e=H(d=>d.generation.clipSkip),{model:t}=H(d=>d.generation),n=te(),{t:r}=W(),o=i.useCallback(d=>{n(eS(d))},[n]),s=i.useCallback(()=>{n(eS(0))},[n]),l=i.useMemo(()=>t?wp[t.base_model].maxClip:wp["sd-1"].maxClip,[t]),c=i.useMemo(()=>t?wp[t.base_model].markers:wp["sd-1"].markers,[t]);return(t==null?void 0:t.base_model)==="sdxl"?null:a.jsx(Ot,{feature:"clipSkip",placement:"top",children:a.jsx(nt,{label:r("parameters.clipSkip"),"aria-label":r("parameters.clipSkip"),min:0,max:l,step:1,value:e,onChange:o,withSliderMarks:!0,sliderMarks:c,withInput:!0,withReset:!0,handleReset:s})})}const eue=fe(pe,e=>{const{clipSkip:t,model:n,seamlessXAxis:r,seamlessYAxis:o,shouldUseCpuNoise:s,cfgRescaleMultiplier:l}=e.generation;return{clipSkip:t,model:n,seamlessXAxis:r,seamlessYAxis:o,shouldUseCpuNoise:s,cfgRescaleMultiplier:l}});function fu(){const{clipSkip:e,model:t,seamlessXAxis:n,seamlessYAxis:r,shouldUseCpuNoise:o,cfgRescaleMultiplier:s}=H(eue),{t:l}=W(),c=i.useMemo(()=>{const d=[];return o||d.push(l("parameters.gpuNoise")),e>0&&t&&t.base_model!=="sdxl"&&d.push(l("parameters.clipSkipWithLayerCount",{layerCount:e})),n&&r?d.push(l("parameters.seamlessX&Y")):n?d.push(l("parameters.seamlessX")):r&&d.push(l("parameters.seamlessY")),s&&d.push(l("parameters.cfgRescale")),d.join(", ")},[s,e,t,n,r,o,l]);return a.jsx(_r,{label:l("common.advanced"),activeLabel:c,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Xce,{}),a.jsx(On,{}),t&&(t==null?void 0:t.base_model)!=="sdxl"&&a.jsxs(a.Fragment,{children:[a.jsx(Jce,{}),a.jsx(On,{pt:2})]}),a.jsx(Bce,{}),a.jsx(On,{}),a.jsx(Zce,{})]})})}const _a=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return((o=Ao(r,e))==null?void 0:o.isEnabled)??!1}),[e]);return H(t)},tue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.model}),[e]);return H(t)},wO=e=>{const{data:t}=Ex(),n=i.useMemo(()=>t?NI.getSelectors().selectAll(t):[],[t]),{data:r}=Mx(),o=i.useMemo(()=>r?$I.getSelectors().selectAll(r):[],[r]),{data:s}=Ox(),l=i.useMemo(()=>s?LI.getSelectors().selectAll(s):[],[s]);return e==="controlnet"?n:e==="t2i_adapter"?o:e==="ip_adapter"?l:[]},SO=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.type}),[e]);return H(t)},nue=fe(pe,({generation:e})=>{const{model:t}=e;return{mainModel:t}}),rue=({id:e})=>{const t=_a(e),n=SO(e),r=tue(e),o=te(),{mainModel:s}=H(nue),{t:l}=W(),c=wO(n),d=i.useMemo(()=>{if(!c)return[];const h=[];return c.forEach(g=>{if(!g)return;const b=(g==null?void 0:g.base_model)!==(s==null?void 0:s.base_model);h.push({value:g.id,label:g.model_name,group:xn[g.base_model],disabled:b,tooltip:b?`${l("controlnet.incompatibleBaseModel")} ${g.base_model}`:void 0})}),h.sort((g,b)=>g.disabled?1:b.disabled?-1:g.label.localeCompare(b.label)),h},[s==null?void 0:s.base_model,c,l]),f=i.useMemo(()=>c.find(h=>(h==null?void 0:h.id)===`${r==null?void 0:r.base_model}/${n}/${r==null?void 0:r.model_name}`),[n,r==null?void 0:r.base_model,r==null?void 0:r.model_name,c]),m=i.useCallback(h=>{if(!h)return;const g=gO(h);g&&o(a9({id:e,model:g}))},[o,e]);return a.jsx(sn,{itemComponent:xl,data:d,error:!f||(s==null?void 0:s.base_model)!==f.base_model,placeholder:l("controlnet.selectModel"),value:(f==null?void 0:f.id)??null,onChange:m,disabled:!t,tooltip:f==null?void 0:f.description})},oue=i.memo(rue),sue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.weight}),[e]);return H(t)},aue=({id:e})=>{const t=_a(e),n=sue(e),r=te(),{t:o}=W(),s=i.useCallback(l=>{r(l9({id:e,weight:l}))},[r,e]);return na(n)?null:a.jsx(Ot,{feature:"controlNetWeight",children:a.jsx(nt,{isDisabled:!t,label:o("controlnet.weight"),value:n,onChange:s,min:0,max:2,step:.01,withSliderMarks:!0,sliderMarks:[0,1,2]})})},lue=i.memo(aue),iue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{var o;return(o=Ao(r,e))==null?void 0:o.controlImage}),[e]);return H(t)},cue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processedControlImage:void 0}),[e]);return H(t)},uue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processorType:void 0}),[e]);return H(t)},due=fe(pe,({controlAdapters:e,gallery:t,system:n})=>{const{pendingControlImages:r}=e,{autoAddBoardId:o}=t,{isConnected:s}=n;return{pendingControlImages:r,autoAddBoardId:o,isConnected:s}}),fue=({isSmall:e,id:t})=>{const n=iue(t),r=cue(t),o=uue(t),s=te(),{t:l}=W(),{pendingControlImages:c,autoAddBoardId:d,isConnected:f}=H(due),m=H(tr),[h,g]=i.useState(!1),{currentData:b,isError:y}=jo(n??Br),{currentData:x,isError:w}=jo(r??Br),[S]=i9(),[j]=c9(),[_]=u9(),I=i.useCallback(()=>{s(d9({id:t,controlImage:null}))},[t,s]),E=i.useCallback(async()=>{x&&(await S({imageDTO:x,is_intermediate:!1}).unwrap(),d!=="none"?j({imageDTO:x,board_id:d}):_({imageDTO:x}))},[x,S,d,j,_]),M=i.useCallback(()=>{b&&(m==="unifiedCanvas"?s(es({width:b.width,height:b.height})):(s(Za(b.width)),s(Ja(b.height))))},[b,m,s]),D=i.useCallback(()=>{g(!0)},[]),R=i.useCallback(()=>{g(!1)},[]),N=i.useMemo(()=>{if(b)return{id:t,payloadType:"IMAGE_DTO",payload:{imageDTO:b}}},[b,t]),O=i.useMemo(()=>({id:t,actionType:"SET_CONTROL_ADAPTER_IMAGE",context:{id:t}}),[t]),T=i.useMemo(()=>({type:"SET_CONTROL_ADAPTER_IMAGE",id:t}),[t]),U=b&&x&&!h&&!c.includes(t)&&o!=="none";return i.useEffect(()=>{f&&(y||w)&&I()},[I,f,y,w]),a.jsxs($,{onMouseEnter:D,onMouseLeave:R,sx:{position:"relative",w:"full",h:e?28:366,alignItems:"center",justifyContent:"center"},children:[a.jsx(fl,{draggableData:N,droppableData:O,imageDTO:b,isDropDisabled:U,postUploadAction:T}),a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",opacity:U?1:0,transitionProperty:"common",transitionDuration:"normal",pointerEvents:"none"},children:a.jsx(fl,{draggableData:N,droppableData:O,imageDTO:x,isUploadDisabled:!0})}),a.jsxs(a.Fragment,{children:[a.jsx(jc,{onClick:I,icon:b?a.jsx(Ng,{}):void 0,tooltip:l("controlnet.resetControlImage")}),a.jsx(jc,{onClick:E,icon:b?a.jsx(gf,{size:16}):void 0,tooltip:l("controlnet.saveControlImage"),styleOverrides:{marginTop:6}}),a.jsx(jc,{onClick:M,icon:b?a.jsx(Qy,{size:16}):void 0,tooltip:l("controlnet.setControlImageDimensions"),styleOverrides:{marginTop:12}})]}),c.includes(t)&&a.jsx($,{sx:{position:"absolute",top:0,insetInlineStart:0,w:"full",h:"full",alignItems:"center",justifyContent:"center",opacity:.8,borderRadius:"base",bg:"base.400",_dark:{bg:"base.900"}},children:a.jsx(va,{size:"xl",sx:{color:"base.100",_dark:{color:"base.400"}}})})]})},b_=i.memo(fue),No=()=>{const e=te();return i.useCallback((n,r)=>{e(f9({id:n,params:r}))},[e])};function $o(e){return a.jsx($,{sx:{flexDirection:"column",gap:2,pb:2},children:e.children})}const x_=jr.canny_image_processor.default,pue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{low_threshold:o,high_threshold:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{low_threshold:g})},[t,l]),f=i.useCallback(()=>{l(t,{low_threshold:x_.low_threshold})},[t,l]),m=i.useCallback(g=>{l(t,{high_threshold:g})},[t,l]),h=i.useCallback(()=>{l(t,{high_threshold:x_.high_threshold})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{isDisabled:!r,label:c("controlnet.lowThreshold"),value:o,onChange:d,handleReset:f,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0}),a.jsx(nt,{isDisabled:!r,label:c("controlnet.highThreshold"),value:s,onChange:m,handleReset:h,withReset:!0,min:0,max:255,withInput:!0,withSliderMarks:!0})]})},mue=i.memo(pue),hue=jr.color_map_image_processor.default,gue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{color_map_tile_size:o}=n,s=No(),{t:l}=W(),c=i.useCallback(f=>{s(t,{color_map_tile_size:f})},[t,s]),d=i.useCallback(()=>{s(t,{color_map_tile_size:hue.color_map_tile_size})},[t,s]);return a.jsx($o,{children:a.jsx(nt,{isDisabled:!r,label:l("controlnet.colorMapTileSize"),value:o,onChange:c,handleReset:d,withReset:!0,min:1,max:256,step:1,withInput:!0,withSliderMarks:!0,sliderNumberInputProps:{max:4096}})})},vue=i.memo(gue),Wu=jr.content_shuffle_image_processor.default,bue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,w:l,h:c,f:d}=n,f=No(),{t:m}=W(),h=i.useCallback(E=>{f(t,{detect_resolution:E})},[t,f]),g=i.useCallback(()=>{f(t,{detect_resolution:Wu.detect_resolution})},[t,f]),b=i.useCallback(E=>{f(t,{image_resolution:E})},[t,f]),y=i.useCallback(()=>{f(t,{image_resolution:Wu.image_resolution})},[t,f]),x=i.useCallback(E=>{f(t,{w:E})},[t,f]),w=i.useCallback(()=>{f(t,{w:Wu.w})},[t,f]),S=i.useCallback(E=>{f(t,{h:E})},[t,f]),j=i.useCallback(()=>{f(t,{h:Wu.h})},[t,f]),_=i.useCallback(E=>{f(t,{f:E})},[t,f]),I=i.useCallback(()=>{f(t,{f:Wu.f})},[t,f]);return a.jsxs($o,{children:[a.jsx(nt,{label:m("controlnet.detectResolution"),value:s,onChange:h,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.imageResolution"),value:o,onChange:b,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.w"),value:l,onChange:x,handleReset:w,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.h"),value:c,onChange:S,handleReset:j,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:m("controlnet.f"),value:d,onChange:_,handleReset:I,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},xue=i.memo(bue),y_=jr.hed_image_processor.default,yue=e=>{const{controlNetId:t,processorNode:{detect_resolution:n,image_resolution:r,scribble:o},isEnabled:s}=e,l=No(),{t:c}=W(),d=i.useCallback(b=>{l(t,{detect_resolution:b})},[t,l]),f=i.useCallback(b=>{l(t,{image_resolution:b})},[t,l]),m=i.useCallback(b=>{l(t,{scribble:b.target.checked})},[t,l]),h=i.useCallback(()=>{l(t,{detect_resolution:y_.detect_resolution})},[t,l]),g=i.useCallback(()=>{l(t,{image_resolution:y_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:n,onChange:d,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!s}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:r,onChange:f,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!s}),a.jsx(_n,{label:c("controlnet.scribble"),isChecked:o,onChange:m,isDisabled:!s})]})},Cue=i.memo(yue),C_=jr.lineart_anime_image_processor.default,wue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{detect_resolution:g})},[t,l]),f=i.useCallback(g=>{l(t,{image_resolution:g})},[t,l]),m=i.useCallback(()=>{l(t,{detect_resolution:C_.detect_resolution})},[t,l]),h=i.useCallback(()=>{l(t,{image_resolution:C_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:s,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:o,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Sue=i.memo(wue),w_=jr.lineart_image_processor.default,kue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,coarse:l}=n,c=No(),{t:d}=W(),f=i.useCallback(y=>{c(t,{detect_resolution:y})},[t,c]),m=i.useCallback(y=>{c(t,{image_resolution:y})},[t,c]),h=i.useCallback(()=>{c(t,{detect_resolution:w_.detect_resolution})},[t,c]),g=i.useCallback(()=>{c(t,{image_resolution:w_.image_resolution})},[t,c]),b=i.useCallback(y=>{c(t,{coarse:y.target.checked})},[t,c]);return a.jsxs($o,{children:[a.jsx(nt,{label:d("controlnet.detectResolution"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:d("controlnet.imageResolution"),value:o,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:d("controlnet.coarse"),isChecked:l,onChange:b,isDisabled:!r})]})},jue=i.memo(kue),S_=jr.mediapipe_face_processor.default,_ue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{max_faces:o,min_confidence:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{max_faces:g})},[t,l]),f=i.useCallback(g=>{l(t,{min_confidence:g})},[t,l]),m=i.useCallback(()=>{l(t,{max_faces:S_.max_faces})},[t,l]),h=i.useCallback(()=>{l(t,{min_confidence:S_.min_confidence})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.maxFaces"),value:o,onChange:d,handleReset:m,withReset:!0,min:1,max:20,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.minConfidence"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Iue=i.memo(_ue),k_=jr.midas_depth_image_processor.default,Pue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{a_mult:o,bg_th:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{a_mult:g})},[t,l]),f=i.useCallback(g=>{l(t,{bg_th:g})},[t,l]),m=i.useCallback(()=>{l(t,{a_mult:k_.a_mult})},[t,l]),h=i.useCallback(()=>{l(t,{bg_th:k_.bg_th})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.amult"),value:o,onChange:d,handleReset:m,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.bgth"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:20,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Eue=i.memo(Pue),em=jr.mlsd_image_processor.default,Mue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,thr_d:l,thr_v:c}=n,d=No(),{t:f}=W(),m=i.useCallback(j=>{d(t,{detect_resolution:j})},[t,d]),h=i.useCallback(j=>{d(t,{image_resolution:j})},[t,d]),g=i.useCallback(j=>{d(t,{thr_d:j})},[t,d]),b=i.useCallback(j=>{d(t,{thr_v:j})},[t,d]),y=i.useCallback(()=>{d(t,{detect_resolution:em.detect_resolution})},[t,d]),x=i.useCallback(()=>{d(t,{image_resolution:em.image_resolution})},[t,d]),w=i.useCallback(()=>{d(t,{thr_d:em.thr_d})},[t,d]),S=i.useCallback(()=>{d(t,{thr_v:em.thr_v})},[t,d]);return a.jsxs($o,{children:[a.jsx(nt,{label:f("controlnet.detectResolution"),value:s,onChange:m,handleReset:y,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.imageResolution"),value:o,onChange:h,handleReset:x,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.w"),value:l,onChange:g,handleReset:w,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.h"),value:c,onChange:b,handleReset:S,withReset:!0,min:0,max:1,step:.01,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Oue=i.memo(Mue),j_=jr.normalbae_image_processor.default,Due=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s}=n,l=No(),{t:c}=W(),d=i.useCallback(g=>{l(t,{detect_resolution:g})},[t,l]),f=i.useCallback(g=>{l(t,{image_resolution:g})},[t,l]),m=i.useCallback(()=>{l(t,{detect_resolution:j_.detect_resolution})},[t,l]),h=i.useCallback(()=>{l(t,{image_resolution:j_.image_resolution})},[t,l]);return a.jsxs($o,{children:[a.jsx(nt,{label:c("controlnet.detectResolution"),value:s,onChange:d,handleReset:m,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:c("controlnet.imageResolution"),value:o,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r})]})},Rue=i.memo(Due),__=jr.openpose_image_processor.default,Aue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,hand_and_face:l}=n,c=No(),{t:d}=W(),f=i.useCallback(y=>{c(t,{detect_resolution:y})},[t,c]),m=i.useCallback(y=>{c(t,{image_resolution:y})},[t,c]),h=i.useCallback(()=>{c(t,{detect_resolution:__.detect_resolution})},[t,c]),g=i.useCallback(()=>{c(t,{image_resolution:__.image_resolution})},[t,c]),b=i.useCallback(y=>{c(t,{hand_and_face:y.target.checked})},[t,c]);return a.jsxs($o,{children:[a.jsx(nt,{label:d("controlnet.detectResolution"),value:s,onChange:f,handleReset:h,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:d("controlnet.imageResolution"),value:o,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:d("controlnet.handAndFace"),isChecked:l,onChange:b,isDisabled:!r})]})},Tue=i.memo(Aue),I_=jr.pidi_image_processor.default,Nue=e=>{const{controlNetId:t,processorNode:n,isEnabled:r}=e,{image_resolution:o,detect_resolution:s,scribble:l,safe:c}=n,d=No(),{t:f}=W(),m=i.useCallback(w=>{d(t,{detect_resolution:w})},[t,d]),h=i.useCallback(w=>{d(t,{image_resolution:w})},[t,d]),g=i.useCallback(()=>{d(t,{detect_resolution:I_.detect_resolution})},[t,d]),b=i.useCallback(()=>{d(t,{image_resolution:I_.image_resolution})},[t,d]),y=i.useCallback(w=>{d(t,{scribble:w.target.checked})},[t,d]),x=i.useCallback(w=>{d(t,{safe:w.target.checked})},[t,d]);return a.jsxs($o,{children:[a.jsx(nt,{label:f("controlnet.detectResolution"),value:s,onChange:m,handleReset:g,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(nt,{label:f("controlnet.imageResolution"),value:o,onChange:h,handleReset:b,withReset:!0,min:0,max:4096,withInput:!0,withSliderMarks:!0,isDisabled:!r}),a.jsx(_n,{label:f("controlnet.scribble"),isChecked:l,onChange:y}),a.jsx(_n,{label:f("controlnet.safe"),isChecked:c,onChange:x,isDisabled:!r})]})},$ue=i.memo(Nue),Lue=e=>null,Fue=i.memo(Lue),kO=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o&&Gc(o)?o.processorNode:void 0}),[e]);return H(t)},zue=({id:e})=>{const t=_a(e),n=kO(e);return n?n.type==="canny_image_processor"?a.jsx(mue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="color_map_image_processor"?a.jsx(vue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="hed_image_processor"?a.jsx(Cue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="lineart_image_processor"?a.jsx(jue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="content_shuffle_image_processor"?a.jsx(xue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="lineart_anime_image_processor"?a.jsx(Sue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="mediapipe_face_processor"?a.jsx(Iue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="midas_depth_image_processor"?a.jsx(Eue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="mlsd_image_processor"?a.jsx(Oue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="normalbae_image_processor"?a.jsx(Rue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="openpose_image_processor"?a.jsx(Tue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="pidi_image_processor"?a.jsx($ue,{controlNetId:e,processorNode:n,isEnabled:t}):n.type==="zoe_depth_image_processor"?a.jsx(Fue,{controlNetId:e,processorNode:n,isEnabled:t}):null:null},Bue=i.memo(zue),Hue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&Gc(o))return o.shouldAutoConfig}),[e]);return H(t)},Wue=({id:e})=>{const t=_a(e),n=Hue(e),r=te(),{t:o}=W(),s=i.useCallback(()=>{r(p9({id:e}))},[e,r]);return na(n)?null:a.jsx(_n,{label:o("controlnet.autoConfigure"),"aria-label":o("controlnet.autoConfigure"),isChecked:n,onChange:s,isDisabled:!t})},Vue=i.memo(Wue),Uue=e=>{const{id:t}=e,n=te(),{t:r}=W(),o=i.useCallback(()=>{n(m9({id:t}))},[t,n]),s=i.useCallback(()=>{n(h9({id:t}))},[t,n]);return a.jsxs($,{sx:{gap:2},children:[a.jsx(Fe,{size:"sm",icon:a.jsx(si,{}),tooltip:r("controlnet.importImageFromCanvas"),"aria-label":r("controlnet.importImageFromCanvas"),onClick:o}),a.jsx(Fe,{size:"sm",icon:a.jsx(UM,{}),tooltip:r("controlnet.importMaskFromCanvas"),"aria-label":r("controlnet.importMaskFromCanvas"),onClick:s})]})},Gue=i.memo(Uue),Kue=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);return o?{beginStepPct:o.beginStepPct,endStepPct:o.endStepPct}:void 0}),[e]);return H(t)},P_=e=>`${Math.round(e*100)}%`,que=({id:e})=>{const t=_a(e),n=Kue(e),r=te(),{t:o}=W(),s=i.useCallback(l=>{r(g9({id:e,beginStepPct:l[0]})),r(v9({id:e,endStepPct:l[1]}))},[r,e]);return n?a.jsx(Ot,{feature:"controlNetBeginEnd",children:a.jsxs(Gt,{isDisabled:!t,children:[a.jsx(ln,{children:o("controlnet.beginEndStepPercent")}),a.jsx(ug,{w:"100%",gap:2,alignItems:"center",children:a.jsxs(O6,{"aria-label":["Begin Step %","End Step %!"],value:[n.beginStepPct,n.endStepPct],onChange:s,min:0,max:1,step:.01,minStepsBetweenThumbs:5,isDisabled:!t,children:[a.jsx(D6,{children:a.jsx(R6,{})}),a.jsx(Ut,{label:P_(n.beginStepPct),placement:"top",hasArrow:!0,children:a.jsx(bb,{index:0})}),a.jsx(Ut,{label:P_(n.endStepPct),placement:"top",hasArrow:!0,children:a.jsx(bb,{index:1})}),a.jsx(dm,{value:0,sx:{insetInlineStart:"0 !important",insetInlineEnd:"unset !important"},children:"0%"}),a.jsx(dm,{value:.5,sx:{insetInlineStart:"50% !important",transform:"translateX(-50%)"},children:"50%"}),a.jsx(dm,{value:1,sx:{insetInlineStart:"unset !important",insetInlineEnd:"0 !important"},children:"100%"})]})})]})}):null},Xue=i.memo(que),Que=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&b9(o))return o.controlMode}),[e]);return H(t)};function Yue({id:e}){const t=_a(e),n=Que(e),r=te(),{t:o}=W(),s=[{label:o("controlnet.balanced"),value:"balanced"},{label:o("controlnet.prompt"),value:"more_prompt"},{label:o("controlnet.control"),value:"more_control"},{label:o("controlnet.megaControl"),value:"unbalanced"}],l=i.useCallback(c=>{r(x9({id:e,controlMode:c}))},[e,r]);return n?a.jsx(Ot,{feature:"controlNetControlMode",children:a.jsx(yn,{disabled:!t,label:o("controlnet.controlMode"),data:s,value:n,onChange:l})}):null}const Zue=e=>e.config,Jue=fe(Zue,e=>Hr(jr,n=>({value:n.type,label:n.label})).sort((n,r)=>n.value==="none"?-1:r.value==="none"?1:n.label.localeCompare(r.label)).filter(n=>!e.sd.disabledControlNetProcessors.includes(n.value))),ede=({id:e})=>{const t=_a(e),n=kO(e),r=te(),o=H(Jue),{t:s}=W(),l=i.useCallback(c=>{r(y9({id:e,processorType:c}))},[e,r]);return n?a.jsx(sn,{label:s("controlnet.processor"),value:n.type??"canny_image_processor",data:o,onChange:l,disabled:!t}):null},tde=i.memo(ede),nde=e=>{const t=i.useMemo(()=>fe(pe,({controlAdapters:r})=>{const o=Ao(r,e);if(o&&Gc(o))return o.resizeMode}),[e]);return H(t)};function rde({id:e}){const t=_a(e),n=nde(e),r=te(),{t:o}=W(),s=[{label:o("controlnet.resize"),value:"just_resize"},{label:o("controlnet.crop"),value:"crop_resize"},{label:o("controlnet.fill"),value:"fill_resize"}],l=i.useCallback(c=>{r(C9({id:e,resizeMode:c}))},[e,r]);return n?a.jsx(Ot,{feature:"controlNetResizeMode",children:a.jsx(yn,{disabled:!t,label:o("controlnet.resizeMode"),data:s,value:n,onChange:l})}):null}const ode=e=>{const{id:t,number:n}=e,r=SO(t),o=te(),{t:s}=W(),l=H(tr),c=_a(t),[d,f]=ene(!1),m=i.useCallback(()=>{o(w9({id:t}))},[t,o]),h=i.useCallback(()=>{o(S9(t))},[t,o]),g=i.useCallback(b=>{o(k9({id:t,isEnabled:b.target.checked}))},[t,o]);return r?a.jsxs($,{sx:{flexDir:"column",gap:3,p:2,borderRadius:"base",position:"relative",bg:"base.250",_dark:{bg:"base.750"}},children:[a.jsx($,{sx:{gap:2,alignItems:"center",justifyContent:"space-between"},children:a.jsx(_n,{label:s(`controlnet.${r}`,{number:n}),"aria-label":s("controlnet.toggleControlNet"),isChecked:c,onChange:g,formControlProps:{w:"full"},formLabelProps:{fontWeight:600}})}),a.jsxs($,{sx:{gap:2,alignItems:"center"},children:[a.jsx(Ie,{sx:{w:"full",minW:0,transitionProperty:"common",transitionDuration:"0.1s"},children:a.jsx(oue,{id:t})}),l==="unifiedCanvas"&&a.jsx(Gue,{id:t}),a.jsx(Fe,{size:"sm",tooltip:s("controlnet.duplicate"),"aria-label":s("controlnet.duplicate"),onClick:h,icon:a.jsx(ru,{})}),a.jsx(Fe,{size:"sm",tooltip:s("controlnet.delete"),"aria-label":s("controlnet.delete"),colorScheme:"error",onClick:m,icon:a.jsx(ao,{})}),a.jsx(Fe,{size:"sm",tooltip:s(d?"controlnet.hideAdvanced":"controlnet.showAdvanced"),"aria-label":s(d?"controlnet.hideAdvanced":"controlnet.showAdvanced"),onClick:f,variant:"ghost",sx:{_hover:{bg:"none"}},icon:a.jsx(Kg,{sx:{boxSize:4,color:"base.700",transform:d?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal",_dark:{color:"base.300"}}})})]}),a.jsxs($,{sx:{w:"full",flexDirection:"column",gap:3},children:[a.jsxs($,{sx:{gap:4,w:"full",alignItems:"center"},children:[a.jsxs($,{sx:{flexDir:"column",gap:3,h:28,w:"full",paddingInlineStart:1,paddingInlineEnd:d?1:0,pb:2,justifyContent:"space-between"},children:[a.jsx(lue,{id:t}),a.jsx(Xue,{id:t})]}),!d&&a.jsx($,{sx:{alignItems:"center",justifyContent:"center",h:28,w:28,aspectRatio:"1/1"},children:a.jsx(b_,{id:t,isSmall:!0})})]}),a.jsxs($,{sx:{gap:2},children:[a.jsx(Yue,{id:t}),a.jsx(rde,{id:t})]}),a.jsx(tde,{id:t})]}),d&&a.jsxs(a.Fragment,{children:[a.jsx(b_,{id:t}),a.jsx(Vue,{id:t}),a.jsx(Bue,{id:t})]})]}):null},sde=i.memo(ode),_1=e=>{const t=H(c=>{var d;return(d=c.generation.model)==null?void 0:d.base_model}),n=te(),r=wO(e),o=i.useMemo(()=>{const c=r.filter(d=>t?d.base_model===t:!0)[0];return c||r[0]},[t,r]),s=i.useMemo(()=>!o,[o]);return[i.useCallback(()=>{s||n(j9({type:e,overrides:{model:o}}))},[n,o,s,e]),s]},ade=fe([pe],({controlAdapters:e})=>{const t=[];let n=!1;const r=_9(e).filter(m=>m.isEnabled).length,o=I9(e).length;r>0&&t.push(`${r} IP`),r>o&&(n=!0);const s=P9(e).filter(m=>m.isEnabled).length,l=E9(e).length;s>0&&t.push(`${s} ControlNet`),s>l&&(n=!0);const c=M9(e).filter(m=>m.isEnabled).length,d=O9(e).length;return c>0&&t.push(`${c} T2I`),c>d&&(n=!0),{controlAdapterIds:D9(e).map(String),activeLabel:t.join(", "),isError:n}}),lde=()=>{const{t:e}=W(),{controlAdapterIds:t,activeLabel:n}=H(ade),r=Mt("controlNet").isFeatureDisabled,[o,s]=_1("controlnet"),[l,c]=_1("ip_adapter"),[d,f]=_1("t2i_adapter");return r?null:a.jsx(_r,{label:e("controlnet.controlAdapter_other"),activeLabel:n,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsxs($t,{size:"sm",w:"full",justifyContent:"space-between",children:[a.jsx(Xe,{tooltip:e("controlnet.addControlNet"),leftIcon:a.jsx(nl,{}),onClick:o,"data-testid":"add controlnet",flexGrow:1,isDisabled:s,children:e("common.controlNet")}),a.jsx(Xe,{tooltip:e("controlnet.addIPAdapter"),leftIcon:a.jsx(nl,{}),onClick:l,"data-testid":"add ip adapter",flexGrow:1,isDisabled:c,children:e("common.ipAdapter")}),a.jsx(Xe,{tooltip:e("controlnet.addT2IAdapter"),leftIcon:a.jsx(nl,{}),onClick:d,"data-testid":"add t2i adapter",flexGrow:1,isDisabled:f,children:e("common.t2iAdapter")})]}),t.map((m,h)=>a.jsxs(i.Fragment,{children:[a.jsx(On,{}),a.jsx(sde,{id:m,number:h+1})]},m))]})})},pu=i.memo(lde),ide=e=>{const{onClick:t}=e,{t:n}=W();return a.jsx(Fe,{size:"sm","aria-label":n("embedding.addEmbedding"),tooltip:n("embedding.addEmbedding"),icon:a.jsx(LM,{}),sx:{p:2,color:"base.500",_hover:{color:"base.600"},_active:{color:"base.700"},_dark:{color:"base.500",_hover:{color:"base.400"},_active:{color:"base.300"}}},variant:"link",onClick:t})},c0=i.memo(ide),cde="28rem",ude=e=>{const{onSelect:t,isOpen:n,onClose:r,children:o}=e,{data:s}=R9(),l=i.useRef(null),{t:c}=W(),d=H(g=>g.generation.model),f=i.useMemo(()=>{if(!s)return[];const g=[];return qn(s.entities,(b,y)=>{if(!b)return;const x=(d==null?void 0:d.base_model)!==b.base_model;g.push({value:b.model_name,label:b.model_name,group:xn[b.base_model],disabled:x,tooltip:x?`${c("embedding.incompatibleModel")} ${b.base_model}`:void 0})}),g.sort((b,y)=>{var x;return b.label&&y.label?(x=b.label)!=null&&x.localeCompare(y.label)?-1:1:-1}),g.sort((b,y)=>b.disabled&&!y.disabled?1:-1)},[s,d==null?void 0:d.base_model,c]),m=i.useCallback(g=>{g&&t(g)},[t]),h=i.useCallback((g,b)=>{var y;return((y=b.label)==null?void 0:y.toLowerCase().includes(g.toLowerCase().trim()))||b.value.toLowerCase().includes(g.toLowerCase().trim())},[]);return a.jsxs(lf,{initialFocusRef:l,isOpen:n,onClose:r,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[a.jsx(yg,{children:o}),a.jsx(cf,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:a.jsx(Cg,{sx:{p:0,w:`calc(${cde} - 2rem )`},children:f.length===0?a.jsx($,{sx:{justifyContent:"center",p:2,fontSize:"sm",color:"base.500",_dark:{color:"base.700"}},children:a.jsx(be,{children:c("embedding.noEmbeddingsLoaded")})}):a.jsx(sn,{inputRef:l,autoFocus:!0,placeholder:c("embedding.addEmbedding"),value:null,data:f,nothingFound:c("embedding.noMatchingEmbedding"),itemComponent:xl,disabled:f.length===0,onDropdownClose:r,filter:h,onChange:m})})})]})},u0=i.memo(ude),dde=()=>{const e=H(h=>h.generation.negativePrompt),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),s=te(),{t:l}=W(),c=i.useCallback(h=>{s(rd(h.target.value))},[s]),d=i.useCallback(h=>{h.key==="<"&&o()},[o]),f=i.useCallback(h=>{if(!t.current)return;const g=t.current.selectionStart;if(g===void 0)return;let b=e.slice(0,g);b[b.length-1]!=="<"&&(b+="<"),b+=`${h}>`;const y=b.length;b+=e.slice(g),Jr.flushSync(()=>{s(rd(b))}),t.current.selectionEnd=y,r()},[s,r,e]),m=Mt("embedding").isFeatureEnabled;return a.jsxs(Gt,{children:[a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(Ot,{feature:"paramNegativeConditioning",placement:"right",children:a.jsx(ga,{id:"negativePrompt",name:"negativePrompt",ref:t,value:e,placeholder:l("parameters.negativePromptPlaceholder"),onChange:c,resize:"vertical",fontSize:"sm",minH:16,...m&&{onKeyDown:d}})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},jO=i.memo(dde),fde=fe([pe],({generation:e})=>({prompt:e.positivePrompt})),pde=()=>{const e=te(),{prompt:t}=H(fde),n=i.useRef(null),{isOpen:r,onClose:o,onOpen:s}=sr(),{t:l}=W(),c=i.useCallback(h=>{e(nd(h.target.value))},[e]);tt("alt+a",()=>{var h;(h=n.current)==null||h.focus()},[]);const d=i.useCallback(h=>{if(!n.current)return;const g=n.current.selectionStart;if(g===void 0)return;let b=t.slice(0,g);b[b.length-1]!=="<"&&(b+="<"),b+=`${h}>`;const y=b.length;b+=t.slice(g),Jr.flushSync(()=>{e(nd(b))}),n.current.selectionStart=y,n.current.selectionEnd=y,o()},[e,o,t]),f=Mt("embedding").isFeatureEnabled,m=i.useCallback(h=>{f&&h.key==="<"&&s()},[s,f]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(Gt,{children:a.jsx(u0,{isOpen:r,onClose:o,onSelect:d,children:a.jsx(Ot,{feature:"paramPositiveConditioning",placement:"right",children:a.jsx(ga,{id:"prompt",name:"prompt",ref:n,value:t,placeholder:l("parameters.positivePromptPlaceholder"),onChange:c,onKeyDown:m,resize:"vertical",minH:32})})})}),!r&&f&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:s})})]})},_O=i.memo(pde);function mde(){const e=H(o=>o.sdxl.shouldConcatSDXLStylePrompt),t=te(),{t:n}=W(),r=i.useCallback(()=>{t(A9(!e))},[t,e]);return a.jsx(Fe,{"aria-label":n("sdxl.concatPromptStyle"),tooltip:n("sdxl.concatPromptStyle"),variant:"outline",isChecked:e,onClick:r,icon:a.jsx(WM,{}),size:"xs",sx:{position:"absolute",insetInlineEnd:1,top:6,border:"none",color:e?"accent.500":"base.500",_hover:{bg:"none"}}})}const E_={position:"absolute",bg:"none",w:"full",minH:2,borderRadius:0,borderLeft:"none",borderRight:"none",zIndex:2,maskImage:"radial-gradient(circle at center, black, black 65%, black 30%, black 15%, transparent)"};function IO(){return a.jsxs($,{children:[a.jsx(Ie,{as:Mn.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"1px",borderTop:"none",borderColor:"base.400",...E_,_dark:{borderColor:"accent.500"}}}),a.jsx(Ie,{as:Mn.div,initial:{opacity:0,scale:0},animate:{opacity:[0,1,1,1],scale:[0,.75,1.5,1],transition:{duration:.42,times:[0,.25,.5,1]}},exit:{opacity:0,scale:0},sx:{zIndex:3,position:"absolute",left:"48%",top:"3px",p:1,borderRadius:4,bg:"accent.400",color:"base.50",_dark:{bg:"accent.500"}},children:a.jsx(WM,{size:12})}),a.jsx(Ie,{as:Mn.div,initial:{scaleX:0,borderWidth:0,display:"none"},animate:{display:["block","block","block","none"],scaleX:[0,.25,.5,1],borderWidth:[0,3,3,0],transition:{duration:.37,times:[0,.25,.5,1]}},sx:{top:"17px",borderBottom:"none",borderColor:"base.400",...E_,_dark:{borderColor:"accent.500"}}})]})}const hde=fe([pe],({sdxl:e})=>{const{negativeStylePrompt:t,shouldConcatSDXLStylePrompt:n}=e;return{prompt:t,shouldConcatSDXLStylePrompt:n}}),gde=()=>{const e=te(),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),{t:s}=W(),{prompt:l,shouldConcatSDXLStylePrompt:c}=H(hde),d=i.useCallback(g=>{e(sd(g.target.value))},[e]),f=i.useCallback(g=>{if(!t.current)return;const b=t.current.selectionStart;if(b===void 0)return;let y=l.slice(0,b);y[y.length-1]!=="<"&&(y+="<"),y+=`${g}>`;const x=y.length;y+=l.slice(b),Jr.flushSync(()=>{e(sd(y))}),t.current.selectionStart=x,t.current.selectionEnd=x,r()},[e,r,l]),m=Mt("embedding").isFeatureEnabled,h=i.useCallback(g=>{m&&g.key==="<"&&o()},[o,m]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(hr,{children:c&&a.jsx(Ie,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(IO,{})})}),a.jsx(Gt,{children:a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(ga,{id:"prompt",name:"prompt",ref:t,value:l,placeholder:s("sdxl.negStylePrompt"),onChange:d,onKeyDown:h,resize:"vertical",fontSize:"sm",minH:16})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},vde=i.memo(gde),bde=fe([pe],({sdxl:e})=>{const{positiveStylePrompt:t,shouldConcatSDXLStylePrompt:n}=e;return{prompt:t,shouldConcatSDXLStylePrompt:n}}),xde=()=>{const e=te(),t=i.useRef(null),{isOpen:n,onClose:r,onOpen:o}=sr(),{t:s}=W(),{prompt:l,shouldConcatSDXLStylePrompt:c}=H(bde),d=i.useCallback(g=>{e(od(g.target.value))},[e]),f=i.useCallback(g=>{if(!t.current)return;const b=t.current.selectionStart;if(b===void 0)return;let y=l.slice(0,b);y[y.length-1]!=="<"&&(y+="<"),y+=`${g}>`;const x=y.length;y+=l.slice(b),Jr.flushSync(()=>{e(od(y))}),t.current.selectionStart=x,t.current.selectionEnd=x,r()},[e,r,l]),m=Mt("embedding").isFeatureEnabled,h=i.useCallback(g=>{m&&g.key==="<"&&o()},[o,m]);return a.jsxs(Ie,{position:"relative",children:[a.jsx(hr,{children:c&&a.jsx(Ie,{sx:{position:"absolute",left:"3",w:"94%",top:"-17px"},children:a.jsx(IO,{})})}),a.jsx(Gt,{children:a.jsx(u0,{isOpen:n,onClose:r,onSelect:f,children:a.jsx(ga,{id:"prompt",name:"prompt",ref:t,value:l,placeholder:s("sdxl.posStylePrompt"),onChange:d,onKeyDown:h,resize:"vertical",minH:16})})}),!n&&m&&a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0},children:a.jsx(c0,{onClick:o})})]})},yde=i.memo(xde);function L2(){return a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(_O,{}),a.jsx(mde,{}),a.jsx(yde,{}),a.jsx(jO,{}),a.jsx(vde,{})]})}const kl=()=>{const{isRefinerAvailable:e}=as(Fx,{selectFromResult:({data:t})=>({isRefinerAvailable:t?t.ids.length>0:!1})});return e},Cde=fe([pe],({sdxl:e,ui:t,hotkeys:n})=>{const{refinerCFGScale:r}=e,{shouldUseSliders:o}=t,{shift:s}=n;return{refinerCFGScale:r,shouldUseSliders:o,shift:s}}),wde=()=>{const{refinerCFGScale:e,shouldUseSliders:t,shift:n}=H(Cde),r=kl(),o=te(),{t:s}=W(),l=i.useCallback(d=>o(B1(d)),[o]),c=i.useCallback(()=>o(B1(7)),[o]);return t?a.jsx(nt,{label:s("sdxl.cfgScale"),step:n?.1:.5,min:1,max:20,onChange:l,handleReset:c,value:e,sliderNumberInputProps:{max:200},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!r}):a.jsx(_s,{label:s("sdxl.cfgScale"),step:.5,min:1,max:200,onChange:l,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"},isDisabled:!r})},Sde=i.memo(wde),kde=e=>{const t=hl("models"),[n,r,o]=e.split("/"),s=T9.safeParse({base_model:n,model_name:o,model_type:r});if(!s.success){t.error({mainModelId:e,errors:s.error.format()},"Failed to parse main model id");return}return s.data},jde=fe(pe,e=>({model:e.sdxl.refinerModel})),_de=()=>{const e=te(),t=Mt("syncModels").isFeatureEnabled,{model:n}=H(jde),{t:r}=W(),{data:o,isLoading:s}=as(Fx),l=i.useMemo(()=>{if(!o)return[];const f=[];return qn(o.entities,(m,h)=>{m&&f.push({value:h,label:m.model_name,group:xn[m.base_model]})}),f},[o]),c=i.useMemo(()=>(o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])??null,[o==null?void 0:o.entities,n]),d=i.useCallback(f=>{if(!f)return;const m=kde(f);m&&e(FI(m))},[e]);return s?a.jsx(sn,{label:r("sdxl.refinermodel"),placeholder:r("sdxl.loading"),disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:2,children:[a.jsx(sn,{tooltip:c==null?void 0:c.description,label:r("sdxl.refinermodel"),value:c==null?void 0:c.id,placeholder:l.length>0?r("sdxl.selectAModel"):r("sdxl.noModelsAvailable"),data:l,error:l.length===0,disabled:l.length===0,onChange:d,w:"100%"}),t&&a.jsx(Ie,{mt:7,children:a.jsx(cu,{iconMode:!0})})]})},Ide=i.memo(_de),Pde=fe([pe],({sdxl:e,hotkeys:t})=>{const{refinerNegativeAestheticScore:n}=e,{shift:r}=t;return{refinerNegativeAestheticScore:n,shift:r}}),Ede=()=>{const{refinerNegativeAestheticScore:e,shift:t}=H(Pde),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>r(W1(c)),[r]),l=i.useCallback(()=>r(W1(2.5)),[r]);return a.jsx(nt,{label:o("sdxl.negAestheticScore"),step:t?.1:.5,min:1,max:10,onChange:s,handleReset:l,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Mde=i.memo(Ede),Ode=fe([pe],({sdxl:e,hotkeys:t})=>{const{refinerPositiveAestheticScore:n}=e,{shift:r}=t;return{refinerPositiveAestheticScore:n,shift:r}}),Dde=()=>{const{refinerPositiveAestheticScore:e,shift:t}=H(Ode),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>r(H1(c)),[r]),l=i.useCallback(()=>r(H1(6)),[r]);return a.jsx(nt,{label:o("sdxl.posAestheticScore"),step:t?.1:.5,min:1,max:10,onChange:s,handleReset:l,value:e,sliderNumberInputProps:{max:10},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Rde=i.memo(Dde),Ade=fe(pe,({ui:e,sdxl:t})=>{const{refinerScheduler:n}=t,{favoriteSchedulers:r}=e,o=Hr(Gh,(s,l)=>({value:l,label:s,group:r.includes(l)?"Favorites":void 0})).sort((s,l)=>s.label.localeCompare(l.label));return{refinerScheduler:n,data:o}}),Tde=()=>{const e=te(),{t}=W(),{refinerScheduler:n,data:r}=H(Ade),o=kl(),s=i.useCallback(l=>{l&&e(zI(l))},[e]);return a.jsx(sn,{w:"100%",label:t("sdxl.scheduler"),value:n,data:r,onChange:s,disabled:!o})},Nde=i.memo(Tde),$de=fe([pe],({sdxl:e})=>{const{refinerStart:t}=e;return{refinerStart:t}}),Lde=()=>{const{refinerStart:e}=H($de),t=te(),n=kl(),r=i.useCallback(l=>t(V1(l)),[t]),{t:o}=W(),s=i.useCallback(()=>t(V1(.8)),[t]);return a.jsx(nt,{label:o("sdxl.refinerStart"),step:.01,min:0,max:1,onChange:r,handleReset:s,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1,isDisabled:!n})},Fde=i.memo(Lde),zde=fe([pe],({sdxl:e,ui:t})=>{const{refinerSteps:n}=e,{shouldUseSliders:r}=t;return{refinerSteps:n,shouldUseSliders:r}}),Bde=()=>{const{refinerSteps:e,shouldUseSliders:t}=H(zde),n=kl(),r=te(),{t:o}=W(),s=i.useCallback(c=>{r(z1(c))},[r]),l=i.useCallback(()=>{r(z1(20))},[r]);return t?a.jsx(nt,{label:o("sdxl.steps"),min:1,max:100,step:1,onChange:s,handleReset:l,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:500},isDisabled:!n}):a.jsx(_s,{label:o("sdxl.steps"),min:1,max:500,step:1,onChange:s,value:e,numberInputFieldProps:{textAlign:"center"},isDisabled:!n})},Hde=i.memo(Bde);function Wde(){const e=H(s=>s.sdxl.shouldUseSDXLRefiner),t=kl(),n=te(),{t:r}=W(),o=i.useCallback(s=>{n(N9(s.target.checked))},[n]);return a.jsx(_n,{label:r("sdxl.useRefiner"),isChecked:e,onChange:o,isDisabled:!t})}const Vde=fe(pe,e=>{const{shouldUseSDXLRefiner:t}=e.sdxl,{shouldUseSliders:n}=e.ui;return{activeLabel:t?"Enabled":void 0,shouldUseSliders:n}}),Ude=()=>{const{activeLabel:e,shouldUseSliders:t}=H(Vde),{t:n}=W();return kl()?a.jsx(_r,{label:n("sdxl.refiner"),activeLabel:e,children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(Wde,{}),a.jsx(Ide,{}),a.jsxs($,{gap:2,flexDirection:t?"column":"row",children:[a.jsx(Hde,{}),a.jsx(Sde,{})]}),a.jsx(Nde,{}),a.jsx(Rde,{}),a.jsx(Mde,{}),a.jsx(Fde,{})]})}):a.jsx(_r,{label:n("sdxl.refiner"),activeLabel:e,children:a.jsx($,{sx:{justifyContent:"center",p:2},children:a.jsx(be,{sx:{fontSize:"sm",color:"base.500",_dark:"base.700"},children:n("models.noRefinerModelsInstalled")})})})},F2=i.memo(Ude),Gde=fe([pe],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:l,inputMax:c}=t.sd.guidance,{cfgScale:d}=e,{shouldUseSliders:f}=n,{shift:m}=r;return{cfgScale:d,initial:o,min:s,sliderMax:l,inputMax:c,shouldUseSliders:f,shift:m}}),Kde=()=>{const{cfgScale:e,initial:t,min:n,sliderMax:r,inputMax:o,shouldUseSliders:s,shift:l}=H(Gde),c=te(),{t:d}=W(),f=i.useCallback(h=>c(Cm(h)),[c]),m=i.useCallback(()=>c(Cm(t)),[c,t]);return s?a.jsx(Ot,{feature:"paramCFGScale",children:a.jsx(nt,{label:d("parameters.cfgScale"),step:l?.1:.5,min:n,max:r,onChange:f,handleReset:m,value:e,sliderNumberInputProps:{max:o},withInput:!0,withReset:!0,withSliderMarks:!0,isInteger:!1})}):a.jsx(Ot,{feature:"paramCFGScale",children:a.jsx(_s,{label:d("parameters.cfgScale"),step:.5,min:n,max:o,onChange:f,value:e,isInteger:!1,numberInputFieldProps:{textAlign:"center"}})})},Ds=i.memo(Kde),qde=fe(pe,e=>({model:e.generation.model})),Xde=()=>{const e=te(),{t}=W(),{model:n}=H(qde),r=Mt("syncModels").isFeatureEnabled,{data:o,isLoading:s}=as(tS),{data:l,isLoading:c}=vd(tS),d=H(tr),f=i.useMemo(()=>{if(!o)return[];const g=[];return qn(o.entities,(b,y)=>{b&&g.push({value:y,label:b.model_name,group:xn[b.base_model]})}),qn(l==null?void 0:l.entities,(b,y)=>{!b||d==="unifiedCanvas"||d==="img2img"||g.push({value:y,label:b.model_name,group:xn[b.base_model]})}),g},[o,l,d]),m=i.useMemo(()=>((o==null?void 0:o.entities[`${n==null?void 0:n.base_model}/main/${n==null?void 0:n.model_name}`])||(l==null?void 0:l.entities[`${n==null?void 0:n.base_model}/onnx/${n==null?void 0:n.model_name}`]))??null,[o==null?void 0:o.entities,n,l==null?void 0:l.entities]),h=i.useCallback(g=>{if(!g)return;const b=i0(g);b&&e(N1(b))},[e]);return s||c?a.jsx(sn,{label:t("modelManager.model"),placeholder:"Loading...",disabled:!0,data:[]}):a.jsxs($,{w:"100%",alignItems:"center",gap:3,children:[a.jsx(Ot,{feature:"paramModel",children:a.jsx(sn,{tooltip:m==null?void 0:m.description,label:t("modelManager.model"),value:m==null?void 0:m.id,placeholder:f.length>0?"Select a model":"No models available",data:f,error:f.length===0,disabled:f.length===0,onChange:h,w:"100%"})}),r&&a.jsx(Ie,{mt:6,children:a.jsx(cu,{iconMode:!0})})]})},Qde=i.memo(Xde),Yde=fe(pe,({generation:e})=>{const{model:t,vae:n}=e;return{model:t,vae:n}}),Zde=()=>{const e=te(),{t}=W(),{model:n,vae:r}=H(Yde),{data:o}=YI(),s=i.useMemo(()=>{if(!o)return[];const d=[{value:"default",label:"Default",group:"Default"}];return qn(o.entities,(f,m)=>{if(!f)return;const h=(n==null?void 0:n.base_model)!==f.base_model;d.push({value:m,label:f.model_name,group:xn[f.base_model],disabled:h,tooltip:h?`Incompatible base model: ${f.base_model}`:void 0})}),d.sort((f,m)=>f.disabled&&!m.disabled?1:-1)},[o,n==null?void 0:n.base_model]),l=i.useMemo(()=>(o==null?void 0:o.entities[`${r==null?void 0:r.base_model}/vae/${r==null?void 0:r.model_name}`])??null,[o==null?void 0:o.entities,r]),c=i.useCallback(d=>{if(!d||d==="default"){e(nc(null));return}const f=xO(d);f&&e(nc(f))},[e]);return a.jsx(Ot,{feature:"paramVAE",children:a.jsx(sn,{itemComponent:xl,tooltip:l==null?void 0:l.description,label:t("modelManager.vae"),value:(l==null?void 0:l.id)??"default",placeholder:"Default",data:s,onChange:c,disabled:s.length===0,clearable:!0})})},Jde=i.memo(Zde),efe=fe([pe],({ui:e,generation:t})=>{const{scheduler:n}=t,{favoriteSchedulers:r}=e,o=Hr(Gh,(s,l)=>({value:l,label:s,group:r.includes(l)?"Favorites":void 0})).sort((s,l)=>s.label.localeCompare(l.label));return{scheduler:n,data:o}}),tfe=()=>{const e=te(),{t}=W(),{scheduler:n,data:r}=H(efe),o=i.useCallback(s=>{s&&e($1(s))},[e]);return a.jsx(Ot,{feature:"paramScheduler",children:a.jsx(sn,{label:t("parameters.scheduler"),value:n,data:r,onChange:o})})},nfe=i.memo(tfe),rfe=fe(pe,({generation:e})=>{const{vaePrecision:t}=e;return{vaePrecision:t}}),ofe=["fp16","fp32"],sfe=()=>{const{t:e}=W(),t=te(),{vaePrecision:n}=H(rfe),r=i.useCallback(o=>{o&&t($9(o))},[t]);return a.jsx(Ot,{feature:"paramVAEPrecision",children:a.jsx(yn,{label:e("modelManager.vaePrecision"),value:n,data:ofe,onChange:r})})},afe=i.memo(sfe),lfe=()=>{const e=Mt("vae").isFeatureEnabled;return a.jsxs($,{gap:3,w:"full",flexWrap:e?"wrap":"nowrap",children:[a.jsx(Ie,{w:"full",children:a.jsx(Qde,{})}),a.jsx(Ie,{w:"full",children:a.jsx(nfe,{})}),e&&a.jsxs($,{w:"full",gap:3,children:[a.jsx(Jde,{}),a.jsx(afe,{})]})]})},Rs=i.memo(lfe),PO=[{name:wt.t("parameters.aspectRatioFree"),value:null},{name:"2:3",value:2/3},{name:"16:9",value:16/9},{name:"1:1",value:1/1}],EO=PO.map(e=>e.value);function MO(){const e=H(s=>s.generation.aspectRatio),t=te(),n=H(s=>s.generation.shouldFitToWidthHeight),r=H(tr),o=i.useCallback(s=>{t(Xo(s.value)),t(bd(!1))},[t]);return a.jsx($t,{isAttached:!0,children:PO.map(s=>a.jsx(Xe,{size:"sm",isChecked:e===s.value,isDisabled:r==="img2img"?!n:!1,onClick:o.bind(null,s),children:s.name},s.name))})}const ife=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{min:r,sliderMax:o,inputMax:s,fineStep:l,coarseStep:c}=n.sd.height,{model:d,height:f}=e,{aspectRatio:m}=e,h=t.shift?l:c;return{model:d,height:f,min:r,sliderMax:o,inputMax:s,step:h,aspectRatio:m}}),cfe=e=>{const{model:t,height:n,min:r,sliderMax:o,inputMax:s,step:l,aspectRatio:c}=H(ife),d=te(),{t:f}=W(),m=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,h=i.useCallback(b=>{if(d(Ja(b)),c){const y=kr(b*c,8);d(Za(y))}},[d,c]),g=i.useCallback(()=>{if(d(Ja(m)),c){const b=kr(m*c,8);d(Za(b))}},[d,m,c]);return a.jsx(nt,{label:f("parameters.height"),value:n,min:r,step:l,max:o,onChange:h,handleReset:g,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},ufe=i.memo(cfe),dfe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{min:r,sliderMax:o,inputMax:s,fineStep:l,coarseStep:c}=n.sd.width,{model:d,width:f,aspectRatio:m}=e,h=t.shift?l:c;return{model:d,width:f,min:r,sliderMax:o,inputMax:s,step:h,aspectRatio:m}}),ffe=e=>{const{model:t,width:n,min:r,sliderMax:o,inputMax:s,step:l,aspectRatio:c}=H(dfe),d=te(),{t:f}=W(),m=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,h=i.useCallback(b=>{if(d(Za(b)),c){const y=kr(b/c,8);d(Ja(y))}},[d,c]),g=i.useCallback(()=>{if(d(Za(m)),c){const b=kr(m/c,8);d(Ja(b))}},[d,m,c]);return a.jsx(nt,{label:f("parameters.width"),value:n,min:r,step:l,max:o,onChange:h,handleReset:g,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:s},...e})},pfe=i.memo(ffe),mfe=fe([pe,tr],({generation:e},t)=>{const{shouldFitToWidthHeight:n,shouldLockAspectRatio:r,width:o,height:s}=e;return{activeTabName:t,shouldFitToWidthHeight:n,shouldLockAspectRatio:r,width:o,height:s}});function Hc(){const{t:e}=W(),t=te(),{activeTabName:n,shouldFitToWidthHeight:r,shouldLockAspectRatio:o,width:s,height:l}=H(mfe),c=i.useCallback(()=>{o?(t(bd(!1)),EO.includes(s/l)?t(Xo(s/l)):t(Xo(null))):(t(bd(!0)),t(Xo(s/l)))},[o,s,l,t]),d=i.useCallback(()=>{t(L9()),t(Xo(null)),o&&t(Xo(l/s))},[t,o,s,l]);return a.jsxs($,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.150",_dark:{bg:"base.750"}},children:[a.jsx(Ot,{feature:"paramRatio",children:a.jsxs(Gt,{as:$,flexDir:"row",alignItems:"center",gap:2,children:[a.jsx(ln,{children:e("parameters.aspectRatio")}),a.jsx(Wr,{}),a.jsx(MO,{}),a.jsx(Fe,{tooltip:e("ui.swapSizes"),"aria-label":e("ui.swapSizes"),size:"sm",icon:a.jsx(k7,{}),fontSize:20,isDisabled:n==="img2img"?!r:!1,onClick:d}),a.jsx(Fe,{tooltip:e("ui.lockRatio"),"aria-label":e("ui.lockRatio"),size:"sm",icon:a.jsx(VM,{}),isChecked:o,isDisabled:n==="img2img"?!r:!1,onClick:c})]})}),a.jsx($,{gap:2,alignItems:"center",children:a.jsxs($,{gap:2,flexDirection:"column",width:"full",children:[a.jsx(pfe,{isDisabled:n==="img2img"?!r:!1}),a.jsx(ufe,{isDisabled:n==="img2img"?!r:!1})]})})]})}const hfe=fe([pe],({generation:e,config:t,ui:n,hotkeys:r})=>{const{initial:o,min:s,sliderMax:l,inputMax:c,fineStep:d,coarseStep:f}=t.sd.steps,{steps:m}=e,{shouldUseSliders:h}=n,g=r.shift?d:f;return{steps:m,initial:o,min:s,sliderMax:l,inputMax:c,step:g,shouldUseSliders:h}}),gfe=()=>{const{steps:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s,shouldUseSliders:l}=H(hfe),c=te(),{t:d}=W(),f=i.useCallback(g=>{c(Sm(g))},[c]),m=i.useCallback(()=>{c(Sm(t))},[c,t]),h=i.useCallback(()=>{c(Nx())},[c]);return l?a.jsx(Ot,{feature:"paramSteps",children:a.jsx(nt,{label:d("parameters.steps"),min:n,max:r,step:s,onChange:f,handleReset:m,value:e,withInput:!0,withReset:!0,withSliderMarks:!0,sliderNumberInputProps:{max:o}})}):a.jsx(Ot,{feature:"paramSteps",children:a.jsx(_s,{label:d("parameters.steps"),min:n,max:o,step:s,onChange:f,value:e,numberInputFieldProps:{textAlign:"center"},onBlur:h})})},As=i.memo(gfe);function OO(){const e=te(),t=H(o=>o.generation.shouldFitToWidthHeight),n=i.useCallback(o=>{e(F9(o.target.checked))},[e]),{t:r}=W();return a.jsx(_n,{label:r("parameters.imageFit"),isChecked:t,onChange:n})}function vfe(){const e=H(l=>l.generation.seed),t=H(l=>l.generation.shouldRandomizeSeed),n=H(l=>l.generation.shouldGenerateVariations),{t:r}=W(),o=te(),s=i.useCallback(l=>o(ym(l)),[o]);return a.jsx(_s,{label:r("parameters.seed"),step:1,precision:0,flexGrow:1,min:e3,max:t3,isDisabled:t,isInvalid:e<0&&n,onChange:s,value:e})}const bfe=(e,t)=>Math.floor(Math.random()*(t-e+1)+e);function xfe(){const e=te(),t=H(o=>o.generation.shouldRandomizeSeed),{t:n}=W(),r=i.useCallback(()=>e(ym(bfe(e3,t3))),[e]);return a.jsx(Fe,{size:"sm",isDisabled:t,"aria-label":n("parameters.shuffle"),tooltip:n("parameters.shuffle"),onClick:r,icon:a.jsx(Wte,{})})}const yfe=()=>{const e=te(),{t}=W(),n=H(o=>o.generation.shouldRandomizeSeed),r=i.useCallback(o=>e(z9(o.target.checked)),[e]);return a.jsx(_n,{label:t("common.random"),isChecked:n,onChange:r})},Cfe=i.memo(yfe),wfe=()=>a.jsx(Ot,{feature:"paramSeed",children:a.jsxs($,{sx:{gap:3,alignItems:"flex-end"},children:[a.jsx(vfe,{}),a.jsx(xfe,{}),a.jsx(Cfe,{})]})}),Ts=i.memo(wfe),DO=_e((e,t)=>a.jsxs($,{ref:t,sx:{flexDir:"column",gap:2,bg:"base.100",px:4,pt:2,pb:4,borderRadius:"base",_dark:{bg:"base.750"}},children:[a.jsx(be,{fontSize:"sm",fontWeight:"bold",sx:{color:"base.600",_dark:{color:"base.300"}},children:e.label}),e.children]}));DO.displayName="SubSettingsWrapper";const Wc=i.memo(DO),Sfe=fe([pe],({sdxl:e})=>{const{sdxlImg2ImgDenoisingStrength:t}=e;return{sdxlImg2ImgDenoisingStrength:t}}),kfe=()=>{const{sdxlImg2ImgDenoisingStrength:e}=H(Sfe),t=te(),{t:n}=W(),r=i.useCallback(s=>t(nS(s)),[t]),o=i.useCallback(()=>{t(nS(.7))},[t]);return a.jsx(Ot,{feature:"paramDenoisingStrength",children:a.jsx(Wc,{children:a.jsx(nt,{label:n("sdxl.denoisingStrength"),step:.01,min:0,max:1,onChange:r,handleReset:o,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0})})})},RO=i.memo(kfe),jfe=fe([pe],({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}}),_fe=()=>{const{t:e}=W(),{shouldUseSliders:t,activeLabel:n}=H(jfe);return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}),a.jsx(RO,{}),a.jsx(OO,{})]})})},Ife=i.memo(_fe),Pfe=()=>a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(Ife,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(fu,{})]}),Efe=i.memo(Pfe),z2=()=>{const{t:e}=W(),t=H(l=>l.generation.shouldRandomizeSeed),n=H(l=>l.generation.iterations),r=i.useMemo(()=>n===1?e("parameters.iterationsWithCount_one",{count:1}):e("parameters.iterationsWithCount_other",{count:n}),[n,e]),o=i.useMemo(()=>e(t?"parameters.randomSeed":"parameters.manualSeed"),[t,e]);return{iterationsAndSeedLabel:i.useMemo(()=>[r,o].join(", "),[r,o]),iterationsLabel:r,seedLabel:o}},Mfe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsx($,{sx:{flexDirection:"column",gap:3},children:t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]})})})},AO=i.memo(Mfe),Ofe=()=>a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(AO,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(fu,{})]}),Dfe=i.memo(Ofe),Rfe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceMode),{t:n}=W(),r=i.useMemo(()=>[{label:n("parameters.unmasked"),value:"unmasked"},{label:n("unifiedCanvas.mask"),value:"mask"},{label:n("parameters.maskEdge"),value:"edge"}],[n]),o=i.useCallback(s=>{s&&e(B9(s))},[e]);return a.jsx(Ot,{feature:"compositingCoherenceMode",children:a.jsx(yn,{label:n("parameters.coherenceMode"),data:r,value:t,onChange:o})})},Afe=i.memo(Rfe),Tfe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceSteps),{t:n}=W(),r=i.useCallback(s=>{e(rS(s))},[e]),o=i.useCallback(()=>{e(rS(20))},[e]);return a.jsx(Ot,{feature:"compositingCoherenceSteps",children:a.jsx(nt,{label:n("parameters.coherenceSteps"),min:1,max:100,step:1,sliderNumberInputProps:{max:999},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})},Nfe=i.memo(Tfe),$fe=()=>{const e=te(),t=H(s=>s.generation.canvasCoherenceStrength),{t:n}=W(),r=i.useCallback(s=>{e(oS(s))},[e]),o=i.useCallback(()=>{e(oS(.3))},[e]);return a.jsx(Ot,{feature:"compositingStrength",children:a.jsx(nt,{label:n("parameters.coherenceStrength"),min:0,max:1,step:.01,sliderNumberInputProps:{max:999},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})},Lfe=i.memo($fe);function Ffe(){const e=te(),t=H(s=>s.generation.maskBlur),{t:n}=W(),r=i.useCallback(s=>{e(sS(s))},[e]),o=i.useCallback(()=>{e(sS(16))},[e]);return a.jsx(Ot,{feature:"compositingBlur",children:a.jsx(nt,{label:n("parameters.maskBlur"),min:0,max:64,sliderNumberInputProps:{max:512},value:t,onChange:r,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:o})})}const zfe=[{label:"Box Blur",value:"box"},{label:"Gaussian Blur",value:"gaussian"}];function Bfe(){const e=H(o=>o.generation.maskBlurMethod),t=te(),{t:n}=W(),r=i.useCallback(o=>{o&&t(H9(o))},[t]);return a.jsx(Ot,{feature:"compositingBlurMethod",children:a.jsx(yn,{value:e,onChange:r,label:n("parameters.maskBlurMethod"),data:zfe})})}const Hfe=()=>{const{t:e}=W();return a.jsx(_r,{label:e("parameters.compositingSettingsHeader"),children:a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsxs(Wc,{label:e("parameters.coherencePassHeader"),children:[a.jsx(Afe,{}),a.jsx(Nfe,{}),a.jsx(Lfe,{})]}),a.jsx(On,{}),a.jsxs(Wc,{label:e("parameters.maskAdjustmentsHeader"),children:[a.jsx(Ffe,{}),a.jsx(Bfe,{})]})]})})},TO=i.memo(Hfe),Wfe=fe([pe],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}}),Vfe=()=>{const e=te(),{infillMethod:t}=H(Wfe),{data:n,isLoading:r}=_I(),o=n==null?void 0:n.infill_methods,{t:s}=W(),l=i.useCallback(c=>{e(W9(c))},[e]);return a.jsx(Ot,{feature:"infillMethod",children:a.jsx(yn,{disabled:(o==null?void 0:o.length)===0,placeholder:r?"Loading...":void 0,label:s("parameters.infillMethod"),value:t,data:o??[],onChange:l})})},Ufe=i.memo(Vfe),Gfe=fe([pe],({generation:e})=>{const{infillPatchmatchDownscaleSize:t,infillMethod:n}=e;return{infillPatchmatchDownscaleSize:t,infillMethod:n}}),Kfe=()=>{const e=te(),{infillPatchmatchDownscaleSize:t,infillMethod:n}=H(Gfe),{t:r}=W(),o=i.useCallback(l=>{e(aS(l))},[e]),s=i.useCallback(()=>{e(aS(2))},[e]);return a.jsx(nt,{isDisabled:n!=="patchmatch",label:r("parameters.patchmatchDownScaleSize"),min:1,max:10,value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},qfe=i.memo(Kfe),Xfe=fe([pe],({generation:e})=>{const{infillTileSize:t,infillMethod:n}=e;return{infillTileSize:t,infillMethod:n}}),Qfe=()=>{const e=te(),{infillTileSize:t,infillMethod:n}=H(Xfe),{t:r}=W(),o=i.useCallback(l=>{e(lS(l))},[e]),s=i.useCallback(()=>{e(lS(32))},[e]);return a.jsx(nt,{isDisabled:n!=="tile",label:r("parameters.tileSize"),min:16,max:64,sliderNumberInputProps:{max:256},value:t,onChange:o,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})},Yfe=i.memo(Qfe),Zfe=fe([pe],({generation:e})=>{const{infillMethod:t}=e;return{infillMethod:t}});function Jfe(){const{infillMethod:e}=H(Zfe);return a.jsxs($,{children:[e==="tile"&&a.jsx(Yfe,{}),e==="patchmatch"&&a.jsx(qfe,{})]})}const epe=fe([pe],({canvas:e})=>{const{boundingBoxScaleMethod:t}=e;return{boundingBoxScale:t}}),tpe=()=>{const e=te(),{boundingBoxScale:t}=H(epe),{t:n}=W(),r=i.useCallback(o=>{e(V9(o))},[e]);return a.jsx(Ot,{feature:"scaleBeforeProcessing",children:a.jsx(sn,{label:n("parameters.scaleBeforeProcessing"),data:U9,value:t,onChange:r})})},npe=i.memo(tpe),rpe=fe([pe],({generation:e,canvas:t})=>{const{scaledBoundingBoxDimensions:n,boundingBoxScaleMethod:r}=t,{model:o,aspectRatio:s}=e;return{model:o,scaledBoundingBoxDimensions:n,isManual:r==="manual",aspectRatio:s}}),ope=()=>{const e=te(),{model:t,isManual:n,scaledBoundingBoxDimensions:r,aspectRatio:o}=H(rpe),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{let m=r.width;const h=Math.floor(f);o&&(m=kr(h*o,64)),e(Pm({width:m,height:h}))},[o,e,r.width]),d=i.useCallback(()=>{let f=r.width;const m=Math.floor(s);o&&(f=kr(m*o,64)),e(Pm({width:f,height:m}))},[o,e,s,r.width]);return a.jsx(nt,{isDisabled:!n,label:l("parameters.scaledHeight"),min:64,max:1536,step:64,value:r.height,onChange:c,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},spe=i.memo(ope),ape=fe([pe],({canvas:e,generation:t})=>{const{boundingBoxScaleMethod:n,scaledBoundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,scaledBoundingBoxDimensions:r,aspectRatio:s,isManual:n==="manual"}}),lpe=()=>{const e=te(),{model:t,isManual:n,scaledBoundingBoxDimensions:r,aspectRatio:o}=H(ape),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{const m=Math.floor(f);let h=r.height;o&&(h=kr(m/o,64)),e(Pm({width:m,height:h}))},[o,e,r.height]),d=i.useCallback(()=>{const f=Math.floor(s);let m=r.height;o&&(m=kr(f/o,64)),e(Pm({width:f,height:m}))},[o,e,s,r.height]);return a.jsx(nt,{isDisabled:!n,label:l("parameters.scaledWidth"),min:64,max:1536,step:64,value:r.width,onChange:c,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},ipe=i.memo(lpe),cpe=()=>{const{t:e}=W();return a.jsx(_r,{label:e("parameters.infillScalingHeader"),children:a.jsxs($,{sx:{gap:2,flexDirection:"column"},children:[a.jsxs(Wc,{children:[a.jsx(Ufe,{}),a.jsx(Jfe,{})]}),a.jsx(On,{}),a.jsxs(Wc,{children:[a.jsx(npe,{}),a.jsx(ipe,{}),a.jsx(spe,{})]})]})})},NO=i.memo(cpe),Lo=fe([pe],({canvas:e})=>e.batchIds.length>0||e.layerState.stagingArea.images.length>0),upe=fe([pe,Lo],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,boundingBoxDimensions:r,isStaging:n,aspectRatio:s}}),dpe=()=>{const e=te(),{model:t,boundingBoxDimensions:n,isStaging:r,aspectRatio:o}=H(upe),{t:s}=W(),l=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,c=i.useCallback(f=>{if(e(es({...n,height:Math.floor(f)})),o){const m=kr(f*o,64);e(es({width:m,height:Math.floor(f)}))}},[o,n,e]),d=i.useCallback(()=>{if(e(es({...n,height:Math.floor(l)})),o){const f=kr(l*o,64);e(es({width:f,height:Math.floor(l)}))}},[o,n,e,l]);return a.jsx(nt,{label:s("parameters.boundingBoxHeight"),min:64,max:1536,step:64,value:n.height,onChange:c,isDisabled:r,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},fpe=i.memo(dpe),ppe=fe([pe,Lo],({canvas:e,generation:t},n)=>{const{boundingBoxDimensions:r}=e,{model:o,aspectRatio:s}=t;return{model:o,boundingBoxDimensions:r,isStaging:n,aspectRatio:s}}),mpe=()=>{const e=te(),{model:t,boundingBoxDimensions:n,isStaging:r,aspectRatio:o}=H(ppe),s=["sdxl","sdxl-refiner"].includes(t==null?void 0:t.base_model)?1024:512,{t:l}=W(),c=i.useCallback(f=>{if(e(es({...n,width:Math.floor(f)})),o){const m=kr(f/o,64);e(es({width:Math.floor(f),height:m}))}},[o,n,e]),d=i.useCallback(()=>{if(e(es({...n,width:Math.floor(s)})),o){const f=kr(s/o,64);e(es({width:Math.floor(s),height:f}))}},[o,n,e,s]);return a.jsx(nt,{label:l("parameters.boundingBoxWidth"),min:64,max:1536,step:64,value:n.width,onChange:c,isDisabled:r,sliderNumberInputProps:{max:4096},withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d})},hpe=i.memo(mpe),gpe=fe([pe],({generation:e,canvas:t})=>{const{shouldFitToWidthHeight:n,shouldLockAspectRatio:r}=e,{boundingBoxDimensions:o}=t;return{shouldFitToWidthHeight:n,shouldLockAspectRatio:r,boundingBoxDimensions:o}});function Hh(){const e=te(),{t}=W(),{shouldLockAspectRatio:n,boundingBoxDimensions:r}=H(gpe),o=i.useCallback(()=>{n?(e(bd(!1)),EO.includes(r.width/r.height)?e(Xo(r.width/r.height)):e(Xo(null))):(e(bd(!0)),e(Xo(r.width/r.height)))},[n,r,e]),s=i.useCallback(()=>{e(G9()),e(Xo(null)),n&&e(Xo(r.height/r.width))},[e,n,r]);return a.jsxs($,{sx:{gap:2,p:4,borderRadius:4,flexDirection:"column",w:"full",bg:"base.100",_dark:{bg:"base.750"}},children:[a.jsx(Ot,{feature:"paramRatio",children:a.jsxs(Gt,{as:$,flexDir:"row",alignItems:"center",gap:2,children:[a.jsx(ln,{children:t("parameters.aspectRatio")}),a.jsx(Wr,{}),a.jsx(MO,{}),a.jsx(Fe,{tooltip:t("ui.swapSizes"),"aria-label":t("ui.swapSizes"),size:"sm",icon:a.jsx(k7,{}),fontSize:20,onClick:s}),a.jsx(Fe,{tooltip:t("ui.lockRatio"),"aria-label":t("ui.lockRatio"),size:"sm",icon:a.jsx(VM,{}),isChecked:n,onClick:o})]})}),a.jsx(hpe,{}),a.jsx(fpe,{})]})}const vpe=fe(pe,({ui:e,generation:t})=>{const{shouldUseSliders:n}=e,{shouldRandomizeSeed:r}=t;return{shouldUseSliders:n,activeLabel:r?void 0:"Manual Seed"}}),bpe=()=>{const{t:e}=W(),{shouldUseSliders:t,activeLabel:n}=H(vpe);return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}),a.jsx(RO,{})]})})},xpe=i.memo(bpe);function ype(){return a.jsxs(a.Fragment,{children:[a.jsx(L2,{}),a.jsx(xpe,{}),a.jsx(F2,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(NO,{}),a.jsx(TO,{}),a.jsx(fu,{})]})}function B2(){return a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(_O,{}),a.jsx(jO,{})]})}function Cpe(){const e=H(l=>l.generation.horizontalSymmetrySteps),t=H(l=>l.generation.steps),n=te(),{t:r}=W(),o=i.useCallback(l=>{n(iS(l))},[n]),s=i.useCallback(()=>{n(iS(0))},[n]);return a.jsx(nt,{label:r("parameters.hSymmetryStep"),value:e,onChange:o,min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})}function wpe(){const e=H(r=>r.generation.shouldUseSymmetry),t=te(),n=i.useCallback(r=>{t(K9(r.target.checked))},[t]);return a.jsx(_n,{label:"Enable Symmetry",isChecked:e,onChange:n})}function Spe(){const e=H(l=>l.generation.verticalSymmetrySteps),t=H(l=>l.generation.steps),n=te(),{t:r}=W(),o=i.useCallback(l=>{n(cS(l))},[n]),s=i.useCallback(()=>{n(cS(0))},[n]);return a.jsx(nt,{label:r("parameters.vSymmetryStep"),value:e,onChange:o,min:0,max:t,step:1,withInput:!0,withSliderMarks:!0,withReset:!0,handleReset:s})}const kpe=fe(pe,e=>({activeLabel:e.generation.shouldUseSymmetry?"Enabled":void 0})),jpe=()=>{const{t:e}=W(),{activeLabel:t}=H(kpe);return Mt("symmetry").isFeatureEnabled?a.jsx(_r,{label:e("parameters.symmetry"),activeLabel:t,children:a.jsxs($,{sx:{gap:2,flexDirection:"column"},children:[a.jsx(wpe,{}),a.jsx(Cpe,{}),a.jsx(Spe,{})]})}):null},H2=i.memo(jpe),_pe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:l,fineStep:c,coarseStep:d}=n.sd.img2imgStrength,{img2imgStrength:f}=e,m=t.shift?c:d;return{img2imgStrength:f,initial:r,min:o,sliderMax:s,inputMax:l,step:m}}),Ipe=()=>{const{img2imgStrength:e,initial:t,min:n,sliderMax:r,inputMax:o,step:s}=H(_pe),l=te(),{t:c}=W(),d=i.useCallback(m=>l(km(m)),[l]),f=i.useCallback(()=>{l(km(t))},[l,t]);return a.jsx(Ot,{feature:"paramDenoisingStrength",children:a.jsx(Wc,{children:a.jsx(nt,{label:`${c("parameters.denoisingStrength")}`,step:s,min:n,max:r,onChange:d,handleReset:f,value:e,isInteger:!1,withInput:!0,withSliderMarks:!0,withReset:!0,sliderNumberInputProps:{max:o}})})})},$O=i.memo(Ipe),Ppe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hc,{})]}),a.jsx($O,{}),a.jsx(OO,{})]})})},Epe=i.memo(Ppe),Mpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(Epe,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(fu,{})]}),Ope=i.memo(Mpe),Dpe=fe(pe,({generation:e})=>{const{hrfMethod:t,hrfEnabled:n}=e;return{hrfMethod:t,hrfEnabled:n}}),Rpe=["ESRGAN","bilinear"],Ape=()=>{const e=te(),{t}=W(),{hrfMethod:n,hrfEnabled:r}=H(Dpe),o=i.useCallback(s=>{s&&e(F1(s))},[e]);return a.jsx(yn,{label:t("hrf.upscaleMethod"),value:n,data:Rpe,onChange:o,disabled:!r})},Tpe=i.memo(Ape),Npe=fe([pe],({generation:e,hotkeys:t,config:n})=>{const{initial:r,min:o,sliderMax:s,inputMax:l,fineStep:c,coarseStep:d}=n.sd.hrfStrength,{hrfStrength:f,hrfEnabled:m}=e,h=t.shift?c:d;return{hrfStrength:f,initial:r,min:o,sliderMax:s,inputMax:l,step:h,hrfEnabled:m}}),$pe=()=>{const{hrfStrength:e,initial:t,min:n,sliderMax:r,step:o,hrfEnabled:s}=H(Npe),l=te(),{t:c}=W(),d=i.useCallback(()=>{l(jm(t))},[l,t]),f=i.useCallback(m=>{l(jm(m))},[l]);return a.jsx(Ut,{label:c("hrf.strengthTooltip"),placement:"right",hasArrow:!0,children:a.jsx(nt,{label:c("parameters.denoisingStrength"),min:n,max:r,step:o,value:e,onChange:f,withSliderMarks:!0,withInput:!0,withReset:!0,handleReset:d,isDisabled:!s})})},Lpe=i.memo($pe);function Fpe(){const e=te(),{t}=W(),n=H(o=>o.generation.hrfEnabled),r=i.useCallback(o=>e(L1(o.target.checked)),[e]);return a.jsx(_n,{label:t("hrf.enableHrf"),isChecked:n,onChange:r,tooltip:t("hrf.enableHrfTooltip")})}const zpe=fe(pe,e=>{const{hrfEnabled:t}=e.generation;return{hrfEnabled:t}});function Bpe(){const{t:e}=W(),t=Mt("hrf").isFeatureEnabled,{hrfEnabled:n}=H(zpe),r=i.useMemo(()=>{if(n)return e("common.on")},[e,n]);return t?a.jsx(_r,{label:e("hrf.hrf"),activeLabel:r,children:a.jsxs($,{sx:{flexDir:"column",gap:2},children:[a.jsx(Fpe,{}),a.jsx(Lpe,{}),a.jsx(Tpe,{})]})}):null}const Hpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(AO,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(Bpe,{}),a.jsx(fu,{})]}),Wpe=i.memo(Hpe),Vpe=()=>{const{t:e}=W(),t=H(r=>r.ui.shouldUseSliders),{iterationsAndSeedLabel:n}=z2();return a.jsx(_r,{label:e("parameters.general"),activeLabel:n,defaultIsOpen:!0,children:a.jsxs($,{sx:{flexDirection:"column",gap:3},children:[t?a.jsxs(a.Fragment,{children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}):a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:3,children:[a.jsx(ds,{}),a.jsx(As,{}),a.jsx(Ds,{})]}),a.jsx(Rs,{}),a.jsx(Ie,{pt:2,children:a.jsx(Ts,{})}),a.jsx(Hh,{})]}),a.jsx($O,{})]})})},Upe=i.memo(Vpe),Gpe=()=>a.jsxs(a.Fragment,{children:[a.jsx(B2,{}),a.jsx(Upe,{}),a.jsx(pu,{}),a.jsx(du,{}),a.jsx(uu,{}),a.jsx(H2,{}),a.jsx(NO,{}),a.jsx(TO,{}),a.jsx(fu,{})]}),Kpe=i.memo(Gpe),qpe=()=>{const e=H(tr),t=H(n=>n.generation.model);return e==="txt2img"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(Dfe,{}):a.jsx(Wpe,{})}):e==="img2img"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(Efe,{}):a.jsx(Ope,{})}):e==="unifiedCanvas"?a.jsx(bm,{children:t&&t.base_model==="sdxl"?a.jsx(ype,{}):a.jsx(Kpe,{})}):null},Xpe=i.memo(qpe),bm=i.memo(e=>a.jsxs($,{sx:{w:"full",h:"full",flexDir:"column",gap:2},children:[a.jsx(z7,{}),a.jsx($,{layerStyle:"first",sx:{w:"full",h:"full",position:"relative",borderRadius:"base",p:2},children:a.jsx($,{sx:{w:"full",h:"full",position:"relative"},children:a.jsx(Ie,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0},children:a.jsx(Gg,{defer:!0,style:{height:"100%",width:"100%"},options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:800,theme:"os-theme-dark"},overflow:{x:"hidden"}},children:a.jsx($,{sx:{gap:2,flexDirection:"column",h:"full",w:"full"},children:e.children})})})})})]}));bm.displayName="ParametersPanelWrapper";const Qpe=fe([pe],e=>{const{initialImage:t}=e.generation,{isConnected:n}=e.system;return{initialImage:t,isResetButtonDisabled:!t,isConnected:n}}),Ype=()=>{const e=te(),{initialImage:t,isConnected:n}=H(Qpe),{currentData:r,isError:o}=jo((t==null?void 0:t.imageName)??Br),s=i.useMemo(()=>{if(r)return{id:"initial-image",payloadType:"IMAGE_DTO",payload:{imageDTO:r}}},[r]),l=i.useMemo(()=>({id:"initial-image",actionType:"SET_INITIAL_IMAGE"}),[]);return i.useEffect(()=>{o&&n&&e(n3())},[e,n,o]),a.jsx(fl,{imageDTO:r,droppableData:l,draggableData:s,isUploadDisabled:!0,fitContainer:!0,dropLabel:"Set as Initial Image",noContentFallback:a.jsx(Tn,{label:"No initial image selected"}),dataTestId:"initial-image"})},Zpe=i.memo(Ype),Jpe=fe([pe],e=>{const{initialImage:t}=e.generation;return{isResetButtonDisabled:!t,initialImage:t}}),eme={type:"SET_INITIAL_IMAGE"},tme=()=>{const{recallWidthAndHeight:e}=Sf(),{t}=W(),{isResetButtonDisabled:n,initialImage:r}=H(Jpe),o=te(),{getUploadButtonProps:s,getUploadInputProps:l}=S2({postUploadAction:eme}),c=i.useCallback(()=>{o(n3())},[o]),d=i.useCallback(()=>{r&&e(r.width,r.height)},[r,e]);return tt("shift+d",d,[r]),a.jsxs($,{layerStyle:"first",sx:{position:"relative",flexDirection:"column",height:"full",width:"full",alignItems:"center",justifyContent:"center",borderRadius:"base",p:2,gap:4},children:[a.jsxs($,{sx:{w:"full",flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[a.jsx(be,{sx:{ps:2,fontWeight:600,userSelect:"none",color:"base.700",_dark:{color:"base.200"}},children:t("metadata.initImage")}),a.jsx(Wr,{}),a.jsx(Fe,{tooltip:"Upload Initial Image","aria-label":"Upload Initial Image",icon:a.jsx($g,{}),...s()}),a.jsx(Fe,{tooltip:`${t("parameters.useSize")} (Shift+D)`,"aria-label":`${t("parameters.useSize")} (Shift+D)`,icon:a.jsx(Qy,{}),onClick:d,isDisabled:n}),a.jsx(Fe,{tooltip:"Reset Initial Image","aria-label":"Reset Initial Image",icon:a.jsx(Ng,{}),onClick:c,isDisabled:n})]}),a.jsx(Zpe,{}),a.jsx("input",{...l()})]})},nme=i.memo(tme),rme=e=>{const{onClick:t,isDisabled:n}=e,{t:r}=W(),o=H(s=>s.system.isConnected);return a.jsx(Fe,{onClick:t,icon:a.jsx(ao,{}),tooltip:`${r("gallery.deleteImage")} (Del)`,"aria-label":`${r("gallery.deleteImage")} (Del)`,isDisabled:n||!o,colorScheme:"error"})},LO=()=>{const[e,{isLoading:t}]=Yh({fixedCacheKey:"enqueueBatch"}),[n,{isLoading:r}]=KI({fixedCacheKey:"resumeProcessor"}),[o,{isLoading:s}]=UI({fixedCacheKey:"pauseProcessor"}),[l,{isLoading:c}]=Rx({fixedCacheKey:"cancelQueueItem"}),[d,{isLoading:f}]=VI({fixedCacheKey:"clearQueue"}),[m,{isLoading:h}]=r3({fixedCacheKey:"pruneQueue"});return t||r||s||c||f||h},ome=[{label:"RealESRGAN x2 Plus",value:"RealESRGAN_x2plus.pth",tooltip:"Attempts to retain sharpness, low smoothing",group:"x2 Upscalers"},{label:"RealESRGAN x4 Plus",value:"RealESRGAN_x4plus.pth",tooltip:"Best for photos and highly detailed images, medium smoothing",group:"x4 Upscalers"},{label:"RealESRGAN x4 Plus (anime 6B)",value:"RealESRGAN_x4plus_anime_6B.pth",tooltip:"Best for anime/manga, high smoothing",group:"x4 Upscalers"},{label:"ESRGAN SRx4",value:"ESRGAN_SRx4_DF2KOST_official-ff704c30.pth",tooltip:"Retains sharpness, low smoothing",group:"x4 Upscalers"}];function sme(){const{t:e}=W(),t=H(o=>o.postprocessing.esrganModelName),n=te(),r=i.useCallback(o=>n(q9(o)),[n]);return a.jsx(yn,{label:e("models.esrganModel"),value:t,itemComponent:xl,onChange:r,data:ome})}const ame=e=>{const{imageDTO:t}=e,n=te(),r=LO(),{t:o}=W(),{isOpen:s,onOpen:l,onClose:c}=sr(),{isAllowedToUpscale:d,detail:f}=X9(t),m=i.useCallback(()=>{c(),!(!t||!d)&&n(o3({imageDTO:t}))},[n,t,d,c]);return a.jsx(xf,{isOpen:s,onClose:c,triggerComponent:a.jsx(Fe,{tooltip:o("parameters.upscale"),onClick:l,icon:a.jsx(zM,{}),"aria-label":o("parameters.upscale")}),children:a.jsxs($,{sx:{flexDirection:"column",gap:4},children:[a.jsx(sme,{}),a.jsx(Xe,{tooltip:f,size:"sm",isDisabled:!t||r||!d,onClick:m,children:o("parameters.upscaleImage")})]})})},lme=i.memo(ame),ime=fe([pe,tr],({gallery:e,system:t,ui:n,config:r},o)=>{const{isConnected:s,shouldConfirmOnDelete:l,denoiseProgress:c}=t,{shouldShowImageDetails:d,shouldHidePreview:f,shouldShowProgressInViewer:m}=n,{shouldFetchMetadataFromApi:h}=r,g=e.selection[e.selection.length-1];return{shouldConfirmOnDelete:l,isConnected:s,shouldDisableToolbarButtons:!!(c!=null&&c.progress_image)||!g,shouldShowImageDetails:d,activeTabName:o,shouldHidePreview:f,shouldShowProgressInViewer:m,lastSelectedImage:g,shouldFetchMetadataFromApi:h}}),cme=()=>{const e=te(),{isConnected:t,shouldDisableToolbarButtons:n,shouldShowImageDetails:r,lastSelectedImage:o,shouldShowProgressInViewer:s}=H(ime),l=Mt("upscaling").isFeatureEnabled,c=LO(),d=zs(),{t:f}=W(),{recallBothPrompts:m,recallSeed:h,recallWidthAndHeight:g,recallAllParameters:b}=Sf(),{currentData:y}=jo((o==null?void 0:o.image_name)??Br),{metadata:x,isLoading:w}=_2(o==null?void 0:o.image_name),{getAndLoadEmbeddedWorkflow:S,getAndLoadEmbeddedWorkflowResult:j}=I7({}),_=i.useCallback(()=>{!o||!o.has_workflow||S(o.image_name)},[S,o]);tt("w",_,[o]);const I=i.useCallback(()=>{b(x)},[x,b]);tt("a",I,[x]);const E=i.useCallback(()=>{h(x==null?void 0:x.seed)},[x==null?void 0:x.seed,h]);tt("s",E,[x]);const M=i.useCallback(()=>{m(x==null?void 0:x.positive_prompt,x==null?void 0:x.negative_prompt,x==null?void 0:x.positive_style_prompt,x==null?void 0:x.negative_style_prompt)},[x==null?void 0:x.negative_prompt,x==null?void 0:x.positive_prompt,x==null?void 0:x.positive_style_prompt,x==null?void 0:x.negative_style_prompt,m]);tt("p",M,[x]);const D=i.useCallback(()=>{g(x==null?void 0:x.width,x==null?void 0:x.height)},[x==null?void 0:x.width,x==null?void 0:x.height,g]);tt("d",D,[x]);const R=i.useCallback(()=>{e(_7()),e(Qh(y))},[e,y]);tt("shift+i",R,[y]);const N=i.useCallback(()=>{y&&e(o3({imageDTO:y}))},[e,y]),O=i.useCallback(()=>{y&&e(Xh([y]))},[e,y]);tt("Shift+U",()=>{N()},{enabled:()=>!!(l&&!n&&t)},[l,y,n,t]);const T=i.useCallback(()=>e(Q9(!r)),[e,r]);tt("i",()=>{y?T():d({title:f("toast.metadataLoadFailed"),status:"error",duration:2500,isClosable:!0})},[y,r,d]),tt("delete",()=>{O()},[e,y]);const U=i.useCallback(()=>{e(II(!s))},[e,s]);return a.jsx(a.Fragment,{children:a.jsxs($,{sx:{flexWrap:"wrap",justifyContent:"center",alignItems:"center",gap:2},children:[a.jsx($t,{isAttached:!0,isDisabled:n,children:a.jsxs(of,{isLazy:!0,children:[a.jsx(sf,{as:Fe,"aria-label":f("parameters.imageActions"),tooltip:f("parameters.imageActions"),isDisabled:!y,icon:a.jsx(P7,{})}),a.jsx(al,{motionProps:Yl,children:y&&a.jsx(E7,{imageDTO:y})})]})}),a.jsxs($t,{isAttached:!0,isDisabled:n,children:[a.jsx(Fe,{icon:a.jsx(e0,{}),tooltip:`${f("nodes.loadWorkflow")} (W)`,"aria-label":`${f("nodes.loadWorkflow")} (W)`,isDisabled:!(y!=null&&y.has_workflow),onClick:_,isLoading:j.isLoading}),a.jsx(Fe,{isLoading:w,icon:a.jsx(GM,{}),tooltip:`${f("parameters.usePrompt")} (P)`,"aria-label":`${f("parameters.usePrompt")} (P)`,isDisabled:!(x!=null&&x.positive_prompt),onClick:M}),a.jsx(Fe,{isLoading:w,icon:a.jsx(KM,{}),tooltip:`${f("parameters.useSeed")} (S)`,"aria-label":`${f("parameters.useSeed")} (S)`,isDisabled:(x==null?void 0:x.seed)===null||(x==null?void 0:x.seed)===void 0,onClick:E}),a.jsx(Fe,{isLoading:w,icon:a.jsx(Qy,{}),tooltip:`${f("parameters.useSize")} (D)`,"aria-label":`${f("parameters.useSize")} (D)`,isDisabled:(x==null?void 0:x.height)===null||(x==null?void 0:x.height)===void 0||(x==null?void 0:x.width)===null||(x==null?void 0:x.width)===void 0,onClick:D}),a.jsx(Fe,{isLoading:w,icon:a.jsx(NM,{}),tooltip:`${f("parameters.useAll")} (A)`,"aria-label":`${f("parameters.useAll")} (A)`,isDisabled:!x,onClick:I})]}),l&&a.jsx($t,{isAttached:!0,isDisabled:c,children:l&&a.jsx(lme,{imageDTO:y})}),a.jsx($t,{isAttached:!0,children:a.jsx(Fe,{icon:a.jsx(LM,{}),tooltip:`${f("parameters.info")} (I)`,"aria-label":`${f("parameters.info")} (I)`,isChecked:r,onClick:T})}),a.jsx($t,{isAttached:!0,children:a.jsx(Fe,{"aria-label":f("settings.displayInProgress"),tooltip:f("settings.displayInProgress"),icon:a.jsx(Ate,{}),isChecked:s,onClick:U})}),a.jsx($t,{isAttached:!0,children:a.jsx(rme,{onClick:O})})]})})},ume=i.memo(cme),dme=()=>{const e=H(n=>{var r;return(r=n.system.denoiseProgress)==null?void 0:r.progress_image}),t=H(n=>n.system.shouldAntialiasProgressImage);return e?a.jsx(Ca,{src:e.dataURL,width:e.width,height:e.height,draggable:!1,"data-testid":"progress-image",sx:{objectFit:"contain",maxWidth:"full",maxHeight:"full",height:"auto",position:"absolute",borderRadius:"base",imageRendering:t?"auto":"pixelated"}}):null},fme=i.memo(dme);function pme(e){return De({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M245.09 327.74v-37.32c57.07 0 84.51 13.47 108.58 38.68 5.4 5.65 15 1.32 14.29-6.43-5.45-61.45-34.14-117.09-122.87-117.09v-37.32a8.32 8.32 0 00-14.05-6L146.58 242a8.2 8.2 0 000 11.94L231 333.71a8.32 8.32 0 0014.09-5.97z"}},{tag:"path",attr:{fill:"none",strokeMiterlimit:"10",strokeWidth:"32",d:"M256 64C150 64 64 150 64 256s86 192 192 192 192-86 192-192S362 64 256 64z"}}]})(e)}const mme=({label:e,value:t,onClick:n,isLink:r,labelPosition:o,withCopy:s=!1})=>{const{t:l}=W(),c=i.useCallback(()=>navigator.clipboard.writeText(t.toString()),[t]);return t?a.jsxs($,{gap:2,children:[n&&a.jsx(Ut,{label:`Recall ${e}`,children:a.jsx(rs,{"aria-label":l("accessibility.useThisParameter"),icon:a.jsx(pme,{}),size:"xs",variant:"ghost",fontSize:20,onClick:n})}),s&&a.jsx(Ut,{label:`Copy ${e}`,children:a.jsx(rs,{"aria-label":`Copy ${e}`,icon:a.jsx(ru,{}),size:"xs",variant:"ghost",fontSize:14,onClick:c})}),a.jsxs($,{direction:o?"column":"row",children:[a.jsxs(be,{fontWeight:"semibold",whiteSpace:"pre-wrap",pr:2,children:[e,":"]}),r?a.jsxs(ig,{href:t.toString(),isExternal:!0,wordBreak:"break-all",children:[t.toString()," ",a.jsx(T8,{mx:"2px"})]}):a.jsx(be,{overflowY:"scroll",wordBreak:"break-all",children:t.toString()})]})]}):null},Rn=i.memo(mme),hme=e=>{var ne;const{metadata:t}=e,{t:n}=W(),{recallPositivePrompt:r,recallNegativePrompt:o,recallSeed:s,recallCfgScale:l,recallCfgRescaleMultiplier:c,recallModel:d,recallScheduler:f,recallVaeModel:m,recallSteps:h,recallWidth:g,recallHeight:b,recallStrength:y,recallHrfEnabled:x,recallHrfStrength:w,recallHrfMethod:S,recallLoRA:j,recallControlNet:_,recallIPAdapter:I,recallT2IAdapter:E}=Sf(),M=i.useCallback(()=>{r(t==null?void 0:t.positive_prompt)},[t==null?void 0:t.positive_prompt,r]),D=i.useCallback(()=>{o(t==null?void 0:t.negative_prompt)},[t==null?void 0:t.negative_prompt,o]),R=i.useCallback(()=>{s(t==null?void 0:t.seed)},[t==null?void 0:t.seed,s]),N=i.useCallback(()=>{d(t==null?void 0:t.model)},[t==null?void 0:t.model,d]),O=i.useCallback(()=>{g(t==null?void 0:t.width)},[t==null?void 0:t.width,g]),T=i.useCallback(()=>{b(t==null?void 0:t.height)},[t==null?void 0:t.height,b]),U=i.useCallback(()=>{f(t==null?void 0:t.scheduler)},[t==null?void 0:t.scheduler,f]),G=i.useCallback(()=>{m(t==null?void 0:t.vae)},[t==null?void 0:t.vae,m]),q=i.useCallback(()=>{h(t==null?void 0:t.steps)},[t==null?void 0:t.steps,h]),Y=i.useCallback(()=>{l(t==null?void 0:t.cfg_scale)},[t==null?void 0:t.cfg_scale,l]),Q=i.useCallback(()=>{c(t==null?void 0:t.cfg_rescale_multiplier)},[t==null?void 0:t.cfg_rescale_multiplier,c]),V=i.useCallback(()=>{y(t==null?void 0:t.strength)},[t==null?void 0:t.strength,y]),se=i.useCallback(()=>{x(t==null?void 0:t.hrf_enabled)},[t==null?void 0:t.hrf_enabled,x]),ee=i.useCallback(()=>{w(t==null?void 0:t.hrf_strength)},[t==null?void 0:t.hrf_strength,w]),le=i.useCallback(()=>{S(t==null?void 0:t.hrf_method)},[t==null?void 0:t.hrf_method,S]),ae=i.useCallback(z=>{j(z)},[j]),ce=i.useCallback(z=>{_(z)},[_]),J=i.useCallback(z=>{I(z)},[I]),re=i.useCallback(z=>{E(z)},[E]),A=i.useMemo(()=>t!=null&&t.controlnets?t.controlnets.filter(z=>_m(z.control_model)):[],[t==null?void 0:t.controlnets]),L=i.useMemo(()=>t!=null&&t.ipAdapters?t.ipAdapters.filter(z=>_m(z.ip_adapter_model)):[],[t==null?void 0:t.ipAdapters]),K=i.useMemo(()=>t!=null&&t.t2iAdapters?t.t2iAdapters.filter(z=>Y9(z.t2i_adapter_model)):[],[t==null?void 0:t.t2iAdapters]);return!t||Object.keys(t).length===0?null:a.jsxs(a.Fragment,{children:[t.created_by&&a.jsx(Rn,{label:n("metadata.createdBy"),value:t.created_by}),t.generation_mode&&a.jsx(Rn,{label:n("metadata.generationMode"),value:t.generation_mode}),t.positive_prompt&&a.jsx(Rn,{label:n("metadata.positivePrompt"),labelPosition:"top",value:t.positive_prompt,onClick:M}),t.negative_prompt&&a.jsx(Rn,{label:n("metadata.negativePrompt"),labelPosition:"top",value:t.negative_prompt,onClick:D}),t.seed!==void 0&&t.seed!==null&&a.jsx(Rn,{label:n("metadata.seed"),value:t.seed,onClick:R}),t.model!==void 0&&t.model!==null&&t.model.model_name&&a.jsx(Rn,{label:n("metadata.model"),value:t.model.model_name,onClick:N}),t.width&&a.jsx(Rn,{label:n("metadata.width"),value:t.width,onClick:O}),t.height&&a.jsx(Rn,{label:n("metadata.height"),value:t.height,onClick:T}),t.scheduler&&a.jsx(Rn,{label:n("metadata.scheduler"),value:t.scheduler,onClick:U}),a.jsx(Rn,{label:n("metadata.vae"),value:((ne=t.vae)==null?void 0:ne.model_name)??"Default",onClick:G}),t.steps&&a.jsx(Rn,{label:n("metadata.steps"),value:t.steps,onClick:q}),t.cfg_scale!==void 0&&t.cfg_scale!==null&&a.jsx(Rn,{label:n("metadata.cfgScale"),value:t.cfg_scale,onClick:Y}),t.cfg_rescale_multiplier!==void 0&&t.cfg_rescale_multiplier!==null&&a.jsx(Rn,{label:n("metadata.cfgRescaleMultiplier"),value:t.cfg_rescale_multiplier,onClick:Q}),t.strength&&a.jsx(Rn,{label:n("metadata.strength"),value:t.strength,onClick:V}),t.hrf_enabled&&a.jsx(Rn,{label:n("hrf.metadata.enabled"),value:t.hrf_enabled,onClick:se}),t.hrf_enabled&&t.hrf_strength&&a.jsx(Rn,{label:n("hrf.metadata.strength"),value:t.hrf_strength,onClick:ee}),t.hrf_enabled&&t.hrf_method&&a.jsx(Rn,{label:n("hrf.metadata.method"),value:t.hrf_method,onClick:le}),t.loras&&t.loras.map((z,oe)=>{if(TI(z.lora))return a.jsx(Rn,{label:"LoRA",value:`${z.lora.model_name} - ${z.weight}`,onClick:ae.bind(null,z)},oe)}),A.map((z,oe)=>{var X;return a.jsx(Rn,{label:"ControlNet",value:`${(X=z.control_model)==null?void 0:X.model_name} - ${z.control_weight}`,onClick:ce.bind(null,z)},oe)}),L.map((z,oe)=>{var X;return a.jsx(Rn,{label:"IP Adapter",value:`${(X=z.ip_adapter_model)==null?void 0:X.model_name} - ${z.weight}`,onClick:J.bind(null,z)},oe)}),K.map((z,oe)=>{var X;return a.jsx(Rn,{label:"T2I Adapter",value:`${(X=z.t2i_adapter_model)==null?void 0:X.model_name} - ${z.weight}`,onClick:re.bind(null,z)},oe)})]})},gme=i.memo(hme),vme=e=>{const t=H(s=>s.config.workflowFetchDebounce??300),[n]=kc(e!=null&&e.has_workflow?e.image_name:null,t),{data:r,isLoading:o}=Z9(n??Br);return{workflow:r,isLoading:o}},bme=({image:e})=>{const{t}=W(),{workflow:n}=vme(e);return n?a.jsx(pl,{data:n,label:t("metadata.workflow")}):a.jsx(Tn,{label:t("nodes.noWorkflow")})},xme=i.memo(bme),yme=({image:e})=>{const{t}=W(),{metadata:n}=_2(e.image_name);return a.jsxs($,{layerStyle:"first",sx:{padding:4,gap:1,flexDirection:"column",width:"full",height:"full",borderRadius:"base",position:"absolute",overflow:"hidden"},children:[a.jsxs($,{gap:2,children:[a.jsxs(be,{fontWeight:"semibold",children:[t("common.file"),":"]}),a.jsxs(ig,{href:e.image_url,isExternal:!0,maxW:"calc(100% - 3rem)",children:[e.image_name,a.jsx(T8,{mx:"2px"})]})]}),a.jsxs(ci,{variant:"line",sx:{display:"flex",flexDir:"column",w:"full",h:"full"},isLazy:!0,children:[a.jsxs(ui,{children:[a.jsx(mr,{children:t("metadata.recallParameters")}),a.jsx(mr,{children:t("metadata.metadata")}),a.jsx(mr,{children:t("metadata.imageDetails")}),a.jsx(mr,{children:t("metadata.workflow")})]}),a.jsxs(eu,{children:[a.jsx($r,{children:n?a.jsx(Sl,{children:a.jsx(gme,{metadata:n})}):a.jsx(Tn,{label:t("metadata.noRecallParameters")})}),a.jsx($r,{children:n?a.jsx(pl,{data:n,label:t("metadata.metadata")}):a.jsx(Tn,{label:t("metadata.noMetaData")})}),a.jsx($r,{children:e?a.jsx(pl,{data:e,label:t("metadata.imageDetails")}):a.jsx(Tn,{label:t("metadata.noImageDetails")})}),a.jsx($r,{children:a.jsx(xme,{image:e})})]})]})]})},Cme=i.memo(yme),I1={color:"base.100",pointerEvents:"auto"},wme=()=>{const{t:e}=W(),{handlePrevImage:t,handleNextImage:n,isOnFirstImage:r,isOnLastImage:o,handleLoadMoreImages:s,areMoreImagesAvailable:l,isFetching:c}=G8();return a.jsxs(Ie,{sx:{position:"relative",height:"100%",width:"100%"},children:[a.jsx(Ie,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineStart:0},children:!r&&a.jsx(rs,{"aria-label":e("accessibility.previousImage"),icon:a.jsx(cte,{size:64}),variant:"unstyled",onClick:t,boxSize:16,sx:I1})}),a.jsxs(Ie,{sx:{pos:"absolute",top:"50%",transform:"translate(0, -50%)",insetInlineEnd:0},children:[!o&&a.jsx(rs,{"aria-label":e("accessibility.nextImage"),icon:a.jsx(ute,{size:64}),variant:"unstyled",onClick:n,boxSize:16,sx:I1}),o&&l&&!c&&a.jsx(rs,{"aria-label":e("accessibility.loadMore"),icon:a.jsx(ite,{size:64}),variant:"unstyled",onClick:s,boxSize:16,sx:I1}),o&&l&&c&&a.jsx($,{sx:{w:16,h:16,alignItems:"center",justifyContent:"center"},children:a.jsx(va,{opacity:.5,size:"xl"})})]})]})},FO=i.memo(wme),Sme=fe([pe,J9],({ui:e,system:t},n)=>{const{shouldShowImageDetails:r,shouldHidePreview:o,shouldShowProgressInViewer:s}=e,{denoiseProgress:l}=t;return{shouldShowImageDetails:r,shouldHidePreview:o,imageName:n==null?void 0:n.image_name,hasDenoiseProgress:!!l,shouldShowProgressInViewer:s}}),kme=()=>{const{shouldShowImageDetails:e,imageName:t,hasDenoiseProgress:n,shouldShowProgressInViewer:r}=H(Sme),{handlePrevImage:o,handleNextImage:s,isOnLastImage:l,handleLoadMoreImages:c,areMoreImagesAvailable:d,isFetching:f}=G8();tt("left",()=>{o()},[o]),tt("right",()=>{if(l&&d&&!f){c();return}l||s()},[l,d,c,f,s]);const{currentData:m}=jo(t??Br),h=i.useMemo(()=>{if(m)return{id:"current-image",payloadType:"IMAGE_DTO",payload:{imageDTO:m}}},[m]),g=i.useMemo(()=>({id:"current-image",actionType:"SET_CURRENT_IMAGE"}),[]),[b,y]=i.useState(!1),x=i.useRef(0),{t:w}=W(),S=i.useCallback(()=>{y(!0),window.clearTimeout(x.current)},[]),j=i.useCallback(()=>{x.current=window.setTimeout(()=>{y(!1)},500)},[]);return a.jsxs($,{onMouseOver:S,onMouseOut:j,sx:{width:"full",height:"full",alignItems:"center",justifyContent:"center",position:"relative"},children:[n&&r?a.jsx(fme,{}):a.jsx(fl,{imageDTO:m,droppableData:g,draggableData:h,isUploadDisabled:!0,fitContainer:!0,useThumbailFallback:!0,dropLabel:w("gallery.setCurrentImage"),noContentFallback:a.jsx(Tn,{icon:si,label:w("gallery.noImageSelected")}),dataTestId:"image-preview"}),e&&m&&a.jsx(Ie,{sx:{position:"absolute",top:"0",width:"full",height:"full",borderRadius:"base"},children:a.jsx(Cme,{image:m})}),a.jsx(hr,{children:!e&&m&&b&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:"0",width:"100%",height:"100%",pointerEvents:"none"},children:a.jsx(FO,{})},"nextPrevButtons")})]})},jme=i.memo(kme),_me=()=>a.jsxs($,{sx:{position:"relative",flexDirection:"column",height:"100%",width:"100%",rowGap:4,alignItems:"center",justifyContent:"center"},children:[a.jsx(ume,{}),a.jsx(jme,{})]}),Ime=i.memo(_me),Pme=()=>a.jsx(Ie,{layerStyle:"first",sx:{position:"relative",width:"100%",height:"100%",p:2,borderRadius:"base"},children:a.jsx($,{sx:{width:"100%",height:"100%"},children:a.jsx(Ime,{})})}),zO=i.memo(Pme),Eme=()=>{const e=i.useRef(null),t=i.useCallback(()=>{e.current&&e.current.setLayout([50,50])},[]),n=R2();return a.jsx(Ie,{sx:{w:"full",h:"full"},children:a.jsxs(o0,{ref:e,autoSaveId:"imageTab.content",direction:"horizontal",style:{height:"100%",width:"100%"},storage:n,units:"percentages",children:[a.jsx(rl,{id:"imageTab.content.initImage",order:0,defaultSize:50,minSize:25,style:{position:"relative"},children:a.jsx(nme,{})}),a.jsx(Bh,{onDoubleClick:t}),a.jsx(rl,{id:"imageTab.content.selectedImage",order:1,defaultSize:50,minSize:25,children:a.jsx(zO,{})})]})})},Mme=i.memo(Eme);var Ome=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var r,o,s;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(o=r;o--!==0;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(s=Object.keys(t),r=s.length,r!==Object.keys(n).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(n,s[o]))return!1;for(o=r;o--!==0;){var l=s[o];if(!e(t[l],n[l]))return!1}return!0}return t!==t&&n!==n};const M_=Bd(Ome);function ax(e){return e===null||typeof e!="object"?{}:Object.keys(e).reduce((t,n)=>{const r=e[n];return r!=null&&r!==!1&&(t[n]=r),t},{})}var Dme=Object.defineProperty,O_=Object.getOwnPropertySymbols,Rme=Object.prototype.hasOwnProperty,Ame=Object.prototype.propertyIsEnumerable,D_=(e,t,n)=>t in e?Dme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Tme=(e,t)=>{for(var n in t||(t={}))Rme.call(t,n)&&D_(e,n,t[n]);if(O_)for(var n of O_(t))Ame.call(t,n)&&D_(e,n,t[n]);return e};function BO(e,t){if(t===null||typeof t!="object")return{};const n=Tme({},t);return Object.keys(t).forEach(r=>{r.includes(`${String(e)}.`)&&delete n[r]}),n}const Nme="__MANTINE_FORM_INDEX__";function R_(e,t){return t?typeof t=="boolean"?t:Array.isArray(t)?t.includes(e.replace(/[.][0-9]/g,`.${Nme}`)):!1:!1}function A_(e,t,n){typeof n.value=="object"&&(n.value=ic(n.value)),!n.enumerable||n.get||n.set||!n.configurable||!n.writable||t==="__proto__"?Object.defineProperty(e,t,n):e[t]=n.value}function ic(e){if(typeof e!="object")return e;var t=0,n,r,o,s=Object.prototype.toString.call(e);if(s==="[object Object]"?o=Object.create(e.__proto__||null):s==="[object Array]"?o=Array(e.length):s==="[object Set]"?(o=new Set,e.forEach(function(l){o.add(ic(l))})):s==="[object Map]"?(o=new Map,e.forEach(function(l,c){o.set(ic(c),ic(l))})):s==="[object Date]"?o=new Date(+e):s==="[object RegExp]"?o=new RegExp(e.source,e.flags):s==="[object DataView]"?o=new e.constructor(ic(e.buffer)):s==="[object ArrayBuffer]"?o=e.slice(0):s.slice(-6)==="Array]"&&(o=new e.constructor(e)),o){for(r=Object.getOwnPropertySymbols(e);t0,errors:t}}function lx(e,t,n="",r={}){return typeof e!="object"||e===null?r:Object.keys(e).reduce((o,s)=>{const l=e[s],c=`${n===""?"":`${n}.`}${s}`,d=ea(c,t);let f=!1;return typeof l=="function"&&(o[c]=l(d,t,c)),typeof l=="object"&&Array.isArray(d)&&(f=!0,d.forEach((m,h)=>lx(l,t,`${c}.${h}`,o))),typeof l=="object"&&typeof d=="object"&&d!==null&&(f||lx(l,t,c,o)),o},r)}function ix(e,t){return T_(typeof e=="function"?e(t):lx(e,t))}function tm(e,t,n){if(typeof e!="string")return{hasError:!1,error:null};const r=ix(t,n),o=Object.keys(r.errors).find(s=>e.split(".").every((l,c)=>l===s.split(".")[c]));return{hasError:!!o,error:o?r.errors[o]:null}}function $me(e,{from:t,to:n},r){const o=ea(e,r);if(!Array.isArray(o))return r;const s=[...o],l=o[t];return s.splice(t,1),s.splice(n,0,l),d0(e,s,r)}var Lme=Object.defineProperty,N_=Object.getOwnPropertySymbols,Fme=Object.prototype.hasOwnProperty,zme=Object.prototype.propertyIsEnumerable,$_=(e,t,n)=>t in e?Lme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Bme=(e,t)=>{for(var n in t||(t={}))Fme.call(t,n)&&$_(e,n,t[n]);if(N_)for(var n of N_(t))zme.call(t,n)&&$_(e,n,t[n]);return e};function Hme(e,{from:t,to:n},r){const o=`${e}.${t}`,s=`${e}.${n}`,l=Bme({},r);return Object.keys(r).every(c=>{let d,f;if(c.startsWith(o)&&(d=c,f=c.replace(o,s)),c.startsWith(s)&&(d=c.replace(s,o),f=c),d&&f){const m=l[d],h=l[f];return h===void 0?delete l[d]:l[d]=h,m===void 0?delete l[f]:l[f]=m,!1}return!0}),l}function Wme(e,t,n){const r=ea(e,n);return Array.isArray(r)?d0(e,r.filter((o,s)=>s!==t),n):n}var Vme=Object.defineProperty,L_=Object.getOwnPropertySymbols,Ume=Object.prototype.hasOwnProperty,Gme=Object.prototype.propertyIsEnumerable,F_=(e,t,n)=>t in e?Vme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Kme=(e,t)=>{for(var n in t||(t={}))Ume.call(t,n)&&F_(e,n,t[n]);if(L_)for(var n of L_(t))Gme.call(t,n)&&F_(e,n,t[n]);return e};function z_(e,t){const n=e.substring(t.length+1).split(".")[0];return parseInt(n,10)}function B_(e,t,n,r){if(t===void 0)return n;const o=`${String(e)}`;let s=n;r===-1&&(s=BO(`${o}.${t}`,s));const l=Kme({},s),c=new Set;return Object.entries(s).filter(([d])=>{if(!d.startsWith(`${o}.`))return!1;const f=z_(d,o);return Number.isNaN(f)?!1:f>=t}).forEach(([d,f])=>{const m=z_(d,o),h=d.replace(`${o}.${m}`,`${o}.${m+r}`);l[h]=f,c.add(h),c.has(d)||delete l[d]}),l}function qme(e,t,n,r){const o=ea(e,r);if(!Array.isArray(o))return r;const s=[...o];return s.splice(typeof n=="number"?n:s.length,0,t),d0(e,s,r)}function H_(e,t){const n=Object.keys(e);if(typeof t=="string"){const r=n.filter(o=>o.startsWith(`${t}.`));return e[t]||r.some(o=>e[o])||!1}return n.some(r=>e[r])}function Xme(e){return t=>{if(!t)e(t);else if(typeof t=="function")e(t);else if(typeof t=="object"&&"nativeEvent"in t){const{currentTarget:n}=t;n instanceof HTMLInputElement?n.type==="checkbox"?e(n.checked):e(n.value):(n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)&&e(n.value)}else e(t)}}var Qme=Object.defineProperty,Yme=Object.defineProperties,Zme=Object.getOwnPropertyDescriptors,W_=Object.getOwnPropertySymbols,Jme=Object.prototype.hasOwnProperty,ehe=Object.prototype.propertyIsEnumerable,V_=(e,t,n)=>t in e?Qme(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ha=(e,t)=>{for(var n in t||(t={}))Jme.call(t,n)&&V_(e,n,t[n]);if(W_)for(var n of W_(t))ehe.call(t,n)&&V_(e,n,t[n]);return e},P1=(e,t)=>Yme(e,Zme(t));function vi({initialValues:e={},initialErrors:t={},initialDirty:n={},initialTouched:r={},clearInputErrorOnChange:o=!0,validateInputOnChange:s=!1,validateInputOnBlur:l=!1,transformValues:c=f=>f,validate:d}={}){const[f,m]=i.useState(r),[h,g]=i.useState(n),[b,y]=i.useState(e),[x,w]=i.useState(ax(t)),S=i.useRef(e),j=A=>{S.current=A},_=i.useCallback(()=>m({}),[]),I=A=>{const L=A?Ha(Ha({},b),A):b;j(L),g({})},E=i.useCallback(A=>w(L=>ax(typeof A=="function"?A(L):A)),[]),M=i.useCallback(()=>w({}),[]),D=i.useCallback(()=>{y(e),M(),j(e),g({}),_()},[]),R=i.useCallback((A,L)=>E(K=>P1(Ha({},K),{[A]:L})),[]),N=i.useCallback(A=>E(L=>{if(typeof A!="string")return L;const K=Ha({},L);return delete K[A],K}),[]),O=i.useCallback(A=>g(L=>{if(typeof A!="string")return L;const K=BO(A,L);return delete K[A],K}),[]),T=i.useCallback((A,L)=>{const K=R_(A,s);O(A),m(ne=>P1(Ha({},ne),{[A]:!0})),y(ne=>{const z=d0(A,L,ne);if(K){const oe=tm(A,d,z);oe.hasError?R(A,oe.error):N(A)}return z}),!K&&o&&R(A,null)},[]),U=i.useCallback(A=>{y(L=>{const K=typeof A=="function"?A(L):A;return Ha(Ha({},L),K)}),o&&M()},[]),G=i.useCallback((A,L)=>{O(A),y(K=>$me(A,L,K)),w(K=>Hme(A,L,K))},[]),q=i.useCallback((A,L)=>{O(A),y(K=>Wme(A,L,K)),w(K=>B_(A,L,K,-1))},[]),Y=i.useCallback((A,L,K)=>{O(A),y(ne=>qme(A,L,K,ne)),w(ne=>B_(A,K,ne,1))},[]),Q=i.useCallback(()=>{const A=ix(d,b);return w(A.errors),A},[b,d]),V=i.useCallback(A=>{const L=tm(A,d,b);return L.hasError?R(A,L.error):N(A),L},[b,d]),se=(A,{type:L="input",withError:K=!0,withFocus:ne=!0}={})=>{const oe={onChange:Xme(X=>T(A,X))};return K&&(oe.error=x[A]),L==="checkbox"?oe.checked=ea(A,b):oe.value=ea(A,b),ne&&(oe.onFocus=()=>m(X=>P1(Ha({},X),{[A]:!0})),oe.onBlur=()=>{if(R_(A,l)){const X=tm(A,d,b);X.hasError?R(A,X.error):N(A)}}),oe},ee=(A,L)=>K=>{K==null||K.preventDefault();const ne=Q();ne.hasErrors?L==null||L(ne.errors,b,K):A==null||A(c(b),K)},le=A=>c(A||b),ae=i.useCallback(A=>{A.preventDefault(),D()},[]),ce=A=>{if(A){const K=ea(A,h);if(typeof K=="boolean")return K;const ne=ea(A,b),z=ea(A,S.current);return!M_(ne,z)}return Object.keys(h).length>0?H_(h):!M_(b,S.current)},J=i.useCallback(A=>H_(f,A),[f]),re=i.useCallback(A=>A?!tm(A,d,b).hasError:!ix(d,b).hasErrors,[b,d]);return{values:b,errors:x,setValues:U,setErrors:E,setFieldValue:T,setFieldError:R,clearFieldError:N,clearErrors:M,reset:D,validate:Q,validateField:V,reorderListItem:G,removeListItem:q,insertListItem:Y,getInputProps:se,onSubmit:ee,onReset:ae,isDirty:ce,isTouched:J,setTouched:m,setDirty:g,resetTouched:_,resetDirty:I,isValid:re,getTransformedValues:le}}function En(e){const{...t}=e,{base50:n,base100:r,base200:o,base300:s,base800:l,base700:c,base900:d,accent500:f,accent300:m}=hf(),{colorMode:h}=ya(),g=i.useCallback(()=>({input:{color:Te(d,r)(h),backgroundColor:Te(n,d)(h),borderColor:Te(o,l)(h),borderWidth:2,outline:"none",":focus":{borderColor:Te(m,f)(h)}},label:{color:Te(c,s)(h),fontWeight:"normal",marginBottom:4}}),[m,f,r,o,s,n,c,l,d,h]);return a.jsx(_M,{styles:g,...t})}const the=[{value:"sd-1",label:xn["sd-1"]},{value:"sd-2",label:xn["sd-2"]},{value:"sdxl",label:xn.sdxl},{value:"sdxl-refiner",label:xn["sdxl-refiner"]}];function kf(e){const{...t}=e,{t:n}=W();return a.jsx(yn,{label:n("modelManager.baseModel"),data:the,...t})}function WO(e){const{data:t}=s3(),{...n}=e;return a.jsx(yn,{label:"Config File",placeholder:"Select A Config File",data:t||[],...n})}const nhe=[{value:"normal",label:"Normal"},{value:"inpaint",label:"Inpaint"},{value:"depth",label:"Depth"}];function f0(e){const{...t}=e,{t:n}=W();return a.jsx(yn,{label:n("modelManager.variant"),data:nhe,...t})}function Wh(e,t=!0){let n;t?n=new RegExp("[^\\\\/]+(?=\\.)"):n=new RegExp("[^\\\\/]+(?=[\\\\/]?$)");const r=e.match(n);return r?r[0]:""}function VO(e){const{t}=W(),n=te(),{model_path:r}=e,o=vi({initialValues:{model_name:r?Wh(r):"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"checkpoint",error:void 0,vae:"",variant:"normal",config:"configs\\stable-diffusion\\v1-inference.yaml"}}),[s]=a3(),[l,c]=i.useState(!1),d=h=>{s({body:h}).unwrap().then(g=>{n(lt(rn({title:t("modelManager.modelAdded",{modelName:h.model_name}),status:"success"}))),o.reset(),r&&n(Ud(null))}).catch(g=>{g&&n(lt(rn({title:t("toast.modelAddFailed"),status:"error"})))})},f=i.useCallback(h=>{if(o.values.model_name===""){const g=Wh(h.currentTarget.value);g&&o.setFieldValue("model_name",g)}},[o]),m=i.useCallback(()=>c(h=>!h),[]);return a.jsx("form",{onSubmit:o.onSubmit(h=>d(h)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",gap:2,children:[a.jsx(En,{label:t("modelManager.model"),required:!0,...o.getInputProps("model_name")}),a.jsx(kf,{label:t("modelManager.baseModel"),...o.getInputProps("base_model")}),a.jsx(En,{label:t("modelManager.modelLocation"),required:!0,...o.getInputProps("path"),onBlur:f}),a.jsx(En,{label:t("modelManager.description"),...o.getInputProps("description")}),a.jsx(En,{label:t("modelManager.vaeLocation"),...o.getInputProps("vae")}),a.jsx(f0,{label:t("modelManager.variant"),...o.getInputProps("variant")}),a.jsxs($,{flexDirection:"column",width:"100%",gap:2,children:[l?a.jsx(En,{required:!0,label:t("modelManager.customConfigFileLocation"),...o.getInputProps("config")}):a.jsx(WO,{required:!0,width:"100%",...o.getInputProps("config")}),a.jsx(yr,{isChecked:l,onChange:m,label:t("modelManager.useCustomConfig")}),a.jsx(Xe,{mt:2,type:"submit",children:t("modelManager.addModel")})]})]})})}function UO(e){const{t}=W(),n=te(),{model_path:r}=e,[o]=a3(),s=vi({initialValues:{model_name:r?Wh(r,!1):"",base_model:"sd-1",model_type:"main",path:r||"",description:"",model_format:"diffusers",error:void 0,vae:"",variant:"normal"}}),l=d=>{o({body:d}).unwrap().then(f=>{n(lt(rn({title:t("modelManager.modelAdded",{modelName:d.model_name}),status:"success"}))),s.reset(),r&&n(Ud(null))}).catch(f=>{f&&n(lt(rn({title:t("toast.modelAddFailed"),status:"error"})))})},c=i.useCallback(d=>{if(s.values.model_name===""){const f=Wh(d.currentTarget.value,!1);f&&s.setFieldValue("model_name",f)}},[s]);return a.jsx("form",{onSubmit:s.onSubmit(d=>l(d)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",gap:2,children:[a.jsx(En,{required:!0,label:t("modelManager.model"),...s.getInputProps("model_name")}),a.jsx(kf,{label:t("modelManager.baseModel"),...s.getInputProps("base_model")}),a.jsx(En,{required:!0,label:t("modelManager.modelLocation"),placeholder:t("modelManager.modelLocationValidationMsg"),...s.getInputProps("path"),onBlur:c}),a.jsx(En,{label:t("modelManager.description"),...s.getInputProps("description")}),a.jsx(En,{label:t("modelManager.vaeLocation"),...s.getInputProps("vae")}),a.jsx(f0,{label:t("modelManager.variant"),...s.getInputProps("variant")}),a.jsx(Xe,{mt:2,type:"submit",children:t("modelManager.addModel")})]})})}function rhe(){const[e,t]=i.useState("diffusers"),{t:n}=W(),r=i.useCallback(s=>{s&&t(s)},[]),o=i.useMemo(()=>[{label:n("modelManager.diffusersModels"),value:"diffusers"},{label:n("modelManager.checkpointOrSafetensors"),value:"checkpoint"}],[n]);return a.jsxs($,{flexDirection:"column",gap:4,width:"100%",children:[a.jsx(yn,{label:n("modelManager.modelType"),value:e,data:o,onChange:r}),a.jsxs($,{sx:{p:4,borderRadius:4,bg:"base.300",_dark:{bg:"base.850"}},children:[e==="diffusers"&&a.jsx(UO,{}),e==="checkpoint"&&a.jsx(VO,{})]})]})}const ohe=[{label:"None",value:"none"},{label:"v_prediction",value:"v_prediction"},{label:"epsilon",value:"epsilon"},{label:"sample",value:"sample"}];function she(){const e=te(),{t}=W(),[n,{isLoading:r}]=l3(),o=vi({initialValues:{location:"",prediction_type:void 0}}),s=l=>{const c={location:l.location,prediction_type:l.prediction_type==="none"?void 0:l.prediction_type};n({body:c}).unwrap().then(d=>{e(lt(rn({title:t("toast.modelAddedSimple"),status:"success"}))),o.reset()}).catch(d=>{d&&e(lt(rn({title:`${d.data.detail} `,status:"error"})))})};return a.jsx("form",{onSubmit:o.onSubmit(l=>s(l)),style:{width:"100%"},children:a.jsxs($,{flexDirection:"column",width:"100%",gap:4,children:[a.jsx(En,{label:t("modelManager.modelLocation"),placeholder:t("modelManager.simpleModelDesc"),w:"100%",...o.getInputProps("location")}),a.jsx(yn,{label:t("modelManager.predictionType"),data:ohe,defaultValue:"none",...o.getInputProps("prediction_type")}),a.jsx(Xe,{type:"submit",isLoading:r,children:t("modelManager.addModel")})]})})}function ahe(){const{t:e}=W(),[t,n]=i.useState("simple"),r=i.useCallback(()=>n("simple"),[]),o=i.useCallback(()=>n("advanced"),[]);return a.jsxs($,{flexDirection:"column",width:"100%",overflow:"scroll",maxHeight:window.innerHeight-250,gap:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{size:"sm",isChecked:t=="simple",onClick:r,children:e("common.simple")}),a.jsx(Xe,{size:"sm",isChecked:t=="advanced",onClick:o,children:e("common.advanced")})]}),a.jsxs($,{sx:{p:4,borderRadius:4,background:"base.200",_dark:{background:"base.800"}},children:[t==="simple"&&a.jsx(she,{}),t==="advanced"&&a.jsx(rhe,{})]})]})}function lhe(e){const{...t}=e;return a.jsx(bE,{w:"100%",...t,children:e.children})}function ihe(){const e=H(w=>w.modelmanager.searchFolder),[t,n]=i.useState(""),{data:r}=as(Bl),{foundModels:o,alreadyInstalled:s,filteredModels:l}=i3({search_path:e||""},{selectFromResult:({data:w})=>{const S=gL(r==null?void 0:r.entities),j=Hr(S,"path"),_=dL(w,j),I=CL(w,j);return{foundModels:w,alreadyInstalled:U_(I,t),filteredModels:U_(_,t)}}}),[c,{isLoading:d}]=l3(),f=te(),{t:m}=W(),h=i.useCallback(w=>{const S=w.currentTarget.id.split("\\").splice(-1)[0];c({body:{location:w.currentTarget.id}}).unwrap().then(j=>{f(lt(rn({title:`Added Model: ${S}`,status:"success"})))}).catch(j=>{j&&f(lt(rn({title:m("toast.modelAddFailed"),status:"error"})))})},[f,c,m]),g=i.useCallback(w=>{n(w.target.value)},[]),b=i.useCallback(w=>f(Ud(w)),[f]),y=({models:w,showActions:S=!0})=>w.map(j=>a.jsxs($,{sx:{p:4,gap:4,alignItems:"center",borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{w:"100%",sx:{flexDirection:"column",minW:"25%"},children:[a.jsx(be,{sx:{fontWeight:600},children:j.split("\\").slice(-1)[0]}),a.jsx(be,{sx:{fontSize:"sm",color:"base.600",_dark:{color:"base.400"}},children:j})]}),S?a.jsxs($,{gap:2,children:[a.jsx(Xe,{id:j,onClick:h,isLoading:d,children:m("modelManager.quickAdd")}),a.jsx(Xe,{onClick:b.bind(null,j),isLoading:d,children:m("modelManager.advanced")})]}):a.jsx(be,{sx:{fontWeight:600,p:2,borderRadius:4,color:"accent.50",bg:"accent.400",_dark:{color:"accent.100",bg:"accent.600"}},children:m("common.installed")})]},j));return(()=>e?!o||o.length===0?a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",height:96,userSelect:"none",bg:"base.200",_dark:{bg:"base.900"}},children:a.jsx(be,{variant:"subtext",children:m("modelManager.noModels")})}):a.jsxs($,{sx:{flexDirection:"column",gap:2,w:"100%",minW:"50%"},children:[a.jsx(yo,{onChange:g,label:m("modelManager.search"),labelPos:"side"}),a.jsxs($,{p:2,gap:2,children:[a.jsxs(be,{sx:{fontWeight:600},children:[m("modelManager.modelsFound"),": ",o.length]}),a.jsxs(be,{sx:{fontWeight:600,color:"accent.500",_dark:{color:"accent.200"}},children:[m("common.notInstalled"),": ",l.length]})]}),a.jsx(lhe,{offsetScrollbars:!0,children:a.jsxs($,{gap:2,flexDirection:"column",children:[y({models:l}),y({models:s,showActions:!1})]})})]}):null)()}const U_=(e,t)=>{const n=[];return qn(e,r=>{if(!r)return null;r.includes(t)&&n.push(r)}),n};function che(){const e=H(m=>m.modelmanager.advancedAddScanModel),{t}=W(),n=i.useMemo(()=>[{label:t("modelManager.diffusersModels"),value:"diffusers"},{label:t("modelManager.checkpointOrSafetensors"),value:"checkpoint"}],[t]),[r,o]=i.useState("diffusers"),[s,l]=i.useState(!0);i.useEffect(()=>{e&&[".ckpt",".safetensors",".pth",".pt"].some(m=>e.endsWith(m))?o("checkpoint"):o("diffusers")},[e,o,s]);const c=te(),d=i.useCallback(()=>c(Ud(null)),[c]),f=i.useCallback(m=>{m&&(o(m),l(m==="checkpoint"))},[]);return e?a.jsxs(Ie,{as:Mn.div,initial:{x:-100,opacity:0},animate:{x:0,opacity:1,transition:{duration:.2}},sx:{display:"flex",flexDirection:"column",minWidth:"40%",maxHeight:window.innerHeight-300,overflow:"scroll",p:4,gap:4,borderRadius:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{justifyContent:"space-between",alignItems:"center",children:[a.jsx(be,{size:"xl",fontWeight:600,children:s||r==="checkpoint"?"Add Checkpoint Model":"Add Diffusers Model"}),a.jsx(Fe,{icon:a.jsx(Nc,{}),"aria-label":t("modelManager.closeAdvanced"),onClick:d,size:"sm"})]}),a.jsx(yn,{label:t("modelManager.modelType"),value:r,data:n,onChange:f}),s?a.jsx(VO,{model_path:e},e):a.jsx(UO,{model_path:e},e)]}):null}function uhe(){const e=te(),{t}=W(),n=H(d=>d.modelmanager.searchFolder),{refetch:r}=i3({search_path:n||""}),o=vi({initialValues:{folder:""}}),s=i.useCallback(d=>{e(uS(d.folder))},[e]),l=i.useCallback(()=>{r()},[r]),c=i.useCallback(()=>{e(uS(null)),e(Ud(null))},[e]);return a.jsx("form",{onSubmit:o.onSubmit(d=>s(d)),style:{width:"100%"},children:a.jsxs($,{sx:{w:"100%",gap:2,borderRadius:4,alignItems:"center"},children:[a.jsxs($,{w:"100%",alignItems:"center",gap:4,minH:12,children:[a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",minW:"max-content",_dark:{color:"base.300"}},children:t("common.folder")}),n?a.jsx($,{sx:{w:"100%",p:2,px:4,bg:"base.300",borderRadius:4,fontSize:"sm",fontWeight:"bold",_dark:{bg:"base.700"}},children:n}):a.jsx(yo,{w:"100%",size:"md",...o.getInputProps("folder")})]}),a.jsxs($,{gap:2,children:[n?a.jsx(Fe,{"aria-label":t("modelManager.scanAgain"),tooltip:t("modelManager.scanAgain"),icon:a.jsx(XM,{}),onClick:l,fontSize:18,size:"sm"}):a.jsx(Fe,{"aria-label":t("modelManager.findModels"),tooltip:t("modelManager.findModels"),icon:a.jsx(Ute,{}),fontSize:18,size:"sm",type:"submit"}),a.jsx(Fe,{"aria-label":t("modelManager.clearCheckpointFolder"),tooltip:t("modelManager.clearCheckpointFolder"),icon:a.jsx(ao,{}),size:"sm",onClick:c,isDisabled:!n,colorScheme:"red"})]})]})})}const dhe=i.memo(uhe);function fhe(){return a.jsxs($,{flexDirection:"column",w:"100%",gap:4,children:[a.jsx(dhe,{}),a.jsxs($,{gap:4,children:[a.jsx($,{sx:{maxHeight:window.innerHeight-300,overflow:"scroll",gap:4,w:"100%"},children:a.jsx(ihe,{})}),a.jsx(che,{})]})]})}function phe(){const[e,t]=i.useState("add"),{t:n}=W(),r=i.useCallback(()=>t("add"),[]),o=i.useCallback(()=>t("scan"),[]);return a.jsxs($,{flexDirection:"column",gap:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{onClick:r,isChecked:e=="add",size:"sm",width:"100%",children:n("modelManager.addModel")}),a.jsx(Xe,{onClick:o,isChecked:e=="scan",size:"sm",width:"100%",children:n("modelManager.scanForModels")})]}),e=="add"&&a.jsx(ahe,{}),e=="scan"&&a.jsx(fhe,{})]})}const mhe=[{label:"Stable Diffusion 1",value:"sd-1"},{label:"Stable Diffusion 2",value:"sd-2"}];function hhe(){var K,ne;const{t:e}=W(),t=te(),{data:n}=as(Bl),[r,{isLoading:o}]=eN(),[s,l]=i.useState("sd-1"),c=wS(n==null?void 0:n.entities,(z,oe)=>(z==null?void 0:z.model_format)==="diffusers"&&(z==null?void 0:z.base_model)==="sd-1"),d=wS(n==null?void 0:n.entities,(z,oe)=>(z==null?void 0:z.model_format)==="diffusers"&&(z==null?void 0:z.base_model)==="sd-2"),f=i.useMemo(()=>({"sd-1":c,"sd-2":d}),[c,d]),[m,h]=i.useState(((K=Object.keys(f[s]))==null?void 0:K[0])??null),[g,b]=i.useState(((ne=Object.keys(f[s]))==null?void 0:ne[1])??null),[y,x]=i.useState(null),[w,S]=i.useState(""),[j,_]=i.useState(.5),[I,E]=i.useState("weighted_sum"),[M,D]=i.useState("root"),[R,N]=i.useState(""),[O,T]=i.useState(!1),U=Object.keys(f[s]).filter(z=>z!==g&&z!==y),G=Object.keys(f[s]).filter(z=>z!==m&&z!==y),q=Object.keys(f[s]).filter(z=>z!==m&&z!==g),Y=i.useCallback(z=>{l(z),h(null),b(null)},[]),Q=i.useCallback(z=>{h(z)},[]),V=i.useCallback(z=>{b(z)},[]),se=i.useCallback(z=>{z?(x(z),E("weighted_sum")):(x(null),E("add_difference"))},[]),ee=i.useCallback(z=>S(z.target.value),[]),le=i.useCallback(z=>_(z),[]),ae=i.useCallback(()=>_(.5),[]),ce=i.useCallback(z=>E(z),[]),J=i.useCallback(z=>D(z),[]),re=i.useCallback(z=>N(z.target.value),[]),A=i.useCallback(z=>T(z.target.checked),[]),L=i.useCallback(()=>{const z=[];let oe=[m,g,y];oe=oe.filter(Z=>Z!==null),oe.forEach(Z=>{var ve;const me=(ve=Z==null?void 0:Z.split("/"))==null?void 0:ve[2];me&&z.push(me)});const X={model_names:z,merged_model_name:w!==""?w:z.join("-"),alpha:j,interp:I,force:O,merge_dest_directory:M==="root"?void 0:R};r({base_model:s,body:{body:X}}).unwrap().then(Z=>{t(lt(rn({title:e("modelManager.modelsMerged"),status:"success"})))}).catch(Z=>{Z&&t(lt(rn({title:e("modelManager.modelsMergeFailed"),status:"error"})))})},[s,t,r,w,j,R,O,I,M,m,y,g,e]);return a.jsxs($,{flexDirection:"column",rowGap:4,children:[a.jsxs($,{sx:{flexDirection:"column",rowGap:1},children:[a.jsx(be,{children:e("modelManager.modelMergeHeaderHelp1")}),a.jsx(be,{fontSize:"sm",variant:"subtext",children:e("modelManager.modelMergeHeaderHelp2")})]}),a.jsxs($,{columnGap:4,children:[a.jsx(yn,{label:e("modelManager.modelType"),w:"100%",data:mhe,value:s,onChange:Y}),a.jsx(sn,{label:e("modelManager.modelOne"),w:"100%",value:m,placeholder:e("modelManager.selectModel"),data:U,onChange:Q}),a.jsx(sn,{label:e("modelManager.modelTwo"),w:"100%",placeholder:e("modelManager.selectModel"),value:g,data:G,onChange:V}),a.jsx(sn,{label:e("modelManager.modelThree"),data:q,w:"100%",placeholder:e("modelManager.selectModel"),clearable:!0,onChange:se})]}),a.jsx(yo,{label:e("modelManager.mergedModelName"),value:w,onChange:ee}),a.jsxs($,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(nt,{label:e("modelManager.alpha"),min:.01,max:.99,step:.01,value:j,onChange:le,withInput:!0,withReset:!0,handleReset:ae,withSliderMarks:!0}),a.jsx(be,{variant:"subtext",fontSize:"sm",children:e("modelManager.modelMergeAlphaHelp")})]}),a.jsxs($,{sx:{padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(be,{fontWeight:500,fontSize:"sm",variant:"subtext",children:e("modelManager.interpolationType")}),a.jsx($m,{value:I,onChange:ce,children:a.jsx($,{columnGap:4,children:y===null?a.jsxs(a.Fragment,{children:[a.jsx(Ys,{value:"weighted_sum",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.weightedSum")})}),a.jsx(Ys,{value:"sigmoid",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.sigmoid")})}),a.jsx(Ys,{value:"inv_sigmoid",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.inverseSigmoid")})})]}):a.jsx(Ys,{value:"add_difference",children:a.jsx(Ut,{label:e("modelManager.modelMergeInterpAddDifferenceHelp"),children:a.jsx(be,{fontSize:"sm",children:e("modelManager.addDifference")})})})})})]}),a.jsxs($,{sx:{flexDirection:"column",padding:4,borderRadius:"base",gap:4,bg:"base.200",_dark:{bg:"base.900"}},children:[a.jsxs($,{columnGap:4,children:[a.jsx(be,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:e("modelManager.mergedModelSaveLocation")}),a.jsx($m,{value:M,onChange:J,children:a.jsxs($,{columnGap:4,children:[a.jsx(Ys,{value:"root",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.invokeAIFolder")})}),a.jsx(Ys,{value:"custom",children:a.jsx(be,{fontSize:"sm",children:e("modelManager.custom")})})]})})]}),M==="custom"&&a.jsx(yo,{label:e("modelManager.mergedModelCustomSaveLocation"),value:R,onChange:re})]}),a.jsx(yr,{label:e("modelManager.ignoreMismatch"),isChecked:O,onChange:A,fontWeight:"500"}),a.jsx(Xe,{onClick:L,isLoading:o,isDisabled:m===null||g===null,children:e("modelManager.merge")})]})}function ghe(e){const{model:t}=e,n=te(),{t:r}=W(),[o,{isLoading:s}]=tN(),[l,c]=i.useState("InvokeAIRoot"),[d,f]=i.useState("");i.useEffect(()=>{c("InvokeAIRoot")},[t]);const m=i.useCallback(()=>{c("InvokeAIRoot")},[]),h=i.useCallback(y=>{c(y)},[]),g=i.useCallback(y=>{f(y.target.value)},[]),b=i.useCallback(()=>{const y={base_model:t.base_model,model_name:t.model_name,convert_dest_directory:l==="Custom"?d:void 0};if(l==="Custom"&&d===""){n(lt(rn({title:r("modelManager.noCustomLocationProvided"),status:"error"})));return}n(lt(rn({title:`${r("modelManager.convertingModelBegin")}: ${t.model_name}`,status:"info"}))),o(y).unwrap().then(()=>{n(lt(rn({title:`${r("modelManager.modelConverted")}: ${t.model_name}`,status:"success"})))}).catch(()=>{n(lt(rn({title:`${r("modelManager.modelConversionFailed")}: ${t.model_name}`,status:"error"})))})},[o,d,n,t.base_model,t.model_name,l,r]);return a.jsxs(t0,{title:`${r("modelManager.convert")} ${t.model_name}`,acceptCallback:b,cancelCallback:m,acceptButtonText:`${r("modelManager.convert")}`,triggerComponent:a.jsxs(Xe,{size:"sm","aria-label":r("modelManager.convertToDiffusers"),className:" modal-close-btn",isLoading:s,children:["🧨 ",r("modelManager.convertToDiffusers")]}),motionPreset:"slideInBottom",children:[a.jsxs($,{flexDirection:"column",rowGap:4,children:[a.jsx(be,{children:r("modelManager.convertToDiffusersHelpText1")}),a.jsxs(cg,{children:[a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText2")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText3")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText4")}),a.jsx(ts,{children:r("modelManager.convertToDiffusersHelpText5")})]}),a.jsx(be,{children:r("modelManager.convertToDiffusersHelpText6")})]}),a.jsxs($,{flexDir:"column",gap:2,children:[a.jsxs($,{marginTop:4,flexDir:"column",gap:2,children:[a.jsx(be,{fontWeight:"600",children:r("modelManager.convertToDiffusersSaveLocation")}),a.jsx($m,{value:l,onChange:h,children:a.jsxs($,{gap:4,children:[a.jsx(Ys,{value:"InvokeAIRoot",children:a.jsx(Ut,{label:"Save converted model in the InvokeAI root folder",children:r("modelManager.invokeRoot")})}),a.jsx(Ys,{value:"Custom",children:a.jsx(Ut,{label:"Save converted model in a custom folder",children:r("modelManager.custom")})})]})})]}),l==="Custom"&&a.jsxs($,{flexDirection:"column",rowGap:2,children:[a.jsx(be,{fontWeight:"500",fontSize:"sm",variant:"subtext",children:r("modelManager.customSaveLocation")}),a.jsx(yo,{value:d,onChange:g,width:"full"})]})]})]})}function vhe(e){const{model:t}=e,[n,{isLoading:r}]=c3(),{data:o}=s3(),[s,l]=i.useState(!1);i.useEffect(()=>{o!=null&&o.includes(t.config)||l(!0)},[o,t.config]);const c=te(),{t:d}=W(),f=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"main",path:t.path?t.path:"",description:t.description?t.description:"",model_format:"checkpoint",vae:t.vae?t.vae:"",config:t.config?t.config:"",variant:t.variant},validate:{path:g=>g.trim().length===0?"Must provide a path":null}}),m=i.useCallback(()=>l(g=>!g),[]),h=i.useCallback(g=>{const b={base_model:t.base_model,model_name:t.model_name,body:g};n(b).unwrap().then(y=>{f.setValues(y),c(lt(rn({title:d("modelManager.modelUpdated"),status:"success"})))}).catch(y=>{f.reset(),c(lt(rn({title:d("modelManager.modelUpdateFailed"),status:"error"})))})},[f,c,t.base_model,t.model_name,d,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{justifyContent:"space-between",alignItems:"center",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",d("modelManager.model")]})]}),[""].includes(t.base_model)?a.jsx(Sa,{sx:{p:2,borderRadius:4,bg:"error.200",_dark:{bg:"error.400"}},children:d("modelManager.conversionNotSupported")}):a.jsx(ghe,{model:t})]}),a.jsx(On,{}),a.jsx($,{flexDirection:"column",maxHeight:window.innerHeight-270,overflowY:"scroll",children:a.jsx("form",{onSubmit:f.onSubmit(g=>h(g)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:d("modelManager.name"),...f.getInputProps("model_name")}),a.jsx(En,{label:d("modelManager.description"),...f.getInputProps("description")}),a.jsx(kf,{required:!0,...f.getInputProps("base_model")}),a.jsx(f0,{required:!0,...f.getInputProps("variant")}),a.jsx(En,{required:!0,label:d("modelManager.modelLocation"),...f.getInputProps("path")}),a.jsx(En,{label:d("modelManager.vaeLocation"),...f.getInputProps("vae")}),a.jsxs($,{flexDirection:"column",gap:2,children:[s?a.jsx(En,{required:!0,label:d("modelManager.config"),...f.getInputProps("config")}):a.jsx(WO,{required:!0,...f.getInputProps("config")}),a.jsx(yr,{isChecked:s,onChange:m,label:"Use Custom Config"})]}),a.jsx(Xe,{type:"submit",isLoading:r,children:d("modelManager.updateModel")})]})})})]})}function bhe(e){const{model:t}=e,[n,{isLoading:r}]=c3(),o=te(),{t:s}=W(),l=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"main",path:t.path?t.path:"",description:t.description?t.description:"",model_format:"diffusers",vae:t.vae?t.vae:"",variant:t.variant},validate:{path:d=>d.trim().length===0?"Must provide a path":null}}),c=i.useCallback(d=>{const f={base_model:t.base_model,model_name:t.model_name,body:d};n(f).unwrap().then(m=>{l.setValues(m),o(lt(rn({title:s("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{l.reset(),o(lt(rn({title:s("modelManager.modelUpdateFailed"),status:"error"})))})},[l,o,t.base_model,t.model_name,s,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",s("modelManager.model")]})]}),a.jsx(On,{}),a.jsx("form",{onSubmit:l.onSubmit(d=>c(d)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:s("modelManager.name"),...l.getInputProps("model_name")}),a.jsx(En,{label:s("modelManager.description"),...l.getInputProps("description")}),a.jsx(kf,{required:!0,...l.getInputProps("base_model")}),a.jsx(f0,{required:!0,...l.getInputProps("variant")}),a.jsx(En,{required:!0,label:s("modelManager.modelLocation"),...l.getInputProps("path")}),a.jsx(En,{label:s("modelManager.vaeLocation"),...l.getInputProps("vae")}),a.jsx(Xe,{type:"submit",isLoading:r,children:s("modelManager.updateModel")})]})})]})}function xhe(e){const{model:t}=e,[n,{isLoading:r}]=nN(),o=te(),{t:s}=W(),l=vi({initialValues:{model_name:t.model_name?t.model_name:"",base_model:t.base_model,model_type:"lora",path:t.path?t.path:"",description:t.description?t.description:"",model_format:t.model_format},validate:{path:d=>d.trim().length===0?"Must provide a path":null}}),c=i.useCallback(d=>{const f={base_model:t.base_model,model_name:t.model_name,body:d};n(f).unwrap().then(m=>{l.setValues(m),o(lt(rn({title:s("modelManager.modelUpdated"),status:"success"})))}).catch(m=>{l.reset(),o(lt(rn({title:s("modelManager.modelUpdateFailed"),status:"error"})))})},[o,l,t.base_model,t.model_name,s,n]);return a.jsxs($,{flexDirection:"column",rowGap:4,width:"100%",children:[a.jsxs($,{flexDirection:"column",children:[a.jsx(be,{fontSize:"lg",fontWeight:"bold",children:t.model_name}),a.jsxs(be,{fontSize:"sm",color:"base.400",children:[xn[t.base_model]," ",s("modelManager.model")," ⋅"," ",rN[t.model_format]," ",s("common.format")]})]}),a.jsx(On,{}),a.jsx("form",{onSubmit:l.onSubmit(d=>c(d)),children:a.jsxs($,{flexDirection:"column",overflowY:"scroll",gap:4,children:[a.jsx(En,{label:s("modelManager.name"),...l.getInputProps("model_name")}),a.jsx(En,{label:s("modelManager.description"),...l.getInputProps("description")}),a.jsx(kf,{...l.getInputProps("base_model")}),a.jsx(En,{label:s("modelManager.modelLocation"),...l.getInputProps("path")}),a.jsx(Xe,{type:"submit",isLoading:r,children:s("modelManager.updateModel")})]})})]})}function yhe(e){const{t}=W(),n=te(),[r]=oN(),[o]=sN(),{model:s,isSelected:l,setSelectedModelId:c}=e,d=i.useCallback(()=>{c(s.id)},[s.id,c]),f=i.useCallback(()=>{const m={main:r,lora:o,onnx:r}[s.model_type];m(s).unwrap().then(h=>{n(lt(rn({title:`${t("modelManager.modelDeleted")}: ${s.model_name}`,status:"success"})))}).catch(h=>{h&&n(lt(rn({title:`${t("modelManager.modelDeleteFailed")}: ${s.model_name}`,status:"error"})))}),c(void 0)},[r,o,s,c,n,t]);return a.jsxs($,{sx:{gap:2,alignItems:"center",w:"full"},children:[a.jsx($,{as:Xe,isChecked:l,sx:{justifyContent:"start",p:2,borderRadius:"base",w:"full",alignItems:"center",bg:l?"accent.400":"base.100",color:l?"base.50":"base.800",_hover:{bg:l?"accent.500":"base.300",color:l?"base.50":"base.800"},_dark:{color:l?"base.50":"base.100",bg:l?"accent.600":"base.850",_hover:{color:l?"base.50":"base.100",bg:l?"accent.550":"base.700"}}},onClick:d,children:a.jsxs($,{gap:4,alignItems:"center",children:[a.jsx(Sa,{minWidth:14,p:.5,fontSize:"sm",variant:"solid",children:aN[s.base_model]}),a.jsx(Ut,{label:s.description,hasArrow:!0,placement:"bottom",children:a.jsx(be,{sx:{fontWeight:500},children:s.model_name})})]})}),a.jsx(t0,{title:t("modelManager.deleteModel"),acceptCallback:f,acceptButtonText:t("modelManager.delete"),triggerComponent:a.jsx(Fe,{icon:a.jsx(Fre,{}),"aria-label":t("modelManager.deleteConfig"),colorScheme:"error"}),children:a.jsxs($,{rowGap:4,flexDirection:"column",children:[a.jsx("p",{style:{fontWeight:"bold"},children:t("modelManager.deleteMsg1")}),a.jsx("p",{children:t("modelManager.deleteMsg2")})]})})]})}const Che=e=>{const{selectedModelId:t,setSelectedModelId:n}=e,{t:r}=W(),[o,s]=i.useState(""),[l,c]=i.useState("all"),{filteredDiffusersModels:d,isLoadingDiffusersModels:f}=as(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredDiffusersModels:Vu(_,"main","diffusers",o),isLoadingDiffusersModels:I})}),{filteredCheckpointModels:m,isLoadingCheckpointModels:h}=as(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredCheckpointModels:Vu(_,"main","checkpoint",o),isLoadingCheckpointModels:I})}),{filteredLoraModels:g,isLoadingLoraModels:b}=Vd(void 0,{selectFromResult:({data:_,isLoading:I})=>({filteredLoraModels:Vu(_,"lora",void 0,o),isLoadingLoraModels:I})}),{filteredOnnxModels:y,isLoadingOnnxModels:x}=vd(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredOnnxModels:Vu(_,"onnx","onnx",o),isLoadingOnnxModels:I})}),{filteredOliveModels:w,isLoadingOliveModels:S}=vd(Bl,{selectFromResult:({data:_,isLoading:I})=>({filteredOliveModels:Vu(_,"onnx","olive",o),isLoadingOliveModels:I})}),j=i.useCallback(_=>{s(_.target.value)},[]);return a.jsx($,{flexDirection:"column",rowGap:4,width:"50%",minWidth:"50%",children:a.jsxs($,{flexDirection:"column",gap:4,paddingInlineEnd:4,children:[a.jsxs($t,{isAttached:!0,children:[a.jsx(Xe,{onClick:c.bind(null,"all"),isChecked:l==="all",size:"sm",children:r("modelManager.allModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"diffusers"),isChecked:l==="diffusers",children:r("modelManager.diffusersModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"checkpoint"),isChecked:l==="checkpoint",children:r("modelManager.checkpointModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"onnx"),isChecked:l==="onnx",children:r("modelManager.onnxModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"olive"),isChecked:l==="olive",children:r("modelManager.oliveModels")}),a.jsx(Xe,{size:"sm",onClick:c.bind(null,"lora"),isChecked:l==="lora",children:r("modelManager.loraModels")})]}),a.jsx(yo,{onChange:j,label:r("modelManager.search"),labelPos:"side"}),a.jsxs($,{flexDirection:"column",gap:4,maxHeight:window.innerHeight-280,overflow:"scroll",children:[f&&a.jsx(tc,{loadingMessage:"Loading Diffusers..."}),["all","diffusers"].includes(l)&&!f&&d.length>0&&a.jsx(ec,{title:"Diffusers",modelList:d,selected:{selectedModelId:t,setSelectedModelId:n}},"diffusers"),h&&a.jsx(tc,{loadingMessage:"Loading Checkpoints..."}),["all","checkpoint"].includes(l)&&!h&&m.length>0&&a.jsx(ec,{title:"Checkpoints",modelList:m,selected:{selectedModelId:t,setSelectedModelId:n}},"checkpoints"),b&&a.jsx(tc,{loadingMessage:"Loading LoRAs..."}),["all","lora"].includes(l)&&!b&&g.length>0&&a.jsx(ec,{title:"LoRAs",modelList:g,selected:{selectedModelId:t,setSelectedModelId:n}},"loras"),S&&a.jsx(tc,{loadingMessage:"Loading Olives..."}),["all","olive"].includes(l)&&!S&&w.length>0&&a.jsx(ec,{title:"Olives",modelList:w,selected:{selectedModelId:t,setSelectedModelId:n}},"olive"),x&&a.jsx(tc,{loadingMessage:"Loading ONNX..."}),["all","onnx"].includes(l)&&!x&&y.length>0&&a.jsx(ec,{title:"ONNX",modelList:y,selected:{selectedModelId:t,setSelectedModelId:n}},"onnx")]})]})})},whe=i.memo(Che),Vu=(e,t,n,r)=>{const o=[];return qn(e==null?void 0:e.entities,s=>{if(!s)return;const l=s.model_name.toLowerCase().includes(r.toLowerCase()),c=n===void 0||s.model_format===n,d=s.model_type===t;l&&c&&d&&o.push(s)}),o},W2=i.memo(e=>a.jsx($,{flexDirection:"column",gap:4,borderRadius:4,p:4,sx:{bg:"base.200",_dark:{bg:"base.800"}},children:e.children}));W2.displayName="StyledModelContainer";const ec=i.memo(e=>{const{title:t,modelList:n,selected:r}=e;return a.jsx(W2,{children:a.jsxs($,{sx:{gap:2,flexDir:"column"},children:[a.jsx(be,{variant:"subtext",fontSize:"sm",children:t}),n.map(o=>a.jsx(yhe,{model:o,isSelected:r.selectedModelId===o.id,setSelectedModelId:r.setSelectedModelId},o.id))]})})});ec.displayName="ModelListWrapper";const tc=i.memo(({loadingMessage:e})=>a.jsx(W2,{children:a.jsxs($,{justifyContent:"center",alignItems:"center",flexDirection:"column",p:4,gap:8,children:[a.jsx(va,{}),a.jsx(be,{variant:"subtext",children:e||"Fetching..."})]})}));tc.displayName="FetchingModelsLoader";function She(){const[e,t]=i.useState(),{mainModel:n}=as(Bl,{selectFromResult:({data:s})=>({mainModel:e?s==null?void 0:s.entities[e]:void 0})}),{loraModel:r}=Vd(void 0,{selectFromResult:({data:s})=>({loraModel:e?s==null?void 0:s.entities[e]:void 0})}),o=n||r;return a.jsxs($,{sx:{gap:8,w:"full",h:"full"},children:[a.jsx(whe,{selectedModelId:e,setSelectedModelId:t}),a.jsx(khe,{model:o})]})}const khe=e=>{const{t}=W(),{model:n}=e;return(n==null?void 0:n.model_format)==="checkpoint"?a.jsx(vhe,{model:n},n.id):(n==null?void 0:n.model_format)==="diffusers"?a.jsx(bhe,{model:n},n.id):(n==null?void 0:n.model_type)==="lora"?a.jsx(xhe,{model:n},n.id):a.jsx($,{sx:{w:"full",h:"full",justifyContent:"center",alignItems:"center",maxH:96,userSelect:"none"},children:a.jsx(be,{variant:"subtext",children:t("modelManager.noModelSelected")})})};function jhe(){const{t:e}=W();return a.jsxs($,{sx:{w:"full",p:4,borderRadius:4,gap:4,justifyContent:"space-between",alignItems:"center",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsxs($,{sx:{flexDirection:"column",gap:2},children:[a.jsx(be,{sx:{fontWeight:600},children:e("modelManager.syncModels")}),a.jsx(be,{fontSize:"sm",sx:{_dark:{color:"base.400"}},children:e("modelManager.syncModelsDesc")})]}),a.jsx(cu,{})]})}function _he(){return a.jsx($,{children:a.jsx(jhe,{})})}const Ihe=()=>{const{t:e}=W(),t=i.useMemo(()=>[{id:"modelManager",label:e("modelManager.modelManager"),content:a.jsx(She,{})},{id:"importModels",label:e("modelManager.importModels"),content:a.jsx(phe,{})},{id:"mergeModels",label:e("modelManager.mergeModels"),content:a.jsx(hhe,{})},{id:"settings",label:e("modelManager.settings"),content:a.jsx(_he,{})}],[e]);return a.jsxs(ci,{isLazy:!0,variant:"line",layerStyle:"first",sx:{w:"full",h:"full",p:4,gap:4,borderRadius:"base"},children:[a.jsx(ui,{children:t.map(n=>a.jsx(mr,{sx:{borderTopRadius:"base"},children:n.label},n.id))}),a.jsx(eu,{sx:{w:"full",h:"full"},children:t.map(n=>a.jsx($r,{sx:{w:"full",h:"full"},children:n.content},n.id))})]})},Phe=i.memo(Ihe),Ehe=e=>{const t=Ya();return{...u3,id:t,type:"current_image",position:e,data:{id:t,type:"current_image",isOpen:!0,label:"Current Image"}}},Mhe=e=>{const t=Ya();return{...u3,id:t,type:"notes",position:e,data:{id:t,isOpen:!0,label:"Notes",notes:"",type:"notes"}}},Ohe=fe([e=>e.nodes],e=>e.nodeTemplates),Dhe=()=>{const e=H(Ohe),t=zx();return i.useCallback(n=>{var d;let r=window.innerWidth/2,o=window.innerHeight/2;const s=(d=document.querySelector("#workflow-editor"))==null?void 0:d.getBoundingClientRect();s&&(r=s.width/2-U1/2+s.left,o=s.height/2-U1/2+s.top);const l=t.screenToFlowPosition({x:r,y:o});if(n==="current_image")return Ehe(l);if(n==="notes")return Mhe(l);const c=e[n];return lN(l,c)},[e,t])},GO=i.forwardRef(({label:e,description:t,...n},r)=>a.jsx("div",{ref:r,...n,children:a.jsxs("div",{children:[a.jsx(be,{fontWeight:600,children:e}),a.jsx(be,{size:"xs",sx:{color:"base.600",_dark:{color:"base.500"}},children:t})]})}));GO.displayName="AddNodePopoverSelectItem";const Rhe=(e,t)=>{const n=new RegExp(e.trim().replace(/[-[\]{}()*+!<=:?./\\^$|#,]/g,"").split(" ").join(".*"),"gi");return n.test(t.label)||n.test(t.description)||t.tags.some(r=>n.test(r))},Ahe=()=>{const e=te(),t=Dhe(),n=zs(),{t:r}=W(),o=H(w=>w.nodes.connectionStartFieldType),s=H(w=>{var S;return(S=w.nodes.connectionStartParams)==null?void 0:S.handleType}),l=fe([pe],({nodes:w})=>{const S=o?pL(w.nodeTemplates,_=>{const I=s=="source"?_.inputs:_.outputs;return Jo(I,E=>{const M=s=="source"?o:E.type,D=s=="target"?o:E.type;return Bx(M,D)})}):Hr(w.nodeTemplates),j=Hr(S,_=>({label:_.title,value:_.type,description:_.description,tags:_.tags}));return o===null&&(j.push({label:r("nodes.currentImage"),value:"current_image",description:r("nodes.currentImageDescription"),tags:["progress"]}),j.push({label:r("nodes.notes"),value:"notes",description:r("nodes.notesDescription"),tags:["notes"]})),j.sort((_,I)=>_.label.localeCompare(I.label)),{data:j}}),{data:c}=H(l),d=H(w=>w.nodes.isAddNodePopoverOpen),f=i.useRef(null),m=i.useCallback(w=>{const S=t(w);if(!S){const j=r("nodes.unknownNode",{nodeType:w});n({status:"error",title:j});return}e(iN(S))},[e,t,n,r]),h=i.useCallback(w=>{w&&m(w)},[m]),g=i.useCallback(()=>{e(cN())},[e]),b=i.useCallback(()=>{e(d3())},[e]),y=i.useCallback(w=>{w.preventDefault(),b(),setTimeout(()=>{var S;(S=f.current)==null||S.focus()},0)},[b]),x=i.useCallback(()=>{g()},[g]);return tt(["shift+a","space"],y),tt(["escape"],x),a.jsxs(lf,{initialFocusRef:f,isOpen:d,onClose:g,placement:"bottom",openDelay:0,closeDelay:0,closeOnBlur:!0,returnFocusOnClose:!0,children:[a.jsx(p6,{children:a.jsx($,{sx:{position:"absolute",top:"15%",insetInlineStart:"50%",pointerEvents:"none"}})}),a.jsx(cf,{sx:{p:0,top:-1,shadow:"dark-lg",borderColor:"accent.300",borderWidth:"2px",borderStyle:"solid",_dark:{borderColor:"accent.400"}},children:a.jsx(Cg,{sx:{p:0},children:a.jsx(sn,{inputRef:f,selectOnBlur:!1,placeholder:r("nodes.nodeSearch"),value:null,data:c,maxDropdownHeight:400,nothingFound:r("nodes.noMatchingNodes"),itemComponent:GO,filter:Rhe,onChange:h,hoverOnSearchChange:!0,onDropdownClose:g,sx:{width:"32rem",input:{padding:"0.5rem"}}})})})]})},The=i.memo(Ahe),Nhe=()=>{const e=zx(),t=H(r=>r.nodes.shouldValidateGraph);return i.useCallback(({source:r,sourceHandle:o,target:s,targetHandle:l})=>{const c=e.getEdges(),d=e.getNodes();if(!(r&&o&&s&&l))return!1;const f=e.getNode(r),m=e.getNode(s);if(!(f&&m&&f.data&&m.data))return!1;const h=f.data.outputs[o],g=m.data.inputs[l];return!h||!g||r===s?!1:t?c.find(b=>{b.target===s&&b.targetHandle===l&&b.source===r&&b.sourceHandle})||c.find(b=>b.target===s&&b.targetHandle===l)&&g.type.name!=="CollectionItemField"||!Bx(h.type,g.type)?!1:f3(r,s,d,c):!0},[e,t])},_c=e=>`var(--invokeai-colors-${e.split(".").join("-")})`,V2=e=>{if(!e)return _c("base.500");const t=uN[e.name];return _c(t||"base.500")},$he=fe(pe,({nodes:e})=>{const{shouldAnimateEdges:t,connectionStartFieldType:n,shouldColorEdges:r}=e,o=r?V2(n):_c("base.500");let s="react-flow__custom_connection-path";return t&&(s=s.concat(" animated")),{stroke:o,className:s}}),Lhe=({fromX:e,fromY:t,fromPosition:n,toX:r,toY:o,toPosition:s})=>{const{stroke:l,className:c}=H($he),d={sourceX:e,sourceY:t,sourcePosition:n,targetX:r,targetY:o,targetPosition:s},[f]=Hx(d);return a.jsx("g",{children:a.jsx("path",{fill:"none",stroke:l,strokeWidth:2,className:c,d:f,style:{opacity:.8}})})},Fhe=i.memo(Lhe),KO=(e,t,n,r,o)=>fe(pe,({nodes:s})=>{var g,b;const l=s.nodes.find(y=>y.id===e),c=s.nodes.find(y=>y.id===n),d=Jt(l)&&Jt(c),f=(l==null?void 0:l.selected)||(c==null?void 0:c.selected)||o,m=d?(b=(g=l==null?void 0:l.data)==null?void 0:g.outputs[t||""])==null?void 0:b.type:void 0,h=m&&s.shouldColorEdges?V2(m):_c("base.500");return{isSelected:f,shouldAnimate:s.shouldAnimateEdges&&f,stroke:h}}),zhe=({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:o,targetPosition:s,markerEnd:l,data:c,selected:d,source:f,target:m,sourceHandleId:h,targetHandleId:g})=>{const b=i.useMemo(()=>KO(f,h,m,g,d),[d,f,h,m,g]),{isSelected:y,shouldAnimate:x}=H(b),[w,S,j]=Hx({sourceX:e,sourceY:t,sourcePosition:o,targetX:n,targetY:r,targetPosition:s}),{base500:_}=hf();return a.jsxs(a.Fragment,{children:[a.jsx(p3,{path:w,markerEnd:l,style:{strokeWidth:y?3:2,stroke:_,opacity:y?.8:.5,animation:x?"dashdraw 0.5s linear infinite":void 0,strokeDasharray:x?5:"none"}}),(c==null?void 0:c.count)&&c.count>1&&a.jsx(dN,{children:a.jsx($,{sx:{position:"absolute",transform:`translate(-50%, -50%) translate(${S}px,${j}px)`},className:"nodrag nopan",children:a.jsx(Sa,{variant:"solid",sx:{bg:"base.500",opacity:y?.8:.5,boxShadow:"base"},children:c.count})})})]})},Bhe=i.memo(zhe),Hhe=({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:o,targetPosition:s,markerEnd:l,selected:c,source:d,target:f,sourceHandleId:m,targetHandleId:h})=>{const g=i.useMemo(()=>KO(d,m,f,h,c),[d,m,f,h,c]),{isSelected:b,shouldAnimate:y,stroke:x}=H(g),[w]=Hx({sourceX:e,sourceY:t,sourcePosition:o,targetX:n,targetY:r,targetPosition:s});return a.jsx(p3,{path:w,markerEnd:l,style:{strokeWidth:b?3:2,stroke:x,opacity:b?.8:.5,animation:y?"dashdraw 0.5s linear infinite":void 0,strokeDasharray:y?5:"none"}})},Whe=i.memo(Hhe),Vhe=e=>{const{nodeId:t,width:n,children:r,selected:o}=e,{isMouseOverNode:s,handleMouseOut:l,handleMouseOver:c}=oO(t),d=i.useMemo(()=>fe(pe,({nodes:j})=>{var _;return((_=j.nodeExecutionStates[t])==null?void 0:_.status)===ta.enum.IN_PROGRESS}),[t]),f=H(d),[m,h,g,b]=Zo("shadows",["nodeInProgress.light","nodeInProgress.dark","shadows.xl","shadows.base"]),y=te(),x=ia(m,h),w=H(j=>j.nodes.nodeOpacity),S=i.useCallback(j=>{!j.ctrlKey&&!j.altKey&&!j.metaKey&&!j.shiftKey&&y(fN(t)),y(m3())},[y,t]);return a.jsxs(Ie,{onClick:S,onMouseEnter:c,onMouseLeave:l,className:Kc,sx:{h:"full",position:"relative",borderRadius:"base",w:n??U1,transitionProperty:"common",transitionDuration:"0.1s",cursor:"grab",opacity:w},children:[a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"base",pointerEvents:"none",shadow:`${g}, ${b}, ${b}`,zIndex:-1}}),a.jsx(Ie,{sx:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,borderRadius:"md",pointerEvents:"none",transitionProperty:"common",transitionDuration:"0.1s",opacity:.7,shadow:f?x:void 0,zIndex:-1}}),r,a.jsx(rO,{isSelected:o,isHovered:s})]})},p0=i.memo(Vhe),Uhe=fe(pe,({system:e,gallery:t})=>{var r;return{imageDTO:t.selection[t.selection.length-1],progressImage:(r=e.denoiseProgress)==null?void 0:r.progress_image}}),Ghe=e=>{const{progressImage:t,imageDTO:n}=pN(Uhe);return t?a.jsx(E1,{nodeProps:e,children:a.jsx(Ca,{src:t.dataURL,sx:{w:"full",h:"full",objectFit:"contain",borderRadius:"base"}})}):n?a.jsx(E1,{nodeProps:e,children:a.jsx(fl,{imageDTO:n,isDragDisabled:!0,useThumbailFallback:!0})}):a.jsx(E1,{nodeProps:e,children:a.jsx(Tn,{})})},Khe=i.memo(Ghe),E1=e=>{const[t,n]=i.useState(!1),r=i.useCallback(()=>{n(!0)},[]),o=i.useCallback(()=>{n(!1)},[]),{t:s}=W();return a.jsx(p0,{nodeId:e.nodeProps.id,selected:e.nodeProps.selected,width:384,children:a.jsxs($,{onMouseEnter:r,onMouseLeave:o,className:Kc,sx:{position:"relative",flexDirection:"column"},children:[a.jsx($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",alignItems:"center",justifyContent:"center",h:8},children:a.jsx(be,{sx:{fontSize:"sm",fontWeight:600,color:"base.700",_dark:{color:"base.200"}},children:s("nodes.currentImage")})}),a.jsxs($,{layerStyle:"nodeBody",sx:{w:"full",h:"full",borderBottomRadius:"base",p:2},children:[e.children,t&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.1}},exit:{opacity:0,transition:{duration:.1}},style:{position:"absolute",top:40,left:-2,right:-2,bottom:0,pointerEvents:"none"},children:a.jsx(FO,{})},"nextPrevButtons")]})]})})},U2=e=>{const t=e.filter(o=>!o.ui_hidden),n=t.filter(o=>!na(o.ui_order)).sort((o,s)=>(o.ui_order??0)-(s.ui_order??0)),r=t.filter(o=>na(o.ui_order));return n.concat(r).map(o=>o.name).filter(o=>o!=="is_intermediate")},qhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(c=>c.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];if(!s)return[];const l=Hr(s.inputs).filter(c=>(["any","direct"].includes(c.input)||c.type.isCollectionOrScalar)&&hx(h3).includes(c.type.name));return U2(l)}),[e]);return H(t)},Xhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(c=>c.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];if(!s)return[];const l=Hr(s.inputs).filter(c=>c.input==="connection"&&!c.type.isCollectionOrScalar||!hx(h3).includes(c.type.name));return U2(l)}),[e]);return H(t)},Qhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return[];const s=r.nodeTemplates[o.data.type];return s?U2(Hr(s.outputs)):[]}),[e]);return H(t)},G2=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?Jo(o.data.outputs,s=>s.type.name==="ImageField"&&o.data.type!=="image"):!1}),[e]);return H(t)},Yhe=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.isIntermediate:!1}),[e]);return H(t)},Zhe=({nodeId:e})=>{const{t}=W(),n=te(),r=G2(e),o=Yhe(e),s=i.useCallback(l=>{n(mN({nodeId:e,isIntermediate:!l.target.checked}))},[n,e]);return r?a.jsxs(Gt,{as:$,sx:{alignItems:"center",gap:2,w:"auto"},children:[a.jsx(ln,{sx:{fontSize:"xs",mb:"1px"},children:t("hotkeys.saveToGallery.title")}),a.jsx(og,{className:"nopan",size:"sm",onChange:s,isChecked:!o})]}):null},Jhe=i.memo(Zhe),ege=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.useCache:!1}),[e]);return H(t)},tge=({nodeId:e})=>{const t=te(),n=ege(e),r=i.useCallback(s=>{t(hN({nodeId:e,useCache:s.target.checked}))},[t,e]),{t:o}=W();return a.jsxs(Gt,{as:$,sx:{alignItems:"center",gap:2,w:"auto"},children:[a.jsx(ln,{sx:{fontSize:"xs",mb:"1px"},children:o("invocationCache.useCache")}),a.jsx(og,{className:"nopan",size:"sm",onChange:r,isChecked:n})]})},nge=i.memo(tge),rge=({nodeId:e})=>{const t=G2(e),n=Mt("invocationCache").isFeatureEnabled;return a.jsxs($,{className:Kc,layerStyle:"nodeFooter",sx:{w:"full",borderBottomRadius:"base",px:2,py:0,h:6,justifyContent:"space-between"},children:[n&&a.jsx(nge,{nodeId:e}),t&&a.jsx(Jhe,{nodeId:e})]})},oge=i.memo(rge),sge=({nodeId:e,isOpen:t})=>{const n=te(),r=gN(),o=i.useCallback(()=>{n(vN({nodeId:e,isOpen:!t})),r(e)},[n,t,e,r]);return a.jsx(Fe,{className:"nodrag",onClick:o,"aria-label":"Minimize",sx:{minW:8,w:8,h:8,color:"base.500",_dark:{color:"base.500"},_hover:{color:"base.700",_dark:{color:"base.300"}}},variant:"link",icon:a.jsx(Kg,{sx:{transform:t?"rotate(0deg)":"rotate(180deg)",transitionProperty:"common",transitionDuration:"normal"}})})},K2=i.memo(sge),age=({nodeId:e,title:t})=>{const n=te(),r=eO(e),o=tO(e),{t:s}=W(),[l,c]=i.useState(""),d=i.useCallback(async m=>{n(qI({nodeId:e,label:m})),c(r||t||o||s("nodes.problemSettingTitle"))},[n,e,t,o,r,s]),f=i.useCallback(m=>{c(m)},[]);return i.useEffect(()=>{c(r||t||o||s("nodes.problemSettingTitle"))},[r,o,t,s]),a.jsx($,{sx:{overflow:"hidden",w:"full",h:"full",alignItems:"center",justifyContent:"center",cursor:"text"},children:a.jsxs(ef,{as:$,value:l,onChange:f,onSubmit:d,sx:{alignItems:"center",position:"relative",w:"full",h:"full"},children:[a.jsx(Jd,{fontSize:"sm",sx:{p:0,w:"full"},noOfLines:1}),a.jsx(Zd,{className:"nodrag",fontSize:"sm",sx:{p:0,fontWeight:700,_focusVisible:{p:0,boxShadow:"none"}}}),a.jsx(lge,{})]})})},qO=i.memo(age);function lge(){const{isEditing:e,getEditButtonProps:t}=K3(),n=i.useCallback(r=>{const{onClick:o}=t();o&&o(r)},[t]);return e?null:a.jsx(Ie,{className:Kc,onDoubleClick:n,sx:{position:"absolute",w:"full",h:"full",top:0,cursor:"grab"}})}const ige=({nodeId:e})=>{const t=A2(e),{base400:n,base600:r}=hf(),o=ia(n,r),s=i.useMemo(()=>({borderWidth:0,borderRadius:"3px",width:"1rem",height:"1rem",backgroundColor:o,zIndex:-1}),[o]);return Im(t)?a.jsxs(a.Fragment,{children:[a.jsx(qu,{type:"target",id:`${t.id}-collapsed-target`,isConnectable:!1,position:rc.Left,style:{...s,left:"-0.5rem"}}),Hr(t.inputs,l=>a.jsx(qu,{type:"target",id:l.name,isConnectable:!1,position:rc.Left,style:{visibility:"hidden"}},`${t.id}-${l.name}-collapsed-input-handle`)),a.jsx(qu,{type:"source",id:`${t.id}-collapsed-source`,isConnectable:!1,position:rc.Right,style:{...s,right:"-0.5rem"}}),Hr(t.outputs,l=>a.jsx(qu,{type:"source",id:l.name,isConnectable:!1,position:rc.Right,style:{visibility:"hidden"}},`${t.id}-${l.name}-collapsed-output-handle`))]}):null},cge=i.memo(ige),uge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);return r.nodeTemplates[(o==null?void 0:o.data.type)??""]}),[e]);return H(t)},dge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e),c=s.nodeTemplates[(l==null?void 0:l.data.type)??""];return{node:l,template:c}}),[e]),{node:n,template:r}=H(t);return i.useMemo(()=>Jt(n)&&r?$x(n,r):!1,[n,r])},fge=({nodeId:e})=>{const t=dge(e);return a.jsx(Ut,{label:a.jsx(XO,{nodeId:e}),placement:"top",shouldWrapChildren:!0,children:a.jsx(An,{as:HM,sx:{display:"block",boxSize:4,w:8,color:t?"error.400":"base.400"}})})},pge=i.memo(fge),XO=i.memo(({nodeId:e})=>{const t=A2(e),n=uge(e),{t:r}=W(),o=i.useMemo(()=>t!=null&&t.label&&(n!=null&&n.title)?`${t.label} (${n.title})`:t!=null&&t.label&&!n?t.label:!(t!=null&&t.label)&&n?n.title:r("nodes.unknownNode"),[t,n,r]),s=i.useMemo(()=>!Im(t)||!n?null:t.version?n.version?dS(t.version,n.version,"<")?a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.updateNode"),")"]}):dS(t.version,n.version,">")?a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.updateApp"),")"]}):a.jsxs(be,{as:"span",children:[r("nodes.version")," ",t.version]}):a.jsxs(be,{as:"span",sx:{color:"error.500"},children:[r("nodes.version")," ",t.version," (",r("nodes.unknownTemplate"),")"]}):a.jsx(be,{as:"span",sx:{color:"error.500"},children:r("nodes.versionUnknown")}),[t,n,r]);return Im(t)?a.jsxs($,{sx:{flexDir:"column"},children:[a.jsx(be,{as:"span",sx:{fontWeight:600},children:o}),(n==null?void 0:n.nodePack)&&a.jsxs(be,{opacity:.7,children:[r("nodes.nodePack"),": ",n.nodePack]}),a.jsx(be,{sx:{opacity:.7,fontStyle:"oblique 5deg"},children:n==null?void 0:n.description}),s,(t==null?void 0:t.notes)&&a.jsx(be,{children:t.notes})]}):a.jsx(be,{sx:{fontWeight:600},children:r("nodes.unknownNode")})});XO.displayName="TooltipContent";const M1=3,G_={circle:{transitionProperty:"none",transitionDuration:"0s"},".chakra-progress__track":{stroke:"transparent"}},mge=({nodeId:e})=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>r.nodeExecutionStates[e]),[e]),n=H(t);return n?a.jsx(Ut,{label:a.jsx(QO,{nodeExecutionState:n}),placement:"top",children:a.jsx($,{className:Kc,sx:{w:5,h:"full",alignItems:"center",justifyContent:"flex-end"},children:a.jsx(YO,{nodeExecutionState:n})})}):null},hge=i.memo(mge),QO=i.memo(({nodeExecutionState:e})=>{const{status:t,progress:n,progressImage:r}=e,{t:o}=W();return t===ta.enum.PENDING?a.jsx(be,{children:o("queue.pending")}):t===ta.enum.IN_PROGRESS?r?a.jsxs($,{sx:{pos:"relative",pt:1.5,pb:.5},children:[a.jsx(Ca,{src:r.dataURL,sx:{w:32,h:32,borderRadius:"base",objectFit:"contain"}}),n!==null&&a.jsxs(Sa,{variant:"solid",sx:{pos:"absolute",top:2.5,insetInlineEnd:1},children:[Math.round(n*100),"%"]})]}):n!==null?a.jsxs(be,{children:[o("nodes.executionStateInProgress")," (",Math.round(n*100),"%)"]}):a.jsx(be,{children:o("nodes.executionStateInProgress")}):t===ta.enum.COMPLETED?a.jsx(be,{children:o("nodes.executionStateCompleted")}):t===ta.enum.FAILED?a.jsx(be,{children:o("nodes.executionStateError")}):null});QO.displayName="TooltipLabel";const YO=i.memo(e=>{const{progress:t,status:n}=e.nodeExecutionState;return n===ta.enum.PENDING?a.jsx(An,{as:wte,sx:{boxSize:M1,color:"base.600",_dark:{color:"base.300"}}}):n===ta.enum.IN_PROGRESS?t===null?a.jsx(hb,{isIndeterminate:!0,size:"14px",color:"base.500",thickness:14,sx:G_}):a.jsx(hb,{value:Math.round(t*100),size:"14px",color:"base.500",thickness:14,sx:G_}):n===ta.enum.COMPLETED?a.jsx(An,{as:$M,sx:{boxSize:M1,color:"ok.600",_dark:{color:"ok.300"}}}):n===ta.enum.FAILED?a.jsx(An,{as:_te,sx:{boxSize:M1,color:"error.600",_dark:{color:"error.300"}}}):null});YO.displayName="StatusIcon";const gge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(l=>l.id===e);if(!Jt(o))return!1;const s=r.nodeTemplates[(o==null?void 0:o.data.type)??""];return s==null?void 0:s.classification}),[e]);return H(t)},vge=({nodeId:e})=>{const t=gge(e);return!t||t==="stable"?null:a.jsx(Ut,{label:a.jsx(ZO,{classification:t}),placement:"top",shouldWrapChildren:!0,children:a.jsx(An,{as:xge(t),sx:{display:"block",boxSize:4,color:"base.400"}})})},bge=i.memo(vge),ZO=i.memo(({classification:e})=>{const{t}=W();return e==="beta"?t("nodes.betaDesc"):e==="prototype"?t("nodes.prototypeDesc"):null});ZO.displayName="ClassificationTooltipContent";const xge=e=>{if(e==="beta")return iae;if(e==="prototype")return Ote},yge=({nodeId:e,isOpen:t})=>a.jsxs($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:t?0:"base",alignItems:"center",justifyContent:"space-between",h:8,textAlign:"center",fontWeight:500,color:"base.700",_dark:{color:"base.200"}},children:[a.jsx(K2,{nodeId:e,isOpen:t}),a.jsx(bge,{nodeId:e}),a.jsx(qO,{nodeId:e}),a.jsxs($,{alignItems:"center",children:[a.jsx(hge,{nodeId:e}),a.jsx(pge,{nodeId:e})]}),!t&&a.jsx(cge,{nodeId:e})]}),Cge=i.memo(yge),wge=(e,t,n,r)=>fe(pe,o=>{if(!r)return wt.t("nodes.noFieldType");const{connectionStartFieldType:s,connectionStartParams:l,nodes:c,edges:d}=o.nodes;if(!l||!s)return wt.t("nodes.noConnectionInProgress");const{handleType:f,nodeId:m,handleId:h}=l;if(!f||!m||!h)return wt.t("nodes.noConnectionData");const g=n==="target"?r:s,b=n==="source"?r:s;if(e===m)return wt.t("nodes.cannotConnectToSelf");if(n===f)return n==="source"?wt.t("nodes.cannotConnectOutputToOutput"):wt.t("nodes.cannotConnectInputToInput");const y=n==="target"?e:m,x=n==="target"?t:h,w=n==="source"?e:m,S=n==="source"?t:h;if(d.find(_=>{_.target===y&&_.targetHandle===x&&_.source===w&&_.sourceHandle}))return wt.t("nodes.cannotDuplicateConnection");if(d.find(_=>_.target===y&&_.targetHandle===x)&&g.name!=="CollectionItemField")return wt.t("nodes.inputMayOnlyHaveOneConnection");if(!Bx(b,g))return wt.t("nodes.fieldTypesMustMatch");if(!f3(f==="source"?m:e,f==="source"?e:m,c,d))return wt.t("nodes.connectionWouldCreateCycle")}),Sge=(e,t,n)=>{const r=i.useMemo(()=>fe(pe,({nodes:s})=>{const l=s.nodes.find(d=>d.id===e);if(!Jt(l))return;const c=l.data[Lx[n]][t];return c==null?void 0:c.type}),[t,n,e]);return H(r)},kge=fe(pe,({nodes:e})=>e.connectionStartFieldType!==null&&e.connectionStartParams!==null),JO=({nodeId:e,fieldName:t,kind:n})=>{const r=Sge(e,t,n),o=i.useMemo(()=>fe(pe,({nodes:g})=>!!g.edges.filter(b=>(n==="input"?b.target:b.source)===e&&(n==="input"?b.targetHandle:b.sourceHandle)===t).length),[t,n,e]),s=i.useMemo(()=>wge(e,t,n==="input"?"target":"source",r),[e,t,n,r]),l=i.useMemo(()=>fe(pe,({nodes:g})=>{var b,y,x;return((b=g.connectionStartParams)==null?void 0:b.nodeId)===e&&((y=g.connectionStartParams)==null?void 0:y.handleId)===t&&((x=g.connectionStartParams)==null?void 0:x.handleType)==={input:"target",output:"source"}[n]}),[t,n,e]),c=H(o),d=H(kge),f=H(l),m=H(s),h=i.useMemo(()=>!!(d&&m&&!f),[m,d,f]);return{isConnected:c,isConnectionInProgress:d,isConnectionStartField:f,connectionError:m,shouldDim:h}},jge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{var l;const s=o.nodes.find(c=>c.id===e);if(Jt(s))return((l=s==null?void 0:s.data.inputs[t])==null?void 0:l.value)!==void 0}),[t,e]);return H(n)},_ge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s.data.inputs[t]}),[t,e]);return H(n)},Ige=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(c=>c.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""];return l==null?void 0:l.inputs[t]}),[t,e]);return H(n)},Pge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(d=>d.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""],c=l==null?void 0:l.inputs[t];return c==null?void 0:c.input}),[t,e]);return H(n)},Ege=({nodeId:e,fieldName:t,kind:n,children:r})=>{const o=te(),s=sO(e,t),l=aO(e,t,n),c=Pge(e,t),{t:d}=W(),f=i.useCallback(S=>{S.preventDefault()},[]),m=i.useMemo(()=>fe(pe,({workflow:S})=>({isExposed:!!S.exposedFields.find(_=>_.nodeId===e&&_.fieldName===t)})),[t,e]),h=i.useMemo(()=>c&&["any","direct"].includes(c),[c]),{isExposed:g}=H(m),b=i.useCallback(()=>{o(bN({nodeId:e,fieldName:t}))},[o,t,e]),y=i.useCallback(()=>{o(ZI({nodeId:e,fieldName:t}))},[o,t,e]),x=i.useMemo(()=>{const S=[];return h&&!g&&S.push(a.jsx(At,{icon:a.jsx(nl,{}),onClick:b,children:d("nodes.addLinearView")},`${e}.${t}.expose-field`)),h&&g&&S.push(a.jsx(At,{icon:a.jsx(Fte,{}),onClick:y,children:d("nodes.removeLinearView")},`${e}.${t}.unexpose-field`)),S},[t,b,y,g,h,e,d]),w=i.useCallback(()=>x.length?a.jsx(al,{sx:{visibility:"visible !important"},motionProps:Yl,onContextMenu:f,children:a.jsx(_d,{title:s||l||d("nodes.unknownField"),children:x})}):null,[l,s,x,f,d]);return a.jsx(f2,{menuProps:{size:"sm",isLazy:!0},menuButtonProps:{bg:"transparent",_hover:{bg:"transparent"}},renderMenu:w,children:r})},Mge=i.memo(Ege),Oge=e=>{const{fieldTemplate:t,handleType:n,isConnectionInProgress:r,isConnectionStartField:o,connectionError:s}=e,{name:l}=t,c=t.type,d=cO(c),f=i.useMemo(()=>{const h=xN.some(y=>y===c.name),g=V2(c),b={backgroundColor:c.isCollection||c.isCollectionOrScalar?_c("base.900"):g,position:"absolute",width:"1rem",height:"1rem",borderWidth:c.isCollection||c.isCollectionOrScalar?4:0,borderStyle:"solid",borderColor:g,borderRadius:h?4:"100%",zIndex:1};return n==="target"?b.insetInlineStart="-1rem":b.insetInlineEnd="-1rem",r&&!o&&s&&(b.filter="opacity(0.4) grayscale(0.7)"),r&&s?o?b.cursor="grab":b.cursor="not-allowed":b.cursor="crosshair",b},[s,n,r,o,c]),m=i.useMemo(()=>r&&s?s:d,[s,d,r]);return a.jsx(Ut,{label:m,placement:n==="target"?"start":"end",hasArrow:!0,openDelay:Zh,children:a.jsx(qu,{type:n,id:l,position:n==="target"?rc.Left:rc.Right,style:f})})},eD=i.memo(Oge),Dge=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=Ige(e,t),o=_ge(e,t),s=jge(e,t),{isConnected:l,isConnectionInProgress:c,isConnectionStartField:d,connectionError:f,shouldDim:m}=JO({nodeId:e,fieldName:t,kind:"input"}),h=i.useMemo(()=>{if(!r||!r.required)return!1;if(!l&&r.input==="connection"||!s&&!l&&r.input==="any")return!0},[r,l,s]);return!r||!o?a.jsx(cx,{shouldDim:m,children:a.jsx(Gt,{sx:{alignItems:"stretch",justifyContent:"space-between",gap:2,h:"full",w:"full"},children:a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownInput",{name:(o==null?void 0:o.label)??(r==null?void 0:r.title)??t})})})}):a.jsxs(cx,{shouldDim:m,children:[a.jsxs(Gt,{isInvalid:h,isDisabled:l,sx:{alignItems:"stretch",justifyContent:"space-between",ps:r.input==="direct"?0:2,gap:2,h:"full",w:"full"},children:[a.jsx(Mge,{nodeId:e,fieldName:t,kind:"input",children:g=>a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full"},children:a.jsx(uO,{ref:g,nodeId:e,fieldName:t,kind:"input",isMissingInput:h,withTooltip:!0})})}),a.jsx(Ie,{children:a.jsx(yO,{nodeId:e,fieldName:t})})]}),r.input!=="direct"&&a.jsx(eD,{fieldTemplate:r,handleType:"target",isConnectionInProgress:c,isConnectionStartField:d,connectionError:f})]})},K_=i.memo(Dge),cx=i.memo(({shouldDim:e,children:t})=>a.jsx($,{sx:{position:"relative",minH:8,py:.5,alignItems:"center",opacity:e?.5:1,transitionProperty:"opacity",transitionDuration:"0.1s",w:"full",h:"full"},children:t}));cx.displayName="InputFieldWrapper";const Rge=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(l=>l.id===e);if(Jt(s))return s.data.outputs[t]}),[t,e]);return H(n)},Age=(e,t)=>{const n=i.useMemo(()=>fe(pe,({nodes:o})=>{const s=o.nodes.find(c=>c.id===e);if(!Jt(s))return;const l=o.nodeTemplates[(s==null?void 0:s.data.type)??""];return l==null?void 0:l.outputs[t]}),[t,e]);return H(n)},Tge=({nodeId:e,fieldName:t})=>{const{t:n}=W(),r=Age(e,t),o=Rge(e,t),{isConnected:s,isConnectionInProgress:l,isConnectionStartField:c,connectionError:d,shouldDim:f}=JO({nodeId:e,fieldName:t,kind:"output"});return!r||!o?a.jsx(ux,{shouldDim:f,children:a.jsx(Gt,{sx:{alignItems:"stretch",justifyContent:"space-between",gap:2,h:"full",w:"full"},children:a.jsx(ln,{sx:{display:"flex",alignItems:"center",mb:0,px:1,gap:2,h:"full",fontWeight:600,color:"error.400",_dark:{color:"error.300"}},children:n("nodes.unknownOutput",{name:(r==null?void 0:r.title)??t})})})}):a.jsxs(ux,{shouldDim:f,children:[a.jsx(Ut,{label:a.jsx(T2,{nodeId:e,fieldName:t,kind:"output"}),openDelay:Zh,placement:"top",shouldWrapChildren:!0,hasArrow:!0,children:a.jsx(Gt,{isDisabled:s,pe:2,children:a.jsx(ln,{sx:{mb:0,fontWeight:500},children:r==null?void 0:r.title})})}),a.jsx(eD,{fieldTemplate:r,handleType:"source",isConnectionInProgress:l,isConnectionStartField:c,connectionError:d})]})},Nge=i.memo(Tge),ux=i.memo(({shouldDim:e,children:t})=>a.jsx($,{sx:{position:"relative",minH:8,py:.5,alignItems:"center",opacity:e?.5:1,transitionProperty:"opacity",transitionDuration:"0.1s",justifyContent:"flex-end"},children:t}));ux.displayName="OutputFieldWrapper";const $ge=e=>{const t=G2(e),n=Mt("invocationCache").isFeatureEnabled;return i.useMemo(()=>t||n,[t,n])},Lge=({nodeId:e,isOpen:t,label:n,type:r,selected:o})=>{const s=Xhe(e),l=qhe(e),c=$ge(e),d=Qhe(e);return a.jsxs(p0,{nodeId:e,selected:o,children:[a.jsx(Cge,{nodeId:e,isOpen:t,label:n,selected:o,type:r}),t&&a.jsxs(a.Fragment,{children:[a.jsx($,{layerStyle:"nodeBody",sx:{flexDirection:"column",w:"full",h:"full",py:2,gap:1,borderBottomRadius:c?0:"base"},children:a.jsxs($,{sx:{flexDir:"column",px:2,w:"full",h:"full"},children:[a.jsxs(sl,{gridTemplateColumns:"1fr auto",gridAutoRows:"1fr",children:[s.map((f,m)=>a.jsx(Sd,{gridColumnStart:1,gridRowStart:m+1,children:a.jsx(K_,{nodeId:e,fieldName:f})},`${e}.${f}.input-field`)),d.map((f,m)=>a.jsx(Sd,{gridColumnStart:2,gridRowStart:m+1,children:a.jsx(Nge,{nodeId:e,fieldName:f})},`${e}.${f}.output-field`))]}),l.map(f=>a.jsx(K_,{nodeId:e,fieldName:f},`${e}.${f}.input-field`))]})}),c&&a.jsx(oge,{nodeId:e})]})]})},Fge=i.memo(Lge),zge=e=>{const t=i.useMemo(()=>fe(pe,({nodes:r})=>{const o=r.nodes.find(s=>s.id===e);return Jt(o)?o.data.nodePack:!1}),[e]);return H(t)},Bge=({nodeId:e,isOpen:t,label:n,type:r,selected:o})=>{const{t:s}=W(),l=zge(e);return a.jsxs(p0,{nodeId:e,selected:o,children:[a.jsxs($,{className:Kc,layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:t?0:"base",alignItems:"center",h:8,fontWeight:600,fontSize:"sm"},children:[a.jsx(K2,{nodeId:e,isOpen:t}),a.jsx(be,{sx:{w:"full",textAlign:"center",pe:8,color:"error.500",_dark:{color:"error.300"}},children:n?`${n} (${r})`:r})]}),t&&a.jsx($,{layerStyle:"nodeBody",sx:{userSelect:"auto",flexDirection:"column",w:"full",h:"full",p:4,gap:1,borderBottomRadius:"base",fontSize:"sm"},children:a.jsxs($,{gap:2,flexDir:"column",children:[a.jsxs(be,{as:"span",children:[s("nodes.unknownNodeType"),":"," ",a.jsx(be,{as:"span",fontWeight:600,children:r})]}),l&&a.jsxs(be,{as:"span",children:[s("nodes.nodePack"),":"," ",a.jsx(be,{as:"span",fontWeight:600,children:l})]})]})})]})},Hge=i.memo(Bge),Wge=e=>{const{data:t,selected:n}=e,{id:r,type:o,isOpen:s,label:l}=t,c=i.useMemo(()=>fe(pe,({nodes:f})=>!!f.nodeTemplates[o]),[o]);return H(c)?a.jsx(Fge,{nodeId:r,isOpen:s,label:l,type:o,selected:n}):a.jsx(Hge,{nodeId:r,isOpen:s,label:l,type:o,selected:n})},Vge=i.memo(Wge),Uge=e=>{const{id:t,data:n,selected:r}=e,{notes:o,isOpen:s}=n,l=te(),c=i.useCallback(d=>{l(yN({nodeId:t,value:d.target.value}))},[l,t]);return a.jsxs(p0,{nodeId:t,selected:r,children:[a.jsxs($,{layerStyle:"nodeHeader",sx:{borderTopRadius:"base",borderBottomRadius:s?0:"base",alignItems:"center",justifyContent:"space-between",h:8},children:[a.jsx(K2,{nodeId:t,isOpen:s}),a.jsx(qO,{nodeId:t,title:"Notes"}),a.jsx(Ie,{minW:8})]}),s&&a.jsx(a.Fragment,{children:a.jsx($,{layerStyle:"nodeBody",className:"nopan",sx:{cursor:"auto",flexDirection:"column",borderBottomRadius:"base",w:"full",h:"full",p:2,gap:1},children:a.jsx($,{className:"nopan",sx:{flexDir:"column",w:"full",h:"full"},children:a.jsx(ga,{value:o,onChange:c,rows:8,resize:"none",sx:{fontSize:"xs"}})})})})]})},Gge=i.memo(Uge),Kge=["Delete","Backspace"],qge={collapsed:Bhe,default:Whe},Xge={invocation:Vge,current_image:Khe,notes:Gge},Qge={hideAttribution:!0},Yge=fe(pe,({nodes:e})=>{const{shouldSnapToGrid:t,selectionMode:n}=e;return{shouldSnapToGrid:t,selectionMode:n}}),Zge=()=>{const e=te(),t=H(O=>O.nodes.nodes),n=H(O=>O.nodes.edges),r=H(O=>O.nodes.viewport),{shouldSnapToGrid:o,selectionMode:s}=H(Yge),l=i.useRef(null),c=i.useRef(),d=Nhe(),[f]=Zo("radii",["base"]),m=i.useCallback(O=>{e(CN(O))},[e]),h=i.useCallback(O=>{e(wN(O))},[e]),g=i.useCallback((O,T)=>{e(SN(T))},[e]),b=i.useCallback(O=>{e(fS(O))},[e]),y=i.useCallback(()=>{e(kN({cursorPosition:c.current}))},[e]),x=i.useCallback(O=>{e(jN(O))},[e]),w=i.useCallback(O=>{e(_N(O))},[e]),S=i.useCallback(({nodes:O,edges:T})=>{e(IN(O?O.map(U=>U.id):[])),e(PN(T?T.map(U=>U.id):[]))},[e]),j=i.useCallback((O,T)=>{e(EN(T))},[e]),_=i.useCallback(()=>{e(m3())},[e]),I=i.useCallback(O=>{pS.set(O),O.fitView()},[]),E=i.useCallback(O=>{var T,U;(T=l.current)!=null&&T.getBoundingClientRect()&&(c.current=(U=pS.get())==null?void 0:U.screenToFlowPosition({x:O.clientX,y:O.clientY}))},[]),M=i.useRef(),D=i.useCallback((O,T,U)=>{M.current=O,e(MN(T.id)),e(ON())},[e]),R=i.useCallback((O,T)=>{e(fS(T))},[e]),N=i.useCallback((O,T,U)=>{var G,q;!("touches"in O)&&((G=M.current)==null?void 0:G.clientX)===O.clientX&&((q=M.current)==null?void 0:q.clientY)===O.clientY&&e(DN(T)),M.current=void 0},[e]);return tt(["Ctrl+c","Meta+c"],O=>{O.preventDefault(),e(RN())}),tt(["Ctrl+a","Meta+a"],O=>{O.preventDefault(),e(AN())}),tt(["Ctrl+v","Meta+v"],O=>{O.preventDefault(),e(TN({cursorPosition:c.current}))}),a.jsx(NN,{id:"workflow-editor",ref:l,defaultViewport:r,nodeTypes:Xge,edgeTypes:qge,nodes:t,edges:n,onInit:I,onMouseMove:E,onNodesChange:m,onEdgesChange:h,onEdgesDelete:x,onEdgeUpdate:R,onEdgeUpdateStart:D,onEdgeUpdateEnd:N,onNodesDelete:w,onConnectStart:g,onConnect:b,onConnectEnd:y,onMoveEnd:j,connectionLineComponent:Fhe,onSelectionChange:S,isValidConnection:d,minZoom:.1,snapToGrid:o,snapGrid:[25,25],connectionRadius:30,proOptions:Qge,style:{borderRadius:f},onPaneClick:_,deleteKeyCode:Kge,selectionMode:s,children:a.jsx($L,{})})};function Jge(){const e=te(),t=H(o=>o.nodes.nodeOpacity),{t:n}=W(),r=i.useCallback(o=>{e($N(o))},[e]);return a.jsx($,{alignItems:"center",children:a.jsxs(Sy,{"aria-label":n("nodes.nodeOpacity"),value:t,min:.5,max:1,step:.01,onChange:r,orientation:"vertical",defaultValue:30,h:"calc(100% - 0.5rem)",children:[a.jsx(jy,{children:a.jsx(_y,{})}),a.jsx(ky,{})]})})}const e0e=()=>{const{t:e}=W(),{zoomIn:t,zoomOut:n,fitView:r}=zx(),o=te(),s=H(m=>m.nodes.shouldShowMinimapPanel),l=i.useCallback(()=>{t()},[t]),c=i.useCallback(()=>{n()},[n]),d=i.useCallback(()=>{r()},[r]),f=i.useCallback(()=>{o(LN(!s))},[s,o]);return a.jsxs($t,{isAttached:!0,orientation:"vertical",children:[a.jsx(Fe,{tooltip:e("nodes.zoomInNodes"),"aria-label":e("nodes.zoomInNodes"),onClick:l,icon:a.jsx(uae,{})}),a.jsx(Fe,{tooltip:e("nodes.zoomOutNodes"),"aria-label":e("nodes.zoomOutNodes"),onClick:c,icon:a.jsx(cae,{})}),a.jsx(Fe,{tooltip:e("nodes.fitViewportNodes"),"aria-label":e("nodes.fitViewportNodes"),onClick:d,icon:a.jsx(zM,{})}),a.jsx(Fe,{tooltip:e(s?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),"aria-label":e(s?"nodes.hideMinimapnodes":"nodes.showMinimapnodes"),isChecked:s,onClick:f,icon:a.jsx(Lte,{})})]})},t0e=i.memo(e0e),n0e=()=>a.jsxs($,{sx:{gap:2,position:"absolute",bottom:2,insetInlineStart:2},children:[a.jsx(t0e,{}),a.jsx(Jge,{})]}),r0e=i.memo(n0e),o0e=je(OL),s0e=()=>{const e=H(r=>r.nodes.shouldShowMinimapPanel),t=ia("var(--invokeai-colors-accent-300)","var(--invokeai-colors-accent-600)"),n=ia("var(--invokeai-colors-blackAlpha-300)","var(--invokeai-colors-blackAlpha-600)");return a.jsx($,{sx:{gap:2,position:"absolute",bottom:2,insetInlineEnd:2},children:e&&a.jsx(o0e,{pannable:!0,zoomable:!0,nodeBorderRadius:15,sx:{m:"0 !important",backgroundColor:"base.200 !important",borderRadius:"base",_dark:{backgroundColor:"base.500 !important"},svg:{borderRadius:"inherit"}},nodeColor:t,maskColor:n})})},a0e=i.memo(s0e),l0e=()=>{const e=te(),{t}=W(),n=i.useCallback(()=>{e(d3())},[e]);return a.jsx(Fe,{tooltip:t("nodes.addNodeToolTip"),"aria-label":t("nodes.addNode"),icon:a.jsx(nl,{}),onClick:n,pointerEvents:"auto"})},i0e=i.memo(l0e),c0e=fe(pe,e=>{const t=e.nodes.nodes,n=e.nodes.nodeTemplates;return t.filter(Jt).some(o=>{const s=n[o.data.type];return s?$x(o,s):!1})}),u0e=()=>H(c0e),d0e=()=>{const e=te(),{t}=W(),n=u0e(),r=i.useCallback(()=>{e(FN())},[e]);return n?a.jsx(Xe,{leftIcon:a.jsx(jte,{}),onClick:r,pointerEvents:"auto",children:t("nodes.updateAllNodes")}):null},f0e=i.memo(d0e),p0e=()=>{const{t:e}=W(),t=H(o=>o.workflow.name),n=H(o=>o.workflow.isTouched),r=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs(be,{m:2,fontSize:"lg",userSelect:"none",noOfLines:1,wordBreak:"break-all",fontWeight:600,opacity:.8,children:[t||e("workflows.unnamedWorkflow"),n&&r?` (${e("common.unsaved")})`:""]})},m0e=i.memo(p0e),tD=i.createContext(null);var h0e=/d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|W{1,2}|[LlopSZN]|"[^"]*"|'[^']*'/g,g0e=/\b(?:[A-Z]{1,3}[A-Z][TC])(?:[-+]\d{4})?|((?:Australian )?(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time)\b/g,v0e=/[^-+\dA-Z]/g;function nm(e,t,n,r){if(arguments.length===1&&typeof e=="string"&&!/\d/.test(e)&&(t=e,e=void 0),e=e||e===0?e:new Date,e instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");t=String(cc[t]||t||cc.default);var o=t.slice(0,4);(o==="UTC:"||o==="GMT:")&&(t=t.slice(4),n=!0,o==="GMT:"&&(r=!0));var s=function(){return n?"getUTC":"get"},l=function(){return e[s()+"Date"]()},c=function(){return e[s()+"Day"]()},d=function(){return e[s()+"Month"]()},f=function(){return e[s()+"FullYear"]()},m=function(){return e[s()+"Hours"]()},h=function(){return e[s()+"Minutes"]()},g=function(){return e[s()+"Seconds"]()},b=function(){return e[s()+"Milliseconds"]()},y=function(){return n?0:e.getTimezoneOffset()},x=function(){return b0e(e)},w=function(){return x0e(e)},S={d:function(){return l()},dd:function(){return Yr(l())},ddd:function(){return Rr.dayNames[c()]},DDD:function(){return q_({y:f(),m:d(),d:l(),_:s(),dayName:Rr.dayNames[c()],short:!0})},dddd:function(){return Rr.dayNames[c()+7]},DDDD:function(){return q_({y:f(),m:d(),d:l(),_:s(),dayName:Rr.dayNames[c()+7]})},m:function(){return d()+1},mm:function(){return Yr(d()+1)},mmm:function(){return Rr.monthNames[d()]},mmmm:function(){return Rr.monthNames[d()+12]},yy:function(){return String(f()).slice(2)},yyyy:function(){return Yr(f(),4)},h:function(){return m()%12||12},hh:function(){return Yr(m()%12||12)},H:function(){return m()},HH:function(){return Yr(m())},M:function(){return h()},MM:function(){return Yr(h())},s:function(){return g()},ss:function(){return Yr(g())},l:function(){return Yr(b(),3)},L:function(){return Yr(Math.floor(b()/10))},t:function(){return m()<12?Rr.timeNames[0]:Rr.timeNames[1]},tt:function(){return m()<12?Rr.timeNames[2]:Rr.timeNames[3]},T:function(){return m()<12?Rr.timeNames[4]:Rr.timeNames[5]},TT:function(){return m()<12?Rr.timeNames[6]:Rr.timeNames[7]},Z:function(){return r?"GMT":n?"UTC":y0e(e)},o:function(){return(y()>0?"-":"+")+Yr(Math.floor(Math.abs(y())/60)*100+Math.abs(y())%60,4)},p:function(){return(y()>0?"-":"+")+Yr(Math.floor(Math.abs(y())/60),2)+":"+Yr(Math.floor(Math.abs(y())%60),2)},S:function(){return["th","st","nd","rd"][l()%10>3?0:(l()%100-l()%10!=10)*l()%10]},W:function(){return x()},WW:function(){return Yr(x())},N:function(){return w()}};return t.replace(h0e,function(j){return j in S?S[j]():j.slice(1,j.length-1)})}var cc={default:"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",paddedShortDate:"mm/dd/yyyy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},Rr={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],timeNames:["a","p","am","pm","A","P","AM","PM"]},Yr=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return String(t).padStart(n,"0")},q_=function(t){var n=t.y,r=t.m,o=t.d,s=t._,l=t.dayName,c=t.short,d=c===void 0?!1:c,f=new Date,m=new Date;m.setDate(m[s+"Date"]()-1);var h=new Date;h.setDate(h[s+"Date"]()+1);var g=function(){return f[s+"Date"]()},b=function(){return f[s+"Month"]()},y=function(){return f[s+"FullYear"]()},x=function(){return m[s+"Date"]()},w=function(){return m[s+"Month"]()},S=function(){return m[s+"FullYear"]()},j=function(){return h[s+"Date"]()},_=function(){return h[s+"Month"]()},I=function(){return h[s+"FullYear"]()};return y()===n&&b()===r&&g()===o?d?"Tdy":"Today":S()===n&&w()===r&&x()===o?d?"Ysd":"Yesterday":I()===n&&_()===r&&j()===o?d?"Tmw":"Tomorrow":l},b0e=function(t){var n=new Date(t.getFullYear(),t.getMonth(),t.getDate());n.setDate(n.getDate()-(n.getDay()+6)%7+3);var r=new Date(n.getFullYear(),0,4);r.setDate(r.getDate()-(r.getDay()+6)%7+3);var o=n.getTimezoneOffset()-r.getTimezoneOffset();n.setHours(n.getHours()-o);var s=(n-r)/(864e5*7);return 1+Math.floor(s)},x0e=function(t){var n=t.getDay();return n===0&&(n=7),n},y0e=function(t){return(String(t).match(g0e)||[""]).pop().replace(v0e,"").replace(/GMT\+0000/g,"UTC")};const nD=zN.injectEndpoints({endpoints:e=>({getWorkflow:e.query({query:t=>`workflows/i/${t}`,providesTags:(t,n,r)=>[{type:"Workflow",id:r}],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:o}=n;try{await o,r(nD.util.invalidateTags([{type:"WorkflowsRecent",id:Fa}]))}catch{}}}),deleteWorkflow:e.mutation({query:t=>({url:`workflows/i/${t}`,method:"DELETE"}),invalidatesTags:(t,n,r)=>[{type:"Workflow",id:Fa},{type:"Workflow",id:r},{type:"WorkflowsRecent",id:Fa}]}),createWorkflow:e.mutation({query:t=>({url:"workflows/",method:"POST",body:{workflow:t}}),invalidatesTags:[{type:"Workflow",id:Fa},{type:"WorkflowsRecent",id:Fa}]}),updateWorkflow:e.mutation({query:t=>({url:`workflows/i/${t.id}`,method:"PATCH",body:{workflow:t}}),invalidatesTags:(t,n,r)=>[{type:"WorkflowsRecent",id:Fa},{type:"Workflow",id:Fa},{type:"Workflow",id:r.id}]}),listWorkflows:e.query({query:t=>({url:"workflows/",params:t}),providesTags:[{type:"Workflow",id:Fa}]})})}),{useLazyGetWorkflowQuery:C0e,useCreateWorkflowMutation:rD,useDeleteWorkflowMutation:w0e,useUpdateWorkflowMutation:S0e,useListWorkflowsQuery:k0e}=nD,j0e=({onSuccess:e,onError:t})=>{const n=zs(),{t:r}=W(),[o,s]=w0e();return{deleteWorkflow:i.useCallback(async c=>{try{await o(c).unwrap(),n({title:r("toast.workflowDeleted")}),e&&e()}catch{n({title:r("toast.problemDeletingWorkflow"),status:"error"}),t&&t()}},[o,n,r,e,t]),deleteWorkflowResult:s}},_0e=({onSuccess:e,onError:t})=>{const n=te(),r=zs(),{t:o}=W(),[s,l]=C0e();return{getAndLoadWorkflow:i.useCallback(async d=>{try{const f=await s(d).unwrap();n(Dx({workflow:f.workflow,asCopy:!1})),e&&e()}catch{r({title:o("toast.problemRetrievingWorkflow"),status:"error"}),t&&t()}},[s,n,e,r,o,t]),getAndLoadWorkflowResult:l}},oD=()=>{const e=i.useContext(tD);if(!e)throw new Error("useWorkflowLibraryContext must be used within a WorkflowLibraryContext.Provider");return e},I0e=({workflowDTO:e})=>{const{t}=W(),n=H(h=>h.workflow.id),{onClose:r}=oD(),{deleteWorkflow:o,deleteWorkflowResult:s}=j0e({}),{getAndLoadWorkflow:l,getAndLoadWorkflowResult:c}=_0e({onSuccess:r}),d=i.useCallback(()=>{o(e.workflow_id)},[o,e.workflow_id]),f=i.useCallback(()=>{l(e.workflow_id)},[l,e.workflow_id]),m=i.useMemo(()=>n===e.workflow_id,[n,e.workflow_id]);return a.jsx($,{w:"full",children:a.jsxs($,{w:"full",alignItems:"center",gap:2,h:12,children:[a.jsxs($,{flexDir:"column",flexGrow:1,h:"full",children:[a.jsxs($,{alignItems:"center",w:"full",h:"50%",children:[a.jsx(or,{size:"sm",variant:m?"accent":void 0,children:e.name||t("workflows.unnamedWorkflow")}),a.jsx(Wr,{}),e.category==="user"&&a.jsxs(be,{fontSize:"sm",variant:"subtext",children:[t("common.updated"),":"," ",nm(e.updated_at,cc.shortDate)," ",nm(e.updated_at,cc.shortTime)]})]}),a.jsxs($,{alignItems:"center",w:"full",h:"50%",children:[e.description?a.jsx(be,{fontSize:"sm",noOfLines:1,children:e.description}):a.jsx(be,{fontSize:"sm",variant:"subtext",fontStyle:"italic",noOfLines:1,children:t("workflows.noDescription")}),a.jsx(Wr,{}),e.category==="user"&&a.jsxs(be,{fontSize:"sm",variant:"subtext",children:[t("common.created"),":"," ",nm(e.created_at,cc.shortDate)," ",nm(e.created_at,cc.shortTime)]})]})]}),a.jsx(Xe,{isDisabled:m,onClick:f,isLoading:c.isLoading,"aria-label":t("workflows.openWorkflow"),children:t("common.load")}),e.category==="user"&&a.jsx(Xe,{colorScheme:"error",isDisabled:m,onClick:d,isLoading:s.isLoading,"aria-label":t("workflows.deleteWorkflow"),children:t("common.delete")})]})},e.workflow_id)},P0e=i.memo(I0e),Nl=7,E0e=({page:e,setPage:t,data:n})=>{const{t:r}=W(),o=i.useCallback(()=>{t(c=>Math.max(c-1,0))},[t]),s=i.useCallback(()=>{t(c=>Math.min(c+1,n.pages-1))},[n.pages,t]),l=i.useMemo(()=>{const c=[];let d=n.pages>Nl?Math.max(0,e-Math.floor(Nl/2)):0;const f=n.pages>Nl?Math.min(n.pages,d+Nl):n.pages;f-dNl&&(d=f-Nl);for(let m=d;mt(m)});return c},[n.pages,e,t]);return a.jsxs($t,{children:[a.jsx(Fe,{variant:"ghost",onClick:o,isDisabled:e===0,"aria-label":r("common.prevPage"),icon:a.jsx(gte,{})}),l.map(c=>a.jsx(Xe,{w:10,isDisabled:n.pages===1,onClick:c.page===e?void 0:c.onClick,variant:c.page===e?"invokeAI":"ghost",transitionDuration:"0s",children:c.page+1},c.page)),a.jsx(Fe,{variant:"ghost",onClick:s,isDisabled:e===n.pages-1,"aria-label":r("common.nextPage"),icon:a.jsx(vte,{})})]})},M0e=i.memo(E0e),X_=10,O0e=[{value:"opened_at",label:"Opened"},{value:"created_at",label:"Created"},{value:"updated_at",label:"Updated"},{value:"name",label:"Name"}],D0e=[{value:"ASC",label:"Ascending"},{value:"DESC",label:"Descending"}],R0e=()=>{const{t:e}=W(),[t,n]=i.useState("user"),[r,o]=i.useState(0),[s,l]=i.useState(""),[c,d]=i.useState("opened_at"),[f,m]=i.useState("ASC"),[h]=kc(s,500),g=i.useMemo(()=>t==="user"?{page:r,per_page:X_,order_by:c,direction:f,category:t,query:h}:{page:r,per_page:X_,order_by:"name",direction:"ASC",category:t,query:h},[t,h,f,c,r]),{data:b,isLoading:y,isError:x,isFetching:w}=k0e(g),S=i.useCallback(R=>{!R||R===c||(d(R),o(0))},[c]),j=i.useCallback(R=>{!R||R===f||(m(R),o(0))},[f]),_=i.useCallback(()=>{l(""),o(0)},[]),I=i.useCallback(R=>{R.key==="Escape"&&(_(),R.preventDefault(),o(0))},[_]),E=i.useCallback(R=>{l(R.target.value),o(0)},[]),M=i.useCallback(()=>{n("user"),o(0)},[]),D=i.useCallback(()=>{n("default"),o(0)},[]);return a.jsxs(a.Fragment,{children:[a.jsxs($,{gap:4,alignItems:"center",h:10,flexShrink:0,flexGrow:0,children:[a.jsxs($t,{children:[a.jsx(Xe,{variant:t==="user"?void 0:"ghost",onClick:M,isChecked:t==="user",children:e("workflows.userWorkflows")}),a.jsx(Xe,{variant:t==="default"?void 0:"ghost",onClick:D,isChecked:t==="default",children:e("workflows.defaultWorkflows")})]}),a.jsx(Wr,{}),t==="user"&&a.jsxs(a.Fragment,{children:[a.jsx(yn,{label:e("common.orderBy"),value:c,data:O0e,onChange:S,formControlProps:{w:48,display:"flex",alignItems:"center",gap:2},disabled:w}),a.jsx(yn,{label:e("common.direction"),value:f,data:D0e,onChange:j,formControlProps:{w:48,display:"flex",alignItems:"center",gap:2},disabled:w})]}),a.jsxs(cy,{w:"20rem",children:[a.jsx(Qc,{placeholder:e("workflows.searchWorkflows"),value:s,onKeyDown:I,onChange:E,"data-testid":"workflow-search-input"}),s.trim().length&&a.jsx(lg,{children:a.jsx(rs,{onClick:_,size:"xs",variant:"ghost","aria-label":e("workflows.clearWorkflowSearchFilter"),opacity:.5,icon:a.jsx(N8,{boxSize:2})})})]})]}),a.jsx(On,{}),y?a.jsx(U8,{label:e("workflows.loading")}):!b||x?a.jsx(Tn,{label:e("workflows.problemLoading")}):b.items.length?a.jsx(Sl,{children:a.jsx($,{w:"full",h:"full",gap:2,px:1,flexDir:"column",children:b.items.map(R=>a.jsx(P0e,{workflowDTO:R},R.workflow_id))})}):a.jsx(Tn,{label:e("workflows.noUserWorkflows")}),a.jsx(On,{}),b&&a.jsx($,{w:"full",justifyContent:"space-around",children:a.jsx(M0e,{data:b,page:r,setPage:o})})]})},A0e=i.memo(R0e),T0e=e=>a.jsx($,{w:"full",h:"full",flexDir:"column",layerStyle:"second",py:2,px:4,gap:2,borderRadius:"base",children:e.children}),N0e=i.memo(T0e),$0e=()=>a.jsx(N0e,{children:a.jsx(A0e,{})}),L0e=i.memo($0e),F0e=()=>{const{t:e}=W(),{isOpen:t,onClose:n}=oD();return a.jsxs(ni,{isOpen:t,onClose:n,isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{w:"80%",h:"80%",minW:"unset",minH:"unset",maxW:"unset",maxH:"unset",children:[a.jsx(Po,{children:e("workflows.workflowLibrary")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsx(L0e,{})}),a.jsx(ls,{})]})]})},z0e=i.memo(F0e),B0e=()=>{const{t:e}=W(),t=sr();return a.jsxs(tD.Provider,{value:t,children:[a.jsx(Xe,{leftIcon:a.jsx(Dte,{}),onClick:t.onOpen,pointerEvents:"auto",children:e("workflows.workflowLibrary")}),a.jsx(z0e,{})]})},H0e=i.memo(B0e),W0e=()=>{const e=s0();return i.useCallback(()=>{const n=new Blob([JSON.stringify(e,null,2)]),r=document.createElement("a");r.href=URL.createObjectURL(n),r.download=`${e.name||"My Workflow"}.json`,document.body.appendChild(r),r.click(),r.remove()},[e])},V0e=()=>{const{t:e}=W(),t=W0e();return a.jsx(At,{as:"button",icon:a.jsx(ou,{}),onClick:t,children:e("workflows.downloadWorkflow")})},U0e=i.memo(V0e),G0e=()=>{const{t:e}=W(),t=te(),{isOpen:n,onOpen:r,onClose:o}=sr(),s=i.useRef(null),l=H(f=>f.workflow.isTouched),c=i.useCallback(()=>{t(BN()),t(lt(rn({title:e("workflows.newWorkflowCreated"),status:"success"}))),o()},[t,o,e]),d=i.useCallback(()=>{if(!l){c();return}r()},[c,l,r]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"button",icon:a.jsx(e0,{}),onClick:d,children:e("nodes.newWorkflow")}),a.jsxs(Zc,{isOpen:n,onClose:o,leastDestructiveRef:s,isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:e("nodes.newWorkflow")}),a.jsx(Mo,{py:4,children:a.jsxs($,{flexDir:"column",gap:2,children:[a.jsx(be,{children:e("nodes.newWorkflowDesc")}),a.jsx(be,{variant:"subtext",children:e("nodes.newWorkflowDesc2")})]})}),a.jsxs(ls,{children:[a.jsx(ol,{ref:s,onClick:o,children:e("common.cancel")}),a.jsx(ol,{colorScheme:"error",ml:3,onClick:c,children:e("common.accept")})]})]})]})]})},K0e=i.memo(G0e),q0e=()=>{const{t:e}=W(),t=te(),n=s0(),[r,o]=rD(),s=tg(),l=i.useRef();return{saveWorkflowAs:i.useCallback(async({name:d,onSuccess:f,onError:m})=>{l.current=s({title:e("workflows.savingWorkflow"),status:"loading",duration:null,isClosable:!1});try{n.id=void 0,n.name=d;const h=await r(n).unwrap();t(g3(h.workflow.id)),t(XI(h.workflow.name)),t(v3()),f&&f(),s.update(l.current,{title:e("workflows.workflowSaved"),status:"success",duration:1e3,isClosable:!0})}catch{m&&m(),s.update(l.current,{title:e("workflows.problemSavingWorkflow"),status:"error",duration:1e3,isClosable:!0})}},[s,n,r,t,e]),isLoading:o.isLoading,isError:o.isError}},Q_=e=>`${e.trim()} (copy)`,X0e=()=>{const e=H(g=>g.workflow.name),{t}=W(),{saveWorkflowAs:n}=q0e(),[r,o]=i.useState(Q_(e)),{isOpen:s,onOpen:l,onClose:c}=sr(),d=i.useRef(null),f=i.useCallback(()=>{o(Q_(e)),l()},[e,l]),m=i.useCallback(async()=>{n({name:r,onSuccess:c,onError:c})},[r,c,n]),h=i.useCallback(g=>{o(g.target.value)},[]);return a.jsxs(a.Fragment,{children:[a.jsx(At,{as:"button",icon:a.jsx(xte,{}),onClick:f,children:t("workflows.saveWorkflowAs")}),a.jsx(Zc,{isOpen:s,onClose:c,leastDestructiveRef:d,isCentered:!0,children:a.jsx(Eo,{children:a.jsxs(Jc,{children:[a.jsx(Po,{fontSize:"lg",fontWeight:"bold",children:t("workflows.saveWorkflowAs")}),a.jsx(Mo,{children:a.jsxs(Gt,{children:[a.jsx(ln,{children:t("workflows.workflowName")}),a.jsx(Qc,{ref:d,value:r,onChange:h,placeholder:t("workflows.workflowName")})]})}),a.jsxs(ls,{children:[a.jsx(Xe,{onClick:c,children:t("common.cancel")}),a.jsx(Xe,{colorScheme:"accent",onClick:m,ml:3,children:t("common.saveAs")})]})]})})})]})},Q0e=i.memo(X0e),Y0e=e=>!!e.id,Z0e=()=>{const{t:e}=W(),t=te(),n=s0(),[r,o]=S0e(),[s,l]=rD(),c=tg(),d=i.useRef();return{saveWorkflow:i.useCallback(async()=>{d.current=c({title:e("workflows.savingWorkflow"),status:"loading",duration:null,isClosable:!1});try{if(Y0e(n))await r(n).unwrap();else{const m=await s(n).unwrap();t(g3(m.workflow.id))}t(v3()),c.update(d.current,{title:e("workflows.workflowSaved"),status:"success",duration:1e3,isClosable:!0})}catch{c.update(d.current,{title:e("workflows.problemSavingWorkflow"),status:"error",duration:1e3,isClosable:!0})}},[n,r,t,c,e,s]),isLoading:o.isLoading||l.isLoading,isError:o.isError||l.isError}},J0e=()=>{const{t:e}=W(),{saveWorkflow:t}=Z0e();return a.jsx(At,{as:"button",icon:a.jsx(gf,{}),onClick:t,children:e("workflows.saveWorkflow")})},eve=i.memo(J0e),tve=()=>{const{t:e}=W(),t=te(),n=i.useCallback(()=>{t(HN())},[t]);return a.jsx(Xe,{leftIcon:a.jsx(qte,{}),tooltip:e("nodes.reloadNodeTemplates"),"aria-label":e("nodes.reloadNodeTemplates"),onClick:n,children:e("nodes.reloadNodeTemplates")})},nve=i.memo(tve),Uu={fontWeight:600},rve=fe(pe,({nodes:e})=>{const{shouldAnimateEdges:t,shouldValidateGraph:n,shouldSnapToGrid:r,shouldColorEdges:o,selectionMode:s}=e;return{shouldAnimateEdges:t,shouldValidateGraph:n,shouldSnapToGrid:r,shouldColorEdges:o,selectionModeIsChecked:s===WN.Full}}),ove=({children:e})=>{const{isOpen:t,onOpen:n,onClose:r}=sr(),o=te(),{shouldAnimateEdges:s,shouldValidateGraph:l,shouldSnapToGrid:c,shouldColorEdges:d,selectionModeIsChecked:f}=H(rve),m=i.useCallback(w=>{o(VN(w.target.checked))},[o]),h=i.useCallback(w=>{o(UN(w.target.checked))},[o]),g=i.useCallback(w=>{o(GN(w.target.checked))},[o]),b=i.useCallback(w=>{o(KN(w.target.checked))},[o]),y=i.useCallback(w=>{o(qN(w.target.checked))},[o]),{t:x}=W();return a.jsxs(a.Fragment,{children:[e({onOpen:n}),a.jsxs(ni,{isOpen:t,onClose:r,size:"2xl",isCentered:!0,children:[a.jsx(Eo,{}),a.jsxs(ri,{children:[a.jsx(Po,{children:x("nodes.workflowSettings")}),a.jsx(af,{}),a.jsx(Mo,{children:a.jsxs($,{sx:{flexDirection:"column",gap:4,py:4},children:[a.jsx(or,{size:"sm",children:x("parameters.general")}),a.jsx(_n,{formLabelProps:Uu,onChange:h,isChecked:s,label:x("nodes.animatedEdges"),helperText:x("nodes.animatedEdgesHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:c,onChange:g,label:x("nodes.snapToGrid"),helperText:x("nodes.snapToGridHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:d,onChange:b,label:x("nodes.colorCodeEdges"),helperText:x("nodes.colorCodeEdgesHelp")}),a.jsx(On,{}),a.jsx(_n,{formLabelProps:Uu,isChecked:f,onChange:y,label:x("nodes.fullyContainNodes"),helperText:x("nodes.fullyContainNodesHelp")}),a.jsx(or,{size:"sm",pt:4,children:x("common.advanced")}),a.jsx(_n,{formLabelProps:Uu,isChecked:l,onChange:m,label:x("nodes.validateConnections"),helperText:x("nodes.validateConnectionsHelp")}),a.jsx(nve,{})]})})]})]})]})},sve=i.memo(ove),ave=()=>{const{t:e}=W();return a.jsx(sve,{children:({onOpen:t})=>a.jsx(At,{as:"button",icon:a.jsx(FM,{}),onClick:t,children:e("nodes.workflowSettings")})})},lve=i.memo(ave),ive=({resetRef:e})=>{const t=te(),n=H6("nodes"),{t:r}=W();return i.useCallback(s=>{var c;if(!s)return;const l=new FileReader;l.onload=async()=>{const d=l.result;try{const f=JSON.parse(String(d));t(Dx({workflow:f,asCopy:!0}))}catch{n.error(r("nodes.unableToLoadWorkflow")),t(lt(rn({title:r("nodes.unableToLoadWorkflow"),status:"error"}))),l.abort()}},l.readAsText(s),(c=e.current)==null||c.call(e)},[t,n,e,r])},cve=()=>{const{t:e}=W(),t=i.useRef(null),n=ive({resetRef:t});return a.jsx(uM,{resetRef:t,accept:"application/json",onChange:n,children:r=>a.jsx(At,{as:"button",icon:a.jsx($g,{}),...r,children:e("workflows.uploadWorkflow")})})},uve=i.memo(cve),dve=()=>{const{t:e}=W(),{isOpen:t,onOpen:n,onClose:r}=sr();Yy(r);const o=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs(of,{isOpen:t,onOpen:n,onClose:r,children:[a.jsx(sf,{as:Fe,"aria-label":e("workflows.workflowEditorMenu"),icon:a.jsx(P7,{}),pointerEvents:"auto"}),a.jsxs(al,{motionProps:Yl,pointerEvents:"auto",children:[o&&a.jsx(eve,{}),o&&a.jsx(Q0e,{}),a.jsx(U0e,{}),a.jsx(uve,{}),a.jsx(K0e,{}),a.jsx(n6,{}),a.jsx(lve,{})]})]})},fve=i.memo(dve),pve=()=>{const e=Mt("workflowLibrary").isFeatureEnabled;return a.jsxs($,{sx:{gap:2,top:2,left:2,right:2,position:"absolute",alignItems:"center",pointerEvents:"none"},children:[a.jsx(i0e,{}),a.jsx(f0e,{}),a.jsx(Wr,{}),a.jsx(m0e,{}),a.jsx(Wr,{}),e&&a.jsx(H0e,{}),a.jsx(fve,{})]})},mve=i.memo(pve),hve=()=>{const e=H(n=>n.nodes.isReady),{t}=W();return a.jsxs($,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base",alignItems:"center",justifyContent:"center"},children:[a.jsx(hr,{children:e&&a.jsxs(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.2}},exit:{opacity:0,transition:{duration:.2}},style:{position:"relative",width:"100%",height:"100%"},children:[a.jsx(Zge,{}),a.jsx(The,{}),a.jsx(mve,{}),a.jsx(r0e,{}),a.jsx(a0e,{})]})}),a.jsx(hr,{children:!e&&a.jsx(Mn.div,{initial:{opacity:0},animate:{opacity:1,transition:{duration:.2}},exit:{opacity:0,transition:{duration:.2}},style:{position:"absolute",width:"100%",height:"100%"},children:a.jsx($,{layerStyle:"first",sx:{position:"relative",width:"full",height:"full",borderRadius:"base",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:a.jsx(Tn,{label:t("nodes.loadingNodes"),icon:Yse})})})})]})},gve=i.memo(hve),vve=()=>a.jsx(XN,{children:a.jsx(gve,{})}),bve=i.memo(vve),xve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=QN({fixedCacheKey:"clearInvocationCache"}),l=i.useMemo(()=>!(n!=null&&n.size)||!r,[n==null?void 0:n.size,r]);return{clearInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.clearSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.clearFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},yve=()=>{const{t:e}=W(),{clearInvocationCache:t,isDisabled:n,isLoading:r}=xve();return a.jsx(Xe,{isDisabled:n,isLoading:r,onClick:t,children:e("invocationCache.clear")})},Cve=i.memo(yve),wve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=YN({fixedCacheKey:"disableInvocationCache"}),l=i.useMemo(()=>!(n!=null&&n.enabled)||!r||(n==null?void 0:n.max_size)===0,[n==null?void 0:n.enabled,n==null?void 0:n.max_size,r]);return{disableInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.disableSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.disableFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},Sve=()=>{const{t:e}=W(),t=te(),{data:n}=Gd(),r=H(d=>d.system.isConnected),[o,{isLoading:s}]=ZN({fixedCacheKey:"enableInvocationCache"}),l=i.useMemo(()=>(n==null?void 0:n.enabled)||!r||(n==null?void 0:n.max_size)===0,[n==null?void 0:n.enabled,n==null?void 0:n.max_size,r]);return{enableInvocationCache:i.useCallback(async()=>{if(!l)try{await o().unwrap(),t(lt({title:e("invocationCache.enableSucceeded"),status:"success"}))}catch{t(lt({title:e("invocationCache.enableFailed"),status:"error"}))}},[l,o,t,e]),isLoading:s,cacheStatus:n,isDisabled:l}},kve=()=>{const{t:e}=W(),{data:t}=Gd(),{enableInvocationCache:n,isDisabled:r,isLoading:o}=Sve(),{disableInvocationCache:s,isDisabled:l,isLoading:c}=wve();return t!=null&&t.enabled?a.jsx(Xe,{isDisabled:l,isLoading:c,onClick:s,children:e("invocationCache.disable")}):a.jsx(Xe,{isDisabled:r,isLoading:o,onClick:n,children:e("invocationCache.enable")})},jve=i.memo(kve),_ve=({children:e,...t})=>a.jsx(N6,{alignItems:"center",justifyContent:"center",w:"full",h:"full",layerStyle:"second",borderRadius:"base",py:2,px:3,gap:6,flexWrap:"nowrap",...t,children:e}),sD=i.memo(_ve),Ive={'&[aria-disabled="true"]':{color:"base.400",_dark:{color:"base.500"}}},Pve=({label:e,value:t,isDisabled:n=!1,...r})=>a.jsxs(T6,{flexGrow:1,textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap","aria-disabled":n,sx:Ive,...r,children:[a.jsx($6,{textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap",children:e}),a.jsx(L6,{children:t})]}),Cs=i.memo(Pve),Eve=()=>{const{t:e}=W(),{data:t}=Gd(void 0);return a.jsxs(sD,{children:[a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.cacheSize"),value:(t==null?void 0:t.size)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.hits"),value:(t==null?void 0:t.hits)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.misses"),value:(t==null?void 0:t.misses)??0}),a.jsx(Cs,{isDisabled:!(t!=null&&t.enabled),label:e("invocationCache.maxCacheSize"),value:(t==null?void 0:t.max_size)??0}),a.jsxs($t,{w:24,orientation:"vertical",size:"xs",children:[a.jsx(Cve,{}),a.jsx(jve,{})]})]})},Mve=i.memo(Eve),aD=e=>{const t=H(c=>c.system.isConnected),[n,{isLoading:r}]=Rx(),o=te(),{t:s}=W();return{cancelQueueItem:i.useCallback(async()=>{try{await n(e).unwrap(),o(lt({title:s("queue.cancelSucceeded"),status:"success"}))}catch{o(lt({title:s("queue.cancelFailed"),status:"error"}))}},[o,e,s,n]),isLoading:r,isDisabled:!t}},lD=(e,t)=>Number(((Date.parse(t)-Date.parse(e))/1e3).toFixed(2)),Y_={pending:{colorScheme:"cyan",translationKey:"queue.pending"},in_progress:{colorScheme:"yellow",translationKey:"queue.in_progress"},completed:{colorScheme:"green",translationKey:"queue.completed"},failed:{colorScheme:"red",translationKey:"queue.failed"},canceled:{colorScheme:"orange",translationKey:"queue.canceled"}},Ove=({status:e})=>{const{t}=W();return a.jsx(Sa,{colorScheme:Y_[e].colorScheme,children:t(Y_[e].translationKey)})},Dve=i.memo(Ove),Rve=e=>{const t=H(d=>d.system.isConnected),{isCanceled:n}=JN({batch_id:e},{selectFromResult:({data:d})=>d?{isCanceled:(d==null?void 0:d.in_progress)===0&&(d==null?void 0:d.pending)===0}:{isCanceled:!0}}),[r,{isLoading:o}]=e$({fixedCacheKey:"cancelByBatchIds"}),s=te(),{t:l}=W();return{cancelBatch:i.useCallback(async()=>{if(!n)try{await r({batch_ids:[e]}).unwrap(),s(lt({title:l("queue.cancelBatchSucceeded"),status:"success"}))}catch{s(lt({title:l("queue.cancelBatchFailed"),status:"error"}))}},[e,s,n,l,r]),isLoading:o,isCanceled:n,isDisabled:!t}},Ave=({queueItemDTO:e})=>{const{session_id:t,batch_id:n,item_id:r}=e,{t:o}=W(),{cancelBatch:s,isLoading:l,isCanceled:c}=Rve(n),{cancelQueueItem:d,isLoading:f}=aD(r),{data:m}=t$(r),h=i.useMemo(()=>{if(!m)return o("common.loading");if(!m.completed_at||!m.started_at)return o(`queue.${m.status}`);const g=lD(m.started_at,m.completed_at);return m.status==="completed"?`${o("queue.completedIn")} ${g}${g===1?"":"s"}`:`${g}s`},[m,o]);return a.jsxs($,{layerStyle:"third",flexDir:"column",p:2,pt:0,borderRadius:"base",gap:2,children:[a.jsxs($,{layerStyle:"second",p:2,gap:2,justifyContent:"space-between",alignItems:"center",borderRadius:"base",h:20,children:[a.jsx(rm,{label:o("queue.status"),data:h}),a.jsx(rm,{label:o("queue.item"),data:r}),a.jsx(rm,{label:o("queue.batch"),data:n}),a.jsx(rm,{label:o("queue.session"),data:t}),a.jsxs($t,{size:"xs",orientation:"vertical",children:[a.jsx(Xe,{onClick:d,isLoading:f,isDisabled:m?["canceled","completed","failed"].includes(m.status):!0,"aria-label":o("queue.cancelItem"),icon:a.jsx(Nc,{}),colorScheme:"error",children:o("queue.cancelItem")}),a.jsx(Xe,{onClick:s,isLoading:l,isDisabled:c,"aria-label":o("queue.cancelBatch"),icon:a.jsx(Nc,{}),colorScheme:"error",children:o("queue.cancelBatch")})]})]}),(m==null?void 0:m.error)&&a.jsxs($,{layerStyle:"second",p:3,gap:1,justifyContent:"space-between",alignItems:"flex-start",borderRadius:"base",flexDir:"column",children:[a.jsx(or,{size:"sm",color:"error.500",_dark:{color:"error.400"},children:o("common.error")}),a.jsx("pre",{children:m.error})]}),a.jsx($,{layerStyle:"second",h:512,w:"full",borderRadius:"base",alignItems:"center",justifyContent:"center",children:m?a.jsx(Sl,{children:a.jsx(pl,{label:"Queue Item",data:m})}):a.jsx(va,{opacity:.5})})]})},Tve=i.memo(Ave),rm=({label:e,data:t})=>a.jsxs($,{flexDir:"column",justifyContent:"flex-start",p:1,gap:1,overflow:"hidden",h:"full",w:"full",children:[a.jsx(or,{size:"md",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",children:e}),a.jsx(be,{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",children:t})]}),Ss={number:"3rem",statusBadge:"5.7rem",statusDot:2,time:"4rem",batchId:"5rem",fieldValues:"auto",actions:"auto"},Z_={bg:"base.300",_dark:{bg:"base.750"}},Nve={_hover:Z_,"&[aria-selected='true']":Z_},$ve=({index:e,item:t,context:n})=>{const{t:r}=W(),o=i.useCallback(()=>{n.toggleQueueItem(t.item_id)},[n,t.item_id]),{cancelQueueItem:s,isLoading:l}=aD(t.item_id),c=i.useCallback(h=>{h.stopPropagation(),s()},[s]),d=i.useMemo(()=>n.openQueueItems.includes(t.item_id),[n.openQueueItems,t.item_id]),f=i.useMemo(()=>!t.completed_at||!t.started_at?void 0:`${lD(t.started_at,t.completed_at)}s`,[t]),m=i.useMemo(()=>["canceled","completed","failed"].includes(t.status),[t.status]);return a.jsxs($,{flexDir:"column","aria-selected":d,fontSize:"sm",borderRadius:"base",justifyContent:"center",sx:Nve,"data-testid":"queue-item",children:[a.jsxs($,{minH:9,alignItems:"center",gap:4,p:1.5,cursor:"pointer",onClick:o,children:[a.jsx($,{w:Ss.number,justifyContent:"flex-end",alignItems:"center",flexShrink:0,children:a.jsx(be,{variant:"subtext",children:e+1})}),a.jsx($,{w:Ss.statusBadge,alignItems:"center",flexShrink:0,children:a.jsx(Dve,{status:t.status})}),a.jsx($,{w:Ss.time,alignItems:"center",flexShrink:0,children:f||"-"}),a.jsx($,{w:Ss.batchId,flexShrink:0,children:a.jsx(be,{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",alignItems:"center",children:t.batch_id})}),a.jsx($,{alignItems:"center",overflow:"hidden",flexGrow:1,children:t.field_values&&a.jsx($,{gap:2,w:"full",whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",children:t.field_values.filter(h=>h.node_path!=="metadata_accumulator").map(({node_path:h,field_name:g,value:b})=>a.jsxs(be,{as:"span",children:[a.jsxs(be,{as:"span",fontWeight:600,children:[h,".",g]}),": ",b]},`${t.item_id}.${h}.${g}.${b}`))})}),a.jsx($,{alignItems:"center",w:Ss.actions,pe:3,children:a.jsx($t,{size:"xs",variant:"ghost",children:a.jsx(Fe,{onClick:c,isDisabled:m,isLoading:l,"aria-label":r("queue.cancelItem"),icon:a.jsx(Nc,{})})})})]}),a.jsx(Xd,{in:d,transition:{enter:{duration:.1},exit:{duration:.1}},unmountOnExit:!0,children:a.jsx(Tve,{queueItemDTO:t})})]})},Lve=i.memo($ve),Fve=i.memo(_e((e,t)=>a.jsx($,{...e,ref:t,flexDirection:"column",gap:.5,children:e.children}))),zve=i.memo(Fve),Bve=()=>{const{t:e}=W();return a.jsxs($,{alignItems:"center",gap:4,p:1,pb:2,textTransform:"uppercase",fontWeight:700,fontSize:"xs",letterSpacing:1,children:[a.jsx($,{w:Ss.number,justifyContent:"flex-end",alignItems:"center",children:a.jsx(be,{variant:"subtext",children:"#"})}),a.jsx($,{ps:.5,w:Ss.statusBadge,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.status")})}),a.jsx($,{ps:.5,w:Ss.time,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.time")})}),a.jsx($,{ps:.5,w:Ss.batchId,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.batch")})}),a.jsx($,{ps:.5,w:Ss.fieldValues,alignItems:"center",children:a.jsx(be,{variant:"subtext",children:e("queue.batchFieldValues")})})]})},Hve=i.memo(Bve),Wve={defer:!0,options:{scrollbars:{visibility:"auto",autoHide:"scroll",autoHideDelay:1300,theme:"os-theme-dark"},overflow:{x:"hidden"}}},Vve=fe(pe,({queue:e})=>{const{listCursor:t,listPriority:n}=e;return{listCursor:t,listPriority:n}}),Uve=(e,t)=>t.item_id,Gve={List:zve},Kve=(e,t,n)=>a.jsx(Lve,{index:e,item:t,context:n}),qve=()=>{const{listCursor:e,listPriority:t}=H(Vve),n=te(),r=i.useRef(null),[o,s]=i.useState(null),[l,c]=c2(Wve),{t:d}=W();i.useEffect(()=>{const{current:S}=r;return o&&S&&l({target:S,elements:{viewport:o}}),()=>{var j;return(j=c())==null?void 0:j.destroy()}},[o,l,c]);const{data:f,isLoading:m}=n$({cursor:e,priority:t}),h=i.useMemo(()=>f?r$.getSelectors().selectAll(f):[],[f]),g=i.useCallback(()=>{if(!(f!=null&&f.has_more))return;const S=h[h.length-1];S&&(n(Ax(S.item_id)),n(Tx(S.priority)))},[n,f==null?void 0:f.has_more,h]),[b,y]=i.useState([]),x=i.useCallback(S=>{y(j=>j.includes(S)?j.filter(_=>_!==S):[...j,S])},[]),w=i.useMemo(()=>({openQueueItems:b,toggleQueueItem:x}),[b,x]);return m?a.jsx(U8,{}):h.length?a.jsxs($,{w:"full",h:"full",flexDir:"column",children:[a.jsx(Hve,{}),a.jsx($,{ref:r,w:"full",h:"full",alignItems:"center",justifyContent:"center",children:a.jsx(Ose,{data:h,endReached:g,scrollerRef:s,itemContent:Kve,computeItemKey:Uve,components:Gve,context:w})})]}):a.jsx($,{w:"full",h:"full",alignItems:"center",justifyContent:"center",children:a.jsx(or,{color:"base.400",_dark:{color:"base.500"},children:d("queue.queueEmpty")})})},Xve=i.memo(qve),Qve=()=>{const{data:e}=Ls(),{t}=W();return a.jsxs(sD,{"data-testid":"queue-status",children:[a.jsx(Cs,{label:t("queue.in_progress"),value:(e==null?void 0:e.queue.in_progress)??0}),a.jsx(Cs,{label:t("queue.pending"),value:(e==null?void 0:e.queue.pending)??0}),a.jsx(Cs,{label:t("queue.completed"),value:(e==null?void 0:e.queue.completed)??0}),a.jsx(Cs,{label:t("queue.failed"),value:(e==null?void 0:e.queue.failed)??0}),a.jsx(Cs,{label:t("queue.canceled"),value:(e==null?void 0:e.queue.canceled)??0}),a.jsx(Cs,{label:t("queue.total"),value:(e==null?void 0:e.queue.total)??0})]})},Yve=i.memo(Qve);function Zve(e){return De({tag:"svg",attr:{fill:"currentColor",viewBox:"0 0 16 16"},child:[{tag:"path",attr:{d:"M7.657 6.247c.11-.33.576-.33.686 0l.645 1.937a2.89 2.89 0 0 0 1.829 1.828l1.936.645c.33.11.33.576 0 .686l-1.937.645a2.89 2.89 0 0 0-1.828 1.829l-.645 1.936a.361.361 0 0 1-.686 0l-.645-1.937a2.89 2.89 0 0 0-1.828-1.828l-1.937-.645a.361.361 0 0 1 0-.686l1.937-.645a2.89 2.89 0 0 0 1.828-1.828l.645-1.937zM3.794 1.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387A1.734 1.734 0 0 0 4.593 5.69l-.387 1.162a.217.217 0 0 1-.412 0L3.407 5.69A1.734 1.734 0 0 0 2.31 4.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387A1.734 1.734 0 0 0 3.407 2.31l.387-1.162zM10.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732L9.1 2.137a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L10.863.1z"}}]})(e)}const Jve=()=>{const e=te(),{t}=W(),n=H(d=>d.system.isConnected),[r,{isLoading:o}]=r3({fixedCacheKey:"pruneQueue"}),{finishedCount:s}=Ls(void 0,{selectFromResult:({data:d})=>d?{finishedCount:d.queue.completed+d.queue.canceled+d.queue.failed}:{finishedCount:0}}),l=i.useCallback(async()=>{if(s)try{const d=await r().unwrap();e(lt({title:t("queue.pruneSucceeded",{item_count:d.deleted}),status:"success"})),e(Ax(void 0)),e(Tx(void 0))}catch{e(lt({title:t("queue.pruneFailed"),status:"error"}))}},[s,r,e,t]),c=i.useMemo(()=>!n||!s,[s,n]);return{pruneQueue:l,isLoading:o,finishedCount:s,isDisabled:c}},e1e=({asIconButton:e})=>{const{t}=W(),{pruneQueue:n,isLoading:r,finishedCount:o,isDisabled:s}=Jve();return a.jsx(gi,{isDisabled:s,isLoading:r,asIconButton:e,label:t("queue.prune"),tooltip:t("queue.pruneTooltip",{item_count:o}),icon:a.jsx(Zve,{}),onClick:n,colorScheme:"blue"})},t1e=i.memo(e1e),n1e=()=>{const e=Mt("pauseQueue").isFeatureEnabled,t=Mt("resumeQueue").isFeatureEnabled;return a.jsxs($,{layerStyle:"second",borderRadius:"base",p:2,gap:2,children:[e||t?a.jsxs($t,{w:28,orientation:"vertical",isAttached:!0,size:"sm",children:[t?a.jsx(F7,{}):a.jsx(a.Fragment,{}),e?a.jsx(R7,{}):a.jsx(a.Fragment,{})]}):a.jsx(a.Fragment,{}),a.jsxs($t,{w:28,orientation:"vertical",isAttached:!0,size:"sm",children:[a.jsx(t1e,{}),a.jsx(P2,{})]})]})},r1e=i.memo(n1e),o1e=()=>{const e=Mt("invocationCache").isFeatureEnabled;return a.jsxs($,{layerStyle:"first",borderRadius:"base",w:"full",h:"full",p:2,flexDir:"column",gap:2,children:[a.jsxs($,{gap:2,w:"full",children:[a.jsx(r1e,{}),a.jsx(Yve,{}),e&&a.jsx(Mve,{})]}),a.jsx(Ie,{layerStyle:"second",p:2,borderRadius:"base",w:"full",h:"full",children:a.jsx(Xve,{})})]})},s1e=i.memo(o1e),a1e=()=>a.jsx(s1e,{}),l1e=i.memo(a1e),i1e=()=>a.jsx(zO,{}),c1e=i.memo(i1e),u1e=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,isMovingBoundingBox:r}=e;return{tool:n,isStaging:t,isMovingBoundingBox:r}}),d1e=()=>{const e=te(),{tool:t,isStaging:n,isMovingBoundingBox:r}=H(u1e);return{handleDragStart:i.useCallback(()=>{(t==="move"||n)&&!r&&e(Em(!0))},[e,r,n,t]),handleDragMove:i.useCallback(o=>{if(!((t==="move"||n)&&!r))return;const s={x:o.target.x(),y:o.target.y()};e(b3(s))},[e,r,n,t]),handleDragEnd:i.useCallback(()=>{(t==="move"||n)&&!r&&e(Em(!1))},[e,r,n,t])}},f1e=fe([pe,tr,Lo],({canvas:e},t,n)=>{const{cursorPosition:r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:l,isMaskEnabled:c,shouldSnapToGrid:d}=e;return{activeTabName:t,isCursorOnCanvas:!!r,shouldLockBoundingBox:o,shouldShowBoundingBox:s,tool:l,isStaging:n,isMaskEnabled:c,shouldSnapToGrid:d}}),p1e=()=>{const e=te(),{activeTabName:t,shouldShowBoundingBox:n,tool:r,isStaging:o,isMaskEnabled:s,shouldSnapToGrid:l}=H(f1e),c=i.useRef(null),d=x3(),f=()=>e(y3());tt(["shift+c"],()=>{f()},{enabled:()=>!o,preventDefault:!0},[]);const m=()=>e(Wx(!s));tt(["h"],()=>{m()},{enabled:()=>!o,preventDefault:!0},[s]),tt(["n"],()=>{e(Mm(!l))},{enabled:!0,preventDefault:!0},[l]),tt("esc",()=>{e(o$())},{enabled:()=>!0,preventDefault:!0}),tt("shift+h",()=>{e(s$(!n))},{enabled:()=>!o,preventDefault:!0},[t,n]),tt(["space"],h=>{h.repeat||(d==null||d.container().focus(),r!=="move"&&(c.current=r,e(fc("move"))),r==="move"&&c.current&&c.current!=="move"&&(e(fc(c.current)),c.current="move"))},{keyup:!0,keydown:!0,preventDefault:!0},[r,c])},q2=e=>{const t=e.getPointerPosition(),n=e.getAbsoluteTransform().copy();if(!t||!n)return;const r=n.invert().point(t);return{x:r.x,y:r.y}},iD=()=>{const e=te(),t=G1(),n=x3();return{updateColorUnderCursor:()=>{if(!n||!t)return;const r=n.getPointerPosition();if(!r)return;const o=a$.pixelRatio,[s,l,c,d]=t.getContext().getImageData(r.x*o,r.y*o,1,1).data;s===void 0||l===void 0||c===void 0||d===void 0||e(l$({r:s,g:l,b:c,a:d}))},commitColorUnderCursor:()=>{e(i$())}}},m1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r}=t;return{tool:r,activeTabName:e,isStaging:n}}),h1e=e=>{const t=te(),{tool:n,isStaging:r}=H(m1e),{commitColorUnderCursor:o}=iD();return i.useCallback(s=>{if(!e.current)return;if(e.current.container().focus(),n==="move"||r){t(Em(!0));return}if(n==="colorPicker"){o();return}const l=q2(e.current);l&&(s.evt.preventDefault(),t(C3(!0)),t(c$([l.x,l.y])))},[e,n,r,t,o])},g1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}}),v1e=(e,t,n)=>{const r=te(),{isDrawing:o,tool:s,isStaging:l}=H(g1e),{updateColorUnderCursor:c}=iD();return i.useCallback(()=>{if(!e.current)return;const d=q2(e.current);if(d){if(r(u$(d)),n.current=d,s==="colorPicker"){c();return}!o||s==="move"||l||(t.current=!0,r(w3([d.x,d.y])))}},[t,r,o,l,n,e,s,c])},b1e=()=>{const e=te();return i.useCallback(()=>{e(d$())},[e])},x1e=fe([tr,pe,Lo],(e,{canvas:t},n)=>{const{tool:r,isDrawing:o}=t;return{tool:r,isDrawing:o,activeTabName:e,isStaging:n}}),y1e=(e,t)=>{const n=te(),{tool:r,isDrawing:o,isStaging:s}=H(x1e);return i.useCallback(()=>{if(r==="move"||s){n(Em(!1));return}if(!t.current&&o&&e.current){const l=q2(e.current);if(!l)return;n(w3([l.x,l.y]))}else t.current=!1;n(C3(!1))},[t,n,o,s,e,r])},C1e=fe([pe],({canvas:e})=>{const{isMoveStageKeyHeld:t,stageScale:n}=e;return{isMoveStageKeyHeld:t,stageScale:n}}),w1e=e=>{const t=te(),{isMoveStageKeyHeld:n,stageScale:r}=H(C1e);return i.useCallback(o=>{if(!e.current||n)return;o.evt.preventDefault();const s=e.current.getPointerPosition();if(!s)return;const l={x:(s.x-e.current.x())/r,y:(s.y-e.current.y())/r};let c=o.evt.deltaY;o.evt.ctrlKey&&(c=-c);const d=Zl(r*m$**c,p$,f$),f={x:s.x-l.x*d,y:s.y-l.y*d};t(h$(d)),t(b3(f))},[e,n,r,t])};var dx={exports:{}};(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Konva=void 0;var n=mS;Object.defineProperty(t,"Konva",{enumerable:!0,get:function(){return n.Konva}});const r=mS;e.exports=r.Konva})(dx,dx.exports);var S1e=dx.exports;const Fd=Bd(S1e);var cD={exports:{}};/** + * @license React + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var k1e=function(t){var n={},r=i,o=sm,s=Object.assign;function l(u){for(var p="https://reactjs.org/docs/error-decoder.html?invariant="+u,v=1;vie||k[F]!==P[ie]){var ge=` +`+k[F].replace(" at new "," at ");return u.displayName&&ge.includes("")&&(ge=ge.replace("",u.displayName)),ge}while(1<=F&&0<=ie);break}}}finally{hu=!1,Error.prepareStackTrace=v}return(u=u?u.displayName||u.name:"")?_l(u):""}var v0=Object.prototype.hasOwnProperty,Ma=[],rt=-1;function Dt(u){return{current:u}}function _t(u){0>rt||(u.current=Ma[rt],Ma[rt]=null,rt--)}function Rt(u,p){rt++,Ma[rt]=u.current,u.current=p}var lr={},an=Dt(lr),$n=Dt(!1),br=lr;function wi(u,p){var v=u.type.contextTypes;if(!v)return lr;var C=u.stateNode;if(C&&C.__reactInternalMemoizedUnmaskedChildContext===p)return C.__reactInternalMemoizedMaskedChildContext;var k={},P;for(P in v)k[P]=p[P];return C&&(u=u.stateNode,u.__reactInternalMemoizedUnmaskedChildContext=p,u.__reactInternalMemoizedMaskedChildContext=k),k}function Pr(u){return u=u.childContextTypes,u!=null}function If(){_t($n),_t(an)}function Y2(u,p,v){if(an.current!==lr)throw Error(l(168));Rt(an,p),Rt($n,v)}function Z2(u,p,v){var C=u.stateNode;if(p=p.childContextTypes,typeof C.getChildContext!="function")return v;C=C.getChildContext();for(var k in C)if(!(k in p))throw Error(l(108,R(u)||"Unknown",k));return s({},v,C)}function Pf(u){return u=(u=u.stateNode)&&u.__reactInternalMemoizedMergedChildContext||lr,br=an.current,Rt(an,u),Rt($n,$n.current),!0}function J2(u,p,v){var C=u.stateNode;if(!C)throw Error(l(169));v?(u=Z2(u,p,br),C.__reactInternalMemoizedMergedChildContext=u,_t($n),_t(an),Rt(an,u)):_t($n),Rt($n,v)}var Bo=Math.clz32?Math.clz32:SD,CD=Math.log,wD=Math.LN2;function SD(u){return u>>>=0,u===0?32:31-(CD(u)/wD|0)|0}var Ef=64,Mf=4194304;function vu(u){switch(u&-u){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return u&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return u&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return u}}function Of(u,p){var v=u.pendingLanes;if(v===0)return 0;var C=0,k=u.suspendedLanes,P=u.pingedLanes,F=v&268435455;if(F!==0){var ie=F&~k;ie!==0?C=vu(ie):(P&=F,P!==0&&(C=vu(P)))}else F=v&~k,F!==0?C=vu(F):P!==0&&(C=vu(P));if(C===0)return 0;if(p!==0&&p!==C&&!(p&k)&&(k=C&-C,P=p&-p,k>=P||k===16&&(P&4194240)!==0))return p;if(C&4&&(C|=v&16),p=u.entangledLanes,p!==0)for(u=u.entanglements,p&=C;0v;v++)p.push(u);return p}function bu(u,p,v){u.pendingLanes|=p,p!==536870912&&(u.suspendedLanes=0,u.pingedLanes=0),u=u.eventTimes,p=31-Bo(p),u[p]=v}function _D(u,p){var v=u.pendingLanes&~p;u.pendingLanes=p,u.suspendedLanes=0,u.pingedLanes=0,u.expiredLanes&=p,u.mutableReadLanes&=p,u.entangledLanes&=p,p=u.entanglements;var C=u.eventTimes;for(u=u.expirationTimes;0>=F,k-=F,Vs=1<<32-Bo(p)+k|v<Ft?(Jn=yt,yt=null):Jn=yt.sibling;var zt=He(he,yt,xe[Ft],We);if(zt===null){yt===null&&(yt=Jn);break}u&&yt&&zt.alternate===null&&p(he,yt),ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt,yt=Jn}if(Ft===xe.length)return v(he,yt),mn&&Pl(he,Ft),ct;if(yt===null){for(;FtFt?(Jn=yt,yt=null):Jn=yt.sibling;var La=He(he,yt,zt.value,We);if(La===null){yt===null&&(yt=Jn);break}u&&yt&&La.alternate===null&&p(he,yt),ue=P(La,ue,Ft),Ct===null?ct=La:Ct.sibling=La,Ct=La,yt=Jn}if(zt.done)return v(he,yt),mn&&Pl(he,Ft),ct;if(yt===null){for(;!zt.done;Ft++,zt=xe.next())zt=xt(he,zt.value,We),zt!==null&&(ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt);return mn&&Pl(he,Ft),ct}for(yt=C(he,yt);!zt.done;Ft++,zt=xe.next())zt=dn(yt,he,Ft,zt.value,We),zt!==null&&(u&&zt.alternate!==null&&yt.delete(zt.key===null?Ft:zt.key),ue=P(zt,ue,Ft),Ct===null?ct=zt:Ct.sibling=zt,Ct=zt);return u&&yt.forEach(function(dR){return p(he,dR)}),mn&&Pl(he,Ft),ct}function Xs(he,ue,xe,We){if(typeof xe=="object"&&xe!==null&&xe.type===m&&xe.key===null&&(xe=xe.props.children),typeof xe=="object"&&xe!==null){switch(xe.$$typeof){case d:e:{for(var ct=xe.key,Ct=ue;Ct!==null;){if(Ct.key===ct){if(ct=xe.type,ct===m){if(Ct.tag===7){v(he,Ct.sibling),ue=k(Ct,xe.props.children),ue.return=he,he=ue;break e}}else if(Ct.elementType===ct||typeof ct=="object"&&ct!==null&&ct.$$typeof===_&&bC(ct)===Ct.type){v(he,Ct.sibling),ue=k(Ct,xe.props),ue.ref=yu(he,Ct,xe),ue.return=he,he=ue;break e}v(he,Ct);break}else p(he,Ct);Ct=Ct.sibling}xe.type===m?(ue=Tl(xe.props.children,he.mode,We,xe.key),ue.return=he,he=ue):(We=hp(xe.type,xe.key,xe.props,null,he.mode,We),We.ref=yu(he,ue,xe),We.return=he,he=We)}return F(he);case f:e:{for(Ct=xe.key;ue!==null;){if(ue.key===Ct)if(ue.tag===4&&ue.stateNode.containerInfo===xe.containerInfo&&ue.stateNode.implementation===xe.implementation){v(he,ue.sibling),ue=k(ue,xe.children||[]),ue.return=he,he=ue;break e}else{v(he,ue);break}else p(he,ue);ue=ue.sibling}ue=jv(xe,he.mode,We),ue.return=he,he=ue}return F(he);case _:return Ct=xe._init,Xs(he,ue,Ct(xe._payload),We)}if(Y(xe))return tn(he,ue,xe,We);if(M(xe))return Dr(he,ue,xe,We);Wf(he,xe)}return typeof xe=="string"&&xe!==""||typeof xe=="number"?(xe=""+xe,ue!==null&&ue.tag===6?(v(he,ue.sibling),ue=k(ue,xe),ue.return=he,he=ue):(v(he,ue),ue=kv(xe,he.mode,We),ue.return=he,he=ue),F(he)):v(he,ue)}return Xs}var Pi=xC(!0),yC=xC(!1),Cu={},po=Dt(Cu),wu=Dt(Cu),Ei=Dt(Cu);function hs(u){if(u===Cu)throw Error(l(174));return u}function L0(u,p){Rt(Ei,p),Rt(wu,u),Rt(po,Cu),u=V(p),_t(po),Rt(po,u)}function Mi(){_t(po),_t(wu),_t(Ei)}function CC(u){var p=hs(Ei.current),v=hs(po.current);p=se(v,u.type,p),v!==p&&(Rt(wu,u),Rt(po,p))}function F0(u){wu.current===u&&(_t(po),_t(wu))}var wn=Dt(0);function Vf(u){for(var p=u;p!==null;){if(p.tag===13){var v=p.memoizedState;if(v!==null&&(v=v.dehydrated,v===null||Fo(v)||zo(v)))return p}else if(p.tag===19&&p.memoizedProps.revealOrder!==void 0){if(p.flags&128)return p}else if(p.child!==null){p.child.return=p,p=p.child;continue}if(p===u)break;for(;p.sibling===null;){if(p.return===null||p.return===u)return null;p=p.return}p.sibling.return=p.return,p=p.sibling}return null}var z0=[];function B0(){for(var u=0;uv?v:4,u(!0);var C=H0.transition;H0.transition={};try{u(!1),p()}finally{Lt=v,H0.transition=C}}function FC(){return mo().memoizedState}function LD(u,p,v){var C=Ta(u);if(v={lane:C,action:v,hasEagerState:!1,eagerState:null,next:null},zC(u))BC(p,v);else if(v=uC(u,p,v,C),v!==null){var k=dr();ho(v,u,C,k),HC(v,p,C)}}function FD(u,p,v){var C=Ta(u),k={lane:C,action:v,hasEagerState:!1,eagerState:null,next:null};if(zC(u))BC(p,k);else{var P=u.alternate;if(u.lanes===0&&(P===null||P.lanes===0)&&(P=p.lastRenderedReducer,P!==null))try{var F=p.lastRenderedState,ie=P(F,v);if(k.hasEagerState=!0,k.eagerState=ie,Ho(ie,F)){var ge=p.interleaved;ge===null?(k.next=k,A0(p)):(k.next=ge.next,ge.next=k),p.interleaved=k;return}}catch{}finally{}v=uC(u,p,k,C),v!==null&&(k=dr(),ho(v,u,C,k),HC(v,p,C))}}function zC(u){var p=u.alternate;return u===Sn||p!==null&&p===Sn}function BC(u,p){Su=Gf=!0;var v=u.pending;v===null?p.next=p:(p.next=v.next,v.next=p),u.pending=p}function HC(u,p,v){if(v&4194240){var C=p.lanes;C&=u.pendingLanes,v|=C,p.lanes=v,y0(u,v)}}var Xf={readContext:fo,useCallback:ir,useContext:ir,useEffect:ir,useImperativeHandle:ir,useInsertionEffect:ir,useLayoutEffect:ir,useMemo:ir,useReducer:ir,useRef:ir,useState:ir,useDebugValue:ir,useDeferredValue:ir,useTransition:ir,useMutableSource:ir,useSyncExternalStore:ir,useId:ir,unstable_isNewReconciler:!1},zD={readContext:fo,useCallback:function(u,p){return gs().memoizedState=[u,p===void 0?null:p],u},useContext:fo,useEffect:OC,useImperativeHandle:function(u,p,v){return v=v!=null?v.concat([u]):null,Kf(4194308,4,AC.bind(null,p,u),v)},useLayoutEffect:function(u,p){return Kf(4194308,4,u,p)},useInsertionEffect:function(u,p){return Kf(4,2,u,p)},useMemo:function(u,p){var v=gs();return p=p===void 0?null:p,u=u(),v.memoizedState=[u,p],u},useReducer:function(u,p,v){var C=gs();return p=v!==void 0?v(p):p,C.memoizedState=C.baseState=p,u={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:u,lastRenderedState:p},C.queue=u,u=u.dispatch=LD.bind(null,Sn,u),[C.memoizedState,u]},useRef:function(u){var p=gs();return u={current:u},p.memoizedState=u},useState:EC,useDebugValue:X0,useDeferredValue:function(u){return gs().memoizedState=u},useTransition:function(){var u=EC(!1),p=u[0];return u=$D.bind(null,u[1]),gs().memoizedState=u,[p,u]},useMutableSource:function(){},useSyncExternalStore:function(u,p,v){var C=Sn,k=gs();if(mn){if(v===void 0)throw Error(l(407));v=v()}else{if(v=p(),Zn===null)throw Error(l(349));Ml&30||kC(C,p,v)}k.memoizedState=v;var P={value:v,getSnapshot:p};return k.queue=P,OC(_C.bind(null,C,P,u),[u]),C.flags|=2048,_u(9,jC.bind(null,C,P,v,p),void 0,null),v},useId:function(){var u=gs(),p=Zn.identifierPrefix;if(mn){var v=Us,C=Vs;v=(C&~(1<<32-Bo(C)-1)).toString(32)+v,p=":"+p+"R"+v,v=ku++,0gv&&(p.flags|=128,C=!0,Eu(k,!1),p.lanes=4194304)}else{if(!C)if(u=Vf(P),u!==null){if(p.flags|=128,C=!0,u=u.updateQueue,u!==null&&(p.updateQueue=u,p.flags|=4),Eu(k,!0),k.tail===null&&k.tailMode==="hidden"&&!P.alternate&&!mn)return cr(p),null}else 2*Qn()-k.renderingStartTime>gv&&v!==1073741824&&(p.flags|=128,C=!0,Eu(k,!1),p.lanes=4194304);k.isBackwards?(P.sibling=p.child,p.child=P):(u=k.last,u!==null?u.sibling=P:p.child=P,k.last=P)}return k.tail!==null?(p=k.tail,k.rendering=p,k.tail=p.sibling,k.renderingStartTime=Qn(),p.sibling=null,u=wn.current,Rt(wn,C?u&1|2:u&1),p):(cr(p),null);case 22:case 23:return Cv(),v=p.memoizedState!==null,u!==null&&u.memoizedState!==null!==v&&(p.flags|=8192),v&&p.mode&1?Qr&1073741824&&(cr(p),X&&p.subtreeFlags&6&&(p.flags|=8192)):cr(p),null;case 24:return null;case 25:return null}throw Error(l(156,p.tag))}function qD(u,p){switch(_0(p),p.tag){case 1:return Pr(p.type)&&If(),u=p.flags,u&65536?(p.flags=u&-65537|128,p):null;case 3:return Mi(),_t($n),_t(an),B0(),u=p.flags,u&65536&&!(u&128)?(p.flags=u&-65537|128,p):null;case 5:return F0(p),null;case 13:if(_t(wn),u=p.memoizedState,u!==null&&u.dehydrated!==null){if(p.alternate===null)throw Error(l(340));ji()}return u=p.flags,u&65536?(p.flags=u&-65537|128,p):null;case 19:return _t(wn),null;case 4:return Mi(),null;case 10:return D0(p.type._context),null;case 22:case 23:return Cv(),null;case 24:return null;default:return null}}var ep=!1,ur=!1,XD=typeof WeakSet=="function"?WeakSet:Set,Ke=null;function Di(u,p){var v=u.ref;if(v!==null)if(typeof v=="function")try{v(null)}catch(C){hn(u,p,C)}else v.current=null}function ov(u,p,v){try{v()}catch(C){hn(u,p,C)}}var lw=!1;function QD(u,p){for(ee(u.containerInfo),Ke=p;Ke!==null;)if(u=Ke,p=u.child,(u.subtreeFlags&1028)!==0&&p!==null)p.return=u,Ke=p;else for(;Ke!==null;){u=Ke;try{var v=u.alternate;if(u.flags&1024)switch(u.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var C=v.memoizedProps,k=v.memoizedState,P=u.stateNode,F=P.getSnapshotBeforeUpdate(u.elementType===u.type?C:Vo(u.type,C),k);P.__reactInternalSnapshotBeforeUpdate=F}break;case 3:X&&Ht(u.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;default:throw Error(l(163))}}catch(ie){hn(u,u.return,ie)}if(p=u.sibling,p!==null){p.return=u.return,Ke=p;break}Ke=u.return}return v=lw,lw=!1,v}function Mu(u,p,v){var C=p.updateQueue;if(C=C!==null?C.lastEffect:null,C!==null){var k=C=C.next;do{if((k.tag&u)===u){var P=k.destroy;k.destroy=void 0,P!==void 0&&ov(p,v,P)}k=k.next}while(k!==C)}}function tp(u,p){if(p=p.updateQueue,p=p!==null?p.lastEffect:null,p!==null){var v=p=p.next;do{if((v.tag&u)===u){var C=v.create;v.destroy=C()}v=v.next}while(v!==p)}}function sv(u){var p=u.ref;if(p!==null){var v=u.stateNode;switch(u.tag){case 5:u=Q(v);break;default:u=v}typeof p=="function"?p(u):p.current=u}}function iw(u){var p=u.alternate;p!==null&&(u.alternate=null,iw(p)),u.child=null,u.deletions=null,u.sibling=null,u.tag===5&&(p=u.stateNode,p!==null&&we(p)),u.stateNode=null,u.return=null,u.dependencies=null,u.memoizedProps=null,u.memoizedState=null,u.pendingProps=null,u.stateNode=null,u.updateQueue=null}function cw(u){return u.tag===5||u.tag===3||u.tag===4}function uw(u){e:for(;;){for(;u.sibling===null;){if(u.return===null||cw(u.return))return null;u=u.return}for(u.sibling.return=u.return,u=u.sibling;u.tag!==5&&u.tag!==6&&u.tag!==18;){if(u.flags&2||u.child===null||u.tag===4)continue e;u.child.return=u,u=u.child}if(!(u.flags&2))return u.stateNode}}function av(u,p,v){var C=u.tag;if(C===5||C===6)u=u.stateNode,p?kt(v,u,p):Ue(v,u);else if(C!==4&&(u=u.child,u!==null))for(av(u,p,v),u=u.sibling;u!==null;)av(u,p,v),u=u.sibling}function lv(u,p,v){var C=u.tag;if(C===5||C===6)u=u.stateNode,p?Ne(v,u,p):ye(v,u);else if(C!==4&&(u=u.child,u!==null))for(lv(u,p,v),u=u.sibling;u!==null;)lv(u,p,v),u=u.sibling}var nr=null,Uo=!1;function bs(u,p,v){for(v=v.child;v!==null;)iv(u,p,v),v=v.sibling}function iv(u,p,v){if(fs&&typeof fs.onCommitFiberUnmount=="function")try{fs.onCommitFiberUnmount(Df,v)}catch{}switch(v.tag){case 5:ur||Di(v,p);case 6:if(X){var C=nr,k=Uo;nr=null,bs(u,p,v),nr=C,Uo=k,nr!==null&&(Uo?Ve(nr,v.stateNode):Se(nr,v.stateNode))}else bs(u,p,v);break;case 18:X&&nr!==null&&(Uo?Vn(nr,v.stateNode):g0(nr,v.stateNode));break;case 4:X?(C=nr,k=Uo,nr=v.stateNode.containerInfo,Uo=!0,bs(u,p,v),nr=C,Uo=k):(Z&&(C=v.stateNode.containerInfo,k=pn(C),Wt(C,k)),bs(u,p,v));break;case 0:case 11:case 14:case 15:if(!ur&&(C=v.updateQueue,C!==null&&(C=C.lastEffect,C!==null))){k=C=C.next;do{var P=k,F=P.destroy;P=P.tag,F!==void 0&&(P&2||P&4)&&ov(v,p,F),k=k.next}while(k!==C)}bs(u,p,v);break;case 1:if(!ur&&(Di(v,p),C=v.stateNode,typeof C.componentWillUnmount=="function"))try{C.props=v.memoizedProps,C.state=v.memoizedState,C.componentWillUnmount()}catch(ie){hn(v,p,ie)}bs(u,p,v);break;case 21:bs(u,p,v);break;case 22:v.mode&1?(ur=(C=ur)||v.memoizedState!==null,bs(u,p,v),ur=C):bs(u,p,v);break;default:bs(u,p,v)}}function dw(u){var p=u.updateQueue;if(p!==null){u.updateQueue=null;var v=u.stateNode;v===null&&(v=u.stateNode=new XD),p.forEach(function(C){var k=sR.bind(null,u,C);v.has(C)||(v.add(C),C.then(k,k))})}}function Go(u,p){var v=p.deletions;if(v!==null)for(var C=0;C";case rp:return":has("+(dv(u)||"")+")";case op:return'[role="'+u.value+'"]';case ap:return'"'+u.value+'"';case sp:return'[data-testname="'+u.value+'"]';default:throw Error(l(365))}}function vw(u,p){var v=[];u=[u,0];for(var C=0;Ck&&(k=F),C&=~P}if(C=k,C=Qn()-C,C=(120>C?120:480>C?480:1080>C?1080:1920>C?1920:3e3>C?3e3:4320>C?4320:1960*ZD(C/1960))-C,10u?16:u,Aa===null)var C=!1;else{if(u=Aa,Aa=null,dp=0,It&6)throw Error(l(331));var k=It;for(It|=4,Ke=u.current;Ke!==null;){var P=Ke,F=P.child;if(Ke.flags&16){var ie=P.deletions;if(ie!==null){for(var ge=0;geQn()-hv?Dl(u,0):mv|=v),Or(u,p)}function _w(u,p){p===0&&(u.mode&1?(p=Mf,Mf<<=1,!(Mf&130023424)&&(Mf=4194304)):p=1);var v=dr();u=ms(u,p),u!==null&&(bu(u,p,v),Or(u,v))}function oR(u){var p=u.memoizedState,v=0;p!==null&&(v=p.retryLane),_w(u,v)}function sR(u,p){var v=0;switch(u.tag){case 13:var C=u.stateNode,k=u.memoizedState;k!==null&&(v=k.retryLane);break;case 19:C=u.stateNode;break;default:throw Error(l(314))}C!==null&&C.delete(p),_w(u,v)}var Iw;Iw=function(u,p,v){if(u!==null)if(u.memoizedProps!==p.pendingProps||$n.current)Er=!0;else{if(!(u.lanes&v)&&!(p.flags&128))return Er=!1,GD(u,p,v);Er=!!(u.flags&131072)}else Er=!1,mn&&p.flags&1048576&&oC(p,Tf,p.index);switch(p.lanes=0,p.tag){case 2:var C=p.type;Yf(u,p),u=p.pendingProps;var k=wi(p,an.current);Ii(p,v),k=V0(null,p,C,u,k,v);var P=U0();return p.flags|=1,typeof k=="object"&&k!==null&&typeof k.render=="function"&&k.$$typeof===void 0?(p.tag=1,p.memoizedState=null,p.updateQueue=null,Pr(C)?(P=!0,Pf(p)):P=!1,p.memoizedState=k.state!==null&&k.state!==void 0?k.state:null,T0(p),k.updater=Hf,p.stateNode=k,k._reactInternals=p,$0(p,C,u,v),p=J0(null,p,C,!0,P,v)):(p.tag=0,mn&&P&&j0(p),xr(null,p,k,v),p=p.child),p;case 16:C=p.elementType;e:{switch(Yf(u,p),u=p.pendingProps,k=C._init,C=k(C._payload),p.type=C,k=p.tag=lR(C),u=Vo(C,u),k){case 0:p=Z0(null,p,C,u,v);break e;case 1:p=JC(null,p,C,u,v);break e;case 11:p=qC(null,p,C,u,v);break e;case 14:p=XC(null,p,C,Vo(C.type,u),v);break e}throw Error(l(306,C,""))}return p;case 0:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),Z0(u,p,C,k,v);case 1:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),JC(u,p,C,k,v);case 3:e:{if(ew(p),u===null)throw Error(l(387));C=p.pendingProps,P=p.memoizedState,k=P.element,dC(u,p),Bf(p,C,null,v);var F=p.memoizedState;if(C=F.element,me&&P.isDehydrated)if(P={element:C,isDehydrated:!1,cache:F.cache,pendingSuspenseBoundaries:F.pendingSuspenseBoundaries,transitions:F.transitions},p.updateQueue.baseState=P,p.memoizedState=P,p.flags&256){k=Oi(Error(l(423)),p),p=tw(u,p,C,v,k);break e}else if(C!==k){k=Oi(Error(l(424)),p),p=tw(u,p,C,v,k);break e}else for(me&&(uo=Je(p.stateNode.containerInfo),Xr=p,mn=!0,Wo=null,xu=!1),v=yC(p,null,C,v),p.child=v;v;)v.flags=v.flags&-3|4096,v=v.sibling;else{if(ji(),C===k){p=Ks(u,p,v);break e}xr(u,p,C,v)}p=p.child}return p;case 5:return CC(p),u===null&&P0(p),C=p.type,k=p.pendingProps,P=u!==null?u.memoizedProps:null,F=k.children,A(C,k)?F=null:P!==null&&A(C,P)&&(p.flags|=32),ZC(u,p),xr(u,p,F,v),p.child;case 6:return u===null&&P0(p),null;case 13:return nw(u,p,v);case 4:return L0(p,p.stateNode.containerInfo),C=p.pendingProps,u===null?p.child=Pi(p,null,C,v):xr(u,p,C,v),p.child;case 11:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),qC(u,p,C,k,v);case 7:return xr(u,p,p.pendingProps,v),p.child;case 8:return xr(u,p,p.pendingProps.children,v),p.child;case 12:return xr(u,p,p.pendingProps.children,v),p.child;case 10:e:{if(C=p.type._context,k=p.pendingProps,P=p.memoizedProps,F=k.value,cC(p,C,F),P!==null)if(Ho(P.value,F)){if(P.children===k.children&&!$n.current){p=Ks(u,p,v);break e}}else for(P=p.child,P!==null&&(P.return=p);P!==null;){var ie=P.dependencies;if(ie!==null){F=P.child;for(var ge=ie.firstContext;ge!==null;){if(ge.context===C){if(P.tag===1){ge=Gs(-1,v&-v),ge.tag=2;var Oe=P.updateQueue;if(Oe!==null){Oe=Oe.shared;var Ye=Oe.pending;Ye===null?ge.next=ge:(ge.next=Ye.next,Ye.next=ge),Oe.pending=ge}}P.lanes|=v,ge=P.alternate,ge!==null&&(ge.lanes|=v),R0(P.return,v,p),ie.lanes|=v;break}ge=ge.next}}else if(P.tag===10)F=P.type===p.type?null:P.child;else if(P.tag===18){if(F=P.return,F===null)throw Error(l(341));F.lanes|=v,ie=F.alternate,ie!==null&&(ie.lanes|=v),R0(F,v,p),F=P.sibling}else F=P.child;if(F!==null)F.return=P;else for(F=P;F!==null;){if(F===p){F=null;break}if(P=F.sibling,P!==null){P.return=F.return,F=P;break}F=F.return}P=F}xr(u,p,k.children,v),p=p.child}return p;case 9:return k=p.type,C=p.pendingProps.children,Ii(p,v),k=fo(k),C=C(k),p.flags|=1,xr(u,p,C,v),p.child;case 14:return C=p.type,k=Vo(C,p.pendingProps),k=Vo(C.type,k),XC(u,p,C,k,v);case 15:return QC(u,p,p.type,p.pendingProps,v);case 17:return C=p.type,k=p.pendingProps,k=p.elementType===C?k:Vo(C,k),Yf(u,p),p.tag=1,Pr(C)?(u=!0,Pf(p)):u=!1,Ii(p,v),gC(p,C,k),$0(p,C,k,v),J0(null,p,C,!0,u,v);case 19:return ow(u,p,v);case 22:return YC(u,p,v)}throw Error(l(156,p.tag))};function Pw(u,p){return C0(u,p)}function aR(u,p,v,C){this.tag=u,this.key=v,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=p,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=C,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function go(u,p,v,C){return new aR(u,p,v,C)}function Sv(u){return u=u.prototype,!(!u||!u.isReactComponent)}function lR(u){if(typeof u=="function")return Sv(u)?1:0;if(u!=null){if(u=u.$$typeof,u===x)return 11;if(u===j)return 14}return 2}function $a(u,p){var v=u.alternate;return v===null?(v=go(u.tag,p,u.key,u.mode),v.elementType=u.elementType,v.type=u.type,v.stateNode=u.stateNode,v.alternate=u,u.alternate=v):(v.pendingProps=p,v.type=u.type,v.flags=0,v.subtreeFlags=0,v.deletions=null),v.flags=u.flags&14680064,v.childLanes=u.childLanes,v.lanes=u.lanes,v.child=u.child,v.memoizedProps=u.memoizedProps,v.memoizedState=u.memoizedState,v.updateQueue=u.updateQueue,p=u.dependencies,v.dependencies=p===null?null:{lanes:p.lanes,firstContext:p.firstContext},v.sibling=u.sibling,v.index=u.index,v.ref=u.ref,v}function hp(u,p,v,C,k,P){var F=2;if(C=u,typeof u=="function")Sv(u)&&(F=1);else if(typeof u=="string")F=5;else e:switch(u){case m:return Tl(v.children,k,P,p);case h:F=8,k|=8;break;case g:return u=go(12,v,p,k|2),u.elementType=g,u.lanes=P,u;case w:return u=go(13,v,p,k),u.elementType=w,u.lanes=P,u;case S:return u=go(19,v,p,k),u.elementType=S,u.lanes=P,u;case I:return gp(v,k,P,p);default:if(typeof u=="object"&&u!==null)switch(u.$$typeof){case b:F=10;break e;case y:F=9;break e;case x:F=11;break e;case j:F=14;break e;case _:F=16,C=null;break e}throw Error(l(130,u==null?u:typeof u,""))}return p=go(F,v,p,k),p.elementType=u,p.type=C,p.lanes=P,p}function Tl(u,p,v,C){return u=go(7,u,C,p),u.lanes=v,u}function gp(u,p,v,C){return u=go(22,u,C,p),u.elementType=I,u.lanes=v,u.stateNode={isHidden:!1},u}function kv(u,p,v){return u=go(6,u,null,p),u.lanes=v,u}function jv(u,p,v){return p=go(4,u.children!==null?u.children:[],u.key,p),p.lanes=v,p.stateNode={containerInfo:u.containerInfo,pendingChildren:null,implementation:u.implementation},p}function iR(u,p,v,C,k){this.tag=p,this.containerInfo=u,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=z,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=x0(0),this.expirationTimes=x0(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=x0(0),this.identifierPrefix=C,this.onRecoverableError=k,me&&(this.mutableSourceEagerHydrationData=null)}function Ew(u,p,v,C,k,P,F,ie,ge){return u=new iR(u,p,v,ie,ge),p===1?(p=1,P===!0&&(p|=8)):p=0,P=go(3,null,null,p),u.current=P,P.stateNode=u,P.memoizedState={element:C,isDehydrated:v,cache:null,transitions:null,pendingSuspenseBoundaries:null},T0(P),u}function Mw(u){if(!u)return lr;u=u._reactInternals;e:{if(N(u)!==u||u.tag!==1)throw Error(l(170));var p=u;do{switch(p.tag){case 3:p=p.stateNode.context;break e;case 1:if(Pr(p.type)){p=p.stateNode.__reactInternalMemoizedMergedChildContext;break e}}p=p.return}while(p!==null);throw Error(l(171))}if(u.tag===1){var v=u.type;if(Pr(v))return Z2(u,v,p)}return p}function Ow(u){var p=u._reactInternals;if(p===void 0)throw typeof u.render=="function"?Error(l(188)):(u=Object.keys(u).join(","),Error(l(268,u)));return u=U(p),u===null?null:u.stateNode}function Dw(u,p){if(u=u.memoizedState,u!==null&&u.dehydrated!==null){var v=u.retryLane;u.retryLane=v!==0&&v=Oe&&P>=xt&&k<=Ye&&F<=He){u.splice(p,1);break}else if(C!==Oe||v.width!==ge.width||HeF){if(!(P!==xt||v.height!==ge.height||Yek)){Oe>C&&(ge.width+=Oe-C,ge.x=C),YeP&&(ge.height+=xt-P,ge.y=P),Hev&&(v=F)),F ")+` + +No matching component was found for: + `)+u.join(" > ")}return null},n.getPublicRootInstance=function(u){if(u=u.current,!u.child)return null;switch(u.child.tag){case 5:return Q(u.child.stateNode);default:return u.child.stateNode}},n.injectIntoDevTools=function(u){if(u={bundleType:u.bundleType,version:u.version,rendererPackageName:u.rendererPackageName,rendererConfig:u.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:c.ReactCurrentDispatcher,findHostInstanceByFiber:cR,findFiberByHostInstance:u.findFiberByHostInstance||uR,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0"},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")u=!1;else{var p=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(p.isDisabled||!p.supportsFiber)u=!0;else{try{Df=p.inject(u),fs=p}catch{}u=!!p.checkDCE}}return u},n.isAlreadyRendering=function(){return!1},n.observeVisibleRects=function(u,p,v,C){if(!$e)throw Error(l(363));u=fv(u,p);var k=dt(u,v,C).disconnect;return{disconnect:function(){k()}}},n.registerMutableSourceForHydration=function(u,p){var v=p._getVersion;v=v(p._source),u.mutableSourceEagerHydrationData==null?u.mutableSourceEagerHydrationData=[p,v]:u.mutableSourceEagerHydrationData.push(p,v)},n.runWithPriority=function(u,p){var v=Lt;try{return Lt=u,p()}finally{Lt=v}},n.shouldError=function(){return null},n.shouldSuspend=function(){return!1},n.updateContainer=function(u,p,v,C){var k=p.current,P=dr(),F=Ta(k);return v=Mw(v),p.context===null?p.context=v:p.pendingContext=v,p=Gs(P,F),p.payload={element:u},C=C===void 0?null:C,C!==null&&(p.callback=C),u=Da(k,p,F),u!==null&&(ho(u,k,F,P),zf(u,k,F)),F},n};cD.exports=k1e;var j1e=cD.exports;const _1e=Bd(j1e);var uD={exports:{}},bi={};/** + * @license React + * react-reconciler-constants.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */bi.ConcurrentRoot=1;bi.ContinuousEventPriority=4;bi.DefaultEventPriority=16;bi.DiscreteEventPriority=1;bi.IdleEventPriority=536870912;bi.LegacyRoot=0;uD.exports=bi;var dD=uD.exports;const J_={children:!0,ref:!0,key:!0,style:!0,forwardedRef:!0,unstable_applyCache:!0,unstable_applyDrawHitFromCache:!0};let eI=!1,tI=!1;const X2=".react-konva-event",I1e=`ReactKonva: You have a Konva node with draggable = true and position defined but no onDragMove or onDragEnd events are handled. +Position of a node will be changed during drag&drop, so you should update state of the react app as well. +Consider to add onDragMove or onDragEnd events. +For more info see: https://github.com/konvajs/react-konva/issues/256 +`,P1e=`ReactKonva: You are using "zIndex" attribute for a Konva node. +react-konva may get confused with ordering. Just define correct order of elements in your render function of a component. +For more info see: https://github.com/konvajs/react-konva/issues/194 +`,E1e={};function m0(e,t,n=E1e){if(!eI&&"zIndex"in t&&(console.warn(P1e),eI=!0),!tI&&t.draggable){var r=t.x!==void 0||t.y!==void 0,o=t.onDragEnd||t.onDragMove;r&&!o&&(console.warn(I1e),tI=!0)}for(var s in n)if(!J_[s]){var l=s.slice(0,2)==="on",c=n[s]!==t[s];if(l&&c){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),e.off(d,n[s])}var f=!t.hasOwnProperty(s);f&&e.setAttr(s,void 0)}var m=t._useStrictMode,h={},g=!1;const b={};for(var s in t)if(!J_[s]){var l=s.slice(0,2)==="on",y=n[s]!==t[s];if(l&&y){var d=s.substr(2).toLowerCase();d.substr(0,7)==="content"&&(d="content"+d.substr(7,1).toUpperCase()+d.substr(8)),t[s]&&(b[d]=t[s])}!l&&(t[s]!==n[s]||m&&t[s]!==e.getAttr(s))&&(g=!0,h[s]=t[s])}g&&(e.setAttrs(h),jl(e));for(var d in b)e.on(d+X2,b[d])}function jl(e){if(!g$.Konva.autoDrawEnabled){var t=e.getLayer()||e.getStage();t&&t.batchDraw()}}const fD={},M1e={};Fd.Node.prototype._applyProps=m0;function O1e(e,t){if(typeof t=="string"){console.error(`Do not use plain text as child of Konva.Node. You are using text: ${t}`);return}e.add(t),jl(e)}function D1e(e,t,n){let r=Fd[e];r||(console.error(`Konva has no node with the type ${e}. Group will be used instead. If you use minimal version of react-konva, just import required nodes into Konva: "import "konva/lib/shapes/${e}" If you want to render DOM elements as part of canvas tree take a look into this demo: https://konvajs.github.io/docs/react/DOM_Portal.html`),r=Fd.Group);const o={},s={};for(var l in t){var c=l.slice(0,2)==="on";c?s[l]=t[l]:o[l]=t[l]}const d=new r(o);return m0(d,s),d}function R1e(e,t,n){console.error(`Text components are not supported for now in ReactKonva. Your text is: "${e}"`)}function A1e(e,t,n){return!1}function T1e(e){return e}function N1e(){return null}function $1e(){return null}function L1e(e,t,n,r){return M1e}function F1e(){}function z1e(e){}function B1e(e,t){return!1}function H1e(){return fD}function W1e(){return fD}const V1e=setTimeout,U1e=clearTimeout,G1e=-1;function K1e(e,t){return!1}const q1e=!1,X1e=!0,Q1e=!0;function Y1e(e,t){t.parent===e?t.moveToTop():e.add(t),jl(e)}function Z1e(e,t){t.parent===e?t.moveToTop():e.add(t),jl(e)}function pD(e,t,n){t._remove(),e.add(t),t.setZIndex(n.getZIndex()),jl(e)}function J1e(e,t,n){pD(e,t,n)}function ebe(e,t){t.destroy(),t.off(X2),jl(e)}function tbe(e,t){t.destroy(),t.off(X2),jl(e)}function nbe(e,t,n){console.error(`Text components are not yet supported in ReactKonva. You text is: "${n}"`)}function rbe(e,t,n){}function obe(e,t,n,r,o){m0(e,o,r)}function sbe(e){e.hide(),jl(e)}function abe(e){}function lbe(e,t){(t.visible==null||t.visible)&&e.show()}function ibe(e,t){}function cbe(e){}function ube(){}const dbe=()=>dD.DefaultEventPriority,fbe=Object.freeze(Object.defineProperty({__proto__:null,appendChild:Y1e,appendChildToContainer:Z1e,appendInitialChild:O1e,cancelTimeout:U1e,clearContainer:cbe,commitMount:rbe,commitTextUpdate:nbe,commitUpdate:obe,createInstance:D1e,createTextInstance:R1e,detachDeletedInstance:ube,finalizeInitialChildren:A1e,getChildHostContext:W1e,getCurrentEventPriority:dbe,getPublicInstance:T1e,getRootHostContext:H1e,hideInstance:sbe,hideTextInstance:abe,idlePriority:sm.unstable_IdlePriority,insertBefore:pD,insertInContainerBefore:J1e,isPrimaryRenderer:q1e,noTimeout:G1e,now:sm.unstable_now,prepareForCommit:N1e,preparePortalMount:$1e,prepareUpdate:L1e,removeChild:ebe,removeChildFromContainer:tbe,resetAfterCommit:F1e,resetTextContent:z1e,run:sm.unstable_runWithPriority,scheduleTimeout:V1e,shouldDeprioritizeSubtree:B1e,shouldSetTextContent:K1e,supportsMutation:Q1e,unhideInstance:lbe,unhideTextInstance:ibe,warnsIfNotActing:X1e},Symbol.toStringTag,{value:"Module"}));var pbe=Object.defineProperty,mbe=Object.defineProperties,hbe=Object.getOwnPropertyDescriptors,nI=Object.getOwnPropertySymbols,gbe=Object.prototype.hasOwnProperty,vbe=Object.prototype.propertyIsEnumerable,rI=(e,t,n)=>t in e?pbe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,oI=(e,t)=>{for(var n in t||(t={}))gbe.call(t,n)&&rI(e,n,t[n]);if(nI)for(var n of nI(t))vbe.call(t,n)&&rI(e,n,t[n]);return e},bbe=(e,t)=>mbe(e,hbe(t));function mD(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){const o=mD(r,t,n);if(o)return o;r=t?null:r.sibling}}function hD(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}const Q2=hD(i.createContext(null));class gD extends i.Component{render(){return i.createElement(Q2.Provider,{value:this._reactInternals},this.props.children)}}const{ReactCurrentOwner:sI,ReactCurrentDispatcher:aI}=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function xbe(){const e=i.useContext(Q2);if(e===null)throw new Error("its-fine: useFiber must be called within a !");const t=i.useId();return i.useMemo(()=>{for(const r of[sI==null?void 0:sI.current,e,e==null?void 0:e.alternate]){if(!r)continue;const o=mD(r,!1,s=>{let l=s.memoizedState;for(;l;){if(l.memoizedState===t)return!0;l=l.next}});if(o)return o}},[e,t])}function ybe(){var e,t;const n=xbe(),[r]=i.useState(()=>new Map);r.clear();let o=n;for(;o;){const s=(e=o.type)==null?void 0:e._context;s&&s!==Q2&&!r.has(s)&&r.set(s,(t=aI==null?void 0:aI.current)==null?void 0:t.readContext(hD(s))),o=o.return}return r}function Cbe(){const e=ybe();return i.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>i.createElement(t,null,i.createElement(n.Provider,bbe(oI({},r),{value:e.get(n)}))),t=>i.createElement(gD,oI({},t))),[e])}function wbe(e){const t=B.useRef({});return B.useLayoutEffect(()=>{t.current=e}),B.useLayoutEffect(()=>()=>{t.current={}},[]),t.current}const Sbe=e=>{const t=B.useRef(),n=B.useRef(),r=B.useRef(),o=wbe(e),s=Cbe(),l=c=>{const{forwardedRef:d}=e;d&&(typeof d=="function"?d(c):d.current=c)};return B.useLayoutEffect(()=>(n.current=new Fd.Stage({width:e.width,height:e.height,container:t.current}),l(n.current),r.current=td.createContainer(n.current,dD.LegacyRoot,!1,null),td.updateContainer(B.createElement(s,{},e.children),r.current),()=>{Fd.isBrowser&&(l(null),td.updateContainer(null,r.current,null),n.current.destroy())}),[]),B.useLayoutEffect(()=>{l(n.current),m0(n.current,e,o),td.updateContainer(B.createElement(s,{},e.children),r.current,null)}),B.createElement("div",{ref:t,id:e.id,accessKey:e.accessKey,className:e.className,role:e.role,style:e.style,tabIndex:e.tabIndex,title:e.title})},Gu="Layer",Ns="Group",$s="Rect",$l="Circle",Vh="Line",vD="Image",kbe="Text",jbe="Transformer",td=_1e(fbe);td.injectIntoDevTools({findHostInstanceByFiber:()=>null,bundleType:0,version:B.version,rendererPackageName:"react-konva"});const _be=B.forwardRef((e,t)=>B.createElement(gD,{},B.createElement(Sbe,{...e,forwardedRef:t}))),Ibe=fe(pe,({canvas:e})=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,stageDimensions:r,stageScale:o,shouldDarkenOutsideBoundingBox:s,stageCoordinates:l}=e;return{boundingBoxCoordinates:t,boundingBoxDimensions:n,shouldDarkenOutsideBoundingBox:s,stageCoordinates:l,stageDimensions:r,stageScale:o}}),Pbe=()=>{const{boundingBoxCoordinates:e,boundingBoxDimensions:t,shouldDarkenOutsideBoundingBox:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=H(Ibe);return a.jsxs(Ns,{children:[a.jsx($s,{offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fill:"rgba(0,0,0,0.4)",listening:!1,visible:n}),a.jsx($s,{x:e.x,y:e.y,width:t.width,height:t.height,fill:"rgb(255,255,255)",listening:!1,visible:n,globalCompositeOperation:"destination-out"})]})},Ebe=i.memo(Pbe),Mbe=fe([pe],({canvas:e})=>{const{stageScale:t,stageCoordinates:n,stageDimensions:r}=e;return{stageScale:t,stageCoordinates:n,stageDimensions:r}}),Obe=()=>{const{stageScale:e,stageCoordinates:t,stageDimensions:n}=H(Mbe),{colorMode:r}=ya(),[o,s]=i.useState([]),[l,c]=Zo("colors",["base.800","base.200"]),d=i.useCallback(f=>f/e,[e]);return i.useLayoutEffect(()=>{const{width:f,height:m}=n,{x:h,y:g}=t,b={x1:0,y1:0,x2:f,y2:m,offset:{x:d(h),y:d(g)}},y={x:Math.ceil(d(h)/64)*64,y:Math.ceil(d(g)/64)*64},x={x1:-y.x,y1:-y.y,x2:d(f)-y.x+64,y2:d(m)-y.y+64},S={x1:Math.min(b.x1,x.x1),y1:Math.min(b.y1,x.y1),x2:Math.max(b.x2,x.x2),y2:Math.max(b.y2,x.y2)},j=S.x2-S.x1,_=S.y2-S.y1,I=Math.round(j/64)+1,E=Math.round(_/64)+1,M=hS(0,I).map(R=>a.jsx(Vh,{x:S.x1+R*64,y:S.y1,points:[0,0,0,_],stroke:r==="dark"?l:c,strokeWidth:1},`x_${R}`)),D=hS(0,E).map(R=>a.jsx(Vh,{x:S.x1,y:S.y1+R*64,points:[0,0,j,0],stroke:r==="dark"?l:c,strokeWidth:1},`y_${R}`));s(M.concat(D))},[e,t,n,d,r,l,c]),a.jsx(Ns,{children:o})},Dbe=i.memo(Obe),Rbe=v$([pe],({system:e,canvas:t})=>{const{denoiseProgress:n}=e,{boundingBox:r}=t.layerState.stagingArea,{batchIds:o}=t;return{boundingBox:r,progressImage:n&&o.includes(n.batch_id)?n.progress_image:void 0}}),Abe=e=>{const{...t}=e,{progressImage:n,boundingBox:r}=H(Rbe),[o,s]=i.useState(null);return i.useEffect(()=>{if(!n)return;const l=new Image;l.onload=()=>{s(l)},l.src=n.dataURL},[n]),n&&r&&o?a.jsx(vD,{x:r.x,y:r.y,width:r.width,height:r.height,image:o,listening:!1,...t}):null},Tbe=i.memo(Abe),Ql=e=>{const{r:t,g:n,b:r,a:o}=e;return`rgba(${t}, ${n}, ${r}, ${o})`},Nbe=fe(pe,({canvas:e})=>{const{maskColor:t,stageCoordinates:n,stageDimensions:r,stageScale:o}=e;return{stageCoordinates:n,stageDimensions:r,stageScale:o,maskColorString:Ql(t)}}),lI=e=>`data:image/svg+xml;utf8, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`.replaceAll("black",e),$be=e=>{const{...t}=e,{maskColorString:n,stageCoordinates:r,stageDimensions:o,stageScale:s}=H(Nbe),[l,c]=i.useState(null),[d,f]=i.useState(0),m=i.useRef(null),h=i.useCallback(()=>{f(d+1),setTimeout(h,500)},[d]);return i.useEffect(()=>{if(l)return;const g=new Image;g.onload=()=>{c(g)},g.src=lI(n)},[l,n]),i.useEffect(()=>{l&&(l.src=lI(n))},[l,n]),i.useEffect(()=>{const g=setInterval(()=>f(b=>(b+1)%5),50);return()=>clearInterval(g)},[]),!l||!Ni(r.x)||!Ni(r.y)||!Ni(s)||!Ni(o.width)||!Ni(o.height)?null:a.jsx($s,{ref:m,offsetX:r.x/s,offsetY:r.y/s,height:o.height/s,width:o.width/s,fillPatternImage:l,fillPatternOffsetY:Ni(d)?d:0,fillPatternRepeat:"repeat",fillPatternScale:{x:1/s,y:1/s},listening:!0,globalCompositeOperation:"source-in",...t})},Lbe=i.memo($be),Fbe=fe([pe],({canvas:e})=>({objects:e.layerState.objects})),zbe=e=>{const{...t}=e,{objects:n}=H(Fbe);return a.jsx(Ns,{listening:!1,...t,children:n.filter(b$).map((r,o)=>a.jsx(Vh,{points:r.points,stroke:"rgb(0,0,0)",strokeWidth:r.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:r.tool==="brush"?"source-over":"destination-out"},o))})},Bbe=i.memo(zbe);var Ll=i,Hbe=function(t,n,r){const o=Ll.useRef("loading"),s=Ll.useRef(),[l,c]=Ll.useState(0),d=Ll.useRef(),f=Ll.useRef(),m=Ll.useRef();return(d.current!==t||f.current!==n||m.current!==r)&&(o.current="loading",s.current=void 0,d.current=t,f.current=n,m.current=r),Ll.useLayoutEffect(function(){if(!t)return;var h=document.createElement("img");function g(){o.current="loaded",s.current=h,c(Math.random())}function b(){o.current="failed",s.current=void 0,c(Math.random())}return h.addEventListener("load",g),h.addEventListener("error",b),n&&(h.crossOrigin=n),r&&(h.referrerPolicy=r),h.src=t,function(){h.removeEventListener("load",g),h.removeEventListener("error",b)}},[t,n,r]),[s.current,o.current]};const Wbe=Bd(Hbe),Vbe=({canvasImage:e})=>{const[t,n,r,o]=Zo("colors",["base.400","base.500","base.700","base.900"]),s=ia(t,n),l=ia(r,o),{t:c}=W();return a.jsxs(Ns,{children:[a.jsx($s,{x:e.x,y:e.y,width:e.width,height:e.height,fill:s}),a.jsx(kbe,{x:e.x,y:e.y,width:e.width,height:e.height,align:"center",verticalAlign:"middle",fontFamily:'"Inter Variable", sans-serif',fontSize:e.width/16,fontStyle:"600",text:c("common.imageFailedToLoad"),fill:l})]})},Ube=i.memo(Vbe),Gbe=e=>{const{x:t,y:n,imageName:r}=e.canvasImage,{currentData:o,isError:s}=jo(r??Br),[l,c]=Wbe((o==null?void 0:o.image_url)??"",AI.get()?"use-credentials":"anonymous");return s||c==="failed"?a.jsx(Ube,{canvasImage:e.canvasImage}):a.jsx(vD,{x:t,y:n,image:l,listening:!1})},bD=i.memo(Gbe),Kbe=fe([pe],({canvas:e})=>{const{layerState:{objects:t}}=e;return{objects:t}}),qbe=()=>{const{objects:e}=H(Kbe);return e?a.jsx(Ns,{name:"outpainting-objects",listening:!1,children:e.map((t,n)=>{if(x$(t))return a.jsx(bD,{canvasImage:t},n);if(y$(t)){const r=a.jsx(Vh,{points:t.points,stroke:t.color?Ql(t.color):"rgb(0,0,0)",strokeWidth:t.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,listening:!1,globalCompositeOperation:t.tool==="brush"?"source-over":"destination-out"},n);return t.clip?a.jsx(Ns,{clipX:t.clip.x,clipY:t.clip.y,clipWidth:t.clip.width,clipHeight:t.clip.height,children:r},n):r}else{if(C$(t))return a.jsx($s,{x:t.x,y:t.y,width:t.width,height:t.height,fill:Ql(t.color)},n);if(w$(t))return a.jsx($s,{x:t.x,y:t.y,width:t.width,height:t.height,fill:"rgb(255, 255, 255)",globalCompositeOperation:"destination-out"},n)}})}):null},Xbe=i.memo(qbe),Qbe=fe([pe],({canvas:e})=>{const{layerState:t,shouldShowStagingImage:n,shouldShowStagingOutline:r,boundingBoxCoordinates:o,boundingBoxDimensions:s}=e,{selectedImageIndex:l,images:c,boundingBox:d}=t.stagingArea;return{currentStagingAreaImage:c.length>0&&l!==void 0?c[l]:void 0,isOnFirstImage:l===0,isOnLastImage:l===c.length-1,shouldShowStagingImage:n,shouldShowStagingOutline:r,x:(d==null?void 0:d.x)??o.x,y:(d==null?void 0:d.y)??o.y,width:(d==null?void 0:d.width)??s.width,height:(d==null?void 0:d.height)??s.height}}),Ybe=e=>{const{...t}=e,{currentStagingAreaImage:n,shouldShowStagingImage:r,shouldShowStagingOutline:o,x:s,y:l,width:c,height:d}=H(Qbe);return a.jsxs(Ns,{...t,children:[r&&n&&a.jsx(bD,{canvasImage:n}),o&&a.jsxs(Ns,{children:[a.jsx($s,{x:s,y:l,width:c,height:d,strokeWidth:1,stroke:"white",strokeScaleEnabled:!1}),a.jsx($s,{x:s,y:l,width:c,height:d,dash:[4,4],strokeWidth:1,stroke:"black",strokeScaleEnabled:!1})]})]})},Zbe=i.memo(Ybe),Jbe=fe([pe],({canvas:e})=>{const{layerState:{stagingArea:{images:t,selectedImageIndex:n}},shouldShowStagingOutline:r,shouldShowStagingImage:o}=e;return{currentIndex:n,total:t.length,currentStagingAreaImage:t.length>0?t[n]:void 0,shouldShowStagingImage:o,shouldShowStagingOutline:r}}),exe=()=>{const e=te(),{currentStagingAreaImage:t,shouldShowStagingImage:n,currentIndex:r,total:o}=H(Jbe),{t:s}=W(),l=i.useCallback(()=>{e(gS(!0))},[e]),c=i.useCallback(()=>{e(gS(!1))},[e]),d=i.useCallback(()=>e(S$()),[e]),f=i.useCallback(()=>e(k$()),[e]),m=i.useCallback(()=>e(j$()),[e]);tt(["left"],d,{enabled:()=>!0,preventDefault:!0}),tt(["right"],f,{enabled:()=>!0,preventDefault:!0}),tt(["enter"],()=>m,{enabled:()=>!0,preventDefault:!0});const{data:h}=jo((t==null?void 0:t.imageName)??Br),g=i.useCallback(()=>{e(_$(!n))},[e,n]),b=i.useCallback(()=>{h&&e(I$({imageDTO:h}))},[e,h]),y=i.useCallback(()=>{e(P$())},[e]);return t?a.jsxs($,{pos:"absolute",bottom:4,gap:2,w:"100%",align:"center",justify:"center",onMouseEnter:l,onMouseLeave:c,children:[a.jsxs($t,{isAttached:!0,borderRadius:"base",shadow:"dark-lg",children:[a.jsx(Fe,{tooltip:`${s("unifiedCanvas.previous")} (Left)`,"aria-label":`${s("unifiedCanvas.previous")} (Left)`,icon:a.jsx(dte,{}),onClick:d,colorScheme:"accent",isDisabled:!n}),a.jsx(Xe,{colorScheme:"base",pointerEvents:"none",isDisabled:!n,minW:20,children:`${r+1}/${o}`}),a.jsx(Fe,{tooltip:`${s("unifiedCanvas.next")} (Right)`,"aria-label":`${s("unifiedCanvas.next")} (Right)`,icon:a.jsx(fte,{}),onClick:f,colorScheme:"accent",isDisabled:!n})]}),a.jsxs($t,{isAttached:!0,borderRadius:"base",shadow:"dark-lg",children:[a.jsx(Fe,{tooltip:`${s("unifiedCanvas.accept")} (Enter)`,"aria-label":`${s("unifiedCanvas.accept")} (Enter)`,icon:a.jsx($M,{}),onClick:m,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s(n?"unifiedCanvas.showResultsOn":"unifiedCanvas.showResultsOff"),"aria-label":s(n?"unifiedCanvas.showResultsOn":"unifiedCanvas.showResultsOff"),"data-alert":!n,icon:n?a.jsx(Ete,{}):a.jsx(Pte,{}),onClick:g,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s("unifiedCanvas.saveToGallery"),"aria-label":s("unifiedCanvas.saveToGallery"),isDisabled:!h||!h.is_intermediate,icon:a.jsx(gf,{}),onClick:b,colorScheme:"accent"}),a.jsx(Fe,{tooltip:s("unifiedCanvas.discardAll"),"aria-label":s("unifiedCanvas.discardAll"),icon:a.jsx(Nc,{}),onClick:y,colorScheme:"error",fontSize:20})]})]}):null},txe=i.memo(exe),uc=e=>Math.round(e*100)/100,nxe=()=>{const e=H(c=>c.canvas.layerState),t=H(c=>c.canvas.boundingBoxCoordinates),n=H(c=>c.canvas.boundingBoxDimensions),r=H(c=>c.canvas.isMaskEnabled),o=H(c=>c.canvas.shouldPreserveMaskedArea),[s,l]=i.useState();return i.useEffect(()=>{l(void 0)},[e,t,n,r,o]),nne(async()=>{const c=await E$(e,t,n,r,o);if(!c)return;const{baseImageData:d,maskImageData:f}=c,m=M$(d,f);l(m)},1e3,[e,t,n,r,o]),s},rxe=()=>{const e=nxe(),{t}=W(),n=i.useMemo(()=>({txt2img:t("common.txt2img"),img2img:t("common.img2img"),inpaint:t("common.inpaint"),outpaint:t("common.outpaint")}),[t]);return a.jsxs(Ie,{children:[t("accessibility.mode"),":"," ",e?n[e]:"..."]})},oxe=i.memo(rxe),sxe=fe([pe],({canvas:e})=>{const{cursorPosition:t}=e,{cursorX:n,cursorY:r}=t?{cursorX:t.x,cursorY:t.y}:{cursorX:-1,cursorY:-1};return{cursorCoordinatesString:`(${uc(n)}, ${uc(r)})`}});function axe(){const{cursorCoordinatesString:e}=H(sxe),{t}=W();return a.jsx(Ie,{children:`${t("unifiedCanvas.cursorPosition")}: ${e}`})}const fx="var(--invokeai-colors-warning-500)",lxe=fe([pe],({canvas:e})=>{const{stageDimensions:{width:t,height:n},stageCoordinates:{x:r,y:o},boundingBoxDimensions:{width:s,height:l},scaledBoundingBoxDimensions:{width:c,height:d},boundingBoxCoordinates:{x:f,y:m},stageScale:h,shouldShowCanvasDebugInfo:g,layer:b,boundingBoxScaleMethod:y,shouldPreserveMaskedArea:x}=e;let w="inherit";return(y==="none"&&(s<512||l<512)||y==="manual"&&c*d<512*512)&&(w=fx),{activeLayerColor:b==="mask"?fx:"inherit",layer:b,boundingBoxColor:w,boundingBoxCoordinatesString:`(${uc(f)}, ${uc(m)})`,boundingBoxDimensionsString:`${s}×${l}`,scaledBoundingBoxDimensionsString:`${c}×${d}`,canvasCoordinatesString:`${uc(r)}×${uc(o)}`,canvasDimensionsString:`${t}×${n}`,canvasScaleString:Math.round(h*100),shouldShowCanvasDebugInfo:g,shouldShowBoundingBox:y!=="auto",shouldShowScaledBoundingBox:y!=="none",shouldPreserveMaskedArea:x}}),ixe=()=>{const{activeLayerColor:e,layer:t,boundingBoxColor:n,boundingBoxCoordinatesString:r,boundingBoxDimensionsString:o,scaledBoundingBoxDimensionsString:s,shouldShowScaledBoundingBox:l,canvasCoordinatesString:c,canvasDimensionsString:d,canvasScaleString:f,shouldShowCanvasDebugInfo:m,shouldShowBoundingBox:h,shouldPreserveMaskedArea:g}=H(lxe),{t:b}=W();return a.jsxs($,{sx:{flexDirection:"column",position:"absolute",top:0,insetInlineStart:0,opacity:.65,display:"flex",fontSize:"sm",padding:1,px:2,minWidth:48,margin:1,borderRadius:"base",pointerEvents:"none",bg:"base.200",_dark:{bg:"base.800"}},children:[a.jsx(oxe,{}),a.jsx(Ie,{style:{color:e},children:`${b("unifiedCanvas.activeLayer")}: ${b(`unifiedCanvas.${t}`)}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasScale")}: ${f}%`}),g&&a.jsxs(Ie,{style:{color:fx},children:[b("unifiedCanvas.preserveMaskedArea"),": ",b("common.on")]}),h&&a.jsx(Ie,{style:{color:n},children:`${b("unifiedCanvas.boundingBox")}: ${o}`}),l&&a.jsx(Ie,{style:{color:n},children:`${b("unifiedCanvas.scaledBoundingBox")}: ${s}`}),m&&a.jsxs(a.Fragment,{children:[a.jsx(Ie,{children:`${b("unifiedCanvas.boundingBoxPosition")}: ${r}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasDimensions")}: ${d}`}),a.jsx(Ie,{children:`${b("unifiedCanvas.canvasPosition")}: ${c}`}),a.jsx(axe,{})]})]})},cxe=i.memo(ixe),uxe=fe([pe],({canvas:e,generation:t})=>{const{boundingBoxCoordinates:n,boundingBoxDimensions:r,stageScale:o,isDrawing:s,isTransformingBoundingBox:l,isMovingBoundingBox:c,tool:d,shouldSnapToGrid:f}=e,{aspectRatio:m}=t;return{boundingBoxCoordinates:n,boundingBoxDimensions:r,isDrawing:s,isMovingBoundingBox:c,isTransformingBoundingBox:l,stageScale:o,shouldSnapToGrid:f,tool:d,hitStrokeWidth:20/o,aspectRatio:m}}),dxe=e=>{const{...t}=e,n=te(),{boundingBoxCoordinates:r,boundingBoxDimensions:o,isDrawing:s,isMovingBoundingBox:l,isTransformingBoundingBox:c,stageScale:d,shouldSnapToGrid:f,tool:m,hitStrokeWidth:h,aspectRatio:g}=H(uxe),b=i.useRef(null),y=i.useRef(null),[x,w]=i.useState(!1);i.useEffect(()=>{var G;!b.current||!y.current||(b.current.nodes([y.current]),(G=b.current.getLayer())==null||G.batchDraw())},[]);const S=64*d;tt("N",()=>{n(Mm(!f))});const j=i.useCallback(G=>{if(!f){n(Rv({x:Math.floor(G.target.x()),y:Math.floor(G.target.y())}));return}const q=G.target.x(),Y=G.target.y(),Q=kr(q,64),V=kr(Y,64);G.target.x(Q),G.target.y(V),n(Rv({x:Q,y:V}))},[n,f]),_=i.useCallback(()=>{if(!y.current)return;const G=y.current,q=G.scaleX(),Y=G.scaleY(),Q=Math.round(G.width()*q),V=Math.round(G.height()*Y),se=Math.round(G.x()),ee=Math.round(G.y());if(g){const le=kr(Q/g,64);n(es({width:Q,height:le}))}else n(es({width:Q,height:V}));n(Rv({x:f?Ku(se,64):se,y:f?Ku(ee,64):ee})),G.scaleX(1),G.scaleY(1)},[n,f,g]),I=i.useCallback((G,q,Y)=>{const Q=G.x%S,V=G.y%S;return{x:Ku(q.x,S)+Q,y:Ku(q.y,S)+V}},[S]),E=i.useCallback(()=>{n(Av(!0))},[n]),M=i.useCallback(()=>{n(Av(!1)),n(Tv(!1)),n(Sp(!1)),w(!1)},[n]),D=i.useCallback(()=>{n(Tv(!0))},[n]),R=i.useCallback(()=>{n(Av(!1)),n(Tv(!1)),n(Sp(!1)),w(!1)},[n]),N=i.useCallback(()=>{w(!0)},[]),O=i.useCallback(()=>{!c&&!l&&w(!1)},[l,c]),T=i.useCallback(()=>{n(Sp(!0))},[n]),U=i.useCallback(()=>{n(Sp(!1))},[n]);return a.jsxs(Ns,{...t,children:[a.jsx($s,{height:o.height,width:o.width,x:r.x,y:r.y,onMouseEnter:T,onMouseOver:T,onMouseLeave:U,onMouseOut:U}),a.jsx($s,{draggable:!0,fillEnabled:!1,height:o.height,hitStrokeWidth:h,listening:!s&&m==="move",onDragStart:D,onDragEnd:R,onDragMove:j,onMouseDown:D,onMouseOut:O,onMouseOver:N,onMouseEnter:N,onMouseUp:R,onTransform:_,onTransformEnd:M,ref:y,stroke:x?"rgba(255,255,255,0.7)":"white",strokeWidth:(x?8:1)/d,width:o.width,x:r.x,y:r.y}),a.jsx(jbe,{anchorCornerRadius:3,anchorDragBoundFunc:I,anchorFill:"rgba(212,216,234,1)",anchorSize:15,anchorStroke:"rgb(42,42,42)",borderDash:[4,4],borderEnabled:!0,borderStroke:"black",draggable:!1,enabledAnchors:m==="move"?void 0:[],flipEnabled:!1,ignoreStroke:!0,keepRatio:!1,listening:!s&&m==="move",onDragStart:D,onDragEnd:R,onMouseDown:E,onMouseUp:M,onTransformEnd:M,ref:b,rotateEnabled:!1})]})},fxe=i.memo(dxe),pxe=fe(pe,({canvas:e})=>{const{cursorPosition:t,brushSize:n,colorPickerColor:r,maskColor:o,brushColor:s,tool:l,layer:c,shouldShowBrush:d,isMovingBoundingBox:f,isTransformingBoundingBox:m,stageScale:h,stageDimensions:g,boundingBoxCoordinates:b,boundingBoxDimensions:y,shouldRestrictStrokesToBox:x}=e,w=x?{clipX:b.x,clipY:b.y,clipWidth:y.width,clipHeight:y.height}:{};return{cursorPosition:t,brushX:t?t.x:g.width/2,brushY:t?t.y:g.height/2,radius:n/2,colorPickerOuterRadius:vS/h,colorPickerInnerRadius:(vS-K1+1)/h,maskColorString:Ql({...o,a:.5}),brushColorString:Ql(s),colorPickerColorString:Ql(r),tool:l,layer:c,shouldShowBrush:d,shouldDrawBrushPreview:!(f||m||!t)&&d,strokeWidth:1.5/h,dotRadius:1.5/h,clip:w}}),mxe=e=>{const{...t}=e,{brushX:n,brushY:r,radius:o,maskColorString:s,tool:l,layer:c,shouldDrawBrushPreview:d,dotRadius:f,strokeWidth:m,brushColorString:h,colorPickerColorString:g,colorPickerInnerRadius:b,colorPickerOuterRadius:y,clip:x}=H(pxe);return d?a.jsxs(Ns,{listening:!1,...x,...t,children:[l==="colorPicker"?a.jsxs(a.Fragment,{children:[a.jsx($l,{x:n,y:r,radius:y,stroke:h,strokeWidth:K1,strokeScaleEnabled:!1}),a.jsx($l,{x:n,y:r,radius:b,stroke:g,strokeWidth:K1,strokeScaleEnabled:!1})]}):a.jsxs(a.Fragment,{children:[a.jsx($l,{x:n,y:r,radius:o,fill:c==="mask"?s:h,globalCompositeOperation:l==="eraser"?"destination-out":"source-out"}),a.jsx($l,{x:n,y:r,radius:o,stroke:"rgba(255,255,255,0.4)",strokeWidth:m*2,strokeEnabled:!0,listening:!1}),a.jsx($l,{x:n,y:r,radius:o,stroke:"rgba(0,0,0,1)",strokeWidth:m,strokeEnabled:!0,listening:!1})]}),a.jsx($l,{x:n,y:r,radius:f*2,fill:"rgba(255,255,255,0.4)",listening:!1}),a.jsx($l,{x:n,y:r,radius:f,fill:"rgba(0,0,0,1)",listening:!1})]}):null},hxe=i.memo(mxe),gxe=fe([pe,Lo],({canvas:e},t)=>{const{isMaskEnabled:n,stageScale:r,shouldShowBoundingBox:o,isTransformingBoundingBox:s,isMouseOverBoundingBox:l,isMovingBoundingBox:c,stageDimensions:d,stageCoordinates:f,tool:m,isMovingStage:h,shouldShowIntermediates:g,shouldShowGrid:b,shouldRestrictStrokesToBox:y,shouldAntialias:x}=e;let w="none";return m==="move"||t?h?w="grabbing":w="grab":s?w=void 0:y&&!l&&(w="default"),{isMaskEnabled:n,isModifyingBoundingBox:s||c,shouldShowBoundingBox:o,shouldShowGrid:b,stageCoordinates:f,stageCursor:w,stageDimensions:d,stageScale:r,tool:m,isStaging:t,shouldShowIntermediates:g,shouldAntialias:x}}),vxe=je(_be,{shouldForwardProp:e=>!["sx"].includes(e)}),bxe=()=>{const{isMaskEnabled:e,isModifyingBoundingBox:t,shouldShowBoundingBox:n,shouldShowGrid:r,stageCoordinates:o,stageCursor:s,stageDimensions:l,stageScale:c,tool:d,isStaging:f,shouldShowIntermediates:m,shouldAntialias:h}=H(gxe);p1e();const g=te(),b=i.useRef(null),y=i.useRef(null),x=i.useRef(null),w=i.useCallback(G=>{O$(G),y.current=G},[]),S=i.useCallback(G=>{D$(G),x.current=G},[]),j=i.useRef({x:0,y:0}),_=i.useRef(!1),I=w1e(y),E=h1e(y),M=y1e(y,_),D=v1e(y,_,j),R=b1e(),{handleDragStart:N,handleDragMove:O,handleDragEnd:T}=d1e(),U=i.useCallback(G=>G.evt.preventDefault(),[]);return i.useEffect(()=>{if(!b.current)return;const G=new ResizeObserver(Q=>{for(const V of Q)if(V.contentBoxSize){const{width:se,height:ee}=V.contentRect;g(bS({width:se,height:ee}))}});G.observe(b.current);const{width:q,height:Y}=b.current.getBoundingClientRect();return g(bS({width:q,height:Y})),()=>{G.disconnect()}},[g]),a.jsxs($,{id:"canvas-container",ref:b,sx:{position:"relative",height:"100%",width:"100%",borderRadius:"base"},children:[a.jsx(Ie,{sx:{position:"absolute"},children:a.jsxs(vxe,{tabIndex:-1,ref:w,sx:{outline:"none",overflow:"hidden",cursor:s||void 0,canvas:{outline:"none"}},x:o.x,y:o.y,width:l.width,height:l.height,scale:{x:c,y:c},onTouchStart:E,onTouchMove:D,onTouchEnd:M,onMouseDown:E,onMouseLeave:R,onMouseMove:D,onMouseUp:M,onDragStart:N,onDragMove:O,onDragEnd:T,onContextMenu:U,onWheel:I,draggable:(d==="move"||f)&&!t,children:[a.jsx(Gu,{id:"grid",visible:r,children:a.jsx(Dbe,{})}),a.jsx(Gu,{id:"base",ref:S,listening:!1,imageSmoothingEnabled:h,children:a.jsx(Xbe,{})}),a.jsxs(Gu,{id:"mask",visible:e&&!f,listening:!1,children:[a.jsx(Bbe,{visible:!0,listening:!1}),a.jsx(Lbe,{listening:!1})]}),a.jsx(Gu,{children:a.jsx(Ebe,{})}),a.jsxs(Gu,{id:"preview",imageSmoothingEnabled:h,children:[!f&&a.jsx(hxe,{visible:d!=="move",listening:!1}),a.jsx(Zbe,{visible:f}),m&&a.jsx(Tbe,{}),a.jsx(fxe,{visible:n&&!f})]})]})}),a.jsx(cxe,{}),a.jsx(txe,{})]})},xxe=i.memo(bxe);function yxe(e,t,n=250){const[r,o]=i.useState(0);return i.useEffect(()=>{const s=setTimeout(()=>{r===1&&e(),o(0)},n);return r===2&&t(),()=>clearTimeout(s)},[r,e,t,n]),()=>o(s=>s+1)}const O1={width:6,height:6,borderColor:"base.100"},Cxe={".react-colorful__hue-pointer":O1,".react-colorful__saturation-pointer":O1,".react-colorful__alpha-pointer":O1,gap:2,flexDir:"column"},om="4.2rem",wxe=e=>{const{color:t,onChange:n,withNumberInput:r,...o}=e,s=i.useCallback(f=>n({...t,r:f}),[t,n]),l=i.useCallback(f=>n({...t,g:f}),[t,n]),c=i.useCallback(f=>n({...t,b:f}),[t,n]),d=i.useCallback(f=>n({...t,a:f}),[t,n]);return a.jsxs($,{sx:Cxe,children:[a.jsx(hO,{color:t,onChange:n,style:{width:"100%"},...o}),r&&a.jsxs($,{children:[a.jsx(_s,{value:t.r,onChange:s,min:0,max:255,step:1,label:"Red",w:om}),a.jsx(_s,{value:t.g,onChange:l,min:0,max:255,step:1,label:"Green",w:om}),a.jsx(_s,{value:t.b,onChange:c,min:0,max:255,step:1,label:"Blue",w:om}),a.jsx(_s,{value:t.a,onChange:d,step:.1,min:0,max:1,label:"Alpha",w:om,isInteger:!1})]})]})},xD=i.memo(wxe),Sxe=fe([pe,Lo],({canvas:e},t)=>{const{maskColor:n,layer:r,isMaskEnabled:o,shouldPreserveMaskedArea:s}=e;return{layer:r,maskColor:n,maskColorString:Ql(n),isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:t}}),kxe=()=>{const e=te(),{t}=W(),{layer:n,maskColor:r,isMaskEnabled:o,shouldPreserveMaskedArea:s,isStaging:l}=H(Sxe);tt(["q"],()=>{c()},{enabled:()=>!l,preventDefault:!0},[n]),tt(["shift+c"],()=>{d()},{enabled:()=>!l,preventDefault:!0},[]),tt(["h"],()=>{f()},{enabled:()=>!l,preventDefault:!0},[o]);const c=i.useCallback(()=>{e(S3(n==="mask"?"base":"mask"))},[e,n]),d=i.useCallback(()=>{e(y3())},[e]),f=i.useCallback(()=>{e(Wx(!o))},[e,o]),m=i.useCallback(async()=>{e(R$())},[e]),h=i.useCallback(b=>{e(A$(b.target.checked))},[e]),g=i.useCallback(b=>{e(T$(b))},[e]);return a.jsx(xf,{triggerComponent:a.jsx($t,{children:a.jsx(Fe,{"aria-label":t("unifiedCanvas.maskingOptions"),tooltip:t("unifiedCanvas.maskingOptions"),icon:a.jsx(UM,{}),isChecked:n==="mask",isDisabled:l})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(yr,{label:`${t("unifiedCanvas.enableMask")} (H)`,isChecked:o,onChange:f}),a.jsx(yr,{label:t("unifiedCanvas.preserveMaskedArea"),isChecked:s,onChange:h}),a.jsx(Ie,{sx:{paddingTop:2,paddingBottom:2},children:a.jsx(xD,{color:r,onChange:g})}),a.jsx(Xe,{size:"sm",leftIcon:a.jsx(gf,{}),onClick:m,children:t("unifiedCanvas.saveMask")}),a.jsx(Xe,{size:"sm",leftIcon:a.jsx(ao,{}),onClick:d,children:t("unifiedCanvas.clearMask")})]})})},jxe=i.memo(kxe),_xe=fe([pe,tr],({canvas:e},t)=>{const{futureLayerStates:n}=e;return{canRedo:n.length>0,activeTabName:t}});function Ixe(){const e=te(),{canRedo:t,activeTabName:n}=H(_xe),{t:r}=W(),o=i.useCallback(()=>{e(N$())},[e]);return tt(["meta+shift+z","ctrl+shift+z","control+y","meta+y"],()=>{o()},{enabled:()=>t,preventDefault:!0},[n,t]),a.jsx(Fe,{"aria-label":`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,tooltip:`${r("unifiedCanvas.redo")} (Ctrl+Shift+Z)`,icon:a.jsx(Vte,{}),onClick:o,isDisabled:!t})}const Pxe=()=>{const e=H(Lo),t=te(),{t:n}=W(),r=i.useCallback(()=>t($$()),[t]);return a.jsxs(t0,{title:n("unifiedCanvas.clearCanvasHistory"),acceptCallback:r,acceptButtonText:n("unifiedCanvas.clearHistory"),triggerComponent:a.jsx(Xe,{size:"sm",leftIcon:a.jsx(ao,{}),isDisabled:e,children:n("unifiedCanvas.clearCanvasHistory")}),children:[a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryMessage")}),a.jsx("br",{}),a.jsx("p",{children:n("unifiedCanvas.clearCanvasHistoryConfirm")})]})},Exe=i.memo(Pxe),Mxe=fe([pe],({canvas:e})=>{const{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:l,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:f}=e;return{shouldAutoSave:t,shouldCropToBoundingBoxOnSave:n,shouldDarkenOutsideBoundingBox:r,shouldShowCanvasDebugInfo:o,shouldShowGrid:s,shouldShowIntermediates:l,shouldSnapToGrid:c,shouldRestrictStrokesToBox:d,shouldAntialias:f}}),Oxe=()=>{const e=te(),{t}=W(),{shouldAutoSave:n,shouldCropToBoundingBoxOnSave:r,shouldDarkenOutsideBoundingBox:o,shouldShowCanvasDebugInfo:s,shouldShowGrid:l,shouldShowIntermediates:c,shouldSnapToGrid:d,shouldRestrictStrokesToBox:f,shouldAntialias:m}=H(Mxe);tt(["n"],()=>{e(Mm(!d))},{enabled:!0,preventDefault:!0},[d]);const h=i.useCallback(I=>e(Mm(I.target.checked)),[e]),g=i.useCallback(I=>e(L$(I.target.checked)),[e]),b=i.useCallback(I=>e(F$(I.target.checked)),[e]),y=i.useCallback(I=>e(z$(I.target.checked)),[e]),x=i.useCallback(I=>e(B$(I.target.checked)),[e]),w=i.useCallback(I=>e(H$(I.target.checked)),[e]),S=i.useCallback(I=>e(W$(I.target.checked)),[e]),j=i.useCallback(I=>e(V$(I.target.checked)),[e]),_=i.useCallback(I=>e(U$(I.target.checked)),[e]);return a.jsx(xf,{isLazy:!1,triggerComponent:a.jsx(Fe,{tooltip:t("unifiedCanvas.canvasSettings"),"aria-label":t("unifiedCanvas.canvasSettings"),icon:a.jsx(QM,{})}),children:a.jsxs($,{direction:"column",gap:2,children:[a.jsx(yr,{label:t("unifiedCanvas.showIntermediates"),isChecked:c,onChange:g}),a.jsx(yr,{label:t("unifiedCanvas.showGrid"),isChecked:l,onChange:b}),a.jsx(yr,{label:t("unifiedCanvas.snapToGrid"),isChecked:d,onChange:h}),a.jsx(yr,{label:t("unifiedCanvas.darkenOutsideSelection"),isChecked:o,onChange:y}),a.jsx(yr,{label:t("unifiedCanvas.autoSaveToGallery"),isChecked:n,onChange:x}),a.jsx(yr,{label:t("unifiedCanvas.saveBoxRegionOnly"),isChecked:r,onChange:w}),a.jsx(yr,{label:t("unifiedCanvas.limitStrokesToBox"),isChecked:f,onChange:S}),a.jsx(yr,{label:t("unifiedCanvas.showCanvasDebugInfo"),isChecked:s,onChange:j}),a.jsx(yr,{label:t("unifiedCanvas.antialiasing"),isChecked:m,onChange:_}),a.jsx(Exe,{})]})})},Dxe=i.memo(Oxe),Rxe=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,brushColor:r,brushSize:o}=e;return{tool:n,isStaging:t,brushColor:r,brushSize:o}}),Axe=()=>{const e=te(),{tool:t,brushColor:n,brushSize:r,isStaging:o}=H(Rxe),{t:s}=W();tt(["b"],()=>{l()},{enabled:()=>!o,preventDefault:!0},[]),tt(["e"],()=>{c()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["c"],()=>{d()},{enabled:()=>!o,preventDefault:!0},[t]),tt(["shift+f"],()=>{f()},{enabled:()=>!o,preventDefault:!0}),tt(["delete","backspace"],()=>{m()},{enabled:()=>!o,preventDefault:!0}),tt(["BracketLeft"],()=>{r-5<=5?e(kp(Math.max(r-1,1))):e(kp(Math.max(r-5,1)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["BracketRight"],()=>{e(kp(Math.min(r+5,500)))},{enabled:()=>!o,preventDefault:!0},[r]),tt(["Shift+BracketLeft"],()=>{e(Nv({...n,a:Zl(n.a-.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]),tt(["Shift+BracketRight"],()=>{e(Nv({...n,a:Zl(n.a+.05,.05,1)}))},{enabled:()=>!o,preventDefault:!0},[n]);const l=i.useCallback(()=>{e(fc("brush"))},[e]),c=i.useCallback(()=>{e(fc("eraser"))},[e]),d=i.useCallback(()=>{e(fc("colorPicker"))},[e]),f=i.useCallback(()=>{e(G$())},[e]),m=i.useCallback(()=>{e(K$())},[e]),h=i.useCallback(b=>{e(kp(b))},[e]),g=i.useCallback(b=>{e(Nv(b))},[e]);return a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.brush")} (B)`,tooltip:`${s("unifiedCanvas.brush")} (B)`,icon:a.jsx(zte,{}),isChecked:t==="brush"&&!o,onClick:l,isDisabled:o}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.eraser")} (E)`,tooltip:`${s("unifiedCanvas.eraser")} (E)`,icon:a.jsx(Ste,{}),isChecked:t==="eraser"&&!o,isDisabled:o,onClick:c}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,tooltip:`${s("unifiedCanvas.fillBoundingBox")} (Shift+F)`,icon:a.jsx(Mte,{}),isDisabled:o,onClick:f}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,tooltip:`${s("unifiedCanvas.eraseBoundingBox")} (Del/Backspace)`,icon:a.jsx(nl,{style:{transform:"rotate(45deg)"}}),isDisabled:o,onClick:m}),a.jsx(Fe,{"aria-label":`${s("unifiedCanvas.colorPicker")} (C)`,tooltip:`${s("unifiedCanvas.colorPicker")} (C)`,icon:a.jsx(Ite,{}),isChecked:t==="colorPicker"&&!o,isDisabled:o,onClick:d}),a.jsx(xf,{triggerComponent:a.jsx(Fe,{"aria-label":s("unifiedCanvas.brushOptions"),tooltip:s("unifiedCanvas.brushOptions"),icon:a.jsx(qM,{})}),children:a.jsxs($,{minWidth:60,direction:"column",gap:4,width:"100%",children:[a.jsx($,{gap:4,justifyContent:"space-between",children:a.jsx(nt,{label:s("unifiedCanvas.brushSize"),value:r,withInput:!0,onChange:h,sliderNumberInputProps:{max:500}})}),a.jsx(Ie,{sx:{width:"100%",paddingTop:2,paddingBottom:2},children:a.jsx(xD,{withNumberInput:!0,color:n,onChange:g})})]})})]})},Txe=i.memo(Axe),Nxe=fe([pe,tr],({canvas:e},t)=>{const{pastLayerStates:n}=e;return{canUndo:n.length>0,activeTabName:t}});function $xe(){const e=te(),{t}=W(),{canUndo:n,activeTabName:r}=H(Nxe),o=i.useCallback(()=>{e(q$())},[e]);return tt(["meta+z","ctrl+z"],()=>{o()},{enabled:()=>n,preventDefault:!0},[r,n]),a.jsx(Fe,{"aria-label":`${t("unifiedCanvas.undo")} (Ctrl+Z)`,tooltip:`${t("unifiedCanvas.undo")} (Ctrl+Z)`,icon:a.jsx(Ng,{}),onClick:o,isDisabled:!n})}const Lxe=fe([pe,Lo],({canvas:e},t)=>{const{tool:n,shouldCropToBoundingBoxOnSave:r,layer:o,isMaskEnabled:s}=e;return{isStaging:t,isMaskEnabled:s,tool:n,layer:o,shouldCropToBoundingBoxOnSave:r}}),Fxe=()=>{const e=te(),{isStaging:t,isMaskEnabled:n,layer:r,tool:o}=H(Lxe),s=G1(),{t:l}=W(),{isClipboardAPIAvailable:c}=j7(),{getUploadButtonProps:d,getUploadInputProps:f}=S2({postUploadAction:{type:"SET_CANVAS_INITIAL_IMAGE"}});tt(["v"],()=>{m()},{enabled:()=>!t,preventDefault:!0},[]),tt(["r"],()=>{g()},{enabled:()=>!0,preventDefault:!0},[s]),tt(["shift+m"],()=>{y()},{enabled:()=>!t,preventDefault:!0},[s]),tt(["shift+s"],()=>{x()},{enabled:()=>!t,preventDefault:!0},[s]),tt(["meta+c","ctrl+c"],()=>{w()},{enabled:()=>!t&&c,preventDefault:!0},[s,c]),tt(["shift+d"],()=>{S()},{enabled:()=>!t,preventDefault:!0},[s]);const m=i.useCallback(()=>{e(fc("move"))},[e]),h=yxe(()=>g(!1),()=>g(!0)),g=(_=!1)=>{const I=G1();if(!I)return;const E=I.getClientRect({skipTransform:!0});e(eL({contentRect:E,shouldScaleTo1:_}))},b=i.useCallback(()=>{e(jI())},[e]),y=i.useCallback(()=>{e(X$())},[e]),x=i.useCallback(()=>{e(Q$())},[e]),w=i.useCallback(()=>{c&&e(Y$())},[e,c]),S=i.useCallback(()=>{e(Z$())},[e]),j=i.useCallback(_=>{const I=_;e(S3(I)),I==="mask"&&!n&&e(Wx(!0))},[e,n]);return a.jsxs($,{sx:{alignItems:"center",gap:2,flexWrap:"wrap"},children:[a.jsx(Ie,{w:24,children:a.jsx(yn,{tooltip:`${l("unifiedCanvas.layer")} (Q)`,value:r,data:J$,onChange:j,disabled:t})}),a.jsx(jxe,{}),a.jsx(Txe,{}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.move")} (V)`,tooltip:`${l("unifiedCanvas.move")} (V)`,icon:a.jsx(pte,{}),isChecked:o==="move"||t,onClick:m}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.resetView")} (R)`,tooltip:`${l("unifiedCanvas.resetView")} (R)`,icon:a.jsx(yte,{}),onClick:h})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.mergeVisible")} (Shift+M)`,tooltip:`${l("unifiedCanvas.mergeVisible")} (Shift+M)`,icon:a.jsx($te,{}),onClick:y,isDisabled:t}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.saveToGallery")} (Shift+S)`,tooltip:`${l("unifiedCanvas.saveToGallery")} (Shift+S)`,icon:a.jsx(gf,{}),onClick:x,isDisabled:t}),c&&a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,tooltip:`${l("unifiedCanvas.copyToClipboard")} (Cmd/Ctrl+C)`,icon:a.jsx(ru,{}),onClick:w,isDisabled:t}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.downloadAsImage")} (Shift+D)`,tooltip:`${l("unifiedCanvas.downloadAsImage")} (Shift+D)`,icon:a.jsx(ou,{}),onClick:S,isDisabled:t})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx($xe,{}),a.jsx(Ixe,{})]}),a.jsxs($t,{isAttached:!0,children:[a.jsx(Fe,{"aria-label":`${l("common.upload")}`,tooltip:`${l("common.upload")}`,icon:a.jsx($g,{}),isDisabled:t,...d()}),a.jsx("input",{...f()}),a.jsx(Fe,{"aria-label":`${l("unifiedCanvas.clearCanvas")}`,tooltip:`${l("unifiedCanvas.clearCanvas")}`,icon:a.jsx(ao,{}),onClick:b,colorScheme:"error",isDisabled:t})]}),a.jsx($t,{isAttached:!0,children:a.jsx(Dxe,{})})]})},zxe=i.memo(Fxe),iI={id:"canvas-intial-image",actionType:"SET_CANVAS_INITIAL_IMAGE"},Bxe=()=>{const{t:e}=W(),{isOver:t,setNodeRef:n,active:r}=$8({id:"unifiedCanvas",data:iI});return a.jsxs($,{layerStyle:"first",ref:n,tabIndex:-1,sx:{flexDirection:"column",alignItems:"center",gap:4,p:2,borderRadius:"base",w:"full",h:"full"},children:[a.jsx(zxe,{}),a.jsx(xxe,{}),L8(iI,r)&&a.jsx(F8,{isOver:t,label:e("toast.setCanvasInitialImage")})]})},Hxe=i.memo(Bxe),Wxe=()=>a.jsx(Hxe,{}),Vxe=i.memo(Wxe),Uxe=[{id:"txt2img",translationKey:"common.txt2img",icon:a.jsx(An,{as:Rte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(c1e,{})},{id:"img2img",translationKey:"common.img2img",icon:a.jsx(An,{as:si,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Mme,{})},{id:"unifiedCanvas",translationKey:"common.unifiedCanvas",icon:a.jsx(An,{as:Zse,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Vxe,{})},{id:"nodes",translationKey:"common.nodes",icon:a.jsx(An,{as:e0,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(bve,{})},{id:"modelManager",translationKey:"modelManager.modelManager",icon:a.jsx(An,{as:Cte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(Phe,{})},{id:"queue",translationKey:"queue.queue",icon:a.jsx(An,{as:Kte,sx:{boxSize:6,pointerEvents:"none"}}),content:a.jsx(l1e,{})}],Gxe=fe([pe],({config:e})=>{const{disabledTabs:t}=e;return Uxe.filter(r=>!t.includes(r.id))}),Kxe=448,qxe=448,Xxe=360,Qxe=["modelManager","queue"],Yxe=["modelManager","queue"],Zxe=()=>{const e=H(tL),t=H(tr),n=H(Gxe),{t:r}=W(),o=te(),s=i.useCallback(O=>{O.target instanceof HTMLElement&&O.target.blur()},[]),l=i.useMemo(()=>n.map(O=>a.jsx(Ut,{hasArrow:!0,label:String(r(O.translationKey)),placement:"end",children:a.jsxs(mr,{onClick:s,children:[a.jsx(L3,{children:String(r(O.translationKey))}),O.icon]})},O.id)),[n,r,s]),c=i.useMemo(()=>n.map(O=>a.jsx($r,{children:O.content},O.id)),[n]),d=i.useCallback(O=>{const T=n[O];T&&o(Js(T.id))},[o,n]),{minSize:f,isCollapsed:m,setIsCollapsed:h,ref:g,reset:b,expand:y,collapse:x,toggle:w}=v_(Kxe,"pixels"),{ref:S,minSize:j,isCollapsed:_,setIsCollapsed:I,reset:E,expand:M,collapse:D,toggle:R}=v_(Xxe,"pixels");tt("f",()=>{_||m?(M(),y()):(x(),D())},[o,_,m]),tt(["t","o"],()=>{w()},[o]),tt("g",()=>{R()},[o]);const N=R2();return a.jsxs(ci,{variant:"appTabs",defaultIndex:e,index:e,onChange:d,sx:{flexGrow:1,gap:4},isLazy:!0,children:[a.jsxs(ui,{sx:{pt:2,gap:4,flexDir:"column"},children:[l,a.jsx(Wr,{})]}),a.jsxs(o0,{id:"app",autoSaveId:"app",direction:"horizontal",style:{height:"100%",width:"100%"},storage:N,units:"pixels",children:[!Yxe.includes(t)&&a.jsxs(a.Fragment,{children:[a.jsx(rl,{order:0,id:"side",ref:g,defaultSize:f,minSize:f,onCollapse:h,collapsible:!0,children:t==="nodes"?a.jsx(mce,{}):a.jsx(Xpe,{})}),a.jsx(Bh,{onDoubleClick:b,collapsedDirection:m?"left":void 0}),a.jsx(bce,{isSidePanelCollapsed:m,sidePanelRef:g})]}),a.jsx(rl,{id:"main",order:1,minSize:qxe,children:a.jsx(eu,{style:{height:"100%",width:"100%"},children:c})}),!Qxe.includes(t)&&a.jsxs(a.Fragment,{children:[a.jsx(Bh,{onDoubleClick:E,collapsedDirection:_?"right":void 0}),a.jsx(rl,{id:"gallery",ref:S,order:2,defaultSize:j,minSize:j,onCollapse:I,collapsible:!0,children:a.jsx(zae,{})}),a.jsx(gce,{isGalleryCollapsed:_,galleryPanelRef:S})]})]})]})},Jxe=i.memo(Zxe),eye=i.createContext(null),D1={didCatch:!1,error:null};class tye extends i.Component{constructor(t){super(t),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=D1}static getDerivedStateFromError(t){return{didCatch:!0,error:t}}resetErrorBoundary(){const{error:t}=this.state;if(t!==null){for(var n,r,o=arguments.length,s=new Array(o),l=0;l0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return e.length!==t.length||e.some((n,r)=>!Object.is(n,t[r]))}function rye(e={}){let t;if(e.repoUrl)t=e.repoUrl;else if(e.user&&e.repo)t=`https://github.com/${e.user}/${e.repo}`;else throw new Error("You need to specify either the `repoUrl` option or both the `user` and `repo` options");const n=new URL(`${t}/issues/new`),r=["body","title","labels","template","milestone","assignee","projects"];for(const o of r){let s=e[o];if(s!==void 0){if(o==="labels"||o==="projects"){if(!Array.isArray(s))throw new TypeError(`The \`${o}\` option should be an array`);s=s.join(",")}n.searchParams.set(o,s)}}return n.toString()}const oye=[EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(Boolean).map(e=>[e.name,e]),sye=new Map(oye),aye=sye,lye=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0},{property:"cause",enumerable:!1}],px=new WeakSet,iye=e=>{px.add(e);const t=e.toJSON();return px.delete(e),t},cye=e=>aye.get(e)??Error,yD=({from:e,seen:t,to:n,forceEnumerable:r,maxDepth:o,depth:s,useToJSON:l,serialize:c})=>{if(!n)if(Array.isArray(e))n=[];else if(!c&&cI(e)){const f=cye(e.name);n=new f}else n={};if(t.push(e),s>=o)return n;if(l&&typeof e.toJSON=="function"&&!px.has(e))return iye(e);const d=f=>yD({from:f,seen:[...t],forceEnumerable:r,maxDepth:o,depth:s,useToJSON:l,serialize:c});for(const[f,m]of Object.entries(e)){if(m&&m instanceof Uint8Array&&m.constructor.name==="Buffer"){n[f]="[object Buffer]";continue}if(m!==null&&typeof m=="object"&&typeof m.pipe=="function"){n[f]="[object Stream]";continue}if(typeof m!="function"){if(!m||typeof m!="object"){try{n[f]=m}catch{}continue}if(!t.includes(e[f])){s++,n[f]=d(e[f]);continue}n[f]="[Circular]"}}for(const{property:f,enumerable:m}of lye)typeof e[f]<"u"&&e[f]!==null&&Object.defineProperty(n,f,{value:cI(e[f])?d(e[f]):e[f],enumerable:r?!0:m,configurable:!0,writable:!0});return n};function uye(e,t={}){const{maxDepth:n=Number.POSITIVE_INFINITY,useToJSON:r=!0}=t;return typeof e=="object"&&e!==null?yD({from:e,seen:[],forceEnumerable:!0,maxDepth:n,depth:0,useToJSON:r,serialize:!0}):typeof e=="function"?`[Function: ${e.name||"anonymous"}]`:e}function cI(e){return!!e&&typeof e=="object"&&"name"in e&&"message"in e&&"stack"in e}const dye=({error:e,resetErrorBoundary:t})=>{const n=tg(),{t:r}=W(),o=i.useCallback(()=>{const l=JSON.stringify(uye(e),null,2);navigator.clipboard.writeText(`\`\`\` +${l} +\`\`\``),n({title:"Error Copied"})},[e,n]),s=i.useMemo(()=>rye({user:"invoke-ai",repo:"InvokeAI",template:"BUG_REPORT.yml",title:`[bug]: ${e.name}: ${e.message}`}),[e.message,e.name]);return a.jsx($,{layerStyle:"body",sx:{w:"100vw",h:"100vh",alignItems:"center",justifyContent:"center",p:4},children:a.jsxs($,{layerStyle:"first",sx:{flexDir:"column",borderRadius:"base",justifyContent:"center",gap:8,p:16},children:[a.jsx(or,{children:r("common.somethingWentWrong")}),a.jsx($,{layerStyle:"second",sx:{px:8,py:4,borderRadius:"base",gap:4,justifyContent:"space-between",alignItems:"center"},children:a.jsxs(be,{sx:{fontWeight:600,color:"error.500",_dark:{color:"error.400"}},children:[e.name,": ",e.message]})}),a.jsxs($,{sx:{gap:4},children:[a.jsx(Xe,{leftIcon:a.jsx(sae,{}),onClick:t,children:r("accessibility.resetUI")}),a.jsx(Xe,{leftIcon:a.jsx(ru,{}),onClick:o,children:r("common.copyError")}),a.jsx(ig,{href:s,isExternal:!0,children:a.jsx(Xe,{leftIcon:a.jsx(Xy,{}),children:r("accessibility.createIssue")})})]})]})})},fye=i.memo(dye),pye=fe([pe],({hotkeys:e})=>{const{shift:t,ctrl:n,meta:r}=e;return{shift:t,ctrl:n,meta:r}}),mye=()=>{const e=te(),{shift:t,ctrl:n,meta:r}=H(pye),{queueBack:o,isDisabled:s,isLoading:l}=A7();tt(["ctrl+enter","meta+enter"],o,{enabled:()=>!s&&!l,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[o,s,l]);const{queueFront:c,isDisabled:d,isLoading:f}=L7();return tt(["ctrl+shift+enter","meta+shift+enter"],c,{enabled:()=>!d&&!f,preventDefault:!0,enableOnFormTags:["input","textarea","select"]},[c,d,f]),tt("*",()=>{pm("shift")?!t&&e(zr(!0)):t&&e(zr(!1)),pm("ctrl")?!n&&e(xS(!0)):n&&e(xS(!1)),pm("meta")?!r&&e(yS(!0)):r&&e(yS(!1))},{keyup:!0,keydown:!0},[t,n,r]),tt("1",()=>{e(Js("txt2img"))}),tt("2",()=>{e(Js("img2img"))}),tt("3",()=>{e(Js("unifiedCanvas"))}),tt("4",()=>{e(Js("nodes"))}),tt("5",()=>{e(Js("modelManager"))}),null},hye=i.memo(mye),gye=e=>{const t=te(),{recallAllParameters:n}=Sf(),r=zs(),{currentData:o}=jo((e==null?void 0:e.imageName)??Br),{currentData:s}=BI((e==null?void 0:e.imageName)??Br),l=i.useCallback(()=>{o&&(t(HI(o)),t(Js("unifiedCanvas")),r({title:PI("toast.sentToUnifiedCanvas"),status:"info",duration:2500,isClosable:!0}))},[t,r,o]),c=i.useCallback(()=>{o&&t(Qh(o))},[t,o]),d=i.useCallback(()=>{s&&n(s)},[s]);return i.useEffect(()=>{e&&e.action==="sendToCanvas"&&l()},[e,l]),i.useEffect(()=>{e&&e.action==="sendToImg2Img"&&c()},[e,c]),i.useEffect(()=>{e&&e.action==="useAllParameters"&&d()},[e,d]),{handleSendToCanvas:l,handleSendToImg2Img:c,handleUseAllMetadata:d}},vye=e=>(gye(e.selectedImage),null),bye=i.memo(vye),xye={},yye=({config:e=xye,selectedImage:t})=>{const n=H(e8),r=H6("system"),o=te(),s=JM();nL();const l=i.useCallback(()=>(s(),location.reload(),!1),[s]);i.useEffect(()=>{wt.changeLanguage(n)},[n]),i.useEffect(()=>{JI(e)&&(r.info({config:e},"Received config"),o(rL(e)))},[o,e,r]),i.useEffect(()=>{o(oL())},[o]);const c=qh(sL);return a.jsxs(tye,{onReset:l,FallbackComponent:fye,children:[a.jsx(sl,{w:"100vw",h:"100vh",position:"relative",overflow:"hidden",children:a.jsx(SK,{children:a.jsxs(sl,{sx:{gap:4,p:4,gridAutoRows:"min-content auto",w:"full",h:"full"},children:[c||a.jsx(Cne,{}),a.jsx($,{sx:{gap:4,w:"full",h:"full"},children:a.jsx(Jxe,{})})]})})}),a.jsx(rte,{}),a.jsx(Jee,{}),a.jsx(fG,{}),a.jsx(hye,{}),a.jsx(bye,{selectedImage:t})]})},_ye=i.memo(yye);export{_ye as default}; diff --git a/invokeai/frontend/web/dist/assets/MantineProvider-44862fff.js b/invokeai/frontend/web/dist/assets/MantineProvider-44862fff.js new file mode 100644 index 0000000000..6f547f4403 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/MantineProvider-44862fff.js @@ -0,0 +1 @@ +import{R as d,iE as _,r as h,iP as X}from"./index-fbe0e055.js";const Y={dark:["#C1C2C5","#A6A7AB","#909296","#5c5f66","#373A40","#2C2E33","#25262b","#1A1B1E","#141517","#101113"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]};function q(r){return()=>({fontFamily:r.fontFamily||"sans-serif"})}var J=Object.defineProperty,x=Object.getOwnPropertySymbols,K=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,z=(r,e,o)=>e in r?J(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,j=(r,e)=>{for(var o in e||(e={}))K.call(e,o)&&z(r,o,e[o]);if(x)for(var o of x(e))Q.call(e,o)&&z(r,o,e[o]);return r};function Z(r){return e=>({WebkitTapHighlightColor:"transparent",[e||"&:focus"]:j({},r.focusRing==="always"||r.focusRing==="auto"?r.focusRingStyles.styles(r):r.focusRingStyles.resetStyles(r)),[e?e.replace(":focus",":focus:not(:focus-visible)"):"&:focus:not(:focus-visible)"]:j({},r.focusRing==="auto"||r.focusRing==="never"?r.focusRingStyles.resetStyles(r):null)})}function y(r){return e=>typeof r.primaryShade=="number"?r.primaryShade:r.primaryShade[e||r.colorScheme]}function w(r){const e=y(r);return(o,n,a=!0,t=!0)=>{if(typeof o=="string"&&o.includes(".")){const[s,l]=o.split("."),g=parseInt(l,10);if(s in r.colors&&g>=0&&g<10)return r.colors[s][typeof n=="number"&&!t?n:g]}const i=typeof n=="number"?n:e();return o in r.colors?r.colors[o][i]:a?r.colors[r.primaryColor][i]:o}}function T(r){let e="";for(let o=1;o{const a={from:(n==null?void 0:n.from)||r.defaultGradient.from,to:(n==null?void 0:n.to)||r.defaultGradient.to,deg:(n==null?void 0:n.deg)||r.defaultGradient.deg};return`linear-gradient(${a.deg}deg, ${e(a.from,o(),!1)} 0%, ${e(a.to,o(),!1)} 100%)`}}function D(r){return e=>{if(typeof e=="number")return`${e/16}${r}`;if(typeof e=="string"){const o=e.replace("px","");if(!Number.isNaN(Number(o)))return`${Number(o)/16}${r}`}return e}}const u=D("rem"),k=D("em");function V({size:r,sizes:e,units:o}){return r in e?e[r]:typeof r=="number"?o==="em"?k(r):u(r):r||e.md}function S(r){return typeof r=="number"?r:typeof r=="string"&&r.includes("rem")?Number(r.replace("rem",""))*16:typeof r=="string"&&r.includes("em")?Number(r.replace("em",""))*16:Number(r)}function er(r){return e=>`@media (min-width: ${k(S(V({size:e,sizes:r.breakpoints})))})`}function or(r){return e=>`@media (max-width: ${k(S(V({size:e,sizes:r.breakpoints}))-1)})`}function nr(r){return/^#?([0-9A-F]{3}){1,2}$/i.test(r)}function tr(r){let e=r.replace("#","");if(e.length===3){const i=e.split("");e=[i[0],i[0],i[1],i[1],i[2],i[2]].join("")}const o=parseInt(e,16),n=o>>16&255,a=o>>8&255,t=o&255;return{r:n,g:a,b:t,a:1}}function ar(r){const[e,o,n,a]=r.replace(/[^0-9,.]/g,"").split(",").map(Number);return{r:e,g:o,b:n,a:a||1}}function C(r){return nr(r)?tr(r):r.startsWith("rgb")?ar(r):{r:0,g:0,b:0,a:1}}function p(r,e){if(typeof r!="string"||e>1||e<0)return"rgba(0, 0, 0, 1)";if(r.startsWith("var(--"))return r;const{r:o,g:n,b:a}=C(r);return`rgba(${o}, ${n}, ${a}, ${e})`}function ir(r=0){return{position:"absolute",top:u(r),right:u(r),left:u(r),bottom:u(r)}}function sr(r,e){if(typeof r=="string"&&r.startsWith("var(--"))return r;const{r:o,g:n,b:a,a:t}=C(r),i=1-e,s=l=>Math.round(l*i);return`rgba(${s(o)}, ${s(n)}, ${s(a)}, ${t})`}function lr(r,e){if(typeof r=="string"&&r.startsWith("var(--"))return r;const{r:o,g:n,b:a,a:t}=C(r),i=s=>Math.round(s+(255-s)*e);return`rgba(${i(o)}, ${i(n)}, ${i(a)}, ${t})`}function fr(r){return e=>{if(typeof e=="number")return u(e);const o=typeof r.defaultRadius=="number"?r.defaultRadius:r.radius[r.defaultRadius]||r.defaultRadius;return r.radius[e]||e||o}}function cr(r,e){if(typeof r=="string"&&r.includes(".")){const[o,n]=r.split("."),a=parseInt(n,10);if(o in e.colors&&a>=0&&a<10)return{isSplittedColor:!0,key:o,shade:a}}return{isSplittedColor:!1}}function dr(r){const e=w(r),o=y(r),n=G(r);return({variant:a,color:t,gradient:i,primaryFallback:s})=>{const l=cr(t,r);switch(a){case"light":return{border:"transparent",background:p(e(t,r.colorScheme==="dark"?8:0,s,!1),r.colorScheme==="dark"?.2:1),color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),hover:p(e(t,r.colorScheme==="dark"?7:1,s,!1),r.colorScheme==="dark"?.25:.65)};case"subtle":return{border:"transparent",background:"transparent",color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),hover:p(e(t,r.colorScheme==="dark"?8:0,s,!1),r.colorScheme==="dark"?.2:1)};case"outline":return{border:e(t,r.colorScheme==="dark"?5:o("light")),background:"transparent",color:e(t,r.colorScheme==="dark"?5:o("light")),hover:r.colorScheme==="dark"?p(e(t,5,s,!1),.05):p(e(t,0,s,!1),.35)};case"default":return{border:r.colorScheme==="dark"?r.colors.dark[4]:r.colors.gray[4],background:r.colorScheme==="dark"?r.colors.dark[6]:r.white,color:r.colorScheme==="dark"?r.white:r.black,hover:r.colorScheme==="dark"?r.colors.dark[5]:r.colors.gray[0]};case"white":return{border:"transparent",background:r.white,color:e(t,o()),hover:null};case"transparent":return{border:"transparent",color:t==="dark"?r.colorScheme==="dark"?r.colors.dark[0]:r.colors.dark[9]:e(t,r.colorScheme==="dark"?2:o("light")),background:"transparent",hover:null};case"gradient":return{background:n(i),color:r.white,border:"transparent",hover:null};default:{const g=o(),$=l.isSplittedColor?l.shade:g,O=l.isSplittedColor?l.key:t;return{border:"transparent",background:e(O,$,s),color:r.white,hover:e(O,$===9?8:$+1)}}}}}function ur(r){return e=>{const o=y(r)(e);return r.colors[r.primaryColor][o]}}function pr(r){return{"@media (hover: hover)":{"&:hover":r},"@media (hover: none)":{"&:active":r}}}function gr(r){return()=>({userSelect:"none",color:r.colorScheme==="dark"?r.colors.dark[3]:r.colors.gray[5]})}function br(r){return()=>r.colorScheme==="dark"?r.colors.dark[2]:r.colors.gray[6]}const f={fontStyles:q,themeColor:w,focusStyles:Z,linearGradient:B,radialGradient:rr,smallerThan:or,largerThan:er,rgba:p,cover:ir,darken:sr,lighten:lr,radius:fr,variant:dr,primaryShade:y,hover:pr,gradient:G,primaryColor:ur,placeholderStyles:gr,dimmed:br};var mr=Object.defineProperty,yr=Object.defineProperties,Sr=Object.getOwnPropertyDescriptors,R=Object.getOwnPropertySymbols,vr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,F=(r,e,o)=>e in r?mr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,hr=(r,e)=>{for(var o in e||(e={}))vr.call(e,o)&&F(r,o,e[o]);if(R)for(var o of R(e))_r.call(e,o)&&F(r,o,e[o]);return r},kr=(r,e)=>yr(r,Sr(e));function U(r){return kr(hr({},r),{fn:{fontStyles:f.fontStyles(r),themeColor:f.themeColor(r),focusStyles:f.focusStyles(r),largerThan:f.largerThan(r),smallerThan:f.smallerThan(r),radialGradient:f.radialGradient,linearGradient:f.linearGradient,gradient:f.gradient(r),rgba:f.rgba,cover:f.cover,lighten:f.lighten,darken:f.darken,primaryShade:f.primaryShade(r),radius:f.radius(r),variant:f.variant(r),hover:f.hover,primaryColor:f.primaryColor(r),placeholderStyles:f.placeholderStyles(r),dimmed:f.dimmed(r)}})}const $r={dir:"ltr",primaryShade:{light:6,dark:8},focusRing:"auto",loader:"oval",colorScheme:"light",white:"#fff",black:"#000",defaultRadius:"sm",transitionTimingFunction:"ease",colors:Y,lineHeight:1.55,fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",primaryColor:"blue",respectReducedMotion:!0,cursorType:"default",defaultGradient:{from:"indigo",to:"cyan",deg:45},shadows:{xs:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.1)",sm:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 0.625rem 0.9375rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.4375rem 0.4375rem -0.3125rem",md:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.25rem 1.5625rem -0.3125rem, rgba(0, 0, 0, 0.04) 0 0.625rem 0.625rem -0.3125rem",lg:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 1.75rem 1.4375rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 0.75rem 0.75rem -0.4375rem",xl:"0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 2.25rem 1.75rem -0.4375rem, rgba(0, 0, 0, 0.04) 0 1.0625rem 1.0625rem -0.4375rem"},fontSizes:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem"},radius:{xs:"0.125rem",sm:"0.25rem",md:"0.5rem",lg:"1rem",xl:"2rem"},spacing:{xs:"0.625rem",sm:"0.75rem",md:"1rem",lg:"1.25rem",xl:"1.5rem"},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},headings:{fontFamily:"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",fontWeight:700,sizes:{h1:{fontSize:"2.125rem",lineHeight:1.3,fontWeight:void 0},h2:{fontSize:"1.625rem",lineHeight:1.35,fontWeight:void 0},h3:{fontSize:"1.375rem",lineHeight:1.4,fontWeight:void 0},h4:{fontSize:"1.125rem",lineHeight:1.45,fontWeight:void 0},h5:{fontSize:"1rem",lineHeight:1.5,fontWeight:void 0},h6:{fontSize:"0.875rem",lineHeight:1.5,fontWeight:void 0}}},other:{},components:{},activeStyles:{transform:"translateY(0.0625rem)"},datesLocale:"en",globalStyles:void 0,focusRingStyles:{styles:r=>({outlineOffset:"0.125rem",outline:`0.125rem solid ${r.colors[r.primaryColor][r.colorScheme==="dark"?7:5]}`}),resetStyles:()=>({outline:"none"}),inputStyles:r=>({outline:"none",borderColor:r.colors[r.primaryColor][typeof r.primaryShade=="object"?r.primaryShade[r.colorScheme]:r.primaryShade]})}},E=U($r);var Pr=Object.defineProperty,wr=Object.defineProperties,Cr=Object.getOwnPropertyDescriptors,H=Object.getOwnPropertySymbols,Er=Object.prototype.hasOwnProperty,Or=Object.prototype.propertyIsEnumerable,M=(r,e,o)=>e in r?Pr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,xr=(r,e)=>{for(var o in e||(e={}))Er.call(e,o)&&M(r,o,e[o]);if(H)for(var o of H(e))Or.call(e,o)&&M(r,o,e[o]);return r},zr=(r,e)=>wr(r,Cr(e));function jr({theme:r}){return d.createElement(_,{styles:{"*, *::before, *::after":{boxSizing:"border-box"},html:{colorScheme:r.colorScheme==="dark"?"dark":"light"},body:zr(xr({},r.fn.fontStyles()),{backgroundColor:r.colorScheme==="dark"?r.colors.dark[7]:r.white,color:r.colorScheme==="dark"?r.colors.dark[0]:r.black,lineHeight:r.lineHeight,fontSize:r.fontSizes.md,WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale"})}})}function b(r,e,o,n=u){Object.keys(e).forEach(a=>{r[`--mantine-${o}-${a}`]=n(e[a])})}function Rr({theme:r}){const e={"--mantine-color-white":r.white,"--mantine-color-black":r.black,"--mantine-transition-timing-function":r.transitionTimingFunction,"--mantine-line-height":`${r.lineHeight}`,"--mantine-font-family":r.fontFamily,"--mantine-font-family-monospace":r.fontFamilyMonospace,"--mantine-font-family-headings":r.headings.fontFamily,"--mantine-heading-font-weight":`${r.headings.fontWeight}`};b(e,r.shadows,"shadow"),b(e,r.fontSizes,"font-size"),b(e,r.radius,"radius"),b(e,r.spacing,"spacing"),b(e,r.breakpoints,"breakpoints",k),Object.keys(r.colors).forEach(n=>{r.colors[n].forEach((a,t)=>{e[`--mantine-color-${n}-${t}`]=a})});const o=r.headings.sizes;return Object.keys(o).forEach(n=>{e[`--mantine-${n}-font-size`]=o[n].fontSize,e[`--mantine-${n}-line-height`]=`${o[n].lineHeight}`}),d.createElement(_,{styles:{":root":e}})}var Fr=Object.defineProperty,Hr=Object.defineProperties,Mr=Object.getOwnPropertyDescriptors,I=Object.getOwnPropertySymbols,Ir=Object.prototype.hasOwnProperty,Ar=Object.prototype.propertyIsEnumerable,A=(r,e,o)=>e in r?Fr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,c=(r,e)=>{for(var o in e||(e={}))Ir.call(e,o)&&A(r,o,e[o]);if(I)for(var o of I(e))Ar.call(e,o)&&A(r,o,e[o]);return r},P=(r,e)=>Hr(r,Mr(e));function Nr(r,e){var o;if(!e)return r;const n=Object.keys(r).reduce((a,t)=>{if(t==="headings"&&e.headings){const i=e.headings.sizes?Object.keys(r.headings.sizes).reduce((s,l)=>(s[l]=c(c({},r.headings.sizes[l]),e.headings.sizes[l]),s),{}):r.headings.sizes;return P(c({},a),{headings:P(c(c({},r.headings),e.headings),{sizes:i})})}if(t==="breakpoints"&&e.breakpoints){const i=c(c({},r.breakpoints),e.breakpoints);return P(c({},a),{breakpoints:Object.fromEntries(Object.entries(i).sort((s,l)=>S(s[1])-S(l[1])))})}return a[t]=typeof e[t]=="object"?c(c({},r[t]),e[t]):typeof e[t]=="number"||typeof e[t]=="boolean"||typeof e[t]=="function"?e[t]:e[t]||r[t],a},{});if(e!=null&&e.fontFamily&&!((o=e==null?void 0:e.headings)!=null&&o.fontFamily)&&(n.headings.fontFamily=e.fontFamily),!(n.primaryColor in n.colors))throw new Error("MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color");return n}function Wr(r,e){return U(Nr(r,e))}function Tr(r){return Object.keys(r).reduce((e,o)=>(r[o]!==void 0&&(e[o]=r[o]),e),{})}const Gr={html:{fontFamily:"sans-serif",lineHeight:"1.15",textSizeAdjust:"100%"},body:{margin:0},"article, aside, footer, header, nav, section, figcaption, figure, main":{display:"block"},h1:{fontSize:"2em"},hr:{boxSizing:"content-box",height:0,overflow:"visible"},pre:{fontFamily:"monospace, monospace",fontSize:"1em"},a:{background:"transparent",textDecorationSkip:"objects"},"a:active, a:hover":{outlineWidth:0},"abbr[title]":{borderBottom:"none",textDecoration:"underline"},"b, strong":{fontWeight:"bolder"},"code, kbp, samp":{fontFamily:"monospace, monospace",fontSize:"1em"},dfn:{fontStyle:"italic"},mark:{backgroundColor:"#ff0",color:"#000"},small:{fontSize:"80%"},"sub, sup":{fontSize:"75%",lineHeight:0,position:"relative",verticalAlign:"baseline"},sup:{top:"-0.5em"},sub:{bottom:"-0.25em"},"audio, video":{display:"inline-block"},"audio:not([controls])":{display:"none",height:0},img:{borderStyle:"none",verticalAlign:"middle"},"svg:not(:root)":{overflow:"hidden"},"button, input, optgroup, select, textarea":{fontFamily:"sans-serif",fontSize:"100%",lineHeight:"1.15",margin:0},"button, input":{overflow:"visible"},"button, select":{textTransform:"none"},"button, [type=reset], [type=submit]":{WebkitAppearance:"button"},"button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner":{borderStyle:"none",padding:0},"button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring":{outline:`${u(1)} dotted ButtonText`},legend:{boxSizing:"border-box",color:"inherit",display:"table",maxWidth:"100%",padding:0,whiteSpace:"normal"},progress:{display:"inline-block",verticalAlign:"baseline"},textarea:{overflow:"auto"},"[type=checkbox], [type=radio]":{boxSizing:"border-box",padding:0},"[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button":{height:"auto"},"[type=search]":{appearance:"none"},"[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration":{appearance:"none"},"::-webkit-file-upload-button":{appearance:"button",font:"inherit"},"details, menu":{display:"block"},summary:{display:"list-item"},canvas:{display:"inline-block"},template:{display:"none"}};function Dr(){return d.createElement(_,{styles:Gr})}var Vr=Object.defineProperty,N=Object.getOwnPropertySymbols,Ur=Object.prototype.hasOwnProperty,Lr=Object.prototype.propertyIsEnumerable,W=(r,e,o)=>e in r?Vr(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,m=(r,e)=>{for(var o in e||(e={}))Ur.call(e,o)&&W(r,o,e[o]);if(N)for(var o of N(e))Lr.call(e,o)&&W(r,o,e[o]);return r};const v=h.createContext({theme:E});function L(){var r;return((r=h.useContext(v))==null?void 0:r.theme)||E}function qr(r){const e=L(),o=n=>{var a,t,i,s;return{styles:((a=e.components[n])==null?void 0:a.styles)||{},classNames:((t=e.components[n])==null?void 0:t.classNames)||{},variants:(i=e.components[n])==null?void 0:i.variants,sizes:(s=e.components[n])==null?void 0:s.sizes}};return Array.isArray(r)?r.map(o):[o(r)]}function Jr(){var r;return(r=h.useContext(v))==null?void 0:r.emotionCache}function Kr(r,e,o){var n;const a=L(),t=(n=a.components[r])==null?void 0:n.defaultProps,i=typeof t=="function"?t(a):t;return m(m(m({},e),i),Tr(o))}function Xr({theme:r,emotionCache:e,withNormalizeCSS:o=!1,withGlobalStyles:n=!1,withCSSVariables:a=!1,inherit:t=!1,children:i}){const s=h.useContext(v),l=Wr(E,t?m(m({},s.theme),r):r);return d.createElement(X,{theme:l},d.createElement(v.Provider,{value:{theme:l,emotionCache:e}},o&&d.createElement(Dr,null),n&&d.createElement(jr,{theme:l}),a&&d.createElement(Rr,{theme:l}),typeof l.globalStyles=="function"&&d.createElement(_,{styles:l.globalStyles(l)}),i))}Xr.displayName="@mantine/core/MantineProvider";export{Xr as M,L as a,qr as b,V as c,Kr as d,Tr as f,S as g,u as r,Jr as u}; diff --git a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css new file mode 100644 index 0000000000..95c048737d --- /dev/null +++ b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-0667edb8.css @@ -0,0 +1,9 @@ +@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-ext-wght-normal-1c3007b8.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-wght-normal-eba94878.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-ext-wght-normal-81f77e51.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-wght-normal-d92c6cbc.woff2) format("woff2-variations");unicode-range:U+0370-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-vietnamese-wght-normal-15df7612.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-ext-wght-normal-a2bfd9fe.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-wght-normal-88df0b5a.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}/*! +* OverlayScrollbars +* Version: 2.4.5 +* +* Copyright (c) Rene Haas | KingSora. +* https://github.com/KingSora +* +* Released under the MIT license. +*/.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;top:0;right:0;bottom:0;left:0;transform:scale(.1)}.os-size-observer:before{content:"";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0px;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}.os-environment{scroll-behavior:auto!important;--os-custom-prop: -1;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:var(--os-custom-prop)}.os-environment div{width:200%;height:200%;margin:10px 0}.os-environment.os-environment-flexbox-glue{display:flex;flex-direction:row;flex-wrap:nowrap;height:auto;width:auto;min-height:200px;min-width:200px}.os-environment.os-environment-flexbox-glue div{flex:auto;width:auto;height:auto;max-height:100%;max-width:100%;margin:0}.os-environment.os-environment-flexbox-glue-max{max-height:200px}.os-environment.os-environment-flexbox-glue-max div{overflow:visible}.os-environment.os-environment-flexbox-glue-max div:before{content:"";display:block;height:999px;width:999px}.os-environment,[data-overlayscrollbars-viewport]{-ms-overflow-style:scrollbar!important}[data-overlayscrollbars-initialize],[data-overlayscrollbars~=scrollbarHidden],[data-overlayscrollbars-viewport~=scrollbarHidden],.os-scrollbar-hidden.os-environment{scrollbar-width:none!important}[data-overlayscrollbars-initialize]::-webkit-scrollbar,[data-overlayscrollbars-initialize]::-webkit-scrollbar-corner,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars~=scrollbarHidden]::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner,.os-scrollbar-hidden.os-environment::-webkit-scrollbar,.os-scrollbar-hidden.os-environment::-webkit-scrollbar-corner{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars],html.os-scrollbar-hidden,html.os-scrollbar-hidden>body{box-sizing:border-box;margin:0;width:100%;height:100%}html[data-overlayscrollbars]>body{overflow:visible}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{box-sizing:inherit;position:relative;flex:auto!important;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0}[data-overlayscrollbars-viewport]{--os-vaw: 0;--os-vah: 0}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:"";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:var(--os-vaw);height:var(--os-vah)}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{overflow:hidden}[data-overlayscrollbars~=host],[data-overlayscrollbars~=viewport]{position:relative;overflow:hidden}[data-overlayscrollbars~=overflowVisible],[data-overlayscrollbars-padding~=overflowVisible],[data-overlayscrollbars-viewport~=overflowVisible]{overflow:visible}[data-overlayscrollbars-overflow-x=hidden]{overflow-x:hidden}[data-overlayscrollbars-overflow-x=scroll]{overflow-x:scroll}[data-overlayscrollbars-overflow-x=hidden]{overflow-y:hidden}[data-overlayscrollbars-overflow-y=scroll]{overflow-y:scroll}[data-overlayscrollbars~=scrollbarPressed],[data-overlayscrollbars~=scrollbarPressed] [data-overlayscrollbars-viewport]{scroll-behavior:auto!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}.os-scrollbar{contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none}.os-scrollbar-track{position:relative;direction:ltr!important;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible,.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0}.os-scrollbar-vertical .os-scrollbar-handle{right:0}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}.os-scrollbar{--os-size: 0;--os-padding-perpendicular: 0;--os-padding-axis: 0;--os-track-border-radius: 0;--os-track-bg: none;--os-track-bg-hover: none;--os-track-bg-active: none;--os-track-border: none;--os-track-border-hover: none;--os-track-border-active: none;--os-handle-border-radius: 0;--os-handle-bg: none;--os-handle-bg-hover: none;--os-handle-bg-active: none;--os-handle-border: none;--os-handle-border-hover: none;--os-handle-border-active: none;--os-handle-min-size: 33px;--os-handle-max-size: none;--os-handle-perpendicular-size: 100%;--os-handle-perpendicular-size-hover: 100%;--os-handle-perpendicular-size-active: 100%;--os-handle-interactive-area-offset: 0}.os-scrollbar .os-scrollbar-track{border:var(--os-track-border);border-radius:var(--os-track-border-radius);background:var(--os-track-bg);transition:opacity .15s,background-color .15s,border-color .15s}.os-scrollbar .os-scrollbar-track:hover{border:var(--os-track-border-hover);background:var(--os-track-bg-hover)}.os-scrollbar .os-scrollbar-track:active{border:var(--os-track-border-active);background:var(--os-track-bg-active)}.os-scrollbar .os-scrollbar-handle{border:var(--os-handle-border);border-radius:var(--os-handle-border-radius);background:var(--os-handle-bg)}.os-scrollbar .os-scrollbar-handle:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;display:block}.os-scrollbar .os-scrollbar-handle:hover{border:var(--os-handle-border-hover);background:var(--os-handle-bg-hover)}.os-scrollbar .os-scrollbar-handle:active{border:var(--os-handle-border-active);background:var(--os-handle-bg-active)}.os-scrollbar-horizontal{padding:var(--os-padding-perpendicular) var(--os-padding-axis);right:var(--os-size);height:var(--os-size)}.os-scrollbar-horizontal.os-scrollbar-rtl{left:var(--os-size);right:0}.os-scrollbar-horizontal .os-scrollbar-handle{min-width:var(--os-handle-min-size);max-width:var(--os-handle-max-size);height:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,height .15s}.os-scrollbar-horizontal .os-scrollbar-handle:before{top:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal:hover .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-horizontal:active .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-active)}.os-scrollbar-vertical{padding:var(--os-padding-axis) var(--os-padding-perpendicular);bottom:var(--os-size);width:var(--os-size)}.os-scrollbar-vertical .os-scrollbar-handle{min-height:var(--os-handle-min-size);max-height:var(--os-handle-max-size);width:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,width .15s}.os-scrollbar-vertical .os-scrollbar-handle:before{left:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);left:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical:hover .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-vertical:active .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-active)}[data-overlayscrollbars~=updating]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}.os-theme-dark,.os-theme-light{box-sizing:border-box;--os-size: 10px;--os-padding-perpendicular: 2px;--os-padding-axis: 2px;--os-track-border-radius: 10px;--os-handle-interactive-area-offset: 4px;--os-handle-border-radius: 10px}.os-theme-dark{--os-handle-bg: rgba(0, 0, 0, .44);--os-handle-bg-hover: rgba(0, 0, 0, .55);--os-handle-bg-active: rgba(0, 0, 0, .66)}.os-theme-light{--os-handle-bg: rgba(255, 255, 255, .44);--os-handle-bg-hover: rgba(255, 255, 255, .55);--os-handle-bg-active: rgba(255, 255, 255, .66)}.os-no-css-vars.os-theme-dark.os-scrollbar .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar .os-scrollbar-handle,.os-no-css-vars.os-theme-dark.os-scrollbar .os-scrollbar-track,.os-no-css-vars.os-theme-light.os-scrollbar .os-scrollbar-track{border-radius:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal{padding:2px;right:10px;height:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-cornerless{right:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-rtl,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-rtl{left:10px;right:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal.os-scrollbar-rtl.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal.os-scrollbar-rtl.os-scrollbar-cornerless{left:0}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle{min-width:33px;max-width:none}.os-no-css-vars.os-theme-dark.os-scrollbar-horizontal .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-horizontal .os-scrollbar-handle:before{top:-6px;bottom:-2px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical,.os-no-css-vars.os-theme-light.os-scrollbar-vertical{padding:2px;bottom:10px;width:10px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical.os-scrollbar-cornerless,.os-no-css-vars.os-theme-light.os-scrollbar-vertical.os-scrollbar-cornerless{bottom:0}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle,.os-no-css-vars.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle{min-height:33px;max-height:none}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-vertical .os-scrollbar-handle:before{left:-6px;right:-2px}.os-no-css-vars.os-theme-dark.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before,.os-no-css-vars.os-theme-light.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:-6px;left:-2px}.os-no-css-vars.os-theme-dark .os-scrollbar-handle{background:rgba(0,0,0,.44)}.os-no-css-vars.os-theme-dark:hover .os-scrollbar-handle{background:rgba(0,0,0,.55)}.os-no-css-vars.os-theme-dark:active .os-scrollbar-handle{background:rgba(0,0,0,.66)}.os-no-css-vars.os-theme-light .os-scrollbar-handle{background:rgba(255,255,255,.44)}.os-no-css-vars.os-theme-light:hover .os-scrollbar-handle{background:rgba(255,255,255,.55)}.os-no-css-vars.os-theme-light:active .os-scrollbar-handle{background:rgba(255,255,255,.66)}.os-scrollbar{--os-handle-bg: var(--invokeai-colors-accentAlpha-500);--os-handle-bg-hover: var(--invokeai-colors-accentAlpha-700);--os-handle-bg-active: var(--invokeai-colors-accentAlpha-800);--os-handle-min-size: 50px} diff --git a/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-687f0135.js b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-687f0135.js new file mode 100644 index 0000000000..93448175d6 --- /dev/null +++ b/invokeai/frontend/web/dist/assets/ThemeLocaleProvider-687f0135.js @@ -0,0 +1,280 @@ +import{D as s,iE as T,r as l,Z as A,iF as D,a7 as R,iG as z,iH as j,iI as V,iJ as F,iK as G,iL as W,iM as K,at as H,iN as Z,iO as J}from"./index-fbe0e055.js";import{M as U}from"./MantineProvider-44862fff.js";var P=String.raw,E=P` + :root, + :host { + --chakra-vh: 100vh; + } + + @supports (height: -webkit-fill-available) { + :root, + :host { + --chakra-vh: -webkit-fill-available; + } + } + + @supports (height: -moz-fill-available) { + :root, + :host { + --chakra-vh: -moz-fill-available; + } + } + + @supports (height: 100dvh) { + :root, + :host { + --chakra-vh: 100dvh; + } + } +`,Y=()=>s.jsx(T,{styles:E}),B=({scope:e=""})=>s.jsx(T,{styles:P` + html { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + font-family: system-ui, sans-serif; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + -moz-osx-font-smoothing: grayscale; + touch-action: manipulation; + } + + body { + position: relative; + min-height: 100%; + margin: 0; + font-feature-settings: "kern"; + } + + ${e} :where(*, *::before, *::after) { + border-width: 0; + border-style: solid; + box-sizing: border-box; + word-wrap: break-word; + } + + main { + display: block; + } + + ${e} hr { + border-top-width: 1px; + box-sizing: content-box; + height: 0; + overflow: visible; + } + + ${e} :where(pre, code, kbd,samp) { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; + font-size: 1em; + } + + ${e} a { + background-color: transparent; + color: inherit; + text-decoration: inherit; + } + + ${e} abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + + ${e} :where(b, strong) { + font-weight: bold; + } + + ${e} small { + font-size: 80%; + } + + ${e} :where(sub,sup) { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + + ${e} sub { + bottom: -0.25em; + } + + ${e} sup { + top: -0.5em; + } + + ${e} img { + border-style: none; + } + + ${e} :where(button, input, optgroup, select, textarea) { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; + } + + ${e} :where(button, input) { + overflow: visible; + } + + ${e} :where(button, select) { + text-transform: none; + } + + ${e} :where( + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner + ) { + border-style: none; + padding: 0; + } + + ${e} fieldset { + padding: 0.35em 0.75em 0.625em; + } + + ${e} legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; + } + + ${e} progress { + vertical-align: baseline; + } + + ${e} textarea { + overflow: auto; + } + + ${e} :where([type="checkbox"], [type="radio"]) { + box-sizing: border-box; + padding: 0; + } + + ${e} input[type="number"]::-webkit-inner-spin-button, + ${e} input[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none !important; + } + + ${e} input[type="number"] { + -moz-appearance: textfield; + } + + ${e} input[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; + } + + ${e} input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none !important; + } + + ${e} ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; + } + + ${e} details { + display: block; + } + + ${e} summary { + display: list-item; + } + + template { + display: none; + } + + [hidden] { + display: none !important; + } + + ${e} :where( + blockquote, + dl, + dd, + h1, + h2, + h3, + h4, + h5, + h6, + hr, + figure, + p, + pre + ) { + margin: 0; + } + + ${e} button { + background: transparent; + padding: 0; + } + + ${e} fieldset { + margin: 0; + padding: 0; + } + + ${e} :where(ol, ul) { + margin: 0; + padding: 0; + } + + ${e} textarea { + resize: vertical; + } + + ${e} :where(button, [role="button"]) { + cursor: pointer; + } + + ${e} button::-moz-focus-inner { + border: 0 !important; + } + + ${e} table { + border-collapse: collapse; + } + + ${e} :where(h1, h2, h3, h4, h5, h6) { + font-size: inherit; + font-weight: inherit; + } + + ${e} :where(button, input, optgroup, select, textarea) { + padding: 0; + line-height: inherit; + color: inherit; + } + + ${e} :where(img, svg, video, canvas, audio, iframe, embed, object) { + display: block; + } + + ${e} :where(img, video) { + max-width: 100%; + height: auto; + } + + [data-js-focus-visible] + :focus:not([data-focus-visible-added]):not( + [data-focus-visible-disabled] + ) { + outline: none; + box-shadow: none; + } + + ${e} select::-ms-expand { + display: none; + } + + ${E} + `}),g={light:"chakra-ui-light",dark:"chakra-ui-dark"};function Q(e={}){const{preventTransition:o=!0}=e,n={setDataset:r=>{const t=o?n.preventTransition():void 0;document.documentElement.dataset.theme=r,document.documentElement.style.colorScheme=r,t==null||t()},setClassName(r){document.body.classList.add(r?g.dark:g.light),document.body.classList.remove(r?g.light:g.dark)},query(){return window.matchMedia("(prefers-color-scheme: dark)")},getSystemTheme(r){var t;return((t=n.query().matches)!=null?t:r==="dark")?"dark":"light"},addListener(r){const t=n.query(),i=a=>{r(a.matches?"dark":"light")};return typeof t.addListener=="function"?t.addListener(i):t.addEventListener("change",i),()=>{typeof t.removeListener=="function"?t.removeListener(i):t.removeEventListener("change",i)}},preventTransition(){const r=document.createElement("style");return r.appendChild(document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(r),()=>{window.getComputedStyle(document.body),requestAnimationFrame(()=>{requestAnimationFrame(()=>{document.head.removeChild(r)})})}}};return n}var X="chakra-ui-color-mode";function L(e){return{ssr:!1,type:"localStorage",get(o){if(!(globalThis!=null&&globalThis.document))return o;let n;try{n=localStorage.getItem(e)||o}catch{}return n||o},set(o){try{localStorage.setItem(e,o)}catch{}}}}var ee=L(X),M=()=>{};function S(e,o){return e.type==="cookie"&&e.ssr?e.get(o):o}function O(e){const{value:o,children:n,options:{useSystemColorMode:r,initialColorMode:t,disableTransitionOnChange:i}={},colorModeManager:a=ee}=e,d=t==="dark"?"dark":"light",[u,p]=l.useState(()=>S(a,d)),[y,b]=l.useState(()=>S(a)),{getSystemTheme:w,setClassName:k,setDataset:x,addListener:$}=l.useMemo(()=>Q({preventTransition:i}),[i]),f=t==="system"&&!u?y:u,c=l.useCallback(m=>{const v=m==="system"?w():m;p(v),k(v==="dark"),x(v),a.set(v)},[a,w,k,x]);A(()=>{t==="system"&&b(w())},[]),l.useEffect(()=>{const m=a.get();if(m){c(m);return}if(t==="system"){c("system");return}c(d)},[a,d,t,c]);const C=l.useCallback(()=>{c(f==="dark"?"light":"dark")},[f,c]);l.useEffect(()=>{if(r)return $(c)},[r,$,c]);const I=l.useMemo(()=>({colorMode:o??f,toggleColorMode:o?M:C,setColorMode:o?M:c,forced:o!==void 0}),[f,C,c,o]);return s.jsx(D.Provider,{value:I,children:n})}O.displayName="ColorModeProvider";var te=["borders","breakpoints","colors","components","config","direction","fonts","fontSizes","fontWeights","letterSpacings","lineHeights","radii","shadows","sizes","space","styles","transition","zIndices"];function re(e){return R(e)?te.every(o=>Object.prototype.hasOwnProperty.call(e,o)):!1}function h(e){return typeof e=="function"}function oe(...e){return o=>e.reduce((n,r)=>r(n),o)}var ne=e=>function(...n){let r=[...n],t=n[n.length-1];return re(t)&&r.length>1?r=r.slice(0,r.length-1):t=e,oe(...r.map(i=>a=>h(i)?i(a):ae(a,i)))(t)},ie=ne(j);function ae(...e){return z({},...e,_)}function _(e,o,n,r){if((h(e)||h(o))&&Object.prototype.hasOwnProperty.call(r,n))return(...t)=>{const i=h(e)?e(...t):e,a=h(o)?o(...t):o;return z({},i,a,_)}}var N=l.createContext({getDocument(){return document},getWindow(){return window}});N.displayName="EnvironmentContext";function q(e){const{children:o,environment:n,disabled:r}=e,t=l.useRef(null),i=l.useMemo(()=>n||{getDocument:()=>{var d,u;return(u=(d=t.current)==null?void 0:d.ownerDocument)!=null?u:document},getWindow:()=>{var d,u;return(u=(d=t.current)==null?void 0:d.ownerDocument.defaultView)!=null?u:window}},[n]),a=!r||!n;return s.jsxs(N.Provider,{value:i,children:[o,a&&s.jsx("span",{id:"__chakra_env",hidden:!0,ref:t})]})}q.displayName="EnvironmentProvider";var se=e=>{const{children:o,colorModeManager:n,portalZIndex:r,resetScope:t,resetCSS:i=!0,theme:a={},environment:d,cssVarsRoot:u,disableEnvironment:p,disableGlobalStyle:y}=e,b=s.jsx(q,{environment:d,disabled:p,children:o});return s.jsx(V,{theme:a,cssVarsRoot:u,children:s.jsxs(O,{colorModeManager:n,options:a.config,children:[i?s.jsx(B,{scope:t}):s.jsx(Y,{}),!y&&s.jsx(F,{}),r?s.jsx(G,{zIndex:r,children:b}):b]})})},le=e=>function({children:n,theme:r=e,toastOptions:t,...i}){return s.jsxs(se,{theme:r,...i,children:[s.jsx(W,{value:t==null?void 0:t.defaultOptions,children:n}),s.jsx(K,{...t})]})},de=le(j);const ue=()=>l.useMemo(()=>({colorScheme:"dark",fontFamily:"'Inter Variable', sans-serif",components:{ScrollArea:{defaultProps:{scrollbarSize:10},styles:{scrollbar:{"&:hover":{backgroundColor:"var(--invokeai-colors-baseAlpha-300)"}},thumb:{backgroundColor:"var(--invokeai-colors-baseAlpha-300)"}}}}}),[]);const ce=L("@@invokeai-color-mode");function me({children:e}){const{i18n:o}=H(),n=o.dir(),r=l.useMemo(()=>ie({...Z,direction:n}),[n]);l.useEffect(()=>{document.body.dir=n},[n]);const t=ue();return s.jsx(U,{theme:t,children:s.jsx(de,{theme:r,colorModeManager:ce,toastOptions:J,children:e})})}const fe=l.memo(me);export{fe as default}; diff --git a/invokeai/frontend/web/dist/assets/favicon-0d253ced.ico b/invokeai/frontend/web/dist/assets/favicon-0d253ced.ico new file mode 100644 index 0000000000000000000000000000000000000000..413340efb28b6a92b207d5180b836a7cc97f3694 GIT binary patch literal 118734 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 LhQiW2^zQ!yaVtbM literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/index-fbe0e055.js b/invokeai/frontend/web/dist/assets/index-fbe0e055.js new file mode 100644 index 0000000000..967df4dc9a --- /dev/null +++ b/invokeai/frontend/web/dist/assets/index-fbe0e055.js @@ -0,0 +1,155 @@ +var oq=Object.defineProperty;var sq=(e,t,n)=>t in e?oq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Kl=(e,t,n)=>(sq(e,typeof t!="symbol"?t+"":t,n),n),sx=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y=(e,t,n)=>(sx(e,t,"read from private field"),n?n.call(e):t.get(e)),Bt=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Ni=(e,t,n,r)=>(sx(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n);var th=(e,t,n,r)=>({set _(i){Ni(e,t,i,n)},get _(){return Y(e,t,r)}}),Wo=(e,t,n)=>(sx(e,t,"access private method"),n);function MO(e,t){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var He=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ml(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var RO={exports:{}},Tb={},OO={exports:{}},Ke={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var rm=Symbol.for("react.element"),aq=Symbol.for("react.portal"),lq=Symbol.for("react.fragment"),cq=Symbol.for("react.strict_mode"),uq=Symbol.for("react.profiler"),dq=Symbol.for("react.provider"),fq=Symbol.for("react.context"),hq=Symbol.for("react.forward_ref"),pq=Symbol.for("react.suspense"),gq=Symbol.for("react.memo"),mq=Symbol.for("react.lazy"),_k=Symbol.iterator;function yq(e){return e===null||typeof e!="object"?null:(e=_k&&e[_k]||e["@@iterator"],typeof e=="function"?e:null)}var $O={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},NO=Object.assign,FO={};function Tf(e,t,n){this.props=e,this.context=t,this.refs=FO,this.updater=n||$O}Tf.prototype.isReactComponent={};Tf.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Tf.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function DO(){}DO.prototype=Tf.prototype;function vE(e,t,n){this.props=e,this.context=t,this.refs=FO,this.updater=n||$O}var bE=vE.prototype=new DO;bE.constructor=vE;NO(bE,Tf.prototype);bE.isPureReactComponent=!0;var Sk=Array.isArray,LO=Object.prototype.hasOwnProperty,_E={current:null},BO={key:!0,ref:!0,__self:!0,__source:!0};function zO(e,t,n){var r,i={},o=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(o=""+t.key),t)LO.call(t,r)&&!BO.hasOwnProperty(r)&&(i[r]=t[r]);var a=arguments.length-2;if(a===1)i.children=n;else if(1>>1,V=$[z];if(0>>1;zi(te,N))eei(j,te)?($[z]=j,$[ee]=N,z=ee):($[z]=te,$[X]=N,z=X);else if(eei(j,N))$[z]=j,$[ee]=N,z=ee;else break e}}return D}function i($,D){var N=$.sortIndex-D.sortIndex;return N!==0?N:$.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,a=s.now();e.unstable_now=function(){return s.now()-a}}var l=[],c=[],u=1,d=null,f=3,h=!1,p=!1,m=!1,_=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function g($){for(var D=n(c);D!==null;){if(D.callback===null)r(c);else if(D.startTime<=$)r(c),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(c)}}function b($){if(m=!1,g($),!p)if(n(l)!==null)p=!0,O(S);else{var D=n(c);D!==null&&F(b,D.startTime-$)}}function S($,D){p=!1,m&&(m=!1,v(x),x=-1),h=!0;var N=f;try{for(g(D),d=n(l);d!==null&&(!(d.expirationTime>D)||$&&!R());){var z=d.callback;if(typeof z=="function"){d.callback=null,f=d.priorityLevel;var V=z(d.expirationTime<=D);D=e.unstable_now(),typeof V=="function"?d.callback=V:d===n(l)&&r(l),g(D)}else r(l);d=n(l)}if(d!==null)var H=!0;else{var X=n(c);X!==null&&F(b,X.startTime-D),H=!1}return H}finally{d=null,f=N,h=!1}}var w=!1,C=null,x=-1,k=5,A=-1;function R(){return!(e.unstable_now()-A$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):k=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(f){case 1:case 2:case 3:var D=3;break;default:D=f}var N=f;f=D;try{return $()}finally{f=N}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,D){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var N=f;f=$;try{return D()}finally{f=N}},e.unstable_scheduleCallback=function($,D,N){var z=e.unstable_now();switch(typeof N=="object"&&N!==null?(N=N.delay,N=typeof N=="number"&&0z?($.sortIndex=N,t(c,$),n(l)===null&&$===n(c)&&(m?(v(x),x=-1):m=!0,F(b,N-z))):($.sortIndex=V,t(l,$),p||h||(p=!0,O(S))),$},e.unstable_shouldYield=R,e.unstable_wrapCallback=function($){var D=f;return function(){var N=f;f=D;try{return $.apply(this,arguments)}finally{f=N}}}})(GO);UO.exports=GO;var kq=UO.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var HO=I,wi=kq;function ne(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yC=Object.prototype.hasOwnProperty,Pq=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,wk={},Ck={};function Iq(e){return yC.call(Ck,e)?!0:yC.call(wk,e)?!1:Pq.test(e)?Ck[e]=!0:(wk[e]=!0,!1)}function Mq(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Rq(e,t,n,r){if(t===null||typeof t>"u"||Mq(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Br(e,t,n,r,i,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var ir={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ir[e]=new Br(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ir[t]=new Br(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ir[e]=new Br(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ir[e]=new Br(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ir[e]=new Br(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ir[e]=new Br(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ir[e]=new Br(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ir[e]=new Br(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ir[e]=new Br(e,5,!1,e.toLowerCase(),null,!1,!1)});var xE=/[\-:]([a-z])/g;function wE(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xE,wE);ir[t]=new Br(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ir[e]=new Br(e,1,!1,e.toLowerCase(),null,!1,!1)});ir.xlinkHref=new Br("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ir[e]=new Br(e,1,!1,e.toLowerCase(),null,!0,!0)});function CE(e,t,n,r){var i=ir.hasOwnProperty(t)?ir[t]:null;(i!==null?i.type!==0:r||!(2a||i[s]!==o[a]){var l=` +`+i[s].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=s&&0<=a);break}}}finally{cx=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Dh(e):""}function Oq(e){switch(e.tag){case 5:return Dh(e.type);case 16:return Dh("Lazy");case 13:return Dh("Suspense");case 19:return Dh("SuspenseList");case 0:case 2:case 15:return e=ux(e.type,!1),e;case 11:return e=ux(e.type.render,!1),e;case 1:return e=ux(e.type,!0),e;default:return""}}function SC(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Qu:return"Fragment";case Xu:return"Portal";case vC:return"Profiler";case EE:return"StrictMode";case bC:return"Suspense";case _C:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case KO:return(e.displayName||"Context")+".Consumer";case qO:return(e._context.displayName||"Context")+".Provider";case TE:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case AE:return t=e.displayName||null,t!==null?t:SC(e.type)||"Memo";case La:t=e._payload,e=e._init;try{return SC(e(t))}catch{}}return null}function $q(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return SC(t);case 8:return t===EE?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ml(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function QO(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Nq(e){var t=QO(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(s){r=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function m0(e){e._valueTracker||(e._valueTracker=Nq(e))}function YO(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=QO(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Tv(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function xC(e,t){var n=t.checked;return Kt({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Tk(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ml(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function ZO(e,t){t=t.checked,t!=null&&CE(e,"checked",t,!1)}function wC(e,t){ZO(e,t);var n=ml(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?CC(e,t.type,n):t.hasOwnProperty("defaultValue")&&CC(e,t.type,ml(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ak(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function CC(e,t,n){(t!=="number"||Tv(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Lh=Array.isArray;function xd(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=y0.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Op(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var np={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Fq=["Webkit","ms","Moz","O"];Object.keys(np).forEach(function(e){Fq.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),np[t]=np[e]})});function n7(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||np.hasOwnProperty(e)&&np[e]?(""+t).trim():t+"px"}function r7(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=n7(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var Dq=Kt({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function AC(e,t){if(t){if(Dq[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ne(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ne(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(ne(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ne(62))}}function kC(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var PC=null;function kE(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var IC=null,wd=null,Cd=null;function Ik(e){if(e=sm(e)){if(typeof IC!="function")throw Error(ne(280));var t=e.stateNode;t&&(t=Mb(t),IC(e.stateNode,e.type,t))}}function i7(e){wd?Cd?Cd.push(e):Cd=[e]:wd=e}function o7(){if(wd){var e=wd,t=Cd;if(Cd=wd=null,Ik(e),t)for(e=0;e>>=0,e===0?32:31-(Kq(e)/Xq|0)|0}var v0=64,b0=4194304;function Bh(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Iv(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,o=e.pingedLanes,s=n&268435455;if(s!==0){var a=s&~i;a!==0?r=Bh(a):(o&=s,o!==0&&(r=Bh(o)))}else s=n&~i,s!==0?r=Bh(s):o!==0&&(r=Bh(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&i)&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function im(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ao(t),e[t]=n}function Jq(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=ip),Bk=String.fromCharCode(32),zk=!1;function E7(e,t){switch(e){case"keyup":return AK.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function T7(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Yu=!1;function PK(e,t){switch(e){case"compositionend":return T7(t);case"keypress":return t.which!==32?null:(zk=!0,Bk);case"textInput":return e=t.data,e===Bk&&zk?null:e;default:return null}}function IK(e,t){if(Yu)return e==="compositionend"||!FE&&E7(e,t)?(e=w7(),Ly=OE=Za=null,Yu=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Gk(n)}}function I7(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?I7(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function M7(){for(var e=window,t=Tv();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Tv(e.document)}return t}function DE(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function BK(e){var t=M7(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&I7(n.ownerDocument.documentElement,n)){if(r!==null&&DE(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!e.extend&&o>r&&(i=r,r=o,o=i),i=Hk(n,o);var s=Hk(n,r);i&&s&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Zu=null,FC=null,sp=null,DC=!1;function Wk(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;DC||Zu==null||Zu!==Tv(r)||(r=Zu,"selectionStart"in r&&DE(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),sp&&Bp(sp,r)||(sp=r,r=Ov(FC,"onSelect"),0td||(e.current=UC[td],UC[td]=null,td--)}function kt(e,t){td++,UC[td]=e.current,e.current=t}var yl={},vr=Ol(yl),Yr=Ol(!1),Vc=yl;function Zd(e,t){var n=e.type.contextTypes;if(!n)return yl;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Zr(e){return e=e.childContextTypes,e!=null}function Nv(){Ft(Yr),Ft(vr)}function Jk(e,t,n){if(vr.current!==yl)throw Error(ne(168));kt(vr,t),kt(Yr,n)}function z7(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in t))throw Error(ne(108,$q(e)||"Unknown",i));return Kt({},n,r)}function Fv(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||yl,Vc=vr.current,kt(vr,e),kt(Yr,Yr.current),!0}function eP(e,t,n){var r=e.stateNode;if(!r)throw Error(ne(169));n?(e=z7(e,t,Vc),r.__reactInternalMemoizedMergedChildContext=e,Ft(Yr),Ft(vr),kt(vr,e)):Ft(Yr),kt(Yr,n)}var Bs=null,Rb=!1,Cx=!1;function j7(e){Bs===null?Bs=[e]:Bs.push(e)}function YK(e){Rb=!0,j7(e)}function $l(){if(!Cx&&Bs!==null){Cx=!0;var e=0,t=mt;try{var n=Bs;for(mt=1;e>=s,i-=s,qs=1<<32-Ao(t)+i|n<x?(k=C,C=null):k=C.sibling;var A=f(v,C,g[x],b);if(A===null){C===null&&(C=k);break}e&&C&&A.alternate===null&&t(v,C),y=o(A,y,x),w===null?S=A:w.sibling=A,w=A,C=k}if(x===g.length)return n(v,C),zt&&rc(v,x),S;if(C===null){for(;xx?(k=C,C=null):k=C.sibling;var R=f(v,C,A.value,b);if(R===null){C===null&&(C=k);break}e&&C&&R.alternate===null&&t(v,C),y=o(R,y,x),w===null?S=R:w.sibling=R,w=R,C=k}if(A.done)return n(v,C),zt&&rc(v,x),S;if(C===null){for(;!A.done;x++,A=g.next())A=d(v,A.value,b),A!==null&&(y=o(A,y,x),w===null?S=A:w.sibling=A,w=A);return zt&&rc(v,x),S}for(C=r(v,C);!A.done;x++,A=g.next())A=h(C,v,x,A.value,b),A!==null&&(e&&A.alternate!==null&&C.delete(A.key===null?x:A.key),y=o(A,y,x),w===null?S=A:w.sibling=A,w=A);return e&&C.forEach(function(L){return t(v,L)}),zt&&rc(v,x),S}function _(v,y,g,b){if(typeof g=="object"&&g!==null&&g.type===Qu&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case g0:e:{for(var S=g.key,w=y;w!==null;){if(w.key===S){if(S=g.type,S===Qu){if(w.tag===7){n(v,w.sibling),y=i(w,g.props.children),y.return=v,v=y;break e}}else if(w.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===La&&aP(S)===w.type){n(v,w.sibling),y=i(w,g.props),y.ref=ah(v,w,g),y.return=v,v=y;break e}n(v,w);break}else t(v,w);w=w.sibling}g.type===Qu?(y=Pc(g.props.children,v.mode,b,g.key),y.return=v,v=y):(b=Wy(g.type,g.key,g.props,null,v.mode,b),b.ref=ah(v,y,g),b.return=v,v=b)}return s(v);case Xu:e:{for(w=g.key;y!==null;){if(y.key===w)if(y.tag===4&&y.stateNode.containerInfo===g.containerInfo&&y.stateNode.implementation===g.implementation){n(v,y.sibling),y=i(y,g.children||[]),y.return=v,v=y;break e}else{n(v,y);break}else t(v,y);y=y.sibling}y=Rx(g,v.mode,b),y.return=v,v=y}return s(v);case La:return w=g._init,_(v,y,w(g._payload),b)}if(Lh(g))return p(v,y,g,b);if(nh(g))return m(v,y,g,b);T0(v,g)}return typeof g=="string"&&g!==""||typeof g=="number"?(g=""+g,y!==null&&y.tag===6?(n(v,y.sibling),y=i(y,g),y.return=v,v=y):(n(v,y),y=Mx(g,v.mode,b),y.return=v,v=y),s(v)):n(v,y)}return _}var ef=X7(!0),Q7=X7(!1),am={},hs=Ol(am),Up=Ol(am),Gp=Ol(am);function _c(e){if(e===am)throw Error(ne(174));return e}function WE(e,t){switch(kt(Gp,t),kt(Up,e),kt(hs,am),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:TC(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=TC(t,e)}Ft(hs),kt(hs,t)}function tf(){Ft(hs),Ft(Up),Ft(Gp)}function Y7(e){_c(Gp.current);var t=_c(hs.current),n=TC(t,e.type);t!==n&&(kt(Up,e),kt(hs,n))}function qE(e){Up.current===e&&(Ft(hs),Ft(Up))}var Ht=Ol(0);function Vv(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ex=[];function KE(){for(var e=0;en?n:4,e(!0);var r=Tx.transition;Tx.transition={};try{e(!1),t()}finally{mt=n,Tx.transition=r}}function h$(){return Zi().memoizedState}function tX(e,t,n){var r=ll(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},p$(e))g$(t,n);else if(n=H7(e,t,n,r),n!==null){var i=Nr();ko(n,e,r,i),m$(n,t,r)}}function nX(e,t,n){var r=ll(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(p$(e))g$(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,a=o(s,n);if(i.hasEagerState=!0,i.eagerState=a,$o(a,s)){var l=t.interleaved;l===null?(i.next=i,GE(t)):(i.next=l.next,l.next=i),t.interleaved=i;return}}catch{}finally{}n=H7(e,t,i,r),n!==null&&(i=Nr(),ko(n,e,r,i),m$(n,t,r))}}function p$(e){var t=e.alternate;return e===qt||t!==null&&t===qt}function g$(e,t){ap=Uv=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function m$(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,IE(e,n)}}var Gv={readContext:Yi,useCallback:cr,useContext:cr,useEffect:cr,useImperativeHandle:cr,useInsertionEffect:cr,useLayoutEffect:cr,useMemo:cr,useReducer:cr,useRef:cr,useState:cr,useDebugValue:cr,useDeferredValue:cr,useTransition:cr,useMutableSource:cr,useSyncExternalStore:cr,useId:cr,unstable_isNewReconciler:!1},rX={readContext:Yi,useCallback:function(e,t){return Qo().memoizedState=[e,t===void 0?null:t],e},useContext:Yi,useEffect:cP,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Vy(4194308,4,l$.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Vy(4194308,4,e,t)},useInsertionEffect:function(e,t){return Vy(4,2,e,t)},useMemo:function(e,t){var n=Qo();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Qo();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=tX.bind(null,qt,e),[r.memoizedState,e]},useRef:function(e){var t=Qo();return e={current:e},t.memoizedState=e},useState:lP,useDebugValue:JE,useDeferredValue:function(e){return Qo().memoizedState=e},useTransition:function(){var e=lP(!1),t=e[0];return e=eX.bind(null,e[1]),Qo().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=qt,i=Qo();if(zt){if(n===void 0)throw Error(ne(407));n=n()}else{if(n=t(),Ln===null)throw Error(ne(349));Gc&30||e$(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,cP(n$.bind(null,r,o,e),[e]),r.flags|=2048,qp(9,t$.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Qo(),t=Ln.identifierPrefix;if(zt){var n=Ks,r=qs;n=(r&~(1<<32-Ao(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Hp++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[os]=t,e[Vp]=r,E$(e,t,!1,!1),t.stateNode=e;e:{switch(s=kC(n,r),n){case"dialog":Mt("cancel",e),Mt("close",e),i=r;break;case"iframe":case"object":case"embed":Mt("load",e),i=r;break;case"video":case"audio":for(i=0;irf&&(t.flags|=128,r=!0,lh(o,!1),t.lanes=4194304)}else{if(!r)if(e=Vv(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),lh(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!zt)return ur(t),null}else 2*cn()-o.renderingStartTime>rf&&n!==1073741824&&(t.flags|=128,r=!0,lh(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(n=o.last,n!==null?n.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=cn(),t.sibling=null,n=Ht.current,kt(Ht,r?n&1|2:n&1),t):(ur(t),null);case 22:case 23:return o4(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?fi&1073741824&&(ur(t),t.subtreeFlags&6&&(t.flags|=8192)):ur(t),null;case 24:return null;case 25:return null}throw Error(ne(156,t.tag))}function dX(e,t){switch(BE(t),t.tag){case 1:return Zr(t.type)&&Nv(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return tf(),Ft(Yr),Ft(vr),KE(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return qE(t),null;case 13:if(Ft(Ht),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(ne(340));Jd()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ft(Ht),null;case 4:return tf(),null;case 10:return UE(t.type._context),null;case 22:case 23:return o4(),null;case 24:return null;default:return null}}var k0=!1,gr=!1,fX=typeof WeakSet=="function"?WeakSet:Set,ye=null;function od(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Zt(e,t,r)}else n.current=null}function t5(e,t,n){try{n()}catch(r){Zt(e,t,r)}}var vP=!1;function hX(e,t){if(LC=Mv,e=M7(),DE(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var s=0,a=-1,l=-1,c=0,u=0,d=e,f=null;t:for(;;){for(var h;d!==n||i!==0&&d.nodeType!==3||(a=s+i),d!==o||r!==0&&d.nodeType!==3||(l=s+r),d.nodeType===3&&(s+=d.nodeValue.length),(h=d.firstChild)!==null;)f=d,d=h;for(;;){if(d===e)break t;if(f===n&&++c===i&&(a=s),f===o&&++u===r&&(l=s),(h=d.nextSibling)!==null)break;d=f,f=d.parentNode}d=h}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(BC={focusedElem:e,selectionRange:n},Mv=!1,ye=t;ye!==null;)if(t=ye,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ye=e;else for(;ye!==null;){t=ye;try{var p=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(p!==null){var m=p.memoizedProps,_=p.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:yo(t.type,m),_);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var g=t.stateNode.containerInfo;g.nodeType===1?g.textContent="":g.nodeType===9&&g.documentElement&&g.removeChild(g.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(ne(163))}}catch(b){Zt(t,t.return,b)}if(e=t.sibling,e!==null){e.return=t.return,ye=e;break}ye=t.return}return p=vP,vP=!1,p}function lp(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&t5(t,n,o)}i=i.next}while(i!==r)}}function Nb(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function n5(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function k$(e){var t=e.alternate;t!==null&&(e.alternate=null,k$(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[os],delete t[Vp],delete t[VC],delete t[XK],delete t[QK])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function P$(e){return e.tag===5||e.tag===3||e.tag===4}function bP(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||P$(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function r5(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=$v));else if(r!==4&&(e=e.child,e!==null))for(r5(e,t,n),e=e.sibling;e!==null;)r5(e,t,n),e=e.sibling}function i5(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(i5(e,t,n),e=e.sibling;e!==null;)i5(e,t,n),e=e.sibling}var Zn=null,bo=!1;function Aa(e,t,n){for(n=n.child;n!==null;)I$(e,t,n),n=n.sibling}function I$(e,t,n){if(fs&&typeof fs.onCommitFiberUnmount=="function")try{fs.onCommitFiberUnmount(Ab,n)}catch{}switch(n.tag){case 5:gr||od(n,t);case 6:var r=Zn,i=bo;Zn=null,Aa(e,t,n),Zn=r,bo=i,Zn!==null&&(bo?(e=Zn,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Zn.removeChild(n.stateNode));break;case 18:Zn!==null&&(bo?(e=Zn,n=n.stateNode,e.nodeType===8?wx(e.parentNode,n):e.nodeType===1&&wx(e,n),Dp(e)):wx(Zn,n.stateNode));break;case 4:r=Zn,i=bo,Zn=n.stateNode.containerInfo,bo=!0,Aa(e,t,n),Zn=r,bo=i;break;case 0:case 11:case 14:case 15:if(!gr&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&t5(n,t,s),i=i.next}while(i!==r)}Aa(e,t,n);break;case 1:if(!gr&&(od(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){Zt(n,t,a)}Aa(e,t,n);break;case 21:Aa(e,t,n);break;case 22:n.mode&1?(gr=(r=gr)||n.memoizedState!==null,Aa(e,t,n),gr=r):Aa(e,t,n);break;default:Aa(e,t,n)}}function _P(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new fX),t.forEach(function(r){var i=xX.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function po(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=s),r&=~o}if(r=i,r=cn()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*gX(r/1960))-r,10e?16:e,Ja===null)var r=!1;else{if(e=Ja,Ja=null,qv=0,it&6)throw Error(ne(331));var i=it;for(it|=4,ye=e.current;ye!==null;){var o=ye,s=o.child;if(ye.flags&16){var a=o.deletions;if(a!==null){for(var l=0;lcn()-r4?kc(e,0):n4|=n),Jr(e,t)}function L$(e,t){t===0&&(e.mode&1?(t=b0,b0<<=1,!(b0&130023424)&&(b0=4194304)):t=1);var n=Nr();e=la(e,t),e!==null&&(im(e,t,n),Jr(e,n))}function SX(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),L$(e,n)}function xX(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(ne(314))}r!==null&&r.delete(t),L$(e,n)}var B$;B$=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Yr.current)Xr=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Xr=!1,cX(e,t,n);Xr=!!(e.flags&131072)}else Xr=!1,zt&&t.flags&1048576&&V7(t,Lv,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Uy(e,t),e=t.pendingProps;var i=Zd(t,vr.current);Td(t,n),i=QE(null,t,r,e,i,n);var o=YE();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Zr(r)?(o=!0,Fv(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,HE(t),i.updater=Ob,t.stateNode=i,i._reactInternals=t,KC(t,r,e,n),t=YC(null,t,r,!0,o,n)):(t.tag=0,zt&&o&&LE(t),Rr(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Uy(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=CX(r),e=yo(r,e),i){case 0:t=QC(null,t,r,e,n);break e;case 1:t=gP(null,t,r,e,n);break e;case 11:t=hP(null,t,r,e,n);break e;case 14:t=pP(null,t,r,yo(r.type,e),n);break e}throw Error(ne(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),QC(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),gP(e,t,r,i,n);case 3:e:{if(x$(t),e===null)throw Error(ne(387));r=t.pendingProps,o=t.memoizedState,i=o.element,W7(e,t),jv(t,r,null,n);var s=t.memoizedState;if(r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=nf(Error(ne(423)),t),t=mP(e,t,r,n,i);break e}else if(r!==i){i=nf(Error(ne(424)),t),t=mP(e,t,r,n,i);break e}else for(vi=ol(t.stateNode.containerInfo.firstChild),_i=t,zt=!0,So=null,n=Q7(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jd(),r===i){t=ca(e,t,n);break e}Rr(e,t,r,n)}t=t.child}return t;case 5:return Y7(t),e===null&&HC(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,s=i.children,zC(r,i)?s=null:o!==null&&zC(r,o)&&(t.flags|=32),S$(e,t),Rr(e,t,s,n),t.child;case 6:return e===null&&HC(t),null;case 13:return w$(e,t,n);case 4:return WE(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=ef(t,null,r,n):Rr(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),hP(e,t,r,i,n);case 7:return Rr(e,t,t.pendingProps,n),t.child;case 8:return Rr(e,t,t.pendingProps.children,n),t.child;case 12:return Rr(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,o=t.memoizedProps,s=i.value,kt(Bv,r._currentValue),r._currentValue=s,o!==null)if($o(o.value,s)){if(o.children===i.children&&!Yr.current){t=ca(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var a=o.dependencies;if(a!==null){s=o.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Js(-1,n&-n),l.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var u=c.pending;u===null?l.next=l:(l.next=u.next,u.next=l),c.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),WC(o.return,n,t),a.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(ne(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),WC(s,n,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Rr(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,Td(t,n),i=Yi(i),r=r(i),t.flags|=1,Rr(e,t,r,n),t.child;case 14:return r=t.type,i=yo(r,t.pendingProps),i=yo(r.type,i),pP(e,t,r,i,n);case 15:return b$(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:yo(r,i),Uy(e,t),t.tag=1,Zr(r)?(e=!0,Fv(t)):e=!1,Td(t,n),K7(t,r,i),KC(t,r,i,n),YC(null,t,r,!0,e,n);case 19:return C$(e,t,n);case 22:return _$(e,t,n)}throw Error(ne(156,t.tag))};function z$(e,t){return f7(e,t)}function wX(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ki(e,t,n,r){return new wX(e,t,n,r)}function a4(e){return e=e.prototype,!(!e||!e.isReactComponent)}function CX(e){if(typeof e=="function")return a4(e)?1:0;if(e!=null){if(e=e.$$typeof,e===TE)return 11;if(e===AE)return 14}return 2}function cl(e,t){var n=e.alternate;return n===null?(n=Ki(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Wy(e,t,n,r,i,o){var s=2;if(r=e,typeof e=="function")a4(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Qu:return Pc(n.children,i,o,t);case EE:s=8,i|=8;break;case vC:return e=Ki(12,n,t,i|2),e.elementType=vC,e.lanes=o,e;case bC:return e=Ki(13,n,t,i),e.elementType=bC,e.lanes=o,e;case _C:return e=Ki(19,n,t,i),e.elementType=_C,e.lanes=o,e;case XO:return Db(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case qO:s=10;break e;case KO:s=9;break e;case TE:s=11;break e;case AE:s=14;break e;case La:s=16,r=null;break e}throw Error(ne(130,e==null?e:typeof e,""))}return t=Ki(s,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function Pc(e,t,n,r){return e=Ki(7,e,r,t),e.lanes=n,e}function Db(e,t,n,r){return e=Ki(22,e,r,t),e.elementType=XO,e.lanes=n,e.stateNode={isHidden:!1},e}function Mx(e,t,n){return e=Ki(6,e,null,t),e.lanes=n,e}function Rx(e,t,n){return t=Ki(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function EX(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=fx(0),this.expirationTimes=fx(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=fx(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function l4(e,t,n,r,i,o,s,a,l){return e=new EX(e,t,n,a,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Ki(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},HE(o),e}function TX(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(G$)}catch(e){console.error(e)}}G$(),VO.exports=ki;var gi=VO.exports;const pze=Ml(gi);var kP=gi;mC.createRoot=kP.createRoot,mC.hydrateRoot=kP.hydrateRoot;const MX="modulepreload",RX=function(e,t){return new URL(e,t).href},PP={},H$=function(t,n,r){if(!n||n.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=RX(o,r),o in PP)return;PP[o]=!0;const s=o.endsWith(".css"),a=s?'[rel="stylesheet"]':"";if(!!r)for(let u=i.length-1;u>=0;u--){const d=i[u];if(d.href===o&&(!s||d.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${a}`))return;const c=document.createElement("link");if(c.rel=s?"stylesheet":MX,s||(c.as="script",c.crossOrigin=""),c.href=o,document.head.appendChild(c),s)return new Promise((u,d)=>{c.addEventListener("load",u),c.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t()).catch(o=>{const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=o,window.dispatchEvent(s),!s.defaultPrevented)throw o})};let Ar=[],to=(e,t)=>{let n=[],r={get(){return r.lc||r.listen(()=>{})(),r.value},l:t||0,lc:0,listen(i,o){return r.lc=n.push(i,o||r.l)/2,()=>{let s=n.indexOf(i);~s&&(n.splice(s,2),--r.lc||r.off())}},notify(i){let o=!Ar.length;for(let s=0;s{r.has(o)&&n(i,o)})}let $X=(e={})=>{let t=to(e);return t.setKey=function(n,r){typeof r>"u"?n in t.value&&(t.value={...t.value},delete t.value[n],t.notify(n)):t.value[n]!==r&&(t.value={...t.value,[n]:r},t.notify(n))},t};function Ox(e,t={}){let n=I.useCallback(i=>t.keys?OX(e,t.keys,i):e.listen(i),[t.keys,e]),r=e.get.bind(e);return I.useSyncExternalStore(n,r,r)}const Qv=to(),Yv=to(),Zv=to(!1);var W$={exports:{}},q$={};/** + * @license React + * use-sync-external-store-with-selector.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var lm=I;function NX(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var FX=typeof Object.is=="function"?Object.is:NX,DX=lm.useSyncExternalStore,LX=lm.useRef,BX=lm.useEffect,zX=lm.useMemo,jX=lm.useDebugValue;q$.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=LX(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=zX(function(){function l(h){if(!c){if(c=!0,u=h,h=r(h),i!==void 0&&s.hasValue){var p=s.value;if(i(p,h))return d=p}return d=h}if(p=d,FX(u,h))return p;var m=r(h);return i!==void 0&&i(p,m)?p:(u=h,d=m)}var c=!1,u,d,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,i]);var a=DX(e,o[0],o[1]);return BX(function(){s.hasValue=!0,s.value=a},[a]),jX(a),a};W$.exports=q$;var VX=W$.exports;function UX(e){e()}var K$=UX,GX=e=>K$=e,HX=()=>K$,bi="default"in Ev?Q:Ev,IP=Symbol.for("react-redux-context"),MP=typeof globalThis<"u"?globalThis:{};function WX(){if(!bi.createContext)return{};const e=MP[IP]??(MP[IP]=new Map);let t=e.get(bi.createContext);return t||(t=bi.createContext(null),e.set(bi.createContext,t)),t}var vl=WX(),qX=()=>{throw new Error("uSES not initialized!")};function f4(e=vl){return function(){return bi.useContext(e)}}var X$=f4(),Q$=qX,KX=e=>{Q$=e},XX=(e,t)=>e===t;function QX(e=vl){const t=e===vl?X$:f4(e);return function(r,i={}){const{equalityFn:o=XX,devModeChecks:s={}}=typeof i=="function"?{equalityFn:i}:i,{store:a,subscription:l,getServerState:c,stabilityCheck:u,identityFunctionCheck:d}=t();bi.useRef(!0);const f=bi.useCallback({[r.name](p){return r(p)}}[r.name],[r,u,s.stabilityCheck]),h=Q$(l.addNestedSub,a.getState,c||a.getState,f,o);return bi.useDebugValue(h),h}}var Y$=QX();function YX(){const e=HX();let t=null,n=null;return{clear(){t=null,n=null},notify(){e(()=>{let r=t;for(;r;)r.callback(),r=r.next})},get(){let r=[],i=t;for(;i;)r.push(i),i=i.next;return r},subscribe(r){let i=!0,o=n={callback:r,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){!i||t===null||(i=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}var RP={notify(){},get:()=>[]};function ZX(e,t){let n,r=RP,i=0,o=!1;function s(m){u();const _=r.subscribe(m);let v=!1;return()=>{v||(v=!0,_(),d())}}function a(){r.notify()}function l(){p.onStateChange&&p.onStateChange()}function c(){return o}function u(){i++,n||(n=t?t.addNestedSub(l):e.subscribe(l),r=YX())}function d(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=RP)}function f(){o||(o=!0,u())}function h(){o&&(o=!1,d())}const p={addNestedSub:s,notifyNestedSubs:a,handleChangeWrapper:l,isSubscribed:c,trySubscribe:f,tryUnsubscribe:h,getListeners:()=>r};return p}var JX=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",eQ=JX?bi.useLayoutEffect:bi.useEffect;function OP(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function Jv(e,t){if(OP(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let i=0;i{const c=ZX(e);return{store:e,subscription:c,getServerState:r?()=>r:void 0,stabilityCheck:i,identityFunctionCheck:o}},[e,r,i,o]),a=bi.useMemo(()=>e.getState(),[e]);eQ(()=>{const{subscription:c}=s;return c.onStateChange=c.notifyNestedSubs,c.trySubscribe(),a!==e.getState()&&c.notifyNestedSubs(),()=>{c.tryUnsubscribe(),c.onStateChange=void 0}},[s,a]);const l=t||vl;return bi.createElement(l.Provider,{value:s},n)}var nQ=tQ;function Z$(e=vl){const t=e===vl?X$:f4(e);return function(){const{store:r}=t();return r}}var J$=Z$();function rQ(e=vl){const t=e===vl?J$:Z$(e);return function(){return t().dispatch}}var eN=rQ();KX(VX.useSyncExternalStoreWithSelector);GX(gi.unstable_batchedUpdates);var iQ=gi.unstable_batchedUpdates;const tN=()=>eN(),nN=Y$,rN="default",In=to(rN);function Yn(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var oQ=(()=>typeof Symbol=="function"&&Symbol.observable||"@@observable")(),$P=oQ,$x=()=>Math.random().toString(36).substring(7).split("").join("."),sQ={INIT:`@@redux/INIT${$x()}`,REPLACE:`@@redux/REPLACE${$x()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${$x()}`},e1=sQ;function _s(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function iN(e,t,n){if(typeof e!="function")throw new Error(Yn(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Yn(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Yn(1));return n(iN)(e,t)}let r=e,i=t,o=new Map,s=o,a=0,l=!1;function c(){s===o&&(s=new Map,o.forEach((_,v)=>{s.set(v,_)}))}function u(){if(l)throw new Error(Yn(3));return i}function d(_){if(typeof _!="function")throw new Error(Yn(4));if(l)throw new Error(Yn(5));let v=!0;c();const y=a++;return s.set(y,_),function(){if(v){if(l)throw new Error(Yn(6));v=!1,c(),s.delete(y),o=null}}}function f(_){if(!_s(_))throw new Error(Yn(7));if(typeof _.type>"u")throw new Error(Yn(8));if(typeof _.type!="string")throw new Error(Yn(17));if(l)throw new Error(Yn(9));try{l=!0,i=r(i,_)}finally{l=!1}return(o=s).forEach(y=>{y()}),_}function h(_){if(typeof _!="function")throw new Error(Yn(10));r=_,f({type:e1.REPLACE})}function p(){const _=d;return{subscribe(v){if(typeof v!="object"||v===null)throw new Error(Yn(11));function y(){const b=v;b.next&&b.next(u())}return y(),{unsubscribe:_(y)}},[$P](){return this}}}return f({type:e1.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:h,[$P]:p}}function aQ(e){Object.keys(e).forEach(t=>{const n=e[t];if(typeof n(void 0,{type:e1.INIT})>"u")throw new Error(Yn(12));if(typeof n(void 0,{type:e1.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Yn(13))})}function Vb(e){const t=Object.keys(e),n={};for(let o=0;o"u")throw a&&a.type,new Error(Yn(14));c[d]=p,l=l||p!==h}return l=l||r.length!==Object.keys(s).length,l?c:s}}function t1(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function lQ(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Yn(15))};const s={getState:i.getState,dispatch:(l,...c)=>o(l,...c)},a=e.map(l=>l(s));return o=t1(...a)(i.dispatch),{...i,dispatch:o}}}function Ub(e){return _s(e)&&"type"in e&&typeof e.type=="string"}var h4=Symbol.for("immer-nothing"),dp=Symbol.for("immer-draftable"),ei=Symbol.for("immer-state");function tr(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var qc=Object.getPrototypeOf;function Ji(e){return!!e&&!!e[ei]}function No(e){var t;return e?oN(e)||Array.isArray(e)||!!e[dp]||!!((t=e.constructor)!=null&&t[dp])||cm(e)||um(e):!1}var cQ=Object.prototype.constructor.toString();function oN(e){if(!e||typeof e!="object")return!1;const t=qc(e);if(t===null)return!0;const n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object?!0:typeof n=="function"&&Function.toString.call(n)===cQ}function uQ(e){return Ji(e)||tr(15,e),e[ei].base_}function of(e,t){Kc(e)===0?Object.entries(e).forEach(([n,r])=>{t(n,r,e)}):e.forEach((n,r)=>t(r,n,e))}function Kc(e){const t=e[ei];return t?t.type_:Array.isArray(e)?1:cm(e)?2:um(e)?3:0}function Xp(e,t){return Kc(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Nx(e,t){return Kc(e)===2?e.get(t):e[t]}function sN(e,t,n){const r=Kc(e);r===2?e.set(t,n):r===3?e.add(n):e[t]=n}function dQ(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function cm(e){return e instanceof Map}function um(e){return e instanceof Set}function oc(e){return e.copy_||e.base_}function c5(e,t){if(cm(e))return new Map(e);if(um(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);if(!t&&oN(e))return qc(e)?{...e}:Object.assign(Object.create(null),e);const n=Object.getOwnPropertyDescriptors(e);delete n[ei];let r=Reflect.ownKeys(n);for(let i=0;i1&&(e.set=e.add=e.clear=e.delete=fQ),Object.freeze(e),t&&of(e,(n,r)=>p4(r,!0))),e}function fQ(){tr(2)}function Gb(e){return Object.isFrozen(e)}var u5={};function Xc(e){const t=u5[e];return t||tr(0,e),t}function hQ(e,t){u5[e]||(u5[e]=t)}var Qp;function aN(){return Qp}function pQ(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function NP(e,t){t&&(Xc("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function d5(e){f5(e),e.drafts_.forEach(gQ),e.drafts_=null}function f5(e){e===Qp&&(Qp=e.parent_)}function FP(e){return Qp=pQ(Qp,e)}function gQ(e){const t=e[ei];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function DP(e,t){t.unfinalizedDrafts_=t.drafts_.length;const n=t.drafts_[0];return e!==void 0&&e!==n?(n[ei].modified_&&(d5(t),tr(4)),No(e)&&(e=n1(t,e),t.parent_||r1(t,e)),t.patches_&&Xc("Patches").generateReplacementPatches_(n[ei].base_,e,t.patches_,t.inversePatches_)):e=n1(t,n,[]),d5(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==h4?e:void 0}function n1(e,t,n){if(Gb(t))return t;const r=t[ei];if(!r)return of(t,(i,o)=>LP(e,r,t,i,o,n)),t;if(r.scope_!==e)return t;if(!r.modified_)return r1(e,r.base_,!0),r.base_;if(!r.finalized_){r.finalized_=!0,r.scope_.unfinalizedDrafts_--;const i=r.copy_;let o=i,s=!1;r.type_===3&&(o=new Set(i),i.clear(),s=!0),of(o,(a,l)=>LP(e,r,i,a,l,n,s)),r1(e,i,!1),n&&e.patches_&&Xc("Patches").generatePatches_(r,n,e.patches_,e.inversePatches_)}return r.copy_}function LP(e,t,n,r,i,o,s){if(Ji(i)){const a=o&&t&&t.type_!==3&&!Xp(t.assigned_,r)?o.concat(r):void 0,l=n1(e,i,a);if(sN(n,r,l),Ji(l))e.canAutoFreeze_=!1;else return}else s&&n.add(i);if(No(i)&&!Gb(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;n1(e,i),(!t||!t.scope_.parent_)&&r1(e,i)}}function r1(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&p4(t,n)}function mQ(e,t){const n=Array.isArray(e),r={type_:n?1:0,scope_:t?t.scope_:aN(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=r,o=g4;n&&(i=[r],o=Yp);const{revoke:s,proxy:a}=Proxy.revocable(i,o);return r.draft_=a,r.revoke_=s,a}var g4={get(e,t){if(t===ei)return e;const n=oc(e);if(!Xp(n,t))return yQ(e,n,t);const r=n[t];return e.finalized_||!No(r)?r:r===Fx(e.base_,t)?(Dx(e),e.copy_[t]=p5(r,e)):r},has(e,t){return t in oc(e)},ownKeys(e){return Reflect.ownKeys(oc(e))},set(e,t,n){const r=lN(oc(e),t);if(r!=null&&r.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){const i=Fx(oc(e),t),o=i==null?void 0:i[ei];if(o&&o.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(dQ(n,i)&&(n!==void 0||Xp(e.base_,t)))return!0;Dx(e),h5(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_[t]=!0),!0},deleteProperty(e,t){return Fx(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,Dx(e),h5(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const n=oc(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:r.enumerable,value:n[t]}},defineProperty(){tr(11)},getPrototypeOf(e){return qc(e.base_)},setPrototypeOf(){tr(12)}},Yp={};of(g4,(e,t)=>{Yp[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});Yp.deleteProperty=function(e,t){return Yp.set.call(this,e,t,void 0)};Yp.set=function(e,t,n){return g4.set.call(this,e[0],t,n,e[0])};function Fx(e,t){const n=e[ei];return(n?oc(n):e)[t]}function yQ(e,t,n){var i;const r=lN(t,n);return r?"value"in r?r.value:(i=r.get)==null?void 0:i.call(e.draft_):void 0}function lN(e,t){if(!(t in e))return;let n=qc(e);for(;n;){const r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=qc(n)}}function h5(e){e.modified_||(e.modified_=!0,e.parent_&&h5(e.parent_))}function Dx(e){e.copy_||(e.copy_=c5(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var vQ=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,n,r)=>{if(typeof t=="function"&&typeof n!="function"){const o=n;n=t;const s=this;return function(l=o,...c){return s.produce(l,u=>n.call(this,u,...c))}}typeof n!="function"&&tr(6),r!==void 0&&typeof r!="function"&&tr(7);let i;if(No(t)){const o=FP(this),s=p5(t,void 0);let a=!0;try{i=n(s),a=!1}finally{a?d5(o):f5(o)}return NP(o,r),DP(i,o)}else if(!t||typeof t!="object"){if(i=n(t),i===void 0&&(i=t),i===h4&&(i=void 0),this.autoFreeze_&&p4(i,!0),r){const o=[],s=[];Xc("Patches").generateReplacementPatches_(t,i,o,s),r(o,s)}return i}else tr(1,t)},this.produceWithPatches=(t,n)=>{if(typeof t=="function")return(s,...a)=>this.produceWithPatches(s,l=>t(l,...a));let r,i;return[this.produce(t,n,(s,a)=>{r=s,i=a}),r,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){No(e)||tr(8),Ji(e)&&(e=cN(e));const t=FP(this),n=p5(e,void 0);return n[ei].isManual_=!0,f5(t),n}finishDraft(e,t){const n=e&&e[ei];(!n||!n.isManual_)&&tr(9);const{scope_:r}=n;return NP(r,t),DP(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){const i=t[n];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}n>-1&&(t=t.slice(n+1));const r=Xc("Patches").applyPatches_;return Ji(e)?r(e,t):this.produce(e,i=>r(i,t))}};function p5(e,t){const n=cm(e)?Xc("MapSet").proxyMap_(e,t):um(e)?Xc("MapSet").proxySet_(e,t):mQ(e,t);return(t?t.scope_:aN()).drafts_.push(n),n}function cN(e){return Ji(e)||tr(10,e),uN(e)}function uN(e){if(!No(e)||Gb(e))return e;const t=e[ei];let n;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=c5(e,t.scope_.immer_.useStrictShallowCopy_)}else n=c5(e,!0);return of(n,(r,i)=>{sN(n,r,uN(i))}),t&&(t.finalized_=!1),n}function bQ(){const t="replace",n="add",r="remove";function i(f,h,p,m){switch(f.type_){case 0:case 2:return s(f,h,p,m);case 1:return o(f,h,p,m);case 3:return a(f,h,p,m)}}function o(f,h,p,m){let{base_:_,assigned_:v}=f,y=f.copy_;y.length<_.length&&([_,y]=[y,_],[p,m]=[m,p]);for(let g=0;g<_.length;g++)if(v[g]&&y[g]!==_[g]){const b=h.concat([g]);p.push({op:t,path:b,value:d(y[g])}),m.push({op:t,path:b,value:d(_[g])})}for(let g=_.length;g{const b=Nx(_,y),S=Nx(v,y),w=g?Xp(_,y)?t:n:r;if(b===S&&w===t)return;const C=h.concat(y);p.push(w===r?{op:w,path:C}:{op:w,path:C,value:S}),m.push(w===n?{op:r,path:C}:w===r?{op:n,path:C,value:d(b)}:{op:t,path:C,value:d(b)})})}function a(f,h,p,m){let{base_:_,copy_:v}=f,y=0;_.forEach(g=>{if(!v.has(g)){const b=h.concat([y]);p.push({op:r,path:b,value:g}),m.unshift({op:n,path:b,value:g})}y++}),y=0,v.forEach(g=>{if(!_.has(g)){const b=h.concat([y]);p.push({op:n,path:b,value:g}),m.unshift({op:r,path:b,value:g})}y++})}function l(f,h,p,m){p.push({op:t,path:[],value:h===h4?void 0:h}),m.push({op:t,path:[],value:f})}function c(f,h){return h.forEach(p=>{const{path:m,op:_}=p;let v=f;for(let S=0;S[p,u(m)]));if(um(f))return new Set(Array.from(f).map(u));const h=Object.create(qc(f));for(const p in f)h[p]=u(f[p]);return Xp(f,dp)&&(h[dp]=f[dp]),h}function d(f){return Ji(f)?u(f):f}hQ("Patches",{applyPatches_:c,generatePatches_:i,generateReplacementPatches_:l})}var Ci=new vQ,Pf=Ci.produce,dN=Ci.produceWithPatches.bind(Ci);Ci.setAutoFreeze.bind(Ci);Ci.setUseStrictShallowCopy.bind(Ci);var BP=Ci.applyPatches.bind(Ci);Ci.createDraft.bind(Ci);Ci.finishDraft.bind(Ci);var i1="NOT_FOUND";function _Q(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function SQ(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(n=>typeof n=="function")){const n=e.map(r=>typeof r=="function"?`function ${r.name||"unnamed"}()`:typeof r).join(", ");throw new TypeError(`${t}[${n}]`)}}var zP=e=>Array.isArray(e)?e:[e];function xQ(e){const t=Array.isArray(e[0])?e[0]:e;return SQ(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function wQ(e,t){const n=[],{length:r}=e;for(let i=0;it(a,c.key));if(l>-1){const c=n[l];return l>0&&(n.splice(l,1),n.unshift(c)),c.value}return i1}function i(a,l){r(a)===i1&&(n.unshift({key:a,value:l}),n.length>e&&n.pop())}function o(){return n}function s(){n=[]}return{get:r,put:i,getEntries:o,clear:s}}var TQ=(e,t)=>e===t;function AQ(e){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;const{length:i}=n;for(let o=0;oo(h.value,u));f&&(u=f.value,a!==0&&a--)}l.put(arguments,u)}return u}return c.clearCache=()=>{l.clear(),c.resetResultsCount()},c.resultsCount=()=>a,c.resetResultsCount=()=>{a=0},c}var PQ=class{constructor(e){this.value=e}deref(){return this.value}},IQ=typeof WeakRef<"u"?WeakRef:PQ,MQ=0,jP=1;function M0(){return{s:MQ,v:void 0,o:null,p:null}}function Zp(e,t={}){let n=M0();const{resultEqualityCheck:r}=t;let i,o=0;function s(){let a=n;const{length:l}=arguments;for(let d=0,f=l;d{n=M0(),s.resetResultsCount()},s.resultsCount=()=>o,s.resetResultsCount=()=>{o=0},s}function m4(e,...t){const n=typeof e=="function"?{memoize:e,memoizeOptions:t}:e;return(...i)=>{let o=0,s=0,a,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),_Q(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const u={...n,...l},{memoize:d,memoizeOptions:f=[],argsMemoize:h=Zp,argsMemoizeOptions:p=[],devModeChecks:m={}}=u,_=zP(f),v=zP(p),y=xQ(i),g=d(function(){return o++,c.apply(null,arguments)},..._),b=h(function(){s++;const w=wQ(y,arguments);return a=g.apply(null,w),a},...v);return Object.assign(b,{resultFunc:c,memoizedResultFunc:g,dependencies:y,dependencyRecomputations:()=>s,resetDependencyRecomputations:()=>{s=0},lastResult:()=>a,recomputations:()=>o,resetRecomputations:()=>{o=0},memoize:d,argsMemoize:h})}}var fp=m4(Zp);function fN(e){return({dispatch:n,getState:r})=>i=>o=>typeof o=="function"?o(n,r,e):i(o)}var RQ=fN(),OQ=fN,$Q=(...e)=>{const t=m4(...e);return(...n)=>{const r=t(...n),i=(o,...s)=>r(Ji(o)?cN(o):o,...s);return Object.assign(i,r),i}},NQ=$Q(Zp),FQ=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?t1:t1.apply(null,arguments)},DQ=e=>e&&typeof e.match=="function";function he(e,t){function n(...r){if(t){let i=t(...r);if(!i)throw new Error(yr(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:r[0]}}return n.toString=()=>`${e}`,n.type=e,n.match=r=>Ub(r)&&r.type===e,n}function LQ(e){return Ub(e)&&Object.keys(e).every(BQ)}function BQ(e){return["type","payload","error","meta"].indexOf(e)>-1}function VP(e,t){for(const n of e)if(t(n))return n}var hN=class jh extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,jh.prototype)}static get[Symbol.species](){return jh}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new jh(...t[0].concat(this)):new jh(...t.concat(this))}};function UP(e){return No(e)?Pf(e,()=>{}):e}function GP(e,t,n){if(e.has(t)){let i=e.get(t);return n.update&&(i=n.update(i,t,e),e.set(t,i)),i}if(!n.insert)throw new Error(yr(10));const r=n.insert(t,e);return e.set(t,r),r}function zQ(e){return typeof e=="boolean"}var jQ=()=>function(t){const{thunk:n=!0,immutableCheck:r=!0,serializableCheck:i=!0,actionCreatorCheck:o=!0}=t??{};let s=new hN;return n&&(zQ(n)?s.push(RQ):s.push(OQ(n.extraArgument))),s},ad="RTK_autoBatch",uh=()=>e=>({payload:e,meta:{[ad]:!0}}),pN=e=>t=>{setTimeout(t,e)},VQ=typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:pN(10),gN=(e={type:"raf"})=>t=>(...n)=>{const r=t(...n);let i=!0,o=!1,s=!1;const a=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?VQ:e.type==="callback"?e.queueNotification:pN(e.timeout),c=()=>{s=!1,o&&(o=!1,a.forEach(u=>u()))};return Object.assign({},r,{subscribe(u){const d=()=>i&&u(),f=r.subscribe(d);return a.add(u),()=>{f(),a.delete(u)}},dispatch(u){var d;try{return i=!((d=u==null?void 0:u.meta)!=null&&d[ad]),o=!i,o&&(s||(s=!0,l(c))),r.dispatch(u)}finally{i=!0}}})},UQ=e=>function(n){const{autoBatch:r=!0}=n??{};let i=new hN(e);return r&&i.push(gN(typeof r=="object"?r:void 0)),i},GQ=!0;function HQ(e){const t=jQ(),{reducer:n=void 0,middleware:r,devTools:i=!0,preloadedState:o=void 0,enhancers:s=void 0}=e||{};let a;if(typeof n=="function")a=n;else if(_s(n))a=Vb(n);else throw new Error(yr(1));let l;typeof r=="function"?l=r(t):l=t();let c=t1;i&&(c=FQ({trace:!GQ,...typeof i=="object"&&i}));const u=lQ(...l),d=UQ(u);let f=typeof s=="function"?s(d):d();const h=c(...f);return iN(a,o,h)}function mN(e){const t={},n=[];let r;const i={addCase(o,s){const a=typeof o=="string"?o:o.type;if(!a)throw new Error(yr(28));if(a in t)throw new Error(yr(29));return t[a]=s,i},addMatcher(o,s){return n.push({matcher:o,reducer:s}),i},addDefaultCase(o){return r=o,i}};return e(i),[t,n,r]}function WQ(e){return typeof e=="function"}function qQ(e,t){let[n,r,i]=mN(t),o;if(WQ(e))o=()=>UP(e());else{const a=UP(e);o=()=>a}function s(a=o(),l){let c=[n[l.type],...r.filter(({matcher:u})=>u(l)).map(({reducer:u})=>u)];return c.filter(u=>!!u).length===0&&(c=[i]),c.reduce((u,d)=>{if(d)if(Ji(u)){const h=d(u,l);return h===void 0?u:h}else{if(No(u))return Pf(u,f=>d(f,l));{const f=d(u,l);if(f===void 0){if(u===null)return u;throw new Error(yr(9))}return f}}return u},a)}return s.getInitialState=o,s}var KQ="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",y4=(e=21)=>{let t="",n=e;for(;n--;)t+=KQ[Math.random()*64|0];return t},yN=(e,t)=>DQ(e)?e.match(t):e(t);function br(...e){return t=>e.some(n=>yN(n,t))}function hp(...e){return t=>e.every(n=>yN(n,t))}function Hb(e,t){if(!e||!e.meta)return!1;const n=typeof e.meta.requestId=="string",r=t.indexOf(e.meta.requestStatus)>-1;return n&&r}function dm(e){return typeof e[0]=="function"&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function v4(...e){return e.length===0?t=>Hb(t,["pending"]):dm(e)?t=>{const n=e.map(i=>i.pending);return br(...n)(t)}:v4()(e[0])}function sf(...e){return e.length===0?t=>Hb(t,["rejected"]):dm(e)?t=>{const n=e.map(i=>i.rejected);return br(...n)(t)}:sf()(e[0])}function fm(...e){const t=n=>n&&n.meta&&n.meta.rejectedWithValue;return e.length===0?n=>hp(sf(...e),t)(n):dm(e)?n=>hp(sf(...e),t)(n):fm()(e[0])}function bl(...e){return e.length===0?t=>Hb(t,["fulfilled"]):dm(e)?t=>{const n=e.map(i=>i.fulfilled);return br(...n)(t)}:bl()(e[0])}function g5(...e){return e.length===0?t=>Hb(t,["pending","fulfilled","rejected"]):dm(e)?t=>{const n=[];for(const i of e)n.push(i.pending,i.rejected,i.fulfilled);return br(...n)(t)}:g5()(e[0])}var XQ=["name","message","stack","code"],Lx=class{constructor(e,t){Kl(this,"_type");this.payload=e,this.meta=t}},HP=class{constructor(e,t){Kl(this,"_type");this.payload=e,this.meta=t}},QQ=e=>{if(typeof e=="object"&&e!==null){const t={};for(const n of XQ)typeof e[n]=="string"&&(t[n]=e[n]);return t}return{message:String(e)}},m5=(()=>{function e(t,n,r){const i=he(t+"/fulfilled",(l,c,u,d)=>({payload:l,meta:{...d||{},arg:u,requestId:c,requestStatus:"fulfilled"}})),o=he(t+"/pending",(l,c,u)=>({payload:void 0,meta:{...u||{},arg:c,requestId:l,requestStatus:"pending"}})),s=he(t+"/rejected",(l,c,u,d,f)=>({payload:d,error:(r&&r.serializeError||QQ)(l||"Rejected"),meta:{...f||{},arg:u,requestId:c,rejectedWithValue:!!d,requestStatus:"rejected",aborted:(l==null?void 0:l.name)==="AbortError",condition:(l==null?void 0:l.name)==="ConditionError"}}));function a(l){return(c,u,d)=>{const f=r!=null&&r.idGenerator?r.idGenerator(l):y4(),h=new AbortController;let p;function m(v){p=v,h.abort()}const _=async function(){var g,b;let v;try{let S=(g=r==null?void 0:r.condition)==null?void 0:g.call(r,l,{getState:u,extra:d});if(ZQ(S)&&(S=await S),S===!1||h.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};const w=new Promise((C,x)=>h.signal.addEventListener("abort",()=>x({name:"AbortError",message:p||"Aborted"})));c(o(f,l,(b=r==null?void 0:r.getPendingMeta)==null?void 0:b.call(r,{requestId:f,arg:l},{getState:u,extra:d}))),v=await Promise.race([w,Promise.resolve(n(l,{dispatch:c,getState:u,extra:d,requestId:f,signal:h.signal,abort:m,rejectWithValue:(C,x)=>new Lx(C,x),fulfillWithValue:(C,x)=>new HP(C,x)})).then(C=>{if(C instanceof Lx)throw C;return C instanceof HP?i(C.payload,f,l,C.meta):i(C,f,l)})])}catch(S){v=S instanceof Lx?s(null,f,l,S.payload,S.meta):s(S,f,l)}return r&&!r.dispatchConditionRejection&&s.match(v)&&v.meta.condition||c(v),v}();return Object.assign(_,{abort:m,requestId:f,arg:l,unwrap(){return _.then(YQ)}})}}return Object.assign(a,{pending:o,rejected:s,fulfilled:i,settled:br(s,i),typePrefix:t})}return e.withTypes=()=>e,e})();function YQ(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}function ZQ(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}var JQ=Symbol.for("rtk-slice-createasyncthunk");function eY(e,t){return`${e}/${t}`}function tY({creators:e}={}){var n;const t=(n=e==null?void 0:e.asyncThunk)==null?void 0:n[JQ];return function(i){const{name:o,reducerPath:s=o}=i;if(!o)throw new Error(yr(11));typeof process<"u";const a=(typeof i.reducers=="function"?i.reducers(rY()):i.reducers)||{},l=Object.keys(a),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},u={addCase(_,v){const y=typeof _=="string"?_:_.type;if(!y)throw new Error(yr(12));if(y in c.sliceCaseReducersByType)throw new Error(yr(13));return c.sliceCaseReducersByType[y]=v,u},addMatcher(_,v){return c.sliceMatchers.push({matcher:_,reducer:v}),u},exposeAction(_,v){return c.actionCreators[_]=v,u},exposeCaseReducer(_,v){return c.sliceCaseReducersByName[_]=v,u}};l.forEach(_=>{const v=a[_],y={reducerName:_,type:eY(o,_),createNotation:typeof i.reducers=="function"};oY(v)?aY(y,v,u,t):iY(y,v,u)});function d(){const[_={},v=[],y=void 0]=typeof i.extraReducers=="function"?mN(i.extraReducers):[i.extraReducers],g={..._,...c.sliceCaseReducersByType};return qQ(i.initialState,b=>{for(let S in g)b.addCase(S,g[S]);for(let S of c.sliceMatchers)b.addMatcher(S.matcher,S.reducer);for(let S of v)b.addMatcher(S.matcher,S.reducer);y&&b.addDefaultCase(y)})}const f=_=>_,h=new WeakMap;let p;const m={name:o,reducerPath:s,reducer(_,v){return p||(p=d()),p(_,v)},actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState(){return p||(p=d()),p.getInitialState()},getSelectors(_=f){const v=GP(h,this,{insert:()=>new WeakMap});return GP(v,_,{insert:()=>{const y={};for(const[g,b]of Object.entries(i.selectors??{}))y[g]=nY(this,b,_,this!==m);return y}})},selectSlice(_){let v=_[this.reducerPath];return typeof v>"u"&&this!==m&&(v=this.getInitialState()),v},get selectors(){return this.getSelectors(this.selectSlice)},injectInto(_,{reducerPath:v,...y}={}){const g=v??this.reducerPath;return _.inject({reducerPath:g,reducer:this.reducer},y),{...this,reducerPath:g}}};return m}}function nY(e,t,n,r){function i(o,...s){let a=n.call(e,o);return typeof a>"u"&&r&&(a=e.getInitialState()),t(a,...s)}return i.unwrapped=t,i}var jt=tY();function rY(){function e(t,n){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...n}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...n){return t(...n)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,n){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:n}},asyncThunk:e}}function iY({type:e,reducerName:t,createNotation:n},r,i){let o,s;if("reducer"in r){if(n&&!sY(r))throw new Error(yr(17));o=r.reducer,s=r.prepare}else o=r;i.addCase(e,o).exposeCaseReducer(t,o).exposeAction(t,s?he(e,s):he(e))}function oY(e){return e._reducerDefinitionType==="asyncThunk"}function sY(e){return e._reducerDefinitionType==="reducerWithPrepare"}function aY({type:e,reducerName:t},n,r,i){if(!i)throw new Error(yr(18));const{payloadCreator:o,fulfilled:s,pending:a,rejected:l,settled:c,options:u}=n,d=i(e,o,u);r.exposeAction(t,d),s&&r.addCase(d.fulfilled,s),a&&r.addCase(d.pending,a),l&&r.addCase(d.rejected,l),c&&r.addMatcher(d.settled,c),r.exposeCaseReducer(t,{fulfilled:s||R0,pending:a||R0,rejected:l||R0,settled:c||R0})}function R0(){}function lY(){return{ids:[],entities:{}}}function cY(){function e(t={}){return Object.assign(lY(),t)}return{getInitialState:e}}function uY(){function e(t,n={}){const{createSelector:r=NQ}=n,i=d=>d.ids,o=d=>d.entities,s=r(i,o,(d,f)=>d.map(h=>f[h])),a=(d,f)=>f,l=(d,f)=>d[f],c=r(i,d=>d.length);if(!t)return{selectIds:i,selectEntities:o,selectAll:s,selectTotal:c,selectById:r(o,a,l)};const u=r(t,o);return{selectIds:r(t,i),selectEntities:u,selectAll:r(t,s),selectTotal:r(t,c),selectById:r(u,a,l)}}return{getSelectors:e}}var dY=Ji;function fY(e){const t=ln((n,r)=>e(r));return function(r){return t(r,void 0)}}function ln(e){return function(n,r){function i(s){return LQ(s)}const o=s=>{i(r)?e(r.payload,s):e(r,s)};return dY(n)?(o(n),n):Pf(n,o)}}function ld(e,t){return t(e)}function Ic(e){return Array.isArray(e)||(e=Object.values(e)),e}function vN(e,t,n){e=Ic(e);const r=[],i=[];for(const o of e){const s=ld(o,t);s in n.entities?i.push({id:s,changes:o}):r.push(o)}return[r,i]}function bN(e){function t(p,m){const _=ld(p,e);_ in m.entities||(m.ids.push(_),m.entities[_]=p)}function n(p,m){p=Ic(p);for(const _ of p)t(_,m)}function r(p,m){const _=ld(p,e);_ in m.entities||m.ids.push(_),m.entities[_]=p}function i(p,m){p=Ic(p);for(const _ of p)r(_,m)}function o(p,m){p=Ic(p),m.ids=[],m.entities={},n(p,m)}function s(p,m){return a([p],m)}function a(p,m){let _=!1;p.forEach(v=>{v in m.entities&&(delete m.entities[v],_=!0)}),_&&(m.ids=m.ids.filter(v=>v in m.entities))}function l(p){Object.assign(p,{ids:[],entities:{}})}function c(p,m,_){const v=_.entities[m.id];if(v===void 0)return!1;const y=Object.assign({},v,m.changes),g=ld(y,e),b=g!==m.id;return b&&(p[m.id]=g,delete _.entities[m.id]),_.entities[g]=y,b}function u(p,m){return d([p],m)}function d(p,m){const _={},v={};p.forEach(g=>{g.id in m.entities&&(v[g.id]={id:g.id,changes:{...v[g.id]?v[g.id].changes:null,...g.changes}})}),p=Object.values(v),p.length>0&&p.filter(b=>c(_,b,m)).length>0&&(m.ids=Object.values(m.entities).map(b=>ld(b,e)))}function f(p,m){return h([p],m)}function h(p,m){const[_,v]=vN(p,e,m);d(v,m),n(_,m)}return{removeAll:fY(l),addOne:ln(t),addMany:ln(n),setOne:ln(r),setMany:ln(i),setAll:ln(o),updateOne:ln(u),updateMany:ln(d),upsertOne:ln(f),upsertMany:ln(h),removeOne:ln(s),removeMany:ln(a)}}function hY(e,t){const{removeOne:n,removeMany:r,removeAll:i}=bN(e);function o(v,y){return s([v],y)}function s(v,y){v=Ic(v);const g=v.filter(b=>!(ld(b,e)in y.entities));g.length!==0&&m(g,y)}function a(v,y){return l([v],y)}function l(v,y){v=Ic(v),v.length!==0&&m(v,y)}function c(v,y){v=Ic(v),y.entities={},y.ids=[],s(v,y)}function u(v,y){return d([v],y)}function d(v,y){let g=!1;for(let b of v){const S=y.entities[b.id];if(!S)continue;g=!0,Object.assign(S,b.changes);const w=e(S);b.id!==w&&(delete y.entities[b.id],y.entities[w]=S)}g&&_(y)}function f(v,y){return h([v],y)}function h(v,y){const[g,b]=vN(v,e,y);d(b,y),s(g,y)}function p(v,y){if(v.length!==y.length)return!1;for(let g=0;g{y.entities[e(g)]=g}),_(y)}function _(v){const y=Object.values(v.entities);y.sort(t);const g=y.map(e),{ids:b}=v;p(b,g)||(v.ids=g)}return{removeOne:n,removeMany:r,removeAll:i,addOne:ln(o),updateOne:ln(u),upsertOne:ln(f),setOne:ln(a),setMany:ln(l),setAll:ln(c),addMany:ln(s),updateMany:ln(d),upsertMany:ln(h)}}function jo(e={}){const{selectId:t,sortComparer:n}={sortComparer:!1,selectId:s=>s.id,...e},r=cY(),i=uY(),o=n?hY(t,n):bN(t);return{selectId:t,sortComparer:n,...r,...i,...o}}var b4=(e,t)=>{if(typeof e!="function")throw new Error(yr(32))},y5=()=>{},_N=(e,t=y5)=>(e.catch(t),e),SN=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),Mc=(e,t)=>{const n=e.signal;n.aborted||("reason"in n||Object.defineProperty(n,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},pY="task",xN="listener",wN="completed",_4="cancelled",gY=`task-${_4}`,mY=`task-${wN}`,v5=`${xN}-${_4}`,yY=`${xN}-${wN}`,Wb=class{constructor(e){Kl(this,"name","TaskAbortError");Kl(this,"message");this.code=e,this.message=`${pY} ${_4} (reason: ${e})`}},Rc=e=>{if(e.aborted){const{reason:t}=e;throw new Wb(t)}};function CN(e,t){let n=y5;return new Promise((r,i)=>{const o=()=>i(new Wb(e.reason));if(e.aborted){o();return}n=SN(e,o),t.finally(()=>n()).then(r,i)}).finally(()=>{n=y5})}var vY=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(n){return{status:n instanceof Wb?"cancelled":"rejected",error:n}}finally{t==null||t()}},o1=e=>t=>_N(CN(e,t).then(n=>(Rc(e),n))),EN=e=>{const t=o1(e);return n=>t(new Promise(r=>setTimeout(r,n)))},{assign:bY}=Object,WP={},qb="listenerMiddleware",_Y=(e,t)=>{const n=r=>SN(e,()=>Mc(r,e.reason));return(r,i)=>{b4(r);const o=new AbortController;n(o);const s=vY(async()=>{Rc(e),Rc(o.signal);const a=await r({pause:o1(o.signal),delay:EN(o.signal),signal:o.signal});return Rc(o.signal),a},()=>Mc(o,mY));return i!=null&&i.autoJoin&&t.push(s),{result:o1(e)(s),cancel(){Mc(o,gY)}}}},SY=(e,t)=>{const n=async(r,i)=>{Rc(t);let o=()=>{};const a=[new Promise((l,c)=>{let u=e({predicate:r,effect:(d,f)=>{f.unsubscribe(),l([d,f.getState(),f.getOriginalState()])}});o=()=>{u(),c()}})];i!=null&&a.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await CN(t,Promise.race(a));return Rc(t),l}finally{o()}};return(r,i)=>_N(n(r,i))},TN=e=>{let{type:t,actionCreator:n,matcher:r,predicate:i,effect:o}=e;if(t)i=he(t).match;else if(n)t=n.type,i=n.match;else if(r)i=r;else if(!i)throw new Error(yr(21));return b4(o),{predicate:i,type:t,effect:o}},xY=e=>{const{type:t,predicate:n,effect:r}=TN(e);return{id:y4(),effect:r,type:t,predicate:n,pending:new Set,unsubscribe:()=>{throw new Error(yr(22))}}},b5=e=>{e.pending.forEach(t=>{Mc(t,v5)})},wY=e=>()=>{e.forEach(b5),e.clear()},qP=(e,t,n)=>{try{e(t,n)}catch(r){setTimeout(()=>{throw r},0)}},CY=he(`${qb}/add`),EY=he(`${qb}/removeAll`),TY=he(`${qb}/remove`),AY=(...e)=>{console.error(`${qb}/error`,...e)};function kY(e={}){const t=new Map,{extra:n,onError:r=AY}=e;b4(r);const i=u=>(u.unsubscribe=()=>t.delete(u.id),t.set(u.id,u),d=>{u.unsubscribe(),d!=null&&d.cancelActive&&b5(u)}),o=u=>{let d=VP(Array.from(t.values()),f=>f.effect===u.effect);return d||(d=xY(u)),i(d)},s=u=>{const{type:d,effect:f,predicate:h}=TN(u),p=VP(Array.from(t.values()),m=>(typeof d=="string"?m.type===d:m.predicate===h)&&m.effect===f);return p&&(p.unsubscribe(),u.cancelActive&&b5(p)),!!p},a=async(u,d,f,h)=>{const p=new AbortController,m=SY(o,p.signal),_=[];try{u.pending.add(p),await Promise.resolve(u.effect(d,bY({},f,{getOriginalState:h,condition:(v,y)=>m(v,y).then(Boolean),take:m,delay:EN(p.signal),pause:o1(p.signal),extra:n,signal:p.signal,fork:_Y(p.signal,_),unsubscribe:u.unsubscribe,subscribe:()=>{t.set(u.id,u)},cancelActiveListeners:()=>{u.pending.forEach((v,y,g)=>{v!==p&&(Mc(v,v5),g.delete(v))})},cancel:()=>{Mc(p,v5),u.pending.delete(p)},throwIfCancelled:()=>{Rc(p.signal)}})))}catch(v){v instanceof Wb||qP(r,v,{raisedBy:"effect"})}finally{await Promise.allSettled(_),Mc(p,yY),u.pending.delete(p)}},l=wY(t);return{middleware:u=>d=>f=>{if(!Ub(f))return d(f);if(CY.match(f))return o(f.payload);if(EY.match(f)){l();return}if(TY.match(f))return s(f.payload);let h=u.getState();const p=()=>{if(h===WP)throw new Error(yr(23));return h};let m;try{if(m=d(f),t.size>0){let _=u.getState();const v=Array.from(t.values());for(let y of v){let g=!1;try{g=y.predicate(f,_,h)}catch(b){g=!1,qP(r,b,{raisedBy:"predicate"})}g&&a(y,f,u,p)}}}finally{h=WP}return m},startListening:o,stopListening:s,clearListeners:l}}function yr(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}const PY={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){console&&console[e]&&console[e].apply(console,t)}};class s1{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(t,n)}init(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=n.prefix||"i18next:",this.logger=t||PY,this.options=n,this.debug=n.debug}log(){for(var t=arguments.length,n=new Array(t),r=0;r{this.observers[r]=this.observers[r]||[],this.observers[r].push(n)}),this}off(t,n){if(this.observers[t]){if(!n){delete this.observers[t];return}this.observers[t]=this.observers[t].filter(r=>r!==n)}}emit(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{s(...r)}),this.observers["*"]&&[].concat(this.observers["*"]).forEach(s=>{s.apply(s,[t,...r])})}}function dh(){let e,t;const n=new Promise((r,i)=>{e=r,t=i});return n.resolve=e,n.reject=t,n}function KP(e){return e==null?"":""+e}function IY(e,t,n){e.forEach(r=>{t[r]&&(n[r]=t[r])})}function S4(e,t,n){function r(s){return s&&s.indexOf("###")>-1?s.replace(/###/g,"."):s}function i(){return!e||typeof e=="string"}const o=typeof t!="string"?[].concat(t):t.split(".");for(;o.length>1;){if(i())return{};const s=r(o.shift());!e[s]&&n&&(e[s]=new n),Object.prototype.hasOwnProperty.call(e,s)?e=e[s]:e={}}return i()?{}:{obj:e,k:r(o.shift())}}function XP(e,t,n){const{obj:r,k:i}=S4(e,t,Object);r[i]=n}function MY(e,t,n,r){const{obj:i,k:o}=S4(e,t,Object);i[o]=i[o]||[],r&&(i[o]=i[o].concat(n)),r||i[o].push(n)}function a1(e,t){const{obj:n,k:r}=S4(e,t);if(n)return n[r]}function RY(e,t,n){const r=a1(e,n);return r!==void 0?r:a1(t,n)}function AN(e,t,n){for(const r in t)r!=="__proto__"&&r!=="constructor"&&(r in e?typeof e[r]=="string"||e[r]instanceof String||typeof t[r]=="string"||t[r]instanceof String?n&&(e[r]=t[r]):AN(e[r],t[r],n):e[r]=t[r]);return e}function ku(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var OY={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function $Y(e){return typeof e=="string"?e.replace(/[&<>"'\/]/g,t=>OY[t]):e}const NY=[" ",",","?","!",";"];function FY(e,t,n){t=t||"",n=n||"";const r=NY.filter(s=>t.indexOf(s)<0&&n.indexOf(s)<0);if(r.length===0)return!0;const i=new RegExp(`(${r.map(s=>s==="?"?"\\?":s).join("|")})`);let o=!i.test(e);if(!o){const s=e.indexOf(n);s>0&&!i.test(e.substring(0,s))&&(o=!0)}return o}function l1(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!e)return;if(e[t])return e[t];const r=t.split(n);let i=e;for(let o=0;oo+s;)s++,a=r.slice(o,o+s).join(n),l=i[a];if(l===void 0)return;if(l===null)return null;if(t.endsWith(a)){if(typeof l=="string")return l;if(a&&typeof l[a]=="string")return l[a]}const c=r.slice(o+s).join(n);return c?l1(l,c,n):void 0}i=i[r[o]]}return i}function c1(e){return e&&e.indexOf("_")>0?e.replace("_","-"):e}class QP extends Kb{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=t||{},this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const n=this.options.ns.indexOf(t);n>-1&&this.options.ns.splice(n,1)}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const o=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,s=i.ignoreJSONStructure!==void 0?i.ignoreJSONStructure:this.options.ignoreJSONStructure;let a=[t,n];r&&typeof r!="string"&&(a=a.concat(r)),r&&typeof r=="string"&&(a=a.concat(o?r.split(o):r)),t.indexOf(".")>-1&&(a=t.split("."));const l=a1(this.data,a);return l||!s||typeof r!="string"?l:l1(this.data&&this.data[t]&&this.data[t][n],r,o)}addResource(t,n,r,i){let o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const s=o.keySeparator!==void 0?o.keySeparator:this.options.keySeparator;let a=[t,n];r&&(a=a.concat(s?r.split(s):r)),t.indexOf(".")>-1&&(a=t.split("."),i=n,n=a[1]),this.addNamespaces(n),XP(this.data,a,i),o.silent||this.emit("added",t,n,r,i)}addResources(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const o in r)(typeof r[o]=="string"||Object.prototype.toString.apply(r[o])==="[object Array]")&&this.addResource(t,n,o,r[o],{silent:!0});i.silent||this.emit("added",t,n,r)}addResourceBundle(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1},a=[t,n];t.indexOf(".")>-1&&(a=t.split("."),i=r,r=n,n=a[1]),this.addNamespaces(n);let l=a1(this.data,a)||{};i?AN(l,r,o):l={...l,...r},XP(this.data,a,l),s.silent||this.emit("added",t,n,r)}removeResourceBundle(t,n){this.hasResourceBundle(t,n)&&delete this.data[t][n],this.removeNamespaces(n),this.emit("removed",t,n)}hasResourceBundle(t,n){return this.getResource(t,n)!==void 0}getResourceBundle(t,n){return n||(n=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(t,n)}:this.getResource(t,n)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const n=this.getDataByLanguage(t);return!!(n&&Object.keys(n)||[]).find(i=>n[i]&&Object.keys(n[i]).length>0)}toJSON(){return this.data}}var kN={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(o=>{this.processors[o]&&(t=this.processors[o].process(t,n,r,i))}),t}};const YP={};class u1 extends Kb{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),IY(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],t,this),this.options=n,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=cs.create("translator")}changeLanguage(t){t&&(this.language=t)}exists(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(t==null)return!1;const r=this.resolve(t,n);return r&&r.res!==void 0}extractFromKey(t,n){let r=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator;let o=n.ns||this.options.defaultNS||[];const s=r&&t.indexOf(r)>-1,a=!this.options.userDefinedKeySeparator&&!n.keySeparator&&!this.options.userDefinedNsSeparator&&!n.nsSeparator&&!FY(t,r,i);if(s&&!a){const l=t.match(this.interpolator.nestingRegexp);if(l&&l.length>0)return{key:t,namespaces:o};const c=t.split(r);(r!==i||r===i&&this.options.ns.indexOf(c[0])>-1)&&(o=c.shift()),t=c.join(i)}return typeof o=="string"&&(o=[o]),{key:t,namespaces:o}}translate(t,n,r){if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";Array.isArray(t)||(t=[String(t)]);const i=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,o=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:s,namespaces:a}=this.extractFromKey(t[t.length-1],n),l=a[a.length-1],c=n.lng||this.language,u=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(c&&c.toLowerCase()==="cimode"){if(u){const b=n.nsSeparator||this.options.nsSeparator;return i?{res:`${l}${b}${s}`,usedKey:s,exactUsedKey:s,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:`${l}${b}${s}`}return i?{res:s,usedKey:s,exactUsedKey:s,usedLng:c,usedNS:l,usedParams:this.getUsedParamsDetails(n)}:s}const d=this.resolve(t,n);let f=d&&d.res;const h=d&&d.usedKey||s,p=d&&d.exactUsedKey||s,m=Object.prototype.toString.apply(f),_=["[object Number]","[object Function]","[object RegExp]"],v=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,y=!this.i18nFormat||this.i18nFormat.handleAsObject;if(y&&f&&(typeof f!="string"&&typeof f!="boolean"&&typeof f!="number")&&_.indexOf(m)<0&&!(typeof v=="string"&&m==="[object Array]")){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const b=this.options.returnedObjectHandler?this.options.returnedObjectHandler(h,f,{...n,ns:a}):`key '${s} (${this.language})' returned an object instead of string.`;return i?(d.res=b,d.usedParams=this.getUsedParamsDetails(n),d):b}if(o){const b=m==="[object Array]",S=b?[]:{},w=b?p:h;for(const C in f)if(Object.prototype.hasOwnProperty.call(f,C)){const x=`${w}${o}${C}`;S[C]=this.translate(x,{...n,joinArrays:!1,ns:a}),S[C]===x&&(S[C]=f[C])}f=S}}else if(y&&typeof v=="string"&&m==="[object Array]")f=f.join(v),f&&(f=this.extendTranslation(f,t,n,r));else{let b=!1,S=!1;const w=n.count!==void 0&&typeof n.count!="string",C=u1.hasDefaultValue(n),x=w?this.pluralResolver.getSuffix(c,n.count,n):"",k=n.ordinal&&w?this.pluralResolver.getSuffix(c,n.count,{ordinal:!1}):"",A=n[`defaultValue${x}`]||n[`defaultValue${k}`]||n.defaultValue;!this.isValidLookup(f)&&C&&(b=!0,f=A),this.isValidLookup(f)||(S=!0,f=s);const L=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&S?void 0:f,M=C&&A!==f&&this.options.updateMissing;if(S||b||M){if(this.logger.log(M?"updateKey":"missingKey",c,l,s,M?A:f),o){const F=this.resolve(s,{...n,keySeparator:!1});F&&F.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let E=[];const P=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&P&&P[0])for(let F=0;F{const N=C&&D!==f?D:L;this.options.missingKeyHandler?this.options.missingKeyHandler(F,l,$,N,M,n):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(F,l,$,N,M,n),this.emit("missingKey",F,l,$,f)};this.options.saveMissing&&(this.options.saveMissingPlurals&&w?E.forEach(F=>{this.pluralResolver.getSuffixes(F,n).forEach($=>{O([F],s+$,n[`defaultValue${$}`]||A)})}):O(E,s,A))}f=this.extendTranslation(f,t,n,d,r),S&&f===s&&this.options.appendNamespaceToMissingKey&&(f=`${l}:${s}`),(S||b)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?f=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${s}`:s,b?f:void 0):f=this.options.parseMissingKeyHandler(f))}return i?(d.res=f,d.usedParams=this.getUsedParamsDetails(n),d):f}extendTranslation(t,n,r,i,o){var s=this;if(this.i18nFormat&&this.i18nFormat.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const c=typeof t=="string"&&(r&&r.interpolation&&r.interpolation.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let u;if(c){const f=t.match(this.interpolator.nestingRegexp);u=f&&f.length}let d=r.replace&&typeof r.replace!="string"?r.replace:r;if(this.options.interpolation.defaultVariables&&(d={...this.options.interpolation.defaultVariables,...d}),t=this.interpolator.interpolate(t,d,r.lng||this.language,r),c){const f=t.match(this.interpolator.nestingRegexp),h=f&&f.length;u1&&arguments[1]!==void 0?arguments[1]:{},r,i,o,s,a;return typeof t=="string"&&(t=[t]),t.forEach(l=>{if(this.isValidLookup(r))return;const c=this.extractFromKey(l,n),u=c.key;i=u;let d=c.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));const f=n.count!==void 0&&typeof n.count!="string",h=f&&!n.ordinal&&n.count===0&&this.pluralResolver.shouldUseIntlApi(),p=n.context!==void 0&&(typeof n.context=="string"||typeof n.context=="number")&&n.context!=="",m=n.lngs?n.lngs:this.languageUtils.toResolveHierarchy(n.lng||this.language,n.fallbackLng);d.forEach(_=>{this.isValidLookup(r)||(a=_,!YP[`${m[0]}-${_}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(a)&&(YP[`${m[0]}-${_}`]=!0,this.logger.warn(`key "${i}" for languages "${m.join(", ")}" won't get resolved as namespace "${a}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),m.forEach(v=>{if(this.isValidLookup(r))return;s=v;const y=[u];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(y,u,v,_,n);else{let b;f&&(b=this.pluralResolver.getSuffix(v,n.count,n));const S=`${this.options.pluralSeparator}zero`,w=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(f&&(y.push(u+b),n.ordinal&&b.indexOf(w)===0&&y.push(u+b.replace(w,this.options.pluralSeparator)),h&&y.push(u+S)),p){const C=`${u}${this.options.contextSeparator}${n.context}`;y.push(C),f&&(y.push(C+b),n.ordinal&&b.indexOf(w)===0&&y.push(C+b.replace(w,this.options.pluralSeparator)),h&&y.push(C+S))}}let g;for(;g=y.pop();)this.isValidLookup(r)||(o=g,r=this.getResource(v,_,g,n))}))})}),{res:r,usedKey:i,exactUsedKey:o,usedLng:s,usedNS:a}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(t,n,r,i):this.resourceStore.getResource(t,n,r,i)}getUsedParamsDetails(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const n=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=t.replace&&typeof t.replace!="string";let i=r?t.replace:t;if(r&&typeof t.count<"u"&&(i.count=t.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(const o of n)delete i[o]}return i}static hasDefaultValue(t){const n="defaultValue";for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&n===r.substring(0,n.length)&&t[r]!==void 0)return!0;return!1}}function Bx(e){return e.charAt(0).toUpperCase()+e.slice(1)}class ZP{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=cs.create("languageUtils")}getScriptPartFromCode(t){if(t=c1(t),!t||t.indexOf("-")<0)return null;const n=t.split("-");return n.length===2||(n.pop(),n[n.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(n.join("-"))}getLanguagePartFromCode(t){if(t=c1(t),!t||t.indexOf("-")<0)return t;const n=t.split("-");return this.formatLanguageCode(n[0])}formatLanguageCode(t){if(typeof t=="string"&&t.indexOf("-")>-1){const n=["hans","hant","latn","cyrl","cans","mong","arab"];let r=t.split("-");return this.options.lowerCaseLng?r=r.map(i=>i.toLowerCase()):r.length===2?(r[0]=r[0].toLowerCase(),r[1]=r[1].toUpperCase(),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bx(r[1].toLowerCase()))):r.length===3&&(r[0]=r[0].toLowerCase(),r[1].length===2&&(r[1]=r[1].toUpperCase()),r[0]!=="sgn"&&r[2].length===2&&(r[2]=r[2].toUpperCase()),n.indexOf(r[1].toLowerCase())>-1&&(r[1]=Bx(r[1].toLowerCase())),n.indexOf(r[2].toLowerCase())>-1&&(r[2]=Bx(r[2].toLowerCase()))),r.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let n;return t.forEach(r=>{if(n)return;const i=this.formatLanguageCode(r);(!this.options.supportedLngs||this.isSupportedCode(i))&&(n=i)}),!n&&this.options.supportedLngs&&t.forEach(r=>{if(n)return;const i=this.getLanguagePartFromCode(r);if(this.isSupportedCode(i))return n=i;n=this.options.supportedLngs.find(o=>{if(o===i)return o;if(!(o.indexOf("-")<0&&i.indexOf("-")<0)&&o.indexOf(i)===0)return o})}),n||(n=this.getFallbackCodes(this.options.fallbackLng)[0]),n}getFallbackCodes(t,n){if(!t)return[];if(typeof t=="function"&&(t=t(n)),typeof t=="string"&&(t=[t]),Object.prototype.toString.apply(t)==="[object Array]")return t;if(!n)return t.default||[];let r=t[n];return r||(r=t[this.getScriptPartFromCode(n)]),r||(r=t[this.formatLanguageCode(n)]),r||(r=t[this.getLanguagePartFromCode(n)]),r||(r=t.default),r||[]}toResolveHierarchy(t,n){const r=this.getFallbackCodes(n||this.options.fallbackLng||[],t),i=[],o=s=>{s&&(this.isSupportedCode(s)?i.push(s):this.logger.warn(`rejecting language code not found in supportedLngs: ${s}`))};return typeof t=="string"&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&o(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&o(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&o(this.getLanguagePartFromCode(t))):typeof t=="string"&&o(this.formatLanguageCode(t)),r.forEach(s=>{i.indexOf(s)<0&&o(this.formatLanguageCode(s))}),i}}let DY=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],LY={1:function(e){return+(e>1)},2:function(e){return+(e!=1)},3:function(e){return 0},4:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},5:function(e){return e==0?0:e==1?1:e==2?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},6:function(e){return e==1?0:e>=2&&e<=4?1:2},7:function(e){return e==1?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2},8:function(e){return e==1?0:e==2?1:e!=8&&e!=11?2:3},9:function(e){return+(e>=2)},10:function(e){return e==1?0:e==2?1:e<7?2:e<11?3:4},11:function(e){return e==1||e==11?0:e==2||e==12?1:e>2&&e<20?2:3},12:function(e){return+(e%10!=1||e%100==11)},13:function(e){return+(e!==0)},14:function(e){return e==1?0:e==2?1:e==3?2:3},15:function(e){return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2},16:function(e){return e%10==1&&e%100!=11?0:e!==0?1:2},17:function(e){return e==1||e%10==1&&e%100!=11?0:1},18:function(e){return e==0?0:e==1?1:2},19:function(e){return e==1?0:e==0||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3},20:function(e){return e==1?0:e==0||e%100>0&&e%100<20?1:2},21:function(e){return e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0},22:function(e){return e==1?0:e==2?1:(e<0||e>10)&&e%10==0?2:3}};const BY=["v1","v2","v3"],zY=["v4"],JP={zero:0,one:1,two:2,few:3,many:4,other:5};function jY(){const e={};return DY.forEach(t=>{t.lngs.forEach(n=>{e[n]={numbers:t.nr,plurals:LY[t.fc]}})}),e}class VY{constructor(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=t,this.options=n,this.logger=cs.create("pluralResolver"),(!this.options.compatibilityJSON||zY.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=jY()}addRule(t,n){this.rules[t]=n}getRule(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(c1(t),{type:n.ordinal?"ordinal":"cardinal"})}catch{return}return this.rules[t]||this.rules[this.languageUtils.getLanguagePartFromCode(t)]}needsPlural(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return this.shouldUseIntlApi()?r&&r.resolvedOptions().pluralCategories.length>1:r&&r.numbers.length>1}getPluralFormsOfKey(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(t,r).map(i=>`${n}${i}`)}getSuffixes(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const r=this.getRule(t,n);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((i,o)=>JP[i]-JP[o]).map(i=>`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:""}${i}`):r.numbers.map(i=>this.getSuffix(t,i,n)):[]}getSuffix(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const i=this.getRule(t,r);return i?this.shouldUseIntlApi()?`${this.options.prepend}${r.ordinal?`ordinal${this.options.prepend}`:""}${i.select(n)}`:this.getSuffixRetroCompatible(i,n):(this.logger.warn(`no plural rule found for: ${t}`),"")}getSuffixRetroCompatible(t,n){const r=t.noAbs?t.plurals(n):t.plurals(Math.abs(n));let i=t.numbers[r];this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1&&(i===2?i="plural":i===1&&(i=""));const o=()=>this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString();return this.options.compatibilityJSON==="v1"?i===1?"":typeof i=="number"?`_plural_${i.toString()}`:o():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&t.numbers.length===2&&t.numbers[0]===1?o():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}shouldUseIntlApi(){return!BY.includes(this.options.compatibilityJSON)}}function e6(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,o=RY(e,t,n);return!o&&i&&typeof n=="string"&&(o=l1(e,n,r),o===void 0&&(o=l1(t,n,r))),o}class UY{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=cs.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||(n=>n),this.init(t)}init(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t.interpolation||(t.interpolation={escapeValue:!0});const n=t.interpolation;this.escape=n.escape!==void 0?n.escape:$Y,this.escapeValue=n.escapeValue!==void 0?n.escapeValue:!0,this.useRawValueToEscape=n.useRawValueToEscape!==void 0?n.useRawValueToEscape:!1,this.prefix=n.prefix?ku(n.prefix):n.prefixEscaped||"{{",this.suffix=n.suffix?ku(n.suffix):n.suffixEscaped||"}}",this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||",",this.unescapePrefix=n.unescapeSuffix?"":n.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":n.unescapeSuffix||"",this.nestingPrefix=n.nestingPrefix?ku(n.nestingPrefix):n.nestingPrefixEscaped||ku("$t("),this.nestingSuffix=n.nestingSuffix?ku(n.nestingSuffix):n.nestingSuffixEscaped||ku(")"),this.nestingOptionsSeparator=n.nestingOptionsSeparator?n.nestingOptionsSeparator:n.nestingOptionsSeparator||",",this.maxReplaces=n.maxReplaces?n.maxReplaces:1e3,this.alwaysFormat=n.alwaysFormat!==void 0?n.alwaysFormat:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=`${this.prefix}(.+?)${this.suffix}`;this.regexp=new RegExp(t,"g");const n=`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;this.regexpUnescape=new RegExp(n,"g");const r=`${this.nestingPrefix}(.+?)${this.nestingSuffix}`;this.nestingRegexp=new RegExp(r,"g")}interpolate(t,n,r,i){let o,s,a;const l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function c(p){return p.replace(/\$/g,"$$$$")}const u=p=>{if(p.indexOf(this.formatSeparator)<0){const y=e6(n,l,p,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(y,void 0,r,{...i,...n,interpolationkey:p}):y}const m=p.split(this.formatSeparator),_=m.shift().trim(),v=m.join(this.formatSeparator).trim();return this.format(e6(n,l,_,this.options.keySeparator,this.options.ignoreJSONStructure),v,r,{...i,...n,interpolationkey:_})};this.resetRegExp();const d=i&&i.missingInterpolationHandler||this.options.missingInterpolationHandler,f=i&&i.interpolation&&i.interpolation.skipOnVariables!==void 0?i.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:p=>c(p)},{regex:this.regexp,safeValue:p=>this.escapeValue?c(this.escape(p)):c(p)}].forEach(p=>{for(a=0;o=p.regex.exec(t);){const m=o[1].trim();if(s=u(m),s===void 0)if(typeof d=="function"){const v=d(t,o,i);s=typeof v=="string"?v:""}else if(i&&Object.prototype.hasOwnProperty.call(i,m))s="";else if(f){s=o[0];continue}else this.logger.warn(`missed to pass in variable ${m} for interpolating ${t}`),s="";else typeof s!="string"&&!this.useRawValueToEscape&&(s=KP(s));const _=p.safeValue(s);if(t=t.replace(o[0],_),f?(p.regex.lastIndex+=s.length,p.regex.lastIndex-=o[0].length):p.regex.lastIndex=0,a++,a>=this.maxReplaces)break}}),t}nest(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i,o,s;function a(l,c){const u=this.nestingOptionsSeparator;if(l.indexOf(u)<0)return l;const d=l.split(new RegExp(`${u}[ ]*{`));let f=`{${d[1]}`;l=d[0],f=this.interpolate(f,s);const h=f.match(/'/g),p=f.match(/"/g);(h&&h.length%2===0&&!p||p.length%2!==0)&&(f=f.replace(/'/g,'"'));try{s=JSON.parse(f),c&&(s={...c,...s})}catch(m){return this.logger.warn(`failed parsing options string in nesting for key ${l}`,m),`${l}${u}${f}`}return delete s.defaultValue,l}for(;i=this.nestingRegexp.exec(t);){let l=[];s={...r},s=s.replace&&typeof s.replace!="string"?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let c=!1;if(i[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(i[1])){const u=i[1].split(this.formatSeparator).map(d=>d.trim());i[1]=u.shift(),l=u,c=!0}if(o=n(a.call(this,i[1].trim(),s),s),o&&i[0]===t&&typeof o!="string")return o;typeof o!="string"&&(o=KP(o)),o||(this.logger.warn(`missed to resolve ${i[1]} for nesting ${t}`),o=""),c&&(o=l.reduce((u,d)=>this.format(u,d,r.lng,{...r,interpolationkey:i[1].trim()}),o.trim())),t=t.replace(i[0],o),this.regexp.lastIndex=0}return t}}function GY(e){let t=e.toLowerCase().trim();const n={};if(e.indexOf("(")>-1){const r=e.split("(");t=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);t==="currency"&&i.indexOf(":")<0?n.currency||(n.currency=i.trim()):t==="relativetime"&&i.indexOf(":")<0?n.range||(n.range=i.trim()):i.split(";").forEach(s=>{if(!s)return;const[a,...l]=s.split(":"),c=l.join(":").trim().replace(/^'+|'+$/g,"");n[a.trim()]||(n[a.trim()]=c),c==="false"&&(n[a.trim()]=!1),c==="true"&&(n[a.trim()]=!0),isNaN(c)||(n[a.trim()]=parseInt(c,10))})}return{formatName:t,formatOptions:n}}function Pu(e){const t={};return function(r,i,o){const s=i+JSON.stringify(o);let a=t[s];return a||(a=e(c1(i),o),t[s]=a),a(r)}}class HY{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=cs.create("formatter"),this.options=t,this.formats={number:Pu((n,r)=>{const i=new Intl.NumberFormat(n,{...r});return o=>i.format(o)}),currency:Pu((n,r)=>{const i=new Intl.NumberFormat(n,{...r,style:"currency"});return o=>i.format(o)}),datetime:Pu((n,r)=>{const i=new Intl.DateTimeFormat(n,{...r});return o=>i.format(o)}),relativetime:Pu((n,r)=>{const i=new Intl.RelativeTimeFormat(n,{...r});return o=>i.format(o,r.range||"day")}),list:Pu((n,r)=>{const i=new Intl.ListFormat(n,{...r});return o=>i.format(o)})},this.init(t)}init(t){const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}}).interpolation;this.formatSeparator=r.formatSeparator?r.formatSeparator:r.formatSeparator||","}add(t,n){this.formats[t.toLowerCase().trim()]=n}addCached(t,n){this.formats[t.toLowerCase().trim()]=Pu(n)}format(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n.split(this.formatSeparator).reduce((a,l)=>{const{formatName:c,formatOptions:u}=GY(l);if(this.formats[c]){let d=a;try{const f=i&&i.formatParams&&i.formatParams[i.interpolationkey]||{},h=f.locale||f.lng||i.locale||i.lng||r;d=this.formats[c](a,h,{...u,...i,...f})}catch(f){this.logger.warn(f)}return d}else this.logger.warn(`there was no format function for ${c}`);return a},t)}}function WY(e,t){e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)}class qY extends Kb{constructor(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=t,this.store=n,this.services=r,this.languageUtils=r.languageUtils,this.options=i,this.logger=cs.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=i.maxParallelReads||10,this.readingCalls=0,this.maxRetries=i.maxRetries>=0?i.maxRetries:5,this.retryTimeout=i.retryTimeout>=1?i.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(r,i.backend,i)}queueLoad(t,n,r,i){const o={},s={},a={},l={};return t.forEach(c=>{let u=!0;n.forEach(d=>{const f=`${c}|${d}`;!r.reload&&this.store.hasResourceBundle(c,d)?this.state[f]=2:this.state[f]<0||(this.state[f]===1?s[f]===void 0&&(s[f]=!0):(this.state[f]=1,u=!1,s[f]===void 0&&(s[f]=!0),o[f]===void 0&&(o[f]=!0),l[d]===void 0&&(l[d]=!0)))}),u||(a[c]=!0)}),(Object.keys(o).length||Object.keys(s).length)&&this.queue.push({pending:s,pendingCount:Object.keys(s).length,loaded:{},errors:[],callback:i}),{toLoad:Object.keys(o),pending:Object.keys(s),toLoadLanguages:Object.keys(a),toLoadNamespaces:Object.keys(l)}}loaded(t,n,r){const i=t.split("|"),o=i[0],s=i[1];n&&this.emit("failedLoading",o,s,n),r&&this.store.addResourceBundle(o,s,r),this.state[t]=n?-1:2;const a={};this.queue.forEach(l=>{MY(l.loaded,[o],s),WY(l,t),n&&l.errors.push(n),l.pendingCount===0&&!l.done&&(Object.keys(l.loaded).forEach(c=>{a[c]||(a[c]={});const u=l.loaded[c];u.length&&u.forEach(d=>{a[c][d]===void 0&&(a[c][d]=!0)})}),l.done=!0,l.errors.length?l.callback(l.errors):l.callback())}),this.emit("loaded",a),this.queue=this.queue.filter(l=>!l.done)}read(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,s=arguments.length>5?arguments[5]:void 0;if(!t.length)return s(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:n,fcName:r,tried:i,wait:o,callback:s});return}this.readingCalls++;const a=(c,u)=>{if(this.readingCalls--,this.waitingReads.length>0){const d=this.waitingReads.shift();this.read(d.lng,d.ns,d.fcName,d.tried,d.wait,d.callback)}if(c&&u&&i{this.read.call(this,t,n,r,i+1,o*2,s)},o);return}s(c,u)},l=this.backend[r].bind(this.backend);if(l.length===2){try{const c=l(t,n);c&&typeof c.then=="function"?c.then(u=>a(null,u)).catch(a):a(null,c)}catch(c){a(c)}return}return l(t,n,a)}prepareLoading(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();typeof t=="string"&&(t=this.languageUtils.toResolveHierarchy(t)),typeof n=="string"&&(n=[n]);const o=this.queueLoad(t,n,r,i);if(!o.toLoad.length)return o.pending.length||i(),null;o.toLoad.forEach(s=>{this.loadOne(s)})}load(t,n,r){this.prepareLoading(t,n,{},r)}reload(t,n,r){this.prepareLoading(t,n,{reload:!0},r)}loadOne(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const r=t.split("|"),i=r[0],o=r[1];this.read(i,o,"read",void 0,void 0,(s,a)=>{s&&this.logger.warn(`${n}loading namespace ${o} for language ${i} failed`,s),!s&&a&&this.logger.log(`${n}loaded namespace ${o} for language ${i}`,a),this.loaded(t,s,a)})}saveMissing(t,n,r,i,o){let s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(n)){this.logger.warn(`did not save key "${r}" as the namespace "${n}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(r==null||r==="")){if(this.backend&&this.backend.create){const l={...s,isUpdate:o},c=this.backend.create.bind(this.backend);if(c.length<6)try{let u;c.length===5?u=c(t,n,r,i,l):u=c(t,n,r,i),u&&typeof u.then=="function"?u.then(d=>a(null,d)).catch(a):a(null,u)}catch(u){a(u)}else c(t,n,r,i,a,l)}!t||!t[0]||this.store.addResource(t[0],n,r,i)}}}function t6(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){let n={};if(typeof t[1]=="object"&&(n=t[1]),typeof t[1]=="string"&&(n.defaultValue=t[1]),typeof t[2]=="string"&&(n.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const r=t[3]||t[2];Object.keys(r).forEach(i=>{n[i]=r[i]})}return n},interpolation:{escapeValue:!0,format:(e,t,n,r)=>e,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function n6(e){return typeof e.ns=="string"&&(e.ns=[e.ns]),typeof e.fallbackLng=="string"&&(e.fallbackLng=[e.fallbackLng]),typeof e.fallbackNS=="string"&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function O0(){}function KY(e){Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(n=>{typeof e[n]=="function"&&(e[n]=e[n].bind(e))})}class Jp extends Kb{constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(super(),this.options=n6(t),this.services={},this.logger=cs,this.modules={external:[]},KY(this),n&&!this.isInitialized&&!t.isClone){if(!this.options.initImmediate)return this.init(t,n),this;setTimeout(()=>{this.init(t,n)},0)}}init(){var t=this;let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;typeof n=="function"&&(r=n,n={}),!n.defaultNS&&n.defaultNS!==!1&&n.ns&&(typeof n.ns=="string"?n.defaultNS=n.ns:n.ns.indexOf("translation")<0&&(n.defaultNS=n.ns[0]));const i=t6();this.options={...i,...this.options,...n6(n)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...i.interpolation,...this.options.interpolation}),n.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=n.keySeparator),n.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=n.nsSeparator);function o(u){return u?typeof u=="function"?new u:u:null}if(!this.options.isClone){this.modules.logger?cs.init(o(this.modules.logger),this.options):cs.init(null,this.options);let u;this.modules.formatter?u=this.modules.formatter:typeof Intl<"u"&&(u=HY);const d=new ZP(this.options);this.store=new QP(this.options.resources,this.options);const f=this.services;f.logger=cs,f.resourceStore=this.store,f.languageUtils=d,f.pluralResolver=new VY(d,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),u&&(!this.options.interpolation.format||this.options.interpolation.format===i.interpolation.format)&&(f.formatter=o(u),f.formatter.init(f,this.options),this.options.interpolation.format=f.formatter.format.bind(f.formatter)),f.interpolator=new UY(this.options),f.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},f.backendConnector=new qY(o(this.modules.backend),f.resourceStore,f,this.options),f.backendConnector.on("*",function(h){for(var p=arguments.length,m=new Array(p>1?p-1:0),_=1;_1?p-1:0),_=1;_{h.init&&h.init(this)})}if(this.format=this.options.interpolation.format,r||(r=O0),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const u=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);u.length>0&&u[0]!=="dev"&&(this.options.lng=u[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(u=>{this[u]=function(){return t.store[u](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(u=>{this[u]=function(){return t.store[u](...arguments),t}});const l=dh(),c=()=>{const u=(d,f)=>{this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(f),r(d,f)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return u(null,this.t.bind(this));this.changeLanguage(this.options.lng,u)};return this.options.resources||!this.options.initImmediate?c():setTimeout(c,0),l}loadResources(t){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O0;const i=typeof t=="string"?t:this.language;if(typeof t=="function"&&(r=t),!this.options.resources||this.options.partialBundledLanguages){if(i&&i.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const o=[],s=a=>{if(!a||a==="cimode")return;this.services.languageUtils.toResolveHierarchy(a).forEach(c=>{c!=="cimode"&&o.indexOf(c)<0&&o.push(c)})};i?s(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(l=>s(l)),this.options.preload&&this.options.preload.forEach(a=>s(a)),this.services.backendConnector.load(o,this.options.ns,a=>{!a&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(a)})}else r(null)}reloadResources(t,n,r){const i=dh();return t||(t=this.languages),n||(n=this.options.ns),r||(r=O0),this.services.backendConnector.reload(t,n,o=>{i.resolve(),r(o)}),i}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&kN.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!(["cimode","dev"].indexOf(t)>-1))for(let n=0;n-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}}changeLanguage(t,n){var r=this;this.isLanguageChangingTo=t;const i=dh();this.emit("languageChanging",t);const o=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},s=(l,c)=>{c?(o(c),this.translator.changeLanguage(c),this.isLanguageChangingTo=void 0,this.emit("languageChanged",c),this.logger.log("languageChanged",c)):this.isLanguageChangingTo=void 0,i.resolve(function(){return r.t(...arguments)}),n&&n(l,function(){return r.t(...arguments)})},a=l=>{!t&&!l&&this.services.languageDetector&&(l=[]);const c=typeof l=="string"?l:this.services.languageUtils.getBestMatchFromCodes(l);c&&(this.language||o(c),this.translator.language||this.translator.changeLanguage(c),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(c)),this.loadResources(c,u=>{s(u,c)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?a(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(a):this.services.languageDetector.detect(a):a(t),i}getFixedT(t,n,r){var i=this;const o=function(s,a){let l;if(typeof a!="object"){for(var c=arguments.length,u=new Array(c>2?c-2:0),d=2;d`${l.keyPrefix}${f}${p}`):h=l.keyPrefix?`${l.keyPrefix}${f}${s}`:s,i.t(h,l)};return typeof t=="string"?o.lng=t:o.lngs=t,o.ns=n,o.keyPrefix=r,o}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=n.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,o=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const c=this.services.backendConnector.state[`${a}|${l}`];return c===-1||c===2};if(n.precheck){const a=n.precheck(this,s);if(a!==void 0)return a}return!!(this.hasResourceBundle(r,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||s(r,t)&&(!i||s(o,t)))}loadNamespaces(t,n){const r=dh();return this.options.ns?(typeof t=="string"&&(t=[t]),t.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),n&&n(i)}),r):(n&&n(),Promise.resolve())}loadLanguages(t,n){const r=dh();typeof t=="string"&&(t=[t]);const i=this.options.preload||[],o=t.filter(s=>i.indexOf(s)<0);return o.length?(this.options.preload=i.concat(o),this.loadResources(s=>{r.resolve(),n&&n(s)}),r):(n&&n(),Promise.resolve())}dir(t){if(t||(t=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!t)return"rtl";const n=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],r=this.services&&this.services.languageUtils||new ZP(t6());return n.indexOf(r.getLanguagePartFromCode(t))>-1||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;return new Jp(t,n)}cloneInstance(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O0;const r=t.forkResourceStore;r&&delete t.forkResourceStore;const i={...this.options,...t,isClone:!0},o=new Jp(i);return(t.debug!==void 0||t.prefix!==void 0)&&(o.logger=o.logger.clone(t)),["store","services","language"].forEach(a=>{o[a]=this[a]}),o.services={...this.services},o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},r&&(o.store=new QP(this.store.data,i),o.services.resourceStore=o.store),o.translator=new u1(o.services,i),o.translator.on("*",function(a){for(var l=arguments.length,c=new Array(l>1?l-1:0),u=1;u0){if(++t>=jZ)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function HZ(e){return function(){return e}}var WZ=function(){try{var e=cu(Object,"defineProperty");return e({},"",{}),e}catch{}}();const f1=WZ;var qZ=f1?function(e,t){return f1(e,"toString",{configurable:!0,enumerable:!1,value:HZ(t),writable:!0})}:Qb;const KZ=qZ;var XZ=GZ(KZ);const $N=XZ;function NN(e,t){for(var n=-1,r=e==null?0:e.length;++n-1}var tJ=9007199254740991,nJ=/^(?:0|[1-9]\d*)$/;function Yb(e,t){var n=typeof e;return t=t??tJ,!!t&&(n=="number"||n!="symbol"&&nJ.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=oJ}function Mf(e){return e!=null&&C4(e.length)&&!x4(e)}function Jb(e,t,n){if(!_r(n))return!1;var r=typeof t;return(r=="number"?Mf(n)&&Yb(t,n.length):r=="string"&&t in n)?hm(n[t],e):!1}function LN(e){return DN(function(t,n){var r=-1,i=n.length,o=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=e.length>3&&typeof o=="function"?(i--,o):void 0,s&&Jb(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),t=Object(t);++r-1}function _ee(e,t){var n=this.__data__,r=t_(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function ma(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(a)?t>1?WN(a,t-1,n,r,i):P4(i,a):r||(i[i.length]=a)}return i}function Dee(e){var t=e==null?0:e.length;return t?WN(e,1):[]}function qN(e){return $N(FN(e,void 0,Dee),e+"")}var Lee=UN(Object.getPrototypeOf,Object);const I4=Lee;var Bee="[object Object]",zee=Function.prototype,jee=Object.prototype,KN=zee.toString,Vee=jee.hasOwnProperty,Uee=KN.call(Object);function XN(e){if(!Ei(e)||Ts(e)!=Bee)return!1;var t=I4(e);if(t===null)return!0;var n=Vee.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&KN.call(n)==Uee}function QN(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++r=r?e:QN(e,t,n)}var Gee="\\ud800-\\udfff",Hee="\\u0300-\\u036f",Wee="\\ufe20-\\ufe2f",qee="\\u20d0-\\u20ff",Kee=Hee+Wee+qee,Xee="\\ufe0e\\ufe0f",Qee="\\u200d",Yee=RegExp("["+Qee+Gee+Kee+Xee+"]");function i_(e){return Yee.test(e)}function Zee(e){return e.split("")}var ZN="\\ud800-\\udfff",Jee="\\u0300-\\u036f",ete="\\ufe20-\\ufe2f",tte="\\u20d0-\\u20ff",nte=Jee+ete+tte,rte="\\ufe0e\\ufe0f",ite="["+ZN+"]",S5="["+nte+"]",x5="\\ud83c[\\udffb-\\udfff]",ote="(?:"+S5+"|"+x5+")",JN="[^"+ZN+"]",eF="(?:\\ud83c[\\udde6-\\uddff]){2}",tF="[\\ud800-\\udbff][\\udc00-\\udfff]",ste="\\u200d",nF=ote+"?",rF="["+rte+"]?",ate="(?:"+ste+"(?:"+[JN,eF,tF].join("|")+")"+rF+nF+")*",lte=rF+nF+ate,cte="(?:"+[JN+S5+"?",S5,eF,tF,ite].join("|")+")",ute=RegExp(x5+"(?="+x5+")|"+cte+lte,"g");function dte(e){return e.match(ute)||[]}function iF(e){return i_(e)?dte(e):Zee(e)}function fte(e){return function(t){t=af(t);var n=i_(t)?iF(t):void 0,r=n?n[0]:t.charAt(0),i=n?YN(n,1).join(""):t.slice(1);return r[e]()+i}}var hte=fte("toUpperCase");const oF=hte;function sF(e,t,n,r){var i=-1,o=e==null?0:e.length;for(r&&o&&(n=e[++i]);++i=t?e:t)),e}function el(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=qy(n),n=n===n?n:0),t!==void 0&&(t=qy(t),t=t===t?t:0),rne(qy(e),t,n)}function ine(){this.__data__=new ma,this.size=0}function one(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function sne(e){return this.__data__.get(e)}function ane(e){return this.__data__.has(e)}var lne=200;function cne(e,t){var n=this.__data__;if(n instanceof ma){var r=n.__data__;if(!rg||r.lengtha))return!1;var c=o.get(e),u=o.get(t);if(c&&u)return c==t&&u==e;var d=-1,f=!0,h=n&Gre?new ig:void 0;for(o.set(e,t),o.set(t,e);++d1),o}),If(e,EF(e),n),r&&(n=gp(n,Jie|eoe|toe,Zie));for(var i=t.length;i--;)Yie(n,t[i]);return n});const uu=noe;function roe(e,t,n,r){if(!_r(e))return e;t=Rf(t,e);for(var i=-1,o=t.length,s=o-1,a=e;a!=null&&++it){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Toe();return Eoe(e+i*(t-e+Coe("1e-"+((i+"").length-1))),t)}return woe(e,t)}var koe=Math.ceil,Poe=Math.max;function Ioe(e,t,n,r){for(var i=-1,o=Poe(koe((t-e)/(n||1)),0),s=Array(o);o--;)s[r?o:++i]=e,e+=n;return s}function Moe(e){return function(t,n,r){return r&&typeof r!="number"&&Jb(t,n,r)&&(n=r=void 0),t=kd(t),n===void 0?(n=t,t=0):n=kd(n),r=r===void 0?t=o)return e;var a=n-XF(r);if(a<1)return r;var l=s?YN(s,0,a).join(""):e.slice(0,a);if(i===void 0)return l+r;if(s&&(a+=l.length-a),Kie(i)){if(e.slice(a).search(i)){var c,u=l;for(i.global||(i=RegExp(i.source,af(joe.exec(i))+"g")),i.lastIndex=0;c=i.exec(u);)var d=c.index;l=l.slice(0,d===void 0?a:d)}}else if(e.indexOf(d1(i),a)!=a){var f=l.lastIndexOf(i);f>-1&&(l=l.slice(0,f))}return l+r}var Voe=1/0,Uoe=Pd&&1/O4(new Pd([,-0]))[1]==Voe?function(e){return new Pd(e)}:zZ;const Goe=Uoe;var Hoe=200;function QF(e,t,n){var r=-1,i=eJ,o=e.length,s=!0,a=[],l=a;if(n)s=!1,i=Bie;else if(o>=Hoe){var c=t?null:Goe(e);if(c)return O4(c);s=!1,i=RF,l=new ig}else l=t?[]:a;e:for(;++rt===0?0:n===2?Math.floor((e+1+1)/2)/Math.floor((t+1)/2):(e+1+1)/(t+1),pi=e=>typeof e=="string"?{title:e,status:"info",isClosable:!0,duration:2500}:{status:"info",isClosable:!0,duration:2500,...e},gD={isInitialized:!1,isConnected:!1,shouldConfirmOnDelete:!0,enableImageDebugging:!1,toastQueue:[],denoiseProgress:null,shouldAntialiasProgressImage:!1,consoleLogLevel:"debug",shouldLogToConsole:!0,language:"en",shouldUseNSFWChecker:!1,shouldUseWatermarker:!1,shouldEnableInformationalPopovers:!1,status:"DISCONNECTED"},mD=jt({name:"system",initialState:gD,reducers:{setShouldConfirmOnDelete:(e,t)=>{e.shouldConfirmOnDelete=t.payload},setEnableImageDebugging:(e,t)=>{e.enableImageDebugging=t.payload},addToast:(e,t)=>{e.toastQueue.push(t.payload)},clearToastQueue:e=>{e.toastQueue=[]},consoleLogLevelChanged:(e,t)=>{e.consoleLogLevel=t.payload},shouldLogToConsoleChanged:(e,t)=>{e.shouldLogToConsole=t.payload},shouldAntialiasProgressImageChanged:(e,t)=>{e.shouldAntialiasProgressImage=t.payload},languageChanged:(e,t)=>{e.language=t.payload},shouldUseNSFWCheckerChanged(e,t){e.shouldUseNSFWChecker=t.payload},shouldUseWatermarkerChanged(e,t){e.shouldUseWatermarker=t.payload},setShouldEnableInformationalPopovers(e,t){e.shouldEnableInformationalPopovers=t.payload},isInitializedChanged(e,t){e.isInitialized=t.payload}},extraReducers(e){e.addCase(F4,t=>{t.isConnected=!0,t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(eD,t=>{t.isConnected=!1,t.denoiseProgress=null,t.status="DISCONNECTED"}),e.addCase(D4,t=>{t.denoiseProgress=null,t.status="PROCESSING"}),e.addCase(z4,(t,n)=>{const{step:r,total_steps:i,order:o,progress_image:s,graph_execution_state_id:a,queue_batch_id:l}=n.payload.data;t.denoiseProgress={step:r,total_steps:i,order:o,percentage:Yoe(r,i,o),progress_image:s,session_id:a,batch_id:l},t.status="PROCESSING"}),e.addCase(B4,t=>{t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(iD,t=>{t.denoiseProgress=null,t.status="CONNECTED"}),e.addCase(aD,t=>{t.status="LOADING_MODEL"}),e.addCase(cD,t=>{t.status="CONNECTED"}),e.addCase(d_,(t,n)=>{["completed","canceled","failed"].includes(n.payload.data.queue_item.status)&&(t.status="CONNECTED",t.denoiseProgress=null)}),e.addMatcher(nse,(t,n)=>{t.toastQueue.push(pi({title:J("toast.serverError"),status:"error",description:N4(n.payload.data.error_type)}))})}}),{setShouldConfirmOnDelete:gze,setEnableImageDebugging:mze,addToast:Ve,clearToastQueue:yze,consoleLogLevelChanged:vze,shouldLogToConsoleChanged:bze,shouldAntialiasProgressImageChanged:_ze,languageChanged:Sze,shouldUseNSFWCheckerChanged:Zoe,shouldUseWatermarkerChanged:Joe,setShouldEnableInformationalPopovers:xze,isInitializedChanged:ese}=mD.actions,tse=mD.reducer,nse=br(u_,dD,hD),rse=e=>{const{socket:t,dispatch:n}=e;t.on("connect",()=>{n(ZF());const r=In.get();t.emit("subscribe_queue",{queue_id:r})}),t.on("connect_error",r=>{r&&r.message&&r.data==="ERR_UNAUTHENTICATED"&&n(Ve(pi({title:r.message,status:"error",duration:1e4})))}),t.on("disconnect",()=>{n(JF())}),t.on("invocation_started",r=>{n(tD({data:r}))}),t.on("generator_progress",r=>{n(oD({data:r}))}),t.on("invocation_error",r=>{n(nD({data:r}))}),t.on("invocation_complete",r=>{n(L4({data:r}))}),t.on("graph_execution_state_complete",r=>{n(rD({data:r}))}),t.on("model_load_started",r=>{n(sD({data:r}))}),t.on("model_load_completed",r=>{n(lD({data:r}))}),t.on("session_retrieval_error",r=>{n(uD({data:r}))}),t.on("invocation_retrieval_error",r=>{n(fD({data:r}))}),t.on("queue_item_status_changed",r=>{n(pD({data:r}))})},Ss=Object.create(null);Ss.open="0";Ss.close="1";Ss.ping="2";Ss.pong="3";Ss.message="4";Ss.upgrade="5";Ss.noop="6";const Ky=Object.create(null);Object.keys(Ss).forEach(e=>{Ky[Ss[e]]=e});const I5={type:"error",data:"parser error"},yD=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",vD=typeof ArrayBuffer=="function",bD=e=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,j4=({type:e,data:t},n,r)=>yD&&t instanceof Blob?n?r(t):j6(t,r):vD&&(t instanceof ArrayBuffer||bD(t))?n?r(t):j6(new Blob([t]),r):r(Ss[e]+(t||"")),j6=(e,t)=>{const n=new FileReader;return n.onload=function(){const r=n.result.split(",")[1];t("b"+(r||""))},n.readAsDataURL(e)};function V6(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let Ux;function ise(e,t){if(yD&&e.data instanceof Blob)return e.data.arrayBuffer().then(V6).then(t);if(vD&&(e.data instanceof ArrayBuffer||bD(e.data)))return t(V6(e.data));j4(e,!1,n=>{Ux||(Ux=new TextEncoder),t(Ux.encode(n))})}const U6="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Vh=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let e=0;e{let t=e.length*.75,n=e.length,r,i=0,o,s,a,l;e[e.length-1]==="="&&(t--,e[e.length-2]==="="&&t--);const c=new ArrayBuffer(t),u=new Uint8Array(c);for(r=0;r>4,u[i++]=(s&15)<<4|a>>2,u[i++]=(a&3)<<6|l&63;return c},sse=typeof ArrayBuffer=="function",V4=(e,t)=>{if(typeof e!="string")return{type:"message",data:_D(e,t)};const n=e.charAt(0);return n==="b"?{type:"message",data:ase(e.substring(1),t)}:Ky[n]?e.length>1?{type:Ky[n],data:e.substring(1)}:{type:Ky[n]}:I5},ase=(e,t)=>{if(sse){const n=ose(e);return _D(n,t)}else return{base64:!0,data:e}},_D=(e,t)=>{switch(t){case"blob":return e instanceof Blob?e:new Blob([e]);case"arraybuffer":default:return e instanceof ArrayBuffer?e:e.buffer}},SD=String.fromCharCode(30),lse=(e,t)=>{const n=e.length,r=new Array(n);let i=0;e.forEach((o,s)=>{j4(o,!1,a=>{r[s]=a,++i===n&&t(r.join(SD))})})},cse=(e,t)=>{const n=e.split(SD),r=[];for(let i=0;i{const r=n.length;let i;if(r<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,r);else if(r<65536){i=new Uint8Array(3);const o=new DataView(i.buffer);o.setUint8(0,126),o.setUint16(1,r)}else{i=new Uint8Array(9);const o=new DataView(i.buffer);o.setUint8(0,127),o.setBigUint64(1,BigInt(r))}e.data&&typeof e.data!="string"&&(i[0]|=128),t.enqueue(i),t.enqueue(n)})}})}let Gx;function N0(e){return e.reduce((t,n)=>t+n.length,0)}function F0(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let i=0;iMath.pow(2,53-32)-1){a.enqueue(I5);break}i=u*Math.pow(2,32)+c.getUint32(4),r=3}else{if(N0(n)e){a.enqueue(I5);break}}}})}const xD=4;function vn(e){if(e)return fse(e)}function fse(e){for(var t in vn.prototype)e[t]=vn.prototype[t];return e}vn.prototype.on=vn.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this};vn.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this};vn.prototype.off=vn.prototype.removeListener=vn.prototype.removeAllListeners=vn.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(arguments.length==1)return delete this._callbacks["$"+e],this;for(var r,i=0;itypeof self<"u"?self:typeof window<"u"?window:Function("return this")())();function wD(e,...t){return t.reduce((n,r)=>(e.hasOwnProperty(r)&&(n[r]=e[r]),n),{})}const hse=qi.setTimeout,pse=qi.clearTimeout;function f_(e,t){t.useNativeTimers?(e.setTimeoutFn=hse.bind(qi),e.clearTimeoutFn=pse.bind(qi)):(e.setTimeoutFn=qi.setTimeout.bind(qi),e.clearTimeoutFn=qi.clearTimeout.bind(qi))}const gse=1.33;function mse(e){return typeof e=="string"?yse(e):Math.ceil((e.byteLength||e.size)*gse)}function yse(e){let t=0,n=0;for(let r=0,i=e.length;r=57344?n+=3:(r++,n+=4);return n}function vse(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t}function bse(e){let t={},n=e.split("&");for(let r=0,i=n.length;r0);return t}function ED(){const e=W6(+new Date);return e!==H6?(G6=0,H6=e):e+"."+W6(G6++)}for(;D0{this.readyState="paused",t()};if(this.polling||!this.writable){let r=0;this.polling&&(r++,this.once("pollComplete",function(){--r||n()})),this.writable||(r++,this.once("drain",function(){--r||n()}))}else n()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const n=r=>{if(this.readyState==="opening"&&r.type==="open"&&this.onOpen(),r.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(r)};cse(t,this.socket.binaryType).forEach(n),this.readyState!=="closed"&&(this.polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this.poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,lse(t,n=>{this.doWrite(n,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",n=this.query||{};return this.opts.timestampRequests!==!1&&(n[this.opts.timestampParam]=ED()),!this.supportsBinary&&!n.sid&&(n.b64=1),this.createUri(t,n)}request(t={}){return Object.assign(t,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new Md(this.uri(),t)}doWrite(t,n){const r=this.request({method:"POST",data:t});r.on("success",n),r.on("error",(i,o)=>{this.onError("xhr post error",i,o)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(n,r)=>{this.onError("xhr poll error",n,r)}),this.pollXhr=t}}let Md=class Xy extends vn{constructor(t,n){super(),f_(this,n),this.opts=n,this.method=n.method||"GET",this.uri=t,this.data=n.data!==void 0?n.data:null,this.create()}create(){var t;const n=wD(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this.opts.xd;const r=this.xhr=new AD(n);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let i in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(i)&&r.setRequestHeader(i,this.opts.extraHeaders[i])}}catch{}if(this.method==="POST")try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{r.setRequestHeader("Accept","*/*")}catch{}(t=this.opts.cookieJar)===null||t===void 0||t.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var i;r.readyState===3&&((i=this.opts.cookieJar)===null||i===void 0||i.parseCookies(r)),r.readyState===4&&(r.status===200||r.status===1223?this.onLoad():this.setTimeoutFn(()=>{this.onError(typeof r.status=="number"?r.status:0)},0))},r.send(this.data)}catch(i){this.setTimeoutFn(()=>{this.onError(i)},0);return}typeof document<"u"&&(this.index=Xy.requestsCount++,Xy.requests[this.index]=this)}onError(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}cleanup(t){if(!(typeof this.xhr>"u"||this.xhr===null)){if(this.xhr.onreadystatechange=wse,t)try{this.xhr.abort()}catch{}typeof document<"u"&&delete Xy.requests[this.index],this.xhr=null}}onLoad(){const t=this.xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}};Md.requestsCount=0;Md.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",q6);else if(typeof addEventListener=="function"){const e="onpagehide"in qi?"pagehide":"unload";addEventListener(e,q6,!1)}}function q6(){for(let e in Md.requests)Md.requests.hasOwnProperty(e)&&Md.requests[e].abort()}const G4=(()=>typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,n)=>n(t,0))(),L0=qi.WebSocket||qi.MozWebSocket,K6=!0,Tse="arraybuffer",X6=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class Ase extends U4{constructor(t){super(t),this.supportsBinary=!t.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const t=this.uri(),n=this.opts.protocols,r=X6?{}:wD(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=K6&&!X6?n?new L0(t,n):new L0(t):new L0(t,n,r)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let n=0;n{const s={};try{K6&&this.ws.send(o)}catch{}i&&G4(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",n=this.query||{};return this.opts.timestampRequests&&(n[this.opts.timestampParam]=ED()),this.supportsBinary||(n.b64=1),this.createUri(t,n)}check(){return!!L0}}class kse extends U4{get name(){return"webtransport"}doOpen(){typeof WebTransport=="function"&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this.transport.ready.then(()=>{this.transport.createBidirectionalStream().then(t=>{const n=dse(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=t.readable.pipeThrough(n).getReader(),i=use();i.readable.pipeTo(t.writable),this.writer=i.writable.getWriter();const o=()=>{r.read().then(({done:a,value:l})=>{a||(this.onPacket(l),o())}).catch(a=>{})};o();const s={type:"open"};this.query.sid&&(s.data=`{"sid":"${this.query.sid}"}`),this.writer.write(s).then(()=>this.onOpen())})}))}write(t){this.writable=!1;for(let n=0;n{i&&G4(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this.transport)===null||t===void 0||t.close()}}const Pse={websocket:Ase,webtransport:kse,polling:Ese},Ise=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Mse=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function R5(e){const t=e,n=e.indexOf("["),r=e.indexOf("]");n!=-1&&r!=-1&&(e=e.substring(0,n)+e.substring(n,r).replace(/:/g,";")+e.substring(r,e.length));let i=Ise.exec(e||""),o={},s=14;for(;s--;)o[Mse[s]]=i[s]||"";return n!=-1&&r!=-1&&(o.source=t,o.host=o.host.substring(1,o.host.length-1).replace(/;/g,":"),o.authority=o.authority.replace("[","").replace("]","").replace(/;/g,":"),o.ipv6uri=!0),o.pathNames=Rse(o,o.path),o.queryKey=Ose(o,o.query),o}function Rse(e,t){const n=/\/{2,9}/g,r=t.replace(n,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&r.splice(0,1),t.slice(-1)=="/"&&r.splice(r.length-1,1),r}function Ose(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,i,o){i&&(n[i]=o)}),n}let kD=class Hu extends vn{constructor(t,n={}){super(),this.binaryType=Tse,this.writeBuffer=[],t&&typeof t=="object"&&(n=t,t=null),t?(t=R5(t),n.hostname=t.host,n.secure=t.protocol==="https"||t.protocol==="wss",n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=R5(n.host).host),f_(this,n),this.secure=n.secure!=null?n.secure:typeof location<"u"&&location.protocol==="https:",n.hostname&&!n.port&&(n.port=this.secure?"443":"80"),this.hostname=n.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=n.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=n.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},n),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=bse(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,typeof addEventListener=="function"&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(t){const n=Object.assign({},this.opts.query);n.EIO=xD,n.transport=t,this.id&&(n.sid=this.id);const r=Object.assign({},this.opts,{query:n,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new Pse[t](r)}open(){let t;if(this.opts.rememberUpgrade&&Hu.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}else t=this.transports[0];this.readyState="opening";try{t=this.createTransport(t)}catch{this.transports.shift(),this.open();return}t.open(),this.setTransport(t)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",n=>this.onClose("transport close",n))}probe(t){let n=this.createTransport(t),r=!1;Hu.priorWebsocketSuccess=!1;const i=()=>{r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",d=>{if(!r)if(d.type==="pong"&&d.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",n),!n)return;Hu.priorWebsocketSuccess=n.name==="websocket",this.transport.pause(()=>{r||this.readyState!=="closed"&&(u(),this.setTransport(n),n.send([{type:"upgrade"}]),this.emitReserved("upgrade",n),n=null,this.upgrading=!1,this.flush())})}else{const f=new Error("probe error");f.transport=n.name,this.emitReserved("upgradeError",f)}}))};function o(){r||(r=!0,u(),n.close(),n=null)}const s=d=>{const f=new Error("probe error: "+d);f.transport=n.name,o(),this.emitReserved("upgradeError",f)};function a(){s("transport closed")}function l(){s("socket closed")}function c(d){n&&d.name!==n.name&&o()}const u=()=>{n.removeListener("open",i),n.removeListener("error",s),n.removeListener("close",a),this.off("close",l),this.off("upgrading",c)};n.once("open",i),n.once("error",s),n.once("close",a),this.once("close",l),this.once("upgrading",c),this.upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{r||n.open()},200):n.open()}onOpen(){if(this.readyState="open",Hu.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush(),this.readyState==="open"&&this.opts.upgrade){let t=0;const n=this.upgrades.length;for(;t{this.onClose("ping timeout")},this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let n=1;for(let r=0;r0&&n>this.maxPayload)return this.writeBuffer.slice(0,r);n+=2}return this.writeBuffer}write(t,n,r){return this.sendPacket("message",t,n,r),this}send(t,n,r){return this.sendPacket("message",t,n,r),this}sendPacket(t,n,r,i){if(typeof n=="function"&&(i=n,n=void 0),typeof r=="function"&&(i=r,r=null),this.readyState==="closing"||this.readyState==="closed")return;r=r||{},r.compress=r.compress!==!1;const o={type:t,data:n,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),i&&this.once("flush",i),this.flush()}close(){const t=()=>{this.onClose("forced close"),this.transport.close()},n=()=>{this.off("upgrade",n),this.off("upgradeError",n),t()},r=()=>{this.once("upgrade",n),this.once("upgradeError",n)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():t()}):this.upgrading?r():t()),this}onError(t){Hu.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(t,n){(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")&&(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),typeof removeEventListener=="function"&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",t,n),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(t){const n=[];let r=0;const i=t.length;for(;rtypeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,PD=Object.prototype.toString,Dse=typeof Blob=="function"||typeof Blob<"u"&&PD.call(Blob)==="[object BlobConstructor]",Lse=typeof File=="function"||typeof File<"u"&&PD.call(File)==="[object FileConstructor]";function H4(e){return Nse&&(e instanceof ArrayBuffer||Fse(e))||Dse&&e instanceof Blob||Lse&&e instanceof File}function Qy(e,t){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let n=0,r=e.length;n=0&&e.num{delete this.acks[t];for(let s=0;s{this.io.clearTimeoutFn(o),n.apply(this,[null,...s])}}emitWithAck(t,...n){const r=this.flags.timeout!==void 0||this._opts.ackTimeout!==void 0;return new Promise((i,o)=>{n.push((s,a)=>r?s?o(s):i(a):i(s)),this.emit(t,...n)})}_addToQueue(t){let n;typeof t[t.length-1]=="function"&&(n=t.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((i,...o)=>r!==this._queue[0]?void 0:(i!==null?r.tryCount>this._opts.retries&&(this._queue.shift(),n&&n(i)):(this._queue.shift(),n&&n(null,...o)),r.pending=!1,this._drainQueue())),this._queue.push(r),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const n=this._queue[0];n.pending&&!t||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:Ye.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,n)}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case Ye.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Ye.EVENT:case Ye.BINARY_EVENT:this.onevent(t);break;case Ye.ACK:case Ye.BINARY_ACK:this.onack(t);break;case Ye.DISCONNECT:this.ondisconnect();break;case Ye.CONNECT_ERROR:this.destroy();const r=new Error(t.data.message);r.data=t.data.data,this.emitReserved("connect_error",r);break}}onevent(t){const n=t.data||[];t.id!=null&&n.push(this.ack(t.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const n=this._anyListeners.slice();for(const r of n)r.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const n=this;let r=!1;return function(...i){r||(r=!0,n.packet({type:Ye.ACK,id:t,data:i}))}}onack(t){const n=this.acks[t.id];typeof n=="function"&&(n.apply(this,t.data),delete this.acks[t.id])}onconnect(t,n){this.id=t,this.recovered=n&&this._pid===n,this._pid=n,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:Ye.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const n=this._anyListeners;for(let r=0;r0&&e.jitter<=1?e.jitter:0,this.attempts=0}$f.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+n:e-n}return Math.min(e,this.max)|0};$f.prototype.reset=function(){this.attempts=0};$f.prototype.setMin=function(e){this.ms=e};$f.prototype.setMax=function(e){this.max=e};$f.prototype.setJitter=function(e){this.jitter=e};class N5 extends vn{constructor(t,n){var r;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(n=t,t=void 0),n=n||{},n.path=n.path||"/socket.io",this.opts=n,f_(this,n),this.reconnection(n.reconnection!==!1),this.reconnectionAttempts(n.reconnectionAttempts||1/0),this.reconnectionDelay(n.reconnectionDelay||1e3),this.reconnectionDelayMax(n.reconnectionDelayMax||5e3),this.randomizationFactor((r=n.randomizationFactor)!==null&&r!==void 0?r:.5),this.backoff=new $f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(n.timeout==null?2e4:n.timeout),this._readyState="closed",this.uri=t;const i=n.parser||Hse;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=n.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var n;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(n=this.backoff)===null||n===void 0||n.setMin(t),this)}randomizationFactor(t){var n;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(n=this.backoff)===null||n===void 0||n.setJitter(t),this)}reconnectionDelayMax(t){var n;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(n=this.backoff)===null||n===void 0||n.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new kD(this.uri,this.opts);const n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const i=_o(n,"open",function(){r.onopen(),t&&t()}),o=a=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",a),t?t(a):this.maybeReconnectOnOpen()},s=_o(n,"error",o);if(this._timeout!==!1){const a=this._timeout,l=this.setTimeoutFn(()=>{i(),o(new Error("timeout")),n.close()},a);this.opts.autoUnref&&l.unref(),this.subs.push(()=>{this.clearTimeoutFn(l)})}return this.subs.push(i),this.subs.push(s),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(_o(t,"ping",this.onping.bind(this)),_o(t,"data",this.ondata.bind(this)),_o(t,"error",this.onerror.bind(this)),_o(t,"close",this.onclose.bind(this)),_o(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(n){this.onclose("parse error",n)}}ondecoded(t){G4(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,n){let r=this.nsps[t];return r?this._autoConnect&&!r.active&&r.connect():(r=new ID(this,t,n),this.nsps[t]=r),r}_destroy(t){const n=Object.keys(this.nsps);for(const r of n)if(this.nsps[r].active)return;this._close()}_packet(t){const n=this.encoder.encode(t);for(let r=0;rt()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(t,n){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,n),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const n=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(i=>{i?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",i)):t.onreconnect()}))},n);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const hh={};function Yy(e,t){typeof e=="object"&&(t=e,e=void 0),t=t||{};const n=$se(e,t.path||"/socket.io"),r=n.source,i=n.id,o=n.path,s=hh[i]&&o in hh[i].nsps,a=t.forceNew||t["force new connection"]||t.multiplex===!1||s;let l;return a?l=new N5(r,t):(hh[i]||(hh[i]=new N5(r,t)),l=hh[i]),n.query&&!t.query&&(t.query=n.queryKey),l.socket(n.path,t)}Object.assign(Yy,{Manager:N5,Socket:ID,io:Yy,connect:Yy});const g1=$X({}),Hx=to(!1),wze=()=>{const e=tN(),t=Ox(Yv),n=Ox(Qv),r=Ox(g1),i=I.useMemo(()=>{const s=window.location.protocol==="https:"?"wss":"ws";return t?t.replace(/^https?:\/\//i,""):`${s}://${window.location.host}`},[t]),o=I.useMemo(()=>{const s={timeout:6e4,path:"/ws/socket.io",autoConnect:!1,forceNew:!0};return n&&(s.auth={token:n},s.transports=["websocket","polling"]),{...s,...r}},[n,r]);I.useEffect(()=>{if(Hx.get())return;const s=Yy(i,o);return rse({dispatch:e,socket:s}),s.connect(),Zv.get()&&(window.$socketOptions=g1,console.log("Socket initialized",s)),Hx.set(!0),()=>{Zv.get()&&(window.$socketOptions=void 0,console.log("Socket teardown",s)),s.disconnect(),Hx.set(!1)}},[e,o,i])},Y6=to(void 0),Z6=to(void 0),F5=to(),MD=to(),B0=(e,t)=>Math.floor(e/t)*t,Or=(e,t)=>Math.round(e/t)*t,RD={shouldUpdateImagesOnConnect:!1,shouldFetchMetadataFromApi:!1,disabledTabs:[],disabledFeatures:["lightbox","faceRestore","batches","bulkDownload"],disabledSDFeatures:["variation","symmetry","hires","perlinNoise","noiseThreshold"],nodesAllowlist:void 0,nodesDenylist:void 0,canRestoreDeletedImagesFromBin:!0,sd:{disabledControlNetModels:[],disabledControlNetProcessors:[],iterations:{initial:1,min:1,sliderMax:1e3,inputMax:1e4,fineStep:1,coarseStep:1},width:{initial:512,min:64,sliderMax:1536,inputMax:4096,fineStep:8,coarseStep:64},height:{initial:512,min:64,sliderMax:1536,inputMax:4096,fineStep:8,coarseStep:64},steps:{initial:30,min:1,sliderMax:100,inputMax:500,fineStep:1,coarseStep:1},guidance:{initial:7,min:1,sliderMax:20,inputMax:200,fineStep:.1,coarseStep:.5},img2imgStrength:{initial:.7,min:0,sliderMax:1,inputMax:1,fineStep:.01,coarseStep:.05},hrfStrength:{initial:.45,min:0,sliderMax:1,inputMax:1,fineStep:.01,coarseStep:.05},dynamicPrompts:{maxPrompts:{initial:100,min:1,sliderMax:1e3,inputMax:1e4}}}},OD=jt({name:"config",initialState:RD,reducers:{configChanged:(e,t)=>{Id(e,t.payload)}}}),{configChanged:qse}=OD.actions,Kse=OD.reducer;let z0;const Xse=new Uint8Array(16);function Qse(){if(!z0&&(z0=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!z0))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return z0(Xse)}const Qn=[];for(let e=0;e<256;++e)Qn.push((e+256).toString(16).slice(1));function Yse(e,t=0){return Qn[e[t+0]]+Qn[e[t+1]]+Qn[e[t+2]]+Qn[e[t+3]]+"-"+Qn[e[t+4]]+Qn[e[t+5]]+"-"+Qn[e[t+6]]+Qn[e[t+7]]+"-"+Qn[e[t+8]]+Qn[e[t+9]]+"-"+Qn[e[t+10]]+Qn[e[t+11]]+Qn[e[t+12]]+Qn[e[t+13]]+Qn[e[t+14]]+Qn[e[t+15]]}const Zse=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),J6={randomUUID:Zse};function ul(e,t,n){if(J6.randomUUID&&!t&&!e)return J6.randomUUID();e=e||{};const r=e.random||(e.rng||Qse)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){n=n||0;for(let i=0;i<16;++i)t[n+i]=r[i];return t}return Yse(r)}const hc={none:{type:"none",get label(){return Oe.t("controlnet.none")},get description(){return Oe.t("controlnet.noneDescription")},default:{type:"none"}},canny_image_processor:{type:"canny_image_processor",get label(){return Oe.t("controlnet.canny")},get description(){return Oe.t("controlnet.cannyDescription")},default:{id:"canny_image_processor",type:"canny_image_processor",low_threshold:100,high_threshold:200}},color_map_image_processor:{type:"color_map_image_processor",get label(){return Oe.t("controlnet.colorMap")},get description(){return Oe.t("controlnet.colorMapDescription")},default:{id:"color_map_image_processor",type:"color_map_image_processor",color_map_tile_size:64}},content_shuffle_image_processor:{type:"content_shuffle_image_processor",get label(){return Oe.t("controlnet.contentShuffle")},get description(){return Oe.t("controlnet.contentShuffleDescription")},default:{id:"content_shuffle_image_processor",type:"content_shuffle_image_processor",detect_resolution:512,image_resolution:512,h:512,w:512,f:256}},hed_image_processor:{type:"hed_image_processor",get label(){return Oe.t("controlnet.hed")},get description(){return Oe.t("controlnet.hedDescription")},default:{id:"hed_image_processor",type:"hed_image_processor",detect_resolution:512,image_resolution:512,scribble:!1}},lineart_anime_image_processor:{type:"lineart_anime_image_processor",get label(){return Oe.t("controlnet.lineartAnime")},get description(){return Oe.t("controlnet.lineartAnimeDescription")},default:{id:"lineart_anime_image_processor",type:"lineart_anime_image_processor",detect_resolution:512,image_resolution:512}},lineart_image_processor:{type:"lineart_image_processor",get label(){return Oe.t("controlnet.lineart")},get description(){return Oe.t("controlnet.lineartDescription")},default:{id:"lineart_image_processor",type:"lineart_image_processor",detect_resolution:512,image_resolution:512,coarse:!1}},mediapipe_face_processor:{type:"mediapipe_face_processor",get label(){return Oe.t("controlnet.mediapipeFace")},get description(){return Oe.t("controlnet.mediapipeFaceDescription")},default:{id:"mediapipe_face_processor",type:"mediapipe_face_processor",max_faces:1,min_confidence:.5}},midas_depth_image_processor:{type:"midas_depth_image_processor",get label(){return Oe.t("controlnet.depthMidas")},get description(){return Oe.t("controlnet.depthMidasDescription")},default:{id:"midas_depth_image_processor",type:"midas_depth_image_processor",a_mult:2,bg_th:.1}},mlsd_image_processor:{type:"mlsd_image_processor",get label(){return Oe.t("controlnet.mlsd")},get description(){return Oe.t("controlnet.mlsdDescription")},default:{id:"mlsd_image_processor",type:"mlsd_image_processor",detect_resolution:512,image_resolution:512,thr_d:.1,thr_v:.1}},normalbae_image_processor:{type:"normalbae_image_processor",get label(){return Oe.t("controlnet.normalBae")},get description(){return Oe.t("controlnet.normalBaeDescription")},default:{id:"normalbae_image_processor",type:"normalbae_image_processor",detect_resolution:512,image_resolution:512}},openpose_image_processor:{type:"openpose_image_processor",get label(){return Oe.t("controlnet.openPose")},get description(){return Oe.t("controlnet.openPoseDescription")},default:{id:"openpose_image_processor",type:"openpose_image_processor",detect_resolution:512,image_resolution:512,hand_and_face:!1}},pidi_image_processor:{type:"pidi_image_processor",get label(){return Oe.t("controlnet.pidi")},get description(){return Oe.t("controlnet.pidiDescription")},default:{id:"pidi_image_processor",type:"pidi_image_processor",detect_resolution:512,image_resolution:512,scribble:!1,safe:!1}},zoe_depth_image_processor:{type:"zoe_depth_image_processor",get label(){return Oe.t("controlnet.depthZoe")},get description(){return Oe.t("controlnet.depthZoeDescription")},default:{id:"zoe_depth_image_processor",type:"zoe_depth_image_processor"}}},j0={canny:"canny_image_processor",mlsd:"mlsd_image_processor",depth:"midas_depth_image_processor",bae:"normalbae_image_processor",sketch:"pidi_image_processor",scribble:"lineart_image_processor",lineart:"lineart_image_processor",lineart_anime:"lineart_anime_image_processor",softedge:"hed_image_processor",shuffle:"content_shuffle_image_processor",openpose:"openpose_image_processor",mediapipe:"mediapipe_face_processor",pidi:"pidi_image_processor",zoe:"zoe_depth_image_processor",color:"color_map_image_processor"},Jse={type:"controlnet",isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,controlMode:"balanced",resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:hc.canny_image_processor.default,shouldAutoConfig:!0},eae={type:"t2i_adapter",isEnabled:!0,model:null,weight:1,beginStepPct:0,endStepPct:1,resizeMode:"just_resize",controlImage:null,processedControlImage:null,processorType:"canny_image_processor",processorNode:hc.canny_image_processor.default,shouldAutoConfig:!0},tae={type:"ip_adapter",isEnabled:!0,controlImage:null,model:null,weight:1,beginStepPct:0,endStepPct:1},eI=(e,t,n={})=>{switch(t){case"controlnet":return Id(Ge(Jse),{id:e,...n});case"t2i_adapter":return Id(Ge(eae),{id:e,...n});case"ip_adapter":return Id(Ge(tae),{id:e,...n});default:throw new Error(`Unknown control adapter type: ${t}`)}},q4=he("controlAdapters/imageProcessed"),h_=e=>e.type==="controlnet",$D=e=>e.type==="ip_adapter",K4=e=>e.type==="t2i_adapter",hi=e=>h_(e)||K4(e),an=jo({selectId:e=>e.id}),{selectById:li,selectAll:As,selectEntities:Cze,selectIds:Eze,selectTotal:Tze}=an.getSelectors(),D5=an.getInitialState({pendingControlImages:[]}),nae=e=>As(e).filter(h_),rae=e=>As(e).filter(h_).filter(t=>t.isEnabled&&t.model&&(!!t.processedControlImage||t.processorType==="none"&&!!t.controlImage)),iae=e=>As(e).filter($D),oae=e=>As(e).filter($D).filter(t=>t.isEnabled&&t.model&&!!t.controlImage),sae=e=>As(e).filter(K4),aae=e=>As(e).filter(K4).filter(t=>t.isEnabled&&t.model&&(!!t.processedControlImage||t.processorType==="none"&&!!t.controlImage)),ND=jt({name:"controlAdapters",initialState:D5,reducers:{controlAdapterAdded:{reducer:(e,t)=>{const{id:n,type:r,overrides:i}=t.payload;an.addOne(e,eI(n,r,i))},prepare:({type:e,overrides:t})=>({payload:{id:ul(),type:e,overrides:t}})},controlAdapterRecalled:(e,t)=>{an.addOne(e,t.payload)},controlAdapterDuplicated:{reducer:(e,t)=>{const{id:n,newId:r}=t.payload,i=li(e,n);if(!i)return;const o=Id(Ge(i),{id:r,isEnabled:!0});an.addOne(e,o)},prepare:e=>({payload:{id:e,newId:ul()}})},controlAdapterAddedFromImage:{reducer:(e,t)=>{const{id:n,type:r,controlImage:i}=t.payload;an.addOne(e,eI(n,r,{controlImage:i}))},prepare:e=>({payload:{...e,id:ul()}})},controlAdapterRemoved:(e,t)=>{an.removeOne(e,t.payload.id)},controlAdapterIsEnabledChanged:(e,t)=>{const{id:n,isEnabled:r}=t.payload;an.updateOne(e,{id:n,changes:{isEnabled:r}})},controlAdapterImageChanged:(e,t)=>{const{id:n,controlImage:r}=t.payload,i=li(e,n);i&&(an.updateOne(e,{id:n,changes:{controlImage:r,processedControlImage:null}}),r!==null&&hi(i)&&i.processorType!=="none"&&e.pendingControlImages.push(n))},controlAdapterProcessedImageChanged:(e,t)=>{const{id:n,processedControlImage:r}=t.payload,i=li(e,n);i&&hi(i)&&(an.updateOne(e,{id:n,changes:{processedControlImage:r}}),e.pendingControlImages=e.pendingControlImages.filter(o=>o!==n))},controlAdapterModelCleared:(e,t)=>{an.updateOne(e,{id:t.payload.id,changes:{model:null}})},controlAdapterModelChanged:(e,t)=>{const{id:n,model:r}=t.payload,i=li(e,n);if(!i)return;if(!hi(i)){an.updateOne(e,{id:n,changes:{model:r}});return}const o={id:n,changes:{model:r}};if(o.changes.processedControlImage=null,i.shouldAutoConfig){let s;for(const a in j0)if(r.model_name.includes(a)){s=j0[a];break}s?(o.changes.processorType=s,o.changes.processorNode=hc[s].default):(o.changes.processorType="none",o.changes.processorNode=hc.none.default)}an.updateOne(e,o)},controlAdapterWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload;an.updateOne(e,{id:n,changes:{weight:r}})},controlAdapterBeginStepPctChanged:(e,t)=>{const{id:n,beginStepPct:r}=t.payload;an.updateOne(e,{id:n,changes:{beginStepPct:r}})},controlAdapterEndStepPctChanged:(e,t)=>{const{id:n,endStepPct:r}=t.payload;an.updateOne(e,{id:n,changes:{endStepPct:r}})},controlAdapterControlModeChanged:(e,t)=>{const{id:n,controlMode:r}=t.payload,i=li(e,n);!i||!h_(i)||an.updateOne(e,{id:n,changes:{controlMode:r}})},controlAdapterResizeModeChanged:(e,t)=>{const{id:n,resizeMode:r}=t.payload,i=li(e,n);!i||!hi(i)||an.updateOne(e,{id:n,changes:{resizeMode:r}})},controlAdapterProcessorParamsChanged:(e,t)=>{const{id:n,params:r}=t.payload,i=li(e,n);if(!i||!hi(i)||!i.processorNode)return;const o=Id(Ge(i.processorNode),r);an.updateOne(e,{id:n,changes:{shouldAutoConfig:!1,processorNode:o}})},controlAdapterProcessortTypeChanged:(e,t)=>{const{id:n,processorType:r}=t.payload,i=li(e,n);if(!i||!hi(i))return;const o=Ge(hc[r].default);an.updateOne(e,{id:n,changes:{processorType:r,processedControlImage:null,processorNode:o,shouldAutoConfig:!1}})},controlAdapterAutoConfigToggled:(e,t)=>{var o;const{id:n}=t.payload,r=li(e,n);if(!r||!hi(r))return;const i={id:n,changes:{shouldAutoConfig:!r.shouldAutoConfig}};if(i.changes.shouldAutoConfig){let s;for(const a in j0)if((o=r.model)!=null&&o.model_name.includes(a)){s=j0[a];break}s?(i.changes.processorType=s,i.changes.processorNode=hc[s].default):(i.changes.processorType="none",i.changes.processorNode=hc.none.default)}an.updateOne(e,i)},controlAdaptersReset:()=>Ge(D5),pendingControlImagesCleared:e=>{e.pendingControlImages=[]}},extraReducers:e=>{e.addCase(q4,(t,n)=>{const r=li(t,n.payload.id);r&&r.controlImage!==null&&(t.pendingControlImages=Woe(t.pendingControlImages.concat(n.payload.id)))}),e.addCase(u_,t=>{t.pendingControlImages=[]})}}),{controlAdapterAdded:lae,controlAdapterRecalled:cae,controlAdapterDuplicated:Aze,controlAdapterAddedFromImage:uae,controlAdapterRemoved:kze,controlAdapterImageChanged:Nl,controlAdapterProcessedImageChanged:X4,controlAdapterIsEnabledChanged:Q4,controlAdapterModelChanged:tI,controlAdapterWeightChanged:Pze,controlAdapterBeginStepPctChanged:Ize,controlAdapterEndStepPctChanged:Mze,controlAdapterControlModeChanged:Rze,controlAdapterResizeModeChanged:Oze,controlAdapterProcessorParamsChanged:dae,controlAdapterProcessortTypeChanged:fae,controlAdaptersReset:hae,controlAdapterAutoConfigToggled:nI,pendingControlImagesCleared:pae,controlAdapterModelCleared:Wx}=ND.actions,gae=ND.reducer,mae=br(lae,uae,cae),$ze={any:"Any","sd-1":"Stable Diffusion 1.x","sd-2":"Stable Diffusion 2.x",sdxl:"Stable Diffusion XL","sdxl-refiner":"Stable Diffusion XL Refiner"},Nze={any:"Any","sd-1":"SD1","sd-2":"SD2",sdxl:"SDXL","sdxl-refiner":"SDXLR"},yae={any:{maxClip:0,markers:[]},"sd-1":{maxClip:12,markers:[0,1,2,3,4,8,12]},"sd-2":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},sdxl:{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]},"sdxl-refiner":{maxClip:24,markers:[0,1,2,3,5,10,15,20,24]}},Fze={lycoris:"LyCORIS",diffusers:"Diffusers"},Dze={euler:"Euler",deis:"DEIS",ddim:"DDIM",ddpm:"DDPM",dpmpp_sde:"DPM++ SDE",dpmpp_2s:"DPM++ 2S",dpmpp_2m:"DPM++ 2M",dpmpp_2m_sde:"DPM++ 2M SDE",heun:"Heun",kdpm_2:"KDPM 2",lms:"LMS",pndm:"PNDM",unipc:"UniPC",euler_k:"Euler Karras",dpmpp_sde_k:"DPM++ SDE Karras",dpmpp_2s_k:"DPM++ 2S Karras",dpmpp_2m_k:"DPM++ 2M Karras",dpmpp_2m_sde_k:"DPM++ 2M SDE Karras",heun_k:"Heun Karras",lms_k:"LMS Karras",euler_a:"Euler Ancestral",kdpm_2_a:"KDPM 2 Ancestral",lcm:"LCM"},vae=0,mp=4294967295;var st;(function(e){e.assertEqual=i=>i;function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{const o={};for(const s of i)o[s]=s;return o},e.getValidEnumValues=i=>{const o=e.objectKeys(i).filter(a=>typeof i[i[a]]!="number"),s={};for(const a of o)s[a]=i[a];return e.objectValues(s)},e.objectValues=i=>e.objectKeys(i).map(function(o){return i[o]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const o=[];for(const s in i)Object.prototype.hasOwnProperty.call(i,s)&&o.push(s);return o},e.find=(i,o)=>{for(const s of i)if(o(s))return s},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&isFinite(i)&&Math.floor(i)===i;function r(i,o=" | "){return i.map(s=>typeof s=="string"?`'${s}'`:s).join(o)}e.joinValues=r,e.jsonStringifyReplacer=(i,o)=>typeof o=="bigint"?o.toString():o})(st||(st={}));var L5;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(L5||(L5={}));const de=st.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Wa=e=>{switch(typeof e){case"undefined":return de.undefined;case"string":return de.string;case"number":return isNaN(e)?de.nan:de.number;case"boolean":return de.boolean;case"function":return de.function;case"bigint":return de.bigint;case"symbol":return de.symbol;case"object":return Array.isArray(e)?de.array:e===null?de.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?de.promise:typeof Map<"u"&&e instanceof Map?de.map:typeof Set<"u"&&e instanceof Set?de.set:typeof Date<"u"&&e instanceof Date?de.date:de.object;default:return de.unknown}},re=st.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),bae=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:");class Io extends Error{constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}get errors(){return this.issues}format(t){const n=t||function(o){return o.message},r={_errors:[]},i=o=>{for(const s of o.issues)if(s.code==="invalid_union")s.unionErrors.map(i);else if(s.code==="invalid_return_type")i(s.returnTypeError);else if(s.code==="invalid_arguments")i(s.argumentsError);else if(s.path.length===0)r._errors.push(n(s));else{let a=r,l=0;for(;ln.message){const n={},r=[];for(const i of this.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}Io.create=e=>new Io(e);const sg=(e,t)=>{let n;switch(e.code){case re.invalid_type:e.received===de.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case re.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,st.jsonStringifyReplacer)}`;break;case re.unrecognized_keys:n=`Unrecognized key(s) in object: ${st.joinValues(e.keys,", ")}`;break;case re.invalid_union:n="Invalid input";break;case re.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${st.joinValues(e.options)}`;break;case re.invalid_enum_value:n=`Invalid enum value. Expected ${st.joinValues(e.options)}, received '${e.received}'`;break;case re.invalid_arguments:n="Invalid function arguments";break;case re.invalid_return_type:n="Invalid function return type";break;case re.invalid_date:n="Invalid date";break;case re.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:st.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case re.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case re.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case re.custom:n="Invalid input";break;case re.invalid_intersection_types:n="Intersection results could not be merged";break;case re.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case re.not_finite:n="Number must be finite";break;default:n=t.defaultError,st.assertNever(e)}return{message:n}};let FD=sg;function _ae(e){FD=e}function m1(){return FD}const y1=e=>{const{data:t,path:n,errorMaps:r,issueData:i}=e,o=[...n,...i.path||[]],s={...i,path:o};let a="";const l=r.filter(c=>!!c).slice().reverse();for(const c of l)a=c(s,{data:t,defaultError:a}).message;return{...i,path:o,message:i.message||a}},Sae=[];function ge(e,t){const n=y1({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,m1(),sg].filter(r=>!!r)});e.common.issues.push(n)}class Sr{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const i of n){if(i.status==="aborted")return Ne;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const i of n)r.push({key:await i.key,value:await i.value});return Sr.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const i of n){const{key:o,value:s}=i;if(o.status==="aborted"||s.status==="aborted")return Ne;o.status==="dirty"&&t.dirty(),s.status==="dirty"&&t.dirty(),o.value!=="__proto__"&&(typeof s.value<"u"||i.alwaysSet)&&(r[o.value]=s.value)}return{status:t.value,value:r}}}const Ne=Object.freeze({status:"aborted"}),DD=e=>({status:"dirty",value:e}),Dr=e=>({status:"valid",value:e}),B5=e=>e.status==="aborted",z5=e=>e.status==="dirty",ag=e=>e.status==="valid",v1=e=>typeof Promise<"u"&&e instanceof Promise;var ke;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(ke||(ke={}));class xs{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const rI=(e,t)=>{if(ag(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new Io(e.common.issues);return this._error=n,this._error}}};function Fe(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(s,a)=>s.code!=="invalid_type"?{message:a.defaultError}:typeof a.data>"u"?{message:r??a.defaultError}:{message:n??a.defaultError},description:i}}class De{constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(t){return Wa(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:Wa(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Sr,ctx:{common:t.parent.common,data:t.data,parsedType:Wa(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(v1(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){var r;const i={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wa(t)},o=this._parseSync({data:t,path:i.path,parent:i});return rI(i,o)}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wa(t)},i=this._parse({data:t,path:r.path,parent:r}),o=await(v1(i)?i:Promise.resolve(i));return rI(r,o)}refine(t,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,o)=>{const s=t(i),a=()=>o.addIssue({code:re.custom,...r(i)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(a(),!1)):s?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new Do({schema:this,typeName:Ie.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}optional(){return ea.create(this,this._def)}nullable(){return eu.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Mo.create(this,this._def)}promise(){return uf.create(this,this._def)}or(t){return dg.create([this,t],this._def)}and(t){return fg.create(this,t,this._def)}transform(t){return new Do({...Fe(this._def),schema:this,typeName:Ie.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new yg({...Fe(this._def),innerType:this,defaultValue:n,typeName:Ie.ZodDefault})}brand(){return new BD({typeName:Ie.ZodBranded,type:this,...Fe(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new x1({...Fe(this._def),innerType:this,catchValue:n,typeName:Ie.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return gm.create(this,t)}readonly(){return C1.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const xae=/^c[^\s-]{8,}$/i,wae=/^[a-z][a-z0-9]*$/,Cae=/^[0-9A-HJKMNP-TV-Z]{26}$/,Eae=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Tae=/^(?!\.)(?!.*\.\.)([A-Z0-9_+-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Aae="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let qx;const kae=/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,Pae=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,Iae=e=>e.precision?e.offset?new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`):new RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${e.precision}}Z$`):e.precision===0?e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"):e.offset?new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"):new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$");function Mae(e,t){return!!((t==="v4"||!t)&&kae.test(e)||(t==="v6"||!t)&&Pae.test(e))}class To extends De{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==de.string){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.string,received:o.parsedType}),Ne}const r=new Sr;let i;for(const o of this._def.checks)if(o.kind==="min")t.data.lengtho.value&&(i=this._getOrReturnCtx(t,i),ge(i,{code:re.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),r.dirty());else if(o.kind==="length"){const s=t.data.length>o.value,a=t.data.lengtht.test(i),{validation:n,code:re.invalid_string,...ke.errToObj(r)})}_addCheck(t){return new To({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...ke.errToObj(t)})}url(t){return this._addCheck({kind:"url",...ke.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...ke.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...ke.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...ke.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...ke.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...ke.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...ke.errToObj(t)})}datetime(t){var n;return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(n=t==null?void 0:t.offset)!==null&&n!==void 0?n:!1,...ke.errToObj(t==null?void 0:t.message)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...ke.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...ke.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...ke.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...ke.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...ke.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...ke.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...ke.errToObj(n)})}nonempty(t){return this.min(1,ke.errToObj(t))}trim(){return new To({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new To({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new To({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new To({checks:[],typeName:Ie.ZodString,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...Fe(e)})};function Rae(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,o=parseInt(e.toFixed(i).replace(".","")),s=parseInt(t.toFixed(i).replace(".",""));return o%s/Math.pow(10,i)}class Sl extends De{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==de.number){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.number,received:o.parsedType}),Ne}let r;const i=new Sr;for(const o of this._def.checks)o.kind==="int"?st.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),ge(r,{code:re.invalid_type,expected:"integer",received:"float",message:o.message}),i.dirty()):o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:!1,message:o.message}),i.dirty()):o.kind==="multipleOf"?Rae(t.data,o.value)!==0&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):o.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_finite,message:o.message}),i.dirty()):st.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ke.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ke.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ke.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ke.toString(n))}setLimit(t,n,r,i){return new Sl({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ke.toString(i)}]})}_addCheck(t){return new Sl({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:ke.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:ke.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:ke.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:ke.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:ke.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ke.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:ke.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:ke.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:ke.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&st.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.valuenew Sl({checks:[],typeName:Ie.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class xl extends De{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce&&(t.data=BigInt(t.data)),this._getType(t)!==de.bigint){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.bigint,received:o.parsedType}),Ne}let r;const i=new Sr;for(const o of this._def.checks)o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),i.dirty()):o.kind==="multipleOf"?t.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),ge(r,{code:re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):st.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,ke.toString(n))}gt(t,n){return this.setLimit("min",t,!1,ke.toString(n))}lte(t,n){return this.setLimit("max",t,!0,ke.toString(n))}lt(t,n){return this.setLimit("max",t,!1,ke.toString(n))}setLimit(t,n,r,i){return new xl({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:ke.toString(i)}]})}_addCheck(t){return new xl({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:ke.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:ke.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:ke.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:ke.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:ke.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.value{var t;return new xl({checks:[],typeName:Ie.ZodBigInt,coerce:(t=e==null?void 0:e.coerce)!==null&&t!==void 0?t:!1,...Fe(e)})};class lg extends De{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==de.boolean){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.boolean,received:r.parsedType}),Ne}return Dr(t.data)}}lg.create=e=>new lg({typeName:Ie.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...Fe(e)});class Zc extends De{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==de.date){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_type,expected:de.date,received:o.parsedType}),Ne}if(isNaN(t.data.getTime())){const o=this._getOrReturnCtx(t);return ge(o,{code:re.invalid_date}),Ne}const r=new Sr;let i;for(const o of this._def.checks)o.kind==="min"?t.data.getTime()o.value&&(i=this._getOrReturnCtx(t,i),ge(i,{code:re.too_big,message:o.message,inclusive:!0,exact:!1,maximum:o.value,type:"date"}),r.dirty()):st.assertNever(o);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new Zc({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:ke.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:ke.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Zc({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:Ie.ZodDate,...Fe(e)});class b1 extends De{_parse(t){if(this._getType(t)!==de.symbol){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.symbol,received:r.parsedType}),Ne}return Dr(t.data)}}b1.create=e=>new b1({typeName:Ie.ZodSymbol,...Fe(e)});class cg extends De{_parse(t){if(this._getType(t)!==de.undefined){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.undefined,received:r.parsedType}),Ne}return Dr(t.data)}}cg.create=e=>new cg({typeName:Ie.ZodUndefined,...Fe(e)});class ug extends De{_parse(t){if(this._getType(t)!==de.null){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.null,received:r.parsedType}),Ne}return Dr(t.data)}}ug.create=e=>new ug({typeName:Ie.ZodNull,...Fe(e)});class cf extends De{constructor(){super(...arguments),this._any=!0}_parse(t){return Dr(t.data)}}cf.create=e=>new cf({typeName:Ie.ZodAny,...Fe(e)});class Oc extends De{constructor(){super(...arguments),this._unknown=!0}_parse(t){return Dr(t.data)}}Oc.create=e=>new Oc({typeName:Ie.ZodUnknown,...Fe(e)});class ua extends De{_parse(t){const n=this._getOrReturnCtx(t);return ge(n,{code:re.invalid_type,expected:de.never,received:n.parsedType}),Ne}}ua.create=e=>new ua({typeName:Ie.ZodNever,...Fe(e)});class _1 extends De{_parse(t){if(this._getType(t)!==de.undefined){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.void,received:r.parsedType}),Ne}return Dr(t.data)}}_1.create=e=>new _1({typeName:Ie.ZodVoid,...Fe(e)});class Mo extends De{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==de.array)return ge(n,{code:re.invalid_type,expected:de.array,received:n.parsedType}),Ne;if(i.exactLength!==null){const s=n.data.length>i.exactLength.value,a=n.data.lengthi.maxLength.value&&(ge(n,{code:re.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((s,a)=>i.type._parseAsync(new xs(n,s,n.path,a)))).then(s=>Sr.mergeArray(r,s));const o=[...n.data].map((s,a)=>i.type._parseSync(new xs(n,s,n.path,a)));return Sr.mergeArray(r,o)}get element(){return this._def.type}min(t,n){return new Mo({...this._def,minLength:{value:t,message:ke.toString(n)}})}max(t,n){return new Mo({...this._def,maxLength:{value:t,message:ke.toString(n)}})}length(t,n){return new Mo({...this._def,exactLength:{value:t,message:ke.toString(n)}})}nonempty(t){return this.min(1,t)}}Mo.create=(e,t)=>new Mo({type:e,minLength:null,maxLength:null,exactLength:null,typeName:Ie.ZodArray,...Fe(t)});function Wu(e){if(e instanceof Gt){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=ea.create(Wu(r))}return new Gt({...e._def,shape:()=>t})}else return e instanceof Mo?new Mo({...e._def,type:Wu(e.element)}):e instanceof ea?ea.create(Wu(e.unwrap())):e instanceof eu?eu.create(Wu(e.unwrap())):e instanceof ws?ws.create(e.items.map(t=>Wu(t))):e}class Gt extends De{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=st.objectKeys(t);return this._cached={shape:t,keys:n}}_parse(t){if(this._getType(t)!==de.object){const c=this._getOrReturnCtx(t);return ge(c,{code:re.invalid_type,expected:de.object,received:c.parsedType}),Ne}const{status:r,ctx:i}=this._processInputParams(t),{shape:o,keys:s}=this._getCached(),a=[];if(!(this._def.catchall instanceof ua&&this._def.unknownKeys==="strip"))for(const c in i.data)s.includes(c)||a.push(c);const l=[];for(const c of s){const u=o[c],d=i.data[c];l.push({key:{status:"valid",value:c},value:u._parse(new xs(i,d,i.path,c)),alwaysSet:c in i.data})}if(this._def.catchall instanceof ua){const c=this._def.unknownKeys;if(c==="passthrough")for(const u of a)l.push({key:{status:"valid",value:u},value:{status:"valid",value:i.data[u]}});else if(c==="strict")a.length>0&&(ge(i,{code:re.unrecognized_keys,keys:a}),r.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const u of a){const d=i.data[u];l.push({key:{status:"valid",value:u},value:c._parse(new xs(i,d,i.path,u)),alwaysSet:u in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const c=[];for(const u of l){const d=await u.key;c.push({key:d,value:await u.value,alwaysSet:u.alwaysSet})}return c}).then(c=>Sr.mergeObjectSync(r,c)):Sr.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(t){return ke.errToObj,new Gt({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{var i,o,s,a;const l=(s=(o=(i=this._def).errorMap)===null||o===void 0?void 0:o.call(i,n,r).message)!==null&&s!==void 0?s:r.defaultError;return n.code==="unrecognized_keys"?{message:(a=ke.errToObj(t).message)!==null&&a!==void 0?a:l}:{message:l}}}:{}})}strip(){return new Gt({...this._def,unknownKeys:"strip"})}passthrough(){return new Gt({...this._def,unknownKeys:"passthrough"})}extend(t){return new Gt({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new Gt({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:Ie.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new Gt({...this._def,catchall:t})}pick(t){const n={};return st.objectKeys(t).forEach(r=>{t[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new Gt({...this._def,shape:()=>n})}omit(t){const n={};return st.objectKeys(this.shape).forEach(r=>{t[r]||(n[r]=this.shape[r])}),new Gt({...this._def,shape:()=>n})}deepPartial(){return Wu(this)}partial(t){const n={};return st.objectKeys(this.shape).forEach(r=>{const i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}),new Gt({...this._def,shape:()=>n})}required(t){const n={};return st.objectKeys(this.shape).forEach(r=>{if(t&&!t[r])n[r]=this.shape[r];else{let o=this.shape[r];for(;o instanceof ea;)o=o._def.innerType;n[r]=o}}),new Gt({...this._def,shape:()=>n})}keyof(){return LD(st.objectKeys(this.shape))}}Gt.create=(e,t)=>new Gt({shape:()=>e,unknownKeys:"strip",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});Gt.strictCreate=(e,t)=>new Gt({shape:()=>e,unknownKeys:"strict",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});Gt.lazycreate=(e,t)=>new Gt({shape:e,unknownKeys:"strip",catchall:ua.create(),typeName:Ie.ZodObject,...Fe(t)});class dg extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function i(o){for(const a of o)if(a.result.status==="valid")return a.result;for(const a of o)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;const s=o.map(a=>new Io(a.ctx.common.issues));return ge(n,{code:re.invalid_union,unionErrors:s}),Ne}if(n.common.async)return Promise.all(r.map(async o=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await o._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(i);{let o;const s=[];for(const l of r){const c={...n,common:{...n.common,issues:[]},parent:null},u=l._parseSync({data:n.data,path:n.path,parent:c});if(u.status==="valid")return u;u.status==="dirty"&&!o&&(o={result:u,ctx:c}),c.common.issues.length&&s.push(c.common.issues)}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;const a=s.map(l=>new Io(l));return ge(n,{code:re.invalid_union,unionErrors:a}),Ne}}get options(){return this._def.options}}dg.create=(e,t)=>new dg({options:e,typeName:Ie.ZodUnion,...Fe(t)});const Zy=e=>e instanceof pg?Zy(e.schema):e instanceof Do?Zy(e.innerType()):e instanceof gg?[e.value]:e instanceof wl?e.options:e instanceof mg?Object.keys(e.enum):e instanceof yg?Zy(e._def.innerType):e instanceof cg?[void 0]:e instanceof ug?[null]:null;class p_ extends De{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.object)return ge(n,{code:re.invalid_type,expected:de.object,received:n.parsedType}),Ne;const r=this.discriminator,i=n.data[r],o=this.optionsMap.get(i);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(ge(n,{code:re.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),Ne)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){const i=new Map;for(const o of n){const s=Zy(o.shape[t]);if(!s)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const a of s){if(i.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);i.set(a,o)}}return new p_({typeName:Ie.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Fe(r)})}}function j5(e,t){const n=Wa(e),r=Wa(t);if(e===t)return{valid:!0,data:e};if(n===de.object&&r===de.object){const i=st.objectKeys(t),o=st.objectKeys(e).filter(a=>i.indexOf(a)!==-1),s={...e,...t};for(const a of o){const l=j5(e[a],t[a]);if(!l.valid)return{valid:!1};s[a]=l.data}return{valid:!0,data:s}}else if(n===de.array&&r===de.array){if(e.length!==t.length)return{valid:!1};const i=[];for(let o=0;o{if(B5(o)||B5(s))return Ne;const a=j5(o.value,s.value);return a.valid?((z5(o)||z5(s))&&n.dirty(),{status:n.value,value:a.data}):(ge(r,{code:re.invalid_intersection_types}),Ne)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,s])=>i(o,s)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}fg.create=(e,t,n)=>new fg({left:e,right:t,typeName:Ie.ZodIntersection,...Fe(n)});class ws extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.array)return ge(r,{code:re.invalid_type,expected:de.array,received:r.parsedType}),Ne;if(r.data.lengththis._def.items.length&&(ge(r,{code:re.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const o=[...r.data].map((s,a)=>{const l=this._def.items[a]||this._def.rest;return l?l._parse(new xs(r,s,r.path,a)):null}).filter(s=>!!s);return r.common.async?Promise.all(o).then(s=>Sr.mergeArray(n,s)):Sr.mergeArray(n,o)}get items(){return this._def.items}rest(t){return new ws({...this._def,rest:t})}}ws.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ws({items:e,typeName:Ie.ZodTuple,rest:null,...Fe(t)})};class hg extends De{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.object)return ge(r,{code:re.invalid_type,expected:de.object,received:r.parsedType}),Ne;const i=[],o=this._def.keyType,s=this._def.valueType;for(const a in r.data)i.push({key:o._parse(new xs(r,a,r.path,a)),value:s._parse(new xs(r,r.data[a],r.path,a))});return r.common.async?Sr.mergeObjectAsync(n,i):Sr.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof De?new hg({keyType:t,valueType:n,typeName:Ie.ZodRecord,...Fe(r)}):new hg({keyType:To.create(),valueType:t,typeName:Ie.ZodRecord,...Fe(n)})}}class S1 extends De{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.map)return ge(r,{code:re.invalid_type,expected:de.map,received:r.parsedType}),Ne;const i=this._def.keyType,o=this._def.valueType,s=[...r.data.entries()].map(([a,l],c)=>({key:i._parse(new xs(r,a,r.path,[c,"key"])),value:o._parse(new xs(r,l,r.path,[c,"value"]))}));if(r.common.async){const a=new Map;return Promise.resolve().then(async()=>{for(const l of s){const c=await l.key,u=await l.value;if(c.status==="aborted"||u.status==="aborted")return Ne;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(c.value,u.value)}return{status:n.value,value:a}})}else{const a=new Map;for(const l of s){const c=l.key,u=l.value;if(c.status==="aborted"||u.status==="aborted")return Ne;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(c.value,u.value)}return{status:n.value,value:a}}}}S1.create=(e,t,n)=>new S1({valueType:t,keyType:e,typeName:Ie.ZodMap,...Fe(n)});class Jc extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==de.set)return ge(r,{code:re.invalid_type,expected:de.set,received:r.parsedType}),Ne;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(ge(r,{code:re.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const o=this._def.valueType;function s(l){const c=new Set;for(const u of l){if(u.status==="aborted")return Ne;u.status==="dirty"&&n.dirty(),c.add(u.value)}return{status:n.value,value:c}}const a=[...r.data.values()].map((l,c)=>o._parse(new xs(r,l,r.path,c)));return r.common.async?Promise.all(a).then(l=>s(l)):s(a)}min(t,n){return new Jc({...this._def,minSize:{value:t,message:ke.toString(n)}})}max(t,n){return new Jc({...this._def,maxSize:{value:t,message:ke.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}Jc.create=(e,t)=>new Jc({valueType:e,minSize:null,maxSize:null,typeName:Ie.ZodSet,...Fe(t)});class Rd extends De{constructor(){super(...arguments),this.validate=this.implement}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.function)return ge(n,{code:re.invalid_type,expected:de.function,received:n.parsedType}),Ne;function r(a,l){return y1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,m1(),sg].filter(c=>!!c),issueData:{code:re.invalid_arguments,argumentsError:l}})}function i(a,l){return y1({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,m1(),sg].filter(c=>!!c),issueData:{code:re.invalid_return_type,returnTypeError:l}})}const o={errorMap:n.common.contextualErrorMap},s=n.data;if(this._def.returns instanceof uf){const a=this;return Dr(async function(...l){const c=new Io([]),u=await a._def.args.parseAsync(l,o).catch(h=>{throw c.addIssue(r(l,h)),c}),d=await Reflect.apply(s,this,u);return await a._def.returns._def.type.parseAsync(d,o).catch(h=>{throw c.addIssue(i(d,h)),c})})}else{const a=this;return Dr(function(...l){const c=a._def.args.safeParse(l,o);if(!c.success)throw new Io([r(l,c.error)]);const u=Reflect.apply(s,this,c.data),d=a._def.returns.safeParse(u,o);if(!d.success)throw new Io([i(u,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new Rd({...this._def,args:ws.create(t).rest(Oc.create())})}returns(t){return new Rd({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new Rd({args:t||ws.create([]).rest(Oc.create()),returns:n||Oc.create(),typeName:Ie.ZodFunction,...Fe(r)})}}class pg extends De{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}pg.create=(e,t)=>new pg({getter:e,typeName:Ie.ZodLazy,...Fe(t)});class gg extends De{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return ge(n,{received:n.data,code:re.invalid_literal,expected:this._def.value}),Ne}return{status:"valid",value:t.data}}get value(){return this._def.value}}gg.create=(e,t)=>new gg({value:e,typeName:Ie.ZodLiteral,...Fe(t)});function LD(e,t){return new wl({values:e,typeName:Ie.ZodEnum,...Fe(t)})}class wl extends De{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return ge(n,{expected:st.joinValues(r),received:n.parsedType,code:re.invalid_type}),Ne}if(this._def.values.indexOf(t.data)===-1){const n=this._getOrReturnCtx(t),r=this._def.values;return ge(n,{received:n.data,code:re.invalid_enum_value,options:r}),Ne}return Dr(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t){return wl.create(t)}exclude(t){return wl.create(this.options.filter(n=>!t.includes(n)))}}wl.create=LD;class mg extends De{_parse(t){const n=st.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==de.string&&r.parsedType!==de.number){const i=st.objectValues(n);return ge(r,{expected:st.joinValues(i),received:r.parsedType,code:re.invalid_type}),Ne}if(n.indexOf(t.data)===-1){const i=st.objectValues(n);return ge(r,{received:r.data,code:re.invalid_enum_value,options:i}),Ne}return Dr(t.data)}get enum(){return this._def.values}}mg.create=(e,t)=>new mg({values:e,typeName:Ie.ZodNativeEnum,...Fe(t)});class uf extends De{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==de.promise&&n.common.async===!1)return ge(n,{code:re.invalid_type,expected:de.promise,received:n.parsedType}),Ne;const r=n.parsedType===de.promise?n.data:Promise.resolve(n.data);return Dr(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}uf.create=(e,t)=>new uf({type:e,typeName:Ie.ZodPromise,...Fe(t)});class Do extends De{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Ie.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null,o={addIssue:s=>{ge(r,s),s.fatal?n.abort():n.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),i.type==="preprocess"){const s=i.transform(r.data,o);return r.common.issues.length?{status:"dirty",value:r.data}:r.common.async?Promise.resolve(s).then(a=>this._def.schema._parseAsync({data:a,path:r.path,parent:r})):this._def.schema._parseSync({data:s,path:r.path,parent:r})}if(i.type==="refinement"){const s=a=>{const l=i.refinement(a,o);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?Ne:(a.status==="dirty"&&n.dirty(),s(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?Ne:(a.status==="dirty"&&n.dirty(),s(a.value).then(()=>({status:n.value,value:a.value}))))}if(i.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!ag(s))return s;const a=i.transform(s.value,o);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>ag(s)?Promise.resolve(i.transform(s.value,o)).then(a=>({status:n.value,value:a})):s);st.assertNever(i)}}Do.create=(e,t,n)=>new Do({schema:e,typeName:Ie.ZodEffects,effect:t,...Fe(n)});Do.createWithPreprocess=(e,t,n)=>new Do({schema:t,effect:{type:"preprocess",transform:e},typeName:Ie.ZodEffects,...Fe(n)});class ea extends De{_parse(t){return this._getType(t)===de.undefined?Dr(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}ea.create=(e,t)=>new ea({innerType:e,typeName:Ie.ZodOptional,...Fe(t)});class eu extends De{_parse(t){return this._getType(t)===de.null?Dr(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}eu.create=(e,t)=>new eu({innerType:e,typeName:Ie.ZodNullable,...Fe(t)});class yg extends De{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===de.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}yg.create=(e,t)=>new yg({innerType:e,typeName:Ie.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...Fe(t)});class x1 extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return v1(i)?i.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new Io(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Io(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}x1.create=(e,t)=>new x1({innerType:e,typeName:Ie.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...Fe(t)});class w1 extends De{_parse(t){if(this._getType(t)!==de.nan){const r=this._getOrReturnCtx(t);return ge(r,{code:re.invalid_type,expected:de.nan,received:r.parsedType}),Ne}return{status:"valid",value:t.data}}}w1.create=e=>new w1({typeName:Ie.ZodNaN,...Fe(e)});const Oae=Symbol("zod_brand");class BD extends De{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class gm extends De{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?Ne:o.status==="dirty"?(n.dirty(),DD(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?Ne:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new gm({in:t,out:n,typeName:Ie.ZodPipeline})}}class C1 extends De{_parse(t){const n=this._def.innerType._parse(t);return ag(n)&&(n.value=Object.freeze(n.value)),n}}C1.create=(e,t)=>new C1({innerType:e,typeName:Ie.ZodReadonly,...Fe(t)});const zD=(e,t={},n)=>e?cf.create().superRefine((r,i)=>{var o,s;if(!e(r)){const a=typeof t=="function"?t(r):typeof t=="string"?{message:t}:t,l=(s=(o=a.fatal)!==null&&o!==void 0?o:n)!==null&&s!==void 0?s:!0,c=typeof a=="string"?{message:a}:a;i.addIssue({code:"custom",...c,fatal:l})}}):cf.create(),$ae={object:Gt.lazycreate};var Ie;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(Ie||(Ie={}));const Nae=(e,t={message:`Input not instance of ${e.name}`})=>zD(n=>n instanceof e,t),jD=To.create,VD=Sl.create,Fae=w1.create,Dae=xl.create,UD=lg.create,Lae=Zc.create,Bae=b1.create,zae=cg.create,jae=ug.create,Vae=cf.create,Uae=Oc.create,Gae=ua.create,Hae=_1.create,Wae=Mo.create,qae=Gt.create,Kae=Gt.strictCreate,Xae=dg.create,Qae=p_.create,Yae=fg.create,Zae=ws.create,Jae=hg.create,ele=S1.create,tle=Jc.create,nle=Rd.create,rle=pg.create,ile=gg.create,ole=wl.create,sle=mg.create,ale=uf.create,iI=Do.create,lle=ea.create,cle=eu.create,ule=Do.createWithPreprocess,dle=gm.create,fle=()=>jD().optional(),hle=()=>VD().optional(),ple=()=>UD().optional(),gle={string:e=>To.create({...e,coerce:!0}),number:e=>Sl.create({...e,coerce:!0}),boolean:e=>lg.create({...e,coerce:!0}),bigint:e=>xl.create({...e,coerce:!0}),date:e=>Zc.create({...e,coerce:!0})},mle=Ne;var T=Object.freeze({__proto__:null,defaultErrorMap:sg,setErrorMap:_ae,getErrorMap:m1,makeIssue:y1,EMPTY_PATH:Sae,addIssueToContext:ge,ParseStatus:Sr,INVALID:Ne,DIRTY:DD,OK:Dr,isAborted:B5,isDirty:z5,isValid:ag,isAsync:v1,get util(){return st},get objectUtil(){return L5},ZodParsedType:de,getParsedType:Wa,ZodType:De,ZodString:To,ZodNumber:Sl,ZodBigInt:xl,ZodBoolean:lg,ZodDate:Zc,ZodSymbol:b1,ZodUndefined:cg,ZodNull:ug,ZodAny:cf,ZodUnknown:Oc,ZodNever:ua,ZodVoid:_1,ZodArray:Mo,ZodObject:Gt,ZodUnion:dg,ZodDiscriminatedUnion:p_,ZodIntersection:fg,ZodTuple:ws,ZodRecord:hg,ZodMap:S1,ZodSet:Jc,ZodFunction:Rd,ZodLazy:pg,ZodLiteral:gg,ZodEnum:wl,ZodNativeEnum:mg,ZodPromise:uf,ZodEffects:Do,ZodTransformer:Do,ZodOptional:ea,ZodNullable:eu,ZodDefault:yg,ZodCatch:x1,ZodNaN:w1,BRAND:Oae,ZodBranded:BD,ZodPipeline:gm,ZodReadonly:C1,custom:zD,Schema:De,ZodSchema:De,late:$ae,get ZodFirstPartyTypeKind(){return Ie},coerce:gle,any:Vae,array:Wae,bigint:Dae,boolean:UD,date:Lae,discriminatedUnion:Qae,effect:iI,enum:ole,function:nle,instanceof:Nae,intersection:Yae,lazy:rle,literal:ile,map:ele,nan:Fae,nativeEnum:sle,never:Gae,null:jae,nullable:cle,number:VD,object:qae,oboolean:ple,onumber:hle,optional:lle,ostring:fle,pipeline:dle,preprocess:ule,promise:ale,record:Jae,set:tle,strictObject:Kae,string:jD,symbol:Bae,transformer:iI,tuple:Zae,undefined:zae,union:Xae,unknown:Uae,void:Hae,NEVER:mle,ZodIssueCode:re,quotelessJson:bae,ZodError:Io});const mm=T.object({image_name:T.string().trim().min(1)}),yle=T.object({board_id:T.string().trim().min(1)}),vle=T.object({r:T.number().int().min(0).max(255),g:T.number().int().min(0).max(255),b:T.number().int().min(0).max(255),a:T.number().int().min(0).max(255)}),ble=T.enum(["stable","beta","prototype"]),GD=T.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a","lcm"]),Y4=T.enum(["any","sd-1","sd-2","sdxl","sdxl-refiner"]),_le=T.enum(["onnx","main","vae","lora","controlnet","embedding"]),Z4=T.string().trim().min(1),Nf=T.object({model_name:Z4,base_model:Y4}),HD=T.object({model_name:Z4,base_model:Y4,model_type:T.literal("main")}),WD=T.object({model_name:Z4,base_model:Y4,model_type:T.literal("onnx")}),qD=T.union([HD,WD]),KD=T.object({model_name:T.string().min(1),base_model:T.literal("sdxl-refiner"),model_type:T.literal("main")}),Sle=T.enum(["unet","text_encoder","text_encoder_2","tokenizer","tokenizer_2","vae","vae_decoder","vae_encoder","scheduler","safety_checker"]),J4=Nf,df=Nf.extend({model_type:_le,submodel:Sle.optional()}),eT=Nf,tT=Nf,nT=Nf,rT=Nf,XD=df.extend({weight:T.number().optional()});T.object({unet:df,scheduler:df,loras:T.array(XD)});T.object({tokenizer:df,text_encoder:df,skipped_layers:T.number(),loras:T.array(XD)});T.object({vae:df});const xle=T.object({image:mm,control_model:tT,control_weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),control_mode:T.enum(["balanced","more_prompt","more_control","unbalanced"]).optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),wle=T.object({image:mm,ip_adapter_model:nT,weight:T.number(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional()}),Cle=T.object({image:mm,t2i_adapter_model:rT,weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),Ele=T.object({dataURL:T.string(),width:T.number().int(),height:T.number().int()}),Tle=T.object({image:mm,width:T.number().int().gt(0),height:T.number().int().gt(0),type:T.literal("image_output")}),QD=e=>Tle.safeParse(e).success,Ale=T.string(),Lze=e=>Ale.safeParse(e).success,kle=T.string(),Bze=e=>kle.safeParse(e).success,Ple=T.string(),zze=e=>Ple.safeParse(e).success,Ile=T.string(),jze=e=>Ile.safeParse(e).success,Mle=T.number().int().min(1),Vze=e=>Mle.safeParse(e).success,Rle=T.number().min(1),Uze=e=>Rle.safeParse(e).success,Ole=T.number().gte(0).lt(1),Gze=e=>Ole.safeParse(e).success,$le=GD,Hze=e=>$le.safeParse(e).success,Nle=T.number().int().min(0).max(mp),Wze=e=>Nle.safeParse(e).success,YD=T.number().multipleOf(8).min(64),qze=e=>YD.safeParse(e).success,Fle=YD,Kze=e=>Fle.safeParse(e).success,g_=qD,Xze=e=>g_.safeParse(e).success,ZD=KD,Qze=e=>ZD.safeParse(e).success,JD=J4,Yze=e=>JD.safeParse(e).success,Dle=eT,Zze=e=>Dle.safeParse(e).success,Lle=tT,Jze=e=>Lle.safeParse(e).success,Ble=nT,eje=e=>Ble.safeParse(e).success,zle=rT,tje=e=>zle.safeParse(e).success,jle=T.number().min(0).max(1),nje=e=>jle.safeParse(e).success;T.enum(["fp16","fp32"]);const Vle=T.enum(["ESRGAN","bilinear"]),rje=e=>Vle.safeParse(e).success,Ule=T.boolean(),ije=e=>Ule.safeParse(e).success&&e!==null&&e!==void 0,eL=T.number().min(1).max(10),oje=e=>eL.safeParse(e).success,Gle=eL,sje=e=>Gle.safeParse(e).success,Hle=T.number().min(0).max(1),aje=e=>Hle.safeParse(e).success;T.enum(["box","gaussian"]);T.enum(["unmasked","mask","edge"]);const iT={hrfStrength:.45,hrfEnabled:!1,hrfMethod:"ESRGAN",cfgScale:7.5,cfgRescaleMultiplier:0,height:512,img2imgStrength:.75,infillMethod:"patchmatch",iterations:1,perlin:0,positivePrompt:"",negativePrompt:"",scheduler:"euler",maskBlur:16,maskBlurMethod:"box",canvasCoherenceMode:"unmasked",canvasCoherenceSteps:20,canvasCoherenceStrength:.3,seed:0,seedWeights:"",shouldFitToWidthHeight:!0,shouldGenerateVariations:!1,shouldRandomizeSeed:!0,steps:50,threshold:0,infillTileSize:32,infillPatchmatchDownscaleSize:1,variationAmount:.1,width:512,shouldUseSymmetry:!1,horizontalSymmetrySteps:0,verticalSymmetrySteps:0,model:null,vae:null,vaePrecision:"fp32",seamlessXAxis:!1,seamlessYAxis:!1,clipSkip:0,shouldUseCpuNoise:!0,shouldShowAdvancedOptions:!1,aspectRatio:null,shouldLockAspectRatio:!1},Wle=iT,tL=jt({name:"generation",initialState:Wle,reducers:{setPositivePrompt:(e,t)=>{e.positivePrompt=t.payload},setNegativePrompt:(e,t)=>{e.negativePrompt=t.payload},setIterations:(e,t)=>{e.iterations=t.payload},setSteps:(e,t)=>{e.steps=t.payload},clampSymmetrySteps:e=>{e.horizontalSymmetrySteps=el(e.horizontalSymmetrySteps,0,e.steps),e.verticalSymmetrySteps=el(e.verticalSymmetrySteps,0,e.steps)},setCfgScale:(e,t)=>{e.cfgScale=t.payload},setCfgRescaleMultiplier:(e,t)=>{e.cfgRescaleMultiplier=t.payload},setThreshold:(e,t)=>{e.threshold=t.payload},setPerlin:(e,t)=>{e.perlin=t.payload},setHeight:(e,t)=>{e.height=t.payload},setWidth:(e,t)=>{e.width=t.payload},toggleSize:e=>{const[t,n]=[e.width,e.height];e.width=n,e.height=t},setScheduler:(e,t)=>{e.scheduler=t.payload},setSeed:(e,t)=>{e.seed=t.payload,e.shouldRandomizeSeed=!1},setImg2imgStrength:(e,t)=>{e.img2imgStrength=t.payload},setSeamlessXAxis:(e,t)=>{e.seamlessXAxis=t.payload},setSeamlessYAxis:(e,t)=>{e.seamlessYAxis=t.payload},setShouldFitToWidthHeight:(e,t)=>{e.shouldFitToWidthHeight=t.payload},resetSeed:e=>{e.seed=-1},setShouldGenerateVariations:(e,t)=>{e.shouldGenerateVariations=t.payload},setVariationAmount:(e,t)=>{e.variationAmount=t.payload},setSeedWeights:(e,t)=>{e.seedWeights=t.payload,e.shouldGenerateVariations=!0,e.variationAmount=0},resetParametersState:e=>({...e,...iT}),setShouldRandomizeSeed:(e,t)=>{e.shouldRandomizeSeed=t.payload},clearInitialImage:e=>{e.initialImage=void 0},setMaskBlur:(e,t)=>{e.maskBlur=t.payload},setMaskBlurMethod:(e,t)=>{e.maskBlurMethod=t.payload},setCanvasCoherenceMode:(e,t)=>{e.canvasCoherenceMode=t.payload},setCanvasCoherenceSteps:(e,t)=>{e.canvasCoherenceSteps=t.payload},setCanvasCoherenceStrength:(e,t)=>{e.canvasCoherenceStrength=t.payload},setInfillMethod:(e,t)=>{e.infillMethod=t.payload},setInfillTileSize:(e,t)=>{e.infillTileSize=t.payload},setInfillPatchmatchDownscaleSize:(e,t)=>{e.infillPatchmatchDownscaleSize=t.payload},setShouldUseSymmetry:(e,t)=>{e.shouldUseSymmetry=t.payload},setHorizontalSymmetrySteps:(e,t)=>{e.horizontalSymmetrySteps=t.payload},setVerticalSymmetrySteps:(e,t)=>{e.verticalSymmetrySteps=t.payload},initialImageChanged:(e,t)=>{const{image_name:n,width:r,height:i}=t.payload;e.initialImage={imageName:n,width:r,height:i}},modelChanged:(e,t)=>{if(e.model=t.payload,e.model===null)return;const{maxClip:n}=yae[e.model.base_model];e.clipSkip=el(e.clipSkip,0,n)},vaeSelected:(e,t)=>{e.vae=t.payload},vaePrecisionChanged:(e,t)=>{e.vaePrecision=t.payload},setClipSkip:(e,t)=>{e.clipSkip=t.payload},setHrfStrength:(e,t)=>{e.hrfStrength=t.payload},setHrfEnabled:(e,t)=>{e.hrfEnabled=t.payload},setHrfMethod:(e,t)=>{e.hrfMethod=t.payload},shouldUseCpuNoiseChanged:(e,t)=>{e.shouldUseCpuNoise=t.payload},setAspectRatio:(e,t)=>{const n=t.payload;e.aspectRatio=n,n&&(e.height=Or(e.width/n,8))},setShouldLockAspectRatio:(e,t)=>{e.shouldLockAspectRatio=t.payload}},extraReducers:e=>{e.addCase(qse,(t,n)=>{var i;const r=(i=n.payload.sd)==null?void 0:i.defaultModel;if(r&&!t.model){const[o,s,a]=r.split("/"),l=g_.safeParse({model_name:a,base_model:o,model_type:s});l.success&&(t.model=l.data)}}),e.addMatcher(mae,(t,n)=>{n.payload.type==="t2i_adapter"&&(t.width=Or(t.width,64),t.height=Or(t.height,64))})}}),{clampSymmetrySteps:lje,clearInitialImage:oT,resetParametersState:cje,resetSeed:uje,setCfgScale:dje,setCfgRescaleMultiplier:fje,setWidth:oI,setHeight:sI,toggleSize:hje,setImg2imgStrength:pje,setInfillMethod:qle,setIterations:gje,setPerlin:mje,setPositivePrompt:Kle,setNegativePrompt:yje,setScheduler:vje,setMaskBlur:bje,setMaskBlurMethod:_je,setCanvasCoherenceMode:Sje,setCanvasCoherenceSteps:xje,setCanvasCoherenceStrength:wje,setSeed:Cje,setSeedWeights:Eje,setShouldFitToWidthHeight:Tje,setShouldGenerateVariations:Aje,setShouldRandomizeSeed:kje,setSteps:Pje,setThreshold:Ije,setInfillTileSize:Mje,setInfillPatchmatchDownscaleSize:Rje,setVariationAmount:Oje,setShouldUseSymmetry:$je,setHorizontalSymmetrySteps:Nje,setVerticalSymmetrySteps:Fje,initialImageChanged:m_,modelChanged:tl,vaeSelected:nL,setSeamlessXAxis:Dje,setSeamlessYAxis:Lje,setClipSkip:Bje,setHrfEnabled:zje,setHrfStrength:jje,setHrfMethod:Vje,shouldUseCpuNoiseChanged:Uje,setAspectRatio:Xle,setShouldLockAspectRatio:Gje,vaePrecisionChanged:Hje}=tL.actions,Qle=tL.reducer,V0=(e,t,n,r,i,o,s)=>{const a=Math.floor(e/2-(n+i/2)*s),l=Math.floor(t/2-(r+o/2)*s);return{x:a,y:l}},U0=(e,t,n,r,i=.95)=>{const o=e*i/n,s=t*i/r,a=Math.min(1,Math.min(o,s));return a||1},Wje=.999,qje=.1,Kje=20,G0=.95,Xje=30,Qje=10,Yle=e=>({x:Math.floor(e.x),y:Math.floor(e.y)}),Iu=e=>{const{width:t,height:n}=e,r={width:t,height:n},i=512*512,o=t/n;let s=t*n,a=448;for(;s1?(r.width=a,r.height=Or(a/o,64)):o<1&&(r.height=a,r.width=Or(a*o,64)),s=r.width*r.height;return r},Zle=e=>({width:Or(e.width,64),height:Or(e.height,64)}),Yje=[{label:"Base",value:"base"},{label:"Mask",value:"mask"}],Zje=[{label:"None",value:"none"},{label:"Auto",value:"auto"},{label:"Manual",value:"manual"}],rL=e=>e.kind==="line"&&e.layer==="mask",Jje=e=>e.kind==="line"&&e.layer==="base",Jle=e=>e.kind==="image"&&e.layer==="base",eVe=e=>e.kind==="fillRect"&&e.layer==="base",tVe=e=>e.kind==="eraseRect"&&e.layer==="base",ece=e=>e.kind==="line",tce={listCursor:void 0,listPriority:void 0,selectedQueueItem:void 0,resumeProcessorOnEnqueue:!0},nce=tce,iL=jt({name:"queue",initialState:nce,reducers:{listCursorChanged:(e,t)=>{e.listCursor=t.payload},listPriorityChanged:(e,t)=>{e.listPriority=t.payload},listParamsReset:e=>{e.listCursor=void 0,e.listPriority=void 0},queueItemSelectionToggled:(e,t)=>{e.selectedQueueItem===t.payload?e.selectedQueueItem=void 0:e.selectedQueueItem=t.payload},resumeProcessorOnEnqueueChanged:(e,t)=>{e.resumeProcessorOnEnqueue=t.payload}}}),{listCursorChanged:nVe,listPriorityChanged:rVe,listParamsReset:rce,queueItemSelectionToggled:iVe,resumeProcessorOnEnqueueChanged:oVe}=iL.actions,ice=iL.reducer,oL="%[a-f0-9]{2}",aI=new RegExp("("+oL+")|([^%]+?)","gi"),lI=new RegExp("("+oL+")+","gi");function V5(e,t){try{return[decodeURIComponent(e.join(""))]}catch{}if(e.length===1)return e;t=t||1;const n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],V5(n),V5(r))}function oce(e){try{return decodeURIComponent(e)}catch{let t=e.match(aI)||[];for(let n=1;ne==null,uce=e=>encodeURIComponent(e).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),U5=Symbol("encodeFragmentIdentifier");function dce(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const i=n.length;return r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),"[",i,"]"].join("")]:[...n,[pn(t,e),"[",pn(i,e),"]=",pn(r,e)].join("")]};case"bracket":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),"[]"].join("")]:[...n,[pn(t,e),"[]=",pn(r,e)].join("")];case"colon-list-separator":return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,[pn(t,e),":list="].join("")]:[...n,[pn(t,e),":list=",pn(r,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t=e.arrayFormat==="bracket-separator"?"[]=":"=";return n=>(r,i)=>i===void 0||e.skipNull&&i===null||e.skipEmptyString&&i===""?r:(i=i===null?"":i,r.length===0?[[pn(n,e),t,pn(i,e)].join("")]:[[r,pn(i,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>r===void 0||e.skipNull&&r===null||e.skipEmptyString&&r===""?n:r===null?[...n,pn(t,e)]:[...n,[pn(t,e),"=",pn(r,e)].join("")]}}function fce(e){let t;switch(e.arrayFormat){case"index":return(n,r,i)=>{if(t=/\[(\d*)]$/.exec(n),n=n.replace(/\[\d*]$/,""),!t){i[n]=r;return}i[n]===void 0&&(i[n]={}),i[n][t[1]]=r};case"bracket":return(n,r,i)=>{if(t=/(\[])$/.exec(n),n=n.replace(/\[]$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"colon-list-separator":return(n,r,i)=>{if(t=/(:list)$/.exec(n),n=n.replace(/:list$/,""),!t){i[n]=r;return}if(i[n]===void 0){i[n]=[r];return}i[n]=[...i[n],r]};case"comma":case"separator":return(n,r,i)=>{const o=typeof r=="string"&&r.includes(e.arrayFormatSeparator),s=typeof r=="string"&&!o&&zs(r,e).includes(e.arrayFormatSeparator);r=s?zs(r,e):r;const a=o||s?r.split(e.arrayFormatSeparator).map(l=>zs(l,e)):r===null?r:zs(r,e);i[n]=a};case"bracket-separator":return(n,r,i)=>{const o=/(\[])$/.test(n);if(n=n.replace(/\[]$/,""),!o){i[n]=r&&zs(r,e);return}const s=r===null?[]:r.split(e.arrayFormatSeparator).map(a=>zs(a,e));if(i[n]===void 0){i[n]=s;return}i[n]=[...i[n],...s]};default:return(n,r,i)=>{if(i[n]===void 0){i[n]=r;return}i[n]=[...[i[n]].flat(),r]}}}function aL(e){if(typeof e!="string"||e.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function pn(e,t){return t.encode?t.strict?uce(e):encodeURIComponent(e):e}function zs(e,t){return t.decode?ace(e):e}function lL(e){return Array.isArray(e)?e.sort():typeof e=="object"?lL(Object.keys(e)).sort((t,n)=>Number(t)-Number(n)).map(t=>e[t]):e}function cL(e){const t=e.indexOf("#");return t!==-1&&(e=e.slice(0,t)),e}function hce(e){let t="";const n=e.indexOf("#");return n!==-1&&(t=e.slice(n)),t}function cI(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?e=Number(e):t.parseBooleans&&e!==null&&(e.toLowerCase()==="true"||e.toLowerCase()==="false")&&(e=e.toLowerCase()==="true"),e}function sT(e){e=cL(e);const t=e.indexOf("?");return t===-1?"":e.slice(t+1)}function aT(e,t){t={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,...t},aL(t.arrayFormatSeparator);const n=fce(t),r=Object.create(null);if(typeof e!="string"||(e=e.trim().replace(/^[?#&]/,""),!e))return r;for(const i of e.split("&")){if(i==="")continue;const o=t.decode?i.replace(/\+/g," "):i;let[s,a]=sL(o,"=");s===void 0&&(s=o),a=a===void 0?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?a:zs(a,t),n(zs(s,t),a,r)}for(const[i,o]of Object.entries(r))if(typeof o=="object"&&o!==null)for(const[s,a]of Object.entries(o))o[s]=cI(a,t);else r[i]=cI(o,t);return t.sort===!1?r:(t.sort===!0?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((i,o)=>{const s=r[o];return s&&typeof s=="object"&&!Array.isArray(s)?i[o]=lL(s):i[o]=s,i},Object.create(null))}function uL(e,t){if(!e)return"";t={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...t},aL(t.arrayFormatSeparator);const n=s=>t.skipNull&&cce(e[s])||t.skipEmptyString&&e[s]==="",r=dce(t),i={};for(const[s,a]of Object.entries(e))n(s)||(i[s]=a);const o=Object.keys(i);return t.sort!==!1&&o.sort(t.sort),o.map(s=>{const a=e[s];return a===void 0?"":a===null?pn(s,t):Array.isArray(a)?a.length===0&&t.arrayFormat==="bracket-separator"?pn(s,t)+"[]":a.reduce(r(s),[]).join("&"):pn(s,t)+"="+pn(a,t)}).filter(s=>s.length>0).join("&")}function dL(e,t){var i;t={decode:!0,...t};let[n,r]=sL(e,"#");return n===void 0&&(n=e),{url:((i=n==null?void 0:n.split("?"))==null?void 0:i[0])??"",query:aT(sT(e),t),...t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:zs(r,t)}:{}}}function fL(e,t){t={encode:!0,strict:!0,[U5]:!0,...t};const n=cL(e.url).split("?")[0]||"",r=sT(e.url),i={...aT(r,{sort:!1}),...e.query};let o=uL(i,t);o&&(o=`?${o}`);let s=hce(e.url);if(e.fragmentIdentifier){const a=new URL(n);a.hash=e.fragmentIdentifier,s=t[U5]?a.hash:`#${e.fragmentIdentifier}`}return`${n}${o}${s}`}function hL(e,t,n){n={parseFragmentIdentifier:!0,[U5]:!1,...n};const{url:r,query:i,fragmentIdentifier:o}=dL(e,n);return fL({url:r,query:lce(i,t),fragmentIdentifier:o},n)}function pce(e,t,n){const r=Array.isArray(t)?i=>!t.includes(i):(i,o)=>!t(i,o);return hL(e,r,n)}const yp=Object.freeze(Object.defineProperty({__proto__:null,exclude:pce,extract:sT,parse:aT,parseUrl:dL,pick:hL,stringify:uL,stringifyUrl:fL},Symbol.toStringTag,{value:"Module"}));var pL=(e=>(e.uninitialized="uninitialized",e.pending="pending",e.fulfilled="fulfilled",e.rejected="rejected",e))(pL||{});function gce(e){return{status:e,isUninitialized:e==="uninitialized",isLoading:e==="pending",isSuccess:e==="fulfilled",isError:e==="rejected"}}function mce(e){return new RegExp("(^|:)//").test(e)}var yce=e=>e.replace(/\/$/,""),vce=e=>e.replace(/^\//,"");function bce(e,t){if(!e)return t;if(!t)return e;if(mce(t))return t;const n=e.endsWith("/")||!t.startsWith("?")?"/":"";return e=yce(e),t=vce(t),`${e}${n}${t}`}var uI=e=>[].concat(...e);function _ce(){return typeof navigator>"u"||navigator.onLine===void 0?!0:navigator.onLine}function Sce(){return typeof document>"u"?!0:document.visibilityState!=="hidden"}var dI=_s;function gL(e,t){if(e===t||!(dI(e)&&dI(t)||Array.isArray(e)&&Array.isArray(t)))return t;const n=Object.keys(t),r=Object.keys(e);let i=n.length===r.length;const o=Array.isArray(t)?[]:{};for(const s of n)o[s]=gL(e[s],t[s]),i&&(i=e[s]===o[s]);return i?e:o}var fI=(...e)=>fetch(...e),xce=e=>e.status>=200&&e.status<=299,wce=e=>/ion\/(vnd\.api\+)?json/.test(e.get("content-type")||"");function hI(e){if(!_s(e))return e;const t={...e};for(const[n,r]of Object.entries(t))r===void 0&&delete t[n];return t}function Cce({baseUrl:e,prepareHeaders:t=d=>d,fetchFn:n=fI,paramsSerializer:r,isJsonContentType:i=wce,jsonContentType:o="application/json",jsonReplacer:s,timeout:a,responseHandler:l,validateStatus:c,...u}={}){return typeof fetch>"u"&&n===fI&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),async(f,h)=>{const{signal:p,getState:m,extra:_,endpoint:v,forced:y,type:g}=h;let b,{url:S,headers:w=new Headers(u.headers),params:C=void 0,responseHandler:x=l??"json",validateStatus:k=c??xce,timeout:A=a,...R}=typeof f=="string"?{url:f}:f,L={...u,signal:p,...R};w=new Headers(hI(w)),L.headers=await t(w,{getState:m,extra:_,endpoint:v,forced:y,type:g})||w;const M=V=>typeof V=="object"&&(_s(V)||Array.isArray(V)||typeof V.toJSON=="function");if(!L.headers.has("content-type")&&M(L.body)&&L.headers.set("content-type",o),M(L.body)&&i(L.headers)&&(L.body=JSON.stringify(L.body,s)),C){const V=~S.indexOf("?")?"&":"?",H=r?r(C):new URLSearchParams(hI(C));S+=V+H}S=bce(e,S);const E=new Request(S,L);b={request:new Request(S,L)};let O,F=!1,$=A&&setTimeout(()=>{F=!0,h.abort()},A);try{O=await n(E)}catch(V){return{error:{status:F?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(V)},meta:b}}finally{$&&clearTimeout($)}const D=O.clone();b.response=D;let N,z="";try{let V;if(await Promise.all([d(O,x).then(H=>N=H,H=>V=H),D.text().then(H=>z=H,()=>{})]),V)throw V}catch(V){return{error:{status:"PARSING_ERROR",originalStatus:O.status,data:z,error:String(V)},meta:b}}return k(O,N)?{data:N,meta:b}:{error:{status:O.status,data:N},meta:b}};async function d(f,h){if(typeof h=="function")return h(f);if(h==="content-type"&&(h=i(f.headers)?"json":"text"),h==="json"){const p=await f.text();return p.length?JSON.parse(p):null}return f.text()}}var pI=class{constructor(e,t=void 0){this.value=e,this.meta=t}},lT=he("__rtkq/focused"),mL=he("__rtkq/unfocused"),cT=he("__rtkq/online"),yL=he("__rtkq/offline");function vL(e){return e.type==="query"}function Ece(e){return e.type==="mutation"}function uT(e,t,n,r,i,o){return Tce(e)?e(t,n,r,i).map(G5).map(o):Array.isArray(e)?e.map(G5).map(o):[]}function Tce(e){return typeof e=="function"}function G5(e){return typeof e=="string"?{type:e}:e}function gI(e){return e!=null}function Od(e){let t=0;for(const n in e)t++;return t}var vg=Symbol("forceQueryFn"),H5=e=>typeof e[vg]=="function";function Ace({serializeQueryArgs:e,queryThunk:t,mutationThunk:n,api:r,context:i}){const o=new Map,s=new Map,{unsubscribeQueryResult:a,removeMutationResult:l,updateSubscriptionOptions:c}=r.internalActions;return{buildInitiateQuery:p,buildInitiateMutation:m,getRunningQueryThunk:u,getRunningMutationThunk:d,getRunningQueriesThunk:f,getRunningMutationsThunk:h};function u(_,v){return y=>{var S;const g=i.endpointDefinitions[_],b=e({queryArgs:v,endpointDefinition:g,endpointName:_});return(S=o.get(y))==null?void 0:S[b]}}function d(_,v){return y=>{var g;return(g=s.get(y))==null?void 0:g[v]}}function f(){return _=>Object.values(o.get(_)||{}).filter(gI)}function h(){return _=>Object.values(s.get(_)||{}).filter(gI)}function p(_,v){const y=(g,{subscribe:b=!0,forceRefetch:S,subscriptionOptions:w,[vg]:C}={})=>(x,k)=>{var z;const A=e({queryArgs:g,endpointDefinition:v,endpointName:_}),R=t({type:"query",subscribe:b,forceRefetch:S,subscriptionOptions:w,endpointName:_,originalArgs:g,queryCacheKey:A,[vg]:C}),L=r.endpoints[_].select(g),M=x(R),E=L(k()),{requestId:P,abort:O}=M,F=E.requestId!==P,$=(z=o.get(x))==null?void 0:z[A],D=()=>L(k()),N=Object.assign(C?M.then(D):F&&!$?Promise.resolve(E):Promise.all([$,M]).then(D),{arg:g,requestId:P,subscriptionOptions:w,queryCacheKey:A,abort:O,async unwrap(){const V=await N;if(V.isError)throw V.error;return V.data},refetch:()=>x(y(g,{subscribe:!1,forceRefetch:!0})),unsubscribe(){b&&x(a({queryCacheKey:A,requestId:P}))},updateSubscriptionOptions(V){N.subscriptionOptions=V,x(c({endpointName:_,requestId:P,queryCacheKey:A,options:V}))}});if(!$&&!F&&!C){const V=o.get(x)||{};V[A]=N,o.set(x,V),N.then(()=>{delete V[A],Od(V)||o.delete(x)})}return N};return y}function m(_){return(v,{track:y=!0,fixedCacheKey:g}={})=>(b,S)=>{const w=n({type:"mutation",endpointName:_,originalArgs:v,track:y,fixedCacheKey:g}),C=b(w),{requestId:x,abort:k,unwrap:A}=C,R=C.unwrap().then(P=>({data:P})).catch(P=>({error:P})),L=()=>{b(l({requestId:x,fixedCacheKey:g}))},M=Object.assign(R,{arg:C.arg,requestId:x,abort:k,unwrap:A,reset:L}),E=s.get(b)||{};return s.set(b,E),E[x]=M,M.then(()=>{delete E[x],Od(E)||s.delete(b)}),g&&(E[g]=M,M.then(()=>{E[g]===M&&(delete E[g],Od(E)||s.delete(b))})),M}}}function mI(e){return e}function kce({reducerPath:e,baseQuery:t,context:{endpointDefinitions:n},serializeQueryArgs:r,api:i,assertTagType:o}){const s=(y,g,b,S)=>(w,C)=>{const x=n[y],k=r({queryArgs:g,endpointDefinition:x,endpointName:y});if(w(i.internalActions.queryResultPatched({queryCacheKey:k,patches:b})),!S)return;const A=i.endpoints[y].select(g)(C()),R=uT(x.providesTags,A.data,void 0,g,{},o);w(i.internalActions.updateProvidedBy({queryCacheKey:k,providedTags:R}))},a=(y,g,b,S=!0)=>(w,C)=>{const k=i.endpoints[y].select(g)(C());let A={patches:[],inversePatches:[],undo:()=>w(i.util.patchQueryData(y,g,A.inversePatches,S))};if(k.status==="uninitialized")return A;let R;if("data"in k)if(No(k.data)){const[L,M,E]=dN(k.data,b);A.patches.push(...M),A.inversePatches.push(...E),R=L}else R=b(k.data),A.patches.push({op:"replace",path:[],value:R}),A.inversePatches.push({op:"replace",path:[],value:k.data});return w(i.util.patchQueryData(y,g,A.patches,S)),A},l=(y,g,b)=>S=>S(i.endpoints[y].initiate(g,{subscribe:!1,forceRefetch:!0,[vg]:()=>({data:b})})),c=async(y,{signal:g,abort:b,rejectWithValue:S,fulfillWithValue:w,dispatch:C,getState:x,extra:k})=>{const A=n[y.endpointName];try{let R=mI,L;const M={signal:g,abort:b,dispatch:C,getState:x,extra:k,endpoint:y.endpointName,type:y.type,forced:y.type==="query"?u(y,x()):void 0},E=y.type==="query"?y[vg]:void 0;if(E?L=E():A.query?(L=await t(A.query(y.originalArgs),M,A.extraOptions),A.transformResponse&&(R=A.transformResponse)):L=await A.queryFn(y.originalArgs,M,A.extraOptions,P=>t(P,M,A.extraOptions)),typeof process<"u",L.error)throw new pI(L.error,L.meta);return w(await R(L.data,L.meta,y.originalArgs),{fulfilledTimeStamp:Date.now(),baseQueryMeta:L.meta,[ad]:!0})}catch(R){let L=R;if(L instanceof pI){let M=mI;A.query&&A.transformErrorResponse&&(M=A.transformErrorResponse);try{return S(await M(L.value,L.meta,y.originalArgs),{baseQueryMeta:L.meta,[ad]:!0})}catch(E){L=E}}throw typeof process<"u",console.error(L),L}};function u(y,g){var x,k,A;const b=(k=(x=g[e])==null?void 0:x.queries)==null?void 0:k[y.queryCacheKey],S=(A=g[e])==null?void 0:A.config.refetchOnMountOrArgChange,w=b==null?void 0:b.fulfilledTimeStamp,C=y.forceRefetch??(y.subscribe&&S);return C?C===!0||(Number(new Date)-Number(w))/1e3>=C:!1}const d=m5(`${e}/executeQuery`,c,{getPendingMeta(){return{startedTimeStamp:Date.now(),[ad]:!0}},condition(y,{getState:g}){var A,R,L;const b=g(),S=(R=(A=b[e])==null?void 0:A.queries)==null?void 0:R[y.queryCacheKey],w=S==null?void 0:S.fulfilledTimeStamp,C=y.originalArgs,x=S==null?void 0:S.originalArgs,k=n[y.endpointName];return H5(y)?!0:(S==null?void 0:S.status)==="pending"?!1:u(y,b)||vL(k)&&((L=k==null?void 0:k.forceRefetch)!=null&&L.call(k,{currentArg:C,previousArg:x,endpointState:S,state:b}))?!0:!w},dispatchConditionRejection:!0}),f=m5(`${e}/executeMutation`,c,{getPendingMeta(){return{startedTimeStamp:Date.now(),[ad]:!0}}}),h=y=>"force"in y,p=y=>"ifOlderThan"in y,m=(y,g,b)=>(S,w)=>{const C=h(b)&&b.force,x=p(b)&&b.ifOlderThan,k=(R=!0)=>i.endpoints[y].initiate(g,{forceRefetch:R}),A=i.endpoints[y].select(g)(w());if(C)S(k());else if(x){const R=A==null?void 0:A.fulfilledTimeStamp;if(!R){S(k());return}(Number(new Date)-Number(new Date(R)))/1e3>=x&&S(k())}else S(k(!1))};function _(y){return g=>{var b,S;return((S=(b=g==null?void 0:g.meta)==null?void 0:b.arg)==null?void 0:S.endpointName)===y}}function v(y,g){return{matchPending:hp(v4(y),_(g)),matchFulfilled:hp(bl(y),_(g)),matchRejected:hp(sf(y),_(g))}}return{queryThunk:d,mutationThunk:f,prefetch:m,updateQueryData:a,upsertQueryData:l,patchQueryData:s,buildMatchThunkActions:v}}function bL(e,t,n,r){return uT(n[e.meta.arg.endpointName][t],bl(e)?e.payload:void 0,fm(e)?e.payload:void 0,e.meta.arg.originalArgs,"baseQueryMeta"in e.meta?e.meta.baseQueryMeta:void 0,r)}function H0(e,t,n){const r=e[t];r&&n(r)}function bg(e){return("arg"in e?e.arg.fixedCacheKey:e.fixedCacheKey)??e.requestId}function yI(e,t,n){const r=e[bg(t)];r&&n(r)}var ph={};function Pce({reducerPath:e,queryThunk:t,mutationThunk:n,context:{endpointDefinitions:r,apiUid:i,extractRehydrationInfo:o,hasRehydrationInfo:s},assertTagType:a,config:l}){const c=he(`${e}/resetApiState`),u=jt({name:`${e}/queries`,initialState:ph,reducers:{removeQueryResult:{reducer(g,{payload:{queryCacheKey:b}}){delete g[b]},prepare:uh()},queryResultPatched:{reducer(g,{payload:{queryCacheKey:b,patches:S}}){H0(g,b,w=>{w.data=BP(w.data,S.concat())})},prepare:uh()}},extraReducers(g){g.addCase(t.pending,(b,{meta:S,meta:{arg:w}})=>{var x;const C=H5(w);b[x=w.queryCacheKey]??(b[x]={status:"uninitialized",endpointName:w.endpointName}),H0(b,w.queryCacheKey,k=>{k.status="pending",k.requestId=C&&k.requestId?k.requestId:S.requestId,w.originalArgs!==void 0&&(k.originalArgs=w.originalArgs),k.startedTimeStamp=S.startedTimeStamp})}).addCase(t.fulfilled,(b,{meta:S,payload:w})=>{H0(b,S.arg.queryCacheKey,C=>{if(C.requestId!==S.requestId&&!H5(S.arg))return;const{merge:x}=r[S.arg.endpointName];if(C.status="fulfilled",x)if(C.data!==void 0){const{fulfilledTimeStamp:k,arg:A,baseQueryMeta:R,requestId:L}=S;let M=Pf(C.data,E=>x(E,w,{arg:A.originalArgs,baseQueryMeta:R,fulfilledTimeStamp:k,requestId:L}));C.data=M}else C.data=w;else C.data=r[S.arg.endpointName].structuralSharing??!0?gL(Ji(C.data)?uQ(C.data):C.data,w):w;delete C.error,C.fulfilledTimeStamp=S.fulfilledTimeStamp})}).addCase(t.rejected,(b,{meta:{condition:S,arg:w,requestId:C},error:x,payload:k})=>{H0(b,w.queryCacheKey,A=>{if(!S){if(A.requestId!==C)return;A.status="rejected",A.error=k??x}})}).addMatcher(s,(b,S)=>{const{queries:w}=o(S);for(const[C,x]of Object.entries(w))((x==null?void 0:x.status)==="fulfilled"||(x==null?void 0:x.status)==="rejected")&&(b[C]=x)})}}),d=jt({name:`${e}/mutations`,initialState:ph,reducers:{removeMutationResult:{reducer(g,{payload:b}){const S=bg(b);S in g&&delete g[S]},prepare:uh()}},extraReducers(g){g.addCase(n.pending,(b,{meta:S,meta:{requestId:w,arg:C,startedTimeStamp:x}})=>{C.track&&(b[bg(S)]={requestId:w,status:"pending",endpointName:C.endpointName,startedTimeStamp:x})}).addCase(n.fulfilled,(b,{payload:S,meta:w})=>{w.arg.track&&yI(b,w,C=>{C.requestId===w.requestId&&(C.status="fulfilled",C.data=S,C.fulfilledTimeStamp=w.fulfilledTimeStamp)})}).addCase(n.rejected,(b,{payload:S,error:w,meta:C})=>{C.arg.track&&yI(b,C,x=>{x.requestId===C.requestId&&(x.status="rejected",x.error=S??w)})}).addMatcher(s,(b,S)=>{const{mutations:w}=o(S);for(const[C,x]of Object.entries(w))((x==null?void 0:x.status)==="fulfilled"||(x==null?void 0:x.status)==="rejected")&&C!==(x==null?void 0:x.requestId)&&(b[C]=x)})}}),f=jt({name:`${e}/invalidation`,initialState:ph,reducers:{updateProvidedBy:{reducer(g,b){var C,x;const{queryCacheKey:S,providedTags:w}=b.payload;for(const k of Object.values(g))for(const A of Object.values(k)){const R=A.indexOf(S);R!==-1&&A.splice(R,1)}for(const{type:k,id:A}of w){const R=(C=g[k]??(g[k]={}))[x=A||"__internal_without_id"]??(C[x]=[]);R.includes(S)||R.push(S)}},prepare:uh()}},extraReducers(g){g.addCase(u.actions.removeQueryResult,(b,{payload:{queryCacheKey:S}})=>{for(const w of Object.values(b))for(const C of Object.values(w)){const x=C.indexOf(S);x!==-1&&C.splice(x,1)}}).addMatcher(s,(b,S)=>{var C,x;const{provided:w}=o(S);for(const[k,A]of Object.entries(w))for(const[R,L]of Object.entries(A)){const M=(C=b[k]??(b[k]={}))[x=R||"__internal_without_id"]??(C[x]=[]);for(const E of L)M.includes(E)||M.push(E)}}).addMatcher(br(bl(t),fm(t)),(b,S)=>{const w=bL(S,"providesTags",r,a),{queryCacheKey:C}=S.meta.arg;f.caseReducers.updateProvidedBy(b,f.actions.updateProvidedBy({queryCacheKey:C,providedTags:w}))})}}),h=jt({name:`${e}/subscriptions`,initialState:ph,reducers:{updateSubscriptionOptions(g,b){},unsubscribeQueryResult(g,b){},internal_getRTKQSubscriptions(){}}}),p=jt({name:`${e}/internalSubscriptions`,initialState:ph,reducers:{subscriptionsUpdated:{reducer(g,b){return BP(g,b.payload)},prepare:uh()}}}),m=jt({name:`${e}/config`,initialState:{online:_ce(),focused:Sce(),middlewareRegistered:!1,...l},reducers:{middlewareRegistered(g,{payload:b}){g.middlewareRegistered=g.middlewareRegistered==="conflict"||i!==b?"conflict":!0}},extraReducers:g=>{g.addCase(cT,b=>{b.online=!0}).addCase(yL,b=>{b.online=!1}).addCase(lT,b=>{b.focused=!0}).addCase(mL,b=>{b.focused=!1}).addMatcher(s,b=>({...b}))}}),_=Vb({queries:u.reducer,mutations:d.reducer,provided:f.reducer,subscriptions:p.reducer,config:m.reducer}),v=(g,b)=>_(c.match(b)?void 0:g,b),y={...m.actions,...u.actions,...h.actions,...p.actions,...d.actions,...f.actions,resetApiState:c};return{reducer:v,actions:y}}var Sc=Symbol.for("RTKQ/skipToken"),_L={status:"uninitialized"},vI=Pf(_L,()=>{}),bI=Pf(_L,()=>{});function Ice({serializeQueryArgs:e,reducerPath:t}){const n=u=>vI,r=u=>bI;return{buildQuerySelector:s,buildMutationSelector:a,selectInvalidatedBy:l,selectCachedArgsForQuery:c};function i(u){return{...u,...gce(u.status)}}function o(u){return u[t]}function s(u,d){return f=>{const h=e({queryArgs:f,endpointDefinition:d,endpointName:u});return fp(f===Sc?n:_=>{var v,y;return((y=(v=o(_))==null?void 0:v.queries)==null?void 0:y[h])??vI},i)}}function a(){return u=>{let d;return typeof u=="object"?d=bg(u)??Sc:d=u,fp(d===Sc?r:p=>{var m,_;return((_=(m=o(p))==null?void 0:m.mutations)==null?void 0:_[d])??bI},i)}}function l(u,d){const f=u[t],h=new Set;for(const p of d.map(G5)){const m=f.provided[p.type];if(!m)continue;let _=(p.id!==void 0?m[p.id]:uI(Object.values(m)))??[];for(const v of _)h.add(v)}return uI(Array.from(h.values()).map(p=>{const m=f.queries[p];return m?[{queryCacheKey:p,endpointName:m.endpointName,originalArgs:m.originalArgs}]:[]}))}function c(u,d){return Object.values(u[t].queries).filter(f=>(f==null?void 0:f.endpointName)===d&&f.status!=="uninitialized").map(f=>f.originalArgs)}}var Mu=WeakMap?new WeakMap:void 0,_I=({endpointName:e,queryArgs:t})=>{let n="";const r=Mu==null?void 0:Mu.get(t);if(typeof r=="string")n=r;else{const i=JSON.stringify(t,(o,s)=>_s(s)?Object.keys(s).sort().reduce((a,l)=>(a[l]=s[l],a),{}):s);_s(t)&&(Mu==null||Mu.set(t,i)),n=i}return`${e}(${n})`};function Mce(...e){return function(n){const r=Zp(c=>{var u;return(u=n.extractRehydrationInfo)==null?void 0:u.call(n,c,{reducerPath:n.reducerPath??"api"})}),i={reducerPath:"api",keepUnusedDataFor:60,refetchOnMountOrArgChange:!1,refetchOnFocus:!1,refetchOnReconnect:!1,invalidationBehavior:"delayed",...n,extractRehydrationInfo:r,serializeQueryArgs(c){let u=_I;if("serializeQueryArgs"in c.endpointDefinition){const d=c.endpointDefinition.serializeQueryArgs;u=f=>{const h=d(f);return typeof h=="string"?h:_I({...f,queryArgs:h})}}else n.serializeQueryArgs&&(u=n.serializeQueryArgs);return u(c)},tagTypes:[...n.tagTypes||[]]},o={endpointDefinitions:{},batch(c){c()},apiUid:y4(),extractRehydrationInfo:r,hasRehydrationInfo:Zp(c=>r(c)!=null)},s={injectEndpoints:l,enhanceEndpoints({addTagTypes:c,endpoints:u}){if(c)for(const d of c)i.tagTypes.includes(d)||i.tagTypes.push(d);if(u)for(const[d,f]of Object.entries(u))typeof f=="function"?f(o.endpointDefinitions[d]):Object.assign(o.endpointDefinitions[d]||{},f);return s}},a=e.map(c=>c.init(s,i,o));function l(c){const u=c.endpoints({query:d=>({...d,type:"query"}),mutation:d=>({...d,type:"mutation"})});for(const[d,f]of Object.entries(u)){if(!c.overrideExisting&&d in o.endpointDefinitions){typeof process<"u";continue}o.endpointDefinitions[d]=f;for(const h of a)h.injectEndpoint(d,f)}return s}return s.injectEndpoints({endpoints:n.endpoints})}}function Rce(e){for(let t in e)return!1;return!0}var Oce=2147483647/1e3-1,$ce=({reducerPath:e,api:t,context:n,internalState:r})=>{const{removeQueryResult:i,unsubscribeQueryResult:o}=t.internalActions;function s(u){const d=r.currentSubscriptions[u];return!!d&&!Rce(d)}const a={},l=(u,d,f)=>{var h;if(o.match(u)){const p=d.getState()[e],{queryCacheKey:m}=u.payload;c(m,(h=p.queries[m])==null?void 0:h.endpointName,d,p.config)}if(t.util.resetApiState.match(u))for(const[p,m]of Object.entries(a))m&&clearTimeout(m),delete a[p];if(n.hasRehydrationInfo(u)){const p=d.getState()[e],{queries:m}=n.extractRehydrationInfo(u);for(const[_,v]of Object.entries(m))c(_,v==null?void 0:v.endpointName,d,p.config)}};function c(u,d,f,h){const p=n.endpointDefinitions[d],m=(p==null?void 0:p.keepUnusedDataFor)??h.keepUnusedDataFor;if(m===1/0)return;const _=Math.max(0,Math.min(m,Oce));if(!s(u)){const v=a[u];v&&clearTimeout(v),a[u]=setTimeout(()=>{s(u)||f.dispatch(i({queryCacheKey:u})),delete a[u]},_*1e3)}}return l},Nce=({reducerPath:e,context:t,context:{endpointDefinitions:n},mutationThunk:r,queryThunk:i,api:o,assertTagType:s,refetchQuery:a,internalState:l})=>{const{removeQueryResult:c}=o.internalActions,u=br(bl(r),fm(r)),d=br(bl(r,i),sf(r,i));let f=[];const h=(_,v)=>{u(_)?m(bL(_,"invalidatesTags",n,s),v):d(_)?m([],v):o.util.invalidateTags.match(_)&&m(uT(_.payload,void 0,void 0,void 0,void 0,s),v)};function p(_){var v,y;for(const g in _.queries)if(((v=_.queries[g])==null?void 0:v.status)==="pending")return!0;for(const g in _.mutations)if(((y=_.mutations[g])==null?void 0:y.status)==="pending")return!0;return!1}function m(_,v){const y=v.getState(),g=y[e];if(f.push(..._),g.config.invalidationBehavior==="delayed"&&p(g))return;const b=f;if(f=[],b.length===0)return;const S=o.util.selectInvalidatedBy(y,b);t.batch(()=>{const w=Array.from(S.values());for(const{queryCacheKey:C}of w){const x=g.queries[C],k=l.currentSubscriptions[C]??{};x&&(Od(k)===0?v.dispatch(c({queryCacheKey:C})):x.status!=="uninitialized"&&v.dispatch(a(x,C)))}})}return h},Fce=({reducerPath:e,queryThunk:t,api:n,refetchQuery:r,internalState:i})=>{const o={},s=(f,h)=>{(n.internalActions.updateSubscriptionOptions.match(f)||n.internalActions.unsubscribeQueryResult.match(f))&&l(f.payload,h),(t.pending.match(f)||t.rejected.match(f)&&f.meta.condition)&&l(f.meta.arg,h),(t.fulfilled.match(f)||t.rejected.match(f)&&!f.meta.condition)&&a(f.meta.arg,h),n.util.resetApiState.match(f)&&u()};function a({queryCacheKey:f},h){const m=h.getState()[e].queries[f],_=i.currentSubscriptions[f];if(!m||m.status==="uninitialized")return;const v=d(_);if(!Number.isFinite(v))return;const y=o[f];y!=null&&y.timeout&&(clearTimeout(y.timeout),y.timeout=void 0);const g=Date.now()+v,b=o[f]={nextPollTimestamp:g,pollingInterval:v,timeout:setTimeout(()=>{b.timeout=void 0,h.dispatch(r(m,f))},v)}}function l({queryCacheKey:f},h){const m=h.getState()[e].queries[f],_=i.currentSubscriptions[f];if(!m||m.status==="uninitialized")return;const v=d(_);if(!Number.isFinite(v)){c(f);return}const y=o[f],g=Date.now()+v;(!y||g{const{removeQueryResult:o}=n.internalActions,s=(l,c)=>{lT.match(l)&&a(c,"refetchOnFocus"),cT.match(l)&&a(c,"refetchOnReconnect")};function a(l,c){const u=l.getState()[e],d=u.queries,f=i.currentSubscriptions;t.batch(()=>{for(const h of Object.keys(f)){const p=d[h],m=f[h];if(!m||!p)continue;(Object.values(m).some(v=>v[c]===!0)||Object.values(m).every(v=>v[c]===void 0)&&u.config[c])&&(Od(m)===0?l.dispatch(o({queryCacheKey:h})):p.status!=="uninitialized"&&l.dispatch(r(p,h)))}})}return s},SI=new Error("Promise never resolved before cacheEntryRemoved."),Lce=({api:e,reducerPath:t,context:n,queryThunk:r,mutationThunk:i,internalState:o})=>{const s=g5(r),a=g5(i),l=bl(r,i),c={},u=(h,p,m)=>{const _=d(h);if(r.pending.match(h)){const v=m[t].queries[_],y=p.getState()[t].queries[_];!v&&y&&f(h.meta.arg.endpointName,h.meta.arg.originalArgs,_,p,h.meta.requestId)}else if(i.pending.match(h))p.getState()[t].mutations[_]&&f(h.meta.arg.endpointName,h.meta.arg.originalArgs,_,p,h.meta.requestId);else if(l(h)){const v=c[_];v!=null&&v.valueResolved&&(v.valueResolved({data:h.payload,meta:h.meta.baseQueryMeta}),delete v.valueResolved)}else if(e.internalActions.removeQueryResult.match(h)||e.internalActions.removeMutationResult.match(h)){const v=c[_];v&&(delete c[_],v.cacheEntryRemoved())}else if(e.util.resetApiState.match(h))for(const[v,y]of Object.entries(c))delete c[v],y.cacheEntryRemoved()};function d(h){return s(h)?h.meta.arg.queryCacheKey:a(h)?h.meta.requestId:e.internalActions.removeQueryResult.match(h)?h.payload.queryCacheKey:e.internalActions.removeMutationResult.match(h)?bg(h.payload):""}function f(h,p,m,_,v){const y=n.endpointDefinitions[h],g=y==null?void 0:y.onCacheEntryAdded;if(!g)return;let b={};const S=new Promise(R=>{b.cacheEntryRemoved=R}),w=Promise.race([new Promise(R=>{b.valueResolved=R}),S.then(()=>{throw SI})]);w.catch(()=>{}),c[m]=b;const C=e.endpoints[h].select(y.type==="query"?p:m),x=_.dispatch((R,L,M)=>M),k={..._,getCacheEntry:()=>C(_.getState()),requestId:v,extra:x,updateCachedData:y.type==="query"?R=>_.dispatch(e.util.updateQueryData(h,p,R)):void 0,cacheDataLoaded:w,cacheEntryRemoved:S},A=g(p,k);Promise.resolve(A).catch(R=>{if(R!==SI)throw R})}return u},Bce=({api:e,context:t,queryThunk:n,mutationThunk:r})=>{const i=v4(n,r),o=sf(n,r),s=bl(n,r),a={};return(c,u)=>{var d,f;if(i(c)){const{requestId:h,arg:{endpointName:p,originalArgs:m}}=c.meta,_=t.endpointDefinitions[p],v=_==null?void 0:_.onQueryStarted;if(v){const y={},g=new Promise((C,x)=>{y.resolve=C,y.reject=x});g.catch(()=>{}),a[h]=y;const b=e.endpoints[p].select(_.type==="query"?m:h),S=u.dispatch((C,x,k)=>k),w={...u,getCacheEntry:()=>b(u.getState()),requestId:h,extra:S,updateCachedData:_.type==="query"?C=>u.dispatch(e.util.updateQueryData(p,m,C)):void 0,queryFulfilled:g};v(m,w)}}else if(s(c)){const{requestId:h,baseQueryMeta:p}=c.meta;(d=a[h])==null||d.resolve({data:c.payload,meta:p}),delete a[h]}else if(o(c)){const{requestId:h,rejectedWithValue:p,baseQueryMeta:m}=c.meta;(f=a[h])==null||f.reject({error:c.payload??c.error,isUnhandledError:!p,meta:m}),delete a[h]}}},zce=({api:e,context:{apiUid:t},reducerPath:n})=>(r,i)=>{e.util.resetApiState.match(r)&&i.dispatch(e.internalActions.middlewareRegistered(t)),typeof process<"u"},jce=({api:e,queryThunk:t,internalState:n})=>{const r=`${e.reducerPath}/subscriptions`;let i=null,o=null;const{updateSubscriptionOptions:s,unsubscribeQueryResult:a}=e.internalActions,l=(h,p)=>{var _,v,y;if(s.match(p)){const{queryCacheKey:g,requestId:b,options:S}=p.payload;return(_=h==null?void 0:h[g])!=null&&_[b]&&(h[g][b]=S),!0}if(a.match(p)){const{queryCacheKey:g,requestId:b}=p.payload;return h[g]&&delete h[g][b],!0}if(e.internalActions.removeQueryResult.match(p))return delete h[p.payload.queryCacheKey],!0;if(t.pending.match(p)){const{meta:{arg:g,requestId:b}}=p,S=h[v=g.queryCacheKey]??(h[v]={});return S[`${b}_running`]={},g.subscribe&&(S[b]=g.subscriptionOptions??S[b]??{}),!0}let m=!1;if(t.fulfilled.match(p)||t.rejected.match(p)){const g=h[p.meta.arg.queryCacheKey]||{},b=`${p.meta.requestId}_running`;m||(m=!!g[b]),delete g[b]}if(t.rejected.match(p)){const{meta:{condition:g,arg:b,requestId:S}}=p;if(g&&b.subscribe){const w=h[y=b.queryCacheKey]??(h[y]={});w[S]=b.subscriptionOptions??w[S]??{},m=!0}}return m},c=()=>n.currentSubscriptions,f={getSubscriptions:c,getSubscriptionCount:h=>{const m=c()[h]??{};return Od(m)},isRequestSubscribed:(h,p)=>{var _;const m=c();return!!((_=m==null?void 0:m[h])!=null&&_[p])}};return(h,p)=>{if(i||(i=JSON.parse(JSON.stringify(n.currentSubscriptions))),e.util.resetApiState.match(h))return i=n.currentSubscriptions={},o=null,[!0,!1];if(e.internalActions.internal_getRTKQSubscriptions.match(h))return[!1,f];const m=l(n.currentSubscriptions,h);let _=!0;if(m){o||(o=setTimeout(()=>{const g=JSON.parse(JSON.stringify(n.currentSubscriptions)),[,b]=dN(i,()=>g);p.next(e.internalActions.subscriptionsUpdated(b)),i=g,o=null},500));const v=typeof h.type=="string"&&!!h.type.startsWith(r),y=t.rejected.match(h)&&h.meta.condition&&!!h.meta.arg.subscribe;_=!v&&!y}return[_,!1]}};function Vce(e){const{reducerPath:t,queryThunk:n,api:r,context:i}=e,{apiUid:o}=i,s={invalidateTags:he(`${t}/invalidateTags`)},a=d=>d.type.startsWith(`${t}/`),l=[zce,$ce,Nce,Fce,Lce,Bce];return{middleware:d=>{let f=!1;const p={...e,internalState:{currentSubscriptions:{}},refetchQuery:u,isThisApiSliceAction:a},m=l.map(y=>y(p)),_=jce(p),v=Dce(p);return y=>g=>{if(!Ub(g))return y(g);f||(f=!0,d.dispatch(r.internalActions.middlewareRegistered(o)));const b={...d,next:y},S=d.getState(),[w,C]=_(g,b,S);let x;if(w?x=y(g):x=C,d.getState()[t]&&(v(g,b,S),a(g)||i.hasRehydrationInfo(g)))for(let k of m)k(g,b,S);return x}},actions:s};function u(d,f,h={}){return n({type:"query",endpointName:d.endpointName,originalArgs:d.originalArgs,subscribe:!1,forceRefetch:!0,queryCacheKey:f,...h})}}function ka(e,...t){return Object.assign(e,...t)}var xI=Symbol(),Uce=()=>({name:xI,init(e,{baseQuery:t,tagTypes:n,reducerPath:r,serializeQueryArgs:i,keepUnusedDataFor:o,refetchOnMountOrArgChange:s,refetchOnFocus:a,refetchOnReconnect:l,invalidationBehavior:c},u){bQ();const d=F=>(typeof process<"u",F);Object.assign(e,{reducerPath:r,endpoints:{},internalActions:{onOnline:cT,onOffline:yL,onFocus:lT,onFocusLost:mL},util:{}});const{queryThunk:f,mutationThunk:h,patchQueryData:p,updateQueryData:m,upsertQueryData:_,prefetch:v,buildMatchThunkActions:y}=kce({baseQuery:t,reducerPath:r,context:u,api:e,serializeQueryArgs:i,assertTagType:d}),{reducer:g,actions:b}=Pce({context:u,queryThunk:f,mutationThunk:h,reducerPath:r,assertTagType:d,config:{refetchOnFocus:a,refetchOnReconnect:l,refetchOnMountOrArgChange:s,keepUnusedDataFor:o,reducerPath:r,invalidationBehavior:c}});ka(e.util,{patchQueryData:p,updateQueryData:m,upsertQueryData:_,prefetch:v,resetApiState:b.resetApiState}),ka(e.internalActions,b);const{middleware:S,actions:w}=Vce({reducerPath:r,context:u,queryThunk:f,mutationThunk:h,api:e,assertTagType:d});ka(e.util,w),ka(e,{reducer:g,middleware:S});const{buildQuerySelector:C,buildMutationSelector:x,selectInvalidatedBy:k,selectCachedArgsForQuery:A}=Ice({serializeQueryArgs:i,reducerPath:r});ka(e.util,{selectInvalidatedBy:k,selectCachedArgsForQuery:A});const{buildInitiateQuery:R,buildInitiateMutation:L,getRunningMutationThunk:M,getRunningMutationsThunk:E,getRunningQueriesThunk:P,getRunningQueryThunk:O}=Ace({queryThunk:f,mutationThunk:h,api:e,serializeQueryArgs:i,context:u});return ka(e.util,{getRunningMutationThunk:M,getRunningMutationsThunk:E,getRunningQueryThunk:O,getRunningQueriesThunk:P}),{name:xI,injectEndpoint(F,$){var N;const D=e;(N=D.endpoints)[F]??(N[F]={}),vL($)?ka(D.endpoints[F],{name:F,select:C(F,$),initiate:R(F,$)},y(f,F)):Ece($)&&ka(D.endpoints[F],{name:F,select:x(),initiate:L(F)},y(h,F))}}}});function wI(e,t,n,r){const i=I.useMemo(()=>({queryArgs:e,serialized:typeof e=="object"?t({queryArgs:e,endpointDefinition:n,endpointName:r}):e}),[e,t,n,r]),o=I.useRef(i);return I.useEffect(()=>{o.current.serialized!==i.serialized&&(o.current=i)},[i]),o.current.serialized===i.serialized?o.current.queryArgs:e}var Kx=Symbol();function Xx(e){const t=I.useRef(e);return I.useEffect(()=>{Jv(t.current,e)||(t.current=e)},[e]),Jv(t.current,e)?t.current:e}var Ru=WeakMap?new WeakMap:void 0,Gce=({endpointName:e,queryArgs:t})=>{let n="";const r=Ru==null?void 0:Ru.get(t);if(typeof r=="string")n=r;else{const i=JSON.stringify(t,(o,s)=>_s(s)?Object.keys(s).sort().reduce((a,l)=>(a[l]=s[l],a),{}):s);_s(t)&&(Ru==null||Ru.set(t,i)),n=i}return`${e}(${n})`},Hce=typeof window<"u"&&window.document&&window.document.createElement?I.useLayoutEffect:I.useEffect,Wce=e=>e.isUninitialized?{...e,isUninitialized:!1,isFetching:!0,isLoading:e.data===void 0,status:pL.pending}:e;function qce({api:e,moduleOptions:{batch:t,hooks:{useDispatch:n,useSelector:r,useStore:i},unstable__sideEffectsInRender:o},serializeQueryArgs:s,context:a}){const l=o?h=>h():I.useEffect;return{buildQueryHooks:d,buildMutationHook:f,usePrefetch:u};function c(h,p,m){if(p!=null&&p.endpointName&&h.isUninitialized){const{endpointName:S}=p,w=a.endpointDefinitions[S];s({queryArgs:p.originalArgs,endpointDefinition:w,endpointName:S})===s({queryArgs:m,endpointDefinition:w,endpointName:S})&&(p=void 0)}let _=h.isSuccess?h.data:p==null?void 0:p.data;_===void 0&&(_=h.data);const v=_!==void 0,y=h.isLoading,g=!v&&y,b=h.isSuccess||y&&v;return{...h,data:_,currentData:h.data,isFetching:y,isLoading:g,isSuccess:b}}function u(h,p){const m=n(),_=Xx(p);return I.useCallback((v,y)=>m(e.util.prefetch(h,v,{..._,...y})),[h,m,_])}function d(h){const p=(v,{refetchOnReconnect:y,refetchOnFocus:g,refetchOnMountOrArgChange:b,skip:S=!1,pollingInterval:w=0}={})=>{const{initiate:C}=e.endpoints[h],x=n(),k=I.useRef();if(!k.current){const $=x(e.internalActions.internal_getRTKQSubscriptions());k.current=$}const A=wI(S?Sc:v,Gce,a.endpointDefinitions[h],h),R=Xx({refetchOnReconnect:y,refetchOnFocus:g,pollingInterval:w}),L=I.useRef(!1),M=I.useRef();let{queryCacheKey:E,requestId:P}=M.current||{},O=!1;E&&P&&(O=k.current.isRequestSubscribed(E,P));const F=!O&&L.current;return l(()=>{L.current=O}),l(()=>{F&&(M.current=void 0)},[F]),l(()=>{var N;const $=M.current;if(typeof process<"u",A===Sc){$==null||$.unsubscribe(),M.current=void 0;return}const D=(N=M.current)==null?void 0:N.subscriptionOptions;if(!$||$.arg!==A){$==null||$.unsubscribe();const z=x(C(A,{subscriptionOptions:R,forceRefetch:b}));M.current=z}else R!==D&&$.updateSubscriptionOptions(R)},[x,C,b,A,R,F]),I.useEffect(()=>()=>{var $;($=M.current)==null||$.unsubscribe(),M.current=void 0},[]),I.useMemo(()=>({refetch:()=>{var $;if(!M.current)throw new Error(yr(38));return($=M.current)==null?void 0:$.refetch()}}),[])},m=({refetchOnReconnect:v,refetchOnFocus:y,pollingInterval:g=0}={})=>{const{initiate:b}=e.endpoints[h],S=n(),[w,C]=I.useState(Kx),x=I.useRef(),k=Xx({refetchOnReconnect:v,refetchOnFocus:y,pollingInterval:g});l(()=>{var M,E;const L=(M=x.current)==null?void 0:M.subscriptionOptions;k!==L&&((E=x.current)==null||E.updateSubscriptionOptions(k))},[k]);const A=I.useRef(k);l(()=>{A.current=k},[k]);const R=I.useCallback(function(L,M=!1){let E;return t(()=>{var P;(P=x.current)==null||P.unsubscribe(),x.current=E=S(b(L,{subscriptionOptions:A.current,forceRefetch:!M})),C(L)}),E},[S,b]);return I.useEffect(()=>()=>{var L;(L=x==null?void 0:x.current)==null||L.unsubscribe()},[]),I.useEffect(()=>{w!==Kx&&!x.current&&R(w,!0)},[w,R]),I.useMemo(()=>[R,w],[R,w])},_=(v,{skip:y=!1,selectFromResult:g}={})=>{const{select:b}=e.endpoints[h],S=wI(y?Sc:v,s,a.endpointDefinitions[h],h),w=I.useRef(),C=I.useMemo(()=>fp([b(S),(L,M)=>M,L=>S],c),[b,S]),x=I.useMemo(()=>g?fp([C],g,{devModeChecks:{identityFunctionCheck:"never"}}):C,[C,g]),k=r(L=>x(L,w.current),Jv),A=i(),R=C(A.getState(),w.current);return Hce(()=>{w.current=R},[R]),k};return{useQueryState:_,useQuerySubscription:p,useLazyQuerySubscription:m,useLazyQuery(v){const[y,g]=m(v),b=_(g,{...v,skip:g===Kx}),S=I.useMemo(()=>({lastArg:g}),[g]);return I.useMemo(()=>[y,b,S],[y,b,S])},useQuery(v,y){const g=p(v,y),b=_(v,{selectFromResult:v===Sc||y!=null&&y.skip?void 0:Wce,...y}),{data:S,status:w,isLoading:C,isSuccess:x,isError:k,error:A}=b;return I.useDebugValue({data:S,status:w,isLoading:C,isSuccess:x,isError:k,error:A}),I.useMemo(()=>({...b,...g}),[b,g])}}}function f(h){return({selectFromResult:p,fixedCacheKey:m}={})=>{const{select:_,initiate:v}=e.endpoints[h],y=n(),[g,b]=I.useState();I.useEffect(()=>()=>{g!=null&&g.arg.fixedCacheKey||g==null||g.reset()},[g]);const S=I.useCallback(function(N){const z=y(v(N,{fixedCacheKey:m}));return b(z),z},[y,v,m]),{requestId:w}=g||{},C=I.useMemo(()=>_({fixedCacheKey:m,requestId:g==null?void 0:g.requestId}),[m,g,_]),x=I.useMemo(()=>p?fp([C],p):C,[p,C]),k=r(x,Jv),A=m==null?g==null?void 0:g.arg.originalArgs:void 0,R=I.useCallback(()=>{t(()=>{g&&b(void 0),m&&y(e.internalActions.removeMutationResult({requestId:w,fixedCacheKey:m}))})},[y,m,g,w]),{endpointName:L,data:M,status:E,isLoading:P,isSuccess:O,isError:F,error:$}=k;I.useDebugValue({endpointName:L,data:M,status:E,isLoading:P,isSuccess:O,isError:F,error:$});const D=I.useMemo(()=>({...k,originalArgs:A,reset:R}),[k,A,R]);return I.useMemo(()=>[S,D],[S,D])}}}function Kce(e){return e.type==="query"}function Xce(e){return e.type==="mutation"}function Qx(e){return e.replace(e[0],e[0].toUpperCase())}function W0(e,...t){return Object.assign(e,...t)}var Qce=Symbol(),Yce=({batch:e=iQ,hooks:t={useDispatch:eN,useSelector:Y$,useStore:J$},unstable__sideEffectsInRender:n=!1,...r}={})=>({name:Qce,init(i,{serializeQueryArgs:o},s){const a=i,{buildQueryHooks:l,buildMutationHook:c,usePrefetch:u}=qce({api:i,moduleOptions:{batch:e,hooks:t,unstable__sideEffectsInRender:n},serializeQueryArgs:o,context:s});return W0(a,{usePrefetch:u}),W0(s,{batch:e}),{injectEndpoint(d,f){if(Kce(f)){const{useQuery:h,useLazyQuery:p,useLazyQuerySubscription:m,useQueryState:_,useQuerySubscription:v}=l(d);W0(a.endpoints[d],{useQuery:h,useLazyQuery:p,useLazyQuerySubscription:m,useQueryState:_,useQuerySubscription:v}),i[`use${Qx(d)}Query`]=h,i[`useLazy${Qx(d)}Query`]=p}else if(Xce(f)){const h=c(d);W0(a.endpoints[d],{useMutation:h}),i[`use${Qx(d)}Mutation`]=h}}}}}),Zce=Mce(Uce(),Yce());const Jce=["AppVersion","AppConfig","Board","BoardImagesTotal","BoardAssetsTotal","Image","ImageNameList","ImageList","ImageMetadata","ImageWorkflow","ImageMetadataFromFile","IntermediatesCount","SessionQueueItem","SessionQueueStatus","SessionProcessorStatus","CurrentSessionQueueItem","NextSessionQueueItem","BatchStatus","InvocationCacheStatus","Model","T2IAdapterModel","MainModel","OnnxModel","VaeModel","IPAdapterModel","TextualInversionModel","ControlNetModel","LoRAModel","SDXLRefinerModel","Workflow","WorkflowsRecent"],Ir="LIST",eue=async(e,t,n)=>{const r=Yv.get(),i=Qv.get(),o=F5.get();return Cce({baseUrl:`${r??""}/api/v1`,prepareHeaders:a=>(i&&a.set("Authorization",`Bearer ${i}`),o&&a.set("project-id",o),a)})(e,t,n)},Lo=Zce({baseQuery:eue,reducerPath:"api",tagTypes:Jce,endpoints:()=>({})}),tue=e=>{const t=e?yp.stringify(e,{arrayFormat:"none"}):void 0;return t?`queue/${In.get()}/list?${t}`:`queue/${In.get()}/list`},pc=jo({selectId:e=>String(e.item_id),sortComparer:(e,t)=>e.priority>t.priority?-1:e.priorityt.item_id?1:0}),en=Lo.injectEndpoints({endpoints:e=>({enqueueBatch:e.mutation({query:t=>({url:`queue/${In.get()}/enqueue_batch`,body:t,method:"POST"}),invalidatesTags:["SessionQueueStatus","CurrentSessionQueueItem","NextSessionQueueItem"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),resumeProcessor:e.mutation({query:()=>({url:`queue/${In.get()}/processor/resume`,method:"PUT"}),invalidatesTags:["CurrentSessionQueueItem","SessionQueueStatus"]}),pauseProcessor:e.mutation({query:()=>({url:`queue/${In.get()}/processor/pause`,method:"PUT"}),invalidatesTags:["CurrentSessionQueueItem","SessionQueueStatus"]}),pruneQueue:e.mutation({query:()=>({url:`queue/${In.get()}/prune`,method:"PUT"}),invalidatesTags:["SessionQueueStatus","BatchStatus"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),clearQueue:e.mutation({query:()=>({url:`queue/${In.get()}/clear`,method:"PUT"}),invalidatesTags:["SessionQueueStatus","SessionProcessorStatus","BatchStatus","CurrentSessionQueueItem","NextSessionQueueItem"],onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}}}),getCurrentQueueItem:e.query({query:()=>({url:`queue/${In.get()}/current`,method:"GET"}),providesTags:t=>{const n=["CurrentSessionQueueItem"];return t&&n.push({type:"SessionQueueItem",id:t.item_id}),n}}),getNextQueueItem:e.query({query:()=>({url:`queue/${In.get()}/next`,method:"GET"}),providesTags:t=>{const n=["NextSessionQueueItem"];return t&&n.push({type:"SessionQueueItem",id:t.item_id}),n}}),getQueueStatus:e.query({query:()=>({url:`queue/${In.get()}/status`,method:"GET"}),providesTags:["SessionQueueStatus"]}),getBatchStatus:e.query({query:({batch_id:t})=>({url:`queue/${In.get()}/b/${t}/status`,method:"GET"}),providesTags:t=>t?[{type:"BatchStatus",id:t.batch_id}]:[]}),getQueueItem:e.query({query:t=>({url:`queue/${In.get()}/i/${t}`,method:"GET"}),providesTags:t=>t?[{type:"SessionQueueItem",id:t.item_id}]:[]}),cancelQueueItem:e.mutation({query:t=>({url:`queue/${In.get()}/i/${t}/cancel`,method:"PUT"}),onQueryStarted:async(t,{dispatch:n,queryFulfilled:r})=>{try{const{data:i}=await r;n(en.util.updateQueryData("listQueueItems",void 0,o=>{pc.updateOne(o,{id:String(t),changes:{status:i.status,completed_at:i.completed_at,updated_at:i.updated_at}})}))}catch{}},invalidatesTags:t=>t?[{type:"SessionQueueItem",id:t.item_id},{type:"BatchStatus",id:t.batch_id}]:[]}),cancelByBatchIds:e.mutation({query:t=>({url:`queue/${In.get()}/cancel_by_batch_ids`,method:"PUT",body:t}),onQueryStarted:async(t,n)=>{const{dispatch:r,queryFulfilled:i}=n;try{await i,q0(r)}catch{}},invalidatesTags:["SessionQueueStatus","BatchStatus"]}),listQueueItems:e.query({query:t=>({url:tue(t),method:"GET"}),serializeQueryArgs:()=>`queue/${In.get()}/list`,transformResponse:t=>pc.addMany(pc.getInitialState({has_more:t.has_more}),t.items),merge:(t,n)=>{pc.addMany(t,pc.getSelectors().selectAll(n)),t.has_more=n.has_more},forceRefetch:({currentArg:t,previousArg:n})=>t!==n,keepUnusedDataFor:60*5})})}),{useCancelByBatchIdsMutation:sVe,useEnqueueBatchMutation:aVe,usePauseProcessorMutation:lVe,useResumeProcessorMutation:cVe,useClearQueueMutation:uVe,usePruneQueueMutation:dVe,useGetCurrentQueueItemQuery:fVe,useGetQueueStatusQuery:hVe,useGetQueueItemQuery:pVe,useGetNextQueueItemQuery:gVe,useListQueueItemsQuery:mVe,useCancelQueueItemMutation:yVe,useGetBatchStatusQuery:vVe}=en,q0=e=>{e(en.util.updateQueryData("listQueueItems",void 0,t=>{pc.removeAll(t),t.has_more=!1})),e(rce()),e(en.endpoints.listQueueItems.initiate(void 0))},Uh={objects:[],stagingArea:{images:[],selectedImageIndex:-1}},SL={boundingBoxCoordinates:{x:0,y:0},boundingBoxDimensions:{width:512,height:512},boundingBoxPreviewFill:{r:0,g:0,b:0,a:.5},boundingBoxScaleMethod:"none",brushColor:{r:90,g:90,b:255,a:1},brushSize:50,colorPickerColor:{r:90,g:90,b:255,a:1},cursorPosition:null,futureLayerStates:[],isDrawing:!1,isMaskEnabled:!0,isMouseOverBoundingBox:!1,isMoveBoundingBoxKeyHeld:!1,isMoveStageKeyHeld:!1,isMovingBoundingBox:!1,isMovingStage:!1,isTransformingBoundingBox:!1,layer:"base",layerState:Uh,maskColor:{r:255,g:90,b:90,a:1},maxHistory:128,minimumStageScale:1,pastLayerStates:[],scaledBoundingBoxDimensions:{width:512,height:512},shouldAntialias:!0,shouldAutoSave:!1,shouldCropToBoundingBoxOnSave:!1,shouldDarkenOutsideBoundingBox:!1,shouldLockBoundingBox:!1,shouldPreserveMaskedArea:!1,shouldRestrictStrokesToBox:!0,shouldShowBoundingBox:!0,shouldShowBrush:!0,shouldShowBrushPreview:!1,shouldShowCanvasDebugInfo:!1,shouldShowCheckboardTransparency:!1,shouldShowGrid:!0,shouldShowIntermediates:!0,shouldShowStagingImage:!0,shouldShowStagingOutline:!0,shouldSnapToGrid:!0,stageCoordinates:{x:0,y:0},stageDimensions:{width:0,height:0},stageScale:1,tool:"brush",batchIds:[]},xL=jt({name:"canvas",initialState:SL,reducers:{setTool:(e,t)=>{const n=t.payload;e.tool=t.payload,n!=="move"&&(e.isTransformingBoundingBox=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1)},setLayer:(e,t)=>{e.layer=t.payload},toggleTool:e=>{const t=e.tool;t!=="move"&&(e.tool=t==="brush"?"eraser":"brush")},setMaskColor:(e,t)=>{e.maskColor=t.payload},setBrushColor:(e,t)=>{e.brushColor=t.payload},setBrushSize:(e,t)=>{e.brushSize=t.payload},clearMask:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.layerState.objects=e.layerState.objects.filter(t=>!rL(t)),e.futureLayerStates=[],e.shouldPreserveMaskedArea=!1},toggleShouldInvertMask:e=>{e.shouldPreserveMaskedArea=!e.shouldPreserveMaskedArea},toggleShouldShowMask:e=>{e.isMaskEnabled=!e.isMaskEnabled},setShouldPreserveMaskedArea:(e,t)=>{e.shouldPreserveMaskedArea=t.payload},setIsMaskEnabled:(e,t)=>{e.isMaskEnabled=t.payload,e.layer=t.payload?"mask":"base"},setShouldShowCheckboardTransparency:(e,t)=>{e.shouldShowCheckboardTransparency=t.payload},setShouldShowBrushPreview:(e,t)=>{e.shouldShowBrushPreview=t.payload},setShouldShowBrush:(e,t)=>{e.shouldShowBrush=t.payload},setCursorPosition:(e,t)=>{e.cursorPosition=t.payload},setInitialCanvasImage:(e,t)=>{const n=t.payload,{width:r,height:i}=n,{stageDimensions:o}=e,s={width:B0(el(r,64,512),64),height:B0(el(i,64,512),64)},a={x:Or(r/2-s.width/2,64),y:Or(i/2-s.height/2,64)};if(e.boundingBoxScaleMethod==="auto"){const u=Iu(s);e.scaledBoundingBoxDimensions=u}e.boundingBoxDimensions=s,e.boundingBoxCoordinates=a,e.pastLayerStates.push(Ge(e.layerState)),e.layerState={...Ge(Uh),objects:[{kind:"image",layer:"base",x:0,y:0,width:r,height:i,imageName:n.image_name}]},e.futureLayerStates=[],e.batchIds=[];const l=U0(o.width,o.height,r,i,G0),c=V0(o.width,o.height,0,0,r,i,l);e.stageScale=l,e.stageCoordinates=c},setBoundingBoxDimensions:(e,t)=>{const n=Zle(t.payload);if(e.boundingBoxDimensions=n,e.boundingBoxScaleMethod==="auto"){const r=Iu(n);e.scaledBoundingBoxDimensions=r}},flipBoundingBoxAxes:e=>{const[t,n]=[e.boundingBoxDimensions.width,e.boundingBoxDimensions.height],[r,i]=[e.scaledBoundingBoxDimensions.width,e.scaledBoundingBoxDimensions.height];e.boundingBoxDimensions={width:n,height:t},e.scaledBoundingBoxDimensions={width:i,height:r}},setBoundingBoxCoordinates:(e,t)=>{e.boundingBoxCoordinates=Yle(t.payload)},setStageCoordinates:(e,t)=>{e.stageCoordinates=t.payload},setBoundingBoxPreviewFill:(e,t)=>{e.boundingBoxPreviewFill=t.payload},setStageScale:(e,t)=>{e.stageScale=t.payload},setShouldDarkenOutsideBoundingBox:(e,t)=>{e.shouldDarkenOutsideBoundingBox=t.payload},setIsDrawing:(e,t)=>{e.isDrawing=t.payload},clearCanvasHistory:e=>{e.pastLayerStates=[],e.futureLayerStates=[]},setShouldLockBoundingBox:(e,t)=>{e.shouldLockBoundingBox=t.payload},toggleShouldLockBoundingBox:e=>{e.shouldLockBoundingBox=!e.shouldLockBoundingBox},setShouldShowBoundingBox:(e,t)=>{e.shouldShowBoundingBox=t.payload},setIsTransformingBoundingBox:(e,t)=>{e.isTransformingBoundingBox=t.payload},setIsMovingBoundingBox:(e,t)=>{e.isMovingBoundingBox=t.payload},setIsMouseOverBoundingBox:(e,t)=>{e.isMouseOverBoundingBox=t.payload},setIsMoveBoundingBoxKeyHeld:(e,t)=>{e.isMoveBoundingBoxKeyHeld=t.payload},setIsMoveStageKeyHeld:(e,t)=>{e.isMoveStageKeyHeld=t.payload},canvasBatchIdAdded:(e,t)=>{e.batchIds.push(t.payload)},canvasBatchIdsReset:e=>{e.batchIds=[]},stagingAreaInitialized:(e,t)=>{const{boundingBox:n}=t.payload;e.layerState.stagingArea={boundingBox:n,images:[],selectedImageIndex:-1}},addImageToStagingArea:(e,t)=>{const n=t.payload;!n||!e.layerState.stagingArea.boundingBox||(e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea.images.push({kind:"image",layer:"base",...e.layerState.stagingArea.boundingBox,imageName:n.image_name}),e.layerState.stagingArea.selectedImageIndex=e.layerState.stagingArea.images.length-1,e.futureLayerStates=[])},discardStagedImages:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.stagingArea=Ge(Ge(Uh)).stagingArea,e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0,e.batchIds=[]},addFillRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n,brushColor:r}=e;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"fillRect",layer:"base",...t,...n,color:r}),e.futureLayerStates=[]},addEraseRect:e=>{const{boundingBoxCoordinates:t,boundingBoxDimensions:n}=e;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState.objects.push({kind:"eraseRect",layer:"base",...t,...n}),e.futureLayerStates=[]},addLine:(e,t)=>{const{tool:n,layer:r,brushColor:i,brushSize:o,shouldRestrictStrokesToBox:s}=e;if(n==="move"||n==="colorPicker")return;const a=o/2,l=r==="base"&&n==="brush"?{color:i}:{};e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const c={kind:"line",layer:r,tool:n,strokeWidth:a,points:t.payload,...l};s&&(c.clip={...e.boundingBoxCoordinates,...e.boundingBoxDimensions}),e.layerState.objects.push(c),e.futureLayerStates=[]},addPointToCurrentLine:(e,t)=>{const n=e.layerState.objects.findLast(ece);n&&n.points.push(...t.payload)},undo:e=>{const t=e.pastLayerStates.pop();t&&(e.futureLayerStates.unshift(Ge(e.layerState)),e.futureLayerStates.length>e.maxHistory&&e.futureLayerStates.pop(),e.layerState=t)},redo:e=>{const t=e.futureLayerStates.shift();t&&(e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift(),e.layerState=t)},setShouldShowGrid:(e,t)=>{e.shouldShowGrid=t.payload},setIsMovingStage:(e,t)=>{e.isMovingStage=t.payload},setShouldSnapToGrid:(e,t)=>{e.shouldSnapToGrid=t.payload},setShouldAutoSave:(e,t)=>{e.shouldAutoSave=t.payload},setShouldShowIntermediates:(e,t)=>{e.shouldShowIntermediates=t.payload},resetCanvas:e=>{e.pastLayerStates.push(Ge(e.layerState)),e.layerState=Ge(Uh),e.futureLayerStates=[],e.batchIds=[]},canvasResized:(e,t)=>{const{width:n,height:r}=t.payload,i={width:Math.floor(n),height:Math.floor(r)};if(e.stageDimensions=i,!e.layerState.objects.find(Jle)){const o=U0(i.width,i.height,512,512,G0),s=V0(i.width,i.height,0,0,512,512,o),a={width:512,height:512};if(e.stageScale=o,e.stageCoordinates=s,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=a,e.boundingBoxScaleMethod==="auto"){const l=Iu(a);e.scaledBoundingBoxDimensions=l}}},resetCanvasView:(e,t)=>{const{contentRect:n,shouldScaleTo1:r}=t.payload,{stageDimensions:{width:i,height:o}}=e,{x:s,y:a,width:l,height:c}=n;if(l!==0&&c!==0){const u=r?1:U0(i,o,l,c,G0),d=V0(i,o,s,a,l,c,u);e.stageScale=u,e.stageCoordinates=d}else{const u=U0(i,o,512,512,G0),d=V0(i,o,0,0,512,512,u),f={width:512,height:512};if(e.stageScale=u,e.stageCoordinates=d,e.boundingBoxCoordinates={x:0,y:0},e.boundingBoxDimensions=f,e.boundingBoxScaleMethod==="auto"){const h=Iu(f);e.scaledBoundingBoxDimensions=h}}},nextStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex+1,n=e.layerState.stagingArea.images.length-1;e.layerState.stagingArea.selectedImageIndex=t>n?0:t},prevStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const t=e.layerState.stagingArea.selectedImageIndex-1,n=e.layerState.stagingArea.images.length-1;e.layerState.stagingArea.selectedImageIndex=t<0?n:t},commitStagingAreaImage:e=>{if(!e.layerState.stagingArea.images.length)return;const{images:t,selectedImageIndex:n}=e.layerState.stagingArea;e.pastLayerStates.push(Ge(e.layerState)),e.pastLayerStates.length>e.maxHistory&&e.pastLayerStates.shift();const r=t[n];r&&e.layerState.objects.push({...r}),e.layerState.stagingArea=Ge(Uh).stagingArea,e.futureLayerStates=[],e.shouldShowStagingOutline=!0,e.shouldShowStagingImage=!0,e.batchIds=[]},fitBoundingBoxToStage:e=>{const{boundingBoxDimensions:t,boundingBoxCoordinates:n,stageDimensions:r,stageScale:i}=e,o=r.width/i,s=r.height/i;if(n.x<0||n.x+t.width>o||n.y<0||n.y+t.height>s){const a={width:B0(el(o,64,512),64),height:B0(el(s,64,512),64)},l={x:Or(o/2-a.width/2,64),y:Or(s/2-a.height/2,64)};if(e.boundingBoxDimensions=a,e.boundingBoxCoordinates=l,e.boundingBoxScaleMethod==="auto"){const c=Iu(a);e.scaledBoundingBoxDimensions=c}}},setBoundingBoxScaleMethod:(e,t)=>{if(e.boundingBoxScaleMethod=t.payload,t.payload==="auto"){const n=Iu(e.boundingBoxDimensions);e.scaledBoundingBoxDimensions=n}},setScaledBoundingBoxDimensions:(e,t)=>{e.scaledBoundingBoxDimensions=t.payload},setShouldShowStagingImage:(e,t)=>{e.shouldShowStagingImage=t.payload},setShouldShowStagingOutline:(e,t)=>{e.shouldShowStagingOutline=t.payload},setShouldShowCanvasDebugInfo:(e,t)=>{e.shouldShowCanvasDebugInfo=t.payload},setShouldRestrictStrokesToBox:(e,t)=>{e.shouldRestrictStrokesToBox=t.payload},setShouldAntialias:(e,t)=>{e.shouldAntialias=t.payload},setShouldCropToBoundingBoxOnSave:(e,t)=>{e.shouldCropToBoundingBoxOnSave=t.payload},setColorPickerColor:(e,t)=>{e.colorPickerColor=t.payload},commitColorPickerColor:e=>{e.brushColor={...e.colorPickerColor,a:e.brushColor.a},e.tool="brush"},setMergedCanvas:(e,t)=>{e.pastLayerStates.push(Ge(e.layerState)),e.futureLayerStates=[],e.layerState.objects=[t.payload]},resetCanvasInteractionState:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMoveBoundingBoxKeyHeld=!1,e.isMoveStageKeyHeld=!1,e.isMovingBoundingBox=!1,e.isMovingStage=!1,e.isTransformingBoundingBox=!1},mouseLeftCanvas:e=>{e.cursorPosition=null,e.isDrawing=!1,e.isMouseOverBoundingBox=!1,e.isMovingBoundingBox=!1,e.isTransformingBoundingBox=!1}},extraReducers:e=>{e.addCase(d_,(t,n)=>{const r=n.payload.data.batch_status;t.batchIds.includes(r.batch_id)&&r.in_progress===0&&r.pending===0&&(t.batchIds=t.batchIds.filter(i=>i!==r.batch_id))}),e.addCase(Xle,(t,n)=>{const r=n.payload;r&&(t.boundingBoxDimensions.height=Or(t.boundingBoxDimensions.width/r,64),t.scaledBoundingBoxDimensions.height=Or(t.scaledBoundingBoxDimensions.width/r,64))}),e.addMatcher(en.endpoints.clearQueue.matchFulfilled,t=>{t.batchIds=[]}),e.addMatcher(en.endpoints.cancelByBatchIds.matchFulfilled,(t,n)=>{t.batchIds=t.batchIds.filter(r=>!n.meta.arg.originalArgs.batch_ids.includes(r))})}}),{addEraseRect:bVe,addFillRect:_Ve,addImageToStagingArea:nue,addLine:SVe,addPointToCurrentLine:xVe,clearCanvasHistory:wVe,clearMask:CVe,commitColorPickerColor:EVe,commitStagingAreaImage:rue,discardStagedImages:iue,fitBoundingBoxToStage:TVe,mouseLeftCanvas:AVe,nextStagingAreaImage:kVe,prevStagingAreaImage:PVe,redo:IVe,resetCanvas:dT,resetCanvasInteractionState:MVe,resetCanvasView:RVe,setBoundingBoxCoordinates:OVe,setBoundingBoxDimensions:CI,setBoundingBoxPreviewFill:$Ve,setBoundingBoxScaleMethod:NVe,flipBoundingBoxAxes:FVe,setBrushColor:DVe,setBrushSize:LVe,setColorPickerColor:BVe,setCursorPosition:zVe,setInitialCanvasImage:wL,setIsDrawing:jVe,setIsMaskEnabled:VVe,setIsMouseOverBoundingBox:UVe,setIsMoveBoundingBoxKeyHeld:GVe,setIsMoveStageKeyHeld:HVe,setIsMovingBoundingBox:WVe,setIsMovingStage:qVe,setIsTransformingBoundingBox:KVe,setLayer:XVe,setMaskColor:QVe,setMergedCanvas:oue,setShouldAutoSave:YVe,setShouldCropToBoundingBoxOnSave:ZVe,setShouldDarkenOutsideBoundingBox:JVe,setShouldLockBoundingBox:eUe,setShouldPreserveMaskedArea:tUe,setShouldShowBoundingBox:nUe,setShouldShowBrush:rUe,setShouldShowBrushPreview:iUe,setShouldShowCanvasDebugInfo:oUe,setShouldShowCheckboardTransparency:sUe,setShouldShowGrid:aUe,setShouldShowIntermediates:lUe,setShouldShowStagingImage:cUe,setShouldShowStagingOutline:uUe,setShouldSnapToGrid:dUe,setStageCoordinates:fUe,setStageScale:hUe,setTool:pUe,toggleShouldLockBoundingBox:gUe,toggleTool:mUe,undo:yUe,setScaledBoundingBoxDimensions:vUe,setShouldRestrictStrokesToBox:bUe,stagingAreaInitialized:sue,setShouldAntialias:_Ue,canvasResized:SUe,canvasBatchIdAdded:aue,canvasBatchIdsReset:lue}=xL.actions,cue=xL.reducer,uue={isModalOpen:!1,imagesToChange:[]},CL=jt({name:"changeBoardModal",initialState:uue,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToChangeSelected:(e,t)=>{e.imagesToChange=t.payload},changeBoardReset:e=>{e.imagesToChange=[],e.isModalOpen=!1}}}),{isModalOpenChanged:xUe,imagesToChangeSelected:wUe,changeBoardReset:CUe}=CL.actions,due=CL.reducer,fue={imagesToDelete:[],isModalOpen:!1},EL=jt({name:"deleteImageModal",initialState:fue,reducers:{isModalOpenChanged:(e,t)=>{e.isModalOpen=t.payload},imagesToDeleteSelected:(e,t)=>{e.imagesToDelete=t.payload},imageDeletionCanceled:e=>{e.imagesToDelete=[],e.isModalOpen=!1}}}),{isModalOpenChanged:fT,imagesToDeleteSelected:hue,imageDeletionCanceled:EUe}=EL.actions,pue=EL.reducer,hT={maxPrompts:100,combinatorial:!0,prompts:[],parsingError:void 0,isError:!1,isLoading:!1,seedBehaviour:"PER_ITERATION"},gue=hT,TL=jt({name:"dynamicPrompts",initialState:gue,reducers:{maxPromptsChanged:(e,t)=>{e.maxPrompts=t.payload},maxPromptsReset:e=>{e.maxPrompts=hT.maxPrompts},combinatorialToggled:e=>{e.combinatorial=!e.combinatorial},promptsChanged:(e,t)=>{e.prompts=t.payload},parsingErrorChanged:(e,t)=>{e.parsingError=t.payload},isErrorChanged:(e,t)=>{e.isError=t.payload},isLoadingChanged:(e,t)=>{e.isLoading=t.payload},seedBehaviourChanged:(e,t)=>{e.seedBehaviour=t.payload}}}),{maxPromptsChanged:mue,maxPromptsReset:yue,combinatorialToggled:vue,promptsChanged:bue,parsingErrorChanged:_ue,isErrorChanged:EI,isLoadingChanged:Yx,seedBehaviourChanged:TUe}=TL.actions,Sue=TL.reducer,Rn=["general"],Pr=["control","mask","user","other"],xue=100,K0=20,wue=(e,t)=>{const n=new Date(e),r=new Date(t);return n>r?1:n{if(!e)return!1;const n=_g.selectAll(e);if(n.length<=1)return!0;const r=[],i=[];for(let o=0;o=a}else{const o=i[i.length-1];if(!o)return!1;const s=new Date(t.created_at),a=new Date(o.created_at);return s>=a}},Fi=e=>Rn.includes(e.image_category)?Rn:Pr,Ot=jo({selectId:e=>e.image_name,sortComparer:(e,t)=>e.starred&&!t.starred?-1:!e.starred&&t.starred?1:wue(t.created_at,e.created_at)}),_g=Ot.getSelectors(),Vi=e=>`images/?${yp.stringify(e,{arrayFormat:"none"})}`,Qe=Lo.injectEndpoints({endpoints:e=>({listBoards:e.query({query:t=>({url:"boards/",params:t}),providesTags:t=>{const n=[{type:"Board",id:Ir}];return t&&n.push(...t.items.map(({board_id:r})=>({type:"Board",id:r}))),n}}),listAllBoards:e.query({query:()=>({url:"boards/",params:{all:!0}}),providesTags:t=>{const n=[{type:"Board",id:Ir}];return t&&n.push(...t.map(({board_id:r})=>({type:"Board",id:r}))),n}}),listAllImageNamesForBoard:e.query({query:t=>({url:`boards/${t}/image_names`}),providesTags:(t,n,r)=>[{type:"ImageNameList",id:r}],keepUnusedDataFor:0}),getBoardImagesTotal:e.query({query:t=>({url:Vi({board_id:t??"none",categories:Rn,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardImagesTotal",id:r??"none"}],transformResponse:t=>({total:t.total})}),getBoardAssetsTotal:e.query({query:t=>({url:Vi({board_id:t??"none",categories:Pr,is_intermediate:!1,limit:0,offset:0}),method:"GET"}),providesTags:(t,n,r)=>[{type:"BoardAssetsTotal",id:r??"none"}],transformResponse:t=>({total:t.total})}),createBoard:e.mutation({query:t=>({url:"boards/",method:"POST",params:{board_name:t}}),invalidatesTags:[{type:"Board",id:Ir}]}),updateBoard:e.mutation({query:({board_id:t,changes:n})=>({url:`boards/${t}`,method:"PATCH",body:n}),invalidatesTags:(t,n,r)=>[{type:"Board",id:r.board_id}]})})}),{useListBoardsQuery:AUe,useListAllBoardsQuery:kUe,useGetBoardImagesTotalQuery:PUe,useGetBoardAssetsTotalQuery:IUe,useCreateBoardMutation:MUe,useUpdateBoardMutation:RUe,useListAllImageNamesForBoardQuery:OUe}=Qe;var AL={},y_={},v_={};Object.defineProperty(v_,"__esModule",{value:!0});v_.createLogMethods=void 0;var Cue=function(){return{debug:console.debug.bind(console),error:console.error.bind(console),fatal:console.error.bind(console),info:console.info.bind(console),trace:console.debug.bind(console),warn:console.warn.bind(console)}};v_.createLogMethods=Cue;var pT={},b_={};Object.defineProperty(b_,"__esModule",{value:!0});b_.boolean=void 0;const Eue=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return e.valueOf()===1;case"[object Boolean]":return e.valueOf();default:return!1}};b_.boolean=Eue;var __={};Object.defineProperty(__,"__esModule",{value:!0});__.isBooleanable=void 0;const Tue=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};__.isBooleanable=Tue;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isBooleanable=e.boolean=void 0;const t=b_;Object.defineProperty(e,"boolean",{enumerable:!0,get:function(){return t.boolean}});const n=__;Object.defineProperty(e,"isBooleanable",{enumerable:!0,get:function(){return n.isBooleanable}})})(pT);var TI=Object.prototype.toString,kL=function(t){var n=TI.call(t),r=n==="[object Arguments]";return r||(r=n!=="[object Array]"&&t!==null&&typeof t=="object"&&typeof t.length=="number"&&t.length>=0&&TI.call(t.callee)==="[object Function]"),r},Zx,AI;function Aue(){if(AI)return Zx;AI=1;var e;if(!Object.keys){var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=kL,i=Object.prototype.propertyIsEnumerable,o=!i.call({toString:null},"toString"),s=i.call(function(){},"prototype"),a=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],l=function(f){var h=f.constructor;return h&&h.prototype===f},c={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},u=function(){if(typeof window>"u")return!1;for(var f in window)try{if(!c["$"+f]&&t.call(window,f)&&window[f]!==null&&typeof window[f]=="object")try{l(window[f])}catch{return!0}}catch{return!0}return!1}(),d=function(f){if(typeof window>"u"||!u)return l(f);try{return l(f)}catch{return!1}};e=function(h){var p=h!==null&&typeof h=="object",m=n.call(h)==="[object Function]",_=r(h),v=p&&n.call(h)==="[object String]",y=[];if(!p&&!m&&!_)throw new TypeError("Object.keys called on a non-object");var g=s&&m;if(v&&h.length>0&&!t.call(h,0))for(var b=0;b0)for(var S=0;S"u"||!On?qe:On(Uint8Array),Nc={"%AggregateError%":typeof AggregateError>"u"?qe:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?qe:ArrayBuffer,"%ArrayIteratorPrototype%":Ou&&On?On([][Symbol.iterator]()):qe,"%AsyncFromSyncIteratorPrototype%":qe,"%AsyncFunction%":qu,"%AsyncGenerator%":qu,"%AsyncGeneratorFunction%":qu,"%AsyncIteratorPrototype%":qu,"%Atomics%":typeof Atomics>"u"?qe:Atomics,"%BigInt%":typeof BigInt>"u"?qe:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?qe:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?qe:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?qe:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?qe:Float32Array,"%Float64Array%":typeof Float64Array>"u"?qe:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?qe:FinalizationRegistry,"%Function%":IL,"%GeneratorFunction%":qu,"%Int8Array%":typeof Int8Array>"u"?qe:Int8Array,"%Int16Array%":typeof Int16Array>"u"?qe:Int16Array,"%Int32Array%":typeof Int32Array>"u"?qe:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Ou&&On?On(On([][Symbol.iterator]())):qe,"%JSON%":typeof JSON=="object"?JSON:qe,"%Map%":typeof Map>"u"?qe:Map,"%MapIteratorPrototype%":typeof Map>"u"||!Ou||!On?qe:On(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?qe:Promise,"%Proxy%":typeof Proxy>"u"?qe:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?qe:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?qe:Set,"%SetIteratorPrototype%":typeof Set>"u"||!Ou||!On?qe:On(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?qe:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Ou&&On?On(""[Symbol.iterator]()):qe,"%Symbol%":Ou?Symbol:qe,"%SyntaxError%":ff,"%ThrowTypeError%":Kue,"%TypedArray%":Que,"%TypeError%":$d,"%Uint8Array%":typeof Uint8Array>"u"?qe:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?qe:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?qe:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?qe:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?qe:WeakMap,"%WeakRef%":typeof WeakRef>"u"?qe:WeakRef,"%WeakSet%":typeof WeakSet>"u"?qe:WeakSet};if(On)try{null.error}catch(e){var Yue=On(On(e));Nc["%Error.prototype%"]=Yue}var Zue=function e(t){var n;if(t==="%AsyncFunction%")n=Jx("async function () {}");else if(t==="%GeneratorFunction%")n=Jx("function* () {}");else if(t==="%AsyncGeneratorFunction%")n=Jx("async function* () {}");else if(t==="%AsyncGenerator%"){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if(t==="%AsyncIteratorPrototype%"){var i=e("%AsyncGenerator%");i&&On&&(n=On(i.prototype))}return Nc[t]=n,n},OI={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},ym=PL,E1=que,Jue=ym.call(Function.call,Array.prototype.concat),ede=ym.call(Function.apply,Array.prototype.splice),$I=ym.call(Function.call,String.prototype.replace),T1=ym.call(Function.call,String.prototype.slice),tde=ym.call(Function.call,RegExp.prototype.exec),nde=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,rde=/\\(\\)?/g,ide=function(t){var n=T1(t,0,1),r=T1(t,-1);if(n==="%"&&r!=="%")throw new ff("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&n!=="%")throw new ff("invalid intrinsic syntax, expected opening `%`");var i=[];return $I(t,nde,function(o,s,a,l){i[i.length]=a?$I(l,rde,"$1"):s||o}),i},ode=function(t,n){var r=t,i;if(E1(OI,r)&&(i=OI[r],r="%"+i[0]+"%"),E1(Nc,r)){var o=Nc[r];if(o===qu&&(o=Zue(r)),typeof o>"u"&&!n)throw new $d("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:o}}throw new ff("intrinsic "+t+" does not exist!")},sde=function(t,n){if(typeof t!="string"||t.length===0)throw new $d("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof n!="boolean")throw new $d('"allowMissing" argument must be a boolean');if(tde(/^%?[^%]*%?$/,t)===null)throw new ff("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=ide(t),i=r.length>0?r[0]:"",o=ode("%"+i+"%",n),s=o.name,a=o.value,l=!1,c=o.alias;c&&(i=c[0],ede(r,Jue([0,1],c)));for(var u=1,d=!0;u=r.length){var m=$c(a,f);d=!!m,d&&"get"in m&&!("originalValue"in m.get)?a=m.get:a=a[f]}else d=E1(a,f),a=a[f];d&&!l&&(Nc[s]=a)}}return a},ade=sde,W5=ade("%Object.defineProperty%",!0),q5=function(){if(W5)try{return W5({},"a",{value:1}),!0}catch{return!1}return!1};q5.hasArrayLengthDefineBug=function(){if(!q5())return null;try{return W5([],"length",{value:1}).length!==1}catch{return!0}};var lde=q5,cde=Iue,ude=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",dde=Object.prototype.toString,fde=Array.prototype.concat,ML=Object.defineProperty,hde=function(e){return typeof e=="function"&&dde.call(e)==="[object Function]"},pde=lde(),RL=ML&&pde,gde=function(e,t,n,r){if(t in e){if(r===!0){if(e[t]===n)return}else if(!hde(r)||!r())return}RL?ML(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n},OL=function(e,t){var n=arguments.length>2?arguments[2]:{},r=cde(t);ude&&(r=fde.call(r,Object.getOwnPropertySymbols(t)));for(var i=0;i":return t>e;case":<":return t=":return t>=e;case":<=":return t<=e;default:throw new Error("Unimplemented comparison operator: ".concat(n))}};C_.testComparisonRange=Dde;var E_={};Object.defineProperty(E_,"__esModule",{value:!0});E_.testRange=void 0;var Lde=function(e,t){return typeof e=="number"?!(et.max||e===t.max&&!t.maxInclusive):!1};E_.testRange=Lde;(function(e){var t=He&&He.__assign||function(){return t=Object.assign||function(u){for(var d,f=1,h=arguments.length;f0?{path:l.path,query:new RegExp("("+l.keywords.map(function(c){return(0,jde.escapeRegexString)(c.trim())}).join("|")+")")}:{path:l.path}})};T_.highlight=Ude;var A_={},zL={exports:{}};(function(e){(function(t,n){e.exports?e.exports=n():t.nearley=n()})(He,function(){function t(c,u,d){return this.id=++t.highestId,this.name=c,this.symbols=u,this.postprocess=d,this}t.highestId=0,t.prototype.toString=function(c){var u=typeof c>"u"?this.symbols.map(l).join(" "):this.symbols.slice(0,c).map(l).join(" ")+" ● "+this.symbols.slice(c).map(l).join(" ");return this.name+" → "+u};function n(c,u,d,f){this.rule=c,this.dot=u,this.reference=d,this.data=[],this.wantedBy=f,this.isComplete=this.dot===c.symbols.length}n.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},n.prototype.nextState=function(c){var u=new n(this.rule,this.dot+1,this.reference,this.wantedBy);return u.left=this,u.right=c,u.isComplete&&(u.data=u.build(),u.right=void 0),u},n.prototype.build=function(){var c=[],u=this;do c.push(u.right.data),u=u.left;while(u.left);return c.reverse(),c},n.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,s.fail))};function r(c,u){this.grammar=c,this.index=u,this.states=[],this.wants={},this.scannable=[],this.completed={}}r.prototype.process=function(c){for(var u=this.states,d=this.wants,f=this.completed,h=0;h0&&u.push(" ^ "+f+" more lines identical to this"),f=0,u.push(" "+m)),d=m}},s.prototype.getSymbolDisplay=function(c){return a(c)},s.prototype.buildFirstStateStack=function(c,u){if(u.indexOf(c)!==-1)return null;if(c.wantedBy.length===0)return[c];var d=c.wantedBy[0],f=[c].concat(u),h=this.buildFirstStateStack(d,f);return h===null?null:[c].concat(h)},s.prototype.save=function(){var c=this.table[this.current];return c.lexerState=this.lexerState,c},s.prototype.restore=function(c){var u=c.index;this.current=u,this.table[u]=c,this.table.splice(u+1),this.lexerState=c.lexerState,this.results=this.finish()},s.prototype.rewind=function(c){if(!this.options.keepHistory)throw new Error("set option `keepHistory` to enable rewinding");this.restore(this.table[c])},s.prototype.finish=function(){var c=[],u=this.grammar.start,d=this.table[this.table.length-1];return d.states.forEach(function(f){f.rule.name===u&&f.dot===f.rule.symbols.length&&f.reference===0&&f.data!==s.fail&&c.push(f)}),c.map(function(f){return f.data})};function a(c){var u=typeof c;if(u==="string")return c;if(u==="object"){if(c.literal)return JSON.stringify(c.literal);if(c instanceof RegExp)return"character matching "+c;if(c.type)return c.type+" token";if(c.test)return"token matching "+String(c.test);throw new Error("Unknown symbol type: "+c)}}function l(c){var u=typeof c;if(u==="string")return c;if(u==="object"){if(c.literal)return JSON.stringify(c.literal);if(c instanceof RegExp)return c.toString();if(c.type)return"%"+c.type;if(c.test)return"<"+String(c.test)+">";throw new Error("Unknown symbol type: "+c)}}return{Parser:s,Grammar:i,Rule:t}})})(zL);var Gde=zL.exports,tu={},jL={},Fl={};Fl.__esModule=void 0;Fl.__esModule=!0;var Hde=typeof Object.setPrototypeOf=="function",Wde=typeof Object.getPrototypeOf=="function",qde=typeof Object.defineProperty=="function",Kde=typeof Object.create=="function",Xde=typeof Object.prototype.hasOwnProperty=="function",Qde=function(t,n){Hde?Object.setPrototypeOf(t,n):t.__proto__=n};Fl.setPrototypeOf=Qde;var Yde=function(t){return Wde?Object.getPrototypeOf(t):t.__proto__||t.prototype};Fl.getPrototypeOf=Yde;var NI=!1,Zde=function e(t,n,r){if(qde&&!NI)try{Object.defineProperty(t,n,r)}catch{NI=!0,e(t,n,r)}else t[n]=r.value};Fl.defineProperty=Zde;var VL=function(t,n){return Xde?t.hasOwnProperty(t,n):t[n]===void 0};Fl.hasOwnProperty=VL;var Jde=function(t,n){if(Kde)return Object.create(t,n);var r=function(){};r.prototype=t;var i=new r;if(typeof n>"u")return i;if(typeof n=="null")throw new Error("PropertyDescriptors must not be null.");if(typeof n=="object")for(var o in n)VL(n,o)&&(i[o]=n[o].value);return i};Fl.objectCreate=Jde;(function(e){e.__esModule=void 0,e.__esModule=!0;var t=Fl,n=t.setPrototypeOf,r=t.getPrototypeOf,i=t.defineProperty,o=t.objectCreate,s=new Error().toString()==="[object Error]",a="";function l(c){var u=this.constructor,d=u.name||function(){var _=u.toString().match(/^function\s*([^\s(]+)/);return _===null?a||"Error":_[1]}(),f=d==="Error",h=f?a:d,p=Error.apply(this,arguments);if(n(p,r(this)),!(p instanceof u)||!(p instanceof l)){var p=this;Error.apply(this,arguments),i(p,"message",{configurable:!0,enumerable:!1,value:c,writable:!0})}if(i(p,"name",{configurable:!0,enumerable:!1,value:h,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(p,f?l:u),p.stack===void 0){var m=new Error(c);m.name=p.name,p.stack=m.stack}return s&&i(p,"toString",{configurable:!0,enumerable:!1,value:function(){return(this.name||"Error")+(typeof this.message>"u"?"":": "+this.message)},writable:!0}),p}a=l.name||"ExtendableError",l.prototype=o(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),e.ExtendableError=l,e.default=e.ExtendableError})(jL);var UL=He&&He.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},e(t,n)};return function(t,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(tu,"__esModule",{value:!0});tu.SyntaxError=tu.LiqeError=void 0;var efe=jL,GL=function(e){UL(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(efe.ExtendableError);tu.LiqeError=GL;var tfe=function(e){UL(t,e);function t(n,r,i,o){var s=e.call(this,n)||this;return s.message=n,s.offset=r,s.line=i,s.column=o,s}return t}(GL);tu.SyntaxError=tfe;var mT={},A1=He&&He.__assign||function(){return A1=Object.assign||function(e){for(var t,n=1,r=arguments.length;n"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$2"]},{name:"comparison_operator$subexpression$1$string$3",symbols:[{literal:":"},{literal:"<"}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$3"]},{name:"comparison_operator$subexpression$1$string$4",symbols:[{literal:":"},{literal:">"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$4"]},{name:"comparison_operator$subexpression$1$string$5",symbols:[{literal:":"},{literal:"<"},{literal:"="}],postprocess:function(e){return e.join("")}},{name:"comparison_operator$subexpression$1",symbols:["comparison_operator$subexpression$1$string$5"]},{name:"comparison_operator",symbols:["comparison_operator$subexpression$1"],postprocess:function(e,t){return{location:{start:t,end:t+e[0][0].length},type:"ComparisonOperator",operator:e[0][0]}}},{name:"regex",symbols:["regex_body","regex_flags"],postprocess:function(e){return e.join("")}},{name:"regex_body$ebnf$1",symbols:[]},{name:"regex_body$ebnf$1",symbols:["regex_body$ebnf$1","regex_body_char"],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_body",symbols:[{literal:"/"},"regex_body$ebnf$1",{literal:"/"}],postprocess:function(e){return"/"+e[1].join("")+"/"}},{name:"regex_body_char",symbols:[/[^\\]/],postprocess:Os},{name:"regex_body_char",symbols:[{literal:"\\"},/[^\\]/],postprocess:function(e){return"\\"+e[1]}},{name:"regex_flags",symbols:[]},{name:"regex_flags$ebnf$1",symbols:[/[gmiyusd]/]},{name:"regex_flags$ebnf$1",symbols:["regex_flags$ebnf$1",/[gmiyusd]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"regex_flags",symbols:["regex_flags$ebnf$1"],postprocess:function(e){return e[0].join("")}},{name:"unquoted_value$ebnf$1",symbols:[]},{name:"unquoted_value$ebnf$1",symbols:["unquoted_value$ebnf$1",/[a-zA-Z\.\-_*@#$]/],postprocess:function(e){return e[0].concat([e[1]])}},{name:"unquoted_value",symbols:[/[a-zA-Z_*@#$]/,"unquoted_value$ebnf$1"],postprocess:function(e){return e[0]+e[1].join("")}}],ParserStart:"main"};mT.default=nfe;var HL={},k_={},_m={};Object.defineProperty(_m,"__esModule",{value:!0});_m.isSafePath=void 0;var rfe=/^(\.(?:[_a-zA-Z][a-zA-Z\d_]*|\0|[1-9]\d*))+$/u,ife=function(e){return rfe.test(e)};_m.isSafePath=ife;Object.defineProperty(k_,"__esModule",{value:!0});k_.createGetValueFunctionBody=void 0;var ofe=_m,sfe=function(e){if(!(0,ofe.isSafePath)(e))throw new Error("Unsafe path.");var t="return subject"+e;return t.replace(/(\.(\d+))/g,".[$2]").replace(/\./g,"?.")};k_.createGetValueFunctionBody=sfe;(function(e){var t=He&&He.__assign||function(){return t=Object.assign||function(o){for(var s,a=1,l=arguments.length;a\d+) col (?\d+)/,ffe=function(e){if(e.trim()==="")return{location:{end:0,start:0},type:"EmptyExpression"};var t=new qL.default.Parser(ufe),n;try{n=t.feed(e).results}catch(o){if(typeof(o==null?void 0:o.message)=="string"&&typeof(o==null?void 0:o.offset)=="number"){var r=o.message.match(dfe);throw r?new afe.SyntaxError("Syntax error at line ".concat(r.groups.line," column ").concat(r.groups.column),o.offset,Number(r.groups.line),Number(r.groups.column)):o}throw o}if(n.length===0)throw new Error("Found no parsings.");if(n.length>1)throw new Error("Ambiguous results.");var i=(0,cfe.hydrateAst)(n[0]);return i};A_.parse=ffe;var P_={};Object.defineProperty(P_,"__esModule",{value:!0});P_.test=void 0;var hfe=vm,pfe=function(e,t){return(0,hfe.filter)(e,[t]).length===1};P_.test=pfe;var KL={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.serialize=void 0;var t=function(o,s){return s==="double"?'"'.concat(o,'"'):s==="single"?"'".concat(o,"'"):o},n=function(o){if(o.type==="LiteralExpression")return o.quoted&&typeof o.value=="string"?t(o.value,o.quotes):String(o.value);if(o.type==="RegexExpression")return String(o.value);if(o.type==="RangeExpression"){var s=o.range,a=s.min,l=s.max,c=s.minInclusive,u=s.maxInclusive;return"".concat(c?"[":"{").concat(a," TO ").concat(l).concat(u?"]":"}")}if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")},r=function(o){if(o.type!=="Tag")throw new Error("Expected a tag expression.");var s=o.field,a=o.expression,l=o.operator;if(s.type==="ImplicitField")return n(a);var c=s.quoted?t(s.name,s.quotes):s.name,u=" ".repeat(a.location.start-l.location.end);return c+l.operator+u+n(a)},i=function(o){if(o.type==="ParenthesizedExpression"){if(!("location"in o.expression))throw new Error("Expected location in expression.");if(!o.location.end)throw new Error("Expected location end.");var s=" ".repeat(o.expression.location.start-(o.location.start+1)),a=" ".repeat(o.location.end-o.expression.location.end-1);return"(".concat(s).concat((0,e.serialize)(o.expression)).concat(a,")")}if(o.type==="Tag")return r(o);if(o.type==="LogicalExpression"){var l="";return o.operator.type==="BooleanOperator"?(l+=" ".repeat(o.operator.location.start-o.left.location.end),l+=o.operator.operator,l+=" ".repeat(o.right.location.start-o.operator.location.end)):l=" ".repeat(o.right.location.start-o.left.location.end),"".concat((0,e.serialize)(o.left)).concat(l).concat((0,e.serialize)(o.right))}if(o.type==="UnaryOperator")return(o.operator==="NOT"?"NOT ":o.operator)+(0,e.serialize)(o.operand);if(o.type==="EmptyExpression")return"";throw new Error("Unexpected AST type.")};e.serialize=i})(KL);var I_={};Object.defineProperty(I_,"__esModule",{value:!0});I_.isSafeUnquotedExpression=void 0;var gfe=function(e){return/^[#$*@A-Z_a-z][#$*.@A-Z_a-z-]*$/.test(e)};I_.isSafeUnquotedExpression=gfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isSafeUnquotedExpression=e.serialize=e.SyntaxError=e.LiqeError=e.test=e.parse=e.highlight=e.filter=void 0;var t=vm;Object.defineProperty(e,"filter",{enumerable:!0,get:function(){return t.filter}});var n=T_;Object.defineProperty(e,"highlight",{enumerable:!0,get:function(){return n.highlight}});var r=A_;Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return r.parse}});var i=P_;Object.defineProperty(e,"test",{enumerable:!0,get:function(){return i.test}});var o=tu;Object.defineProperty(e,"LiqeError",{enumerable:!0,get:function(){return o.LiqeError}}),Object.defineProperty(e,"SyntaxError",{enumerable:!0,get:function(){return o.SyntaxError}});var s=KL;Object.defineProperty(e,"serialize",{enumerable:!0,get:function(){return s.serialize}});var a=I_;Object.defineProperty(e,"isSafeUnquotedExpression",{enumerable:!0,get:function(){return a.isSafeUnquotedExpression}})})(BL);var Sm={},XL={},nu={};Object.defineProperty(nu,"__esModule",{value:!0});nu.ROARR_LOG_FORMAT_VERSION=nu.ROARR_VERSION=void 0;nu.ROARR_VERSION="5.0.0";nu.ROARR_LOG_FORMAT_VERSION="2.0.0";var Ff={};Object.defineProperty(Ff,"__esModule",{value:!0});Ff.logLevels=void 0;Ff.logLevels={debug:20,error:50,fatal:60,info:30,trace:10,warn:40};var QL={},M_={};Object.defineProperty(M_,"__esModule",{value:!0});M_.hasOwnProperty=void 0;const mfe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);M_.hasOwnProperty=mfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.hasOwnProperty=void 0;var t=M_;Object.defineProperty(e,"hasOwnProperty",{enumerable:!0,get:function(){return t.hasOwnProperty}})})(QL);var R_={};Object.defineProperty(R_,"__esModule",{value:!0});R_.isBrowser=void 0;const yfe=()=>typeof window<"u";R_.isBrowser=yfe;var O_={};Object.defineProperty(O_,"__esModule",{value:!0});O_.isTruthy=void 0;const vfe=e=>["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());O_.isTruthy=vfe;var YL={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createMockLogger=void 0;const t=Ff,n=(i,o)=>(s,a,l,c,u,d,f,h,p,m)=>{i.child({logLevel:o})(s,a,l,c,u,d,f,h,p,m)},r=(i,o)=>{const s=()=>{};return s.adopt=async a=>a(),s.child=()=>(0,e.createMockLogger)(i,o),s.getContext=()=>({}),s.debug=n(s,t.logLevels.debug),s.debugOnce=n(s,t.logLevels.debug),s.error=n(s,t.logLevels.error),s.errorOnce=n(s,t.logLevels.error),s.fatal=n(s,t.logLevels.fatal),s.fatalOnce=n(s,t.logLevels.fatal),s.info=n(s,t.logLevels.info),s.infoOnce=n(s,t.logLevels.info),s.trace=n(s,t.logLevels.trace),s.traceOnce=n(s,t.logLevels.trace),s.warn=n(s,t.logLevels.warn),s.warnOnce=n(s,t.logLevels.warn),s};e.createMockLogger=r})(YL);var ZL={},$_={},N_={};Object.defineProperty(N_,"__esModule",{value:!0});N_.tokenize=void 0;const bfe=/(?:%(?([+0-]|-\+))?(?\d+)?(?\d+\$)?(?\.\d+)?(?[%BCESb-iosux]))|(\\%)/g,_fe=e=>{let t;const n=[];let r=0,i=0,o=null;for(;(t=bfe.exec(e))!==null;){t.index>i&&(o={literal:e.slice(i,t.index),type:"literal"},n.push(o));const s=t[0];i=t.index+s.length,s==="\\%"||s==="%%"?o&&o.type==="literal"?o.literal+="%":(o={literal:"%",type:"literal"},n.push(o)):t.groups&&(o={conversion:t.groups.conversion,flag:t.groups.flag||null,placeholder:s,position:t.groups.position?Number.parseInt(t.groups.position,10)-1:r++,precision:t.groups.precision?Number.parseInt(t.groups.precision.slice(1),10):null,type:"placeholder",width:t.groups.width?Number.parseInt(t.groups.width,10):null},n.push(o))}return i<=e.length-1&&(o&&o.type==="literal"?o.literal+=e.slice(i):n.push({literal:e.slice(i),type:"literal"})),n};N_.tokenize=_fe;Object.defineProperty($_,"__esModule",{value:!0});$_.createPrintf=void 0;const FI=pT,Sfe=N_,xfe=(e,t)=>t.placeholder,wfe=e=>{var t;const n=(o,s,a)=>a==="-"?o.padEnd(s," "):a==="-+"?((Number(o)>=0?"+":"")+o).padEnd(s," "):a==="+"?((Number(o)>=0?"+":"")+o).padStart(s," "):a==="0"?o.padStart(s,"0"):o.padStart(s," "),r=(t=e==null?void 0:e.formatUnboundExpression)!==null&&t!==void 0?t:xfe,i={};return(o,...s)=>{let a=i[o];a||(a=i[o]=Sfe.tokenize(o));let l="";for(const c of a)if(c.type==="literal")l+=c.literal;else{let u=s[c.position];if(u===void 0)l+=r(o,c,s);else if(c.conversion==="b")l+=FI.boolean(u)?"true":"false";else if(c.conversion==="B")l+=FI.boolean(u)?"TRUE":"FALSE";else if(c.conversion==="c")l+=u;else if(c.conversion==="C")l+=String(u).toUpperCase();else if(c.conversion==="i"||c.conversion==="d")u=String(Math.trunc(u)),c.width!==null&&(u=n(u,c.width,c.flag)),l+=u;else if(c.conversion==="e")l+=Number(u).toExponential();else if(c.conversion==="E")l+=Number(u).toExponential().toUpperCase();else if(c.conversion==="f")c.precision!==null&&(u=Number(u).toFixed(c.precision)),c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else if(c.conversion==="o")l+=(Number.parseInt(String(u),10)>>>0).toString(8);else if(c.conversion==="s")c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else if(c.conversion==="S")c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=String(u).toUpperCase();else if(c.conversion==="u")l+=Number.parseInt(String(u),10)>>>0;else if(c.conversion==="x")u=(Number.parseInt(String(u),10)>>>0).toString(16),c.width!==null&&(u=n(String(u),c.width,c.flag)),l+=u;else throw new Error("Unknown format specifier.")}return l}};$_.createPrintf=wfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.printf=e.createPrintf=void 0;const t=$_;Object.defineProperty(e,"createPrintf",{enumerable:!0,get:function(){return t.createPrintf}}),e.printf=t.createPrintf()})(ZL);var K5={exports:{}};(function(e,t){const{hasOwnProperty:n}=Object.prototype,r=_();r.configure=_,r.stringify=r,r.default=r,t.stringify=r,t.configure=_,e.exports=r;const i=/[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/;function o(v){return v.length<5e3&&!i.test(v)?`"${v}"`:JSON.stringify(v)}function s(v){if(v.length>200)return v.sort();for(let y=1;yg;)v[b]=v[b-1],b--;v[b]=g}return v}const a=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function l(v){return a.call(v)!==void 0&&v.length!==0}function c(v,y,g){v.length= 1`)}return g===void 0?1/0:g}function h(v){return v===1?"1 item":`${v} items`}function p(v){const y=new Set;for(const g of v)(typeof g=="string"||typeof g=="number")&&y.add(String(g));return y}function m(v){if(n.call(v,"strict")){const y=v.strict;if(typeof y!="boolean")throw new TypeError('The "strict" argument must be of type boolean');if(y)return g=>{let b=`Object can not safely be stringified. Received type ${typeof g}`;throw typeof g!="function"&&(b+=` (${g.toString()})`),new Error(b)}}}function _(v){v={...v};const y=m(v);y&&(v.bigint===void 0&&(v.bigint=!1),"circularValue"in v||(v.circularValue=Error));const g=u(v),b=d(v,"bigint"),S=d(v,"deterministic"),w=f(v,"maximumDepth"),C=f(v,"maximumBreadth");function x(M,E,P,O,F,$){let D=E[M];switch(typeof D=="object"&&D!==null&&typeof D.toJSON=="function"&&(D=D.toJSON(M)),D=O.call(E,M,D),typeof D){case"string":return o(D);case"object":{if(D===null)return"null";if(P.indexOf(D)!==-1)return g;let N="",z=",";const V=$;if(Array.isArray(D)){if(D.length===0)return"[]";if(wC){const be=D.length-C-1;N+=`${z}"... ${h(be)} not stringified"`}return F!==""&&(N+=` +${V}`),P.pop(),`[${N}]`}let H=Object.keys(D);const X=H.length;if(X===0)return"{}";if(wC){const q=X-C;N+=`${ee}"...":${te}"${h(q)} not stringified"`,ee=z}return F!==""&&ee.length>1&&(N=` +${$}${N} +${V}`),P.pop(),`{${N}}`}case"number":return isFinite(D)?String(D):y?y(D):"null";case"boolean":return D===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(D);default:return y?y(D):void 0}}function k(M,E,P,O,F,$){switch(typeof E=="object"&&E!==null&&typeof E.toJSON=="function"&&(E=E.toJSON(M)),typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(P.indexOf(E)!==-1)return g;const D=$;let N="",z=",";if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const j=E.length-C-1;N+=`${z}"... ${h(j)} not stringified"`}return F!==""&&(N+=` +${D}`),P.pop(),`[${N}]`}P.push(E);let V="";F!==""&&($+=F,z=`, +${$}`,V=" ");let H="";for(const X of O){const te=k(X,E[X],P,O,F,$);te!==void 0&&(N+=`${H}${o(X)}:${V}${te}`,H=z)}return F!==""&&H.length>1&&(N=` +${$}${N} +${D}`),P.pop(),`{${N}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function A(M,E,P,O,F){switch(typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(typeof E.toJSON=="function"){if(E=E.toJSON(M),typeof E!="object")return A(M,E,P,O,F);if(E===null)return"null"}if(P.indexOf(E)!==-1)return g;const $=F;if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const oe=E.length-C-1;te+=`${ee}"... ${h(oe)} not stringified"`}return te+=` +${$}`,P.pop(),`[${te}]`}let D=Object.keys(E);const N=D.length;if(N===0)return"{}";if(wC){const te=N-C;V+=`${H}"...": "${h(te)} not stringified"`,H=z}return H!==""&&(V=` +${F}${V} +${$}`),P.pop(),`{${V}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function R(M,E,P){switch(typeof E){case"string":return o(E);case"object":{if(E===null)return"null";if(typeof E.toJSON=="function"){if(E=E.toJSON(M),typeof E!="object")return R(M,E,P);if(E===null)return"null"}if(P.indexOf(E)!==-1)return g;let O="";if(Array.isArray(E)){if(E.length===0)return"[]";if(wC){const X=E.length-C-1;O+=`,"... ${h(X)} not stringified"`}return P.pop(),`[${O}]`}let F=Object.keys(E);const $=F.length;if($===0)return"{}";if(wC){const z=$-C;O+=`${D}"...":"${h(z)} not stringified"`}return P.pop(),`{${O}}`}case"number":return isFinite(E)?String(E):y?y(E):"null";case"boolean":return E===!0?"true":"false";case"undefined":return;case"bigint":if(b)return String(E);default:return y?y(E):void 0}}function L(M,E,P){if(arguments.length>1){let O="";if(typeof P=="number"?O=" ".repeat(Math.min(P,10)):typeof P=="string"&&(O=P.slice(0,10)),E!=null){if(typeof E=="function")return x("",{"":M},[],E,O,"");if(Array.isArray(E))return k("",M,[],p(E),O,"")}if(O.length!==0)return A("",M,[],O,"")}return R("",M,[])}return L}})(K5,K5.exports);var JL=K5.exports;(function(e){var t=He&&He.__importDefault||function(b){return b&&b.__esModule?b:{default:b}};Object.defineProperty(e,"__esModule",{value:!0}),e.createLogger=void 0;const n=nu,r=Ff,i=QL,o=R_,s=O_,a=YL,l=ZL,c=t(JL);let u=!1;const d=()=>globalThis.ROARR,f=()=>({messageContext:{},transforms:[]}),h=()=>{const b=d().asyncLocalStorage;if(!b)throw new Error("AsyncLocalContext is unavailable.");const S=b.getStore();return S||f()},p=()=>!!d().asyncLocalStorage,m=()=>{if(p()){const b=h();return(0,i.hasOwnProperty)(b,"sequenceRoot")&&(0,i.hasOwnProperty)(b,"sequence")&&typeof b.sequence=="number"?String(b.sequenceRoot)+"."+String(b.sequence++):String(d().sequence++)}return String(d().sequence++)},_=(b,S)=>(w,C,x,k,A,R,L,M,E,P)=>{b.child({logLevel:S})(w,C,x,k,A,R,L,M,E,P)},v=1e3,y=(b,S)=>(w,C,x,k,A,R,L,M,E,P)=>{const O=(0,c.default)({a:w,b:C,c:x,d:k,e:A,f:R,g:L,h:M,i:E,j:P,logLevel:S});if(!O)throw new Error("Expected key to be a string");const F=d().onceLog;F.has(O)||(F.add(O),F.size>v&&F.clear(),b.child({logLevel:S})(w,C,x,k,A,R,L,M,E,P))},g=(b,S={},w=[])=>{var C;if(!(0,o.isBrowser)()&&typeof process<"u"&&!(0,s.isTruthy)((C={}.ROARR_LOG)!==null&&C!==void 0?C:""))return(0,a.createMockLogger)(b,S);const x=(k,A,R,L,M,E,P,O,F,$)=>{const D=Date.now(),N=m();let z;p()?z=h():z=f();let V,H;if(typeof k=="string"?V={...z.messageContext,...S}:V={...z.messageContext,...S,...k},typeof k=="string"&&A===void 0)H=k;else if(typeof k=="string"){if(!k.includes("%"))throw new Error("When a string parameter is followed by other arguments, then it is assumed that you are attempting to format a message using printf syntax. You either forgot to add printf bindings or if you meant to add context to the log message, pass them in an object as the first parameter.");H=(0,l.printf)(k,A,R,L,M,E,P,O,F,$)}else{let te=A;if(typeof A!="string")if(A===void 0)te="";else throw new TypeError("Message must be a string. Received "+typeof A+".");H=(0,l.printf)(te,R,L,M,E,P,O,F,$)}let X={context:V,message:H,sequence:N,time:D,version:n.ROARR_LOG_FORMAT_VERSION};for(const te of[...z.transforms,...w])if(X=te(X),typeof X!="object"||X===null)throw new Error("Message transform function must return a message object.");b(X)};return x.child=k=>{let A;return p()?A=h():A=f(),typeof k=="function"?(0,e.createLogger)(b,{...A.messageContext,...S,...k},[k,...w]):(0,e.createLogger)(b,{...A.messageContext,...S,...k},w)},x.getContext=()=>{let k;return p()?k=h():k=f(),{...k.messageContext,...S}},x.adopt=async(k,A)=>{if(!p())return u===!1&&(u=!0,b({context:{logLevel:r.logLevels.warn,package:"roarr"},message:"async_hooks are unavailable; Roarr.adopt will not function as expected",sequence:m(),time:Date.now(),version:n.ROARR_LOG_FORMAT_VERSION})),k();const R=h();let L;(0,i.hasOwnProperty)(R,"sequenceRoot")&&(0,i.hasOwnProperty)(R,"sequence")&&typeof R.sequence=="number"?L=R.sequenceRoot+"."+String(R.sequence++):L=String(d().sequence++);let M={...R.messageContext};const E=[...R.transforms];typeof A=="function"?E.push(A):M={...M,...A};const P=d().asyncLocalStorage;if(!P)throw new Error("Async local context unavailable.");return P.run({messageContext:M,sequence:0,sequenceRoot:L,transforms:E},()=>k())},x.debug=_(x,r.logLevels.debug),x.debugOnce=y(x,r.logLevels.debug),x.error=_(x,r.logLevels.error),x.errorOnce=y(x,r.logLevels.error),x.fatal=_(x,r.logLevels.fatal),x.fatalOnce=y(x,r.logLevels.fatal),x.info=_(x,r.logLevels.info),x.infoOnce=y(x,r.logLevels.info),x.trace=_(x,r.logLevels.trace),x.traceOnce=y(x,r.logLevels.trace),x.warn=_(x,r.logLevels.warn),x.warnOnce=y(x,r.logLevels.warn),x};e.createLogger=g})(XL);var F_={},Cfe=function(t,n){for(var r=t.split("."),i=n.split("."),o=0;o<3;o++){var s=Number(r[o]),a=Number(i[o]);if(s>a)return 1;if(a>s)return-1;if(!isNaN(s)&&isNaN(a))return 1;if(isNaN(s)&&!isNaN(a))return-1}return 0},Efe=He&&He.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(F_,"__esModule",{value:!0});F_.createRoarrInitialGlobalStateBrowser=void 0;const DI=nu,LI=Efe(Cfe),Tfe=e=>{const t=(e.versions||[]).concat();return t.length>1&&t.sort(LI.default),t.includes(DI.ROARR_VERSION)||t.push(DI.ROARR_VERSION),t.sort(LI.default),{sequence:0,...e,versions:t}};F_.createRoarrInitialGlobalStateBrowser=Tfe;var D_={};Object.defineProperty(D_,"__esModule",{value:!0});D_.stringify=void 0;const Afe=JL,kfe=(0,Afe.configure)({deterministic:!1,maximumBreadth:10,maximumDepth:10,strict:!1}),Pfe=e=>{var t;try{return(t=kfe(e))!==null&&t!==void 0?t:""}catch(n){throw console.error("[roarr] could not serialize value",e),n}};D_.stringify=Pfe;var L_={};Object.defineProperty(L_,"__esModule",{value:!0});L_.getLogLevelName=void 0;const Ife=e=>e<=10?"trace":e<=20?"debug":e<=30?"info":e<=40?"warn":e<=50?"error":"fatal";L_.getLogLevelName=Ife;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.getLogLevelName=e.logLevels=e.Roarr=e.ROARR=void 0;const t=XL,n=F_,r=D_,i=(0,n.createRoarrInitialGlobalStateBrowser)(globalThis.ROARR||{});e.ROARR=i,globalThis.ROARR=i;const o=c=>(0,r.stringify)(c),s=(0,t.createLogger)(c=>{var u;i.write&&i.write(((u=i.serializeMessage)!==null&&u!==void 0?u:o)(c))});e.Roarr=s;var a=Ff;Object.defineProperty(e,"logLevels",{enumerable:!0,get:function(){return a.logLevels}});var l=L_;Object.defineProperty(e,"getLogLevelName",{enumerable:!0,get:function(){return l.getLogLevelName}})})(Sm);var BI=He&&He.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i0?m("%c ".concat(p," %c").concat(f?" [".concat(String(f),"]:"):"","%c ").concat(c.message," %O"),v,y,g,h):m("%c ".concat(p," %c").concat(f?" [".concat(String(f),"]:"):"","%c ").concat(c.message),v,y,g)}}:function(l){var c=JSON.parse(l),u=c.context,d=u.logLevel,f=u.namespace,h=BI(u,["logLevel","namespace"]);if(!(a&&!(0,X5.test)(a,c))){var p=(0,zI.getLogLevelName)(Number(d)),m=s[p];Object.keys(h).length>0?m("".concat(p," ").concat(f?" [".concat(String(f),"]:"):""," ").concat(c.message),h):m("".concat(p," ").concat(f?" [".concat(String(f),"]:"):""," ").concat(c.message))}}};y_.createLogWriter=Lfe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.createLogWriter=void 0;var t=y_;Object.defineProperty(e,"createLogWriter",{enumerable:!0,get:function(){return t.createLogWriter}})})(AL);Sm.ROARR.write=AL.createLogWriter();const eB={};Sm.Roarr.child(eB);const B_=to(Sm.Roarr.child(eB)),ue=e=>B_.get().child({namespace:e}),$Ue=["trace","debug","info","warn","error","fatal"],NUe={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},tB=T.object({lora:eT.deepPartial(),weight:T.number()}),Bfe=xle.deepPartial(),zfe=wle.deepPartial(),jfe=Cle.deepPartial(),Vfe=KD.deepPartial(),Ufe=T.union([HD.deepPartial(),WD.deepPartial()]),Gfe=J4.deepPartial(),Hfe=T.object({app_version:T.string().nullish().catch(null),generation_mode:T.string().nullish().catch(null),created_by:T.string().nullish().catch(null),positive_prompt:T.string().nullish().catch(null),negative_prompt:T.string().nullish().catch(null),width:T.number().int().nullish().catch(null),height:T.number().int().nullish().catch(null),seed:T.number().int().nullish().catch(null),rand_device:T.string().nullish().catch(null),cfg_scale:T.number().nullish().catch(null),cfg_rescale_multiplier:T.number().nullish().catch(null),steps:T.number().int().nullish().catch(null),scheduler:T.string().nullish().catch(null),clip_skip:T.number().int().nullish().catch(null),model:Ufe.nullish().catch(null),controlnets:T.array(Bfe).nullish().catch(null),ipAdapters:T.array(zfe).nullish().catch(null),t2iAdapters:T.array(jfe).nullish().catch(null),loras:T.array(tB).nullish().catch(null),vae:Gfe.nullish().catch(null),strength:T.number().nullish().catch(null),hrf_enabled:T.boolean().nullish().catch(null),hrf_strength:T.number().nullish().catch(null),hrf_method:T.string().nullish().catch(null),init_image:T.string().nullish().catch(null),positive_style_prompt:T.string().nullish().catch(null),negative_style_prompt:T.string().nullish().catch(null),refiner_model:Vfe.nullish().catch(null),refiner_cfg_scale:T.number().nullish().catch(null),refiner_steps:T.number().int().nullish().catch(null),refiner_scheduler:T.string().nullish().catch(null),refiner_positive_aesthetic_score:T.number().nullish().catch(null),refiner_negative_aesthetic_score:T.number().nullish().catch(null),refiner_start:T.number().nullish().catch(null)}).passthrough(),ce=Lo.injectEndpoints({endpoints:e=>({listImages:e.query({query:t=>({url:Vi(t),method:"GET"}),providesTags:(t,n,{board_id:r,categories:i})=>[{type:"ImageList",id:Vi({board_id:r,categories:i})}],serializeQueryArgs:({queryArgs:t})=>{const{board_id:n,categories:r}=t;return Vi({board_id:n,categories:r})},transformResponse(t){const{items:n}=t;return Ot.addMany(Ot.getInitialState(),n)},merge:(t,n)=>{Ot.addMany(t,_g.selectAll(n))},forceRefetch({currentArg:t,previousArg:n}){return(t==null?void 0:t.offset)!==(n==null?void 0:n.offset)},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;_g.selectAll(i).forEach(o=>{n(ce.util.upsertQueryData("getImageDTO",o.image_name,o))})}catch{}},keepUnusedDataFor:86400}),getIntermediatesCount:e.query({query:()=>({url:"images/intermediates"}),providesTags:["IntermediatesCount"]}),clearIntermediates:e.mutation({query:()=>({url:"images/intermediates",method:"DELETE"}),invalidatesTags:["IntermediatesCount"]}),getImageDTO:e.query({query:t=>({url:`images/i/${t}`}),providesTags:(t,n,r)=>[{type:"Image",id:r}],keepUnusedDataFor:86400}),getImageMetadata:e.query({query:t=>({url:`images/i/${t}/metadata`}),providesTags:(t,n,r)=>[{type:"ImageMetadata",id:r}],transformResponse:t=>{if(t){const n=Hfe.safeParse(t);if(n.success)return n.data;ue("images").warn("Problem parsing metadata")}},keepUnusedDataFor:86400}),getImageWorkflow:e.query({query:t=>({url:`images/i/${t}/workflow`}),providesTags:(t,n,r)=>[{type:"ImageWorkflow",id:r}],keepUnusedDataFor:86400}),deleteImage:e.mutation({query:({image_name:t})=>({url:`images/i/${t}`,method:"DELETE"}),async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){const{image_name:i,board_id:o}=t,s=Pr.includes(t.image_category),a={board_id:o??"none",categories:Fi(t)},l=[];l.push(n(ce.util.updateQueryData("listImages",a,c=>{Ot.removeOne(c,i)}))),l.push(n(Qe.util.updateQueryData(s?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",c=>{c.total=Math.max(c.total-1,0)})));try{await r}catch{l.forEach(c=>{c.undo()})}}}),deleteImages:e.mutation({query:({imageDTOs:t})=>({url:"images/delete",method:"POST",body:{image_names:t.map(r=>r.image_name)}}),async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;i.deleted_images.length{const a=o[s];if(a){const l={board_id:a.board_id??"none",categories:Fi(a)};n(ce.util.updateQueryData("listImages",l,u=>{Ot.removeOne(u,s)}));const c=Pr.includes(a.image_category);n(Qe.util.updateQueryData(c?"getBoardAssetsTotal":"getBoardImagesTotal",a.board_id??"none",u=>{u.total=Math.max(u.total-1,0)}))}})}catch{}}}),changeImageIsIntermediate:e.mutation({query:({imageDTO:t,is_intermediate:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{is_intermediate:n}}),async onQueryStarted({imageDTO:t,is_intermediate:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[];s.push(r(ce.util.updateQueryData("getImageDTO",t.image_name,c=>{Object.assign(c,{is_intermediate:n})})));const a=Fi(t),l=Pr.includes(t.image_category);if(n)s.push(r(ce.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:a},c=>{Ot.removeOne(c,t.image_name)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",c=>{c.total=Math.max(c.total-1,0)})));else{s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",p=>{p.total+=1})));const c={board_id:t.board_id??"none",categories:a},u=ce.endpoints.listImages.select(c)(o()),{data:d}=Rn.includes(t.image_category)?Qe.endpoints.getBoardImagesTotal.select(t.board_id??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(o()),f=u.data&&u.data.ids.length>=((d==null?void 0:d.total)??0),h=Xl(u.data,t);(f||h)&&s.push(r(ce.util.updateQueryData("listImages",c,p=>{Ot.upsertOne(p,t)})))}try{await i}catch{s.forEach(c=>c.undo())}}}),changeImageSessionId:e.mutation({query:({imageDTO:t,session_id:n})=>({url:`images/i/${t.image_name}`,method:"PATCH",body:{session_id:n}}),async onQueryStarted({imageDTO:t,session_id:n},{dispatch:r,queryFulfilled:i}){const o=[];o.push(r(ce.util.updateQueryData("getImageDTO",t.image_name,s=>{Object.assign(s,{session_id:n})})));try{await i}catch{o.forEach(s=>s.undo())}}}),starImages:e.mutation({query:({imageDTOs:t})=>({url:"images/star",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{if(r[0]){const i=Fi(r[0]),o=r[0].board_id??void 0;return[{type:"ImageList",id:Vi({board_id:o,categories:i})},{type:"Board",id:o}]}return[]},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,s=t.filter(c=>o.updated_image_names.includes(c.image_name));if(!s[0])return;const a=Fi(s[0]),l=s[0].board_id;s.forEach(c=>{const{image_name:u}=c;n(ce.util.updateQueryData("getImageDTO",u,_=>{_.starred=!0}));const d={board_id:l??"none",categories:a},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(l??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,c):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...c,starred:!0})}))})}catch{}}}),unstarImages:e.mutation({query:({imageDTOs:t})=>({url:"images/unstar",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{if(r[0]){const i=Fi(r[0]),o=r[0].board_id??void 0;return[{type:"ImageList",id:Vi({board_id:o,categories:i})},{type:"Board",id:o}]}return[]},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,s=t.filter(c=>o.updated_image_names.includes(c.image_name));if(!s[0])return;const a=Fi(s[0]),l=s[0].board_id;s.forEach(c=>{const{image_name:u}=c;n(ce.util.updateQueryData("getImageDTO",u,_=>{_.starred=!1}));const d={board_id:l??"none",categories:a},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(l??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,c):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...c,starred:!1})}))})}catch{}}}),uploadImage:e.mutation({query:({file:t,image_category:n,is_intermediate:r,session_id:i,board_id:o,crop_visible:s})=>{const a=new FormData;return a.append("file",t),{url:"images/upload",method:"POST",body:a,params:{image_category:n,is_intermediate:r,session_id:i,board_id:o==="none"?void 0:o,crop_visible:s}}},async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r;if(i.is_intermediate)return;n(ce.util.upsertQueryData("getImageDTO",i.image_name,i));const o=Fi(i);n(ce.util.updateQueryData("listImages",{board_id:i.board_id??"none",categories:o},s=>{Ot.addOne(s,i)})),n(Qe.util.updateQueryData("getBoardAssetsTotal",i.board_id??"none",s=>{s.total+=1}))}catch{}}}),deleteBoard:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE"}),invalidatesTags:()=>[{type:"Board",id:Ir},{type:"ImageList",id:Vi({board_id:"none",categories:Rn})},{type:"ImageList",id:Vi({board_id:"none",categories:Pr})}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r,{deleted_board_images:o}=i;o.forEach(l=>{n(ce.util.updateQueryData("getImageDTO",l,c=>{c.board_id=void 0}))}),n(Qe.util.updateQueryData("getBoardAssetsTotal",t,l=>{l.total=0})),n(Qe.util.updateQueryData("getBoardImagesTotal",t,l=>{l.total=0}));const s=[{categories:Rn},{categories:Pr}],a=o.map(l=>({id:l,changes:{board_id:void 0}}));s.forEach(l=>{n(ce.util.updateQueryData("listImages",l,c=>{Ot.updateMany(c,a)}))})}catch{}}}),deleteBoardAndImages:e.mutation({query:t=>({url:`boards/${t}`,method:"DELETE",params:{include_images:!0}}),invalidatesTags:()=>[{type:"Board",id:Ir},{type:"ImageList",id:Vi({board_id:"none",categories:Rn})},{type:"ImageList",id:Vi({board_id:"none",categories:Pr})}],async onQueryStarted(t,{dispatch:n,queryFulfilled:r}){try{const{data:i}=await r,{deleted_images:o}=i;[{categories:Rn},{categories:Pr}].forEach(a=>{n(ce.util.updateQueryData("listImages",a,l=>{Ot.removeMany(l,o)}))}),n(Qe.util.updateQueryData("getBoardAssetsTotal",t,a=>{a.total=0})),n(Qe.util.updateQueryData("getBoardImagesTotal",t,a=>{a.total=0}))}catch{}}}),addImageToBoard:e.mutation({query:({board_id:t,imageDTO:n})=>{const{image_name:r}=n;return{url:"board_images/",method:"POST",body:{board_id:t,image_name:r}}},invalidatesTags:(t,n,{board_id:r})=>[{type:"Board",id:r}],async onQueryStarted({board_id:t,imageDTO:n},{dispatch:r,queryFulfilled:i,getState:o}){const s=[],a=Fi(n),l=Pr.includes(n.image_category);if(s.push(r(ce.util.updateQueryData("getImageDTO",n.image_name,c=>{c.board_id=t}))),!n.is_intermediate){s.push(r(ce.util.updateQueryData("listImages",{board_id:n.board_id??"none",categories:a},p=>{Ot.removeOne(p,n.image_name)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",n.board_id??"none",p=>{p.total=Math.max(p.total-1,0)}))),s.push(r(Qe.util.updateQueryData(l?"getBoardAssetsTotal":"getBoardImagesTotal",t??"none",p=>{p.total+=1})));const c={board_id:t??"none",categories:a},u=ce.endpoints.listImages.select(c)(o()),{data:d}=Rn.includes(n.image_category)?Qe.endpoints.getBoardImagesTotal.select(n.board_id??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(n.board_id??"none")(o()),f=u.data&&u.data.ids.length>=((d==null?void 0:d.total)??0),h=Xl(u.data,n);(f||h)&&s.push(r(ce.util.updateQueryData("listImages",c,p=>{Ot.addOne(p,n)})))}try{await i}catch{s.forEach(c=>c.undo())}}}),removeImageFromBoard:e.mutation({query:({imageDTO:t})=>{const{image_name:n}=t;return{url:"board_images/",method:"DELETE",body:{image_name:n}}},invalidatesTags:(t,n,{imageDTO:r})=>{const{board_id:i}=r;return[{type:"Board",id:i??"none"}]},async onQueryStarted({imageDTO:t},{dispatch:n,queryFulfilled:r,getState:i}){const o=Fi(t),s=[],a=Pr.includes(t.image_category);s.push(n(ce.util.updateQueryData("getImageDTO",t.image_name,h=>{h.board_id=void 0}))),s.push(n(ce.util.updateQueryData("listImages",{board_id:t.board_id??"none",categories:o},h=>{Ot.removeOne(h,t.image_name)}))),s.push(n(Qe.util.updateQueryData(a?"getBoardAssetsTotal":"getBoardImagesTotal",t.board_id??"none",h=>{h.total=Math.max(h.total-1,0)}))),s.push(n(Qe.util.updateQueryData(a?"getBoardAssetsTotal":"getBoardImagesTotal","none",h=>{h.total+=1})));const l={board_id:"none",categories:o},c=ce.endpoints.listImages.select(l)(i()),{data:u}=Rn.includes(t.image_category)?Qe.endpoints.getBoardImagesTotal.select(t.board_id??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(t.board_id??"none")(i()),d=c.data&&c.data.ids.length>=((u==null?void 0:u.total)??0),f=Xl(c.data,t);(d||f)&&s.push(n(ce.util.updateQueryData("listImages",l,h=>{Ot.upsertOne(h,t)})));try{await r}catch{s.forEach(h=>h.undo())}}}),addImagesToBoard:e.mutation({query:({board_id:t,imageDTOs:n})=>({url:"board_images/batch",method:"POST",body:{image_names:n.map(r=>r.image_name),board_id:t}}),invalidatesTags:(t,n,{board_id:r})=>[{type:"Board",id:r??"none"}],async onQueryStarted({board_id:t,imageDTOs:n},{dispatch:r,queryFulfilled:i,getState:o}){try{const{data:s}=await i,{added_image_names:a}=s;a.forEach(l=>{r(ce.util.updateQueryData("getImageDTO",l,y=>{y.board_id=t==="none"?void 0:t}));const c=n.find(y=>y.image_name===l);if(!c)return;const u=Fi(c),d=c.board_id,f=Pr.includes(c.image_category);r(ce.util.updateQueryData("listImages",{board_id:d??"none",categories:u},y=>{Ot.removeOne(y,c.image_name)})),r(Qe.util.updateQueryData(f?"getBoardAssetsTotal":"getBoardImagesTotal",d??"none",y=>{y.total=Math.max(y.total-1,0)})),r(Qe.util.updateQueryData(f?"getBoardAssetsTotal":"getBoardImagesTotal",t??"none",y=>{y.total+=1}));const h={board_id:t,categories:u},p=ce.endpoints.listImages.select(h)(o()),{data:m}=Rn.includes(c.image_category)?Qe.endpoints.getBoardImagesTotal.select(t??"none")(o()):Qe.endpoints.getBoardAssetsTotal.select(t??"none")(o()),_=p.data&&p.data.ids.length>=((m==null?void 0:m.total)??0),v=((m==null?void 0:m.total)??0)>=K0?Xl(p.data,c):!0;(_||v)&&r(ce.util.updateQueryData("listImages",h,y=>{Ot.upsertOne(y,{...c,board_id:t})}))})}catch{}}}),removeImagesFromBoard:e.mutation({query:({imageDTOs:t})=>({url:"board_images/batch/delete",method:"POST",body:{image_names:t.map(n=>n.image_name)}}),invalidatesTags:(t,n,{imageDTOs:r})=>{const i=[],o=[];return t==null||t.removed_image_names.forEach(s=>{var l;const a=(l=r.find(c=>c.image_name===s))==null?void 0:l.board_id;!a||i.includes(a)||o.push({type:"Board",id:a})}),o},async onQueryStarted({imageDTOs:t},{dispatch:n,queryFulfilled:r,getState:i}){try{const{data:o}=await r,{removed_image_names:s}=o;s.forEach(a=>{n(ce.util.updateQueryData("getImageDTO",a,_=>{_.board_id=void 0}));const l=t.find(_=>_.image_name===a);if(!l)return;const c=Fi(l),u=Pr.includes(l.image_category);n(ce.util.updateQueryData("listImages",{board_id:l.board_id??"none",categories:c},_=>{Ot.removeOne(_,l.image_name)})),n(Qe.util.updateQueryData(u?"getBoardAssetsTotal":"getBoardImagesTotal",l.board_id??"none",_=>{_.total=Math.max(_.total-1,0)})),n(Qe.util.updateQueryData(u?"getBoardAssetsTotal":"getBoardImagesTotal","none",_=>{_.total+=1}));const d={board_id:"none",categories:c},f=ce.endpoints.listImages.select(d)(i()),{data:h}=Rn.includes(l.image_category)?Qe.endpoints.getBoardImagesTotal.select(l.board_id??"none")(i()):Qe.endpoints.getBoardAssetsTotal.select(l.board_id??"none")(i()),p=f.data&&f.data.ids.length>=((h==null?void 0:h.total)??0),m=((h==null?void 0:h.total)??0)>=K0?Xl(f.data,l):!0;(p||m)&&n(ce.util.updateQueryData("listImages",d,_=>{Ot.upsertOne(_,{...l,board_id:"none"})}))})}catch{}}}),bulkDownloadImages:e.mutation({query:({image_names:t,board_id:n})=>({url:"images/download",method:"POST",body:{image_names:t,board_id:n}})})})}),{useGetIntermediatesCountQuery:FUe,useListImagesQuery:DUe,useLazyListImagesQuery:LUe,useGetImageDTOQuery:BUe,useGetImageMetadataQuery:zUe,useGetImageWorkflowQuery:jUe,useLazyGetImageWorkflowQuery:VUe,useDeleteImageMutation:UUe,useDeleteImagesMutation:GUe,useUploadImageMutation:HUe,useClearIntermediatesMutation:WUe,useAddImagesToBoardMutation:qUe,useRemoveImagesFromBoardMutation:KUe,useAddImageToBoardMutation:XUe,useRemoveImageFromBoardMutation:QUe,useChangeImageIsIntermediateMutation:YUe,useChangeImageSessionIdMutation:ZUe,useDeleteBoardAndImagesMutation:JUe,useDeleteBoardMutation:eGe,useStarImagesMutation:tGe,useUnstarImagesMutation:nGe,useBulkDownloadImagesMutation:rGe}=ce,nB={selection:[],shouldAutoSwitch:!0,autoAssignBoardOnClick:!0,autoAddBoardId:"none",galleryImageMinimumWidth:96,selectedBoardId:"none",galleryView:"images",boardSearchText:""},rB=jt({name:"gallery",initialState:nB,reducers:{imageSelected:(e,t)=>{e.selection=t.payload?[t.payload]:[]},selectionChanged:(e,t)=>{e.selection=YF(t.payload,n=>n.image_name)},shouldAutoSwitchChanged:(e,t)=>{e.shouldAutoSwitch=t.payload},setGalleryImageMinimumWidth:(e,t)=>{e.galleryImageMinimumWidth=t.payload},autoAssignBoardOnClickChanged:(e,t)=>{e.autoAssignBoardOnClick=t.payload},boardIdSelected:(e,t)=>{e.selectedBoardId=t.payload.boardId,e.galleryView="images"},autoAddBoardIdChanged:(e,t)=>{if(!t.payload){e.autoAddBoardId="none";return}e.autoAddBoardId=t.payload},galleryViewChanged:(e,t)=>{e.galleryView=t.payload},boardSearchTextChanged:(e,t)=>{e.boardSearchText=t.payload}},extraReducers:e=>{e.addMatcher(qfe,(t,n)=>{const r=n.meta.arg.originalArgs;r===t.selectedBoardId&&(t.selectedBoardId="none",t.galleryView="images"),r===t.autoAddBoardId&&(t.autoAddBoardId="none")}),e.addMatcher(Qe.endpoints.listAllBoards.matchFulfilled,(t,n)=>{const r=n.payload;t.autoAddBoardId&&(r.map(i=>i.board_id).includes(t.autoAddBoardId)||(t.autoAddBoardId="none"))})}}),{imageSelected:ps,shouldAutoSwitchChanged:iGe,autoAssignBoardOnClickChanged:oGe,setGalleryImageMinimumWidth:sGe,boardIdSelected:vp,autoAddBoardIdChanged:aGe,galleryViewChanged:Q5,selectionChanged:iB,boardSearchTextChanged:lGe}=rB.actions,Wfe=rB.reducer,qfe=br(ce.endpoints.deleteBoard.matchFulfilled,ce.endpoints.deleteBoardAndImages.matchFulfilled),VI={weight:.75},Kfe={loras:{}},oB=jt({name:"lora",initialState:Kfe,reducers:{loraAdded:(e,t)=>{const{model_name:n,id:r,base_model:i}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,...VI}},loraRecalled:(e,t)=>{const{model_name:n,id:r,base_model:i,weight:o}=t.payload;e.loras[r]={id:r,model_name:n,base_model:i,weight:o}},loraRemoved:(e,t)=>{const n=t.payload;delete e.loras[n]},lorasCleared:e=>{e.loras={}},loraWeightChanged:(e,t)=>{const{id:n,weight:r}=t.payload,i=e.loras[n];i&&(i.weight=r)},loraWeightReset:(e,t)=>{const n=t.payload,r=e.loras[n];r&&(r.weight=VI.weight)}}}),{loraAdded:cGe,loraRemoved:sB,loraWeightChanged:uGe,loraWeightReset:dGe,lorasCleared:fGe,loraRecalled:hGe}=oB.actions,Xfe=oB.reducer,Qfe={searchFolder:null,advancedAddScanModel:null},aB=jt({name:"modelmanager",initialState:Qfe,reducers:{setSearchFolder:(e,t)=>{e.searchFolder=t.payload},setAdvancedAddScanModel:(e,t)=>{e.advancedAddScanModel=t.payload}}}),{setSearchFolder:pGe,setAdvancedAddScanModel:gGe}=aB.actions,Yfe=aB.reducer,Zfe=he("nodes/textToImageGraphBuilt"),Jfe=he("nodes/imageToImageGraphBuilt"),lB=he("nodes/canvasGraphBuilt"),ehe=he("nodes/nodesGraphBuilt"),the=br(Zfe,Jfe,lB,ehe),nhe=he("nodes/workflowLoadRequested"),rhe=he("nodes/updateAllNodesRequested"),yT=he("workflow/workflowLoaded"),mGe=500,yGe=320,ihe="node-drag-handle",cB={dragHandle:`.${ihe}`},vGe={input:"inputs",output:"outputs"},bGe=["IPAdapterModelField","ControlNetModelField","LoRAModelField","MainModelField","ONNXModelField","SDXLMainModelField","SDXLRefinerModelField","VaeModelField","UNetField","VaeField","ClipField","T2IAdapterModelField","IPAdapterModelField"],_Ge={BoardField:"purple.500",BooleanField:"green.500",ClipField:"green.500",ColorField:"pink.300",ConditioningField:"cyan.500",ControlField:"teal.500",ControlNetModelField:"teal.500",EnumField:"blue.500",FloatField:"orange.500",ImageField:"purple.500",IntegerField:"red.500",IPAdapterField:"teal.500",IPAdapterModelField:"teal.500",LatentsField:"pink.500",LoRAModelField:"teal.500",MainModelField:"teal.500",ONNXModelField:"teal.500",SDXLMainModelField:"teal.500",SDXLRefinerModelField:"teal.500",StringField:"yellow.500",T2IAdapterField:"teal.500",T2IAdapterModelField:"teal.500",UNetField:"red.500",VaeField:"blue.500",VaeModelField:"teal.500"},ohe=T.enum(["connection","direct","any"]),she=T.enum(["none","textarea","slider"]),uB=T.object({id:T.string().trim().min(1),name:T.string().trim().min(1)}),Bn=uB.extend({fieldKind:T.literal("input"),label:T.string().nullish()}),zn=uB.extend({fieldKind:T.literal("output")}),dB=T.object({name:T.string().min(1),title:T.string().min(1),description:T.string().nullish(),ui_hidden:T.boolean(),ui_type:T.string().nullish(),ui_order:T.number().int().nullish()}),jn=dB.extend({fieldKind:T.literal("input"),input:ohe,required:T.boolean(),ui_component:she.nullish(),ui_choice_labels:T.record(T.string()).nullish()}),Vn=dB.extend({fieldKind:T.literal("output")}),Un=T.object({isCollection:T.boolean(),isCollectionOrScalar:T.boolean()}),ahe=T.object({nodeId:T.string().trim().min(1),fieldName:T.string().trim().min(1)}),xm=Un.extend({name:T.literal("IntegerField")}),z_=T.number().int(),fB=Bn.extend({type:xm,value:z_}),lhe=zn.extend({type:xm}),hB=jn.extend({type:xm,default:z_,multipleOf:T.number().int().optional(),maximum:T.number().int().optional(),exclusiveMaximum:T.number().int().optional(),minimum:T.number().int().optional(),exclusiveMinimum:T.number().int().optional()}),che=Vn.extend({type:xm}),SGe=e=>fB.safeParse(e).success,xGe=e=>hB.safeParse(e).success,wm=Un.extend({name:T.literal("FloatField")}),j_=T.number(),pB=Bn.extend({type:wm,value:j_}),uhe=zn.extend({type:wm}),gB=jn.extend({type:wm,default:j_,multipleOf:T.number().optional(),maximum:T.number().optional(),exclusiveMaximum:T.number().optional(),minimum:T.number().optional(),exclusiveMinimum:T.number().optional()}),dhe=Vn.extend({type:wm}),wGe=e=>pB.safeParse(e).success,CGe=e=>gB.safeParse(e).success,Cm=Un.extend({name:T.literal("StringField")}),V_=T.string(),mB=Bn.extend({type:Cm,value:V_}),fhe=zn.extend({type:Cm}),yB=jn.extend({type:Cm,default:V_,maxLength:T.number().int().optional(),minLength:T.number().int().optional()}),hhe=Vn.extend({type:Cm}),EGe=e=>mB.safeParse(e).success,TGe=e=>yB.safeParse(e).success,Em=Un.extend({name:T.literal("BooleanField")}),U_=T.boolean(),vB=Bn.extend({type:Em,value:U_}),phe=zn.extend({type:Em}),bB=jn.extend({type:Em,default:U_}),ghe=Vn.extend({type:Em}),AGe=e=>vB.safeParse(e).success,kGe=e=>bB.safeParse(e).success,Tm=Un.extend({name:T.literal("EnumField")}),G_=T.string(),_B=Bn.extend({type:Tm,value:G_}),mhe=zn.extend({type:Tm}),SB=jn.extend({type:Tm,default:G_,options:T.array(T.string()),labels:T.record(T.string()).optional()}),yhe=Vn.extend({type:Tm}),PGe=e=>_B.safeParse(e).success,IGe=e=>SB.safeParse(e).success,Am=Un.extend({name:T.literal("ImageField")}),H_=mm.optional(),xB=Bn.extend({type:Am,value:H_}),vhe=zn.extend({type:Am}),wB=jn.extend({type:Am,default:H_}),bhe=Vn.extend({type:Am}),vT=e=>xB.safeParse(e).success,MGe=e=>wB.safeParse(e).success,km=Un.extend({name:T.literal("BoardField")}),W_=yle.optional(),CB=Bn.extend({type:km,value:W_}),_he=zn.extend({type:km}),EB=jn.extend({type:km,default:W_}),She=Vn.extend({type:km}),RGe=e=>CB.safeParse(e).success,OGe=e=>EB.safeParse(e).success,Pm=Un.extend({name:T.literal("ColorField")}),q_=vle.optional(),TB=Bn.extend({type:Pm,value:q_}),xhe=zn.extend({type:Pm}),AB=jn.extend({type:Pm,default:q_}),whe=Vn.extend({type:Pm}),Che=e=>TB.safeParse(e).success,$Ge=e=>AB.safeParse(e).success,Im=Un.extend({name:T.literal("MainModelField")}),Df=qD.optional(),kB=Bn.extend({type:Im,value:Df}),Ehe=zn.extend({type:Im}),PB=jn.extend({type:Im,default:Df}),The=Vn.extend({type:Im}),NGe=e=>kB.safeParse(e).success,FGe=e=>PB.safeParse(e).success,Mm=Un.extend({name:T.literal("SDXLMainModelField")}),bT=Df,IB=Bn.extend({type:Mm,value:bT}),Ahe=zn.extend({type:Mm}),MB=jn.extend({type:Mm,default:bT}),khe=Vn.extend({type:Mm}),DGe=e=>IB.safeParse(e).success,LGe=e=>MB.safeParse(e).success,Rm=Un.extend({name:T.literal("SDXLRefinerModelField")}),K_=Df,RB=Bn.extend({type:Rm,value:K_}),Phe=zn.extend({type:Rm}),OB=jn.extend({type:Rm,default:K_}),Ihe=Vn.extend({type:Rm}),BGe=e=>RB.safeParse(e).success,zGe=e=>OB.safeParse(e).success,Om=Un.extend({name:T.literal("VAEModelField")}),X_=J4.optional(),$B=Bn.extend({type:Om,value:X_}),Mhe=zn.extend({type:Om}),NB=jn.extend({type:Om,default:X_}),Rhe=Vn.extend({type:Om}),jGe=e=>$B.safeParse(e).success,VGe=e=>NB.safeParse(e).success,$m=Un.extend({name:T.literal("LoRAModelField")}),Q_=eT.optional(),FB=Bn.extend({type:$m,value:Q_}),Ohe=zn.extend({type:$m}),DB=jn.extend({type:$m,default:Q_}),$he=Vn.extend({type:$m}),UGe=e=>FB.safeParse(e).success,GGe=e=>DB.safeParse(e).success,Nm=Un.extend({name:T.literal("ControlNetModelField")}),Y_=tT.optional(),LB=Bn.extend({type:Nm,value:Y_}),Nhe=zn.extend({type:Nm}),BB=jn.extend({type:Nm,default:Y_}),Fhe=Vn.extend({type:Nm}),HGe=e=>LB.safeParse(e).success,WGe=e=>BB.safeParse(e).success,Fm=Un.extend({name:T.literal("IPAdapterModelField")}),Z_=nT.optional(),zB=Bn.extend({type:Fm,value:Z_}),Dhe=zn.extend({type:Fm}),jB=jn.extend({type:Fm,default:Z_}),Lhe=Vn.extend({type:Fm}),qGe=e=>zB.safeParse(e).success,KGe=e=>jB.safeParse(e).success,Dm=Un.extend({name:T.literal("T2IAdapterModelField")}),J_=rT.optional(),VB=Bn.extend({type:Dm,value:J_}),Bhe=zn.extend({type:Dm}),UB=jn.extend({type:Dm,default:J_}),zhe=Vn.extend({type:Dm}),XGe=e=>VB.safeParse(e).success,QGe=e=>UB.safeParse(e).success,Lm=Un.extend({name:T.literal("SchedulerField")}),eS=GD.optional(),GB=Bn.extend({type:Lm,value:eS}),jhe=zn.extend({type:Lm}),HB=jn.extend({type:Lm,default:eS}),Vhe=Vn.extend({type:Lm}),YGe=e=>GB.safeParse(e).success,ZGe=e=>HB.safeParse(e).success,Bm=Un.extend({name:T.string().min(1)}),_T=T.undefined().catch(void 0),Uhe=Bn.extend({type:Bm,value:_T}),Ghe=zn.extend({type:Bm}),WB=jn.extend({type:Bm,default:_T,input:T.literal("connection")}),Hhe=Vn.extend({type:Bm}),qB=T.union([xm,wm,Cm,Em,Tm,Am,km,Im,Mm,Rm,Om,$m,Nm,Fm,Dm,Pm,Lm]),Whe=e=>qB.safeParse(e).success;T.union([qB,Bm]);const qhe=T.union([z_,j_,V_,U_,G_,H_,W_,Df,bT,K_,X_,Q_,Y_,Z_,J_,q_,eS]);T.union([qhe,_T]);const Khe=T.union([fB,pB,mB,vB,_B,xB,CB,kB,IB,RB,$B,FB,LB,zB,VB,TB,GB]),KB=T.union([Khe,Uhe]),JGe=e=>KB.safeParse(e).success,Xhe=T.union([lhe,uhe,fhe,phe,mhe,vhe,_he,Ehe,Ahe,Phe,Mhe,Ohe,Nhe,Dhe,Bhe,xhe,jhe]),Qhe=T.union([Xhe,Ghe]),Yhe=T.union([hB,gB,yB,bB,SB,wB,EB,PB,MB,OB,NB,DB,BB,jB,UB,AB,HB,WB]),XB=T.union([Yhe,WB]),eHe=e=>XB.safeParse(e).success,Zhe=T.union([che,dhe,hhe,ghe,yhe,bhe,She,The,khe,Ihe,Rhe,$he,Fhe,Lhe,zhe,whe,Vhe]),Jhe=T.union([Zhe,Hhe]),nw=T.coerce.number().int().min(0),tS=T.string().refine(e=>{const[t,n,r]=e.split(".");return nw.safeParse(t).success&&nw.safeParse(n).success&&nw.safeParse(r).success}),epe=tS.transform(e=>{const[t,n,r]=e.split(".");return{major:Number(t),minor:Number(n),patch:Number(r)}});T.object({type:T.string(),title:T.string(),description:T.string(),tags:T.array(T.string().min(1)),inputs:T.record(XB),outputs:T.record(Jhe),outputType:T.string().min(1),version:tS,useCache:T.boolean(),nodePack:T.string().min(1).nullish(),classification:ble});const QB=T.object({id:T.string().trim().min(1),type:T.string().trim().min(1),label:T.string(),isOpen:T.boolean(),notes:T.string(),isIntermediate:T.boolean(),useCache:T.boolean(),version:tS,nodePack:T.string().min(1).nullish(),inputs:T.record(KB),outputs:T.record(Qhe)}),YB=T.object({id:T.string().trim().min(1),type:T.literal("notes"),label:T.string(),isOpen:T.boolean(),notes:T.string()}),tpe=T.object({id:T.string().trim().min(1),type:T.literal("current_image"),label:T.string(),isOpen:T.boolean()});T.union([QB,YB,tpe]);const Sn=e=>!!(e&&e.type==="invocation"),Y5=e=>!!(e&&e.type==="notes"),tHe=e=>!!(e&&!["notes","current_image"].includes(e.type)),gc=T.enum(["PENDING","IN_PROGRESS","COMPLETED","FAILED"]);T.object({nodeId:T.string().trim().min(1),status:gc,progress:T.number().nullable(),progressImage:Ele.nullable(),error:T.string().nullable(),outputs:T.array(T.any())});T.object({type:T.union([T.literal("default"),T.literal("collapsed")])});function no(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?cpe:lpe;tz.useSyncExternalStore=hf.useSyncExternalStore!==void 0?hf.useSyncExternalStore:upe;ez.exports=tz;var dpe=ez.exports;/** + * @license React + * use-sync-external-store-shim/with-selector.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var nS=I,fpe=dpe;function hpe(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var ppe=typeof Object.is=="function"?Object.is:hpe,gpe=fpe.useSyncExternalStore,mpe=nS.useRef,ype=nS.useEffect,vpe=nS.useMemo,bpe=nS.useDebugValue;JB.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var o=mpe(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=vpe(function(){function l(h){if(!c){if(c=!0,u=h,h=r(h),i!==void 0&&s.hasValue){var p=s.value;if(i(p,h))return d=p}return d=h}if(p=d,ppe(u,h))return p;var m=r(h);return i!==void 0&&i(p,m)?p:(u=h,d=m)}var c=!1,u,d,f=n===void 0?null:n;return[function(){return l(t())},f===null?void 0:function(){return l(f())}]},[t,n,r,i]);var a=gpe(e,o[0],o[1]);return ype(function(){s.hasValue=!0,s.value=a},[a]),bpe(a),a};ZB.exports=JB;var _pe=ZB.exports;const Spe=Ml(_pe),UI=e=>{let t;const n=new Set,r=(l,c)=>{const u=typeof l=="function"?l(t):l;if(!Object.is(u,t)){const d=t;t=c??typeof u!="object"?u:Object.assign({},t,u),n.forEach(f=>f(t,d))}},i=()=>t,a={setState:r,getState:i,subscribe:l=>(n.add(l),()=>n.delete(l)),destroy:()=>{n.clear()}};return t=e(r,i,a),a},xpe=e=>e?UI(e):UI,{useSyncExternalStoreWithSelector:wpe}=Spe;function nz(e,t=e.getState,n){const r=wpe(e.subscribe,e.getState,e.getServerState||e.getState,t,n);return I.useDebugValue(r),r}const GI=(e,t)=>{const n=xpe(e),r=(i,o=t)=>nz(n,i,o);return Object.assign(r,n),r},Cpe=(e,t)=>e?GI(e,t):GI;function ti(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,i]of e)if(!Object.is(i,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r=0;r{}};function rS(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}tv.prototype=rS.prototype={constructor:tv,on:function(e,t){var n=this._,r=Tpe(e+"",n),i,o=-1,s=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(i),r=0,i,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),WI.hasOwnProperty(t)?{space:WI[t],local:e}:e}function kpe(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Z5&&t.documentElement.namespaceURI===Z5?t.createElement(e):t.createElementNS(n,e)}}function Ppe(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function rz(e){var t=iS(e);return(t.local?Ppe:kpe)(t)}function Ipe(){}function ST(e){return e==null?Ipe:function(){return this.querySelector(e)}}function Mpe(e){typeof e!="function"&&(e=ST(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i=g&&(g=y+1);!(S=_[g])&&++g=0;)(s=r[i])&&(o&&s.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(s,o),o=s);return this}function nge(e){e||(e=rge);function t(d,f){return d&&f?e(d.__data__,f.__data__):!d-!f}for(var n=this._groups,r=n.length,i=new Array(r),o=0;ot?1:e>=t?0:NaN}function ige(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function oge(){return Array.from(this)}function sge(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?yge:typeof t=="function"?bge:vge)(e,t,n??"")):pf(this.node(),e)}function pf(e,t){return e.style.getPropertyValue(t)||lz(e).getComputedStyle(e,null).getPropertyValue(t)}function Sge(e){return function(){delete this[e]}}function xge(e,t){return function(){this[e]=t}}function wge(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function Cge(e,t){return arguments.length>1?this.each((t==null?Sge:typeof t=="function"?wge:xge)(e,t)):this.node()[e]}function cz(e){return e.trim().split(/^|\s+/)}function xT(e){return e.classList||new uz(e)}function uz(e){this._node=e,this._names=cz(e.getAttribute("class")||"")}uz.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function dz(e,t){for(var n=xT(e),r=-1,i=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function Zge(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,o;n()=>e;function J5(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:o,x:s,y:a,dx:l,dy:c,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:a,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:c,enumerable:!0,configurable:!0},_:{value:u}})}J5.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function lme(e){return!e.ctrlKey&&!e.button}function cme(){return this.parentNode}function ume(e,t){return t??{x:e.x,y:e.y}}function dme(){return navigator.maxTouchPoints||"ontouchstart"in this}function fme(){var e=lme,t=cme,n=ume,r=dme,i={},o=rS("start","drag","end"),s=0,a,l,c,u,d=0;function f(b){b.on("mousedown.drag",h).filter(r).on("touchstart.drag",_).on("touchmove.drag",v,ame).on("touchend.drag touchcancel.drag",y).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(b,S){if(!(u||!e.call(this,b,S))){var w=g(this,t.call(this,b,S),b,S,"mouse");w&&(xo(b.view).on("mousemove.drag",p,Sg).on("mouseup.drag",m,Sg),gz(b.view),iw(b),c=!1,a=b.clientX,l=b.clientY,w("start",b))}}function p(b){if(Nd(b),!c){var S=b.clientX-a,w=b.clientY-l;c=S*S+w*w>d}i.mouse("drag",b)}function m(b){xo(b.view).on("mousemove.drag mouseup.drag",null),mz(b.view,c),Nd(b),i.mouse("end",b)}function _(b,S){if(e.call(this,b,S)){var w=b.changedTouches,C=t.call(this,b,S),x=w.length,k,A;for(k=0;k>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Q0(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Q0(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=pme.exec(e))?new Qr(t[1],t[2],t[3],1):(t=gme.exec(e))?new Qr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=mme.exec(e))?Q0(t[1],t[2],t[3],t[4]):(t=yme.exec(e))?Q0(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=vme.exec(e))?JI(t[1],t[2]/100,t[3]/100,1):(t=bme.exec(e))?JI(t[1],t[2]/100,t[3]/100,t[4]):qI.hasOwnProperty(e)?QI(qI[e]):e==="transparent"?new Qr(NaN,NaN,NaN,0):null}function QI(e){return new Qr(e>>16&255,e>>8&255,e&255,1)}function Q0(e,t,n,r){return r<=0&&(e=t=n=NaN),new Qr(e,t,n,r)}function xme(e){return e instanceof jm||(e=Cg(e)),e?(e=e.rgb(),new Qr(e.r,e.g,e.b,e.opacity)):new Qr}function e3(e,t,n,r){return arguments.length===1?xme(e):new Qr(e,t,n,r??1)}function Qr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}wT(Qr,e3,yz(jm,{brighter(e){return e=e==null?P1:Math.pow(P1,e),new Qr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?xg:Math.pow(xg,e),new Qr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Qr(Fc(this.r),Fc(this.g),Fc(this.b),I1(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:YI,formatHex:YI,formatHex8:wme,formatRgb:ZI,toString:ZI}));function YI(){return`#${xc(this.r)}${xc(this.g)}${xc(this.b)}`}function wme(){return`#${xc(this.r)}${xc(this.g)}${xc(this.b)}${xc((isNaN(this.opacity)?1:this.opacity)*255)}`}function ZI(){const e=I1(this.opacity);return`${e===1?"rgb(":"rgba("}${Fc(this.r)}, ${Fc(this.g)}, ${Fc(this.b)}${e===1?")":`, ${e})`}`}function I1(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Fc(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function xc(e){return e=Fc(e),(e<16?"0":"")+e.toString(16)}function JI(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new wo(e,t,n,r)}function vz(e){if(e instanceof wo)return new wo(e.h,e.s,e.l,e.opacity);if(e instanceof jm||(e=Cg(e)),!e)return new wo;if(e instanceof wo)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),o=Math.max(t,n,r),s=NaN,a=o-i,l=(o+i)/2;return a?(t===o?s=(n-r)/a+(n0&&l<1?0:s,new wo(s,a,l,e.opacity)}function Cme(e,t,n,r){return arguments.length===1?vz(e):new wo(e,t,n,r??1)}function wo(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}wT(wo,Cme,yz(jm,{brighter(e){return e=e==null?P1:Math.pow(P1,e),new wo(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?xg:Math.pow(xg,e),new wo(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Qr(ow(e>=240?e-240:e+120,i,r),ow(e,i,r),ow(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new wo(e8(this.h),Y0(this.s),Y0(this.l),I1(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=I1(this.opacity);return`${e===1?"hsl(":"hsla("}${e8(this.h)}, ${Y0(this.s)*100}%, ${Y0(this.l)*100}%${e===1?")":`, ${e})`}`}}));function e8(e){return e=(e||0)%360,e<0?e+360:e}function Y0(e){return Math.max(0,Math.min(1,e||0))}function ow(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const bz=e=>()=>e;function Eme(e,t){return function(n){return e+n*t}}function Tme(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function Ame(e){return(e=+e)==1?_z:function(t,n){return n-t?Tme(t,n,e):bz(isNaN(t)?n:t)}}function _z(e,t){var n=t-e;return n?Eme(e,n):bz(isNaN(e)?t:e)}const t8=function e(t){var n=Ame(t);function r(i,o){var s=n((i=e3(i)).r,(o=e3(o)).r),a=n(i.g,o.g),l=n(i.b,o.b),c=_z(i.opacity,o.opacity);return function(u){return i.r=s(u),i.g=a(u),i.b=l(u),i.opacity=c(u),i+""}}return r.gamma=e,r}(1);function za(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}var t3=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,sw=new RegExp(t3.source,"g");function kme(e){return function(){return e}}function Pme(e){return function(t){return e(t)+""}}function Ime(e,t){var n=t3.lastIndex=sw.lastIndex=0,r,i,o,s=-1,a=[],l=[];for(e=e+"",t=t+"";(r=t3.exec(e))&&(i=sw.exec(t));)(o=i.index)>n&&(o=t.slice(n,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,l.push({i:s,x:za(r,i)})),n=sw.lastIndex;return n180?u+=360:u-c>180&&(c+=360),f.push({i:d.push(i(d)+"rotate(",null,r)-2,x:za(c,u)})):u&&d.push(i(d)+"rotate("+u+r)}function a(c,u,d,f){c!==u?f.push({i:d.push(i(d)+"skewX(",null,r)-2,x:za(c,u)}):u&&d.push(i(d)+"skewX("+u+r)}function l(c,u,d,f,h,p){if(c!==d||u!==f){var m=h.push(i(h)+"scale(",null,",",null,")");p.push({i:m-4,x:za(c,d)},{i:m-2,x:za(u,f)})}else(d!==1||f!==1)&&h.push(i(h)+"scale("+d+","+f+")")}return function(c,u){var d=[],f=[];return c=e(c),u=e(u),o(c.translateX,c.translateY,u.translateX,u.translateY,d,f),s(c.rotate,u.rotate,d,f),a(c.skewX,u.skewX,d,f),l(c.scaleX,c.scaleY,u.scaleX,u.scaleY,d,f),c=u=null,function(h){for(var p=-1,m=f.length,_;++p=0&&e._call.call(void 0,t),e=e._next;--gf}function i8(){ru=(R1=Eg.now())+oS,gf=Gh=0;try{zme()}finally{gf=0,Vme(),ru=0}}function jme(){var e=Eg.now(),t=e-R1;t>wz&&(oS-=t,R1=e)}function Vme(){for(var e,t=M1,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:M1=n);Hh=e,r3(r)}function r3(e){if(!gf){Gh&&(Gh=clearTimeout(Gh));var t=e-ru;t>24?(e<1/0&&(Gh=setTimeout(i8,e-Eg.now()-oS)),gh&&(gh=clearInterval(gh))):(gh||(R1=Eg.now(),gh=setInterval(jme,wz)),gf=1,Cz(i8))}}function o8(e,t,n){var r=new O1;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var Ume=rS("start","end","cancel","interrupt"),Gme=[],Tz=0,s8=1,i3=2,nv=3,a8=4,o3=5,rv=6;function sS(e,t,n,r,i,o){var s=e.__transition;if(!s)e.__transition={};else if(n in s)return;Hme(e,n,{name:t,index:r,group:i,on:Ume,tween:Gme,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Tz})}function ET(e,t){var n=Vo(e,t);if(n.state>Tz)throw new Error("too late; already scheduled");return n}function ks(e,t){var n=Vo(e,t);if(n.state>nv)throw new Error("too late; already running");return n}function Vo(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Hme(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Ez(o,0,n.time);function o(c){n.state=s8,n.timer.restart(s,n.delay,n.time),n.delay<=c&&s(c-n.delay)}function s(c){var u,d,f,h;if(n.state!==s8)return l();for(u in r)if(h=r[u],h.name===n.name){if(h.state===nv)return o8(s);h.state===a8?(h.state=rv,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete r[u]):+ui3&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function S0e(e,t,n){var r,i,o=_0e(t)?ET:ks;return function(){var s=o(this,e),a=s.on;a!==r&&(i=(r=a).copy()).on(t,n),s.on=i}}function x0e(e,t){var n=this._id;return arguments.length<2?Vo(this.node(),n).on.on(e):this.each(S0e(n,e,t))}function w0e(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function C0e(){return this.on("end.remove",w0e(this._id))}function E0e(e){var t=this._name,n=this._id;typeof e!="function"&&(e=ST(e));for(var r=this._groups,i=r.length,o=new Array(i),s=0;s()=>e;function Q0e(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Xs(e,t,n){this.k=e,this.x=t,this.y=n}Xs.prototype={constructor:Xs,scale:function(e){return e===1?this:new Xs(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Xs(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var dl=new Xs(1,0,0);Xs.prototype;function aw(e){e.stopImmediatePropagation()}function mh(e){e.preventDefault(),e.stopImmediatePropagation()}function Y0e(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Z0e(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function l8(){return this.__zoom||dl}function J0e(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function eye(){return navigator.maxTouchPoints||"ontouchstart"in this}function tye(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),s>o?(o+s)/2:Math.min(0,o)||Math.max(0,s))}function nye(){var e=Y0e,t=Z0e,n=tye,r=J0e,i=eye,o=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],a=250,l=Lme,c=rS("start","zoom","end"),u,d,f,h=500,p=150,m=0,_=10;function v(E){E.property("__zoom",l8).on("wheel.zoom",x,{passive:!1}).on("mousedown.zoom",k).on("dblclick.zoom",A).filter(i).on("touchstart.zoom",R).on("touchmove.zoom",L).on("touchend.zoom touchcancel.zoom",M).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}v.transform=function(E,P,O,F){var $=E.selection?E.selection():E;$.property("__zoom",l8),E!==$?S(E,P,O,F):$.interrupt().each(function(){w(this,arguments).event(F).start().zoom(null,typeof P=="function"?P.apply(this,arguments):P).end()})},v.scaleBy=function(E,P,O,F){v.scaleTo(E,function(){var $=this.__zoom.k,D=typeof P=="function"?P.apply(this,arguments):P;return $*D},O,F)},v.scaleTo=function(E,P,O,F){v.transform(E,function(){var $=t.apply(this,arguments),D=this.__zoom,N=O==null?b($):typeof O=="function"?O.apply(this,arguments):O,z=D.invert(N),V=typeof P=="function"?P.apply(this,arguments):P;return n(g(y(D,V),N,z),$,s)},O,F)},v.translateBy=function(E,P,O,F){v.transform(E,function(){return n(this.__zoom.translate(typeof P=="function"?P.apply(this,arguments):P,typeof O=="function"?O.apply(this,arguments):O),t.apply(this,arguments),s)},null,F)},v.translateTo=function(E,P,O,F,$){v.transform(E,function(){var D=t.apply(this,arguments),N=this.__zoom,z=F==null?b(D):typeof F=="function"?F.apply(this,arguments):F;return n(dl.translate(z[0],z[1]).scale(N.k).translate(typeof P=="function"?-P.apply(this,arguments):-P,typeof O=="function"?-O.apply(this,arguments):-O),D,s)},F,$)};function y(E,P){return P=Math.max(o[0],Math.min(o[1],P)),P===E.k?E:new Xs(P,E.x,E.y)}function g(E,P,O){var F=P[0]-O[0]*E.k,$=P[1]-O[1]*E.k;return F===E.x&&$===E.y?E:new Xs(E.k,F,$)}function b(E){return[(+E[0][0]+ +E[1][0])/2,(+E[0][1]+ +E[1][1])/2]}function S(E,P,O,F){E.on("start.zoom",function(){w(this,arguments).event(F).start()}).on("interrupt.zoom end.zoom",function(){w(this,arguments).event(F).end()}).tween("zoom",function(){var $=this,D=arguments,N=w($,D).event(F),z=t.apply($,D),V=O==null?b(z):typeof O=="function"?O.apply($,D):O,H=Math.max(z[1][0]-z[0][0],z[1][1]-z[0][1]),X=$.__zoom,te=typeof P=="function"?P.apply($,D):P,ee=l(X.invert(V).concat(H/X.k),te.invert(V).concat(H/te.k));return function(j){if(j===1)j=te;else{var q=ee(j),Z=H/q[2];j=new Xs(Z,V[0]-q[0]*Z,V[1]-q[1]*Z)}N.zoom(null,j)}})}function w(E,P,O){return!O&&E.__zooming||new C(E,P)}function C(E,P){this.that=E,this.args=P,this.active=0,this.sourceEvent=null,this.extent=t.apply(E,P),this.taps=0}C.prototype={event:function(E){return E&&(this.sourceEvent=E),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(E,P){return this.mouse&&E!=="mouse"&&(this.mouse[1]=P.invert(this.mouse[0])),this.touch0&&E!=="touch"&&(this.touch0[1]=P.invert(this.touch0[0])),this.touch1&&E!=="touch"&&(this.touch1[1]=P.invert(this.touch1[0])),this.that.__zoom=P,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(E){var P=xo(this.that).datum();c.call(E,this.that,new Q0e(E,{sourceEvent:this.sourceEvent,target:v,type:E,transform:this.that.__zoom,dispatch:c}),P)}};function x(E,...P){if(!e.apply(this,arguments))return;var O=w(this,P).event(E),F=this.__zoom,$=Math.max(o[0],Math.min(o[1],F.k*Math.pow(2,r.apply(this,arguments)))),D=Jo(E);if(O.wheel)(O.mouse[0][0]!==D[0]||O.mouse[0][1]!==D[1])&&(O.mouse[1]=F.invert(O.mouse[0]=D)),clearTimeout(O.wheel);else{if(F.k===$)return;O.mouse=[D,F.invert(D)],iv(this),O.start()}mh(E),O.wheel=setTimeout(N,p),O.zoom("mouse",n(g(y(F,$),O.mouse[0],O.mouse[1]),O.extent,s));function N(){O.wheel=null,O.end()}}function k(E,...P){if(f||!e.apply(this,arguments))return;var O=E.currentTarget,F=w(this,P,!0).event(E),$=xo(E.view).on("mousemove.zoom",V,!0).on("mouseup.zoom",H,!0),D=Jo(E,O),N=E.clientX,z=E.clientY;gz(E.view),aw(E),F.mouse=[D,this.__zoom.invert(D)],iv(this),F.start();function V(X){if(mh(X),!F.moved){var te=X.clientX-N,ee=X.clientY-z;F.moved=te*te+ee*ee>m}F.event(X).zoom("mouse",n(g(F.that.__zoom,F.mouse[0]=Jo(X,O),F.mouse[1]),F.extent,s))}function H(X){$.on("mousemove.zoom mouseup.zoom",null),mz(X.view,F.moved),mh(X),F.event(X).end()}}function A(E,...P){if(e.apply(this,arguments)){var O=this.__zoom,F=Jo(E.changedTouches?E.changedTouches[0]:E,this),$=O.invert(F),D=O.k*(E.shiftKey?.5:2),N=n(g(y(O,D),F,$),t.apply(this,P),s);mh(E),a>0?xo(this).transition().duration(a).call(S,N,F,E):xo(this).call(v.transform,N,F,E)}}function R(E,...P){if(e.apply(this,arguments)){var O=E.touches,F=O.length,$=w(this,P,E.changedTouches.length===F).event(E),D,N,z,V;for(aw(E),N=0;N"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,t)=>`Couldn't create edge for ${e?"target":"source"} handle id: "${e?t.targetHandle:t.sourceHandle}", edge id: ${t.id}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`},Iz=fa.error001();function rn(e,t){const n=I.useContext(aS);if(n===null)throw new Error(Iz);return nz(n,e,t)}const Gn=()=>{const e=I.useContext(aS);if(e===null)throw new Error(Iz);return I.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe,destroy:e.destroy}),[e])},iye=e=>e.userSelectionActive?"none":"all";function oye({position:e,children:t,className:n,style:r,...i}){const o=rn(iye),s=`${e}`.split("-");return Q.createElement("div",{className:no(["react-flow__panel",n,...s]),style:{...r,pointerEvents:o},...i},t)}function sye({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:Q.createElement(oye,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro"},Q.createElement("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution"},"React Flow"))}const aye=({x:e,y:t,label:n,labelStyle:r={},labelShowBg:i=!0,labelBgStyle:o={},labelBgPadding:s=[2,4],labelBgBorderRadius:a=2,children:l,className:c,...u})=>{const d=I.useRef(null),[f,h]=I.useState({x:0,y:0,width:0,height:0}),p=no(["react-flow__edge-textwrapper",c]);return I.useEffect(()=>{if(d.current){const m=d.current.getBBox();h({x:m.x,y:m.y,width:m.width,height:m.height})}},[n]),typeof n>"u"||!n?null:Q.createElement("g",{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:p,visibility:f.width?"visible":"hidden",...u},i&&Q.createElement("rect",{width:f.width+2*s[0],x:-s[0],y:-s[1],height:f.height+2*s[1],className:"react-flow__edge-textbg",style:o,rx:a,ry:a}),Q.createElement("text",{className:"react-flow__edge-text",y:f.height/2,dy:"0.3em",ref:d,style:r},n),l)};var lye=I.memo(aye);const AT=e=>({width:e.offsetWidth,height:e.offsetHeight}),mf=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),kT=(e={x:0,y:0},t)=>({x:mf(e.x,t[0][0],t[1][0]),y:mf(e.y,t[0][1],t[1][1])}),c8=(e,t,n)=>en?-mf(Math.abs(e-n),1,50)/50:0,Mz=(e,t)=>{const n=c8(e.x,35,t.width-35)*20,r=c8(e.y,35,t.height-35)*20;return[n,r]},Rz=e=>{var t;return((t=e.getRootNode)==null?void 0:t.call(e))||(window==null?void 0:window.document)},Oz=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Tg=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),$z=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),u8=e=>({...e.positionAbsolute||{x:0,y:0},width:e.width||0,height:e.height||0}),nHe=(e,t)=>$z(Oz(Tg(e),Tg(t))),s3=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},cye=e=>Xi(e.width)&&Xi(e.height)&&Xi(e.x)&&Xi(e.y),Xi=e=>!isNaN(e)&&isFinite(e),Tn=Symbol.for("internals"),Nz=["Enter"," ","Escape"],uye=(e,t)=>{},dye=e=>"nativeEvent"in e;function a3(e){var i,o;const t=dye(e)?e.nativeEvent:e,n=((o=(i=t.composedPath)==null?void 0:i.call(t))==null?void 0:o[0])||e.target;return["INPUT","SELECT","TEXTAREA"].includes(n==null?void 0:n.nodeName)||(n==null?void 0:n.hasAttribute("contenteditable"))||!!(n!=null&&n.closest(".nokey"))}const Fz=e=>"clientX"in e,fl=(e,t)=>{var o,s;const n=Fz(e),r=n?e.clientX:(o=e.touches)==null?void 0:o[0].clientX,i=n?e.clientY:(s=e.touches)==null?void 0:s[0].clientY;return{x:r-((t==null?void 0:t.left)??0),y:i-((t==null?void 0:t.top)??0)}},$1=()=>{var e;return typeof navigator<"u"&&((e=navigator==null?void 0:navigator.userAgent)==null?void 0:e.indexOf("Mac"))>=0},Vm=({id:e,path:t,labelX:n,labelY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h=20})=>Q.createElement(Q.Fragment,null,Q.createElement("path",{id:e,style:u,d:t,fill:"none",className:"react-flow__edge-path",markerEnd:d,markerStart:f}),h&&Q.createElement("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}),i&&Xi(n)&&Xi(r)?Q.createElement(lye,{x:n,y:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c}):null);Vm.displayName="BaseEdge";function yh(e,t,n){return n===void 0?n:r=>{const i=t().edges.find(o=>o.id===e);i&&n(r,{...i})}}function Dz({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e)/2,o=n{const[_,v,y]=Bz({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o});return Q.createElement(Vm,{path:_,labelX:v,labelY:y,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:m})});PT.displayName="SimpleBezierEdge";const f8={[Te.Left]:{x:-1,y:0},[Te.Right]:{x:1,y:0},[Te.Top]:{x:0,y:-1},[Te.Bottom]:{x:0,y:1}},fye=({source:e,sourcePosition:t=Te.Bottom,target:n})=>t===Te.Left||t===Te.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function hye({source:e,sourcePosition:t=Te.Bottom,target:n,targetPosition:r=Te.Top,center:i,offset:o}){const s=f8[t],a=f8[r],l={x:e.x+s.x*o,y:e.y+s.y*o},c={x:n.x+a.x*o,y:n.y+a.y*o},u=fye({source:l,sourcePosition:t,target:c}),d=u.x!==0?"x":"y",f=u[d];let h=[],p,m;const _={x:0,y:0},v={x:0,y:0},[y,g,b,S]=Dz({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[d]*a[d]===-1){p=i.x||y,m=i.y||g;const C=[{x:p,y:l.y},{x:p,y:c.y}],x=[{x:l.x,y:m},{x:c.x,y:m}];s[d]===f?h=d==="x"?C:x:h=d==="x"?x:C}else{const C=[{x:l.x,y:c.y}],x=[{x:c.x,y:l.y}];if(d==="x"?h=s.x===f?x:C:h=s.y===f?C:x,t===r){const M=Math.abs(e[d]-n[d]);if(M<=o){const E=Math.min(o-1,o-M);s[d]===f?_[d]=(l[d]>e[d]?-1:1)*E:v[d]=(c[d]>n[d]?-1:1)*E}}if(t!==r){const M=d==="x"?"y":"x",E=s[d]===a[M],P=l[M]>c[M],O=l[M]=L?(p=(k.x+A.x)/2,m=h[0].y):(p=h[0].x,m=(k.y+A.y)/2)}return[[e,{x:l.x+_.x,y:l.y+_.y},...h,{x:c.x+v.x,y:c.y+v.y},n],p,m,b,S]}function pye(e,t,n,r){const i=Math.min(h8(e,t)/2,h8(t,n)/2,r),{x:o,y:s}=t;if(e.x===o&&o===n.x||e.y===s&&s===n.y)return`L${o} ${s}`;if(e.y===s){const c=e.x{let g="";return y>0&&y{const[v,y,g]=l3({sourceX:e,sourceY:t,sourcePosition:d,targetX:n,targetY:r,targetPosition:f,borderRadius:m==null?void 0:m.borderRadius,offset:m==null?void 0:m.offset});return Q.createElement(Vm,{path:v,labelX:y,labelY:g,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:h,markerStart:p,interactionWidth:_})});lS.displayName="SmoothStepEdge";const IT=I.memo(e=>{var t;return Q.createElement(lS,{...e,pathOptions:I.useMemo(()=>{var n;return{borderRadius:0,offset:(n=e.pathOptions)==null?void 0:n.offset}},[(t=e.pathOptions)==null?void 0:t.offset])})});IT.displayName="StepEdge";function gye({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[i,o,s,a]=Dz({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,o,s,a]}const MT=I.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h})=>{const[p,m,_]=gye({sourceX:e,sourceY:t,targetX:n,targetY:r});return Q.createElement(Vm,{path:p,labelX:m,labelY:_,label:i,labelStyle:o,labelShowBg:s,labelBgStyle:a,labelBgPadding:l,labelBgBorderRadius:c,style:u,markerEnd:d,markerStart:f,interactionWidth:h})});MT.displayName="StraightEdge";function ey(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function p8({pos:e,x1:t,y1:n,x2:r,y2:i,c:o}){switch(e){case Te.Left:return[t-ey(t-r,o),n];case Te.Right:return[t+ey(r-t,o),n];case Te.Top:return[t,n-ey(n-i,o)];case Te.Bottom:return[t,n+ey(i-n,o)]}}function zz({sourceX:e,sourceY:t,sourcePosition:n=Te.Bottom,targetX:r,targetY:i,targetPosition:o=Te.Top,curvature:s=.25}){const[a,l]=p8({pos:n,x1:e,y1:t,x2:r,y2:i,c:s}),[c,u]=p8({pos:o,x1:r,y1:i,x2:e,y2:t,c:s}),[d,f,h,p]=Lz({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:a,sourceControlY:l,targetControlX:c,targetControlY:u});return[`M${e},${t} C${a},${l} ${c},${u} ${r},${i}`,d,f,h,p]}const F1=I.memo(({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i=Te.Bottom,targetPosition:o=Te.Top,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,pathOptions:m,interactionWidth:_})=>{const[v,y,g]=zz({sourceX:e,sourceY:t,sourcePosition:i,targetX:n,targetY:r,targetPosition:o,curvature:m==null?void 0:m.curvature});return Q.createElement(Vm,{path:v,labelX:y,labelY:g,label:s,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:p,interactionWidth:_})});F1.displayName="BezierEdge";const RT=I.createContext(null),mye=RT.Provider;RT.Consumer;const yye=()=>I.useContext(RT),vye=e=>"id"in e&&"source"in e&&"target"in e,jz=e=>"id"in e&&!("source"in e)&&!("target"in e),bye=(e,t,n)=>{if(!jz(e))return[];const r=n.filter(i=>i.source===e.id).map(i=>i.target);return t.filter(i=>r.includes(i.id))},_ye=(e,t,n)=>{if(!jz(e))return[];const r=n.filter(i=>i.target===e.id).map(i=>i.source);return t.filter(i=>r.includes(i.id))},Vz=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`reactflow__edge-${e}${t||""}-${n}${r||""}`,c3=(e,t)=>typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`,Sye=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),Wh=(e,t)=>{if(!e.source||!e.target)return t;let n;return vye(e)?n={...e}:n={...e,id:Vz(e)},Sye(n,t)?t:t.concat(n)},xye=(e,t,n,r={shouldReplaceId:!0})=>{const{id:i,...o}=e;if(!t.source||!t.target||!n.find(l=>l.id===i))return n;const a={...o,id:r.shouldReplaceId?Vz(t):i,source:t.source,target:t.target,sourceHandle:t.sourceHandle,targetHandle:t.targetHandle};return n.filter(l=>l.id!==i).concat(a)},u3=({x:e,y:t},[n,r,i],o,[s,a])=>{const l={x:(e-n)/i,y:(t-r)/i};return o?{x:s*Math.round(l.x/s),y:a*Math.round(l.y/a)}:l},Uz=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r}),Dd=(e,t=[0,0])=>{if(!e)return{x:0,y:0,positionAbsolute:{x:0,y:0}};const n=(e.width??0)*t[0],r=(e.height??0)*t[1],i={x:e.position.x-n,y:e.position.y-r};return{...i,positionAbsolute:e.positionAbsolute?{x:e.positionAbsolute.x-n,y:e.positionAbsolute.y-r}:i}},OT=(e,t=[0,0])=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,i)=>{const{x:o,y:s}=Dd(i,t).positionAbsolute;return Oz(r,Tg({x:o,y:s,width:i.width||0,height:i.height||0}))},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return $z(n)},Gz=(e,t,[n,r,i]=[0,0,1],o=!1,s=!1,a=[0,0])=>{const l={x:(t.x-n)/i,y:(t.y-r)/i,width:t.width/i,height:t.height/i},c=[];return e.forEach(u=>{const{width:d,height:f,selectable:h=!0,hidden:p=!1}=u;if(s&&!h||p)return!1;const{positionAbsolute:m}=Dd(u,a),_={x:m.x,y:m.y,width:d||0,height:f||0},v=s3(l,_),y=typeof d>"u"||typeof f>"u"||d===null||f===null,g=o&&v>0,b=(d||0)*(f||0);(y||g||v>=b||u.dragging)&&c.push(u)}),c},$T=(e,t)=>{const n=e.map(r=>r.id);return t.filter(r=>n.includes(r.source)||n.includes(r.target))},Hz=(e,t,n,r,i,o=.1)=>{const s=t/(e.width*(1+o)),a=n/(e.height*(1+o)),l=Math.min(s,a),c=mf(l,r,i),u=e.x+e.width/2,d=e.y+e.height/2,f=t/2-u*c,h=n/2-d*c;return{x:f,y:h,zoom:c}},ac=(e,t=0)=>e.transition().duration(t);function g8(e,t,n,r){return(t[n]||[]).reduce((i,o)=>{var s,a;return`${e.id}-${o.id}-${n}`!==r&&i.push({id:o.id||null,type:n,nodeId:e.id,x:(((s=e.positionAbsolute)==null?void 0:s.x)??0)+o.x+o.width/2,y:(((a=e.positionAbsolute)==null?void 0:a.y)??0)+o.y+o.height/2}),i},[])}function wye(e,t,n,r,i,o){const{x:s,y:a}=fl(e),c=t.elementsFromPoint(s,a).find(p=>p.classList.contains("react-flow__handle"));if(c){const p=c.getAttribute("data-nodeid");if(p){const m=NT(void 0,c),_=c.getAttribute("data-handleid"),v=o({nodeId:p,id:_,type:m});if(v){const y=i.find(g=>g.nodeId===p&&g.type===m&&g.id===_);return{handle:{id:_,type:m,nodeId:p,x:(y==null?void 0:y.x)||n.x,y:(y==null?void 0:y.y)||n.y},validHandleResult:v}}}}let u=[],d=1/0;if(i.forEach(p=>{const m=Math.sqrt((p.x-n.x)**2+(p.y-n.y)**2);if(m<=r){const _=o(p);m<=d&&(mp.isValid),h=u.some(({handle:p})=>p.type==="target");return u.find(({handle:p,validHandleResult:m})=>h?p.type==="target":f?m.isValid:!0)||u[0]}const Cye={source:null,target:null,sourceHandle:null,targetHandle:null},Wz=()=>({handleDomNode:null,isValid:!1,connection:Cye,endHandle:null});function qz(e,t,n,r,i,o,s){const a=i==="target",l=s.querySelector(`.react-flow__handle[data-id="${e==null?void 0:e.nodeId}-${e==null?void 0:e.id}-${e==null?void 0:e.type}"]`),c={...Wz(),handleDomNode:l};if(l){const u=NT(void 0,l),d=l.getAttribute("data-nodeid"),f=l.getAttribute("data-handleid"),h=l.classList.contains("connectable"),p=l.classList.contains("connectableend"),m={source:a?d:n,sourceHandle:a?f:r,target:a?n:d,targetHandle:a?r:f};c.connection=m,h&&p&&(t===iu.Strict?a&&u==="source"||!a&&u==="target":d!==n||f!==r)&&(c.endHandle={nodeId:d,handleId:f,type:u},c.isValid=o(m))}return c}function Eye({nodes:e,nodeId:t,handleId:n,handleType:r}){return e.reduce((i,o)=>{if(o[Tn]){const{handleBounds:s}=o[Tn];let a=[],l=[];s&&(a=g8(o,s,"source",`${t}-${n}-${r}`),l=g8(o,s,"target",`${t}-${n}-${r}`)),i.push(...a,...l)}return i},[])}function NT(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function lw(e){e==null||e.classList.remove("valid","connecting","react-flow__handle-valid","react-flow__handle-connecting")}function Tye(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function Kz({event:e,handleId:t,nodeId:n,onConnect:r,isTarget:i,getState:o,setState:s,isValidConnection:a,edgeUpdaterType:l,onEdgeUpdateEnd:c}){const u=Rz(e.target),{connectionMode:d,domNode:f,autoPanOnConnect:h,connectionRadius:p,onConnectStart:m,panBy:_,getNodes:v,cancelConnection:y}=o();let g=0,b;const{x:S,y:w}=fl(e),C=u==null?void 0:u.elementFromPoint(S,w),x=NT(l,C),k=f==null?void 0:f.getBoundingClientRect();if(!k||!x)return;let A,R=fl(e,k),L=!1,M=null,E=!1,P=null;const O=Eye({nodes:v(),nodeId:n,handleId:t,handleType:x}),F=()=>{if(!h)return;const[N,z]=Mz(R,k);_({x:N,y:z}),g=requestAnimationFrame(F)};s({connectionPosition:R,connectionStatus:null,connectionNodeId:n,connectionHandleId:t,connectionHandleType:x,connectionStartHandle:{nodeId:n,handleId:t,type:x},connectionEndHandle:null}),m==null||m(e,{nodeId:n,handleId:t,handleType:x});function $(N){const{transform:z}=o();R=fl(N,k);const{handle:V,validHandleResult:H}=wye(N,u,u3(R,z,!1,[1,1]),p,O,X=>qz(X,d,n,t,i?"target":"source",a,u));if(b=V,L||(F(),L=!0),P=H.handleDomNode,M=H.connection,E=H.isValid,s({connectionPosition:b&&E?Uz({x:b.x,y:b.y},z):R,connectionStatus:Tye(!!b,E),connectionEndHandle:H.endHandle}),!b&&!E&&!P)return lw(A);M.source!==M.target&&P&&(lw(A),A=P,P.classList.add("connecting","react-flow__handle-connecting"),P.classList.toggle("valid",E),P.classList.toggle("react-flow__handle-valid",E))}function D(N){var z,V;(b||P)&&M&&E&&(r==null||r(M)),(V=(z=o()).onConnectEnd)==null||V.call(z,N),l&&(c==null||c(N)),lw(A),y(),cancelAnimationFrame(g),L=!1,E=!1,M=null,P=null,u.removeEventListener("mousemove",$),u.removeEventListener("mouseup",D),u.removeEventListener("touchmove",$),u.removeEventListener("touchend",D)}u.addEventListener("mousemove",$),u.addEventListener("mouseup",D),u.addEventListener("touchmove",$),u.addEventListener("touchend",D)}const m8=()=>!0,Aye=e=>({connectionStartHandle:e.connectionStartHandle,connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName}),kye=(e,t,n)=>r=>{const{connectionStartHandle:i,connectionEndHandle:o,connectionClickStartHandle:s}=r;return{connecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.handleId)===t&&(i==null?void 0:i.type)===n||(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.handleId)===t&&(o==null?void 0:o.type)===n,clickConnecting:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.handleId)===t&&(s==null?void 0:s.type)===n}},Xz=I.forwardRef(({type:e="source",position:t=Te.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,id:s,onConnect:a,children:l,className:c,onMouseDown:u,onTouchStart:d,...f},h)=>{var k,A;const p=s||null,m=e==="target",_=Gn(),v=yye(),{connectOnClick:y,noPanClassName:g}=rn(Aye,ti),{connecting:b,clickConnecting:S}=rn(kye(v,p,e),ti);v||(A=(k=_.getState()).onError)==null||A.call(k,"010",fa.error010());const w=R=>{const{defaultEdgeOptions:L,onConnect:M,hasDefaultEdges:E}=_.getState(),P={...L,...R};if(E){const{edges:O,setEdges:F}=_.getState();F(Wh(P,O))}M==null||M(P),a==null||a(P)},C=R=>{if(!v)return;const L=Fz(R);i&&(L&&R.button===0||!L)&&Kz({event:R,handleId:p,nodeId:v,onConnect:w,isTarget:m,getState:_.getState,setState:_.setState,isValidConnection:n||_.getState().isValidConnection||m8}),L?u==null||u(R):d==null||d(R)},x=R=>{const{onClickConnectStart:L,onClickConnectEnd:M,connectionClickStartHandle:E,connectionMode:P,isValidConnection:O}=_.getState();if(!v||!E&&!i)return;if(!E){L==null||L(R,{nodeId:v,handleId:p,handleType:e}),_.setState({connectionClickStartHandle:{nodeId:v,type:e,handleId:p}});return}const F=Rz(R.target),$=n||O||m8,{connection:D,isValid:N}=qz({nodeId:v,id:p,type:e},P,E.nodeId,E.handleId||null,E.type,$,F);N&&w(D),M==null||M(R),_.setState({connectionClickStartHandle:null})};return Q.createElement("div",{"data-handleid":p,"data-nodeid":v,"data-handlepos":t,"data-id":`${v}-${p}-${e}`,className:no(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",g,c,{source:!m,target:m,connectable:r,connectablestart:i,connectableend:o,connecting:S,connectionindicator:r&&(i&&!b||o&&b)}]),onMouseDown:C,onTouchStart:C,onClick:y?x:void 0,ref:h,...f},l)});Xz.displayName="Handle";var D1=I.memo(Xz);const Qz=({data:e,isConnectable:t,targetPosition:n=Te.Top,sourcePosition:r=Te.Bottom})=>Q.createElement(Q.Fragment,null,Q.createElement(D1,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,Q.createElement(D1,{type:"source",position:r,isConnectable:t}));Qz.displayName="DefaultNode";var d3=I.memo(Qz);const Yz=({data:e,isConnectable:t,sourcePosition:n=Te.Bottom})=>Q.createElement(Q.Fragment,null,e==null?void 0:e.label,Q.createElement(D1,{type:"source",position:n,isConnectable:t}));Yz.displayName="InputNode";var Zz=I.memo(Yz);const Jz=({data:e,isConnectable:t,targetPosition:n=Te.Top})=>Q.createElement(Q.Fragment,null,Q.createElement(D1,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label);Jz.displayName="OutputNode";var ej=I.memo(Jz);const FT=()=>null;FT.displayName="GroupNode";const Pye=e=>({selectedNodes:e.getNodes().filter(t=>t.selected),selectedEdges:e.edges.filter(t=>t.selected)}),ty=e=>e.id;function Iye(e,t){return ti(e.selectedNodes.map(ty),t.selectedNodes.map(ty))&&ti(e.selectedEdges.map(ty),t.selectedEdges.map(ty))}const tj=I.memo(({onSelectionChange:e})=>{const t=Gn(),{selectedNodes:n,selectedEdges:r}=rn(Pye,Iye);return I.useEffect(()=>{const i={nodes:n,edges:r};e==null||e(i),t.getState().onSelectionChange.forEach(o=>o(i))},[n,r,e]),null});tj.displayName="SelectionListener";const Mye=e=>!!e.onSelectionChange;function Rye({onSelectionChange:e}){const t=rn(Mye);return e||t?Q.createElement(tj,{onSelectionChange:e}):null}const Oye=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset});function $u(e,t){I.useEffect(()=>{typeof e<"u"&&t(e)},[e])}function je(e,t,n){I.useEffect(()=>{typeof t<"u"&&n({[e]:t})},[t])}const $ye=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:i,onConnectStart:o,onConnectEnd:s,onClickConnectStart:a,onClickConnectEnd:l,nodesDraggable:c,nodesConnectable:u,nodesFocusable:d,edgesFocusable:f,edgesUpdatable:h,elevateNodesOnSelect:p,minZoom:m,maxZoom:_,nodeExtent:v,onNodesChange:y,onEdgesChange:g,elementsSelectable:b,connectionMode:S,snapGrid:w,snapToGrid:C,translateExtent:x,connectOnClick:k,defaultEdgeOptions:A,fitView:R,fitViewOptions:L,onNodesDelete:M,onEdgesDelete:E,onNodeDrag:P,onNodeDragStart:O,onNodeDragStop:F,onSelectionDrag:$,onSelectionDragStart:D,onSelectionDragStop:N,noPanClassName:z,nodeOrigin:V,rfId:H,autoPanOnConnect:X,autoPanOnNodeDrag:te,onError:ee,connectionRadius:j,isValidConnection:q,nodeDragThreshold:Z})=>{const{setNodes:oe,setEdges:be,setDefaultNodesAndEdges:Me,setMinZoom:lt,setMaxZoom:Le,setTranslateExtent:we,setNodeExtent:pt,reset:vt}=rn(Oye,ti),Ce=Gn();return I.useEffect(()=>{const ii=r==null?void 0:r.map(sn=>({...sn,...A}));return Me(n,ii),()=>{vt()}},[]),je("defaultEdgeOptions",A,Ce.setState),je("connectionMode",S,Ce.setState),je("onConnect",i,Ce.setState),je("onConnectStart",o,Ce.setState),je("onConnectEnd",s,Ce.setState),je("onClickConnectStart",a,Ce.setState),je("onClickConnectEnd",l,Ce.setState),je("nodesDraggable",c,Ce.setState),je("nodesConnectable",u,Ce.setState),je("nodesFocusable",d,Ce.setState),je("edgesFocusable",f,Ce.setState),je("edgesUpdatable",h,Ce.setState),je("elementsSelectable",b,Ce.setState),je("elevateNodesOnSelect",p,Ce.setState),je("snapToGrid",C,Ce.setState),je("snapGrid",w,Ce.setState),je("onNodesChange",y,Ce.setState),je("onEdgesChange",g,Ce.setState),je("connectOnClick",k,Ce.setState),je("fitViewOnInit",R,Ce.setState),je("fitViewOnInitOptions",L,Ce.setState),je("onNodesDelete",M,Ce.setState),je("onEdgesDelete",E,Ce.setState),je("onNodeDrag",P,Ce.setState),je("onNodeDragStart",O,Ce.setState),je("onNodeDragStop",F,Ce.setState),je("onSelectionDrag",$,Ce.setState),je("onSelectionDragStart",D,Ce.setState),je("onSelectionDragStop",N,Ce.setState),je("noPanClassName",z,Ce.setState),je("nodeOrigin",V,Ce.setState),je("rfId",H,Ce.setState),je("autoPanOnConnect",X,Ce.setState),je("autoPanOnNodeDrag",te,Ce.setState),je("onError",ee,Ce.setState),je("connectionRadius",j,Ce.setState),je("isValidConnection",q,Ce.setState),je("nodeDragThreshold",Z,Ce.setState),$u(e,oe),$u(t,be),$u(m,lt),$u(_,Le),$u(x,we),$u(v,pt),null},y8={display:"none"},Nye={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},nj="react-flow__node-desc",rj="react-flow__edge-desc",Fye="react-flow__aria-live",Dye=e=>e.ariaLiveMessage;function Lye({rfId:e}){const t=rn(Dye);return Q.createElement("div",{id:`${Fye}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:Nye},t)}function Bye({rfId:e,disableKeyboardA11y:t}){return Q.createElement(Q.Fragment,null,Q.createElement("div",{id:`${nj}-${e}`,style:y8},"Press enter or space to select a node.",!t&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "),Q.createElement("div",{id:`${rj}-${e}`,style:y8},"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."),!t&&Q.createElement(Lye,{rfId:e}))}var Ag=(e=null,t={actInsideInputWithModifier:!0})=>{const[n,r]=I.useState(!1),i=I.useRef(!1),o=I.useRef(new Set([])),[s,a]=I.useMemo(()=>{if(e!==null){const c=(Array.isArray(e)?e:[e]).filter(d=>typeof d=="string").map(d=>d.split("+")),u=c.reduce((d,f)=>d.concat(...f),[]);return[c,u]}return[[],[]]},[e]);return I.useEffect(()=>{const l=typeof document<"u"?document:null,c=(t==null?void 0:t.target)||l;if(e!==null){const u=h=>{if(i.current=h.ctrlKey||h.metaKey||h.shiftKey,(!i.current||i.current&&!t.actInsideInputWithModifier)&&a3(h))return!1;const m=b8(h.code,a);o.current.add(h[m]),v8(s,o.current,!1)&&(h.preventDefault(),r(!0))},d=h=>{if((!i.current||i.current&&!t.actInsideInputWithModifier)&&a3(h))return!1;const m=b8(h.code,a);v8(s,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(h[m]),h.key==="Meta"&&o.current.clear(),i.current=!1},f=()=>{o.current.clear(),r(!1)};return c==null||c.addEventListener("keydown",u),c==null||c.addEventListener("keyup",d),window.addEventListener("blur",f),()=>{c==null||c.removeEventListener("keydown",u),c==null||c.removeEventListener("keyup",d),window.removeEventListener("blur",f)}}},[e,r]),n};function v8(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function b8(e,t){return t.includes(e)?"code":"key"}function ij(e,t,n,r){var s,a;if(!e.parentNode)return n;const i=t.get(e.parentNode),o=Dd(i,r);return ij(i,t,{x:(n.x??0)+o.x,y:(n.y??0)+o.y,z:(((s=i[Tn])==null?void 0:s.z)??0)>(n.z??0)?((a=i[Tn])==null?void 0:a.z)??0:n.z??0},r)}function oj(e,t,n){e.forEach(r=>{var i;if(r.parentNode&&!e.has(r.parentNode))throw new Error(`Parent node ${r.parentNode} not found`);if(r.parentNode||n!=null&&n[r.id]){const{x:o,y:s,z:a}=ij(r,e,{...r.position,z:((i=r[Tn])==null?void 0:i.z)??0},t);r.positionAbsolute={x:o,y:s},r[Tn].z=a,n!=null&&n[r.id]&&(r[Tn].isParent=!0)}})}function cw(e,t,n,r){const i=new Map,o={},s=r?1e3:0;return e.forEach(a=>{var d;const l=(Xi(a.zIndex)?a.zIndex:0)+(a.selected?s:0),c=t.get(a.id),u={width:c==null?void 0:c.width,height:c==null?void 0:c.height,...a,positionAbsolute:{x:a.position.x,y:a.position.y}};a.parentNode&&(u.parentNode=a.parentNode,o[a.parentNode]=!0),Object.defineProperty(u,Tn,{enumerable:!1,value:{handleBounds:(d=c==null?void 0:c[Tn])==null?void 0:d.handleBounds,z:l}}),i.set(a.id,u)}),oj(i,n,o),i}function sj(e,t={}){const{getNodes:n,width:r,height:i,minZoom:o,maxZoom:s,d3Zoom:a,d3Selection:l,fitViewOnInitDone:c,fitViewOnInit:u,nodeOrigin:d}=e(),f=t.initial&&!c&&u;if(a&&l&&(f||!t.initial)){const p=n().filter(_=>{var y;const v=t.includeHiddenNodes?_.width&&_.height:!_.hidden;return(y=t.nodes)!=null&&y.length?v&&t.nodes.some(g=>g.id===_.id):v}),m=p.every(_=>_.width&&_.height);if(p.length>0&&m){const _=OT(p,d),{x:v,y,zoom:g}=Hz(_,r,i,t.minZoom??o,t.maxZoom??s,t.padding??.1),b=dl.translate(v,y).scale(g);return typeof t.duration=="number"&&t.duration>0?a.transform(ac(l,t.duration),b):a.transform(l,b),!0}}return!1}function zye(e,t){return e.forEach(n=>{const r=t.get(n.id);r&&t.set(r.id,{...r,[Tn]:r[Tn],selected:n.selected})}),new Map(t)}function jye(e,t){return t.map(n=>{const r=e.find(i=>i.id===n.id);return r&&(n.selected=r.selected),n})}function ny({changedNodes:e,changedEdges:t,get:n,set:r}){const{nodeInternals:i,edges:o,onNodesChange:s,onEdgesChange:a,hasDefaultNodes:l,hasDefaultEdges:c}=n();e!=null&&e.length&&(l&&r({nodeInternals:zye(e,i)}),s==null||s(e)),t!=null&&t.length&&(c&&r({edges:jye(t,o)}),a==null||a(t))}const Nu=()=>{},Vye={zoomIn:Nu,zoomOut:Nu,zoomTo:Nu,getZoom:()=>1,setViewport:Nu,getViewport:()=>({x:0,y:0,zoom:1}),fitView:()=>!1,setCenter:Nu,fitBounds:Nu,project:e=>e,screenToFlowPosition:e=>e,flowToScreenPosition:e=>e,viewportInitialized:!1},Uye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection}),Gye=()=>{const e=Gn(),{d3Zoom:t,d3Selection:n}=rn(Uye,ti);return I.useMemo(()=>n&&t?{zoomIn:i=>t.scaleBy(ac(n,i==null?void 0:i.duration),1.2),zoomOut:i=>t.scaleBy(ac(n,i==null?void 0:i.duration),1/1.2),zoomTo:(i,o)=>t.scaleTo(ac(n,o==null?void 0:o.duration),i),getZoom:()=>e.getState().transform[2],setViewport:(i,o)=>{const[s,a,l]=e.getState().transform,c=dl.translate(i.x??s,i.y??a).scale(i.zoom??l);t.transform(ac(n,o==null?void 0:o.duration),c)},getViewport:()=>{const[i,o,s]=e.getState().transform;return{x:i,y:o,zoom:s}},fitView:i=>sj(e.getState,i),setCenter:(i,o,s)=>{const{width:a,height:l,maxZoom:c}=e.getState(),u=typeof(s==null?void 0:s.zoom)<"u"?s.zoom:c,d=a/2-i*u,f=l/2-o*u,h=dl.translate(d,f).scale(u);t.transform(ac(n,s==null?void 0:s.duration),h)},fitBounds:(i,o)=>{const{width:s,height:a,minZoom:l,maxZoom:c}=e.getState(),{x:u,y:d,zoom:f}=Hz(i,s,a,l,c,(o==null?void 0:o.padding)??.1),h=dl.translate(u,d).scale(f);t.transform(ac(n,o==null?void 0:o.duration),h)},project:i=>{const{transform:o,snapToGrid:s,snapGrid:a}=e.getState();return console.warn("[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position"),u3(i,o,s,a)},screenToFlowPosition:i=>{const{transform:o,snapToGrid:s,snapGrid:a,domNode:l}=e.getState();if(!l)return i;const{x:c,y:u}=l.getBoundingClientRect(),d={x:i.x-c,y:i.y-u};return u3(d,o,s,a)},flowToScreenPosition:i=>{const{transform:o,domNode:s}=e.getState();if(!s)return i;const{x:a,y:l}=s.getBoundingClientRect(),c=Uz(i,o);return{x:c.x+a,y:c.y+l}},viewportInitialized:!0}:Vye,[t,n])};function aj(){const e=Gye(),t=Gn(),n=I.useCallback(()=>t.getState().getNodes().map(m=>({...m})),[]),r=I.useCallback(m=>t.getState().nodeInternals.get(m),[]),i=I.useCallback(()=>{const{edges:m=[]}=t.getState();return m.map(_=>({..._}))},[]),o=I.useCallback(m=>{const{edges:_=[]}=t.getState();return _.find(v=>v.id===m)},[]),s=I.useCallback(m=>{const{getNodes:_,setNodes:v,hasDefaultNodes:y,onNodesChange:g}=t.getState(),b=_(),S=typeof m=="function"?m(b):m;if(y)v(S);else if(g){const w=S.length===0?b.map(C=>({type:"remove",id:C.id})):S.map(C=>({item:C,type:"reset"}));g(w)}},[]),a=I.useCallback(m=>{const{edges:_=[],setEdges:v,hasDefaultEdges:y,onEdgesChange:g}=t.getState(),b=typeof m=="function"?m(_):m;if(y)v(b);else if(g){const S=b.length===0?_.map(w=>({type:"remove",id:w.id})):b.map(w=>({item:w,type:"reset"}));g(S)}},[]),l=I.useCallback(m=>{const _=Array.isArray(m)?m:[m],{getNodes:v,setNodes:y,hasDefaultNodes:g,onNodesChange:b}=t.getState();if(g){const w=[...v(),..._];y(w)}else if(b){const S=_.map(w=>({item:w,type:"add"}));b(S)}},[]),c=I.useCallback(m=>{const _=Array.isArray(m)?m:[m],{edges:v=[],setEdges:y,hasDefaultEdges:g,onEdgesChange:b}=t.getState();if(g)y([...v,..._]);else if(b){const S=_.map(w=>({item:w,type:"add"}));b(S)}},[]),u=I.useCallback(()=>{const{getNodes:m,edges:_=[],transform:v}=t.getState(),[y,g,b]=v;return{nodes:m().map(S=>({...S})),edges:_.map(S=>({...S})),viewport:{x:y,y:g,zoom:b}}},[]),d=I.useCallback(({nodes:m,edges:_})=>{const{nodeInternals:v,getNodes:y,edges:g,hasDefaultNodes:b,hasDefaultEdges:S,onNodesDelete:w,onEdgesDelete:C,onNodesChange:x,onEdgesChange:k}=t.getState(),A=(m||[]).map(P=>P.id),R=(_||[]).map(P=>P.id),L=y().reduce((P,O)=>{const F=!A.includes(O.id)&&O.parentNode&&P.find(D=>D.id===O.parentNode);return(typeof O.deletable=="boolean"?O.deletable:!0)&&(A.includes(O.id)||F)&&P.push(O),P},[]),M=g.filter(P=>typeof P.deletable=="boolean"?P.deletable:!0),E=M.filter(P=>R.includes(P.id));if(L||E){const P=$T(L,M),O=[...E,...P],F=O.reduce(($,D)=>($.includes(D.id)||$.push(D.id),$),[]);if((S||b)&&(S&&t.setState({edges:g.filter($=>!F.includes($.id))}),b&&(L.forEach($=>{v.delete($.id)}),t.setState({nodeInternals:new Map(v)}))),F.length>0&&(C==null||C(O),k&&k(F.map($=>({id:$,type:"remove"})))),L.length>0&&(w==null||w(L),x)){const $=L.map(D=>({id:D.id,type:"remove"}));x($)}}},[]),f=I.useCallback(m=>{const _=cye(m),v=_?null:t.getState().nodeInternals.get(m.id);return[_?m:u8(v),v,_]},[]),h=I.useCallback((m,_=!0,v)=>{const[y,g,b]=f(m);return y?(v||t.getState().getNodes()).filter(S=>{if(!b&&(S.id===g.id||!S.positionAbsolute))return!1;const w=u8(S),C=s3(w,y);return _&&C>0||C>=y.width*y.height}):[]},[]),p=I.useCallback((m,_,v=!0)=>{const[y]=f(m);if(!y)return!1;const g=s3(y,_);return v&&g>0||g>=y.width*y.height},[]);return I.useMemo(()=>({...e,getNodes:n,getNode:r,getEdges:i,getEdge:o,setNodes:s,setEdges:a,addNodes:l,addEdges:c,toObject:u,deleteElements:d,getIntersectingNodes:h,isNodeIntersecting:p}),[e,n,r,i,o,s,a,l,c,u,d,h,p])}const Hye={actInsideInputWithModifier:!1};var Wye=({deleteKeyCode:e,multiSelectionKeyCode:t})=>{const n=Gn(),{deleteElements:r}=aj(),i=Ag(e,Hye),o=Ag(t);I.useEffect(()=>{if(i){const{edges:s,getNodes:a}=n.getState(),l=a().filter(u=>u.selected),c=s.filter(u=>u.selected);r({nodes:l,edges:c}),n.setState({nodesSelectionActive:!1})}},[i]),I.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])};function qye(e){const t=Gn();I.useEffect(()=>{let n;const r=()=>{var o,s;if(!e.current)return;const i=AT(e.current);(i.height===0||i.width===0)&&((s=(o=t.getState()).onError)==null||s.call(o,"004",fa.error004())),t.setState({width:i.width||500,height:i.height||500})};return r(),window.addEventListener("resize",r),e.current&&(n=new ResizeObserver(()=>r()),n.observe(e.current)),()=>{window.removeEventListener("resize",r),n&&e.current&&n.unobserve(e.current)}},[])}const DT={position:"absolute",width:"100%",height:"100%",top:0,left:0},Kye=(e,t)=>e.x!==t.x||e.y!==t.y||e.zoom!==t.k,ry=e=>({x:e.x,y:e.y,zoom:e.k}),Fu=(e,t)=>e.target.closest(`.${t}`),_8=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),S8=e=>{const t=e.ctrlKey&&$1()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t},Xye=e=>({d3Zoom:e.d3Zoom,d3Selection:e.d3Selection,d3ZoomHandler:e.d3ZoomHandler,userSelectionActive:e.userSelectionActive}),Qye=({onMove:e,onMoveStart:t,onMoveEnd:n,onPaneContextMenu:r,zoomOnScroll:i=!0,zoomOnPinch:o=!0,panOnScroll:s=!1,panOnScrollSpeed:a=.5,panOnScrollMode:l=wc.Free,zoomOnDoubleClick:c=!0,elementsSelectable:u,panOnDrag:d=!0,defaultViewport:f,translateExtent:h,minZoom:p,maxZoom:m,zoomActivationKeyCode:_,preventScrolling:v=!0,children:y,noWheelClassName:g,noPanClassName:b})=>{const S=I.useRef(),w=Gn(),C=I.useRef(!1),x=I.useRef(!1),k=I.useRef(null),A=I.useRef({x:0,y:0,zoom:0}),{d3Zoom:R,d3Selection:L,d3ZoomHandler:M,userSelectionActive:E}=rn(Xye,ti),P=Ag(_),O=I.useRef(0),F=I.useRef(!1),$=I.useRef();return qye(k),I.useEffect(()=>{if(k.current){const D=k.current.getBoundingClientRect(),N=nye().scaleExtent([p,m]).translateExtent(h),z=xo(k.current).call(N),V=dl.translate(f.x,f.y).scale(mf(f.zoom,p,m)),H=[[0,0],[D.width,D.height]],X=N.constrain()(V,H,h);N.transform(z,X),N.wheelDelta(S8),w.setState({d3Zoom:N,d3Selection:z,d3ZoomHandler:z.on("wheel.zoom"),transform:[X.x,X.y,X.k],domNode:k.current.closest(".react-flow")})}},[]),I.useEffect(()=>{L&&R&&(s&&!P&&!E?L.on("wheel.zoom",D=>{if(Fu(D,g))return!1;D.preventDefault(),D.stopImmediatePropagation();const N=L.property("__zoom").k||1,z=$1();if(D.ctrlKey&&o&&z){const Z=Jo(D),oe=S8(D),be=N*Math.pow(2,oe);R.scaleTo(L,be,Z,D);return}const V=D.deltaMode===1?20:1;let H=l===wc.Vertical?0:D.deltaX*V,X=l===wc.Horizontal?0:D.deltaY*V;!z&&D.shiftKey&&l!==wc.Vertical&&(H=D.deltaY*V,X=0),R.translateBy(L,-(H/N)*a,-(X/N)*a,{internal:!0});const te=ry(L.property("__zoom")),{onViewportChangeStart:ee,onViewportChange:j,onViewportChangeEnd:q}=w.getState();clearTimeout($.current),F.current||(F.current=!0,t==null||t(D,te),ee==null||ee(te)),F.current&&(e==null||e(D,te),j==null||j(te),$.current=setTimeout(()=>{n==null||n(D,te),q==null||q(te),F.current=!1},150))},{passive:!1}):typeof M<"u"&&L.on("wheel.zoom",function(D,N){if(!v||Fu(D,g))return null;D.preventDefault(),M.call(this,D,N)},{passive:!1}))},[E,s,l,L,R,M,P,o,v,g,t,e,n]),I.useEffect(()=>{R&&R.on("start",D=>{var V,H;if(!D.sourceEvent||D.sourceEvent.internal)return null;O.current=(V=D.sourceEvent)==null?void 0:V.button;const{onViewportChangeStart:N}=w.getState(),z=ry(D.transform);C.current=!0,A.current=z,((H=D.sourceEvent)==null?void 0:H.type)==="mousedown"&&w.setState({paneDragging:!0}),N==null||N(z),t==null||t(D.sourceEvent,z)})},[R,t]),I.useEffect(()=>{R&&(E&&!C.current?R.on("zoom",null):E||R.on("zoom",D=>{var z;const{onViewportChange:N}=w.getState();if(w.setState({transform:[D.transform.x,D.transform.y,D.transform.k]}),x.current=!!(r&&_8(d,O.current??0)),(e||N)&&!((z=D.sourceEvent)!=null&&z.internal)){const V=ry(D.transform);N==null||N(V),e==null||e(D.sourceEvent,V)}}))},[E,R,e,d,r]),I.useEffect(()=>{R&&R.on("end",D=>{if(!D.sourceEvent||D.sourceEvent.internal)return null;const{onViewportChangeEnd:N}=w.getState();if(C.current=!1,w.setState({paneDragging:!1}),r&&_8(d,O.current??0)&&!x.current&&r(D.sourceEvent),x.current=!1,(n||N)&&Kye(A.current,D.transform)){const z=ry(D.transform);A.current=z,clearTimeout(S.current),S.current=setTimeout(()=>{N==null||N(z),n==null||n(D.sourceEvent,z)},s?150:0)}})},[R,s,d,n,r]),I.useEffect(()=>{R&&R.filter(D=>{const N=P||i,z=o&&D.ctrlKey;if((d===!0||Array.isArray(d)&&d.includes(1))&&D.button===1&&D.type==="mousedown"&&(Fu(D,"react-flow__node")||Fu(D,"react-flow__edge")))return!0;if(!d&&!N&&!s&&!c&&!o||E||!c&&D.type==="dblclick"||Fu(D,g)&&D.type==="wheel"||Fu(D,b)&&(D.type!=="wheel"||s&&D.type==="wheel"&&!P)||!o&&D.ctrlKey&&D.type==="wheel"||!N&&!s&&!z&&D.type==="wheel"||!d&&(D.type==="mousedown"||D.type==="touchstart")||Array.isArray(d)&&!d.includes(D.button)&&(D.type==="mousedown"||D.type==="touchstart"))return!1;const V=Array.isArray(d)&&d.includes(D.button)||!D.button||D.button<=1;return(!D.ctrlKey||D.type==="wheel")&&V})},[E,R,i,o,s,c,d,u,P]),Q.createElement("div",{className:"react-flow__renderer",ref:k,style:DT},y)},Yye=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Zye(){const{userSelectionActive:e,userSelectionRect:t}=rn(Yye,ti);return e&&t?Q.createElement("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}function x8(e,t){const n=e.find(r=>r.id===t.parentNode);if(n){const r=t.position.x+t.width-n.width,i=t.position.y+t.height-n.height;if(r>0||i>0||t.position.x<0||t.position.y<0){if(n.style={...n.style},n.style.width=n.style.width??n.width,n.style.height=n.style.height??n.height,r>0&&(n.style.width+=r),i>0&&(n.style.height+=i),t.position.x<0){const o=Math.abs(t.position.x);n.position.x=n.position.x-o,n.style.width+=o,t.position.x=0}if(t.position.y<0){const o=Math.abs(t.position.y);n.position.y=n.position.y-o,n.style.height+=o,t.position.y=0}n.width=n.style.width,n.height=n.style.height}}}function lj(e,t){if(e.some(r=>r.type==="reset"))return e.filter(r=>r.type==="reset").map(r=>r.item);const n=e.filter(r=>r.type==="add").map(r=>r.item);return t.reduce((r,i)=>{const o=e.filter(a=>a.id===i.id);if(o.length===0)return r.push(i),r;const s={...i};for(const a of o)if(a)switch(a.type){case"select":{s.selected=a.selected;break}case"position":{typeof a.position<"u"&&(s.position=a.position),typeof a.positionAbsolute<"u"&&(s.positionAbsolute=a.positionAbsolute),typeof a.dragging<"u"&&(s.dragging=a.dragging),s.expandParent&&x8(r,s);break}case"dimensions":{typeof a.dimensions<"u"&&(s.width=a.dimensions.width,s.height=a.dimensions.height),typeof a.updateStyle<"u"&&(s.style={...s.style||{},...a.dimensions}),typeof a.resizing=="boolean"&&(s.resizing=a.resizing),s.expandParent&&x8(r,s);break}case"remove":return r}return r.push(s),r},n)}function lc(e,t){return lj(e,t)}function Ql(e,t){return lj(e,t)}const ja=(e,t)=>({id:e,type:"select",selected:t});function cd(e,t){return e.reduce((n,r)=>{const i=t.includes(r.id);return!r.selected&&i?(r.selected=!0,n.push(ja(r.id,!0))):r.selected&&!i&&(r.selected=!1,n.push(ja(r.id,!1))),n},[])}const uw=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},Jye=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging}),cj=I.memo(({isSelecting:e,selectionMode:t=Cl.Full,panOnDrag:n,onSelectionStart:r,onSelectionEnd:i,onPaneClick:o,onPaneContextMenu:s,onPaneScroll:a,onPaneMouseEnter:l,onPaneMouseMove:c,onPaneMouseLeave:u,children:d})=>{const f=I.useRef(null),h=Gn(),p=I.useRef(0),m=I.useRef(0),_=I.useRef(),{userSelectionActive:v,elementsSelectable:y,dragging:g}=rn(Jye,ti),b=()=>{h.setState({userSelectionActive:!1,userSelectionRect:null}),p.current=0,m.current=0},S=M=>{o==null||o(M),h.getState().resetSelectedElements(),h.setState({nodesSelectionActive:!1})},w=M=>{if(Array.isArray(n)&&(n!=null&&n.includes(2))){M.preventDefault();return}s==null||s(M)},C=a?M=>a(M):void 0,x=M=>{const{resetSelectedElements:E,domNode:P}=h.getState();if(_.current=P==null?void 0:P.getBoundingClientRect(),!y||!e||M.button!==0||M.target!==f.current||!_.current)return;const{x:O,y:F}=fl(M,_.current);E(),h.setState({userSelectionRect:{width:0,height:0,startX:O,startY:F,x:O,y:F}}),r==null||r(M)},k=M=>{const{userSelectionRect:E,nodeInternals:P,edges:O,transform:F,onNodesChange:$,onEdgesChange:D,nodeOrigin:N,getNodes:z}=h.getState();if(!e||!_.current||!E)return;h.setState({userSelectionActive:!0,nodesSelectionActive:!1});const V=fl(M,_.current),H=E.startX??0,X=E.startY??0,te={...E,x:V.xoe.id),Z=j.map(oe=>oe.id);if(p.current!==Z.length){p.current=Z.length;const oe=cd(ee,Z);oe.length&&($==null||$(oe))}if(m.current!==q.length){m.current=q.length;const oe=cd(O,q);oe.length&&(D==null||D(oe))}h.setState({userSelectionRect:te})},A=M=>{if(M.button!==0)return;const{userSelectionRect:E}=h.getState();!v&&E&&M.target===f.current&&(S==null||S(M)),h.setState({nodesSelectionActive:p.current>0}),b(),i==null||i(M)},R=M=>{v&&(h.setState({nodesSelectionActive:p.current>0}),i==null||i(M)),b()},L=y&&(e||v);return Q.createElement("div",{className:no(["react-flow__pane",{dragging:g,selection:e}]),onClick:L?void 0:uw(S,f),onContextMenu:uw(w,f),onWheel:uw(C,f),onMouseEnter:L?void 0:l,onMouseDown:L?x:void 0,onMouseMove:L?k:c,onMouseUp:L?A:void 0,onMouseLeave:L?R:u,ref:f,style:DT},d,Q.createElement(Zye,null))});cj.displayName="Pane";function uj(e,t){if(!e.parentNode)return!1;const n=t.get(e.parentNode);return n?n.selected?!0:uj(n,t):!1}function w8(e,t,n){let r=e;do{if(r!=null&&r.matches(t))return!0;if(r===n.current)return!1;r=r.parentElement}while(r);return!1}function eve(e,t,n,r){return Array.from(e.values()).filter(i=>(i.selected||i.id===r)&&(!i.parentNode||!uj(i,e))&&(i.draggable||t&&typeof i.draggable>"u")).map(i=>{var o,s;return{id:i.id,position:i.position||{x:0,y:0},positionAbsolute:i.positionAbsolute||{x:0,y:0},distance:{x:n.x-(((o=i.positionAbsolute)==null?void 0:o.x)??0),y:n.y-(((s=i.positionAbsolute)==null?void 0:s.y)??0)},delta:{x:0,y:0},extent:i.extent,parentNode:i.parentNode,width:i.width,height:i.height,expandParent:i.expandParent}})}function tve(e,t){return!t||t==="parent"?t:[t[0],[t[1][0]-(e.width||0),t[1][1]-(e.height||0)]]}function dj(e,t,n,r,i=[0,0],o){const s=tve(e,e.extent||r);let a=s;if(e.extent==="parent"&&!e.expandParent)if(e.parentNode&&e.width&&e.height){const u=n.get(e.parentNode),{x:d,y:f}=Dd(u,i).positionAbsolute;a=u&&Xi(d)&&Xi(f)&&Xi(u.width)&&Xi(u.height)?[[d+e.width*i[0],f+e.height*i[1]],[d+u.width-e.width+e.width*i[0],f+u.height-e.height+e.height*i[1]]]:a}else o==null||o("005",fa.error005()),a=s;else if(e.extent&&e.parentNode&&e.extent!=="parent"){const u=n.get(e.parentNode),{x:d,y:f}=Dd(u,i).positionAbsolute;a=[[e.extent[0][0]+d,e.extent[0][1]+f],[e.extent[1][0]+d,e.extent[1][1]+f]]}let l={x:0,y:0};if(e.parentNode){const u=n.get(e.parentNode);l=Dd(u,i).positionAbsolute}const c=a&&a!=="parent"?kT(t,a):t;return{position:{x:c.x-l.x,y:c.y-l.y},positionAbsolute:c}}function dw({nodeId:e,dragItems:t,nodeInternals:n}){const r=t.map(i=>({...n.get(i.id),position:i.position,positionAbsolute:i.positionAbsolute}));return[e?r.find(i=>i.id===e):r[0],r]}const C8=(e,t,n,r)=>{const i=t.querySelectorAll(e);if(!i||!i.length)return null;const o=Array.from(i),s=t.getBoundingClientRect(),a={x:s.width*r[0],y:s.height*r[1]};return o.map(l=>{const c=l.getBoundingClientRect();return{id:l.getAttribute("data-handleid"),position:l.getAttribute("data-handlepos"),x:(c.left-s.left-a.x)/n,y:(c.top-s.top-a.y)/n,...AT(l)}})};function vh(e,t,n){return n===void 0?n:r=>{const i=t().nodeInternals.get(e);i&&n(r,{...i})}}function f3({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:o,multiSelectionActive:s,nodeInternals:a,onError:l}=t.getState(),c=a.get(e);if(!c){l==null||l("012",fa.error012(e));return}t.setState({nodesSelectionActive:!1}),c.selected?(n||c.selected&&s)&&(o({nodes:[c],edges:[]}),requestAnimationFrame(()=>{var u;return(u=r==null?void 0:r.current)==null?void 0:u.blur()})):i([e])}function nve(){const e=Gn();return I.useCallback(({sourceEvent:n})=>{const{transform:r,snapGrid:i,snapToGrid:o}=e.getState(),s=n.touches?n.touches[0].clientX:n.clientX,a=n.touches?n.touches[0].clientY:n.clientY,l={x:(s-r[0])/r[2],y:(a-r[1])/r[2]};return{xSnapped:o?i[0]*Math.round(l.x/i[0]):l.x,ySnapped:o?i[1]*Math.round(l.y/i[1]):l.y,...l}},[])}function fw(e){return(t,n,r)=>e==null?void 0:e(t,r)}function fj({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,selectNodesOnDrag:s}){const a=Gn(),[l,c]=I.useState(!1),u=I.useRef([]),d=I.useRef({x:null,y:null}),f=I.useRef(0),h=I.useRef(null),p=I.useRef({x:0,y:0}),m=I.useRef(null),_=I.useRef(!1),v=I.useRef(!1),y=nve();return I.useEffect(()=>{if(e!=null&&e.current){const g=xo(e.current),b=({x:C,y:x})=>{const{nodeInternals:k,onNodeDrag:A,onSelectionDrag:R,updateNodePositions:L,nodeExtent:M,snapGrid:E,snapToGrid:P,nodeOrigin:O,onError:F}=a.getState();d.current={x:C,y:x};let $=!1,D={x:0,y:0,x2:0,y2:0};if(u.current.length>1&&M){const z=OT(u.current,O);D=Tg(z)}if(u.current=u.current.map(z=>{const V={x:C-z.distance.x,y:x-z.distance.y};P&&(V.x=E[0]*Math.round(V.x/E[0]),V.y=E[1]*Math.round(V.y/E[1]));const H=[[M[0][0],M[0][1]],[M[1][0],M[1][1]]];u.current.length>1&&M&&!z.extent&&(H[0][0]=z.positionAbsolute.x-D.x+M[0][0],H[1][0]=z.positionAbsolute.x+(z.width??0)-D.x2+M[1][0],H[0][1]=z.positionAbsolute.y-D.y+M[0][1],H[1][1]=z.positionAbsolute.y+(z.height??0)-D.y2+M[1][1]);const X=dj(z,V,k,H,O,F);return $=$||z.position.x!==X.position.x||z.position.y!==X.position.y,z.position=X.position,z.positionAbsolute=X.positionAbsolute,z}),!$)return;L(u.current,!0,!0),c(!0);const N=i?A:fw(R);if(N&&m.current){const[z,V]=dw({nodeId:i,dragItems:u.current,nodeInternals:k});N(m.current,z,V)}},S=()=>{if(!h.current)return;const[C,x]=Mz(p.current,h.current);if(C!==0||x!==0){const{transform:k,panBy:A}=a.getState();d.current.x=(d.current.x??0)-C/k[2],d.current.y=(d.current.y??0)-x/k[2],A({x:C,y:x})&&b(d.current)}f.current=requestAnimationFrame(S)},w=C=>{var O;const{nodeInternals:x,multiSelectionActive:k,nodesDraggable:A,unselectNodesAndEdges:R,onNodeDragStart:L,onSelectionDragStart:M}=a.getState();v.current=!0;const E=i?L:fw(M);(!s||!o)&&!k&&i&&((O=x.get(i))!=null&&O.selected||R()),i&&o&&s&&f3({id:i,store:a,nodeRef:e});const P=y(C);if(d.current=P,u.current=eve(x,A,P,i),E&&u.current){const[F,$]=dw({nodeId:i,dragItems:u.current,nodeInternals:x});E(C.sourceEvent,F,$)}};if(t)g.on(".drag",null);else{const C=fme().on("start",x=>{const{domNode:k,nodeDragThreshold:A}=a.getState();A===0&&w(x);const R=y(x);d.current=R,h.current=(k==null?void 0:k.getBoundingClientRect())||null,p.current=fl(x.sourceEvent,h.current)}).on("drag",x=>{var L,M;const k=y(x),{autoPanOnNodeDrag:A,nodeDragThreshold:R}=a.getState();if(!_.current&&v.current&&A&&(_.current=!0,S()),!v.current){const E=k.xSnapped-(((L=d==null?void 0:d.current)==null?void 0:L.x)??0),P=k.ySnapped-(((M=d==null?void 0:d.current)==null?void 0:M.y)??0);Math.sqrt(E*E+P*P)>R&&w(x)}(d.current.x!==k.xSnapped||d.current.y!==k.ySnapped)&&u.current&&v.current&&(m.current=x.sourceEvent,p.current=fl(x.sourceEvent,h.current),b(k))}).on("end",x=>{if(v.current&&(c(!1),_.current=!1,v.current=!1,cancelAnimationFrame(f.current),u.current)){const{updateNodePositions:k,nodeInternals:A,onNodeDragStop:R,onSelectionDragStop:L}=a.getState(),M=i?R:fw(L);if(k(u.current,!1,!1),M){const[E,P]=dw({nodeId:i,dragItems:u.current,nodeInternals:A});M(x.sourceEvent,E,P)}}}).filter(x=>{const k=x.target;return!x.button&&(!n||!w8(k,`.${n}`,e))&&(!r||w8(k,r,e))});return g.call(C),()=>{g.on(".drag",null)}}}},[e,t,n,r,o,a,i,s,y]),l}function hj(){const e=Gn();return I.useCallback(n=>{const{nodeInternals:r,nodeExtent:i,updateNodePositions:o,getNodes:s,snapToGrid:a,snapGrid:l,onError:c,nodesDraggable:u}=e.getState(),d=s().filter(y=>y.selected&&(y.draggable||u&&typeof y.draggable>"u")),f=a?l[0]:5,h=a?l[1]:5,p=n.isShiftPressed?4:1,m=n.x*f*p,_=n.y*h*p,v=d.map(y=>{if(y.positionAbsolute){const g={x:y.positionAbsolute.x+m,y:y.positionAbsolute.y+_};a&&(g.x=l[0]*Math.round(g.x/l[0]),g.y=l[1]*Math.round(g.y/l[1]));const{positionAbsolute:b,position:S}=dj(y,g,r,i,void 0,c);y.position=S,y.positionAbsolute=b}return y});o(v,!0,!1)},[])}const Ld={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};var bh=e=>{const t=({id:n,type:r,data:i,xPos:o,yPos:s,xPosOrigin:a,yPosOrigin:l,selected:c,onClick:u,onMouseEnter:d,onMouseMove:f,onMouseLeave:h,onContextMenu:p,onDoubleClick:m,style:_,className:v,isDraggable:y,isSelectable:g,isConnectable:b,isFocusable:S,selectNodesOnDrag:w,sourcePosition:C,targetPosition:x,hidden:k,resizeObserver:A,dragHandle:R,zIndex:L,isParent:M,noDragClassName:E,noPanClassName:P,initialized:O,disableKeyboardA11y:F,ariaLabel:$,rfId:D})=>{const N=Gn(),z=I.useRef(null),V=I.useRef(C),H=I.useRef(x),X=I.useRef(r),te=g||y||u||d||f||h,ee=hj(),j=vh(n,N.getState,d),q=vh(n,N.getState,f),Z=vh(n,N.getState,h),oe=vh(n,N.getState,p),be=vh(n,N.getState,m),Me=we=>{const{nodeDragThreshold:pt}=N.getState();if(g&&(!w||!y||pt>0)&&f3({id:n,store:N,nodeRef:z}),u){const vt=N.getState().nodeInternals.get(n);vt&&u(we,{...vt})}},lt=we=>{if(!a3(we))if(Nz.includes(we.key)&&g){const pt=we.key==="Escape";f3({id:n,store:N,unselect:pt,nodeRef:z})}else!F&&y&&c&&Object.prototype.hasOwnProperty.call(Ld,we.key)&&(N.setState({ariaLiveMessage:`Moved selected node ${we.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~o}, y: ${~~s}`}),ee({x:Ld[we.key].x,y:Ld[we.key].y,isShiftPressed:we.shiftKey}))};I.useEffect(()=>{if(z.current&&!k){const we=z.current;return A==null||A.observe(we),()=>A==null?void 0:A.unobserve(we)}},[k]),I.useEffect(()=>{const we=X.current!==r,pt=V.current!==C,vt=H.current!==x;z.current&&(we||pt||vt)&&(we&&(X.current=r),pt&&(V.current=C),vt&&(H.current=x),N.getState().updateNodeDimensions([{id:n,nodeElement:z.current,forceUpdate:!0}]))},[n,r,C,x]);const Le=fj({nodeRef:z,disabled:k||!y,noDragClassName:E,handleSelector:R,nodeId:n,isSelectable:g,selectNodesOnDrag:w});return k?null:Q.createElement("div",{className:no(["react-flow__node",`react-flow__node-${r}`,{[P]:y},v,{selected:c,selectable:g,parent:M,dragging:Le}]),ref:z,style:{zIndex:L,transform:`translate(${a}px,${l}px)`,pointerEvents:te?"all":"none",visibility:O?"visible":"hidden",..._},"data-id":n,"data-testid":`rf__node-${n}`,onMouseEnter:j,onMouseMove:q,onMouseLeave:Z,onContextMenu:oe,onClick:Me,onDoubleClick:be,onKeyDown:S?lt:void 0,tabIndex:S?0:void 0,role:S?"button":void 0,"aria-describedby":F?void 0:`${nj}-${D}`,"aria-label":$},Q.createElement(mye,{value:n},Q.createElement(e,{id:n,data:i,type:r,xPos:o,yPos:s,selected:c,isConnectable:b,sourcePosition:C,targetPosition:x,dragging:Le,dragHandle:R,zIndex:L})))};return t.displayName="NodeWrapper",I.memo(t)};const rve=e=>{const t=e.getNodes().filter(n=>n.selected);return{...OT(t,e.nodeOrigin),transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`,userSelectionActive:e.userSelectionActive}};function ive({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Gn(),{width:i,height:o,x:s,y:a,transformString:l,userSelectionActive:c}=rn(rve,ti),u=hj(),d=I.useRef(null);if(I.useEffect(()=>{var p;n||(p=d.current)==null||p.focus({preventScroll:!0})},[n]),fj({nodeRef:d}),c||!i||!o)return null;const f=e?p=>{const m=r.getState().getNodes().filter(_=>_.selected);e(p,m)}:void 0,h=p=>{Object.prototype.hasOwnProperty.call(Ld,p.key)&&u({x:Ld[p.key].x,y:Ld[p.key].y,isShiftPressed:p.shiftKey})};return Q.createElement("div",{className:no(["react-flow__nodesselection","react-flow__container",t]),style:{transform:l}},Q.createElement("div",{ref:d,className:"react-flow__nodesselection-rect",onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:h,style:{width:i,height:o,top:a,left:s}}))}var ove=I.memo(ive);const sve=e=>e.nodesSelectionActive,pj=({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,deleteKeyCode:a,onMove:l,onMoveStart:c,onMoveEnd:u,selectionKeyCode:d,selectionOnDrag:f,selectionMode:h,onSelectionStart:p,onSelectionEnd:m,multiSelectionKeyCode:_,panActivationKeyCode:v,zoomActivationKeyCode:y,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:S,panOnScroll:w,panOnScrollSpeed:C,panOnScrollMode:x,zoomOnDoubleClick:k,panOnDrag:A,defaultViewport:R,translateExtent:L,minZoom:M,maxZoom:E,preventScrolling:P,onSelectionContextMenu:O,noWheelClassName:F,noPanClassName:$,disableKeyboardA11y:D})=>{const N=rn(sve),z=Ag(d),V=Ag(v),H=V||A,X=V||w,te=z||f&&H!==!0;return Wye({deleteKeyCode:a,multiSelectionKeyCode:_}),Q.createElement(Qye,{onMove:l,onMoveStart:c,onMoveEnd:u,onPaneContextMenu:o,elementsSelectable:g,zoomOnScroll:b,zoomOnPinch:S,panOnScroll:X,panOnScrollSpeed:C,panOnScrollMode:x,zoomOnDoubleClick:k,panOnDrag:!z&&H,defaultViewport:R,translateExtent:L,minZoom:M,maxZoom:E,zoomActivationKeyCode:y,preventScrolling:P,noWheelClassName:F,noPanClassName:$},Q.createElement(cj,{onSelectionStart:p,onSelectionEnd:m,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:s,panOnDrag:H,isSelecting:!!te,selectionMode:h},e,N&&Q.createElement(ove,{onSelectionContextMenu:O,noPanClassName:$,disableKeyboardA11y:D})))};pj.displayName="FlowRenderer";var ave=I.memo(pj);function lve(e){return rn(I.useCallback(n=>e?Gz(n.nodeInternals,{x:0,y:0,width:n.width,height:n.height},n.transform,!0):n.getNodes(),[e]))}function cve(e){const t={input:bh(e.input||Zz),default:bh(e.default||d3),output:bh(e.output||ej),group:bh(e.group||FT)},n={},r=Object.keys(e).filter(i=>!["input","default","output","group"].includes(i)).reduce((i,o)=>(i[o]=bh(e[o]||d3),i),n);return{...t,...r}}const uve=({x:e,y:t,width:n,height:r,origin:i})=>!n||!r?{x:e,y:t}:i[0]<0||i[1]<0||i[0]>1||i[1]>1?{x:e,y:t}:{x:e-n*i[0],y:t-r*i[1]},dve=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,updateNodeDimensions:e.updateNodeDimensions,onError:e.onError}),gj=e=>{const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,updateNodeDimensions:o,onError:s}=rn(dve,ti),a=lve(e.onlyRenderVisibleElements),l=I.useRef(),c=I.useMemo(()=>{if(typeof ResizeObserver>"u")return null;const u=new ResizeObserver(d=>{const f=d.map(h=>({id:h.target.getAttribute("data-id"),nodeElement:h.target,forceUpdate:!0}));o(f)});return l.current=u,u},[]);return I.useEffect(()=>()=>{var u;(u=l==null?void 0:l.current)==null||u.disconnect()},[]),Q.createElement("div",{className:"react-flow__nodes",style:DT},a.map(u=>{var S,w;let d=u.type||"default";e.nodeTypes[d]||(s==null||s("003",fa.error003(d)),d="default");const f=e.nodeTypes[d]||e.nodeTypes.default,h=!!(u.draggable||t&&typeof u.draggable>"u"),p=!!(u.selectable||i&&typeof u.selectable>"u"),m=!!(u.connectable||n&&typeof u.connectable>"u"),_=!!(u.focusable||r&&typeof u.focusable>"u"),v=e.nodeExtent?kT(u.positionAbsolute,e.nodeExtent):u.positionAbsolute,y=(v==null?void 0:v.x)??0,g=(v==null?void 0:v.y)??0,b=uve({x:y,y:g,width:u.width??0,height:u.height??0,origin:e.nodeOrigin});return Q.createElement(f,{key:u.id,id:u.id,className:u.className,style:u.style,type:d,data:u.data,sourcePosition:u.sourcePosition||Te.Bottom,targetPosition:u.targetPosition||Te.Top,hidden:u.hidden,xPos:y,yPos:g,xPosOrigin:b.x,yPosOrigin:b.y,selectNodesOnDrag:e.selectNodesOnDrag,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,selected:!!u.selected,isDraggable:h,isSelectable:p,isConnectable:m,isFocusable:_,resizeObserver:c,dragHandle:u.dragHandle,zIndex:((S=u[Tn])==null?void 0:S.z)??0,isParent:!!((w=u[Tn])!=null&&w.isParent),noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,initialized:!!u.width&&!!u.height,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,ariaLabel:u.ariaLabel})}))};gj.displayName="NodeRenderer";var fve=I.memo(gj);const hve=(e,t,n)=>n===Te.Left?e-t:n===Te.Right?e+t:e,pve=(e,t,n)=>n===Te.Top?e-t:n===Te.Bottom?e+t:e,E8="react-flow__edgeupdater",T8=({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:o,onMouseOut:s,type:a})=>Q.createElement("circle",{onMouseDown:i,onMouseEnter:o,onMouseOut:s,className:no([E8,`${E8}-${a}`]),cx:hve(t,r,e),cy:pve(n,r,e),r,stroke:"transparent",fill:"transparent"}),gve=()=>!0;var Du=e=>{const t=({id:n,className:r,type:i,data:o,onClick:s,onEdgeDoubleClick:a,selected:l,animated:c,label:u,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,style:_,source:v,target:y,sourceX:g,sourceY:b,targetX:S,targetY:w,sourcePosition:C,targetPosition:x,elementsSelectable:k,hidden:A,sourceHandleId:R,targetHandleId:L,onContextMenu:M,onMouseEnter:E,onMouseMove:P,onMouseLeave:O,edgeUpdaterRadius:F,onEdgeUpdate:$,onEdgeUpdateStart:D,onEdgeUpdateEnd:N,markerEnd:z,markerStart:V,rfId:H,ariaLabel:X,isFocusable:te,isUpdatable:ee,pathOptions:j,interactionWidth:q})=>{const Z=I.useRef(null),[oe,be]=I.useState(!1),[Me,lt]=I.useState(!1),Le=Gn(),we=I.useMemo(()=>`url(#${c3(V,H)})`,[V,H]),pt=I.useMemo(()=>`url(#${c3(z,H)})`,[z,H]);if(A)return null;const vt=Yt=>{var hn;const{edges:It,addSelectedEdges:oi,unselectNodesAndEdges:Oi,multiSelectionActive:ho}=Le.getState(),Ur=It.find(si=>si.id===n);Ur&&(k&&(Le.setState({nodesSelectionActive:!1}),Ur.selected&&ho?(Oi({nodes:[],edges:[Ur]}),(hn=Z.current)==null||hn.blur()):oi([n])),s&&s(Yt,Ur))},Ce=yh(n,Le.getState,a),ii=yh(n,Le.getState,M),sn=yh(n,Le.getState,E),jr=yh(n,Le.getState,P),sr=yh(n,Le.getState,O),fn=(Yt,It)=>{if(Yt.button!==0)return;const{edges:oi,isValidConnection:Oi}=Le.getState(),ho=It?y:v,Ur=(It?L:R)||null,hn=It?"target":"source",si=Oi||gve,Gl=It,Go=oi.find(_t=>_t.id===n);lt(!0),D==null||D(Yt,Go,hn);const Hl=_t=>{lt(!1),N==null||N(_t,Go,hn)};Kz({event:Yt,handleId:Ur,nodeId:ho,onConnect:_t=>$==null?void 0:$(Go,_t),isTarget:Gl,getState:Le.getState,setState:Le.setState,isValidConnection:si,edgeUpdaterType:hn,onEdgeUpdateEnd:Hl})},Vr=Yt=>fn(Yt,!0),fo=Yt=>fn(Yt,!1),Ri=()=>be(!0),ar=()=>be(!1),Wn=!k&&!s,wr=Yt=>{var It;if(Nz.includes(Yt.key)&&k){const{unselectNodesAndEdges:oi,addSelectedEdges:Oi,edges:ho}=Le.getState();Yt.key==="Escape"?((It=Z.current)==null||It.blur(),oi({edges:[ho.find(hn=>hn.id===n)]})):Oi([n])}};return Q.createElement("g",{className:no(["react-flow__edge",`react-flow__edge-${i}`,r,{selected:l,animated:c,inactive:Wn,updating:oe}]),onClick:vt,onDoubleClick:Ce,onContextMenu:ii,onMouseEnter:sn,onMouseMove:jr,onMouseLeave:sr,onKeyDown:te?wr:void 0,tabIndex:te?0:void 0,role:te?"button":"img","data-testid":`rf__edge-${n}`,"aria-label":X===null?void 0:X||`Edge from ${v} to ${y}`,"aria-describedby":te?`${rj}-${H}`:void 0,ref:Z},!Me&&Q.createElement(e,{id:n,source:v,target:y,selected:l,animated:c,label:u,labelStyle:d,labelShowBg:f,labelBgStyle:h,labelBgPadding:p,labelBgBorderRadius:m,data:o,style:_,sourceX:g,sourceY:b,targetX:S,targetY:w,sourcePosition:C,targetPosition:x,sourceHandleId:R,targetHandleId:L,markerStart:we,markerEnd:pt,pathOptions:j,interactionWidth:q}),ee&&Q.createElement(Q.Fragment,null,(ee==="source"||ee===!0)&&Q.createElement(T8,{position:C,centerX:g,centerY:b,radius:F,onMouseDown:Vr,onMouseEnter:Ri,onMouseOut:ar,type:"source"}),(ee==="target"||ee===!0)&&Q.createElement(T8,{position:x,centerX:S,centerY:w,radius:F,onMouseDown:fo,onMouseEnter:Ri,onMouseOut:ar,type:"target"})))};return t.displayName="EdgeWrapper",I.memo(t)};function mve(e){const t={default:Du(e.default||F1),straight:Du(e.bezier||MT),step:Du(e.step||IT),smoothstep:Du(e.step||lS),simplebezier:Du(e.simplebezier||PT)},n={},r=Object.keys(e).filter(i=>!["default","bezier"].includes(i)).reduce((i,o)=>(i[o]=Du(e[o]||F1),i),n);return{...t,...r}}function A8(e,t,n=null){const r=((n==null?void 0:n.x)||0)+t.x,i=((n==null?void 0:n.y)||0)+t.y,o=(n==null?void 0:n.width)||t.width,s=(n==null?void 0:n.height)||t.height;switch(e){case Te.Top:return{x:r+o/2,y:i};case Te.Right:return{x:r+o,y:i+s/2};case Te.Bottom:return{x:r+o/2,y:i+s};case Te.Left:return{x:r,y:i+s/2}}}function k8(e,t){return e?e.length===1||!t?e[0]:t&&e.find(n=>n.id===t)||null:null}const yve=(e,t,n,r,i,o)=>{const s=A8(n,e,t),a=A8(o,r,i);return{sourceX:s.x,sourceY:s.y,targetX:a.x,targetY:a.y}};function vve({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:r,targetWidth:i,targetHeight:o,width:s,height:a,transform:l}){const c={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+r,t.y+o)};c.x===c.x2&&(c.x2+=1),c.y===c.y2&&(c.y2+=1);const u=Tg({x:(0-l[0])/l[2],y:(0-l[1])/l[2],width:s/l[2],height:a/l[2]}),d=Math.max(0,Math.min(u.x2,c.x2)-Math.max(u.x,c.x)),f=Math.max(0,Math.min(u.y2,c.y2)-Math.max(u.y,c.y));return Math.ceil(d*f)>0}function P8(e){var r,i,o,s,a;const t=((r=e==null?void 0:e[Tn])==null?void 0:r.handleBounds)||null,n=t&&(e==null?void 0:e.width)&&(e==null?void 0:e.height)&&typeof((i=e==null?void 0:e.positionAbsolute)==null?void 0:i.x)<"u"&&typeof((o=e==null?void 0:e.positionAbsolute)==null?void 0:o.y)<"u";return[{x:((s=e==null?void 0:e.positionAbsolute)==null?void 0:s.x)||0,y:((a=e==null?void 0:e.positionAbsolute)==null?void 0:a.y)||0,width:(e==null?void 0:e.width)||0,height:(e==null?void 0:e.height)||0},t,!!n]}const bve=[{level:0,isMaxLevel:!0,edges:[]}];function _ve(e,t,n=!1){let r=-1;const i=e.reduce((s,a)=>{var u,d;const l=Xi(a.zIndex);let c=l?a.zIndex:0;if(n){const f=t.get(a.target),h=t.get(a.source),p=a.selected||(f==null?void 0:f.selected)||(h==null?void 0:h.selected),m=Math.max(((u=h==null?void 0:h[Tn])==null?void 0:u.z)||0,((d=f==null?void 0:f[Tn])==null?void 0:d.z)||0,1e3);c=(l?a.zIndex:0)+(p?m:0)}return s[c]?s[c].push(a):s[c]=[a],r=c>r?c:r,s},{}),o=Object.entries(i).map(([s,a])=>{const l=+s;return{edges:a,level:l,isMaxLevel:l===r}});return o.length===0?bve:o}function Sve(e,t,n){const r=rn(I.useCallback(i=>e?i.edges.filter(o=>{const s=t.get(o.source),a=t.get(o.target);return(s==null?void 0:s.width)&&(s==null?void 0:s.height)&&(a==null?void 0:a.width)&&(a==null?void 0:a.height)&&vve({sourcePos:s.positionAbsolute||{x:0,y:0},targetPos:a.positionAbsolute||{x:0,y:0},sourceWidth:s.width,sourceHeight:s.height,targetWidth:a.width,targetHeight:a.height,width:i.width,height:i.height,transform:i.transform})}):i.edges,[e,t]));return _ve(r,t,n)}const xve=({color:e="none",strokeWidth:t=1})=>Q.createElement("polyline",{style:{stroke:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",fill:"none",points:"-5,-4 0,0 -5,4"}),wve=({color:e="none",strokeWidth:t=1})=>Q.createElement("polyline",{style:{stroke:e,fill:e,strokeWidth:t},strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"}),I8={[N1.Arrow]:xve,[N1.ArrowClosed]:wve};function Cve(e){const t=Gn();return I.useMemo(()=>{var i,o;return Object.prototype.hasOwnProperty.call(I8,e)?I8[e]:((o=(i=t.getState()).onError)==null||o.call(i,"009",fa.error009(e)),null)},[e])}const Eve=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:o="strokeWidth",strokeWidth:s,orient:a="auto-start-reverse"})=>{const l=Cve(t);return l?Q.createElement("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:a,refX:"0",refY:"0"},Q.createElement(l,{color:n,strokeWidth:s})):null},Tve=({defaultColor:e,rfId:t})=>n=>{const r=[];return n.edges.reduce((i,o)=>([o.markerStart,o.markerEnd].forEach(s=>{if(s&&typeof s=="object"){const a=c3(s,t);r.includes(a)||(i.push({id:a,color:s.color||e,...s}),r.push(a))}}),i),[]).sort((i,o)=>i.id.localeCompare(o.id))},mj=({defaultColor:e,rfId:t})=>{const n=rn(I.useCallback(Tve({defaultColor:e,rfId:t}),[e,t]),(r,i)=>!(r.length!==i.length||r.some((o,s)=>o.id!==i[s].id)));return Q.createElement("defs",null,n.map(r=>Q.createElement(Eve,{id:r.id,key:r.id,type:r.type,color:r.color,width:r.width,height:r.height,markerUnits:r.markerUnits,strokeWidth:r.strokeWidth,orient:r.orient})))};mj.displayName="MarkerDefinitions";var Ave=I.memo(mj);const kve=e=>({nodesConnectable:e.nodesConnectable,edgesFocusable:e.edgesFocusable,edgesUpdatable:e.edgesUpdatable,elementsSelectable:e.elementsSelectable,width:e.width,height:e.height,connectionMode:e.connectionMode,nodeInternals:e.nodeInternals,onError:e.onError}),yj=({defaultMarkerColor:e,onlyRenderVisibleElements:t,elevateEdgesOnSelect:n,rfId:r,edgeTypes:i,noPanClassName:o,onEdgeUpdate:s,onEdgeContextMenu:a,onEdgeMouseEnter:l,onEdgeMouseMove:c,onEdgeMouseLeave:u,onEdgeClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,children:_})=>{const{edgesFocusable:v,edgesUpdatable:y,elementsSelectable:g,width:b,height:S,connectionMode:w,nodeInternals:C,onError:x}=rn(kve,ti),k=Sve(t,C,n);return b?Q.createElement(Q.Fragment,null,k.map(({level:A,edges:R,isMaxLevel:L})=>Q.createElement("svg",{key:A,style:{zIndex:A},width:b,height:S,className:"react-flow__edges react-flow__container"},L&&Q.createElement(Ave,{defaultColor:e,rfId:r}),Q.createElement("g",null,R.map(M=>{const[E,P,O]=P8(C.get(M.source)),[F,$,D]=P8(C.get(M.target));if(!O||!D)return null;let N=M.type||"default";i[N]||(x==null||x("011",fa.error011(N)),N="default");const z=i[N]||i.default,V=w===iu.Strict?$.target:($.target??[]).concat($.source??[]),H=k8(P.source,M.sourceHandle),X=k8(V,M.targetHandle),te=(H==null?void 0:H.position)||Te.Bottom,ee=(X==null?void 0:X.position)||Te.Top,j=!!(M.focusable||v&&typeof M.focusable>"u"),q=typeof s<"u"&&(M.updatable||y&&typeof M.updatable>"u");if(!H||!X)return x==null||x("008",fa.error008(H,M)),null;const{sourceX:Z,sourceY:oe,targetX:be,targetY:Me}=yve(E,H,te,F,X,ee);return Q.createElement(z,{key:M.id,id:M.id,className:no([M.className,o]),type:N,data:M.data,selected:!!M.selected,animated:!!M.animated,hidden:!!M.hidden,label:M.label,labelStyle:M.labelStyle,labelShowBg:M.labelShowBg,labelBgStyle:M.labelBgStyle,labelBgPadding:M.labelBgPadding,labelBgBorderRadius:M.labelBgBorderRadius,style:M.style,source:M.source,target:M.target,sourceHandleId:M.sourceHandle,targetHandleId:M.targetHandle,markerEnd:M.markerEnd,markerStart:M.markerStart,sourceX:Z,sourceY:oe,targetX:be,targetY:Me,sourcePosition:te,targetPosition:ee,elementsSelectable:g,onEdgeUpdate:s,onContextMenu:a,onMouseEnter:l,onMouseMove:c,onMouseLeave:u,onClick:d,edgeUpdaterRadius:f,onEdgeDoubleClick:h,onEdgeUpdateStart:p,onEdgeUpdateEnd:m,rfId:r,ariaLabel:M.ariaLabel,isFocusable:j,isUpdatable:q,pathOptions:"pathOptions"in M?M.pathOptions:void 0,interactionWidth:M.interactionWidth})})))),_):null};yj.displayName="EdgeRenderer";var Pve=I.memo(yj);const Ive=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function Mve({children:e}){const t=rn(Ive);return Q.createElement("div",{className:"react-flow__viewport react-flow__container",style:{transform:t}},e)}function Rve(e){const t=aj(),n=I.useRef(!1);I.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const Ove={[Te.Left]:Te.Right,[Te.Right]:Te.Left,[Te.Top]:Te.Bottom,[Te.Bottom]:Te.Top},vj=({nodeId:e,handleType:t,style:n,type:r=qa.Bezier,CustomComponent:i,connectionStatus:o})=>{var w,C,x;const{fromNode:s,handleId:a,toX:l,toY:c,connectionMode:u}=rn(I.useCallback(k=>({fromNode:k.nodeInternals.get(e),handleId:k.connectionHandleId,toX:(k.connectionPosition.x-k.transform[0])/k.transform[2],toY:(k.connectionPosition.y-k.transform[1])/k.transform[2],connectionMode:k.connectionMode}),[e]),ti),d=(w=s==null?void 0:s[Tn])==null?void 0:w.handleBounds;let f=d==null?void 0:d[t];if(u===iu.Loose&&(f=f||(d==null?void 0:d[t==="source"?"target":"source"])),!s||!f)return null;const h=a?f.find(k=>k.id===a):f[0],p=h?h.x+h.width/2:(s.width??0)/2,m=h?h.y+h.height/2:s.height??0,_=(((C=s.positionAbsolute)==null?void 0:C.x)??0)+p,v=(((x=s.positionAbsolute)==null?void 0:x.y)??0)+m,y=h==null?void 0:h.position,g=y?Ove[y]:null;if(!y||!g)return null;if(i)return Q.createElement(i,{connectionLineType:r,connectionLineStyle:n,fromNode:s,fromHandle:h,fromX:_,fromY:v,toX:l,toY:c,fromPosition:y,toPosition:g,connectionStatus:o});let b="";const S={sourceX:_,sourceY:v,sourcePosition:y,targetX:l,targetY:c,targetPosition:g};return r===qa.Bezier?[b]=zz(S):r===qa.Step?[b]=l3({...S,borderRadius:0}):r===qa.SmoothStep?[b]=l3(S):r===qa.SimpleBezier?[b]=Bz(S):b=`M${_},${v} ${l},${c}`,Q.createElement("path",{d:b,fill:"none",className:"react-flow__connection-path",style:n})};vj.displayName="ConnectionLine";const $ve=e=>({nodeId:e.connectionNodeId,handleType:e.connectionHandleType,nodesConnectable:e.nodesConnectable,connectionStatus:e.connectionStatus,width:e.width,height:e.height});function Nve({containerStyle:e,style:t,type:n,component:r}){const{nodeId:i,handleType:o,nodesConnectable:s,width:a,height:l,connectionStatus:c}=rn($ve,ti);return!(i&&o&&a&&s)?null:Q.createElement("svg",{style:e,width:a,height:l,className:"react-flow__edges react-flow__connectionline react-flow__container"},Q.createElement("g",{className:no(["react-flow__connection",c])},Q.createElement(vj,{nodeId:i,handleType:o,style:t,type:n,CustomComponent:r,connectionStatus:c})))}function M8(e,t){return I.useRef(null),Gn(),I.useMemo(()=>t(e),[e])}const bj=({nodeTypes:e,edgeTypes:t,onMove:n,onMoveStart:r,onMoveEnd:i,onInit:o,onNodeClick:s,onEdgeClick:a,onNodeDoubleClick:l,onEdgeDoubleClick:c,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,onSelectionContextMenu:p,onSelectionStart:m,onSelectionEnd:_,connectionLineType:v,connectionLineStyle:y,connectionLineComponent:g,connectionLineContainerStyle:b,selectionKeyCode:S,selectionOnDrag:w,selectionMode:C,multiSelectionKeyCode:x,panActivationKeyCode:k,zoomActivationKeyCode:A,deleteKeyCode:R,onlyRenderVisibleElements:L,elementsSelectable:M,selectNodesOnDrag:E,defaultViewport:P,translateExtent:O,minZoom:F,maxZoom:$,preventScrolling:D,defaultMarkerColor:N,zoomOnScroll:z,zoomOnPinch:V,panOnScroll:H,panOnScrollSpeed:X,panOnScrollMode:te,zoomOnDoubleClick:ee,panOnDrag:j,onPaneClick:q,onPaneMouseEnter:Z,onPaneMouseMove:oe,onPaneMouseLeave:be,onPaneScroll:Me,onPaneContextMenu:lt,onEdgeUpdate:Le,onEdgeContextMenu:we,onEdgeMouseEnter:pt,onEdgeMouseMove:vt,onEdgeMouseLeave:Ce,edgeUpdaterRadius:ii,onEdgeUpdateStart:sn,onEdgeUpdateEnd:jr,noDragClassName:sr,noWheelClassName:fn,noPanClassName:Vr,elevateEdgesOnSelect:fo,disableKeyboardA11y:Ri,nodeOrigin:ar,nodeExtent:Wn,rfId:wr})=>{const Yt=M8(e,cve),It=M8(t,mve);return Rve(o),Q.createElement(ave,{onPaneClick:q,onPaneMouseEnter:Z,onPaneMouseMove:oe,onPaneMouseLeave:be,onPaneContextMenu:lt,onPaneScroll:Me,deleteKeyCode:R,selectionKeyCode:S,selectionOnDrag:w,selectionMode:C,onSelectionStart:m,onSelectionEnd:_,multiSelectionKeyCode:x,panActivationKeyCode:k,zoomActivationKeyCode:A,elementsSelectable:M,onMove:n,onMoveStart:r,onMoveEnd:i,zoomOnScroll:z,zoomOnPinch:V,zoomOnDoubleClick:ee,panOnScroll:H,panOnScrollSpeed:X,panOnScrollMode:te,panOnDrag:j,defaultViewport:P,translateExtent:O,minZoom:F,maxZoom:$,onSelectionContextMenu:p,preventScrolling:D,noDragClassName:sr,noWheelClassName:fn,noPanClassName:Vr,disableKeyboardA11y:Ri},Q.createElement(Mve,null,Q.createElement(Pve,{edgeTypes:It,onEdgeClick:a,onEdgeDoubleClick:c,onEdgeUpdate:Le,onlyRenderVisibleElements:L,onEdgeContextMenu:we,onEdgeMouseEnter:pt,onEdgeMouseMove:vt,onEdgeMouseLeave:Ce,onEdgeUpdateStart:sn,onEdgeUpdateEnd:jr,edgeUpdaterRadius:ii,defaultMarkerColor:N,noPanClassName:Vr,elevateEdgesOnSelect:!!fo,disableKeyboardA11y:Ri,rfId:wr},Q.createElement(Nve,{style:y,type:v,component:g,containerStyle:b})),Q.createElement("div",{className:"react-flow__edgelabel-renderer"}),Q.createElement(fve,{nodeTypes:Yt,onNodeClick:s,onNodeDoubleClick:l,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:f,onNodeContextMenu:h,selectNodesOnDrag:E,onlyRenderVisibleElements:L,noPanClassName:Vr,noDragClassName:sr,disableKeyboardA11y:Ri,nodeOrigin:ar,nodeExtent:Wn,rfId:wr})))};bj.displayName="GraphView";var Fve=I.memo(bj);const h3=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Pa={rfId:"1",width:0,height:0,transform:[0,0,1],nodeInternals:new Map,edges:[],onNodesChange:null,onEdgesChange:null,hasDefaultNodes:!1,hasDefaultEdges:!1,d3Zoom:null,d3Selection:null,d3ZoomHandler:void 0,minZoom:.5,maxZoom:2,translateExtent:h3,nodeExtent:h3,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionNodeId:null,connectionHandleId:null,connectionHandleType:"source",connectionPosition:{x:0,y:0},connectionStatus:null,connectionMode:iu.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:[0,0],nodeDragThreshold:0,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesUpdatable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,fitViewOnInit:!1,fitViewOnInitDone:!1,fitViewOnInitOptions:void 0,onSelectionChange:[],multiSelectionActive:!1,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,connectionRadius:20,onError:uye,isValidConnection:void 0},Dve=()=>Cpe((e,t)=>({...Pa,setNodes:n=>{const{nodeInternals:r,nodeOrigin:i,elevateNodesOnSelect:o}=t();e({nodeInternals:cw(n,r,i,o)})},getNodes:()=>Array.from(t().nodeInternals.values()),setEdges:n=>{const{defaultEdgeOptions:r={}}=t();e({edges:n.map(i=>({...r,...i}))})},setDefaultNodesAndEdges:(n,r)=>{const i=typeof n<"u",o=typeof r<"u",s=i?cw(n,new Map,t().nodeOrigin,t().elevateNodesOnSelect):new Map;e({nodeInternals:s,edges:o?r:[],hasDefaultNodes:i,hasDefaultEdges:o})},updateNodeDimensions:n=>{const{onNodesChange:r,nodeInternals:i,fitViewOnInit:o,fitViewOnInitDone:s,fitViewOnInitOptions:a,domNode:l,nodeOrigin:c}=t(),u=l==null?void 0:l.querySelector(".react-flow__viewport");if(!u)return;const d=window.getComputedStyle(u),{m22:f}=new window.DOMMatrixReadOnly(d.transform),h=n.reduce((m,_)=>{const v=i.get(_.id);if(v){const y=AT(_.nodeElement);!!(y.width&&y.height&&(v.width!==y.width||v.height!==y.height||_.forceUpdate))&&(i.set(v.id,{...v,[Tn]:{...v[Tn],handleBounds:{source:C8(".source",_.nodeElement,f,c),target:C8(".target",_.nodeElement,f,c)}},...y}),m.push({id:v.id,type:"dimensions",dimensions:y}))}return m},[]);oj(i,c);const p=s||o&&!s&&sj(t,{initial:!0,...a});e({nodeInternals:new Map(i),fitViewOnInitDone:p}),(h==null?void 0:h.length)>0&&(r==null||r(h))},updateNodePositions:(n,r=!0,i=!1)=>{const{triggerNodeChanges:o}=t(),s=n.map(a=>{const l={id:a.id,type:"position",dragging:i};return r&&(l.positionAbsolute=a.positionAbsolute,l.position=a.position),l});o(s)},triggerNodeChanges:n=>{const{onNodesChange:r,nodeInternals:i,hasDefaultNodes:o,nodeOrigin:s,getNodes:a,elevateNodesOnSelect:l}=t();if(n!=null&&n.length){if(o){const c=lc(n,a()),u=cw(c,i,s,l);e({nodeInternals:u})}r==null||r(n)}},addSelectedNodes:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ja(l,!0)):(s=cd(o(),n),a=cd(i,[])),ny({changedNodes:s,changedEdges:a,get:t,set:e})},addSelectedEdges:n=>{const{multiSelectionActive:r,edges:i,getNodes:o}=t();let s,a=null;r?s=n.map(l=>ja(l,!0)):(s=cd(i,n),a=cd(o(),[])),ny({changedNodes:a,changedEdges:s,get:t,set:e})},unselectNodesAndEdges:({nodes:n,edges:r}={})=>{const{edges:i,getNodes:o}=t(),s=n||o(),a=r||i,l=s.map(u=>(u.selected=!1,ja(u.id,!1))),c=a.map(u=>ja(u.id,!1));ny({changedNodes:l,changedEdges:c,get:t,set:e})},setMinZoom:n=>{const{d3Zoom:r,maxZoom:i}=t();r==null||r.scaleExtent([n,i]),e({minZoom:n})},setMaxZoom:n=>{const{d3Zoom:r,minZoom:i}=t();r==null||r.scaleExtent([i,n]),e({maxZoom:n})},setTranslateExtent:n=>{var r;(r=t().d3Zoom)==null||r.translateExtent(n),e({translateExtent:n})},resetSelectedElements:()=>{const{edges:n,getNodes:r}=t(),o=r().filter(a=>a.selected).map(a=>ja(a.id,!1)),s=n.filter(a=>a.selected).map(a=>ja(a.id,!1));ny({changedNodes:o,changedEdges:s,get:t,set:e})},setNodeExtent:n=>{const{nodeInternals:r}=t();r.forEach(i=>{i.positionAbsolute=kT(i.position,n)}),e({nodeExtent:n,nodeInternals:new Map(r)})},panBy:n=>{const{transform:r,width:i,height:o,d3Zoom:s,d3Selection:a,translateExtent:l}=t();if(!s||!a||!n.x&&!n.y)return!1;const c=dl.translate(r[0]+n.x,r[1]+n.y).scale(r[2]),u=[[0,0],[i,o]],d=s==null?void 0:s.constrain()(c,u,l);return s.transform(a,d),r[0]!==d.x||r[1]!==d.y||r[2]!==d.k},cancelConnection:()=>e({connectionNodeId:Pa.connectionNodeId,connectionHandleId:Pa.connectionHandleId,connectionHandleType:Pa.connectionHandleType,connectionStatus:Pa.connectionStatus,connectionStartHandle:Pa.connectionStartHandle,connectionEndHandle:Pa.connectionEndHandle}),reset:()=>e({...Pa})}),Object.is),_j=({children:e})=>{const t=I.useRef(null);return t.current||(t.current=Dve()),Q.createElement(rye,{value:t.current},e)};_j.displayName="ReactFlowProvider";const Sj=({children:e})=>I.useContext(aS)?Q.createElement(Q.Fragment,null,e):Q.createElement(_j,null,e);Sj.displayName="ReactFlowWrapper";const Lve={input:Zz,default:d3,output:ej,group:FT},Bve={default:F1,straight:MT,step:IT,smoothstep:lS,simplebezier:PT},zve=[0,0],jve=[15,15],Vve={x:0,y:0,zoom:1},Uve={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},Gve=I.forwardRef(({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:o=Lve,edgeTypes:s=Bve,onNodeClick:a,onEdgeClick:l,onInit:c,onMove:u,onMoveStart:d,onMoveEnd:f,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:_,onClickConnectEnd:v,onNodeMouseEnter:y,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:w,onNodeDragStart:C,onNodeDrag:x,onNodeDragStop:k,onNodesDelete:A,onEdgesDelete:R,onSelectionChange:L,onSelectionDragStart:M,onSelectionDrag:E,onSelectionDragStop:P,onSelectionContextMenu:O,onSelectionStart:F,onSelectionEnd:$,connectionMode:D=iu.Strict,connectionLineType:N=qa.Bezier,connectionLineStyle:z,connectionLineComponent:V,connectionLineContainerStyle:H,deleteKeyCode:X="Backspace",selectionKeyCode:te="Shift",selectionOnDrag:ee=!1,selectionMode:j=Cl.Full,panActivationKeyCode:q="Space",multiSelectionKeyCode:Z=$1()?"Meta":"Control",zoomActivationKeyCode:oe=$1()?"Meta":"Control",snapToGrid:be=!1,snapGrid:Me=jve,onlyRenderVisibleElements:lt=!1,selectNodesOnDrag:Le=!0,nodesDraggable:we,nodesConnectable:pt,nodesFocusable:vt,nodeOrigin:Ce=zve,edgesFocusable:ii,edgesUpdatable:sn,elementsSelectable:jr,defaultViewport:sr=Vve,minZoom:fn=.5,maxZoom:Vr=2,translateExtent:fo=h3,preventScrolling:Ri=!0,nodeExtent:ar,defaultMarkerColor:Wn="#b1b1b7",zoomOnScroll:wr=!0,zoomOnPinch:Yt=!0,panOnScroll:It=!1,panOnScrollSpeed:oi=.5,panOnScrollMode:Oi=wc.Free,zoomOnDoubleClick:ho=!0,panOnDrag:Ur=!0,onPaneClick:hn,onPaneMouseEnter:si,onPaneMouseMove:Gl,onPaneMouseLeave:Go,onPaneScroll:Hl,onPaneContextMenu:Ut,children:_t,onEdgeUpdate:qn,onEdgeContextMenu:Pn,onEdgeDoubleClick:lr,onEdgeMouseEnter:Cr,onEdgeMouseMove:Gr,onEdgeMouseLeave:Ho,onEdgeUpdateStart:Er,onEdgeUpdateEnd:Kn,edgeUpdaterRadius:Ms=10,onNodesChange:Ca,onEdgesChange:Ea,noDragClassName:wu="nodrag",noWheelClassName:Rs="nowheel",noPanClassName:Tr="nopan",fitView:Wl=!1,fitViewOptions:j2,connectOnClick:V2=!0,attributionPosition:U2,proOptions:G2,defaultEdgeOptions:Ta,elevateNodesOnSelect:H2=!0,elevateEdgesOnSelect:W2=!1,disableKeyboardA11y:u0=!1,autoPanOnConnect:q2=!0,autoPanOnNodeDrag:K2=!0,connectionRadius:X2=20,isValidConnection:Yf,onError:Q2,style:Cu,id:Eu,nodeDragThreshold:Y2,...Tu},d0)=>{const Zf=Eu||"1";return Q.createElement("div",{...Tu,style:{...Cu,...Uve},ref:d0,className:no(["react-flow",i]),"data-testid":"rf__wrapper",id:Eu},Q.createElement(Sj,null,Q.createElement(Fve,{onInit:c,onMove:u,onMoveStart:d,onMoveEnd:f,onNodeClick:a,onEdgeClick:l,onNodeMouseEnter:y,onNodeMouseMove:g,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:w,nodeTypes:o,edgeTypes:s,connectionLineType:N,connectionLineStyle:z,connectionLineComponent:V,connectionLineContainerStyle:H,selectionKeyCode:te,selectionOnDrag:ee,selectionMode:j,deleteKeyCode:X,multiSelectionKeyCode:Z,panActivationKeyCode:q,zoomActivationKeyCode:oe,onlyRenderVisibleElements:lt,selectNodesOnDrag:Le,defaultViewport:sr,translateExtent:fo,minZoom:fn,maxZoom:Vr,preventScrolling:Ri,zoomOnScroll:wr,zoomOnPinch:Yt,zoomOnDoubleClick:ho,panOnScroll:It,panOnScrollSpeed:oi,panOnScrollMode:Oi,panOnDrag:Ur,onPaneClick:hn,onPaneMouseEnter:si,onPaneMouseMove:Gl,onPaneMouseLeave:Go,onPaneScroll:Hl,onPaneContextMenu:Ut,onSelectionContextMenu:O,onSelectionStart:F,onSelectionEnd:$,onEdgeUpdate:qn,onEdgeContextMenu:Pn,onEdgeDoubleClick:lr,onEdgeMouseEnter:Cr,onEdgeMouseMove:Gr,onEdgeMouseLeave:Ho,onEdgeUpdateStart:Er,onEdgeUpdateEnd:Kn,edgeUpdaterRadius:Ms,defaultMarkerColor:Wn,noDragClassName:wu,noWheelClassName:Rs,noPanClassName:Tr,elevateEdgesOnSelect:W2,rfId:Zf,disableKeyboardA11y:u0,nodeOrigin:Ce,nodeExtent:ar}),Q.createElement($ye,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:h,onConnectStart:p,onConnectEnd:m,onClickConnectStart:_,onClickConnectEnd:v,nodesDraggable:we,nodesConnectable:pt,nodesFocusable:vt,edgesFocusable:ii,edgesUpdatable:sn,elementsSelectable:jr,elevateNodesOnSelect:H2,minZoom:fn,maxZoom:Vr,nodeExtent:ar,onNodesChange:Ca,onEdgesChange:Ea,snapToGrid:be,snapGrid:Me,connectionMode:D,translateExtent:fo,connectOnClick:V2,defaultEdgeOptions:Ta,fitView:Wl,fitViewOptions:j2,onNodesDelete:A,onEdgesDelete:R,onNodeDragStart:C,onNodeDrag:x,onNodeDragStop:k,onSelectionDrag:E,onSelectionDragStart:M,onSelectionDragStop:P,noPanClassName:Tr,nodeOrigin:Ce,rfId:Zf,autoPanOnConnect:q2,autoPanOnNodeDrag:K2,onError:Q2,connectionRadius:X2,isValidConnection:Yf,nodeDragThreshold:Y2}),Q.createElement(Rye,{onSelectionChange:L}),_t,Q.createElement(sye,{proOptions:G2,position:U2}),Q.createElement(Bye,{rfId:Zf,disableKeyboardA11y:u0})))});Gve.displayName="ReactFlow";const Hve=e=>{var t;return(t=e.domNode)==null?void 0:t.querySelector(".react-flow__edgelabel-renderer")};function rHe({children:e}){const t=rn(Hve);return t?gi.createPortal(e,t):null}function iHe(){const e=Gn();return I.useCallback(t=>{const{domNode:n,updateNodeDimensions:r}=e.getState(),o=(Array.isArray(t)?t:[t]).reduce((s,a)=>{const l=n==null?void 0:n.querySelector(`.react-flow__node[data-id="${a}"]`);return l&&s.push({id:a,nodeElement:l,forceUpdate:!0}),s},[]);requestAnimationFrame(()=>r(o))},[])}function Wve(){const e=[];return function(t,n){if(typeof n!="object"||n===null)return n;for(;e.length>0&&e.at(-1)!==this;)e.pop();return e.includes(n)?"[Circular]":(e.push(n),n)}}const kg=m5("nodes/receivedOpenAPISchema",async(e,{rejectWithValue:t})=>{try{const n=[window.location.origin,"openapi.json"].join("/"),i=await(await fetch(n)).json();return JSON.parse(JSON.stringify(i,Wve()))}catch(n){return t({error:n})}});var qve="\0",Yl="\0",R8="",Wr,Ac,di,Jg,Wd,qd,Ui,ts,Qa,ns,Ya,js,Vs,Kd,Xd,Us,vo,em,p3,PO;let Kve=(PO=class{constructor(t){Bt(this,em);Bt(this,Wr,!0);Bt(this,Ac,!1);Bt(this,di,!1);Bt(this,Jg,void 0);Bt(this,Wd,()=>{});Bt(this,qd,()=>{});Bt(this,Ui,{});Bt(this,ts,{});Bt(this,Qa,{});Bt(this,ns,{});Bt(this,Ya,{});Bt(this,js,{});Bt(this,Vs,{});Bt(this,Kd,0);Bt(this,Xd,0);Bt(this,Us,void 0);Bt(this,vo,void 0);t&&(Ni(this,Wr,t.hasOwnProperty("directed")?t.directed:!0),Ni(this,Ac,t.hasOwnProperty("multigraph")?t.multigraph:!1),Ni(this,di,t.hasOwnProperty("compound")?t.compound:!1)),Y(this,di)&&(Ni(this,Us,{}),Ni(this,vo,{}),Y(this,vo)[Yl]={})}isDirected(){return Y(this,Wr)}isMultigraph(){return Y(this,Ac)}isCompound(){return Y(this,di)}setGraph(t){return Ni(this,Jg,t),this}graph(){return Y(this,Jg)}setDefaultNodeLabel(t){return Ni(this,Wd,t),typeof t!="function"&&Ni(this,Wd,()=>t),this}nodeCount(){return Y(this,Kd)}nodes(){return Object.keys(Y(this,Ui))}sources(){var t=this;return this.nodes().filter(n=>Object.keys(Y(t,ts)[n]).length===0)}sinks(){var t=this;return this.nodes().filter(n=>Object.keys(Y(t,ns)[n]).length===0)}setNodes(t,n){var r=arguments,i=this;return t.forEach(function(o){r.length>1?i.setNode(o,n):i.setNode(o)}),this}setNode(t,n){return Y(this,Ui).hasOwnProperty(t)?(arguments.length>1&&(Y(this,Ui)[t]=n),this):(Y(this,Ui)[t]=arguments.length>1?n:Y(this,Wd).call(this,t),Y(this,di)&&(Y(this,Us)[t]=Yl,Y(this,vo)[t]={},Y(this,vo)[Yl][t]=!0),Y(this,ts)[t]={},Y(this,Qa)[t]={},Y(this,ns)[t]={},Y(this,Ya)[t]={},++th(this,Kd)._,this)}node(t){return Y(this,Ui)[t]}hasNode(t){return Y(this,Ui).hasOwnProperty(t)}removeNode(t){var n=this;if(Y(this,Ui).hasOwnProperty(t)){var r=i=>n.removeEdge(Y(n,js)[i]);delete Y(this,Ui)[t],Y(this,di)&&(Wo(this,em,p3).call(this,t),delete Y(this,Us)[t],this.children(t).forEach(function(i){n.setParent(i)}),delete Y(this,vo)[t]),Object.keys(Y(this,ts)[t]).forEach(r),delete Y(this,ts)[t],delete Y(this,Qa)[t],Object.keys(Y(this,ns)[t]).forEach(r),delete Y(this,ns)[t],delete Y(this,Ya)[t],--th(this,Kd)._}return this}setParent(t,n){if(!Y(this,di))throw new Error("Cannot set parent in a non-compound graph");if(n===void 0)n=Yl;else{n+="";for(var r=n;r!==void 0;r=this.parent(r))if(r===t)throw new Error("Setting "+n+" as parent of "+t+" would create a cycle");this.setNode(n)}return this.setNode(t),Wo(this,em,p3).call(this,t),Y(this,Us)[t]=n,Y(this,vo)[n][t]=!0,this}parent(t){if(Y(this,di)){var n=Y(this,Us)[t];if(n!==Yl)return n}}children(t=Yl){if(Y(this,di)){var n=Y(this,vo)[t];if(n)return Object.keys(n)}else{if(t===Yl)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var n=Y(this,Qa)[t];if(n)return Object.keys(n)}successors(t){var n=Y(this,Ya)[t];if(n)return Object.keys(n)}neighbors(t){var n=this.predecessors(t);if(n){const i=new Set(n);for(var r of this.successors(t))i.add(r);return Array.from(i.values())}}isLeaf(t){var n;return this.isDirected()?n=this.successors(t):n=this.neighbors(t),n.length===0}filterNodes(t){var n=new this.constructor({directed:Y(this,Wr),multigraph:Y(this,Ac),compound:Y(this,di)});n.setGraph(this.graph());var r=this;Object.entries(Y(this,Ui)).forEach(function([s,a]){t(s)&&n.setNode(s,a)}),Object.values(Y(this,js)).forEach(function(s){n.hasNode(s.v)&&n.hasNode(s.w)&&n.setEdge(s,r.edge(s))});var i={};function o(s){var a=r.parent(s);return a===void 0||n.hasNode(a)?(i[s]=a,a):a in i?i[a]:o(a)}return Y(this,di)&&n.nodes().forEach(s=>n.setParent(s,o(s))),n}setDefaultEdgeLabel(t){return Ni(this,qd,t),typeof t!="function"&&Ni(this,qd,()=>t),this}edgeCount(){return Y(this,Xd)}edges(){return Object.values(Y(this,js))}setPath(t,n){var r=this,i=arguments;return t.reduce(function(o,s){return i.length>1?r.setEdge(o,s,n):r.setEdge(o,s),s}),this}setEdge(){var t,n,r,i,o=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(t=s.v,n=s.w,r=s.name,arguments.length===2&&(i=arguments[1],o=!0)):(t=s,n=arguments[1],r=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,n=""+n,r!==void 0&&(r=""+r);var a=qh(Y(this,Wr),t,n,r);if(Y(this,Vs).hasOwnProperty(a))return o&&(Y(this,Vs)[a]=i),this;if(r!==void 0&&!Y(this,Ac))throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(n),Y(this,Vs)[a]=o?i:Y(this,qd).call(this,t,n,r);var l=Xve(Y(this,Wr),t,n,r);return t=l.v,n=l.w,Object.freeze(l),Y(this,js)[a]=l,O8(Y(this,Qa)[n],t),O8(Y(this,Ya)[t],n),Y(this,ts)[n][a]=l,Y(this,ns)[t][a]=l,th(this,Xd)._++,this}edge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r);return Y(this,Vs)[i]}edgeAsObj(){const t=this.edge(...arguments);return typeof t!="object"?{label:t}:t}hasEdge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r);return Y(this,Vs).hasOwnProperty(i)}removeEdge(t,n,r){var i=arguments.length===1?hw(Y(this,Wr),arguments[0]):qh(Y(this,Wr),t,n,r),o=Y(this,js)[i];return o&&(t=o.v,n=o.w,delete Y(this,Vs)[i],delete Y(this,js)[i],$8(Y(this,Qa)[n],t),$8(Y(this,Ya)[t],n),delete Y(this,ts)[n][i],delete Y(this,ns)[t][i],th(this,Xd)._--),this}inEdges(t,n){var r=Y(this,ts)[t];if(r){var i=Object.values(r);return n?i.filter(o=>o.v===n):i}}outEdges(t,n){var r=Y(this,ns)[t];if(r){var i=Object.values(r);return n?i.filter(o=>o.w===n):i}}nodeEdges(t,n){var r=this.inEdges(t,n);if(r)return r.concat(this.outEdges(t,n))}},Wr=new WeakMap,Ac=new WeakMap,di=new WeakMap,Jg=new WeakMap,Wd=new WeakMap,qd=new WeakMap,Ui=new WeakMap,ts=new WeakMap,Qa=new WeakMap,ns=new WeakMap,Ya=new WeakMap,js=new WeakMap,Vs=new WeakMap,Kd=new WeakMap,Xd=new WeakMap,Us=new WeakMap,vo=new WeakMap,em=new WeakSet,p3=function(t){delete Y(this,vo)[Y(this,Us)[t]][t]},PO);function O8(e,t){e[t]?e[t]++:e[t]=1}function $8(e,t){--e[t]||delete e[t]}function qh(e,t,n,r){var i=""+t,o=""+n;if(!e&&i>o){var s=i;i=o,o=s}return i+R8+o+R8+(r===void 0?qve:r)}function Xve(e,t,n,r){var i=""+t,o=""+n;if(!e&&i>o){var s=i;i=o,o=s}var a={v:i,w:o};return r&&(a.name=r),a}function hw(e,t){return qh(e,t.v,t.w,t.name)}var LT=Kve,Qve="2.1.13",Yve={Graph:LT,version:Qve},Zve=LT,Jve={write:e1e,read:r1e};function e1e(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:t1e(e),edges:n1e(e)};return e.graph()!==void 0&&(t.value=structuredClone(e.graph())),t}function t1e(e){return e.nodes().map(function(t){var n=e.node(t),r=e.parent(t),i={v:t};return n!==void 0&&(i.value=n),r!==void 0&&(i.parent=r),i})}function n1e(e){return e.edges().map(function(t){var n=e.edge(t),r={v:t.v,w:t.w};return t.name!==void 0&&(r.name=t.name),n!==void 0&&(r.value=n),r})}function r1e(e){var t=new Zve(e.options).setGraph(e.value);return e.nodes.forEach(function(n){t.setNode(n.v,n.value),n.parent&&t.setParent(n.v,n.parent)}),e.edges.forEach(function(n){t.setEdge({v:n.v,w:n.w,name:n.name},n.value)}),t}var i1e=o1e;function o1e(e){var t={},n=[],r;function i(o){t.hasOwnProperty(o)||(t[o]=!0,r.push(o),e.successors(o).forEach(i),e.predecessors(o).forEach(i))}return e.nodes().forEach(function(o){r=[],i(o),r.length&&n.push(r)}),n}var fr,Gs,tm,g3,nm,m3,Qd,ov,IO;let s1e=(IO=class{constructor(){Bt(this,tm);Bt(this,nm);Bt(this,Qd);Bt(this,fr,[]);Bt(this,Gs,{})}size(){return Y(this,fr).length}keys(){return Y(this,fr).map(function(t){return t.key})}has(t){return Y(this,Gs).hasOwnProperty(t)}priority(t){var n=Y(this,Gs)[t];if(n!==void 0)return Y(this,fr)[n].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return Y(this,fr)[0].key}add(t,n){var r=Y(this,Gs);if(t=String(t),!r.hasOwnProperty(t)){var i=Y(this,fr),o=i.length;return r[t]=o,i.push({key:t,priority:n}),Wo(this,nm,m3).call(this,o),!0}return!1}removeMin(){Wo(this,Qd,ov).call(this,0,Y(this,fr).length-1);var t=Y(this,fr).pop();return delete Y(this,Gs)[t.key],Wo(this,tm,g3).call(this,0),t.key}decrease(t,n){var r=Y(this,Gs)[t];if(n>Y(this,fr)[r].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+Y(this,fr)[r].priority+" New: "+n);Y(this,fr)[r].priority=n,Wo(this,nm,m3).call(this,r)}},fr=new WeakMap,Gs=new WeakMap,tm=new WeakSet,g3=function(t){var n=Y(this,fr),r=2*t,i=r+1,o=t;r>1,!(n[i].priority1;function c1e(e,t,n,r){return u1e(e,String(t),n||l1e,r||function(i){return e.outEdges(i)})}function u1e(e,t,n,r){var i={},o=new a1e,s,a,l=function(c){var u=c.v!==s?c.v:c.w,d=i[u],f=n(c),h=a.distance+f;if(f<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+c+" Weight: "+f);h0&&(s=o.removeMin(),a=i[s],a.distance!==Number.POSITIVE_INFINITY);)r(s).forEach(l);return i}var d1e=wj,f1e=h1e;function h1e(e,t,n){return e.nodes().reduce(function(r,i){return r[i]=d1e(e,i,t,n),r},{})}var Cj=p1e;function p1e(e){var t=0,n=[],r={},i=[];function o(s){var a=r[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach(function(u){r.hasOwnProperty(u)?r[u].onStack&&(a.lowlink=Math.min(a.lowlink,r[u].index)):(o(u),a.lowlink=Math.min(a.lowlink,r[u].lowlink))}),a.lowlink===a.index){var l=[],c;do c=n.pop(),r[c].onStack=!1,l.push(c);while(s!==c);i.push(l)}}return e.nodes().forEach(function(s){r.hasOwnProperty(s)||o(s)}),i}var g1e=Cj,m1e=y1e;function y1e(e){return g1e(e).filter(function(t){return t.length>1||t.length===1&&e.hasEdge(t[0],t[0])})}var v1e=_1e,b1e=()=>1;function _1e(e,t,n){return S1e(e,t||b1e,n||function(r){return e.outEdges(r)})}function S1e(e,t,n){var r={},i=e.nodes();return i.forEach(function(o){r[o]={},r[o][o]={distance:0},i.forEach(function(s){o!==s&&(r[o][s]={distance:Number.POSITIVE_INFINITY})}),n(o).forEach(function(s){var a=s.v===o?s.w:s.v,l=t(s);r[o][a]={distance:l,predecessor:o}})}),i.forEach(function(o){var s=r[o];i.forEach(function(a){var l=r[a];i.forEach(function(c){var u=l[o],d=s[c],f=l[c],h=u.distance+d.distance;he.successors(a):a=>e.neighbors(a),i=n==="post"?E1e:T1e,o=[],s={};return t.forEach(a=>{if(!e.hasNode(a))throw new Error("Graph does not have node: "+a);i(a,r,s,o)}),o}function E1e(e,t,n,r){for(var i=[[e,!1]];i.length>0;){var o=i.pop();o[1]?r.push(o[0]):n.hasOwnProperty(o[0])||(n[o[0]]=!0,i.push([o[0],!0]),kj(t(o[0]),s=>i.push([s,!1])))}}function T1e(e,t,n,r){for(var i=[e];i.length>0;){var o=i.pop();n.hasOwnProperty(o)||(n[o]=!0,r.push(o),kj(t(o),s=>i.push(s)))}}function kj(e,t){for(var n=e.length;n--;)t(e[n],n,e);return e}var A1e=Aj,k1e=P1e;function P1e(e,t){return A1e(e,t,"post")}var I1e=Aj,M1e=R1e;function R1e(e,t){return I1e(e,t,"pre")}var O1e=LT,$1e=xj,N1e=F1e;function F1e(e,t){var n=new O1e,r={},i=new $1e,o;function s(l){var c=l.v===o?l.w:l.v,u=i.priority(c);if(u!==void 0){var d=t(l);d0;){if(o=i.removeMin(),r.hasOwnProperty(o))n.setEdge(o,r[o]);else{if(a)throw new Error("Input graph is not connected: "+e);a=!0}e.nodeEdges(o).forEach(s)}return n}var D1e={components:i1e,dijkstra:wj,dijkstraAll:f1e,findCycles:m1e,floydWarshall:v1e,isAcyclic:x1e,postorder:k1e,preorder:M1e,prim:N1e,tarjan:Cj,topsort:Tj},F8=Yve,L1e={Graph:F8.Graph,json:Jve,alg:D1e,version:F8.version};const D8=Ml(L1e),L8=(e,t,n,r)=>{const i=new D8.Graph;return n.forEach(o=>{i.setNode(o.id)}),r.forEach(o=>{i.setEdge(o.source,o.target)}),i.setEdge(e,t),D8.alg.isAcyclic(i)},B1e=(e,t)=>{if(e.name==="CollectionField"&&t.name==="CollectionField")return!1;if($4(e,t))return!0;const n=e.name==="CollectionItemField"&&!t.isCollection,r=t.name==="CollectionItemField"&&!e.isCollection&&!e.isCollectionOrScalar,i=t.isCollectionOrScalar&&e.name===t.name,o=e.name==="CollectionField"&&(t.isCollection||t.isCollectionOrScalar),s=t.name==="CollectionField"&&e.isCollection,a=!e.isCollection&&!e.isCollectionOrScalar&&!t.isCollection&&!t.isCollectionOrScalar,l=a&&e.name==="IntegerField"&&t.name==="FloatField",c=a&&(e.name==="IntegerField"||e.name==="FloatField")&&t.name==="StringField",u=t.name==="AnyField";return n||r||i||o||s||l||c||u},B8=(e,t,n,r,i)=>{let o=!0;return t==="source"?e.find(s=>s.target===r.id&&s.targetHandle===i.name)&&(o=!1):e.find(s=>s.source===r.id&&s.sourceHandle===i.name)&&(o=!1),B1e(n,i.type)||(o=!1),o},z8=(e,t,n,r,i,o,s)=>{if(e.id===r)return null;const a=o=="source"?e.data.inputs:e.data.outputs;if(a[i]){const l=a[i],c=o=="source"?r:e.id,u=o=="source"?e.id:r,d=o=="source"?i:l.name,f=o=="source"?l.name:i,h=L8(c,u,t,n),p=B8(n,o,s,e,l);if(h&&p)return{source:c,sourceHandle:d,target:u,targetHandle:f}}for(const l in a){const c=a[l],u=o=="source"?r:e.id,d=o=="source"?e.id:r,f=o=="source"?i:c.name,h=o=="source"?c.name:i,p=L8(u,d,t,n),m=B8(n,o,s,e,c);if(p&&m)return{source:u,sourceHandle:f,target:d,targetHandle:h}}return null},j8=(e,t,n)=>{let r=t,i=n;for(;e.find(o=>o.position.x===r&&o.position.y===i);)r=r+50,i=i+50;return{x:r,y:i}},pw={status:gc.enum.PENDING,error:null,progress:null,progressImage:null,outputs:[]},Pj={nodes:[],edges:[],nodeTemplates:{},isReady:!1,connectionStartParams:null,connectionStartFieldType:null,connectionMade:!1,modifyingEdge:!1,addNewNodePosition:null,shouldShowMinimapPanel:!0,shouldValidateGraph:!0,shouldAnimateEdges:!0,shouldSnapToGrid:!1,shouldColorEdges:!0,isAddNodePopoverOpen:!1,nodeOpacity:1,selectedNodes:[],selectedEdges:[],nodeExecutionStates:{},viewport:{x:0,y:0,zoom:1},mouseOverField:null,mouseOverNode:null,nodesToCopy:[],edgesToCopy:[],selectionMode:Cl.Partial},kr=(e,t,n)=>{var c,u;const{nodeId:r,fieldName:i,value:o}=t.payload,s=e.nodes.findIndex(d=>d.id===r),a=(c=e.nodes)==null?void 0:c[s];if(!Sn(a))return;const l=(u=a.data)==null?void 0:u.inputs[i];!l||s<0||!n.safeParse(o).success||(l.value=o)},Ij=jt({name:"nodes",initialState:Pj,reducers:{nodesChanged:(e,t)=>{e.nodes=lc(t.payload,e.nodes)},nodeReplaced:(e,t)=>{const n=e.nodes.findIndex(r=>r.id===t.payload.nodeId);n<0||(e.nodes[n]=t.payload.node)},nodeAdded:(e,t)=>{var i,o;const n=t.payload,r=j8(e.nodes,((i=e.addNewNodePosition)==null?void 0:i.x)??n.position.x,((o=e.addNewNodePosition)==null?void 0:o.y)??n.position.y);if(n.position=r,n.selected=!0,e.nodes=lc(e.nodes.map(s=>({id:s.id,type:"select",selected:!1})),e.nodes),e.edges=Ql(e.edges.map(s=>({id:s.id,type:"select",selected:!1})),e.edges),e.nodes.push(n),!!Sn(n)){if(e.nodeExecutionStates[n.id]={nodeId:n.id,...pw},e.connectionStartParams){const{nodeId:s,handleId:a,handleType:l}=e.connectionStartParams;if(s&&a&&l&&e.connectionStartFieldType){const c=z8(n,e.nodes,e.edges,s,a,l,e.connectionStartFieldType);c&&(e.edges=Wh({...c,type:"default"},e.edges))}}e.connectionStartParams=null,e.connectionStartFieldType=null}},edgeChangeStarted:e=>{e.modifyingEdge=!0},edgesChanged:(e,t)=>{e.edges=Ql(t.payload,e.edges)},edgeAdded:(e,t)=>{e.edges=Wh(t.payload,e.edges)},edgeUpdated:(e,t)=>{const{oldEdge:n,newConnection:r}=t.payload;e.edges=xye(n,r,e.edges)},connectionStarted:(e,t)=>{var l;e.connectionStartParams=t.payload,e.connectionMade=e.modifyingEdge;const{nodeId:n,handleId:r,handleType:i}=t.payload;if(!n||!r)return;const o=e.nodes.findIndex(c=>c.id===n),s=(l=e.nodes)==null?void 0:l[o];if(!Sn(s))return;const a=i==="source"?s.data.outputs[r]:s.data.inputs[r];e.connectionStartFieldType=(a==null?void 0:a.type)??null},connectionMade:(e,t)=>{e.connectionStartFieldType&&(e.edges=Wh({...t.payload,type:"default"},e.edges),e.connectionMade=!0)},connectionEnded:(e,t)=>{var n;if(e.connectionMade)e.connectionStartParams=null,e.connectionStartFieldType=null;else if(e.mouseOverNode){const r=e.nodes.findIndex(o=>o.id===e.mouseOverNode),i=(n=e.nodes)==null?void 0:n[r];if(i&&e.connectionStartParams){const{nodeId:o,handleId:s,handleType:a}=e.connectionStartParams;if(o&&s&&a&&e.connectionStartFieldType){const l=z8(i,e.nodes,e.edges,o,s,a,e.connectionStartFieldType);l&&(e.edges=Wh({...l,type:"default"},e.edges))}}e.connectionStartParams=null,e.connectionStartFieldType=null}else e.addNewNodePosition=t.payload.cursorPosition,e.isAddNodePopoverOpen=!0;e.modifyingEdge=!1},fieldLabelChanged:(e,t)=>{const{nodeId:n,fieldName:r,label:i}=t.payload,o=e.nodes.find(a=>a.id===n);if(!Sn(o))return;const s=o.data.inputs[r];s&&(s.label=i)},nodeUseCacheChanged:(e,t)=>{var s;const{nodeId:n,useCache:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.useCache=r)},nodeIsIntermediateChanged:(e,t)=>{var s;const{nodeId:n,isIntermediate:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.isIntermediate=r)},nodeIsOpenChanged:(e,t)=>{var a;const{nodeId:n,isOpen:r}=t.payload,i=e.nodes.findIndex(l=>l.id===n),o=(a=e.nodes)==null?void 0:a[i];if(!Sn(o)&&!Y5(o)||(o.data.isOpen=r,!Sn(o)))return;const s=$T([o],e.edges);if(r)s.forEach(l=>{delete l.hidden}),s.forEach(l=>{l.type==="collapsed"&&(e.edges=e.edges.filter(c=>c.id!==l.id))});else{const l=_ye(o,e.nodes,e.edges).filter(d=>Sn(d)&&d.data.isOpen===!1),c=bye(o,e.nodes,e.edges).filter(d=>Sn(d)&&d.data.isOpen===!1),u=[];s.forEach(d=>{var f,h;if(d.target===n&&l.find(p=>p.id===d.source)){d.hidden=!0;const p=u.find(m=>m.source===d.source&&m.target===d.target);p?p.data={count:(((f=p.data)==null?void 0:f.count)??0)+1}:u.push({id:`${d.source}-${d.target}-collapsed`,source:d.source,target:d.target,type:"collapsed",data:{count:1},updatable:!1})}if(d.source===n&&c.find(p=>p.id===d.target)){const p=u.find(m=>m.source===d.source&&m.target===d.target);d.hidden=!0,p?p.data={count:(((h=p.data)==null?void 0:h.count)??0)+1}:u.push({id:`${d.source}-${d.target}-collapsed`,source:d.source,target:d.target,type:"collapsed",data:{count:1},updatable:!1})}}),u.length&&(e.edges=Ql(u.map(d=>({type:"add",item:d})),e.edges))}},edgeDeleted:(e,t)=>{e.edges=e.edges.filter(n=>n.id!==t.payload)},edgesDeleted:(e,t)=>{const r=t.payload.filter(i=>i.type==="collapsed");if(r.length){const i=[];r.forEach(o=>{e.edges.forEach(s=>{s.source===o.source&&s.target===o.target&&i.push({id:s.id,type:"remove"})})}),e.edges=Ql(i,e.edges)}},nodesDeleted:(e,t)=>{t.payload.forEach(n=>{Sn(n)&&delete e.nodeExecutionStates[n.id]})},nodeLabelChanged:(e,t)=>{var s;const{nodeId:n,label:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.label=r)},nodeNotesChanged:(e,t)=>{var s;const{nodeId:n,notes:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Sn(o)&&(o.data.notes=r)},nodeExclusivelySelected:(e,t)=>{const n=t.payload;e.nodes=lc(e.nodes.map(r=>({id:r.id,type:"select",selected:r.id===n})),e.nodes)},selectedNodesChanged:(e,t)=>{e.selectedNodes=t.payload},selectedEdgesChanged:(e,t)=>{e.selectedEdges=t.payload},fieldStringValueChanged:(e,t)=>{kr(e,t,V_)},fieldNumberValueChanged:(e,t)=>{kr(e,t,z_.or(j_))},fieldBooleanValueChanged:(e,t)=>{kr(e,t,U_)},fieldBoardValueChanged:(e,t)=>{kr(e,t,W_)},fieldImageValueChanged:(e,t)=>{kr(e,t,H_)},fieldColorValueChanged:(e,t)=>{kr(e,t,q_)},fieldMainModelValueChanged:(e,t)=>{kr(e,t,Df)},fieldRefinerModelValueChanged:(e,t)=>{kr(e,t,K_)},fieldVaeModelValueChanged:(e,t)=>{kr(e,t,X_)},fieldLoRAModelValueChanged:(e,t)=>{kr(e,t,Q_)},fieldControlNetModelValueChanged:(e,t)=>{kr(e,t,Y_)},fieldIPAdapterModelValueChanged:(e,t)=>{kr(e,t,Z_)},fieldT2IAdapterModelValueChanged:(e,t)=>{kr(e,t,J_)},fieldEnumModelValueChanged:(e,t)=>{kr(e,t,G_)},fieldSchedulerValueChanged:(e,t)=>{kr(e,t,eS)},notesNodeValueChanged:(e,t)=>{var s;const{nodeId:n,value:r}=t.payload,i=e.nodes.findIndex(a=>a.id===n),o=(s=e.nodes)==null?void 0:s[i];Y5(o)&&(o.data.notes=r)},shouldShowMinimapPanelChanged:(e,t)=>{e.shouldShowMinimapPanel=t.payload},nodeTemplatesBuilt:(e,t)=>{e.nodeTemplates=t.payload,e.isReady=!0},nodeEditorReset:e=>{e.nodes=[],e.edges=[]},shouldValidateGraphChanged:(e,t)=>{e.shouldValidateGraph=t.payload},shouldAnimateEdgesChanged:(e,t)=>{e.shouldAnimateEdges=t.payload},shouldSnapToGridChanged:(e,t)=>{e.shouldSnapToGrid=t.payload},shouldColorEdgesChanged:(e,t)=>{e.shouldColorEdges=t.payload},nodeOpacityChanged:(e,t)=>{e.nodeOpacity=t.payload},viewportChanged:(e,t)=>{e.viewport=t.payload},mouseOverFieldChanged:(e,t)=>{e.mouseOverField=t.payload},mouseOverNodeChanged:(e,t)=>{e.mouseOverNode=t.payload},selectedAll:e=>{e.nodes=lc(e.nodes.map(t=>({id:t.id,type:"select",selected:!0})),e.nodes),e.edges=Ql(e.edges.map(t=>({id:t.id,type:"select",selected:!0})),e.edges)},selectionCopied:e=>{if(e.nodesToCopy=e.nodes.filter(t=>t.selected).map(Ge),e.edgesToCopy=e.edges.filter(t=>t.selected).map(Ge),e.nodesToCopy.length>0){const t={x:0,y:0};e.nodesToCopy.forEach(n=>{const r=.15*(n.width??0),i=.5*(n.height??0);t.x+=n.position.x+r,t.y+=n.position.y+i}),t.x/=e.nodesToCopy.length,t.y/=e.nodesToCopy.length,e.nodesToCopy.forEach(n=>{n.position.x-=t.x,n.position.y-=t.y})}},selectionPasted:(e,t)=>{const{cursorPosition:n}=t.payload,r=e.nodesToCopy.map(Ge),i=r.map(u=>u.data.id),o=e.edgesToCopy.filter(u=>i.includes(u.source)&&i.includes(u.target)).map(Ge);o.forEach(u=>u.selected=!0),r.forEach(u=>{const d=ul();o.forEach(h=>{h.source===u.data.id&&(h.source=d,h.id=h.id.replace(u.data.id,d)),h.target===u.data.id&&(h.target=d,h.id=h.id.replace(u.data.id,d))}),u.selected=!0,u.id=d,u.data.id=d;const f=j8(e.nodes,u.position.x+((n==null?void 0:n.x)??0),u.position.y+((n==null?void 0:n.y)??0));u.position=f});const s=r.map(u=>({item:u,type:"add"})),a=e.nodes.map(u=>({id:u.data.id,type:"select",selected:!1})),l=o.map(u=>({item:u,type:"add"})),c=e.edges.map(u=>({id:u.id,type:"select",selected:!1}));e.nodes=lc(s.concat(a),e.nodes),e.edges=Ql(l.concat(c),e.edges),r.forEach(u=>{e.nodeExecutionStates[u.id]={nodeId:u.id,...pw}})},addNodePopoverOpened:e=>{e.addNewNodePosition=null,e.isAddNodePopoverOpen=!0},addNodePopoverClosed:e=>{e.isAddNodePopoverOpen=!1,e.connectionStartParams=null,e.connectionStartFieldType=null},addNodePopoverToggled:e=>{e.isAddNodePopoverOpen=!e.isAddNodePopoverOpen},selectionModeChanged:(e,t)=>{e.selectionMode=t.payload?Cl.Full:Cl.Partial}},extraReducers:e=>{e.addCase(kg.pending,t=>{t.isReady=!1}),e.addCase(yT,(t,n)=>{const{nodes:r,edges:i}=n.payload;t.nodes=lc(r.map(o=>({item:{...o,...cB},type:"add"})),[]),t.edges=Ql(i.map(o=>({item:o,type:"add"})),[]),t.nodeExecutionStates=r.reduce((o,s)=>(o[s.id]={nodeId:s.id,...pw},o),{})}),e.addCase(D4,(t,n)=>{const{source_node_id:r}=n.payload.data,i=t.nodeExecutionStates[r];i&&(i.status=gc.enum.IN_PROGRESS)}),e.addCase(B4,(t,n)=>{const{source_node_id:r,result:i}=n.payload.data,o=t.nodeExecutionStates[r];o&&(o.status=gc.enum.COMPLETED,o.progress!==null&&(o.progress=1),o.outputs.push(i))}),e.addCase(u_,(t,n)=>{const{source_node_id:r}=n.payload.data,i=t.nodeExecutionStates[r];i&&(i.status=gc.enum.FAILED,i.error=n.payload.data.error,i.progress=null,i.progressImage=null)}),e.addCase(z4,(t,n)=>{const{source_node_id:r,step:i,total_steps:o,progress_image:s}=n.payload.data,a=t.nodeExecutionStates[r];a&&(a.status=gc.enum.IN_PROGRESS,a.progress=(i+1)/o,a.progressImage=s??null)}),e.addCase(d_,(t,n)=>{["in_progress"].includes(n.payload.data.queue_item.status)&&Fo(t.nodeExecutionStates,r=>{r.status=gc.enum.PENDING,r.error=null,r.progress=null,r.progressImage=null,r.outputs=[]})})}}),{addNodePopoverClosed:aHe,addNodePopoverOpened:lHe,addNodePopoverToggled:cHe,connectionEnded:z1e,connectionMade:j1e,connectionStarted:uHe,edgeDeleted:V1e,edgeChangeStarted:dHe,edgesChanged:U1e,edgesDeleted:G1e,edgeUpdated:H1e,fieldBoardValueChanged:W1e,fieldBooleanValueChanged:q1e,fieldColorValueChanged:K1e,fieldControlNetModelValueChanged:X1e,fieldEnumModelValueChanged:Q1e,fieldImageValueChanged:Um,fieldIPAdapterModelValueChanged:Y1e,fieldT2IAdapterModelValueChanged:Z1e,fieldLabelChanged:J1e,fieldLoRAModelValueChanged:ebe,fieldMainModelValueChanged:tbe,fieldNumberValueChanged:nbe,fieldRefinerModelValueChanged:rbe,fieldSchedulerValueChanged:ibe,fieldStringValueChanged:obe,fieldVaeModelValueChanged:sbe,mouseOverFieldChanged:fHe,mouseOverNodeChanged:hHe,nodeAdded:abe,nodeReplaced:Mj,nodeEditorReset:Rj,nodeExclusivelySelected:pHe,nodeIsIntermediateChanged:lbe,nodeIsOpenChanged:cbe,nodeLabelChanged:ube,nodeNotesChanged:dbe,nodeOpacityChanged:gHe,nodesChanged:fbe,nodesDeleted:Oj,nodeTemplatesBuilt:$j,nodeUseCacheChanged:hbe,notesNodeValueChanged:pbe,selectedAll:mHe,selectedEdgesChanged:yHe,selectedNodesChanged:vHe,selectionCopied:bHe,selectionModeChanged:_He,selectionPasted:gbe,shouldAnimateEdgesChanged:SHe,shouldColorEdgesChanged:xHe,shouldShowMinimapPanelChanged:wHe,shouldSnapToGridChanged:CHe,shouldValidateGraphChanged:EHe,viewportChanged:THe,edgeAdded:mbe}=Ij.actions,ybe=br(z1e,j1e,V1e,U1e,G1e,H1e,W1e,q1e,K1e,X1e,Q1e,Um,Y1e,Z1e,J1e,ebe,tbe,nbe,rbe,ibe,obe,sbe,abe,Mj,lbe,cbe,ube,dbe,fbe,Oj,hbe,pbe,gbe,mbe),vbe=Ij.reducer,gw={name:"",author:"",description:"",version:"",contact:"",tags:"",notes:"",exposedFields:[],meta:{version:"2.0.0",category:"user"},isTouched:!0},Nj=jt({name:"workflow",initialState:gw,reducers:{workflowExposedFieldAdded:(e,t)=>{e.exposedFields=YF(e.exposedFields.concat(t.payload),n=>`${n.nodeId}-${n.fieldName}`),e.isTouched=!0},workflowExposedFieldRemoved:(e,t)=>{e.exposedFields=e.exposedFields.filter(n=>!$4(n,t.payload)),e.isTouched=!0},workflowNameChanged:(e,t)=>{e.name=t.payload,e.isTouched=!0},workflowDescriptionChanged:(e,t)=>{e.description=t.payload,e.isTouched=!0},workflowTagsChanged:(e,t)=>{e.tags=t.payload,e.isTouched=!0},workflowAuthorChanged:(e,t)=>{e.author=t.payload,e.isTouched=!0},workflowNotesChanged:(e,t)=>{e.notes=t.payload,e.isTouched=!0},workflowVersionChanged:(e,t)=>{e.version=t.payload,e.isTouched=!0},workflowContactChanged:(e,t)=>{e.contact=t.payload,e.isTouched=!0},workflowIDChanged:(e,t)=>{e.id=t.payload},workflowReset:()=>Ge(gw),workflowSaved:e=>{e.isTouched=!1}},extraReducers:e=>{e.addCase(yT,(t,n)=>{const{nodes:r,edges:i,...o}=n.payload;return{...Ge(o),isTouched:!0}}),e.addCase(Oj,(t,n)=>{n.payload.forEach(r=>{t.exposedFields=t.exposedFields.filter(i=>i.nodeId!==r.id)})}),e.addCase(Rj,()=>Ge(gw)),e.addMatcher(ybe,t=>{t.isTouched=!0})}}),{workflowExposedFieldAdded:bbe,workflowExposedFieldRemoved:AHe,workflowNameChanged:kHe,workflowDescriptionChanged:PHe,workflowTagsChanged:IHe,workflowAuthorChanged:MHe,workflowNotesChanged:RHe,workflowVersionChanged:OHe,workflowContactChanged:$He,workflowIDChanged:NHe,workflowReset:FHe,workflowSaved:DHe}=Nj.actions,_be=Nj.reducer,Fj={esrganModelName:"RealESRGAN_x4plus.pth"},Dj=jt({name:"postprocessing",initialState:Fj,reducers:{esrganModelNameChanged:(e,t)=>{e.esrganModelName=t.payload}}}),{esrganModelNameChanged:LHe}=Dj.actions,Sbe=Dj.reducer,Lj={positiveStylePrompt:"",negativeStylePrompt:"",shouldConcatSDXLStylePrompt:!0,shouldUseSDXLRefiner:!1,sdxlImg2ImgDenoisingStrength:.7,refinerModel:null,refinerSteps:20,refinerCFGScale:7.5,refinerScheduler:"euler",refinerPositiveAestheticScore:6,refinerNegativeAestheticScore:2.5,refinerStart:.8},Bj=jt({name:"sdxl",initialState:Lj,reducers:{setPositiveStylePromptSDXL:(e,t)=>{e.positiveStylePrompt=t.payload},setNegativeStylePromptSDXL:(e,t)=>{e.negativeStylePrompt=t.payload},setShouldConcatSDXLStylePrompt:(e,t)=>{e.shouldConcatSDXLStylePrompt=t.payload},setShouldUseSDXLRefiner:(e,t)=>{e.shouldUseSDXLRefiner=t.payload},setSDXLImg2ImgDenoisingStrength:(e,t)=>{e.sdxlImg2ImgDenoisingStrength=t.payload},refinerModelChanged:(e,t)=>{e.refinerModel=t.payload},setRefinerSteps:(e,t)=>{e.refinerSteps=t.payload},setRefinerCFGScale:(e,t)=>{e.refinerCFGScale=t.payload},setRefinerScheduler:(e,t)=>{e.refinerScheduler=t.payload},setRefinerPositiveAestheticScore:(e,t)=>{e.refinerPositiveAestheticScore=t.payload},setRefinerNegativeAestheticScore:(e,t)=>{e.refinerNegativeAestheticScore=t.payload},setRefinerStart:(e,t)=>{e.refinerStart=t.payload}}}),{setPositiveStylePromptSDXL:BHe,setNegativeStylePromptSDXL:zHe,setShouldConcatSDXLStylePrompt:jHe,setShouldUseSDXLRefiner:xbe,setSDXLImg2ImgDenoisingStrength:VHe,refinerModelChanged:V8,setRefinerSteps:UHe,setRefinerCFGScale:GHe,setRefinerScheduler:HHe,setRefinerPositiveAestheticScore:WHe,setRefinerNegativeAestheticScore:qHe,setRefinerStart:KHe}=Bj.actions,wbe=Bj.reducer,zj={shift:!1,ctrl:!1,meta:!1},jj=jt({name:"hotkeys",initialState:zj,reducers:{shiftKeyPressed:(e,t)=>{e.shift=t.payload},ctrlKeyPressed:(e,t)=>{e.ctrl=t.payload},metaKeyPressed:(e,t)=>{e.meta=t.payload}}}),{shiftKeyPressed:XHe,ctrlKeyPressed:QHe,metaKeyPressed:YHe}=jj.actions,Cbe=jj.reducer,Vj={activeTab:"txt2img",shouldShowImageDetails:!1,shouldUseCanvasBetaLayout:!1,shouldShowExistingModelsInSearch:!1,shouldUseSliders:!1,shouldHidePreview:!1,shouldShowProgressInViewer:!0,shouldShowEmbeddingPicker:!1,shouldAutoChangeDimensions:!1,favoriteSchedulers:[],globalMenuCloseTrigger:0,panels:{}},Uj=jt({name:"ui",initialState:Vj,reducers:{setActiveTab:(e,t)=>{e.activeTab=t.payload},setShouldShowImageDetails:(e,t)=>{e.shouldShowImageDetails=t.payload},setShouldUseCanvasBetaLayout:(e,t)=>{e.shouldUseCanvasBetaLayout=t.payload},setShouldHidePreview:(e,t)=>{e.shouldHidePreview=t.payload},setShouldShowExistingModelsInSearch:(e,t)=>{e.shouldShowExistingModelsInSearch=t.payload},setShouldUseSliders:(e,t)=>{e.shouldUseSliders=t.payload},setShouldShowProgressInViewer:(e,t)=>{e.shouldShowProgressInViewer=t.payload},favoriteSchedulersChanged:(e,t)=>{e.favoriteSchedulers=t.payload},toggleEmbeddingPicker:e=>{e.shouldShowEmbeddingPicker=!e.shouldShowEmbeddingPicker},setShouldAutoChangeDimensions:(e,t)=>{e.shouldAutoChangeDimensions=t.payload},bumpGlobalMenuCloseTrigger:e=>{e.globalMenuCloseTrigger+=1},panelsChanged:(e,t)=>{e.panels[t.payload.name]=t.payload.value}},extraReducers(e){e.addCase(m_,t=>{t.activeTab="img2img"})}}),{setActiveTab:Gj,setShouldShowImageDetails:ZHe,setShouldUseCanvasBetaLayout:JHe,setShouldShowExistingModelsInSearch:eWe,setShouldUseSliders:tWe,setShouldHidePreview:nWe,setShouldShowProgressInViewer:rWe,favoriteSchedulersChanged:iWe,toggleEmbeddingPicker:oWe,setShouldAutoChangeDimensions:sWe,bumpGlobalMenuCloseTrigger:aWe,panelsChanged:lWe}=Uj.actions,Ebe=Uj.reducer;function cS(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function Hj(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const r=cS(n);return(i,o)=>r.then(s=>o(s.transaction(t,i).objectStore(t)))}let mw;function BT(){return mw||(mw=Hj("keyval-store","keyval")),mw}function Tbe(e,t=BT()){return t("readonly",n=>cS(n.get(e)))}function Abe(e,t,n=BT()){return n("readwrite",r=>(r.put(t,e),cS(r.transaction)))}function cWe(e=BT()){return e("readwrite",t=>(t.clear(),cS(t.transaction)))}var zT=Object.defineProperty,kbe=Object.getOwnPropertyDescriptor,Pbe=Object.getOwnPropertyNames,Ibe=Object.prototype.hasOwnProperty,Mbe=(e,t)=>{for(var n in t)zT(e,n,{get:t[n],enumerable:!0})},Rbe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Pbe(t))!Ibe.call(e,i)&&i!==n&&zT(e,i,{get:()=>t[i],enumerable:!(r=kbe(t,i))||r.enumerable});return e},Obe=e=>Rbe(zT({},"__esModule",{value:!0}),e),Wj={};Mbe(Wj,{__DO_NOT_USE__ActionTypes:()=>Pg,applyMiddleware:()=>jbe,bindActionCreators:()=>zbe,combineReducers:()=>Bbe,compose:()=>qj,createStore:()=>VT,isAction:()=>Vbe,isPlainObject:()=>jT,legacy_createStore:()=>Dbe});var $be=Obe(Wj);function Mn(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Nbe=(()=>typeof Symbol=="function"&&Symbol.observable||"@@observable")(),U8=Nbe,yw=()=>Math.random().toString(36).substring(7).split("").join("."),Fbe={INIT:`@@redux/INIT${yw()}`,REPLACE:`@@redux/REPLACE${yw()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${yw()}`},Pg=Fbe;function jT(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function VT(e,t,n){if(typeof e!="function")throw new Error(Mn(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Mn(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Mn(1));return n(VT)(e,t)}let r=e,i=t,o=new Map,s=o,a=0,l=!1;function c(){s===o&&(s=new Map,o.forEach((_,v)=>{s.set(v,_)}))}function u(){if(l)throw new Error(Mn(3));return i}function d(_){if(typeof _!="function")throw new Error(Mn(4));if(l)throw new Error(Mn(5));let v=!0;c();const y=a++;return s.set(y,_),function(){if(v){if(l)throw new Error(Mn(6));v=!1,c(),s.delete(y),o=null}}}function f(_){if(!jT(_))throw new Error(Mn(7));if(typeof _.type>"u")throw new Error(Mn(8));if(typeof _.type!="string")throw new Error(Mn(17));if(l)throw new Error(Mn(9));try{l=!0,i=r(i,_)}finally{l=!1}return(o=s).forEach(y=>{y()}),_}function h(_){if(typeof _!="function")throw new Error(Mn(10));r=_,f({type:Pg.REPLACE})}function p(){const _=d;return{subscribe(v){if(typeof v!="object"||v===null)throw new Error(Mn(11));function y(){const b=v;b.next&&b.next(u())}return y(),{unsubscribe:_(y)}},[U8](){return this}}}return f({type:Pg.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:h,[U8]:p}}function Dbe(e,t,n){return VT(e,t,n)}function Lbe(e){Object.keys(e).forEach(t=>{const n=e[t];if(typeof n(void 0,{type:Pg.INIT})>"u")throw new Error(Mn(12));if(typeof n(void 0,{type:Pg.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Mn(13))})}function Bbe(e){const t=Object.keys(e),n={};for(let o=0;o"u")throw a&&a.type,new Error(Mn(14));c[d]=p,l=l||p!==h}return l=l||r.length!==Object.keys(s).length,l?c:s}}function G8(e,t){return function(...n){return t(e.apply(this,n))}}function zbe(e,t){if(typeof e=="function")return G8(e,t);if(typeof e!="object"||e===null)throw new Error(Mn(16));const n={};for(const r in e){const i=e[r];typeof i=="function"&&(n[r]=G8(i,t))}return n}function qj(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function jbe(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Mn(15))};const s={getState:i.getState,dispatch:(l,...c)=>o(l,...c)},a=e.map(l=>l(s));return o=qj(...a)(i.dispatch),{...i,dispatch:o}}}function Vbe(e){return jT(e)&&"type"in e&&typeof e.type=="string"}Xj=Kj=void 0;var Ube=$be,Gbe=function(){var t=[],n=[],r=void 0,i=function(c){return r=c,function(u){return function(d){return Ube.compose.apply(void 0,n)(u)(d)}}},o=function(){for(var c,u,d=arguments.length,f=Array(d),h=0;h=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(c){throw c},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,s=!1,a;return{s:function(){n=n.call(e)},n:function(){var c=n.next();return o=c.done,c},e:function(c){s=!0,a=c},f:function(){try{!o&&n.return!=null&&n.return()}finally{if(s)throw a}}}}function Yj(e,t){if(e){if(typeof e=="string")return K8(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return K8(e,t)}}function K8(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0,i=r.prefix,o=r.driver,s=r.persistWholeStore,a=r.serialize;try{var l=s?a_e:l_e;yield l(t,n,{prefix:i,driver:o,serialize:a})}catch(c){console.warn("redux-remember: persist error",c)}});return function(){return e.apply(this,arguments)}}();function Z8(e,t,n,r,i,o,s){try{var a=e[o](s),l=a.value}catch(c){n(c);return}a.done?t(l):Promise.resolve(l).then(r,i)}function J8(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function s(l){Z8(o,r,i,s,a,"next",l)}function a(l){Z8(o,r,i,s,a,"throw",l)}s(void 0)})}}var u_e=function(){var e=J8(function*(t,n,r){var i=r.prefix,o=r.driver,s=r.serialize,a=r.unserialize,l=r.persistThrottle,c=r.persistDebounce,u=r.persistWholeStore;yield n_e(t,n,{prefix:i,driver:o,unserialize:a,persistWholeStore:u});var d={},f=function(){var h=J8(function*(){var p=Qj(t.getState(),n);yield c_e(p,d,{prefix:i,driver:o,serialize:s,persistWholeStore:u}),GT(p,d)||t.dispatch({type:Kbe,payload:p}),d=p});return function(){return h.apply(this,arguments)}}();c&&c>0?t.subscribe(Qbe(f,c)):t.subscribe(Xbe(f,l))});return function(n,r,i){return e.apply(this,arguments)}}();const d_e=u_e;function Mg(e){"@babel/helpers - typeof";return Mg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mg(e)}function eM(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function _w(e){for(var t=1;t0&&arguments[0]!==void 0?arguments[0]:n.state,o=arguments.length>1?arguments[1]:void 0;o.type&&((o==null?void 0:o.type)==="@@INIT"||o!=null&&(r=o.type)!==null&&r!==void 0&&r.startsWith("@@redux/INIT"))&&(n.state=_w({},i));var s=typeof t=="function"?t:Vb(t);switch(o.type){case v3:{var a=_w(_w({},n.state),(o==null?void 0:o.payload)||{});return n.state=s(a,{type:v3,payload:a}),n.state}default:return s(i,o)}}},m_e=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=r.prefix,o=i===void 0?"@@remember-":i,s=r.serialize,a=s===void 0?function(v,y){return JSON.stringify(v)}:s,l=r.unserialize,c=l===void 0?function(v,y){return JSON.parse(v)}:l,u=r.persistThrottle,d=u===void 0?100:u,f=r.persistDebounce,h=r.persistWholeStore,p=h===void 0?!1:h,m=r.initActionType;if(!t)throw Error("redux-remember error: driver required");if(!Array.isArray(n))throw Error("redux-remember error: rememberedKeys needs to be an array");var _=function(y){return function(g,b,S){var w=!1,C=function(A){return d_e(A,n,{driver:t,prefix:o,serialize:a,unserialize:c,persistThrottle:d,persistDebounce:f,persistWholeStore:p})},x=y(function(k,A){return!w&&m&&A.type===m&&(w=!0,setTimeout(function(){return C(x)},0)),g(k,A)},b,S);return m||(w=!0,C(x)),x}};return _};const tM="@@invokeai-",y_e=["cursorPosition"],v_e=["pendingControlImages"],b_e=["prompts"],__e=["selection","selectedBoardId","galleryView"],S_e=["nodeTemplates","connectionStartParams","connectionStartFieldType","selectedNodes","selectedEdges","isReady","nodesToCopy","edgesToCopy","connectionMade","modifyingEdge","addNewNodePosition"],x_e=[],w_e=[],C_e=["isInitialized","isConnected","denoiseProgress","status"],E_e=["shouldShowImageDetails","globalMenuCloseTrigger","panels"],T_e={canvas:y_e,gallery:__e,generation:x_e,nodes:S_e,postprocessing:w_e,system:C_e,ui:E_e,controlNet:v_e,dynamicPrompts:b_e},A_e=(e,t)=>{const n=uu(e,T_e[t]??[]);return JSON.stringify(n)},k_e={canvas:SL,gallery:nB,generation:iT,nodes:Pj,postprocessing:Fj,system:gD,config:RD,ui:Vj,hotkeys:zj,controlAdapters:D5,dynamicPrompts:hT,sdxl:Lj},P_e=(e,t)=>zF(JSON.parse(e),k_e[t]),I_e=e=>{if(the(e)&&e.payload.nodes){const t={};return{...e,payload:{...e.payload,nodes:t}}}return kg.fulfilled.match(e)?{...e,payload:""}:$j.match(e)?{...e,payload:""}:e},M_e=["canvas/setCursorPosition","canvas/setStageCoordinates","canvas/setStageScale","canvas/setIsDrawing","canvas/setBoundingBoxCoordinates","canvas/setBoundingBoxDimensions","canvas/setIsDrawing","canvas/addPointToCurrentLine","socket/socketGeneratorProgress","socket/appSocketGeneratorProgress","@@REMEMBER_PERSISTED"],R_e=e=>e,O_e=br(rue,iue),$_e=()=>{fe({matcher:O_e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{batchIds:o}=i.canvas;try{const s=t(en.endpoints.cancelByBatchIds.initiate({batch_ids:o},{fixedCacheKey:"cancelByBatchIds"})),{canceled:a}=await s.unwrap();s.reset(),a>0&&(r.debug(`Canceled ${a} canvas batches`),t(Ve({title:J("queue.cancelBatchSucceeded"),status:"success"}))),t(lue())}catch{r.error("Failed to cancel canvas batches"),t(Ve({title:J("queue.cancelBatchFailed"),status:"error"}))}}})};he("app/appStarted");const N_e=()=>{fe({matcher:ce.endpoints.listImages.matchFulfilled,effect:async(e,{dispatch:t,unsubscribe:n,cancelActiveListeners:r})=>{if(e.meta.arg.queryCacheKey!==Vi({board_id:"none",categories:Rn}))return;r(),n();const i=e.payload;if(i.ids.length>0){const o=Ot.getSelectors().selectAll(i)[0];t(ps(o??null))}}})},F_e=()=>{fe({matcher:en.endpoints.enqueueBatch.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{data:r}=en.endpoints.getQueueStatus.select()(n());!r||r.processor.is_started||t(en.endpoints.resumeProcessor.initiate(void 0,{fixedCacheKey:"resumeProcessor"}))}})},Jj=Lo.injectEndpoints({endpoints:e=>({getAppVersion:e.query({query:()=>({url:"app/version",method:"GET"}),providesTags:["AppVersion"],keepUnusedDataFor:864e5}),getAppConfig:e.query({query:()=>({url:"app/config",method:"GET"}),providesTags:["AppConfig"],keepUnusedDataFor:864e5}),getInvocationCacheStatus:e.query({query:()=>({url:"app/invocation_cache/status",method:"GET"}),providesTags:["InvocationCacheStatus"]}),clearInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache",method:"DELETE"}),invalidatesTags:["InvocationCacheStatus"]}),enableInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache/enable",method:"PUT"}),invalidatesTags:["InvocationCacheStatus"]}),disableInvocationCache:e.mutation({query:()=>({url:"app/invocation_cache/disable",method:"PUT"}),invalidatesTags:["InvocationCacheStatus"]})})}),{useGetAppVersionQuery:uWe,useGetAppConfigQuery:dWe,useClearInvocationCacheMutation:fWe,useDisableInvocationCacheMutation:hWe,useEnableInvocationCacheMutation:pWe,useGetInvocationCacheStatusQuery:gWe}=Jj,D_e=()=>{fe({matcher:Jj.endpoints.getAppConfig.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const{infill_methods:r=[],nsfw_methods:i=[],watermarking_methods:o=[]}=e.payload,s=t().generation.infillMethod;r.includes(s)||n(qle(r[0])),i.includes("nsfw_checker")||n(Zoe(!1)),o.includes("invisible_watermark")||n(Joe(!1))}})},L_e=he("app/appStarted"),B_e=()=>{fe({actionCreator:L_e,effect:async(e,{unsubscribe:t,cancelActiveListeners:n})=>{n(),t()}})};function z_e(e){if(e.sheet)return e.sheet;for(var t=0;t0?er(Lf,--ni):0,yf--,mn===10&&(yf=1,fS--),mn}function Si(){return mn=ni2||Og(mn)>3?"":" "}function J_e(e,t){for(;--t&&Si()&&!(mn<48||mn>102||mn>57&&mn<65||mn>70&&mn<97););return Gm(e,sv()+(t<6&&ms()==32&&Si()==32))}function S3(e){for(;Si();)switch(mn){case e:return ni;case 34:case 39:e!==34&&e!==39&&S3(mn);break;case 40:e===41&&S3(e);break;case 92:Si();break}return ni}function eSe(e,t){for(;Si()&&e+mn!==47+10;)if(e+mn===42+42&&ms()===47)break;return"/*"+Gm(t,ni-1)+"*"+dS(e===47?e:Si())}function tSe(e){for(;!Og(ms());)Si();return Gm(e,ni)}function nSe(e){return oV(lv("",null,null,null,[""],e=iV(e),0,[0],e))}function lv(e,t,n,r,i,o,s,a,l){for(var c=0,u=0,d=s,f=0,h=0,p=0,m=1,_=1,v=1,y=0,g="",b=i,S=o,w=r,C=g;_;)switch(p=y,y=Si()){case 40:if(p!=108&&er(C,d-1)==58){_3(C+=dt(av(y),"&","&\f"),"&\f")!=-1&&(v=-1);break}case 34:case 39:case 91:C+=av(y);break;case 9:case 10:case 13:case 32:C+=Z_e(p);break;case 92:C+=J_e(sv()-1,7);continue;case 47:switch(ms()){case 42:case 47:iy(rSe(eSe(Si(),sv()),t,n),l);break;default:C+="/"}break;case 123*m:a[c++]=rs(C)*v;case 125*m:case 59:case 0:switch(y){case 0:case 125:_=0;case 59+u:v==-1&&(C=dt(C,/\f/g,"")),h>0&&rs(C)-d&&iy(h>32?rM(C+";",r,n,d-1):rM(dt(C," ","")+";",r,n,d-2),l);break;case 59:C+=";";default:if(iy(w=nM(C,t,n,c,u,i,a,g,b=[],S=[],d),o),y===123)if(u===0)lv(C,t,w,w,b,o,d,a,S);else switch(f===99&&er(C,3)===110?100:f){case 100:case 108:case 109:case 115:lv(e,w,w,r&&iy(nM(e,w,w,0,0,i,a,g,i,b=[],d),S),i,S,d,a,r?b:S);break;default:lv(C,w,w,w,[""],S,0,a,S)}}c=u=h=0,m=v=1,g=C="",d=s;break;case 58:d=1+rs(C),h=p;default:if(m<1){if(y==123)--m;else if(y==125&&m++==0&&Y_e()==125)continue}switch(C+=dS(y),y*m){case 38:v=u>0?1:(C+="\f",-1);break;case 44:a[c++]=(rs(C)-1)*v,v=1;break;case 64:ms()===45&&(C+=av(Si())),f=ms(),u=d=rs(g=C+=tSe(sv())),y++;break;case 45:p===45&&rs(C)==2&&(m=0)}}return o}function nM(e,t,n,r,i,o,s,a,l,c,u){for(var d=i-1,f=i===0?o:[""],h=qT(f),p=0,m=0,_=0;p0?f[v]+" "+y:dt(y,/&\f/g,f[v])))&&(l[_++]=g);return hS(e,t,n,i===0?HT:a,l,c,u)}function rSe(e,t,n){return hS(e,t,n,eV,dS(Q_e()),Rg(e,2,-2),0)}function rM(e,t,n,r){return hS(e,t,n,WT,Rg(e,0,r),Rg(e,r+1,-1),r)}function Bd(e,t){for(var n="",r=qT(e),i=0;i6)switch(er(e,t+1)){case 109:if(er(e,t+4)!==45)break;case 102:return dt(e,/(.+:)(.+)-([^]+)/,"$1"+ut+"$2-$3$1"+B1+(er(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~_3(e,"stretch")?aV(dt(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(er(e,t+1)!==115)break;case 6444:switch(er(e,rs(e)-3-(~_3(e,"!important")&&10))){case 107:return dt(e,":",":"+ut)+e;case 101:return dt(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+ut+(er(e,14)===45?"inline-":"")+"box$3$1"+ut+"$2$3$1"+dr+"$2box$3")+e}break;case 5936:switch(er(e,t+11)){case 114:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return ut+e+dr+dt(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return ut+e+dr+e+e}return e}var fSe=function(t,n,r,i){if(t.length>-1&&!t.return)switch(t.type){case WT:t.return=aV(t.value,t.length);break;case tV:return Bd([_h(t,{value:dt(t.value,"@","@"+ut)})],i);case HT:if(t.length)return X_e(t.props,function(o){switch(K_e(o,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Bd([_h(t,{props:[dt(o,/:(read-\w+)/,":"+B1+"$1")]})],i);case"::placeholder":return Bd([_h(t,{props:[dt(o,/:(plac\w+)/,":"+ut+"input-$1")]}),_h(t,{props:[dt(o,/:(plac\w+)/,":"+B1+"$1")]}),_h(t,{props:[dt(o,/:(plac\w+)/,dr+"input-$1")]})],i)}return""})}},hSe=[fSe],pSe=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(m){var _=m.getAttribute("data-emotion");_.indexOf(" ")!==-1&&(document.head.appendChild(m),m.setAttribute("data-s",""))})}var i=t.stylisPlugins||hSe,o={},s,a=[];s=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(m){for(var _=m.getAttribute("data-emotion").split(" "),v=1;v<_.length;v++)o[_[v]]=!0;a.push(m)});var l,c=[uSe,dSe];{var u,d=[iSe,sSe(function(m){u.insert(m)})],f=oSe(c.concat(i,d)),h=function(_){return Bd(nSe(_),f)};l=function(_,v,y,g){u=y,h(_?_+"{"+v.styles+"}":v.styles),g&&(p.inserted[v.name]=!0)}}var p={key:n,sheet:new V_e({key:n,container:s,nonce:t.nonce,speedy:t.speedy,prepend:t.prepend,insertionPoint:t.insertionPoint}),nonce:t.nonce,inserted:o,registered:{},insert:l};return p.sheet.hydrate(a),p};function z1(){return z1=Object.assign?Object.assign.bind():function(e){for(var t=1;t=4;++r,i-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(i){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var TSe={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},ASe=/[A-Z]|^ms/g,kSe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,pV=function(t){return t.charCodeAt(1)===45},sM=function(t){return t!=null&&typeof t!="boolean"},Sw=sV(function(e){return pV(e)?e:e.replace(ASe,"-$&").toLowerCase()}),aM=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(kSe,function(r,i,o){return is={name:i,styles:o,next:is},i})}return TSe[t]!==1&&!pV(t)&&typeof n=="number"&&n!==0?n+"px":n};function $g(e,t,n){if(n==null)return"";if(n.__emotion_styles!==void 0)return n;switch(typeof n){case"boolean":return"";case"object":{if(n.anim===1)return is={name:n.name,styles:n.styles,next:is},n.name;if(n.styles!==void 0){var r=n.next;if(r!==void 0)for(;r!==void 0;)is={name:r.name,styles:r.styles,next:is},r=r.next;var i=n.styles+";";return i}return PSe(e,t,n)}case"function":{if(e!==void 0){var o=is,s=n(e);return is=o,$g(e,t,s)}break}}if(t==null)return n;var a=t[n];return a!==void 0?a:n}function PSe(e,t,n){var r="";if(Array.isArray(n))for(var i=0;iie.jsx("div",{className:"chakra-portal-zIndex",style:{position:"absolute",zIndex:e.zIndex,top:0,left:0,right:0},children:e.children}),GSe=e=>{const{appendToParentPortal:t,children:n}=e,[r,i]=I.useState(null),o=I.useRef(null),[,s]=I.useState({});I.useEffect(()=>s({}),[]);const a=jSe(),l=BSe();j1(()=>{if(!r)return;const u=r.ownerDocument,d=t?a??u.body:u.body;if(!d)return;o.current=u.createElement("div"),o.current.className=ZT,d.appendChild(o.current),s({});const f=o.current;return()=>{d.contains(f)&&d.removeChild(f)}},[r]);const c=l!=null&&l.zIndex?ie.jsx(USe,{zIndex:l==null?void 0:l.zIndex,children:n}):n;return o.current?gi.createPortal(ie.jsx(bV,{value:o.current,children:c}),o.current):ie.jsx("span",{ref:u=>{u&&i(u)}})},HSe=e=>{const{children:t,containerRef:n,appendToParentPortal:r}=e,i=n.current,o=i??(typeof window<"u"?document.body:void 0),s=I.useMemo(()=>{const l=i==null?void 0:i.ownerDocument.createElement("div");return l&&(l.className=ZT),l},[i]),[,a]=I.useState({});return j1(()=>a({}),[]),j1(()=>{if(!(!s||!o))return o.appendChild(s),()=>{o.removeChild(s)}},[s,o]),o&&s?gi.createPortal(ie.jsx(bV,{value:r?s:null,children:t}),s):null};function CS(e){const t={appendToParentPortal:!0,...e},{containerRef:n,...r}=t;return n?ie.jsx(HSe,{containerRef:n,...r}):ie.jsx(GSe,{...r})}CS.className=ZT;CS.selector=VSe;CS.displayName="Portal";function _V(){const e=I.useContext(Ng);if(!e)throw Error("useTheme: `theme` is undefined. Seems you forgot to wrap your app in `` or ``");return e}var JT=I.createContext({});JT.displayName="ColorModeContext";function ES(){const e=I.useContext(JT);if(e===void 0)throw new Error("useColorMode must be used within a ColorModeProvider");return e}function mWe(e,t){const{colorMode:n}=ES();return n==="dark"?t:e}function WSe(){const e=ES(),t=_V();return{...e,theme:t}}function qSe(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__breakpoints)==null?void 0:a.asArray)==null?void 0:l[s]};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function KSe(e,t,n){var r,i;if(t==null)return t;const o=s=>{var a,l;return(l=(a=e.__cssMap)==null?void 0:a[s])==null?void 0:l.value};return(i=(r=o(t))!=null?r:o(n))!=null?i:n}function yWe(e,t,n){const r=_V();return XSe(e,t,n)(r)}function XSe(e,t,n){const r=Array.isArray(t)?t:[t],i=Array.isArray(n)?n:[n];return o=>{const s=i.filter(Boolean),a=r.map((l,c)=>{var u,d;if(e==="breakpoints")return qSe(o,l,(u=s[c])!=null?u:l);const f=`${e}.${l}`;return KSe(o,f,(d=s[c])!=null?d:l)});return Array.isArray(t)?a:a[0]}}var Dl=(...e)=>e.filter(Boolean).join(" ");function QSe(){return!1}function ys(e){const t=typeof e;return e!=null&&(t==="object"||t==="function")&&!Array.isArray(e)}var vWe=e=>{const{condition:t,message:n}=e;t&&QSe()&&console.warn(n)};function us(e,...t){return YSe(e)?e(...t):e}var YSe=e=>typeof e=="function",bWe=e=>e?"":void 0,_We=e=>e?!0:void 0;function SWe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}function xWe(...e){return function(n){e.forEach(r=>{r==null||r(n)})}}var V1={exports:{}};V1.exports;(function(e,t){var n=200,r="__lodash_hash_undefined__",i=800,o=16,s=9007199254740991,a="[object Arguments]",l="[object Array]",c="[object AsyncFunction]",u="[object Boolean]",d="[object Date]",f="[object Error]",h="[object Function]",p="[object GeneratorFunction]",m="[object Map]",_="[object Number]",v="[object Null]",y="[object Object]",g="[object Proxy]",b="[object RegExp]",S="[object Set]",w="[object String]",C="[object Undefined]",x="[object WeakMap]",k="[object ArrayBuffer]",A="[object DataView]",R="[object Float32Array]",L="[object Float64Array]",M="[object Int8Array]",E="[object Int16Array]",P="[object Int32Array]",O="[object Uint8Array]",F="[object Uint8ClampedArray]",$="[object Uint16Array]",D="[object Uint32Array]",N=/[\\^$.*+?()[\]{}|]/g,z=/^\[object .+?Constructor\]$/,V=/^(?:0|[1-9]\d*)$/,H={};H[R]=H[L]=H[M]=H[E]=H[P]=H[O]=H[F]=H[$]=H[D]=!0,H[a]=H[l]=H[k]=H[u]=H[A]=H[d]=H[f]=H[h]=H[m]=H[_]=H[y]=H[b]=H[S]=H[w]=H[x]=!1;var X=typeof He=="object"&&He&&He.Object===Object&&He,te=typeof self=="object"&&self&&self.Object===Object&&self,ee=X||te||Function("return this")(),j=t&&!t.nodeType&&t,q=j&&!0&&e&&!e.nodeType&&e,Z=q&&q.exports===j,oe=Z&&X.process,be=function(){try{var B=q&&q.require&&q.require("util").types;return B||oe&&oe.binding&&oe.binding("util")}catch{}}(),Me=be&&be.isTypedArray;function lt(B,U,K){switch(K.length){case 0:return B.call(U);case 1:return B.call(U,K[0]);case 2:return B.call(U,K[0],K[1]);case 3:return B.call(U,K[0],K[1],K[2])}return B.apply(U,K)}function Le(B,U){for(var K=-1,pe=Array(B);++K-1}function Rs(B,U){var K=this.__data__,pe=Cu(K,B);return pe<0?(++this.size,K.push([B,U])):K[pe][1]=U,this}Kn.prototype.clear=Ms,Kn.prototype.delete=Ca,Kn.prototype.get=Ea,Kn.prototype.has=wu,Kn.prototype.set=Rs;function Tr(B){var U=-1,K=B==null?0:B.length;for(this.clear();++U1?K[et-1]:void 0,Dt=et>2?K[2]:void 0;for(St=B.length>3&&typeof St=="function"?(et--,St):void 0,Dt&&GW(K[0],K[1],Dt)&&(St=et<3?void 0:St,et=1),U=Object(U);++pe-1&&B%1==0&&B0){if(++U>=i)return arguments[0]}else U=0;return B.apply(void 0,arguments)}}function ZW(B){if(B!=null){try{return sr.call(B)}catch{}try{return B+""}catch{}}return""}function h0(B,U){return B===U||B!==B&&U!==U}var ex=d0(function(){return arguments}())?d0:function(B){return Jf(B)&&fn.call(B,"callee")&&!ho.call(B,"callee")},tx=Array.isArray;function nx(B){return B!=null&&gk(B.length)&&!rx(B)}function JW(B){return Jf(B)&&nx(B)}var pk=Gl||iq;function rx(B){if(!ql(B))return!1;var U=Tu(B);return U==h||U==p||U==c||U==g}function gk(B){return typeof B=="number"&&B>-1&&B%1==0&&B<=s}function ql(B){var U=typeof B;return B!=null&&(U=="object"||U=="function")}function Jf(B){return B!=null&&typeof B=="object"}function eq(B){if(!Jf(B)||Tu(B)!=y)return!1;var U=oi(B);if(U===null)return!0;var K=fn.call(U,"constructor")&&U.constructor;return typeof K=="function"&&K instanceof K&&sr.call(K)==Ri}var mk=Me?we(Me):IW;function tq(B){return BW(B,yk(B))}function yk(B){return nx(B)?X2(B,!0):MW(B)}var nq=zW(function(B,U,K,pe){dk(B,U,K,pe)});function rq(B){return function(){return B}}function vk(B){return B}function iq(){return!1}e.exports=nq})(V1,V1.exports);var ZSe=V1.exports;const ds=Ml(ZSe);var JSe=e=>/!(important)?$/.test(e),uM=e=>typeof e=="string"?e.replace(/!(important)?$/,"").trim():e,e2e=(e,t)=>n=>{const r=String(t),i=JSe(r),o=uM(r),s=e?`${e}.${o}`:o;let a=ys(n.__cssMap)&&s in n.__cssMap?n.__cssMap[s].varRef:t;return a=uM(a),i?`${a} !important`:a};function eA(e){const{scale:t,transform:n,compose:r}=e;return(o,s)=>{var a;const l=e2e(t,o)(s);let c=(a=n==null?void 0:n(l,s))!=null?a:l;return r&&(c=r(c,s)),c}}var oy=(...e)=>t=>e.reduce((n,r)=>r(n),t);function Di(e,t){return n=>{const r={property:n,scale:e};return r.transform=eA({scale:e,transform:t}),r}}var t2e=({rtl:e,ltr:t})=>n=>n.direction==="rtl"?e:t;function n2e(e){const{property:t,scale:n,transform:r}=e;return{scale:n,property:t2e(t),transform:n?eA({scale:n,compose:r}):r}}var SV=["rotate(var(--chakra-rotate, 0))","scaleX(var(--chakra-scale-x, 1))","scaleY(var(--chakra-scale-y, 1))","skewX(var(--chakra-skew-x, 0))","skewY(var(--chakra-skew-y, 0))"];function r2e(){return["translateX(var(--chakra-translate-x, 0))","translateY(var(--chakra-translate-y, 0))",...SV].join(" ")}function i2e(){return["translate3d(var(--chakra-translate-x, 0), var(--chakra-translate-y, 0), 0)",...SV].join(" ")}var o2e={"--chakra-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-sepia":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-drop-shadow":"var(--chakra-empty,/*!*/ /*!*/)",filter:["var(--chakra-blur)","var(--chakra-brightness)","var(--chakra-contrast)","var(--chakra-grayscale)","var(--chakra-hue-rotate)","var(--chakra-invert)","var(--chakra-saturate)","var(--chakra-sepia)","var(--chakra-drop-shadow)"].join(" ")},s2e={backdropFilter:["var(--chakra-backdrop-blur)","var(--chakra-backdrop-brightness)","var(--chakra-backdrop-contrast)","var(--chakra-backdrop-grayscale)","var(--chakra-backdrop-hue-rotate)","var(--chakra-backdrop-invert)","var(--chakra-backdrop-opacity)","var(--chakra-backdrop-saturate)","var(--chakra-backdrop-sepia)"].join(" "),"--chakra-backdrop-blur":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-brightness":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-contrast":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-grayscale":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-hue-rotate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-invert":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-opacity":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-saturate":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-backdrop-sepia":"var(--chakra-empty,/*!*/ /*!*/)"};function a2e(e){return{"--chakra-ring-offset-shadow":"var(--chakra-ring-inset) 0 0 0 var(--chakra-ring-offset-width) var(--chakra-ring-offset-color)","--chakra-ring-shadow":"var(--chakra-ring-inset) 0 0 0 calc(var(--chakra-ring-width) + var(--chakra-ring-offset-width)) var(--chakra-ring-color)","--chakra-ring-width":e,boxShadow:["var(--chakra-ring-offset-shadow)","var(--chakra-ring-shadow)","var(--chakra-shadow, 0 0 #0000)"].join(", ")}}var l2e={"row-reverse":{space:"--chakra-space-x-reverse",divide:"--chakra-divide-x-reverse"},"column-reverse":{space:"--chakra-space-y-reverse",divide:"--chakra-divide-y-reverse"}},x3={"to-t":"to top","to-tr":"to top right","to-r":"to right","to-br":"to bottom right","to-b":"to bottom","to-bl":"to bottom left","to-l":"to left","to-tl":"to top left"},c2e=new Set(Object.values(x3)),w3=new Set(["none","-moz-initial","inherit","initial","revert","unset"]),u2e=e=>e.trim();function d2e(e,t){if(e==null||w3.has(e))return e;if(!(C3(e)||w3.has(e)))return`url('${e}')`;const i=/(^[a-z-A-Z]+)\((.*)\)/g.exec(e),o=i==null?void 0:i[1],s=i==null?void 0:i[2];if(!o||!s)return e;const a=o.includes("-gradient")?o:`${o}-gradient`,[l,...c]=s.split(",").map(u2e).filter(Boolean);if((c==null?void 0:c.length)===0)return e;const u=l in x3?x3[l]:l;c.unshift(u);const d=c.map(f=>{if(c2e.has(f))return f;const h=f.indexOf(" "),[p,m]=h!==-1?[f.substr(0,h),f.substr(h+1)]:[f],_=C3(m)?m:m&&m.split(" "),v=`colors.${p}`,y=v in t.__cssMap?t.__cssMap[v].varRef:p;return _?[y,...Array.isArray(_)?_:[_]].join(" "):y});return`${a}(${d.join(", ")})`}var C3=e=>typeof e=="string"&&e.includes("(")&&e.includes(")"),f2e=(e,t)=>d2e(e,t??{});function h2e(e){return/^var\(--.+\)$/.test(e)}var p2e=e=>{const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}},Ko=e=>t=>`${e}(${t})`,Ze={filter(e){return e!=="auto"?e:o2e},backdropFilter(e){return e!=="auto"?e:s2e},ring(e){return a2e(Ze.px(e))},bgClip(e){return e==="text"?{color:"transparent",backgroundClip:"text"}:{backgroundClip:e}},transform(e){return e==="auto"?r2e():e==="auto-gpu"?i2e():e},vh(e){return e==="$100vh"?"var(--chakra-vh)":e},px(e){if(e==null)return e;const{unitless:t}=p2e(e);return t||typeof e=="number"?`${e}px`:e},fraction(e){return typeof e!="number"||e>1?e:`${e*100}%`},float(e,t){const n={left:"right",right:"left"};return t.direction==="rtl"?n[e]:e},degree(e){if(h2e(e)||e==null)return e;const t=typeof e=="string"&&!e.endsWith("deg");return typeof e=="number"||t?`${e}deg`:e},gradient:f2e,blur:Ko("blur"),opacity:Ko("opacity"),brightness:Ko("brightness"),contrast:Ko("contrast"),dropShadow:Ko("drop-shadow"),grayscale:Ko("grayscale"),hueRotate:e=>Ko("hue-rotate")(Ze.degree(e)),invert:Ko("invert"),saturate:Ko("saturate"),sepia:Ko("sepia"),bgImage(e){return e==null||C3(e)||w3.has(e)?e:`url(${e})`},outline(e){const t=String(e)==="0"||String(e)==="none";return e!==null&&t?{outline:"2px solid transparent",outlineOffset:"2px"}:{outline:e}},flexDirection(e){var t;const{space:n,divide:r}=(t=l2e[e])!=null?t:{},i={flexDirection:e};return n&&(i[n]=1),r&&(i[r]=1),i}},G={borderWidths:Di("borderWidths"),borderStyles:Di("borderStyles"),colors:Di("colors"),borders:Di("borders"),gradients:Di("gradients",Ze.gradient),radii:Di("radii",Ze.px),space:Di("space",oy(Ze.vh,Ze.px)),spaceT:Di("space",oy(Ze.vh,Ze.px)),degreeT(e){return{property:e,transform:Ze.degree}},prop(e,t,n){return{property:e,scale:t,...t&&{transform:eA({scale:t,transform:n})}}},propT(e,t){return{property:e,transform:t}},sizes:Di("sizes",oy(Ze.vh,Ze.px)),sizesT:Di("sizes",oy(Ze.vh,Ze.fraction)),shadows:Di("shadows"),logical:n2e,blur:Di("blur",Ze.blur)},cv={background:G.colors("background"),backgroundColor:G.colors("backgroundColor"),backgroundImage:G.gradients("backgroundImage"),backgroundSize:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundAttachment:!0,backgroundClip:{transform:Ze.bgClip},bgSize:G.prop("backgroundSize"),bgPosition:G.prop("backgroundPosition"),bg:G.colors("background"),bgColor:G.colors("backgroundColor"),bgPos:G.prop("backgroundPosition"),bgRepeat:G.prop("backgroundRepeat"),bgAttachment:G.prop("backgroundAttachment"),bgGradient:G.gradients("backgroundImage"),bgClip:{transform:Ze.bgClip}};Object.assign(cv,{bgImage:cv.backgroundImage,bgImg:cv.backgroundImage});var ct={border:G.borders("border"),borderWidth:G.borderWidths("borderWidth"),borderStyle:G.borderStyles("borderStyle"),borderColor:G.colors("borderColor"),borderRadius:G.radii("borderRadius"),borderTop:G.borders("borderTop"),borderBlockStart:G.borders("borderBlockStart"),borderTopLeftRadius:G.radii("borderTopLeftRadius"),borderStartStartRadius:G.logical({scale:"radii",property:{ltr:"borderTopLeftRadius",rtl:"borderTopRightRadius"}}),borderEndStartRadius:G.logical({scale:"radii",property:{ltr:"borderBottomLeftRadius",rtl:"borderBottomRightRadius"}}),borderTopRightRadius:G.radii("borderTopRightRadius"),borderStartEndRadius:G.logical({scale:"radii",property:{ltr:"borderTopRightRadius",rtl:"borderTopLeftRadius"}}),borderEndEndRadius:G.logical({scale:"radii",property:{ltr:"borderBottomRightRadius",rtl:"borderBottomLeftRadius"}}),borderRight:G.borders("borderRight"),borderInlineEnd:G.borders("borderInlineEnd"),borderBottom:G.borders("borderBottom"),borderBlockEnd:G.borders("borderBlockEnd"),borderBottomLeftRadius:G.radii("borderBottomLeftRadius"),borderBottomRightRadius:G.radii("borderBottomRightRadius"),borderLeft:G.borders("borderLeft"),borderInlineStart:{property:"borderInlineStart",scale:"borders"},borderInlineStartRadius:G.logical({scale:"radii",property:{ltr:["borderTopLeftRadius","borderBottomLeftRadius"],rtl:["borderTopRightRadius","borderBottomRightRadius"]}}),borderInlineEndRadius:G.logical({scale:"radii",property:{ltr:["borderTopRightRadius","borderBottomRightRadius"],rtl:["borderTopLeftRadius","borderBottomLeftRadius"]}}),borderX:G.borders(["borderLeft","borderRight"]),borderInline:G.borders("borderInline"),borderY:G.borders(["borderTop","borderBottom"]),borderBlock:G.borders("borderBlock"),borderTopWidth:G.borderWidths("borderTopWidth"),borderBlockStartWidth:G.borderWidths("borderBlockStartWidth"),borderTopColor:G.colors("borderTopColor"),borderBlockStartColor:G.colors("borderBlockStartColor"),borderTopStyle:G.borderStyles("borderTopStyle"),borderBlockStartStyle:G.borderStyles("borderBlockStartStyle"),borderBottomWidth:G.borderWidths("borderBottomWidth"),borderBlockEndWidth:G.borderWidths("borderBlockEndWidth"),borderBottomColor:G.colors("borderBottomColor"),borderBlockEndColor:G.colors("borderBlockEndColor"),borderBottomStyle:G.borderStyles("borderBottomStyle"),borderBlockEndStyle:G.borderStyles("borderBlockEndStyle"),borderLeftWidth:G.borderWidths("borderLeftWidth"),borderInlineStartWidth:G.borderWidths("borderInlineStartWidth"),borderLeftColor:G.colors("borderLeftColor"),borderInlineStartColor:G.colors("borderInlineStartColor"),borderLeftStyle:G.borderStyles("borderLeftStyle"),borderInlineStartStyle:G.borderStyles("borderInlineStartStyle"),borderRightWidth:G.borderWidths("borderRightWidth"),borderInlineEndWidth:G.borderWidths("borderInlineEndWidth"),borderRightColor:G.colors("borderRightColor"),borderInlineEndColor:G.colors("borderInlineEndColor"),borderRightStyle:G.borderStyles("borderRightStyle"),borderInlineEndStyle:G.borderStyles("borderInlineEndStyle"),borderTopRadius:G.radii(["borderTopLeftRadius","borderTopRightRadius"]),borderBottomRadius:G.radii(["borderBottomLeftRadius","borderBottomRightRadius"]),borderLeftRadius:G.radii(["borderTopLeftRadius","borderBottomLeftRadius"]),borderRightRadius:G.radii(["borderTopRightRadius","borderBottomRightRadius"])};Object.assign(ct,{rounded:ct.borderRadius,roundedTop:ct.borderTopRadius,roundedTopLeft:ct.borderTopLeftRadius,roundedTopRight:ct.borderTopRightRadius,roundedTopStart:ct.borderStartStartRadius,roundedTopEnd:ct.borderStartEndRadius,roundedBottom:ct.borderBottomRadius,roundedBottomLeft:ct.borderBottomLeftRadius,roundedBottomRight:ct.borderBottomRightRadius,roundedBottomStart:ct.borderEndStartRadius,roundedBottomEnd:ct.borderEndEndRadius,roundedLeft:ct.borderLeftRadius,roundedRight:ct.borderRightRadius,roundedStart:ct.borderInlineStartRadius,roundedEnd:ct.borderInlineEndRadius,borderStart:ct.borderInlineStart,borderEnd:ct.borderInlineEnd,borderTopStartRadius:ct.borderStartStartRadius,borderTopEndRadius:ct.borderStartEndRadius,borderBottomStartRadius:ct.borderEndStartRadius,borderBottomEndRadius:ct.borderEndEndRadius,borderStartRadius:ct.borderInlineStartRadius,borderEndRadius:ct.borderInlineEndRadius,borderStartWidth:ct.borderInlineStartWidth,borderEndWidth:ct.borderInlineEndWidth,borderStartColor:ct.borderInlineStartColor,borderEndColor:ct.borderInlineEndColor,borderStartStyle:ct.borderInlineStartStyle,borderEndStyle:ct.borderInlineEndStyle});var g2e={color:G.colors("color"),textColor:G.colors("color"),fill:G.colors("fill"),stroke:G.colors("stroke")},E3={boxShadow:G.shadows("boxShadow"),mixBlendMode:!0,blendMode:G.prop("mixBlendMode"),backgroundBlendMode:!0,bgBlendMode:G.prop("backgroundBlendMode"),opacity:!0};Object.assign(E3,{shadow:E3.boxShadow});var m2e={filter:{transform:Ze.filter},blur:G.blur("--chakra-blur"),brightness:G.propT("--chakra-brightness",Ze.brightness),contrast:G.propT("--chakra-contrast",Ze.contrast),hueRotate:G.propT("--chakra-hue-rotate",Ze.hueRotate),invert:G.propT("--chakra-invert",Ze.invert),saturate:G.propT("--chakra-saturate",Ze.saturate),dropShadow:G.propT("--chakra-drop-shadow",Ze.dropShadow),backdropFilter:{transform:Ze.backdropFilter},backdropBlur:G.blur("--chakra-backdrop-blur"),backdropBrightness:G.propT("--chakra-backdrop-brightness",Ze.brightness),backdropContrast:G.propT("--chakra-backdrop-contrast",Ze.contrast),backdropHueRotate:G.propT("--chakra-backdrop-hue-rotate",Ze.hueRotate),backdropInvert:G.propT("--chakra-backdrop-invert",Ze.invert),backdropSaturate:G.propT("--chakra-backdrop-saturate",Ze.saturate)},U1={alignItems:!0,alignContent:!0,justifyItems:!0,justifyContent:!0,flexWrap:!0,flexDirection:{transform:Ze.flexDirection},flex:!0,flexFlow:!0,flexGrow:!0,flexShrink:!0,flexBasis:G.sizes("flexBasis"),justifySelf:!0,alignSelf:!0,order:!0,placeItems:!0,placeContent:!0,placeSelf:!0,gap:G.space("gap"),rowGap:G.space("rowGap"),columnGap:G.space("columnGap")};Object.assign(U1,{flexDir:U1.flexDirection});var xV={gridGap:G.space("gridGap"),gridColumnGap:G.space("gridColumnGap"),gridRowGap:G.space("gridRowGap"),gridColumn:!0,gridRow:!0,gridAutoFlow:!0,gridAutoColumns:!0,gridColumnStart:!0,gridColumnEnd:!0,gridRowStart:!0,gridRowEnd:!0,gridAutoRows:!0,gridTemplate:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridArea:!0},y2e={appearance:!0,cursor:!0,resize:!0,userSelect:!0,pointerEvents:!0,outline:{transform:Ze.outline},outlineOffset:!0,outlineColor:G.colors("outlineColor")},zi={width:G.sizesT("width"),inlineSize:G.sizesT("inlineSize"),height:G.sizes("height"),blockSize:G.sizes("blockSize"),boxSize:G.sizes(["width","height"]),minWidth:G.sizes("minWidth"),minInlineSize:G.sizes("minInlineSize"),minHeight:G.sizes("minHeight"),minBlockSize:G.sizes("minBlockSize"),maxWidth:G.sizes("maxWidth"),maxInlineSize:G.sizes("maxInlineSize"),maxHeight:G.sizes("maxHeight"),maxBlockSize:G.sizes("maxBlockSize"),overflow:!0,overflowX:!0,overflowY:!0,overscrollBehavior:!0,overscrollBehaviorX:!0,overscrollBehaviorY:!0,display:!0,aspectRatio:!0,hideFrom:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (min-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r.minW)!=null?i:e})`]:{display:"none"}}}},hideBelow:{scale:"breakpoints",transform:(e,t)=>{var n,r,i;return{[`@media screen and (max-width: ${(i=(r=(n=t.__breakpoints)==null?void 0:n.get(e))==null?void 0:r._minW)!=null?i:e})`]:{display:"none"}}}},verticalAlign:!0,boxSizing:!0,boxDecorationBreak:!0,float:G.propT("float",Ze.float),objectFit:!0,objectPosition:!0,visibility:!0,isolation:!0};Object.assign(zi,{w:zi.width,h:zi.height,minW:zi.minWidth,maxW:zi.maxWidth,minH:zi.minHeight,maxH:zi.maxHeight,overscroll:zi.overscrollBehavior,overscrollX:zi.overscrollBehaviorX,overscrollY:zi.overscrollBehaviorY});var v2e={listStyleType:!0,listStylePosition:!0,listStylePos:G.prop("listStylePosition"),listStyleImage:!0,listStyleImg:G.prop("listStyleImage")};function b2e(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},S2e=_2e(b2e),x2e={border:"0px",clip:"rect(0, 0, 0, 0)",width:"1px",height:"1px",margin:"-1px",padding:"0px",overflow:"hidden",whiteSpace:"nowrap",position:"absolute"},w2e={position:"static",width:"auto",height:"auto",clip:"auto",padding:"0",margin:"0",overflow:"visible",whiteSpace:"normal"},xw=(e,t,n)=>{const r={},i=S2e(e,t,{});for(const o in i)o in n&&n[o]!=null||(r[o]=i[o]);return r},C2e={srOnly:{transform(e){return e===!0?x2e:e==="focusable"?w2e:{}}},layerStyle:{processResult:!0,transform:(e,t,n)=>xw(t,`layerStyles.${e}`,n)},textStyle:{processResult:!0,transform:(e,t,n)=>xw(t,`textStyles.${e}`,n)},apply:{processResult:!0,transform:(e,t,n)=>xw(t,e,n)}},bp={position:!0,pos:G.prop("position"),zIndex:G.prop("zIndex","zIndices"),inset:G.spaceT("inset"),insetX:G.spaceT(["left","right"]),insetInline:G.spaceT("insetInline"),insetY:G.spaceT(["top","bottom"]),insetBlock:G.spaceT("insetBlock"),top:G.spaceT("top"),insetBlockStart:G.spaceT("insetBlockStart"),bottom:G.spaceT("bottom"),insetBlockEnd:G.spaceT("insetBlockEnd"),left:G.spaceT("left"),insetInlineStart:G.logical({scale:"space",property:{ltr:"left",rtl:"right"}}),right:G.spaceT("right"),insetInlineEnd:G.logical({scale:"space",property:{ltr:"right",rtl:"left"}})};Object.assign(bp,{insetStart:bp.insetInlineStart,insetEnd:bp.insetInlineEnd});var E2e={ring:{transform:Ze.ring},ringColor:G.colors("--chakra-ring-color"),ringOffset:G.prop("--chakra-ring-offset-width"),ringOffsetColor:G.colors("--chakra-ring-offset-color"),ringInset:G.prop("--chakra-ring-inset")},Rt={margin:G.spaceT("margin"),marginTop:G.spaceT("marginTop"),marginBlockStart:G.spaceT("marginBlockStart"),marginRight:G.spaceT("marginRight"),marginInlineEnd:G.spaceT("marginInlineEnd"),marginBottom:G.spaceT("marginBottom"),marginBlockEnd:G.spaceT("marginBlockEnd"),marginLeft:G.spaceT("marginLeft"),marginInlineStart:G.spaceT("marginInlineStart"),marginX:G.spaceT(["marginInlineStart","marginInlineEnd"]),marginInline:G.spaceT("marginInline"),marginY:G.spaceT(["marginTop","marginBottom"]),marginBlock:G.spaceT("marginBlock"),padding:G.space("padding"),paddingTop:G.space("paddingTop"),paddingBlockStart:G.space("paddingBlockStart"),paddingRight:G.space("paddingRight"),paddingBottom:G.space("paddingBottom"),paddingBlockEnd:G.space("paddingBlockEnd"),paddingLeft:G.space("paddingLeft"),paddingInlineStart:G.space("paddingInlineStart"),paddingInlineEnd:G.space("paddingInlineEnd"),paddingX:G.space(["paddingInlineStart","paddingInlineEnd"]),paddingInline:G.space("paddingInline"),paddingY:G.space(["paddingTop","paddingBottom"]),paddingBlock:G.space("paddingBlock")};Object.assign(Rt,{m:Rt.margin,mt:Rt.marginTop,mr:Rt.marginRight,me:Rt.marginInlineEnd,marginEnd:Rt.marginInlineEnd,mb:Rt.marginBottom,ml:Rt.marginLeft,ms:Rt.marginInlineStart,marginStart:Rt.marginInlineStart,mx:Rt.marginX,my:Rt.marginY,p:Rt.padding,pt:Rt.paddingTop,py:Rt.paddingY,px:Rt.paddingX,pb:Rt.paddingBottom,pl:Rt.paddingLeft,ps:Rt.paddingInlineStart,paddingStart:Rt.paddingInlineStart,pr:Rt.paddingRight,pe:Rt.paddingInlineEnd,paddingEnd:Rt.paddingInlineEnd});var T2e={textDecorationColor:G.colors("textDecorationColor"),textDecoration:!0,textDecor:{property:"textDecoration"},textDecorationLine:!0,textDecorationStyle:!0,textDecorationThickness:!0,textUnderlineOffset:!0,textShadow:G.shadows("textShadow")},A2e={clipPath:!0,transform:G.propT("transform",Ze.transform),transformOrigin:!0,translateX:G.spaceT("--chakra-translate-x"),translateY:G.spaceT("--chakra-translate-y"),skewX:G.degreeT("--chakra-skew-x"),skewY:G.degreeT("--chakra-skew-y"),scaleX:G.prop("--chakra-scale-x"),scaleY:G.prop("--chakra-scale-y"),scale:G.prop(["--chakra-scale-x","--chakra-scale-y"]),rotate:G.degreeT("--chakra-rotate")},k2e={transition:!0,transitionDelay:!0,animation:!0,willChange:!0,transitionDuration:G.prop("transitionDuration","transition.duration"),transitionProperty:G.prop("transitionProperty","transition.property"),transitionTimingFunction:G.prop("transitionTimingFunction","transition.easing")},P2e={fontFamily:G.prop("fontFamily","fonts"),fontSize:G.prop("fontSize","fontSizes",Ze.px),fontWeight:G.prop("fontWeight","fontWeights"),lineHeight:G.prop("lineHeight","lineHeights"),letterSpacing:G.prop("letterSpacing","letterSpacings"),textAlign:!0,fontStyle:!0,textIndent:!0,wordBreak:!0,overflowWrap:!0,textOverflow:!0,textTransform:!0,whiteSpace:!0,isTruncated:{transform(e){if(e===!0)return{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}},noOfLines:{static:{overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:"var(--chakra-line-clamp)"},property:"--chakra-line-clamp"}},I2e={scrollBehavior:!0,scrollSnapAlign:!0,scrollSnapStop:!0,scrollSnapType:!0,scrollMargin:G.spaceT("scrollMargin"),scrollMarginTop:G.spaceT("scrollMarginTop"),scrollMarginBottom:G.spaceT("scrollMarginBottom"),scrollMarginLeft:G.spaceT("scrollMarginLeft"),scrollMarginRight:G.spaceT("scrollMarginRight"),scrollMarginX:G.spaceT(["scrollMarginLeft","scrollMarginRight"]),scrollMarginY:G.spaceT(["scrollMarginTop","scrollMarginBottom"]),scrollPadding:G.spaceT("scrollPadding"),scrollPaddingTop:G.spaceT("scrollPaddingTop"),scrollPaddingBottom:G.spaceT("scrollPaddingBottom"),scrollPaddingLeft:G.spaceT("scrollPaddingLeft"),scrollPaddingRight:G.spaceT("scrollPaddingRight"),scrollPaddingX:G.spaceT(["scrollPaddingLeft","scrollPaddingRight"]),scrollPaddingY:G.spaceT(["scrollPaddingTop","scrollPaddingBottom"])};function wV(e){return ys(e)&&e.reference?e.reference:String(e)}var TS=(e,...t)=>t.map(wV).join(` ${e} `).replace(/calc/g,""),dM=(...e)=>`calc(${TS("+",...e)})`,fM=(...e)=>`calc(${TS("-",...e)})`,T3=(...e)=>`calc(${TS("*",...e)})`,hM=(...e)=>`calc(${TS("/",...e)})`,pM=e=>{const t=wV(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:T3(t,-1)},mc=Object.assign(e=>({add:(...t)=>mc(dM(e,...t)),subtract:(...t)=>mc(fM(e,...t)),multiply:(...t)=>mc(T3(e,...t)),divide:(...t)=>mc(hM(e,...t)),negate:()=>mc(pM(e)),toString:()=>e.toString()}),{add:dM,subtract:fM,multiply:T3,divide:hM,negate:pM});function M2e(e,t="-"){return e.replace(/\s+/g,t)}function R2e(e){const t=M2e(e.toString());return $2e(O2e(t))}function O2e(e){return e.includes("\\.")?e:!Number.isInteger(parseFloat(e.toString()))?e.replace(".","\\."):e}function $2e(e){return e.replace(/[!-,/:-@[-^`{-~]/g,"\\$&")}function N2e(e,t=""){return[t,e].filter(Boolean).join("-")}function F2e(e,t){return`var(${e}${t?`, ${t}`:""})`}function D2e(e,t=""){return R2e(`--${N2e(e,t)}`)}function Ae(e,t,n){const r=D2e(e,n);return{variable:r,reference:F2e(r,t)}}function L2e(e,t){const n={};for(const r of t){if(Array.isArray(r)){const[i,o]=r;n[i]=Ae(`${e}-${i}`,o);continue}n[r]=Ae(`${e}-${r}`)}return n}function B2e(e){const t=e==null?0:e.length;return t?e[t-1]:void 0}function z2e(e){const t=parseFloat(e.toString()),n=e.toString().replace(String(t),"");return{unitless:!n,value:t,unit:n}}function A3(e){if(e==null)return e;const{unitless:t}=z2e(e);return t||typeof e=="number"?`${e}px`:e}var CV=(e,t)=>parseInt(e[1],10)>parseInt(t[1],10)?1:-1,tA=e=>Object.fromEntries(Object.entries(e).sort(CV));function gM(e){const t=tA(e);return Object.assign(Object.values(t),t)}function j2e(e){const t=Object.keys(tA(e));return new Set(t)}function mM(e){var t;if(!e)return e;e=(t=A3(e))!=null?t:e;const n=-.02;return typeof e=="number"?`${e+n}`:e.replace(/(\d+\.?\d*)/u,r=>`${parseFloat(r)+n}`)}function Kh(e,t){const n=["@media screen"];return e&&n.push("and",`(min-width: ${A3(e)})`),t&&n.push("and",`(max-width: ${A3(t)})`),n.join(" ")}function V2e(e){var t;if(!e)return null;e.base=(t=e.base)!=null?t:"0px";const n=gM(e),r=Object.entries(e).sort(CV).map(([s,a],l,c)=>{var u;let[,d]=(u=c[l+1])!=null?u:[];return d=parseFloat(d)>0?mM(d):void 0,{_minW:mM(a),breakpoint:s,minW:a,maxW:d,maxWQuery:Kh(null,d),minWQuery:Kh(a),minMaxQuery:Kh(a,d)}}),i=j2e(e),o=Array.from(i.values());return{keys:i,normalized:n,isResponsive(s){const a=Object.keys(s);return a.length>0&&a.every(l=>i.has(l))},asObject:tA(e),asArray:gM(e),details:r,get(s){return r.find(a=>a.breakpoint===s)},media:[null,...n.map(s=>Kh(s)).slice(1)],toArrayValue(s){if(!ys(s))throw new Error("toArrayValue: value must be an object");const a=o.map(l=>{var c;return(c=s[l])!=null?c:null});for(;B2e(a)===null;)a.pop();return a},toObjectValue(s){if(!Array.isArray(s))throw new Error("toObjectValue: value must be an array");return s.reduce((a,l,c)=>{const u=o[c];return u!=null&&l!=null&&(a[u]=l),a},{})}}}var Xn={hover:(e,t)=>`${e}:hover ${t}, ${e}[data-hover] ${t}`,focus:(e,t)=>`${e}:focus ${t}, ${e}[data-focus] ${t}`,focusVisible:(e,t)=>`${e}:focus-visible ${t}`,focusWithin:(e,t)=>`${e}:focus-within ${t}`,active:(e,t)=>`${e}:active ${t}, ${e}[data-active] ${t}`,disabled:(e,t)=>`${e}:disabled ${t}, ${e}[data-disabled] ${t}`,invalid:(e,t)=>`${e}:invalid ${t}, ${e}[data-invalid] ${t}`,checked:(e,t)=>`${e}:checked ${t}, ${e}[data-checked] ${t}`,indeterminate:(e,t)=>`${e}:indeterminate ${t}, ${e}[aria-checked=mixed] ${t}, ${e}[data-indeterminate] ${t}`,readOnly:(e,t)=>`${e}:read-only ${t}, ${e}[readonly] ${t}, ${e}[data-read-only] ${t}`,expanded:(e,t)=>`${e}:read-only ${t}, ${e}[aria-expanded=true] ${t}, ${e}[data-expanded] ${t}`,placeholderShown:(e,t)=>`${e}:placeholder-shown ${t}`},Ia=e=>EV(t=>e(t,"&"),"[role=group]","[data-group]",".group"),Ns=e=>EV(t=>e(t,"~ &"),"[data-peer]",".peer"),EV=(e,...t)=>t.map(e).join(", "),AS={_hover:"&:hover, &[data-hover]",_active:"&:active, &[data-active]",_focus:"&:focus, &[data-focus]",_highlighted:"&[data-highlighted]",_focusWithin:"&:focus-within",_focusVisible:"&:focus-visible, &[data-focus-visible]",_disabled:"&:disabled, &[disabled], &[aria-disabled=true], &[data-disabled]",_readOnly:"&[aria-readonly=true], &[readonly], &[data-readonly]",_before:"&::before",_after:"&::after",_empty:"&:empty",_expanded:"&[aria-expanded=true], &[data-expanded]",_checked:"&[aria-checked=true], &[data-checked]",_grabbed:"&[aria-grabbed=true], &[data-grabbed]",_pressed:"&[aria-pressed=true], &[data-pressed]",_invalid:"&[aria-invalid=true], &[data-invalid]",_valid:"&[data-valid], &[data-state=valid]",_loading:"&[data-loading], &[aria-busy=true]",_selected:"&[aria-selected=true], &[data-selected]",_hidden:"&[hidden], &[data-hidden]",_autofill:"&:-webkit-autofill",_even:"&:nth-of-type(even)",_odd:"&:nth-of-type(odd)",_first:"&:first-of-type",_firstLetter:"&::first-letter",_last:"&:last-of-type",_notFirst:"&:not(:first-of-type)",_notLast:"&:not(:last-of-type)",_visited:"&:visited",_activeLink:"&[aria-current=page]",_activeStep:"&[aria-current=step]",_indeterminate:"&:indeterminate, &[aria-checked=mixed], &[data-indeterminate]",_groupHover:Ia(Xn.hover),_peerHover:Ns(Xn.hover),_groupFocus:Ia(Xn.focus),_peerFocus:Ns(Xn.focus),_groupFocusVisible:Ia(Xn.focusVisible),_peerFocusVisible:Ns(Xn.focusVisible),_groupActive:Ia(Xn.active),_peerActive:Ns(Xn.active),_groupDisabled:Ia(Xn.disabled),_peerDisabled:Ns(Xn.disabled),_groupInvalid:Ia(Xn.invalid),_peerInvalid:Ns(Xn.invalid),_groupChecked:Ia(Xn.checked),_peerChecked:Ns(Xn.checked),_groupFocusWithin:Ia(Xn.focusWithin),_peerFocusWithin:Ns(Xn.focusWithin),_peerPlaceholderShown:Ns(Xn.placeholderShown),_placeholder:"&::placeholder",_placeholderShown:"&:placeholder-shown",_fullScreen:"&:fullscreen",_selection:"&::selection",_rtl:"[dir=rtl] &, &[dir=rtl]",_ltr:"[dir=ltr] &, &[dir=ltr]",_mediaDark:"@media (prefers-color-scheme: dark)",_mediaReduceMotion:"@media (prefers-reduced-motion: reduce)",_dark:".chakra-ui-dark &:not([data-theme]),[data-theme=dark] &:not([data-theme]),&[data-theme=dark]",_light:".chakra-ui-light &:not([data-theme]),[data-theme=light] &:not([data-theme]),&[data-theme=light]",_horizontal:"&[data-orientation=horizontal]",_vertical:"&[data-orientation=vertical]"},TV=Object.keys(AS);function yM(e,t){return Ae(String(e).replace(/\./g,"-"),void 0,t)}function U2e(e,t){let n={};const r={};for(const[i,o]of Object.entries(e)){const{isSemantic:s,value:a}=o,{variable:l,reference:c}=yM(i,t==null?void 0:t.cssVarPrefix);if(!s){if(i.startsWith("space")){const f=i.split("."),[h,...p]=f,m=`${h}.-${p.join(".")}`,_=mc.negate(a),v=mc.negate(c);r[m]={value:_,var:l,varRef:v}}n[l]=a,r[i]={value:a,var:l,varRef:c};continue}const u=f=>{const p=[String(i).split(".")[0],f].join(".");if(!e[p])return f;const{reference:_}=yM(p,t==null?void 0:t.cssVarPrefix);return _},d=ys(a)?a:{default:a};n=ds(n,Object.entries(d).reduce((f,[h,p])=>{var m,_;if(!p)return f;const v=u(`${p}`);if(h==="default")return f[l]=v,f;const y=(_=(m=AS)==null?void 0:m[h])!=null?_:h;return f[y]={[l]:v},f},{})),r[i]={value:c,var:l,varRef:c}}return{cssVars:n,cssMap:r}}function G2e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}function H2e(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function W2e(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function vM(e,t,n={}){const{stop:r,getKey:i}=n;function o(s,a=[]){var l;if(W2e(s)||Array.isArray(s)){const c={};for(const[u,d]of Object.entries(s)){const f=(l=i==null?void 0:i(u))!=null?l:u,h=[...a,f];if(r!=null&&r(s,h))return t(s,a);c[f]=o(d,h)}return c}return t(s,a)}return o(e)}var q2e=["colors","borders","borderWidths","borderStyles","fonts","fontSizes","fontWeights","gradients","letterSpacings","lineHeights","radii","space","shadows","sizes","zIndices","transition","blur","breakpoints"];function K2e(e){return H2e(e,q2e)}function X2e(e){return e.semanticTokens}function Q2e(e){const{__cssMap:t,__cssVars:n,__breakpoints:r,...i}=e;return i}var Y2e=e=>TV.includes(e)||e==="default";function Z2e({tokens:e,semanticTokens:t}){const n={};return vM(e,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!1,value:r})}),vM(t,(r,i)=>{r!=null&&(n[i.join(".")]={isSemantic:!0,value:r})},{stop:r=>Object.keys(r).every(Y2e)}),n}function J2e(e){var t;const n=Q2e(e),r=K2e(n),i=X2e(n),o=Z2e({tokens:r,semanticTokens:i}),s=(t=n.config)==null?void 0:t.cssVarPrefix,{cssMap:a,cssVars:l}=U2e(o,{cssVarPrefix:s});return Object.assign(n,{__cssVars:{...{"--chakra-ring-inset":"var(--chakra-empty,/*!*/ /*!*/)","--chakra-ring-offset-width":"0px","--chakra-ring-offset-color":"#fff","--chakra-ring-color":"rgba(66, 153, 225, 0.6)","--chakra-ring-offset-shadow":"0 0 #0000","--chakra-ring-shadow":"0 0 #0000","--chakra-space-x-reverse":"0","--chakra-space-y-reverse":"0"},...l},__cssMap:a,__breakpoints:V2e(n.breakpoints)}),n}var nA=ds({},cv,ct,g2e,U1,zi,m2e,E2e,y2e,xV,C2e,bp,E3,Rt,I2e,P2e,T2e,A2e,v2e,k2e),exe=Object.assign({},Rt,zi,U1,xV,bp),wWe=Object.keys(exe),txe=[...Object.keys(nA),...TV],nxe={...nA,...AS},rxe=e=>e in nxe,ixe=e=>t=>{if(!t.__breakpoints)return e;const{isResponsive:n,toArrayValue:r,media:i}=t.__breakpoints,o={};for(const s in e){let a=us(e[s],t);if(a==null)continue;if(a=ys(a)&&n(a)?r(a):a,!Array.isArray(a)){o[s]=a;continue}const l=a.slice(0,i.length).length;for(let c=0;ce.startsWith("--")&&typeof t=="string"&&!sxe(t),lxe=(e,t)=>{var n,r;if(t==null)return t;const i=l=>{var c,u;return(u=(c=e.__cssMap)==null?void 0:c[l])==null?void 0:u.varRef},o=l=>{var c;return(c=i(l))!=null?c:l},[s,a]=oxe(t);return t=(r=(n=i(s))!=null?n:o(a))!=null?r:o(t),t};function cxe(e){const{configs:t={},pseudos:n={},theme:r}=e,i=(o,s=!1)=>{var a,l,c;const u=us(o,r),d=ixe(u)(r);let f={};for(let h in d){const p=d[h];let m=us(p,r);h in n&&(h=n[h]),axe(h,m)&&(m=lxe(r,m));let _=t[h];if(_===!0&&(_={property:h}),ys(m)){f[h]=(a=f[h])!=null?a:{},f[h]=ds({},f[h],i(m,!0));continue}let v=(c=(l=_==null?void 0:_.transform)==null?void 0:l.call(_,m,r,u))!=null?c:m;v=_!=null&&_.processResult?i(v,!0):v;const y=us(_==null?void 0:_.property,r);if(!s&&(_!=null&&_.static)){const g=us(_.static,r);f=ds({},f,g)}if(y&&Array.isArray(y)){for(const g of y)f[g]=v;continue}if(y){y==="&"&&ys(v)?f=ds({},f,v):f[y]=v;continue}if(ys(v)){f=ds({},f,v);continue}f[h]=v}return f};return i}var AV=e=>t=>cxe({theme:t,pseudos:AS,configs:nA})(e);function Be(e){return{definePartsStyle(t){return t},defineMultiStyleConfig(t){return{parts:e,...t}}}}function uxe(e,t){if(Array.isArray(e))return e;if(ys(e))return t(e);if(e!=null)return[e]}function dxe(e,t){for(let n=t+1;n{ds(c,{[g]:f?y[g]:{[v]:y[g]}})});continue}if(!h){f?ds(c,y):c[v]=y;continue}c[v]=y}}return c}}function hxe(e){return t=>{var n;const{variant:r,size:i,theme:o}=t,s=fxe(o);return ds({},us((n=e.baseStyle)!=null?n:{},t),s(e,"sizes",i,t),s(e,"variants",r,t))}}function CWe(e,t,n){var r,i,o;return(o=(i=(r=e.__cssMap)==null?void 0:r[`${t}.${n}`])==null?void 0:i.varRef)!=null?o:n}function Wm(e){return G2e(e,["styleConfig","size","variant","colorScheme"])}var pxe={common:"background-color, border-color, color, fill, stroke, opacity, box-shadow, transform",colors:"background-color, border-color, color, fill, stroke",dimensions:"width, height",position:"left, right, top, bottom",background:"background-color, background-image, background-position"},gxe={"ease-in":"cubic-bezier(0.4, 0, 1, 1)","ease-out":"cubic-bezier(0, 0, 0.2, 1)","ease-in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},mxe={"ultra-fast":"50ms",faster:"100ms",fast:"150ms",normal:"200ms",slow:"300ms",slower:"400ms","ultra-slow":"500ms"},yxe={property:pxe,easing:gxe,duration:mxe},vxe=yxe,bxe={hide:-1,auto:"auto",base:0,docked:10,dropdown:1e3,sticky:1100,banner:1200,overlay:1300,modal:1400,popover:1500,skipLink:1600,toast:1700,tooltip:1800},_xe=bxe,Sxe={none:0,"1px":"1px solid","2px":"2px solid","4px":"4px solid","8px":"8px solid"},xxe=Sxe,wxe={base:"0em",sm:"30em",md:"48em",lg:"62em",xl:"80em","2xl":"96em"},Cxe=wxe,Exe={transparent:"transparent",current:"currentColor",black:"#000000",white:"#FFFFFF",whiteAlpha:{50:"rgba(255, 255, 255, 0.04)",100:"rgba(255, 255, 255, 0.06)",200:"rgba(255, 255, 255, 0.08)",300:"rgba(255, 255, 255, 0.16)",400:"rgba(255, 255, 255, 0.24)",500:"rgba(255, 255, 255, 0.36)",600:"rgba(255, 255, 255, 0.48)",700:"rgba(255, 255, 255, 0.64)",800:"rgba(255, 255, 255, 0.80)",900:"rgba(255, 255, 255, 0.92)"},blackAlpha:{50:"rgba(0, 0, 0, 0.04)",100:"rgba(0, 0, 0, 0.06)",200:"rgba(0, 0, 0, 0.08)",300:"rgba(0, 0, 0, 0.16)",400:"rgba(0, 0, 0, 0.24)",500:"rgba(0, 0, 0, 0.36)",600:"rgba(0, 0, 0, 0.48)",700:"rgba(0, 0, 0, 0.64)",800:"rgba(0, 0, 0, 0.80)",900:"rgba(0, 0, 0, 0.92)"},gray:{50:"#F7FAFC",100:"#EDF2F7",200:"#E2E8F0",300:"#CBD5E0",400:"#A0AEC0",500:"#718096",600:"#4A5568",700:"#2D3748",800:"#1A202C",900:"#171923"},red:{50:"#FFF5F5",100:"#FED7D7",200:"#FEB2B2",300:"#FC8181",400:"#F56565",500:"#E53E3E",600:"#C53030",700:"#9B2C2C",800:"#822727",900:"#63171B"},orange:{50:"#FFFAF0",100:"#FEEBC8",200:"#FBD38D",300:"#F6AD55",400:"#ED8936",500:"#DD6B20",600:"#C05621",700:"#9C4221",800:"#7B341E",900:"#652B19"},yellow:{50:"#FFFFF0",100:"#FEFCBF",200:"#FAF089",300:"#F6E05E",400:"#ECC94B",500:"#D69E2E",600:"#B7791F",700:"#975A16",800:"#744210",900:"#5F370E"},green:{50:"#F0FFF4",100:"#C6F6D5",200:"#9AE6B4",300:"#68D391",400:"#48BB78",500:"#38A169",600:"#2F855A",700:"#276749",800:"#22543D",900:"#1C4532"},teal:{50:"#E6FFFA",100:"#B2F5EA",200:"#81E6D9",300:"#4FD1C5",400:"#38B2AC",500:"#319795",600:"#2C7A7B",700:"#285E61",800:"#234E52",900:"#1D4044"},blue:{50:"#ebf8ff",100:"#bee3f8",200:"#90cdf4",300:"#63b3ed",400:"#4299e1",500:"#3182ce",600:"#2b6cb0",700:"#2c5282",800:"#2a4365",900:"#1A365D"},cyan:{50:"#EDFDFD",100:"#C4F1F9",200:"#9DECF9",300:"#76E4F7",400:"#0BC5EA",500:"#00B5D8",600:"#00A3C4",700:"#0987A0",800:"#086F83",900:"#065666"},purple:{50:"#FAF5FF",100:"#E9D8FD",200:"#D6BCFA",300:"#B794F4",400:"#9F7AEA",500:"#805AD5",600:"#6B46C1",700:"#553C9A",800:"#44337A",900:"#322659"},pink:{50:"#FFF5F7",100:"#FED7E2",200:"#FBB6CE",300:"#F687B3",400:"#ED64A6",500:"#D53F8C",600:"#B83280",700:"#97266D",800:"#702459",900:"#521B41"},linkedin:{50:"#E8F4F9",100:"#CFEDFB",200:"#9BDAF3",300:"#68C7EC",400:"#34B3E4",500:"#00A0DC",600:"#008CC9",700:"#0077B5",800:"#005E93",900:"#004471"},facebook:{50:"#E8F4F9",100:"#D9DEE9",200:"#B7C2DA",300:"#6482C0",400:"#4267B2",500:"#385898",600:"#314E89",700:"#29487D",800:"#223B67",900:"#1E355B"},messenger:{50:"#D0E6FF",100:"#B9DAFF",200:"#A2CDFF",300:"#7AB8FF",400:"#2E90FF",500:"#0078FF",600:"#0063D1",700:"#0052AC",800:"#003C7E",900:"#002C5C"},whatsapp:{50:"#dffeec",100:"#b9f5d0",200:"#90edb3",300:"#65e495",400:"#3cdd78",500:"#22c35e",600:"#179848",700:"#0c6c33",800:"#01421c",900:"#001803"},twitter:{50:"#E5F4FD",100:"#C8E9FB",200:"#A8DCFA",300:"#83CDF7",400:"#57BBF5",500:"#1DA1F2",600:"#1A94DA",700:"#1681BF",800:"#136B9E",900:"#0D4D71"},telegram:{50:"#E3F2F9",100:"#C5E4F3",200:"#A2D4EC",300:"#7AC1E4",400:"#47A9DA",500:"#0088CC",600:"#007AB8",700:"#006BA1",800:"#005885",900:"#003F5E"}},Txe=Exe,Axe={none:"0",sm:"0.125rem",base:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},kxe=Axe,Pxe={xs:"0 0 0 1px rgba(0, 0, 0, 0.05)",sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",md:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",xl:"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)","2xl":"0 25px 50px -12px rgba(0, 0, 0, 0.25)",outline:"0 0 0 3px rgba(66, 153, 225, 0.6)",inner:"inset 0 2px 4px 0 rgba(0,0,0,0.06)",none:"none","dark-lg":"rgba(0, 0, 0, 0.1) 0px 0px 0px 1px, rgba(0, 0, 0, 0.2) 0px 5px 10px, rgba(0, 0, 0, 0.4) 0px 15px 40px"},Ixe=Pxe,Mxe={none:0,sm:"4px",base:"8px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},Rxe=Mxe,Oxe={letterSpacings:{tighter:"-0.05em",tight:"-0.025em",normal:"0",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeights:{normal:"normal",none:1,shorter:1.25,short:1.375,base:1.5,tall:1.625,taller:"2",3:".75rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem"},fontWeights:{hairline:100,thin:200,light:300,normal:400,medium:500,semibold:600,bold:700,extrabold:800,black:900},fonts:{heading:'-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',body:'-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',mono:'SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace'},fontSizes:{"3xs":"0.45rem","2xs":"0.625rem",xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem","7xl":"4.5rem","8xl":"6rem","9xl":"8rem"}},kV=Oxe,PV={px:"1px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem",12:"3rem",14:"3.5rem",16:"4rem",20:"5rem",24:"6rem",28:"7rem",32:"8rem",36:"9rem",40:"10rem",44:"11rem",48:"12rem",52:"13rem",56:"14rem",60:"15rem",64:"16rem",72:"18rem",80:"20rem",96:"24rem"},$xe={max:"max-content",min:"min-content",full:"100%","3xs":"14rem","2xs":"16rem",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem","8xl":"90rem",prose:"60ch"},Nxe={sm:"640px",md:"768px",lg:"1024px",xl:"1280px"},Fxe={...PV,...$xe,container:Nxe},IV=Fxe,Dxe={breakpoints:Cxe,zIndices:_xe,radii:kxe,blur:Rxe,colors:Txe,...kV,sizes:IV,shadows:Ixe,space:PV,borders:xxe,transition:vxe},{defineMultiStyleConfig:Lxe,definePartsStyle:Xh}=Be(["stepper","step","title","description","indicator","separator","icon","number"]),Hs=Ae("stepper-indicator-size"),ud=Ae("stepper-icon-size"),dd=Ae("stepper-title-font-size"),Qh=Ae("stepper-description-font-size"),Sh=Ae("stepper-accent-color"),Bxe=Xh(({colorScheme:e})=>({stepper:{display:"flex",justifyContent:"space-between",gap:"4","&[data-orientation=vertical]":{flexDirection:"column",alignItems:"flex-start"},"&[data-orientation=horizontal]":{flexDirection:"row",alignItems:"center"},[Sh.variable]:`colors.${e}.500`,_dark:{[Sh.variable]:`colors.${e}.200`}},title:{fontSize:dd.reference,fontWeight:"medium"},description:{fontSize:Qh.reference,color:"chakra-subtle-text"},number:{fontSize:dd.reference},step:{flexShrink:0,position:"relative",display:"flex",gap:"2","&[data-orientation=horizontal]":{alignItems:"center"},flex:"1","&:last-of-type:not([data-stretch])":{flex:"initial"}},icon:{flexShrink:0,width:ud.reference,height:ud.reference},indicator:{flexShrink:0,borderRadius:"full",width:Hs.reference,height:Hs.reference,display:"flex",justifyContent:"center",alignItems:"center","&[data-status=active]":{borderWidth:"2px",borderColor:Sh.reference},"&[data-status=complete]":{bg:Sh.reference,color:"chakra-inverse-text"},"&[data-status=incomplete]":{borderWidth:"2px"}},separator:{bg:"chakra-border-color",flex:"1","&[data-status=complete]":{bg:Sh.reference},"&[data-orientation=horizontal]":{width:"100%",height:"2px",marginStart:"2"},"&[data-orientation=vertical]":{width:"2px",position:"absolute",height:"100%",maxHeight:`calc(100% - ${Hs.reference} - 8px)`,top:`calc(${Hs.reference} + 4px)`,insetStart:`calc(${Hs.reference} / 2 - 1px)`}}})),zxe=Lxe({baseStyle:Bxe,sizes:{xs:Xh({stepper:{[Hs.variable]:"sizes.4",[ud.variable]:"sizes.3",[dd.variable]:"fontSizes.xs",[Qh.variable]:"fontSizes.xs"}}),sm:Xh({stepper:{[Hs.variable]:"sizes.6",[ud.variable]:"sizes.4",[dd.variable]:"fontSizes.sm",[Qh.variable]:"fontSizes.xs"}}),md:Xh({stepper:{[Hs.variable]:"sizes.8",[ud.variable]:"sizes.5",[dd.variable]:"fontSizes.md",[Qh.variable]:"fontSizes.sm"}}),lg:Xh({stepper:{[Hs.variable]:"sizes.10",[ud.variable]:"sizes.6",[dd.variable]:"fontSizes.lg",[Qh.variable]:"fontSizes.md"}})},defaultProps:{size:"md",colorScheme:"blue"}});function ht(e,t={}){let n=!1;function r(){if(!n){n=!0;return}throw new Error("[anatomy] .part(...) should only be called once. Did you mean to use .extend(...) ?")}function i(...u){r();for(const d of u)t[d]=l(d);return ht(e,t)}function o(...u){for(const d of u)d in t||(t[d]=l(d));return ht(e,t)}function s(){return Object.fromEntries(Object.entries(t).map(([d,f])=>[d,f.selector]))}function a(){return Object.fromEntries(Object.entries(t).map(([d,f])=>[d,f.className]))}function l(u){const h=`chakra-${(["container","root"].includes(u??"")?[e]:[e,u]).filter(Boolean).join("__")}`;return{className:h,selector:`.${h}`,toString:()=>u}}return{parts:i,toPart:l,extend:o,selectors:s,classnames:a,get keys(){return Object.keys(t)},__type:{}}}var MV=ht("accordion").parts("root","container","button","panel").extend("icon"),jxe=ht("alert").parts("title","description","container").extend("icon","spinner"),Vxe=ht("avatar").parts("label","badge","container").extend("excessLabel","group"),Uxe=ht("breadcrumb").parts("link","item","container").extend("separator");ht("button").parts();var RV=ht("checkbox").parts("control","icon","container").extend("label");ht("progress").parts("track","filledTrack").extend("label");var Gxe=ht("drawer").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),OV=ht("editable").parts("preview","input","textarea"),Hxe=ht("form").parts("container","requiredIndicator","helperText"),Wxe=ht("formError").parts("text","icon"),$V=ht("input").parts("addon","field","element","group"),qxe=ht("list").parts("container","item","icon"),NV=ht("menu").parts("button","list","item").extend("groupTitle","icon","command","divider"),FV=ht("modal").parts("overlay","dialogContainer","dialog").extend("header","closeButton","body","footer"),DV=ht("numberinput").parts("root","field","stepperGroup","stepper");ht("pininput").parts("field");var LV=ht("popover").parts("content","header","body","footer").extend("popper","arrow","closeButton"),BV=ht("progress").parts("label","filledTrack","track"),Kxe=ht("radio").parts("container","control","label"),zV=ht("select").parts("field","icon"),jV=ht("slider").parts("container","track","thumb","filledTrack","mark"),Xxe=ht("stat").parts("container","label","helpText","number","icon"),VV=ht("switch").parts("container","track","thumb","label"),Qxe=ht("table").parts("table","thead","tbody","tr","th","td","tfoot","caption"),UV=ht("tabs").parts("root","tab","tablist","tabpanel","tabpanels","indicator"),Yxe=ht("tag").parts("container","label","closeButton"),Zxe=ht("card").parts("container","header","body","footer");ht("stepper").parts("stepper","step","title","description","indicator","separator","icon","number");function Cc(e,t,n){return Math.min(Math.max(e,n),t)}class Jxe extends Error{constructor(t){super(`Failed to parse color: "${t}"`)}}var Yh=Jxe;function rA(e){if(typeof e!="string")throw new Yh(e);if(e.trim().toLowerCase()==="transparent")return[0,0,0,0];let t=e.trim();t=awe.test(e)?nwe(e):e;const n=rwe.exec(t);if(n){const s=Array.from(n).slice(1);return[...s.slice(0,3).map(a=>parseInt(Fg(a,2),16)),parseInt(Fg(s[3]||"f",2),16)/255]}const r=iwe.exec(t);if(r){const s=Array.from(r).slice(1);return[...s.slice(0,3).map(a=>parseInt(a,16)),parseInt(s[3]||"ff",16)/255]}const i=owe.exec(t);if(i){const s=Array.from(i).slice(1);return[...s.slice(0,3).map(a=>parseInt(a,10)),parseFloat(s[3]||"1")]}const o=swe.exec(t);if(o){const[s,a,l,c]=Array.from(o).slice(1).map(parseFloat);if(Cc(0,100,a)!==a)throw new Yh(e);if(Cc(0,100,l)!==l)throw new Yh(e);return[...lwe(s,a,l),Number.isNaN(c)?1:c]}throw new Yh(e)}function ewe(e){let t=5381,n=e.length;for(;n;)t=t*33^e.charCodeAt(--n);return(t>>>0)%2341}const bM=e=>parseInt(e.replace(/_/g,""),36),twe="1q29ehhb 1n09sgk7 1kl1ekf_ _yl4zsno 16z9eiv3 1p29lhp8 _bd9zg04 17u0____ _iw9zhe5 _to73___ _r45e31e _7l6g016 _jh8ouiv _zn3qba8 1jy4zshs 11u87k0u 1ro9yvyo 1aj3xael 1gz9zjz0 _3w8l4xo 1bf1ekf_ _ke3v___ _4rrkb__ 13j776yz _646mbhl _nrjr4__ _le6mbhl 1n37ehkb _m75f91n _qj3bzfz 1939yygw 11i5z6x8 _1k5f8xs 1509441m 15t5lwgf _ae2th1n _tg1ugcv 1lp1ugcv 16e14up_ _h55rw7n _ny9yavn _7a11xb_ 1ih442g9 _pv442g9 1mv16xof 14e6y7tu 1oo9zkds 17d1cisi _4v9y70f _y98m8kc 1019pq0v 12o9zda8 _348j4f4 1et50i2o _8epa8__ _ts6senj 1o350i2o 1mi9eiuo 1259yrp0 1ln80gnw _632xcoy 1cn9zldc _f29edu4 1n490c8q _9f9ziet 1b94vk74 _m49zkct 1kz6s73a 1eu9dtog _q58s1rz 1dy9sjiq __u89jo3 _aj5nkwg _ld89jo3 13h9z6wx _qa9z2ii _l119xgq _bs5arju 1hj4nwk9 1qt4nwk9 1ge6wau6 14j9zlcw 11p1edc_ _ms1zcxe _439shk6 _jt9y70f _754zsow 1la40eju _oq5p___ _x279qkz 1fa5r3rv _yd2d9ip _424tcku _8y1di2_ _zi2uabw _yy7rn9h 12yz980_ __39ljp6 1b59zg0x _n39zfzp 1fy9zest _b33k___ _hp9wq92 1il50hz4 _io472ub _lj9z3eo 19z9ykg0 _8t8iu3a 12b9bl4a 1ak5yw0o _896v4ku _tb8k8lv _s59zi6t _c09ze0p 1lg80oqn 1id9z8wb _238nba5 1kq6wgdi _154zssg _tn3zk49 _da9y6tc 1sg7cv4f _r12jvtt 1gq5fmkz 1cs9rvci _lp9jn1c _xw1tdnb 13f9zje6 16f6973h _vo7ir40 _bt5arjf _rc45e4t _hr4e100 10v4e100 _hc9zke2 _w91egv_ _sj2r1kk 13c87yx8 _vqpds__ _ni8ggk8 _tj9yqfb 1ia2j4r4 _7x9b10u 1fc9ld4j 1eq9zldr _5j9lhpx _ez9zl6o _md61fzm".split(" ").reduce((e,t)=>{const n=bM(t.substring(0,3)),r=bM(t.substring(3)).toString(16);let i="";for(let o=0;o<6-r.length;o++)i+="0";return e[n]=`${i}${r}`,e},{});function nwe(e){const t=e.toLowerCase().trim(),n=twe[ewe(t)];if(!n)throw new Yh(e);return`#${n}`}const Fg=(e,t)=>Array.from(Array(t)).map(()=>e).join(""),rwe=new RegExp(`^#${Fg("([a-f0-9])",3)}([a-f0-9])?$`,"i"),iwe=new RegExp(`^#${Fg("([a-f0-9]{2})",3)}([a-f0-9]{2})?$`,"i"),owe=new RegExp(`^rgba?\\(\\s*(\\d+)\\s*${Fg(",\\s*(\\d+)\\s*",2)}(?:,\\s*([\\d.]+))?\\s*\\)$`,"i"),swe=/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i,awe=/^[a-z]+$/i,_M=e=>Math.round(e*255),lwe=(e,t,n)=>{let r=n/100;if(t===0)return[r,r,r].map(_M);const i=(e%360+360)%360/60,o=(1-Math.abs(2*r-1))*(t/100),s=o*(1-Math.abs(i%2-1));let a=0,l=0,c=0;i>=0&&i<1?(a=o,l=s):i>=1&&i<2?(a=s,l=o):i>=2&&i<3?(l=o,c=s):i>=3&&i<4?(l=s,c=o):i>=4&&i<5?(a=s,c=o):i>=5&&i<6&&(a=o,c=s);const u=r-o/2,d=a+u,f=l+u,h=c+u;return[d,f,h].map(_M)};function cwe(e,t,n,r){return`rgba(${Cc(0,255,e).toFixed()}, ${Cc(0,255,t).toFixed()}, ${Cc(0,255,n).toFixed()}, ${parseFloat(Cc(0,1,r).toFixed(3))})`}function uwe(e,t){const[n,r,i,o]=rA(e);return cwe(n,r,i,o-t)}function dwe(e){const[t,n,r,i]=rA(e);let o=s=>{const a=Cc(0,255,s).toString(16);return a.length===1?`0${a}`:a};return`#${o(t)}${o(n)}${o(r)}${i<1?o(Math.round(i*255)):""}`}function fwe(e,t,n,r,i){for(t=t.split?t.split("."):t,r=0;rObject.keys(e).length===0,$r=(e,t,n)=>{const r=fwe(e,`colors.${t}`,t);try{return dwe(r),r}catch{return n??"#000000"}},pwe=e=>{const[t,n,r]=rA(e);return(t*299+n*587+r*114)/1e3},gwe=e=>t=>{const n=$r(t,e);return pwe(n)<128?"dark":"light"},mwe=e=>t=>gwe(e)(t)==="dark",vf=(e,t)=>n=>{const r=$r(n,e);return uwe(r,1-t)};function SM(e="1rem",t="rgba(255, 255, 255, 0.15)"){return{backgroundImage:`linear-gradient( + 45deg, + ${t} 25%, + transparent 25%, + transparent 50%, + ${t} 50%, + ${t} 75%, + transparent 75%, + transparent + )`,backgroundSize:`${e} ${e}`}}var ywe=()=>`#${Math.floor(Math.random()*16777215).toString(16).padEnd(6,"0")}`;function vwe(e){const t=ywe();return!e||hwe(e)?t:e.string&&e.colors?_we(e.string,e.colors):e.string&&!e.colors?bwe(e.string):e.colors&&!e.string?Swe(e.colors):t}function bwe(e){let t=0;if(e.length===0)return t.toString();for(let r=0;r>r*8&255;n+=`00${i.toString(16)}`.substr(-2)}return n}function _we(e,t){let n=0;if(e.length===0)return t[0];for(let r=0;rn.colorMode==="dark"?t:e}function iA(e){const{orientation:t,vertical:n,horizontal:r}=e;return t?t==="vertical"?n:r:{}}function GV(e){return ys(e)&&e.reference?e.reference:String(e)}var kS=(e,...t)=>t.map(GV).join(` ${e} `).replace(/calc/g,""),xM=(...e)=>`calc(${kS("+",...e)})`,wM=(...e)=>`calc(${kS("-",...e)})`,k3=(...e)=>`calc(${kS("*",...e)})`,CM=(...e)=>`calc(${kS("/",...e)})`,EM=e=>{const t=GV(e);return t!=null&&!Number.isNaN(parseFloat(t))?String(t).startsWith("-")?String(t).slice(1):`-${t}`:k3(t,-1)},Ws=Object.assign(e=>({add:(...t)=>Ws(xM(e,...t)),subtract:(...t)=>Ws(wM(e,...t)),multiply:(...t)=>Ws(k3(e,...t)),divide:(...t)=>Ws(CM(e,...t)),negate:()=>Ws(EM(e)),toString:()=>e.toString()}),{add:xM,subtract:wM,multiply:k3,divide:CM,negate:EM});function xwe(e){return!Number.isInteger(parseFloat(e.toString()))}function wwe(e,t="-"){return e.replace(/\s+/g,t)}function HV(e){const t=wwe(e.toString());return t.includes("\\.")?e:xwe(e)?t.replace(".","\\."):e}function Cwe(e,t=""){return[t,HV(e)].filter(Boolean).join("-")}function Ewe(e,t){return`var(${HV(e)}${t?`, ${t}`:""})`}function Twe(e,t=""){return`--${Cwe(e,t)}`}function Xt(e,t){const n=Twe(e,t==null?void 0:t.prefix);return{variable:n,reference:Ewe(n,Awe(t==null?void 0:t.fallback))}}function Awe(e){return typeof e=="string"?e:e==null?void 0:e.reference}var{defineMultiStyleConfig:kwe,definePartsStyle:uv}=Be(VV.keys),_p=Xt("switch-track-width"),Dc=Xt("switch-track-height"),ww=Xt("switch-track-diff"),Pwe=Ws.subtract(_p,Dc),P3=Xt("switch-thumb-x"),xh=Xt("switch-bg"),Iwe=e=>{const{colorScheme:t}=e;return{borderRadius:"full",p:"0.5",width:[_p.reference],height:[Dc.reference],transitionProperty:"common",transitionDuration:"fast",[xh.variable]:"colors.gray.300",_dark:{[xh.variable]:"colors.whiteAlpha.400"},_focusVisible:{boxShadow:"outline"},_disabled:{opacity:.4,cursor:"not-allowed"},_checked:{[xh.variable]:`colors.${t}.500`,_dark:{[xh.variable]:`colors.${t}.200`}},bg:xh.reference}},Mwe={bg:"white",transitionProperty:"transform",transitionDuration:"normal",borderRadius:"inherit",width:[Dc.reference],height:[Dc.reference],_checked:{transform:`translateX(${P3.reference})`}},Rwe=uv(e=>({container:{[ww.variable]:Pwe,[P3.variable]:ww.reference,_rtl:{[P3.variable]:Ws(ww).negate().toString()}},track:Iwe(e),thumb:Mwe})),Owe={sm:uv({container:{[_p.variable]:"1.375rem",[Dc.variable]:"sizes.3"}}),md:uv({container:{[_p.variable]:"1.875rem",[Dc.variable]:"sizes.4"}}),lg:uv({container:{[_p.variable]:"2.875rem",[Dc.variable]:"sizes.6"}})},$we=kwe({baseStyle:Rwe,sizes:Owe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:Nwe,definePartsStyle:zd}=Be(Qxe.keys),Fwe=zd({table:{fontVariantNumeric:"lining-nums tabular-nums",borderCollapse:"collapse",width:"full"},th:{fontFamily:"heading",fontWeight:"bold",textTransform:"uppercase",letterSpacing:"wider",textAlign:"start"},td:{textAlign:"start"},caption:{mt:4,fontFamily:"heading",textAlign:"center",fontWeight:"medium"}}),G1={"&[data-is-numeric=true]":{textAlign:"end"}},Dwe=zd(e=>{const{colorScheme:t}=e;return{th:{color:W("gray.600","gray.400")(e),borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},td:{borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},caption:{color:W("gray.600","gray.100")(e)},tfoot:{tr:{"&:last-of-type":{th:{borderBottomWidth:0}}}}}}),Lwe=zd(e=>{const{colorScheme:t}=e;return{th:{color:W("gray.600","gray.400")(e),borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},td:{borderBottom:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e),...G1},caption:{color:W("gray.600","gray.100")(e)},tbody:{tr:{"&:nth-of-type(odd)":{"th, td":{borderBottomWidth:"1px",borderColor:W(`${t}.100`,`${t}.700`)(e)},td:{background:W(`${t}.100`,`${t}.700`)(e)}}}},tfoot:{tr:{"&:last-of-type":{th:{borderBottomWidth:0}}}}}}),Bwe={simple:Dwe,striped:Lwe,unstyled:{}},zwe={sm:zd({th:{px:"4",py:"1",lineHeight:"4",fontSize:"xs"},td:{px:"4",py:"2",fontSize:"sm",lineHeight:"4"},caption:{px:"4",py:"2",fontSize:"xs"}}),md:zd({th:{px:"6",py:"3",lineHeight:"4",fontSize:"xs"},td:{px:"6",py:"4",lineHeight:"5"},caption:{px:"6",py:"2",fontSize:"sm"}}),lg:zd({th:{px:"8",py:"4",lineHeight:"5",fontSize:"sm"},td:{px:"8",py:"5",lineHeight:"6"},caption:{px:"6",py:"2",fontSize:"md"}})},jwe=Nwe({baseStyle:Fwe,variants:Bwe,sizes:zwe,defaultProps:{variant:"simple",size:"md",colorScheme:"gray"}}),Kr=Ae("tabs-color"),Co=Ae("tabs-bg"),sy=Ae("tabs-border-color"),{defineMultiStyleConfig:Vwe,definePartsStyle:vs}=Be(UV.keys),Uwe=e=>{const{orientation:t}=e;return{display:t==="vertical"?"flex":"block"}},Gwe=e=>{const{isFitted:t}=e;return{flex:t?1:void 0,transitionProperty:"common",transitionDuration:"normal",_focusVisible:{zIndex:1,boxShadow:"outline"},_disabled:{cursor:"not-allowed",opacity:.4}}},Hwe=e=>{const{align:t="start",orientation:n}=e;return{justifyContent:{end:"flex-end",center:"center",start:"flex-start"}[t],flexDirection:n==="vertical"?"column":"row"}},Wwe={p:4},qwe=vs(e=>({root:Uwe(e),tab:Gwe(e),tablist:Hwe(e),tabpanel:Wwe})),Kwe={sm:vs({tab:{py:1,px:4,fontSize:"sm"}}),md:vs({tab:{fontSize:"md",py:2,px:4}}),lg:vs({tab:{fontSize:"lg",py:3,px:4}})},Xwe=vs(e=>{const{colorScheme:t,orientation:n}=e,r=n==="vertical",i=r?"borderStart":"borderBottom",o=r?"marginStart":"marginBottom";return{tablist:{[i]:"2px solid",borderColor:"inherit"},tab:{[i]:"2px solid",borderColor:"transparent",[o]:"-2px",_selected:{[Kr.variable]:`colors.${t}.600`,_dark:{[Kr.variable]:`colors.${t}.300`},borderColor:"currentColor"},_active:{[Co.variable]:"colors.gray.200",_dark:{[Co.variable]:"colors.whiteAlpha.300"}},_disabled:{_active:{bg:"none"}},color:Kr.reference,bg:Co.reference}}}),Qwe=vs(e=>{const{colorScheme:t}=e;return{tab:{borderTopRadius:"md",border:"1px solid",borderColor:"transparent",mb:"-1px",[sy.variable]:"transparent",_selected:{[Kr.variable]:`colors.${t}.600`,[sy.variable]:"colors.white",_dark:{[Kr.variable]:`colors.${t}.300`,[sy.variable]:"colors.gray.800"},borderColor:"inherit",borderBottomColor:sy.reference},color:Kr.reference},tablist:{mb:"-1px",borderBottom:"1px solid",borderColor:"inherit"}}}),Ywe=vs(e=>{const{colorScheme:t}=e;return{tab:{border:"1px solid",borderColor:"inherit",[Co.variable]:"colors.gray.50",_dark:{[Co.variable]:"colors.whiteAlpha.50"},mb:"-1px",_notLast:{marginEnd:"-1px"},_selected:{[Co.variable]:"colors.white",[Kr.variable]:`colors.${t}.600`,_dark:{[Co.variable]:"colors.gray.800",[Kr.variable]:`colors.${t}.300`},borderColor:"inherit",borderTopColor:"currentColor",borderBottomColor:"transparent"},color:Kr.reference,bg:Co.reference},tablist:{mb:"-1px",borderBottom:"1px solid",borderColor:"inherit"}}}),Zwe=vs(e=>{const{colorScheme:t,theme:n}=e;return{tab:{borderRadius:"full",fontWeight:"semibold",color:"gray.600",_selected:{color:$r(n,`${t}.700`),bg:$r(n,`${t}.100`)}}}}),Jwe=vs(e=>{const{colorScheme:t}=e;return{tab:{borderRadius:"full",fontWeight:"semibold",[Kr.variable]:"colors.gray.600",_dark:{[Kr.variable]:"inherit"},_selected:{[Kr.variable]:"colors.white",[Co.variable]:`colors.${t}.600`,_dark:{[Kr.variable]:"colors.gray.800",[Co.variable]:`colors.${t}.300`}},color:Kr.reference,bg:Co.reference}}}),eCe=vs({}),tCe={line:Xwe,enclosed:Qwe,"enclosed-colored":Ywe,"soft-rounded":Zwe,"solid-rounded":Jwe,unstyled:eCe},nCe=Vwe({baseStyle:qwe,sizes:Kwe,variants:tCe,defaultProps:{size:"md",variant:"line",colorScheme:"blue"}}),un=L2e("badge",["bg","color","shadow"]),rCe={px:1,textTransform:"uppercase",fontSize:"xs",borderRadius:"sm",fontWeight:"bold",bg:un.bg.reference,color:un.color.reference,boxShadow:un.shadow.reference},iCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.500`,.6)(n);return{[un.bg.variable]:`colors.${t}.500`,[un.color.variable]:"colors.white",_dark:{[un.bg.variable]:r,[un.color.variable]:"colors.whiteAlpha.800"}}},oCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.200`,.16)(n);return{[un.bg.variable]:`colors.${t}.100`,[un.color.variable]:`colors.${t}.800`,_dark:{[un.bg.variable]:r,[un.color.variable]:`colors.${t}.200`}}},sCe=e=>{const{colorScheme:t,theme:n}=e,r=vf(`${t}.200`,.8)(n);return{[un.color.variable]:`colors.${t}.500`,_dark:{[un.color.variable]:r},[un.shadow.variable]:`inset 0 0 0px 1px ${un.color.reference}`}},aCe={solid:iCe,subtle:oCe,outline:sCe},Sp={baseStyle:rCe,variants:aCe,defaultProps:{variant:"subtle",colorScheme:"gray"}},{defineMultiStyleConfig:lCe,definePartsStyle:Lc}=Be(Yxe.keys),TM=Ae("tag-bg"),AM=Ae("tag-color"),Cw=Ae("tag-shadow"),dv=Ae("tag-min-height"),fv=Ae("tag-min-width"),hv=Ae("tag-font-size"),pv=Ae("tag-padding-inline"),cCe={fontWeight:"medium",lineHeight:1.2,outline:0,[AM.variable]:un.color.reference,[TM.variable]:un.bg.reference,[Cw.variable]:un.shadow.reference,color:AM.reference,bg:TM.reference,boxShadow:Cw.reference,borderRadius:"md",minH:dv.reference,minW:fv.reference,fontSize:hv.reference,px:pv.reference,_focusVisible:{[Cw.variable]:"shadows.outline"}},uCe={lineHeight:1.2,overflow:"visible"},dCe={fontSize:"lg",w:"5",h:"5",transitionProperty:"common",transitionDuration:"normal",borderRadius:"full",marginStart:"1.5",marginEnd:"-1",opacity:.5,_disabled:{opacity:.4},_focusVisible:{boxShadow:"outline",bg:"rgba(0, 0, 0, 0.14)"},_hover:{opacity:.8},_active:{opacity:1}},fCe=Lc({container:cCe,label:uCe,closeButton:dCe}),hCe={sm:Lc({container:{[dv.variable]:"sizes.5",[fv.variable]:"sizes.5",[hv.variable]:"fontSizes.xs",[pv.variable]:"space.2"},closeButton:{marginEnd:"-2px",marginStart:"0.35rem"}}),md:Lc({container:{[dv.variable]:"sizes.6",[fv.variable]:"sizes.6",[hv.variable]:"fontSizes.sm",[pv.variable]:"space.2"}}),lg:Lc({container:{[dv.variable]:"sizes.8",[fv.variable]:"sizes.8",[hv.variable]:"fontSizes.md",[pv.variable]:"space.3"}})},pCe={subtle:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.subtle(e)}}),solid:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.solid(e)}}),outline:Lc(e=>{var t;return{container:(t=Sp.variants)==null?void 0:t.outline(e)}})},gCe=lCe({variants:pCe,baseStyle:fCe,sizes:hCe,defaultProps:{size:"md",variant:"subtle",colorScheme:"gray"}}),{definePartsStyle:Qs,defineMultiStyleConfig:mCe}=Be($V.keys),fd=Ae("input-height"),hd=Ae("input-font-size"),pd=Ae("input-padding"),gd=Ae("input-border-radius"),yCe=Qs({addon:{height:fd.reference,fontSize:hd.reference,px:pd.reference,borderRadius:gd.reference},field:{width:"100%",height:fd.reference,fontSize:hd.reference,px:pd.reference,borderRadius:gd.reference,minWidth:0,outline:0,position:"relative",appearance:"none",transitionProperty:"common",transitionDuration:"normal",_disabled:{opacity:.4,cursor:"not-allowed"}}}),Ma={lg:{[hd.variable]:"fontSizes.lg",[pd.variable]:"space.4",[gd.variable]:"radii.md",[fd.variable]:"sizes.12"},md:{[hd.variable]:"fontSizes.md",[pd.variable]:"space.4",[gd.variable]:"radii.md",[fd.variable]:"sizes.10"},sm:{[hd.variable]:"fontSizes.sm",[pd.variable]:"space.3",[gd.variable]:"radii.sm",[fd.variable]:"sizes.8"},xs:{[hd.variable]:"fontSizes.xs",[pd.variable]:"space.2",[gd.variable]:"radii.sm",[fd.variable]:"sizes.6"}},vCe={lg:Qs({field:Ma.lg,group:Ma.lg}),md:Qs({field:Ma.md,group:Ma.md}),sm:Qs({field:Ma.sm,group:Ma.sm}),xs:Qs({field:Ma.xs,group:Ma.xs})};function oA(e){const{focusBorderColor:t,errorBorderColor:n}=e;return{focusBorderColor:t||W("blue.500","blue.300")(e),errorBorderColor:n||W("red.500","red.300")(e)}}var bCe=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{border:"1px solid",borderColor:"inherit",bg:"inherit",_hover:{borderColor:W("gray.300","whiteAlpha.400")(e)},_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r),boxShadow:`0 0 0 1px ${$r(t,r)}`},_focusVisible:{zIndex:1,borderColor:$r(t,n),boxShadow:`0 0 0 1px ${$r(t,n)}`}},addon:{border:"1px solid",borderColor:W("inherit","whiteAlpha.50")(e),bg:W("gray.100","whiteAlpha.300")(e)}}}),_Ce=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{border:"2px solid",borderColor:"transparent",bg:W("gray.100","whiteAlpha.50")(e),_hover:{bg:W("gray.200","whiteAlpha.100")(e)},_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r)},_focusVisible:{bg:"transparent",borderColor:$r(t,n)}},addon:{border:"2px solid",borderColor:"transparent",bg:W("gray.100","whiteAlpha.50")(e)}}}),SCe=Qs(e=>{const{theme:t}=e,{focusBorderColor:n,errorBorderColor:r}=oA(e);return{field:{borderBottom:"1px solid",borderColor:"inherit",borderRadius:"0",px:"0",bg:"transparent",_readOnly:{boxShadow:"none !important",userSelect:"all"},_invalid:{borderColor:$r(t,r),boxShadow:`0px 1px 0px 0px ${$r(t,r)}`},_focusVisible:{borderColor:$r(t,n),boxShadow:`0px 1px 0px 0px ${$r(t,n)}`}},addon:{borderBottom:"2px solid",borderColor:"inherit",borderRadius:"0",px:"0",bg:"transparent"}}}),xCe=Qs({field:{bg:"transparent",px:"0",height:"auto"},addon:{bg:"transparent",px:"0",height:"auto"}}),wCe={outline:bCe,filled:_Ce,flushed:SCe,unstyled:xCe},ft=mCe({baseStyle:yCe,sizes:vCe,variants:wCe,defaultProps:{size:"md",variant:"outline"}}),kM,CCe={...(kM=ft.baseStyle)==null?void 0:kM.field,paddingY:"2",minHeight:"20",lineHeight:"short",verticalAlign:"top"},PM,IM,ECe={outline:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.outline(e).field)!=null?n:{}},flushed:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.flushed(e).field)!=null?n:{}},filled:e=>{var t,n;return(n=(t=ft.variants)==null?void 0:t.filled(e).field)!=null?n:{}},unstyled:(IM=(PM=ft.variants)==null?void 0:PM.unstyled.field)!=null?IM:{}},MM,RM,OM,$M,NM,FM,DM,LM,TCe={xs:(RM=(MM=ft.sizes)==null?void 0:MM.xs.field)!=null?RM:{},sm:($M=(OM=ft.sizes)==null?void 0:OM.sm.field)!=null?$M:{},md:(FM=(NM=ft.sizes)==null?void 0:NM.md.field)!=null?FM:{},lg:(LM=(DM=ft.sizes)==null?void 0:DM.lg.field)!=null?LM:{}},ACe={baseStyle:CCe,sizes:TCe,variants:ECe,defaultProps:{size:"md",variant:"outline"}},ay=Xt("tooltip-bg"),Ew=Xt("tooltip-fg"),kCe=Xt("popper-arrow-bg"),PCe={bg:ay.reference,color:Ew.reference,[ay.variable]:"colors.gray.700",[Ew.variable]:"colors.whiteAlpha.900",_dark:{[ay.variable]:"colors.gray.300",[Ew.variable]:"colors.gray.900"},[kCe.variable]:ay.reference,px:"2",py:"0.5",borderRadius:"sm",fontWeight:"medium",fontSize:"sm",boxShadow:"md",maxW:"xs",zIndex:"tooltip"},ICe={baseStyle:PCe},{defineMultiStyleConfig:MCe,definePartsStyle:Zh}=Be(BV.keys),RCe=e=>{const{colorScheme:t,theme:n,isIndeterminate:r,hasStripe:i}=e,o=W(SM(),SM("1rem","rgba(0,0,0,0.1)"))(e),s=W(`${t}.500`,`${t}.200`)(e),a=`linear-gradient( + to right, + transparent 0%, + ${$r(n,s)} 50%, + transparent 100% + )`;return{...!r&&i&&o,...r?{bgImage:a}:{bgColor:s}}},OCe={lineHeight:"1",fontSize:"0.25em",fontWeight:"bold",color:"white"},$Ce=e=>({bg:W("gray.100","whiteAlpha.300")(e)}),NCe=e=>({transitionProperty:"common",transitionDuration:"slow",...RCe(e)}),FCe=Zh(e=>({label:OCe,filledTrack:NCe(e),track:$Ce(e)})),DCe={xs:Zh({track:{h:"1"}}),sm:Zh({track:{h:"2"}}),md:Zh({track:{h:"3"}}),lg:Zh({track:{h:"4"}})},LCe=MCe({sizes:DCe,baseStyle:FCe,defaultProps:{size:"md",colorScheme:"blue"}}),BCe=e=>typeof e=="function";function Fr(e,...t){return BCe(e)?e(...t):e}var{definePartsStyle:gv,defineMultiStyleConfig:zCe}=Be(RV.keys),xp=Ae("checkbox-size"),jCe=e=>{const{colorScheme:t}=e;return{w:xp.reference,h:xp.reference,transitionProperty:"box-shadow",transitionDuration:"normal",border:"2px solid",borderRadius:"sm",borderColor:"inherit",color:"white",_checked:{bg:W(`${t}.500`,`${t}.200`)(e),borderColor:W(`${t}.500`,`${t}.200`)(e),color:W("white","gray.900")(e),_hover:{bg:W(`${t}.600`,`${t}.300`)(e),borderColor:W(`${t}.600`,`${t}.300`)(e)},_disabled:{borderColor:W("gray.200","transparent")(e),bg:W("gray.200","whiteAlpha.300")(e),color:W("gray.500","whiteAlpha.500")(e)}},_indeterminate:{bg:W(`${t}.500`,`${t}.200`)(e),borderColor:W(`${t}.500`,`${t}.200`)(e),color:W("white","gray.900")(e)},_disabled:{bg:W("gray.100","whiteAlpha.100")(e),borderColor:W("gray.100","transparent")(e)},_focusVisible:{boxShadow:"outline"},_invalid:{borderColor:W("red.500","red.300")(e)}}},VCe={_disabled:{cursor:"not-allowed"}},UCe={userSelect:"none",_disabled:{opacity:.4}},GCe={transitionProperty:"transform",transitionDuration:"normal"},HCe=gv(e=>({icon:GCe,container:VCe,control:Fr(jCe,e),label:UCe})),WCe={sm:gv({control:{[xp.variable]:"sizes.3"},label:{fontSize:"sm"},icon:{fontSize:"3xs"}}),md:gv({control:{[xp.variable]:"sizes.4"},label:{fontSize:"md"},icon:{fontSize:"2xs"}}),lg:gv({control:{[xp.variable]:"sizes.5"},label:{fontSize:"lg"},icon:{fontSize:"2xs"}})},H1=zCe({baseStyle:HCe,sizes:WCe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:qCe,definePartsStyle:mv}=Be(Kxe.keys),KCe=e=>{var t;const n=(t=Fr(H1.baseStyle,e))==null?void 0:t.control;return{...n,borderRadius:"full",_checked:{...n==null?void 0:n._checked,_before:{content:'""',display:"inline-block",pos:"relative",w:"50%",h:"50%",borderRadius:"50%",bg:"currentColor"}}}},XCe=mv(e=>{var t,n,r,i;return{label:(n=(t=H1).baseStyle)==null?void 0:n.call(t,e).label,container:(i=(r=H1).baseStyle)==null?void 0:i.call(r,e).container,control:KCe(e)}}),QCe={md:mv({control:{w:"4",h:"4"},label:{fontSize:"md"}}),lg:mv({control:{w:"5",h:"5"},label:{fontSize:"lg"}}),sm:mv({control:{width:"3",height:"3"},label:{fontSize:"sm"}})},YCe=qCe({baseStyle:XCe,sizes:QCe,defaultProps:{size:"md",colorScheme:"blue"}}),{defineMultiStyleConfig:ZCe,definePartsStyle:JCe}=Be(zV.keys),ly=Ae("select-bg"),BM,e5e={...(BM=ft.baseStyle)==null?void 0:BM.field,appearance:"none",paddingBottom:"1px",lineHeight:"normal",bg:ly.reference,[ly.variable]:"colors.white",_dark:{[ly.variable]:"colors.gray.700"},"> option, > optgroup":{bg:ly.reference}},t5e={width:"6",height:"100%",insetEnd:"2",position:"relative",color:"currentColor",fontSize:"xl",_disabled:{opacity:.5}},n5e=JCe({field:e5e,icon:t5e}),cy={paddingInlineEnd:"8"},zM,jM,VM,UM,GM,HM,WM,qM,r5e={lg:{...(zM=ft.sizes)==null?void 0:zM.lg,field:{...(jM=ft.sizes)==null?void 0:jM.lg.field,...cy}},md:{...(VM=ft.sizes)==null?void 0:VM.md,field:{...(UM=ft.sizes)==null?void 0:UM.md.field,...cy}},sm:{...(GM=ft.sizes)==null?void 0:GM.sm,field:{...(HM=ft.sizes)==null?void 0:HM.sm.field,...cy}},xs:{...(WM=ft.sizes)==null?void 0:WM.xs,field:{...(qM=ft.sizes)==null?void 0:qM.xs.field,...cy},icon:{insetEnd:"1"}}},i5e=ZCe({baseStyle:n5e,sizes:r5e,variants:ft.variants,defaultProps:ft.defaultProps}),Tw=Ae("skeleton-start-color"),Aw=Ae("skeleton-end-color"),o5e={[Tw.variable]:"colors.gray.100",[Aw.variable]:"colors.gray.400",_dark:{[Tw.variable]:"colors.gray.800",[Aw.variable]:"colors.gray.600"},background:Tw.reference,borderColor:Aw.reference,opacity:.7,borderRadius:"sm"},s5e={baseStyle:o5e},kw=Ae("skip-link-bg"),a5e={borderRadius:"md",fontWeight:"semibold",_focusVisible:{boxShadow:"outline",padding:"4",position:"fixed",top:"6",insetStart:"6",[kw.variable]:"colors.white",_dark:{[kw.variable]:"colors.gray.700"},bg:kw.reference}},l5e={baseStyle:a5e},{defineMultiStyleConfig:c5e,definePartsStyle:PS}=Be(jV.keys),Dg=Ae("slider-thumb-size"),Lg=Ae("slider-track-size"),Ka=Ae("slider-bg"),u5e=e=>{const{orientation:t}=e;return{display:"inline-block",position:"relative",cursor:"pointer",_disabled:{opacity:.6,cursor:"default",pointerEvents:"none"},...iA({orientation:t,vertical:{h:"100%"},horizontal:{w:"100%"}})}},d5e=e=>({...iA({orientation:e.orientation,horizontal:{h:Lg.reference},vertical:{w:Lg.reference}}),overflow:"hidden",borderRadius:"sm",[Ka.variable]:"colors.gray.200",_dark:{[Ka.variable]:"colors.whiteAlpha.200"},_disabled:{[Ka.variable]:"colors.gray.300",_dark:{[Ka.variable]:"colors.whiteAlpha.300"}},bg:Ka.reference}),f5e=e=>{const{orientation:t}=e;return{...iA({orientation:t,vertical:{left:"50%",transform:"translateX(-50%)",_active:{transform:"translateX(-50%) scale(1.15)"}},horizontal:{top:"50%",transform:"translateY(-50%)",_active:{transform:"translateY(-50%) scale(1.15)"}}}),w:Dg.reference,h:Dg.reference,display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",outline:0,zIndex:1,borderRadius:"full",bg:"white",boxShadow:"base",border:"1px solid",borderColor:"transparent",transitionProperty:"transform",transitionDuration:"normal",_focusVisible:{boxShadow:"outline"},_disabled:{bg:"gray.300"}}},h5e=e=>{const{colorScheme:t}=e;return{width:"inherit",height:"inherit",[Ka.variable]:`colors.${t}.500`,_dark:{[Ka.variable]:`colors.${t}.200`},bg:Ka.reference}},p5e=PS(e=>({container:u5e(e),track:d5e(e),thumb:f5e(e),filledTrack:h5e(e)})),g5e=PS({container:{[Dg.variable]:"sizes.4",[Lg.variable]:"sizes.1"}}),m5e=PS({container:{[Dg.variable]:"sizes.3.5",[Lg.variable]:"sizes.1"}}),y5e=PS({container:{[Dg.variable]:"sizes.2.5",[Lg.variable]:"sizes.0.5"}}),v5e={lg:g5e,md:m5e,sm:y5e},b5e=c5e({baseStyle:p5e,sizes:v5e,defaultProps:{size:"md",colorScheme:"blue"}}),yc=Xt("spinner-size"),_5e={width:[yc.reference],height:[yc.reference]},S5e={xs:{[yc.variable]:"sizes.3"},sm:{[yc.variable]:"sizes.4"},md:{[yc.variable]:"sizes.6"},lg:{[yc.variable]:"sizes.8"},xl:{[yc.variable]:"sizes.12"}},x5e={baseStyle:_5e,sizes:S5e,defaultProps:{size:"md"}},{defineMultiStyleConfig:w5e,definePartsStyle:WV}=Be(Xxe.keys),C5e={fontWeight:"medium"},E5e={opacity:.8,marginBottom:"2"},T5e={verticalAlign:"baseline",fontWeight:"semibold"},A5e={marginEnd:1,w:"3.5",h:"3.5",verticalAlign:"middle"},k5e=WV({container:{},label:C5e,helpText:E5e,number:T5e,icon:A5e}),P5e={md:WV({label:{fontSize:"sm"},helpText:{fontSize:"sm"},number:{fontSize:"2xl"}})},I5e=w5e({baseStyle:k5e,sizes:P5e,defaultProps:{size:"md"}}),Pw=Ae("kbd-bg"),M5e={[Pw.variable]:"colors.gray.100",_dark:{[Pw.variable]:"colors.whiteAlpha.100"},bg:Pw.reference,borderRadius:"md",borderWidth:"1px",borderBottomWidth:"3px",fontSize:"0.8em",fontWeight:"bold",lineHeight:"normal",px:"0.4em",whiteSpace:"nowrap"},R5e={baseStyle:M5e},O5e={transitionProperty:"common",transitionDuration:"fast",transitionTimingFunction:"ease-out",cursor:"pointer",textDecoration:"none",outline:"none",color:"inherit",_hover:{textDecoration:"underline"},_focusVisible:{boxShadow:"outline"}},$5e={baseStyle:O5e},{defineMultiStyleConfig:N5e,definePartsStyle:F5e}=Be(qxe.keys),D5e={marginEnd:"2",display:"inline",verticalAlign:"text-bottom"},L5e=F5e({icon:D5e}),B5e=N5e({baseStyle:L5e}),{defineMultiStyleConfig:z5e,definePartsStyle:j5e}=Be(NV.keys),es=Ae("menu-bg"),Iw=Ae("menu-shadow"),V5e={[es.variable]:"#fff",[Iw.variable]:"shadows.sm",_dark:{[es.variable]:"colors.gray.700",[Iw.variable]:"shadows.dark-lg"},color:"inherit",minW:"3xs",py:"2",zIndex:1,borderRadius:"md",borderWidth:"1px",bg:es.reference,boxShadow:Iw.reference},U5e={py:"1.5",px:"3",transitionProperty:"background",transitionDuration:"ultra-fast",transitionTimingFunction:"ease-in",_focus:{[es.variable]:"colors.gray.100",_dark:{[es.variable]:"colors.whiteAlpha.100"}},_active:{[es.variable]:"colors.gray.200",_dark:{[es.variable]:"colors.whiteAlpha.200"}},_expanded:{[es.variable]:"colors.gray.100",_dark:{[es.variable]:"colors.whiteAlpha.100"}},_disabled:{opacity:.4,cursor:"not-allowed"},bg:es.reference},G5e={mx:4,my:2,fontWeight:"semibold",fontSize:"sm"},H5e={display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},W5e={opacity:.6},q5e={border:0,borderBottom:"1px solid",borderColor:"inherit",my:"2",opacity:.6},K5e={transitionProperty:"common",transitionDuration:"normal"},X5e=j5e({button:K5e,list:V5e,item:U5e,groupTitle:G5e,icon:H5e,command:W5e,divider:q5e}),Q5e=z5e({baseStyle:X5e}),{defineMultiStyleConfig:Y5e,definePartsStyle:I3}=Be(FV.keys),Mw=Ae("modal-bg"),Rw=Ae("modal-shadow"),Z5e={bg:"blackAlpha.600",zIndex:"modal"},J5e=e=>{const{isCentered:t,scrollBehavior:n}=e;return{display:"flex",zIndex:"modal",justifyContent:"center",alignItems:t?"center":"flex-start",overflow:n==="inside"?"hidden":"auto",overscrollBehaviorY:"none"}},e3e=e=>{const{isCentered:t,scrollBehavior:n}=e;return{borderRadius:"md",color:"inherit",my:t?"auto":"16",mx:t?"auto":void 0,zIndex:"modal",maxH:n==="inside"?"calc(100% - 7.5rem)":void 0,[Mw.variable]:"colors.white",[Rw.variable]:"shadows.lg",_dark:{[Mw.variable]:"colors.gray.700",[Rw.variable]:"shadows.dark-lg"},bg:Mw.reference,boxShadow:Rw.reference}},t3e={px:"6",py:"4",fontSize:"xl",fontWeight:"semibold"},n3e={position:"absolute",top:"2",insetEnd:"3"},r3e=e=>{const{scrollBehavior:t}=e;return{px:"6",py:"2",flex:"1",overflow:t==="inside"?"auto":void 0}},i3e={px:"6",py:"4"},o3e=I3(e=>({overlay:Z5e,dialogContainer:Fr(J5e,e),dialog:Fr(e3e,e),header:t3e,closeButton:n3e,body:Fr(r3e,e),footer:i3e}));function go(e){return I3(e==="full"?{dialog:{maxW:"100vw",minH:"$100vh",my:"0",borderRadius:"0"}}:{dialog:{maxW:e}})}var s3e={xs:go("xs"),sm:go("sm"),md:go("md"),lg:go("lg"),xl:go("xl"),"2xl":go("2xl"),"3xl":go("3xl"),"4xl":go("4xl"),"5xl":go("5xl"),"6xl":go("6xl"),full:go("full")},a3e=Y5e({baseStyle:o3e,sizes:s3e,defaultProps:{size:"md"}}),{defineMultiStyleConfig:l3e,definePartsStyle:qV}=Be(DV.keys),sA=Xt("number-input-stepper-width"),KV=Xt("number-input-input-padding"),c3e=Ws(sA).add("0.5rem").toString(),Ow=Xt("number-input-bg"),$w=Xt("number-input-color"),Nw=Xt("number-input-border-color"),u3e={[sA.variable]:"sizes.6",[KV.variable]:c3e},d3e=e=>{var t,n;return(n=(t=Fr(ft.baseStyle,e))==null?void 0:t.field)!=null?n:{}},f3e={width:sA.reference},h3e={borderStart:"1px solid",borderStartColor:Nw.reference,color:$w.reference,bg:Ow.reference,[$w.variable]:"colors.chakra-body-text",[Nw.variable]:"colors.chakra-border-color",_dark:{[$w.variable]:"colors.whiteAlpha.800",[Nw.variable]:"colors.whiteAlpha.300"},_active:{[Ow.variable]:"colors.gray.200",_dark:{[Ow.variable]:"colors.whiteAlpha.300"}},_disabled:{opacity:.4,cursor:"not-allowed"}},p3e=qV(e=>{var t;return{root:u3e,field:(t=Fr(d3e,e))!=null?t:{},stepperGroup:f3e,stepper:h3e}});function uy(e){var t,n,r;const i=(t=ft.sizes)==null?void 0:t[e],o={lg:"md",md:"md",sm:"sm",xs:"sm"},s=(r=(n=i.field)==null?void 0:n.fontSize)!=null?r:"md",a=kV.fontSizes[s];return qV({field:{...i.field,paddingInlineEnd:KV.reference,verticalAlign:"top"},stepper:{fontSize:Ws(a).multiply(.75).toString(),_first:{borderTopEndRadius:o[e]},_last:{borderBottomEndRadius:o[e],mt:"-1px",borderTopWidth:1}}})}var g3e={xs:uy("xs"),sm:uy("sm"),md:uy("md"),lg:uy("lg")},m3e=l3e({baseStyle:p3e,sizes:g3e,variants:ft.variants,defaultProps:ft.defaultProps}),KM,y3e={...(KM=ft.baseStyle)==null?void 0:KM.field,textAlign:"center"},v3e={lg:{fontSize:"lg",w:12,h:12,borderRadius:"md"},md:{fontSize:"md",w:10,h:10,borderRadius:"md"},sm:{fontSize:"sm",w:8,h:8,borderRadius:"sm"},xs:{fontSize:"xs",w:6,h:6,borderRadius:"sm"}},XM,QM,b3e={outline:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.outline,e))==null?void 0:n.field)!=null?r:{}},flushed:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.flushed,e))==null?void 0:n.field)!=null?r:{}},filled:e=>{var t,n,r;return(r=(n=Fr((t=ft.variants)==null?void 0:t.filled,e))==null?void 0:n.field)!=null?r:{}},unstyled:(QM=(XM=ft.variants)==null?void 0:XM.unstyled.field)!=null?QM:{}},_3e={baseStyle:y3e,sizes:v3e,variants:b3e,defaultProps:ft.defaultProps},{defineMultiStyleConfig:S3e,definePartsStyle:x3e}=Be(LV.keys),dy=Xt("popper-bg"),w3e=Xt("popper-arrow-bg"),YM=Xt("popper-arrow-shadow-color"),C3e={zIndex:10},E3e={[dy.variable]:"colors.white",bg:dy.reference,[w3e.variable]:dy.reference,[YM.variable]:"colors.gray.200",_dark:{[dy.variable]:"colors.gray.700",[YM.variable]:"colors.whiteAlpha.300"},width:"xs",border:"1px solid",borderColor:"inherit",borderRadius:"md",boxShadow:"sm",zIndex:"inherit",_focusVisible:{outline:0,boxShadow:"outline"}},T3e={px:3,py:2,borderBottomWidth:"1px"},A3e={px:3,py:2},k3e={px:3,py:2,borderTopWidth:"1px"},P3e={position:"absolute",borderRadius:"md",top:1,insetEnd:2,padding:2},I3e=x3e({popper:C3e,content:E3e,header:T3e,body:A3e,footer:k3e,closeButton:P3e}),M3e=S3e({baseStyle:I3e}),{definePartsStyle:M3,defineMultiStyleConfig:R3e}=Be(Gxe.keys),Fw=Ae("drawer-bg"),Dw=Ae("drawer-box-shadow");function Lu(e){return M3(e==="full"?{dialog:{maxW:"100vw",h:"100vh"}}:{dialog:{maxW:e}})}var O3e={bg:"blackAlpha.600",zIndex:"modal"},$3e={display:"flex",zIndex:"modal",justifyContent:"center"},N3e=e=>{const{isFullHeight:t}=e;return{...t&&{height:"100vh"},zIndex:"modal",maxH:"100vh",color:"inherit",[Fw.variable]:"colors.white",[Dw.variable]:"shadows.lg",_dark:{[Fw.variable]:"colors.gray.700",[Dw.variable]:"shadows.dark-lg"},bg:Fw.reference,boxShadow:Dw.reference}},F3e={px:"6",py:"4",fontSize:"xl",fontWeight:"semibold"},D3e={position:"absolute",top:"2",insetEnd:"3"},L3e={px:"6",py:"2",flex:"1",overflow:"auto"},B3e={px:"6",py:"4"},z3e=M3(e=>({overlay:O3e,dialogContainer:$3e,dialog:Fr(N3e,e),header:F3e,closeButton:D3e,body:L3e,footer:B3e})),j3e={xs:Lu("xs"),sm:Lu("md"),md:Lu("lg"),lg:Lu("2xl"),xl:Lu("4xl"),full:Lu("full")},V3e=R3e({baseStyle:z3e,sizes:j3e,defaultProps:{size:"xs"}}),{definePartsStyle:U3e,defineMultiStyleConfig:G3e}=Be(OV.keys),H3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal"},W3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},q3e={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},K3e=U3e({preview:H3e,input:W3e,textarea:q3e}),X3e=G3e({baseStyle:K3e}),{definePartsStyle:Q3e,defineMultiStyleConfig:Y3e}=Be(Hxe.keys),jd=Ae("form-control-color"),Z3e={marginStart:"1",[jd.variable]:"colors.red.500",_dark:{[jd.variable]:"colors.red.300"},color:jd.reference},J3e={mt:"2",[jd.variable]:"colors.gray.600",_dark:{[jd.variable]:"colors.whiteAlpha.600"},color:jd.reference,lineHeight:"normal",fontSize:"sm"},eEe=Q3e({container:{width:"100%",position:"relative"},requiredIndicator:Z3e,helperText:J3e}),tEe=Y3e({baseStyle:eEe}),{definePartsStyle:nEe,defineMultiStyleConfig:rEe}=Be(Wxe.keys),Vd=Ae("form-error-color"),iEe={[Vd.variable]:"colors.red.500",_dark:{[Vd.variable]:"colors.red.300"},color:Vd.reference,mt:"2",fontSize:"sm",lineHeight:"normal"},oEe={marginEnd:"0.5em",[Vd.variable]:"colors.red.500",_dark:{[Vd.variable]:"colors.red.300"},color:Vd.reference},sEe=nEe({text:iEe,icon:oEe}),aEe=rEe({baseStyle:sEe}),lEe={fontSize:"md",marginEnd:"3",mb:"2",fontWeight:"medium",transitionProperty:"common",transitionDuration:"normal",opacity:1,_disabled:{opacity:.4}},cEe={baseStyle:lEe},uEe={fontFamily:"heading",fontWeight:"bold"},dEe={"4xl":{fontSize:["6xl",null,"7xl"],lineHeight:1},"3xl":{fontSize:["5xl",null,"6xl"],lineHeight:1},"2xl":{fontSize:["4xl",null,"5xl"],lineHeight:[1.2,null,1]},xl:{fontSize:["3xl",null,"4xl"],lineHeight:[1.33,null,1.2]},lg:{fontSize:["2xl",null,"3xl"],lineHeight:[1.33,null,1.2]},md:{fontSize:"xl",lineHeight:1.2},sm:{fontSize:"md",lineHeight:1.2},xs:{fontSize:"sm",lineHeight:1.2}},fEe={baseStyle:uEe,sizes:dEe,defaultProps:{size:"xl"}},{defineMultiStyleConfig:hEe,definePartsStyle:pEe}=Be(Uxe.keys),Lw=Ae("breadcrumb-link-decor"),gEe={transitionProperty:"common",transitionDuration:"fast",transitionTimingFunction:"ease-out",outline:"none",color:"inherit",textDecoration:Lw.reference,[Lw.variable]:"none","&:not([aria-current=page])":{cursor:"pointer",_hover:{[Lw.variable]:"underline"},_focusVisible:{boxShadow:"outline"}}},mEe=pEe({link:gEe}),yEe=hEe({baseStyle:mEe}),vEe={lineHeight:"1.2",borderRadius:"md",fontWeight:"semibold",transitionProperty:"common",transitionDuration:"normal",_focusVisible:{boxShadow:"outline"},_disabled:{opacity:.4,cursor:"not-allowed",boxShadow:"none"},_hover:{_disabled:{bg:"initial"}}},XV=e=>{const{colorScheme:t,theme:n}=e;if(t==="gray")return{color:W("gray.800","whiteAlpha.900")(e),_hover:{bg:W("gray.100","whiteAlpha.200")(e)},_active:{bg:W("gray.200","whiteAlpha.300")(e)}};const r=vf(`${t}.200`,.12)(n),i=vf(`${t}.200`,.24)(n);return{color:W(`${t}.600`,`${t}.200`)(e),bg:"transparent",_hover:{bg:W(`${t}.50`,r)(e)},_active:{bg:W(`${t}.100`,i)(e)}}},bEe=e=>{const{colorScheme:t}=e,n=W("gray.200","whiteAlpha.300")(e);return{border:"1px solid",borderColor:t==="gray"?n:"currentColor",".chakra-button__group[data-attached][data-orientation=horizontal] > &:not(:last-of-type)":{marginEnd:"-1px"},".chakra-button__group[data-attached][data-orientation=vertical] > &:not(:last-of-type)":{marginBottom:"-1px"},...Fr(XV,e)}},_Ee={yellow:{bg:"yellow.400",color:"black",hoverBg:"yellow.500",activeBg:"yellow.600"},cyan:{bg:"cyan.400",color:"black",hoverBg:"cyan.500",activeBg:"cyan.600"}},SEe=e=>{var t;const{colorScheme:n}=e;if(n==="gray"){const l=W("gray.100","whiteAlpha.200")(e);return{bg:l,color:W("gray.800","whiteAlpha.900")(e),_hover:{bg:W("gray.200","whiteAlpha.300")(e),_disabled:{bg:l}},_active:{bg:W("gray.300","whiteAlpha.400")(e)}}}const{bg:r=`${n}.500`,color:i="white",hoverBg:o=`${n}.600`,activeBg:s=`${n}.700`}=(t=_Ee[n])!=null?t:{},a=W(r,`${n}.200`)(e);return{bg:a,color:W(i,"gray.800")(e),_hover:{bg:W(o,`${n}.300`)(e),_disabled:{bg:a}},_active:{bg:W(s,`${n}.400`)(e)}}},xEe=e=>{const{colorScheme:t}=e;return{padding:0,height:"auto",lineHeight:"normal",verticalAlign:"baseline",color:W(`${t}.500`,`${t}.200`)(e),_hover:{textDecoration:"underline",_disabled:{textDecoration:"none"}},_active:{color:W(`${t}.700`,`${t}.500`)(e)}}},wEe={bg:"none",color:"inherit",display:"inline",lineHeight:"inherit",m:"0",p:"0"},CEe={ghost:XV,outline:bEe,solid:SEe,link:xEe,unstyled:wEe},EEe={lg:{h:"12",minW:"12",fontSize:"lg",px:"6"},md:{h:"10",minW:"10",fontSize:"md",px:"4"},sm:{h:"8",minW:"8",fontSize:"sm",px:"3"},xs:{h:"6",minW:"6",fontSize:"xs",px:"2"}},TEe={baseStyle:vEe,variants:CEe,sizes:EEe,defaultProps:{variant:"solid",size:"md",colorScheme:"gray"}},{definePartsStyle:Bc,defineMultiStyleConfig:AEe}=Be(Zxe.keys),W1=Ae("card-bg"),ta=Ae("card-padding"),QV=Ae("card-shadow"),yv=Ae("card-radius"),YV=Ae("card-border-width","0"),ZV=Ae("card-border-color"),kEe=Bc({container:{[W1.variable]:"colors.chakra-body-bg",backgroundColor:W1.reference,boxShadow:QV.reference,borderRadius:yv.reference,color:"chakra-body-text",borderWidth:YV.reference,borderColor:ZV.reference},body:{padding:ta.reference,flex:"1 1 0%"},header:{padding:ta.reference},footer:{padding:ta.reference}}),PEe={sm:Bc({container:{[yv.variable]:"radii.base",[ta.variable]:"space.3"}}),md:Bc({container:{[yv.variable]:"radii.md",[ta.variable]:"space.5"}}),lg:Bc({container:{[yv.variable]:"radii.xl",[ta.variable]:"space.7"}})},IEe={elevated:Bc({container:{[QV.variable]:"shadows.base",_dark:{[W1.variable]:"colors.gray.700"}}}),outline:Bc({container:{[YV.variable]:"1px",[ZV.variable]:"colors.chakra-border-color"}}),filled:Bc({container:{[W1.variable]:"colors.chakra-subtle-bg"}}),unstyled:{body:{[ta.variable]:0},header:{[ta.variable]:0},footer:{[ta.variable]:0}}},MEe=AEe({baseStyle:kEe,variants:IEe,sizes:PEe,defaultProps:{variant:"elevated",size:"md"}}),wp=Xt("close-button-size"),wh=Xt("close-button-bg"),REe={w:[wp.reference],h:[wp.reference],borderRadius:"md",transitionProperty:"common",transitionDuration:"normal",_disabled:{opacity:.4,cursor:"not-allowed",boxShadow:"none"},_hover:{[wh.variable]:"colors.blackAlpha.100",_dark:{[wh.variable]:"colors.whiteAlpha.100"}},_active:{[wh.variable]:"colors.blackAlpha.200",_dark:{[wh.variable]:"colors.whiteAlpha.200"}},_focusVisible:{boxShadow:"outline"},bg:wh.reference},OEe={lg:{[wp.variable]:"sizes.10",fontSize:"md"},md:{[wp.variable]:"sizes.8",fontSize:"xs"},sm:{[wp.variable]:"sizes.6",fontSize:"2xs"}},$Ee={baseStyle:REe,sizes:OEe,defaultProps:{size:"md"}},{variants:NEe,defaultProps:FEe}=Sp,DEe={fontFamily:"mono",fontSize:"sm",px:"0.2em",borderRadius:"sm",bg:un.bg.reference,color:un.color.reference,boxShadow:un.shadow.reference},LEe={baseStyle:DEe,variants:NEe,defaultProps:FEe},BEe={w:"100%",mx:"auto",maxW:"prose",px:"4"},zEe={baseStyle:BEe},jEe={opacity:.6,borderColor:"inherit"},VEe={borderStyle:"solid"},UEe={borderStyle:"dashed"},GEe={solid:VEe,dashed:UEe},HEe={baseStyle:jEe,variants:GEe,defaultProps:{variant:"solid"}},{definePartsStyle:WEe,defineMultiStyleConfig:qEe}=Be(MV.keys),KEe={borderTopWidth:"1px",borderColor:"inherit",_last:{borderBottomWidth:"1px"}},XEe={transitionProperty:"common",transitionDuration:"normal",fontSize:"md",_focusVisible:{boxShadow:"outline"},_hover:{bg:"blackAlpha.50"},_disabled:{opacity:.4,cursor:"not-allowed"},px:"4",py:"2"},QEe={pt:"2",px:"4",pb:"5"},YEe={fontSize:"1.25em"},ZEe=WEe({container:KEe,button:XEe,panel:QEe,icon:YEe}),JEe=qEe({baseStyle:ZEe}),{definePartsStyle:qm,defineMultiStyleConfig:e4e}=Be(jxe.keys),xi=Ae("alert-fg"),ha=Ae("alert-bg"),t4e=qm({container:{bg:ha.reference,px:"4",py:"3"},title:{fontWeight:"bold",lineHeight:"6",marginEnd:"2"},description:{lineHeight:"6"},icon:{color:xi.reference,flexShrink:0,marginEnd:"3",w:"5",h:"6"},spinner:{color:xi.reference,flexShrink:0,marginEnd:"3",w:"5",h:"5"}});function aA(e){const{theme:t,colorScheme:n}=e,r=vf(`${n}.200`,.16)(t);return{light:`colors.${n}.100`,dark:r}}var n4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark}}}}),r4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark},paddingStart:"3",borderStartWidth:"4px",borderStartColor:xi.reference}}}),i4e=qm(e=>{const{colorScheme:t}=e,n=aA(e);return{container:{[xi.variable]:`colors.${t}.600`,[ha.variable]:n.light,_dark:{[xi.variable]:`colors.${t}.200`,[ha.variable]:n.dark},pt:"2",borderTopWidth:"4px",borderTopColor:xi.reference}}}),o4e=qm(e=>{const{colorScheme:t}=e;return{container:{[xi.variable]:"colors.white",[ha.variable]:`colors.${t}.600`,_dark:{[xi.variable]:"colors.gray.900",[ha.variable]:`colors.${t}.200`},color:xi.reference}}}),s4e={subtle:n4e,"left-accent":r4e,"top-accent":i4e,solid:o4e},a4e=e4e({baseStyle:t4e,variants:s4e,defaultProps:{variant:"subtle",colorScheme:"blue"}}),{definePartsStyle:JV,defineMultiStyleConfig:l4e}=Be(Vxe.keys),Ud=Ae("avatar-border-color"),Cp=Ae("avatar-bg"),Bg=Ae("avatar-font-size"),bf=Ae("avatar-size"),c4e={borderRadius:"full",border:"0.2em solid",borderColor:Ud.reference,[Ud.variable]:"white",_dark:{[Ud.variable]:"colors.gray.800"}},u4e={bg:Cp.reference,fontSize:Bg.reference,width:bf.reference,height:bf.reference,lineHeight:"1",[Cp.variable]:"colors.gray.200",_dark:{[Cp.variable]:"colors.whiteAlpha.400"}},d4e=e=>{const{name:t,theme:n}=e,r=t?vwe({string:t}):"colors.gray.400",i=mwe(r)(n);let o="white";return i||(o="gray.800"),{bg:Cp.reference,fontSize:Bg.reference,color:o,borderColor:Ud.reference,verticalAlign:"top",width:bf.reference,height:bf.reference,"&:not([data-loaded])":{[Cp.variable]:r},[Ud.variable]:"colors.white",_dark:{[Ud.variable]:"colors.gray.800"}}},f4e={fontSize:Bg.reference,lineHeight:"1"},h4e=JV(e=>({badge:Fr(c4e,e),excessLabel:Fr(u4e,e),container:Fr(d4e,e),label:f4e}));function Ra(e){const t=e!=="100%"?IV[e]:void 0;return JV({container:{[bf.variable]:t??e,[Bg.variable]:`calc(${t??e} / 2.5)`},excessLabel:{[bf.variable]:t??e,[Bg.variable]:`calc(${t??e} / 2.5)`}})}var p4e={"2xs":Ra(4),xs:Ra(6),sm:Ra(8),md:Ra(12),lg:Ra(16),xl:Ra(24),"2xl":Ra(32),full:Ra("100%")},g4e=l4e({baseStyle:h4e,sizes:p4e,defaultProps:{size:"md"}}),m4e={Accordion:JEe,Alert:a4e,Avatar:g4e,Badge:Sp,Breadcrumb:yEe,Button:TEe,Checkbox:H1,CloseButton:$Ee,Code:LEe,Container:zEe,Divider:HEe,Drawer:V3e,Editable:X3e,Form:tEe,FormError:aEe,FormLabel:cEe,Heading:fEe,Input:ft,Kbd:R5e,Link:$5e,List:B5e,Menu:Q5e,Modal:a3e,NumberInput:m3e,PinInput:_3e,Popover:M3e,Progress:LCe,Radio:YCe,Select:i5e,Skeleton:s5e,SkipLink:l5e,Slider:b5e,Spinner:x5e,Stat:I5e,Switch:$we,Table:jwe,Tabs:nCe,Tag:gCe,Textarea:ACe,Tooltip:ICe,Card:MEe,Stepper:zxe},y4e={colors:{"chakra-body-text":{_light:"gray.800",_dark:"whiteAlpha.900"},"chakra-body-bg":{_light:"white",_dark:"gray.800"},"chakra-border-color":{_light:"gray.200",_dark:"whiteAlpha.300"},"chakra-inverse-text":{_light:"white",_dark:"gray.800"},"chakra-subtle-bg":{_light:"gray.100",_dark:"gray.700"},"chakra-subtle-text":{_light:"gray.600",_dark:"gray.400"},"chakra-placeholder-color":{_light:"gray.500",_dark:"whiteAlpha.400"}}},v4e={global:{body:{fontFamily:"body",color:"chakra-body-text",bg:"chakra-body-bg",transitionProperty:"background-color",transitionDuration:"normal",lineHeight:"base"},"*::placeholder":{color:"chakra-placeholder-color"},"*, *::before, &::after":{borderColor:"chakra-border-color"}}},b4e="ltr",_4e={useSystemColorMode:!1,initialColorMode:"light",cssVarPrefix:"chakra"},S4e={semanticTokens:y4e,direction:b4e,...Dxe,components:m4e,styles:v4e,config:_4e};function x4e(e,t){const n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n}function w4e(e,t,n,r){const i=typeof t=="string"?t.split("."):[t];for(r=0;r{const t=new WeakMap;return(r,i,o,s)=>{if(typeof r>"u")return e(r,i,o);t.has(r)||t.set(r,new Map);const a=t.get(r);if(a.has(i))return a.get(i);const l=e(r,i,o,s);return a.set(i,l),l}},eU=C4e(w4e);function tU(e,t){const n={};return Object.keys(e).forEach(r=>{const i=e[r];t(i,r,e)&&(n[r]=i)}),n}var nU=e=>tU(e,t=>t!=null);function E4e(e){return typeof e=="function"}function rU(e,...t){return E4e(e)?e(...t):e}function EWe(...e){return function(n){e.some(r=>(r==null||r(n),n==null?void 0:n.defaultPrevented))}}var T4e=typeof Element<"u",A4e=typeof Map=="function",k4e=typeof Set=="function",P4e=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function vv(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,r,i;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!vv(e[r],t[r]))return!1;return!0}var o;if(A4e&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;for(o=e.entries();!(r=o.next()).done;)if(!vv(r.value[1],t.get(r.value[0])))return!1;return!0}if(k4e&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;return!0}if(P4e&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[r]))return!1;if(T4e&&e instanceof Element)return!1;for(r=n;r--!==0;)if(!((i[r]==="_owner"||i[r]==="__v"||i[r]==="__o")&&e.$$typeof)&&!vv(e[i[r]],t[i[r]]))return!1;return!0}return e!==e&&t!==t}var I4e=function(t,n){try{return vv(t,n)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}};const M4e=Ml(I4e);function iU(e,t={}){var n;const{styleConfig:r,...i}=t,{theme:o,colorMode:s}=WSe(),a=e?eU(o,`components.${e}`):void 0,l=r||a,c=ds({theme:o,colorMode:s},(n=l==null?void 0:l.defaultProps)!=null?n:{},nU(x4e(i,["children"]))),u=I.useRef({});if(l){const f=hxe(l)(c);M4e(u.current,f)||(u.current=f)}return u.current}function Km(e,t={}){return iU(e,t)}function R4e(e,t={}){return iU(e,t)}var O4e=new Set([...txe,"textStyle","layerStyle","apply","noOfLines","focusBorderColor","errorBorderColor","as","__css","css","sx"]),$4e=new Set(["htmlWidth","htmlHeight","htmlSize","htmlTranslate"]);function N4e(e){return $4e.has(e)||!O4e.has(e)}function F4e(e,...t){if(e==null)throw new TypeError("Cannot convert undefined or null to object");const n={...e};for(const r of t)if(r!=null)for(const i in r)Object.prototype.hasOwnProperty.call(r,i)&&(i in n&&delete n[i],n[i]=r[i]);return n}function D4e(e){const t=Object.assign({},e);for(let n in t)t[n]===void 0&&delete t[n];return t}var L4e=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,B4e=sV(function(e){return L4e.test(e)||e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)<91}),z4e=B4e,j4e=function(t){return t!=="theme"},ZM=function(t){return typeof t=="string"&&t.charCodeAt(0)>96?z4e:j4e},JM=function(t,n,r){var i;if(n){var o=n.shouldForwardProp;i=t.__emotion_forwardProp&&o?function(s){return t.__emotion_forwardProp(s)&&o(s)}:o}return typeof i!="function"&&r&&(i=t.__emotion_forwardProp),i},V4e=function(t){var n=t.cache,r=t.serialized,i=t.isStringTag;return fV(n,r,i),MSe(function(){return hV(n,r,i)}),null},U4e=function e(t,n){var r=t.__emotion_real===t,i=r&&t.__emotion_base||t,o,s;n!==void 0&&(o=n.label,s=n.target);var a=JM(t,n,r),l=a||ZM(i),c=!l("as");return function(){var u=arguments,d=r&&t.__emotion_styles!==void 0?t.__emotion_styles.slice(0):[];if(o!==void 0&&d.push("label:"+o+";"),u[0]==null||u[0].raw===void 0)d.push.apply(d,u);else{d.push(u[0][0]);for(var f=u.length,h=1;ht=>{const{theme:n,css:r,__css:i,sx:o,...s}=t,a=tU(s,(d,f)=>rxe(f)),l=rU(e,t),c=F4e({},i,l,nU(a),o),u=AV(c)(t.theme);return r?[u,r]:u};function Bw(e,t){const{baseStyle:n,...r}=t??{};r.shouldForwardProp||(r.shouldForwardProp=N4e);const i=W4e({baseStyle:n}),o=H4e(e,r)(i);return Q.forwardRef(function(l,c){const{colorMode:u,forced:d}=ES();return Q.createElement(o,{ref:c,"data-theme":d?u:void 0,...l})})}function q4e(){const e=new Map;return new Proxy(Bw,{apply(t,n,r){return Bw(...r)},get(t,n){return e.has(n)||e.set(n,Bw(n)),e.get(n)}})}var or=q4e();function Mi(e){return I.forwardRef(e)}function K4e(e={}){const{strict:t=!0,errorMessage:n="useContext: `context` is undefined. Seems you forgot to wrap component within the Provider",name:r}=e,i=I.createContext(void 0);i.displayName=r;function o(){var s;const a=I.useContext(i);if(!a&&t){const l=new Error(n);throw l.name="ContextError",(s=Error.captureStackTrace)==null||s.call(Error,l,o),l}return a}return[i.Provider,o,i]}function X4e(e){const{cssVarsRoot:t,theme:n,children:r}=e,i=I.useMemo(()=>J2e(n),[n]);return ie.jsxs($Se,{theme:i,children:[ie.jsx(Q4e,{root:t}),r]})}function Q4e({root:e=":host, :root"}){const t=[e,"[data-theme]"].join(",");return ie.jsx(vV,{styles:n=>({[t]:n.__cssVars})})}K4e({name:"StylesContext",errorMessage:"useStyles: `styles` is undefined. Seems you forgot to wrap the components in `` "});function TWe(){const{colorMode:e}=ES();return ie.jsx(vV,{styles:t=>{const n=eU(t,"styles.global"),r=rU(n,{theme:t,colorMode:e});return r?AV(r)(t):void 0}})}var Y4e=(e,t)=>e.find(n=>n.id===t);function t9(e,t){const n=oU(e,t),r=n?e[n].findIndex(i=>i.id===t):-1;return{position:n,index:r}}function oU(e,t){for(const[n,r]of Object.entries(e))if(Y4e(r,t))return n}function Z4e(e){const t=e.includes("right"),n=e.includes("left");let r="center";return t&&(r="flex-end"),n&&(r="flex-start"),{display:"flex",flexDirection:"column",alignItems:r}}function J4e(e){const n=e==="top"||e==="bottom"?"0 auto":void 0,r=e.includes("top")?"env(safe-area-inset-top, 0px)":void 0,i=e.includes("bottom")?"env(safe-area-inset-bottom, 0px)":void 0,o=e.includes("left")?void 0:"env(safe-area-inset-right, 0px)",s=e.includes("right")?void 0:"env(safe-area-inset-left, 0px)";return{position:"fixed",zIndex:"var(--toast-z-index, 5500)",pointerEvents:"none",display:"flex",flexDirection:"column",margin:n,top:r,bottom:i,right:o,left:s}}function eTe(e,t=[]){const n=I.useRef(e);return I.useEffect(()=>{n.current=e}),I.useCallback((...r)=>{var i;return(i=n.current)==null?void 0:i.call(n,...r)},t)}function tTe(e,t){const n=eTe(e);I.useEffect(()=>{if(t==null)return;let r=null;return r=window.setTimeout(()=>{n()},t),()=>{r&&window.clearTimeout(r)}},[t,n])}function n9(e,t){const n=I.useRef(!1),r=I.useRef(!1);I.useEffect(()=>{if(n.current&&r.current)return e();r.current=!0},t),I.useEffect(()=>(n.current=!0,()=>{n.current=!1}),[])}const sU=I.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"}),IS=I.createContext({}),Xm=I.createContext(null),MS=typeof document<"u",lA=MS?I.useLayoutEffect:I.useEffect,aU=I.createContext({strict:!1}),cA=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),nTe="framerAppearId",lU="data-"+cA(nTe);function rTe(e,t,n,r){const{visualElement:i}=I.useContext(IS),o=I.useContext(aU),s=I.useContext(Xm),a=I.useContext(sU).reducedMotion,l=I.useRef();r=r||o.renderer,!l.current&&r&&(l.current=r(e,{visualState:t,parent:i,props:n,presenceContext:s,blockInitialAnimation:s?s.initial===!1:!1,reducedMotionConfig:a}));const c=l.current;I.useInsertionEffect(()=>{c&&c.update(n,s)});const u=I.useRef(!!(n[lU]&&!window.HandoffComplete));return lA(()=>{c&&(c.render(),u.current&&c.animationState&&c.animationState.animateChanges())}),I.useEffect(()=>{c&&(c.updateFeatures(),!u.current&&c.animationState&&c.animationState.animateChanges(),u.current&&(u.current=!1,window.HandoffComplete=!0))}),c}function md(e){return typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function iTe(e,t,n){return I.useCallback(r=>{r&&e.mount&&e.mount(r),t&&(r?t.mount(r):t.unmount()),n&&(typeof n=="function"?n(r):md(n)&&(n.current=r))},[t])}function zg(e){return typeof e=="string"||Array.isArray(e)}function RS(e){return typeof e=="object"&&typeof e.start=="function"}const uA=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],dA=["initial",...uA];function OS(e){return RS(e.animate)||dA.some(t=>zg(e[t]))}function cU(e){return!!(OS(e)||e.variants)}function oTe(e,t){if(OS(e)){const{initial:n,animate:r}=e;return{initial:n===!1||zg(n)?n:void 0,animate:zg(r)?r:void 0}}return e.inherit!==!1?t:{}}function sTe(e){const{initial:t,animate:n}=oTe(e,I.useContext(IS));return I.useMemo(()=>({initial:t,animate:n}),[r9(t),r9(n)])}function r9(e){return Array.isArray(e)?e.join(" "):e}const i9={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},jg={};for(const e in i9)jg[e]={isEnabled:t=>i9[e].some(n=>!!t[n])};function aTe(e){for(const t in e)jg[t]={...jg[t],...e[t]}}const fA=I.createContext({}),uU=I.createContext({}),lTe=Symbol.for("motionComponentSymbol");function cTe({preloadedFeatures:e,createVisualElement:t,useRender:n,useVisualState:r,Component:i}){e&&aTe(e);function o(a,l){let c;const u={...I.useContext(sU),...a,layoutId:uTe(a)},{isStatic:d}=u,f=sTe(a),h=r(a,d);if(!d&&MS){f.visualElement=rTe(i,h,u,t);const p=I.useContext(uU),m=I.useContext(aU).strict;f.visualElement&&(c=f.visualElement.loadFeatures(u,m,e,p))}return I.createElement(IS.Provider,{value:f},c&&f.visualElement?I.createElement(c,{visualElement:f.visualElement,...u}):null,n(i,a,iTe(h,f.visualElement,l),h,d,f.visualElement))}const s=I.forwardRef(o);return s[lTe]=i,s}function uTe({layoutId:e}){const t=I.useContext(fA).id;return t&&e!==void 0?t+"-"+e:e}function dTe(e){function t(r,i={}){return cTe(e(r,i))}if(typeof Proxy>"u")return t;const n=new Map;return new Proxy(t,{get:(r,i)=>(n.has(i)||n.set(i,t(i)),n.get(i))})}const fTe=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function hA(e){return typeof e!="string"||e.includes("-")?!1:!!(fTe.indexOf(e)>-1||/[A-Z]/.test(e))}const K1={};function hTe(e){Object.assign(K1,e)}const Qm=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],du=new Set(Qm);function dU(e,{layout:t,layoutId:n}){return du.has(e)||e.startsWith("origin")||(t||n!==void 0)&&(!!K1[e]||e==="opacity")}const ri=e=>!!(e&&e.getVelocity),pTe={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},gTe=Qm.length;function mTe(e,{enableHardwareAcceleration:t=!0,allowTransformNone:n=!0},r,i){let o="";for(let s=0;st=>typeof t=="string"&&t.startsWith(e),hU=fU("--"),R3=fU("var(--"),yTe=/var\s*\(\s*--[\w-]+(\s*,\s*(?:(?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)+)?\s*\)/g,vTe=(e,t)=>t&&typeof e=="number"?t.transform(e):e,El=(e,t,n)=>Math.min(Math.max(n,e),t),fu={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Ep={...fu,transform:e=>El(0,1,e)},fy={...fu,default:1},Tp=e=>Math.round(e*1e5)/1e5,$S=/(-)?([\d]*\.?[\d])+/g,pU=/(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))/gi,bTe=/^(#[0-9a-f]{3,8}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2}(-?[\d\.]+%?)\s*[\,\/]?\s*[\d\.]*%?\))$/i;function Ym(e){return typeof e=="string"}const Zm=e=>({test:t=>Ym(t)&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),Na=Zm("deg"),bs=Zm("%"),Pe=Zm("px"),_Te=Zm("vh"),STe=Zm("vw"),o9={...bs,parse:e=>bs.parse(e)/100,transform:e=>bs.transform(e*100)},s9={...fu,transform:Math.round},gU={borderWidth:Pe,borderTopWidth:Pe,borderRightWidth:Pe,borderBottomWidth:Pe,borderLeftWidth:Pe,borderRadius:Pe,radius:Pe,borderTopLeftRadius:Pe,borderTopRightRadius:Pe,borderBottomRightRadius:Pe,borderBottomLeftRadius:Pe,width:Pe,maxWidth:Pe,height:Pe,maxHeight:Pe,size:Pe,top:Pe,right:Pe,bottom:Pe,left:Pe,padding:Pe,paddingTop:Pe,paddingRight:Pe,paddingBottom:Pe,paddingLeft:Pe,margin:Pe,marginTop:Pe,marginRight:Pe,marginBottom:Pe,marginLeft:Pe,rotate:Na,rotateX:Na,rotateY:Na,rotateZ:Na,scale:fy,scaleX:fy,scaleY:fy,scaleZ:fy,skew:Na,skewX:Na,skewY:Na,distance:Pe,translateX:Pe,translateY:Pe,translateZ:Pe,x:Pe,y:Pe,z:Pe,perspective:Pe,transformPerspective:Pe,opacity:Ep,originX:o9,originY:o9,originZ:Pe,zIndex:s9,fillOpacity:Ep,strokeOpacity:Ep,numOctaves:s9};function pA(e,t,n,r){const{style:i,vars:o,transform:s,transformOrigin:a}=e;let l=!1,c=!1,u=!0;for(const d in t){const f=t[d];if(hU(d)){o[d]=f;continue}const h=gU[d],p=vTe(f,h);if(du.has(d)){if(l=!0,s[d]=p,!u)continue;f!==(h.default||0)&&(u=!1)}else d.startsWith("origin")?(c=!0,a[d]=p):i[d]=p}if(t.transform||(l||r?i.transform=mTe(e.transform,n,u,r):i.transform&&(i.transform="none")),c){const{originX:d="50%",originY:f="50%",originZ:h=0}=a;i.transformOrigin=`${d} ${f} ${h}`}}const gA=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function mU(e,t,n){for(const r in t)!ri(t[r])&&!dU(r,n)&&(e[r]=t[r])}function xTe({transformTemplate:e},t,n){return I.useMemo(()=>{const r=gA();return pA(r,t,{enableHardwareAcceleration:!n},e),Object.assign({},r.vars,r.style)},[t])}function wTe(e,t,n){const r=e.style||{},i={};return mU(i,r,e),Object.assign(i,xTe(e,t,n)),e.transformValues?e.transformValues(i):i}function CTe(e,t,n){const r={},i=wTe(e,t,n);return e.drag&&e.dragListener!==!1&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(r.tabIndex=0),r.style=i,r}const ETe=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","transformValues","custom","inherit","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","ignoreStrict","viewport"]);function X1(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||ETe.has(e)}let yU=e=>!X1(e);function TTe(e){e&&(yU=t=>t.startsWith("on")?!X1(t):e(t))}try{TTe(require("@emotion/is-prop-valid").default)}catch{}function ATe(e,t,n){const r={};for(const i in e)i==="values"&&typeof e.values=="object"||(yU(i)||n===!0&&X1(i)||!t&&!X1(i)||e.draggable&&i.startsWith("onDrag"))&&(r[i]=e[i]);return r}function a9(e,t,n){return typeof e=="string"?e:Pe.transform(t+n*e)}function kTe(e,t,n){const r=a9(t,e.x,e.width),i=a9(n,e.y,e.height);return`${r} ${i}`}const PTe={offset:"stroke-dashoffset",array:"stroke-dasharray"},ITe={offset:"strokeDashoffset",array:"strokeDasharray"};function MTe(e,t,n=1,r=0,i=!0){e.pathLength=1;const o=i?PTe:ITe;e[o.offset]=Pe.transform(-r);const s=Pe.transform(t),a=Pe.transform(n);e[o.array]=`${s} ${a}`}function mA(e,{attrX:t,attrY:n,attrScale:r,originX:i,originY:o,pathLength:s,pathSpacing:a=1,pathOffset:l=0,...c},u,d,f){if(pA(e,c,u,f),d){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:h,style:p,dimensions:m}=e;h.transform&&(m&&(p.transform=h.transform),delete h.transform),m&&(i!==void 0||o!==void 0||p.transform)&&(p.transformOrigin=kTe(m,i!==void 0?i:.5,o!==void 0?o:.5)),t!==void 0&&(h.x=t),n!==void 0&&(h.y=n),r!==void 0&&(h.scale=r),s!==void 0&&MTe(h,s,a,l,!1)}const vU=()=>({...gA(),attrs:{}}),yA=e=>typeof e=="string"&&e.toLowerCase()==="svg";function RTe(e,t,n,r){const i=I.useMemo(()=>{const o=vU();return mA(o,t,{enableHardwareAcceleration:!1},yA(r),e.transformTemplate),{...o.attrs,style:{...o.style}}},[t]);if(e.style){const o={};mU(o,e.style,e),i.style={...o,...i.style}}return i}function OTe(e=!1){return(n,r,i,{latestValues:o},s)=>{const l=(hA(n)?RTe:CTe)(r,o,s,n),u={...ATe(r,typeof n=="string",e),...l,ref:i},{children:d}=r,f=I.useMemo(()=>ri(d)?d.get():d,[d]);return I.createElement(n,{...u,children:f})}}function bU(e,{style:t,vars:n},r,i){Object.assign(e.style,t,i&&i.getProjectionStyles(r));for(const o in n)e.style.setProperty(o,n[o])}const _U=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function SU(e,t,n,r){bU(e,t,void 0,r);for(const i in t.attrs)e.setAttribute(_U.has(i)?i:cA(i),t.attrs[i])}function vA(e,t){const{style:n}=e,r={};for(const i in n)(ri(n[i])||t.style&&ri(t.style[i])||dU(i,e))&&(r[i]=n[i]);return r}function xU(e,t){const n=vA(e,t);for(const r in e)if(ri(e[r])||ri(t[r])){const i=Qm.indexOf(r)!==-1?"attr"+r.charAt(0).toUpperCase()+r.substring(1):r;n[i]=e[r]}return n}function bA(e,t,n,r={},i={}){return typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"&&(t=t(n!==void 0?n:e.custom,r,i)),t}function wU(e){const t=I.useRef(null);return t.current===null&&(t.current=e()),t.current}const Q1=e=>Array.isArray(e),$Te=e=>!!(e&&typeof e=="object"&&e.mix&&e.toValue),NTe=e=>Q1(e)?e[e.length-1]||0:e;function bv(e){const t=ri(e)?e.get():e;return $Te(t)?t.toValue():t}function FTe({scrapeMotionValuesFromProps:e,createRenderState:t,onMount:n},r,i,o){const s={latestValues:DTe(r,i,o,e),renderState:t()};return n&&(s.mount=a=>n(r,a,s)),s}const CU=e=>(t,n)=>{const r=I.useContext(IS),i=I.useContext(Xm),o=()=>FTe(e,t,r,i);return n?o():wU(o)};function DTe(e,t,n,r){const i={},o=r(e,{});for(const f in o)i[f]=bv(o[f]);let{initial:s,animate:a}=e;const l=OS(e),c=cU(e);t&&c&&!l&&e.inherit!==!1&&(s===void 0&&(s=t.initial),a===void 0&&(a=t.animate));let u=n?n.initial===!1:!1;u=u||s===!1;const d=u?a:s;return d&&typeof d!="boolean"&&!RS(d)&&(Array.isArray(d)?d:[d]).forEach(h=>{const p=bA(e,h);if(!p)return;const{transitionEnd:m,transition:_,...v}=p;for(const y in v){let g=v[y];if(Array.isArray(g)){const b=u?g.length-1:0;g=g[b]}g!==null&&(i[y]=g)}for(const y in m)i[y]=m[y]}),i}const tn=e=>e;class l9{constructor(){this.order=[],this.scheduled=new Set}add(t){if(!this.scheduled.has(t))return this.scheduled.add(t),this.order.push(t),!0}remove(t){const n=this.order.indexOf(t);n!==-1&&(this.order.splice(n,1),this.scheduled.delete(t))}clear(){this.order.length=0,this.scheduled.clear()}}function LTe(e){let t=new l9,n=new l9,r=0,i=!1,o=!1;const s=new WeakSet,a={schedule:(l,c=!1,u=!1)=>{const d=u&&i,f=d?t:n;return c&&s.add(l),f.add(l)&&d&&i&&(r=t.order.length),l},cancel:l=>{n.remove(l),s.delete(l)},process:l=>{if(i){o=!0;return}if(i=!0,[t,n]=[n,t],n.clear(),r=t.order.length,r)for(let c=0;c(d[f]=LTe(()=>n=!0),d),{}),s=d=>o[d].process(i),a=()=>{const d=performance.now();n=!1,i.delta=r?1e3/60:Math.max(Math.min(d-i.timestamp,BTe),1),i.timestamp=d,i.isProcessing=!0,hy.forEach(s),i.isProcessing=!1,n&&t&&(r=!1,e(a))},l=()=>{n=!0,r=!0,i.isProcessing||e(a)};return{schedule:hy.reduce((d,f)=>{const h=o[f];return d[f]=(p,m=!1,_=!1)=>(n||l(),h.schedule(p,m,_)),d},{}),cancel:d=>hy.forEach(f=>o[f].cancel(d)),state:i,steps:o}}const{schedule:Pt,cancel:pa,state:$n,steps:zw}=zTe(typeof requestAnimationFrame<"u"?requestAnimationFrame:tn,!0),jTe={useVisualState:CU({scrapeMotionValuesFromProps:xU,createRenderState:vU,onMount:(e,t,{renderState:n,latestValues:r})=>{Pt.read(()=>{try{n.dimensions=typeof t.getBBox=="function"?t.getBBox():t.getBoundingClientRect()}catch{n.dimensions={x:0,y:0,width:0,height:0}}}),Pt.render(()=>{mA(n,r,{enableHardwareAcceleration:!1},yA(t.tagName),e.transformTemplate),SU(t,n)})}})},VTe={useVisualState:CU({scrapeMotionValuesFromProps:vA,createRenderState:gA})};function UTe(e,{forwardMotionProps:t=!1},n,r){return{...hA(e)?jTe:VTe,preloadedFeatures:n,useRender:OTe(t),createVisualElement:r,Component:e}}function Ys(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n)}const EU=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1;function NS(e,t="page"){return{point:{x:e[t+"X"],y:e[t+"Y"]}}}const GTe=e=>t=>EU(t)&&e(t,NS(t));function na(e,t,n,r){return Ys(e,t,GTe(n),r)}const HTe=(e,t)=>n=>t(e(n)),hl=(...e)=>e.reduce(HTe);function TU(e){let t=null;return()=>{const n=()=>{t=null};return t===null?(t=e,n):!1}}const c9=TU("dragHorizontal"),u9=TU("dragVertical");function AU(e){let t=!1;if(e==="y")t=u9();else if(e==="x")t=c9();else{const n=c9(),r=u9();n&&r?t=()=>{n(),r()}:(n&&n(),r&&r())}return t}function kU(){const e=AU(!0);return e?(e(),!1):!0}class Ll{constructor(t){this.isMounted=!1,this.node=t}update(){}}function d9(e,t){const n="pointer"+(t?"enter":"leave"),r="onHover"+(t?"Start":"End"),i=(o,s)=>{if(o.type==="touch"||kU())return;const a=e.getProps();e.animationState&&a.whileHover&&e.animationState.setActive("whileHover",t),a[r]&&Pt.update(()=>a[r](o,s))};return na(e.current,n,i,{passive:!e.getProps()[r]})}class WTe extends Ll{mount(){this.unmount=hl(d9(this.node,!0),d9(this.node,!1))}unmount(){}}class qTe extends Ll{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=hl(Ys(this.node.current,"focus",()=>this.onFocus()),Ys(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}const PU=(e,t)=>t?e===t?!0:PU(e,t.parentElement):!1;function jw(e,t){if(!t)return;const n=new PointerEvent("pointer"+e);t(n,NS(n))}class KTe extends Ll{constructor(){super(...arguments),this.removeStartListeners=tn,this.removeEndListeners=tn,this.removeAccessibleListeners=tn,this.startPointerPress=(t,n)=>{if(this.removeEndListeners(),this.isPressing)return;const r=this.node.getProps(),o=na(window,"pointerup",(a,l)=>{if(!this.checkPressEnd())return;const{onTap:c,onTapCancel:u}=this.node.getProps();Pt.update(()=>{PU(this.node.current,a.target)?c&&c(a,l):u&&u(a,l)})},{passive:!(r.onTap||r.onPointerUp)}),s=na(window,"pointercancel",(a,l)=>this.cancelPress(a,l),{passive:!(r.onTapCancel||r.onPointerCancel)});this.removeEndListeners=hl(o,s),this.startPress(t,n)},this.startAccessiblePress=()=>{const t=o=>{if(o.key!=="Enter"||this.isPressing)return;const s=a=>{a.key!=="Enter"||!this.checkPressEnd()||jw("up",(l,c)=>{const{onTap:u}=this.node.getProps();u&&Pt.update(()=>u(l,c))})};this.removeEndListeners(),this.removeEndListeners=Ys(this.node.current,"keyup",s),jw("down",(a,l)=>{this.startPress(a,l)})},n=Ys(this.node.current,"keydown",t),r=()=>{this.isPressing&&jw("cancel",(o,s)=>this.cancelPress(o,s))},i=Ys(this.node.current,"blur",r);this.removeAccessibleListeners=hl(n,i)}}startPress(t,n){this.isPressing=!0;const{onTapStart:r,whileTap:i}=this.node.getProps();i&&this.node.animationState&&this.node.animationState.setActive("whileTap",!0),r&&Pt.update(()=>r(t,n))}checkPressEnd(){return this.removeEndListeners(),this.isPressing=!1,this.node.getProps().whileTap&&this.node.animationState&&this.node.animationState.setActive("whileTap",!1),!kU()}cancelPress(t,n){if(!this.checkPressEnd())return;const{onTapCancel:r}=this.node.getProps();r&&Pt.update(()=>r(t,n))}mount(){const t=this.node.getProps(),n=na(this.node.current,"pointerdown",this.startPointerPress,{passive:!(t.onTapStart||t.onPointerStart)}),r=Ys(this.node.current,"focus",this.startAccessiblePress);this.removeStartListeners=hl(n,r)}unmount(){this.removeStartListeners(),this.removeEndListeners(),this.removeAccessibleListeners()}}const O3=new WeakMap,Vw=new WeakMap,XTe=e=>{const t=O3.get(e.target);t&&t(e)},QTe=e=>{e.forEach(XTe)};function YTe({root:e,...t}){const n=e||document;Vw.has(n)||Vw.set(n,{});const r=Vw.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(QTe,{root:e,...t})),r[i]}function ZTe(e,t,n){const r=YTe(t);return O3.set(e,n),r.observe(e),()=>{O3.delete(e),r.unobserve(e)}}const JTe={some:0,all:1};class eAe extends Ll{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:t={}}=this.node.getProps(),{root:n,margin:r,amount:i="some",once:o}=t,s={root:n?n.current:void 0,rootMargin:r,threshold:typeof i=="number"?i:JTe[i]},a=l=>{const{isIntersecting:c}=l;if(this.isInView===c||(this.isInView=c,o&&!c&&this.hasEnteredView))return;c&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",c);const{onViewportEnter:u,onViewportLeave:d}=this.node.getProps(),f=c?u:d;f&&f(l)};return ZTe(this.node.current,s,a)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:n}=this.node;["amount","margin","root"].some(tAe(t,n))&&this.startObserver()}unmount(){}}function tAe({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}const nAe={inView:{Feature:eAe},tap:{Feature:KTe},focus:{Feature:qTe},hover:{Feature:WTe}};function IU(e,t){if(!Array.isArray(t))return!1;const n=t.length;if(n!==e.length)return!1;for(let r=0;rt[r]=n.get()),t}function iAe(e){const t={};return e.values.forEach((n,r)=>t[r]=n.getVelocity()),t}function FS(e,t,n){const r=e.getProps();return bA(r,t,n!==void 0?n:r.custom,rAe(e),iAe(e))}let oAe=tn,_A=tn;const pl=e=>e*1e3,ra=e=>e/1e3,sAe={current:!1},MU=e=>Array.isArray(e)&&typeof e[0]=="number";function RU(e){return!!(!e||typeof e=="string"&&OU[e]||MU(e)||Array.isArray(e)&&e.every(RU))}const Jh=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,OU={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Jh([0,.65,.55,1]),circOut:Jh([.55,0,1,.45]),backIn:Jh([.31,.01,.66,-.59]),backOut:Jh([.33,1.53,.69,.99])};function $U(e){if(e)return MU(e)?Jh(e):Array.isArray(e)?e.map($U):OU[e]}function aAe(e,t,n,{delay:r=0,duration:i,repeat:o=0,repeatType:s="loop",ease:a,times:l}={}){const c={[t]:n};l&&(c.offset=l);const u=$U(a);return Array.isArray(u)&&(c.easing=u),e.animate(c,{delay:r,duration:i,easing:Array.isArray(u)?"linear":u,fill:"both",iterations:o+1,direction:s==="reverse"?"alternate":"normal"})}function lAe(e,{repeat:t,repeatType:n="loop"}){const r=t&&n!=="loop"&&t%2===1?0:e.length-1;return e[r]}const NU=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,cAe=1e-7,uAe=12;function dAe(e,t,n,r,i){let o,s,a=0;do s=t+(n-t)/2,o=NU(s,r,i)-e,o>0?n=s:t=s;while(Math.abs(o)>cAe&&++adAe(o,0,1,e,n);return o=>o===0||o===1?o:NU(i(o),t,r)}const fAe=Jm(.42,0,1,1),hAe=Jm(0,0,.58,1),FU=Jm(.42,0,.58,1),pAe=e=>Array.isArray(e)&&typeof e[0]!="number",DU=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,LU=e=>t=>1-e(1-t),BU=e=>1-Math.sin(Math.acos(e)),SA=LU(BU),gAe=DU(SA),zU=Jm(.33,1.53,.69,.99),xA=LU(zU),mAe=DU(xA),yAe=e=>(e*=2)<1?.5*xA(e):.5*(2-Math.pow(2,-10*(e-1))),vAe={linear:tn,easeIn:fAe,easeInOut:FU,easeOut:hAe,circIn:BU,circInOut:gAe,circOut:SA,backIn:xA,backInOut:mAe,backOut:zU,anticipate:yAe},f9=e=>{if(Array.isArray(e)){_A(e.length===4);const[t,n,r,i]=e;return Jm(t,n,r,i)}else if(typeof e=="string")return vAe[e];return e},wA=(e,t)=>n=>!!(Ym(n)&&bTe.test(n)&&n.startsWith(e)||t&&Object.prototype.hasOwnProperty.call(n,t)),jU=(e,t,n)=>r=>{if(!Ym(r))return r;const[i,o,s,a]=r.match($S);return{[e]:parseFloat(i),[t]:parseFloat(o),[n]:parseFloat(s),alpha:a!==void 0?parseFloat(a):1}},bAe=e=>El(0,255,e),Uw={...fu,transform:e=>Math.round(bAe(e))},Ec={test:wA("rgb","red"),parse:jU("red","green","blue"),transform:({red:e,green:t,blue:n,alpha:r=1})=>"rgba("+Uw.transform(e)+", "+Uw.transform(t)+", "+Uw.transform(n)+", "+Tp(Ep.transform(r))+")"};function _Ae(e){let t="",n="",r="",i="";return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}const $3={test:wA("#"),parse:_Ae,transform:Ec.transform},yd={test:wA("hsl","hue"),parse:jU("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>"hsla("+Math.round(e)+", "+bs.transform(Tp(t))+", "+bs.transform(Tp(n))+", "+Tp(Ep.transform(r))+")"},Mr={test:e=>Ec.test(e)||$3.test(e)||yd.test(e),parse:e=>Ec.test(e)?Ec.parse(e):yd.test(e)?yd.parse(e):$3.parse(e),transform:e=>Ym(e)?e:e.hasOwnProperty("red")?Ec.transform(e):yd.transform(e)},Wt=(e,t,n)=>-n*e+n*t+e;function Gw(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function SAe({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,o=0,s=0;if(!t)i=o=s=n;else{const a=n<.5?n*(1+t):n+t-n*t,l=2*n-a;i=Gw(l,a,e+1/3),o=Gw(l,a,e),s=Gw(l,a,e-1/3)}return{red:Math.round(i*255),green:Math.round(o*255),blue:Math.round(s*255),alpha:r}}const Hw=(e,t,n)=>{const r=e*e;return Math.sqrt(Math.max(0,n*(t*t-r)+r))},xAe=[$3,Ec,yd],wAe=e=>xAe.find(t=>t.test(e));function h9(e){const t=wAe(e);let n=t.parse(e);return t===yd&&(n=SAe(n)),n}const VU=(e,t)=>{const n=h9(e),r=h9(t),i={...n};return o=>(i.red=Hw(n.red,r.red,o),i.green=Hw(n.green,r.green,o),i.blue=Hw(n.blue,r.blue,o),i.alpha=Wt(n.alpha,r.alpha,o),Ec.transform(i))};function CAe(e){var t,n;return isNaN(e)&&Ym(e)&&(((t=e.match($S))===null||t===void 0?void 0:t.length)||0)+(((n=e.match(pU))===null||n===void 0?void 0:n.length)||0)>0}const UU={regex:yTe,countKey:"Vars",token:"${v}",parse:tn},GU={regex:pU,countKey:"Colors",token:"${c}",parse:Mr.parse},HU={regex:$S,countKey:"Numbers",token:"${n}",parse:fu.parse};function Ww(e,{regex:t,countKey:n,token:r,parse:i}){const o=e.tokenised.match(t);o&&(e["num"+n]=o.length,e.tokenised=e.tokenised.replace(t,r),e.values.push(...o.map(i)))}function Y1(e){const t=e.toString(),n={value:t,tokenised:t,values:[],numVars:0,numColors:0,numNumbers:0};return n.value.includes("var(--")&&Ww(n,UU),Ww(n,GU),Ww(n,HU),n}function WU(e){return Y1(e).values}function qU(e){const{values:t,numColors:n,numVars:r,tokenised:i}=Y1(e),o=t.length;return s=>{let a=i;for(let l=0;ltypeof e=="number"?0:e;function TAe(e){const t=WU(e);return qU(e)(t.map(EAe))}const Tl={test:CAe,parse:WU,createTransformer:qU,getAnimatableNone:TAe},KU=(e,t)=>n=>`${n>0?t:e}`;function XU(e,t){return typeof e=="number"?n=>Wt(e,t,n):Mr.test(e)?VU(e,t):e.startsWith("var(")?KU(e,t):YU(e,t)}const QU=(e,t)=>{const n=[...e],r=n.length,i=e.map((o,s)=>XU(o,t[s]));return o=>{for(let s=0;s{const n={...e,...t},r={};for(const i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=XU(e[i],t[i]));return i=>{for(const o in r)n[o]=r[o](i);return n}},YU=(e,t)=>{const n=Tl.createTransformer(t),r=Y1(e),i=Y1(t);return r.numVars===i.numVars&&r.numColors===i.numColors&&r.numNumbers>=i.numNumbers?hl(QU(r.values,i.values),n):KU(e,t)},Vg=(e,t,n)=>{const r=t-e;return r===0?1:(n-e)/r},p9=(e,t)=>n=>Wt(e,t,n);function kAe(e){return typeof e=="number"?p9:typeof e=="string"?Mr.test(e)?VU:YU:Array.isArray(e)?QU:typeof e=="object"?AAe:p9}function PAe(e,t,n){const r=[],i=n||kAe(e[0]),o=e.length-1;for(let s=0;st[0];e[0]>e[o-1]&&(e=[...e].reverse(),t=[...t].reverse());const s=PAe(t,r,i),a=s.length,l=c=>{let u=0;if(a>1)for(;ul(El(e[0],e[o-1],c)):l}function IAe(e,t){const n=e[e.length-1];for(let r=1;r<=t;r++){const i=Vg(0,t,r);e.push(Wt(n,1,i))}}function MAe(e){const t=[0];return IAe(t,e.length-1),t}function RAe(e,t){return e.map(n=>n*t)}function OAe(e,t){return e.map(()=>t||FU).splice(0,e.length-1)}function Z1({duration:e=300,keyframes:t,times:n,ease:r="easeInOut"}){const i=pAe(r)?r.map(f9):f9(r),o={done:!1,value:t[0]},s=RAe(n&&n.length===t.length?n:MAe(t),e),a=ZU(s,t,{ease:Array.isArray(i)?i:OAe(t,i)});return{calculatedDuration:e,next:l=>(o.value=a(l),o.done=l>=e,o)}}function JU(e,t){return t?e*(1e3/t):0}const $Ae=5;function eG(e,t,n){const r=Math.max(t-$Ae,0);return JU(n-e(r),t-r)}const qw=.001,NAe=.01,g9=10,FAe=.05,DAe=1;function LAe({duration:e=800,bounce:t=.25,velocity:n=0,mass:r=1}){let i,o;oAe(e<=pl(g9));let s=1-t;s=El(FAe,DAe,s),e=El(NAe,g9,ra(e)),s<1?(i=c=>{const u=c*s,d=u*e,f=u-n,h=N3(c,s),p=Math.exp(-d);return qw-f/h*p},o=c=>{const d=c*s*e,f=d*n+n,h=Math.pow(s,2)*Math.pow(c,2)*e,p=Math.exp(-d),m=N3(Math.pow(c,2),s);return(-i(c)+qw>0?-1:1)*((f-h)*p)/m}):(i=c=>{const u=Math.exp(-c*e),d=(c-n)*e+1;return-qw+u*d},o=c=>{const u=Math.exp(-c*e),d=(n-c)*(e*e);return u*d});const a=5/e,l=zAe(i,o,a);if(e=pl(e),isNaN(l))return{stiffness:100,damping:10,duration:e};{const c=Math.pow(l,2)*r;return{stiffness:c,damping:s*2*Math.sqrt(r*c),duration:e}}}const BAe=12;function zAe(e,t,n){let r=n;for(let i=1;ie[n]!==void 0)}function UAe(e){let t={velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1,...e};if(!m9(e,VAe)&&m9(e,jAe)){const n=LAe(e);t={...t,...n,velocity:0,mass:1},t.isResolvedFromDuration=!0}return t}function tG({keyframes:e,restDelta:t,restSpeed:n,...r}){const i=e[0],o=e[e.length-1],s={done:!1,value:i},{stiffness:a,damping:l,mass:c,velocity:u,duration:d,isResolvedFromDuration:f}=UAe(r),h=u?-ra(u):0,p=l/(2*Math.sqrt(a*c)),m=o-i,_=ra(Math.sqrt(a/c)),v=Math.abs(m)<5;n||(n=v?.01:2),t||(t=v?.005:.5);let y;if(p<1){const g=N3(_,p);y=b=>{const S=Math.exp(-p*_*b);return o-S*((h+p*_*m)/g*Math.sin(g*b)+m*Math.cos(g*b))}}else if(p===1)y=g=>o-Math.exp(-_*g)*(m+(h+_*m)*g);else{const g=_*Math.sqrt(p*p-1);y=b=>{const S=Math.exp(-p*_*b),w=Math.min(g*b,300);return o-S*((h+p*_*m)*Math.sinh(w)+g*m*Math.cosh(w))/g}}return{calculatedDuration:f&&d||null,next:g=>{const b=y(g);if(f)s.done=g>=d;else{let S=h;g!==0&&(p<1?S=eG(y,g,b):S=0);const w=Math.abs(S)<=n,C=Math.abs(o-b)<=t;s.done=w&&C}return s.value=s.done?o:b,s}}}function y9({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:o=500,modifyTarget:s,min:a,max:l,restDelta:c=.5,restSpeed:u}){const d=e[0],f={done:!1,value:d},h=x=>a!==void 0&&xl,p=x=>a===void 0?l:l===void 0||Math.abs(a-x)-m*Math.exp(-x/r),g=x=>v+y(x),b=x=>{const k=y(x),A=g(x);f.done=Math.abs(k)<=c,f.value=f.done?v:A};let S,w;const C=x=>{h(f.value)&&(S=x,w=tG({keyframes:[f.value,p(f.value)],velocity:eG(g,x,f.value),damping:i,stiffness:o,restDelta:c,restSpeed:u}))};return C(0),{calculatedDuration:null,next:x=>{let k=!1;return!w&&S===void 0&&(k=!0,b(x),C(x)),S!==void 0&&x>S?w.next(x-S):(!k&&b(x),f)}}}const GAe=e=>{const t=({timestamp:n})=>e(n);return{start:()=>Pt.update(t,!0),stop:()=>pa(t),now:()=>$n.isProcessing?$n.timestamp:performance.now()}},v9=2e4;function b9(e){let t=0;const n=50;let r=e.next(t);for(;!r.done&&t=v9?1/0:t}const HAe={decay:y9,inertia:y9,tween:Z1,keyframes:Z1,spring:tG};function J1({autoplay:e=!0,delay:t=0,driver:n=GAe,keyframes:r,type:i="keyframes",repeat:o=0,repeatDelay:s=0,repeatType:a="loop",onPlay:l,onStop:c,onComplete:u,onUpdate:d,...f}){let h=1,p=!1,m,_;const v=()=>{_=new Promise(z=>{m=z})};v();let y;const g=HAe[i]||Z1;let b;g!==Z1&&typeof r[0]!="number"&&(b=ZU([0,100],r,{clamp:!1}),r=[0,100]);const S=g({...f,keyframes:r});let w;a==="mirror"&&(w=g({...f,keyframes:[...r].reverse(),velocity:-(f.velocity||0)}));let C="idle",x=null,k=null,A=null;S.calculatedDuration===null&&o&&(S.calculatedDuration=b9(S));const{calculatedDuration:R}=S;let L=1/0,M=1/0;R!==null&&(L=R+s,M=L*(o+1)-s);let E=0;const P=z=>{if(k===null)return;h>0&&(k=Math.min(k,z)),h<0&&(k=Math.min(z-M/h,k)),x!==null?E=x:E=Math.round(z-k)*h;const V=E-t*(h>=0?1:-1),H=h>=0?V<0:V>M;E=Math.max(V,0),C==="finished"&&x===null&&(E=M);let X=E,te=S;if(o){const Z=E/L;let oe=Math.floor(Z),be=Z%1;!be&&Z>=1&&(be=1),be===1&&oe--,oe=Math.min(oe,o+1);const Me=!!(oe%2);Me&&(a==="reverse"?(be=1-be,s&&(be-=s/L)):a==="mirror"&&(te=w));let lt=El(0,1,be);E>M&&(lt=a==="reverse"&&Me?1:0),X=lt*L}const ee=H?{done:!1,value:r[0]}:te.next(X);b&&(ee.value=b(ee.value));let{done:j}=ee;!H&&R!==null&&(j=h>=0?E>=M:E<=0);const q=x===null&&(C==="finished"||C==="running"&&j);return d&&d(ee.value),q&&$(),ee},O=()=>{y&&y.stop(),y=void 0},F=()=>{C="idle",O(),m(),v(),k=A=null},$=()=>{C="finished",u&&u(),O(),m()},D=()=>{if(p)return;y||(y=n(P));const z=y.now();l&&l(),x!==null?k=z-x:(!k||C==="finished")&&(k=z),C==="finished"&&v(),A=k,x=null,C="running",y.start()};e&&D();const N={then(z,V){return _.then(z,V)},get time(){return ra(E)},set time(z){z=pl(z),E=z,x!==null||!y||h===0?x=z:k=y.now()-z/h},get duration(){const z=S.calculatedDuration===null?b9(S):S.calculatedDuration;return ra(z)},get speed(){return h},set speed(z){z===h||!y||(h=z,N.time=ra(E))},get state(){return C},play:D,pause:()=>{C="paused",x=E},stop:()=>{p=!0,C!=="idle"&&(C="idle",c&&c(),F())},cancel:()=>{A!==null&&P(A),F()},complete:()=>{C="finished"},sample:z=>(k=0,P(z))};return N}function WAe(e){let t;return()=>(t===void 0&&(t=e()),t)}const qAe=WAe(()=>Object.hasOwnProperty.call(Element.prototype,"animate")),KAe=new Set(["opacity","clipPath","filter","transform","backgroundColor"]),py=10,XAe=2e4,QAe=(e,t)=>t.type==="spring"||e==="backgroundColor"||!RU(t.ease);function YAe(e,t,{onUpdate:n,onComplete:r,...i}){if(!(qAe()&&KAe.has(t)&&!i.repeatDelay&&i.repeatType!=="mirror"&&i.damping!==0&&i.type!=="inertia"))return!1;let s=!1,a,l;const c=()=>{l=new Promise(y=>{a=y})};c();let{keyframes:u,duration:d=300,ease:f,times:h}=i;if(QAe(t,i)){const y=J1({...i,repeat:0,delay:0});let g={done:!1,value:u[0]};const b=[];let S=0;for(;!g.done&&Sp.cancel(),_=()=>{Pt.update(m),a(),c()};return p.onfinish=()=>{e.set(lAe(u,i)),r&&r(),_()},{then(y,g){return l.then(y,g)},attachTimeline(y){return p.timeline=y,p.onfinish=null,tn},get time(){return ra(p.currentTime||0)},set time(y){p.currentTime=pl(y)},get speed(){return p.playbackRate},set speed(y){p.playbackRate=y},get duration(){return ra(d)},play:()=>{s||(p.play(),pa(m))},pause:()=>p.pause(),stop:()=>{if(s=!0,p.playState==="idle")return;const{currentTime:y}=p;if(y){const g=J1({...i,autoplay:!1});e.setWithVelocity(g.sample(y-py).value,g.sample(y).value,py)}_()},complete:()=>p.finish(),cancel:_}}function ZAe({keyframes:e,delay:t,onUpdate:n,onComplete:r}){const i=()=>(n&&n(e[e.length-1]),r&&r(),{time:0,speed:1,duration:0,play:tn,pause:tn,stop:tn,then:o=>(o(),Promise.resolve()),cancel:tn,complete:tn});return t?J1({keyframes:[0,1],duration:0,delay:t,onComplete:i}):i()}const JAe={type:"spring",stiffness:500,damping:25,restSpeed:10},eke=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),tke={type:"keyframes",duration:.8},nke={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},rke=(e,{keyframes:t})=>t.length>2?tke:du.has(e)?e.startsWith("scale")?eke(t[1]):JAe:nke,F3=(e,t)=>e==="zIndex"?!1:!!(typeof t=="number"||Array.isArray(t)||typeof t=="string"&&(Tl.test(t)||t==="0")&&!t.startsWith("url(")),ike=new Set(["brightness","contrast","saturate","opacity"]);function oke(e){const[t,n]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[r]=n.match($S)||[];if(!r)return e;const i=n.replace(r,"");let o=ike.has(t)?1:0;return r!==n&&(o*=100),t+"("+o+i+")"}const ske=/([a-z-]*)\(.*?\)/g,D3={...Tl,getAnimatableNone:e=>{const t=e.match(ske);return t?t.map(oke).join(" "):e}},ake={...gU,color:Mr,backgroundColor:Mr,outlineColor:Mr,fill:Mr,stroke:Mr,borderColor:Mr,borderTopColor:Mr,borderRightColor:Mr,borderBottomColor:Mr,borderLeftColor:Mr,filter:D3,WebkitFilter:D3},CA=e=>ake[e];function nG(e,t){let n=CA(e);return n!==D3&&(n=Tl),n.getAnimatableNone?n.getAnimatableNone(t):void 0}const rG=e=>/^0[^.\s]+$/.test(e);function lke(e){if(typeof e=="number")return e===0;if(e!==null)return e==="none"||e==="0"||rG(e)}function cke(e,t,n,r){const i=F3(t,n);let o;Array.isArray(n)?o=[...n]:o=[null,n];const s=r.from!==void 0?r.from:e.get();let a;const l=[];for(let c=0;ci=>{const o=EA(r,e)||{},s=o.delay||r.delay||0;let{elapsed:a=0}=r;a=a-pl(s);const l=cke(t,e,n,o),c=l[0],u=l[l.length-1],d=F3(e,c),f=F3(e,u);let h={keyframes:l,velocity:t.getVelocity(),ease:"easeOut",...o,delay:-a,onUpdate:p=>{t.set(p),o.onUpdate&&o.onUpdate(p)},onComplete:()=>{i(),o.onComplete&&o.onComplete()}};if(uke(o)||(h={...h,...rke(e,h)}),h.duration&&(h.duration=pl(h.duration)),h.repeatDelay&&(h.repeatDelay=pl(h.repeatDelay)),!d||!f||sAe.current||o.type===!1)return ZAe(h);if(t.owner&&t.owner.current instanceof HTMLElement&&!t.owner.getProps().onUpdate){const p=YAe(t,e,h);if(p)return p}return J1(h)};function eb(e){return!!(ri(e)&&e.add)}const iG=e=>/^\-?\d*\.?\d+$/.test(e);function AA(e,t){e.indexOf(t)===-1&&e.push(t)}function kA(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}class PA{constructor(){this.subscriptions=[]}add(t){return AA(this.subscriptions,t),()=>kA(this.subscriptions,t)}notify(t,n,r){const i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](t,n,r);else for(let o=0;o!isNaN(parseFloat(e));class fke{constructor(t,n={}){this.version="10.16.15",this.timeDelta=0,this.lastUpdated=0,this.canTrackVelocity=!1,this.events={},this.updateAndNotify=(r,i=!0)=>{this.prev=this.current,this.current=r;const{delta:o,timestamp:s}=$n;this.lastUpdated!==s&&(this.timeDelta=o,this.lastUpdated=s,Pt.postRender(this.scheduleVelocityCheck)),this.prev!==this.current&&this.events.change&&this.events.change.notify(this.current),this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()),i&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.scheduleVelocityCheck=()=>Pt.postRender(this.velocityCheck),this.velocityCheck=({timestamp:r})=>{r!==this.lastUpdated&&(this.prev=this.current,this.events.velocityChange&&this.events.velocityChange.notify(this.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=dke(this.current),this.owner=n.owner}onChange(t){return this.on("change",t)}on(t,n){this.events[t]||(this.events[t]=new PA);const r=this.events[t].add(n);return t==="change"?()=>{r(),Pt.read(()=>{this.events.change.getSize()||this.stop()})}:r}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,n){this.passiveEffect=t,this.stopPassiveEffect=n}set(t,n=!0){!n||!this.passiveEffect?this.updateAndNotify(t,n):this.passiveEffect(t,this.updateAndNotify)}setWithVelocity(t,n,r){this.set(n),this.prev=t,this.timeDelta=r}jump(t){this.updateAndNotify(t),this.prev=t,this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return this.current}getPrevious(){return this.prev}getVelocity(){return this.canTrackVelocity?JU(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0}start(t){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=t(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function _f(e,t){return new fke(e,t)}const oG=e=>t=>t.test(e),hke={test:e=>e==="auto",parse:e=>e},sG=[fu,Pe,bs,Na,STe,_Te,hke],Ch=e=>sG.find(oG(e)),pke=[...sG,Mr,Tl],gke=e=>pke.find(oG(e));function mke(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,_f(n))}function yke(e,t){const n=FS(e,t);let{transitionEnd:r={},transition:i={},...o}=n?e.makeTargetAnimatable(n,!1):{};o={...o,...r};for(const s in o){const a=NTe(o[s]);mke(e,s,a)}}function vke(e,t,n){var r,i;const o=Object.keys(t).filter(a=>!e.hasValue(a)),s=o.length;if(s)for(let a=0;al.remove(d))),c.push(v)}return s&&Promise.all(c).then(()=>{s&&yke(e,s)}),c}function L3(e,t,n={}){const r=FS(e,t,n.custom);let{transition:i=e.getDefaultTransition()||{}}=r||{};n.transitionOverride&&(i=n.transitionOverride);const o=r?()=>Promise.all(aG(e,r,n)):()=>Promise.resolve(),s=e.variantChildren&&e.variantChildren.size?(l=0)=>{const{delayChildren:c=0,staggerChildren:u,staggerDirection:d}=i;return wke(e,t,c+l,u,d,n)}:()=>Promise.resolve(),{when:a}=i;if(a){const[l,c]=a==="beforeChildren"?[o,s]:[s,o];return l().then(()=>c())}else return Promise.all([o(),s(n.delay)])}function wke(e,t,n=0,r=0,i=1,o){const s=[],a=(e.variantChildren.size-1)*r,l=i===1?(c=0)=>c*r:(c=0)=>a-c*r;return Array.from(e.variantChildren).sort(Cke).forEach((c,u)=>{c.notify("AnimationStart",t),s.push(L3(c,t,{...o,delay:n+l(u)}).then(()=>c.notify("AnimationComplete",t)))}),Promise.all(s)}function Cke(e,t){return e.sortNodePosition(t)}function Eke(e,t,n={}){e.notify("AnimationStart",t);let r;if(Array.isArray(t)){const i=t.map(o=>L3(e,o,n));r=Promise.all(i)}else if(typeof t=="string")r=L3(e,t,n);else{const i=typeof t=="function"?FS(e,t,n.custom):t;r=Promise.all(aG(e,i,n))}return r.then(()=>e.notify("AnimationComplete",t))}const Tke=[...uA].reverse(),Ake=uA.length;function kke(e){return t=>Promise.all(t.map(({animation:n,options:r})=>Eke(e,n,r)))}function Pke(e){let t=kke(e);const n=Mke();let r=!0;const i=(l,c)=>{const u=FS(e,c);if(u){const{transition:d,transitionEnd:f,...h}=u;l={...l,...h,...f}}return l};function o(l){t=l(e)}function s(l,c){const u=e.getProps(),d=e.getVariantContext(!0)||{},f=[],h=new Set;let p={},m=1/0;for(let v=0;vm&&S;const A=Array.isArray(b)?b:[b];let R=A.reduce(i,{});w===!1&&(R={});const{prevResolvedValues:L={}}=g,M={...L,...R},E=P=>{k=!0,h.delete(P),g.needsAnimating[P]=!0};for(const P in M){const O=R[P],F=L[P];p.hasOwnProperty(P)||(O!==F?Q1(O)&&Q1(F)?!IU(O,F)||x?E(P):g.protectedKeys[P]=!0:O!==void 0?E(P):h.add(P):O!==void 0&&h.has(P)?E(P):g.protectedKeys[P]=!0)}g.prevProp=b,g.prevResolvedValues=R,g.isActive&&(p={...p,...R}),r&&e.blockInitialAnimation&&(k=!1),k&&!C&&f.push(...A.map(P=>({animation:P,options:{type:y,...l}})))}if(h.size){const v={};h.forEach(y=>{const g=e.getBaseTarget(y);g!==void 0&&(v[y]=g)}),f.push({animation:v})}let _=!!f.length;return r&&(u.initial===!1||u.initial===u.animate)&&!e.manuallyAnimateOnMount&&(_=!1),r=!1,_?t(f):Promise.resolve()}function a(l,c,u){var d;if(n[l].isActive===c)return Promise.resolve();(d=e.variantChildren)===null||d===void 0||d.forEach(h=>{var p;return(p=h.animationState)===null||p===void 0?void 0:p.setActive(l,c)}),n[l].isActive=c;const f=s(u,l);for(const h in n)n[h].protectedKeys={};return f}return{animateChanges:s,setActive:a,setAnimateFunction:o,getState:()=>n}}function Ike(e,t){return typeof t=="string"?t!==e:Array.isArray(t)?!IU(t,e):!1}function Zl(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function Mke(){return{animate:Zl(!0),whileInView:Zl(),whileHover:Zl(),whileTap:Zl(),whileDrag:Zl(),whileFocus:Zl(),exit:Zl()}}class Rke extends Ll{constructor(t){super(t),t.animationState||(t.animationState=Pke(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();this.unmount(),RS(t)&&(this.unmount=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:n}=this.node.prevProps||{};t!==n&&this.updateAnimationControlsSubscription()}unmount(){}}let Oke=0;class $ke extends Ll{constructor(){super(...arguments),this.id=Oke++}update(){if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:n,custom:r}=this.node.presenceContext,{isPresent:i}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===i)return;const o=this.node.animationState.setActive("exit",!t,{custom:r??this.node.getProps().custom});n&&!t&&o.then(()=>n(this.id))}mount(){const{register:t}=this.node.presenceContext||{};t&&(this.unmount=t(this.id))}unmount(){}}const Nke={animation:{Feature:Rke},exit:{Feature:$ke}},_9=(e,t)=>Math.abs(e-t);function Fke(e,t){const n=_9(e.x,t.x),r=_9(e.y,t.y);return Math.sqrt(n**2+r**2)}class lG{constructor(t,n,{transformPagePoint:r,contextWindow:i}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const u=Xw(this.lastMoveEventInfo,this.history),d=this.startEvent!==null,f=Fke(u.offset,{x:0,y:0})>=3;if(!d&&!f)return;const{point:h}=u,{timestamp:p}=$n;this.history.push({...h,timestamp:p});const{onStart:m,onMove:_}=this.handlers;d||(m&&m(this.lastMoveEvent,u),this.startEvent=this.lastMoveEvent),_&&_(this.lastMoveEvent,u)},this.handlePointerMove=(u,d)=>{this.lastMoveEvent=u,this.lastMoveEventInfo=Kw(d,this.transformPagePoint),Pt.update(this.updatePoint,!0)},this.handlePointerUp=(u,d)=>{if(this.end(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const{onEnd:f,onSessionEnd:h}=this.handlers,p=Xw(u.type==="pointercancel"?this.lastMoveEventInfo:Kw(d,this.transformPagePoint),this.history);this.startEvent&&f&&f(u,p),h&&h(u,p)},!EU(t))return;this.handlers=n,this.transformPagePoint=r,this.contextWindow=i||window;const o=NS(t),s=Kw(o,this.transformPagePoint),{point:a}=s,{timestamp:l}=$n;this.history=[{...a,timestamp:l}];const{onSessionStart:c}=n;c&&c(t,Xw(s,this.history)),this.removeListeners=hl(na(this.contextWindow,"pointermove",this.handlePointerMove),na(this.contextWindow,"pointerup",this.handlePointerUp),na(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),pa(this.updatePoint)}}function Kw(e,t){return t?{point:t(e.point)}:e}function S9(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Xw({point:e},t){return{point:e,delta:S9(e,cG(t)),offset:S9(e,Dke(t)),velocity:Lke(t,.1)}}function Dke(e){return e[0]}function cG(e){return e[e.length-1]}function Lke(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null;const i=cG(e);for(;n>=0&&(r=e[n],!(i.timestamp-r.timestamp>pl(t)));)n--;if(!r)return{x:0,y:0};const o=ra(i.timestamp-r.timestamp);if(o===0)return{x:0,y:0};const s={x:(i.x-r.x)/o,y:(i.y-r.y)/o};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}function Ai(e){return e.max-e.min}function B3(e,t=0,n=.01){return Math.abs(e-t)<=n}function x9(e,t,n,r=.5){e.origin=r,e.originPoint=Wt(t.min,t.max,e.origin),e.scale=Ai(n)/Ai(t),(B3(e.scale,1,1e-4)||isNaN(e.scale))&&(e.scale=1),e.translate=Wt(n.min,n.max,e.origin)-e.originPoint,(B3(e.translate)||isNaN(e.translate))&&(e.translate=0)}function Ap(e,t,n,r){x9(e.x,t.x,n.x,r?r.originX:void 0),x9(e.y,t.y,n.y,r?r.originY:void 0)}function w9(e,t,n){e.min=n.min+t.min,e.max=e.min+Ai(t)}function Bke(e,t,n){w9(e.x,t.x,n.x),w9(e.y,t.y,n.y)}function C9(e,t,n){e.min=t.min-n.min,e.max=e.min+Ai(t)}function kp(e,t,n){C9(e.x,t.x,n.x),C9(e.y,t.y,n.y)}function zke(e,{min:t,max:n},r){return t!==void 0&&en&&(e=r?Wt(n,e,r.max):Math.min(e,n)),e}function E9(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function jke(e,{top:t,left:n,bottom:r,right:i}){return{x:E9(e.x,n,i),y:E9(e.y,t,r)}}function T9(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.minr?n=Vg(t.min,t.max-r,e.min):r>i&&(n=Vg(e.min,e.max-i,t.min)),El(0,1,n)}function Gke(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}const z3=.35;function Hke(e=z3){return e===!1?e=0:e===!0&&(e=z3),{x:A9(e,"left","right"),y:A9(e,"top","bottom")}}function A9(e,t,n){return{min:k9(e,t),max:k9(e,n)}}function k9(e,t){return typeof e=="number"?e:e[t]||0}const P9=()=>({translate:0,scale:1,origin:0,originPoint:0}),vd=()=>({x:P9(),y:P9()}),I9=()=>({min:0,max:0}),gn=()=>({x:I9(),y:I9()});function Yo(e){return[e("x"),e("y")]}function uG({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function Wke({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function qke(e,t){if(!t)return e;const n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function Qw(e){return e===void 0||e===1}function j3({scale:e,scaleX:t,scaleY:n}){return!Qw(e)||!Qw(t)||!Qw(n)}function cc(e){return j3(e)||dG(e)||e.z||e.rotate||e.rotateX||e.rotateY}function dG(e){return M9(e.x)||M9(e.y)}function M9(e){return e&&e!=="0%"}function tb(e,t,n){const r=e-n,i=t*r;return n+i}function R9(e,t,n,r,i){return i!==void 0&&(e=tb(e,i,r)),tb(e,n,r)+t}function V3(e,t=0,n=1,r,i){e.min=R9(e.min,t,n,r,i),e.max=R9(e.max,t,n,r,i)}function fG(e,{x:t,y:n}){V3(e.x,t.translate,t.scale,t.originPoint),V3(e.y,n.translate,n.scale,n.originPoint)}function Kke(e,t,n,r=!1){const i=n.length;if(!i)return;t.x=t.y=1;let o,s;for(let a=0;a1.0000000000001||e<.999999999999?e:1}function Va(e,t){e.min=e.min+t,e.max=e.max+t}function $9(e,t,[n,r,i]){const o=t[i]!==void 0?t[i]:.5,s=Wt(e.min,e.max,o);V3(e,t[n],t[r],s,t.scale)}const Xke=["x","scaleX","originX"],Qke=["y","scaleY","originY"];function bd(e,t){$9(e.x,t,Xke),$9(e.y,t,Qke)}function hG(e,t){return uG(qke(e.getBoundingClientRect(),t))}function Yke(e,t,n){const r=hG(e,n),{scroll:i}=t;return i&&(Va(r.x,i.offset.x),Va(r.y,i.offset.y)),r}const pG=({current:e})=>e?e.ownerDocument.defaultView:null,Zke=new WeakMap;class Jke{constructor(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=gn(),this.visualElement=t}start(t,{snapToCursor:n=!1}={}){const{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;const i=l=>{this.stopAnimation(),n&&this.snapToCursor(NS(l,"page").point)},o=(l,c)=>{const{drag:u,dragPropagation:d,onDragStart:f}=this.getProps();if(u&&!d&&(this.openGlobalLock&&this.openGlobalLock(),this.openGlobalLock=AU(u),!this.openGlobalLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),Yo(p=>{let m=this.getAxisMotionValue(p).get()||0;if(bs.test(m)){const{projection:_}=this.visualElement;if(_&&_.layout){const v=_.layout.layoutBox[p];v&&(m=Ai(v)*(parseFloat(m)/100))}}this.originPoint[p]=m}),f&&Pt.update(()=>f(l,c),!1,!0);const{animationState:h}=this.visualElement;h&&h.setActive("whileDrag",!0)},s=(l,c)=>{const{dragPropagation:u,dragDirectionLock:d,onDirectionLock:f,onDrag:h}=this.getProps();if(!u&&!this.openGlobalLock)return;const{offset:p}=c;if(d&&this.currentDirection===null){this.currentDirection=ePe(p),this.currentDirection!==null&&f&&f(this.currentDirection);return}this.updateAxis("x",c.point,p),this.updateAxis("y",c.point,p),this.visualElement.render(),h&&h(l,c)},a=(l,c)=>this.stop(l,c);this.panSession=new lG(t,{onSessionStart:i,onStart:o,onMove:s,onSessionEnd:a},{transformPagePoint:this.visualElement.getTransformPagePoint(),contextWindow:pG(this.visualElement)})}stop(t,n){const r=this.isDragging;if(this.cancel(),!r)return;const{velocity:i}=n;this.startAnimation(i);const{onDragEnd:o}=this.getProps();o&&Pt.update(()=>o(t,n))}cancel(){this.isDragging=!1;const{projection:t,animationState:n}=this.visualElement;t&&(t.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:r}=this.getProps();!r&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),n&&n.setActive("whileDrag",!1)}updateAxis(t,n,r){const{drag:i}=this.getProps();if(!r||!gy(t,i,this.currentDirection))return;const o=this.getAxisMotionValue(t);let s=this.originPoint[t]+r[t];this.constraints&&this.constraints[t]&&(s=zke(s,this.constraints[t],this.elastic[t])),o.set(s)}resolveConstraints(){var t;const{dragConstraints:n,dragElastic:r}=this.getProps(),i=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(t=this.visualElement.projection)===null||t===void 0?void 0:t.layout,o=this.constraints;n&&md(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):n&&i?this.constraints=jke(i.layoutBox,n):this.constraints=!1,this.elastic=Hke(r),o!==this.constraints&&i&&this.constraints&&!this.hasMutatedConstraints&&Yo(s=>{this.getAxisMotionValue(s)&&(this.constraints[s]=Gke(i.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:n}=this.getProps();if(!t||!md(t))return!1;const r=t.current,{projection:i}=this.visualElement;if(!i||!i.layout)return!1;const o=Yke(r,i.root,this.visualElement.getTransformPagePoint());let s=Vke(i.layout.layoutBox,o);if(n){const a=n(Wke(s));this.hasMutatedConstraints=!!a,a&&(s=uG(a))}return s}startAnimation(t){const{drag:n,dragMomentum:r,dragElastic:i,dragTransition:o,dragSnapToOrigin:s,onDragTransitionEnd:a}=this.getProps(),l=this.constraints||{},c=Yo(u=>{if(!gy(u,n,this.currentDirection))return;let d=l&&l[u]||{};s&&(d={min:0,max:0});const f=i?200:1e6,h=i?40:1e7,p={type:"inertia",velocity:r?t[u]:0,bounceStiffness:f,bounceDamping:h,timeConstant:750,restDelta:1,restSpeed:10,...o,...d};return this.startAxisValueAnimation(u,p)});return Promise.all(c).then(a)}startAxisValueAnimation(t,n){const r=this.getAxisMotionValue(t);return r.start(TA(t,r,0,n))}stopAnimation(){Yo(t=>this.getAxisMotionValue(t).stop())}getAxisMotionValue(t){const n="_drag"+t.toUpperCase(),r=this.visualElement.getProps(),i=r[n];return i||this.visualElement.getValue(t,(r.initial?r.initial[t]:void 0)||0)}snapToCursor(t){Yo(n=>{const{drag:r}=this.getProps();if(!gy(n,r,this.currentDirection))return;const{projection:i}=this.visualElement,o=this.getAxisMotionValue(n);if(i&&i.layout){const{min:s,max:a}=i.layout.layoutBox[n];o.set(t[n]-Wt(s,a,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:n}=this.getProps(),{projection:r}=this.visualElement;if(!md(n)||!r||!this.constraints)return;this.stopAnimation();const i={x:0,y:0};Yo(s=>{const a=this.getAxisMotionValue(s);if(a){const l=a.get();i[s]=Uke({min:l,max:l},this.constraints[s])}});const{transformTemplate:o}=this.visualElement.getProps();this.visualElement.current.style.transform=o?o({},""):"none",r.root&&r.root.updateScroll(),r.updateLayout(),this.resolveConstraints(),Yo(s=>{if(!gy(s,t,null))return;const a=this.getAxisMotionValue(s),{min:l,max:c}=this.constraints[s];a.set(Wt(l,c,i[s]))})}addListeners(){if(!this.visualElement.current)return;Zke.set(this.visualElement,this);const t=this.visualElement.current,n=na(t,"pointerdown",l=>{const{drag:c,dragListener:u=!0}=this.getProps();c&&u&&this.start(l)}),r=()=>{const{dragConstraints:l}=this.getProps();md(l)&&(this.constraints=this.resolveRefConstraints())},{projection:i}=this.visualElement,o=i.addEventListener("measure",r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),r();const s=Ys(window,"resize",()=>this.scalePositionWithinConstraints()),a=i.addEventListener("didUpdate",({delta:l,hasLayoutChanged:c})=>{this.isDragging&&c&&(Yo(u=>{const d=this.getAxisMotionValue(u);d&&(this.originPoint[u]+=l[u].translate,d.set(d.get()+l[u].translate))}),this.visualElement.render())});return()=>{s(),n(),o(),a&&a()}}getProps(){const t=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:r=!1,dragPropagation:i=!1,dragConstraints:o=!1,dragElastic:s=z3,dragMomentum:a=!0}=t;return{...t,drag:n,dragDirectionLock:r,dragPropagation:i,dragConstraints:o,dragElastic:s,dragMomentum:a}}}function gy(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function ePe(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}class tPe extends Ll{constructor(t){super(t),this.removeGroupControls=tn,this.removeListeners=tn,this.controls=new Jke(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||tn}unmount(){this.removeGroupControls(),this.removeListeners()}}const N9=e=>(t,n)=>{e&&Pt.update(()=>e(t,n))};class nPe extends Ll{constructor(){super(...arguments),this.removePointerDownListener=tn}onPointerDown(t){this.session=new lG(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:pG(this.node)})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:n,onPan:r,onPanEnd:i}=this.node.getProps();return{onSessionStart:N9(t),onStart:N9(n),onMove:r,onEnd:(o,s)=>{delete this.session,i&&Pt.update(()=>i(o,s))}}}mount(){this.removePointerDownListener=na(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}function rPe(){const e=I.useContext(Xm);if(e===null)return[!0,null];const{isPresent:t,onExitComplete:n,register:r}=e,i=I.useId();return I.useEffect(()=>r(i),[]),!t&&n?[!1,()=>n&&n(i)]:[!0]}function iPe(){return oPe(I.useContext(Xm))}function oPe(e){return e===null?!0:e.isPresent}const _v={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function F9(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}const Eh={correct:(e,t)=>{if(!t.target)return e;if(typeof e=="string")if(Pe.test(e))e=parseFloat(e);else return e;const n=F9(e,t.target.x),r=F9(e,t.target.y);return`${n}% ${r}%`}},sPe={correct:(e,{treeScale:t,projectionDelta:n})=>{const r=e,i=Tl.parse(e);if(i.length>5)return r;const o=Tl.createTransformer(e),s=typeof i[0]!="number"?1:0,a=n.x.scale*t.x,l=n.y.scale*t.y;i[0+s]/=a,i[1+s]/=l;const c=Wt(a,l,.5);return typeof i[2+s]=="number"&&(i[2+s]/=c),typeof i[3+s]=="number"&&(i[3+s]/=c),o(i)}};class aPe extends Q.Component{componentDidMount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r,layoutId:i}=this.props,{projection:o}=t;hTe(lPe),o&&(n.group&&n.group.add(o),r&&r.register&&i&&r.register(o),o.root.didUpdate(),o.addEventListener("animationComplete",()=>{this.safeToRemove()}),o.setOptions({...o.options,onExitComplete:()=>this.safeToRemove()})),_v.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:n,visualElement:r,drag:i,isPresent:o}=this.props,s=r.projection;return s&&(s.isPresent=o,i||t.layoutDependency!==n||n===void 0?s.willUpdate():this.safeToRemove(),t.isPresent!==o&&(o?s.promote():s.relegate()||Pt.postRender(()=>{const a=s.getStack();(!a||!a.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:t}=this.props.visualElement;t&&(t.root.didUpdate(),queueMicrotask(()=>{!t.currentAnimation&&t.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:r}=this.props,{projection:i}=t;i&&(i.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(i),r&&r.deregister&&r.deregister(i))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function gG(e){const[t,n]=rPe(),r=I.useContext(fA);return Q.createElement(aPe,{...e,layoutGroup:r,switchLayoutGroup:I.useContext(uU),isPresent:t,safeToRemove:n})}const lPe={borderRadius:{...Eh,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:Eh,borderTopRightRadius:Eh,borderBottomLeftRadius:Eh,borderBottomRightRadius:Eh,boxShadow:sPe},mG=["TopLeft","TopRight","BottomLeft","BottomRight"],cPe=mG.length,D9=e=>typeof e=="string"?parseFloat(e):e,L9=e=>typeof e=="number"||Pe.test(e);function uPe(e,t,n,r,i,o){i?(e.opacity=Wt(0,n.opacity!==void 0?n.opacity:1,dPe(r)),e.opacityExit=Wt(t.opacity!==void 0?t.opacity:1,0,fPe(r))):o&&(e.opacity=Wt(t.opacity!==void 0?t.opacity:1,n.opacity!==void 0?n.opacity:1,r));for(let s=0;srt?1:n(Vg(e,t,r))}function z9(e,t){e.min=t.min,e.max=t.max}function Li(e,t){z9(e.x,t.x),z9(e.y,t.y)}function j9(e,t,n,r,i){return e-=t,e=tb(e,1/n,r),i!==void 0&&(e=tb(e,1/i,r)),e}function hPe(e,t=0,n=1,r=.5,i,o=e,s=e){if(bs.test(t)&&(t=parseFloat(t),t=Wt(s.min,s.max,t/100)-s.min),typeof t!="number")return;let a=Wt(o.min,o.max,r);e===o&&(a-=t),e.min=j9(e.min,t,n,a,i),e.max=j9(e.max,t,n,a,i)}function V9(e,t,[n,r,i],o,s){hPe(e,t[n],t[r],t[i],t.scale,o,s)}const pPe=["x","scaleX","originX"],gPe=["y","scaleY","originY"];function U9(e,t,n,r){V9(e.x,t,pPe,n?n.x:void 0,r?r.x:void 0),V9(e.y,t,gPe,n?n.y:void 0,r?r.y:void 0)}function G9(e){return e.translate===0&&e.scale===1}function vG(e){return G9(e.x)&&G9(e.y)}function mPe(e,t){return e.x.min===t.x.min&&e.x.max===t.x.max&&e.y.min===t.y.min&&e.y.max===t.y.max}function bG(e,t){return Math.round(e.x.min)===Math.round(t.x.min)&&Math.round(e.x.max)===Math.round(t.x.max)&&Math.round(e.y.min)===Math.round(t.y.min)&&Math.round(e.y.max)===Math.round(t.y.max)}function H9(e){return Ai(e.x)/Ai(e.y)}class yPe{constructor(){this.members=[]}add(t){AA(this.members,t),t.scheduleRender()}remove(t){if(kA(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(t){const n=this.members.findIndex(i=>t===i);if(n===0)return!1;let r;for(let i=n;i>=0;i--){const o=this.members[i];if(o.isPresent!==!1){r=o;break}}return r?(this.promote(r),!0):!1}promote(t,n){const r=this.lead;if(t!==r&&(this.prevLead=r,this.lead=t,t.show(),r)){r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,n&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues),t.root&&t.root.isUpdating&&(t.isLayoutDirty=!0);const{crossfade:i}=t.options;i===!1&&r.hide()}}exitAnimationComplete(){this.members.forEach(t=>{const{options:n,resumingFrom:r}=t;n.onExitComplete&&n.onExitComplete(),r&&r.options.onExitComplete&&r.options.onExitComplete()})}scheduleRender(){this.members.forEach(t=>{t.instance&&t.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function W9(e,t,n){let r="";const i=e.x.translate/t.x,o=e.y.translate/t.y;if((i||o)&&(r=`translate3d(${i}px, ${o}px, 0) `),(t.x!==1||t.y!==1)&&(r+=`scale(${1/t.x}, ${1/t.y}) `),n){const{rotate:l,rotateX:c,rotateY:u}=n;l&&(r+=`rotate(${l}deg) `),c&&(r+=`rotateX(${c}deg) `),u&&(r+=`rotateY(${u}deg) `)}const s=e.x.scale*t.x,a=e.y.scale*t.y;return(s!==1||a!==1)&&(r+=`scale(${s}, ${a})`),r||"none"}const vPe=(e,t)=>e.depth-t.depth;class bPe{constructor(){this.children=[],this.isDirty=!1}add(t){AA(this.children,t),this.isDirty=!0}remove(t){kA(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(vPe),this.isDirty=!1,this.children.forEach(t)}}function _Pe(e,t){const n=performance.now(),r=({timestamp:i})=>{const o=i-n;o>=t&&(pa(r),e(o-t))};return Pt.read(r,!0),()=>pa(r)}function SPe(e){window.MotionDebug&&window.MotionDebug.record(e)}function xPe(e){return e instanceof SVGElement&&e.tagName!=="svg"}function wPe(e,t,n){const r=ri(e)?e:_f(e);return r.start(TA("",r,t,n)),r.animation}const q9=["","X","Y","Z"],CPe={visibility:"hidden"},K9=1e3;let EPe=0;const uc={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0};function _G({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(s={},a=t==null?void 0:t()){this.id=EPe++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,uc.totalNodes=uc.resolvedTargetDeltas=uc.recalculatedProjection=0,this.nodes.forEach(kPe),this.nodes.forEach(OPe),this.nodes.forEach($Pe),this.nodes.forEach(PPe),SPe(uc)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=a?a.root||a:this,this.path=a?[...a.path,a]:[],this.parent=a,this.depth=a?a.depth+1:0;for(let l=0;lthis.root.updateBlockedByResize=!1;e(s,()=>{this.root.updateBlockedByResize=!0,d&&d(),d=_Pe(f,250),_v.hasAnimatedSinceResize&&(_v.hasAnimatedSinceResize=!1,this.nodes.forEach(Q9))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&u&&(l||c)&&this.addEventListener("didUpdate",({delta:d,hasLayoutChanged:f,hasRelativeTargetChanged:h,layout:p})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const m=this.options.transition||u.getDefaultTransition()||BPe,{onLayoutAnimationStart:_,onLayoutAnimationComplete:v}=u.getProps(),y=!this.targetLayout||!bG(this.targetLayout,p)||h,g=!f&&h;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||g||f&&(y||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(d,g);const b={...EA(m,"layout"),onPlay:_,onComplete:v};(u.shouldReduceMotion||this.options.layoutRoot)&&(b.delay=0,b.type=!1),this.startAnimation(b)}else f||Q9(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=p})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,pa(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(NPe),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let u=0;uthis.update()))}clearAllSnapshots(){this.nodes.forEach(IPe),this.sharedNodes.forEach(FPe)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,Pt.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){Pt.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let l=0;l{const S=b/1e3;Y9(d.x,s.x,S),Y9(d.y,s.y,S),this.setTargetDelta(d),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(kp(f,this.layout.layoutBox,this.relativeParent.layout.layoutBox),DPe(this.relativeTarget,this.relativeTargetOrigin,f,S),g&&mPe(this.relativeTarget,g)&&(this.isProjectionDirty=!1),g||(g=gn()),Li(g,this.relativeTarget)),m&&(this.animationValues=u,uPe(u,c,this.latestValues,S,y,v)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=S},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&(pa(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=Pt.update(()=>{_v.hasAnimatedSinceResize=!0,this.currentAnimation=wPe(0,K9,{...s,onUpdate:a=>{this.mixTargetDelta(a),s.onUpdate&&s.onUpdate(a)},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(K9),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:a,target:l,layout:c,latestValues:u}=s;if(!(!a||!l||!c)){if(this!==s&&this.layout&&c&&SG(this.options.animationType,this.layout.layoutBox,c.layoutBox)){l=this.target||gn();const d=Ai(this.layout.layoutBox.x);l.x.min=s.target.x.min,l.x.max=l.x.min+d;const f=Ai(this.layout.layoutBox.y);l.y.min=s.target.y.min,l.y.max=l.y.min+f}Li(a,l),bd(a,u),Ap(this.projectionDeltaWithTransform,this.layoutCorrected,a,u)}}registerSharedNode(s,a){this.sharedNodes.has(s)||this.sharedNodes.set(s,new yPe),this.sharedNodes.get(s).add(a);const c=a.options.initialPromotionConfig;a.promote({transition:c?c.transition:void 0,preserveFollowOpacity:c&&c.shouldPreserveFollowOpacity?c.shouldPreserveFollowOpacity(a):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var s;const{layoutId:a}=this.options;return a?((s=this.getStack())===null||s===void 0?void 0:s.lead)||this:this}getPrevLead(){var s;const{layoutId:a}=this.options;return a?(s=this.getStack())===null||s===void 0?void 0:s.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:a,preserveFollowOpacity:l}={}){const c=this.getStack();c&&c.promote(this,l),s&&(this.projectionDelta=void 0,this.needsReset=!0),a&&this.setOptions({transition:a})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetRotation(){const{visualElement:s}=this.options;if(!s)return;let a=!1;const{latestValues:l}=s;if((l.rotate||l.rotateX||l.rotateY||l.rotateZ)&&(a=!0),!a)return;const c={};for(let u=0;u{var a;return(a=s.currentAnimation)===null||a===void 0?void 0:a.stop()}),this.root.nodes.forEach(X9),this.root.sharedNodes.clear()}}}function TPe(e){e.updateLayout()}function APe(e){var t;const n=((t=e.resumeFrom)===null||t===void 0?void 0:t.snapshot)||e.snapshot;if(e.isLead()&&e.layout&&n&&e.hasListeners("didUpdate")){const{layoutBox:r,measuredBox:i}=e.layout,{animationType:o}=e.options,s=n.source!==e.layout.source;o==="size"?Yo(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Ai(f);f.min=r[d].min,f.max=f.min+h}):SG(o,n.layoutBox,r)&&Yo(d=>{const f=s?n.measuredBox[d]:n.layoutBox[d],h=Ai(r[d]);f.max=f.min+h,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[d].max=e.relativeTarget[d].min+h)});const a=vd();Ap(a,r,n.layoutBox);const l=vd();s?Ap(l,e.applyTransform(i,!0),n.measuredBox):Ap(l,r,n.layoutBox);const c=!vG(a);let u=!1;if(!e.resumeFrom){const d=e.getClosestProjectingParent();if(d&&!d.resumeFrom){const{snapshot:f,layout:h}=d;if(f&&h){const p=gn();kp(p,n.layoutBox,f.layoutBox);const m=gn();kp(m,r,h.layoutBox),bG(p,m)||(u=!0),d.options.layoutRoot&&(e.relativeTarget=m,e.relativeTargetOrigin=p,e.relativeParent=d)}}}e.notifyListeners("didUpdate",{layout:r,snapshot:n,delta:l,layoutDelta:a,hasLayoutChanged:c,hasRelativeTargetChanged:u})}else if(e.isLead()){const{onExitComplete:r}=e.options;r&&r()}e.options.transition=void 0}function kPe(e){uc.totalNodes++,e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function PPe(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function IPe(e){e.clearSnapshot()}function X9(e){e.clearMeasurements()}function MPe(e){e.isLayoutDirty=!1}function RPe(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function Q9(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function OPe(e){e.resolveTargetDelta()}function $Pe(e){e.calcProjection()}function NPe(e){e.resetRotation()}function FPe(e){e.removeLeadSnapshot()}function Y9(e,t,n){e.translate=Wt(t.translate,0,n),e.scale=Wt(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function Z9(e,t,n,r){e.min=Wt(t.min,n.min,r),e.max=Wt(t.max,n.max,r)}function DPe(e,t,n,r){Z9(e.x,t.x,n.x,r),Z9(e.y,t.y,n.y,r)}function LPe(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const BPe={duration:.45,ease:[.4,0,.1,1]},J9=e=>typeof navigator<"u"&&navigator.userAgent.toLowerCase().includes(e),eR=J9("applewebkit/")&&!J9("chrome/")?Math.round:tn;function tR(e){e.min=eR(e.min),e.max=eR(e.max)}function zPe(e){tR(e.x),tR(e.y)}function SG(e,t,n){return e==="position"||e==="preserve-aspect"&&!B3(H9(t),H9(n),.2)}const jPe=_G({attachResizeListener:(e,t)=>Ys(e,"resize",t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),Yw={current:void 0},xG=_G({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!Yw.current){const e=new jPe({});e.mount(window),e.setOptions({layoutScroll:!0}),Yw.current=e}return Yw.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),VPe={pan:{Feature:nPe},drag:{Feature:tPe,ProjectionNode:xG,MeasureLayout:gG}},UPe=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;function GPe(e){const t=UPe.exec(e);if(!t)return[,];const[,n,r]=t;return[n,r]}function U3(e,t,n=1){const[r,i]=GPe(e);if(!r)return;const o=window.getComputedStyle(t).getPropertyValue(r);if(o){const s=o.trim();return iG(s)?parseFloat(s):s}else return R3(i)?U3(i,t,n+1):i}function HPe(e,{...t},n){const r=e.current;if(!(r instanceof Element))return{target:t,transitionEnd:n};n&&(n={...n}),e.values.forEach(i=>{const o=i.get();if(!R3(o))return;const s=U3(o,r);s&&i.set(s)});for(const i in t){const o=t[i];if(!R3(o))continue;const s=U3(o,r);s&&(t[i]=s,n||(n={}),n[i]===void 0&&(n[i]=o))}return{target:t,transitionEnd:n}}const WPe=new Set(["width","height","top","left","right","bottom","x","y","translateX","translateY"]),wG=e=>WPe.has(e),qPe=e=>Object.keys(e).some(wG),nR=e=>e===fu||e===Pe,rR=(e,t)=>parseFloat(e.split(", ")[t]),iR=(e,t)=>(n,{transform:r})=>{if(r==="none"||!r)return 0;const i=r.match(/^matrix3d\((.+)\)$/);if(i)return rR(i[1],t);{const o=r.match(/^matrix\((.+)\)$/);return o?rR(o[1],e):0}},KPe=new Set(["x","y","z"]),XPe=Qm.filter(e=>!KPe.has(e));function QPe(e){const t=[];return XPe.forEach(n=>{const r=e.getValue(n);r!==void 0&&(t.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))}),t.length&&e.render(),t}const Sf={width:({x:e},{paddingLeft:t="0",paddingRight:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),height:({y:e},{paddingTop:t="0",paddingBottom:n="0"})=>e.max-e.min-parseFloat(t)-parseFloat(n),top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:iR(4,13),y:iR(5,14)};Sf.translateX=Sf.x;Sf.translateY=Sf.y;const YPe=(e,t,n)=>{const r=t.measureViewportBox(),i=t.current,o=getComputedStyle(i),{display:s}=o,a={};s==="none"&&t.setStaticValue("display",e.display||"block"),n.forEach(c=>{a[c]=Sf[c](r,o)}),t.render();const l=t.measureViewportBox();return n.forEach(c=>{const u=t.getValue(c);u&&u.jump(a[c]),e[c]=Sf[c](l,o)}),e},ZPe=(e,t,n={},r={})=>{t={...t},r={...r};const i=Object.keys(t).filter(wG);let o=[],s=!1;const a=[];if(i.forEach(l=>{const c=e.getValue(l);if(!e.hasValue(l))return;let u=n[l],d=Ch(u);const f=t[l];let h;if(Q1(f)){const p=f.length,m=f[0]===null?1:0;u=f[m],d=Ch(u);for(let _=m;_=0?window.pageYOffset:null,c=YPe(t,e,a);return o.length&&o.forEach(([u,d])=>{e.getValue(u).set(d)}),e.render(),MS&&l!==null&&window.scrollTo({top:l}),{target:c,transitionEnd:r}}else return{target:t,transitionEnd:r}};function JPe(e,t,n,r){return qPe(t)?ZPe(e,t,n,r):{target:t,transitionEnd:r}}const e6e=(e,t,n,r)=>{const i=HPe(e,t,r);return t=i.target,r=i.transitionEnd,JPe(e,t,n,r)},G3={current:null},CG={current:!1};function t6e(){if(CG.current=!0,!!MS)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>G3.current=e.matches;e.addListener(t),t()}else G3.current=!1}function n6e(e,t,n){const{willChange:r}=t;for(const i in t){const o=t[i],s=n[i];if(ri(o))e.addValue(i,o),eb(r)&&r.add(i);else if(ri(s))e.addValue(i,_f(o,{owner:e})),eb(r)&&r.remove(i);else if(s!==o)if(e.hasValue(i)){const a=e.getValue(i);!a.hasAnimated&&a.set(o)}else{const a=e.getStaticValue(i);e.addValue(i,_f(a!==void 0?a:o,{owner:e}))}}for(const i in n)t[i]===void 0&&e.removeValue(i);return t}const oR=new WeakMap,EG=Object.keys(jg),r6e=EG.length,sR=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"],i6e=dA.length;class o6e{constructor({parent:t,props:n,presenceContext:r,reducedMotionConfig:i,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.scheduleRender=()=>Pt.render(this.render,!1,!0);const{latestValues:a,renderState:l}=o;this.latestValues=a,this.baseTarget={...a},this.initialValues=n.initial?{...a}:{},this.renderState=l,this.parent=t,this.props=n,this.presenceContext=r,this.depth=t?t.depth+1:0,this.reducedMotionConfig=i,this.options=s,this.isControllingVariants=OS(n),this.isVariantNode=cU(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(t&&t.current);const{willChange:c,...u}=this.scrapeMotionValuesFromProps(n,{});for(const d in u){const f=u[d];a[d]!==void 0&&ri(f)&&(f.set(a[d],!1),eb(c)&&c.add(d))}}scrapeMotionValuesFromProps(t,n){return{}}mount(t){this.current=t,oR.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,r)=>this.bindToMotionValue(r,n)),CG.current||t6e(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:G3.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){oR.delete(this.current),this.projection&&this.projection.unmount(),pa(this.notifyUpdate),pa(this.render),this.valueSubscriptions.forEach(t=>t()),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const t in this.events)this.events[t].clear();for(const t in this.features)this.features[t].unmount();this.current=null}bindToMotionValue(t,n){const r=du.has(t),i=n.on("change",s=>{this.latestValues[t]=s,this.props.onUpdate&&Pt.update(this.notifyUpdate,!1,!0),r&&this.projection&&(this.projection.isTransformDirty=!0)}),o=n.on("renderRequest",this.scheduleRender);this.valueSubscriptions.set(t,()=>{i(),o()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}loadFeatures({children:t,...n},r,i,o){let s,a;for(let l=0;lthis.scheduleRender(),animationType:typeof c=="string"?c:"both",initialPromotionConfig:o,layoutScroll:f,layoutRoot:h})}return a}updateFeatures(){for(const t in this.features){const n=this.features[t];n.isMounted?n.update():(n.mount(),n.isMounted=!0)}}triggerBuild(){this.build(this.renderState,this.latestValues,this.options,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):gn()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,n){this.latestValues[t]=n}makeTargetAnimatable(t,n=!0){return this.makeTargetAnimatableFromInstance(t,this.props,n)}update(t,n){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let r=0;rn.variantChildren.delete(t)}addValue(t,n){n!==this.values.get(t)&&(this.removeValue(t),this.bindToMotionValue(t,n)),this.values.set(t,n),this.latestValues[t]=n.get()}removeValue(t){this.values.delete(t);const n=this.valueSubscriptions.get(t);n&&(n(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,n){if(this.props.values&&this.props.values[t])return this.props.values[t];let r=this.values.get(t);return r===void 0&&n!==void 0&&(r=_f(n,{owner:this}),this.addValue(t,r)),r}readValue(t){var n;return this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:(n=this.getBaseTargetFromProps(this.props,t))!==null&&n!==void 0?n:this.readValueFromInstance(this.current,t,this.options)}setBaseTarget(t,n){this.baseTarget[t]=n}getBaseTarget(t){var n;const{initial:r}=this.props,i=typeof r=="string"||typeof r=="object"?(n=bA(this.props,r))===null||n===void 0?void 0:n[t]:void 0;if(r&&i!==void 0)return i;const o=this.getBaseTargetFromProps(this.props,t);return o!==void 0&&!ri(o)?o:this.initialValues[t]!==void 0&&i===void 0?void 0:this.baseTarget[t]}on(t,n){return this.events[t]||(this.events[t]=new PA),this.events[t].add(n)}notify(t,...n){this.events[t]&&this.events[t].notify(...n)}}class TG extends o6e{sortInstanceNodePosition(t,n){return t.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(t,n){return t.style?t.style[n]:void 0}removeValueFromRenderState(t,{vars:n,style:r}){delete n[t],delete r[t]}makeTargetAnimatableFromInstance({transition:t,transitionEnd:n,...r},{transformValues:i},o){let s=_ke(r,t||{},this);if(i&&(n&&(n=i(n)),r&&(r=i(r)),s&&(s=i(s))),o){vke(this,r,s);const a=e6e(this,r,s,n);n=a.transitionEnd,r=a.target}return{transition:t,transitionEnd:n,...r}}}function s6e(e){return window.getComputedStyle(e)}class a6e extends TG{readValueFromInstance(t,n){if(du.has(n)){const r=CA(n);return r&&r.default||0}else{const r=s6e(t),i=(hU(n)?r.getPropertyValue(n):r[n])||0;return typeof i=="string"?i.trim():i}}measureInstanceViewportBox(t,{transformPagePoint:n}){return hG(t,n)}build(t,n,r,i){pA(t,n,r,i.transformTemplate)}scrapeMotionValuesFromProps(t,n){return vA(t,n)}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;ri(t)&&(this.childSubscription=t.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}renderInstance(t,n,r,i){bU(t,n,r,i)}}class l6e extends TG{constructor(){super(...arguments),this.isSVGTag=!1}getBaseTargetFromProps(t,n){return t[n]}readValueFromInstance(t,n){if(du.has(n)){const r=CA(n);return r&&r.default||0}return n=_U.has(n)?n:cA(n),t.getAttribute(n)}measureInstanceViewportBox(){return gn()}scrapeMotionValuesFromProps(t,n){return xU(t,n)}build(t,n,r,i){mA(t,n,r,this.isSVGTag,i.transformTemplate)}renderInstance(t,n,r,i){SU(t,n,r,i)}mount(t){this.isSVGTag=yA(t.tagName),super.mount(t)}}const c6e=(e,t)=>hA(e)?new l6e(t,{enableHardwareAcceleration:!1}):new a6e(t,{enableHardwareAcceleration:!0}),u6e={layout:{ProjectionNode:xG,MeasureLayout:gG}},d6e={...Nke,...nAe,...VPe,...u6e},AG=dTe((e,t)=>UTe(e,t,d6e,c6e));function kG(){const e=I.useRef(!1);return lA(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function f6e(){const e=kG(),[t,n]=I.useState(0),r=I.useCallback(()=>{e.current&&n(t+1)},[t]);return[I.useCallback(()=>Pt.postRender(r),[r]),t]}class h6e extends I.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(n&&t.isPresent&&!this.props.isPresent){const r=this.props.sizeRef.current;r.height=n.offsetHeight||0,r.width=n.offsetWidth||0,r.top=n.offsetTop,r.left=n.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function p6e({children:e,isPresent:t}){const n=I.useId(),r=I.useRef(null),i=I.useRef({width:0,height:0,top:0,left:0});return I.useInsertionEffect(()=>{const{width:o,height:s,top:a,left:l}=i.current;if(t||!r.current||!o||!s)return;r.current.dataset.motionPopId=n;const c=document.createElement("style");return document.head.appendChild(c),c.sheet&&c.sheet.insertRule(` + [data-motion-pop-id="${n}"] { + position: absolute !important; + width: ${o}px !important; + height: ${s}px !important; + top: ${a}px !important; + left: ${l}px !important; + } + `),()=>{document.head.removeChild(c)}},[t]),I.createElement(h6e,{isPresent:t,childRef:r,sizeRef:i},I.cloneElement(e,{ref:r}))}const Zw=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:o,mode:s})=>{const a=wU(g6e),l=I.useId(),c=I.useMemo(()=>({id:l,initial:t,isPresent:n,custom:i,onExitComplete:u=>{a.set(u,!0);for(const d of a.values())if(!d)return;r&&r()},register:u=>(a.set(u,!1),()=>a.delete(u))}),o?void 0:[n]);return I.useMemo(()=>{a.forEach((u,d)=>a.set(d,!1))},[n]),I.useEffect(()=>{!n&&!a.size&&r&&r()},[n]),s==="popLayout"&&(e=I.createElement(p6e,{isPresent:n},e)),I.createElement(Xm.Provider,{value:c},e)};function g6e(){return new Map}function m6e(e){return I.useEffect(()=>()=>e(),[])}const dc=e=>e.key||"";function y6e(e,t){e.forEach(n=>{const r=dc(n);t.set(r,n)})}function v6e(e){const t=[];return I.Children.forEach(e,n=>{I.isValidElement(n)&&t.push(n)}),t}const PG=({children:e,custom:t,initial:n=!0,onExitComplete:r,exitBeforeEnter:i,presenceAffectsLayout:o=!0,mode:s="sync"})=>{const a=I.useContext(fA).forceRender||f6e()[0],l=kG(),c=v6e(e);let u=c;const d=I.useRef(new Map).current,f=I.useRef(u),h=I.useRef(new Map).current,p=I.useRef(!0);if(lA(()=>{p.current=!1,y6e(c,h),f.current=u}),m6e(()=>{p.current=!0,h.clear(),d.clear()}),p.current)return I.createElement(I.Fragment,null,u.map(y=>I.createElement(Zw,{key:dc(y),isPresent:!0,initial:n?void 0:!1,presenceAffectsLayout:o,mode:s},y)));u=[...u];const m=f.current.map(dc),_=c.map(dc),v=m.length;for(let y=0;y{if(_.indexOf(g)!==-1)return;const b=h.get(g);if(!b)return;const S=m.indexOf(g);let w=y;if(!w){const C=()=>{d.delete(g);const x=Array.from(h.keys()).filter(k=>!_.includes(k));if(x.forEach(k=>h.delete(k)),f.current=c.filter(k=>{const A=dc(k);return A===g||x.includes(A)}),!d.size){if(l.current===!1)return;a(),r&&r()}};w=I.createElement(Zw,{key:dc(b),isPresent:!1,onExitComplete:C,custom:t,presenceAffectsLayout:o,mode:s},b),d.set(g,w)}u.splice(S,0,w)}),u=u.map(y=>{const g=y.key;return d.has(g)?y:I.createElement(Zw,{key:dc(y),isPresent:!0,presenceAffectsLayout:o,mode:s},y)}),I.createElement(I.Fragment,null,d.size?u:u.map(y=>I.cloneElement(y)))};var b6e={initial:e=>{const{position:t}=e,n=["top","bottom"].includes(t)?"y":"x";let r=["top-right","bottom-right"].includes(t)?1:-1;return t==="bottom"&&(r=1),{opacity:0,[n]:r*24}},animate:{opacity:1,y:0,x:0,scale:1,transition:{duration:.4,ease:[.4,0,.2,1]}},exit:{opacity:0,scale:.85,transition:{duration:.2,ease:[.4,0,1,1]}}},IG=I.memo(e=>{const{id:t,message:n,onCloseComplete:r,onRequestRemove:i,requestClose:o=!1,position:s="bottom",duration:a=5e3,containerStyle:l,motionVariants:c=b6e,toastSpacing:u="0.5rem"}=e,[d,f]=I.useState(a),h=iPe();n9(()=>{h||r==null||r()},[h]),n9(()=>{f(a)},[a]);const p=()=>f(null),m=()=>f(a),_=()=>{h&&i()};I.useEffect(()=>{h&&o&&i()},[h,o,i]),tTe(_,d);const v=I.useMemo(()=>({pointerEvents:"auto",maxWidth:560,minWidth:300,margin:u,...l}),[l,u]),y=I.useMemo(()=>Z4e(s),[s]);return ie.jsx(AG.div,{layout:!0,className:"chakra-toast",variants:c,initial:"initial",animate:"animate",exit:"exit",onHoverStart:p,onHoverEnd:m,custom:{position:s},style:y,children:ie.jsx(or.div,{role:"status","aria-atomic":"true",className:"chakra-toast__inner",__css:v,children:us(n,{id:t,onClose:_})})})});IG.displayName="ToastComponent";function _6e(e,t){var n;const r=e??"bottom",o={"top-start":{ltr:"top-left",rtl:"top-right"},"top-end":{ltr:"top-right",rtl:"top-left"},"bottom-start":{ltr:"bottom-left",rtl:"bottom-right"},"bottom-end":{ltr:"bottom-right",rtl:"bottom-left"}}[r];return(n=o==null?void 0:o[t])!=null?n:r}var aR={path:ie.jsxs("g",{stroke:"currentColor",strokeWidth:"1.5",children:[ie.jsx("path",{strokeLinecap:"round",fill:"none",d:"M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"}),ie.jsx("path",{fill:"currentColor",strokeLinecap:"round",d:"M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"}),ie.jsx("circle",{fill:"none",strokeMiterlimit:"10",cx:"12",cy:"12",r:"11.25"})]}),viewBox:"0 0 24 24"},e0=Mi((e,t)=>{const{as:n,viewBox:r,color:i="currentColor",focusable:o=!1,children:s,className:a,__css:l,...c}=e,u=Dl("chakra-icon",a),d=Km("Icon",e),f={w:"1em",h:"1em",display:"inline-block",lineHeight:"1em",flexShrink:0,color:i,...l,...d},h={ref:t,focusable:o,className:u,__css:f},p=r??aR.viewBox;if(n&&typeof n!="string")return ie.jsx(or.svg,{as:n,...h,...c});const m=s??aR.path;return ie.jsx(or.svg,{verticalAlign:"middle",viewBox:p,...h,...c,children:m})});e0.displayName="Icon";function S6e(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.014,12.014,0,0,0,12,0Zm6.927,8.2-6.845,9.289a1.011,1.011,0,0,1-1.43.188L5.764,13.769a1,1,0,1,1,1.25-1.562l4.076,3.261,6.227-8.451A1,1,0,1,1,18.927,8.2Z"})})}function x6e(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm.25,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12.25,5ZM14.5,18.5h-4a1,1,0,0,1,0-2h.75a.25.25,0,0,0,.25-.25v-4.5a.25.25,0,0,0-.25-.25H10.5a1,1,0,0,1,0-2h1a2,2,0,0,1,2,2v4.75a.25.25,0,0,0,.25.25h.75a1,1,0,1,1,0,2Z"})})}function lR(e){return ie.jsx(e0,{viewBox:"0 0 24 24",...e,children:ie.jsx("path",{fill:"currentColor",d:"M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z"})})}var w6e=FSe({"0%":{transform:"rotate(0deg)"},"100%":{transform:"rotate(360deg)"}}),IA=Mi((e,t)=>{const n=Km("Spinner",e),{label:r="Loading...",thickness:i="2px",speed:o="0.45s",emptyColor:s="transparent",className:a,...l}=Wm(e),c=Dl("chakra-spinner",a),u={display:"inline-block",borderColor:"currentColor",borderStyle:"solid",borderRadius:"99999px",borderWidth:i,borderBottomColor:s,borderLeftColor:s,animation:`${w6e} ${o} linear infinite`,...n};return ie.jsx(or.div,{ref:t,__css:u,className:c,...l,children:r&&ie.jsx(or.span,{srOnly:!0,children:r})})});IA.displayName="Spinner";var[C6e,MA]=Hm({name:"AlertContext",hookName:"useAlertContext",providerName:""}),[E6e,RA]=Hm({name:"AlertStylesContext",hookName:"useAlertStyles",providerName:""}),MG={info:{icon:x6e,colorScheme:"blue"},warning:{icon:lR,colorScheme:"orange"},success:{icon:S6e,colorScheme:"green"},error:{icon:lR,colorScheme:"red"},loading:{icon:IA,colorScheme:"blue"}};function T6e(e){return MG[e].colorScheme}function A6e(e){return MG[e].icon}var RG=Mi(function(t,n){const r=RA(),{status:i}=MA(),o={display:"inline",...r.description};return ie.jsx(or.div,{ref:n,"data-status":i,...t,className:Dl("chakra-alert__desc",t.className),__css:o})});RG.displayName="AlertDescription";function OG(e){const{status:t}=MA(),n=A6e(t),r=RA(),i=t==="loading"?r.spinner:r.icon;return ie.jsx(or.span,{display:"inherit","data-status":t,...e,className:Dl("chakra-alert__icon",e.className),__css:i,children:e.children||ie.jsx(n,{h:"100%",w:"100%"})})}OG.displayName="AlertIcon";var $G=Mi(function(t,n){const r=RA(),{status:i}=MA();return ie.jsx(or.div,{ref:n,"data-status":i,...t,className:Dl("chakra-alert__title",t.className),__css:r.title})});$G.displayName="AlertTitle";var NG=Mi(function(t,n){var r;const{status:i="info",addRole:o=!0,...s}=Wm(t),a=(r=t.colorScheme)!=null?r:T6e(i),l=R4e("Alert",{...t,colorScheme:a}),c={width:"100%",display:"flex",alignItems:"center",position:"relative",overflow:"hidden",...l.container};return ie.jsx(C6e,{value:{status:i},children:ie.jsx(E6e,{value:l,children:ie.jsx(or.div,{"data-status":i,role:o?"alert":void 0,ref:n,...s,className:Dl("chakra-alert",t.className),__css:c})})})});NG.displayName="Alert";function k6e(e){return ie.jsx(e0,{focusable:"false","aria-hidden":!0,...e,children:ie.jsx("path",{fill:"currentColor",d:"M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z"})})}var FG=Mi(function(t,n){const r=Km("CloseButton",t),{children:i,isDisabled:o,__css:s,...a}=Wm(t),l={outline:0,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0};return ie.jsx(or.button,{type:"button","aria-label":"Close",ref:n,disabled:o,__css:{...l,...r,...s},...a,children:i||ie.jsx(k6e,{width:"1em",height:"1em"})})});FG.displayName="CloseButton";var P6e={top:[],"top-left":[],"top-right":[],"bottom-left":[],bottom:[],"bottom-right":[]},ss=I6e(P6e);function I6e(e){let t=e;const n=new Set,r=i=>{t=i(t),n.forEach(o=>o())};return{getState:()=>t,subscribe:i=>(n.add(i),()=>{r(()=>e),n.delete(i)}),removeToast:(i,o)=>{r(s=>({...s,[o]:s[o].filter(a=>a.id!=i)}))},notify:(i,o)=>{const s=M6e(i,o),{position:a,id:l}=s;return r(c=>{var u,d;const h=a.includes("top")?[s,...(u=c[a])!=null?u:[]]:[...(d=c[a])!=null?d:[],s];return{...c,[a]:h}}),l},update:(i,o)=>{i&&r(s=>{const a={...s},{position:l,index:c}=t9(a,i);return l&&c!==-1&&(a[l][c]={...a[l][c],...o,message:DG(o)}),a})},closeAll:({positions:i}={})=>{r(o=>(i??["bottom","bottom-right","bottom-left","top","top-left","top-right"]).reduce((l,c)=>(l[c]=o[c].map(u=>({...u,requestClose:!0})),l),{...o}))},close:i=>{r(o=>{const s=oU(o,i);return s?{...o,[s]:o[s].map(a=>a.id==i?{...a,requestClose:!0}:a)}:o})},isActive:i=>!!t9(ss.getState(),i).position}}var cR=0;function M6e(e,t={}){var n,r;cR+=1;const i=(n=t.id)!=null?n:cR,o=(r=t.position)!=null?r:"bottom";return{id:i,message:e,position:o,duration:t.duration,onCloseComplete:t.onCloseComplete,onRequestRemove:()=>ss.removeToast(String(i),o),status:t.status,requestClose:!1,containerStyle:t.containerStyle}}var R6e=e=>{const{status:t,variant:n="solid",id:r,title:i,isClosable:o,onClose:s,description:a,colorScheme:l,icon:c}=e,u=r?{root:`toast-${r}`,title:`toast-${r}-title`,description:`toast-${r}-description`}:void 0;return ie.jsxs(NG,{addRole:!1,status:t,variant:n,id:u==null?void 0:u.root,alignItems:"start",borderRadius:"md",boxShadow:"lg",paddingEnd:8,textAlign:"start",width:"auto",colorScheme:l,children:[ie.jsx(OG,{children:c}),ie.jsxs(or.div,{flex:"1",maxWidth:"100%",children:[i&&ie.jsx($G,{id:u==null?void 0:u.title,children:i}),a&&ie.jsx(RG,{id:u==null?void 0:u.description,display:"block",children:a})]}),o&&ie.jsx(FG,{size:"sm",onClick:s,position:"absolute",insetEnd:1,top:1})]})};function DG(e={}){const{render:t,toastComponent:n=R6e}=e;return i=>typeof t=="function"?t({...i,...e}):ie.jsx(n,{...i,...e})}function O6e(e,t){const n=i=>{var o;return{...t,...i,position:_6e((o=i==null?void 0:i.position)!=null?o:t==null?void 0:t.position,e)}},r=i=>{const o=n(i),s=DG(o);return ss.notify(s,o)};return r.update=(i,o)=>{ss.update(i,n(o))},r.promise=(i,o)=>{const s=r({...o.loading,status:"loading",duration:null});i.then(a=>r.update(s,{status:"success",duration:5e3,...us(o.success,a)})).catch(a=>r.update(s,{status:"error",duration:5e3,...us(o.error,a)}))},r.closeAll=ss.closeAll,r.close=ss.close,r.isActive=ss.isActive,r}var[kWe,PWe]=Hm({name:"ToastOptionsContext",strict:!1}),$6e=e=>{const t=I.useSyncExternalStore(ss.subscribe,ss.getState,ss.getState),{motionVariants:n,component:r=IG,portalProps:i}=e,s=Object.keys(t).map(a=>{const l=t[a];return ie.jsx("div",{role:"region","aria-live":"polite","aria-label":`Notifications-${a}`,id:`chakra-toast-manager-${a}`,style:J4e(a),children:ie.jsx(PG,{initial:!1,children:l.map(c=>ie.jsx(r,{motionVariants:n,...c},c.id))})},a)});return ie.jsx(CS,{...i,children:s})},N6e={duration:5e3,variant:"solid"},Bu={theme:S4e,colorMode:"light",toggleColorMode:()=>{},setColorMode:()=>{},defaultOptions:N6e,forced:!1};function F6e({theme:e=Bu.theme,colorMode:t=Bu.colorMode,toggleColorMode:n=Bu.toggleColorMode,setColorMode:r=Bu.setColorMode,defaultOptions:i=Bu.defaultOptions,motionVariants:o,toastSpacing:s,component:a,forced:l}=Bu){const c={colorMode:t,setColorMode:r,toggleColorMode:n,forced:l};return{ToastContainer:()=>ie.jsx(X4e,{theme:e,children:ie.jsx(JT.Provider,{value:c,children:ie.jsx($6e,{defaultOptions:i,motionVariants:o,toastSpacing:s,component:a})})}),toast:O6e(e.direction,i)}}var H3=Mi(function(t,n){const{htmlWidth:r,htmlHeight:i,alt:o,...s}=t;return ie.jsx("img",{width:r,height:i,ref:n,alt:o,...s})});H3.displayName="NativeImage";function D6e(e){const{loading:t,src:n,srcSet:r,onLoad:i,onError:o,crossOrigin:s,sizes:a,ignoreFallback:l}=e,[c,u]=I.useState("pending");I.useEffect(()=>{u(n?"loading":"pending")},[n]);const d=I.useRef(),f=I.useCallback(()=>{if(!n)return;h();const p=new Image;p.src=n,s&&(p.crossOrigin=s),r&&(p.srcset=r),a&&(p.sizes=a),t&&(p.loading=t),p.onload=m=>{h(),u("loaded"),i==null||i(m)},p.onerror=m=>{h(),u("failed"),o==null||o(m)},d.current=p},[n,s,r,a,i,o,t]),h=()=>{d.current&&(d.current.onload=null,d.current.onerror=null,d.current=null)};return j1(()=>{if(!l)return c==="loading"&&f(),()=>{h()}},[c,f,l]),l?"loaded":c}var L6e=(e,t)=>e!=="loaded"&&t==="beforeLoadOrError"||e==="failed"&&t==="onError";function B6e(e,t=[]){const n=Object.assign({},e);for(const r of t)r in n&&delete n[r];return n}var OA=Mi(function(t,n){const{fallbackSrc:r,fallback:i,src:o,srcSet:s,align:a,fit:l,loading:c,ignoreFallback:u,crossOrigin:d,fallbackStrategy:f="beforeLoadOrError",referrerPolicy:h,...p}=t,m=r!==void 0||i!==void 0,_=c!=null||u||!m,v=D6e({...t,crossOrigin:d,ignoreFallback:_}),y=L6e(v,f),g={ref:n,objectFit:l,objectPosition:a,..._?p:B6e(p,["onError","onLoad"])};return y?i||ie.jsx(or.img,{as:H3,className:"chakra-image__placeholder",src:r,...g}):ie.jsx(or.img,{as:H3,src:o,srcSet:s,crossOrigin:d,loading:c,referrerPolicy:h,className:"chakra-image",...g})});OA.displayName="Image";var LG=Mi(function(t,n){const r=Km("Text",t),{className:i,align:o,decoration:s,casing:a,...l}=Wm(t),c=D4e({textAlign:t.align,textDecoration:t.decoration,textTransform:t.casing});return ie.jsx(or.p,{ref:n,className:Dl("chakra-text",t.className),...c,...l,__css:r})});LG.displayName="Text";var W3=Mi(function(t,n){const r=Km("Heading",t),{className:i,...o}=Wm(t);return ie.jsx(or.h2,{ref:n,className:Dl("chakra-heading",t.className),...o,__css:r})});W3.displayName="Heading";var nb=or("div");nb.displayName="Box";var BG=Mi(function(t,n){const{size:r,centerContent:i=!0,...o}=t,s=i?{display:"flex",alignItems:"center",justifyContent:"center"}:{};return ie.jsx(nb,{ref:n,boxSize:r,__css:{...s,flexShrink:0,flexGrow:0},...o})});BG.displayName="Square";var z6e=Mi(function(t,n){const{size:r,...i}=t;return ie.jsx(BG,{size:r,ref:n,borderRadius:"9999px",...i})});z6e.displayName="Circle";var $A=Mi(function(t,n){const{direction:r,align:i,justify:o,wrap:s,basis:a,grow:l,shrink:c,...u}=t,d={display:"flex",flexDirection:r,alignItems:i,justifyContent:o,flexWrap:s,flexBasis:a,flexGrow:l,flexShrink:c};return ie.jsx(or.div,{ref:n,__css:d,...u})});$A.displayName="Flex";const tt=e=>{try{return JSON.parse(JSON.stringify(e))}catch{return"Error parsing object"}},j6e=T.object({status:T.literal(422),data:T.object({detail:T.array(T.object({loc:T.array(T.string()),msg:T.string(),type:T.string()}))})});function Hr(e,t,n=!1){e=String(e),t=String(t);const r=Array.from({length:21},(s,a)=>a*50),i=[0,5,10,15,20,25,30,35,40,45,50,55,59,64,68,73,77,82,86,95,100];return r.reduce((s,a,l)=>{const c=n?i[l]/100:1,u=n?50:i[r.length-1-l];return s[a]=`hsl(${e} ${t}% ${u}% / ${c})`,s},{})}const my={H:220,S:16},yy={H:250,S:42},vy={H:47,S:42},by={H:40,S:70},_y={H:28,S:42},Sy={H:113,S:42},xy={H:0,S:42},V6e={base:Hr(my.H,my.S),baseAlpha:Hr(my.H,my.S,!0),accent:Hr(yy.H,yy.S),accentAlpha:Hr(yy.H,yy.S,!0),working:Hr(vy.H,vy.S),workingAlpha:Hr(vy.H,vy.S,!0),gold:Hr(by.H,by.S),goldAlpha:Hr(by.H,by.S,!0),warning:Hr(_y.H,_y.S),warningAlpha:Hr(_y.H,_y.S,!0),ok:Hr(Sy.H,Sy.S),okAlpha:Hr(Sy.H,Sy.S,!0),error:Hr(xy.H,xy.S),errorAlpha:Hr(xy.H,xy.S,!0)},{definePartsStyle:U6e,defineMultiStyleConfig:G6e}=Be(MV.keys),H6e={border:"none"},W6e=e=>{const{colorScheme:t}=e;return{fontWeight:"600",fontSize:"sm",border:"none",borderRadius:"base",bg:W(`${t}.200`,`${t}.700`)(e),color:W(`${t}.900`,`${t}.100`)(e),_hover:{bg:W(`${t}.250`,`${t}.650`)(e)},_expanded:{bg:W(`${t}.250`,`${t}.650`)(e),borderBottomRadius:"none",_hover:{bg:W(`${t}.300`,`${t}.600`)(e)}}}},q6e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.100`,`${t}.800`)(e),borderRadius:"base",borderTopRadius:"none"}},K6e={},X6e=U6e(e=>({container:H6e,button:W6e(e),panel:q6e(e),icon:K6e})),Q6e=G6e({variants:{invokeAI:X6e},defaultProps:{variant:"invokeAI",colorScheme:"base"}}),Y6e=e=>{const{colorScheme:t}=e;if(t==="base"){const r={bg:W("base.150","base.700")(e),color:W("base.300","base.500")(e),svg:{fill:W("base.300","base.500")(e)},opacity:1},i={bg:"none",color:W("base.300","base.500")(e),svg:{fill:W("base.500","base.500")(e)},opacity:1};return{bg:W("base.250","base.600")(e),color:W("base.850","base.100")(e),borderRadius:"base",svg:{fill:W("base.850","base.100")(e)},_hover:{bg:W("base.300","base.500")(e),color:W("base.900","base.50")(e),svg:{fill:W("base.900","base.50")(e)},_disabled:r},_disabled:r,'&[data-progress="true"]':{...i,_hover:i}}}const n={bg:W(`${t}.400`,`${t}.700`)(e),color:W(`${t}.600`,`${t}.500`)(e),svg:{fill:W(`${t}.600`,`${t}.500`)(e),filter:"unset"},opacity:.7,filter:"saturate(65%)"};return{bg:W(`${t}.400`,`${t}.600`)(e),color:W("base.50","base.100")(e),borderRadius:"base",svg:{fill:W("base.50","base.100")(e)},_disabled:n,_hover:{bg:W(`${t}.500`,`${t}.500`)(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)},_disabled:n}}},Z6e=e=>{const{colorScheme:t}=e,n=W("gray.200","whiteAlpha.300")(e);return{border:"1px solid",borderColor:t==="gray"?n:"currentColor",_hover:{bg:W(`${t}.500`,`${t}.500`)(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)}},".chakra-button__group[data-attached][data-orientation=horizontal] > &:not(:last-of-type)":{marginEnd:"-1px"},".chakra-button__group[data-attached][data-orientation=vertical] > &:not(:last-of-type)":{marginBottom:"-1px"}}},J6e={variants:{invokeAI:Y6e,invokeAIOutline:Z6e},defaultProps:{variant:"invokeAI",colorScheme:"base"}},{definePartsStyle:eIe,defineMultiStyleConfig:tIe}=Be(RV.keys),nIe=e=>{const{colorScheme:t}=e;return{bg:W("base.200","base.700")(e),borderColor:W("base.300","base.600")(e),color:W("base.900","base.100")(e),_checked:{bg:W(`${t}.300`,`${t}.500`)(e),borderColor:W(`${t}.300`,`${t}.500`)(e),color:W(`${t}.900`,`${t}.100`)(e),_hover:{bg:W(`${t}.400`,`${t}.500`)(e),borderColor:W(`${t}.400`,`${t}.500`)(e)},_disabled:{borderColor:"transparent",bg:"whiteAlpha.300",color:"whiteAlpha.500"}},_indeterminate:{bg:W(`${t}.300`,`${t}.600`)(e),borderColor:W(`${t}.300`,`${t}.600`)(e),color:W(`${t}.900`,`${t}.100`)(e)},_disabled:{bg:"whiteAlpha.100",borderColor:"transparent"},_focusVisible:{boxShadow:"none",outline:"none"},_invalid:{borderColor:W("error.600","error.300")(e)}}},rIe=eIe(e=>({control:nIe(e)})),iIe=tIe({variants:{invokeAI:rIe},defaultProps:{variant:"invokeAI",colorScheme:"accent"}}),{definePartsStyle:oIe,defineMultiStyleConfig:sIe}=Be(OV.keys),aIe={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal"},lIe=e=>({borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6},"::selection":{color:W("accent.900","accent.50")(e),bg:W("accent.200","accent.400")(e)}}),cIe={borderRadius:"md",py:"1",transitionProperty:"common",transitionDuration:"normal",width:"full",_focusVisible:{boxShadow:"outline"},_placeholder:{opacity:.6}},uIe=oIe(e=>({preview:aIe,input:lIe(e),textarea:cIe})),dIe=sIe({variants:{invokeAI:uIe},defaultProps:{size:"sm",variant:"invokeAI"}}),fIe=e=>({fontSize:"sm",marginEnd:0,mb:1,fontWeight:"400",transitionProperty:"common",transitionDuration:"normal",whiteSpace:"nowrap",_disabled:{opacity:.4},color:W("base.700","base.300")(e),_invalid:{color:W("error.500","error.300")(e)}}),hIe={variants:{invokeAI:fIe},defaultProps:{variant:"invokeAI"}},DS=e=>({outline:"none",borderWidth:2,borderStyle:"solid",borderColor:W("base.200","base.800")(e),bg:W("base.50","base.900")(e),borderRadius:"base",color:W("base.900","base.100")(e),boxShadow:"none",_hover:{borderColor:W("base.300","base.600")(e)},_focus:{borderColor:W("accent.200","accent.600")(e),boxShadow:"none",_hover:{borderColor:W("accent.300","accent.500")(e)}},_invalid:{borderColor:W("error.300","error.600")(e),boxShadow:"none",_hover:{borderColor:W("error.400","error.500")(e)}},_disabled:{borderColor:W("base.300","base.700")(e),bg:W("base.300","base.700")(e),color:W("base.600","base.400")(e),_hover:{borderColor:W("base.300","base.700")(e)}},_placeholder:{color:W("base.700","base.400")(e)},"::selection":{bg:W("accent.200","accent.400")(e)}}),{definePartsStyle:pIe,defineMultiStyleConfig:gIe}=Be($V.keys),mIe=pIe(e=>({field:DS(e)})),yIe=gIe({variants:{invokeAI:mIe},defaultProps:{size:"sm",variant:"invokeAI"}}),{definePartsStyle:vIe,defineMultiStyleConfig:bIe}=Be(NV.keys),_Ie=vIe(e=>({button:{fontWeight:500,bg:W("base.300","base.500")(e),color:W("base.900","base.100")(e),_hover:{bg:W("base.400","base.600")(e),color:W("base.900","base.50")(e),fontWeight:600}},list:{zIndex:9999,color:W("base.900","base.150")(e),bg:W("base.200","base.800")(e),shadow:"dark-lg",border:"none"},item:{fontSize:"sm",bg:W("base.200","base.800")(e),_hover:{bg:W("base.300","base.700")(e),svg:{opacity:1}},_focus:{bg:W("base.400","base.600")(e)},svg:{opacity:.7,fontSize:14}},divider:{borderColor:W("base.400","base.700")(e)}})),SIe=bIe({variants:{invokeAI:_Ie},defaultProps:{variant:"invokeAI"}}),IWe={variants:{enter:{visibility:"visible",opacity:1,scale:1,transition:{duration:.07,ease:[.4,0,.2,1]}},exit:{transitionEnd:{visibility:"hidden"},opacity:0,scale:.8,transition:{duration:.07,easings:"easeOut"}}}},{defineMultiStyleConfig:xIe,definePartsStyle:wIe}=Be(FV.keys),CIe=e=>({bg:W("blackAlpha.700","blackAlpha.700")(e)}),EIe={},TIe=()=>({layerStyle:"first",maxH:"80vh"}),AIe=()=>({fontWeight:"600",fontSize:"lg",layerStyle:"first",borderTopRadius:"base",borderInlineEndRadius:"base"}),kIe={},PIe={overflowY:"scroll"},IIe={},MIe=wIe(e=>({overlay:CIe(e),dialogContainer:EIe,dialog:TIe(),header:AIe(),closeButton:kIe,body:PIe,footer:IIe})),RIe=xIe({variants:{invokeAI:MIe},defaultProps:{variant:"invokeAI",size:"lg"}}),{defineMultiStyleConfig:OIe,definePartsStyle:$Ie}=Be(DV.keys),NIe=e=>({height:8}),FIe=e=>({border:"none",fontWeight:"600",height:"auto",py:1,ps:2,pe:6,...DS(e)}),DIe=e=>({display:"flex"}),LIe=e=>({border:"none",px:2,py:0,mx:-2,my:0,svg:{color:W("base.700","base.300")(e),width:2.5,height:2.5,_hover:{color:W("base.900","base.100")(e)}}}),BIe=$Ie(e=>({root:NIe(e),field:FIe(e),stepperGroup:DIe(e),stepper:LIe(e)})),zIe=OIe({variants:{invokeAI:BIe},defaultProps:{size:"sm",variant:"invokeAI"}}),{defineMultiStyleConfig:jIe,definePartsStyle:zG}=Be(LV.keys),jG=Xt("popper-bg"),VG=Xt("popper-arrow-bg"),UG=Xt("popper-arrow-shadow-color"),VIe=e=>({[VG.variable]:W("colors.base.100","colors.base.800")(e),[jG.variable]:W("colors.base.100","colors.base.800")(e),[UG.variable]:W("colors.base.400","colors.base.600")(e),minW:"unset",width:"unset",p:4,bg:W("base.100","base.800")(e),border:"none",shadow:"dark-lg"}),UIe=e=>({[VG.variable]:W("colors.base.100","colors.base.700")(e),[jG.variable]:W("colors.base.100","colors.base.700")(e),[UG.variable]:W("colors.base.400","colors.base.400")(e),p:4,bg:W("base.100","base.700")(e),border:"none",shadow:"dark-lg"}),GIe=zG(e=>({content:VIe(e),body:{padding:0}})),HIe=zG(e=>({content:UIe(e),body:{padding:0}})),WIe=jIe({variants:{invokeAI:GIe,informational:HIe},defaultProps:{variant:"invokeAI"}}),{defineMultiStyleConfig:qIe,definePartsStyle:KIe}=Be(BV.keys),XIe=e=>({bg:"accentAlpha.700"}),QIe=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.200`,`${t}.700`)(e)}},YIe=KIe(e=>({filledTrack:XIe(e),track:QIe(e)})),ZIe=qIe({variants:{invokeAI:YIe},defaultProps:{variant:"invokeAI"}}),JIe={"::-webkit-scrollbar":{display:"none"},scrollbarWidth:"none"},{definePartsStyle:e8e,defineMultiStyleConfig:t8e}=Be(zV.keys),n8e=e=>({color:W("base.200","base.300")(e)}),r8e=e=>({fontWeight:"600",...DS(e)}),i8e=e8e(e=>({field:r8e(e),icon:n8e(e)})),o8e=t8e({variants:{invokeAI:i8e},defaultProps:{size:"sm",variant:"invokeAI"}}),uR=Ae("skeleton-start-color"),dR=Ae("skeleton-end-color"),s8e={borderRadius:"base",maxW:"full",maxH:"full",_light:{[uR.variable]:"colors.base.250",[dR.variable]:"colors.base.450"},_dark:{[uR.variable]:"colors.base.700",[dR.variable]:"colors.base.500"}},a8e={variants:{invokeAI:s8e},defaultProps:{variant:"invokeAI"}},{definePartsStyle:l8e,defineMultiStyleConfig:c8e}=Be(jV.keys),u8e=e=>({bg:W("base.400","base.600")(e),h:1.5}),d8e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.400`,`${t}.600`)(e),h:1.5}},f8e=e=>({w:e.orientation==="horizontal"?2:4,h:e.orientation==="horizontal"?4:2,bg:W("base.50","base.100")(e)}),h8e=e=>({fontSize:"2xs",fontWeight:"500",color:W("base.700","base.400")(e),mt:2,insetInlineStart:"unset"}),p8e=l8e(e=>({container:{_disabled:{opacity:.6,cursor:"default",pointerEvents:"none"}},track:u8e(e),filledTrack:d8e(e),thumb:f8e(e),mark:h8e(e)})),g8e=c8e({variants:{invokeAI:p8e},defaultProps:{variant:"invokeAI",colorScheme:"accent"}}),{defineMultiStyleConfig:m8e,definePartsStyle:y8e}=Be(VV.keys),v8e=e=>{const{colorScheme:t}=e;return{bg:W("base.300","base.600")(e),_focusVisible:{boxShadow:"none"},_checked:{bg:W(`${t}.400`,`${t}.500`)(e)}}},b8e=e=>{const{colorScheme:t}=e;return{bg:W(`${t}.50`,`${t}.50`)(e)}},_8e=y8e(e=>({container:{},track:v8e(e),thumb:b8e(e)})),S8e=m8e({variants:{invokeAI:_8e},defaultProps:{size:"md",variant:"invokeAI",colorScheme:"accent"}}),{defineMultiStyleConfig:x8e,definePartsStyle:GG}=Be(UV.keys),w8e=e=>({display:"flex",columnGap:4}),C8e=e=>({}),E8e=e=>{const{colorScheme:t}=e;return{display:"flex",flexDirection:"column",gap:1,color:W("base.700","base.400")(e),button:{fontSize:"sm",padding:2,borderRadius:"base",textShadow:W("0 0 0.3rem var(--invokeai-colors-accent-100)","0 0 0.3rem var(--invokeai-colors-accent-900)")(e),svg:{fill:W("base.700","base.300")(e)},_selected:{bg:W("accent.400","accent.600")(e),color:W("base.50","base.100")(e),svg:{fill:W("base.50","base.100")(e),filter:W(`drop-shadow(0px 0px 0.3rem var(--invokeai-colors-${t}-600))`,`drop-shadow(0px 0px 0.3rem var(--invokeai-colors-${t}-800))`)(e)},_hover:{bg:W("accent.500","accent.500")(e),color:W("white","base.50")(e),svg:{fill:W("white","base.50")(e)}}},_hover:{bg:W("base.100","base.800")(e),color:W("base.900","base.50")(e),svg:{fill:W("base.800","base.100")(e)}}}}},T8e=e=>({padding:0,height:"100%"}),A8e=GG(e=>({root:w8e(e),tab:C8e(e),tablist:E8e(e),tabpanel:T8e(e)})),k8e=GG(e=>({tab:{borderTopRadius:"base",px:4,py:1,fontSize:"sm",color:W("base.600","base.400")(e),fontWeight:500,_selected:{color:W("accent.600","accent.400")(e)}},tabpanel:{p:0,pt:4,w:"full",h:"full"},tabpanels:{w:"full",h:"full"}})),P8e=x8e({variants:{line:k8e,appTabs:A8e},defaultProps:{variant:"appTabs",colorScheme:"accent"}}),I8e=e=>({color:W("error.500","error.400")(e)}),M8e=e=>({color:W("base.500","base.400")(e)}),R8e={variants:{subtext:M8e,error:I8e}},O8e=e=>({...DS(e),"::-webkit-scrollbar":{display:"initial"},"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-50) 0%, + var(--invokeai-colors-base-50) 70%, + var(--invokeai-colors-base-200) 70%, + var(--invokeai-colors-base-200) 100%)`},_disabled:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-50) 0%, + var(--invokeai-colors-base-50) 70%, + var(--invokeai-colors-base-200) 70%, + var(--invokeai-colors-base-200) 100%)`}},_dark:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-900) 0%, + var(--invokeai-colors-base-900) 70%, + var(--invokeai-colors-base-800) 70%, + var(--invokeai-colors-base-800) 100%)`},_disabled:{"::-webkit-resizer":{backgroundImage:`linear-gradient(135deg, + var(--invokeai-colors-base-900) 0%, + var(--invokeai-colors-base-900) 70%, + var(--invokeai-colors-base-800) 70%, + var(--invokeai-colors-base-800) 100%)`}}},p:2}),$8e={variants:{invokeAI:O8e},defaultProps:{size:"md",variant:"invokeAI"}},N8e=Xt("popper-arrow-bg"),F8e=e=>({borderRadius:"base",shadow:"dark-lg",bg:W("base.700","base.200")(e),[N8e.variable]:W("colors.base.700","colors.base.200")(e),pb:1.5}),D8e={baseStyle:F8e},fR={backgroundColor:"accentAlpha.150 !important",borderColor:"accentAlpha.700 !important",borderRadius:"base !important",borderStyle:"dashed !important",_dark:{borderColor:"accent.400 !important"}},L8e={".react-flow__nodesselection-rect":{...fR,padding:"1rem !important",boxSizing:"content-box !important",transform:"translate(-1rem, -1rem) !important"},".react-flow__selection":fR},B8e=e=>({color:W("accent.500","accent.300")(e)}),z8e={variants:{accent:B8e}},j8e={config:{cssVarPrefix:"invokeai",initialColorMode:"dark",useSystemColorMode:!1},layerStyles:{body:{bg:"base.50",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.50"}},first:{bg:"base.100",color:"base.900",".chakra-ui-dark &":{bg:"base.850",color:"base.100"}},second:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.800",color:"base.100"}},third:{bg:"base.300",color:"base.900",".chakra-ui-dark &":{bg:"base.750",color:"base.100"}},nodeBody:{bg:"base.100",color:"base.900",".chakra-ui-dark &":{bg:"base.800",color:"base.100"}},nodeHeader:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.100"}},nodeFooter:{bg:"base.200",color:"base.900",".chakra-ui-dark &":{bg:"base.900",color:"base.100"}}},styles:{global:()=>({layerStyle:"body","*":{...JIe},...L8e})},direction:"ltr",fonts:{body:"'Inter Variable', sans-serif",heading:"'Inter Variable', sans-serif"},shadows:{light:{accent:"0 0 10px 0 var(--invokeai-colors-accent-300)",accentHover:"0 0 10px 0 var(--invokeai-colors-accent-400)",ok:"0 0 7px var(--invokeai-colors-ok-600)",working:"0 0 7px var(--invokeai-colors-working-600)",error:"0 0 7px var(--invokeai-colors-error-600)"},dark:{accent:"0 0 10px 0 var(--invokeai-colors-accent-600)",accentHover:"0 0 10px 0 var(--invokeai-colors-accent-500)",ok:"0 0 7px var(--invokeai-colors-ok-400)",working:"0 0 7px var(--invokeai-colors-working-400)",error:"0 0 7px var(--invokeai-colors-error-400)"},selected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 4px var(--invokeai-colors-accent-400)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 4px var(--invokeai-colors-accent-500)"},hoverSelected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 4px var(--invokeai-colors-accent-500)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 4px var(--invokeai-colors-accent-400)"},hoverUnselected:{light:"0px 0px 0px 1px var(--invokeai-colors-base-150), 0px 0px 0px 3px var(--invokeai-colors-accent-500)",dark:"0px 0px 0px 1px var(--invokeai-colors-base-900), 0px 0px 0px 3px var(--invokeai-colors-accent-400)"},nodeSelected:{light:"0 0 0 3px var(--invokeai-colors-accent-400)",dark:"0 0 0 3px var(--invokeai-colors-accent-500)"},nodeHovered:{light:"0 0 0 2px var(--invokeai-colors-accent-500)",dark:"0 0 0 2px var(--invokeai-colors-accent-400)"},nodeHoveredSelected:{light:"0 0 0 3px var(--invokeai-colors-accent-500)",dark:"0 0 0 3px var(--invokeai-colors-accent-400)"},nodeInProgress:{light:"0 0 0 2px var(--invokeai-colors-accent-500), 0 0 10px 2px var(--invokeai-colors-accent-600)",dark:"0 0 0 2px var(--invokeai-colors-yellow-400), 0 0 20px 2px var(--invokeai-colors-orange-700)"}},colors:V6e,components:{Button:J6e,Input:yIe,Editable:dIe,Textarea:$8e,Tabs:P8e,Progress:ZIe,Accordion:Q6e,FormLabel:hIe,Switch:S8e,NumberInput:zIe,Select:o8e,Skeleton:a8e,Slider:g8e,Popover:WIe,Modal:RIe,Checkbox:iIe,Menu:SIe,Text:R8e,Tooltip:D8e,Heading:z8e}},V8e={defaultOptions:{isClosable:!0,position:"bottom-right"}},{toast:Th}=F6e({theme:j8e,defaultOptions:V8e.defaultOptions}),U8e=()=>{fe({matcher:en.endpoints.enqueueBatch.matchFulfilled,effect:async e=>{const t=e.payload,n=e.meta.arg.originalArgs;ue("queue").debug({enqueueResult:tt(t)},"Batch enqueued"),Th.isActive("batch-queued")||Th({id:"batch-queued",title:J("queue.batchQueued"),description:J("queue.batchQueuedDesc",{count:t.enqueued,direction:n.prepend?J("queue.front"):J("queue.back")}),duration:1e3,status:"success"})}}),fe({matcher:en.endpoints.enqueueBatch.matchRejected,effect:async e=>{const t=e.payload,n=e.meta.arg.originalArgs;if(!t){Th({title:J("queue.batchFailedToQueue"),status:"error",description:"Unknown Error"}),ue("queue").error({batchConfig:tt(n),error:tt(t)},J("queue.batchFailedToQueue"));return}const r=j6e.safeParse(t);r.success?r.data.data.detail.map(i=>{Th({id:"batch-failed-to-queue",title:z6(oF(i.msg),{length:128}),status:"error",description:z6(`Path: + ${i.loc.join(".")}`,{length:128})})}):t.status!==403&&Th({title:J("queue.batchFailedToQueue"),description:J("common.unknownError"),status:"error"}),ue("queue").error({batchConfig:tt(n),error:tt(t)},J("queue.batchFailedToQueue"))}})},hu=m4({memoize:kQ,memoizeOptions:{resultEqualityCheck:$4}}),HG=(e,t)=>{var d;const{generation:n,canvas:r,nodes:i,controlAdapters:o}=e,s=((d=n.initialImage)==null?void 0:d.imageName)===t,a=r.layerState.objects.some(f=>f.kind==="image"&&f.imageName===t),l=i.nodes.filter(Sn).some(f=>Gu(f.data.inputs,h=>{var p;return vT(h)&&((p=h.value)==null?void 0:p.image_name)===t})),c=As(o).some(f=>f.controlImage===t||hi(f)&&f.processedControlImage===t);return{isInitialImage:s,isCanvasImage:a,isNodesImage:l,isControlImage:c}},G8e=hu([e=>e],e=>{const{imagesToDelete:t}=e.deleteImageModal;return t.length?t.map(r=>HG(e,r.image_name)):[]}),H8e=()=>{fe({matcher:ce.endpoints.deleteBoardAndImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{deleted_images:r}=e.payload;let i=!1,o=!1,s=!1,a=!1;const l=n();r.forEach(c=>{const u=HG(l,c);u.isInitialImage&&!i&&(t(oT()),i=!0),u.isCanvasImage&&!o&&(t(dT()),o=!0),u.isNodesImage&&!s&&(t(Rj()),s=!0),u.isControlImage&&!a&&(t(hae()),a=!0)})}})},W8e=()=>{fe({matcher:br(vp,Q5),effect:async(e,{getState:t,dispatch:n,condition:r,cancelActiveListeners:i})=>{i();const o=t(),s=vp.match(e)?e.payload.boardId:o.gallery.selectedBoardId,l=(Q5.match(e)?e.payload:o.gallery.galleryView)==="images"?Rn:Pr,c={board_id:s??"none",categories:l};if(await r(()=>ce.endpoints.listImages.select(c)(t()).isSuccess,5e3)){const{data:d}=ce.endpoints.listImages.select(c)(t());if(d&&vp.match(e)&&e.payload.selectedImageName){const f=_g.selectAll(d)[0],h=_g.selectById(d,e.payload.selectedImageName);n(ps(h||f||null))}else n(ps(null))}else n(ps(null))}})},q8e=he("canvas/canvasSavedToGallery"),K8e=he("canvas/canvasMaskSavedToGallery"),X8e=he("canvas/canvasCopiedToClipboard"),Q8e=he("canvas/canvasDownloadedAsImage"),Y8e=he("canvas/canvasMerged"),Z8e=he("canvas/stagingAreaImageSaved"),J8e=he("canvas/canvasMaskToControlAdapter"),eMe=he("canvas/canvasImageToControlAdapter");let WG=null,qG=null;const MWe=e=>{WG=e},LS=()=>WG,RWe=e=>{qG=e},tMe=()=>qG,nMe=async e=>new Promise((t,n)=>{e.toBlob(r=>{if(r){t(r);return}n("Unable to create Blob")})}),rb=async(e,t)=>await nMe(e.toCanvas(t)),BS=async(e,t=!1)=>{const n=LS();if(!n)throw new Error("Problem getting base layer blob");const{shouldCropToBoundingBoxOnSave:r,boundingBoxCoordinates:i,boundingBoxDimensions:o}=e.canvas,s=n.clone();s.scale({x:1,y:1});const a=s.getAbsolutePosition(),l=r||t?{x:i.x+a.x,y:i.y+a.y,width:o.width,height:o.height}:s.getClientRect();return rb(s,l)},rMe=(e,t="image/png")=>{navigator.clipboard.write([new ClipboardItem({[t]:e})])},iMe=()=>{fe({actionCreator:X8e,effect:async(e,{dispatch:t,getState:n})=>{const r=B_.get().child({namespace:"canvasCopiedToClipboardListener"}),i=n();try{const o=BS(i);rMe(o)}catch(o){r.error(String(o)),t(Ve({title:J("toast.problemCopyingCanvas"),description:J("toast.problemCopyingCanvasDesc"),status:"error"}));return}t(Ve({title:J("toast.canvasCopiedClipboard"),status:"success"}))}})},oMe=(e,t)=>{const n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),r.remove()},sMe=()=>{fe({actionCreator:Q8e,effect:async(e,{dispatch:t,getState:n})=>{const r=B_.get().child({namespace:"canvasSavedToGalleryListener"}),i=n();let o;try{o=await BS(i)}catch(s){r.error(String(s)),t(Ve({title:J("toast.problemDownloadingCanvas"),description:J("toast.problemDownloadingCanvasDesc"),status:"error"}));return}oMe(o,"canvas.png"),t(Ve({title:J("toast.canvasDownloaded"),status:"success"}))}})},aMe=()=>{fe({actionCreator:eMe,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{id:o}=e.payload;let s;try{s=await BS(i,!0)}catch(u){r.error(String(u)),t(Ve({title:J("toast.problemSavingCanvas"),description:J("toast.problemSavingCanvasDesc"),status:"error"}));return}const{autoAddBoardId:a}=i.gallery,l=await t(ce.endpoints.uploadImage.initiate({file:new File([s],"savedCanvas.png",{type:"image/png"}),image_category:"control",is_intermediate:!1,board_id:a==="none"?void 0:a,crop_visible:!1,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasSentControlnetAssets")}}})).unwrap(),{image_name:c}=l;t(Nl({id:o,controlImage:c}))}})};var NA={exports:{}},zS={},KG={},Ue={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e._registerNode=e.Konva=e.glob=void 0;const t=Math.PI/180;function n(){return typeof window<"u"&&({}.toString.call(window)==="[object Window]"||{}.toString.call(window)==="[object global]")}e.glob=typeof He<"u"?He:typeof window<"u"?window:typeof WorkerGlobalScope<"u"?self:{},e.Konva={_global:e.glob,version:"9.2.3",isBrowser:n(),isUnminified:/param/.test((function(i){}).toString()),dblClickWindow:400,getAngle(i){return e.Konva.angleDeg?i*t:i},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,pixelRatio:typeof window<"u"&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return e.Konva.DD.isDragging},isDragReady(){return!!e.Konva.DD.node},releaseCanvasOnDestroy:!0,document:e.glob.document,_injectGlobal(i){e.glob.Konva=i}};const r=i=>{e.Konva[i.prototype.getClassName()]=i};e._registerNode=r,e.Konva._injectGlobal(e.Konva)})(Ue);var Qt={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Util=e.Transform=void 0;const t=Ue;class n{constructor(b=[1,0,0,1,0,0]){this.dirty=!1,this.m=b&&b.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new n(this.m)}copyInto(b){b.m[0]=this.m[0],b.m[1]=this.m[1],b.m[2]=this.m[2],b.m[3]=this.m[3],b.m[4]=this.m[4],b.m[5]=this.m[5]}point(b){var S=this.m;return{x:S[0]*b.x+S[2]*b.y+S[4],y:S[1]*b.x+S[3]*b.y+S[5]}}translate(b,S){return this.m[4]+=this.m[0]*b+this.m[2]*S,this.m[5]+=this.m[1]*b+this.m[3]*S,this}scale(b,S){return this.m[0]*=b,this.m[1]*=b,this.m[2]*=S,this.m[3]*=S,this}rotate(b){var S=Math.cos(b),w=Math.sin(b),C=this.m[0]*S+this.m[2]*w,x=this.m[1]*S+this.m[3]*w,k=this.m[0]*-w+this.m[2]*S,A=this.m[1]*-w+this.m[3]*S;return this.m[0]=C,this.m[1]=x,this.m[2]=k,this.m[3]=A,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(b,S){var w=this.m[0]+this.m[2]*S,C=this.m[1]+this.m[3]*S,x=this.m[2]+this.m[0]*b,k=this.m[3]+this.m[1]*b;return this.m[0]=w,this.m[1]=C,this.m[2]=x,this.m[3]=k,this}multiply(b){var S=this.m[0]*b.m[0]+this.m[2]*b.m[1],w=this.m[1]*b.m[0]+this.m[3]*b.m[1],C=this.m[0]*b.m[2]+this.m[2]*b.m[3],x=this.m[1]*b.m[2]+this.m[3]*b.m[3],k=this.m[0]*b.m[4]+this.m[2]*b.m[5]+this.m[4],A=this.m[1]*b.m[4]+this.m[3]*b.m[5]+this.m[5];return this.m[0]=S,this.m[1]=w,this.m[2]=C,this.m[3]=x,this.m[4]=k,this.m[5]=A,this}invert(){var b=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),S=this.m[3]*b,w=-this.m[1]*b,C=-this.m[2]*b,x=this.m[0]*b,k=b*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),A=b*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=S,this.m[1]=w,this.m[2]=C,this.m[3]=x,this.m[4]=k,this.m[5]=A,this}getMatrix(){return this.m}decompose(){var b=this.m[0],S=this.m[1],w=this.m[2],C=this.m[3],x=this.m[4],k=this.m[5],A=b*C-S*w;let R={x,y:k,rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(b!=0||S!=0){var L=Math.sqrt(b*b+S*S);R.rotation=S>0?Math.acos(b/L):-Math.acos(b/L),R.scaleX=L,R.scaleY=A/L,R.skewX=(b*w+S*C)/A,R.skewY=0}else if(w!=0||C!=0){var M=Math.sqrt(w*w+C*C);R.rotation=Math.PI/2-(C>0?Math.acos(-w/M):-Math.acos(w/M)),R.scaleX=A/M,R.scaleY=M,R.skewX=0,R.skewY=(b*w+S*C)/A}return R.rotation=e.Util._getRotation(R.rotation),R}}e.Transform=n;var r="[object Array]",i="[object Number]",o="[object String]",s="[object Boolean]",a=Math.PI/180,l=180/Math.PI,c="#",u="",d="0",f="Konva warning: ",h="Konva error: ",p="rgb(",m={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},_=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,v=[];const y=typeof requestAnimationFrame<"u"&&requestAnimationFrame||function(g){setTimeout(g,60)};e.Util={_isElement(g){return!!(g&&g.nodeType==1)},_isFunction(g){return!!(g&&g.constructor&&g.call&&g.apply)},_isPlainObject(g){return!!g&&g.constructor===Object},_isArray(g){return Object.prototype.toString.call(g)===r},_isNumber(g){return Object.prototype.toString.call(g)===i&&!isNaN(g)&&isFinite(g)},_isString(g){return Object.prototype.toString.call(g)===o},_isBoolean(g){return Object.prototype.toString.call(g)===s},isObject(g){return g instanceof Object},isValidSelector(g){if(typeof g!="string")return!1;var b=g[0];return b==="#"||b==="."||b===b.toUpperCase()},_sign(g){return g===0||g>0?1:-1},requestAnimFrame(g){v.push(g),v.length===1&&y(function(){const b=v;v=[],b.forEach(function(S){S()})})},createCanvasElement(){var g=document.createElement("canvas");try{g.style=g.style||{}}catch{}return g},createImageElement(){return document.createElement("img")},_isInDocument(g){for(;g=g.parentNode;)if(g==document)return!0;return!1},_urlToImage(g,b){var S=e.Util.createImageElement();S.onload=function(){b(S)},S.src=g},_rgbToHex(g,b,S){return((1<<24)+(g<<16)+(b<<8)+S).toString(16).slice(1)},_hexToRgb(g){g=g.replace(c,u);var b=parseInt(g,16);return{r:b>>16&255,g:b>>8&255,b:b&255}},getRandomColor(){for(var g=(Math.random()*16777215<<0).toString(16);g.length<6;)g=d+g;return c+g},getRGB(g){var b;return g in m?(b=m[g],{r:b[0],g:b[1],b:b[2]}):g[0]===c?this._hexToRgb(g.substring(1)):g.substr(0,4)===p?(b=_.exec(g.replace(/ /g,"")),{r:parseInt(b[1],10),g:parseInt(b[2],10),b:parseInt(b[3],10)}):{r:0,g:0,b:0}},colorToRGBA(g){return g=g||"black",e.Util._namedColorToRBA(g)||e.Util._hex3ColorToRGBA(g)||e.Util._hex4ColorToRGBA(g)||e.Util._hex6ColorToRGBA(g)||e.Util._hex8ColorToRGBA(g)||e.Util._rgbColorToRGBA(g)||e.Util._rgbaColorToRGBA(g)||e.Util._hslColorToRGBA(g)},_namedColorToRBA(g){var b=m[g.toLowerCase()];return b?{r:b[0],g:b[1],b:b[2],a:1}:null},_rgbColorToRGBA(g){if(g.indexOf("rgb(")===0){g=g.match(/rgb\(([^)]+)\)/)[1];var b=g.split(/ *, */).map(Number);return{r:b[0],g:b[1],b:b[2],a:1}}},_rgbaColorToRGBA(g){if(g.indexOf("rgba(")===0){g=g.match(/rgba\(([^)]+)\)/)[1];var b=g.split(/ *, */).map((S,w)=>S.slice(-1)==="%"?w===3?parseInt(S)/100:parseInt(S)/100*255:Number(S));return{r:b[0],g:b[1],b:b[2],a:b[3]}}},_hex8ColorToRGBA(g){if(g[0]==="#"&&g.length===9)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:parseInt(g.slice(7,9),16)/255}},_hex6ColorToRGBA(g){if(g[0]==="#"&&g.length===7)return{r:parseInt(g.slice(1,3),16),g:parseInt(g.slice(3,5),16),b:parseInt(g.slice(5,7),16),a:1}},_hex4ColorToRGBA(g){if(g[0]==="#"&&g.length===5)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:parseInt(g[4]+g[4],16)/255}},_hex3ColorToRGBA(g){if(g[0]==="#"&&g.length===4)return{r:parseInt(g[1]+g[1],16),g:parseInt(g[2]+g[2],16),b:parseInt(g[3]+g[3],16),a:1}},_hslColorToRGBA(g){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(g)){const[b,...S]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(g),w=Number(S[0])/360,C=Number(S[1])/100,x=Number(S[2])/100;let k,A,R;if(C===0)return R=x*255,{r:Math.round(R),g:Math.round(R),b:Math.round(R),a:1};x<.5?k=x*(1+C):k=x+C-x*C;const L=2*x-k,M=[0,0,0];for(let E=0;E<3;E++)A=w+1/3*-(E-1),A<0&&A++,A>1&&A--,6*A<1?R=L+(k-L)*6*A:2*A<1?R=k:3*A<2?R=L+(k-L)*(2/3-A)*6:R=L,M[E]=R*255;return{r:Math.round(M[0]),g:Math.round(M[1]),b:Math.round(M[2]),a:1}}},haveIntersection(g,b){return!(b.x>g.x+g.width||b.x+b.widthg.y+g.height||b.y+b.height1?(k=S,A=w,R=(S-C)*(S-C)+(w-x)*(w-x)):(k=g+M*(S-g),A=b+M*(w-b),R=(k-C)*(k-C)+(A-x)*(A-x))}return[k,A,R]},_getProjectionToLine(g,b,S){var w=e.Util.cloneObject(g),C=Number.MAX_VALUE;return b.forEach(function(x,k){if(!(!S&&k===b.length-1)){var A=b[(k+1)%b.length],R=e.Util._getProjectionToSegment(x.x,x.y,A.x,A.y,g.x,g.y),L=R[0],M=R[1],E=R[2];Eb.length){var k=b;b=g,g=k}for(w=0;w{b.width=0,b.height=0})},drawRoundedRectPath(g,b,S,w){let C=0,x=0,k=0,A=0;typeof w=="number"?C=x=k=A=Math.min(w,b/2,S/2):(C=Math.min(w[0]||0,b/2,S/2),x=Math.min(w[1]||0,b/2,S/2),A=Math.min(w[2]||0,b/2,S/2),k=Math.min(w[3]||0,b/2,S/2)),g.moveTo(C,0),g.lineTo(b-x,0),g.arc(b-x,x,x,Math.PI*3/2,0,!1),g.lineTo(b,S-A),g.arc(b-A,S-A,A,0,Math.PI/2,!1),g.lineTo(k,S),g.arc(k,S-k,k,Math.PI/2,Math.PI,!1),g.lineTo(0,C),g.arc(C,C,C,Math.PI,Math.PI*3/2,!1)}}})(Qt);var Vt={},ze={},xe={};Object.defineProperty(xe,"__esModule",{value:!0});xe.getComponentValidator=xe.getBooleanValidator=xe.getNumberArrayValidator=xe.getFunctionValidator=xe.getStringOrGradientValidator=xe.getStringValidator=xe.getNumberOrAutoValidator=xe.getNumberOrArrayOfNumbersValidator=xe.getNumberValidator=xe.alphaComponent=xe.RGBComponent=void 0;const va=Ue,nn=Qt;function ba(e){return nn.Util._isString(e)?'"'+e+'"':Object.prototype.toString.call(e)==="[object Number]"||nn.Util._isBoolean(e)?e:Object.prototype.toString.call(e)}function lMe(e){return e>255?255:e<0?0:Math.round(e)}xe.RGBComponent=lMe;function cMe(e){return e>1?1:e<1e-4?1e-4:e}xe.alphaComponent=cMe;function uMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isNumber(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a number.'),e}}xe.getNumberValidator=uMe;function dMe(e){if(va.Konva.isUnminified)return function(t,n){let r=nn.Util._isNumber(t),i=nn.Util._isArray(t)&&t.length==e;return!r&&!i&&nn.Util.warn(ba(t)+' is a not valid value for "'+n+'" attribute. The value should be a number or Array('+e+")"),t}}xe.getNumberOrArrayOfNumbersValidator=dMe;function fMe(){if(va.Konva.isUnminified)return function(e,t){var n=nn.Util._isNumber(e),r=e==="auto";return n||r||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a number or "auto".'),e}}xe.getNumberOrAutoValidator=fMe;function hMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isString(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a string.'),e}}xe.getStringValidator=hMe;function pMe(){if(va.Konva.isUnminified)return function(e,t){const n=nn.Util._isString(e),r=Object.prototype.toString.call(e)==="[object CanvasGradient]"||e&&e.addColorStop;return n||r||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a string or a native gradient.'),e}}xe.getStringOrGradientValidator=pMe;function gMe(){if(va.Konva.isUnminified)return function(e,t){return nn.Util._isFunction(e)||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a function.'),e}}xe.getFunctionValidator=gMe;function mMe(){if(va.Konva.isUnminified)return function(e,t){const n=Int8Array?Object.getPrototypeOf(Int8Array):null;return n&&e instanceof n||(nn.Util._isArray(e)?e.forEach(function(r){nn.Util._isNumber(r)||nn.Util.warn('"'+t+'" attribute has non numeric element '+r+". Make sure that all elements are numbers.")}):nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a array of numbers.')),e}}xe.getNumberArrayValidator=mMe;function yMe(){if(va.Konva.isUnminified)return function(e,t){var n=e===!0||e===!1;return n||nn.Util.warn(ba(e)+' is a not valid value for "'+t+'" attribute. The value should be a boolean.'),e}}xe.getBooleanValidator=yMe;function vMe(e){if(va.Konva.isUnminified)return function(t,n){return t==null||nn.Util.isObject(t)||nn.Util.warn(ba(t)+' is a not valid value for "'+n+'" attribute. The value should be an object with properties '+e),t}}xe.getComponentValidator=vMe;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Factory=void 0;const t=Qt,n=xe;var r="get",i="set";e.Factory={addGetterSetter(o,s,a,l,c){e.Factory.addGetter(o,s,a),e.Factory.addSetter(o,s,l,c),e.Factory.addOverloadedGetterSetter(o,s)},addGetter(o,s,a){var l=r+t.Util._capitalize(s);o.prototype[l]=o.prototype[l]||function(){var c=this.attrs[s];return c===void 0?a:c}},addSetter(o,s,a,l){var c=i+t.Util._capitalize(s);o.prototype[c]||e.Factory.overWriteSetter(o,s,a,l)},overWriteSetter(o,s,a,l){var c=i+t.Util._capitalize(s);o.prototype[c]=function(u){return a&&u!==void 0&&u!==null&&(u=a.call(this,u,s)),this._setAttr(s,u),l&&l.call(this),this}},addComponentsGetterSetter(o,s,a,l,c){var u=a.length,d=t.Util._capitalize,f=r+d(s),h=i+d(s),p,m;o.prototype[f]=function(){var v={};for(p=0;p{this._setAttr(s+d(b),void 0)}),this._fireChangeEvent(s,y,v),c&&c.call(this),this},e.Factory.addOverloadedGetterSetter(o,s)},addOverloadedGetterSetter(o,s){var a=t.Util._capitalize(s),l=i+a,c=r+a;o.prototype[s]=function(){return arguments.length?(this[l](arguments[0]),this):this[c]()}},addDeprecatedGetterSetter(o,s,a,l){t.Util.error("Adding deprecated "+s);var c=r+t.Util._capitalize(s),u=s+" property is deprecated and will be removed soon. Look at Konva change log for more information.";o.prototype[c]=function(){t.Util.error(u);var d=this.attrs[s];return d===void 0?a:d},e.Factory.addSetter(o,s,l,function(){t.Util.error(u)}),e.Factory.addOverloadedGetterSetter(o,s)},backCompat(o,s){t.Util.each(s,function(a,l){var c=o.prototype[l],u=r+t.Util._capitalize(a),d=i+t.Util._capitalize(a);function f(){c.apply(this,arguments),t.Util.error('"'+a+'" method is deprecated and will be removed soon. Use ""'+l+'" instead.')}o.prototype[a]=f,o.prototype[u]=f,o.prototype[d]=f})},afterSetFilter(){this._filterUpToDate=!1}}})(ze);var Ro={},ia={};Object.defineProperty(ia,"__esModule",{value:!0});ia.HitContext=ia.SceneContext=ia.Context=void 0;const XG=Qt,bMe=Ue;function _Me(e){var t=[],n=e.length,r=XG.Util,i,o;for(i=0;itypeof u=="number"?Math.floor(u):u)),o+=SMe+c.join(hR)+xMe)):(o+=a.property,t||(o+=AMe+a.val)),o+=EMe;return o}clearTrace(){this.traceArr=[]}_trace(t){var n=this.traceArr,r;n.push(t),r=n.length,r>=PMe&&n.shift()}reset(){var t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){var n=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,n.getWidth()/n.pixelRatio,n.getHeight()/n.pixelRatio)}_applyLineCap(t){const n=t.attrs.lineCap;n&&this.setAttr("lineCap",n)}_applyOpacity(t){var n=t.getAbsoluteOpacity();n!==1&&this.setAttr("globalAlpha",n)}_applyLineJoin(t){const n=t.attrs.lineJoin;n&&this.setAttr("lineJoin",n)}setAttr(t,n){this._context[t]=n}arc(t,n,r,i,o,s){this._context.arc(t,n,r,i,o,s)}arcTo(t,n,r,i,o){this._context.arcTo(t,n,r,i,o)}beginPath(){this._context.beginPath()}bezierCurveTo(t,n,r,i,o,s){this._context.bezierCurveTo(t,n,r,i,o,s)}clearRect(t,n,r,i){this._context.clearRect(t,n,r,i)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,n){var r=arguments;if(r.length===2)return this._context.createImageData(t,n);if(r.length===1)return this._context.createImageData(t)}createLinearGradient(t,n,r,i){return this._context.createLinearGradient(t,n,r,i)}createPattern(t,n){return this._context.createPattern(t,n)}createRadialGradient(t,n,r,i,o,s){return this._context.createRadialGradient(t,n,r,i,o,s)}drawImage(t,n,r,i,o,s,a,l,c){var u=arguments,d=this._context;u.length===3?d.drawImage(t,n,r):u.length===5?d.drawImage(t,n,r,i,o):u.length===9&&d.drawImage(t,n,r,i,o,s,a,l,c)}ellipse(t,n,r,i,o,s,a,l){this._context.ellipse(t,n,r,i,o,s,a,l)}isPointInPath(t,n,r,i){return r?this._context.isPointInPath(r,t,n,i):this._context.isPointInPath(t,n,i)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,n,r,i){this._context.fillRect(t,n,r,i)}strokeRect(t,n,r,i){this._context.strokeRect(t,n,r,i)}fillText(t,n,r,i){i?this._context.fillText(t,n,r,i):this._context.fillText(t,n,r)}measureText(t){return this._context.measureText(t)}getImageData(t,n,r,i){return this._context.getImageData(t,n,r,i)}lineTo(t,n){this._context.lineTo(t,n)}moveTo(t,n){this._context.moveTo(t,n)}rect(t,n,r,i){this._context.rect(t,n,r,i)}putImageData(t,n,r){this._context.putImageData(t,n,r)}quadraticCurveTo(t,n,r,i){this._context.quadraticCurveTo(t,n,r,i)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,n){this._context.scale(t,n)}setLineDash(t){this._context.setLineDash?this._context.setLineDash(t):"mozDash"in this._context?this._context.mozDash=t:"webkitLineDash"in this._context&&(this._context.webkitLineDash=t)}getLineDash(){return this._context.getLineDash()}setTransform(t,n,r,i,o,s){this._context.setTransform(t,n,r,i,o,s)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,n,r,i){this._context.strokeText(t,n,r,i)}transform(t,n,r,i,o,s){this._context.transform(t,n,r,i,o,s)}translate(t,n){this._context.translate(t,n)}_enableTrace(){var t=this,n=pR.length,r=this.setAttr,i,o,s=function(a){var l=t[a],c;t[a]=function(){return o=_Me(Array.prototype.slice.call(arguments,0)),c=l.apply(t,arguments),t._trace({method:a,args:o}),c}};for(i=0;i{i.dragStatus==="dragging"&&(r=!0)}),r},justDragged:!1,get node(){var r;return e.DD._dragElements.forEach(i=>{r=i.node}),r},_dragElements:new Map,_drag(r){const i=[];e.DD._dragElements.forEach((o,s)=>{const{node:a}=o,l=a.getStage();l.setPointersPositions(r),o.pointerId===void 0&&(o.pointerId=n.Util._getFirstPointerId(r));const c=l._changedPointerPositions.find(f=>f.id===o.pointerId);if(c){if(o.dragStatus!=="dragging"){var u=a.dragDistance(),d=Math.max(Math.abs(c.x-o.startPointerPos.x),Math.abs(c.y-o.startPointerPos.y));if(d{o.fire("dragmove",{type:"dragmove",target:o,evt:r},!0)})},_endDragBefore(r){const i=[];e.DD._dragElements.forEach(o=>{const{node:s}=o,a=s.getStage();if(r&&a.setPointersPositions(r),!a._changedPointerPositions.find(u=>u.id===o.pointerId))return;(o.dragStatus==="dragging"||o.dragStatus==="stopped")&&(e.DD.justDragged=!0,t.Konva._mouseListenClick=!1,t.Konva._touchListenClick=!1,t.Konva._pointerListenClick=!1,o.dragStatus="stopped");const c=o.node.getLayer()||o.node instanceof t.Konva.Stage&&o.node;c&&i.indexOf(c)===-1&&i.push(c)}),i.forEach(o=>{o.draw()})},_endDragAfter(r){e.DD._dragElements.forEach((i,o)=>{i.dragStatus==="stopped"&&i.node.fire("dragend",{type:"dragend",target:i.node,evt:r},!0),i.dragStatus!=="dragging"&&e.DD._dragElements.delete(o)})}},t.Konva.isBrowser&&(window.addEventListener("mouseup",e.DD._endDragBefore,!0),window.addEventListener("touchend",e.DD._endDragBefore,!0),window.addEventListener("mousemove",e.DD._drag),window.addEventListener("touchmove",e.DD._drag),window.addEventListener("mouseup",e.DD._endDragAfter,!1),window.addEventListener("touchend",e.DD._endDragAfter,!1))})(US);Object.defineProperty(Vt,"__esModule",{value:!0});Vt.Node=void 0;const We=Qt,t0=ze,Cy=Ro,Jl=Ue,Bi=US,dn=xe;var Sv="absoluteOpacity",Ey="allEventListeners",Ds="absoluteTransform",gR="absoluteScale",ec="canvas",DMe="Change",LMe="children",BMe="konva",q3="listening",mR="mouseenter",yR="mouseleave",vR="set",bR="Shape",xv=" ",_R="stage",Fa="transform",zMe="Stage",K3="visible",jMe=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(xv);let VMe=1;class $e{constructor(t){this._id=VMe++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){(t===Fa||t===Ds)&&this._cache.get(t)?this._cache.get(t).dirty=!0:t?this._cache.delete(t):this._cache.clear()}_getCache(t,n){var r=this._cache.get(t),i=t===Fa||t===Ds,o=r===void 0||i&&r.dirty===!0;return o&&(r=n.call(this),this._cache.set(t,r)),r}_calculate(t,n,r){if(!this._attachedDepsListeners.get(t)){const i=n.map(o=>o+"Change.konva").join(xv);this.on(i,()=>{this._clearCache(t)}),this._attachedDepsListeners.set(t,!0)}return this._getCache(t,r)}_getCanvasCache(){return this._cache.get(ec)}_clearSelfAndDescendantCache(t){this._clearCache(t),t===Ds&&this.fire("absoluteTransformChange")}clearCache(){if(this._cache.has(ec)){const{scene:t,filter:n,hit:r}=this._cache.get(ec);We.Util.releaseCanvas(t,n,r),this._cache.delete(ec)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){var n=t||{},r={};(n.x===void 0||n.y===void 0||n.width===void 0||n.height===void 0)&&(r=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));var i=Math.ceil(n.width||r.width),o=Math.ceil(n.height||r.height),s=n.pixelRatio,a=n.x===void 0?Math.floor(r.x):n.x,l=n.y===void 0?Math.floor(r.y):n.y,c=n.offset||0,u=n.drawBorder||!1,d=n.hitCanvasPixelRatio||1;if(!i||!o){We.Util.error("Can not cache the node. Width or height of the node equals 0. Caching is skipped.");return}i+=c*2+1,o+=c*2+1,a-=c,l-=c;var f=new Cy.SceneCanvas({pixelRatio:s,width:i,height:o}),h=new Cy.SceneCanvas({pixelRatio:s,width:0,height:0,willReadFrequently:!0}),p=new Cy.HitCanvas({pixelRatio:d,width:i,height:o}),m=f.getContext(),_=p.getContext();return p.isCache=!0,f.isCache=!0,this._cache.delete(ec),this._filterUpToDate=!1,n.imageSmoothingEnabled===!1&&(f.getContext()._context.imageSmoothingEnabled=!1,h.getContext()._context.imageSmoothingEnabled=!1),m.save(),_.save(),m.translate(-a,-l),_.translate(-a,-l),this._isUnderCache=!0,this._clearSelfAndDescendantCache(Sv),this._clearSelfAndDescendantCache(gR),this.drawScene(f,this),this.drawHit(p,this),this._isUnderCache=!1,m.restore(),_.restore(),u&&(m.save(),m.beginPath(),m.rect(0,0,i,o),m.closePath(),m.setAttr("strokeStyle","red"),m.setAttr("lineWidth",5),m.stroke(),m.restore()),this._cache.set(ec,{scene:f,filter:h,hit:p,x:a,y:l}),this._requestDraw(),this}isCached(){return this._cache.has(ec)}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_transformedRect(t,n){var r=[{x:t.x,y:t.y},{x:t.x+t.width,y:t.y},{x:t.x+t.width,y:t.y+t.height},{x:t.x,y:t.y+t.height}],i=1/0,o=1/0,s=-1/0,a=-1/0,l=this.getAbsoluteTransform(n);return r.forEach(function(c){var u=l.point(c);i===void 0&&(i=s=u.x,o=a=u.y),i=Math.min(i,u.x),o=Math.min(o,u.y),s=Math.max(s,u.x),a=Math.max(a,u.y)}),{x:i,y:o,width:s-i,height:a-o}}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const n=this._getCanvasCache();t.translate(n.x,n.y);var r=this._getCachedSceneCanvas(),i=r.pixelRatio;t.drawImage(r._canvas,0,0,r.width/i,r.height/i),t.restore()}_drawCachedHitCanvas(t){var n=this._getCanvasCache(),r=n.hit;t.save(),t.translate(n.x,n.y),t.drawImage(r._canvas,0,0,r.width/r.pixelRatio,r.height/r.pixelRatio),t.restore()}_getCachedSceneCanvas(){var t=this.filters(),n=this._getCanvasCache(),r=n.scene,i=n.filter,o=i.getContext(),s,a,l,c;if(t){if(!this._filterUpToDate){var u=r.pixelRatio;i.setSize(r.width/r.pixelRatio,r.height/r.pixelRatio);try{for(s=t.length,o.clear(),o.drawImage(r._canvas,0,0,r.getWidth()/u,r.getHeight()/u),a=o.getImageData(0,0,i.getWidth(),i.getHeight()),l=0;l{var n,r;if(!t)return this;for(n in t)n!==LMe&&(r=vR+We.Util._capitalize(n),We.Util._isFunction(this[r])?this[r](t[n]):this._setAttr(n,t[n]))}),this}isListening(){return this._getCache(q3,this._isListening)}_isListening(t){if(!this.listening())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isListening(t):!0}isVisible(){return this._getCache(K3,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const r=this.getParent();return r&&r!==t&&this!==t?r._isVisible(t):!0}shouldDrawHit(t,n=!1){if(t)return this._isVisible(t)&&this._isListening(t);var r=this.getLayer(),i=!1;Bi.DD._dragElements.forEach(s=>{s.dragStatus==="dragging"&&(s.node.nodeType==="Stage"||s.node.getLayer()===r)&&(i=!0)});var o=!n&&!Jl.Konva.hitOnDragEnabled&&i;return this.isListening()&&this.isVisible()&&!o}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){var t=this.getDepth(),n=this,r=0,i,o,s,a;function l(u){for(i=[],o=u.length,s=0;s0&&i[0].getDepth()<=t&&l(i)}const c=this.getStage();return n.nodeType!==zMe&&c&&l(c.getChildren()),r}getDepth(){for(var t=0,n=this.parent;n;)t++,n=n.parent;return t}_batchTransformChanges(t){this._batchingTransformChange=!0,t(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(Fa),this._clearSelfAndDescendantCache(Ds)),this._needClearTransformCache=!1}setPosition(t){return this._batchTransformChanges(()=>{this.x(t.x),this.y(t.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const t=this.getStage();if(!t)return null;var n=t.getPointerPosition();if(!n)return null;var r=this.getAbsoluteTransform().copy();return r.invert(),r.point(n)}getAbsolutePosition(t){let n=!1,r=this.parent;for(;r;){if(r.isCached()){n=!0;break}r=r.parent}n&&!t&&(t=!0);var i=this.getAbsoluteTransform(t).getMatrix(),o=new We.Transform,s=this.offset();return o.m=i.slice(),o.translate(s.x,s.y),o.getTranslation()}setAbsolutePosition(t){const{x:n,y:r,...i}=this._clearTransform();this.attrs.x=n,this.attrs.y=r,this._clearCache(Fa);var o=this._getAbsoluteTransform().copy();return o.invert(),o.translate(t.x,t.y),t={x:this.attrs.x+o.getTranslation().x,y:this.attrs.y+o.getTranslation().y},this._setTransform(i),this.setPosition({x:t.x,y:t.y}),this._clearCache(Fa),this._clearSelfAndDescendantCache(Ds),this}_setTransform(t){var n;for(n in t)this.attrs[n]=t[n]}_clearTransform(){var t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){var n=t.x,r=t.y,i=this.x(),o=this.y();return n!==void 0&&(i+=n),r!==void 0&&(o+=r),this.setPosition({x:i,y:o}),this}_eachAncestorReverse(t,n){var r=[],i=this.getParent(),o,s;if(!(n&&n._id===this._id)){for(r.unshift(this);i&&(!n||i._id!==n._id);)r.unshift(i),i=i.parent;for(o=r.length,s=0;s0?(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0):!1}moveToBottom(){if(!this.parent)return We.Util.warn("Node has no parent. moveToBottom function is ignored."),!1;var t=this.index;return t>0?(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0):!1}setZIndex(t){if(!this.parent)return We.Util.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&We.Util.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");var n=this.index;return this.parent.children.splice(n,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(Sv,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){var t=this.opacity(),n=this.getParent();return n&&!n._isUnderCache&&(t*=n.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){var t={},n=this.getAttrs(),r,i,o,s,a;t.attrs={};for(r in n)i=n[r],a=We.Util.isObject(i)&&!We.Util._isPlainObject(i)&&!We.Util._isArray(i),!a&&(o=typeof this[r]=="function"&&this[r],delete n[r],s=o?o.call(this):null,n[r]=i,s!==i&&(t.attrs[r]=i));return t.className=this.getClassName(),We.Util._prepareToStringify(t)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,n,r){var i=[];n&&this._isMatch(t)&&i.push(this);for(var o=this.parent;o;){if(o===r)return i;o._isMatch(t)&&i.push(o),o=o.parent}return i}isAncestorOf(t){return!1}findAncestor(t,n,r){return this.findAncestors(t,n,r)[0]}_isMatch(t){if(!t)return!1;if(typeof t=="function")return t(this);var n=t.replace(/ /g,"").split(","),r=n.length,i,o;for(i=0;i{try{const i=t==null?void 0:t.callback;i&&delete t.callback,We.Util._urlToImage(this.toDataURL(t),function(o){n(o),i==null||i(o)})}catch(i){r(i)}})}toBlob(t){return new Promise((n,r)=>{try{const i=t==null?void 0:t.callback;i&&delete t.callback,this.toCanvas(t).toBlob(o=>{n(o),i==null||i(o)})}catch(i){r(i)}})}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return this.attrs.dragDistance!==void 0?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():Jl.Konva.dragDistance}_off(t,n,r){var i=this.eventListeners[t],o,s,a;for(o=0;o=0;if(r&&!this.isDragging()){var i=!1;Bi.DD._dragElements.forEach(o=>{this.isAncestorOf(o.node)&&(i=!0)}),i||this._createDragElement(t)}})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();var t=this.getStage();if(!t)return;const n=Bi.DD._dragElements.get(this._id),r=n&&n.dragStatus==="dragging",i=n&&n.dragStatus==="ready";r?this.stopDrag():i&&Bi.DD._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const n=this.getStage();if(!n)return!1;const r={x:-t.x,y:-t.y,width:n.width()+2*t.x,height:n.height()+2*t.y};return We.Util.haveIntersection(r,this.getClientRect())}static create(t,n){return We.Util._isString(t)&&(t=JSON.parse(t)),this._createNode(t,n)}static _createNode(t,n){var r=$e.prototype.getClassName.call(t),i=t.children,o,s,a;n&&(t.attrs.container=n),Jl.Konva[r]||(We.Util.warn('Can not find a node with class name "'+r+'". Fallback to "Shape".'),r="Shape");const l=Jl.Konva[r];if(o=new l(t.attrs),i)for(s=i.length,a=0;a0}removeChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(t=>{t.parent=null,t.index=0,t.destroy()}),this.children=[],this._requestDraw(),this}add(...t){if(t.length===0)return this;if(t.length>1){for(var n=0;n0?n[0]:void 0}_generalFind(t,n){var r=[];return this._descendants(i=>{const o=i._isMatch(t);return o&&r.push(i),!!(o&&n)}),r}_descendants(t){let n=!1;const r=this.getChildren();for(const i of r){if(n=t(i),n)return!0;if(i.hasChildren()&&(n=i._descendants(t),n))return!0}return!1}toObject(){var t=Jw.Node.prototype.toObject.call(this);return t.children=[],this.getChildren().forEach(n=>{t.children.push(n.toObject())}),t}isAncestorOf(t){for(var n=t.getParent();n;){if(n._id===this._id)return!0;n=n.getParent()}return!1}clone(t){var n=Jw.Node.prototype.clone.call(this,t);return this.getChildren().forEach(function(r){n.add(r.clone())}),n}getAllIntersections(t){var n=[];return this.find("Shape").forEach(r=>{r.isVisible()&&r.intersects(t)&&n.push(r)}),n}_clearSelfAndDescendantCache(t){var n;super._clearSelfAndDescendantCache(t),!this.isCached()&&((n=this.children)===null||n===void 0||n.forEach(function(r){r._clearSelfAndDescendantCache(t)}))}_setChildrenIndices(){var t;(t=this.children)===null||t===void 0||t.forEach(function(n,r){n.index=r}),this._requestDraw()}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas(),o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.scene,l=i&&i.isCache;if(!this.isVisible()&&!l)return this;if(a){o.save();var c=this.getAbsoluteTransform(n).getMatrix();o.transform(c[0],c[1],c[2],c[3],c[4],c[5]),this._drawCachedSceneCanvas(o),o.restore()}else this._drawChildren("drawScene",i,n);return this}drawHit(t,n){if(!this.shouldDrawHit(n))return this;var r=this.getLayer(),i=t||r&&r.hitCanvas,o=i&&i.getContext(),s=this._getCanvasCache(),a=s&&s.hit;if(a){o.save();var l=this.getAbsoluteTransform(n).getMatrix();o.transform(l[0],l[1],l[2],l[3],l[4],l[5]),this._drawCachedHitCanvas(o),o.restore()}else this._drawChildren("drawHit",i,n);return this}_drawChildren(t,n,r){var i,o=n&&n.getContext(),s=this.clipWidth(),a=this.clipHeight(),l=this.clipFunc(),c=s&&a||l;const u=r===this;if(c){o.save();var d=this.getAbsoluteTransform(r),f=d.getMatrix();o.transform(f[0],f[1],f[2],f[3],f[4],f[5]),o.beginPath();let _;if(l)_=l.call(this,o,this);else{var h=this.clipX(),p=this.clipY();o.rect(h,p,s,a)}o.clip.apply(o,_),f=d.copy().invert().getMatrix(),o.transform(f[0],f[1],f[2],f[3],f[4],f[5])}var m=!u&&this.globalCompositeOperation()!=="source-over"&&t==="drawScene";m&&(o.save(),o._applyGlobalCompositeOperation(this)),(i=this.children)===null||i===void 0||i.forEach(function(_){_[t](n,r)}),m&&o.restore(),c&&o.restore()}getClientRect(t={}){var n,r=t.skipTransform,i=t.relativeTo,o,s,a,l,c={x:1/0,y:1/0,width:0,height:0},u=this;(n=this.children)===null||n===void 0||n.forEach(function(m){if(m.visible()){var _=m.getClientRect({relativeTo:u,skipShadow:t.skipShadow,skipStroke:t.skipStroke});_.width===0&&_.height===0||(o===void 0?(o=_.x,s=_.y,a=_.x+_.width,l=_.y+_.height):(o=Math.min(o,_.x),s=Math.min(s,_.y),a=Math.max(a,_.x+_.width),l=Math.max(l,_.y+_.height)))}});for(var d=this.find("Shape"),f=!1,h=0;hee.indexOf("pointer")>=0?"pointer":ee.indexOf("touch")>=0?"touch":"mouse",V=ee=>{const j=z(ee);if(j==="pointer")return i.Konva.pointerEventsEnabled&&N.pointer;if(j==="touch")return N.touch;if(j==="mouse")return N.mouse};function H(ee={}){return(ee.clipFunc||ee.clipWidth||ee.clipHeight)&&t.Util.warn("Stage does not support clipping. Please use clip for Layers or Groups."),ee}const X="Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);";e.stages=[];class te extends r.Container{constructor(j){super(H(j)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),e.stages.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",()=>{H(this.attrs)}),this._checkVisibility()}_validateAdd(j){const q=j.getType()==="Layer",Z=j.getType()==="FastLayer";q||Z||t.Util.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const j=this.visible()?"":"none";this.content.style.display=j}setContainer(j){if(typeof j===u){if(j.charAt(0)==="."){var q=j.slice(1);j=document.getElementsByClassName(q)[0]}else{var Z;j.charAt(0)!=="#"?Z=j:Z=j.slice(1),j=document.getElementById(Z)}if(!j)throw"Can not find container in document with id "+Z}return this._setAttr("container",j),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),j.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){var j=this.children,q=j.length,Z;for(Z=0;Z-1&&e.stages.splice(q,1),t.Util.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){const j=this._pointerPositions[0]||this._changedPointerPositions[0];return j?{x:j.x,y:j.y}:(t.Util.warn(X),null)}_getPointerById(j){return this._pointerPositions.find(q=>q.id===j)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(j){j=j||{},j.x=j.x||0,j.y=j.y||0,j.width=j.width||this.width(),j.height=j.height||this.height();var q=new o.SceneCanvas({width:j.width,height:j.height,pixelRatio:j.pixelRatio||1}),Z=q.getContext()._context,oe=this.children;return(j.x||j.y)&&Z.translate(-1*j.x,-1*j.y),oe.forEach(function(be){if(be.isVisible()){var Me=be._toKonvaCanvas(j);Z.drawImage(Me._canvas,j.x,j.y,Me.getWidth()/Me.getPixelRatio(),Me.getHeight()/Me.getPixelRatio())}}),q}getIntersection(j){if(!j)return null;var q=this.children,Z=q.length,oe=Z-1,be;for(be=oe;be>=0;be--){const Me=q[be].getIntersection(j);if(Me)return Me}return null}_resizeDOM(){var j=this.width(),q=this.height();this.content&&(this.content.style.width=j+d,this.content.style.height=q+d),this.bufferCanvas.setSize(j,q),this.bufferHitCanvas.setSize(j,q),this.children.forEach(Z=>{Z.setSize({width:j,height:q}),Z.draw()})}add(j,...q){if(arguments.length>1){for(var Z=0;Z$&&t.Util.warn("The stage has "+oe+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),j.setSize({width:this.width(),height:this.height()}),j.draw(),i.Konva.isBrowser&&this.content.appendChild(j.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(j){return l.hasPointerCapture(j,this)}setPointerCapture(j){l.setPointerCapture(j,this)}releaseCapture(j){l.releaseCapture(j,this)}getLayers(){return this.children}_bindContentEvents(){i.Konva.isBrowser&&D.forEach(([j,q])=>{this.content.addEventListener(j,Z=>{this[q](Z)},{passive:!1})})}_pointerenter(j){this.setPointersPositions(j);const q=V(j.type);q&&this._fire(q.pointerenter,{evt:j,target:this,currentTarget:this})}_pointerover(j){this.setPointersPositions(j);const q=V(j.type);q&&this._fire(q.pointerover,{evt:j,target:this,currentTarget:this})}_getTargetShape(j){let q=this[j+"targetShape"];return q&&!q.getStage()&&(q=null),q}_pointerleave(j){const q=V(j.type),Z=z(j.type);if(q){this.setPointersPositions(j);var oe=this._getTargetShape(Z),be=!s.DD.isDragging||i.Konva.hitOnDragEnabled;oe&&be?(oe._fireAndBubble(q.pointerout,{evt:j}),oe._fireAndBubble(q.pointerleave,{evt:j}),this._fire(q.pointerleave,{evt:j,target:this,currentTarget:this}),this[Z+"targetShape"]=null):be&&(this._fire(q.pointerleave,{evt:j,target:this,currentTarget:this}),this._fire(q.pointerout,{evt:j,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}}_pointerdown(j){const q=V(j.type),Z=z(j.type);if(q){this.setPointersPositions(j);var oe=!1;this._changedPointerPositions.forEach(be=>{var Me=this.getIntersection(be);if(s.DD.justDragged=!1,i.Konva["_"+Z+"ListenClick"]=!0,!Me||!Me.isListening())return;i.Konva.capturePointerEventsEnabled&&Me.setPointerCapture(be.id),this[Z+"ClickStartShape"]=Me,Me._fireAndBubble(q.pointerdown,{evt:j,pointerId:be.id}),oe=!0;const lt=j.type.indexOf("touch")>=0;Me.preventDefault()&&j.cancelable&<&&j.preventDefault()}),oe||this._fire(q.pointerdown,{evt:j,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}}_pointermove(j){const q=V(j.type),Z=z(j.type);if(!q)return;s.DD.isDragging&&s.DD.node.preventDefault()&&j.cancelable&&j.preventDefault(),this.setPointersPositions(j);var oe=!s.DD.isDragging||i.Konva.hitOnDragEnabled;if(!oe)return;var be={};let Me=!1;var lt=this._getTargetShape(Z);this._changedPointerPositions.forEach(Le=>{const we=l.getCapturedShape(Le.id)||this.getIntersection(Le),pt=Le.id,vt={evt:j,pointerId:pt};var Ce=lt!==we;if(Ce&<&&(lt._fireAndBubble(q.pointerout,{...vt},we),lt._fireAndBubble(q.pointerleave,{...vt},we)),we){if(be[we._id])return;be[we._id]=!0}we&&we.isListening()?(Me=!0,Ce&&(we._fireAndBubble(q.pointerover,{...vt},lt),we._fireAndBubble(q.pointerenter,{...vt},lt),this[Z+"targetShape"]=we),we._fireAndBubble(q.pointermove,{...vt})):lt&&(this._fire(q.pointerover,{evt:j,target:this,currentTarget:this,pointerId:pt}),this[Z+"targetShape"]=null)}),Me||this._fire(q.pointermove,{evt:j,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(j){const q=V(j.type),Z=z(j.type);if(!q)return;this.setPointersPositions(j);const oe=this[Z+"ClickStartShape"],be=this[Z+"ClickEndShape"];var Me={};let lt=!1;this._changedPointerPositions.forEach(Le=>{const we=l.getCapturedShape(Le.id)||this.getIntersection(Le);if(we){if(we.releaseCapture(Le.id),Me[we._id])return;Me[we._id]=!0}const pt=Le.id,vt={evt:j,pointerId:pt};let Ce=!1;i.Konva["_"+Z+"InDblClickWindow"]?(Ce=!0,clearTimeout(this[Z+"DblTimeout"])):s.DD.justDragged||(i.Konva["_"+Z+"InDblClickWindow"]=!0,clearTimeout(this[Z+"DblTimeout"])),this[Z+"DblTimeout"]=setTimeout(function(){i.Konva["_"+Z+"InDblClickWindow"]=!1},i.Konva.dblClickWindow),we&&we.isListening()?(lt=!0,this[Z+"ClickEndShape"]=we,we._fireAndBubble(q.pointerup,{...vt}),i.Konva["_"+Z+"ListenClick"]&&oe&&oe===we&&(we._fireAndBubble(q.pointerclick,{...vt}),Ce&&be&&be===we&&we._fireAndBubble(q.pointerdblclick,{...vt}))):(this[Z+"ClickEndShape"]=null,i.Konva["_"+Z+"ListenClick"]&&this._fire(q.pointerclick,{evt:j,target:this,currentTarget:this,pointerId:pt}),Ce&&this._fire(q.pointerdblclick,{evt:j,target:this,currentTarget:this,pointerId:pt}))}),lt||this._fire(q.pointerup,{evt:j,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),i.Konva["_"+Z+"ListenClick"]=!1,j.cancelable&&Z!=="touch"&&j.preventDefault()}_contextmenu(j){this.setPointersPositions(j);var q=this.getIntersection(this.getPointerPosition());q&&q.isListening()?q._fireAndBubble(L,{evt:j}):this._fire(L,{evt:j,target:this,currentTarget:this})}_wheel(j){this.setPointersPositions(j);var q=this.getIntersection(this.getPointerPosition());q&&q.isListening()?q._fireAndBubble(F,{evt:j}):this._fire(F,{evt:j,target:this,currentTarget:this})}_pointercancel(j){this.setPointersPositions(j);const q=l.getCapturedShape(j.pointerId)||this.getIntersection(this.getPointerPosition());q&&q._fireAndBubble(S,l.createEvent(j)),l.releaseCapture(j.pointerId)}_lostpointercapture(j){l.releaseCapture(j.pointerId)}setPointersPositions(j){var q=this._getContentPosition(),Z=null,oe=null;j=j||window.event,j.touches!==void 0?(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(j.touches,be=>{this._pointerPositions.push({id:be.identifier,x:(be.clientX-q.left)/q.scaleX,y:(be.clientY-q.top)/q.scaleY})}),Array.prototype.forEach.call(j.changedTouches||j.touches,be=>{this._changedPointerPositions.push({id:be.identifier,x:(be.clientX-q.left)/q.scaleX,y:(be.clientY-q.top)/q.scaleY})})):(Z=(j.clientX-q.left)/q.scaleX,oe=(j.clientY-q.top)/q.scaleY,this.pointerPos={x:Z,y:oe},this._pointerPositions=[{x:Z,y:oe,id:t.Util._getFirstPointerId(j)}],this._changedPointerPositions=[{x:Z,y:oe,id:t.Util._getFirstPointerId(j)}])}_setPointerPosition(j){t.Util.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(j)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};var j=this.content.getBoundingClientRect();return{top:j.top,left:j.left,scaleX:j.width/this.content.clientWidth||1,scaleY:j.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new o.SceneCanvas({width:this.width(),height:this.height()}),this.bufferHitCanvas=new o.HitCanvas({pixelRatio:1,width:this.width(),height:this.height()}),!!i.Konva.isBrowser){var j=this.container();if(!j)throw"Stage has no container. A container is required.";j.innerHTML="",this.content=document.createElement("div"),this.content.style.position="relative",this.content.style.userSelect="none",this.content.className="konvajs-content",this.content.setAttribute("role","presentation"),j.appendChild(this.content),this._resizeDOM()}}cache(){return t.Util.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(j){j.batchDraw()}),this}}e.Stage=te,te.prototype.nodeType=c,(0,a._registerNode)(te),n.Factory.addGetterSetter(te,"container")})(ZG);var n0={},An={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Shape=e.shapes=void 0;const t=Ue,n=Qt,r=ze,i=Vt,o=xe,s=Ue,a=mi;var l="hasShadow",c="shadowRGBA",u="patternImage",d="linearGradient",f="radialGradient";let h;function p(){return h||(h=n.Util.createCanvasElement().getContext("2d"),h)}e.shapes={};function m(k){const A=this.attrs.fillRule;A?k.fill(A):k.fill()}function _(k){k.stroke()}function v(k){k.fill()}function y(k){k.stroke()}function g(){this._clearCache(l)}function b(){this._clearCache(c)}function S(){this._clearCache(u)}function w(){this._clearCache(d)}function C(){this._clearCache(f)}class x extends i.Node{constructor(A){super(A);let R;for(;R=n.Util.getRandomColor(),!(R&&!(R in e.shapes)););this.colorKey=R,e.shapes[R]=this}getContext(){return n.Util.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return n.Util.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(l,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&this.shadowOpacity()!==0&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(u,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){var A=p();const R=A.createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat");if(R&&R.setTransform){const L=new n.Transform;L.translate(this.fillPatternX(),this.fillPatternY()),L.rotate(t.Konva.getAngle(this.fillPatternRotation())),L.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),L.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const M=L.getMatrix(),E=typeof DOMMatrix>"u"?{a:M[0],b:M[1],c:M[2],d:M[3],e:M[4],f:M[5]}:new DOMMatrix(M);R.setTransform(E)}return R}}_getLinearGradient(){return this._getCache(d,this.__getLinearGradient)}__getLinearGradient(){var A=this.fillLinearGradientColorStops();if(A){for(var R=p(),L=this.fillLinearGradientStartPoint(),M=this.fillLinearGradientEndPoint(),E=R.createLinearGradient(L.x,L.y,M.x,M.y),P=0;Pthis.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate("hasStroke",["strokeEnabled","strokeWidth","stroke","strokeLinearGradientColorStops"],()=>this.strokeEnabled()&&this.strokeWidth()&&!!(this.stroke()||this.strokeLinearGradientColorStops()))}hasHitStroke(){const A=this.hitStrokeWidth();return A==="auto"?this.hasStroke():this.strokeEnabled()&&!!A}intersects(A){var R=this.getStage();if(!R)return!1;const L=R.bufferHitCanvas;return L.getContext().clear(),this.drawHit(L,void 0,!0),L.context.getImageData(Math.round(A.x),Math.round(A.y),1,1).data[3]>0}destroy(){return i.Node.prototype.destroy.call(this),delete e.shapes[this.colorKey],delete this.colorKey,this}_useBufferCanvas(A){var R;if(!this.getStage()||!((R=this.attrs.perfectDrawEnabled)!==null&&R!==void 0?R:!0))return!1;const M=A||this.hasFill(),E=this.hasStroke(),P=this.getAbsoluteOpacity()!==1;if(M&&E&&P)return!0;const O=this.hasShadow(),F=this.shadowForStrokeEnabled();return!!(M&&E&&O&&F)}setStrokeHitEnabled(A){n.Util.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),A?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return this.hitStrokeWidth()!==0}getSelfRect(){var A=this.size();return{x:this._centroid?-A.width/2:0,y:this._centroid?-A.height/2:0,width:A.width,height:A.height}}getClientRect(A={}){const R=A.skipTransform,L=A.relativeTo,M=this.getSelfRect(),P=!A.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,O=M.width+P,F=M.height+P,$=!A.skipShadow&&this.hasShadow(),D=$?this.shadowOffsetX():0,N=$?this.shadowOffsetY():0,z=O+Math.abs(D),V=F+Math.abs(N),H=$&&this.shadowBlur()||0,X=z+H*2,te=V+H*2,ee={width:X,height:te,x:-(P/2+H)+Math.min(D,0)+M.x,y:-(P/2+H)+Math.min(N,0)+M.y};return R?ee:this._transformedRect(ee,L)}drawScene(A,R){var L=this.getLayer(),M=A||L.getCanvas(),E=M.getContext(),P=this._getCanvasCache(),O=this.getSceneFunc(),F=this.hasShadow(),$,D,N,z=M.isCache,V=R===this;if(!this.isVisible()&&!V)return this;if(P){E.save();var H=this.getAbsoluteTransform(R).getMatrix();return E.transform(H[0],H[1],H[2],H[3],H[4],H[5]),this._drawCachedSceneCanvas(E),E.restore(),this}if(!O)return this;if(E.save(),this._useBufferCanvas()&&!z){$=this.getStage(),D=$.bufferCanvas,N=D.getContext(),N.clear(),N.save(),N._applyLineJoin(this);var X=this.getAbsoluteTransform(R).getMatrix();N.transform(X[0],X[1],X[2],X[3],X[4],X[5]),O.call(this,N,this),N.restore();var te=D.pixelRatio;F&&E._applyShadow(this),E._applyOpacity(this),E._applyGlobalCompositeOperation(this),E.drawImage(D._canvas,0,0,D.width/te,D.height/te)}else{if(E._applyLineJoin(this),!V){var X=this.getAbsoluteTransform(R).getMatrix();E.transform(X[0],X[1],X[2],X[3],X[4],X[5]),E._applyOpacity(this),E._applyGlobalCompositeOperation(this)}F&&E._applyShadow(this),O.call(this,E,this)}return E.restore(),this}drawHit(A,R,L=!1){if(!this.shouldDrawHit(R,L))return this;var M=this.getLayer(),E=A||M.hitCanvas,P=E&&E.getContext(),O=this.hitFunc()||this.sceneFunc(),F=this._getCanvasCache(),$=F&&F.hit;if(this.colorKey||n.Util.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),$){P.save();var D=this.getAbsoluteTransform(R).getMatrix();return P.transform(D[0],D[1],D[2],D[3],D[4],D[5]),this._drawCachedHitCanvas(P),P.restore(),this}if(!O)return this;if(P.save(),P._applyLineJoin(this),!(this===R)){var z=this.getAbsoluteTransform(R).getMatrix();P.transform(z[0],z[1],z[2],z[3],z[4],z[5])}return O.call(this,P,this),P.restore(),this}drawHitFromCache(A=0){var R=this._getCanvasCache(),L=this._getCachedSceneCanvas(),M=R.hit,E=M.getContext(),P=M.getWidth(),O=M.getHeight(),F,$,D,N,z,V;E.clear(),E.drawImage(L._canvas,0,0,P,O);try{for(F=E.getImageData(0,0,P,O),$=F.data,D=$.length,N=n.Util._hexToRgb(this.colorKey),z=0;zA?($[z]=N.r,$[z+1]=N.g,$[z+2]=N.b,$[z+3]=255):$[z+3]=0;E.putImageData(F,0,0)}catch(H){n.Util.error("Unable to draw hit graph from cached scene canvas. "+H.message)}return this}hasPointerCapture(A){return a.hasPointerCapture(A,this)}setPointerCapture(A){a.setPointerCapture(A,this)}releaseCapture(A){a.releaseCapture(A,this)}}e.Shape=x,x.prototype._fillFunc=m,x.prototype._strokeFunc=_,x.prototype._fillFuncHit=v,x.prototype._strokeFuncHit=y,x.prototype._centroid=!1,x.prototype.nodeType="Shape",(0,s._registerNode)(x),x.prototype.eventListeners={},x.prototype.on.call(x.prototype,"shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",g),x.prototype.on.call(x.prototype,"shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",b),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",S),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",w),x.prototype.on.call(x.prototype,"fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",C),r.Factory.addGetterSetter(x,"stroke",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(x,"strokeWidth",2,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillAfterStrokeEnabled",!1),r.Factory.addGetterSetter(x,"hitStrokeWidth","auto",(0,o.getNumberOrAutoValidator)()),r.Factory.addGetterSetter(x,"strokeHitEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"perfectDrawEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"shadowForStrokeEnabled",!0,(0,o.getBooleanValidator)()),r.Factory.addGetterSetter(x,"lineJoin"),r.Factory.addGetterSetter(x,"lineCap"),r.Factory.addGetterSetter(x,"sceneFunc"),r.Factory.addGetterSetter(x,"hitFunc"),r.Factory.addGetterSetter(x,"dash"),r.Factory.addGetterSetter(x,"dashOffset",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowColor",void 0,(0,o.getStringValidator)()),r.Factory.addGetterSetter(x,"shadowBlur",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowOpacity",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"shadowOffset",["x","y"]),r.Factory.addGetterSetter(x,"shadowOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"shadowOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternImage"),r.Factory.addGetterSetter(x,"fill",void 0,(0,o.getStringOrGradientValidator)()),r.Factory.addGetterSetter(x,"fillPatternX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternY",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillLinearGradientColorStops"),r.Factory.addGetterSetter(x,"strokeLinearGradientColorStops"),r.Factory.addGetterSetter(x,"fillRadialGradientStartRadius",0),r.Factory.addGetterSetter(x,"fillRadialGradientEndRadius",0),r.Factory.addGetterSetter(x,"fillRadialGradientColorStops"),r.Factory.addGetterSetter(x,"fillPatternRepeat","repeat"),r.Factory.addGetterSetter(x,"fillEnabled",!0),r.Factory.addGetterSetter(x,"strokeEnabled",!0),r.Factory.addGetterSetter(x,"shadowEnabled",!0),r.Factory.addGetterSetter(x,"dashEnabled",!0),r.Factory.addGetterSetter(x,"strokeScaleEnabled",!0),r.Factory.addGetterSetter(x,"fillPriority","color"),r.Factory.addComponentsGetterSetter(x,"fillPatternOffset",["x","y"]),r.Factory.addGetterSetter(x,"fillPatternOffsetX",0,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternOffsetY",0,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"fillPatternScale",["x","y"]),r.Factory.addGetterSetter(x,"fillPatternScaleX",1,(0,o.getNumberValidator)()),r.Factory.addGetterSetter(x,"fillPatternScaleY",1,(0,o.getNumberValidator)()),r.Factory.addComponentsGetterSetter(x,"fillLinearGradientStartPoint",["x","y"]),r.Factory.addComponentsGetterSetter(x,"strokeLinearGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillLinearGradientStartPointX",0),r.Factory.addGetterSetter(x,"strokeLinearGradientStartPointX",0),r.Factory.addGetterSetter(x,"fillLinearGradientStartPointY",0),r.Factory.addGetterSetter(x,"strokeLinearGradientStartPointY",0),r.Factory.addComponentsGetterSetter(x,"fillLinearGradientEndPoint",["x","y"]),r.Factory.addComponentsGetterSetter(x,"strokeLinearGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillLinearGradientEndPointX",0),r.Factory.addGetterSetter(x,"strokeLinearGradientEndPointX",0),r.Factory.addGetterSetter(x,"fillLinearGradientEndPointY",0),r.Factory.addGetterSetter(x,"strokeLinearGradientEndPointY",0),r.Factory.addComponentsGetterSetter(x,"fillRadialGradientStartPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillRadialGradientStartPointX",0),r.Factory.addGetterSetter(x,"fillRadialGradientStartPointY",0),r.Factory.addComponentsGetterSetter(x,"fillRadialGradientEndPoint",["x","y"]),r.Factory.addGetterSetter(x,"fillRadialGradientEndPointX",0),r.Factory.addGetterSetter(x,"fillRadialGradientEndPointY",0),r.Factory.addGetterSetter(x,"fillPatternRotation",0),r.Factory.addGetterSetter(x,"fillRule",void 0,(0,o.getStringValidator)()),r.Factory.backCompat(x,{dashArray:"dash",getDashArray:"getDash",setDashArray:"getDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"})})(An);Object.defineProperty(n0,"__esModule",{value:!0});n0.Layer=void 0;const Fs=Qt,eC=pu,zu=Vt,DA=ze,SR=Ro,qMe=xe,KMe=An,XMe=Ue;var QMe="#",YMe="beforeDraw",ZMe="draw",tH=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],JMe=tH.length;class zf extends eC.Container{constructor(t){super(t),this.canvas=new SR.SceneCanvas,this.hitCanvas=new SR.HitCanvas({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);var n=this.getStage();return n&&n.content&&(n.content.removeChild(this.getNativeCanvasElement()),t{this.draw(),this._waitingForDraw=!1})),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;for(var n=1,r=!1;;){for(let i=0;i0)return{antialiased:!0};return{}}drawScene(t,n){var r=this.getLayer(),i=t||r&&r.getCanvas();return this._fire(YMe,{node:this}),this.clearBeforeDraw()&&i.getContext().clear(),eC.Container.prototype.drawScene.call(this,i,n),this._fire(ZMe,{node:this}),this}drawHit(t,n){var r=this.getLayer(),i=t||r&&r.hitCanvas;return r&&r.clearBeforeDraw()&&r.getHitCanvas().getContext().clear(),eC.Container.prototype.drawHit.call(this,i,n),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){Fs.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return Fs.Util.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(!(!this.parent||!this.parent.content)){var t=this.parent,n=!!this.hitCanvas._canvas.parentNode;n?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}}destroy(){return Fs.Util.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}n0.Layer=zf;zf.prototype.nodeType="Layer";(0,XMe._registerNode)(zf);DA.Factory.addGetterSetter(zf,"imageSmoothingEnabled",!0);DA.Factory.addGetterSetter(zf,"clearBeforeDraw",!0);DA.Factory.addGetterSetter(zf,"hitGraphEnabled",!0,(0,qMe.getBooleanValidator)());var HS={};Object.defineProperty(HS,"__esModule",{value:!0});HS.FastLayer=void 0;const e9e=Qt,t9e=n0,n9e=Ue;class LA extends t9e.Layer{constructor(t){super(t),this.listening(!1),e9e.Util.warn('Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}HS.FastLayer=LA;LA.prototype.nodeType="FastLayer";(0,n9e._registerNode)(LA);var jf={};Object.defineProperty(jf,"__esModule",{value:!0});jf.Group=void 0;const r9e=Qt,i9e=pu,o9e=Ue;class BA extends i9e.Container{_validateAdd(t){var n=t.getType();n!=="Group"&&n!=="Shape"&&r9e.Util.throw("You may only add groups and shapes to groups.")}}jf.Group=BA;BA.prototype.nodeType="Group";(0,o9e._registerNode)(BA);var Vf={};Object.defineProperty(Vf,"__esModule",{value:!0});Vf.Animation=void 0;const tC=Ue,xR=Qt,nC=function(){return tC.glob.performance&&tC.glob.performance.now?function(){return tC.glob.performance.now()}:function(){return new Date().getTime()}}();class as{constructor(t,n){this.id=as.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:nC(),frameRate:0},this.func=t,this.setLayers(n)}setLayers(t){let n=[];return t&&(n=Array.isArray(t)?t:[t]),this.layers=n,this}getLayers(){return this.layers}addLayer(t){const n=this.layers,r=n.length;for(let i=0;ithis.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():p<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=p,this.update())}getTime(){return this._time}setPosition(p){this.prevPos=this._pos,this.propFunc(p),this._pos=p}getPosition(p){return p===void 0&&(p=this._time),this.func(p,this.begin,this._change,this.duration)}play(){this.state=a,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onPlay")}reverse(){this.state=l,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire("onReverse")}seek(p){this.pause(),this._time=p,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){var p=this.getTimer()-this._startTime;this.state===a?this.setTime(p):this.state===l&&this.setTime(this.duration-p)}pause(){this.state=s,this.fire("onPause")}getTimer(){return new Date().getTime()}}class f{constructor(p){var m=this,_=p.node,v=_._id,y,g=p.easing||e.Easings.Linear,b=!!p.yoyo,S;typeof p.duration>"u"?y=.3:p.duration===0?y=.001:y=p.duration,this.node=_,this._id=c++;var w=_.getLayer()||(_ instanceof i.Konva.Stage?_.getLayers():null);w||t.Util.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new n.Animation(function(){m.tween.onEnterFrame()},w),this.tween=new d(S,function(C){m._tweenFunc(C)},g,0,1,y*1e3,b),this._addListeners(),f.attrs[v]||(f.attrs[v]={}),f.attrs[v][this._id]||(f.attrs[v][this._id]={}),f.tweens[v]||(f.tweens[v]={});for(S in p)o[S]===void 0&&this._addAttr(S,p[S]);this.reset(),this.onFinish=p.onFinish,this.onReset=p.onReset,this.onUpdate=p.onUpdate}_addAttr(p,m){var _=this.node,v=_._id,y,g,b,S,w,C,x,k;if(b=f.tweens[v][p],b&&delete f.attrs[v][b][p],y=_.getAttr(p),t.Util._isArray(m))if(g=[],w=Math.max(m.length,y.length),p==="points"&&m.length!==y.length&&(m.length>y.length?(x=y,y=t.Util._prepareArrayForTween(y,m,_.closed())):(C=m,m=t.Util._prepareArrayForTween(m,y,_.closed()))),p.indexOf("fill")===0)for(S=0;S{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueEnd&&p.setAttr("points",m.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{var p=this.node,m=f.attrs[p._id][this._id];m.points&&m.points.trueStart&&p.points(m.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(p){return this.tween.seek(p*1e3),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var p=this.node._id,m=this._id,_=f.tweens[p],v;this.pause();for(v in _)delete f.tweens[p][v];delete f.attrs[p][m]}}e.Tween=f,f.attrs={},f.tweens={},r.Node.prototype.to=function(h){var p=h.onFinish;h.node=this,h.onFinish=function(){this.destroy(),p&&p()};var m=new f(h);m.play()},e.Easings={BackEaseIn(h,p,m,_){var v=1.70158;return m*(h/=_)*h*((v+1)*h-v)+p},BackEaseOut(h,p,m,_){var v=1.70158;return m*((h=h/_-1)*h*((v+1)*h+v)+1)+p},BackEaseInOut(h,p,m,_){var v=1.70158;return(h/=_/2)<1?m/2*(h*h*(((v*=1.525)+1)*h-v))+p:m/2*((h-=2)*h*(((v*=1.525)+1)*h+v)+2)+p},ElasticEaseIn(h,p,m,_,v,y){var g=0;return h===0?p:(h/=_)===1?p+m:(y||(y=_*.3),!v||v0?t:n),u=s*n,d=a*(a>0?t:n),f=l*(l>0?n:t);return{x:c,y:r?-1*f:d,width:u-c,height:f-d}}}WS.Arc=_a;_a.prototype._centroid=!0;_a.prototype.className="Arc";_a.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,a9e._registerNode)(_a);qS.Factory.addGetterSetter(_a,"innerRadius",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"outerRadius",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"angle",0,(0,KS.getNumberValidator)());qS.Factory.addGetterSetter(_a,"clockwise",!1,(0,KS.getBooleanValidator)());var XS={},r0={};Object.defineProperty(r0,"__esModule",{value:!0});r0.Line=void 0;const QS=ze,l9e=An,rH=xe,c9e=Ue;function X3(e,t,n,r,i,o,s){var a=Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2)),l=Math.sqrt(Math.pow(i-n,2)+Math.pow(o-r,2)),c=s*a/(a+l),u=s*l/(a+l),d=n-c*(i-e),f=r-c*(o-t),h=n+u*(i-e),p=r+u*(o-t);return[d,f,h,p]}function CR(e,t){var n=e.length,r=[],i,o;for(i=2;i4){for(a=this.getTensionPoints(),l=a.length,c=o?0:4,o||t.quadraticCurveTo(a[0],a[1],a[2],a[3]);c{let c,u,d;c=l/2,u=0;for(let h=0;h<20;h++)d=c*e.tValues[20][h]+c,u+=e.cValues[20][h]*r(s,a,d);return c*u};e.getCubicArcLength=t;const n=(s,a,l)=>{l===void 0&&(l=1);const c=s[0]-2*s[1]+s[2],u=a[0]-2*a[1]+a[2],d=2*s[1]-2*s[0],f=2*a[1]-2*a[0],h=4*(c*c+u*u),p=4*(c*d+u*f),m=d*d+f*f;if(h===0)return l*Math.sqrt(Math.pow(s[2]-s[0],2)+Math.pow(a[2]-a[0],2));const _=p/(2*h),v=m/h,y=l+_,g=v-_*_,b=y*y+g>0?Math.sqrt(y*y+g):0,S=_*_+g>0?Math.sqrt(_*_+g):0,w=_+Math.sqrt(_*_+g)!==0?g*Math.log(Math.abs((y+b)/(_+S))):0;return Math.sqrt(h)/2*(y*b-_*S+w)};e.getQuadraticArcLength=n;function r(s,a,l){const c=i(1,l,s),u=i(1,l,a),d=c*c+u*u;return Math.sqrt(d)}const i=(s,a,l)=>{const c=l.length-1;let u,d;if(c===0)return 0;if(s===0){d=0;for(let f=0;f<=c;f++)d+=e.binomialCoefficients[c][f]*Math.pow(1-a,c-f)*Math.pow(a,f)*l[f];return d}else{u=new Array(c);for(let f=0;f{let c=1,u=s/a,d=(s-l(u))/a,f=0;for(;c>.001;){const h=l(u+d),p=Math.abs(s-h)/a;if(p500)break}return u};e.t2length=o})(iH);Object.defineProperty(Uf,"__esModule",{value:!0});Uf.Path=void 0;const u9e=ze,d9e=An,f9e=Ue,ju=iH;class _n extends d9e.Shape{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=_n.parsePathData(this.data()),this.pathLength=_n.getPathLength(this.dataArray)}_sceneFunc(t){var n=this.dataArray;t.beginPath();for(var r=!1,i=0;iu?c:u,_=c>u?1:c/u,v=c>u?u/c:1;t.translate(a,l),t.rotate(h),t.scale(_,v),t.arc(0,0,m,d,d+f,1-p),t.scale(1/_,1/v),t.rotate(-h),t.translate(-a,-l);break;case"z":r=!0,t.closePath();break}}!r&&!this.hasFill()?t.strokeShape(this):t.fillStrokeShape(this)}getSelfRect(){var t=[];this.dataArray.forEach(function(c){if(c.command==="A"){var u=c.points[4],d=c.points[5],f=c.points[4]+d,h=Math.PI/180;if(Math.abs(u-f)f;p-=h){const m=_n.getPointOnEllipticalArc(c.points[0],c.points[1],c.points[2],c.points[3],p,0);t.push(m.x,m.y)}else for(let p=u+h;pn[i].pathLength;)t-=n[i].pathLength,++i;if(i===o)return r=n[i-1].points.slice(-2),{x:r[0],y:r[1]};if(t<.01)return r=n[i].points.slice(0,2),{x:r[0],y:r[1]};var s=n[i],a=s.points;switch(s.command){case"L":return _n.getPointOnLine(t,s.start.x,s.start.y,a[0],a[1]);case"C":return _n.getPointOnCubicBezier((0,ju.t2length)(t,_n.getPathLength(n),m=>(0,ju.getCubicArcLength)([s.start.x,a[0],a[2],a[4]],[s.start.y,a[1],a[3],a[5]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3],a[4],a[5]);case"Q":return _n.getPointOnQuadraticBezier((0,ju.t2length)(t,_n.getPathLength(n),m=>(0,ju.getQuadraticArcLength)([s.start.x,a[0],a[2]],[s.start.y,a[1],a[3]],m)),s.start.x,s.start.y,a[0],a[1],a[2],a[3]);case"A":var l=a[0],c=a[1],u=a[2],d=a[3],f=a[4],h=a[5],p=a[6];return f+=h*t/s.pathLength,_n.getPointOnEllipticalArc(l,c,u,d,f,p)}return null}static getPointOnLine(t,n,r,i,o,s,a){s===void 0&&(s=n),a===void 0&&(a=r);var l=(o-r)/(i-n+1e-8),c=Math.sqrt(t*t/(1+l*l));i0&&!isNaN(p[0]);){var y="",g=[],b=l,S=c,w,C,x,k,A,R,L,M,E,P;switch(h){case"l":l+=p.shift(),c+=p.shift(),y="L",g.push(l,c);break;case"L":l=p.shift(),c=p.shift(),g.push(l,c);break;case"m":var O=p.shift(),F=p.shift();if(l+=O,c+=F,y="M",s.length>2&&s[s.length-1].command==="z"){for(var $=s.length-2;$>=0;$--)if(s[$].command==="M"){l=s[$].points[0]+O,c=s[$].points[1]+F;break}}g.push(l,c),h="l";break;case"M":l=p.shift(),c=p.shift(),y="M",g.push(l,c),h="L";break;case"h":l+=p.shift(),y="L",g.push(l,c);break;case"H":l=p.shift(),y="L",g.push(l,c);break;case"v":c+=p.shift(),y="L",g.push(l,c);break;case"V":c=p.shift(),y="L",g.push(l,c);break;case"C":g.push(p.shift(),p.shift(),p.shift(),p.shift()),l=p.shift(),c=p.shift(),g.push(l,c);break;case"c":g.push(l+p.shift(),c+p.shift(),l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="C",g.push(l,c);break;case"S":C=l,x=c,w=s[s.length-1],w.command==="C"&&(C=l+(l-w.points[2]),x=c+(c-w.points[3])),g.push(C,x,p.shift(),p.shift()),l=p.shift(),c=p.shift(),y="C",g.push(l,c);break;case"s":C=l,x=c,w=s[s.length-1],w.command==="C"&&(C=l+(l-w.points[2]),x=c+(c-w.points[3])),g.push(C,x,l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="C",g.push(l,c);break;case"Q":g.push(p.shift(),p.shift()),l=p.shift(),c=p.shift(),g.push(l,c);break;case"q":g.push(l+p.shift(),c+p.shift()),l+=p.shift(),c+=p.shift(),y="Q",g.push(l,c);break;case"T":C=l,x=c,w=s[s.length-1],w.command==="Q"&&(C=l+(l-w.points[0]),x=c+(c-w.points[1])),l=p.shift(),c=p.shift(),y="Q",g.push(C,x,l,c);break;case"t":C=l,x=c,w=s[s.length-1],w.command==="Q"&&(C=l+(l-w.points[0]),x=c+(c-w.points[1])),l+=p.shift(),c+=p.shift(),y="Q",g.push(C,x,l,c);break;case"A":k=p.shift(),A=p.shift(),R=p.shift(),L=p.shift(),M=p.shift(),E=l,P=c,l=p.shift(),c=p.shift(),y="A",g=this.convertEndpointToCenterParameterization(E,P,l,c,L,M,k,A,R);break;case"a":k=p.shift(),A=p.shift(),R=p.shift(),L=p.shift(),M=p.shift(),E=l,P=c,l+=p.shift(),c+=p.shift(),y="A",g=this.convertEndpointToCenterParameterization(E,P,l,c,L,M,k,A,R);break}s.push({command:y||h,points:g,start:{x:b,y:S},pathLength:this.calcLength(b,S,y||h,g)})}(h==="z"||h==="Z")&&s.push({command:"z",points:[],start:void 0,pathLength:0})}return s}static calcLength(t,n,r,i){var o,s,a,l,c=_n;switch(r){case"L":return c.getLineLength(t,n,i[0],i[1]);case"C":return(0,ju.getCubicArcLength)([t,i[0],i[2],i[4]],[n,i[1],i[3],i[5]],1);case"Q":return(0,ju.getQuadraticArcLength)([t,i[0],i[2]],[n,i[1],i[3]],1);case"A":o=0;var u=i[4],d=i[5],f=i[4]+d,h=Math.PI/180;if(Math.abs(u-f)f;l-=h)a=c.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],l,0),o+=c.getLineLength(s.x,s.y,a.x,a.y),s=a;else for(l=u+h;l1&&(a*=Math.sqrt(h),l*=Math.sqrt(h));var p=Math.sqrt((a*a*(l*l)-a*a*(f*f)-l*l*(d*d))/(a*a*(f*f)+l*l*(d*d)));o===s&&(p*=-1),isNaN(p)&&(p=0);var m=p*a*f/l,_=p*-l*d/a,v=(t+r)/2+Math.cos(u)*m-Math.sin(u)*_,y=(n+i)/2+Math.sin(u)*m+Math.cos(u)*_,g=function(A){return Math.sqrt(A[0]*A[0]+A[1]*A[1])},b=function(A,R){return(A[0]*R[0]+A[1]*R[1])/(g(A)*g(R))},S=function(A,R){return(A[0]*R[1]=1&&(k=0),s===0&&k>0&&(k=k-2*Math.PI),s===1&&k<0&&(k=k+2*Math.PI),[v,y,a,l,w,k,u,s]}}Uf.Path=_n;_n.prototype.className="Path";_n.prototype._attrsAffectingSize=["data"];(0,f9e._registerNode)(_n);u9e.Factory.addGetterSetter(_n,"data");Object.defineProperty(XS,"__esModule",{value:!0});XS.Arrow=void 0;const YS=ze,h9e=r0,oH=xe,p9e=Ue,ER=Uf;class mu extends h9e.Line{_sceneFunc(t){super._sceneFunc(t);var n=Math.PI*2,r=this.points(),i=r,o=this.tension()!==0&&r.length>4;o&&(i=this.getTensionPoints());var s=this.pointerLength(),a=r.length,l,c;if(o){const f=[i[i.length-4],i[i.length-3],i[i.length-2],i[i.length-1],r[a-2],r[a-1]],h=ER.Path.calcLength(i[i.length-4],i[i.length-3],"C",f),p=ER.Path.getPointOnQuadraticBezier(Math.min(1,1-s/h),f[0],f[1],f[2],f[3],f[4],f[5]);l=r[a-2]-p.x,c=r[a-1]-p.y}else l=r[a-2]-r[a-4],c=r[a-1]-r[a-3];var u=(Math.atan2(c,l)+n)%n,d=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(r[a-2],r[a-1]),t.rotate(u),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(r[0],r[1]),o?(l=(i[0]+i[2])/2-r[0],c=(i[1]+i[3])/2-r[1]):(l=r[2]-r[0],c=r[3]-r[1]),t.rotate((Math.atan2(-c,-l)+n)%n),t.moveTo(0,0),t.lineTo(-s,d/2),t.lineTo(-s,-d/2),t.closePath(),t.restore(),this.__fillStroke(t))}__fillStroke(t){var n=this.dashEnabled();n&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),n&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),n=this.pointerWidth()/2;return{x:t.x-n,y:t.y-n,width:t.width+n*2,height:t.height+n*2}}}XS.Arrow=mu;mu.prototype.className="Arrow";(0,p9e._registerNode)(mu);YS.Factory.addGetterSetter(mu,"pointerLength",10,(0,oH.getNumberValidator)());YS.Factory.addGetterSetter(mu,"pointerWidth",10,(0,oH.getNumberValidator)());YS.Factory.addGetterSetter(mu,"pointerAtBeginning",!1);YS.Factory.addGetterSetter(mu,"pointerAtEnding",!0);var ZS={};Object.defineProperty(ZS,"__esModule",{value:!0});ZS.Circle=void 0;const g9e=ze,m9e=An,y9e=xe,v9e=Ue;class Gf extends m9e.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.attrs.radius||0,0,Math.PI*2,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius()!==t/2&&this.radius(t/2)}setHeight(t){this.radius()!==t/2&&this.radius(t/2)}}ZS.Circle=Gf;Gf.prototype._centroid=!0;Gf.prototype.className="Circle";Gf.prototype._attrsAffectingSize=["radius"];(0,v9e._registerNode)(Gf);g9e.Factory.addGetterSetter(Gf,"radius",0,(0,y9e.getNumberValidator)());var JS={};Object.defineProperty(JS,"__esModule",{value:!0});JS.Ellipse=void 0;const zA=ze,b9e=An,sH=xe,_9e=Ue;class zl extends b9e.Shape{_sceneFunc(t){var n=this.radiusX(),r=this.radiusY();t.beginPath(),t.save(),n!==r&&t.scale(1,r/n),t.arc(0,0,n,0,Math.PI*2,!1),t.restore(),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radiusX()*2}getHeight(){return this.radiusY()*2}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}JS.Ellipse=zl;zl.prototype.className="Ellipse";zl.prototype._centroid=!0;zl.prototype._attrsAffectingSize=["radiusX","radiusY"];(0,_9e._registerNode)(zl);zA.Factory.addComponentsGetterSetter(zl,"radius",["x","y"]);zA.Factory.addGetterSetter(zl,"radiusX",0,(0,sH.getNumberValidator)());zA.Factory.addGetterSetter(zl,"radiusY",0,(0,sH.getNumberValidator)());var e2={};Object.defineProperty(e2,"__esModule",{value:!0});e2.Image=void 0;const rC=Qt,yu=ze,S9e=An,x9e=Ue,i0=xe;let Ps=class aH extends S9e.Shape{constructor(t){super(t),this.on("imageChange.konva",()=>{this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){const t=this.image();t&&t.complete||t&&t.readyState===4||t&&t.addEventListener&&t.addEventListener("load",()=>{this._requestDraw()})}_useBufferCanvas(){return super._useBufferCanvas(!0)}_sceneFunc(t){const n=this.getWidth(),r=this.getHeight(),i=this.cornerRadius(),o=this.attrs.image;let s;if(o){const a=this.attrs.cropWidth,l=this.attrs.cropHeight;a&&l?s=[o,this.cropX(),this.cropY(),a,l,0,0,n,r]:s=[o,0,0,n,r]}(this.hasFill()||this.hasStroke()||i)&&(t.beginPath(),i?rC.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)),o&&(i&&t.clip(),t.drawImage.apply(t,s))}_hitFunc(t){var n=this.width(),r=this.height(),i=this.cornerRadius();t.beginPath(),i?rC.Util.drawRoundedRectPath(t,n,r,i):t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,n;return(t=this.attrs.width)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.width}getHeight(){var t,n;return(t=this.attrs.height)!==null&&t!==void 0?t:(n=this.image())===null||n===void 0?void 0:n.height}static fromURL(t,n,r=null){var i=rC.Util.createImageElement();i.onload=function(){var o=new aH({image:i});n(o)},i.onerror=r,i.crossOrigin="Anonymous",i.src=t}};e2.Image=Ps;Ps.prototype.className="Image";(0,x9e._registerNode)(Ps);yu.Factory.addGetterSetter(Ps,"cornerRadius",0,(0,i0.getNumberOrArrayOfNumbersValidator)(4));yu.Factory.addGetterSetter(Ps,"image");yu.Factory.addComponentsGetterSetter(Ps,"crop",["x","y","width","height"]);yu.Factory.addGetterSetter(Ps,"cropX",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropY",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropWidth",0,(0,i0.getNumberValidator)());yu.Factory.addGetterSetter(Ps,"cropHeight",0,(0,i0.getNumberValidator)());var xf={};Object.defineProperty(xf,"__esModule",{value:!0});xf.Tag=xf.Label=void 0;const t2=ze,w9e=An,C9e=jf,jA=xe,lH=Ue;var cH=["fontFamily","fontSize","fontStyle","padding","lineHeight","text","width","height","pointerDirection","pointerWidth","pointerHeight"],E9e="Change.konva",T9e="none",Q3="up",Y3="right",Z3="down",J3="left",A9e=cH.length;class VA extends C9e.Group{constructor(t){super(t),this.on("add.konva",function(n){this._addListeners(n.child),this._sync()})}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}_addListeners(t){var n=this,r,i=function(){n._sync()};for(r=0;r{n=Math.min(n,s.x),r=Math.max(r,s.x),i=Math.min(i,s.y),o=Math.max(o,s.y)}),{x:n,y:i,width:r-n,height:o-i}}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}r2.RegularPolygon=bu;bu.prototype.className="RegularPolygon";bu.prototype._centroid=!0;bu.prototype._attrsAffectingSize=["radius"];(0,$9e._registerNode)(bu);uH.Factory.addGetterSetter(bu,"radius",0,(0,dH.getNumberValidator)());uH.Factory.addGetterSetter(bu,"sides",0,(0,dH.getNumberValidator)());var i2={};Object.defineProperty(i2,"__esModule",{value:!0});i2.Ring=void 0;const fH=ze,N9e=An,hH=xe,F9e=Ue;var TR=Math.PI*2;class _u extends N9e.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.innerRadius(),0,TR,!1),t.moveTo(this.outerRadius(),0),t.arc(0,0,this.outerRadius(),TR,0,!0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}i2.Ring=_u;_u.prototype.className="Ring";_u.prototype._centroid=!0;_u.prototype._attrsAffectingSize=["innerRadius","outerRadius"];(0,F9e._registerNode)(_u);fH.Factory.addGetterSetter(_u,"innerRadius",0,(0,hH.getNumberValidator)());fH.Factory.addGetterSetter(_u,"outerRadius",0,(0,hH.getNumberValidator)());var o2={};Object.defineProperty(o2,"__esModule",{value:!0});o2.Sprite=void 0;const Su=ze,D9e=An,L9e=Vf,pH=xe,B9e=Ue;class Is extends D9e.Shape{constructor(t){super(t),this._updated=!0,this.anim=new L9e.Animation(()=>{var n=this._updated;return this._updated=!1,n}),this.on("animationChange.konva",function(){this.frameIndex(0)}),this.on("frameIndexChange.konva",function(){this._updated=!0}),this.on("frameRateChange.konva",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+0],l=o[i+1],c=o[i+2],u=o[i+3],d=this.image();if((this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(0,0,c,u),t.closePath(),t.fillStrokeShape(this)),d)if(s){var f=s[n],h=r*2;t.drawImage(d,a,l,c,u,f[h+0],f[h+1],c,u)}else t.drawImage(d,a,l,c,u,0,0,c,u)}_hitFunc(t){var n=this.animation(),r=this.frameIndex(),i=r*4,o=this.animations()[n],s=this.frameOffsets(),a=o[i+2],l=o[i+3];if(t.beginPath(),s){var c=s[n],u=r*2;t.rect(c[u+0],c[u+1],a,l)}else t.rect(0,0,a,l);t.closePath(),t.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){var t=this;this.interval=setInterval(function(){t._updateIndex()},1e3/this.frameRate())}start(){if(!this.isRunning()){var t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){var t=this.frameIndex(),n=this.animation(),r=this.animations(),i=r[n],o=i.length/4;t{t=t.trim();const n=t.indexOf(" ")>=0,r=t.indexOf('"')>=0||t.indexOf("'")>=0;return n&&!r&&(t=`"${t}"`),t}).join(", ")}var Ay;function oC(){return Ay||(Ay=eE.Util.createCanvasElement().getContext(W9e),Ay)}function rRe(e){e.fillText(this._partialText,this._partialTextX,this._partialTextY)}function iRe(e){e.setAttr("miterLimit",2),e.strokeText(this._partialText,this._partialTextX,this._partialTextY)}function oRe(e){return e=e||{},!e.fillLinearGradientColorStops&&!e.fillRadialGradientColorStops&&!e.fillPatternImage&&(e.fill=e.fill||"black"),e}class on extends V9e.Shape{constructor(t){super(oRe(t)),this._partialTextX=0,this._partialTextY=0;for(var n=0;n1&&(y+=s)}}}_hitFunc(t){var n=this.getWidth(),r=this.getHeight();t.beginPath(),t.rect(0,0,n,r),t.closePath(),t.fillStrokeShape(this)}setText(t){var n=eE.Util._isString(t)?t:t==null?"":t+"";return this._setAttr(q9e,n),this}getWidth(){var t=this.attrs.width===Vu||this.attrs.width===void 0;return t?this.getTextWidth()+this.padding()*2:this.attrs.width}getHeight(){var t=this.attrs.height===Vu||this.attrs.height===void 0;return t?this.fontSize()*this.textArr.length*this.lineHeight()+this.padding()*2:this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return eE.Util.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var n=oC(),r=this.fontSize(),i;return n.save(),n.font=this._getContextFont(),i=n.measureText(t),n.restore(),{width:i.width,height:r}}_getContextFont(){return this.fontStyle()+Ty+this.fontVariant()+Ty+(this.fontSize()+Y9e)+nRe(this.fontFamily())}_addTextLine(t){this.align()===Ah&&(t=t.trim());var r=this._getTextWidth(t);return this.textArr.push({text:t,width:r,lastInParagraph:!1})}_getTextWidth(t){var n=this.letterSpacing(),r=t.length;return oC().measureText(t).width+(r?n*(r-1):0)}_setTextData(){var t=this.text().split(` +`),n=+this.fontSize(),r=0,i=this.lineHeight()*n,o=this.attrs.width,s=this.attrs.height,a=o!==Vu&&o!==void 0,l=s!==Vu&&s!==void 0,c=this.padding(),u=o-c*2,d=s-c*2,f=0,h=this.wrap(),p=h!==IR,m=h!==eRe&&p,_=this.ellipsis();this.textArr=[],oC().font=this._getContextFont();for(var v=_?this._getTextWidth(iC):0,y=0,g=t.length;yu)for(;b.length>0;){for(var w=0,C=b.length,x="",k=0;w>>1,R=b.slice(0,A+1),L=this._getTextWidth(R)+v;L<=u?(w=A+1,x=R,k=L):C=A}if(x){if(m){var M,E=b[x.length],P=E===Ty||E===AR;P&&k<=u?M=x.length:M=Math.max(x.lastIndexOf(Ty),x.lastIndexOf(AR))+1,M>0&&(w=M,x=x.slice(0,w),k=this._getTextWidth(x))}x=x.trimRight(),this._addTextLine(x),r=Math.max(r,k),f+=i;var O=this._shouldHandleEllipsis(f);if(O){this._tryToAddEllipsisToLastLine();break}if(b=b.slice(w),b=b.trimLeft(),b.length>0&&(S=this._getTextWidth(b),S<=u)){this._addTextLine(b),f+=i,r=Math.max(r,S);break}}else break}else this._addTextLine(b),f+=i,r=Math.max(r,S),this._shouldHandleEllipsis(f)&&yd)break}this.textHeight=n,this.textWidth=r}_shouldHandleEllipsis(t){var n=+this.fontSize(),r=this.lineHeight()*n,i=this.attrs.height,o=i!==Vu&&i!==void 0,s=this.padding(),a=i-s*2,l=this.wrap(),c=l!==IR;return!c||o&&t+r>a}_tryToAddEllipsisToLastLine(){var t=this.attrs.width,n=t!==Vu&&t!==void 0,r=this.padding(),i=t-r*2,o=this.ellipsis(),s=this.textArr[this.textArr.length-1];if(!(!s||!o)){if(n){var a=this._getTextWidth(s.text+iC)n?null:kh.Path.getPointAtLengthOfDataArray(t,this.dataArray)}_readDataAttribute(){this.dataArray=kh.Path.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();var n=this.textDecoration(),r=this.fill(),i=this.fontSize(),o=this.glyphInfo;n==="underline"&&t.beginPath();for(var s=0;s=1){var r=n[0].p0;t.moveTo(r.x,r.y)}for(var i=0;ie+`.${CH}`).join(" "),OR="nodesRect",hRe=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange"],pRe={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135};const gRe="ontouchstart"in mo.Konva._global;function mRe(e,t,n){if(e==="rotater")return n;t+=bt.Util.degToRad(pRe[e]||0);var r=(bt.Util.radToDeg(t)%360+360)%360;return bt.Util._inRange(r,315+22.5,360)||bt.Util._inRange(r,0,22.5)?"ns-resize":bt.Util._inRange(r,45-22.5,45+22.5)?"nesw-resize":bt.Util._inRange(r,90-22.5,90+22.5)?"ew-resize":bt.Util._inRange(r,135-22.5,135+22.5)?"nwse-resize":bt.Util._inRange(r,180-22.5,180+22.5)?"ns-resize":bt.Util._inRange(r,225-22.5,225+22.5)?"nesw-resize":bt.Util._inRange(r,270-22.5,270+22.5)?"ew-resize":bt.Util._inRange(r,315-22.5,315+22.5)?"nwse-resize":(bt.Util.error("Transformer has unknown angle for cursor detection: "+r),"pointer")}var ob=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"],$R=1e8;function yRe(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}function EH(e,t,n){const r=n.x+(e.x-n.x)*Math.cos(t)-(e.y-n.y)*Math.sin(t),i=n.y+(e.x-n.x)*Math.sin(t)+(e.y-n.y)*Math.cos(t);return{...e,rotation:e.rotation+t,x:r,y:i}}function vRe(e,t){const n=yRe(e);return EH(e,t,n)}function bRe(e,t,n){let r=t;for(let i=0;ii.isAncestorOf(this)?(bt.Util.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),!1):!0);this._nodes=t=n,t.length===1&&this.useSingleNodeRotation()?this.rotation(t[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(i=>{const o=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()},s=i._attrsAffectingSize.map(a=>a+"Change."+this._getEventNamespace()).join(" ");i.on(s,o),i.on(hRe.map(a=>a+`.${this._getEventNamespace()}`).join(" "),o),i.on(`absoluteTransformChange.${this._getEventNamespace()}`,o),this._proxyDrag(i)}),this._resetTransformCache();var r=!!this.findOne(".top-left");return r&&this.update(),this}_proxyDrag(t){let n;t.on(`dragstart.${this._getEventNamespace()}`,r=>{n=t.getAbsolutePosition(),!this.isDragging()&&t!==this.findOne(".back")&&this.startDrag(r,!1)}),t.on(`dragmove.${this._getEventNamespace()}`,r=>{if(!n)return;const i=t.getAbsolutePosition(),o=i.x-n.x,s=i.y-n.y;this.nodes().forEach(a=>{if(a===t||a.isDragging())return;const l=a.getAbsolutePosition();a.setAbsolutePosition({x:l.x+o,y:l.y+s}),a.startDrag(r)}),n=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(t=>{t.off("."+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(OR),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_getNodeRect(){return this._getCache(OR,this.__getNodeRect)}__getNodeShape(t,n=this.rotation(),r){var i=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),o=t.getAbsoluteScale(r),s=t.getAbsolutePosition(r),a=i.x*o.x-t.offsetX()*o.x,l=i.y*o.y-t.offsetY()*o.y;const c=(mo.Konva.getAngle(t.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2),u={x:s.x+a*Math.cos(c)+l*Math.sin(-c),y:s.y+l*Math.cos(c)+a*Math.sin(c),width:i.width*o.x,height:i.height*o.y,rotation:c};return EH(u,-mo.Konva.getAngle(n),{x:0,y:0})}__getNodeRect(){var t=this.getNode();if(!t)return{x:-$R,y:-$R,width:0,height:0,rotation:0};const n=[];this.nodes().map(c=>{const u=c.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()});var d=[{x:u.x,y:u.y},{x:u.x+u.width,y:u.y},{x:u.x+u.width,y:u.y+u.height},{x:u.x,y:u.y+u.height}],f=c.getAbsoluteTransform();d.forEach(function(h){var p=f.point(h);n.push(p)})});const r=new bt.Transform;r.rotate(-mo.Konva.getAngle(this.rotation()));var i=1/0,o=1/0,s=-1/0,a=-1/0;n.forEach(function(c){var u=r.point(c);i===void 0&&(i=s=u.x,o=a=u.y),i=Math.min(i,u.x),o=Math.min(o,u.y),s=Math.max(s,u.x),a=Math.max(a,u.y)}),r.invert();const l=r.point({x:i,y:o});return{x:l.x,y:l.y,width:s-i,height:a-o,rotation:mo.Konva.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),ob.forEach(t=>{this._createAnchor(t)}),this._createAnchor("rotater")}_createAnchor(t){var n=new uRe.Rect({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" _anchor",dragDistance:0,draggable:!0,hitStrokeWidth:gRe?10:"auto"}),r=this;n.on("mousedown touchstart",function(i){r._handleMouseDown(i)}),n.on("dragstart",i=>{n.stopDrag(),i.cancelBubble=!0}),n.on("dragend",i=>{i.cancelBubble=!0}),n.on("mouseenter",()=>{var i=mo.Konva.getAngle(this.rotation()),o=this.rotateAnchorCursor(),s=mRe(t,i,o);n.getStage().content&&(n.getStage().content.style.cursor=s),this._cursorChange=!0}),n.on("mouseout",()=>{n.getStage().content&&(n.getStage().content.style.cursor=""),this._cursorChange=!1}),this.add(n)}_createBack(){var t=new cRe.Shape({name:"back",width:0,height:0,draggable:!0,sceneFunc(n,r){var i=r.getParent(),o=i.padding();n.beginPath(),n.rect(-o,-o,r.width()+o*2,r.height()+o*2),n.moveTo(r.width()/2,-o),i.rotateEnabled()&&n.lineTo(r.width()/2,-i.rotateAnchorOffset()*bt.Util._sign(r.height())-o),n.fillStrokeShape(r)},hitFunc:(n,r)=>{if(this.shouldOverdrawWholeArea()){var i=this.padding();n.beginPath(),n.rect(-i,-i,r.width()+i*2,r.height()+i*2),n.fillStrokeShape(r)}}});this.add(t),this._proxyDrag(t),t.on("dragstart",n=>{n.cancelBubble=!0}),t.on("dragmove",n=>{n.cancelBubble=!0}),t.on("dragend",n=>{n.cancelBubble=!0}),this.on("dragmove",n=>{this.update()})}_handleMouseDown(t){this._movingAnchorName=t.target.name().split(" ")[0];var n=this._getNodeRect(),r=n.width,i=n.height,o=Math.sqrt(Math.pow(r,2)+Math.pow(i,2));this.sin=Math.abs(i/o),this.cos=Math.abs(r/o),typeof window<"u"&&(window.addEventListener("mousemove",this._handleMouseMove),window.addEventListener("touchmove",this._handleMouseMove),window.addEventListener("mouseup",this._handleMouseUp,!0),window.addEventListener("touchend",this._handleMouseUp,!0)),this._transforming=!0;var s=t.target.getAbsolutePosition(),a=t.target.getStage().getPointerPosition();this._anchorDragOffset={x:a.x-s.x,y:a.y-s.y},this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach(l=>{l._fire("transformstart",{evt:t.evt,target:l})})}_handleMouseMove(t){var n,r,i,o=this.findOne("."+this._movingAnchorName),s=o.getStage();s.setPointersPositions(t);const a=s.getPointerPosition();let l={x:a.x-this._anchorDragOffset.x,y:a.y-this._anchorDragOffset.y};const c=o.getAbsolutePosition();this.anchorDragBoundFunc()&&(l=this.anchorDragBoundFunc()(c,l,t)),o.setAbsolutePosition(l);const u=o.getAbsolutePosition();if(!(c.x===u.x&&c.y===u.y)){if(this._movingAnchorName==="rotater"){var d=this._getNodeRect();n=o.x()-d.width/2,r=-o.y()+d.height/2;let M=Math.atan2(-r,n)+Math.PI/2;d.height<0&&(M-=Math.PI);var f=mo.Konva.getAngle(this.rotation());const E=f+M,P=mo.Konva.getAngle(this.rotationSnapTolerance()),F=bRe(this.rotationSnaps(),E,P)-d.rotation,$=vRe(d,F);this._fitNodesInto($,t);return}var h=this.shiftBehavior(),p;h==="inverted"?p=this.keepRatio()&&!t.shiftKey:h==="none"?p=this.keepRatio():p=this.keepRatio()||t.shiftKey;var g=this.centeredScaling()||t.altKey;if(this._movingAnchorName==="top-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-right").x(),y:this.findOne(".bottom-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(m.y-o.y(),2));var _=this.findOne(".top-left").x()>m.x?-1:1,v=this.findOne(".top-left").y()>m.y?-1:1;n=i*this.cos*_,r=i*this.sin*v,this.findOne(".top-left").x(m.x-n),this.findOne(".top-left").y(m.y-r)}}else if(this._movingAnchorName==="top-center")this.findOne(".top-left").y(o.y());else if(this._movingAnchorName==="top-right"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".bottom-left").x(),y:this.findOne(".bottom-left").y()};i=Math.sqrt(Math.pow(o.x()-m.x,2)+Math.pow(m.y-o.y(),2));var _=this.findOne(".top-right").x()m.y?-1:1;n=i*this.cos*_,r=i*this.sin*v,this.findOne(".top-right").x(m.x+n),this.findOne(".top-right").y(m.y-r)}var y=o.position();this.findOne(".top-left").y(y.y),this.findOne(".bottom-right").x(y.x)}else if(this._movingAnchorName==="middle-left")this.findOne(".top-left").x(o.x());else if(this._movingAnchorName==="middle-right")this.findOne(".bottom-right").x(o.x());else if(this._movingAnchorName==="bottom-left"){if(p){var m=g?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(".top-right").x(),y:this.findOne(".top-right").y()};i=Math.sqrt(Math.pow(m.x-o.x(),2)+Math.pow(o.y()-m.y,2));var _=m.x{r._fire("transformend",{evt:t,target:r})}),this._movingAnchorName=null}}_fitNodesInto(t,n){var r=this._getNodeRect();const i=1;if(bt.Util._inRange(t.width,-this.padding()*2-i,i)){this.update();return}if(bt.Util._inRange(t.height,-this.padding()*2-i,i)){this.update();return}var o=new bt.Transform;if(o.rotate(mo.Konva.getAngle(this.rotation())),this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const f=o.point({x:-this.padding()*2,y:0});t.x+=f.x,t.y+=f.y,t.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace("left","right"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const f=o.point({x:this.padding()*2,y:0});this._movingAnchorName=this._movingAnchorName.replace("right","left"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.width+=this.padding()*2}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const f=o.point({x:0,y:-this.padding()*2});t.x+=f.x,t.y+=f.y,this._movingAnchorName=this._movingAnchorName.replace("top","bottom"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const f=o.point({x:0,y:this.padding()*2});this._movingAnchorName=this._movingAnchorName.replace("bottom","top"),this._anchorDragOffset.x-=f.x,this._anchorDragOffset.y-=f.y,t.height+=this.padding()*2}if(this.boundBoxFunc()){const f=this.boundBoxFunc()(r,t);f?t=f:bt.Util.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}const s=1e7,a=new bt.Transform;a.translate(r.x,r.y),a.rotate(r.rotation),a.scale(r.width/s,r.height/s);const l=new bt.Transform,c=t.width/s,u=t.height/s;this.flipEnabled()===!1?(l.translate(t.x,t.y),l.rotate(t.rotation),l.translate(t.width<0?t.width:0,t.height<0?t.height:0),l.scale(Math.abs(c),Math.abs(u))):(l.translate(t.x,t.y),l.rotate(t.rotation),l.scale(c,u));const d=l.multiply(a.invert());this._nodes.forEach(f=>{var h;const p=f.getParent().getAbsoluteTransform(),m=f.getTransform().copy();m.translate(f.offsetX(),f.offsetY());const _=new bt.Transform;_.multiply(p.copy().invert()).multiply(d).multiply(p).multiply(m);const v=_.decompose();f.setAttrs(v),this._fire("transform",{evt:n,target:f}),f._fire("transform",{evt:n,target:f}),(h=f.getLayer())===null||h===void 0||h.batchDraw()}),this.rotation(bt.Util._getRotation(t.rotation)),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(t,n){this.findOne(t).setAttrs(n)}update(){var t,n=this._getNodeRect();this.rotation(bt.Util._getRotation(n.rotation));var r=n.width,i=n.height,o=this.enabledAnchors(),s=this.resizeEnabled(),a=this.padding(),l=this.anchorSize();const c=this.find("._anchor");c.forEach(d=>{d.setAttrs({width:l,height:l,offsetX:l/2,offsetY:l/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(".top-left",{x:0,y:0,offsetX:l/2+a,offsetY:l/2+a,visible:s&&o.indexOf("top-left")>=0}),this._batchChangeChild(".top-center",{x:r/2,y:0,offsetY:l/2+a,visible:s&&o.indexOf("top-center")>=0}),this._batchChangeChild(".top-right",{x:r,y:0,offsetX:l/2-a,offsetY:l/2+a,visible:s&&o.indexOf("top-right")>=0}),this._batchChangeChild(".middle-left",{x:0,y:i/2,offsetX:l/2+a,visible:s&&o.indexOf("middle-left")>=0}),this._batchChangeChild(".middle-right",{x:r,y:i/2,offsetX:l/2-a,visible:s&&o.indexOf("middle-right")>=0}),this._batchChangeChild(".bottom-left",{x:0,y:i,offsetX:l/2+a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-left")>=0}),this._batchChangeChild(".bottom-center",{x:r/2,y:i,offsetY:l/2-a,visible:s&&o.indexOf("bottom-center")>=0}),this._batchChangeChild(".bottom-right",{x:r,y:i,offsetX:l/2-a,offsetY:l/2-a,visible:s&&o.indexOf("bottom-right")>=0}),this._batchChangeChild(".rotater",{x:r/2,y:-this.rotateAnchorOffset()*bt.Util._sign(i)-a,visible:this.rotateEnabled()}),this._batchChangeChild(".back",{width:r,height:i,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0});const u=this.anchorStyleFunc();u&&c.forEach(d=>{u(d)}),(t=this.getLayer())===null||t===void 0||t.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();var t=this.findOne("."+this._movingAnchorName);t&&t.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),RR.Group.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}toObject(){return MR.Node.prototype.toObject.call(this)}clone(t){var n=MR.Node.prototype.clone.call(this,t);return n}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}}l2.Transformer=ot;function _Re(e){return e instanceof Array||bt.Util.warn("enabledAnchors value should be an array"),e instanceof Array&&e.forEach(function(t){ob.indexOf(t)===-1&&bt.Util.warn("Unknown anchor name: "+t+". Available names are: "+ob.join(", "))}),e||[]}ot.prototype.className="Transformer";(0,dRe._registerNode)(ot);gt.Factory.addGetterSetter(ot,"enabledAnchors",ob,_Re);gt.Factory.addGetterSetter(ot,"flipEnabled",!0,(0,Ul.getBooleanValidator)());gt.Factory.addGetterSetter(ot,"resizeEnabled",!0);gt.Factory.addGetterSetter(ot,"anchorSize",10,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"rotateEnabled",!0);gt.Factory.addGetterSetter(ot,"rotationSnaps",[]);gt.Factory.addGetterSetter(ot,"rotateAnchorOffset",50,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"rotateAnchorCursor","crosshair");gt.Factory.addGetterSetter(ot,"rotationSnapTolerance",5,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderEnabled",!0);gt.Factory.addGetterSetter(ot,"anchorStroke","rgb(0, 161, 255)");gt.Factory.addGetterSetter(ot,"anchorStrokeWidth",1,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"anchorFill","white");gt.Factory.addGetterSetter(ot,"anchorCornerRadius",0,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderStroke","rgb(0, 161, 255)");gt.Factory.addGetterSetter(ot,"borderStrokeWidth",1,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"borderDash");gt.Factory.addGetterSetter(ot,"keepRatio",!0);gt.Factory.addGetterSetter(ot,"shiftBehavior","default");gt.Factory.addGetterSetter(ot,"centeredScaling",!1);gt.Factory.addGetterSetter(ot,"ignoreStroke",!1);gt.Factory.addGetterSetter(ot,"padding",0,(0,Ul.getNumberValidator)());gt.Factory.addGetterSetter(ot,"node");gt.Factory.addGetterSetter(ot,"nodes");gt.Factory.addGetterSetter(ot,"boundBoxFunc");gt.Factory.addGetterSetter(ot,"anchorDragBoundFunc");gt.Factory.addGetterSetter(ot,"anchorStyleFunc");gt.Factory.addGetterSetter(ot,"shouldOverdrawWholeArea",!1);gt.Factory.addGetterSetter(ot,"useSingleNodeRotation",!0);gt.Factory.backCompat(ot,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});var c2={};Object.defineProperty(c2,"__esModule",{value:!0});c2.Wedge=void 0;const u2=ze,SRe=An,xRe=Ue,TH=xe,wRe=Ue;class Sa extends SRe.Shape{_sceneFunc(t){t.beginPath(),t.arc(0,0,this.radius(),0,xRe.Konva.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}c2.Wedge=Sa;Sa.prototype.className="Wedge";Sa.prototype._centroid=!0;Sa.prototype._attrsAffectingSize=["radius"];(0,wRe._registerNode)(Sa);u2.Factory.addGetterSetter(Sa,"radius",0,(0,TH.getNumberValidator)());u2.Factory.addGetterSetter(Sa,"angle",0,(0,TH.getNumberValidator)());u2.Factory.addGetterSetter(Sa,"clockwise",!1);u2.Factory.backCompat(Sa,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});var d2={};Object.defineProperty(d2,"__esModule",{value:!0});d2.Blur=void 0;const NR=ze,CRe=Vt,ERe=xe;function FR(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var TRe=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],ARe=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function kRe(e,t){var n=e.data,r=e.width,i=e.height,o,s,a,l,c,u,d,f,h,p,m,_,v,y,g,b,S,w,C,x,k,A,R,L,M=t+t+1,E=r-1,P=i-1,O=t+1,F=O*(O+1)/2,$=new FR,D=null,N=$,z=null,V=null,H=TRe[t],X=ARe[t];for(a=1;a>X,R!==0?(R=255/R,n[u]=(f*H>>X)*R,n[u+1]=(h*H>>X)*R,n[u+2]=(p*H>>X)*R):n[u]=n[u+1]=n[u+2]=0,f-=_,h-=v,p-=y,m-=g,_-=z.r,v-=z.g,y-=z.b,g-=z.a,l=d+((l=o+t+1)>X,R>0?(R=255/R,n[l]=(f*H>>X)*R,n[l+1]=(h*H>>X)*R,n[l+2]=(p*H>>X)*R):n[l]=n[l+1]=n[l+2]=0,f-=_,h-=v,p-=y,m-=g,_-=z.r,v-=z.g,y-=z.b,g-=z.a,l=o+((l=s+O)0&&kRe(t,n)};d2.Blur=PRe;NR.Factory.addGetterSetter(CRe.Node,"blurRadius",0,(0,ERe.getNumberValidator)(),NR.Factory.afterSetFilter);var f2={};Object.defineProperty(f2,"__esModule",{value:!0});f2.Brighten=void 0;const DR=ze,IRe=Vt,MRe=xe,RRe=function(e){var t=this.brightness()*255,n=e.data,r=n.length,i;for(i=0;i255?255:i,o=o<0?0:o>255?255:o,s=s<0?0:s>255?255:s,n[a]=i,n[a+1]=o,n[a+2]=s};h2.Contrast=NRe;LR.Factory.addGetterSetter(ORe.Node,"contrast",0,(0,$Re.getNumberValidator)(),LR.Factory.afterSetFilter);var p2={};Object.defineProperty(p2,"__esModule",{value:!0});p2.Emboss=void 0;const Al=ze,g2=Vt,FRe=Qt,AH=xe,DRe=function(e){var t=this.embossStrength()*10,n=this.embossWhiteLevel()*255,r=this.embossDirection(),i=this.embossBlend(),o=0,s=0,a=e.data,l=e.width,c=e.height,u=l*4,d=c;switch(r){case"top-left":o=-1,s=-1;break;case"top":o=-1,s=0;break;case"top-right":o=-1,s=1;break;case"right":o=0,s=1;break;case"bottom-right":o=1,s=1;break;case"bottom":o=1,s=0;break;case"bottom-left":o=1,s=-1;break;case"left":o=0,s=-1;break;default:FRe.Util.error("Unknown emboss direction: "+r)}do{var f=(d-1)*u,h=o;d+h<1&&(h=0),d+h>c&&(h=0);var p=(d-1+h)*l*4,m=l;do{var _=f+(m-1)*4,v=s;m+v<1&&(v=0),m+v>l&&(v=0);var y=p+(m-1+v)*4,g=a[_]-a[y],b=a[_+1]-a[y+1],S=a[_+2]-a[y+2],w=g,C=w>0?w:-w,x=b>0?b:-b,k=S>0?S:-S;if(x>C&&(w=b),k>C&&(w=S),w*=t,i){var A=a[_]+w,R=a[_+1]+w,L=a[_+2]+w;a[_]=A>255?255:A<0?0:A,a[_+1]=R>255?255:R<0?0:R,a[_+2]=L>255?255:L<0?0:L}else{var M=n-w;M<0?M=0:M>255&&(M=255),a[_]=a[_+1]=a[_+2]=M}}while(--m)}while(--d)};p2.Emboss=DRe;Al.Factory.addGetterSetter(g2.Node,"embossStrength",.5,(0,AH.getNumberValidator)(),Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossWhiteLevel",.5,(0,AH.getNumberValidator)(),Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossDirection","top-left",null,Al.Factory.afterSetFilter);Al.Factory.addGetterSetter(g2.Node,"embossBlend",!1,null,Al.Factory.afterSetFilter);var m2={};Object.defineProperty(m2,"__esModule",{value:!0});m2.Enhance=void 0;const BR=ze,LRe=Vt,BRe=xe;function lC(e,t,n,r,i){var o=n-t,s=i-r,a;return o===0?r+s/2:s===0?r:(a=(e-t)/o,a=s*a+r,a)}const zRe=function(e){var t=e.data,n=t.length,r=t[0],i=r,o,s=t[1],a=s,l,c=t[2],u=c,d,f,h=this.enhance();if(h!==0){for(f=0;fi&&(i=o),l=t[f+1],la&&(a=l),d=t[f+2],du&&(u=d);i===r&&(i=255,r=0),a===s&&(a=255,s=0),u===c&&(u=255,c=0);var p,m,_,v,y,g,b,S,w;for(h>0?(m=i+h*(255-i),_=r-h*(r-0),y=a+h*(255-a),g=s-h*(s-0),S=u+h*(255-u),w=c-h*(c-0)):(p=(i+r)*.5,m=i+h*(i-p),_=r+h*(r-p),v=(a+s)*.5,y=a+h*(a-v),g=s+h*(s-v),b=(u+c)*.5,S=u+h*(u-b),w=c+h*(c-b)),f=0;fv?_:v;var y=s,g=o,b,S,w=360/g*Math.PI/180,C,x;for(S=0;Sg?y:g;var b=s,S=o,w,C,x=n.polarRotation||0,k,A;for(u=0;ut&&(b=g,S=0,w=-1),i=0;i=0&&h=0&&p=0&&h=0&&p=255*4?255:0}return s}function tOe(e,t,n){for(var r=[.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111,.1111111111111111],i=Math.round(Math.sqrt(r.length)),o=Math.floor(i/2),s=[],a=0;a=0&&h=0&&p=n))for(o=m;o<_;o+=1)o>=r||(s=(n*o+i)*4,a+=b[s+0],l+=b[s+1],c+=b[s+2],u+=b[s+3],g+=1);for(a=a/g,l=l/g,c=c/g,u=u/g,i=h;i=n))for(o=m;o<_;o+=1)o>=r||(s=(n*o+i)*4,b[s+0]=a,b[s+1]=l,b[s+2]=c,b[s+3]=u)}};C2.Pixelate=cOe;UR.Factory.addGetterSetter(aOe.Node,"pixelSize",8,(0,lOe.getNumberValidator)(),UR.Factory.afterSetFilter);var E2={};Object.defineProperty(E2,"__esModule",{value:!0});E2.Posterize=void 0;const GR=ze,uOe=Vt,dOe=xe,fOe=function(e){var t=Math.round(this.levels()*254)+1,n=e.data,r=n.length,i=255/t,o;for(o=0;o255?255:e<0?0:Math.round(e)});ab.Factory.addGetterSetter(XA.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});ab.Factory.addGetterSetter(XA.Node,"blue",0,hOe.RGBComponent,ab.Factory.afterSetFilter);var A2={};Object.defineProperty(A2,"__esModule",{value:!0});A2.RGBA=void 0;const Gg=ze,k2=Vt,gOe=xe,mOe=function(e){var t=e.data,n=t.length,r=this.red(),i=this.green(),o=this.blue(),s=this.alpha(),a,l;for(a=0;a255?255:e<0?0:Math.round(e)});Gg.Factory.addGetterSetter(k2.Node,"green",0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)});Gg.Factory.addGetterSetter(k2.Node,"blue",0,gOe.RGBComponent,Gg.Factory.afterSetFilter);Gg.Factory.addGetterSetter(k2.Node,"alpha",1,function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e});var P2={};Object.defineProperty(P2,"__esModule",{value:!0});P2.Sepia=void 0;const yOe=function(e){var t=e.data,n=t.length,r,i,o,s;for(r=0;r127&&(c=255-c),u>127&&(u=255-u),d>127&&(d=255-d),t[l]=c,t[l+1]=u,t[l+2]=d}while(--a)}while(--o)};I2.Solarize=vOe;var M2={};Object.defineProperty(M2,"__esModule",{value:!0});M2.Threshold=void 0;const HR=ze,bOe=Vt,_Oe=xe,SOe=function(e){var t=this.threshold()*255,n=e.data,r=n.length,i;for(i=0;i{const{width:r,height:i}=t,o=document.createElement("div"),s=new Ih.Stage({container:o,width:r,height:i}),a=new Ih.Layer,l=new Ih.Layer;return a.add(new Ih.Rect({...t,fill:n?"black":"white"})),e.forEach(c=>l.add(new Ih.Line({points:c.points,stroke:n?"white":"black",strokeWidth:c.strokeWidth*2,tension:0,lineCap:"round",lineJoin:"round",shadowForStrokeEnabled:!1,globalCompositeOperation:c.tool==="brush"?"source-over":"destination-out"}))),s.add(a),s.add(l),o.remove(),s},a7e=async(e,t,n)=>new Promise((r,i)=>{const o=document.createElement("canvas");o.width=t,o.height=n;const s=o.getContext("2d"),a=new Image;if(!s){o.remove(),i("Unable to get context");return}a.onload=function(){s.drawImage(a,0,0),o.remove(),r(s.getImageData(0,0,t,n))},a.src=e}),KR=async(e,t)=>{const n=e.toDataURL(t);return await a7e(n,t.width,t.height)},QA=async(e,t,n,r,i)=>{const o=ue("canvas"),s=LS(),a=tMe();if(!s||!a){o.error("Unable to find canvas / stage");return}const l={...t,...n},c=s.clone();c.scale({x:1,y:1});const u=c.getAbsolutePosition(),d={x:l.x+u.x,y:l.y+u.y,width:l.width,height:l.height},f=await rb(c,d),h=await KR(c,d),p=await s7e(r?e.objects.filter(rL):[],l,i),m=await rb(p,l),_=await KR(p,l);return{baseBlob:f,baseImageData:h,maskBlob:m,maskImageData:_}},l7e=()=>{fe({actionCreator:K8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),o=await QA(i.canvas.layerState,i.canvas.boundingBoxCoordinates,i.canvas.boundingBoxDimensions,i.canvas.isMaskEnabled,i.canvas.shouldPreserveMaskedArea);if(!o)return;const{maskBlob:s}=o;if(!s){r.error("Problem getting mask layer blob"),t(Ve({title:J("toast.problemSavingMask"),description:J("toast.problemSavingMaskDesc"),status:"error"}));return}const{autoAddBoardId:a}=i.gallery;t(ce.endpoints.uploadImage.initiate({file:new File([s],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!1,board_id:a==="none"?void 0:a,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.maskSavedAssets")}}}))}})},c7e=()=>{fe({actionCreator:J8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n(),{id:o}=e.payload,s=await QA(i.canvas.layerState,i.canvas.boundingBoxCoordinates,i.canvas.boundingBoxDimensions,i.canvas.isMaskEnabled,i.canvas.shouldPreserveMaskedArea);if(!s)return;const{maskBlob:a}=s;if(!a){r.error("Problem getting mask layer blob"),t(Ve({title:J("toast.problemImportingMask"),description:J("toast.problemImportingMaskDesc"),status:"error"}));return}const{autoAddBoardId:l}=i.gallery,c=await t(ce.endpoints.uploadImage.initiate({file:new File([a],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!1,board_id:l==="none"?void 0:l,crop_visible:!1,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.maskSentControlnetAssets")}}})).unwrap(),{image_name:u}=c;t(Nl({id:o,controlImage:u}))}})},u7e=async()=>{const e=LS();if(!e)return;const t=e.clone();return t.scale({x:1,y:1}),rb(t,t.getClientRect())},d7e=()=>{fe({actionCreator:Y8e,effect:async(e,{dispatch:t})=>{const n=B_.get().child({namespace:"canvasCopiedToClipboardListener"}),r=await u7e();if(!r){n.error("Problem getting base layer blob"),t(Ve({title:J("toast.problemMergingCanvas"),description:J("toast.problemMergingCanvasDesc"),status:"error"}));return}const i=LS();if(!i){n.error("Problem getting canvas base layer"),t(Ve({title:J("toast.problemMergingCanvas"),description:J("toast.problemMergingCanvasDesc"),status:"error"}));return}const o=i.getClientRect({relativeTo:i.getParent()??void 0}),s=await t(ce.endpoints.uploadImage.initiate({file:new File([r],"mergedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasMerged")}}})).unwrap(),{image_name:a}=s;t(oue({kind:"image",layer:"base",imageName:a,...o}))}})},f7e=()=>{fe({actionCreator:q8e,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("canvas"),i=n();let o;try{o=await BS(i)}catch(a){r.error(String(a)),t(Ve({title:J("toast.problemSavingCanvas"),description:J("toast.problemSavingCanvasDesc"),status:"error"}));return}const{autoAddBoardId:s}=i.gallery;t(ce.endpoints.uploadImage.initiate({file:new File([o],"savedCanvas.png",{type:"image/png"}),image_category:"general",is_intermediate:!1,board_id:s==="none"?void 0:s,crop_visible:!0,postUploadAction:{type:"TOAST",toastOptions:{title:J("toast.canvasSavedGallery")}}}))}})},h7e=(e,t,n)=>{if(!(dae.match(e)||tI.match(e)||Nl.match(e)||fae.match(e)||nI.match(e)))return!1;const{id:i}=e.payload,o=li(n.controlAdapters,i),s=li(t.controlAdapters,i);if(!o||!hi(o)||!s||!hi(s)||nI.match(e)&&o.shouldAutoConfig===!0)return!1;const{controlImage:a,processorType:l,shouldAutoConfig:c}=s;return tI.match(e)&&!c?!1:l!=="none"&&!!a},p7e=()=>{fe({predicate:h7e,effect:async(e,{dispatch:t,cancelActiveListeners:n,delay:r})=>{const i=ue("session"),{id:o}=e.payload;n(),i.trace("ControlNet auto-process triggered"),await r(300),t(q4({id:o}))}})},g7e=()=>{fe({actionCreator:q4,effect:async(e,{dispatch:t,getState:n,take:r})=>{const i=ue("session"),{id:o}=e.payload,s=li(n().controlAdapters,o);if(!(s!=null&&s.controlImage)||!hi(s)){i.error("Unable to process ControlNet image");return}if(s.processorType==="none"||s.processorNode.type==="none")return;const a=s.processorNode.id,l={prepend:!0,batch:{graph:{nodes:{[s.processorNode.id]:{...s.processorNode,is_intermediate:!0,use_cache:!1,image:{image_name:s.controlImage}}}},runs:1}};try{const c=t(en.endpoints.enqueueBatch.initiate(l,{fixedCacheKey:"enqueueBatch"})),u=await c.unwrap();c.reset(),i.debug({enqueueResult:tt(u)},J("queue.graphQueued"));const[d]=await r(f=>L4.match(f)&&f.payload.data.queue_batch_id===u.batch.batch_id&&f.payload.data.source_node_id===a);if(QD(d.payload.data.result)){const{image_name:f}=d.payload.data.result.image,[{payload:h}]=await r(m=>ce.endpoints.getImageDTO.matchFulfilled(m)&&m.payload.image_name===f),p=h;i.debug({controlNetId:e.payload,processedControlImage:p},"ControlNet image processed"),t(X4({id:o,processedControlImage:p.image_name}))}}catch(c){if(i.error({enqueueBatchArg:tt(l)},J("queue.graphFailedToQueue")),c instanceof Object&&"data"in c&&"status"in c&&c.status===403){t(pae()),t(Nl({id:o,controlImage:null}));return}t(Ve({title:J("queue.graphFailedToQueue"),status:"error"}))}}})},YA=he("app/enqueueRequested");he("app/batchEnqueued");const m7e=e=>{const t=window.open("");t&&e.forEach(n=>{const r=new Image;r.src=n.base64,t.document.write(n.caption),t.document.write("
"),t.document.write(r.outerHTML),t.document.write("

")})},XR=e=>new Promise((t,n)=>{const r=new FileReader;r.onload=i=>t(r.result),r.onerror=i=>n(r.error),r.onabort=i=>n(new Error("Read aborted")),r.readAsDataURL(e)}),y7e=e=>{let t=!0,n=!1;const r=e.length;let i=3;for(i;i{const t=e.length;let n=0;for(n;n{const{isPartiallyTransparent:n,isFullyTransparent:r}=y7e(e.data),i=v7e(t.data);return n?r?"txt2img":"outpaint":i?"inpaint":"img2img"},ve="positive_conditioning",Se="negative_conditioning",le="denoise_latents",Ku="denoise_latents_hrf",_e="latents_to_image",Xa="latents_to_image_hrf_hr",fc="latents_to_image_hrf_lr",Mh="image_to_latents_hrf",Da="resize_hrf",ep="esrgan_hrf",zc="linear_ui_output",gl="nsfw_checker",Tc="invisible_watermark",me="noise",Rh="noise_hrf",Oo="main_model_loader",R2="onnx_model_loader",ci="vae_loader",IH="lora_loader",at="clip_skip",Nt="image_to_latents",ls="resize_image",jc="img2img_resize",ae="canvas_output",At="inpaint_image",_7e="scaled_inpaint_image",Dn="inpaint_image_resize_up",nr="inpaint_image_resize_down",rt="inpaint_infill",Zs="inpaint_infill_resize_down",S7e="inpaint_final_image",Et="inpaint_create_mask",x7e="inpaint_mask",Re="canvas_coherence_denoise_latents",nt="canvas_coherence_noise",kl="canvas_coherence_noise_increment",Jt="canvas_coherence_mask_edge",Je="canvas_coherence_inpaint_create_mask",Gd="tomask",hr="mask_blur",Jn="mask_combine",Tt="mask_resize_up",mr="mask_resize_down",w7e="img_paste",Oh="control_net_collect",Py="ip_adapter_collect",$h="t2i_adapter_collect",yi="core_metadata",tp="esrgan",C7e="scale_image",pr="sdxl_model_loader",se="sdxl_denoise_latents",tc="sdxl_refiner_model_loader",Iy="sdxl_refiner_positive_conditioning",My="sdxl_refiner_negative_conditioning",Xo="sdxl_refiner_denoise_latents",ji="refiner_inpaint_create_mask",Cn="seamless",Eo="refiner_seamless",E7e=[ae,_e,Xa,gl,Tc,tp,ep,Da,fc,jc,At,_7e,Dn,nr,rt,Zs,S7e,Et,x7e,w7e,C7e],MH="text_to_image_graph",tE="image_to_image_graph",RH="canvas_text_to_image_graph",nE="canvas_image_to_image_graph",O2="canvas_inpaint_graph",$2="canvas_outpaint_graph",ZA="sdxl_text_to_image_graph",lb="sxdl_image_to_image_graph",N2="sdxl_canvas_text_to_image_graph",Hg="sdxl_canvas_image_to_image_graph",Pl="sdxl_canvas_inpaint_graph",Il="sdxl_canvas_outpaint_graph",xa=(e,t,n)=>{e.nodes[yi]={id:yi,type:"core_metadata",...t},e.edges.push({source:{node_id:yi,field:"metadata"},destination:{node_id:n,field:"metadata"}})},Bo=(e,t)=>{const n=e.nodes[yi];n&&Object.assign(n,t)},Nh=(e,t)=>{const n=e.nodes[yi];n&&delete n[t]},Fh=e=>!!e.nodes[yi],T7e=(e,t)=>{e.edges=e.edges.filter(n=>n.source.node_id!==yi),e.edges.push({source:{node_id:yi,field:"metadata"},destination:{node_id:t,field:"metadata"}})},ro=(e,t,n)=>{const r=rae(e.controlAdapters).filter(o=>{var s,a;return((s=o.model)==null?void 0:s.base_model)===((a=e.generation.model)==null?void 0:a.base_model)}),i=[];if(r.length){const o={id:Oh,type:"collect",is_intermediate:!0};t.nodes[Oh]=o,t.edges.push({source:{node_id:Oh,field:"collection"},destination:{node_id:n,field:"control"}}),Re in t.nodes&&t.edges.push({source:{node_id:Oh,field:"collection"},destination:{node_id:Re,field:"control"}}),r.forEach(s=>{if(!s.model)return;const{id:a,controlImage:l,processedControlImage:c,beginStepPct:u,endStepPct:d,controlMode:f,resizeMode:h,model:p,processorType:m,weight:_}=s,v={id:`control_net_${a}`,type:"controlnet",is_intermediate:!0,begin_step_percent:u,end_step_percent:d,control_mode:f,resize_mode:h,control_model:p,control_weight:_};if(c&&m!=="none")v.image={image_name:c};else if(l)v.image={image_name:l};else return;t.nodes[v.id]=v,i.push(uu(v,["id","type","is_intermediate"])),t.edges.push({source:{node_id:v.id,field:"control"},destination:{node_id:Oh,field:"item"}})}),Bo(t,{controlnets:i})}},io=(e,t,n)=>{const r=oae(e.controlAdapters).filter(i=>{var o,s;return((o=i.model)==null?void 0:o.base_model)===((s=e.generation.model)==null?void 0:s.base_model)});if(r.length){const i={id:Py,type:"collect",is_intermediate:!0};t.nodes[Py]=i,t.edges.push({source:{node_id:Py,field:"collection"},destination:{node_id:n,field:"ip_adapter"}}),Re in t.nodes&&t.edges.push({source:{node_id:Py,field:"collection"},destination:{node_id:Re,field:"ip_adapter"}});const o=[];r.forEach(s=>{if(!s.model)return;const{id:a,weight:l,model:c,beginStepPct:u,endStepPct:d}=s,f={id:`ip_adapter_${a}`,type:"ip_adapter",is_intermediate:!0,weight:l,ip_adapter_model:c,begin_step_percent:u,end_step_percent:d};if(s.controlImage)f.image={image_name:s.controlImage};else return;t.nodes[f.id]=f,o.push(uu(f,["id","type","is_intermediate"])),t.edges.push({source:{node_id:f.id,field:"ip_adapter"},destination:{node_id:i.id,field:"item"}})}),Bo(t,{ipAdapters:o})}},A7e=["txt2img","img2img","unifiedCanvas","nodes","modelManager","queue"],JA=hu(e=>e,({ui:e})=>jF(e.activeTab)?e.activeTab:"txt2img"),$We=hu(e=>e,({ui:e,config:t})=>{const r=A7e.filter(i=>!t.disabledTabs.includes(i)).indexOf(e.activeTab);return r===-1?0:r}),oo=(e,t)=>{const r=JA(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,{autoAddBoardId:i}=e.gallery,o={id:zc,type:"linear_ui_output",is_intermediate:r,use_cache:!1,board:i==="none"?void 0:{board_id:i}};t.nodes[zc]=o;const s={node_id:zc,field:"image"};Tc in t.nodes?t.edges.push({source:{node_id:Tc,field:"image"},destination:s}):gl in t.nodes?t.edges.push({source:{node_id:gl,field:"image"},destination:s}):ae in t.nodes?t.edges.push({source:{node_id:ae,field:"image"},destination:s}):Xa in t.nodes?t.edges.push({source:{node_id:Xa,field:"image"},destination:s}):_e in t.nodes&&t.edges.push({source:{node_id:_e,field:"image"},destination:s})},Hf=(e,t,n,r=Oo)=>{const{loras:i}=e.lora,o=c_(i);if(o===0)return;t.edges=t.edges.filter(c=>!(c.source.node_id===r&&["unet"].includes(c.source.field))),t.edges=t.edges.filter(c=>!(c.source.node_id===at&&["clip"].includes(c.source.field)));let s="",a=0;const l=[];Fo(i,c=>{const{model_name:u,base_model:d,weight:f}=c,h=`${IH}_${u.replace(".","_")}`,p={type:"lora_loader",id:h,is_intermediate:!0,lora:{model_name:u,base_model:d},weight:f};l.push({lora:{model_name:u,base_model:d},weight:f}),t.nodes[h]=p,a===0?(t.edges.push({source:{node_id:r,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:at,field:"clip"},destination:{node_id:h,field:"clip"}})):(t.edges.push({source:{node_id:s,field:"unet"},destination:{node_id:h,field:"unet"}}),t.edges.push({source:{node_id:s,field:"clip"},destination:{node_id:h,field:"clip"}})),a===o-1&&(t.edges.push({source:{node_id:h,field:"unet"},destination:{node_id:n,field:"unet"}}),t.id&&[O2,$2].includes(t.id)&&t.edges.push({source:{node_id:h,field:"unet"},destination:{node_id:Re,field:"unet"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:ve,field:"clip"}}),t.edges.push({source:{node_id:h,field:"clip"},destination:{node_id:Se,field:"clip"}})),s=h,a+=1}),Bo(t,{loras:l})},so=(e,t,n=_e)=>{const r=t.nodes[n];if(!r)return;r.is_intermediate=!0,r.use_cache=!0;const i={id:gl,type:"img_nsfw",is_intermediate:!0};t.nodes[gl]=i,t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:gl,field:"image"}})},ao=(e,t,n)=>{const{seamlessXAxis:r,seamlessYAxis:i}=e.generation;t.nodes[Cn]={id:Cn,type:"seamless",seamless_x:r,seamless_y:i},r&&Bo(t,{seamless_x:r}),i&&Bo(t,{seamless_y:i});let o=le;(t.id===ZA||t.id===lb||t.id===N2||t.id===Hg||t.id===Pl||t.id===Il)&&(o=se),t.edges=t.edges.filter(s=>!(s.source.node_id===n&&["unet"].includes(s.source.field))&&!(s.source.node_id===n&&["vae"].includes(s.source.field))),t.edges.push({source:{node_id:n,field:"unet"},destination:{node_id:Cn,field:"unet"}},{source:{node_id:n,field:"vae"},destination:{node_id:Cn,field:"vae"}},{source:{node_id:Cn,field:"unet"},destination:{node_id:o,field:"unet"}}),(t.id==O2||t.id===$2||t.id===Pl||t.id===Il)&&t.edges.push({source:{node_id:Cn,field:"unet"},destination:{node_id:Re,field:"unet"}})},lo=(e,t,n)=>{const r=aae(e.controlAdapters).filter(i=>{var o,s;return((o=i.model)==null?void 0:o.base_model)===((s=e.generation.model)==null?void 0:s.base_model)});if(r.length){const i={id:$h,type:"collect",is_intermediate:!0};t.nodes[$h]=i,t.edges.push({source:{node_id:$h,field:"collection"},destination:{node_id:n,field:"t2i_adapter"}}),Re in t.nodes&&t.edges.push({source:{node_id:$h,field:"collection"},destination:{node_id:Re,field:"t2i_adapter"}});const o=[];r.forEach(s=>{if(!s.model)return;const{id:a,controlImage:l,processedControlImage:c,beginStepPct:u,endStepPct:d,resizeMode:f,model:h,processorType:p,weight:m}=s,_={id:`t2i_adapter_${a}`,type:"t2i_adapter",is_intermediate:!0,begin_step_percent:u,end_step_percent:d,resize_mode:f,t2i_adapter_model:h,weight:m};if(c&&p!=="none")_.image={image_name:c};else if(l)_.image={image_name:l};else return;t.nodes[_.id]=_,o.push(uu(_,["id","type","is_intermediate"])),t.edges.push({source:{node_id:_.id,field:"t2i_adapter"},destination:{node_id:$h,field:"item"}})}),Bo(t,{t2iAdapters:o})}},co=(e,t,n=Oo)=>{const{vae:r,canvasCoherenceMode:i}=e.generation,{boundingBoxScaleMethod:o}=e.canvas,{shouldUseSDXLRefiner:s}=e.sdxl,a=["auto","manual"].includes(o),l=!r;l||(t.nodes[ci]={type:"vae_loader",id:ci,is_intermediate:!0,vae_model:r});const c=n==R2;(t.id===MH||t.id===tE||t.id===ZA||t.id===lb)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:_e,field:"vae"}}),(t.id===RH||t.id===nE||t.id===N2||t.id==Hg)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:a?_e:ae,field:"vae"}}),(t.id===tE||t.id===lb||t.id===nE||t.id===Hg)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Nt,field:"vae"}}),(t.id===O2||t.id===$2||t.id===Pl||t.id===Il)&&(t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:At,field:"vae"}},{source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Et,field:"vae"}},{source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:_e,field:"vae"}}),i!=="unmasked"&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:Je,field:"vae"}})),s&&(t.id===Pl||t.id===Il)&&t.edges.push({source:{node_id:l?n:ci,field:l&&c?"vae_decoder":"vae"},destination:{node_id:ji,field:"vae"}}),r&&Bo(t,{vae:r})},uo=(e,t,n=_e)=>{const i=JA(e)==="unifiedCanvas"?!e.canvas.shouldAutoSave:!1,o=t.nodes[n],s=t.nodes[gl];if(!o)return;const a={id:Tc,type:"img_watermark",is_intermediate:i};t.nodes[Tc]=a,o.is_intermediate=!0,o.use_cache=!0,s?(s.is_intermediate=!0,t.edges.push({source:{node_id:gl,field:"image"},destination:{node_id:Tc,field:"image"}})):t.edges.push({source:{node_id:n,field:"image"},destination:{node_id:Tc,field:"image"}})},k7e=(e,t)=>{const n=ue("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,cfgRescaleMultiplier:a,scheduler:l,seed:c,steps:u,img2imgStrength:d,vaePrecision:f,clipSkip:h,shouldUseCpuNoise:p,seamlessXAxis:m,seamlessYAxis:_}=e.generation,{width:v,height:y}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:g,boundingBoxScaleMethod:b}=e.canvas,S=f==="fp32",w=!0,C=["auto","manual"].includes(b);if(!o)throw n.error("No model found in state"),new Error("No model found in state");let x=Oo;const k=p,A={id:nE,nodes:{[x]:{type:"main_model_loader",id:x,is_intermediate:w,model:o},[at]:{type:"clip_skip",id:at,is_intermediate:w,skipped_layers:h},[ve]:{type:"compel",id:ve,is_intermediate:w,prompt:r},[Se]:{type:"compel",id:Se,is_intermediate:w,prompt:i},[me]:{type:"noise",id:me,is_intermediate:w,use_cpu:k,seed:c,width:C?g.width:v,height:C?g.height:y},[Nt]:{type:"i2l",id:Nt,is_intermediate:w},[le]:{type:"denoise_latents",id:le,is_intermediate:w,cfg_scale:s,scheduler:l,steps:u,denoising_start:1-d,denoising_end:1},[ae]:{type:"l2i",id:ae,is_intermediate:w,use_cache:!1}},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:le,field:"latents"}}]};return C?(A.nodes[jc]={id:jc,type:"img_resize",is_intermediate:w,image:t,width:g.width,height:g.height},A.nodes[_e]={id:_e,type:"l2i",is_intermediate:w,fp32:S},A.nodes[ae]={id:ae,type:"img_resize",is_intermediate:w,width:v,height:y,use_cache:!1},A.edges.push({source:{node_id:jc,field:"image"},destination:{node_id:Nt,field:"image"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(A.nodes[ae]={type:"l2i",id:ae,is_intermediate:w,fp32:S,use_cache:!1},A.nodes[Nt].image=t,A.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(A,{generation_mode:"img2img",cfg_scale:s,cfg_rescale_multiplier:a,width:C?g.width:v,height:C?g.height:y,positive_prompt:r,negative_prompt:i,model:o,seed:c,steps:u,rand_device:k?"cpu":"cuda",scheduler:l,clip_skip:h,strength:d,init_image:t.image_name},ae),(m||_)&&(ao(e,A,x),x=Cn),Hf(e,A,le),co(e,A,x),ro(e,A,le),io(e,A,le),lo(e,A,le),e.system.shouldUseNSFWChecker&&so(e,A,ae),e.system.shouldUseWatermarker&&uo(e,A,ae),oo(e,A),A},P7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,img2imgStrength:u,seed:d,vaePrecision:f,shouldUseCpuNoise:h,maskBlur:p,maskBlurMethod:m,canvasCoherenceMode:_,canvasCoherenceSteps:v,canvasCoherenceStrength:y,clipSkip:g,seamlessXAxis:b,seamlessYAxis:S}=e.generation;if(!s)throw r.error("No Image found in state"),new Error("No Image found in state");const{width:w,height:C}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:x,boundingBoxScaleMethod:k}=e.canvas,A=!0,R=f==="fp32",L=["auto","manual"].includes(k);let M=Oo;const E=h,P={id:O2,nodes:{[M]:{type:"main_model_loader",id:M,is_intermediate:A,model:s},[at]:{type:"clip_skip",id:at,is_intermediate:A,skipped_layers:g},[ve]:{type:"compel",id:ve,is_intermediate:A,prompt:i},[Se]:{type:"compel",id:Se,is_intermediate:A,prompt:o},[hr]:{type:"img_blur",id:hr,is_intermediate:A,radius:p,blur_type:m},[At]:{type:"i2l",id:At,is_intermediate:A,fp32:R},[me]:{type:"noise",id:me,use_cpu:E,seed:d,is_intermediate:A},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:A,fp32:R},[le]:{type:"denoise_latents",id:le,is_intermediate:A,steps:c,cfg_scale:a,scheduler:l,denoising_start:1-u,denoising_end:1},[nt]:{type:"noise",id:nt,use_cpu:E,seed:d+1,is_intermediate:A},[kl]:{type:"add",id:kl,b:1,is_intermediate:A},[Re]:{type:"denoise_latents",id:Re,is_intermediate:A,steps:v,cfg_scale:a,scheduler:l,denoising_start:1-y,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:A,fp32:R},[ae]:{type:"color_correct",id:ae,is_intermediate:A,reference:t,use_cache:!1}},edges:[{source:{node_id:M,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:M,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:hr,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:le,field:"denoise_mask"}},{source:{node_id:M,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(L){const O=x.width,F=x.height;P.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:A,width:O,height:F,image:t},P.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:A,width:O,height:F,image:n},P.nodes[nr]={type:"img_resize",id:nr,is_intermediate:A,width:w,height:C},P.nodes[mr]={type:"img_resize",id:mr,is_intermediate:A,width:w,height:C},P.nodes[me].width=O,P.nodes[me].height=F,P.nodes[nt].width=O,P.nodes[nt].height=F,P.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:hr,field:"image"}},{source:{node_id:Dn,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else P.nodes[me].width=w,P.nodes[me].height=C,P.nodes[nt].width=w,P.nodes[nt].height=C,P.nodes[At]={...P.nodes[At],image:t},P.nodes[hr]={...P.nodes[hr],image:n},P.nodes[Et]={...P.nodes[Et],image:t},P.edges.push({source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:ae,field:"mask"}});return _!=="unmasked"&&(P.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:A,fp32:R},L?P.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:Je,field:"image"}}):P.nodes[Je]={...P.nodes[Je],image:t},_==="mask"&&(L?P.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):P.nodes[Je]={...P.nodes[Je],mask:n}),_==="edge"&&(P.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:A,edge_blur:p,edge_size:p*2,low_threshold:100,high_threshold:200},L?P.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):P.nodes[Jt]={...P.nodes[Jt],image:n},P.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),P.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(b||S)&&(ao(e,P,M),M=Cn),co(e,P,M),Hf(e,P,le,M),ro(e,P,le),io(e,P,le),lo(e,P,le),e.system.shouldUseNSFWChecker&&so(e,P,ae),e.system.shouldUseWatermarker&&uo(e,P,ae),oo(e,P),P},I7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,img2imgStrength:u,seed:d,vaePrecision:f,shouldUseCpuNoise:h,maskBlur:p,canvasCoherenceMode:m,canvasCoherenceSteps:_,canvasCoherenceStrength:v,infillTileSize:y,infillPatchmatchDownscaleSize:g,infillMethod:b,clipSkip:S,seamlessXAxis:w,seamlessYAxis:C}=e.generation;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:x,height:k}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:A,boundingBoxScaleMethod:R}=e.canvas,L=f==="fp32",M=!0,E=["auto","manual"].includes(R);let P=Oo;const O=h,F={id:$2,nodes:{[P]:{type:"main_model_loader",id:P,is_intermediate:M,model:s},[at]:{type:"clip_skip",id:at,is_intermediate:M,skipped_layers:S},[ve]:{type:"compel",id:ve,is_intermediate:M,prompt:i},[Se]:{type:"compel",id:Se,is_intermediate:M,prompt:o},[Gd]:{type:"tomask",id:Gd,is_intermediate:M,image:t},[Jn]:{type:"mask_combine",id:Jn,is_intermediate:M,mask2:n},[At]:{type:"i2l",id:At,is_intermediate:M,fp32:L},[me]:{type:"noise",id:me,use_cpu:O,seed:d,is_intermediate:M},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:M,fp32:L},[le]:{type:"denoise_latents",id:le,is_intermediate:M,steps:c,cfg_scale:a,scheduler:l,denoising_start:1-u,denoising_end:1},[nt]:{type:"noise",id:nt,use_cpu:O,seed:d+1,is_intermediate:M},[kl]:{type:"add",id:kl,b:1,is_intermediate:M},[Re]:{type:"denoise_latents",id:Re,is_intermediate:M,steps:_,cfg_scale:a,scheduler:l,denoising_start:1-v,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:M,fp32:L},[ae]:{type:"color_correct",id:ae,is_intermediate:M,use_cache:!1}},edges:[{source:{node_id:P,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:P,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:rt,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Gd,field:"image"},destination:{node_id:Jn,field:"mask1"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:E?Tt:Jn,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:le,field:"denoise_mask"}},{source:{node_id:P,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:rt,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(b==="patchmatch"&&(F.nodes[rt]={type:"infill_patchmatch",id:rt,is_intermediate:M,downscale:g}),b==="lama"&&(F.nodes[rt]={type:"infill_lama",id:rt,is_intermediate:M}),b==="cv2"&&(F.nodes[rt]={type:"infill_cv2",id:rt,is_intermediate:M}),b==="tile"&&(F.nodes[rt]={type:"infill_tile",id:rt,is_intermediate:M,tile_size:y}),E){const $=A.width,D=A.height;F.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:M,width:$,height:D,image:t},F.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:M,width:$,height:D},F.nodes[nr]={type:"img_resize",id:nr,is_intermediate:M,width:x,height:k},F.nodes[Zs]={type:"img_resize",id:Zs,is_intermediate:M,width:x,height:k},F.nodes[mr]={type:"img_resize",id:mr,is_intermediate:M,width:x,height:k},F.nodes[me].width=$,F.nodes[me].height=D,F.nodes[nt].width=$,F.nodes[nt].height=D,F.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:rt,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:Tt,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:rt,field:"image"},destination:{node_id:Zs,field:"image"}},{source:{node_id:Zs,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else F.nodes[rt]={...F.nodes[rt],image:t},F.nodes[me].width=x,F.nodes[me].height=k,F.nodes[nt].width=x,F.nodes[nt].height=k,F.nodes[At]={...F.nodes[At],image:t},F.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:ae,field:"mask"}});return m!=="unmasked"&&(F.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:M,fp32:L},F.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:Je,field:"image"}}),m==="mask"&&(E?F.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):F.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Je,field:"mask"}})),m==="edge"&&(F.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:M,edge_blur:p,edge_size:p*2,low_threshold:100,high_threshold:200},E?F.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):F.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Jt,field:"image"}}),F.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),F.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(w||C)&&(ao(e,F,P),P=Cn),co(e,F,P),Hf(e,F,le,P),ro(e,F,le),io(e,F,le),lo(e,F,le),e.system.shouldUseNSFWChecker&&so(e,F,ae),e.system.shouldUseWatermarker&&uo(e,F,ae),oo(e,F),F},Wf=(e,t,n,r=pr)=>{const{loras:i}=e.lora,o=c_(i);if(o===0)return;const s=[],a=r;let l=r;[Cn,ji].includes(r)&&(l=pr),t.edges=t.edges.filter(d=>!(d.source.node_id===a&&["unet"].includes(d.source.field))&&!(d.source.node_id===l&&["clip"].includes(d.source.field))&&!(d.source.node_id===l&&["clip2"].includes(d.source.field)));let c="",u=0;Fo(i,d=>{const{model_name:f,base_model:h,weight:p}=d,m=`${IH}_${f.replace(".","_")}`,_={type:"sdxl_lora_loader",id:m,is_intermediate:!0,lora:{model_name:f,base_model:h},weight:p};s.push(tB.parse({lora:{model_name:f,base_model:h},weight:p})),t.nodes[m]=_,u===0?(t.edges.push({source:{node_id:a,field:"unet"},destination:{node_id:m,field:"unet"}}),t.edges.push({source:{node_id:l,field:"clip"},destination:{node_id:m,field:"clip"}}),t.edges.push({source:{node_id:l,field:"clip2"},destination:{node_id:m,field:"clip2"}})):(t.edges.push({source:{node_id:c,field:"unet"},destination:{node_id:m,field:"unet"}}),t.edges.push({source:{node_id:c,field:"clip"},destination:{node_id:m,field:"clip"}}),t.edges.push({source:{node_id:c,field:"clip2"},destination:{node_id:m,field:"clip2"}})),u===o-1&&(t.edges.push({source:{node_id:m,field:"unet"},destination:{node_id:n,field:"unet"}}),t.id&&[Pl,Il].includes(t.id)&&t.edges.push({source:{node_id:m,field:"unet"},destination:{node_id:Re,field:"unet"}}),t.edges.push({source:{node_id:m,field:"clip"},destination:{node_id:ve,field:"clip"}}),t.edges.push({source:{node_id:m,field:"clip"},destination:{node_id:Se,field:"clip"}}),t.edges.push({source:{node_id:m,field:"clip2"},destination:{node_id:ve,field:"clip2"}}),t.edges.push({source:{node_id:m,field:"clip2"},destination:{node_id:Se,field:"clip2"}})),c=m,u+=1}),Bo(t,{loras:s})},xu=(e,t)=>{const{positivePrompt:n,negativePrompt:r}=e.generation,{positiveStylePrompt:i,negativeStylePrompt:o,shouldConcatSDXLStylePrompt:s}=e.sdxl,a=s||t?[n,i].join(" "):i,l=s||t?[r,o].join(" "):o;return{joinedPositiveStylePrompt:a,joinedNegativeStylePrompt:l}},qf=(e,t,n,r,i,o)=>{const{refinerModel:s,refinerPositiveAestheticScore:a,refinerNegativeAestheticScore:l,refinerSteps:c,refinerScheduler:u,refinerCFGScale:d,refinerStart:f}=e.sdxl,{seamlessXAxis:h,seamlessYAxis:p,vaePrecision:m}=e.generation,{boundingBoxScaleMethod:_}=e.canvas,v=m==="fp32",y=["auto","manual"].includes(_);if(!s)return;Bo(t,{refiner_model:s,refiner_positive_aesthetic_score:a,refiner_negative_aesthetic_score:l,refiner_cfg_scale:d,refiner_scheduler:u,refiner_start:f,refiner_steps:c});const g=r||pr,{joinedPositiveStylePrompt:b,joinedNegativeStylePrompt:S}=xu(e,!0);t.edges=t.edges.filter(w=>!(w.source.node_id===n&&["latents"].includes(w.source.field))),t.edges=t.edges.filter(w=>!(w.source.node_id===g&&["vae"].includes(w.source.field))),t.nodes[tc]={type:"sdxl_refiner_model_loader",id:tc,model:s},t.nodes[Iy]={type:"sdxl_refiner_compel_prompt",id:Iy,style:b,aesthetic_score:a},t.nodes[My]={type:"sdxl_refiner_compel_prompt",id:My,style:S,aesthetic_score:l},t.nodes[Xo]={type:"denoise_latents",id:Xo,cfg_scale:d,steps:c,scheduler:u,denoising_start:f,denoising_end:1},h||p?(t.nodes[Eo]={id:Eo,type:"seamless",seamless_x:h,seamless_y:p},t.edges.push({source:{node_id:tc,field:"unet"},destination:{node_id:Eo,field:"unet"}},{source:{node_id:tc,field:"vae"},destination:{node_id:Eo,field:"vae"}},{source:{node_id:Eo,field:"unet"},destination:{node_id:Xo,field:"unet"}})):t.edges.push({source:{node_id:tc,field:"unet"},destination:{node_id:Xo,field:"unet"}}),t.edges.push({source:{node_id:tc,field:"clip2"},destination:{node_id:Iy,field:"clip2"}},{source:{node_id:tc,field:"clip2"},destination:{node_id:My,field:"clip2"}},{source:{node_id:Iy,field:"conditioning"},destination:{node_id:Xo,field:"positive_conditioning"}},{source:{node_id:My,field:"conditioning"},destination:{node_id:Xo,field:"negative_conditioning"}},{source:{node_id:n,field:"latents"},destination:{node_id:Xo,field:"latents"}}),(t.id===Pl||t.id===Il)&&(t.nodes[ji]={type:"create_denoise_mask",id:ji,is_intermediate:!0,fp32:v},y?t.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:ji,field:"image"}}):t.nodes[ji]={...t.nodes[ji],image:i},t.id===Pl&&(y?t.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:ji,field:"mask"}}):t.nodes[ji]={...t.nodes[ji],mask:o}),t.id===Il&&t.edges.push({source:{node_id:y?Tt:Jn,field:"image"},destination:{node_id:ji,field:"mask"}}),t.edges.push({source:{node_id:ji,field:"denoise_mask"},destination:{node_id:Xo,field:"denoise_mask"}})),t.id===N2||t.id===Hg?t.edges.push({source:{node_id:Xo,field:"latents"},destination:{node_id:y?_e:ae,field:"latents"}}):t.edges.push({source:{node_id:Xo,field:"latents"},destination:{node_id:_e,field:"latents"}})},M7e=(e,t)=>{const n=ue("nodes"),{positivePrompt:r,negativePrompt:i,model:o,cfgScale:s,cfgRescaleMultiplier:a,scheduler:l,seed:c,steps:u,vaePrecision:d,shouldUseCpuNoise:f,seamlessXAxis:h,seamlessYAxis:p}=e.generation,{shouldUseSDXLRefiner:m,refinerStart:_,sdxlImg2ImgDenoisingStrength:v}=e.sdxl,{width:y,height:g}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:b,boundingBoxScaleMethod:S}=e.canvas,w=d==="fp32",C=!0,x=["auto","manual"].includes(S);if(!o)throw n.error("No model found in state"),new Error("No model found in state");let k=pr;const A=f,{joinedPositiveStylePrompt:R,joinedNegativeStylePrompt:L}=xu(e),M={id:Hg,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:o},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:r,style:R},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:i,style:L},[me]:{type:"noise",id:me,is_intermediate:C,use_cpu:A,seed:c,width:x?b.width:y,height:x?b.height:g},[Nt]:{type:"i2l",id:Nt,is_intermediate:C,fp32:w},[se]:{type:"denoise_latents",id:se,is_intermediate:C,cfg_scale:s,scheduler:l,steps:u,denoising_start:m?Math.min(_,1-v):1-v,denoising_end:m?_:1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:se,field:"latents"}}]};return x?(M.nodes[jc]={id:jc,type:"img_resize",is_intermediate:C,image:t,width:b.width,height:b.height},M.nodes[_e]={id:_e,type:"l2i",is_intermediate:C,fp32:w},M.nodes[ae]={id:ae,type:"img_resize",is_intermediate:C,width:y,height:g,use_cache:!1},M.edges.push({source:{node_id:jc,field:"image"},destination:{node_id:Nt,field:"image"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(M.nodes[ae]={type:"l2i",id:ae,is_intermediate:C,fp32:w,use_cache:!1},M.nodes[Nt].image=t,M.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(M,{generation_mode:"img2img",cfg_scale:s,cfg_rescale_multiplier:a,width:x?b.width:y,height:x?b.height:g,positive_prompt:r,negative_prompt:i,model:o,seed:c,steps:u,rand_device:A?"cpu":"cuda",scheduler:l,strength:v,init_image:t.image_name},ae),(h||p)&&(ao(e,M,k),k=Cn),m&&(qf(e,M,se,k),(h||p)&&(k=Eo)),co(e,M,k),Wf(e,M,se,k),ro(e,M,se),io(e,M,se),lo(e,M,se),e.system.shouldUseNSFWChecker&&so(e,M,ae),e.system.shouldUseWatermarker&&uo(e,M,ae),oo(e,M),M},R7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,seed:u,vaePrecision:d,shouldUseCpuNoise:f,maskBlur:h,maskBlurMethod:p,canvasCoherenceMode:m,canvasCoherenceSteps:_,canvasCoherenceStrength:v,seamlessXAxis:y,seamlessYAxis:g}=e.generation,{sdxlImg2ImgDenoisingStrength:b,shouldUseSDXLRefiner:S,refinerStart:w}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:C,height:x}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:k,boundingBoxScaleMethod:A}=e.canvas,R=d==="fp32",L=!0,M=["auto","manual"].includes(A);let E=pr;const P=f,{joinedPositiveStylePrompt:O,joinedNegativeStylePrompt:F}=xu(e),$={id:Pl,nodes:{[E]:{type:"sdxl_model_loader",id:E,model:s},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:i,style:O},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:o,style:F},[hr]:{type:"img_blur",id:hr,is_intermediate:L,radius:h,blur_type:p},[At]:{type:"i2l",id:At,is_intermediate:L,fp32:R},[me]:{type:"noise",id:me,use_cpu:P,seed:u,is_intermediate:L},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:L,fp32:R},[se]:{type:"denoise_latents",id:se,is_intermediate:L,steps:c,cfg_scale:a,scheduler:l,denoising_start:S?Math.min(w,1-b):1-b,denoising_end:S?w:1},[nt]:{type:"noise",id:nt,use_cpu:P,seed:u+1,is_intermediate:L},[kl]:{type:"add",id:kl,b:1,is_intermediate:L},[Re]:{type:"denoise_latents",id:Re,is_intermediate:L,steps:_,cfg_scale:a,scheduler:l,denoising_start:1-v,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:L,fp32:R},[ae]:{type:"color_correct",id:ae,is_intermediate:L,reference:t,use_cache:!1}},edges:[{source:{node_id:E,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:E,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:E,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:E,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:E,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:hr,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:se,field:"denoise_mask"}},{source:{node_id:E,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(M){const D=k.width,N=k.height;$.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:L,width:D,height:N,image:t},$.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:L,width:D,height:N,image:n},$.nodes[nr]={type:"img_resize",id:nr,is_intermediate:L,width:C,height:x},$.nodes[mr]={type:"img_resize",id:mr,is_intermediate:L,width:C,height:x},$.nodes[me].width=D,$.nodes[me].height=N,$.nodes[nt].width=D,$.nodes[nt].height=N,$.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:hr,field:"image"}},{source:{node_id:Dn,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else $.nodes[me].width=C,$.nodes[me].height=x,$.nodes[nt].width=C,$.nodes[nt].height=x,$.nodes[At]={...$.nodes[At],image:t},$.nodes[hr]={...$.nodes[hr],image:n},$.nodes[Et]={...$.nodes[Et],image:t},$.edges.push({source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:hr,field:"image"},destination:{node_id:ae,field:"mask"}});return m!=="unmasked"&&($.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:L,fp32:R},M?$.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:Je,field:"image"}}):$.nodes[Je]={...$.nodes[Je],image:t},m==="mask"&&(M?$.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):$.nodes[Je]={...$.nodes[Je],mask:n}),m==="edge"&&($.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:L,edge_blur:h,edge_size:h*2,low_threshold:100,high_threshold:200},M?$.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):$.nodes[Jt]={...$.nodes[Jt],image:n},$.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),$.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(y||g)&&(ao(e,$,E),E=Cn),S&&(qf(e,$,Re,E,t,n),(y||g)&&(E=Eo)),co(e,$,E),Wf(e,$,se,E),ro(e,$,se),io(e,$,se),lo(e,$,se),e.system.shouldUseNSFWChecker&&so(e,$,ae),e.system.shouldUseWatermarker&&uo(e,$,ae),oo(e,$),$},O7e=(e,t,n)=>{const r=ue("nodes"),{positivePrompt:i,negativePrompt:o,model:s,cfgScale:a,scheduler:l,steps:c,seed:u,vaePrecision:d,shouldUseCpuNoise:f,maskBlur:h,canvasCoherenceMode:p,canvasCoherenceSteps:m,canvasCoherenceStrength:_,infillTileSize:v,infillPatchmatchDownscaleSize:y,infillMethod:g,seamlessXAxis:b,seamlessYAxis:S}=e.generation,{sdxlImg2ImgDenoisingStrength:w,shouldUseSDXLRefiner:C,refinerStart:x}=e.sdxl;if(!s)throw r.error("No model found in state"),new Error("No model found in state");const{width:k,height:A}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:R,boundingBoxScaleMethod:L}=e.canvas,M=d==="fp32",E=!0,P=["auto","manual"].includes(L);let O=pr;const F=f,{joinedPositiveStylePrompt:$,joinedNegativeStylePrompt:D}=xu(e),N={id:Il,nodes:{[pr]:{type:"sdxl_model_loader",id:pr,model:s},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:i,style:$},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:o,style:D},[Gd]:{type:"tomask",id:Gd,is_intermediate:E,image:t},[Jn]:{type:"mask_combine",id:Jn,is_intermediate:E,mask2:n},[At]:{type:"i2l",id:At,is_intermediate:E,fp32:M},[me]:{type:"noise",id:me,use_cpu:F,seed:u,is_intermediate:E},[Et]:{type:"create_denoise_mask",id:Et,is_intermediate:E,fp32:M},[se]:{type:"denoise_latents",id:se,is_intermediate:E,steps:c,cfg_scale:a,scheduler:l,denoising_start:C?Math.min(x,1-w):1-w,denoising_end:C?x:1},[nt]:{type:"noise",id:nt,use_cpu:F,seed:u+1,is_intermediate:E},[kl]:{type:"add",id:kl,b:1,is_intermediate:E},[Re]:{type:"denoise_latents",id:Re,is_intermediate:E,steps:m,cfg_scale:a,scheduler:l,denoising_start:1-_,denoising_end:1},[_e]:{type:"l2i",id:_e,is_intermediate:E,fp32:M},[ae]:{type:"color_correct",id:ae,is_intermediate:E,use_cache:!1}},edges:[{source:{node_id:pr,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:pr,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:pr,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:pr,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:pr,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:rt,field:"image"},destination:{node_id:At,field:"image"}},{source:{node_id:Gd,field:"image"},destination:{node_id:Jn,field:"mask1"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:At,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:P?Tt:Jn,field:"image"},destination:{node_id:Et,field:"mask"}},{source:{node_id:Et,field:"denoise_mask"},destination:{node_id:se,field:"denoise_mask"}},{source:{node_id:O,field:"unet"},destination:{node_id:Re,field:"unet"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:Re,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:Re,field:"negative_conditioning"}},{source:{node_id:nt,field:"noise"},destination:{node_id:Re,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:Re,field:"latents"}},{source:{node_id:rt,field:"image"},destination:{node_id:Et,field:"image"}},{source:{node_id:Re,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(g==="patchmatch"&&(N.nodes[rt]={type:"infill_patchmatch",id:rt,is_intermediate:E,downscale:y}),g==="lama"&&(N.nodes[rt]={type:"infill_lama",id:rt,is_intermediate:E}),g==="cv2"&&(N.nodes[rt]={type:"infill_cv2",id:rt,is_intermediate:E}),g==="tile"&&(N.nodes[rt]={type:"infill_tile",id:rt,is_intermediate:E,tile_size:v}),P){const z=R.width,V=R.height;N.nodes[Dn]={type:"img_resize",id:Dn,is_intermediate:E,width:z,height:V,image:t},N.nodes[Tt]={type:"img_resize",id:Tt,is_intermediate:E,width:z,height:V},N.nodes[nr]={type:"img_resize",id:nr,is_intermediate:E,width:k,height:A},N.nodes[Zs]={type:"img_resize",id:Zs,is_intermediate:E,width:k,height:A},N.nodes[mr]={type:"img_resize",id:mr,is_intermediate:E,width:k,height:A},N.nodes[me].width=z,N.nodes[me].height=V,N.nodes[nt].width=z,N.nodes[nt].height=V,N.edges.push({source:{node_id:Dn,field:"image"},destination:{node_id:rt,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:Tt,field:"image"}},{source:{node_id:_e,field:"image"},destination:{node_id:nr,field:"image"}},{source:{node_id:Tt,field:"image"},destination:{node_id:mr,field:"image"}},{source:{node_id:rt,field:"image"},destination:{node_id:Zs,field:"image"}},{source:{node_id:Zs,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:nr,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:mr,field:"image"},destination:{node_id:ae,field:"mask"}})}else N.nodes[rt]={...N.nodes[rt],image:t},N.nodes[me].width=k,N.nodes[me].height=A,N.nodes[nt].width=k,N.nodes[nt].height=A,N.nodes[At]={...N.nodes[At],image:t},N.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:ae,field:"reference"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}},{source:{node_id:Jn,field:"image"},destination:{node_id:ae,field:"mask"}});return p!=="unmasked"&&(N.nodes[Je]={type:"create_denoise_mask",id:Je,is_intermediate:E,fp32:M},N.edges.push({source:{node_id:rt,field:"image"},destination:{node_id:Je,field:"image"}}),p==="mask"&&(P?N.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Je,field:"mask"}}):N.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Je,field:"mask"}})),p==="edge"&&(N.nodes[Jt]={type:"mask_edge",id:Jt,is_intermediate:E,edge_blur:h,edge_size:h*2,low_threshold:100,high_threshold:200},P?N.edges.push({source:{node_id:Tt,field:"image"},destination:{node_id:Jt,field:"image"}}):N.edges.push({source:{node_id:Jn,field:"image"},destination:{node_id:Jt,field:"image"}}),N.edges.push({source:{node_id:Jt,field:"image"},destination:{node_id:Je,field:"mask"}})),N.edges.push({source:{node_id:Je,field:"denoise_mask"},destination:{node_id:Re,field:"denoise_mask"}})),(b||S)&&(ao(e,N,O),O=Cn),C&&(qf(e,N,Re,O,t),(b||S)&&(O=Eo)),co(e,N,O),Wf(e,N,se,O),ro(e,N,se),io(e,N,se),lo(e,N,se),e.system.shouldUseNSFWChecker&&so(e,N,ae),e.system.shouldUseWatermarker&&uo(e,N,ae),oo(e,N),N},$7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,vaePrecision:u,shouldUseCpuNoise:d,seamlessXAxis:f,seamlessYAxis:h}=e.generation,{width:p,height:m}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:_,boundingBoxScaleMethod:v}=e.canvas,y=u==="fp32",g=!0,b=["auto","manual"].includes(v),{shouldUseSDXLRefiner:S,refinerStart:w}=e.sdxl;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const C=d,x=i.model_type==="onnx";let k=x?R2:pr;const A=x?"onnx_model_loader":"sdxl_model_loader",R=x?{type:"t2l_onnx",id:se,is_intermediate:g,cfg_scale:o,scheduler:a,steps:c}:{type:"denoise_latents",id:se,is_intermediate:g,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:S?w:1},{joinedPositiveStylePrompt:L,joinedNegativeStylePrompt:M}=xu(e),E={id:N2,nodes:{[k]:{type:A,id:k,is_intermediate:g,model:i},[ve]:{type:x?"prompt_onnx":"sdxl_compel_prompt",id:ve,is_intermediate:g,prompt:n,style:L},[Se]:{type:x?"prompt_onnx":"sdxl_compel_prompt",id:Se,is_intermediate:g,prompt:r,style:M},[me]:{type:"noise",id:me,is_intermediate:g,seed:l,width:b?_.width:p,height:b?_.height:m,use_cpu:C},[R.id]:R},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}}]};return b?(E.nodes[_e]={id:_e,type:x?"l2i_onnx":"l2i",is_intermediate:g,fp32:y},E.nodes[ae]={id:ae,type:"img_resize",is_intermediate:g,width:p,height:m,use_cache:!1},E.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(E.nodes[ae]={type:x?"l2i_onnx":"l2i",id:ae,is_intermediate:g,fp32:y,use_cache:!1},E.edges.push({source:{node_id:se,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(E,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,width:b?_.width:p,height:b?_.height:m,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:C?"cpu":"cuda",scheduler:a},ae),(f||h)&&(ao(e,E,k),k=Cn),S&&(qf(e,E,se,k),(f||h)&&(k=Eo)),Wf(e,E,se,k),co(e,E,k),ro(e,E,se),io(e,E,se),lo(e,E,se),e.system.shouldUseNSFWChecker&&so(e,E,ae),e.system.shouldUseWatermarker&&uo(e,E,ae),oo(e,E),E},N7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,vaePrecision:u,clipSkip:d,shouldUseCpuNoise:f,seamlessXAxis:h,seamlessYAxis:p}=e.generation,{width:m,height:_}=e.canvas.boundingBoxDimensions,{scaledBoundingBoxDimensions:v,boundingBoxScaleMethod:y}=e.canvas,g=u==="fp32",b=!0,S=["auto","manual"].includes(y);if(!i)throw t.error("No model found in state"),new Error("No model found in state");const w=f,C=i.model_type==="onnx";let x=C?R2:Oo;const k=C?"onnx_model_loader":"main_model_loader",A=C?{type:"t2l_onnx",id:le,is_intermediate:b,cfg_scale:o,scheduler:a,steps:c}:{type:"denoise_latents",id:le,is_intermediate:b,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:1},R={id:RH,nodes:{[x]:{type:k,id:x,is_intermediate:b,model:i},[at]:{type:"clip_skip",id:at,is_intermediate:b,skipped_layers:d},[ve]:{type:C?"prompt_onnx":"compel",id:ve,is_intermediate:b,prompt:n},[Se]:{type:C?"prompt_onnx":"compel",id:Se,is_intermediate:b,prompt:r},[me]:{type:"noise",id:me,is_intermediate:b,seed:l,width:S?v.width:m,height:S?v.height:_,use_cpu:w},[A.id]:A},edges:[{source:{node_id:x,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:x,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}}]};return S?(R.nodes[_e]={id:_e,type:C?"l2i_onnx":"l2i",is_intermediate:b,fp32:g},R.nodes[ae]={id:ae,type:"img_resize",is_intermediate:b,width:m,height:_,use_cache:!1},R.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}},{source:{node_id:_e,field:"image"},destination:{node_id:ae,field:"image"}})):(R.nodes[ae]={type:C?"l2i_onnx":"l2i",id:ae,is_intermediate:b,fp32:g,use_cache:!1},R.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:ae,field:"latents"}})),xa(R,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,width:S?v.width:m,height:S?v.height:_,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:w?"cpu":"cuda",scheduler:a,clip_skip:d},ae),(h||p)&&(ao(e,R,x),x=Cn),co(e,R,x),Hf(e,R,le,x),ro(e,R,le),io(e,R,le),lo(e,R,le),e.system.shouldUseNSFWChecker&&so(e,R,ae),e.system.shouldUseWatermarker&&uo(e,R,ae),oo(e,R),R},F7e=(e,t,n,r)=>{let i;if(t==="txt2img")e.generation.model&&e.generation.model.base_model==="sdxl"?i=$7e(e):i=N7e(e);else if(t==="img2img"){if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=M7e(e,n):i=k7e(e,n)}else if(t==="inpaint"){if(!n||!r)throw new Error("Missing canvas init and mask images");e.generation.model&&e.generation.model.base_model==="sdxl"?i=R7e(e,n,r):i=P7e(e,n,r)}else{if(!n)throw new Error("Missing canvas init image");e.generation.model&&e.generation.model.base_model==="sdxl"?i=O7e(e,n,r):i=I7e(e,n,r)}return i},cC=({count:e,start:t,min:n=vae,max:r=mp})=>{const i=t??Aoe(n,r),o=[];for(let s=i;s{const{iterations:r,model:i,shouldRandomizeSeed:o,seed:s}=e.generation,{shouldConcatSDXLStylePrompt:a,positiveStylePrompt:l}=e.sdxl,{prompts:c,seedBehaviour:u}=e.dynamicPrompts,d=[];if(c.length===1){const h=cC({count:r,start:o?void 0:s}),p=[];t.nodes[me]&&p.push({node_path:me,field_name:"seed",items:h}),Fh(t)&&(Nh(t,"seed"),p.push({node_path:yi,field_name:"seed",items:h})),t.nodes[nt]&&p.push({node_path:nt,field_name:"seed",items:h.map(m=>(m+1)%mp)}),d.push(p)}else{const h=[],p=[];if(u==="PER_PROMPT"){const _=cC({count:c.length*r,start:o?void 0:s});t.nodes[me]&&h.push({node_path:me,field_name:"seed",items:_}),Fh(t)&&(Nh(t,"seed"),h.push({node_path:yi,field_name:"seed",items:_})),t.nodes[nt]&&h.push({node_path:nt,field_name:"seed",items:_.map(v=>(v+1)%mp)})}else{const _=cC({count:r,start:o?void 0:s});t.nodes[me]&&p.push({node_path:me,field_name:"seed",items:_}),Fh(t)&&(Nh(t,"seed"),p.push({node_path:yi,field_name:"seed",items:_})),t.nodes[nt]&&p.push({node_path:nt,field_name:"seed",items:_.map(v=>(v+1)%mp)}),d.push(p)}const m=u==="PER_PROMPT"?Ooe(r).flatMap(()=>c):c;if(t.nodes[ve]&&h.push({node_path:ve,field_name:"prompt",items:m}),Fh(t)&&(Nh(t,"positive_prompt"),h.push({node_path:yi,field_name:"positive_prompt",items:m})),a&&(i==null?void 0:i.base_model)==="sdxl"){const _=m.map(v=>[v,l].join(" "));t.nodes[ve]&&h.push({node_path:ve,field_name:"style",items:_}),Fh(t)&&(Nh(t,"positive_style_prompt"),h.push({node_path:yi,field_name:"positive_style_prompt",items:m}))}d.push(h)}return{prepend:n,batch:{graph:t,runs:1,data:d}}},D7e=()=>{fe({predicate:e=>YA.match(e)&&e.payload.tabName==="unifiedCanvas",effect:async(e,{getState:t,dispatch:n})=>{const r=ue("queue"),{prepend:i}=e.payload,o=t(),{layerState:s,boundingBoxCoordinates:a,boundingBoxDimensions:l,isMaskEnabled:c,shouldPreserveMaskedArea:u}=o.canvas,d=await QA(s,a,l,c,u);if(!d){r.error("Unable to create canvas data");return}const{baseBlob:f,baseImageData:h,maskBlob:p,maskImageData:m}=d,_=b7e(h,m);if(o.system.enableImageDebugging){const S=await XR(f),w=await XR(p);m7e([{base64:w,caption:"mask b64"},{base64:S,caption:"image b64"}])}r.debug(`Generation mode: ${_}`);let v,y;["img2img","inpaint","outpaint"].includes(_)&&(v=await n(ce.endpoints.uploadImage.initiate({file:new File([f],"canvasInitImage.png",{type:"image/png"}),image_category:"general",is_intermediate:!0})).unwrap()),["inpaint","outpaint"].includes(_)&&(y=await n(ce.endpoints.uploadImage.initiate({file:new File([p],"canvasMaskImage.png",{type:"image/png"}),image_category:"mask",is_intermediate:!0})).unwrap());const g=F7e(o,_,v,y);r.debug({graph:tt(g)},"Canvas graph built"),n(lB(g));const b=OH(o,g,i);try{const S=n(en.endpoints.enqueueBatch.initiate(b,{fixedCacheKey:"enqueueBatch"})),w=await S.unwrap();S.reset();const C=w.batch.batch_id;o.canvas.layerState.stagingArea.boundingBox||n(sue({boundingBox:{...o.canvas.boundingBoxCoordinates,...o.canvas.boundingBoxDimensions}})),n(aue(C))}catch{}}})},L7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,initialImage:u,img2imgStrength:d,shouldFitToWidthHeight:f,width:h,height:p,clipSkip:m,shouldUseCpuNoise:_,vaePrecision:v,seamlessXAxis:y,seamlessYAxis:g}=e.generation;if(!u)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const b=v==="fp32",S=!0;let w=Oo;const C=_,x={id:tE,nodes:{[w]:{type:"main_model_loader",id:w,model:i,is_intermediate:S},[at]:{type:"clip_skip",id:at,skipped_layers:m,is_intermediate:S},[ve]:{type:"compel",id:ve,prompt:n,is_intermediate:S},[Se]:{type:"compel",id:Se,prompt:r,is_intermediate:S},[me]:{type:"noise",id:me,use_cpu:C,seed:l,is_intermediate:S},[_e]:{type:"l2i",id:_e,fp32:b,is_intermediate:S},[le]:{type:"denoise_latents",id:le,cfg_scale:o,scheduler:a,steps:c,denoising_start:1-d,denoising_end:1,is_intermediate:S},[Nt]:{type:"i2l",id:Nt,fp32:b,is_intermediate:S,use_cache:!1}},edges:[{source:{node_id:w,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:w,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:le,field:"latents"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(f&&(u.width!==h||u.height!==p)){const k={id:ls,type:"img_resize",image:{image_name:u.imageName},is_intermediate:!0,width:h,height:p};x.nodes[ls]=k,x.edges.push({source:{node_id:ls,field:"image"},destination:{node_id:Nt,field:"image"}}),x.edges.push({source:{node_id:ls,field:"width"},destination:{node_id:me,field:"width"}}),x.edges.push({source:{node_id:ls,field:"height"},destination:{node_id:me,field:"height"}})}else x.nodes[Nt].image={image_name:u.imageName},x.edges.push({source:{node_id:Nt,field:"width"},destination:{node_id:me,field:"width"}}),x.edges.push({source:{node_id:Nt,field:"height"},destination:{node_id:me,field:"height"}});return xa(x,{generation_mode:"img2img",cfg_scale:o,cfg_rescale_multiplier:s,height:p,width:h,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:C?"cpu":"cuda",scheduler:a,clip_skip:m,strength:d,init_image:u.imageName},_e),(y||g)&&(ao(e,x,w),w=Cn),co(e,x,w),Hf(e,x,le,w),ro(e,x,le),io(e,x,le),lo(e,x,le),e.system.shouldUseNSFWChecker&&so(e,x),e.system.shouldUseWatermarker&&uo(e,x),oo(e,x),x},B7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,initialImage:u,shouldFitToWidthHeight:d,width:f,height:h,shouldUseCpuNoise:p,vaePrecision:m,seamlessXAxis:_,seamlessYAxis:v}=e.generation,{positiveStylePrompt:y,negativeStylePrompt:g,shouldUseSDXLRefiner:b,refinerStart:S,sdxlImg2ImgDenoisingStrength:w}=e.sdxl;if(!u)throw t.error("No initial image found in state"),new Error("No initial image found in state");if(!i)throw t.error("No model found in state"),new Error("No model found in state");const C=m==="fp32",x=!0;let k=pr;const A=p,{joinedPositiveStylePrompt:R,joinedNegativeStylePrompt:L}=xu(e),M={id:lb,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:i,is_intermediate:x},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:n,style:R,is_intermediate:x},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:r,style:L,is_intermediate:x},[me]:{type:"noise",id:me,use_cpu:A,seed:l,is_intermediate:x},[_e]:{type:"l2i",id:_e,fp32:C,is_intermediate:x},[se]:{type:"denoise_latents",id:se,cfg_scale:o,scheduler:a,steps:c,denoising_start:b?Math.min(S,1-w):1-w,denoising_end:b?S:1,is_intermediate:x},[Nt]:{type:"i2l",id:Nt,fp32:C,is_intermediate:x,use_cache:!1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:Nt,field:"latents"},destination:{node_id:se,field:"latents"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}}]};if(d&&(u.width!==f||u.height!==h)){const E={id:ls,type:"img_resize",image:{image_name:u.imageName},is_intermediate:!0,width:f,height:h};M.nodes[ls]=E,M.edges.push({source:{node_id:ls,field:"image"},destination:{node_id:Nt,field:"image"}}),M.edges.push({source:{node_id:ls,field:"width"},destination:{node_id:me,field:"width"}}),M.edges.push({source:{node_id:ls,field:"height"},destination:{node_id:me,field:"height"}})}else M.nodes[Nt].image={image_name:u.imageName},M.edges.push({source:{node_id:Nt,field:"width"},destination:{node_id:me,field:"width"}}),M.edges.push({source:{node_id:Nt,field:"height"},destination:{node_id:me,field:"height"}});return xa(M,{generation_mode:"sdxl_img2img",cfg_scale:o,cfg_rescale_multiplier:s,height:h,width:f,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:A?"cpu":"cuda",scheduler:a,strength:w,init_image:u.imageName,positive_style_prompt:y,negative_style_prompt:g},_e),(_||v)&&(ao(e,M,k),k=Cn),b&&(qf(e,M,se),(_||v)&&(k=Eo)),co(e,M,k),Wf(e,M,se,k),ro(e,M,se),io(e,M,se),lo(e,M,se),e.system.shouldUseNSFWChecker&&so(e,M),e.system.shouldUseWatermarker&&uo(e,M),oo(e,M),M},z7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,seed:l,steps:c,width:u,height:d,shouldUseCpuNoise:f,vaePrecision:h,seamlessXAxis:p,seamlessYAxis:m}=e.generation,{positiveStylePrompt:_,negativeStylePrompt:v,shouldUseSDXLRefiner:y,refinerStart:g}=e.sdxl,b=f;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const S=h==="fp32",w=!0,{joinedPositiveStylePrompt:C,joinedNegativeStylePrompt:x}=xu(e);let k=pr;const A={id:ZA,nodes:{[k]:{type:"sdxl_model_loader",id:k,model:i,is_intermediate:w},[ve]:{type:"sdxl_compel_prompt",id:ve,prompt:n,style:C,is_intermediate:w},[Se]:{type:"sdxl_compel_prompt",id:Se,prompt:r,style:x,is_intermediate:w},[me]:{type:"noise",id:me,seed:l,width:u,height:d,use_cpu:b,is_intermediate:w},[se]:{type:"denoise_latents",id:se,cfg_scale:o,scheduler:a,steps:c,denoising_start:0,denoising_end:y?g:1,is_intermediate:w},[_e]:{type:"l2i",id:_e,fp32:S,is_intermediate:w,use_cache:!1}},edges:[{source:{node_id:k,field:"unet"},destination:{node_id:se,field:"unet"}},{source:{node_id:k,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:ve,field:"clip2"}},{source:{node_id:k,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:k,field:"clip2"},destination:{node_id:Se,field:"clip2"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:se,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:se,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:se,field:"noise"}},{source:{node_id:se,field:"latents"},destination:{node_id:_e,field:"latents"}}]};return xa(A,{generation_mode:"sdxl_txt2img",cfg_scale:o,cfg_rescale_multiplier:s,height:d,width:u,positive_prompt:n,negative_prompt:r,model:i,seed:l,steps:c,rand_device:b?"cpu":"cuda",scheduler:a,positive_style_prompt:_,negative_style_prompt:v},_e),(p||m)&&(ao(e,A,k),k=Cn),y&&(qf(e,A,se),(p||m)&&(k=Eo)),co(e,A,k),Wf(e,A,se,k),ro(e,A,se),io(e,A,se),lo(e,A,se),e.system.shouldUseNSFWChecker&&so(e,A),e.system.shouldUseWatermarker&&uo(e,A),oo(e,A),A};function j7e(e){const t=["vae","control","ip_adapter","metadata","unet","positive_conditioning","negative_conditioning"],n=[];e.edges.forEach(r=>{r.destination.node_id===le&&t.includes(r.destination.field)&&n.push({source:{node_id:r.source.node_id,field:r.source.field},destination:{node_id:Ku,field:r.destination.field}})}),e.edges=e.edges.concat(n)}function V7e(e,t,n){const r=t/n;let i;e=="sdxl"?i=1024:i=512;const o=Math.floor(i*.5),s=i*i;let a,l;r>1?(l=Math.max(o,Math.sqrt(s/r)),a=l*r):(a=Math.max(o,Math.sqrt(s*r)),l=a/r),a=Math.min(t,a),l=Math.min(n,l);const c=Or(Math.floor(a),8),u=Or(Math.floor(l),8);return{newWidth:c,newHeight:u}}const U7e=(e,t)=>{var _;if(!e.generation.hrfEnabled||e.config.disabledSDFeatures.includes("hrf")||((_=e.generation.model)==null?void 0:_.model_type)==="onnx")return;const n=ue("txt2img"),{vae:r,hrfStrength:i,hrfEnabled:o,hrfMethod:s}=e.generation,a=!r,l=e.generation.width,c=e.generation.height,u=e.generation.model?e.generation.model.base_model:"sd1",{newWidth:d,newHeight:f}=V7e(u,l,c),h=t.nodes[le],p=t.nodes[me],m=t.nodes[_e];if(!h){n.error("originalDenoiseLatentsNode is undefined");return}if(!p){n.error("originalNoiseNode is undefined");return}if(!m){n.error("originalLatentsToImageNode is undefined");return}if(p&&(p.width=d,p.height=f),t.nodes[fc]={type:"l2i",id:fc,fp32:m==null?void 0:m.fp32,is_intermediate:!0},t.edges.push({source:{node_id:le,field:"latents"},destination:{node_id:fc,field:"latents"}},{source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:fc,field:"vae"}}),t.nodes[Da]={id:Da,type:"img_resize",is_intermediate:!0,width:l,height:c},s=="ESRGAN"){let v="RealESRGAN_x2plus.pth";l*c/(d*f)>2&&(v="RealESRGAN_x4plus.pth"),t.nodes[ep]={id:ep,type:"esrgan",model_name:v,is_intermediate:!0},t.edges.push({source:{node_id:fc,field:"image"},destination:{node_id:ep,field:"image"}},{source:{node_id:ep,field:"image"},destination:{node_id:Da,field:"image"}})}else t.edges.push({source:{node_id:fc,field:"image"},destination:{node_id:Da,field:"image"}});t.nodes[Rh]={type:"noise",id:Rh,seed:p==null?void 0:p.seed,use_cpu:p==null?void 0:p.use_cpu,is_intermediate:!0},t.edges.push({source:{node_id:Da,field:"height"},destination:{node_id:Rh,field:"height"}},{source:{node_id:Da,field:"width"},destination:{node_id:Rh,field:"width"}}),t.nodes[Mh]={type:"i2l",id:Mh,is_intermediate:!0},t.edges.push({source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:Mh,field:"vae"}},{source:{node_id:Da,field:"image"},destination:{node_id:Mh,field:"image"}}),t.nodes[Ku]={type:"denoise_latents",id:Ku,is_intermediate:!0,cfg_scale:h==null?void 0:h.cfg_scale,scheduler:h==null?void 0:h.scheduler,steps:h==null?void 0:h.steps,denoising_start:1-e.generation.hrfStrength,denoising_end:1},t.edges.push({source:{node_id:Mh,field:"latents"},destination:{node_id:Ku,field:"latents"}},{source:{node_id:Rh,field:"noise"},destination:{node_id:Ku,field:"noise"}}),j7e(t),t.nodes[Xa]={type:"l2i",id:Xa,fp32:m==null?void 0:m.fp32,is_intermediate:!0},t.edges.push({source:{node_id:a?Oo:ci,field:"vae"},destination:{node_id:Xa,field:"vae"}},{source:{node_id:Ku,field:"latents"},destination:{node_id:Xa,field:"latents"}}),Bo(t,{hrf_strength:i,hrf_enabled:o,hrf_method:s}),T7e(t,Xa)},G7e=e=>{const t=ue("nodes"),{positivePrompt:n,negativePrompt:r,model:i,cfgScale:o,cfgRescaleMultiplier:s,scheduler:a,steps:l,width:c,height:u,clipSkip:d,shouldUseCpuNoise:f,vaePrecision:h,seamlessXAxis:p,seamlessYAxis:m,seed:_}=e.generation,v=f;if(!i)throw t.error("No model found in state"),new Error("No model found in state");const y=h==="fp32",g=!0,b=i.model_type==="onnx";let S=b?R2:Oo;const w=b?"onnx_model_loader":"main_model_loader",C=b?{type:"t2l_onnx",id:le,is_intermediate:g,cfg_scale:o,scheduler:a,steps:l}:{type:"denoise_latents",id:le,is_intermediate:g,cfg_scale:o,cfg_rescale_multiplier:s,scheduler:a,steps:l,denoising_start:0,denoising_end:1},x={id:MH,nodes:{[S]:{type:w,id:S,is_intermediate:g,model:i},[at]:{type:"clip_skip",id:at,skipped_layers:d,is_intermediate:g},[ve]:{type:b?"prompt_onnx":"compel",id:ve,prompt:n,is_intermediate:g},[Se]:{type:b?"prompt_onnx":"compel",id:Se,prompt:r,is_intermediate:g},[me]:{type:"noise",id:me,seed:_,width:c,height:u,use_cpu:v,is_intermediate:g},[C.id]:C,[_e]:{type:b?"l2i_onnx":"l2i",id:_e,fp32:y,is_intermediate:g,use_cache:!1}},edges:[{source:{node_id:S,field:"unet"},destination:{node_id:le,field:"unet"}},{source:{node_id:S,field:"clip"},destination:{node_id:at,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:ve,field:"clip"}},{source:{node_id:at,field:"clip"},destination:{node_id:Se,field:"clip"}},{source:{node_id:ve,field:"conditioning"},destination:{node_id:le,field:"positive_conditioning"}},{source:{node_id:Se,field:"conditioning"},destination:{node_id:le,field:"negative_conditioning"}},{source:{node_id:me,field:"noise"},destination:{node_id:le,field:"noise"}},{source:{node_id:le,field:"latents"},destination:{node_id:_e,field:"latents"}}]};return xa(x,{generation_mode:"txt2img",cfg_scale:o,cfg_rescale_multiplier:s,height:u,width:c,positive_prompt:n,negative_prompt:r,model:i,seed:_,steps:l,rand_device:v?"cpu":"cuda",scheduler:a,clip_skip:d},_e),(p||m)&&(ao(e,x,S),S=Cn),co(e,x,S),Hf(e,x,le,S),ro(e,x,le),io(e,x,le),lo(e,x,le),e.generation.hrfEnabled&&!b&&U7e(e,x),e.system.shouldUseNSFWChecker&&so(e,x),e.system.shouldUseWatermarker&&uo(e,x),oo(e,x),x},H7e=()=>{fe({predicate:e=>YA.match(e)&&(e.payload.tabName==="txt2img"||e.payload.tabName==="img2img"),effect:async(e,{getState:t,dispatch:n})=>{const r=t(),i=r.generation.model,{prepend:o}=e.payload;let s;i&&i.base_model==="sdxl"?e.payload.tabName==="txt2img"?s=z7e(r):s=B7e(r):e.payload.tabName==="txt2img"?s=G7e(r):s=L7e(r);const a=OH(r,s,o);n(en.endpoints.enqueueBatch.initiate(a,{fixedCacheKey:"enqueueBatch"})).reset()}})},W7e=e=>{if(Che(e)&&e.value){const t=Ge(e.value),{r:n,g:r,b:i,a:o}=e.value,s=Math.max(0,Math.min(o*255,255));return Object.assign(t,{r:n,g:r,b:i,a:s}),t}return e.value},q7e=e=>{const{nodes:t,edges:n}=e,i=t.filter(Sn).reduce((l,c)=>{const{id:u,data:d}=c,{type:f,inputs:h,isIntermediate:p}=d,m=og(h,(v,y,g)=>{const b=W7e(y);return v[g]=b,v},{});m.use_cache=c.data.useCache;const _={type:f,id:u,...m,is_intermediate:p};return Object.assign(l,{[u]:_}),l},{}),s=n.filter(l=>l.type!=="collapsed").reduce((l,c)=>{const{source:u,target:d,sourceHandle:f,targetHandle:h}=c;return l.push({source:{node_id:u,field:f},destination:{node_id:d,field:h}}),l},[]);return s.forEach(l=>{const c=i[l.destination.node_id],u=l.destination.field;i[l.destination.node_id]=uu(c,u)}),{id:ul(),nodes:i,edges:s}},$H=T.object({x:T.number(),y:T.number()}).default({x:0,y:0}),cb=T.number().gt(0).nullish(),K7e=T.enum(["user","default"]),NH=T.object({id:T.string().trim().min(1),type:T.literal("invocation"),data:QB,width:cb,height:cb,position:$H}),X7e=T.object({id:T.string().trim().min(1),type:T.literal("notes"),data:YB,width:cb,height:cb,position:$H}),FH=T.union([NH,X7e]),Q7e=e=>NH.safeParse(e).success,DH=T.object({id:T.string().trim().min(1),source:T.string().trim().min(1),target:T.string().trim().min(1)}),Y7e=DH.extend({type:T.literal("default"),sourceHandle:T.string().trim().min(1),targetHandle:T.string().trim().min(1)}),Z7e=DH.extend({type:T.literal("collapsed")}),LH=T.union([Y7e,Z7e]),BH=T.object({id:T.string().min(1).optional(),name:T.string(),author:T.string(),description:T.string(),version:T.string(),contact:T.string(),tags:T.string(),notes:T.string(),nodes:T.array(FH),edges:T.array(LH),exposedFields:T.array(ahe),meta:T.object({category:K7e.default("user"),version:T.literal("2.0.0")})}),J7e=/[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*/u;function e$e(e){return e.length===1?e[0].toString():e.reduce((t,n)=>{if(typeof n=="number")return t+"["+n.toString()+"]";if(n.includes('"'))return t+'["'+t$e(n)+'"]';if(!J7e.test(n))return t+'["'+n+'"]';const r=t.length===0?"":".";return t+r+n},"")}function t$e(e){return e.replace(/"/g,'\\"')}function n$e(e){return e.length!==0}const r$e=99,i$e="; ",o$e=", or ",zH="Validation error",s$e=": ";class a$e extends Error{constructor(n,r=[]){super(n);Kl(this,"details");Kl(this,"name");this.details=r,this.name="ZodValidationError"}toString(){return this.message}}function jH(e){const{issue:t,issueSeparator:n,unionSeparator:r,includePath:i}=e;if(t.code==="invalid_union")return t.unionErrors.reduce((o,s)=>{const a=s.issues.map(l=>jH({issue:l,issueSeparator:n,unionSeparator:r,includePath:i})).join(n);return o.includes(a)||o.push(a),o},[]).join(r);if(i&&n$e(t.path)){if(t.path.length===1){const o=t.path[0];if(typeof o=="number")return`${t.message} at index ${o}`}return`${t.message} at "${e$e(t.path)}"`}return t.message}function l$e(e,t,n){return t!==null?e.length>0?[t,e].join(n):t:e.length>0?e:zH}function rE(e,t={}){const{maxIssuesInMessage:n=r$e,issueSeparator:r=i$e,unionSeparator:i=o$e,prefixSeparator:o=s$e,prefix:s=zH,includePath:a=!0}=t,l=e.errors.slice(0,n).map(u=>jH({issue:u,issueSeparator:r,unionSeparator:i,includePath:a})).join(r),c=l$e(l,s,o);return new a$e(c,e.errors)}const c$e=({nodes:e,edges:t,workflow:n})=>{const r=uu(Ge(n),"isTouched"),i=Ge(e),o=Ge(t),s={...r,nodes:[],edges:[]};return i.filter(a=>Sn(a)||Y5(a)).forEach(a=>{const l=FH.safeParse(a);if(!l.success){const{message:c}=rE(l.error,{prefix:Oe.t("nodes.unableToParseNode")});ue("nodes").warn({node:tt(a)},c);return}s.nodes.push(l.data)}),o.forEach(a=>{const l=LH.safeParse(a);if(!l.success){const{message:c}=rE(l.error,{prefix:Oe.t("nodes.unableToParseEdge")});ue("nodes").warn({edge:tt(a)},c);return}s.edges.push(l.data)}),s},u$e=()=>{fe({predicate:e=>YA.match(e)&&e.payload.tabName==="nodes",effect:async(e,{getState:t,dispatch:n})=>{const r=t(),{nodes:i,edges:o}=r.nodes,s=r.workflow,a=q7e(r.nodes),l=c$e({nodes:i,edges:o,workflow:s});delete l.id;const c={batch:{graph:a,workflow:l,runs:r.generation.iterations},prepend:e.payload.prepend};n(en.endpoints.enqueueBatch.initiate(c,{fixedCacheKey:"enqueueBatch"})).reset()}})},d$e=()=>{fe({matcher:ce.endpoints.addImageToBoard.matchFulfilled,effect:e=>{const t=ue("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Image added to board")}})},f$e=()=>{fe({matcher:ce.endpoints.addImageToBoard.matchRejected,effect:e=>{const t=ue("images"),{board_id:n,imageDTO:r}=e.meta.arg.originalArgs;t.debug({board_id:n,imageDTO:r},"Problem adding image to board")}})},ek=he("deleteImageModal/imageDeletionConfirmed"),NWe=hu(e=>e,e=>e.gallery.selection[e.gallery.selection.length-1]),VH=hu([e=>e],e=>{const{selectedBoardId:t,galleryView:n}=e.gallery;return{board_id:t,categories:n==="images"?Rn:Pr,offset:0,limit:xue,is_intermediate:!1}}),h$e=()=>{fe({actionCreator:ek,effect:async(e,{dispatch:t,getState:n,condition:r})=>{var f;const{imageDTOs:i,imagesUsage:o}=e.payload;if(i.length!==1||o.length!==1)return;const s=i[0],a=o[0];if(!s||!a)return;t(fT(!1));const l=n(),c=(f=l.gallery.selection[l.gallery.selection.length-1])==null?void 0:f.image_name;if(s&&(s==null?void 0:s.image_name)===c){const{image_name:h}=s,p=VH(l),{data:m}=ce.endpoints.listImages.select(p)(l),_=m?Ot.getSelectors().selectAll(m):[],v=_.findIndex(S=>S.image_name===h),y=_.filter(S=>S.image_name!==h),g=el(v,0,y.length-1),b=y[g];t(ps(b||null))}a.isCanvasImage&&t(dT()),i.forEach(h=>{var p;((p=n().generation.initialImage)==null?void 0:p.imageName)===h.image_name&&t(oT()),Fo(As(n().controlAdapters),m=>{(m.controlImage===h.image_name||hi(m)&&m.processedControlImage===h.image_name)&&(t(Nl({id:m.id,controlImage:null})),t(X4({id:m.id,processedControlImage:null})))}),n().nodes.nodes.forEach(m=>{Sn(m)&&Fo(m.data.inputs,_=>{var v;vT(_)&&((v=_.value)==null?void 0:v.image_name)===h.image_name&&t(Um({nodeId:m.data.id,fieldName:_.name,value:void 0}))})})});const{requestId:u}=t(ce.endpoints.deleteImage.initiate(s));await r(h=>ce.endpoints.deleteImage.matchFulfilled(h)&&h.meta.requestId===u,3e4)&&t(Lo.util.invalidateTags([{type:"Board",id:s.board_id??"none"}]))}})},p$e=()=>{fe({actionCreator:ek,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTOs:r,imagesUsage:i}=e.payload;if(!(r.length<=1||i.length<=1))try{await t(ce.endpoints.deleteImages.initiate({imageDTOs:r})).unwrap();const o=n(),s=VH(o),{data:a}=ce.endpoints.listImages.select(s)(o),l=a?Ot.getSelectors().selectAll(a)[0]:void 0;t(ps(l||null)),t(fT(!1)),i.some(c=>c.isCanvasImage)&&t(dT()),r.forEach(c=>{var u;((u=n().generation.initialImage)==null?void 0:u.imageName)===c.image_name&&t(oT()),Fo(As(n().controlAdapters),d=>{(d.controlImage===c.image_name||hi(d)&&d.processedControlImage===c.image_name)&&(t(Nl({id:d.id,controlImage:null})),t(X4({id:d.id,processedControlImage:null})))}),n().nodes.nodes.forEach(d=>{Sn(d)&&Fo(d.data.inputs,f=>{var h;vT(f)&&((h=f.value)==null?void 0:h.image_name)===c.image_name&&t(Um({nodeId:d.data.id,fieldName:f.name,value:void 0}))})})})}catch{}}})},g$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchPending,effect:()=>{}})},m$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchFulfilled,effect:e=>{ue("images").debug({imageDTO:e.meta.arg.originalArgs},"Image deleted")}})},y$e=()=>{fe({matcher:ce.endpoints.deleteImage.matchRejected,effect:e=>{ue("images").debug({imageDTO:e.meta.arg.originalArgs},"Unable to delete image")}})},UH=he("dnd/dndDropped"),v$e=()=>{fe({actionCreator:UH,effect:async(e,{dispatch:t})=>{const n=ue("dnd"),{activeData:r,overData:i}=e.payload;if(r.payloadType==="IMAGE_DTO"?n.debug({activeData:r,overData:i},"Image dropped"):r.payloadType==="IMAGE_DTOS"?n.debug({activeData:r,overData:i},`Images (${r.payload.imageDTOs.length}) dropped`):r.payloadType==="NODE_FIELD"?n.debug({activeData:tt(r),overData:tt(i)},"Node field dropped"):n.debug({activeData:r,overData:i},"Unknown payload dropped"),i.actionType==="ADD_FIELD_TO_LINEAR"&&r.payloadType==="NODE_FIELD"){const{nodeId:o,field:s}=r.payload;t(bbe({nodeId:o,fieldName:s.name}))}if(i.actionType==="SET_CURRENT_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(ps(r.payload.imageDTO));return}if(i.actionType==="SET_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(m_(r.payload.imageDTO));return}if(i.actionType==="SET_CONTROL_ADAPTER_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{id:o}=i.context;t(Nl({id:o,controlImage:r.payload.imageDTO.image_name})),t(Q4({id:o,isEnabled:!0}));return}if(i.actionType==="SET_CANVAS_INITIAL_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){t(wL(r.payload.imageDTO));return}if(i.actionType==="SET_NODES_IMAGE"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{fieldName:o,nodeId:s}=i.context;t(Um({nodeId:s,fieldName:o,value:r.payload.imageDTO}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload,{boardId:s}=i.context;t(ce.endpoints.addImageToBoard.initiate({imageDTO:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTO"&&r.payload.imageDTO){const{imageDTO:o}=r.payload;t(ce.endpoints.removeImageFromBoard.initiate({imageDTO:o}));return}if(i.actionType==="ADD_TO_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload,{boardId:s}=i.context;t(ce.endpoints.addImagesToBoard.initiate({imageDTOs:o,board_id:s}));return}if(i.actionType==="REMOVE_FROM_BOARD"&&r.payloadType==="IMAGE_DTOS"&&r.payload.imageDTOs){const{imageDTOs:o}=r.payload;t(ce.endpoints.removeImagesFromBoard.initiate({imageDTOs:o}));return}}})},b$e=()=>{fe({matcher:ce.endpoints.removeImageFromBoard.matchFulfilled,effect:e=>{const t=ue("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Image removed from board")}})},_$e=()=>{fe({matcher:ce.endpoints.removeImageFromBoard.matchRejected,effect:e=>{const t=ue("images"),n=e.meta.arg.originalArgs;t.debug({imageDTO:n},"Problem removing image from board")}})},S$e=()=>{fe({actionCreator:hue,effect:async(e,{dispatch:t,getState:n})=>{const r=e.payload,i=n(),{shouldConfirmOnDelete:o}=i.system,s=G8e(n()),a=s.some(l=>l.isCanvasImage)||s.some(l=>l.isInitialImage)||s.some(l=>l.isControlImage)||s.some(l=>l.isNodesImage);if(o||a){t(fT(!0));return}t(ek({imageDTOs:r,imagesUsage:s}))}})},x$e=()=>{fe({matcher:ce.endpoints.uploadImage.matchFulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=ue("images"),i=e.payload,o=n(),{autoAddBoardId:s}=o.gallery;r.debug({imageDTO:i},"Image uploaded");const{postUploadAction:a}=e.meta.arg.originalArgs;if(e.payload.is_intermediate&&!a)return;const l={title:J("toast.imageUploaded"),status:"success"};if((a==null?void 0:a.type)==="TOAST"){const{toastOptions:c}=a;if(!s||s==="none")t(Ve({...l,...c}));else{t(ce.endpoints.addImageToBoard.initiate({board_id:s,imageDTO:i}));const{data:u}=Qe.endpoints.listAllBoards.select()(o),d=u==null?void 0:u.find(h=>h.board_id===s),f=d?`${J("toast.addedToBoard")} ${d.board_name}`:`${J("toast.addedToBoard")} ${s}`;t(Ve({...l,description:f}))}return}if((a==null?void 0:a.type)==="SET_CANVAS_INITIAL_IMAGE"){t(wL(i)),t(Ve({...l,description:J("toast.setAsCanvasInitialImage")}));return}if((a==null?void 0:a.type)==="SET_CONTROL_ADAPTER_IMAGE"){const{id:c}=a;t(Q4({id:c,isEnabled:!0})),t(Nl({id:c,controlImage:i.image_name})),t(Ve({...l,description:J("toast.setControlImage")}));return}if((a==null?void 0:a.type)==="SET_INITIAL_IMAGE"){t(m_(i)),t(Ve({...l,description:J("toast.setInitialImage")}));return}if((a==null?void 0:a.type)==="SET_NODES_IMAGE"){const{nodeId:c,fieldName:u}=a;t(Um({nodeId:c,fieldName:u,value:i})),t(Ve({...l,description:`${J("toast.setNodeField")} ${u}`}));return}}})},w$e=()=>{fe({matcher:ce.endpoints.uploadImage.matchRejected,effect:(e,{dispatch:t})=>{const n=ue("images"),r={arg:{...uu(e.meta.arg.originalArgs,["file","postUploadAction"]),file:""}};n.error({...r},"Image upload failed"),t(Ve({title:J("toast.imageUploadFailed"),description:e.error.message,status:"error"}))}})},C$e=()=>{fe({matcher:ce.endpoints.starImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{updated_image_names:r}=e.payload,i=n(),{selection:o}=i.gallery,s=[];o.forEach(a=>{r.includes(a.image_name)?s.push({...a,starred:!0}):s.push(a)}),t(iB(s))}})},E$e=()=>{fe({matcher:ce.endpoints.unstarImages.matchFulfilled,effect:async(e,{dispatch:t,getState:n})=>{const{updated_image_names:r}=e.payload,i=n(),{selection:o}=i.gallery,s=[];o.forEach(a=>{r.includes(a.image_name)?s.push({...a,starred:!1}):s.push(a)}),t(iB(s))}})},T$e=he("generation/initialImageSelected"),A$e=he("generation/modelSelected"),k$e=()=>{fe({actionCreator:T$e,effect:(e,{dispatch:t})=>{if(!e.payload){t(Ve(pi({title:J("toast.imageNotLoadedDesc"),status:"error"})));return}t(m_(e.payload)),t(Ve(pi(J("toast.sentToImageToImage"))))}})},P$e=()=>{fe({actionCreator:A$e,effect:(e,{getState:t,dispatch:n})=>{var l,c;const r=ue("models"),i=t(),o=g_.safeParse(e.payload);if(!o.success){r.error({error:o.error.format()},"Failed to parse main model");return}const s=o.data,{base_model:a}=s;if(((l=i.generation.model)==null?void 0:l.base_model)!==a){let u=0;Fo(i.lora.loras,(f,h)=>{f.base_model!==a&&(n(sB(h)),u+=1)});const{vae:d}=i.generation;d&&d.base_model!==a&&(n(nL(null)),u+=1),As(i.controlAdapters).forEach(f=>{var h;((h=f.model)==null?void 0:h.base_model)!==a&&(n(Q4({id:f.id,isEnabled:!1})),u+=1)}),u>0&&n(Ve(pi({title:J("toast.baseModelChangedCleared",{count:u}),status:"warning"})))}((c=i.generation.model)==null?void 0:c.base_model)!==s.base_model&&i.ui.shouldAutoChangeDimensions&&(["sdxl","sdxl-refiner"].includes(s.base_model)?(n(oI(1024)),n(sI(1024)),n(CI({width:1024,height:1024}))):(n(oI(512)),n(sI(512)),n(CI({width:512,height:512})))),n(tl(s))}})},Wg=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),QR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),YR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),ZR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),JR=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),eO=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),tO=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),iE=jo({sortComparer:(e,t)=>e.model_name.localeCompare(t.model_name)}),I$e=({base_model:e,model_type:t,model_name:n})=>`${e}/${t}/${n}`,Oa=e=>{const t=[];return e.forEach(n=>{const r={...Ge(n),id:I$e(n)};t.push(r)}),t},Zo=Lo.injectEndpoints({endpoints:e=>({getOnnxModels:e.query({query:t=>{const n={model_type:"onnx",base_models:t};return`models/?${yp.stringify(n,{arrayFormat:"none"})}`},providesTags:t=>{const n=[{type:"OnnxModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"OnnxModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return QR.setAll(QR.getInitialState(),n)}}),getMainModels:e.query({query:t=>{const n={model_type:"main",base_models:t};return`models/?${yp.stringify(n,{arrayFormat:"none"})}`},providesTags:t=>{const n=[{type:"MainModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"MainModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return Wg.setAll(Wg.getInitialState(),n)}}),updateMainModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/main/${n}`,method:"PATCH",body:r}),invalidatesTags:["Model"]}),importMainModels:e.mutation({query:({body:t})=>({url:"models/import",method:"POST",body:t}),invalidatesTags:["Model"]}),addMainModels:e.mutation({query:({body:t})=>({url:"models/add",method:"POST",body:t}),invalidatesTags:["Model"]}),deleteMainModels:e.mutation({query:({base_model:t,model_name:n,model_type:r})=>({url:`models/${t}/${r}/${n}`,method:"DELETE"}),invalidatesTags:["Model"]}),convertMainModels:e.mutation({query:({base_model:t,model_name:n,convert_dest_directory:r})=>({url:`models/convert/${t}/main/${n}`,method:"PUT",params:{convert_dest_directory:r}}),invalidatesTags:["Model"]}),mergeMainModels:e.mutation({query:({base_model:t,body:n})=>({url:`models/merge/${t}`,method:"PUT",body:n}),invalidatesTags:["Model"]}),syncModels:e.mutation({query:()=>({url:"models/sync",method:"POST"}),invalidatesTags:["Model"]}),getLoRAModels:e.query({query:()=>({url:"models/",params:{model_type:"lora"}}),providesTags:t=>{const n=[{type:"LoRAModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"LoRAModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return YR.setAll(YR.getInitialState(),n)}}),updateLoRAModels:e.mutation({query:({base_model:t,model_name:n,body:r})=>({url:`models/${t}/lora/${n}`,method:"PATCH",body:r}),invalidatesTags:[{type:"LoRAModel",id:Ir}]}),deleteLoRAModels:e.mutation({query:({base_model:t,model_name:n})=>({url:`models/${t}/lora/${n}`,method:"DELETE"}),invalidatesTags:[{type:"LoRAModel",id:Ir}]}),getControlNetModels:e.query({query:()=>({url:"models/",params:{model_type:"controlnet"}}),providesTags:t=>{const n=[{type:"ControlNetModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"ControlNetModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return ZR.setAll(ZR.getInitialState(),n)}}),getIPAdapterModels:e.query({query:()=>({url:"models/",params:{model_type:"ip_adapter"}}),providesTags:t=>{const n=[{type:"IPAdapterModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"IPAdapterModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return JR.setAll(JR.getInitialState(),n)}}),getT2IAdapterModels:e.query({query:()=>({url:"models/",params:{model_type:"t2i_adapter"}}),providesTags:t=>{const n=[{type:"T2IAdapterModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"T2IAdapterModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return eO.setAll(eO.getInitialState(),n)}}),getVaeModels:e.query({query:()=>({url:"models/",params:{model_type:"vae"}}),providesTags:t=>{const n=[{type:"VaeModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"VaeModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return iE.setAll(iE.getInitialState(),n)}}),getTextualInversionModels:e.query({query:()=>({url:"models/",params:{model_type:"embedding"}}),providesTags:t=>{const n=[{type:"TextualInversionModel",id:Ir},"Model"];return t&&n.push(...t.ids.map(r=>({type:"TextualInversionModel",id:r}))),n},transformResponse:t=>{const n=Oa(t.models);return tO.setAll(tO.getInitialState(),n)}}),getModelsInFolder:e.query({query:t=>({url:`/models/search?${yp.stringify(t,{})}`})}),getCheckpointConfigs:e.query({query:()=>({url:"/models/ckpt_confs"})})})}),{useGetMainModelsQuery:FWe,useGetOnnxModelsQuery:DWe,useGetControlNetModelsQuery:LWe,useGetIPAdapterModelsQuery:BWe,useGetT2IAdapterModelsQuery:zWe,useGetLoRAModelsQuery:jWe,useGetTextualInversionModelsQuery:VWe,useGetVaeModelsQuery:UWe,useUpdateMainModelsMutation:GWe,useDeleteMainModelsMutation:HWe,useImportMainModelsMutation:WWe,useAddMainModelsMutation:qWe,useConvertMainModelsMutation:KWe,useMergeMainModelsMutation:XWe,useDeleteLoRAModelsMutation:QWe,useUpdateLoRAModelsMutation:YWe,useSyncModelsMutation:ZWe,useGetModelsInFolderQuery:JWe,useGetCheckpointConfigsQuery:eqe}=Zo,M$e=()=>{fe({predicate:e=>Zo.endpoints.getMainModels.matchFulfilled(e)&&!e.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`Main models loaded (${e.payload.ids.length})`);const i=t().generation.model,o=Wg.getSelectors().selectAll(e.payload);if(o.length===0){n(tl(null));return}if(i?o.some(l=>l.model_name===i.model_name&&l.base_model===i.base_model&&l.model_type===i.model_type):!1)return;const a=g_.safeParse(o[0]);if(!a.success){r.error({error:a.error.format()},"Failed to parse main model");return}n(tl(a.data))}}),fe({predicate:e=>Zo.endpoints.getMainModels.matchFulfilled(e)&&e.meta.arg.originalArgs.includes("sdxl-refiner"),effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`SDXL Refiner models loaded (${e.payload.ids.length})`);const i=t().sdxl.refinerModel,o=Wg.getSelectors().selectAll(e.payload);if(o.length===0){n(V8(null)),n(xbe(!1));return}if(i?o.some(l=>l.model_name===i.model_name&&l.base_model===i.base_model&&l.model_type===i.model_type):!1)return;const a=ZD.safeParse(o[0]);if(!a.success){r.error({error:a.error.format()},"Failed to parse SDXL Refiner Model");return}n(V8(a.data))}}),fe({matcher:Zo.endpoints.getVaeModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{const r=ue("models");r.info({models:e.payload.entities},`VAEs loaded (${e.payload.ids.length})`);const i=t().generation.vae;if(i===null||Gu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(i==null?void 0:i.model_name)&&(l==null?void 0:l.base_model)===(i==null?void 0:i.base_model)))return;const s=iE.getSelectors().selectAll(e.payload)[0];if(!s){n(tl(null));return}const a=JD.safeParse(s);if(!a.success){r.error({error:a.error.format()},"Failed to parse VAE model");return}n(nL(a.data))}}),fe({matcher:Zo.endpoints.getLoRAModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`LoRAs loaded (${e.payload.ids.length})`);const i=t().lora.loras;Fo(i,(o,s)=>{Gu(e.payload.entities,l=>(l==null?void 0:l.model_name)===(o==null?void 0:o.model_name)&&(l==null?void 0:l.base_model)===(o==null?void 0:o.base_model))||n(sB(s))})}}),fe({matcher:Zo.endpoints.getControlNetModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`),nae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getT2IAdapterModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`ControlNet models loaded (${e.payload.ids.length})`),sae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getIPAdapterModels.matchFulfilled,effect:async(e,{getState:t,dispatch:n})=>{ue("models").info({models:e.payload.entities},`IP Adapter models loaded (${e.payload.ids.length})`),iae(t().controlAdapters).forEach(i=>{Gu(e.payload.entities,s=>{var a,l;return(s==null?void 0:s.model_name)===((a=i==null?void 0:i.model)==null?void 0:a.model_name)&&(s==null?void 0:s.base_model)===((l=i==null?void 0:i.model)==null?void 0:l.base_model)})||n(Wx({id:i.id}))})}}),fe({matcher:Zo.endpoints.getTextualInversionModels.matchFulfilled,effect:async e=>{ue("models").info({models:e.payload.entities},`Embeddings loaded (${e.payload.ids.length})`)}})},R$e=Lo.injectEndpoints({endpoints:e=>({dynamicPrompts:e.query({query:t=>({url:"utilities/dynamicprompts",body:t,method:"POST"}),keepUnusedDataFor:86400})})}),O$e=br(Kle,vue,mue,yue,F4),$$e=()=>{fe({matcher:O$e,effect:async(e,{dispatch:t,getState:n,cancelActiveListeners:r,delay:i})=>{r(),await i(1e3);const o=n();if(o.config.disabledFeatures.includes("dynamicPrompting"))return;const{positivePrompt:s}=o.generation,{maxPrompts:a}=o.dynamicPrompts;t(Yx(!0));try{const l=t(R$e.endpoints.dynamicPrompts.initiate({prompt:s,max_prompts:a})),c=await l.unwrap();l.unsubscribe(),t(bue(c.prompts)),t(_ue(c.error)),t(EI(!1)),t(Yx(!1))}catch{t(EI(!0)),t(Yx(!1))}}})};class oE extends Error{constructor(t){super(t),this.name=this.constructor.name}}class sE extends Error{constructor(t){super(t),this.name=this.constructor.name}}class GH extends Error{constructor(t){super(t),this.name=this.constructor.name}}class ui extends Error{constructor(t){super(t),this.name=this.constructor.name}}const _d=e=>!!(e&&!("$ref"in e)),nO=e=>!!(e&&!("$ref"in e)&&e.type==="array"),Ry=e=>!!(e&&!("$ref"in e)&&e.type!=="array"),nc=e=>!!(e&&"$ref"in e),N$e=e=>"class"in e&&e.class==="invocation",F$e=e=>"class"in e&&e.class==="output",aE=e=>!("$ref"in e),D$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"IntegerField",isCollection:n,isCollectionOrScalar:r},default:e.default??0};return e.multipleOf!==void 0&&(i.multipleOf=e.multipleOf),e.maximum!==void 0&&(i.maximum=e.maximum),e.exclusiveMaximum!==void 0&&p1(e.exclusiveMaximum)&&(i.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(i.minimum=e.minimum),e.exclusiveMinimum!==void 0&&p1(e.exclusiveMinimum)&&(i.exclusiveMinimum=e.exclusiveMinimum),i},L$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"FloatField",isCollection:n,isCollectionOrScalar:r},default:e.default??0};return e.multipleOf!==void 0&&(i.multipleOf=e.multipleOf),e.maximum!==void 0&&(i.maximum=e.maximum),e.exclusiveMaximum!==void 0&&p1(e.exclusiveMaximum)&&(i.exclusiveMaximum=e.exclusiveMaximum),e.minimum!==void 0&&(i.minimum=e.minimum),e.exclusiveMinimum!==void 0&&p1(e.exclusiveMinimum)&&(i.exclusiveMinimum=e.exclusiveMinimum),i},B$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{const i={...t,type:{name:"StringField",isCollection:n,isCollectionOrScalar:r},default:e.default??""};return e.minLength!==void 0&&(i.minLength=e.minLength),e.maxLength!==void 0&&(i.maxLength=e.maxLength),i},z$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"BooleanField",isCollection:n,isCollectionOrScalar:r},default:e.default??!1}),j$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"MainModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),V$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SDXLMainModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),U$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SDXLRefinerModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),G$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"VAEModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),H$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"LoRAModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),W$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ControlNetModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),q$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"IPAdapterModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),K$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"T2IAdapterModelField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),X$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"BoardField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),Q$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ImageField",isCollection:n,isCollectionOrScalar:r},default:e.default??void 0}),Y$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>{let i=[];if(e.anyOf){const s=e.anyOf.filter(l=>!(_d(l)&&l.type==="null")),a=s[0];s.length!==1||!_d(a)?i=[]:i=a.enum??[]}else i=e.enum??[];if(i.length===0)throw new ui(J("nodes.unableToExtractEnumOptions"));return{...t,type:{name:"EnumField",isCollection:n,isCollectionOrScalar:r},options:i,ui_choice_labels:e.ui_choice_labels,default:e.default??i[0]}},Z$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"ColorField",isCollection:n,isCollectionOrScalar:r},default:e.default??{r:127,g:127,b:127,a:255}}),J$e=({schemaObject:e,baseField:t,isCollection:n,isCollectionOrScalar:r})=>({...t,type:{name:"SchedulerField",isCollection:n,isCollectionOrScalar:r},default:e.default??"euler"}),eNe={BoardField:X$e,BooleanField:z$e,ColorField:Z$e,ControlNetModelField:W$e,EnumField:Y$e,FloatField:L$e,ImageField:Q$e,IntegerField:D$e,IPAdapterModelField:q$e,LoRAModelField:H$e,MainModelField:j$e,SchedulerField:J$e,SDXLMainModelField:V$e,SDXLRefinerModelField:U$e,StringField:B$e,T2IAdapterModelField:K$e,VAEModelField:G$e},tNe=(e,t,n)=>{const{input:r,ui_hidden:i,ui_component:o,ui_type:s,ui_order:a,ui_choice_labels:l,orig_required:c}=e,u={name:t,title:e.title??(t?N4(t):""),required:c,description:e.description??"",fieldKind:"input",input:r,ui_hidden:i,ui_component:o,ui_type:s,ui_order:a,ui_choice_labels:l};if(Whe(n)){const f=eNe[n.name];return f({schemaObject:e,baseField:u,isCollection:n.isCollection,isCollectionOrScalar:n.isCollectionOrScalar})}return{...u,input:"connection",type:n,default:void 0}},nNe=(e,t,n)=>{const{title:r,description:i,ui_hidden:o,ui_type:s,ui_order:a}=e;return{fieldKind:"output",name:t,title:r??(t?N4(t):""),description:i??"",type:n,ui_hidden:o,ui_type:s,ui_order:a}},$a=e=>e.$ref.split("/").slice(-1)[0],uC={integer:"IntegerField",number:"FloatField",string:"StringField",boolean:"BooleanField"},rNe=e=>e==="CollectionField",lE=e=>{if(aE(e)){const{ui_type:t}=e;if(t)return{name:t,isCollection:rNe(t),isCollectionOrScalar:!1}}if(_d(e)){if(e.type){if(e.enum)return{name:"EnumField",isCollection:!1,isCollectionOrScalar:!1};if(e.type){if(e.type==="array"){if(_d(e.items)){const n=e.items.type;if(!n||bn(n))throw new ui(J("nodes.unsupportedArrayItemType",{type:n}));const r=uC[n];if(!r)throw new ui(J("nodes.unsupportedArrayItemType",{type:n}));return{name:r,isCollection:!0,isCollectionOrScalar:!1}}const t=$a(e.items);if(!t)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:t,isCollection:!0,isCollectionOrScalar:!1}}else if(!bn(e.type)){const t=uC[e.type];if(!t)throw new ui(J("nodes.unsupportedArrayItemType",{type:e.type}));return{name:t,isCollection:!1,isCollectionOrScalar:!1}}}}else if(e.allOf){const t=e.allOf;if(t&&t[0]&&nc(t[0])){const n=$a(t[0]);if(!n)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:n,isCollection:!1,isCollectionOrScalar:!1}}}else if(e.anyOf){const t=e.anyOf.filter(i=>!(_d(i)&&i.type==="null"));if(t.length===1){if(nc(t[0])){const i=$a(t[0]);if(!i)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:i,isCollection:!1,isCollectionOrScalar:!1}}else if(_d(t[0]))return lE(t[0])}if(t.length!==2)throw new ui(J("nodes.unsupportedAnyOfLength",{count:t.length}));let n,r;if(nO(t[0])){const i=t[0].items,o=t[1];nc(i)&&nc(o)?(n=$a(i),r=$a(o)):Ry(i)&&Ry(o)&&(n=i.type,r=o.type)}else if(nO(t[1])){const i=t[0],o=t[1].items;nc(i)&&nc(o)?(n=$a(i),r=$a(o)):Ry(i)&&Ry(o)&&(n=i.type,r=o.type)}if(n&&n===r)return{name:uC[n]??n,isCollection:!1,isCollectionOrScalar:!0};throw new ui(J("nodes.unsupportedMismatchedUnion",{firstType:n,secondType:r}))}}else if(nc(e)){const t=$a(e);if(!t)throw new ui(J("nodes.unableToExtractSchemaNameFromRef"));return{name:t,isCollection:!1,isCollectionOrScalar:!1}}throw new ui(J("nodes.unableToParseFieldType"))},iNe=["id","type","use_cache"],oNe=["type"],sNe=["IsIntermediate"],aNe=["graph","linear_ui_output"],lNe=(e,t)=>!!(iNe.includes(t)||e==="collect"&&t==="collection"||e==="iterate"&&t==="index"),cNe=e=>!!sNe.includes(e),uNe=(e,t)=>!oNe.includes(t),dNe=e=>!aNe.includes(e.properties.type.default),fNe=(e,t=void 0,n=void 0)=>{var o;return Object.values(((o=e.components)==null?void 0:o.schemas)??{}).filter(N$e).filter(dNe).filter(s=>t?t.includes(s.properties.type.default):!0).filter(s=>n?!n.includes(s.properties.type.default):!0).reduce((s,a)=>{var w,C;const l=a.properties.type.default,c=a.title.replace("Invocation",""),u=a.tags??[],d=a.description??"",f=a.version,h=a.node_pack,p=a.classification,m=og(a.properties,(x,k,A)=>{if(lNe(l,A))return ue("nodes").trace({node:l,field:A,schema:tt(k)},"Skipped reserved input field"),x;if(!aE(k))return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Unhandled input property"),x;try{const R=lE(k);if(cNe(R.name))return x;const L=tNe(k,A,R);x[A]=L}catch(R){R instanceof ui&&ue("nodes").warn({node:l,field:A,schema:tt(k)},J("nodes.inputFieldTypeParseError",{node:l,field:A,message:R.message}))}return x},{}),_=a.output.$ref.split("/").pop();if(!_)return ue("nodes").warn({outputRefObject:tt(a.output)},"No output schema name found in ref object"),s;const v=(C=(w=e.components)==null?void 0:w.schemas)==null?void 0:C[_];if(!v)return ue("nodes").warn({outputSchemaName:_},"Output schema not found"),s;if(!F$e(v))return ue("nodes").error({outputSchema:tt(v)},"Invalid output schema"),s;const y=v.properties.type.default,g=og(v.properties,(x,k,A)=>{if(!uNe(l,A))return ue("nodes").trace({node:l,field:A,schema:tt(k)},"Skipped reserved output field"),x;if(!aE(k))return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Unhandled output property"),x;try{const R=lE(k);if(!R)return ue("nodes").warn({node:l,field:A,schema:tt(k)},"Missing output field type"),x;const L=nNe(k,A,R);x[A]=L}catch(R){R instanceof ui&&ue("nodes").warn({node:l,field:A,schema:tt(k)},J("nodes.outputFieldTypeParseError",{node:l,field:A,message:R.message}))}return x},{}),b=a.properties.use_cache.default,S={title:c,type:l,version:f,tags:u,description:d,outputType:y,inputs:m,outputs:g,useCache:b,nodePack:h,classification:p};return Object.assign(s,{[l]:S}),s},{})},hNe=()=>{fe({actionCreator:kg.fulfilled,effect:(e,{dispatch:t,getState:n})=>{const r=ue("system"),i=e.payload;r.debug({schemaJSON:i},"Received OpenAPI schema");const{nodesAllowlist:o,nodesDenylist:s}=n().config,a=fNe(i,o,s);r.debug({nodeTemplates:tt(a)},`Built ${c_(a)} node templates`),t($j(a))}}),fe({actionCreator:kg.rejected,effect:e=>{ue("system").error({error:tt(e.error)},"Problem retrieving OpenAPI Schema")}})},pNe=()=>{fe({actionCreator:ZF,effect:(e,{dispatch:t,getState:n})=>{ue("socketio").debug("Connected");const{nodes:i,config:o,system:s}=n(),{disabledTabs:a}=o;!c_(i.nodeTemplates)&&!a.includes("nodes")&&t(kg()),s.isInitialized?t(Lo.util.resetApiState()):t(ese(!0)),t(F4(e.payload))}})},gNe=()=>{fe({actionCreator:JF,effect:(e,{dispatch:t})=>{ue("socketio").debug("Disconnected"),t(eD(e.payload))}})},mNe=()=>{fe({actionCreator:oD,effect:(e,{dispatch:t})=>{ue("socketio").trace(e.payload,"Generator progress"),t(z4(e.payload))}})},yNe=()=>{fe({actionCreator:rD,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Session complete"),t(iD(e.payload))}})},vNe=["load_image","image"],bNe=()=>{fe({actionCreator:L4,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("socketio"),{data:i}=e.payload;r.debug({data:tt(i)},`Invocation complete (${e.payload.data.node.type})`);const{result:o,node:s,queue_batch_id:a,source_node_id:l}=i;if(QD(o)&&!vNe.includes(s.type)&&!E7e.includes(l)){const{image_name:c}=o.image,{canvas:u,gallery:d}=n(),f=t(ce.endpoints.getImageDTO.initiate(c,{forceRefetch:!0})),h=await f.unwrap();if(f.unsubscribe(),u.batchIds.includes(a)&&[zc].includes(i.source_node_id)&&t(nue(h)),!h.is_intermediate){t(ce.util.updateQueryData("listImages",{board_id:h.board_id??"none",categories:Rn},m=>{Ot.addOne(m,h)})),t(Qe.util.updateQueryData("getBoardImagesTotal",h.board_id??"none",m=>{m.total+=1})),t(ce.util.invalidateTags([{type:"Board",id:h.board_id??"none"}]));const{shouldAutoSwitch:p}=d;p&&(d.galleryView!=="images"&&t(Q5("images")),h.board_id&&h.board_id!==d.selectedBoardId&&t(vp({boardId:h.board_id,selectedImageName:h.image_name})),!h.board_id&&d.selectedBoardId!=="none"&&t(vp({boardId:"none",selectedImageName:h.image_name})),t(ps(h)))}}t(B4(e.payload))}})},_Ne=()=>{fe({actionCreator:nD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Invocation error (${e.payload.data.node.type})`),t(u_(e.payload))}})},SNe=()=>{fe({actionCreator:fD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Invocation retrieval error (${e.payload.data.graph_execution_state_id})`),t(hD(e.payload))}})},xNe=()=>{fe({actionCreator:tD,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,`Invocation started (${e.payload.data.node.type})`),t(D4(e.payload))}})},wNe=()=>{fe({actionCreator:sD,effect:(e,{dispatch:t})=>{const n=ue("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load started: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(aD(e.payload))}}),fe({actionCreator:lD,effect:(e,{dispatch:t})=>{const n=ue("socketio"),{base_model:r,model_name:i,model_type:o,submodel:s}=e.payload.data;let a=`Model load complete: ${r}/${o}/${i}`;s&&(a=a.concat(`/${s}`)),n.debug(e.payload,a),t(cD(e.payload))}})},CNe=()=>{fe({actionCreator:pD,effect:async(e,{dispatch:t})=>{const n=ue("socketio"),{queue_item:r,batch_status:i,queue_status:o}=e.payload.data;n.debug(e.payload,`Queue item ${r.item_id} status updated: ${r.status}`),t(en.util.updateQueryData("listQueueItems",void 0,s=>{pc.updateOne(s,{id:String(r.item_id),changes:r})})),t(en.util.updateQueryData("getQueueStatus",void 0,s=>{s&&Object.assign(s.queue,o)})),t(en.util.updateQueryData("getBatchStatus",{batch_id:i.batch_id},()=>i)),t(en.util.updateQueryData("getQueueItem",r.item_id,s=>{s&&Object.assign(s,r)})),t(en.util.invalidateTags(["CurrentSessionQueueItem","NextSessionQueueItem","InvocationCacheStatus"])),t(d_(e.payload))}})},ENe=()=>{fe({actionCreator:uD,effect:(e,{dispatch:t})=>{ue("socketio").error(e.payload,`Session retrieval error (${e.payload.data.graph_execution_state_id})`),t(dD(e.payload))}})},TNe=()=>{fe({actionCreator:qoe,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Subscribed"),t(Koe(e.payload))}})},ANe=()=>{fe({actionCreator:Xoe,effect:(e,{dispatch:t})=>{ue("socketio").debug(e.payload,"Unsubscribed"),t(Qoe(e.payload))}})},kNe=()=>{fe({actionCreator:Z8e,effect:async(e,{dispatch:t,getState:n})=>{const{imageDTO:r}=e.payload;try{const i=await t(ce.endpoints.changeImageIsIntermediate.initiate({imageDTO:r,is_intermediate:!1})).unwrap(),{autoAddBoardId:o}=n().gallery;o&&o!=="none"&&await t(ce.endpoints.addImageToBoard.initiate({imageDTO:i,board_id:o})),t(Ve({title:J("toast.imageSaved"),status:"success"}))}catch(i){t(Ve({title:J("toast.imageSavingFailed"),description:i==null?void 0:i.message,status:"error"}))}}})},tqe=["sd-1","sd-2","sdxl","sdxl-refiner"],PNe=["sd-1","sd-2","sdxl"],nqe=["sdxl"],rqe=["sd-1","sd-2"],iqe=["sdxl-refiner"],INe=()=>{fe({actionCreator:Gj,effect:async(e,{getState:t,dispatch:n})=>{var i;if(e.payload==="unifiedCanvas"){const o=(i=t().generation.model)==null?void 0:i.base_model;if(o&&["sd-1","sd-2","sdxl"].includes(o))return;try{const s=n(Zo.endpoints.getMainModels.initiate(PNe)),a=await s.unwrap();if(s.unsubscribe(),!a.ids.length){n(tl(null));return}const c=Wg.getSelectors().selectAll(a).filter(h=>["sd-1","sd-2","sxdl"].includes(h.base_model))[0];if(!c){n(tl(null));return}const{base_model:u,model_name:d,model_type:f}=c;n(tl({base_model:u,model_name:d,model_type:f}))}catch{n(tl(null))}}}})},MNe=({image_name:e,esrganModelName:t,autoAddBoardId:n})=>{const r={id:tp,type:"esrgan",image:{image_name:e},model_name:t,is_intermediate:!0},i={id:zc,type:"linear_ui_output",use_cache:!1,is_intermediate:!1,board:n==="none"?void 0:{board_id:n}},o={id:"adhoc-esrgan-graph",nodes:{[tp]:r,[zc]:i},edges:[{source:{node_id:tp,field:"image"},destination:{node_id:zc,field:"image"}}]};return xa(o,{},tp),Bo(o,{esrgan_model:t}),o};function RNe(){if(console&&console.warn){for(var e=arguments.length,t=new Array(e),n=0;n()=>{if(e.isInitialized)t();else{const n=()=>{setTimeout(()=>{e.off("initialized",n)},0),t()};e.on("initialized",n)}};function iO(e,t,n){e.loadNamespaces(t,HH(e,n))}function oO(e,t,n,r){typeof n=="string"&&(n=[n]),n.forEach(i=>{e.options.ns.indexOf(i)<0&&e.options.ns.push(i)}),e.loadLanguages(t,HH(e,r))}function ONe(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const r=t.languages[0],i=t.options?t.options.fallbackLng:!1,o=t.languages[t.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const s=(a,l)=>{const c=t.services.backendConnector.state[`${a}|${l}`];return c===-1||c===2};return n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!s(t.isLanguageChangingTo,e)?!1:!!(t.hasResourceBundle(r,e)||!t.services.backendConnector.backend||t.options.resources&&!t.options.partialBundledLanguages||s(r,e)&&(!i||s(o,e)))}function $Ne(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return!t.languages||!t.languages.length?(cE("i18n.languages were undefined or empty",t.languages),!0):t.options.ignoreJSONStructure!==void 0?t.hasLoadedNamespace(e,{lng:n.lng,precheck:(i,o)=>{if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&i.services.backendConnector.backend&&i.isLanguageChangingTo&&!o(i.isLanguageChangingTo,e))return!1}}):ONe(e,t,n)}const NNe=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,FNe={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},DNe=e=>FNe[e],LNe=e=>e.replace(NNe,DNe);let uE={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:LNe};function BNe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};uE={...uE,...e}}function zNe(){return uE}let WH;function jNe(e){WH=e}function VNe(){return WH}const UNe={type:"3rdParty",init(e){BNe(e.options.react),jNe(e)}},GNe=I.createContext();class HNe{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(n=>{this.usedNamespaces[n]||(this.usedNamespaces[n]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}const WNe=(e,t)=>{const n=I.useRef();return I.useEffect(()=>{n.current=t?n.current:e},[e,t]),n.current};function qH(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{i18n:n}=t,{i18n:r,defaultNS:i}=I.useContext(GNe)||{},o=n||r||VNe();if(o&&!o.reportNamespaces&&(o.reportNamespaces=new HNe),!o){cE("You will need to pass in an i18next instance by using initReactI18next");const g=(S,w)=>typeof w=="string"?w:w&&typeof w=="object"&&typeof w.defaultValue=="string"?w.defaultValue:Array.isArray(S)?S[S.length-1]:S,b=[g,{},!1];return b.t=g,b.i18n={},b.ready=!1,b}o.options.react&&o.options.react.wait!==void 0&&cE("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");const s={...zNe(),...o.options.react,...t},{useSuspense:a,keyPrefix:l}=s;let c=e||i||o.options&&o.options.defaultNS;c=typeof c=="string"?[c]:c||["translation"],o.reportNamespaces.addUsedNamespaces&&o.reportNamespaces.addUsedNamespaces(c);const u=(o.isInitialized||o.initializedStoreOnce)&&c.every(g=>$Ne(g,o,s));function d(){return o.getFixedT(t.lng||null,s.nsMode==="fallback"?c:c[0],l)}const[f,h]=I.useState(d);let p=c.join();t.lng&&(p=`${t.lng}${p}`);const m=WNe(p),_=I.useRef(!0);I.useEffect(()=>{const{bindI18n:g,bindI18nStore:b}=s;_.current=!0,!u&&!a&&(t.lng?oO(o,t.lng,c,()=>{_.current&&h(d)}):iO(o,c,()=>{_.current&&h(d)})),u&&m&&m!==p&&_.current&&h(d);function S(){_.current&&h(d)}return g&&o&&o.on(g,S),b&&o&&o.store.on(b,S),()=>{_.current=!1,g&&o&&g.split(" ").forEach(w=>o.off(w,S)),b&&o&&b.split(" ").forEach(w=>o.store.off(w,S))}},[o,p]);const v=I.useRef(!0);I.useEffect(()=>{_.current&&!v.current&&h(d),v.current=!1},[o,l]);const y=[f,o,u];if(y.t=f,y.i18n=o,y.ready=u,u||!u&&!a)return y;throw new Promise(g=>{t.lng?oO(o,t.lng,c,()=>g()):iO(o,c,()=>g())})}const qNe=(e,t)=>{if(!e||!t)return;const{width:n,height:r}=e,i=r*4*n*4,o=r*2*n*2;return{x4:i,x2:o}},KNe=(e,t)=>{if(!e||!t)return{x4:!0,x2:!0};const n={x4:!1,x2:!1};return e.x4<=t&&(n.x4=!0),e.x2<=t&&(n.x2=!0),n},XNe=(e,t)=>{if(!(!e||!t)&&!(e.x4&&e.x2)){if(!e.x2&&!e.x4)return"parameters.isAllowedToUpscale.tooLarge";if(!e.x4&&e.x2&&t===4)return"parameters.isAllowedToUpscale.useX2Model"}},KH=e=>hu(tW,({postprocessing:t,config:n})=>{const{esrganModelName:r}=t,{maxUpscalePixels:i}=n,o=qNe(e,i),s=KNe(o,i),a=r.includes("x2")?2:4,l=XNe(s,a);return{isAllowedToUpscale:a===2?s.x2:s.x4,detailTKey:l}}),oqe=e=>{const{t}=qH(),n=I.useMemo(()=>KH(e),[e]),{isAllowedToUpscale:r,detailTKey:i}=nN(n);return{isAllowedToUpscale:r,detail:i?t(i):void 0}},QNe=he("upscale/upscaleRequested"),YNe=()=>{fe({actionCreator:QNe,effect:async(e,{dispatch:t,getState:n})=>{const r=ue("session"),{imageDTO:i}=e.payload,{image_name:o}=i,s=n(),{isAllowedToUpscale:a,detailTKey:l}=KH(i)(s);if(!a){r.error({imageDTO:i},J(l??"parameters.isAllowedToUpscale.tooLarge")),t(Ve({title:J(l??"parameters.isAllowedToUpscale.tooLarge"),status:"error"}));return}const{esrganModelName:c}=s.postprocessing,{autoAddBoardId:u}=s.gallery,d={prepend:!0,batch:{graph:MNe({image_name:o,esrganModelName:c,autoAddBoardId:u}),runs:1}};try{const f=t(en.endpoints.enqueueBatch.initiate(d,{fixedCacheKey:"enqueueBatch"})),h=await f.unwrap();f.reset(),r.debug({enqueueResult:tt(h)},J("queue.graphQueued"))}catch(f){if(r.error({enqueueBatchArg:tt(d)},J("queue.graphFailedToQueue")),f instanceof Object&&"status"in f&&f.status===403)return;t(Ve({title:J("queue.graphFailedToQueue"),status:"error"}))}}})},ZNe=to(null),JNe=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,ub=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");const t=e.match(JNe);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},sO=e=>e==="*"||e==="x"||e==="X",aO=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},eFe=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],tFe=(e,t)=>{if(sO(e)||sO(t))return 0;const[n,r]=eFe(aO(e),aO(t));return n>r?1:n{for(let n=0;n{const n=ub(e),r=ub(t),i=n.pop(),o=r.pop(),s=Sd(n,r);return s!==0?s:i&&o?Sd(i.split("."),o.split(".")):i||o?i?-1:1:0},rFe=(e,t,n)=>{iFe(n);const r=nFe(e,t);return XH[n].includes(r)},XH={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},lO=Object.keys(XH),iFe=e=>{if(typeof e!="string")throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`);if(lO.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${lO.join("|")}`)},wv=(e,t)=>{if(t=t.replace(/([><=]+)\s+/g,"$1"),t.includes("||"))return t.split("||").some(_=>wv(e,_));if(t.includes(" - ")){const[_,v]=t.split(" - ",2);return wv(e,`>=${_} <=${v}`)}else if(t.includes(" "))return t.trim().replace(/\s{2,}/g," ").split(" ").every(_=>wv(e,_));const n=t.match(/^([<>=~^]+)/),r=n?n[1]:"=";if(r!=="^"&&r!=="~")return rFe(e,t,r);const[i,o,s,,a]=ub(e),[l,c,u,,d]=ub(t),f=[i,o,s],h=[l,c??"x",u??"x"];if(d&&(!a||Sd(f,h)!==0||Sd(a.split("."),d.split("."))===-1))return!1;const p=h.findIndex(_=>_!=="0")+1,m=r==="~"?2:p>1?p:1;return!(Sd(f.slice(0,m),h.slice(0,m))!==0||Sd(f.slice(m),h.slice(m))===-1)},oFe={EnumField:"",BoardField:void 0,BooleanField:!1,ColorField:{r:0,g:0,b:0,a:1},FloatField:0,ImageField:void 0,IntegerField:0,IPAdapterModelField:void 0,LoRAModelField:void 0,MainModelField:void 0,SchedulerField:"euler",SDXLMainModelField:void 0,SDXLRefinerModelField:void 0,StringField:"",T2IAdapterModelField:void 0,VAEModelField:void 0,ControlNetModelField:void 0},sFe=(e,t)=>({id:e,name:t.name,type:t.type,label:"",fieldKind:"input",value:t.default??HN(oFe,t.type.name)}),aFe=(e,t)=>{const n=ul(),{type:r}=t,i=og(t.inputs,(a,l,c)=>{const u=ul(),d=sFe(u,l);return a[c]=d,a},{}),o=og(t.outputs,(a,l,c)=>{const d={id:ul(),name:c,type:l.type,fieldKind:"output"};return a[c]=d,a},{});return{...cB,id:n,type:"invocation",position:e,data:{id:n,type:r,version:t.version,label:"",notes:"",isOpen:!0,isIntermediate:r!=="save_image",useCache:t.useCache,inputs:i,outputs:o}}},tk=(e,t)=>e.data.type!==t.type?!0:e.data.version!==t.version,lFe=(e,t)=>{if(!tk(e,t)||e.data.type!==t.type)return!1;const r=epe.parse(t.version).major;return wv(e.data.version,`^${r}`)},cFe=(e,t)=>{if(!lFe(e,t)||e.data.type!==t.type)throw new GH(`Unable to update node ${e.id}`);const r=aFe(e.position,t),i=Ge(e);return i.data.version=t.version,zF(i,r),i.data.inputs=B6(i.data.inputs,Qc(r.data.inputs)),i.data.outputs=B6(i.data.outputs,Qc(r.data.outputs)),i},uFe={BoardField:{name:"BoardField",isCollection:!1,isCollectionOrScalar:!1},boolean:{name:"BooleanField",isCollection:!1,isCollectionOrScalar:!1},BooleanCollection:{name:"BooleanField",isCollection:!0,isCollectionOrScalar:!1},BooleanPolymorphic:{name:"BooleanField",isCollection:!1,isCollectionOrScalar:!0},ColorField:{name:"ColorField",isCollection:!1,isCollectionOrScalar:!1},ColorCollection:{name:"ColorField",isCollection:!0,isCollectionOrScalar:!1},ColorPolymorphic:{name:"ColorField",isCollection:!1,isCollectionOrScalar:!0},ControlNetModelField:{name:"ControlNetModelField",isCollection:!1,isCollectionOrScalar:!1},enum:{name:"EnumField",isCollection:!1,isCollectionOrScalar:!1},float:{name:"FloatField",isCollection:!1,isCollectionOrScalar:!1},FloatCollection:{name:"FloatField",isCollection:!0,isCollectionOrScalar:!1},FloatPolymorphic:{name:"FloatField",isCollection:!1,isCollectionOrScalar:!0},ImageCollection:{name:"ImageField",isCollection:!0,isCollectionOrScalar:!1},ImageField:{name:"ImageField",isCollection:!1,isCollectionOrScalar:!1},ImagePolymorphic:{name:"ImageField",isCollection:!1,isCollectionOrScalar:!0},integer:{name:"IntegerField",isCollection:!1,isCollectionOrScalar:!1},IntegerCollection:{name:"IntegerField",isCollection:!0,isCollectionOrScalar:!1},IntegerPolymorphic:{name:"IntegerField",isCollection:!1,isCollectionOrScalar:!0},IPAdapterModelField:{name:"IPAdapterModelField",isCollection:!1,isCollectionOrScalar:!1},LoRAModelField:{name:"LoRAModelField",isCollection:!1,isCollectionOrScalar:!1},MainModelField:{name:"MainModelField",isCollection:!1,isCollectionOrScalar:!1},Scheduler:{name:"SchedulerField",isCollection:!1,isCollectionOrScalar:!1},SDXLMainModelField:{name:"SDXLMainModelField",isCollection:!1,isCollectionOrScalar:!1},SDXLRefinerModelField:{name:"SDXLRefinerModelField",isCollection:!1,isCollectionOrScalar:!1},string:{name:"StringField",isCollection:!1,isCollectionOrScalar:!1},StringCollection:{name:"StringField",isCollection:!0,isCollectionOrScalar:!1},StringPolymorphic:{name:"StringField",isCollection:!1,isCollectionOrScalar:!0},T2IAdapterModelField:{name:"T2IAdapterModelField",isCollection:!1,isCollectionOrScalar:!1},VaeModelField:{name:"VAEModelField",isCollection:!1,isCollectionOrScalar:!1}},dFe={Any:{name:"AnyField",isCollection:!1,isCollectionOrScalar:!1},ClipField:{name:"ClipField",isCollection:!1,isCollectionOrScalar:!1},Collection:{name:"CollectionField",isCollection:!0,isCollectionOrScalar:!1},CollectionItem:{name:"CollectionItemField",isCollection:!1,isCollectionOrScalar:!1},ConditioningCollection:{name:"ConditioningField",isCollection:!0,isCollectionOrScalar:!1},ConditioningField:{name:"ConditioningField",isCollection:!1,isCollectionOrScalar:!1},ConditioningPolymorphic:{name:"ConditioningField",isCollection:!1,isCollectionOrScalar:!0},ControlCollection:{name:"ControlField",isCollection:!0,isCollectionOrScalar:!1},ControlField:{name:"ControlField",isCollection:!1,isCollectionOrScalar:!1},ControlPolymorphic:{name:"ControlField",isCollection:!1,isCollectionOrScalar:!0},DenoiseMaskField:{name:"DenoiseMaskField",isCollection:!1,isCollectionOrScalar:!1},IPAdapterField:{name:"IPAdapterField",isCollection:!1,isCollectionOrScalar:!1},IPAdapterCollection:{name:"IPAdapterField",isCollection:!0,isCollectionOrScalar:!1},IPAdapterPolymorphic:{name:"IPAdapterField",isCollection:!1,isCollectionOrScalar:!0},LatentsField:{name:"LatentsField",isCollection:!1,isCollectionOrScalar:!1},LatentsCollection:{name:"LatentsField",isCollection:!0,isCollectionOrScalar:!1},LatentsPolymorphic:{name:"LatentsField",isCollection:!1,isCollectionOrScalar:!0},MetadataField:{name:"MetadataField",isCollection:!1,isCollectionOrScalar:!1},MetadataCollection:{name:"MetadataField",isCollection:!0,isCollectionOrScalar:!1},MetadataItemField:{name:"MetadataItemField",isCollection:!1,isCollectionOrScalar:!1},MetadataItemCollection:{name:"MetadataItemField",isCollection:!0,isCollectionOrScalar:!1},MetadataItemPolymorphic:{name:"MetadataItemField",isCollection:!1,isCollectionOrScalar:!0},ONNXModelField:{name:"ONNXModelField",isCollection:!1,isCollectionOrScalar:!1},T2IAdapterField:{name:"T2IAdapterField",isCollection:!1,isCollectionOrScalar:!1},T2IAdapterCollection:{name:"T2IAdapterField",isCollection:!0,isCollectionOrScalar:!1},T2IAdapterPolymorphic:{name:"T2IAdapterField",isCollection:!1,isCollectionOrScalar:!0},UNetField:{name:"UNetField",isCollection:!1,isCollectionOrScalar:!1},VaeField:{name:"VaeField",isCollection:!1,isCollectionOrScalar:!1}},cO={...uFe,...dFe},fFe=T.enum(["euler","deis","ddim","ddpm","dpmpp_2s","dpmpp_2m","dpmpp_2m_sde","dpmpp_sde","heun","kdpm_2","lms","pndm","unipc","euler_k","dpmpp_2s_k","dpmpp_2m_k","dpmpp_2m_sde_k","dpmpp_sde_k","heun_k","lms_k","euler_a","kdpm_2_a","lcm"]),nk=T.enum(["any","sd-1","sd-2","sdxl","sdxl-refiner"]),hFe=T.object({model_name:T.string().min(1),base_model:nk,model_type:T.literal("main")}),pFe=T.object({model_name:T.string().min(1),base_model:nk,model_type:T.literal("onnx")}),rk=T.union([hFe,pFe]),gFe=T.enum(["Any","BoardField","boolean","BooleanCollection","BooleanPolymorphic","ClipField","Collection","CollectionItem","ColorCollection","ColorField","ColorPolymorphic","ConditioningCollection","ConditioningField","ConditioningPolymorphic","ControlCollection","ControlField","ControlNetModelField","ControlPolymorphic","DenoiseMaskField","enum","float","FloatCollection","FloatPolymorphic","ImageCollection","ImageField","ImagePolymorphic","integer","IntegerCollection","IntegerPolymorphic","IPAdapterCollection","IPAdapterField","IPAdapterModelField","IPAdapterPolymorphic","LatentsCollection","LatentsField","LatentsPolymorphic","LoRAModelField","MainModelField","MetadataField","MetadataCollection","MetadataItemField","MetadataItemCollection","MetadataItemPolymorphic","ONNXModelField","Scheduler","SDXLMainModelField","SDXLRefinerModelField","string","StringCollection","StringPolymorphic","T2IAdapterCollection","T2IAdapterField","T2IAdapterModelField","T2IAdapterPolymorphic","UNetField","VaeField","VaeModelField"]),QH=T.object({id:T.string().trim().min(1),name:T.string().trim().min(1),type:gFe}),mFe=QH.extend({fieldKind:T.literal("output")}),Ee=QH.extend({fieldKind:T.literal("input"),label:T.string()}),wa=T.object({model_name:T.string().trim().min(1),base_model:nk}),Kf=T.object({image_name:T.string().trim().min(1)}),yFe=T.object({board_id:T.string().trim().min(1)}),db=T.object({latents_name:T.string().trim().min(1),seed:T.number().int().optional()}),fb=T.object({conditioning_name:T.string().trim().min(1)}),vFe=T.object({mask_name:T.string().trim().min(1),masked_latents_name:T.string().trim().min(1).optional()}),bFe=Ee.extend({type:T.literal("integer"),value:T.number().int().optional()}),_Fe=Ee.extend({type:T.literal("IntegerCollection"),value:T.array(T.number().int()).optional()}),SFe=Ee.extend({type:T.literal("IntegerPolymorphic"),value:T.number().int().optional()}),xFe=Ee.extend({type:T.literal("float"),value:T.number().optional()}),wFe=Ee.extend({type:T.literal("FloatCollection"),value:T.array(T.number()).optional()}),CFe=Ee.extend({type:T.literal("FloatPolymorphic"),value:T.number().optional()}),EFe=Ee.extend({type:T.literal("string"),value:T.string().optional()}),TFe=Ee.extend({type:T.literal("StringCollection"),value:T.array(T.string()).optional()}),AFe=Ee.extend({type:T.literal("StringPolymorphic"),value:T.string().optional()}),kFe=Ee.extend({type:T.literal("boolean"),value:T.boolean().optional()}),PFe=Ee.extend({type:T.literal("BooleanCollection"),value:T.array(T.boolean()).optional()}),IFe=Ee.extend({type:T.literal("BooleanPolymorphic"),value:T.boolean().optional()}),MFe=Ee.extend({type:T.literal("enum"),value:T.string().optional()}),RFe=Ee.extend({type:T.literal("LatentsField"),value:db.optional()}),OFe=Ee.extend({type:T.literal("LatentsCollection"),value:T.array(db).optional()}),$Fe=Ee.extend({type:T.literal("LatentsPolymorphic"),value:T.union([db,T.array(db)]).optional()}),NFe=Ee.extend({type:T.literal("DenoiseMaskField"),value:vFe.optional()}),FFe=Ee.extend({type:T.literal("ConditioningField"),value:fb.optional()}),DFe=Ee.extend({type:T.literal("ConditioningCollection"),value:T.array(fb).optional()}),LFe=Ee.extend({type:T.literal("ConditioningPolymorphic"),value:T.union([fb,T.array(fb)]).optional()}),BFe=wa,hb=T.object({image:Kf,control_model:BFe,control_weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),control_mode:T.enum(["balanced","more_prompt","more_control","unbalanced"]).optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),zFe=Ee.extend({type:T.literal("ControlField"),value:hb.optional()}),jFe=Ee.extend({type:T.literal("ControlPolymorphic"),value:T.union([hb,T.array(hb)]).optional()}),VFe=Ee.extend({type:T.literal("ControlCollection"),value:T.array(hb).optional()}),UFe=wa,pb=T.object({image:Kf,ip_adapter_model:UFe,weight:T.number(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional()}),GFe=Ee.extend({type:T.literal("IPAdapterField"),value:pb.optional()}),HFe=Ee.extend({type:T.literal("IPAdapterPolymorphic"),value:T.union([pb,T.array(pb)]).optional()}),WFe=Ee.extend({type:T.literal("IPAdapterCollection"),value:T.array(pb).optional()}),qFe=wa,gb=T.object({image:Kf,t2i_adapter_model:qFe,weight:T.union([T.number(),T.array(T.number())]).optional(),begin_step_percent:T.number().optional(),end_step_percent:T.number().optional(),resize_mode:T.enum(["just_resize","crop_resize","fill_resize","just_resize_simple"]).optional()}),KFe=Ee.extend({type:T.literal("T2IAdapterField"),value:gb.optional()}),XFe=Ee.extend({type:T.literal("T2IAdapterPolymorphic"),value:T.union([gb,T.array(gb)]).optional()}),QFe=Ee.extend({type:T.literal("T2IAdapterCollection"),value:T.array(gb).optional()}),YFe=T.enum(["onnx","main","vae","lora","controlnet","embedding"]),ZFe=T.enum(["unet","text_encoder","text_encoder_2","tokenizer","tokenizer_2","vae","vae_decoder","vae_encoder","scheduler","safety_checker"]),Ef=wa.extend({model_type:YFe,submodel:ZFe.optional()}),YH=Ef.extend({weight:T.number().optional()}),JFe=T.object({unet:Ef,scheduler:Ef,loras:T.array(YH)}),eDe=Ee.extend({type:T.literal("UNetField"),value:JFe.optional()}),tDe=T.object({tokenizer:Ef,text_encoder:Ef,skipped_layers:T.number(),loras:T.array(YH)}),nDe=Ee.extend({type:T.literal("ClipField"),value:tDe.optional()}),rDe=T.object({vae:Ef}),iDe=Ee.extend({type:T.literal("VaeField"),value:rDe.optional()}),oDe=Ee.extend({type:T.literal("ImageField"),value:Kf.optional()}),sDe=Ee.extend({type:T.literal("BoardField"),value:yFe.optional()}),aDe=Ee.extend({type:T.literal("ImagePolymorphic"),value:Kf.optional()}),lDe=Ee.extend({type:T.literal("ImageCollection"),value:T.array(Kf).optional()}),cDe=Ee.extend({type:T.literal("MainModelField"),value:rk.optional()}),uDe=Ee.extend({type:T.literal("SDXLMainModelField"),value:rk.optional()}),dDe=Ee.extend({type:T.literal("SDXLRefinerModelField"),value:rk.optional()}),fDe=wa,hDe=Ee.extend({type:T.literal("VaeModelField"),value:fDe.optional()}),pDe=wa,gDe=Ee.extend({type:T.literal("LoRAModelField"),value:pDe.optional()}),mDe=wa,yDe=Ee.extend({type:T.literal("ControlNetModelField"),value:mDe.optional()}),vDe=wa,bDe=Ee.extend({type:T.literal("IPAdapterModelField"),value:vDe.optional()}),_De=wa,SDe=Ee.extend({type:T.literal("T2IAdapterModelField"),value:_De.optional()}),xDe=Ee.extend({type:T.literal("Collection"),value:T.array(T.any()).optional()}),wDe=Ee.extend({type:T.literal("CollectionItem"),value:T.any().optional()}),mb=T.object({label:T.string(),value:T.any()}),CDe=Ee.extend({type:T.literal("MetadataItemField"),value:mb.optional()}),EDe=Ee.extend({type:T.literal("MetadataItemCollection"),value:T.array(mb).optional()}),TDe=Ee.extend({type:T.literal("MetadataItemPolymorphic"),value:T.union([mb,T.array(mb)]).optional()}),ZH=T.record(T.any()),ADe=Ee.extend({type:T.literal("MetadataField"),value:ZH.optional()}),kDe=Ee.extend({type:T.literal("MetadataCollection"),value:T.array(ZH).optional()}),yb=T.object({r:T.number().int().min(0).max(255),g:T.number().int().min(0).max(255),b:T.number().int().min(0).max(255),a:T.number().int().min(0).max(255)}),PDe=Ee.extend({type:T.literal("ColorField"),value:yb.optional()}),IDe=Ee.extend({type:T.literal("ColorCollection"),value:T.array(yb).optional()}),MDe=Ee.extend({type:T.literal("ColorPolymorphic"),value:T.union([yb,T.array(yb)]).optional()}),RDe=Ee.extend({type:T.literal("Scheduler"),value:fFe.optional()}),ODe=Ee.extend({type:T.literal("Any"),value:T.any().optional()}),$De=T.discriminatedUnion("type",[ODe,sDe,PFe,kFe,IFe,nDe,xDe,wDe,PDe,IDe,MDe,FFe,DFe,LFe,zFe,yDe,VFe,jFe,NFe,MFe,wFe,xFe,CFe,lDe,aDe,oDe,_Fe,SFe,bFe,GFe,bDe,WFe,HFe,RFe,OFe,$Fe,gDe,cDe,RDe,uDe,dDe,TFe,AFe,EFe,KFe,SDe,QFe,XFe,eDe,iDe,hDe,CDe,EDe,TDe,ADe,kDe]),NDe=T.string().refine(e=>{const[t,n,r]=e.split(".");return t!==void 0&&Number.isInteger(Number(t))&&n!==void 0&&Number.isInteger(Number(n))&&r!==void 0&&Number.isInteger(Number(r))}),FDe=T.object({id:T.string().trim().min(1),type:T.string().trim().min(1),inputs:T.record($De),outputs:T.record(mFe),label:T.string(),isOpen:T.boolean(),notes:T.string(),embedWorkflow:T.boolean(),isIntermediate:T.boolean(),useCache:T.boolean().default(!0),version:NDe.optional()}),DDe=T.object({id:T.string().trim().min(1),type:T.literal("notes"),label:T.string(),isOpen:T.boolean(),notes:T.string()}),JH=T.object({x:T.number(),y:T.number()}).default({x:0,y:0}),vb=T.number().gt(0).nullish(),LDe=T.object({id:T.string().trim().min(1),type:T.literal("invocation"),data:FDe,width:vb,height:vb,position:JH}),BDe=T.object({id:T.string().trim().min(1),type:T.literal("notes"),data:DDe,width:vb,height:vb,position:JH}),zDe=T.discriminatedUnion("type",[LDe,BDe]),jDe=T.object({source:T.string().trim().min(1),sourceHandle:T.string().trim().min(1),target:T.string().trim().min(1),targetHandle:T.string().trim().min(1),id:T.string().trim().min(1),type:T.literal("default")}),VDe=T.object({source:T.string().trim().min(1),target:T.string().trim().min(1),id:T.string().trim().min(1),type:T.literal("collapsed")}),UDe=T.union([jDe,VDe]),GDe=T.object({nodeId:T.string().trim().min(1),fieldName:T.string().trim().min(1)}),HDe=T.object({name:T.string().default(""),author:T.string().default(""),description:T.string().default(""),version:T.string().default(""),contact:T.string().default(""),tags:T.string().default(""),notes:T.string().default(""),nodes:T.array(zDe).default([]),edges:T.array(UDe).default([]),exposedFields:T.array(GDe).default([]),meta:T.object({version:T.literal("1.0.0")})}),WDe=T.object({meta:T.object({version:tS})}),qDe=e=>{var n;const t=(n=MD.get())==null?void 0:n.getState().nodes.nodeTemplates;if(!t)throw new Error(J("app.storeNotInitialized"));return e.nodes.forEach(r=>{var i;if(r.type==="invocation"){Fo(r.data.inputs,a=>{const l=cO[a.type];if(!l)throw new sE(J("nodes.unknownFieldType",{type:a.type}));a.type=l}),Fo(r.data.outputs,a=>{const l=cO[a.type];if(!l)throw new sE(J("nodes.unknownFieldType",{type:a.type}));a.type=l});const o=t[r.data.type],s=o?o.nodePack:J("common.unknown");r.data.nodePack=s,(i=r.data).version||(i.version="1.0.0")}}),e.meta.version="2.0.0",e.meta.category="user",BH.parse(e)},KDe=e=>{const t=WDe.safeParse(e);if(!t.success)throw new oE(J("nodes.unableToGetWorkflowVersion"));const{version:n}=t.data.meta;if(n==="1.0.0"){const r=HDe.parse(e);return qDe(r)}if(n==="2.0.0")return BH.parse(e);throw new oE(J("nodes.unrecognizedWorkflowVersion",{version:n}))},XDe=(e,t)=>{const n=KDe(e);n.meta.category==="default"&&(n.meta.category="user",n.id=void 0);const{nodes:r,edges:i}=n,o=[],s=r.filter(Q7e),a=VF(s,"id");return s.forEach(l=>{const c=t[l.data.type];if(!c){const u=J("nodes.missingTemplate",{node:l.id,type:l.data.type});o.push({message:u,data:tt(l)});return}if(tk(l,c)){const u=J("nodes.mismatchedVersion",{node:l.id,type:l.data.type});o.push({message:u,data:tt({node:l,nodeTemplate:c})});return}}),i.forEach((l,c)=>{const u=a[l.source],d=a[l.target],f=u?t[u.data.type]:void 0,h=d?t[d.data.type]:void 0,p=[];if(u||p.push(J("nodes.sourceNodeDoesNotExist",{node:l.source})),f||p.push(J("nodes.missingTemplate",{node:l.source,type:u==null?void 0:u.data.type})),u&&f&&l.type==="default"&&!(l.sourceHandle in f.outputs)&&p.push(J("nodes.sourceNodeFieldDoesNotExist",{node:l.source,field:l.sourceHandle})),d||p.push(J("nodes.targetNodeDoesNotExist",{node:l.target})),h||p.push(J("nodes.missingTemplate",{node:l.target,type:d==null?void 0:d.data.type})),d&&h&&l.type==="default"&&!(l.targetHandle in h.inputs)&&p.push(J("nodes.targetNodeFieldDoesNotExist",{node:l.target,field:l.targetHandle})),p.length){delete i[c];const m=l.type==="default"?`${l.source}.${l.sourceHandle}`:l.source,_=l.type==="default"?`${l.source}.${l.targetHandle}`:l.target;o.push({message:J("nodes.deletedInvalidEdge",{source:m,target:_}),issues:p,data:l})}}),{workflow:n,warnings:o}},QDe=()=>{fe({actionCreator:nhe,effect:(e,{dispatch:t,getState:n})=>{const r=ue("nodes"),{workflow:i,asCopy:o}=e.payload,s=n().nodes.nodeTemplates;try{const{workflow:a,warnings:l}=XDe(i,s);o&&delete a.id,t(yT(a)),l.length?(t(Ve(pi({title:J("toast.loadedWithWarnings"),status:"warning"}))),l.forEach(({message:c,...u})=>{r.warn(u,c)})):t(Ve(pi({title:J("toast.workflowLoaded"),status:"success"}))),t(Gj("nodes")),requestAnimationFrame(()=>{var c;(c=ZNe.get())==null||c.fitView()})}catch(a){if(a instanceof oE)r.error({error:tt(a)},a.message),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:a.message})));else if(a instanceof sE)r.error({error:tt(a)},a.message),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:a.message})));else if(a instanceof T.ZodError){const{message:l}=rE(a,{prefix:J("nodes.workflowValidation")});r.error({error:tt(a)},l),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:l})))}else r.error({error:tt(a)},J("nodes.unknownErrorValidatingWorkflow")),t(Ve(pi({title:J("nodes.unableToValidateWorkflow"),status:"error",description:J("nodes.unknownErrorValidatingWorkflow")})))}}})},YDe=()=>{fe({actionCreator:rhe,effect:(e,{dispatch:t,getState:n})=>{const r=ue("nodes"),i=n().nodes.nodes,o=n().nodes.nodeTemplates;let s=0;i.filter(Sn).forEach(a=>{const l=o[a.data.type];if(!l){s++;return}if(tk(a,l))try{const c=cFe(a,l);t(Mj({nodeId:c.id,node:c}))}catch(c){c instanceof GH&&s++}}),s?(r.warn(J("nodes.unableToUpdateNodes",{count:s})),t(Ve(pi({title:J("nodes.unableToUpdateNodes",{count:s})})))):t(Ve(pi({title:J("nodes.allNodesUpdated"),status:"success"})))}})},eW=kY(),fe=eW.startListening;x$e();w$e();k$e();h$e();p$e();g$e();m$e();y$e();H8e();S$e();C$e();E$e();D7e();u$e();H7e();F_e();U8e();f7e();l7e();aMe();c7e();sMe();iMe();d7e();kNe();$_e();mNe();yNe();bNe();_Ne();xNe();pNe();gNe();TNe();ANe();wNe();ENe();SNe();CNe();g7e();p7e();d$e();f$e();b$e();_$e();W8e();hNe();QDe();YDe();v$e();P$e();B_e();M$e();D_e();N_e();YNe();INe();$$e();const ZDe=T.object({payload:T.object({status:T.literal(403),data:T.object({detail:T.string()})})}),JDe=e=>t=>n=>{if(fm(n))try{const r=ZDe.parse(n),{dispatch:i}=e,o=r.payload.data.detail!=="Forbidden"?r.payload.data.detail:void 0;i(Ve({title:J("common.somethingWentWrong"),status:"error",description:o}))}catch{}return t(n)},eLe={canvas:cue,gallery:Wfe,generation:Qle,nodes:vbe,postprocessing:Sbe,system:tse,config:Kse,ui:Ebe,hotkeys:Cbe,controlAdapters:gae,dynamicPrompts:Sue,deleteImageModal:pue,changeBoardModal:due,lora:Xfe,modelmanager:Yfe,sdxl:wbe,queue:ice,workflow:_be,[Lo.reducerPath]:Lo.reducer},tLe=Vb(eLe),nLe=g_e(tLe),rLe=["canvas","gallery","generation","sdxl","nodes","workflow","postprocessing","system","ui","controlAdapters","dynamicPrompts","lora","modelmanager"],uO=Hj("invoke","invoke-store"),iLe={getItem:e=>Tbe(e,uO),setItem:(e,t)=>Abe(e,t,uO)},oLe=(e,t=!0)=>HQ({reducer:nLe,middleware:n=>n({serializableCheck:!1,immutableCheck:!1}).concat(Lo.middleware).concat(Hbe).concat(JDe).prepend(eW.middleware),enhancers:n=>{const r=n().concat(gN());return t&&r.push(m_e(iLe,rLe,{persistDebounce:300,serialize:A_e,unserialize:P_e,prefix:e?`${tM}${e}-`:tM})),r},devTools:{actionSanitizer:I_e,stateSanitizer:R_e,trace:!0,predicate:(n,r)=>!M_e.includes(r.type)}}),tW=e=>e,sLe=""+new URL("logo-13003d72.png",import.meta.url).href,aLe=()=>ie.jsxs($A,{position:"relative",width:"100vw",height:"100vh",alignItems:"center",justifyContent:"center",bg:"#151519",children:[ie.jsx(OA,{src:sLe,w:"8rem",h:"8rem"}),ie.jsx(IA,{label:"Loading",color:"grey",position:"absolute",size:"sm",width:"24px !important",height:"24px !important",right:"1.5rem",bottom:"1.5rem"})]}),lLe=I.memo(aLe),F2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Xf(e){const t=Object.prototype.toString.call(e);return t==="[object Window]"||t==="[object global]"}function ik(e){return"nodeType"in e}function zr(e){var t,n;return e?Xf(e)?e:ik(e)&&(t=(n=e.ownerDocument)==null?void 0:n.defaultView)!=null?t:window:window}function ok(e){const{Document:t}=zr(e);return e instanceof t}function s0(e){return Xf(e)?!1:e instanceof zr(e).HTMLElement}function nW(e){return e instanceof zr(e).SVGElement}function Qf(e){return e?Xf(e)?e.document:ik(e)?ok(e)?e:s0(e)||nW(e)?e.ownerDocument:document:document:document}const Cs=F2?I.useLayoutEffect:I.useEffect;function D2(e){const t=I.useRef(e);return Cs(()=>{t.current=e}),I.useCallback(function(){for(var n=arguments.length,r=new Array(n),i=0;i{e.current=setInterval(r,i)},[]),n=I.useCallback(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[]);return[t,n]}function qg(e,t){t===void 0&&(t=[e]);const n=I.useRef(e);return Cs(()=>{n.current!==e&&(n.current=e)},t),n}function a0(e,t){const n=I.useRef();return I.useMemo(()=>{const r=e(n.current);return n.current=r,r},[...t])}function bb(e){const t=D2(e),n=I.useRef(null),r=I.useCallback(i=>{i!==n.current&&(t==null||t(i,n.current)),n.current=i},[]);return[n,r]}function _b(e){const t=I.useRef();return I.useEffect(()=>{t.current=e},[e]),t.current}let dC={};function L2(e,t){return I.useMemo(()=>{if(t)return t;const n=dC[e]==null?0:dC[e]+1;return dC[e]=n,e+"-"+n},[e,t])}function rW(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{const a=Object.entries(s);for(const[l,c]of a){const u=o[l];u!=null&&(o[l]=u+e*c)}return o},{...t})}}const Hd=rW(1),Sb=rW(-1);function uLe(e){return"clientX"in e&&"clientY"in e}function sk(e){if(!e)return!1;const{KeyboardEvent:t}=zr(e.target);return t&&e instanceof t}function dLe(e){if(!e)return!1;const{TouchEvent:t}=zr(e.target);return t&&e instanceof t}function Kg(e){if(dLe(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}else if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return uLe(e)?{x:e.clientX,y:e.clientY}:null}const Xg=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[Xg.Translate.toString(e),Xg.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),dO="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function fLe(e){return e.matches(dO)?e:e.querySelector(dO)}const hLe={display:"none"};function pLe(e){let{id:t,value:n}=e;return Q.createElement("div",{id:t,style:hLe},n)}function gLe(e){let{id:t,announcement:n,ariaLiveType:r="assertive"}=e;const i={position:"fixed",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return Q.createElement("div",{id:t,style:i,role:"status","aria-live":r,"aria-atomic":!0},n)}function mLe(){const[e,t]=I.useState("");return{announce:I.useCallback(r=>{r!=null&&t(r)},[]),announcement:e}}const iW=I.createContext(null);function yLe(e){const t=I.useContext(iW);I.useEffect(()=>{if(!t)throw new Error("useDndMonitor must be used within a children of ");return t(e)},[e,t])}function vLe(){const[e]=I.useState(()=>new Set),t=I.useCallback(r=>(e.add(r),()=>e.delete(r)),[e]);return[I.useCallback(r=>{let{type:i,event:o}=r;e.forEach(s=>{var a;return(a=s[i])==null?void 0:a.call(s,o)})},[e]),t]}const bLe={draggable:` + To pick up a draggable item, press the space bar. + While dragging, use the arrow keys to move the item. + Press space again to drop the item in its new position, or press escape to cancel. + `},_Le={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was moved over droppable area "+n.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was dropped over droppable area "+n.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function SLe(e){let{announcements:t=_Le,container:n,hiddenTextDescribedById:r,screenReaderInstructions:i=bLe}=e;const{announce:o,announcement:s}=mLe(),a=L2("DndLiveRegion"),[l,c]=I.useState(!1);if(I.useEffect(()=>{c(!0)},[]),yLe(I.useMemo(()=>({onDragStart(d){let{active:f}=d;o(t.onDragStart({active:f}))},onDragMove(d){let{active:f,over:h}=d;t.onDragMove&&o(t.onDragMove({active:f,over:h}))},onDragOver(d){let{active:f,over:h}=d;o(t.onDragOver({active:f,over:h}))},onDragEnd(d){let{active:f,over:h}=d;o(t.onDragEnd({active:f,over:h}))},onDragCancel(d){let{active:f,over:h}=d;o(t.onDragCancel({active:f,over:h}))}}),[o,t])),!l)return null;const u=Q.createElement(Q.Fragment,null,Q.createElement(pLe,{id:r,value:i.draggable}),Q.createElement(gLe,{id:a,announcement:s}));return n?gi.createPortal(u,n):u}var wn;(function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"})(wn||(wn={}));function xb(){}function fO(e,t){return I.useMemo(()=>({sensor:e,options:t??{}}),[e,t])}function xLe(){for(var e=arguments.length,t=new Array(e),n=0;n[...t].filter(r=>r!=null),[...t])}const zo=Object.freeze({x:0,y:0});function wLe(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function CLe(e,t){const n=Kg(e);if(!n)return"0 0";const r={x:(n.x-t.left)/t.width*100,y:(n.y-t.top)/t.height*100};return r.x+"% "+r.y+"%"}function ELe(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function TLe(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function ALe(e){let{left:t,top:n,height:r,width:i}=e;return[{x:t,y:n},{x:t+i,y:n},{x:t,y:n+r},{x:t+i,y:n+r}]}function kLe(e,t){if(!e||e.length===0)return null;const[n]=e;return t?n[t]:n}function PLe(e,t){const n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),i=Math.min(t.left+t.width,e.left+e.width),o=Math.min(t.top+t.height,e.top+e.height),s=i-r,a=o-n;if(r{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const i=[];for(const o of r){const{id:s}=o,a=n.get(s);if(a){const l=PLe(a,t);l>0&&i.push({id:s,data:{droppableContainer:o,value:l}})}}return i.sort(TLe)};function MLe(e,t){const{top:n,left:r,bottom:i,right:o}=t;return n<=e.y&&e.y<=i&&r<=e.x&&e.x<=o}const RLe=e=>{let{droppableContainers:t,droppableRects:n,pointerCoordinates:r}=e;if(!r)return[];const i=[];for(const o of t){const{id:s}=o,a=n.get(s);if(a&&MLe(r,a)){const c=ALe(a).reduce((d,f)=>d+wLe(r,f),0),u=Number((c/4).toFixed(4));i.push({id:s,data:{droppableContainer:o,value:u}})}}return i.sort(ELe)};function OLe(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}function oW(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:zo}function $Le(e){return function(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;o({...s,top:s.top+e*a.y,bottom:s.bottom+e*a.y,left:s.left+e*a.x,right:s.right+e*a.x}),{...n})}}const NLe=$Le(1);function sW(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}else if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}function FLe(e,t,n){const r=sW(t);if(!r)return e;const{scaleX:i,scaleY:o,x:s,y:a}=r,l=e.left-s-(1-i)*parseFloat(n),c=e.top-a-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),u=i?e.width/i:e.width,d=o?e.height/o:e.height;return{width:u,height:d,top:c,right:l+u,bottom:c+d,left:l}}const DLe={ignoreTransform:!1};function l0(e,t){t===void 0&&(t=DLe);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:c,transformOrigin:u}=zr(e).getComputedStyle(e);c&&(n=FLe(n,c,u))}const{top:r,left:i,width:o,height:s,bottom:a,right:l}=n;return{top:r,left:i,width:o,height:s,bottom:a,right:l}}function hO(e){return l0(e,{ignoreTransform:!0})}function LLe(e){const t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}function BLe(e,t){return t===void 0&&(t=zr(e).getComputedStyle(e)),t.position==="fixed"}function zLe(e,t){t===void 0&&(t=zr(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const o=t[i];return typeof o=="string"?n.test(o):!1})}function ak(e,t){const n=[];function r(i){if(t!=null&&n.length>=t||!i)return n;if(ok(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!s0(i)||nW(i)||n.includes(i))return n;const o=zr(e).getComputedStyle(i);return i!==e&&zLe(i,o)&&n.push(i),BLe(i,o)?n:r(i.parentNode)}return e?r(e):n}function aW(e){const[t]=ak(e,1);return t??null}function fC(e){return!F2||!e?null:Xf(e)?e:ik(e)?ok(e)||e===Qf(e).scrollingElement?window:s0(e)?e:null:null}function lW(e){return Xf(e)?e.scrollX:e.scrollLeft}function cW(e){return Xf(e)?e.scrollY:e.scrollTop}function dE(e){return{x:lW(e),y:cW(e)}}var Fn;(function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"})(Fn||(Fn={}));function uW(e){return!F2||!e?!1:e===document.scrollingElement}function dW(e){const t={x:0,y:0},n=uW(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height},i=e.scrollTop<=t.y,o=e.scrollLeft<=t.x,s=e.scrollTop>=r.y,a=e.scrollLeft>=r.x;return{isTop:i,isLeft:o,isBottom:s,isRight:a,maxScroll:r,minScroll:t}}const jLe={x:.2,y:.2};function VLe(e,t,n,r,i){let{top:o,left:s,right:a,bottom:l}=n;r===void 0&&(r=10),i===void 0&&(i=jLe);const{isTop:c,isBottom:u,isLeft:d,isRight:f}=dW(e),h={x:0,y:0},p={x:0,y:0},m={height:t.height*i.y,width:t.width*i.x};return!c&&o<=t.top+m.height?(h.y=Fn.Backward,p.y=r*Math.abs((t.top+m.height-o)/m.height)):!u&&l>=t.bottom-m.height&&(h.y=Fn.Forward,p.y=r*Math.abs((t.bottom-m.height-l)/m.height)),!f&&a>=t.right-m.width?(h.x=Fn.Forward,p.x=r*Math.abs((t.right-m.width-a)/m.width)):!d&&s<=t.left+m.width&&(h.x=Fn.Backward,p.x=r*Math.abs((t.left+m.width-s)/m.width)),{direction:h,speed:p}}function ULe(e){if(e===document.scrollingElement){const{innerWidth:o,innerHeight:s}=window;return{top:0,left:0,right:o,bottom:s,width:o,height:s}}const{top:t,left:n,right:r,bottom:i}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:i,width:e.clientWidth,height:e.clientHeight}}function fW(e){return e.reduce((t,n)=>Hd(t,dE(n)),zo)}function GLe(e){return e.reduce((t,n)=>t+lW(n),0)}function HLe(e){return e.reduce((t,n)=>t+cW(n),0)}function hW(e,t){if(t===void 0&&(t=l0),!e)return;const{top:n,left:r,bottom:i,right:o}=t(e);aW(e)&&(i<=0||o<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const WLe=[["x",["left","right"],GLe],["y",["top","bottom"],HLe]];class lk{constructor(t,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const r=ak(n),i=fW(r);this.rect={...t},this.width=t.width,this.height=t.height;for(const[o,s,a]of WLe)for(const l of s)Object.defineProperty(this,l,{get:()=>{const c=a(r),u=i[o]-c;return this.rect[l]+u},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Pp{constructor(t){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var r;return(r=this.target)==null?void 0:r.removeEventListener(...n)})},this.target=t}add(t,n,r){var i;(i=this.target)==null||i.addEventListener(t,n,r),this.listeners.push([t,n,r])}}function qLe(e){const{EventTarget:t}=zr(e);return e instanceof t?e:Qf(e)}function hC(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return typeof t=="number"?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t?r>t.y:!1}var Gi;(function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"})(Gi||(Gi={}));function pO(e){e.preventDefault()}function KLe(e){e.stopPropagation()}var Ct;(function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"})(Ct||(Ct={}));const pW={start:[Ct.Space,Ct.Enter],cancel:[Ct.Esc],end:[Ct.Space,Ct.Enter]},XLe=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case Ct.Right:return{...n,x:n.x+25};case Ct.Left:return{...n,x:n.x-25};case Ct.Down:return{...n,y:n.y+25};case Ct.Up:return{...n,y:n.y-25}}};class gW{constructor(t){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=t;const{event:{target:n}}=t;this.props=t,this.listeners=new Pp(Qf(n)),this.windowListeners=new Pp(zr(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Gi.Resize,this.handleCancel),this.windowListeners.add(Gi.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(Gi.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:t,onStart:n}=this.props,r=t.node.current;r&&hW(r),n(zo)}handleKeyDown(t){if(sk(t)){const{active:n,context:r,options:i}=this.props,{keyboardCodes:o=pW,coordinateGetter:s=XLe,scrollBehavior:a="smooth"}=i,{code:l}=t;if(o.end.includes(l)){this.handleEnd(t);return}if(o.cancel.includes(l)){this.handleCancel(t);return}const{collisionRect:c}=r.current,u=c?{x:c.left,y:c.top}:zo;this.referenceCoordinates||(this.referenceCoordinates=u);const d=s(t,{active:n,context:r.current,currentCoordinates:u});if(d){const f=Sb(d,u),h={x:0,y:0},{scrollableAncestors:p}=r.current;for(const m of p){const _=t.code,{isTop:v,isRight:y,isLeft:g,isBottom:b,maxScroll:S,minScroll:w}=dW(m),C=ULe(m),x={x:Math.min(_===Ct.Right?C.right-C.width/2:C.right,Math.max(_===Ct.Right?C.left:C.left+C.width/2,d.x)),y:Math.min(_===Ct.Down?C.bottom-C.height/2:C.bottom,Math.max(_===Ct.Down?C.top:C.top+C.height/2,d.y))},k=_===Ct.Right&&!y||_===Ct.Left&&!g,A=_===Ct.Down&&!b||_===Ct.Up&&!v;if(k&&x.x!==d.x){const R=m.scrollLeft+f.x,L=_===Ct.Right&&R<=S.x||_===Ct.Left&&R>=w.x;if(L&&!f.y){m.scrollTo({left:R,behavior:a});return}L?h.x=m.scrollLeft-R:h.x=_===Ct.Right?m.scrollLeft-S.x:m.scrollLeft-w.x,h.x&&m.scrollBy({left:-h.x,behavior:a});break}else if(A&&x.y!==d.y){const R=m.scrollTop+f.y,L=_===Ct.Down&&R<=S.y||_===Ct.Up&&R>=w.y;if(L&&!f.x){m.scrollTo({top:R,behavior:a});return}L?h.y=m.scrollTop-R:h.y=_===Ct.Down?m.scrollTop-S.y:m.scrollTop-w.y,h.y&&m.scrollBy({top:-h.y,behavior:a});break}}this.handleMove(t,Hd(Sb(d,this.referenceCoordinates),h))}}}handleMove(t,n){const{onMove:r}=this.props;t.preventDefault(),r(n)}handleEnd(t){const{onEnd:n}=this.props;t.preventDefault(),this.detach(),n()}handleCancel(t){const{onCancel:n}=this.props;t.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}gW.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=pW,onActivation:i}=t,{active:o}=n;const{code:s}=e.nativeEvent;if(r.start.includes(s)){const a=o.activatorNode.current;return a&&e.target!==a?!1:(e.preventDefault(),i==null||i({event:e.nativeEvent}),!0)}return!1}}];function gO(e){return!!(e&&"distance"in e)}function mO(e){return!!(e&&"delay"in e)}class ck{constructor(t,n,r){var i;r===void 0&&(r=qLe(t.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=t,this.events=n;const{event:o}=t,{target:s}=o;this.props=t,this.events=n,this.document=Qf(s),this.documentListeners=new Pp(this.document),this.listeners=new Pp(r),this.windowListeners=new Pp(zr(s)),this.initialCoordinates=(i=Kg(o))!=null?i:zo,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:t,props:{options:{activationConstraint:n,bypassActivationConstraint:r}}}=this;if(this.listeners.add(t.move.name,this.handleMove,{passive:!1}),this.listeners.add(t.end.name,this.handleEnd),this.windowListeners.add(Gi.Resize,this.handleCancel),this.windowListeners.add(Gi.DragStart,pO),this.windowListeners.add(Gi.VisibilityChange,this.handleCancel),this.windowListeners.add(Gi.ContextMenu,pO),this.documentListeners.add(Gi.Keydown,this.handleKeydown),n){if(r!=null&&r({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(mO(n)){this.timeoutId=setTimeout(this.handleStart,n.delay);return}if(gO(n))return}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:t}=this,{onStart:n}=this.props;t&&(this.activated=!0,this.documentListeners.add(Gi.Click,KLe,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Gi.SelectionChange,this.removeTextSelection),n(t))}handleMove(t){var n;const{activated:r,initialCoordinates:i,props:o}=this,{onMove:s,options:{activationConstraint:a}}=o;if(!i)return;const l=(n=Kg(t))!=null?n:zo,c=Sb(i,l);if(!r&&a){if(gO(a)){if(a.tolerance!=null&&hC(c,a.tolerance))return this.handleCancel();if(hC(c,a.distance))return this.handleStart()}return mO(a)&&hC(c,a.tolerance)?this.handleCancel():void 0}t.cancelable&&t.preventDefault(),s(l)}handleEnd(){const{onEnd:t}=this.props;this.detach(),t()}handleCancel(){const{onCancel:t}=this.props;this.detach(),t()}handleKeydown(t){t.code===Ct.Esc&&this.handleCancel()}removeTextSelection(){var t;(t=this.document.getSelection())==null||t.removeAllRanges()}}const QLe={move:{name:"pointermove"},end:{name:"pointerup"}};class mW extends ck{constructor(t){const{event:n}=t,r=Qf(n.target);super(t,QLe,r)}}mW.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!n.isPrimary||n.button!==0?!1:(r==null||r({event:n}),!0)}}];const YLe={move:{name:"mousemove"},end:{name:"mouseup"}};var fE;(function(e){e[e.RightClick=2]="RightClick"})(fE||(fE={}));class yW extends ck{constructor(t){super(t,YLe,Qf(t.event.target))}}yW.activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button===fE.RightClick?!1:(r==null||r({event:n}),!0)}}];const pC={move:{name:"touchmove"},end:{name:"touchend"}};class vW extends ck{constructor(t){super(t,pC)}static setup(){return window.addEventListener(pC.move.name,t,{capture:!1,passive:!1}),function(){window.removeEventListener(pC.move.name,t)};function t(){}}}vW.activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:i}=n;return i.length>1?!1:(r==null||r({event:n}),!0)}}];var Ip;(function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"})(Ip||(Ip={}));var wb;(function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"})(wb||(wb={}));function ZLe(e){let{acceleration:t,activator:n=Ip.Pointer,canScroll:r,draggingRect:i,enabled:o,interval:s=5,order:a=wb.TreeOrder,pointerCoordinates:l,scrollableAncestors:c,scrollableAncestorRects:u,delta:d,threshold:f}=e;const h=eBe({delta:d,disabled:!o}),[p,m]=cLe(),_=I.useRef({x:0,y:0}),v=I.useRef({x:0,y:0}),y=I.useMemo(()=>{switch(n){case Ip.Pointer:return l?{top:l.y,bottom:l.y,left:l.x,right:l.x}:null;case Ip.DraggableRect:return i}},[n,i,l]),g=I.useRef(null),b=I.useCallback(()=>{const w=g.current;if(!w)return;const C=_.current.x*v.current.x,x=_.current.y*v.current.y;w.scrollBy(C,x)},[]),S=I.useMemo(()=>a===wb.TreeOrder?[...c].reverse():c,[a,c]);I.useEffect(()=>{if(!o||!c.length||!y){m();return}for(const w of S){if((r==null?void 0:r(w))===!1)continue;const C=c.indexOf(w),x=u[C];if(!x)continue;const{direction:k,speed:A}=VLe(w,x,y,t,f);for(const R of["x","y"])h[R][k[R]]||(A[R]=0,k[R]=0);if(A.x>0||A.y>0){m(),g.current=w,p(b,s),_.current=A,v.current=k;return}}_.current={x:0,y:0},v.current={x:0,y:0},m()},[t,b,r,m,o,s,JSON.stringify(y),JSON.stringify(h),p,c,S,u,JSON.stringify(f)])}const JLe={x:{[Fn.Backward]:!1,[Fn.Forward]:!1},y:{[Fn.Backward]:!1,[Fn.Forward]:!1}};function eBe(e){let{delta:t,disabled:n}=e;const r=_b(t);return a0(i=>{if(n||!r||!i)return JLe;const o={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[Fn.Backward]:i.x[Fn.Backward]||o.x===-1,[Fn.Forward]:i.x[Fn.Forward]||o.x===1},y:{[Fn.Backward]:i.y[Fn.Backward]||o.y===-1,[Fn.Forward]:i.y[Fn.Forward]||o.y===1}}},[n,t,r])}function tBe(e,t){const n=t!==null?e.get(t):void 0,r=n?n.node.current:null;return a0(i=>{var o;return t===null?null:(o=r??i)!=null?o:null},[r,t])}function nBe(e,t){return I.useMemo(()=>e.reduce((n,r)=>{const{sensor:i}=r,o=i.activators.map(s=>({eventName:s.eventName,handler:t(s.handler,r)}));return[...n,...o]},[]),[e,t])}var Qg;(function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"})(Qg||(Qg={}));var hE;(function(e){e.Optimized="optimized"})(hE||(hE={}));const yO=new Map;function rBe(e,t){let{dragging:n,dependencies:r,config:i}=t;const[o,s]=I.useState(null),{frequency:a,measure:l,strategy:c}=i,u=I.useRef(e),d=_(),f=qg(d),h=I.useCallback(function(v){v===void 0&&(v=[]),!f.current&&s(y=>y===null?v:y.concat(v.filter(g=>!y.includes(g))))},[f]),p=I.useRef(null),m=a0(v=>{if(d&&!n)return yO;if(!v||v===yO||u.current!==e||o!=null){const y=new Map;for(let g of e){if(!g)continue;if(o&&o.length>0&&!o.includes(g.id)&&g.rect.current){y.set(g.id,g.rect.current);continue}const b=g.node.current,S=b?new lk(l(b),b):null;g.rect.current=S,S&&y.set(g.id,S)}return y}return v},[e,o,n,d,l]);return I.useEffect(()=>{u.current=e},[e]),I.useEffect(()=>{d||h()},[n,d]),I.useEffect(()=>{o&&o.length>0&&s(null)},[JSON.stringify(o)]),I.useEffect(()=>{d||typeof a!="number"||p.current!==null||(p.current=setTimeout(()=>{h(),p.current=null},a))},[a,d,h,...r]),{droppableRects:m,measureDroppableContainers:h,measuringScheduled:o!=null};function _(){switch(c){case Qg.Always:return!1;case Qg.BeforeDragging:return n;default:return!n}}}function uk(e,t){return a0(n=>e?n||(typeof t=="function"?t(e):e):null,[t,e])}function iBe(e,t){return uk(e,t)}function oBe(e){let{callback:t,disabled:n}=e;const r=D2(t),i=I.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(r)},[r,n]);return I.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function B2(e){let{callback:t,disabled:n}=e;const r=D2(t),i=I.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(r)},[n]);return I.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function sBe(e){return new lk(l0(e),e)}function vO(e,t,n){t===void 0&&(t=sBe);const[r,i]=I.useReducer(a,null),o=oBe({callback(l){if(e)for(const c of l){const{type:u,target:d}=c;if(u==="childList"&&d instanceof HTMLElement&&d.contains(e)){i();break}}}}),s=B2({callback:i});return Cs(()=>{i(),e?(s==null||s.observe(e),o==null||o.observe(document.body,{childList:!0,subtree:!0})):(s==null||s.disconnect(),o==null||o.disconnect())},[e]),r;function a(l){if(!e)return null;if(e.isConnected===!1){var c;return(c=l??n)!=null?c:null}const u=t(e);return JSON.stringify(l)===JSON.stringify(u)?l:u}}function aBe(e){const t=uk(e);return oW(e,t)}const bO=[];function lBe(e){const t=I.useRef(e),n=a0(r=>e?r&&r!==bO&&e&&t.current&&e.parentNode===t.current.parentNode?r:ak(e):bO,[e]);return I.useEffect(()=>{t.current=e},[e]),n}function cBe(e){const[t,n]=I.useState(null),r=I.useRef(e),i=I.useCallback(o=>{const s=fC(o.target);s&&n(a=>a?(a.set(s,dE(s)),new Map(a)):null)},[]);return I.useEffect(()=>{const o=r.current;if(e!==o){s(o);const a=e.map(l=>{const c=fC(l);return c?(c.addEventListener("scroll",i,{passive:!0}),[c,dE(c)]):null}).filter(l=>l!=null);n(a.length?new Map(a):null),r.current=e}return()=>{s(e),s(o)};function s(a){a.forEach(l=>{const c=fC(l);c==null||c.removeEventListener("scroll",i)})}},[i,e]),I.useMemo(()=>e.length?t?Array.from(t.values()).reduce((o,s)=>Hd(o,s),zo):fW(e):zo,[e,t])}function _O(e,t){t===void 0&&(t=[]);const n=I.useRef(null);return I.useEffect(()=>{n.current=null},t),I.useEffect(()=>{const r=e!==zo;r&&!n.current&&(n.current=e),!r&&n.current&&(n.current=null)},[e]),n.current?Sb(e,n.current):zo}function uBe(e){I.useEffect(()=>{if(!F2)return;const t=e.map(n=>{let{sensor:r}=n;return r.setup==null?void 0:r.setup()});return()=>{for(const n of t)n==null||n()}},e.map(t=>{let{sensor:n}=t;return n}))}function dBe(e,t){return I.useMemo(()=>e.reduce((n,r)=>{let{eventName:i,handler:o}=r;return n[i]=s=>{o(s,t)},n},{}),[e,t])}function bW(e){return I.useMemo(()=>e?LLe(e):null,[e])}const gC=[];function fBe(e,t){t===void 0&&(t=l0);const[n]=e,r=bW(n?zr(n):null),[i,o]=I.useReducer(a,gC),s=B2({callback:o});return e.length>0&&i===gC&&o(),Cs(()=>{e.length?e.forEach(l=>s==null?void 0:s.observe(l)):(s==null||s.disconnect(),o())},[e]),i;function a(){return e.length?e.map(l=>uW(l)?r:new lk(t(l),l)):gC}}function _W(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return s0(t)?t:e}function hBe(e){let{measure:t}=e;const[n,r]=I.useState(null),i=I.useCallback(c=>{for(const{target:u}of c)if(s0(u)){r(d=>{const f=t(u);return d?{...d,width:f.width,height:f.height}:f});break}},[t]),o=B2({callback:i}),s=I.useCallback(c=>{const u=_W(c);o==null||o.disconnect(),u&&(o==null||o.observe(u)),r(u?t(u):null)},[t,o]),[a,l]=bb(s);return I.useMemo(()=>({nodeRef:a,rect:n,setRef:l}),[n,a,l])}const pBe=[{sensor:mW,options:{}},{sensor:gW,options:{}}],gBe={current:{}},Cv={draggable:{measure:hO},droppable:{measure:hO,strategy:Qg.WhileDragging,frequency:hE.Optimized},dragOverlay:{measure:l0}};class Mp extends Map{get(t){var n;return t!=null&&(n=super.get(t))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(t=>{let{disabled:n}=t;return!n})}getNodeFor(t){var n,r;return(n=(r=this.get(t))==null?void 0:r.node.current)!=null?n:void 0}}const mBe={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Mp,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:xb},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Cv,measureDroppableContainers:xb,windowRect:null,measuringScheduled:!1},SW={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:xb,draggableNodes:new Map,over:null,measureDroppableContainers:xb},c0=I.createContext(SW),xW=I.createContext(mBe);function yBe(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Mp}}}function vBe(e,t){switch(t.type){case wn.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case wn.DragMove:return e.draggable.active?{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}}:e;case wn.DragEnd:case wn.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case wn.RegisterDroppable:{const{element:n}=t,{id:r}=n,i=new Mp(e.droppable.containers);return i.set(r,n),{...e,droppable:{...e.droppable,containers:i}}}case wn.SetDroppableDisabled:{const{id:n,key:r,disabled:i}=t,o=e.droppable.containers.get(n);if(!o||r!==o.key)return e;const s=new Mp(e.droppable.containers);return s.set(n,{...o,disabled:i}),{...e,droppable:{...e.droppable,containers:s}}}case wn.UnregisterDroppable:{const{id:n,key:r}=t,i=e.droppable.containers.get(n);if(!i||r!==i.key)return e;const o=new Mp(e.droppable.containers);return o.delete(n),{...e,droppable:{...e.droppable,containers:o}}}default:return e}}function bBe(e){let{disabled:t}=e;const{active:n,activatorEvent:r,draggableNodes:i}=I.useContext(c0),o=_b(r),s=_b(n==null?void 0:n.id);return I.useEffect(()=>{if(!t&&!r&&o&&s!=null){if(!sk(o)||document.activeElement===o.target)return;const a=i.get(s);if(!a)return;const{activatorNode:l,node:c}=a;if(!l.current&&!c.current)return;requestAnimationFrame(()=>{for(const u of[l.current,c.current]){if(!u)continue;const d=fLe(u);if(d){d.focus();break}}})}},[r,t,i,s,o]),null}function wW(e,t){let{transform:n,...r}=t;return e!=null&&e.length?e.reduce((i,o)=>o({transform:i,...r}),n):n}function _Be(e){return I.useMemo(()=>({draggable:{...Cv.draggable,...e==null?void 0:e.draggable},droppable:{...Cv.droppable,...e==null?void 0:e.droppable},dragOverlay:{...Cv.dragOverlay,...e==null?void 0:e.dragOverlay}}),[e==null?void 0:e.draggable,e==null?void 0:e.droppable,e==null?void 0:e.dragOverlay])}function SBe(e){let{activeNode:t,measure:n,initialRect:r,config:i=!0}=e;const o=I.useRef(!1),{x:s,y:a}=typeof i=="boolean"?{x:i,y:i}:i;Cs(()=>{if(!s&&!a||!t){o.current=!1;return}if(o.current||!r)return;const c=t==null?void 0:t.node.current;if(!c||c.isConnected===!1)return;const u=n(c),d=oW(u,r);if(s||(d.x=0),a||(d.y=0),o.current=!0,Math.abs(d.x)>0||Math.abs(d.y)>0){const f=aW(c);f&&f.scrollBy({top:d.y,left:d.x})}},[t,s,a,r,n])}const z2=I.createContext({...zo,scaleX:1,scaleY:1});var Ua;(function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"})(Ua||(Ua={}));const xBe=I.memo(function(t){var n,r,i,o;let{id:s,accessibility:a,autoScroll:l=!0,children:c,sensors:u=pBe,collisionDetection:d=ILe,measuring:f,modifiers:h,...p}=t;const m=I.useReducer(vBe,void 0,yBe),[_,v]=m,[y,g]=vLe(),[b,S]=I.useState(Ua.Uninitialized),w=b===Ua.Initialized,{draggable:{active:C,nodes:x,translate:k},droppable:{containers:A}}=_,R=C?x.get(C):null,L=I.useRef({initial:null,translated:null}),M=I.useMemo(()=>{var Ut;return C!=null?{id:C,data:(Ut=R==null?void 0:R.data)!=null?Ut:gBe,rect:L}:null},[C,R]),E=I.useRef(null),[P,O]=I.useState(null),[F,$]=I.useState(null),D=qg(p,Object.values(p)),N=L2("DndDescribedBy",s),z=I.useMemo(()=>A.getEnabled(),[A]),V=_Be(f),{droppableRects:H,measureDroppableContainers:X,measuringScheduled:te}=rBe(z,{dragging:w,dependencies:[k.x,k.y],config:V.droppable}),ee=tBe(x,C),j=I.useMemo(()=>F?Kg(F):null,[F]),q=Hl(),Z=iBe(ee,V.draggable.measure);SBe({activeNode:C?x.get(C):null,config:q.layoutShiftCompensation,initialRect:Z,measure:V.draggable.measure});const oe=vO(ee,V.draggable.measure,Z),be=vO(ee?ee.parentElement:null),Me=I.useRef({activatorEvent:null,active:null,activeNode:ee,collisionRect:null,collisions:null,droppableRects:H,draggableNodes:x,draggingNode:null,draggingNodeRect:null,droppableContainers:A,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),lt=A.getNodeFor((n=Me.current.over)==null?void 0:n.id),Le=hBe({measure:V.dragOverlay.measure}),we=(r=Le.nodeRef.current)!=null?r:ee,pt=w?(i=Le.rect)!=null?i:oe:null,vt=!!(Le.nodeRef.current&&Le.rect),Ce=aBe(vt?null:oe),ii=bW(we?zr(we):null),sn=lBe(w?lt??ee:null),jr=fBe(sn),sr=wW(h,{transform:{x:k.x-Ce.x,y:k.y-Ce.y,scaleX:1,scaleY:1},activatorEvent:F,active:M,activeNodeRect:oe,containerNodeRect:be,draggingNodeRect:pt,over:Me.current.over,overlayNodeRect:Le.rect,scrollableAncestors:sn,scrollableAncestorRects:jr,windowRect:ii}),fn=j?Hd(j,k):null,Vr=cBe(sn),fo=_O(Vr),Ri=_O(Vr,[oe]),ar=Hd(sr,fo),Wn=pt?NLe(pt,sr):null,wr=M&&Wn?d({active:M,collisionRect:Wn,droppableRects:H,droppableContainers:z,pointerCoordinates:fn}):null,Yt=kLe(wr,"id"),[It,oi]=I.useState(null),Oi=vt?sr:Hd(sr,Ri),ho=OLe(Oi,(o=It==null?void 0:It.rect)!=null?o:null,oe),Ur=I.useCallback((Ut,_t)=>{let{sensor:qn,options:Pn}=_t;if(E.current==null)return;const lr=x.get(E.current);if(!lr)return;const Cr=Ut.nativeEvent,Gr=new qn({active:E.current,activeNode:lr,event:Cr,options:Pn,context:Me,onStart(Er){const Kn=E.current;if(Kn==null)return;const Ms=x.get(Kn);if(!Ms)return;const{onDragStart:Ca}=D.current,Ea={active:{id:Kn,data:Ms.data,rect:L}};gi.unstable_batchedUpdates(()=>{Ca==null||Ca(Ea),S(Ua.Initializing),v({type:wn.DragStart,initialCoordinates:Er,active:Kn}),y({type:"onDragStart",event:Ea})})},onMove(Er){v({type:wn.DragMove,coordinates:Er})},onEnd:Ho(wn.DragEnd),onCancel:Ho(wn.DragCancel)});gi.unstable_batchedUpdates(()=>{O(Gr),$(Ut.nativeEvent)});function Ho(Er){return async function(){const{active:Ms,collisions:Ca,over:Ea,scrollAdjustedTranslate:wu}=Me.current;let Rs=null;if(Ms&&wu){const{cancelDrop:Tr}=D.current;Rs={activatorEvent:Cr,active:Ms,collisions:Ca,delta:wu,over:Ea},Er===wn.DragEnd&&typeof Tr=="function"&&await Promise.resolve(Tr(Rs))&&(Er=wn.DragCancel)}E.current=null,gi.unstable_batchedUpdates(()=>{v({type:Er}),S(Ua.Uninitialized),oi(null),O(null),$(null);const Tr=Er===wn.DragEnd?"onDragEnd":"onDragCancel";if(Rs){const Wl=D.current[Tr];Wl==null||Wl(Rs),y({type:Tr,event:Rs})}})}}},[x]),hn=I.useCallback((Ut,_t)=>(qn,Pn)=>{const lr=qn.nativeEvent,Cr=x.get(Pn);if(E.current!==null||!Cr||lr.dndKit||lr.defaultPrevented)return;const Gr={active:Cr};Ut(qn,_t.options,Gr)===!0&&(lr.dndKit={capturedBy:_t.sensor},E.current=Pn,Ur(qn,_t))},[x,Ur]),si=nBe(u,hn);uBe(u),Cs(()=>{oe&&b===Ua.Initializing&&S(Ua.Initialized)},[oe,b]),I.useEffect(()=>{const{onDragMove:Ut}=D.current,{active:_t,activatorEvent:qn,collisions:Pn,over:lr}=Me.current;if(!_t||!qn)return;const Cr={active:_t,activatorEvent:qn,collisions:Pn,delta:{x:ar.x,y:ar.y},over:lr};gi.unstable_batchedUpdates(()=>{Ut==null||Ut(Cr),y({type:"onDragMove",event:Cr})})},[ar.x,ar.y]),I.useEffect(()=>{const{active:Ut,activatorEvent:_t,collisions:qn,droppableContainers:Pn,scrollAdjustedTranslate:lr}=Me.current;if(!Ut||E.current==null||!_t||!lr)return;const{onDragOver:Cr}=D.current,Gr=Pn.get(Yt),Ho=Gr&&Gr.rect.current?{id:Gr.id,rect:Gr.rect.current,data:Gr.data,disabled:Gr.disabled}:null,Er={active:Ut,activatorEvent:_t,collisions:qn,delta:{x:lr.x,y:lr.y},over:Ho};gi.unstable_batchedUpdates(()=>{oi(Ho),Cr==null||Cr(Er),y({type:"onDragOver",event:Er})})},[Yt]),Cs(()=>{Me.current={activatorEvent:F,active:M,activeNode:ee,collisionRect:Wn,collisions:wr,droppableRects:H,draggableNodes:x,draggingNode:we,draggingNodeRect:pt,droppableContainers:A,over:It,scrollableAncestors:sn,scrollAdjustedTranslate:ar},L.current={initial:pt,translated:Wn}},[M,ee,wr,Wn,x,we,pt,H,A,It,sn,ar]),ZLe({...q,delta:k,draggingRect:Wn,pointerCoordinates:fn,scrollableAncestors:sn,scrollableAncestorRects:jr});const Gl=I.useMemo(()=>({active:M,activeNode:ee,activeNodeRect:oe,activatorEvent:F,collisions:wr,containerNodeRect:be,dragOverlay:Le,draggableNodes:x,droppableContainers:A,droppableRects:H,over:It,measureDroppableContainers:X,scrollableAncestors:sn,scrollableAncestorRects:jr,measuringConfiguration:V,measuringScheduled:te,windowRect:ii}),[M,ee,oe,F,wr,be,Le,x,A,H,It,X,sn,jr,V,te,ii]),Go=I.useMemo(()=>({activatorEvent:F,activators:si,active:M,activeNodeRect:oe,ariaDescribedById:{draggable:N},dispatch:v,draggableNodes:x,over:It,measureDroppableContainers:X}),[F,si,M,oe,v,N,x,It,X]);return Q.createElement(iW.Provider,{value:g},Q.createElement(c0.Provider,{value:Go},Q.createElement(xW.Provider,{value:Gl},Q.createElement(z2.Provider,{value:ho},c)),Q.createElement(bBe,{disabled:(a==null?void 0:a.restoreFocus)===!1})),Q.createElement(SLe,{...a,hiddenTextDescribedById:N}));function Hl(){const Ut=(P==null?void 0:P.autoScrollEnabled)===!1,_t=typeof l=="object"?l.enabled===!1:l===!1,qn=w&&!Ut&&!_t;return typeof l=="object"?{...l,enabled:qn}:{enabled:qn}}}),wBe=I.createContext(null),SO="button",CBe="Droppable";function sqe(e){let{id:t,data:n,disabled:r=!1,attributes:i}=e;const o=L2(CBe),{activators:s,activatorEvent:a,active:l,activeNodeRect:c,ariaDescribedById:u,draggableNodes:d,over:f}=I.useContext(c0),{role:h=SO,roleDescription:p="draggable",tabIndex:m=0}=i??{},_=(l==null?void 0:l.id)===t,v=I.useContext(_?z2:wBe),[y,g]=bb(),[b,S]=bb(),w=dBe(s,t),C=qg(n);Cs(()=>(d.set(t,{id:t,key:o,node:y,activatorNode:b,data:C}),()=>{const k=d.get(t);k&&k.key===o&&d.delete(t)}),[d,t]);const x=I.useMemo(()=>({role:h,tabIndex:m,"aria-disabled":r,"aria-pressed":_&&h===SO?!0:void 0,"aria-roledescription":p,"aria-describedby":u.draggable}),[r,h,m,_,p,u.draggable]);return{active:l,activatorEvent:a,activeNodeRect:c,attributes:x,isDragging:_,listeners:r?void 0:w,node:y,over:f,setNodeRef:g,setActivatorNodeRef:S,transform:v}}function EBe(){return I.useContext(xW)}const TBe="Droppable",ABe={timeout:25};function aqe(e){let{data:t,disabled:n=!1,id:r,resizeObserverConfig:i}=e;const o=L2(TBe),{active:s,dispatch:a,over:l,measureDroppableContainers:c}=I.useContext(c0),u=I.useRef({disabled:n}),d=I.useRef(!1),f=I.useRef(null),h=I.useRef(null),{disabled:p,updateMeasurementsFor:m,timeout:_}={...ABe,...i},v=qg(m??r),y=I.useCallback(()=>{if(!d.current){d.current=!0;return}h.current!=null&&clearTimeout(h.current),h.current=setTimeout(()=>{c(Array.isArray(v.current)?v.current:[v.current]),h.current=null},_)},[_]),g=B2({callback:y,disabled:p||!s}),b=I.useCallback((x,k)=>{g&&(k&&(g.unobserve(k),d.current=!1),x&&g.observe(x))},[g]),[S,w]=bb(b),C=qg(t);return I.useEffect(()=>{!g||!S.current||(g.disconnect(),d.current=!1,g.observe(S.current))},[S,g]),Cs(()=>(a({type:wn.RegisterDroppable,element:{id:r,key:o,disabled:n,node:S,rect:f,data:C}}),()=>a({type:wn.UnregisterDroppable,key:o,id:r})),[r]),I.useEffect(()=>{n!==u.current.disabled&&(a({type:wn.SetDroppableDisabled,id:r,key:o,disabled:n}),u.current.disabled=n)},[r,o,n,a]),{active:s,rect:f,isOver:(l==null?void 0:l.id)===r,node:S,over:l,setNodeRef:w}}function kBe(e){let{animation:t,children:n}=e;const[r,i]=I.useState(null),[o,s]=I.useState(null),a=_b(n);return!n&&!r&&a&&i(a),Cs(()=>{if(!o)return;const l=r==null?void 0:r.key,c=r==null?void 0:r.props.id;if(l==null||c==null){i(null);return}Promise.resolve(t(c,o)).then(()=>{i(null)})},[t,r,o]),Q.createElement(Q.Fragment,null,n,r?I.cloneElement(r,{ref:s}):null)}const PBe={x:0,y:0,scaleX:1,scaleY:1};function IBe(e){let{children:t}=e;return Q.createElement(c0.Provider,{value:SW},Q.createElement(z2.Provider,{value:PBe},t))}const MBe={position:"fixed",touchAction:"none"},RBe=e=>sk(e)?"transform 250ms ease":void 0,OBe=I.forwardRef((e,t)=>{let{as:n,activatorEvent:r,adjustScale:i,children:o,className:s,rect:a,style:l,transform:c,transition:u=RBe}=e;if(!a)return null;const d=i?c:{...c,scaleX:1,scaleY:1},f={...MBe,width:a.width,height:a.height,top:a.top,left:a.left,transform:Xg.Transform.toString(d),transformOrigin:i&&r?CLe(r,a):void 0,transition:typeof u=="function"?u(r):u,...l};return Q.createElement(n,{className:s,style:f,ref:t},o)}),$Be=e=>t=>{let{active:n,dragOverlay:r}=t;const i={},{styles:o,className:s}=e;if(o!=null&&o.active)for(const[a,l]of Object.entries(o.active))l!==void 0&&(i[a]=n.node.style.getPropertyValue(a),n.node.style.setProperty(a,l));if(o!=null&&o.dragOverlay)for(const[a,l]of Object.entries(o.dragOverlay))l!==void 0&&r.node.style.setProperty(a,l);return s!=null&&s.active&&n.node.classList.add(s.active),s!=null&&s.dragOverlay&&r.node.classList.add(s.dragOverlay),function(){for(const[l,c]of Object.entries(i))n.node.style.setProperty(l,c);s!=null&&s.active&&n.node.classList.remove(s.active)}},NBe=e=>{let{transform:{initial:t,final:n}}=e;return[{transform:Xg.Transform.toString(t)},{transform:Xg.Transform.toString(n)}]},FBe={duration:250,easing:"ease",keyframes:NBe,sideEffects:$Be({styles:{active:{opacity:"0"}}})};function DBe(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:i}=e;return D2((o,s)=>{if(t===null)return;const a=n.get(o);if(!a)return;const l=a.node.current;if(!l)return;const c=_W(s);if(!c)return;const{transform:u}=zr(s).getComputedStyle(s),d=sW(u);if(!d)return;const f=typeof t=="function"?t:LBe(t);return hW(l,i.draggable.measure),f({active:{id:o,data:a.data,node:l,rect:i.draggable.measure(l)},draggableNodes:n,dragOverlay:{node:s,rect:i.dragOverlay.measure(c)},droppableContainers:r,measuringConfiguration:i,transform:d})})}function LBe(e){const{duration:t,easing:n,sideEffects:r,keyframes:i}={...FBe,...e};return o=>{let{active:s,dragOverlay:a,transform:l,...c}=o;if(!t)return;const u={x:a.rect.left-s.rect.left,y:a.rect.top-s.rect.top},d={scaleX:l.scaleX!==1?s.rect.width*l.scaleX/a.rect.width:1,scaleY:l.scaleY!==1?s.rect.height*l.scaleY/a.rect.height:1},f={x:l.x-u.x,y:l.y-u.y,...d},h=i({...c,active:s,dragOverlay:a,transform:{initial:l,final:f}}),[p]=h,m=h[h.length-1];if(JSON.stringify(p)===JSON.stringify(m))return;const _=r==null?void 0:r({active:s,dragOverlay:a,...c}),v=a.node.animate(h,{duration:t,easing:n,fill:"forwards"});return new Promise(y=>{v.onfinish=()=>{_==null||_(),y()}})}}let xO=0;function BBe(e){return I.useMemo(()=>{if(e!=null)return xO++,xO},[e])}const zBe=Q.memo(e=>{let{adjustScale:t=!1,children:n,dropAnimation:r,style:i,transition:o,modifiers:s,wrapperElement:a="div",className:l,zIndex:c=999}=e;const{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:h,draggableNodes:p,droppableContainers:m,dragOverlay:_,over:v,measuringConfiguration:y,scrollableAncestors:g,scrollableAncestorRects:b,windowRect:S}=EBe(),w=I.useContext(z2),C=BBe(d==null?void 0:d.id),x=wW(s,{activatorEvent:u,active:d,activeNodeRect:f,containerNodeRect:h,draggingNodeRect:_.rect,over:v,overlayNodeRect:_.rect,scrollableAncestors:g,scrollableAncestorRects:b,transform:w,windowRect:S}),k=uk(f),A=DBe({config:r,draggableNodes:p,droppableContainers:m,measuringConfiguration:y}),R=k?_.setRef:void 0;return Q.createElement(IBe,null,Q.createElement(kBe,{animation:A},d&&C?Q.createElement(OBe,{key:C,id:d.id,ref:R,as:a,activatorEvent:u,adjustScale:t,className:l,transition:o,rect:k,style:{zIndex:c,...i},transform:x},n):null))}),jBe=hu([tW,JA],({nodes:e},t)=>t==="nodes"?e.viewport.zoom:1),VBe=()=>{const e=nN(jBe);return I.useCallback(({activatorEvent:n,draggingNodeRect:r,transform:i})=>{if(r&&n){const o=Kg(n);if(!o)return i;const s=o.x-r.left,a=o.y-r.top,l=i.x+s-r.width/2,c=i.y+a-r.height/2,u=i.scaleX*e,d=i.scaleY*e;return{x:l,y:c,scaleX:u,scaleY:d}}return i},[e])},UBe=e=>{if(!e.pointerCoordinates)return[];const t=document.elementsFromPoint(e.pointerCoordinates.x,e.pointerCoordinates.y),n=e.droppableContainers.filter(r=>r.node.current?t.includes(r.node.current):!1);return RLe({...e,droppableContainers:n})};function GBe(e){return ie.jsx(xBe,{...e})}const Oy=28,wO={w:Oy,h:Oy,maxW:Oy,maxH:Oy,shadow:"dark-lg",borderRadius:"lg",opacity:.3,bg:"base.800",color:"base.50",_dark:{borderColor:"base.200",bg:"base.900",color:"base.100"}},HBe=e=>{const{t}=qH();if(!e.dragData)return null;if(e.dragData.payloadType==="NODE_FIELD"){const{field:n,fieldTemplate:r}=e.dragData.payload;return ie.jsx(nb,{sx:{position:"relative",p:2,px:3,opacity:.7,bg:"base.300",borderRadius:"base",boxShadow:"dark-lg",whiteSpace:"nowrap",fontSize:"sm"},children:ie.jsx(LG,{children:n.label||r.title})})}if(e.dragData.payloadType==="IMAGE_DTO"){const{thumbnail_url:n,width:r,height:i}=e.dragData.payload.imageDTO;return ie.jsx(nb,{sx:{position:"relative",width:"full",height:"full",display:"flex",alignItems:"center",justifyContent:"center"},children:ie.jsx(OA,{sx:{...wO},objectFit:"contain",src:n,width:r,height:i})})}return e.dragData.payloadType==="IMAGE_DTOS"?ie.jsxs($A,{sx:{position:"relative",alignItems:"center",justifyContent:"center",flexDir:"column",...wO},children:[ie.jsx(W3,{children:e.dragData.payload.imageDTOs.length}),ie.jsx(W3,{size:"sm",children:t("parameters.images")})]}):null},WBe=I.memo(HBe),qBe=e=>{const[t,n]=I.useState(null),r=ue("images"),i=tN(),o=I.useCallback(d=>{r.trace({dragData:tt(d.active.data.current)},"Drag started");const f=d.active.data.current;f&&n(f)},[r]),s=I.useCallback(d=>{var h;r.trace({dragData:tt(d.active.data.current)},"Drag ended");const f=(h=d.over)==null?void 0:h.data.current;!t||!f||(i(UH({overData:f,activeData:t})),n(null))},[t,i,r]),a=fO(yW,{activationConstraint:{distance:10}}),l=fO(vW,{activationConstraint:{distance:10}}),c=xLe(a,l),u=VBe();return ie.jsxs(GBe,{onDragStart:o,onDragEnd:s,sensors:c,collisionDetection:UBe,autoScroll:!1,children:[e.children,ie.jsx(zBe,{dropAnimation:null,modifiers:[u],style:{width:"min-content",height:"min-content",cursor:"grabbing",userSelect:"none",padding:"10rem"},children:ie.jsx(PG,{children:t&&ie.jsx(AG.div,{layout:!0,initial:{opacity:0,scale:.7},animate:{opacity:1,scale:1,transition:{duration:.1}},children:ie.jsx(WBe,{dragData:t})},"overlay-drag-image")})})]})},KBe=I.memo(qBe);function pE(e){"@babel/helpers - typeof";return pE=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pE(e)}var CW=[],XBe=CW.forEach,QBe=CW.slice;function gE(e){return XBe.call(QBe.call(arguments,1),function(t){if(t)for(var n in t)e[n]===void 0&&(e[n]=t[n])}),e}function EW(){return typeof XMLHttpRequest=="function"||(typeof XMLHttpRequest>"u"?"undefined":pE(XMLHttpRequest))==="object"}function YBe(e){return!!e&&typeof e.then=="function"}function ZBe(e){return YBe(e)?e:Promise.resolve(e)}function JBe(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var mE={exports:{}},$y={exports:{}},CO;function eze(){return CO||(CO=1,function(e,t){var n=typeof globalThis<"u"&&globalThis||typeof self<"u"&&self||typeof He<"u"&&He,r=function(){function o(){this.fetch=!1,this.DOMException=n.DOMException}return o.prototype=n,new o}();(function(o){(function(s){var a=typeof o<"u"&&o||typeof self<"u"&&self||typeof a<"u"&&a,l={searchParams:"URLSearchParams"in a,iterable:"Symbol"in a&&"iterator"in Symbol,blob:"FileReader"in a&&"Blob"in a&&function(){try{return new Blob,!0}catch{return!1}}(),formData:"FormData"in a,arrayBuffer:"ArrayBuffer"in a};function c(P){return P&&DataView.prototype.isPrototypeOf(P)}if(l.arrayBuffer)var u=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],d=ArrayBuffer.isView||function(P){return P&&u.indexOf(Object.prototype.toString.call(P))>-1};function f(P){if(typeof P!="string"&&(P=String(P)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(P)||P==="")throw new TypeError('Invalid character in header field name: "'+P+'"');return P.toLowerCase()}function h(P){return typeof P!="string"&&(P=String(P)),P}function p(P){var O={next:function(){var F=P.shift();return{done:F===void 0,value:F}}};return l.iterable&&(O[Symbol.iterator]=function(){return O}),O}function m(P){this.map={},P instanceof m?P.forEach(function(O,F){this.append(F,O)},this):Array.isArray(P)?P.forEach(function(O){this.append(O[0],O[1])},this):P&&Object.getOwnPropertyNames(P).forEach(function(O){this.append(O,P[O])},this)}m.prototype.append=function(P,O){P=f(P),O=h(O);var F=this.map[P];this.map[P]=F?F+", "+O:O},m.prototype.delete=function(P){delete this.map[f(P)]},m.prototype.get=function(P){return P=f(P),this.has(P)?this.map[P]:null},m.prototype.has=function(P){return this.map.hasOwnProperty(f(P))},m.prototype.set=function(P,O){this.map[f(P)]=h(O)},m.prototype.forEach=function(P,O){for(var F in this.map)this.map.hasOwnProperty(F)&&P.call(O,this.map[F],F,this)},m.prototype.keys=function(){var P=[];return this.forEach(function(O,F){P.push(F)}),p(P)},m.prototype.values=function(){var P=[];return this.forEach(function(O){P.push(O)}),p(P)},m.prototype.entries=function(){var P=[];return this.forEach(function(O,F){P.push([F,O])}),p(P)},l.iterable&&(m.prototype[Symbol.iterator]=m.prototype.entries);function _(P){if(P.bodyUsed)return Promise.reject(new TypeError("Already read"));P.bodyUsed=!0}function v(P){return new Promise(function(O,F){P.onload=function(){O(P.result)},P.onerror=function(){F(P.error)}})}function y(P){var O=new FileReader,F=v(O);return O.readAsArrayBuffer(P),F}function g(P){var O=new FileReader,F=v(O);return O.readAsText(P),F}function b(P){for(var O=new Uint8Array(P),F=new Array(O.length),$=0;$-1?O:P}function k(P,O){if(!(this instanceof k))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');O=O||{};var F=O.body;if(P instanceof k){if(P.bodyUsed)throw new TypeError("Already read");this.url=P.url,this.credentials=P.credentials,O.headers||(this.headers=new m(P.headers)),this.method=P.method,this.mode=P.mode,this.signal=P.signal,!F&&P._bodyInit!=null&&(F=P._bodyInit,P.bodyUsed=!0)}else this.url=String(P);if(this.credentials=O.credentials||this.credentials||"same-origin",(O.headers||!this.headers)&&(this.headers=new m(O.headers)),this.method=x(O.method||this.method||"GET"),this.mode=O.mode||this.mode||null,this.signal=O.signal||this.signal,this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&F)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(F),(this.method==="GET"||this.method==="HEAD")&&(O.cache==="no-store"||O.cache==="no-cache")){var $=/([?&])_=[^&]*/;if($.test(this.url))this.url=this.url.replace($,"$1_="+new Date().getTime());else{var D=/\?/;this.url+=(D.test(this.url)?"&":"?")+"_="+new Date().getTime()}}}k.prototype.clone=function(){return new k(this,{body:this._bodyInit})};function A(P){var O=new FormData;return P.trim().split("&").forEach(function(F){if(F){var $=F.split("="),D=$.shift().replace(/\+/g," "),N=$.join("=").replace(/\+/g," ");O.append(decodeURIComponent(D),decodeURIComponent(N))}}),O}function R(P){var O=new m,F=P.replace(/\r?\n[\t ]+/g," ");return F.split("\r").map(function($){return $.indexOf(` +`)===0?$.substr(1,$.length):$}).forEach(function($){var D=$.split(":"),N=D.shift().trim();if(N){var z=D.join(":").trim();O.append(N,z)}}),O}w.call(k.prototype);function L(P,O){if(!(this instanceof L))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');O||(O={}),this.type="default",this.status=O.status===void 0?200:O.status,this.ok=this.status>=200&&this.status<300,this.statusText=O.statusText===void 0?"":""+O.statusText,this.headers=new m(O.headers),this.url=O.url||"",this._initBody(P)}w.call(L.prototype),L.prototype.clone=function(){return new L(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new m(this.headers),url:this.url})},L.error=function(){var P=new L(null,{status:0,statusText:""});return P.type="error",P};var M=[301,302,303,307,308];L.redirect=function(P,O){if(M.indexOf(O)===-1)throw new RangeError("Invalid status code");return new L(null,{status:O,headers:{location:P}})},s.DOMException=a.DOMException;try{new s.DOMException}catch{s.DOMException=function(O,F){this.message=O,this.name=F;var $=Error(O);this.stack=$.stack},s.DOMException.prototype=Object.create(Error.prototype),s.DOMException.prototype.constructor=s.DOMException}function E(P,O){return new Promise(function(F,$){var D=new k(P,O);if(D.signal&&D.signal.aborted)return $(new s.DOMException("Aborted","AbortError"));var N=new XMLHttpRequest;function z(){N.abort()}N.onload=function(){var H={status:N.status,statusText:N.statusText,headers:R(N.getAllResponseHeaders()||"")};H.url="responseURL"in N?N.responseURL:H.headers.get("X-Request-URL");var X="response"in N?N.response:N.responseText;setTimeout(function(){F(new L(X,H))},0)},N.onerror=function(){setTimeout(function(){$(new TypeError("Network request failed"))},0)},N.ontimeout=function(){setTimeout(function(){$(new TypeError("Network request failed"))},0)},N.onabort=function(){setTimeout(function(){$(new s.DOMException("Aborted","AbortError"))},0)};function V(H){try{return H===""&&a.location.href?a.location.href:H}catch{return H}}N.open(D.method,V(D.url),!0),D.credentials==="include"?N.withCredentials=!0:D.credentials==="omit"&&(N.withCredentials=!1),"responseType"in N&&(l.blob?N.responseType="blob":l.arrayBuffer&&D.headers.get("Content-Type")&&D.headers.get("Content-Type").indexOf("application/octet-stream")!==-1&&(N.responseType="arraybuffer")),O&&typeof O.headers=="object"&&!(O.headers instanceof m)?Object.getOwnPropertyNames(O.headers).forEach(function(H){N.setRequestHeader(H,h(O.headers[H]))}):D.headers.forEach(function(H,X){N.setRequestHeader(X,H)}),D.signal&&(D.signal.addEventListener("abort",z),N.onreadystatechange=function(){N.readyState===4&&D.signal.removeEventListener("abort",z)}),N.send(typeof D._bodyInit>"u"?null:D._bodyInit)})}return E.polyfill=!0,a.fetch||(a.fetch=E,a.Headers=m,a.Request=k,a.Response=L),s.Headers=m,s.Request=k,s.Response=L,s.fetch=E,s})({})})(r),r.fetch.ponyfill=!0,delete r.fetch.polyfill;var i=n.fetch?n:r;t=i.fetch,t.default=i.fetch,t.fetch=i.fetch,t.Headers=i.Headers,t.Request=i.Request,t.Response=i.Response,e.exports=t}($y,$y.exports)),$y.exports}(function(e,t){var n;if(typeof fetch=="function"&&(typeof He<"u"&&He.fetch?n=He.fetch:typeof window<"u"&&window.fetch?n=window.fetch:n=fetch),typeof JBe<"u"&&(typeof window>"u"||typeof window.document>"u")){var r=n||eze();r.default&&(r=r.default),t.default=r,e.exports=t.default}})(mE,mE.exports);var TW=mE.exports;const AW=Ml(TW),EO=MO({__proto__:null,default:AW},[TW]);function Cb(e){"@babel/helpers - typeof";return Cb=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Cb(e)}var oa;typeof fetch=="function"&&(typeof global<"u"&&global.fetch?oa=global.fetch:typeof window<"u"&&window.fetch?oa=window.fetch:oa=fetch);var Yg;EW()&&(typeof global<"u"&&global.XMLHttpRequest?Yg=global.XMLHttpRequest:typeof window<"u"&&window.XMLHttpRequest&&(Yg=window.XMLHttpRequest));var Eb;typeof ActiveXObject=="function"&&(typeof global<"u"&&global.ActiveXObject?Eb=global.ActiveXObject:typeof window<"u"&&window.ActiveXObject&&(Eb=window.ActiveXObject));!oa&&EO&&!Yg&&!Eb&&(oa=AW||EO);typeof oa!="function"&&(oa=void 0);var yE=function(t,n){if(n&&Cb(n)==="object"){var r="";for(var i in n)r+="&"+encodeURIComponent(i)+"="+encodeURIComponent(n[i]);if(!r)return t;t=t+(t.indexOf("?")!==-1?"&":"?")+r.slice(1)}return t},TO=function(t,n,r){var i=function(s){if(!s.ok)return r(s.statusText||"Error",{status:s.status});s.text().then(function(a){r(null,{status:s.status,data:a})}).catch(r)};typeof fetch=="function"?fetch(t,n).then(i).catch(r):oa(t,n).then(i).catch(r)},AO=!1,tze=function(t,n,r,i){t.queryStringParams&&(n=yE(n,t.queryStringParams));var o=gE({},typeof t.customHeaders=="function"?t.customHeaders():t.customHeaders);typeof window>"u"&&typeof global<"u"&&typeof global.process<"u"&&global.process.versions&&global.process.versions.node&&(o["User-Agent"]="i18next-http-backend (node/".concat(global.process.version,"; ").concat(global.process.platform," ").concat(global.process.arch,")")),r&&(o["Content-Type"]="application/json");var s=typeof t.requestOptions=="function"?t.requestOptions(r):t.requestOptions,a=gE({method:r?"POST":"GET",body:r?t.stringify(r):void 0,headers:o},AO?{}:s);try{TO(n,a,i)}catch(l){if(!s||Object.keys(s).length===0||!l.message||l.message.indexOf("not implemented")<0)return i(l);try{Object.keys(s).forEach(function(c){delete a[c]}),TO(n,a,i),AO=!0}catch(c){i(c)}}},nze=function(t,n,r,i){r&&Cb(r)==="object"&&(r=yE("",r).slice(1)),t.queryStringParams&&(n=yE(n,t.queryStringParams));try{var o;Yg?o=new Yg:o=new Eb("MSXML2.XMLHTTP.3.0"),o.open(r?"POST":"GET",n,1),t.crossDomain||o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.withCredentials=!!t.withCredentials,r&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.overrideMimeType&&o.overrideMimeType("application/json");var s=t.customHeaders;if(s=typeof s=="function"?s():s,s)for(var a in s)o.setRequestHeader(a,s[a]);o.onreadystatechange=function(){o.readyState>3&&i(o.status>=400?o.statusText:null,{status:o.status,data:o.responseText})},o.send(r)}catch(l){console&&console.log(l)}},rze=function(t,n,r,i){if(typeof r=="function"&&(i=r,r=void 0),i=i||function(){},oa&&n.indexOf("file:")!==0)return tze(t,n,r,i);if(EW()||typeof ActiveXObject=="function")return nze(t,n,r,i);i(new Error("No fetch and no xhr implementation found!"))};function Zg(e){"@babel/helpers - typeof";return Zg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zg(e)}function ize(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kO(e,t){for(var n=0;n1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ize(this,e),this.services=t,this.options=n,this.allOptions=r,this.type="backend",this.init(t,n,r)}return oze(e,[{key:"init",value:function(n){var r=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=n,this.options=gE(i,this.options||{},lze()),this.allOptions=o,this.services&&this.options.reloadInterval&&setInterval(function(){return r.reload()},this.options.reloadInterval)}},{key:"readMulti",value:function(n,r,i){this._readAny(n,n,r,r,i)}},{key:"read",value:function(n,r,i){this._readAny([n],n,[r],r,i)}},{key:"_readAny",value:function(n,r,i,o,s){var a=this,l=this.options.loadPath;typeof this.options.loadPath=="function"&&(l=this.options.loadPath(n,i)),l=ZBe(l),l.then(function(c){if(!c)return s(null,{});var u=a.services.interpolator.interpolate(c,{lng:n.join("+"),ns:i.join("+")});a.loadUrl(u,s,r,o)})}},{key:"loadUrl",value:function(n,r,i,o){var s=this,a=typeof i=="string"?[i]:i,l=typeof o=="string"?[o]:o,c=this.options.parseLoadPayload(a,l);this.options.request(this.options,n,c,function(u,d){if(d&&(d.status>=500&&d.status<600||!d.status))return r("failed loading "+n+"; status code: "+d.status,!0);if(d&&d.status>=400&&d.status<500)return r("failed loading "+n+"; status code: "+d.status,!1);if(!d&&u&&u.message&&u.message.indexOf("Failed to fetch")>-1)return r("failed loading "+n+": "+u.message,!0);if(u)return r(u,!1);var f,h;try{typeof d.data=="string"?f=s.options.parse(d.data,i,o):f=d.data}catch{h="failed parsing "+n+" to json"}if(h)return r(h,!1);r(null,f)})}},{key:"create",value:function(n,r,i,o,s){var a=this;if(this.options.addPath){typeof n=="string"&&(n=[n]);var l=this.options.parsePayload(r,i,o),c=0,u=[],d=[];n.forEach(function(f){var h=a.options.addPath;typeof a.options.addPath=="function"&&(h=a.options.addPath(f,r));var p=a.services.interpolator.interpolate(h,{lng:f,ns:r});a.options.request(a.options,p,l,function(m,_){c+=1,u.push(m),d.push(_),c===n.length&&typeof s=="function"&&s(u,d)})})}}},{key:"reload",value:function(){var n=this,r=this.services,i=r.backendConnector,o=r.languageUtils,s=r.logger,a=i.language;if(!(a&&a.toLowerCase()==="cimode")){var l=[],c=function(d){var f=o.toResolveHierarchy(d);f.forEach(function(h){l.indexOf(h)<0&&l.push(h)})};c(a),this.allOptions.preload&&this.allOptions.preload.forEach(function(u){return c(u)}),l.forEach(function(u){n.allOptions.ns.forEach(function(d){i.read(u,d,"read",null,null,function(f,h){f&&s.warn("loading namespace ".concat(d," for language ").concat(u," failed"),f),!f&&h&&s.log("loaded namespace ".concat(d," for language ").concat(u),h),i.loaded("".concat(u,"|").concat(d),f,h)})})})}}}]),e}();PW.type="backend";Oe.use(PW).use(UNe).init({fallbackLng:"en",debug:!1,backend:{loadPath:"/locales/{{lng}}.json"},interpolation:{escapeValue:!1},returnNull:!1});const cze=I.lazy(()=>H$(()=>import("./App-fe9505fe.js"),["./App-fe9505fe.js","./MantineProvider-44862fff.js","./App-6125620a.css"],import.meta.url)),uze=I.lazy(()=>H$(()=>import("./ThemeLocaleProvider-687f0135.js"),["./ThemeLocaleProvider-687f0135.js","./MantineProvider-44862fff.js","./ThemeLocaleProvider-0667edb8.css"],import.meta.url)),dze=({apiUrl:e,token:t,config:n,headerComponent:r,middleware:i,projectId:o,queueId:s,selectedImage:a,customStarUi:l,socketOptions:c,isDebugging:u=!1})=>{I.useEffect(()=>(t&&Qv.set(t),e&&Yv.set(e),o&&F5.set(o),s&&In.set(s),Xj(),i&&i.length>0&&Kj(...i),()=>{Yv.set(void 0),Qv.set(void 0),F5.set(void 0),In.set(rN)}),[e,t,i,o,s]),I.useEffect(()=>(l&&Y6.set(l),()=>{Y6.set(void 0)}),[l]),I.useEffect(()=>(r&&Z6.set(r),()=>{Z6.set(void 0)}),[r]),I.useEffect(()=>(c&&g1.set(c),()=>{g1.set({})}),[c]),I.useEffect(()=>(u&&Zv.set(u),()=>{Zv.set(!1)}),[u]);const d=I.useMemo(()=>oLe(o),[o]);return I.useEffect(()=>{MD.set(d)},[d]),ie.jsx(Q.StrictMode,{children:ie.jsx(nQ,{store:d,children:ie.jsx(Q.Suspense,{fallback:ie.jsx(lLe,{}),children:ie.jsx(uze,{children:ie.jsx(KBe,{children:ie.jsx(cze,{config:n,selectedImage:a})})})})})})},fze=I.memo(dze);mC.createRoot(document.getElementById("root")).render(ie.jsx(fze,{}));export{FSe as $,nHe as A,OT as B,Mi as C,ie as D,WSe as E,PWe as F,O6e as G,Hm as H,e0 as I,or as J,Dl as K,eTe as L,SWe as M,vWe as N,PG as O,oye as P,AG as Q,Q as R,ig as S,R4e as T,Wm as U,IA as V,Km as W,bWe as X,_We as Y,j1 as Z,n9 as _,MN as a,WUe as a$,xWe as a0,us as a1,Ml as a2,z1 as a3,rU as a4,EWe as a5,D4e as a6,ys as a7,_V as a8,CS as a9,YT as aA,hV as aB,CSe as aC,gi as aD,Ev as aE,ES as aF,XHe as aG,kUe as aH,qUe as aI,KUe as aJ,CUe as aK,xUe as aL,LG as aM,Gu as aN,G8e as aO,HG as aP,gze as aQ,EUe as aR,fT as aS,ek as aT,uWe as aU,OA as aV,sLe as aW,cWe as aX,uO as aY,Oe as aZ,FUe as a_,rPe as aa,FG as ab,wWe as ac,Ae as ad,yWe as ae,CWe as af,hu as ag,tW as ah,nN as ai,NUe as aj,Sm as ak,AL as al,eB as am,B_ as an,ue as ao,tN as ap,yze as aq,Ve as ar,pi as as,qH as at,nb as au,$A as av,W3 as aw,JA as ax,HUe as ay,pSe as az,e_ as b,Kle as b$,hVe as b0,hae as b1,dT as b2,Dze as b3,iWe as b4,bze as b5,dWe as b6,vze as b7,Sze as b8,Zoe as b9,el as bA,B0 as bB,sGe as bC,iGe as bD,oGe as bE,VH as bF,ce as bG,Qe as bH,K0 as bI,Ot as bJ,$X as bK,ps as bL,LUe as bM,pze as bN,Ox as bO,Y6 as bP,tGe as bQ,nGe as bR,wUe as bS,hue as bT,Qv as bU,rMe as bV,he as bW,Lze as bX,Bze as bY,zze as bZ,jze as b_,Joe as ba,tWe as bb,rWe as bc,_ze as bd,sWe as be,xze as bf,mze as bg,$Ue as bh,IWe as bi,OUe as bj,Sc as bk,eGe as bl,JUe as bm,MUe as bn,lGe as bo,aqe as bp,sqe as bq,ul as br,J as bs,rGe as bt,aGe as bu,PUe as bv,IUe as bw,BUe as bx,vp as by,RUe as bz,eJ as c,mWe as c$,yje as c0,BHe as c1,zHe as c2,Wze as c3,Cje as c4,Uze as c5,dje as c6,Gze as c7,fje as c8,Xze as c9,Jse as cA,cae as cB,zWe as cC,eO as cD,eae as cE,BWe as cF,eje as cG,JR as cH,tae as cI,T$e as cJ,Qze as cK,V8 as cL,UHe as cM,GHe as cN,HHe as cO,oje as cP,WHe as cQ,sje as cR,qHe as cS,aje as cT,KHe as cU,fGe as cV,VUe as cW,nhe as cX,zUe as cY,Gj as cZ,wL as c_,A$e as ca,Hze as cb,vje as cc,Yze as cd,nL as ce,Vze as cf,Pje as cg,qze as ch,oI as ci,Kze as cj,sI as ck,nje as cl,pje as cm,ije as cn,zje as co,jje as cp,rje as cq,Vje as cr,jWe as cs,Zze as ct,YR as cu,hGe as cv,LWe as cw,Jze as cx,ZR as cy,hc as cz,Bie as d,rbe as d$,DUe as d0,_g as d1,iB as d2,Q5 as d3,Id as d4,uu as d5,gje as d6,yVe as d7,uVe as d8,nVe as d9,hHe as dA,vGe as dB,eHe as dC,JGe as dD,N4 as dE,J1e as dF,mGe as dG,W1e as dH,q1e as dI,K1e as dJ,Lle as dK,X1e as dL,$ze as dM,Q1e as dN,Ble as dO,Y1e as dP,Um as dQ,Dle as dR,ebe as dS,g_ as dT,ZWe as dU,DWe as dV,rqe as dW,FWe as dX,tbe as dY,nbe as dZ,iqe as d_,rVe as da,lVe as db,Sn as dc,$T as dd,Fo as de,As as df,hi as dg,aVe as dh,lje as di,YA as dj,cVe as dk,lWe as dl,jF as dm,dbe as dn,tHe as dp,ube as dq,tk as dr,kHe as ds,MHe as dt,$He as du,OHe as dv,PHe as dw,IHe as dx,RHe as dy,c$e as dz,RF as e,CI as e$,nqe as e0,ibe as e1,obe as e2,zle as e3,Z1e as e4,JD as e5,UWe as e6,sbe as e7,EGe as e8,TGe as e9,Che as eA,$Ge as eB,DGe as eC,LGe as eD,YGe as eE,ZGe as eF,AHe as eG,mue as eH,yue as eI,TUe as eJ,uGe as eK,dGe as eL,sB as eM,cGe as eN,c_ as eO,Uje as eP,Dje as eQ,Lje as eR,Bje as eS,yae as eT,li as eU,tI as eV,Pze as eW,YUe as eX,XUe as eY,QUe as eZ,Nl as e_,AGe as ea,kGe as eb,SGe as ec,xGe as ed,wGe as ee,CGe as ef,PGe as eg,IGe as eh,vT as ei,MGe as ej,RGe as ek,OGe as el,NGe as em,FGe as en,BGe as eo,zGe as ep,jGe as eq,VGe as er,UGe as es,GGe as et,HGe as eu,WGe as ev,qGe as ew,KGe as ex,XGe as ey,QGe as ez,DN as f,WWe as f$,dae as f0,nI as f1,eMe as f2,J8e as f3,Ize as f4,Mze as f5,h_ as f6,Rze as f7,fae as f8,Oze as f9,Sje as fA,xje as fB,wje as fC,bje as fD,_je as fE,qle as fF,Rje as fG,Mje as fH,NVe as fI,Zje as fJ,vUe as fK,FVe as fL,Nje as fM,$je as fN,Fje as fO,oT as fP,dVe as fQ,LHe as fR,oqe as fS,QNe as fT,ZHe as fU,tje as fV,jUe as fW,NWe as fX,eqe as fY,qWe as fZ,gGe as f_,kze as fa,Aze as fb,Q4 as fc,lae as fd,iae as fe,oae as ff,nae as fg,rae as fh,sae as fi,aae as fj,Eze as fk,VWe as fl,jHe as fm,ZD as fn,xbe as fo,PNe as fp,Hje as fq,Xle as fr,Gje as fs,Or as ft,hje as fu,Tje as fv,vae as fw,mp as fx,kje as fy,VHe as fz,WN as g,Rj as g$,tqe as g0,JWe as g1,pGe as g2,XWe as g3,KWe as g4,GWe as g5,YWe as g6,Fze as g7,HWe as g8,QWe as g9,rFe as gA,bbe as gB,bGe as gC,pbe as gD,fbe as gE,U1e as gF,uHe as gG,j1e as gH,z1e as gI,G1e as gJ,Oj as gK,vHe as gL,yHe as gM,THe as gN,ZNe as gO,V1e as gP,dHe as gQ,mbe as gR,bHe as gS,mHe as gT,gbe as gU,Gve as gV,gHe as gW,wHe as gX,rhe as gY,Lo as gZ,Ir as g_,Nze as ga,cB as gb,aj as gc,yGe as gd,aFe as ge,abe as gf,aHe as gg,lHe as gh,B1e as gi,L8 as gj,_Ge as gk,zz as gl,Vm as gm,rHe as gn,gc as go,pHe as gp,aWe as gq,ihe as gr,Y$ as gs,eNe as gt,lbe as gu,hbe as gv,iHe as gw,cbe as gx,D1 as gy,Te as gz,a_ as h,WVe as h$,NHe as h0,DHe as h1,kg as h2,Cl as h3,EHe as h4,SHe as h5,CHe as h6,xHe as h7,_He as h8,_j as h9,AVe as hA,Kje as hB,qje as hC,Wje as hD,hUe as hE,KG as hF,kq as hG,Ue as hH,Ooe as hI,fp as hJ,p1 as hK,rL as hL,Jle as hM,Jje as hN,eVe as hO,tVe as hP,uUe as hQ,PVe as hR,kVe as hS,rue as hT,cUe as hU,Z8e as hV,iue as hW,QA as hX,b7e as hY,OVe as hZ,KVe as h_,gWe as ha,fWe as hb,hWe as hc,pWe as hd,vVe as he,sVe as hf,pVe as hg,mVe as hh,pc as hi,qVe as hj,fUe as hk,dUe as hl,MVe as hm,nUe as hn,pUe as ho,tMe as hp,CVe as hq,VVe as hr,Ih as hs,BVe as ht,EVe as hu,LS as hv,jVe as hw,SVe as hx,zVe as hy,xVe as hz,Oie as i,UVe as i0,Xje as i1,Qje as i2,SUe as i3,RWe as i4,MWe as i5,XVe as i6,K8e as i7,tUe as i8,QVe as i9,wze as iA,qse as iB,L_e as iC,Z6 as iD,vV as iE,JT as iF,ds as iG,S4e as iH,X4e as iI,TWe as iJ,zSe as iK,kWe as iL,$6e as iM,j8e as iN,V8e as iO,$Se as iP,IVe as ia,wVe as ib,lUe as ic,aUe as id,JVe as ie,YVe as ig,ZVe as ih,bUe as ii,oUe as ij,_Ue as ik,_Ve as il,bVe as im,LVe as io,DVe as ip,yUe as iq,Y8e as ir,q8e as is,X8e as it,Q8e as iu,Yje as iv,RVe as iw,$We as ix,QHe as iy,YHe as iz,bn as j,hne as k,s_ as l,Mf as m,Qc as n,EF as o,ioe as p,no as q,I as r,Dd as s,Gn as t,rn as u,xo as v,ti as w,dl as x,Jo as y,nye as z}; diff --git a/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 b/invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-1c3007b8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a61a0be57fbc830196e18e6c35fdf7ae5f59274e GIT binary patch literal 27284 zcmV(_K-9l?Pew8T0RR910BV!~6951J0M0l70BR)w0RR9100000000000000000000 z0000QgC-l5avUl@NLE2og)|0WKT}jeRDn1EgD@{_5eN$UP~=MsgF*l>f!1UJHUcCA zhJFMf1%+G(k!cJE8zjIrir)Go+^wqOpdq9cY+RxDIEYm!Z6qStI0VpxFG>FYGm;xJ zL{{J|TfP5L#QV)zQcN67+n?i&i?m_lP9%g}4tK~bW*14zOe!pgX@@1K3`2PGm~kRa z44c@3B?uOueI$A4C4886_r}zw@7UbtJ5aw~|5!V2+&B5rQ{r`nhQ>t~0q*n=DeGyX zE~Vs5_=;0tnC7m9e`)r=+$1w?|Hi(0gvH_n!e?GtG(zDG#*#zKxR0odbYe9Bc~s}0 z`y^S;>YVwX{JGoxB+HH&-TRL<-m{g&P&X*SP(w{HS@j2#8fvHshPn`f+lC#+4rA;_ z8p_QIyL)#lDpg6@v>UV*ilsC_N&`$_;zO9g0BKl%o!C$O@w%6O)t;uW^Wk~7{U2B2 zsK|+f95~R8V?QCmU9N>Cu90ZY#?M9KD>sS@6%_|$6;Df_^v~*{YW=8g`tO>d*3gdSu)6IU`%m>aHFPcNvuvgp zHPSV%8m5c3sA>FT?hv6{|C4l^Zc8W&M2IC|z^JQBi1k7Q?KCN0chZTDo zA!6nCpkSH?h+L=vA_fQ$AwtAZLWvL|zyeEIFu+<;Sjqxx2_@1{ma>+mY*QZk)_UGs z-P1F>`w1l^#%DeN7!hHjGPU!9>=;!fN<5xW{u7073*upaPe13b)QAox-6b6z@@4=D zOzTMgpZ1*@*lz3{iN!TbdM>>hxk(~B^@O=+l*0&P3nM<7D`$fLGrLJXQLQkQCdnb^ zO0ZyZcaCI10jaXkwUtj1Ft#rAgEsM@AnY6~Id5QhFhv}k@WAYP!Z6CYzcE-DMkY5MB~q=xvx?m|PSed>@C#e_jeN zU@#NmptrJ<@lEAcM8bX;!SmzSTK&6k*4w$neyNJj%&DLW519s`5fUkosDuW>@HmL9 zVE~c^H#*ubK& zZDB?mLI^?p!CITTbGW%(V_7ZeJineA%-ox4jemi;j-7j?gEfQtcNvfzBn1r6if6m~@uqV5wxbSnUoqh(ZuJ5Wtu>2g+^0Y6CU{KLoBA$lf?Gc`F-w z4@3a+Pz*f?`4D~U(9s@@fmmq_grNBKfp`xT5JPNu2m&AgJOHo(0>BBAzzAgI=z@>~ z0e#twFoL-!!V)>L+nvzP86!ONRQAIT7JWFw=DAVt9Dx9yVmdu!Ds0xdF&3$h1@Y%j zdPdpT^Ef~e8fQOVbn7@WC&`zCPBn9C59Sg|5?Kz8VgL>{pSIT5dAdDjHrIAXW<9-)(%JmL_Wzz21;2e<(BrXbLY(UeA#Kw~`P85RS9IeRW9e z`^rFYx>-6~J~@rBVdmGoJ2h{bM!G$VFBp}colGO}`kcEkie!G>LEQ8n+SBa6l0Hyp z<@LGB`0Y~9qwfoWsP;0w6+s+5fz^3}S}NiLV{;DDMa1B{n1a+r)PTB}g&Ze}MG*q1 zi)dpO-E$2Cu-2%u=G+bhCaO&vY(<{vw|{O1is3~`Ru+`OlwqAtyY@JN#0aC~tqJpm zq}zrqJN9zr_WOcG%aXEk3M6H+iYmBd45p3+sTKa;Cc@KoQ<(~N8Z>G~*MXr+uRbgT z1`T23IB(RLaXb?yO zs`XQhIv9|zctU}&g^p5eTfinnF+~*iigC!N#0+9EVu=x_5IADIO3Fi0Md;Tcq?C_; zkO;3CvMwTg7lJS>DZVEN-}ewBQ-Jp%F|H~P|LP(;BgW65eEi&b#?IC@eW0cOJ%jKu zNsLcafKOG3o65(ZO6&&H;mN6-0j!BrIAp;(2N+Bqc}RG|Mb=ZOLaeF0<%=j6vZiS1 zXB9xzU^E+XBNFU_hcd%~TZ4v(2%Vs~Ev|*j7>+QGx>17$kQgUD0x3iS5+nIt2!><` zUWW?srVwm!o-;^X;E6}ZI}k3hhx(Huj6fp1>%yp8>e4sNND+~TC@}uW5@FH>UIA0o z9JD21<-HjIVA-X3K#WWujO1biRui7i1VA4Hk%}ab!3HOferq)c`+sI}0BHEhqt`|M zedfLc|Gs2h`thZ|U;q7$-`_IdvfZh^%M-6YHa)dGGrustFu$iF!65S?+5lF1V0MaA!rcsk3&cy^jWw+ zkHF^<`aDU02>(|=d=-hW(|aSxeiN?m!}CMZT%$;V{6z$Q46vUA|6c+5PvCwNxL)EV zh`|A%#l;B2l;U?4oF#24lxYWZxPDfV-pSB(6Vs)CW$N@Hrc5W8B7Kq}X`G^N3xRY$ zlcw8|zFentjv*$OAtA?!K>Cab&-IEDE-#9Ez#e!b48@YJei6RKmZF=aH)Gn(L; zgtCOC%OZZD-0a0m$=ao0VOdztsIsb@mCRdJf>@_u7BjN!#+2PMWtW`Aq+&;nsanfa zouzBJQLqaS@*&TSpHcl>H!x5~NePLJ@Z6(3*diNlEEW})w0M`3E5GH~VxqQoWTZ0u z;luiPUo`R;0}?leq)-(4yk!ukk)hz=@!*)yu$uF@eIXasIQz8-glG*0Gobolmu6=x zpnaiT*KhzPHC??;z5BuiRWFGuxu}r6R637W;n#!01qZVbI>?J&hnjYmH;?U;+{Zmz zS$gh_f`W@;5Ty?HSKPH0)l1y3p|RH#6bpxU82wp>Qs$tv#VuEc(i?=TBKHsCH|?oK z|KLf01IA}FEB>co>{#3K=b3wS5k_I#fa>S7?;+VvP&WLKFbSdi~Z) znhX|6bVD?(<^c)Y7vP0Y->F;Fz3PDWi*@W91ONEf8(>{uo0VUu2G!=F`bkZ*rpn{{ zZjr5R?{x5LZVNcaF)GB@5*7>1j= z+@+^L%uRus5{RTBk#4ERHfO*izGRQfuv^Vuwnv?(;;3QLu99($tX}d4M0rPtd4nG7 z_fWLk)J#yvqs5lC%aE>EvFZ;l+_}PXQ-fp8x^DO26;=03?V(Frg4)no+14 zq(OiX7lN`V8$gb7Be;=B5rC&&S_Tc%a)t#|;N-%j(8G1K!l|)J#dt*oV$3}>&KaZW zHvmu>K-Lgto=x$6F>V2{kT!z|!(Psqx}Y}qgr5RO+yoTx6UQ(M;%pTGz6KggVBv7q zuyTQe2HL&g-XqXdSimf3NTP$py_-q1a4Si1+@0WILCgT>46(e2mj*}$kb?G#8lc~z zV3#_eiycBxxkrbfN)QQG0lc8(NK$=n5if$J!G@+ZDS#8JT8tGJt4?A@sV&3wO^+>` z{Y6vyPTStIRFTAwu$uEjw6udlXik>wSxgfDB%>6pW4 z=PPpv=Z05hbX$UhEM!e#8Wa_3a6avs#@COI>!5)skccA5kxg1_C@>0)1GZ9WBbu3B zloZVj5sqxU-)?Ol6M0Ri7+mf4a86ba}p@W&Toj`=4p!- zqOsz!iOQ+{!WyEQ3MhPVXDW6SV+2oXw8urc#rkRCA(e;p2bQ%)@g0bi?AZaeTsti* z^1J)w!A)tP9~nsTVl$7-Ii~Wi!!Q&_?dd%JOCr%rMGMxS9OA|+AE8LP`F^o2#L~Ri zj7A_x*cFfQg_7#w-Wp5y%D-wi9Kc`A`83 zEUfHsC{9T}d5u0g=$Wtl&Bd-lc@64^krIklb2U#e8q{6k5~?MvGoy>-MGaj6 zMC$`~1$Y4i3SR>H$hVfR2>s#YRqrs)Ymyue#UBbqYtJx9a4N56+W)Y}UWl87i7MDu zJjghKV{V7&rZ`>to!Tz?HF0)Y4V;^3po$|Ye+fa{QV}cnxhb!TMaV>jE#5BWlR+LCG*6*rE z{uenw7MJ;c=D&*m@=jiTJ-HQ+p6b1nEB4vrwS2C{OL_xgdj9@#jccw<`d1A*aWTe< zEEVCilt<5%V1ct=c%=_j@iof8h*)npouTKw=)B<7-Eu9LVd4F7Vp7*ZjnT^(3F06L zsqQ6HX-+FLOrfBYDG3P#B*Igef$%|WUCBi+&#r{JxI9Ru zDDZpw%zPO~kse$gcAUs%Cq8ki9>=rJm^}5ghbXeF-Pa?=draK}U;OM>xP0%RO{xb1 zKLWWHcUj8!`*(=Y*;|``LkrA<=^><+wV>mkE(jq6Oa!C?BshXV?%*2B#Dy(IU2+Mn zP8VFr=D^Ld-?xYp*2#?%noGDuDu46tYse|GZa0WckxSWw@*hsRY0!EWQ^(xql;h&2 zhv&V7tTC5`oJJj-kBREayq4%x{YZ!<6PYu&f4CM0J16wr2aO0tiNreK|C3ao=z^o8JFgEsU^6{GG`BJ#MV`B3%I4xe=aa`f89~ZnN8J%1FOq_=TmxkH73KuO^ zn}($z!3Q(Y3z445JEybB2-RMiv6q~%Q`?HO^ATiSC7gKVn>Nb47{@W~?rIes9+9$b z{PIC9s6}EQGxe%_5xJhM<~Ds%-M=#rJWA%Vr*qC{9ygzGbJWv_9aZ?+PN=ot67VL` z64hrd$+Ijd28nc4L;C7@{_NWO+*E zoLf0HU3RKC7hU=XxeD7vOcgpMLfsP+5Rg0ab1`p{aE%X?AO-G@xy>jbVo}&<+m(`7 zAj0Ko9kAEj`BST!%Rtn2RQL=rPmFDhq2;rew5M#U4&LkWK0N#%@B&be`*Gq8Grr7A zajKQb*pD~##l{)9E}nsa5En}9X-Qy7B&;VX2CrL8j3+jR^t1X%0Mi37@DT?z&0|1} zX%X}S6x6+8f77534-pVp+)yfh;iN!P@K>G@Kz)0b<=LUJlSTFh{j7=bse_VFHfiCk;OvWGA z#~b)a4lO;)SH&e5IK>2o@`EaTKQgom6x5vwXrzD+e(?eZ(DO7(|8a;=mP*vD?BX7GcPQ$^h+=F(9BL+s?_2+eR}qR|+`efOTu z^xw>lxxVyd%-osmK^~B;1KeZ)kpTF{m+&->SkcBhM$L#B4U!xg? zK7PaX+ydjRd%hok951uz!NJd2Qt?Z2?xn!^O%MNQ!UfX(Ka;e}RZi>)BPw*+kz4F417KfmB;3Ox4ywA&G)5kPHT%a*6@+dN$HA6`Rj3lt?yy=4)MRW zx_78`;>*tHWy=U6D#&nF-Rp3m6T0^u7YCDH-Wg7DxV_dZRn&h^xlW{+Hr>lOyHa~h zk~@|oyRx=Awi%mRq#7z3PG#H&%kff4_YqDQNf2d+)6Py~O4P$|pmGf4o(&HD)SEaVK*!{2Z^8w6X zaEc#dPjM6I*Nx};6F+i4RT*CAH;pF5oo-Vx2d{B%GECsBZJK8!$y3b)>3KiBUQnMX z3FM7{{3mt6-|e`Ng`qC^tDWTl@`G-Nl@PA0;i?r1DQTwpW<{t<7$~t9;Pg`nQ1?GE zD=cGh{GoG^h{kzic8q2#%YdfWfGiAPh1W}FuSYyj)WxU@)cb|wBDCl=dL#dW$nYCo zoWE=kJxDZN_1kEHbcvPn7+g3swZfSugMgE_tpVoC)b(=fjmJ=?&Cs-SMii{IIjX{4Z4 zS5F93Dv;eNIQ6*>jE}M)wB(|>mee0z+d|M2t5R3-$H*VZOOAWgDHec%7g=+BsgtuX z_8<%R>@k$q^tm6Ex8SBjjL&{5UliwQGfNK(y52nFm)E!mssP{{@bRtNrG81y9>icB ze{(Ng#itdq(kO;CjXaaMjK0Z428f9PXf6QXG)pn1a5}=-Ik6_<9)tM{Zr{B#M?6Q7LV4;+4r_R z{mDokVu|6YbaiA4cWumf#leX9*IO19)mRy|?MvIHqv*3hK_i*=(b4uLDRp76^w*+q z*3O;TeNdA}5B}?~e*?Dnk6JK7_<+!vTgt!tZp?UjR4en_KW!N7YE{3>4IS`u zS=)}Wcjesv{QVEcsb3)O-^?+F=5Q<@P*L-t)V&Y4jV(x?synn)(?LMAKtGosB(e3* zS*hYz_tm>UvH|-&q3F}%+Bu)X(#7y1P6;`6_Md`T*22!GNE(#jp<3V-GA};j^u;}J zTpWYDbgWEbO0InX@9uNq=R$Y72``jke`FXY84je~3H}pBNFad32fzud9wDp;dJRuV zA}bi&2t>)39A&lRy)RKCf9|Q4Bx=rC2wZ1SVZW|V888!S+{^8b)mwfZQvMaLA6qXp zdbcP7upHRulc=d!fd-12 zeieK=oO!PHR({1H|6_k*kHEIzHI*f#)P_@))bV2JBjUWJb+g}W!QQty<@^)n4c$le z;1M#V3Eo|#>gE+0`%s@m27ML?-nS&M;6Q?G$Wl6_auNa5^EX3)VccPz`TQBYw)MAF zsVY#?1eMAIvgNw55U_vdyES3#OacTr4#Y{6;XqvS?os^X9(z8GGG^qZ71n-4FYa)m(u|XDS3QZ=(MGCktpRR>Ir}ZG&^*4t7 zcR#mI^p@>VzUM>QrL?V_T6{{X04u^_1I|-X4FVY9sEh>Y{`>{t{BCM3lCL~)ACP@w^dIc zDi>?gzzsb`>ur$~a23dH4bw-RzQj$q_p1Iw!6N7s2!fAflm~5B#ZC3rt%c@ns5V=P zOZvsuScA=tA(^J;?;A6b3G}YmXs`lTy5hfoqc10k5A8U4on}H{$~5TU@+*U5#{5ny z>|Jw*rsHagX4n6sIi%7;0ZFdXtspIv4^ukAgi5#kI%f=*4m!`Bx_Y~&LBo4K$B3m zj6nhIbKC+ItuPq$mn+C-+^3#tr7wN&D|lV%{$BFr$4XdS;sbXs-#U~lD8?tV=p_Wa zWf1%}>R$N_%Ip9xTT3|d9!yz=n_{u3id99T!Rww~md>o&WVj&nu<2UQ@&AAQ8_#2d ze_E{)`G7X5PW+wGB!y50ez`MMzmSk-zthU%?NJ$AaH*2pyI$F*IMVY%CmW3O`E3Vb znS)u6cS#%n6VTVezH3h7{F#2EjAcNC7r={;KNz=DRxK(*^3&1x@oRSY(w#kvKp*%fOG|yXua2 zY`uTC(R?BOB<4PTTI?SDt>lYQe%7PakBQ<3tu)~OTf4;YU3weN!= zF~D48T+S9TyV!3q6-x_4!oOz(_4Mgc0rT3ug`gt1!Xfr9;|sHd^q2@wpMwc0?z!ag zNW-BM*(1fH|Btje6|;%agU6_juBXWQqR4Ki!-`0|@Fn$q5uwV&!`|X~flagHH zMl44hodms!1GMO5AXT2duY>{e2i2gfOQ>iA3mAyrQ3Z^2UDoeWb007w zfDJ8$1Y!BUhMlaC5NvH83A1vIG6fJ@0LceYfACi_j7TOI+OUj`*l!|-u z6ZpI{?mFIPr-?d;6CG~-)V?dB%5TB6 zW+JJ)r`unm(do3``%pl8O=S&8d>}Y`cS`F-(TVm6MB>Z>OUSxXlo8*b)Wy8^c;Szb z%d2M^w&a&i5f=QNelm`7^|k8K7vtAPG2^s>gj88 zQ&^*EeptzYxH}(FY9Eu!o`R{NVj#oNAi~|eyZ-kR`FFtRpfuF@_*B`Cgm1R&`;Dcw zwGYW9Pj}-Wl-6EdKx!EnZQ{1Dol7BzL}PQCMri}2g05;B4njF4Pj8UxYagC0`F_+l zQ}W|lo#7R-|H7nYdun`Ee3YTT+cd6t2GfQu#kgg;$F7ZA>#oBzXTj8EPQy#F>hQ1E z4@2*F*FSwsuC=U?^IpcTUs^p}*jj3bbAWD1Rv2LEuGd{nPCxt52LhJG-N+X(&Dc6j za2vOQZa0JQ3BqIDN-=HN8B8$_j48vPE0c+V-BQQtnlE5m!9!!d@lTZq4pYsk(YN4*{O6e^<}!@(`s-_t#KpOpAKG|^xX4fpY}D5h){ zbR<%k+rcedi^5c{Gha-ib6cP2eRtUN+;cQhDBa3;9q9WNAMCn7iF^LERRvY$$|f-m zE*Sbdjz8_@AX2EZck@GsSiFXtD?daM*<2?HTO5(5Jj+B^B30zG(EsMiNaDXLs1@K) zOxL{HoOX{Vjv30u#Ou$?)dS;b3-4Og{lnCiSwpPIZ}4*$dDzUMoVL#1%TL;7DN{K^ zIqAM$DNo)!Vs{d}=trAGOZt9^{f={b_&SK~;`jbKIv+qk(0+8d_& zBYh210`1*Beg2RsWfqThRC!lLRRN(43i44#&G3~AX^Ky173kFv^ZX2#&3xr?Lj?^( zY8A0aRICH4Lda506prpovWjD&1VY=h0e;6QO;&vIusr=v3Hs%mC1s#41g+(MYwgTj z%j5q%Z(sG~IAUJ)0ZEQ%m@HAGuYSF1f|mTp;c5N!Q|nxk3t#*ZJPYKPUIcIqF#N~E zAK2>JdgXuL&*~aiwE*&+H*dz#4*xs(D-f4J3_yqTfpUPm7>(hU0y?SCml+|zpq77` zy{KNEVKyu?KUO2CD#Mw-M2zE!w{sC;plY6#CO?$oTl5f(=H4a9r-2rIT?OoCrKzqY zkDpF;sv^t@1YRYuz0-LP7*?~yc&$Cqo@#v+3YZc<$N$kSe>fc)Ac2}e*DM1pafZ4N z4qePbe=J4hA^?;GKYfOa(T?cA>m1L*3bgu*2m-81zc1-i(+}_}l&7?URp~zDqYrHGupKQkI z_IzZ;-`m`V%*KsI9PrD97WG*Fk**EAce*%R6P0~jE70Mgr&hg=$&+CX{MM6zm2#P@ zk_{Jyb%w!{6p-}rV1n`M`G&Fhnc$^fHR=`CVk2Dt6No(#bp<9~UkEIKq-#UwDcT3j ztDZvw(qL)=n3tTto!2#}2cwThYo8u$Tcq#i}Ia2OT-J90Ua~qb>*siNNKIVOwplqz*&T5?${fEQtybu3X3cMo~dh zK)79mQs7kz7ZA`!uKjv-hGN$-RW>y7XZ1lJi$gw$rWffb1-Bx&Rb1E=N*3BFil`$- zGBSX?4*LwE0wjZBq#4lL^gxWFFl7ey8bRjcSg(jubmsT+gFQ+MQEUkNfQ7&{P8<&q z0R%-1hJwxpL&Aj!+wQj42oE2u?4Tq{k;#m9T;TkO02oQi5B(_uGefTQsKTj*ZN^ks z(($`*xRY4;2RQ-TuDj>dXKVKMy2mpZt=;r?`L4OXTRR90c z3K!gv4K?X#7o8ThiF(B4+{fG^&c}XYH^ley)Ed3!6V2C}24$VXK|VF8M%2TaT&vU0 z*J?(gOr^}&u0yhD-OIW%n6vmA?1G$L#y>J@Y1pjz zNZKv!8(cVe2${>E`JU>#pcN(tWG@d#qn?P;XLCsJEr>uKxy=fqG$xG`wYa*YF?1PZRPcNJc25 zOU7x&L&m?=Qgs2^1nr2XqUq><^aOgrMB>@iCLSiyCihHUntYiEO*EOJOl!;>&C1Pc z%{tB1%^NJHEfXynmP3{kmMc~VtPWYlT4h*uTJfwtyntXLFo!WmF{dzRF|8Oj=8}!C z&6*8l^V&Av_N(qyyDGaDy8*iiyBk%5f^jrpKmkNpRSRGmOnIH-djVQty zeG&;K)*sLXM6gq<@$FMCUNV%HKscb0+}2WET+sk6VKo?V;FMI#zBN8iAhA(NXP&mcG!E$v_zd1U8nk10DpWjUzoWp$8L?!B1vr zK}sa|wCn?%^k!t(4GX|B3zz90EvblbO~G4&t>GiIqye?PulD4LIFx9M;jx1cix|b& z5~1QwoGccednYH!_97~20sb{BDZFs(UCwk2m0cS!tj zmS6aJ&t#9K$P>4{W6g*OAdw4T27dt13BA?jg%?Ns)x3xWlne|ixI)yG<8+s@KRyyZ z^5eTGu>bZ&vz|b$l*g5-b!7|k*zAx&8LaJT2c7U>P}!u2iQ{Bo;Tf|R1na1Es7_yY zlqw;G+&q_UwI$OjGsE6ub{EgY z5XqbN`K95=7_rJ1;>V95gd(sC+2@5ueIpU$1cPP!c&S+ThtW%EBwn7V5$KbghUa1M zLag*sT76plYFwUe0Fivim28gEK$ku%ynvn#mBi5^fQ$5_rR#Tz)DU%ylB_AyNObdO z=hKZsS#1?tBWy>}@yN^P%N^Ojhmh0)yNKA2=Wi{@9vw$!_h?(S;K-=pAy6r3P)5I6 zWWe2XPW9p6K=CU*HhlV`2y}kNJgBMf_cR!Icy6@G&M|*aS^L2lr`+v>r%>4NLi;Lq zGKcI|C-C;F6|5Nkt=dP?O>Z!7n33<;3dwdAu z&Da*y)lIp#Z88R}sGZt?l3~5g;4Kg&QQ@2e8~2xru^z(~*ncXHANeYZmEGW(*=$*p zLn+Yxjaz+*Jy-hGF8ayU11=i}lFolvqM0&!#qbK}`nE37L~+LuZJQrX0X+2;7ZxCy z=^049IO?eHwd%8NlhLM{-e@Vpfv>2|L#2>;8|o5T-SQq}(?*p?SMqNKw7xt|rVFT8 zOW>4n9{p8=9F$9Gd4`M0Ho$eIyE4kLcNKs?NL(ty|DN7hU@x|p8HWX|$Fj9$U!4iK zax^bxRpvBxMTzPv*ai-c_l$~aWvWow&`~*=+5ayXqEZ9TDu6~y3L`*!PCe-9qy9FS z0J2D;GP{|ca2BiE4_{10<3MGSR9#<0I^~8RBw$2ypMl3ZeA0U@>lKd*G&OD|maL6^UG^6Yzjr$(qz`kQ z=C3=*OL_g=71cXB-gp6t9S+2yJ8SMRdMIez$1zwu;q!4Dy;eQ~j% zGO1Q~RTV;-e$ltvDy!np_dI(z8m<8RQZ70x1Mg(=%+uZ+ON_N_qNnHV`>N-AaS{{w zIxh5IZu|cV5{~s}xp||RwyBOn*W6kY5TzBB+;Z?4hw8@$q-ec;1#@00HKgxz-Jc
pU=<>C%EZ%;0&x>w>{M_GTjW!?Ij#Nx$0E|M=EOG-{kf|0|L*i8^j~%md1uK8R;&Rl@gEn=3SdD$r0R?j+FF z<9jLLJqL&FZOh6a3WJ02lD6zj;b@z_MY?R?-!}$|1F3&+ZxORs!!6F0t&(RkH-2k- z=u&sNTRi6K!NbIy^o5#!%Hv8zjwfwH=c+&+ToYX(XD!$%PL4|*Xa6L_WdOu2dmH1*|9 z>a(;CI=`Ch&PsLqVqb>T*v?%@)#XF&oxES`eyOi-BX*Yc8*DK5$i) zLvt?1#dofSTd>$fAw(iqTz@FS#g81qwx^ZpJBY*K$oh*u6SUDMxe2GxE0G#W9JmNF za`*m{El%S4i6^r$p*=}?xW*puT_sG6U4*E%HgHKo=D|Mvoq&kP0(cri2FyC@XHjgv z4~_|#ve5^Q06`BHpX-ZVS+6O8`zIO?>3Y4mfESP^Ie0K~8A3$KWQt||RZ2VG{kPPr z^VzGUBwn=;!a!zIn+#GS;s6YETFYRAVkpUz3yV;6a#T>IxDj2J)YrM;O@XE>EP4-z z3ClzoOz6N-+R_(zMW_`4P{9-&{}p`i`Ch1l`d0K`J{EPJxX=xW?M|6tPbD?;lyoB< zss6E)B(Y(4{yUw7=1y^>-tai)#fTfctJ2o|IO*@bxjdH0aae}RZ&*;FqnGJPoY*+- zlvI@OLo3pO_PG_WHwX$Qvxdvn0ZyOD3kAt&clh8%ZT>%JKBgiYc;vQe5R=TG)a?+<5cQTfv%y8@R14iIazeLP@8%4w( z46~8($)-DN(CRkvshuncBIylrb7eo~UW97VG6crt+p8JufHzSEWGuD=4YH{10KA4c zj?+wf!+%i%XH*=&#BC@$ec`&dODsbLAH$~c!a~j*mOWc!Dj|g3mRxpTzHoF9$;I5m zPEe(WeGhk(n>USCMT2>hy5^MIZt<~vDRsRhA85Hta?!SPWs1TVcDC{wIY!_hK&Qe^ zYfQm!XoFM%B`l-{udzob#`RmsYPL@c5HBJ4v;Ehp^^!a+4?sy1Ba>_#9|vUA(_S=+ zb4J3pDM8J1clPq>b(*9Ir=@qy;^v0zqyRh<<<#zD>=JN~9x93NFB+ ztQH($AQ>LPi_an%W$V_I(vatU;_p89jnDx}bytpVcQ%z>VMm#SQ7Zb_OXo#N|r?DsdDDnOJw z&t}CutGIi3a&q$gv&woOoMPg`H@c}e7LuW$@W_(Rcs%IJXmFl>a0F5x>~U5N%>Cw%zaS`Mxiwd4Mp#KzAd``o zGw5{D;=i9Wlk#?AV9iMh7$uUHpFC9~?QJ2txzrpd!xOdvPCWD@ zX2?lNIto772XO+&8xE9ma3rkBg|dfc*vI~IOBt9xK?-j7NniscE~s^{e;6oA!dI18 zJVg+vBKhX5ZHi<$Wy-eTSpKl=kQZ+5Gi9^&Pn4^$t}gW2s@X9~RPZh@%yUF4-Svf> z#69u)L70ztE^{EB8aEh|%WR~1mv3eXpJ9L%q}KV6XmXuoFH{juKH+E(Tu{5>Op}Qh z<&>7#hf`0E_p>$)nxOb$D@dmZC}LJqeLU*4sojFfk5}kC&$X|;MpLEWJV}H)17ut8 z6z*@kfF(r`0*P@>fMYilV~ZlgBN$1qI}(w zXG$`B|KJM0Np(#1R5@+4GeZVXk$4EmI>-^Wsbo-uAVB|%O(Fu{QxWg4X)kVCcq-k%g!j1>^cNO5+#n+pI6!4nk~-3W z^@31pgB3R{hzw^I4y5XNaSHocSLlXK*uBmn3tPlpLzTB{j$Ujm1=2ePEpI9Do8;H3 z@+ws8`XZ6)ym6>h>ZYi=Qi(W(YHGV^LHqNz*;1HgZ!O=`*0%8EAZYelqP@K_JorpA zC)k3r7!P*$)9ryP3(6Nr@&bN=UB%&j6h#d@{dz|e>aEj^!8jly+!k5h@#C;Z;7Lso zFOxcPT}TCk8c0}5rE|SL{o~0>wI(Ul-^aB@45m))EUFSN}{6n*(%)|3$C1{HfJ49B$Hv1lqnxyFwRm;*48fh zzF$g4GIEFn6qx}cP-R135UP`%3P1~a&)Ad8896n8PU^V&ysD05>Pi`)annln>spcV z=4I$zU7!qjsH$9Rnxmu5Xsc&c3ZCRZbNZ6iizgUnM?ip8TDf;fx#@%-KekhQ?&&SN zdZpB_34$-lzI1s%fzM7gMspk;&sidWZyJbpD>J zcm0jWBg-+-_-9K?NLbpC+qnv@zr*)ofoySHy;=IPLdrpX%`z_sH}O#Dzqj$|oFm9G zK_X;lWXUsaS*QO_Ym%0ZUaEn7h>7v_e@XNYmIZjIR*DU)*ncWmqgm8j*Z<$#fr*Ay z5@#TEmmCN`8_OfS;BzhT2s#@>$PJaopj(vZhPTs4B_pp?UmS6=2}fj-(KtWPY+HxO zg8pW#5!Dvsr~*E7{ty}+<)z?N_;v&q^Pybl-sUpVHR{~#W5rVVgf8z6 zXv#&4ZW|`KsP|jm`X|JXx_WGwCL)(W{19-U!pf92H(OgjoMDF`!*ZJ_;rjh!w{+~= zck@!wfBcBD<-F$C*4o~33RGx>RM7A#J%yHef{+rKqXhDwxXI(4_ zewuhU^mSf;@CS4tTk00?VpiaITDs|f56|J$%A9`?Kr-GN}R4)S5R>{0>>h7 z>=qbh+&wxdQac^D@Bkdg3H? z#{hs@*jS)xTbtcr8k@~+Uq7LpD->j$@g7Us-NqVpYB*bja7h#)YPcKeq)QnSE8K}m zm-GQ?DwfqS($G`BQHUZJ%Ay((p^b-XXScvEpDn3mP($F{UG*0O3cxCW!>F`(S09@) zB{UFp=3HHny{Z~T^ifh&UblJrQPS(ckfDeYhBzY-VsJQ`gMhN+u0jBWI`hl#%?auQuwVP`M(5fssN}2;mgoWCNv#qy+rRd3eqMQLETo1MK z{9kd%W^G9Ku3)#7+=p7#rYc=sU9W5=DVb>^y-WsCcM=t1oM$TkCYC=? z8sMUz1!%xYIp=Bp@WPS= z6J?e}qQe6ImI8=PHzx&FDZN~SMrV`iZWAF#00k#|Y5VRD}V#$tVvnz@XPU6IDxJP(CVxteM+>{wqic`6x z3bvRV8GLyLZ-38gtLQ~YIk1RuEA6`=e&Bb z^g(`35c;J<7WsaNB;be;d#!{n_Za$l@oudh zkqu*G`5nV6%F8oDT>p<7(siYbV<{FLcILGe*KN9c5TYNpMjhY%-X2-~u5h?0_{7LK z&Nv9G`~i!WY0#_ z&o3^znUS)ISVd(_J)7Vp2S`K>(1^;0Ls-*SSKDxueZyt~6xFG|5OSAjyK^Aee8`sv z`nRURDXU2Eh~^$)>}gmKMTe1a5z0On!yy5IBO%fo z%TgGCG2~yj3IVjj%h&p_U2>Bq^u6#m$yoto!UrlIBke$bO)wU@%=%?+SV9$e-uI=| z(uGkq>&hIS(d@I6hhmNGIR|9@w-keC`7?An|R|;{V|T2yX>Z+@XwuK&}ZpEnzd04 zIU`GJQ7963(=X1Xzgzg9bHLvptt_OnanHrOWAUF8k%krON7(~VV2jNE&c&&YDp)B5 z6Y*12cgt9H>jG1u(B+!sxL#P25=S_`+N& z>^MDL&m04!0|_S;doExJPF zF(L0`sJ%Y(;;3q;A1fRXv19q#!FTkg)BopofSCBPoR?du*57X-GCS{T>4Y%|X-806V*r+3mQIfuey2NmcztibzR4k1(mJJqAIAc*WR#ImtQK$Scc3e7dxE-;$3(Mza z{~&%~y^Hj;PLiV>lsU^3o)`VNC}joV{;?;P@BR&r2JNxZG0k8J2EF8Qfb0r1={L7; zp?ls>H3c z$BX&AoMaB1Mp9}>Mw`(lxEza7q@Yn?@e5Z7LRlEmudr+Smk!o#k>QFepfV{Kj)Po3 zj}*D=)6d_AKQqxW!>@?1vZ9{Ls^JL42f6uEt?q>~4^_5;C4KC<4+^5q{gfR%ZkK&E z_x{EetVkcFJU39*-XKhz()ew>Wl6JBTd`aeh~&ZBoa#8$9(o|T*Ro3)VC|7OszQxk zthBL5!h=VnOl~{A_9EQA0VDml+!Kw9)>$uq)ON(anlml0l&81nyeVIwtlNUETI)y1FpN z=f7L2>~MV4NX(302-*V($eff9&n+sQprx8f#0whTVtJtA$;F--OUV@J z$fKxVtuFP;C)S1 zEoFp$gG^SttSn|nt9|rpZ#5E^;hsOMQ47D>vIVyNfNSt?(a?pjrx_SU6XJYfu3{ml zdvcVBd14eh>5Q$toHKQdRakobAj>e)3-P3qUaq#8gttSd`=T4ge9UD8&tIGJ?rexO z@qK2iXmG#wq`O;KvYW9;zTWMH1CRALg<; zD#RS9U7^Ilrxbt-;ir(`g*xeHC<@;mzYWeg8P~B970A26sWTBry?M_*MpMqgJPUdE z%v*u-etg@5UBW;zQT{!s$OFq+0VqNxW|z#o`dQ%p_{$mjzWdo5&X^>S0GzPy&XF{j zE-q1c)yXzs60QofJ7IQU37mxC6?m<5-rr|#baLFJ<2SC|=k@KmS~`Dbf135(U2s@} zD`;$QP?vC=A{wo{Upu>A z<9wSs8{u-u9X(Cn#?U%vZsh-8GrZbk3e6)cwlf~bxw_S!W2Xm1M%=@`ioWY#VN%^X z*CaWxDf1H%Oxh><4)OUBfDJv(EY<_{IF+mzWVn*TcD5C|J9EiQ#=Z@lPicA_v$^A6 zxlV$`Mo2$1Y8QP2-@6c9;WVQ%+_tY`I0Aw;@r(G`K^U(_wIOAF1yf4XpZKWTXQ zA(&baoPH`zh}G-$dH0%2rsw88MbOtS9GEWE=LUwbp?Ee06RvQw+10gA^;hLv<+7n# z@vjQk&Nw0?FzWhd7(~+NXSflByzB$+@4k|*yV-fKQ+;jvwELbKyZmBs>q(YMj;7*4yKveuC%?Iz%lZoXGP2 z12zYa)D;hiVpyEvuHX?5j8VcBT0Z>_^e)4`|y1Pn;e2Fe!s(q1p#rrpc_iDqcQG9{8!4r`zcvzTPR4!$H( zrK9o}mhD>gYu1yl4|;=9M=#X@tF5w>&3y>1{_yQ-j`37WS)ZoX;5K-4Yc*=SE{nH7 zZC|fk+tt9!Ae6(MM^(|e%ja%B?KsHb0tR|7F=;JS3t4s4uFwMkmKOTm4fP0k(P=zA zLu#6cqfyh>fc;V^w3|4=gRhr0T=%-n>1ggiCY!$8%{8P@00lAf1;?O9udx`t8{JG) zN9I}Nu68PzEpFP|z&sdw3gmf;WrkSr7aRmBBaCo$=uE1JB^z?eaND5EAK00C1i(e> z_js;bQ>c?0%-%=*wdrA1Qk?7_LC;KURP)De{G;A7ledhaRW^H{z}eWY&`d9yDp!+n z8fQ5Jq~A5s$}HvV{DmI|@F!PUBozf(2_vU2X$jz4tvJ%tK?VzYzGtKdhYRXkX})4R zp)`p~sF;8S+|fo7G~%7@z*&g$NV{hSW=gZ6NW!qYS=|kb!H_NijsdLjhU0>+0eb?7 zUvv1YsOV)@lz#UKx(_ z4zKg!4VE4iZJ|zm&}mgD`Z<+t5z!_@YWLbx>cUK?I#iQNoiy5pf#T!wr{=SfKCG0` zRRL@8;JnUZ8|>2^?GtyMWVzYJ@u4SAhQ8IdWhBNK-XLzLD=95w@W$Sr_uN^Zzn4f3 z70>^a_wO6m=cvbk;oRy7?WaE(!2(2`j$4g z*sA`D0_bXrPYQSbG z9NN`BaHfL|7Dyx_A*LkBBm#jR^r`~=M%YAb#!frnN}gC0Y@%Pn@4IF;9->-! z@|k3zN`lsKZWYi_+(3^3@K38f{N4P?aE;*g9cw5=+}WNjoqlQS(_qk`u31kr$^o<)#lr0_s@Uo%{C;SNFOgG*{W| z^vTy0@bdOq*_%Ieqr!4KeP>YFayhWLZ%|{W0K~aAUz+KO-iscG=@Fcc2h;kQHXHE= z9dAZ}mmDUPRzH|ZnSt#_O1N{}sou|iRy??08Ejl6EK^X)gg3oKn4};~R{bL;Nt~im zC)KCpm$UA9g4Rl19)!O6+*LOz)_5lQayx&2F6&-$32y}Z0P<8imTY1?1jBkDfAUf~ zxzCc-eJSY`(HbY+ah&JgeJ}X+Gu?szqzZH2&8_YM_rhK9!J6Jm*2e=q0{}`qSv(cV z&k+Rb3OBw|TeqRYAb6jk>OLJH;RXy zblq<#S)$dh0;q7(_+Bp(WtD%sQ|n4(+#QyD_Tx>mLw*t7{~SKD0wYij9V9>fo2>K! zRV2;cCp)dA?@3BL=|~iIlN%xFdXPvo6w}}utO;)!8)-?3@iAADoZudu2qPZ1nglT# zCLzc-k`f&f;QwrVHW}}@Vl{dxer{byGQ!m-h(Z0mlbX9%EI6H8;7?qkMUotSK3<;mf%^*ece1dslQ(NQJf zz2V$cq8PAep|)2PHQlt-NAJR=OCvXnUXRMs&C~2mOWlMe?s`)RBFE;w#AkXQNO36K zS(z(QJbUXkgJ*^riKOwbx`d*&``KTI=*R9@3DtX$xeN7Kclz{oCC7X_hluK~77qZH zFb4=`|NFO%M}mJcf8xabQBHsdL%VR3<`-d8!ynLtcausCDVSTB_h|Aw$B=0`Kvju2ucUR=z=kI zhk(g;##6@dE{sHD*Hk;*TI8TS{lowJTzh408cBox)BUO8gTo=Q#&sFX66CIW(mA~M zG7aUHQI+5#-SRY5EER`4=1Fw8armrTmAi*M8|7C2bhVrRTf9eM>bB3Us7cWXx6pXr zMl@8_JzNAx>h6Y(-1ItgM)X*$fHkC2=ac)M-blxY0Qju#(K1d>oXErAka)AvBF+$s zOurl?ID$m$gFc90pS-J%gYGM+Ysp(v&5NiMYS77`6Oif?2B}VgoRLCtOaVH%ghf}F ze^x_}j=prH9@*W9O4K(7n!t$ihnymWi%geTRn-5`-w_f>5|*!##cP`6@6< z#%eQXusJ%2P2psBqjq%lFo*eKb(&clICzh{&378+mv_yu?@Wmv*^XDrGmaZlmndQ! zS2`l!xefNzc6?csY4B7-#be`u6D9bqm^s5PKNt$OSz-bgdt05ES56IzLf=?K=sx@h)y&)95m+}h@Y;caHc`l>3N$US8f(=p4>GYje0 z6e-oukU4gQw@^2~>3!+(#X@2EmOeb3L3Ntp!P!C2+abb9?JGxn z$y}BzeDDxYHSpO;^#vL3v3S3GI0Czgo7s31hWc;_5=e{FeraEOIX5Y)y?yh*yaOXrkR}--ee@a; z=4E;+-&@JEZ+S|wfkn^SA{e#!W~Cr^Ar{*jT4TVJPc-3onA+ox}`dW{YH zcqM#IqlRAovxq`xg+#mfQ21Mk$XRQ+vo?v`I;x4a09&#OT22J24jO~%*9Bui*EXu5 z59zs+fp))jx%>Dlia;eagFYjaPz}T*ma2L-qaJ@v-Zwh4-;ctyUMDiBwQAxasvqF} zG1Lj*sGqp@rdW6D%fNOs*4*X{>kx1+lNOYeR^TolGALv-nj@$olFicL{>i?fs|x2) zr^5sh=*%&7cW=x=avt0Gj3)!@4@s^#@% zuE(BjjGsKKuqPeYtD;YrW$-kLx#py&$(suB zwBe)WK;2GluOv6^>Hy)4)W}_RHESzHAMQdnzra!OV#a*K-8t1j@wTh|4^H(&0!P|i zvuo&#%a|^f^Yh2I!PH2COm?`Z9|9hu4>!cZ9+MFpU+7_7jk*;FH)Pir8(BW7=FmrEl8O%$S=T-|c*wJ_N=2t2Z_U0%Q5&N)AzD17O3uoC&WLwmKqV zfG>T+aoRjDeRQs?v-=hl-i_l*F82`OW;|PB`8q1Zm(`nh784D&&lyBNaOj?QbAzOO zIE4BY=sjZ+6MMJaF+SZn)DEV*D^1Kw4(`do81`SgCL|M++PX?No^S)LiG@^BYRxKJ zL_faZ2%^Tbv(&X7rvjDj&URAI^(e)Bo%PFkZEUF0j)m%wjFdEC5h+rrM(M-27(p*+ zNryCklWzXM7|^Io@&L)lw3UdZQrAmce+3WzOvaR+m3*Tq(}`&u%@KIvC4sDuyBr)3 zwfp(u4wpWT+y~c|Bz*d=@%_3kpLP8_cO+J!cp6NW3SYDSftAGti}I{R#K_*FarE`w zedivOy_LR|9i-XX^FsWEo~@29k7*WxYOo>LT>!Xbq?};YN~2g z2}kO;TmA49>jK`pq-R*X8JSzME`Hx5=a;&$!0$^PJGbq#W#yc>+}(a)Hekr}R+ORj%qvl^jT(YQs34)Q19cRHYF5V)i*r(=^!Li%U5UN452uOLAA4|*Rjpr~1AayloH(y#t-rONp5 zcKGL2Rt4meAIqY=c`o+gR$&6Ruy&K#WOcB|G)46FOdcivI-!^kD_DQu!uMAzzG+v4 z+djsXrw=0q2jlwc*_ zQZGu_v;Z4rIH_U7ITroRQy7$k(2H=0X+dMR?{I2ehXvE(*paZjiKO}sOFHW1=6HO6 zN4xAcvZ~*(FjRv`-Q7DwEpFqE6q9p#Eedont+e~ltedati$ax?yjVSQ`ub>hd(0n> zwa?QQsA|w!x$k(a412F1DH^kvuPqJ+mGbBQz^5^42T791E?oIb1N;7<+{|b6LUQv; zYqG>*(FWc53X4s%<>hgmc*P^~ii`N-laTl}ly;Zq=WEh=C2R6mRo;G0W?$$X81b|y z|Hz^b^R``4ct3ZLlX^`CmuBmbSyX$n0CyC26GIf?No61=1Q5LlaG}BgAhA0}FI=_| z|Fg3)k%SyA$1Z)6`^Cp@Kw$~DG?@=bfJ9U4X7jMHVwICvm8=LzURM2}b~tD3E7i_ zENQ3$gxESp`7u;NGJ>g;!~|HoNEydW_@0W(}1)-U6;l{mF5tDE!Uiyv?5*ABPyhy zPMcDf(%#6ovK;oi$m29Ic9#EUF3q}q3M|erD;UpbrIzJ+K>o%_3{$TwR*6FYW!CT< zLw)TErGuB@%n0i0+6o5(_gJU30?XLK?>j4f+iLc9_>pj2$jap_)lSWup7+Da=MZeN z?u8_?b2z%ZA6Zi1ir3G-*Y7tZFo8Q#6?%f-ZUtWN0< zwRDm?`R&eacnC%ORtV$8=nV>~S9U;UEc^W+a+s0LcB#VM3f4H{G72>^ncFXQhZX$f z1_puX5FZt%6O0Mfu6J7$geSU_WpnYAe*H?b%ws8cCrSVFfEeq{GkQe754rS3vXEOh zTH^An3|xTMquvXal3F-p+uzp8=?->4F%;8hNCnboc~WyH!;#kDe0Q|d`wR_TDg{@) zmT6DS5D*UBI?t9$0sONRKrii53Gwn$gI+5q*mAI6VVGnxekopu;_Jlx>%I(uCJk4a zt4(|-PI)G(FOgkQg%dsx2Y=*Nf~N%#0?n%;Y*28pA)Lb%`9S=p6?%Q0yp;#w1z&r3 zea%Z0F2C+k?$lJS0#HnI1S#5{@+k`ZWk!m}jO0_s6J2SVcw_SQ6ZK%Dqv6N{UrhUQ zu22)8QL3Z3ZZfHUu!t)!cp*)44=-j^z+~eC_wbZWyuRAhWTr z17Q<^i`qqfA{SXWh~~sMP0xi%_?Sx4CI8Gr2Z`&Q04(c#j>nrs^ z00`g!00ex?!LTurKw(@or_8Mr3wS)2E(X(W$0_}(4ge#w5BwE=71)uRs-(g!bNA{X z*S)FwHu6J5Czstg=^kIzZv=WuKQ!6uz+*Ki)A= zg9Wv-5>{-afvHqEc%21;-wVFYV{c#CVMfjZFu5rD!~m#`Q@}L)CK{NI**Gnd0_M}x zfUl^?;T8i0_$n4e4g~2|qe}qZIRj!#45q;V>p>4{NDrQjB@Q`isbSB|UQkONWx{hc zpoUoE(Q!EDI#?DJ5F#H?^c>m{FD*H>AgRFshjvy!u`r~OWz7K<6t_u@174`qNfjqq z;9JI02MFq%4d)Q7a~Aj~1g_aZj@xdP1tE%V85ZEt1ziFCefpR+2w?lLPJU*}HTok* z%zOUWS~zSmwgdZ~y4iuS-?5_{Bh#)MSrI%+=_-Vf_4qdEMO@1!XAD{NXcG&t#yRE= zV>HISz~awq3c-k^hLjCii5cq&4>nH9AyY>J5m63=_OxSRf!#8dz~k$pguO`ti=~JK z7+Z>FA*h`p)aSfEBz!g(_8Z%YBZNK05ysXtS(H#7kMWzJJr4__CqncyD!&C7;aluI zqd#^c05j}h?2-Qp6*Z+;F79N5A3g)XAaH`9#~=a{e zS`5P-s-aHX(>FN0cQZ9b9^TTSE3%E}TElSW+EvqHcKG#1-?f^qdAiw?-(kb|puqk=Nc7VzdPbO9eVciOw%9E-iDhmAFm1om84%&8!L8T;6)U^1_BxER}&=sX|57bi>?Kl&#ryTlnQ~ zG)b%7aW}p0O#p;o1jTTIq-ciactMn8Mdeeg8>VGDuD5^A106M{V-1R zvTpmaG`sHS{eHkLQSA|n8tZ(B$+CYba;dG4x%Rp5BYVSqZ7L%m$RpQ`te1rsLNy!G zBVM8yws?^7E-E>5L}G(|p~$P982v~}Dta!5;|!;kBnQ=_*D45}P3uO9Su&ncJf74x zOm3UqJ;%Y^sCJ$iFDZ%E_K;++Zb)z+Qr7$o8$EI|RsqpMSuZ1Lp$E;JHLRXaP_0`^ zcG>Enh?d%!vdXeYQ|qzd;%IJd44N70!FVZUa7C-CM?kZ-3(39NlhV~ZJY=tUl@d^u zL^68ZB^IV6N$nVxR$A>&lvo%~++*O~J?*|j#rMPO{{lt+$J3sMe*YTRst9i%7_K^k zlAfM5OF3gkOVn=K3_O{hQ}Fl+=2lgUqH3n#wgMw<3g_Hc^IniWkXE1d)bbe_1(yG# ze3O=~=($pY!L_w$Vj^p3xXs7F#QezHUcCA zghT`&1%+G(i#!Ym8-9Hi%56u$c>v<3mvg@(5yHj+hy+_a5+Q6HfFRlB$^V}Zmaz=NmO-{lLV&PkEMvvNJ8|$%9K7trK>{!B zkhI)QuRA&IUUtv!>BGrz<}f*Ar*o7ElV&nZn(inwvP~RJLB;FjoqZ%(`T>NZNoNkW z;jVcnI|NVxU`1F0urC7O3unGFyRw}`{^tQpKxiQ-;F9$ZT-*{~Op5)WKK3j7U5G#t zeONriFdP7>06Sn1dR=U6~jUgUtL7S8Wk0Bl`=(;q&gR~8@ zEqEAO@%M+;-yq1=Of#iZ3j_`U8*sH*vX*VJqrY@NYiWB)f<}7c zsZpan@zhjOj2Q8hfKg6}7`uq41bbrC6C*~A7%<{h0~tIAyvj!=FkSFwx6nH+OYQgD zD1MH@KU^Q{^BW>#sb2`~3Lu~Y4*uR$v;7YsFsn@963&q)3p0Qtd8y`wTsfrLb?g>@ zceRNimkU9M1t1B4B;NugHM>}X0Td^K775WQ<|S5`L%0B@OO!4-#n`$|{S}QXmmU|D zuPI&T%0*eZC|w!;|9`*V=f%YAfJYjUL1<8u$$lHN`*2TUkxHqQMHtlx+CA>q?naf3q2u*;ksy)=NhL@~z4t%N ztF;S7n7H?O+%=~95IQzp%cKzrF2HAfHJ4Wgg2S$)ClOeRv;o3c+Y)9Z2y0tHR){ES zOE{Du%3OroMO3+n>b8WJ4^i8e@T*6xa}n!ZL{l@dA#itXqPbeNySCWk>afk#X_xDO zZr4G_UA<1aPC3h;hl_ar-zZ1QEyS=4f&gR;zysKbU_U$u0BAID00`>;Wrz)PypTwx zlP$+im&faiB``rS25KOpC>77K>o%uqZ4qSik~{IQ$BgA(0dq0cm1>8lJ|J zC}AC^#Uk9U(%Rbo<-6+Jz+)}ln9HPP2i-|p-_TPo=z*A`zKegQ*#1h6tQKJLzO|0I zm7|Ta<#tX{tymQEeDYELw9TGL?FPE_I)HkIzYgiL=>l}Kte0}#mDO3F%?s*yK7?o0 z12x*iqrr!M7a~6(uxIfr`2sCW**LwhxG&&lMCR&L3g1JbI%)qW=M|yv%0T+Sm9XAO zXLG*e9k;jMfBBxwMfxr5#pIE6>|!)!oD|oNn|iN`^?^uw0=u6K&<)cpcV!ucKhYee zX!qXIas4qtqCAOeE3*gmMeVtjtQZ*CRbKnr*;pLYFONUHlq($Y)#hXu`#G}kc(lBt ze_nu%-|^9o zO#3SO0xb_7x5b}EPe(-m9!W~E@c7{1>go@8IsZOEst!E9^*Y_cOGIaNG_yti>FCG& z1;`CXu}Oe|BVx4Pkb0-=S1i{uzH0K$v`2B$(N8xkUh`<@wq$AE|l z3lcJg*eODxWT;d_4Q}hgQtN|9Q>d_Eq0%PWCxm9v)>dp?CZ?S?g!@%hx9&XQymwpzq6 zTZSbofOME`ic<{?65DE`46#I~E(ZZ26ms?3l@$So(wY*AaimVA(dyB%+lB$6L}_So z1Cmaos#|<=!)Xp6{Af-ps!oAVw)epLs~x^H3Qedo*ExFJ?3D^-bCcr@Ba)1aMFsF( zGqMdt7UvDf=u5maQLVmd>_##UI;=etctM3nOZ_~Nk+Mr>#sC(~mlHrKGj_E9>67KS zak$l}edtYXN9`7v03LAA6u(4LUL)$t0{byk-iPMf8Ko-KSs_C}O?7$@z5@j!oAprwG zi+I52ZX@K}4AQS(&{6MI$SW0blQBK&Y8_X?tF6}4HtVFTbzoHQbFr>VaH~?@tT^mu z9_Hcp`Py47eX6ut&aJ2@EVm=C&6w}IxTuKb3H%G|3JP}Z@|2=v!On`-1svDW5skM0 z0~Oecr^D@qYnPP2w5H{kiz_;w)0wX2=dkSz>WoY=cUG#ImMb$;m(q%5;_gAql34nb zB-w0dFWHAIUhnPA>&P!wXsnulp`z`jlPeb8bQOaia+)$Q0OMle>j2)MW!x{%adC#> z!gmc1m=8cC{a)wI$m1R+V{aaPTny$1Y!smD03iIWdoCD}2-_LVXR^8@N2<*RIJ2j` z$=m*C9zH=aN!@x~G=u;^)S6?YK=&*zj0o+h_GT?Tl0J z%?mDCZUvuVmo%wUufbX8tn`x4(>x=pTT13JOdMv^gc$J%dVtOW{wkm`BBGBb$QTb% z2C__3q&PSk$SIlu{FG@{tT-$g$YGkN_kJNrxB>uf13>cu{1i+x0b3?OuK?->02lxm zym(S67*dEU+l=qE3+mLxWQe1W6dVjEjIq_}t(m>4?xK#!W#E7@5?Y1jW^;pf!oQ9q z40Ls{BK)M6Bovk7Shnl7=7Vw-nQMrLnRU&?9LKGTL5PQweMgQkH+5RpXjV8$`i(W? z6I`o#L4-jZ=9nwtO5 z$x$(EX43QN-b7v3>(^vGs2}P_;B@^w!KF)TltsXOAlwMEDvaR zYvR0E|I?g4!bnnuSSOWi&B&|zRG^=Fa+gFd^K|16Zr4CjcRNT?hMyW9L7VkHDDs#K3kcROok+PUO;sPGHQ z41Gj>0z(%|CN3(rYeGjv-q1))KCn7x{OLvBa>oFvN_rCDE!7uw&W>^}*62p@P)HNU z{CEucJp{v^sRXJ7-5FuxuzEkrQ|Zc%z~-4i2RGq&L9{UhF#gRAcls2y<0r6!GM44C z8BM#U;7fIjoaSe`uIJ2;J=)hXLQChc$f37q6k$Nn~ive})idON(vs4B|M+vdhi zzIB6d-@3WY!#VQ3`0T8;JXdnc=9ob2Dx^V5djRW-;d@c|n1&>YLpmJNMJ^8| z%tuk8efX;N+|%f;BNQ%3LvJ{IWqpXzerE@wo#reo$eXjo4yqg4F7=v+nAF~sT-fzOn5;~}C<3%chWmWR=mA%hJ+Awzov{T9;%kEi8U`I+p zy>ZNXsvz~q^n+MkF?|PPwtLDp4`CXafvtiSz{wosl=BdZAavwRl$)I0I_{_!+i-_t zY8RvdD^rgCSe1Yb`_UdLW?bO@l%yP_M6p~-qbs4#wa+_8ZJI=LlJBTje{*QVd^&4~ z&{if&3>!MxJIaY0CjIT!=+0MC^Dce2acDJhT$FmEN;qdu^32>Mmo(irPsZ+Ncu2t~ ziStAQ7NTe)JV%FaVarj3DHjecm9`_V=^QO#C=~9OgjlV% zcu)tqIvMX(Rp241g>4QDKq^Nov5YEu!1`9!QN9~0Z0JNS4ow=zK!l{A$lqU*5q-wG zmzTjF{dS+@&Ic#Ca`0B@LVOl3km>=55RhYSER$dT{IY^-V0BW}7C z0kChjX^m@()iR3A5p`@au^4JOOrsrkp?Tuf^YnB%>`D83{jmr05TNg+T~^8;c>?e6 z^O#p0$UbI2a=63tqKw}+OJ=@a!e;wIDM7&x+C!4{ucK_$m5{Qql;)Pc=WsrWr?(3U zt0;~HVq)BgyTwh-fu&Ipu~a}y#o@SjJ0#X->+0*wVspn!=B`}k<-5^C zbFZCIauHlD(Qz+dPu<-v+ugz1w27}aEG+=bo3L(Ua+RZ*tOEp}Kv2l*1{fj8Abjej znFB9Qb_K5k(jOv5cIk50fe3)-t^BjqZBrCkx5~|~C|3SPsHS%)vR6NRn6-Aha!Q9L ztGlB-+v4IpTYDmERe)3BQZiWQ8*2Mff4RagWSl>9GwxK%Hu0d72f5?8>dviBX^nz- zq69;ah#vh*tOfj;)V!zevEos0ehoVyireTBy7=$t6xG2nsAz%%;*PGJLe;Ek5g<2K zp)^2N060}|ZNLG6QWa zV`bKF5gAYO1c6oeeV%R!G0(78+MM0I7jc(YR(|($_L>XB9{V%2vdKd?PiR)CLOE|9 z&tV)XDl)3kgZ@mY31{4=y&h#PN+icxT=XKA?xF>G#yyIM0B_lAr`}rs4__1kdwv;` zn{cXM*-EelL29`yeL#HOSXs};4P*+va}Nh{>@HxoDYDma6&f_lem&BmU|^UcXzy?p3qICvR7H$YPK2!z*umr~H$K;b~fe zQwPvZ;4X?xhJgr7N8Ww=weVrd*Z4%}8p1S>TeP(|AJK!FH{MmV)zE@fF%J}k2TONf zT;*lPNQ#rlBn$J-t=1=pb7RxSCLKED+^J+v>XiOo7^+76b(0Z^3WLu|dn@R;q9QuJ zx3YBLDm4HO7k{b2tHXe36LX95z2lXPytcKi)y$c>YS!vDP0kMtzdMEGP2h4w>5sJM zh;zDREJBr>VcJ!YCvBH9jp3Z2?%Dobr&#=>fubfJ^D5UrW%;;M|Ms4~3PIkWIj7<4 z&fazH!%j=%>f{tzE~@FH0?fExnq1)J8G#5OIb2r(mD ziSj!9;#jw6MZ3^_r3nGfyhUBRQdBdz@_%p)j=1&oZ9%Wsjmog7NX09_GaVnl#`jUcvXEY&OeHhy40EgXayDRv%wG6_c4GT`dF3S=$J z`wM~ z$r%XLO(tO&#Tdoe?GuEZ@XwFo(qoYRmy_y(8wNJ5!kjXx9wAY_$%~NXVn61 zLA#v(VRG)+1LYP7;5pv^AE;`2SYD6g;yfQ{{i@cDY@6I(n(grLVfMnEa-He`HOO(P ziDwz?*DU(ToYYoYYnBc*M*cO$QRJE}gmb3&w3M!)keC|yNqX*`W+3h0?CVk<8Z7A~ zq?i&1v>QFjw>QWpE>6ID69SFhLM#g(IhuEWe!J9nyrIl+p~B={hSn$af3cds-^CLM zyFf4>aBu3tf73~`38ewDAP4{@RH3cpqS_TGow|&oBRAuCC?Tf^jw3BoQ-LDJ#+7l-V ztaQ1Na;V)X!Fc)-yaoX`^(%+f!s>#%3oa7N{eo*^ZgU!kLuIqCGO=klSe&%f*ttHp zU&=0b29;hBATatsR z+3K?F33p^I-%%G2go|rU_3r11txF>`iJJ82PaQ*;iN6HUwpPRc*HKt*VV zxaTJS^vUaKhkcRfh$xv$3(Sm9PHBiX_0^liNq+hkRxY1pCu(97Gt0u4TU|EeG2BXN z!rTEfc3tHnkiUHSI1HX%YrLaC9_DWUG4EAkA;TY5dp-5yH%d?ZezAFG>BBYey1@Kt zc}v;a@>@^O=iOWK6X<=U^VC3bl`-^+`|!`N|JV)&VHHkRcJR-AhzP zW9y5StU3GhFE-7(o1ueu(el$qK$gr3adC<3hoLMj2eULM?~K3Pp>mD?xRq7i%*us5 z=W>mIP2>gI653(y`KP}x|NhTjYs#qd+L10HHlp>pl`7M{azPK5{xkCbcWO6ooBXf< ze;?Xm_+0@Q)Tt=%n68S6H?x_Eoy9i0Va#p6k}Oaq$vf0zaml9pjzMPo<}bi#dHY&^ z;c;5t%pNemego>b?_WUzZfXD-9=b4lPOU}#lU5D8v{K4*wZ&rVr|I00ZvvHogYnH7s?7tODh1yiO0*&eMr{8;Ao21}7Nu<3dKaEnJBY?O5X9T1V%dS<#Rg zcJV5Db!cC^V*BZSZY8SEx)oQ?7Jd3`c5(KA?|OtJp8dq~dn}g>U0^?5^{l|F&$+k2 zd)2e2b!Iuae-?ha!pJN2z6RHzxtjhb*Ex}o%IL(5TU;?vMgXm=U&kLUBrf3$9p zn_%!3q?d5n5#odd9h#PnhR5`Y#N6J=@akv~Fw*chyuGb1@-L!u=nBoqJp7RNUON5q zT@dy`!Q9g`cW(fqd=%xOP&JR69aK6E!s-QbLbH!sC2j^9@fYf~kd+VjYkvH-Uyh!+ zEa7vw8E4C)Fb$=Z0p^ACc5R0>FqXQZZlx7~sDUx=oN!klT;E zxf4BydVm7i+G?Dc`f%Uo*3*teT0t*fFJoE7{G{9#;W)HD~#~Ng%?z+<9EVDa3R`K#1qqN zM0;7 zq;%(LgmYs}E*okE3>O7Jx61QaONaJEXBAb83W0-Sapfj)jbQ>UgoV5Z(1R^QL(t_3 zif<6cnkHmn#=92(QQU=S%8wtG(ZIu9nCiOM6KN|1o+lG(9|I`(>@0-%W%Yk?YdFhQ zQu+h^m98Lj5;JqM7nzZn*&o>|*31SaXC*oA%o({4xX-zD(tFa!Xd6F{PR=VdgbWRW zRImvb1V`S({Fn0&=MUzel|3sOwg-8Ee8eBXzlrDLCHP|ebmd=U5F!X43A4l|#uICZ z^~B%VnN&&gB;6o&kcQ3ong7FrXtCGg?-n^0FDNd1c1Ul=-{Kd27+^e27@@szmHNB2eiAJeZr9_+d)QR*nnh{&8aTdQ9 zTxW?Nk{aCizP!t99;i1g1wf)ESCC38vwLPh|PI^&#9iE%rWZr}i1E-j8(uUtM*m5NaYA=$ti6-zyLpz+GZu`~Ay^5$k_m5Y!c zr1AV=L?ZF58#m@r}nd#wBNW{8x(!@eu))v@NnHdlMvWF`JoWp>7EXkMM ziD!d{LpU!rH$yDF7g+Kq&oTk2AUAsnaj<*etNd$>tC=qKZu8)z9lAo3Avj*C96ely zXBNTm!HOmN$yUp~!w^KO@4j-_Z%3!ou-Imoq|fg%02Co-*eKX&Eg^Q743S|T$DkCb zn!vws2+{0;r4d#Q(E&^mHx6SY%z!rDX#^t}m4Tq@CR=ccVrti7H`#s9ghAGGu+4TT zwZKgMllpTRoPa@<0kMGfT9NkVvZw~2(ST6LmT{`UL`a^rAw!yC(>HgGR6>ktU`14Q zYT~S7mE8~s=<`b%@y%G;+RfPtG$q6?O#kpC&XeI5^wDGdFIY!9wSMh%&rfz^%~j;8B)$W5rS9_ z3rpDD;)O%fn`Qlwlx_k$x(UsrK%UYoieo0Ig|+#JjrDXSVs!_=9G;4u>Tt;jO`8Z# zf_`iohu$=#NxfL?H6X@TOuA4+q*A03!vq_L8vb5KI1pex=1Ea8l@t)wM+!L{xXJru zJ!T6!txyf#LvgVYw+n+-Iz1W9nCLN4p0eqKuzDPN!~CuRF(Yhbz1(U~#JLa3OM8dG z|M$}WloV?j(e6@|9~TEd`*l-QyH?l%J^ML+%S6Ug4{Y9|%y@*UKd`MVb-dN99MQ7o zXlhB~Ab7)(B2yYIlyLtKdwTc)R43d?|Fp^t6IU5F+1{LR=pkI2s`;P({}|Q#ZohUy z1;Qt)NkVD&#lh*gSmy__XVsw2aAa~So$fn=QPPEWbj>yAIZm-5y5Oxj2A|^~Z>{XZ zSqB@$tp*zXv^Vx1UdaD> zN$=R|Ut&spaTvHEOhK+j$_{5CEQEkXhS`D@7j^V;lPEi(*@-jPMwguaDqw)+D63;t zD1V1RDbl2B+dwE4-RIvoIP2T*!HpNXg4qC{3*!cFVC8OW^t<})JNEWH)$qL~ehDPT zTt}kQx#t3R$*^Dc!SWa1gU}tc6O)(g1E=oTB{#cphg~_%U`ItE1MiXZNgc)%xa^m6 z1ocz`!V?6E$=8ey6i_!^%Og3%VlaMnq@yxesP8bNR8jhsE*_F4Nz$nY2S01MHH`HV zo>CcAQu#H~;&g!40kw z<-geQy_?K~4E28J$K%`uX%p#)R#U6ncZzJ_gduW zkma)Dp#0r11`!nAh>4GVstX~6=yw)UAXPQUgEM24yuYqOke3w7j$1GKVm`LORf`WF zqRJM^rNybtWL7SB%B2;GeAghN^6{R4USv%L2I+;~xHg5##F>;_uf;F$R&QG~)E(Wu zq0sT6N%bBF?oni8omKDzdPW0#Zb6mGn&qZUy#H{pZihKNy2BucFLK>}E^TW&+VhWn zN6$mrOg_)Ze>OXfvPDViiogT?Q-dcv-fl31xi@`lLmrCGkyaQBbCIKxl3ovo7$lG= zf4cN^2&0m-tA=-SlYh~l{FH$JC+O5Wz;Ia}%Ik~8>C?!lvr-t2$}>3%1qWqqY@TJ+ zGlXIB?8B$aQLMG69WFQsm(=2XLAgp_w=wnT{?%w%ifV4&BBn0+DipN26fuyg-d33W z;oit(wRus&VsWm_2micXlE@wlKi;c%ZhnuLvXZ|OzSEc8q<f1S2X9#v$ zamth;5q%(HnLF-kPls`qM~JYPWBGS3k=^1lK(Uv$@CHmKSkyvRW;Ub?65m8q99I^| zubT=7i)pv2>st07KA6g6r#^^lAVQsbr5L>Y@cp^2@#;&Ft*Tr7Be^_7<)x8cXY9S) zD1lM=coUjAn(D&}$=3lqWa^IX11|^Yxr{!W^i*QgQhR@(?TTb65BJ}j6Lv2wahuGZ zZ0UoTB5St{IkyI;g6qL1*rmFLiSnRnalGBt(&8d2yH=k>gA}21{m=`nfn_DhW@qi; zp*)yEO#7Uc8J;X%(?ZRlo^ad9tm!9kEt(Fu6;PC`{kmaDNPG{c=65> z$S!pyiAIxl$*l?02J~FHnJaguwEBvjqm~87;DtzS;3j_zcAb78TC04%HS4u_piFhG zO%{qyJmS&cY>w&y{_uNRq9deJGca>X{!|!dQ(x)2(&=`0^oI8{jJB8OHJh}lc4o@1 zLcRqtcsg{b$p}yuTkQc^5+t?+vo`WXBD?4qjvtHJB*oLDerV^ALNS1pO*Gr9lgxTP z(HudLN7W34hB%67`a-s{OP;whdx53{go147PBd-A4KWd0+vXj92HQ8p37byFpz2nu zV&zFHOK{APB_|h3NrL zz!9}{R;p6zp??@*qfpFw2{gk451 zt;6W6S1x@%X+(!xG0iB{E{=qyZ)DEf*^(uw@zYLUY>ug{%F(K0C9U9$<9*f#;1$eH znKRgOq1&e%P{F`Q5Fvsy{z$ypYWV#(I9qSZeiX(@B!aPVPBR>YL33{~IO4|1(>J5+ zE`nM*6d50C!xuwHa$hVt;|ju1c0W1lCsSqIvcxfrpd#O&%C=&NWMll4u9EDS=f4=$ zaxckcSM){I;F%)gf5+Y7%ctY9&_G?`qWOc$xW{Nw{kl5#19oPyV)co878J-hB%Ui{i=2aJ{k0u`1M2l&d--D#)JXuTG_7HXYezh*7^lE;|xMhIqWSsiaEgQNDZ-Bb~9}b+IL?vFoCKRz~Nmvl8;M5S%Wbf*rtbuHc4IA3MVK61~5g_(4HTr z!8MNVTMEE)#2DiyNmCMo8ldL|KNv}R$O`=j(Tb^c z8Us)lS^Ywct?LoD5d`mWKdFNDh1WJIC5Jr_wA&uLcGu@lZVUG zz%VE!h?-(*Lv3AM5*_NWF4r5d?xK!%&TuXs(|g9P_C)6zK3DS+4O|A<2@)A{ZBLl7z2?TcZHBdPC@`DXV5*LMQA91aSLmlySzOf_pb>D$J{~^tW^I$V+$y#;VdzGOd1jn+hE%C{>h;V;|2l( z*D%Ot_~lfKgnWpKQIdefij3|-R0NKt)J00d(i>H$^p2Jpg>V(Vn#E6lSLP2c9SuQ0 zh!Y9vzi4c&T#8i1$CJ;;EBQqJ5V?lXt(9kDJv7A*hs%rDGXZ&TG=j}VP(up2xPeB} zUbRJ&g}+D&y1VbZM5EPW#3z)c#)iz!*?UE~vycPvelj`z*qPM%?n^udqMXDXS9qts zoJxR4xFp6@xwPv3(Q7>0dLO7aMzF&W%Ykd7Myrz4B(QbH;Ua1z;c2ep&Aym zNuTK~?`wgFZ%9aO|5l$S$~mthQ*O;fkXWWI+*siXC@HEZVK2(fy?O2yikeD1MS_{2 z3RXr<4m_fJI*zR97(@aA8-&)#&|-^7i6AOpnm{>Y6IrQd`x;Xd zBuO-#4f=Nv0a(9ki=yy|eOZn7n^bjvv+iMG19NK}5{6eOFAb7yghM|#leFh_%RDqQ zHgY-6>k$?|dA${+7C(V6{x$$+!Zr05$&o~I8(^+?+^D4d zASIye-fP2xm`xHs6l;;0V!l^Hb$)gBby9+G4v{P=dcb7?hG2LlkxILd?f9XN6Bdj& z?X1uN&ZEJPGhp@@on(h`+GwSPNiy)K+Ybw?)N1>KRCujH5;97BF>o8x!Q9GTj$b;y z+Mqm9q8p}YUo@Lc-pxD^r4pBABz*Q`QV%E2WG={D*;ygT4Q1z*8F|N-mS=%3W-5A> z-Xk3N_u7<7)VUV6ET%l6&Da?r#>|IUjgHjd*%+ERG>VPzQd22nOzj~BrA1!xtCTXg zZ>O_wPiB=GZO2N3po7T03uyl9GjlQL)j z&N0KB58Dyu*rTiU+uo=Z=(teQVJw{-jQp4bKzlYFQr5_=|K#_Gh;3{T|pBYj+9 z@6$WuzdRZ_%W-GJXVW*5AcVs;EyP*P5>IG89=yY&-SHz87Sws;?Zks11(f@G z^+*JT2D?XSt&jwusH)RBs&y zf+=KRa8}Vky60j2oLjFT%+aCPSsFz7IH6G;y93U^jcVp>oEy7&_ugcB;nC}wuN9Y> zV-1Z1{&Je*c5h^}cVsT2*E+tJWo~g@Yox7c4wKm62o4$C*tUzXiPvhRyUwO;novt3 zBTIAdfqmWGd)qtyrZ@{V(kl8X?$HB7N>yi~I3R=mlwS8%LTolgS$V_XovQP za~J2POv)_{vO@&k?0OxZ_aF$+t8f_3XY;Yxs817azHU9w%?3KCh8@Xx$2zA^!*4aU zYm~WopiNfL#l>Vl_MzMIq76qU1Yu8w-WF~-AgDK8_OZ+BF3y#H3MVW)#(|Q zM($pAyxw=!@#1x!EZ^ems%pn5UGY^zUw;H$OdzH=WA}r75!l&7P*m{ckK-G&QNSQ9 zuW^s3aZTBIfrHWM)7r9$KBJTfYz14TEfgBMX`d%v375MC2PpduEQ0N*pHeaJpJ9t3 zb1A3v5?fMV6EW1$KeWLP6V2g+);o5t%gNRUMj|}VEp7@9Ymz4_bSUk`0uL>MW~+db zT72sjzM>c-sCv<@^(D&+(}-NUh7k--XHx{dJd_BgnCED3&7~Df{wIj&_&jm;tP>SV zU}Io3TZI~#7C&wa3C|}54P6eVT5b+qn@vlpTmyTAb7{+eUdm}u@!_d~?k_O;bK6^+ zmj2(+`g@lw-^pn9j_1D+>O6y~>P-NMQRR{XQs=4I~*=7z;-be_ZOeKLgg_^SRy zdM7?R=$NhxDqtNC2*T7N)IAld>nb!k5;0vV|IpRpfgnII`vO-Nxt<6kNQTuN%uO-> z?fqT@L5{L7pTxcx!0?z2%{k6vNe7xf7Yc34q{K;P<)%f1QH>3}azFJhaCsKftfgfz}Nt664dh3eVDy!o$LmYr;}0$M$w@3_ zq6Kzap*gIpXt`Y|tm;AI24pEj28UE@Ev@hA*cJl;NrbF4l@*K7U1^}~&mn4+J*`*6 zh`~obpPrz32!{b9V)IG0fMP`DD!JOF|NW^HzAt`S58amDQC+TW`hYT<2l;PEbeL?o zvweGI1aY%rYVDv*fpQQ63u0(=Sp+_Okt9KvAqXIWv1I6n(FS~P+P8GyP|b91Yp1q# ze#3Tm(yw=9;=Zi5HYq;gV-x7lca97cWH0$v8)PjE%-;>eh9kc})r>aU>tSq7=69UV zeRg!}*0hdp1$U3RiIImu7!@a5)<>s3#{@TIr9Tv3in-y)e}e}f0pd)<(}x!t3O6m( z;$ja62A6(wTOX8PiSm+u+l&Z7I%p5Nhwf?oW0{-3!^&F_;=b%5-&NXKp~)b%)GwgY zMKhiB!#;Z%rYkBwCr8qsN%<@T<{$Hd-lC~Z?b@((YWp%3@rE4J4;7vKYuYvJfM-ip z2ZQ<4IqvLDAvJxqM^42(ab*t=*I)cqk8*W)OaGO|j0eFSh0podJNZYG4<&(8h8|Vd zW7(%VfnM2r^BL__W~yBkFpRKtFY=n;cQb5&5M_czO=5^Cd2oeG+y|3`NKS|H0wKy3 zZxeEht6(xm;ez~vhZ*tK9r?_C+Y~>jy)|x&5Gf;%PWyH?1qUA_&w8R9)p_D#)a@6M zvQ99hm|?Q{=g83Q;cG93U;cW8#k)}Qy0E?W?tKBwJZ~@c1viCa?YQ0yaVr(Vy+pE< z_q9GxDPAgOPWK4m;6MijM#i8C1_@|0+plr~l_~k>ibigx? z6Neb}F9bg1ShucDGsOT#+A641NbO#ZU&|B)G<^x@;KdO9abzaWOKIIQOXk{8P}9-#=LdUz*|Vt(maajtyZO~x zziMr7_*nE7-a`dc)nNZ#c?VPI?`JW6efl3bB+629p(Rl7BK7_Tji!8}eN(0gGH`H_ zVJJ#ZfIx+6!^mE;Q;=raNt+tUpA+SOe4inS-#QV|XlR9z3weCE^!QL()t-|F#hUt_yygD9~I8stfY_p2Y08iP%*=7x8H>Cy$q$NeNovh1F`gm z$%pt9y{Xo#VP;)ju)O!;#q->5?B<4KB!x0Z&sLtQC-ouUNb*<%Gn1anivqFn1NsTc z2|Qj*bw5wxSc-Cl;+1k%MzhE-KAyFMw&ZL~Nnz2sBZ2-T%ojw3^6C89$8)G?Hu905 zWz!M=T!oGWMO2NjqPA76n4UAi-LdZF5H?a@_zRGgP4<`B^|%R(VlX)24c5%tFxcKK zX5Wd#jeG!7-99w-7DR@Wk)R(Yfq`3^tZqRB0jtr53Ml?AU6uZ~$>`AwGmp!OhBF&O z>DV=Vt+?pt#x1|loQNffqO;%Z_afBcNM$M%w>z6HZP}s09iRCvV#|mKWh>S&`Gx@! zAE0*M@E-|ktIkMvAtJ`=pNhkSK$$cLht>W_GJP-m01&9cEZ{tj2udD=2kMCds5#$d zcqNl_IrJZ6+w9(Fpg0Q?yX)w33zyBGiL5jGkg56L1dRPF*1v$JIx>C&XUw_9@5ZF5 z614ine=&G1kK7jvAGzRkG)cd3OA_-8N>rf>K1PU{!53GC80LS1k*&_q&-TyLxt7y{ zhCrnEZ^0+88T_}JKaCYe$ruYdP@+6IMVS^}*8vZyTS7Ia5d)XYkABNBe$tMd)H3Lh zVRNhM-MBVMdGKfyE(Y}ssp%PHIDpFxrXm$w>DLyyWxEEK8i0|ydERE3ZR$c3w5g7- zGHw^6L_4!CBf@-F2I*5KmKpuOMM5jb7Sy=8+&FN~5iTAG#B#@DYnb_(*1*$nx|TVg ziA$e$*%dXJAJK!LBJY(rcsfjnC_+=-8!D(qLWqtpjzTmrn9-?*Kt?FgN6%d+6@H{5o!Y(>=)bv zQ(CaV5<}wyM`+R)9e@Ai9|y)?ILHb$<3liJ_M%|0Iv+t!Yy%3Ur;-Q{BBth)pz!_|7<|Z~b@mWmHkQpKH44mD~ zawj+Df%DvI)Utv{=`%e+Q4jw!T~N77eX76SHk_tlk7NZw?HP|CzBwMYZS!%vzjS4Z zn1w7ASF%;Hr|Eb!dcdd}48Sx_9!JsE9cZ;h^qXRL9Fk)7eA!0YevE!251gT%YW48O z;zy$q_38fUv)bat-7}?S<4e2fT-WYEdCH(!<|to&83}Wp4uBhJCEf9(#y05A@3xqWz=Ws%0qdpBEiCtvmjTjXaoWRo5L&8gi){3%Q9gk z<)z5PiWXB*9^S-P687{?QjchV6gXZ6nAG9{jF6!^Ngf(o zrV|v5->MYH!L)>*k|r?%5S`kb;|1esFQt*pSigXX%p!-5-`jUJW0DoW21y{V)kIo@ ztP@Fr1k&J&~S%U?7t2 z)Cbr`w4GuItBK{nStEZ%eO+^!Fhuz#oxZ~z_5*D;DEGb^%2R00!^P@P^wt#TImg;= zh4ti+A>7uH*p4t;ov-y8Q)tQ8de=pZ1&+}=rG|6m#MCPl*C%Dvkya3N6Jf2pD_~~Vn?f8sL8}seKvpKpit}=hXL9(u zC??m3Idx@$Xo{^_l?Hv_25$j{1bX|OYX}k$k%?d=V>Wu#DgZ&virJ>8I^E!da^v58 zWM2)@sooL>x+%4wY0433p7f)pc5+rV8xlRXbu^QqE<9db5>%;{H+s4QK!L^?=rjpr zi7%exU+{uc0I{>+qWg;|jnI;?4v?F`;2jf`>8;gn0WwErKs}LnYmj^j=fP+I2pbOO zgCxeAWDX7M3BCBIhAWFi0h!cM0)PN;{Ck&H4ZpqHrn@gIvj6~OfBATdcDFf-yoKb@t&v}jy3VetU=ST{1 z@Cjs#(=7`Lq?-Z$mYD^&I}O&`7B%WhRYPoYkZm-GP^FE+)HR~20ZcZk{s~iHYLeP4 zm|6yWnLzBxB63s2)mb5Q>!x$y8rAeXeu%wNE?L^1ZuojNt>$mc@U;nWWdZ6+v!+YH zXSpFol@f@cnua*AxUEG5F#^ViZDk?$t?^J?hj0DBF@d$s z*rX_4X&w*&xA{-ZvtsC;iCiyQgxk$1-UJ{6WG}&tjF-WRuX{Q8;q&q+1@ARrEvCH! zN=duLiU1kzglv%LyjMmcrM-oa(Xh7&N^KmuX~xvMS?QJjuY298>OR0Iz(o z&x2*e5l;pZ$VeiY$V?WJsDP|wBRL48I7zd-D66_@A3yj{$?Fe>qw!=qn=h8D^=7-< zAC9N<<$Ak6p0D@kyR^Kry0*R%jl~n#=GHd8v%5z;NT$-6Y%X6YmPm?bK$+!uL6l@g z)nG+8kZIYD>-j-7tUc`82q};xS&CF?(q#}55tERvm0j88U_6I{!Ml?i?6zN$R@r*vN)hms)Ev=QY%}%7{(N|g| zTDfn`gT*;|vVf=+k*e1v5F+13C~C&1K>(Wr}vBEy0P%)JsKU)6fBz#_OFvc(U~kxK|uJ n9|2rUk!AzwC;WqKT}jeRDn1EgeWg;5eN#)c*I=`gc1NS?q&ft0we>7 z76c##gS)v=uT$fzB!jF}8lhz*u4n?OQ9CRk*6qY~WuIBu;6tqD(GOTDzN;CMTmU3ajx z2|HgN?XPu*>w$+*KULxyl20Tda88vrjEs{Zg{(!B7!!Au%IJ-2F~?}V{6bm99qLIT zg_Pq?|9PMJe1Dq1GpD@Sn_e8~4*QHN9U;jq^q>CvD$kW3Rt+#3&b%hDhQnuGl)8Ee zz}xkJEMT+k7Ba-DcfsTWZ9pSsk@v7o${&G-AYv0fQIW2ssQjc4N(AlvoNx4H!y*(1y(apPS#! zDF2UrmGqm|B&BT<{L!D56ar1@D?G}h4IvGWHnc&; z4to+BjfkpJ8JOo3auIxxi*uFSannAa(=Q|-*mZg8&5_hkp1bY{u#}6xKtW`p1LPZW zSIfFJK@Z2H-^B+AxUJL+Fp{`+gaia>Xja1)IlFj-Lo6Bzu^~I;ZevkPPlBh9^f73VkA$=y#*EJa zM`>_i*u?u9F+y_6L4bpt?-av*Gu?@6uPo1c+VYzQW4{9aRy7JW(dL zqV*cX`)t43%R|U$vKo0IiW&S1bqzwZYZ0!q6k)j*9Ci^L_lV+HD~`h@jia57W0SiP zp7kQaOLilK>__-W4B=y+;o_LbxH#=CE-ESr5)%Zlh5$}PAYd^L1_%Twf2%fphttlx zL>>ZgBBntFf@YB4Jz|?M7nFT9QbF6Xz)aAB0t13(00CqG+=c*xdKq>QYp4QP)B`(A z=&*IM04;u$zixL@9JMjG?0A!UOBf+2k8a#zR_v-DxJo`17OB&=I`yDivC?v*sOp8P z5UM2TSx`#2`wLPsz-9@hM%UpE@Tl^GGPIs5O+{w#Y@jq%Q2AamP-vi`2+z(qI*;B$ zSJKt=uJBqi`b+va_0T85N4a_#uBGy@oF7%vx(&*4A8n{86{fP+ooQbI^yt%2AV3c8 z!vc_fblTD;FoL&j0|b!cYjr!Q{&>jX{8=9Xd;$V0jyT#Z@ZemCe+Hqj^%c)2J)fru zk}wk1VLYs+m9&=DN6@I7m9r>|b3)FZAOEg*%zWBdFcght?O*H^Q=+ynkMJAeeKUe@!N5Bacqazlje+-~|9ucYfPoLf|6%w(ivEv6 z_!vUpkStHZHK0HNsHWlaHAm=bYgDN@>2Es;w@^50VPfrbQmu_j)>b5`+If7y0{$sGoL|z=P*E;`JDI&Yk-ORH zzsYrRas+lmI*UlpZ)y}*Q6b&<-Tct!^3<*SKZLbz`WeusA=%_qW>QhKMJd?v4 zyvox{L1DOJSZpmh7%r@K;M?V*^draTo`F08D!uS?vHBvq{))!nO?F2U!L5P$gX3Ay zI{nAgJjWSvaULgX0zifR4cp>Xze3)}NqG zfYm!_wzUwSG%r2Hud3y=DIot0d&^lvF?r4?q)~_pH2-1vn(257lXX2E>W}5MbZDB` zEI$E?g9{Uvl{=b9&d$|tpI$iantML@sukStAB>y`Y&^E0QoN_;o24^Ln{L|m*+0vl zYt^T!`hcc%b_Ojj_nD$Dsc-5l@xw1R{NlCpP4Iyvyv+H`-6QVbFTUbsL0CXn0?wm% zy#;Pyu+SnQ@7UvAVei@Neal(=+zPj`y4_0ayzin*F1zBYYp#oskwxSz%A;K0YH&uU zf(73T^P^2~-0+sT>6*--Hq$J#ZTGr>H@s=w5&8+FTVcieRk+pa{* z3`M3A%Zj@^gQbCKG@^0Vdmnss-cGv&y=^z0Yu(6bsR?D5d|;msRYdJ~2i^qHU#47j z#I_y(d_v4o=TN9-#6<%Uq41r@TtyUMb~I6d0FFjMP*cLBwF+cNuY{BujgBJI!6rE_ z$`=wh3Kso3$)!)H82p`_rp2w~3@tuM&f+N=(>XMo6~s9Tz?dM8hTQUO@?(JEba2E2 zfc`rG&;bJ4tA6=>6>-dHBX=*^STx*@3AqUCaUlg2n3N!^FG^v_)qW^ODBfh-XfF0l&T5x zt13<3EbJPsIN+T|v|HqYuT5|LRVm3zOJ8`?y8Y@lwgNPeq7|BpDkj=9*U7d5cdEH! zyR!BV5w{+5|H~pm@a1;N1>%*@eYy;8KzR^8M-xxm6%rS|ODQT%kB}DSDKq9TDCQdK z%h)vY0UfDCH#Pz?6rrl;YIs1AZ4r-0x&ckp7ZOzjGc>>nsaa`a<&{KPho*^!j>sjn z){#~>=}O5uG;vC((2;x?EN5%LO=ty<0MmFf7Z?W1Q)x9fxft|ej_vd0{@7K!E`-*# z4BFJfcP={68$n#xnY;~Qec6B?iRCAWb+YEW?KZOeG<0~10$1{$Xh3x{o1gh3g)0;T^WFzTxXS?pf6Vs?r{^;a~;KQ|<+k@?Gm=wRGL(#vozH+zc`t%`M$8dI{25g!fGMYe4DN zxD5Grq_|*C#NK7%;ECX%Qe2o%!f-GD{`TPP54?hWXtHQ2owFmCL7k&jJmoyzAc3$h zt~k&RR?D#ic$r1&bz%`HA(N_Xqz_p4Amz572wnbez_#| z{PwPko7=hk7yN)%j{MnCN4)LiU|z!bw_j^|!Rl8zJ`F}>A#CJ<5~7 z3kq_u38MbetFX;4@Tnr)v92gki;8#sToBp<9T&xHj5TqW z+p?3xsbcLt`tk}IS@yT!H5i-y})9#R^GDj z4psc5+O<<8HG+8q@BpQ;Q3&j>ZngZg-yo4sx*hw0C^++&&idNg)~ES`DzMdiF7io# zqCs_Wv0hzo>cdBN8r(_`I>}%Jo!ChkUI2A^KzpIZ6>K0@k*qFh!JUJ^@UY@#(=$_1 z?>|n(SodWekNNoPt&cL7u63R3jX%E6FU+Kw+Pq1$z1tz=Ci)@eI91YYyce3tF)^nF5;NIhtZ}JsSO9WW9 zo=06rclfZyysRSiP<_-1#}$up$(`?vd-Y-{Qg!E8<+;S_BZRyV98I`@X4jvhMfX~r zh+FQ-&B$ACNZ=dW8MSA=KR2~MFLjNyDdsBp5B`QH^5W=T28{NjHxmG!NAYsnN>ZnT zZ6OsndKojtVa zY5s(+P04Z&61RS+qw7c^jXIDyyaKdD7V9nG$M{FsDC=JJ6zkPNCP)B&?k(U)WbNEw z+Dt_3I%rT(EKEwXu#tBZd6vH&A?aMTHhUjzSpd0{yRQuynQ48OGsN~YJSKa&#U8zK zoOPX1`^2cDzrJ1r<-#3FZ$$r@h2|?LFd3#TqmswS6wzoEo5~vr9rrF0o z@H1d}IF^}PLb$AB87?noAW(Sr7nKfovxX!X)@c zlBV;?0rs0ia#f8dp;}BBcXF*yU4j5S{;Y;AlD7OL-X&D%sc9UVHLk0cvq`rrIP>5b zwPFI?vaTYlQ3Zv2-MN=1)2uE`{~W}ke5jYB9aOVh8AOVO=WMtL$JMaKw}?ZPPMQ3k zHW_~6P4>4u{JVD1gax>Jlc^ui*Da*J+_O9AA z4i(Wfz2LyTmE}HvUmWN*YTq8GF0b6KP3m|o8*rf^>Mc(;e#_P7SX{G?Y4Nyt3hpOQ z*ArP*EtDHBcoEKpz(Z^bJ_3T5T+93@!y(&c)(2Mw5sLt~q^==ueoNk2X(`S%NL>I` zGG7xeyfvcdk}^Y6uKMB&!@Sa~Z>%EuCL&8xKb5EElV~uKIU<8l=%)Fyd<4+V)ssJ< z?&^zwp`u>>zfL6@FCV;`rm?1&*B~+@bTW?eNSi$U*~kaq*=Z=~;l**}eUu+ZVJA+1Z6sy1!0;Q1!20G1h6Y5 zG6*0)5IC|d3)EH>3Qh)n@@av$yo^MWtLU%yI%T8(Z0A=JtbSF*$&m6XKut}PEvqZl ze9=2-vAODFirPVBk`KAC``{_axh2)A_Ap93b*}=7dizsrm9kE4=1EN#5pCqkSJ=I( zOrnC5K}wp}W#N<(2p`N^`oO+t1Nflc7*UWk!gZKHn0JgT3>?2K3$`>x^$rO|)ZDxW-Zc#3b|RuitQA4+P1RP_wdn@ClYo*O+kdTw;vC|ZjzX#;}IS7jGH$q{6C8G@03;3Y$_ z6A&CF2&OV*zDh6Kc%RZZiV&A;u^AbXTX&TW>C$;Nq_-3s(px_p(%s93^j2X*x(OT7 zJ;Hpw!LsIMX1hsDvOevXbaDM86l<_=Z9t2I{LHB_zO)#)yTwz11ELwM_ z6HVelYQ}?iuy~vSFy&4vXma3ETvOkGc}16wlWX~!9+l2Bp@>r5DaAqrZQy40y1+Mas+I!RzU9p`!fidgBR9+KYpxpdXP{i9a< zX+L7=^1q~7``Qn7^55tJz+NyIm{PBOp^=dY&5(8|pY|*5E=QsQYzz^#Ef)i)s=n$9 zpc#^kJCv{2Qre|Yg|Bg&n!IAhHKz>>6G1yR7EPws1!BhEZKQ({k&IxRgQeG4u?(~3 zJjek3EWYMcQrfY)sGR|EjprBYF!b$|*j!k)B3agDqrJY%#j+!ZtDXjWG!NJjsAiYDBTOs^D z(R-LMUXC)xrHF31)Fdhn4uL!%04CNb)TU^|oL}oa-n}@(=_0aQad|(Jh?k>`1t`!p zIpB~XP_0l4Zs8ob-ZSoE`Qg$$+6m*U=kSr}} zfG#pBH%Qu>O-!!+)_Eki67nb$2Is7Ld{Xgpl(8B{M3}JQ29~oc^AOL)(Zz&OtBeIf zM19LOS>V1h1VxPkrbvysyj%{*sg)9umR#h1rvzQx`lMb9Iexp)cSHaL3Wx+dTJ@PnsQOUr9706dYyWgic@K-L`ghH$>zyS zGMnr^*~7ApGQVuQ>>b$wSyJ|u?6j;*Q#41aMKSOV$gYy%IJOWMOFb zDPbzjU0v=#75Vkr_b=34$v2X}AR$N|(t}7)07QchLG{oev<~e+Z0IfY?>(?1oC5EM z%i%V76kdkUz}MhkQW{cTQnk{EG)bB+Jt6%RZGx^wccE`0B8WY*54ng@#~5SkFmJFZ ztP<87OTp5yU4EwFi6aD9%mKmmI^g(B#_wO;1$dMCO1+9ut1AP?K8WE!O7vDDFnsRb z1h80@8a8W|6CDiaY?5nNIq=r%78_;CDU<2!yqQ-ksf6}ukhnl2NDvPxQu2V8vulgZ zTf9XKW0Pdd8*+HOLr)B^bL`C>X76IZ3uS(1laN>96k6T+$AOMkY1;aEkjD5w5#Z4Jz zf!%Y+f0~ZuJ~pGDX&Y{>UUQKJBGyV;Bd zfR2OJ5y6u=FE=fH_*A7@o0_Vf`yoHqz)?ySRktG%T*i66%xz)onwoXem<1r=aG_-jX6-P1><#KtSKy@ZE>jPDUwW2wW&V~F^1FNVGL}EduP+-9twZwpK zt4M4K>=gbs7CFuYajvx-?}AqB&)pkl5KU}QjKA+og(K>Z`4d@zXF%cBrA;dFdA38G zPU6~NZ}L8%P9M*Bt;{;=;grf?u&JY54vhg}QR?jxJ@`g=1jSoh!c=*##CI0t3qrl- zC=;JhN+?MRTolPrzAztpHX*! zqk;%EhQR`{e->g>4! z(if2N2CP3-RQ949`L}_dZ|eno)TZ2PP^`VD*-6n4Myaz`#!M%sym z9$_JANDwD6utQKf3TEWiGz4LnDw2i-X|r{j@@i0QTTerZ#6d;`bL85PCRPIIG8s$R z98D(>s(ms~8v&mF(=Mo$`e>2fKYR2MeYK>0pa3QwtiE2>M;8;dr*Au8L zw4i+AtPbe>e#c(O)~93?p(q}4`C1PtQ<+TUeV|T~M_4RKpd0H*O5$`~cr~)LhZE~< zfiQm~YOKfI{s{eY%?^2NKqc7)lo#6I-Eec&E@VkD9rD_(5W`#o}(iet%$`?gE_iyv=oF)J$@p8BXb$C-m{6-d3Z zn^v*7_|L<*%NL>jod`i3AU`%2r{C~gu&iDh@3G;-x9;FO=U&M8!@MxJlQ%^0nfG|| z!_+QAS~``9bZR%jUz$TfdlksJ^WFJE2~CaNvc@Lt+38VVff=k~57zC3zf&#z`AF7n z1a}luxU#0s1*~Ltlq@i{^V&f$4xJu1?j#jQR8iT>A!^qP4G-P|dc0EPYS|Je>cFlL zOp28aNI{qxgL0bITQF;#Qh*%XuG~|p!}0SoylWu{0&n-|w+ewk>6Fs!WtC^j{#PPg zd#25}(X@OW74qKru}0H63A!05XE;pze680#EP}6?y2w#5P?z1Hu$x%m$LqXIM6a1txeQ*K2UL$I>OnPilLM|n>%q6;m7^+g z@JdaN{&FHtDtkk-46{6XOY9|IKS5T&8i$^5Yqp9Ap%onPxn>ZHRA+}!P%K#Kp{Y^8 z5LfxD45ksZ8mECvS|L+7Ha)BCX0@GnqO`QsLM7mS@@N{T7GzqzyJ%&FWABGtBF746 z^{#P8&lbktX|Yq5NuiTS*RFoArAMb`fM3-t>#Q+^!j_BEM~K1@kxyNY@dD48Tfn)M{=hl2+k_3V!XKT|Id$^4KwSy>AIN)^J5bH zzvrgn0d=iG~xITg5ov?1SQDvPK zuMJY|{b+1Kcn9|I7l0KbK;VcKN`}GtA13#0_j|ohwRonL(z~_6>&@k=`T@(&=bcRs zb=$q@q%|kJ94|#8Hut+f`gZQ*+fjCB<#OoMIio9mT*JPeNH5&)l?qj%0`r+gbE!mS zR&S+eT`CQ}H(8QdrGq3b=Rml^-Q%Io_;!^!2P)jO=+Q?*G3Id1YmQKKrYtlFtVPEPNLORnMX15 z#4J49wwDvIT2MM-3|`PWOGTouR)8UE{FNNH79LL;M_!M8YntQm$g^Sxoxt#Gu~j#1 zRMnjxR6~8Tc4wJo=Gu_Qz5;quMHNkD_Qg=2%;hL8=fsJUn9)y^E-$StZ8F2@k&Bkc zwI!#%SaSB$-`T$G1gM}Pl?Fpgwa*sAw+Q#0pgeMDY;!BYpVj|j_-MoYc{+crbLVJo z{<~Hd(1&m2T44 zeKrdg4#Bw#-X_ccAvRmgj~j99rFYt>^t>;#0fUEZq)EqmCFz;{=cRl~AL+Me3&Y1o zQ;cWBOUY#Byiu?F;8V(YpQd^4sP>!AXO1Rg8=mEfkDR#xbC)2O{%k=`cgyD8OUTVc ze#9)MsW-V8j9>ies;+ z(@gd$W5vUsZd&9yGX7OroprqElu)I$|cp<5vjXDNoVc%In zl=y^O1nQOg7_Cz9OXxgZ7pfb(jj`>6aFITL+g2=FGeEXD%MbOKlqF+29I<$nMN)K( zY!NoWYns%$4#sL1${V41s+Oo(D~2s9Z1#E_wb{K;>ox*jcy**x?c90z|M)=8l`WnX z7_Ptn!N*?@9{A#TUat3d?_Jpcw948hoiZ#`mySnzY&LD@MRO;P?`iS69k1rM5AVci zWtyAU$cnuryQ{^tEZcoX({ef0-6(zg!*rvenR~uQF{#k2<=wP$I>)(15HZ|6WGsJ7 zMi0t+7~s>;&1)Rt7%7JHqec=NXkn1O{B7R+?_~7ir-@ICGiLEHFqg08&wmpCWMUjux%;TZ~u z@~ed7m~MLNe4((v#X5#NF)O!HsAm*t+>KGv@5R%w5~D>2&1?fr2{4xIVWSsigBQ<& zgp|>3O2R_~96d_bGwZB!j4rHrU^(1V=47AGGAN2(?+)<=vEPZkWc$<4ZucQw(XpYX z*`=G}$}~$CakNVyHm(948ylrIibU3s8_Dt|m%i;;LE=EKJmKS5$EFF0Q{w%|DiRwi zmHMHZ`msQFA+XbF?@&ue*qQ-65;3n2%3wra6UtqgAPIa@s!}6I(-1x0M=2C2>I-?ZU>CruMhOUG&@n zYxqd&SJX%~RYnT^fEvr-*n~}1o=n{l6{Z|HRL<&I$L?lNX2qD`Qm$IgVF(M2uGT5f{K*5AQ0fk>>`-#6D9DXUmQh{zY|yU zwwF+^QPMQMtnKDciXe>4fr4oHeF(5C49bj_Y_`WyYniMG8zSRXvyl}|s-JT;?DZzl zAT4`BUo+M(a#$OKo2+a$orfupA+E!{%bqF&dl&7hZCYF*n4v;LGGVi$S)yWx&}dP4 z(a5!}-NOnSV2g3Sx0Sy7>-S&m-+i~Ae3i+3nyz%ea^F{lF?Q91Qju@x#K?BujU@Eq za21-q{<=uZrW%@WFlyOab(*WJZgsovkbC;TG(1~=YE)}{ScVq~H0dwOp1(z&v{}Eb zcl-jj@Gfs7!gwi|{vEl`Tq zd$qeSPjG^DuDlz+*aoB0Q*944WO$cM6OX1ptc)77OF19Ig;_e9@6EQ|L>!)2y|gzO za9EgOH8?9@t?)hf{F|f9t&eQ1yCQV+6un1|WHKZEK0kW&Bz?_t3shZQR4MaPiwmaC zciy9ugstyVRL>SBPM^8Zt;SLhksaj9J-5X&41ck~7^Gys1J2kua{YsIx;>KEIL{n^ zKLW0+i)4*<5J})Cct^Sy)7Tz4r^b)JJ>RXf*_mC#QK*_Wfs@SaK@=>eed1MA+Y|&x zhEY}R=44Myc^`BOKtXWQAy?)X?PkkXV9aW+QMEy(XE@o1EyKeW6E7J9)yd#}g$S4{ z8fC+7DSFt<{?{!D1Mpsjym3z(sr^)|)-Kk{wF}aS7t`}`Pu?lXTiRm-C=o!rACs{zHdH(urr97p)oYd4dCajtr4^NkFZ?l}y7Z{kq)c zT;wKHImvtc6_J;7z&Z03vX?~2hZv8{dumZ)ywMfj;_t}{!eN-;eZI=}!iS@)i`Fzu zDmJvF^6q-lV$+W_p6uxCrq7IyeXr=E72l7Ip6RAc9d+|^S)P;}Z#=K%yA+cRnw}BV zF70U{hk7Z8JTZ~b!WJsxw|R_uL@Dd8Rmmoi^upVt*-OOzTs11z+^OY-^YCIyo_vgb zqaR;D#=8Kl!t(diqkGEsp}vcqbLv&YVdX%U7KQN2;ddWxH)?Bi)9Tv9pOHAyr*q30ar{AKmUP$+fDq-Uhxq9!jMj(;tKos9msp zsFH@IiFJhV3huZb@VzWqKzRpxYFEOsdiQx)0tq~m~cGZ!4y5chc9 zTDKX)2oA;gE|$>6BIX)#rZnjV%WceF)NEgiO$)&Sx4k znt6P{sxL6i%Jpj^gt6KD$Ms&uawiOg|7xGPFFoNV#R(7)R)*E6<#%gZXzciDYxRL%QO3SO?CHf0<`h>pNwx`c(km!j=2R>d%Vl7*ofgg7voLHdWTf_;KKg)$gLhQnGjn2cDTH zo@~j~Sdh$P6_@Sy2Tm9LC?N(JMLZq}di!tY-j&Ohh|O7;&FZ>bs}c&GrDY`L!(dUa||9I zQ|s5!>`iwDmcmW(T`iUDlGef&+Ip!}tEA~W)N}8lvP*1*cd95NOno>-Yv8?QIuT@ z-!#>3K9Hoa`C>*@A`uIPVt&8R_soa&8FzSdyzuR)Ih!xOY`TgH=i z=>XpHs3!~GcGkw>>mz102YZA)9L9t(e5}<*e5Z#Ni$V&+C43#n}W1^qexDGl5Jgr5dkR%SyEc zxsT&z`b5C}qcl0W%1h1FC%n*{U!6l-$aCFSA5{ocuC)yfT~j#z}~Y(2qbc9&i;~JNZKtS=-6Z z&hJ0gOYP$}+2vLGS&uF^O-uxX%LFYNG#VPfeoX~ zHZcmIZ?#%m(Q~*ydC`4y&y<0}e1@n07QIBT z#9LMM1K<&vuDP6PvM%kZZ)-y+DvjEEABgX%>qWlS<6NyJHK`M1*a2Vnd}^CC*Al&m z%20uO7*}=HX;TyiNk$tt)$37qtxP#2r=+^3wbcN4NmQE)PzKl4%@CJzGu$qm#w7}< z=^dw~NikYWMS7>hYZy~KFGWeh$lS+;x#j`AmQZHr+N~+7u zsXG0PenJCDojf|Hk(fU&pb=Jb9&zP}5l-!almz8bvE1{L3!rw|Ujcu(mOoFX6 z&9bd>mYHZ((458#r(w>1Bcu_m{?N*yQg`cg82MUfpsvxF8Dr3#9iF508d&XZodeg= z)}O&>xOE;)-JILCs8m2yVyUtf!HZP-ANV5})IY)MK!s$d6G@l>8P$nt05c_zQs=Vm6$JfhRXK}4j%)8s~3 z850(E310}2G+Yp7y1a|l@xi`eB^rW!)x3N%r{z z!B9AYqLY`Dsp*(H6HjQ#)T}<2p2rKBEXghAX<=#ED4Hc}#V)hT>Y7ts-*9X7Mia$w zf~07M<#<7qWJT3=7q@W`CO~8N z=RwFfb>7;?m5@pso7-1)Qb;MKlp~*wvv?C}On@>c&-u{sr8wuD^P?_c0@Udzh8V^e zW4s^nT{z^@m;hx?Ne~r62qA>nEdc6N%n1MhIB>x!&N;@I*VtCbZtT@{n<=)9fC*6M z6qls6){d=QLYM$;Q%;5KRtOWIZOX|ruK;!4IsZ^z{F3pH@AuEU|Nr}6ul{=d{a+{c z=c_}_3YbTz%qW{XoA7NumsZzFZ`-)_10BjIJtmv^W;%diY`HY+9$kB|xctfg$Z&pe CAH|aZ literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 b/invokeai/frontend/web/dist/assets/inter-greek-wght-normal-d92c6cbc.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..eb38b38ea077b5d58f9c998955e33c8974eb527f GIT binary patch literal 22480 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 literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 b/invokeai/frontend/web/dist/assets/inter-latin-ext-wght-normal-a2bfd9fe.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3df865d7f007da9783223387e875bfc1b6f48c0d GIT binary patch literal 79940 zcmV)YK&-!aPew8T0RR910XRee6951J0?Hf!0XNYA0RR9100000000000000000000 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

lPo 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 uSC)aGdS)4Xj0pe` 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 Ang9R* literal 0 HcmV?d00001 diff --git a/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 b/invokeai/frontend/web/dist/assets/inter-vietnamese-wght-normal-15df7612.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ce21ca172eabc84c2ad452ae1e254ad6ba5c30c3 GIT binary patch literal 10540 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 dk(7PGKf + + + + + + + + InvokeAI - A Stable Diffusion Toolkit + + + + + + +

+ + + diff --git a/invokeai/frontend/web/dist/locales/ar.json b/invokeai/frontend/web/dist/locales/ar.json new file mode 100644 index 0000000000..7354b21ea0 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ar.json @@ -0,0 +1,504 @@ +{ + "common": { + "hotkeysLabel": "مفاتيح الأختصار", + "languagePickerLabel": "منتقي اللغة", + "reportBugLabel": "بلغ عن خطأ", + "settingsLabel": "إعدادات", + "img2img": "صورة إلى صورة", + "unifiedCanvas": "لوحة موحدة", + "nodes": "عقد", + "langArabic": "العربية", + "nodesDesc": "نظام مبني على العقد لإنتاج الصور قيد التطوير حاليًا. تبقى على اتصال مع تحديثات حول هذه الميزة المذهلة.", + "postProcessing": "معالجة بعد الإصدار", + "postProcessDesc1": "Invoke AI توفر مجموعة واسعة من ميزات المعالجة بعد الإصدار. تحسين الصور واستعادة الوجوه متاحين بالفعل في واجهة الويب. يمكنك الوصول إليهم من الخيارات المتقدمة في قائمة الخيارات في علامة التبويب Text To Image و Image To Image. يمكن أيضًا معالجة الصور مباشرةً باستخدام أزرار الإجراء على الصورة فوق عرض الصورة الحالي أو في العارض.", + "postProcessDesc2": "سيتم إصدار واجهة رسومية مخصصة قريبًا لتسهيل عمليات المعالجة بعد الإصدار المتقدمة.", + "postProcessDesc3": "واجهة سطر الأوامر Invoke AI توفر ميزات أخرى عديدة بما في ذلك Embiggen.", + "training": "تدريب", + "trainingDesc1": "تدفق خاص مخصص لتدريب تضميناتك الخاصة ونقاط التحقق باستخدام العكس النصي و دريم بوث من واجهة الويب.", + "trainingDesc2": " استحضر الذكاء الصناعي يدعم بالفعل تدريب تضمينات مخصصة باستخدام العكس النصي باستخدام السكريبت الرئيسي.", + "upload": "رفع", + "close": "إغلاق", + "load": "تحميل", + "back": "الى الخلف", + "statusConnected": "متصل", + "statusDisconnected": "غير متصل", + "statusError": "خطأ", + "statusPreparing": "جاري التحضير", + "statusProcessingCanceled": "تم إلغاء المعالجة", + "statusProcessingComplete": "اكتمال المعالجة", + "statusGenerating": "جاري التوليد", + "statusGeneratingTextToImage": "جاري توليد النص إلى الصورة", + "statusGeneratingImageToImage": "جاري توليد الصورة إلى الصورة", + "statusGeneratingInpainting": "جاري توليد Inpainting", + "statusGeneratingOutpainting": "جاري توليد Outpainting", + "statusGenerationComplete": "اكتمال التوليد", + "statusIterationComplete": "اكتمال التكرار", + "statusSavingImage": "جاري حفظ الصورة", + "statusRestoringFaces": "جاري استعادة الوجوه", + "statusRestoringFacesGFPGAN": "تحسيت الوجوه (جي إف بي جان)", + "statusRestoringFacesCodeFormer": "تحسين الوجوه (كود فورمر)", + "statusUpscaling": "تحسين الحجم", + "statusUpscalingESRGAN": "تحسين الحجم (إي إس آر جان)", + "statusLoadingModel": "تحميل النموذج", + "statusModelChanged": "تغير النموذج" + }, + "gallery": { + "generations": "الأجيال", + "showGenerations": "عرض الأجيال", + "uploads": "التحميلات", + "showUploads": "عرض التحميلات", + "galleryImageSize": "حجم الصورة", + "galleryImageResetSize": "إعادة ضبط الحجم", + "gallerySettings": "إعدادات المعرض", + "maintainAspectRatio": "الحفاظ على نسبة الأبعاد", + "autoSwitchNewImages": "التبديل التلقائي إلى الصور الجديدة", + "singleColumnLayout": "تخطيط عمود واحد", + "allImagesLoaded": "تم تحميل جميع الصور", + "loadMore": "تحميل المزيد", + "noImagesInGallery": "لا توجد صور في المعرض" + }, + "hotkeys": { + "keyboardShortcuts": "مفاتيح الأزرار المختصرة", + "appHotkeys": "مفاتيح التطبيق", + "generalHotkeys": "مفاتيح عامة", + "galleryHotkeys": "مفاتيح المعرض", + "unifiedCanvasHotkeys": "مفاتيح اللوحةالموحدة ", + "invoke": { + "title": "أدعو", + "desc": "إنشاء صورة" + }, + "cancel": { + "title": "إلغاء", + "desc": "إلغاء إنشاء الصورة" + }, + "focusPrompt": { + "title": "تركيز الإشعار", + "desc": "تركيز منطقة الإدخال الإشعار" + }, + "toggleOptions": { + "title": "تبديل الخيارات", + "desc": "فتح وإغلاق لوحة الخيارات" + }, + "pinOptions": { + "title": "خيارات التثبيت", + "desc": "ثبت لوحة الخيارات" + }, + "toggleViewer": { + "title": "تبديل العارض", + "desc": "فتح وإغلاق مشاهد الصور" + }, + "toggleGallery": { + "title": "تبديل المعرض", + "desc": "فتح وإغلاق درابزين المعرض" + }, + "maximizeWorkSpace": { + "title": "تكبير مساحة العمل", + "desc": "إغلاق اللوحات وتكبير مساحة العمل" + }, + "changeTabs": { + "title": "تغيير الألسنة", + "desc": "التبديل إلى مساحة عمل أخرى" + }, + "consoleToggle": { + "title": "تبديل الطرفية", + "desc": "فتح وإغلاق الطرفية" + }, + "setPrompt": { + "title": "ضبط التشعب", + "desc": "استخدم تشعب الصورة الحالية" + }, + "setSeed": { + "title": "ضبط البذور", + "desc": "استخدم بذور الصورة الحالية" + }, + "setParameters": { + "title": "ضبط المعلمات", + "desc": "استخدم جميع المعلمات الخاصة بالصورة الحالية" + }, + "restoreFaces": { + "title": "استعادة الوجوه", + "desc": "استعادة الصورة الحالية" + }, + "upscale": { + "title": "تحسين الحجم", + "desc": "تحسين حجم الصورة الحالية" + }, + "showInfo": { + "title": "عرض المعلومات", + "desc": "عرض معلومات البيانات الخاصة بالصورة الحالية" + }, + "sendToImageToImage": { + "title": "أرسل إلى صورة إلى صورة", + "desc": "أرسل الصورة الحالية إلى صورة إلى صورة" + }, + "deleteImage": { + "title": "حذف الصورة", + "desc": "حذف الصورة الحالية" + }, + "closePanels": { + "title": "أغلق اللوحات", + "desc": "يغلق اللوحات المفتوحة" + }, + "previousImage": { + "title": "الصورة السابقة", + "desc": "عرض الصورة السابقة في الصالة" + }, + "nextImage": { + "title": "الصورة التالية", + "desc": "عرض الصورة التالية في الصالة" + }, + "toggleGalleryPin": { + "title": "تبديل تثبيت الصالة", + "desc": "يثبت ويفتح تثبيت الصالة على الواجهة الرسومية" + }, + "increaseGalleryThumbSize": { + "title": "زيادة حجم صورة الصالة", + "desc": "يزيد حجم الصور المصغرة في الصالة" + }, + "decreaseGalleryThumbSize": { + "title": "انقاص حجم صورة الصالة", + "desc": "ينقص حجم الصور المصغرة في الصالة" + }, + "selectBrush": { + "title": "تحديد الفرشاة", + "desc": "يحدد الفرشاة على اللوحة" + }, + "selectEraser": { + "title": "تحديد الممحاة", + "desc": "يحدد الممحاة على اللوحة" + }, + "decreaseBrushSize": { + "title": "تصغير حجم الفرشاة", + "desc": "يصغر حجم الفرشاة/الممحاة على اللوحة" + }, + "increaseBrushSize": { + "title": "زيادة حجم الفرشاة", + "desc": "يزيد حجم فرشة اللوحة / الممحاة" + }, + "decreaseBrushOpacity": { + "title": "تخفيض شفافية الفرشاة", + "desc": "يخفض شفافية فرشة اللوحة" + }, + "increaseBrushOpacity": { + "title": "زيادة شفافية الفرشاة", + "desc": "يزيد شفافية فرشة اللوحة" + }, + "moveTool": { + "title": "أداة التحريك", + "desc": "يتيح التحرك في اللوحة" + }, + "fillBoundingBox": { + "title": "ملء الصندوق المحدد", + "desc": "يملأ الصندوق المحدد بلون الفرشاة" + }, + "eraseBoundingBox": { + "title": "محو الصندوق المحدد", + "desc": "يمحو منطقة الصندوق المحدد" + }, + "colorPicker": { + "title": "اختيار منتقي اللون", + "desc": "يختار منتقي اللون الخاص باللوحة" + }, + "toggleSnap": { + "title": "تبديل التأكيد", + "desc": "يبديل تأكيد الشبكة" + }, + "quickToggleMove": { + "title": "تبديل سريع للتحريك", + "desc": "يبديل مؤقتا وضع التحريك" + }, + "toggleLayer": { + "title": "تبديل الطبقة", + "desc": "يبديل إختيار الطبقة القناع / الأساسية" + }, + "clearMask": { + "title": "مسح القناع", + "desc": "مسح القناع بأكمله" + }, + "hideMask": { + "title": "إخفاء الكمامة", + "desc": "إخفاء وإظهار الكمامة" + }, + "showHideBoundingBox": { + "title": "إظهار / إخفاء علبة التحديد", + "desc": "تبديل ظهور علبة التحديد" + }, + "mergeVisible": { + "title": "دمج الطبقات الظاهرة", + "desc": "دمج جميع الطبقات الظاهرة في اللوحة" + }, + "saveToGallery": { + "title": "حفظ إلى صالة الأزياء", + "desc": "حفظ اللوحة الحالية إلى صالة الأزياء" + }, + "copyToClipboard": { + "title": "نسخ إلى الحافظة", + "desc": "نسخ اللوحة الحالية إلى الحافظة" + }, + "downloadImage": { + "title": "تنزيل الصورة", + "desc": "تنزيل اللوحة الحالية" + }, + "undoStroke": { + "title": "تراجع عن الخط", + "desc": "تراجع عن خط الفرشاة" + }, + "redoStroke": { + "title": "إعادة الخط", + "desc": "إعادة خط الفرشاة" + }, + "resetView": { + "title": "إعادة تعيين العرض", + "desc": "إعادة تعيين عرض اللوحة" + }, + "previousStagingImage": { + "title": "الصورة السابقة في المرحلة التجريبية", + "desc": "الصورة السابقة في منطقة المرحلة التجريبية" + }, + "nextStagingImage": { + "title": "الصورة التالية في المرحلة التجريبية", + "desc": "الصورة التالية في منطقة المرحلة التجريبية" + }, + "acceptStagingImage": { + "title": "قبول الصورة في المرحلة التجريبية", + "desc": "قبول الصورة الحالية في منطقة المرحلة التجريبية" + } + }, + "modelManager": { + "modelManager": "مدير النموذج", + "model": "نموذج", + "allModels": "جميع النماذج", + "checkpointModels": "نقاط التحقق", + "diffusersModels": "المصادر المتعددة", + "safetensorModels": "التنسورات الآمنة", + "modelAdded": "تمت إضافة النموذج", + "modelUpdated": "تم تحديث النموذج", + "modelEntryDeleted": "تم حذف مدخل النموذج", + "cannotUseSpaces": "لا يمكن استخدام المساحات", + "addNew": "إضافة جديد", + "addNewModel": "إضافة نموذج جديد", + "addCheckpointModel": "إضافة نقطة تحقق / نموذج التنسور الآمن", + "addDiffuserModel": "إضافة مصادر متعددة", + "addManually": "إضافة يدويًا", + "manual": "يدوي", + "name": "الاسم", + "nameValidationMsg": "أدخل اسما لنموذجك", + "description": "الوصف", + "descriptionValidationMsg": "أضف وصفا لنموذجك", + "config": "تكوين", + "configValidationMsg": "مسار الملف الإعدادي لنموذجك.", + "modelLocation": "موقع النموذج", + "modelLocationValidationMsg": "موقع النموذج على الجهاز الخاص بك.", + "repo_id": "معرف المستودع", + "repoIDValidationMsg": "المستودع الإلكتروني لنموذجك", + "vaeLocation": "موقع فاي إي", + "vaeLocationValidationMsg": "موقع فاي إي على الجهاز الخاص بك.", + "vaeRepoID": "معرف مستودع فاي إي", + "vaeRepoIDValidationMsg": "المستودع الإلكتروني فاي إي", + "width": "عرض", + "widthValidationMsg": "عرض افتراضي لنموذجك.", + "height": "ارتفاع", + "heightValidationMsg": "ارتفاع افتراضي لنموذجك.", + "addModel": "أضف نموذج", + "updateModel": "تحديث النموذج", + "availableModels": "النماذج المتاحة", + "search": "بحث", + "load": "تحميل", + "active": "نشط", + "notLoaded": "غير محمل", + "cached": "مخبأ", + "checkpointFolder": "مجلد التدقيق", + "clearCheckpointFolder": "مسح مجلد التدقيق", + "findModels": "إيجاد النماذج", + "scanAgain": "فحص مرة أخرى", + "modelsFound": "النماذج الموجودة", + "selectFolder": "حدد المجلد", + "selected": "تم التحديد", + "selectAll": "حدد الكل", + "deselectAll": "إلغاء تحديد الكل", + "showExisting": "إظهار الموجود", + "addSelected": "أضف المحدد", + "modelExists": "النموذج موجود", + "selectAndAdd": "حدد وأضف النماذج المدرجة أدناه", + "noModelsFound": "لم يتم العثور على نماذج", + "delete": "حذف", + "deleteModel": "حذف النموذج", + "deleteConfig": "حذف التكوين", + "deleteMsg1": "هل أنت متأكد من رغبتك في حذف إدخال النموذج هذا من استحضر الذكاء الصناعي", + "deleteMsg2": "هذا لن يحذف ملف نقطة التحكم للنموذج من القرص الخاص بك. يمكنك إعادة إضافتهم إذا كنت ترغب في ذلك.", + "formMessageDiffusersModelLocation": "موقع النموذج للمصعد", + "formMessageDiffusersModelLocationDesc": "يرجى إدخال واحد على الأقل.", + "formMessageDiffusersVAELocation": "موقع فاي إي", + "formMessageDiffusersVAELocationDesc": "إذا لم يتم توفيره، سيبحث استحضر الذكاء الصناعي عن ملف فاي إي داخل موقع النموذج المعطى أعلاه." + }, + "parameters": { + "images": "الصور", + "steps": "الخطوات", + "cfgScale": "مقياس الإعداد الذاتي للجملة", + "width": "عرض", + "height": "ارتفاع", + "seed": "بذرة", + "randomizeSeed": "تبديل بذرة", + "shuffle": "تشغيل", + "noiseThreshold": "عتبة الضوضاء", + "perlinNoise": "ضجيج برلين", + "variations": "تباينات", + "variationAmount": "كمية التباين", + "seedWeights": "أوزان البذور", + "faceRestoration": "استعادة الوجه", + "restoreFaces": "استعادة الوجوه", + "type": "نوع", + "strength": "قوة", + "upscaling": "تصغير", + "upscale": "تصغير", + "upscaleImage": "تصغير الصورة", + "scale": "مقياس", + "otherOptions": "خيارات أخرى", + "seamlessTiling": "تجهيز بلاستيكي بدون تشققات", + "hiresOptim": "تحسين الدقة العالية", + "imageFit": "ملائمة الصورة الأولية لحجم الخرج", + "codeformerFidelity": "الوثوقية", + "scaleBeforeProcessing": "تحجيم قبل المعالجة", + "scaledWidth": "العرض المحجوب", + "scaledHeight": "الارتفاع المحجوب", + "infillMethod": "طريقة التعبئة", + "tileSize": "حجم البلاطة", + "boundingBoxHeader": "صندوق التحديد", + "seamCorrectionHeader": "تصحيح التشقق", + "infillScalingHeader": "التعبئة والتحجيم", + "img2imgStrength": "قوة صورة إلى صورة", + "toggleLoopback": "تبديل الإعادة", + "sendTo": "أرسل إلى", + "sendToImg2Img": "أرسل إلى صورة إلى صورة", + "sendToUnifiedCanvas": "أرسل إلى الخطوط الموحدة", + "copyImage": "نسخ الصورة", + "copyImageToLink": "نسخ الصورة إلى الرابط", + "downloadImage": "تحميل الصورة", + "openInViewer": "فتح في العارض", + "closeViewer": "إغلاق العارض", + "usePrompt": "استخدم المحث", + "useSeed": "استخدام البذور", + "useAll": "استخدام الكل", + "useInitImg": "استخدام الصورة الأولية", + "info": "معلومات", + "initialImage": "الصورة الأولية", + "showOptionsPanel": "إظهار لوحة الخيارات" + }, + "settings": { + "models": "موديلات", + "displayInProgress": "عرض الصور المؤرشفة", + "saveSteps": "حفظ الصور كل n خطوات", + "confirmOnDelete": "تأكيد عند الحذف", + "displayHelpIcons": "عرض أيقونات المساعدة", + "enableImageDebugging": "تمكين التصحيح عند التصوير", + "resetWebUI": "إعادة تعيين واجهة الويب", + "resetWebUIDesc1": "إعادة تعيين واجهة الويب يعيد فقط ذاكرة التخزين المؤقت للمتصفح لصورك وإعداداتك المذكورة. لا يحذف أي صور من القرص.", + "resetWebUIDesc2": "إذا لم تظهر الصور في الصالة أو إذا كان شيء آخر غير ناجح، يرجى المحاولة إعادة تعيين قبل تقديم مشكلة على جيت هب.", + "resetComplete": "تم إعادة تعيين واجهة الويب. تحديث الصفحة لإعادة التحميل." + }, + "toast": { + "tempFoldersEmptied": "تم تفريغ مجلد المؤقت", + "uploadFailed": "فشل التحميل", + "uploadFailedUnableToLoadDesc": "تعذر تحميل الملف", + "downloadImageStarted": "بدأ تنزيل الصورة", + "imageCopied": "تم نسخ الصورة", + "imageLinkCopied": "تم نسخ رابط الصورة", + "imageNotLoaded": "لم يتم تحميل أي صورة", + "imageNotLoadedDesc": "لم يتم العثور على صورة لإرسالها إلى وحدة الصورة", + "imageSavedToGallery": "تم حفظ الصورة في المعرض", + "canvasMerged": "تم دمج الخط", + "sentToImageToImage": "تم إرسال إلى صورة إلى صورة", + "sentToUnifiedCanvas": "تم إرسال إلى لوحة موحدة", + "parametersSet": "تم تعيين المعلمات", + "parametersNotSet": "لم يتم تعيين المعلمات", + "parametersNotSetDesc": "لم يتم العثور على معلمات بيانية لهذه الصورة.", + "parametersFailed": "حدث مشكلة في تحميل المعلمات", + "parametersFailedDesc": "تعذر تحميل صورة البدء.", + "seedSet": "تم تعيين البذرة", + "seedNotSet": "لم يتم تعيين البذرة", + "seedNotSetDesc": "تعذر العثور على البذرة لهذه الصورة.", + "promptSet": "تم تعيين الإشعار", + "promptNotSet": "Prompt Not Set", + "promptNotSetDesc": "تعذر العثور على الإشعار لهذه الصورة.", + "upscalingFailed": "فشل التحسين", + "faceRestoreFailed": "فشل استعادة الوجه", + "metadataLoadFailed": "فشل تحميل البيانات الوصفية", + "initialImageSet": "تم تعيين الصورة الأولية", + "initialImageNotSet": "لم يتم تعيين الصورة الأولية", + "initialImageNotSetDesc": "تعذر تحميل الصورة الأولية" + }, + "tooltip": { + "feature": { + "prompt": "هذا هو حقل التحذير. يشمل التحذير عناصر الإنتاج والمصطلحات الأسلوبية. يمكنك إضافة الأوزان (أهمية الرمز) في التحذير أيضًا، ولكن أوامر CLI والمعلمات لن تعمل.", + "gallery": "تعرض Gallery منتجات من مجلد الإخراج عندما يتم إنشاؤها. تخزن الإعدادات داخل الملفات ويتم الوصول إليها عن طريق قائمة السياق.", + "other": "ستمكن هذه الخيارات من وضع عمليات معالجة بديلة لـاستحضر الذكاء الصناعي. سيؤدي 'الزخرفة بلا جدران' إلى إنشاء أنماط تكرارية في الإخراج. 'دقة عالية' هي الإنتاج خلال خطوتين عبر صورة إلى صورة: استخدم هذا الإعداد عندما ترغب في توليد صورة أكبر وأكثر تجانبًا دون العيوب. ستستغرق الأشياء وقتًا أطول من نص إلى صورة المعتاد.", + "seed": "يؤثر قيمة البذور على الضوضاء الأولي الذي يتم تكوين الصورة منه. يمكنك استخدام البذور الخاصة بالصور السابقة. 'عتبة الضوضاء' يتم استخدامها لتخفيف العناصر الخللية في قيم CFG العالية (جرب مدى 0-10), و Perlin لإضافة ضوضاء Perlin أثناء الإنتاج: كلا منهما يعملان على إضافة التنوع إلى النتائج الخاصة بك.", + "variations": "جرب التغيير مع قيمة بين 0.1 و 1.0 لتغيير النتائج لبذور معينة. التغييرات المثيرة للاهتمام للبذور تكون بين 0.1 و 0.3.", + "upscale": "استخدم إي إس آر جان لتكبير الصورة على الفور بعد الإنتاج.", + "faceCorrection": "تصحيح الوجه باستخدام جي إف بي جان أو كود فورمر: يكتشف الخوارزمية الوجوه في الصورة وتصحح أي عيوب. قيمة عالية ستغير الصورة أكثر، مما يؤدي إلى وجوه أكثر جمالا. كود فورمر بدقة أعلى يحتفظ بالصورة الأصلية على حساب تصحيح وجه أكثر قوة.", + "imageToImage": "تحميل صورة إلى صورة أي صورة كأولية، والتي يتم استخدامها لإنشاء صورة جديدة مع التشعيب. كلما كانت القيمة أعلى، كلما تغيرت نتيجة الصورة. من الممكن أن تكون القيم بين 0.0 و 1.0، وتوصي النطاق الموصى به هو .25-.75", + "boundingBox": "مربع الحدود هو نفس الإعدادات العرض والارتفاع لنص إلى صورة أو صورة إلى صورة. فقط المنطقة في المربع سيتم معالجتها.", + "seamCorrection": "يتحكم بالتعامل مع الخطوط المرئية التي تحدث بين الصور المولدة في سطح اللوحة.", + "infillAndScaling": "إدارة أساليب التعبئة (المستخدمة على المناطق المخفية أو الممحوة في سطح اللوحة) والزيادة في الحجم (مفيدة لحجوزات الإطارات الصغيرة)." + } + }, + "unifiedCanvas": { + "layer": "طبقة", + "base": "قاعدة", + "mask": "قناع", + "maskingOptions": "خيارات القناع", + "enableMask": "مكن القناع", + "preserveMaskedArea": "الحفاظ على المنطقة المقنعة", + "clearMask": "مسح القناع", + "brush": "فرشاة", + "eraser": "ممحاة", + "fillBoundingBox": "ملئ إطار الحدود", + "eraseBoundingBox": "مسح إطار الحدود", + "colorPicker": "اختيار اللون", + "brushOptions": "خيارات الفرشاة", + "brushSize": "الحجم", + "move": "تحريك", + "resetView": "إعادة تعيين العرض", + "mergeVisible": "دمج الظاهر", + "saveToGallery": "حفظ إلى المعرض", + "copyToClipboard": "نسخ إلى الحافظة", + "downloadAsImage": "تنزيل على شكل صورة", + "undo": "تراجع", + "redo": "إعادة", + "clearCanvas": "مسح سبيكة الكاملة", + "canvasSettings": "إعدادات سبيكة الكاملة", + "showIntermediates": "إظهار الوسطاء", + "showGrid": "إظهار الشبكة", + "snapToGrid": "الالتفاف إلى الشبكة", + "darkenOutsideSelection": "تعمية خارج التحديد", + "autoSaveToGallery": "حفظ تلقائي إلى المعرض", + "saveBoxRegionOnly": "حفظ منطقة الصندوق فقط", + "limitStrokesToBox": "تحديد عدد الخطوط إلى الصندوق", + "showCanvasDebugInfo": "إظهار معلومات تصحيح سبيكة الكاملة", + "clearCanvasHistory": "مسح تاريخ سبيكة الكاملة", + "clearHistory": "مسح التاريخ", + "clearCanvasHistoryMessage": "مسح تاريخ اللوحة تترك اللوحة الحالية عائمة، ولكن تمسح بشكل غير قابل للتراجع تاريخ التراجع والإعادة.", + "clearCanvasHistoryConfirm": "هل أنت متأكد من رغبتك في مسح تاريخ اللوحة؟", + "emptyTempImageFolder": "إفراغ مجلد الصور المؤقتة", + "emptyFolder": "إفراغ المجلد", + "emptyTempImagesFolderMessage": "إفراغ مجلد الصور المؤقتة يؤدي أيضًا إلى إعادة تعيين اللوحة الموحدة بشكل كامل. وهذا يشمل كل تاريخ التراجع / الإعادة والصور في منطقة التخزين وطبقة الأساس لللوحة.", + "emptyTempImagesFolderConfirm": "هل أنت متأكد من رغبتك في إفراغ مجلد الصور المؤقتة؟", + "activeLayer": "الطبقة النشطة", + "canvasScale": "مقياس اللوحة", + "boundingBox": "صندوق الحدود", + "scaledBoundingBox": "صندوق الحدود المكبر", + "boundingBoxPosition": "موضع صندوق الحدود", + "canvasDimensions": "أبعاد اللوحة", + "canvasPosition": "موضع اللوحة", + "cursorPosition": "موضع المؤشر", + "previous": "السابق", + "next": "التالي", + "accept": "قبول", + "showHide": "إظهار/إخفاء", + "discardAll": "تجاهل الكل", + "betaClear": "مسح", + "betaDarkenOutside": "ظل الخارج", + "betaLimitToBox": "تحديد إلى الصندوق", + "betaPreserveMasked": "المحافظة على المخفية" + } +} diff --git a/invokeai/frontend/web/dist/locales/de.json b/invokeai/frontend/web/dist/locales/de.json new file mode 100644 index 0000000000..d9b64f8fc6 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/de.json @@ -0,0 +1,1012 @@ +{ + "common": { + "languagePickerLabel": "Sprachauswahl", + "reportBugLabel": "Fehler melden", + "settingsLabel": "Einstellungen", + "img2img": "Bild zu Bild", + "nodes": "Knoten Editor", + "langGerman": "Deutsch", + "nodesDesc": "Ein knotenbasiertes System, für die Erzeugung von Bildern, ist derzeit in der Entwicklung. Bleiben Sie gespannt auf Updates zu dieser fantastischen Funktion.", + "postProcessing": "Nachbearbeitung", + "postProcessDesc1": "InvokeAI bietet eine breite Palette von Nachbearbeitungsfunktionen. Bildhochskalierung und Gesichtsrekonstruktion sind bereits in der WebUI verfügbar. Sie können sie über das Menü Erweiterte Optionen der Reiter Text in Bild und Bild in Bild aufrufen. Sie können Bilder auch direkt bearbeiten, indem Sie die Schaltflächen für Bildaktionen oberhalb der aktuellen Bildanzeige oder im Viewer verwenden.", + "postProcessDesc2": "Eine spezielle Benutzeroberfläche wird in Kürze veröffentlicht, um erweiterte Nachbearbeitungs-Workflows zu erleichtern.", + "postProcessDesc3": "Die InvokeAI Kommandozeilen-Schnittstelle bietet verschiedene andere Funktionen, darunter Embiggen.", + "training": "trainieren", + "trainingDesc1": "Ein spezieller Arbeitsablauf zum Trainieren Ihrer eigenen Embeddings und Checkpoints mit Textual Inversion und Dreambooth über die Weboberfläche.", + "trainingDesc2": "InvokeAI unterstützt bereits das Training von benutzerdefinierten Embeddings mit Textual Inversion unter Verwendung des Hauptskripts.", + "upload": "Hochladen", + "close": "Schließen", + "load": "Laden", + "statusConnected": "Verbunden", + "statusDisconnected": "Getrennt", + "statusError": "Fehler", + "statusPreparing": "Vorbereiten", + "statusProcessingCanceled": "Verarbeitung abgebrochen", + "statusProcessingComplete": "Verarbeitung komplett", + "statusGenerating": "Generieren", + "statusGeneratingTextToImage": "Erzeugen von Text zu Bild", + "statusGeneratingImageToImage": "Erzeugen von Bild zu Bild", + "statusGeneratingInpainting": "Erzeuge Inpainting", + "statusGeneratingOutpainting": "Erzeuge Outpainting", + "statusGenerationComplete": "Generierung abgeschlossen", + "statusIterationComplete": "Iteration abgeschlossen", + "statusSavingImage": "Speichere Bild", + "statusRestoringFaces": "Gesichter restaurieren", + "statusRestoringFacesGFPGAN": "Gesichter restaurieren (GFPGAN)", + "statusRestoringFacesCodeFormer": "Gesichter restaurieren (CodeFormer)", + "statusUpscaling": "Hochskalierung", + "statusUpscalingESRGAN": "Hochskalierung (ESRGAN)", + "statusLoadingModel": "Laden des Modells", + "statusModelChanged": "Modell Geändert", + "cancel": "Abbrechen", + "accept": "Annehmen", + "back": "Zurück", + "langEnglish": "Englisch", + "langDutch": "Niederländisch", + "langFrench": "Französisch", + "langItalian": "Italienisch", + "langPortuguese": "Portugiesisch", + "langRussian": "Russisch", + "langUkranian": "Ukrainisch", + "hotkeysLabel": "Tastenkombinationen", + "githubLabel": "Github", + "discordLabel": "Discord", + "txt2img": "Text zu Bild", + "postprocessing": "Nachbearbeitung", + "langPolish": "Polnisch", + "langJapanese": "Japanisch", + "langArabic": "Arabisch", + "langKorean": "Koreanisch", + "langHebrew": "Hebräisch", + "langSpanish": "Spanisch", + "t2iAdapter": "T2I Adapter", + "communityLabel": "Gemeinschaft", + "dontAskMeAgain": "Frag mich nicht nochmal", + "loadingInvokeAI": "Lade Invoke AI", + "statusMergedModels": "Modelle zusammengeführt", + "areYouSure": "Bist du dir sicher?", + "statusConvertingModel": "Model konvertieren", + "on": "An", + "nodeEditor": "Knoten Editor", + "statusMergingModels": "Modelle zusammenführen", + "langSimplifiedChinese": "Vereinfachtes Chinesisch", + "ipAdapter": "IP Adapter", + "controlAdapter": "Control Adapter", + "auto": "Automatisch", + "controlNet": "ControlNet", + "imageFailedToLoad": "Kann Bild nicht laden", + "statusModelConverted": "Model konvertiert", + "modelManager": "Model Manager", + "lightMode": "Heller Modus", + "generate": "Erstellen", + "learnMore": "Mehr lernen", + "darkMode": "Dunkler Modus", + "loading": "Lade", + "random": "Zufall", + "batch": "Stapel-Manager", + "advanced": "Erweitert", + "langBrPortuguese": "Portugiesisch (Brasilien)", + "unifiedCanvas": "Einheitliche Leinwand", + "openInNewTab": "In einem neuem Tab öffnen", + "statusProcessing": "wird bearbeitet", + "linear": "Linear", + "imagePrompt": "Bild Prompt", + "checkpoint": "Checkpoint", + "inpaint": "inpaint", + "simple": "Einfach", + "template": "Vorlage", + "outputs": "Ausgabe", + "data": "Daten", + "safetensors": "Safetensors", + "outpaint": "outpaint", + "details": "Details", + "format": "Format", + "unknown": "Unbekannt", + "folder": "Ordner", + "error": "Fehler", + "installed": "Installiert", + "ai": "KI", + "file": "Datei", + "somethingWentWrong": "Etwas ist schief gelaufen", + "copyError": "$t(gallery.copy) Fehler", + "input": "Eingabe", + "notInstalled": "Nicht $t(common.installed)" + }, + "gallery": { + "generations": "Erzeugungen", + "showGenerations": "Zeige Erzeugnisse", + "uploads": "Uploads", + "showUploads": "Zeige Uploads", + "galleryImageSize": "Bildgröße", + "galleryImageResetSize": "Größe zurücksetzen", + "gallerySettings": "Galerie-Einstellungen", + "maintainAspectRatio": "Seitenverhältnis beibehalten", + "autoSwitchNewImages": "Automatisch zu neuen Bildern wechseln", + "singleColumnLayout": "Einspaltiges Layout", + "allImagesLoaded": "Alle Bilder geladen", + "loadMore": "Mehr laden", + "noImagesInGallery": "Keine Bilder in der Galerie", + "loading": "Lade", + "preparingDownload": "bereite Download vor", + "preparingDownloadFailed": "Problem beim Download vorbereiten", + "deleteImage": "Lösche Bild", + "copy": "Kopieren", + "download": "Runterladen", + "setCurrentImage": "Setze aktuelle Bild", + "featuresWillReset": "Wenn Sie dieses Bild löschen, werden diese Funktionen sofort zurückgesetzt.", + "deleteImageBin": "Gelöschte Bilder werden an den Papierkorb Ihres Betriebssystems gesendet.", + "unableToLoad": "Galerie kann nicht geladen werden", + "downloadSelection": "Auswahl herunterladen", + "currentlyInUse": "Dieses Bild wird derzeit in den folgenden Funktionen verwendet:", + "deleteImagePermanent": "Gelöschte Bilder können nicht wiederhergestellt werden.", + "autoAssignBoardOnClick": "Board per Klick automatisch zuweisen", + "noImageSelected": "Kein Bild ausgewählt" + }, + "hotkeys": { + "keyboardShortcuts": "Tastenkürzel", + "appHotkeys": "App-Tastenkombinationen", + "generalHotkeys": "Allgemeine Tastenkürzel", + "galleryHotkeys": "Galerie Tastenkürzel", + "unifiedCanvasHotkeys": "Unified Canvas Tastenkürzel", + "invoke": { + "desc": "Ein Bild erzeugen", + "title": "Invoke" + }, + "cancel": { + "title": "Abbrechen", + "desc": "Bilderzeugung abbrechen" + }, + "focusPrompt": { + "title": "Fokussiere Prompt", + "desc": "Fokussieren des Eingabefeldes für den Prompt" + }, + "toggleOptions": { + "title": "Optionen umschalten", + "desc": "Öffnen und Schließen des Optionsfeldes" + }, + "pinOptions": { + "title": "Optionen anheften", + "desc": "Anheften des Optionsfeldes" + }, + "toggleViewer": { + "title": "Bildbetrachter umschalten", + "desc": "Bildbetrachter öffnen und schließen" + }, + "toggleGallery": { + "title": "Galerie umschalten", + "desc": "Öffnen und Schließen des Galerie-Schubfachs" + }, + "maximizeWorkSpace": { + "title": "Arbeitsbereich maximieren", + "desc": "Schließen Sie die Panels und maximieren Sie den Arbeitsbereich" + }, + "changeTabs": { + "title": "Tabs wechseln", + "desc": "Zu einem anderen Arbeitsbereich wechseln" + }, + "consoleToggle": { + "title": "Konsole Umschalten", + "desc": "Konsole öffnen und schließen" + }, + "setPrompt": { + "title": "Prompt setzen", + "desc": "Verwende den Prompt des aktuellen Bildes" + }, + "setSeed": { + "title": "Seed setzen", + "desc": "Verwende den Seed des aktuellen Bildes" + }, + "setParameters": { + "title": "Parameter setzen", + "desc": "Alle Parameter des aktuellen Bildes verwenden" + }, + "restoreFaces": { + "title": "Gesicht restaurieren", + "desc": "Das aktuelle Bild restaurieren" + }, + "upscale": { + "title": "Hochskalieren", + "desc": "Das aktuelle Bild hochskalieren" + }, + "showInfo": { + "title": "Info anzeigen", + "desc": "Metadaten des aktuellen Bildes anzeigen" + }, + "sendToImageToImage": { + "title": "An Bild zu Bild senden", + "desc": "Aktuelles Bild an Bild zu Bild senden" + }, + "deleteImage": { + "title": "Bild löschen", + "desc": "Aktuelles Bild löschen" + }, + "closePanels": { + "title": "Panels schließen", + "desc": "Schließt offene Panels" + }, + "previousImage": { + "title": "Vorheriges Bild", + "desc": "Vorheriges Bild in der Galerie anzeigen" + }, + "nextImage": { + "title": "Nächstes Bild", + "desc": "Nächstes Bild in Galerie anzeigen" + }, + "toggleGalleryPin": { + "title": "Galerie anheften umschalten", + "desc": "Heftet die Galerie an die Benutzeroberfläche bzw. löst die sie" + }, + "increaseGalleryThumbSize": { + "title": "Größe der Galeriebilder erhöhen", + "desc": "Vergrößert die Galerie-Miniaturansichten" + }, + "decreaseGalleryThumbSize": { + "title": "Größe der Galeriebilder verringern", + "desc": "Verringert die Größe der Galerie-Miniaturansichten" + }, + "selectBrush": { + "title": "Pinsel auswählen", + "desc": "Wählt den Leinwandpinsel aus" + }, + "selectEraser": { + "title": "Radiergummi auswählen", + "desc": "Wählt den Radiergummi für die Leinwand aus" + }, + "decreaseBrushSize": { + "title": "Pinselgröße verkleinern", + "desc": "Verringert die Größe des Pinsels/Radiergummis" + }, + "increaseBrushSize": { + "title": "Pinselgröße erhöhen", + "desc": "Erhöht die Größe des Pinsels/Radiergummis" + }, + "decreaseBrushOpacity": { + "title": "Deckkraft des Pinsels vermindern", + "desc": "Verringert die Deckkraft des Pinsels" + }, + "increaseBrushOpacity": { + "title": "Deckkraft des Pinsels erhöhen", + "desc": "Erhöht die Deckkraft des Pinsels" + }, + "moveTool": { + "title": "Verschieben Werkzeug", + "desc": "Ermöglicht die Navigation auf der Leinwand" + }, + "fillBoundingBox": { + "title": "Begrenzungsrahmen füllen", + "desc": "Füllt den Begrenzungsrahmen mit Pinselfarbe" + }, + "eraseBoundingBox": { + "title": "Begrenzungsrahmen löschen", + "desc": "Löscht den Bereich des Begrenzungsrahmens" + }, + "colorPicker": { + "title": "Farbpipette", + "desc": "Farben aus dem Bild aufnehmen" + }, + "toggleSnap": { + "title": "Einrasten umschalten", + "desc": "Schaltet Einrasten am Raster ein und aus" + }, + "quickToggleMove": { + "title": "Schnell Verschiebemodus", + "desc": "Schaltet vorübergehend den Verschiebemodus um" + }, + "toggleLayer": { + "title": "Ebene umschalten", + "desc": "Schaltet die Auswahl von Maske/Basisebene um" + }, + "clearMask": { + "title": "Lösche Maske", + "desc": "Die gesamte Maske löschen" + }, + "hideMask": { + "title": "Maske ausblenden", + "desc": "Maske aus- und einblenden" + }, + "showHideBoundingBox": { + "title": "Begrenzungsrahmen ein-/ausblenden", + "desc": "Sichtbarkeit des Begrenzungsrahmens ein- und ausschalten" + }, + "mergeVisible": { + "title": "Sichtbares Zusammenführen", + "desc": "Alle sichtbaren Ebenen der Leinwand zusammenführen" + }, + "saveToGallery": { + "title": "In Galerie speichern", + "desc": "Aktuelle Leinwand in Galerie speichern" + }, + "copyToClipboard": { + "title": "In die Zwischenablage kopieren", + "desc": "Aktuelle Leinwand in die Zwischenablage kopieren" + }, + "downloadImage": { + "title": "Bild herunterladen", + "desc": "Aktuelle Leinwand herunterladen" + }, + "undoStroke": { + "title": "Pinselstrich rückgängig machen", + "desc": "Einen Pinselstrich rückgängig machen" + }, + "redoStroke": { + "title": "Pinselstrich wiederherstellen", + "desc": "Einen Pinselstrich wiederherstellen" + }, + "resetView": { + "title": "Ansicht zurücksetzen", + "desc": "Leinwandansicht zurücksetzen" + }, + "previousStagingImage": { + "title": "Vorheriges Staging-Bild", + "desc": "Bild des vorherigen Staging-Bereichs" + }, + "nextStagingImage": { + "title": "Nächstes Staging-Bild", + "desc": "Bild des nächsten Staging-Bereichs" + }, + "acceptStagingImage": { + "title": "Staging-Bild akzeptieren", + "desc": "Akzeptieren Sie das aktuelle Bild des Staging-Bereichs" + }, + "nodesHotkeys": "Knoten Tastenkürzel", + "addNodes": { + "title": "Knotenpunkt hinzufügen", + "desc": "Öffnet das Menü zum Hinzufügen von Knoten" + } + }, + "modelManager": { + "modelAdded": "Model hinzugefügt", + "modelUpdated": "Model aktualisiert", + "modelEntryDeleted": "Modelleintrag gelöscht", + "cannotUseSpaces": "Leerzeichen können nicht verwendet werden", + "addNew": "Neue hinzufügen", + "addNewModel": "Neues Model hinzufügen", + "addManually": "Manuell hinzufügen", + "nameValidationMsg": "Geben Sie einen Namen für Ihr Model ein", + "description": "Beschreibung", + "descriptionValidationMsg": "Fügen Sie eine Beschreibung für Ihr Model hinzu", + "config": "Konfiguration", + "configValidationMsg": "Pfad zur Konfigurationsdatei Ihres Models.", + "modelLocation": "Ort des Models", + "modelLocationValidationMsg": "Pfad zum Speicherort Ihres Models", + "vaeLocation": "VAE Ort", + "vaeLocationValidationMsg": "Pfad zum Speicherort Ihres VAE.", + "width": "Breite", + "widthValidationMsg": "Standardbreite Ihres Models.", + "height": "Höhe", + "heightValidationMsg": "Standardbhöhe Ihres Models.", + "addModel": "Model hinzufügen", + "updateModel": "Model aktualisieren", + "availableModels": "Verfügbare Models", + "search": "Suche", + "load": "Laden", + "active": "Aktiv", + "notLoaded": "nicht geladen", + "cached": "zwischengespeichert", + "checkpointFolder": "Checkpoint-Ordner", + "clearCheckpointFolder": "Checkpoint-Ordner löschen", + "findModels": "Models finden", + "scanAgain": "Erneut scannen", + "modelsFound": "Models gefunden", + "selectFolder": "Ordner auswählen", + "selected": "Ausgewählt", + "selectAll": "Alles auswählen", + "deselectAll": "Alle abwählen", + "showExisting": "Vorhandene anzeigen", + "addSelected": "Auswahl hinzufügen", + "modelExists": "Model existiert", + "selectAndAdd": "Unten aufgeführte Models auswählen und hinzufügen", + "noModelsFound": "Keine Models gefunden", + "delete": "Löschen", + "deleteModel": "Model löschen", + "deleteConfig": "Konfiguration löschen", + "deleteMsg1": "Möchten Sie diesen Model-Eintrag wirklich aus InvokeAI löschen?", + "deleteMsg2": "Dadurch WIRD das Modell von der Festplatte gelöscht WENN es im InvokeAI Root Ordner liegt. Wenn es in einem anderem Ordner liegt wird das Modell NICHT von der Festplatte gelöscht.", + "customConfig": "Benutzerdefinierte Konfiguration", + "invokeRoot": "InvokeAI Ordner", + "formMessageDiffusersVAELocationDesc": "Falls nicht angegeben, sucht InvokeAI nach der VAE-Datei innerhalb des oben angegebenen Modell Speicherortes.", + "checkpointModels": "Kontrollpunkte", + "convert": "Umwandeln", + "addCheckpointModel": "Kontrollpunkt / SafeTensors Modell hinzufügen", + "allModels": "Alle Modelle", + "alpha": "Alpha", + "addDifference": "Unterschied hinzufügen", + "convertToDiffusersHelpText2": "Bei diesem Vorgang wird Ihr Eintrag im Modell-Manager durch die Diffusor-Version desselben Modells ersetzt.", + "convertToDiffusersHelpText5": "Bitte stellen Sie sicher, dass Sie über genügend Speicherplatz verfügen. Die Modelle sind in der Regel zwischen 2 GB und 7 GB groß.", + "convertToDiffusersHelpText3": "Ihre Kontrollpunktdatei auf der Festplatte wird NICHT gelöscht oder in irgendeiner Weise verändert. Sie können Ihren Kontrollpunkt dem Modell-Manager wieder hinzufügen, wenn Sie dies wünschen.", + "convertToDiffusersHelpText4": "Dies ist ein einmaliger Vorgang. Er kann je nach den Spezifikationen Ihres Computers etwa 30-60 Sekunden dauern.", + "convertToDiffusersHelpText6": "Möchten Sie dieses Modell konvertieren?", + "custom": "Benutzerdefiniert", + "modelConverted": "Modell umgewandelt", + "inverseSigmoid": "Inverses Sigmoid", + "invokeAIFolder": "Invoke AI Ordner", + "formMessageDiffusersModelLocationDesc": "Bitte geben Sie mindestens einen an.", + "customSaveLocation": "Benutzerdefinierter Speicherort", + "formMessageDiffusersVAELocation": "VAE Speicherort", + "mergedModelCustomSaveLocation": "Benutzerdefinierter Pfad", + "modelMergeHeaderHelp2": "Nur Diffusers sind für die Zusammenführung verfügbar. Wenn Sie ein Kontrollpunktmodell zusammenführen möchten, konvertieren Sie es bitte zuerst in Diffusers.", + "manual": "Manuell", + "modelManager": "Modell Manager", + "modelMergeAlphaHelp": "Alpha steuert die Überblendungsstärke für die Modelle. Niedrigere Alphawerte führen zu einem geringeren Einfluss des zweiten Modells.", + "modelMergeHeaderHelp1": "Sie können bis zu drei verschiedene Modelle miteinander kombinieren, um eine Mischung zu erstellen, die Ihren Bedürfnissen entspricht.", + "ignoreMismatch": "Unstimmigkeiten zwischen ausgewählten Modellen ignorieren", + "model": "Modell", + "convertToDiffusersSaveLocation": "Speicherort", + "pathToCustomConfig": "Pfad zur benutzerdefinierten Konfiguration", + "v1": "v1", + "modelMergeInterpAddDifferenceHelp": "In diesem Modus wird zunächst Modell 3 von Modell 2 subtrahiert. Die resultierende Version wird mit Modell 1 mit dem oben eingestellten Alphasatz gemischt.", + "modelTwo": "Modell 2", + "modelOne": "Modell 1", + "v2_base": "v2 (512px)", + "scanForModels": "Nach Modellen suchen", + "name": "Name", + "safetensorModels": "SafeTensors", + "pickModelType": "Modell Typ auswählen", + "sameFolder": "Gleicher Ordner", + "modelThree": "Modell 3", + "v2_768": "v2 (768px)", + "none": "Nix", + "repoIDValidationMsg": "Online Repo Ihres Modells", + "vaeRepoIDValidationMsg": "Online Repo Ihrer VAE", + "importModels": "Importiere Modelle", + "merge": "Zusammenführen", + "addDiffuserModel": "Diffusers hinzufügen", + "advanced": "Erweitert", + "closeAdvanced": "Schließe Erweitert", + "convertingModelBegin": "Konvertiere Modell. Bitte warten.", + "customConfigFileLocation": "Benutzerdefinierte Konfiguration Datei Speicherort", + "baseModel": "Basis Modell", + "convertToDiffusers": "Konvertiere zu Diffusers", + "diffusersModels": "Diffusers", + "noCustomLocationProvided": "Kein benutzerdefinierter Standort angegeben", + "onnxModels": "Onnx", + "vaeRepoID": "VAE-Repo-ID", + "weightedSum": "Gewichtete Summe", + "syncModelsDesc": "Wenn Ihre Modelle nicht mit dem Backend synchronisiert sind, können Sie sie mit dieser Option aktualisieren. Dies ist im Allgemeinen praktisch, wenn Sie Ihre models.yaml-Datei manuell aktualisieren oder Modelle zum InvokeAI-Stammordner hinzufügen, nachdem die Anwendung gestartet wurde.", + "vae": "VAE", + "noModels": "Keine Modelle gefunden", + "statusConverting": "Konvertieren", + "sigmoid": "Sigmoid", + "predictionType": "Vorhersagetyp (für Stable Diffusion 2.x-Modelle und gelegentliche Stable Diffusion 1.x-Modelle)", + "selectModel": "Wählen Sie Modell aus", + "repo_id": "Repo-ID", + "modelSyncFailed": "Modellsynchronisierung fehlgeschlagen", + "quickAdd": "Schnell hinzufügen", + "simpleModelDesc": "Geben Sie einen Pfad zu einem lokalen Diffusers-Modell, einem lokalen Checkpoint-/Safetensors-Modell, einer HuggingFace-Repo-ID oder einer Checkpoint-/Diffusers-Modell-URL an.", + "modelDeleted": "Modell gelöscht", + "inpainting": "v1 Inpainting", + "modelUpdateFailed": "Modellaktualisierung fehlgeschlagen", + "useCustomConfig": "Benutzerdefinierte Konfiguration verwenden", + "settings": "Einstellungen", + "modelConversionFailed": "Modellkonvertierung fehlgeschlagen", + "syncModels": "Modelle synchronisieren", + "mergedModelSaveLocation": "Speicherort", + "modelType": "Modelltyp", + "modelsMerged": "Modelle zusammengeführt", + "modelsMergeFailed": "Modellzusammenführung fehlgeschlagen", + "convertToDiffusersHelpText1": "Dieses Modell wird in das 🧨 Diffusers-Format konvertiert.", + "modelsSynced": "Modelle synchronisiert", + "vaePrecision": "VAE-Präzision", + "mergeModels": "Modelle zusammenführen", + "interpolationType": "Interpolationstyp", + "oliveModels": "Olives", + "variant": "Variante", + "loraModels": "LoRAs", + "modelDeleteFailed": "Modell konnte nicht gelöscht werden", + "mergedModelName": "Zusammengeführter Modellname", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "formMessageDiffusersModelLocation": "Diffusers Modell Speicherort", + "noModelSelected": "Kein Modell ausgewählt" + }, + "parameters": { + "images": "Bilder", + "steps": "Schritte", + "cfgScale": "CFG-Skala", + "width": "Breite", + "height": "Höhe", + "randomizeSeed": "Zufälliger Seed", + "shuffle": "Mischen", + "noiseThreshold": "Rausch-Schwellenwert", + "perlinNoise": "Perlin-Rauschen", + "variations": "Variationen", + "variationAmount": "Höhe der Abweichung", + "seedWeights": "Seed-Gewichte", + "faceRestoration": "Gesichtsrestaurierung", + "restoreFaces": "Gesichter wiederherstellen", + "type": "Art", + "strength": "Stärke", + "upscaling": "Hochskalierung", + "upscale": "Hochskalieren (Shift + U)", + "upscaleImage": "Bild hochskalieren", + "scale": "Maßstab", + "otherOptions": "Andere Optionen", + "seamlessTiling": "Nahtlose Kacheln", + "hiresOptim": "High-Res-Optimierung", + "imageFit": "Ausgangsbild an Ausgabegröße anpassen", + "codeformerFidelity": "Glaubwürdigkeit", + "scaleBeforeProcessing": "Skalieren vor der Verarbeitung", + "scaledWidth": "Skaliert W", + "scaledHeight": "Skaliert H", + "infillMethod": "Infill-Methode", + "tileSize": "Kachelgröße", + "boundingBoxHeader": "Begrenzungsrahmen", + "seamCorrectionHeader": "Nahtkorrektur", + "infillScalingHeader": "Infill und Skalierung", + "img2imgStrength": "Bild-zu-Bild-Stärke", + "toggleLoopback": "Loopback umschalten", + "sendTo": "Senden an", + "sendToImg2Img": "Senden an Bild zu Bild", + "sendToUnifiedCanvas": "Senden an Unified Canvas", + "copyImageToLink": "Bild-Link kopieren", + "downloadImage": "Bild herunterladen", + "openInViewer": "Im Viewer öffnen", + "closeViewer": "Viewer schließen", + "usePrompt": "Prompt verwenden", + "useSeed": "Seed verwenden", + "useAll": "Alle verwenden", + "useInitImg": "Ausgangsbild verwenden", + "initialImage": "Ursprüngliches Bild", + "showOptionsPanel": "Optionsleiste zeigen", + "cancel": { + "setType": "Abbruchart festlegen", + "immediate": "Sofort abbrechen", + "schedule": "Abbrechen nach der aktuellen Iteration", + "isScheduled": "Abbrechen" + }, + "copyImage": "Bild kopieren", + "denoisingStrength": "Stärke der Entrauschung", + "symmetry": "Symmetrie", + "imageToImage": "Bild zu Bild", + "info": "Information", + "general": "Allgemein", + "hiresStrength": "High Res Stärke", + "hidePreview": "Verstecke Vorschau", + "showPreview": "Zeige Vorschau" + }, + "settings": { + "displayInProgress": "Bilder in Bearbeitung anzeigen", + "saveSteps": "Speichern der Bilder alle n Schritte", + "confirmOnDelete": "Bestätigen beim Löschen", + "displayHelpIcons": "Hilfesymbole anzeigen", + "enableImageDebugging": "Bild-Debugging aktivieren", + "resetWebUI": "Web-Oberfläche zurücksetzen", + "resetWebUIDesc1": "Das Zurücksetzen der Web-Oberfläche setzt nur den lokalen Cache des Browsers mit Ihren Bildern und gespeicherten Einstellungen zurück. Es werden keine Bilder von der Festplatte gelöscht.", + "resetWebUIDesc2": "Wenn die Bilder nicht in der Galerie angezeigt werden oder etwas anderes nicht funktioniert, versuchen Sie bitte, die Einstellungen zurückzusetzen, bevor Sie einen Fehler auf GitHub melden.", + "resetComplete": "Die Web-Oberfläche wurde zurückgesetzt.", + "models": "Modelle", + "useSlidersForAll": "Schieberegler für alle Optionen verwenden" + }, + "toast": { + "tempFoldersEmptied": "Temp-Ordner geleert", + "uploadFailed": "Hochladen fehlgeschlagen", + "uploadFailedUnableToLoadDesc": "Datei kann nicht geladen werden", + "downloadImageStarted": "Bild wird heruntergeladen", + "imageCopied": "Bild kopiert", + "imageLinkCopied": "Bildlink kopiert", + "imageNotLoaded": "Kein Bild geladen", + "imageNotLoadedDesc": "Konnte kein Bild finden", + "imageSavedToGallery": "Bild in die Galerie gespeichert", + "canvasMerged": "Leinwand zusammengeführt", + "sentToImageToImage": "Gesendet an Bild zu Bild", + "sentToUnifiedCanvas": "Gesendet an Unified Canvas", + "parametersSet": "Parameter festlegen", + "parametersNotSet": "Parameter nicht festgelegt", + "parametersNotSetDesc": "Keine Metadaten für dieses Bild gefunden.", + "parametersFailed": "Problem beim Laden der Parameter", + "parametersFailedDesc": "Ausgangsbild kann nicht geladen werden.", + "seedSet": "Seed festlegen", + "seedNotSet": "Saatgut nicht festgelegt", + "seedNotSetDesc": "Für dieses Bild wurde kein Seed gefunden.", + "promptSet": "Prompt festgelegt", + "promptNotSet": "Prompt nicht festgelegt", + "promptNotSetDesc": "Für dieses Bild wurde kein Prompt gefunden.", + "upscalingFailed": "Hochskalierung fehlgeschlagen", + "faceRestoreFailed": "Gesichtswiederherstellung fehlgeschlagen", + "metadataLoadFailed": "Metadaten konnten nicht geladen werden", + "initialImageSet": "Ausgangsbild festgelegt", + "initialImageNotSet": "Ausgangsbild nicht festgelegt", + "initialImageNotSetDesc": "Ausgangsbild konnte nicht geladen werden" + }, + "tooltip": { + "feature": { + "prompt": "Dies ist das Prompt-Feld. Ein Prompt enthält Generierungsobjekte und stilistische Begriffe. Sie können auch Gewichtungen (Token-Bedeutung) dem Prompt hinzufügen, aber CLI-Befehle und Parameter funktionieren nicht.", + "gallery": "Die Galerie zeigt erzeugte Bilder aus dem Ausgabeordner an, sobald sie erstellt wurden. Die Einstellungen werden in den Dateien gespeichert und können über das Kontextmenü aufgerufen werden.", + "other": "Mit diesen Optionen werden alternative Verarbeitungsmodi für InvokeAI aktiviert. 'Nahtlose Kachelung' erzeugt sich wiederholende Muster in der Ausgabe. 'Hohe Auflösungen' werden in zwei Schritten mit img2img erzeugt: Verwenden Sie diese Einstellung, wenn Sie ein größeres und kohärenteres Bild ohne Artefakte wünschen. Es dauert länger als das normale txt2img.", + "seed": "Der Seed-Wert beeinflusst das Ausgangsrauschen, aus dem das Bild erstellt wird. Sie können die bereits vorhandenen Seeds von früheren Bildern verwenden. 'Der Rauschschwellenwert' wird verwendet, um Artefakte bei hohen CFG-Werten abzuschwächen (versuchen Sie es im Bereich 0-10), und Perlin, um während der Erzeugung Perlin-Rauschen hinzuzufügen: Beide dienen dazu, Ihre Ergebnisse zu variieren.", + "variations": "Versuchen Sie eine Variation mit einem Wert zwischen 0,1 und 1,0, um das Ergebnis für ein bestimmtes Seed zu ändern. Interessante Variationen des Seeds liegen zwischen 0,1 und 0,3.", + "upscale": "Verwenden Sie ESRGAN, um das Bild unmittelbar nach der Erzeugung zu vergrößern.", + "faceCorrection": "Gesichtskorrektur mit GFPGAN oder Codeformer: Der Algorithmus erkennt Gesichter im Bild und korrigiert alle Fehler. Ein hoher Wert verändert das Bild stärker, was zu attraktiveren Gesichtern führt. Codeformer mit einer höheren Genauigkeit bewahrt das Originalbild auf Kosten einer stärkeren Gesichtskorrektur.", + "imageToImage": "Bild zu Bild lädt ein beliebiges Bild als Ausgangsbild, aus dem dann zusammen mit dem Prompt ein neues Bild erzeugt wird. Je höher der Wert ist, desto stärker wird das Ergebnisbild verändert. Werte von 0,0 bis 1,0 sind möglich, der empfohlene Bereich ist .25-.75", + "boundingBox": "Der Begrenzungsrahmen ist derselbe wie die Einstellungen für Breite und Höhe bei Text zu Bild oder Bild zu Bild. Es wird nur der Bereich innerhalb des Rahmens verarbeitet.", + "seamCorrection": "Steuert die Behandlung von sichtbaren Übergängen, die zwischen den erzeugten Bildern auf der Leinwand auftreten.", + "infillAndScaling": "Verwalten Sie Infill-Methoden (für maskierte oder gelöschte Bereiche der Leinwand) und Skalierung (nützlich für kleine Begrenzungsrahmengrößen)." + } + }, + "unifiedCanvas": { + "layer": "Ebene", + "base": "Basis", + "mask": "Maske", + "maskingOptions": "Maskierungsoptionen", + "enableMask": "Maske aktivieren", + "preserveMaskedArea": "Maskierten Bereich bewahren", + "clearMask": "Maske löschen", + "brush": "Pinsel", + "eraser": "Radierer", + "fillBoundingBox": "Begrenzungsrahmen füllen", + "eraseBoundingBox": "Begrenzungsrahmen löschen", + "colorPicker": "Farbpipette", + "brushOptions": "Pinseloptionen", + "brushSize": "Größe", + "move": "Bewegen", + "resetView": "Ansicht zurücksetzen", + "mergeVisible": "Sichtbare Zusammenführen", + "saveToGallery": "In Galerie speichern", + "copyToClipboard": "In Zwischenablage kopieren", + "downloadAsImage": "Als Bild herunterladen", + "undo": "Rückgängig", + "redo": "Wiederherstellen", + "clearCanvas": "Leinwand löschen", + "canvasSettings": "Leinwand-Einstellungen", + "showIntermediates": "Zwischenprodukte anzeigen", + "showGrid": "Gitternetz anzeigen", + "snapToGrid": "Am Gitternetz einrasten", + "darkenOutsideSelection": "Außerhalb der Auswahl verdunkeln", + "autoSaveToGallery": "Automatisch in Galerie speichern", + "saveBoxRegionOnly": "Nur Auswahlbox speichern", + "limitStrokesToBox": "Striche auf Box beschränken", + "showCanvasDebugInfo": "Zusätzliche Informationen zur Leinwand anzeigen", + "clearCanvasHistory": "Leinwand-Verlauf löschen", + "clearHistory": "Verlauf löschen", + "clearCanvasHistoryMessage": "Wenn Sie den Verlauf der Leinwand löschen, bleibt die aktuelle Leinwand intakt, aber der Verlauf der Rückgängig- und Wiederherstellung wird unwiderruflich gelöscht.", + "clearCanvasHistoryConfirm": "Sind Sie sicher, dass Sie den Verlauf der Leinwand löschen möchten?", + "emptyTempImageFolder": "Temp-Image Ordner leeren", + "emptyFolder": "Leerer Ordner", + "emptyTempImagesFolderMessage": "Wenn Sie den Ordner für temporäre Bilder leeren, wird auch der Unified Canvas vollständig zurückgesetzt. Dies umfasst den gesamten Verlauf der Rückgängig-/Wiederherstellungsvorgänge, die Bilder im Bereitstellungsbereich und die Leinwand-Basisebene.", + "emptyTempImagesFolderConfirm": "Sind Sie sicher, dass Sie den temporären Ordner leeren wollen?", + "activeLayer": "Aktive Ebene", + "canvasScale": "Leinwand Maßstab", + "boundingBox": "Begrenzungsrahmen", + "scaledBoundingBox": "Skalierter Begrenzungsrahmen", + "boundingBoxPosition": "Begrenzungsrahmen Position", + "canvasDimensions": "Maße der Leinwand", + "canvasPosition": "Leinwandposition", + "cursorPosition": "Position des Cursors", + "previous": "Vorherige", + "next": "Nächste", + "accept": "Akzeptieren", + "showHide": "Einblenden/Ausblenden", + "discardAll": "Alles verwerfen", + "betaClear": "Löschen", + "betaDarkenOutside": "Außen abdunkeln", + "betaLimitToBox": "Begrenzung auf das Feld", + "betaPreserveMasked": "Maskiertes bewahren", + "antialiasing": "Kantenglättung", + "showResultsOn": "Zeige Ergebnisse (An)", + "showResultsOff": "Zeige Ergebnisse (Aus)" + }, + "accessibility": { + "modelSelect": "Model Auswahl", + "uploadImage": "Bild hochladen", + "previousImage": "Voriges Bild", + "useThisParameter": "Benutze diesen Parameter", + "copyMetadataJson": "Kopiere Metadaten JSON", + "zoomIn": "Vergrößern", + "rotateClockwise": "Im Uhrzeigersinn drehen", + "flipHorizontally": "Horizontal drehen", + "flipVertically": "Vertikal drehen", + "modifyConfig": "Optionen einstellen", + "toggleAutoscroll": "Auroscroll ein/ausschalten", + "toggleLogViewer": "Log Betrachter ein/ausschalten", + "showOptionsPanel": "Zeige Optionen", + "reset": "Zurücksetzten", + "nextImage": "Nächstes Bild", + "zoomOut": "Verkleinern", + "rotateCounterClockwise": "Gegen den Uhrzeigersinn verdrehen", + "showGalleryPanel": "Galeriefenster anzeigen", + "exitViewer": "Betrachten beenden", + "menu": "Menü", + "loadMore": "Mehr laden", + "invokeProgressBar": "Invoke Fortschrittsanzeige", + "mode": "Modus", + "resetUI": "$t(accessibility.reset) von UI", + "createIssue": "Ticket erstellen" + }, + "boards": { + "autoAddBoard": "Automatisches Hinzufügen zum Ordner", + "topMessage": "Dieser Ordner enthält Bilder die in den folgenden Funktionen verwendet werden:", + "move": "Bewegen", + "menuItemAutoAdd": "Automatisches Hinzufügen zu diesem Ordner", + "myBoard": "Meine Ordner", + "searchBoard": "Ordner durchsuchen...", + "noMatching": "Keine passenden Ordner", + "selectBoard": "Ordner aussuchen", + "cancel": "Abbrechen", + "addBoard": "Ordner hinzufügen", + "uncategorized": "Nicht kategorisiert", + "downloadBoard": "Ordner runterladen", + "changeBoard": "Ordner wechseln", + "loading": "Laden...", + "clearSearch": "Suche leeren", + "bottomMessage": "Durch das Löschen dieses Ordners und seiner Bilder werden alle Funktionen zurückgesetzt, die sie derzeit verwenden.", + "deleteBoardOnly": "Nur Ordner löschen", + "deleteBoard": "Löschen Ordner", + "deleteBoardAndImages": "Löschen Ordner und Bilder", + "deletedBoardsCannotbeRestored": "Gelöschte Ordner könnte nicht wiederhergestellt werden", + "movingImagesToBoard_one": "Verschiebe {{count}} Bild zu Ordner", + "movingImagesToBoard_other": "Verschiebe {{count}} Bilder in Ordner" + }, + "controlnet": { + "showAdvanced": "Zeige Erweitert", + "contentShuffleDescription": "Mischt den Inhalt von einem Bild", + "addT2IAdapter": "$t(common.t2iAdapter) hinzufügen", + "importImageFromCanvas": "Importieren Bild von Zeichenfläche", + "lineartDescription": "Konvertiere Bild zu Lineart", + "importMaskFromCanvas": "Importiere Maske von Zeichenfläche", + "hed": "HED", + "hideAdvanced": "Verstecke Erweitert", + "contentShuffle": "Inhalt mischen", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) ist aktiv, $t(common.t2iAdapter) ist deaktiviert", + "ipAdapterModel": "Adapter Modell", + "beginEndStepPercent": "Start / Ende Step Prozent", + "duplicate": "Kopieren", + "f": "F", + "h": "H", + "depthMidasDescription": "Tiefenmap erstellen mit Midas", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ist aktiv, $t(common.controlNet) ist deaktiviert", + "weight": "Breite", + "selectModel": "Wähle ein Modell", + "depthMidas": "Tiefe (Midas)", + "w": "W", + "addControlNet": "$t(common.controlNet) hinzufügen", + "none": "Kein", + "incompatibleBaseModel": "Inkompatibles Basismodell:", + "enableControlnet": "Aktiviere ControlNet", + "detectResolution": "Auflösung erkennen", + "controlNetT2IMutexDesc": "$t(common.controlNet) und $t(common.t2iAdapter) zur gleichen Zeit wird nicht unterstützt.", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "fill": "Füllen", + "addIPAdapter": "$t(common.ipAdapter) hinzufügen", + "colorMapDescription": "Erstelle eine Farbkarte von diesem Bild", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "imageResolution": "Bild Auflösung", + "depthZoe": "Tiefe (Zoe)", + "colorMap": "Farbe", + "lowThreshold": "Niedrige Schwelle", + "highThreshold": "Hohe Schwelle", + "toggleControlNet": "Schalten ControlNet um", + "delete": "Löschen", + "controlAdapter_one": "Control Adapter", + "controlAdapter_other": "Control Adapters", + "colorMapTileSize": "Tile Größe", + "depthZoeDescription": "Tiefenmap erstellen mit Zoe", + "setControlImageDimensions": "Setze Control Bild Auflösung auf Breite/Höhe", + "handAndFace": "Hand und Gesicht", + "enableIPAdapter": "Aktiviere IP Adapter", + "resize": "Größe ändern", + "resetControlImage": "Zurücksetzen vom Referenz Bild", + "balanced": "Ausgewogen", + "prompt": "Prompt", + "resizeMode": "Größenänderungsmodus", + "processor": "Prozessor", + "saveControlImage": "Speichere Referenz Bild", + "safe": "Speichern", + "ipAdapterImageFallback": "Kein IP Adapter Bild ausgewählt", + "resetIPAdapterImage": "Zurücksetzen vom IP Adapter Bild", + "pidi": "PIDI", + "normalBae": "Normales BAE", + "mlsdDescription": "Minimalistischer Liniensegmentdetektor", + "openPoseDescription": "Schätzung der menschlichen Pose mit Openpose", + "control": "Kontrolle", + "coarse": "Coarse", + "crop": "Zuschneiden", + "pidiDescription": "PIDI-Bildverarbeitung", + "mediapipeFace": "Mediapipe Gesichter", + "mlsd": "M-LSD", + "controlMode": "Steuermodus", + "cannyDescription": "Canny Ecken Erkennung", + "lineart": "Lineart", + "lineartAnimeDescription": "Lineart-Verarbeitung im Anime-Stil", + "minConfidence": "Minimales Vertrauen", + "megaControl": "Mega-Kontrolle", + "autoConfigure": "Prozessor automatisch konfigurieren", + "normalBaeDescription": "Normale BAE-Verarbeitung", + "noneDescription": "Es wurde keine Verarbeitung angewendet", + "openPose": "Openpose", + "lineartAnime": "Lineart Anime", + "mediapipeFaceDescription": "Gesichtserkennung mit Mediapipe", + "canny": "Canny", + "hedDescription": "Ganzheitlich verschachtelte Kantenerkennung", + "scribble": "Scribble", + "maxFaces": "Maximal Anzahl Gesichter" + }, + "queue": { + "status": "Status", + "cancelTooltip": "Aktuellen Aufgabe abbrechen", + "queueEmpty": "Warteschlange leer", + "in_progress": "In Arbeit", + "queueFront": "An den Anfang der Warteschlange tun", + "completed": "Fertig", + "queueBack": "In die Warteschlange", + "clearFailed": "Probleme beim leeren der Warteschlange", + "clearSucceeded": "Warteschlange geleert", + "pause": "Pause", + "cancelSucceeded": "Auftrag abgebrochen", + "queue": "Warteschlange", + "batch": "Stapel", + "pending": "Ausstehend", + "clear": "Leeren", + "prune": "Leeren", + "total": "Gesamt", + "canceled": "Abgebrochen", + "clearTooltip": "Abbrechen und alle Aufträge leeren", + "current": "Aktuell", + "failed": "Fehler", + "cancelItem": "Abbruch Auftrag", + "next": "Nächste", + "cancel": "Abbruch", + "session": "Sitzung", + "queueTotal": "{{total}} Gesamt", + "resume": "Wieder aufnehmen", + "item": "Auftrag", + "notReady": "Warteschlange noch nicht bereit", + "batchValues": "Stapel Werte", + "queueCountPrediction": "{{predicted}} zur Warteschlange hinzufügen", + "queuedCount": "{{pending}} wartenden Elemente", + "clearQueueAlertDialog": "Die Warteschlange leeren, stoppt den aktuellen Prozess und leert die Warteschlange komplett.", + "completedIn": "Fertig in", + "cancelBatchSucceeded": "Stapel abgebrochen", + "cancelBatch": "Stapel stoppen", + "enqueueing": "Stapel in der Warteschlange", + "queueMaxExceeded": "Maximum von {{max_queue_size}} Elementen erreicht, würde {{skip}} Elemente überspringen", + "cancelBatchFailed": "Problem beim Abbruch vom Stapel", + "clearQueueAlertDialog2": "bist du sicher die Warteschlange zu leeren?", + "pruneSucceeded": "{{item_count}} abgeschlossene Elemente aus der Warteschlange entfernt", + "pauseSucceeded": "Prozessor angehalten", + "cancelFailed": "Problem beim Stornieren des Auftrags", + "pauseFailed": "Problem beim Anhalten des Prozessors", + "front": "Vorne", + "pruneTooltip": "Bereinigen Sie {{item_count}} abgeschlossene Aufträge", + "resumeFailed": "Problem beim wieder aufnehmen von Prozessor", + "pruneFailed": "Problem beim leeren der Warteschlange", + "pauseTooltip": "Pause von Prozessor", + "back": "Hinten", + "resumeSucceeded": "Prozessor wieder aufgenommen", + "resumeTooltip": "Prozessor wieder aufnehmen", + "time": "Zeit" + }, + "metadata": { + "negativePrompt": "Negativ Beschreibung", + "metadata": "Meta-Data", + "strength": "Bild zu Bild stärke", + "imageDetails": "Bild Details", + "model": "Modell", + "noImageDetails": "Keine Bild Details gefunden", + "cfgScale": "CFG-Skala", + "fit": "Bild zu Bild passen", + "height": "Höhe", + "noMetaData": "Keine Meta-Data gefunden", + "width": "Breite", + "createdBy": "Erstellt von", + "steps": "Schritte", + "seamless": "Nahtlos", + "positivePrompt": "Positiver Prompt", + "generationMode": "Generierungsmodus", + "Threshold": "Noise Schwelle", + "seed": "Samen", + "perlin": "Perlin Noise", + "hiresFix": "Optimierung für hohe Auflösungen", + "initImage": "Erstes Bild", + "variations": "Samengewichtspaare", + "vae": "VAE", + "workflow": "Arbeitsablauf", + "scheduler": "Scheduler", + "noRecallParameters": "Es wurden keine Parameter zum Abrufen gefunden", + "recallParameters": "Recall Parameters" + }, + "popovers": { + "noiseUseCPU": { + "heading": "Nutze Prozessor rauschen" + }, + "paramModel": { + "heading": "Modell" + }, + "paramIterations": { + "heading": "Iterationen" + }, + "paramCFGScale": { + "heading": "CFG-Skala" + }, + "paramSteps": { + "heading": "Schritte" + }, + "lora": { + "heading": "LoRA Gewichte" + }, + "infillMethod": { + "heading": "Füllmethode" + }, + "paramVAE": { + "heading": "VAE" + } + }, + "ui": { + "lockRatio": "Verhältnis sperren", + "hideProgressImages": "Verstecke Prozess Bild", + "showProgressImages": "Zeige Prozess Bild" + }, + "invocationCache": { + "disable": "Deaktivieren", + "misses": "Cache Nötig", + "hits": "Cache Treffer", + "enable": "Aktivieren", + "clear": "Leeren", + "maxCacheSize": "Maximale Cache Größe", + "cacheSize": "Cache Größe" + }, + "embedding": { + "noMatchingEmbedding": "Keine passenden Embeddings", + "addEmbedding": "Embedding hinzufügen", + "incompatibleModel": "Inkompatibles Basismodell:", + "noEmbeddingsLoaded": "Kein Embedding geladen" + }, + "nodes": { + "booleanPolymorphicDescription": "Eine Sammlung boolescher Werte.", + "colorFieldDescription": "Eine RGBA-Farbe.", + "conditioningCollection": "Konditionierungssammlung", + "addNode": "Knoten hinzufügen", + "conditioningCollectionDescription": "Konditionierung kann zwischen Knoten weitergegeben werden.", + "colorPolymorphic": "Farbpolymorph", + "colorCodeEdgesHelp": "Farbkodieren Sie Kanten entsprechend ihren verbundenen Feldern", + "animatedEdges": "Animierte Kanten", + "booleanCollectionDescription": "Eine Sammlung boolescher Werte.", + "colorField": "Farbe", + "collectionItem": "Objekt in Sammlung", + "animatedEdgesHelp": "Animieren Sie ausgewählte Kanten und Kanten, die mit ausgewählten Knoten verbunden sind", + "cannotDuplicateConnection": "Es können keine doppelten Verbindungen erstellt werden", + "booleanPolymorphic": "Boolesche Polymorphie", + "colorPolymorphicDescription": "Eine Sammlung von Farben.", + "clipFieldDescription": "Tokenizer- und text_encoder-Untermodelle.", + "clipField": "Clip", + "colorCollection": "Eine Sammlung von Farben.", + "boolean": "Boolesche Werte", + "currentImage": "Aktuelles Bild", + "booleanDescription": "Boolesche Werte sind wahr oder falsch.", + "collection": "Sammlung", + "cannotConnectInputToInput": "Eingang kann nicht mit Eingang verbunden werden", + "conditioningField": "Konditionierung", + "cannotConnectOutputToOutput": "Ausgang kann nicht mit Ausgang verbunden werden", + "booleanCollection": "Boolesche Werte Sammlung", + "cannotConnectToSelf": "Es kann keine Verbindung zu sich selbst hergestellt werden", + "colorCodeEdges": "Farbkodierte Kanten", + "addNodeToolTip": "Knoten hinzufügen (Umschalt+A, Leertaste)", + "boardField": "Ordner", + "boardFieldDescription": "Ein Galerie Ordner" + }, + "hrf": { + "enableHrf": "Aktivieren Sie die Korrektur für hohe Auflösungen", + "upscaleMethod": "Vergrößerungsmethoden", + "enableHrfTooltip": "Generieren Sie mit einer niedrigeren Anfangsauflösung, skalieren Sie auf die Basisauflösung hoch und führen Sie dann Image-to-Image aus.", + "metadata": { + "strength": "Hochauflösender Fix Stärke", + "enabled": "Hochauflösender Fix aktiviert", + "method": "Hochauflösender Fix Methode" + }, + "hrf": "Hochauflösender Fix", + "hrfStrength": "Hochauflösende Fix Stärke", + "strengthTooltip": "Niedrigere Werte führen zu weniger Details, wodurch potenzielle Artefakte reduziert werden können." + }, + "models": { + "noMatchingModels": "Keine passenden Modelle", + "loading": "lade", + "noMatchingLoRAs": "Keine passenden LoRAs", + "noLoRAsAvailable": "Keine LoRAs verfügbar", + "noModelsAvailable": "Keine Modelle verfügbar", + "selectModel": "Wählen ein Modell aus", + "noRefinerModelsInstalled": "Keine SDXL Refiner-Modelle installiert", + "noLoRAsInstalled": "Keine LoRAs installiert", + "selectLoRA": "Wählen ein LoRA aus", + "esrganModel": "ESRGAN Modell", + "addLora": "LoRA hinzufügen" + } +} diff --git a/invokeai/frontend/web/dist/locales/en.json b/invokeai/frontend/web/dist/locales/en.json new file mode 100644 index 0000000000..f5f3f434f5 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/en.json @@ -0,0 +1,1662 @@ +{ + "accessibility": { + "copyMetadataJson": "Copy metadata JSON", + "createIssue": "Create Issue", + "exitViewer": "Exit Viewer", + "flipHorizontally": "Flip Horizontally", + "flipVertically": "Flip Vertically", + "invokeProgressBar": "Invoke progress bar", + "menu": "Menu", + "mode": "Mode", + "modelSelect": "Model Select", + "modifyConfig": "Modify Config", + "nextImage": "Next Image", + "previousImage": "Previous Image", + "reset": "Reset", + "resetUI": "$t(accessibility.reset) UI", + "rotateClockwise": "Rotate Clockwise", + "rotateCounterClockwise": "Rotate Counter-Clockwise", + "showGalleryPanel": "Show Gallery Panel", + "showOptionsPanel": "Show Side Panel", + "toggleAutoscroll": "Toggle autoscroll", + "toggleLogViewer": "Toggle Log Viewer", + "uploadImage": "Upload Image", + "useThisParameter": "Use this parameter", + "zoomIn": "Zoom In", + "zoomOut": "Zoom Out", + "loadMore": "Load More" + }, + "boards": { + "addBoard": "Add Board", + "autoAddBoard": "Auto-Add Board", + "bottomMessage": "Deleting this board and its images will reset any features currently using them.", + "cancel": "Cancel", + "changeBoard": "Change Board", + "clearSearch": "Clear Search", + "deleteBoard": "Delete Board", + "deleteBoardAndImages": "Delete Board and Images", + "deleteBoardOnly": "Delete Board Only", + "deletedBoardsCannotbeRestored": "Deleted boards cannot be restored", + "loading": "Loading...", + "menuItemAutoAdd": "Auto-add to this Board", + "move": "Move", + "movingImagesToBoard_one": "Moving {{count}} image to board:", + "movingImagesToBoard_other": "Moving {{count}} images to board:", + "myBoard": "My Board", + "noMatching": "No matching Boards", + "searchBoard": "Search Boards...", + "selectBoard": "Select a Board", + "topMessage": "This board contains images used in the following features:", + "uncategorized": "Uncategorized", + "downloadBoard": "Download Board" + }, + "common": { + "accept": "Accept", + "advanced": "Advanced", + "ai": "ai", + "areYouSure": "Are you sure?", + "auto": "Auto", + "back": "Back", + "batch": "Batch Manager", + "cancel": "Cancel", + "copyError": "$t(gallery.copy) Error", + "close": "Close", + "on": "On", + "checkpoint": "Checkpoint", + "communityLabel": "Community", + "controlNet": "ControlNet", + "controlAdapter": "Control Adapter", + "data": "Data", + "delete": "Delete", + "details": "Details", + "direction": "Direction", + "ipAdapter": "IP Adapter", + "t2iAdapter": "T2I Adapter", + "darkMode": "Dark Mode", + "discordLabel": "Discord", + "dontAskMeAgain": "Don't ask me again", + "error": "Error", + "file": "File", + "folder": "Folder", + "format": "format", + "generate": "Generate", + "githubLabel": "Github", + "hotkeysLabel": "Hotkeys", + "imagePrompt": "Image Prompt", + "imageFailedToLoad": "Unable to Load Image", + "img2img": "Image To Image", + "inpaint": "inpaint", + "input": "Input", + "installed": "Installed", + "langArabic": "العربية", + "langBrPortuguese": "Português do Brasil", + "langDutch": "Nederlands", + "langEnglish": "English", + "langFrench": "Français", + "langGerman": "German", + "langHebrew": "Hebrew", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langKorean": "한국어", + "langPolish": "Polski", + "langPortuguese": "Português", + "langRussian": "Русский", + "langSimplifiedChinese": "简体中文", + "langSpanish": "Español", + "languagePickerLabel": "Language", + "langUkranian": "Украї́нська", + "lightMode": "Light Mode", + "linear": "Linear", + "load": "Load", + "loading": "Loading", + "loadingInvokeAI": "Loading Invoke AI", + "learnMore": "Learn More", + "modelManager": "Model Manager", + "nodeEditor": "Node Editor", + "nodes": "Workflow Editor", + "nodesDesc": "A node based system for the generation of images is under development currently. Stay tuned for updates about this amazing feature.", + "notInstalled": "Not $t(common.installed)", + "openInNewTab": "Open in New Tab", + "orderBy": "Order By", + "outpaint": "outpaint", + "outputs": "Outputs", + "postProcessDesc1": "Invoke AI offers a wide variety of post processing features. Image Upscaling and Face Restoration are already available in the WebUI. You can access them from the Advanced Options menu of the Text To Image and Image To Image tabs. You can also process images directly, using the image action buttons above the current image display or in the viewer.", + "postProcessDesc2": "A dedicated UI will be released soon to facilitate more advanced post processing workflows.", + "postProcessDesc3": "The Invoke AI Command Line Interface offers various other features including Embiggen.", + "postprocessing": "Post Processing", + "postProcessing": "Post Processing", + "random": "Random", + "reportBugLabel": "Report Bug", + "safetensors": "Safetensors", + "save": "Save", + "saveAs": "Save As", + "settingsLabel": "Settings", + "simple": "Simple", + "somethingWentWrong": "Something went wrong", + "statusConnected": "Connected", + "statusConvertingModel": "Converting Model", + "statusDisconnected": "Disconnected", + "statusError": "Error", + "statusGenerating": "Generating", + "statusGeneratingImageToImage": "Generating Image To Image", + "statusGeneratingInpainting": "Generating Inpainting", + "statusGeneratingOutpainting": "Generating Outpainting", + "statusGeneratingTextToImage": "Generating Text To Image", + "statusGenerationComplete": "Generation Complete", + "statusIterationComplete": "Iteration Complete", + "statusLoadingModel": "Loading Model", + "statusMergedModels": "Models Merged", + "statusMergingModels": "Merging Models", + "statusModelChanged": "Model Changed", + "statusModelConverted": "Model Converted", + "statusPreparing": "Preparing", + "statusProcessing": "Processing", + "statusProcessingCanceled": "Processing Canceled", + "statusProcessingComplete": "Processing Complete", + "statusRestoringFaces": "Restoring Faces", + "statusRestoringFacesCodeFormer": "Restoring Faces (CodeFormer)", + "statusRestoringFacesGFPGAN": "Restoring Faces (GFPGAN)", + "statusSavingImage": "Saving Image", + "statusUpscaling": "Upscaling", + "statusUpscalingESRGAN": "Upscaling (ESRGAN)", + "template": "Template", + "training": "Training", + "trainingDesc1": "A dedicated workflow for training your own embeddings and checkpoints using Textual Inversion and Dreambooth from the web interface.", + "trainingDesc2": "InvokeAI already supports training custom embeddourings using Textual Inversion using the main script.", + "txt2img": "Text To Image", + "unifiedCanvas": "Unified Canvas", + "unknown": "Unknown", + "upload": "Upload", + "updated": "Updated", + "created": "Created", + "prevPage": "Previous Page", + "nextPage": "Next Page", + "unknownError": "Unknown Error", + "unsaved": "Unsaved" + }, + "controlnet": { + "controlAdapter_one": "Control Adapter", + "controlAdapter_other": "Control Adapters", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "addControlNet": "Add $t(common.controlNet)", + "addIPAdapter": "Add $t(common.ipAdapter)", + "addT2IAdapter": "Add $t(common.t2iAdapter)", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) enabled, $t(common.t2iAdapter)s disabled", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) enabled, $t(common.controlNet)s disabled", + "controlNetT2IMutexDesc": "$t(common.controlNet) and $t(common.t2iAdapter) at same time is currently unsupported.", + "amult": "a_mult", + "autoConfigure": "Auto configure processor", + "balanced": "Balanced", + "beginEndStepPercent": "Begin / End Step Percentage", + "bgth": "bg_th", + "canny": "Canny", + "cannyDescription": "Canny edge detection", + "colorMap": "Color", + "colorMapDescription": "Generates a color map from the image", + "coarse": "Coarse", + "contentShuffle": "Content Shuffle", + "contentShuffleDescription": "Shuffles the content in an image", + "control": "Control", + "controlMode": "Control Mode", + "crop": "Crop", + "delete": "Delete", + "depthMidas": "Depth (Midas)", + "depthMidasDescription": "Depth map generation using Midas", + "depthZoe": "Depth (Zoe)", + "depthZoeDescription": "Depth map generation using Zoe", + "detectResolution": "Detect Resolution", + "duplicate": "Duplicate", + "enableControlnet": "Enable ControlNet", + "f": "F", + "fill": "Fill", + "h": "H", + "handAndFace": "Hand and Face", + "hed": "HED", + "hedDescription": "Holistically-Nested Edge Detection", + "hideAdvanced": "Hide Advanced", + "highThreshold": "High Threshold", + "imageResolution": "Image Resolution", + "colorMapTileSize": "Tile Size", + "importImageFromCanvas": "Import Image From Canvas", + "importMaskFromCanvas": "Import Mask From Canvas", + "incompatibleBaseModel": "Incompatible base model:", + "lineart": "Lineart", + "lineartAnime": "Lineart Anime", + "lineartAnimeDescription": "Anime-style lineart processing", + "lineartDescription": "Converts image to lineart", + "lowThreshold": "Low Threshold", + "maxFaces": "Max Faces", + "mediapipeFace": "Mediapipe Face", + "mediapipeFaceDescription": "Face detection using Mediapipe", + "megaControl": "Mega Control", + "minConfidence": "Min Confidence", + "mlsd": "M-LSD", + "mlsdDescription": "Minimalist Line Segment Detector", + "none": "None", + "noneDescription": "No processing applied", + "normalBae": "Normal BAE", + "normalBaeDescription": "Normal BAE processing", + "openPose": "Openpose", + "openPoseDescription": "Human pose estimation using Openpose", + "pidi": "PIDI", + "pidiDescription": "PIDI image processing", + "processor": "Processor", + "prompt": "Prompt", + "resetControlImage": "Reset Control Image", + "resize": "Resize", + "resizeMode": "Resize Mode", + "safe": "Safe", + "saveControlImage": "Save Control Image", + "scribble": "scribble", + "selectModel": "Select a model", + "setControlImageDimensions": "Set Control Image Dimensions To W/H", + "showAdvanced": "Show Advanced", + "toggleControlNet": "Toggle this ControlNet", + "w": "W", + "weight": "Weight", + "enableIPAdapter": "Enable IP Adapter", + "ipAdapterModel": "Adapter Model", + "resetIPAdapterImage": "Reset IP Adapter Image", + "ipAdapterImageFallback": "No IP Adapter Image Selected" + }, + "hrf": { + "hrf": "High Resolution Fix", + "enableHrf": "Enable High Resolution Fix", + "enableHrfTooltip": "Generate with a lower initial resolution, upscale to the base resolution, then run Image-to-Image.", + "upscaleMethod": "Upscale Method", + "hrfStrength": "High Resolution Fix Strength", + "strengthTooltip": "Lower values result in fewer details, which may reduce potential artifacts.", + "metadata": { + "enabled": "High Resolution Fix Enabled", + "strength": "High Resolution Fix Strength", + "method": "High Resolution Fix Method" + } + }, + "embedding": { + "addEmbedding": "Add Embedding", + "incompatibleModel": "Incompatible base model:", + "noEmbeddingsLoaded": "No Embeddings Loaded", + "noMatchingEmbedding": "No matching Embeddings" + }, + "queue": { + "queue": "Queue", + "queueFront": "Add to Front of Queue", + "queueBack": "Add to Queue", + "queueCountPrediction": "Add {{predicted}} to Queue", + "queueMaxExceeded": "Max of {{max_queue_size}} exceeded, would skip {{skip}}", + "queuedCount": "{{pending}} Pending", + "queueTotal": "{{total}} Total", + "queueEmpty": "Queue Empty", + "enqueueing": "Queueing Batch", + "resume": "Resume", + "resumeTooltip": "Resume Processor", + "resumeSucceeded": "Processor Resumed", + "resumeFailed": "Problem Resuming Processor", + "pause": "Pause", + "pauseTooltip": "Pause Processor", + "pauseSucceeded": "Processor Paused", + "pauseFailed": "Problem Pausing Processor", + "cancel": "Cancel", + "cancelTooltip": "Cancel Current Item", + "cancelSucceeded": "Item Canceled", + "cancelFailed": "Problem Canceling Item", + "prune": "Prune", + "pruneTooltip": "Prune {{item_count}} Completed Items", + "pruneSucceeded": "Pruned {{item_count}} Completed Items from Queue", + "pruneFailed": "Problem Pruning Queue", + "clear": "Clear", + "clearTooltip": "Cancel and Clear All Items", + "clearSucceeded": "Queue Cleared", + "clearFailed": "Problem Clearing Queue", + "cancelBatch": "Cancel Batch", + "cancelItem": "Cancel Item", + "cancelBatchSucceeded": "Batch Canceled", + "cancelBatchFailed": "Problem Canceling Batch", + "clearQueueAlertDialog": "Clearing the queue immediately cancels any processing items and clears the queue entirely.", + "clearQueueAlertDialog2": "Are you sure you want to clear the queue?", + "current": "Current", + "next": "Next", + "status": "Status", + "total": "Total", + "time": "Time", + "pending": "Pending", + "in_progress": "In Progress", + "completed": "Completed", + "failed": "Failed", + "canceled": "Canceled", + "completedIn": "Completed in", + "batch": "Batch", + "batchFieldValues": "Batch Field Values", + "item": "Item", + "session": "Session", + "batchValues": "Batch Values", + "notReady": "Unable to Queue", + "batchQueued": "Batch Queued", + "batchQueuedDesc_one": "Added {{count}} sessions to {{direction}} of queue", + "batchQueuedDesc_other": "Added {{count}} sessions to {{direction}} of queue", + "front": "front", + "back": "back", + "batchFailedToQueue": "Failed to Queue Batch", + "graphQueued": "Graph queued", + "graphFailedToQueue": "Failed to queue graph" + }, + "invocationCache": { + "invocationCache": "Invocation Cache", + "cacheSize": "Cache Size", + "maxCacheSize": "Max Cache Size", + "hits": "Cache Hits", + "misses": "Cache Misses", + "clear": "Clear", + "clearSucceeded": "Invocation Cache Cleared", + "clearFailed": "Problem Clearing Invocation Cache", + "enable": "Enable", + "enableSucceeded": "Invocation Cache Enabled", + "enableFailed": "Problem Enabling Invocation Cache", + "disable": "Disable", + "disableSucceeded": "Invocation Cache Disabled", + "disableFailed": "Problem Disabling Invocation Cache", + "useCache": "Use Cache" + }, + "gallery": { + "allImagesLoaded": "All Images Loaded", + "assets": "Assets", + "autoAssignBoardOnClick": "Auto-Assign Board on Click", + "autoSwitchNewImages": "Auto-Switch to New Images", + "copy": "Copy", + "currentlyInUse": "This image is currently in use in the following features:", + "drop": "Drop", + "dropOrUpload": "$t(gallery.drop) or Upload", + "dropToUpload": "$t(gallery.drop) to Upload", + "deleteImage": "Delete Image", + "deleteImageBin": "Deleted images will be sent to your operating system's Bin.", + "deleteImagePermanent": "Deleted images cannot be restored.", + "download": "Download", + "featuresWillReset": "If you delete this image, those features will immediately be reset.", + "galleryImageResetSize": "Reset Size", + "galleryImageSize": "Image Size", + "gallerySettings": "Gallery Settings", + "generations": "Generations", + "image": "image", + "loading": "Loading", + "loadMore": "Load More", + "maintainAspectRatio": "Maintain Aspect Ratio", + "noImageSelected": "No Image Selected", + "noImagesInGallery": "No Images to Display", + "setCurrentImage": "Set as Current Image", + "showGenerations": "Show Generations", + "showUploads": "Show Uploads", + "singleColumnLayout": "Single Column Layout", + "starImage": "Star Image", + "unstarImage": "Unstar Image", + "unableToLoad": "Unable to load Gallery", + "uploads": "Uploads", + "deleteSelection": "Delete Selection", + "downloadSelection": "Download Selection", + "preparingDownload": "Preparing Download", + "preparingDownloadFailed": "Problem Preparing Download", + "problemDeletingImages": "Problem Deleting Images", + "problemDeletingImagesDesc": "One or more images could not be deleted" + }, + "hotkeys": { + "acceptStagingImage": { + "desc": "Accept Current Staging Area Image", + "title": "Accept Staging Image" + }, + "addNodes": { + "desc": "Opens the add node menu", + "title": "Add Nodes" + }, + "appHotkeys": "App Hotkeys", + "cancel": { + "desc": "Cancel image generation", + "title": "Cancel" + }, + "changeTabs": { + "desc": "Switch to another workspace", + "title": "Change Tabs" + }, + "clearMask": { + "desc": "Clear the entire mask", + "title": "Clear Mask" + }, + "closePanels": { + "desc": "Closes open panels", + "title": "Close Panels" + }, + "colorPicker": { + "desc": "Selects the canvas color picker", + "title": "Select Color Picker" + }, + "consoleToggle": { + "desc": "Open and close console", + "title": "Console Toggle" + }, + "copyToClipboard": { + "desc": "Copy current canvas to clipboard", + "title": "Copy to Clipboard" + }, + "decreaseBrushOpacity": { + "desc": "Decreases the opacity of the canvas brush", + "title": "Decrease Brush Opacity" + }, + "decreaseBrushSize": { + "desc": "Decreases the size of the canvas brush/eraser", + "title": "Decrease Brush Size" + }, + "decreaseGalleryThumbSize": { + "desc": "Decreases gallery thumbnails size", + "title": "Decrease Gallery Image Size" + }, + "deleteImage": { + "desc": "Delete the current image", + "title": "Delete Image" + }, + "downloadImage": { + "desc": "Download current canvas", + "title": "Download Image" + }, + "eraseBoundingBox": { + "desc": "Erases the bounding box area", + "title": "Erase Bounding Box" + }, + "fillBoundingBox": { + "desc": "Fills the bounding box with brush color", + "title": "Fill Bounding Box" + }, + "focusPrompt": { + "desc": "Focus the prompt input area", + "title": "Focus Prompt" + }, + "galleryHotkeys": "Gallery Hotkeys", + "generalHotkeys": "General Hotkeys", + "hideMask": { + "desc": "Hide and unhide mask", + "title": "Hide Mask" + }, + "increaseBrushOpacity": { + "desc": "Increases the opacity of the canvas brush", + "title": "Increase Brush Opacity" + }, + "increaseBrushSize": { + "desc": "Increases the size of the canvas brush/eraser", + "title": "Increase Brush Size" + }, + "increaseGalleryThumbSize": { + "desc": "Increases gallery thumbnails size", + "title": "Increase Gallery Image Size" + }, + "invoke": { + "desc": "Generate an image", + "title": "Invoke" + }, + "keyboardShortcuts": "Keyboard Shortcuts", + "maximizeWorkSpace": { + "desc": "Close panels and maximize work area", + "title": "Maximize Workspace" + }, + "mergeVisible": { + "desc": "Merge all visible layers of canvas", + "title": "Merge Visible" + }, + "moveTool": { + "desc": "Allows canvas navigation", + "title": "Move Tool" + }, + "nextImage": { + "desc": "Display the next image in gallery", + "title": "Next Image" + }, + "nextStagingImage": { + "desc": "Next Staging Area Image", + "title": "Next Staging Image" + }, + "nodesHotkeys": "Nodes Hotkeys", + "pinOptions": { + "desc": "Pin the options panel", + "title": "Pin Options" + }, + "previousImage": { + "desc": "Display the previous image in gallery", + "title": "Previous Image" + }, + "previousStagingImage": { + "desc": "Previous Staging Area Image", + "title": "Previous Staging Image" + }, + "quickToggleMove": { + "desc": "Temporarily toggles Move mode", + "title": "Quick Toggle Move" + }, + "redoStroke": { + "desc": "Redo a brush stroke", + "title": "Redo Stroke" + }, + "resetView": { + "desc": "Reset Canvas View", + "title": "Reset View" + }, + "restoreFaces": { + "desc": "Restore the current image", + "title": "Restore Faces" + }, + "saveToGallery": { + "desc": "Save current canvas to gallery", + "title": "Save To Gallery" + }, + "selectBrush": { + "desc": "Selects the canvas brush", + "title": "Select Brush" + }, + "selectEraser": { + "desc": "Selects the canvas eraser", + "title": "Select Eraser" + }, + "sendToImageToImage": { + "desc": "Send current image to Image to Image", + "title": "Send To Image To Image" + }, + "setParameters": { + "desc": "Use all parameters of the current image", + "title": "Set Parameters" + }, + "setPrompt": { + "desc": "Use the prompt of the current image", + "title": "Set Prompt" + }, + "setSeed": { + "desc": "Use the seed of the current image", + "title": "Set Seed" + }, + "showHideBoundingBox": { + "desc": "Toggle visibility of bounding box", + "title": "Show/Hide Bounding Box" + }, + "showInfo": { + "desc": "Show metadata info of the current image", + "title": "Show Info" + }, + "toggleGallery": { + "desc": "Open and close the gallery drawer", + "title": "Toggle Gallery" + }, + "toggleGalleryPin": { + "desc": "Pins and unpins the gallery to the UI", + "title": "Toggle Gallery Pin" + }, + "toggleLayer": { + "desc": "Toggles mask/base layer selection", + "title": "Toggle Layer" + }, + "toggleOptions": { + "desc": "Open and close the options panel", + "title": "Toggle Options" + }, + "toggleSnap": { + "desc": "Toggles Snap to Grid", + "title": "Toggle Snap" + }, + "toggleViewer": { + "desc": "Open and close Image Viewer", + "title": "Toggle Viewer" + }, + "undoStroke": { + "desc": "Undo a brush stroke", + "title": "Undo Stroke" + }, + "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", + "upscale": { + "desc": "Upscale the current image", + "title": "Upscale" + } + }, + "metadata": { + "cfgScale": "CFG scale", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)", + "createdBy": "Created By", + "fit": "Image to image fit", + "generationMode": "Generation Mode", + "height": "Height", + "hiresFix": "High Resolution Optimization", + "imageDetails": "Image Details", + "initImage": "Initial image", + "metadata": "Metadata", + "model": "Model", + "negativePrompt": "Negative Prompt", + "noImageDetails": "No image details found", + "noMetaData": "No metadata found", + "noRecallParameters": "No parameters to recall found", + "perlin": "Perlin Noise", + "positivePrompt": "Positive Prompt", + "recallParameters": "Recall Parameters", + "scheduler": "Scheduler", + "seamless": "Seamless", + "seed": "Seed", + "steps": "Steps", + "strength": "Image to image strength", + "Threshold": "Noise Threshold", + "variations": "Seed-weight pairs", + "vae": "VAE", + "width": "Width", + "workflow": "Workflow" + }, + "modelManager": { + "active": "active", + "addCheckpointModel": "Add Checkpoint / Safetensor Model", + "addDifference": "Add Difference", + "addDiffuserModel": "Add Diffusers", + "addManually": "Add Manually", + "addModel": "Add Model", + "addNew": "Add New", + "addNewModel": "Add New Model", + "addSelected": "Add Selected", + "advanced": "Advanced", + "allModels": "All Models", + "alpha": "Alpha", + "availableModels": "Available Models", + "baseModel": "Base Model", + "cached": "cached", + "cannotUseSpaces": "Cannot Use Spaces", + "checkpointFolder": "Checkpoint Folder", + "checkpointModels": "Checkpoints", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "clearCheckpointFolder": "Clear Checkpoint Folder", + "closeAdvanced": "Close Advanced", + "config": "Config", + "configValidationMsg": "Path to the config file of your model.", + "conversionNotSupported": "Conversion Not Supported", + "convert": "Convert", + "convertingModelBegin": "Converting Model. Please wait.", + "convertToDiffusers": "Convert To Diffusers", + "convertToDiffusersHelpText1": "This model will be converted to the 🧨 Diffusers format.", + "convertToDiffusersHelpText2": "This process will replace your Model Manager entry with the Diffusers version of the same model.", + "convertToDiffusersHelpText3": "Your checkpoint file on disk WILL be deleted if it is in InvokeAI root folder. If it is in a custom location, then it WILL NOT be deleted.", + "convertToDiffusersHelpText4": "This is a one time process only. It might take around 30s-60s depending on the specifications of your computer.", + "convertToDiffusersHelpText5": "Please make sure you have enough disk space. Models generally vary between 2GB-7GB in size.", + "convertToDiffusersHelpText6": "Do you wish to convert this model?", + "convertToDiffusersSaveLocation": "Save Location", + "custom": "Custom", + "customConfig": "Custom Config", + "customConfigFileLocation": "Custom Config File Location", + "customSaveLocation": "Custom Save Location", + "delete": "Delete", + "deleteConfig": "Delete Config", + "deleteModel": "Delete Model", + "deleteMsg1": "Are you sure you want to delete this model from InvokeAI?", + "deleteMsg2": "This WILL delete the model from disk if it is in the InvokeAI root folder. If you are using a custom location, then the model WILL NOT be deleted from disk.", + "description": "Description", + "descriptionValidationMsg": "Add a description for your model", + "deselectAll": "Deselect All", + "diffusersModels": "Diffusers", + "findModels": "Find Models", + "formMessageDiffusersModelLocation": "Diffusers Model Location", + "formMessageDiffusersModelLocationDesc": "Please enter at least one.", + "formMessageDiffusersVAELocation": "VAE Location", + "formMessageDiffusersVAELocationDesc": "If not provided, InvokeAI will look for the VAE file inside the model location given above.", + "height": "Height", + "heightValidationMsg": "Default height of your model.", + "ignoreMismatch": "Ignore Mismatches Between Selected Models", + "importModels": "Import Models", + "inpainting": "v1 Inpainting", + "interpolationType": "Interpolation Type", + "inverseSigmoid": "Inverse Sigmoid", + "invokeAIFolder": "Invoke AI Folder", + "invokeRoot": "InvokeAI folder", + "load": "Load", + "loraModels": "LoRAs", + "manual": "Manual", + "merge": "Merge", + "mergedModelCustomSaveLocation": "Custom Path", + "mergedModelName": "Merged Model Name", + "mergedModelSaveLocation": "Save Location", + "mergeModels": "Merge Models", + "model": "Model", + "modelAdded": "Model Added", + "modelConversionFailed": "Model Conversion Failed", + "modelConverted": "Model Converted", + "modelDeleted": "Model Deleted", + "modelDeleteFailed": "Failed to delete model", + "modelEntryDeleted": "Model Entry Deleted", + "modelExists": "Model Exists", + "modelLocation": "Model Location", + "modelLocationValidationMsg": "Provide the path to a local folder where your Diffusers Model is stored", + "modelManager": "Model Manager", + "modelMergeAlphaHelp": "Alpha controls blend strength for the models. Lower alpha values lead to lower influence of the second model.", + "modelMergeHeaderHelp1": "You can merge up to three different models to create a blend that suits your needs.", + "modelMergeHeaderHelp2": "Only Diffusers are available for merging. If you want to merge a checkpoint model, please convert it to Diffusers first.", + "modelMergeInterpAddDifferenceHelp": "In this mode, Model 3 is first subtracted from Model 2. The resulting version is blended with Model 1 with the alpha rate set above.", + "modelOne": "Model 1", + "modelsFound": "Models Found", + "modelsMerged": "Models Merged", + "modelsMergeFailed": "Model Merge Failed", + "modelsSynced": "Models Synced", + "modelSyncFailed": "Model Sync Failed", + "modelThree": "Model 3", + "modelTwo": "Model 2", + "modelType": "Model Type", + "modelUpdated": "Model Updated", + "modelUpdateFailed": "Model Update Failed", + "name": "Name", + "nameValidationMsg": "Enter a name for your model", + "noCustomLocationProvided": "No Custom Location Provided", + "noModels": "No Models Found", + "noModelSelected": "No Model Selected", + "noModelsFound": "No Models Found", + "none": "none", + "notLoaded": "not loaded", + "oliveModels": "Olives", + "onnxModels": "Onnx", + "pathToCustomConfig": "Path To Custom Config", + "pickModelType": "Pick Model Type", + "predictionType": "Prediction Type (for Stable Diffusion 2.x Models and occasional Stable Diffusion 1.x Models)", + "quickAdd": "Quick Add", + "repo_id": "Repo ID", + "repoIDValidationMsg": "Online repository of your model", + "safetensorModels": "SafeTensors", + "sameFolder": "Same folder", + "scanAgain": "Scan Again", + "scanForModels": "Scan For Models", + "search": "Search", + "selectAll": "Select All", + "selectAndAdd": "Select and Add Models Listed Below", + "selected": "Selected", + "selectFolder": "Select Folder", + "selectModel": "Select Model", + "settings": "Settings", + "showExisting": "Show Existing", + "sigmoid": "Sigmoid", + "simpleModelDesc": "Provide a path to a local Diffusers model, local checkpoint / safetensors model a HuggingFace Repo ID, or a checkpoint/diffusers model URL.", + "statusConverting": "Converting", + "syncModels": "Sync Models", + "syncModelsDesc": "If your models are out of sync with the backend, you can refresh them up using this option. This is generally handy in cases where you manually update your models.yaml file or add models to the InvokeAI root folder after the application has booted.", + "updateModel": "Update Model", + "useCustomConfig": "Use Custom Config", + "v1": "v1", + "v2_768": "v2 (768px)", + "v2_base": "v2 (512px)", + "vae": "VAE", + "vaeLocation": "VAE Location", + "vaeLocationValidationMsg": "Path to where your VAE is located.", + "vaePrecision": "VAE Precision", + "vaeRepoID": "VAE Repo ID", + "vaeRepoIDValidationMsg": "Online repository of your VAE", + "variant": "Variant", + "weightedSum": "Weighted Sum", + "width": "Width", + "widthValidationMsg": "Default width of your model." + }, + "models": { + "addLora": "Add LoRA", + "esrganModel": "ESRGAN Model", + "loading": "loading", + "noLoRAsAvailable": "No LoRAs available", + "noLoRAsLoaded": "No LoRAs Loaded", + "noMatchingLoRAs": "No matching LoRAs", + "noMatchingModels": "No matching Models", + "noModelsAvailable": "No models available", + "selectLoRA": "Select a LoRA", + "selectModel": "Select a Model", + "noLoRAsInstalled": "No LoRAs installed", + "noRefinerModelsInstalled": "No SDXL Refiner models installed" + }, + "nodes": { + "addNode": "Add Node", + "addNodeToolTip": "Add Node (Shift+A, Space)", + "addLinearView": "Add to Linear View", + "animatedEdges": "Animated Edges", + "animatedEdgesHelp": "Animate selected edges and edges connected to selected nodes", + "boardField": "Board", + "boardFieldDescription": "A gallery board", + "boolean": "Booleans", + "booleanCollection": "Boolean Collection", + "booleanCollectionDescription": "A collection of booleans.", + "booleanDescription": "Booleans are true or false.", + "booleanPolymorphic": "Boolean Polymorphic", + "booleanPolymorphicDescription": "A collection of booleans.", + "cannotConnectInputToInput": "Cannot connect input to input", + "cannotConnectOutputToOutput": "Cannot connect output to output", + "cannotConnectToSelf": "Cannot connect to self", + "cannotDuplicateConnection": "Cannot create duplicate connections", + "nodePack": "Node pack", + "clipField": "Clip", + "clipFieldDescription": "Tokenizer and text_encoder submodels.", + "collection": "Collection", + "collectionFieldType": "{{name}} Collection", + "collectionOrScalarFieldType": "{{name}} Collection|Scalar", + "collectionDescription": "TODO", + "collectionItem": "Collection Item", + "collectionItemDescription": "TODO", + "colorCodeEdges": "Color-Code Edges", + "colorCodeEdgesHelp": "Color-code edges according to their connected fields", + "colorCollection": "A collection of colors.", + "colorCollectionDescription": "TODO", + "colorField": "Color", + "colorFieldDescription": "A RGBA color.", + "colorPolymorphic": "Color Polymorphic", + "colorPolymorphicDescription": "A collection of colors.", + "conditioningCollection": "Conditioning Collection", + "conditioningCollectionDescription": "Conditioning may be passed between nodes.", + "conditioningField": "Conditioning", + "conditioningFieldDescription": "Conditioning may be passed between nodes.", + "conditioningPolymorphic": "Conditioning Polymorphic", + "conditioningPolymorphicDescription": "Conditioning may be passed between nodes.", + "connectionWouldCreateCycle": "Connection would create a cycle", + "controlCollection": "Control Collection", + "controlCollectionDescription": "Control info passed between nodes.", + "controlField": "Control", + "controlFieldDescription": "Control info passed between nodes.", + "currentImage": "Current Image", + "currentImageDescription": "Displays the current image in the Node Editor", + "denoiseMaskField": "Denoise Mask", + "denoiseMaskFieldDescription": "Denoise Mask may be passed between nodes", + "doesNotExist": "does not exist", + "downloadWorkflow": "Download Workflow JSON", + "edge": "Edge", + "enum": "Enum", + "enumDescription": "Enums are values that may be one of a number of options.", + "executionStateCompleted": "Completed", + "executionStateError": "Error", + "executionStateInProgress": "In Progress", + "fieldTypesMustMatch": "Field types must match", + "fitViewportNodes": "Fit View", + "float": "Float", + "floatCollection": "Float Collection", + "floatCollectionDescription": "A collection of floats.", + "floatDescription": "Floats are numbers with a decimal point.", + "floatPolymorphic": "Float Polymorphic", + "floatPolymorphicDescription": "A collection of floats.", + "fullyContainNodes": "Fully Contain Nodes to Select", + "fullyContainNodesHelp": "Nodes must be fully inside the selection box to be selected", + "hideGraphNodes": "Hide Graph Overlay", + "hideLegendNodes": "Hide Field Type Legend", + "hideMinimapnodes": "Hide MiniMap", + "imageCollection": "Image Collection", + "imageCollectionDescription": "A collection of images.", + "imageField": "Image", + "imageFieldDescription": "Images may be passed between nodes.", + "imagePolymorphic": "Image Polymorphic", + "imagePolymorphicDescription": "A collection of images.", + "inputField": "Input Field", + "inputFields": "Input Fields", + "inputMayOnlyHaveOneConnection": "Input may only have one connection", + "inputNode": "Input Node", + "integer": "Integer", + "integerCollection": "Integer Collection", + "integerCollectionDescription": "A collection of integers.", + "integerDescription": "Integers are whole numbers, without a decimal point.", + "integerPolymorphic": "Integer Polymorphic", + "integerPolymorphicDescription": "A collection of integers.", + "invalidOutputSchema": "Invalid output schema", + "ipAdapter": "IP-Adapter", + "ipAdapterCollection": "IP-Adapters Collection", + "ipAdapterCollectionDescription": "A collection of IP-Adapters.", + "ipAdapterDescription": "An Image Prompt Adapter (IP-Adapter).", + "ipAdapterModel": "IP-Adapter Model", + "ipAdapterModelDescription": "IP-Adapter Model Field", + "ipAdapterPolymorphic": "IP-Adapter Polymorphic", + "ipAdapterPolymorphicDescription": "A collection of IP-Adapters.", + "latentsCollection": "Latents Collection", + "latentsCollectionDescription": "Latents may be passed between nodes.", + "latentsField": "Latents", + "latentsFieldDescription": "Latents may be passed between nodes.", + "latentsPolymorphic": "Latents Polymorphic", + "latentsPolymorphicDescription": "Latents may be passed between nodes.", + "loadingNodes": "Loading Nodes...", + "loadWorkflow": "Load Workflow", + "noWorkflow": "No Workflow", + "loRAModelField": "LoRA", + "loRAModelFieldDescription": "TODO", + "mainModelField": "Model", + "mainModelFieldDescription": "TODO", + "maybeIncompatible": "May be Incompatible With Installed", + "mismatchedVersion": "Invalid node: node {{node}} of type {{type}} has mismatched version (try updating?)", + "missingCanvaInitImage": "Missing canvas init image", + "missingCanvaInitMaskImages": "Missing canvas init and mask images", + "missingTemplate": "Invalid node: node {{node}} of type {{type}} missing template (not installed?)", + "sourceNodeDoesNotExist": "Invalid edge: source/output node {{node}} does not exist", + "targetNodeDoesNotExist": "Invalid edge: target/input node {{node}} does not exist", + "sourceNodeFieldDoesNotExist": "Invalid edge: source/output field {{node}}.{{field}} does not exist", + "targetNodeFieldDoesNotExist": "Invalid edge: target/input field {{node}}.{{field}} does not exist", + "deletedInvalidEdge": "Deleted invalid edge {{source}} -> {{target}}", + "noConnectionData": "No connection data", + "noConnectionInProgress": "No connection in progress", + "node": "Node", + "nodeOutputs": "Node Outputs", + "nodeSearch": "Search for nodes", + "nodeTemplate": "Node Template", + "nodeType": "Node Type", + "noFieldsLinearview": "No fields added to Linear View", + "noFieldType": "No field type", + "noImageFoundState": "No initial image found in state", + "noMatchingNodes": "No matching nodes", + "noNodeSelected": "No node selected", + "nodeOpacity": "Node Opacity", + "nodeVersion": "Node Version", + "noOutputRecorded": "No outputs recorded", + "noOutputSchemaName": "No output schema name found in ref object", + "notes": "Notes", + "notesDescription": "Add notes about your workflow", + "oNNXModelField": "ONNX Model", + "oNNXModelFieldDescription": "ONNX model field.", + "outputField": "Output Field", + "outputFieldInInput": "Output field in input", + "outputFields": "Output Fields", + "outputNode": "Output node", + "outputSchemaNotFound": "Output schema not found", + "pickOne": "Pick One", + "problemReadingMetadata": "Problem reading metadata from image", + "problemReadingWorkflow": "Problem reading workflow from image", + "problemSettingTitle": "Problem Setting Title", + "reloadNodeTemplates": "Reload Node Templates", + "removeLinearView": "Remove from Linear View", + "newWorkflow": "New Workflow", + "newWorkflowDesc": "Create a new workflow?", + "newWorkflowDesc2": "Your current workflow has unsaved changes.", + "scheduler": "Scheduler", + "schedulerDescription": "TODO", + "sDXLMainModelField": "SDXL Model", + "sDXLMainModelFieldDescription": "SDXL model field.", + "sDXLRefinerModelField": "Refiner Model", + "sDXLRefinerModelFieldDescription": "TODO", + "showGraphNodes": "Show Graph Overlay", + "showLegendNodes": "Show Field Type Legend", + "showMinimapnodes": "Show MiniMap", + "skipped": "Skipped", + "skippedReservedInput": "Skipped reserved input field", + "skippedReservedOutput": "Skipped reserved output field", + "skippingInputNoTemplate": "Skipping input field with no template", + "skippingReservedFieldType": "Skipping reserved field type", + "skippingUnknownInputType": "Skipping unknown input field type", + "skippingUnknownOutputType": "Skipping unknown output field type", + "snapToGrid": "Snap to Grid", + "snapToGridHelp": "Snap nodes to grid when moved", + "sourceNode": "Source node", + "string": "String", + "stringCollection": "String Collection", + "stringCollectionDescription": "A collection of strings.", + "stringDescription": "Strings are text.", + "stringPolymorphic": "String Polymorphic", + "stringPolymorphicDescription": "A collection of strings.", + "unableToLoadWorkflow": "Unable to Load Workflow", + "unableToParseEdge": "Unable to parse edge", + "unableToParseNode": "Unable to parse node", + "unableToUpdateNode": "Unable to update node", + "unableToValidateWorkflow": "Unable to Validate Workflow", + "unableToMigrateWorkflow": "Unable to Migrate Workflow", + "unknownErrorValidatingWorkflow": "Unknown error validating workflow", + "inputFieldTypeParseError": "Unable to parse type of input field {{node}}.{{field}} ({{message}})", + "outputFieldTypeParseError": "Unable to parse type of output field {{node}}.{{field}} ({{message}})", + "unableToExtractSchemaNameFromRef": "unable to extract schema name from ref", + "unsupportedArrayItemType": "unsupported array item type \"{{type}}\"", + "unsupportedAnyOfLength": "too many union members ({{count}})", + "unsupportedMismatchedUnion": "mismatched CollectionOrScalar type with base types {{firstType}} and {{secondType}}", + "unableToParseFieldType": "unable to parse field type", + "unableToExtractEnumOptions": "unable to extract enum options", + "uNetField": "UNet", + "uNetFieldDescription": "UNet submodel.", + "unhandledInputProperty": "Unhandled input property", + "unhandledOutputProperty": "Unhandled output property", + "unknownField": "Unknown field", + "unknownFieldType": "$t(nodes.unknownField) type: {{type}}", + "unknownNode": "Unknown Node", + "unknownNodeType": "Unknown node type", + "unknownTemplate": "Unknown Template", + "unknownInput": "Unknown input: {{name}}", + "unkownInvocation": "Unknown Invocation type", + "unknownOutput": "Unknown output: {{name}}", + "updateNode": "Update Node", + "updateApp": "Update App", + "updateAllNodes": "Update Nodes", + "allNodesUpdated": "All Nodes Updated", + "unableToUpdateNodes_one": "Unable to update {{count}} node", + "unableToUpdateNodes_other": "Unable to update {{count}} nodes", + "vaeField": "Vae", + "vaeFieldDescription": "Vae submodel.", + "vaeModelField": "VAE", + "vaeModelFieldDescription": "TODO", + "validateConnections": "Validate Connections and Graph", + "validateConnectionsHelp": "Prevent invalid connections from being made, and invalid graphs from being invoked", + "unableToGetWorkflowVersion": "Unable to get workflow schema version", + "unrecognizedWorkflowVersion": "Unrecognized workflow schema version {{version}}", + "version": "Version", + "versionUnknown": " Version Unknown", + "workflow": "Workflow", + "workflowAuthor": "Author", + "workflowContact": "Contact", + "workflowDescription": "Short Description", + "workflowName": "Name", + "workflowNotes": "Notes", + "workflowSettings": "Workflow Editor Settings", + "workflowTags": "Tags", + "workflowValidation": "Workflow Validation Error", + "workflowVersion": "Version", + "zoomInNodes": "Zoom In", + "zoomOutNodes": "Zoom Out", + "betaDesc": "This invocation is in beta. Until it is stable, it may have breaking changes during app updates. We plan to support this invocation long-term.", + "prototypeDesc": "This invocation is a prototype. It may have breaking changes during app updates and may be removed at any time." + }, + "parameters": { + "aspectRatio": "Aspect Ratio", + "aspectRatioFree": "Free", + "boundingBoxHeader": "Bounding Box", + "boundingBoxHeight": "Bounding Box Height", + "boundingBoxWidth": "Bounding Box Width", + "cancel": { + "cancel": "Cancel", + "immediate": "Cancel immediately", + "isScheduled": "Canceling", + "schedule": "Cancel after current iteration", + "setType": "Set cancel type" + }, + "cfgScale": "CFG Scale", + "cfgRescaleMultiplier": "CFG Rescale Multiplier", + "cfgRescale": "CFG Rescale", + "clipSkip": "CLIP Skip", + "clipSkipWithLayerCount": "CLIP Skip {{layerCount}}", + "closeViewer": "Close Viewer", + "codeformerFidelity": "Fidelity", + "coherenceMode": "Mode", + "coherencePassHeader": "Coherence Pass", + "coherenceSteps": "Steps", + "coherenceStrength": "Strength", + "compositingSettingsHeader": "Compositing Settings", + "controlNetControlMode": "Control Mode", + "copyImage": "Copy Image", + "copyImageToLink": "Copy Image To Link", + "denoisingStrength": "Denoising Strength", + "downloadImage": "Download Image", + "enableNoiseSettings": "Enable Noise Settings", + "faceRestoration": "Face Restoration", + "general": "General", + "height": "Height", + "hidePreview": "Hide Preview", + "hiresOptim": "High Res Optimization", + "hiresStrength": "High Res Strength", + "hSymmetryStep": "H Symmetry Step", + "imageFit": "Fit Initial Image To Output Size", + "images": "Images", + "imageToImage": "Image to Image", + "img2imgStrength": "Image To Image Strength", + "infillMethod": "Infill Method", + "infillScalingHeader": "Infill and Scaling", + "info": "Info", + "initialImage": "Initial Image", + "invoke": { + "addingImagesTo": "Adding images to", + "invoke": "Invoke", + "missingFieldTemplate": "Missing field template", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} missing input", + "missingNodeTemplate": "Missing node template", + "noControlImageForControlAdapter": "Control Adapter #{{number}} has no control image", + "noInitialImageSelected": "No initial image selected", + "noModelForControlAdapter": "Control Adapter #{{number}} has no model selected.", + "incompatibleBaseModelForControlAdapter": "Control Adapter #{{number}} model is invalid with main model.", + "noModelSelected": "No model selected", + "noPrompts": "No prompts generated", + "noNodesInGraph": "No nodes in graph", + "readyToInvoke": "Ready to Invoke", + "systemBusy": "System busy", + "systemDisconnected": "System disconnected", + "unableToInvoke": "Unable to Invoke" + }, + "maskAdjustmentsHeader": "Mask Adjustments", + "maskBlur": "Blur", + "maskBlurMethod": "Blur Method", + "maskEdge": "Mask Edge", + "negativePromptPlaceholder": "Negative Prompt", + "noiseSettings": "Noise", + "noiseThreshold": "Noise Threshold", + "openInViewer": "Open In Viewer", + "otherOptions": "Other Options", + "patchmatchDownScaleSize": "Downscale", + "perlinNoise": "Perlin Noise", + "positivePromptPlaceholder": "Positive Prompt", + "randomizeSeed": "Randomize Seed", + "manualSeed": "Manual Seed", + "randomSeed": "Random Seed", + "restoreFaces": "Restore Faces", + "iterations": "Iterations", + "iterationsWithCount_one": "{{count}} Iteration", + "iterationsWithCount_other": "{{count}} Iterations", + "scale": "Scale", + "scaleBeforeProcessing": "Scale Before Processing", + "scaledHeight": "Scaled H", + "scaledWidth": "Scaled W", + "scheduler": "Scheduler", + "seamCorrectionHeader": "Seam Correction", + "seamHighThreshold": "High", + "seamlessTiling": "Seamless Tiling", + "seamlessXAxis": "X Axis", + "seamlessYAxis": "Y Axis", + "seamlessX": "Seamless X", + "seamlessY": "Seamless Y", + "seamlessX&Y": "Seamless X & Y", + "seamLowThreshold": "Low", + "seed": "Seed", + "seedWeights": "Seed Weights", + "imageActions": "Image Actions", + "sendTo": "Send to", + "sendToImg2Img": "Send to Image to Image", + "sendToUnifiedCanvas": "Send To Unified Canvas", + "showOptionsPanel": "Show Side Panel (O or T)", + "showPreview": "Show Preview", + "shuffle": "Shuffle Seed", + "steps": "Steps", + "strength": "Strength", + "symmetry": "Symmetry", + "tileSize": "Tile Size", + "toggleLoopback": "Toggle Loopback", + "type": "Type", + "upscale": "Upscale (Shift + U)", + "upscaleImage": "Upscale Image", + "upscaling": "Upscaling", + "unmasked": "Unmasked", + "useAll": "Use All", + "useSize": "Use Size", + "useCpuNoise": "Use CPU Noise", + "cpuNoise": "CPU Noise", + "gpuNoise": "GPU Noise", + "useInitImg": "Use Initial Image", + "usePrompt": "Use Prompt", + "useSeed": "Use Seed", + "variationAmount": "Variation Amount", + "variations": "Variations", + "vSymmetryStep": "V Symmetry Step", + "width": "Width", + "isAllowedToUpscale": { + "useX2Model": "Image is too large to upscale with x4 model, use x2 model", + "tooLarge": "Image is too large to upscale, select smaller image" + } + }, + "dynamicPrompts": { + "combinatorial": "Combinatorial Generation", + "dynamicPrompts": "Dynamic Prompts", + "enableDynamicPrompts": "Enable Dynamic Prompts", + "maxPrompts": "Max Prompts", + "promptsPreview": "Prompts Preview", + "promptsWithCount_one": "{{count}} Prompt", + "promptsWithCount_other": "{{count}} Prompts", + "seedBehaviour": { + "label": "Seed Behaviour", + "perIterationLabel": "Seed per Iteration", + "perIterationDesc": "Use a different seed for each iteration", + "perPromptLabel": "Seed per Image", + "perPromptDesc": "Use a different seed for each image" + } + }, + "sdxl": { + "cfgScale": "CFG Scale", + "concatPromptStyle": "Concatenate Prompt & Style", + "denoisingStrength": "Denoising Strength", + "loading": "Loading...", + "negAestheticScore": "Negative Aesthetic Score", + "negStylePrompt": "Negative Style Prompt", + "noModelsAvailable": "No models available", + "posAestheticScore": "Positive Aesthetic Score", + "posStylePrompt": "Positive Style Prompt", + "refiner": "Refiner", + "refinermodel": "Refiner Model", + "refinerStart": "Refiner Start", + "scheduler": "Scheduler", + "selectAModel": "Select a model", + "steps": "Steps", + "useRefiner": "Use Refiner" + }, + "settings": { + "alternateCanvasLayout": "Alternate Canvas Layout", + "antialiasProgressImages": "Antialias Progress Images", + "autoChangeDimensions": "Update W/H To Model Defaults On Change", + "beta": "Beta", + "confirmOnDelete": "Confirm On Delete", + "consoleLogLevel": "Log Level", + "developer": "Developer", + "displayHelpIcons": "Display Help Icons", + "displayInProgress": "Display Progress Images", + "enableImageDebugging": "Enable Image Debugging", + "enableInformationalPopovers": "Enable Informational Popovers", + "enableInvisibleWatermark": "Enable Invisible Watermark", + "enableNodesEditor": "Enable Nodes Editor", + "enableNSFWChecker": "Enable NSFW Checker", + "experimental": "Experimental", + "favoriteSchedulers": "Favorite Schedulers", + "favoriteSchedulersPlaceholder": "No schedulers favorited", + "general": "General", + "generation": "Generation", + "models": "Models", + "resetComplete": "Web UI has been reset.", + "resetWebUI": "Reset Web UI", + "resetWebUIDesc1": "Resetting the web UI only resets the browser's local cache of your images and remembered settings. It does not delete any images from disk.", + "resetWebUIDesc2": "If images aren't showing up in the gallery or something else isn't working, please try resetting before submitting an issue on GitHub.", + "saveSteps": "Save images every n steps", + "shouldLogToConsole": "Console Logging", + "showAdvancedOptions": "Show Advanced Options", + "showProgressInViewer": "Show Progress Images in Viewer", + "ui": "User Interface", + "useSlidersForAll": "Use Sliders For All Options", + "clearIntermediatesDisabled": "Queue must be empty to clear intermediates", + "clearIntermediatesDesc1": "Clearing intermediates will reset your Canvas and ControlNet state.", + "clearIntermediatesDesc2": "Intermediate images are byproducts of generation, different from the result images in the gallery. Clearing intermediates will free disk space.", + "clearIntermediatesDesc3": "Your gallery images will not be deleted.", + "clearIntermediates": "Clear Intermediates", + "clearIntermediatesWithCount_one": "Clear {{count}} Intermediate", + "clearIntermediatesWithCount_other": "Clear {{count}} Intermediates", + "intermediatesCleared_one": "Cleared {{count}} Intermediate", + "intermediatesCleared_other": "Cleared {{count}} Intermediates", + "intermediatesClearedFailed": "Problem Clearing Intermediates", + "reloadingIn": "Reloading in" + }, + "toast": { + "addedToBoard": "Added to board", + "baseModelChangedCleared_one": "Base model changed, cleared or disabled {{count}} incompatible submodel", + "baseModelChangedCleared_other": "Base model changed, cleared or disabled {{count}} incompatible submodels", + "canceled": "Processing Canceled", + "canvasCopiedClipboard": "Canvas Copied to Clipboard", + "canvasDownloaded": "Canvas Downloaded", + "canvasMerged": "Canvas Merged", + "canvasSavedGallery": "Canvas Saved to Gallery", + "canvasSentControlnetAssets": "Canvas Sent to ControlNet & Assets", + "connected": "Connected to Server", + "disconnected": "Disconnected from Server", + "downloadImageStarted": "Image Download Started", + "faceRestoreFailed": "Face Restoration Failed", + "imageCopied": "Image Copied", + "imageLinkCopied": "Image Link Copied", + "imageNotLoaded": "No Image Loaded", + "imageNotLoadedDesc": "Could not find image", + "imageSaved": "Image Saved", + "imageSavedToGallery": "Image Saved to Gallery", + "imageSavingFailed": "Image Saving Failed", + "imageUploaded": "Image Uploaded", + "imageUploadFailed": "Image Upload Failed", + "initialImageNotSet": "Initial Image Not Set", + "initialImageNotSetDesc": "Could not load initial image", + "initialImageSet": "Initial Image Set", + "invalidUpload": "Invalid Upload", + "loadedWithWarnings": "Workflow Loaded with Warnings", + "maskSavedAssets": "Mask Saved to Assets", + "maskSentControlnetAssets": "Mask Sent to ControlNet & Assets", + "metadataLoadFailed": "Failed to load metadata", + "modelAdded": "Model Added: {{modelName}}", + "modelAddedSimple": "Model Added", + "modelAddFailed": "Model Add Failed", + "nodesBrokenConnections": "Cannot load. Some connections are broken.", + "nodesCorruptedGraph": "Cannot load. Graph seems to be corrupted.", + "nodesLoaded": "Nodes Loaded", + "nodesLoadedFailed": "Failed To Load Nodes", + "nodesNotValidGraph": "Not a valid InvokeAI Node Graph", + "nodesNotValidJSON": "Not a valid JSON", + "nodesSaved": "Nodes Saved", + "nodesUnrecognizedTypes": "Cannot load. Graph has unrecognized types", + "parameterNotSet": "Parameter not set", + "parameterSet": "Parameter set", + "parametersFailed": "Problem loading parameters", + "parametersFailedDesc": "Unable to load init image.", + "parametersNotSet": "Parameters Not Set", + "parametersNotSetDesc": "No metadata found for this image.", + "parametersSet": "Parameters Set", + "problemCopyingCanvas": "Problem Copying Canvas", + "problemCopyingCanvasDesc": "Unable to export base layer", + "problemCopyingImage": "Unable to Copy Image", + "problemCopyingImageLink": "Unable to Copy Image Link", + "problemDownloadingCanvas": "Problem Downloading Canvas", + "problemDownloadingCanvasDesc": "Unable to export base layer", + "problemImportingMask": "Problem Importing Mask", + "problemImportingMaskDesc": "Unable to export mask", + "problemMergingCanvas": "Problem Merging Canvas", + "problemMergingCanvasDesc": "Unable to export base layer", + "problemSavingCanvas": "Problem Saving Canvas", + "problemSavingCanvasDesc": "Unable to export base layer", + "problemSavingMask": "Problem Saving Mask", + "problemSavingMaskDesc": "Unable to export mask", + "promptNotSet": "Prompt Not Set", + "promptNotSetDesc": "Could not find prompt for this image.", + "promptSet": "Prompt Set", + "seedNotSet": "Seed Not Set", + "seedNotSetDesc": "Could not find seed for this image.", + "seedSet": "Seed Set", + "sentToImageToImage": "Sent To Image To Image", + "sentToUnifiedCanvas": "Sent to Unified Canvas", + "serverError": "Server Error", + "setAsCanvasInitialImage": "Set as canvas initial image", + "setCanvasInitialImage": "Set canvas initial image", + "setControlImage": "Set as control image", + "setIPAdapterImage": "Set as IP Adapter Image", + "setInitialImage": "Set as initial image", + "setNodeField": "Set as node field", + "tempFoldersEmptied": "Temp Folder Emptied", + "uploadFailed": "Upload failed", + "uploadFailedInvalidUploadDesc": "Must be single PNG or JPEG image", + "uploadFailedUnableToLoadDesc": "Unable to load file", + "upscalingFailed": "Upscaling Failed", + "workflowLoaded": "Workflow Loaded", + "problemRetrievingWorkflow": "Problem Retrieving Workflow", + "workflowDeleted": "Workflow Deleted", + "problemDeletingWorkflow": "Problem Deleting Workflow" + }, + "tooltip": { + "feature": { + "boundingBox": "The bounding box is the same as the Width and Height settings for Text to Image or Image to Image. Only the area in the box will be processed.", + "faceCorrection": "Face correction with GFPGAN or Codeformer: the algorithm detects faces in the image and corrects any defects. High value will change the image more, resulting in more attractive faces. Codeformer with a higher fidelity preserves the original image at the expense of stronger face correction.", + "gallery": "Gallery displays generations from the outputs folder as they're created. Settings are stored within files and accesed by context menu.", + "imageToImage": "Image to Image loads any image as initial, which is then used to generate a new one along with the prompt. The higher the value, the more the result image will change. Values from 0.0 to 1.0 are possible, the recommended range is .25-.75", + "infillAndScaling": "Manage infill methods (used on masked or erased areas of the canvas) and scaling (useful for small bounding box sizes).", + "other": "These options will enable alternative processing modes for Invoke. 'Seamless tiling' will create repeating patterns in the output. 'High resolution' is generation in two steps with img2img: use this setting when you want a larger and more coherent image without artifacts. It will take longer than usual txt2img.", + "prompt": "This is the prompt field. Prompt includes generation objects and stylistic terms. You can add weight (token importance) in the prompt as well, but CLI commands and parameters will not work.", + "seamCorrection": "Controls the handling of visible seams that occur between generated images on the canvas.", + "seed": "Seed value affects the initial noise from which the image is formed. You can use the already existing seeds from previous images. 'Noise Threshold' is used to mitigate artifacts at high CFG values (try the 0-10 range), and Perlin to add Perlin noise during generation: both serve to add variation to your outputs.", + "upscale": "Use ESRGAN to enlarge the image immediately after generation.", + "variations": "Try a variation with a value between 0.1 and 1.0 to change the result for a given seed. Interesting variations of the seed are between 0.1 and 0.3." + } + }, + "popovers": { + "clipSkip": { + "heading": "CLIP Skip", + "paragraphs": [ + "Choose how many layers of the CLIP model to skip.", + "Some models work better with certain CLIP Skip settings.", + "A higher value typically results in a less detailed image." + ] + }, + "paramNegativeConditioning": { + "heading": "Negative Prompt", + "paragraphs": [ + "The generation process avoids the concepts in the negative prompt. Use this to exclude qualities or objects from the output.", + "Supports Compel syntax and embeddings." + ] + }, + "paramPositiveConditioning": { + "heading": "Positive Prompt", + "paragraphs": [ + "Guides the generation process. You may use any words or phrases.", + "Compel and Dynamic Prompts syntaxes and embeddings." + ] + }, + "paramScheduler": { + "heading": "Scheduler", + "paragraphs": [ + "Scheduler defines how to iteratively add noise to an image or how to update a sample based on a model's output." + ] + }, + "compositingBlur": { + "heading": "Blur", + "paragraphs": ["The blur radius of the mask."] + }, + "compositingBlurMethod": { + "heading": "Blur Method", + "paragraphs": ["The method of blur applied to the masked area."] + }, + "compositingCoherencePass": { + "heading": "Coherence Pass", + "paragraphs": [ + "A second round of denoising helps to composite the Inpainted/Outpainted image." + ] + }, + "compositingCoherenceMode": { + "heading": "Mode", + "paragraphs": ["The mode of the Coherence Pass."] + }, + "compositingCoherenceSteps": { + "heading": "Steps", + "paragraphs": [ + "Number of denoising steps used in the Coherence Pass.", + "Same as the main Steps parameter." + ] + }, + "compositingStrength": { + "heading": "Strength", + "paragraphs": [ + "Denoising strength for the Coherence Pass.", + "Same as the Image to Image Denoising Strength parameter." + ] + }, + "compositingMaskAdjustments": { + "heading": "Mask Adjustments", + "paragraphs": ["Adjust the mask."] + }, + "controlNetBeginEnd": { + "heading": "Begin / End Step Percentage", + "paragraphs": [ + "Which steps of the denoising process will have the ControlNet applied.", + "ControlNets applied at the beginning of the process guide composition, and ControlNets applied at the end guide details." + ] + }, + "controlNetControlMode": { + "heading": "Control Mode", + "paragraphs": [ + "Lends more weight to either the prompt or ControlNet." + ] + }, + "controlNetResizeMode": { + "heading": "Resize Mode", + "paragraphs": [ + "How the ControlNet image will be fit to the image output size." + ] + }, + "controlNet": { + "heading": "ControlNet", + "paragraphs": [ + "ControlNets provide guidance to the generation process, helping create images with controlled composition, structure, or style, depending on the model selected." + ] + }, + "controlNetWeight": { + "heading": "Weight", + "paragraphs": [ + "How strongly the ControlNet will impact the generated image." + ] + }, + "dynamicPrompts": { + "heading": "Dynamic Prompts", + "paragraphs": [ + "Dynamic Prompts parses a single prompt into many.", + "The basic syntax is \"a {red|green|blue} ball\". This will produce three prompts: \"a red ball\", \"a green ball\" and \"a blue ball\".", + "You can use the syntax as many times as you like in a single prompt, but be sure to keep the number of prompts generated in check with the Max Prompts setting." + ] + }, + "dynamicPromptsMaxPrompts": { + "heading": "Max Prompts", + "paragraphs": [ + "Limits the number of prompts that can be generated by Dynamic Prompts." + ] + }, + "dynamicPromptsSeedBehaviour": { + "heading": "Seed Behaviour", + "paragraphs": [ + "Controls how the seed is used when generating prompts.", + "Per Iteration will use a unique seed for each iteration. Use this to explore prompt variations on a single seed.", + "For example, if you have 5 prompts, each image will use the same seed.", + "Per Image will use a unique seed for each image. This provides more variation." + ] + }, + "infillMethod": { + "heading": "Infill Method", + "paragraphs": ["Method to infill the selected area."] + }, + "lora": { + "heading": "LoRA Weight", + "paragraphs": [ + "Higher LoRA weight will lead to larger impacts on the final image." + ] + }, + "noiseUseCPU": { + "heading": "Use CPU Noise", + "paragraphs": [ + "Controls whether noise is generated on the CPU or GPU.", + "With CPU Noise enabled, a particular seed will produce the same image on any machine.", + "There is no performance impact to enabling CPU Noise." + ] + }, + "paramCFGScale": { + "heading": "CFG Scale", + "paragraphs": [ + "Controls how much your prompt influences the generation process." + ] + }, + "paramCFGRescaleMultiplier": { + "heading": "CFG Rescale Multiplier", + "paragraphs": [ + "Rescale multiplier for CFG guidance, used for models trained using zero-terminal SNR (ztsnr). Suggested value 0.7." + ] + }, + "paramDenoisingStrength": { + "heading": "Denoising Strength", + "paragraphs": [ + "How much noise is added to the input image.", + "0 will result in an identical image, while 1 will result in a completely new image." + ] + }, + "paramIterations": { + "heading": "Iterations", + "paragraphs": [ + "The number of images to generate.", + "If Dynamic Prompts is enabled, each of the prompts will be generated this many times." + ] + }, + "paramModel": { + "heading": "Model", + "paragraphs": [ + "Model used for the denoising steps.", + "Different models are typically trained to specialize in producing particular aesthetic results and content." + ] + }, + "paramRatio": { + "heading": "Aspect Ratio", + "paragraphs": [ + "The aspect ratio of the dimensions of the image generated.", + "An image size (in number of pixels) equivalent to 512x512 is recommended for SD1.5 models and a size equivalent to 1024x1024 is recommended for SDXL models." + ] + }, + "paramSeed": { + "heading": "Seed", + "paragraphs": [ + "Controls the starting noise used for generation.", + "Disable “Random Seed” to produce identical results with the same generation settings." + ] + }, + "paramSteps": { + "heading": "Steps", + "paragraphs": [ + "Number of steps that will be performed in each generation.", + "Higher step counts will typically create better images but will require more generation time." + ] + }, + "paramVAE": { + "heading": "VAE", + "paragraphs": [ + "Model used for translating AI output into the final image." + ] + }, + "paramVAEPrecision": { + "heading": "VAE Precision", + "paragraphs": [ + "The precision used during VAE encoding and decoding. FP16/half precision is more efficient, at the expense of minor image variations." + ] + }, + "scaleBeforeProcessing": { + "heading": "Scale Before Processing", + "paragraphs": [ + "Scales the selected area to the size best suited for the model before the image generation process." + ] + } + }, + "ui": { + "hideProgressImages": "Hide Progress Images", + "lockRatio": "Lock Ratio", + "showProgressImages": "Show Progress Images", + "swapSizes": "Swap Sizes" + }, + "unifiedCanvas": { + "accept": "Accept", + "activeLayer": "Active Layer", + "antialiasing": "Antialiasing", + "autoSaveToGallery": "Auto Save to Gallery", + "base": "Base", + "betaClear": "Clear", + "betaDarkenOutside": "Darken Outside", + "betaLimitToBox": "Limit To Box", + "betaPreserveMasked": "Preserve Masked", + "boundingBox": "Bounding Box", + "boundingBoxPosition": "Bounding Box Position", + "brush": "Brush", + "brushOptions": "Brush Options", + "brushSize": "Size", + "canvasDimensions": "Canvas Dimensions", + "canvasPosition": "Canvas Position", + "canvasScale": "Canvas Scale", + "canvasSettings": "Canvas Settings", + "clearCanvas": "Clear Canvas", + "clearCanvasHistory": "Clear Canvas History", + "clearCanvasHistoryConfirm": "Are you sure you want to clear the canvas history?", + "clearCanvasHistoryMessage": "Clearing the canvas history leaves your current canvas intact, but irreversibly clears the undo and redo history.", + "clearHistory": "Clear History", + "clearMask": "Clear Mask (Shift+C)", + "colorPicker": "Color Picker", + "copyToClipboard": "Copy to Clipboard", + "cursorPosition": "Cursor Position", + "darkenOutsideSelection": "Darken Outside Selection", + "discardAll": "Discard All", + "downloadAsImage": "Download As Image", + "emptyFolder": "Empty Folder", + "emptyTempImageFolder": "Empty Temp Image Folder", + "emptyTempImagesFolderConfirm": "Are you sure you want to empty the temp folder?", + "emptyTempImagesFolderMessage": "Emptying the temp image folder also fully resets the Unified Canvas. This includes all undo/redo history, images in the staging area, and the canvas base layer.", + "enableMask": "Enable Mask", + "eraseBoundingBox": "Erase Bounding Box", + "eraser": "Eraser", + "fillBoundingBox": "Fill Bounding Box", + "layer": "Layer", + "limitStrokesToBox": "Limit Strokes to Box", + "mask": "Mask", + "maskingOptions": "Masking Options", + "mergeVisible": "Merge Visible", + "move": "Move", + "next": "Next", + "preserveMaskedArea": "Preserve Masked Area", + "previous": "Previous", + "redo": "Redo", + "resetView": "Reset View", + "saveBoxRegionOnly": "Save Box Region Only", + "saveMask": "Save $t(unifiedCanvas.mask)", + "saveToGallery": "Save To Gallery", + "scaledBoundingBox": "Scaled Bounding Box", + "showCanvasDebugInfo": "Show Additional Canvas Info", + "showGrid": "Show Grid", + "showHide": "Show/Hide", + "showResultsOn": "Show Results (On)", + "showResultsOff": "Show Results (Off)", + "showIntermediates": "Show Intermediates", + "snapToGrid": "Snap to Grid", + "undo": "Undo" + }, + "workflows": { + "workflows": "Workflows", + "workflowLibrary": "Library", + "userWorkflows": "My Workflows", + "defaultWorkflows": "Default Workflows", + "openWorkflow": "Open Workflow", + "uploadWorkflow": "Load from File", + "deleteWorkflow": "Delete Workflow", + "unnamedWorkflow": "Unnamed Workflow", + "downloadWorkflow": "Save to File", + "saveWorkflow": "Save Workflow", + "saveWorkflowAs": "Save Workflow As", + "savingWorkflow": "Saving Workflow...", + "problemSavingWorkflow": "Problem Saving Workflow", + "workflowSaved": "Workflow Saved", + "noRecentWorkflows": "No Recent Workflows", + "noUserWorkflows": "No User Workflows", + "noSystemWorkflows": "No System Workflows", + "problemLoading": "Problem Loading Workflows", + "loading": "Loading Workflows", + "noDescription": "No description", + "searchWorkflows": "Search Workflows", + "clearWorkflowSearchFilter": "Clear Workflow Search Filter", + "workflowName": "Workflow Name", + "newWorkflowCreated": "New Workflow Created", + "workflowEditorMenu": "Workflow Editor Menu", + "workflowIsOpen": "Workflow is Open" + }, + "app": { + "storeNotInitialized": "Store is not initialized" + } +} diff --git a/invokeai/frontend/web/dist/locales/es.json b/invokeai/frontend/web/dist/locales/es.json new file mode 100644 index 0000000000..4ce0072517 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/es.json @@ -0,0 +1,732 @@ +{ + "common": { + "hotkeysLabel": "Atajos de teclado", + "languagePickerLabel": "Selector de idioma", + "reportBugLabel": "Reportar errores", + "settingsLabel": "Ajustes", + "img2img": "Imagen a Imagen", + "unifiedCanvas": "Lienzo Unificado", + "nodes": "Editor del flujo de trabajo", + "langSpanish": "Español", + "nodesDesc": "Un sistema de generación de imágenes basado en nodos, actualmente se encuentra en desarrollo. Mantente pendiente a nuestras actualizaciones acerca de esta fabulosa funcionalidad.", + "postProcessing": "Post-procesamiento", + "postProcessDesc1": "Invoke AI ofrece una gran variedad de funciones de post-procesamiento, El aumento de tamaño y Restauración de Rostros ya se encuentran disponibles en la interfaz web, puedes acceder desde el menú de Opciones Avanzadas en las pestañas de Texto a Imagen y de Imagen a Imagen. También puedes acceder a estas funciones directamente mediante el botón de acciones en el menú superior de la imagen actual o en el visualizador.", + "postProcessDesc2": "Una interfaz de usuario dedicada se lanzará pronto para facilitar flujos de trabajo de postprocesamiento más avanzado.", + "postProcessDesc3": "La Interfaz de Línea de Comandos de Invoke AI ofrece muchas otras características, incluyendo -Embiggen-.", + "training": "Entrenamiento", + "trainingDesc1": "Un flujo de trabajo dedicado para el entrenamiento de sus propios -embeddings- y puntos de control utilizando Inversión Textual y Dreambooth desde la interfaz web.", + "trainingDesc2": "InvokeAI ya admite el entrenamiento de incrustaciones personalizadas mediante la inversión textual mediante el script principal.", + "upload": "Subir imagen", + "close": "Cerrar", + "load": "Cargar", + "statusConnected": "Conectado", + "statusDisconnected": "Desconectado", + "statusError": "Error", + "statusPreparing": "Preparando", + "statusProcessingCanceled": "Procesamiento Cancelado", + "statusProcessingComplete": "Procesamiento Completo", + "statusGenerating": "Generando", + "statusGeneratingTextToImage": "Generando Texto a Imagen", + "statusGeneratingImageToImage": "Generando Imagen a Imagen", + "statusGeneratingInpainting": "Generando pintura interior", + "statusGeneratingOutpainting": "Generando pintura exterior", + "statusGenerationComplete": "Generación Completa", + "statusIterationComplete": "Iteración Completa", + "statusSavingImage": "Guardando Imagen", + "statusRestoringFaces": "Restaurando Rostros", + "statusRestoringFacesGFPGAN": "Restaurando Rostros (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restaurando Rostros (CodeFormer)", + "statusUpscaling": "Aumentando Tamaño", + "statusUpscalingESRGAN": "Restaurando Rostros(ESRGAN)", + "statusLoadingModel": "Cargando Modelo", + "statusModelChanged": "Modelo cambiado", + "statusMergedModels": "Modelos combinados", + "githubLabel": "Github", + "discordLabel": "Discord", + "langEnglish": "Inglés", + "langDutch": "Holandés", + "langFrench": "Francés", + "langGerman": "Alemán", + "langItalian": "Italiano", + "langArabic": "Árabe", + "langJapanese": "Japones", + "langPolish": "Polaco", + "langBrPortuguese": "Portugués brasileño", + "langRussian": "Ruso", + "langSimplifiedChinese": "Chino simplificado", + "langUkranian": "Ucraniano", + "back": "Atrás", + "statusConvertingModel": "Convertir el modelo", + "statusModelConverted": "Modelo adaptado", + "statusMergingModels": "Fusionar modelos", + "langPortuguese": "Portugués", + "langKorean": "Coreano", + "langHebrew": "Hebreo", + "loading": "Cargando", + "loadingInvokeAI": "Cargando invocar a la IA", + "postprocessing": "Tratamiento posterior", + "txt2img": "De texto a imagen", + "accept": "Aceptar", + "cancel": "Cancelar", + "linear": "Lineal", + "random": "Aleatorio", + "generate": "Generar", + "openInNewTab": "Abrir en una nueva pestaña", + "dontAskMeAgain": "No me preguntes de nuevo", + "areYouSure": "¿Estas seguro?", + "imagePrompt": "Indicación de imagen", + "batch": "Administrador de lotes", + "darkMode": "Modo oscuro", + "lightMode": "Modo claro", + "modelManager": "Administrador de modelos", + "communityLabel": "Comunidad" + }, + "gallery": { + "generations": "Generaciones", + "showGenerations": "Mostrar Generaciones", + "uploads": "Subidas de archivos", + "showUploads": "Mostar Subidas", + "galleryImageSize": "Tamaño de la imagen", + "galleryImageResetSize": "Restablecer tamaño de la imagen", + "gallerySettings": "Ajustes de la galería", + "maintainAspectRatio": "Mantener relación de aspecto", + "autoSwitchNewImages": "Auto seleccionar Imágenes nuevas", + "singleColumnLayout": "Diseño de una columna", + "allImagesLoaded": "Todas las imágenes cargadas", + "loadMore": "Cargar más", + "noImagesInGallery": "No hay imágenes para mostrar", + "deleteImage": "Eliminar Imagen", + "deleteImageBin": "Las imágenes eliminadas se enviarán a la papelera de tu sistema operativo.", + "deleteImagePermanent": "Las imágenes eliminadas no se pueden restaurar.", + "assets": "Activos", + "autoAssignBoardOnClick": "Asignación automática de tableros al hacer clic" + }, + "hotkeys": { + "keyboardShortcuts": "Atajos de teclado", + "appHotkeys": "Atajos de applicación", + "generalHotkeys": "Atajos generales", + "galleryHotkeys": "Atajos de galería", + "unifiedCanvasHotkeys": "Atajos de lienzo unificado", + "invoke": { + "title": "Invocar", + "desc": "Generar una imagen" + }, + "cancel": { + "title": "Cancelar", + "desc": "Cancelar el proceso de generación de imagen" + }, + "focusPrompt": { + "title": "Mover foco a Entrada de texto", + "desc": "Mover foco hacia el campo de texto de la Entrada" + }, + "toggleOptions": { + "title": "Alternar opciones", + "desc": "Mostar y ocultar el panel de opciones" + }, + "pinOptions": { + "title": "Fijar opciones", + "desc": "Fijar el panel de opciones" + }, + "toggleViewer": { + "title": "Alternar visor", + "desc": "Mostar y ocultar el visor de imágenes" + }, + "toggleGallery": { + "title": "Alternar galería", + "desc": "Mostar y ocultar la galería de imágenes" + }, + "maximizeWorkSpace": { + "title": "Maximizar espacio de trabajo", + "desc": "Cerrar otros páneles y maximizar el espacio de trabajo" + }, + "changeTabs": { + "title": "Cambiar", + "desc": "Cambiar entre áreas de trabajo" + }, + "consoleToggle": { + "title": "Alternar consola", + "desc": "Mostar y ocultar la consola" + }, + "setPrompt": { + "title": "Establecer Entrada", + "desc": "Usar el texto de entrada de la imagen actual" + }, + "setSeed": { + "title": "Establecer semilla", + "desc": "Usar la semilla de la imagen actual" + }, + "setParameters": { + "title": "Establecer parámetros", + "desc": "Usar todos los parámetros de la imagen actual" + }, + "restoreFaces": { + "title": "Restaurar rostros", + "desc": "Restaurar rostros en la imagen actual" + }, + "upscale": { + "title": "Aumentar resolución", + "desc": "Aumentar la resolución de la imagen actual" + }, + "showInfo": { + "title": "Mostrar información", + "desc": "Mostar metadatos de la imagen actual" + }, + "sendToImageToImage": { + "title": "Enviar hacia Imagen a Imagen", + "desc": "Enviar imagen actual hacia Imagen a Imagen" + }, + "deleteImage": { + "title": "Eliminar imagen", + "desc": "Eliminar imagen actual" + }, + "closePanels": { + "title": "Cerrar páneles", + "desc": "Cerrar los páneles abiertos" + }, + "previousImage": { + "title": "Imagen anterior", + "desc": "Muetra la imagen anterior en la galería" + }, + "nextImage": { + "title": "Imagen siguiente", + "desc": "Muetra la imagen siguiente en la galería" + }, + "toggleGalleryPin": { + "title": "Alternar fijado de galería", + "desc": "Fijar o desfijar la galería en la interfaz" + }, + "increaseGalleryThumbSize": { + "title": "Aumentar imagen en galería", + "desc": "Aumenta el tamaño de las miniaturas de la galería" + }, + "decreaseGalleryThumbSize": { + "title": "Reducir imagen en galería", + "desc": "Reduce el tamaño de las miniaturas de la galería" + }, + "selectBrush": { + "title": "Seleccionar pincel", + "desc": "Selecciona el pincel en el lienzo" + }, + "selectEraser": { + "title": "Seleccionar borrador", + "desc": "Selecciona el borrador en el lienzo" + }, + "decreaseBrushSize": { + "title": "Disminuir tamaño de herramienta", + "desc": "Disminuye el tamaño del pincel/borrador en el lienzo" + }, + "increaseBrushSize": { + "title": "Aumentar tamaño del pincel", + "desc": "Aumenta el tamaño del pincel en el lienzo" + }, + "decreaseBrushOpacity": { + "title": "Disminuir opacidad del pincel", + "desc": "Disminuye la opacidad del pincel en el lienzo" + }, + "increaseBrushOpacity": { + "title": "Aumentar opacidad del pincel", + "desc": "Aumenta la opacidad del pincel en el lienzo" + }, + "moveTool": { + "title": "Herramienta de movimiento", + "desc": "Permite navegar por el lienzo" + }, + "fillBoundingBox": { + "title": "Rellenar Caja contenedora", + "desc": "Rellena la caja contenedora con el color seleccionado" + }, + "eraseBoundingBox": { + "title": "Borrar Caja contenedora", + "desc": "Borra el contenido dentro de la caja contenedora" + }, + "colorPicker": { + "title": "Selector de color", + "desc": "Selecciona un color del lienzo" + }, + "toggleSnap": { + "title": "Alternar ajuste de cuadrícula", + "desc": "Activa o desactiva el ajuste automático a la cuadrícula" + }, + "quickToggleMove": { + "title": "Alternar movimiento rápido", + "desc": "Activa momentáneamente la herramienta de movimiento" + }, + "toggleLayer": { + "title": "Alternar capa", + "desc": "Alterna entre las capas de máscara y base" + }, + "clearMask": { + "title": "Limpiar máscara", + "desc": "Limpia toda la máscara actual" + }, + "hideMask": { + "title": "Ocultar máscara", + "desc": "Oculta o muetre la máscara actual" + }, + "showHideBoundingBox": { + "title": "Alternar caja contenedora", + "desc": "Muestra u oculta la caja contenedora" + }, + "mergeVisible": { + "title": "Consolida capas visibles", + "desc": "Consolida todas las capas visibles en una sola" + }, + "saveToGallery": { + "title": "Guardar en galería", + "desc": "Guardar la imagen actual del lienzo en la galería" + }, + "copyToClipboard": { + "title": "Copiar al portapapeles", + "desc": "Copiar el lienzo actual al portapapeles" + }, + "downloadImage": { + "title": "Descargar imagen", + "desc": "Descargar la imagen actual del lienzo" + }, + "undoStroke": { + "title": "Deshar trazo", + "desc": "Desahacer el último trazo del pincel" + }, + "redoStroke": { + "title": "Rehacer trazo", + "desc": "Rehacer el último trazo del pincel" + }, + "resetView": { + "title": "Restablecer vista", + "desc": "Restablecer la vista del lienzo" + }, + "previousStagingImage": { + "title": "Imagen anterior", + "desc": "Imagen anterior en el área de preparación" + }, + "nextStagingImage": { + "title": "Imagen siguiente", + "desc": "Siguiente imagen en el área de preparación" + }, + "acceptStagingImage": { + "title": "Aceptar imagen", + "desc": "Aceptar la imagen actual en el área de preparación" + }, + "addNodes": { + "title": "Añadir Nodos", + "desc": "Abre el menú para añadir nodos" + }, + "nodesHotkeys": "Teclas de acceso rápido a los nodos" + }, + "modelManager": { + "modelManager": "Gestor de Modelos", + "model": "Modelo", + "modelAdded": "Modelo añadido", + "modelUpdated": "Modelo actualizado", + "modelEntryDeleted": "Endrada de Modelo eliminada", + "cannotUseSpaces": "No se pueden usar Spaces", + "addNew": "Añadir nuevo", + "addNewModel": "Añadir nuevo modelo", + "addManually": "Añadir manualmente", + "manual": "Manual", + "name": "Nombre", + "nameValidationMsg": "Introduce un nombre para tu modelo", + "description": "Descripción", + "descriptionValidationMsg": "Introduce una descripción para tu modelo", + "config": "Configurar", + "configValidationMsg": "Ruta del archivo de configuración del modelo.", + "modelLocation": "Ubicación del Modelo", + "modelLocationValidationMsg": "Ruta del archivo de modelo.", + "vaeLocation": "Ubicación VAE", + "vaeLocationValidationMsg": "Ruta del archivo VAE.", + "width": "Ancho", + "widthValidationMsg": "Ancho predeterminado de tu modelo.", + "height": "Alto", + "heightValidationMsg": "Alto predeterminado de tu modelo.", + "addModel": "Añadir Modelo", + "updateModel": "Actualizar Modelo", + "availableModels": "Modelos disponibles", + "search": "Búsqueda", + "load": "Cargar", + "active": "activo", + "notLoaded": "no cargado", + "cached": "en caché", + "checkpointFolder": "Directorio de Checkpoint", + "clearCheckpointFolder": "Limpiar directorio de checkpoint", + "findModels": "Buscar modelos", + "scanAgain": "Escanear de nuevo", + "modelsFound": "Modelos encontrados", + "selectFolder": "Selecciona un directorio", + "selected": "Seleccionado", + "selectAll": "Seleccionar todo", + "deselectAll": "Deseleccionar todo", + "showExisting": "Mostrar existentes", + "addSelected": "Añadir seleccionados", + "modelExists": "Modelo existente", + "selectAndAdd": "Selecciona de la lista un modelo para añadir", + "noModelsFound": "No se encontró ningún modelo", + "delete": "Eliminar", + "deleteModel": "Eliminar Modelo", + "deleteConfig": "Eliminar Configuración", + "deleteMsg1": "¿Estás seguro de que deseas eliminar este modelo de InvokeAI?", + "deleteMsg2": "Esto eliminará el modelo del disco si está en la carpeta raíz de InvokeAI. Si está utilizando una ubicación personalizada, el modelo NO se eliminará del disco.", + "safetensorModels": "SafeTensors", + "addDiffuserModel": "Añadir difusores", + "inpainting": "v1 Repintado", + "repoIDValidationMsg": "Repositorio en línea de tu modelo", + "checkpointModels": "Puntos de control", + "convertToDiffusersHelpText4": "Este proceso se realiza una sola vez. Puede tardar entre 30 y 60 segundos dependiendo de las especificaciones de tu ordenador.", + "diffusersModels": "Difusores", + "addCheckpointModel": "Agregar modelo de punto de control/Modelo Safetensor", + "vaeRepoID": "Identificador del repositorio de VAE", + "vaeRepoIDValidationMsg": "Repositorio en línea de tú VAE", + "formMessageDiffusersModelLocation": "Difusores Modelo Ubicación", + "formMessageDiffusersModelLocationDesc": "Por favor, introduzca al menos uno.", + "formMessageDiffusersVAELocation": "Ubicación VAE", + "formMessageDiffusersVAELocationDesc": "Si no se proporciona, InvokeAI buscará el archivo VAE dentro de la ubicación del modelo indicada anteriormente.", + "convert": "Convertir", + "convertToDiffusers": "Convertir en difusores", + "convertToDiffusersHelpText1": "Este modelo se convertirá al formato 🧨 Difusores.", + "convertToDiffusersHelpText2": "Este proceso sustituirá su entrada del Gestor de Modelos por la versión de Difusores del mismo modelo.", + "convertToDiffusersHelpText3": "Tu archivo del punto de control en el disco se eliminará si está en la carpeta raíz de InvokeAI. Si está en una ubicación personalizada, NO se eliminará.", + "convertToDiffusersHelpText5": "Por favor, asegúrate de tener suficiente espacio en el disco. Los modelos generalmente varían entre 2 GB y 7 GB de tamaño.", + "convertToDiffusersHelpText6": "¿Desea transformar este modelo?", + "convertToDiffusersSaveLocation": "Guardar ubicación", + "v1": "v1", + "statusConverting": "Adaptar", + "modelConverted": "Modelo adaptado", + "sameFolder": "La misma carpeta", + "invokeRoot": "Carpeta InvokeAI", + "custom": "Personalizado", + "customSaveLocation": "Ubicación personalizada para guardar", + "merge": "Fusión", + "modelsMerged": "Modelos fusionados", + "mergeModels": "Combinar modelos", + "modelOne": "Modelo 1", + "modelTwo": "Modelo 2", + "modelThree": "Modelo 3", + "mergedModelName": "Nombre del modelo combinado", + "alpha": "Alfa", + "interpolationType": "Tipo de interpolación", + "mergedModelSaveLocation": "Guardar ubicación", + "mergedModelCustomSaveLocation": "Ruta personalizada", + "invokeAIFolder": "Invocar carpeta de la inteligencia artificial", + "modelMergeHeaderHelp2": "Sólo se pueden fusionar difusores. Si desea fusionar un modelo de punto de control, conviértalo primero en difusores.", + "modelMergeAlphaHelp": "Alfa controla la fuerza de mezcla de los modelos. Los valores alfa más bajos reducen la influencia del segundo modelo.", + "modelMergeInterpAddDifferenceHelp": "En este modo, el Modelo 3 se sustrae primero del Modelo 2. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente. La versión resultante se mezcla con el Modelo 1 con la tasa alfa establecida anteriormente.", + "ignoreMismatch": "Ignorar discrepancias entre modelos seleccionados", + "modelMergeHeaderHelp1": "Puede unir hasta tres modelos diferentes para crear una combinación que se adapte a sus necesidades.", + "inverseSigmoid": "Sigmoideo inverso", + "weightedSum": "Modelo de suma ponderada", + "sigmoid": "Función sigmoide", + "allModels": "Todos los modelos", + "repo_id": "Identificador del repositorio", + "pathToCustomConfig": "Ruta a la configuración personalizada", + "customConfig": "Configuración personalizada", + "v2_base": "v2 (512px)", + "none": "ninguno", + "pickModelType": "Elige el tipo de modelo", + "v2_768": "v2 (768px)", + "addDifference": "Añadir una diferencia", + "scanForModels": "Buscar modelos", + "vae": "VAE", + "variant": "Variante", + "baseModel": "Modelo básico", + "modelConversionFailed": "Conversión al modelo fallida", + "selectModel": "Seleccionar un modelo", + "modelUpdateFailed": "Error al actualizar el modelo", + "modelsMergeFailed": "Fusión del modelo fallida", + "convertingModelBegin": "Convirtiendo el modelo. Por favor, espere.", + "modelDeleted": "Modelo eliminado", + "modelDeleteFailed": "Error al borrar el modelo", + "noCustomLocationProvided": "‐No se proporcionó una ubicación personalizada", + "importModels": "Importar los modelos", + "settings": "Ajustes", + "syncModels": "Sincronizar las plantillas", + "syncModelsDesc": "Si tus plantillas no están sincronizados con el backend, puedes actualizarlas usando esta opción. Esto suele ser útil en los casos en los que actualizas manualmente tu archivo models.yaml o añades plantillas a la carpeta raíz de InvokeAI después de que la aplicación haya arrancado.", + "modelsSynced": "Plantillas sincronizadas", + "modelSyncFailed": "La sincronización de la plantilla falló", + "loraModels": "LoRA", + "onnxModels": "Onnx", + "oliveModels": "Olives" + }, + "parameters": { + "images": "Imágenes", + "steps": "Pasos", + "cfgScale": "Escala CFG", + "width": "Ancho", + "height": "Alto", + "seed": "Semilla", + "randomizeSeed": "Semilla aleatoria", + "shuffle": "Semilla aleatoria", + "noiseThreshold": "Umbral de Ruido", + "perlinNoise": "Ruido Perlin", + "variations": "Variaciones", + "variationAmount": "Cantidad de Variación", + "seedWeights": "Peso de las semillas", + "faceRestoration": "Restauración de Rostros", + "restoreFaces": "Restaurar rostros", + "type": "Tipo", + "strength": "Fuerza", + "upscaling": "Aumento de resolución", + "upscale": "Aumentar resolución", + "upscaleImage": "Aumentar la resolución de la imagen", + "scale": "Escala", + "otherOptions": "Otras opciones", + "seamlessTiling": "Mosaicos sin parches", + "hiresOptim": "Optimización de Alta Resolución", + "imageFit": "Ajuste tamaño de imagen inicial al tamaño objetivo", + "codeformerFidelity": "Fidelidad", + "scaleBeforeProcessing": "Redimensionar antes de procesar", + "scaledWidth": "Ancho escalado", + "scaledHeight": "Alto escalado", + "infillMethod": "Método de relleno", + "tileSize": "Tamaño del mosaico", + "boundingBoxHeader": "Caja contenedora", + "seamCorrectionHeader": "Corrección de parches", + "infillScalingHeader": "Remplazo y escalado", + "img2imgStrength": "Peso de Imagen a Imagen", + "toggleLoopback": "Alternar Retroalimentación", + "sendTo": "Enviar a", + "sendToImg2Img": "Enviar a Imagen a Imagen", + "sendToUnifiedCanvas": "Enviar a Lienzo Unificado", + "copyImageToLink": "Copiar imagen a enlace", + "downloadImage": "Descargar imagen", + "openInViewer": "Abrir en Visor", + "closeViewer": "Cerrar Visor", + "usePrompt": "Usar Entrada", + "useSeed": "Usar Semilla", + "useAll": "Usar Todo", + "useInitImg": "Usar Imagen Inicial", + "info": "Información", + "initialImage": "Imagen Inicial", + "showOptionsPanel": "Mostrar panel de opciones", + "symmetry": "Simetría", + "vSymmetryStep": "Paso de simetría V", + "hSymmetryStep": "Paso de simetría H", + "cancel": { + "immediate": "Cancelar inmediatamente", + "schedule": "Cancelar tras la iteración actual", + "isScheduled": "Cancelando", + "setType": "Tipo de cancelación" + }, + "copyImage": "Copiar la imagen", + "general": "General", + "imageToImage": "Imagen a imagen", + "denoisingStrength": "Intensidad de la eliminación del ruido", + "hiresStrength": "Alta resistencia", + "showPreview": "Mostrar la vista previa", + "hidePreview": "Ocultar la vista previa", + "noiseSettings": "Ruido", + "seamlessXAxis": "Eje x", + "seamlessYAxis": "Eje y", + "scheduler": "Programador", + "boundingBoxWidth": "Anchura del recuadro", + "boundingBoxHeight": "Altura del recuadro", + "positivePromptPlaceholder": "Prompt Positivo", + "negativePromptPlaceholder": "Prompt Negativo", + "controlNetControlMode": "Modo de control", + "clipSkip": "Omitir el CLIP", + "aspectRatio": "Relación", + "maskAdjustmentsHeader": "Ajustes de la máscara", + "maskBlur": "Difuminar", + "maskBlurMethod": "Método del desenfoque", + "seamHighThreshold": "Alto", + "seamLowThreshold": "Bajo", + "coherencePassHeader": "Parámetros de la coherencia", + "compositingSettingsHeader": "Ajustes de la composición", + "coherenceSteps": "Pasos", + "coherenceStrength": "Fuerza", + "patchmatchDownScaleSize": "Reducir a escala", + "coherenceMode": "Modo" + }, + "settings": { + "models": "Modelos", + "displayInProgress": "Mostrar las imágenes del progreso", + "saveSteps": "Guardar imágenes cada n pasos", + "confirmOnDelete": "Confirmar antes de eliminar", + "displayHelpIcons": "Mostrar iconos de ayuda", + "enableImageDebugging": "Habilitar depuración de imágenes", + "resetWebUI": "Restablecer interfaz web", + "resetWebUIDesc1": "Al restablecer la interfaz web, solo se restablece la caché local del navegador de sus imágenes y la configuración guardada. No se elimina ninguna imagen de su disco duro.", + "resetWebUIDesc2": "Si las imágenes no se muestran en la galería o algo más no funciona, intente restablecer antes de reportar un incidente en GitHub.", + "resetComplete": "Se ha restablecido la interfaz web.", + "useSlidersForAll": "Utilice controles deslizantes para todas las opciones", + "general": "General", + "consoleLogLevel": "Nivel del registro", + "shouldLogToConsole": "Registro de la consola", + "developer": "Desarrollador", + "antialiasProgressImages": "Imágenes del progreso de Antialias", + "showProgressInViewer": "Mostrar las imágenes del progreso en el visor", + "ui": "Interfaz del usuario", + "generation": "Generación", + "favoriteSchedulers": "Programadores favoritos", + "favoriteSchedulersPlaceholder": "No hay programadores favoritos", + "showAdvancedOptions": "Mostrar las opciones avanzadas", + "alternateCanvasLayout": "Diseño alternativo del lienzo", + "beta": "Beta", + "enableNodesEditor": "Activar el editor de nodos", + "experimental": "Experimental", + "autoChangeDimensions": "Actualiza W/H a los valores predeterminados del modelo cuando se modifica" + }, + "toast": { + "tempFoldersEmptied": "Directorio temporal vaciado", + "uploadFailed": "Error al subir archivo", + "uploadFailedUnableToLoadDesc": "No se pudo cargar la imágen", + "downloadImageStarted": "Descargando imágen", + "imageCopied": "Imágen copiada", + "imageLinkCopied": "Enlace de imágen copiado", + "imageNotLoaded": "No se cargó la imágen", + "imageNotLoadedDesc": "No se pudo encontrar la imagen", + "imageSavedToGallery": "Imágen guardada en la galería", + "canvasMerged": "Lienzo consolidado", + "sentToImageToImage": "Enviar hacia Imagen a Imagen", + "sentToUnifiedCanvas": "Enviar hacia Lienzo Consolidado", + "parametersSet": "Parámetros establecidos", + "parametersNotSet": "Parámetros no establecidos", + "parametersNotSetDesc": "No se encontraron metadatos para esta imágen.", + "parametersFailed": "Error cargando parámetros", + "parametersFailedDesc": "No fue posible cargar la imagen inicial.", + "seedSet": "Semilla establecida", + "seedNotSet": "Semilla no establecida", + "seedNotSetDesc": "No se encontró una semilla para esta imágen.", + "promptSet": "Entrada establecida", + "promptNotSet": "Entrada no establecida", + "promptNotSetDesc": "No se encontró una entrada para esta imágen.", + "upscalingFailed": "Error al aumentar tamaño de imagn", + "faceRestoreFailed": "Restauración de rostro fallida", + "metadataLoadFailed": "Error al cargar metadatos", + "initialImageSet": "Imágen inicial establecida", + "initialImageNotSet": "Imagen inicial no establecida", + "initialImageNotSetDesc": "Error al establecer la imágen inicial", + "serverError": "Error en el servidor", + "disconnected": "Desconectado del servidor", + "canceled": "Procesando la cancelación", + "connected": "Conectado al servidor", + "problemCopyingImageLink": "No se puede copiar el enlace de la imagen", + "uploadFailedInvalidUploadDesc": "Debe ser una sola imagen PNG o JPEG", + "parameterSet": "Conjunto de parámetros", + "parameterNotSet": "Parámetro no configurado", + "nodesSaved": "Nodos guardados", + "nodesLoadedFailed": "Error al cargar los nodos", + "nodesLoaded": "Nodos cargados", + "problemCopyingImage": "No se puede copiar la imagen", + "nodesNotValidJSON": "JSON no válido", + "nodesCorruptedGraph": "No se puede cargar. El gráfico parece estar dañado.", + "nodesUnrecognizedTypes": "No se puede cargar. El gráfico tiene tipos no reconocidos", + "nodesNotValidGraph": "Gráfico del nodo InvokeAI no válido", + "nodesBrokenConnections": "No se puede cargar. Algunas conexiones están rotas." + }, + "tooltip": { + "feature": { + "prompt": "Este campo tomará todo el texto de entrada, incluidos tanto los términos de contenido como los estilísticos. Si bien se pueden incluir pesos en la solicitud, los comandos/parámetros estándar de línea de comandos no funcionarán.", + "gallery": "Conforme se generan nuevas invocaciones, los archivos del directorio de salida se mostrarán aquí. Las generaciones tienen opciones adicionales para configurar nuevas generaciones.", + "other": "Estas opciones habilitarán modos de procesamiento alternativos para Invoke. 'Seamless mosaico' creará patrones repetitivos en la salida. 'Alta resolución' es la generación en dos pasos con img2img: use esta configuración cuando desee una imagen más grande y más coherente sin artefactos. tomar más tiempo de lo habitual txt2img.", + "seed": "Los valores de semilla proporcionan un conjunto inicial de ruido que guían el proceso de eliminación de ruido y se pueden aleatorizar o rellenar con una semilla de una invocación anterior. La función Umbral se puede usar para mitigar resultados indeseables a valores CFG más altos (intente entre 0-10), y Perlin se puede usar para agregar ruido Perlin al proceso de eliminación de ruido. Ambos sirven para agregar variación a sus salidas.", + "variations": "Pruebe una variación con una cantidad entre 0 y 1 para cambiar la imagen de salida para la semilla establecida. Se encuentran variaciones interesantes en la semilla entre 0.1 y 0.3.", + "upscale": "Usando ESRGAN, puede aumentar la resolución de salida sin requerir un ancho/alto más alto en la generación inicial.", + "faceCorrection": "Usando GFPGAN o Codeformer, la corrección de rostros intentará identificar rostros en las salidas y corregir cualquier defecto/anormalidad. Los valores de fuerza más altos aplicarán una presión correctiva más fuerte en las salidas, lo que resultará en rostros más atractivos. Con Codeformer, una mayor fidelidad intentará preservar la imagen original, a expensas de la fuerza de corrección de rostros.", + "imageToImage": "Imagen a Imagen permite cargar una imagen inicial, que InvokeAI usará para guiar el proceso de generación, junto con una solicitud. Un valor más bajo para esta configuración se parecerá más a la imagen original. Se aceptan valores entre 0-1, y se recomienda un rango de .25-.75", + "boundingBox": "La caja delimitadora es análoga a las configuraciones de Ancho y Alto para Texto a Imagen o Imagen a Imagen. Solo se procesará el área en la caja.", + "seamCorrection": "Controla el manejo de parches visibles que pueden ocurrir cuando se pega una imagen generada de nuevo en el lienzo.", + "infillAndScaling": "Administra los métodos de relleno (utilizados en áreas enmascaradas o borradas del lienzo) y la escala (útil para tamaños de caja delimitadora pequeños)." + } + }, + "unifiedCanvas": { + "layer": "Capa", + "base": "Base", + "mask": "Máscara", + "maskingOptions": "Opciones de máscara", + "enableMask": "Habilitar Máscara", + "preserveMaskedArea": "Preservar área enmascarada", + "clearMask": "Limpiar máscara", + "brush": "Pincel", + "eraser": "Borrador", + "fillBoundingBox": "Rellenar Caja Contenedora", + "eraseBoundingBox": "Eliminar Caja Contenedora", + "colorPicker": "Selector de color", + "brushOptions": "Opciones de pincel", + "brushSize": "Tamaño", + "move": "Mover", + "resetView": "Restablecer vista", + "mergeVisible": "Consolidar vista", + "saveToGallery": "Guardar en galería", + "copyToClipboard": "Copiar al portapapeles", + "downloadAsImage": "Descargar como imagen", + "undo": "Deshacer", + "redo": "Rehacer", + "clearCanvas": "Limpiar lienzo", + "canvasSettings": "Ajustes de lienzo", + "showIntermediates": "Mostrar intermedios", + "showGrid": "Mostrar cuadrícula", + "snapToGrid": "Ajustar a cuadrícula", + "darkenOutsideSelection": "Oscurecer fuera de la selección", + "autoSaveToGallery": "Guardar automáticamente en galería", + "saveBoxRegionOnly": "Guardar solo región dentro de la caja", + "limitStrokesToBox": "Limitar trazos a la caja", + "showCanvasDebugInfo": "Mostrar la información adicional del lienzo", + "clearCanvasHistory": "Limpiar historial de lienzo", + "clearHistory": "Limpiar historial", + "clearCanvasHistoryMessage": "Limpiar el historial de lienzo también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", + "clearCanvasHistoryConfirm": "¿Está seguro de que desea limpiar el historial del lienzo?", + "emptyTempImageFolder": "Vaciar directorio de imágenes temporales", + "emptyFolder": "Vaciar directorio", + "emptyTempImagesFolderMessage": "Vaciar el directorio de imágenes temporales también restablece completamente el lienzo unificado. Esto incluye todo el historial de deshacer/rehacer, las imágenes en el área de preparación y la capa base del lienzo.", + "emptyTempImagesFolderConfirm": "¿Está seguro de que desea vaciar el directorio temporal?", + "activeLayer": "Capa activa", + "canvasScale": "Escala de lienzo", + "boundingBox": "Caja contenedora", + "scaledBoundingBox": "Caja contenedora escalada", + "boundingBoxPosition": "Posición de caja contenedora", + "canvasDimensions": "Dimensiones de lienzo", + "canvasPosition": "Posición de lienzo", + "cursorPosition": "Posición del cursor", + "previous": "Anterior", + "next": "Siguiente", + "accept": "Aceptar", + "showHide": "Mostrar/Ocultar", + "discardAll": "Descartar todo", + "betaClear": "Limpiar", + "betaDarkenOutside": "Oscurecer fuera", + "betaLimitToBox": "Limitar a caja", + "betaPreserveMasked": "Preservar área enmascarada", + "antialiasing": "Suavizado" + }, + "accessibility": { + "invokeProgressBar": "Activar la barra de progreso", + "modelSelect": "Seleccionar modelo", + "reset": "Reiniciar", + "uploadImage": "Cargar imagen", + "previousImage": "Imagen anterior", + "nextImage": "Siguiente imagen", + "useThisParameter": "Utiliza este parámetro", + "copyMetadataJson": "Copiar los metadatos JSON", + "exitViewer": "Salir del visor", + "zoomIn": "Acercar", + "zoomOut": "Alejar", + "rotateCounterClockwise": "Girar en sentido antihorario", + "rotateClockwise": "Girar en sentido horario", + "flipHorizontally": "Voltear horizontalmente", + "flipVertically": "Voltear verticalmente", + "modifyConfig": "Modificar la configuración", + "toggleAutoscroll": "Activar el autodesplazamiento", + "toggleLogViewer": "Alternar el visor de registros", + "showOptionsPanel": "Mostrar el panel lateral", + "menu": "Menú" + }, + "ui": { + "hideProgressImages": "Ocultar el progreso de la imagen", + "showProgressImages": "Mostrar el progreso de la imagen", + "swapSizes": "Cambiar los tamaños", + "lockRatio": "Proporción del bloqueo" + }, + "nodes": { + "showGraphNodes": "Mostrar la superposición de los gráficos", + "zoomInNodes": "Acercar", + "hideMinimapnodes": "Ocultar el minimapa", + "fitViewportNodes": "Ajustar la vista", + "zoomOutNodes": "Alejar", + "hideGraphNodes": "Ocultar la superposición de los gráficos", + "hideLegendNodes": "Ocultar la leyenda del tipo de campo", + "showLegendNodes": "Mostrar la leyenda del tipo de campo", + "showMinimapnodes": "Mostrar el minimapa", + "reloadNodeTemplates": "Recargar las plantillas de nodos", + "loadWorkflow": "Cargar el flujo de trabajo", + "downloadWorkflow": "Descargar el flujo de trabajo en un archivo JSON" + } +} diff --git a/invokeai/frontend/web/dist/locales/fi.json b/invokeai/frontend/web/dist/locales/fi.json new file mode 100644 index 0000000000..cf7fc6701b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/fi.json @@ -0,0 +1,114 @@ +{ + "accessibility": { + "reset": "Resetoi", + "useThisParameter": "Käytä tätä parametria", + "modelSelect": "Mallin Valinta", + "exitViewer": "Poistu katselimesta", + "uploadImage": "Lataa kuva", + "copyMetadataJson": "Kopioi metadata JSON:iin", + "invokeProgressBar": "Invoken edistymispalkki", + "nextImage": "Seuraava kuva", + "previousImage": "Edellinen kuva", + "zoomIn": "Lähennä", + "flipHorizontally": "Käännä vaakasuoraan", + "zoomOut": "Loitonna", + "rotateCounterClockwise": "Kierrä vastapäivään", + "rotateClockwise": "Kierrä myötäpäivään", + "flipVertically": "Käännä pystysuoraan", + "modifyConfig": "Muokkaa konfiguraatiota", + "toggleAutoscroll": "Kytke automaattinen vieritys", + "toggleLogViewer": "Kytke lokin katselutila", + "showOptionsPanel": "Näytä asetukset" + }, + "common": { + "postProcessDesc2": "Erillinen käyttöliittymä tullaan julkaisemaan helpottaaksemme työnkulkua jälkikäsittelyssä.", + "training": "Kouluta", + "statusLoadingModel": "Ladataan mallia", + "statusModelChanged": "Malli vaihdettu", + "statusConvertingModel": "Muunnetaan mallia", + "statusModelConverted": "Malli muunnettu", + "langFrench": "Ranska", + "langItalian": "Italia", + "languagePickerLabel": "Kielen valinta", + "hotkeysLabel": "Pikanäppäimet", + "reportBugLabel": "Raportoi Bugista", + "langPolish": "Puola", + "langDutch": "Hollanti", + "settingsLabel": "Asetukset", + "githubLabel": "Github", + "langGerman": "Saksa", + "langPortuguese": "Portugali", + "discordLabel": "Discord", + "langEnglish": "Englanti", + "langRussian": "Venäjä", + "langUkranian": "Ukraina", + "langSpanish": "Espanja", + "upload": "Lataa", + "statusMergedModels": "Mallit yhdistelty", + "img2img": "Kuva kuvaksi", + "nodes": "Solmut", + "nodesDesc": "Solmupohjainen järjestelmä kuvien generoimiseen on parhaillaan kehitteillä. Pysy kuulolla päivityksistä tähän uskomattomaan ominaisuuteen liittyen.", + "postProcessDesc1": "Invoke AI tarjoaa monenlaisia jälkikäsittelyominaisuukisa. Kuvan laadun skaalaus sekä kasvojen korjaus ovat jo saatavilla WebUI:ssä. Voit ottaa ne käyttöön lisäasetusten valikosta teksti kuvaksi sekä kuva kuvaksi -välilehdiltä. Voit myös suoraan prosessoida kuvia käyttämällä kuvan toimintapainikkeita nykyisen kuvan yläpuolella tai tarkastelussa.", + "postprocessing": "Jälkikäsitellään", + "postProcessing": "Jälkikäsitellään", + "cancel": "Peruuta", + "close": "Sulje", + "accept": "Hyväksy", + "statusConnected": "Yhdistetty", + "statusError": "Virhe", + "statusProcessingComplete": "Prosessointi valmis", + "load": "Lataa", + "back": "Takaisin", + "statusGeneratingTextToImage": "Generoidaan tekstiä kuvaksi", + "trainingDesc2": "InvokeAI tukee jo mukautettujen upotusten kouluttamista tekstin inversiolla käyttäen pääskriptiä.", + "statusDisconnected": "Yhteys katkaistu", + "statusPreparing": "Valmistellaan", + "statusIterationComplete": "Iteraatio valmis", + "statusMergingModels": "Yhdistellään malleja", + "statusProcessingCanceled": "Valmistelu peruutettu", + "statusSavingImage": "Tallennetaan kuvaa", + "statusGeneratingImageToImage": "Generoidaan kuvaa kuvaksi", + "statusRestoringFacesGFPGAN": "Korjataan kasvoja (GFPGAN)", + "statusRestoringFacesCodeFormer": "Korjataan kasvoja (CodeFormer)", + "statusGeneratingInpainting": "Generoidaan sisällemaalausta", + "statusGeneratingOutpainting": "Generoidaan ulosmaalausta", + "statusRestoringFaces": "Korjataan kasvoja", + "loadingInvokeAI": "Ladataan Invoke AI:ta", + "loading": "Ladataan", + "statusGenerating": "Generoidaan", + "txt2img": "Teksti kuvaksi", + "trainingDesc1": "Erillinen työnkulku omien upotusten ja tarkastuspisteiden kouluttamiseksi käyttäen tekstin inversiota ja dreamboothia selaimen käyttöliittymässä.", + "postProcessDesc3": "Invoke AI:n komentorivi tarjoaa paljon muita ominaisuuksia, kuten esimerkiksi Embiggenin.", + "unifiedCanvas": "Yhdistetty kanvas", + "statusGenerationComplete": "Generointi valmis" + }, + "gallery": { + "uploads": "Lataukset", + "showUploads": "Näytä lataukset", + "galleryImageResetSize": "Resetoi koko", + "maintainAspectRatio": "Säilytä kuvasuhde", + "galleryImageSize": "Kuvan koko", + "showGenerations": "Näytä generaatiot", + "singleColumnLayout": "Yhden sarakkeen asettelu", + "generations": "Generoinnit", + "gallerySettings": "Gallerian asetukset", + "autoSwitchNewImages": "Vaihda uusiin kuviin automaattisesti", + "allImagesLoaded": "Kaikki kuvat ladattu", + "noImagesInGallery": "Ei kuvia galleriassa", + "loadMore": "Lataa lisää" + }, + "hotkeys": { + "keyboardShortcuts": "näppäimistön pikavalinnat", + "appHotkeys": "Sovelluksen pikanäppäimet", + "generalHotkeys": "Yleiset pikanäppäimet", + "galleryHotkeys": "Gallerian pikanäppäimet", + "unifiedCanvasHotkeys": "Yhdistetyn kanvaan pikanäppäimet", + "cancel": { + "desc": "Peruuta kuvan luominen", + "title": "Peruuta" + }, + "invoke": { + "desc": "Luo kuva" + } + } +} diff --git a/invokeai/frontend/web/dist/locales/fr.json b/invokeai/frontend/web/dist/locales/fr.json new file mode 100644 index 0000000000..b7ab932fcc --- /dev/null +++ b/invokeai/frontend/web/dist/locales/fr.json @@ -0,0 +1,531 @@ +{ + "common": { + "hotkeysLabel": "Raccourcis clavier", + "languagePickerLabel": "Sélecteur de langue", + "reportBugLabel": "Signaler un bug", + "settingsLabel": "Paramètres", + "img2img": "Image en image", + "unifiedCanvas": "Canvas unifié", + "nodes": "Nœuds", + "langFrench": "Français", + "nodesDesc": "Un système basé sur les nœuds pour la génération d'images est actuellement en développement. Restez à l'écoute pour des mises à jour à ce sujet.", + "postProcessing": "Post-traitement", + "postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu 'Options avancées' des onglets 'Texte vers image' et 'Image vers image'. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image au-dessus de l'affichage d'image actuel ou dans le visualiseur.", + "postProcessDesc2": "Une interface dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.", + "postProcessDesc3": "L'interface en ligne de commande d'Invoke AI offre diverses autres fonctionnalités, notamment Embiggen.", + "training": "Formation", + "trainingDesc1": "Un workflow dédié pour former vos propres embeddings et checkpoints en utilisant Textual Inversion et Dreambooth depuis l'interface web.", + "trainingDesc2": "InvokeAI prend déjà en charge la formation d'embeddings personnalisés en utilisant Textual Inversion en utilisant le script principal.", + "upload": "Télécharger", + "close": "Fermer", + "load": "Charger", + "back": "Retour", + "statusConnected": "En ligne", + "statusDisconnected": "Hors ligne", + "statusError": "Erreur", + "statusPreparing": "Préparation", + "statusProcessingCanceled": "Traitement annulé", + "statusProcessingComplete": "Traitement terminé", + "statusGenerating": "Génération", + "statusGeneratingTextToImage": "Génération Texte vers Image", + "statusGeneratingImageToImage": "Génération Image vers Image", + "statusGeneratingInpainting": "Génération de réparation", + "statusGeneratingOutpainting": "Génération de complétion", + "statusGenerationComplete": "Génération terminée", + "statusIterationComplete": "Itération terminée", + "statusSavingImage": "Sauvegarde de l'image", + "statusRestoringFaces": "Restauration des visages", + "statusRestoringFacesGFPGAN": "Restauration des visages (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restauration des visages (CodeFormer)", + "statusUpscaling": "Mise à échelle", + "statusUpscalingESRGAN": "Mise à échelle (ESRGAN)", + "statusLoadingModel": "Chargement du modèle", + "statusModelChanged": "Modèle changé", + "discordLabel": "Discord", + "githubLabel": "Github", + "accept": "Accepter", + "statusMergingModels": "Mélange des modèles", + "loadingInvokeAI": "Chargement de Invoke AI", + "cancel": "Annuler", + "langEnglish": "Anglais", + "statusConvertingModel": "Conversion du modèle", + "statusModelConverted": "Modèle converti", + "loading": "Chargement", + "statusMergedModels": "Modèles mélangés", + "txt2img": "Texte vers image", + "postprocessing": "Post-Traitement" + }, + "gallery": { + "generations": "Générations", + "showGenerations": "Afficher les générations", + "uploads": "Téléchargements", + "showUploads": "Afficher les téléchargements", + "galleryImageSize": "Taille de l'image", + "galleryImageResetSize": "Réinitialiser la taille", + "gallerySettings": "Paramètres de la galerie", + "maintainAspectRatio": "Maintenir le rapport d'aspect", + "autoSwitchNewImages": "Basculer automatiquement vers de nouvelles images", + "singleColumnLayout": "Mise en page en colonne unique", + "allImagesLoaded": "Toutes les images chargées", + "loadMore": "Charger plus", + "noImagesInGallery": "Aucune image dans la galerie" + }, + "hotkeys": { + "keyboardShortcuts": "Raccourcis clavier", + "appHotkeys": "Raccourcis de l'application", + "generalHotkeys": "Raccourcis généraux", + "galleryHotkeys": "Raccourcis de la galerie", + "unifiedCanvasHotkeys": "Raccourcis du canvas unifié", + "invoke": { + "title": "Invoquer", + "desc": "Générer une image" + }, + "cancel": { + "title": "Annuler", + "desc": "Annuler la génération d'image" + }, + "focusPrompt": { + "title": "Prompt de focus", + "desc": "Mettre en focus la zone de saisie de la commande" + }, + "toggleOptions": { + "title": "Affichage des options", + "desc": "Afficher et masquer le panneau d'options" + }, + "pinOptions": { + "title": "Epinglage des options", + "desc": "Epingler le panneau d'options" + }, + "toggleViewer": { + "title": "Affichage de la visionneuse", + "desc": "Afficher et masquer la visionneuse d'image" + }, + "toggleGallery": { + "title": "Affichage de la galerie", + "desc": "Afficher et masquer la galerie" + }, + "maximizeWorkSpace": { + "title": "Maximiser la zone de travail", + "desc": "Fermer les panneaux et maximiser la zone de travail" + }, + "changeTabs": { + "title": "Changer d'onglet", + "desc": "Passer à un autre espace de travail" + }, + "consoleToggle": { + "title": "Affichage de la console", + "desc": "Afficher et masquer la console" + }, + "setPrompt": { + "title": "Définir le prompt", + "desc": "Utiliser le prompt de l'image actuelle" + }, + "setSeed": { + "title": "Définir la graine", + "desc": "Utiliser la graine de l'image actuelle" + }, + "setParameters": { + "title": "Définir les paramètres", + "desc": "Utiliser tous les paramètres de l'image actuelle" + }, + "restoreFaces": { + "title": "Restaurer les visages", + "desc": "Restaurer l'image actuelle" + }, + "upscale": { + "title": "Agrandir", + "desc": "Agrandir l'image actuelle" + }, + "showInfo": { + "title": "Afficher les informations", + "desc": "Afficher les informations de métadonnées de l'image actuelle" + }, + "sendToImageToImage": { + "title": "Envoyer à l'image à l'image", + "desc": "Envoyer l'image actuelle à l'image à l'image" + }, + "deleteImage": { + "title": "Supprimer l'image", + "desc": "Supprimer l'image actuelle" + }, + "closePanels": { + "title": "Fermer les panneaux", + "desc": "Fermer les panneaux ouverts" + }, + "previousImage": { + "title": "Image précédente", + "desc": "Afficher l'image précédente dans la galerie" + }, + "nextImage": { + "title": "Image suivante", + "desc": "Afficher l'image suivante dans la galerie" + }, + "toggleGalleryPin": { + "title": "Activer/désactiver l'épinglage de la galerie", + "desc": "Épingle ou dépingle la galerie à l'interface" + }, + "increaseGalleryThumbSize": { + "title": "Augmenter la taille des miniatures de la galerie", + "desc": "Augmente la taille des miniatures de la galerie" + }, + "decreaseGalleryThumbSize": { + "title": "Diminuer la taille des miniatures de la galerie", + "desc": "Diminue la taille des miniatures de la galerie" + }, + "selectBrush": { + "title": "Sélectionner un pinceau", + "desc": "Sélectionne le pinceau de la toile" + }, + "selectEraser": { + "title": "Sélectionner un gomme", + "desc": "Sélectionne la gomme de la toile" + }, + "decreaseBrushSize": { + "title": "Diminuer la taille du pinceau", + "desc": "Diminue la taille du pinceau/gomme de la toile" + }, + "increaseBrushSize": { + "title": "Augmenter la taille du pinceau", + "desc": "Augmente la taille du pinceau/gomme de la toile" + }, + "decreaseBrushOpacity": { + "title": "Diminuer l'opacité du pinceau", + "desc": "Diminue l'opacité du pinceau de la toile" + }, + "increaseBrushOpacity": { + "title": "Augmenter l'opacité du pinceau", + "desc": "Augmente l'opacité du pinceau de la toile" + }, + "moveTool": { + "title": "Outil de déplacement", + "desc": "Permet la navigation sur la toile" + }, + "fillBoundingBox": { + "title": "Remplir la boîte englobante", + "desc": "Remplit la boîte englobante avec la couleur du pinceau" + }, + "eraseBoundingBox": { + "title": "Effacer la boîte englobante", + "desc": "Efface la zone de la boîte englobante" + }, + "colorPicker": { + "title": "Sélectionnez le sélecteur de couleur", + "desc": "Sélectionne le sélecteur de couleur de la toile" + }, + "toggleSnap": { + "title": "Basculer Snap", + "desc": "Basculer Snap à la grille" + }, + "quickToggleMove": { + "title": "Basculer rapidement déplacer", + "desc": "Basculer temporairement le mode Déplacer" + }, + "toggleLayer": { + "title": "Basculer la couche", + "desc": "Basculer la sélection de la couche masque/base" + }, + "clearMask": { + "title": "Effacer le masque", + "desc": "Effacer entièrement le masque" + }, + "hideMask": { + "title": "Masquer le masque", + "desc": "Masquer et démasquer le masque" + }, + "showHideBoundingBox": { + "title": "Afficher/Masquer la boîte englobante", + "desc": "Basculer la visibilité de la boîte englobante" + }, + "mergeVisible": { + "title": "Fusionner visible", + "desc": "Fusionner toutes les couches visibles de la toile" + }, + "saveToGallery": { + "title": "Enregistrer dans la galerie", + "desc": "Enregistrer la toile actuelle dans la galerie" + }, + "copyToClipboard": { + "title": "Copier dans le presse-papiers", + "desc": "Copier la toile actuelle dans le presse-papiers" + }, + "downloadImage": { + "title": "Télécharger l'image", + "desc": "Télécharger la toile actuelle" + }, + "undoStroke": { + "title": "Annuler le trait", + "desc": "Annuler un coup de pinceau" + }, + "redoStroke": { + "title": "Rétablir le trait", + "desc": "Rétablir un coup de pinceau" + }, + "resetView": { + "title": "Réinitialiser la vue", + "desc": "Réinitialiser la vue de la toile" + }, + "previousStagingImage": { + "title": "Image de mise en scène précédente", + "desc": "Image précédente de la zone de mise en scène" + }, + "nextStagingImage": { + "title": "Image de mise en scène suivante", + "desc": "Image suivante de la zone de mise en scène" + }, + "acceptStagingImage": { + "title": "Accepter l'image de mise en scène", + "desc": "Accepter l'image actuelle de la zone de mise en scène" + } + }, + "modelManager": { + "modelManager": "Gestionnaire de modèle", + "model": "Modèle", + "allModels": "Tous les modèles", + "checkpointModels": "Points de contrôle", + "diffusersModels": "Diffuseurs", + "safetensorModels": "SafeTensors", + "modelAdded": "Modèle ajouté", + "modelUpdated": "Modèle mis à jour", + "modelEntryDeleted": "Entrée de modèle supprimée", + "cannotUseSpaces": "Ne peut pas utiliser d'espaces", + "addNew": "Ajouter un nouveau", + "addNewModel": "Ajouter un nouveau modèle", + "addCheckpointModel": "Ajouter un modèle de point de contrôle / SafeTensor", + "addDiffuserModel": "Ajouter des diffuseurs", + "addManually": "Ajouter manuellement", + "manual": "Manuel", + "name": "Nom", + "nameValidationMsg": "Entrez un nom pour votre modèle", + "description": "Description", + "descriptionValidationMsg": "Ajoutez une description pour votre modèle", + "config": "Config", + "configValidationMsg": "Chemin vers le fichier de configuration de votre modèle.", + "modelLocation": "Emplacement du modèle", + "modelLocationValidationMsg": "Chemin vers où votre modèle est situé localement.", + "repo_id": "ID de dépôt", + "repoIDValidationMsg": "Dépôt en ligne de votre modèle", + "vaeLocation": "Emplacement VAE", + "vaeLocationValidationMsg": "Chemin vers où votre VAE est situé.", + "vaeRepoID": "ID de dépôt VAE", + "vaeRepoIDValidationMsg": "Dépôt en ligne de votre VAE", + "width": "Largeur", + "widthValidationMsg": "Largeur par défaut de votre modèle.", + "height": "Hauteur", + "heightValidationMsg": "Hauteur par défaut de votre modèle.", + "addModel": "Ajouter un modèle", + "updateModel": "Mettre à jour le modèle", + "availableModels": "Modèles disponibles", + "search": "Rechercher", + "load": "Charger", + "active": "actif", + "notLoaded": "non chargé", + "cached": "en cache", + "checkpointFolder": "Dossier de point de contrôle", + "clearCheckpointFolder": "Effacer le dossier de point de contrôle", + "findModels": "Trouver des modèles", + "scanAgain": "Scanner à nouveau", + "modelsFound": "Modèles trouvés", + "selectFolder": "Sélectionner un dossier", + "selected": "Sélectionné", + "selectAll": "Tout sélectionner", + "deselectAll": "Tout désélectionner", + "showExisting": "Afficher existant", + "addSelected": "Ajouter sélectionné", + "modelExists": "Modèle existant", + "selectAndAdd": "Sélectionner et ajouter les modèles listés ci-dessous", + "noModelsFound": "Aucun modèle trouvé", + "delete": "Supprimer", + "deleteModel": "Supprimer le modèle", + "deleteConfig": "Supprimer la configuration", + "deleteMsg1": "Voulez-vous vraiment supprimer cette entrée de modèle dans InvokeAI ?", + "deleteMsg2": "Cela n'effacera pas le fichier de point de contrôle du modèle de votre disque. Vous pouvez les réajouter si vous le souhaitez.", + "formMessageDiffusersModelLocation": "Emplacement du modèle de diffuseurs", + "formMessageDiffusersModelLocationDesc": "Veuillez en entrer au moins un.", + "formMessageDiffusersVAELocation": "Emplacement VAE", + "formMessageDiffusersVAELocationDesc": "Si non fourni, InvokeAI recherchera le fichier VAE à l'emplacement du modèle donné ci-dessus." + }, + "parameters": { + "images": "Images", + "steps": "Etapes", + "cfgScale": "CFG Echelle", + "width": "Largeur", + "height": "Hauteur", + "seed": "Graine", + "randomizeSeed": "Graine Aléatoire", + "shuffle": "Mélanger", + "noiseThreshold": "Seuil de Bruit", + "perlinNoise": "Bruit de Perlin", + "variations": "Variations", + "variationAmount": "Montant de Variation", + "seedWeights": "Poids des Graines", + "faceRestoration": "Restauration de Visage", + "restoreFaces": "Restaurer les Visages", + "type": "Type", + "strength": "Force", + "upscaling": "Agrandissement", + "upscale": "Agrandir", + "upscaleImage": "Image en Agrandissement", + "scale": "Echelle", + "otherOptions": "Autres Options", + "seamlessTiling": "Carreau Sans Joint", + "hiresOptim": "Optimisation Haute Résolution", + "imageFit": "Ajuster Image Initiale à la Taille de Sortie", + "codeformerFidelity": "Fidélité", + "scaleBeforeProcessing": "Echelle Avant Traitement", + "scaledWidth": "Larg. Échelle", + "scaledHeight": "Haut. Échelle", + "infillMethod": "Méthode de Remplissage", + "tileSize": "Taille des Tuiles", + "boundingBoxHeader": "Boîte Englobante", + "seamCorrectionHeader": "Correction des Joints", + "infillScalingHeader": "Remplissage et Mise à l'Échelle", + "img2imgStrength": "Force de l'Image à l'Image", + "toggleLoopback": "Activer/Désactiver la Boucle", + "sendTo": "Envoyer à", + "sendToImg2Img": "Envoyer à Image à Image", + "sendToUnifiedCanvas": "Envoyer au Canvas Unifié", + "copyImage": "Copier Image", + "copyImageToLink": "Copier l'Image en Lien", + "downloadImage": "Télécharger Image", + "openInViewer": "Ouvrir dans le visualiseur", + "closeViewer": "Fermer le visualiseur", + "usePrompt": "Utiliser la suggestion", + "useSeed": "Utiliser la graine", + "useAll": "Tout utiliser", + "useInitImg": "Utiliser l'image initiale", + "info": "Info", + "initialImage": "Image initiale", + "showOptionsPanel": "Afficher le panneau d'options" + }, + "settings": { + "models": "Modèles", + "displayInProgress": "Afficher les images en cours", + "saveSteps": "Enregistrer les images tous les n étapes", + "confirmOnDelete": "Confirmer la suppression", + "displayHelpIcons": "Afficher les icônes d'aide", + "enableImageDebugging": "Activer le débogage d'image", + "resetWebUI": "Réinitialiser l'interface Web", + "resetWebUIDesc1": "Réinitialiser l'interface Web ne réinitialise que le cache local du navigateur de vos images et de vos paramètres enregistrés. Cela n'efface pas les images du disque.", + "resetWebUIDesc2": "Si les images ne s'affichent pas dans la galerie ou si quelque chose d'autre ne fonctionne pas, veuillez essayer de réinitialiser avant de soumettre une demande sur GitHub.", + "resetComplete": "L'interface Web a été réinitialisée. Rafraîchissez la page pour recharger." + }, + "toast": { + "tempFoldersEmptied": "Dossiers temporaires vidés", + "uploadFailed": "Téléchargement échoué", + "uploadFailedUnableToLoadDesc": "Impossible de charger le fichier", + "downloadImageStarted": "Téléchargement de l'image démarré", + "imageCopied": "Image copiée", + "imageLinkCopied": "Lien d'image copié", + "imageNotLoaded": "Aucune image chargée", + "imageNotLoadedDesc": "Aucune image trouvée pour envoyer à module d'image", + "imageSavedToGallery": "Image enregistrée dans la galerie", + "canvasMerged": "Canvas fusionné", + "sentToImageToImage": "Envoyé à Image à Image", + "sentToUnifiedCanvas": "Envoyé à Canvas unifié", + "parametersSet": "Paramètres définis", + "parametersNotSet": "Paramètres non définis", + "parametersNotSetDesc": "Aucune métadonnée trouvée pour cette image.", + "parametersFailed": "Problème de chargement des paramètres", + "parametersFailedDesc": "Impossible de charger l'image d'initiation.", + "seedSet": "Graine définie", + "seedNotSet": "Graine non définie", + "seedNotSetDesc": "Impossible de trouver la graine pour cette image.", + "promptSet": "Invite définie", + "promptNotSet": "Invite non définie", + "promptNotSetDesc": "Impossible de trouver l'invite pour cette image.", + "upscalingFailed": "Échec de la mise à l'échelle", + "faceRestoreFailed": "Échec de la restauration du visage", + "metadataLoadFailed": "Échec du chargement des métadonnées", + "initialImageSet": "Image initiale définie", + "initialImageNotSet": "Image initiale non définie", + "initialImageNotSetDesc": "Impossible de charger l'image initiale" + }, + "tooltip": { + "feature": { + "prompt": "Ceci est le champ prompt. Le prompt inclut des objets de génération et des termes stylistiques. Vous pouvez également ajouter un poids (importance du jeton) dans le prompt, mais les commandes CLI et les paramètres ne fonctionneront pas.", + "gallery": "La galerie affiche les générations à partir du dossier de sortie à mesure qu'elles sont créées. Les paramètres sont stockés dans des fichiers et accessibles via le menu contextuel.", + "other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img : utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.", + "seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération : les deux servent à ajouter de la variété à vos sorties.", + "variations": "Essayez une variation avec une valeur comprise entre 0,1 et 1,0 pour changer le résultat pour une graine donnée. Des variations intéressantes de la graine sont entre 0,1 et 0,3.", + "upscale": "Utilisez ESRGAN pour agrandir l'image immédiatement après la génération.", + "faceCorrection": "Correction de visage avec GFPGAN ou Codeformer : l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.", + "imageToImage": "Image to Image charge n'importe quelle image en tant qu'initiale, qui est ensuite utilisée pour générer une nouvelle avec le prompt. Plus la valeur est élevée, plus l'image de résultat changera. Des valeurs de 0,0 à 1,0 sont possibles, la plage recommandée est de 0,25 à 0,75", + "boundingBox": "La boîte englobante est la même que les paramètres Largeur et Hauteur pour Texte à Image ou Image à Image. Seulement la zone dans la boîte sera traitée.", + "seamCorrection": "Contrôle la gestion des coutures visibles qui se produisent entre les images générées sur la toile.", + "infillAndScaling": "Gérer les méthodes de remplissage (utilisées sur les zones masquées ou effacées de la toile) et le redimensionnement (utile pour les petites tailles de boîte englobante)." + } + }, + "unifiedCanvas": { + "layer": "Couche", + "base": "Base", + "mask": "Masque", + "maskingOptions": "Options de masquage", + "enableMask": "Activer le masque", + "preserveMaskedArea": "Préserver la zone masquée", + "clearMask": "Effacer le masque", + "brush": "Pinceau", + "eraser": "Gomme", + "fillBoundingBox": "Remplir la boîte englobante", + "eraseBoundingBox": "Effacer la boîte englobante", + "colorPicker": "Sélecteur de couleur", + "brushOptions": "Options de pinceau", + "brushSize": "Taille", + "move": "Déplacer", + "resetView": "Réinitialiser la vue", + "mergeVisible": "Fusionner les visibles", + "saveToGallery": "Enregistrer dans la galerie", + "copyToClipboard": "Copier dans le presse-papiers", + "downloadAsImage": "Télécharger en tant qu'image", + "undo": "Annuler", + "redo": "Refaire", + "clearCanvas": "Effacer le canvas", + "canvasSettings": "Paramètres du canvas", + "showIntermediates": "Afficher les intermédiaires", + "showGrid": "Afficher la grille", + "snapToGrid": "Aligner sur la grille", + "darkenOutsideSelection": "Assombrir à l'extérieur de la sélection", + "autoSaveToGallery": "Enregistrement automatique dans la galerie", + "saveBoxRegionOnly": "Enregistrer uniquement la région de la boîte", + "limitStrokesToBox": "Limiter les traits à la boîte", + "showCanvasDebugInfo": "Afficher les informations de débogage du canvas", + "clearCanvasHistory": "Effacer l'historique du canvas", + "clearHistory": "Effacer l'historique", + "clearCanvasHistoryMessage": "Effacer l'historique du canvas laisse votre canvas actuel intact, mais efface de manière irréversible l'historique annuler et refaire.", + "clearCanvasHistoryConfirm": "Voulez-vous vraiment effacer l'historique du canvas ?", + "emptyTempImageFolder": "Vider le dossier d'images temporaires", + "emptyFolder": "Vider le dossier", + "emptyTempImagesFolderMessage": "Vider le dossier d'images temporaires réinitialise également complètement le canvas unifié. Cela inclut tout l'historique annuler/refaire, les images dans la zone de mise en attente et la couche de base du canvas.", + "emptyTempImagesFolderConfirm": "Voulez-vous vraiment vider le dossier temporaire ?", + "activeLayer": "Calque actif", + "canvasScale": "Échelle du canevas", + "boundingBox": "Boîte englobante", + "scaledBoundingBox": "Boîte englobante mise à l'échelle", + "boundingBoxPosition": "Position de la boîte englobante", + "canvasDimensions": "Dimensions du canevas", + "canvasPosition": "Position du canevas", + "cursorPosition": "Position du curseur", + "previous": "Précédent", + "next": "Suivant", + "accept": "Accepter", + "showHide": "Afficher/Masquer", + "discardAll": "Tout abandonner", + "betaClear": "Effacer", + "betaDarkenOutside": "Assombrir à l'extérieur", + "betaLimitToBox": "Limiter à la boîte", + "betaPreserveMasked": "Conserver masqué" + }, + "accessibility": { + "uploadImage": "Charger une image", + "reset": "Réinitialiser", + "nextImage": "Image suivante", + "previousImage": "Image précédente", + "useThisParameter": "Utiliser ce paramètre", + "zoomIn": "Zoom avant", + "zoomOut": "Zoom arrière", + "showOptionsPanel": "Montrer la page d'options", + "modelSelect": "Choix du modèle", + "invokeProgressBar": "Barre de Progression Invoke", + "copyMetadataJson": "Copie des métadonnées JSON", + "menu": "Menu" + } +} diff --git a/invokeai/frontend/web/dist/locales/he.json b/invokeai/frontend/web/dist/locales/he.json new file mode 100644 index 0000000000..dfb5ea0360 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/he.json @@ -0,0 +1,575 @@ +{ + "modelManager": { + "cannotUseSpaces": "לא ניתן להשתמש ברווחים", + "addNew": "הוסף חדש", + "vaeLocationValidationMsg": "נתיב למקום שבו ממוקם ה- VAE שלך.", + "height": "גובה", + "load": "טען", + "search": "חיפוש", + "heightValidationMsg": "גובה ברירת המחדל של המודל שלך.", + "addNewModel": "הוסף מודל חדש", + "allModels": "כל המודלים", + "checkpointModels": "נקודות ביקורת", + "diffusersModels": "מפזרים", + "safetensorModels": "טנסורים בטוחים", + "modelAdded": "מודל התווסף", + "modelUpdated": "מודל עודכן", + "modelEntryDeleted": "רשומת המודל נמחקה", + "addCheckpointModel": "הוסף נקודת ביקורת / מודל טנסור בטוח", + "addDiffuserModel": "הוסף מפזרים", + "addManually": "הוספה ידנית", + "manual": "ידני", + "name": "שם", + "description": "תיאור", + "descriptionValidationMsg": "הוסף תיאור למודל שלך", + "config": "תצורה", + "configValidationMsg": "נתיב לקובץ התצורה של המודל שלך.", + "modelLocation": "מיקום המודל", + "modelLocationValidationMsg": "נתיב למקום שבו המודל שלך ממוקם באופן מקומי.", + "repo_id": "מזהה מאגר", + "repoIDValidationMsg": "מאגר מקוון של המודל שלך", + "vaeLocation": "מיקום VAE", + "vaeRepoIDValidationMsg": "המאגר המקוון של VAE שלך", + "width": "רוחב", + "widthValidationMsg": "רוחב ברירת המחדל של המודל שלך.", + "addModel": "הוסף מודל", + "updateModel": "עדכן מודל", + "active": "פעיל", + "modelsFound": "מודלים נמצאו", + "cached": "נשמר במטמון", + "checkpointFolder": "תיקיית נקודות ביקורת", + "findModels": "מצא מודלים", + "scanAgain": "סרוק מחדש", + "selectFolder": "בחירת תיקייה", + "selected": "נבחר", + "selectAll": "בחר הכל", + "deselectAll": "ביטול בחירת הכל", + "showExisting": "הצג קיים", + "addSelected": "הוסף פריטים שנבחרו", + "modelExists": "המודל קיים", + "selectAndAdd": "בחר והוסך מודלים המפורטים להלן", + "deleteModel": "מחיקת מודל", + "deleteConfig": "מחיקת תצורה", + "formMessageDiffusersModelLocation": "מיקום מפזרי המודל", + "formMessageDiffusersModelLocationDesc": "נא להזין לפחות אחד.", + "convertToDiffusersHelpText5": "אנא ודא/י שיש לך מספיק מקום בדיסק. גדלי מודלים בדרך כלל הינם בין 4GB-7GB.", + "convertToDiffusersHelpText1": "מודל זה יומר לפורמט 🧨 המפזרים.", + "convertToDiffusersHelpText2": "תהליך זה יחליף את הרשומה של מנהל המודלים שלך בגרסת המפזרים של אותו המודל.", + "convertToDiffusersHelpText6": "האם ברצונך להמיר מודל זה?", + "convertToDiffusersSaveLocation": "שמירת מיקום", + "inpainting": "v1 צביעת תוך", + "statusConverting": "ממיר", + "modelConverted": "מודל הומר", + "sameFolder": "אותה תיקיה", + "custom": "התאמה אישית", + "merge": "מזג", + "modelsMerged": "מודלים מוזגו", + "mergeModels": "מזג מודלים", + "modelOne": "מודל 1", + "customSaveLocation": "מיקום שמירה מותאם אישית", + "alpha": "אלפא", + "mergedModelSaveLocation": "שמירת מיקום", + "mergedModelCustomSaveLocation": "נתיב מותאם אישית", + "ignoreMismatch": "התעלמות מאי-התאמות בין מודלים שנבחרו", + "modelMergeHeaderHelp1": "ניתן למזג עד שלושה מודלים שונים כדי ליצור שילוב שמתאים לצרכים שלכם.", + "modelMergeAlphaHelp": "אלפא שולט בחוזק מיזוג עבור המודלים. ערכי אלפא נמוכים יותר מובילים להשפעה נמוכה יותר של המודל השני.", + "nameValidationMsg": "הכנס שם למודל שלך", + "vaeRepoID": "מזהה מאגר ה VAE", + "modelManager": "מנהל המודלים", + "model": "מודל", + "availableModels": "מודלים זמינים", + "notLoaded": "לא נטען", + "clearCheckpointFolder": "נקה את תיקיית נקודות הביקורת", + "noModelsFound": "לא נמצאו מודלים", + "delete": "מחיקה", + "deleteMsg1": "האם אתה בטוח שברצונך למחוק רשומת מודל זו מ- InvokeAI?", + "deleteMsg2": "פעולה זו לא תמחק את קובץ נקודת הביקורת מהדיסק שלך. ניתן לקרוא אותם מחדש במידת הצורך.", + "formMessageDiffusersVAELocation": "מיקום VAE", + "formMessageDiffusersVAELocationDesc": "במידה ולא מסופק, InvokeAI תחפש את קובץ ה-VAE במיקום המודל המופיע לעיל.", + "convertToDiffusers": "המרה למפזרים", + "convert": "המרה", + "modelTwo": "מודל 2", + "modelThree": "מודל 3", + "mergedModelName": "שם מודל ממוזג", + "v1": "v1", + "invokeRoot": "תיקיית InvokeAI", + "customConfig": "תצורה מותאמת אישית", + "pathToCustomConfig": "נתיב לתצורה מותאמת אישית", + "interpolationType": "סוג אינטרפולציה", + "invokeAIFolder": "תיקיית InvokeAI", + "sigmoid": "סיגמואיד", + "weightedSum": "סכום משוקלל", + "modelMergeHeaderHelp2": "רק מפזרים זמינים למיזוג. אם ברצונך למזג מודל של נקודת ביקורת, המר אותו תחילה למפזרים.", + "inverseSigmoid": "הפוך סיגמואיד", + "convertToDiffusersHelpText3": "קובץ נקודת הביקורת שלך בדיסק לא יימחק או ישונה בכל מקרה. אתה יכול להוסיף את נקודת הביקורת שלך למנהל המודלים שוב אם תרצה בכך.", + "convertToDiffusersHelpText4": "זהו תהליך חד פעמי בלבד. התהליך עשוי לקחת בסביבות 30-60 שניות, תלוי במפרט המחשב שלך.", + "modelMergeInterpAddDifferenceHelp": "במצב זה, מודל 3 מופחת תחילה ממודל 2. הגרסה המתקבלת משולבת עם מודל 1 עם קצב האלפא שנקבע לעיל." + }, + "common": { + "nodesDesc": "מערכת מבוססת צמתים עבור יצירת תמונות עדיין תחת פיתוח. השארו קשובים לעדכונים עבור הפיצ׳ר המדהים הזה.", + "languagePickerLabel": "בחירת שפה", + "githubLabel": "גיטהאב", + "discordLabel": "דיסקורד", + "settingsLabel": "הגדרות", + "langEnglish": "אנגלית", + "langDutch": "הולנדית", + "langArabic": "ערבית", + "langFrench": "צרפתית", + "langGerman": "גרמנית", + "langJapanese": "יפנית", + "langBrPortuguese": "פורטוגזית", + "langRussian": "רוסית", + "langSimplifiedChinese": "סינית", + "langUkranian": "אוקראינית", + "langSpanish": "ספרדית", + "img2img": "תמונה לתמונה", + "unifiedCanvas": "קנבס מאוחד", + "nodes": "צמתים", + "postProcessing": "לאחר עיבוד", + "postProcessDesc2": "תצוגה ייעודית תשוחרר בקרוב על מנת לתמוך בתהליכים ועיבודים מורכבים.", + "postProcessDesc3": "ממשק שורת הפקודה של Invoke AI מציע תכונות שונות אחרות כולל Embiggen.", + "close": "סגירה", + "statusConnected": "מחובר", + "statusDisconnected": "מנותק", + "statusError": "שגיאה", + "statusPreparing": "בהכנה", + "statusProcessingCanceled": "עיבוד בוטל", + "statusProcessingComplete": "עיבוד הסתיים", + "statusGenerating": "מייצר", + "statusGeneratingTextToImage": "מייצר טקסט לתמונה", + "statusGeneratingImageToImage": "מייצר תמונה לתמונה", + "statusGeneratingInpainting": "מייצר ציור לתוך", + "statusGeneratingOutpainting": "מייצר ציור החוצה", + "statusIterationComplete": "איטרציה הסתיימה", + "statusRestoringFaces": "משחזר פרצופים", + "statusRestoringFacesCodeFormer": "משחזר פרצופים (CodeFormer)", + "statusUpscaling": "העלאת קנה מידה", + "statusUpscalingESRGAN": "העלאת קנה מידה (ESRGAN)", + "statusModelChanged": "מודל השתנה", + "statusConvertingModel": "ממיר מודל", + "statusModelConverted": "מודל הומר", + "statusMergingModels": "מיזוג מודלים", + "statusMergedModels": "מודלים מוזגו", + "hotkeysLabel": "מקשים חמים", + "reportBugLabel": "דווח באג", + "langItalian": "איטלקית", + "upload": "העלאה", + "langPolish": "פולנית", + "training": "אימון", + "load": "טעינה", + "back": "אחורה", + "statusSavingImage": "שומר תמונה", + "statusGenerationComplete": "ייצור הסתיים", + "statusRestoringFacesGFPGAN": "משחזר פרצופים (GFPGAN)", + "statusLoadingModel": "טוען מודל", + "trainingDesc2": "InvokeAI כבר תומך באימון הטמעות מותאמות אישית באמצעות היפוך טקסט באמצעות הסקריפט הראשי.", + "postProcessDesc1": "InvokeAI מציעה מגוון רחב של תכונות עיבוד שלאחר. העלאת קנה מידה של תמונה ושחזור פנים כבר זמינים בממשק המשתמש. ניתן לגשת אליהם מתפריט 'אפשרויות מתקדמות' בכרטיסיות 'טקסט לתמונה' ו'תמונה לתמונה'. ניתן גם לעבד תמונות ישירות, באמצעות לחצני הפעולה של התמונה מעל תצוגת התמונה הנוכחית או בתוך המציג.", + "trainingDesc1": "תהליך עבודה ייעודי לאימון ההטמעות ונקודות הביקורת שלך באמצעות היפוך טקסט ו-Dreambooth מממשק המשתמש." + }, + "hotkeys": { + "toggleGallery": { + "desc": "פתח וסגור את מגירת הגלריה", + "title": "הצג את הגלריה" + }, + "keyboardShortcuts": "קיצורי מקלדת", + "appHotkeys": "קיצורי אפליקציה", + "generalHotkeys": "קיצורי דרך כלליים", + "galleryHotkeys": "קיצורי דרך של הגלריה", + "unifiedCanvasHotkeys": "קיצורי דרך לקנבס המאוחד", + "invoke": { + "title": "הפעל", + "desc": "צור תמונה" + }, + "focusPrompt": { + "title": "התמקדות על הבקשה", + "desc": "התמקדות על איזור הקלדת הבקשה" + }, + "toggleOptions": { + "desc": "פתח וסגור את פאנל ההגדרות", + "title": "הצג הגדרות" + }, + "pinOptions": { + "title": "הצמד הגדרות", + "desc": "הצמד את פאנל ההגדרות" + }, + "toggleViewer": { + "title": "הצג את חלון ההצגה", + "desc": "פתח וסגור את מציג התמונות" + }, + "changeTabs": { + "title": "החלף לשוניות", + "desc": "החלף לאיזור עבודה אחר" + }, + "consoleToggle": { + "desc": "פתח וסגור את הקונסול", + "title": "הצג קונסול" + }, + "setPrompt": { + "title": "הגדרת בקשה", + "desc": "שימוש בבקשה של התמונה הנוכחית" + }, + "restoreFaces": { + "desc": "שחזור התמונה הנוכחית", + "title": "שחזור פרצופים" + }, + "upscale": { + "title": "הגדלת קנה מידה", + "desc": "הגדל את התמונה הנוכחית" + }, + "showInfo": { + "title": "הצג מידע", + "desc": "הצגת פרטי מטא-נתונים של התמונה הנוכחית" + }, + "sendToImageToImage": { + "title": "שלח לתמונה לתמונה", + "desc": "שלח תמונה נוכחית לתמונה לתמונה" + }, + "deleteImage": { + "title": "מחק תמונה", + "desc": "מחק את התמונה הנוכחית" + }, + "closePanels": { + "title": "סגור לוחות", + "desc": "סוגר לוחות פתוחים" + }, + "previousImage": { + "title": "תמונה קודמת", + "desc": "הצג את התמונה הקודמת בגלריה" + }, + "toggleGalleryPin": { + "title": "הצג את מצמיד הגלריה", + "desc": "הצמדה וביטול הצמדה של הגלריה לממשק המשתמש" + }, + "decreaseGalleryThumbSize": { + "title": "הקטנת גודל תמונת גלריה", + "desc": "מקטין את גודל התמונות הממוזערות של הגלריה" + }, + "selectBrush": { + "desc": "בוחר את מברשת הקנבס", + "title": "בחר מברשת" + }, + "selectEraser": { + "title": "בחר מחק", + "desc": "בוחר את מחק הקנבס" + }, + "decreaseBrushSize": { + "title": "הקטנת גודל המברשת", + "desc": "מקטין את גודל מברשת הקנבס/מחק" + }, + "increaseBrushSize": { + "desc": "מגדיל את גודל מברשת הקנבס/מחק", + "title": "הגדלת גודל המברשת" + }, + "decreaseBrushOpacity": { + "title": "הפחת את אטימות המברשת", + "desc": "מקטין את האטימות של מברשת הקנבס" + }, + "increaseBrushOpacity": { + "title": "הגדל את אטימות המברשת", + "desc": "מגביר את האטימות של מברשת הקנבס" + }, + "moveTool": { + "title": "כלי הזזה", + "desc": "מאפשר ניווט על קנבס" + }, + "fillBoundingBox": { + "desc": "ממלא את התיבה התוחמת בצבע מברשת", + "title": "מילוי תיבה תוחמת" + }, + "eraseBoundingBox": { + "desc": "מוחק את אזור התיבה התוחמת", + "title": "מחק תיבה תוחמת" + }, + "colorPicker": { + "title": "בחר בבורר צבעים", + "desc": "בוחר את בורר צבעי הקנבס" + }, + "toggleSnap": { + "title": "הפעל הצמדה", + "desc": "מפעיל הצמדה לרשת" + }, + "quickToggleMove": { + "title": "הפעלה מהירה להזזה", + "desc": "מפעיל זמנית את מצב ההזזה" + }, + "toggleLayer": { + "title": "הפעל שכבה", + "desc": "הפעל בחירת שכבת בסיס/מסיכה" + }, + "clearMask": { + "title": "נקה מסיכה", + "desc": "נקה את כל המסכה" + }, + "hideMask": { + "desc": "הסתרה והצגה של מסיכה", + "title": "הסתר מסיכה" + }, + "showHideBoundingBox": { + "title": "הצגה/הסתרה של תיבה תוחמת", + "desc": "הפעל תצוגה של התיבה התוחמת" + }, + "mergeVisible": { + "title": "מיזוג תוכן גלוי", + "desc": "מיזוג כל השכבות הגלויות של הקנבס" + }, + "saveToGallery": { + "title": "שמור לגלריה", + "desc": "שמור את הקנבס הנוכחי בגלריה" + }, + "copyToClipboard": { + "title": "העתק ללוח ההדבקה", + "desc": "העתק את הקנבס הנוכחי ללוח ההדבקה" + }, + "downloadImage": { + "title": "הורד תמונה", + "desc": "הורד את הקנבס הנוכחי" + }, + "undoStroke": { + "title": "בטל משיכה", + "desc": "בטל משיכת מברשת" + }, + "redoStroke": { + "title": "בצע שוב משיכה", + "desc": "ביצוע מחדש של משיכת מברשת" + }, + "resetView": { + "title": "איפוס תצוגה", + "desc": "אפס תצוגת קנבס" + }, + "previousStagingImage": { + "desc": "תמונת אזור ההערכות הקודמת", + "title": "תמונת הערכות קודמת" + }, + "nextStagingImage": { + "title": "תמנות הערכות הבאה", + "desc": "תמונת אזור ההערכות הבאה" + }, + "acceptStagingImage": { + "desc": "אשר את תמונת איזור ההערכות הנוכחית", + "title": "אשר תמונת הערכות" + }, + "cancel": { + "desc": "ביטול יצירת תמונה", + "title": "ביטול" + }, + "maximizeWorkSpace": { + "title": "מקסם את איזור העבודה", + "desc": "סגור פאנלים ומקסם את איזור העבודה" + }, + "setSeed": { + "title": "הגדר זרע", + "desc": "השתמש בזרע התמונה הנוכחית" + }, + "setParameters": { + "title": "הגדרת פרמטרים", + "desc": "שימוש בכל הפרמטרים של התמונה הנוכחית" + }, + "increaseGalleryThumbSize": { + "title": "הגדל את גודל תמונת הגלריה", + "desc": "מגדיל את התמונות הממוזערות של הגלריה" + }, + "nextImage": { + "title": "תמונה הבאה", + "desc": "הצג את התמונה הבאה בגלריה" + } + }, + "gallery": { + "uploads": "העלאות", + "galleryImageSize": "גודל תמונה", + "gallerySettings": "הגדרות גלריה", + "maintainAspectRatio": "שמור על יחס רוחב-גובה", + "autoSwitchNewImages": "החלף אוטומטית לתמונות חדשות", + "singleColumnLayout": "תצוגת עמודה אחת", + "allImagesLoaded": "כל התמונות נטענו", + "loadMore": "טען עוד", + "noImagesInGallery": "אין תמונות בגלריה", + "galleryImageResetSize": "איפוס גודל", + "generations": "דורות", + "showGenerations": "הצג דורות", + "showUploads": "הצג העלאות" + }, + "parameters": { + "images": "תמונות", + "steps": "צעדים", + "cfgScale": "סולם CFG", + "width": "רוחב", + "height": "גובה", + "seed": "זרע", + "imageToImage": "תמונה לתמונה", + "randomizeSeed": "זרע אקראי", + "variationAmount": "כמות וריאציה", + "seedWeights": "משקלי זרע", + "faceRestoration": "שחזור פנים", + "restoreFaces": "שחזר פנים", + "type": "סוג", + "strength": "חוזק", + "upscale": "הגדלת קנה מידה", + "upscaleImage": "הגדלת קנה מידת התמונה", + "denoisingStrength": "חוזק מנטרל הרעש", + "otherOptions": "אפשרויות אחרות", + "hiresOptim": "אופטימיזצית רזולוציה גבוהה", + "hiresStrength": "חוזק רזולוציה גבוהה", + "codeformerFidelity": "דבקות", + "scaleBeforeProcessing": "שנה קנה מידה לפני עיבוד", + "scaledWidth": "קנה מידה לאחר שינוי W", + "scaledHeight": "קנה מידה לאחר שינוי H", + "infillMethod": "שיטת מילוי", + "tileSize": "גודל אריח", + "boundingBoxHeader": "תיבה תוחמת", + "seamCorrectionHeader": "תיקון תפר", + "infillScalingHeader": "מילוי וקנה מידה", + "toggleLoopback": "הפעל לולאה חוזרת", + "symmetry": "סימטריה", + "vSymmetryStep": "צעד סימטריה V", + "hSymmetryStep": "צעד סימטריה H", + "cancel": { + "schedule": "ביטול לאחר האיטרציה הנוכחית", + "isScheduled": "מבטל", + "immediate": "ביטול מיידי", + "setType": "הגדר סוג ביטול" + }, + "sendTo": "שליחה אל", + "copyImage": "העתקת תמונה", + "downloadImage": "הורדת תמונה", + "sendToImg2Img": "שליחה לתמונה לתמונה", + "sendToUnifiedCanvas": "שליחה אל קנבס מאוחד", + "openInViewer": "פתח במציג", + "closeViewer": "סגור מציג", + "usePrompt": "שימוש בבקשה", + "useSeed": "שימוש בזרע", + "useAll": "שימוש בהכל", + "useInitImg": "שימוש בתמונה ראשונית", + "info": "פרטים", + "showOptionsPanel": "הצג חלונית אפשרויות", + "shuffle": "ערבוב", + "noiseThreshold": "סף רעש", + "perlinNoise": "רעש פרלין", + "variations": "וריאציות", + "imageFit": "התאמת תמונה ראשונית לגודל הפלט", + "general": "כללי", + "upscaling": "מגדיל את קנה מידה", + "scale": "סולם", + "seamlessTiling": "ריצוף חלק", + "img2imgStrength": "חוזק תמונה לתמונה", + "initialImage": "תמונה ראשונית", + "copyImageToLink": "העתקת תמונה לקישור" + }, + "settings": { + "models": "מודלים", + "displayInProgress": "הצגת תמונות בתהליך", + "confirmOnDelete": "אישור בעת המחיקה", + "useSlidersForAll": "שימוש במחוונים לכל האפשרויות", + "resetWebUI": "איפוס ממשק משתמש", + "resetWebUIDesc1": "איפוס ממשק המשתמש האינטרנטי מאפס רק את המטמון המקומי של הדפדפן של התמונות וההגדרות שנשמרו. זה לא מוחק תמונות מהדיסק.", + "resetComplete": "ממשק המשתמש אופס. יש לבצע רענון דף בכדי לטעון אותו מחדש.", + "enableImageDebugging": "הפעלת איתור באגים בתמונה", + "displayHelpIcons": "הצג סמלי עזרה", + "saveSteps": "שמירת תמונות כל n צעדים", + "resetWebUIDesc2": "אם תמונות לא מופיעות בגלריה או שמשהו אחר לא עובד, נא לנסות איפוס /או אתחול לפני שליחת תקלה ב-GitHub." + }, + "toast": { + "uploadFailed": "העלאה נכשלה", + "imageCopied": "התמונה הועתקה", + "imageLinkCopied": "קישור תמונה הועתק", + "imageNotLoadedDesc": "לא נמצאה תמונה לשליחה למודול תמונה לתמונה", + "imageSavedToGallery": "התמונה נשמרה בגלריה", + "canvasMerged": "קנבס מוזג", + "sentToImageToImage": "נשלח לתמונה לתמונה", + "sentToUnifiedCanvas": "נשלח אל קנבס מאוחד", + "parametersSet": "הגדרת פרמטרים", + "parametersNotSet": "פרמטרים לא הוגדרו", + "parametersNotSetDesc": "לא נמצאו מטא-נתונים עבור תמונה זו.", + "parametersFailedDesc": "לא ניתן לטעון תמונת התחלה.", + "seedSet": "זרע הוגדר", + "seedNotSetDesc": "לא ניתן היה למצוא זרע לתמונה זו.", + "promptNotSetDesc": "לא היתה אפשרות למצוא בקשה עבור תמונה זו.", + "metadataLoadFailed": "טעינת מטא-נתונים נכשלה", + "initialImageSet": "סט תמונה ראשוני", + "initialImageNotSet": "התמונה הראשונית לא הוגדרה", + "initialImageNotSetDesc": "לא ניתן היה לטעון את התמונה הראשונית", + "uploadFailedUnableToLoadDesc": "לא ניתן לטעון את הקובץ", + "tempFoldersEmptied": "התיקייה הזמנית רוקנה", + "downloadImageStarted": "הורדת התמונה החלה", + "imageNotLoaded": "לא נטענה תמונה", + "parametersFailed": "בעיה בטעינת פרמטרים", + "promptNotSet": "בקשה לא הוגדרה", + "upscalingFailed": "העלאת קנה המידה נכשלה", + "faceRestoreFailed": "שחזור הפנים נכשל", + "seedNotSet": "זרע לא הוגדר", + "promptSet": "בקשה הוגדרה" + }, + "tooltip": { + "feature": { + "gallery": "הגלריה מציגה יצירות מתיקיית הפלטים בעת יצירתם. ההגדרות מאוחסנות בתוך קבצים ונגישות באמצעות תפריט הקשר.", + "upscale": "השתמש ב-ESRGAN כדי להגדיל את התמונה מיד לאחר היצירה.", + "imageToImage": "תמונה לתמונה טוענת כל תמונה כראשונית, המשמשת לאחר מכן ליצירת תמונה חדשה יחד עם הבקשה. ככל שהערך גבוה יותר, כך תמונת התוצאה תשתנה יותר. ערכים מ- 0.0 עד 1.0 אפשריים, הטווח המומלץ הוא .25-.75", + "seamCorrection": "שליטה בטיפול בתפרים גלויים המתרחשים בין תמונות שנוצרו על בד הציור.", + "prompt": "זהו שדה הבקשה. הבקשה כוללת אובייקטי יצירה ומונחים סגנוניים. באפשרותך להוסיף משקל (חשיבות אסימון) גם בשורת הפקודה, אך פקודות ופרמטרים של CLI לא יפעלו.", + "variations": "נסה וריאציה עם ערך בין 0.1 ל- 1.0 כדי לשנות את התוצאה עבור זרע נתון. וריאציות מעניינות של הזרע הן בין 0.1 ל -0.3.", + "other": "אפשרויות אלה יאפשרו מצבי עיבוד חלופיים עבור ההרצה. 'ריצוף חלק' ייצור תבניות חוזרות בפלט. 'רזולוציה גבוהה' נוצר בשני שלבים עם img2img: השתמש בהגדרה זו כאשר אתה רוצה תמונה גדולה וקוהרנטית יותר ללא חפצים. פעולה זאת תקח יותר זמן מפעולת טקסט לתמונה רגילה.", + "faceCorrection": "תיקון פנים עם GFPGAN או Codeformer: האלגוריתם מזהה פרצופים בתמונה ומתקן כל פגם. ערך גבוה ישנה את התמונה יותר, וכתוצאה מכך הפרצופים יהיו אטרקטיביים יותר. Codeformer עם נאמנות גבוהה יותר משמר את התמונה המקורית על חשבון תיקון פנים חזק יותר.", + "seed": "ערך הזרע משפיע על הרעש הראשוני שממנו נוצרת התמונה. אתה יכול להשתמש בזרעים שכבר קיימים מתמונות קודמות. 'סף רעש' משמש להפחתת חפצים בערכי CFG גבוהים (נסה את טווח 0-10), ופרלין כדי להוסיף רעשי פרלין במהלך היצירה: שניהם משמשים להוספת וריאציה לתפוקות שלך.", + "infillAndScaling": "נהל שיטות מילוי (המשמשות באזורים עם מסיכה או אזורים שנמחקו בבד הציור) ושינוי קנה מידה (שימושי לגדלים קטנים של תיבות תוחמות).", + "boundingBox": "התיבה התוחמת זהה להגדרות 'רוחב' ו'גובה' עבור 'טקסט לתמונה' או 'תמונה לתמונה'. רק האזור בתיבה יעובד." + } + }, + "unifiedCanvas": { + "layer": "שכבה", + "base": "בסיס", + "maskingOptions": "אפשרויות מסכות", + "enableMask": "הפעלת מסיכה", + "colorPicker": "בוחר הצבעים", + "preserveMaskedArea": "שימור איזור ממוסך", + "clearMask": "ניקוי מסיכה", + "brush": "מברשת", + "eraser": "מחק", + "fillBoundingBox": "מילוי תיבה תוחמת", + "eraseBoundingBox": "מחק תיבה תוחמת", + "copyToClipboard": "העתק ללוח ההדבקה", + "downloadAsImage": "הורדה כתמונה", + "undo": "ביטול", + "redo": "ביצוע מחדש", + "clearCanvas": "ניקוי קנבס", + "showGrid": "הצגת רשת", + "snapToGrid": "הצמדה לרשת", + "darkenOutsideSelection": "הכהיית בחירה חיצונית", + "saveBoxRegionOnly": "שמירת איזור תיבה בלבד", + "limitStrokesToBox": "הגבלת משיכות לקופסא", + "showCanvasDebugInfo": "הצגת מידע איתור באגים בקנבס", + "clearCanvasHistory": "ניקוי הסטוריית קנבס", + "clearHistory": "ניקוי היסטוריה", + "clearCanvasHistoryConfirm": "האם את/ה בטוח/ה שברצונך לנקות את היסטוריית הקנבס?", + "emptyFolder": "ריקון תיקייה", + "emptyTempImagesFolderConfirm": "האם את/ה בטוח/ה שברצונך לרוקן את התיקיה הזמנית?", + "activeLayer": "שכבה פעילה", + "canvasScale": "קנה מידה של קנבס", + "betaLimitToBox": "הגבל לקופסא", + "betaDarkenOutside": "הכההת הבחוץ", + "canvasDimensions": "מידות קנבס", + "previous": "הקודם", + "next": "הבא", + "accept": "אישור", + "showHide": "הצג/הסתר", + "discardAll": "בטל הכל", + "betaClear": "איפוס", + "boundingBox": "תיבה תוחמת", + "scaledBoundingBox": "תיבה תוחמת לאחר שינוי קנה מידה", + "betaPreserveMasked": "שמר מסיכה", + "brushOptions": "אפשרויות מברשת", + "brushSize": "גודל", + "mergeVisible": "מיזוג תוכן גלוי", + "move": "הזזה", + "resetView": "איפוס תצוגה", + "saveToGallery": "שמור לגלריה", + "canvasSettings": "הגדרות קנבס", + "showIntermediates": "הצגת מתווכים", + "autoSaveToGallery": "שמירה אוטומטית בגלריה", + "emptyTempImageFolder": "ריקון תיקיית תמונות זמניות", + "clearCanvasHistoryMessage": "ניקוי היסטוריית הקנבס משאיר את הקנבס הנוכחי ללא שינוי, אך מנקה באופן בלתי הפיך את היסטוריית הביטול והביצוע מחדש.", + "emptyTempImagesFolderMessage": "ריקון תיקיית התמונה הזמנית גם מאפס באופן מלא את הקנבס המאוחד. זה כולל את כל היסטוריית הביטול/ביצוע מחדש, תמונות באזור ההערכות ושכבת הבסיס של בד הציור.", + "boundingBoxPosition": "מיקום תיבה תוחמת", + "canvasPosition": "מיקום קנבס", + "cursorPosition": "מיקום הסמן", + "mask": "מסכה" + } +} diff --git a/invokeai/frontend/web/dist/locales/it.json b/invokeai/frontend/web/dist/locales/it.json new file mode 100644 index 0000000000..8c4b548f07 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/it.json @@ -0,0 +1,1645 @@ +{ + "common": { + "hotkeysLabel": "Tasti di scelta rapida", + "languagePickerLabel": "Lingua", + "reportBugLabel": "Segnala un errore", + "settingsLabel": "Impostazioni", + "img2img": "Immagine a Immagine", + "unifiedCanvas": "Tela unificata", + "nodes": "Editor del flusso di lavoro", + "langItalian": "Italiano", + "nodesDesc": "Attualmente è in fase di sviluppo un sistema basato su nodi per la generazione di immagini. Resta sintonizzato per gli aggiornamenti su questa fantastica funzionalità.", + "postProcessing": "Post-elaborazione", + "postProcessDesc1": "Invoke AI offre un'ampia varietà di funzionalità di post-elaborazione. Ampliamento Immagine e Restaura Volti sono già disponibili nell'interfaccia Web. È possibile accedervi dal menu 'Opzioni avanzate' delle schede 'Testo a Immagine' e 'Immagine a Immagine'. È inoltre possibile elaborare le immagini direttamente, utilizzando i pulsanti di azione dell'immagine sopra la visualizzazione dell'immagine corrente o nel visualizzatore.", + "postProcessDesc2": "Presto verrà rilasciata un'interfaccia utente dedicata per facilitare flussi di lavoro di post-elaborazione più avanzati.", + "postProcessDesc3": "L'interfaccia da riga di comando di 'Invoke AI' offre varie altre funzionalità tra cui Embiggen.", + "training": "Addestramento", + "trainingDesc1": "Un flusso di lavoro dedicato per addestrare i tuoi Incorporamenti e Checkpoint utilizzando Inversione Testuale e Dreambooth dall'interfaccia web.", + "trainingDesc2": "InvokeAI supporta già l'addestramento di incorporamenti personalizzati utilizzando l'inversione testuale tramite lo script principale.", + "upload": "Caricamento", + "close": "Chiudi", + "load": "Carica", + "back": "Indietro", + "statusConnected": "Collegato", + "statusDisconnected": "Disconnesso", + "statusError": "Errore", + "statusPreparing": "Preparazione", + "statusProcessingCanceled": "Elaborazione annullata", + "statusProcessingComplete": "Elaborazione completata", + "statusGenerating": "Generazione in corso", + "statusGeneratingTextToImage": "Generazione Testo a Immagine", + "statusGeneratingImageToImage": "Generazione da Immagine a Immagine", + "statusGeneratingInpainting": "Generazione Inpainting", + "statusGeneratingOutpainting": "Generazione Outpainting", + "statusGenerationComplete": "Generazione completata", + "statusIterationComplete": "Iterazione completata", + "statusSavingImage": "Salvataggio dell'immagine", + "statusRestoringFaces": "Restaura volti", + "statusRestoringFacesGFPGAN": "Restaura volti (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restaura volti (CodeFormer)", + "statusUpscaling": "Ampliamento", + "statusUpscalingESRGAN": "Ampliamento (ESRGAN)", + "statusLoadingModel": "Caricamento del modello", + "statusModelChanged": "Modello cambiato", + "githubLabel": "GitHub", + "discordLabel": "Discord", + "langArabic": "Arabo", + "langEnglish": "Inglese", + "langFrench": "Francese", + "langGerman": "Tedesco", + "langJapanese": "Giapponese", + "langPolish": "Polacco", + "langBrPortuguese": "Portoghese Basiliano", + "langRussian": "Russo", + "langUkranian": "Ucraino", + "langSpanish": "Spagnolo", + "statusMergingModels": "Fusione Modelli", + "statusMergedModels": "Modelli fusi", + "langSimplifiedChinese": "Cinese semplificato", + "langDutch": "Olandese", + "statusModelConverted": "Modello Convertito", + "statusConvertingModel": "Conversione Modello", + "langKorean": "Coreano", + "langPortuguese": "Portoghese", + "loading": "Caricamento in corso", + "langHebrew": "Ebraico", + "loadingInvokeAI": "Caricamento Invoke AI", + "postprocessing": "Post Elaborazione", + "txt2img": "Testo a Immagine", + "accept": "Accetta", + "cancel": "Annulla", + "linear": "Lineare", + "generate": "Genera", + "random": "Casuale", + "openInNewTab": "Apri in una nuova scheda", + "areYouSure": "Sei sicuro?", + "dontAskMeAgain": "Non chiedermelo più", + "imagePrompt": "Prompt Immagine", + "darkMode": "Modalità scura", + "lightMode": "Modalità chiara", + "batch": "Gestione Lotto", + "modelManager": "Gestore modello", + "communityLabel": "Comunità", + "nodeEditor": "Editor dei nodi", + "statusProcessing": "Elaborazione in corso", + "advanced": "Avanzate", + "imageFailedToLoad": "Impossibile caricare l'immagine", + "learnMore": "Per saperne di più", + "ipAdapter": "Adattatore IP", + "t2iAdapter": "Adattatore T2I", + "controlAdapter": "Adattatore di Controllo", + "controlNet": "ControlNet", + "auto": "Automatico", + "simple": "Semplice", + "details": "Dettagli", + "format": "formato", + "unknown": "Sconosciuto", + "folder": "Cartella", + "error": "Errore", + "installed": "Installato", + "template": "Schema", + "outputs": "Uscite", + "data": "Dati", + "somethingWentWrong": "Qualcosa è andato storto", + "copyError": "$t(gallery.copy) Errore", + "input": "Ingresso", + "notInstalled": "Non $t(common.installed)", + "unknownError": "Errore sconosciuto", + "updated": "Aggiornato", + "save": "Salva", + "created": "Creato", + "prevPage": "Pagina precedente", + "delete": "Elimina", + "orderBy": "Ordinato per", + "nextPage": "Pagina successiva", + "saveAs": "Salva come", + "unsaved": "Non salvato", + "direction": "Direzione" + }, + "gallery": { + "generations": "Generazioni", + "showGenerations": "Mostra Generazioni", + "uploads": "Caricamenti", + "showUploads": "Mostra caricamenti", + "galleryImageSize": "Dimensione dell'immagine", + "galleryImageResetSize": "Ripristina dimensioni", + "gallerySettings": "Impostazioni della galleria", + "maintainAspectRatio": "Mantenere le proporzioni", + "autoSwitchNewImages": "Passaggio automatico a nuove immagini", + "singleColumnLayout": "Layout a colonna singola", + "allImagesLoaded": "Tutte le immagini caricate", + "loadMore": "Carica altro", + "noImagesInGallery": "Nessuna immagine da visualizzare", + "deleteImage": "Elimina l'immagine", + "deleteImagePermanent": "Le immagini eliminate non possono essere ripristinate.", + "deleteImageBin": "Le immagini eliminate verranno spostate nel Cestino del tuo sistema operativo.", + "assets": "Risorse", + "autoAssignBoardOnClick": "Assegna automaticamente la bacheca al clic", + "featuresWillReset": "Se elimini questa immagine, quelle funzionalità verranno immediatamente ripristinate.", + "loading": "Caricamento in corso", + "unableToLoad": "Impossibile caricare la Galleria", + "currentlyInUse": "Questa immagine è attualmente utilizzata nelle seguenti funzionalità:", + "copy": "Copia", + "download": "Scarica", + "setCurrentImage": "Imposta come immagine corrente", + "preparingDownload": "Preparazione del download", + "preparingDownloadFailed": "Problema durante la preparazione del download", + "downloadSelection": "Scarica gli elementi selezionati", + "noImageSelected": "Nessuna immagine selezionata", + "deleteSelection": "Elimina la selezione", + "image": "immagine", + "drop": "Rilascia", + "unstarImage": "Rimuovi preferenza immagine", + "dropOrUpload": "$t(gallery.drop) o carica", + "starImage": "Immagine preferita", + "dropToUpload": "$t(gallery.drop) per aggiornare", + "problemDeletingImagesDesc": "Impossibile eliminare una o più immagini", + "problemDeletingImages": "Problema durante l'eliminazione delle immagini" + }, + "hotkeys": { + "keyboardShortcuts": "Tasti rapidi", + "appHotkeys": "Tasti di scelta rapida dell'applicazione", + "generalHotkeys": "Tasti di scelta rapida generali", + "galleryHotkeys": "Tasti di scelta rapida della galleria", + "unifiedCanvasHotkeys": "Tasti di scelta rapida Tela Unificata", + "invoke": { + "title": "Invoke", + "desc": "Genera un'immagine" + }, + "cancel": { + "title": "Annulla", + "desc": "Annulla la generazione dell'immagine" + }, + "focusPrompt": { + "title": "Metti a fuoco il Prompt", + "desc": "Mette a fuoco l'area di immissione del prompt" + }, + "toggleOptions": { + "title": "Attiva/disattiva le opzioni", + "desc": "Apre e chiude il pannello delle opzioni" + }, + "pinOptions": { + "title": "Appunta le opzioni", + "desc": "Blocca il pannello delle opzioni" + }, + "toggleViewer": { + "title": "Attiva/disattiva visualizzatore", + "desc": "Apre e chiude il visualizzatore immagini" + }, + "toggleGallery": { + "title": "Attiva/disattiva Galleria", + "desc": "Apre e chiude il pannello della galleria" + }, + "maximizeWorkSpace": { + "title": "Massimizza lo spazio di lavoro", + "desc": "Chiude i pannelli e massimizza l'area di lavoro" + }, + "changeTabs": { + "title": "Cambia scheda", + "desc": "Passa a un'altra area di lavoro" + }, + "consoleToggle": { + "title": "Attiva/disattiva console", + "desc": "Apre e chiude la console" + }, + "setPrompt": { + "title": "Imposta Prompt", + "desc": "Usa il prompt dell'immagine corrente" + }, + "setSeed": { + "title": "Imposta seme", + "desc": "Usa il seme dell'immagine corrente" + }, + "setParameters": { + "title": "Imposta parametri", + "desc": "Utilizza tutti i parametri dell'immagine corrente" + }, + "restoreFaces": { + "title": "Restaura volti", + "desc": "Restaura l'immagine corrente" + }, + "upscale": { + "title": "Amplia", + "desc": "Amplia l'immagine corrente" + }, + "showInfo": { + "title": "Mostra informazioni", + "desc": "Mostra le informazioni sui metadati dell'immagine corrente" + }, + "sendToImageToImage": { + "title": "Invia a Immagine a Immagine", + "desc": "Invia l'immagine corrente a da Immagine a Immagine" + }, + "deleteImage": { + "title": "Elimina immagine", + "desc": "Elimina l'immagine corrente" + }, + "closePanels": { + "title": "Chiudi pannelli", + "desc": "Chiude i pannelli aperti" + }, + "previousImage": { + "title": "Immagine precedente", + "desc": "Visualizza l'immagine precedente nella galleria" + }, + "nextImage": { + "title": "Immagine successiva", + "desc": "Visualizza l'immagine successiva nella galleria" + }, + "toggleGalleryPin": { + "title": "Attiva/disattiva il blocco della galleria", + "desc": "Blocca/sblocca la galleria dall'interfaccia utente" + }, + "increaseGalleryThumbSize": { + "title": "Aumenta dimensione immagini nella galleria", + "desc": "Aumenta la dimensione delle miniature della galleria" + }, + "decreaseGalleryThumbSize": { + "title": "Riduci dimensione immagini nella galleria", + "desc": "Riduce le dimensioni delle miniature della galleria" + }, + "selectBrush": { + "title": "Seleziona Pennello", + "desc": "Seleziona il pennello della tela" + }, + "selectEraser": { + "title": "Seleziona Cancellino", + "desc": "Seleziona il cancellino della tela" + }, + "decreaseBrushSize": { + "title": "Riduci la dimensione del pennello", + "desc": "Riduce la dimensione del pennello/cancellino della tela" + }, + "increaseBrushSize": { + "title": "Aumenta la dimensione del pennello", + "desc": "Aumenta la dimensione del pennello/cancellino della tela" + }, + "decreaseBrushOpacity": { + "title": "Riduci l'opacità del pennello", + "desc": "Diminuisce l'opacità del pennello della tela" + }, + "increaseBrushOpacity": { + "title": "Aumenta l'opacità del pennello", + "desc": "Aumenta l'opacità del pennello della tela" + }, + "moveTool": { + "title": "Strumento Sposta", + "desc": "Consente la navigazione nella tela" + }, + "fillBoundingBox": { + "title": "Riempi riquadro di selezione", + "desc": "Riempie il riquadro di selezione con il colore del pennello" + }, + "eraseBoundingBox": { + "title": "Cancella riquadro di selezione", + "desc": "Cancella l'area del riquadro di selezione" + }, + "colorPicker": { + "title": "Seleziona Selettore colore", + "desc": "Seleziona il selettore colore della tela" + }, + "toggleSnap": { + "title": "Attiva/disattiva Aggancia", + "desc": "Attiva/disattiva Aggancia alla griglia" + }, + "quickToggleMove": { + "title": "Attiva/disattiva Sposta rapido", + "desc": "Attiva/disattiva temporaneamente la modalità Sposta" + }, + "toggleLayer": { + "title": "Attiva/disattiva livello", + "desc": "Attiva/disattiva la selezione del livello base/maschera" + }, + "clearMask": { + "title": "Cancella maschera", + "desc": "Cancella l'intera maschera" + }, + "hideMask": { + "title": "Nascondi maschera", + "desc": "Nasconde e mostra la maschera" + }, + "showHideBoundingBox": { + "title": "Mostra/Nascondi riquadro di selezione", + "desc": "Attiva/disattiva la visibilità del riquadro di selezione" + }, + "mergeVisible": { + "title": "Fondi il visibile", + "desc": "Fonde tutti gli strati visibili della tela" + }, + "saveToGallery": { + "title": "Salva nella galleria", + "desc": "Salva la tela corrente nella galleria" + }, + "copyToClipboard": { + "title": "Copia negli appunti", + "desc": "Copia la tela corrente negli appunti" + }, + "downloadImage": { + "title": "Scarica l'immagine", + "desc": "Scarica la tela corrente" + }, + "undoStroke": { + "title": "Annulla tratto", + "desc": "Annulla una pennellata" + }, + "redoStroke": { + "title": "Ripeti tratto", + "desc": "Ripeti una pennellata" + }, + "resetView": { + "title": "Reimposta vista", + "desc": "Ripristina la visualizzazione della tela" + }, + "previousStagingImage": { + "title": "Immagine della sessione precedente", + "desc": "Immagine dell'area della sessione precedente" + }, + "nextStagingImage": { + "title": "Immagine della sessione successivo", + "desc": "Immagine dell'area della sessione successiva" + }, + "acceptStagingImage": { + "title": "Accetta l'immagine della sessione", + "desc": "Accetta l'immagine dell'area della sessione corrente" + }, + "nodesHotkeys": "Tasti di scelta rapida dei Nodi", + "addNodes": { + "title": "Aggiungi Nodi", + "desc": "Apre il menu Aggiungi Nodi" + } + }, + "modelManager": { + "modelManager": "Gestione Modelli", + "model": "Modello", + "allModels": "Tutti i Modelli", + "checkpointModels": "Checkpoint", + "diffusersModels": "Diffusori", + "safetensorModels": "SafeTensor", + "modelAdded": "Modello Aggiunto", + "modelUpdated": "Modello Aggiornato", + "modelEntryDeleted": "Voce del modello eliminata", + "cannotUseSpaces": "Impossibile utilizzare gli spazi", + "addNew": "Aggiungi nuovo", + "addNewModel": "Aggiungi nuovo Modello", + "addCheckpointModel": "Aggiungi modello Checkpoint / Safetensor", + "addDiffuserModel": "Aggiungi Diffusori", + "addManually": "Aggiungi manualmente", + "manual": "Manuale", + "name": "Nome", + "nameValidationMsg": "Inserisci un nome per il modello", + "description": "Descrizione", + "descriptionValidationMsg": "Aggiungi una descrizione per il modello", + "config": "Configurazione", + "configValidationMsg": "Percorso del file di configurazione del modello.", + "modelLocation": "Posizione del modello", + "modelLocationValidationMsg": "Fornisci il percorso di una cartella locale in cui è archiviato il tuo modello di diffusori", + "repo_id": "Repo ID", + "repoIDValidationMsg": "Repository online del modello", + "vaeLocation": "Posizione file VAE", + "vaeLocationValidationMsg": "Percorso dove si trova il file VAE.", + "vaeRepoID": "VAE Repo ID", + "vaeRepoIDValidationMsg": "Repository online del file VAE", + "width": "Larghezza", + "widthValidationMsg": "Larghezza predefinita del modello.", + "height": "Altezza", + "heightValidationMsg": "Altezza predefinita del modello.", + "addModel": "Aggiungi modello", + "updateModel": "Aggiorna modello", + "availableModels": "Modelli disponibili", + "search": "Ricerca", + "load": "Carica", + "active": "attivo", + "notLoaded": "non caricato", + "cached": "memorizzato nella cache", + "checkpointFolder": "Cartella Checkpoint", + "clearCheckpointFolder": "Svuota cartella checkpoint", + "findModels": "Trova modelli", + "scanAgain": "Scansiona nuovamente", + "modelsFound": "Modelli trovati", + "selectFolder": "Seleziona cartella", + "selected": "Selezionato", + "selectAll": "Seleziona tutto", + "deselectAll": "Deseleziona tutto", + "showExisting": "Mostra esistenti", + "addSelected": "Aggiungi selezionato", + "modelExists": "Il modello esiste", + "selectAndAdd": "Seleziona e aggiungi i modelli elencati", + "noModelsFound": "Nessun modello trovato", + "delete": "Elimina", + "deleteModel": "Elimina modello", + "deleteConfig": "Elimina configurazione", + "deleteMsg1": "Sei sicuro di voler eliminare questo modello da InvokeAI?", + "deleteMsg2": "Questo eliminerà il modello dal disco se si trova nella cartella principale di InvokeAI. Se invece utilizzi una cartella personalizzata, il modello NON verrà eliminato dal disco.", + "formMessageDiffusersModelLocation": "Ubicazione modelli diffusori", + "formMessageDiffusersModelLocationDesc": "Inseriscine almeno uno.", + "formMessageDiffusersVAELocation": "Ubicazione file VAE", + "formMessageDiffusersVAELocationDesc": "Se non fornito, InvokeAI cercherà il file VAE all'interno dell'ubicazione del modello sopra indicata.", + "convert": "Converti", + "convertToDiffusers": "Converti in Diffusori", + "convertToDiffusersHelpText2": "Questo processo sostituirà la voce in Gestione Modelli con la versione Diffusori dello stesso modello.", + "convertToDiffusersHelpText4": "Questo è un processo una tantum. Potrebbero essere necessari circa 30-60 secondi a seconda delle specifiche del tuo computer.", + "convertToDiffusersHelpText5": "Assicurati di avere spazio su disco sufficiente. I modelli generalmente variano tra 2 GB e 7 GB di dimensioni.", + "convertToDiffusersHelpText6": "Vuoi convertire questo modello?", + "convertToDiffusersSaveLocation": "Ubicazione salvataggio", + "inpainting": "v1 Inpainting", + "customConfig": "Configurazione personalizzata", + "statusConverting": "Conversione in corso", + "modelConverted": "Modello convertito", + "sameFolder": "Stessa cartella", + "invokeRoot": "Cartella InvokeAI", + "merge": "Unisci", + "modelsMerged": "Modelli uniti", + "mergeModels": "Unisci Modelli", + "modelOne": "Modello 1", + "modelTwo": "Modello 2", + "mergedModelName": "Nome del modello unito", + "alpha": "Alpha", + "interpolationType": "Tipo di interpolazione", + "mergedModelCustomSaveLocation": "Percorso personalizzato", + "invokeAIFolder": "Cartella Invoke AI", + "ignoreMismatch": "Ignora le discrepanze tra i modelli selezionati", + "modelMergeHeaderHelp2": "Solo i diffusori sono disponibili per l'unione. Se desideri unire un modello Checkpoint, convertilo prima in Diffusori.", + "modelMergeInterpAddDifferenceHelp": "In questa modalità, il Modello 3 viene prima sottratto dal Modello 2. La versione risultante viene unita al Modello 1 con il tasso Alpha impostato sopra.", + "mergedModelSaveLocation": "Ubicazione salvataggio", + "convertToDiffusersHelpText1": "Questo modello verrà convertito nel formato 🧨 Diffusore.", + "custom": "Personalizzata", + "convertToDiffusersHelpText3": "Il file Checkpoint su disco verrà eliminato se si trova nella cartella principale di InvokeAI. Se si trova invece in una posizione personalizzata, NON verrà eliminato.", + "v1": "v1", + "pathToCustomConfig": "Percorso alla configurazione personalizzata", + "modelThree": "Modello 3", + "modelMergeHeaderHelp1": "Puoi unire fino a tre diversi modelli per creare una miscela adatta alle tue esigenze.", + "modelMergeAlphaHelp": "Il valore Alpha controlla la forza di miscelazione dei modelli. Valori Alpha più bassi attenuano l'influenza del secondo modello.", + "customSaveLocation": "Ubicazione salvataggio personalizzata", + "weightedSum": "Somma pesata", + "sigmoid": "Sigmoide", + "inverseSigmoid": "Sigmoide inverso", + "v2_base": "v2 (512px)", + "v2_768": "v2 (768px)", + "none": "nessuno", + "addDifference": "Aggiungi differenza", + "pickModelType": "Scegli il tipo di modello", + "scanForModels": "Cerca modelli", + "variant": "Variante", + "baseModel": "Modello Base", + "vae": "VAE", + "modelUpdateFailed": "Aggiornamento del modello non riuscito", + "modelConversionFailed": "Conversione del modello non riuscita", + "modelsMergeFailed": "Unione modelli non riuscita", + "selectModel": "Seleziona Modello", + "modelDeleted": "Modello eliminato", + "modelDeleteFailed": "Impossibile eliminare il modello", + "noCustomLocationProvided": "Nessuna posizione personalizzata fornita", + "convertingModelBegin": "Conversione del modello. Attendere prego.", + "importModels": "Importa Modelli", + "modelsSynced": "Modelli sincronizzati", + "modelSyncFailed": "Sincronizzazione modello non riuscita", + "settings": "Impostazioni", + "syncModels": "Sincronizza Modelli", + "syncModelsDesc": "Se i tuoi modelli non sono sincronizzati con il back-end, puoi aggiornarli utilizzando questa opzione. Questo è generalmente utile nei casi in cui aggiorni manualmente il tuo file models.yaml o aggiungi modelli alla cartella principale di InvokeAI dopo l'avvio dell'applicazione.", + "loraModels": "LoRA", + "oliveModels": "Olive", + "onnxModels": "ONNX", + "noModels": "Nessun modello trovato", + "predictionType": "Tipo di previsione (per modelli Stable Diffusion 2.x ed alcuni modelli Stable Diffusion 1.x)", + "quickAdd": "Aggiunta rapida", + "simpleModelDesc": "Fornire un percorso a un modello diffusori locale, un modello checkpoint/safetensor locale, un ID repository HuggingFace o un URL del modello checkpoint/diffusori.", + "advanced": "Avanzate", + "useCustomConfig": "Utilizza configurazione personalizzata", + "closeAdvanced": "Chiudi Avanzate", + "modelType": "Tipo di modello", + "customConfigFileLocation": "Posizione del file di configurazione personalizzato", + "vaePrecision": "Precisione VAE", + "noModelSelected": "Nessun modello selezionato", + "conversionNotSupported": "Conversione non supportata" + }, + "parameters": { + "images": "Immagini", + "steps": "Passi", + "cfgScale": "Scala CFG", + "width": "Larghezza", + "height": "Altezza", + "seed": "Seme", + "randomizeSeed": "Seme randomizzato", + "shuffle": "Mescola il seme", + "noiseThreshold": "Soglia del rumore", + "perlinNoise": "Rumore Perlin", + "variations": "Variazioni", + "variationAmount": "Quantità di variazione", + "seedWeights": "Pesi dei semi", + "faceRestoration": "Restauro volti", + "restoreFaces": "Restaura volti", + "type": "Tipo", + "strength": "Forza", + "upscaling": "Ampliamento", + "upscale": "Amplia (Shift + U)", + "upscaleImage": "Amplia Immagine", + "scale": "Scala", + "otherOptions": "Altre opzioni", + "seamlessTiling": "Piastrella senza cuciture", + "hiresOptim": "Ottimizzazione alta risoluzione", + "imageFit": "Adatta l'immagine iniziale alle dimensioni di output", + "codeformerFidelity": "Fedeltà", + "scaleBeforeProcessing": "Scala prima dell'elaborazione", + "scaledWidth": "Larghezza ridimensionata", + "scaledHeight": "Altezza ridimensionata", + "infillMethod": "Metodo di riempimento", + "tileSize": "Dimensione piastrella", + "boundingBoxHeader": "Rettangolo di selezione", + "seamCorrectionHeader": "Correzione della cucitura", + "infillScalingHeader": "Riempimento e ridimensionamento", + "img2imgStrength": "Forza da Immagine a Immagine", + "toggleLoopback": "Attiva/disattiva elaborazione ricorsiva", + "sendTo": "Invia a", + "sendToImg2Img": "Invia a Immagine a Immagine", + "sendToUnifiedCanvas": "Invia a Tela Unificata", + "copyImageToLink": "Copia l'immagine nel collegamento", + "downloadImage": "Scarica l'immagine", + "openInViewer": "Apri nel visualizzatore", + "closeViewer": "Chiudi visualizzatore", + "usePrompt": "Usa Prompt", + "useSeed": "Usa Seme", + "useAll": "Usa Tutto", + "useInitImg": "Usa l'immagine iniziale", + "info": "Informazioni", + "initialImage": "Immagine iniziale", + "showOptionsPanel": "Mostra il pannello laterale (O o T)", + "general": "Generale", + "denoisingStrength": "Forza di riduzione del rumore", + "copyImage": "Copia immagine", + "hiresStrength": "Forza Alta Risoluzione", + "imageToImage": "Immagine a Immagine", + "cancel": { + "schedule": "Annulla dopo l'iterazione corrente", + "isScheduled": "Annullamento", + "setType": "Imposta il tipo di annullamento", + "immediate": "Annulla immediatamente", + "cancel": "Annulla" + }, + "hSymmetryStep": "Passi Simmetria Orizzontale", + "vSymmetryStep": "Passi Simmetria Verticale", + "symmetry": "Simmetria", + "hidePreview": "Nascondi l'anteprima", + "showPreview": "Mostra l'anteprima", + "noiseSettings": "Rumore", + "seamlessXAxis": "Asse X", + "seamlessYAxis": "Asse Y", + "scheduler": "Campionatore", + "boundingBoxWidth": "Larghezza riquadro di delimitazione", + "boundingBoxHeight": "Altezza riquadro di delimitazione", + "positivePromptPlaceholder": "Prompt Positivo", + "negativePromptPlaceholder": "Prompt Negativo", + "controlNetControlMode": "Modalità di controllo", + "clipSkip": "CLIP Skip", + "aspectRatio": "Proporzioni", + "maskAdjustmentsHeader": "Regolazioni della maschera", + "maskBlur": "Sfocatura", + "maskBlurMethod": "Metodo di sfocatura", + "seamLowThreshold": "Basso", + "seamHighThreshold": "Alto", + "coherencePassHeader": "Passaggio di coerenza", + "coherenceSteps": "Passi", + "coherenceStrength": "Forza", + "compositingSettingsHeader": "Impostazioni di composizione", + "patchmatchDownScaleSize": "Ridimensiona", + "coherenceMode": "Modalità", + "invoke": { + "noNodesInGraph": "Nessun nodo nel grafico", + "noModelSelected": "Nessun modello selezionato", + "noPrompts": "Nessun prompt generato", + "noInitialImageSelected": "Nessuna immagine iniziale selezionata", + "readyToInvoke": "Pronto per invocare", + "addingImagesTo": "Aggiungi immagini a", + "systemBusy": "Sistema occupato", + "unableToInvoke": "Impossibile invocare", + "systemDisconnected": "Sistema disconnesso", + "noControlImageForControlAdapter": "L'adattatore di controllo #{{number}} non ha un'immagine di controllo", + "noModelForControlAdapter": "Nessun modello selezionato per l'adattatore di controllo #{{number}}.", + "incompatibleBaseModelForControlAdapter": "Il modello dell'adattatore di controllo #{{number}} non è compatibile con il modello principale.", + "missingNodeTemplate": "Modello di nodo mancante", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} ingresso mancante", + "missingFieldTemplate": "Modello di campo mancante" + }, + "enableNoiseSettings": "Abilita le impostazioni del rumore", + "cpuNoise": "Rumore CPU", + "gpuNoise": "Rumore GPU", + "useCpuNoise": "Usa la CPU per generare rumore", + "manualSeed": "Seme manuale", + "randomSeed": "Seme casuale", + "iterations": "Iterazioni", + "iterationsWithCount_one": "{{count}} Iterazione", + "iterationsWithCount_many": "{{count}} Iterazioni", + "iterationsWithCount_other": "{{count}} Iterazioni", + "seamlessX&Y": "Senza cuciture X & Y", + "isAllowedToUpscale": { + "useX2Model": "L'immagine è troppo grande per l'ampliamento con il modello x4, utilizza il modello x2", + "tooLarge": "L'immagine è troppo grande per l'ampliamento, seleziona un'immagine più piccola" + }, + "seamlessX": "Senza cuciture X", + "seamlessY": "Senza cuciture Y", + "imageActions": "Azioni Immagine", + "aspectRatioFree": "Libere", + "maskEdge": "Maschera i bordi", + "unmasked": "No maschera", + "cfgRescaleMultiplier": "Moltiplicatore riscala CFG", + "cfgRescale": "Riscala CFG", + "useSize": "Usa Dimensioni" + }, + "settings": { + "models": "Modelli", + "displayInProgress": "Visualizza le immagini di avanzamento", + "saveSteps": "Salva le immagini ogni n passaggi", + "confirmOnDelete": "Conferma l'eliminazione", + "displayHelpIcons": "Visualizza le icone della Guida", + "enableImageDebugging": "Abilita il debug dell'immagine", + "resetWebUI": "Reimposta l'interfaccia utente Web", + "resetWebUIDesc1": "Il ripristino dell'interfaccia utente Web reimposta solo la cache locale del browser delle immagini e le impostazioni memorizzate. Non cancella alcuna immagine dal disco.", + "resetWebUIDesc2": "Se le immagini non vengono visualizzate nella galleria o qualcos'altro non funziona, prova a reimpostare prima di segnalare un problema su GitHub.", + "resetComplete": "L'interfaccia utente Web è stata reimpostata.", + "useSlidersForAll": "Usa i cursori per tutte le opzioni", + "general": "Generale", + "consoleLogLevel": "Livello del registro", + "shouldLogToConsole": "Registrazione della console", + "developer": "Sviluppatore", + "antialiasProgressImages": "Anti aliasing delle immagini di avanzamento", + "showProgressInViewer": "Mostra le immagini di avanzamento nel visualizzatore", + "generation": "Generazione", + "ui": "Interfaccia Utente", + "favoriteSchedulersPlaceholder": "Nessun campionatore preferito", + "favoriteSchedulers": "Campionatori preferiti", + "showAdvancedOptions": "Mostra Opzioni Avanzate", + "alternateCanvasLayout": "Layout alternativo della tela", + "beta": "Beta", + "enableNodesEditor": "Abilita l'editor dei nodi", + "experimental": "Sperimentale", + "autoChangeDimensions": "Aggiorna L/A alle impostazioni predefinite del modello in caso di modifica", + "clearIntermediates": "Cancella le immagini intermedie", + "clearIntermediatesDesc3": "Le immagini della galleria non verranno eliminate.", + "clearIntermediatesDesc2": "Le immagini intermedie sono sottoprodotti della generazione, diversi dalle immagini risultanti nella galleria. La cancellazione degli intermedi libererà spazio su disco.", + "intermediatesCleared_one": "Cancellata {{count}} immagine intermedia", + "intermediatesCleared_many": "Cancellate {{count}} immagini intermedie", + "intermediatesCleared_other": "Cancellate {{count}} immagini intermedie", + "clearIntermediatesDesc1": "La cancellazione delle immagini intermedie ripristinerà lo stato di Tela Unificata e ControlNet.", + "intermediatesClearedFailed": "Problema con la cancellazione delle immagini intermedie", + "clearIntermediatesWithCount_one": "Cancella {{count}} immagine intermedia", + "clearIntermediatesWithCount_many": "Cancella {{count}} immagini intermedie", + "clearIntermediatesWithCount_other": "Cancella {{count}} immagini intermedie", + "clearIntermediatesDisabled": "La coda deve essere vuota per cancellare le immagini intermedie", + "enableNSFWChecker": "Abilita controllo NSFW", + "enableInvisibleWatermark": "Abilita filigrana invisibile", + "enableInformationalPopovers": "Abilita testo informativo a comparsa", + "reloadingIn": "Ricaricando in" + }, + "toast": { + "tempFoldersEmptied": "Cartella temporanea svuotata", + "uploadFailed": "Caricamento fallito", + "uploadFailedUnableToLoadDesc": "Impossibile caricare il file", + "downloadImageStarted": "Download dell'immagine avviato", + "imageCopied": "Immagine copiata", + "imageLinkCopied": "Collegamento immagine copiato", + "imageNotLoaded": "Nessuna immagine caricata", + "imageNotLoadedDesc": "Impossibile trovare l'immagine", + "imageSavedToGallery": "Immagine salvata nella Galleria", + "canvasMerged": "Tela unita", + "sentToImageToImage": "Inviato a Immagine a Immagine", + "sentToUnifiedCanvas": "Inviato a Tela Unificata", + "parametersSet": "Parametri impostati", + "parametersNotSet": "Parametri non impostati", + "parametersNotSetDesc": "Nessun metadato trovato per questa immagine.", + "parametersFailed": "Problema durante il caricamento dei parametri", + "parametersFailedDesc": "Impossibile caricare l'immagine iniziale.", + "seedSet": "Seme impostato", + "seedNotSet": "Seme non impostato", + "seedNotSetDesc": "Impossibile trovare il seme per questa immagine.", + "promptSet": "Prompt impostato", + "promptNotSet": "Prompt non impostato", + "promptNotSetDesc": "Impossibile trovare il prompt per questa immagine.", + "upscalingFailed": "Ampliamento non riuscito", + "faceRestoreFailed": "Restauro facciale non riuscito", + "metadataLoadFailed": "Impossibile caricare i metadati", + "initialImageSet": "Immagine iniziale impostata", + "initialImageNotSet": "Immagine iniziale non impostata", + "initialImageNotSetDesc": "Impossibile caricare l'immagine iniziale", + "serverError": "Errore del Server", + "disconnected": "Disconnesso dal Server", + "connected": "Connesso al Server", + "canceled": "Elaborazione annullata", + "problemCopyingImageLink": "Impossibile copiare il collegamento dell'immagine", + "uploadFailedInvalidUploadDesc": "Deve essere una singola immagine PNG o JPEG", + "parameterSet": "Parametro impostato", + "parameterNotSet": "Parametro non impostato", + "nodesLoadedFailed": "Impossibile caricare i nodi", + "nodesSaved": "Nodi salvati", + "nodesLoaded": "Nodi caricati", + "problemCopyingImage": "Impossibile copiare l'immagine", + "nodesNotValidGraph": "Grafico del nodo InvokeAI non valido", + "nodesCorruptedGraph": "Impossibile caricare. Il grafico sembra essere danneggiato.", + "nodesUnrecognizedTypes": "Impossibile caricare. Il grafico ha tipi di dati non riconosciuti", + "nodesNotValidJSON": "JSON non valido", + "nodesBrokenConnections": "Impossibile caricare. Alcune connessioni sono interrotte.", + "baseModelChangedCleared_one": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modello incompatibile", + "baseModelChangedCleared_many": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", + "baseModelChangedCleared_other": "Il modello base è stato modificato, cancellato o disabilitato {{count}} sotto-modelli incompatibili", + "imageSavingFailed": "Salvataggio dell'immagine non riuscito", + "canvasSentControlnetAssets": "Tela inviata a ControlNet & Risorse", + "problemCopyingCanvasDesc": "Impossibile copiare la tela", + "loadedWithWarnings": "Flusso di lavoro caricato con avvisi", + "canvasCopiedClipboard": "Tela copiata negli appunti", + "maskSavedAssets": "Maschera salvata nelle risorse", + "modelAddFailed": "Aggiunta del modello non riuscita", + "problemDownloadingCanvas": "Problema durante il download della tela", + "problemMergingCanvas": "Problema nell'unione delle tele", + "imageUploaded": "Immagine caricata", + "addedToBoard": "Aggiunto alla bacheca", + "modelAddedSimple": "Modello aggiunto", + "problemImportingMaskDesc": "Impossibile importare la maschera", + "problemCopyingCanvas": "Problema durante la copia della tela", + "problemSavingCanvas": "Problema nel salvataggio della tela", + "canvasDownloaded": "Tela scaricata", + "problemMergingCanvasDesc": "Impossibile unire le tele", + "problemDownloadingCanvasDesc": "Impossibile scaricare la tela", + "imageSaved": "Immagine salvata", + "maskSentControlnetAssets": "Maschera inviata a ControlNet & Risorse", + "canvasSavedGallery": "Tela salvata nella Galleria", + "imageUploadFailed": "Caricamento immagine non riuscito", + "modelAdded": "Modello aggiunto: {{modelName}}", + "problemImportingMask": "Problema durante l'importazione della maschera", + "setInitialImage": "Imposta come immagine iniziale", + "setControlImage": "Imposta come immagine di controllo", + "setNodeField": "Imposta come campo nodo", + "problemSavingMask": "Problema nel salvataggio della maschera", + "problemSavingCanvasDesc": "Impossibile salvare la tela", + "setCanvasInitialImage": "Imposta l'immagine iniziale della tela", + "workflowLoaded": "Flusso di lavoro caricato", + "setIPAdapterImage": "Imposta come immagine per l'Adattatore IP", + "problemSavingMaskDesc": "Impossibile salvare la maschera", + "setAsCanvasInitialImage": "Imposta come immagine iniziale della tela", + "invalidUpload": "Caricamento non valido", + "problemDeletingWorkflow": "Problema durante l'eliminazione del flusso di lavoro", + "workflowDeleted": "Flusso di lavoro eliminato", + "problemRetrievingWorkflow": "Problema nel recupero del flusso di lavoro" + }, + "tooltip": { + "feature": { + "prompt": "Questo è il campo del prompt. Il prompt include oggetti di generazione e termini stilistici. Puoi anche aggiungere il peso (importanza del token) nel prompt, ma i comandi e i parametri dell'interfaccia a linea di comando non funzioneranno.", + "gallery": "Galleria visualizza le generazioni dalla cartella degli output man mano che vengono create. Le impostazioni sono memorizzate all'interno di file e accessibili dal menu contestuale.", + "other": "Queste opzioni abiliteranno modalità di elaborazione alternative per Invoke. 'Piastrella senza cuciture' creerà modelli ripetuti nell'output. 'Ottimizzazione Alta risoluzione' è la generazione in due passaggi con 'Immagine a Immagine': usa questa impostazione quando vuoi un'immagine più grande e più coerente senza artefatti. Ci vorrà più tempo del solito 'Testo a Immagine'.", + "seed": "Il valore del Seme influenza il rumore iniziale da cui è formata l'immagine. Puoi usare i semi già esistenti dalle immagini precedenti. 'Soglia del rumore' viene utilizzato per mitigare gli artefatti a valori CFG elevati (provare l'intervallo 0-10) e Perlin per aggiungere il rumore Perlin durante la generazione: entrambi servono per aggiungere variazioni ai risultati.", + "variations": "Prova una variazione con un valore compreso tra 0.1 e 1.0 per modificare il risultato per un dato seme. Variazioni interessanti del seme sono comprese tra 0.1 e 0.3.", + "upscale": "Utilizza ESRGAN per ingrandire l'immagine subito dopo la generazione.", + "faceCorrection": "Correzione del volto con GFPGAN o Codeformer: l'algoritmo rileva i volti nell'immagine e corregge eventuali difetti. Un valore alto cambierà maggiormente l'immagine, dando luogo a volti più attraenti. Codeformer con una maggiore fedeltà preserva l'immagine originale a scapito di una correzione facciale più forte.", + "imageToImage": "Da Immagine a Immagine carica qualsiasi immagine come iniziale, che viene quindi utilizzata per generarne una nuova in base al prompt. Più alto è il valore, più cambierà l'immagine risultante. Sono possibili valori da 0.0 a 1.0, l'intervallo consigliato è 0.25-0.75", + "boundingBox": "Il riquadro di selezione è lo stesso delle impostazioni Larghezza e Altezza per da Testo a Immagine o da Immagine a Immagine. Verrà elaborata solo l'area nella casella.", + "seamCorrection": "Controlla la gestione delle giunzioni visibili che si verificano tra le immagini generate sulla tela.", + "infillAndScaling": "Gestisce i metodi di riempimento (utilizzati su aree mascherate o cancellate dell'area di disegno) e il ridimensionamento (utile per i riquadri di selezione di piccole dimensioni)." + } + }, + "unifiedCanvas": { + "layer": "Livello", + "base": "Base", + "mask": "Maschera", + "maskingOptions": "Opzioni di mascheramento", + "enableMask": "Abilita maschera", + "preserveMaskedArea": "Mantieni area mascherata", + "clearMask": "Cancella maschera (Shift+C)", + "brush": "Pennello", + "eraser": "Cancellino", + "fillBoundingBox": "Riempi rettangolo di selezione", + "eraseBoundingBox": "Cancella rettangolo di selezione", + "colorPicker": "Selettore Colore", + "brushOptions": "Opzioni pennello", + "brushSize": "Dimensioni", + "move": "Sposta", + "resetView": "Reimposta vista", + "mergeVisible": "Fondi il visibile", + "saveToGallery": "Salva nella galleria", + "copyToClipboard": "Copia negli appunti", + "downloadAsImage": "Scarica come immagine", + "undo": "Annulla", + "redo": "Ripeti", + "clearCanvas": "Cancella la Tela", + "canvasSettings": "Impostazioni Tela", + "showIntermediates": "Mostra intermedi", + "showGrid": "Mostra griglia", + "snapToGrid": "Aggancia alla griglia", + "darkenOutsideSelection": "Scurisci l'esterno della selezione", + "autoSaveToGallery": "Salvataggio automatico nella Galleria", + "saveBoxRegionOnly": "Salva solo l'area di selezione", + "limitStrokesToBox": "Limita i tratti all'area di selezione", + "showCanvasDebugInfo": "Mostra ulteriori informazioni sulla Tela", + "clearCanvasHistory": "Cancella cronologia Tela", + "clearHistory": "Cancella la cronologia", + "clearCanvasHistoryMessage": "La cancellazione della cronologia della tela lascia intatta la tela corrente, ma cancella in modo irreversibile la cronologia degli annullamenti e dei ripristini.", + "clearCanvasHistoryConfirm": "Sei sicuro di voler cancellare la cronologia della Tela?", + "emptyTempImageFolder": "Svuota la cartella delle immagini temporanee", + "emptyFolder": "Svuota la cartella", + "emptyTempImagesFolderMessage": "Lo svuotamento della cartella delle immagini temporanee ripristina completamente anche la Tela Unificata. Ciò include tutta la cronologia di annullamento/ripristino, le immagini nell'area di staging e il livello di base della tela.", + "emptyTempImagesFolderConfirm": "Sei sicuro di voler svuotare la cartella temporanea?", + "activeLayer": "Livello attivo", + "canvasScale": "Scala della Tela", + "boundingBox": "Rettangolo di selezione", + "scaledBoundingBox": "Rettangolo di selezione scalato", + "boundingBoxPosition": "Posizione del Rettangolo di selezione", + "canvasDimensions": "Dimensioni della Tela", + "canvasPosition": "Posizione Tela", + "cursorPosition": "Posizione del cursore", + "previous": "Precedente", + "next": "Successivo", + "accept": "Accetta", + "showHide": "Mostra/nascondi", + "discardAll": "Scarta tutto", + "betaClear": "Svuota", + "betaDarkenOutside": "Oscura all'esterno", + "betaLimitToBox": "Limita al rettangolo", + "betaPreserveMasked": "Conserva quanto mascherato", + "antialiasing": "Anti aliasing", + "showResultsOn": "Mostra i risultati (attivato)", + "showResultsOff": "Mostra i risultati (disattivato)", + "saveMask": "Salva $t(unifiedCanvas.mask)" + }, + "accessibility": { + "modelSelect": "Seleziona modello", + "invokeProgressBar": "Barra di avanzamento generazione", + "uploadImage": "Carica immagine", + "previousImage": "Immagine precedente", + "nextImage": "Immagine successiva", + "useThisParameter": "Usa questo parametro", + "reset": "Reimposta", + "copyMetadataJson": "Copia i metadati JSON", + "exitViewer": "Esci dal visualizzatore", + "zoomIn": "Zoom avanti", + "zoomOut": "Zoom indietro", + "rotateCounterClockwise": "Ruotare in senso antiorario", + "rotateClockwise": "Ruotare in senso orario", + "flipHorizontally": "Capovolgi orizzontalmente", + "toggleLogViewer": "Attiva/disattiva visualizzatore registro", + "showOptionsPanel": "Mostra il pannello laterale", + "flipVertically": "Capovolgi verticalmente", + "toggleAutoscroll": "Attiva/disattiva lo scorrimento automatico", + "modifyConfig": "Modifica configurazione", + "menu": "Menu", + "showGalleryPanel": "Mostra il pannello Galleria", + "loadMore": "Carica altro", + "mode": "Modalità", + "resetUI": "$t(accessibility.reset) l'Interfaccia Utente", + "createIssue": "Segnala un problema" + }, + "ui": { + "hideProgressImages": "Nascondi avanzamento immagini", + "showProgressImages": "Mostra avanzamento immagini", + "swapSizes": "Scambia dimensioni", + "lockRatio": "Blocca le proporzioni" + }, + "nodes": { + "zoomOutNodes": "Rimpicciolire", + "hideGraphNodes": "Nascondi sovrapposizione grafico", + "hideLegendNodes": "Nascondi la legenda del tipo di campo", + "showLegendNodes": "Mostra legenda del tipo di campo", + "hideMinimapnodes": "Nascondi minimappa", + "showMinimapnodes": "Mostra minimappa", + "zoomInNodes": "Ingrandire", + "fitViewportNodes": "Adatta vista", + "showGraphNodes": "Mostra sovrapposizione grafico", + "reloadNodeTemplates": "Ricarica i modelli di nodo", + "loadWorkflow": "Importa flusso di lavoro JSON", + "downloadWorkflow": "Esporta flusso di lavoro JSON", + "scheduler": "Campionatore", + "addNode": "Aggiungi nodo", + "sDXLMainModelFieldDescription": "Campo del modello SDXL.", + "boardField": "Bacheca", + "animatedEdgesHelp": "Anima i bordi selezionati e i bordi collegati ai nodi selezionati", + "sDXLMainModelField": "Modello SDXL", + "executionStateInProgress": "In corso", + "executionStateError": "Errore", + "executionStateCompleted": "Completato", + "boardFieldDescription": "Una bacheca della galleria", + "addNodeToolTip": "Aggiungi nodo (Shift+A, Space)", + "sDXLRefinerModelField": "Modello Refiner", + "problemReadingMetadata": "Problema durante la lettura dei metadati dall'immagine", + "colorCodeEdgesHelp": "Bordi con codice colore in base ai campi collegati", + "animatedEdges": "Bordi animati", + "snapToGrid": "Aggancia alla griglia", + "validateConnections": "Convalida connessioni e grafico", + "validateConnectionsHelp": "Impedisce che vengano effettuate connessioni non valide e che vengano \"invocati\" grafici non validi", + "fullyContainNodesHelp": "I nodi devono essere completamente all'interno della casella di selezione per essere selezionati", + "fullyContainNodes": "Contenere completamente i nodi da selezionare", + "snapToGridHelp": "Aggancia i nodi alla griglia quando vengono spostati", + "workflowSettings": "Impostazioni Editor del flusso di lavoro", + "colorCodeEdges": "Bordi con codice colore", + "mainModelField": "Modello", + "noOutputRecorded": "Nessun output registrato", + "noFieldsLinearview": "Nessun campo aggiunto alla vista lineare", + "removeLinearView": "Rimuovi dalla vista lineare", + "workflowDescription": "Breve descrizione", + "workflowContact": "Contatto", + "workflowVersion": "Versione", + "workflow": "Flusso di lavoro", + "noWorkflow": "Nessun flusso di lavoro", + "workflowTags": "Tag", + "workflowValidation": "Errore di convalida del flusso di lavoro", + "workflowAuthor": "Autore", + "workflowName": "Nome", + "workflowNotes": "Note", + "unhandledInputProperty": "Proprietà di input non gestita", + "versionUnknown": " Versione sconosciuta", + "unableToValidateWorkflow": "Impossibile convalidare il flusso di lavoro", + "updateApp": "Aggiorna App", + "problemReadingWorkflow": "Problema durante la lettura del flusso di lavoro dall'immagine", + "unableToLoadWorkflow": "Impossibile caricare il flusso di lavoro", + "updateNode": "Aggiorna nodo", + "version": "Versione", + "notes": "Note", + "problemSettingTitle": "Problema nell'impostazione del titolo", + "unkownInvocation": "Tipo di invocazione sconosciuta", + "unknownTemplate": "Modello sconosciuto", + "nodeType": "Tipo di nodo", + "vaeField": "VAE", + "unhandledOutputProperty": "Proprietà di output non gestita", + "notesDescription": "Aggiunge note sul tuo flusso di lavoro", + "unknownField": "Campo sconosciuto", + "unknownNode": "Nodo sconosciuto", + "vaeFieldDescription": "Sotto modello VAE.", + "booleanPolymorphicDescription": "Una raccolta di booleani.", + "missingTemplate": "Nodo non valido: nodo {{node}} di tipo {{type}} modello mancante (non installato?)", + "outputSchemaNotFound": "Schema di output non trovato", + "colorFieldDescription": "Un colore RGBA.", + "maybeIncompatible": "Potrebbe essere incompatibile con quello installato", + "noNodeSelected": "Nessun nodo selezionato", + "colorPolymorphic": "Colore polimorfico", + "booleanCollectionDescription": "Una raccolta di booleani.", + "colorField": "Colore", + "nodeTemplate": "Modello di nodo", + "nodeOpacity": "Opacità del nodo", + "pickOne": "Sceglierne uno", + "outputField": "Campo di output", + "nodeSearch": "Cerca nodi", + "nodeOutputs": "Uscite del nodo", + "collectionItem": "Oggetto della raccolta", + "noConnectionInProgress": "Nessuna connessione in corso", + "noConnectionData": "Nessun dato di connessione", + "outputFields": "Campi di output", + "cannotDuplicateConnection": "Impossibile creare connessioni duplicate", + "booleanPolymorphic": "Polimorfico booleano", + "colorPolymorphicDescription": "Una collezione di colori polimorfici.", + "missingCanvaInitImage": "Immagine iniziale della tela mancante", + "clipFieldDescription": "Sottomodelli di tokenizzatore e codificatore di testo.", + "noImageFoundState": "Nessuna immagine iniziale trovata nello stato", + "clipField": "CLIP", + "noMatchingNodes": "Nessun nodo corrispondente", + "noFieldType": "Nessun tipo di campo", + "colorCollection": "Una collezione di colori.", + "noOutputSchemaName": "Nessun nome dello schema di output trovato nell'oggetto di riferimento", + "boolean": "Booleani", + "missingCanvaInitMaskImages": "Immagini di inizializzazione e maschera della tela mancanti", + "oNNXModelField": "Modello ONNX", + "node": "Nodo", + "booleanDescription": "I booleani sono veri o falsi.", + "collection": "Raccolta", + "cannotConnectInputToInput": "Impossibile collegare Input a Input", + "cannotConnectOutputToOutput": "Impossibile collegare Output ad Output", + "booleanCollection": "Raccolta booleana", + "cannotConnectToSelf": "Impossibile connettersi a se stesso", + "mismatchedVersion": "Nodo non valido: il nodo {{node}} di tipo {{type}} ha una versione non corrispondente (provare ad aggiornare?)", + "outputNode": "Nodo di Output", + "loadingNodes": "Caricamento nodi...", + "oNNXModelFieldDescription": "Campo del modello ONNX.", + "denoiseMaskFieldDescription": "La maschera di riduzione del rumore può essere passata tra i nodi", + "floatCollectionDescription": "Una raccolta di numeri virgola mobile.", + "enum": "Enumeratore", + "float": "In virgola mobile", + "doesNotExist": "non esiste", + "currentImageDescription": "Visualizza l'immagine corrente nell'editor dei nodi", + "fieldTypesMustMatch": "I tipi di campo devono corrispondere", + "edge": "Bordo", + "enumDescription": "Gli enumeratori sono valori che possono essere una delle diverse opzioni.", + "denoiseMaskField": "Maschera riduzione rumore", + "currentImage": "Immagine corrente", + "floatCollection": "Raccolta in virgola mobile", + "inputField": "Campo di Input", + "controlFieldDescription": "Informazioni di controllo passate tra i nodi.", + "skippingUnknownOutputType": "Tipo di campo di output sconosciuto saltato", + "latentsFieldDescription": "Le immagini latenti possono essere passate tra i nodi.", + "ipAdapterPolymorphicDescription": "Una raccolta di adattatori IP.", + "latentsPolymorphicDescription": "Le immagini latenti possono essere passate tra i nodi.", + "ipAdapterCollection": "Raccolta Adattatori IP", + "conditioningCollection": "Raccolta condizionamenti", + "ipAdapterPolymorphic": "Adattatore IP Polimorfico", + "integerPolymorphicDescription": "Una raccolta di numeri interi.", + "conditioningCollectionDescription": "Il condizionamento può essere passato tra i nodi.", + "skippingReservedFieldType": "Tipo di campo riservato saltato", + "conditioningPolymorphic": "Condizionamento Polimorfico", + "integer": "Numero Intero", + "latentsCollection": "Raccolta Latenti", + "sourceNode": "Nodo di origine", + "integerDescription": "Gli interi sono numeri senza punto decimale.", + "stringPolymorphic": "Stringa polimorfica", + "conditioningPolymorphicDescription": "Il condizionamento può essere passato tra i nodi.", + "skipped": "Saltato", + "imagePolymorphic": "Immagine Polimorfica", + "imagePolymorphicDescription": "Una raccolta di immagini.", + "floatPolymorphic": "Numeri in virgola mobile Polimorfici", + "ipAdapterCollectionDescription": "Una raccolta di adattatori IP.", + "stringCollectionDescription": "Una raccolta di stringhe.", + "unableToParseNode": "Impossibile analizzare il nodo", + "controlCollection": "Raccolta di Controllo", + "stringCollection": "Raccolta di stringhe", + "inputMayOnlyHaveOneConnection": "L'ingresso può avere solo una connessione", + "ipAdapter": "Adattatore IP", + "integerCollection": "Raccolta di numeri interi", + "controlCollectionDescription": "Informazioni di controllo passate tra i nodi.", + "skippedReservedInput": "Campo di input riservato saltato", + "inputNode": "Nodo di Input", + "imageField": "Immagine", + "skippedReservedOutput": "Campo di output riservato saltato", + "integerCollectionDescription": "Una raccolta di numeri interi.", + "conditioningFieldDescription": "Il condizionamento può essere passato tra i nodi.", + "stringDescription": "Le stringhe sono testo.", + "integerPolymorphic": "Numero intero Polimorfico", + "ipAdapterModel": "Modello Adattatore IP", + "latentsPolymorphic": "Latenti polimorfici", + "skippingInputNoTemplate": "Campo di input senza modello saltato", + "ipAdapterDescription": "Un adattatore di prompt di immagini (Adattatore IP).", + "stringPolymorphicDescription": "Una raccolta di stringhe.", + "skippingUnknownInputType": "Tipo di campo di input sconosciuto saltato", + "controlField": "Controllo", + "ipAdapterModelDescription": "Campo Modello adattatore IP", + "invalidOutputSchema": "Schema di output non valido", + "floatDescription": "I numeri in virgola mobile sono numeri con un punto decimale.", + "floatPolymorphicDescription": "Una raccolta di numeri in virgola mobile.", + "conditioningField": "Condizionamento", + "string": "Stringa", + "latentsField": "Latenti", + "connectionWouldCreateCycle": "La connessione creerebbe un ciclo", + "inputFields": "Campi di Input", + "uNetFieldDescription": "Sub-modello UNet.", + "imageCollectionDescription": "Una raccolta di immagini.", + "imageFieldDescription": "Le immagini possono essere passate tra i nodi.", + "unableToParseEdge": "Impossibile analizzare il bordo", + "latentsCollectionDescription": "Le immagini latenti possono essere passate tra i nodi.", + "imageCollection": "Raccolta Immagini", + "loRAModelField": "LoRA", + "updateAllNodes": "Aggiorna i nodi", + "unableToUpdateNodes_one": "Impossibile aggiornare {{count}} nodo", + "unableToUpdateNodes_many": "Impossibile aggiornare {{count}} nodi", + "unableToUpdateNodes_other": "Impossibile aggiornare {{count}} nodi", + "addLinearView": "Aggiungi alla vista Lineare", + "outputFieldInInput": "Campo di uscita in ingresso", + "unableToMigrateWorkflow": "Impossibile migrare il flusso di lavoro", + "unableToUpdateNode": "Impossibile aggiornare nodo", + "unknownErrorValidatingWorkflow": "Errore sconosciuto durante la convalida del flusso di lavoro", + "collectionFieldType": "{{name}} Raccolta", + "collectionOrScalarFieldType": "{{name}} Raccolta|Scalare", + "nodeVersion": "Versione Nodo", + "inputFieldTypeParseError": "Impossibile analizzare il tipo di campo di input {{node}}.{{field}} ({{message}})", + "unsupportedArrayItemType": "Tipo di elemento dell'array non supportato \"{{type}}\"", + "targetNodeFieldDoesNotExist": "Connessione non valida: il campo di destinazione/input {{node}}.{{field}} non esiste", + "unsupportedMismatchedUnion": "tipo CollectionOrScalar non corrispondente con tipi di base {{firstType}} e {{secondType}}", + "allNodesUpdated": "Tutti i nodi sono aggiornati", + "sourceNodeDoesNotExist": "Connessione non valida: il nodo di origine/output {{node}} non esiste", + "unableToExtractEnumOptions": "Impossibile estrarre le opzioni enum", + "unableToParseFieldType": "Impossibile analizzare il tipo di campo", + "unrecognizedWorkflowVersion": "Versione dello schema del flusso di lavoro non riconosciuta {{version}}", + "outputFieldTypeParseError": "Impossibile analizzare il tipo di campo di output {{node}}.{{field}} ({{message}})", + "sourceNodeFieldDoesNotExist": "Connessione non valida: il campo di origine/output {{node}}.{{field}} non esiste", + "unableToGetWorkflowVersion": "Impossibile ottenere la versione dello schema del flusso di lavoro", + "nodePack": "Pacchetto di nodi", + "unableToExtractSchemaNameFromRef": "Impossibile estrarre il nome dello schema dal riferimento", + "unknownOutput": "Output sconosciuto: {{name}}", + "unknownNodeType": "Tipo di nodo sconosciuto", + "targetNodeDoesNotExist": "Connessione non valida: il nodo di destinazione/input {{node}} non esiste", + "unknownFieldType": "$t(nodes.unknownField) tipo: {{type}}", + "deletedInvalidEdge": "Eliminata connessione non valida {{source}} -> {{target}}", + "unknownInput": "Input sconosciuto: {{name}}", + "prototypeDesc": "Questa invocazione è un prototipo. Potrebbe subire modifiche sostanziali durante gli aggiornamenti dell'app e potrebbe essere rimossa in qualsiasi momento.", + "betaDesc": "Questa invocazione è in versione beta. Fino a quando non sarà stabile, potrebbe subire modifiche importanti durante gli aggiornamenti dell'app. Abbiamo intenzione di supportare questa invocazione a lungo termine.", + "newWorkflow": "Nuovo flusso di lavoro", + "newWorkflowDesc": "Creare un nuovo flusso di lavoro?", + "newWorkflowDesc2": "Il flusso di lavoro attuale presenta modifiche non salvate.", + "unsupportedAnyOfLength": "unione di troppi elementi ({{count}})" + }, + "boards": { + "autoAddBoard": "Aggiungi automaticamente bacheca", + "menuItemAutoAdd": "Aggiungi automaticamente a questa Bacheca", + "cancel": "Annulla", + "addBoard": "Aggiungi Bacheca", + "bottomMessage": "L'eliminazione di questa bacheca e delle sue immagini ripristinerà tutte le funzionalità che le stanno attualmente utilizzando.", + "changeBoard": "Cambia Bacheca", + "loading": "Caricamento in corso ...", + "clearSearch": "Cancella Ricerca", + "topMessage": "Questa bacheca contiene immagini utilizzate nelle seguenti funzionalità:", + "move": "Sposta", + "myBoard": "Bacheca", + "searchBoard": "Cerca bacheche ...", + "noMatching": "Nessuna bacheca corrispondente", + "selectBoard": "Seleziona una Bacheca", + "uncategorized": "Non categorizzato", + "downloadBoard": "Scarica la bacheca", + "deleteBoardOnly": "solo la Bacheca", + "deleteBoard": "Elimina Bacheca", + "deleteBoardAndImages": "Bacheca e Immagini", + "deletedBoardsCannotbeRestored": "Le bacheche eliminate non possono essere ripristinate", + "movingImagesToBoard_one": "Spostare {{count}} immagine nella bacheca:", + "movingImagesToBoard_many": "Spostare {{count}} immagini nella bacheca:", + "movingImagesToBoard_other": "Spostare {{count}} immagini nella bacheca:" + }, + "controlnet": { + "contentShuffleDescription": "Rimescola il contenuto di un'immagine", + "contentShuffle": "Rimescola contenuto", + "beginEndStepPercent": "Percentuale passi Inizio / Fine", + "duplicate": "Duplica", + "balanced": "Bilanciato", + "depthMidasDescription": "Generazione di mappe di profondità usando Midas", + "control": "ControlNet", + "crop": "Ritaglia", + "depthMidas": "Profondità (Midas)", + "enableControlnet": "Abilita ControlNet", + "detectResolution": "Rileva risoluzione", + "controlMode": "Modalità Controllo", + "cannyDescription": "Canny rilevamento bordi", + "depthZoe": "Profondità (Zoe)", + "autoConfigure": "Configura automaticamente il processore", + "delete": "Elimina", + "depthZoeDescription": "Generazione di mappe di profondità usando Zoe", + "resize": "Ridimensiona", + "showAdvanced": "Mostra opzioni Avanzate", + "bgth": "Soglia rimozione sfondo", + "importImageFromCanvas": "Importa immagine dalla Tela", + "lineartDescription": "Converte l'immagine in lineart", + "importMaskFromCanvas": "Importa maschera dalla Tela", + "hideAdvanced": "Nascondi opzioni avanzate", + "ipAdapterModel": "Modello Adattatore", + "resetControlImage": "Reimposta immagine di controllo", + "f": "F", + "h": "H", + "prompt": "Prompt", + "openPoseDescription": "Stima della posa umana utilizzando Openpose", + "resizeMode": "Modalità ridimensionamento", + "weight": "Peso", + "selectModel": "Seleziona un modello", + "w": "W", + "processor": "Processore", + "none": "Nessuno", + "incompatibleBaseModel": "Modello base incompatibile:", + "pidiDescription": "Elaborazione immagini PIDI", + "fill": "Riempie", + "colorMapDescription": "Genera una mappa dei colori dall'immagine", + "lineartAnimeDescription": "Elaborazione lineart in stile anime", + "imageResolution": "Risoluzione dell'immagine", + "colorMap": "Colore", + "lowThreshold": "Soglia inferiore", + "highThreshold": "Soglia superiore", + "normalBaeDescription": "Elaborazione BAE normale", + "noneDescription": "Nessuna elaborazione applicata", + "saveControlImage": "Salva immagine di controllo", + "toggleControlNet": "Attiva/disattiva questo ControlNet", + "safe": "Sicuro", + "colorMapTileSize": "Dimensione piastrella", + "ipAdapterImageFallback": "Nessuna immagine dell'Adattatore IP selezionata", + "mediapipeFaceDescription": "Rilevamento dei volti tramite Mediapipe", + "hedDescription": "Rilevamento dei bordi nidificati olisticamente", + "setControlImageDimensions": "Imposta le dimensioni dell'immagine di controllo su L/A", + "resetIPAdapterImage": "Reimposta immagine Adattatore IP", + "handAndFace": "Mano e faccia", + "enableIPAdapter": "Abilita Adattatore IP", + "maxFaces": "Numero massimo di volti", + "addT2IAdapter": "Aggiungi $t(common.t2iAdapter)", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) abilitato, $t(common.t2iAdapter) disabilitati", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) abilitato, $t(common.controlNet) disabilitati", + "addControlNet": "Aggiungi $t(common.controlNet)", + "controlNetT2IMutexDesc": "$t(common.controlNet) e $t(common.t2iAdapter) contemporaneamente non sono attualmente supportati.", + "addIPAdapter": "Aggiungi $t(common.ipAdapter)", + "controlAdapter_one": "Adattatore di Controllo", + "controlAdapter_many": "Adattatori di Controllo", + "controlAdapter_other": "Adattatori di Controllo", + "megaControl": "Mega ControlNet", + "minConfidence": "Confidenza minima", + "scribble": "Scribble", + "amult": "Angolo di illuminazione", + "coarse": "Approssimativo" + }, + "queue": { + "queueFront": "Aggiungi all'inizio della coda", + "queueBack": "Aggiungi alla coda", + "queueCountPrediction": "Aggiungi {{predicted}} alla coda", + "queue": "Coda", + "status": "Stato", + "pruneSucceeded": "Rimossi {{item_count}} elementi completati dalla coda", + "cancelTooltip": "Annulla l'elemento corrente", + "queueEmpty": "Coda vuota", + "pauseSucceeded": "Elaborazione sospesa", + "in_progress": "In corso", + "notReady": "Impossibile mettere in coda", + "batchFailedToQueue": "Impossibile mettere in coda il lotto", + "completed": "Completati", + "batchValues": "Valori del lotto", + "cancelFailed": "Problema durante l'annullamento dell'elemento", + "batchQueued": "Lotto aggiunto alla coda", + "pauseFailed": "Problema durante la sospensione dell'elaborazione", + "clearFailed": "Problema nella cancellazione della coda", + "queuedCount": "{{pending}} In attesa", + "front": "inizio", + "clearSucceeded": "Coda cancellata", + "pause": "Sospendi", + "pruneTooltip": "Rimuovi {{item_count}} elementi completati", + "cancelSucceeded": "Elemento annullato", + "batchQueuedDesc_one": "Aggiunta {{count}} sessione a {{direction}} della coda", + "batchQueuedDesc_many": "Aggiunte {{count}} sessioni a {{direction}} della coda", + "batchQueuedDesc_other": "Aggiunte {{count}} sessioni a {{direction}} della coda", + "graphQueued": "Grafico in coda", + "batch": "Lotto", + "clearQueueAlertDialog": "Lo svuotamento della coda annulla immediatamente tutti gli elementi in elaborazione e cancella completamente la coda.", + "pending": "In attesa", + "completedIn": "Completato in", + "resumeFailed": "Problema nel riavvio dell'elaborazione", + "clear": "Cancella", + "prune": "Rimuovi", + "total": "Totale", + "canceled": "Annullati", + "pruneFailed": "Problema nel rimuovere la coda", + "cancelBatchSucceeded": "Lotto annullato", + "clearTooltip": "Annulla e cancella tutti gli elementi", + "current": "Attuale", + "pauseTooltip": "Sospende l'elaborazione", + "failed": "Falliti", + "cancelItem": "Annulla l'elemento", + "next": "Prossimo", + "cancelBatch": "Annulla lotto", + "back": "fine", + "cancel": "Annulla", + "session": "Sessione", + "queueTotal": "{{total}} Totale", + "resumeSucceeded": "Elaborazione ripresa", + "enqueueing": "Lotto in coda", + "resumeTooltip": "Riprendi l'elaborazione", + "resume": "Riprendi", + "cancelBatchFailed": "Problema durante l'annullamento del lotto", + "clearQueueAlertDialog2": "Sei sicuro di voler cancellare la coda?", + "item": "Elemento", + "graphFailedToQueue": "Impossibile mettere in coda il grafico", + "queueMaxExceeded": "È stato superato il limite massimo di {{max_queue_size}} e {{skip}} elementi verrebbero saltati", + "batchFieldValues": "Valori Campi Lotto", + "time": "Tempo" + }, + "embedding": { + "noMatchingEmbedding": "Nessun Incorporamento corrispondente", + "addEmbedding": "Aggiungi Incorporamento", + "incompatibleModel": "Modello base incompatibile:", + "noEmbeddingsLoaded": "Nessun incorporamento caricato" + }, + "models": { + "noMatchingModels": "Nessun modello corrispondente", + "loading": "caricamento", + "noMatchingLoRAs": "Nessun LoRA corrispondente", + "noLoRAsAvailable": "Nessun LoRA disponibile", + "noModelsAvailable": "Nessun modello disponibile", + "selectModel": "Seleziona un modello", + "selectLoRA": "Seleziona un LoRA", + "noRefinerModelsInstalled": "Nessun modello SDXL Refiner installato", + "noLoRAsInstalled": "Nessun LoRA installato", + "esrganModel": "Modello ESRGAN", + "addLora": "Aggiungi LoRA", + "noLoRAsLoaded": "Nessuna LoRA caricata" + }, + "invocationCache": { + "disable": "Disabilita", + "misses": "Non trovati in cache", + "enableFailed": "Problema nell'abilitazione della cache delle invocazioni", + "invocationCache": "Cache delle invocazioni", + "clearSucceeded": "Cache delle invocazioni svuotata", + "enableSucceeded": "Cache delle invocazioni abilitata", + "clearFailed": "Problema durante lo svuotamento della cache delle invocazioni", + "hits": "Trovati in cache", + "disableSucceeded": "Cache delle invocazioni disabilitata", + "disableFailed": "Problema durante la disabilitazione della cache delle invocazioni", + "enable": "Abilita", + "clear": "Svuota", + "maxCacheSize": "Dimensione max cache", + "cacheSize": "Dimensione cache", + "useCache": "Usa Cache" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "Utilizza un seme diverso per ogni immagine", + "perIterationLabel": "Per iterazione", + "perIterationDesc": "Utilizza un seme diverso per ogni iterazione", + "perPromptLabel": "Per immagine", + "label": "Comportamento del seme" + }, + "enableDynamicPrompts": "Abilita prompt dinamici", + "combinatorial": "Generazione combinatoria", + "maxPrompts": "Numero massimo di prompt", + "promptsWithCount_one": "{{count}} Prompt", + "promptsWithCount_many": "{{count}} Prompt", + "promptsWithCount_other": "{{count}} Prompt", + "dynamicPrompts": "Prompt dinamici", + "promptsPreview": "Anteprima dei prompt" + }, + "popovers": { + "paramScheduler": { + "paragraphs": [ + "Il campionatore definisce come aggiungere in modo iterativo il rumore a un'immagine o come aggiornare un campione in base all'output di un modello." + ], + "heading": "Campionatore" + }, + "compositingMaskAdjustments": { + "heading": "Regolazioni della maschera", + "paragraphs": [ + "Regola la maschera." + ] + }, + "compositingCoherenceSteps": { + "heading": "Passi", + "paragraphs": [ + "Numero di passi di riduzione del rumore utilizzati nel Passaggio di Coerenza.", + "Uguale al parametro principale Passi." + ] + }, + "compositingBlur": { + "heading": "Sfocatura", + "paragraphs": [ + "Il raggio di sfocatura della maschera." + ] + }, + "compositingCoherenceMode": { + "heading": "Modalità", + "paragraphs": [ + "La modalità del Passaggio di Coerenza." + ] + }, + "clipSkip": { + "paragraphs": [ + "Scegli quanti livelli del modello CLIP saltare.", + "Alcuni modelli funzionano meglio con determinate impostazioni di CLIP Skip.", + "Un valore più alto in genere produce un'immagine meno dettagliata." + ] + }, + "compositingCoherencePass": { + "heading": "Passaggio di Coerenza", + "paragraphs": [ + "Un secondo ciclo di riduzione del rumore aiuta a comporre l'immagine Inpaint/Outpaint." + ] + }, + "compositingStrength": { + "heading": "Forza", + "paragraphs": [ + "Intensità di riduzione del rumore per il passaggio di coerenza.", + "Uguale al parametro intensità di riduzione del rumore da immagine a immagine." + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "Il processo di generazione evita i concetti nel prompt negativo. Utilizzatelo per escludere qualità o oggetti dall'output.", + "Supporta la sintassi e gli incorporamenti di Compel." + ], + "heading": "Prompt negativo" + }, + "compositingBlurMethod": { + "heading": "Metodo di sfocatura", + "paragraphs": [ + "Il metodo di sfocatura applicato all'area mascherata." + ] + }, + "paramPositiveConditioning": { + "heading": "Prompt positivo", + "paragraphs": [ + "Guida il processo di generazione. Puoi usare qualsiasi parola o frase.", + "Supporta sintassi e incorporamenti di Compel e Prompt Dinamici." + ] + }, + "controlNetBeginEnd": { + "heading": "Percentuale passi Inizio / Fine", + "paragraphs": [ + "A quali passi del processo di rimozione del rumore verrà applicato ControlNet.", + "I ControlNet applicati all'inizio del processo guidano la composizione, mentre i ControlNet applicati alla fine guidano i dettagli." + ] + }, + "noiseUseCPU": { + "paragraphs": [ + "Controlla se viene generato rumore sulla CPU o sulla GPU.", + "Con il rumore della CPU abilitato, un seme particolare produrrà la stessa immagine su qualsiasi macchina.", + "Non vi è alcun impatto sulle prestazioni nell'abilitare il rumore della CPU." + ], + "heading": "Usa la CPU per generare rumore" + }, + "scaleBeforeProcessing": { + "paragraphs": [ + "Ridimensiona l'area selezionata alla dimensione più adatta al modello prima del processo di generazione dell'immagine." + ], + "heading": "Scala prima dell'elaborazione" + }, + "paramRatio": { + "heading": "Proporzioni", + "paragraphs": [ + "Le proporzioni delle dimensioni dell'immagine generata.", + "Per i modelli SD1.5 si consiglia una dimensione dell'immagine (in numero di pixel) equivalente a 512x512 mentre per i modelli SDXL si consiglia una dimensione equivalente a 1024x1024." + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "Prompt Dinamici crea molte variazioni a partire da un singolo prompt.", + "La sintassi di base è \"a {red|green|blue} ball\". Ciò produrrà tre prompt: \"a red ball\", \"a green ball\" e \"a blue ball\".", + "Puoi utilizzare la sintassi quante volte vuoi in un singolo prompt, ma assicurati di tenere sotto controllo il numero di prompt generati con l'impostazione \"Numero massimo di prompt\"." + ], + "heading": "Prompt Dinamici" + }, + "paramVAE": { + "paragraphs": [ + "Modello utilizzato per tradurre l'output dell'intelligenza artificiale nell'immagine finale." + ], + "heading": "VAE" + }, + "paramIterations": { + "paragraphs": [ + "Il numero di immagini da generare.", + "Se i prompt dinamici sono abilitati, ciascuno dei prompt verrà generato questo numero di volte." + ], + "heading": "Iterazioni" + }, + "paramVAEPrecision": { + "heading": "Precisione VAE", + "paragraphs": [ + "La precisione utilizzata durante la codifica e decodifica VAE. FP16/mezza precisione è più efficiente, a scapito di minori variazioni dell'immagine." + ] + }, + "paramSeed": { + "paragraphs": [ + "Controlla il rumore iniziale utilizzato per la generazione.", + "Disabilita seme \"Casuale\" per produrre risultati identici con le stesse impostazioni di generazione." + ], + "heading": "Seme" + }, + "controlNetResizeMode": { + "heading": "Modalità ridimensionamento", + "paragraphs": [ + "Come l'immagine ControlNet verrà adattata alle dimensioni di output dell'immagine." + ] + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "Controlla il modo in cui viene utilizzato il seme durante la generazione dei prompt.", + "Per iterazione utilizzerà un seme univoco per ogni iterazione. Usalo per esplorare variazioni del prompt su un singolo seme.", + "Ad esempio, se hai 5 prompt, ogni immagine utilizzerà lo stesso seme.", + "Per immagine utilizzerà un seme univoco per ogni immagine. Ciò fornisce più variazione." + ], + "heading": "Comportamento del seme" + }, + "paramModel": { + "heading": "Modello", + "paragraphs": [ + "Modello utilizzato per i passaggi di riduzione del rumore.", + "Diversi modelli sono generalmente addestrati per specializzarsi nella produzione di particolari risultati e contenuti estetici." + ] + }, + "paramDenoisingStrength": { + "paragraphs": [ + "Quanto rumore viene aggiunto all'immagine in ingresso.", + "0 risulterà in un'immagine identica, mentre 1 risulterà in un'immagine completamente nuova." + ], + "heading": "Forza di riduzione del rumore" + }, + "dynamicPromptsMaxPrompts": { + "heading": "Numero massimo di prompt", + "paragraphs": [ + "Limita il numero di prompt che possono essere generati da Prompt Dinamici." + ] + }, + "infillMethod": { + "paragraphs": [ + "Metodo per riempire l'area selezionata." + ], + "heading": "Metodo di riempimento" + }, + "controlNetWeight": { + "heading": "Peso", + "paragraphs": [ + "Quanto forte sarà l'impatto di ControlNet sull'immagine generata." + ] + }, + "paramCFGScale": { + "heading": "Scala CFG", + "paragraphs": [ + "Controlla quanto il tuo prompt influenza il processo di generazione." + ] + }, + "controlNetControlMode": { + "paragraphs": [ + "Attribuisce più peso al prompt o a ControlNet." + ], + "heading": "Modalità di controllo" + }, + "paramSteps": { + "heading": "Passi", + "paragraphs": [ + "Numero di passi che verranno eseguiti in ogni generazione.", + "Un numero di passi più elevato generalmente creerà immagini migliori ma richiederà più tempo di generazione." + ] + }, + "lora": { + "heading": "Peso LoRA", + "paragraphs": [ + "Un peso LoRA più elevato porterà a impatti maggiori sull'immagine finale." + ] + }, + "controlNet": { + "paragraphs": [ + "ControlNet fornisce una guida al processo di generazione, aiutando a creare immagini con composizione, struttura o stile controllati, a seconda del modello selezionato." + ], + "heading": "ControlNet" + }, + "paramCFGRescaleMultiplier": { + "heading": "Moltiplicatore di riscala CFG", + "paragraphs": [ + "Moltiplicatore di riscala per la guida CFG, utilizzato per modelli addestrati utilizzando SNR a terminale zero (ztsnr). Valore suggerito 0.7." + ] + } + }, + "sdxl": { + "selectAModel": "Seleziona un modello", + "scheduler": "Campionatore", + "noModelsAvailable": "Nessun modello disponibile", + "denoisingStrength": "Forza di riduzione del rumore", + "concatPromptStyle": "Concatena Prompt & Stile", + "loading": "Caricamento...", + "steps": "Passi", + "refinerStart": "Inizio Affinamento", + "cfgScale": "Scala CFG", + "negStylePrompt": "Prompt Stile negativo", + "refiner": "Affinatore", + "negAestheticScore": "Punteggio estetico negativo", + "useRefiner": "Utilizza l'affinatore", + "refinermodel": "Modello Affinatore", + "posAestheticScore": "Punteggio estetico positivo", + "posStylePrompt": "Prompt Stile positivo" + }, + "metadata": { + "initImage": "Immagine iniziale", + "seamless": "Senza giunture", + "positivePrompt": "Prompt positivo", + "negativePrompt": "Prompt negativo", + "generationMode": "Modalità generazione", + "Threshold": "Livello di soglia del rumore", + "metadata": "Metadati", + "strength": "Forza Immagine a Immagine", + "seed": "Seme", + "imageDetails": "Dettagli dell'immagine", + "perlin": "Rumore Perlin", + "model": "Modello", + "noImageDetails": "Nessun dettaglio dell'immagine trovato", + "hiresFix": "Ottimizzazione Alta Risoluzione", + "cfgScale": "Scala CFG", + "fit": "Adatta Immagine a Immagine", + "height": "Altezza", + "variations": "Coppie Peso-Seme", + "noMetaData": "Nessun metadato trovato", + "width": "Larghezza", + "createdBy": "Creato da", + "workflow": "Flusso di lavoro", + "steps": "Passi", + "scheduler": "Campionatore", + "recallParameters": "Richiama i parametri", + "noRecallParameters": "Nessun parametro da richiamare trovato" + }, + "hrf": { + "enableHrf": "Abilita Correzione Alta Risoluzione", + "upscaleMethod": "Metodo di ampliamento", + "enableHrfTooltip": "Genera con una risoluzione iniziale inferiore, esegue l'ampliamento alla risoluzione di base, quindi esegue Immagine a Immagine.", + "metadata": { + "strength": "Forza della Correzione Alta Risoluzione", + "enabled": "Correzione Alta Risoluzione Abilitata", + "method": "Metodo della Correzione Alta Risoluzione" + }, + "hrf": "Correzione Alta Risoluzione", + "hrfStrength": "Forza della Correzione Alta Risoluzione", + "strengthTooltip": "Valori più bassi comportano meno dettagli, il che può ridurre potenziali artefatti." + }, + "workflows": { + "saveWorkflowAs": "Salva flusso di lavoro come", + "workflowEditorMenu": "Menu dell'editor del flusso di lavoro", + "noSystemWorkflows": "Nessun flusso di lavoro del sistema", + "workflowName": "Nome del flusso di lavoro", + "noUserWorkflows": "Nessun flusso di lavoro utente", + "defaultWorkflows": "Flussi di lavoro predefiniti", + "saveWorkflow": "Salva flusso di lavoro", + "openWorkflow": "Apri flusso di lavoro", + "clearWorkflowSearchFilter": "Cancella il filtro di ricerca del flusso di lavoro", + "workflowLibrary": "Libreria", + "noRecentWorkflows": "Nessun flusso di lavoro recente", + "workflowSaved": "Flusso di lavoro salvato", + "workflowIsOpen": "Il flusso di lavoro è aperto", + "unnamedWorkflow": "Flusso di lavoro senza nome", + "savingWorkflow": "Salvataggio del flusso di lavoro...", + "problemLoading": "Problema durante il caricamento dei flussi di lavoro", + "loading": "Caricamento dei flussi di lavoro", + "searchWorkflows": "Cerca flussi di lavoro", + "problemSavingWorkflow": "Problema durante il salvataggio del flusso di lavoro", + "deleteWorkflow": "Elimina flusso di lavoro", + "workflows": "Flussi di lavoro", + "noDescription": "Nessuna descrizione", + "userWorkflows": "I miei flussi di lavoro", + "newWorkflowCreated": "Nuovo flusso di lavoro creato", + "downloadWorkflow": "Salva su file", + "uploadWorkflow": "Carica da file" + }, + "app": { + "storeNotInitialized": "Il negozio non è inizializzato" + } +} diff --git a/invokeai/frontend/web/dist/locales/ja.json b/invokeai/frontend/web/dist/locales/ja.json new file mode 100644 index 0000000000..bfcbffd7d9 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ja.json @@ -0,0 +1,832 @@ +{ + "common": { + "languagePickerLabel": "言語", + "reportBugLabel": "バグ報告", + "settingsLabel": "設定", + "langJapanese": "日本語", + "nodesDesc": "現在、画像生成のためのノードベースシステムを開発中です。機能についてのアップデートにご期待ください。", + "postProcessing": "後処理", + "postProcessDesc1": "Invoke AIは、多彩な後処理の機能を備えています。アップスケーリングと顔修復は、すでにWebUI上で利用可能です。これらは、[Text To Image]および[Image To Image]タブの[詳細オプション]メニューからアクセスできます。また、現在の画像表示の上やビューア内の画像アクションボタンを使って、画像を直接処理することもできます。", + "postProcessDesc2": "より高度な後処理の機能を実現するための専用UIを近日中にリリース予定です。", + "postProcessDesc3": "Invoke AI CLIでは、この他にもEmbiggenをはじめとする様々な機能を利用することができます。", + "training": "追加学習", + "trainingDesc1": "Textual InversionとDreamboothを使って、WebUIから独自のEmbeddingとチェックポイントを追加学習するための専用ワークフローです。", + "trainingDesc2": "InvokeAIは、すでにメインスクリプトを使ったTextual Inversionによるカスタム埋め込み追加学習にも対応しています。", + "upload": "アップロード", + "close": "閉じる", + "load": "ロード", + "back": "戻る", + "statusConnected": "接続済", + "statusDisconnected": "切断済", + "statusError": "エラー", + "statusPreparing": "準備中", + "statusProcessingCanceled": "処理をキャンセル", + "statusProcessingComplete": "処理完了", + "statusGenerating": "生成中", + "statusGeneratingTextToImage": "Text To Imageで生成中", + "statusGeneratingImageToImage": "Image To Imageで生成中", + "statusGenerationComplete": "生成完了", + "statusSavingImage": "画像を保存", + "statusRestoringFaces": "顔の修復", + "statusRestoringFacesGFPGAN": "顔の修復 (GFPGAN)", + "statusRestoringFacesCodeFormer": "顔の修復 (CodeFormer)", + "statusUpscaling": "アップスケーリング", + "statusUpscalingESRGAN": "アップスケーリング (ESRGAN)", + "statusLoadingModel": "モデルを読み込む", + "statusModelChanged": "モデルを変更", + "cancel": "キャンセル", + "accept": "同意", + "langBrPortuguese": "Português do Brasil", + "langRussian": "Русский", + "langSimplifiedChinese": "简体中文", + "langUkranian": "Украї́нська", + "langSpanish": "Español", + "img2img": "img2img", + "unifiedCanvas": "Unified Canvas", + "statusMergingModels": "モデルのマージ", + "statusModelConverted": "変換済モデル", + "statusGeneratingInpainting": "Inpaintingを生成", + "statusIterationComplete": "Iteration Complete", + "statusGeneratingOutpainting": "Outpaintingを生成", + "loading": "ロード中", + "loadingInvokeAI": "Invoke AIをロード中", + "statusConvertingModel": "モデルの変換", + "statusMergedModels": "マージ済モデル", + "githubLabel": "Github", + "hotkeysLabel": "ホットキー", + "langHebrew": "עברית", + "discordLabel": "Discord", + "langItalian": "Italiano", + "langEnglish": "English", + "langArabic": "アラビア語", + "langDutch": "Nederlands", + "langFrench": "Français", + "langGerman": "Deutsch", + "langPortuguese": "Português", + "nodes": "ワークフローエディター", + "langKorean": "한국어", + "langPolish": "Polski", + "txt2img": "txt2img", + "postprocessing": "Post Processing", + "t2iAdapter": "T2I アダプター", + "communityLabel": "コミュニティ", + "dontAskMeAgain": "次回から確認しない", + "areYouSure": "本当によろしいですか?", + "on": "オン", + "nodeEditor": "ノードエディター", + "ipAdapter": "IPアダプター", + "controlAdapter": "コントロールアダプター", + "auto": "自動", + "openInNewTab": "新しいタブで開く", + "controlNet": "コントロールネット", + "statusProcessing": "処理中", + "linear": "リニア", + "imageFailedToLoad": "画像が読み込めません", + "imagePrompt": "画像プロンプト", + "modelManager": "モデルマネージャー", + "lightMode": "ライトモード", + "generate": "生成", + "learnMore": "もっと学ぶ", + "darkMode": "ダークモード", + "random": "ランダム", + "batch": "バッチマネージャー", + "advanced": "高度な設定" + }, + "gallery": { + "uploads": "アップロード", + "showUploads": "アップロードした画像を見る", + "galleryImageSize": "画像のサイズ", + "galleryImageResetSize": "サイズをリセット", + "gallerySettings": "ギャラリーの設定", + "maintainAspectRatio": "アスペクト比を維持", + "singleColumnLayout": "1カラムレイアウト", + "allImagesLoaded": "すべての画像を読み込む", + "loadMore": "さらに読み込む", + "noImagesInGallery": "ギャラリーに画像がありません", + "generations": "生成", + "showGenerations": "生成過程を見る", + "autoSwitchNewImages": "新しい画像に自動切替" + }, + "hotkeys": { + "keyboardShortcuts": "キーボードショートカット", + "appHotkeys": "アプリのホットキー", + "generalHotkeys": "Generalのホットキー", + "galleryHotkeys": "ギャラリーのホットキー", + "unifiedCanvasHotkeys": "Unified Canvasのホットキー", + "invoke": { + "desc": "画像を生成", + "title": "Invoke" + }, + "cancel": { + "title": "キャンセル", + "desc": "画像の生成をキャンセル" + }, + "focusPrompt": { + "desc": "プロンプトテキストボックスにフォーカス", + "title": "プロジェクトにフォーカス" + }, + "toggleOptions": { + "title": "オプションパネルのトグル", + "desc": "オプションパネルの開閉" + }, + "pinOptions": { + "title": "ピン", + "desc": "オプションパネルを固定" + }, + "toggleViewer": { + "title": "ビュワーのトグル", + "desc": "ビュワーを開閉" + }, + "toggleGallery": { + "title": "ギャラリーのトグル", + "desc": "ギャラリードロワーの開閉" + }, + "maximizeWorkSpace": { + "title": "作業領域の最大化", + "desc": "パネルを閉じて、作業領域を最大に" + }, + "changeTabs": { + "title": "タブの切替", + "desc": "他の作業領域と切替" + }, + "consoleToggle": { + "title": "コンソールのトグル", + "desc": "コンソールの開閉" + }, + "setPrompt": { + "title": "プロンプトをセット", + "desc": "現在の画像のプロンプトを使用" + }, + "setSeed": { + "title": "シード値をセット", + "desc": "現在の画像のシード値を使用" + }, + "setParameters": { + "title": "パラメータをセット", + "desc": "現在の画像のすべてのパラメータを使用" + }, + "restoreFaces": { + "title": "顔の修復", + "desc": "現在の画像を修復" + }, + "upscale": { + "title": "アップスケール", + "desc": "現在の画像をアップスケール" + }, + "showInfo": { + "title": "情報を見る", + "desc": "現在の画像のメタデータ情報を表示" + }, + "sendToImageToImage": { + "title": "Image To Imageに転送", + "desc": "現在の画像をImage to Imageに転送" + }, + "deleteImage": { + "title": "画像を削除", + "desc": "現在の画像を削除" + }, + "closePanels": { + "title": "パネルを閉じる", + "desc": "開いているパネルを閉じる" + }, + "previousImage": { + "title": "前の画像", + "desc": "ギャラリー内の1つ前の画像を表示" + }, + "nextImage": { + "title": "次の画像", + "desc": "ギャラリー内の1つ後の画像を表示" + }, + "toggleGalleryPin": { + "title": "ギャラリードロワーの固定", + "desc": "ギャラリーをUIにピン留め/解除" + }, + "increaseGalleryThumbSize": { + "title": "ギャラリーの画像を拡大", + "desc": "ギャラリーのサムネイル画像を拡大" + }, + "decreaseGalleryThumbSize": { + "title": "ギャラリーの画像サイズを縮小", + "desc": "ギャラリーのサムネイル画像を縮小" + }, + "selectBrush": { + "title": "ブラシを選択", + "desc": "ブラシを選択" + }, + "selectEraser": { + "title": "消しゴムを選択", + "desc": "消しゴムを選択" + }, + "decreaseBrushSize": { + "title": "ブラシサイズを縮小", + "desc": "ブラシ/消しゴムのサイズを縮小" + }, + "increaseBrushSize": { + "title": "ブラシサイズを拡大", + "desc": "ブラシ/消しゴムのサイズを拡大" + }, + "decreaseBrushOpacity": { + "title": "ブラシの不透明度を下げる", + "desc": "キャンバスブラシの不透明度を下げる" + }, + "increaseBrushOpacity": { + "title": "ブラシの不透明度を上げる", + "desc": "キャンバスブラシの不透明度を上げる" + }, + "fillBoundingBox": { + "title": "バウンディングボックスを塗りつぶす", + "desc": "ブラシの色でバウンディングボックス領域を塗りつぶす" + }, + "eraseBoundingBox": { + "title": "バウンディングボックスを消す", + "desc": "バウンディングボックス領域を消す" + }, + "colorPicker": { + "title": "カラーピッカーを選択", + "desc": "カラーピッカーを選択" + }, + "toggleLayer": { + "title": "レイヤーを切替", + "desc": "マスク/ベースレイヤの選択を切替" + }, + "clearMask": { + "title": "マスクを消す", + "desc": "マスク全体を消す" + }, + "hideMask": { + "title": "マスクを非表示", + "desc": "マスクを表示/非表示" + }, + "showHideBoundingBox": { + "title": "バウンディングボックスを表示/非表示", + "desc": "バウンディングボックスの表示/非表示を切替" + }, + "saveToGallery": { + "title": "ギャラリーに保存", + "desc": "現在のキャンバスをギャラリーに保存" + }, + "copyToClipboard": { + "title": "クリップボードにコピー", + "desc": "現在のキャンバスをクリップボードにコピー" + }, + "downloadImage": { + "title": "画像をダウンロード", + "desc": "現在の画像をダウンロード" + }, + "resetView": { + "title": "キャンバスをリセット", + "desc": "キャンバスをリセット" + } + }, + "modelManager": { + "modelManager": "モデルマネージャ", + "model": "モデル", + "allModels": "すべてのモデル", + "modelAdded": "モデルを追加", + "modelUpdated": "モデルをアップデート", + "addNew": "新規に追加", + "addNewModel": "新規モデル追加", + "addCheckpointModel": "Checkpointを追加 / Safetensorモデル", + "addDiffuserModel": "Diffusersを追加", + "addManually": "手動で追加", + "manual": "手動", + "name": "名前", + "nameValidationMsg": "モデルの名前を入力", + "description": "概要", + "descriptionValidationMsg": "モデルの概要を入力", + "config": "Config", + "configValidationMsg": "モデルの設定ファイルへのパス", + "modelLocation": "モデルの場所", + "modelLocationValidationMsg": "ディフューザーモデルのあるローカルフォルダーのパスを入力してください", + "repo_id": "Repo ID", + "repoIDValidationMsg": "モデルのリモートリポジトリ", + "vaeLocation": "VAEの場所", + "vaeLocationValidationMsg": "Vaeが配置されている場所へのパス", + "vaeRepoIDValidationMsg": "Vaeのリモートリポジトリ", + "width": "幅", + "widthValidationMsg": "モデルのデフォルトの幅", + "height": "高さ", + "heightValidationMsg": "モデルのデフォルトの高さ", + "addModel": "モデルを追加", + "updateModel": "モデルをアップデート", + "availableModels": "モデルを有効化", + "search": "検索", + "load": "Load", + "active": "active", + "notLoaded": "読み込まれていません", + "cached": "キャッシュ済", + "checkpointFolder": "Checkpointフォルダ", + "clearCheckpointFolder": "Checkpointフォルダ内を削除", + "findModels": "モデルを見つける", + "scanAgain": "再度スキャン", + "modelsFound": "モデルを発見", + "selectFolder": "フォルダを選択", + "selected": "選択済", + "selectAll": "すべて選択", + "deselectAll": "すべて選択解除", + "showExisting": "既存を表示", + "addSelected": "選択済を追加", + "modelExists": "モデルの有無", + "selectAndAdd": "以下のモデルを選択し、追加できます。", + "noModelsFound": "モデルが見つかりません。", + "delete": "削除", + "deleteModel": "モデルを削除", + "deleteConfig": "設定を削除", + "deleteMsg1": "InvokeAIからこのモデルを削除してよろしいですか?", + "deleteMsg2": "これは、モデルがInvokeAIルートフォルダ内にある場合、ディスクからモデルを削除します。カスタム保存場所を使用している場合、モデルはディスクから削除されません。", + "formMessageDiffusersModelLocation": "Diffusersモデルの場所", + "formMessageDiffusersModelLocationDesc": "最低でも1つは入力してください。", + "formMessageDiffusersVAELocation": "VAEの場所s", + "formMessageDiffusersVAELocationDesc": "指定しない場合、InvokeAIは上記のモデルの場所にあるVAEファイルを探します。", + "importModels": "モデルをインポート", + "custom": "カスタム", + "none": "なし", + "convert": "変換", + "statusConverting": "変換中", + "cannotUseSpaces": "スペースは使えません", + "convertToDiffusersHelpText6": "このモデルを変換しますか?", + "checkpointModels": "チェックポイント", + "settings": "設定", + "convertingModelBegin": "モデルを変換しています...", + "baseModel": "ベースモデル", + "modelDeleteFailed": "モデルの削除ができませんでした", + "convertToDiffusers": "ディフューザーに変換", + "alpha": "アルファ", + "diffusersModels": "ディフューザー", + "pathToCustomConfig": "カスタム設定のパス", + "noCustomLocationProvided": "カスタムロケーションが指定されていません", + "modelConverted": "モデル変換が完了しました", + "weightedSum": "重み付け総和", + "inverseSigmoid": "逆シグモイド", + "invokeAIFolder": "Invoke AI フォルダ", + "syncModelsDesc": "モデルがバックエンドと同期していない場合、このオプションを使用してモデルを更新できます。通常、モデル.yamlファイルを手動で更新したり、アプリケーションの起動後にモデルをInvokeAIルートフォルダに追加した場合に便利です。", + "noModels": "モデルが見つかりません", + "sigmoid": "シグモイド", + "merge": "マージ", + "modelMergeInterpAddDifferenceHelp": "このモードでは、モデル3がまずモデル2から減算されます。その結果得られたバージョンが、上記で設定されたアルファ率でモデル1とブレンドされます。", + "customConfig": "カスタム設定", + "predictionType": "予測タイプ(安定したディフュージョン 2.x モデルおよび一部の安定したディフュージョン 1.x モデル用)", + "selectModel": "モデルを選択", + "modelSyncFailed": "モデルの同期に失敗しました", + "quickAdd": "クイック追加", + "simpleModelDesc": "ローカルのDiffusersモデル、ローカルのチェックポイント/safetensorsモデル、HuggingFaceリポジトリのID、またはチェックポイント/ DiffusersモデルのURLへのパスを指定してください。", + "customSaveLocation": "カスタム保存場所", + "advanced": "高度な設定", + "modelDeleted": "モデルが削除されました", + "convertToDiffusersHelpText2": "このプロセスでは、モデルマネージャーのエントリーを同じモデルのディフューザーバージョンに置き換えます。", + "modelUpdateFailed": "モデル更新が失敗しました", + "useCustomConfig": "カスタム設定を使用する", + "convertToDiffusersHelpText5": "十分なディスク空き容量があることを確認してください。モデルは一般的に2GBから7GBのサイズがあります。", + "modelConversionFailed": "モデル変換が失敗しました", + "modelEntryDeleted": "モデルエントリーが削除されました", + "syncModels": "モデルを同期", + "mergedModelSaveLocation": "保存場所", + "closeAdvanced": "高度な設定を閉じる", + "modelType": "モデルタイプ", + "modelsMerged": "モデルマージ完了", + "modelsMergeFailed": "モデルマージ失敗", + "scanForModels": "モデルをスキャン", + "customConfigFileLocation": "カスタム設定ファイルの場所", + "convertToDiffusersHelpText1": "このモデルは 🧨 Diffusers フォーマットに変換されます。", + "modelsSynced": "モデルが同期されました", + "invokeRoot": "InvokeAIフォルダ", + "mergedModelCustomSaveLocation": "カスタムパス", + "mergeModels": "マージモデル", + "interpolationType": "補間タイプ", + "modelMergeHeaderHelp2": "マージできるのはDiffusersのみです。チェックポイントモデルをマージしたい場合は、まずDiffusersに変換してください。", + "convertToDiffusersSaveLocation": "保存場所", + "pickModelType": "モデルタイプを選択", + "sameFolder": "同じフォルダ", + "convertToDiffusersHelpText3": "チェックポイントファイルは、InvokeAIルートフォルダ内にある場合、ディスクから削除されます。カスタムロケーションにある場合は、削除されません。", + "loraModels": "LoRA", + "modelMergeAlphaHelp": "アルファはモデルのブレンド強度を制御します。アルファ値が低いと、2番目のモデルの影響が低くなります。", + "addDifference": "差分を追加", + "modelMergeHeaderHelp1": "あなたのニーズに適したブレンドを作成するために、異なるモデルを最大3つまでマージすることができます。", + "ignoreMismatch": "選択されたモデル間の不一致を無視する", + "convertToDiffusersHelpText4": "これは一回限りのプロセスです。コンピュータの仕様によっては、約30秒から60秒かかる可能性があります。", + "mergedModelName": "マージされたモデル名" + }, + "parameters": { + "images": "画像", + "steps": "ステップ数", + "width": "幅", + "height": "高さ", + "seed": "シード値", + "randomizeSeed": "ランダムなシード値", + "shuffle": "シャッフル", + "seedWeights": "シード値の重み", + "faceRestoration": "顔の修復", + "restoreFaces": "顔の修復", + "strength": "強度", + "upscaling": "アップスケーリング", + "upscale": "アップスケール", + "upscaleImage": "画像をアップスケール", + "scale": "Scale", + "otherOptions": "その他のオプション", + "scaleBeforeProcessing": "処理前のスケール", + "scaledWidth": "幅のスケール", + "scaledHeight": "高さのスケール", + "boundingBoxHeader": "バウンディングボックス", + "img2imgStrength": "Image To Imageの強度", + "sendTo": "転送", + "sendToImg2Img": "Image to Imageに転送", + "sendToUnifiedCanvas": "Unified Canvasに転送", + "downloadImage": "画像をダウンロード", + "openInViewer": "ビュワーを開く", + "closeViewer": "ビュワーを閉じる", + "usePrompt": "プロンプトを使用", + "useSeed": "シード値を使用", + "useAll": "すべてを使用", + "info": "情報", + "showOptionsPanel": "オプションパネルを表示", + "aspectRatioFree": "自由", + "invoke": { + "noControlImageForControlAdapter": "コントロールアダプター #{{number}} に画像がありません", + "noModelForControlAdapter": "コントロールアダプター #{{number}} のモデルが選択されていません。" + }, + "aspectRatio": "縦横比", + "iterations": "生成回数", + "general": "基本設定" + }, + "settings": { + "models": "モデル", + "displayInProgress": "生成中の画像を表示する", + "saveSteps": "nステップごとに画像を保存", + "confirmOnDelete": "削除時に確認", + "displayHelpIcons": "ヘルプアイコンを表示", + "enableImageDebugging": "画像のデバッグを有効化", + "resetWebUI": "WebUIをリセット", + "resetWebUIDesc1": "WebUIのリセットは、画像と保存された設定のキャッシュをリセットするだけです。画像を削除するわけではありません。", + "resetWebUIDesc2": "もしギャラリーに画像が表示されないなど、何か問題が発生した場合はGitHubにissueを提出する前にリセットを試してください。", + "resetComplete": "WebUIはリセットされました。F5を押して再読み込みしてください。" + }, + "toast": { + "uploadFailed": "アップロード失敗", + "uploadFailedUnableToLoadDesc": "ファイルを読み込むことができません。", + "downloadImageStarted": "画像ダウンロード開始", + "imageCopied": "画像をコピー", + "imageLinkCopied": "画像のURLをコピー", + "imageNotLoaded": "画像を読み込めません。", + "imageNotLoadedDesc": "Image To Imageに転送する画像が見つかりません。", + "imageSavedToGallery": "画像をギャラリーに保存する", + "canvasMerged": "Canvas Merged", + "sentToImageToImage": "Image To Imageに転送", + "sentToUnifiedCanvas": "Unified Canvasに転送", + "parametersNotSetDesc": "この画像にはメタデータがありません。", + "parametersFailed": "パラメータ読み込みの不具合", + "parametersFailedDesc": "initイメージを読み込めません。", + "seedNotSetDesc": "この画像のシード値が見つかりません。", + "promptNotSetDesc": "この画像のプロンプトが見つかりませんでした。", + "upscalingFailed": "アップスケーリング失敗", + "faceRestoreFailed": "顔の修復に失敗", + "metadataLoadFailed": "メタデータの読み込みに失敗。" + }, + "tooltip": { + "feature": { + "prompt": "これはプロンプトフィールドです。プロンプトには生成オブジェクトや文法用語が含まれます。プロンプトにも重み(Tokenの重要度)を付けることができますが、CLIコマンドやパラメータは機能しません。", + "gallery": "ギャラリーは、出力先フォルダから生成物を表示します。設定はファイル内に保存され、コンテキストメニューからアクセスできます。.", + "seed": "シード値は、画像が形成される際の初期ノイズに影響します。以前の画像から既に存在するシードを使用することができます。ノイズしきい値は高いCFG値でのアーティファクトを軽減するために使用され、Perlinは生成中にPerlinノイズを追加します(0-10の範囲を試してみてください): どちらも出力にバリエーションを追加するのに役立ちます。", + "variations": "0.1から1.0の間の値で試し、付与されたシードに対する結果を変えてみてください。面白いバリュエーションは0.1〜0.3の間です。", + "upscale": "生成直後の画像をアップスケールするには、ESRGANを使用します。", + "faceCorrection": "GFPGANまたはCodeformerによる顔の修復: 画像内の顔を検出し不具合を修正するアルゴリズムです。高い値を設定すると画像がより変化し、より魅力的な顔になります。Codeformerは顔の修復を犠牲にして、元の画像をできる限り保持します。", + "imageToImage": "Image To Imageは任意の画像を初期値として読み込み、プロンプトとともに新しい画像を生成するために使用されます。値が高いほど結果画像はより変化します。0.0から1.0までの値が可能で、推奨範囲は0.25から0.75です。", + "boundingBox": "バウンディングボックスは、Text To ImageまたはImage To Imageの幅/高さの設定と同じです。ボックス内の領域のみが処理されます。", + "seamCorrection": "キャンバス上の生成された画像間に発生する可視可能な境界の処理を制御します。" + } + }, + "unifiedCanvas": { + "mask": "マスク", + "maskingOptions": "マスクのオプション", + "enableMask": "マスクを有効化", + "preserveMaskedArea": "マスク領域の保存", + "clearMask": "マスクを解除", + "brush": "ブラシ", + "eraser": "消しゴム", + "fillBoundingBox": "バウンディングボックスの塗りつぶし", + "eraseBoundingBox": "バウンディングボックスの消去", + "colorPicker": "カラーピッカー", + "brushOptions": "ブラシオプション", + "brushSize": "サイズ", + "saveToGallery": "ギャラリーに保存", + "copyToClipboard": "クリップボードにコピー", + "downloadAsImage": "画像としてダウンロード", + "undo": "取り消し", + "redo": "やり直し", + "clearCanvas": "キャンバスを片付ける", + "canvasSettings": "キャンバスの設定", + "showGrid": "グリッドを表示", + "darkenOutsideSelection": "外周を暗くする", + "autoSaveToGallery": "ギャラリーに自動保存", + "saveBoxRegionOnly": "ボックス領域のみ保存", + "showCanvasDebugInfo": "キャンバスのデバッグ情報を表示", + "clearCanvasHistory": "キャンバスの履歴を削除", + "clearHistory": "履歴を削除", + "clearCanvasHistoryMessage": "履歴を消去すると現在のキャンバスは残りますが、取り消しややり直しの履歴は不可逆的に消去されます。", + "clearCanvasHistoryConfirm": "履歴を削除しますか?", + "emptyTempImageFolder": "Empty Temp Image Folde", + "emptyFolder": "空のフォルダ", + "emptyTempImagesFolderMessage": "一時フォルダを空にすると、Unified Canvasも完全にリセットされます。これには、すべての取り消し/やり直しの履歴、ステージング領域の画像、およびキャンバスのベースレイヤーが含まれます。", + "emptyTempImagesFolderConfirm": "一時フォルダを削除しますか?", + "activeLayer": "Active Layer", + "canvasScale": "Canvas Scale", + "boundingBox": "バウンディングボックス", + "boundingBoxPosition": "バウンディングボックスの位置", + "canvasDimensions": "キャンバスの大きさ", + "canvasPosition": "キャンバスの位置", + "cursorPosition": "カーソルの位置", + "previous": "前", + "next": "次", + "accept": "同意", + "showHide": "表示/非表示", + "discardAll": "すべて破棄", + "snapToGrid": "グリッドにスナップ" + }, + "accessibility": { + "modelSelect": "モデルを選択", + "invokeProgressBar": "進捗バー", + "reset": "リセット", + "uploadImage": "画像をアップロード", + "previousImage": "前の画像", + "nextImage": "次の画像", + "useThisParameter": "このパラメータを使用する", + "copyMetadataJson": "メタデータをコピー(JSON)", + "zoomIn": "ズームイン", + "exitViewer": "ビューアーを終了", + "zoomOut": "ズームアウト", + "rotateCounterClockwise": "反時計回りに回転", + "rotateClockwise": "時計回りに回転", + "flipHorizontally": "水平方向に反転", + "flipVertically": "垂直方向に反転", + "toggleAutoscroll": "自動スクロールの切替", + "modifyConfig": "Modify Config", + "toggleLogViewer": "Log Viewerの切替", + "showOptionsPanel": "サイドパネルを表示", + "showGalleryPanel": "ギャラリーパネルを表示", + "menu": "メニュー", + "loadMore": "さらに読み込む" + }, + "controlnet": { + "resize": "リサイズ", + "showAdvanced": "高度な設定を表示", + "addT2IAdapter": "$t(common.t2iAdapter)を追加", + "importImageFromCanvas": "キャンバスから画像をインポート", + "lineartDescription": "画像を線画に変換", + "importMaskFromCanvas": "キャンバスからマスクをインポート", + "hideAdvanced": "高度な設定を非表示", + "ipAdapterModel": "アダプターモデル", + "resetControlImage": "コントロール画像をリセット", + "beginEndStepPercent": "開始 / 終了ステップパーセンテージ", + "duplicate": "複製", + "balanced": "バランス", + "prompt": "プロンプト", + "depthMidasDescription": "Midasを使用して深度マップを生成", + "openPoseDescription": "Openposeを使用してポーズを推定", + "control": "コントロール", + "resizeMode": "リサイズモード", + "weight": "重み", + "selectModel": "モデルを選択", + "crop": "切り抜き", + "w": "幅", + "processor": "プロセッサー", + "addControlNet": "$t(common.controlNet)を追加", + "none": "なし", + "incompatibleBaseModel": "互換性のないベースモデル:", + "enableControlnet": "コントロールネットを有効化", + "detectResolution": "検出解像度", + "controlNetT2IMutexDesc": "$t(common.controlNet)と$t(common.t2iAdapter)の同時使用は現在サポートされていません。", + "pidiDescription": "PIDI画像処理", + "controlMode": "コントロールモード", + "fill": "塗りつぶし", + "cannyDescription": "Canny 境界検出", + "addIPAdapter": "$t(common.ipAdapter)を追加", + "colorMapDescription": "画像からカラーマップを生成", + "lineartAnimeDescription": "アニメスタイルの線画処理", + "imageResolution": "画像解像度", + "megaControl": "メガコントロール", + "lowThreshold": "最低閾値", + "autoConfigure": "プロセッサーを自動設定", + "highThreshold": "最大閾値", + "saveControlImage": "コントロール画像を保存", + "toggleControlNet": "このコントロールネットを切り替え", + "delete": "削除", + "controlAdapter_other": "コントロールアダプター", + "colorMapTileSize": "タイルサイズ", + "ipAdapterImageFallback": "IPアダプターの画像が選択されていません", + "mediapipeFaceDescription": "Mediapipeを使用して顔を検出", + "depthZoeDescription": "Zoeを使用して深度マップを生成", + "setControlImageDimensions": "コントロール画像のサイズを幅と高さにセット", + "resetIPAdapterImage": "IP Adapterの画像をリセット", + "handAndFace": "手と顔", + "enableIPAdapter": "IP Adapterを有効化", + "amult": "a_mult", + "contentShuffleDescription": "画像の内容をシャッフルします", + "bgth": "bg_th", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) が有効化され、$t(common.t2iAdapter)s が無効化されました", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) が有効化され、$t(common.controlNet)s が無効化されました", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "minConfidence": "最小確信度", + "colorMap": "Color", + "noneDescription": "処理は行われていません", + "canny": "Canny", + "hedDescription": "階層的エッジ検出", + "maxFaces": "顔の最大数" + }, + "metadata": { + "seamless": "シームレス", + "Threshold": "ノイズ閾値", + "seed": "シード", + "width": "幅", + "workflow": "ワークフロー", + "steps": "ステップ", + "scheduler": "スケジューラー", + "positivePrompt": "ポジティブプロンプト", + "strength": "Image to Image 強度", + "perlin": "パーリンノイズ", + "recallParameters": "パラメータを呼び出す" + }, + "queue": { + "queueEmpty": "キューが空です", + "pauseSucceeded": "処理が一時停止されました", + "queueFront": "キューの先頭へ追加", + "queueBack": "キューに追加", + "queueCountPrediction": "{{predicted}}をキューに追加", + "queuedCount": "保留中 {{pending}}", + "pause": "一時停止", + "queue": "キュー", + "pauseTooltip": "処理を一時停止", + "cancel": "キャンセル", + "queueTotal": "合計 {{total}}", + "resumeSucceeded": "処理が再開されました", + "resumeTooltip": "処理を再開", + "resume": "再開", + "status": "ステータス", + "pruneSucceeded": "キューから完了アイテム{{item_count}}件を削除しました", + "cancelTooltip": "現在のアイテムをキャンセル", + "in_progress": "進行中", + "notReady": "キューに追加できません", + "batchFailedToQueue": "バッチをキューに追加できませんでした", + "completed": "完了", + "batchValues": "バッチの値", + "cancelFailed": "アイテムのキャンセルに問題があります", + "batchQueued": "バッチをキューに追加しました", + "pauseFailed": "処理の一時停止に問題があります", + "clearFailed": "キューのクリアに問題があります", + "front": "先頭", + "clearSucceeded": "キューがクリアされました", + "pruneTooltip": "{{item_count}} の完了アイテムを削除", + "cancelSucceeded": "アイテムがキャンセルされました", + "batchQueuedDesc_other": "{{count}} セッションをキューの{{direction}}に追加しました", + "graphQueued": "グラフをキューに追加しました", + "batch": "バッチ", + "clearQueueAlertDialog": "キューをクリアすると、処理中のアイテムは直ちにキャンセルされ、キューは完全にクリアされます。", + "pending": "保留中", + "resumeFailed": "処理の再開に問題があります", + "clear": "クリア", + "total": "合計", + "canceled": "キャンセル", + "pruneFailed": "キューの削除に問題があります", + "cancelBatchSucceeded": "バッチがキャンセルされました", + "clearTooltip": "全てのアイテムをキャンセルしてクリア", + "current": "現在", + "failed": "失敗", + "cancelItem": "項目をキャンセル", + "next": "次", + "cancelBatch": "バッチをキャンセル", + "session": "セッション", + "enqueueing": "バッチをキューに追加", + "queueMaxExceeded": "{{max_queue_size}} の最大値を超えたため、{{skip}} をスキップします", + "cancelBatchFailed": "バッチのキャンセルに問題があります", + "clearQueueAlertDialog2": "キューをクリアしてもよろしいですか?", + "item": "アイテム", + "graphFailedToQueue": "グラフをキューに追加できませんでした" + }, + "models": { + "noMatchingModels": "一致するモデルがありません", + "loading": "読み込み中", + "noMatchingLoRAs": "一致するLoRAがありません", + "noLoRAsAvailable": "使用可能なLoRAがありません", + "noModelsAvailable": "使用可能なモデルがありません", + "selectModel": "モデルを選択してください", + "selectLoRA": "LoRAを選択してください" + }, + "nodes": { + "addNode": "ノードを追加", + "boardField": "ボード", + "boolean": "ブーリアン", + "boardFieldDescription": "ギャラリーボード", + "addNodeToolTip": "ノードを追加 (Shift+A, Space)", + "booleanPolymorphicDescription": "ブーリアンのコレクション。", + "inputField": "入力フィールド", + "latentsFieldDescription": "潜在空間はノード間で伝達できます。", + "floatCollectionDescription": "浮動小数点のコレクション。", + "missingTemplate": "テンプレートが見つかりません", + "ipAdapterPolymorphicDescription": "IP-Adaptersのコレクション。", + "latentsPolymorphicDescription": "潜在空間はノード間で伝達できます。", + "colorFieldDescription": "RGBAカラー。", + "ipAdapterCollection": "IP-Adapterコレクション", + "conditioningCollection": "条件付きコレクション", + "hideGraphNodes": "グラフオーバーレイを非表示", + "loadWorkflow": "ワークフローを読み込み", + "integerPolymorphicDescription": "整数のコレクション。", + "hideLegendNodes": "フィールドタイプの凡例を非表示", + "float": "浮動小数点", + "booleanCollectionDescription": "ブーリアンのコレクション。", + "integer": "整数", + "colorField": "カラー", + "nodeTemplate": "ノードテンプレート", + "integerDescription": "整数は小数点を持たない数値です。", + "imagePolymorphicDescription": "画像のコレクション。", + "doesNotExist": "存在しません", + "ipAdapterCollectionDescription": "IP-Adaptersのコレクション。", + "inputMayOnlyHaveOneConnection": "入力は1つの接続しか持つことができません", + "nodeOutputs": "ノード出力", + "currentImageDescription": "ノードエディタ内の現在の画像を表示", + "downloadWorkflow": "ワークフローのJSONをダウンロード", + "integerCollection": "整数コレクション", + "collectionItem": "コレクションアイテム", + "fieldTypesMustMatch": "フィールドタイプが一致している必要があります", + "edge": "輪郭", + "inputNode": "入力ノード", + "imageField": "画像", + "animatedEdgesHelp": "選択したエッジおよび選択したノードに接続されたエッジをアニメーション化します", + "cannotDuplicateConnection": "重複した接続は作れません", + "noWorkflow": "ワークフローがありません", + "integerCollectionDescription": "整数のコレクション。", + "colorPolymorphicDescription": "カラーのコレクション。", + "missingCanvaInitImage": "キャンバスの初期画像が見つかりません", + "clipFieldDescription": "トークナイザーとテキストエンコーダーサブモデル。", + "fullyContainNodesHelp": "ノードは選択ボックス内に完全に存在する必要があります", + "clipField": "クリップ", + "nodeType": "ノードタイプ", + "executionStateInProgress": "処理中", + "executionStateError": "エラー", + "ipAdapterModel": "IP-Adapterモデル", + "ipAdapterDescription": "イメージプロンプトアダプター(IP-Adapter)。", + "missingCanvaInitMaskImages": "キャンバスの初期画像およびマスクが見つかりません", + "hideMinimapnodes": "ミニマップを非表示", + "fitViewportNodes": "全体を表示", + "executionStateCompleted": "完了", + "node": "ノード", + "currentImage": "現在の画像", + "controlField": "コントロール", + "booleanDescription": "ブーリアンはtrueかfalseです。", + "collection": "コレクション", + "ipAdapterModelDescription": "IP-Adapterモデルフィールド", + "cannotConnectInputToInput": "入力から入力には接続できません", + "invalidOutputSchema": "無効な出力スキーマ", + "floatDescription": "浮動小数点は、小数点を持つ数値です。", + "floatPolymorphicDescription": "浮動小数点のコレクション。", + "floatCollection": "浮動小数点コレクション", + "latentsField": "潜在空間", + "cannotConnectOutputToOutput": "出力から出力には接続できません", + "booleanCollection": "ブーリアンコレクション", + "cannotConnectToSelf": "自身のノードには接続できません", + "inputFields": "入力フィールド(複数)", + "colorCodeEdges": "カラー-Code Edges", + "imageCollectionDescription": "画像のコレクション。", + "loadingNodes": "ノードを読み込み中...", + "imageCollection": "画像コレクション" + }, + "boards": { + "autoAddBoard": "自動追加するボード", + "move": "移動", + "menuItemAutoAdd": "このボードに自動追加", + "myBoard": "マイボード", + "searchBoard": "ボードを検索...", + "noMatching": "一致するボードがありません", + "selectBoard": "ボードを選択", + "cancel": "キャンセル", + "addBoard": "ボードを追加", + "uncategorized": "未分類", + "downloadBoard": "ボードをダウンロード", + "changeBoard": "ボードを変更", + "loading": "ロード中...", + "topMessage": "このボードには、以下の機能で使用されている画像が含まれています:", + "bottomMessage": "このボードおよび画像を削除すると、現在これらを利用している機能はリセットされます。", + "clearSearch": "検索をクリア" + }, + "embedding": { + "noMatchingEmbedding": "一致する埋め込みがありません", + "addEmbedding": "埋め込みを追加", + "incompatibleModel": "互換性のないベースモデル:" + }, + "invocationCache": { + "invocationCache": "呼び出しキャッシュ", + "clearSucceeded": "呼び出しキャッシュをクリアしました", + "clearFailed": "呼び出しキャッシュのクリアに問題があります", + "enable": "有効", + "clear": "クリア", + "maxCacheSize": "最大キャッシュサイズ", + "cacheSize": "キャッシュサイズ" + }, + "popovers": { + "paramRatio": { + "heading": "縦横比", + "paragraphs": [ + "生成された画像の縦横比。" + ] + } + } +} diff --git a/invokeai/frontend/web/dist/locales/ko.json b/invokeai/frontend/web/dist/locales/ko.json new file mode 100644 index 0000000000..e5283f4113 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ko.json @@ -0,0 +1,920 @@ +{ + "common": { + "languagePickerLabel": "언어 설정", + "reportBugLabel": "버그 리포트", + "githubLabel": "Github", + "settingsLabel": "설정", + "langArabic": "العربية", + "langEnglish": "English", + "langDutch": "Nederlands", + "unifiedCanvas": "통합 캔버스", + "langFrench": "Français", + "langGerman": "Deutsch", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langBrPortuguese": "Português do Brasil", + "langRussian": "Русский", + "langSpanish": "Español", + "nodes": "Workflow Editor", + "nodesDesc": "이미지 생성을 위한 노드 기반 시스템은 현재 개발 중입니다. 이 놀라운 기능에 대한 업데이트를 계속 지켜봐 주세요.", + "postProcessing": "후처리", + "postProcessDesc2": "보다 진보된 후처리 작업을 위한 전용 UI가 곧 출시될 예정입니다.", + "postProcessDesc3": "Invoke AI CLI는 Embiggen을 비롯한 다양한 기능을 제공합니다.", + "training": "학습", + "trainingDesc1": "Textual Inversion과 Dreambooth를 이용해 Web UI에서 나만의 embedding 및 checkpoint를 교육하기 위한 전용 워크플로우입니다.", + "trainingDesc2": "InvokeAI는 이미 메인 스크립트를 사용한 Textual Inversion를 이용한 Custom embedding 학습을 지원하고 있습니다.", + "upload": "업로드", + "close": "닫기", + "load": "불러오기", + "back": "뒤로 가기", + "statusConnected": "연결됨", + "statusDisconnected": "연결 끊김", + "statusError": "에러", + "statusPreparing": "준비 중", + "langSimplifiedChinese": "简体中文", + "statusGenerating": "생성 중", + "statusGeneratingTextToImage": "텍스트->이미지 생성", + "statusGeneratingInpainting": "인페인팅 생성", + "statusGeneratingOutpainting": "아웃페인팅 생성", + "statusGenerationComplete": "생성 완료", + "statusRestoringFaces": "얼굴 복원", + "statusRestoringFacesGFPGAN": "얼굴 복원 (GFPGAN)", + "statusRestoringFacesCodeFormer": "얼굴 복원 (CodeFormer)", + "statusUpscaling": "업스케일링", + "statusUpscalingESRGAN": "업스케일링 (ESRGAN)", + "statusLoadingModel": "모델 로딩중", + "statusModelChanged": "모델 변경됨", + "statusConvertingModel": "모델 컨버팅", + "statusModelConverted": "모델 컨버팅됨", + "statusMergedModels": "모델 병합됨", + "statusMergingModels": "모델 병합중", + "hotkeysLabel": "단축키 설정", + "img2img": "이미지->이미지", + "discordLabel": "Discord", + "langPolish": "Polski", + "postProcessDesc1": "Invoke AI는 다양한 후처리 기능을 제공합니다. 이미지 업스케일링 및 얼굴 복원은 이미 Web UI에서 사용할 수 있습니다. 텍스트->이미지 또는 이미지->이미지 탭의 고급 옵션 메뉴에서 사용할 수 있습니다. 또한 현재 이미지 표시 위, 또는 뷰어에서 액션 버튼을 사용하여 이미지를 직접 처리할 수도 있습니다.", + "langUkranian": "Украї́нська", + "statusProcessingCanceled": "처리 취소됨", + "statusGeneratingImageToImage": "이미지->이미지 생성", + "statusProcessingComplete": "처리 완료", + "statusIterationComplete": "반복(Iteration) 완료", + "statusSavingImage": "이미지 저장", + "t2iAdapter": "T2I 어댑터", + "communityLabel": "커뮤니티", + "txt2img": "텍스트->이미지", + "dontAskMeAgain": "다시 묻지 마세요", + "loadingInvokeAI": "Invoke AI 불러오는 중", + "checkpoint": "체크포인트", + "format": "형식", + "unknown": "알려지지 않음", + "areYouSure": "확실하나요?", + "folder": "폴더", + "inpaint": "inpaint", + "updated": "업데이트 됨", + "on": "켜기", + "save": "저장", + "langPortuguese": "Português", + "created": "생성됨", + "nodeEditor": "Node Editor", + "error": "에러", + "prevPage": "이전 페이지", + "ipAdapter": "IP 어댑터", + "controlAdapter": "제어 어댑터", + "installed": "설치됨", + "accept": "수락", + "ai": "인공지능", + "auto": "자동", + "file": "파일", + "openInNewTab": "새 탭에서 열기", + "delete": "삭제", + "template": "템플릿", + "cancel": "취소", + "controlNet": "컨트롤넷", + "outputs": "결과물", + "unknownError": "알려지지 않은 에러", + "statusProcessing": "처리 중", + "linear": "선형", + "imageFailedToLoad": "이미지를 로드할 수 없음", + "direction": "방향", + "data": "데이터", + "somethingWentWrong": "뭔가 잘못됐어요", + "imagePrompt": "이미지 프롬프트", + "modelManager": "Model Manager", + "lightMode": "라이트 모드", + "safetensors": "Safetensors", + "outpaint": "outpaint", + "langKorean": "한국어", + "orderBy": "정렬 기준", + "generate": "생성", + "copyError": "$t(gallery.copy) 에러", + "learnMore": "더 알아보기", + "nextPage": "다음 페이지", + "saveAs": "다른 이름으로 저장", + "darkMode": "다크 모드", + "loading": "불러오는 중", + "random": "랜덤", + "langHebrew": "Hebrew", + "batch": "Batch 매니저", + "postprocessing": "후처리", + "advanced": "고급", + "unsaved": "저장되지 않음", + "input": "입력", + "details": "세부사항", + "notInstalled": "설치되지 않음" + }, + "gallery": { + "showGenerations": "생성된 이미지 보기", + "generations": "생성된 이미지", + "uploads": "업로드된 이미지", + "showUploads": "업로드된 이미지 보기", + "galleryImageSize": "이미지 크기", + "galleryImageResetSize": "사이즈 리셋", + "gallerySettings": "갤러리 설정", + "maintainAspectRatio": "종횡비 유지", + "deleteSelection": "선택 항목 삭제", + "featuresWillReset": "이 이미지를 삭제하면 해당 기능이 즉시 재설정됩니다.", + "deleteImageBin": "삭제된 이미지는 운영 체제의 Bin으로 전송됩니다.", + "assets": "자산", + "problemDeletingImagesDesc": "하나 이상의 이미지를 삭제할 수 없습니다", + "noImagesInGallery": "보여줄 이미지가 없음", + "autoSwitchNewImages": "새로운 이미지로 자동 전환", + "loading": "불러오는 중", + "unableToLoad": "갤러리를 로드할 수 없음", + "preparingDownload": "다운로드 준비", + "preparingDownloadFailed": "다운로드 준비 중 발생한 문제", + "singleColumnLayout": "단일 열 레이아웃", + "image": "이미지", + "loadMore": "더 불러오기", + "drop": "드랍", + "problemDeletingImages": "이미지 삭제 중 발생한 문제", + "downloadSelection": "선택 항목 다운로드", + "deleteImage": "이미지 삭제", + "currentlyInUse": "이 이미지는 현재 다음 기능에서 사용되고 있습니다:", + "allImagesLoaded": "불러온 모든 이미지", + "dropOrUpload": "$t(gallery.drop) 또는 업로드", + "copy": "복사", + "download": "다운로드", + "deleteImagePermanent": "삭제된 이미지는 복원할 수 없습니다.", + "noImageSelected": "선택된 이미지 없음", + "autoAssignBoardOnClick": "클릭 시 Board로 자동 할당", + "setCurrentImage": "현재 이미지로 설정", + "dropToUpload": "업로드를 위해 $t(gallery.drop)" + }, + "unifiedCanvas": { + "betaPreserveMasked": "마스크 레이어 유지" + }, + "accessibility": { + "previousImage": "이전 이미지", + "modifyConfig": "Config 수정", + "nextImage": "다음 이미지", + "mode": "모드", + "menu": "메뉴", + "modelSelect": "모델 선택", + "zoomIn": "확대하기", + "rotateClockwise": "시계방향으로 회전", + "uploadImage": "이미지 업로드", + "showGalleryPanel": "갤러리 패널 표시", + "useThisParameter": "해당 변수 사용", + "reset": "리셋", + "loadMore": "더 불러오기", + "zoomOut": "축소하기", + "rotateCounterClockwise": "반시계방향으로 회전", + "showOptionsPanel": "사이드 패널 표시", + "toggleAutoscroll": "자동 스크롤 전환", + "toggleLogViewer": "Log Viewer 전환" + }, + "modelManager": { + "pathToCustomConfig": "사용자 지정 구성 경로", + "importModels": "모델 가져오기", + "availableModels": "사용 가능한 모델", + "conversionNotSupported": "변환이 지원되지 않음", + "noCustomLocationProvided": "사용자 지정 위치가 제공되지 않음", + "onnxModels": "Onnx", + "vaeRepoID": "VAE Repo ID", + "modelExists": "모델 존재", + "custom": "사용자 지정", + "addModel": "모델 추가", + "none": "없음", + "modelConverted": "변환된 모델", + "width": "너비", + "weightedSum": "가중합", + "inverseSigmoid": "Inverse Sigmoid", + "invokeAIFolder": "Invoke AI 폴더", + "syncModelsDesc": "모델이 백엔드와 동기화되지 않은 경우 이 옵션을 사용하여 새로 고침할 수 있습니다. 이는 일반적으로 응용 프로그램이 부팅된 후 수동으로 모델.yaml 파일을 업데이트하거나 InvokeAI root 폴더에 모델을 추가하는 경우에 유용합니다.", + "convert": "변환", + "vae": "VAE", + "noModels": "모델을 찾을 수 없음", + "statusConverting": "변환중", + "sigmoid": "Sigmoid", + "deleteModel": "모델 삭제", + "modelLocation": "모델 위치", + "merge": "병합", + "v1": "v1", + "description": "Description", + "modelMergeInterpAddDifferenceHelp": "이 모드에서 모델 3은 먼저 모델 2에서 차감됩니다. 결과 버전은 위에 설정된 Alpha 비율로 모델 1과 혼합됩니다.", + "customConfig": "사용자 지정 구성", + "cannotUseSpaces": "공백을 사용할 수 없음", + "formMessageDiffusersModelLocationDesc": "적어도 하나 이상 입력해 주세요.", + "addDiffuserModel": "Diffusers 추가", + "search": "검색", + "predictionType": "예측 유형(안정 확산 2.x 모델 및 간혹 안정 확산 1.x 모델의 경우)", + "widthValidationMsg": "모형의 기본 너비.", + "selectAll": "모두 선택", + "vaeLocation": "VAE 위치", + "selectModel": "모델 선택", + "modelAdded": "추가된 모델", + "repo_id": "Repo ID", + "modelSyncFailed": "모델 동기화 실패", + "convertToDiffusersHelpText6": "이 모델을 변환하시겠습니까?", + "config": "구성", + "quickAdd": "빠른 추가", + "selected": "선택된", + "modelTwo": "모델 2", + "simpleModelDesc": "로컬 Difffusers 모델, 로컬 체크포인트/안전 센서 모델 HuggingFace Repo ID 또는 체크포인트/Diffusers 모델 URL의 경로를 제공합니다.", + "customSaveLocation": "사용자 정의 저장 위치", + "advanced": "고급", + "modelsFound": "발견된 모델", + "load": "불러오기", + "height": "높이", + "modelDeleted": "삭제된 모델", + "inpainting": "v1 Inpainting", + "vaeLocationValidationMsg": "VAE가 있는 경로.", + "convertToDiffusersHelpText2": "이 프로세스는 모델 관리자 항목을 동일한 모델의 Diffusers 버전으로 대체합니다.", + "modelUpdateFailed": "모델 업데이트 실패", + "modelUpdated": "업데이트된 모델", + "noModelsFound": "모델을 찾을 수 없음", + "useCustomConfig": "사용자 지정 구성 사용", + "formMessageDiffusersVAELocationDesc": "제공되지 않은 경우 호출AIA 파일을 위의 모델 위치 내에서 VAE 파일을 찾습니다.", + "formMessageDiffusersVAELocation": "VAE 위치", + "checkpointModels": "Checkpoints", + "modelOne": "모델 1", + "settings": "설정", + "heightValidationMsg": "모델의 기본 높이입니다.", + "selectAndAdd": "아래 나열된 모델 선택 및 추가", + "convertToDiffusersHelpText5": "디스크 공간이 충분한지 확인해 주세요. 모델은 일반적으로 2GB에서 7GB 사이로 다양합니다.", + "deleteConfig": "구성 삭제", + "deselectAll": "모두 선택 취소", + "modelConversionFailed": "모델 변환 실패", + "clearCheckpointFolder": "Checkpoint Folder 지우기", + "modelEntryDeleted": "모델 항목 삭제", + "deleteMsg1": "InvokeAI에서 이 모델을 삭제하시겠습니까?", + "syncModels": "동기화 모델", + "mergedModelSaveLocation": "위치 저장", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "modelType": "모델 유형", + "nameValidationMsg": "모델 이름 입력", + "cached": "cached", + "modelsMerged": "병합된 모델", + "formMessageDiffusersModelLocation": "Diffusers 모델 위치", + "modelsMergeFailed": "모델 병합 실패", + "convertingModelBegin": "모델 변환 중입니다. 잠시만 기다려 주십시오.", + "v2_base": "v2 (512px)", + "scanForModels": "모델 검색", + "modelLocationValidationMsg": "Diffusers 모델이 저장된 로컬 폴더의 경로 제공", + "name": "이름", + "selectFolder": "폴더 선택", + "updateModel": "모델 업데이트", + "addNewModel": "새로운 모델 추가", + "customConfigFileLocation": "사용자 지정 구성 파일 위치", + "descriptionValidationMsg": "모델에 대한 description 추가", + "safetensorModels": "SafeTensors", + "convertToDiffusersHelpText1": "이 모델은 🧨 Diffusers 형식으로 변환됩니다.", + "modelsSynced": "동기화된 모델", + "vaePrecision": "VAE 정밀도", + "invokeRoot": "InvokeAI 폴더", + "checkpointFolder": "Checkpoint Folder", + "mergedModelCustomSaveLocation": "사용자 지정 경로", + "mergeModels": "모델 병합", + "interpolationType": "Interpolation 타입", + "modelMergeHeaderHelp2": "Diffusers만 병합이 가능합니다. 체크포인트 모델 병합을 원하신다면 먼저 Diffusers로 변환해주세요.", + "convertToDiffusersSaveLocation": "위치 저장", + "deleteMsg2": "모델이 InvokeAI root 폴더에 있으면 디스크에서 모델이 삭제됩니다. 사용자 지정 위치를 사용하는 경우 모델이 디스크에서 삭제되지 않습니다.", + "oliveModels": "Olives", + "repoIDValidationMsg": "모델의 온라인 저장소", + "baseModel": "기본 모델", + "scanAgain": "다시 검색", + "pickModelType": "모델 유형 선택", + "sameFolder": "같은 폴더", + "addNew": "New 추가", + "manual": "매뉴얼", + "convertToDiffusersHelpText3": "디스크의 체크포인트 파일이 InvokeAI root 폴더에 있으면 삭제됩니다. 사용자 지정 위치에 있으면 삭제되지 않습니다.", + "addCheckpointModel": "체크포인트 / 안전 센서 모델 추가", + "configValidationMsg": "모델의 구성 파일에 대한 경로.", + "modelManager": "모델 매니저", + "variant": "Variant", + "vaeRepoIDValidationMsg": "VAE의 온라인 저장소", + "loraModels": "LoRAs", + "modelDeleteFailed": "모델을 삭제하지 못했습니다", + "convertToDiffusers": "Diffusers로 변환", + "allModels": "모든 모델", + "modelThree": "모델 3", + "findModels": "모델 찾기", + "notLoaded": "로드되지 않음", + "alpha": "Alpha", + "diffusersModels": "Diffusers", + "modelMergeAlphaHelp": "Alpha는 모델의 혼합 강도를 제어합니다. Alpha 값이 낮을수록 두 번째 모델의 영향력이 줄어듭니다.", + "addDifference": "Difference 추가", + "noModelSelected": "선택한 모델 없음", + "modelMergeHeaderHelp1": "최대 3개의 다른 모델을 병합하여 필요에 맞는 혼합물을 만들 수 있습니다.", + "ignoreMismatch": "선택한 모델 간의 불일치 무시", + "v2_768": "v2 (768px)", + "convertToDiffusersHelpText4": "이것은 한 번의 과정일 뿐입니다. 컴퓨터 사양에 따라 30-60초 정도 소요될 수 있습니다.", + "model": "모델", + "addManually": "Manually 추가", + "addSelected": "Selected 추가", + "mergedModelName": "병합된 모델 이름", + "delete": "삭제" + }, + "controlnet": { + "amult": "a_mult", + "resize": "크기 조정", + "showAdvanced": "고급 표시", + "contentShuffleDescription": "이미지에서 content 섞기", + "bgth": "bg_th", + "addT2IAdapter": "$t(common.t2iAdapter) 추가", + "pidi": "PIDI", + "importImageFromCanvas": "캔버스에서 이미지 가져오기", + "lineartDescription": "이미지->lineart 변환", + "normalBae": "Normal BAE", + "importMaskFromCanvas": "캔버스에서 Mask 가져오기", + "hed": "HED", + "contentShuffle": "Content Shuffle", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) 사용 가능, $t(common.t2iAdapter) 사용 불가능", + "ipAdapterModel": "Adapter 모델", + "resetControlImage": "Control Image 재설정", + "beginEndStepPercent": "Begin / End Step Percentage", + "mlsdDescription": "Minimalist Line Segment Detector", + "duplicate": "복제", + "balanced": "Balanced", + "f": "F", + "h": "H", + "prompt": "프롬프트", + "depthMidasDescription": "Midas를 사용하여 Depth map 생성하기", + "openPoseDescription": "Openpose를 이용한 사람 포즈 추정", + "control": "Control", + "resizeMode": "크기 조정 모드", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 사용 가능,$t(common.controlNet) 사용 불가능", + "coarse": "Coarse", + "weight": "Weight", + "selectModel": "모델 선택", + "crop": "Crop", + "depthMidas": "Depth (Midas)", + "w": "W", + "processor": "프로세서", + "addControlNet": "$t(common.controlNet) 추가", + "none": "해당없음", + "incompatibleBaseModel": "호환되지 않는 기본 모델:", + "enableControlnet": "사용 가능한 ControlNet", + "detectResolution": "해상도 탐지", + "controlNetT2IMutexDesc": "$t(common.controlNet)와 $t(common.t2iAdapter)는 현재 동시에 지원되지 않습니다.", + "pidiDescription": "PIDI image 처리", + "mediapipeFace": "Mediapipe Face", + "mlsd": "M-LSD", + "controlMode": "Control Mode", + "fill": "채우기", + "cannyDescription": "Canny 모서리 삭제", + "addIPAdapter": "$t(common.ipAdapter) 추가", + "lineart": "Lineart", + "colorMapDescription": "이미지에서 color map을 생성합니다", + "lineartAnimeDescription": "Anime-style lineart 처리", + "minConfidence": "Min Confidence", + "imageResolution": "이미지 해상도", + "megaControl": "Mega Control", + "depthZoe": "Depth (Zoe)", + "colorMap": "색", + "lowThreshold": "Low Threshold", + "autoConfigure": "프로세서 자동 구성", + "highThreshold": "High Threshold", + "normalBaeDescription": "Normal BAE 처리", + "noneDescription": "처리되지 않음", + "saveControlImage": "Control Image 저장", + "openPose": "Openpose", + "toggleControlNet": "해당 ControlNet으로 전환", + "delete": "삭제", + "controlAdapter_other": "Control Adapter(s)", + "safe": "Safe", + "colorMapTileSize": "타일 크기", + "lineartAnime": "Lineart Anime", + "ipAdapterImageFallback": "IP Adapter Image가 선택되지 않음", + "mediapipeFaceDescription": "Mediapipe를 사용하여 Face 탐지", + "canny": "Canny", + "depthZoeDescription": "Zoe를 사용하여 Depth map 생성하기", + "hedDescription": "Holistically-Nested 모서리 탐지", + "setControlImageDimensions": "Control Image Dimensions를 W/H로 설정", + "scribble": "scribble", + "resetIPAdapterImage": "IP Adapter Image 재설정", + "handAndFace": "Hand and Face", + "enableIPAdapter": "사용 가능한 IP Adapter", + "maxFaces": "Max Faces" + }, + "hotkeys": { + "toggleGalleryPin": { + "title": "Gallery Pin 전환", + "desc": "갤러리를 UI에 고정했다가 풉니다" + }, + "toggleSnap": { + "desc": "Snap을 Grid로 전환", + "title": "Snap 전환" + }, + "setSeed": { + "title": "시드 설정", + "desc": "현재 이미지의 시드 사용" + }, + "keyboardShortcuts": "키보드 바로 가기", + "decreaseGalleryThumbSize": { + "desc": "갤러리 미리 보기 크기 축소", + "title": "갤러리 이미지 크기 축소" + }, + "previousStagingImage": { + "title": "이전 스테이징 이미지", + "desc": "이전 스테이징 영역 이미지" + }, + "decreaseBrushSize": { + "title": "브러시 크기 줄이기", + "desc": "캔버스 브러시/지우개 크기 감소" + }, + "consoleToggle": { + "desc": "콘솔 열고 닫기", + "title": "콘솔 전환" + }, + "selectBrush": { + "desc": "캔버스 브러시를 선택", + "title": "브러시 선택" + }, + "upscale": { + "desc": "현재 이미지를 업스케일", + "title": "업스케일" + }, + "previousImage": { + "title": "이전 이미지", + "desc": "갤러리에 이전 이미지 표시" + }, + "unifiedCanvasHotkeys": "Unified Canvas Hotkeys", + "toggleOptions": { + "desc": "옵션 패널을 열고 닫기", + "title": "옵션 전환" + }, + "selectEraser": { + "title": "지우개 선택", + "desc": "캔버스 지우개를 선택" + }, + "setPrompt": { + "title": "프롬프트 설정", + "desc": "현재 이미지의 프롬프트 사용" + }, + "acceptStagingImage": { + "desc": "현재 준비 영역 이미지 허용", + "title": "준비 이미지 허용" + }, + "resetView": { + "desc": "Canvas View 초기화", + "title": "View 초기화" + }, + "hideMask": { + "title": "Mask 숨김", + "desc": "mask 숨김/숨김 해제" + }, + "pinOptions": { + "title": "옵션 고정", + "desc": "옵션 패널을 고정" + }, + "toggleGallery": { + "desc": "gallery drawer 열기 및 닫기", + "title": "Gallery 전환" + }, + "quickToggleMove": { + "title": "빠른 토글 이동", + "desc": "일시적으로 이동 모드 전환" + }, + "generalHotkeys": "General Hotkeys", + "showHideBoundingBox": { + "desc": "bounding box 표시 전환", + "title": "Bounding box 표시/숨김" + }, + "showInfo": { + "desc": "현재 이미지의 metadata 정보 표시", + "title": "정보 표시" + }, + "copyToClipboard": { + "title": "클립보드로 복사", + "desc": "현재 캔버스를 클립보드로 복사" + }, + "restoreFaces": { + "title": "Faces 복원", + "desc": "현재 이미지 복원" + }, + "fillBoundingBox": { + "title": "Bounding Box 채우기", + "desc": "bounding box를 브러시 색으로 채웁니다" + }, + "closePanels": { + "desc": "열린 panels 닫기", + "title": "panels 닫기" + }, + "downloadImage": { + "desc": "현재 캔버스 다운로드", + "title": "이미지 다운로드" + }, + "setParameters": { + "title": "매개 변수 설정", + "desc": "현재 이미지의 모든 매개 변수 사용" + }, + "maximizeWorkSpace": { + "desc": "패널을 닫고 작업 면적을 극대화", + "title": "작업 공간 극대화" + }, + "galleryHotkeys": "Gallery Hotkeys", + "cancel": { + "desc": "이미지 생성 취소", + "title": "취소" + }, + "saveToGallery": { + "title": "갤러리에 저장", + "desc": "현재 캔버스를 갤러리에 저장" + }, + "eraseBoundingBox": { + "desc": "bounding box 영역을 지웁니다", + "title": "Bounding Box 지우기" + }, + "nextImage": { + "title": "다음 이미지", + "desc": "갤러리에 다음 이미지 표시" + }, + "colorPicker": { + "desc": "canvas color picker 선택", + "title": "Color Picker 선택" + }, + "invoke": { + "desc": "이미지 생성", + "title": "불러오기" + }, + "sendToImageToImage": { + "desc": "현재 이미지를 이미지로 보내기" + }, + "toggleLayer": { + "desc": "mask/base layer 선택 전환", + "title": "Layer 전환" + }, + "increaseBrushSize": { + "title": "브러시 크기 증가", + "desc": "캔버스 브러시/지우개 크기 증가" + }, + "appHotkeys": "App Hotkeys", + "deleteImage": { + "title": "이미지 삭제", + "desc": "현재 이미지 삭제" + }, + "moveTool": { + "desc": "캔버스 탐색 허용", + "title": "툴 옮기기" + }, + "clearMask": { + "desc": "전체 mask 제거", + "title": "Mask 제거" + }, + "increaseGalleryThumbSize": { + "title": "갤러리 이미지 크기 증가", + "desc": "갤러리 미리 보기 크기를 늘립니다" + }, + "increaseBrushOpacity": { + "desc": "캔버스 브러시의 불투명도를 높입니다", + "title": "브러시 불투명도 증가" + }, + "focusPrompt": { + "desc": "프롬프트 입력 영역에 초점을 맞춥니다", + "title": "프롬프트에 초점 맞추기" + }, + "decreaseBrushOpacity": { + "desc": "캔버스 브러시의 불투명도를 줄입니다", + "title": "브러시 불투명도 감소" + }, + "nextStagingImage": { + "desc": "다음 스테이징 영역 이미지", + "title": "다음 스테이징 이미지" + }, + "redoStroke": { + "title": "Stroke 다시 실행", + "desc": "brush stroke 다시 실행" + }, + "nodesHotkeys": "Nodes Hotkeys", + "addNodes": { + "desc": "노드 추가 메뉴 열기", + "title": "노드 추가" + }, + "toggleViewer": { + "desc": "이미지 뷰어 열기 및 닫기", + "title": "Viewer 전환" + }, + "undoStroke": { + "title": "Stroke 실행 취소", + "desc": "brush stroke 실행 취소" + }, + "changeTabs": { + "desc": "다른 workspace으로 전환", + "title": "탭 바꾸기" + }, + "mergeVisible": { + "desc": "캔버스의 보이는 모든 레이어 병합" + } + }, + "nodes": { + "inputField": "입력 필드", + "controlFieldDescription": "노드 간에 전달된 Control 정보입니다.", + "latentsFieldDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "denoiseMaskFieldDescription": "노드 간에 Denoise Mask가 전달될 수 있음", + "floatCollectionDescription": "실수 컬렉션.", + "missingTemplate": "잘못된 노드: {{type}} 유형의 {{node}} 템플릿 누락(설치되지 않으셨나요?)", + "outputSchemaNotFound": "Output schema가 발견되지 않음", + "ipAdapterPolymorphicDescription": "IP-Adapters 컬렉션.", + "latentsPolymorphicDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "colorFieldDescription": "RGBA 색.", + "mainModelField": "모델", + "ipAdapterCollection": "IP-Adapters 컬렉션", + "conditioningCollection": "Conditioning 컬렉션", + "maybeIncompatible": "설치된 것과 호환되지 않을 수 있음", + "ipAdapterPolymorphic": "IP-Adapter 다형성", + "noNodeSelected": "선택한 노드 없음", + "addNode": "노드 추가", + "hideGraphNodes": "그래프 오버레이 숨기기", + "enum": "Enum", + "loadWorkflow": "Workflow 불러오기", + "integerPolymorphicDescription": "정수 컬렉션.", + "noOutputRecorded": "기록된 출력 없음", + "conditioningCollectionDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "colorPolymorphic": "색상 다형성", + "colorCodeEdgesHelp": "연결된 필드에 따른 색상 코드 선", + "collectionDescription": "해야 할 일", + "hideLegendNodes": "필드 유형 범례 숨기기", + "addLinearView": "Linear View에 추가", + "float": "실수", + "targetNodeFieldDoesNotExist": "잘못된 모서리: 대상/입력 필드 {{node}}. {{field}}이(가) 없습니다", + "animatedEdges": "애니메이션 모서리", + "conditioningPolymorphic": "Conditioning 다형성", + "integer": "정수", + "colorField": "색", + "boardField": "Board", + "nodeTemplate": "노드 템플릿", + "latentsCollection": "Latents 컬렉션", + "nodeOpacity": "노드 불투명도", + "sourceNodeDoesNotExist": "잘못된 모서리: 소스/출력 노드 {{node}}이(가) 없습니다", + "pickOne": "하나 고르기", + "collectionItemDescription": "해야 할 일", + "integerDescription": "정수는 소수점이 없는 숫자입니다.", + "outputField": "출력 필드", + "conditioningPolymorphicDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "noFieldsLinearview": "Linear View에 추가된 필드 없음", + "imagePolymorphic": "이미지 다형성", + "nodeSearch": "노드 검색", + "imagePolymorphicDescription": "이미지 컬렉션.", + "floatPolymorphic": "실수 다형성", + "outputFieldInInput": "입력 중 출력필드", + "doesNotExist": "존재하지 않음", + "ipAdapterCollectionDescription": "IP-Adapters 컬렉션.", + "controlCollection": "Control 컬렉션", + "inputMayOnlyHaveOneConnection": "입력에 하나의 연결만 있을 수 있습니다", + "notes": "메모", + "nodeOutputs": "노드 결과물", + "currentImageDescription": "Node Editor에 현재 이미지를 표시합니다", + "downloadWorkflow": "Workflow JSON 다운로드", + "ipAdapter": "IP-Adapter", + "integerCollection": "정수 컬렉션", + "collectionItem": "컬렉션 아이템", + "noConnectionInProgress": "진행중인 연결이 없습니다", + "controlCollectionDescription": "노드 간에 전달된 Control 정보입니다.", + "noConnectionData": "연결 데이터 없음", + "outputFields": "출력 필드", + "fieldTypesMustMatch": "필드 유형은 일치해야 합니다", + "edge": "Edge", + "inputNode": "입력 노드", + "enumDescription": "Enums은 여러 옵션 중 하나일 수 있는 값입니다.", + "sourceNodeFieldDoesNotExist": "잘못된 모서리: 소스/출력 필드 {{node}}. {{field}}이(가) 없습니다", + "loRAModelFieldDescription": "해야 할 일", + "imageField": "이미지", + "animatedEdgesHelp": "선택한 노드에 연결된 선택한 가장자리 및 가장자리를 애니메이션화합니다", + "cannotDuplicateConnection": "중복 연결을 만들 수 없습니다", + "booleanPolymorphic": "Boolean 다형성", + "noWorkflow": "Workflow 없음", + "colorCollectionDescription": "해야 할 일", + "integerCollectionDescription": "정수 컬렉션.", + "colorPolymorphicDescription": "색의 컬렉션.", + "denoiseMaskField": "Denoise Mask", + "missingCanvaInitImage": "캔버스 init 이미지 누락", + "conditioningFieldDescription": "노드 간에 Conditioning을 전달할 수 있습니다.", + "clipFieldDescription": "Tokenizer 및 text_encoder 서브모델.", + "fullyContainNodesHelp": "선택하려면 노드가 선택 상자 안에 완전히 있어야 합니다", + "noImageFoundState": "상태에서 초기 이미지를 찾을 수 없습니다", + "clipField": "Clip", + "nodePack": "Node pack", + "nodeType": "노드 유형", + "noMatchingNodes": "일치하는 노드 없음", + "fullyContainNodes": "선택할 노드 전체 포함", + "integerPolymorphic": "정수 다형성", + "executionStateInProgress": "진행중", + "noFieldType": "필드 유형 없음", + "colorCollection": "색의 컬렉션.", + "executionStateError": "에러", + "noOutputSchemaName": "ref 개체에 output schema 이름이 없습니다", + "ipAdapterModel": "IP-Adapter 모델", + "latentsPolymorphic": "Latents 다형성", + "ipAdapterDescription": "이미지 프롬프트 어댑터(IP-Adapter).", + "boolean": "Booleans", + "missingCanvaInitMaskImages": "캔버스 init 및 mask 이미지 누락", + "problemReadingMetadata": "이미지에서 metadata를 읽는 중 문제가 발생했습니다", + "hideMinimapnodes": "미니맵 숨기기", + "oNNXModelField": "ONNX 모델", + "executionStateCompleted": "완료된", + "node": "노드", + "currentImage": "현재 이미지", + "controlField": "Control", + "booleanDescription": "Booleans은 참 또는 거짓입니다.", + "collection": "컬렉션", + "ipAdapterModelDescription": "IP-Adapter 모델 필드", + "cannotConnectInputToInput": "입력을 입력에 연결할 수 없습니다", + "invalidOutputSchema": "잘못된 output schema", + "boardFieldDescription": "A gallery board", + "floatDescription": "실수는 소수점이 있는 숫자입니다.", + "floatPolymorphicDescription": "실수 컬렉션.", + "conditioningField": "Conditioning", + "collectionFieldType": "{{name}} 컬렉션", + "floatCollection": "실수 컬렉션", + "latentsField": "Latents", + "cannotConnectOutputToOutput": "출력을 출력에 연결할 수 없습니다", + "booleanCollection": "Boolean 컬렉션", + "connectionWouldCreateCycle": "연결하면 주기가 생성됩니다", + "cannotConnectToSelf": "자체에 연결할 수 없습니다", + "notesDescription": "Workflow에 대한 메모 추가", + "inputFields": "입력 필드", + "colorCodeEdges": "색상-코드 선", + "targetNodeDoesNotExist": "잘못된 모서리: 대상/입력 노드 {{node}}이(가) 없습니다", + "imageCollectionDescription": "이미지 컬렉션.", + "mismatchedVersion": "잘못된 노드: {{type}} 유형의 {{node}} 노드에 일치하지 않는 버전이 있습니다(업데이트 해보시겠습니까?)", + "imageFieldDescription": "노드 간에 이미지를 전달할 수 있습니다.", + "outputNode": "출력노드", + "addNodeToolTip": "노드 추가(Shift+A, Space)", + "collectionOrScalarFieldType": "{{name}} 컬렉션|Scalar", + "nodeVersion": "노드 버전", + "loadingNodes": "노드 로딩중...", + "mainModelFieldDescription": "해야 할 일", + "loRAModelField": "LoRA", + "deletedInvalidEdge": "잘못된 모서리 {{source}} -> {{target}} 삭제", + "latentsCollectionDescription": "노드 사이에 Latents를 전달할 수 있습니다.", + "oNNXModelFieldDescription": "ONNX 모델 필드.", + "imageCollection": "이미지 컬렉션" + }, + "queue": { + "status": "상태", + "pruneSucceeded": "Queue로부터 {{item_count}} 완성된 항목 잘라내기", + "cancelTooltip": "현재 항목 취소", + "queueEmpty": "비어있는 Queue", + "pauseSucceeded": "중지된 프로세서", + "in_progress": "진행 중", + "queueFront": "Front of Queue에 추가", + "notReady": "Queue를 생성할 수 없음", + "batchFailedToQueue": "Queue Batch에 실패", + "completed": "완성된", + "queueBack": "Queue에 추가", + "batchValues": "Batch 값들", + "cancelFailed": "항목 취소 중 발생한 문제", + "queueCountPrediction": "Queue에 {{predicted}} 추가", + "batchQueued": "Batch Queued", + "pauseFailed": "프로세서 중지 중 발생한 문제", + "clearFailed": "Queue 제거 중 발생한 문제", + "queuedCount": "{{pending}} Pending", + "front": "front", + "clearSucceeded": "제거된 Queue", + "pause": "중지", + "pruneTooltip": "{{item_count}} 완성된 항목 잘라내기", + "cancelSucceeded": "취소된 항목", + "batchQueuedDesc_other": "queue의 {{direction}}에 추가된 {{count}}세션", + "queue": "Queue", + "batch": "Batch", + "clearQueueAlertDialog": "Queue를 지우면 처리 항목이 즉시 취소되고 Queue가 완전히 지워집니다.", + "resumeFailed": "프로세서 재개 중 발생한 문제", + "clear": "제거하다", + "prune": "잘라내다", + "total": "총 개수", + "canceled": "취소된", + "pruneFailed": "Queue 잘라내는 중 발생한 문제", + "cancelBatchSucceeded": "취소된 Batch", + "clearTooltip": "모든 항목을 취소하고 제거", + "current": "최근", + "pauseTooltip": "프로세서 중지", + "failed": "실패한", + "cancelItem": "항목 취소", + "next": "다음", + "cancelBatch": "Batch 취소", + "back": "back", + "batchFieldValues": "Batch 필드 값들", + "cancel": "취소", + "session": "세션", + "time": "시간", + "queueTotal": "{{total}} Total", + "resumeSucceeded": "재개된 프로세서", + "enqueueing": "Queueing Batch", + "resumeTooltip": "프로세서 재개", + "resume": "재개", + "cancelBatchFailed": "Batch 취소 중 발생한 문제", + "clearQueueAlertDialog2": "Queue를 지우시겠습니까?", + "item": "항목", + "graphFailedToQueue": "queue graph에 실패" + }, + "metadata": { + "positivePrompt": "긍정적 프롬프트", + "negativePrompt": "부정적인 프롬프트", + "generationMode": "Generation Mode", + "Threshold": "Noise Threshold", + "metadata": "Metadata", + "seed": "시드", + "imageDetails": "이미지 세부 정보", + "perlin": "Perlin Noise", + "model": "모델", + "noImageDetails": "이미지 세부 정보를 찾을 수 없습니다", + "hiresFix": "고해상도 최적화", + "cfgScale": "CFG scale", + "initImage": "초기이미지", + "recallParameters": "매개변수 호출", + "height": "Height", + "variations": "Seed-weight 쌍", + "noMetaData": "metadata를 찾을 수 없습니다", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)", + "width": "너비", + "vae": "VAE", + "createdBy": "~에 의해 생성된", + "workflow": "작업의 흐름", + "steps": "단계", + "scheduler": "스케줄러", + "noRecallParameters": "호출할 매개 변수가 없습니다" + }, + "invocationCache": { + "useCache": "캐시 사용", + "disable": "이용 불가능한", + "misses": "캐시 미스", + "enableFailed": "Invocation 캐시를 사용하도록 설정하는 중 발생한 문제", + "invocationCache": "Invocation 캐시", + "clearSucceeded": "제거된 Invocation 캐시", + "enableSucceeded": "이용 가능한 Invocation 캐시", + "clearFailed": "Invocation 캐시 제거 중 발생한 문제", + "hits": "캐시 적중", + "disableSucceeded": "이용 불가능한 Invocation 캐시", + "disableFailed": "Invocation 캐시를 이용하지 못하게 설정 중 발생한 문제", + "enable": "이용 가능한", + "clear": "제거", + "maxCacheSize": "최대 캐시 크기", + "cacheSize": "캐시 크기" + }, + "embedding": { + "noEmbeddingsLoaded": "불러온 Embeddings이 없음", + "noMatchingEmbedding": "일치하는 Embeddings이 없음", + "addEmbedding": "Embedding 추가", + "incompatibleModel": "호환되지 않는 기본 모델:" + }, + "hrf": { + "enableHrf": "이용 가능한 고해상도 고정", + "upscaleMethod": "업스케일 방법", + "enableHrfTooltip": "낮은 초기 해상도로 생성하고 기본 해상도로 업스케일한 다음 Image-to-Image를 실행합니다.", + "metadata": { + "strength": "고해상도 고정 강도", + "enabled": "고해상도 고정 사용", + "method": "고해상도 고정 방법" + }, + "hrf": "고해상도 고정", + "hrfStrength": "고해상도 고정 강도" + }, + "models": { + "noLoRAsLoaded": "로드된 LoRA 없음", + "noMatchingModels": "일치하는 모델 없음", + "esrganModel": "ESRGAN 모델", + "loading": "로딩중", + "noMatchingLoRAs": "일치하는 LoRA 없음", + "noLoRAsAvailable": "사용 가능한 LoRA 없음", + "noModelsAvailable": "사용 가능한 모델이 없음", + "addLora": "LoRA 추가", + "selectModel": "모델 선택", + "noRefinerModelsInstalled": "SDXL Refiner 모델이 설치되지 않음", + "noLoRAsInstalled": "설치된 LoRA 없음", + "selectLoRA": "LoRA 선택" + }, + "boards": { + "autoAddBoard": "자동 추가 Board", + "topMessage": "이 보드에는 다음 기능에 사용되는 이미지가 포함되어 있습니다:", + "move": "이동", + "menuItemAutoAdd": "해당 Board에 자동 추가", + "myBoard": "나의 Board", + "searchBoard": "Board 찾는 중...", + "deleteBoardOnly": "Board만 삭제", + "noMatching": "일치하는 Board들이 없음", + "movingImagesToBoard_other": "{{count}}이미지를 Board로 이동시키기", + "selectBoard": "Board 선택", + "cancel": "취소", + "addBoard": "Board 추가", + "bottomMessage": "이 보드와 이미지를 삭제하면 현재 사용 중인 모든 기능이 재설정됩니다.", + "uncategorized": "미분류", + "downloadBoard": "Board 다운로드", + "changeBoard": "Board 바꾸기", + "loading": "불러오는 중...", + "clearSearch": "검색 지우기", + "deleteBoard": "Board 삭제", + "deleteBoardAndImages": "Board와 이미지 삭제", + "deletedBoardsCannotbeRestored": "삭제된 Board는 복원할 수 없습니다" + } +} diff --git a/invokeai/frontend/web/dist/locales/mn.json b/invokeai/frontend/web/dist/locales/mn.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/mn.json @@ -0,0 +1 @@ +{} diff --git a/invokeai/frontend/web/dist/locales/nl.json b/invokeai/frontend/web/dist/locales/nl.json new file mode 100644 index 0000000000..6be48de918 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/nl.json @@ -0,0 +1,1504 @@ +{ + "common": { + "hotkeysLabel": "Sneltoetsen", + "languagePickerLabel": "Taal", + "reportBugLabel": "Meld bug", + "settingsLabel": "Instellingen", + "img2img": "Afbeelding naar afbeelding", + "unifiedCanvas": "Centraal canvas", + "nodes": "Werkstroom-editor", + "langDutch": "Nederlands", + "nodesDesc": "Een op knooppunten gebaseerd systeem voor het genereren van afbeeldingen is momenteel in ontwikkeling. Blijf op de hoogte voor nieuws over deze verbluffende functie.", + "postProcessing": "Naverwerking", + "postProcessDesc1": "Invoke AI biedt een breed scala aan naverwerkingsfuncties. Afbeeldingsopschaling en Gezichtsherstel zijn al beschikbaar in de web-UI. Je kunt ze openen via het menu Uitgebreide opties in de tabbladen Tekst naar afbeelding en Afbeelding naar afbeelding. Je kunt een afbeelding ook direct verwerken via de afbeeldingsactieknoppen boven de weergave van de huidigde afbeelding of in de Viewer.", + "postProcessDesc2": "Een individuele gebruikersinterface voor uitgebreidere naverwerkingsworkflows.", + "postProcessDesc3": "De opdrachtregelinterface van InvokeAI biedt diverse andere functies, waaronder Embiggen.", + "trainingDesc1": "Een individuele workflow in de webinterface voor het trainen van je eigen embeddings en checkpoints via Textual Inversion en Dreambooth.", + "trainingDesc2": "InvokeAI ondersteunt al het trainen van eigen embeddings via Textual Inversion via het hoofdscript.", + "upload": "Upload", + "close": "Sluit", + "load": "Laad", + "statusConnected": "Verbonden", + "statusDisconnected": "Niet verbonden", + "statusError": "Fout", + "statusPreparing": "Voorbereiden", + "statusProcessingCanceled": "Verwerking geannuleerd", + "statusProcessingComplete": "Verwerking voltooid", + "statusGenerating": "Genereren", + "statusGeneratingTextToImage": "Genereren van tekst naar afbeelding", + "statusGeneratingImageToImage": "Genereren van afbeelding naar afbeelding", + "statusGeneratingInpainting": "Genereren van Inpainting", + "statusGeneratingOutpainting": "Genereren van Outpainting", + "statusGenerationComplete": "Genereren voltooid", + "statusIterationComplete": "Iteratie voltooid", + "statusSavingImage": "Afbeelding bewaren", + "statusRestoringFaces": "Gezichten herstellen", + "statusRestoringFacesGFPGAN": "Gezichten herstellen (GFPGAN)", + "statusRestoringFacesCodeFormer": "Gezichten herstellen (CodeFormer)", + "statusUpscaling": "Opschaling", + "statusUpscalingESRGAN": "Opschaling (ESRGAN)", + "statusLoadingModel": "Laden van model", + "statusModelChanged": "Model gewijzigd", + "githubLabel": "Github", + "discordLabel": "Discord", + "langArabic": "Arabisch", + "langEnglish": "Engels", + "langFrench": "Frans", + "langGerman": "Duits", + "langItalian": "Italiaans", + "langJapanese": "Japans", + "langPolish": "Pools", + "langBrPortuguese": "Portugees (Brazilië)", + "langRussian": "Russisch", + "langSimplifiedChinese": "Chinees (vereenvoudigd)", + "langUkranian": "Oekraïens", + "langSpanish": "Spaans", + "training": "Training", + "back": "Terug", + "statusConvertingModel": "Omzetten van model", + "statusModelConverted": "Model omgezet", + "statusMergingModels": "Samenvoegen van modellen", + "statusMergedModels": "Modellen samengevoegd", + "cancel": "Annuleer", + "accept": "Akkoord", + "langPortuguese": "Portugees", + "loading": "Bezig met laden", + "loadingInvokeAI": "Bezig met laden van Invoke AI", + "langHebrew": "עברית", + "langKorean": "한국어", + "txt2img": "Tekst naar afbeelding", + "postprocessing": "Naverwerking", + "dontAskMeAgain": "Vraag niet opnieuw", + "imagePrompt": "Afbeeldingsprompt", + "random": "Willekeurig", + "generate": "Genereer", + "openInNewTab": "Open in nieuw tabblad", + "areYouSure": "Weet je het zeker?", + "linear": "Lineair", + "batch": "Seriebeheer", + "modelManager": "Modelbeheer", + "darkMode": "Donkere modus", + "lightMode": "Lichte modus", + "communityLabel": "Gemeenschap", + "t2iAdapter": "T2I-adapter", + "on": "Aan", + "nodeEditor": "Knooppunteditor", + "ipAdapter": "IP-adapter", + "controlAdapter": "Control-adapter", + "auto": "Autom.", + "controlNet": "ControlNet", + "statusProcessing": "Bezig met verwerken", + "imageFailedToLoad": "Kan afbeelding niet laden", + "learnMore": "Meer informatie", + "advanced": "Uitgebreid" + }, + "gallery": { + "generations": "Gegenereerde afbeeldingen", + "showGenerations": "Toon gegenereerde afbeeldingen", + "uploads": "Uploads", + "showUploads": "Toon uploads", + "galleryImageSize": "Afbeeldingsgrootte", + "galleryImageResetSize": "Herstel grootte", + "gallerySettings": "Instellingen galerij", + "maintainAspectRatio": "Behoud beeldverhoiding", + "autoSwitchNewImages": "Wissel autom. naar nieuwe afbeeldingen", + "singleColumnLayout": "Eenkolomsindeling", + "allImagesLoaded": "Alle afbeeldingen geladen", + "loadMore": "Laad meer", + "noImagesInGallery": "Geen afbeeldingen om te tonen", + "deleteImage": "Verwijder afbeelding", + "deleteImageBin": "Verwijderde afbeeldingen worden naar de prullenbak van je besturingssysteem gestuurd.", + "deleteImagePermanent": "Verwijderde afbeeldingen kunnen niet worden hersteld.", + "assets": "Eigen onderdelen", + "autoAssignBoardOnClick": "Ken automatisch bord toe bij klikken", + "featuresWillReset": "Als je deze afbeelding verwijdert, dan worden deze functies onmiddellijk teruggezet.", + "loading": "Bezig met laden", + "unableToLoad": "Kan galerij niet laden", + "preparingDownload": "Bezig met voorbereiden van download", + "preparingDownloadFailed": "Fout bij voorbereiden van download", + "downloadSelection": "Download selectie", + "currentlyInUse": "Deze afbeelding is momenteel in gebruik door de volgende functies:", + "copy": "Kopieer", + "download": "Download", + "setCurrentImage": "Stel in als huidige afbeelding" + }, + "hotkeys": { + "keyboardShortcuts": "Sneltoetsen", + "appHotkeys": "Appsneltoetsen", + "generalHotkeys": "Algemene sneltoetsen", + "galleryHotkeys": "Sneltoetsen galerij", + "unifiedCanvasHotkeys": "Sneltoetsen centraal canvas", + "invoke": { + "title": "Genereer", + "desc": "Genereert een afbeelding" + }, + "cancel": { + "title": "Annuleer", + "desc": "Annuleert het genereren van een afbeelding" + }, + "focusPrompt": { + "title": "Focus op invoer", + "desc": "Legt de focus op het invoertekstvak" + }, + "toggleOptions": { + "title": "Open/sluit Opties", + "desc": "Opent of sluit het deelscherm Opties" + }, + "pinOptions": { + "title": "Zet Opties vast", + "desc": "Zet het deelscherm Opties vast" + }, + "toggleViewer": { + "title": "Zet Viewer vast", + "desc": "Opent of sluit Afbeeldingsviewer" + }, + "toggleGallery": { + "title": "Zet Galerij vast", + "desc": "Opent of sluit het deelscherm Galerij" + }, + "maximizeWorkSpace": { + "title": "Maximaliseer werkgebied", + "desc": "Sluit deelschermen en maximaliseer het werkgebied" + }, + "changeTabs": { + "title": "Wissel van tabblad", + "desc": "Wissel naar een ander werkgebied" + }, + "consoleToggle": { + "title": "Open/sluit console", + "desc": "Opent of sluit de console" + }, + "setPrompt": { + "title": "Stel invoertekst in", + "desc": "Gebruikt de invoertekst van de huidige afbeelding" + }, + "setSeed": { + "title": "Stel seed in", + "desc": "Gebruikt de seed van de huidige afbeelding" + }, + "setParameters": { + "title": "Stel parameters in", + "desc": "Gebruikt alle parameters van de huidige afbeelding" + }, + "restoreFaces": { + "title": "Herstel gezichten", + "desc": "Herstelt de huidige afbeelding" + }, + "upscale": { + "title": "Schaal op", + "desc": "Schaalt de huidige afbeelding op" + }, + "showInfo": { + "title": "Toon info", + "desc": "Toont de metagegevens van de huidige afbeelding" + }, + "sendToImageToImage": { + "title": "Stuur naar Afbeelding naar afbeelding", + "desc": "Stuurt de huidige afbeelding naar Afbeelding naar afbeelding" + }, + "deleteImage": { + "title": "Verwijder afbeelding", + "desc": "Verwijdert de huidige afbeelding" + }, + "closePanels": { + "title": "Sluit deelschermen", + "desc": "Sluit geopende deelschermen" + }, + "previousImage": { + "title": "Vorige afbeelding", + "desc": "Toont de vorige afbeelding in de galerij" + }, + "nextImage": { + "title": "Volgende afbeelding", + "desc": "Toont de volgende afbeelding in de galerij" + }, + "toggleGalleryPin": { + "title": "Zet galerij vast/los", + "desc": "Zet de galerij vast of los aan de gebruikersinterface" + }, + "increaseGalleryThumbSize": { + "title": "Vergroot afbeeldingsgrootte galerij", + "desc": "Vergroot de grootte van de galerijminiaturen" + }, + "decreaseGalleryThumbSize": { + "title": "Verklein afbeeldingsgrootte galerij", + "desc": "Verkleint de grootte van de galerijminiaturen" + }, + "selectBrush": { + "title": "Kies penseel", + "desc": "Kiest de penseel op het canvas" + }, + "selectEraser": { + "title": "Kies gum", + "desc": "Kiest de gum op het canvas" + }, + "decreaseBrushSize": { + "title": "Verklein penseelgrootte", + "desc": "Verkleint de grootte van het penseel/gum op het canvas" + }, + "increaseBrushSize": { + "title": "Vergroot penseelgrootte", + "desc": "Vergroot de grootte van het penseel/gum op het canvas" + }, + "decreaseBrushOpacity": { + "title": "Verlaag ondoorzichtigheid penseel", + "desc": "Verlaagt de ondoorzichtigheid van de penseel op het canvas" + }, + "increaseBrushOpacity": { + "title": "Verhoog ondoorzichtigheid penseel", + "desc": "Verhoogt de ondoorzichtigheid van de penseel op het canvas" + }, + "moveTool": { + "title": "Verplaats canvas", + "desc": "Maakt canvasnavigatie mogelijk" + }, + "fillBoundingBox": { + "title": "Vul tekenvak", + "desc": "Vult het tekenvak met de penseelkleur" + }, + "eraseBoundingBox": { + "title": "Wis tekenvak", + "desc": "Wist het gebied van het tekenvak" + }, + "colorPicker": { + "title": "Kleurkiezer", + "desc": "Opent de kleurkiezer op het canvas" + }, + "toggleSnap": { + "title": "Zet uitlijnen aan/uit", + "desc": "Zet uitlijnen op raster aan/uit" + }, + "quickToggleMove": { + "title": "Verplaats canvas even", + "desc": "Verplaats kortstondig het canvas" + }, + "toggleLayer": { + "title": "Zet laag aan/uit", + "desc": "Wisselt tussen de masker- en basislaag" + }, + "clearMask": { + "title": "Wis masker", + "desc": "Wist het volledig masker" + }, + "hideMask": { + "title": "Toon/verberg masker", + "desc": "Toont of verbegt het masker" + }, + "showHideBoundingBox": { + "title": "Toon/verberg tekenvak", + "desc": "Wisselt de zichtbaarheid van het tekenvak" + }, + "mergeVisible": { + "title": "Voeg lagen samen", + "desc": "Voegt alle zichtbare lagen op het canvas samen" + }, + "saveToGallery": { + "title": "Bewaar in galerij", + "desc": "Bewaart het huidige canvas in de galerij" + }, + "copyToClipboard": { + "title": "Kopieer naar klembord", + "desc": "Kopieert het huidige canvas op het klembord" + }, + "downloadImage": { + "title": "Download afbeelding", + "desc": "Downloadt het huidige canvas" + }, + "undoStroke": { + "title": "Maak streek ongedaan", + "desc": "Maakt een penseelstreek ongedaan" + }, + "redoStroke": { + "title": "Herhaal streek", + "desc": "Voert een ongedaan gemaakte penseelstreek opnieuw uit" + }, + "resetView": { + "title": "Herstel weergave", + "desc": "Herstelt de canvasweergave" + }, + "previousStagingImage": { + "title": "Vorige sessie-afbeelding", + "desc": "Bladert terug naar de vorige afbeelding in het sessiegebied" + }, + "nextStagingImage": { + "title": "Volgende sessie-afbeelding", + "desc": "Bladert vooruit naar de volgende afbeelding in het sessiegebied" + }, + "acceptStagingImage": { + "title": "Accepteer sessie-afbeelding", + "desc": "Accepteert de huidige sessie-afbeelding" + }, + "addNodes": { + "title": "Voeg knooppunten toe", + "desc": "Opent het menu Voeg knooppunt toe" + }, + "nodesHotkeys": "Sneltoetsen knooppunten" + }, + "modelManager": { + "modelManager": "Modelonderhoud", + "model": "Model", + "modelAdded": "Model toegevoegd", + "modelUpdated": "Model bijgewerkt", + "modelEntryDeleted": "Modelregel verwijderd", + "cannotUseSpaces": "Spaties zijn niet toegestaan", + "addNew": "Voeg nieuwe toe", + "addNewModel": "Voeg nieuw model toe", + "addManually": "Voeg handmatig toe", + "manual": "Handmatig", + "name": "Naam", + "nameValidationMsg": "Geef een naam voor je model", + "description": "Beschrijving", + "descriptionValidationMsg": "Voeg een beschrijving toe voor je model", + "config": "Configuratie", + "configValidationMsg": "Pad naar het configuratiebestand van je model.", + "modelLocation": "Locatie model", + "modelLocationValidationMsg": "Geef het pad naar een lokale map waar je Diffusers-model wordt bewaard", + "vaeLocation": "Locatie VAE", + "vaeLocationValidationMsg": "Pad naar waar je VAE zich bevindt.", + "width": "Breedte", + "widthValidationMsg": "Standaardbreedte van je model.", + "height": "Hoogte", + "heightValidationMsg": "Standaardhoogte van je model.", + "addModel": "Voeg model toe", + "updateModel": "Werk model bij", + "availableModels": "Beschikbare modellen", + "search": "Zoek", + "load": "Laad", + "active": "actief", + "notLoaded": "niet geladen", + "cached": "gecachet", + "checkpointFolder": "Checkpointmap", + "clearCheckpointFolder": "Wis checkpointmap", + "findModels": "Zoek modellen", + "scanAgain": "Kijk opnieuw", + "modelsFound": "Gevonden modellen", + "selectFolder": "Kies map", + "selected": "Gekozen", + "selectAll": "Kies alles", + "deselectAll": "Kies niets", + "showExisting": "Toon bestaande", + "addSelected": "Voeg gekozen toe", + "modelExists": "Model bestaat", + "selectAndAdd": "Kies en voeg de hieronder opgesomde modellen toe", + "noModelsFound": "Geen modellen gevonden", + "delete": "Verwijder", + "deleteModel": "Verwijder model", + "deleteConfig": "Verwijder configuratie", + "deleteMsg1": "Weet je zeker dat je dit model wilt verwijderen uit InvokeAI?", + "deleteMsg2": "Hiermee ZAL het model van schijf worden verwijderd als het zich bevindt in de beginmap van InvokeAI. Als je het model vanaf een eigen locatie gebruikt, dan ZAL het model NIET van schijf worden verwijderd.", + "formMessageDiffusersVAELocationDesc": "Indien niet opgegeven, dan zal InvokeAI kijken naar het VAE-bestand in de hierboven gegeven modellocatie.", + "repoIDValidationMsg": "Online repository van je model", + "formMessageDiffusersModelLocation": "Locatie Diffusers-model", + "convertToDiffusersHelpText3": "Je checkpoint-bestand op de schijf ZAL worden verwijderd als het zich in de beginmap van InvokeAI bevindt. Het ZAL NIET worden verwijderd als het zich in een andere locatie bevindt.", + "convertToDiffusersHelpText6": "Wil je dit model omzetten?", + "allModels": "Alle modellen", + "checkpointModels": "Checkpoints", + "safetensorModels": "SafeTensors", + "addCheckpointModel": "Voeg Checkpoint-/SafeTensor-model toe", + "addDiffuserModel": "Voeg Diffusers-model toe", + "diffusersModels": "Diffusers", + "repo_id": "Repo-id", + "vaeRepoID": "Repo-id VAE", + "vaeRepoIDValidationMsg": "Online repository van je VAE", + "formMessageDiffusersModelLocationDesc": "Voer er minimaal een in.", + "formMessageDiffusersVAELocation": "Locatie VAE", + "convert": "Omzetten", + "convertToDiffusers": "Omzetten naar Diffusers", + "convertToDiffusersHelpText1": "Dit model wordt omgezet naar de🧨 Diffusers-indeling.", + "convertToDiffusersHelpText2": "Dit proces vervangt het onderdeel in Modelonderhoud met de Diffusers-versie van hetzelfde model.", + "convertToDiffusersHelpText4": "Dit is een eenmalig proces. Dit neemt ongeveer 30 tot 60 sec. in beslag, afhankelijk van de specificaties van je computer.", + "convertToDiffusersHelpText5": "Zorg ervoor dat je genoeg schijfruimte hebt. Modellen nemen gewoonlijk ongeveer 2 tot 7 GB ruimte in beslag.", + "convertToDiffusersSaveLocation": "Bewaarlocatie", + "v1": "v1", + "inpainting": "v1-inpainting", + "customConfig": "Eigen configuratie", + "pathToCustomConfig": "Pad naar eigen configuratie", + "statusConverting": "Omzetten", + "modelConverted": "Model omgezet", + "sameFolder": "Dezelfde map", + "invokeRoot": "InvokeAI-map", + "custom": "Eigen", + "customSaveLocation": "Eigen bewaarlocatie", + "merge": "Samenvoegen", + "modelsMerged": "Modellen samengevoegd", + "mergeModels": "Voeg modellen samen", + "modelOne": "Model 1", + "modelTwo": "Model 2", + "modelThree": "Model 3", + "mergedModelName": "Samengevoegde modelnaam", + "alpha": "Alfa", + "interpolationType": "Soort interpolatie", + "mergedModelSaveLocation": "Bewaarlocatie", + "mergedModelCustomSaveLocation": "Eigen pad", + "invokeAIFolder": "InvokeAI-map", + "ignoreMismatch": "Negeer discrepanties tussen gekozen modellen", + "modelMergeHeaderHelp1": "Je kunt tot drie verschillende modellen samenvoegen om een mengvorm te maken die aan je behoeften voldoet.", + "modelMergeHeaderHelp2": "Alleen Diffusers kunnen worden samengevoegd. Als je een Checkpointmodel wilt samenvoegen, zet deze eerst om naar Diffusers.", + "modelMergeAlphaHelp": "Alfa stuurt de mengsterkte aan voor de modellen. Lagere alfawaarden leiden tot een kleinere invloed op het tweede model.", + "modelMergeInterpAddDifferenceHelp": "In deze stand wordt model 3 eerst van model 2 afgehaald. Wat daar uitkomt wordt gemengd met model 1, gebruikmakend van de hierboven ingestelde alfawaarde.", + "inverseSigmoid": "Keer Sigmoid om", + "sigmoid": "Sigmoid", + "weightedSum": "Gewogen som", + "v2_base": "v2 (512px)", + "v2_768": "v2 (768px)", + "none": "geen", + "addDifference": "Voeg verschil toe", + "scanForModels": "Scan naar modellen", + "pickModelType": "Kies modelsoort", + "baseModel": "Basismodel", + "vae": "VAE", + "variant": "Variant", + "modelConversionFailed": "Omzetten model mislukt", + "modelUpdateFailed": "Bijwerken model mislukt", + "modelsMergeFailed": "Samenvoegen model mislukt", + "selectModel": "Kies model", + "settings": "Instellingen", + "modelDeleted": "Model verwijderd", + "noCustomLocationProvided": "Geen Aangepaste Locatie Opgegeven", + "syncModels": "Synchroniseer Modellen", + "modelsSynced": "Modellen Gesynchroniseerd", + "modelSyncFailed": "Synchronisatie modellen mislukt", + "modelDeleteFailed": "Model kon niet verwijderd worden", + "convertingModelBegin": "Model aan het converteren. Even geduld.", + "importModels": "Importeer Modellen", + "syncModelsDesc": "Als je modellen niet meer synchroon zijn met de backend, kan je ze met deze optie vernieuwen. Dit wordt meestal gebruikt in het geval je het bestand models.yaml met de hand bewerkt of als je modellen aan de beginmap van InvokeAI toevoegt nadat de applicatie gestart is.", + "loraModels": "LoRA's", + "onnxModels": "Onnx", + "oliveModels": "Olives", + "noModels": "Geen modellen gevonden", + "predictionType": "Soort voorspelling (voor Stable Diffusion 2.x-modellen en incidentele Stable Diffusion 1.x-modellen)", + "quickAdd": "Voeg snel toe", + "simpleModelDesc": "Geef een pad naar een lokaal Diffusers-model, lokale-checkpoint- / safetensors-model, een HuggingFace-repo-ID of een url naar een checkpoint- / Diffusers-model.", + "advanced": "Uitgebreid", + "useCustomConfig": "Gebruik eigen configuratie", + "closeAdvanced": "Sluit uitgebreid", + "modelType": "Soort model", + "customConfigFileLocation": "Locatie eigen configuratiebestand", + "vaePrecision": "Nauwkeurigheid VAE" + }, + "parameters": { + "images": "Afbeeldingen", + "steps": "Stappen", + "cfgScale": "CFG-schaal", + "width": "Breedte", + "height": "Hoogte", + "seed": "Seed", + "randomizeSeed": "Willekeurige seed", + "shuffle": "Mengseed", + "noiseThreshold": "Drempelwaarde ruis", + "perlinNoise": "Perlinruis", + "variations": "Variaties", + "variationAmount": "Hoeveelheid variatie", + "seedWeights": "Gewicht seed", + "faceRestoration": "Gezichtsherstel", + "restoreFaces": "Herstel gezichten", + "type": "Soort", + "strength": "Sterkte", + "upscaling": "Opschalen", + "upscale": "Vergroot (Shift + U)", + "upscaleImage": "Schaal afbeelding op", + "scale": "Schaal", + "otherOptions": "Andere opties", + "seamlessTiling": "Naadloze tegels", + "hiresOptim": "Hogeresolutie-optimalisatie", + "imageFit": "Pas initiële afbeelding in uitvoergrootte", + "codeformerFidelity": "Getrouwheid", + "scaleBeforeProcessing": "Schalen voor verwerking", + "scaledWidth": "Geschaalde B", + "scaledHeight": "Geschaalde H", + "infillMethod": "Infill-methode", + "tileSize": "Grootte tegel", + "boundingBoxHeader": "Tekenvak", + "seamCorrectionHeader": "Correctie naad", + "infillScalingHeader": "Infill en schaling", + "img2imgStrength": "Sterkte Afbeelding naar afbeelding", + "toggleLoopback": "Zet recursieve verwerking aan/uit", + "sendTo": "Stuur naar", + "sendToImg2Img": "Stuur naar Afbeelding naar afbeelding", + "sendToUnifiedCanvas": "Stuur naar Centraal canvas", + "copyImageToLink": "Stuur afbeelding naar koppeling", + "downloadImage": "Download afbeelding", + "openInViewer": "Open in Viewer", + "closeViewer": "Sluit Viewer", + "usePrompt": "Hergebruik invoertekst", + "useSeed": "Hergebruik seed", + "useAll": "Hergebruik alles", + "useInitImg": "Gebruik initiële afbeelding", + "info": "Info", + "initialImage": "Initiële afbeelding", + "showOptionsPanel": "Toon deelscherm Opties (O of T)", + "symmetry": "Symmetrie", + "hSymmetryStep": "Stap horiz. symmetrie", + "vSymmetryStep": "Stap vert. symmetrie", + "cancel": { + "immediate": "Annuleer direct", + "isScheduled": "Annuleren", + "setType": "Stel annuleervorm in", + "schedule": "Annuleer na huidige iteratie", + "cancel": "Annuleer" + }, + "general": "Algemeen", + "copyImage": "Kopieer afbeelding", + "imageToImage": "Afbeelding naar afbeelding", + "denoisingStrength": "Sterkte ontruisen", + "hiresStrength": "Sterkte hogere resolutie", + "scheduler": "Planner", + "noiseSettings": "Ruis", + "seamlessXAxis": "X-as", + "seamlessYAxis": "Y-as", + "hidePreview": "Verberg voorvertoning", + "showPreview": "Toon voorvertoning", + "boundingBoxWidth": "Tekenvak breedte", + "boundingBoxHeight": "Tekenvak hoogte", + "clipSkip": "Overslaan CLIP", + "aspectRatio": "Beeldverhouding", + "negativePromptPlaceholder": "Negatieve prompt", + "controlNetControlMode": "Aansturingsmodus", + "positivePromptPlaceholder": "Positieve prompt", + "maskAdjustmentsHeader": "Maskeraanpassingen", + "compositingSettingsHeader": "Instellingen afbeeldingsopbouw", + "coherencePassHeader": "Coherentiestap", + "maskBlur": "Vervaag", + "maskBlurMethod": "Vervagingsmethode", + "coherenceSteps": "Stappen", + "coherenceStrength": "Sterkte", + "seamHighThreshold": "Hoog", + "seamLowThreshold": "Laag", + "invoke": { + "noNodesInGraph": "Geen knooppunten in graaf", + "noModelSelected": "Geen model ingesteld", + "invoke": "Start", + "noPrompts": "Geen prompts gegenereerd", + "systemBusy": "Systeem is bezig", + "noInitialImageSelected": "Geen initiële afbeelding gekozen", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} invoer ontbreekt", + "noControlImageForControlAdapter": "Controle-adapter #{{number}} heeft geen controle-afbeelding", + "noModelForControlAdapter": "Control-adapter #{{number}} heeft geen model ingesteld staan.", + "unableToInvoke": "Kan niet starten", + "incompatibleBaseModelForControlAdapter": "Model van controle-adapter #{{number}} is ongeldig in combinatie met het hoofdmodel.", + "systemDisconnected": "Systeem is niet verbonden", + "missingNodeTemplate": "Knooppuntsjabloon ontbreekt", + "readyToInvoke": "Klaar om te starten", + "missingFieldTemplate": "Veldsjabloon ontbreekt", + "addingImagesTo": "Bezig met toevoegen van afbeeldingen aan" + }, + "seamlessX&Y": "Naadloos X en Y", + "isAllowedToUpscale": { + "useX2Model": "Afbeelding is te groot om te vergroten met het x4-model. Gebruik hiervoor het x2-model", + "tooLarge": "Afbeelding is te groot om te vergoten. Kies een kleinere afbeelding" + }, + "aspectRatioFree": "Vrij", + "cpuNoise": "CPU-ruis", + "patchmatchDownScaleSize": "Verklein", + "gpuNoise": "GPU-ruis", + "seamlessX": "Naadloos X", + "useCpuNoise": "Gebruik CPU-ruis", + "clipSkipWithLayerCount": "Overslaan CLIP {{layerCount}}", + "seamlessY": "Naadloos Y", + "manualSeed": "Handmatige seedwaarde", + "imageActions": "Afbeeldingshandeling", + "randomSeed": "Willekeurige seedwaarde", + "iterations": "Iteraties", + "iterationsWithCount_one": "{{count}} iteratie", + "iterationsWithCount_other": "{{count}} iteraties", + "enableNoiseSettings": "Schakel ruisinstellingen in", + "coherenceMode": "Modus" + }, + "settings": { + "models": "Modellen", + "displayInProgress": "Toon voortgangsafbeeldingen", + "saveSteps": "Bewaar afbeeldingen elke n stappen", + "confirmOnDelete": "Bevestig bij verwijderen", + "displayHelpIcons": "Toon hulppictogrammen", + "enableImageDebugging": "Schakel foutopsporing afbeelding in", + "resetWebUI": "Herstel web-UI", + "resetWebUIDesc1": "Herstel web-UI herstelt alleen de lokale afbeeldingscache en de onthouden instellingen van je browser. Het verwijdert geen afbeeldingen van schijf.", + "resetWebUIDesc2": "Als afbeeldingen niet getoond worden in de galerij of iets anders werkt niet, probeer dan eerst deze herstelfunctie voordat je een fout aanmeldt op GitHub.", + "resetComplete": "Webinterface is hersteld.", + "useSlidersForAll": "Gebruik schuifbalken voor alle opties", + "consoleLogLevel": "Niveau logboek", + "shouldLogToConsole": "Schrijf logboek naar console", + "developer": "Ontwikkelaar", + "general": "Algemeen", + "showProgressInViewer": "Toon voortgangsafbeeldingen in viewer", + "generation": "Genereren", + "ui": "Gebruikersinterface", + "antialiasProgressImages": "Voer anti-aliasing uit op voortgangsafbeeldingen", + "showAdvancedOptions": "Toon uitgebreide opties", + "favoriteSchedulers": "Favoriete planners", + "favoriteSchedulersPlaceholder": "Geen favoriete planners ingesteld", + "beta": "Bèta", + "experimental": "Experimenteel", + "alternateCanvasLayout": "Omwisselen Canvas Layout", + "enableNodesEditor": "Schakel Knooppunteditor in", + "autoChangeDimensions": "Werk B/H bij naar modelstandaard bij wijziging", + "clearIntermediates": "Wis tussentijdse afbeeldingen", + "clearIntermediatesDesc3": "Je galerijafbeeldingen zullen niet worden verwijderd.", + "clearIntermediatesWithCount_one": "Wis {{count}} tussentijdse afbeelding", + "clearIntermediatesWithCount_other": "Wis {{count}} tussentijdse afbeeldingen", + "clearIntermediatesDesc2": "Tussentijdse afbeeldingen zijn nevenproducten bij het genereren. Deze wijken af van de uitvoerafbeeldingen in de galerij. Als je tussentijdse afbeeldingen wist, wordt schijfruimte vrijgemaakt.", + "intermediatesCleared_one": "{{count}} tussentijdse afbeelding gewist", + "intermediatesCleared_other": "{{count}} tussentijdse afbeeldingen gewist", + "clearIntermediatesDesc1": "Als je tussentijdse afbeeldingen wist, dan wordt de staat hersteld van je canvas en van ControlNet.", + "intermediatesClearedFailed": "Fout bij wissen van tussentijdse afbeeldingen" + }, + "toast": { + "tempFoldersEmptied": "Tijdelijke map geleegd", + "uploadFailed": "Upload mislukt", + "uploadFailedUnableToLoadDesc": "Kan bestand niet laden", + "downloadImageStarted": "Afbeeldingsdownload gestart", + "imageCopied": "Afbeelding gekopieerd", + "imageLinkCopied": "Afbeeldingskoppeling gekopieerd", + "imageNotLoaded": "Geen afbeelding geladen", + "imageNotLoadedDesc": "Geen afbeeldingen gevonden", + "imageSavedToGallery": "Afbeelding opgeslagen naar galerij", + "canvasMerged": "Canvas samengevoegd", + "sentToImageToImage": "Gestuurd naar Afbeelding naar afbeelding", + "sentToUnifiedCanvas": "Gestuurd naar Centraal canvas", + "parametersSet": "Parameters ingesteld", + "parametersNotSet": "Parameters niet ingesteld", + "parametersNotSetDesc": "Geen metagegevens gevonden voor deze afbeelding.", + "parametersFailed": "Fout bij laden van parameters", + "parametersFailedDesc": "Kan initiële afbeelding niet laden.", + "seedSet": "Seed ingesteld", + "seedNotSet": "Seed niet ingesteld", + "seedNotSetDesc": "Kan seed niet vinden voor deze afbeelding.", + "promptSet": "Invoertekst ingesteld", + "promptNotSet": "Invoertekst niet ingesteld", + "promptNotSetDesc": "Kan invoertekst niet vinden voor deze afbeelding.", + "upscalingFailed": "Opschalen mislukt", + "faceRestoreFailed": "Gezichtsherstel mislukt", + "metadataLoadFailed": "Fout bij laden metagegevens", + "initialImageSet": "Initiële afbeelding ingesteld", + "initialImageNotSet": "Initiële afbeelding niet ingesteld", + "initialImageNotSetDesc": "Kan initiële afbeelding niet laden", + "serverError": "Serverfout", + "disconnected": "Verbinding met server verbroken", + "connected": "Verbonden met server", + "canceled": "Verwerking geannuleerd", + "uploadFailedInvalidUploadDesc": "Moet een enkele PNG- of JPEG-afbeelding zijn", + "problemCopyingImageLink": "Kan afbeeldingslink niet kopiëren", + "parameterNotSet": "Parameter niet ingesteld", + "parameterSet": "Instellen parameters", + "nodesSaved": "Knooppunten bewaard", + "nodesLoaded": "Knooppunten geladen", + "nodesLoadedFailed": "Laden knooppunten mislukt", + "problemCopyingImage": "Kan Afbeelding Niet Kopiëren", + "nodesNotValidJSON": "Ongeldige JSON", + "nodesCorruptedGraph": "Kan niet laden. Graph lijkt corrupt.", + "nodesUnrecognizedTypes": "Laden mislukt. Graph heeft onherkenbare types", + "nodesBrokenConnections": "Laden mislukt. Sommige verbindingen zijn verbroken.", + "nodesNotValidGraph": "Geen geldige knooppunten graph", + "baseModelChangedCleared_one": "Basismodel is gewijzigd: {{count}} niet-compatibel submodel weggehaald of uitgeschakeld", + "baseModelChangedCleared_other": "Basismodel is gewijzigd: {{count}} niet-compatibele submodellen weggehaald of uitgeschakeld", + "imageSavingFailed": "Fout bij bewaren afbeelding", + "canvasSentControlnetAssets": "Canvas gestuurd naar ControlNet en Assets", + "problemCopyingCanvasDesc": "Kan basislaag niet exporteren", + "loadedWithWarnings": "Werkstroom geladen met waarschuwingen", + "setInitialImage": "Ingesteld als initiële afbeelding", + "canvasCopiedClipboard": "Canvas gekopieerd naar klembord", + "setControlImage": "Ingesteld als controle-afbeelding", + "setNodeField": "Ingesteld als knooppuntveld", + "problemSavingMask": "Fout bij bewaren masker", + "problemSavingCanvasDesc": "Kan basislaag niet exporteren", + "maskSavedAssets": "Masker bewaard in Assets", + "modelAddFailed": "Fout bij toevoegen model", + "problemDownloadingCanvas": "Fout bij downloaden van canvas", + "problemMergingCanvas": "Fout bij samenvoegen canvas", + "setCanvasInitialImage": "Ingesteld als initiële canvasafbeelding", + "imageUploaded": "Afbeelding geüpload", + "addedToBoard": "Toegevoegd aan bord", + "workflowLoaded": "Werkstroom geladen", + "modelAddedSimple": "Model toegevoegd", + "problemImportingMaskDesc": "Kan masker niet exporteren", + "problemCopyingCanvas": "Fout bij kopiëren canvas", + "problemSavingCanvas": "Fout bij bewaren canvas", + "canvasDownloaded": "Canvas gedownload", + "setIPAdapterImage": "Ingesteld als IP-adapterafbeelding", + "problemMergingCanvasDesc": "Kan basislaag niet exporteren", + "problemDownloadingCanvasDesc": "Kan basislaag niet exporteren", + "problemSavingMaskDesc": "Kan masker niet exporteren", + "imageSaved": "Afbeelding bewaard", + "maskSentControlnetAssets": "Masker gestuurd naar ControlNet en Assets", + "canvasSavedGallery": "Canvas bewaard in galerij", + "imageUploadFailed": "Fout bij uploaden afbeelding", + "modelAdded": "Model toegevoegd: {{modelName}}", + "problemImportingMask": "Fout bij importeren masker" + }, + "tooltip": { + "feature": { + "prompt": "Dit is het invoertekstvak. De invoertekst bevat de te genereren voorwerpen en stylistische termen. Je kunt hiernaast in de invoertekst ook het gewicht (het belang van een trefwoord) toekennen. Opdrachten en parameters voor op de opdrachtregelinterface werken hier niet.", + "gallery": "De galerij toont gegenereerde afbeeldingen uit de uitvoermap nadat ze gegenereerd zijn. Instellingen worden opgeslagen binnen de bestanden zelf en zijn toegankelijk via het contextmenu.", + "other": "Deze opties maken alternative werkingsstanden voor Invoke mogelijk. De optie 'Naadloze tegels' maakt herhalende patronen in de uitvoer. 'Hoge resolutie' genereert in twee stappen via Afbeelding naar afbeelding: gebruik dit als je een grotere en coherentere afbeelding wilt zonder artifacten. Dit zal meer tijd in beslag nemen t.o.v. Tekst naar afbeelding.", + "seed": "Seedwaarden hebben invloed op de initiële ruis op basis waarvan de afbeelding wordt gevormd. Je kunt de al bestaande seeds van eerdere afbeeldingen gebruiken. De waarde 'Drempelwaarde ruis' wordt gebruikt om de hoeveelheid artifacten te verkleinen bij hoge CFG-waarden (beperk je tot 0 - 10). De Perlinruiswaarde wordt gebruikt om Perlinruis toe te voegen bij het genereren: beide dienen als variatie op de uitvoer.", + "variations": "Probeer een variatie met een waarden tussen 0,1 en 1,0 om het resultaat voor een bepaalde seed te beïnvloeden. Interessante seedvariaties ontstaan bij waarden tussen 0,1 en 0,3.", + "upscale": "Gebruik ESRGAN om de afbeelding direct na het genereren te vergroten.", + "faceCorrection": "Gezichtsherstel via GFPGAN of Codeformer: het algoritme herkent gezichten die voorkomen in de afbeelding en herstelt onvolkomenheden. Een hogere waarde heeft meer invloed op de afbeelding, wat leidt tot aantrekkelijkere gezichten. Codeformer met een hogere getrouwheid behoudt de oorspronkelijke afbeelding ten koste van een sterkere gezichtsherstel.", + "imageToImage": "Afbeelding naar afbeelding laadt een afbeelding als initiële afbeelding, welke vervolgens gebruikt wordt om een nieuwe afbeelding mee te maken i.c.m. de invoertekst. Hoe hoger de waarde, des te meer invloed dit heeft op de uiteindelijke afbeelding. Waarden tussen 0,1 en 1,0 zijn mogelijk. Aanbevolen waarden zijn 0,25 - 0,75", + "boundingBox": "Het tekenvak is gelijk aan de instellingen Breedte en Hoogte voor de functies Tekst naar afbeelding en Afbeelding naar afbeelding. Alleen het gebied in het tekenvak wordt verwerkt.", + "seamCorrection": "Heeft invloed op hoe wordt omgegaan met zichtbare naden die voorkomen tussen gegenereerde afbeeldingen op het canvas.", + "infillAndScaling": "Onderhoud van infillmethodes (gebruikt op gemaskeerde of gewiste gebieden op het canvas) en opschaling (nuttig bij kleine tekenvakken)." + } + }, + "unifiedCanvas": { + "layer": "Laag", + "base": "Basis", + "mask": "Masker", + "maskingOptions": "Maskeropties", + "enableMask": "Schakel masker in", + "preserveMaskedArea": "Behoud gemaskeerd gebied", + "clearMask": "Wis masker", + "brush": "Penseel", + "eraser": "Gum", + "fillBoundingBox": "Vul tekenvak", + "eraseBoundingBox": "Wis tekenvak", + "colorPicker": "Kleurenkiezer", + "brushOptions": "Penseelopties", + "brushSize": "Grootte", + "move": "Verplaats", + "resetView": "Herstel weergave", + "mergeVisible": "Voeg lagen samen", + "saveToGallery": "Bewaar in galerij", + "copyToClipboard": "Kopieer naar klembord", + "downloadAsImage": "Download als afbeelding", + "undo": "Maak ongedaan", + "redo": "Herhaal", + "clearCanvas": "Wis canvas", + "canvasSettings": "Canvasinstellingen", + "showIntermediates": "Toon tussenafbeeldingen", + "showGrid": "Toon raster", + "snapToGrid": "Lijn uit op raster", + "darkenOutsideSelection": "Verduister buiten selectie", + "autoSaveToGallery": "Bewaar automatisch naar galerij", + "saveBoxRegionOnly": "Bewaar alleen tekengebied", + "limitStrokesToBox": "Beperk streken tot tekenvak", + "showCanvasDebugInfo": "Toon aanvullende canvasgegevens", + "clearCanvasHistory": "Wis canvasgeschiedenis", + "clearHistory": "Wis geschiedenis", + "clearCanvasHistoryMessage": "Het wissen van de canvasgeschiedenis laat het huidige canvas ongemoeid, maar wist onherstelbaar de geschiedenis voor het ongedaan maken en herhalen.", + "clearCanvasHistoryConfirm": "Weet je zeker dat je de canvasgeschiedenis wilt wissen?", + "emptyTempImageFolder": "Leeg tijdelijke afbeeldingenmap", + "emptyFolder": "Leeg map", + "emptyTempImagesFolderMessage": "Het legen van de tijdelijke afbeeldingenmap herstelt ook volledig het Centraal canvas. Hieronder valt de geschiedenis voor het ongedaan maken en herhalen, de afbeeldingen in het sessiegebied en de basislaag van het canvas.", + "emptyTempImagesFolderConfirm": "Weet je zeker dat je de tijdelijke afbeeldingenmap wilt legen?", + "activeLayer": "Actieve laag", + "canvasScale": "Schaal canvas", + "boundingBox": "Tekenvak", + "scaledBoundingBox": "Geschaalde tekenvak", + "boundingBoxPosition": "Positie tekenvak", + "canvasDimensions": "Afmetingen canvas", + "canvasPosition": "Positie canvas", + "cursorPosition": "Positie cursor", + "previous": "Vorige", + "next": "Volgende", + "accept": "Accepteer", + "showHide": "Toon/verberg", + "discardAll": "Gooi alles weg", + "betaClear": "Wis", + "betaDarkenOutside": "Verduister buiten tekenvak", + "betaLimitToBox": "Beperk tot tekenvak", + "betaPreserveMasked": "Behoud masker", + "antialiasing": "Anti-aliasing", + "showResultsOn": "Toon resultaten (aan)", + "showResultsOff": "Toon resultaten (uit)" + }, + "accessibility": { + "exitViewer": "Stop viewer", + "zoomIn": "Zoom in", + "rotateCounterClockwise": "Draai tegen de klok in", + "modelSelect": "Modelkeuze", + "invokeProgressBar": "Voortgangsbalk Invoke", + "reset": "Herstel", + "uploadImage": "Upload afbeelding", + "previousImage": "Vorige afbeelding", + "nextImage": "Volgende afbeelding", + "useThisParameter": "Gebruik deze parameter", + "copyMetadataJson": "Kopieer metagegevens-JSON", + "zoomOut": "Zoom uit", + "rotateClockwise": "Draai met de klok mee", + "flipHorizontally": "Spiegel horizontaal", + "flipVertically": "Spiegel verticaal", + "modifyConfig": "Wijzig configuratie", + "toggleAutoscroll": "Autom. scrollen aan/uit", + "toggleLogViewer": "Logboekviewer aan/uit", + "showOptionsPanel": "Toon zijscherm", + "menu": "Menu", + "showGalleryPanel": "Toon deelscherm Galerij", + "loadMore": "Laad meer" + }, + "ui": { + "showProgressImages": "Toon voortgangsafbeeldingen", + "hideProgressImages": "Verberg voortgangsafbeeldingen", + "swapSizes": "Wissel afmetingen om", + "lockRatio": "Zet verhouding vast" + }, + "nodes": { + "zoomOutNodes": "Uitzoomen", + "fitViewportNodes": "Aanpassen aan beeld", + "hideMinimapnodes": "Minimap verbergen", + "showLegendNodes": "Typelegende veld tonen", + "zoomInNodes": "Inzoomen", + "hideGraphNodes": "Graph overlay verbergen", + "showGraphNodes": "Graph overlay tonen", + "showMinimapnodes": "Minimap tonen", + "hideLegendNodes": "Typelegende veld verbergen", + "reloadNodeTemplates": "Herlaad knooppuntsjablonen", + "loadWorkflow": "Laad werkstroom", + "downloadWorkflow": "Download JSON van werkstroom", + "booleanPolymorphicDescription": "Een verzameling Booleanse waarden.", + "scheduler": "Planner", + "inputField": "Invoerveld", + "controlFieldDescription": "Controlegegevens doorgegeven tussen knooppunten.", + "skippingUnknownOutputType": "Overslaan van onbekend soort uitvoerveld", + "latentsFieldDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", + "denoiseMaskFieldDescription": "Ontruisingsmasker kan worden doorgegeven tussen knooppunten", + "floatCollectionDescription": "Een verzameling zwevende-kommagetallen.", + "missingTemplate": "Ontbrekende sjabloon", + "outputSchemaNotFound": "Uitvoerschema niet gevonden", + "ipAdapterPolymorphicDescription": "Een verzameling IP-adapters.", + "workflowDescription": "Korte beschrijving", + "latentsPolymorphicDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", + "colorFieldDescription": "Een RGBA-kleur.", + "mainModelField": "Model", + "unhandledInputProperty": "Onverwerkt invoerkenmerk", + "versionUnknown": " Versie onbekend", + "ipAdapterCollection": "Verzameling IP-adapters", + "conditioningCollection": "Verzameling conditionering", + "maybeIncompatible": "Is mogelijk niet compatibel met geïnstalleerde knooppunten", + "ipAdapterPolymorphic": "Polymorfisme IP-adapter", + "noNodeSelected": "Geen knooppunt gekozen", + "addNode": "Voeg knooppunt toe", + "unableToValidateWorkflow": "Kan werkstroom niet valideren", + "enum": "Enumeratie", + "integerPolymorphicDescription": "Een verzameling gehele getallen.", + "noOutputRecorded": "Geen uitvoer opgenomen", + "updateApp": "Werk app bij", + "conditioningCollectionDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", + "colorPolymorphic": "Polymorfisme kleur", + "colorCodeEdgesHelp": "Kleurgecodeerde randen op basis van hun verbonden velden", + "collectionDescription": "TODO", + "float": "Zwevende-kommagetal", + "workflowContact": "Contactpersoon", + "skippingReservedFieldType": "Overslaan van gereserveerd veldsoort", + "animatedEdges": "Geanimeerde randen", + "booleanCollectionDescription": "Een verzameling van Booleanse waarden.", + "sDXLMainModelFieldDescription": "SDXL-modelveld.", + "conditioningPolymorphic": "Polymorfisme conditionering", + "integer": "Geheel getal", + "colorField": "Kleur", + "boardField": "Bord", + "nodeTemplate": "Sjabloon knooppunt", + "latentsCollection": "Verzameling latents", + "problemReadingWorkflow": "Fout bij lezen van werkstroom uit afbeelding", + "sourceNode": "Bronknooppunt", + "nodeOpacity": "Dekking knooppunt", + "pickOne": "Kies er een", + "collectionItemDescription": "TODO", + "integerDescription": "Gehele getallen zijn getallen zonder een decimaalteken.", + "outputField": "Uitvoerveld", + "unableToLoadWorkflow": "Kan werkstroom niet valideren", + "snapToGrid": "Lijn uit op raster", + "stringPolymorphic": "Polymorfisme tekenreeks", + "conditioningPolymorphicDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", + "noFieldsLinearview": "Geen velden toegevoegd aan lineaire weergave", + "skipped": "Overgeslagen", + "imagePolymorphic": "Polymorfisme afbeelding", + "nodeSearch": "Zoek naar knooppunten", + "updateNode": "Werk knooppunt bij", + "sDXLRefinerModelFieldDescription": "Beschrijving", + "imagePolymorphicDescription": "Een verzameling afbeeldingen.", + "floatPolymorphic": "Polymorfisme zwevende-kommagetal", + "version": "Versie", + "doesNotExist": "bestaat niet", + "ipAdapterCollectionDescription": "Een verzameling van IP-adapters.", + "stringCollectionDescription": "Een verzameling tekenreeksen.", + "unableToParseNode": "Kan knooppunt niet inlezen", + "controlCollection": "Controle-verzameling", + "validateConnections": "Valideer verbindingen en graaf", + "stringCollection": "Verzameling tekenreeksen", + "inputMayOnlyHaveOneConnection": "Invoer mag slechts een enkele verbinding hebben", + "notes": "Opmerkingen", + "uNetField": "UNet", + "nodeOutputs": "Uitvoer knooppunt", + "currentImageDescription": "Toont de huidige afbeelding in de knooppunteditor", + "validateConnectionsHelp": "Voorkom dat er ongeldige verbindingen worden gelegd en dat er ongeldige grafen worden aangeroepen", + "problemSettingTitle": "Fout bij instellen titel", + "ipAdapter": "IP-adapter", + "integerCollection": "Verzameling gehele getallen", + "collectionItem": "Verzamelingsonderdeel", + "noConnectionInProgress": "Geen verbinding bezig te maken", + "vaeModelField": "VAE", + "controlCollectionDescription": "Controlegegevens doorgegeven tussen knooppunten.", + "skippedReservedInput": "Overgeslagen gereserveerd invoerveld", + "workflowVersion": "Versie", + "noConnectionData": "Geen verbindingsgegevens", + "outputFields": "Uitvoervelden", + "fieldTypesMustMatch": "Veldsoorten moeten overeenkomen", + "workflow": "Werkstroom", + "edge": "Rand", + "inputNode": "Invoerknooppunt", + "enumDescription": "Enumeraties zijn waarden die uit een aantal opties moeten worden gekozen.", + "unkownInvocation": "Onbekende aanroepsoort", + "loRAModelFieldDescription": "TODO", + "imageField": "Afbeelding", + "skippedReservedOutput": "Overgeslagen gereserveerd uitvoerveld", + "animatedEdgesHelp": "Animeer gekozen randen en randen verbonden met de gekozen knooppunten", + "cannotDuplicateConnection": "Kan geen dubbele verbindingen maken", + "booleanPolymorphic": "Polymorfisme Booleaanse waarden", + "unknownTemplate": "Onbekend sjabloon", + "noWorkflow": "Geen werkstroom", + "removeLinearView": "Verwijder uit lineaire weergave", + "colorCollectionDescription": "TODO", + "integerCollectionDescription": "Een verzameling gehele getallen.", + "colorPolymorphicDescription": "Een verzameling kleuren.", + "sDXLMainModelField": "SDXL-model", + "workflowTags": "Labels", + "denoiseMaskField": "Ontruisingsmasker", + "schedulerDescription": "Beschrijving", + "missingCanvaInitImage": "Ontbrekende initialisatie-afbeelding voor canvas", + "conditioningFieldDescription": "Conditionering kan worden doorgegeven tussen knooppunten.", + "clipFieldDescription": "Submodellen voor tokenizer en text_encoder.", + "fullyContainNodesHelp": "Knooppunten moeten zich volledig binnen het keuzevak bevinden om te worden gekozen", + "noImageFoundState": "Geen initiële afbeelding gevonden in de staat", + "workflowValidation": "Validatiefout werkstroom", + "clipField": "Clip", + "stringDescription": "Tekenreeksen zijn tekst.", + "nodeType": "Soort knooppunt", + "noMatchingNodes": "Geen overeenkomende knooppunten", + "fullyContainNodes": "Omvat knooppunten volledig om ze te kiezen", + "integerPolymorphic": "Polymorfisme geheel getal", + "executionStateInProgress": "Bezig", + "noFieldType": "Geen soort veld", + "colorCollection": "Een verzameling kleuren.", + "executionStateError": "Fout", + "noOutputSchemaName": "Geen naam voor uitvoerschema gevonden in referentieobject", + "ipAdapterModel": "Model IP-adapter", + "latentsPolymorphic": "Polymorfisme latents", + "vaeModelFieldDescription": "Beschrijving", + "skippingInputNoTemplate": "Overslaan van invoerveld zonder sjabloon", + "ipAdapterDescription": "Een Afbeeldingsprompt-adapter (IP-adapter).", + "boolean": "Booleaanse waarden", + "missingCanvaInitMaskImages": "Ontbrekende initialisatie- en maskerafbeeldingen voor canvas", + "problemReadingMetadata": "Fout bij lezen van metagegevens uit afbeelding", + "stringPolymorphicDescription": "Een verzameling tekenreeksen.", + "oNNXModelField": "ONNX-model", + "executionStateCompleted": "Voltooid", + "node": "Knooppunt", + "skippingUnknownInputType": "Overslaan van onbekend soort invoerveld", + "workflowAuthor": "Auteur", + "currentImage": "Huidige afbeelding", + "controlField": "Controle", + "workflowName": "Naam", + "booleanDescription": "Booleanse waarden zijn waar en onwaar.", + "collection": "Verzameling", + "ipAdapterModelDescription": "Modelveld IP-adapter", + "cannotConnectInputToInput": "Kan invoer niet aan invoer verbinden", + "invalidOutputSchema": "Ongeldig uitvoerschema", + "boardFieldDescription": "Een galerijbord", + "floatDescription": "Zwevende-kommagetallen zijn getallen met een decimaalteken.", + "floatPolymorphicDescription": "Een verzameling zwevende-kommagetallen.", + "vaeField": "Vae", + "conditioningField": "Conditionering", + "unhandledOutputProperty": "Onverwerkt uitvoerkenmerk", + "workflowNotes": "Opmerkingen", + "string": "Tekenreeks", + "floatCollection": "Verzameling zwevende-kommagetallen", + "latentsField": "Latents", + "cannotConnectOutputToOutput": "Kan uitvoer niet aan uitvoer verbinden", + "booleanCollection": "Verzameling Booleaanse waarden", + "connectionWouldCreateCycle": "Verbinding zou cyclisch worden", + "cannotConnectToSelf": "Kan niet aan zichzelf verbinden", + "notesDescription": "Voeg opmerkingen toe aan je werkstroom", + "unknownField": "Onbekend veld", + "inputFields": "Invoervelden", + "colorCodeEdges": "Kleurgecodeerde randen", + "uNetFieldDescription": "UNet-submodel.", + "unknownNode": "Onbekend knooppunt", + "imageCollectionDescription": "Een verzameling afbeeldingen.", + "mismatchedVersion": "Heeft niet-overeenkomende versie", + "vaeFieldDescription": "Vae-submodel.", + "imageFieldDescription": "Afbeeldingen kunnen worden doorgegeven tussen knooppunten.", + "outputNode": "Uitvoerknooppunt", + "addNodeToolTip": "Voeg knooppunt toe (Shift+A, spatie)", + "loadingNodes": "Bezig met laden van knooppunten...", + "snapToGridHelp": "Lijn knooppunten uit op raster bij verplaatsing", + "workflowSettings": "Instellingen werkstroomeditor", + "mainModelFieldDescription": "TODO", + "sDXLRefinerModelField": "Verfijningsmodel", + "loRAModelField": "LoRA", + "unableToParseEdge": "Kan rand niet inlezen", + "latentsCollectionDescription": "Latents kunnen worden doorgegeven tussen knooppunten.", + "oNNXModelFieldDescription": "ONNX-modelveld.", + "imageCollection": "Afbeeldingsverzameling" + }, + "controlnet": { + "amult": "a_mult", + "resize": "Schaal", + "showAdvanced": "Toon uitgebreide opties", + "contentShuffleDescription": "Verschuift het materiaal in de afbeelding", + "bgth": "bg_th", + "addT2IAdapter": "Voeg $t(common.t2iAdapter) toe", + "pidi": "PIDI", + "importImageFromCanvas": "Importeer afbeelding uit canvas", + "lineartDescription": "Zet afbeelding om naar line-art", + "normalBae": "Normale BAE", + "importMaskFromCanvas": "Importeer masker uit canvas", + "hed": "HED", + "hideAdvanced": "Verberg uitgebreid", + "contentShuffle": "Verschuif materiaal", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) ingeschakeld, $t(common.t2iAdapter)s uitgeschakeld", + "ipAdapterModel": "Adaptermodel", + "resetControlImage": "Herstel controle-afbeelding", + "beginEndStepPercent": "Percentage begin-/eindstap", + "mlsdDescription": "Minimalistische herkenning lijnsegmenten", + "duplicate": "Maak kopie", + "balanced": "Gebalanceerd", + "f": "F", + "h": "H", + "prompt": "Prompt", + "depthMidasDescription": "Genereer diepteblad via Midas", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "openPoseDescription": "Menselijke pose-benadering via Openpose", + "control": "Controle", + "resizeMode": "Modus schaling", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) ingeschakeld, $t(common.controlNet)s uitgeschakeld", + "coarse": "Grof", + "weight": "Gewicht", + "selectModel": "Kies een model", + "crop": "Snij bij", + "depthMidas": "Diepte (Midas)", + "w": "B", + "processor": "Verwerker", + "addControlNet": "Voeg $t(common.controlNet) toe", + "none": "Geen", + "incompatibleBaseModel": "Niet-compatibel basismodel:", + "enableControlnet": "Schakel ControlNet in", + "detectResolution": "Herken resolutie", + "controlNetT2IMutexDesc": "Gelijktijdig gebruik van $t(common.controlNet) en $t(common.t2iAdapter) wordt op dit moment niet ondersteund.", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "pidiDescription": "PIDI-afbeeldingsverwerking", + "mediapipeFace": "Mediapipe - Gezicht", + "mlsd": "M-LSD", + "controlMode": "Controlemodus", + "fill": "Vul", + "cannyDescription": "Herkenning Canny-rand", + "addIPAdapter": "Voeg $t(common.ipAdapter) toe", + "lineart": "Line-art", + "colorMapDescription": "Genereert een kleurenblad van de afbeelding", + "lineartAnimeDescription": "Lineartverwerking in anime-stijl", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "minConfidence": "Min. vertrouwensniveau", + "imageResolution": "Resolutie afbeelding", + "megaControl": "Zeer veel controle", + "depthZoe": "Diepte (Zoe)", + "colorMap": "Kleur", + "lowThreshold": "Lage drempelwaarde", + "autoConfigure": "Configureer verwerker automatisch", + "highThreshold": "Hoge drempelwaarde", + "normalBaeDescription": "Normale BAE-verwerking", + "noneDescription": "Geen verwerking toegepast", + "saveControlImage": "Bewaar controle-afbeelding", + "openPose": "Openpose", + "toggleControlNet": "Zet deze ControlNet aan/uit", + "delete": "Verwijder", + "controlAdapter_one": "Control-adapter", + "controlAdapter_other": "Control-adapters", + "safe": "Veilig", + "colorMapTileSize": "Grootte tegel", + "lineartAnime": "Line-art voor anime", + "ipAdapterImageFallback": "Geen IP-adapterafbeelding gekozen", + "mediapipeFaceDescription": "Gezichtsherkenning met Mediapipe", + "canny": "Canny", + "depthZoeDescription": "Genereer diepteblad via Zoe", + "hedDescription": "Herkenning van holistisch-geneste randen", + "setControlImageDimensions": "Stel afmetingen controle-afbeelding in op B/H", + "scribble": "Krabbel", + "resetIPAdapterImage": "Herstel IP-adapterafbeelding", + "handAndFace": "Hand en gezicht", + "enableIPAdapter": "Schakel IP-adapter in", + "maxFaces": "Max. gezichten" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "Gebruik een verschillende seedwaarde per afbeelding", + "perIterationLabel": "Seedwaarde per iteratie", + "perIterationDesc": "Gebruik een verschillende seedwaarde per iteratie", + "perPromptLabel": "Seedwaarde per afbeelding", + "label": "Gedrag seedwaarde" + }, + "enableDynamicPrompts": "Schakel dynamische prompts in", + "combinatorial": "Combinatorisch genereren", + "maxPrompts": "Max. prompts", + "promptsWithCount_one": "{{count}} prompt", + "promptsWithCount_other": "{{count}} prompts", + "dynamicPrompts": "Dynamische prompts" + }, + "popovers": { + "noiseUseCPU": { + "paragraphs": [ + "Bepaalt of ruis wordt gegenereerd op de CPU of de GPU.", + "Met CPU-ruis ingeschakeld zal een bepaalde seedwaarde dezelfde afbeelding opleveren op welke machine dan ook.", + "Er is geen prestatieverschil bij het inschakelen van CPU-ruis." + ], + "heading": "Gebruik CPU-ruis" + }, + "paramScheduler": { + "paragraphs": [ + "De planner bepaalt hoe ruis per iteratie wordt toegevoegd aan een afbeelding of hoe een monster wordt bijgewerkt op basis van de uitvoer van een model." + ], + "heading": "Planner" + }, + "scaleBeforeProcessing": { + "paragraphs": [ + "Schaalt het gekozen gebied naar de grootte die het meest geschikt is voor het model, vooraf aan het proces van het afbeeldingen genereren." + ], + "heading": "Schaal vooraf aan verwerking" + }, + "compositingMaskAdjustments": { + "heading": "Aanpassingen masker", + "paragraphs": [ + "Pas het masker aan." + ] + }, + "paramRatio": { + "heading": "Beeldverhouding", + "paragraphs": [ + "De beeldverhouding van de afmetingen van de afbeelding die wordt gegenereerd.", + "Een afbeeldingsgrootte (in aantal pixels) equivalent aan 512x512 wordt aanbevolen voor SD1.5-modellen. Een grootte-equivalent van 1024x1024 wordt aanbevolen voor SDXL-modellen." + ] + }, + "compositingCoherenceSteps": { + "heading": "Stappen", + "paragraphs": [ + "Het aantal te gebruiken ontruisingsstappen in de coherentiefase.", + "Gelijk aan de hoofdparameter Stappen." + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "Dynamische prompts vormt een enkele prompt om in vele.", + "De basissyntax is \"a {red|green|blue} ball\". Dit zal de volgende drie prompts geven: \"a red ball\", \"a green ball\" en \"a blue ball\".", + "Gebruik de syntax zo vaak als je wilt in een enkele prompt, maar zorg ervoor dat het aantal gegenereerde prompts in lijn ligt met de instelling Max. prompts." + ], + "heading": "Dynamische prompts" + }, + "paramVAE": { + "paragraphs": [ + "Het model gebruikt voor het vertalen van AI-uitvoer naar de uiteindelijke afbeelding." + ], + "heading": "VAE" + }, + "compositingBlur": { + "heading": "Vervaging", + "paragraphs": [ + "De vervagingsstraal van het masker." + ] + }, + "paramIterations": { + "paragraphs": [ + "Het aantal te genereren afbeeldingen.", + "Als dynamische prompts is ingeschakeld, dan zal elke prompt dit aantal keer gegenereerd worden." + ], + "heading": "Iteraties" + }, + "paramVAEPrecision": { + "heading": "Nauwkeurigheid VAE", + "paragraphs": [ + "De nauwkeurigheid gebruikt tijdens de VAE-codering en -decodering. FP16/halve nauwkeurig is efficiënter, ten koste van kleine afbeeldingsvariaties." + ] + }, + "compositingCoherenceMode": { + "heading": "Modus", + "paragraphs": [ + "De modus van de coherentiefase." + ] + }, + "paramSeed": { + "paragraphs": [ + "Bepaalt de startruis die gebruikt wordt bij het genereren.", + "Schakel \"Willekeurige seedwaarde\" uit om identieke resultaten te krijgen met dezelfde genereer-instellingen." + ], + "heading": "Seedwaarde" + }, + "controlNetResizeMode": { + "heading": "Schaalmodus", + "paragraphs": [ + "Hoe de ControlNet-afbeelding zal worden geschaald aan de uitvoergrootte van de afbeelding." + ] + }, + "controlNetBeginEnd": { + "paragraphs": [ + "Op welke stappen van het ontruisingsproces ControlNet worden toegepast.", + "ControlNets die worden toegepast aan het begin begeleiden het compositieproces. ControlNets die worden toegepast aan het eind zorgen voor details." + ], + "heading": "Percentage begin- / eindstap" + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "Bepaalt hoe de seedwaarde wordt gebruikt bij het genereren van prompts.", + "Per iteratie zal een unieke seedwaarde worden gebruikt voor elke iteratie. Gebruik dit om de promptvariaties binnen een enkele seedwaarde te verkennen.", + "Bijvoorbeeld: als je vijf prompts heb, dan zal voor elke afbeelding dezelfde seedwaarde gebruikt worden.", + "De optie Per afbeelding zal een unieke seedwaarde voor elke afbeelding gebruiken. Dit biedt meer variatie." + ], + "heading": "Gedrag seedwaarde" + }, + "clipSkip": { + "paragraphs": [ + "Kies hoeveel CLIP-modellagen je wilt overslaan.", + "Bepaalde modellen werken beter met bepaalde Overslaan CLIP-instellingen.", + "Een hogere waarde geeft meestal een minder gedetailleerde afbeelding." + ], + "heading": "Overslaan CLIP" + }, + "paramModel": { + "heading": "Model", + "paragraphs": [ + "Model gebruikt voor de ontruisingsstappen.", + "Verschillende modellen zijn meestal getraind om zich te specialiseren in het maken van bepaalde esthetische resultaten en materiaal." + ] + }, + "compositingCoherencePass": { + "heading": "Coherentiefase", + "paragraphs": [ + "Een tweede ronde ontruising helpt bij het samenstellen van de erin- of eruitgetekende afbeelding." + ] + }, + "paramDenoisingStrength": { + "paragraphs": [ + "Hoeveel ruis wordt toegevoegd aan de invoerafbeelding.", + "0 levert een identieke afbeelding op, waarbij 1 een volledig nieuwe afbeelding oplevert." + ], + "heading": "Ontruisingssterkte" + }, + "compositingStrength": { + "heading": "Sterkte", + "paragraphs": [ + "Ontruisingssterkte voor de coherentiefase.", + "Gelijk aan de parameter Ontruisingssterkte Afbeelding naar afbeelding." + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "Het genereerproces voorkomt de gegeven begrippen in de negatieve prompt. Gebruik dit om bepaalde zaken of voorwerpen uit te sluiten van de uitvoerafbeelding.", + "Ondersteunt Compel-syntax en -embeddingen." + ], + "heading": "Negatieve prompt" + }, + "compositingBlurMethod": { + "heading": "Vervagingsmethode", + "paragraphs": [ + "De methode van de vervaging die wordt toegepast op het gemaskeerd gebied." + ] + }, + "dynamicPromptsMaxPrompts": { + "heading": "Max. prompts", + "paragraphs": [ + "Beperkt het aantal prompts die kunnen worden gegenereerd door dynamische prompts." + ] + }, + "infillMethod": { + "paragraphs": [ + "Methode om een gekozen gebied in te vullen." + ], + "heading": "Invulmethode" + }, + "controlNetWeight": { + "heading": "Gewicht", + "paragraphs": [ + "Hoe sterk ControlNet effect heeft op de gegeneerde afbeelding." + ] + }, + "controlNet": { + "heading": "ControlNet", + "paragraphs": [ + "ControlNets begeleidt het genereerproces, waarbij geholpen wordt bij het maken van afbeeldingen met aangestuurde compositie, structuur of stijl, afhankelijk van het gekozen model." + ] + }, + "paramCFGScale": { + "heading": "CFG-schaal", + "paragraphs": [ + "Bepaalt hoeveel je prompt invloed heeft op het genereerproces." + ] + }, + "controlNetControlMode": { + "paragraphs": [ + "Geeft meer gewicht aan ofwel de prompt danwel ControlNet." + ], + "heading": "Controlemodus" + }, + "paramSteps": { + "heading": "Stappen", + "paragraphs": [ + "Het aantal uit te voeren stappen tijdens elke generatie.", + "Een hoger aantal stappen geven meestal betere afbeeldingen, ten koste van een hogere benodigde tijd om te genereren." + ] + }, + "paramPositiveConditioning": { + "heading": "Positieve prompt", + "paragraphs": [ + "Begeleidt het generartieproces. Gebruik een woord of frase naar keuze.", + "Syntaxes en embeddings voor Compel en dynamische prompts." + ] + }, + "lora": { + "heading": "Gewicht LoRA", + "paragraphs": [ + "Een hogere LoRA-gewicht zal leiden tot een groter effect op de uiteindelijke afbeelding." + ] + } + }, + "metadata": { + "seamless": "Naadloos", + "positivePrompt": "Positieve prompt", + "negativePrompt": "Negatieve prompt", + "generationMode": "Genereermodus", + "Threshold": "Drempelwaarde ruis", + "metadata": "Metagegevens", + "strength": "Sterkte Afbeelding naar afbeelding", + "seed": "Seedwaarde", + "imageDetails": "Afbeeldingsdetails", + "perlin": "Perlin-ruis", + "model": "Model", + "noImageDetails": "Geen afbeeldingsdetails gevonden", + "hiresFix": "Optimalisatie voor hoge resolutie", + "cfgScale": "CFG-schaal", + "fit": "Schaal aanpassen in Afbeelding naar afbeelding", + "initImage": "Initiële afbeelding", + "recallParameters": "Opnieuw aan te roepen parameters", + "height": "Hoogte", + "variations": "Paren seedwaarde-gewicht", + "noMetaData": "Geen metagegevens gevonden", + "width": "Breedte", + "createdBy": "Gemaakt door", + "workflow": "Werkstroom", + "steps": "Stappen", + "scheduler": "Planner", + "noRecallParameters": "Geen opnieuw uit te voeren parameters gevonden" + }, + "queue": { + "status": "Status", + "pruneSucceeded": "{{item_count}} voltooide onderdelen uit wachtrij opgeruimd", + "cancelTooltip": "Annuleer huidig onderdeel", + "queueEmpty": "Wachtrij leeg", + "pauseSucceeded": "Verwerker onderbroken", + "in_progress": "Bezig", + "queueFront": "Voeg vooraan toe in wachtrij", + "notReady": "Fout bij plaatsen in wachtrij", + "batchFailedToQueue": "Fout bij reeks in wachtrij plaatsen", + "completed": "Voltooid", + "queueBack": "Voeg toe aan wachtrij", + "batchValues": "Reekswaarden", + "cancelFailed": "Fout bij annuleren onderdeel", + "queueCountPrediction": "Voeg {{predicted}} toe aan wachtrij", + "batchQueued": "Reeks in wachtrij geplaatst", + "pauseFailed": "Fout bij onderbreken verwerker", + "clearFailed": "Fout bij wissen van wachtrij", + "queuedCount": "{{pending}} wachtend", + "front": "begin", + "clearSucceeded": "Wachtrij gewist", + "pause": "Onderbreek", + "pruneTooltip": "Ruim {{item_count}} voltooide onderdelen op", + "cancelSucceeded": "Onderdeel geannuleerd", + "batchQueuedDesc_one": "Voeg {{count}} sessie toe aan het {{direction}} van de wachtrij", + "batchQueuedDesc_other": "Voeg {{count}} sessies toe aan het {{direction}} van de wachtrij", + "graphQueued": "Graaf in wachtrij geplaatst", + "queue": "Wachtrij", + "batch": "Reeks", + "clearQueueAlertDialog": "Als je de wachtrij onmiddellijk wist, dan worden alle onderdelen die bezig zijn geannuleerd en wordt de wachtrij volledig gewist.", + "pending": "Wachtend", + "completedIn": "Voltooid na", + "resumeFailed": "Fout bij hervatten verwerker", + "clear": "Wis", + "prune": "Ruim op", + "total": "Totaal", + "canceled": "Geannuleerd", + "pruneFailed": "Fout bij opruimen van wachtrij", + "cancelBatchSucceeded": "Reeks geannuleerd", + "clearTooltip": "Annuleer en wis alle onderdelen", + "current": "Huidig", + "pauseTooltip": "Onderbreek verwerker", + "failed": "Mislukt", + "cancelItem": "Annuleer onderdeel", + "next": "Volgende", + "cancelBatch": "Annuleer reeks", + "back": "eind", + "cancel": "Annuleer", + "session": "Sessie", + "queueTotal": "Totaal {{total}}", + "resumeSucceeded": "Verwerker hervat", + "enqueueing": "Bezig met toevoegen van reeks aan wachtrij", + "resumeTooltip": "Hervat verwerker", + "queueMaxExceeded": "Max. aantal van {{max_queue_size}} overschreden, {{skip}} worden overgeslagen", + "resume": "Hervat", + "cancelBatchFailed": "Fout bij annuleren van reeks", + "clearQueueAlertDialog2": "Weet je zeker dat je de wachtrij wilt wissen?", + "item": "Onderdeel", + "graphFailedToQueue": "Fout bij toevoegen graaf aan wachtrij" + }, + "sdxl": { + "refinerStart": "Startwaarde verfijning", + "selectAModel": "Kies een model", + "scheduler": "Planner", + "cfgScale": "CFG-schaal", + "negStylePrompt": "Negatieve-stijlprompt", + "noModelsAvailable": "Geen modellen beschikbaar", + "refiner": "Verfijning", + "negAestheticScore": "Negatieve esthetische score", + "useRefiner": "Gebruik verfijning", + "denoisingStrength": "Sterkte ontruising", + "refinermodel": "Verfijningsmodel", + "posAestheticScore": "Positieve esthetische score", + "concatPromptStyle": "Plak prompt- en stijltekst aan elkaar", + "loading": "Bezig met laden...", + "steps": "Stappen", + "posStylePrompt": "Positieve-stijlprompt" + }, + "models": { + "noMatchingModels": "Geen overeenkomend modellen", + "loading": "bezig met laden", + "noMatchingLoRAs": "Geen overeenkomende LoRA's", + "noLoRAsAvailable": "Geen LoRA's beschikbaar", + "noModelsAvailable": "Geen modellen beschikbaar", + "selectModel": "Kies een model", + "selectLoRA": "Kies een LoRA" + }, + "boards": { + "autoAddBoard": "Voeg automatisch bord toe", + "topMessage": "Dit bord bevat afbeeldingen die in gebruik zijn door de volgende functies:", + "move": "Verplaats", + "menuItemAutoAdd": "Voeg dit automatisch toe aan bord", + "myBoard": "Mijn bord", + "searchBoard": "Zoek borden...", + "noMatching": "Geen overeenkomende borden", + "selectBoard": "Kies een bord", + "cancel": "Annuleer", + "addBoard": "Voeg bord toe", + "bottomMessage": "Als je dit bord en alle afbeeldingen erop verwijdert, dan worden alle functies teruggezet die ervan gebruik maken.", + "uncategorized": "Zonder categorie", + "downloadBoard": "Download bord", + "changeBoard": "Wijzig bord", + "loading": "Bezig met laden...", + "clearSearch": "Maak zoekopdracht leeg" + }, + "invocationCache": { + "disable": "Schakel uit", + "misses": "Mislukt cacheverzoek", + "enableFailed": "Fout bij inschakelen aanroepcache", + "invocationCache": "Aanroepcache", + "clearSucceeded": "Aanroepcache gewist", + "enableSucceeded": "Aanroepcache ingeschakeld", + "clearFailed": "Fout bij wissen aanroepcache", + "hits": "Gelukt cacheverzoek", + "disableSucceeded": "Aanroepcache uitgeschakeld", + "disableFailed": "Fout bij uitschakelen aanroepcache", + "enable": "Schakel in", + "clear": "Wis", + "maxCacheSize": "Max. grootte cache", + "cacheSize": "Grootte cache" + }, + "embedding": { + "noMatchingEmbedding": "Geen overeenkomende embeddings", + "addEmbedding": "Voeg embedding toe", + "incompatibleModel": "Niet-compatibel basismodel:" + } +} diff --git a/invokeai/frontend/web/dist/locales/pl.json b/invokeai/frontend/web/dist/locales/pl.json new file mode 100644 index 0000000000..f77c0c4710 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/pl.json @@ -0,0 +1,461 @@ +{ + "common": { + "hotkeysLabel": "Skróty klawiszowe", + "languagePickerLabel": "Wybór języka", + "reportBugLabel": "Zgłoś błąd", + "settingsLabel": "Ustawienia", + "img2img": "Obraz na obraz", + "unifiedCanvas": "Tryb uniwersalny", + "nodes": "Węzły", + "langPolish": "Polski", + "nodesDesc": "W tym miejscu powstanie graficzny system generowania obrazów oparty na węzłach. Jest na co czekać!", + "postProcessing": "Przetwarzanie końcowe", + "postProcessDesc1": "Invoke AI oferuje wiele opcji przetwarzania końcowego. Z poziomu przeglądarki dostępne jest już zwiększanie rozdzielczości oraz poprawianie twarzy. Znajdziesz je wśród ustawień w trybach \"Tekst na obraz\" oraz \"Obraz na obraz\". Są również obecne w pasku menu wyświetlanym nad podglądem wygenerowanego obrazu.", + "postProcessDesc2": "Niedługo zostanie udostępniony specjalny interfejs, który będzie oferował jeszcze więcej możliwości.", + "postProcessDesc3": "Z poziomu linii poleceń już teraz dostępne są inne opcje, takie jak skalowanie obrazu metodą Embiggen.", + "training": "Trenowanie", + "trainingDesc1": "W tym miejscu dostępny będzie system przeznaczony do tworzenia własnych zanurzeń (ang. embeddings) i punktów kontrolnych przy użyciu metod w rodzaju inwersji tekstowej lub Dreambooth.", + "trainingDesc2": "Obecnie jest możliwe tworzenie własnych zanurzeń przy użyciu skryptów wywoływanych z linii poleceń.", + "upload": "Prześlij", + "close": "Zamknij", + "load": "Załaduj", + "statusConnected": "Połączono z serwerem", + "statusDisconnected": "Odłączono od serwera", + "statusError": "Błąd", + "statusPreparing": "Przygotowywanie", + "statusProcessingCanceled": "Anulowano przetwarzanie", + "statusProcessingComplete": "Zakończono przetwarzanie", + "statusGenerating": "Przetwarzanie", + "statusGeneratingTextToImage": "Przetwarzanie tekstu na obraz", + "statusGeneratingImageToImage": "Przetwarzanie obrazu na obraz", + "statusGeneratingInpainting": "Przemalowywanie", + "statusGeneratingOutpainting": "Domalowywanie", + "statusGenerationComplete": "Zakończono generowanie", + "statusIterationComplete": "Zakończono iterację", + "statusSavingImage": "Zapisywanie obrazu", + "statusRestoringFaces": "Poprawianie twarzy", + "statusRestoringFacesGFPGAN": "Poprawianie twarzy (GFPGAN)", + "statusRestoringFacesCodeFormer": "Poprawianie twarzy (CodeFormer)", + "statusUpscaling": "Powiększanie obrazu", + "statusUpscalingESRGAN": "Powiększanie (ESRGAN)", + "statusLoadingModel": "Wczytywanie modelu", + "statusModelChanged": "Zmieniono model", + "githubLabel": "GitHub", + "discordLabel": "Discord", + "darkMode": "Tryb ciemny", + "lightMode": "Tryb jasny" + }, + "gallery": { + "generations": "Wygenerowane", + "showGenerations": "Pokaż wygenerowane obrazy", + "uploads": "Przesłane", + "showUploads": "Pokaż przesłane obrazy", + "galleryImageSize": "Rozmiar obrazów", + "galleryImageResetSize": "Resetuj rozmiar", + "gallerySettings": "Ustawienia galerii", + "maintainAspectRatio": "Zachowaj proporcje", + "autoSwitchNewImages": "Przełączaj na nowe obrazy", + "singleColumnLayout": "Układ jednokolumnowy", + "allImagesLoaded": "Koniec listy", + "loadMore": "Wczytaj więcej", + "noImagesInGallery": "Brak obrazów w galerii" + }, + "hotkeys": { + "keyboardShortcuts": "Skróty klawiszowe", + "appHotkeys": "Podstawowe", + "generalHotkeys": "Pomocnicze", + "galleryHotkeys": "Galeria", + "unifiedCanvasHotkeys": "Tryb uniwersalny", + "invoke": { + "title": "Wywołaj", + "desc": "Generuje nowy obraz" + }, + "cancel": { + "title": "Anuluj", + "desc": "Zatrzymuje generowanie obrazu" + }, + "focusPrompt": { + "title": "Aktywuj pole tekstowe", + "desc": "Aktywuje pole wprowadzania sugestii" + }, + "toggleOptions": { + "title": "Przełącz panel opcji", + "desc": "Wysuwa lub chowa panel opcji" + }, + "pinOptions": { + "title": "Przypnij opcje", + "desc": "Przypina panel opcji" + }, + "toggleViewer": { + "title": "Przełącz podgląd", + "desc": "Otwiera lub zamyka widok podglądu" + }, + "toggleGallery": { + "title": "Przełącz galerię", + "desc": "Wysuwa lub chowa galerię" + }, + "maximizeWorkSpace": { + "title": "Powiększ obraz roboczy", + "desc": "Chowa wszystkie panele, zostawia tylko podgląd obrazu" + }, + "changeTabs": { + "title": "Przełącznie trybu", + "desc": "Przełącza na n-ty tryb pracy" + }, + "consoleToggle": { + "title": "Przełącz konsolę", + "desc": "Otwiera lub chowa widok konsoli" + }, + "setPrompt": { + "title": "Skopiuj sugestie", + "desc": "Kopiuje sugestie z aktywnego obrazu" + }, + "setSeed": { + "title": "Skopiuj inicjator", + "desc": "Kopiuje inicjator z aktywnego obrazu" + }, + "setParameters": { + "title": "Skopiuj wszystko", + "desc": "Kopiuje wszystkie parametry z aktualnie aktywnego obrazu" + }, + "restoreFaces": { + "title": "Popraw twarze", + "desc": "Uruchamia proces poprawiania twarzy dla aktywnego obrazu" + }, + "upscale": { + "title": "Powiększ", + "desc": "Uruchamia proces powiększania aktywnego obrazu" + }, + "showInfo": { + "title": "Pokaż informacje", + "desc": "Pokazuje metadane zapisane w aktywnym obrazie" + }, + "sendToImageToImage": { + "title": "Użyj w trybie \"Obraz na obraz\"", + "desc": "Ustawia aktywny obraz jako źródło w trybie \"Obraz na obraz\"" + }, + "deleteImage": { + "title": "Usuń obraz", + "desc": "Usuwa aktywny obraz" + }, + "closePanels": { + "title": "Zamknij panele", + "desc": "Zamyka wszystkie otwarte panele" + }, + "previousImage": { + "title": "Poprzedni obraz", + "desc": "Aktywuje poprzedni obraz z galerii" + }, + "nextImage": { + "title": "Następny obraz", + "desc": "Aktywuje następny obraz z galerii" + }, + "toggleGalleryPin": { + "title": "Przypnij galerię", + "desc": "Przypina lub odpina widok galerii" + }, + "increaseGalleryThumbSize": { + "title": "Powiększ obrazy", + "desc": "Powiększa rozmiar obrazów w galerii" + }, + "decreaseGalleryThumbSize": { + "title": "Pomniejsz obrazy", + "desc": "Pomniejsza rozmiar obrazów w galerii" + }, + "selectBrush": { + "title": "Aktywuj pędzel", + "desc": "Aktywuje narzędzie malowania" + }, + "selectEraser": { + "title": "Aktywuj gumkę", + "desc": "Aktywuje narzędzie usuwania" + }, + "decreaseBrushSize": { + "title": "Zmniejsz rozmiar narzędzia", + "desc": "Zmniejsza rozmiar aktywnego narzędzia" + }, + "increaseBrushSize": { + "title": "Zwiększ rozmiar narzędzia", + "desc": "Zwiększa rozmiar aktywnego narzędzia" + }, + "decreaseBrushOpacity": { + "title": "Zmniejsz krycie", + "desc": "Zmniejsza poziom krycia pędzla" + }, + "increaseBrushOpacity": { + "title": "Zwiększ", + "desc": "Zwiększa poziom krycia pędzla" + }, + "moveTool": { + "title": "Aktywuj przesunięcie", + "desc": "Włącza narzędzie przesuwania" + }, + "fillBoundingBox": { + "title": "Wypełnij zaznaczenie", + "desc": "Wypełnia zaznaczony obszar aktualnym kolorem pędzla" + }, + "eraseBoundingBox": { + "title": "Wyczyść zaznaczenia", + "desc": "Usuwa całą zawartość zaznaczonego obszaru" + }, + "colorPicker": { + "title": "Aktywuj pipetę", + "desc": "Włącza narzędzie kopiowania koloru" + }, + "toggleSnap": { + "title": "Przyciąganie do siatki", + "desc": "Włącza lub wyłącza opcje przyciągania do siatki" + }, + "quickToggleMove": { + "title": "Szybkie przesunięcie", + "desc": "Tymczasowo włącza tryb przesuwania obszaru roboczego" + }, + "toggleLayer": { + "title": "Przełącz wartwę", + "desc": "Przełącza pomiędzy warstwą bazową i maskowania" + }, + "clearMask": { + "title": "Wyczyść maskę", + "desc": "Usuwa całą zawartość warstwy maskowania" + }, + "hideMask": { + "title": "Przełącz maskę", + "desc": "Pokazuje lub ukrywa podgląd maski" + }, + "showHideBoundingBox": { + "title": "Przełącz zaznaczenie", + "desc": "Pokazuje lub ukrywa podgląd zaznaczenia" + }, + "mergeVisible": { + "title": "Połącz widoczne", + "desc": "Łączy wszystkie widoczne maski w jeden obraz" + }, + "saveToGallery": { + "title": "Zapisz w galerii", + "desc": "Zapisuje całą zawartość płótna w galerii" + }, + "copyToClipboard": { + "title": "Skopiuj do schowka", + "desc": "Zapisuje zawartość płótna w schowku systemowym" + }, + "downloadImage": { + "title": "Pobierz obraz", + "desc": "Zapisuje zawartość płótna do pliku obrazu" + }, + "undoStroke": { + "title": "Cofnij", + "desc": "Cofa ostatnie pociągnięcie pędzlem" + }, + "redoStroke": { + "title": "Ponawia", + "desc": "Ponawia cofnięte pociągnięcie pędzlem" + }, + "resetView": { + "title": "Resetuj widok", + "desc": "Centruje widok płótna" + }, + "previousStagingImage": { + "title": "Poprzedni obraz tymczasowy", + "desc": "Pokazuje poprzedni obraz tymczasowy" + }, + "nextStagingImage": { + "title": "Następny obraz tymczasowy", + "desc": "Pokazuje następny obraz tymczasowy" + }, + "acceptStagingImage": { + "title": "Akceptuj obraz tymczasowy", + "desc": "Akceptuje aktualnie wybrany obraz tymczasowy" + } + }, + "parameters": { + "images": "L. obrazów", + "steps": "L. kroków", + "cfgScale": "Skala CFG", + "width": "Szerokość", + "height": "Wysokość", + "seed": "Inicjator", + "randomizeSeed": "Losowy inicjator", + "shuffle": "Losuj", + "noiseThreshold": "Poziom szumu", + "perlinNoise": "Szum Perlina", + "variations": "Wariacje", + "variationAmount": "Poziom zróżnicowania", + "seedWeights": "Wariacje inicjatora", + "faceRestoration": "Poprawianie twarzy", + "restoreFaces": "Popraw twarze", + "type": "Metoda", + "strength": "Siła", + "upscaling": "Powiększanie", + "upscale": "Powiększ", + "upscaleImage": "Powiększ obraz", + "scale": "Skala", + "otherOptions": "Pozostałe opcje", + "seamlessTiling": "Płynne scalanie", + "hiresOptim": "Optymalizacja wys. rozdzielczości", + "imageFit": "Przeskaluj oryginalny obraz", + "codeformerFidelity": "Dokładność", + "scaleBeforeProcessing": "Tryb skalowania", + "scaledWidth": "Sk. do szer.", + "scaledHeight": "Sk. do wys.", + "infillMethod": "Metoda wypełniania", + "tileSize": "Rozmiar kafelka", + "boundingBoxHeader": "Zaznaczony obszar", + "seamCorrectionHeader": "Scalanie", + "infillScalingHeader": "Wypełnienie i skalowanie", + "img2imgStrength": "Wpływ sugestii na obraz", + "toggleLoopback": "Wł/wył sprzężenie zwrotne", + "sendTo": "Wyślij do", + "sendToImg2Img": "Użyj w trybie \"Obraz na obraz\"", + "sendToUnifiedCanvas": "Użyj w trybie uniwersalnym", + "copyImageToLink": "Skopiuj adres obrazu", + "downloadImage": "Pobierz obraz", + "openInViewer": "Otwórz podgląd", + "closeViewer": "Zamknij podgląd", + "usePrompt": "Skopiuj sugestie", + "useSeed": "Skopiuj inicjator", + "useAll": "Skopiuj wszystko", + "useInitImg": "Użyj oryginalnego obrazu", + "info": "Informacje", + "initialImage": "Oryginalny obraz", + "showOptionsPanel": "Pokaż panel ustawień" + }, + "settings": { + "models": "Modele", + "displayInProgress": "Podgląd generowanego obrazu", + "saveSteps": "Zapisuj obrazy co X kroków", + "confirmOnDelete": "Potwierdzaj usuwanie", + "displayHelpIcons": "Wyświetlaj ikony pomocy", + "enableImageDebugging": "Włącz debugowanie obrazu", + "resetWebUI": "Zresetuj interfejs", + "resetWebUIDesc1": "Resetowanie interfejsu wyczyści jedynie dane i ustawienia zapisane w pamięci przeglądarki. Nie usunie żadnych obrazów z dysku.", + "resetWebUIDesc2": "Jeśli obrazy nie są poprawnie wyświetlane w galerii lub doświadczasz innych problemów, przed zgłoszeniem błędu spróbuj zresetować interfejs.", + "resetComplete": "Interfejs został zresetowany. Odśwież stronę, aby załadować ponownie." + }, + "toast": { + "tempFoldersEmptied": "Wyczyszczono folder tymczasowy", + "uploadFailed": "Błąd przesyłania obrazu", + "uploadFailedUnableToLoadDesc": "Błąd wczytywania obrazu", + "downloadImageStarted": "Rozpoczęto pobieranie", + "imageCopied": "Skopiowano obraz", + "imageLinkCopied": "Skopiowano link do obrazu", + "imageNotLoaded": "Nie wczytano obrazu", + "imageNotLoadedDesc": "Nie znaleziono obrazu, który można użyć w Obraz na obraz", + "imageSavedToGallery": "Zapisano obraz w galerii", + "canvasMerged": "Scalono widoczne warstwy", + "sentToImageToImage": "Wysłano do Obraz na obraz", + "sentToUnifiedCanvas": "Wysłano do trybu uniwersalnego", + "parametersSet": "Ustawiono parametry", + "parametersNotSet": "Nie ustawiono parametrów", + "parametersNotSetDesc": "Nie znaleziono metadanych dla wybranego obrazu", + "parametersFailed": "Problem z wczytaniem parametrów", + "parametersFailedDesc": "Problem z wczytaniem oryginalnego obrazu", + "seedSet": "Ustawiono inicjator", + "seedNotSet": "Nie ustawiono inicjatora", + "seedNotSetDesc": "Nie znaleziono inicjatora dla wybranego obrazu", + "promptSet": "Ustawiono sugestie", + "promptNotSet": "Nie ustawiono sugestii", + "promptNotSetDesc": "Nie znaleziono zapytania dla wybranego obrazu", + "upscalingFailed": "Błąd powiększania obrazu", + "faceRestoreFailed": "Błąd poprawiania twarzy", + "metadataLoadFailed": "Błąd wczytywania metadanych", + "initialImageSet": "Ustawiono oryginalny obraz", + "initialImageNotSet": "Nie ustawiono oryginalnego obrazu", + "initialImageNotSetDesc": "Błąd wczytywania oryginalnego obrazu" + }, + "tooltip": { + "feature": { + "prompt": "To pole musi zawierać cały tekst sugestii, w tym zarówno opis oczekiwanej zawartości, jak i terminy stylistyczne. Chociaż wagi mogą być zawarte w sugestiach, inne parametry znane z linii poleceń nie będą działać.", + "gallery": "W miarę generowania nowych wywołań w tym miejscu będą wyświetlane pliki z katalogu wyjściowego. Obrazy mają dodatkowo opcje konfiguracji nowych wywołań.", + "other": "Opcje umożliwią alternatywne tryby przetwarzania. Płynne scalanie będzie pomocne przy generowaniu powtarzających się wzorów. Optymalizacja wysokiej rozdzielczości wykonuje dwuetapowy cykl generowania i powinna być używana przy wyższych rozdzielczościach, gdy potrzebny jest bardziej spójny obraz/kompozycja.", + "seed": "Inicjator określa początkowy zestaw szumów, który kieruje procesem odszumiania i może być losowy lub pobrany z poprzedniego wywołania. Funkcja \"Poziom szumu\" może być użyta do złagodzenia saturacji przy wyższych wartościach CFG (spróbuj między 0-10), a Perlin może być użyty w celu dodania wariacji do twoich wyników.", + "variations": "Poziom zróżnicowania przyjmuje wartości od 0 do 1 i pozwala zmienić obraz wyjściowy dla ustawionego inicjatora. Interesujące wyniki uzyskuje się zwykle między 0,1 a 0,3.", + "upscale": "Korzystając z ESRGAN, możesz zwiększyć rozdzielczość obrazu wyjściowego bez konieczności zwiększania szerokości/wysokości w ustawieniach początkowych.", + "faceCorrection": "Poprawianie twarzy próbuje identyfikować twarze na obrazie wyjściowym i korygować wszelkie defekty/nieprawidłowości. W GFPGAN im większa siła, tym mocniejszy efekt. W metodzie Codeformer wyższa wartość oznacza bardziej wierne odtworzenie oryginalnej twarzy, nawet kosztem siły korekcji.", + "imageToImage": "Tryb \"Obraz na obraz\" pozwala na załadowanie obrazu wzorca, który obok wprowadzonych sugestii zostanie użyty porzez InvokeAI do wygenerowania nowego obrazu. Niższa wartość tego ustawienia będzie bardziej przypominać oryginalny obraz. Akceptowane są wartości od 0 do 1, a zalecany jest zakres od 0,25 do 0,75.", + "boundingBox": "Zaznaczony obszar odpowiada ustawieniom wysokości i szerokości w trybach Tekst na obraz i Obraz na obraz. Jedynie piksele znajdujące się w obszarze zaznaczenia zostaną uwzględnione podczas wywoływania nowego obrazu.", + "seamCorrection": "Opcje wpływające na poziom widoczności szwów, które mogą wystąpić, gdy wygenerowany obraz jest ponownie wklejany na płótno.", + "infillAndScaling": "Zarządzaj metodami wypełniania (używanymi na zamaskowanych lub wymazanych obszarach płótna) i skalowaniem (przydatne w przypadku zaznaczonego obszaru o b. małych rozmiarach)." + } + }, + "unifiedCanvas": { + "layer": "Warstwa", + "base": "Główna", + "mask": "Maska", + "maskingOptions": "Opcje maski", + "enableMask": "Włącz maskę", + "preserveMaskedArea": "Zachowaj obszar", + "clearMask": "Wyczyść maskę", + "brush": "Pędzel", + "eraser": "Gumka", + "fillBoundingBox": "Wypełnij zaznaczenie", + "eraseBoundingBox": "Wyczyść zaznaczenie", + "colorPicker": "Pipeta", + "brushOptions": "Ustawienia pędzla", + "brushSize": "Rozmiar", + "move": "Przesunięcie", + "resetView": "Resetuj widok", + "mergeVisible": "Scal warstwy", + "saveToGallery": "Zapisz w galerii", + "copyToClipboard": "Skopiuj do schowka", + "downloadAsImage": "Zapisz do pliku", + "undo": "Cofnij", + "redo": "Ponów", + "clearCanvas": "Wyczyść obraz", + "canvasSettings": "Ustawienia obrazu", + "showIntermediates": "Pokazuj stany pośrednie", + "showGrid": "Pokazuj siatkę", + "snapToGrid": "Przyciągaj do siatki", + "darkenOutsideSelection": "Przyciemnij poza zaznaczeniem", + "autoSaveToGallery": "Zapisuj automatycznie do galerii", + "saveBoxRegionOnly": "Zapisuj tylko zaznaczony obszar", + "limitStrokesToBox": "Rysuj tylko wewnątrz zaznaczenia", + "showCanvasDebugInfo": "Informacje dla developera", + "clearCanvasHistory": "Wyczyść historię operacji", + "clearHistory": "Wyczyść historię", + "clearCanvasHistoryMessage": "Wyczyszczenie historii nie będzie miało wpływu na sam obraz, ale niemożliwe będzie cofnięcie i otworzenie wszystkich wykonanych do tej pory operacji.", + "clearCanvasHistoryConfirm": "Czy na pewno chcesz wyczyścić historię operacji?", + "emptyTempImageFolder": "Wyczyść folder tymczasowy", + "emptyFolder": "Wyczyść", + "emptyTempImagesFolderMessage": "Wyczyszczenie folderu tymczasowego spowoduje usunięcie obrazu i maski w trybie uniwersalnym, historii operacji, oraz wszystkich wygenerowanych ale niezapisanych obrazów.", + "emptyTempImagesFolderConfirm": "Czy na pewno chcesz wyczyścić folder tymczasowy?", + "activeLayer": "Warstwa aktywna", + "canvasScale": "Poziom powiększenia", + "boundingBox": "Rozmiar zaznaczenia", + "scaledBoundingBox": "Rozmiar po skalowaniu", + "boundingBoxPosition": "Pozycja zaznaczenia", + "canvasDimensions": "Rozmiar płótna", + "canvasPosition": "Pozycja płótna", + "cursorPosition": "Pozycja kursora", + "previous": "Poprzedni", + "next": "Następny", + "accept": "Zaakceptuj", + "showHide": "Pokaż/Ukryj", + "discardAll": "Odrzuć wszystkie", + "betaClear": "Wyczyść", + "betaDarkenOutside": "Przyciemnienie", + "betaLimitToBox": "Ogranicz do zaznaczenia", + "betaPreserveMasked": "Zachowaj obszar" + }, + "accessibility": { + "zoomIn": "Przybliż", + "exitViewer": "Wyjdź z podglądu", + "modelSelect": "Wybór modelu", + "invokeProgressBar": "Pasek postępu", + "reset": "Zerowanie", + "useThisParameter": "Użyj tego parametru", + "copyMetadataJson": "Kopiuj metadane JSON", + "uploadImage": "Wgrywanie obrazu", + "previousImage": "Poprzedni obraz", + "nextImage": "Następny obraz", + "zoomOut": "Oddal", + "rotateClockwise": "Obróć zgodnie ze wskazówkami zegara", + "rotateCounterClockwise": "Obróć przeciwnie do wskazówek zegara", + "flipHorizontally": "Odwróć horyzontalnie", + "flipVertically": "Odwróć wertykalnie", + "modifyConfig": "Modyfikuj ustawienia", + "toggleAutoscroll": "Przełącz autoprzewijanie", + "toggleLogViewer": "Przełącz podgląd logów", + "showOptionsPanel": "Pokaż panel opcji", + "menu": "Menu" + } +} diff --git a/invokeai/frontend/web/dist/locales/pt.json b/invokeai/frontend/web/dist/locales/pt.json new file mode 100644 index 0000000000..ac9dd50b4d --- /dev/null +++ b/invokeai/frontend/web/dist/locales/pt.json @@ -0,0 +1,602 @@ +{ + "common": { + "langArabic": "العربية", + "reportBugLabel": "Reportar Bug", + "settingsLabel": "Configurações", + "langBrPortuguese": "Português do Brasil", + "languagePickerLabel": "Seletor de Idioma", + "langDutch": "Nederlands", + "langEnglish": "English", + "hotkeysLabel": "Hotkeys", + "langPolish": "Polski", + "langFrench": "Français", + "langGerman": "Deutsch", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langSimplifiedChinese": "简体中文", + "langSpanish": "Espanhol", + "langRussian": "Русский", + "langUkranian": "Украї́нська", + "img2img": "Imagem para Imagem", + "unifiedCanvas": "Tela Unificada", + "nodes": "Nós", + "nodesDesc": "Um sistema baseado em nós para a geração de imagens está em desenvolvimento atualmente. Fique atento para atualizações sobre este recurso incrível.", + "postProcessDesc3": "A Interface de Linha de Comando do Invoke AI oferece vários outros recursos, incluindo o Embiggen.", + "postProcessing": "Pós Processamento", + "postProcessDesc1": "O Invoke AI oferece uma ampla variedade de recursos de pós-processamento. O aumento de resolução de imagem e a restauração de rosto já estão disponíveis na interface do usuário da Web. Você pode acessá-los no menu Opções Avançadas das guias Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da exibição da imagem atual ou no visualizador.", + "postProcessDesc2": "Em breve, uma interface do usuário dedicada será lançada para facilitar fluxos de trabalho de pós-processamento mais avançados.", + "trainingDesc1": "Um fluxo de trabalho dedicado para treinar seus próprios embeddings e checkpoints usando Textual Inversion e Dreambooth da interface da web.", + "trainingDesc2": "O InvokeAI já oferece suporte ao treinamento de embeddings personalizados usando a Inversão Textual por meio do script principal.", + "upload": "Upload", + "statusError": "Erro", + "statusGeneratingTextToImage": "Gerando Texto para Imagem", + "close": "Fechar", + "load": "Abrir", + "back": "Voltar", + "statusConnected": "Conectado", + "statusDisconnected": "Desconectado", + "statusPreparing": "Preparando", + "statusGenerating": "Gerando", + "statusProcessingCanceled": "Processamento Cancelado", + "statusProcessingComplete": "Processamento Completo", + "statusGeneratingImageToImage": "Gerando Imagem para Imagem", + "statusGeneratingInpainting": "Geração de Preenchimento de Lacunas", + "statusIterationComplete": "Iteração Completa", + "statusSavingImage": "Salvando Imagem", + "statusRestoringFacesGFPGAN": "Restaurando Faces (GFPGAN)", + "statusRestoringFaces": "Restaurando Faces", + "statusRestoringFacesCodeFormer": "Restaurando Faces (CodeFormer)", + "statusUpscaling": "Ampliando", + "statusUpscalingESRGAN": "Ampliando (ESRGAN)", + "statusConvertingModel": "Convertendo Modelo", + "statusModelConverted": "Modelo Convertido", + "statusLoadingModel": "Carregando Modelo", + "statusModelChanged": "Modelo Alterado", + "githubLabel": "Github", + "discordLabel": "Discord", + "training": "Treinando", + "statusGeneratingOutpainting": "Geração de Ampliação", + "statusGenerationComplete": "Geração Completa", + "statusMergingModels": "Mesclando Modelos", + "statusMergedModels": "Modelos Mesclados", + "loading": "A carregar", + "loadingInvokeAI": "A carregar Invoke AI", + "langPortuguese": "Português" + }, + "gallery": { + "galleryImageResetSize": "Resetar Imagem", + "gallerySettings": "Configurações de Galeria", + "maintainAspectRatio": "Mater Proporções", + "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", + "singleColumnLayout": "Disposição em Coluna Única", + "allImagesLoaded": "Todas as Imagens Carregadas", + "loadMore": "Carregar Mais", + "noImagesInGallery": "Sem Imagens na Galeria", + "generations": "Gerações", + "showGenerations": "Mostrar Gerações", + "uploads": "Enviados", + "showUploads": "Mostrar Enviados", + "galleryImageSize": "Tamanho da Imagem" + }, + "hotkeys": { + "generalHotkeys": "Atalhos Gerais", + "galleryHotkeys": "Atalhos da Galeria", + "toggleViewer": { + "title": "Ativar Visualizador", + "desc": "Abrir e fechar o Visualizador de Imagens" + }, + "maximizeWorkSpace": { + "desc": "Fechar painéis e maximixar área de trabalho", + "title": "Maximizar a Área de Trabalho" + }, + "changeTabs": { + "title": "Mudar Guias", + "desc": "Trocar para outra área de trabalho" + }, + "consoleToggle": { + "desc": "Abrir e fechar console", + "title": "Ativar Console" + }, + "setPrompt": { + "title": "Definir Prompt", + "desc": "Usar o prompt da imagem atual" + }, + "sendToImageToImage": { + "desc": "Manda a imagem atual para Imagem Para Imagem", + "title": "Mandar para Imagem Para Imagem" + }, + "previousImage": { + "desc": "Mostra a imagem anterior na galeria", + "title": "Imagem Anterior" + }, + "nextImage": { + "title": "Próxima Imagem", + "desc": "Mostra a próxima imagem na galeria" + }, + "decreaseGalleryThumbSize": { + "desc": "Diminui o tamanho das thumbs na galeria", + "title": "Diminuir Tamanho da Galeria de Imagem" + }, + "selectBrush": { + "title": "Selecionar Pincel", + "desc": "Seleciona o pincel" + }, + "selectEraser": { + "title": "Selecionar Apagador", + "desc": "Seleciona o apagador" + }, + "decreaseBrushSize": { + "title": "Diminuir Tamanho do Pincel", + "desc": "Diminui o tamanho do pincel/apagador" + }, + "increaseBrushOpacity": { + "desc": "Aumenta a opacidade do pincel", + "title": "Aumentar Opacidade do Pincel" + }, + "moveTool": { + "title": "Ferramenta Mover", + "desc": "Permite navegar pela tela" + }, + "decreaseBrushOpacity": { + "desc": "Diminui a opacidade do pincel", + "title": "Diminuir Opacidade do Pincel" + }, + "toggleSnap": { + "title": "Ativar Encaixe", + "desc": "Ativa Encaixar na Grade" + }, + "quickToggleMove": { + "title": "Ativar Mover Rapidamente", + "desc": "Temporariamente ativa o modo Mover" + }, + "toggleLayer": { + "title": "Ativar Camada", + "desc": "Ativa a seleção de camada de máscara/base" + }, + "clearMask": { + "title": "Limpar Máscara", + "desc": "Limpa toda a máscara" + }, + "hideMask": { + "title": "Esconder Máscara", + "desc": "Esconde e Revela a máscara" + }, + "mergeVisible": { + "title": "Fundir Visível", + "desc": "Fundir todas as camadas visíveis das telas" + }, + "downloadImage": { + "desc": "Descarregar a tela atual", + "title": "Descarregar Imagem" + }, + "undoStroke": { + "title": "Desfazer Traço", + "desc": "Desfaz um traço de pincel" + }, + "redoStroke": { + "title": "Refazer Traço", + "desc": "Refaz o traço de pincel" + }, + "keyboardShortcuts": "Atalhos de Teclado", + "appHotkeys": "Atalhos do app", + "invoke": { + "title": "Invocar", + "desc": "Gerar uma imagem" + }, + "cancel": { + "title": "Cancelar", + "desc": "Cancelar geração de imagem" + }, + "focusPrompt": { + "title": "Foco do Prompt", + "desc": "Foco da área de texto do prompt" + }, + "toggleOptions": { + "title": "Ativar Opções", + "desc": "Abrir e fechar o painel de opções" + }, + "pinOptions": { + "title": "Fixar Opções", + "desc": "Fixar o painel de opções" + }, + "closePanels": { + "title": "Fechar Painéis", + "desc": "Fecha os painéis abertos" + }, + "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", + "toggleGallery": { + "title": "Ativar Galeria", + "desc": "Abrir e fechar a gaveta da galeria" + }, + "setSeed": { + "title": "Definir Seed", + "desc": "Usar seed da imagem atual" + }, + "setParameters": { + "title": "Definir Parâmetros", + "desc": "Usar todos os parâmetros da imagem atual" + }, + "restoreFaces": { + "title": "Restaurar Rostos", + "desc": "Restaurar a imagem atual" + }, + "upscale": { + "title": "Redimensionar", + "desc": "Redimensionar a imagem atual" + }, + "showInfo": { + "title": "Mostrar Informações", + "desc": "Mostrar metadados de informações da imagem atual" + }, + "deleteImage": { + "title": "Apagar Imagem", + "desc": "Apaga a imagem atual" + }, + "toggleGalleryPin": { + "title": "Ativar Fixar Galeria", + "desc": "Fixa e desafixa a galeria na interface" + }, + "increaseGalleryThumbSize": { + "title": "Aumentar Tamanho da Galeria de Imagem", + "desc": "Aumenta o tamanho das thumbs na galeria" + }, + "increaseBrushSize": { + "title": "Aumentar Tamanho do Pincel", + "desc": "Aumenta o tamanho do pincel/apagador" + }, + "fillBoundingBox": { + "title": "Preencher Caixa Delimitadora", + "desc": "Preenche a caixa delimitadora com a cor do pincel" + }, + "eraseBoundingBox": { + "title": "Apagar Caixa Delimitadora", + "desc": "Apaga a área da caixa delimitadora" + }, + "colorPicker": { + "title": "Selecionar Seletor de Cor", + "desc": "Seleciona o seletor de cores" + }, + "showHideBoundingBox": { + "title": "Mostrar/Esconder Caixa Delimitadora", + "desc": "Ativa a visibilidade da caixa delimitadora" + }, + "saveToGallery": { + "title": "Gravara Na Galeria", + "desc": "Grava a tela atual na galeria" + }, + "copyToClipboard": { + "title": "Copiar para a Área de Transferência", + "desc": "Copia a tela atual para a área de transferência" + }, + "resetView": { + "title": "Resetar Visualização", + "desc": "Reseta Visualização da Tela" + }, + "previousStagingImage": { + "title": "Imagem de Preparação Anterior", + "desc": "Área de Imagem de Preparação Anterior" + }, + "nextStagingImage": { + "title": "Próxima Imagem de Preparação Anterior", + "desc": "Próxima Área de Imagem de Preparação Anterior" + }, + "acceptStagingImage": { + "title": "Aceitar Imagem de Preparação Anterior", + "desc": "Aceitar Área de Imagem de Preparação Anterior" + } + }, + "modelManager": { + "modelAdded": "Modelo Adicionado", + "modelUpdated": "Modelo Atualizado", + "modelEntryDeleted": "Entrada de modelo excluída", + "description": "Descrição", + "modelLocationValidationMsg": "Caminho para onde o seu modelo está localizado.", + "repo_id": "Repo ID", + "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", + "width": "Largura", + "widthValidationMsg": "Largura padrão do seu modelo.", + "height": "Altura", + "heightValidationMsg": "Altura padrão do seu modelo.", + "findModels": "Encontrar Modelos", + "scanAgain": "Digitalize Novamente", + "deselectAll": "Deselecionar Tudo", + "showExisting": "Mostrar Existente", + "deleteConfig": "Apagar Config", + "convertToDiffusersHelpText6": "Deseja converter este modelo?", + "mergedModelName": "Nome do modelo mesclado", + "alpha": "Alpha", + "interpolationType": "Tipo de Interpolação", + "modelMergeHeaderHelp1": "Pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", + "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro.", + "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", + "nameValidationMsg": "Insira um nome para o seu modelo", + "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", + "config": "Configuração", + "modelExists": "Modelo Existe", + "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", + "noModelsFound": "Nenhum Modelo Encontrado", + "v2_768": "v2 (768px)", + "inpainting": "v1 Inpainting", + "customConfig": "Configuração personalizada", + "pathToCustomConfig": "Caminho para configuração personalizada", + "statusConverting": "A converter", + "modelConverted": "Modelo Convertido", + "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", + "addDifference": "Adicionar diferença", + "pickModelType": "Escolha o tipo de modelo", + "safetensorModels": "SafeTensors", + "cannotUseSpaces": "Não pode usar espaços", + "addNew": "Adicionar Novo", + "addManually": "Adicionar Manualmente", + "manual": "Manual", + "name": "Nome", + "configValidationMsg": "Caminho para o ficheiro de configuração do seu modelo.", + "modelLocation": "Localização do modelo", + "repoIDValidationMsg": "Repositório Online do seu Modelo", + "updateModel": "Atualizar Modelo", + "availableModels": "Modelos Disponíveis", + "load": "Carregar", + "active": "Ativado", + "notLoaded": "Não carregado", + "deleteModel": "Apagar modelo", + "deleteMsg1": "Tem certeza de que deseja apagar esta entrada do modelo de InvokeAI?", + "deleteMsg2": "Isso não vai apagar o ficheiro de modelo checkpoint do seu disco. Pode lê-los, se desejar.", + "convertToDiffusers": "Converter para Diffusers", + "convertToDiffusersHelpText1": "Este modelo será convertido ao formato 🧨 Diffusers.", + "convertToDiffusersHelpText2": "Este processo irá substituir a sua entrada de Gestor de Modelos por uma versão Diffusers do mesmo modelo.", + "convertToDiffusersHelpText3": "O seu ficheiro de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Pode adicionar o seu ponto de verificação ao Gestor de modelos novamente, se desejar.", + "convertToDiffusersSaveLocation": "Local para Gravar", + "v2_base": "v2 (512px)", + "mergeModels": "Mesclar modelos", + "modelOne": "Modelo 1", + "modelTwo": "Modelo 2", + "modelThree": "Modelo 3", + "mergedModelSaveLocation": "Local de Salvamento", + "merge": "Mesclar", + "modelsMerged": "Modelos mesclados", + "mergedModelCustomSaveLocation": "Caminho Personalizado", + "invokeAIFolder": "Pasta Invoke AI", + "inverseSigmoid": "Sigmóide Inversa", + "none": "nenhum", + "modelManager": "Gerente de Modelo", + "model": "Modelo", + "allModels": "Todos os Modelos", + "checkpointModels": "Checkpoints", + "diffusersModels": "Diffusers", + "addNewModel": "Adicionar Novo modelo", + "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", + "addDiffuserModel": "Adicionar Diffusers", + "vaeLocation": "Localização VAE", + "vaeLocationValidationMsg": "Caminho para onde o seu VAE está localizado.", + "vaeRepoID": "VAE Repo ID", + "addModel": "Adicionar Modelo", + "search": "Procurar", + "cached": "Em cache", + "checkpointFolder": "Pasta de Checkpoint", + "clearCheckpointFolder": "Apagar Pasta de Checkpoint", + "modelsFound": "Modelos Encontrados", + "selectFolder": "Selecione a Pasta", + "selected": "Selecionada", + "selectAll": "Selecionar Tudo", + "addSelected": "Adicione Selecionado", + "delete": "Apagar", + "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", + "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", + "formMessageDiffusersVAELocation": "Localização do VAE", + "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo ficheiro VAE dentro do local do modelo.", + "convert": "Converter", + "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, a depender das especificações do seu computador.", + "convertToDiffusersHelpText5": "Por favor, certifique-se de que tenha espaço suficiente no disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", + "v1": "v1", + "sameFolder": "Mesma pasta", + "invokeRoot": "Pasta do InvokeAI", + "custom": "Personalizado", + "customSaveLocation": "Local de salvamento personalizado", + "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam numa influência menor do segundo modelo.", + "sigmoid": "Sigmóide", + "weightedSum": "Soma Ponderada" + }, + "parameters": { + "width": "Largura", + "seed": "Seed", + "hiresStrength": "Força da Alta Resolução", + "general": "Geral", + "randomizeSeed": "Seed Aleatório", + "shuffle": "Embaralhar", + "noiseThreshold": "Limite de Ruído", + "perlinNoise": "Ruído de Perlin", + "variations": "Variatções", + "seedWeights": "Pesos da Seed", + "restoreFaces": "Restaurar Rostos", + "faceRestoration": "Restauração de Rosto", + "type": "Tipo", + "denoisingStrength": "A força de remoção de ruído", + "scale": "Escala", + "otherOptions": "Outras Opções", + "seamlessTiling": "Ladrilho Sem Fronteira", + "hiresOptim": "Otimização de Alta Res", + "imageFit": "Caber Imagem Inicial No Tamanho de Saída", + "codeformerFidelity": "Fidelidade", + "tileSize": "Tamanho do Ladrilho", + "boundingBoxHeader": "Caixa Delimitadora", + "seamCorrectionHeader": "Correção de Fronteira", + "infillScalingHeader": "Preencimento e Escala", + "img2imgStrength": "Força de Imagem Para Imagem", + "toggleLoopback": "Ativar Loopback", + "symmetry": "Simetria", + "sendTo": "Mandar para", + "openInViewer": "Abrir No Visualizador", + "closeViewer": "Fechar Visualizador", + "usePrompt": "Usar Prompt", + "initialImage": "Imagem inicial", + "showOptionsPanel": "Mostrar Painel de Opções", + "strength": "Força", + "upscaling": "Redimensionando", + "upscale": "Redimensionar", + "upscaleImage": "Redimensionar Imagem", + "scaleBeforeProcessing": "Escala Antes do Processamento", + "images": "Imagems", + "steps": "Passos", + "cfgScale": "Escala CFG", + "height": "Altura", + "imageToImage": "Imagem para Imagem", + "variationAmount": "Quntidade de Variatções", + "scaledWidth": "L Escalada", + "scaledHeight": "A Escalada", + "infillMethod": "Método de Preenchimento", + "hSymmetryStep": "H Passo de Simetria", + "vSymmetryStep": "V Passo de Simetria", + "cancel": { + "immediate": "Cancelar imediatamente", + "schedule": "Cancelar após a iteração atual", + "isScheduled": "A cancelar", + "setType": "Definir tipo de cancelamento" + }, + "sendToImg2Img": "Mandar para Imagem Para Imagem", + "sendToUnifiedCanvas": "Mandar para Tela Unificada", + "copyImage": "Copiar imagem", + "copyImageToLink": "Copiar Imagem Para a Ligação", + "downloadImage": "Descarregar Imagem", + "useSeed": "Usar Seed", + "useAll": "Usar Todos", + "useInitImg": "Usar Imagem Inicial", + "info": "Informações" + }, + "settings": { + "confirmOnDelete": "Confirmar Antes de Apagar", + "displayHelpIcons": "Mostrar Ícones de Ajuda", + "enableImageDebugging": "Ativar Depuração de Imagem", + "useSlidersForAll": "Usar deslizadores para todas as opções", + "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", + "models": "Modelos", + "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", + "saveSteps": "Gravar imagens a cada n passos", + "resetWebUI": "Reiniciar Interface", + "resetWebUIDesc2": "Se as imagens não estão a aparecer na galeria ou algo mais não está a funcionar, favor tentar reiniciar antes de postar um problema no GitHub.", + "resetComplete": "A interface foi reiniciada. Atualize a página para carregar." + }, + "toast": { + "uploadFailed": "Envio Falhou", + "uploadFailedUnableToLoadDesc": "Não foj possível carregar o ficheiro", + "downloadImageStarted": "Download de Imagem Começou", + "imageNotLoadedDesc": "Nenhuma imagem encontrada a enviar para o módulo de imagem para imagem", + "imageLinkCopied": "Ligação de Imagem Copiada", + "imageNotLoaded": "Nenhuma Imagem Carregada", + "parametersFailed": "Problema ao carregar parâmetros", + "parametersFailedDesc": "Não foi possível carregar imagem incial.", + "seedSet": "Seed Definida", + "upscalingFailed": "Redimensionamento Falhou", + "promptNotSet": "Prompt Não Definido", + "tempFoldersEmptied": "Pasta de Ficheiros Temporários Esvaziada", + "imageCopied": "Imagem Copiada", + "imageSavedToGallery": "Imagem Salva na Galeria", + "canvasMerged": "Tela Fundida", + "sentToImageToImage": "Mandar Para Imagem Para Imagem", + "sentToUnifiedCanvas": "Enviada para a Tela Unificada", + "parametersSet": "Parâmetros Definidos", + "parametersNotSet": "Parâmetros Não Definidos", + "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", + "seedNotSet": "Seed Não Definida", + "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", + "promptSet": "Prompt Definido", + "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", + "faceRestoreFailed": "Restauração de Rosto Falhou", + "metadataLoadFailed": "Falha ao tentar carregar metadados", + "initialImageSet": "Imagem Inicial Definida", + "initialImageNotSet": "Imagem Inicial Não Definida", + "initialImageNotSetDesc": "Não foi possível carregar imagem incial" + }, + "tooltip": { + "feature": { + "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", + "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", + "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10) e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", + "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", + "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, a resultar em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", + "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", + "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em ficheiros e acessadas pelo menu de contexto.", + "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3.", + "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", + "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", + "infillAndScaling": "Gira os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos)." + } + }, + "unifiedCanvas": { + "emptyTempImagesFolderMessage": "Esvaziar a pasta de ficheiros de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", + "scaledBoundingBox": "Caixa Delimitadora Escalada", + "boundingBoxPosition": "Posição da Caixa Delimitadora", + "next": "Próximo", + "accept": "Aceitar", + "showHide": "Mostrar/Esconder", + "discardAll": "Descartar Todos", + "betaClear": "Limpar", + "betaDarkenOutside": "Escurecer Externamente", + "base": "Base", + "brush": "Pincel", + "showIntermediates": "Mostrar Intermediários", + "showGrid": "Mostrar Grade", + "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", + "boundingBox": "Caixa Delimitadora", + "canvasDimensions": "Dimensões da Tela", + "canvasPosition": "Posição da Tela", + "cursorPosition": "Posição do cursor", + "previous": "Anterior", + "betaLimitToBox": "Limitar á Caixa", + "layer": "Camada", + "mask": "Máscara", + "maskingOptions": "Opções de Mascaramento", + "enableMask": "Ativar Máscara", + "preserveMaskedArea": "Preservar Área da Máscara", + "clearMask": "Limpar Máscara", + "eraser": "Apagador", + "fillBoundingBox": "Preencher Caixa Delimitadora", + "eraseBoundingBox": "Apagar Caixa Delimitadora", + "colorPicker": "Seletor de Cor", + "brushOptions": "Opções de Pincel", + "brushSize": "Tamanho", + "move": "Mover", + "resetView": "Resetar Visualização", + "mergeVisible": "Fundir Visível", + "saveToGallery": "Gravar na Galeria", + "copyToClipboard": "Copiar para a Área de Transferência", + "downloadAsImage": "Descarregar Como Imagem", + "undo": "Desfazer", + "redo": "Refazer", + "clearCanvas": "Limpar Tela", + "canvasSettings": "Configurações de Tela", + "snapToGrid": "Encaixar na Grade", + "darkenOutsideSelection": "Escurecer Seleção Externa", + "autoSaveToGallery": "Gravar Automaticamente na Galeria", + "saveBoxRegionOnly": "Gravar Apenas a Região da Caixa", + "limitStrokesToBox": "Limitar Traços à Caixa", + "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", + "clearCanvasHistory": "Limpar o Histórico da Tela", + "clearHistory": "Limpar Históprico", + "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa a sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", + "emptyTempImageFolder": "Esvaziar a Pasta de Ficheiros de Imagem Temporários", + "emptyFolder": "Esvaziar Pasta", + "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de ficheiros de imagem temporários?", + "activeLayer": "Camada Ativa", + "canvasScale": "Escala da Tela", + "betaPreserveMasked": "Preservar Máscarado" + }, + "accessibility": { + "invokeProgressBar": "Invocar barra de progresso", + "reset": "Repôr", + "nextImage": "Próxima imagem", + "useThisParameter": "Usar este parâmetro", + "copyMetadataJson": "Copiar metadados JSON", + "zoomIn": "Ampliar", + "zoomOut": "Reduzir", + "rotateCounterClockwise": "Girar no sentido anti-horário", + "rotateClockwise": "Girar no sentido horário", + "flipVertically": "Espelhar verticalmente", + "modifyConfig": "Modificar config", + "toggleAutoscroll": "Alternar rolagem automática", + "showOptionsPanel": "Mostrar painel de opções", + "uploadImage": "Enviar imagem", + "previousImage": "Imagem anterior", + "flipHorizontally": "Espelhar horizontalmente", + "toggleLogViewer": "Alternar visualizador de registo" + } +} diff --git a/invokeai/frontend/web/dist/locales/pt_BR.json b/invokeai/frontend/web/dist/locales/pt_BR.json new file mode 100644 index 0000000000..3b45dbbbf3 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/pt_BR.json @@ -0,0 +1,577 @@ +{ + "common": { + "hotkeysLabel": "Teclas de atalho", + "languagePickerLabel": "Seletor de Idioma", + "reportBugLabel": "Relatar Bug", + "settingsLabel": "Configurações", + "img2img": "Imagem Para Imagem", + "unifiedCanvas": "Tela Unificada", + "nodes": "Nódulos", + "langBrPortuguese": "Português do Brasil", + "nodesDesc": "Um sistema baseado em nódulos para geração de imagens está em contrução. Fique ligado para atualizações sobre essa funcionalidade incrível.", + "postProcessing": "Pós-processamento", + "postProcessDesc1": "Invoke AI oferece uma variedade e funcionalidades de pós-processamento. Redimensionador de Imagem e Restauração Facial já estão disponíveis na interface. Você pode acessar elas no menu de Opções Avançadas na aba de Texto para Imagem e Imagem para Imagem. Você também pode processar imagens diretamente, usando os botões de ação de imagem acima da atual tela de imagens ou visualizador.", + "postProcessDesc2": "Uma interface dedicada será lançada em breve para facilitar fluxos de trabalho com opções mais avançadas de pós-processamento.", + "postProcessDesc3": "A interface do comando de linha da Invoke oferece várias funcionalidades incluindo Ampliação.", + "training": "Treinando", + "trainingDesc1": "Um fluxo de trabalho dedicado para treinar suas próprias incorporações e chockpoints usando Inversão Textual e Dreambooth na interface web.", + "trainingDesc2": "InvokeAI já suporta treinar incorporações personalizadas usando Inversão Textual com o script principal.", + "upload": "Enviar", + "close": "Fechar", + "load": "Carregar", + "statusConnected": "Conectado", + "statusDisconnected": "Disconectado", + "statusError": "Erro", + "statusPreparing": "Preparando", + "statusProcessingCanceled": "Processamento Canceledo", + "statusProcessingComplete": "Processamento Completo", + "statusGenerating": "Gerando", + "statusGeneratingTextToImage": "Gerando Texto Para Imagem", + "statusGeneratingImageToImage": "Gerando Imagem Para Imagem", + "statusGeneratingInpainting": "Gerando Inpainting", + "statusGeneratingOutpainting": "Gerando Outpainting", + "statusGenerationComplete": "Geração Completa", + "statusIterationComplete": "Iteração Completa", + "statusSavingImage": "Salvando Imagem", + "statusRestoringFaces": "Restaurando Rostos", + "statusRestoringFacesGFPGAN": "Restaurando Rostos (GFPGAN)", + "statusRestoringFacesCodeFormer": "Restaurando Rostos (CodeFormer)", + "statusUpscaling": "Redimensinando", + "statusUpscalingESRGAN": "Redimensinando (ESRGAN)", + "statusLoadingModel": "Carregando Modelo", + "statusModelChanged": "Modelo Alterado", + "githubLabel": "Github", + "discordLabel": "Discord", + "langArabic": "Árabe", + "langEnglish": "Inglês", + "langDutch": "Holandês", + "langFrench": "Francês", + "langGerman": "Alemão", + "langItalian": "Italiano", + "langJapanese": "Japonês", + "langPolish": "Polonês", + "langSimplifiedChinese": "Chinês", + "langUkranian": "Ucraniano", + "back": "Voltar", + "statusConvertingModel": "Convertendo Modelo", + "statusModelConverted": "Modelo Convertido", + "statusMergingModels": "Mesclando Modelos", + "statusMergedModels": "Modelos Mesclados", + "langRussian": "Russo", + "langSpanish": "Espanhol", + "loadingInvokeAI": "Carregando Invoke AI", + "loading": "Carregando" + }, + "gallery": { + "generations": "Gerações", + "showGenerations": "Mostrar Gerações", + "uploads": "Enviados", + "showUploads": "Mostrar Enviados", + "galleryImageSize": "Tamanho da Imagem", + "galleryImageResetSize": "Resetar Imagem", + "gallerySettings": "Configurações de Galeria", + "maintainAspectRatio": "Mater Proporções", + "autoSwitchNewImages": "Trocar para Novas Imagens Automaticamente", + "singleColumnLayout": "Disposição em Coluna Única", + "allImagesLoaded": "Todas as Imagens Carregadas", + "loadMore": "Carregar Mais", + "noImagesInGallery": "Sem Imagens na Galeria" + }, + "hotkeys": { + "keyboardShortcuts": "Atalhos de Teclado", + "appHotkeys": "Atalhos do app", + "generalHotkeys": "Atalhos Gerais", + "galleryHotkeys": "Atalhos da Galeria", + "unifiedCanvasHotkeys": "Atalhos da Tela Unificada", + "invoke": { + "title": "Invoke", + "desc": "Gerar uma imagem" + }, + "cancel": { + "title": "Cancelar", + "desc": "Cancelar geração de imagem" + }, + "focusPrompt": { + "title": "Foco do Prompt", + "desc": "Foco da área de texto do prompt" + }, + "toggleOptions": { + "title": "Ativar Opções", + "desc": "Abrir e fechar o painel de opções" + }, + "pinOptions": { + "title": "Fixar Opções", + "desc": "Fixar o painel de opções" + }, + "toggleViewer": { + "title": "Ativar Visualizador", + "desc": "Abrir e fechar o Visualizador de Imagens" + }, + "toggleGallery": { + "title": "Ativar Galeria", + "desc": "Abrir e fechar a gaveta da galeria" + }, + "maximizeWorkSpace": { + "title": "Maximizar a Área de Trabalho", + "desc": "Fechar painéis e maximixar área de trabalho" + }, + "changeTabs": { + "title": "Mudar Abas", + "desc": "Trocar para outra área de trabalho" + }, + "consoleToggle": { + "title": "Ativar Console", + "desc": "Abrir e fechar console" + }, + "setPrompt": { + "title": "Definir Prompt", + "desc": "Usar o prompt da imagem atual" + }, + "setSeed": { + "title": "Definir Seed", + "desc": "Usar seed da imagem atual" + }, + "setParameters": { + "title": "Definir Parâmetros", + "desc": "Usar todos os parâmetros da imagem atual" + }, + "restoreFaces": { + "title": "Restaurar Rostos", + "desc": "Restaurar a imagem atual" + }, + "upscale": { + "title": "Redimensionar", + "desc": "Redimensionar a imagem atual" + }, + "showInfo": { + "title": "Mostrar Informações", + "desc": "Mostrar metadados de informações da imagem atual" + }, + "sendToImageToImage": { + "title": "Mandar para Imagem Para Imagem", + "desc": "Manda a imagem atual para Imagem Para Imagem" + }, + "deleteImage": { + "title": "Apagar Imagem", + "desc": "Apaga a imagem atual" + }, + "closePanels": { + "title": "Fechar Painéis", + "desc": "Fecha os painéis abertos" + }, + "previousImage": { + "title": "Imagem Anterior", + "desc": "Mostra a imagem anterior na galeria" + }, + "nextImage": { + "title": "Próxima Imagem", + "desc": "Mostra a próxima imagem na galeria" + }, + "toggleGalleryPin": { + "title": "Ativar Fixar Galeria", + "desc": "Fixa e desafixa a galeria na interface" + }, + "increaseGalleryThumbSize": { + "title": "Aumentar Tamanho da Galeria de Imagem", + "desc": "Aumenta o tamanho das thumbs na galeria" + }, + "decreaseGalleryThumbSize": { + "title": "Diminuir Tamanho da Galeria de Imagem", + "desc": "Diminui o tamanho das thumbs na galeria" + }, + "selectBrush": { + "title": "Selecionar Pincel", + "desc": "Seleciona o pincel" + }, + "selectEraser": { + "title": "Selecionar Apagador", + "desc": "Seleciona o apagador" + }, + "decreaseBrushSize": { + "title": "Diminuir Tamanho do Pincel", + "desc": "Diminui o tamanho do pincel/apagador" + }, + "increaseBrushSize": { + "title": "Aumentar Tamanho do Pincel", + "desc": "Aumenta o tamanho do pincel/apagador" + }, + "decreaseBrushOpacity": { + "title": "Diminuir Opacidade do Pincel", + "desc": "Diminui a opacidade do pincel" + }, + "increaseBrushOpacity": { + "title": "Aumentar Opacidade do Pincel", + "desc": "Aumenta a opacidade do pincel" + }, + "moveTool": { + "title": "Ferramenta Mover", + "desc": "Permite navegar pela tela" + }, + "fillBoundingBox": { + "title": "Preencher Caixa Delimitadora", + "desc": "Preenche a caixa delimitadora com a cor do pincel" + }, + "eraseBoundingBox": { + "title": "Apagar Caixa Delimitadora", + "desc": "Apaga a área da caixa delimitadora" + }, + "colorPicker": { + "title": "Selecionar Seletor de Cor", + "desc": "Seleciona o seletor de cores" + }, + "toggleSnap": { + "title": "Ativar Encaixe", + "desc": "Ativa Encaixar na Grade" + }, + "quickToggleMove": { + "title": "Ativar Mover Rapidamente", + "desc": "Temporariamente ativa o modo Mover" + }, + "toggleLayer": { + "title": "Ativar Camada", + "desc": "Ativa a seleção de camada de máscara/base" + }, + "clearMask": { + "title": "Limpar Máscara", + "desc": "Limpa toda a máscara" + }, + "hideMask": { + "title": "Esconder Máscara", + "desc": "Esconde e Revela a máscara" + }, + "showHideBoundingBox": { + "title": "Mostrar/Esconder Caixa Delimitadora", + "desc": "Ativa a visibilidade da caixa delimitadora" + }, + "mergeVisible": { + "title": "Fundir Visível", + "desc": "Fundir todas as camadas visíveis em tela" + }, + "saveToGallery": { + "title": "Salvara Na Galeria", + "desc": "Salva a tela atual na galeria" + }, + "copyToClipboard": { + "title": "Copiar para a Área de Transferência", + "desc": "Copia a tela atual para a área de transferência" + }, + "downloadImage": { + "title": "Baixar Imagem", + "desc": "Baixa a tela atual" + }, + "undoStroke": { + "title": "Desfazer Traço", + "desc": "Desfaz um traço de pincel" + }, + "redoStroke": { + "title": "Refazer Traço", + "desc": "Refaz o traço de pincel" + }, + "resetView": { + "title": "Resetar Visualização", + "desc": "Reseta Visualização da Tela" + }, + "previousStagingImage": { + "title": "Imagem de Preparação Anterior", + "desc": "Área de Imagem de Preparação Anterior" + }, + "nextStagingImage": { + "title": "Próxima Imagem de Preparação Anterior", + "desc": "Próxima Área de Imagem de Preparação Anterior" + }, + "acceptStagingImage": { + "title": "Aceitar Imagem de Preparação Anterior", + "desc": "Aceitar Área de Imagem de Preparação Anterior" + } + }, + "modelManager": { + "modelManager": "Gerente de Modelo", + "model": "Modelo", + "modelAdded": "Modelo Adicionado", + "modelUpdated": "Modelo Atualizado", + "modelEntryDeleted": "Entrada de modelo excluída", + "cannotUseSpaces": "Não pode usar espaços", + "addNew": "Adicionar Novo", + "addNewModel": "Adicionar Novo modelo", + "addManually": "Adicionar Manualmente", + "manual": "Manual", + "name": "Nome", + "nameValidationMsg": "Insira um nome para o seu modelo", + "description": "Descrição", + "descriptionValidationMsg": "Adicione uma descrição para o seu modelo", + "config": "Configuração", + "configValidationMsg": "Caminho para o arquivo de configuração do seu modelo.", + "modelLocation": "Localização do modelo", + "modelLocationValidationMsg": "Caminho para onde seu modelo está localizado.", + "vaeLocation": "Localização VAE", + "vaeLocationValidationMsg": "Caminho para onde seu VAE está localizado.", + "width": "Largura", + "widthValidationMsg": "Largura padrão do seu modelo.", + "height": "Altura", + "heightValidationMsg": "Altura padrão do seu modelo.", + "addModel": "Adicionar Modelo", + "updateModel": "Atualizar Modelo", + "availableModels": "Modelos Disponíveis", + "search": "Procurar", + "load": "Carregar", + "active": "Ativado", + "notLoaded": "Não carregado", + "cached": "Em cache", + "checkpointFolder": "Pasta de Checkpoint", + "clearCheckpointFolder": "Apagar Pasta de Checkpoint", + "findModels": "Encontrar Modelos", + "modelsFound": "Modelos Encontrados", + "selectFolder": "Selecione a Pasta", + "selected": "Selecionada", + "selectAll": "Selecionar Tudo", + "deselectAll": "Deselecionar Tudo", + "showExisting": "Mostrar Existente", + "addSelected": "Adicione Selecionado", + "modelExists": "Modelo Existe", + "delete": "Excluir", + "deleteModel": "Excluir modelo", + "deleteConfig": "Excluir Config", + "deleteMsg1": "Tem certeza de que deseja excluir esta entrada do modelo de InvokeAI?", + "deleteMsg2": "Isso não vai excluir o arquivo de modelo checkpoint do seu disco. Você pode lê-los, se desejar.", + "checkpointModels": "Checkpoints", + "diffusersModels": "Diffusers", + "safetensorModels": "SafeTensors", + "addCheckpointModel": "Adicionar Modelo de Checkpoint/Safetensor", + "addDiffuserModel": "Adicionar Diffusers", + "repo_id": "Repo ID", + "vaeRepoID": "VAE Repo ID", + "vaeRepoIDValidationMsg": "Repositório Online do seu VAE", + "scanAgain": "Digitalize Novamente", + "selectAndAdd": "Selecione e Adicione Modelos Listados Abaixo", + "noModelsFound": "Nenhum Modelo Encontrado", + "formMessageDiffusersModelLocation": "Localização dos Modelos Diffusers", + "formMessageDiffusersModelLocationDesc": "Por favor entre com ao menos um.", + "formMessageDiffusersVAELocation": "Localização do VAE", + "formMessageDiffusersVAELocationDesc": "Se não provido, InvokeAI irá procurar pelo arquivo VAE dentro do local do modelo.", + "convertToDiffusers": "Converter para Diffusers", + "convertToDiffusersHelpText1": "Este modelo será convertido para o formato 🧨 Diffusers.", + "convertToDiffusersHelpText5": "Por favor, certifique-se de que você tenha espaço suficiente em disco. Os modelos geralmente variam entre 4GB e 7GB de tamanho.", + "convertToDiffusersHelpText6": "Você deseja converter este modelo?", + "convertToDiffusersSaveLocation": "Local para Salvar", + "v1": "v1", + "inpainting": "v1 Inpainting", + "customConfig": "Configuração personalizada", + "pathToCustomConfig": "Caminho para configuração personalizada", + "convertToDiffusersHelpText3": "Seu arquivo de ponto de verificação no disco NÃO será excluído ou modificado de forma alguma. Você pode adicionar seu ponto de verificação ao Gerenciador de modelos novamente, se desejar.", + "convertToDiffusersHelpText4": "Este é um processo único. Pode levar cerca de 30 a 60s, dependendo das especificações do seu computador.", + "merge": "Mesclar", + "modelsMerged": "Modelos mesclados", + "mergeModels": "Mesclar modelos", + "modelOne": "Modelo 1", + "modelTwo": "Modelo 2", + "modelThree": "Modelo 3", + "statusConverting": "Convertendo", + "modelConverted": "Modelo Convertido", + "sameFolder": "Mesma pasta", + "invokeRoot": "Pasta do InvokeAI", + "custom": "Personalizado", + "customSaveLocation": "Local de salvamento personalizado", + "mergedModelName": "Nome do modelo mesclado", + "alpha": "Alpha", + "allModels": "Todos os Modelos", + "repoIDValidationMsg": "Repositório Online do seu Modelo", + "convert": "Converter", + "convertToDiffusersHelpText2": "Este processo irá substituir sua entrada de Gerenciador de Modelos por uma versão Diffusers do mesmo modelo.", + "mergedModelCustomSaveLocation": "Caminho Personalizado", + "mergedModelSaveLocation": "Local de Salvamento", + "interpolationType": "Tipo de Interpolação", + "ignoreMismatch": "Ignorar Divergências entre Modelos Selecionados", + "invokeAIFolder": "Pasta Invoke AI", + "weightedSum": "Soma Ponderada", + "sigmoid": "Sigmóide", + "inverseSigmoid": "Sigmóide Inversa", + "modelMergeHeaderHelp1": "Você pode mesclar até três modelos diferentes para criar uma mistura que atenda às suas necessidades.", + "modelMergeInterpAddDifferenceHelp": "Neste modo, o Modelo 3 é primeiro subtraído do Modelo 2. A versão resultante é mesclada com o Modelo 1 com a taxa alpha definida acima.", + "modelMergeAlphaHelp": "Alpha controla a força da mistura dos modelos. Valores de alpha mais baixos resultam em uma influência menor do segundo modelo.", + "modelMergeHeaderHelp2": "Apenas Diffusers estão disponíveis para mesclagem. Se você deseja mesclar um modelo de checkpoint, por favor, converta-o para Diffusers primeiro." + }, + "parameters": { + "images": "Imagems", + "steps": "Passos", + "cfgScale": "Escala CFG", + "width": "Largura", + "height": "Altura", + "seed": "Seed", + "randomizeSeed": "Seed Aleatório", + "shuffle": "Embaralhar", + "noiseThreshold": "Limite de Ruído", + "perlinNoise": "Ruído de Perlin", + "variations": "Variatções", + "variationAmount": "Quntidade de Variatções", + "seedWeights": "Pesos da Seed", + "faceRestoration": "Restauração de Rosto", + "restoreFaces": "Restaurar Rostos", + "type": "Tipo", + "strength": "Força", + "upscaling": "Redimensionando", + "upscale": "Redimensionar", + "upscaleImage": "Redimensionar Imagem", + "scale": "Escala", + "otherOptions": "Outras Opções", + "seamlessTiling": "Ladrilho Sem Fronteira", + "hiresOptim": "Otimização de Alta Res", + "imageFit": "Caber Imagem Inicial No Tamanho de Saída", + "codeformerFidelity": "Fidelidade", + "scaleBeforeProcessing": "Escala Antes do Processamento", + "scaledWidth": "L Escalada", + "scaledHeight": "A Escalada", + "infillMethod": "Método de Preenchimento", + "tileSize": "Tamanho do Ladrilho", + "boundingBoxHeader": "Caixa Delimitadora", + "seamCorrectionHeader": "Correção de Fronteira", + "infillScalingHeader": "Preencimento e Escala", + "img2imgStrength": "Força de Imagem Para Imagem", + "toggleLoopback": "Ativar Loopback", + "sendTo": "Mandar para", + "sendToImg2Img": "Mandar para Imagem Para Imagem", + "sendToUnifiedCanvas": "Mandar para Tela Unificada", + "copyImageToLink": "Copiar Imagem Para Link", + "downloadImage": "Baixar Imagem", + "openInViewer": "Abrir No Visualizador", + "closeViewer": "Fechar Visualizador", + "usePrompt": "Usar Prompt", + "useSeed": "Usar Seed", + "useAll": "Usar Todos", + "useInitImg": "Usar Imagem Inicial", + "info": "Informações", + "initialImage": "Imagem inicial", + "showOptionsPanel": "Mostrar Painel de Opções", + "vSymmetryStep": "V Passo de Simetria", + "hSymmetryStep": "H Passo de Simetria", + "symmetry": "Simetria", + "copyImage": "Copiar imagem", + "hiresStrength": "Força da Alta Resolução", + "denoisingStrength": "A força de remoção de ruído", + "imageToImage": "Imagem para Imagem", + "cancel": { + "setType": "Definir tipo de cancelamento", + "isScheduled": "Cancelando", + "schedule": "Cancelar após a iteração atual", + "immediate": "Cancelar imediatamente" + }, + "general": "Geral" + }, + "settings": { + "models": "Modelos", + "displayInProgress": "Mostrar Progresso de Imagens Em Andamento", + "saveSteps": "Salvar imagens a cada n passos", + "confirmOnDelete": "Confirmar Antes de Apagar", + "displayHelpIcons": "Mostrar Ícones de Ajuda", + "enableImageDebugging": "Ativar Depuração de Imagem", + "resetWebUI": "Reiniciar Interface", + "resetWebUIDesc1": "Reiniciar a interface apenas reinicia o cache local do broswer para imagens e configurações lembradas. Não apaga nenhuma imagem do disco.", + "resetWebUIDesc2": "Se as imagens não estão aparecendo na galeria ou algo mais não está funcionando, favor tentar reiniciar antes de postar um problema no GitHub.", + "resetComplete": "A interface foi reiniciada. Atualize a página para carregar.", + "useSlidersForAll": "Usar deslizadores para todas as opções" + }, + "toast": { + "tempFoldersEmptied": "Pasta de Arquivos Temporários Esvaziada", + "uploadFailed": "Envio Falhou", + "uploadFailedUnableToLoadDesc": "Não foj possível carregar o arquivo", + "downloadImageStarted": "Download de Imagem Começou", + "imageCopied": "Imagem Copiada", + "imageLinkCopied": "Link de Imagem Copiada", + "imageNotLoaded": "Nenhuma Imagem Carregada", + "imageNotLoadedDesc": "Nenhuma imagem encontrar para mandar para o módulo de imagem para imagem", + "imageSavedToGallery": "Imagem Salva na Galeria", + "canvasMerged": "Tela Fundida", + "sentToImageToImage": "Mandar Para Imagem Para Imagem", + "sentToUnifiedCanvas": "Enviada para a Tela Unificada", + "parametersSet": "Parâmetros Definidos", + "parametersNotSet": "Parâmetros Não Definidos", + "parametersNotSetDesc": "Nenhum metadado foi encontrado para essa imagem.", + "parametersFailed": "Problema ao carregar parâmetros", + "parametersFailedDesc": "Não foi possível carregar imagem incial.", + "seedSet": "Seed Definida", + "seedNotSet": "Seed Não Definida", + "seedNotSetDesc": "Não foi possível achar a seed para a imagem.", + "promptSet": "Prompt Definido", + "promptNotSet": "Prompt Não Definido", + "promptNotSetDesc": "Não foi possível achar prompt para essa imagem.", + "upscalingFailed": "Redimensionamento Falhou", + "faceRestoreFailed": "Restauração de Rosto Falhou", + "metadataLoadFailed": "Falha ao tentar carregar metadados", + "initialImageSet": "Imagem Inicial Definida", + "initialImageNotSet": "Imagem Inicial Não Definida", + "initialImageNotSetDesc": "Não foi possível carregar imagem incial" + }, + "unifiedCanvas": { + "layer": "Camada", + "base": "Base", + "mask": "Máscara", + "maskingOptions": "Opções de Mascaramento", + "enableMask": "Ativar Máscara", + "preserveMaskedArea": "Preservar Área da Máscara", + "clearMask": "Limpar Máscara", + "brush": "Pincel", + "eraser": "Apagador", + "fillBoundingBox": "Preencher Caixa Delimitadora", + "eraseBoundingBox": "Apagar Caixa Delimitadora", + "colorPicker": "Seletor de Cor", + "brushOptions": "Opções de Pincel", + "brushSize": "Tamanho", + "move": "Mover", + "resetView": "Resetar Visualização", + "mergeVisible": "Fundir Visível", + "saveToGallery": "Salvar na Galeria", + "copyToClipboard": "Copiar para a Área de Transferência", + "downloadAsImage": "Baixar Como Imagem", + "undo": "Desfazer", + "redo": "Refazer", + "clearCanvas": "Limpar Tela", + "canvasSettings": "Configurações de Tela", + "showIntermediates": "Mostrar Intermediários", + "showGrid": "Mostrar Grade", + "snapToGrid": "Encaixar na Grade", + "darkenOutsideSelection": "Escurecer Seleção Externa", + "autoSaveToGallery": "Salvar Automaticamente na Galeria", + "saveBoxRegionOnly": "Salvar Apenas a Região da Caixa", + "limitStrokesToBox": "Limitar Traços para a Caixa", + "showCanvasDebugInfo": "Mostrar Informações de Depuração daTela", + "clearCanvasHistory": "Limpar o Histórico da Tela", + "clearHistory": "Limpar Históprico", + "clearCanvasHistoryMessage": "Limpar o histórico de tela deixa sua tela atual intacta, mas limpa de forma irreversível o histórico de desfazer e refazer.", + "clearCanvasHistoryConfirm": "Tem certeza que quer limpar o histórico de tela?", + "emptyTempImageFolder": "Esvaziar a Pasta de Arquivos de Imagem Temporários", + "emptyFolder": "Esvaziar Pasta", + "emptyTempImagesFolderMessage": "Esvaziar a pasta de arquivos de imagem temporários também reseta completamente a Tela Unificada. Isso inclui todo o histórico de desfazer/refazer, imagens na área de preparação e a camada base da tela.", + "emptyTempImagesFolderConfirm": "Tem certeza que quer esvaziar a pasta de arquivos de imagem temporários?", + "activeLayer": "Camada Ativa", + "canvasScale": "Escala da Tela", + "boundingBox": "Caixa Delimitadora", + "scaledBoundingBox": "Caixa Delimitadora Escalada", + "boundingBoxPosition": "Posição da Caixa Delimitadora", + "canvasDimensions": "Dimensões da Tela", + "canvasPosition": "Posição da Tela", + "cursorPosition": "Posição do cursor", + "previous": "Anterior", + "next": "Próximo", + "accept": "Aceitar", + "showHide": "Mostrar/Esconder", + "discardAll": "Descartar Todos", + "betaClear": "Limpar", + "betaDarkenOutside": "Escurecer Externamente", + "betaLimitToBox": "Limitar Para a Caixa", + "betaPreserveMasked": "Preservar Máscarado" + }, + "tooltip": { + "feature": { + "seed": "O valor da semente afeta o ruído inicial a partir do qual a imagem é formada. Você pode usar as sementes já existentes de imagens anteriores. 'Limiar de ruído' é usado para mitigar artefatos em valores CFG altos (experimente a faixa de 0-10), e o Perlin para adicionar ruído Perlin durante a geração: ambos servem para adicionar variação às suas saídas.", + "gallery": "A galeria exibe as gerações da pasta de saída conforme elas são criadas. As configurações são armazenadas em arquivos e acessadas pelo menu de contexto.", + "other": "Essas opções ativam modos alternativos de processamento para o Invoke. 'Seamless tiling' criará padrões repetidos na saída. 'High resolution' é uma geração em duas etapas com img2img: use essa configuração quando desejar uma imagem maior e mais coerente sem artefatos. Levará mais tempo do que o txt2img usual.", + "boundingBox": "A caixa delimitadora é a mesma que as configurações de largura e altura para Texto para Imagem ou Imagem para Imagem. Apenas a área na caixa será processada.", + "upscale": "Use o ESRGAN para ampliar a imagem imediatamente após a geração.", + "seamCorrection": "Controla o tratamento das emendas visíveis que ocorrem entre as imagens geradas no canvas.", + "faceCorrection": "Correção de rosto com GFPGAN ou Codeformer: o algoritmo detecta rostos na imagem e corrige quaisquer defeitos. Um valor alto mudará mais a imagem, resultando em rostos mais atraentes. Codeformer com uma fidelidade maior preserva a imagem original às custas de uma correção de rosto mais forte.", + "prompt": "Este é o campo de prompt. O prompt inclui objetos de geração e termos estilísticos. Você também pode adicionar peso (importância do token) no prompt, mas comandos e parâmetros de CLI não funcionarão.", + "infillAndScaling": "Gerencie os métodos de preenchimento (usados em áreas mascaradas ou apagadas do canvas) e a escala (útil para tamanhos de caixa delimitadora pequenos).", + "imageToImage": "Image to Image carrega qualquer imagem como inicial, que é então usada para gerar uma nova junto com o prompt. Quanto maior o valor, mais a imagem resultante mudará. Valores de 0.0 a 1.0 são possíveis, a faixa recomendada é de 0.25 a 0.75", + "variations": "Experimente uma variação com um valor entre 0,1 e 1,0 para mudar o resultado para uma determinada semente. Variações interessantes da semente estão entre 0,1 e 0,3." + } + } +} diff --git a/invokeai/frontend/web/dist/locales/ro.json b/invokeai/frontend/web/dist/locales/ro.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ro.json @@ -0,0 +1 @@ +{} diff --git a/invokeai/frontend/web/dist/locales/ru.json b/invokeai/frontend/web/dist/locales/ru.json new file mode 100644 index 0000000000..665a821eb1 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/ru.json @@ -0,0 +1,1652 @@ +{ + "common": { + "hotkeysLabel": "Горячие клавиши", + "languagePickerLabel": "Язык", + "reportBugLabel": "Сообщить об ошибке", + "settingsLabel": "Настройки", + "img2img": "Изображение в изображение (img2img)", + "unifiedCanvas": "Единый холст", + "nodes": "Редактор рабочего процесса", + "langRussian": "Русский", + "nodesDesc": "Cистема генерации изображений на основе нодов (узлов) уже разрабатывается. Следите за новостями об этой замечательной функции.", + "postProcessing": "Постобработка", + "postProcessDesc1": "Invoke AI предлагает широкий спектр функций постобработки. Увеличение изображения (upscale) и восстановление лиц уже доступны в интерфейсе. Получите доступ к ним из меню 'Дополнительные параметры' на вкладках 'Текст в изображение' и 'Изображение в изображение'. Обрабатывайте изображения напрямую, используя кнопки действий с изображениями над текущим изображением или в режиме просмотра.", + "postProcessDesc2": "В ближайшее время будет выпущен специальный интерфейс для более продвинутых процессов постобработки.", + "postProcessDesc3": "Интерфейс командной строки Invoke AI предлагает различные другие функции, включая Embiggen.", + "training": "Обучение", + "trainingDesc1": "Специальный интерфейс для обучения собственных моделей с использованием Textual Inversion и Dreambooth.", + "trainingDesc2": "InvokeAI уже поддерживает обучение моделей с помощью TI, через интерфейс командной строки.", + "upload": "Загрузить", + "close": "Закрыть", + "load": "Загрузить", + "statusConnected": "Подключен", + "statusDisconnected": "Отключен", + "statusError": "Ошибка", + "statusPreparing": "Подготовка", + "statusProcessingCanceled": "Обработка прервана", + "statusProcessingComplete": "Обработка завершена", + "statusGenerating": "Генерация", + "statusGeneratingTextToImage": "Создаем изображение из текста", + "statusGeneratingImageToImage": "Создаем изображение из изображения", + "statusGeneratingInpainting": "Дополняем внутри", + "statusGeneratingOutpainting": "Дорисовываем снаружи", + "statusGenerationComplete": "Генерация завершена", + "statusIterationComplete": "Итерация завершена", + "statusSavingImage": "Сохранение изображения", + "statusRestoringFaces": "Восстановление лиц", + "statusRestoringFacesGFPGAN": "Восстановление лиц (GFPGAN)", + "statusRestoringFacesCodeFormer": "Восстановление лиц (CodeFormer)", + "statusUpscaling": "Увеличение", + "statusUpscalingESRGAN": "Увеличение (ESRGAN)", + "statusLoadingModel": "Загрузка модели", + "statusModelChanged": "Модель изменена", + "githubLabel": "Github", + "discordLabel": "Discord", + "statusMergingModels": "Слияние моделей", + "statusModelConverted": "Модель сконвертирована", + "statusMergedModels": "Модели объединены", + "loading": "Загрузка", + "loadingInvokeAI": "Загрузка Invoke AI", + "back": "Назад", + "statusConvertingModel": "Конвертация модели", + "cancel": "Отменить", + "accept": "Принять", + "langUkranian": "Украї́нська", + "langEnglish": "English", + "postprocessing": "Постобработка", + "langArabic": "العربية", + "langSpanish": "Español", + "langSimplifiedChinese": "简体中文", + "langDutch": "Nederlands", + "langFrench": "Français", + "langGerman": "German", + "langHebrew": "Hebrew", + "langItalian": "Italiano", + "langJapanese": "日本語", + "langKorean": "한국어", + "langPolish": "Polski", + "langPortuguese": "Português", + "txt2img": "Текст в изображение (txt2img)", + "langBrPortuguese": "Português do Brasil", + "linear": "Линейная обработка", + "dontAskMeAgain": "Больше не спрашивать", + "areYouSure": "Вы уверены?", + "random": "Случайное", + "generate": "Сгенерировать", + "openInNewTab": "Открыть в новой вкладке", + "imagePrompt": "Запрос", + "communityLabel": "Сообщество", + "lightMode": "Светлая тема", + "batch": "Пакетный менеджер", + "modelManager": "Менеджер моделей", + "darkMode": "Темная тема", + "nodeEditor": "Редактор Нодов (Узлов)", + "controlNet": "Controlnet", + "advanced": "Расширенные", + "t2iAdapter": "T2I Adapter", + "checkpoint": "Checkpoint", + "format": "Формат", + "unknown": "Неизвестно", + "folder": "Папка", + "inpaint": "Перерисовать", + "updated": "Обновлен", + "on": "На", + "save": "Сохранить", + "created": "Создано", + "error": "Ошибка", + "prevPage": "Предыдущая страница", + "simple": "Простой", + "ipAdapter": "IP Adapter", + "controlAdapter": "Адаптер контроля", + "installed": "Установлено", + "ai": "ИИ", + "auto": "Авто", + "file": "Файл", + "delete": "Удалить", + "template": "Шаблон", + "outputs": "результаты", + "unknownError": "Неизвестная ошибка", + "statusProcessing": "Обработка", + "imageFailedToLoad": "Невозможно загрузить изображение", + "direction": "Направление", + "data": "Данные", + "somethingWentWrong": "Что-то пошло не так", + "safetensors": "Safetensors", + "outpaint": "Расширить изображение", + "orderBy": "Сортировать по", + "copyError": "Ошибка $t(gallery.copy)", + "learnMore": "Узнать больше", + "nextPage": "Следущая страница", + "saveAs": "Сохранить как", + "unsaved": "несохраненный", + "input": "Вход", + "details": "Детали", + "notInstalled": "Нет $t(common.installed)" + }, + "gallery": { + "generations": "Генерации", + "showGenerations": "Показывать генерации", + "uploads": "Загрузки", + "showUploads": "Показывать загрузки", + "galleryImageSize": "Размер изображений", + "galleryImageResetSize": "Размер по умолчанию", + "gallerySettings": "Настройка галереи", + "maintainAspectRatio": "Сохранять пропорции", + "autoSwitchNewImages": "Автоматически выбирать новые", + "singleColumnLayout": "Одна колонка", + "allImagesLoaded": "Все изображения загружены", + "loadMore": "Показать больше", + "noImagesInGallery": "Изображений нет", + "deleteImagePermanent": "Удаленные изображения невозможно восстановить.", + "deleteImageBin": "Удаленные изображения будут отправлены в корзину вашей операционной системы.", + "deleteImage": "Удалить изображение", + "assets": "Ресурсы", + "autoAssignBoardOnClick": "Авто-назначение доски по клику", + "deleteSelection": "Удалить выделенное", + "featuresWillReset": "Если вы удалите это изображение, эти функции будут немедленно сброшены.", + "problemDeletingImagesDesc": "Не удалось удалить одно или несколько изображений", + "loading": "Загрузка", + "unableToLoad": "Невозможно загрузить галерею", + "preparingDownload": "Подготовка к скачиванию", + "preparingDownloadFailed": "Проблема с подготовкой к скачиванию", + "image": "изображение", + "drop": "перебросить", + "problemDeletingImages": "Проблема с удалением изображений", + "downloadSelection": "Скачать выделенное", + "currentlyInUse": "В настоящее время это изображение используется в следующих функциях:", + "unstarImage": "Удалить из избранного", + "dropOrUpload": "$t(gallery.drop) или загрузить", + "copy": "Копировать", + "download": "Скачать", + "noImageSelected": "Изображение не выбрано", + "setCurrentImage": "Установить как текущее изображение", + "starImage": "Добавить в избранное", + "dropToUpload": "$t(gallery.drop) чтоб загрузить" + }, + "hotkeys": { + "keyboardShortcuts": "Горячие клавиши", + "appHotkeys": "Горячие клавиши приложения", + "generalHotkeys": "Общие горячие клавиши", + "galleryHotkeys": "Горячие клавиши галереи", + "unifiedCanvasHotkeys": "Горячие клавиши Единого холста", + "invoke": { + "title": "Invoke", + "desc": "Сгенерировать изображение" + }, + "cancel": { + "title": "Отменить", + "desc": "Отменить генерацию изображения" + }, + "focusPrompt": { + "title": "Переключиться на ввод запроса", + "desc": "Переключение на область ввода запроса" + }, + "toggleOptions": { + "title": "Показать/скрыть параметры", + "desc": "Открывать и закрывать панель параметров" + }, + "pinOptions": { + "title": "Закрепить параметры", + "desc": "Закрепить панель параметров" + }, + "toggleViewer": { + "title": "Показать просмотр", + "desc": "Открывать и закрывать просмотрщик изображений" + }, + "toggleGallery": { + "title": "Показать галерею", + "desc": "Открывать и закрывать ящик галереи" + }, + "maximizeWorkSpace": { + "title": "Максимизировать рабочее пространство", + "desc": "Скрыть панели и максимизировать рабочую область" + }, + "changeTabs": { + "title": "Переключить вкладку", + "desc": "Переключиться на другую рабочую область" + }, + "consoleToggle": { + "title": "Показать консоль", + "desc": "Открывать и закрывать консоль" + }, + "setPrompt": { + "title": "Использовать запрос", + "desc": "Использовать запрос из текущего изображения" + }, + "setSeed": { + "title": "Использовать сид", + "desc": "Использовать сид текущего изображения" + }, + "setParameters": { + "title": "Использовать все параметры", + "desc": "Использовать все параметры текущего изображения" + }, + "restoreFaces": { + "title": "Восстановить лица", + "desc": "Восстановить лица на текущем изображении" + }, + "upscale": { + "title": "Увеличение", + "desc": "Увеличить текущеее изображение" + }, + "showInfo": { + "title": "Показать метаданные", + "desc": "Показать метаданные из текущего изображения" + }, + "sendToImageToImage": { + "title": "Отправить в img2img", + "desc": "Отправить текущее изображение в Image To Image" + }, + "deleteImage": { + "title": "Удалить изображение", + "desc": "Удалить текущее изображение" + }, + "closePanels": { + "title": "Закрыть панели", + "desc": "Закрывает открытые панели" + }, + "previousImage": { + "title": "Предыдущее изображение", + "desc": "Отображать предыдущее изображение в галерее" + }, + "nextImage": { + "title": "Следующее изображение", + "desc": "Отображение следующего изображения в галерее" + }, + "toggleGalleryPin": { + "title": "Закрепить галерею", + "desc": "Закрепляет и открепляет галерею" + }, + "increaseGalleryThumbSize": { + "title": "Увеличить размер миниатюр галереи", + "desc": "Увеличивает размер миниатюр галереи" + }, + "decreaseGalleryThumbSize": { + "title": "Уменьшает размер миниатюр галереи", + "desc": "Уменьшает размер миниатюр галереи" + }, + "selectBrush": { + "title": "Выбрать кисть", + "desc": "Выбирает кисть для холста" + }, + "selectEraser": { + "title": "Выбрать ластик", + "desc": "Выбирает ластик для холста" + }, + "decreaseBrushSize": { + "title": "Уменьшить размер кисти", + "desc": "Уменьшает размер кисти/ластика холста" + }, + "increaseBrushSize": { + "title": "Увеличить размер кисти", + "desc": "Увеличивает размер кисти/ластика холста" + }, + "decreaseBrushOpacity": { + "title": "Уменьшить непрозрачность кисти", + "desc": "Уменьшает непрозрачность кисти холста" + }, + "increaseBrushOpacity": { + "title": "Увеличить непрозрачность кисти", + "desc": "Увеличивает непрозрачность кисти холста" + }, + "moveTool": { + "title": "Инструмент перемещения", + "desc": "Позволяет перемещаться по холсту" + }, + "fillBoundingBox": { + "title": "Заполнить ограничивающую рамку", + "desc": "Заполняет ограничивающую рамку цветом кисти" + }, + "eraseBoundingBox": { + "title": "Стереть ограничивающую рамку", + "desc": "Стирает область ограничивающей рамки" + }, + "colorPicker": { + "title": "Выбрать цвет", + "desc": "Выбирает средство выбора цвета холста" + }, + "toggleSnap": { + "title": "Включить привязку", + "desc": "Включает/выключает привязку к сетке" + }, + "quickToggleMove": { + "title": "Быстрое переключение перемещения", + "desc": "Временно переключает режим перемещения" + }, + "toggleLayer": { + "title": "Переключить слой", + "desc": "Переключение маски/базового слоя" + }, + "clearMask": { + "title": "Очистить маску", + "desc": "Очистить всю маску" + }, + "hideMask": { + "title": "Скрыть маску", + "desc": "Скрывает/показывает маску" + }, + "showHideBoundingBox": { + "title": "Показать/скрыть ограничивающую рамку", + "desc": "Переключить видимость ограничивающей рамки" + }, + "mergeVisible": { + "title": "Объединить видимые", + "desc": "Объединить все видимые слои холста" + }, + "saveToGallery": { + "title": "Сохранить в галерею", + "desc": "Сохранить текущий холст в галерею" + }, + "copyToClipboard": { + "title": "Копировать в буфер обмена", + "desc": "Копировать текущий холст в буфер обмена" + }, + "downloadImage": { + "title": "Скачать изображение", + "desc": "Скачать содержимое холста" + }, + "undoStroke": { + "title": "Отменить кисть", + "desc": "Отменить мазок кисти" + }, + "redoStroke": { + "title": "Повторить кисть", + "desc": "Повторить мазок кисти" + }, + "resetView": { + "title": "Вид по умолчанию", + "desc": "Сбросить вид холста" + }, + "previousStagingImage": { + "title": "Предыдущее изображение", + "desc": "Предыдущая область изображения" + }, + "nextStagingImage": { + "title": "Следующее изображение", + "desc": "Следующая область изображения" + }, + "acceptStagingImage": { + "title": "Принять изображение", + "desc": "Принять текущее изображение" + }, + "addNodes": { + "desc": "Открывает меню добавления узла", + "title": "Добавление узлов" + }, + "nodesHotkeys": "Горячие клавиши узлов" + }, + "modelManager": { + "modelManager": "Менеджер моделей", + "model": "Модель", + "modelAdded": "Модель добавлена", + "modelUpdated": "Модель обновлена", + "modelEntryDeleted": "Запись о модели удалена", + "cannotUseSpaces": "Нельзя использовать пробелы", + "addNew": "Добавить новую", + "addNewModel": "Добавить новую модель", + "addManually": "Добавить вручную", + "manual": "Ручное", + "name": "Название", + "nameValidationMsg": "Введите название модели", + "description": "Описание", + "descriptionValidationMsg": "Введите описание модели", + "config": "Файл конфигурации", + "configValidationMsg": "Путь до файла конфигурации.", + "modelLocation": "Расположение модели", + "modelLocationValidationMsg": "Укажите путь к локальной папке, в которой хранится ваша модель Diffusers", + "vaeLocation": "Расположение VAE", + "vaeLocationValidationMsg": "Путь до файла VAE.", + "width": "Ширина", + "widthValidationMsg": "Исходная ширина изображений модели.", + "height": "Высота", + "heightValidationMsg": "Исходная высота изображений модели.", + "addModel": "Добавить модель", + "updateModel": "Обновить модель", + "availableModels": "Доступные модели", + "search": "Искать", + "load": "Загрузить", + "active": "активна", + "notLoaded": "не загружена", + "cached": "кэширована", + "checkpointFolder": "Папка с моделями", + "clearCheckpointFolder": "Очистить папку с моделями", + "findModels": "Найти модели", + "scanAgain": "Сканировать снова", + "modelsFound": "Найденные модели", + "selectFolder": "Выбрать папку", + "selected": "Выбраны", + "selectAll": "Выбрать все", + "deselectAll": "Снять выделение", + "showExisting": "Показывать добавленные", + "addSelected": "Добавить выбранные", + "modelExists": "Модель уже добавлена", + "selectAndAdd": "Выберите и добавьте модели из списка", + "noModelsFound": "Модели не найдены", + "delete": "Удалить", + "deleteModel": "Удалить модель", + "deleteConfig": "Удалить конфигурацию", + "deleteMsg1": "Вы точно хотите удалить модель из InvokeAI?", + "deleteMsg2": "Это приведет К УДАЛЕНИЮ модели С ДИСКА, если она находится в корневой папке Invoke. Если вы используете пользовательское расположение, то модель НЕ будет удалена с диска.", + "repoIDValidationMsg": "Онлайн-репозиторий модели", + "convertToDiffusersHelpText5": "Пожалуйста, убедитесь, что у вас достаточно места на диске. Модели обычно занимают 2–7 Гб.", + "invokeAIFolder": "Каталог InvokeAI", + "ignoreMismatch": "Игнорировать несоответствия между выбранными моделями", + "addCheckpointModel": "Добавить модель Checkpoint/Safetensor", + "formMessageDiffusersModelLocationDesc": "Укажите хотя бы одно.", + "convertToDiffusersHelpText3": "Ваш файл контрольной точки НА ДИСКЕ будет УДАЛЕН, если он находится в корневой папке InvokeAI. Если он находится в пользовательском расположении, то он НЕ будет удален.", + "vaeRepoID": "ID репозитория VAE", + "mergedModelName": "Название объединенной модели", + "checkpointModels": "Модели Checkpoint", + "allModels": "Все модели", + "addDiffuserModel": "Добавить Diffusers", + "repo_id": "ID репозитория", + "formMessageDiffusersVAELocationDesc": "Если не указано, InvokeAI будет искать файл VAE рядом с моделью.", + "convert": "Преобразовать", + "convertToDiffusers": "Преобразовать в Diffusers", + "convertToDiffusersHelpText1": "Модель будет преобразована в формат 🧨 Diffusers.", + "convertToDiffusersHelpText4": "Это единоразовое действие. Оно может занять 30—60 секунд в зависимости от характеристик вашего компьютера.", + "convertToDiffusersHelpText6": "Вы хотите преобразовать эту модель?", + "statusConverting": "Преобразование", + "modelConverted": "Модель преобразована", + "invokeRoot": "Каталог InvokeAI", + "modelsMerged": "Модели объединены", + "mergeModels": "Объединить модели", + "scanForModels": "Просканировать модели", + "sigmoid": "Сигмоид", + "formMessageDiffusersModelLocation": "Расположение Diffusers-модели", + "modelThree": "Модель 3", + "modelMergeHeaderHelp2": "Только Diffusers-модели доступны для объединения. Если вы хотите объединить checkpoint-модели, сначала преобразуйте их в Diffusers.", + "pickModelType": "Выбрать тип модели", + "formMessageDiffusersVAELocation": "Расположение VAE", + "v1": "v1", + "convertToDiffusersSaveLocation": "Путь сохранения", + "customSaveLocation": "Пользовательский путь сохранения", + "alpha": "Альфа", + "diffusersModels": "Diffusers", + "customConfig": "Пользовательский конфиг", + "pathToCustomConfig": "Путь к пользовательскому конфигу", + "inpainting": "v1 Inpainting", + "sameFolder": "В ту же папку", + "modelOne": "Модель 1", + "mergedModelCustomSaveLocation": "Пользовательский путь", + "none": "пусто", + "addDifference": "Добавить разницу", + "vaeRepoIDValidationMsg": "Онлайн репозиторий VAE", + "convertToDiffusersHelpText2": "Этот процесс заменит вашу запись в менеджере моделей на версию той же модели в Diffusers.", + "custom": "Пользовательский", + "modelTwo": "Модель 2", + "mergedModelSaveLocation": "Путь сохранения", + "merge": "Объединить", + "interpolationType": "Тип интерполяции", + "modelMergeInterpAddDifferenceHelp": "В этом режиме Модель 3 сначала вычитается из Модели 2. Результирующая версия смешивается с Моделью 1 с установленным выше коэффициентом Альфа.", + "modelMergeHeaderHelp1": "Вы можете объединить до трех разных моделей, чтобы создать смешанную, соответствующую вашим потребностям.", + "modelMergeAlphaHelp": "Альфа влияет на силу смешивания моделей. Более низкие значения альфа приводят к меньшему влиянию второй модели.", + "inverseSigmoid": "Обратный Сигмоид", + "weightedSum": "Взвешенная сумма", + "safetensorModels": "SafeTensors", + "v2_768": "v2 (768px)", + "v2_base": "v2 (512px)", + "modelDeleted": "Модель удалена", + "importModels": "Импорт Моделей", + "variant": "Вариант", + "baseModel": "Базовая модель", + "modelsSynced": "Модели синхронизированы", + "modelSyncFailed": "Не удалось синхронизировать модели", + "vae": "VAE", + "modelDeleteFailed": "Не удалось удалить модель", + "noCustomLocationProvided": "Пользовательское местоположение не указано", + "convertingModelBegin": "Конвертация модели. Пожалуйста, подождите.", + "settings": "Настройки", + "selectModel": "Выберите модель", + "syncModels": "Синхронизация моделей", + "syncModelsDesc": "Если ваши модели не синхронизированы с серверной частью, вы можете обновить их, используя эту опцию. Обычно это удобно в тех случаях, когда вы вручную обновляете свой файл \"models.yaml\" или добавляете модели в корневую папку InvokeAI после загрузки приложения.", + "modelUpdateFailed": "Не удалось обновить модель", + "modelConversionFailed": "Не удалось сконвертировать модель", + "modelsMergeFailed": "Не удалось выполнить слияние моделей", + "loraModels": "Модели LoRA", + "onnxModels": "Модели Onnx", + "oliveModels": "Модели Olives", + "conversionNotSupported": "Преобразование не поддерживается", + "noModels": "Нет моделей", + "predictionType": "Тип прогноза (для моделей Stable Diffusion 2.x и периодических моделей Stable Diffusion 1.x)", + "quickAdd": "Быстрое добавление", + "simpleModelDesc": "Укажите путь к локальной модели Diffusers , локальной модели checkpoint / safetensors, идентификатор репозитория HuggingFace или URL-адрес модели контрольной checkpoint / diffusers.", + "advanced": "Продвинутый", + "useCustomConfig": "Использовать кастомный конфиг", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "closeAdvanced": "Скрыть расширенные", + "modelType": "Тип модели", + "customConfigFileLocation": "Расположение пользовательского файла конфигурации", + "vaePrecision": "Точность VAE", + "noModelSelected": "Модель не выбрана" + }, + "parameters": { + "images": "Изображения", + "steps": "Шаги", + "cfgScale": "Точность следования запросу (CFG)", + "width": "Ширина", + "height": "Высота", + "seed": "Сид", + "randomizeSeed": "Случайный сид", + "shuffle": "Обновить сид", + "noiseThreshold": "Порог шума", + "perlinNoise": "Шум Перлина", + "variations": "Вариации", + "variationAmount": "Кол-во вариаций", + "seedWeights": "Вес сида", + "faceRestoration": "Восстановление лиц", + "restoreFaces": "Восстановить лица", + "type": "Тип", + "strength": "Сила", + "upscaling": "Увеличение", + "upscale": "Увеличить", + "upscaleImage": "Увеличить изображение", + "scale": "Масштаб", + "otherOptions": "Другие параметры", + "seamlessTiling": "Бесшовность", + "hiresOptim": "Оптимизация High Res", + "imageFit": "Уместить изображение", + "codeformerFidelity": "Точность", + "scaleBeforeProcessing": "Масштабировать", + "scaledWidth": "Масштаб Ш", + "scaledHeight": "Масштаб В", + "infillMethod": "Способ заполнения", + "tileSize": "Размер области", + "boundingBoxHeader": "Ограничивающая рамка", + "seamCorrectionHeader": "Настройка шва", + "infillScalingHeader": "Заполнение и масштабирование", + "img2imgStrength": "Сила обработки img2img", + "toggleLoopback": "Зациклить обработку", + "sendTo": "Отправить", + "sendToImg2Img": "Отправить в img2img", + "sendToUnifiedCanvas": "Отправить на Единый холст", + "copyImageToLink": "Скопировать ссылку", + "downloadImage": "Скачать", + "openInViewer": "Открыть в просмотрщике", + "closeViewer": "Закрыть просмотрщик", + "usePrompt": "Использовать запрос", + "useSeed": "Использовать сид", + "useAll": "Использовать все", + "useInitImg": "Использовать как исходное", + "info": "Метаданные", + "initialImage": "Исходное изображение", + "showOptionsPanel": "Показать панель настроек", + "vSymmetryStep": "Шаг верт. симметрии", + "cancel": { + "immediate": "Отменить немедленно", + "schedule": "Отменить после текущей итерации", + "isScheduled": "Отмена", + "setType": "Установить тип отмены", + "cancel": "Отмена" + }, + "general": "Основное", + "hiresStrength": "Сила High Res", + "symmetry": "Симметрия", + "hSymmetryStep": "Шаг гор. симметрии", + "hidePreview": "Скрыть предпросмотр", + "imageToImage": "Изображение в изображение", + "denoisingStrength": "Сила шумоподавления", + "copyImage": "Скопировать изображение", + "showPreview": "Показать предпросмотр", + "noiseSettings": "Шум", + "seamlessXAxis": "Горизонтальная", + "seamlessYAxis": "Вертикальная", + "scheduler": "Планировщик", + "boundingBoxWidth": "Ширина ограничивающей рамки", + "boundingBoxHeight": "Высота ограничивающей рамки", + "positivePromptPlaceholder": "Запрос", + "negativePromptPlaceholder": "Исключающий запрос", + "controlNetControlMode": "Режим управления", + "clipSkip": "CLIP Пропуск", + "aspectRatio": "Соотношение", + "maskAdjustmentsHeader": "Настройка маски", + "maskBlur": "Размытие", + "maskBlurMethod": "Метод размытия", + "seamLowThreshold": "Низкий", + "seamHighThreshold": "Высокий", + "coherenceSteps": "Шагов", + "coherencePassHeader": "Порог Coherence", + "coherenceStrength": "Сила", + "compositingSettingsHeader": "Настройки компоновки", + "invoke": { + "noNodesInGraph": "Нет узлов в графе", + "noModelSelected": "Модель не выбрана", + "noPrompts": "Подсказки не создаются", + "systemBusy": "Система занята", + "noInitialImageSelected": "Исходное изображение не выбрано", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} отсутствует ввод", + "noControlImageForControlAdapter": "Адаптер контроля #{{number}} не имеет изображения", + "noModelForControlAdapter": "Не выбрана модель адаптера контроля #{{number}}.", + "unableToInvoke": "Невозможно вызвать", + "incompatibleBaseModelForControlAdapter": "Модель контрольного адаптера №{{number}} недействительна для основной модели.", + "systemDisconnected": "Система отключена", + "missingNodeTemplate": "Отсутствует шаблон узла", + "readyToInvoke": "Готово к вызову", + "missingFieldTemplate": "Отсутствует шаблон поля", + "addingImagesTo": "Добавление изображений в" + }, + "seamlessX&Y": "Бесшовный X & Y", + "isAllowedToUpscale": { + "useX2Model": "Изображение слишком велико для увеличения с помощью модели x4. Используйте модель x2", + "tooLarge": "Изображение слишком велико для увеличения. Выберите изображение меньшего размера" + }, + "aspectRatioFree": "Свободное", + "maskEdge": "Край маски", + "cpuNoise": "CPU шум", + "cfgRescaleMultiplier": "Множитель масштабирования CFG", + "cfgRescale": "Изменение масштаба CFG", + "patchmatchDownScaleSize": "уменьшить", + "gpuNoise": "GPU шум", + "seamlessX": "Бесшовный X", + "useCpuNoise": "Использовать шум CPU", + "clipSkipWithLayerCount": "CLIP пропуск {{layerCount}}", + "seamlessY": "Бесшовный Y", + "manualSeed": "Указанный сид", + "imageActions": "Действия с изображениями", + "randomSeed": "Случайный", + "iterations": "Кол-во", + "iterationsWithCount_one": "{{count}} Интеграция", + "iterationsWithCount_few": "{{count}} Итерации", + "iterationsWithCount_many": "{{count}} Итераций", + "useSize": "Использовать размер", + "unmasked": "Без маски", + "enableNoiseSettings": "Включить настройки шума", + "coherenceMode": "Режим" + }, + "settings": { + "models": "Модели", + "displayInProgress": "Показывать процесс генерации", + "saveSteps": "Сохранять каждые n щагов", + "confirmOnDelete": "Подтверждать удаление", + "displayHelpIcons": "Показывать значки подсказок", + "enableImageDebugging": "Включить отладку", + "resetWebUI": "Сброс настроек веб-интерфейса", + "resetWebUIDesc1": "Сброс настроек веб-интерфейса удаляет только локальный кэш браузера с вашими изображениями и настройками. Он не удаляет изображения с диска.", + "resetWebUIDesc2": "Если изображения не отображаются в галерее или не работает что-то еще, пожалуйста, попробуйте сбросить настройки, прежде чем сообщать о проблеме на GitHub.", + "resetComplete": "Настройки веб-интерфейса были сброшены.", + "useSlidersForAll": "Использовать ползунки для всех параметров", + "consoleLogLevel": "Уровень логирования", + "shouldLogToConsole": "Логи в консоль", + "developer": "Разработчик", + "general": "Основное", + "showProgressInViewer": "Показывать процесс генерации в Просмотрщике", + "antialiasProgressImages": "Сглаживать предпоказ процесса генерации", + "generation": "Поколение", + "ui": "Пользовательский интерфейс", + "favoriteSchedulers": "Избранные планировщики", + "favoriteSchedulersPlaceholder": "Нет избранных планировщиков", + "enableNodesEditor": "Включить редактор узлов", + "experimental": "Экспериментальные", + "beta": "Бета", + "alternateCanvasLayout": "Альтернативный слой холста", + "showAdvancedOptions": "Показать доп. параметры", + "autoChangeDimensions": "Обновить Ш/В на стандартные для модели при изменении", + "clearIntermediates": "Очистить промежуточные", + "clearIntermediatesDesc3": "Изображения вашей галереи не будут удалены.", + "clearIntermediatesWithCount_one": "Очистить {{count}} промежуточное", + "clearIntermediatesWithCount_few": "Очистить {{count}} промежуточных", + "clearIntermediatesWithCount_many": "Очистить {{count}} промежуточных", + "enableNSFWChecker": "Включить NSFW проверку", + "clearIntermediatesDisabled": "Очередь должна быть пуста, чтобы очистить промежуточные продукты", + "clearIntermediatesDesc2": "Промежуточные изображения — это побочные продукты генерации, отличные от результирующих изображений в галерее. Очистка промежуточных файлов освободит место на диске.", + "enableInvisibleWatermark": "Включить невидимый водяной знак", + "enableInformationalPopovers": "Включить информационные всплывающие окна", + "intermediatesCleared_one": "Очищено {{count}} промежуточное", + "intermediatesCleared_few": "Очищено {{count}} промежуточных", + "intermediatesCleared_many": "Очищено {{count}} промежуточных", + "clearIntermediatesDesc1": "Очистка промежуточных элементов приведет к сбросу состояния Canvas и ControlNet.", + "intermediatesClearedFailed": "Проблема очистки промежуточных", + "reloadingIn": "Перезагрузка через" + }, + "toast": { + "tempFoldersEmptied": "Временная папка очищена", + "uploadFailed": "Загрузка не удалась", + "uploadFailedUnableToLoadDesc": "Невозможно загрузить файл", + "downloadImageStarted": "Скачивание изображения началось", + "imageCopied": "Изображение скопировано", + "imageLinkCopied": "Ссылка на изображение скопирована", + "imageNotLoaded": "Изображение не загружено", + "imageNotLoadedDesc": "Не удалось найти изображение", + "imageSavedToGallery": "Изображение сохранено в галерею", + "canvasMerged": "Холст объединен", + "sentToImageToImage": "Отправить в img2img", + "sentToUnifiedCanvas": "Отправлено на Единый холст", + "parametersSet": "Параметры заданы", + "parametersNotSet": "Параметры не заданы", + "parametersNotSetDesc": "Не найдены метаданные изображения.", + "parametersFailed": "Проблема с загрузкой параметров", + "parametersFailedDesc": "Невозможно загрузить исходное изображение.", + "seedSet": "Сид задан", + "seedNotSet": "Сид не задан", + "seedNotSetDesc": "Не удалось найти сид для изображения.", + "promptSet": "Запрос задан", + "promptNotSet": "Запрос не задан", + "promptNotSetDesc": "Не удалось найти запрос для изображения.", + "upscalingFailed": "Увеличение не удалось", + "faceRestoreFailed": "Восстановление лиц не удалось", + "metadataLoadFailed": "Не удалось загрузить метаданные", + "initialImageSet": "Исходное изображение задано", + "initialImageNotSet": "Исходное изображение не задано", + "initialImageNotSetDesc": "Не получилось загрузить исходное изображение", + "serverError": "Ошибка сервера", + "disconnected": "Отключено от сервера", + "connected": "Подключено к серверу", + "canceled": "Обработка отменена", + "problemCopyingImageLink": "Не удалось скопировать ссылку на изображение", + "uploadFailedInvalidUploadDesc": "Должно быть одно изображение в формате PNG или JPEG", + "parameterNotSet": "Параметр не задан", + "parameterSet": "Параметр задан", + "nodesLoaded": "Узлы загружены", + "problemCopyingImage": "Не удается скопировать изображение", + "nodesLoadedFailed": "Не удалось загрузить Узлы", + "nodesBrokenConnections": "Не удается загрузить. Некоторые соединения повреждены.", + "nodesUnrecognizedTypes": "Не удается загрузить. Граф имеет нераспознанные типы", + "nodesNotValidJSON": "Недопустимый JSON", + "nodesCorruptedGraph": "Не удается загрузить. Граф, похоже, поврежден.", + "nodesSaved": "Узлы сохранены", + "nodesNotValidGraph": "Недопустимый граф узлов InvokeAI", + "baseModelChangedCleared_one": "Базовая модель изменила, очистила или отключила {{count}} несовместимую подмодель", + "baseModelChangedCleared_few": "Базовая модель изменила, очистила или отключила {{count}} несовместимые подмодели", + "baseModelChangedCleared_many": "Базовая модель изменила, очистила или отключила {{count}} несовместимых подмоделей", + "imageSavingFailed": "Не удалось сохранить изображение", + "canvasSentControlnetAssets": "Холст отправлен в ControlNet и ресурсы", + "problemCopyingCanvasDesc": "Невозможно экспортировать базовый слой", + "loadedWithWarnings": "Рабочий процесс загружен с предупреждениями", + "setInitialImage": "Установить как исходное изображение", + "canvasCopiedClipboard": "Холст скопирован в буфер обмена", + "setControlImage": "Установить как контрольное изображение", + "setNodeField": "Установить как поле узла", + "problemSavingMask": "Проблема с сохранением маски", + "problemSavingCanvasDesc": "Невозможно экспортировать базовый слой", + "invalidUpload": "Неверная загрузка", + "maskSavedAssets": "Маска сохранена в ресурсах", + "modelAddFailed": "Не удалось добавить модель", + "problemDownloadingCanvas": "Проблема с скачиванием холста", + "setAsCanvasInitialImage": "Установить в качестве исходного изображения холста", + "problemMergingCanvas": "Проблема с объединением холста", + "setCanvasInitialImage": "Установить исходное изображение холста", + "imageUploaded": "Изображение загружено", + "addedToBoard": "Добавлено на доску", + "workflowLoaded": "Рабочий процесс загружен", + "problemDeletingWorkflow": "Проблема с удалением рабочего процесса", + "modelAddedSimple": "Модель добавлена", + "problemImportingMaskDesc": "Невозможно экспортировать маску", + "problemCopyingCanvas": "Проблема с копированием холста", + "workflowDeleted": "Рабочий процесс удален", + "problemSavingCanvas": "Проблема с сохранением холста", + "canvasDownloaded": "Холст скачан", + "setIPAdapterImage": "Установить как образ IP-адаптера", + "problemMergingCanvasDesc": "Невозможно экспортировать базовый слой", + "problemDownloadingCanvasDesc": "Невозможно экспортировать базовый слой", + "problemSavingMaskDesc": "Невозможно экспортировать маску", + "problemRetrievingWorkflow": "Проблема с получением рабочего процесса", + "imageSaved": "Изображение сохранено", + "maskSentControlnetAssets": "Маска отправлена в ControlNet и ресурсы", + "canvasSavedGallery": "Холст сохранен в галерею", + "imageUploadFailed": "Не удалось загрузить изображение", + "modelAdded": "Добавлена модель: {{modelName}}", + "problemImportingMask": "Проблема с импортом маски" + }, + "tooltip": { + "feature": { + "prompt": "Это поле для текста запроса, включая объекты генерации и стилистические термины. В запрос можно включить и коэффициенты веса (значимости токена), но консольные команды и параметры не будут работать.", + "gallery": "Здесь отображаются генерации из папки outputs по мере их появления.", + "other": "Эти опции включают альтернативные режимы обработки для Invoke. 'Бесшовный узор' создаст повторяющиеся узоры на выходе. 'Высокое разрешение' это генерация в два этапа с помощью img2img: используйте эту настройку, когда хотите получить цельное изображение большего размера без артефактов.", + "seed": "Значение сида влияет на начальный шум, из которого сформируется изображение. Можно использовать уже имеющийся сид из предыдущих изображений. 'Порог шума' используется для смягчения артефактов при высоких значениях CFG (попробуйте в диапазоне 0-10), а Перлин для добавления шума Перлина в процессе генерации: оба параметра служат для большей вариативности результатов.", + "variations": "Попробуйте вариацию со значением от 0.1 до 1.0, чтобы изменить результат для заданного сида. Интересные вариации сида находятся между 0.1 и 0.3.", + "upscale": "Используйте ESRGAN, чтобы увеличить изображение сразу после генерации.", + "faceCorrection": "Коррекция лиц с помощью GFPGAN или Codeformer: алгоритм определяет лица в готовом изображении и исправляет любые дефекты. Высокие значение силы меняет изображение сильнее, в результате лица будут выглядеть привлекательнее. У Codeformer более высокая точность сохранит исходное изображение в ущерб коррекции лица.", + "imageToImage": "'Изображение в изображение' загружает любое изображение, которое затем используется для генерации вместе с запросом. Чем больше значение, тем сильнее изменится изображение в результате. Возможны значения от 0 до 1, рекомендуется диапазон .25-.75", + "boundingBox": "'Ограничительная рамка' аналогична настройкам Ширина и Высота для 'Избражения из текста' или 'Изображения в изображение'. Будет обработана только область в рамке.", + "seamCorrection": "Управление обработкой видимых швов, возникающих между изображениями на холсте.", + "infillAndScaling": "Управление методами заполнения (используется для масок или стертых областей холста) и масштабирования (полезно для малых размеров ограничивающей рамки)." + } + }, + "unifiedCanvas": { + "layer": "Слой", + "base": "Базовый", + "mask": "Маска", + "maskingOptions": "Параметры маски", + "enableMask": "Включить маску", + "preserveMaskedArea": "Сохранять маскируемую область", + "clearMask": "Очистить маску", + "brush": "Кисть", + "eraser": "Ластик", + "fillBoundingBox": "Заполнить ограничивающую рамку", + "eraseBoundingBox": "Стереть ограничивающую рамку", + "colorPicker": "Пипетка", + "brushOptions": "Параметры кисти", + "brushSize": "Размер", + "move": "Переместить", + "resetView": "Сбросить вид", + "mergeVisible": "Объединить видимые", + "saveToGallery": "Сохранить в галерею", + "copyToClipboard": "Копировать в буфер обмена", + "downloadAsImage": "Скачать как изображение", + "undo": "Отменить", + "redo": "Повторить", + "clearCanvas": "Очистить холст", + "canvasSettings": "Настройки холста", + "showIntermediates": "Показывать процесс", + "showGrid": "Показать сетку", + "snapToGrid": "Привязать к сетке", + "darkenOutsideSelection": "Затемнить холст снаружи", + "autoSaveToGallery": "Автосохранение в галерее", + "saveBoxRegionOnly": "Сохранять только выделение", + "limitStrokesToBox": "Ограничить штрихи выделением", + "showCanvasDebugInfo": "Показать доп. информацию о холсте", + "clearCanvasHistory": "Очистить историю холста", + "clearHistory": "Очистить историю", + "clearCanvasHistoryMessage": "Очистка истории холста оставляет текущий холст нетронутым, но удаляет историю отмен и повторов.", + "clearCanvasHistoryConfirm": "Вы уверены, что хотите очистить историю холста?", + "emptyTempImageFolder": "Очистить временную папку", + "emptyFolder": "Очистить папку", + "emptyTempImagesFolderMessage": "Очищение папки временных изображений также полностью сбрасывает холст, включая всю историю отмены/повтора, размещаемые изображения и базовый слой холста.", + "emptyTempImagesFolderConfirm": "Вы уверены, что хотите очистить временную папку?", + "activeLayer": "Активный слой", + "canvasScale": "Масштаб холста", + "boundingBox": "Ограничивающая рамка", + "scaledBoundingBox": "Масштабирование рамки", + "boundingBoxPosition": "Позиция ограничивающей рамки", + "canvasDimensions": "Размеры холста", + "canvasPosition": "Положение холста", + "cursorPosition": "Положение курсора", + "previous": "Предыдущее", + "next": "Следующее", + "accept": "Принять", + "showHide": "Показать/Скрыть", + "discardAll": "Отменить все", + "betaClear": "Очистить", + "betaDarkenOutside": "Затемнить снаружи", + "betaLimitToBox": "Ограничить выделением", + "betaPreserveMasked": "Сохранять маскируемую область", + "antialiasing": "Не удалось скопировать ссылку на изображение", + "saveMask": "Сохранить $t(unifiedCanvas.mask)", + "showResultsOn": "Показывать результаты (вкл)", + "showResultsOff": "Показывать результаты (вЫкл)" + }, + "accessibility": { + "modelSelect": "Выбор модели", + "uploadImage": "Загрузить изображение", + "nextImage": "Следующее изображение", + "previousImage": "Предыдущее изображение", + "zoomIn": "Приблизить", + "zoomOut": "Отдалить", + "rotateClockwise": "Повернуть по часовой стрелке", + "rotateCounterClockwise": "Повернуть против часовой стрелки", + "flipVertically": "Перевернуть вертикально", + "flipHorizontally": "Отразить горизонтально", + "toggleAutoscroll": "Включить автопрокрутку", + "toggleLogViewer": "Показать или скрыть просмотрщик логов", + "showOptionsPanel": "Показать боковую панель", + "invokeProgressBar": "Индикатор выполнения", + "reset": "Сброс", + "modifyConfig": "Изменить конфиг", + "useThisParameter": "Использовать этот параметр", + "copyMetadataJson": "Скопировать метаданные JSON", + "exitViewer": "Закрыть просмотрщик", + "menu": "Меню", + "showGalleryPanel": "Показать панель галереи", + "mode": "Режим", + "loadMore": "Загрузить больше", + "resetUI": "$t(accessibility.reset) интерфейс", + "createIssue": "Сообщить о проблеме" + }, + "ui": { + "showProgressImages": "Показывать промежуточный итог", + "hideProgressImages": "Не показывать промежуточный итог", + "swapSizes": "Поменять местами размеры", + "lockRatio": "Зафиксировать пропорции" + }, + "nodes": { + "zoomInNodes": "Увеличьте масштаб", + "zoomOutNodes": "Уменьшите масштаб", + "fitViewportNodes": "Уместить вид", + "hideGraphNodes": "Скрыть оверлей графа", + "showGraphNodes": "Показать оверлей графа", + "showLegendNodes": "Показать тип поля", + "hideMinimapnodes": "Скрыть миникарту", + "hideLegendNodes": "Скрыть тип поля", + "showMinimapnodes": "Показать миникарту", + "loadWorkflow": "Загрузить рабочий процесс", + "reloadNodeTemplates": "Перезагрузить шаблоны узлов", + "downloadWorkflow": "Скачать JSON рабочего процесса", + "booleanPolymorphicDescription": "Коллекция логических значений.", + "addNode": "Добавить узел", + "addLinearView": "Добавить в линейный вид", + "animatedEdges": "Анимированные ребра", + "booleanCollectionDescription": "Коллекция логических значений.", + "boardField": "Доска", + "animatedEdgesHelp": "Анимация выбранных ребер и ребер, соединенных с выбранными узлами", + "booleanPolymorphic": "Логическое полиморфное", + "boolean": "Логические значения", + "booleanDescription": "Логические значения могут быть только true или false.", + "cannotConnectInputToInput": "Невозможно подключить вход к входу", + "boardFieldDescription": "Доска галереи", + "cannotConnectOutputToOutput": "Невозможно подключить выход к выходу", + "booleanCollection": "Логическая коллекция", + "addNodeToolTip": "Добавить узел (Shift+A, Пробел)", + "scheduler": "Планировщик", + "inputField": "Поле ввода", + "controlFieldDescription": "Информация об управлении, передаваемая между узлами.", + "skippingUnknownOutputType": "Пропуск неизвестного типа выходного поля", + "denoiseMaskFieldDescription": "Маска шумоподавления может передаваться между узлами", + "floatCollectionDescription": "Коллекция чисел Float.", + "missingTemplate": "Недопустимый узел: узел {{node}} типа {{type}} не имеет шаблона (не установлен?)", + "outputSchemaNotFound": "Схема вывода не найдена", + "ipAdapterPolymorphicDescription": "Коллекция IP-адаптеров.", + "workflowDescription": "Краткое описание", + "inputFieldTypeParseError": "Невозможно разобрать тип поля ввода {{node}}.{{field}} ({{message}})", + "colorFieldDescription": "Цвет RGBA.", + "mainModelField": "Модель", + "unhandledInputProperty": "Необработанное входное свойство", + "unsupportedAnyOfLength": "слишком много элементов объединения ({{count}})", + "versionUnknown": " Версия неизвестна", + "ipAdapterCollection": "Коллекция IP-адаптеров", + "conditioningCollection": "Коллекция условий", + "maybeIncompatible": "Может быть несовместимо с установленным", + "unsupportedArrayItemType": "неподдерживаемый тип элемента массива \"{{type}}\"", + "ipAdapterPolymorphic": "Полиморфный IP-адаптер", + "noNodeSelected": "Узел не выбран", + "unableToValidateWorkflow": "Невозможно проверить рабочий процесс", + "enum": "Перечисления", + "updateAllNodes": "Обновить узлы", + "integerPolymorphicDescription": "Коллекция целых чисел.", + "noOutputRecorded": "Выходы не зарегистрированы", + "updateApp": "Обновить приложение", + "conditioningCollectionDescription": "Условные обозначения могут передаваться между узлами.", + "colorPolymorphic": "Полиморфный цвет", + "colorCodeEdgesHelp": "Цветовая маркировка ребер в соответствии с их связанными полями", + "float": "Float", + "workflowContact": "Контакт", + "targetNodeFieldDoesNotExist": "Неверный край: целевое/вводное поле {{node}}.{{field}} не существует", + "skippingReservedFieldType": "Пропуск зарезервированного типа поля", + "unsupportedMismatchedUnion": "несовпадение типа CollectionOrScalar с базовыми типами {{firstType}} и {{secondType}}", + "sDXLMainModelFieldDescription": "Поле модели SDXL.", + "allNodesUpdated": "Все узлы обновлены", + "conditioningPolymorphic": "Полиморфные условия", + "integer": "Целое число", + "colorField": "Цвет", + "nodeTemplate": "Шаблон узла", + "problemReadingWorkflow": "Проблема с чтением рабочего процесса из изображения", + "sourceNode": "Исходный узел", + "nodeOpacity": "Непрозрачность узла", + "sourceNodeDoesNotExist": "Недопустимое ребро: исходный/выходной узел {{node}} не существует", + "pickOne": "Выбери один", + "integerDescription": "Целые числа — это числа без запятой или точки.", + "outputField": "Поле вывода", + "unableToLoadWorkflow": "Невозможно загрузить рабочий процесс", + "unableToExtractEnumOptions": "невозможно извлечь параметры перечисления", + "snapToGrid": "Привязка к сетке", + "stringPolymorphic": "Полиморфная строка", + "conditioningPolymorphicDescription": "Условие может быть передано между узлами.", + "noFieldsLinearview": "Нет полей, добавленных в линейный вид", + "skipped": "Пропущено", + "unableToParseFieldType": "невозможно проанализировать тип поля", + "imagePolymorphic": "Полиморфное изображение", + "nodeSearch": "Поиск узлов", + "updateNode": "Обновить узел", + "imagePolymorphicDescription": "Коллекция изображений.", + "floatPolymorphic": "Полиморфные Float", + "outputFieldInInput": "Поле вывода во входных данных", + "version": "Версия", + "doesNotExist": "не найдено", + "unrecognizedWorkflowVersion": "Неизвестная версия схемы рабочего процесса {{version}}", + "ipAdapterCollectionDescription": "Коллекция IP-адаптеров.", + "stringCollectionDescription": "Коллекция строк.", + "unableToParseNode": "Невозможно разобрать узел", + "controlCollection": "Контрольная коллекция", + "validateConnections": "Проверка соединений и графика", + "stringCollection": "Коллекция строк", + "inputMayOnlyHaveOneConnection": "Вход может иметь только одно соединение", + "notes": "Заметки", + "outputFieldTypeParseError": "Невозможно разобрать тип поля вывода {{node}}.{{field}} ({{message}})", + "uNetField": "UNet", + "nodeOutputs": "Выходы узла", + "currentImageDescription": "Отображает текущее изображение в редакторе узлов", + "validateConnectionsHelp": "Предотвратить создание недопустимых соединений и вызов недопустимых графиков", + "problemSettingTitle": "Проблема с настройкой названия", + "ipAdapter": "IP-адаптер", + "integerCollection": "Коллекция целых чисел", + "collectionItem": "Элемент коллекции", + "noConnectionInProgress": "Соединение не выполняется", + "vaeModelField": "VAE", + "controlCollectionDescription": "Информация об управлении, передаваемая между узлами.", + "skippedReservedInput": "Пропущено зарезервированное поле ввода", + "workflowVersion": "Версия", + "noConnectionData": "Нет данных о соединении", + "outputFields": "Поля вывода", + "fieldTypesMustMatch": "Типы полей должны совпадать", + "workflow": "Рабочий процесс", + "edge": "Край", + "inputNode": "Входной узел", + "enumDescription": "Перечисления - это значения, которые могут быть одним из нескольких вариантов.", + "unkownInvocation": "Неизвестный тип вызова", + "sourceNodeFieldDoesNotExist": "Неверный край: поле источника/вывода {{node}}.{{field}} не существует", + "imageField": "Изображение", + "skippedReservedOutput": "Пропущено зарезервированное поле вывода", + "cannotDuplicateConnection": "Невозможно создать дубликаты соединений", + "unknownTemplate": "Неизвестный шаблон", + "noWorkflow": "Нет рабочего процесса", + "removeLinearView": "Удалить из линейного вида", + "integerCollectionDescription": "Коллекция целых чисел.", + "colorPolymorphicDescription": "Коллекция цветов.", + "sDXLMainModelField": "Модель SDXL", + "workflowTags": "Теги", + "denoiseMaskField": "Маска шумоподавления", + "missingCanvaInitImage": "Отсутствует начальное изображение холста", + "conditioningFieldDescription": "Условие может быть передано между узлами.", + "clipFieldDescription": "Подмодели Tokenizer и text_encoder.", + "fullyContainNodesHelp": "Чтобы узлы были выбраны, они должны полностью находиться в поле выбора", + "unableToGetWorkflowVersion": "Не удалось получить версию схемы рабочего процесса", + "noImageFoundState": "Начальное изображение не найдено в состоянии", + "workflowValidation": "Ошибка проверки рабочего процесса", + "nodePack": "Пакет узлов", + "stringDescription": "Строки это просто текст.", + "nodeType": "Тип узла", + "noMatchingNodes": "Нет соответствующих узлов", + "fullyContainNodes": "Выбор узлов с полным содержанием", + "integerPolymorphic": "Целочисленные полиморфные", + "executionStateInProgress": "В процессе", + "unableToExtractSchemaNameFromRef": "невозможно извлечь имя схемы из ссылки", + "noFieldType": "Нет типа поля", + "colorCollection": "Коллекция цветов.", + "executionStateError": "Ошибка", + "noOutputSchemaName": "В объекте ref не найдено имя выходной схемы", + "ipAdapterModel": "Модель IP-адаптера", + "prototypeDesc": "Этот вызов является прототипом. Он может претерпевать изменения при обновлении приложения и может быть удален в любой момент.", + "unableToMigrateWorkflow": "Невозможно перенести рабочий процесс", + "skippingInputNoTemplate": "Пропуск поля ввода без шаблона", + "ipAdapterDescription": "Image Prompt Adapter (IP-адаптер).", + "missingCanvaInitMaskImages": "Отсутствуют начальные изображения холста и маски", + "problemReadingMetadata": "Проблема с чтением метаданных с изображения", + "unknownOutput": "Неизвестный вывод: {{name}}", + "stringPolymorphicDescription": "Коллекция строк.", + "oNNXModelField": "Модель ONNX", + "executionStateCompleted": "Выполнено", + "node": "Узел", + "skippingUnknownInputType": "Пропуск неизвестного типа поля", + "workflowAuthor": "Автор", + "currentImage": "Текущее изображение", + "controlField": "Контроль", + "workflowName": "Название", + "collection": "Коллекция", + "ipAdapterModelDescription": "Поле модели IP-адаптера", + "invalidOutputSchema": "Неверная схема вывода", + "unableToUpdateNode": "Невозможно обновить узел", + "floatDescription": "Float - это числа с запятой.", + "floatPolymorphicDescription": "Коллекция Float-ов.", + "vaeField": "VAE", + "conditioningField": "Обусловленность", + "unknownErrorValidatingWorkflow": "Неизвестная ошибка при проверке рабочего процесса", + "collectionFieldType": "Коллекция {{name}}", + "unhandledOutputProperty": "Необработанное выходное свойство", + "workflowNotes": "Примечания", + "string": "Строка", + "floatCollection": "Коллекция Float", + "unknownNodeType": "Неизвестный тип узла", + "unableToUpdateNodes_one": "Невозможно обновить {{count}} узел", + "unableToUpdateNodes_few": "Невозможно обновить {{count}} узла", + "unableToUpdateNodes_many": "Невозможно обновить {{count}} узлов", + "connectionWouldCreateCycle": "Соединение создаст цикл", + "cannotConnectToSelf": "Невозможно подключиться к самому себе", + "notesDescription": "Добавляйте заметки о своем рабочем процессе", + "unknownField": "Неизвестное поле", + "inputFields": "Поля ввода", + "colorCodeEdges": "Ребра с цветовой кодировкой", + "uNetFieldDescription": "Подмодель UNet.", + "unknownNode": "Неизвестный узел", + "targetNodeDoesNotExist": "Недопустимое ребро: целевой/входной узел {{node}} не существует", + "imageCollectionDescription": "Коллекция изображений.", + "mismatchedVersion": "Недопустимый узел: узел {{node}} типа {{type}} имеет несоответствующую версию (попробовать обновить?)", + "unknownFieldType": "$t(nodes.unknownField) тип: {{type}}", + "vaeFieldDescription": "Подмодель VAE.", + "imageFieldDescription": "Изображения могут передаваться между узлами.", + "outputNode": "Выходной узел", + "collectionOrScalarFieldType": "Коллекция | Скаляр {{name}}", + "betaDesc": "Этот вызов находится в бета-версии. Пока он не станет стабильным, в нем могут происходить изменения при обновлении приложений. Мы планируем поддерживать этот вызов в течение длительного времени.", + "nodeVersion": "Версия узла", + "loadingNodes": "Загрузка узлов...", + "snapToGridHelp": "Привязка узлов к сетке при перемещении", + "workflowSettings": "Настройки редактора рабочих процессов", + "sDXLRefinerModelField": "Модель перерисовщик", + "loRAModelField": "LoRA", + "deletedInvalidEdge": "Удалено недопустимое ребро {{source}} -> {{target}}", + "unableToParseEdge": "Невозможно разобрать край", + "unknownInput": "Неизвестный вход: {{name}}", + "oNNXModelFieldDescription": "Поле модели ONNX.", + "imageCollection": "Коллекция изображений" + }, + "controlnet": { + "amult": "a_mult", + "contentShuffleDescription": "Перетасовывает содержимое изображения", + "bgth": "bg_th", + "contentShuffle": "Перетасовка содержимого", + "beginEndStepPercent": "Процент начала/конца шага", + "duplicate": "Дублировать", + "balanced": "Сбалансированный", + "f": "F", + "depthMidasDescription": "Генерация карты глубины с использованием Midas", + "control": "Контроль", + "coarse": "Грубость обработки", + "crop": "Обрезка", + "depthMidas": "Глубина (Midas)", + "enableControlnet": "Включить ControlNet", + "detectResolution": "Определить разрешение", + "controlMode": "Режим контроля", + "cannyDescription": "Детектор границ Canny", + "depthZoe": "Глубина (Zoe)", + "autoConfigure": "Автонастройка процессора", + "delete": "Удалить", + "canny": "Canny", + "depthZoeDescription": "Генерация карты глубины с использованием Zoe", + "resize": "Изменить размер", + "showAdvanced": "Показать расширенные", + "addT2IAdapter": "Добавить $t(common.t2iAdapter)", + "importImageFromCanvas": "Импортировать изображение с холста", + "lineartDescription": "Конвертация изображения в контурный рисунок", + "normalBae": "Обычный BAE", + "importMaskFromCanvas": "Импортировать маску с холста", + "hideAdvanced": "Скрыть расширенные", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) включен, $t(common.t2iAdapter)s отключен", + "ipAdapterModel": "Модель адаптера", + "resetControlImage": "Сбросить контрольное изображение", + "prompt": "Запрос", + "controlnet": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.controlNet)", + "openPoseDescription": "Оценка позы человека с помощью Openpose", + "resizeMode": "Режим изменения размера", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) включен, $t(common.controlNet)s отключен", + "weight": "Вес", + "selectModel": "Выберите модель", + "w": "В", + "processor": "Процессор", + "addControlNet": "Добавить $t(common.controlNet)", + "none": "ничего", + "incompatibleBaseModel": "Несовместимая базовая модель:", + "controlNetT2IMutexDesc": "$t(common.controlNet) и $t(common.t2iAdapter) одновременно в настоящее время не поддерживаются.", + "ip_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.ipAdapter)", + "pidiDescription": "PIDI-обработка изображений", + "mediapipeFace": "Лицо Mediapipe", + "fill": "Заполнить", + "addIPAdapter": "Добавить $t(common.ipAdapter)", + "lineart": "Контурный рисунок", + "colorMapDescription": "Создает карту цветов из изображения", + "lineartAnimeDescription": "Создание контурных рисунков в стиле аниме", + "t2i_adapter": "$t(controlnet.controlAdapter_one) №{{number}} $t(common.t2iAdapter)", + "minConfidence": "Минимальная уверенность", + "imageResolution": "Разрешение изображения", + "colorMap": "Цвет", + "lowThreshold": "Низкий порог", + "highThreshold": "Высокий порог", + "normalBaeDescription": "Обычная обработка BAE", + "noneDescription": "Обработка не применяется", + "saveControlImage": "Сохранить контрольное изображение", + "toggleControlNet": "Переключить эту ControlNet", + "controlAdapter_one": "Адаптер контроля", + "controlAdapter_few": "Адаптера контроля", + "controlAdapter_many": "Адаптеров контроля", + "safe": "Безопасный", + "colorMapTileSize": "Размер плитки", + "lineartAnime": "Контурный рисунок в стиле аниме", + "ipAdapterImageFallback": "Изображение IP Adapter не выбрано", + "mediapipeFaceDescription": "Обнаружение лиц с помощью Mediapipe", + "hedDescription": "Целостное обнаружение границ", + "setControlImageDimensions": "Установите размеры контрольного изображения на Ш/В", + "scribble": "каракули", + "resetIPAdapterImage": "Сбросить изображение IP Adapter", + "handAndFace": "Руки и Лицо", + "enableIPAdapter": "Включить IP Adapter", + "maxFaces": "Макс Лица", + "mlsdDescription": "Минималистичный детектор отрезков линии" + }, + "boards": { + "autoAddBoard": "Авто добавление Доски", + "topMessage": "Эта доска содержит изображения, используемые в следующих функциях:", + "move": "Перемещение", + "menuItemAutoAdd": "Авто добавление на эту доску", + "myBoard": "Моя Доска", + "searchBoard": "Поиск Доски...", + "noMatching": "Нет подходящих Досок", + "selectBoard": "Выбрать Доску", + "cancel": "Отменить", + "addBoard": "Добавить Доску", + "bottomMessage": "Удаление этой доски и ее изображений приведет к сбросу всех функций, использующихся их в данный момент.", + "uncategorized": "Без категории", + "changeBoard": "Изменить Доску", + "loading": "Загрузка...", + "clearSearch": "Очистить поиск", + "deleteBoardOnly": "Удалить только доску", + "movingImagesToBoard_one": "Перемещаем {{count}} изображение на доску:", + "movingImagesToBoard_few": "Перемещаем {{count}} изображения на доску:", + "movingImagesToBoard_many": "Перемещаем {{count}} изображений на доску:", + "downloadBoard": "Скачать доску", + "deleteBoard": "Удалить доску", + "deleteBoardAndImages": "Удалить доску и изображения", + "deletedBoardsCannotbeRestored": "Удаленные доски не подлежат восстановлению" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "Используйте разные сиды для каждого изображения", + "perIterationLabel": "Сид на итерацию", + "perIterationDesc": "Используйте разные сиды для каждой итерации", + "perPromptLabel": "Сид для каждого изображения", + "label": "Поведение сида" + }, + "enableDynamicPrompts": "Динамические запросы", + "combinatorial": "Комбинаторная генерация", + "maxPrompts": "Максимум запросов", + "promptsPreview": "Предпросмотр запросов", + "promptsWithCount_one": "{{count}} Запрос", + "promptsWithCount_few": "{{count}} Запроса", + "promptsWithCount_many": "{{count}} Запросов", + "dynamicPrompts": "Динамические запросы" + }, + "popovers": { + "noiseUseCPU": { + "paragraphs": [ + "Определяет, генерируется ли шум на CPU или на GPU.", + "Если включен шум CPU, определенное начальное число будет создавать одно и то же изображение на любом компьютере.", + "Включение шума CPU не влияет на производительность." + ], + "heading": "Использовать шум CPU" + }, + "paramScheduler": { + "paragraphs": [ + "Планировщик определяет, как итеративно добавлять шум к изображению или как обновлять образец на основе выходных данных модели." + ], + "heading": "Планировщик" + }, + "scaleBeforeProcessing": { + "paragraphs": [ + "Масштабирует выбранную область до размера, наиболее подходящего для модели перед процессом создания изображения." + ], + "heading": "Масштабирование перед обработкой" + }, + "compositingMaskAdjustments": { + "heading": "Регулировка маски", + "paragraphs": [ + "Отрегулируйте маску." + ] + }, + "paramRatio": { + "heading": "Соотношение сторон", + "paragraphs": [ + "Соотношение сторон создаваемого изображения.", + "Размер изображения (в пикселях), эквивалентный 512x512, рекомендуется для моделей SD1.5, а размер, эквивалентный 1024x1024, рекомендуется для моделей SDXL." + ] + }, + "compositingCoherenceSteps": { + "heading": "Шаги", + "paragraphs": [ + null, + "То же, что и основной параметр «Шаги»." + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "Динамические запросы превращают одно приглашение на множество.", + "Базовый синтакиси: \"a {red|green|blue} ball\". В итоге будет 3 запроса: \"a red ball\", \"a green ball\" и \"a blue ball\".", + "Вы можете использовать синтаксис столько раз, сколько захотите в одном запросе, но обязательно контролируйте количество генерируемых запросов с помощью параметра «Максимальное количество запросов»." + ], + "heading": "Динамические запросы" + }, + "paramVAE": { + "paragraphs": [ + "Модель, используемая для преобразования вывода AI в конечное изображение." + ], + "heading": "VAE" + }, + "compositingBlur": { + "heading": "Размытие", + "paragraphs": [ + "Радиус размытия маски." + ] + }, + "paramIterations": { + "paragraphs": [ + "Количество изображений, которые нужно сгенерировать.", + "Если динамические подсказки включены, каждое из подсказок будет генерироваться столько раз." + ], + "heading": "Итерации" + }, + "paramVAEPrecision": { + "heading": "Точность VAE", + "paragraphs": [ + "Точность, используемая во время кодирования и декодирования VAE. Точность FP16/половина более эффективна за счет незначительных изменений изображения." + ] + }, + "compositingCoherenceMode": { + "heading": "Режим" + }, + "paramSeed": { + "paragraphs": [ + "Управляет стартовым шумом, используемым для генерации.", + "Отключите «Случайное начальное число», чтобы получить идентичные результаты с теми же настройками генерации." + ], + "heading": "Сид" + }, + "controlNetResizeMode": { + "heading": "Режим изменения размера", + "paragraphs": [ + "Как изображение ControlNet будет соответствовать размеру выходного изображения." + ] + }, + "controlNetBeginEnd": { + "paragraphs": [ + "На каких этапах процесса шумоподавления будет применена ControlNet.", + "ControlNet, применяемые в начале процесса, направляют композицию, а ControlNet, применяемые в конце, направляют детали." + ], + "heading": "Процент начала/конца шага" + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "Управляет использованием сида при создании запросов.", + "Для каждой итерации будет использоваться уникальный сид. Используйте это, чтобы изучить варианты запросов для одного сида.", + "Например, если у вас 5 запросов, каждое изображение будет использовать один и то же сид.", + "для каждого изображения будет использоваться уникальный сид. Это обеспечивает большую вариативность." + ], + "heading": "Поведение сида" + }, + "clipSkip": { + "paragraphs": [ + "Выберите, сколько слоев модели CLIP нужно пропустить.", + "Некоторые модели работают лучше с определенными настройками пропуска CLIP.", + "Более высокое значение обычно приводит к менее детализированному изображению." + ], + "heading": "CLIP пропуск" + }, + "paramModel": { + "heading": "Модель", + "paragraphs": [ + "Модель, используемая для шагов шумоподавления.", + "Различные модели обычно обучаются, чтобы специализироваться на достижении определенных эстетических результатов и содержания." + ] + }, + "compositingCoherencePass": { + "heading": "Согласованность", + "paragraphs": [ + "Второй этап шумоподавления помогает исправить шов между изначальным изображением и перерисованной или расширенной частью." + ] + }, + "paramDenoisingStrength": { + "paragraphs": [ + "Количество шума, добавляемого к входному изображению.", + "0 приведет к идентичному изображению, а 1 - к совершенно новому." + ], + "heading": "Шумоподавление" + }, + "compositingStrength": { + "heading": "Сила", + "paragraphs": [ + null, + "То же, что параметр «Сила шумоподавления img2img»." + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "Stable Diffusion пытается избежать указанных в отрицательном запросе концепций. Используйте это, чтобы исключить качества или объекты из вывода.", + "Поддерживает синтаксис Compel и встраивания." + ], + "heading": "Негативный запрос" + }, + "compositingBlurMethod": { + "heading": "Метод размытия", + "paragraphs": [ + "Метод размытия, примененный к замаскированной области." + ] + }, + "dynamicPromptsMaxPrompts": { + "heading": "Макс. запросы", + "paragraphs": [ + "Ограничивает количество запросов, которые могут быть созданы с помощью динамических запросов." + ] + }, + "paramCFGRescaleMultiplier": { + "heading": "Множитель масштабирования CFG", + "paragraphs": [ + "Множитель масштабирования CFG, используемый для моделей, обученных с использованием нулевого терминального SNR (ztsnr). Рекомендуемое значение 0,7." + ] + }, + "infillMethod": { + "paragraphs": [ + "Метод заполнения выбранной области." + ], + "heading": "Метод заполнения" + }, + "controlNetWeight": { + "heading": "Вес", + "paragraphs": [ + "Насколько сильно ControlNet повлияет на созданное изображение." + ] + }, + "controlNet": { + "heading": "ControlNet", + "paragraphs": [ + "Сети ControlNets обеспечивают руководство процессом генерации, помогая создавать изображения с контролируемой композицией, структурой или стилем, в зависимости от выбранной модели." + ] + }, + "paramCFGScale": { + "heading": "Шкала точности (CFG)", + "paragraphs": [ + "Контролирует, насколько ваш запрос влияет на процесс генерации." + ] + }, + "controlNetControlMode": { + "paragraphs": [ + "Придает больший вес либо запросу, либо ControlNet." + ], + "heading": "Режим управления" + }, + "paramSteps": { + "heading": "Шаги", + "paragraphs": [ + "Количество шагов, которые будут выполнены в ходе генерации.", + "Большее количество шагов обычно приводит к созданию более качественных изображений, но требует больше времени на создание." + ] + }, + "paramPositiveConditioning": { + "heading": "Запрос", + "paragraphs": [ + "Направляет процесс генерации. Вы можете использовать любые слова и фразы.", + "Большинство моделей Stable Diffusion работают только с запросом на английском языке, но бывают исключения." + ] + }, + "lora": { + "heading": "Вес LoRA", + "paragraphs": [ + "Более высокий вес LoRA приведет к большему влиянию на конечное изображение." + ] + } + }, + "metadata": { + "seamless": "Бесшовность", + "positivePrompt": "Запрос", + "negativePrompt": "Негативный запрос", + "generationMode": "Режим генерации", + "Threshold": "Шумовой порог", + "metadata": "Метаданные", + "strength": "Сила img2img", + "seed": "Сид", + "imageDetails": "Детали изображения", + "perlin": "Шум Перлига", + "model": "Модель", + "noImageDetails": "Детали изображения не найдены", + "hiresFix": "Оптимизация высокого разрешения", + "cfgScale": "Шкала точности", + "fit": "Соответствие изображения к изображению", + "initImage": "Исходное изображение", + "recallParameters": "Вызов параметров", + "height": "Высота", + "variations": "Пары сид-высота", + "noMetaData": "Метаданные не найдены", + "width": "Ширина", + "vae": "VAE", + "createdBy": "Сделано", + "workflow": "Рабочий процесс", + "steps": "Шаги", + "scheduler": "Планировщик", + "noRecallParameters": "Параметры для вызова не найдены", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)" + }, + "queue": { + "status": "Статус", + "pruneSucceeded": "Из очереди удалено {{item_count}} выполненных элементов", + "cancelTooltip": "Отменить текущий элемент", + "queueEmpty": "Очередь пуста", + "pauseSucceeded": "Рендеринг приостановлен", + "in_progress": "В процессе", + "queueFront": "Добавить в начало очереди", + "notReady": "Невозможно поставить в очередь", + "batchFailedToQueue": "Не удалось поставить пакет в очередь", + "completed": "Выполнено", + "queueBack": "Добавить в очередь", + "batchValues": "Пакетные значения", + "cancelFailed": "Проблема с отменой элемента", + "queueCountPrediction": "Добавить {{predicted}} в очередь", + "batchQueued": "Пакетная очередь", + "pauseFailed": "Проблема с приостановкой рендеринга", + "clearFailed": "Проблема с очисткой очереди", + "queuedCount": "{{pending}} Ожидание", + "front": "передний", + "clearSucceeded": "Очередь очищена", + "pause": "Пауза", + "pruneTooltip": "Удалить {{item_count}} выполненных задач", + "cancelSucceeded": "Элемент отменен", + "batchQueuedDesc_one": "Добавлен {{count}} сеанс в {{direction}} очереди", + "batchQueuedDesc_few": "Добавлено {{count}} сеанса в {{direction}} очереди", + "batchQueuedDesc_many": "Добавлено {{count}} сеансов в {{direction}} очереди", + "graphQueued": "График поставлен в очередь", + "queue": "Очередь", + "batch": "Пакет", + "clearQueueAlertDialog": "Очистка очереди немедленно отменяет все элементы обработки и полностью очищает очередь.", + "pending": "В ожидании", + "completedIn": "Завершено за", + "resumeFailed": "Проблема с возобновлением рендеринга", + "clear": "Очистить", + "prune": "Сократить", + "total": "Всего", + "canceled": "Отменено", + "pruneFailed": "Проблема с сокращением очереди", + "cancelBatchSucceeded": "Пакет отменен", + "clearTooltip": "Отменить все и очистить очередь", + "current": "Текущий", + "pauseTooltip": "Приостановить рендеринг", + "failed": "Неудачно", + "cancelItem": "Отменить элемент", + "next": "Следующий", + "cancelBatch": "Отменить пакет", + "back": "задний", + "batchFieldValues": "Пакетные значения полей", + "cancel": "Отмена", + "session": "Сессия", + "time": "Время", + "queueTotal": "{{total}} Всего", + "resumeSucceeded": "Рендеринг возобновлен", + "enqueueing": "Пакетная очередь", + "resumeTooltip": "Возобновить рендеринг", + "queueMaxExceeded": "Превышено максимальное значение {{max_queue_size}}, будет пропущен {{skip}}", + "resume": "Продолжить", + "cancelBatchFailed": "Проблема с отменой пакета", + "clearQueueAlertDialog2": "Вы уверены, что хотите очистить очередь?", + "item": "Элемент", + "graphFailedToQueue": "Не удалось поставить график в очередь" + }, + "sdxl": { + "refinerStart": "Запуск перерисовщика", + "selectAModel": "Выберите модель", + "scheduler": "Планировщик", + "cfgScale": "Шкала точности (CFG)", + "negStylePrompt": "Негативный запрос стиля", + "noModelsAvailable": "Нет доступных моделей", + "refiner": "Перерисовщик", + "negAestheticScore": "Отрицательная эстетическая оценка", + "useRefiner": "Использовать перерисовщик", + "denoisingStrength": "Шумоподавление", + "refinermodel": "Модель перерисовщик", + "posAestheticScore": "Положительная эстетическая оценка", + "concatPromptStyle": "Объединение запроса и стиля", + "loading": "Загрузка...", + "steps": "Шаги", + "posStylePrompt": "Запрос стиля" + }, + "invocationCache": { + "useCache": "Использовать кэш", + "disable": "Отключить", + "misses": "Промахи в кэше", + "enableFailed": "Проблема с включением кэша вызовов", + "invocationCache": "Кэш вызовов", + "clearSucceeded": "Кэш вызовов очищен", + "enableSucceeded": "Кэш вызовов включен", + "clearFailed": "Проблема с очисткой кэша вызовов", + "hits": "Попадания в кэш", + "disableSucceeded": "Кэш вызовов отключен", + "disableFailed": "Проблема с отключением кэша вызовов", + "enable": "Включить", + "clear": "Очистить", + "maxCacheSize": "Максимальный размер кэша", + "cacheSize": "Размер кэша" + }, + "workflows": { + "saveWorkflowAs": "Сохранить рабочий процесс как", + "workflowEditorMenu": "Меню редактора рабочего процесса", + "noSystemWorkflows": "Нет системных рабочих процессов", + "workflowName": "Имя рабочего процесса", + "noUserWorkflows": "Нет пользовательских рабочих процессов", + "defaultWorkflows": "Рабочие процессы по умолчанию", + "saveWorkflow": "Сохранить рабочий процесс", + "openWorkflow": "Открытый рабочий процесс", + "clearWorkflowSearchFilter": "Очистить фильтр поиска рабочих процессов", + "workflowLibrary": "Библиотека", + "downloadWorkflow": "Скачать рабочий процесс", + "noRecentWorkflows": "Нет недавних рабочих процессов", + "workflowSaved": "Рабочий процесс сохранен", + "workflowIsOpen": "Рабочий процесс открыт", + "unnamedWorkflow": "Безымянный рабочий процесс", + "savingWorkflow": "Сохранение рабочего процесса...", + "problemLoading": "Проблема с загрузкой рабочих процессов", + "loading": "Загрузка рабочих процессов", + "searchWorkflows": "Поиск рабочих процессов", + "problemSavingWorkflow": "Проблема с сохранением рабочего процесса", + "deleteWorkflow": "Удалить рабочий процесс", + "workflows": "Рабочие процессы", + "noDescription": "Без описания", + "uploadWorkflow": "Загрузить рабочий процесс", + "userWorkflows": "Мои рабочие процессы" + }, + "embedding": { + "noEmbeddingsLoaded": "встраивания не загружены", + "noMatchingEmbedding": "Нет подходящих встраиваний", + "addEmbedding": "Добавить встраивание", + "incompatibleModel": "Несовместимая базовая модель:" + }, + "hrf": { + "enableHrf": "Включить исправление высокого разрешения", + "upscaleMethod": "Метод увеличения", + "enableHrfTooltip": "Сгенерируйте с более низким начальным разрешением, увеличьте его до базового разрешения, а затем запустите Image-to-Image.", + "metadata": { + "strength": "Сила исправления высокого разрешения", + "enabled": "Исправление высокого разрешения включено", + "method": "Метод исправления высокого разрешения" + }, + "hrf": "Исправление высокого разрешения", + "hrfStrength": "Сила исправления высокого разрешения", + "strengthTooltip": "Более низкие значения приводят к меньшему количеству деталей, что может уменьшить потенциальные артефакты." + }, + "models": { + "noLoRAsLoaded": "LoRA не загружены", + "noMatchingModels": "Нет подходящих моделей", + "esrganModel": "Модель ESRGAN", + "loading": "загрузка", + "noMatchingLoRAs": "Нет подходящих LoRA", + "noLoRAsAvailable": "Нет доступных LoRA", + "noModelsAvailable": "Нет доступных моделей", + "addLora": "Добавить LoRA", + "selectModel": "Выберите модель", + "noRefinerModelsInstalled": "Модели SDXL Refiner не установлены", + "noLoRAsInstalled": "Нет установленных LoRA", + "selectLoRA": "Выберите LoRA" + }, + "app": { + "storeNotInitialized": "Магазин не инициализирован" + } +} diff --git a/invokeai/frontend/web/dist/locales/sv.json b/invokeai/frontend/web/dist/locales/sv.json new file mode 100644 index 0000000000..eef46c4513 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/sv.json @@ -0,0 +1,246 @@ +{ + "accessibility": { + "copyMetadataJson": "Kopiera metadata JSON", + "zoomIn": "Zooma in", + "exitViewer": "Avslutningsvisare", + "modelSelect": "Välj modell", + "uploadImage": "Ladda upp bild", + "invokeProgressBar": "Invoke förloppsmätare", + "nextImage": "Nästa bild", + "toggleAutoscroll": "Växla automatisk rullning", + "flipHorizontally": "Vänd vågrätt", + "flipVertically": "Vänd lodrätt", + "zoomOut": "Zooma ut", + "toggleLogViewer": "Växla logvisare", + "reset": "Starta om", + "previousImage": "Föregående bild", + "useThisParameter": "Använd denna parametern", + "rotateCounterClockwise": "Rotera moturs", + "rotateClockwise": "Rotera medurs", + "modifyConfig": "Ändra konfiguration", + "showOptionsPanel": "Visa inställningspanelen" + }, + "common": { + "hotkeysLabel": "Snabbtangenter", + "reportBugLabel": "Rapportera bugg", + "githubLabel": "Github", + "discordLabel": "Discord", + "settingsLabel": "Inställningar", + "langEnglish": "Engelska", + "langDutch": "Nederländska", + "langFrench": "Franska", + "langGerman": "Tyska", + "langItalian": "Italienska", + "langArabic": "العربية", + "langHebrew": "עברית", + "langPolish": "Polski", + "langPortuguese": "Português", + "langBrPortuguese": "Português do Brasil", + "langSimplifiedChinese": "简体中文", + "langJapanese": "日本語", + "langKorean": "한국어", + "langRussian": "Русский", + "unifiedCanvas": "Förenad kanvas", + "nodesDesc": "Ett nodbaserat system för bildgenerering är under utveckling. Håll utkik för uppdateringar om denna fantastiska funktion.", + "langUkranian": "Украї́нська", + "langSpanish": "Español", + "postProcessDesc2": "Ett dedikerat användargränssnitt kommer snart att släppas för att underlätta mer avancerade arbetsflöden av efterbehandling.", + "trainingDesc1": "Ett dedikerat arbetsflöde för träning av dina egna inbäddningar och kontrollpunkter genom Textual Inversion eller Dreambooth från webbgränssnittet.", + "trainingDesc2": "InvokeAI stöder redan träning av anpassade inbäddningar med hjälp av Textual Inversion genom huvudscriptet.", + "upload": "Ladda upp", + "close": "Stäng", + "cancel": "Avbryt", + "accept": "Acceptera", + "statusDisconnected": "Frånkopplad", + "statusGeneratingTextToImage": "Genererar text till bild", + "statusGeneratingImageToImage": "Genererar Bild till bild", + "statusGeneratingInpainting": "Genererar Måla i", + "statusGenerationComplete": "Generering klar", + "statusModelConverted": "Modell konverterad", + "statusMergingModels": "Sammanfogar modeller", + "loading": "Laddar", + "loadingInvokeAI": "Laddar Invoke AI", + "statusRestoringFaces": "Återskapar ansikten", + "languagePickerLabel": "Språkväljare", + "txt2img": "Text till bild", + "nodes": "Noder", + "img2img": "Bild till bild", + "postprocessing": "Efterbehandling", + "postProcessing": "Efterbehandling", + "load": "Ladda", + "training": "Träning", + "postProcessDesc1": "Invoke AI erbjuder ett brett utbud av efterbehandlingsfunktioner. Uppskalning och ansiktsåterställning finns redan tillgängligt i webbgränssnittet. Du kommer åt dem ifrån Avancerade inställningar-menyn under Bild till bild-fliken. Du kan också behandla bilder direkt genom att använda knappen bildåtgärder ovanför nuvarande bild eller i bildvisaren.", + "postProcessDesc3": "Invoke AI's kommandotolk erbjuder många olika funktioner, bland annat \"Förstora\".", + "statusGenerating": "Genererar", + "statusError": "Fel", + "back": "Bakåt", + "statusConnected": "Ansluten", + "statusPreparing": "Förbereder", + "statusProcessingCanceled": "Bearbetning avbruten", + "statusProcessingComplete": "Bearbetning färdig", + "statusGeneratingOutpainting": "Genererar Fyll ut", + "statusIterationComplete": "Itterering klar", + "statusSavingImage": "Sparar bild", + "statusRestoringFacesGFPGAN": "Återskapar ansikten (GFPGAN)", + "statusRestoringFacesCodeFormer": "Återskapar ansikten (CodeFormer)", + "statusUpscaling": "Skala upp", + "statusUpscalingESRGAN": "Uppskalning (ESRGAN)", + "statusModelChanged": "Modell ändrad", + "statusLoadingModel": "Laddar modell", + "statusConvertingModel": "Konverterar modell", + "statusMergedModels": "Modeller sammanfogade" + }, + "gallery": { + "generations": "Generationer", + "showGenerations": "Visa generationer", + "uploads": "Uppladdningar", + "showUploads": "Visa uppladdningar", + "galleryImageSize": "Bildstorlek", + "allImagesLoaded": "Alla bilder laddade", + "loadMore": "Ladda mer", + "galleryImageResetSize": "Återställ storlek", + "gallerySettings": "Galleriinställningar", + "maintainAspectRatio": "Behåll bildförhållande", + "noImagesInGallery": "Inga bilder i galleriet", + "autoSwitchNewImages": "Ändra automatiskt till nya bilder", + "singleColumnLayout": "Enkolumnslayout" + }, + "hotkeys": { + "generalHotkeys": "Allmänna snabbtangenter", + "galleryHotkeys": "Gallerisnabbtangenter", + "unifiedCanvasHotkeys": "Snabbtangenter för sammanslagskanvas", + "invoke": { + "title": "Anropa", + "desc": "Genererar en bild" + }, + "cancel": { + "title": "Avbryt", + "desc": "Avbryt bildgenerering" + }, + "focusPrompt": { + "desc": "Fokusera området för promptinmatning", + "title": "Fokusprompt" + }, + "pinOptions": { + "desc": "Nåla fast alternativpanelen", + "title": "Nåla fast alternativ" + }, + "toggleOptions": { + "title": "Växla inställningar", + "desc": "Öppna och stäng alternativpanelen" + }, + "toggleViewer": { + "title": "Växla visaren", + "desc": "Öppna och stäng bildvisaren" + }, + "toggleGallery": { + "title": "Växla galleri", + "desc": "Öppna eller stäng galleribyrån" + }, + "maximizeWorkSpace": { + "title": "Maximera arbetsyta", + "desc": "Stäng paneler och maximera arbetsyta" + }, + "changeTabs": { + "title": "Växla flik", + "desc": "Byt till en annan arbetsyta" + }, + "consoleToggle": { + "title": "Växla konsol", + "desc": "Öppna och stäng konsol" + }, + "setSeed": { + "desc": "Använd seed för nuvarande bild", + "title": "välj seed" + }, + "setParameters": { + "title": "Välj parametrar", + "desc": "Använd alla parametrar från nuvarande bild" + }, + "setPrompt": { + "desc": "Använd prompt för nuvarande bild", + "title": "Välj prompt" + }, + "restoreFaces": { + "title": "Återskapa ansikten", + "desc": "Återskapa nuvarande bild" + }, + "upscale": { + "title": "Skala upp", + "desc": "Skala upp nuvarande bild" + }, + "showInfo": { + "title": "Visa info", + "desc": "Visa metadata för nuvarande bild" + }, + "sendToImageToImage": { + "title": "Skicka till Bild till bild", + "desc": "Skicka nuvarande bild till Bild till bild" + }, + "deleteImage": { + "title": "Radera bild", + "desc": "Radera nuvarande bild" + }, + "closePanels": { + "title": "Stäng paneler", + "desc": "Stäng öppna paneler" + }, + "previousImage": { + "title": "Föregående bild", + "desc": "Visa föregående bild" + }, + "nextImage": { + "title": "Nästa bild", + "desc": "Visa nästa bild" + }, + "toggleGalleryPin": { + "title": "Växla gallerinål", + "desc": "Nålar fast eller nålar av galleriet i gränssnittet" + }, + "increaseGalleryThumbSize": { + "title": "Förstora galleriets bildstorlek", + "desc": "Förstora miniatyrbildernas storlek" + }, + "decreaseGalleryThumbSize": { + "title": "Minska gelleriets bildstorlek", + "desc": "Minska miniatyrbildernas storlek i galleriet" + }, + "decreaseBrushSize": { + "desc": "Förminska storleken på kanvas- pensel eller suddgummi", + "title": "Minska penselstorlek" + }, + "increaseBrushSize": { + "title": "Öka penselstorlek", + "desc": "Öka stoleken på kanvas- pensel eller suddgummi" + }, + "increaseBrushOpacity": { + "title": "Öka penselns opacitet", + "desc": "Öka opaciteten för kanvaspensel" + }, + "decreaseBrushOpacity": { + "desc": "Minska kanvaspenselns opacitet", + "title": "Minska penselns opacitet" + }, + "moveTool": { + "title": "Flytta", + "desc": "Tillåt kanvasnavigation" + }, + "fillBoundingBox": { + "title": "Fyll ram", + "desc": "Fyller ramen med pensels färg" + }, + "keyboardShortcuts": "Snabbtangenter", + "appHotkeys": "Appsnabbtangenter", + "selectBrush": { + "desc": "Välj kanvaspensel", + "title": "Välj pensel" + }, + "selectEraser": { + "desc": "Välj kanvassuddgummi", + "title": "Välj suddgummi" + }, + "eraseBoundingBox": { + "title": "Ta bort ram" + } + } +} diff --git a/invokeai/frontend/web/dist/locales/tr.json b/invokeai/frontend/web/dist/locales/tr.json new file mode 100644 index 0000000000..0c222eecf7 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/tr.json @@ -0,0 +1,58 @@ +{ + "accessibility": { + "invokeProgressBar": "Invoke ilerleme durumu", + "nextImage": "Sonraki Resim", + "useThisParameter": "Kullanıcı parametreleri", + "copyMetadataJson": "Metadata verilerini kopyala (JSON)", + "exitViewer": "Görüntüleme Modundan Çık", + "zoomIn": "Yakınlaştır", + "zoomOut": "Uzaklaştır", + "rotateCounterClockwise": "Döndür (Saat yönünün tersine)", + "rotateClockwise": "Döndür (Saat yönünde)", + "flipHorizontally": "Yatay Çevir", + "flipVertically": "Dikey Çevir", + "modifyConfig": "Ayarları Değiştir", + "toggleAutoscroll": "Otomatik kaydırmayı aç/kapat", + "toggleLogViewer": "Günlük Görüntüleyici Aç/Kapa", + "showOptionsPanel": "Ayarlar Panelini Göster", + "modelSelect": "Model Seçin", + "reset": "Sıfırla", + "uploadImage": "Resim Yükle", + "previousImage": "Önceki Resim", + "menu": "Menü" + }, + "common": { + "hotkeysLabel": "Kısayol Tuşları", + "languagePickerLabel": "Dil Seçimi", + "reportBugLabel": "Hata Bildir", + "githubLabel": "Github", + "discordLabel": "Discord", + "settingsLabel": "Ayarlar", + "langArabic": "Arapça", + "langEnglish": "İngilizce", + "langDutch": "Hollandaca", + "langFrench": "Fransızca", + "langGerman": "Almanca", + "langItalian": "İtalyanca", + "langJapanese": "Japonca", + "langPolish": "Lehçe", + "langPortuguese": "Portekizce", + "langBrPortuguese": "Portekizcr (Brezilya)", + "langRussian": "Rusça", + "langSimplifiedChinese": "Çince (Basit)", + "langUkranian": "Ukraynaca", + "langSpanish": "İspanyolca", + "txt2img": "Metinden Resime", + "img2img": "Resimden Metine", + "linear": "Çizgisel", + "nodes": "Düğümler", + "postprocessing": "İşlem Sonrası", + "postProcessing": "İşlem Sonrası", + "postProcessDesc2": "Daha gelişmiş özellikler için ve iş akışını kolaylaştırmak için özel bir kullanıcı arayüzü çok yakında yayınlanacaktır.", + "postProcessDesc3": "Invoke AI komut satırı arayüzü, bir çok yeni özellik sunmaktadır.", + "langKorean": "Korece", + "unifiedCanvas": "Akıllı Tuval", + "nodesDesc": "Görüntülerin oluşturulmasında hazırladığımız yeni bir sistem geliştirme aşamasındadır. Bu harika özellikler ve çok daha fazlası için bizi takip etmeye devam edin.", + "postProcessDesc1": "Invoke AI son kullanıcıya yönelik bir çok özellik sunar. Görüntü kalitesi yükseltme, yüz restorasyonu WebUI üzerinden kullanılabilir. Metinden resime ve resimden metne araçlarına gelişmiş seçenekler menüsünden ulaşabilirsiniz. İsterseniz mevcut görüntü ekranının üzerindeki veya görüntüleyicideki görüntüyü doğrudan düzenleyebilirsiniz." + } +} diff --git a/invokeai/frontend/web/dist/locales/uk.json b/invokeai/frontend/web/dist/locales/uk.json new file mode 100644 index 0000000000..a85faee727 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/uk.json @@ -0,0 +1,619 @@ +{ + "common": { + "hotkeysLabel": "Гарячi клавіші", + "languagePickerLabel": "Мова", + "reportBugLabel": "Повідомити про помилку", + "settingsLabel": "Налаштування", + "img2img": "Зображення із зображення (img2img)", + "unifiedCanvas": "Універсальне полотно", + "nodes": "Вузли", + "langUkranian": "Украї́нська", + "nodesDesc": "Система генерації зображень на основі нодів (вузлів) вже розробляється. Слідкуйте за новинами про цю чудову функцію.", + "postProcessing": "Постобробка", + "postProcessDesc1": "Invoke AI пропонує широкий спектр функцій постобробки. Збільшення зображення (upscale) та відновлення облич вже доступні в інтерфейсі. Отримайте доступ до них з меню 'Додаткові параметри' на вкладках 'Зображення із тексту' та 'Зображення із зображення'. Обробляйте зображення безпосередньо, використовуючи кнопки дій із зображеннями над поточним зображенням або в режимі перегляду.", + "postProcessDesc2": "Найближчим часом буде випущено спеціальний інтерфейс для більш сучасних процесів постобробки.", + "postProcessDesc3": "Інтерфейс командного рядка Invoke AI пропонує різні інші функції, включаючи збільшення Embiggen.", + "training": "Навчання", + "trainingDesc1": "Спеціальний інтерфейс для навчання власних моделей з використанням Textual Inversion та Dreambooth.", + "trainingDesc2": "InvokeAI вже підтримує навчання моделей за допомогою TI, через інтерфейс командного рядка.", + "upload": "Завантажити", + "close": "Закрити", + "load": "Завантажити", + "statusConnected": "Підключено", + "statusDisconnected": "Відключено", + "statusError": "Помилка", + "statusPreparing": "Підготування", + "statusProcessingCanceled": "Обробка перервана", + "statusProcessingComplete": "Обробка завершена", + "statusGenerating": "Генерація", + "statusGeneratingTextToImage": "Генерація зображення із тексту", + "statusGeneratingImageToImage": "Генерація зображення із зображення", + "statusGeneratingInpainting": "Домальовка всередині", + "statusGeneratingOutpainting": "Домальовка зовні", + "statusGenerationComplete": "Генерація завершена", + "statusIterationComplete": "Iтерація завершена", + "statusSavingImage": "Збереження зображення", + "statusRestoringFaces": "Відновлення облич", + "statusRestoringFacesGFPGAN": "Відновлення облич (GFPGAN)", + "statusRestoringFacesCodeFormer": "Відновлення облич (CodeFormer)", + "statusUpscaling": "Збільшення", + "statusUpscalingESRGAN": "Збільшення (ESRGAN)", + "statusLoadingModel": "Завантаження моделі", + "statusModelChanged": "Модель змінено", + "cancel": "Скасувати", + "accept": "Підтвердити", + "back": "Назад", + "postprocessing": "Постобробка", + "statusModelConverted": "Модель сконвертована", + "statusMergingModels": "Злиття моделей", + "loading": "Завантаження", + "loadingInvokeAI": "Завантаження Invoke AI", + "langHebrew": "Іврит", + "langKorean": "Корейська", + "langPortuguese": "Португальська", + "langArabic": "Арабська", + "langSimplifiedChinese": "Китайська (спрощена)", + "langSpanish": "Іспанська", + "langEnglish": "Англійська", + "langGerman": "Німецька", + "langItalian": "Італійська", + "langJapanese": "Японська", + "langPolish": "Польська", + "langBrPortuguese": "Португальська (Бразилія)", + "langRussian": "Російська", + "githubLabel": "Github", + "txt2img": "Текст в зображення (txt2img)", + "discordLabel": "Discord", + "langDutch": "Голландська", + "langFrench": "Французька", + "statusMergedModels": "Моделі об'єднані", + "statusConvertingModel": "Конвертація моделі", + "linear": "Лінійна обробка" + }, + "gallery": { + "generations": "Генерації", + "showGenerations": "Показувати генерації", + "uploads": "Завантаження", + "showUploads": "Показувати завантаження", + "galleryImageSize": "Розмір зображень", + "galleryImageResetSize": "Аатоматичний розмір", + "gallerySettings": "Налаштування галереї", + "maintainAspectRatio": "Зберігати пропорції", + "autoSwitchNewImages": "Автоматично вибирати нові", + "singleColumnLayout": "Одна колонка", + "allImagesLoaded": "Всі зображення завантажені", + "loadMore": "Завантажити більше", + "noImagesInGallery": "Зображень немає" + }, + "hotkeys": { + "keyboardShortcuts": "Клавіатурні скорочення", + "appHotkeys": "Гарячі клавіші програми", + "generalHotkeys": "Загальні гарячі клавіші", + "galleryHotkeys": "Гарячі клавіші галереї", + "unifiedCanvasHotkeys": "Гарячі клавіші універсального полотна", + "invoke": { + "title": "Invoke", + "desc": "Згенерувати зображення" + }, + "cancel": { + "title": "Скасувати", + "desc": "Скасувати генерацію зображення" + }, + "focusPrompt": { + "title": "Переключитися на введення запиту", + "desc": "Перемикання на область введення запиту" + }, + "toggleOptions": { + "title": "Показати/приховати параметри", + "desc": "Відкривати і закривати панель параметрів" + }, + "pinOptions": { + "title": "Закріпити параметри", + "desc": "Закріпити панель параметрів" + }, + "toggleViewer": { + "title": "Показати перегляд", + "desc": "Відкривати і закривати переглядач зображень" + }, + "toggleGallery": { + "title": "Показати галерею", + "desc": "Відкривати і закривати скриньку галереї" + }, + "maximizeWorkSpace": { + "title": "Максимізувати робочий простір", + "desc": "Приховати панелі і максимізувати робочу область" + }, + "changeTabs": { + "title": "Переключити вкладку", + "desc": "Переключитися на іншу робочу область" + }, + "consoleToggle": { + "title": "Показати консоль", + "desc": "Відкривати і закривати консоль" + }, + "setPrompt": { + "title": "Використовувати запит", + "desc": "Використати запит із поточного зображення" + }, + "setSeed": { + "title": "Використовувати сід", + "desc": "Використовувати сід поточного зображення" + }, + "setParameters": { + "title": "Використовувати всі параметри", + "desc": "Використовувати всі параметри поточного зображення" + }, + "restoreFaces": { + "title": "Відновити обличчя", + "desc": "Відновити обличчя на поточному зображенні" + }, + "upscale": { + "title": "Збільшення", + "desc": "Збільшити поточне зображення" + }, + "showInfo": { + "title": "Показати метадані", + "desc": "Показати метадані з поточного зображення" + }, + "sendToImageToImage": { + "title": "Відправити в img2img", + "desc": "Надіслати поточне зображення в Image To Image" + }, + "deleteImage": { + "title": "Видалити зображення", + "desc": "Видалити поточне зображення" + }, + "closePanels": { + "title": "Закрити панелі", + "desc": "Закриває відкриті панелі" + }, + "previousImage": { + "title": "Попереднє зображення", + "desc": "Відображати попереднє зображення в галереї" + }, + "nextImage": { + "title": "Наступне зображення", + "desc": "Відображення наступного зображення в галереї" + }, + "toggleGalleryPin": { + "title": "Закріпити галерею", + "desc": "Закріплює і відкріплює галерею" + }, + "increaseGalleryThumbSize": { + "title": "Збільшити розмір мініатюр галереї", + "desc": "Збільшує розмір мініатюр галереї" + }, + "decreaseGalleryThumbSize": { + "title": "Зменшує розмір мініатюр галереї", + "desc": "Зменшує розмір мініатюр галереї" + }, + "selectBrush": { + "title": "Вибрати пензель", + "desc": "Вибирає пензель для полотна" + }, + "selectEraser": { + "title": "Вибрати ластик", + "desc": "Вибирає ластик для полотна" + }, + "decreaseBrushSize": { + "title": "Зменшити розмір пензля", + "desc": "Зменшує розмір пензля/ластика полотна" + }, + "increaseBrushSize": { + "title": "Збільшити розмір пензля", + "desc": "Збільшує розмір пензля/ластика полотна" + }, + "decreaseBrushOpacity": { + "title": "Зменшити непрозорість пензля", + "desc": "Зменшує непрозорість пензля полотна" + }, + "increaseBrushOpacity": { + "title": "Збільшити непрозорість пензля", + "desc": "Збільшує непрозорість пензля полотна" + }, + "moveTool": { + "title": "Інструмент переміщення", + "desc": "Дозволяє переміщатися по полотну" + }, + "fillBoundingBox": { + "title": "Заповнити обмежувальну рамку", + "desc": "Заповнює обмежувальну рамку кольором пензля" + }, + "eraseBoundingBox": { + "title": "Стерти обмежувальну рамку", + "desc": "Стирає область обмежувальної рамки" + }, + "colorPicker": { + "title": "Вибрати колір", + "desc": "Вибирає засіб вибору кольору полотна" + }, + "toggleSnap": { + "title": "Увімкнути прив'язку", + "desc": "Вмикає/вимикає прив'язку до сітки" + }, + "quickToggleMove": { + "title": "Швидке перемикання переміщення", + "desc": "Тимчасово перемикає режим переміщення" + }, + "toggleLayer": { + "title": "Переключити шар", + "desc": "Перемикання маски/базового шару" + }, + "clearMask": { + "title": "Очистити маску", + "desc": "Очистити всю маску" + }, + "hideMask": { + "title": "Приховати маску", + "desc": "Приховує/показує маску" + }, + "showHideBoundingBox": { + "title": "Показати/приховати обмежувальну рамку", + "desc": "Переключити видимість обмежувальної рамки" + }, + "mergeVisible": { + "title": "Об'єднати видимі", + "desc": "Об'єднати всі видимі шари полотна" + }, + "saveToGallery": { + "title": "Зберегти в галерею", + "desc": "Зберегти поточне полотно в галерею" + }, + "copyToClipboard": { + "title": "Копіювати в буфер обміну", + "desc": "Копіювати поточне полотно в буфер обміну" + }, + "downloadImage": { + "title": "Завантажити зображення", + "desc": "Завантажити вміст полотна" + }, + "undoStroke": { + "title": "Скасувати пензель", + "desc": "Скасувати мазок пензля" + }, + "redoStroke": { + "title": "Повторити мазок пензля", + "desc": "Повторити мазок пензля" + }, + "resetView": { + "title": "Вид за замовчуванням", + "desc": "Скинути вид полотна" + }, + "previousStagingImage": { + "title": "Попереднє зображення", + "desc": "Попереднє зображення" + }, + "nextStagingImage": { + "title": "Наступне зображення", + "desc": "Наступне зображення" + }, + "acceptStagingImage": { + "title": "Прийняти зображення", + "desc": "Прийняти поточне зображення" + } + }, + "modelManager": { + "modelManager": "Менеджер моделей", + "model": "Модель", + "modelAdded": "Модель додана", + "modelUpdated": "Модель оновлена", + "modelEntryDeleted": "Запис про модель видалено", + "cannotUseSpaces": "Не можна використовувати пробіли", + "addNew": "Додати нову", + "addNewModel": "Додати нову модель", + "addManually": "Додати вручну", + "manual": "Ручне", + "name": "Назва", + "nameValidationMsg": "Введіть назву моделі", + "description": "Опис", + "descriptionValidationMsg": "Введіть опис моделі", + "config": "Файл конфігурації", + "configValidationMsg": "Шлях до файлу конфігурації.", + "modelLocation": "Розташування моделі", + "modelLocationValidationMsg": "Шлях до файлу з моделлю.", + "vaeLocation": "Розтышування VAE", + "vaeLocationValidationMsg": "Шлях до VAE.", + "width": "Ширина", + "widthValidationMsg": "Початкова ширина зображень.", + "height": "Висота", + "heightValidationMsg": "Початкова висота зображень.", + "addModel": "Додати модель", + "updateModel": "Оновити модель", + "availableModels": "Доступні моделі", + "search": "Шукати", + "load": "Завантажити", + "active": "активна", + "notLoaded": "не завантажена", + "cached": "кешована", + "checkpointFolder": "Папка з моделями", + "clearCheckpointFolder": "Очистити папку з моделями", + "findModels": "Знайти моделі", + "scanAgain": "Сканувати знову", + "modelsFound": "Знайдені моделі", + "selectFolder": "Обрати папку", + "selected": "Обрані", + "selectAll": "Обрати всі", + "deselectAll": "Зняти выділення", + "showExisting": "Показувати додані", + "addSelected": "Додати обрані", + "modelExists": "Модель вже додана", + "selectAndAdd": "Оберіть і додайте моделі із списку", + "noModelsFound": "Моделі не знайдені", + "delete": "Видалити", + "deleteModel": "Видалити модель", + "deleteConfig": "Видалити конфігурацію", + "deleteMsg1": "Ви точно хочете видалити модель із InvokeAI?", + "deleteMsg2": "Це не призведе до видалення файлу моделі з диску. Позніше ви можете додати його знову.", + "allModels": "Усі моделі", + "diffusersModels": "Diffusers", + "scanForModels": "Сканувати моделі", + "convert": "Конвертувати", + "convertToDiffusers": "Конвертувати в Diffusers", + "formMessageDiffusersVAELocationDesc": "Якщо не надано, InvokeAI буде шукати файл VAE в розташуванні моделі, вказаній вище.", + "convertToDiffusersHelpText3": "Файл моделі на диску НЕ буде видалено або змінено. Ви можете знову додати його в Model Manager, якщо потрібно.", + "customConfig": "Користувальницький конфіг", + "invokeRoot": "Каталог InvokeAI", + "custom": "Користувальницький", + "modelTwo": "Модель 2", + "modelThree": "Модель 3", + "mergedModelName": "Назва об'єднаної моделі", + "alpha": "Альфа", + "interpolationType": "Тип інтерполяції", + "mergedModelSaveLocation": "Шлях збереження", + "mergedModelCustomSaveLocation": "Користувальницький шлях", + "invokeAIFolder": "Каталог InvokeAI", + "ignoreMismatch": "Ігнорувати невідповідності між вибраними моделями", + "modelMergeHeaderHelp2": "Тільки Diffusers-моделі доступні для об'єднання. Якщо ви хочете об'єднати checkpoint-моделі, спочатку перетворіть їх на Diffusers.", + "checkpointModels": "Checkpoints", + "repo_id": "ID репозиторію", + "v2_base": "v2 (512px)", + "repoIDValidationMsg": "Онлайн-репозиторій моделі", + "formMessageDiffusersModelLocationDesc": "Вкажіть хоча б одне.", + "formMessageDiffusersModelLocation": "Шлях до Diffusers-моделі", + "v2_768": "v2 (768px)", + "formMessageDiffusersVAELocation": "Шлях до VAE", + "convertToDiffusersHelpText5": "Переконайтеся, що у вас достатньо місця на диску. Моделі зазвичай займають від 4 до 7 Гб.", + "convertToDiffusersSaveLocation": "Шлях збереження", + "v1": "v1", + "convertToDiffusersHelpText6": "Ви хочете перетворити цю модель?", + "inpainting": "v1 Inpainting", + "modelConverted": "Модель перетворено", + "sameFolder": "У ту ж папку", + "statusConverting": "Перетворення", + "merge": "Об'єднати", + "mergeModels": "Об'єднати моделі", + "modelOne": "Модель 1", + "sigmoid": "Сігмоїд", + "weightedSum": "Зважена сума", + "none": "пусто", + "addDifference": "Додати різницю", + "pickModelType": "Вибрати тип моделі", + "convertToDiffusersHelpText4": "Це одноразова дія. Вона може зайняти від 30 до 60 секунд в залежності від характеристик вашого комп'ютера.", + "pathToCustomConfig": "Шлях до конфігу користувача", + "safetensorModels": "SafeTensors", + "addCheckpointModel": "Додати модель Checkpoint/Safetensor", + "addDiffuserModel": "Додати Diffusers", + "vaeRepoID": "ID репозиторію VAE", + "vaeRepoIDValidationMsg": "Онлайн-репозиторій VAE", + "modelMergeInterpAddDifferenceHelp": "У цьому режимі Модель 3 спочатку віднімається з Моделі 2. Результуюча версія змішується з Моделью 1 із встановленим вище коефіцієнтом Альфа.", + "customSaveLocation": "Користувальницький шлях збереження", + "modelMergeAlphaHelp": "Альфа впливає силу змішування моделей. Нижчі значення альфа призводять до меншого впливу другої моделі.", + "convertToDiffusersHelpText1": "Ця модель буде конвертована в формат 🧨 Diffusers.", + "convertToDiffusersHelpText2": "Цей процес замінить ваш запис в Model Manager на версію тієї ж моделі в Diffusers.", + "modelsMerged": "Моделі об'єднані", + "modelMergeHeaderHelp1": "Ви можете об'єднати до трьох різних моделей, щоб створити змішану, що відповідає вашим потребам.", + "inverseSigmoid": "Зворотній Сігмоїд" + }, + "parameters": { + "images": "Зображення", + "steps": "Кроки", + "cfgScale": "Рівень CFG", + "width": "Ширина", + "height": "Висота", + "seed": "Сід", + "randomizeSeed": "Випадковий сид", + "shuffle": "Оновити", + "noiseThreshold": "Поріг шуму", + "perlinNoise": "Шум Перліна", + "variations": "Варіації", + "variationAmount": "Кількість варіацій", + "seedWeights": "Вага сіду", + "faceRestoration": "Відновлення облич", + "restoreFaces": "Відновити обличчя", + "type": "Тип", + "strength": "Сила", + "upscaling": "Збільшення", + "upscale": "Збільшити", + "upscaleImage": "Збільшити зображення", + "scale": "Масштаб", + "otherOptions": "інші параметри", + "seamlessTiling": "Безшовний узор", + "hiresOptim": "Оптимізація High Res", + "imageFit": "Вмістити зображення", + "codeformerFidelity": "Точність", + "scaleBeforeProcessing": "Масштабувати", + "scaledWidth": "Масштаб Ш", + "scaledHeight": "Масштаб В", + "infillMethod": "Засіб заповнення", + "tileSize": "Розмір області", + "boundingBoxHeader": "Обмежуюча рамка", + "seamCorrectionHeader": "Налаштування шву", + "infillScalingHeader": "Заповнення і масштабування", + "img2imgStrength": "Сила обробки img2img", + "toggleLoopback": "Зациклити обробку", + "sendTo": "Надіслати", + "sendToImg2Img": "Надіслати у img2img", + "sendToUnifiedCanvas": "Надіслати на полотно", + "copyImageToLink": "Скопіювати посилання", + "downloadImage": "Завантажити", + "openInViewer": "Відкрити у переглядачі", + "closeViewer": "Закрити переглядач", + "usePrompt": "Використати запит", + "useSeed": "Використати сід", + "useAll": "Використати все", + "useInitImg": "Використати як початкове", + "info": "Метадані", + "initialImage": "Початкове зображення", + "showOptionsPanel": "Показати панель налаштувань", + "general": "Основне", + "cancel": { + "immediate": "Скасувати негайно", + "schedule": "Скасувати після поточної ітерації", + "isScheduled": "Відміна", + "setType": "Встановити тип скасування" + }, + "vSymmetryStep": "Крок верт. симетрії", + "hiresStrength": "Сила High Res", + "hidePreview": "Сховати попередній перегляд", + "showPreview": "Показати попередній перегляд", + "imageToImage": "Зображення до зображення", + "denoisingStrength": "Сила шумоподавлення", + "copyImage": "Копіювати зображення", + "symmetry": "Симетрія", + "hSymmetryStep": "Крок гор. симетрії" + }, + "settings": { + "models": "Моделі", + "displayInProgress": "Показувати процес генерації", + "saveSteps": "Зберігати кожні n кроків", + "confirmOnDelete": "Підтверджувати видалення", + "displayHelpIcons": "Показувати значки підказок", + "enableImageDebugging": "Увімкнути налагодження", + "resetWebUI": "Повернути початкові", + "resetWebUIDesc1": "Скидання настройок веб-інтерфейсу видаляє лише локальний кеш браузера з вашими зображеннями та налаштуваннями. Це не призводить до видалення зображень з диску.", + "resetWebUIDesc2": "Якщо зображення не відображаються в галереї або не працює ще щось, спробуйте скинути налаштування, перш ніж повідомляти про проблему на GitHub.", + "resetComplete": "Інтерфейс скинуто. Оновіть цю сторінку.", + "useSlidersForAll": "Використовувати повзунки для всіх параметрів" + }, + "toast": { + "tempFoldersEmptied": "Тимчасова папка очищена", + "uploadFailed": "Не вдалося завантажити", + "uploadFailedUnableToLoadDesc": "Неможливо завантажити файл", + "downloadImageStarted": "Завантаження зображення почалося", + "imageCopied": "Зображення скопійоване", + "imageLinkCopied": "Посилання на зображення скопійовано", + "imageNotLoaded": "Зображення не завантажено", + "imageNotLoadedDesc": "Не знайдено зображення для надсилання до img2img", + "imageSavedToGallery": "Зображення збережено в галерею", + "canvasMerged": "Полотно об'єднане", + "sentToImageToImage": "Надіслати до img2img", + "sentToUnifiedCanvas": "Надіслати на полотно", + "parametersSet": "Параметри задані", + "parametersNotSet": "Параметри не задані", + "parametersNotSetDesc": "Не знайдені метадані цього зображення.", + "parametersFailed": "Проблема із завантаженням параметрів", + "parametersFailedDesc": "Неможливо завантажити початкове зображення.", + "seedSet": "Сід заданий", + "seedNotSet": "Сід не заданий", + "seedNotSetDesc": "Не вдалося знайти сід для зображення.", + "promptSet": "Запит заданий", + "promptNotSet": "Запит не заданий", + "promptNotSetDesc": "Не вдалося знайти запит для зображення.", + "upscalingFailed": "Збільшення не вдалося", + "faceRestoreFailed": "Відновлення облич не вдалося", + "metadataLoadFailed": "Не вдалося завантажити метадані", + "initialImageSet": "Початкове зображення задане", + "initialImageNotSet": "Початкове зображення не задане", + "initialImageNotSetDesc": "Не вдалося завантажити початкове зображення", + "serverError": "Помилка сервера", + "disconnected": "Відключено від сервера", + "connected": "Підключено до сервера", + "canceled": "Обробку скасовано" + }, + "tooltip": { + "feature": { + "prompt": "Це поле для тексту запиту, включаючи об'єкти генерації та стилістичні терміни. У запит можна включити і коефіцієнти ваги (значущості токена), але консольні команди та параметри не працюватимуть.", + "gallery": "Тут відображаються генерації з папки outputs у міру їх появи.", + "other": "Ці опції включають альтернативні режими обробки для Invoke. 'Безшовний узор' створить на виході узори, що повторюються. 'Висока роздільна здатність' - це генерація у два етапи за допомогою img2img: використовуйте це налаштування, коли хочете отримати цільне зображення більшого розміру без артефактів.", + "seed": "Значення сіду впливає на початковий шум, з якого сформується зображення. Можна використовувати вже наявний сід із попередніх зображень. 'Поріг шуму' використовується для пом'якшення артефактів при високих значеннях CFG (спробуйте в діапазоні 0-10), а 'Перлін' - для додавання шуму Перліна в процесі генерації: обидва параметри служать для більшої варіативності результатів.", + "variations": "Спробуйте варіацію зі значенням від 0.1 до 1.0, щоб змінити результат для заданого сиду. Цікаві варіації сиду знаходяться між 0.1 і 0.3.", + "upscale": "Використовуйте ESRGAN, щоб збільшити зображення відразу після генерації.", + "faceCorrection": "Корекція облич за допомогою GFPGAN або Codeformer: алгоритм визначає обличчя у готовому зображенні та виправляє будь-які дефекти. Високі значення сили змінюють зображення сильніше, в результаті обличчя будуть виглядати привабливіше. У Codeformer більш висока точність збереже вихідне зображення на шкоду корекції обличчя.", + "imageToImage": "'Зображення до зображення' завантажує будь-яке зображення, яке потім використовується для генерації разом із запитом. Чим більше значення, тим сильніше зміниться зображення в результаті. Можливі значення від 0 до 1, рекомендується діапазон 0.25-0.75", + "boundingBox": "'Обмежуюча рамка' аналогічна налаштуванням 'Ширина' і 'Висота' для 'Зображення з тексту' або 'Зображення до зображення'. Буде оброблена тільки область у рамці.", + "seamCorrection": "Керування обробкою видимих швів, що виникають між зображеннями на полотні.", + "infillAndScaling": "Керування методами заповнення (використовується для масок або стертих частин полотна) та масштабування (корисно для малих розмірів обмежуючої рамки)." + } + }, + "unifiedCanvas": { + "layer": "Шар", + "base": "Базовий", + "mask": "Маска", + "maskingOptions": "Параметри маски", + "enableMask": "Увiмкнути маску", + "preserveMaskedArea": "Зберiгати замасковану область", + "clearMask": "Очистити маску", + "brush": "Пензель", + "eraser": "Гумка", + "fillBoundingBox": "Заповнити обмежуючу рамку", + "eraseBoundingBox": "Стерти обмежуючу рамку", + "colorPicker": "Пiпетка", + "brushOptions": "Параметри пензля", + "brushSize": "Розмiр", + "move": "Перемiстити", + "resetView": "Скинути вигляд", + "mergeVisible": "Об'єднати видимi", + "saveToGallery": "Зберегти до галереї", + "copyToClipboard": "Копiювати до буферу обмiну", + "downloadAsImage": "Завантажити як зображення", + "undo": "Вiдмiнити", + "redo": "Повторити", + "clearCanvas": "Очистити полотно", + "canvasSettings": "Налаштування полотна", + "showIntermediates": "Показувати процес", + "showGrid": "Показувати сiтку", + "snapToGrid": "Прив'язати до сітки", + "darkenOutsideSelection": "Затемнити полотно зовні", + "autoSaveToGallery": "Автозбереження до галереї", + "saveBoxRegionOnly": "Зберiгати тiльки видiлення", + "limitStrokesToBox": "Обмежити штрихи виділенням", + "showCanvasDebugInfo": "Показати дод. інформацію про полотно", + "clearCanvasHistory": "Очистити iсторiю полотна", + "clearHistory": "Очистити iсторiю", + "clearCanvasHistoryMessage": "Очищення історії полотна залишає поточне полотно незайманим, але видаляє історію скасування та повтору.", + "clearCanvasHistoryConfirm": "Ви впевнені, що хочете очистити історію полотна?", + "emptyTempImageFolder": "Очистити тимчасову папку", + "emptyFolder": "Очистити папку", + "emptyTempImagesFolderMessage": "Очищення папки тимчасових зображень також повністю скидає полотно, включаючи всю історію скасування/повтору, зображення та базовий шар полотна, що розміщуються.", + "emptyTempImagesFolderConfirm": "Ви впевнені, що хочете очистити тимчасову папку?", + "activeLayer": "Активний шар", + "canvasScale": "Масштаб полотна", + "boundingBox": "Обмежуюча рамка", + "scaledBoundingBox": "Масштабування рамки", + "boundingBoxPosition": "Позиція обмежуючої рамки", + "canvasDimensions": "Разміри полотна", + "canvasPosition": "Розташування полотна", + "cursorPosition": "Розташування курсора", + "previous": "Попереднє", + "next": "Наступне", + "accept": "Приняти", + "showHide": "Показати/Сховати", + "discardAll": "Відмінити все", + "betaClear": "Очистити", + "betaDarkenOutside": "Затемнити зовні", + "betaLimitToBox": "Обмежити виділенням", + "betaPreserveMasked": "Зберiгати замасковану область" + }, + "accessibility": { + "nextImage": "Наступне зображення", + "modelSelect": "Вибір моделі", + "invokeProgressBar": "Індикатор виконання", + "reset": "Скинути", + "uploadImage": "Завантажити зображення", + "useThisParameter": "Використовувати цей параметр", + "exitViewer": "Вийти з переглядача", + "zoomIn": "Збільшити", + "zoomOut": "Зменшити", + "rotateCounterClockwise": "Обертати проти годинникової стрілки", + "rotateClockwise": "Обертати за годинниковою стрілкою", + "toggleAutoscroll": "Увімкнути автопрокручування", + "toggleLogViewer": "Показати або приховати переглядач журналів", + "previousImage": "Попереднє зображення", + "copyMetadataJson": "Скопіювати метадані JSON", + "flipVertically": "Перевернути по вертикалі", + "flipHorizontally": "Відобразити по горизонталі", + "showOptionsPanel": "Показати опції", + "modifyConfig": "Змінити конфігурацію", + "menu": "Меню" + } +} diff --git a/invokeai/frontend/web/dist/locales/vi.json b/invokeai/frontend/web/dist/locales/vi.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/invokeai/frontend/web/dist/locales/vi.json @@ -0,0 +1 @@ +{} diff --git a/invokeai/frontend/web/dist/locales/zh_CN.json b/invokeai/frontend/web/dist/locales/zh_CN.json new file mode 100644 index 0000000000..b9f1a71370 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/zh_CN.json @@ -0,0 +1,1663 @@ +{ + "common": { + "hotkeysLabel": "快捷键", + "languagePickerLabel": "语言", + "reportBugLabel": "反馈错误", + "settingsLabel": "设置", + "img2img": "图生图", + "unifiedCanvas": "统一画布", + "nodes": "工作流编辑器", + "langSimplifiedChinese": "简体中文", + "nodesDesc": "一个基于节点的图像生成系统目前正在开发中。请持续关注关于这一功能的更新。", + "postProcessing": "后期处理", + "postProcessDesc1": "Invoke AI 提供各种各样的后期处理功能。图像放大和面部修复在网页界面中已经可用。你可以从文生图和图生图页面的高级选项菜单中访问它们。你也可以直接使用图像显示上方或查看器中的图像操作按钮处理图像。", + "postProcessDesc2": "一个专门的界面将很快发布,新的界面能够处理更复杂的后期处理流程。", + "postProcessDesc3": "Invoke AI 命令行界面提供例如 Embiggen 的各种其他功能。", + "training": "训练", + "trainingDesc1": "一个专门用于从 Web UI 使用 Textual Inversion 和 Dreambooth 训练自己的 Embedding 和 checkpoint 的工作流。", + "trainingDesc2": "InvokeAI 已经支持使用主脚本中的 Textual Inversion 来训练自定义 embeddouring。", + "upload": "上传", + "close": "关闭", + "load": "加载", + "statusConnected": "已连接", + "statusDisconnected": "未连接", + "statusError": "错误", + "statusPreparing": "准备中", + "statusProcessingCanceled": "处理已取消", + "statusProcessingComplete": "处理完成", + "statusGenerating": "生成中", + "statusGeneratingTextToImage": "文生图生成中", + "statusGeneratingImageToImage": "图生图生成中", + "statusGeneratingInpainting": "(Inpainting) 内补生成中", + "statusGeneratingOutpainting": "(Outpainting) 外扩生成中", + "statusGenerationComplete": "生成完成", + "statusIterationComplete": "迭代完成", + "statusSavingImage": "图像保存中", + "statusRestoringFaces": "面部修复中", + "statusRestoringFacesGFPGAN": "面部修复中 (GFPGAN)", + "statusRestoringFacesCodeFormer": "面部修复中 (CodeFormer)", + "statusUpscaling": "放大中", + "statusUpscalingESRGAN": "放大中 (ESRGAN)", + "statusLoadingModel": "模型加载中", + "statusModelChanged": "模型已切换", + "accept": "同意", + "cancel": "取消", + "dontAskMeAgain": "不要再次询问", + "areYouSure": "你确认吗?", + "imagePrompt": "图片提示词", + "langKorean": "朝鲜语", + "langPortuguese": "葡萄牙语", + "random": "随机", + "generate": "生成", + "openInNewTab": "在新的标签页打开", + "langUkranian": "乌克兰语", + "back": "返回", + "statusMergedModels": "模型已合并", + "statusConvertingModel": "转换模型中", + "statusModelConverted": "模型转换完成", + "statusMergingModels": "合并模型", + "githubLabel": "GitHub", + "discordLabel": "Discord", + "langPolish": "波兰语", + "langBrPortuguese": "葡萄牙语(巴西)", + "langDutch": "荷兰语", + "langFrench": "法语", + "langRussian": "俄语", + "langGerman": "德语", + "langHebrew": "希伯来语", + "langItalian": "意大利语", + "langJapanese": "日语", + "langSpanish": "西班牙语", + "langEnglish": "英语", + "langArabic": "阿拉伯语", + "txt2img": "文生图", + "postprocessing": "后期处理", + "loading": "加载中", + "loadingInvokeAI": "Invoke AI 加载中", + "linear": "线性的", + "batch": "批次管理器", + "communityLabel": "社区", + "modelManager": "模型管理器", + "nodeEditor": "节点编辑器", + "statusProcessing": "处理中", + "imageFailedToLoad": "无法加载图像", + "lightMode": "浅色模式", + "learnMore": "了解更多", + "darkMode": "深色模式", + "advanced": "高级", + "t2iAdapter": "T2I Adapter", + "ipAdapter": "IP Adapter", + "controlAdapter": "Control Adapter", + "controlNet": "ControlNet", + "on": "开", + "auto": "自动", + "checkpoint": "Checkpoint", + "inpaint": "内补重绘", + "simple": "简单", + "template": "模板", + "outputs": "输出", + "data": "数据", + "safetensors": "Safetensors", + "outpaint": "外扩绘制", + "details": "详情", + "format": "格式", + "unknown": "未知", + "folder": "文件夹", + "error": "错误", + "installed": "已安装", + "file": "文件", + "somethingWentWrong": "出了点问题", + "copyError": "$t(gallery.copy) 错误", + "input": "输入", + "notInstalled": "非 $t(common.installed)", + "delete": "删除", + "updated": "已上传", + "save": "保存", + "created": "已创建", + "prevPage": "上一页", + "unknownError": "未知错误", + "direction": "指向", + "orderBy": "排序方式:", + "nextPage": "下一页", + "saveAs": "保存为", + "unsaved": "未保存", + "ai": "ai" + }, + "gallery": { + "generations": "生成的图像", + "showGenerations": "显示生成的图像", + "uploads": "上传的图像", + "showUploads": "显示上传的图像", + "galleryImageSize": "预览大小", + "galleryImageResetSize": "重置预览大小", + "gallerySettings": "预览设置", + "maintainAspectRatio": "保持纵横比", + "autoSwitchNewImages": "自动切换到新图像", + "singleColumnLayout": "单列布局", + "allImagesLoaded": "所有图像已加载", + "loadMore": "加载更多", + "noImagesInGallery": "无图像可用于显示", + "deleteImage": "删除图片", + "deleteImageBin": "被删除的图片会发送到你操作系统的回收站。", + "deleteImagePermanent": "删除的图片无法被恢复。", + "assets": "素材", + "autoAssignBoardOnClick": "点击后自动分配面板", + "featuresWillReset": "如果您删除该图像,这些功能会立即被重置。", + "loading": "加载中", + "unableToLoad": "无法加载图库", + "currentlyInUse": "该图像目前在以下功能中使用:", + "copy": "复制", + "download": "下载", + "setCurrentImage": "设为当前图像", + "preparingDownload": "准备下载", + "preparingDownloadFailed": "准备下载时出现问题", + "downloadSelection": "下载所选内容", + "noImageSelected": "无选中的图像", + "deleteSelection": "删除所选内容", + "image": "图像", + "drop": "弃用", + "dropOrUpload": "$t(gallery.drop) 或上传", + "dropToUpload": "$t(gallery.drop) 以上传", + "problemDeletingImagesDesc": "有一张或多张图像无法被删除", + "problemDeletingImages": "删除图像时出现问题", + "unstarImage": "取消收藏图像", + "starImage": "收藏图像" + }, + "hotkeys": { + "keyboardShortcuts": "键盘快捷键", + "appHotkeys": "应用快捷键", + "generalHotkeys": "一般快捷键", + "galleryHotkeys": "图库快捷键", + "unifiedCanvasHotkeys": "统一画布快捷键", + "invoke": { + "title": "Invoke", + "desc": "生成图像" + }, + "cancel": { + "title": "取消", + "desc": "取消图像生成" + }, + "focusPrompt": { + "title": "打开提示词框", + "desc": "打开提示词文本框" + }, + "toggleOptions": { + "title": "切换选项卡", + "desc": "打开或关闭选项浮窗" + }, + "pinOptions": { + "title": "常开选项卡", + "desc": "保持选项浮窗常开" + }, + "toggleViewer": { + "title": "切换图像查看器", + "desc": "打开或关闭图像查看器" + }, + "toggleGallery": { + "title": "切换图库", + "desc": "打开或关闭图库" + }, + "maximizeWorkSpace": { + "title": "工作区最大化", + "desc": "关闭所有浮窗,将工作区域最大化" + }, + "changeTabs": { + "title": "切换选项卡", + "desc": "切换到另一个工作区" + }, + "consoleToggle": { + "title": "切换命令行", + "desc": "打开或关闭命令行" + }, + "setPrompt": { + "title": "使用当前提示词", + "desc": "使用当前图像的提示词" + }, + "setSeed": { + "title": "使用种子", + "desc": "使用当前图像的种子" + }, + "setParameters": { + "title": "使用当前参数", + "desc": "使用当前图像的所有参数" + }, + "restoreFaces": { + "title": "面部修复", + "desc": "对当前图像进行面部修复" + }, + "upscale": { + "title": "放大", + "desc": "对当前图像进行放大" + }, + "showInfo": { + "title": "显示信息", + "desc": "显示当前图像的元数据" + }, + "sendToImageToImage": { + "title": "发送到图生图", + "desc": "发送当前图像到图生图" + }, + "deleteImage": { + "title": "删除图像", + "desc": "删除当前图像" + }, + "closePanels": { + "title": "关闭浮窗", + "desc": "关闭目前打开的浮窗" + }, + "previousImage": { + "title": "上一张图像", + "desc": "显示图库中的上一张图像" + }, + "nextImage": { + "title": "下一张图像", + "desc": "显示图库中的下一张图像" + }, + "toggleGalleryPin": { + "title": "切换图库常开", + "desc": "开关图库在界面中的常开模式" + }, + "increaseGalleryThumbSize": { + "title": "增大预览尺寸", + "desc": "增大图库中预览的尺寸" + }, + "decreaseGalleryThumbSize": { + "title": "缩小预览尺寸", + "desc": "缩小图库中预览的尺寸" + }, + "selectBrush": { + "title": "选择刷子", + "desc": "选择统一画布上的刷子" + }, + "selectEraser": { + "title": "选择橡皮擦", + "desc": "选择统一画布上的橡皮擦" + }, + "decreaseBrushSize": { + "title": "减小刷子大小", + "desc": "减小统一画布上的刷子或橡皮擦的大小" + }, + "increaseBrushSize": { + "title": "增大刷子大小", + "desc": "增大统一画布上的刷子或橡皮擦的大小" + }, + "decreaseBrushOpacity": { + "title": "减小刷子不透明度", + "desc": "减小统一画布上的刷子的不透明度" + }, + "increaseBrushOpacity": { + "title": "增大刷子不透明度", + "desc": "增大统一画布上的刷子的不透明度" + }, + "moveTool": { + "title": "移动工具", + "desc": "画布允许导航" + }, + "fillBoundingBox": { + "title": "填充选择区域", + "desc": "在选择区域中填充刷子颜色" + }, + "eraseBoundingBox": { + "title": "擦除选择框", + "desc": "将选择区域擦除" + }, + "colorPicker": { + "title": "选择颜色拾取工具", + "desc": "选择画布颜色拾取工具" + }, + "toggleSnap": { + "title": "切换网格对齐", + "desc": "打开或关闭网格对齐" + }, + "quickToggleMove": { + "title": "快速切换移动模式", + "desc": "临时性地切换移动模式" + }, + "toggleLayer": { + "title": "切换图层", + "desc": "切换遮罩/基础层的选择" + }, + "clearMask": { + "title": "清除遮罩", + "desc": "清除整个遮罩" + }, + "hideMask": { + "title": "隐藏遮罩", + "desc": "隐藏或显示遮罩" + }, + "showHideBoundingBox": { + "title": "显示/隐藏框选区", + "desc": "切换框选区的的显示状态" + }, + "mergeVisible": { + "title": "合并可见层", + "desc": "将画板上可见层合并" + }, + "saveToGallery": { + "title": "保存至图库", + "desc": "将画布当前内容保存至图库" + }, + "copyToClipboard": { + "title": "复制到剪贴板", + "desc": "将画板当前内容复制到剪贴板" + }, + "downloadImage": { + "title": "下载图像", + "desc": "下载画板当前内容" + }, + "undoStroke": { + "title": "撤销画笔", + "desc": "撤销上一笔刷子的动作" + }, + "redoStroke": { + "title": "重做画笔", + "desc": "重做上一笔刷子的动作" + }, + "resetView": { + "title": "重置视图", + "desc": "重置画布视图" + }, + "previousStagingImage": { + "title": "上一张暂存图像", + "desc": "上一张暂存区中的图像" + }, + "nextStagingImage": { + "title": "下一张暂存图像", + "desc": "下一张暂存区中的图像" + }, + "acceptStagingImage": { + "title": "接受暂存图像", + "desc": "接受当前暂存区中的图像" + }, + "nodesHotkeys": "节点快捷键", + "addNodes": { + "title": "添加节点", + "desc": "打开添加节点菜单" + } + }, + "modelManager": { + "modelManager": "模型管理器", + "model": "模型", + "modelAdded": "已添加模型", + "modelUpdated": "模型已更新", + "modelEntryDeleted": "模型已删除", + "cannotUseSpaces": "不能使用空格", + "addNew": "添加", + "addNewModel": "添加新模型", + "addManually": "手动添加", + "manual": "手动", + "name": "名称", + "nameValidationMsg": "输入模型的名称", + "description": "描述", + "descriptionValidationMsg": "添加模型的描述", + "config": "配置", + "configValidationMsg": "模型配置文件的路径。", + "modelLocation": "模型位置", + "modelLocationValidationMsg": "提供 Diffusers 模型文件的本地存储路径", + "vaeLocation": "VAE 位置", + "vaeLocationValidationMsg": "VAE 文件的路径。", + "width": "宽度", + "widthValidationMsg": "模型的默认宽度。", + "height": "高度", + "heightValidationMsg": "模型的默认高度。", + "addModel": "添加模型", + "updateModel": "更新模型", + "availableModels": "可用模型", + "search": "检索", + "load": "加载", + "active": "活跃", + "notLoaded": "未加载", + "cached": "缓存", + "checkpointFolder": "模型检查点文件夹", + "clearCheckpointFolder": "清除 Checkpoint 模型文件夹", + "findModels": "寻找模型", + "modelsFound": "找到的模型", + "selectFolder": "选择文件夹", + "selected": "已选择", + "selectAll": "全选", + "deselectAll": "取消选择所有", + "showExisting": "显示已存在", + "addSelected": "添加选择", + "modelExists": "模型已存在", + "delete": "删除", + "deleteModel": "删除模型", + "deleteConfig": "删除配置", + "deleteMsg1": "您确定要将该模型从 InvokeAI 删除吗?", + "deleteMsg2": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除。若你正在使用自定义目录,则不会从磁盘中删除他们。", + "convertToDiffusersHelpText1": "模型会被转换成 🧨 Diffusers 格式。", + "convertToDiffusersHelpText2": "这个过程会替换你的模型管理器的入口中相同 Diffusers 版本的模型。", + "mergedModelSaveLocation": "保存路径", + "mergedModelCustomSaveLocation": "自定义路径", + "checkpointModels": "Checkpoints", + "formMessageDiffusersVAELocation": "VAE 路径", + "convertToDiffusersHelpText4": "这是一次性的处理过程。根据你电脑的配置不同耗时 30 - 60 秒。", + "convertToDiffusersHelpText6": "你希望转换这个模型吗?", + "interpolationType": "插值类型", + "modelTwo": "模型 2", + "modelThree": "模型 3", + "v2_768": "v2 (768px)", + "mergedModelName": "合并的模型名称", + "allModels": "全部模型", + "convertToDiffusers": "转换为 Diffusers", + "formMessageDiffusersModelLocation": "Diffusers 模型路径", + "custom": "自定义", + "formMessageDiffusersVAELocationDesc": "如果没有特别指定,InvokeAI 会从上面指定的模型路径中寻找 VAE 文件。", + "safetensorModels": "SafeTensors", + "modelsMerged": "模型合并完成", + "mergeModels": "合并模型", + "modelOne": "模型 1", + "diffusersModels": "Diffusers", + "scanForModels": "扫描模型", + "repo_id": "项目 ID", + "repoIDValidationMsg": "你的模型的在线项目地址", + "v1": "v1", + "invokeRoot": "InvokeAI 文件夹", + "inpainting": "v1 Inpainting", + "customSaveLocation": "自定义保存路径", + "scanAgain": "重新扫描", + "customConfig": "个性化配置", + "pathToCustomConfig": "个性化配置路径", + "modelConverted": "模型已转换", + "statusConverting": "转换中", + "sameFolder": "相同文件夹", + "invokeAIFolder": "Invoke AI 文件夹", + "ignoreMismatch": "忽略所选模型之间的不匹配", + "modelMergeHeaderHelp1": "您可以合并最多三种不同的模型,以创建符合您需求的混合模型。", + "modelMergeHeaderHelp2": "只有扩散器(Diffusers)可以用于模型合并。如果您想要合并一个检查点模型,请先将其转换为扩散器。", + "addCheckpointModel": "添加 Checkpoint / Safetensor 模型", + "addDiffuserModel": "添加 Diffusers 模型", + "vaeRepoID": "VAE 项目 ID", + "vaeRepoIDValidationMsg": "VAE 模型在线仓库地址", + "selectAndAdd": "选择下表中的模型并添加", + "noModelsFound": "未有找到模型", + "formMessageDiffusersModelLocationDesc": "请至少输入一个。", + "convertToDiffusersSaveLocation": "保存路径", + "convertToDiffusersHelpText3": "磁盘中放置在 InvokeAI 根文件夹的 checkpoint 文件会被删除. 若位于自定义目录, 则不会受影响.", + "v2_base": "v2 (512px)", + "convertToDiffusersHelpText5": "请确认你有足够的磁盘空间,模型大小通常在 2 GB - 7 GB 之间。", + "convert": "转换", + "merge": "合并", + "pickModelType": "选择模型类型", + "addDifference": "增加差异", + "none": "无", + "inverseSigmoid": "反 Sigmoid 函数", + "weightedSum": "加权求和", + "modelMergeAlphaHelp": "Alpha 参数控制模型的混合强度。较低的 Alpha 值会导致第二个模型的影响减弱。", + "sigmoid": "Sigmoid 函数", + "modelMergeInterpAddDifferenceHelp": "在这种模式下,首先从模型 2 中减去模型 3,得到的版本再用上述的 Alpha 值与模型1进行混合。", + "modelsSynced": "模型已同步", + "modelSyncFailed": "模型同步失败", + "modelDeleteFailed": "模型删除失败", + "syncModelsDesc": "如果您的模型与后端不同步,您可以使用此选项刷新它们。便于您在应用程序启动的情况下手动更新 models.yaml 文件或将模型添加到 InvokeAI 根文件夹。", + "selectModel": "选择模型", + "importModels": "导入模型", + "settings": "设置", + "syncModels": "同步模型", + "noCustomLocationProvided": "未提供自定义路径", + "modelDeleted": "模型已删除", + "modelUpdateFailed": "模型更新失败", + "modelConversionFailed": "模型转换失败", + "modelsMergeFailed": "模型融合失败", + "baseModel": "基底模型", + "convertingModelBegin": "模型转换中. 请稍候.", + "noModels": "未找到模型", + "predictionType": "预测类型(适用于 Stable Diffusion 2.x 模型和部分 Stable Diffusion 1.x 模型)", + "quickAdd": "快速添加", + "simpleModelDesc": "提供一个指向本地 Diffusers 模型的路径,本地 checkpoint / safetensors 模型或一个HuggingFace 项目 ID,又或者一个 checkpoint/diffusers 模型链接。", + "advanced": "高级", + "useCustomConfig": "使用自定义配置", + "closeAdvanced": "关闭高级", + "modelType": "模型类别", + "customConfigFileLocation": "自定义配置文件目录", + "variant": "变体", + "onnxModels": "Onnx", + "vae": "VAE", + "oliveModels": "Olive", + "loraModels": "LoRA", + "alpha": "Alpha", + "vaePrecision": "VAE 精度", + "checkpointOrSafetensors": "$t(common.checkpoint) / $t(common.safetensors)", + "noModelSelected": "无选中的模型", + "conversionNotSupported": "转换尚未支持" + }, + "parameters": { + "images": "图像", + "steps": "步数", + "cfgScale": "CFG 等级", + "width": "宽度", + "height": "高度", + "seed": "种子", + "randomizeSeed": "随机化种子", + "shuffle": "随机生成种子", + "noiseThreshold": "噪声阈值", + "perlinNoise": "Perlin 噪声", + "variations": "变种", + "variationAmount": "变种数量", + "seedWeights": "种子权重", + "faceRestoration": "面部修复", + "restoreFaces": "修复面部", + "type": "种类", + "strength": "强度", + "upscaling": "放大", + "upscale": "放大 (Shift + U)", + "upscaleImage": "放大图像", + "scale": "等级", + "otherOptions": "其他选项", + "seamlessTiling": "无缝拼贴", + "hiresOptim": "高分辨率优化", + "imageFit": "使生成图像长宽适配初始图像", + "codeformerFidelity": "保真度", + "scaleBeforeProcessing": "处理前缩放", + "scaledWidth": "缩放宽度", + "scaledHeight": "缩放长度", + "infillMethod": "填充方法", + "tileSize": "方格尺寸", + "boundingBoxHeader": "选择区域", + "seamCorrectionHeader": "接缝修正", + "infillScalingHeader": "内填充和缩放", + "img2imgStrength": "图生图强度", + "toggleLoopback": "切换环回", + "sendTo": "发送到", + "sendToImg2Img": "发送到图生图", + "sendToUnifiedCanvas": "发送到统一画布", + "copyImageToLink": "复制图像链接", + "downloadImage": "下载图像", + "openInViewer": "在查看器中打开", + "closeViewer": "关闭查看器", + "usePrompt": "使用提示", + "useSeed": "使用种子", + "useAll": "使用所有参数", + "useInitImg": "使用初始图像", + "info": "信息", + "initialImage": "初始图像", + "showOptionsPanel": "显示侧栏浮窗 (O 或 T)", + "seamlessYAxis": "Y 轴", + "seamlessXAxis": "X 轴", + "boundingBoxWidth": "边界框宽度", + "boundingBoxHeight": "边界框高度", + "denoisingStrength": "去噪强度", + "vSymmetryStep": "纵向对称步数", + "cancel": { + "immediate": "立即取消", + "isScheduled": "取消中", + "schedule": "当前迭代后取消", + "setType": "设定取消类型", + "cancel": "取消" + }, + "copyImage": "复制图片", + "showPreview": "显示预览", + "symmetry": "对称性", + "positivePromptPlaceholder": "正向提示词", + "negativePromptPlaceholder": "负向提示词", + "scheduler": "调度器", + "general": "通用", + "hiresStrength": "高分辨强度", + "hidePreview": "隐藏预览", + "hSymmetryStep": "横向对称步数", + "imageToImage": "图生图", + "noiseSettings": "噪音", + "controlNetControlMode": "控制模式", + "maskAdjustmentsHeader": "遮罩调整", + "maskBlur": "模糊", + "maskBlurMethod": "模糊方式", + "aspectRatio": "纵横比", + "seamLowThreshold": "降低", + "seamHighThreshold": "提升", + "invoke": { + "noNodesInGraph": "节点图中无节点", + "noModelSelected": "无已选中的模型", + "invoke": "调用", + "systemBusy": "系统繁忙", + "noInitialImageSelected": "无选中的初始图像", + "missingInputForField": "{{nodeLabel}} -> {{fieldLabel}} 缺失输入", + "unableToInvoke": "无法调用", + "systemDisconnected": "系统已断开连接", + "missingNodeTemplate": "缺失节点模板", + "missingFieldTemplate": "缺失模板", + "addingImagesTo": "添加图像到", + "noPrompts": "没有已生成的提示词", + "readyToInvoke": "准备调用", + "noControlImageForControlAdapter": "有 #{{number}} 个 Control Adapter 缺失控制图像", + "noModelForControlAdapter": "有 #{{number}} 个 Control Adapter 没有选择模型。", + "incompatibleBaseModelForControlAdapter": "有 #{{number}} 个 Control Adapter 模型与主模型不匹配。" + }, + "patchmatchDownScaleSize": "缩小", + "coherenceSteps": "步数", + "clipSkip": "CLIP 跳过层", + "compositingSettingsHeader": "合成设置", + "useCpuNoise": "使用 CPU 噪声", + "coherenceStrength": "强度", + "enableNoiseSettings": "启用噪声设置", + "coherenceMode": "模式", + "cpuNoise": "CPU 噪声", + "gpuNoise": "GPU 噪声", + "clipSkipWithLayerCount": "CLIP 跳过 {{layerCount}} 层", + "coherencePassHeader": "一致性层", + "manualSeed": "手动设定种子", + "imageActions": "图像操作", + "randomSeed": "随机种子", + "iterations": "迭代数", + "isAllowedToUpscale": { + "useX2Model": "图像太大,无法使用 x4 模型,使用 x2 模型作为替代", + "tooLarge": "图像太大无法进行放大,请选择更小的图像" + }, + "iterationsWithCount_other": "{{count}} 次迭代生成", + "seamlessX&Y": "无缝 X & Y", + "aspectRatioFree": "自由", + "seamlessX": "无缝 X", + "seamlessY": "无缝 Y", + "maskEdge": "遮罩边缘", + "unmasked": "取消遮罩", + "cfgRescaleMultiplier": "CFG 重缩放倍数", + "cfgRescale": "CFG 重缩放", + "useSize": "使用尺寸" + }, + "settings": { + "models": "模型", + "displayInProgress": "显示处理中的图像", + "saveSteps": "每n步保存图像", + "confirmOnDelete": "删除时确认", + "displayHelpIcons": "显示帮助按钮", + "enableImageDebugging": "开启图像调试", + "resetWebUI": "重置网页界面", + "resetWebUIDesc1": "重置网页只会重置浏览器中缓存的图像和设置,不会删除任何图像。", + "resetWebUIDesc2": "如果图像没有显示在图库中,或者其他东西不工作,请在GitHub上提交问题之前尝试重置。", + "resetComplete": "网页界面已重置。", + "showProgressInViewer": "在查看器中展示过程图片", + "antialiasProgressImages": "对过程图像应用抗锯齿", + "generation": "生成", + "ui": "用户界面", + "useSlidersForAll": "对所有参数使用滑动条设置", + "general": "通用", + "consoleLogLevel": "日志等级", + "shouldLogToConsole": "终端日志", + "developer": "开发者", + "alternateCanvasLayout": "切换统一画布布局", + "enableNodesEditor": "启用节点编辑器", + "favoriteSchedulersPlaceholder": "没有偏好的采样算法", + "showAdvancedOptions": "显示进阶选项", + "favoriteSchedulers": "采样算法偏好", + "autoChangeDimensions": "更改时将宽/高更新为模型默认值", + "experimental": "实验性", + "beta": "Beta", + "clearIntermediates": "清除中间产物", + "clearIntermediatesDesc3": "您图库中的图像不会被删除。", + "clearIntermediatesDesc2": "中间产物图像是生成过程中产生的副产品,与图库中的结果图像不同。清除中间产物可释放磁盘空间。", + "intermediatesCleared_other": "已清除 {{count}} 个中间产物", + "clearIntermediatesDesc1": "清除中间产物会重置您的画布和 ControlNet 状态。", + "intermediatesClearedFailed": "清除中间产物时出现问题", + "clearIntermediatesWithCount_other": "清除 {{count}} 个中间产物", + "clearIntermediatesDisabled": "队列为空才能清理中间产物", + "enableNSFWChecker": "启用成人内容检测器", + "enableInvisibleWatermark": "启用不可见水印", + "enableInformationalPopovers": "启用信息弹窗", + "reloadingIn": "重新加载中" + }, + "toast": { + "tempFoldersEmptied": "临时文件夹已清空", + "uploadFailed": "上传失败", + "uploadFailedUnableToLoadDesc": "无法加载文件", + "downloadImageStarted": "图像已开始下载", + "imageCopied": "图像已复制", + "imageLinkCopied": "图像链接已复制", + "imageNotLoaded": "没有加载图像", + "imageNotLoadedDesc": "找不到图片", + "imageSavedToGallery": "图像已保存到图库", + "canvasMerged": "画布已合并", + "sentToImageToImage": "已发送到图生图", + "sentToUnifiedCanvas": "已发送到统一画布", + "parametersSet": "参数已设定", + "parametersNotSet": "参数未设定", + "parametersNotSetDesc": "此图像不存在元数据。", + "parametersFailed": "加载参数失败", + "parametersFailedDesc": "加载初始图像失败。", + "seedSet": "种子已设定", + "seedNotSet": "种子未设定", + "seedNotSetDesc": "无法找到该图像的种子。", + "promptSet": "提示词已设定", + "promptNotSet": "提示词未设定", + "promptNotSetDesc": "无法找到该图像的提示词。", + "upscalingFailed": "放大失败", + "faceRestoreFailed": "面部修复失败", + "metadataLoadFailed": "加载元数据失败", + "initialImageSet": "初始图像已设定", + "initialImageNotSet": "初始图像未设定", + "initialImageNotSetDesc": "无法加载初始图像", + "problemCopyingImageLink": "无法复制图片链接", + "uploadFailedInvalidUploadDesc": "必须是单张的 PNG 或 JPEG 图片", + "disconnected": "服务器断开", + "connected": "服务器连接", + "parameterSet": "参数已设定", + "parameterNotSet": "参数未设定", + "serverError": "服务器错误", + "canceled": "处理取消", + "nodesLoaded": "节点已加载", + "nodesSaved": "节点已保存", + "problemCopyingImage": "无法复制图像", + "nodesCorruptedGraph": "无法加载。节点图似乎已损坏。", + "nodesBrokenConnections": "无法加载。部分连接已断开。", + "nodesUnrecognizedTypes": "无法加载。节点图有无法识别的节点类型", + "nodesNotValidJSON": "无效的 JSON", + "nodesNotValidGraph": "无效的 InvokeAi 节点图", + "nodesLoadedFailed": "节点加载失败", + "modelAddedSimple": "已添加模型", + "modelAdded": "已添加模型: {{modelName}}", + "imageSavingFailed": "图像保存失败", + "canvasSentControlnetAssets": "画布已发送到 ControlNet & 素材", + "problemCopyingCanvasDesc": "无法导出基础层", + "loadedWithWarnings": "已加载带有警告的工作流", + "setInitialImage": "设为初始图像", + "canvasCopiedClipboard": "画布已复制到剪贴板", + "setControlImage": "设为控制图像", + "setNodeField": "设为节点字段", + "problemSavingMask": "保存遮罩时出现问题", + "problemSavingCanvasDesc": "无法导出基础层", + "maskSavedAssets": "遮罩已保存到素材", + "modelAddFailed": "模型添加失败", + "problemDownloadingCanvas": "下载画布时出现问题", + "problemMergingCanvas": "合并画布时出现问题", + "setCanvasInitialImage": "设定画布初始图像", + "imageUploaded": "图像已上传", + "addedToBoard": "已添加到面板", + "workflowLoaded": "工作流已加载", + "problemImportingMaskDesc": "无法导出遮罩", + "problemCopyingCanvas": "复制画布时出现问题", + "problemSavingCanvas": "保存画布时出现问题", + "canvasDownloaded": "画布已下载", + "setIPAdapterImage": "设为 IP Adapter 图像", + "problemMergingCanvasDesc": "无法导出基础层", + "problemDownloadingCanvasDesc": "无法导出基础层", + "problemSavingMaskDesc": "无法导出遮罩", + "imageSaved": "图像已保存", + "maskSentControlnetAssets": "遮罩已发送到 ControlNet & 素材", + "canvasSavedGallery": "画布已保存到图库", + "imageUploadFailed": "图像上传失败", + "problemImportingMask": "导入遮罩时出现问题", + "baseModelChangedCleared_other": "基础模型已更改, 已清除或禁用 {{count}} 个不兼容的子模型", + "setAsCanvasInitialImage": "设为画布初始图像", + "invalidUpload": "无效的上传", + "problemDeletingWorkflow": "删除工作流时出现问题", + "workflowDeleted": "已删除工作流", + "problemRetrievingWorkflow": "检索工作流时发生问题" + }, + "unifiedCanvas": { + "layer": "图层", + "base": "基础层", + "mask": "遮罩", + "maskingOptions": "遮罩选项", + "enableMask": "启用遮罩", + "preserveMaskedArea": "保留遮罩区域", + "clearMask": "清除遮罩 (Shift+C)", + "brush": "刷子", + "eraser": "橡皮擦", + "fillBoundingBox": "填充选择区域", + "eraseBoundingBox": "取消选择区域", + "colorPicker": "颜色提取", + "brushOptions": "刷子选项", + "brushSize": "大小", + "move": "移动", + "resetView": "重置视图", + "mergeVisible": "合并可见层", + "saveToGallery": "保存至图库", + "copyToClipboard": "复制到剪贴板", + "downloadAsImage": "下载图像", + "undo": "撤销", + "redo": "重做", + "clearCanvas": "清除画布", + "canvasSettings": "画布设置", + "showIntermediates": "显示中间产物", + "showGrid": "显示网格", + "snapToGrid": "切换网格对齐", + "darkenOutsideSelection": "暗化外部区域", + "autoSaveToGallery": "自动保存至图库", + "saveBoxRegionOnly": "只保存框内区域", + "limitStrokesToBox": "限制画笔在框内", + "showCanvasDebugInfo": "显示附加画布信息", + "clearCanvasHistory": "清除画布历史", + "clearHistory": "清除历史", + "clearCanvasHistoryMessage": "清除画布历史不会影响当前画布,但会不可撤销地清除所有撤销/重做历史。", + "clearCanvasHistoryConfirm": "确认清除所有画布历史?", + "emptyTempImageFolder": "清除临时文件夹", + "emptyFolder": "清除文件夹", + "emptyTempImagesFolderMessage": "清空临时图像文件夹会完全重置统一画布。这包括所有的撤销/重做历史、暂存区的图像和画布基础层。", + "emptyTempImagesFolderConfirm": "确认清除临时文件夹?", + "activeLayer": "活跃图层", + "canvasScale": "画布缩放", + "boundingBox": "选择区域", + "scaledBoundingBox": "缩放选择区域", + "boundingBoxPosition": "选择区域位置", + "canvasDimensions": "画布长宽", + "canvasPosition": "画布位置", + "cursorPosition": "光标位置", + "previous": "上一张", + "next": "下一张", + "accept": "接受", + "showHide": "显示 / 隐藏", + "discardAll": "放弃所有", + "betaClear": "清除", + "betaDarkenOutside": "暗化外部区域", + "betaLimitToBox": "限制在框内", + "betaPreserveMasked": "保留遮罩层", + "antialiasing": "抗锯齿", + "showResultsOn": "显示结果 (开)", + "showResultsOff": "显示结果 (关)", + "saveMask": "保存 $t(unifiedCanvas.mask)" + }, + "accessibility": { + "modelSelect": "模型选择", + "invokeProgressBar": "Invoke 进度条", + "reset": "重置", + "nextImage": "下一张图片", + "useThisParameter": "使用此参数", + "uploadImage": "上传图片", + "previousImage": "上一张图片", + "copyMetadataJson": "复制 JSON 元数据", + "exitViewer": "退出查看器", + "zoomIn": "放大", + "zoomOut": "缩小", + "rotateCounterClockwise": "逆时针旋转", + "rotateClockwise": "顺时针旋转", + "flipHorizontally": "水平翻转", + "flipVertically": "垂直翻转", + "showOptionsPanel": "显示侧栏浮窗", + "toggleLogViewer": "切换日志查看器", + "modifyConfig": "修改配置", + "toggleAutoscroll": "切换自动缩放", + "menu": "菜单", + "showGalleryPanel": "显示图库浮窗", + "loadMore": "加载更多", + "mode": "模式", + "resetUI": "$t(accessibility.reset) UI", + "createIssue": "创建问题" + }, + "ui": { + "showProgressImages": "显示处理中的图片", + "hideProgressImages": "隐藏处理中的图片", + "swapSizes": "XY 尺寸互换", + "lockRatio": "锁定纵横比" + }, + "tooltip": { + "feature": { + "prompt": "这是提示词区域。提示词包括生成对象和风格术语。您也可以在提示词中添加权重(Token 的重要性),但命令行命令和参数不起作用。", + "imageToImage": "图生图模式加载任何图像作为初始图像,然后与提示词一起用于生成新图像。值越高,结果图像的变化就越大。可能的值为 0.0 到 1.0,建议的范围是 0.25 到 0.75", + "upscale": "使用 ESRGAN 可以在图片生成后立即放大图片。", + "variations": "尝试将变化值设置在 0.1 到 1.0 之间,以更改给定种子的结果。种子的变化在 0.1 到 0.3 之间会很有趣。", + "boundingBox": "边界框的高和宽的设定对文生图和图生图模式是一样的,只有边界框中的区域会被处理。", + "other": "这些选项将为 Invoke 启用替代处理模式。 \"无缝拼贴\" 将在输出中创建重复图案。\"高分辨率\" 是通过图生图进行两步生成:当您想要更大、更连贯且不带伪影的图像时,请使用此设置。这将比通常的文生图需要更长的时间。", + "faceCorrection": "使用 GFPGAN 或 Codeformer 进行人脸校正:该算法会检测图像中的人脸并纠正任何缺陷。较高的值将更改图像,并产生更有吸引力的人脸。在保留较高保真度的情况下使用 Codeformer 将导致更强的人脸校正,同时也会保留原始图像。", + "gallery": "图片库展示输出文件夹中的图片,设置和文件一起储存,可以通过内容菜单访问。", + "seed": "种子值影响形成图像的初始噪声。您可以使用以前图像中已存在的种子。 “噪声阈值”用于减轻在高 CFG 等级(尝试 0 - 10 范围)下的伪像,并使用 Perlin 在生成过程中添加 Perlin 噪声:这两者都可以为您的输出添加变化。", + "seamCorrection": "控制在画布上生成的图像之间出现的可见接缝的处理方式。", + "infillAndScaling": "管理填充方法(用于画布的遮罩或擦除区域)和缩放(对于较小的边界框大小非常有用)。" + } + }, + "nodes": { + "zoomInNodes": "放大", + "loadWorkflow": "加载工作流", + "zoomOutNodes": "缩小", + "reloadNodeTemplates": "重载节点模板", + "hideGraphNodes": "隐藏节点图信息", + "fitViewportNodes": "自适应视图", + "showMinimapnodes": "显示缩略图", + "hideMinimapnodes": "隐藏缩略图", + "showLegendNodes": "显示字段类型图例", + "hideLegendNodes": "隐藏字段类型图例", + "showGraphNodes": "显示节点图信息", + "downloadWorkflow": "下载工作流 JSON", + "workflowDescription": "简述", + "versionUnknown": " 未知版本", + "noNodeSelected": "无选中的节点", + "addNode": "添加节点", + "unableToValidateWorkflow": "无法验证工作流", + "noOutputRecorded": "无已记录输出", + "updateApp": "升级 App", + "colorCodeEdgesHelp": "根据连接区域对边缘编码颜色", + "workflowContact": "联系", + "animatedEdges": "边缘动效", + "nodeTemplate": "节点模板", + "pickOne": "选择一个", + "unableToLoadWorkflow": "无法加载工作流", + "snapToGrid": "对齐网格", + "noFieldsLinearview": "线性视图中未添加任何字段", + "nodeSearch": "检索节点", + "version": "版本", + "validateConnections": "验证连接和节点图", + "inputMayOnlyHaveOneConnection": "输入仅能有一个连接", + "notes": "注释", + "nodeOutputs": "节点输出", + "currentImageDescription": "在节点编辑器中显示当前图像", + "validateConnectionsHelp": "防止建立无效连接和调用无效节点图", + "problemSettingTitle": "设定标题时出现问题", + "noConnectionInProgress": "没有正在进行的连接", + "workflowVersion": "版本", + "noConnectionData": "无连接数据", + "fieldTypesMustMatch": "类型必须匹配", + "workflow": "工作流", + "unkownInvocation": "未知调用类型", + "animatedEdgesHelp": "为选中边缘和其连接的选中节点的边缘添加动画", + "unknownTemplate": "未知模板", + "removeLinearView": "从线性视图中移除", + "workflowTags": "标签", + "fullyContainNodesHelp": "节点必须完全位于选择框中才能被选中", + "workflowValidation": "工作流验证错误", + "noMatchingNodes": "无相匹配的节点", + "executionStateInProgress": "处理中", + "noFieldType": "无字段类型", + "executionStateError": "错误", + "executionStateCompleted": "已完成", + "workflowAuthor": "作者", + "currentImage": "当前图像", + "workflowName": "名称", + "cannotConnectInputToInput": "无法将输入连接到输入", + "workflowNotes": "注释", + "cannotConnectOutputToOutput": "无法将输出连接到输出", + "connectionWouldCreateCycle": "连接将创建一个循环", + "cannotConnectToSelf": "无法连接自己", + "notesDescription": "添加有关您的工作流的注释", + "unknownField": "未知", + "colorCodeEdges": "边缘颜色编码", + "unknownNode": "未知节点", + "addNodeToolTip": "添加节点 (Shift+A, Space)", + "loadingNodes": "加载节点中...", + "snapToGridHelp": "移动时将节点与网格对齐", + "workflowSettings": "工作流编辑器设置", + "booleanPolymorphicDescription": "一个布尔值合集。", + "scheduler": "调度器", + "inputField": "输入", + "controlFieldDescription": "节点间传递的控制信息。", + "skippingUnknownOutputType": "跳过未知类型的输出", + "latentsFieldDescription": "Latents 可以在节点间传递。", + "denoiseMaskFieldDescription": "去噪遮罩可以在节点间传递", + "missingTemplate": "无效的节点:类型为 {{type}} 的节点 {{node}} 缺失模板(无已安装模板?)", + "outputSchemaNotFound": "未找到输出模式", + "latentsPolymorphicDescription": "Latents 可以在节点间传递。", + "colorFieldDescription": "一种 RGBA 颜色。", + "mainModelField": "模型", + "unhandledInputProperty": "未处理的输入属性", + "maybeIncompatible": "可能与已安装的不兼容", + "collectionDescription": "待办事项", + "skippingReservedFieldType": "跳过保留类型", + "booleanCollectionDescription": "一个布尔值合集。", + "sDXLMainModelFieldDescription": "SDXL 模型。", + "boardField": "面板", + "problemReadingWorkflow": "从图像读取工作流时出现问题", + "sourceNode": "源节点", + "nodeOpacity": "节点不透明度", + "collectionItemDescription": "待办事项", + "integerDescription": "整数是没有与小数点的数字。", + "outputField": "输出", + "skipped": "跳过", + "updateNode": "更新节点", + "sDXLRefinerModelFieldDescription": "待办事项", + "imagePolymorphicDescription": "一个图像合集。", + "doesNotExist": "不存在", + "unableToParseNode": "无法解析节点", + "controlCollection": "控制合集", + "collectionItem": "项目合集", + "controlCollectionDescription": "节点间传递的控制信息。", + "skippedReservedInput": "跳过保留的输入", + "outputFields": "输出区域", + "edge": "边缘", + "inputNode": "输入节点", + "enumDescription": "枚举 (Enums) 可能是多个选项的一个数值。", + "loRAModelFieldDescription": "待办事项", + "imageField": "图像", + "skippedReservedOutput": "跳过保留的输出", + "noWorkflow": "无工作流", + "colorCollectionDescription": "待办事项", + "colorPolymorphicDescription": "一个颜色合集。", + "sDXLMainModelField": "SDXL 模型", + "denoiseMaskField": "去噪遮罩", + "schedulerDescription": "待办事项", + "missingCanvaInitImage": "缺失画布初始图像", + "clipFieldDescription": "词元分析器和文本编码器的子模型。", + "noImageFoundState": "状态中未发现初始图像", + "nodeType": "节点类型", + "fullyContainNodes": "完全包含节点来进行选择", + "noOutputSchemaName": "在 ref 对象中找不到输出模式名称", + "vaeModelFieldDescription": "待办事项", + "skippingInputNoTemplate": "跳过无模板的输入", + "missingCanvaInitMaskImages": "缺失初始化画布和遮罩图像", + "problemReadingMetadata": "从图像读取元数据时出现问题", + "oNNXModelField": "ONNX 模型", + "node": "节点", + "skippingUnknownInputType": "跳过未知类型的输入", + "booleanDescription": "布尔值为真或为假。", + "collection": "合集", + "invalidOutputSchema": "无效的输出模式", + "boardFieldDescription": "图库面板", + "floatDescription": "浮点数是带小数点的数字。", + "unhandledOutputProperty": "未处理的输出属性", + "string": "字符串", + "inputFields": "输入", + "uNetFieldDescription": "UNet 子模型。", + "mismatchedVersion": "无效的节点:类型为 {{type}} 的节点 {{node}} 版本不匹配(是否尝试更新?)", + "vaeFieldDescription": "Vae 子模型。", + "imageFieldDescription": "图像可以在节点间传递。", + "outputNode": "输出节点", + "mainModelFieldDescription": "待办事项", + "sDXLRefinerModelField": "Refiner 模型", + "unableToParseEdge": "无法解析边缘", + "latentsCollectionDescription": "Latents 可以在节点间传递。", + "oNNXModelFieldDescription": "ONNX 模型。", + "cannotDuplicateConnection": "无法创建重复的连接", + "ipAdapterModel": "IP-Adapter 模型", + "ipAdapterDescription": "图像提示词自适应 (IP-Adapter)。", + "ipAdapterModelDescription": "IP-Adapter 模型", + "floatCollectionDescription": "一个浮点数合集。", + "enum": "Enum (枚举)", + "integerPolymorphicDescription": "一个整数值合集。", + "float": "浮点", + "integer": "整数", + "colorField": "颜色", + "stringCollectionDescription": "一个字符串合集。", + "stringCollection": "字符串合集", + "uNetField": "UNet", + "integerCollection": "整数合集", + "vaeModelField": "VAE", + "integerCollectionDescription": "一个整数值合集。", + "clipField": "Clip", + "stringDescription": "字符串是指文本。", + "colorCollection": "一个颜色合集。", + "boolean": "布尔值", + "stringPolymorphicDescription": "一个字符串合集。", + "controlField": "控制信息", + "floatPolymorphicDescription": "一个浮点数合集。", + "vaeField": "Vae", + "floatCollection": "浮点合集", + "booleanCollection": "布尔值合集", + "imageCollectionDescription": "一个图像合集。", + "loRAModelField": "LoRA", + "imageCollection": "图像合集", + "ipAdapterPolymorphicDescription": "一个 IP-Adapters Collection 合集。", + "ipAdapterCollection": "IP-Adapters 合集", + "conditioningCollection": "条件合集", + "ipAdapterPolymorphic": "IP-Adapters 多态", + "conditioningCollectionDescription": "条件可以在节点间传递。", + "colorPolymorphic": "颜色多态", + "conditioningPolymorphic": "条件多态", + "latentsCollection": "Latents 合集", + "stringPolymorphic": "字符多态", + "conditioningPolymorphicDescription": "条件可以在节点间传递。", + "imagePolymorphic": "图像多态", + "floatPolymorphic": "浮点多态", + "ipAdapterCollectionDescription": "一个 IP-Adapters Collection 合集。", + "ipAdapter": "IP-Adapter", + "booleanPolymorphic": "布尔多态", + "conditioningFieldDescription": "条件可以在节点间传递。", + "integerPolymorphic": "整数多态", + "latentsPolymorphic": "Latents 多态", + "conditioningField": "条件", + "latentsField": "Latents", + "updateAllNodes": "更新节点", + "unableToUpdateNodes_other": "{{count}} 个节点无法完成更新", + "inputFieldTypeParseError": "无法解析 {{node}} 的输入类型 {{field}}。({{message}})", + "unsupportedArrayItemType": "不支持的数组类型 \"{{type}}\"", + "addLinearView": "添加到线性视图", + "targetNodeFieldDoesNotExist": "无效的边缘:{{node}} 的目标/输入区域 {{field}} 不存在", + "unsupportedMismatchedUnion": "合集或标量类型与基类 {{firstType}} 和 {{secondType}} 不匹配", + "allNodesUpdated": "已更新所有节点", + "sourceNodeDoesNotExist": "无效的边缘:{{node}} 的源/输出节点不存在", + "unableToExtractEnumOptions": "无法提取枚举选项", + "unableToParseFieldType": "无法解析类型", + "outputFieldInInput": "输入中的输出区域", + "unrecognizedWorkflowVersion": "无法识别的工作流架构版本:{{version}}", + "outputFieldTypeParseError": "无法解析 {{node}} 的输出类型 {{field}}。({{message}})", + "sourceNodeFieldDoesNotExist": "无效的边缘:{{node}} 的源/输出区域 {{field}} 不存在", + "unableToGetWorkflowVersion": "无法获取工作流架构版本", + "nodePack": "节点包", + "unableToExtractSchemaNameFromRef": "无法从参考中提取架构名", + "unableToMigrateWorkflow": "无法迁移工作流", + "unknownOutput": "未知输出:{{name}}", + "unableToUpdateNode": "无法更新节点", + "unknownErrorValidatingWorkflow": "验证工作流时出现未知错误", + "collectionFieldType": "{{name}} 合集", + "unknownNodeType": "未知节点类型", + "targetNodeDoesNotExist": "无效的边缘:{{node}} 的目标/输入节点不存在", + "unknownFieldType": "$t(nodes.unknownField) 类型:{{type}}", + "collectionOrScalarFieldType": "{{name}} 合集 | 标量", + "nodeVersion": "节点版本", + "deletedInvalidEdge": "已删除无效的边缘 {{source}} -> {{target}}", + "unknownInput": "未知输入:{{name}}", + "prototypeDesc": "此调用是一个原型 (prototype)。它可能会在本项目更新期间发生破坏性更改,并且随时可能被删除。", + "betaDesc": "此调用尚处于测试阶段。在稳定之前,它可能会在项目更新期间发生破坏性更改。本项目计划长期支持这种调用。", + "newWorkflow": "新建工作流", + "newWorkflowDesc": "是否创建一个新的工作流?", + "newWorkflowDesc2": "当前工作流有未保存的更改。", + "unsupportedAnyOfLength": "联合(union)数据类型数目过多 ({{count}})" + }, + "controlnet": { + "resize": "直接缩放", + "showAdvanced": "显示高级", + "contentShuffleDescription": "随机打乱图像内容", + "importImageFromCanvas": "从画布导入图像", + "lineartDescription": "将图像转换为线稿", + "importMaskFromCanvas": "从画布导入遮罩", + "hideAdvanced": "隐藏高级", + "ipAdapterModel": "Adapter 模型", + "resetControlImage": "重置控制图像", + "beginEndStepPercent": "开始 / 结束步数百分比", + "mlsdDescription": "简洁的分割线段(直线)检测器", + "duplicate": "复制", + "balanced": "平衡", + "prompt": "Prompt (提示词控制)", + "depthMidasDescription": "使用 Midas 生成深度图", + "openPoseDescription": "使用 Openpose 进行人体姿态估计", + "resizeMode": "缩放模式", + "weight": "权重", + "selectModel": "选择一个模型", + "crop": "裁剪", + "processor": "处理器", + "none": "无", + "incompatibleBaseModel": "不兼容的基础模型:", + "enableControlnet": "启用 ControlNet", + "detectResolution": "检测分辨率", + "pidiDescription": "像素差分 (PIDI) 图像处理", + "controlMode": "控制模式", + "fill": "填充", + "cannyDescription": "Canny 边缘检测", + "colorMapDescription": "从图像生成一张颜色图", + "imageResolution": "图像分辨率", + "autoConfigure": "自动配置处理器", + "normalBaeDescription": "法线 BAE 处理", + "noneDescription": "不应用任何处理", + "saveControlImage": "保存控制图像", + "toggleControlNet": "开关此 ControlNet", + "delete": "删除", + "colorMapTileSize": "分块大小", + "ipAdapterImageFallback": "无已选择的 IP Adapter 图像", + "mediapipeFaceDescription": "使用 Mediapipe 检测面部", + "depthZoeDescription": "使用 Zoe 生成深度图", + "hedDescription": "整体嵌套边缘检测", + "setControlImageDimensions": "设定控制图像尺寸宽/高为", + "resetIPAdapterImage": "重置 IP Adapter 图像", + "handAndFace": "手部和面部", + "enableIPAdapter": "启用 IP Adapter", + "amult": "角度倍率 (a_mult)", + "bgth": "背景移除阈值 (bg_th)", + "lineartAnimeDescription": "动漫风格线稿处理", + "minConfidence": "最小置信度", + "lowThreshold": "弱判断阈值", + "highThreshold": "强判断阈值", + "addT2IAdapter": "添加 $t(common.t2iAdapter)", + "controlNetEnabledT2IDisabled": "$t(common.controlNet) 已启用, $t(common.t2iAdapter) 已禁用", + "t2iEnabledControlNetDisabled": "$t(common.t2iAdapter) 已启用, $t(common.controlNet) 已禁用", + "addControlNet": "添加 $t(common.controlNet)", + "controlNetT2IMutexDesc": "$t(common.controlNet) 和 $t(common.t2iAdapter) 目前不支持同时启用。", + "addIPAdapter": "添加 $t(common.ipAdapter)", + "safe": "保守模式", + "scribble": "草绘 (scribble)", + "maxFaces": "最大面部数", + "pidi": "PIDI", + "normalBae": "Normal BAE", + "hed": "HED", + "contentShuffle": "Content Shuffle", + "f": "F", + "h": "H", + "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", + "control": "Control (普通控制)", + "coarse": "Coarse", + "depthMidas": "Depth (Midas)", + "w": "W", + "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", + "mediapipeFace": "Mediapipe Face", + "mlsd": "M-LSD", + "lineart": "Lineart", + "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", + "megaControl": "Mega Control (超级控制)", + "depthZoe": "Depth (Zoe)", + "colorMap": "Color", + "openPose": "Openpose", + "controlAdapter_other": "Control Adapters", + "lineartAnime": "Lineart Anime", + "canny": "Canny" + }, + "queue": { + "status": "状态", + "cancelTooltip": "取消当前项目", + "queueEmpty": "队列为空", + "pauseSucceeded": "处理器已暂停", + "in_progress": "处理中", + "queueFront": "添加到队列前", + "completed": "已完成", + "queueBack": "添加到队列", + "cancelFailed": "取消项目时出现问题", + "pauseFailed": "暂停处理器时出现问题", + "clearFailed": "清除队列时出现问题", + "clearSucceeded": "队列已清除", + "pause": "暂停", + "cancelSucceeded": "项目已取消", + "queue": "队列", + "batch": "批处理", + "clearQueueAlertDialog": "清除队列时会立即取消所有处理中的项目并且会完全清除队列。", + "pending": "待定", + "completedIn": "完成于", + "resumeFailed": "恢复处理器时出现问题", + "clear": "清除", + "prune": "修剪", + "total": "总计", + "canceled": "已取消", + "pruneFailed": "修剪队列时出现问题", + "cancelBatchSucceeded": "批处理已取消", + "clearTooltip": "取消并清除所有项目", + "current": "当前", + "pauseTooltip": "暂停处理器", + "failed": "已失败", + "cancelItem": "取消项目", + "next": "下一个", + "cancelBatch": "取消批处理", + "cancel": "取消", + "resumeSucceeded": "处理器已恢复", + "resumeTooltip": "恢复处理器", + "resume": "恢复", + "cancelBatchFailed": "取消批处理时出现问题", + "clearQueueAlertDialog2": "您确定要清除队列吗?", + "item": "项目", + "pruneSucceeded": "从队列修剪 {{item_count}} 个已完成的项目", + "notReady": "无法排队", + "batchFailedToQueue": "批次加入队列失败", + "batchValues": "批次数", + "queueCountPrediction": "添加 {{predicted}} 到队列", + "batchQueued": "加入队列的批次", + "queuedCount": "{{pending}} 待处理", + "front": "前", + "pruneTooltip": "修剪 {{item_count}} 个已完成的项目", + "batchQueuedDesc_other": "在队列的 {{direction}} 中添加了 {{count}} 个会话", + "graphQueued": "节点图已加入队列", + "back": "后", + "session": "会话", + "queueTotal": "总计 {{total}}", + "enqueueing": "队列中的批次", + "queueMaxExceeded": "超出最大值 {{max_queue_size}},将跳过 {{skip}}", + "graphFailedToQueue": "节点图加入队列失败", + "batchFieldValues": "批处理值", + "time": "时间" + }, + "sdxl": { + "refinerStart": "Refiner 开始作用时机", + "selectAModel": "选择一个模型", + "scheduler": "调度器", + "cfgScale": "CFG 等级", + "negStylePrompt": "负向样式提示词", + "noModelsAvailable": "无可用模型", + "negAestheticScore": "负向美学评分", + "useRefiner": "启用 Refiner", + "denoisingStrength": "去噪强度", + "refinermodel": "Refiner 模型", + "posAestheticScore": "正向美学评分", + "concatPromptStyle": "连接提示词 & 样式", + "loading": "加载中...", + "steps": "步数", + "posStylePrompt": "正向样式提示词", + "refiner": "Refiner" + }, + "metadata": { + "positivePrompt": "正向提示词", + "negativePrompt": "负向提示词", + "generationMode": "生成模式", + "Threshold": "噪声阈值", + "metadata": "元数据", + "strength": "图生图强度", + "seed": "种子", + "imageDetails": "图像详细信息", + "perlin": "Perlin 噪声", + "model": "模型", + "noImageDetails": "未找到图像详细信息", + "hiresFix": "高分辨率优化", + "cfgScale": "CFG 等级", + "initImage": "初始图像", + "height": "高度", + "variations": "(成对/第二)种子权重", + "noMetaData": "未找到元数据", + "width": "宽度", + "createdBy": "创建者是", + "workflow": "工作流", + "steps": "步数", + "scheduler": "调度器", + "seamless": "无缝", + "fit": "图生图匹配", + "recallParameters": "召回参数", + "noRecallParameters": "未找到要召回的参数", + "vae": "VAE", + "cfgRescaleMultiplier": "$t(parameters.cfgRescaleMultiplier)" + }, + "models": { + "noMatchingModels": "无相匹配的模型", + "loading": "加载中", + "noMatchingLoRAs": "无相匹配的 LoRA", + "noLoRAsAvailable": "无可用 LoRA", + "noModelsAvailable": "无可用模型", + "selectModel": "选择一个模型", + "selectLoRA": "选择一个 LoRA", + "noRefinerModelsInstalled": "无已安装的 SDXL Refiner 模型", + "noLoRAsInstalled": "无已安装的 LoRA", + "esrganModel": "ESRGAN 模型", + "addLora": "添加 LoRA", + "noLoRAsLoaded": "无已加载的 LoRA" + }, + "boards": { + "autoAddBoard": "自动添加面板", + "topMessage": "该面板包含的图像正使用以下功能:", + "move": "移动", + "menuItemAutoAdd": "自动添加到该面板", + "myBoard": "我的面板", + "searchBoard": "检索面板...", + "noMatching": "没有相匹配的面板", + "selectBoard": "选择一个面板", + "cancel": "取消", + "addBoard": "添加面板", + "bottomMessage": "删除该面板并且将其对应的图像将重置当前使用该面板的所有功能。", + "uncategorized": "未分类", + "changeBoard": "更改面板", + "loading": "加载中...", + "clearSearch": "清除检索", + "downloadBoard": "下载面板", + "deleteBoardOnly": "仅删除面板", + "deleteBoard": "删除面板", + "deleteBoardAndImages": "删除面板和图像", + "deletedBoardsCannotbeRestored": "已删除的面板无法被恢复", + "movingImagesToBoard_other": "移动 {{count}} 张图像到面板:" + }, + "embedding": { + "noMatchingEmbedding": "不匹配的 Embedding", + "addEmbedding": "添加 Embedding", + "incompatibleModel": "不兼容的基础模型:", + "noEmbeddingsLoaded": "无已加载的 Embedding" + }, + "dynamicPrompts": { + "seedBehaviour": { + "perPromptDesc": "每次生成图像使用不同的种子", + "perIterationLabel": "每次迭代的种子", + "perIterationDesc": "每次迭代使用不同的种子", + "perPromptLabel": "每张图像的种子", + "label": "种子行为" + }, + "enableDynamicPrompts": "启用动态提示词", + "combinatorial": "组合生成", + "maxPrompts": "最大提示词数", + "dynamicPrompts": "动态提示词", + "promptsWithCount_other": "{{count}} 个提示词", + "promptsPreview": "提示词预览" + }, + "popovers": { + "compositingMaskAdjustments": { + "heading": "遮罩调整", + "paragraphs": [ + "调整遮罩。" + ] + }, + "paramRatio": { + "heading": "纵横比", + "paragraphs": [ + "生成图像的尺寸纵横比。", + "图像尺寸(单位:像素)建议 SD 1.5 模型使用等效 512x512 的尺寸,SDXL 模型使用等效 1024x1024 的尺寸。" + ] + }, + "compositingCoherenceSteps": { + "heading": "步数", + "paragraphs": [ + "一致性层中使用的去噪步数。", + "与主参数中的步数相同。" + ] + }, + "compositingBlur": { + "heading": "模糊", + "paragraphs": [ + "遮罩模糊半径。" + ] + }, + "noiseUseCPU": { + "heading": "使用 CPU 噪声", + "paragraphs": [ + "选择由 CPU 或 GPU 生成噪声。", + "启用 CPU 噪声后,特定的种子将会在不同的设备上产生下相同的图像。", + "启用 CPU 噪声不会对性能造成影响。" + ] + }, + "paramVAEPrecision": { + "heading": "VAE 精度", + "paragraphs": [ + "VAE 编解码过程种使用的精度。FP16/半精度以微小的图像变化为代价提高效率。" + ] + }, + "compositingCoherenceMode": { + "heading": "模式", + "paragraphs": [ + "一致性层模式。" + ] + }, + "controlNetResizeMode": { + "heading": "缩放模式", + "paragraphs": [ + "ControlNet 输入图像适应输出图像大小的方法。" + ] + }, + "clipSkip": { + "paragraphs": [ + "选择要跳过 CLIP 模型多少层。", + "部分模型跳过特定数值的层时效果会更好。", + "较高的数值通常会导致图像细节更少。" + ], + "heading": "CLIP 跳过层" + }, + "paramModel": { + "heading": "模型", + "paragraphs": [ + "用于去噪过程的模型。", + "不同的模型一般会通过接受训练来专门产生特定的美学内容和结果。" + ] + }, + "paramIterations": { + "heading": "迭代数", + "paragraphs": [ + "生成图像的数量。", + "若启用动态提示词,每种提示词都会生成这么多次。" + ] + }, + "compositingCoherencePass": { + "heading": "一致性层", + "paragraphs": [ + "第二轮去噪有助于合成内补/外扩图像。" + ] + }, + "compositingStrength": { + "heading": "强度", + "paragraphs": [ + "一致性层使用的去噪强度。", + "去噪强度与图生图的参数相同。" + ] + }, + "paramNegativeConditioning": { + "paragraphs": [ + "生成过程会避免生成负向提示词中的概念。使用此选项来使输出排除部分质量或对象。", + "支持 Compel 语法 和 embeddings。" + ], + "heading": "负向提示词" + }, + "compositingBlurMethod": { + "heading": "模糊方式", + "paragraphs": [ + "应用于遮罩区域的模糊方法。" + ] + }, + "paramScheduler": { + "heading": "调度器", + "paragraphs": [ + "调度器 (采样器) 定义如何在图像迭代过程中添加噪声,或者定义如何根据一个模型的输出来更新采样。" + ] + }, + "controlNetWeight": { + "heading": "权重", + "paragraphs": [ + "ControlNet 对生成图像的影响强度。" + ] + }, + "paramCFGScale": { + "heading": "CFG 等级", + "paragraphs": [ + "控制提示词对生成过程的影响程度。" + ] + }, + "paramSteps": { + "heading": "步数", + "paragraphs": [ + "每次生成迭代执行的步数。", + "通常情况下步数越多结果越好,但需要更多生成时间。" + ] + }, + "paramPositiveConditioning": { + "heading": "正向提示词", + "paragraphs": [ + "引导生成过程。您可以使用任何单词或短语。", + "Compel 语法、动态提示词语法和 embeddings。" + ] + }, + "lora": { + "heading": "LoRA 权重", + "paragraphs": [ + "更高的 LoRA 权重会对最终图像产生更大的影响。" + ] + }, + "infillMethod": { + "heading": "填充方法", + "paragraphs": [ + "填充选定区域的方式。" + ] + }, + "controlNetBeginEnd": { + "heading": "开始 / 结束步数百分比", + "paragraphs": [ + "去噪过程中在哪部分步数应用 ControlNet。", + "在组合处理开始阶段应用 ControlNet,且在引导细节生成的结束阶段应用 ControlNet。" + ] + }, + "scaleBeforeProcessing": { + "heading": "处理前缩放", + "paragraphs": [ + "生成图像前将所选区域缩放为最适合模型的大小。" + ] + }, + "paramDenoisingStrength": { + "heading": "去噪强度", + "paragraphs": [ + "为输入图像添加的噪声量。", + "输入 0 会导致结果图像和输入完全相同,输入 1 则会生成全新的图像。" + ] + }, + "paramSeed": { + "heading": "种子", + "paragraphs": [ + "控制用于生成的起始噪声。", + "禁用 “随机种子” 来以相同设置生成相同的结果。" + ] + }, + "controlNetControlMode": { + "heading": "控制模式", + "paragraphs": [ + "给提示词或 ControlNet 增加更大的权重。" + ] + }, + "dynamicPrompts": { + "paragraphs": [ + "动态提示词可将单个提示词解析为多个。", + "基本语法示例:\"a {red|green|blue} ball\"。这会产生三种提示词:\"a red ball\", \"a green ball\" 和 \"a blue ball\"。", + "可以在单个提示词中多次使用该语法,但务必请使用最大提示词设置来控制生成的提示词数量。" + ], + "heading": "动态提示词" + }, + "paramVAE": { + "paragraphs": [ + "用于将 AI 输出转换成最终图像的模型。" + ], + "heading": "VAE" + }, + "dynamicPromptsSeedBehaviour": { + "paragraphs": [ + "控制生成提示词时种子的使用方式。", + "每次迭代过程都会使用一个唯一的种子。使用本选项来探索单个种子的提示词变化。", + "例如,如果你有 5 种提示词,则生成的每个图像都会使用相同种子。", + "为每张图像使用独立的唯一种子。这可以提供更多变化。" + ], + "heading": "种子行为" + }, + "dynamicPromptsMaxPrompts": { + "heading": "最大提示词数量", + "paragraphs": [ + "限制动态提示词可生成的提示词数量。" + ] + }, + "controlNet": { + "paragraphs": [ + "ControlNet 为生成过程提供引导,为生成具有受控构图、结构、样式的图像提供帮助,具体的功能由所选的模型决定。" + ], + "heading": "ControlNet" + }, + "paramCFGRescaleMultiplier": { + "heading": "CFG 重缩放倍数", + "paragraphs": [ + "CFG 引导的重缩放倍率,用于通过 zero-terminal SNR (ztsnr) 训练的模型。推荐设为 0.7。" + ] + } + }, + "invocationCache": { + "disable": "禁用", + "misses": "缓存未中", + "enableFailed": "启用调用缓存时出现问题", + "invocationCache": "调用缓存", + "clearSucceeded": "调用缓存已清除", + "enableSucceeded": "调用缓存已启用", + "clearFailed": "清除调用缓存时出现问题", + "hits": "缓存命中", + "disableSucceeded": "调用缓存已禁用", + "disableFailed": "禁用调用缓存时出现问题", + "enable": "启用", + "clear": "清除", + "maxCacheSize": "最大缓存大小", + "cacheSize": "缓存大小", + "useCache": "使用缓存" + }, + "hrf": { + "enableHrf": "启用高分辨率修复", + "upscaleMethod": "放大方法", + "enableHrfTooltip": "使用较低的分辨率进行初始生成,放大到基础分辨率后进行图生图。", + "metadata": { + "strength": "高分辨率修复强度", + "enabled": "高分辨率修复已启用", + "method": "高分辨率修复方法" + }, + "hrf": "高分辨率修复", + "hrfStrength": "高分辨率修复强度", + "strengthTooltip": "值越低细节越少,但可以减少部分潜在的伪影。" + }, + "workflows": { + "saveWorkflowAs": "保存工作流为", + "workflowEditorMenu": "工作流编辑器菜单", + "noSystemWorkflows": "无系统工作流", + "workflowName": "工作流名称", + "noUserWorkflows": "无用户工作流", + "defaultWorkflows": "默认工作流", + "saveWorkflow": "保存工作流", + "openWorkflow": "打开工作流", + "clearWorkflowSearchFilter": "清除工作流检索过滤器", + "workflowLibrary": "工作流库", + "downloadWorkflow": "保存到文件", + "noRecentWorkflows": "无最近工作流", + "workflowSaved": "已保存工作流", + "workflowIsOpen": "工作流已打开", + "unnamedWorkflow": "未命名的工作流", + "savingWorkflow": "保存工作流中...", + "problemLoading": "加载工作流时出现问题", + "loading": "加载工作流中", + "searchWorkflows": "检索工作流", + "problemSavingWorkflow": "保存工作流时出现问题", + "deleteWorkflow": "删除工作流", + "workflows": "工作流", + "noDescription": "无描述", + "uploadWorkflow": "从文件中加载", + "userWorkflows": "我的工作流", + "newWorkflowCreated": "已创建新的工作流" + }, + "app": { + "storeNotInitialized": "商店尚未初始化" + } +} diff --git a/invokeai/frontend/web/dist/locales/zh_Hant.json b/invokeai/frontend/web/dist/locales/zh_Hant.json new file mode 100644 index 0000000000..fe51856117 --- /dev/null +++ b/invokeai/frontend/web/dist/locales/zh_Hant.json @@ -0,0 +1,53 @@ +{ + "common": { + "nodes": "節點", + "img2img": "圖片轉圖片", + "langSimplifiedChinese": "簡體中文", + "statusError": "錯誤", + "statusDisconnected": "已中斷連線", + "statusConnected": "已連線", + "back": "返回", + "load": "載入", + "close": "關閉", + "langEnglish": "英語", + "settingsLabel": "設定", + "upload": "上傳", + "langArabic": "阿拉伯語", + "discordLabel": "Discord", + "nodesDesc": "使用Node生成圖像的系統正在開發中。敬請期待有關於這項功能的更新。", + "reportBugLabel": "回報錯誤", + "githubLabel": "GitHub", + "langKorean": "韓語", + "langPortuguese": "葡萄牙語", + "hotkeysLabel": "快捷鍵", + "languagePickerLabel": "切換語言", + "langDutch": "荷蘭語", + "langFrench": "法語", + "langGerman": "德語", + "langItalian": "義大利語", + "langJapanese": "日語", + "langPolish": "波蘭語", + "langBrPortuguese": "巴西葡萄牙語", + "langRussian": "俄語", + "langSpanish": "西班牙語", + "unifiedCanvas": "統一畫布", + "cancel": "取消", + "langHebrew": "希伯來語", + "txt2img": "文字轉圖片" + }, + "accessibility": { + "modelSelect": "選擇模型", + "invokeProgressBar": "Invoke 進度條", + "uploadImage": "上傳圖片", + "reset": "重設", + "nextImage": "下一張圖片", + "previousImage": "上一張圖片", + "flipHorizontally": "水平翻轉", + "useThisParameter": "使用此參數", + "zoomIn": "放大", + "zoomOut": "縮小", + "flipVertically": "垂直翻轉", + "modifyConfig": "修改配置", + "menu": "選單" + } +} From faec320d485cf3cbfff6ba30ffa3fe85209063ff Mon Sep 17 00:00:00 2001 From: Millun Atluri Date: Fri, 29 Dec 2023 13:33:47 +1100 Subject: [PATCH 261/515] {release} v3.5.1 --- invokeai/version/invokeai_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/version/invokeai_version.py b/invokeai/version/invokeai_version.py index dcbfb52f61..0c11babd07 100644 --- a/invokeai/version/invokeai_version.py +++ b/invokeai/version/invokeai_version.py @@ -1 +1 @@ -__version__ = "3.5.0" +__version__ = "3.5.1" From a47d91f0e710c3a5d3bb1cbc9ecefff810e18bf4 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Fri, 29 Dec 2023 00:00:58 +1100 Subject: [PATCH 262/515] feat(api): add max_prompts constraints --- invokeai/app/api/routers/utilities.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/invokeai/app/api/routers/utilities.py b/invokeai/app/api/routers/utilities.py index 476d10e2c0..2a912dfacf 100644 --- a/invokeai/app/api/routers/utilities.py +++ b/invokeai/app/api/routers/utilities.py @@ -23,10 +23,11 @@ class DynamicPromptsResponse(BaseModel): ) async def parse_dynamicprompts( prompt: str = Body(description="The prompt to parse with dynamicprompts"), - max_prompts: int = Body(default=1000, description="The max number of prompts to generate"), + max_prompts: int = Body(ge=1, le=10000, default=1000, description="The max number of prompts to generate"), combinatorial: bool = Body(default=True, description="Whether to use the combinatorial generator"), ) -> DynamicPromptsResponse: """Creates a batch process""" + max_prompts = min(max_prompts, 10000) generator: Union[RandomPromptGenerator, CombinatorialPromptGenerator] try: error: Optional[str] = None From f0b102d83093d43dc3b0d7a8c8515e8ca0a148ed Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Fri, 29 Dec 2023 00:03:21 +1100 Subject: [PATCH 263/515] feat(ui): ux improvements & redesign This is a squash merge of a bajillion messy small commits created while iterating on the UI component library and redesign. --- invokeai/frontend/web/.eslintrc.js | 24 +- invokeai/frontend/web/.prettierignore | 1 + .../frontend/web/.storybook/ReduxInit.tsx | 23 + invokeai/frontend/web/.storybook/main.ts | 1 + invokeai/frontend/web/.storybook/preview.tsx | 25 +- invokeai/frontend/web/.unimportedrc.json | 15 + invokeai/frontend/web/config/common.ts | 2 +- .../frontend/web/config/vite.app.config.ts | 3 +- .../web/config/vite.package.config.ts | 5 +- invokeai/frontend/web/package.json | 23 +- invokeai/frontend/web/pnpm-lock.yaml | 696 ++-- invokeai/frontend/web/public/locales/en.json | 47 +- invokeai/frontend/web/scripts/typegen.js | 3 +- .../frontend/web/src/app/components/App.tsx | 13 +- .../components/AppErrorBoundaryFallback.tsx | 27 +- .../web/src/app/components/GlobalHotkeys.ts | 112 - .../web/src/app/components/InvokeAIUI.tsx | 22 +- .../app/components/ThemeLocaleProvider.tsx | 35 +- .../web/src/app/components/Toaster.ts | 3 +- invokeai/frontend/web/src/app/features.ts | 94 - .../frontend/web/src/app/hooks/useSocketIO.ts | 8 +- .../frontend/web/src/app/logging/logger.ts | 15 +- .../frontend/web/src/app/logging/useLogger.ts | 10 +- .../frontend/web/src/app/store/actions.ts | 4 +- .../enhancers/reduxRemember/serialize.ts | 2 +- .../enhancers/reduxRemember/unserialize.ts | 2 +- .../middleware/devtools/actionSanitizer.ts | 4 +- .../middleware/listenerMiddleware/index.ts | 17 +- .../addCommitStagingAreaImageListener.ts | 1 + .../addFirstListImagesListener.ts.ts | 5 +- .../listeners/anyEnqueued.ts | 1 + .../listeners/appConfigReceived.ts | 1 + .../listeners/appStarted.ts | 1 + .../listeners/batchEnqueued.ts | 3 +- .../listeners/boardAndImagesDeleted.ts | 1 + .../listeners/boardIdSelected.ts | 3 +- .../listeners/canvasCopiedToClipboard.ts | 5 +- .../listeners/canvasDownloadedAsImage.ts | 5 +- .../listeners/canvasImageToControlNet.ts | 3 +- .../listeners/canvasMaskSavedToGallery.ts | 5 +- .../listeners/canvasMaskToControlNet.ts | 1 + .../listeners/canvasMerged.ts | 5 +- .../listeners/canvasSavedToGallery.ts | 5 +- .../listeners/controlNetAutoProcess.ts | 7 +- .../listeners/controlNetImageProcessed.ts | 5 +- .../listeners/enqueueRequestedCanvas.ts | 3 +- .../listeners/enqueueRequestedLinear.ts | 1 + .../listeners/enqueueRequestedNodes.ts | 3 +- .../listeners/imageAddedToBoard.ts | 1 + .../listeners/imageDeleted.ts | 1 + .../listeners/imageDropped.ts | 5 +- .../listeners/imageRemovedFromBoard.ts | 1 + .../listeners/imageToDeleteSelected.ts | 1 + .../listeners/imageUploaded.ts | 5 +- .../listeners/imagesStarred.ts | 7 +- .../listeners/imagesUnstarred.ts | 7 +- .../listeners/initialImageSelected.ts | 1 + .../listeners/modelSelected.ts | 15 +- .../listeners/modelsLoaded.ts | 25 +- .../listeners/promptChanged.ts | 1 + .../listeners/receivedOpenAPISchema.ts | 1 + .../listeners/socketio/socketConnected.ts | 3 +- .../listeners/socketio/socketDisconnected.ts | 1 + .../socketio/socketGeneratorProgress.ts | 1 + .../socketGraphExecutionStateComplete.ts | 1 + .../socketio/socketInvocationComplete.ts | 3 +- .../socketio/socketInvocationError.ts | 1 + .../socketInvocationRetrievalError.ts | 1 + .../socketio/socketInvocationStarted.ts | 1 + .../listeners/socketio/socketModelLoad.ts | 1 + .../socketio/socketQueueItemStatusChanged.ts | 1 + .../socketio/socketSessionRetrievalError.ts | 1 + .../listeners/socketio/socketSubscribed.ts | 1 + .../listeners/socketio/socketUnsubscribed.ts | 1 + .../listeners/stagingAreaImageSaved.ts | 5 +- .../listeners/tabChanged.ts | 1 + .../listeners/updateAllNodesRequested.ts | 5 +- .../listeners/upscaleRequested.ts | 5 +- .../listeners/workflowLoadRequested.ts | 7 +- .../web/src/app/store/nanostores/README.md | 3 + .../src/app/store/nanostores/customStarUI.ts | 2 +- .../app/store/nanostores/headerComponent.ts | 2 +- .../web/src/app/store/nanostores/index.ts | 3 - .../web/src/app/store/nanostores/store.ts | 2 +- invokeai/frontend/web/src/app/store/store.ts | 18 +- .../frontend/web/src/app/store/storeHooks.ts | 5 +- .../frontend/web/src/app/types/invokeai.ts | 6 +- .../AspectRatioPreview.stories.tsx | 64 + .../AspectRatioPreview/AspectRatioPreview.tsx | 60 + .../AspectRatioPreview/constants.ts | 23 + .../components/AspectRatioPreview/hooks.ts | 48 + .../components/AspectRatioPreview/types.ts | 7 + .../components/GreyscaleInvokeAIIcon.tsx | 22 - .../src/common/components/IAIAlertDialog.tsx | 93 - .../web/src/common/components/IAIButton.tsx | 43 - .../web/src/common/components/IAICollapse.tsx | 106 - .../src/common/components/IAIColorPicker.tsx | 89 +- .../web/src/common/components/IAIDndImage.tsx | 37 +- .../src/common/components/IAIDndImageIcon.tsx | 16 +- .../src/common/components/IAIDraggable.tsx | 5 +- .../src/common/components/IAIDropOverlay.tsx | 19 +- .../src/common/components/IAIDroppable.tsx | 6 +- .../src/common/components/IAIIconButton.tsx | 41 - .../common/components/IAIImageFallback.tsx | 35 +- .../IAIInformationalPopover.tsx | 280 +- .../IAIInformationalPopover/constants.ts | 2 +- .../web/src/common/components/IAIInput.tsx | 82 - .../src/common/components/IAIMantineInput.tsx | 57 - .../components/IAIMantineMultiSelect.tsx | 66 - .../components/IAIMantineSearchableSelect.tsx | 100 - .../common/components/IAIMantineSelect.tsx | 57 - .../IAIMantineSelectItemWithDescription.tsx | 29 - .../IAIMantineSelectItemWithTooltip.tsx | 34 - .../src/common/components/IAINumberInput.tsx | 186 -- .../web/src/common/components/IAIOption.tsx | 18 - .../web/src/common/components/IAIPopover.tsx | 38 - .../src/common/components/IAIScrollArea.tsx | 12 - .../web/src/common/components/IAISelect.tsx | 85 - .../common/components/IAISimpleCheckbox.tsx | 26 - .../src/common/components/IAISimpleMenu.tsx | 88 - .../web/src/common/components/IAISlider.tsx | 366 --- .../web/src/common/components/IAISwitch.tsx | 77 - .../web/src/common/components/IAITextarea.tsx | 38 - .../components/ImageMetadataOverlay.tsx | 2 +- .../common/components/ImageUploadOverlay.tsx | 6 +- .../src/common/components/ImageUploader.tsx | 16 +- .../InvAccordion/InvAccordion.stories.tsx | 70 + .../InvAccordion/InvAccordionButton.tsx | 24 + .../components/InvAccordion/theme.ts} | 42 +- .../common/components/InvAccordion/types.ts | 11 + .../common/components/InvAccordion/wrapper.ts | 6 + .../common/components/InvAlertDialog/types.ts | 4 + .../components/InvAlertDialog/wrapper.ts | 9 + .../InvAutosizeTextarea.tsx | 37 + .../InvTextarea.stories.tsx | 21 + .../components/InvAutosizeTextarea/theme.ts | 0 .../components/InvAutosizeTextarea/types.ts | 7 + .../components/InvBadge/InvBadge.stories.tsx | 24 + .../src/common/components/InvBadge/theme.ts | 22 + .../src/common/components/InvBadge/types.ts | 3 + .../src/common/components/InvBadge/wrapper.ts | 1 + .../InvButton/InvButton.stories.tsx | 93 + .../common/components/InvButton/InvButton.tsx | 24 + .../src/common/components/InvButton/theme.ts | 228 ++ .../src/common/components/InvButton/types.ts | 7 + .../InvButtonGroup/InvButtonGroup.stories.tsx | 47 + .../InvButtonGroup/InvButtonGroup.tsx | 10 + .../common/components/InvButtonGroup/types.ts | 1 + .../components/InvCard/InvCard.stories.tsx | 24 + .../src/common/components/InvCard/theme.ts | 11 + .../src/common/components/InvCard/types.ts | 6 + .../src/common/components/InvCard/wrapper.ts | 6 + .../InvCheckbox/InvCheckbox.stories.tsx | 21 + .../components/InvCheckbox/theme.ts} | 27 +- .../common/components/InvCheckbox/types.ts | 3 + .../common/components/InvCheckbox/wrapper.ts | 1 + .../InvConfirmationAlertDialog.tsx | 74 + .../InvConfirmationAlertDialog/types.ts | 16 + .../InvContextMenu/InvContextMenu.stories.tsx | 52 + .../InvContextMenu.tsx} | 60 +- .../InvControl/InvControl.stories.tsx | 95 + .../components/InvControl/InvControl.tsx | 75 + .../components/InvControl/InvControlGroup.tsx | 22 + .../common/components/InvControl/InvLabel.tsx | 43 + .../src/common/components/InvControl/theme.ts | 76 + .../src/common/components/InvControl/types.ts | 21 + .../InvEditable/InvEditable.stories.tsx | 26 + .../components/InvEditable/theme.ts} | 11 +- .../common/components/InvEditable/types.ts | 6 + .../common/components/InvEditable/wrapper.ts | 6 + .../InvExpander/InvExpander.stories.tsx | 21 + .../components/InvExpander/InvExpander.tsx | 40 + .../common/components/InvExpander/types.ts | 6 + .../InvHeading/InvHeading.stories.tsx | 21 + .../src/common/components/InvHeading/theme.ts | 11 + .../src/common/components/InvHeading/types.ts | 1 + .../common/components/InvHeading/wrapper.ts | 1 + .../InvIconButton/InvIconButton.stories.tsx | 25 + .../InvIconButton/InvIconButton.tsx | 27 + .../common/components/InvIconButton/types.ts | 7 + .../components/InvInput/InvInput.stories.tsx | 21 + .../common/components/InvInput/InvInput.tsx | 28 + .../components/InvInput/theme.ts} | 17 +- .../src/common/components/InvInput/types.ts | 3 + .../components/InvMenu/InvMenu.stories.tsx | 63 + .../common/components/InvMenu/InvMenuItem.tsx | 44 + .../common/components/InvMenu/InvMenuList.tsx | 22 + .../common/components/InvMenu/constants.ts | 29 + .../src/common/components/InvMenu/theme.ts | 86 + .../src/common/components/InvMenu/types.ts | 22 + .../src/common/components/InvMenu/wrapper.ts | 8 + .../components/InvModal/InvModal.stories.tsx | 61 + .../src/common/components/InvModal/theme.ts | 32 + .../src/common/components/InvModal/types.ts | 9 + .../src/common/components/InvModal/wrapper.ts | 9 + .../InvNumberInput/InvNumberInput.stories.tsx | 33 + .../InvNumberInput/InvNumberInput.tsx | 121 + .../InvNumberInput/InvNumberInputField.tsx | 32 + .../InvNumberInput/InvNumberInputStepper.tsx | 26 + .../common/components/InvNumberInput/theme.ts | 84 + .../common/components/InvNumberInput/types.ts | 46 + .../InvPopover/InvPopover.stories.tsx | 46 + .../src/common/components/InvPopover/theme.ts | 59 + .../src/common/components/InvPopover/types.ts | 9 + .../common/components/InvPopover/wrapper.ts | 11 + .../InvProgress/InvProgress.stories.tsx | 21 + .../components/InvProgress/theme.ts} | 9 +- .../common/components/InvProgress/types.ts | 1 + .../common/components/InvProgress/wrapper.ts | 1 + .../InvRangeSlider/InvRangeSlider.stories.tsx | 50 + .../InvRangeSlider/InvRangeSlider.tsx | 109 + .../InvRangeSlider/InvRangeSliderMark.tsx | 56 + .../common/components/InvRangeSlider/theme.ts | 63 + .../common/components/InvRangeSlider/types.ts | 51 + .../components/InvSelect/CustomMenuList.tsx | 83 + .../components/InvSelect/CustomOption.tsx | 69 + .../InvSelect/InvSelect.stories.tsx | 64 + .../common/components/InvSelect/InvSelect.tsx | 74 + .../InvSelect/InvSelectFallback.tsx | 12 + .../src/common/components/InvSelect/theme.ts | 5 + .../src/common/components/InvSelect/types.ts | 44 + .../InvSelect/useGroupedModelInvSelect.ts | 98 + .../InvSingleAccordion.stories.tsx | 71 + .../InvSingleAccordion/InvSingleAccordion.tsx | 24 + .../components/InvSingleAccordion/types.ts | 7 + .../InvSkeleton/InvSkeleton.stories.tsx | 21 + .../components/InvSkeleton/theme.ts} | 12 +- .../common/components/InvSkeleton/types.ts | 1 + .../common/components/InvSkeleton/wrapper.ts | 1 + .../InvSlider/InvSlider.stories.tsx | 55 + .../common/components/InvSlider/InvSlider.tsx | 115 + .../components/InvSlider/InvSliderMark.tsx | 94 + .../src/common/components/InvSlider/theme.ts | 63 + .../src/common/components/InvSlider/types.ts | 76 + .../InvSwitch/InvSwitch.stories.tsx | 21 + .../components/InvSwitch/theme.ts} | 20 +- .../src/common/components/InvSwitch/types.ts | 3 + .../common/components/InvSwitch/wrapper.ts | 1 + .../src/common/components/InvTabs/InvTab.tsx | 21 + .../components/InvTabs/InvTabs.stories.tsx | 46 + .../src/common/components/InvTabs/theme.ts | 114 + .../src/common/components/InvTabs/types.ts | 18 + .../src/common/components/InvTabs/wrapper.ts | 6 + .../components/InvText/InvText.stories.tsx | 21 + .../src/common/components/InvText/theme.ts | 21 + .../src/common/components/InvText/types.ts | 3 + .../src/common/components/InvText/wrapper.ts | 1 + .../InvTextarea/InvTextarea.stories.tsx | 30 + .../components/InvTextarea/InvTextarea.tsx | 29 + .../common/components/InvTextarea/theme.ts | 13 + .../common/components/InvTextarea/types.ts | 3 + .../InvTooltip/InvTooltip.stories.tsx | 36 + .../components/InvTooltip/InvTooltip.tsx | 19 + .../components/InvTooltip/theme.ts} | 9 +- .../src/common/components/InvTooltip/types.ts | 3 + .../components/NodeSelectionOverlay.tsx | 21 +- .../OverlayScrollbars}/ScrollableContent.tsx | 6 +- .../components/OverlayScrollbars/constants.ts | 18 + .../OverlayScrollbars}/overlayscrollbars.css | 20 +- .../common/components/SelectionOverlay.tsx | 15 +- .../src/common/hooks/useGlobalModifiers.ts | 61 + .../src/common/hooks/useImageUploadButton.tsx | 2 +- .../src/common/util/stopPastePropagation.ts | 2 +- .../ClearCanvasHistoryButtonModal.tsx | 46 +- .../features/canvas/components/IAICanvas.tsx | 7 +- .../canvas/components/IAICanvasGrid.tsx | 25 +- .../canvas/components/IAICanvasImage.tsx | 3 +- .../IAICanvasImageErrorFallback.tsx | 13 +- .../components/IAICanvasIntermediateImage.tsx | 2 +- .../components/IAICanvasMaskCompositer.tsx | 4 +- .../canvas/components/IAICanvasMaskLines.tsx | 2 +- .../components/IAICanvasObjectRenderer.tsx | 1 + .../components/IAICanvasStagingArea.tsx | 3 +- .../IAICanvasStagingAreaToolbar.tsx | 41 +- .../canvas/components/IAICanvasStatusText.tsx | 8 +- .../components/IAICanvasToolPreview.tsx | 2 +- .../IAICanvasToolbar/IAICanvasBoundingBox.tsx | 10 +- .../IAICanvasToolbar/IAICanvasMaskOptions.tsx | 99 +- .../IAICanvasToolbar/IAICanvasRedoButton.tsx | 4 +- .../IAICanvasSettingsButtonPopover.tsx | 136 +- .../IAICanvasToolChooserOptions.tsx | 104 +- .../IAICanvasToolbar/IAICanvasToolbar.tsx | 88 +- .../IAICanvasToolbar/IAICanvasUndoButton.tsx | 4 +- .../canvas/hooks/useCanvasDragMove.ts | 2 +- .../canvas/hooks/useCanvasGenerationMode.ts | 2 +- .../features/canvas/hooks/useCanvasHotkeys.ts | 2 +- .../canvas/hooks/useCanvasMouseDown.ts | 8 +- .../canvas/hooks/useCanvasMouseMove.ts | 8 +- .../features/canvas/hooks/useCanvasMouseUp.ts | 5 +- .../features/canvas/hooks/useCanvasZoom.ts | 7 +- .../canvas/hooks/useColorUnderCursor.ts | 2 +- .../web/src/features/canvas/store/actions.ts | 2 +- .../canvas/store/canvasPersistDenylist.ts | 2 +- .../features/canvas/store/canvasSelectors.ts | 7 +- .../src/features/canvas/store/canvasSlice.ts | 36 +- .../src/features/canvas/store/canvasTypes.ts | 27 +- .../canvas/util/calculateCoordinates.ts | 2 +- .../src/features/canvas/util/colorToString.ts | 2 +- .../features/canvas/util/createMaskStage.ts | 4 +- .../features/canvas/util/floorCoordinates.ts | 2 +- .../features/canvas/util/getBaseLayerBlob.ts | 3 +- .../src/features/canvas/util/getCanvasData.ts | 7 +- .../canvas/util/getCanvasGenerationMode.ts | 2 +- .../util/getScaledBoundingBoxDimensions.ts | 2 +- .../canvas/util/getScaledCursorPosition.ts | 2 +- .../canvas/util/konvaInstanceProvider.ts | 2 +- .../features/canvas/util/konvaNodeToBlob.ts | 5 +- .../canvas/util/konvaNodeToImageData.ts | 5 +- .../canvas/util/roundDimensionsTo64.ts | 2 +- .../components/ChangeBoardModal.tsx | 116 +- .../changeBoardModal/store/initialState.ts | 2 +- .../features/changeBoardModal/store/slice.ts | 6 +- .../features/changeBoardModal/store/types.ts | 2 +- .../components/ControlAdapterConfig.tsx | 54 +- .../components/ControlAdapterImagePreview.tsx | 23 +- .../ControlAdapterProcessorComponent.tsx | 5 +- .../ControlAdapterShouldAutoConfig.tsx | 22 +- .../hooks/useProcessorNodeChanged.ts | 2 +- .../imports/ControlNetCanvasImageImports.tsx | 8 +- .../ParamControlAdapterBeginEnd.tsx | 123 +- .../ParamControlAdapterControlMode.tsx | 59 +- .../parameters/ParamControlAdapterModel.tsx | 130 +- .../ParamControlAdapterProcessorSelect.tsx | 52 +- .../ParamControlAdapterResizeMode.tsx | 59 +- .../parameters/ParamControlAdapterWeight.tsx | 19 +- .../components/processors/CannyProcessor.tsx | 52 +- .../processors/ColorMapProcessor.tsx | 38 +- .../processors/ContentShuffleProcessor.tsx | 121 +- .../components/processors/HedProcessor.tsx | 68 +- .../processors/LineartAnimeProcessor.tsx | 52 +- .../processors/LineartProcessor.tsx | 68 +- .../processors/MediapipeFaceProcessor.tsx | 56 +- .../processors/MidasDepthProcessor.tsx | 58 +- .../processors/MlsdImageProcessor.tsx | 102 +- .../processors/NormalBaeProcessor.tsx | 52 +- .../processors/OpenposeProcessor.tsx | 71 +- .../components/processors/PidiProcessor.tsx | 76 +- .../processors/ZoeDepthProcessor.tsx | 2 +- .../processors/common/ProcessorWrapper.tsx | 2 +- .../hooks/useAddControlAdapter.ts | 3 +- .../hooks/useControlAdapterModelEntities.ts | 23 + .../hooks/useControlAdapterModels.ts | 2 +- .../controlAdapters/store/constants.ts | 3 +- .../store/controlAdaptersPersistDenylist.ts | 2 +- .../store/controlAdaptersSlice.ts | 20 +- .../features/controlAdapters/store/types.ts | 23 +- .../util/buildControlAdapter.ts | 6 +- .../components/DeleteImageButton.tsx | 8 +- .../components/DeleteImageModal.tsx | 85 +- .../components/ImageUsageMessage.tsx | 9 +- .../deleteImageModal/store/actions.ts | 5 +- .../deleteImageModal/store/initialState.ts | 2 +- .../deleteImageModal/store/selectors.ts | 5 +- .../features/deleteImageModal/store/slice.ts | 6 +- .../features/deleteImageModal/store/types.ts | 2 +- .../features/dnd/components/AppDndContext.tsx | 8 +- .../dnd/components/DndContextTypesafe.tsx | 2 +- .../features/dnd/components/DragPreview.tsx | 18 +- .../src/features/dnd/hooks/typesafeHooks.ts | 2 +- .../web/src/features/dnd/types/index.ts | 12 +- .../features/dnd/util/customPointerWithin.ts | 3 +- .../web/src/features/dnd/util/isValidDrop.ts | 2 +- .../components/DynamicPromptsPreviewModal.tsx | 44 + .../ParamDynamicPromptsCollapse.tsx | 52 - .../ParamDynamicPromptsCombinatorial.tsx | 11 +- .../ParamDynamicPromptsMaxPrompts.tsx | 26 +- .../components/ParamDynamicPromptsPreview.tsx | 117 +- .../ParamDynamicPromptsSeedBehaviour.tsx | 52 +- .../ShowDynamicPromptsPreviewButton.tsx | 22 + .../hooks/useDynamicPromptsModal.ts | 19 + .../store/dynamicPromptsPersistDenylist.ts | 2 +- .../store/dynamicPromptsSlice.ts | 9 +- .../features/embedding/AddEmbeddingButton.tsx | 25 + .../features/embedding/EmbeddingPopover.tsx | 46 + .../embedding/EmbeddingSelect.stories.tsx | 21 + .../features/embedding/EmbeddingSelect.tsx | 75 + .../components/AddEmbeddingButton.tsx | 44 - .../components/ParamEmbeddingPopover.tsx | 147 - .../web/src/features/embedding/types.ts | 12 + .../web/src/features/embedding/usePrompt.ts | 105 + .../gallery/components/Boards/AutoAddIcon.tsx | 5 +- .../components/Boards/BoardAutoAddSelect.tsx | 70 +- .../components/Boards/BoardContextMenu.tsx | 54 +- .../Boards/BoardsList/AddBoardButton.tsx | 6 +- .../Boards/BoardsList/BoardsList.tsx | 13 +- .../Boards/BoardsList/BoardsSearch.tsx | 22 +- .../Boards/BoardsList/GalleryBoard.tsx | 42 +- .../Boards/BoardsList/NoBoardBoard.tsx | 25 +- .../components/Boards/DeleteBoardModal.tsx | 76 +- .../Boards/GalleryBoardContextMenuItems.tsx | 24 +- .../Boards/NoBoardContextMenuItems.tsx | 10 +- .../CurrentImage/CurrentImageButtons.tsx | 66 +- .../CurrentImage/CurrentImageDisplay.tsx | 3 +- .../CurrentImage/CurrentImagePreview.tsx | 2 +- .../gallery/components/GalleryBoardName.tsx | 36 +- .../components/GallerySettingsPopover.tsx | 82 +- .../ImageContextMenu/ImageContextMenu.tsx | 38 +- .../MultipleSelectionMenuItems.tsx | 30 +- .../SingleSelectionMenuItems.tsx | 59 +- .../components/ImageGalleryContent.tsx | 20 +- .../components/ImageGrid/GalleryImage.tsx | 14 +- .../components/ImageGrid/GalleryImageGrid.tsx | 36 +- .../ImageGrid/ImageGridItemContainer.tsx | 6 +- .../ImageGrid/ImageGridListContainer.tsx | 8 +- .../gallery/components/ImageGrid/types.ts | 4 +- .../ImageMetadataViewer/DataViewer.tsx | 28 +- .../ImageMetadataActions.tsx | 9 +- .../ImageMetadataViewer/ImageMetadataItem.tsx | 25 +- .../ImageMetadataViewer.tsx | 9 +- .../ImageMetadataWorkflowTabContent.tsx | 3 +- .../components/NextPrevImageButtons.tsx | 12 +- .../features/gallery/hooks/useMultiselect.ts | 5 +- .../gallery/hooks/useNextPrevImage.ts | 7 +- .../gallery/hooks/useScrollToVisible.ts | 2 +- .../web/src/features/gallery/store/actions.ts | 4 +- .../gallery/store/galleryPersistDenylist.ts | 2 +- .../gallery/store/gallerySelectors.ts | 5 +- .../features/gallery/store/gallerySlice.ts | 7 +- .../web/src/features/gallery/store/types.ts | 2 +- .../gallery/util/getScrollToIndexAlign.ts | 2 +- .../features/hrf/components/HrfSettings.tsx | 29 + .../hrf/components/ParamHrfMethod.tsx | 45 + .../hrf/components/ParamHrfStrength.tsx | 60 + .../hrf/components/ParamHrfToggle.tsx | 31 + .../web/src/features/hrf/store/hrfSlice.ts | 40 + .../src/features/lora/components/LoRACard.tsx | 79 + .../{ParamLoraList.tsx => LoRAList.tsx} | 31 +- .../features/lora/components/LoRASelect.tsx | 78 + .../features/lora/components/ParamLora.tsx | 68 - .../lora/components/ParamLoraCollapse.tsx | 40 - .../lora/components/ParamLoraSelect.tsx | 106 - .../src/features/lora/components/styles.ts | 33 + .../web/src/features/lora/store/loraSlice.ts | 7 +- .../SyncModels/SyncModelsButton.tsx | 29 + .../SyncModels/SyncModelsIconButton.tsx | 32 + .../components/SyncModels/useSyncModels.ts | 40 + .../modelManager/store/modelManagerSlice.ts | 3 +- .../subpanels/AddModelsPanel/AddModels.tsx | 23 +- .../AddModelsPanel/AdvancedAddCheckpoint.tsx | 105 +- .../AddModelsPanel/AdvancedAddDiffusers.tsx | 80 +- .../AddModelsPanel/AdvancedAddModels.tsx | 44 +- .../AddModelsPanel/FoundModelsList.tsx | 97 +- .../AddModelsPanel/ScanAdvancedAddModels.tsx | 66 +- .../subpanels/AddModelsPanel/ScanModels.tsx | 1 + .../AddModelsPanel/SearchFolderForm.tsx | 37 +- .../AddModelsPanel/SimpleAddModels.tsx | 45 +- .../subpanels/ImportModelsPanel.tsx | 18 +- .../subpanels/MergeModelsPanel.tsx | 284 +- .../subpanels/ModelManagerPanel.tsx | 20 +- .../ModelManagerPanel/CheckpointModelEdit.tsx | 84 +- .../ModelManagerPanel/DiffusersModelEdit.tsx | 61 +- .../ModelManagerPanel/LoRAModelEdit.tsx | 51 +- .../ModelManagerPanel/ModelConvert.tsx | 146 +- .../subpanels/ModelManagerPanel/ModelList.tsx | 69 +- .../ModelManagerPanel/ModelListItem.tsx | 66 +- .../subpanels/ModelManagerSettingsPanel.tsx | 1 + .../ModelManagerSettingsPanel/SyncModels.tsx | 16 +- .../SyncModelsButton.tsx | 70 - .../subpanels/shared/BaseModelSelect.tsx | 25 +- .../shared/CheckpointConfigsSelect.tsx | 33 +- .../subpanels/shared/ModelVariantSelect.tsx | 25 +- .../features/nodes/components/NodeEditor.tsx | 8 +- .../flow/AddNodePopover/AddNodePopover.tsx | 201 +- .../AddNodePopoverSelectItem.tsx | 29 - .../features/nodes/components/flow/Flow.tsx | 12 +- .../connectionLines/CustomConnectionLine.tsx | 3 +- .../flow/edges/InvocationCollapsedEdge.tsx | 9 +- .../flow/edges/InvocationDefaultEdge.tsx | 4 +- .../flow/edges/util/getEdgeColor.ts | 2 +- .../flow/edges/util/makeEdgeSelector.ts | 1 + .../nodes/CurrentImage/CurrentImageNode.tsx | 17 +- .../flow/nodes/Invocation/InvocationNode.tsx | 9 +- .../InvocationNodeClassificationIcon.tsx | 11 +- .../InvocationNodeCollapsedHandles.tsx | 11 +- .../nodes/Invocation/InvocationNodeFooter.tsx | 3 +- .../nodes/Invocation/InvocationNodeHeader.tsx | 9 +- .../Invocation/InvocationNodeInfoIcon.tsx | 50 +- .../InvocationNodeStatusIndicator.tsx | 43 +- .../InvocationNodeUnknownFallback.tsx | 32 +- .../Invocation/InvocationNodeWrapper.tsx | 5 +- .../flow/nodes/Invocation/NotesTextarea.tsx | 15 +- .../Invocation/SaveToGalleryCheckbox.tsx | 20 +- .../nodes/Invocation/UseCacheCheckbox.tsx | 16 +- .../Invocation/fields/EditableFieldTitle.tsx | 25 +- .../Invocation/fields/FieldContextMenu.tsx | 47 +- .../nodes/Invocation/fields/FieldHandle.tsx | 17 +- .../nodes/Invocation/fields/FieldTitle.tsx | 7 +- .../Invocation/fields/FieldTooltipContent.tsx | 17 +- .../nodes/Invocation/fields/InputField.tsx | 123 +- .../Invocation/fields/InputFieldRenderer.tsx | 25 +- .../Invocation/fields/LinearViewField.tsx | 97 +- .../nodes/Invocation/fields/OutputField.tsx | 60 +- .../inputs/BoardFieldInputComponent.tsx | 69 +- .../inputs/BooleanFieldInputComponent.tsx | 8 +- .../inputs/ColorFieldInputComponent.tsx | 10 +- .../ControlNetModelFieldInputComponent.tsx | 116 +- .../fields/inputs/EnumFieldInputComponent.tsx | 8 +- .../IPAdapterModelFieldInputComponent.tsx | 100 +- .../inputs/ImageFieldInputComponent.tsx | 20 +- .../inputs/LoRAModelFieldInputComponent.tsx | 138 +- .../inputs/MainModelFieldInputComponent.tsx | 166 +- .../inputs/NumberFieldInputComponent.tsx | 83 +- .../RefinerModelFieldInputComponent.tsx | 137 +- .../SDXLMainModelFieldInputComponent.tsx | 166 +- .../inputs/SchedulerFieldInputComponent.tsx | 71 +- .../inputs/StringFieldInputComponent.tsx | 16 +- .../T2IAdapterModelFieldInputComponent.tsx | 97 +- .../inputs/VAEModelFieldInputComponent.tsx | 128 +- .../nodes/Invocation/fields/inputs/types.ts | 2 +- .../components/flow/nodes/Notes/NotesNode.tsx | 15 +- .../flow/nodes/common/NodeCollapseButton.tsx | 12 +- .../flow/nodes/common/NodeTitle.tsx | 5 +- .../flow/nodes/common/NodeWrapper.tsx | 36 +- .../BottomLeftPanel/BottomLeftPanel.tsx | 1 + .../BottomLeftPanel/NodeOpacitySlider.tsx | 18 +- .../BottomLeftPanel/ViewportControls.tsx | 22 +- .../flow/panels/MinimapPanel/MinimapPanel.tsx | 23 +- .../flow/panels/TopLeftPanel/TopLeftPanel.tsx | 43 - .../flow/panels/TopPanel/AddNodeButton.tsx | 4 +- .../panels/TopPanel/UpdateNodesButton.tsx | 6 +- .../flow/panels/TopPanel/WorkflowName.tsx | 23 +- .../ReloadSchemaButton.tsx | 6 +- .../panels/TopRightPanel/TopRightPanel.tsx | 4 +- .../TopRightPanel/WorkflowEditorSettings.tsx | 112 +- .../sidePanel/NodeEditorPanelGroup.tsx | 26 +- .../inspector/InspectorDetailsTab.tsx | 66 +- .../inspector/InspectorOutputsTab.tsx | 7 +- .../sidePanel/inspector/InspectorPanel.tsx | 5 +- .../inspector/details/EditableNodeTitle.tsx | 11 +- .../inspector/outputs/ImageOutputPreview.tsx | 2 +- .../sidePanel/workflow/WorkflowGeneralTab.tsx | 86 +- .../sidePanel/workflow/WorkflowLinearTab.tsx | 2 +- .../sidePanel/workflow/WorkflowPanel.tsx | 3 +- .../src/features/nodes/hooks/useBuildNode.ts | 10 +- .../nodes/hooks/useConnectionState.ts | 1 + .../nodes/hooks/useDownloadWorkflow.ts | 17 - .../nodes/hooks/useIsValidConnection.ts | 9 +- .../nodes/hooks/useNodeTemplateByType.ts | 2 +- .../nodes/hooks/usePrettyFieldType.ts | 4 +- .../src/features/nodes/hooks/useWithFooter.ts | 1 + .../web/src/features/nodes/store/actions.ts | 4 +- .../nodes/store/nodesPersistDenylist.ts | 2 +- .../src/features/nodes/store/nodesSlice.ts | 38 +- .../features/nodes/store/reactFlowInstance.ts | 2 +- .../web/src/features/nodes/store/types.ts | 18 +- .../store/util/findConnectionToValidHandle.ts | 5 +- .../store/util/findUnoccupiedPosition.ts | 2 +- .../nodes/store/util/getIsGraphAcyclic.ts | 2 +- .../util/makeIsConnectionValidSelector.ts | 5 +- .../util/validateSourceAndTargetTypes.ts | 2 +- .../src/features/nodes/store/workflowSlice.ts | 9 +- .../web/src/features/nodes/types/constants.ts | 2 +- .../web/src/features/nodes/types/field.ts | 11 +- .../src/features/nodes/types/invocation.ts | 3 +- .../web/src/features/nodes/types/metadata.ts | 1 + .../web/src/features/nodes/types/openapi.ts | 4 +- .../features/nodes/types/v1/fieldTypeMap.ts | 5 +- .../web/src/features/nodes/types/workflow.ts | 1 + .../util/graph/addControlNetToLinearGraph.ts | 5 +- .../nodes/util/graph/addHrfToGraph.ts | 17 +- .../util/graph/addIPAdapterToLinearGraph.ts | 5 +- .../nodes/util/graph/addLinearUIOutputNode.ts | 8 +- .../nodes/util/graph/addLoRAsToGraph.ts | 5 +- .../nodes/util/graph/addNSFWCheckerToGraph.ts | 5 +- .../nodes/util/graph/addSDXLLoRAstoGraph.ts | 14 +- .../nodes/util/graph/addSDXLRefinerToGraph.ts | 13 +- .../util/graph/addSeamlessToLinearGraph.ts | 8 +- .../util/graph/addT2IAdapterToLinearGraph.ts | 5 +- .../nodes/util/graph/addVAEToGraph.ts | 9 +- .../nodes/util/graph/addWatermarkerToGraph.ts | 5 +- .../util/graph/buildAdHocUpscaleGraph.ts | 9 +- .../nodes/util/graph/buildCanvasGraph.ts | 5 +- .../graph/buildCanvasImageToImageGraph.ts | 5 +- .../util/graph/buildCanvasInpaintGraph.ts | 5 +- .../util/graph/buildCanvasOutpaintGraph.ts | 5 +- .../graph/buildCanvasSDXLImageToImageGraph.ts | 18 +- .../util/graph/buildCanvasSDXLInpaintGraph.ts | 18 +- .../graph/buildCanvasSDXLOutpaintGraph.ts | 18 +- .../graph/buildCanvasSDXLTextToImageGraph.ts | 66 +- .../util/graph/buildCanvasTextToImageGraph.ts | 62 +- .../util/graph/buildLinearBatchConfig.ts | 7 +- .../graph/buildLinearImageToImageGraph.ts | 5 +- .../graph/buildLinearSDXLImageToImageGraph.ts | 15 +- .../graph/buildLinearSDXLTextToImageGraph.ts | 11 +- .../util/graph/buildLinearTextToImageGraph.ts | 64 +- .../nodes/util/graph/buildNodesGraph.ts | 12 +- .../graph/helpers/craftSDXLStylePrompt.ts | 2 +- .../src/features/nodes/util/graph/metadata.ts | 8 +- .../nodes/util/node/buildCurrentImageNode.ts | 4 +- .../nodes/util/node/buildInvocationNode.ts | 6 +- .../nodes/util/node/buildNotesNode.ts | 4 +- .../util/node/getSortedFilteredFieldNames.ts | 4 +- .../features/nodes/util/node/nodeUpdate.ts | 5 +- .../util/schema/buildFieldInputInstance.ts | 4 +- .../util/schema/buildFieldInputTemplate.ts | 18 +- .../util/schema/buildFieldOutputTemplate.ts | 7 +- .../nodes/util/schema/parseFieldType.ts | 6 +- .../features/nodes/util/schema/parseSchema.ts | 9 +- .../nodes/util/workflow/buildWorkflow.ts | 9 +- .../nodes/util/workflow/migrations.ts | 10 +- .../nodes/util/workflow/validateWorkflow.ts | 13 +- .../Advanced/ParamCFGRescaleMultiplier.tsx | 45 + .../Advanced/ParamClipSkip.tsx | 24 +- .../BoundingBox/ParamBoundingBoxHeight.tsx | 34 +- .../BoundingBox/ParamBoundingBoxSize.tsx | 117 + .../BoundingBox/ParamBoundingBoxWidth.tsx | 34 +- .../ParamCanvasCoherenceMode.tsx | 56 + .../ParamCanvasCoherenceSteps.tsx | 23 +- .../ParamCanvasCoherenceStrength.tsx | 23 +- .../MaskAdjustment/ParamMaskBlur.tsx | 20 +- .../MaskAdjustment/ParamMaskBlurMethod.tsx | 49 + .../Canvas/GenerationModeStatusText.tsx | 0 .../InfillAndScaling/ParamInfillMethod.tsx | 55 + .../InfillAndScaling/ParamInfillOptions.tsx | 17 + .../ParamInfillPatchmatchDownscaleSize.tsx | 25 +- .../InfillAndScaling/ParamInfillTilesize.tsx | 27 +- .../ParamScaleBeforeProcessing.tsx | 52 + .../InfillAndScaling/ParamScaledHeight.tsx | 34 +- .../InfillAndScaling/ParamScaledWidth.tsx | 34 +- .../components/Core/ParamCFGScale.tsx | 71 + .../components/Core/ParamHeight.tsx | 74 + .../components/Core/ParamIterations.tsx | 36 + .../components/Core/ParamNegativePrompt.tsx | 58 + .../components/Core/ParamPositivePrompt.tsx | 82 + .../components/Core/ParamScheduler.tsx | 42 + .../parameters/components/Core/ParamSteps.tsx | 73 + .../parameters/components/Core/ParamWidth.tsx | 73 + .../ImageSize/AspectRatioPreviewWrapper.tsx | 9 + .../ImageSize/AspectRatioSelect.tsx | 51 + .../ImageSize/LockAspectRatioButton.tsx | 27 + .../ImageSize/SetOptimalSizeButton.tsx | 27 + .../ImageSize/SwapDimensionsButton.tsx | 23 + .../components/ImageSize/calculateNewSize.ts | 19 + .../components/ImageSize/constants.ts | 27 + .../parameters/components/ImageSize/types.ts | 15 + .../ImageToImage/ImageToImageFit.tsx | 21 +- .../ImageToImage/ImageToImageStrength.tsx | 51 +- .../ImageToImage/InitialImage.tsx | 2 +- .../ImageToImage/InitialImageDisplay.tsx | 25 +- .../MainModel/ParamMainModelSelect.tsx | 60 + .../Advanced/ParamAdvancedCollapse.tsx | 96 - .../Advanced/ParamCFGRescaleMultiplier.tsx | 58 - .../BoundingBox/ParamBoundingBoxSize.tsx | 122 - .../ParamCanvasCoherenceMode.tsx | 50 - .../MaskAdjustment/ParamMaskBlurMethod.tsx | 44 - .../ParamCompositingSettingsCollapse.tsx | 33 - .../ParamInfillAndScalingCollapse.tsx | 33 - .../InfillAndScaling/ParamInfillMethod.tsx | 50 - .../InfillAndScaling/ParamInfillOptions.tsx | 24 - .../ParamScaleBeforeProcessing.tsx | 47 - .../Parameters/Core/ParamAspectRatio.tsx | 58 - .../Parameters/Core/ParamCFGScale.tsx | 87 - .../Parameters/Core/ParamHeight.tsx | 83 - .../Parameters/Core/ParamIterations.tsx | 89 - .../Core/ParamModelandVAEandScheduler.tsx | 30 - .../Core/ParamNegativeConditioning.tsx | 118 - .../Core/ParamPositiveConditioning.tsx | 140 - .../Parameters/Core/ParamScheduler.tsx | 61 - .../components/Parameters/Core/ParamSize.tsx | 129 - .../components/Parameters/Core/ParamSteps.tsx | 88 - .../components/Parameters/Core/ParamWidth.tsx | 79 - .../HighResFix/ParamHrfCollapse.tsx | 42 - .../Parameters/HighResFix/ParamHrfMethod.tsx | 44 - .../HighResFix/ParamHrfStrength.tsx | 66 - .../Parameters/HighResFix/ParamHrfToggle.tsx | 30 - .../MainModel/ParamMainModelSelect.tsx | 142 - .../Parameters/Noise/ParamCpuNoise.tsx | 31 - .../Parameters/Prompt/ParamPromptArea.tsx | 17 - .../Parameters/Seamless/ParamSeamless.tsx | 32 - .../components/Parameters/Seed/ParamSeed.tsx | 41 - .../Parameters/Seed/ParamSeedFull.tsx | 20 - .../Parameters/SubParametersWrapper.tsx | 40 - .../Symmetry/ParamSymmetryCollapse.tsx | 38 - .../Upscale/ParamRealESRGANModel.tsx | 63 - .../VAEModel/ParamVAEModelSelect.tsx | 105 - .../Parameters/VAEModel/ParamVAEPrecision.tsx | 46 - .../Prompts/PromptOverlayButtonWrapper.tsx | 17 + .../components/Prompts/Prompts.stories.tsx | 20 + .../parameters/components/Prompts/Prompts.tsx | 12 + .../parameters/components/Prompts/theme.ts | 46 + .../Seamless/ParamSeamlessXAxis.tsx | 15 +- .../Seamless/ParamSeamlessYAxis.tsx | 15 +- .../components/Seed/ParamSeedNumberInput.tsx | 37 + .../Seed/ParamSeedRandomize.tsx | 23 +- .../Seed/ParamSeedShuffle.tsx | 21 +- .../Symmetry/ParamSymmetryHorizontal.tsx | 29 +- .../Symmetry/ParamSymmetryToggle.tsx | 16 +- .../Symmetry/ParamSymmetryVertical.tsx | 29 +- .../Upscale/ParamRealESRGANModel.tsx | 83 + .../Upscale/ParamUpscaleSettings.tsx | 63 +- .../VAEModel/ParamVAEModelSelect.tsx | 63 + .../components/VAEModel/ParamVAEPrecision.tsx | 48 + .../parameters/hooks/useIsAllowedToUpscale.ts | 2 +- .../parameters/hooks/usePreselectedImage.ts | 13 +- .../parameters/hooks/useRecallParameters.ts | 34 +- .../src/features/parameters/store/actions.ts | 6 +- .../store/generationPersistDenylist.ts | 2 +- .../parameters/store/generationSlice.ts | 163 +- .../store/postprocessingPersistDenylist.ts | 2 +- .../parameters/store/postprocessingSlice.ts | 19 +- .../features/parameters/types/constants.ts | 54 +- .../parameters/types/parameterSchemas.ts | 14 +- .../util/modelIdToControlNetModelParam.ts | 2 +- .../util/modelIdToIPAdapterModelParams.ts | 2 +- .../util/modelIdToLoRAModelParam.ts | 6 +- .../util/modelIdToMainModelParam.ts | 6 +- .../util/modelIdToSDXLRefinerModelParam.ts | 6 +- .../util/modelIdToT2IAdapterModelParam.ts | 2 +- .../parameters/util/modelIdToVAEModelParam.ts | 6 +- .../CancelCurrentQueueItemButton.tsx | 5 +- .../components/ClearInvocationCacheButton.tsx | 8 +- .../queue/components/ClearQueueButton.tsx | 54 +- .../components/InvocationCacheStatus.tsx | 9 +- .../components/InvokeQueueBackButton.tsx | 92 + .../queue/components/PauseProcessorButton.tsx | 3 +- .../queue/components/PruneQueueButton.tsx | 3 +- .../components/QueueActionsMenuButton.tsx | 102 + .../queue/components/QueueBackButton.tsx | 32 - .../queue/components/QueueButtonTooltip.tsx | 64 +- .../components/QueueControls.stories.tsx | 16 + .../queue/components/QueueControls.tsx | 137 +- .../queue/components/QueueFrontButton.tsx | 23 +- .../QueueList/QueueItemComponent.tsx | 49 +- .../components/QueueList/QueueItemDetail.tsx | 35 +- .../queue/components/QueueList/QueueList.tsx | 33 +- .../QueueList/QueueListComponent.tsx | 7 +- .../components/QueueList/QueueListHeader.tsx | 20 +- .../features/queue/components/QueueStatus.tsx | 1 + .../queue/components/QueueTabContent.tsx | 15 +- .../components/QueueTabQueueControls.tsx | 14 +- .../components/ResumeProcessorButton.tsx | 3 +- .../ToggleInvocationCacheButton.tsx | 14 +- .../queue/components/common/QueueButton.tsx | 15 +- .../components/common/QueueStatusBadge.tsx | 2 +- .../components/common/StatusStatGroup.tsx | 5 +- .../components/common/StatusStatItem.tsx | 14 +- .../src/features/queue/hooks/useClearQueue.ts | 8 +- .../hooks/useIsQueueMutationInProgress.ts | 2 +- .../src/features/queue/hooks/usePruneQueue.ts | 8 +- .../src/features/queue/hooks/useQueueFront.ts | 2 +- .../src/features/queue/store/queueSlice.ts | 3 +- .../sdxl/components/ParamSDXLConcatButton.tsx | 42 - .../ParamSDXLImg2ImgDenoisingStrength.tsx | 54 - .../ParamSDXLNegativeStyleConditioning.tsx | 148 - .../ParamSDXLPositiveStyleConditioning.tsx | 147 - .../sdxl/components/ParamSDXLPromptArea.tsx | 23 - .../components/ParamSDXLRefinerCollapse.tsx | 62 - .../sdxl/components/SDXLConcatLink.tsx | 101 - .../SDXLImageToImageTabCoreParameters.tsx | 77 - .../SDXLImageToImageTabParameters.tsx | 24 - .../ParamSDXLNegativeStylePrompt.tsx | 68 + .../ParamSDXLPositiveStylePrompt.tsx | 58 + .../SDXLPrompts/SDXLConcatButton.tsx | 41 + .../SDXLPrompts/SDXLPrompts.stories.tsx | 20 + .../components/SDXLPrompts/SDXLPrompts.tsx | 21 + .../SDXLRefiner/ParamSDXLRefinerCFGScale.tsx | 70 +- .../ParamSDXLRefinerModelSelect.tsx | 120 +- ...ParamSDXLRefinerNegativeAestheticScore.tsx | 53 +- ...ParamSDXLRefinerPositiveAestheticScore.tsx | 54 +- .../SDXLRefiner/ParamSDXLRefinerScheduler.tsx | 66 +- .../SDXLRefiner/ParamSDXLRefinerStart.tsx | 31 +- .../SDXLRefiner/ParamSDXLRefinerSteps.tsx | 62 +- .../SDXLRefiner/ParamUseSDXLRefiner.tsx | 33 - .../SDXLTextToImageTabParameters.tsx | 24 - .../SDXLUnifiedCanvasTabCoreParameters.tsx | 72 - .../SDXLUnifiedCanvasTabParameters.tsx | 25 - .../web/src/features/sdxl/store/sdxlSlice.ts | 19 +- .../AdvancedSettingsAccordion.stories.tsx | 16 + .../AdvancedSettingsAccordion.tsx | 44 + .../CompositingSettingsAccordion.stories.tsx | 16 + .../CompositingSettingsAccordion.tsx | 70 + .../ControlSettingsAccordion.stories.tsx | 16 + .../ControlSettingsAccordion.tsx} | 59 +- .../GenerationSettingsAccordion.stories.tsx | 16 + .../GenerationSettingsAccordion.tsx | 70 + .../ImageSettingsAccordion.stories.tsx | 16 + .../ImageSettingsAccordion.tsx | 100 + .../RefinerSettingsAccordion.stories.tsx | 16 + .../RefinerSettingsAccordion.tsx | 102 + .../components/HotkeysModal/HotkeysModal.tsx | 130 +- .../HotkeysModal/HotkeysModalItem.tsx | 11 +- .../components/InvokeAILogoComponent.tsx | 13 +- .../system/components/ProgressBar.tsx | 4 +- .../SettingsModal/SettingSwitch.tsx | 57 - .../SettingsClearIntermediates.tsx | 28 +- .../SettingsModal/SettingsLanguageSelect.tsx | 61 + .../SettingsModal/SettingsLogLevelSelect.tsx | 46 + .../SettingsModal/SettingsModal.tsx | 364 +-- .../SettingsModal/SettingsSchedulers.tsx | 44 - .../components/SettingsModal/StyledFlex.tsx | 8 +- .../features/system/components/SiteHeader.tsx | 64 +- .../system/components/StatusIndicator.tsx | 25 +- .../features/system/hooks/useFeatureStatus.ts | 6 +- .../features/system/store/configSelectors.ts | 2 +- .../src/features/system/store/configSlice.ts | 2 +- .../system/store/systemPersistDenylist.ts | 2 +- .../src/features/system/store/systemSlice.ts | 16 +- .../web/src/features/system/store/types.ts | 53 +- .../web/src/features/system/util/makeToast.ts | 2 +- .../ui/components/FloatingGalleryButton.tsx | 10 +- .../FloatingParametersPanelButtons.tsx | 36 +- .../src/features/ui/components/InvokeTabs.tsx | 119 +- .../ui/components/ParametersPanel.tsx | 140 +- .../ImageToImageTabCoreParameters.tsx | 65 - .../ImageToImageTabParameters.tsx | 24 - .../{ImageToImage => }/ImageToImageTab.tsx | 13 +- .../{ModelManager => }/ModelManagerTab.tsx | 5 +- .../components/tabs/{Nodes => }/NodesTab.tsx | 0 .../components/tabs/{Queue => }/QueueTab.tsx | 0 .../ui/components/tabs/ResizeHandle.tsx | 13 +- .../tabs/TextToImage/TextToImageTab.tsx | 8 - .../TextToImageTabCoreParameters.tsx | 61 - .../TextToImage/TextToImageTabParameters.tsx | 26 - ...tToImageTabMain.tsx => TextToImageTab.tsx} | 4 +- .../UnifiedCanvasCoreParameters.tsx | 63 - .../UnifiedCanvas/UnifiedCanvasParameters.tsx | 28 - .../tabs/UnifiedCanvas/UnifiedCanvasTab.tsx | 8 - ...CanvasContent.tsx => UnifiedCanvasTab.tsx} | 6 +- .../web/src/features/ui/hooks/usePanel.ts | 2 +- .../src/features/ui/hooks/usePanelStorage.ts | 2 +- .../features/ui/store/uiPersistDenylist.ts | 2 +- .../web/src/features/ui/store/uiSelectors.ts | 3 +- .../web/src/features/ui/store/uiSlice.ts | 29 +- .../web/src/features/ui/store/uiTypes.ts | 7 +- .../components/WorkflowLibraryButton.tsx | 7 +- .../components/WorkflowLibraryList.tsx | 131 +- .../components/WorkflowLibraryListItem.tsx | 37 +- .../components/WorkflowLibraryListWrapper.tsx | 3 +- .../DownloadWorkflowMenuItem.tsx | 8 +- .../NewWorkflowMenuItem.tsx | 59 +- .../SaveWorkflowAsMenuItem.tsx | 70 +- .../SaveWorkflowMenuItem.tsx | 6 +- .../WorkflowLibraryMenu/SettingsMenuItem.tsx | 6 +- .../UploadWorkflowMenuItem.tsx | 38 +- .../WorkflowLibraryMenu.tsx | 29 +- .../components/WorkflowLibraryModal.tsx | 36 +- .../components/WorkflowLibraryPagination.tsx | 23 +- .../context/WorkflowLibraryModalContext.ts | 2 +- .../hooks/useLoadWorkflowFromFile.tsx | 3 +- .../workflowLibrary/hooks/useSaveWorkflow.ts | 7 +- .../hooks/useSaveWorkflowAs.ts | 3 +- invokeai/frontend/web/src/index.ts | 6 +- invokeai/frontend/web/src/main.tsx | 1 + .../hooks/useMantineMultiSelectStyles.ts | 140 - .../hooks/useMantineSelectStyles.ts | 153 - .../frontend/web/src/mantine-theme/theme.ts | 31 - .../web/src/services/api/constants.ts | 2 +- .../web/src/services/api/endpoints/appInfo.ts | 5 +- .../web/src/services/api/endpoints/boards.ts | 6 +- .../web/src/services/api/endpoints/images.ts | 17 +- .../web/src/services/api/endpoints/models.ts | 27 +- .../web/src/services/api/endpoints/queue.ts | 12 +- .../src/services/api/endpoints/utilities.ts | 3 +- .../src/services/api/endpoints/workflows.ts | 5 +- .../src/services/api/hooks/useBoardName.ts | 4 +- .../src/services/api/hooks/useBoardTotal.ts | 2 +- .../api/hooks/useDebouncedImageWorkflow.ts | 2 +- .../frontend/web/src/services/api/index.ts | 5 +- .../services/api/{schema.d.ts => schema.ts} | 2846 +++++++++++------ .../frontend/web/src/services/api/types.ts | 8 +- .../frontend/web/src/services/api/util.ts | 7 +- .../web/src/services/events/actions.ts | 2 +- .../frontend/web/src/services/events/types.ts | 4 +- .../services/events/util/setEventListeners.ts | 6 +- invokeai/frontend/web/src/theme/colors.ts | 73 + .../frontend/web/src/theme/colors/colors.ts | 27 - .../web/src/theme/components/button.ts | 110 - .../web/src/theme/components/formLabel.ts | 30 - .../web/src/theme/components/heading.ts | 12 - .../frontend/web/src/theme/components/menu.ts | 85 - .../web/src/theme/components/modal.ts | 57 - .../web/src/theme/components/numberInput.ts | 71 - .../web/src/theme/components/popover.ts | 65 - .../web/src/theme/components/select.ts | 35 - .../web/src/theme/components/slider.ts | 61 - .../frontend/web/src/theme/components/tabs.ts | 113 - .../frontend/web/src/theme/components/text.ts | 17 - .../web/src/theme/components/textarea.ts | 54 - .../web/src/theme/{custom => }/reactflow.ts | 9 +- .../src/theme/{components => }/scrollbar.ts | 12 +- invokeai/frontend/web/src/theme/space.ts | 18 + invokeai/frontend/web/src/theme/theme.ts | 238 +- .../src/theme/{themeTypes.d.ts => types.ts} | 10 +- .../src/theme/util/generateColorPalette.ts | 2 +- .../src/theme/util/getInputFilledStyles.ts | 51 + .../src/theme/util/getInputOutlineStyles.ts | 34 +- invokeai/frontend/web/src/theme/util/mode.ts | 3 - invokeai/frontend/web/tsconfig.json | 2 +- invokeai/frontend/web/vite.config.ts | 1 + 889 files changed, 16645 insertions(+), 15595 deletions(-) create mode 100644 invokeai/frontend/web/.storybook/ReduxInit.tsx create mode 100644 invokeai/frontend/web/.unimportedrc.json delete mode 100644 invokeai/frontend/web/src/app/components/GlobalHotkeys.ts delete mode 100644 invokeai/frontend/web/src/app/features.ts create mode 100644 invokeai/frontend/web/src/app/store/nanostores/README.md delete mode 100644 invokeai/frontend/web/src/app/store/nanostores/index.ts create mode 100644 invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.tsx create mode 100644 invokeai/frontend/web/src/common/components/AspectRatioPreview/constants.ts create mode 100644 invokeai/frontend/web/src/common/components/AspectRatioPreview/hooks.ts create mode 100644 invokeai/frontend/web/src/common/components/AspectRatioPreview/types.ts delete mode 100644 invokeai/frontend/web/src/common/components/GreyscaleInvokeAIIcon.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIAlertDialog.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIButton.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAICollapse.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIIconButton.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIInput.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIMantineInput.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIMantineMultiSelect.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIMantineSelect.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithDescription.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithTooltip.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAINumberInput.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIOption.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIPopover.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAIScrollArea.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAISelect.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAISimpleCheckbox.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAISimpleMenu.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAISlider.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAISwitch.tsx delete mode 100644 invokeai/frontend/web/src/common/components/IAITextarea.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvAccordion/InvAccordion.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvAccordion/InvAccordionButton.tsx rename invokeai/frontend/web/src/{theme/components/accordion.ts => common/components/InvAccordion/theme.ts} (62%) create mode 100644 invokeai/frontend/web/src/common/components/InvAccordion/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvAccordion/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvAlertDialog/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvAlertDialog/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvAutosizeTextarea/InvAutosizeTextarea.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvAutosizeTextarea/InvTextarea.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvAutosizeTextarea/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvAutosizeTextarea/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvBadge/InvBadge.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvBadge/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvBadge/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvBadge/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvButton/InvButton.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvButton/InvButton.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvButton/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvButton/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvButtonGroup/InvButtonGroup.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvButtonGroup/InvButtonGroup.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvButtonGroup/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvCard/InvCard.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvCard/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvCard/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvCard/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvCheckbox/InvCheckbox.stories.tsx rename invokeai/frontend/web/src/{theme/components/checkbox.ts => common/components/InvCheckbox/theme.ts} (59%) create mode 100644 invokeai/frontend/web/src/common/components/InvCheckbox/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvCheckbox/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvConfirmationAlertDialog/InvConfirmationAlertDialog.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvConfirmationAlertDialog/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvContextMenu/InvContextMenu.stories.tsx rename invokeai/frontend/web/src/common/components/{IAIContextMenu.tsx => InvContextMenu/InvContextMenu.tsx} (71%) create mode 100644 invokeai/frontend/web/src/common/components/InvControl/InvControl.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvControl/InvControl.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvControl/InvControlGroup.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvControl/InvLabel.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvControl/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvControl/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvEditable/InvEditable.stories.tsx rename invokeai/frontend/web/src/{theme/components/editable.ts => common/components/InvEditable/theme.ts} (79%) create mode 100644 invokeai/frontend/web/src/common/components/InvEditable/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvEditable/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvExpander/InvExpander.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvExpander/InvExpander.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvExpander/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvHeading/InvHeading.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvHeading/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvHeading/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvHeading/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvIconButton/InvIconButton.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvIconButton/InvIconButton.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvIconButton/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvInput/InvInput.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvInput/InvInput.tsx rename invokeai/frontend/web/src/{theme/components/input.ts => common/components/InvInput/theme.ts} (54%) create mode 100644 invokeai/frontend/web/src/common/components/InvInput/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvMenu/InvMenu.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvMenu/InvMenuItem.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvMenu/InvMenuList.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvMenu/constants.ts create mode 100644 invokeai/frontend/web/src/common/components/InvMenu/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvMenu/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvMenu/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvModal/InvModal.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvModal/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvModal/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvModal/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvNumberInput/InvNumberInput.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvNumberInput/InvNumberInput.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvNumberInput/InvNumberInputField.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvNumberInput/InvNumberInputStepper.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvNumberInput/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvNumberInput/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvPopover/InvPopover.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvPopover/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvPopover/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvPopover/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvProgress/InvProgress.stories.tsx rename invokeai/frontend/web/src/{theme/components/progress.ts => common/components/InvProgress/theme.ts} (80%) create mode 100644 invokeai/frontend/web/src/common/components/InvProgress/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvProgress/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvRangeSlider/InvRangeSlider.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvRangeSlider/InvRangeSlider.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvRangeSlider/InvRangeSliderMark.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvRangeSlider/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvRangeSlider/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/CustomMenuList.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/CustomOption.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/InvSelect.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/InvSelect.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/InvSelectFallback.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSelect/useGroupedModelInvSelect.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSingleAccordion/InvSingleAccordion.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSingleAccordion/InvSingleAccordion.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSingleAccordion/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSkeleton/InvSkeleton.stories.tsx rename invokeai/frontend/web/src/{theme/components/skeleton.ts => common/components/InvSkeleton/theme.ts} (54%) create mode 100644 invokeai/frontend/web/src/common/components/InvSkeleton/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSkeleton/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSlider/InvSlider.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSlider/InvSlider.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSlider/InvSliderMark.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvSlider/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSlider/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSwitch/InvSwitch.stories.tsx rename invokeai/frontend/web/src/{theme/components/switch.ts => common/components/InvSwitch/theme.ts} (63%) create mode 100644 invokeai/frontend/web/src/common/components/InvSwitch/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvSwitch/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvTabs/InvTab.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvTabs/InvTabs.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvTabs/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvTabs/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvTabs/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvText/InvText.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvText/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvText/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvText/wrapper.ts create mode 100644 invokeai/frontend/web/src/common/components/InvTextarea/InvTextarea.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvTextarea/InvTextarea.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvTextarea/theme.ts create mode 100644 invokeai/frontend/web/src/common/components/InvTextarea/types.ts create mode 100644 invokeai/frontend/web/src/common/components/InvTooltip/InvTooltip.stories.tsx create mode 100644 invokeai/frontend/web/src/common/components/InvTooltip/InvTooltip.tsx rename invokeai/frontend/web/src/{theme/components/tooltip.ts => common/components/InvTooltip/theme.ts} (58%) create mode 100644 invokeai/frontend/web/src/common/components/InvTooltip/types.ts rename invokeai/frontend/web/src/{features/nodes/components/sidePanel => common/components/OverlayScrollbars}/ScrollableContent.tsx (85%) create mode 100644 invokeai/frontend/web/src/common/components/OverlayScrollbars/constants.ts rename invokeai/frontend/web/src/{theme/css => common/components/OverlayScrollbars}/overlayscrollbars.css (86%) create mode 100644 invokeai/frontend/web/src/common/hooks/useGlobalModifiers.ts create mode 100644 invokeai/frontend/web/src/features/controlAdapters/hooks/useControlAdapterModelEntities.ts create mode 100644 invokeai/frontend/web/src/features/dynamicPrompts/components/DynamicPromptsPreviewModal.tsx delete mode 100644 invokeai/frontend/web/src/features/dynamicPrompts/components/ParamDynamicPromptsCollapse.tsx create mode 100644 invokeai/frontend/web/src/features/dynamicPrompts/components/ShowDynamicPromptsPreviewButton.tsx create mode 100644 invokeai/frontend/web/src/features/dynamicPrompts/hooks/useDynamicPromptsModal.ts create mode 100644 invokeai/frontend/web/src/features/embedding/AddEmbeddingButton.tsx create mode 100644 invokeai/frontend/web/src/features/embedding/EmbeddingPopover.tsx create mode 100644 invokeai/frontend/web/src/features/embedding/EmbeddingSelect.stories.tsx create mode 100644 invokeai/frontend/web/src/features/embedding/EmbeddingSelect.tsx delete mode 100644 invokeai/frontend/web/src/features/embedding/components/AddEmbeddingButton.tsx delete mode 100644 invokeai/frontend/web/src/features/embedding/components/ParamEmbeddingPopover.tsx create mode 100644 invokeai/frontend/web/src/features/embedding/types.ts create mode 100644 invokeai/frontend/web/src/features/embedding/usePrompt.ts create mode 100644 invokeai/frontend/web/src/features/hrf/components/HrfSettings.tsx create mode 100644 invokeai/frontend/web/src/features/hrf/components/ParamHrfMethod.tsx create mode 100644 invokeai/frontend/web/src/features/hrf/components/ParamHrfStrength.tsx create mode 100644 invokeai/frontend/web/src/features/hrf/components/ParamHrfToggle.tsx create mode 100644 invokeai/frontend/web/src/features/hrf/store/hrfSlice.ts create mode 100644 invokeai/frontend/web/src/features/lora/components/LoRACard.tsx rename invokeai/frontend/web/src/features/lora/components/{ParamLoraList.tsx => LoRAList.tsx} (53%) create mode 100644 invokeai/frontend/web/src/features/lora/components/LoRASelect.tsx delete mode 100644 invokeai/frontend/web/src/features/lora/components/ParamLora.tsx delete mode 100644 invokeai/frontend/web/src/features/lora/components/ParamLoraCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/lora/components/ParamLoraSelect.tsx create mode 100644 invokeai/frontend/web/src/features/lora/components/styles.ts create mode 100644 invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsButton.tsx create mode 100644 invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsIconButton.tsx create mode 100644 invokeai/frontend/web/src/features/modelManager/components/SyncModels/useSyncModels.ts delete mode 100644 invokeai/frontend/web/src/features/modelManager/subpanels/ModelManagerSettingsPanel/SyncModelsButton.tsx delete mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/AddNodePopover/AddNodePopoverSelectItem.tsx delete mode 100644 invokeai/frontend/web/src/features/nodes/components/flow/panels/TopLeftPanel/TopLeftPanel.tsx rename invokeai/frontend/web/src/features/nodes/components/flow/panels/{TopCenterPanel => TopRightPanel}/ReloadSchemaButton.tsx (88%) delete mode 100644 invokeai/frontend/web/src/features/nodes/hooks/useDownloadWorkflow.ts create mode 100644 invokeai/frontend/web/src/features/parameters/components/Advanced/ParamCFGRescaleMultiplier.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Advanced/ParamClipSkip.tsx (71%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/BoundingBox/ParamBoundingBoxHeight.tsx (76%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Canvas/BoundingBox/ParamBoundingBoxSize.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/BoundingBox/ParamBoundingBoxWidth.tsx (76%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Canvas/Compositing/CoherencePass/ParamCanvasCoherenceMode.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/Compositing/CoherencePass/ParamCanvasCoherenceSteps.tsx (67%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/Compositing/CoherencePass/ParamCanvasCoherenceStrength.tsx (68%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/Compositing/MaskAdjustment/ParamMaskBlur.tsx (64%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Canvas/Compositing/MaskAdjustment/ParamMaskBlurMethod.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/GenerationModeStatusText.tsx (100%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamInfillMethod.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamInfillOptions.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/InfillAndScaling/ParamInfillPatchmatchDownscaleSize.tsx (76%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/InfillAndScaling/ParamInfillTilesize.tsx (73%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamScaleBeforeProcessing.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/InfillAndScaling/ParamScaledHeight.tsx (74%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Canvas/InfillAndScaling/ParamScaledWidth.tsx (74%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamCFGScale.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamHeight.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamIterations.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamNegativePrompt.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamPositivePrompt.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamScheduler.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamSteps.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Core/ParamWidth.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/AspectRatioPreviewWrapper.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/AspectRatioSelect.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/LockAspectRatioButton.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/SetOptimalSizeButton.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/SwapDimensionsButton.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/calculateNewSize.ts create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/constants.ts create mode 100644 invokeai/frontend/web/src/features/parameters/components/ImageSize/types.ts rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/ImageToImage/ImageToImageFit.tsx (59%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/ImageToImage/ImageToImageStrength.tsx (55%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/ImageToImage/InitialImage.tsx (99%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/ImageToImage/InitialImageDisplay.tsx (87%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/MainModel/ParamMainModelSelect.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Advanced/ParamAdvancedCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Advanced/ParamCFGRescaleMultiplier.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/BoundingBox/ParamBoundingBoxSize.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/Compositing/CoherencePass/ParamCanvasCoherenceMode.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/Compositing/MaskAdjustment/ParamMaskBlurMethod.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/Compositing/ParamCompositingSettingsCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/InfillAndScaling/ParamInfillAndScalingCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/InfillAndScaling/ParamInfillMethod.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/InfillAndScaling/ParamInfillOptions.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Canvas/InfillAndScaling/ParamScaleBeforeProcessing.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamAspectRatio.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamCFGScale.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamHeight.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamIterations.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamModelandVAEandScheduler.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamNegativeConditioning.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamPositiveConditioning.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamScheduler.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamSize.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamSteps.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Core/ParamWidth.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/HighResFix/ParamHrfCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/HighResFix/ParamHrfMethod.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/HighResFix/ParamHrfStrength.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/HighResFix/ParamHrfToggle.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/MainModel/ParamMainModelSelect.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Noise/ParamCpuNoise.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Prompt/ParamPromptArea.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Seamless/ParamSeamless.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Seed/ParamSeed.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Seed/ParamSeedFull.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/SubParametersWrapper.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Upscale/ParamRealESRGANModel.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/VAEModel/ParamVAEModelSelect.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/VAEModel/ParamVAEPrecision.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Prompts/PromptOverlayButtonWrapper.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Prompts/Prompts.stories.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Prompts/Prompts.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/Prompts/theme.ts rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Seamless/ParamSeamlessXAxis.tsx (70%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Seamless/ParamSeamlessYAxis.tsx (70%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedNumberInput.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Seed/ParamSeedRandomize.tsx (54%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Seed/ParamSeedShuffle.tsx (70%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Symmetry/ParamSymmetryHorizontal.tsx (63%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Symmetry/ParamSymmetryToggle.tsx (57%) rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Symmetry/ParamSymmetryVertical.tsx (63%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/Upscale/ParamRealESRGANModel.tsx rename invokeai/frontend/web/src/features/parameters/components/{Parameters => }/Upscale/ParamUpscaleSettings.tsx (57%) create mode 100644 invokeai/frontend/web/src/features/parameters/components/VAEModel/ParamVAEModelSelect.tsx create mode 100644 invokeai/frontend/web/src/features/parameters/components/VAEModel/ParamVAEPrecision.tsx create mode 100644 invokeai/frontend/web/src/features/queue/components/InvokeQueueBackButton.tsx create mode 100644 invokeai/frontend/web/src/features/queue/components/QueueActionsMenuButton.tsx delete mode 100644 invokeai/frontend/web/src/features/queue/components/QueueBackButton.tsx create mode 100644 invokeai/frontend/web/src/features/queue/components/QueueControls.stories.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/ParamSDXLConcatButton.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/ParamSDXLImg2ImgDenoisingStrength.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/ParamSDXLNegativeStyleConditioning.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/ParamSDXLPositiveStyleConditioning.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/ParamSDXLPromptArea.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/ParamSDXLRefinerCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLConcatLink.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLImageToImageTabCoreParameters.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLImageToImageTabParameters.tsx create mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLPrompts/ParamSDXLNegativeStylePrompt.tsx create mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLPrompts/ParamSDXLPositiveStylePrompt.tsx create mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLPrompts/SDXLConcatButton.tsx create mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLPrompts/SDXLPrompts.stories.tsx create mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLPrompts/SDXLPrompts.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamUseSDXLRefiner.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLTextToImageTabParameters.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLUnifiedCanvasTabCoreParameters.tsx delete mode 100644 invokeai/frontend/web/src/features/sdxl/components/SDXLUnifiedCanvasTabParameters.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/AdvancedSettingsAccordion/AdvancedSettingsAccordion.stories.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/AdvancedSettingsAccordion/AdvancedSettingsAccordion.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/CompositingSettingsAccordion/CompositingSettingsAccordion.stories.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/CompositingSettingsAccordion/CompositingSettingsAccordion.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/ControlSettingsAccordion/ControlSettingsAccordion.stories.tsx rename invokeai/frontend/web/src/features/{controlAdapters/components/ControlAdaptersCollapse.tsx => settingsAccordions/ControlSettingsAccordion/ControlSettingsAccordion.tsx} (74%) create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/GenerationSettingsAccordion/GenerationSettingsAccordion.stories.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/GenerationSettingsAccordion/GenerationSettingsAccordion.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/ImageSettingsAccordion/ImageSettingsAccordion.stories.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/ImageSettingsAccordion/ImageSettingsAccordion.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/RefinerSettingsAccordion/RefinerSettingsAccordion.stories.tsx create mode 100644 invokeai/frontend/web/src/features/settingsAccordions/RefinerSettingsAccordion/RefinerSettingsAccordion.tsx delete mode 100644 invokeai/frontend/web/src/features/system/components/SettingsModal/SettingSwitch.tsx create mode 100644 invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsLanguageSelect.tsx create mode 100644 invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsLogLevelSelect.tsx delete mode 100644 invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsSchedulers.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/ImageToImage/ImageToImageTabCoreParameters.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/ImageToImage/ImageToImageTabParameters.tsx rename invokeai/frontend/web/src/features/ui/components/tabs/{ImageToImage => }/ImageToImageTab.tsx (89%) rename invokeai/frontend/web/src/features/ui/components/tabs/{ModelManager => }/ModelManagerTab.tsx (96%) rename invokeai/frontend/web/src/features/ui/components/tabs/{Nodes => }/NodesTab.tsx (100%) rename invokeai/frontend/web/src/features/ui/components/tabs/{Queue => }/QueueTab.tsx (100%) delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/TextToImage/TextToImageTab.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/TextToImage/TextToImageTabCoreParameters.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/TextToImage/TextToImageTabParameters.tsx rename invokeai/frontend/web/src/features/ui/components/tabs/{TextToImage/TextToImageTabMain.tsx => TextToImageTab.tsx} (87%) delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/UnifiedCanvas/UnifiedCanvasCoreParameters.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/UnifiedCanvas/UnifiedCanvasParameters.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/UnifiedCanvas/UnifiedCanvasTab.tsx rename invokeai/frontend/web/src/features/ui/components/tabs/{UnifiedCanvas/UnifiedCanvasContent.tsx => UnifiedCanvasTab.tsx} (89%) delete mode 100644 invokeai/frontend/web/src/mantine-theme/hooks/useMantineMultiSelectStyles.ts delete mode 100644 invokeai/frontend/web/src/mantine-theme/hooks/useMantineSelectStyles.ts delete mode 100644 invokeai/frontend/web/src/mantine-theme/theme.ts rename invokeai/frontend/web/src/services/api/{schema.d.ts => schema.ts} (77%) create mode 100644 invokeai/frontend/web/src/theme/colors.ts delete mode 100644 invokeai/frontend/web/src/theme/colors/colors.ts delete mode 100644 invokeai/frontend/web/src/theme/components/button.ts delete mode 100644 invokeai/frontend/web/src/theme/components/formLabel.ts delete mode 100644 invokeai/frontend/web/src/theme/components/heading.ts delete mode 100644 invokeai/frontend/web/src/theme/components/menu.ts delete mode 100644 invokeai/frontend/web/src/theme/components/modal.ts delete mode 100644 invokeai/frontend/web/src/theme/components/numberInput.ts delete mode 100644 invokeai/frontend/web/src/theme/components/popover.ts delete mode 100644 invokeai/frontend/web/src/theme/components/select.ts delete mode 100644 invokeai/frontend/web/src/theme/components/slider.ts delete mode 100644 invokeai/frontend/web/src/theme/components/tabs.ts delete mode 100644 invokeai/frontend/web/src/theme/components/text.ts delete mode 100644 invokeai/frontend/web/src/theme/components/textarea.ts rename invokeai/frontend/web/src/theme/{custom => }/reactflow.ts (66%) rename invokeai/frontend/web/src/theme/{components => }/scrollbar.ts (73%) create mode 100644 invokeai/frontend/web/src/theme/space.ts rename invokeai/frontend/web/src/theme/{themeTypes.d.ts => types.ts} (72%) create mode 100644 invokeai/frontend/web/src/theme/util/getInputFilledStyles.ts delete mode 100644 invokeai/frontend/web/src/theme/util/mode.ts diff --git a/invokeai/frontend/web/.eslintrc.js b/invokeai/frontend/web/.eslintrc.js index fe9d890a66..28177d3de1 100644 --- a/invokeai/frontend/web/.eslintrc.js +++ b/invokeai/frontend/web/.eslintrc.js @@ -28,12 +28,14 @@ module.exports = { 'i18next', 'path', 'unused-imports', + 'simple-import-sort', + 'eslint-plugin-import', ], root: true, rules: { 'path/no-relative-imports': ['error', { maxDepth: 0 }], curly: 'error', - 'i18next/no-literal-string': 2, + 'i18next/no-literal-string': 'warn', 'react/jsx-no-bind': ['error', { allowBind: true }], 'react/jsx-curly-brace-presence': [ 'error', @@ -43,6 +45,7 @@ module.exports = { 'no-var': 'error', 'brace-style': 'error', 'prefer-template': 'error', + 'import/no-duplicates': 'error', radix: 'error', 'space-before-blocks': 'error', 'import/prefer-default-export': 'off', @@ -65,7 +68,26 @@ module.exports = { allowSingleExtends: true, }, ], + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + prefer: 'type-imports', + fixStyle: 'separate-type-imports', + disallowTypeAnnotations: true, + }, + ], + '@typescript-eslint/no-import-type-side-effects': 'error', + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error', }, + overrides: [ + { + files: ['*.stories.tsx'], + rules: { + 'i18next/no-literal-string': 'off', + }, + }, + ], settings: { react: { version: 'detect', diff --git a/invokeai/frontend/web/.prettierignore b/invokeai/frontend/web/.prettierignore index 253908a6a8..5317daea68 100644 --- a/invokeai/frontend/web/.prettierignore +++ b/invokeai/frontend/web/.prettierignore @@ -12,4 +12,5 @@ index.html src/services/api/schema.d.ts static/ src/theme/css/overlayscrollbars.css +src/theme_/css/overlayscrollbars.css pnpm-lock.yaml diff --git a/invokeai/frontend/web/.storybook/ReduxInit.tsx b/invokeai/frontend/web/.storybook/ReduxInit.tsx new file mode 100644 index 0000000000..36583ca121 --- /dev/null +++ b/invokeai/frontend/web/.storybook/ReduxInit.tsx @@ -0,0 +1,23 @@ +import { PropsWithChildren, useEffect } from 'react'; +import { modelChanged } from '../src/features/parameters/store/generationSlice'; +import { useAppDispatch } from '../src/app/store/storeHooks'; +import { useGlobalModifiersInit } from '../src/common/hooks/useGlobalModifiers'; +/** + * Initializes some state for storybook. Must be in a different component + * so that it is run inside the redux context. + */ +export const ReduxInit = (props: PropsWithChildren) => { + const dispatch = useAppDispatch(); + useGlobalModifiersInit(); + useEffect(() => { + dispatch( + modelChanged({ + model_name: 'test_model', + base_model: 'sd-1', + model_type: 'main', + }) + ); + }, []); + + return props.children; +}; diff --git a/invokeai/frontend/web/.storybook/main.ts b/invokeai/frontend/web/.storybook/main.ts index 73e1a3b6d8..1663839903 100644 --- a/invokeai/frontend/web/.storybook/main.ts +++ b/invokeai/frontend/web/.storybook/main.ts @@ -6,6 +6,7 @@ const config: StorybookConfig = { '@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-interactions', + '@storybook/addon-storysource', ], framework: { name: '@storybook/react-vite', diff --git a/invokeai/frontend/web/.storybook/preview.tsx b/invokeai/frontend/web/.storybook/preview.tsx index 3f70f92d71..3d5c8d8493 100644 --- a/invokeai/frontend/web/.storybook/preview.tsx +++ b/invokeai/frontend/web/.storybook/preview.tsx @@ -1,16 +1,17 @@ import { Preview } from '@storybook/react'; import { themes } from '@storybook/theming'; import i18n from 'i18next'; -import React from 'react'; import { initReactI18next } from 'react-i18next'; import { Provider } from 'react-redux'; -import GlobalHotkeys from '../src/app/components/GlobalHotkeys'; import ThemeLocaleProvider from '../src/app/components/ThemeLocaleProvider'; +import { $baseUrl } from '../src/app/store/nanostores/baseUrl'; import { createStore } from '../src/app/store/store'; +import { Container } from '@chakra-ui/react'; // TODO: Disabled for IDE performance issues with our translation JSON // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import translationEN from '../public/locales/en.json'; +import { ReduxInit } from './ReduxInit'; i18n.use(initReactI18next).init({ lng: 'en', @@ -25,17 +26,21 @@ i18n.use(initReactI18next).init({ }); const store = createStore(undefined, false); +$baseUrl.set('http://localhost:9090'); const preview: Preview = { decorators: [ - (Story) => ( - - - - - - - ), + (Story) => { + return ( + + + + + + + + ); + }, ], parameters: { docs: { diff --git a/invokeai/frontend/web/.unimportedrc.json b/invokeai/frontend/web/.unimportedrc.json new file mode 100644 index 0000000000..733e958861 --- /dev/null +++ b/invokeai/frontend/web/.unimportedrc.json @@ -0,0 +1,15 @@ +{ + "entry": ["src/main.tsx"], + "extensions": [".ts", ".tsx"], + "ignorePatterns": [ + "**/node_modules/**", + "dist/**", + "public/**", + "**/*.stories.tsx", + "config/**" + ], + "ignoreUnresolved": [], + "ignoreUnimported": ["src/i18.d.ts", "vite.config.ts", "src/vite-env.d.ts"], + "respectGitignore": true, + "ignoreUnused": [] +} diff --git a/invokeai/frontend/web/config/common.ts b/invokeai/frontend/web/config/common.ts index 4470224225..fd559cabd1 100644 --- a/invokeai/frontend/web/config/common.ts +++ b/invokeai/frontend/web/config/common.ts @@ -1,6 +1,6 @@ import react from '@vitejs/plugin-react-swc'; import { visualizer } from 'rollup-plugin-visualizer'; -import { PluginOption, UserConfig } from 'vite'; +import type { PluginOption, UserConfig } from 'vite'; import eslint from 'vite-plugin-eslint'; import tsconfigPaths from 'vite-tsconfig-paths'; diff --git a/invokeai/frontend/web/config/vite.app.config.ts b/invokeai/frontend/web/config/vite.app.config.ts index 958313402a..694e37cada 100644 --- a/invokeai/frontend/web/config/vite.app.config.ts +++ b/invokeai/frontend/web/config/vite.app.config.ts @@ -1,4 +1,5 @@ -import { UserConfig } from 'vite'; +import type { UserConfig } from 'vite'; + import { commonPlugins } from './common'; export const appConfig: UserConfig = { diff --git a/invokeai/frontend/web/config/vite.package.config.ts b/invokeai/frontend/web/config/vite.package.config.ts index d605b51c67..d6895c19e2 100644 --- a/invokeai/frontend/web/config/vite.package.config.ts +++ b/invokeai/frontend/web/config/vite.package.config.ts @@ -1,7 +1,8 @@ import path from 'path'; -import { UserConfig } from 'vite'; -import dts from 'vite-plugin-dts'; +import type { UserConfig } from 'vite'; import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'; +import dts from 'vite-plugin-dts'; + import { commonPlugins } from './common'; export const packageConfig: UserConfig = { diff --git a/invokeai/frontend/web/package.json b/invokeai/frontend/web/package.json index df40d0646f..c4830a042f 100644 --- a/invokeai/frontend/web/package.json +++ b/invokeai/frontend/web/package.json @@ -31,13 +31,17 @@ "lint": "concurrently -g -n eslint,prettier,tsc,madge -c cyan,green,magenta,yellow \"pnpm run lint:eslint\" \"pnpm run lint:prettier\" \"pnpm run lint:tsc\" \"pnpm run lint:madge\"", "fix": "eslint --fix . && prettier --log-level warn --write .", "preinstall": "npx only-allow pnpm", - "postinstall": "patch-package && pnpm run theme", + "postinstall": "pnpm run theme", "theme": "chakra-cli tokens src/theme/theme.ts", "theme:watch": "chakra-cli tokens src/theme/theme.ts --watch", "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" + "build-storybook": "storybook build", + "unimported": "npx unimported" }, "madge": { + "excludeRegExp": [ + "^index.ts$" + ], "detectiveOptions": { "ts": { "skipTypeImports": true @@ -53,6 +57,7 @@ "@chakra-ui/layout": "^2.3.1", "@chakra-ui/portal": "^2.1.0", "@chakra-ui/react": "^2.8.2", + "@chakra-ui/react-use-size": "^2.1.0", "@chakra-ui/styled-system": "^2.9.2", "@chakra-ui/theme-tools": "^2.1.2", "@dagrejs/graphlib": "^2.1.13", @@ -61,14 +66,11 @@ "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@fontsource-variable/inter": "^5.0.16", - "@mantine/core": "^6.0.19", "@mantine/form": "^6.0.19", - "@mantine/hooks": "^6.0.19", "@nanostores/react": "^0.7.1", "@reduxjs/toolkit": "^2.0.1", "@roarr/browser-log-writer": "^1.3.0", - "@storybook/manager-api": "^7.6.4", - "@storybook/theming": "^7.6.4", + "chakra-react-select": "^4.7.6", "compare-versions": "^6.1.0", "dateformat": "^5.0.3", "framer-motion": "^10.16.15", @@ -81,7 +83,6 @@ "new-github-issue-url": "^1.0.0", "overlayscrollbars": "^2.4.5", "overlayscrollbars-react": "^0.5.3", - "patch-package": "^8.0.0", "query-string": "^8.1.0", "react": "^18.2.0", "react-colorful": "^5.6.1", @@ -94,6 +95,8 @@ "react-konva": "^18.2.10", "react-redux": "^9.0.2", "react-resizable-panels": "^0.0.55", + "react-select": "5.7.7", + "react-textarea-autosize": "^8.5.3", "react-use": "^17.4.2", "react-virtuoso": "^4.6.2", "reactflow": "^11.10.1", @@ -118,13 +121,17 @@ }, "devDependencies": { "@chakra-ui/cli": "^2.4.1", + "@storybook/addon-docs": "^7.6.4", "@storybook/addon-essentials": "^7.6.4", "@storybook/addon-interactions": "^7.6.4", "@storybook/addon-links": "^7.6.4", + "@storybook/addon-storysource": "^7.6.4", "@storybook/blocks": "^7.6.4", + "@storybook/manager-api": "^7.6.4", "@storybook/react": "^7.6.4", "@storybook/react-vite": "^7.6.4", "@storybook/test": "^7.6.4", + "@storybook/theming": "^7.6.4", "@types/dateformat": "^5.0.2", "@types/lodash-es": "^4.17.12", "@types/node": "^20.9.0", @@ -138,9 +145,11 @@ "eslint": "^8.55.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-i18next": "^6.0.3", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-path": "^1.2.2", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-storybook": "^0.6.15", "eslint-plugin-unused-imports": "^3.0.0", "madge": "^6.1.0", diff --git a/invokeai/frontend/web/pnpm-lock.yaml b/invokeai/frontend/web/pnpm-lock.yaml index f4aecf13b8..fb48dc5d33 100644 --- a/invokeai/frontend/web/pnpm-lock.yaml +++ b/invokeai/frontend/web/pnpm-lock.yaml @@ -20,6 +20,9 @@ dependencies: '@chakra-ui/react': specifier: ^2.8.2 version: 2.8.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.42)(framer-motion@10.16.15)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/react-use-size': + specifier: ^2.1.0 + version: 2.1.0(react@18.2.0) '@chakra-ui/styled-system': specifier: ^2.9.2 version: 2.9.2 @@ -44,15 +47,9 @@ dependencies: '@fontsource-variable/inter': specifier: ^5.0.16 version: 5.0.16 - '@mantine/core': - specifier: ^6.0.19 - version: 6.0.21(@emotion/react@11.11.1)(@mantine/hooks@6.0.21)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0) '@mantine/form': specifier: ^6.0.19 version: 6.0.21(react@18.2.0) - '@mantine/hooks': - specifier: ^6.0.19 - version: 6.0.21(react@18.2.0) '@nanostores/react': specifier: ^0.7.1 version: 0.7.1(nanostores@0.9.5)(react@18.2.0) @@ -62,12 +59,9 @@ dependencies: '@roarr/browser-log-writer': specifier: ^1.3.0 version: 1.3.0 - '@storybook/manager-api': - specifier: ^7.6.4 - version: 7.6.4(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': - specifier: ^7.6.4 - version: 7.6.4(react-dom@18.2.0)(react@18.2.0) + chakra-react-select: + specifier: ^4.7.6 + version: 4.7.6(@chakra-ui/form-control@2.2.0)(@chakra-ui/icon@3.2.0)(@chakra-ui/layout@2.3.1)(@chakra-ui/media-query@3.3.0)(@chakra-ui/menu@2.2.1)(@chakra-ui/spinner@2.1.0)(@chakra-ui/system@2.6.2)(@emotion/react@11.11.1)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0) compare-versions: specifier: ^6.1.0 version: 6.1.0 @@ -104,9 +98,6 @@ dependencies: overlayscrollbars-react: specifier: ^0.5.3 version: 0.5.3(overlayscrollbars@2.4.5)(react@18.2.0) - patch-package: - specifier: ^8.0.0 - version: 8.0.0 query-string: specifier: ^8.1.0 version: 8.1.0 @@ -143,6 +134,12 @@ dependencies: react-resizable-panels: specifier: ^0.0.55 version: 0.0.55(react-dom@18.2.0)(react@18.2.0) + react-select: + specifier: 5.7.7 + version: 5.7.7(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0) + react-textarea-autosize: + specifier: ^8.5.3 + version: 8.5.3(@types/react@18.2.42)(react@18.2.0) react-use: specifier: ^17.4.2 version: 17.4.2(react-dom@18.2.0)(react@18.2.0) @@ -190,6 +187,9 @@ devDependencies: '@chakra-ui/cli': specifier: ^2.4.1 version: 2.4.1 + '@storybook/addon-docs': + specifier: ^7.6.4 + version: 7.6.4(@types/react-dom@18.2.17)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0) '@storybook/addon-essentials': specifier: ^7.6.4 version: 7.6.4(@types/react-dom@18.2.17)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0) @@ -199,9 +199,15 @@ devDependencies: '@storybook/addon-links': specifier: ^7.6.4 version: 7.6.4(react@18.2.0) + '@storybook/addon-storysource': + specifier: ^7.6.4 + version: 7.6.4 '@storybook/blocks': specifier: ^7.6.4 version: 7.6.4(@types/react-dom@18.2.17)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': + specifier: ^7.6.4 + version: 7.6.4(react-dom@18.2.0)(react@18.2.0) '@storybook/react': specifier: ^7.6.4 version: 7.6.4(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) @@ -211,6 +217,9 @@ devDependencies: '@storybook/test': specifier: ^7.6.4 version: 7.6.4 + '@storybook/theming': + specifier: ^7.6.4 + version: 7.6.4(react-dom@18.2.0)(react@18.2.0) '@types/dateformat': specifier: ^5.0.2 version: 5.0.2 @@ -250,6 +259,9 @@ devDependencies: eslint-plugin-i18next: specifier: ^6.0.3 version: 6.0.3 + eslint-plugin-import: + specifier: ^2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) eslint-plugin-path: specifier: ^1.2.2 version: 1.2.2(eslint@8.55.0) @@ -259,6 +271,9 @@ devDependencies: eslint-plugin-react-hooks: specifier: ^4.6.0 version: 4.6.0(eslint@8.55.0) + eslint-plugin-simple-import-sort: + specifier: ^10.0.0 + version: 10.0.0(eslint@8.55.0) eslint-plugin-storybook: specifier: ^0.6.15 version: 0.6.15(eslint@8.55.0)(typescript@5.3.3) @@ -597,6 +612,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.5 + dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} @@ -3355,17 +3371,6 @@ packages: '@floating-ui/core': 1.5.0 '@floating-ui/utils': 0.1.6 - /@floating-ui/react-dom@1.3.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/dom': 1.5.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@floating-ui/react-dom@2.0.4(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==} peerDependencies: @@ -3377,19 +3382,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@floating-ui/react@0.19.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-JyNk4A0Ezirq8FlXECvRtQOX/iBe5Ize0W/pLkrZjfHW9GUV7Xnq6zm6fyZuQzaHHqEnVizmvlA96e1/CkZv+w==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/react-dom': 1.3.0(react-dom@18.2.0)(react@18.2.0) - aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tabbable: 6.2.0 - dev: false - /@floating-ui/utils@0.1.6: resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} @@ -3548,27 +3540,6 @@ packages: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: true - /@mantine/core@6.0.21(@emotion/react@11.11.1)(@mantine/hooks@6.0.21)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Kx4RrRfv0I+cOCIcsq/UA2aWcYLyXgW3aluAuW870OdXnbII6qg7RW28D+r9D76SHPxWFKwIKwmcucAG08Divg==} - peerDependencies: - '@mantine/hooks': 6.0.21 - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/react': 0.19.2(react-dom@18.2.0)(react@18.2.0) - '@mantine/hooks': 6.0.21(react@18.2.0) - '@mantine/styles': 6.0.21(@emotion/react@11.11.1)(react-dom@18.2.0)(react@18.2.0) - '@mantine/utils': 6.0.21(react@18.2.0) - '@radix-ui/react-scroll-area': 1.0.2(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.7(@types/react@18.2.42)(react@18.2.0) - react-textarea-autosize: 8.3.4(@types/react@18.2.42)(react@18.2.0) - transitivePeerDependencies: - - '@emotion/react' - - '@types/react' - dev: false - /@mantine/form@6.0.21(react@18.2.0): resolution: {integrity: sha512-d4tlxyZic7MSDnaPx/WliCX1sRFDkUd2nxx4MxxO2T4OSek0YDqTlSBCxeoveu60P+vrQQN5rbbsVsaOJBe4SQ==} peerDependencies: @@ -3579,36 +3550,6 @@ packages: react: 18.2.0 dev: false - /@mantine/hooks@6.0.21(react@18.2.0): - resolution: {integrity: sha512-sYwt5wai25W6VnqHbS5eamey30/HD5dNXaZuaVEAJ2i2bBv8C0cCiczygMDpAFiSYdXoSMRr/SZ2CrrPTzeNew==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: false - - /@mantine/styles@6.0.21(@emotion/react@11.11.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PVtL7XHUiD/B5/kZ/QvZOZZQQOj12QcRs3Q6nPoqaoPcOX5+S7bMZLMH0iLtcGq5OODYk0uxlvuJkOZGoPj8Mg==} - peerDependencies: - '@emotion/react': '>=11.9.0' - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0) - clsx: 1.1.1 - csstype: 3.0.9 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@mantine/utils@6.0.21(react@18.2.0): - resolution: {integrity: sha512-33RVDRop5jiWFao3HKd3Yp7A9mEq4HAJxJPTuYm1NkdqX6aTKOQK7wT8v8itVodBp+sb4cJK6ZVdD1UurK/txQ==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: false - /@mdx-js/react@2.3.0(react@18.2.0): resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: @@ -3713,24 +3654,12 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@radix-ui/number@1.0.0: - resolution: {integrity: sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==} - dependencies: - '@babel/runtime': 7.23.5 - dev: false - /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: '@babel/runtime': 7.23.5 dev: true - /@radix-ui/primitive@1.0.0: - resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} - dependencies: - '@babel/runtime': 7.23.5 - dev: false - /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: @@ -3782,15 +3711,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): - resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - react: 18.2.0 - dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.42)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -3805,15 +3725,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-context@1.0.0(react@18.2.0): - resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - react: 18.2.0 - dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.2.42)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -3828,15 +3739,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-direction@1.0.0(react@18.2.0): - resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - react: 18.2.0 - dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.2.42)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -3979,31 +3881,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@radix-ui/react-primitive@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - '@radix-ui/react-slot': 1.0.1(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -4054,26 +3931,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-scroll-area@1.0.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-k8VseTxI26kcKJaX0HPwkvlNBPTs56JRdYzcZ/vzrNUkDlvXBy8sMc7WvCpYzZkHgb+hd72VW9MqkqecGtuNgg==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - '@radix-ui/number': 1.0.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-direction': 1.0.0(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.17)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} peerDependencies: @@ -4136,16 +3993,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-slot@1.0.1(react@18.2.0): - resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - react: 18.2.0 - dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.2.42)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: @@ -4238,15 +4085,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0): - resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - react: 18.2.0 - dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.42)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: @@ -4291,15 +4129,6 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): - resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - dependencies: - '@babel/runtime': 7.23.5 - react: 18.2.0 - dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.42)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -4726,6 +4555,14 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/addon-storysource@7.6.4: + resolution: {integrity: sha512-D63IB8bkqn5ZDq4yjvkcLVfGz3OcAQUohlxSFR1e7COo8jMSTiQWjN7xaVPNOnVJRCj6GrlRlto/hqGl+F+WiQ==} + dependencies: + '@storybook/source-loader': 7.6.4 + estraverse: 5.3.0 + tiny-invariant: 1.3.1 + dev: true + /@storybook/addon-toolbars@7.6.4: resolution: {integrity: sha512-ENMQJgU4sRCLLDVXYfa+P3cQVV9PC0ZxwVAKeM3NPYPNH/ODoryGNtq+Q68LwHlM4ObCE2oc9MzaQqPxloFcCw==} dev: true @@ -4845,6 +4682,7 @@ packages: qs: 6.11.2 telejson: 7.2.0 tiny-invariant: 1.3.1 + dev: true /@storybook/cli@7.6.4: resolution: {integrity: sha512-GqvaFdkkBMJOdnrVe82XY0V3b+qFMhRNyVoTv2nqB87iMUXZHqh4Pu4LqwaJBsBpuNregvCvVOPe9LGgoOzy4A==} @@ -4902,6 +4740,7 @@ packages: resolution: {integrity: sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==} dependencies: '@storybook/global': 5.0.0 + dev: true /@storybook/codemod@7.6.4: resolution: {integrity: sha512-q4rZVOfozxzbDRH/LzuFDoIGBdXs+orAm18fi6iAx8PeMHe8J/MOXKccNV1zdkm/h7mTQowuRo45KwJHw8vX+g==} @@ -4989,6 +4828,7 @@ packages: resolution: {integrity: sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==} dependencies: ts-dedent: 2.2.0 + dev: true /@storybook/core-server@7.6.4: resolution: {integrity: sha512-mXxZMpCwOhjEPPRjqrTHdiCpFdkc47f46vlgTj02SX+9xKHxslmZ2D3JG/8O4Ab9tG+bBl6lBm3RIrIzaiCu9Q==} @@ -5076,6 +4916,7 @@ packages: resolution: {integrity: sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==} dependencies: type-fest: 2.19.0 + dev: true /@storybook/docs-mdx@0.1.0: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} @@ -5098,6 +4939,7 @@ packages: /@storybook/global@5.0.0: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + dev: true /@storybook/instrumenter@7.6.4: resolution: {integrity: sha512-sfEXZbCy7orP2A7dYmSrCYGPnbwJcFAa55N+YBQEYhoyJkohGC//nd5LbuPjLj23uixgB9iOw4E0fGp5w8cf+w==} @@ -5132,6 +4974,7 @@ packages: transitivePeerDependencies: - react - react-dom + dev: true /@storybook/manager@7.6.4: resolution: {integrity: sha512-Ug2ejfKgKre8h/RJbkumukwAA44TbvTPEjDcJmyFdAI+kHYhOYdKPEC2UNmVYz8/4HjwMTJQ3M7t/esK8HHY4A==} @@ -5255,6 +5098,17 @@ packages: '@storybook/client-logger': 7.6.4 memoizerific: 1.11.3 qs: 6.11.2 + dev: true + + /@storybook/source-loader@7.6.4: + resolution: {integrity: sha512-1wb/3bVpJZ/3r3qUrLK8jb0kLuvwjNi5T1kci5huREdc1TrIxZXoPw9EiyjcMCZzCURkoj7euNLrLHGyzdBTLg==} + dependencies: + '@storybook/csf': 0.1.2 + '@storybook/types': 7.6.4 + estraverse: 5.3.0 + lodash: 4.17.21 + prettier: 2.8.8 + dev: true /@storybook/telemetry@7.6.4: resolution: {integrity: sha512-Q4QpvcgloHUEqC9PGo7tgqkUH91/PjX+74/0Hi9orLo8QmLMgdYS5fweFwgSKoTwDGNg2PaHp/jqvhhw7UmnJA==} @@ -5306,6 +5160,7 @@ packages: memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: true /@storybook/types@7.6.4: resolution: {integrity: sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg==} @@ -5314,6 +5169,7 @@ packages: '@types/babel__core': 7.20.5 '@types/express': 4.17.21 file-system-cache: 2.3.0 + dev: true /@swc/core-darwin-arm64@1.3.96: resolution: {integrity: sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A==} @@ -5505,28 +5361,33 @@ packages: '@types/babel__generator': 7.6.7 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 + dev: true /@types/babel__generator@7.6.7: resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} dependencies: '@babel/types': 7.23.5 + dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: '@babel/parser': 7.23.5 '@babel/types': 7.23.5 + dev: true /@types/babel__traverse@7.20.4: resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: '@babel/types': 7.23.5 + dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 '@types/node': 20.10.4 + dev: true /@types/chai@4.3.11: resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} @@ -5536,6 +5397,7 @@ packages: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: '@types/node': 20.10.4 + dev: true /@types/cross-spawn@6.0.6: resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} @@ -5772,6 +5634,7 @@ packages: '@types/qs': 6.9.10 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 + dev: true /@types/express@4.17.21: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} @@ -5780,6 +5643,7 @@ packages: '@types/express-serve-static-core': 4.17.41 '@types/qs': 6.9.10 '@types/serve-static': 1.15.5 + dev: true /@types/find-cache-dir@3.2.1: resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} @@ -5804,6 +5668,7 @@ packages: /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: true /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -5858,9 +5723,11 @@ packages: /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: true /@types/mime@3.0.4: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: true /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -5883,6 +5750,7 @@ packages: resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} dependencies: undici-types: 5.26.5 + dev: true /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -5901,9 +5769,11 @@ packages: /@types/qs@6.9.10: resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} + dev: true /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: true /@types/react-dom@18.2.17: resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} @@ -5916,6 +5786,12 @@ packages: '@types/react': 18.2.42 dev: false + /@types/react-transition-group@4.4.10: + resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} + dependencies: + '@types/react': 18.2.42 + dev: false + /@types/react@18.2.42: resolution: {integrity: sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==} dependencies: @@ -5939,6 +5815,7 @@ packages: dependencies: '@types/mime': 1.3.5 '@types/node': 20.10.4 + dev: true /@types/serve-static@1.15.5: resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} @@ -5946,6 +5823,7 @@ packages: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 '@types/node': 20.10.4 + dev: true /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -6364,10 +6242,6 @@ packages: tslib: 1.14.1 dev: true - /@yarnpkg/lockfile@1.1.0: - resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - dev: false - /@zag-js/dom-query@0.16.0: resolution: {integrity: sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==} dev: false @@ -6485,6 +6359,7 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -6566,11 +6441,33 @@ packages: is-string: 1.0.7 dev: true + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.2 + dev: true + /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} @@ -6581,6 +6478,16 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + /array.prototype.flatmap@1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} engines: {node: '>= 0.4'} @@ -6591,6 +6498,16 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + /array.prototype.tosorted@1.1.1: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: @@ -6666,11 +6583,6 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: false - /attr-accept@2.2.2: resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} engines: {node: '>=4'} @@ -6749,6 +6661,7 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -6815,6 +6728,7 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -6827,6 +6741,7 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: true /browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} @@ -6886,6 +6801,7 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.1.1 + dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -6913,6 +6829,35 @@ packages: type-detect: 4.0.8 dev: true + /chakra-react-select@4.7.6(@chakra-ui/form-control@2.2.0)(@chakra-ui/icon@3.2.0)(@chakra-ui/layout@2.3.1)(@chakra-ui/media-query@3.3.0)(@chakra-ui/menu@2.2.1)(@chakra-ui/spinner@2.1.0)(@chakra-ui/system@2.6.2)(@emotion/react@11.11.1)(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZL43hyXPnWf1g/HjsZDecbeJ4F2Q6tTPYJozlKWkrQ7lIX7ORP0aZYwmc5/Wly4UNzMimj2Vuosl6MmIXH+G2g==} + peerDependencies: + '@chakra-ui/form-control': ^2.0.0 + '@chakra-ui/icon': ^3.0.0 + '@chakra-ui/layout': ^2.0.0 + '@chakra-ui/media-query': ^3.0.0 + '@chakra-ui/menu': ^2.0.0 + '@chakra-ui/spinner': ^2.0.0 + '@chakra-ui/system': ^2.0.0 + '@emotion/react': ^11.8.1 + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@10.16.15)(react@18.2.0) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/system': 2.6.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-select: 5.7.7(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -6935,6 +6880,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} @@ -6969,6 +6915,7 @@ packages: /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + dev: true /classcat@5.0.4: resolution: {integrity: sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==} @@ -7055,11 +7002,6 @@ packages: engines: {node: '>=0.8'} dev: true - /clsx@1.1.1: - resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} - engines: {node: '>=6'} - dev: false - /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -7070,12 +7012,14 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true /color2k@2.0.2: resolution: {integrity: sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w==} @@ -7162,6 +7106,7 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -7260,6 +7205,7 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + dev: true /crypto-random-string@2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} @@ -7290,10 +7236,6 @@ packages: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} dev: true - /csstype@3.0.9: - resolution: {integrity: sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==} - dev: false - /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} @@ -7389,6 +7331,17 @@ packages: ms: 2.0.0 dev: true + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -7466,6 +7419,7 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.0 + dev: true /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -7524,6 +7478,7 @@ packages: /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + dev: true /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} @@ -7743,6 +7698,13 @@ packages: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dev: true + /dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dependencies: + '@babel/runtime': 7.23.5 + csstype: 3.1.2 + dev: false + /dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} @@ -8064,6 +8026,45 @@ packages: eslint: 8.55.0 dev: true + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-i18next@6.0.3: resolution: {integrity: sha512-RtQXYfg6PZCjejIQ/YG+dUj/x15jPhufJ9hUDGH0kCpJ6CkVMAWOQ9exU1CrbPmzeykxLjrXkjAaOZF/V7+DOA==} engines: {node: '>=0.10.0'} @@ -8072,6 +8073,41 @@ packages: requireindex: 1.1.0 dev: true + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.13.2)(eslint@8.55.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-path@1.2.2(eslint@8.55.0): resolution: {integrity: sha512-RJ5e/DXRUj7cFD6y3xX5r2syU0uKEkjo9sU8lpayxV/H2plNKPjWv/oRSrWv+XibWV1Qvsu7VELobBFFSPb1UQ==} engines: {node: '>= 12.22.0'} @@ -8116,6 +8152,14 @@ packages: string.prototype.matchall: 4.0.8 dev: true + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.55.0): + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 8.55.0 + dev: true + /eslint-plugin-storybook@0.6.15(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-lAGqVAJGob47Griu29KXYowI4G7KwMoJDOkEip8ujikuDLxU+oWJ1l0WL6F2oDO4QiyUFXvtDkEkISMOPzo+7w==} engines: {node: 12.x || 14.x || >= 16} @@ -8430,6 +8474,7 @@ packages: dependencies: fs-extra: 11.1.1 ramda: 0.29.0 + dev: true /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -8464,6 +8509,7 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true /filter-obj@5.1.0: resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} @@ -8530,12 +8576,6 @@ packages: path-exists: 4.0.0 dev: true - /find-yarn-workspace-root@2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - dependencies: - micromatch: 4.0.5 - dev: false - /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -8633,6 +8673,7 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 + dev: true /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} @@ -8643,16 +8684,6 @@ packages: universalify: 0.1.2 dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: false - /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -8662,6 +8693,7 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -8830,6 +8862,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -8877,9 +8910,11 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.2 + dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -8921,6 +8956,7 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} @@ -9090,9 +9126,11 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -9205,6 +9243,7 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true + dev: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -9273,6 +9312,7 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + dev: true /is-obj@1.0.1: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} @@ -9390,6 +9430,7 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 + dev: true /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -9401,6 +9442,7 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} @@ -9600,12 +9642,6 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json-stable-stringify@1.0.2: - resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} - dependencies: - jsonify: 0.0.1 - dev: false - /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -9631,10 +9667,7 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 - - /jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - dev: false + dev: true /jsx-ast-utils@3.3.4: resolution: {integrity: sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==} @@ -9651,12 +9684,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /klaw-sync@6.0.0: - resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} - dependencies: - graceful-fs: 4.2.11 - dev: false - /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -9761,6 +9788,7 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true /log-symbols@3.0.0: resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} @@ -9805,6 +9833,7 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 + dev: true /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -9885,6 +9914,7 @@ packages: /map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + dev: true /markdown-to-jsx@7.3.2(react@18.2.0): resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} @@ -9914,10 +9944,15 @@ packages: engines: {node: '>= 0.6'} dev: true + /memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + /memoizerific@1.11.3: resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} dependencies: map-or-similar: 1.5.0 + dev: true /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} @@ -9943,6 +9978,7 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 + dev: true /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -9982,6 +10018,7 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: true /minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} @@ -9999,6 +10036,7 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} @@ -10226,6 +10264,7 @@ packages: /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} @@ -10267,6 +10306,24 @@ packages: es-abstract: 1.22.1 dev: true + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.2 + dev: true + /object.hasown@1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: @@ -10283,6 +10340,15 @@ packages: es-abstract: 1.22.1 dev: true + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -10299,6 +10365,7 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 + dev: true /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -10307,14 +10374,6 @@ packages: mimic-fn: 2.1.0 dev: true - /open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: false - /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -10367,11 +10426,6 @@ packages: wcwidth: 1.0.1 dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: false - /overlayscrollbars-react@0.5.3(overlayscrollbars@2.4.5)(react@18.2.0): resolution: {integrity: sha512-mq9D9tbfSeq0cti1kKMf3B3AzsEGwHcRIDX/K49CvYkHz/tKeU38GiahDkIPKTMEAp6lzKCo4x1eJZA6ZFYOxQ==} peerDependencies: @@ -10462,28 +10516,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /patch-package@8.0.0: - resolution: {integrity: sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==} - engines: {node: '>=14', npm: '>5'} - hasBin: true - dependencies: - '@yarnpkg/lockfile': 1.1.0 - chalk: 4.1.2 - ci-info: 3.9.0 - cross-spawn: 7.0.3 - find-yarn-workspace-root: 2.0.0 - fs-extra: 9.1.0 - json-stable-stringify: 1.0.2 - klaw-sync: 6.0.0 - minimist: 1.2.8 - open: 7.4.2 - rimraf: 2.7.1 - semver: 7.5.4 - slash: 2.0.0 - tmp: 0.0.33 - yaml: 2.3.1 - dev: false - /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true @@ -10501,10 +10533,12 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -10552,6 +10586,7 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + dev: true /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -10816,6 +10851,7 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 + dev: true /query-string@8.1.0: resolution: {integrity: sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==} @@ -10840,6 +10876,7 @@ packages: /ramda@0.29.0: resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + dev: true /randexp@0.4.6: resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} @@ -11162,6 +11199,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /react-select@5.7.7(@types/react@18.2.42)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.23.5 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.1(@types/react@18.2.42)(react@18.2.0) + '@floating-ui/dom': 1.5.3 + '@types/react-transition-group': 4.4.10 + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.42)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /react-style-singleton@2.2.1(@types/react@18.2.42)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -11178,8 +11236,8 @@ packages: react: 18.2.0 tslib: 2.6.2 - /react-textarea-autosize@8.3.4(@types/react@18.2.42)(react@18.2.0): - resolution: {integrity: sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==} + /react-textarea-autosize@8.5.3(@types/react@18.2.42)(react@18.2.0): + resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -11192,6 +11250,20 @@ packages: - '@types/react' dev: false + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.23.5 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.6.2): resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} peerDependencies: @@ -11530,6 +11602,7 @@ packages: hasBin: true dependencies: glob: 7.2.3 + dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -11670,6 +11743,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -11719,6 +11793,7 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.0 + dev: true /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} @@ -11750,10 +11825,12 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + dev: true /shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} @@ -11765,6 +11842,7 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 object-inspect: 1.12.3 + dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -11786,11 +11864,6 @@ packages: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true - /slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - dev: false - /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -11929,6 +12002,7 @@ packages: /store2@2.14.2: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} + dev: true /storybook@7.6.4: resolution: {integrity: sha512-nQhs9XkrroxjqMoBnnToyc6M8ndbmpkOb1qmULO4chtfMy4k0p9Un3K4TJvDaP8c3wPUFGd4ZaJ1hZNVmIl56Q==} @@ -12112,6 +12186,7 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -12133,10 +12208,6 @@ packages: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} dev: true - /tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - dev: false - /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -12178,6 +12249,7 @@ packages: resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} dependencies: memoizerific: 1.11.3 + dev: true /temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} @@ -12235,13 +12307,6 @@ packages: engines: {node: '>=14.0.0'} dev: true - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: false - /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -12255,6 +12320,7 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true /tocbot@4.23.0: resolution: {integrity: sha512-5DWuSZXsqG894mkGb8ZsQt9myyQyVxE50AiGRZ0obV0BVUTVkaZmc9jbgpknaAAPUm4FIrzGkEseD6FuQJYJDQ==} @@ -12289,6 +12355,7 @@ packages: /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} + dev: true /ts-easing@0.2.0: resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} @@ -12329,6 +12396,15 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -12504,6 +12580,7 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true /undici@5.27.2: resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==} @@ -12573,6 +12650,7 @@ packages: /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} + dev: true /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -12971,6 +13049,7 @@ packages: hasBin: true dependencies: isexe: 2.0.0 + dev: true /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -12996,6 +13075,7 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true /write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} @@ -13060,17 +13140,13 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: false - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} - engines: {node: '>= 14'} - dev: false - /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index f5f3f434f5..23dd8f9902 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -50,9 +50,33 @@ "uncategorized": "Uncategorized", "downloadBoard": "Download Board" }, + "accordions": { + "generation": { + "title": "Generation", + "modelTab": "Model", + "conceptsTab": "Concepts" + }, + "image": { + "title": "Image" + }, + "advanced": { + "title": "Advanced" + }, + "control": { + "title": "Control", + "controlAdaptersTab": "Control Adapters", + "ipTab": "Image Prompts" + }, + "compositing": { + "title": "Compositing", + "coherenceTab": "Coherence Pass", + "infillMaskTab": "Infill & Mask" + } + }, "common": { "accept": "Accept", "advanced": "Advanced", + "advancedOptions": "Advanced Options", "ai": "ai", "areYouSure": "Are you sure?", "auto": "Auto", @@ -79,6 +103,7 @@ "file": "File", "folder": "Folder", "format": "format", + "free": "Free", "generate": "Generate", "githubLabel": "Github", "hotkeysLabel": "Hotkeys", @@ -221,7 +246,6 @@ "colorMapTileSize": "Tile Size", "importImageFromCanvas": "Import Image From Canvas", "importMaskFromCanvas": "Import Mask From Canvas", - "incompatibleBaseModel": "Incompatible base model:", "lineart": "Lineart", "lineartAnime": "Lineart Anime", "lineartAnimeDescription": "Anime-style lineart processing", @@ -246,6 +270,7 @@ "prompt": "Prompt", "resetControlImage": "Reset Control Image", "resize": "Resize", + "resizeSimple": "Resize (Simple)", "resizeMode": "Resize Mode", "safe": "Safe", "saveControlImage": "Save Control Image", @@ -284,7 +309,7 @@ "queue": "Queue", "queueFront": "Add to Front of Queue", "queueBack": "Add to Queue", - "queueCountPrediction": "Add {{predicted}} to Queue", + "queueCountPrediction": "{{promptsCount}} prompts × {{iterations}} iterations -> {{count}} generations", "queueMaxExceeded": "Max of {{max_queue_size}} exceeded, would skip {{skip}}", "queuedCount": "{{pending}} Pending", "queueTotal": "{{total}} Total", @@ -788,17 +813,23 @@ }, "models": { "addLora": "Add LoRA", + "allLoRAsAdded": "All LoRAs added", + "loraAlreadyAdded": "LoRA already added", "esrganModel": "ESRGAN Model", "loading": "loading", + "incompatibleBaseModel": "Incompatible base model", + "noMainModelSelected": "No main model selected", "noLoRAsAvailable": "No LoRAs available", "noLoRAsLoaded": "No LoRAs Loaded", "noMatchingLoRAs": "No matching LoRAs", "noMatchingModels": "No matching Models", "noModelsAvailable": "No models available", + "lora": "LoRA", "selectLoRA": "Select a LoRA", "selectModel": "Select a Model", "noLoRAsInstalled": "No LoRAs installed", - "noRefinerModelsInstalled": "No SDXL Refiner models installed" + "noRefinerModelsInstalled": "No SDXL Refiner models installed", + "defaultVAE": "Default VAE" }, "nodes": { "addNode": "Add Node", @@ -1037,6 +1068,7 @@ "prototypeDesc": "This invocation is a prototype. It may have breaking changes during app updates and may be removed at any time." }, "parameters": { + "aspect": "Aspect", "aspectRatio": "Aspect Ratio", "aspectRatioFree": "Free", "boundingBoxHeader": "Bounding Box", @@ -1077,6 +1109,7 @@ "imageFit": "Fit Initial Image To Output Size", "images": "Images", "imageToImage": "Image to Image", + "imageSize": "Image Size", "img2imgStrength": "Image To Image Strength", "infillMethod": "Infill Method", "infillScalingHeader": "Infill and Scaling", @@ -1127,8 +1160,8 @@ "seamCorrectionHeader": "Seam Correction", "seamHighThreshold": "High", "seamlessTiling": "Seamless Tiling", - "seamlessXAxis": "X Axis", - "seamlessYAxis": "Y Axis", + "seamlessXAxis": "Seamless Tiling X Axis", + "seamlessYAxis": "Seamless Tiling Y Axis", "seamlessX": "Seamless X", "seamlessY": "Seamless Y", "seamlessX&Y": "Seamless X & Y", @@ -1171,6 +1204,7 @@ }, "dynamicPrompts": { "combinatorial": "Combinatorial Generation", + "showDynamicPrompts": "Show Dynamic Prompts", "dynamicPrompts": "Dynamic Prompts", "enableDynamicPrompts": "Enable Dynamic Prompts", "maxPrompts": "Max Prompts", @@ -1187,7 +1221,8 @@ }, "sdxl": { "cfgScale": "CFG Scale", - "concatPromptStyle": "Concatenate Prompt & Style", + "concatPromptStyle": "Concatenating Prompt & Style", + "freePromptStyle": "Manual Style Prompting", "denoisingStrength": "Denoising Strength", "loading": "Loading...", "negAestheticScore": "Negative Aesthetic Score", diff --git a/invokeai/frontend/web/scripts/typegen.js b/invokeai/frontend/web/scripts/typegen.js index 9e1b51eace..ce78e3e5ba 100644 --- a/invokeai/frontend/web/scripts/typegen.js +++ b/invokeai/frontend/web/scripts/typegen.js @@ -1,8 +1,9 @@ import fs from 'node:fs'; + import openapiTS from 'openapi-typescript'; const OPENAPI_URL = 'http://127.0.0.1:9090/openapi.json'; -const OUTPUT_FILE = 'src/services/api/schema.d.ts'; +const OUTPUT_FILE = 'src/services/api/schema.ts'; async function main() { process.stdout.write( diff --git a/invokeai/frontend/web/src/app/components/App.tsx b/invokeai/frontend/web/src/app/components/App.tsx index 73bd92ffab..f9e53f2ddd 100644 --- a/invokeai/frontend/web/src/app/components/App.tsx +++ b/invokeai/frontend/web/src/app/components/App.tsx @@ -1,13 +1,17 @@ import { Flex, Grid } from '@chakra-ui/react'; import { useStore } from '@nanostores/react'; +import { useSocketIO } from 'app/hooks/useSocketIO'; import { useLogger } from 'app/logging/useLogger'; import { appStarted } from 'app/store/middleware/listenerMiddleware/listeners/appStarted'; import { $headerComponent } from 'app/store/nanostores/headerComponent'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { PartialAppConfig } from 'app/types/invokeai'; +import type { PartialAppConfig } from 'app/types/invokeai'; import ImageUploader from 'common/components/ImageUploader'; +import { useClearStorage } from 'common/hooks/useClearStorage'; +import { useGlobalModifiersInit } from 'common/hooks/useGlobalModifiers'; import ChangeBoardModal from 'features/changeBoardModal/components/ChangeBoardModal'; import DeleteImageModal from 'features/deleteImageModal/components/DeleteImageModal'; +import { DynamicPromptsModal } from 'features/dynamicPrompts/components/DynamicPromptsPreviewModal'; import SiteHeader from 'features/system/components/SiteHeader'; import { configChanged } from 'features/system/store/configSlice'; import { languageSelector } from 'features/system/store/systemSelectors'; @@ -16,12 +20,10 @@ import i18n from 'i18n'; import { size } from 'lodash-es'; import { memo, useCallback, useEffect } from 'react'; import { ErrorBoundary } from 'react-error-boundary'; + import AppErrorBoundaryFallback from './AppErrorBoundaryFallback'; -import GlobalHotkeys from './GlobalHotkeys'; import PreselectedImage from './PreselectedImage'; import Toaster from './Toaster'; -import { useSocketIO } from 'app/hooks/useSocketIO'; -import { useClearStorage } from 'common/hooks/useClearStorage'; const DEFAULT_CONFIG = {}; @@ -41,6 +43,7 @@ const App = ({ config = DEFAULT_CONFIG, selectedImage }: Props) => { // singleton! useSocketIO(); + useGlobalModifiersInit(); const handleReset = useCallback(() => { clearStorage(); @@ -96,8 +99,8 @@ const App = ({ config = DEFAULT_CONFIG, selectedImage }: Props) => { + - ); diff --git a/invokeai/frontend/web/src/app/components/AppErrorBoundaryFallback.tsx b/invokeai/frontend/web/src/app/components/AppErrorBoundaryFallback.tsx index 29f4016ad9..9a8a177f58 100644 --- a/invokeai/frontend/web/src/app/components/AppErrorBoundaryFallback.tsx +++ b/invokeai/frontend/web/src/app/components/AppErrorBoundaryFallback.tsx @@ -1,5 +1,6 @@ -import { Flex, Heading, Link, Text, useToast } from '@chakra-ui/react'; -import IAIButton from 'common/components/IAIButton'; +import { Flex, Heading, Link, useToast } from '@chakra-ui/react'; +import { InvButton } from 'common/components/InvButton/InvButton'; +import { InvText } from 'common/components/InvText/wrapper'; import newGithubIssueUrl from 'new-github-issue-url'; import { memo, useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; @@ -67,30 +68,24 @@ const AppErrorBoundaryFallback = ({ error, resetErrorBoundary }: Props) => { alignItems: 'center', }} > - + {error.name}: {error.message} - + - } onClick={resetErrorBoundary} > {t('accessibility.resetUI')} - - } onClick={handleCopy}> + + } onClick={handleCopy}> {t('common.copyError')} - + - }> + }> {t('accessibility.createIssue')} - + diff --git a/invokeai/frontend/web/src/app/components/GlobalHotkeys.ts b/invokeai/frontend/web/src/app/components/GlobalHotkeys.ts deleted file mode 100644 index 211ecee81e..0000000000 --- a/invokeai/frontend/web/src/app/components/GlobalHotkeys.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { createMemoizedSelector } from 'app/store/createMemoizedSelector'; -import { stateSelector } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { useQueueBack } from 'features/queue/hooks/useQueueBack'; -import { useQueueFront } from 'features/queue/hooks/useQueueFront'; -import { - ctrlKeyPressed, - metaKeyPressed, - shiftKeyPressed, -} from 'features/ui/store/hotkeysSlice'; -import { setActiveTab } from 'features/ui/store/uiSlice'; -import React, { memo } from 'react'; -import { isHotkeyPressed, useHotkeys } from 'react-hotkeys-hook'; - -const globalHotkeysSelector = createMemoizedSelector( - [stateSelector], - ({ hotkeys }) => { - const { shift, ctrl, meta } = hotkeys; - return { shift, ctrl, meta }; - } -); - -// TODO: Does not catch keypresses while focused in an input. Maybe there is a way? - -/** - * Logical component. Handles app-level global hotkeys. - * @returns null - */ -const GlobalHotkeys: React.FC = () => { - const dispatch = useAppDispatch(); - const { shift, ctrl, meta } = useAppSelector(globalHotkeysSelector); - const { - queueBack, - isDisabled: isDisabledQueueBack, - isLoading: isLoadingQueueBack, - } = useQueueBack(); - - useHotkeys( - ['ctrl+enter', 'meta+enter'], - queueBack, - { - enabled: () => !isDisabledQueueBack && !isLoadingQueueBack, - preventDefault: true, - enableOnFormTags: ['input', 'textarea', 'select'], - }, - [queueBack, isDisabledQueueBack, isLoadingQueueBack] - ); - - const { - queueFront, - isDisabled: isDisabledQueueFront, - isLoading: isLoadingQueueFront, - } = useQueueFront(); - - useHotkeys( - ['ctrl+shift+enter', 'meta+shift+enter'], - queueFront, - { - enabled: () => !isDisabledQueueFront && !isLoadingQueueFront, - preventDefault: true, - enableOnFormTags: ['input', 'textarea', 'select'], - }, - [queueFront, isDisabledQueueFront, isLoadingQueueFront] - ); - - useHotkeys( - '*', - () => { - if (isHotkeyPressed('shift')) { - !shift && dispatch(shiftKeyPressed(true)); - } else { - shift && dispatch(shiftKeyPressed(false)); - } - if (isHotkeyPressed('ctrl')) { - !ctrl && dispatch(ctrlKeyPressed(true)); - } else { - ctrl && dispatch(ctrlKeyPressed(false)); - } - if (isHotkeyPressed('meta')) { - !meta && dispatch(metaKeyPressed(true)); - } else { - meta && dispatch(metaKeyPressed(false)); - } - }, - { keyup: true, keydown: true }, - [shift, ctrl, meta] - ); - - useHotkeys('1', () => { - dispatch(setActiveTab('txt2img')); - }); - - useHotkeys('2', () => { - dispatch(setActiveTab('img2img')); - }); - - useHotkeys('3', () => { - dispatch(setActiveTab('unifiedCanvas')); - }); - - useHotkeys('4', () => { - dispatch(setActiveTab('nodes')); - }); - - useHotkeys('5', () => { - dispatch(setActiveTab('modelManager')); - }); - - return null; -}; - -export default memo(GlobalHotkeys); diff --git a/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx b/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx index b190a36f06..e4ae4b61c6 100644 --- a/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx +++ b/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx @@ -1,29 +1,25 @@ -import { Middleware } from '@reduxjs/toolkit'; +import 'i18n'; + +import type { Middleware } from '@reduxjs/toolkit'; import { $socketOptions } from 'app/hooks/useSocketIO'; import { $authToken } from 'app/store/nanostores/authToken'; import { $baseUrl } from 'app/store/nanostores/baseUrl'; -import { $customStarUI, CustomStarUi } from 'app/store/nanostores/customStarUI'; +import type { CustomStarUi } from 'app/store/nanostores/customStarUI'; +import { $customStarUI } from 'app/store/nanostores/customStarUI'; import { $headerComponent } from 'app/store/nanostores/headerComponent'; import { $isDebugging } from 'app/store/nanostores/isDebugging'; import { $projectId } from 'app/store/nanostores/projectId'; import { $queueId, DEFAULT_QUEUE_ID } from 'app/store/nanostores/queueId'; import { $store } from 'app/store/nanostores/store'; import { createStore } from 'app/store/store'; -import { PartialAppConfig } from 'app/types/invokeai'; +import type { PartialAppConfig } from 'app/types/invokeai'; import Loading from 'common/components/Loading/Loading'; import AppDndContext from 'features/dnd/components/AppDndContext'; -import 'i18n'; -import React, { - PropsWithChildren, - ReactNode, - lazy, - memo, - useEffect, - useMemo, -} from 'react'; +import type { PropsWithChildren, ReactNode } from 'react'; +import React, { lazy, memo, useEffect, useMemo } from 'react'; import { Provider } from 'react-redux'; import { addMiddleware, resetMiddlewares } from 'redux-dynamic-middlewares'; -import { ManagerOptions, SocketOptions } from 'socket.io-client'; +import type { ManagerOptions, SocketOptions } from 'socket.io-client'; const App = lazy(() => import('./App')); const ThemeLocaleProvider = lazy(() => import('./ThemeLocaleProvider')); diff --git a/invokeai/frontend/web/src/app/components/ThemeLocaleProvider.tsx b/invokeai/frontend/web/src/app/components/ThemeLocaleProvider.tsx index ba0aaa5823..f2de4dc3be 100644 --- a/invokeai/frontend/web/src/app/components/ThemeLocaleProvider.tsx +++ b/invokeai/frontend/web/src/app/components/ThemeLocaleProvider.tsx @@ -1,24 +1,17 @@ -import { - ChakraProvider, - createLocalStorageManager, - extendTheme, -} from '@chakra-ui/react'; -import { ReactNode, memo, useEffect, useMemo } from 'react'; -import { useTranslation } from 'react-i18next'; -import { TOAST_OPTIONS, theme as invokeAITheme } from 'theme/theme'; - import '@fontsource-variable/inter'; -import { MantineProvider } from '@mantine/core'; -import { useMantineTheme } from 'mantine-theme/theme'; import 'overlayscrollbars/overlayscrollbars.css'; -import 'theme/css/overlayscrollbars.css'; +import 'common/components/OverlayScrollbars/overlayscrollbars.css'; + +import { ChakraProvider, extendTheme } from '@chakra-ui/react'; +import type { ReactNode } from 'react'; +import { memo, useEffect, useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { theme as invokeAITheme, TOAST_OPTIONS } from 'theme/theme'; type ThemeLocaleProviderProps = { children: ReactNode; }; -const manager = createLocalStorageManager('@@invokeai-color-mode'); - function ThemeLocaleProvider({ children }: ThemeLocaleProviderProps) { const { i18n } = useTranslation(); @@ -35,18 +28,10 @@ function ThemeLocaleProvider({ children }: ThemeLocaleProviderProps) { document.body.dir = direction; }, [direction]); - const mantineTheme = useMantineTheme(); - return ( - - - {children} - - + + {children} + ); } diff --git a/invokeai/frontend/web/src/app/components/Toaster.ts b/invokeai/frontend/web/src/app/components/Toaster.ts index e319bef59c..1ba47bdc8f 100644 --- a/invokeai/frontend/web/src/app/components/Toaster.ts +++ b/invokeai/frontend/web/src/app/components/Toaster.ts @@ -1,7 +1,8 @@ import { useToast } from '@chakra-ui/react'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { addToast, clearToastQueue } from 'features/system/store/systemSlice'; -import { MakeToastArg, makeToast } from 'features/system/util/makeToast'; +import type { MakeToastArg } from 'features/system/util/makeToast'; +import { makeToast } from 'features/system/util/makeToast'; import { memo, useCallback, useEffect } from 'react'; /** diff --git a/invokeai/frontend/web/src/app/features.ts b/invokeai/frontend/web/src/app/features.ts deleted file mode 100644 index bd6906f11c..0000000000 --- a/invokeai/frontend/web/src/app/features.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { useMemo } from 'react'; -import { useTranslation } from 'react-i18next'; - -type FeatureHelpInfo = { - text: string; - href: string; - guideImage: string; -}; - -export enum Feature { - PROMPT, - GALLERY, - OTHER, - SEED, - VARIATIONS, - UPSCALE, - FACE_CORRECTION, - IMAGE_TO_IMAGE, - BOUNDING_BOX, - SEAM_CORRECTION, - INFILL_AND_SCALING, -} -/** For each tooltip in the UI, the below feature definitions & props will pull relevant information into the tooltip. - * - * To-do: href & GuideImages are placeholders, and are not currently utilized, but will be updated (along with the tooltip UI) as feature and UI develop and we get a better idea on where things "forever homes" will be . - */ -const useFeatures = (): Record => { - const { t } = useTranslation(); - return useMemo( - () => ({ - [Feature.PROMPT]: { - text: t('tooltip.feature.prompt'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.GALLERY]: { - text: t('tooltip.feature.gallery'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.OTHER]: { - text: t('tooltip.feature.other'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.SEED]: { - text: t('tooltip.feature.seed'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.VARIATIONS]: { - text: t('tooltip.feature.variations'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.UPSCALE]: { - text: t('tooltip.feature.upscale'), - href: 'link/to/docs/feature1.html', - guideImage: 'asset/path.gif', - }, - [Feature.FACE_CORRECTION]: { - text: t('tooltip.feature.faceCorrection'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.IMAGE_TO_IMAGE]: { - text: t('tooltip.feature.imageToImage'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.BOUNDING_BOX]: { - text: t('tooltip.feature.boundingBox'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.SEAM_CORRECTION]: { - text: t('tooltip.feature.seamCorrection'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - [Feature.INFILL_AND_SCALING]: { - text: t('tooltip.feature.infillAndScaling'), - href: 'link/to/docs/feature3.html', - guideImage: 'asset/path.gif', - }, - }), - [t] - ); -}; - -export const useFeatureHelpInfo = (feature: Feature): FeatureHelpInfo => { - const features = useFeatures(); - return features[feature]; -}; diff --git a/invokeai/frontend/web/src/app/hooks/useSocketIO.ts b/invokeai/frontend/web/src/app/hooks/useSocketIO.ts index b2f08b2815..dffdbf6ca2 100644 --- a/invokeai/frontend/web/src/app/hooks/useSocketIO.ts +++ b/invokeai/frontend/web/src/app/hooks/useSocketIO.ts @@ -3,14 +3,16 @@ import { $authToken } from 'app/store/nanostores/authToken'; import { $baseUrl } from 'app/store/nanostores/baseUrl'; import { $isDebugging } from 'app/store/nanostores/isDebugging'; import { useAppDispatch } from 'app/store/storeHooks'; -import { MapStore, atom, map } from 'nanostores'; +import type { MapStore } from 'nanostores'; +import { atom, map } from 'nanostores'; import { useEffect, useMemo } from 'react'; -import { +import type { ClientToServerEvents, ServerToClientEvents, } from 'services/events/types'; import { setEventListeners } from 'services/events/util/setEventListeners'; -import { ManagerOptions, Socket, SocketOptions, io } from 'socket.io-client'; +import type { ManagerOptions, Socket, SocketOptions } from 'socket.io-client'; +import { io } from 'socket.io-client'; // Inject socket options and url into window for debugging declare global { diff --git a/invokeai/frontend/web/src/app/logging/logger.ts b/invokeai/frontend/web/src/app/logging/logger.ts index 0e0a1a7324..c0696c1f6a 100644 --- a/invokeai/frontend/web/src/app/logging/logger.ts +++ b/invokeai/frontend/web/src/app/logging/logger.ts @@ -1,6 +1,8 @@ import { createLogWriter } from '@roarr/browser-log-writer'; import { atom } from 'nanostores'; -import { Logger, ROARR, Roarr } from 'roarr'; +import type { Logger } from 'roarr'; +import { ROARR, Roarr } from 'roarr'; +import { z } from 'zod'; ROARR.write = createLogWriter(); @@ -26,19 +28,20 @@ export type LoggerNamespace = export const logger = (namespace: LoggerNamespace) => $logger.get().child({ namespace }); -export const VALID_LOG_LEVELS = [ +export const zLogLevel = z.enum([ 'trace', 'debug', 'info', 'warn', 'error', 'fatal', -] as const; - -export type InvokeLogLevel = (typeof VALID_LOG_LEVELS)[number]; +]); +export type LogLevel = z.infer; +export const isLogLevel = (v: unknown): v is LogLevel => + zLogLevel.safeParse(v).success; // Translate human-readable log levels to numbers, used for log filtering -export const LOG_LEVEL_MAP: Record = { +export const LOG_LEVEL_MAP: Record = { trace: 10, debug: 20, info: 30, diff --git a/invokeai/frontend/web/src/app/logging/useLogger.ts b/invokeai/frontend/web/src/app/logging/useLogger.ts index 1ec564d333..5028935514 100644 --- a/invokeai/frontend/web/src/app/logging/useLogger.ts +++ b/invokeai/frontend/web/src/app/logging/useLogger.ts @@ -4,13 +4,9 @@ import { stateSelector } from 'app/store/store'; import { useAppSelector } from 'app/store/storeHooks'; import { useEffect, useMemo } from 'react'; import { ROARR, Roarr } from 'roarr'; -import { - $logger, - BASE_CONTEXT, - LOG_LEVEL_MAP, - LoggerNamespace, - logger, -} from './logger'; + +import type { LoggerNamespace } from './logger'; +import { $logger, BASE_CONTEXT, LOG_LEVEL_MAP, logger } from './logger'; const selector = createMemoizedSelector(stateSelector, ({ system }) => { const { consoleLogLevel, shouldLogToConsole } = system; diff --git a/invokeai/frontend/web/src/app/store/actions.ts b/invokeai/frontend/web/src/app/store/actions.ts index 418440a5fb..0800d1a63b 100644 --- a/invokeai/frontend/web/src/app/store/actions.ts +++ b/invokeai/frontend/web/src/app/store/actions.ts @@ -1,6 +1,6 @@ import { createAction } from '@reduxjs/toolkit'; -import { InvokeTabName } from 'features/ui/store/tabMap'; -import { BatchConfig } from 'services/api/types'; +import type { InvokeTabName } from 'features/ui/store/tabMap'; +import type { BatchConfig } from 'services/api/types'; export const enqueueRequested = createAction<{ tabName: InvokeTabName; diff --git a/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts b/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts index 4741f08b16..7b5e1cef5d 100644 --- a/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts +++ b/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/serialize.ts @@ -8,7 +8,7 @@ import { postprocessingPersistDenylist } from 'features/parameters/store/postpro import { systemPersistDenylist } from 'features/system/store/systemPersistDenylist'; import { uiPersistDenylist } from 'features/ui/store/uiPersistDenylist'; import { omit } from 'lodash-es'; -import { SerializeFunction } from 'redux-remember'; +import type { SerializeFunction } from 'redux-remember'; const serializationDenylist: { [key: string]: string[]; diff --git a/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/unserialize.ts b/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/unserialize.ts index 0dcc9e5971..247961fed9 100644 --- a/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/unserialize.ts +++ b/invokeai/frontend/web/src/app/store/enhancers/reduxRemember/unserialize.ts @@ -11,7 +11,7 @@ import { initialSystemState } from 'features/system/store/systemSlice'; import { initialHotkeysState } from 'features/ui/store/hotkeysSlice'; import { initialUIState } from 'features/ui/store/uiSlice'; import { defaultsDeep } from 'lodash-es'; -import { UnserializeFunction } from 'redux-remember'; +import type { UnserializeFunction } from 'redux-remember'; const initialStates: { [key: string]: object; // TODO: type this properly diff --git a/invokeai/frontend/web/src/app/store/middleware/devtools/actionSanitizer.ts b/invokeai/frontend/web/src/app/store/middleware/devtools/actionSanitizer.ts index 08f98f4f7e..da5fb224d2 100644 --- a/invokeai/frontend/web/src/app/store/middleware/devtools/actionSanitizer.ts +++ b/invokeai/frontend/web/src/app/store/middleware/devtools/actionSanitizer.ts @@ -1,8 +1,8 @@ -import { UnknownAction } from '@reduxjs/toolkit'; +import type { UnknownAction } from '@reduxjs/toolkit'; import { isAnyGraphBuilt } from 'features/nodes/store/actions'; import { nodeTemplatesBuilt } from 'features/nodes/store/nodesSlice'; import { receivedOpenAPISchema } from 'services/api/thunks/schema'; -import { Graph } from 'services/api/types'; +import type { Graph } from 'services/api/types'; export const actionSanitizer =
(action: A): A => { if (isAnyGraphBuilt(action)) { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts index 8bcdd236e0..c3fdefbab9 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/index.ts @@ -1,11 +1,12 @@ -import type { TypedAddListener, TypedStartListening } from '@reduxjs/toolkit'; -import { - UnknownAction, +import type { ListenerEffect, - addListener, - createListenerMiddleware, + TypedAddListener, + TypedStartListening, + UnknownAction, } from '@reduxjs/toolkit'; +import { addListener, createListenerMiddleware } from '@reduxjs/toolkit'; import type { AppDispatch, RootState } from 'app/store/store'; + import { addCommitStagingAreaImageListener } from './listeners/addCommitStagingAreaImageListener'; import { addFirstListImagesListener } from './listeners/addFirstListImagesListener.ts'; import { addAnyEnqueuedListener } from './listeners/anyEnqueued'; @@ -42,13 +43,13 @@ import { addImageRemovedFromBoardFulfilledListener, addImageRemovedFromBoardRejectedListener, } from './listeners/imageRemovedFromBoard'; +import { addImagesStarredListener } from './listeners/imagesStarred'; +import { addImagesUnstarredListener } from './listeners/imagesUnstarred'; import { addImageToDeleteSelectedListener } from './listeners/imageToDeleteSelected'; import { addImageUploadedFulfilledListener, addImageUploadedRejectedListener, } from './listeners/imageUploaded'; -import { addImagesStarredListener } from './listeners/imagesStarred'; -import { addImagesUnstarredListener } from './listeners/imagesUnstarred'; import { addInitialImageSelectedListener } from './listeners/initialImageSelected'; import { addModelSelectedListener } from './listeners/modelSelected'; import { addModelsLoadedListener } from './listeners/modelsLoaded'; @@ -69,9 +70,9 @@ import { addSocketSubscribedEventListener as addSocketSubscribedListener } from import { addSocketUnsubscribedEventListener as addSocketUnsubscribedListener } from './listeners/socketio/socketUnsubscribed'; import { addStagingAreaImageSavedListener } from './listeners/stagingAreaImageSaved'; import { addTabChangedListener } from './listeners/tabChanged'; +import { addUpdateAllNodesRequestedListener } from './listeners/updateAllNodesRequested'; import { addUpscaleRequestedListener } from './listeners/upscaleRequested'; import { addWorkflowLoadRequestedListener } from './listeners/workflowLoadRequested'; -import { addUpdateAllNodesRequestedListener } from './listeners/updateAllNodesRequested'; export const listenerMiddleware = createListenerMiddleware(); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addCommitStagingAreaImageListener.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addCommitStagingAreaImageListener.ts index d302d50255..2dbf68a837 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addCommitStagingAreaImageListener.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addCommitStagingAreaImageListener.ts @@ -8,6 +8,7 @@ import { import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; import { queueApi } from 'services/api/endpoints/queue'; + import { startAppListening } from '..'; const matcher = isAnyOf(commitStagingAreaImage, discardStagedImages); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts index 15e7d48708..82f1cbeb03 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addFirstListImagesListener.ts.ts @@ -2,9 +2,10 @@ import { createAction } from '@reduxjs/toolkit'; import { imageSelected } from 'features/gallery/store/gallerySlice'; import { IMAGE_CATEGORIES } from 'features/gallery/store/types'; import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; +import type { ImageCache } from 'services/api/types'; import { getListImagesUrl, imagesAdapter } from 'services/api/util'; -import { ImageCache } from 'services/api/types'; + +import { startAppListening } from '..'; export const appStarted = createAction('app/appStarted'); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/anyEnqueued.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/anyEnqueued.ts index 3f0e3342f9..fa4ad727c4 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/anyEnqueued.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/anyEnqueued.ts @@ -1,4 +1,5 @@ import { queueApi } from 'services/api/endpoints/queue'; + import { startAppListening } from '..'; export const addAnyEnqueuedListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts index 700b4e7626..52090f7ab7 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appConfigReceived.ts @@ -4,6 +4,7 @@ import { shouldUseWatermarkerChanged, } from 'features/system/store/systemSlice'; import { appInfoApi } from 'services/api/endpoints/appInfo'; + import { startAppListening } from '..'; export const addAppConfigReceivedListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appStarted.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appStarted.ts index 189a5a3530..9cbd1c4aca 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appStarted.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/appStarted.ts @@ -1,4 +1,5 @@ import { createAction } from '@reduxjs/toolkit'; + import { startAppListening } from '..'; export const appStarted = createAction('app/appStarted'); diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts index 99756cbadb..1e8608d884 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/batchEnqueued.ts @@ -5,7 +5,8 @@ import { zPydanticValidationError } from 'features/system/store/zodSchemas'; import { t } from 'i18next'; import { truncate, upperFirst } from 'lodash-es'; import { queueApi } from 'services/api/endpoints/queue'; -import { TOAST_OPTIONS, theme } from 'theme/theme'; +import { theme, TOAST_OPTIONS } from 'theme/theme'; + import { startAppListening } from '..'; const { toast } = createStandaloneToast({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts index a1be8de312..19346f5acd 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted.ts @@ -4,6 +4,7 @@ import { getImageUsage } from 'features/deleteImageModal/store/selectors'; import { nodeEditorReset } from 'features/nodes/store/nodesSlice'; import { clearInitialImage } from 'features/parameters/store/generationSlice'; import { imagesApi } from 'services/api/endpoints/images'; + import { startAppListening } from '..'; export const addDeleteBoardAndImagesFulfilledListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts index 9e8844f9fe..0bf5e9e264 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/boardIdSelected.ts @@ -9,9 +9,10 @@ import { IMAGE_CATEGORIES, } from 'features/gallery/store/types'; import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; import { imagesSelectors } from 'services/api/util'; +import { startAppListening } from '..'; + export const addBoardIdSelectedListener = () => { startAppListening({ matcher: isAnyOf(boardIdSelected, galleryViewChanged), diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasCopiedToClipboard.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasCopiedToClipboard.ts index 1ac80d219b..ec2c2388e5 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasCopiedToClipboard.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasCopiedToClipboard.ts @@ -1,11 +1,12 @@ -import { canvasCopiedToClipboard } from 'features/canvas/store/actions'; -import { startAppListening } from '..'; import { $logger } from 'app/logging/logger'; +import { canvasCopiedToClipboard } from 'features/canvas/store/actions'; import { getBaseLayerBlob } from 'features/canvas/util/getBaseLayerBlob'; import { addToast } from 'features/system/store/systemSlice'; import { copyBlobToClipboard } from 'features/system/util/copyBlobToClipboard'; import { t } from 'i18next'; +import { startAppListening } from '..'; + export const addCanvasCopiedToClipboardListener = () => { startAppListening({ actionCreator: canvasCopiedToClipboard, diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasDownloadedAsImage.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasDownloadedAsImage.ts index cfaf20b64c..0cbdb8bfcc 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasDownloadedAsImage.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasDownloadedAsImage.ts @@ -1,11 +1,12 @@ -import { canvasDownloadedAsImage } from 'features/canvas/store/actions'; -import { startAppListening } from '..'; import { $logger } from 'app/logging/logger'; +import { canvasDownloadedAsImage } from 'features/canvas/store/actions'; import { downloadBlob } from 'features/canvas/util/downloadBlob'; import { getBaseLayerBlob } from 'features/canvas/util/getBaseLayerBlob'; import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; +import { startAppListening } from '..'; + export const addCanvasDownloadedAsImageListener = () => { startAppListening({ actionCreator: canvasDownloadedAsImage, diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasImageToControlNet.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasImageToControlNet.ts index 01eda311e5..b9b08d2b4e 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasImageToControlNet.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasImageToControlNet.ts @@ -1,11 +1,12 @@ import { logger } from 'app/logging/logger'; +import { canvasImageToControlAdapter } from 'features/canvas/store/actions'; import { getBaseLayerBlob } from 'features/canvas/util/getBaseLayerBlob'; import { controlAdapterImageChanged } from 'features/controlAdapters/store/controlAdaptersSlice'; import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; import { imagesApi } from 'services/api/endpoints/images'; + import { startAppListening } from '..'; -import { canvasImageToControlAdapter } from 'features/canvas/store/actions'; export const addCanvasImageToControlNetListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskSavedToGallery.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskSavedToGallery.ts index f814d94f3a..d8a3c3827d 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskSavedToGallery.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskSavedToGallery.ts @@ -2,9 +2,10 @@ import { logger } from 'app/logging/logger'; import { canvasMaskSavedToGallery } from 'features/canvas/store/actions'; import { getCanvasData } from 'features/canvas/util/getCanvasData'; import { addToast } from 'features/system/store/systemSlice'; -import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; import { t } from 'i18next'; +import { imagesApi } from 'services/api/endpoints/images'; + +import { startAppListening } from '..'; export const addCanvasMaskSavedToGalleryListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskToControlNet.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskToControlNet.ts index ccd5a3972b..cf1658cb41 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskToControlNet.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMaskToControlNet.ts @@ -5,6 +5,7 @@ import { controlAdapterImageChanged } from 'features/controlAdapters/store/contr import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; import { imagesApi } from 'services/api/endpoints/images'; + import { startAppListening } from '..'; export const addCanvasMaskToControlNetListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMerged.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMerged.ts index 35c1affb97..defbb04402 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMerged.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasMerged.ts @@ -4,9 +4,10 @@ import { setMergedCanvas } from 'features/canvas/store/canvasSlice'; import { getFullBaseLayerBlob } from 'features/canvas/util/getFullBaseLayerBlob'; import { getCanvasBaseLayer } from 'features/canvas/util/konvaInstanceProvider'; import { addToast } from 'features/system/store/systemSlice'; -import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; import { t } from 'i18next'; +import { imagesApi } from 'services/api/endpoints/images'; + +import { startAppListening } from '..'; export const addCanvasMergedListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts index 23e2cebe53..f09cbe12d1 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/canvasSavedToGallery.ts @@ -2,9 +2,10 @@ import { logger } from 'app/logging/logger'; import { canvasSavedToGallery } from 'features/canvas/store/actions'; import { getBaseLayerBlob } from 'features/canvas/util/getBaseLayerBlob'; import { addToast } from 'features/system/store/systemSlice'; -import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; import { t } from 'i18next'; +import { imagesApi } from 'services/api/endpoints/images'; + +import { startAppListening } from '..'; export const addCanvasSavedToGalleryListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts index b16c2d8556..8f5e2964d5 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetAutoProcess.ts @@ -1,6 +1,6 @@ -import { AnyListenerPredicate } from '@reduxjs/toolkit'; +import type { AnyListenerPredicate } from '@reduxjs/toolkit'; import { logger } from 'app/logging/logger'; -import { RootState } from 'app/store/store'; +import type { RootState } from 'app/store/store'; import { controlAdapterImageProcessed } from 'features/controlAdapters/store/actions'; import { controlAdapterAutoConfigToggled, @@ -10,9 +10,10 @@ import { controlAdapterProcessortTypeChanged, selectControlAdapterById, } from 'features/controlAdapters/store/controlAdaptersSlice'; -import { startAppListening } from '..'; import { isControlNetOrT2IAdapter } from 'features/controlAdapters/store/types'; +import { startAppListening } from '..'; + type AnyControlAdapterParamChangeAction = | ReturnType | ReturnType diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts index 3d35caebf6..61316231cc 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlNetImageProcessed.ts @@ -8,14 +8,15 @@ import { selectControlAdapterById, } from 'features/controlAdapters/store/controlAdaptersSlice'; import { isControlNetOrT2IAdapter } from 'features/controlAdapters/store/types'; +import { isImageOutput } from 'features/nodes/types/common'; import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; import { imagesApi } from 'services/api/endpoints/images'; import { queueApi } from 'services/api/endpoints/queue'; -import { BatchConfig, ImageDTO } from 'services/api/types'; +import type { BatchConfig, ImageDTO } from 'services/api/types'; import { socketInvocationComplete } from 'services/events/actions'; + import { startAppListening } from '..'; -import { isImageOutput } from 'features/nodes/types/common'; export const addControlNetImageProcessedListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedCanvas.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedCanvas.ts index bcaf778b6e..a803441c59 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedCanvas.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedCanvas.ts @@ -14,7 +14,8 @@ import { buildCanvasGraph } from 'features/nodes/util/graph/buildCanvasGraph'; import { prepareLinearUIBatch } from 'features/nodes/util/graph/buildLinearBatchConfig'; import { imagesApi } from 'services/api/endpoints/images'; import { queueApi } from 'services/api/endpoints/queue'; -import { ImageDTO } from 'services/api/types'; +import type { ImageDTO } from 'services/api/types'; + import { startAppListening } from '..'; /** diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedLinear.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedLinear.ts index faeecfb44c..547f5e5948 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedLinear.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedLinear.ts @@ -5,6 +5,7 @@ import { buildLinearSDXLImageToImageGraph } from 'features/nodes/util/graph/buil import { buildLinearSDXLTextToImageGraph } from 'features/nodes/util/graph/buildLinearSDXLTextToImageGraph'; import { buildLinearTextToImageGraph } from 'features/nodes/util/graph/buildLinearTextToImageGraph'; import { queueApi } from 'services/api/endpoints/queue'; + import { startAppListening } from '..'; export const addEnqueueRequestedLinear = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts index 30c568342a..7fd98b890c 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes.ts @@ -2,7 +2,8 @@ import { enqueueRequested } from 'app/store/actions'; import { buildNodesGraph } from 'features/nodes/util/graph/buildNodesGraph'; import { buildWorkflow } from 'features/nodes/util/workflow/buildWorkflow'; import { queueApi } from 'services/api/endpoints/queue'; -import { BatchConfig } from 'services/api/types'; +import type { BatchConfig } from 'services/api/types'; + import { startAppListening } from '..'; export const addEnqueueRequestedNodes = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageAddedToBoard.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageAddedToBoard.ts index 039cbb657a..61da8ff669 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageAddedToBoard.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageAddedToBoard.ts @@ -1,5 +1,6 @@ import { logger } from 'app/logging/logger'; import { imagesApi } from 'services/api/endpoints/images'; + import { startAppListening } from '..'; export const addImageAddedToBoardFulfilledListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts index f23b7284fe..bbceb016f9 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeleted.ts @@ -18,6 +18,7 @@ import { clamp, forEach } from 'lodash-es'; import { api } from 'services/api'; import { imagesApi } from 'services/api/endpoints/images'; import { imagesAdapter } from 'services/api/util'; + import { startAppListening } from '..'; export const addRequestedSingleImageDeletionListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts index 0ea5caf1d6..452f599fd4 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDropped.ts @@ -6,16 +6,17 @@ import { controlAdapterImageChanged, controlAdapterIsEnabledChanged, } from 'features/controlAdapters/store/controlAdaptersSlice'; -import { +import type { TypesafeDraggableData, TypesafeDroppableData, } from 'features/dnd/types'; import { imageSelected } from 'features/gallery/store/gallerySlice'; import { fieldImageValueChanged } from 'features/nodes/store/nodesSlice'; +import { workflowExposedFieldAdded } from 'features/nodes/store/workflowSlice'; import { initialImageChanged } from 'features/parameters/store/generationSlice'; import { imagesApi } from 'services/api/endpoints/images'; + import { startAppListening } from '../'; -import { workflowExposedFieldAdded } from 'features/nodes/store/workflowSlice'; export const dndDropped = createAction<{ overData: TypesafeDroppableData; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageRemovedFromBoard.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageRemovedFromBoard.ts index a8bf0e6791..4c21a750f1 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageRemovedFromBoard.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageRemovedFromBoard.ts @@ -1,5 +1,6 @@ import { logger } from 'app/logging/logger'; import { imagesApi } from 'services/api/endpoints/images'; + import { startAppListening } from '..'; export const addImageRemovedFromBoardFulfilledListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts index 1c07caad29..ccc14165a3 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageToDeleteSelected.ts @@ -4,6 +4,7 @@ import { imagesToDeleteSelected, isModalOpenChanged, } from 'features/deleteImageModal/store/slice'; + import { startAppListening } from '..'; export const addImageToDeleteSelectedListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts index 8b1a374207..196498a0f4 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageUploaded.ts @@ -1,4 +1,4 @@ -import { UseToastOptions } from '@chakra-ui/react'; +import type { UseToastOptions } from '@chakra-ui/react'; import { logger } from 'app/logging/logger'; import { setInitialCanvasImage } from 'features/canvas/store/canvasSlice'; import { @@ -11,9 +11,10 @@ import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; import { omit } from 'lodash-es'; import { boardsApi } from 'services/api/endpoints/boards'; -import { startAppListening } from '..'; import { imagesApi } from 'services/api/endpoints/images'; +import { startAppListening } from '..'; + export const addImageUploadedFulfilledListener = () => { startAppListening({ matcher: imagesApi.endpoints.uploadImage.matchFulfilled, diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesStarred.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesStarred.ts index 624fd0aa00..064e9876fc 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesStarred.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesStarred.ts @@ -1,7 +1,8 @@ -import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; import { selectionChanged } from 'features/gallery/store/gallerySlice'; -import { ImageDTO } from 'services/api/types'; +import { imagesApi } from 'services/api/endpoints/images'; +import type { ImageDTO } from 'services/api/types'; + +import { startAppListening } from '..'; export const addImagesStarredListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesUnstarred.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesUnstarred.ts index f4fc12718e..7174bd066d 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesUnstarred.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imagesUnstarred.ts @@ -1,7 +1,8 @@ -import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; import { selectionChanged } from 'features/gallery/store/gallerySlice'; -import { ImageDTO } from 'services/api/types'; +import { imagesApi } from 'services/api/endpoints/images'; +import type { ImageDTO } from 'services/api/types'; + +import { startAppListening } from '..'; export const addImagesUnstarredListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/initialImageSelected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/initialImageSelected.ts index 7748ca6fe5..09598440a5 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/initialImageSelected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/initialImageSelected.ts @@ -3,6 +3,7 @@ import { initialImageChanged } from 'features/parameters/store/generationSlice'; import { addToast } from 'features/system/store/systemSlice'; import { makeToast } from 'features/system/util/makeToast'; import { t } from 'i18next'; + import { startAppListening } from '..'; export const addInitialImageSelectedListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts index e4175affe6..dad75f9004 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelSelected.ts @@ -7,17 +7,18 @@ import { import { loraRemoved } from 'features/lora/store/loraSlice'; import { modelSelected } from 'features/parameters/store/actions'; import { + heightChanged, modelChanged, - setHeight, - setWidth, vaeSelected, + widthChanged, } from 'features/parameters/store/generationSlice'; +import { zParameterModel } from 'features/parameters/types/parameterSchemas'; import { addToast } from 'features/system/store/systemSlice'; import { makeToast } from 'features/system/util/makeToast'; import { t } from 'i18next'; import { forEach } from 'lodash-es'; + import { startAppListening } from '..'; -import { zParameterModel } from 'features/parameters/types/parameterSchemas'; export const addModelSelectedListener = () => { startAppListening({ @@ -89,12 +90,12 @@ export const addModelSelectedListener = () => { state.ui.shouldAutoChangeDimensions ) { if (['sdxl', 'sdxl-refiner'].includes(newModel.base_model)) { - dispatch(setWidth(1024)); - dispatch(setHeight(1024)); + dispatch(widthChanged(1024)); + dispatch(heightChanged(1024)); dispatch(setBoundingBoxDimensions({ width: 1024, height: 1024 })); } else { - dispatch(setWidth(512)); - dispatch(setHeight(512)); + dispatch(widthChanged(512)); + dispatch(heightChanged(512)); dispatch(setBoundingBoxDimensions({ width: 512, height: 512 })); } } diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts index afb390470b..78cdcc36b8 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/modelsLoaded.ts @@ -12,20 +12,17 @@ import { } from 'features/parameters/store/generationSlice'; import { zParameterModel, - zParameterSDXLRefinerModel, zParameterVAEModel, } from 'features/parameters/types/parameterSchemas'; -import { - refinerModelChanged, - setShouldUseSDXLRefiner, -} from 'features/sdxl/store/sdxlSlice'; +import { refinerModelChanged } from 'features/sdxl/store/sdxlSlice'; import { forEach, some } from 'lodash-es'; import { mainModelsAdapter, modelsApi, vaeModelsAdapter, } from 'services/api/endpoints/models'; -import { TypeGuardFor } from 'services/api/types'; +import type { TypeGuardFor } from 'services/api/types'; + import { startAppListening } from '..'; export const addModelsLoadedListener = () => { @@ -102,7 +99,6 @@ export const addModelsLoadedListener = () => { if (models.length === 0) { // No models loaded at all dispatch(refinerModelChanged(null)); - dispatch(setShouldUseSDXLRefiner(false)); return; } @@ -115,21 +111,10 @@ export const addModelsLoadedListener = () => { ) : false; - if (isCurrentModelAvailable) { + if (!isCurrentModelAvailable) { + dispatch(refinerModelChanged(null)); return; } - - const result = zParameterSDXLRefinerModel.safeParse(models[0]); - - if (!result.success) { - log.error( - { error: result.error.format() }, - 'Failed to parse SDXL Refiner Model' - ); - return; - } - - dispatch(refinerModelChanged(result.data)); }, }); startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/promptChanged.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/promptChanged.ts index a48a84a30f..131926e628 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/promptChanged.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/promptChanged.ts @@ -11,6 +11,7 @@ import { import { setPositivePrompt } from 'features/parameters/store/generationSlice'; import { utilitiesApi } from 'services/api/endpoints/utilities'; import { appSocketConnected } from 'services/events/actions'; + import { startAppListening } from '..'; const matcher = isAnyOf( diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts index ff44317fcf..05a509b155 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/receivedOpenAPISchema.ts @@ -4,6 +4,7 @@ import { nodeTemplatesBuilt } from 'features/nodes/store/nodesSlice'; import { parseSchema } from 'features/nodes/util/schema/parseSchema'; import { size } from 'lodash-es'; import { receivedOpenAPISchema } from 'services/api/thunks/schema'; + import { startAppListening } from '..'; export const addReceivedOpenAPISchemaListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketConnected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketConnected.ts index 9957b7f117..4039cf2406 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketConnected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketConnected.ts @@ -1,10 +1,11 @@ import { logger } from 'app/logging/logger'; +import { isInitializedChanged } from 'features/system/store/systemSlice'; import { size } from 'lodash-es'; import { api } from 'services/api'; import { receivedOpenAPISchema } from 'services/api/thunks/schema'; import { appSocketConnected, socketConnected } from 'services/events/actions'; + import { startAppListening } from '../..'; -import { isInitializedChanged } from 'features/system/store/systemSlice'; export const addSocketConnectedEventListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketDisconnected.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketDisconnected.ts index 80e6fb0813..8157c5bf85 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketDisconnected.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketDisconnected.ts @@ -3,6 +3,7 @@ import { appSocketDisconnected, socketDisconnected, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addSocketDisconnectedEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGeneratorProgress.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGeneratorProgress.ts index 44d6ceed63..77fcf85ad1 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGeneratorProgress.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGeneratorProgress.ts @@ -3,6 +3,7 @@ import { appSocketGeneratorProgress, socketGeneratorProgress, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addGeneratorProgressEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGraphExecutionStateComplete.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGraphExecutionStateComplete.ts index 23ab9a8cb3..32946687e0 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGraphExecutionStateComplete.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketGraphExecutionStateComplete.ts @@ -3,6 +3,7 @@ import { appSocketGraphExecutionStateComplete, socketGraphExecutionStateComplete, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addGraphExecutionStateCompleteEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts index 364a2658bf..8eac0f51ae 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationComplete.ts @@ -7,6 +7,7 @@ import { imageSelected, } from 'features/gallery/store/gallerySlice'; import { IMAGE_CATEGORIES } from 'features/gallery/store/types'; +import { isImageOutput } from 'features/nodes/types/common'; import { LINEAR_UI_OUTPUT, nodeIDDenyList, @@ -18,8 +19,8 @@ import { appSocketInvocationComplete, socketInvocationComplete, } from 'services/events/actions'; + import { startAppListening } from '../..'; -import { isImageOutput } from 'features/nodes/types/common'; // These nodes output an image, but do not actually *save* an image, so we don't want to handle the gallery logic on them const nodeTypeDenylist = ['load_image', 'image']; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationError.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationError.ts index ce15b8398c..3f5d4c21c4 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationError.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationError.ts @@ -3,6 +3,7 @@ import { appSocketInvocationError, socketInvocationError, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addInvocationErrorEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationRetrievalError.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationRetrievalError.ts index aa88457eb7..5700b73d39 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationRetrievalError.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationRetrievalError.ts @@ -3,6 +3,7 @@ import { appSocketInvocationRetrievalError, socketInvocationRetrievalError, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addInvocationRetrievalErrorEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationStarted.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationStarted.ts index 50f52e2851..8dd7730143 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationStarted.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketInvocationStarted.ts @@ -3,6 +3,7 @@ import { appSocketInvocationStarted, socketInvocationStarted, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addInvocationStartedEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketModelLoad.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketModelLoad.ts index 0f3fabbc1e..cef3b1fe6d 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketModelLoad.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketModelLoad.ts @@ -5,6 +5,7 @@ import { socketModelLoadCompleted, socketModelLoadStarted, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addModelLoadEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketQueueItemStatusChanged.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketQueueItemStatusChanged.ts index 8136285248..370fd35407 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketQueueItemStatusChanged.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketQueueItemStatusChanged.ts @@ -4,6 +4,7 @@ import { appSocketQueueItemStatusChanged, socketQueueItemStatusChanged, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addSocketQueueItemStatusChangedEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSessionRetrievalError.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSessionRetrievalError.ts index 7efb7f463a..e37b972064 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSessionRetrievalError.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSessionRetrievalError.ts @@ -3,6 +3,7 @@ import { appSocketSessionRetrievalError, socketSessionRetrievalError, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addSessionRetrievalErrorEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSubscribed.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSubscribed.ts index 1f9354ee67..9c5e73981a 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSubscribed.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketSubscribed.ts @@ -3,6 +3,7 @@ import { appSocketSubscribedSession, socketSubscribedSession, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addSocketSubscribedEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketUnsubscribed.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketUnsubscribed.ts index 2f4f65edc6..05984ba67f 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketUnsubscribed.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/socketio/socketUnsubscribed.ts @@ -3,6 +3,7 @@ import { appSocketUnsubscribedSession, socketUnsubscribedSession, } from 'services/events/actions'; + import { startAppListening } from '../..'; export const addSocketUnsubscribedEventListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts index c00cf78beb..8a38be1b77 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/stagingAreaImageSaved.ts @@ -1,8 +1,9 @@ import { stagingAreaImageSaved } from 'features/canvas/store/actions'; import { addToast } from 'features/system/store/systemSlice'; -import { imagesApi } from 'services/api/endpoints/images'; -import { startAppListening } from '..'; import { t } from 'i18next'; +import { imagesApi } from 'services/api/endpoints/images'; + +import { startAppListening } from '..'; export const addStagingAreaImageSavedListener = () => { startAppListening({ diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts index 6791324fdd..f58c6c1f33 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/tabChanged.ts @@ -2,6 +2,7 @@ import { modelChanged } from 'features/parameters/store/generationSlice'; import { setActiveTab } from 'features/ui/store/uiSlice'; import { NON_REFINER_BASE_MODELS } from 'services/api/constants'; import { mainModelsAdapter, modelsApi } from 'services/api/endpoints/models'; + import { startAppListening } from '..'; export const addTabChangedListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/updateAllNodesRequested.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/updateAllNodesRequested.ts index 1df083c795..11bad0c221 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/updateAllNodesRequested.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/updateAllNodesRequested.ts @@ -1,15 +1,16 @@ import { logger } from 'app/logging/logger'; import { updateAllNodesRequested } from 'features/nodes/store/actions'; import { nodeReplaced } from 'features/nodes/store/nodesSlice'; +import { NodeUpdateError } from 'features/nodes/types/error'; +import { isInvocationNode } from 'features/nodes/types/invocation'; import { getNeedsUpdate, updateNode, } from 'features/nodes/util/node/nodeUpdate'; -import { NodeUpdateError } from 'features/nodes/types/error'; -import { isInvocationNode } from 'features/nodes/types/invocation'; import { addToast } from 'features/system/store/systemSlice'; import { makeToast } from 'features/system/util/makeToast'; import { t } from 'i18next'; + import { startAppListening } from '..'; export const addUpdateAllNodesRequestedListener = () => { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts index 1b4211087a..75c67a08cc 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/upscaleRequested.ts @@ -2,12 +2,13 @@ import { createAction } from '@reduxjs/toolkit'; import { logger } from 'app/logging/logger'; import { parseify } from 'common/util/serialize'; import { buildAdHocUpscaleGraph } from 'features/nodes/util/graph/buildAdHocUpscaleGraph'; +import { createIsAllowedToUpscaleSelector } from 'features/parameters/hooks/useIsAllowedToUpscale'; import { addToast } from 'features/system/store/systemSlice'; import { t } from 'i18next'; import { queueApi } from 'services/api/endpoints/queue'; +import type { BatchConfig, ImageDTO } from 'services/api/types'; + import { startAppListening } from '..'; -import { BatchConfig, ImageDTO } from 'services/api/types'; -import { createIsAllowedToUpscaleSelector } from 'features/parameters/hooks/useIsAllowedToUpscale'; export const upscaleRequested = createAction<{ imageDTO: ImageDTO }>( `upscale/upscaleRequested` diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts index 3dff9a906b..0a0803fc07 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/workflowLoadRequested.ts @@ -1,7 +1,9 @@ import { logger } from 'app/logging/logger'; import { parseify } from 'common/util/serialize'; -import { workflowLoadRequested } from 'features/nodes/store/actions'; -import { workflowLoaded } from 'features/nodes/store/actions'; +import { + workflowLoaded, + workflowLoadRequested, +} from 'features/nodes/store/actions'; import { $flow } from 'features/nodes/store/reactFlowInstance'; import { WorkflowMigrationError, @@ -14,6 +16,7 @@ import { setActiveTab } from 'features/ui/store/uiSlice'; import { t } from 'i18next'; import { z } from 'zod'; import { fromZodError } from 'zod-validation-error'; + import { startAppListening } from '..'; export const addWorkflowLoadRequestedListener = () => { diff --git a/invokeai/frontend/web/src/app/store/nanostores/README.md b/invokeai/frontend/web/src/app/store/nanostores/README.md new file mode 100644 index 0000000000..9b85e586ba --- /dev/null +++ b/invokeai/frontend/web/src/app/store/nanostores/README.md @@ -0,0 +1,3 @@ +# nanostores + +For non-serializable data that needs to be available throughout the app, or when redux is not appropriate, use nanostores. diff --git a/invokeai/frontend/web/src/app/store/nanostores/customStarUI.ts b/invokeai/frontend/web/src/app/store/nanostores/customStarUI.ts index 0459c2f31f..bb815164e5 100644 --- a/invokeai/frontend/web/src/app/store/nanostores/customStarUI.ts +++ b/invokeai/frontend/web/src/app/store/nanostores/customStarUI.ts @@ -1,4 +1,4 @@ -import { MenuItemProps } from '@chakra-ui/react'; +import type { MenuItemProps } from '@chakra-ui/react'; import { atom } from 'nanostores'; export type CustomStarUi = { diff --git a/invokeai/frontend/web/src/app/store/nanostores/headerComponent.ts b/invokeai/frontend/web/src/app/store/nanostores/headerComponent.ts index 90a4775ff9..0b8a1398ec 100644 --- a/invokeai/frontend/web/src/app/store/nanostores/headerComponent.ts +++ b/invokeai/frontend/web/src/app/store/nanostores/headerComponent.ts @@ -1,4 +1,4 @@ import { atom } from 'nanostores'; -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; export const $headerComponent = atom(undefined); diff --git a/invokeai/frontend/web/src/app/store/nanostores/index.ts b/invokeai/frontend/web/src/app/store/nanostores/index.ts deleted file mode 100644 index ae43ed3035..0000000000 --- a/invokeai/frontend/web/src/app/store/nanostores/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -/** - * For non-serializable data that needs to be available throughout the app, or when redux is not appropriate, use nanostores. - */ diff --git a/invokeai/frontend/web/src/app/store/nanostores/store.ts b/invokeai/frontend/web/src/app/store/nanostores/store.ts index 4e16245c6c..2bf2700893 100644 --- a/invokeai/frontend/web/src/app/store/nanostores/store.ts +++ b/invokeai/frontend/web/src/app/store/nanostores/store.ts @@ -1,4 +1,4 @@ -import { createStore } from 'app/store/store'; +import type { createStore } from 'app/store/store'; import { atom } from 'nanostores'; export const $store = atom< diff --git a/invokeai/frontend/web/src/app/store/store.ts b/invokeai/frontend/web/src/app/store/store.ts index 6b31f6f8d4..56e879ced3 100644 --- a/invokeai/frontend/web/src/app/store/store.ts +++ b/invokeai/frontend/web/src/app/store/store.ts @@ -1,6 +1,5 @@ +import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'; import { - ThunkDispatch, - UnknownAction, autoBatchEnhancer, combineReducers, configureStore, @@ -11,6 +10,7 @@ import controlAdaptersReducer from 'features/controlAdapters/store/controlAdapte import deleteImageModalReducer from 'features/deleteImageModal/store/slice'; import dynamicPromptsReducer from 'features/dynamicPrompts/store/dynamicPromptsSlice'; import galleryReducer from 'features/gallery/store/gallerySlice'; +import hrfReducer from 'features/hrf/store/hrfSlice'; import loraReducer from 'features/lora/store/loraSlice'; import modelmanagerReducer from 'features/modelManager/store/modelManagerSlice'; import nodesReducer from 'features/nodes/store/nodesSlice'; @@ -21,12 +21,14 @@ import queueReducer from 'features/queue/store/queueSlice'; import sdxlReducer from 'features/sdxl/store/sdxlSlice'; import configReducer from 'features/system/store/configSlice'; import systemReducer from 'features/system/store/systemSlice'; -import hotkeysReducer from 'features/ui/store/hotkeysSlice'; import uiReducer from 'features/ui/store/uiSlice'; import { createStore as createIDBKeyValStore, get, set } from 'idb-keyval'; import dynamicMiddlewares from 'redux-dynamic-middlewares'; -import { Driver, rememberEnhancer, rememberReducer } from 'redux-remember'; +import type { Driver } from 'redux-remember'; +import { rememberEnhancer, rememberReducer } from 'redux-remember'; import { api } from 'services/api'; +import { authToastMiddleware } from 'services/api/authToastMiddleware'; + import { STORAGE_PREFIX } from './constants'; import { serialize } from './enhancers/reduxRemember/serialize'; import { unserialize } from './enhancers/reduxRemember/unserialize'; @@ -34,7 +36,6 @@ import { actionSanitizer } from './middleware/devtools/actionSanitizer'; import { actionsDenylist } from './middleware/devtools/actionsDenylist'; import { stateSanitizer } from './middleware/devtools/stateSanitizer'; import { listenerMiddleware } from './middleware/listenerMiddleware'; -import { authToastMiddleware } from 'services/api/authToastMiddleware'; const allReducers = { canvas: canvasReducer, @@ -45,7 +46,6 @@ const allReducers = { system: systemReducer, config: configReducer, ui: uiReducer, - hotkeys: hotkeysReducer, controlAdapters: controlAdaptersReducer, dynamicPrompts: dynamicPromptsReducer, deleteImageModal: deleteImageModalReducer, @@ -55,6 +55,7 @@ const allReducers = { sdxl: sdxlReducer, queue: queueReducer, workflow: workflowReducer, + hrf: hrfReducer, [api.reducerPath]: api.reducer, }; @@ -76,6 +77,7 @@ const rememberedKeys: (keyof typeof allReducers)[] = [ 'dynamicPrompts', 'lora', 'modelmanager', + 'hrf', ]; // Create a custom idb-keyval store (just needed to customize the name) @@ -147,4 +149,6 @@ export type RootState = ReturnType['getState']>; // eslint-disable-next-line @typescript-eslint/no-explicit-any export type AppThunkDispatch = ThunkDispatch; export type AppDispatch = ReturnType['dispatch']; -export const stateSelector = (state: RootState) => state; +export function stateSelector(state: RootState) { + return state; +} diff --git a/invokeai/frontend/web/src/app/store/storeHooks.ts b/invokeai/frontend/web/src/app/store/storeHooks.ts index f0400c3a3c..f1a9aa979c 100644 --- a/invokeai/frontend/web/src/app/store/storeHooks.ts +++ b/invokeai/frontend/web/src/app/store/storeHooks.ts @@ -1,5 +1,6 @@ -import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; -import { AppThunkDispatch, RootState } from 'app/store/store'; +import type { AppThunkDispatch, RootState } from 'app/store/store'; +import type { TypedUseSelectorHook } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; // Use throughout your app instead of plain `useDispatch` and `useSelector` export const useAppDispatch = () => useDispatch(); diff --git a/invokeai/frontend/web/src/app/types/invokeai.ts b/invokeai/frontend/web/src/app/types/invokeai.ts index 7e4cfb39aa..8658b9dcb7 100644 --- a/invokeai/frontend/web/src/app/types/invokeai.ts +++ b/invokeai/frontend/web/src/app/types/invokeai.ts @@ -1,6 +1,6 @@ -import { CONTROLNET_PROCESSORS } from 'features/controlAdapters/store/constants'; -import { InvokeTabName } from 'features/ui/store/tabMap'; -import { O } from 'ts-toolbelt'; +import type { CONTROLNET_PROCESSORS } from 'features/controlAdapters/store/constants'; +import type { InvokeTabName } from 'features/ui/store/tabMap'; +import type { O } from 'ts-toolbelt'; /** * A disable-able application feature diff --git a/invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.stories.tsx b/invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.stories.tsx new file mode 100644 index 0000000000..0b6e6b0a59 --- /dev/null +++ b/invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.stories.tsx @@ -0,0 +1,64 @@ +import { Flex } from '@chakra-ui/layout'; +import type { Meta, StoryObj } from '@storybook/react'; +import { InvControl } from 'common/components/InvControl/InvControl'; +import { InvSlider } from 'common/components/InvSlider/InvSlider'; +import { useState } from 'react'; + +import { AspectRatioPreview } from './AspectRatioPreview'; + +const meta: Meta = { + title: 'Components/AspectRatioPreview', + tags: ['autodocs'], + component: AspectRatioPreview, +}; + +export default meta; +type Story = StoryObj; + +const MIN = 64; +const MAX = 1024; +const STEP = 64; +const FINE_STEP = 8; +const INITIAL = 512; +const MARKS = Array.from( + { length: Math.floor(MAX / STEP) }, + (_, i) => MIN + i * STEP +); + +const Component = () => { + const [width, setWidth] = useState(INITIAL); + const [height, setHeight] = useState(INITIAL); + return ( + + + + + + + + + + + + ); +}; + +export const AspectRatioWithSliderInvControls: Story = { + render: Component, +}; diff --git a/invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.tsx b/invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.tsx new file mode 100644 index 0000000000..0a05fbd2c3 --- /dev/null +++ b/invokeai/frontend/web/src/common/components/AspectRatioPreview/AspectRatioPreview.tsx @@ -0,0 +1,60 @@ +import { Flex, Icon } from '@chakra-ui/react'; +import { useSize } from '@chakra-ui/react-use-size'; +import { AnimatePresence, motion } from 'framer-motion'; +import { useRef } from 'react'; +import { FaImage } from 'react-icons/fa'; + +import { + BOX_SIZE_CSS_CALC, + ICON_CONTAINER_STYLES, + MOTION_ICON_ANIMATE, + MOTION_ICON_EXIT, + MOTION_ICON_INITIAL, +} from './constants'; +import { useAspectRatioPreviewState } from './hooks'; +import type { AspectRatioPreviewProps } from './types'; + +export const AspectRatioPreview = (props: AspectRatioPreviewProps) => { + const { width: _width, height: _height, icon = FaImage } = props; + const containerRef = useRef(null); + const containerSize = useSize(containerRef); + + const { width, height, shouldShowIcon } = useAspectRatioPreviewState({ + width: _width, + height: _height, + containerSize, + }); + + return ( + + + + {shouldShowIcon && ( + + + + )} + + + + ); +}; diff --git a/invokeai/frontend/web/src/common/components/AspectRatioPreview/constants.ts b/invokeai/frontend/web/src/common/components/AspectRatioPreview/constants.ts new file mode 100644 index 0000000000..34f3a6941a --- /dev/null +++ b/invokeai/frontend/web/src/common/components/AspectRatioPreview/constants.ts @@ -0,0 +1,23 @@ +// When the aspect ratio is between these two values, we show the icon (experimentally determined) +export const ICON_LOW_CUTOFF = 0.23; +export const ICON_HIGH_CUTOFF = 1 / ICON_LOW_CUTOFF; +export const ICON_SIZE_PX = 48; +export const ICON_PADDING_PX = 16; +export const BOX_SIZE_CSS_CALC = `min(${ICON_SIZE_PX}px, calc(100% - ${ICON_PADDING_PX}px))`; +export const MOTION_ICON_INITIAL = { + opacity: 0, +}; +export const MOTION_ICON_ANIMATE = { + opacity: 1, + transition: { duration: 0.1 }, +}; +export const MOTION_ICON_EXIT = { + opacity: 0, + transition: { duration: 0.1 }, +}; +export const ICON_CONTAINER_STYLES = { + width: '100%', + height: '100%', + alignItems: 'center', + justifyContent: 'center', +}; diff --git a/invokeai/frontend/web/src/common/components/AspectRatioPreview/hooks.ts b/invokeai/frontend/web/src/common/components/AspectRatioPreview/hooks.ts new file mode 100644 index 0000000000..47eab46844 --- /dev/null +++ b/invokeai/frontend/web/src/common/components/AspectRatioPreview/hooks.ts @@ -0,0 +1,48 @@ +import { useMemo } from 'react'; + +import { ICON_HIGH_CUTOFF, ICON_LOW_CUTOFF } from './constants'; + +type Dimensions = { + width: number; + height: number; +}; + +type UseAspectRatioPreviewStateArg = { + width: number; + height: number; + containerSize?: Dimensions; +}; +type UseAspectRatioPreviewState = ( + arg: UseAspectRatioPreviewStateArg +) => Dimensions & { shouldShowIcon: boolean }; + +export const useAspectRatioPreviewState: UseAspectRatioPreviewState = ({ + width: _width, + height: _height, + containerSize, +}) => { + const dimensions = useMemo(() => { + if (!containerSize) { + return { width: 0, height: 0, shouldShowIcon: false }; + } + + const aspectRatio = _width / _height; + let width = _width; + let height = _height; + + if (_width > _height) { + width = containerSize.width; + height = width / aspectRatio; + } else { + height = containerSize.height; + width = height * aspectRatio; + } + + const shouldShowIcon = + aspectRatio < ICON_HIGH_CUTOFF && aspectRatio > ICON_LOW_CUTOFF; + + return { width, height, shouldShowIcon }; + }, [_height, _width, containerSize]); + + return dimensions; +}; diff --git a/invokeai/frontend/web/src/common/components/AspectRatioPreview/types.ts b/invokeai/frontend/web/src/common/components/AspectRatioPreview/types.ts new file mode 100644 index 0000000000..7319e7112b --- /dev/null +++ b/invokeai/frontend/web/src/common/components/AspectRatioPreview/types.ts @@ -0,0 +1,7 @@ +import type { IconType } from 'react-icons'; + +export type AspectRatioPreviewProps = { + width: number; + height: number; + icon?: IconType; +}; diff --git a/invokeai/frontend/web/src/common/components/GreyscaleInvokeAIIcon.tsx b/invokeai/frontend/web/src/common/components/GreyscaleInvokeAIIcon.tsx deleted file mode 100644 index a6c6cdca18..0000000000 --- a/invokeai/frontend/web/src/common/components/GreyscaleInvokeAIIcon.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Box, Image } from '@chakra-ui/react'; -import InvokeAILogoImage from 'assets/images/logo.png'; -import { memo } from 'react'; - -const GreyscaleInvokeAIIcon = () => ( - - invoke-ai-logo - -); - -export default memo(GreyscaleInvokeAIIcon); diff --git a/invokeai/frontend/web/src/common/components/IAIAlertDialog.tsx b/invokeai/frontend/web/src/common/components/IAIAlertDialog.tsx deleted file mode 100644 index a82095daa3..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIAlertDialog.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { - AlertDialog, - AlertDialogBody, - AlertDialogContent, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogOverlay, - forwardRef, - useDisclosure, -} from '@chakra-ui/react'; -import { - cloneElement, - memo, - ReactElement, - ReactNode, - useCallback, - useRef, -} from 'react'; -import { useTranslation } from 'react-i18next'; -import IAIButton from './IAIButton'; - -type Props = { - acceptButtonText?: string; - acceptCallback: () => void; - cancelButtonText?: string; - cancelCallback?: () => void; - children: ReactNode; - title: string; - triggerComponent: ReactElement; -}; - -const IAIAlertDialog = forwardRef((props: Props, ref) => { - const { t } = useTranslation(); - - const { - acceptButtonText = t('common.accept'), - acceptCallback, - cancelButtonText = t('common.cancel'), - cancelCallback, - children, - title, - triggerComponent, - } = props; - - const { isOpen, onOpen, onClose } = useDisclosure(); - const cancelRef = useRef(null); - - const handleAccept = useCallback(() => { - acceptCallback(); - onClose(); - }, [acceptCallback, onClose]); - - const handleCancel = useCallback(() => { - cancelCallback && cancelCallback(); - onClose(); - }, [cancelCallback, onClose]); - - return ( - <> - {cloneElement(triggerComponent, { - onClick: onOpen, - ref: ref, - })} - - - - - - {title} - - - {children} - - - - {cancelButtonText} - - - {acceptButtonText} - - - - - - - ); -}); -export default memo(IAIAlertDialog); diff --git a/invokeai/frontend/web/src/common/components/IAIButton.tsx b/invokeai/frontend/web/src/common/components/IAIButton.tsx deleted file mode 100644 index 4058296aaf..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIButton.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { - Button, - ButtonProps, - forwardRef, - Tooltip, - TooltipProps, -} from '@chakra-ui/react'; -import { memo, ReactNode } from 'react'; - -export interface IAIButtonProps extends ButtonProps { - tooltip?: TooltipProps['label']; - tooltipProps?: Omit; - isChecked?: boolean; - children: ReactNode; -} - -const IAIButton = forwardRef((props: IAIButtonProps, forwardedRef) => { - const { - children, - tooltip = '', - tooltipProps: { placement = 'top', hasArrow = true, ...tooltipProps } = {}, - isChecked, - ...rest - } = props; - return ( - - - - ); -}); - -export default memo(IAIButton); diff --git a/invokeai/frontend/web/src/common/components/IAICollapse.tsx b/invokeai/frontend/web/src/common/components/IAICollapse.tsx deleted file mode 100644 index ca7140ffa5..0000000000 --- a/invokeai/frontend/web/src/common/components/IAICollapse.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { ChevronUpIcon } from '@chakra-ui/icons'; -import { - Box, - Collapse, - Flex, - Spacer, - Text, - useColorMode, - useDisclosure, -} from '@chakra-ui/react'; -import { AnimatePresence, motion } from 'framer-motion'; -import { PropsWithChildren, memo } from 'react'; -import { mode } from 'theme/util/mode'; - -export type IAIToggleCollapseProps = PropsWithChildren & { - label: string; - activeLabel?: string; - defaultIsOpen?: boolean; -}; - -const IAICollapse = (props: IAIToggleCollapseProps) => { - const { label, activeLabel, children, defaultIsOpen = false } = props; - const { isOpen, onToggle } = useDisclosure({ defaultIsOpen }); - const { colorMode } = useColorMode(); - - return ( - - - {label} - - {activeLabel && ( - - - {activeLabel} - - - )} - - - - - - - {children} - - - - ); -}; - -export default memo(IAICollapse); diff --git a/invokeai/frontend/web/src/common/components/IAIColorPicker.tsx b/invokeai/frontend/web/src/common/components/IAIColorPicker.tsx index b61693c86a..7be6537dfe 100644 --- a/invokeai/frontend/web/src/common/components/IAIColorPicker.tsx +++ b/invokeai/frontend/web/src/common/components/IAIColorPicker.tsx @@ -1,8 +1,14 @@ -import { ChakraProps, Flex } from '@chakra-ui/react'; +import type { ChakraProps } from '@chakra-ui/react'; +import { Flex } from '@chakra-ui/react'; import { memo, useCallback } from 'react'; import { RgbaColorPicker } from 'react-colorful'; -import { ColorPickerBaseProps, RgbaColor } from 'react-colorful/dist/types'; -import IAINumberInput from './IAINumberInput'; +import type { + ColorPickerBaseProps, + RgbaColor, +} from 'react-colorful/dist/types'; + +import { InvControl } from './InvControl/InvControl'; +import { InvNumberInput } from './InvNumberInput/InvNumberInput'; type IAIColorPickerProps = ColorPickerBaseProps & { withNumberInput?: boolean; @@ -52,43 +58,46 @@ const IAIColorPicker = (props: IAIColorPickerProps) => { /> {withNumberInput && ( - - - - + + + + + + + + + + + + )} diff --git a/invokeai/frontend/web/src/common/components/IAIDndImage.tsx b/invokeai/frontend/web/src/common/components/IAIDndImage.tsx index eed8a1e49c..65c4a0e3bf 100644 --- a/invokeai/frontend/web/src/common/components/IAIDndImage.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDndImage.tsx @@ -1,37 +1,29 @@ -import { - ChakraProps, - Flex, - FlexProps, - Icon, - Image, - useColorMode, -} from '@chakra-ui/react'; +import type { ChakraProps, FlexProps } from '@chakra-ui/react'; +import { Flex, Icon, Image } from '@chakra-ui/react'; import { IAILoadingImageFallback, IAINoContentFallback, } from 'common/components/IAIImageFallback'; import ImageMetadataOverlay from 'common/components/ImageMetadataOverlay'; import { useImageUploadButton } from 'common/hooks/useImageUploadButton'; +import type { + TypesafeDraggableData, + TypesafeDroppableData, +} from 'features/dnd/types'; import ImageContextMenu from 'features/gallery/components/ImageContextMenu/ImageContextMenu'; -import { +import type { MouseEvent, ReactElement, ReactNode, SyntheticEvent, - memo, - useCallback, - useState, } from 'react'; +import { memo, useCallback, useState } from 'react'; import { FaImage, FaUpload } from 'react-icons/fa'; -import { ImageDTO, PostUploadAction } from 'services/api/types'; -import { mode } from 'theme/util/mode'; +import type { ImageDTO, PostUploadAction } from 'services/api/types'; + import IAIDraggable from './IAIDraggable'; import IAIDroppable from './IAIDroppable'; import SelectionOverlay from './SelectionOverlay'; -import { - TypesafeDraggableData, - TypesafeDroppableData, -} from 'features/dnd/types'; const defaultUploadElement = ( { dataTestId, } = props; - const { colorMode } = useColorMode(); const [isHovered, setIsHovered] = useState(false); const handleMouseOver = useCallback( (e: MouseEvent) => { @@ -128,10 +119,10 @@ const IAIDndImage = (props: IAIDndImageProps) => { ? {} : { cursor: 'pointer', - bg: mode('base.200', 'base.700')(colorMode), + bg: 'base.700', _hover: { - bg: mode('base.300', 'base.650')(colorMode), - color: mode('base.500', 'base.300')(colorMode), + bg: 'base.650', + color: 'base.300', }, }; @@ -208,7 +199,7 @@ const IAIDndImage = (props: IAIDndImageProps) => { borderRadius: 'base', transitionProperty: 'common', transitionDuration: '0.1s', - color: mode('base.500', 'base.500')(colorMode), + color: 'base.500', ...uploadButtonStyles, }} {...getUploadButtonProps()} diff --git a/invokeai/frontend/web/src/common/components/IAIDndImageIcon.tsx b/invokeai/frontend/web/src/common/components/IAIDndImageIcon.tsx index 01755b764a..9975917203 100644 --- a/invokeai/frontend/web/src/common/components/IAIDndImageIcon.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDndImageIcon.tsx @@ -1,6 +1,8 @@ -import { SystemStyleObject, useColorModeValue } from '@chakra-ui/react'; -import { MouseEvent, ReactElement, memo } from 'react'; -import IAIIconButton from './IAIIconButton'; +import type { SystemStyleObject } from '@chakra-ui/react'; +import type { MouseEvent, ReactElement } from 'react'; +import { memo } from 'react'; + +import { InvIconButton } from './InvIconButton/InvIconButton'; type Props = { onClick: (event: MouseEvent) => void; @@ -12,12 +14,8 @@ type Props = { const IAIDndImageIcon = (props: Props) => { const { onClick, tooltip, icon, styleOverrides } = props; - const resetIconShadow = useColorModeValue( - `drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-600))`, - `drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))` - ); return ( - { transitionDuration: 'normal', fill: 'base.100', _hover: { fill: 'base.50' }, - filter: resetIconShadow, + filter: 'drop-shadow(0px 0px 0.1rem var(--invokeai-colors-base-800))', }, ...styleOverrides, }} diff --git a/invokeai/frontend/web/src/common/components/IAIDraggable.tsx b/invokeai/frontend/web/src/common/components/IAIDraggable.tsx index 363799a573..1efabab12c 100644 --- a/invokeai/frontend/web/src/common/components/IAIDraggable.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDraggable.tsx @@ -1,6 +1,7 @@ -import { Box, BoxProps } from '@chakra-ui/react'; +import type { BoxProps } from '@chakra-ui/react'; +import { Box } from '@chakra-ui/react'; import { useDraggableTypesafe } from 'features/dnd/hooks/typesafeHooks'; -import { TypesafeDraggableData } from 'features/dnd/types'; +import type { TypesafeDraggableData } from 'features/dnd/types'; import { memo, useRef } from 'react'; import { v4 as uuidv4 } from 'uuid'; diff --git a/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx b/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx index f9bb36cc50..83f4e8858c 100644 --- a/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDropOverlay.tsx @@ -1,7 +1,7 @@ -import { Box, Flex, useColorMode } from '@chakra-ui/react'; +import { Box, Flex } from '@chakra-ui/react'; import { motion } from 'framer-motion'; -import { ReactNode, memo, useRef } from 'react'; -import { mode } from 'theme/util/mode'; +import type { ReactNode } from 'react'; +import { memo, useRef } from 'react'; import { v4 as uuidv4 } from 'uuid'; type Props = { @@ -12,7 +12,6 @@ type Props = { export const IAIDropOverlay = (props: Props) => { const { isOver, label = 'Drop' } = props; const motionId = useRef(uuidv4()); - const { colorMode } = useColorMode(); return ( { insetInlineStart: 0, w: 'full', h: 'full', - bg: mode('base.700', 'base.900')(colorMode), + bg: 'base.900', opacity: 0.7, borderRadius: 'base', alignItems: 'center', @@ -63,9 +62,7 @@ export const IAIDropOverlay = (props: Props) => { bottom: 0.5, opacity: 1, borderWidth: 2, - borderColor: isOver - ? mode('base.50', 'base.50')(colorMode) - : mode('base.200', 'base.300')(colorMode), + borderColor: isOver ? 'base.50' : 'base.300', borderRadius: 'lg', borderStyle: 'dashed', transitionProperty: 'common', @@ -77,11 +74,9 @@ export const IAIDropOverlay = (props: Props) => { ; - isChecked?: boolean; -}; - -const IAIIconButton = forwardRef((props: IAIIconButtonProps, forwardedRef) => { - const { role, tooltip = '', tooltipProps, isChecked, ...rest } = props; - - return ( - - - - ); -}); - -IAIIconButton.displayName = 'IAIIconButton'; -export default memo(IAIIconButton); diff --git a/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx b/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx index 3c1a05d527..83f3d79f4a 100644 --- a/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx +++ b/invokeai/frontend/web/src/common/components/IAIImageFallback.tsx @@ -1,15 +1,9 @@ -import { - As, - Flex, - FlexProps, - Icon, - Skeleton, - Spinner, - StyleProps, - Text, -} from '@chakra-ui/react'; +import type { As, FlexProps, StyleProps } from '@chakra-ui/react'; +import { Flex, Icon, Skeleton, Spinner } from '@chakra-ui/react'; import { FaImage } from 'react-icons/fa'; -import { ImageDTO } from 'services/api/types'; +import type { ImageDTO } from 'services/api/types'; + +import { InvText } from './InvText/wrapper'; type Props = { image: ImageDTO | undefined }; @@ -36,10 +30,7 @@ export const IAILoadingImageFallback = (props: Props) => { alignItems: 'center', justifyContent: 'center', borderRadius: 'base', - bg: 'base.200', - _dark: { - bg: 'base.900', - }, + bg: 'base.900', }} > @@ -68,16 +59,13 @@ export const IAINoContentFallback = (props: IAINoImageFallbackProps) => { gap: 2, userSelect: 'none', opacity: 0.7, - color: 'base.700', - _dark: { - color: 'base.500', - }, + color: 'base.500', ...sx, }} {...rest} > {icon && } - {props.label && {props.label}} + {props.label && {props.label}} ); }; @@ -103,16 +91,13 @@ export const IAINoContentFallbackWithSpinner = ( gap: 2, userSelect: 'none', opacity: 0.7, - color: 'base.700', - _dark: { - color: 'base.500', - }, + color: 'base.500', ...sx, }} {...rest} > - {props.label && {props.label}} + {props.label && {props.label}} ); }; diff --git a/invokeai/frontend/web/src/common/components/IAIInformationalPopover/IAIInformationalPopover.tsx b/invokeai/frontend/web/src/common/components/IAIInformationalPopover/IAIInformationalPopover.tsx index 6313bf1dc7..ed9ff41eb2 100644 --- a/invokeai/frontend/web/src/common/components/IAIInformationalPopover/IAIInformationalPopover.tsx +++ b/invokeai/frontend/web/src/common/components/IAIInformationalPopover/IAIInformationalPopover.tsx @@ -1,155 +1,155 @@ +import { Divider, Flex, Image, Portal } from '@chakra-ui/react'; +import { useAppSelector } from 'app/store/storeHooks'; +import { InvButton } from 'common/components/InvButton/InvButton'; +import { InvHeading } from 'common/components/InvHeading/wrapper'; import { - Box, - BoxProps, - Button, - Divider, - Flex, - Heading, - Image, - Popover, - PopoverBody, - PopoverCloseButton, - PopoverContent, - PopoverProps, - PopoverTrigger, - Portal, - Text, - forwardRef, -} from '@chakra-ui/react'; + InvPopover, + InvPopoverBody, + InvPopoverCloseButton, + InvPopoverContent, + InvPopoverTrigger, +} from 'common/components/InvPopover/wrapper'; +import { InvText } from 'common/components/InvText/wrapper'; import { merge, omit } from 'lodash-es'; -import { PropsWithChildren, memo, useCallback, useMemo } from 'react'; +import type { ReactElement } from 'react'; +import { memo, useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { FaExternalLinkAlt } from 'react-icons/fa'; -import { useAppSelector } from 'app/store/storeHooks'; -import { - Feature, - OPEN_DELAY, - POPOVER_DATA, - POPPER_MODIFIERS, -} from './constants'; -type Props = PropsWithChildren & { +import type { Feature, PopoverData } from './constants'; +import { OPEN_DELAY, POPOVER_DATA, POPPER_MODIFIERS } from './constants'; + +type Props = { feature: Feature; - wrapperProps?: BoxProps; - popoverProps?: PopoverProps; + inPortal?: boolean; + children: ReactElement; }; -const IAIInformationalPopover = forwardRef( - ({ feature, children, wrapperProps, ...rest }: Props, ref) => { - const { t } = useTranslation(); - const shouldEnableInformationalPopovers = useAppSelector( - (state) => state.system.shouldEnableInformationalPopovers - ); +const IAIInformationalPopover = ({ + feature, + children, + inPortal = true, + ...rest +}: Props) => { + const shouldEnableInformationalPopovers = useAppSelector( + (state) => state.system.shouldEnableInformationalPopovers + ); - const data = useMemo(() => POPOVER_DATA[feature], [feature]); + const data = useMemo(() => POPOVER_DATA[feature], [feature]); - const popoverProps = useMemo( - () => merge(omit(data, ['image', 'href', 'buttonLabel']), rest), - [data, rest] - ); + const popoverProps = useMemo( + () => merge(omit(data, ['image', 'href', 'buttonLabel']), rest), + [data, rest] + ); - const heading = useMemo( - () => t(`popovers.${feature}.heading`), - [feature, t] - ); - - const paragraphs = useMemo( - () => - t(`popovers.${feature}.paragraphs`, { - returnObjects: true, - }) ?? [], - [feature, t] - ); - - const handleClick = useCallback(() => { - if (!data?.href) { - return; - } - window.open(data.href); - }, [data?.href]); - - if (!shouldEnableInformationalPopovers) { - return ( - - {children} - - ); - } - - return ( - - - - {children} - - - - - - - - {heading && ( - <> - {heading} - - - )} - {data?.image && ( - <> - Optional Image - - - )} - {paragraphs.map((p) => ( - {p} - ))} - {data?.href && ( - <> - - - - )} - - - - - - ); + if (!shouldEnableInformationalPopovers) { + return children; } -); -IAIInformationalPopover.displayName = 'IAIInformationalPopover'; + return ( + + {children} + {inPortal ? ( + + + + ) : ( + + )} + + ); +}; export default memo(IAIInformationalPopover); + +type PopoverContentProps = { + data?: PopoverData; + feature: Feature; +}; + +const PopoverContent = ({ data, feature }: PopoverContentProps) => { + const { t } = useTranslation(); + + const heading = useMemo( + () => t(`popovers.${feature}.heading`), + [feature, t] + ); + + const paragraphs = useMemo( + () => + t(`popovers.${feature}.paragraphs`, { + returnObjects: true, + }) ?? [], + [feature, t] + ); + + const handleClick = useCallback(() => { + if (!data?.href) { + return; + } + window.open(data.href); + }, [data?.href]); + + return ( + + + + + {heading && ( + <> + {heading} + + + )} + {data?.image && ( + <> + Optional Image + + + )} + {paragraphs.map((p) => ( + {p} + ))} + {data?.href && ( + <> + + } + alignSelf="flex-end" + variant="link" + > + {t('common.learnMore') ?? heading} + + + )} + + + + ); +}; diff --git a/invokeai/frontend/web/src/common/components/IAIInformationalPopover/constants.ts b/invokeai/frontend/web/src/common/components/IAIInformationalPopover/constants.ts index 8960399b48..c48df92794 100644 --- a/invokeai/frontend/web/src/common/components/IAIInformationalPopover/constants.ts +++ b/invokeai/frontend/web/src/common/components/IAIInformationalPopover/constants.ts @@ -1,4 +1,4 @@ -import { PopoverProps } from '@chakra-ui/react'; +import type { PopoverProps } from '@chakra-ui/react'; export type Feature = | 'clipSkip' diff --git a/invokeai/frontend/web/src/common/components/IAIInput.tsx b/invokeai/frontend/web/src/common/components/IAIInput.tsx deleted file mode 100644 index 31dac20998..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIInput.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { - FormControl, - FormControlProps, - FormLabel, - Input, - InputProps, -} from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { stopPastePropagation } from 'common/util/stopPastePropagation'; -import { shiftKeyPressed } from 'features/ui/store/hotkeysSlice'; -import { - CSSProperties, - ChangeEvent, - KeyboardEvent, - memo, - useCallback, -} from 'react'; - -interface IAIInputProps extends InputProps { - label?: string; - labelPos?: 'top' | 'side'; - value?: string; - size?: string; - onChange?: (e: ChangeEvent) => void; - formControlProps?: Omit; -} - -const labelPosVerticalStyle: CSSProperties = { - display: 'flex', - flexDirection: 'row', - alignItems: 'center', - gap: 10, -}; - -const IAIInput = (props: IAIInputProps) => { - const { - label = '', - labelPos = 'top', - isDisabled = false, - isInvalid, - formControlProps, - ...rest - } = props; - - const dispatch = useAppDispatch(); - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.shiftKey) { - dispatch(shiftKeyPressed(true)); - } - }, - [dispatch] - ); - - const handleKeyUp = useCallback( - (e: KeyboardEvent) => { - if (!e.shiftKey) { - dispatch(shiftKeyPressed(false)); - } - }, - [dispatch] - ); - - return ( - - {label !== '' && {label}} - - - ); -}; - -export default memo(IAIInput); diff --git a/invokeai/frontend/web/src/common/components/IAIMantineInput.tsx b/invokeai/frontend/web/src/common/components/IAIMantineInput.tsx deleted file mode 100644 index a324f80770..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIMantineInput.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useColorMode } from '@chakra-ui/react'; -import { TextInput, TextInputProps } from '@mantine/core'; -import { useChakraThemeTokens } from 'common/hooks/useChakraThemeTokens'; -import { useCallback } from 'react'; -import { mode } from 'theme/util/mode'; - -type IAIMantineTextInputProps = TextInputProps; - -export default function IAIMantineTextInput(props: IAIMantineTextInputProps) { - const { ...rest } = props; - const { - base50, - base100, - base200, - base300, - base800, - base700, - base900, - accent500, - accent300, - } = useChakraThemeTokens(); - const { colorMode } = useColorMode(); - - const stylesFunc = useCallback( - () => ({ - input: { - color: mode(base900, base100)(colorMode), - backgroundColor: mode(base50, base900)(colorMode), - borderColor: mode(base200, base800)(colorMode), - borderWidth: 2, - outline: 'none', - ':focus': { - borderColor: mode(accent300, accent500)(colorMode), - }, - }, - label: { - color: mode(base700, base300)(colorMode), - fontWeight: 'normal' as const, - marginBottom: 4, - }, - }), - [ - accent300, - accent500, - base100, - base200, - base300, - base50, - base700, - base800, - base900, - colorMode, - ] - ); - - return ; -} diff --git a/invokeai/frontend/web/src/common/components/IAIMantineMultiSelect.tsx b/invokeai/frontend/web/src/common/components/IAIMantineMultiSelect.tsx deleted file mode 100644 index 5ea17f788c..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIMantineMultiSelect.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { FormControl, FormLabel, Tooltip, forwardRef } from '@chakra-ui/react'; -import { MultiSelect, MultiSelectProps } from '@mantine/core'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { shiftKeyPressed } from 'features/ui/store/hotkeysSlice'; -import { useMantineMultiSelectStyles } from 'mantine-theme/hooks/useMantineMultiSelectStyles'; -import { KeyboardEvent, RefObject, memo, useCallback } from 'react'; - -type IAIMultiSelectProps = Omit & { - tooltip?: string | null; - inputRef?: RefObject; - label?: string; -}; - -const IAIMantineMultiSelect = forwardRef((props: IAIMultiSelectProps, ref) => { - const { - searchable = true, - tooltip, - inputRef, - label, - disabled, - ...rest - } = props; - const dispatch = useAppDispatch(); - - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.shiftKey) { - dispatch(shiftKeyPressed(true)); - } - }, - [dispatch] - ); - - const handleKeyUp = useCallback( - (e: KeyboardEvent) => { - if (!e.shiftKey) { - dispatch(shiftKeyPressed(false)); - } - }, - [dispatch] - ); - - const styles = useMantineMultiSelectStyles(); - - return ( - - - {label && {label}} - - - - ); -}); - -IAIMantineMultiSelect.displayName = 'IAIMantineMultiSelect'; - -export default memo(IAIMantineMultiSelect); diff --git a/invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx b/invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx deleted file mode 100644 index 675314b421..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIMantineSearchableSelect.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { FormControl, FormLabel, Tooltip, forwardRef } from '@chakra-ui/react'; -import { Select, SelectProps } from '@mantine/core'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { shiftKeyPressed } from 'features/ui/store/hotkeysSlice'; -import { useMantineSelectStyles } from 'mantine-theme/hooks/useMantineSelectStyles'; -import { KeyboardEvent, RefObject, memo, useCallback, useState } from 'react'; - -export type IAISelectDataType = { - value: string; - label: string; - tooltip?: string; -}; - -type IAISelectProps = Omit & { - tooltip?: string | null; - label?: string; - inputRef?: RefObject; -}; - -const IAIMantineSearchableSelect = forwardRef((props: IAISelectProps, ref) => { - const { - searchable = true, - tooltip, - inputRef, - onChange, - label, - disabled, - ...rest - } = props; - const dispatch = useAppDispatch(); - - const [searchValue, setSearchValue] = useState(''); - - // we want to capture shift keypressed even when an input is focused - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.shiftKey) { - dispatch(shiftKeyPressed(true)); - } - }, - [dispatch] - ); - - const handleKeyUp = useCallback( - (e: KeyboardEvent) => { - if (!e.shiftKey) { - dispatch(shiftKeyPressed(false)); - } - }, - [dispatch] - ); - - // wrap onChange to clear search value on select - const handleChange = useCallback( - (v: string | null) => { - // cannot figure out why we were doing this, but it was causing an issue where if you - // select the currently-selected item, it reset the search value to empty - // setSearchValue(''); - - if (!onChange) { - return; - } - - onChange(v); - }, - [onChange] - ); - - const styles = useMantineSelectStyles(); - - return ( - - - {label && {label}} - - - - ); -}); - -IAIMantineSelect.displayName = 'IAIMantineSelect'; - -export default memo(IAIMantineSelect); diff --git a/invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithDescription.tsx b/invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithDescription.tsx deleted file mode 100644 index a61268c99e..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithDescription.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { Box, Text } from '@chakra-ui/react'; -import { forwardRef, memo } from 'react'; - -interface ItemProps extends React.ComponentPropsWithoutRef<'div'> { - label: string; - value: string; - description?: string; -} - -const IAIMantineSelectItemWithDescription = forwardRef< - HTMLDivElement, - ItemProps ->(({ label, description, ...rest }: ItemProps, ref) => ( - - - {label} - {description && ( - - {description} - - )} - - -)); - -IAIMantineSelectItemWithDescription.displayName = - 'IAIMantineSelectItemWithDescription'; - -export default memo(IAIMantineSelectItemWithDescription); diff --git a/invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithTooltip.tsx b/invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithTooltip.tsx deleted file mode 100644 index 056bd4a8fa..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIMantineSelectItemWithTooltip.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Box, Tooltip } from '@chakra-ui/react'; -import { Text } from '@mantine/core'; -import { forwardRef, memo } from 'react'; - -interface ItemProps extends React.ComponentPropsWithoutRef<'div'> { - label: string; - description?: string; - tooltip?: string; - disabled?: boolean; -} - -const IAIMantineSelectItemWithTooltip = forwardRef( - ( - { label, tooltip, description, disabled: _disabled, ...others }: ItemProps, - ref - ) => ( - - - - {label} - {description && ( - - {description} - - )} - - - - ) -); - -IAIMantineSelectItemWithTooltip.displayName = 'IAIMantineSelectItemWithTooltip'; - -export default memo(IAIMantineSelectItemWithTooltip); diff --git a/invokeai/frontend/web/src/common/components/IAINumberInput.tsx b/invokeai/frontend/web/src/common/components/IAINumberInput.tsx deleted file mode 100644 index cef39d7b96..0000000000 --- a/invokeai/frontend/web/src/common/components/IAINumberInput.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import { - FormControl, - FormControlProps, - FormLabel, - FormLabelProps, - NumberDecrementStepper, - NumberIncrementStepper, - NumberInput, - NumberInputField, - NumberInputFieldProps, - NumberInputProps, - NumberInputStepper, - NumberInputStepperProps, - Tooltip, - TooltipProps, - forwardRef, -} from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { stopPastePropagation } from 'common/util/stopPastePropagation'; -import { shiftKeyPressed } from 'features/ui/store/hotkeysSlice'; -import { clamp } from 'lodash-es'; -import { - FocusEvent, - KeyboardEvent, - memo, - useCallback, - useEffect, - useState, -} from 'react'; - -export const numberStringRegex = /^-?(0\.)?\.?$/; - -interface Props extends Omit { - label?: string; - showStepper?: boolean; - value?: number; - onChange: (v: number) => void; - min: number; - max: number; - clamp?: boolean; - isInteger?: boolean; - formControlProps?: FormControlProps; - formLabelProps?: FormLabelProps; - numberInputProps?: NumberInputProps; - numberInputFieldProps?: NumberInputFieldProps; - numberInputStepperProps?: NumberInputStepperProps; - tooltipProps?: Omit; -} - -/** - * Customized Chakra FormControl + NumberInput multi-part component. - */ -const IAINumberInput = forwardRef((props: Props, ref) => { - const { - label, - isDisabled = false, - showStepper = true, - isInvalid, - value, - onChange, - min, - max, - isInteger = true, - formControlProps, - formLabelProps, - numberInputFieldProps, - numberInputStepperProps, - tooltipProps, - ...rest - } = props; - - const dispatch = useAppDispatch(); - - /** - * Using a controlled input with a value that accepts decimals needs special - * handling. If the user starts to type in "1.5", by the time they press the - * 5, the value has been parsed from "1." to "1" and they end up with "15". - * - * To resolve this, this component keeps a the value as a string internally, - * and the UI component uses that. When a change is made, that string is parsed - * as a number and given to the `onChange` function. - */ - - const [valueAsString, setValueAsString] = useState(String(value)); - - /** - * When `value` changes (e.g. from a diff source than this component), we need - * to update the internal `valueAsString`, but only if the actual value is different - * from the current value. - */ - useEffect(() => { - if ( - !valueAsString.match(numberStringRegex) && - value !== Number(valueAsString) - ) { - setValueAsString(String(value)); - } - }, [value, valueAsString]); - - const handleOnChange = useCallback( - (v: string) => { - setValueAsString(v); - // This allows negatives and decimals e.g. '-123', `.5`, `-0.2`, etc. - if (!v.match(numberStringRegex)) { - // Cast the value to number. Floor it if it should be an integer. - onChange(isInteger ? Math.floor(Number(v)) : Number(v)); - } - }, - [isInteger, onChange] - ); - - /** - * Clicking the steppers allows the value to go outside bounds; we need to - * clamp it on blur and floor it if needed. - */ - const handleBlur = useCallback( - (e: FocusEvent) => { - const clamped = clamp( - isInteger ? Math.floor(Number(e.target.value)) : Number(e.target.value), - min, - max - ); - setValueAsString(String(clamped)); - onChange(clamped); - }, - [isInteger, max, min, onChange] - ); - - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.shiftKey) { - dispatch(shiftKeyPressed(true)); - } - }, - [dispatch] - ); - - const handleKeyUp = useCallback( - (e: KeyboardEvent) => { - if (!e.shiftKey) { - dispatch(shiftKeyPressed(false)); - } - }, - [dispatch] - ); - - return ( - - - {label && {label}} - - - {showStepper && ( - - - - - )} - - - - ); -}); - -IAINumberInput.displayName = 'IAINumberInput'; - -export default memo(IAINumberInput); diff --git a/invokeai/frontend/web/src/common/components/IAIOption.tsx b/invokeai/frontend/web/src/common/components/IAIOption.tsx deleted file mode 100644 index 9c8a611160..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIOption.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { useToken } from '@chakra-ui/react'; -import { ReactNode } from 'react'; - -type IAIOptionProps = { - children: ReactNode | string | number; - value: string | number; -}; - -export default function IAIOption(props: IAIOptionProps) { - const { children, value } = props; - const [base800, base200] = useToken('colors', ['base.800', 'base.200']); - - return ( - - ); -} diff --git a/invokeai/frontend/web/src/common/components/IAIPopover.tsx b/invokeai/frontend/web/src/common/components/IAIPopover.tsx deleted file mode 100644 index 51562b969c..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIPopover.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { - BoxProps, - Popover, - PopoverArrow, - PopoverContent, - PopoverProps, - PopoverTrigger, -} from '@chakra-ui/react'; -import { memo, ReactNode } from 'react'; - -export type IAIPopoverProps = PopoverProps & { - triggerComponent: ReactNode; - triggerContainerProps?: BoxProps; - children: ReactNode; - hasArrow?: boolean; -}; - -const IAIPopover = (props: IAIPopoverProps) => { - const { - triggerComponent, - children, - hasArrow = true, - isLazy = true, - ...rest - } = props; - - return ( - - {triggerComponent} - - {hasArrow && } - {children} - - - ); -}; - -export default memo(IAIPopover); diff --git a/invokeai/frontend/web/src/common/components/IAIScrollArea.tsx b/invokeai/frontend/web/src/common/components/IAIScrollArea.tsx deleted file mode 100644 index 5dc96859b5..0000000000 --- a/invokeai/frontend/web/src/common/components/IAIScrollArea.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { ScrollArea, ScrollAreaProps } from '@mantine/core'; - -type IAIScrollArea = ScrollAreaProps; - -export default function IAIScrollArea(props: IAIScrollArea) { - const { ...rest } = props; - return ( - - {props.children} - - ); -} diff --git a/invokeai/frontend/web/src/common/components/IAISelect.tsx b/invokeai/frontend/web/src/common/components/IAISelect.tsx deleted file mode 100644 index faa5732017..0000000000 --- a/invokeai/frontend/web/src/common/components/IAISelect.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { - FormControl, - FormLabel, - Select, - SelectProps, - Tooltip, - TooltipProps, -} from '@chakra-ui/react'; -import { memo, MouseEvent, useCallback } from 'react'; -import IAIOption from './IAIOption'; - -type IAISelectProps = SelectProps & { - label?: string; - tooltip?: string; - tooltipProps?: Omit; - validValues: - | Array - | Array<{ key: string; value: string | number }>; - horizontal?: boolean; - spaceEvenly?: boolean; -}; -/** - * Customized Chakra FormControl + Select multi-part component. - */ -const IAISelect = (props: IAISelectProps) => { - const { - label, - isDisabled, - validValues, - tooltip, - tooltipProps, - horizontal, - spaceEvenly, - ...rest - } = props; - const handleClick = useCallback((e: MouseEvent) => { - e.stopPropagation(); - e.nativeEvent.stopImmediatePropagation(); - e.nativeEvent.stopPropagation(); - e.nativeEvent.cancelBubble = true; - }, []); - return ( - - {label && ( - - {label} - - )} - - - - - ); -}; - -export default memo(IAISelect); diff --git a/invokeai/frontend/web/src/common/components/IAISimpleCheckbox.tsx b/invokeai/frontend/web/src/common/components/IAISimpleCheckbox.tsx deleted file mode 100644 index 47e328727d..0000000000 --- a/invokeai/frontend/web/src/common/components/IAISimpleCheckbox.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Checkbox, CheckboxProps, Text, useColorMode } from '@chakra-ui/react'; -import { memo, ReactElement } from 'react'; -import { mode } from 'theme/util/mode'; - -type IAISimpleCheckboxProps = CheckboxProps & { - label: string | ReactElement; -}; - -const IAISimpleCheckbox = (props: IAISimpleCheckboxProps) => { - const { label, ...rest } = props; - const { colorMode } = useColorMode(); - return ( - - - {label} - - - ); -}; - -export default memo(IAISimpleCheckbox); diff --git a/invokeai/frontend/web/src/common/components/IAISimpleMenu.tsx b/invokeai/frontend/web/src/common/components/IAISimpleMenu.tsx deleted file mode 100644 index 83a60887b5..0000000000 --- a/invokeai/frontend/web/src/common/components/IAISimpleMenu.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { - Menu, - MenuButton, - MenuItem, - MenuList, - MenuProps, - MenuListProps, - MenuItemProps, - IconButton, - Button, - IconButtonProps, - ButtonProps, -} from '@chakra-ui/react'; -import { memo, MouseEventHandler, ReactNode } from 'react'; -import { MdArrowDropDown, MdArrowDropUp } from 'react-icons/md'; - -interface IAIMenuItem { - item: ReactNode | string; - onClick: MouseEventHandler | undefined; -} - -interface IAIMenuProps { - menuType?: 'icon' | 'regular'; - buttonText?: string; - iconTooltip?: string; - isLazy?: boolean; - menuItems: IAIMenuItem[]; - menuProps?: MenuProps; - menuButtonProps?: IconButtonProps | ButtonProps; - menuListProps?: MenuListProps; - menuItemProps?: MenuItemProps; -} - -const IAISimpleMenu = (props: IAIMenuProps) => { - const { - menuType = 'icon', - iconTooltip, - buttonText, - isLazy = true, - menuItems, - menuProps, - menuButtonProps, - menuListProps, - menuItemProps, - } = props; - - const renderMenuItems = () => { - const menuItemsToRender: ReactNode[] = []; - menuItems.forEach((menuItem, index) => { - menuItemsToRender.push( - - {menuItem.item} - - ); - }); - return menuItemsToRender; - }; - - return ( - - {({ isOpen }) => ( - <> - : } - paddingX={0} - paddingY={menuType === 'regular' ? 2 : 0} - {...menuButtonProps} - > - {menuType === 'regular' && buttonText} - - - {renderMenuItems()} - - - )} - - ); -}; - -export default memo(IAISimpleMenu); diff --git a/invokeai/frontend/web/src/common/components/IAISlider.tsx b/invokeai/frontend/web/src/common/components/IAISlider.tsx deleted file mode 100644 index 3ed3ee1920..0000000000 --- a/invokeai/frontend/web/src/common/components/IAISlider.tsx +++ /dev/null @@ -1,366 +0,0 @@ -import { - FormControl, - FormControlProps, - FormLabel, - FormLabelProps, - HStack, - NumberDecrementStepper, - NumberIncrementStepper, - NumberInput, - NumberInputField, - NumberInputFieldProps, - NumberInputProps, - NumberInputStepper, - NumberInputStepperProps, - Slider, - SliderFilledTrack, - SliderMark, - SliderMarkProps, - SliderThumb, - SliderThumbProps, - SliderTrack, - SliderTrackProps, - Tooltip, - TooltipProps, - forwardRef, -} from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { roundDownToMultiple } from 'common/util/roundDownToMultiple'; -import { shiftKeyPressed } from 'features/ui/store/hotkeysSlice'; -import { clamp } from 'lodash-es'; -import { - FocusEvent, - KeyboardEvent, - MouseEvent, - memo, - useCallback, - useEffect, - useMemo, - useState, -} from 'react'; -import { useTranslation } from 'react-i18next'; -import { BiReset } from 'react-icons/bi'; -import IAIIconButton, { IAIIconButtonProps } from './IAIIconButton'; - -export type IAIFullSliderProps = { - label?: string; - value: number; - min?: number; - max?: number; - step?: number; - onChange: (v: number) => void; - withSliderMarks?: boolean; - withInput?: boolean; - isInteger?: boolean; - inputWidth?: string | number; - withReset?: boolean; - handleReset?: () => void; - tooltipSuffix?: string; - hideTooltip?: boolean; - isCompact?: boolean; - isDisabled?: boolean; - sliderMarks?: number[]; - sliderFormControlProps?: FormControlProps; - sliderFormLabelProps?: FormLabelProps; - sliderMarkProps?: Omit; - sliderTrackProps?: SliderTrackProps; - sliderThumbProps?: SliderThumbProps; - sliderNumberInputProps?: NumberInputProps; - sliderNumberInputFieldProps?: NumberInputFieldProps; - sliderNumberInputStepperProps?: NumberInputStepperProps; - sliderTooltipProps?: Omit; - sliderIAIIconButtonProps?: IAIIconButtonProps; -}; - -const IAISlider = forwardRef((props: IAIFullSliderProps, ref) => { - const [showTooltip, setShowTooltip] = useState(false); - const { - label, - value, - min = 1, - max = 100, - step = 1, - onChange, - tooltipSuffix = '', - withSliderMarks = false, - withInput = false, - isInteger = false, - inputWidth = 16, - withReset = false, - hideTooltip = false, - isCompact = false, - isDisabled = false, - sliderMarks, - handleReset, - sliderFormControlProps, - sliderFormLabelProps, - sliderMarkProps, - sliderTrackProps, - sliderThumbProps, - sliderNumberInputProps, - sliderNumberInputFieldProps, - sliderNumberInputStepperProps, - sliderTooltipProps, - sliderIAIIconButtonProps, - ...rest - } = props; - const dispatch = useAppDispatch(); - const { t } = useTranslation(); - - const [localInputValue, setLocalInputValue] = useState< - string | number | undefined - >(String(value)); - - useEffect(() => { - setLocalInputValue(value); - }, [value]); - - const numberInputMin = useMemo( - () => (sliderNumberInputProps?.min ? sliderNumberInputProps.min : min), - [min, sliderNumberInputProps?.min] - ); - - const numberInputMax = useMemo( - () => (sliderNumberInputProps?.max ? sliderNumberInputProps.max : max), - [max, sliderNumberInputProps?.max] - ); - - const handleSliderChange = useCallback( - (v: number) => { - onChange(v); - }, - [onChange] - ); - - const handleInputBlur = useCallback( - (e: FocusEvent) => { - if (e.target.value === '') { - e.target.value = String(numberInputMin); - } - const clamped = clamp( - isInteger - ? Math.floor(Number(e.target.value)) - : Number(localInputValue), - numberInputMin, - numberInputMax - ); - const quantized = roundDownToMultiple(clamped, step); - onChange(quantized); - setLocalInputValue(quantized); - }, - [isInteger, localInputValue, numberInputMin, numberInputMax, onChange, step] - ); - - const handleInputChange = useCallback((v: number | string) => { - setLocalInputValue(v); - }, []); - - const handleResetDisable = useCallback(() => { - if (!handleReset) { - return; - } - handleReset(); - }, [handleReset]); - - const forceInputBlur = useCallback((e: MouseEvent) => { - if (e.target instanceof HTMLDivElement) { - e.target.focus(); - } - }, []); - - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.shiftKey) { - dispatch(shiftKeyPressed(true)); - } - }, - [dispatch] - ); - - const handleKeyUp = useCallback( - (e: KeyboardEvent) => { - if (!e.shiftKey) { - dispatch(shiftKeyPressed(false)); - } - }, - [dispatch] - ); - - const handleMouseEnter = useCallback(() => setShowTooltip(true), []); - const handleMouseLeave = useCallback(() => setShowTooltip(false), []); - const handleStepperClick = useCallback( - () => onChange(Number(localInputValue)), - [localInputValue, onChange] - ); - - return ( - - {label && ( - - {label} - - )} - - - - {withSliderMarks && !sliderMarks && ( - <> - - {min} - - - {max} - - - )} - {withSliderMarks && sliderMarks && ( - <> - {sliderMarks.map((m, i) => { - if (i === 0) { - return ( - - {m} - - ); - } else if (i === sliderMarks.length - 1) { - return ( - - {m} - - ); - } else { - return ( - - {m} - - ); - } - })} - - )} - - - - - - - - - {withInput && ( - - - - - - - - )} - - {withReset && ( - } - isDisabled={isDisabled} - onClick={handleResetDisable} - {...sliderIAIIconButtonProps} - /> - )} - - - ); -}); - -IAISlider.displayName = 'IAISlider'; - -export default memo(IAISlider); diff --git a/invokeai/frontend/web/src/common/components/IAISwitch.tsx b/invokeai/frontend/web/src/common/components/IAISwitch.tsx deleted file mode 100644 index 8773be49e5..0000000000 --- a/invokeai/frontend/web/src/common/components/IAISwitch.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { - Flex, - FormControl, - FormControlProps, - FormHelperText, - FormLabel, - FormLabelProps, - Switch, - SwitchProps, - Text, - Tooltip, -} from '@chakra-ui/react'; -import { memo } from 'react'; - -export interface IAISwitchProps extends SwitchProps { - label?: string; - width?: string | number; - formControlProps?: FormControlProps; - formLabelProps?: FormLabelProps; - tooltip?: string; - helperText?: string; -} - -/** - * Customized Chakra FormControl + Switch multi-part component. - */ -const IAISwitch = (props: IAISwitchProps) => { - const { - label, - isDisabled = false, - width = 'auto', - formControlProps, - formLabelProps, - tooltip, - helperText, - ...rest - } = props; - return ( - - - - - {label && ( - - {label} - - )} - - - {helperText && ( - - {helperText} - - )} - - - - ); -}; - -IAISwitch.displayName = 'IAISwitch'; - -export default memo(IAISwitch); diff --git a/invokeai/frontend/web/src/common/components/IAITextarea.tsx b/invokeai/frontend/web/src/common/components/IAITextarea.tsx deleted file mode 100644 index e29c6fe513..0000000000 --- a/invokeai/frontend/web/src/common/components/IAITextarea.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { Textarea, TextareaProps, forwardRef } from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { stopPastePropagation } from 'common/util/stopPastePropagation'; -import { shiftKeyPressed } from 'features/ui/store/hotkeysSlice'; -import { KeyboardEvent, memo, useCallback } from 'react'; - -const IAITextarea = forwardRef((props: TextareaProps, ref) => { - const dispatch = useAppDispatch(); - const handleKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.shiftKey) { - dispatch(shiftKeyPressed(true)); - } - }, - [dispatch] - ); - - const handleKeyUp = useCallback( - (e: KeyboardEvent) => { - if (!e.shiftKey) { - dispatch(shiftKeyPressed(false)); - } - }, - [dispatch] - ); - - return ( -